Repository: hrvach/deskhop Branch: main Commit: be55d7f7aeeb Files: 563 Total size: 12.4 MB Directory structure: gitextract_phg38h2d/ ├── .github/ │ └── workflows/ │ └── build.yml ├── .gitignore ├── CMakeLists.txt ├── LICENSE ├── Pico-PIO-USB/ │ ├── CMakeLists.txt │ └── src/ │ ├── pio_usb.c │ ├── pio_usb.h │ ├── pio_usb_configuration.h │ ├── pio_usb_device.c │ ├── pio_usb_host.c │ ├── pio_usb_ll.h │ ├── usb_crc.c │ ├── usb_crc.h │ ├── usb_definitions.h │ ├── usb_rx.pio │ ├── usb_rx.pio.h │ ├── usb_tx.pio │ └── usb_tx.pio.h ├── README.md ├── case/ │ ├── bottom.stl │ ├── deskhop_case.f3d │ ├── deskhop_case.step │ └── top.stl ├── disk/ │ ├── create.sh │ ├── disk.S │ └── disk.img ├── misc/ │ ├── .clang-format │ ├── .editorconfig │ ├── .markdownlint.yaml │ ├── Dockerfile │ ├── crc32.py │ ├── docker.yml │ └── memory_map.ld ├── pcb/ │ ├── v1.0/ │ │ ├── DeskHop.kicad_pcb │ │ ├── DeskHop.kicad_prl │ │ ├── DeskHop.kicad_pro │ │ ├── DeskHop.kicad_sch │ │ └── Gerber/ │ │ ├── DeskHop-B_Cu.gbr │ │ ├── DeskHop-B_Mask.gbr │ │ ├── DeskHop-B_Paste.gbr │ │ ├── DeskHop-B_Silkscreen.gbr │ │ ├── DeskHop-Edge_Cuts.gbr │ │ ├── DeskHop-F_Cu.gbr │ │ ├── DeskHop-F_Mask.gbr │ │ ├── DeskHop-F_Paste.gbr │ │ ├── DeskHop-F_Silkscreen.gbr │ │ ├── DeskHop-NPTH.drl │ │ ├── DeskHop-PTH.drl │ │ └── DeskHop-job.gbrjob │ └── v1.1/ │ ├── DeskHop_Rev1.kicad_pcb │ ├── DeskHop_Rev1.kicad_pro │ ├── DeskHop_Rev1.kicad_sch │ └── Gerber/ │ ├── DeskHop_Rev1-B_Cu.gbr │ ├── DeskHop_Rev1-B_Mask.gbr │ ├── DeskHop_Rev1-B_Silkscreen.gbr │ ├── DeskHop_Rev1-Edge_Cuts.gbr │ ├── DeskHop_Rev1-F_Cu.gbr │ ├── DeskHop_Rev1-F_Mask.gbr │ ├── DeskHop_Rev1-F_Paste.gbr │ ├── DeskHop_Rev1-F_Silkscreen.gbr │ ├── DeskHop_Rev1-NPTH.drl │ ├── DeskHop_Rev1-PTH.drl │ └── DeskHop_Rev1-job.gbrjob ├── pico-sdk/ │ ├── CMakeLists.txt │ ├── cmake/ │ │ ├── Platform/ │ │ │ └── PICO.cmake │ │ ├── pico_pre_load_platform.cmake │ │ ├── pico_pre_load_toolchain.cmake │ │ ├── pico_utils.cmake │ │ └── preload/ │ │ ├── platforms/ │ │ │ ├── host.cmake │ │ │ ├── pico/ │ │ │ │ └── pico.cmake │ │ │ └── rp2040.cmake │ │ └── toolchains/ │ │ ├── find_compiler.cmake │ │ ├── pico_arm_clang.cmake │ │ ├── pico_arm_clang_arm.cmake │ │ ├── pico_arm_gcc.cmake │ │ └── set_flags.cmake │ ├── lib/ │ │ └── tinyusb/ │ │ ├── LICENSE │ │ ├── hw/ │ │ │ └── bsp/ │ │ │ ├── ansi_escape.h │ │ │ ├── board.c │ │ │ ├── board_api.h │ │ │ ├── board_mcu.h │ │ │ ├── family_support.cmake │ │ │ └── rp2040/ │ │ │ ├── board.h │ │ │ ├── boards/ │ │ │ │ ├── pico_sdk/ │ │ │ │ │ └── board.cmake │ │ │ │ └── raspberry_pi_pico/ │ │ │ │ └── board.cmake │ │ │ ├── family.c │ │ │ ├── family.cmake │ │ │ ├── family.mk │ │ │ ├── pico_sdk_import.cmake │ │ │ └── rp2040-openocd.cfg │ │ └── src/ │ │ ├── CMakeLists.txt │ │ ├── class/ │ │ │ ├── cdc/ │ │ │ │ ├── cdc.h │ │ │ │ ├── cdc_device.c │ │ │ │ ├── cdc_device.h │ │ │ │ └── serial/ │ │ │ │ ├── cp210x.h │ │ │ │ └── ftdi_sio.h │ │ │ ├── hid/ │ │ │ │ ├── hid.h │ │ │ │ ├── hid_device.c │ │ │ │ ├── hid_device.h │ │ │ │ ├── hid_host.c │ │ │ │ └── hid_host.h │ │ │ └── msc/ │ │ │ ├── msc.h │ │ │ ├── msc_device.c │ │ │ └── msc_device.h │ │ ├── common/ │ │ │ ├── tusb_common.h │ │ │ ├── tusb_compiler.h │ │ │ ├── tusb_debug.h │ │ │ ├── tusb_fifo.c │ │ │ ├── tusb_fifo.h │ │ │ ├── tusb_mcu.h │ │ │ ├── tusb_private.h │ │ │ ├── tusb_types.h │ │ │ └── tusb_verify.h │ │ ├── device/ │ │ │ ├── dcd.h │ │ │ ├── usbd.c │ │ │ ├── usbd.h │ │ │ ├── usbd_control.c │ │ │ └── usbd_pvt.h │ │ ├── host/ │ │ │ ├── hcd.h │ │ │ ├── hub.c │ │ │ ├── hub.h │ │ │ ├── usbh.c │ │ │ ├── usbh.h │ │ │ └── usbh_pvt.h │ │ ├── osal/ │ │ │ ├── osal.h │ │ │ ├── osal_none.h │ │ │ └── osal_pico.h │ │ ├── portable/ │ │ │ └── raspberrypi/ │ │ │ ├── pio_usb/ │ │ │ │ ├── dcd_pio_usb.c │ │ │ │ └── hcd_pio_usb.c │ │ │ └── rp2040/ │ │ │ ├── dcd_rp2040.c │ │ │ ├── hcd_rp2040.c │ │ │ ├── rp2040_usb.c │ │ │ └── rp2040_usb.h │ │ ├── tinyusb.mk │ │ ├── tusb.c │ │ ├── tusb.h │ │ ├── tusb_option.h │ │ └── typec/ │ │ ├── pd_types.h │ │ ├── tcd.h │ │ ├── usbc.c │ │ └── usbc.h │ ├── pico_sdk_import.cmake │ ├── pico_sdk_init.cmake │ ├── pico_sdk_version.cmake │ ├── src/ │ │ ├── CMakeLists.txt │ │ ├── board_setup.cmake │ │ ├── boards/ │ │ │ ├── generic_board.cmake │ │ │ ├── include/ │ │ │ │ └── boards/ │ │ │ │ ├── none.h │ │ │ │ ├── pico.h │ │ │ │ └── pico_w.h │ │ │ └── pico_w.cmake │ │ ├── common/ │ │ │ ├── CMakeLists.txt │ │ │ ├── README.md │ │ │ ├── boot_picoboot/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── boot/ │ │ │ │ └── picoboot.h │ │ │ ├── boot_uf2/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── boot/ │ │ │ │ └── uf2.h │ │ │ ├── pico_base/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── generate_config_header.cmake │ │ │ │ └── include/ │ │ │ │ ├── pico/ │ │ │ │ │ ├── assert.h │ │ │ │ │ ├── config.h │ │ │ │ │ ├── error.h │ │ │ │ │ ├── types.h │ │ │ │ │ └── version.h.in │ │ │ │ └── pico.h │ │ │ ├── pico_binary_info/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ ├── binary_info/ │ │ │ │ │ ├── code.h │ │ │ │ │ ├── defs.h │ │ │ │ │ └── structure.h │ │ │ │ └── binary_info.h │ │ │ ├── pico_bit_ops/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ └── bit_ops.h │ │ │ ├── pico_divider/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ └── divider.h │ │ │ ├── pico_stdlib/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ └── stdlib.h │ │ │ ├── pico_sync/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── critical_section.c │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ ├── critical_section.h │ │ │ │ │ ├── lock_core.h │ │ │ │ │ ├── mutex.h │ │ │ │ │ ├── sem.h │ │ │ │ │ └── sync.h │ │ │ │ ├── lock_core.c │ │ │ │ ├── mutex.c │ │ │ │ └── sem.c │ │ │ ├── pico_time/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ ├── time.h │ │ │ │ │ └── timeout_helper.h │ │ │ │ ├── time.c │ │ │ │ └── timeout_helper.c │ │ │ ├── pico_usb_reset_interface/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ └── usb_reset_interface.h │ │ │ └── pico_util/ │ │ │ ├── CMakeLists.txt │ │ │ ├── datetime.c │ │ │ ├── doc.h │ │ │ ├── include/ │ │ │ │ └── pico/ │ │ │ │ └── util/ │ │ │ │ ├── datetime.h │ │ │ │ ├── pheap.h │ │ │ │ └── queue.h │ │ │ ├── pheap.c │ │ │ └── queue.c │ │ ├── rp2040/ │ │ │ ├── CMakeLists.txt │ │ │ ├── README.md │ │ │ ├── hardware_regs/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ ├── platform_defs.h │ │ │ │ └── regs/ │ │ │ │ ├── adc.h │ │ │ │ ├── addressmap.h │ │ │ │ ├── busctrl.h │ │ │ │ ├── clocks.h │ │ │ │ ├── dma.h │ │ │ │ ├── dreq.h │ │ │ │ ├── i2c.h │ │ │ │ ├── intctrl.h │ │ │ │ ├── io_bank0.h │ │ │ │ ├── io_qspi.h │ │ │ │ ├── m0plus.h │ │ │ │ ├── pads_bank0.h │ │ │ │ ├── pads_qspi.h │ │ │ │ ├── pio.h │ │ │ │ ├── pll.h │ │ │ │ ├── psm.h │ │ │ │ ├── pwm.h │ │ │ │ ├── resets.h │ │ │ │ ├── rosc.h │ │ │ │ ├── rtc.h │ │ │ │ ├── sio.h │ │ │ │ ├── spi.h │ │ │ │ ├── ssi.h │ │ │ │ ├── syscfg.h │ │ │ │ ├── sysinfo.h │ │ │ │ ├── tbman.h │ │ │ │ ├── timer.h │ │ │ │ ├── uart.h │ │ │ │ ├── usb.h │ │ │ │ ├── usb_device_dpram.h │ │ │ │ ├── vreg_and_chip_reset.h │ │ │ │ ├── watchdog.h │ │ │ │ ├── xip.h │ │ │ │ └── xosc.h │ │ │ └── hardware_structs/ │ │ │ ├── CMakeLists.txt │ │ │ └── include/ │ │ │ └── hardware/ │ │ │ └── structs/ │ │ │ ├── adc.h │ │ │ ├── bus_ctrl.h │ │ │ ├── clocks.h │ │ │ ├── dma.h │ │ │ ├── i2c.h │ │ │ ├── interp.h │ │ │ ├── iobank0.h │ │ │ ├── ioqspi.h │ │ │ ├── mpu.h │ │ │ ├── nvic.h │ │ │ ├── pads_qspi.h │ │ │ ├── padsbank0.h │ │ │ ├── pio.h │ │ │ ├── pll.h │ │ │ ├── psm.h │ │ │ ├── pwm.h │ │ │ ├── resets.h │ │ │ ├── rosc.h │ │ │ ├── rtc.h │ │ │ ├── scb.h │ │ │ ├── sio.h │ │ │ ├── spi.h │ │ │ ├── ssi.h │ │ │ ├── syscfg.h │ │ │ ├── systick.h │ │ │ ├── timer.h │ │ │ ├── uart.h │ │ │ ├── usb.h │ │ │ ├── vreg_and_chip_reset.h │ │ │ ├── watchdog.h │ │ │ ├── xip_ctrl.h │ │ │ └── xosc.h │ │ ├── rp2040.cmake │ │ ├── rp2_common/ │ │ │ ├── CMakeLists.txt │ │ │ ├── README.md │ │ │ ├── boot_stage2/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── asminclude/ │ │ │ │ │ └── boot2_helpers/ │ │ │ │ │ ├── exit_from_boot2.S │ │ │ │ │ ├── read_flash_sreg.S │ │ │ │ │ └── wait_ssi_ready.S │ │ │ │ ├── boot2_at25sf128a.S │ │ │ │ ├── boot2_generic_03h.S │ │ │ │ ├── boot2_is25lp080.S │ │ │ │ ├── boot2_usb_blinky.S │ │ │ │ ├── boot2_w25q080.S │ │ │ │ ├── boot2_w25x10cl.S │ │ │ │ ├── boot_stage2.ld │ │ │ │ ├── compile_time_choice.S │ │ │ │ ├── doc.h │ │ │ │ ├── include/ │ │ │ │ │ └── boot_stage2/ │ │ │ │ │ └── config.h │ │ │ │ └── pad_checksum │ │ │ ├── cmsis/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── cmsis/ │ │ │ │ │ └── rename_exceptions.h │ │ │ │ └── stub/ │ │ │ │ └── CMSIS/ │ │ │ │ ├── Core/ │ │ │ │ │ └── Include/ │ │ │ │ │ ├── cmsis_armcc.h │ │ │ │ │ ├── cmsis_armclang.h │ │ │ │ │ ├── cmsis_armclang_ltm.h │ │ │ │ │ ├── cmsis_compiler.h │ │ │ │ │ ├── cmsis_gcc.h │ │ │ │ │ ├── cmsis_iccarm.h │ │ │ │ │ ├── cmsis_version.h │ │ │ │ │ ├── core_cm0plus.h │ │ │ │ │ └── mpu_armv7.h │ │ │ │ ├── Device/ │ │ │ │ │ └── RaspberryPi/ │ │ │ │ │ └── RP2040/ │ │ │ │ │ ├── Include/ │ │ │ │ │ │ ├── RP2040.h │ │ │ │ │ │ └── system_RP2040.h │ │ │ │ │ └── Source/ │ │ │ │ │ └── system_RP2040.c │ │ │ │ └── LICENSE.txt │ │ │ ├── hardware_adc/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── adc.c │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ └── adc.h │ │ │ ├── hardware_base/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ └── address_mapped.h │ │ │ ├── hardware_claim/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── claim.c │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ └── claim.h │ │ │ ├── hardware_clocks/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── clocks.c │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── clocks.h │ │ │ │ └── scripts/ │ │ │ │ └── vcocalc.py │ │ │ ├── hardware_divider/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── divider.S │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ ├── divider.h │ │ │ │ └── divider_helper.S │ │ │ ├── hardware_dma/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── dma.c │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ └── dma.h │ │ │ ├── hardware_exception/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── exception.c │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ └── exception.h │ │ │ ├── hardware_flash/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── flash.c │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ └── flash.h │ │ │ ├── hardware_gpio/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── gpio.c │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ └── gpio.h │ │ │ ├── hardware_i2c/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── i2c.c │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ └── i2c.h │ │ │ ├── hardware_interp/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── interp.h │ │ │ │ └── interp.c │ │ │ ├── hardware_irq/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── irq.h │ │ │ │ ├── irq.c │ │ │ │ └── irq_handler_chain.S │ │ │ ├── hardware_pio/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ ├── pio.h │ │ │ │ │ └── pio_instructions.h │ │ │ │ └── pio.c │ │ │ ├── hardware_pll/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── pll.h │ │ │ │ └── pll.c │ │ │ ├── hardware_pwm/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ └── pwm.h │ │ │ ├── hardware_resets/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── include/ │ │ │ │ └── hardware/ │ │ │ │ └── resets.h │ │ │ ├── hardware_rtc/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── rtc.h │ │ │ │ └── rtc.c │ │ │ ├── hardware_spi/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── spi.h │ │ │ │ └── spi.c │ │ │ ├── hardware_sync/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── sync.h │ │ │ │ └── sync.c │ │ │ ├── hardware_timer/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── timer.h │ │ │ │ └── timer.c │ │ │ ├── hardware_uart/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── uart.h │ │ │ │ └── uart.c │ │ │ ├── hardware_vreg/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── vreg.h │ │ │ │ └── vreg.c │ │ │ ├── hardware_watchdog/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── watchdog.h │ │ │ │ └── watchdog.c │ │ │ ├── hardware_xosc/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── hardware/ │ │ │ │ │ └── xosc.h │ │ │ │ └── xosc.c │ │ │ ├── pico_async_context/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── async_context_base.c │ │ │ │ ├── async_context_freertos.c │ │ │ │ ├── async_context_poll.c │ │ │ │ ├── async_context_threadsafe_background.c │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ ├── async_context.h │ │ │ │ ├── async_context_base.h │ │ │ │ ├── async_context_freertos.h │ │ │ │ ├── async_context_poll.h │ │ │ │ └── async_context_threadsafe_background.h │ │ │ ├── pico_bit_ops/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── bit_ops_aeabi.S │ │ │ ├── pico_bootrom/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── bootrom.c │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ ├── bootrom/ │ │ │ │ │ └── sf_table.h │ │ │ │ └── bootrom.h │ │ │ ├── pico_bootsel_via_double_reset/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── pico_bootsel_via_double_reset.c │ │ │ ├── pico_cxx_options/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── doc.h │ │ │ ├── pico_divider/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── divider.S │ │ │ ├── pico_double/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── double_aeabi.S │ │ │ │ ├── double_init_rom.c │ │ │ │ ├── double_math.c │ │ │ │ ├── double_none.S │ │ │ │ ├── double_v1_rom_shim.S │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ └── double.h │ │ │ ├── pico_fix/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── rp2040_usb_device_enumeration/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── fix/ │ │ │ │ │ └── rp2040_usb_device_enumeration.h │ │ │ │ └── rp2040_usb_device_enumeration.c │ │ │ ├── pico_flash/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── flash.c │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ └── flash.h │ │ │ ├── pico_float/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── float_aeabi.S │ │ │ │ ├── float_init_rom.c │ │ │ │ ├── float_math.c │ │ │ │ ├── float_none.S │ │ │ │ ├── float_v1_rom_shim.S │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ └── float.h │ │ │ ├── pico_i2c_slave/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── i2c_slave.c │ │ │ │ └── include/ │ │ │ │ └── pico/ │ │ │ │ └── i2c_slave.h │ │ │ ├── pico_int64_ops/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── int64_ops.h │ │ │ │ └── pico_int64_ops_aeabi.S │ │ │ ├── pico_malloc/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── malloc.h │ │ │ │ └── pico_malloc.c │ │ │ ├── pico_mem_ops/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── mem_ops.h │ │ │ │ ├── mem_ops.c │ │ │ │ └── mem_ops_aeabi.S │ │ │ ├── pico_multicore/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── multicore.h │ │ │ │ └── multicore.c │ │ │ ├── pico_platform/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ ├── asm_helper.S │ │ │ │ │ └── platform.h │ │ │ │ └── platform.c │ │ │ ├── pico_printf/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── printf.h │ │ │ │ ├── printf.c │ │ │ │ └── printf_none.S │ │ │ ├── pico_rand/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── rand.h │ │ │ │ └── rand.c │ │ │ ├── pico_runtime/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── runtime.h │ │ │ │ └── runtime.c │ │ │ ├── pico_standard_link/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── binary_info.c │ │ │ │ ├── crt0.S │ │ │ │ ├── doc.h │ │ │ │ ├── memmap_blocked_ram.ld │ │ │ │ ├── memmap_copy_to_ram.ld │ │ │ │ ├── memmap_default.ld │ │ │ │ ├── memmap_no_flash.ld │ │ │ │ └── new_delete.cpp │ │ │ ├── pico_stdio/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── LICENSE │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ ├── stdio/ │ │ │ │ │ │ └── driver.h │ │ │ │ │ └── stdio.h │ │ │ │ └── stdio.c │ │ │ ├── pico_stdio_semihosting/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── stdio_semihosting.h │ │ │ │ └── stdio_semihosting.c │ │ │ ├── pico_stdio_uart/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── stdio_uart.h │ │ │ │ └── stdio_uart.c │ │ │ ├── pico_stdio_usb/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ ├── pico/ │ │ │ │ │ │ ├── stdio_usb/ │ │ │ │ │ │ │ └── reset_interface.h │ │ │ │ │ │ └── stdio_usb.h │ │ │ │ │ └── tusb_config.h │ │ │ │ ├── reset_interface.c │ │ │ │ ├── stdio_usb.c │ │ │ │ └── stdio_usb_descriptors.c │ │ │ ├── pico_stdlib/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── stdlib.c │ │ │ ├── pico_unique_id/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── include/ │ │ │ │ │ └── pico/ │ │ │ │ │ └── unique_id.h │ │ │ │ └── unique_id.c │ │ │ └── tinyusb/ │ │ │ ├── CMakeLists.txt │ │ │ └── doc.h │ │ └── rp2_common.cmake │ └── tools/ │ ├── CMakeLists.txt │ ├── FindELF2UF2.cmake │ ├── FindPioasm.cmake │ ├── elf2uf2/ │ │ ├── CMakeLists.txt │ │ ├── elf.h │ │ └── main.cpp │ └── pioasm/ │ ├── CMakeLists.txt │ ├── ada_output.cpp │ ├── c_sdk_output.cpp │ ├── gen/ │ │ ├── lexer.cpp │ │ ├── location.h │ │ ├── parser.cpp │ │ └── parser.hpp │ ├── hex_output.cpp │ ├── lexer.ll │ ├── main.cpp │ ├── output_format.h │ ├── parser.yy │ ├── pio_assembler.cpp │ ├── pio_assembler.h │ ├── pio_disassembler.cpp │ ├── pio_disassembler.h │ ├── pio_types.h │ └── python_output.cpp ├── src/ │ ├── constants.c │ ├── defaults.c │ ├── handlers.c │ ├── hid_parser.c │ ├── hid_report.c │ ├── include/ │ │ ├── config.h │ │ ├── constants.h │ │ ├── dma.h │ │ ├── firmware.h │ │ ├── flash.h │ │ ├── handlers.h │ │ ├── hid_parser.h │ │ ├── hid_report.h │ │ ├── keyboard.h │ │ ├── main.h │ │ ├── misc.h │ │ ├── mouse.h │ │ ├── packet.h │ │ ├── pinout.h │ │ ├── protocol.h │ │ ├── screen.h │ │ ├── serial.h │ │ ├── setup.h │ │ ├── structs.h │ │ ├── tasks.h │ │ ├── tusb_config.h │ │ ├── usb_descriptors.h │ │ ├── user_config.h │ │ └── watchdog.h │ ├── keyboard.c │ ├── led.c │ ├── main.c │ ├── mouse.c │ ├── protocol.c │ ├── ramdisk.c │ ├── setup.c │ ├── tasks.c │ ├── uart.c │ ├── usb.c │ ├── usb_descriptors.c │ └── utils.c └── webconfig/ ├── .gitignore ├── Makefile ├── config-unpacked.htm ├── config.htm ├── form.py ├── render.py ├── requirements.txt └── templates/ ├── form.html ├── main.html ├── packer.j2 ├── script.js └── style.css ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/build.yml ================================================ name: Build on: push: branches: - main pull_request: branches: - main workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - name: Install build deps shell: bash run: | sudo apt-get install -y \ gcc-arm-none-eabi \ libnewlib-arm-none-eabi \ dosfstools - name: Checkout uses: actions/checkout@v4 - name: Render webconfig shell: bash working-directory: webconfig run: make - name: Build disk image shell: bash working-directory: disk run: ./create.sh - name: Build firmware shell: bash run: | cmake -S . -B build cmake --build build - name: Publish artifacts uses: actions/upload-artifact@v4 with: name: deskhop-gha-${{ github.run_number }} path: build/deskhop.uf2 ================================================ FILE: .gitignore ================================================ build .idea/ ================================================ FILE: CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.6) ## Version Configuration. ## Define e.g. 0.72 as major 0 and minor 72 set(VERSION_MAJOR 0) set(VERSION_MINOR 77) ## Release Type Selection option(DH_DEBUG "Build a debug version" OFF) option(DH_DEBUG_CDC_FLASH "Enable CDC command to trigger bootloader mode" OFF) ## Hardware Configuration set(DP_PIN_DEFAULT 14 CACHE STRING "Default USB D+ Pin Number") set(PIO_USE_TINYUSB 1 CACHE STRING "Make TinyUSB Manage the PIO USB Port") set(PICO_BOARD "pico") ## Pico SDK Configuration set(PICO_SDK_FETCH_FROM_GIT off) set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR}/pico-sdk) set(SRC_DIR ${CMAKE_CURRENT_LIST_DIR}/src) include(${PICO_SDK_PATH}/pico_sdk_import.cmake) ## Project Setup project(deskhop_project C CXX ASM) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) set(PICO_COPY_TO_RAM 1) ## Compiler Flags set(CMAKE_C_FLAGS "-Ofast -Wall -mcpu=cortex-m0plus -mtune=cortex-m0plus -fstack-usage") ## Initialize Pico SDK pico_sdk_init() ## PIO USB Library Setup set(PICO_PIO_USB_DIR ${CMAKE_CURRENT_LIST_DIR}/Pico-PIO-USB) add_library(Pico-PIO-USB STATIC ${PICO_PIO_USB_DIR}/src/pio_usb.c ${PICO_PIO_USB_DIR}/src/pio_usb_host.c ${PICO_PIO_USB_DIR}/src/usb_crc.c ) pico_generate_pio_header(Pico-PIO-USB ${PICO_PIO_USB_DIR}/src/usb_tx.pio) pico_generate_pio_header(Pico-PIO-USB ${PICO_PIO_USB_DIR}/src/usb_rx.pio) target_link_libraries(Pico-PIO-USB PRIVATE pico_stdlib pico_multicore hardware_pio hardware_dma ) target_include_directories(Pico-PIO-USB PRIVATE ${PICO_PIO_USB_DIR}) ## Source Files set(COMMON_SOURCES ${SRC_DIR}/usb_descriptors.c ${SRC_DIR}/defaults.c ${SRC_DIR}/constants.c ${SRC_DIR}/protocol.c ${SRC_DIR}/hid_parser.c ${SRC_DIR}/hid_report.c ${SRC_DIR}/utils.c ${SRC_DIR}/handlers.c ${SRC_DIR}/setup.c ${SRC_DIR}/keyboard.c ${SRC_DIR}/mouse.c ${SRC_DIR}/tasks.c ${SRC_DIR}/led.c ${SRC_DIR}/uart.c ${SRC_DIR}/usb.c ${SRC_DIR}/main.c ${SRC_DIR}/ramdisk.c ${PICO_TINYUSB_PATH}/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c ${PICO_TINYUSB_PATH}/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c ) ## Include Directories set(COMMON_INCLUDES ${SRC_DIR}/include ${PICO_PIO_USB_DIR}/src ) ## Library Dependencies set(COMMON_LINK_LIBRARIES pico_stdlib hardware_flash hardware_uart hardware_gpio hardware_pio hardware_dma tinyusb_device tinyusb_host pico_multicore pico_unique_id Pico-PIO-USB ) set(binary deskhop) ## Disk Image Configuration # This assembles disk.S, then updates the elf section in post-build # With the disk FAT image binary in /disk/disk.img set(DISK_ASM "${CMAKE_CURRENT_LIST_DIR}/disk/disk.S") set(DISK_BIN "${CMAKE_CURRENT_LIST_DIR}/disk/disk.img") set_property(SOURCE ${DISK_ASM} APPEND PROPERTY COMPILE_OPTIONS "-x" "assembler-with-cpp") add_executable(${binary} ${DISK_ASM}) target_sources(${binary} PUBLIC ${COMMON_SOURCES}) target_compile_definitions(${binary} PRIVATE VERSION_MAJOR=${VERSION_MAJOR} VERSION_MINOR=${VERSION_MINOR} PIO_USB_USE_TINYUSB=${PIO_USE_TINYUSB} PIO_USB_DP_PIN_DEFAULT=${DP_PIN_DEFAULT} __disk_file_path__="${DISK_BIN}" ) ## Support building a debug version if (DH_DEBUG) add_definitions(-DDH_DEBUG) endif() if (DH_DEBUG_CDC_FLASH) add_definitions(-DDH_DEBUG_CDC_FLASH) endif() target_include_directories(${binary} PUBLIC ${COMMON_INCLUDES}) target_link_libraries(${binary} PUBLIC ${COMMON_LINK_LIBRARIES}) ## Configure Pico Library pico_enable_stdio_usb(${binary} 0) pico_enable_stdio_uart(${binary} 0) pico_set_linker_script(${binary} ${CMAKE_SOURCE_DIR}/misc/memory_map.ld) ## Build other file formats as well pico_add_extra_outputs(${binary}) # For internal firmware use, to simplify comparison: 0.72 -> 172 math(EXPR FIRMWARE_VERSION "${VERSION_MAJOR} * 1000 + ${VERSION_MINOR} + 100") ## Post-Build Commands add_custom_command( TARGET ${binary} POST_BUILD COMMAND python3 ${CMAKE_SOURCE_DIR}/misc/crc32.py ${binary}.bin ${binary}.crc ${FIRMWARE_VERSION} COMMAND ${CMAKE_OBJCOPY} --update-section .section_metadata=${binary}.crc ${binary}.elf COMMAND ${CMAKE_OBJCOPY} -O binary ${binary}.elf ${binary}.bin COMMAND ${CMAKE_BINARY_DIR}/elf2uf2/elf2uf2 ${binary}.elf ${binary}.uf2 COMMENT "Update CRC32 section to match the actual binary" ) ## Linker Options target_link_options(${binary} PRIVATE -Xlinker --print-memory-usage ) ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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. This program 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: Pico-PIO-USB/CMakeLists.txt ================================================ set(lib_name pico_pio_usb) add_library(${lib_name} INTERFACE) set(dir ${CMAKE_CURRENT_LIST_DIR}/src) pico_generate_pio_header(${lib_name} ${dir}/usb_tx.pio) pico_generate_pio_header(${lib_name} ${dir}/usb_rx.pio) target_sources(${lib_name} INTERFACE ${dir}/pio_usb.c ${dir}/pio_usb_device.c ${dir}/pio_usb_host.c ${dir}/usb_crc.c ) target_link_libraries(${lib_name} INTERFACE pico_stdlib pico_multicore hardware_pio hardware_dma ) target_include_directories(${lib_name} INTERFACE ${dir}) # enable all warnings target_compile_options(${lib_name} INTERFACE -Wall -Wextra) ================================================ FILE: Pico-PIO-USB/src/pio_usb.c ================================================ /** * Copyright (c) 2021 sekigon-gonnoc */ #pragma GCC push_options #pragma GCC optimize("-O3") #include #include #include // memcpy #include "hardware/clocks.h" #include "hardware/dma.h" #include "hardware/pio.h" #include "hardware/sync.h" #include "pico/bootrom.h" #include "pico/stdlib.h" #include "pio_usb.h" #include "usb_definitions.h" #include "pio_usb_ll.h" #include "usb_crc.h" #include "usb_tx.pio.h" #include "usb_rx.pio.h" #define UNUSED_PARAMETER(x) (void)x usb_device_t pio_usb_device[PIO_USB_DEVICE_CNT]; pio_port_t pio_port[1]; root_port_t pio_usb_root_port[PIO_USB_ROOT_PORT_CNT]; endpoint_t pio_usb_ep_pool[PIO_USB_EP_POOL_CNT]; //--------------------------------------------------------------------+ // Bus functions //--------------------------------------------------------------------+ static void __no_inline_not_in_flash_func(send_pre)(const pio_port_t *pp) { uint8_t data[] = {USB_SYNC, USB_PID_PRE}; // send PRE token in full-speed pio_sm_set_enabled(pp->pio_usb_tx, pp->sm_tx, false); for (uint i = 0; i < USB_TX_EOP_DISABLER_LEN; ++i) { uint16_t instr = pp->fs_tx_pre_program->instructions[i + USB_TX_EOP_OFFSET]; pp->pio_usb_tx->instr_mem[pp->offset_tx + i + USB_TX_EOP_OFFSET] = instr; } SM_SET_CLKDIV(pp->pio_usb_tx, pp->sm_tx, pp->clk_div_fs_tx); dma_channel_transfer_from_buffer_now(pp->tx_ch, data, 2); pio_sm_set_enabled(pp->pio_usb_tx, pp->sm_tx, true); pp->pio_usb_tx->irq |= IRQ_TX_ALL_MASK; // clear complete flag pp->pio_usb_tx->irq_force |= IRQ_TX_EOP_MASK; // disable eop while ((pp->pio_usb_tx->irq & IRQ_TX_COMP_MASK) == 0) { continue; } // change bus speed to low-speed pio_sm_set_enabled(pp->pio_usb_tx, pp->sm_tx, false); for (uint i = 0; i < USB_TX_EOP_DISABLER_LEN; ++i) { uint16_t instr = pp->fs_tx_program->instructions[i + USB_TX_EOP_OFFSET]; pp->pio_usb_tx->instr_mem[pp->offset_tx + i + USB_TX_EOP_OFFSET] = instr; } SM_SET_CLKDIV(pp->pio_usb_tx, pp->sm_tx, pp->clk_div_ls_tx); pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_rx, false); SM_SET_CLKDIV_MAXSPEED(pp->pio_usb_rx, pp->sm_rx); pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_eop, false); SM_SET_CLKDIV(pp->pio_usb_rx, pp->sm_eop, pp->clk_div_ls_rx); pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_eop, true); } void __not_in_flash_func(pio_usb_bus_usb_transfer)(const pio_port_t *pp, uint8_t *data, uint16_t len) { if (pp->need_pre) { send_pre(pp); } dma_channel_transfer_from_buffer_now(pp->tx_ch, data, len); pio_sm_set_enabled(pp->pio_usb_tx, pp->sm_tx, true); pp->pio_usb_tx->irq |= IRQ_TX_ALL_MASK; // clear complete flag while ((pp->pio_usb_tx->irq & IRQ_TX_ALL_MASK) == 0) { continue; } } void __no_inline_not_in_flash_func(pio_usb_bus_send_handshake)( const pio_port_t *pp, uint8_t pid) { uint8_t data[] = {USB_SYNC, pid}; pio_usb_bus_usb_transfer(pp, data, sizeof(data)); } void __no_inline_not_in_flash_func(pio_usb_bus_send_token)(const pio_port_t *pp, uint8_t token, uint8_t addr, uint8_t ep_num) { uint8_t packet[4] = {USB_SYNC, token, 0, 0}; uint16_t dat = ((uint16_t)(ep_num & 0xf) << 7) | (addr & 0x7f); uint8_t crc = calc_usb_crc5(dat); packet[2] = dat & 0xff; packet[3] = (crc << 3) | ((dat >> 8) & 0x1f); pio_usb_bus_usb_transfer(pp, packet, sizeof(packet)); } void __no_inline_not_in_flash_func(pio_usb_bus_prepare_receive)(const pio_port_t *pp) { pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_rx, false); pio_sm_clear_fifos(pp->pio_usb_rx, pp->sm_rx); pio_sm_restart(pp->pio_usb_rx, pp->sm_rx); pio_sm_exec(pp->pio_usb_rx, pp->sm_rx, pp->rx_reset_instr); pio_sm_exec(pp->pio_usb_rx, pp->sm_rx, pp->rx_reset_instr2); } void __no_inline_not_in_flash_func(pio_usb_bus_start_receive)(const pio_port_t *pp) { pp->pio_usb_rx->ctrl |= (1 << pp->sm_rx); pp->pio_usb_rx->irq = IRQ_RX_ALL_MASK; } uint8_t __no_inline_not_in_flash_func(pio_usb_bus_wait_handshake)(pio_port_t* pp) { int16_t t = 240; int16_t idx = 0; while (t--) { if (pio_sm_get_rx_fifo_level(pp->pio_usb_rx, pp->sm_rx)) { uint8_t data = pio_sm_get(pp->pio_usb_rx, pp->sm_rx) >> 24; pp->usb_rx_buffer[idx++] = data; if (idx == 2) { break; } } } if (t > 0) { while ((pp->pio_usb_rx->irq & IRQ_RX_COMP_MASK) == 0) { continue; } } pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_rx, false); return pp->usb_rx_buffer[1]; } int __no_inline_not_in_flash_func(pio_usb_bus_receive_packet_and_handshake)( pio_port_t *pp, uint8_t handshake) { uint16_t crc = 0xffff; uint16_t crc_prev = 0xffff; uint16_t crc_prev2 = 0xffff; uint16_t crc_receive = 0xffff; uint16_t crc_receive_inverse; bool crc_match = false; int16_t t = 240; uint16_t idx = 0; while (t--) { if (pio_sm_get_rx_fifo_level(pp->pio_usb_rx, pp->sm_rx)) { uint8_t data = pio_sm_get(pp->pio_usb_rx, pp->sm_rx) >> 24; pp->usb_rx_buffer[idx++] = data; if (idx == 2) { break; } } } // timing critical start if (t > 0) { if (handshake == USB_PID_ACK) { while ((pp->pio_usb_rx->irq & IRQ_RX_COMP_MASK) == 0) { if (pio_sm_get_rx_fifo_level(pp->pio_usb_rx, pp->sm_rx)) { uint8_t data = pio_sm_get(pp->pio_usb_rx, pp->sm_rx) >> 24; crc_prev2 = crc_prev; crc_prev = crc; crc = update_usb_crc16(crc, data); pp->usb_rx_buffer[idx++] = data; crc_receive = (crc_receive >> 8) | (data << 8); crc_receive_inverse = crc_receive ^ 0xffff; crc_match = (crc_receive_inverse == crc_prev2); } } if (idx >= 4 && crc_match) { pio_usb_bus_send_handshake(pp, USB_PID_ACK); // timing critical end return idx - 4; } } else { // just discard received data since we NAK/STALL anyway while ((pp->pio_usb_rx->irq & IRQ_RX_COMP_MASK) == 0) { continue; } pio_sm_clear_fifos(pp->pio_usb_rx, pp->sm_rx); pio_usb_bus_send_handshake(pp, handshake); } } return -1; } static __always_inline void add_pio_host_rx_program(PIO pio, const pio_program_t *program, const pio_program_t *debug_program, uint *offset, int debug_pin) { if (debug_pin < 0) { *offset = pio_add_program(pio, program); } else { *offset = pio_add_program(pio, debug_program); } } static void __no_inline_not_in_flash_func(initialize_host_programs)( pio_port_t *pp, const pio_usb_configuration_t *c, root_port_t *port) { pp->offset_tx = pio_add_program(pp->pio_usb_tx, pp->fs_tx_program); usb_tx_fs_program_init(pp->pio_usb_tx, pp->sm_tx, pp->offset_tx, port->pin_dp, port->pin_dm); add_pio_host_rx_program(pp->pio_usb_rx, &usb_nrzi_decoder_program, &usb_nrzi_decoder_debug_program, &pp->offset_rx, c->debug_pin_rx); usb_rx_fs_program_init(pp->pio_usb_rx, pp->sm_rx, pp->offset_rx, port->pin_dp, port->pin_dm, c->debug_pin_rx); pp->rx_reset_instr = pio_encode_jmp(pp->offset_rx); pp->rx_reset_instr2 = pio_encode_set(pio_x, 0); add_pio_host_rx_program(pp->pio_usb_rx, &usb_edge_detector_program, &usb_edge_detector_debug_program, &pp->offset_eop, c->debug_pin_eop); eop_detect_fs_program_init(pp->pio_usb_rx, c->sm_eop, pp->offset_eop, port->pin_dp, port->pin_dm, true, c->debug_pin_eop); usb_tx_configure_pins(pp->pio_usb_tx, pp->sm_tx, port->pin_dp, port->pin_dm); pio_sm_set_jmp_pin(pp->pio_usb_rx, pp->sm_rx, port->pin_dp); pio_sm_set_jmp_pin(pp->pio_usb_rx, pp->sm_eop, port->pin_dm); pio_sm_set_in_pins(pp->pio_usb_rx, pp->sm_eop, port->pin_dp); } static void configure_tx_channel(uint8_t ch, PIO pio, uint sm) { dma_channel_config conf = dma_channel_get_default_config(ch); channel_config_set_read_increment(&conf, true); channel_config_set_write_increment(&conf, false); channel_config_set_transfer_data_size(&conf, DMA_SIZE_8); channel_config_set_dreq(&conf, pio_get_dreq(pio, sm, true)); dma_channel_set_config(ch, &conf, false); dma_channel_set_write_addr(ch, &pio->txf[sm], false); } static void apply_config(pio_port_t *pp, const pio_usb_configuration_t *c, root_port_t *port) { pp->pio_usb_tx = c->pio_tx_num == 0 ? pio0 : pio1; pp->sm_tx = c->sm_tx; pp->tx_ch = c->tx_ch; pp->pio_usb_rx = c->pio_rx_num == 0 ? pio0 : pio1; pp->sm_rx = c->sm_rx; pp->sm_eop = c->sm_eop; port->pin_dp = c->pin_dp; if (c->pinout == PIO_USB_PINOUT_DPDM) { port->pin_dm = c->pin_dp + 1; pp->fs_tx_program = &usb_tx_dpdm_program; pp->fs_tx_pre_program = &usb_tx_pre_dpdm_program; pp->ls_tx_program = &usb_tx_dmdp_program; } else { port->pin_dm = c->pin_dp - 1; pp->fs_tx_program = &usb_tx_dmdp_program; pp->fs_tx_pre_program = &usb_tx_pre_dmdp_program; pp->ls_tx_program = &usb_tx_dpdm_program; } pp->debug_pin_rx = c->debug_pin_rx; pp->debug_pin_eop = c->debug_pin_eop; pio_sm_claim(pp->pio_usb_tx, pp->sm_tx); pio_sm_claim(pp->pio_usb_rx, pp->sm_rx); pio_sm_claim(pp->pio_usb_rx, pp->sm_eop); } static void port_pin_drive_setting(const root_port_t *port) { gpio_set_slew_rate(port->pin_dp, GPIO_SLEW_RATE_FAST); gpio_set_slew_rate(port->pin_dm, GPIO_SLEW_RATE_FAST); gpio_set_drive_strength(port->pin_dp, GPIO_DRIVE_STRENGTH_12MA); gpio_set_drive_strength(port->pin_dm, GPIO_DRIVE_STRENGTH_12MA); } void pio_usb_bus_init(pio_port_t *pp, const pio_usb_configuration_t *c, root_port_t *root) { memset(root, 0, sizeof(root_port_t)); pp->pio_usb_tx = c->pio_tx_num == 0 ? pio0 : pio1; dma_claim_mask(1<tx_ch); configure_tx_channel(c->tx_ch, pp->pio_usb_tx, c->sm_tx); apply_config(pp, c, root); initialize_host_programs(pp, c, root); port_pin_drive_setting(root); root->initialized = true; root->dev_addr = 0; } //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ endpoint_t *pio_usb_get_endpoint(usb_device_t *device, uint8_t idx) { uint8_t ep_id = device->endpoint_id[idx]; if (ep_id == 0) { return NULL; } else if (ep_id >= 1) { return &pio_usb_ep_pool[ep_id - 1]; } return NULL; } int __no_inline_not_in_flash_func(pio_usb_get_in_data)(endpoint_t *ep, uint8_t *buffer, uint8_t len) { if (ep->has_transfer || ep->is_tx) { return -1; } if (ep->new_data_flag) { len = len < ep->actual_len ? len : ep->actual_len; memcpy(buffer, (void *)ep->buffer, len); ep->new_data_flag = false; return pio_usb_ll_transfer_start(ep, ep->buffer, ep->size) ? len : -1; } return -1; } int __no_inline_not_in_flash_func(pio_usb_set_out_data)(endpoint_t *ep, const uint8_t *buffer, uint8_t len) { if (ep->has_transfer || !ep->is_tx) { return -1; } return pio_usb_ll_transfer_start(ep, (uint8_t *)buffer, len) ? 0 : -1; } //--------------------------------------------------------------------+ // Low Level Function //--------------------------------------------------------------------+ void __no_inline_not_in_flash_func(pio_usb_ll_configure_endpoint)( endpoint_t *ep, uint8_t const *desc_endpoint) { const endpoint_descriptor_t *d = (const endpoint_descriptor_t *)desc_endpoint; ep->size = d->max_size[0] | (d->max_size[1] << 8); ep->ep_num = d->epaddr; ep->attr = d->attr; ep->interval = d->interval; ep->interval_counter = 0; ep->data_id = 0; } static inline __force_inline void prepare_tx_data(endpoint_t *ep) { uint16_t const xact_len = pio_usb_ll_get_transaction_len(ep); ep->buffer[0] = USB_SYNC; ep->buffer[1] = (ep->data_id == 1) ? USB_PID_DATA1 : USB_PID_DATA0; // USB_PID_SETUP also DATA0 memcpy(ep->buffer + 2, ep->app_buf, xact_len); uint16_t const crc16 = calc_usb_crc16(ep->app_buf, xact_len); ep->buffer[2 + xact_len] = crc16 & 0xff; ep->buffer[2 + xact_len + 1] = crc16 >> 8; } bool __no_inline_not_in_flash_func(pio_usb_ll_transfer_start)(endpoint_t *ep, uint8_t *buffer, uint16_t buflen) { if (ep->has_transfer) { return false; } ep->app_buf = buffer; ep->total_len = buflen; ep->actual_len = 0; if (ep->is_tx) { prepare_tx_data(ep); } else { ep->new_data_flag = false; } ep->transfer_started = false; ep->transfer_aborted = false; ep->has_transfer = true; return true; } bool __no_inline_not_in_flash_func(pio_usb_ll_transfer_continue)( endpoint_t *ep, uint16_t xferred_bytes) { ep->app_buf += xferred_bytes; ep->actual_len += xferred_bytes; ep->data_id ^= 1; if ((xferred_bytes < ep->size) || (ep->actual_len >= ep->total_len)) { // complete if all bytes transferred or short packet pio_usb_ll_transfer_complete(ep, PIO_USB_INTS_ENDPOINT_COMPLETE_BITS); return false; } else { if (ep->is_tx) { prepare_tx_data(ep); } return true; } } void __no_inline_not_in_flash_func(pio_usb_ll_transfer_complete)( endpoint_t *ep, uint32_t flag) { root_port_t *rport = PIO_USB_ROOT_PORT(ep->root_idx); uint32_t const ep_mask = (1u << (ep - pio_usb_ep_pool)); rport->ints |= flag; if (flag == PIO_USB_INTS_ENDPOINT_COMPLETE_BITS) { rport->ep_complete |= ep_mask; if (!ep->is_tx) { ep->new_data_flag = true; } } else if (flag == PIO_USB_INTS_ENDPOINT_ERROR_BITS) { rport->ep_error |= ep_mask; } else if (flag == PIO_USB_INTS_ENDPOINT_STALLED_BITS) { rport->ep_stalled |= ep_mask; } else { // something wrong } ep->has_transfer = false; } int pio_usb_host_add_port(uint8_t pin_dp, PIO_USB_PINOUT pinout) { for (int idx = 0; idx < PIO_USB_ROOT_PORT_CNT; idx++) { root_port_t *root = PIO_USB_ROOT_PORT(idx); if (!root->initialized) { root->pin_dp = pin_dp; if (pinout == PIO_USB_PINOUT_DPDM) { root->pin_dm = pin_dp + 1; } else { root->pin_dm = pin_dp - 1; } gpio_pull_down(pin_dp); gpio_pull_down(root->pin_dm); pio_gpio_init(pio_port[0].pio_usb_tx, pin_dp); pio_gpio_init(pio_port[0].pio_usb_tx, root->pin_dm); gpio_set_inover(pin_dp, GPIO_OVERRIDE_INVERT); gpio_set_inover(root->pin_dm, GPIO_OVERRIDE_INVERT); pio_sm_set_pindirs_with_mask(pio_port[0].pio_usb_tx, pio_port[0].sm_tx, 0, (1 << pin_dp) | (1 << root->pin_dm)); port_pin_drive_setting(root); root->initialized = true; return 0; } } return -1; } #pragma GCC pop_options ================================================ FILE: Pico-PIO-USB/src/pio_usb.h ================================================ #pragma once #include "pio_usb_configuration.h" #include "usb_definitions.h" #ifdef __cplusplus extern "C" { #endif // Host functions usb_device_t *pio_usb_host_init(const pio_usb_configuration_t *c); int pio_usb_host_add_port(uint8_t pin_dp, PIO_USB_PINOUT pinout); void pio_usb_host_task(void); void pio_usb_host_stop(void); void pio_usb_host_restart(void); uint32_t pio_usb_host_get_frame_number(void); // Call this every 1ms when skip_alarm_pool is true. void pio_usb_host_frame(void); // Device functions usb_device_t *pio_usb_device_init(const pio_usb_configuration_t *c, const usb_descriptor_buffers_t *buffers); void pio_usb_device_task(void); // Common functions endpoint_t *pio_usb_get_endpoint(usb_device_t *device, uint8_t idx); int pio_usb_get_in_data(endpoint_t *ep, uint8_t *buffer, uint8_t len); int pio_usb_set_out_data(endpoint_t *ep, const uint8_t *buffer, uint8_t len); // Misc functions int pio_usb_kbd_set_leds(usb_device_t *device, uint8_t port, uint8_t value); extern int dh_debug_printf(const char *format, ...); #ifdef __cplusplus } #endif ================================================ FILE: Pico-PIO-USB/src/pio_usb_configuration.h ================================================ #pragma once typedef enum { PIO_USB_PINOUT_DPDM = 0, // DM = DP+1 PIO_USB_PINOUT_DMDP, // DM = DP-1 } PIO_USB_PINOUT; typedef struct { uint8_t pin_dp; uint8_t pio_tx_num; uint8_t sm_tx; uint8_t tx_ch; uint8_t pio_rx_num; uint8_t sm_rx; uint8_t sm_eop; void* alarm_pool; int8_t debug_pin_rx; int8_t debug_pin_eop; bool skip_alarm_pool; PIO_USB_PINOUT pinout; } pio_usb_configuration_t; #ifndef PIO_USB_DP_PIN_DEFAULT #define PIO_USB_DP_PIN_DEFAULT 0 #endif #define PIO_USB_TX_DEFAULT 0 #define PIO_SM_USB_TX_DEFAULT 0 #define PIO_USB_DMA_TX_DEFAULT 0 #define PIO_USB_RX_DEFAULT 1 #define PIO_SM_USB_RX_DEFAULT 0 #define PIO_SM_USB_EOP_DEFAULT 1 #define PIO_USB_DEBUG_PIN_NONE (-1) #define PIO_USB_DEFAULT_CONFIG \ { \ PIO_USB_DP_PIN_DEFAULT, PIO_USB_TX_DEFAULT, PIO_SM_USB_TX_DEFAULT, \ PIO_USB_DMA_TX_DEFAULT, PIO_USB_RX_DEFAULT, PIO_SM_USB_RX_DEFAULT, \ PIO_SM_USB_EOP_DEFAULT, NULL, PIO_USB_DEBUG_PIN_NONE, \ PIO_USB_DEBUG_PIN_NONE, false, PIO_USB_PINOUT_DPDM \ } #define PIO_USB_EP_POOL_CNT 32 #define PIO_USB_DEV_EP_CNT 16 #define PIO_USB_DEVICE_CNT 1 #define PIO_USB_HUB_PORT_CNT 8 #define PIO_USB_ROOT_PORT_CNT 2 #define PIO_USB_EP_SIZE 64 ================================================ FILE: Pico-PIO-USB/src/pio_usb_device.c ================================================ /** * Copyright (c) 2021 sekigon-gonnoc * Ha Thach (thach@tinyusb.org) */ #pragma GCC push_options #pragma GCC optimize("-O3") #include #include #include #include #include "pio_usb.h" #include "pio_usb_ll.h" #include "usb_crc.h" #include "usb_rx.pio.h" #include "usb_tx.pio.h" #include "hardware/dma.h" #include "hardware/irq.h" static uint8_t new_devaddr = 0; static uint8_t ep0_crc5_lut[16]; static __unused usb_descriptor_buffers_t descriptor_buffers; static void __no_inline_not_in_flash_func(update_ep0_crc5_lut)(uint8_t addr) { uint16_t dat; uint8_t crc; for (int epnum = 0; epnum < 16; epnum++) { dat = (addr) | (epnum << 7); crc = calc_usb_crc5(dat); ep0_crc5_lut[epnum] = (crc << 3) | ((epnum >> 1) & 0x07); } } static __always_inline void restart_usb_reveiver(pio_port_t *pp) { pio_sm_exec(pp->pio_usb_rx, pp->sm_rx, pp->rx_reset_instr); pio_sm_exec(pp->pio_usb_rx, pp->sm_rx, pp->rx_reset_instr2); pio_sm_restart(pp->pio_usb_rx, pp->sm_rx); pp->pio_usb_rx->irq = IRQ_RX_ALL_MASK; } static __always_inline int8_t device_receive_token(uint8_t *buffer, uint8_t dev_addr) { pio_port_t *pp = PIO_USB_PIO_PORT(0); uint8_t idx = 0; uint8_t addr; uint8_t ep; bool match = false; static uint8_t eplut[2][8] = {{0, 2, 4, 6, 8, 10, 12, 14}, {1, 3, 5, 7, 9, 11, 13, 15}}; uint8_t *current_lut; if ((pp->pio_usb_rx->irq & IRQ_RX_COMP_MASK) == 0) { while ((pp->pio_usb_rx->irq & IRQ_RX_COMP_MASK) == 0) { if (pio_sm_get_rx_fifo_level(pp->pio_usb_rx, pp->sm_rx)) { buffer[idx++] = pio_sm_get(pp->pio_usb_rx, pp->sm_rx) >> 24; if ((idx == 3) && (buffer[1] != USB_PID_SOF)) { addr = buffer[2] & 0x7f; current_lut = &eplut[buffer[2] >> 7][0]; match = dev_addr == addr ? true : false; } } } } else { // host is probably timeout. Ignore this packets. pio_sm_clear_fifos(pp->pio_usb_rx, pp->sm_rx); } restart_usb_reveiver(pp); if (match) { ep = current_lut[buffer[3] & 0x07]; if (ep0_crc5_lut[ep] == buffer[3]) { return ep; } else { return -1; } } return -1; } static void __no_inline_not_in_flash_func(usb_device_packet_handler)(void) { static uint8_t token_buf[64]; pio_port_t *pp = PIO_USB_PIO_PORT(0); root_port_t *rport = PIO_USB_ROOT_PORT(0); // // time critical start // int8_t ep_num = device_receive_token(token_buf, rport->dev_addr); if (token_buf[1] == USB_PID_IN) { if (ep_num < 0) { return; } static uint8_t hand_shake_token[2] = {USB_SYNC, USB_PID_STALL}; endpoint_t *ep = PIO_USB_ENDPOINT((ep_num << 1) | 0x01); uint16_t const xact_len = pio_usb_ll_get_transaction_len(ep); pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_rx, false); volatile bool has_transfer = ep->has_transfer; if (has_transfer) { dma_channel_transfer_from_buffer_now(pp->tx_ch, ep->buffer, xact_len + 4); } else if (ep->stalled) { hand_shake_token[1] = USB_PID_STALL; dma_channel_transfer_from_buffer_now(pp->tx_ch, hand_shake_token, 2); } else { hand_shake_token[1] = USB_PID_NAK; dma_channel_transfer_from_buffer_now(pp->tx_ch, hand_shake_token, 2); } pp->pio_usb_tx->irq = IRQ_TX_ALL_MASK; // clear complete flag while ((pp->pio_usb_tx->irq & IRQ_TX_ALL_MASK) == 0) { continue; } if (has_transfer) { pp->pio_usb_rx->irq = IRQ_RX_ALL_MASK; irq_clear(pp->device_rx_irq_num); pio_usb_bus_start_receive(pp); // wait for ack pio_usb_bus_wait_handshake(pp); pio_usb_bus_start_receive(pp); irq_clear(pp->device_rx_irq_num); // // time critical end // if (ep->ep_num == 0x80 && new_devaddr > 0) { rport->dev_addr = new_devaddr; new_devaddr = 0; update_ep0_crc5_lut(rport->dev_addr); } pio_usb_ll_transfer_continue(ep, xact_len); } else { pp->pio_usb_rx->irq = IRQ_RX_ALL_MASK; irq_clear(pp->device_rx_irq_num); pio_usb_bus_start_receive(pp); // // time critical end // } } else if (token_buf[1] == USB_PID_OUT) { if (ep_num < 0) { return; } endpoint_t *ep = PIO_USB_ENDPOINT(ep_num << 1); uint8_t hanshake = ep->stalled ? USB_PID_STALL : (ep->has_transfer ? USB_PID_ACK : USB_PID_NAK); int res = pio_usb_bus_receive_packet_and_handshake(pp, hanshake); pio_sm_clear_fifos(pp->pio_usb_rx, pp->sm_rx); restart_usb_reveiver(pp); irq_clear(pp->device_rx_irq_num); if (ep->has_transfer) { if (res >= 0) { memcpy(ep->app_buf, pp->usb_rx_buffer + 2, res); pio_usb_ll_transfer_continue(ep, res); } } } else if (token_buf[1] == USB_PID_SETUP) { if (ep_num < 0) { return; } int res = pio_usb_bus_receive_packet_and_handshake(pp, USB_PID_ACK); pio_sm_clear_fifos(pp->pio_usb_rx, pp->sm_rx); restart_usb_reveiver(pp); irq_clear(pp->device_rx_irq_num); if (res >= 0) { rport->setup_packet = pp->usb_rx_buffer + 2; rport->ints |= PIO_USB_INTS_SETUP_REQ_BITS; // DATA1 for both data and status stage PIO_USB_ENDPOINT(0)->has_transfer = PIO_USB_ENDPOINT(1)->has_transfer = false; PIO_USB_ENDPOINT(0)->data_id = PIO_USB_ENDPOINT(1)->data_id = 1; PIO_USB_ENDPOINT(0)->stalled = PIO_USB_ENDPOINT(1)->stalled = false; } } else if (token_buf[1] == USB_PID_SOF) { // SOF interrupt } token_buf[0] = 0; // clear received token token_buf[1] = 0; if (rport->ints) { pio_usb_device_irq_handler(0); } } usb_device_t *pio_usb_device_init(const pio_usb_configuration_t *c, const usb_descriptor_buffers_t *buffers) { pio_port_t *pp = PIO_USB_PIO_PORT(0); root_port_t *rport = PIO_USB_ROOT_PORT(0); usb_device_t *dev = &pio_usb_device[0]; pio_usb_bus_init(pp, c, rport); rport->mode = PIO_USB_MODE_DEVICE; memset(dev, 0, sizeof(*dev)); for (int i = 0; i < PIO_USB_DEV_EP_CNT; i++) { dev->endpoint_id[i] = 2 * (i + 1); // only index IN endpoint } update_ep0_crc5_lut(rport->dev_addr); float const cpu_freq = (float)clock_get_hz(clk_sys); pio_calculate_clkdiv_from_float(cpu_freq / 48000000, &pp->clk_div_fs_tx.div_int, &pp->clk_div_fs_tx.div_frac); pio_calculate_clkdiv_from_float(cpu_freq / 96000000, &pp->clk_div_fs_rx.div_int, &pp->clk_div_fs_rx.div_frac); pio_sm_set_jmp_pin(pp->pio_usb_rx, pp->sm_rx, rport->pin_dp); SM_SET_CLKDIV_MAXSPEED(pp->pio_usb_rx, pp->sm_rx); pio_sm_set_jmp_pin(pp->pio_usb_rx, pp->sm_eop, rport->pin_dm); pio_sm_set_in_pins(pp->pio_usb_rx, pp->sm_eop, rport->pin_dp); SM_SET_CLKDIV(pp->pio_usb_rx, pp->sm_eop, pp->clk_div_fs_rx); descriptor_buffers = *buffers; pio_sm_set_enabled(pp->pio_usb_tx, pp->sm_tx, true); pio_usb_bus_prepare_receive(pp); pp->pio_usb_rx->ctrl |= (1 << pp->sm_rx); pp->pio_usb_rx->irq |= IRQ_RX_ALL_MASK; // configure PIOx_IRQ_0 to detect packet receive start pio_set_irqn_source_enabled(pp->pio_usb_rx, 0, pis_interrupt0 + IRQ_RX_START, true); pp->device_rx_irq_num = (pp->pio_usb_rx == pio0) ? PIO0_IRQ_0 : PIO1_IRQ_0; irq_set_exclusive_handler(pp->device_rx_irq_num, usb_device_packet_handler); irq_set_enabled(pp->device_rx_irq_num, true); return dev; } //--------------------------------------------------------------------+ // Device Controller functions //--------------------------------------------------------------------+ void pio_usb_device_set_address(uint8_t dev_addr) { new_devaddr = dev_addr; } bool __no_inline_not_in_flash_func(pio_usb_device_endpoint_open)( uint8_t const *desc_endpoint) { const endpoint_descriptor_t *d = (const endpoint_descriptor_t *)desc_endpoint; endpoint_t *ep = pio_usb_device_get_endpoint_by_address(d->epaddr); pio_usb_ll_configure_endpoint(ep, desc_endpoint); ep->root_idx = 0; ep->dev_addr = 0; // not used ep->need_pre = 0; ep->is_tx = (d->epaddr & 0x80) ? true : false; // device: endpoint in is tx return true; } bool pio_usb_device_transfer(uint8_t ep_address, uint8_t *buffer, uint16_t buflen) { endpoint_t *ep = pio_usb_device_get_endpoint_by_address(ep_address); return pio_usb_ll_transfer_start(ep, buffer, buflen); } //--------------------------------------------------------------------+ // USB Device Stack //--------------------------------------------------------------------+ static int8_t ep0_desc_request_type = -1; static uint16_t ep0_desc_request_len; static uint8_t ep0_desc_request_idx; static void __no_inline_not_in_flash_func(prepare_ep0_data)(uint8_t *data, uint8_t len) { // 0: control out (rx), 1 : control in (tx) endpoint_t *ep = &pio_usb_ep_pool[1]; pio_usb_ll_transfer_start(ep, data, len); if (len) { // there is data, prepare for status as well pio_usb_ll_transfer_start(&pio_usb_ep_pool[0], NULL, 0); } } static void __no_inline_not_in_flash_func(prepare_ep0_rx)(uint8_t *data, uint8_t len) { // 0: control out (rx), 1 : control in (tx) endpoint_t *ep = &pio_usb_ep_pool[0]; pio_usb_ll_transfer_start(ep, data, len); if (len) { // there is data, prepare for status as well pio_usb_ll_transfer_start(&pio_usb_ep_pool[1], NULL, 0); } } void pio_usb_device_task(void) { switch (ep0_desc_request_type) { case DESC_TYPE_CONFIG: { uint16_t req_len = ep0_desc_request_len; uint16_t desc_len = descriptor_buffers.config[2] | (descriptor_buffers.config[3] << 8); req_len = req_len > desc_len ? desc_len : req_len; prepare_ep0_data((uint8_t *)descriptor_buffers.config, req_len); ep0_desc_request_type = -1; } break; case DESC_TYPE_STRING: { const uint16_t *str = (uint16_t *)&descriptor_buffers.string[ep0_desc_request_idx]; prepare_ep0_data((uint8_t *)str, str[0] & 0xff); ep0_desc_request_type = -1; } break; case DESC_TYPE_HID_REPORT:{ prepare_ep0_data( (uint8_t *)descriptor_buffers.hid_report[ep0_desc_request_idx], ep0_desc_request_len); ep0_desc_request_type = -1; } default: break; } root_port_t *rport = PIO_USB_ROOT_PORT(0); uint32_t se0_time_us =0; while (pio_usb_bus_get_line_state(rport) == PORT_PIN_SE0) { busy_wait_us_32(1); se0_time_us++; if (se0_time_us == 1000) { memset(pio_usb_ep_pool, 0, sizeof(pio_usb_ep_pool)); rport->dev_addr = 0; update_ep0_crc5_lut(rport->dev_addr); // init endpoint control in/out PIO_USB_ENDPOINT(0)->size = 64; PIO_USB_ENDPOINT(0)->ep_num = 0; PIO_USB_ENDPOINT(0)->is_tx = false; PIO_USB_ENDPOINT(1)->size = 64; PIO_USB_ENDPOINT(1)->ep_num = 0x80; PIO_USB_ENDPOINT(1)->is_tx = true; // TODO should be reset end, this is reset start only rport->ep_complete = rport->ep_stalled = rport->ep_error = 0; rport->ints |= PIO_USB_INTS_RESET_END_BITS; pio_port_t *pp = PIO_USB_PIO_PORT(0); restart_usb_reveiver(pp); } } } static void __no_inline_not_in_flash_func(configure_all_endpoints)(uint8_t const *desc) { uint8_t const *desc_end = desc + (descriptor_buffers.config[2] | (descriptor_buffers.config[3] << 8)); while (desc < desc_end) { if (desc[1] == DESC_TYPE_ENDPOINT) { pio_usb_device_endpoint_open(desc); } desc += desc[0]; } } static int __no_inline_not_in_flash_func(process_device_setup_stage)(uint8_t *buffer) { int res = -1; const usb_setup_packet_t *packet = (usb_setup_packet_t *)buffer; if (packet->request_type == USB_REQ_DIR_IN) { if (packet->request == 0x06) { if (packet->value_msb == DESC_TYPE_DEVICE) { prepare_ep0_data((uint8_t *)descriptor_buffers.device, 18); res = 0; } else if (packet->value_msb == DESC_TYPE_CONFIG) { ep0_desc_request_len = (packet->length_lsb | (packet->length_msb << 8)); ep0_desc_request_type = DESC_TYPE_CONFIG; res = 0; } else if (packet->value_msb == DESC_TYPE_STRING) { if (descriptor_buffers.string != NULL) { ep0_desc_request_idx = packet->value_lsb; ep0_desc_request_type = DESC_TYPE_STRING; res = 0; } } } } else if (packet->request_type == USB_REQ_DIR_OUT) { if (packet->request == 0x05) { // set address new_devaddr = packet->value_lsb; prepare_ep0_data(NULL, 0); res = 0; } else if (packet->request == 0x09) { // set configuration configure_all_endpoints(descriptor_buffers.config); prepare_ep0_data(NULL, 0); res = 0; } } else if (packet->request_type == (USB_REQ_DIR_IN | USB_REQ_REC_IFACE)) { if (packet->request == 0x06 && packet->value_msb == DESC_TYPE_HID_REPORT) { // get hid report desc ep0_desc_request_len = (packet->length_lsb | (packet->length_msb << 8)); ep0_desc_request_idx = packet->index_lsb; ep0_desc_request_type = DESC_TYPE_HID_REPORT; res = 0; } } else if (packet->request_type == (USB_REQ_TYP_CLASS | USB_REQ_REC_IFACE)) { if (packet->request == 0x09) { // set hid report static __unused uint8_t received_hid_report[8]; // not used prepare_ep0_rx(received_hid_report, 8); res = 0; } else if (packet->request == 0x0A) { // set hid idle request prepare_ep0_data(NULL, 0); res = 0; } else if (packet->request == 0x0B) { // set hid protocol request prepare_ep0_data(NULL, 0); res = 0; } } else if (packet->request_type == (USB_REQ_REC_EP)) { prepare_ep0_data(NULL, 0); res = 0; } return res; } // IRQ Handler static void __no_inline_not_in_flash_func(__pio_usb_device_irq_handler)(uint8_t root_idx) { root_port_t *root = PIO_USB_ROOT_PORT(root_idx); usb_device_t *dev = &pio_usb_device[0]; uint32_t const ints = root->ints; if (ints & PIO_USB_INTS_RESET_END_BITS) { memset(dev, 0, sizeof(*dev)); for (int i = 0; i < PIO_USB_DEV_EP_CNT; i++) { dev->endpoint_id[i] = 2 * (i + 1); // only index IN endpoint } } if (ints & PIO_USB_INTS_SETUP_REQ_BITS) { process_device_setup_stage(root->setup_packet); dev->control_pipe.stage = STAGE_DATA; } if (ints & PIO_USB_INTS_ENDPOINT_COMPLETE_BITS) { const uint32_t ep_all = root->ep_complete; // control out if (ep_all & 0x01) { if (dev->control_pipe.stage == STAGE_STATUS) { dev->control_pipe.stage = STAGE_COMPLETE; } else if (dev->control_pipe.stage == STAGE_DATA) { dev->control_pipe.stage = STAGE_STATUS; prepare_ep0_data(NULL, 0); } } // control in if (ep_all & 0x02) { if (dev->control_pipe.stage == STAGE_STATUS) { dev->control_pipe.stage = STAGE_COMPLETE; } } // clear all root->ep_complete &= ~ep_all; } // clear all root->ints &= ~ints; } // weak alias to __pio_usb_device_irq_handler void pio_usb_device_irq_handler(uint8_t root_id) __attribute__ ((weak, alias("__pio_usb_device_irq_handler"))); #pragma GCC pop_options ================================================ FILE: Pico-PIO-USB/src/pio_usb_host.c ================================================ /** * Copyright (c) 2021 sekigon-gonnoc * Ha Thach (thach@tinyusb.org) */ #pragma GCC push_options #pragma GCC optimize("-O3") #include #include #include #include #include "hardware/sync.h" #include "pio_usb.h" #include "pio_usb_ll.h" #include "usb_crc.h" #include "usb_rx.pio.h" #include "usb_tx.pio.h" static alarm_pool_t *_alarm_pool = NULL; static repeating_timer_t sof_rt; // The sof_count may be incremented and then read on different cores. static volatile uint32_t sof_count = 0; static bool timer_active; static volatile bool cancel_timer_flag; static volatile bool start_timer_flag; static __unused uint32_t int_stat; static bool sof_timer(repeating_timer_t *_rt); //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ static void start_timer(alarm_pool_t *alarm_pool) { if (timer_active) { return; } if (alarm_pool != NULL) { alarm_pool_add_repeating_timer_us(alarm_pool, -1000, sof_timer, NULL, &sof_rt); } timer_active = true; } static __unused void stop_timer(void) { cancel_repeating_timer(&sof_rt); timer_active = false; } usb_device_t *pio_usb_host_init(const pio_usb_configuration_t *c) { pio_port_t *pp = PIO_USB_PIO_PORT(0); root_port_t *root = PIO_USB_ROOT_PORT(0); pio_usb_bus_init(pp, c, root); root->mode = PIO_USB_MODE_HOST; float const cpu_freq = (float)clock_get_hz(clk_sys); pio_calculate_clkdiv_from_float(cpu_freq / 48000000, &pp->clk_div_fs_tx.div_int, &pp->clk_div_fs_tx.div_frac); pio_calculate_clkdiv_from_float(cpu_freq / 6000000, &pp->clk_div_ls_tx.div_int, &pp->clk_div_ls_tx.div_frac); pio_calculate_clkdiv_from_float(cpu_freq / 96000000, &pp->clk_div_fs_rx.div_int, &pp->clk_div_fs_rx.div_frac); pio_calculate_clkdiv_from_float(cpu_freq / 12000000, &pp->clk_div_ls_rx.div_int, &pp->clk_div_ls_rx.div_frac); if (!c->skip_alarm_pool) { _alarm_pool = c->alarm_pool; if (!_alarm_pool) { _alarm_pool = alarm_pool_create(2, 1); } } start_timer(_alarm_pool); return &pio_usb_device[0]; } void pio_usb_host_stop(void) { cancel_timer_flag = true; while (cancel_timer_flag) { continue; } } void pio_usb_host_restart(void) { start_timer_flag = true; while (start_timer_flag) { continue; } } //--------------------------------------------------------------------+ // Bus functions //--------------------------------------------------------------------+ static void __no_inline_not_in_flash_func(override_pio_program)(PIO pio, const pio_program_t* program, uint offset) { for (uint i = 0; i < program->length; ++i) { uint16_t instr = program->instructions[i]; pio->instr_mem[offset + i] = pio_instr_bits_jmp != _pio_major_instr_bits(instr) ? instr : instr + offset; } } static __always_inline void override_pio_rx_program(PIO pio, const pio_program_t *program, const pio_program_t *debug_program, uint offset, int debug_pin) { if (debug_pin < 0) { override_pio_program(pio, program, offset); } else { override_pio_program(pio, debug_program, offset); } } static void __no_inline_not_in_flash_func(configure_fullspeed_host)( pio_port_t const *pp, root_port_t *port) { override_pio_program(pp->pio_usb_tx, pp->fs_tx_program, pp->offset_tx); SM_SET_CLKDIV(pp->pio_usb_tx, pp->sm_tx, pp->clk_div_fs_tx); pio_sm_set_jmp_pin(pp->pio_usb_rx, pp->sm_rx, port->pin_dp); SM_SET_CLKDIV_MAXSPEED(pp->pio_usb_rx, pp->sm_rx); pio_sm_set_jmp_pin(pp->pio_usb_rx, pp->sm_eop, port->pin_dm); pio_sm_set_in_pins(pp->pio_usb_rx, pp->sm_eop, port->pin_dp); SM_SET_CLKDIV(pp->pio_usb_rx, pp->sm_eop, pp->clk_div_fs_rx); usb_tx_configure_pins(pp->pio_usb_tx, pp->sm_tx, port->pin_dp, port->pin_dm); } static void __no_inline_not_in_flash_func(configure_lowspeed_host)( pio_port_t const *pp, root_port_t *port) { override_pio_program(pp->pio_usb_tx, pp->ls_tx_program, pp->offset_tx); SM_SET_CLKDIV(pp->pio_usb_tx, pp->sm_tx, pp->clk_div_ls_tx); pio_sm_set_jmp_pin(pp->pio_usb_rx, pp->sm_rx, port->pin_dm); SM_SET_CLKDIV_MAXSPEED(pp->pio_usb_rx, pp->sm_rx); pio_sm_set_jmp_pin(pp->pio_usb_rx, pp->sm_eop, port->pin_dp); pio_sm_set_in_pins(pp->pio_usb_rx, pp->sm_eop, port->pin_dm); SM_SET_CLKDIV(pp->pio_usb_rx, pp->sm_eop, pp->clk_div_ls_rx); usb_tx_configure_pins(pp->pio_usb_tx, pp->sm_tx, port->pin_dp, port->pin_dm); } static void __no_inline_not_in_flash_func(configure_root_port)( pio_port_t *pp, root_port_t *root) { if (root->is_fullspeed) { configure_fullspeed_host(pp, root); } else { configure_lowspeed_host(pp, root); } } static void __no_inline_not_in_flash_func(restore_fs_bus)(const pio_port_t *pp) { // change bus speed to full-speed pio_sm_set_enabled(pp->pio_usb_tx, pp->sm_tx, false); SM_SET_CLKDIV(pp->pio_usb_tx, pp->sm_tx, pp->clk_div_fs_tx); pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_rx, false); SM_SET_CLKDIV_MAXSPEED(pp->pio_usb_rx, pp->sm_rx); pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_rx, true); pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_eop, false); SM_SET_CLKDIV(pp->pio_usb_rx, pp->sm_eop, pp->clk_div_fs_rx); pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_eop, true); } // Time about 1us ourselves so it lives in RAM. static void __not_in_flash_func(busy_wait_1_us)(void) { uint32_t start = timer_hw->timerawl; while (timer_hw->timerawl == start) { tight_loop_contents(); } } static bool __no_inline_not_in_flash_func(connection_check)(root_port_t *port) { if (pio_usb_bus_get_line_state(port) == PORT_PIN_SE0) { busy_wait_1_us(); if (pio_usb_bus_get_line_state(port) == PORT_PIN_SE0) { busy_wait_1_us(); // device disconnect port->connected = false; port->suspended = true; port->ints |= PIO_USB_INTS_DISCONNECT_BITS; // failed/retired all queuing transfer in this root uint8_t root_idx = port - PIO_USB_ROOT_PORT(0); for (int ep_idx = 0; ep_idx < PIO_USB_EP_POOL_CNT; ep_idx++) { endpoint_t *ep = PIO_USB_ENDPOINT(ep_idx); if ((ep->root_idx == root_idx) && ep->size && ep->has_transfer) { pio_usb_ll_transfer_complete(ep, PIO_USB_INTS_ENDPOINT_ERROR_BITS); } } return false; } } return true; } //--------------------------------------------------------------------+ // SOF //--------------------------------------------------------------------+ static int usb_setup_transaction(pio_port_t *pp, endpoint_t *ep); static int usb_in_transaction(pio_port_t *pp, endpoint_t *ep); static int usb_out_transaction(pio_port_t *pp, endpoint_t *ep); void __not_in_flash_func(pio_usb_host_frame)(void) { if (!timer_active) { return; } static uint8_t sof_packet[4] = {USB_SYNC, USB_PID_SOF, 0x00, 0x10}; pio_port_t *pp = PIO_USB_PIO_PORT(0); // Send SOF for (int root_idx = 0; root_idx < PIO_USB_ROOT_PORT_CNT; root_idx++) { root_port_t *root = PIO_USB_ROOT_PORT(root_idx); if (!(root->initialized && root->connected && !root->suspended && connection_check(root))) { continue; } configure_root_port(pp, root); pio_usb_bus_usb_transfer(pp, sof_packet, 4); } // Carry out all queued endpoint transaction for (int root_idx = 0; root_idx < PIO_USB_ROOT_PORT_CNT; root_idx++) { root_port_t *root = PIO_USB_ROOT_PORT(root_idx); if (!(root->initialized && root->connected && !root->suspended)) { continue; } configure_root_port(pp, root); for (int ep_pool_idx = 0; ep_pool_idx < PIO_USB_EP_POOL_CNT; ep_pool_idx++) { endpoint_t *ep = PIO_USB_ENDPOINT(ep_pool_idx); if ((ep->root_idx == root_idx) && ep->size) { bool const is_periodic = ((ep->attr & 0x03) == EP_ATTR_INTERRUPT); if (is_periodic && (ep->interval_counter > 0)) { ep->interval_counter--; continue; } if (ep->has_transfer && !ep->transfer_aborted) { ep->transfer_started = true; if (ep->need_pre) { pp->need_pre = true; } if (ep->ep_num == 0 && ep->data_id == USB_PID_SETUP) { usb_setup_transaction(pp, ep); } else { if (ep->ep_num & EP_IN) { usb_in_transaction(pp, ep); } else { usb_out_transaction(pp, ep); } if (is_periodic) { ep->interval_counter = ep->interval - 1; } } if (ep->need_pre) { pp->need_pre = false; restore_fs_bus(pp); } ep->transfer_started = false; } } } } // check for new connection to root hub for (int root_idx = 0; root_idx < PIO_USB_ROOT_PORT_CNT; root_idx++) { root_port_t *root = PIO_USB_ROOT_PORT(root_idx); if (root->initialized && !root->connected) { port_pin_status_t const line_state = pio_usb_bus_get_line_state(root); if (line_state == PORT_PIN_FS_IDLE || line_state == PORT_PIN_LS_IDLE) { root->is_fullspeed = (line_state == PORT_PIN_FS_IDLE); root->connected = true; root->suspended = true; // need a bus reset before operating root->ints |= PIO_USB_INTS_CONNECT_BITS; } } } // Invoke IRQHandler if interrupt status is set for (uint8_t root_idx = 0; root_idx < PIO_USB_ROOT_PORT_CNT; root_idx++) { if (PIO_USB_ROOT_PORT(root_idx)->ints) { pio_usb_host_irq_handler(root_idx); } } sof_count++; // SOF counter is 11-bit uint16_t const sof_count_11b = sof_count & 0x7ff; sof_packet[2] = sof_count_11b & 0xff; sof_packet[3] = (calc_usb_crc5(sof_count_11b) << 3) | (sof_count_11b >> 8); } static bool __no_inline_not_in_flash_func(sof_timer)(repeating_timer_t *_rt) { (void)_rt; pio_usb_host_frame(); return true; } //--------------------------------------------------------------------+ // Host Controller functions //--------------------------------------------------------------------+ uint32_t pio_usb_host_get_frame_number(void) { return sof_count; } void pio_usb_host_port_reset_start(uint8_t root_idx) { root_port_t *root = PIO_USB_ROOT_PORT(root_idx); pio_port_t *pp = PIO_USB_PIO_PORT(0); // bus is not operating while in reset root->suspended = true; // Force line state to SE0 pio_sm_set_pins_with_mask(pp->pio_usb_tx, pp->sm_tx, 0, (1 << root->pin_dp) | (1 << root->pin_dm)); pio_sm_set_pindirs_with_mask(pp->pio_usb_tx, pp->sm_tx, (1 << root->pin_dp) | (1 << root->pin_dm), (1 << root->pin_dp) | (1 << root->pin_dm)); } void pio_usb_host_port_reset_end(uint8_t root_idx) { root_port_t *root = PIO_USB_ROOT_PORT(root_idx); pio_port_t *pp = PIO_USB_PIO_PORT(0); // line state to input pio_sm_set_pindirs_with_mask(pp->pio_usb_tx, pp->sm_tx, 0, (1 << root->pin_dp) | (1 << root->pin_dm)); busy_wait_us(100); // TODO check if this is neccessary // bus back to operating root->suspended = false; } void pio_usb_host_close_device(uint8_t root_idx, uint8_t device_address) { for (int ep_pool_idx = 0; ep_pool_idx < PIO_USB_EP_POOL_CNT; ep_pool_idx++) { endpoint_t *ep = PIO_USB_ENDPOINT(ep_pool_idx); if ((ep->root_idx == root_idx) && (ep->dev_addr == device_address) && ep->size) { ep->size = 0; ep->has_transfer = false; } } } static inline __force_inline endpoint_t * _find_ep(uint8_t root_idx, uint8_t device_address, uint8_t ep_address) { for (int ep_pool_idx = 0; ep_pool_idx < PIO_USB_EP_POOL_CNT; ep_pool_idx++) { endpoint_t *ep = PIO_USB_ENDPOINT(ep_pool_idx); // note 0x00 and 0x80 are matched as control endpoint of opposite direction if ((ep->root_idx == root_idx) && (ep->dev_addr == device_address) && ep->size && ((ep->ep_num == ep_address) || (((ep_address & 0x7f) == 0) && ((ep->ep_num & 0x7f) == 0)))) { return ep; } } return NULL; } bool pio_usb_host_endpoint_open(uint8_t root_idx, uint8_t device_address, uint8_t const *desc_endpoint, bool need_pre) { const endpoint_descriptor_t *d = (const endpoint_descriptor_t *)desc_endpoint; for (int ep_pool_idx = 0; ep_pool_idx < PIO_USB_EP_POOL_CNT; ep_pool_idx++) { endpoint_t *ep = PIO_USB_ENDPOINT(ep_pool_idx); // ep size is used as valid indicator if (ep->size == 0) { pio_usb_ll_configure_endpoint(ep, desc_endpoint); ep->root_idx = root_idx; ep->dev_addr = device_address; ep->need_pre = need_pre; ep->is_tx = (d->epaddr & 0x80) ? false : true; // host endpoint out is tx return true; } } return false; } bool pio_usb_host_send_setup(uint8_t root_idx, uint8_t device_address, uint8_t const setup_packet[8]) { endpoint_t *ep = _find_ep(root_idx, device_address, 0); if (!ep) { dh_debug_printf("cannot find ep 0x00\r\n"); return false; } ep->ep_num = 0; // setup is is OUT ep->data_id = USB_PID_SETUP; ep->is_tx = true; return pio_usb_ll_transfer_start(ep, (uint8_t *)setup_packet, 8); } bool pio_usb_host_endpoint_transfer(uint8_t root_idx, uint8_t device_address, uint8_t ep_address, uint8_t *buffer, uint16_t buflen) { endpoint_t *ep = _find_ep(root_idx, device_address, ep_address); if (!ep) { dh_debug_printf("no endpoint 0x%02X\r\n", ep_address); return false; } // Control endpoint, address may switch between 0x00 <-> 0x80 // therefore we need to update ep_num and is_tx if ((ep_address & 0x7f) == 0) { ep->ep_num = ep_address; ep->is_tx = ep_address == 0; ep->data_id = 1; // data and status always start with DATA1 } return pio_usb_ll_transfer_start(ep, buffer, buflen); } bool pio_usb_host_endpoint_abort_transfer(uint8_t root_idx, uint8_t device_address, uint8_t ep_address) { endpoint_t *ep = _find_ep(root_idx, device_address, ep_address); if (!ep) { dh_debug_printf("no endpoint 0x%02X\r\n", ep_address); return false; } if (!ep->has_transfer) { return false; // no transfer to abort } // mark transfer as aborted ep->transfer_aborted = true; // Race potential: SOF timer can be called before transfer_aborted is actually set // and started the transfer. Wait 1 usb frame for transaction to complete. // On the next SOF timer, transfer_aborted will be checked and skipped while (ep->has_transfer && ep->transfer_started) { busy_wait_ms(1); } // check if transfer is still active (could be completed) bool const still_active = ep->has_transfer; if (still_active) { ep->has_transfer = false; } ep->transfer_aborted = false; return still_active; // still active means transfer is successfully aborted } //--------------------------------------------------------------------+ // Transaction helper //--------------------------------------------------------------------+ static int __no_inline_not_in_flash_func(usb_in_transaction)(pio_port_t *pp, endpoint_t *ep) { int res = 0; uint8_t expect_pid = (ep->data_id == 1) ? USB_PID_DATA1 : USB_PID_DATA0; pio_usb_bus_prepare_receive(pp); pio_usb_bus_send_token(pp, USB_PID_IN, ep->dev_addr, ep->ep_num); pio_usb_bus_start_receive(pp); int receive_len = pio_usb_bus_receive_packet_and_handshake(pp, USB_PID_ACK); uint8_t const receive_pid = pp->usb_rx_buffer[1]; if (receive_len >= 0) { if (receive_pid == expect_pid) { memcpy(ep->app_buf, &pp->usb_rx_buffer[2], receive_len); pio_usb_ll_transfer_continue(ep, receive_len); } else { // DATA0/1 mismatched, 0 for re-try next frame } } else if (receive_pid == USB_PID_NAK) { // NAK try again next frame } else if (receive_pid == USB_PID_STALL) { pio_usb_ll_transfer_complete(ep, PIO_USB_INTS_ENDPOINT_STALLED_BITS); } else { res = -1; if ((pp->pio_usb_rx->irq & IRQ_RX_COMP_MASK) == 0) { res = -2; } pio_usb_ll_transfer_complete(ep, PIO_USB_INTS_ENDPOINT_ERROR_BITS); } pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_rx, false); pp->usb_rx_buffer[0] = 0; pp->usb_rx_buffer[1] = 0; return res; } static int __no_inline_not_in_flash_func(usb_out_transaction)(pio_port_t *pp, endpoint_t *ep) { int res = 0; uint16_t const xact_len = pio_usb_ll_get_transaction_len(ep); pio_usb_bus_prepare_receive(pp); pio_usb_bus_send_token(pp, USB_PID_OUT, ep->dev_addr, ep->ep_num); // ensure previous tx complete while ((pp->pio_usb_tx->irq & IRQ_TX_COMP_MASK) == 0) { continue; } pio_usb_bus_usb_transfer(pp, ep->buffer, xact_len + 4); pio_usb_bus_start_receive(pp); pio_usb_bus_wait_handshake(pp); uint8_t const receive_token = pp->usb_rx_buffer[1]; if (receive_token == USB_PID_ACK) { pio_usb_ll_transfer_continue(ep, xact_len); } else if (receive_token == USB_PID_NAK) { // NAK try again next frame } else if (receive_token == USB_PID_STALL) { pio_usb_ll_transfer_complete(ep, PIO_USB_INTS_ENDPOINT_STALLED_BITS); } else { pio_usb_ll_transfer_complete(ep, PIO_USB_INTS_ENDPOINT_ERROR_BITS); } pio_sm_set_enabled(pp->pio_usb_rx, pp->sm_rx, false); pp->usb_rx_buffer[0] = 0; pp->usb_rx_buffer[1] = 0; return res; } static int __no_inline_not_in_flash_func(usb_setup_transaction)( pio_port_t *pp, endpoint_t *ep) { int res = 0; // Setup token pio_usb_bus_prepare_receive(pp); pio_usb_bus_send_token(pp, USB_PID_SETUP, ep->dev_addr, 0); // ensure previous tx complete while ((pp->pio_usb_tx->irq & IRQ_TX_COMP_MASK) == 0) { continue; } // Data ep->data_id = 0; // set to DATA0 pio_usb_bus_usb_transfer(pp, ep->buffer, 12); // Handshake pio_usb_bus_start_receive(pp); pio_usb_bus_wait_handshake(pp); ep->actual_len = 8; if (pp->usb_rx_buffer[0] == USB_SYNC && pp->usb_rx_buffer[1] == USB_PID_ACK) { pio_usb_ll_transfer_complete(ep, PIO_USB_INTS_ENDPOINT_COMPLETE_BITS); } else { res = -1; pio_usb_ll_transfer_complete(ep, PIO_USB_INTS_ENDPOINT_ERROR_BITS); } pp->usb_rx_buffer[1] = 0; // reset buffer return res; } //--------------------------------------------------------------------+ // USB Host Stack //--------------------------------------------------------------------+ static void on_device_connect(pio_port_t *pp, root_port_t *root, int device_idx) { bool fullspeed_flag = false; if (pio_usb_bus_get_line_state(root) == PORT_PIN_FS_IDLE) { fullspeed_flag = true; } else if (pio_usb_bus_get_line_state(root) == PORT_PIN_LS_IDLE) { fullspeed_flag = false; } pio_sm_set_pins_with_mask(pp->pio_usb_tx, pp->sm_tx, 0, (1 << root->pin_dp) | (1 << root->pin_dm)); pio_sm_set_pindirs_with_mask(pp->pio_usb_tx, pp->sm_tx, (1 << root->pin_dp) | (1 << root->pin_dm), (1 << root->pin_dp) | (1 << root->pin_dm)); busy_wait_ms(100); pio_sm_set_pindirs_with_mask(pp->pio_usb_tx, pp->sm_tx, 0, (1 << root->pin_dp) | (1 << root->pin_dm)); busy_wait_us(100); root->suspended = false; if (fullspeed_flag && pio_usb_bus_get_line_state(root) == PORT_PIN_FS_IDLE) { root->root_device = &pio_usb_device[device_idx]; if (!root->root_device->connected) { configure_fullspeed_host(pp, root); root->root_device->is_fullspeed = true; root->root_device->is_root = true; root->root_device->connected = true; root->root_device->root = root; root->root_device->event = EVENT_CONNECT; } } else if (!fullspeed_flag && pio_usb_bus_get_line_state(root) == PORT_PIN_LS_IDLE) { root->root_device = &pio_usb_device[device_idx]; if (!root->root_device->connected) { configure_lowspeed_host(pp, root); root->root_device->is_fullspeed = false; root->root_device->is_root = true; root->root_device->connected = true; root->root_device->root = root; root->root_device->event = EVENT_CONNECT; } } endpoint_descriptor_t ep0_desc = { sizeof(endpoint_descriptor_t), DESC_TYPE_ENDPOINT, 0x00, 0x00, { 0x08, 0x00 }, 0x00 }; pio_usb_host_endpoint_open(root - pio_usb_root_port, 0x00, (uint8_t const *)&ep0_desc, false); } static int __no_inline_not_in_flash_func(control_out_protocol)( usb_device_t *device, uint8_t *setup_data, uint16_t setup_length, uint8_t *out_data, uint16_t out_length) { int res = 0; control_pipe_t *pipe = &device->control_pipe; if (pipe->operation == CONTROL_NONE) { pipe->setup_packet.tx_address = setup_data; pipe->setup_packet.tx_length = setup_length; pipe->out_data_packet.tx_address = out_data; pipe->out_data_packet.tx_length = out_length; pipe->operation = CONTROL_OUT; pio_usb_host_send_setup(device->root - pio_usb_root_port, device->address, setup_data); } else { return -1; } const uint64_t timeout = 5000 * 1000; // 5s uint64_t start_time = time_us_64(); while (pipe->operation == CONTROL_OUT && time_us_64() - start_time < timeout) { if (!device->connected) { pipe->operation = CONTROL_NONE; return -1; } } if (time_us_64() - start_time >= timeout) { dh_debug_printf("control out[timeout]\n"); res = -2; } else if (pipe->operation == CONTROL_ERROR) { dh_debug_printf("control out[error]\n"); res = -1; } else if (pipe->operation == CONTROL_COMPLETE) { dh_debug_printf("control out[complete]\n"); res = 0; } pipe->operation = CONTROL_NONE; return res; } static int __no_inline_not_in_flash_func(control_in_protocol)( usb_device_t *device, uint8_t *tx_data, uint16_t tx_length, uint8_t *rx_buffer, uint16_t request_length) { int res = 0; control_pipe_t *pipe = &device->control_pipe; if (pipe->operation == CONTROL_NONE) { pipe->setup_packet.tx_address = tx_data; pipe->setup_packet.tx_length = tx_length; pipe->rx_buffer = rx_buffer; pipe->request_length = request_length; pipe->operation = CONTROL_IN; pio_usb_host_send_setup(device->root - pio_usb_root_port, device->address, tx_data); } else { return -1; } const uint64_t timeout = 5000 * 1000; // 5s uint64_t start_time = time_us_64(); while (pipe->operation == CONTROL_IN && time_us_64() - start_time < timeout) { if (!device->connected) { pipe->operation = CONTROL_NONE; return -1; } } if (time_us_64() - start_time >= timeout) { dh_debug_printf("control in[timeout]\n"); res = -2; } else if (pipe->operation == CONTROL_ERROR) { dh_debug_printf("control in[error]\n"); res = -1; } else if (pipe->operation == CONTROL_COMPLETE) { dh_debug_printf("control in[complete]\n"); res = 0; } pipe->operation = CONTROL_NONE; return res; } static int set_hub_feature(usb_device_t *device, uint8_t port, uint8_t value) { usb_setup_packet_t req = SET_HUB_FEATURE_REQUEST; req.index_lsb = port + 1; req.value_lsb = value; return control_out_protocol(device, (uint8_t *)&req, sizeof(req), NULL, 0); } static int clear_hub_feature(usb_device_t *device, uint8_t port, uint8_t value) { usb_setup_packet_t req = CLEAR_HUB_FEATURE_REQUEST; req.index_lsb = port + 1; req.value_lsb = value; return control_out_protocol(device, (uint8_t *)&req, sizeof(req), NULL, 0); } static int get_hub_port_status(usb_device_t *device, uint8_t port, hub_port_status_t *status) { usb_setup_packet_t req = GET_HUB_PORT_STATUS_REQUEST; req.index_lsb = port + 1; return control_in_protocol(device, (uint8_t *)&req, sizeof(req), (uint8_t*)status, sizeof(*status)); } static int initialize_hub(usb_device_t *device) { uint8_t rx_buffer[16]; int res = 0; dh_debug_printf("USB Hub detected\n"); usb_setup_packet_t get_hub_desc_request = GET_HUB_DESCRPTOR_REQUEST; control_in_protocol(device, (uint8_t *)&get_hub_desc_request, sizeof(get_hub_desc_request), rx_buffer, 8); const hub_descriptor_t *desc = (hub_descriptor_t *)rx_buffer; uint8_t port_num = desc->port_num; dh_debug_printf("\tTurn on port powers\n"); for (int idx = 0; idx < port_num; idx++) { res = set_hub_feature(device, idx, HUB_SET_PORT_POWER); if (res != 0) { dh_debug_printf("\tFailed to turn on ports\n"); break; } } busy_wait_ms(500); return res; } static int get_string_descriptor(usb_device_t *device, uint8_t idx, uint8_t *rx_buffer, uint8_t *str_buffer) { int res = -1; usb_setup_packet_t req = GET_DEVICE_DESCRIPTOR_REQ_DEFAULT; req.value_msb = DESC_TYPE_STRING; req.value_lsb = idx; req.length_lsb = 1; req.length_msb = 0; res = control_in_protocol(device, (uint8_t *)&req, sizeof(req), rx_buffer, 1); if (res != 0) { return res; } uint8_t len = rx_buffer[0]; req.length_lsb = len; req.length_msb = 0; res = control_in_protocol(device, (uint8_t *)&req, sizeof(req), rx_buffer, len); if (res != 0) { return res; } uint16_t *wchar_buffer = (uint16_t *)(uintptr_t) rx_buffer; for (int i = 0; i < (len - 2) / 2; i++) { str_buffer[i] = wchar_buffer[i + 1]; } str_buffer[(len - 2) / 2] = '\0'; return res; } static int enumerate_device(usb_device_t *device, uint8_t address) { int res = 0; uint8_t rx_buffer[512]; usb_setup_packet_t get_device_descriptor_request = GET_DEVICE_DESCRIPTOR_REQ_DEFAULT; res = control_in_protocol(device, (uint8_t *)&get_device_descriptor_request, sizeof(get_device_descriptor_request), rx_buffer, 18); if (res != 0) { pio_usb_host_close_device(device->root - pio_usb_root_port, 0); return res; } const device_descriptor_t *desc = (device_descriptor_t *)device->control_pipe.rx_buffer; device->vid = desc->vid[0] | (desc->vid[1] << 8); device->pid = desc->pid[0] | (desc->pid[1] << 8); device->device_class = desc->device_class; uint8_t idx_manufacture = desc->manufacture; uint8_t idx_product = desc->product; uint8_t idx_serial = desc->serial; dh_debug_printf("Enumerating %04x:%04x, class:%d, address:%d\n", device->vid, device->pid, device->device_class, address); usb_setup_packet_t set_address_request = SET_ADDRESS_REQ_DEFAULT; set_address_request.value_lsb = address; set_address_request.value_msb = 0; res = control_out_protocol(device, (uint8_t *)&set_address_request, sizeof(set_address_request), NULL, 0); pio_usb_host_close_device(device->root - pio_usb_root_port, 0); if (res != 0) { return res; } device->address = address; endpoint_descriptor_t ep0_desc = { sizeof(endpoint_descriptor_t), DESC_TYPE_ENDPOINT, 0x00, 0x00, { desc->max_packet_size, 0x00 }, 0x00 }; pio_usb_host_endpoint_open(device->root - pio_usb_root_port, address, (uint8_t const *)&ep0_desc, !device->is_root && !device->is_fullspeed); uint8_t str[64]; if (idx_manufacture != 0) { res = get_string_descriptor(device, idx_manufacture, rx_buffer, str); if (res == 0) { dh_debug_printf("Manufacture:%s\n", str); } else { dh_debug_printf("Failed to get string descriptor (Manufacture)\n"); } stdio_flush(); } if (idx_product != 0) { res = get_string_descriptor(device, idx_product, rx_buffer, str); if (res == 0) { dh_debug_printf("Product:%s\n", str); } else { dh_debug_printf("Failed to get string descriptor (Product)\n"); } stdio_flush(); } if (idx_serial != 0) { res = get_string_descriptor(device, idx_serial, rx_buffer, str); if (res == 0) { dh_debug_printf("Serial:%s\n", str); } else { dh_debug_printf("Failed to get string descriptor (Serial)\n"); } stdio_flush(); } usb_setup_packet_t get_configuration_descriptor_request = GET_CONFIGURATION_DESCRIPTOR_REQ_DEFAULT; get_configuration_descriptor_request.length_lsb = 9; get_configuration_descriptor_request.length_msb = 0; res = control_in_protocol( device, (uint8_t *)&get_configuration_descriptor_request, sizeof(get_configuration_descriptor_request), rx_buffer, 9); if (res != 0) { return res; } get_configuration_descriptor_request.length_lsb = ((configuration_descriptor_t *)(device->control_pipe.rx_buffer)) ->total_length_lsb; get_configuration_descriptor_request.length_msb = ((configuration_descriptor_t *)(device->control_pipe.rx_buffer)) ->total_length_msb; uint16_t request_length = get_configuration_descriptor_request.length_lsb | (get_configuration_descriptor_request.length_msb << 8); res = control_in_protocol( device, (uint8_t *)&get_configuration_descriptor_request, sizeof(get_configuration_descriptor_request), rx_buffer, request_length); if (res != 0) { return res; } uint8_t configuration_descrptor_data[512]; int16_t configuration_descrptor_length = request_length > 512 ? 512 : request_length; memcpy(configuration_descrptor_data, (const void *)device->control_pipe.rx_buffer, configuration_descrptor_length); usb_setup_packet_t set_usb_configuration_request = SET_CONFIGURATION_REQ_DEFAULT; set_usb_configuration_request.value_lsb = ((configuration_descriptor_t *)(device->control_pipe.rx_buffer)) ->configuration_value; res = control_out_protocol(device, (uint8_t *)&set_usb_configuration_request, sizeof(set_usb_configuration_request), NULL, 0); if (res != 0) { return res; } volatile uint8_t ep_id_idx = 0; volatile uint8_t interface = 0; volatile uint8_t class = 0; uint8_t *descriptor = configuration_descrptor_data; while (configuration_descrptor_length > 0) { switch (descriptor[1]) { case DESC_TYPE_INTERFACE: { const interface_descriptor_t *d = (const interface_descriptor_t *)descriptor; dh_debug_printf( "inum:%d, altsetting:%d, numep:%d, iclass:%d, isubclass:%d, " "iprotcol:%d, iface:%d\n", d->inum, d->altsetting, d->numep, d->iclass, d->isubclass, d->iprotocol, d->iface); interface = d->inum; class = d->iclass; } break; case DESC_TYPE_ENDPOINT: { const endpoint_descriptor_t *d = (const endpoint_descriptor_t *)descriptor; dh_debug_printf("\t\t\tepaddr:0x%02x, attr:%d, size:%d, interval:%d\n", d->epaddr, d->attr, d->max_size[0] | (d->max_size[1] << 8), d->interval); if ((class == CLASS_HID || class == CLASS_HUB) && d->attr == EP_ATTR_INTERRUPT) { volatile endpoint_t *ep = NULL; for (int ep_pool_idx = 0; ep_pool_idx < PIO_USB_EP_POOL_CNT; ep_pool_idx++) { if (pio_usb_ep_pool[ep_pool_idx].size == 0) { ep = &pio_usb_ep_pool[ep_pool_idx]; device->endpoint_id[ep_id_idx] = ep_pool_idx + 1; ep_id_idx++; break; } } if (ep != NULL) { ep->interval = d->interval; ep->interval_counter = 0; ep->size = d->max_size[0] | (d->max_size[1] << 8); ep->attr = d->attr | EP_ATTR_ENUMERATING; ep->ep_num = d->epaddr; ep->root_idx = device->root - pio_usb_root_port; ep->dev_addr = device->address; ep->need_pre = !device->is_root && !device->is_fullspeed; ep->is_tx = (d->epaddr & 0x80) ? false : true; } else { dh_debug_printf("No empty EP\n"); } } } break; case DESC_TYPE_HID: { const hid_descriptor_t *d = (const hid_descriptor_t *)descriptor; dh_debug_printf( "\tbcdHID:%x.%x, country:%d, desc num:%d, desc_type:%d, " "desc_size:%d\n", d->bcd_hid[1], d->bcd_hid[0], d->contry_code, d->num_desc, d->desc_type, d->desc_len[0] | (d->desc_len[1] << 8)); usb_setup_packet_t set_hid_idle_request = SET_HID_IDLE_REQ_DEFAULT; set_hid_idle_request.value_lsb = interface; set_hid_idle_request.value_msb = 0; control_out_protocol(device, (uint8_t *)&set_hid_idle_request, sizeof(set_hid_idle_request), NULL, 0); usb_setup_packet_t get_hid_report_descrpitor_request = GET_HID_REPORT_DESCRIPTOR_DEFAULT; get_hid_report_descrpitor_request.index_lsb = interface; get_hid_report_descrpitor_request.index_msb = 0; get_hid_report_descrpitor_request.length_lsb = d->desc_len[0]; get_hid_report_descrpitor_request.length_msb = d->desc_len[1]; uint16_t desc_len = d->desc_len[0] | (d->desc_len[1] << 8); control_in_protocol( device, (uint8_t *)&get_hid_report_descrpitor_request, sizeof(get_hid_report_descrpitor_request), rx_buffer, desc_len); dh_debug_printf("\t\tReport descriptor:"); for (int i = 0; i < desc_len; i++) { dh_debug_printf("%02x ", device->control_pipe.rx_buffer[i]); } dh_debug_printf("\n"); stdio_flush(); } break; default: break; } configuration_descrptor_length -= descriptor[0]; descriptor += descriptor[0]; } for (int epidx = 0; epidx < PIO_USB_DEV_EP_CNT; epidx++) { endpoint_t *ep = pio_usb_get_endpoint(device, epidx); if (ep == NULL) { break; } ep->attr &= ~EP_ATTR_ENUMERATING; // prepare transfer if (ep->ep_num & EP_IN) { pio_usb_ll_transfer_start(ep, ep->buffer, ep->size); } } return res; } static void device_disconnect(usb_device_t *device) { dh_debug_printf("Disconnect device %d\n", device->address); for (int port = 0; port < PIO_USB_HUB_PORT_CNT; port++) { if (device->child_devices[port] != 0) { device_disconnect(&pio_usb_device[device->child_devices[port]]); } } for (int ep_idx = 0; ep_idx < PIO_USB_DEV_EP_CNT; ep_idx++) { endpoint_t *ep = pio_usb_get_endpoint(device, ep_idx); if (ep == NULL) { break; } memset(ep, 0, sizeof(*ep)); } if (device->address == 0 && device->root != NULL) { device->root->addr0_exists = false; } memset(device, 0, sizeof(*device)); } static int device_pool_vacant(void) { for (int idx = 0; idx < PIO_USB_DEVICE_CNT; idx++) { if (!pio_usb_device[idx].connected) { return idx; } } return -1; } static int assign_new_device_to_port(usb_device_t *hub_device, uint8_t port, bool is_ls) { int idx = device_pool_vacant(); if (idx >= 0) { hub_device->child_devices[port] = idx; pio_usb_device[idx].parent_device = hub_device; pio_usb_device[idx].parent_port = port; pio_usb_device[idx].root = hub_device->root; pio_usb_device[idx].connected = true; pio_usb_device[idx].is_fullspeed = !is_ls; pio_usb_device[idx].event = EVENT_CONNECT; dh_debug_printf("Assign device %d to %d-%d\n", idx, hub_device->address, port); endpoint_descriptor_t ep0_desc = { sizeof(endpoint_descriptor_t), DESC_TYPE_ENDPOINT, 0x00, 0x00, { 0x08, 0x00 }, 0x00 }; pio_usb_host_endpoint_open(hub_device->root - pio_usb_root_port, 0x00, (uint8_t const *)&ep0_desc, is_ls); return 0; } dh_debug_printf("Failed to assign device\n"); return -1; } static void __no_inline_not_in_flash_func(process_hub_event)( usb_device_t *device) { volatile endpoint_t *ep = pio_usb_get_endpoint(device, 0); uint8_t bitmap = ep->buffer[0]; for (int bit = 1; bit < 8; bit++) { if (!(bitmap & (1 << bit))) { continue; } uint8_t port = bit - 1; hub_port_status_t status; int res = get_hub_port_status(device, port, &status); if (res != 0) { dh_debug_printf("Failed to get port%d-%d status\n", device->address, port); continue; } dh_debug_printf("port%d-%d status:%d %d\n", device->address, port, status.port_change, status.port_status); if (status.port_change & HUB_CHANGE_PORT_CONNECTION) { if (status.port_status & HUB_STAT_PORT_CONNECTION) { dh_debug_printf("new device on port %d, reset port\n", port); if (device->child_devices[port] != 0) { dh_debug_printf("device is already assigned. disconnect previous\n"); device_disconnect(&pio_usb_device[device->child_devices[port]]); } if (device->root->addr0_exists) { dh_debug_printf("Address 0 already exists\n"); continue; } if (device_pool_vacant() >= 0) { set_hub_feature(device, port, HUB_SET_PORT_RESET); device->root->addr0_exists = true; } else { dh_debug_printf("No vacant in device pool\n"); } } else { dh_debug_printf("device removed from port %d\n", port); if (device->child_devices[port] != 0) { device_disconnect(&pio_usb_device[device->child_devices[port]]); } } clear_hub_feature(device, port, HUB_CLR_PORT_CONNECTION); } else if (status.port_change & HUB_CHANGE_PORT_RESET) { dh_debug_printf("reset port %d complete\n", port); res = clear_hub_feature(device, port, HUB_CLR_PORT_RESET); if (res == 0) { assign_new_device_to_port(device, port, status.port_status & HUB_STAT_PORT_LOWSPEED); } } else if (status.port_change & HUB_CHANGE_PORT_ENABLE) { clear_hub_feature(device, port, HUB_CLR_PORT_ENABLE); } } device->event = EVENT_NONE; } void __no_inline_not_in_flash_func(pio_usb_host_task)(void) { for (int root_idx = 0; root_idx < PIO_USB_ROOT_PORT_CNT; root_idx++) { if (pio_usb_root_port[root_idx].event == EVENT_CONNECT) { dh_debug_printf("Root %d connected\n", root_idx); int dev_idx = device_pool_vacant(); if (dev_idx >= 0) { on_device_connect(&pio_port[0], &pio_usb_root_port[root_idx], dev_idx); pio_usb_root_port[root_idx].addr0_exists = true; } pio_usb_root_port[root_idx].event = EVENT_NONE; } else if (pio_usb_root_port[root_idx].event == EVENT_DISCONNECT) { dh_debug_printf("Root %d disconnected\n", root_idx); pio_usb_host_close_device( root_idx, pio_usb_root_port[root_idx].root_device->address); pio_usb_root_port[root_idx].root_device->connected = false; pio_usb_root_port[root_idx].root_device->event = EVENT_DISCONNECT; pio_usb_root_port[root_idx].root_device = NULL; pio_usb_root_port[root_idx].event = EVENT_NONE; } } for (int idx = 0; idx < PIO_USB_DEVICE_CNT; idx++) { usb_device_t *device = &pio_usb_device[idx]; if (device->event == EVENT_CONNECT) { device->event = EVENT_NONE; dh_debug_printf("Device %d Connected\n", idx); int res = enumerate_device(device, idx + 1); if (res == 0) { device->enumerated = true; device->root->addr0_exists = false; if (device->device_class == CLASS_HUB) { res = initialize_hub(device); } } if (res != 0) { dh_debug_printf("Enumeration failed(%d)\n", res); // retry if (device->is_root) { device->root->event = EVENT_DISCONNECT; } else { set_hub_feature(device->parent_device, device->parent_port, HUB_SET_PORT_RESET); device_disconnect(device); } } } else if (device->event == EVENT_DISCONNECT) { device->event = EVENT_NONE; dh_debug_printf("Disconnect\n"); device_disconnect(device); } else if (device->event == EVENT_HUB_PORT_CHANGE) { process_hub_event(device); } } if (cancel_timer_flag) { int_stat = save_and_disable_interrupts(); stop_timer(); if (pio_usb_root_port->root_device != NULL) { device_disconnect(pio_usb_root_port->root_device); } cancel_timer_flag = false; } if (start_timer_flag) { start_timer(_alarm_pool); restore_interrupts(int_stat); start_timer_flag = false; } } static void __no_inline_not_in_flash_func(handle_endpoint_irq)( root_port_t *root, uint32_t flag, volatile uint32_t *ep_reg) { (void)root; const uint32_t ep_all = *ep_reg; for (uint8_t ep_idx = 0; ep_idx < PIO_USB_EP_POOL_CNT; ep_idx++) { if (ep_all & (1u << ep_idx)) { endpoint_t *ep = PIO_USB_ENDPOINT(ep_idx); usb_device_t *device = NULL; // find device this endpoint belongs to for (int idx = 0; idx < PIO_USB_DEVICE_CNT; idx++) { usb_device_t *dev = &pio_usb_device[idx]; if (dev->connected && (ep->dev_addr == dev->address)) { device = dev; break; } } if (device) { // control endpoint is either 0x00 or 0x80 if ((ep->ep_num & 0x7f) == 0) { control_pipe_t *pipe = &device->control_pipe; if (flag != PIO_USB_INTS_ENDPOINT_COMPLETE_BITS) { pipe->stage = STAGE_SETUP; pipe->operation = CONTROL_ERROR; } else { ep->data_id = 1; // both data and status have DATA1 if (pipe->stage == STAGE_SETUP) { if (pipe->operation == CONTROL_IN) { pipe->stage = STAGE_IN; ep->ep_num = 0x80; ep->is_tx = false; pio_usb_ll_transfer_start(ep, (uint8_t *)(uintptr_t)pipe->rx_buffer, pipe->request_length); } else if (pipe->operation == CONTROL_OUT) { if (pipe->out_data_packet.tx_address != NULL) { pipe->stage = STAGE_OUT; ep->ep_num = 0x00; ep->is_tx = true; pio_usb_ll_transfer_start(ep, pipe->out_data_packet.tx_address, pipe->out_data_packet.tx_length); } else { pipe->stage = STAGE_STATUS; ep->ep_num = 0x80; ep->is_tx = false; pio_usb_ll_transfer_start(ep, NULL, 0); } } } else if (pipe->stage == STAGE_IN) { pipe->stage = STAGE_STATUS; ep->ep_num = 0x00; ep->is_tx = true; pio_usb_ll_transfer_start(ep, NULL, 0); } else if (pipe->stage == STAGE_OUT) { pipe->stage = STAGE_STATUS; ep->ep_num = 0x80; ep->is_tx = false; pio_usb_ll_transfer_start(ep, NULL, 0); } else if (pipe->stage == STAGE_STATUS) { pipe->stage = STAGE_SETUP; pipe->operation = CONTROL_COMPLETE; } } } else if (device->device_class == CLASS_HUB && (ep->ep_num & EP_IN)) { // hub interrupt endpoint device->event = EVENT_HUB_PORT_CHANGE; } } } } // clear all (*ep_reg) &= ~ep_all; } // IRQ Handler static void __no_inline_not_in_flash_func(__pio_usb_host_irq_handler)(uint8_t root_id) { root_port_t *root = PIO_USB_ROOT_PORT(root_id); uint32_t const ints = root->ints; if (ints & PIO_USB_INTS_CONNECT_BITS) { root->event = EVENT_CONNECT; } if (ints & PIO_USB_INTS_DISCONNECT_BITS) { root->event = EVENT_DISCONNECT; } if (ints & PIO_USB_INTS_ENDPOINT_COMPLETE_BITS) { handle_endpoint_irq(root, PIO_USB_INTS_ENDPOINT_COMPLETE_BITS, &root->ep_complete); } if (ints & PIO_USB_INTS_ENDPOINT_STALLED_BITS) { handle_endpoint_irq(root, PIO_USB_INTS_ENDPOINT_STALLED_BITS, &root->ep_stalled); } if (ints & PIO_USB_INTS_ENDPOINT_ERROR_BITS) { handle_endpoint_irq(root, PIO_USB_INTS_ENDPOINT_ERROR_BITS, &root->ep_error); } // clear all root->ints &= ~ints; } // weak alias to __pio_usb_host_irq_handler void pio_usb_host_irq_handler(uint8_t root_id) __attribute__ ((weak, alias("__pio_usb_host_irq_handler"))); #pragma GCC pop_options //--------------------------------------------------------------------+ // Misc functions //--------------------------------------------------------------------+ int pio_usb_kbd_set_leds(usb_device_t *device, uint8_t port, uint8_t value) { usb_setup_packet_t req = SET_REPORT_REQ_DEFAULT; req.index_lsb = port; req.length_lsb = 1; req.length_msb = 0; return control_out_protocol(device, (uint8_t *)&req, sizeof(req), &value, 1); } ================================================ FILE: Pico-PIO-USB/src/pio_usb_ll.h ================================================ /** * Copyright (c) 2021 sekigon-gonnoc * Ha Thach (thach@tinyusb.org) */ #pragma once #include "hardware/pio.h" #include "pio_usb_configuration.h" #include "usb_definitions.h" enum { PIO_USB_INTS_CONNECT_POS = 0, PIO_USB_INTS_DISCONNECT_POS, PIO_USB_INTS_RESET_END_POS, PIO_USB_INTS_SETUP_REQ_POS, PIO_USB_INTS_SOF_POS, PIO_USB_INTS_ENDPOINT_COMPLETE_POS, PIO_USB_INTS_ENDPOINT_ERROR_POS, PIO_USB_INTS_ENDPOINT_STALLED_POS, }; #define PIO_USB_INTS_CONNECT_BITS (1u << PIO_USB_INTS_CONNECT_POS) #define PIO_USB_INTS_DISCONNECT_BITS (1u << PIO_USB_INTS_DISCONNECT_POS) #define PIO_USB_INTS_RESET_END_BITS (1u << PIO_USB_INTS_RESET_END_POS) #define PIO_USB_INTS_SETUP_REQ_BITS (1u << PIO_USB_INTS_SETUP_REQ_POS) #define PIO_USB_INTS_SOF_BITS (1u << PIO_USB_INTS_SOF_POS) #define PIO_USB_INTS_ENDPOINT_COMPLETE_BITS \ (1u << PIO_USB_INTS_ENDPOINT_COMPLETE_POS) #define PIO_USB_INTS_ENDPOINT_ERROR_BITS (1u << PIO_USB_INTS_ENDPOINT_ERROR_POS) #define PIO_USB_INTS_ENDPOINT_STALLED_BITS \ (1u << PIO_USB_INTS_ENDPOINT_STALLED_POS) typedef enum { PORT_PIN_SE0 = 0b00, PORT_PIN_FS_IDLE = 0b01, PORT_PIN_LS_IDLE = 0b10, PORT_PIN_SE1 = 0b11, } port_pin_status_t; typedef struct { uint16_t div_int; uint8_t div_frac; } pio_clk_div_t; typedef struct { PIO pio_usb_tx; // could not set to volatile uint sm_tx; uint offset_tx; uint tx_ch; PIO pio_usb_rx; // could not set to volatile uint sm_rx; uint offset_rx; uint sm_eop; uint offset_eop; uint rx_reset_instr; uint rx_reset_instr2; uint device_rx_irq_num; int8_t debug_pin_rx; int8_t debug_pin_eop; const pio_program_t *fs_tx_program; const pio_program_t *fs_tx_pre_program; const pio_program_t *ls_tx_program; pio_clk_div_t clk_div_fs_tx; pio_clk_div_t clk_div_fs_rx; pio_clk_div_t clk_div_ls_tx; pio_clk_div_t clk_div_ls_rx; bool need_pre; uint8_t usb_rx_buffer[128]; } pio_port_t; //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ enum { PIO_USB_MODE_INVALID = 0, PIO_USB_MODE_DEVICE, PIO_USB_MODE_HOST, }; extern usb_device_t pio_usb_device[PIO_USB_DEVICE_CNT]; extern root_port_t pio_usb_root_port[PIO_USB_ROOT_PORT_CNT]; #define PIO_USB_ROOT_PORT(_idx) (pio_usb_root_port + (_idx)) extern endpoint_t pio_usb_ep_pool[PIO_USB_EP_POOL_CNT]; #define PIO_USB_ENDPOINT(_idx) (pio_usb_ep_pool + (_idx)) extern pio_port_t pio_port[1]; #define PIO_USB_PIO_PORT(_idx) (pio_port + (_idx)) //--------------------------------------------------------------------+ // Bus functions //--------------------------------------------------------------------+ #define IRQ_TX_EOP_MASK (1 << usb_tx_dpdm_IRQ_EOP) #define IRQ_TX_COMP_MASK (1 << usb_tx_dpdm_IRQ_COMP) #define IRQ_TX_ALL_MASK (IRQ_TX_EOP_MASK | IRQ_TX_COMP_MASK) #define IRQ_RX_COMP_MASK (1 << IRQ_RX_EOP) #define IRQ_RX_ALL_MASK \ ((1 << IRQ_RX_EOP) | (1 << IRQ_RX_BS_ERR) | (1 << IRQ_RX_START) | \ (1 << DECODER_TRIGGER)) #define SM_SET_CLKDIV(pio, sm, div) \ pio_sm_set_clkdiv_int_frac(pio, sm, div.div_int, div.div_frac) #define SM_SET_CLKDIV_MAXSPEED(pio, sm) \ pio_sm_set_clkdiv_int_frac(pio, sm, 1, 0) void pio_usb_bus_init(pio_port_t *pp, const pio_usb_configuration_t *c, root_port_t *root); void pio_usb_bus_start_receive(const pio_port_t *pp); void pio_usb_bus_prepare_receive(const pio_port_t *pp); int pio_usb_bus_receive_packet_and_handshake(pio_port_t *pp, uint8_t handshake); void pio_usb_bus_usb_transfer(const pio_port_t *pp, uint8_t *data, uint16_t len); uint8_t pio_usb_bus_wait_handshake(pio_port_t *pp); void pio_usb_bus_send_handshake(const pio_port_t *pp, uint8_t pid); void pio_usb_bus_send_token(const pio_port_t *pp, uint8_t token, uint8_t addr, uint8_t ep_num); static __always_inline port_pin_status_t pio_usb_bus_get_line_state(root_port_t *root) { uint8_t dp = gpio_get(root->pin_dp) ? 0 : 1; uint8_t dm = gpio_get(root->pin_dm) ? 0 : 1; return (dm << 1) | dp; } //--------------------------------------------------------------------+ // Low Level functions //--------------------------------------------------------------------+ void pio_usb_ll_configure_endpoint(endpoint_t *ep, uint8_t const *desc_endpoint); bool pio_usb_ll_transfer_start(endpoint_t *ep, uint8_t *buffer, uint16_t buflen); bool pio_usb_ll_transfer_continue(endpoint_t *ep, uint16_t xferred_bytes); void pio_usb_ll_transfer_complete(endpoint_t *ep, uint32_t flag); static inline __force_inline uint16_t pio_usb_ll_get_transaction_len(endpoint_t *ep) { uint16_t remaining = ep->total_len - ep->actual_len; return (remaining < ep->size) ? remaining : ep->size; } //-------------------------------------------------------------------- // Host Controller functions //-------------------------------------------------------------------- // Host IRQ Handler void pio_usb_host_irq_handler(uint8_t root_idx); void pio_usb_host_port_reset_start(uint8_t root_idx); void pio_usb_host_port_reset_end(uint8_t root_idx); void pio_usb_host_close_device(uint8_t root_idx, uint8_t device_address); bool pio_usb_host_endpoint_open(uint8_t root_idx, uint8_t device_address, uint8_t const *desc_endpoint, bool need_pre); bool pio_usb_host_send_setup(uint8_t root_idx, uint8_t device_address, uint8_t const setup_packet[8]); bool pio_usb_host_endpoint_transfer(uint8_t root_idx, uint8_t device_address, uint8_t ep_address, uint8_t *buffer, uint16_t buflen); bool pio_usb_host_endpoint_abort_transfer(uint8_t root_idx, uint8_t device_address, uint8_t ep_address); //-------------------------------------------------------------------- // Device Controller functions //-------------------------------------------------------------------- // Device IRQ Handler void pio_usb_device_irq_handler(uint8_t root_idx); void pio_usb_device_set_address(uint8_t dev_addr); bool pio_usb_device_endpoint_open(uint8_t const *desc_endpoint); bool pio_usb_device_transfer(uint8_t ep_address, uint8_t *buffer, uint16_t buflen); static inline __force_inline endpoint_t * pio_usb_device_get_endpoint_by_address(uint8_t ep_address) { // index = 2*num + dir e.g out1, in1, out2, in2 uint8_t const ep_idx = ((ep_address & 0x7f) << 1) | (ep_address >> 7); return PIO_USB_ENDPOINT(ep_idx); } ================================================ FILE: Pico-PIO-USB/src/usb_crc.c ================================================ #include "usb_crc.h" const uint8_t __not_in_flash("crc5_tbl") crc5_tbl[32] = { 0x00, 0x0b, 0x16, 0x1d, 0x05, 0x0e, 0x13, 0x18, 0x0a, 0x01, 0x1c, 0x17, 0x0f, 0x04, 0x19, 0x12, 0x14, 0x1f, 0x02, 0x09, 0x11, 0x1a, 0x07, 0x0c, 0x1e, 0x15, 0x08, 0x03, 0x1b, 0x10, 0x0d, 0x06, }; uint8_t __not_in_flash_func(calc_usb_crc5)(uint16_t data) { data = data ^ 0x1f; const uint8_t lsb = (data >> 1) & 0x1f; const uint8_t msb = (data >> 6) & 0x1f; uint8_t crc = (data & 1) ? 0x14 : 0x00; crc = crc5_tbl[(lsb ^ crc)]; crc = crc5_tbl[(msb ^ crc)]; return crc ^ 0x1f; } // Place to RAM const uint16_t __not_in_flash("crc_tbl") crc16_tbl[256] = { 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040}; uint16_t calc_usb_crc16(const uint8_t *data, uint16_t len) { uint16_t crc = 0xffff; for (int idx = 0; idx < len; idx++) { crc = (crc >> 8) ^ crc16_tbl[(crc ^ data[idx]) & 0xff]; } return crc ^ 0xffff; } ================================================ FILE: Pico-PIO-USB/src/usb_crc.h ================================================ #pragma once #include #include "pico/stdlib.h" // Calc CRC5-USB of 11bit data uint8_t calc_usb_crc5(uint16_t data); // Calc CRC16-USB of array uint16_t calc_usb_crc16(const uint8_t *data, uint16_t len); extern const uint16_t crc16_tbl[256]; static inline uint16_t __time_critical_func(update_usb_crc16)(uint16_t crc, uint8_t data) { crc = (crc >> 8) ^ crc16_tbl[(crc ^ data) & 0xff]; return crc; } ================================================ FILE: Pico-PIO-USB/src/usb_definitions.h ================================================ #pragma once #include #include "pio_usb_configuration.h" typedef enum { CONTROL_NONE, CONTROL_IN, CONTROL_OUT, CONTROL_COMPLETE, CONTROL_ERROR, } control_transfer_operation_t; typedef enum { EP_IN = 0x80, EP_OUT = 0x00, } ep_type_t; typedef enum { STAGE_SETUP, STAGE_DATA, STAGE_IN, STAGE_OUT, STAGE_STATUS, STAGE_COMPLETE, STAGE_ERROR } setup_transfer_stage_t; typedef enum { STAGE_IDLE, STAGE_DEVICE, STAGE_CONFIG, STAGE_CONFIG2, STAGE_INTERFACE, STAGE_ENDPOINT } usb_enumeration_stage_t; typedef struct { uint8_t *tx_address; uint8_t tx_length; } packet_info_t; typedef struct { volatile uint8_t data_in_num; volatile uint16_t buffer_idx; volatile uint8_t *rx_buffer; volatile packet_info_t setup_packet; volatile packet_info_t out_data_packet; volatile int16_t request_length; volatile control_transfer_operation_t operation; volatile setup_transfer_stage_t stage; } control_pipe_t; typedef struct { volatile uint8_t root_idx; volatile uint8_t dev_addr; bool need_pre; bool is_tx; // Host out or Device in volatile uint8_t ep_num; volatile bool new_data_flag; volatile uint16_t size; volatile uint8_t attr; volatile uint8_t interval; volatile uint8_t interval_counter; volatile uint8_t data_id; // data0 or data1 volatile bool stalled; volatile bool has_transfer; volatile bool transfer_started; volatile bool transfer_aborted; uint8_t buffer[64 + 4]; uint8_t *app_buf; uint16_t total_len; uint16_t actual_len; } endpoint_t; typedef enum { EVENT_NONE, EVENT_CONNECT, EVENT_DISCONNECT, EVENT_HUB_PORT_CHANGE, } usb_device_event_t; typedef struct struct_usb_device_t usb_device_t; typedef struct struct_root_port_t { volatile bool initialized; volatile bool addr0_exists; volatile uint8_t pin_dp; volatile uint8_t pin_dm; volatile usb_device_event_t event; usb_device_t *root_device; volatile bool is_fullspeed; volatile bool connected; volatile bool suspended; uint8_t mode; // register interface volatile uint32_t ints; // interrupt status volatile uint32_t ep_complete; volatile uint32_t ep_error; volatile uint32_t ep_stalled; // device only uint8_t dev_addr; uint8_t *setup_packet; } root_port_t; struct struct_usb_device_t { volatile bool connected; volatile bool enumerated; volatile usb_device_event_t event; volatile uint8_t address; volatile uint16_t vid; volatile uint16_t pid; volatile uint8_t device_class; volatile bool is_fullspeed; volatile bool is_root; control_pipe_t control_pipe; uint8_t endpoint_id[PIO_USB_DEV_EP_CNT]; uint8_t child_devices[PIO_USB_HUB_PORT_CNT]; struct struct_usb_device_t *parent_device; uint8_t parent_port; root_port_t *root; }; enum { USB_SYNC = 0x80, USB_PID_OUT = 0xe1, USB_PID_IN = 0x69, USB_PID_SOF = 0xa5, USB_PID_SETUP = 0x2d, USB_PID_DATA0 = 0xc3, USB_PID_DATA1 = 0x4b, USB_PID_ACK = 0xd2, USB_PID_NAK = 0x5a, USB_PID_STALL = 0x1e, USB_PID_PRE = 0x3c, USB_CRC16_PLACE = 0, }; enum { DESC_TYPE_DEVICE = 0x01, DESC_TYPE_CONFIG = 0x02, DESC_TYPE_STRING = 0x03, DESC_TYPE_INTERFACE = 0x04, DESC_TYPE_ENDPOINT = 0x05, DESC_TYPE_HID = 0x21, DESC_TYPE_HID_REPORT = 0x22, }; enum { CLASS_HID = 0x03, CLASS_HUB = 0x09, }; enum { EP_ATTR_CONTROL = 0x00, EP_ATTR_ISOCHRONOUS = 0x01, EP_ATTR_BULK = 0x02, EP_ATTR_INTERRUPT = 0x03, EP_ATTR_ENUMERATING = 0x80 }; typedef struct { // uint8_t sync; // uint8_t pid; uint8_t request_type; uint8_t request; uint8_t value_lsb; uint8_t value_msb; uint8_t index_lsb; uint8_t index_msb; uint8_t length_lsb; uint8_t length_msb; // uint8_t crc16[2]; } usb_setup_packet_t; typedef struct { uint8_t length; uint8_t type; uint8_t bcd_usb[2]; uint8_t device_class; uint8_t subclass; uint8_t protocol; uint8_t max_packet_size; uint8_t vid[2]; uint8_t pid[2]; uint8_t bcd_device[2]; uint8_t manufacture; uint8_t product; uint8_t serial; uint8_t num_configu; } device_descriptor_t; typedef struct { uint8_t length; uint8_t type; uint8_t string[62]; } __attribute__((aligned(2))) string_descriptor_t; typedef struct { uint8_t length; uint8_t type; uint8_t inum; uint8_t altsetting; uint8_t numep; uint8_t iclass; uint8_t isubclass; uint8_t iprotocol; uint8_t iface; } interface_descriptor_t; typedef struct { uint8_t length; uint8_t type; uint8_t epaddr; uint8_t attr; uint8_t max_size[2]; uint8_t interval; } endpoint_descriptor_t; typedef struct { uint8_t length; uint8_t type; uint8_t bcd_hid[2]; uint8_t contry_code; uint8_t num_desc; uint8_t desc_type; uint8_t desc_len[2]; } hid_descriptor_t; typedef struct configuration_descriptor_tag { uint8_t length; uint8_t type; uint8_t total_length_lsb; uint8_t total_length_msb; uint8_t num_interfaces; uint8_t configuration_value; uint8_t configuration; uint8_t attributes; uint8_t max_power; } configuration_descriptor_t; typedef struct { uint8_t lenght; uint8_t type; uint8_t port_num; uint8_t chara_lsb; uint8_t chara_msb; uint8_t pow_on_time; uint8_t current; uint8_t removable; } hub_descriptor_t; typedef struct { uint16_t port_status; uint16_t port_change; } hub_port_status_t; enum { HUB_SET_PORT_RESET = 4, HUB_SET_PORT_POWER = 8, HUB_CLR_PORT_CONNECTION = 16, HUB_CLR_PORT_ENABLE = 17, HUB_CLR_PORT_SUSPEND = 18, HUB_CLR_PORT_RESET = 20, }; enum { HUB_STAT_PORT_CONNECTION = (1 << 0), HUB_STAT_PORT_ENABLE = (1 << 1), HUB_STAT_PORT_SUSPEND = (1 << 2), HUB_STAT_PORT_OC = (1 << 3), HUB_STAT_PORT_RESET = (1 << 4), HUB_STAT_PORT_POWER = (1 << 8), HUB_STAT_PORT_LOWSPEED = (1 << 9), }; enum { HUB_CHANGE_PORT_CONNECTION = (1 << 0), HUB_CHANGE_PORT_ENABLE = (1 << 1), HUB_CHANGE_PORT_SUSPEND = (1 << 2), HUB_CHANGE_PORT_OC = (1 << 3), HUB_CHANGE_PORT_RESET = (1 << 4), }; enum { USB_REQ_DIR_IN = 0x80, USB_REQ_DIR_OUT = 0x00, USB_REQ_TYP_STANDARD = 0x00, USB_REQ_TYP_CLASS = 0x20, USB_REQ_TYP_VENDOR = 0x40, USB_REQ_REC_DEVICE = 0x00, USB_REQ_REC_IFACE = 0x01, USB_REQ_REC_EP = 0x02, USB_REQ_REC_OTHER = 0x03, }; #define GET_DEVICE_DESCRIPTOR_REQ_DEFAULT \ { USB_REQ_DIR_IN, 0x06, 0, 0x01, 0, 0, 0x12, 0 } #define GET_CONFIGURATION_DESCRIPTOR_REQ_DEFAULT \ { USB_REQ_DIR_IN, 0x06, 0, 0x02, 0, 0, 0x09, 0 } #define SET_CONFIGURATION_REQ_DEFAULT \ { USB_REQ_DIR_OUT, 0x09, 0, 0, 0, 0, 0, 0 } #define SET_ADDRESS_REQ_DEFAULT \ { USB_REQ_DIR_OUT, 0x5, 0x02, 0, 0, 0, 0, 0 } #define SET_HID_IDLE_REQ_DEFAULT \ { USB_REQ_TYP_CLASS | USB_REQ_REC_IFACE, 0x0A, 0, 0, 0, 0, 0, 0 } #define GET_HID_REPORT_DESCRIPTOR_DEFAULT \ { USB_REQ_DIR_IN | USB_REQ_REC_IFACE, 0x06, 0, 0x22, 0, 0, 0xff, 0 } #define SET_REPORT_REQ_DEFAULT \ { USB_REQ_TYP_CLASS | USB_REQ_REC_IFACE, 0x09, 0, 0x02, 0, 0, 0, 0 } #define GET_HUB_DESCRPTOR_REQUEST \ { \ USB_REQ_DIR_IN | USB_REQ_TYP_CLASS | USB_REQ_REC_DEVICE, 0x06, 0, 0x29, 0, \ 0, 8, 0 \ } #define GET_HUB_PORT_STATUS_REQUEST \ { \ USB_REQ_DIR_IN | USB_REQ_TYP_CLASS | USB_REQ_REC_OTHER, 0, 0, 0, 0, 0, 4, \ 0 \ } #define SET_HUB_FEATURE_REQUEST \ { \ USB_REQ_DIR_OUT | USB_REQ_TYP_CLASS | USB_REQ_REC_OTHER, 0x03, 0, 0, 0, 0, \ 0, 0 \ } #define CLEAR_HUB_FEATURE_REQUEST \ { \ USB_REQ_DIR_OUT | USB_REQ_TYP_CLASS | USB_REQ_REC_OTHER, 0x01, 0, 0, 0, 0, \ 0, 0 \ } typedef struct { const uint8_t *device; const uint8_t *config; const uint8_t **hid_report; const string_descriptor_t *string; } usb_descriptor_buffers_t; ================================================ FILE: Pico-PIO-USB/src/usb_rx.pio ================================================ ; Copyright (c) 2021-2022 sekigon-gonnoc .define public IRQ_RX_BS_ERR 1 ; bit stuffinc error .define public IRQ_RX_EOP 2 ; eop detect flag .define public IRQ_RX_START 3 ; packet start flag .define public DECODER_TRIGGER 4 .define BIT_REPEAT_COUNT 6 ; bit repeat counter .define db0 0 .define db1 1 ; USB signal edge and eop detector ; 17 instruction ; FS(12M) LS(1.5M) ; Run at 96MHz 12MHz ; jmp_pin d- d+ ; in_pin d+ d- ; both d+/d- pin should be input invert overrideed .program usb_edge_detector eop: irq wait IRQ_RX_EOP start: jmp pin start ; Wait fall edge irq IRQ_RX_START [1] .wrap_target pin_still_low: irq DECODER_TRIGGER [1] ; Trigger NRZI decoder ; Resync on rising edge pin_low: jmp pin pin_went_high pin_went_low: jmp pin pin_went_high jmp pin pin_went_high jmp pin pin_went_high jmp pin pin_went_high jmp pin pin_went_high .wrap pin_still_high: mov x, isr [2] jmp x-- eop ; Jump to eop if jmp_pin and in_pin are high because both inputs are inverted ; Jump to here on rising edge pin_went_high: mov isr, null in pins, 1 ; Capture the pin to check eop. irq DECODER_TRIGGER ; Trigger NRZI decoder jmp pin pin_still_high jmp pin_went_low ; To adjust interval of decoder trigger, jump to pin_went_low (not pin_low) .program usb_edge_detector_debug .side_set 1 eop: irq wait IRQ_RX_EOP side db0 start: jmp pin start side db1 ; Wait fall edge irq IRQ_RX_START [1] side db0 .wrap_target pin_still_low: irq DECODER_TRIGGER [1] side db0 ; Trigger NRZI decoder ; Resync on rising edge pin_low: jmp pin pin_went_high side db1 pin_went_low: jmp pin pin_went_high side db1 jmp pin pin_went_high side db1 jmp pin pin_went_high side db1 jmp pin pin_went_high side db1 jmp pin pin_went_high side db1 .wrap pin_still_high: mov x, isr [2] side db1 jmp x-- eop side db1 ; Jump to eop if jmp_pin and in_pin are high because both inputs are inverted ; Jump to here on rising edge pin_went_high: mov isr, null side db1 in pins, 1 side db0 ; Capture the pin to check eop. irq DECODER_TRIGGER side db0 ; Trigger NRZI decoder jmp pin pin_still_high side db0 jmp pin_went_low side db1 ; To adjust interval of decoder trigger, jump to pin_went_low (not pin_low) ; USB NRZI data decoder ; 15 instruction ; FS(12M) LS(1.5M) ; Run at as fast as possible ; jmp_pin d+ d- ; both d+/d- pin should be input invert overrideed ; Fill OSR by 1 and set 0 to x before runnning this program .program usb_nrzi_decoder start: ; set x, 0 .wrap_target set_y: set y, BIT_REPEAT_COUNT irq_wait: wait 1 irq DECODER_TRIGGER ; wait signal from edge detector jmp PIN pin_high pin_low: jmp !y flip ; ignore stuff bit, without error check jmp !x K1 K2: ; x==1 in null, 1 jmp flip K1: ; x==0 in osr, 1 jmp y-- irq_wait pin_high: jmp !y flip ; ignore stuff bit, without error check jmp !x J1 J2: ; x==1 in x, 1 jmp y-- irq_wait J1: ; x==0 in null, 1 flip: mov x, ~x .wrap .program usb_nrzi_decoder_debug .side_set 1 opt start: ; set x, 0 side db0 .wrap_target set_y: set y, BIT_REPEAT_COUNT irq_wait: wait 1 irq DECODER_TRIGGER ; wait signal from edge detector jmp PIN pin_high pin_low: jmp !y flip side db0 ; ignore stuff bit, without error check jmp !x K1 side db0 K2: ; x==1 in null, 1 jmp flip K1: ; x==0 in osr, 1 jmp y-- irq_wait pin_high: jmp !y flip side db1 ; ignore stuff bit, without error check jmp !x J1 side db1 J2: ; x==1 in x, 1 jmp y-- irq_wait J1: ; x==0 in null, 1 flip: mov x, ~x .wrap % c-sdk { #include "hardware/clocks.h" static __always_inline void pio_sm_set_jmp_pin(PIO pio, uint sm, uint jmp_pin) { pio->sm[sm].execctrl = (pio->sm[sm].execctrl & ~PIO_SM0_EXECCTRL_JMP_PIN_BITS) | (jmp_pin << PIO_SM0_EXECCTRL_JMP_PIN_LSB); } static inline void usb_rx_fs_program_init(PIO pio, uint sm, uint offset, uint pin_dp, uint pin_dm, int pin_debug) { if (pin_dp < pin_dm) { pio_sm_set_consecutive_pindirs(pio, sm, pin_dp, 2, false); } else { pio_sm_set_consecutive_pindirs(pio, sm, pin_dm, 2, false); } gpio_pull_down(pin_dp); gpio_pull_down(pin_dm); gpio_set_inover(pin_dp, GPIO_OVERRIDE_INVERT); gpio_set_inover(pin_dm, GPIO_OVERRIDE_INVERT); pio_sm_config c; if (pin_debug < 0) { c = usb_nrzi_decoder_program_get_default_config(offset); } else { c = usb_nrzi_decoder_debug_program_get_default_config(offset); pio_sm_set_pins_with_mask(pio, sm, 0, 1 << pin_debug); pio_sm_set_pindirs_with_mask(pio, sm, 1 << pin_debug, 1 << pin_debug); pio_gpio_init(pio, pin_debug); sm_config_set_sideset_pins(&c, pin_debug); } sm_config_set_in_pins(&c, pin_dp); // for WAIT, IN sm_config_set_jmp_pin(&c, pin_dp); // for JMP // Shift to right, autopull enabled, 8bit sm_config_set_in_shift(&c, true, true, 8); sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX); pio_sm_init(pio, sm, offset, &c); pio_sm_exec(pio, sm, pio_encode_mov_not(pio_osr, pio_null)); pio_sm_set_enabled(pio, sm, false); } static inline void eop_detect_fs_program_init(PIO pio, uint sm, uint offset, uint pin_dp, uint pin_dm, bool is_fs, int pin_debug) { pio_sm_config c; if (pin_debug < 0) { c = usb_edge_detector_program_get_default_config(offset); } else { c = usb_edge_detector_debug_program_get_default_config(offset); pio_sm_set_pins_with_mask(pio, sm, 0, 1 << pin_debug); pio_sm_set_pindirs_with_mask(pio, sm, 1 << pin_debug, 1 << pin_debug); pio_gpio_init(pio, pin_debug); sm_config_set_sideset_pins(&c, pin_debug); } sm_config_set_in_pins(&c, pin_dp); // for WAIT, IN sm_config_set_jmp_pin(&c, pin_dm); // for JMP sm_config_set_in_shift(&c, false, false, 8); float div; if (is_fs) { div = (float)clock_get_hz(clk_sys) / (96000000); } else { div = (float)clock_get_hz(clk_sys) / (12000000); } sm_config_set_clkdiv(&c, div); pio_sm_init(pio, sm, offset + 1, &c); pio_sm_set_enabled(pio, sm, true); } %} ================================================ FILE: Pico-PIO-USB/src/usb_rx.pio.h ================================================ // -------------------------------------------------- // // This file is autogenerated by pioasm; do not edit! // // -------------------------------------------------- // #pragma once #if !PICO_NO_HARDWARE #include "hardware/pio.h" #endif #define IRQ_RX_BS_ERR 1 #define IRQ_RX_EOP 2 #define IRQ_RX_START 3 #define DECODER_TRIGGER 4 // ----------------- // // usb_edge_detector // // ----------------- // #define usb_edge_detector_wrap_target 3 #define usb_edge_detector_wrap 9 static const uint16_t usb_edge_detector_program_instructions[] = { 0xc022, // 0: irq wait 2 0x00c1, // 1: jmp pin, 1 0xc103, // 2: irq nowait 3 [1] // .wrap_target 0xc104, // 3: irq nowait 4 [1] 0x00cc, // 4: jmp pin, 12 0x00cc, // 5: jmp pin, 12 0x00cc, // 6: jmp pin, 12 0x00cc, // 7: jmp pin, 12 0x00cc, // 8: jmp pin, 12 0x00cc, // 9: jmp pin, 12 // .wrap 0xa226, // 10: mov x, isr [2] 0x0040, // 11: jmp x--, 0 0xa0c3, // 12: mov isr, null 0x4001, // 13: in pins, 1 0xc004, // 14: irq nowait 4 0x00ca, // 15: jmp pin, 10 0x0005, // 16: jmp 5 }; #if !PICO_NO_HARDWARE static const struct pio_program usb_edge_detector_program = { .instructions = usb_edge_detector_program_instructions, .length = 17, .origin = -1, }; static inline pio_sm_config usb_edge_detector_program_get_default_config(uint offset) { pio_sm_config c = pio_get_default_sm_config(); sm_config_set_wrap(&c, offset + usb_edge_detector_wrap_target, offset + usb_edge_detector_wrap); return c; } #endif // ----------------------- // // usb_edge_detector_debug // // ----------------------- // #define usb_edge_detector_debug_wrap_target 3 #define usb_edge_detector_debug_wrap 9 static const uint16_t usb_edge_detector_debug_program_instructions[] = { 0xc022, // 0: irq wait 2 side 0 0x10c1, // 1: jmp pin, 1 side 1 0xc103, // 2: irq nowait 3 side 0 [1] // .wrap_target 0xc104, // 3: irq nowait 4 side 0 [1] 0x10cc, // 4: jmp pin, 12 side 1 0x10cc, // 5: jmp pin, 12 side 1 0x10cc, // 6: jmp pin, 12 side 1 0x10cc, // 7: jmp pin, 12 side 1 0x10cc, // 8: jmp pin, 12 side 1 0x10cc, // 9: jmp pin, 12 side 1 // .wrap 0xb226, // 10: mov x, isr side 1 [2] 0x1040, // 11: jmp x--, 0 side 1 0xb0c3, // 12: mov isr, null side 1 0x4001, // 13: in pins, 1 side 0 0xc004, // 14: irq nowait 4 side 0 0x00ca, // 15: jmp pin, 10 side 0 0x1005, // 16: jmp 5 side 1 }; #if !PICO_NO_HARDWARE static const struct pio_program usb_edge_detector_debug_program = { .instructions = usb_edge_detector_debug_program_instructions, .length = 17, .origin = -1, }; static inline pio_sm_config usb_edge_detector_debug_program_get_default_config(uint offset) { pio_sm_config c = pio_get_default_sm_config(); sm_config_set_wrap(&c, offset + usb_edge_detector_debug_wrap_target, offset + usb_edge_detector_debug_wrap); sm_config_set_sideset(&c, 1, false, false); return c; } #endif // ---------------- // // usb_nrzi_decoder // // ---------------- // #define usb_nrzi_decoder_wrap_target 0 #define usb_nrzi_decoder_wrap 14 static const uint16_t usb_nrzi_decoder_program_instructions[] = { // .wrap_target 0xe046, // 0: set y, 6 0x20c4, // 1: wait 1 irq, 4 0x00c9, // 2: jmp pin, 9 0x006e, // 3: jmp !y, 14 0x0027, // 4: jmp !x, 7 0x4061, // 5: in null, 1 0x000e, // 6: jmp 14 0x40e1, // 7: in osr, 1 0x0081, // 8: jmp y--, 1 0x006e, // 9: jmp !y, 14 0x002d, // 10: jmp !x, 13 0x4021, // 11: in x, 1 0x0081, // 12: jmp y--, 1 0x4061, // 13: in null, 1 0xa029, // 14: mov x, !x // .wrap }; #if !PICO_NO_HARDWARE static const struct pio_program usb_nrzi_decoder_program = { .instructions = usb_nrzi_decoder_program_instructions, .length = 15, .origin = -1, }; static inline pio_sm_config usb_nrzi_decoder_program_get_default_config(uint offset) { pio_sm_config c = pio_get_default_sm_config(); sm_config_set_wrap(&c, offset + usb_nrzi_decoder_wrap_target, offset + usb_nrzi_decoder_wrap); return c; } #endif // ---------------------- // // usb_nrzi_decoder_debug // // ---------------------- // #define usb_nrzi_decoder_debug_wrap_target 0 #define usb_nrzi_decoder_debug_wrap 14 static const uint16_t usb_nrzi_decoder_debug_program_instructions[] = { // .wrap_target 0xe046, // 0: set y, 6 0x20c4, // 1: wait 1 irq, 4 0x00c9, // 2: jmp pin, 9 0x106e, // 3: jmp !y, 14 side 0 0x1027, // 4: jmp !x, 7 side 0 0x4061, // 5: in null, 1 0x000e, // 6: jmp 14 0x40e1, // 7: in osr, 1 0x0081, // 8: jmp y--, 1 0x186e, // 9: jmp !y, 14 side 1 0x182d, // 10: jmp !x, 13 side 1 0x4021, // 11: in x, 1 0x0081, // 12: jmp y--, 1 0x4061, // 13: in null, 1 0xa029, // 14: mov x, !x // .wrap }; #if !PICO_NO_HARDWARE static const struct pio_program usb_nrzi_decoder_debug_program = { .instructions = usb_nrzi_decoder_debug_program_instructions, .length = 15, .origin = -1, }; static inline pio_sm_config usb_nrzi_decoder_debug_program_get_default_config(uint offset) { pio_sm_config c = pio_get_default_sm_config(); sm_config_set_wrap(&c, offset + usb_nrzi_decoder_debug_wrap_target, offset + usb_nrzi_decoder_debug_wrap); sm_config_set_sideset(&c, 2, true, false); return c; } #include "hardware/clocks.h" static __always_inline void pio_sm_set_jmp_pin(PIO pio, uint sm, uint jmp_pin) { pio->sm[sm].execctrl = (pio->sm[sm].execctrl & ~PIO_SM0_EXECCTRL_JMP_PIN_BITS) | (jmp_pin << PIO_SM0_EXECCTRL_JMP_PIN_LSB); } static inline void usb_rx_fs_program_init(PIO pio, uint sm, uint offset, uint pin_dp, uint pin_dm, int pin_debug) { if (pin_dp < pin_dm) { pio_sm_set_consecutive_pindirs(pio, sm, pin_dp, 2, false); } else { pio_sm_set_consecutive_pindirs(pio, sm, pin_dm, 2, false); } gpio_pull_down(pin_dp); gpio_pull_down(pin_dm); gpio_set_inover(pin_dp, GPIO_OVERRIDE_INVERT); gpio_set_inover(pin_dm, GPIO_OVERRIDE_INVERT); pio_sm_config c; if (pin_debug < 0) { c = usb_nrzi_decoder_program_get_default_config(offset); } else { c = usb_nrzi_decoder_debug_program_get_default_config(offset); pio_sm_set_pins_with_mask(pio, sm, 0, 1 << pin_debug); pio_sm_set_pindirs_with_mask(pio, sm, 1 << pin_debug, 1 << pin_debug); pio_gpio_init(pio, pin_debug); sm_config_set_sideset_pins(&c, pin_debug); } sm_config_set_in_pins(&c, pin_dp); // for WAIT, IN sm_config_set_jmp_pin(&c, pin_dp); // for JMP // Shift to right, autopull enabled, 8bit sm_config_set_in_shift(&c, true, true, 8); sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX); pio_sm_init(pio, sm, offset, &c); pio_sm_exec(pio, sm, pio_encode_mov_not(pio_osr, pio_null)); pio_sm_set_enabled(pio, sm, false); } static inline void eop_detect_fs_program_init(PIO pio, uint sm, uint offset, uint pin_dp, uint pin_dm, bool is_fs, int pin_debug) { pio_sm_config c; if (pin_debug < 0) { c = usb_edge_detector_program_get_default_config(offset); } else { c = usb_edge_detector_debug_program_get_default_config(offset); pio_sm_set_pins_with_mask(pio, sm, 0, 1 << pin_debug); pio_sm_set_pindirs_with_mask(pio, sm, 1 << pin_debug, 1 << pin_debug); pio_gpio_init(pio, pin_debug); sm_config_set_sideset_pins(&c, pin_debug); } sm_config_set_in_pins(&c, pin_dp); // for WAIT, IN sm_config_set_jmp_pin(&c, pin_dm); // for JMP sm_config_set_in_shift(&c, false, false, 8); float div; if (is_fs) { div = (float)clock_get_hz(clk_sys) / (96000000); } else { div = (float)clock_get_hz(clk_sys) / (12000000); } sm_config_set_clkdiv(&c, div); pio_sm_init(pio, sm, offset + 1, &c); pio_sm_set_enabled(pio, sm, true); } #endif ================================================ FILE: Pico-PIO-USB/src/usb_tx.pio ================================================ ; Copyright (c) 2021-2023 sekigon-gonnoc .define public USB_TX_EOP_OFFSET 4 .define public USB_TX_EOP_DISABLER_LEN 4 ; USB NRZI transmitter ; Run at 48 MHz for full-spped ; Run at 6 MHz for low-spped ; autopull enabled .program usb_tx_dpdm .side_set 2 opt ; J for fs, K for ls .define FJ_LK 0b01 ; K for fs, J for ls .define FK_LJ 0b10 .define SE0 0b00 .define BR 5 ; bit repeat limit .define public IRQ_COMP 0 ; complete flag bit .define public IRQ_EOP 1 ; EOP start flag bit start: set y, BR side FJ_LK set pindirs, 0b11 .wrap_target check_eop1: jmp !osre load_bit1 nop [1] send_eop: irq IRQ_EOP side SE0 [3] ; To catch quik ACK, mark as complete here nop [3] nop side FJ_LK set pindirs, 0b00 [3] irq wait IRQ_COMP jmp start load_bit1: out x, 1 jmp !x low1 high1: jmp y-- check_eop1 side FJ_LK nop [2] ; bit stuffing low1: set y BR side FK_LJ check_eop2: jmp !osre load_bit2 jmp send_eop [1] load_bit2: out x, 1 jmp !x low2 high2: jmp y-- check_eop2 side FK_LJ nop [2] ; bit stuffing low2: set y BR side FJ_LK .wrap ; USB transmitter for PRE packet (No EOP) ; Run at 48 MHz for full-spped ; autopull enabled .program usb_tx_pre_dpdm .side_set 2 opt .define J 0b01 .define K 0b10 .define SE0 0b00 .define BR 5 ; bit repeat limit .define public IRQ_COMP 0 ; complete flag bit .define public IRQ_EOP 1 ; EOP start flag bit start: set y, BR side J set pindirs, 0b11 .wrap_target check_eop1: jmp !osre load_bit1 nop [1] send_eop: irq IRQ_EOP side J [3] set pindirs, 0b00 nop ; to align program size nop ; to align program size irq wait IRQ_COMP jmp start load_bit1: out x, 1 jmp !x low1 high1: jmp y-- check_eop1 side J nop [2] ; bit stuffing low1: set y BR side K check_eop2: jmp !osre load_bit2 jmp send_eop [1] load_bit2: out x, 1 jmp !x low2 high2: jmp y-- check_eop2 side K nop [2] ; bit stuffing low2: set y BR side J .wrap ; USB NRZI transmitter ; Run at 48 MHz for full-spped ; Run at 6 MHz for low-spped ; autopull enabled .program usb_tx_dmdp .side_set 2 opt .define FK_LJ 0b10 .define FJ_LK 0b01 .define SE0 0b00 .define BR 5 ; bit repeat limit .define public IRQ_COMP 0 ; complete flag bit .define public IRQ_EOP 1 ; EOP start flag bit start: set y, BR side FK_LJ set pindirs, 0b11 .wrap_target check_eop1: jmp !osre load_bit1 nop [1] send_eop: irq IRQ_EOP side SE0 [3] nop [3] nop side FK_LJ set pindirs, 0b00 [3] irq wait IRQ_COMP jmp start load_bit1: out x, 1 jmp !x low1 high1: jmp y-- check_eop1 side FK_LJ nop [2] ; bit stuffing low1: set y BR side FJ_LK check_eop2: jmp !osre load_bit2 jmp send_eop [1] load_bit2: out x, 1 jmp !x low2 high2: jmp y-- check_eop2 side FJ_LK nop [2] ; bit stuffing low2: set y BR side FK_LJ .wrap ; USB transmitter for PRE packet (No EOP) ; Run at 48 MHz for full-spped ; autopull enabled .program usb_tx_pre_dmdp .side_set 2 opt .define J 0b10 .define K 0b01 .define SE0 0b00 .define BR 5 ; bit repeat limit .define public IRQ_COMP 0 ; complete flag bit .define public IRQ_EOP 1 ; EOP start flag bit start: set y, BR side J set pindirs, 0b11 .wrap_target check_eop1: jmp !osre load_bit1 nop [1] send_eop: irq IRQ_EOP side J [3] set pindirs, 0b00 nop ; to align program size nop ; to align program size irq wait IRQ_COMP jmp start load_bit1: out x, 1 jmp !x low1 high1: jmp y-- check_eop1 side J nop [2] ; bit stuffing low1: set y BR side K check_eop2: jmp !osre load_bit2 jmp send_eop [1] load_bit2: out x, 1 jmp !x low2 high2: jmp y-- check_eop2 side K nop [2] ; bit stuffing low2: set y BR side J .wrap % c-sdk { #include "hardware/clocks.h" static void __no_inline_not_in_flash_func(usb_tx_configure_pins)(PIO pio, uint sm, uint pin_dp, uint pin_dm) { if (pin_dp < pin_dm) { pio_sm_set_out_pins(pio, sm, pin_dp, 2); pio_sm_set_set_pins(pio, sm, pin_dp, 2); pio_sm_set_sideset_pins(pio, sm, pin_dp); } else { pio_sm_set_out_pins(pio, sm, pin_dm, 2); pio_sm_set_set_pins(pio, sm, pin_dm, 2); pio_sm_set_sideset_pins(pio, sm, pin_dm); } } static inline void usb_tx_fs_program_init(PIO pio, uint sm, uint offset, uint pin_dp, uint pin_dm) { pio_sm_set_pins_with_mask(pio, sm, (1 << pin_dp), ((1 << pin_dp) | (1 << pin_dm))); gpio_pull_down(pin_dp); gpio_pull_down(pin_dm); pio_gpio_init(pio, pin_dp); pio_gpio_init(pio, pin_dm); pio_sm_config c = usb_tx_dpdm_program_get_default_config(offset); // shifts to left, autopull, 8bit sm_config_set_out_shift(&c, true, true, 8); sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX); // run at 48MHz // clk_sys should be multiply of 12MHz float div = (float)clock_get_hz(clk_sys) / (48000000UL); sm_config_set_clkdiv(&c, div); pio_sm_init(pio, sm, offset, &c); usb_tx_configure_pins(pio, sm, pin_dp, pin_dm); pio_sm_set_enabled(pio, sm, true); } static inline void usb_tx_ls_program_init(PIO pio, uint sm, uint offset, uint pin_dp, uint pin_dm) { pio_sm_set_pins_with_mask(pio, sm, (1 << pin_dm), ((1 << pin_dp) | (1 << pin_dm))); gpio_pull_down(pin_dp); gpio_pull_down(pin_dm); pio_gpio_init(pio, pin_dp); pio_gpio_init(pio, pin_dm); pio_sm_config c = usb_tx_dmdp_program_get_default_config(offset); // shifts to left, autopull, 8bit sm_config_set_out_shift(&c, true, true, 8); sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX); // run at 6MHz // clk_sys should be multiply of 12MHz float div = (float)clock_get_hz(clk_sys) / (6000000UL); sm_config_set_clkdiv(&c, div); pio_sm_init(pio, sm, offset, &c); usb_tx_configure_pins(pio, sm, pin_dp, pin_dm); pio_sm_set_enabled(pio, sm, true); } %} ================================================ FILE: Pico-PIO-USB/src/usb_tx.pio.h ================================================ // -------------------------------------------------- // // This file is autogenerated by pioasm; do not edit! // // -------------------------------------------------- // #pragma once #if !PICO_NO_HARDWARE #include "hardware/pio.h" #endif #define USB_TX_EOP_OFFSET 4 #define USB_TX_EOP_DISABLER_LEN 4 // ----------- // // usb_tx_dpdm // // ----------- // #define usb_tx_dpdm_wrap_target 2 #define usb_tx_dpdm_wrap 21 #define usb_tx_dpdm_IRQ_COMP 0 #define usb_tx_dpdm_IRQ_EOP 1 static const uint16_t __not_in_flash("tx_program") usb_tx_dpdm_program_instructions[] = { 0xf445, // 0: set y, 5 side 1 0xe083, // 1: set pindirs, 3 // .wrap_target 0x00ea, // 2: jmp !osre, 10 0xa142, // 3: nop [1] 0xd301, // 4: irq nowait 1 side 0 [3] 0xa342, // 5: nop [3] 0xb442, // 6: nop side 1 0xe380, // 7: set pindirs, 0 [3] 0xc020, // 8: irq wait 0 0x0000, // 9: jmp 0 0x6021, // 10: out x, 1 0x002e, // 11: jmp !x, 14 0x1482, // 12: jmp y--, 2 side 1 0xa242, // 13: nop [2] 0xf845, // 14: set y, 5 side 2 0x00f1, // 15: jmp !osre, 17 0x0104, // 16: jmp 4 [1] 0x6021, // 17: out x, 1 0x0035, // 18: jmp !x, 21 0x188f, // 19: jmp y--, 15 side 2 0xa242, // 20: nop [2] 0xf445, // 21: set y, 5 side 1 // .wrap }; #if !PICO_NO_HARDWARE static const struct pio_program __not_in_flash("tx_program") usb_tx_dpdm_program = { .instructions = usb_tx_dpdm_program_instructions, .length = 22, .origin = -1, }; static inline pio_sm_config usb_tx_dpdm_program_get_default_config(uint offset) { pio_sm_config c = pio_get_default_sm_config(); sm_config_set_wrap(&c, offset + usb_tx_dpdm_wrap_target, offset + usb_tx_dpdm_wrap); sm_config_set_sideset(&c, 3, true, false); return c; } #endif // --------------- // // usb_tx_pre_dpdm // // --------------- // #define usb_tx_pre_dpdm_wrap_target 2 #define usb_tx_pre_dpdm_wrap 21 #define usb_tx_pre_dpdm_IRQ_COMP 0 #define usb_tx_pre_dpdm_IRQ_EOP 1 static const uint16_t __not_in_flash("tx_program") usb_tx_pre_dpdm_program_instructions[] = { 0xf445, // 0: set y, 5 side 1 0xe083, // 1: set pindirs, 3 // .wrap_target 0x00ea, // 2: jmp !osre, 10 0xa142, // 3: nop [1] 0xd701, // 4: irq nowait 1 side 1 [3] 0xe080, // 5: set pindirs, 0 0xa042, // 6: nop 0xa042, // 7: nop 0xc020, // 8: irq wait 0 0x0000, // 9: jmp 0 0x6021, // 10: out x, 1 0x002e, // 11: jmp !x, 14 0x1482, // 12: jmp y--, 2 side 1 0xa242, // 13: nop [2] 0xf845, // 14: set y, 5 side 2 0x00f1, // 15: jmp !osre, 17 0x0104, // 16: jmp 4 [1] 0x6021, // 17: out x, 1 0x0035, // 18: jmp !x, 21 0x188f, // 19: jmp y--, 15 side 2 0xa242, // 20: nop [2] 0xf445, // 21: set y, 5 side 1 // .wrap }; #if !PICO_NO_HARDWARE static const struct pio_program __not_in_flash("tx_program") usb_tx_pre_dpdm_program = { .instructions = usb_tx_pre_dpdm_program_instructions, .length = 22, .origin = -1, }; static inline pio_sm_config usb_tx_pre_dpdm_program_get_default_config(uint offset) { pio_sm_config c = pio_get_default_sm_config(); sm_config_set_wrap(&c, offset + usb_tx_pre_dpdm_wrap_target, offset + usb_tx_pre_dpdm_wrap); sm_config_set_sideset(&c, 3, true, false); return c; } #endif // ----------- // // usb_tx_dmdp // // ----------- // #define usb_tx_dmdp_wrap_target 2 #define usb_tx_dmdp_wrap 21 #define usb_tx_dmdp_IRQ_COMP 0 #define usb_tx_dmdp_IRQ_EOP 1 static const uint16_t __not_in_flash("tx_program") usb_tx_dmdp_program_instructions[] = { 0xf845, // 0: set y, 5 side 2 0xe083, // 1: set pindirs, 3 // .wrap_target 0x00ea, // 2: jmp !osre, 10 0xa142, // 3: nop [1] 0xd301, // 4: irq nowait 1 side 0 [3] 0xa342, // 5: nop [3] 0xb842, // 6: nop side 2 0xe380, // 7: set pindirs, 0 [3] 0xc020, // 8: irq wait 0 0x0000, // 9: jmp 0 0x6021, // 10: out x, 1 0x002e, // 11: jmp !x, 14 0x1882, // 12: jmp y--, 2 side 2 0xa242, // 13: nop [2] 0xf445, // 14: set y, 5 side 1 0x00f1, // 15: jmp !osre, 17 0x0104, // 16: jmp 4 [1] 0x6021, // 17: out x, 1 0x0035, // 18: jmp !x, 21 0x148f, // 19: jmp y--, 15 side 1 0xa242, // 20: nop [2] 0xf845, // 21: set y, 5 side 2 // .wrap }; #if !PICO_NO_HARDWARE static const struct pio_program __not_in_flash("tx_program") usb_tx_dmdp_program = { .instructions = usb_tx_dmdp_program_instructions, .length = 22, .origin = -1, }; static inline pio_sm_config usb_tx_dmdp_program_get_default_config(uint offset) { pio_sm_config c = pio_get_default_sm_config(); sm_config_set_wrap(&c, offset + usb_tx_dmdp_wrap_target, offset + usb_tx_dmdp_wrap); sm_config_set_sideset(&c, 3, true, false); return c; } #endif // --------------- // // usb_tx_pre_dmdp // // --------------- // #define usb_tx_pre_dmdp_wrap_target 2 #define usb_tx_pre_dmdp_wrap 21 #define usb_tx_pre_dmdp_IRQ_COMP 0 #define usb_tx_pre_dmdp_IRQ_EOP 1 static const uint16_t __not_in_flash("tx_program") usb_tx_pre_dmdp_program_instructions[] = { 0xf845, // 0: set y, 5 side 2 0xe083, // 1: set pindirs, 3 // .wrap_target 0x00ea, // 2: jmp !osre, 10 0xa142, // 3: nop [1] 0xdb01, // 4: irq nowait 1 side 2 [3] 0xe080, // 5: set pindirs, 0 0xa042, // 6: nop 0xa042, // 7: nop 0xc020, // 8: irq wait 0 0x0000, // 9: jmp 0 0x6021, // 10: out x, 1 0x002e, // 11: jmp !x, 14 0x1882, // 12: jmp y--, 2 side 2 0xa242, // 13: nop [2] 0xf445, // 14: set y, 5 side 1 0x00f1, // 15: jmp !osre, 17 0x0104, // 16: jmp 4 [1] 0x6021, // 17: out x, 1 0x0035, // 18: jmp !x, 21 0x148f, // 19: jmp y--, 15 side 1 0xa242, // 20: nop [2] 0xf845, // 21: set y, 5 side 2 // .wrap }; #if !PICO_NO_HARDWARE static const struct pio_program __not_in_flash("tx_program") usb_tx_pre_dmdp_program = { .instructions = usb_tx_pre_dmdp_program_instructions, .length = 22, .origin = -1, }; static inline pio_sm_config usb_tx_pre_dmdp_program_get_default_config(uint offset) { pio_sm_config c = pio_get_default_sm_config(); sm_config_set_wrap(&c, offset + usb_tx_pre_dmdp_wrap_target, offset + usb_tx_pre_dmdp_wrap); sm_config_set_sideset(&c, 3, true, false); return c; } #include "hardware/clocks.h" static void __no_inline_not_in_flash_func(usb_tx_configure_pins)(PIO pio, uint sm, uint pin_dp, uint pin_dm) { if (pin_dp < pin_dm) { pio_sm_set_out_pins(pio, sm, pin_dp, 2); pio_sm_set_set_pins(pio, sm, pin_dp, 2); pio_sm_set_sideset_pins(pio, sm, pin_dp); } else { pio_sm_set_out_pins(pio, sm, pin_dm, 2); pio_sm_set_set_pins(pio, sm, pin_dm, 2); pio_sm_set_sideset_pins(pio, sm, pin_dm); } } static inline void usb_tx_fs_program_init(PIO pio, uint sm, uint offset, uint pin_dp, uint pin_dm) { pio_sm_set_pins_with_mask(pio, sm, (1 << pin_dp), ((1 << pin_dp) | (1 << pin_dm))); gpio_pull_down(pin_dp); gpio_pull_down(pin_dm); pio_gpio_init(pio, pin_dp); pio_gpio_init(pio, pin_dm); pio_sm_config c = usb_tx_dpdm_program_get_default_config(offset); // shifts to left, autopull, 8bit sm_config_set_out_shift(&c, true, true, 8); sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX); // run at 48MHz // clk_sys should be multiply of 12MHz float div = (float)clock_get_hz(clk_sys) / (48000000UL); sm_config_set_clkdiv(&c, div); pio_sm_init(pio, sm, offset, &c); usb_tx_configure_pins(pio, sm, pin_dp, pin_dm); pio_sm_set_enabled(pio, sm, true); } static inline void usb_tx_ls_program_init(PIO pio, uint sm, uint offset, uint pin_dp, uint pin_dm) { pio_sm_set_pins_with_mask(pio, sm, (1 << pin_dm), ((1 << pin_dp) | (1 << pin_dm))); gpio_pull_down(pin_dp); gpio_pull_down(pin_dm); pio_gpio_init(pio, pin_dp); pio_gpio_init(pio, pin_dm); pio_sm_config c = usb_tx_dmdp_program_get_default_config(offset); // shifts to left, autopull, 8bit sm_config_set_out_shift(&c, true, true, 8); sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX); // run at 6MHz // clk_sys should be multiply of 12MHz float div = (float)clock_get_hz(clk_sys) / (6000000UL); sm_config_set_clkdiv(&c, div); pio_sm_init(pio, sm, offset, &c); usb_tx_configure_pins(pio, sm, pin_dp, pin_dm); pio_sm_set_enabled(pio, sm, true); } #endif ================================================ FILE: README.md ================================================ # DeskHop - Fast Desktop Switching Did you ever notice how, in the crazy world of tech, there's always that one quirky little project trying to solve a problem so niche that its only competitors might be a left-handed screwdriver and a self-hiding alarm clock? I use two different computers in my daily workflow and share a single keyboard/mouse pair between them. Trying several USB switching boxes found on Amazon made me realize they all suffer from similar issues - it takes a while to switch, the process is quite clumsy when trying to find the button and frankly, it just doesn't get any better with time. All I wanted was a way to use a keyboard shortcut to quickly switch outputs, paired with the ability to do the same by magically moving the mouse pointer between monitors. This project enables you to do both, even if your computers run different operating systems! ![DeskHop case and board](img/case_and_board_s.png) ## Features - Completely **[free and open source](https://certification.oshwa.org/de000149.html)** - No noticeable delay when switching - Simply drag the mouse pointer between computers - No software installed - Affordable and obtainable components (<15€) - 3D printable snap-fit case - Full Galvanic isolation between your outputs - Works with Linux, macOS and Windows [User Manual](misc/user-manual.pdf) is now available ![Open Source Hardware Logo](img/oshw.svg) ------ ## How it works The device acts as an intermediary between your keyboard/mouse and the computer, establishing and maintaining connections with both computers at once. Then it chooses where to forward your mouse and keystrokes to, depending on your selection. Keyboard follows the mouse and vice versa, so just dragging the mouse to the other desktop will switch both. ## Mouse To get the mouse cursor to magically jump across, the mouse hid report descriptor was changed to use absolute coordinates and then the mouse reports (that still come in relative movements) accumulate internally, keeping the accurate tally on the position. When you try to leave the monitor area in the direction of the other monitor, it keeps the Y coordinate and swaps the maximum X for a minimum X, then flips the outputs. This ensures that the cursor seamlessly appears at the same height on the other monitor, enhancing the perception of a smooth transition. ![DeskHop Mouse Demo](img/deskhop-demo.gif)

Dragging the mouse from Mac to Linux automatically switches outputs.

------ The actual switch happens at the very moment when one arrow stops moving and the other one starts. ## Keyboard Acting as a USB Host and querying your keyboard periodically, it looks for a preconfigured hotkey in the hid report (usually Ctrl + Caps Lock for me). When found, it will forward all subsequent characters to the other output. To have a visual indication which output you are using at any given moment, you can repurpose keyboard LEDs and have them provide the necessary feedback. It also remembers the LED state for each computer, so you can pick up exactly how you left it. ![DeskHop Typing Demo](img/demo-typing.gif) ## How to build To avoid version mismatch and reported path issues when building, as well as to save you from having to download a large SDK, the project now bundles minimal pico sdk and tinyusb. On a Debian/Ubuntu systems, make sure to install these: ```shell apt update apt install \ build-essential \ cmake \ gcc-arm-none-eabi \ libnewlib-arm-none-eabi \ python3 ``` You should be able to build by running: ```shell cmake -S . -B build cmake --build build ``` additionally, to rebuild web UI check webconfig/ and execute ```./render.py```, you'll need jinja2 installed. An alternative can be to use docker via 'docker compose' or 'docker-compose': ``` docker-compose -f misc/docker.yml run --rm build_container ``` This ensures reproducible builds. To rebuild the disk, check disk/ folder and run ```./create.sh```, tweak to your system if needed. You'll need **dosfstools** (to provide mkdosfs), ## Using a pre-built image Alternatively, you can use the [pre-built images](https://github.com/hrvach/deskhop/releases). Since version 0.6 there is only a single universal image. You need the .uf2 file which you simply copy to the device in one of the following ways: ## Upgrading firmware **Option 1** - (firmware 0.6 and later) Put the device in "config mode" by simultaneously pressing **left ctrl + right shift + c + o**. Device your keyboard is plugged into will reboot and turn into a USB drive called "DESKHOP". All you need to do is copy the .uf2 file to it. Once image is verified, device will flash and reboot, then proceed to upgrade the other board. During this operation the led will blink. Once it's done, it will write flash and reboot, completing the operation. _Note_ - This is not an actual generic USB drive, you can't use it to copy files to it. **Option 2** - Using the ROM bootloader - hold the on-board button while connecting each Pico and copy the uf2 to the flash drive that appears. Images later than 0.6 support holding the button without having to fiddle around the power supply, but the "hold button while plugging" should always work, regardless of device state. **Option 3** - CDC Flash Command (Debug builds only) - If the firmware was built with `DH_DEBUG_CDC_FLASH=ON`, you can trigger bootloader mode via CDC serial command: ```shell echo -n 'flash' > /dev/tty.usbmodem11104 ``` This immediately resets the device into bootloader mode where it appears as "RPI-RP2" drive. This feature is intended for development workflows. ## Misc features ### Mouse slowdown Ever tried to move that YT video slider to a specific position but your mouse moves too jumpy and suddenly you are moving your hand super-carefully like you're 5 and playing "Operation" all over again? **Press right CTRL + right ALT** to toggle a slow-mouse mode. The mouse pointer will slow down considerably, enabling you to get the finer precision work done and still have your mouse moving normally by quickly pressing the same keys again. ### Switch Lock If you want to lock yourself to one screen, use ```RIGHT CTRL + K```. This will make sure you won't accidentally leave your current screen. To turn off, press the same key combo again. ### Lock Both Screens You can lock both computers at once by using ```RIGHT CTRL + L```. To make use of this feature, first set up the OS for each output in config (since the shortcuts are different). ### Gaming Mode If you're gaming, there is a chance your game might not work properly with absolute mouse mode. To address that issue, a **gaming mode** is introduced, toggled by ```LEFT CTRL + RIGHT SHIFT + G```. When in gaming mode, you are locked to the current screen and your mouse behaves like a standard relative mouse. This should also fix various virtual machine issues, currently unsupported operating systems etc. ### Screensaver Supposedly built in to prevent computer from entering standby, but truth be told - it is just fun to watch. **Off by default**, will make your mouse pointer bounce around the screen like a Pong ball. When enabled, it activates after a period of inactivity defined in user config header and automatically switches off as soon as you send any output towards that screen. Potential usage example - I have a buggy USB dock that won't resume video from standby, so not allowing it to sleep can be a handy workaround. ## Hardware [The circuit](schematics/DeskHop_v1.1.pdf) is based on two Raspberry Pi Pico boards, chosen because they are cheap (4.10 € / pc), can be hand soldered and most suppliers have them in stock. The Picos are connected using UART and separated by an Analog Devices ADuM1201 dual-channel digital isolator (~3€) or a much cheaper, faster and pin-compatible TI ISO7721DR (~1.5€) which is the preferred choice. While they normally don't have support for dual USB, thanks to an [amazing project](https://github.com/sekigon-gonnoc/Pico-PIO-USB) where USB is implemented using the programmable IO wizardry found in RP2040, there is support for it to act both as an USB host and device. ## PCB [updated] To keep things as simple as possible for DIY builds, the traces were kept on one side and the number of parts kept to a minimum. ![PCB Image](img/plocica2.png) USB D+/D- differential lines should be identical in length, but they are slightly asymmetrical on purpose to counter the length difference on the corresponding GPIO traces PICO PCB itself, so the overall lengths should match. Zd (differential impedance) is aimed as 90 ohm (managed to get ~107, close enough :)). The thickness is designed to be 1.6 mm for snap-fit to work as expected. There are 2 versions of the PCB (no major differences for the user). Original (v1.0) is easier to solder and assemble, while v1.1 offers some upgrades like: - added ESD protection (TPD4E1U06DBVR) - added VBUS capacitor for the keyboard/mouse connectors - silkscreen orientation markings - holes for clone boards with headers pre-soldered and easier alignment - USB 27 ohm resistors This version is slightly more difficult to hand solder due to the small transient voltage suppressor IC and 0805 resistors, but it's totally doable. TVS can in theory be omitted (not advised) and it will still work. Upcoming - board with bare rp2040s that doesn't need Picos, is smaller and more convenient. ## Case Since I'm not very good with 3d, the case is [simple and basic](case/) but does the job. It should be easy to print, uses ~33g of filament and takes a couple of hours. Horizontal PCB movements are countered by pegs sliding through holes and vertical movements by snap-fit lugs on the sides - no screws required. The case was given a slight redesign to feature the logo and two additional snap-fit lugs, so it provides a better seal. Micro USB connectors on both boards are offset from the side of the case, so slightly larger holes should allow for cables to reach in. The lid is of a snap-fit design, with a screwdriver slot for opening. The markings on top are recessed and can be finished with e.g. crayons to give better contrast (or simply left as-is). ![DeskHop with 3D Printed Case](img/deskhop-case.gif) ## Bill of materials
Click here to view original PCB v1.0 BOM | Component | Qty | Unit Price / € | Price / €| |--------------------|-----|----------------|----------| | Raspberry Pi Pico | 2 | 4.10 | 8.20 | | ADuM1201BRZ | 1 | 2.59 | 2.59 | | Cap 1206 SMD 100nF | 2 | 0.09 | 0.18 | | USB-A PCB conn. | 2 | 0.20 | 0.40 | | Headers 2.54 1x03 | 2 | 0.08 | 0.16 | | | | | | | | | Total | 11.53 | TI ISO7721DR can be used instead of the ADuM - it's pin-compatible, much cheaper and with better specs.
### PCB v1.1 | Component | Part | Qty | Unit Price / € | Price / €| |----------------|---------------------|-----|----------------|----------| | U1, U2 | Raspberry Pi Pico | 2 | 4.10 | 8.20 | | J1, J4 | USB-A PCB conn. | 2 | 0.20 | 0.40 | | U4 | TI ISO7721DR | 1 | 1.40 | 1.40 | | | (**OR** ADuM1201BRZ)| | | | | C1, C2 | Cap 0805 SMD 100nF | 2 | 0.09 | 0.18 | | R1, R2, R3, R4 | Res 0805 SMD 27ohm | 4 | 0.03 | 0.12 | | U3, U5 | TPD4E1U06DBVR | 2 | 0.31 | 0.62 | | C3, C4 | Cap 4.7uF SMD 0805 | 2 | 0.07 | 0.14 | | J2, J3 | Headers 2.54 1x03 | 2 | 0.08 | 0.16 | | | | | | | | | | | Total | 11.22 | USB-A connector can be Molex MX-67643-0910 or a cheaper/budget one that shares the same dimensions. Additional steps: - making the PCB ([Gerber provided](pcb/), choose 1.6 mm thickness) - 3d printing the case ([stl files provided](case/), ~33g filament) ## Assembly guide If you have some experience with electronics, you don't need this. However, some of you might not, and in that case this video might help guide you through the process. Please note, after soldering you should clean the flux from the PCB to prevent corrosion. The standard process to do that is using isopropyl alcohol and an old toothbrush. But guess what? I'm not putting my old toothbrush online, so you'll just have to improvise that part :) [![PCB Assembly Guide](img/yt-video-s.jpg)](https://www.youtube.com/watch?v=LxI9NYi_oOU) [NOTE] The video assembly guide covers pcb v1.0. The revised version is very similar and the procedure is basically the same. ## Usage guide ### Keyboard shortcuts - (fw versions 0.68+) _Config_: - ~~```Left Shift```~~ ```Left Ctrl + Right Shift + C + O``` - enter config mode - ```Right Shift + F12 + D``` - remove flash config - ```Right Shift + F12 + Y``` - save screen switch offset _Usage_: - ```Right CTRL + Right ALT``` - Toggle slower mouse mode - ```Right CTRL + K``` - Lock/Unlock mouse desktop switching - ```Right CTRL + L``` - Lock both outputs at once (set output OS before, see shortcuts below) - ~~```Left Shift```~~ ```Left CTRL + Right Shift + G``` - Toggle gaming mode (lock to screen, act as standard mouse) - ```Left CTRL + Right Shift + S``` - Enable screensaver - ```Left CTRL + Right Shift + X``` - Disable screensaver - ```Left CTRL + Caps Lock``` - Switch between outputs Note: some keyboards don't send both shifts at the same time properly, that's why the shortcut was changed - to work for everyone. Apologies for the confusion. ### Switch cursor height calibration This step is not required, but it can be handy if your screens are not perfectly aligned or differ in size. The objective is to have the mouse pointer come out at exactly the same height. ![Border height difference](img/border_top_s.png) Just park your mouse on the LARGER screen at the height of the smaller/lower screen (illustrated) and press ```Right Shift + F12 + Y```. Your LED (and caps lock) should flash in confirmation. Repeat for the bottom border (if it's above the larger screen's border). This will get saved to flash and it should keep this calibration value from now on. ### Multiple screens per output Windows and Mac have issues with multiple screens and absolute positioning, so workarounds are needed (still experimental). There is a better workaround under construction, but for now you have to set the operating system for each output and number of screens. Your main screens need to be in the middle, and secondary screen(s) on the edges. To configure the actual options, open the web configuration page for your device. ![Multiple screens per output](img/deskhop-scr.png) ### Web configuration mode Starting with fw 0.6, an improved configuration mode is introduced. To configure your device, follow these instructions: 1. Press Left Ctrl + Right Shift + C + O - your device will reboot and enter configuration mode (on the side your keyboard is plugged into). LED will keep blinking during the configuration session. 1. A new USB drive will appear named "DESKHOP" with a single file, config.htm 1. Open that file with Chromium / Chrome. Unfortunately FF is not supported right now, since they avoid implementing WebHID. 1. Click connect and allow deskhop device to pair. ![Web Browser with URL](img/connect-dialog.png) 1. Configure the options as you wish and click save to write to device. 1. Click "exit" in the menu to leave configuration mode for added safety. ![Web Config](img/config-page-big.png)
Linux doesn't see device? Click here. **Q**: Chromium on Linux doesn't work. **A**: You probably need to tweak /dev permissions or create a corresponding udev rules file and make sure your user is in the right group, like so: /etc/udev/rules.d/99-deskhop.rules ```plain KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="c000", GROUP="plugdev", MODE="0660" ```

**Q**: Why not simply create a nice online web page like Via instead of dealing with this weird USB drive thing? **A**: Loading javascript from a random online location that interacts with your input devices is a potential security risk. The configuration web page is local only and nothing is ever loaded externally. Please note the config web page is not "weird" because of deliberate obfuscation - it's self-decompressing due to very limited storage. Entire source is 100% open and a part of this repo. You are encouraged to rebuild everything yourself. ### Functional verification When you connect a new USB peripheral, the board will flash the led twice, and instruct the other board to do the same. This way you can test if USB and outgoing communication works for each board. Do this test by first plugging the keyboard on one side and then on the other. If everything is OK, leds will flash quickly back and forth in both cases. ## Security and Safety Some features are missing on purpose, despite the fact it would make the device easier to use or simpler to configure. Here is a quick breakdown of these decisions: - There is no copy-paste or _any_ information sharing between systems. This prevents information leakage. - No webhid device management without explicit user consent. No inbound connectivity from the output computers, with the only exception of standard keyboard LED on/off messages and hard limited to 1 byte of data. - No FW upgrade triggering from the outputs. Only explicit and deliberate user action through a special keyboard shortcut may do that. - No plugged-in keyboard/mouse custom endpoints are exposed or information forwarded towards these devices. Their potential vulnerabilities are effectively firewalled from the computer. - No input history is allowed to be retained. - No device-initiated keystrokes, for any reason. Only thing that comes out is what you type/trigger. - Outputs are physically separated and galvanically isolated with a minimal isolation voltage of 2kV. - All packets exchanged between devices are of fixed length, config options transferred are limited to a short list. Most options are read-only. Cross-device firmware upgrades can be disabled. - There is no bluetooth or wifi, networking, Internet access, etc. - No connected computer is considered trusted under any circumstances. - Configuration mode is automatically disabled after a period of inactivity. - Entirety of the code is open source, without any binary blobs and thoroughly commented to explain its purpose. I encourage you to never trust anyone and always make sure you know what you are running by doing a manual audit. This still doesn't guarantee anything, but I believe it makes a reasonable set of ground rules to keep you safe and protected. ## FAQ 1. I just have two Picos, can I do without a PCB and isolator? _Sure. Having an isolator is recommended but it should work without it._ 1. What happens if I have two different resolutions on my monitors? _The mouse movement is done in abstract coordinate space and your computer figures out how that corresponds with the physical screen, so it should just work._ 1. Where can I buy it? _I'm not selling anything, this is just a personal, non-commercial hobby project._ _**UPDATE 1**: It seems you can order it in QTY of 1 (for either PCB, assembled PCB or a fully assembled device) from [Elecrow if you follow this link](https://www.elecrow.com/deskhop-fast-desktop-switching.html)_ _As reported by users, your **board will arrive blank** and you have to write the firmware yourself._ _**UPDATE 2**: I never asked Elecrow for anything, but a couple of days ago they offered to sponsor the project with a small budget that will be used for future board prototyping. Since my goal is to create a better board with more than 2 outputs etc, I believe prototyping services might be beneficial to the project._ 1. When the active screen is changed via the mouse, does the keyboard follow (and vice versa)? _Yes, the idea was to make it behave like it was one single computer._ 1. Will this work with keyboard/mouse combo dongles, like the Logitech Unifying receiver? _It should work. After a recent FW update, support for combo receivers should be much better._ 1. Will this work with wireless mice and keyboards that have separate wireless receivers (one for the mouse, another for the keyboard)? _It should work - tried an Anker wireless mouse with a separate receiver and that worked just fine._ 1. I have issues with build or compilation _Check out the [Troubleshooting Wiki](https://github.com/hrvach/deskhop/wiki/Troubleshooting) that might have some answers._ ## Software Alternatives There are several software alternatives you can use if that works in your particular situation. 1. [Barrier](https://github.com/debauchee/barrier) - Free, Open Source 1. [Input Leap](https://github.com/input-leap/input-leap) - Free, Open Source 1. [Synergy](https://symless.com/synergy) - Commercial 1. [Mouse Without Borders](https://www.microsoft.com/en-us/garage/wall-of-fame/mouse-without-borders/) - Free, Windows only 1. [Universal Control](https://support.apple.com/en-my/HT212757) - Free, Apple thing ## Shortcomings - Windows 10 broke HID absolute coordinates behavior in KB5003637, so you can't use more than 1 screen on Windows (mouse will stay on the main screen). There is an experimental workaround with a better one on the way. - Code needs cleanup, some refactoring etc. - Not tested with a wide variety of devices, I don't know how it will work with your hardware. There is a reasonable chance things might not work out-of-the-box. - Advanced keyboards (with knobs, extra buttons or sliders) will probably face issues where this additional hardware doesn't work. - Super-modern mice with 300 buttons might see some buttons not work as expected. - NOTE: **Both computers need to be connected and provide power to the USB for this to work** (as each board gets powered by the computer it plugs into). Many desktops and laptops will provide power even when shut down nowadays. If you need to run with one board fully disconnected, you should be able to use a USB hub to plug both keyboard and mouse to a single port. - MacOS has issues with more than one screens, latest firmware offers an experimental workaround that fixes it. ## Progress So, what's the deal with all the enthusiasm? I can't believe it - please allow me to thank you all! I've never expected this kind of interest in a simple personal project, so the initial features are pretty basic (just like my cooking skills) and mostly cover my own usecase. Stay tuned for firmware updates that should bring wider device compatibility, more features and less bugs. As this is a hobby project, I appreciate your understanding for being time-constrained and promise to do the best I can. Planned features: - Better workarounds for multiscreen windows and macos - Transparent / Gaming mode - Support for more than 2 outputs - Improvements on the configuration UI - ... and more! Working on a _lite_ version which provides basic functionality with just a single Pico W board, lowering the cost even further and enabling you to try it out even with no added hardware or PCB. Mouse polling should now work at 1000 Hz (the dips in the graph is my arm hurting from all the movement :-)): ![Mouse polling rate](img/polling_rate.png) ## Sponsor / donate I'm NOT doing this for profit or any other reason except to try and help people by creating a better working environment for everyone. If you want to support the project further, please consider making a small donation towards a charity like **Doctors Without Borders**. [![Donate to Doctors Without Borders, with PayPal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://donate.doctorswithoutborders.org/secure/donate) Please allow me to thank everyone who helped or considering it! ## Disclaimer I kindly request that anyone attempting to build this project understands and acknowledges that I am not liable for any injuries, damages, or other consequences. Your safety is important, and I encourage you to approach this project carefully, taking necessary precautions and assuming personal responsibility for your well-being throughout the process. Please don't get electrocuted, burned, stressed or angry. Have fun and enjoy! Happy switchin'! ================================================ FILE: case/deskhop_case.step ================================================ ISO-10303-21; HEADER; /* Generated by software containing ST-Developer * from STEP Tools, Inc. (www.steptools.com) */ FILE_DESCRIPTION( /* description */ (''), /* implementation_level */ '2;1'); FILE_NAME( /* name */ 'DeskHop 3D Case.step', /* time_stamp */ '2023-12-30T05:05:56-08:00', /* author */ (''), /* organization */ (''), /* preprocessor_version */ 'ST-DEVELOPER v20', /* originating_system */ 'Autodesk Translation Framework v12.14.0.127', /* authorisation */ ''); FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }')); ENDSEC; DATA; #10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#717,#718, #719,#720,#721,#722,#723,#724,#725,#726,#727,#728,#729,#730,#731,#732,#733, #734,#735,#736,#737,#738,#739,#740,#741,#742,#743,#744,#745,#746,#747,#748, #749,#750,#751,#752,#753,#754,#755,#756,#757,#758,#759,#760,#761,#762,#763, #764,#765,#766,#767,#768,#769,#770,#771,#772,#773,#774,#775,#776,#777,#778, #779,#780,#781,#782,#783,#784,#785,#786,#787,#788,#789,#790,#791,#792,#793, #794),#58743); #11=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55227,#55228,#55229,#55230),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #12=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55232,#55233,#55234,#55235),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #13=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55237,#55238,#55239,#55240),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #14=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55242,#55243,#55244,#55245),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #15=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55247,#55248,#55249,#55250),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #16=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55252,#55253,#55254,#55255),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #17=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55257,#55258,#55259,#55260),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #18=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55262,#55263,#55264,#55265),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #19=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55267,#55268,#55269,#55270),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #20=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55272,#55273,#55274,#55275),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #21=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55277,#55278,#55279,#55280),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #22=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55282,#55283,#55284,#55285),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #23=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55287,#55288,#55289,#55290),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #24=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55292,#55293,#55294,#55295),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #25=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55297,#55298,#55299,#55300),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #26=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55302,#55303,#55304,#55305),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #27=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55307,#55308,#55309,#55310),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #28=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55312,#55313,#55314,#55315),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #29=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55317,#55318,#55319,#55320),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #30=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55321,#55322,#55323,#55324),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #31=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55329,#55330,#55331,#55332),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #32=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55336,#55337,#55338,#55339),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #33=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55341,#55342,#55343,#55344),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #34=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55348,#55349,#55350,#55351),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #35=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55353,#55354,#55355,#55356),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #36=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55360,#55361,#55362,#55363),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #37=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55365,#55366,#55367,#55368),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #38=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55372,#55373,#55374,#55375),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #39=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55376,#55377,#55378,#55379),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #40=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55392,#55393,#55394,#55395),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #41=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55399,#55400,#55401,#55402),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #42=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55413,#55414,#55415,#55416),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #43=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55419,#55420,#55421,#55422),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #44=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55432,#55433,#55434,#55435),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #45=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55438,#55439,#55440,#55441),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #46=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55463,#55464,#55465,#55466),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #47=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55469,#55470,#55471,#55472),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #48=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55482,#55483,#55484,#55485),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #49=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55488,#55489,#55490,#55491),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #50=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55501,#55502,#55503,#55504),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #51=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55507,#55508,#55509,#55510),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #52=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55520,#55521,#55522,#55523),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #53=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55526,#55527,#55528,#55529),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #54=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55539,#55540,#55541,#55542),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #55=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55545,#55546,#55547,#55548),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #56=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55570,#55571,#55572,#55573),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #57=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55576,#55577,#55578,#55579),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #58=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55588,#55589,#55590,#55591),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #59=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55592,#55593,#55594,#55595),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #60=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55607,#55608,#55609,#55610),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #61=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55622,#55623,#55624,#55625),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #62=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55636,#55637,#55638,#55639),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #63=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55650,#55651,#55652,#55653),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #64=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55664,#55665,#55666,#55667),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #65=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55678,#55679,#55680,#55681),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #66=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55692,#55693,#55694,#55695),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #67=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55706,#55707,#55708,#55709),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #68=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55720,#55721,#55722,#55723),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #69=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55734,#55735,#55736,#55737),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #70=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55748,#55749,#55750,#55751),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #71=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55762,#55763,#55764,#55765),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #72=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55776,#55777,#55778,#55779),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #73=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55790,#55791,#55792,#55793),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #74=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55804,#55805,#55806,#55807),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #75=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55818,#55819,#55820,#55821),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #76=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55832,#55833,#55834,#55835),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #77=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55846,#55847,#55848,#55849),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #78=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55860,#55861,#55862,#55863),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #79=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55872,#55873,#55874,#55875),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #80=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55887,#55888,#55889,#55890),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #81=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55894,#55895,#55896,#55897),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #82=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55908,#55909,#55910,#55911),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #83=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55914,#55915,#55916,#55917),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #84=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55927,#55928,#55929,#55930),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #85=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55933,#55934,#55935,#55936),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #86=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55945,#55946,#55947,#55948),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #87=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55949,#55950,#55951,#55952),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #88=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55963,#55964,#55965,#55966),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #89=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55970,#55971,#55972,#55973),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #90=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55984,#55985,#55986,#55987),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #91=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#55990,#55991,#55992,#55993),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #92=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56003,#56004,#56005,#56006),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #93=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56009,#56010,#56011,#56012),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #94=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56021,#56022,#56023,#56024),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #95=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56025,#56026,#56027,#56028),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #96=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56040,#56041,#56042,#56043),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #97=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56047,#56048,#56049,#56050),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #98=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56067,#56068,#56069,#56070),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #99=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56073,#56074,#56075,#56076),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #100=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56092,#56093,#56094,#56095),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #101=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56098,#56099,#56100,#56101),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #102=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56117,#56118,#56119,#56120),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #103=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56123,#56124,#56125,#56126),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #104=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56140,#56141,#56142,#56143),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #105=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56147,#56148,#56149,#56150),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #106=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56167,#56168,#56169,#56170),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #107=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56173,#56174,#56175,#56176),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #108=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56192,#56193,#56194,#56195),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #109=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56198,#56199,#56200,#56201),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #110=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56217,#56218,#56219,#56220),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #111=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56223,#56224,#56225,#56226),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #112=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56240,#56241,#56242,#56243),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #113=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56247,#56248,#56249,#56250),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #114=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56267,#56268,#56269,#56270),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #115=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56273,#56274,#56275,#56276),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #116=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56292,#56293,#56294,#56295),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #117=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56298,#56299,#56300,#56301),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #118=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56317,#56318,#56319,#56320),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #119=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56323,#56324,#56325,#56326),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #120=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56340,#56341,#56342,#56343),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #121=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56347,#56348,#56349,#56350),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #122=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56367,#56368,#56369,#56370),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #123=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56373,#56374,#56375,#56376),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #124=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56392,#56393,#56394,#56395),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #125=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56398,#56399,#56400,#56401),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #126=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56417,#56418,#56419,#56420),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #127=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56423,#56424,#56425,#56426),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #128=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56440,#56441,#56442,#56443),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #129=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56447,#56448,#56449,#56450),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #130=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56467,#56468,#56469,#56470),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #131=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56473,#56474,#56475,#56476),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #132=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56492,#56493,#56494,#56495),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #133=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56498,#56499,#56500,#56501),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #134=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56517,#56518,#56519,#56520),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #135=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56523,#56524,#56525,#56526),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #136=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56540,#56541,#56542,#56543),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #137=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56547,#56548,#56549,#56550),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #138=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56567,#56568,#56569,#56570),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #139=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56573,#56574,#56575,#56576),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #140=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56592,#56593,#56594,#56595),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #141=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56598,#56599,#56600,#56601),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #142=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56617,#56618,#56619,#56620),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #143=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56623,#56624,#56625,#56626),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #144=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56640,#56641,#56642,#56643),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #145=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56647,#56648,#56649,#56650),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #146=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56667,#56668,#56669,#56670),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #147=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56673,#56674,#56675,#56676),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #148=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56692,#56693,#56694,#56695),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #149=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56698,#56699,#56700,#56701),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #150=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56717,#56718,#56719,#56720),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #151=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56723,#56724,#56725,#56726),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #152=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56740,#56741,#56742,#56743),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #153=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56747,#56748,#56749,#56750),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #154=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56767,#56768,#56769,#56770),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #155=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56773,#56774,#56775,#56776),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #156=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56792,#56793,#56794,#56795),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #157=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56798,#56799,#56800,#56801),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #158=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56817,#56818,#56819,#56820),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #159=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56823,#56824,#56825,#56826),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #160=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56840,#56841,#56842,#56843),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #161=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56847,#56848,#56849,#56850),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #162=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56867,#56868,#56869,#56870),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #163=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56873,#56874,#56875,#56876),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #164=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56892,#56893,#56894,#56895),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #165=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56898,#56899,#56900,#56901),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #166=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56917,#56918,#56919,#56920),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #167=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56923,#56924,#56925,#56926),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #168=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56940,#56941,#56942,#56943),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #169=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56947,#56948,#56949,#56950),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #170=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56967,#56968,#56969,#56970),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #171=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56973,#56974,#56975,#56976),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #172=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56992,#56993,#56994,#56995),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #173=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#56998,#56999,#57000,#57001),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #174=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57017,#57018,#57019,#57020),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #175=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57023,#57024,#57025,#57026),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #176=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57040,#57041,#57042,#57043),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #177=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57047,#57048,#57049,#57050),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #178=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57067,#57068,#57069,#57070),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #179=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57073,#57074,#57075,#57076),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #180=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57092,#57093,#57094,#57095),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #181=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57098,#57099,#57100,#57101),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #182=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57117,#57118,#57119,#57120),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #183=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57123,#57124,#57125,#57126),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #184=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57140,#57141,#57142,#57143),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #185=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57147,#57148,#57149,#57150),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #186=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57167,#57168,#57169,#57170),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #187=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57173,#57174,#57175,#57176),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #188=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57192,#57193,#57194,#57195),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #189=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57198,#57199,#57200,#57201),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #190=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57217,#57218,#57219,#57220),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #191=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57223,#57224,#57225,#57226),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #192=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57240,#57241,#57242,#57243),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #193=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57247,#57248,#57249,#57250),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #194=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57267,#57268,#57269,#57270),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #195=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57273,#57274,#57275,#57276),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #196=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57292,#57293,#57294,#57295),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #197=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57298,#57299,#57300,#57301),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #198=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57317,#57318,#57319,#57320),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #199=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57323,#57324,#57325,#57326),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #200=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57340,#57341,#57342,#57343),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #201=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57347,#57348,#57349,#57350),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #202=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57367,#57368,#57369,#57370),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #203=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57373,#57374,#57375,#57376),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #204=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57392,#57393,#57394,#57395),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #205=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57398,#57399,#57400,#57401),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #206=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57417,#57418,#57419,#57420),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #207=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57423,#57424,#57425,#57426),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #208=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57440,#57441,#57442,#57443),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #209=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57447,#57448,#57449,#57450),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #210=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57467,#57468,#57469,#57470),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #211=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57473,#57474,#57475,#57476),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #212=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57492,#57493,#57494,#57495),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #213=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57498,#57499,#57500,#57501),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #214=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57517,#57518,#57519,#57520),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #215=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57523,#57524,#57525,#57526),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #216=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57540,#57541,#57542,#57543),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #217=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57547,#57548,#57549,#57550),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #218=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57567,#57568,#57569,#57570),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #219=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57573,#57574,#57575,#57576),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #220=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57592,#57593,#57594,#57595),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #221=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57598,#57599,#57600,#57601),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #222=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57617,#57618,#57619,#57620),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #223=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57623,#57624,#57625,#57626),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #224=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57640,#57641,#57642,#57643),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #225=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57647,#57648,#57649,#57650),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #226=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57667,#57668,#57669,#57670),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #227=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57673,#57674,#57675,#57676),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #228=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57692,#57693,#57694,#57695),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #229=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57698,#57699,#57700,#57701),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #230=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57717,#57718,#57719,#57720),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #231=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57723,#57724,#57725,#57726),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #232=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57740,#57741,#57742,#57743),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #233=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57747,#57748,#57749,#57750),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #234=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57767,#57768,#57769,#57770),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #235=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57773,#57774,#57775,#57776),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #236=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57792,#57793,#57794,#57795),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #237=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57798,#57799,#57800,#57801),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #238=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57817,#57818,#57819,#57820),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #239=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57823,#57824,#57825,#57826),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #240=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57846,#57847,#57848,#57849),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #241=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57860,#57861,#57862,#57863),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #242=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57878,#57879,#57880,#57881),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #243=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57892,#57893,#57894,#57895),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #244=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57910,#57911,#57912,#57913),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #245=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57924,#57925,#57926,#57927),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #246=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57942,#57943,#57944,#57945),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #247=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57956,#57957,#57958,#57959),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #248=( BOUNDED_CURVE() B_SPLINE_CURVE(3,(#57972,#57973,#57974,#57975),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((4,4),(-1.,0.),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.,1.,1.,1.)) REPRESENTATION_ITEM('') ); #249=CONICAL_SURFACE('',#35306,0.517321065967092,0.0414635619898257); #250=CONICAL_SURFACE('',#35327,0.517320796724879,0.0414635619696553); #251=CONICAL_SURFACE('',#36225,1.4,0.785398163397446); #252=CONICAL_SURFACE('',#36227,1.4,0.785398163397449); #253=CONICAL_SURFACE('',#36229,1.4,0.785398163397446); #254=CONICAL_SURFACE('',#36232,1.4,0.785398163397446); #255=CONICAL_SURFACE('',#36404,1.4,0.785398163397448); #256=CONICAL_SURFACE('',#36407,1.4,0.785398163397445); #257=CONICAL_SURFACE('',#36410,1.4,0.785398163397445); #258=CONICAL_SURFACE('',#36412,1.4,0.785398163397445); #259=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#50038,#50039,#50040,#50041), (#50042,#50043,#50044,#50045),(#50046,#50047,#50048,#50049),(#50050,#50051, #50052,#50053)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(0.06849586621227,0.189410567737),.UNSPECIFIED.); #260=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#50070,#50071,#50072,#50073), (#50074,#50075,#50076,#50077),(#50078,#50079,#50080,#50081),(#50082,#50083, #50084,#50085)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(0.06849586621227,0.189410567737),.UNSPECIFIED.); #261=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#50226,#50227,#50228,#50229), (#50230,#50231,#50232,#50233),(#50234,#50235,#50236,#50237),(#50238,#50239, #50240,#50241)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.07384364466229,0.597624511498),.UNSPECIFIED.); #262=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#50259,#50260,#50261,#50262), (#50263,#50264,#50265,#50266),(#50267,#50268,#50269,#50270),(#50271,#50272, #50273,#50274)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.07384364466229,0.597624511498),.UNSPECIFIED.); #263=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#51084,#51085,#51086,#51087), (#51088,#51089,#51090,#51091),(#51092,#51093,#51094,#51095),(#51096,#51097, #51098,#51099)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(0.06849586621227,0.189410567737),.UNSPECIFIED.); #264=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#51116,#51117,#51118,#51119), (#51120,#51121,#51122,#51123),(#51124,#51125,#51126,#51127),(#51128,#51129, #51130,#51131)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(0.06849586621227,0.189410567737),.UNSPECIFIED.); #265=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#51150,#51151,#51152,#51153), (#51154,#51155,#51156,#51157),(#51158,#51159,#51160,#51161),(#51162,#51163, #51164,#51165)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.07384364466229,0.597624511498),.UNSPECIFIED.); #266=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#51305,#51306,#51307,#51308), (#51309,#51310,#51311,#51312),(#51313,#51314,#51315,#51316),(#51317,#51318, #51319,#51320)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.07384364466229,0.597624511498),.UNSPECIFIED.); #267=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#52131,#52132,#52133,#52134), (#52135,#52136,#52137,#52138),(#52139,#52140,#52141,#52142),(#52143,#52144, #52145,#52146)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.07410740275809,0.271704838112),.UNSPECIFIED.); #268=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#52288,#52289,#52290,#52291), (#52292,#52293,#52294,#52295),(#52296,#52297,#52298,#52299),(#52300,#52301, #52302,#52303)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.07410740275809,0.271704838112),.UNSPECIFIED.); #269=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#52327,#52328,#52329,#52330), (#52331,#52332,#52333,#52334),(#52335,#52336,#52337,#52338),(#52339,#52340, #52341,#52342)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.02988954476731,0.815270695834),.UNSPECIFIED.); #270=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#52367,#52368,#52369,#52370), (#52371,#52372,#52373,#52374),(#52375,#52376,#52377,#52378),(#52379,#52380, #52381,#52382)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.02988954476731,0.815270695834),.UNSPECIFIED.); #271=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#52445,#52446,#52447,#52448), (#52449,#52450,#52451,#52452),(#52453,#52454,#52455,#52456),(#52457,#52458, #52459,#52460)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.07410740275809,0.271704838112),.UNSPECIFIED.); #272=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#52536,#52537,#52538,#52539), (#52540,#52541,#52542,#52543),(#52544,#52545,#52546,#52547),(#52548,#52549, #52550,#52551)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.07410740275809,0.271704838112),.UNSPECIFIED.); #273=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#52643,#52644,#52645,#52646), (#52647,#52648,#52649,#52650),(#52651,#52652,#52653,#52654),(#52655,#52656, #52657,#52658)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.02988954476731,0.815270695834),.UNSPECIFIED.); #274=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#52683,#52684,#52685,#52686), (#52687,#52688,#52689,#52690),(#52691,#52692,#52693,#52694),(#52695,#52696, #52697,#52698)),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(4,4),(-0.09956208314199, 1.099562083142),(-0.02988954476731,0.815270695834),.UNSPECIFIED.); #275=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54601,#54602),(#54603,#54604), (#54605,#54606),(#54607,#54608),(#54609,#54610)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0396139117879218,0.10779245974156),(0.,0.1), .UNSPECIFIED.); #276=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54627,#54628),(#54629,#54630), (#54631,#54632),(#54633,#54634),(#54635,#54636)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0228632270835551,0.0475274529504709),(0.,0.1), .UNSPECIFIED.); #277=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54650,#54651),(#54652,#54653), (#54654,#54655),(#54656,#54657),(#54658,#54659)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0251796757407752,0.0482485359125712),(0.,0.1), .UNSPECIFIED.); #278=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54673,#54674),(#54675,#54676), (#54677,#54678),(#54679,#54680),(#54681,#54682)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.02585198359896,0.0549230941480691),(0.,0.1), .UNSPECIFIED.); #279=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54696,#54697),(#54698,#54699), (#54700,#54701),(#54702,#54703),(#54704,#54705)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0258536038788842,0.0505421916912593),(0.,0.1), .UNSPECIFIED.); #280=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54719,#54720),(#54721,#54722), (#54723,#54724),(#54725,#54726),(#54727,#54728)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0535208539911344,0.0832199043752585),(0.,0.1), .UNSPECIFIED.); #281=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54757,#54758),(#54759,#54760), (#54761,#54762),(#54763,#54764),(#54765,#54766)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0349245719424988,0.103582743675206),(0.,0.1), .UNSPECIFIED.); #282=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54783,#54784),(#54785,#54786), (#54787,#54788),(#54789,#54790),(#54791,#54792)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0236153566459702,0.0510668813533396),(0.,0.1), .UNSPECIFIED.); #283=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54806,#54807),(#54808,#54809), (#54810,#54811),(#54812,#54813),(#54814,#54815)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0254690376864139,0.0484924770872619),(0.,0.1), .UNSPECIFIED.); #284=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54829,#54830),(#54831,#54832), (#54833,#54834),(#54835,#54836),(#54837,#54838)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0247758601595817,0.0514544877646456),(0.,0.1), .UNSPECIFIED.); #285=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54852,#54853),(#54854,#54855), (#54856,#54857),(#54858,#54859),(#54860,#54861)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0286386008998032,0.053923892271069),(0.,0.1), .UNSPECIFIED.); #286=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54875,#54876),(#54877,#54878), (#54879,#54880),(#54881,#54882),(#54883,#54884)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0574033407695605,0.0880352680214475),(0.,0.1), .UNSPECIFIED.); #287=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54922,#54923),(#54924,#54925), (#54926,#54927),(#54928,#54929),(#54930,#54931)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0517395868333095,0.146191147859105),(0.,0.1), .UNSPECIFIED.); #288=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54945,#54946),(#54947,#54948), (#54949,#54950),(#54951,#54952),(#54953,#54954)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0410458882789293,0.0865038350181998),(0.,0.1), .UNSPECIFIED.); #289=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54968,#54969),(#54970,#54971), (#54972,#54973),(#54974,#54975),(#54976,#54977)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0412946305880013,0.0814144693494169),(0.,0.1), .UNSPECIFIED.); #290=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#54991,#54992),(#54993,#54994), (#54995,#54996),(#54997,#54998),(#54999,#55000)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0407011569439943,0.0826528300117284),(0.,0.1), .UNSPECIFIED.); #291=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#55014,#55015),(#55016,#55017), (#55018,#55019),(#55020,#55021),(#55022,#55023)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0473260627988312,0.096482863847812),(0.,0.1), .UNSPECIFIED.); #292=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#55037,#55038),(#55039,#55040), (#55041,#55042),(#55043,#55044),(#55045,#55046)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0530875021266755,0.101680049463946),(0.,0.1), .UNSPECIFIED.); #293=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#55060,#55061),(#55062,#55063), (#55064,#55065),(#55066,#55067),(#55068,#55069)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0406969386156489,0.0818573986487822),(0.,0.1), .UNSPECIFIED.); #294=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#55083,#55084),(#55085,#55086), (#55087,#55088),(#55089,#55090),(#55091,#55092)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0408202742134127,0.0815613856373198),(0.,0.1), .UNSPECIFIED.); #295=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#55106,#55107),(#55108,#55109), (#55110,#55111),(#55112,#55113),(#55114,#55115)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0358196116938734,0.0730427221685361),(0.,0.1), .UNSPECIFIED.); #296=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#55129,#55130),(#55131,#55132), (#55133,#55134),(#55135,#55136),(#55137,#55138)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0336606405195115,0.0687992054260682),(0.,0.1), .UNSPECIFIED.); #297=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#55152,#55153),(#55154,#55155), (#55156,#55157),(#55158,#55159),(#55160,#55161)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0344511918696187,0.0676810401412082),(0.,0.1), .UNSPECIFIED.); #298=B_SPLINE_SURFACE_WITH_KNOTS('',3,1,((#55175,#55176),(#55177,#55178), (#55179,#55180),(#55181,#55182),(#55183,#55184)),.UNSPECIFIED.,.F.,.F., .F.,(4,1,4),(2,2),(0.,0.0621267621811802,0.106262536247418),(0.,0.1), .UNSPECIFIED.); #299=ELLIPSE('',#35163,1.13873450978795,1.07142488660232); #300=ELLIPSE('',#35164,1.13873468504069,1.07142496931554); #301=ELLIPSE('',#35237,1.13873451594665,1.07142488949802); #302=ELLIPSE('',#35238,1.13873466529998,1.071424960035); #303=ELLIPSE('',#35297,0.50068617299896,0.5); #304=ELLIPSE('',#35298,0.50068617299896,0.5); #305=ELLIPSE('',#35299,0.200274469199584,0.2); #306=ELLIPSE('',#35300,0.801097876798336,0.8); #307=ELLIPSE('',#35302,0.801097876798336,0.8); #308=ELLIPSE('',#35303,0.200274469199584,0.2); #309=ELLIPSE('',#35304,0.50068617299896,0.5); #310=ELLIPSE('',#35305,0.50068617299896,0.5); #311=ELLIPSE('',#35307,0.518135592769454,0.517689493638632); #312=ELLIPSE('',#35308,0.505667931416695,0.505232566567136); #313=ELLIPSE('',#35311,0.801097876798336,0.8); #314=ELLIPSE('',#35312,0.200274469199584,0.2); #315=ELLIPSE('',#35313,0.50068617299896,0.5); #316=ELLIPSE('',#35314,0.50068617299896,0.5); #317=ELLIPSE('',#35316,0.50068617299896,0.5); #318=ELLIPSE('',#35317,0.50068617299896,0.5); #319=ELLIPSE('',#35318,0.200274469199584,0.2); #320=ELLIPSE('',#35319,0.801097876798336,0.8); #321=ELLIPSE('',#35328,0.518135592766337,0.517689493638038); #322=ELLIPSE('',#35329,0.505667869209678,0.505232564541414); #323=ELLIPSE('',#35424,0.636396103067894,0.45); #324=ELLIPSE('',#35425,0.636396103067893,0.45); #325=ELLIPSE('',#36180,1.41421356237309,1.); #326=ELLIPSE('',#36181,1.4142135623731,1.); #327=ELLIPSE('',#36185,1.41421356237309,1.); #328=ELLIPSE('',#36186,1.4142135623731,1.); #329=ELLIPSE('',#36196,1.41421356237309,1.); #330=ELLIPSE('',#36197,1.4142135623731,1.); #331=ELLIPSE('',#36201,1.41421356237309,1.); #332=ELLIPSE('',#36202,1.4142135623731,1.); #333=ELLIPSE('',#36239,0.981495457622363,0.850000000000001); #334=ELLIPSE('',#36240,0.981495457622365,0.850000000000001); #335=ELLIPSE('',#36246,0.981495457622363,0.850000000000001); #336=ELLIPSE('',#36247,0.981495457622365,0.850000000000001); #337=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,3,((#49696,#49697,#49698,#49699,#49700,#49701),(#49702, #49703,#49704,#49705,#49706,#49707),(#49708,#49709,#49710,#49711,#49712, #49713),(#49714,#49715,#49716,#49717,#49718,#49719)),.UNSPECIFIED.,.F., .F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(4,1,1,4),(0.,1.),(0.02273218986723,0.356335638502, 0.689673787049,0.993138620727),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.236664309782,1.236664309782,1.236664309782, 1.236664309782,1.236664309782,1.236664309782),(0.921111896739,0.921111896739, 0.921111896739,0.921111896739,0.921111896739,0.921111896739),(0.921111896739, 0.921111896739,0.921111896739,0.921111896739,0.921111896739,0.921111896739), (1.236664309782,1.236664309782,1.236664309782,1.236664309782,1.236664309782, 1.236664309782))) REPRESENTATION_ITEM('') SURFACE() ); #338=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,3,((#49931,#49932,#49933,#49934,#49935,#49936),(#49937, #49938,#49939,#49940,#49941,#49942),(#49943,#49944,#49945,#49946,#49947, #49948),(#49949,#49950,#49951,#49952,#49953,#49954)),.UNSPECIFIED.,.F., .F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(4,1,1,4),(0.,1.),(0.006874334662752, 0.311826903213,0.64516507054,0.977280813675),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.236664309427,1.236664309427,1.236664309427, 1.236664309427,1.236664309427,1.236664309427),(0.921111896858,0.921111896858, 0.921111896858,0.921111896858,0.921111896858,0.921111896858),(0.921111896858, 0.921111896858,0.921111896858,0.921111896858,0.921111896858,0.921111896858), (1.236664309427,1.236664309427,1.236664309427,1.236664309427,1.236664309427, 1.236664309427))) REPRESENTATION_ITEM('') SURFACE() ); #339=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,3,((#50742,#50743,#50744,#50745,#50746,#50747),(#50748, #50749,#50750,#50751,#50752,#50753),(#50754,#50755,#50756,#50757,#50758, #50759),(#50760,#50761,#50762,#50763,#50764,#50765)),.UNSPECIFIED.,.F., .F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(4,1,1,4),(0.,1.),(0.00686364252033,0.311826783835, 0.645164951206,0.977270096469),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.236664309522,1.236664309522,1.236664309522, 1.236664309522,1.236664309522,1.236664309522),(0.921111896826,0.921111896826, 0.921111896826,0.921111896826,0.921111896826,0.921111896826),(0.921111896826, 0.921111896826,0.921111896826,0.921111896826,0.921111896826,0.921111896826), (1.236664309522,1.236664309522,1.236664309522,1.236664309522,1.236664309522, 1.236664309522))) REPRESENTATION_ITEM('') SURFACE() ); #340=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,3,((#50985,#50986,#50987,#50988,#50989,#50990),(#50991, #50992,#50993,#50994,#50995,#50996),(#50997,#50998,#50999,#51000,#51001, #51002),(#51003,#51004,#51005,#51006,#51007,#51008)),.UNSPECIFIED.,.F., .F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(4,1,1,4),(0.,1.),(0.02272147264692,0.356335425786, 0.68967357429,0.993127928566),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.236664309686,1.236664309686,1.236664309686, 1.236664309686,1.236664309686,1.236664309686),(0.921111896771,0.921111896771, 0.921111896771,0.921111896771,0.921111896771,0.921111896771),(0.921111896771, 0.921111896771,0.921111896771,0.921111896771,0.921111896771,0.921111896771), (1.236664309686,1.236664309686,1.236664309686,1.236664309686,1.236664309686, 1.236664309686))) REPRESENTATION_ITEM('') SURFACE() ); #341=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55382,#55383),(#55384,#55385),(#55386,#55387),(#55388, #55389)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #342=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55404,#55405),(#55406,#55407),(#55408,#55409),(#55410, #55411)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #343=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55423,#55424),(#55425,#55426),(#55427,#55428),(#55429, #55430)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #344=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55454,#55455),(#55456,#55457),(#55458,#55459),(#55460, #55461)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #345=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55473,#55474),(#55475,#55476),(#55477,#55478),(#55479, #55480)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #346=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55492,#55493),(#55494,#55495),(#55496,#55497),(#55498, #55499)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #347=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55511,#55512),(#55513,#55514),(#55515,#55516),(#55517, #55518)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #348=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55530,#55531),(#55532,#55533),(#55534,#55535),(#55536, #55537)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #349=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55561,#55562),(#55563,#55564),(#55565,#55566),(#55567, #55568)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #350=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55580,#55581),(#55582,#55583),(#55584,#55585),(#55586, #55587)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #351=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55596,#55597),(#55598,#55599),(#55600,#55601),(#55602, #55603)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #352=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55612,#55613),(#55614,#55615),(#55616,#55617),(#55618, #55619)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #353=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55626,#55627),(#55628,#55629),(#55630,#55631),(#55632, #55633)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #354=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55640,#55641),(#55642,#55643),(#55644,#55645),(#55646, #55647)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #355=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55654,#55655),(#55656,#55657),(#55658,#55659),(#55660, #55661)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #356=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55668,#55669),(#55670,#55671),(#55672,#55673),(#55674, #55675)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #357=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55682,#55683),(#55684,#55685),(#55686,#55687),(#55688, #55689)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #358=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55696,#55697),(#55698,#55699),(#55700,#55701),(#55702, #55703)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #359=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55710,#55711),(#55712,#55713),(#55714,#55715),(#55716, #55717)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #360=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55724,#55725),(#55726,#55727),(#55728,#55729),(#55730, #55731)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #361=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55738,#55739),(#55740,#55741),(#55742,#55743),(#55744, #55745)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #362=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55752,#55753),(#55754,#55755),(#55756,#55757),(#55758, #55759)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #363=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55766,#55767),(#55768,#55769),(#55770,#55771),(#55772, #55773)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #364=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55780,#55781),(#55782,#55783),(#55784,#55785),(#55786, #55787)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #365=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55794,#55795),(#55796,#55797),(#55798,#55799),(#55800, #55801)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #366=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55808,#55809),(#55810,#55811),(#55812,#55813),(#55814, #55815)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #367=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55822,#55823),(#55824,#55825),(#55826,#55827),(#55828, #55829)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #368=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55836,#55837),(#55838,#55839),(#55840,#55841),(#55842, #55843)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #369=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55850,#55851),(#55852,#55853),(#55854,#55855),(#55856, #55857)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #370=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55864,#55865),(#55866,#55867),(#55868,#55869),(#55870, #55871)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #371=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55877,#55878),(#55879,#55880),(#55881,#55882),(#55883, #55884)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #372=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55899,#55900),(#55901,#55902),(#55903,#55904),(#55905, #55906)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #373=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55918,#55919),(#55920,#55921),(#55922,#55923),(#55924, #55925)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #374=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55937,#55938),(#55939,#55940),(#55941,#55942),(#55943, #55944)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #375=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55953,#55954),(#55955,#55956),(#55957,#55958),(#55959, #55960)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #376=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55975,#55976),(#55977,#55978),(#55979,#55980),(#55981, #55982)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #377=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#55994,#55995),(#55996,#55997),(#55998,#55999),(#56000, #56001)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #378=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56013,#56014),(#56015,#56016),(#56017,#56018),(#56019, #56020)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #379=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56030,#56031),(#56032,#56033),(#56034,#56035),(#56036, #56037)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #380=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56058,#56059),(#56060,#56061),(#56062,#56063),(#56064, #56065)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #381=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56083,#56084),(#56085,#56086),(#56087,#56088),(#56089, #56090)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #382=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56108,#56109),(#56110,#56111),(#56112,#56113),(#56114, #56115)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #383=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56130,#56131),(#56132,#56133),(#56134,#56135),(#56136, #56137)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #384=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56158,#56159),(#56160,#56161),(#56162,#56163),(#56164, #56165)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #385=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56183,#56184),(#56185,#56186),(#56187,#56188),(#56189, #56190)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #386=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56208,#56209),(#56210,#56211),(#56212,#56213),(#56214, #56215)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #387=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56230,#56231),(#56232,#56233),(#56234,#56235),(#56236, #56237)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #388=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56258,#56259),(#56260,#56261),(#56262,#56263),(#56264, #56265)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #389=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56283,#56284),(#56285,#56286),(#56287,#56288),(#56289, #56290)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #390=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56308,#56309),(#56310,#56311),(#56312,#56313),(#56314, #56315)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #391=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56330,#56331),(#56332,#56333),(#56334,#56335),(#56336, #56337)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #392=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56358,#56359),(#56360,#56361),(#56362,#56363),(#56364, #56365)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #393=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56383,#56384),(#56385,#56386),(#56387,#56388),(#56389, #56390)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #394=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56408,#56409),(#56410,#56411),(#56412,#56413),(#56414, #56415)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #395=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56430,#56431),(#56432,#56433),(#56434,#56435),(#56436, #56437)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #396=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56458,#56459),(#56460,#56461),(#56462,#56463),(#56464, #56465)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #397=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56483,#56484),(#56485,#56486),(#56487,#56488),(#56489, #56490)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #398=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56508,#56509),(#56510,#56511),(#56512,#56513),(#56514, #56515)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #399=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56530,#56531),(#56532,#56533),(#56534,#56535),(#56536, #56537)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #400=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56558,#56559),(#56560,#56561),(#56562,#56563),(#56564, #56565)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #401=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56583,#56584),(#56585,#56586),(#56587,#56588),(#56589, #56590)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #402=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56608,#56609),(#56610,#56611),(#56612,#56613),(#56614, #56615)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #403=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56630,#56631),(#56632,#56633),(#56634,#56635),(#56636, #56637)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #404=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56658,#56659),(#56660,#56661),(#56662,#56663),(#56664, #56665)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #405=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56683,#56684),(#56685,#56686),(#56687,#56688),(#56689, #56690)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #406=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56708,#56709),(#56710,#56711),(#56712,#56713),(#56714, #56715)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #407=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56730,#56731),(#56732,#56733),(#56734,#56735),(#56736, #56737)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #408=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56758,#56759),(#56760,#56761),(#56762,#56763),(#56764, #56765)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #409=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56783,#56784),(#56785,#56786),(#56787,#56788),(#56789, #56790)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #410=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56808,#56809),(#56810,#56811),(#56812,#56813),(#56814, #56815)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #411=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56830,#56831),(#56832,#56833),(#56834,#56835),(#56836, #56837)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #412=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56858,#56859),(#56860,#56861),(#56862,#56863),(#56864, #56865)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #413=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56883,#56884),(#56885,#56886),(#56887,#56888),(#56889, #56890)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #414=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56908,#56909),(#56910,#56911),(#56912,#56913),(#56914, #56915)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #415=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56930,#56931),(#56932,#56933),(#56934,#56935),(#56936, #56937)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #416=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56958,#56959),(#56960,#56961),(#56962,#56963),(#56964, #56965)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #417=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#56983,#56984),(#56985,#56986),(#56987,#56988),(#56989, #56990)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #418=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57008,#57009),(#57010,#57011),(#57012,#57013),(#57014, #57015)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #419=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57030,#57031),(#57032,#57033),(#57034,#57035),(#57036, #57037)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #420=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57058,#57059),(#57060,#57061),(#57062,#57063),(#57064, #57065)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #421=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57083,#57084),(#57085,#57086),(#57087,#57088),(#57089, #57090)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #422=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57108,#57109),(#57110,#57111),(#57112,#57113),(#57114, #57115)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #423=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57130,#57131),(#57132,#57133),(#57134,#57135),(#57136, #57137)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #424=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57158,#57159),(#57160,#57161),(#57162,#57163),(#57164, #57165)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #425=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57183,#57184),(#57185,#57186),(#57187,#57188),(#57189, #57190)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #426=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57208,#57209),(#57210,#57211),(#57212,#57213),(#57214, #57215)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #427=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57230,#57231),(#57232,#57233),(#57234,#57235),(#57236, #57237)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #428=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57258,#57259),(#57260,#57261),(#57262,#57263),(#57264, #57265)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #429=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57283,#57284),(#57285,#57286),(#57287,#57288),(#57289, #57290)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #430=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57308,#57309),(#57310,#57311),(#57312,#57313),(#57314, #57315)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #431=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57330,#57331),(#57332,#57333),(#57334,#57335),(#57336, #57337)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #432=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57358,#57359),(#57360,#57361),(#57362,#57363),(#57364, #57365)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #433=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57383,#57384),(#57385,#57386),(#57387,#57388),(#57389, #57390)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #434=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57408,#57409),(#57410,#57411),(#57412,#57413),(#57414, #57415)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #435=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57430,#57431),(#57432,#57433),(#57434,#57435),(#57436, #57437)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #436=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57458,#57459),(#57460,#57461),(#57462,#57463),(#57464, #57465)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #437=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57483,#57484),(#57485,#57486),(#57487,#57488),(#57489, #57490)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #438=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57508,#57509),(#57510,#57511),(#57512,#57513),(#57514, #57515)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #439=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57530,#57531),(#57532,#57533),(#57534,#57535),(#57536, #57537)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #440=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57558,#57559),(#57560,#57561),(#57562,#57563),(#57564, #57565)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #441=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57583,#57584),(#57585,#57586),(#57587,#57588),(#57589, #57590)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #442=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57608,#57609),(#57610,#57611),(#57612,#57613),(#57614, #57615)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #443=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57630,#57631),(#57632,#57633),(#57634,#57635),(#57636, #57637)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #444=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57658,#57659),(#57660,#57661),(#57662,#57663),(#57664, #57665)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #445=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57683,#57684),(#57685,#57686),(#57687,#57688),(#57689, #57690)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #446=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57708,#57709),(#57710,#57711),(#57712,#57713),(#57714, #57715)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #447=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57730,#57731),(#57732,#57733),(#57734,#57735),(#57736, #57737)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #448=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57758,#57759),(#57760,#57761),(#57762,#57763),(#57764, #57765)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #449=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57783,#57784),(#57785,#57786),(#57787,#57788),(#57789, #57790)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #450=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57808,#57809),(#57810,#57811),(#57812,#57813),(#57814, #57815)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #451=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57836,#57837),(#57838,#57839),(#57840,#57841),(#57842, #57843)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #452=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57850,#57851),(#57852,#57853),(#57854,#57855),(#57856, #57857)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #453=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57868,#57869),(#57870,#57871),(#57872,#57873),(#57874, #57875)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #454=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57882,#57883),(#57884,#57885),(#57886,#57887),(#57888, #57889)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #455=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57900,#57901),(#57902,#57903),(#57904,#57905),(#57906, #57907)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #456=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57914,#57915),(#57916,#57917),(#57918,#57919),(#57920, #57921)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #457=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57932,#57933),(#57934,#57935),(#57936,#57937),(#57938, #57939)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #458=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57946,#57947),(#57948,#57949),(#57950,#57951),(#57952, #57953)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #459=( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,1,((#57964,#57965),(#57966,#57967),(#57968,#57969),(#57970, #57971)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(2,2),(-1.,0.),(0.,0.1),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(((1.,1.),(1.,1.),(1.,1.),(1.,1.))) REPRESENTATION_ITEM('') SURFACE() ); #460=TOROIDAL_SURFACE('',#35012,0.625,0.5); #461=TOROIDAL_SURFACE('',#35016,0.625,0.5); #462=TOROIDAL_SURFACE('',#36252,0.900000000000003,0.3); #463=TOROIDAL_SURFACE('',#36259,0.899999999999994,0.3); #464=TOROIDAL_SURFACE('',#36266,0.899999999999994,0.3); #465=TOROIDAL_SURFACE('',#36285,4.8,0.8); #466=TOROIDAL_SURFACE('',#36291,4.8,0.8); #467=TOROIDAL_SURFACE('',#36301,4.8,0.8); #468=TOROIDAL_SURFACE('',#36307,4.8,0.8); #469=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47557,#47558,#47559,#47560,#47561, #47562,#47563),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255435512,1.821459649776E-13, 1.60000000000018),.UNSPECIFIED.); #470=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47569,#47570,#47571,#47572,#47573, #47574,#47575),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804606,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #471=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47581,#47582,#47583,#47584,#47585, #47586,#47587),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255435512,1.821459649776E-13, 1.60000000000018),.UNSPECIFIED.); #472=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47591,#47592,#47593,#47594,#47595, #47596,#47597),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543728), .UNSPECIFIED.); #473=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47638,#47639,#47640,#47641,#47642, #47643,#47644),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804606,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #474=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47647,#47648,#47649,#47650,#47651, #47652,#47653),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543728), .UNSPECIFIED.); #475=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47662,#47663,#47664,#47665,#47666, #47667,#47668),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543728), .UNSPECIFIED.); #476=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47672,#47673,#47674,#47675,#47676, #47677,#47678),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255435989,1.344410693882E-13, 1.60000000000013),.UNSPECIFIED.); #477=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47681,#47682,#47683,#47684,#47685, #47686,#47687),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255435989,1.344410693882E-13, 1.60000000000013),.UNSPECIFIED.); #478=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47693,#47694,#47695,#47696,#47697, #47698,#47699),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804606,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #479=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47705,#47706,#47707,#47708,#47709, #47710,#47711),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255435989,1.344410693882E-13, 1.60000000000013),.UNSPECIFIED.); #480=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47715,#47716,#47717,#47718,#47719, #47720,#47721),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543728), .UNSPECIFIED.); #481=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47762,#47763,#47764,#47765,#47766, #47767,#47768),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #482=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47771,#47772,#47773,#47774,#47775, #47776,#47777),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.5025003255437), .UNSPECIFIED.); #483=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47786,#47787,#47788,#47789,#47790, #47791,#47792),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #484=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47796,#47797,#47798,#47799,#47800, #47801,#47802),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255438227,-1.170938346284E-13, 1.59999999999988),.UNSPECIFIED.); #485=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47805,#47806,#47807,#47808,#47809, #47810,#47811),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255438791,-1.734723475977E-13, 1.59999999999982),.UNSPECIFIED.); #486=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47817,#47818,#47819,#47820,#47821, #47822,#47823),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #487=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47829,#47830,#47831,#47832,#47833, #47834,#47835),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255438791,-1.734723475977E-13, 1.59999999999982),.UNSPECIFIED.); #488=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47839,#47840,#47841,#47842,#47843, #47844,#47845),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #489=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47849,#47850,#47851,#47852,#47853, #47854,#47855),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255438791,-1.734723475977E-13, 1.59999999999982),.UNSPECIFIED.); #490=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47861,#47862,#47863,#47864,#47865, #47866,#47867),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #491=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47873,#47874,#47875,#47876,#47877, #47878,#47879),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255438791,-1.734723475977E-13, 1.59999999999982),.UNSPECIFIED.); #492=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47883,#47884,#47885,#47886,#47887, #47888,#47889),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #493=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47893,#47894,#47895,#47896,#47897, #47898,#47899),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255438487,-1.431146867681E-13, 1.59999999999985),.UNSPECIFIED.); #494=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47905,#47906,#47907,#47908,#47909, #47910,#47911),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #495=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47917,#47918,#47919,#47920,#47921, #47922,#47923),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255438487,-1.431146867681E-13, 1.59999999999985),.UNSPECIFIED.); #496=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47927,#47928,#47929,#47930,#47931, #47932,#47933),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #497=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47974,#47975,#47976,#47977,#47978, #47979,#47980),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #498=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47983,#47984,#47985,#47986,#47987, #47988,#47989),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.5025003255437), .UNSPECIFIED.); #499=B_SPLINE_CURVE_WITH_KNOTS('',3,(#47998,#47999,#48000,#48001,#48002, #48003,#48004),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #500=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48008,#48009,#48010,#48011,#48012, #48013,#48014),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255434541,2.515349040166E-13, 1.60000000000025),.UNSPECIFIED.); #501=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48017,#48018,#48019,#48020,#48021, #48022,#48023),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255439008,-1.951563910474E-13, 1.5999999999998),.UNSPECIFIED.); #502=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48029,#48030,#48031,#48032,#48033, #48034,#48035),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #503=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48041,#48042,#48043,#48044,#48045, #48046,#48047),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255439008,-1.951563910474E-13, 1.5999999999998),.UNSPECIFIED.); #504=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48051,#48052,#48053,#48054,#48055, #48056,#48057),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #505=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48062,#48063,#48064,#48065,#48066, #48067,#48068),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #506=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48071,#48072,#48073,#48074,#48075, #48076,#48077),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.5025003255437), .UNSPECIFIED.); #507=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48086,#48087,#48088,#48089,#48090, #48091,#48092),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #508=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48096,#48097,#48098,#48099,#48100, #48101,#48102),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255435235,1.821459649776E-13, 1.60000000000018),.UNSPECIFIED.); #509=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48105,#48106,#48107,#48108,#48109, #48110,#48111),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255437651,-6.505213034913E-14, 1.59999999999993),.UNSPECIFIED.); #510=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48117,#48118,#48119,#48120,#48121, #48122,#48123),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #511=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48129,#48130,#48131,#48132,#48133, #48134,#48135),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255437651,-6.505213034913E-14, 1.59999999999993),.UNSPECIFIED.); #512=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48139,#48140,#48141,#48142,#48143, #48144,#48145),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #513=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48150,#48151,#48152,#48153,#48154, #48155,#48156),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #514=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48159,#48160,#48161,#48162,#48163, #48164,#48165),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.5025003255437), .UNSPECIFIED.); #515=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48174,#48175,#48176,#48177,#48178, #48179,#48180),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #516=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48184,#48185,#48186,#48187,#48188, #48189,#48190),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255437706,-6.505213034913E-14, 1.59999999999993),.UNSPECIFIED.); #517=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48193,#48194,#48195,#48196,#48197, #48198,#48199),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255415459,2.159730727591E-12, 1.60000000000216),.UNSPECIFIED.); #518=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48205,#48206,#48207,#48208,#48209, #48210,#48211),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #519=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48217,#48218,#48219,#48220,#48221, #48222,#48223),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255415459,2.159730727591E-12, 1.60000000000216),.UNSPECIFIED.); #520=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48227,#48228,#48229,#48230,#48231, #48232,#48233),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #521=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48237,#48238,#48239,#48240,#48241, #48242,#48243),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #522=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48246,#48247,#48248,#48249,#48250, #48251,#48252),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543695), .UNSPECIFIED.); #523=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48260,#48261,#48262,#48263,#48264, #48265,#48266),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #524=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48270,#48271,#48272,#48273,#48274, #48275,#48276),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.012500325543661,3.903127820948E-14, 1.60000000000004),.UNSPECIFIED.); #525=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48279,#48280,#48281,#48282,#48283, #48284,#48285),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.012500325543713,-1.301042606983E-14, 1.59999999999998),.UNSPECIFIED.); #526=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48291,#48292,#48293,#48294,#48295, #48296,#48297),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #527=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48303,#48304,#48305,#48306,#48307, #48308,#48309),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.012500325543713,-1.301042606983E-14, 1.59999999999998),.UNSPECIFIED.); #528=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48313,#48314,#48315,#48316,#48317, #48318,#48319),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #529=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48359,#48360,#48361,#48362,#48363, #48364,#48365),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255436666,3.903127820948E-14, 1.60000000000004),.UNSPECIFIED.); #530=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48371,#48372,#48373,#48374,#48375, #48376,#48377),.UNSPECIFIED.,.F.,.F.,(4,3,4),(3.12909232804593,3.14159265358979, 4.74159265358979),.UNSPECIFIED.); #531=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48383,#48384,#48385,#48386,#48387, #48388,#48389),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-0.0125003255436666,3.903127820948E-14, 1.60000000000004),.UNSPECIFIED.); #532=B_SPLINE_CURVE_WITH_KNOTS('',3,(#48393,#48394,#48395,#48396,#48397, #48398,#48399),.UNSPECIFIED.,.F.,.F.,(4,3,4),(-1.11,0.489999999999995,0.502500325543856), .UNSPECIFIED.); #533=B_SPLINE_CURVE_WITH_KNOTS('',3,(#49674,#49675,#49676,#49677,#49678, #49679,#49680,#49681,#49682,#49683),.UNSPECIFIED.,.F.,.F.,(4,3,3,4),(0., 0.333333333333,0.666666666667,1.),.UNSPECIFIED.); #534=B_SPLINE_CURVE_WITH_KNOTS('',3,(#49685,#49686,#49687,#49688,#49689, #49690,#49691,#49692,#49693,#49694),.UNSPECIFIED.,.F.,.F.,(4,3,3,4),(0., 0.333333333333,0.666666666667,1.),.UNSPECIFIED.); #535=B_SPLINE_CURVE_WITH_KNOTS('',3,(#49721,#49722,#49723,#49724,#49725, #49726,#49727,#49728,#49729,#49730,#49731,#49732,#49733,#49734,#49735,#49736, #49737,#49738,#49739,#49740,#49741,#49742,#49743,#49744,#49745,#49746,#49747, #49748,#49749,#49750,#49751,#49752,#49753,#49754,#49755,#49756,#49757,#49758, #49759,#49760,#49761,#49762,#49763,#49764,#49765,#49766,#49767,#49768,#49769, #49770,#49771,#49772,#49773,#49774,#49775,#49776,#49777,#49778,#49779,#49780, #49781,#49782,#49783,#49784,#49785,#49786,#49787),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #536=B_SPLINE_CURVE_WITH_KNOTS('',3,(#49790,#49791,#49792,#49793,#49794, #49795,#49796,#49797,#49798,#49799,#49800,#49801,#49802,#49803,#49804,#49805, #49806,#49807,#49808,#49809,#49810,#49811,#49812,#49813,#49814,#49815,#49816, #49817,#49818,#49819,#49820,#49821,#49822,#49823,#49824,#49825,#49826,#49827, #49828,#49829,#49830,#49831,#49832,#49833,#49834,#49835,#49836,#49837,#49838, #49839,#49840,#49841,#49842,#49843,#49844,#49845,#49846,#49847,#49848,#49849, #49850,#49851,#49852,#49853,#49854,#49855,#49856),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #537=B_SPLINE_CURVE_WITH_KNOTS('',3,(#49864,#49865,#49866,#49867,#49868, #49869,#49870,#49871,#49872,#49873,#49874,#49875,#49876,#49877,#49878,#49879, #49880,#49881,#49882,#49883,#49884,#49885,#49886,#49887,#49888,#49889,#49890, #49891,#49892,#49893,#49894,#49895,#49896,#49897,#49898,#49899,#49900,#49901, #49902,#49903,#49904,#49905,#49906,#49907,#49908,#49909,#49910,#49911,#49912, #49913,#49914,#49915,#49916,#49917,#49918,#49919,#49920,#49921,#49922,#49923, #49924,#49925,#49926,#49927,#49928,#49929,#49930),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #538=B_SPLINE_CURVE_WITH_KNOTS('',3,(#49957,#49958,#49959,#49960,#49961, #49962,#49963,#49964,#49965,#49966,#49967,#49968,#49969,#49970,#49971,#49972, #49973,#49974,#49975,#49976,#49977,#49978,#49979,#49980,#49981,#49982,#49983, #49984,#49985,#49986,#49987,#49988,#49989,#49990,#49991,#49992,#49993,#49994, #49995,#49996,#49997,#49998,#49999,#50000,#50001,#50002,#50003,#50004,#50005, #50006,#50007,#50008,#50009,#50010,#50011,#50012,#50013,#50014,#50015,#50016, #50017,#50018,#50019,#50020,#50021,#50022,#50023),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #539=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50028,#50029,#50030,#50031,#50032), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.),.UNSPECIFIED.); #540=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50033,#50034,#50035,#50036,#50037), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.),.UNSPECIFIED.); #541=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50090,#50091,#50092,#50093,#50094, #50095,#50096,#50097,#50098,#50099,#50100,#50101,#50102,#50103,#50104,#50105, #50106,#50107,#50108,#50109,#50110,#50111,#50112,#50113,#50114,#50115,#50116, #50117,#50118,#50119,#50120,#50121,#50122,#50123,#50124,#50125,#50126,#50127, #50128,#50129,#50130,#50131,#50132,#50133,#50134,#50135,#50136,#50137,#50138, #50139,#50140,#50141,#50142,#50143,#50144,#50145,#50146,#50147,#50148,#50149, #50150,#50151,#50152,#50153,#50154,#50155,#50156),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #542=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50159,#50160,#50161,#50162,#50163, #50164,#50165,#50166,#50167,#50168,#50169,#50170,#50171,#50172,#50173,#50174, #50175,#50176,#50177,#50178,#50179,#50180,#50181,#50182,#50183,#50184,#50185, #50186,#50187,#50188,#50189,#50190,#50191,#50192,#50193,#50194,#50195,#50196, #50197,#50198,#50199,#50200,#50201,#50202,#50203,#50204,#50205,#50206,#50207, #50208,#50209,#50210,#50211,#50212,#50213,#50214,#50215,#50216,#50217,#50218, #50219,#50220,#50221,#50222,#50223,#50224,#50225),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #543=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50244,#50245,#50246,#50247,#50248, #50249),.UNSPECIFIED.,.F.,.F.,(4,2,4),(-0.0105351844840511,-0.00527606970408611, -9.99997223343624E-7),.UNSPECIFIED.); #544=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50253,#50254,#50255,#50256,#50257, #50258),.UNSPECIFIED.,.F.,.F.,(4,2,4),(9.99997223818299E-7,0.00526009632115081, 0.0105351475159855),.UNSPECIFIED.); #545=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50720,#50721,#50722,#50723,#50724, #50725,#50726,#50727,#50728,#50729),.UNSPECIFIED.,.F.,.F.,(4,3,3,4),(0., 0.333333333333,0.666666666667,1.),.UNSPECIFIED.); #546=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50731,#50732,#50733,#50734,#50735, #50736,#50737,#50738,#50739,#50740),.UNSPECIFIED.,.F.,.F.,(4,3,3,4),(0., 0.333333333333,0.666666666667,1.),.UNSPECIFIED.); #547=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50767,#50768,#50769,#50770,#50771, #50772,#50773,#50774,#50775,#50776,#50777,#50778,#50779,#50780,#50781,#50782, #50783,#50784,#50785,#50786,#50787,#50788,#50789,#50790,#50791,#50792,#50793, #50794,#50795,#50796,#50797,#50798,#50799,#50800,#50801,#50802,#50803,#50804, #50805,#50806,#50807,#50808,#50809,#50810,#50811,#50812,#50813,#50814,#50815, #50816,#50817,#50818,#50819,#50820,#50821,#50822,#50823,#50824,#50825,#50826, #50827,#50828,#50829,#50830,#50831,#50832,#50833),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #548=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50836,#50837,#50838,#50839,#50840, #50841,#50842,#50843,#50844,#50845,#50846,#50847,#50848,#50849,#50850,#50851, #50852,#50853,#50854,#50855,#50856,#50857,#50858,#50859,#50860,#50861,#50862, #50863,#50864,#50865,#50866,#50867,#50868,#50869,#50870,#50871,#50872,#50873, #50874,#50875,#50876,#50877,#50878,#50879,#50880,#50881,#50882,#50883,#50884, #50885,#50886,#50887,#50888,#50889,#50890,#50891,#50892,#50893,#50894,#50895, #50896,#50897,#50898,#50899,#50900,#50901,#50902),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #549=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50905,#50906,#50907,#50908,#50909), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.),.UNSPECIFIED.); #550=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50913,#50914,#50915,#50916,#50917), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.),.UNSPECIFIED.); #551=B_SPLINE_CURVE_WITH_KNOTS('',3,(#50918,#50919,#50920,#50921,#50922, #50923,#50924,#50925,#50926,#50927,#50928,#50929,#50930,#50931,#50932,#50933, #50934,#50935,#50936,#50937,#50938,#50939,#50940,#50941,#50942,#50943,#50944, #50945,#50946,#50947,#50948,#50949,#50950,#50951,#50952,#50953,#50954,#50955, #50956,#50957,#50958,#50959,#50960,#50961,#50962,#50963,#50964,#50965,#50966, #50967,#50968,#50969,#50970,#50971,#50972,#50973,#50974,#50975,#50976,#50977, #50978,#50979,#50980,#50981,#50982,#50983,#50984),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #552=B_SPLINE_CURVE_WITH_KNOTS('',3,(#51011,#51012,#51013,#51014,#51015, #51016,#51017,#51018,#51019,#51020,#51021,#51022,#51023,#51024,#51025,#51026, #51027,#51028,#51029,#51030,#51031,#51032,#51033,#51034,#51035,#51036,#51037, #51038,#51039,#51040,#51041,#51042,#51043,#51044,#51045,#51046,#51047,#51048, #51049,#51050,#51051,#51052,#51053,#51054,#51055,#51056,#51057,#51058,#51059, #51060,#51061,#51062,#51063,#51064,#51065,#51066,#51067,#51068,#51069,#51070, #51071,#51072,#51073,#51074,#51075,#51076,#51077),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #553=B_SPLINE_CURVE_WITH_KNOTS('',3,(#51136,#51137,#51138,#51139,#51140, #51141),.UNSPECIFIED.,.F.,.F.,(4,2,4),(9.99997223733692E-7,0.00526009632114746, 0.0105351475159746),.UNSPECIFIED.); #554=B_SPLINE_CURVE_WITH_KNOTS('',3,(#51144,#51145,#51146,#51147,#51148, #51149),.UNSPECIFIED.,.F.,.F.,(4,2,4),(-0.0105351844840581,-0.0052760697040896, -9.99997223449442E-7),.UNSPECIFIED.); #555=B_SPLINE_CURVE_WITH_KNOTS('',3,(#51168,#51169,#51170,#51171,#51172, #51173,#51174,#51175,#51176,#51177,#51178,#51179,#51180,#51181,#51182,#51183, #51184,#51185,#51186,#51187,#51188,#51189,#51190,#51191,#51192,#51193,#51194, #51195,#51196,#51197,#51198,#51199,#51200,#51201,#51202,#51203,#51204,#51205, #51206,#51207,#51208,#51209,#51210,#51211,#51212,#51213,#51214,#51215,#51216, #51217,#51218,#51219,#51220,#51221,#51222,#51223,#51224,#51225,#51226,#51227, #51228,#51229,#51230,#51231,#51232,#51233,#51234),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #556=B_SPLINE_CURVE_WITH_KNOTS('',3,(#51238,#51239,#51240,#51241,#51242, #51243,#51244,#51245,#51246,#51247,#51248,#51249,#51250,#51251,#51252,#51253, #51254,#51255,#51256,#51257,#51258,#51259,#51260,#51261,#51262,#51263,#51264, #51265,#51266,#51267,#51268,#51269,#51270,#51271,#51272,#51273,#51274,#51275, #51276,#51277,#51278,#51279,#51280,#51281,#51282,#51283,#51284,#51285,#51286, #51287,#51288,#51289,#51290,#51291,#51292,#51293,#51294,#51295,#51296,#51297, #51298,#51299,#51300,#51301,#51302,#51303,#51304),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #557=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52151,#52152,#52153,#52154,#52155, #52156,#52157,#52158,#52159,#52160,#52161,#52162,#52163,#52164,#52165,#52166, #52167,#52168,#52169,#52170,#52171,#52172,#52173,#52174,#52175,#52176,#52177, #52178,#52179,#52180,#52181,#52182,#52183,#52184,#52185,#52186,#52187,#52188, #52189,#52190,#52191,#52192,#52193,#52194,#52195,#52196,#52197,#52198,#52199, #52200,#52201,#52202,#52203,#52204,#52205,#52206,#52207,#52208,#52209,#52210, #52211,#52212,#52213,#52214,#52215,#52216,#52217),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #558=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52221,#52222,#52223,#52224,#52225, #52226,#52227,#52228,#52229,#52230,#52231,#52232,#52233,#52234,#52235,#52236, #52237,#52238,#52239,#52240,#52241,#52242,#52243,#52244,#52245,#52246,#52247, #52248,#52249,#52250,#52251,#52252,#52253,#52254,#52255,#52256,#52257,#52258, #52259,#52260,#52261,#52262,#52263,#52264,#52265,#52266,#52267,#52268,#52269, #52270,#52271,#52272,#52273,#52274,#52275,#52276,#52277,#52278,#52279,#52280, #52281,#52282,#52283,#52284,#52285,#52286,#52287),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #559=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52344,#52345,#52346,#52347,#52348, #52349),.UNSPECIFIED.,.F.,.F.,(4,2,4),(9.99999627907194E-7,0.0315478076140501, 0.0631149128319625),.UNSPECIFIED.); #560=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52352,#52353,#52354,#52355,#52356, #52357),.UNSPECIFIED.,.F.,.F.,(4,2,4),(1.00000014798941E-6,0.019744647683773, 0.0394882953497889),.UNSPECIFIED.); #561=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52361,#52362,#52363,#52364,#52365, #52366),.UNSPECIFIED.,.F.,.F.,(4,2,4),(-0.0394882953707624,-0.0197446476766481, -1.00000014362223E-6),.UNSPECIFIED.); #562=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52385,#52386,#52387,#52388,#52389, #52390),.UNSPECIFIED.,.F.,.F.,(4,2,4),(-0.0631149010923022,-0.0315680993458134, -9.99999608078395E-7),.UNSPECIFIED.); #563=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52462,#52463,#52464,#52465,#52466, #52467,#52468,#52469,#52470,#52471,#52472,#52473,#52474,#52475,#52476,#52477, #52478,#52479,#52480,#52481,#52482,#52483,#52484,#52485,#52486,#52487,#52488, #52489,#52490,#52491,#52492,#52493,#52494,#52495,#52496,#52497,#52498,#52499, #52500,#52501,#52502,#52503,#52504,#52505,#52506,#52507,#52508,#52509,#52510, #52511,#52512,#52513,#52514,#52515,#52516,#52517,#52518,#52519,#52520,#52521, #52522,#52523,#52524,#52525,#52526,#52527,#52528),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #564=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52555,#52556,#52557,#52558,#52559, #52560,#52561,#52562,#52563,#52564,#52565,#52566,#52567,#52568,#52569,#52570, #52571,#52572,#52573,#52574,#52575,#52576,#52577,#52578,#52579,#52580,#52581, #52582,#52583,#52584,#52585,#52586,#52587,#52588,#52589,#52590,#52591,#52592, #52593,#52594,#52595,#52596,#52597,#52598,#52599,#52600,#52601,#52602,#52603, #52604,#52605,#52606,#52607,#52608,#52609,#52610,#52611,#52612,#52613,#52614, #52615,#52616,#52617,#52618,#52619,#52620,#52621),.UNSPECIFIED.,.F.,.F., (4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4),(0.,0.04545454545455,0.09090909090909, 0.136363636364,0.181818181818,0.227272727273,0.272727272727,0.318181818182, 0.363636363636,0.409090909091,0.454545454545,0.5,0.545454545455,0.590909090909, 0.636363636364,0.681818181818,0.727272727273,0.772727272727,0.818181818182, 0.863636363636,0.909090909091,0.954545454545,1.),.UNSPECIFIED.); #565=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52660,#52661,#52662,#52663,#52664, #52665),.UNSPECIFIED.,.F.,.F.,(4,2,4),(1.00000014755494E-6,0.0197446476837723, 0.0394882953497875),.UNSPECIFIED.); #566=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52668,#52669,#52670,#52671,#52672, #52673),.UNSPECIFIED.,.F.,.F.,(4,2,4),(9.99999628124439E-7,0.0315478076140508, 0.063114912831964),.UNSPECIFIED.); #567=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52677,#52678,#52679,#52680,#52681, #52682),.UNSPECIFIED.,.F.,.F.,(4,2,4),(-0.0631149010923026,-0.0315680993458136, -9.99999608203295E-7),.UNSPECIFIED.); #568=B_SPLINE_CURVE_WITH_KNOTS('',3,(#52701,#52702,#52703,#52704,#52705, #52706),.UNSPECIFIED.,.F.,.F.,(4,2,4),(-0.0394882953707556,-0.0197446476766451, -1.00000014351814E-6),.UNSPECIFIED.); #569=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54613,#54614,#54615,#54616,#54617), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0396139117879218,0.10779245974156), .UNSPECIFIED.); #570=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54621,#54622,#54623,#54624,#54625), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0396139117879218,0.10779245974156), .UNSPECIFIED.); #571=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54638,#54639,#54640,#54641,#54642), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0228632270835551,0.0475274529504709), .UNSPECIFIED.); #572=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54645,#54646,#54647,#54648,#54649), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0228632270835551,0.0475274529504709), .UNSPECIFIED.); #573=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54661,#54662,#54663,#54664,#54665), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0251796757407752,0.0482485359125712), .UNSPECIFIED.); #574=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54668,#54669,#54670,#54671,#54672), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0251796757407752,0.0482485359125712), .UNSPECIFIED.); #575=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54684,#54685,#54686,#54687,#54688), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.02585198359896,0.0549230941480691), .UNSPECIFIED.); #576=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54691,#54692,#54693,#54694,#54695), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.02585198359896,0.0549230941480691), .UNSPECIFIED.); #577=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54707,#54708,#54709,#54710,#54711), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0258536038788842,0.0505421916912593), .UNSPECIFIED.); #578=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54714,#54715,#54716,#54717,#54718), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0258536038788842,0.0505421916912593), .UNSPECIFIED.); #579=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54730,#54731,#54732,#54733,#54734), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0535208539911344,0.0832199043752585), .UNSPECIFIED.); #580=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54737,#54738,#54739,#54740,#54741), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0535208539911344,0.0832199043752585), .UNSPECIFIED.); #581=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54769,#54770,#54771,#54772,#54773), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0349245719424988,0.103582743675206), .UNSPECIFIED.); #582=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54777,#54778,#54779,#54780,#54781), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0349245719424988,0.103582743675206), .UNSPECIFIED.); #583=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54794,#54795,#54796,#54797,#54798), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0236153566459702,0.0510668813533396), .UNSPECIFIED.); #584=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54801,#54802,#54803,#54804,#54805), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0236153566459702,0.0510668813533396), .UNSPECIFIED.); #585=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54817,#54818,#54819,#54820,#54821), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0254690376864139,0.0484924770872619), .UNSPECIFIED.); #586=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54824,#54825,#54826,#54827,#54828), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0254690376864139,0.0484924770872619), .UNSPECIFIED.); #587=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54840,#54841,#54842,#54843,#54844), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0247758601595817,0.0514544877646456), .UNSPECIFIED.); #588=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54847,#54848,#54849,#54850,#54851), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0247758601595817,0.0514544877646456), .UNSPECIFIED.); #589=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54863,#54864,#54865,#54866,#54867), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0286386008998032,0.053923892271069), .UNSPECIFIED.); #590=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54870,#54871,#54872,#54873,#54874), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0286386008998032,0.053923892271069), .UNSPECIFIED.); #591=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54886,#54887,#54888,#54889,#54890), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0574033407695605,0.0880352680214475), .UNSPECIFIED.); #592=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54893,#54894,#54895,#54896,#54897), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0574033407695605,0.0880352680214475), .UNSPECIFIED.); #593=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54933,#54934,#54935,#54936,#54937), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0517395868333095,0.146191147859105), .UNSPECIFIED.); #594=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54940,#54941,#54942,#54943,#54944), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0517395868333095,0.146191147859105), .UNSPECIFIED.); #595=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54956,#54957,#54958,#54959,#54960), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0410458882789293,0.0865038350181998), .UNSPECIFIED.); #596=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54963,#54964,#54965,#54966,#54967), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0410458882789293,0.0865038350181998), .UNSPECIFIED.); #597=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54979,#54980,#54981,#54982,#54983), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0412946305880013,0.0814144693494169), .UNSPECIFIED.); #598=B_SPLINE_CURVE_WITH_KNOTS('',3,(#54986,#54987,#54988,#54989,#54990), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0412946305880013,0.0814144693494169), .UNSPECIFIED.); #599=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55002,#55003,#55004,#55005,#55006), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0407011569439943,0.0826528300117284), .UNSPECIFIED.); #600=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55009,#55010,#55011,#55012,#55013), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0407011569439943,0.0826528300117284), .UNSPECIFIED.); #601=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55025,#55026,#55027,#55028,#55029), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0473260627988312,0.096482863847812), .UNSPECIFIED.); #602=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55032,#55033,#55034,#55035,#55036), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0473260627988312,0.096482863847812), .UNSPECIFIED.); #603=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55048,#55049,#55050,#55051,#55052), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0530875021266755,0.101680049463946), .UNSPECIFIED.); #604=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55055,#55056,#55057,#55058,#55059), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0530875021266755,0.101680049463946), .UNSPECIFIED.); #605=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55071,#55072,#55073,#55074,#55075), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0406969386156489,0.0818573986487822), .UNSPECIFIED.); #606=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55078,#55079,#55080,#55081,#55082), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0406969386156489,0.0818573986487822), .UNSPECIFIED.); #607=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55094,#55095,#55096,#55097,#55098), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0408202742134127,0.0815613856373198), .UNSPECIFIED.); #608=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55101,#55102,#55103,#55104,#55105), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0408202742134127,0.0815613856373198), .UNSPECIFIED.); #609=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55117,#55118,#55119,#55120,#55121), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0358196116938734,0.0730427221685361), .UNSPECIFIED.); #610=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55124,#55125,#55126,#55127,#55128), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0358196116938734,0.0730427221685361), .UNSPECIFIED.); #611=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55140,#55141,#55142,#55143,#55144), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0336606405195115,0.0687992054260682), .UNSPECIFIED.); #612=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55147,#55148,#55149,#55150,#55151), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0336606405195115,0.0687992054260682), .UNSPECIFIED.); #613=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55163,#55164,#55165,#55166,#55167), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0344511918696187,0.0676810401412082), .UNSPECIFIED.); #614=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55170,#55171,#55172,#55173,#55174), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0344511918696187,0.0676810401412082), .UNSPECIFIED.); #615=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55186,#55187,#55188,#55189,#55190), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0621267621811802,0.106262536247418), .UNSPECIFIED.); #616=B_SPLINE_CURVE_WITH_KNOTS('',3,(#55193,#55194,#55195,#55196,#55197), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0621267621811802,0.106262536247418), .UNSPECIFIED.); #617=ITEM_DEFINED_TRANSFORMATION($,$,#33895,#34118); #618=ITEM_DEFINED_TRANSFORMATION($,$,#34214,#35106); #619=ITEM_DEFINED_TRANSFORMATION($,$,#34214,#35107); #620=ITEM_DEFINED_TRANSFORMATION($,$,#35109,#35885); #621=ITEM_DEFINED_TRANSFORMATION($,$,#35109,#35886); #622=ITEM_DEFINED_TRANSFORMATION($,$,#35888,#35965); #623=ITEM_DEFINED_TRANSFORMATION($,$,#35888,#35966); #624=ITEM_DEFINED_TRANSFORMATION($,$,#35968,#36021); #625=ITEM_DEFINED_TRANSFORMATION($,$,#35968,#36022); #626=ITEM_DEFINED_TRANSFORMATION($,$,#33890,#36416); #627=ITEM_DEFINED_TRANSFORMATION($,$,#33891,#36417); #628=ITEM_DEFINED_TRANSFORMATION($,$,#33892,#36418); #629=ITEM_DEFINED_TRANSFORMATION($,$,#33893,#36419); #630=ITEM_DEFINED_TRANSFORMATION($,$,#33894,#36420); #631=ITEM_DEFINED_TRANSFORMATION($,$,#34119,#36421); #632=ITEM_DEFINED_TRANSFORMATION($,$,#34213,#36422); #633=ITEM_DEFINED_TRANSFORMATION($,$,#35108,#36423); #634=ITEM_DEFINED_TRANSFORMATION($,$,#35887,#36424); #635=ITEM_DEFINED_TRANSFORMATION($,$,#35967,#36425); #636=ITEM_DEFINED_TRANSFORMATION($,$,#36023,#36426); #637=ITEM_DEFINED_TRANSFORMATION($,$,#36237,#36427); #638=( REPRESENTATION_RELATIONSHIP($,$,#58811,#58810) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#617) SHAPE_REPRESENTATION_RELATIONSHIP() ); #639=( REPRESENTATION_RELATIONSHIP($,$,#58814,#58806) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#618) SHAPE_REPRESENTATION_RELATIONSHIP() ); #640=( REPRESENTATION_RELATIONSHIP($,$,#58814,#58813) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#619) SHAPE_REPRESENTATION_RELATIONSHIP() ); #641=( REPRESENTATION_RELATIONSHIP($,$,#58816,#58808) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#620) SHAPE_REPRESENTATION_RELATIONSHIP() ); #642=( REPRESENTATION_RELATIONSHIP($,$,#58816,#58815) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#621) SHAPE_REPRESENTATION_RELATIONSHIP() ); #643=( REPRESENTATION_RELATIONSHIP($,$,#58818,#58809) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#622) SHAPE_REPRESENTATION_RELATIONSHIP() ); #644=( REPRESENTATION_RELATIONSHIP($,$,#58818,#58817) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#623) SHAPE_REPRESENTATION_RELATIONSHIP() ); #645=( REPRESENTATION_RELATIONSHIP($,$,#58820,#58807) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#624) SHAPE_REPRESENTATION_RELATIONSHIP() ); #646=( REPRESENTATION_RELATIONSHIP($,$,#58820,#58819) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#625) SHAPE_REPRESENTATION_RELATIONSHIP() ); #647=( REPRESENTATION_RELATIONSHIP($,$,#58806,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#626) SHAPE_REPRESENTATION_RELATIONSHIP() ); #648=( REPRESENTATION_RELATIONSHIP($,$,#58807,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#627) SHAPE_REPRESENTATION_RELATIONSHIP() ); #649=( REPRESENTATION_RELATIONSHIP($,$,#58808,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#628) SHAPE_REPRESENTATION_RELATIONSHIP() ); #650=( REPRESENTATION_RELATIONSHIP($,$,#58809,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#629) SHAPE_REPRESENTATION_RELATIONSHIP() ); #651=( REPRESENTATION_RELATIONSHIP($,$,#58810,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#630) SHAPE_REPRESENTATION_RELATIONSHIP() ); #652=( REPRESENTATION_RELATIONSHIP($,$,#58812,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#631) SHAPE_REPRESENTATION_RELATIONSHIP() ); #653=( REPRESENTATION_RELATIONSHIP($,$,#58813,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#632) SHAPE_REPRESENTATION_RELATIONSHIP() ); #654=( REPRESENTATION_RELATIONSHIP($,$,#58815,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#633) SHAPE_REPRESENTATION_RELATIONSHIP() ); #655=( REPRESENTATION_RELATIONSHIP($,$,#58817,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#634) SHAPE_REPRESENTATION_RELATIONSHIP() ); #656=( REPRESENTATION_RELATIONSHIP($,$,#58819,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#635) SHAPE_REPRESENTATION_RELATIONSHIP() ); #657=( REPRESENTATION_RELATIONSHIP($,$,#58821,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#636) SHAPE_REPRESENTATION_RELATIONSHIP() ); #658=( REPRESENTATION_RELATIONSHIP($,$,#58822,#58805) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#637) SHAPE_REPRESENTATION_RELATIONSHIP() ); #659=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#638,#58773); #660=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#639,#58777); #661=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#640,#58778); #662=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#641,#58781); #663=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#642,#58782); #664=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#643,#58785); #665=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#644,#58786); #666=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#645,#58789); #667=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#646,#58790); #668=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#647,#58793); #669=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#648,#58794); #670=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#649,#58795); #671=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#650,#58796); #672=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#651,#58797); #673=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#652,#58798); #674=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#653,#58799); #675=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#654,#58800); #676=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#655,#58801); #677=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#656,#58802); #678=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#657,#58803); #679=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#658,#58804); #680=NEXT_ASSEMBLY_USAGE_OCCURRENCE('SOLID (2):1','SOLID (2):1', 'SOLID (2):1',#58829,#58830,'SOLID (2):1'); #681=NEXT_ASSEMBLY_USAGE_OCCURRENCE('COMPOUND:1','COMPOUND:1', 'COMPOUND:1',#58825,#58833,'COMPOUND:1'); #682=NEXT_ASSEMBLY_USAGE_OCCURRENCE('COMPOUND:1','COMPOUND:1', 'COMPOUND:1',#58832,#58833,'COMPOUND:1'); #683=NEXT_ASSEMBLY_USAGE_OCCURRENCE('COMPOUND (1):1','COMPOUND (1):1', 'COMPOUND (1):1',#58827,#58835,'COMPOUND (1):1'); #684=NEXT_ASSEMBLY_USAGE_OCCURRENCE('COMPOUND (1):1','COMPOUND (1):1', 'COMPOUND (1):1',#58834,#58835,'COMPOUND (1):1'); #685=NEXT_ASSEMBLY_USAGE_OCCURRENCE('SOLID (1):1','SOLID (1):1', 'SOLID (1):1',#58828,#58837,'SOLID (1):1'); #686=NEXT_ASSEMBLY_USAGE_OCCURRENCE('SOLID (1):1','SOLID (1):1', 'SOLID (1):1',#58836,#58837,'SOLID (1):1'); #687=NEXT_ASSEMBLY_USAGE_OCCURRENCE('SOLID:1','SOLID:1','SOLID:1',#58826, #58839,'SOLID:1'); #688=NEXT_ASSEMBLY_USAGE_OCCURRENCE('SOLID:1','SOLID:1','SOLID:1',#58838, #58839,'SOLID:1'); #689=NEXT_ASSEMBLY_USAGE_OCCURRENCE('Raspberry Pi Pico-R3:1', 'Raspberry Pi Pico-R3:1','Raspberry Pi Pico-R3:1',#58824,#58825, 'Raspberry Pi Pico-R3:1'); #690=NEXT_ASSEMBLY_USAGE_OCCURRENCE('Power Filter CAP:1', 'Power Filter CAP:1','Power Filter CAP:1',#58824,#58826, 'Power Filter CAP:1'); #691=NEXT_ASSEMBLY_USAGE_OCCURRENCE('Molex 676432911 USB-A:1', 'Molex 676432911 USB-A:1','Molex 676432911 USB-A:1',#58824,#58827, 'Molex 676432911 USB-A:1'); #692=NEXT_ASSEMBLY_USAGE_OCCURRENCE('Header Pin 1x03 2.54 mm:1', 'Header Pin 1x03 2.54 mm:1','Header Pin 1x03 2.54 mm:1',#58824,#58828, 'Header Pin 1x03 2.54 mm:1'); #693=NEXT_ASSEMBLY_USAGE_OCCURRENCE('ADuM 1201 BRZ digital isolator:1', 'ADuM 1201 BRZ digital isolator:1','ADuM 1201 BRZ digital isolator:1',#58824, #58829,'ADuM 1201 BRZ digital isolator:1'); #694=NEXT_ASSEMBLY_USAGE_OCCURRENCE('PCB:1','PCB:1','PCB:1',#58824,#58831, 'PCB:1'); #695=NEXT_ASSEMBLY_USAGE_OCCURRENCE('Raspberry Pi Pico-R3:2', 'Raspberry Pi Pico-R3:2','Raspberry Pi Pico-R3:2',#58824,#58832, 'Raspberry Pi Pico-R3:2'); #696=NEXT_ASSEMBLY_USAGE_OCCURRENCE('Molex 676432911 USB-A:2', 'Molex 676432911 USB-A:2','Molex 676432911 USB-A:2',#58824,#58834, 'Molex 676432911 USB-A:2'); #697=NEXT_ASSEMBLY_USAGE_OCCURRENCE('Header Pin 1x03 2.54 mm:2', 'Header Pin 1x03 2.54 mm:2','Header Pin 1x03 2.54 mm:2',#58824,#58836, 'Header Pin 1x03 2.54 mm:2'); #698=NEXT_ASSEMBLY_USAGE_OCCURRENCE('Power Filter CAP:2', 'Power Filter CAP:2','Power Filter CAP:2',#58824,#58838, 'Power Filter CAP:2'); #699=NEXT_ASSEMBLY_USAGE_OCCURRENCE('Box Top :1','Box Top :1', 'Box Top :1',#58824,#58840,'Box Top :1'); #700=NEXT_ASSEMBLY_USAGE_OCCURRENCE('Box Bottom:1','Box Bottom:1', 'Box Bottom:1',#58824,#58841,'Box Bottom:1'); #701=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#58811,#709); #702=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#58812,#710); #703=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#58814,#711); #704=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#58816,#712); #705=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#58818,#713); #706=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#58820,#714); #707=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#58821,#715); #708=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#58822,#716); #709=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#795),#58731); #710=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#796),#58732); #711=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#797,#798,#799,#800,#801,#802, #803,#804,#805,#806,#807,#808,#809,#810,#811,#812,#813),#58734); #712=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#814),#58736); #713=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#815),#58738); #714=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#816),#58740); #715=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#817),#58741); #716=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#818),#58742); #717=STYLED_ITEM('',(#58899),#795); #718=STYLED_ITEM('',(#58900),#796); #719=STYLED_ITEM('',(#58899),#797); #720=STYLED_ITEM('',(#58899),#798); #721=STYLED_ITEM('',(#58899),#799); #722=STYLED_ITEM('',(#58899),#800); #723=STYLED_ITEM('',(#58899),#801); #724=STYLED_ITEM('',(#58899),#802); #725=STYLED_ITEM('',(#58899),#803); #726=STYLED_ITEM('',(#58899),#804); #727=STYLED_ITEM('',(#58899),#805); #728=STYLED_ITEM('',(#58899),#806); #729=STYLED_ITEM('',(#58899),#807); #730=STYLED_ITEM('',(#58899),#808); #731=STYLED_ITEM('',(#58899),#809); #732=STYLED_ITEM('',(#58899),#810); #733=STYLED_ITEM('',(#58899),#811); #734=STYLED_ITEM('',(#58899),#812); #735=STYLED_ITEM('',(#58899),#813); #736=STYLED_ITEM('',(#58899),#814); #737=STYLED_ITEM('',(#58901),#33256); #738=STYLED_ITEM('',(#58901),#33257); #739=STYLED_ITEM('',(#58901),#33258); #740=STYLED_ITEM('',(#58901),#33259); #741=STYLED_ITEM('',(#58901),#33260); #742=STYLED_ITEM('',(#58901),#33261); #743=STYLED_ITEM('',(#58901),#33262); #744=STYLED_ITEM('',(#58901),#33263); #745=STYLED_ITEM('',(#58901),#33264); #746=STYLED_ITEM('',(#58901),#33265); #747=STYLED_ITEM('',(#58901),#33266); #748=STYLED_ITEM('',(#58901),#33267); #749=STYLED_ITEM('',(#58901),#33268); #750=STYLED_ITEM('',(#58901),#33269); #751=STYLED_ITEM('',(#58901),#33270); #752=STYLED_ITEM('',(#58901),#33271); #753=STYLED_ITEM('',(#58901),#33272); #754=STYLED_ITEM('',(#58901),#33273); #755=STYLED_ITEM('',(#58901),#33274); #756=STYLED_ITEM('',(#58901),#33275); #757=STYLED_ITEM('',(#58901),#33276); #758=STYLED_ITEM('',(#58901),#33277); #759=STYLED_ITEM('',(#58901),#33278); #760=STYLED_ITEM('',(#58901),#33279); #761=STYLED_ITEM('',(#58901),#33280); #762=STYLED_ITEM('',(#58901),#33281); #763=STYLED_ITEM('',(#58901),#33282); #764=STYLED_ITEM('',(#58901),#33283); #765=STYLED_ITEM('',(#58901),#33284); #766=STYLED_ITEM('',(#58901),#33285); #767=STYLED_ITEM('',(#58901),#33286); #768=STYLED_ITEM('',(#58901),#33287); #769=STYLED_ITEM('',(#58901),#33288); #770=STYLED_ITEM('',(#58901),#33289); #771=STYLED_ITEM('',(#58901),#33290); #772=STYLED_ITEM('',(#58901),#33291); #773=STYLED_ITEM('',(#58901),#33292); #774=STYLED_ITEM('',(#58901),#33293); #775=STYLED_ITEM('',(#58901),#33294); #776=STYLED_ITEM('',(#58901),#33295); #777=STYLED_ITEM('',(#58901),#33296); #778=STYLED_ITEM('',(#58901),#33297); #779=STYLED_ITEM('',(#58901),#33298); #780=STYLED_ITEM('',(#58901),#33299); #781=STYLED_ITEM('',(#58901),#33300); #782=STYLED_ITEM('',(#58901),#33301); #783=STYLED_ITEM('',(#58901),#33302); #784=STYLED_ITEM('',(#58901),#33303); #785=STYLED_ITEM('',(#58901),#33304); #786=STYLED_ITEM('',(#58901),#33305); #787=STYLED_ITEM('',(#58901),#33306); #788=STYLED_ITEM('',(#58901),#33307); #789=STYLED_ITEM('',(#58901),#33308); #790=STYLED_ITEM('',(#58901),#33309); #791=STYLED_ITEM('',(#58899),#815); #792=STYLED_ITEM('',(#58899),#816); #793=STYLED_ITEM('',(#58902),#817); #794=STYLED_ITEM('',(#58902),#818); #795=MANIFOLD_SOLID_BREP('Body1',#33776); #796=MANIFOLD_SOLID_BREP('Body1',#33777); #797=MANIFOLD_SOLID_BREP('Body1',#33778); #798=MANIFOLD_SOLID_BREP('Body2',#33779); #799=MANIFOLD_SOLID_BREP('Body3',#33780); #800=MANIFOLD_SOLID_BREP('Body4',#33781); #801=MANIFOLD_SOLID_BREP('Body5',#33782); #802=MANIFOLD_SOLID_BREP('Body6',#33783); #803=MANIFOLD_SOLID_BREP('Body7',#33784); #804=MANIFOLD_SOLID_BREP('Body8',#33785); #805=MANIFOLD_SOLID_BREP('Body9',#33786); #806=MANIFOLD_SOLID_BREP('Body10',#33787); #807=MANIFOLD_SOLID_BREP('Body11',#33788); #808=MANIFOLD_SOLID_BREP('Body12',#33789); #809=MANIFOLD_SOLID_BREP('Body13',#33790); #810=MANIFOLD_SOLID_BREP('Body14',#33791); #811=MANIFOLD_SOLID_BREP('Body15',#33792); #812=MANIFOLD_SOLID_BREP('Body16',#33793); #813=MANIFOLD_SOLID_BREP('Body17',#33794); #814=MANIFOLD_SOLID_BREP('Body1',#33795); #815=MANIFOLD_SOLID_BREP('Body1',#33796); #816=MANIFOLD_SOLID_BREP('Body1',#33797); #817=MANIFOLD_SOLID_BREP('Box Top',#33798); #818=MANIFOLD_SOLID_BREP('Box Bottom',#33799); #819=FACE_BOUND('',#4022,.T.); #820=FACE_BOUND('',#4132,.T.); #821=FACE_BOUND('',#4133,.T.); #822=FACE_BOUND('',#4134,.T.); #823=FACE_BOUND('',#4135,.T.); #824=FACE_BOUND('',#4136,.T.); #825=FACE_BOUND('',#4137,.T.); #826=FACE_BOUND('',#4138,.T.); #827=FACE_BOUND('',#4139,.T.); #828=FACE_BOUND('',#4140,.T.); #829=FACE_BOUND('',#4141,.T.); #830=FACE_BOUND('',#4142,.T.); #831=FACE_BOUND('',#4143,.T.); #832=FACE_BOUND('',#4144,.T.); #833=FACE_BOUND('',#4145,.T.); #834=FACE_BOUND('',#4146,.T.); #835=FACE_BOUND('',#4147,.T.); #836=FACE_BOUND('',#4148,.T.); #837=FACE_BOUND('',#4149,.T.); #838=FACE_BOUND('',#4150,.T.); #839=FACE_BOUND('',#4151,.T.); #840=FACE_BOUND('',#4152,.T.); #841=FACE_BOUND('',#4153,.T.); #842=FACE_BOUND('',#4154,.T.); #843=FACE_BOUND('',#4155,.T.); #844=FACE_BOUND('',#4156,.T.); #845=FACE_BOUND('',#4157,.T.); #846=FACE_BOUND('',#4158,.T.); #847=FACE_BOUND('',#4159,.T.); #848=FACE_BOUND('',#4160,.T.); #849=FACE_BOUND('',#4162,.T.); #850=FACE_BOUND('',#4163,.T.); #851=FACE_BOUND('',#4164,.T.); #852=FACE_BOUND('',#4165,.T.); #853=FACE_BOUND('',#4166,.T.); #854=FACE_BOUND('',#4167,.T.); #855=FACE_BOUND('',#4168,.T.); #856=FACE_BOUND('',#4169,.T.); #857=FACE_BOUND('',#4170,.T.); #858=FACE_BOUND('',#4171,.T.); #859=FACE_BOUND('',#4172,.T.); #860=FACE_BOUND('',#4173,.T.); #861=FACE_BOUND('',#4174,.T.); #862=FACE_BOUND('',#4175,.T.); #863=FACE_BOUND('',#4176,.T.); #864=FACE_BOUND('',#4177,.T.); #865=FACE_BOUND('',#4178,.T.); #866=FACE_BOUND('',#4179,.T.); #867=FACE_BOUND('',#4180,.T.); #868=FACE_BOUND('',#4181,.T.); #869=FACE_BOUND('',#4182,.T.); #870=FACE_BOUND('',#4183,.T.); #871=FACE_BOUND('',#4184,.T.); #872=FACE_BOUND('',#4185,.T.); #873=FACE_BOUND('',#4186,.T.); #874=FACE_BOUND('',#4187,.T.); #875=FACE_BOUND('',#4188,.T.); #876=FACE_BOUND('',#4189,.T.); #877=FACE_BOUND('',#4190,.T.); #878=FACE_BOUND('',#4290,.T.); #879=FACE_BOUND('',#4292,.T.); #880=FACE_BOUND('',#4294,.T.); #881=FACE_BOUND('',#4296,.T.); #882=FACE_BOUND('',#4298,.T.); #883=FACE_BOUND('',#4300,.T.); #884=FACE_BOUND('',#4302,.T.); #885=FACE_BOUND('',#4304,.T.); #886=FACE_BOUND('',#4306,.T.); #887=FACE_BOUND('',#4308,.T.); #888=FACE_BOUND('',#4310,.T.); #889=FACE_BOUND('',#4312,.T.); #890=FACE_BOUND('',#4314,.T.); #891=FACE_BOUND('',#4316,.T.); #892=FACE_BOUND('',#4318,.T.); #893=FACE_BOUND('',#4320,.T.); #894=FACE_BOUND('',#4322,.T.); #895=FACE_BOUND('',#4324,.T.); #896=FACE_BOUND('',#4326,.T.); #897=FACE_BOUND('',#4328,.T.); #898=FACE_BOUND('',#4330,.T.); #899=FACE_BOUND('',#4332,.T.); #900=FACE_BOUND('',#4334,.T.); #901=FACE_BOUND('',#4336,.T.); #902=FACE_BOUND('',#4338,.T.); #903=FACE_BOUND('',#4340,.T.); #904=FACE_BOUND('',#4342,.T.); #905=FACE_BOUND('',#4344,.T.); #906=FACE_BOUND('',#4346,.T.); #907=FACE_BOUND('',#4348,.T.); #908=FACE_BOUND('',#4350,.T.); #909=FACE_BOUND('',#4352,.T.); #910=FACE_BOUND('',#4354,.T.); #911=FACE_BOUND('',#4356,.T.); #912=FACE_BOUND('',#4358,.T.); #913=FACE_BOUND('',#4360,.T.); #914=FACE_BOUND('',#4362,.T.); #915=FACE_BOUND('',#4364,.T.); #916=FACE_BOUND('',#4366,.T.); #917=FACE_BOUND('',#4368,.T.); #918=FACE_BOUND('',#4370,.T.); #919=FACE_BOUND('',#4372,.T.); #920=FACE_BOUND('',#4375,.T.); #921=FACE_BOUND('',#4377,.T.); #922=FACE_BOUND('',#4379,.T.); #923=FACE_BOUND('',#4381,.T.); #924=FACE_BOUND('',#4474,.T.); #925=FACE_BOUND('',#4476,.T.); #926=FACE_BOUND('',#4478,.T.); #927=FACE_BOUND('',#4480,.T.); #928=FACE_BOUND('',#4482,.T.); #929=FACE_BOUND('',#4484,.T.); #930=FACE_BOUND('',#4486,.T.); #931=FACE_BOUND('',#4488,.T.); #932=FACE_BOUND('',#4490,.T.); #933=FACE_BOUND('',#4492,.T.); #934=FACE_BOUND('',#4494,.T.); #935=FACE_BOUND('',#4496,.T.); #936=FACE_BOUND('',#4498,.T.); #937=FACE_BOUND('',#4500,.T.); #938=FACE_BOUND('',#4502,.T.); #939=FACE_BOUND('',#4504,.T.); #940=FACE_BOUND('',#4506,.T.); #941=FACE_BOUND('',#4508,.T.); #942=FACE_BOUND('',#4510,.T.); #943=FACE_BOUND('',#4512,.T.); #944=FACE_BOUND('',#4514,.T.); #945=FACE_BOUND('',#4516,.T.); #946=FACE_BOUND('',#4518,.T.); #947=FACE_BOUND('',#4520,.T.); #948=FACE_BOUND('',#4522,.T.); #949=FACE_BOUND('',#4524,.T.); #950=FACE_BOUND('',#4526,.T.); #951=FACE_BOUND('',#4528,.T.); #952=FACE_BOUND('',#4530,.T.); #953=FACE_BOUND('',#4532,.T.); #954=FACE_BOUND('',#4534,.T.); #955=FACE_BOUND('',#4536,.T.); #956=FACE_BOUND('',#4538,.T.); #957=FACE_BOUND('',#4540,.T.); #958=FACE_BOUND('',#4542,.T.); #959=FACE_BOUND('',#4544,.T.); #960=FACE_BOUND('',#4546,.T.); #961=FACE_BOUND('',#4548,.T.); #962=FACE_BOUND('',#4550,.T.); #963=FACE_BOUND('',#4552,.T.); #964=FACE_BOUND('',#4554,.T.); #965=FACE_BOUND('',#4556,.T.); #966=FACE_BOUND('',#4559,.T.); #967=FACE_BOUND('',#4561,.T.); #968=FACE_BOUND('',#4563,.T.); #969=FACE_BOUND('',#4565,.T.); #970=FACE_BOUND('',#4567,.T.); #971=FACE_BOUND('',#4569,.T.); #972=FACE_BOUND('',#4571,.T.); #973=FACE_BOUND('',#4572,.T.); #974=FACE_BOUND('',#4573,.T.); #975=FACE_BOUND('',#4574,.T.); #976=FACE_BOUND('',#4576,.T.); #977=FACE_BOUND('',#4577,.T.); #978=FACE_BOUND('',#4578,.T.); #979=FACE_BOUND('',#4579,.T.); #980=FACE_BOUND('',#4661,.T.); #981=FACE_BOUND('',#4729,.T.); #982=FACE_BOUND('',#4804,.T.); #983=FACE_BOUND('',#4805,.T.); #984=FACE_BOUND('',#4820,.T.); #985=FACE_BOUND('',#4821,.T.); #986=FACE_BOUND('',#4827,.T.); #987=FACE_BOUND('',#4833,.T.); #988=FACE_BOUND('',#4872,.T.); #989=FACE_BOUND('',#4873,.T.); #990=FACE_BOUND('',#4874,.T.); #991=FACE_BOUND('',#4875,.T.); #992=FACE_BOUND('',#4885,.T.); #993=FACE_BOUND('',#4888,.T.); #994=FACE_BOUND('',#4889,.T.); #995=FACE_BOUND('',#4896,.T.); #996=FACE_BOUND('',#4943,.T.); #997=FACE_BOUND('',#4944,.T.); #998=FACE_BOUND('',#4970,.T.); #999=FACE_BOUND('',#4971,.T.); #1000=FACE_BOUND('',#5034,.T.); #1001=FACE_BOUND('',#5035,.T.); #1002=FACE_BOUND('',#5036,.T.); #1003=FACE_BOUND('',#5037,.T.); #1004=FACE_BOUND('',#5046,.T.); #1005=FACE_BOUND('',#5047,.T.); #1006=FACE_BOUND('',#5048,.T.); #1007=FACE_BOUND('',#5049,.T.); #1008=FACE_BOUND('',#5148,.T.); #1009=FACE_BOUND('',#5168,.T.); #1010=FACE_BOUND('',#5170,.T.); #1011=FACE_BOUND('',#5172,.T.); #1012=FACE_BOUND('',#5174,.T.); #1013=FACE_BOUND('',#5356,.T.); #1014=FACE_BOUND('',#5357,.T.); #1015=FACE_BOUND('',#5358,.T.); #1016=FACE_BOUND('',#5360,.T.); #1017=FACE_BOUND('',#5361,.T.); #1018=FACE_BOUND('',#5362,.T.); #1019=FACE_BOUND('',#5444,.T.); #1020=FACE_BOUND('',#5454,.T.); #1021=FACE_BOUND('',#5469,.T.); #1022=FACE_BOUND('',#5471,.T.); #1023=FACE_BOUND('',#5488,.T.); #1024=FACE_BOUND('',#5523,.T.); #1025=FACE_BOUND('',#5524,.T.); #1026=FACE_BOUND('',#5526,.T.); #1027=FACE_BOUND('',#5527,.T.); #1028=FACE_BOUND('',#5528,.T.); #1029=FACE_BOUND('',#5529,.T.); #1030=FACE_BOUND('',#5567,.T.); #1031=FACE_BOUND('',#5577,.T.); #1032=FACE_BOUND('',#5737,.T.); #1033=FACE_BOUND('',#5738,.T.); #1034=FACE_BOUND('',#5739,.T.); #1035=FACE_BOUND('',#5740,.T.); #1036=FACE_BOUND('',#5741,.T.); #1037=FACE_BOUND('',#5742,.T.); #1038=FACE_BOUND('',#5743,.T.); #1039=FACE_BOUND('',#5744,.T.); #1040=FACE_BOUND('',#5745,.T.); #1041=FACE_BOUND('',#5746,.T.); #1042=FACE_BOUND('',#5747,.T.); #1043=FACE_BOUND('',#5748,.T.); #1044=FACE_BOUND('',#5749,.T.); #1045=FACE_BOUND('',#5750,.T.); #1046=FACE_BOUND('',#5751,.T.); #1047=FACE_BOUND('',#5752,.T.); #1048=FACE_BOUND('',#5753,.T.); #1049=FACE_BOUND('',#5754,.T.); #1050=FACE_BOUND('',#5774,.T.); #1051=FACE_BOUND('',#5846,.T.); #1052=FACE_BOUND('',#5854,.T.); #1053=FACE_BOUND('',#5855,.T.); #1054=FACE_BOUND('',#5869,.T.); #1055=FACE_BOUND('',#5870,.T.); #1056=FACE_BOUND('',#5912,.T.); #1057=FACE_BOUND('',#5913,.T.); #1058=FACE_BOUND('',#5914,.T.); #1059=FACE_BOUND('',#5915,.T.); #1060=FACE_BOUND('',#5919,.T.); #1061=FACE_BOUND('',#5921,.T.); #1062=FACE_BOUND('',#5922,.T.); #1063=FACE_BOUND('',#5924,.T.); #1064=FACE_BOUND('',#5926,.T.); #1065=PLANE('',#33899); #1066=PLANE('',#33900); #1067=PLANE('',#33901); #1068=PLANE('',#33905); #1069=PLANE('',#33909); #1070=PLANE('',#33911); #1071=PLANE('',#33912); #1072=PLANE('',#33914); #1073=PLANE('',#33916); #1074=PLANE('',#33917); #1075=PLANE('',#33918); #1076=PLANE('',#33919); #1077=PLANE('',#33920); #1078=PLANE('',#33921); #1079=PLANE('',#33922); #1080=PLANE('',#33923); #1081=PLANE('',#33924); #1082=PLANE('',#33925); #1083=PLANE('',#33926); #1084=PLANE('',#33927); #1085=PLANE('',#33928); #1086=PLANE('',#33929); #1087=PLANE('',#33930); #1088=PLANE('',#33931); #1089=PLANE('',#33932); #1090=PLANE('',#33933); #1091=PLANE('',#33938); #1092=PLANE('',#33939); #1093=PLANE('',#33940); #1094=PLANE('',#33941); #1095=PLANE('',#33942); #1096=PLANE('',#33943); #1097=PLANE('',#33944); #1098=PLANE('',#33949); #1099=PLANE('',#33950); #1100=PLANE('',#33956); #1101=PLANE('',#33961); #1102=PLANE('',#33964); #1103=PLANE('',#33968); #1104=PLANE('',#33974); #1105=PLANE('',#33975); #1106=PLANE('',#33976); #1107=PLANE('',#33977); #1108=PLANE('',#33978); #1109=PLANE('',#33980); #1110=PLANE('',#33981); #1111=PLANE('',#33982); #1112=PLANE('',#33983); #1113=PLANE('',#33985); #1114=PLANE('',#33987); #1115=PLANE('',#33988); #1116=PLANE('',#33989); #1117=PLANE('',#33991); #1118=PLANE('',#33992); #1119=PLANE('',#33993); #1120=PLANE('',#33994); #1121=PLANE('',#33995); #1122=PLANE('',#33996); #1123=PLANE('',#33997); #1124=PLANE('',#33998); #1125=PLANE('',#33999); #1126=PLANE('',#34000); #1127=PLANE('',#34001); #1128=PLANE('',#34002); #1129=PLANE('',#34003); #1130=PLANE('',#34004); #1131=PLANE('',#34006); #1132=PLANE('',#34008); #1133=PLANE('',#34009); #1134=PLANE('',#34010); #1135=PLANE('',#34012); #1136=PLANE('',#34014); #1137=PLANE('',#34016); #1138=PLANE('',#34017); #1139=PLANE('',#34018); #1140=PLANE('',#34020); #1141=PLANE('',#34021); #1142=PLANE('',#34022); #1143=PLANE('',#34023); #1144=PLANE('',#34024); #1145=PLANE('',#34025); #1146=PLANE('',#34026); #1147=PLANE('',#34029); #1148=PLANE('',#34030); #1149=PLANE('',#34031); #1150=PLANE('',#34032); #1151=PLANE('',#34037); #1152=PLANE('',#34042); #1153=PLANE('',#34045); #1154=PLANE('',#34049); #1155=PLANE('',#34055); #1156=PLANE('',#34056); #1157=PLANE('',#34061); #1158=PLANE('',#34066); #1159=PLANE('',#34069); #1160=PLANE('',#34073); #1161=PLANE('',#34079); #1162=PLANE('',#34080); #1163=PLANE('',#34081); #1164=PLANE('',#34082); #1165=PLANE('',#34083); #1166=PLANE('',#34084); #1167=PLANE('',#34085); #1168=PLANE('',#34087); #1169=PLANE('',#34089); #1170=PLANE('',#34090); #1171=PLANE('',#34091); #1172=PLANE('',#34093); #1173=PLANE('',#34095); #1174=PLANE('',#34097); #1175=PLANE('',#34098); #1176=PLANE('',#34099); #1177=PLANE('',#34101); #1178=PLANE('',#34103); #1179=PLANE('',#34105); #1180=PLANE('',#34106); #1181=PLANE('',#34107); #1182=PLANE('',#34109); #1183=PLANE('',#34111); #1184=PLANE('',#34113); #1185=PLANE('',#34114); #1186=PLANE('',#34115); #1187=PLANE('',#34117); #1188=PLANE('',#34120); #1189=PLANE('',#34121); #1190=PLANE('',#34122); #1191=PLANE('',#34123); #1192=PLANE('',#34153); #1193=PLANE('',#34183); #1194=PLANE('',#34347); #1195=PLANE('',#34354); #1196=PLANE('',#34355); #1197=PLANE('',#34356); #1198=PLANE('',#34357); #1199=PLANE('',#34358); #1200=PLANE('',#34359); #1201=PLANE('',#34360); #1202=PLANE('',#34361); #1203=PLANE('',#34362); #1204=PLANE('',#34363); #1205=PLANE('',#34364); #1206=PLANE('',#34365); #1207=PLANE('',#34366); #1208=PLANE('',#34367); #1209=PLANE('',#34368); #1210=PLANE('',#34369); #1211=PLANE('',#34370); #1212=PLANE('',#34371); #1213=PLANE('',#34372); #1214=PLANE('',#34373); #1215=PLANE('',#34374); #1216=PLANE('',#34375); #1217=PLANE('',#34379); #1218=PLANE('',#34383); #1219=PLANE('',#34386); #1220=PLANE('',#34389); #1221=PLANE('',#34393); #1222=PLANE('',#34397); #1223=PLANE('',#34401); #1224=PLANE('',#34405); #1225=PLANE('',#34408); #1226=PLANE('',#34411); #1227=PLANE('',#34415); #1228=PLANE('',#34419); #1229=PLANE('',#34423); #1230=PLANE('',#34427); #1231=PLANE('',#34431); #1232=PLANE('',#34435); #1233=PLANE('',#34439); #1234=PLANE('',#34443); #1235=PLANE('',#34446); #1236=PLANE('',#34449); #1237=PLANE('',#34453); #1238=PLANE('',#34457); #1239=PLANE('',#34461); #1240=PLANE('',#34465); #1241=PLANE('',#34469); #1242=PLANE('',#34473); #1243=PLANE('',#34477); #1244=PLANE('',#34481); #1245=PLANE('',#34485); #1246=PLANE('',#34489); #1247=PLANE('',#34493); #1248=PLANE('',#34497); #1249=PLANE('',#34501); #1250=PLANE('',#34505); #1251=PLANE('',#34509); #1252=PLANE('',#34513); #1253=PLANE('',#34516); #1254=PLANE('',#34519); #1255=PLANE('',#34523); #1256=PLANE('',#34527); #1257=PLANE('',#34529); #1258=PLANE('',#34531); #1259=PLANE('',#34532); #1260=PLANE('',#34534); #1261=PLANE('',#34536); #1262=PLANE('',#34538); #1263=PLANE('',#34540); #1264=PLANE('',#34541); #1265=PLANE('',#34542); #1266=PLANE('',#34543); #1267=PLANE('',#34544); #1268=PLANE('',#34545); #1269=PLANE('',#34546); #1270=PLANE('',#34547); #1271=PLANE('',#34548); #1272=PLANE('',#34549); #1273=PLANE('',#34550); #1274=PLANE('',#34551); #1275=PLANE('',#34552); #1276=PLANE('',#34553); #1277=PLANE('',#34554); #1278=PLANE('',#34555); #1279=PLANE('',#34556); #1280=PLANE('',#34557); #1281=PLANE('',#34558); #1282=PLANE('',#34559); #1283=PLANE('',#34560); #1284=PLANE('',#34561); #1285=PLANE('',#34562); #1286=PLANE('',#34563); #1287=PLANE('',#34564); #1288=PLANE('',#34565); #1289=PLANE('',#34566); #1290=PLANE('',#34567); #1291=PLANE('',#34568); #1292=PLANE('',#34569); #1293=PLANE('',#34570); #1294=PLANE('',#34571); #1295=PLANE('',#34572); #1296=PLANE('',#34573); #1297=PLANE('',#34574); #1298=PLANE('',#34575); #1299=PLANE('',#34576); #1300=PLANE('',#34577); #1301=PLANE('',#34578); #1302=PLANE('',#34579); #1303=PLANE('',#34658); #1304=PLANE('',#34659); #1305=PLANE('',#34666); #1306=PLANE('',#34667); #1307=PLANE('',#34668); #1308=PLANE('',#34669); #1309=PLANE('',#34670); #1310=PLANE('',#34671); #1311=PLANE('',#34672); #1312=PLANE('',#34673); #1313=PLANE('',#34674); #1314=PLANE('',#34675); #1315=PLANE('',#34676); #1316=PLANE('',#34677); #1317=PLANE('',#34678); #1318=PLANE('',#34679); #1319=PLANE('',#34680); #1320=PLANE('',#34681); #1321=PLANE('',#34682); #1322=PLANE('',#34683); #1323=PLANE('',#34684); #1324=PLANE('',#34685); #1325=PLANE('',#34686); #1326=PLANE('',#34687); #1327=PLANE('',#34690); #1328=PLANE('',#34693); #1329=PLANE('',#34697); #1330=PLANE('',#34701); #1331=PLANE('',#34704); #1332=PLANE('',#34707); #1333=PLANE('',#34710); #1334=PLANE('',#34713); #1335=PLANE('',#34717); #1336=PLANE('',#34721); #1337=PLANE('',#34724); #1338=PLANE('',#34727); #1339=PLANE('',#34730); #1340=PLANE('',#34733); #1341=PLANE('',#34736); #1342=PLANE('',#34739); #1343=PLANE('',#34742); #1344=PLANE('',#34745); #1345=PLANE('',#34749); #1346=PLANE('',#34753); #1347=PLANE('',#34756); #1348=PLANE('',#34759); #1349=PLANE('',#34762); #1350=PLANE('',#34765); #1351=PLANE('',#34768); #1352=PLANE('',#34771); #1353=PLANE('',#34774); #1354=PLANE('',#34777); #1355=PLANE('',#34780); #1356=PLANE('',#34783); #1357=PLANE('',#34786); #1358=PLANE('',#34789); #1359=PLANE('',#34792); #1360=PLANE('',#34795); #1361=PLANE('',#34798); #1362=PLANE('',#34801); #1363=PLANE('',#34805); #1364=PLANE('',#34809); #1365=PLANE('',#34812); #1366=PLANE('',#34815); #1367=PLANE('',#34817); #1368=PLANE('',#34819); #1369=PLANE('',#34820); #1370=PLANE('',#34823); #1371=PLANE('',#34826); #1372=PLANE('',#34828); #1373=PLANE('',#34830); #1374=PLANE('',#34832); #1375=PLANE('',#34834); #1376=PLANE('',#34835); #1377=PLANE('',#34836); #1378=PLANE('',#34837); #1379=PLANE('',#34838); #1380=PLANE('',#34839); #1381=PLANE('',#34840); #1382=PLANE('',#34841); #1383=PLANE('',#34842); #1384=PLANE('',#34843); #1385=PLANE('',#34844); #1386=PLANE('',#34845); #1387=PLANE('',#34846); #1388=PLANE('',#34847); #1389=PLANE('',#34848); #1390=PLANE('',#34849); #1391=PLANE('',#34850); #1392=PLANE('',#34851); #1393=PLANE('',#34852); #1394=PLANE('',#34853); #1395=PLANE('',#34854); #1396=PLANE('',#34855); #1397=PLANE('',#34856); #1398=PLANE('',#34857); #1399=PLANE('',#34858); #1400=PLANE('',#34859); #1401=PLANE('',#34860); #1402=PLANE('',#34861); #1403=PLANE('',#34862); #1404=PLANE('',#34863); #1405=PLANE('',#34864); #1406=PLANE('',#34865); #1407=PLANE('',#34866); #1408=PLANE('',#34867); #1409=PLANE('',#34868); #1410=PLANE('',#34869); #1411=PLANE('',#34870); #1412=PLANE('',#34871); #1413=PLANE('',#34872); #1414=PLANE('',#34873); #1415=PLANE('',#34874); #1416=PLANE('',#34875); #1417=PLANE('',#34876); #1418=PLANE('',#34877); #1419=PLANE('',#34878); #1420=PLANE('',#34879); #1421=PLANE('',#34880); #1422=PLANE('',#34881); #1423=PLANE('',#34902); #1424=PLANE('',#34909); #1425=PLANE('',#34913); #1426=PLANE('',#34917); #1427=PLANE('',#34921); #1428=PLANE('',#34925); #1429=PLANE('',#34929); #1430=PLANE('',#34933); #1431=PLANE('',#34934); #1432=PLANE('',#34941); #1433=PLANE('',#34943); #1434=PLANE('',#34945); #1435=PLANE('',#34947); #1436=PLANE('',#34949); #1437=PLANE('',#34951); #1438=PLANE('',#34953); #1439=PLANE('',#34956); #1440=PLANE('',#34959); #1441=PLANE('',#34961); #1442=PLANE('',#34962); #1443=PLANE('',#34963); #1444=PLANE('',#34965); #1445=PLANE('',#34966); #1446=PLANE('',#34967); #1447=PLANE('',#34970); #1448=PLANE('',#34973); #1449=PLANE('',#34975); #1450=PLANE('',#34976); #1451=PLANE('',#34977); #1452=PLANE('',#34979); #1453=PLANE('',#34980); #1454=PLANE('',#34981); #1455=PLANE('',#34984); #1456=PLANE('',#34987); #1457=PLANE('',#34989); #1458=PLANE('',#34990); #1459=PLANE('',#34991); #1460=PLANE('',#34993); #1461=PLANE('',#34994); #1462=PLANE('',#34995); #1463=PLANE('',#34998); #1464=PLANE('',#35001); #1465=PLANE('',#35003); #1466=PLANE('',#35004); #1467=PLANE('',#35005); #1468=PLANE('',#35007); #1469=PLANE('',#35008); #1470=PLANE('',#35021); #1471=PLANE('',#35022); #1472=PLANE('',#35025); #1473=PLANE('',#35028); #1474=PLANE('',#35029); #1475=PLANE('',#35030); #1476=PLANE('',#35031); #1477=PLANE('',#35032); #1478=PLANE('',#35033); #1479=PLANE('',#35034); #1480=PLANE('',#35035); #1481=PLANE('',#35036); #1482=PLANE('',#35037); #1483=PLANE('',#35038); #1484=PLANE('',#35039); #1485=PLANE('',#35040); #1486=PLANE('',#35041); #1487=PLANE('',#35042); #1488=PLANE('',#35043); #1489=PLANE('',#35044); #1490=PLANE('',#35045); #1491=PLANE('',#35046); #1492=PLANE('',#35047); #1493=PLANE('',#35048); #1494=PLANE('',#35049); #1495=PLANE('',#35050); #1496=PLANE('',#35051); #1497=PLANE('',#35052); #1498=PLANE('',#35053); #1499=PLANE('',#35054); #1500=PLANE('',#35055); #1501=PLANE('',#35056); #1502=PLANE('',#35057); #1503=PLANE('',#35058); #1504=PLANE('',#35059); #1505=PLANE('',#35060); #1506=PLANE('',#35061); #1507=PLANE('',#35062); #1508=PLANE('',#35063); #1509=PLANE('',#35064); #1510=PLANE('',#35065); #1511=PLANE('',#35066); #1512=PLANE('',#35067); #1513=PLANE('',#35068); #1514=PLANE('',#35069); #1515=PLANE('',#35070); #1516=PLANE('',#35071); #1517=PLANE('',#35072); #1518=PLANE('',#35073); #1519=PLANE('',#35074); #1520=PLANE('',#35075); #1521=PLANE('',#35076); #1522=PLANE('',#35077); #1523=PLANE('',#35078); #1524=PLANE('',#35079); #1525=PLANE('',#35080); #1526=PLANE('',#35081); #1527=PLANE('',#35082); #1528=PLANE('',#35083); #1529=PLANE('',#35084); #1530=PLANE('',#35085); #1531=PLANE('',#35086); #1532=PLANE('',#35087); #1533=PLANE('',#35088); #1534=PLANE('',#35089); #1535=PLANE('',#35090); #1536=PLANE('',#35091); #1537=PLANE('',#35092); #1538=PLANE('',#35093); #1539=PLANE('',#35094); #1540=PLANE('',#35095); #1541=PLANE('',#35096); #1542=PLANE('',#35097); #1543=PLANE('',#35098); #1544=PLANE('',#35099); #1545=PLANE('',#35100); #1546=PLANE('',#35101); #1547=PLANE('',#35102); #1548=PLANE('',#35103); #1549=PLANE('',#35104); #1550=PLANE('',#35105); #1551=PLANE('',#35110); #1552=PLANE('',#35111); #1553=PLANE('',#35112); #1554=PLANE('',#35113); #1555=PLANE('',#35114); #1556=PLANE('',#35115); #1557=PLANE('',#35116); #1558=PLANE('',#35117); #1559=PLANE('',#35118); #1560=PLANE('',#35119); #1561=PLANE('',#35120); #1562=PLANE('',#35121); #1563=PLANE('',#35122); #1564=PLANE('',#35123); #1565=PLANE('',#35124); #1566=PLANE('',#35125); #1567=PLANE('',#35133); #1568=PLANE('',#35134); #1569=PLANE('',#35135); #1570=PLANE('',#35136); #1571=PLANE('',#35137); #1572=PLANE('',#35138); #1573=PLANE('',#35139); #1574=PLANE('',#35140); #1575=PLANE('',#35141); #1576=PLANE('',#35142); #1577=PLANE('',#35153); #1578=PLANE('',#35155); #1579=PLANE('',#35157); #1580=PLANE('',#35159); #1581=PLANE('',#35160); #1582=PLANE('',#35167); #1583=PLANE('',#35168); #1584=PLANE('',#35169); #1585=PLANE('',#35170); #1586=PLANE('',#35173); #1587=PLANE('',#35177); #1588=PLANE('',#35181); #1589=PLANE('',#35182); #1590=PLANE('',#35183); #1591=PLANE('',#35185); #1592=PLANE('',#35186); #1593=PLANE('',#35187); #1594=PLANE('',#35188); #1595=PLANE('',#35189); #1596=PLANE('',#35190); #1597=PLANE('',#35191); #1598=PLANE('',#35192); #1599=PLANE('',#35193); #1600=PLANE('',#35194); #1601=PLANE('',#35195); #1602=PLANE('',#35196); #1603=PLANE('',#35197); #1604=PLANE('',#35198); #1605=PLANE('',#35199); #1606=PLANE('',#35200); #1607=PLANE('',#35201); #1608=PLANE('',#35202); #1609=PLANE('',#35203); #1610=PLANE('',#35211); #1611=PLANE('',#35212); #1612=PLANE('',#35213); #1613=PLANE('',#35214); #1614=PLANE('',#35217); #1615=PLANE('',#35227); #1616=PLANE('',#35229); #1617=PLANE('',#35231); #1618=PLANE('',#35232); #1619=PLANE('',#35239); #1620=PLANE('',#35240); #1621=PLANE('',#35241); #1622=PLANE('',#35242); #1623=PLANE('',#35245); #1624=PLANE('',#35249); #1625=PLANE('',#35253); #1626=PLANE('',#35254); #1627=PLANE('',#35255); #1628=PLANE('',#35259); #1629=PLANE('',#35262); #1630=PLANE('',#35265); #1631=PLANE('',#35269); #1632=PLANE('',#35273); #1633=PLANE('',#35275); #1634=PLANE('',#35278); #1635=PLANE('',#35280); #1636=PLANE('',#35281); #1637=PLANE('',#35282); #1638=PLANE('',#35283); #1639=PLANE('',#35296); #1640=PLANE('',#35301); #1641=PLANE('',#35309); #1642=PLANE('',#35310); #1643=PLANE('',#35315); #1644=PLANE('',#35320); #1645=PLANE('',#35322); #1646=PLANE('',#35325); #1647=PLANE('',#35330); #1648=PLANE('',#35332); #1649=PLANE('',#35334); #1650=PLANE('',#35336); #1651=PLANE('',#35338); #1652=PLANE('',#35341); #1653=PLANE('',#35353); #1654=PLANE('',#35355); #1655=PLANE('',#35357); #1656=PLANE('',#35358); #1657=PLANE('',#35361); #1658=PLANE('',#35369); #1659=PLANE('',#35373); #1660=PLANE('',#35376); #1661=PLANE('',#35381); #1662=PLANE('',#35382); #1663=PLANE('',#35384); #1664=PLANE('',#35387); #1665=PLANE('',#35389); #1666=PLANE('',#35391); #1667=PLANE('',#35392); #1668=PLANE('',#35394); #1669=PLANE('',#35402); #1670=PLANE('',#35406); #1671=PLANE('',#35407); #1672=PLANE('',#35413); #1673=PLANE('',#35417); #1674=PLANE('',#35419); #1675=PLANE('',#35421); #1676=PLANE('',#35428); #1677=PLANE('',#35430); #1678=PLANE('',#35433); #1679=PLANE('',#35436); #1680=PLANE('',#35439); #1681=PLANE('',#35444); #1682=PLANE('',#35447); #1683=PLANE('',#35450); #1684=PLANE('',#35451); #1685=PLANE('',#35454); #1686=PLANE('',#35460); #1687=PLANE('',#35478); #1688=PLANE('',#35481); #1689=PLANE('',#35484); #1690=PLANE('',#35485); #1691=PLANE('',#35488); #1692=PLANE('',#35502); #1693=PLANE('',#35506); #1694=PLANE('',#35510); #1695=PLANE('',#35512); #1696=PLANE('',#35513); #1697=PLANE('',#35514); #1698=PLANE('',#35515); #1699=PLANE('',#35518); #1700=PLANE('',#35523); #1701=PLANE('',#35524); #1702=PLANE('',#35526); #1703=PLANE('',#35528); #1704=PLANE('',#35529); #1705=PLANE('',#35531); #1706=PLANE('',#35533); #1707=PLANE('',#35534); #1708=PLANE('',#35536); #1709=PLANE('',#35539); #1710=PLANE('',#35543); #1711=PLANE('',#35546); #1712=PLANE('',#35547); #1713=PLANE('',#35548); #1714=PLANE('',#35549); #1715=PLANE('',#35552); #1716=PLANE('',#35557); #1717=PLANE('',#35559); #1718=PLANE('',#35561); #1719=PLANE('',#35562); #1720=PLANE('',#35563); #1721=PLANE('',#35565); #1722=PLANE('',#35567); #1723=PLANE('',#35569); #1724=PLANE('',#35571); #1725=PLANE('',#35574); #1726=PLANE('',#35577); #1727=PLANE('',#35578); #1728=PLANE('',#35581); #1729=PLANE('',#35583); #1730=PLANE('',#35587); #1731=PLANE('',#35590); #1732=PLANE('',#35594); #1733=PLANE('',#35598); #1734=PLANE('',#35599); #1735=PLANE('',#35600); #1736=PLANE('',#35601); #1737=PLANE('',#35602); #1738=PLANE('',#35603); #1739=PLANE('',#35604); #1740=PLANE('',#35605); #1741=PLANE('',#35606); #1742=PLANE('',#35607); #1743=PLANE('',#35608); #1744=PLANE('',#35609); #1745=PLANE('',#35610); #1746=PLANE('',#35611); #1747=PLANE('',#35612); #1748=PLANE('',#35613); #1749=PLANE('',#35614); #1750=PLANE('',#35615); #1751=PLANE('',#35616); #1752=PLANE('',#35617); #1753=PLANE('',#35618); #1754=PLANE('',#35619); #1755=PLANE('',#35620); #1756=PLANE('',#35621); #1757=PLANE('',#35622); #1758=PLANE('',#35623); #1759=PLANE('',#35624); #1760=PLANE('',#35625); #1761=PLANE('',#35626); #1762=PLANE('',#35627); #1763=PLANE('',#35628); #1764=PLANE('',#35629); #1765=PLANE('',#35630); #1766=PLANE('',#35639); #1767=PLANE('',#35640); #1768=PLANE('',#35641); #1769=PLANE('',#35642); #1770=PLANE('',#35643); #1771=PLANE('',#35644); #1772=PLANE('',#35645); #1773=PLANE('',#35646); #1774=PLANE('',#35647); #1775=PLANE('',#35648); #1776=PLANE('',#35649); #1777=PLANE('',#35650); #1778=PLANE('',#35651); #1779=PLANE('',#35652); #1780=PLANE('',#35653); #1781=PLANE('',#35654); #1782=PLANE('',#35655); #1783=PLANE('',#35656); #1784=PLANE('',#35657); #1785=PLANE('',#35658); #1786=PLANE('',#35659); #1787=PLANE('',#35660); #1788=PLANE('',#35661); #1789=PLANE('',#35662); #1790=PLANE('',#35663); #1791=PLANE('',#35664); #1792=PLANE('',#35665); #1793=PLANE('',#35666); #1794=PLANE('',#35667); #1795=PLANE('',#35668); #1796=PLANE('',#35671); #1797=PLANE('',#35674); #1798=PLANE('',#35677); #1799=PLANE('',#35680); #1800=PLANE('',#35681); #1801=PLANE('',#35682); #1802=PLANE('',#35683); #1803=PLANE('',#35684); #1804=PLANE('',#35685); #1805=PLANE('',#35686); #1806=PLANE('',#35692); #1807=PLANE('',#35694); #1808=PLANE('',#35696); #1809=PLANE('',#35698); #1810=PLANE('',#35699); #1811=PLANE('',#35708); #1812=PLANE('',#35709); #1813=PLANE('',#35718); #1814=PLANE('',#35720); #1815=PLANE('',#35722); #1816=PLANE('',#35724); #1817=PLANE('',#35726); #1818=PLANE('',#35727); #1819=PLANE('',#35728); #1820=PLANE('',#35729); #1821=PLANE('',#35730); #1822=PLANE('',#35731); #1823=PLANE('',#35732); #1824=PLANE('',#35733); #1825=PLANE('',#35734); #1826=PLANE('',#35735); #1827=PLANE('',#35736); #1828=PLANE('',#35737); #1829=PLANE('',#35738); #1830=PLANE('',#35739); #1831=PLANE('',#35740); #1832=PLANE('',#35741); #1833=PLANE('',#35742); #1834=PLANE('',#35751); #1835=PLANE('',#35752); #1836=PLANE('',#35761); #1837=PLANE('',#35763); #1838=PLANE('',#35765); #1839=PLANE('',#35767); #1840=PLANE('',#35769); #1841=PLANE('',#35770); #1842=PLANE('',#35771); #1843=PLANE('',#35772); #1844=PLANE('',#35773); #1845=PLANE('',#35774); #1846=PLANE('',#35776); #1847=PLANE('',#35778); #1848=PLANE('',#35780); #1849=PLANE('',#35782); #1850=PLANE('',#35783); #1851=PLANE('',#35784); #1852=PLANE('',#35785); #1853=PLANE('',#35786); #1854=PLANE('',#35787); #1855=PLANE('',#35788); #1856=PLANE('',#35789); #1857=PLANE('',#35790); #1858=PLANE('',#35791); #1859=PLANE('',#35792); #1860=PLANE('',#35801); #1861=PLANE('',#35802); #1862=PLANE('',#35811); #1863=PLANE('',#35813); #1864=PLANE('',#35815); #1865=PLANE('',#35817); #1866=PLANE('',#35819); #1867=PLANE('',#35820); #1868=PLANE('',#35821); #1869=PLANE('',#35822); #1870=PLANE('',#35823); #1871=PLANE('',#35824); #1872=PLANE('',#35826); #1873=PLANE('',#35828); #1874=PLANE('',#35830); #1875=PLANE('',#35832); #1876=PLANE('',#35833); #1877=PLANE('',#35834); #1878=PLANE('',#35835); #1879=PLANE('',#35836); #1880=PLANE('',#35837); #1881=PLANE('',#35838); #1882=PLANE('',#35839); #1883=PLANE('',#35840); #1884=PLANE('',#35841); #1885=PLANE('',#35842); #1886=PLANE('',#35843); #1887=PLANE('',#35844); #1888=PLANE('',#35845); #1889=PLANE('',#35846); #1890=PLANE('',#35847); #1891=PLANE('',#35848); #1892=PLANE('',#35850); #1893=PLANE('',#35852); #1894=PLANE('',#35854); #1895=PLANE('',#35856); #1896=PLANE('',#35857); #1897=PLANE('',#35859); #1898=PLANE('',#35860); #1899=PLANE('',#35861); #1900=PLANE('',#35865); #1901=PLANE('',#35868); #1902=PLANE('',#35872); #1903=PLANE('',#35876); #1904=PLANE('',#35878); #1905=PLANE('',#35882); #1906=PLANE('',#35883); #1907=PLANE('',#35884); #1908=PLANE('',#35889); #1909=PLANE('',#35890); #1910=PLANE('',#35891); #1911=PLANE('',#35892); #1912=PLANE('',#35893); #1913=PLANE('',#35894); #1914=PLANE('',#35895); #1915=PLANE('',#35896); #1916=PLANE('',#35897); #1917=PLANE('',#35898); #1918=PLANE('',#35899); #1919=PLANE('',#35900); #1920=PLANE('',#35901); #1921=PLANE('',#35902); #1922=PLANE('',#35903); #1923=PLANE('',#35904); #1924=PLANE('',#35905); #1925=PLANE('',#35906); #1926=PLANE('',#35907); #1927=PLANE('',#35908); #1928=PLANE('',#35909); #1929=PLANE('',#35910); #1930=PLANE('',#35911); #1931=PLANE('',#35912); #1932=PLANE('',#35913); #1933=PLANE('',#35914); #1934=PLANE('',#35915); #1935=PLANE('',#35916); #1936=PLANE('',#35917); #1937=PLANE('',#35918); #1938=PLANE('',#35919); #1939=PLANE('',#35920); #1940=PLANE('',#35921); #1941=PLANE('',#35922); #1942=PLANE('',#35923); #1943=PLANE('',#35924); #1944=PLANE('',#35925); #1945=PLANE('',#35926); #1946=PLANE('',#35927); #1947=PLANE('',#35928); #1948=PLANE('',#35929); #1949=PLANE('',#35930); #1950=PLANE('',#35931); #1951=PLANE('',#35932); #1952=PLANE('',#35933); #1953=PLANE('',#35934); #1954=PLANE('',#35935); #1955=PLANE('',#35936); #1956=PLANE('',#35937); #1957=PLANE('',#35938); #1958=PLANE('',#35939); #1959=PLANE('',#35940); #1960=PLANE('',#35941); #1961=PLANE('',#35942); #1962=PLANE('',#35943); #1963=PLANE('',#35944); #1964=PLANE('',#35945); #1965=PLANE('',#35946); #1966=PLANE('',#35947); #1967=PLANE('',#35948); #1968=PLANE('',#35949); #1969=PLANE('',#35950); #1970=PLANE('',#35951); #1971=PLANE('',#35952); #1972=PLANE('',#35953); #1973=PLANE('',#35954); #1974=PLANE('',#35955); #1975=PLANE('',#35956); #1976=PLANE('',#35957); #1977=PLANE('',#35958); #1978=PLANE('',#35959); #1979=PLANE('',#35960); #1980=PLANE('',#35961); #1981=PLANE('',#35962); #1982=PLANE('',#35963); #1983=PLANE('',#35964); #1984=PLANE('',#35969); #1985=PLANE('',#35974); #1986=PLANE('',#35979); #1987=PLANE('',#35980); #1988=PLANE('',#35985); #1989=PLANE('',#35986); #1990=PLANE('',#35993); #1991=PLANE('',#35996); #1992=PLANE('',#35999); #1993=PLANE('',#36002); #1994=PLANE('',#36003); #1995=PLANE('',#36008); #1996=PLANE('',#36013); #1997=PLANE('',#36014); #1998=PLANE('',#36019); #1999=PLANE('',#36020); #2000=PLANE('',#36024); #2001=PLANE('',#36027); #2002=PLANE('',#36028); #2003=PLANE('',#36029); #2004=PLANE('',#36030); #2005=PLANE('',#36037); #2006=PLANE('',#36042); #2007=PLANE('',#36043); #2008=PLANE('',#36044); #2009=PLANE('',#36045); #2010=PLANE('',#36046); #2011=PLANE('',#36047); #2012=PLANE('',#36048); #2013=PLANE('',#36049); #2014=PLANE('',#36050); #2015=PLANE('',#36051); #2016=PLANE('',#36052); #2017=PLANE('',#36053); #2018=PLANE('',#36054); #2019=PLANE('',#36055); #2020=PLANE('',#36056); #2021=PLANE('',#36057); #2022=PLANE('',#36058); #2023=PLANE('',#36059); #2024=PLANE('',#36060); #2025=PLANE('',#36061); #2026=PLANE('',#36062); #2027=PLANE('',#36063); #2028=PLANE('',#36064); #2029=PLANE('',#36065); #2030=PLANE('',#36066); #2031=PLANE('',#36067); #2032=PLANE('',#36068); #2033=PLANE('',#36073); #2034=PLANE('',#36074); #2035=PLANE('',#36075); #2036=PLANE('',#36076); #2037=PLANE('',#36077); #2038=PLANE('',#36078); #2039=PLANE('',#36079); #2040=PLANE('',#36080); #2041=PLANE('',#36081); #2042=PLANE('',#36082); #2043=PLANE('',#36083); #2044=PLANE('',#36084); #2045=PLANE('',#36085); #2046=PLANE('',#36086); #2047=PLANE('',#36087); #2048=PLANE('',#36088); #2049=PLANE('',#36089); #2050=PLANE('',#36090); #2051=PLANE('',#36091); #2052=PLANE('',#36092); #2053=PLANE('',#36093); #2054=PLANE('',#36094); #2055=PLANE('',#36095); #2056=PLANE('',#36096); #2057=PLANE('',#36097); #2058=PLANE('',#36098); #2059=PLANE('',#36099); #2060=PLANE('',#36100); #2061=PLANE('',#36101); #2062=PLANE('',#36102); #2063=PLANE('',#36103); #2064=PLANE('',#36104); #2065=PLANE('',#36105); #2066=PLANE('',#36106); #2067=PLANE('',#36107); #2068=PLANE('',#36108); #2069=PLANE('',#36109); #2070=PLANE('',#36110); #2071=PLANE('',#36111); #2072=PLANE('',#36112); #2073=PLANE('',#36113); #2074=PLANE('',#36114); #2075=PLANE('',#36115); #2076=PLANE('',#36116); #2077=PLANE('',#36117); #2078=PLANE('',#36118); #2079=PLANE('',#36119); #2080=PLANE('',#36120); #2081=PLANE('',#36121); #2082=PLANE('',#36122); #2083=PLANE('',#36123); #2084=PLANE('',#36124); #2085=PLANE('',#36125); #2086=PLANE('',#36126); #2087=PLANE('',#36127); #2088=PLANE('',#36128); #2089=PLANE('',#36129); #2090=PLANE('',#36130); #2091=PLANE('',#36131); #2092=PLANE('',#36132); #2093=PLANE('',#36133); #2094=PLANE('',#36134); #2095=PLANE('',#36135); #2096=PLANE('',#36136); #2097=PLANE('',#36137); #2098=PLANE('',#36138); #2099=PLANE('',#36139); #2100=PLANE('',#36140); #2101=PLANE('',#36141); #2102=PLANE('',#36142); #2103=PLANE('',#36143); #2104=PLANE('',#36144); #2105=PLANE('',#36145); #2106=PLANE('',#36146); #2107=PLANE('',#36147); #2108=PLANE('',#36148); #2109=PLANE('',#36149); #2110=PLANE('',#36150); #2111=PLANE('',#36151); #2112=PLANE('',#36152); #2113=PLANE('',#36153); #2114=PLANE('',#36154); #2115=PLANE('',#36155); #2116=PLANE('',#36156); #2117=PLANE('',#36157); #2118=PLANE('',#36158); #2119=PLANE('',#36159); #2120=PLANE('',#36160); #2121=PLANE('',#36161); #2122=PLANE('',#36162); #2123=PLANE('',#36163); #2124=PLANE('',#36164); #2125=PLANE('',#36165); #2126=PLANE('',#36166); #2127=PLANE('',#36167); #2128=PLANE('',#36168); #2129=PLANE('',#36169); #2130=PLANE('',#36170); #2131=PLANE('',#36171); #2132=PLANE('',#36172); #2133=PLANE('',#36173); #2134=PLANE('',#36174); #2135=PLANE('',#36175); #2136=PLANE('',#36176); #2137=PLANE('',#36177); #2138=PLANE('',#36178); #2139=PLANE('',#36182); #2140=PLANE('',#36183); #2141=PLANE('',#36187); #2142=PLANE('',#36188); #2143=PLANE('',#36189); #2144=PLANE('',#36190); #2145=PLANE('',#36191); #2146=PLANE('',#36192); #2147=PLANE('',#36193); #2148=PLANE('',#36194); #2149=PLANE('',#36198); #2150=PLANE('',#36199); #2151=PLANE('',#36203); #2152=PLANE('',#36204); #2153=PLANE('',#36205); #2154=PLANE('',#36206); #2155=PLANE('',#36207); #2156=PLANE('',#36208); #2157=PLANE('',#36209); #2158=PLANE('',#36210); #2159=PLANE('',#36214); #2160=PLANE('',#36216); #2161=PLANE('',#36219); #2162=PLANE('',#36222); #2163=PLANE('',#36226); #2164=PLANE('',#36228); #2165=PLANE('',#36231); #2166=PLANE('',#36233); #2167=PLANE('',#36234); #2168=PLANE('',#36235); #2169=PLANE('',#36241); #2170=PLANE('',#36242); #2171=PLANE('',#36243); #2172=PLANE('',#36244); #2173=PLANE('',#36248); #2174=PLANE('',#36249); #2175=PLANE('',#36250); #2176=PLANE('',#36251); #2177=PLANE('',#36258); #2178=PLANE('',#36265); #2179=PLANE('',#36272); #2180=PLANE('',#36273); #2181=PLANE('',#36274); #2182=PLANE('',#36275); #2183=PLANE('',#36276); #2184=PLANE('',#36277); #2185=PLANE('',#36297); #2186=PLANE('',#36298); #2187=PLANE('',#36311); #2188=PLANE('',#36314); #2189=PLANE('',#36315); #2190=PLANE('',#36316); #2191=PLANE('',#36317); #2192=PLANE('',#36318); #2193=PLANE('',#36319); #2194=PLANE('',#36320); #2195=PLANE('',#36321); #2196=PLANE('',#36322); #2197=PLANE('',#36323); #2198=PLANE('',#36324); #2199=PLANE('',#36325); #2200=PLANE('',#36326); #2201=PLANE('',#36327); #2202=PLANE('',#36329); #2203=PLANE('',#36332); #2204=PLANE('',#36335); #2205=PLANE('',#36336); #2206=PLANE('',#36337); #2207=PLANE('',#36338); #2208=PLANE('',#36339); #2209=PLANE('',#36340); #2210=PLANE('',#36341); #2211=PLANE('',#36342); #2212=PLANE('',#36343); #2213=PLANE('',#36344); #2214=PLANE('',#36345); #2215=PLANE('',#36346); #2216=PLANE('',#36347); #2217=PLANE('',#36348); #2218=PLANE('',#36349); #2219=PLANE('',#36350); #2220=PLANE('',#36354); #2221=PLANE('',#36373); #2222=PLANE('',#36380); #2223=PLANE('',#36381); #2224=PLANE('',#36382); #2225=PLANE('',#36383); #2226=PLANE('',#36384); #2227=PLANE('',#36385); #2228=PLANE('',#36386); #2229=PLANE('',#36387); #2230=PLANE('',#36388); #2231=PLANE('',#36389); #2232=PLANE('',#36390); #2233=PLANE('',#36391); #2234=PLANE('',#36392); #2235=PLANE('',#36395); #2236=PLANE('',#36402); #2237=PLANE('',#36403); #2238=PLANE('',#36406); #2239=PLANE('',#36409); #2240=PLANE('',#36411); #2241=PLANE('',#36413); #2242=FACE_OUTER_BOUND('',#3971,.T.); #2243=FACE_OUTER_BOUND('',#3972,.T.); #2244=FACE_OUTER_BOUND('',#3973,.T.); #2245=FACE_OUTER_BOUND('',#3974,.T.); #2246=FACE_OUTER_BOUND('',#3975,.T.); #2247=FACE_OUTER_BOUND('',#3976,.T.); #2248=FACE_OUTER_BOUND('',#3977,.T.); #2249=FACE_OUTER_BOUND('',#3978,.T.); #2250=FACE_OUTER_BOUND('',#3979,.T.); #2251=FACE_OUTER_BOUND('',#3980,.T.); #2252=FACE_OUTER_BOUND('',#3981,.T.); #2253=FACE_OUTER_BOUND('',#3982,.T.); #2254=FACE_OUTER_BOUND('',#3983,.T.); #2255=FACE_OUTER_BOUND('',#3984,.T.); #2256=FACE_OUTER_BOUND('',#3985,.T.); #2257=FACE_OUTER_BOUND('',#3986,.T.); #2258=FACE_OUTER_BOUND('',#3987,.T.); #2259=FACE_OUTER_BOUND('',#3988,.T.); #2260=FACE_OUTER_BOUND('',#3989,.T.); #2261=FACE_OUTER_BOUND('',#3990,.T.); #2262=FACE_OUTER_BOUND('',#3991,.T.); #2263=FACE_OUTER_BOUND('',#3992,.T.); #2264=FACE_OUTER_BOUND('',#3993,.T.); #2265=FACE_OUTER_BOUND('',#3994,.T.); #2266=FACE_OUTER_BOUND('',#3995,.T.); #2267=FACE_OUTER_BOUND('',#3996,.T.); #2268=FACE_OUTER_BOUND('',#3997,.T.); #2269=FACE_OUTER_BOUND('',#3998,.T.); #2270=FACE_OUTER_BOUND('',#3999,.T.); #2271=FACE_OUTER_BOUND('',#4000,.T.); #2272=FACE_OUTER_BOUND('',#4001,.T.); #2273=FACE_OUTER_BOUND('',#4002,.T.); #2274=FACE_OUTER_BOUND('',#4003,.T.); #2275=FACE_OUTER_BOUND('',#4004,.T.); #2276=FACE_OUTER_BOUND('',#4005,.T.); #2277=FACE_OUTER_BOUND('',#4006,.T.); #2278=FACE_OUTER_BOUND('',#4007,.T.); #2279=FACE_OUTER_BOUND('',#4008,.T.); #2280=FACE_OUTER_BOUND('',#4009,.T.); #2281=FACE_OUTER_BOUND('',#4010,.T.); #2282=FACE_OUTER_BOUND('',#4011,.T.); #2283=FACE_OUTER_BOUND('',#4012,.T.); #2284=FACE_OUTER_BOUND('',#4013,.T.); #2285=FACE_OUTER_BOUND('',#4014,.T.); #2286=FACE_OUTER_BOUND('',#4015,.T.); #2287=FACE_OUTER_BOUND('',#4016,.T.); #2288=FACE_OUTER_BOUND('',#4017,.T.); #2289=FACE_OUTER_BOUND('',#4018,.T.); #2290=FACE_OUTER_BOUND('',#4019,.T.); #2291=FACE_OUTER_BOUND('',#4020,.T.); #2292=FACE_OUTER_BOUND('',#4021,.T.); #2293=FACE_OUTER_BOUND('',#4023,.T.); #2294=FACE_OUTER_BOUND('',#4024,.T.); #2295=FACE_OUTER_BOUND('',#4025,.T.); #2296=FACE_OUTER_BOUND('',#4026,.T.); #2297=FACE_OUTER_BOUND('',#4027,.T.); #2298=FACE_OUTER_BOUND('',#4028,.T.); #2299=FACE_OUTER_BOUND('',#4029,.T.); #2300=FACE_OUTER_BOUND('',#4030,.T.); #2301=FACE_OUTER_BOUND('',#4031,.T.); #2302=FACE_OUTER_BOUND('',#4032,.T.); #2303=FACE_OUTER_BOUND('',#4033,.T.); #2304=FACE_OUTER_BOUND('',#4034,.T.); #2305=FACE_OUTER_BOUND('',#4035,.T.); #2306=FACE_OUTER_BOUND('',#4036,.T.); #2307=FACE_OUTER_BOUND('',#4037,.T.); #2308=FACE_OUTER_BOUND('',#4038,.T.); #2309=FACE_OUTER_BOUND('',#4039,.T.); #2310=FACE_OUTER_BOUND('',#4040,.T.); #2311=FACE_OUTER_BOUND('',#4041,.T.); #2312=FACE_OUTER_BOUND('',#4042,.T.); #2313=FACE_OUTER_BOUND('',#4043,.T.); #2314=FACE_OUTER_BOUND('',#4044,.T.); #2315=FACE_OUTER_BOUND('',#4045,.T.); #2316=FACE_OUTER_BOUND('',#4046,.T.); #2317=FACE_OUTER_BOUND('',#4047,.T.); #2318=FACE_OUTER_BOUND('',#4048,.T.); #2319=FACE_OUTER_BOUND('',#4049,.T.); #2320=FACE_OUTER_BOUND('',#4050,.T.); #2321=FACE_OUTER_BOUND('',#4051,.T.); #2322=FACE_OUTER_BOUND('',#4052,.T.); #2323=FACE_OUTER_BOUND('',#4053,.T.); #2324=FACE_OUTER_BOUND('',#4054,.T.); #2325=FACE_OUTER_BOUND('',#4055,.T.); #2326=FACE_OUTER_BOUND('',#4056,.T.); #2327=FACE_OUTER_BOUND('',#4057,.T.); #2328=FACE_OUTER_BOUND('',#4058,.T.); #2329=FACE_OUTER_BOUND('',#4059,.T.); #2330=FACE_OUTER_BOUND('',#4060,.T.); #2331=FACE_OUTER_BOUND('',#4061,.T.); #2332=FACE_OUTER_BOUND('',#4062,.T.); #2333=FACE_OUTER_BOUND('',#4063,.T.); #2334=FACE_OUTER_BOUND('',#4064,.T.); #2335=FACE_OUTER_BOUND('',#4065,.T.); #2336=FACE_OUTER_BOUND('',#4066,.T.); #2337=FACE_OUTER_BOUND('',#4067,.T.); #2338=FACE_OUTER_BOUND('',#4068,.T.); #2339=FACE_OUTER_BOUND('',#4069,.T.); #2340=FACE_OUTER_BOUND('',#4070,.T.); #2341=FACE_OUTER_BOUND('',#4071,.T.); #2342=FACE_OUTER_BOUND('',#4072,.T.); #2343=FACE_OUTER_BOUND('',#4073,.T.); #2344=FACE_OUTER_BOUND('',#4074,.T.); #2345=FACE_OUTER_BOUND('',#4075,.T.); #2346=FACE_OUTER_BOUND('',#4076,.T.); #2347=FACE_OUTER_BOUND('',#4077,.T.); #2348=FACE_OUTER_BOUND('',#4078,.T.); #2349=FACE_OUTER_BOUND('',#4079,.T.); #2350=FACE_OUTER_BOUND('',#4080,.T.); #2351=FACE_OUTER_BOUND('',#4081,.T.); #2352=FACE_OUTER_BOUND('',#4082,.T.); #2353=FACE_OUTER_BOUND('',#4083,.T.); #2354=FACE_OUTER_BOUND('',#4084,.T.); #2355=FACE_OUTER_BOUND('',#4085,.T.); #2356=FACE_OUTER_BOUND('',#4086,.T.); #2357=FACE_OUTER_BOUND('',#4087,.T.); #2358=FACE_OUTER_BOUND('',#4088,.T.); #2359=FACE_OUTER_BOUND('',#4089,.T.); #2360=FACE_OUTER_BOUND('',#4090,.T.); #2361=FACE_OUTER_BOUND('',#4091,.T.); #2362=FACE_OUTER_BOUND('',#4092,.T.); #2363=FACE_OUTER_BOUND('',#4093,.T.); #2364=FACE_OUTER_BOUND('',#4094,.T.); #2365=FACE_OUTER_BOUND('',#4095,.T.); #2366=FACE_OUTER_BOUND('',#4096,.T.); #2367=FACE_OUTER_BOUND('',#4097,.T.); #2368=FACE_OUTER_BOUND('',#4098,.T.); #2369=FACE_OUTER_BOUND('',#4099,.T.); #2370=FACE_OUTER_BOUND('',#4100,.T.); #2371=FACE_OUTER_BOUND('',#4101,.T.); #2372=FACE_OUTER_BOUND('',#4102,.T.); #2373=FACE_OUTER_BOUND('',#4103,.T.); #2374=FACE_OUTER_BOUND('',#4104,.T.); #2375=FACE_OUTER_BOUND('',#4105,.T.); #2376=FACE_OUTER_BOUND('',#4106,.T.); #2377=FACE_OUTER_BOUND('',#4107,.T.); #2378=FACE_OUTER_BOUND('',#4108,.T.); #2379=FACE_OUTER_BOUND('',#4109,.T.); #2380=FACE_OUTER_BOUND('',#4110,.T.); #2381=FACE_OUTER_BOUND('',#4111,.T.); #2382=FACE_OUTER_BOUND('',#4112,.T.); #2383=FACE_OUTER_BOUND('',#4113,.T.); #2384=FACE_OUTER_BOUND('',#4114,.T.); #2385=FACE_OUTER_BOUND('',#4115,.T.); #2386=FACE_OUTER_BOUND('',#4116,.T.); #2387=FACE_OUTER_BOUND('',#4117,.T.); #2388=FACE_OUTER_BOUND('',#4118,.T.); #2389=FACE_OUTER_BOUND('',#4119,.T.); #2390=FACE_OUTER_BOUND('',#4120,.T.); #2391=FACE_OUTER_BOUND('',#4121,.T.); #2392=FACE_OUTER_BOUND('',#4122,.T.); #2393=FACE_OUTER_BOUND('',#4123,.T.); #2394=FACE_OUTER_BOUND('',#4124,.T.); #2395=FACE_OUTER_BOUND('',#4125,.T.); #2396=FACE_OUTER_BOUND('',#4126,.T.); #2397=FACE_OUTER_BOUND('',#4127,.T.); #2398=FACE_OUTER_BOUND('',#4128,.T.); #2399=FACE_OUTER_BOUND('',#4129,.T.); #2400=FACE_OUTER_BOUND('',#4130,.T.); #2401=FACE_OUTER_BOUND('',#4131,.T.); #2402=FACE_OUTER_BOUND('',#4161,.T.); #2403=FACE_OUTER_BOUND('',#4191,.T.); #2404=FACE_OUTER_BOUND('',#4192,.T.); #2405=FACE_OUTER_BOUND('',#4193,.T.); #2406=FACE_OUTER_BOUND('',#4194,.T.); #2407=FACE_OUTER_BOUND('',#4195,.T.); #2408=FACE_OUTER_BOUND('',#4196,.T.); #2409=FACE_OUTER_BOUND('',#4197,.T.); #2410=FACE_OUTER_BOUND('',#4198,.T.); #2411=FACE_OUTER_BOUND('',#4199,.T.); #2412=FACE_OUTER_BOUND('',#4200,.T.); #2413=FACE_OUTER_BOUND('',#4201,.T.); #2414=FACE_OUTER_BOUND('',#4202,.T.); #2415=FACE_OUTER_BOUND('',#4203,.T.); #2416=FACE_OUTER_BOUND('',#4204,.T.); #2417=FACE_OUTER_BOUND('',#4205,.T.); #2418=FACE_OUTER_BOUND('',#4206,.T.); #2419=FACE_OUTER_BOUND('',#4207,.T.); #2420=FACE_OUTER_BOUND('',#4208,.T.); #2421=FACE_OUTER_BOUND('',#4209,.T.); #2422=FACE_OUTER_BOUND('',#4210,.T.); #2423=FACE_OUTER_BOUND('',#4211,.T.); #2424=FACE_OUTER_BOUND('',#4212,.T.); #2425=FACE_OUTER_BOUND('',#4213,.T.); #2426=FACE_OUTER_BOUND('',#4214,.T.); #2427=FACE_OUTER_BOUND('',#4215,.T.); #2428=FACE_OUTER_BOUND('',#4216,.T.); #2429=FACE_OUTER_BOUND('',#4217,.T.); #2430=FACE_OUTER_BOUND('',#4218,.T.); #2431=FACE_OUTER_BOUND('',#4219,.T.); #2432=FACE_OUTER_BOUND('',#4220,.T.); #2433=FACE_OUTER_BOUND('',#4221,.T.); #2434=FACE_OUTER_BOUND('',#4222,.T.); #2435=FACE_OUTER_BOUND('',#4223,.T.); #2436=FACE_OUTER_BOUND('',#4224,.T.); #2437=FACE_OUTER_BOUND('',#4225,.T.); #2438=FACE_OUTER_BOUND('',#4226,.T.); #2439=FACE_OUTER_BOUND('',#4227,.T.); #2440=FACE_OUTER_BOUND('',#4228,.T.); #2441=FACE_OUTER_BOUND('',#4229,.T.); #2442=FACE_OUTER_BOUND('',#4230,.T.); #2443=FACE_OUTER_BOUND('',#4231,.T.); #2444=FACE_OUTER_BOUND('',#4232,.T.); #2445=FACE_OUTER_BOUND('',#4233,.T.); #2446=FACE_OUTER_BOUND('',#4234,.T.); #2447=FACE_OUTER_BOUND('',#4235,.T.); #2448=FACE_OUTER_BOUND('',#4236,.T.); #2449=FACE_OUTER_BOUND('',#4237,.T.); #2450=FACE_OUTER_BOUND('',#4238,.T.); #2451=FACE_OUTER_BOUND('',#4239,.T.); #2452=FACE_OUTER_BOUND('',#4240,.T.); #2453=FACE_OUTER_BOUND('',#4241,.T.); #2454=FACE_OUTER_BOUND('',#4242,.T.); #2455=FACE_OUTER_BOUND('',#4243,.T.); #2456=FACE_OUTER_BOUND('',#4244,.T.); #2457=FACE_OUTER_BOUND('',#4245,.T.); #2458=FACE_OUTER_BOUND('',#4246,.T.); #2459=FACE_OUTER_BOUND('',#4247,.T.); #2460=FACE_OUTER_BOUND('',#4248,.T.); #2461=FACE_OUTER_BOUND('',#4249,.T.); #2462=FACE_OUTER_BOUND('',#4250,.T.); #2463=FACE_OUTER_BOUND('',#4251,.T.); #2464=FACE_OUTER_BOUND('',#4252,.T.); #2465=FACE_OUTER_BOUND('',#4253,.T.); #2466=FACE_OUTER_BOUND('',#4254,.T.); #2467=FACE_OUTER_BOUND('',#4255,.T.); #2468=FACE_OUTER_BOUND('',#4256,.T.); #2469=FACE_OUTER_BOUND('',#4257,.T.); #2470=FACE_OUTER_BOUND('',#4258,.T.); #2471=FACE_OUTER_BOUND('',#4259,.T.); #2472=FACE_OUTER_BOUND('',#4260,.T.); #2473=FACE_OUTER_BOUND('',#4261,.T.); #2474=FACE_OUTER_BOUND('',#4262,.T.); #2475=FACE_OUTER_BOUND('',#4263,.T.); #2476=FACE_OUTER_BOUND('',#4264,.T.); #2477=FACE_OUTER_BOUND('',#4265,.T.); #2478=FACE_OUTER_BOUND('',#4266,.T.); #2479=FACE_OUTER_BOUND('',#4267,.T.); #2480=FACE_OUTER_BOUND('',#4268,.T.); #2481=FACE_OUTER_BOUND('',#4269,.T.); #2482=FACE_OUTER_BOUND('',#4270,.T.); #2483=FACE_OUTER_BOUND('',#4271,.T.); #2484=FACE_OUTER_BOUND('',#4272,.T.); #2485=FACE_OUTER_BOUND('',#4273,.T.); #2486=FACE_OUTER_BOUND('',#4274,.T.); #2487=FACE_OUTER_BOUND('',#4275,.T.); #2488=FACE_OUTER_BOUND('',#4276,.T.); #2489=FACE_OUTER_BOUND('',#4277,.T.); #2490=FACE_OUTER_BOUND('',#4278,.T.); #2491=FACE_OUTER_BOUND('',#4279,.T.); #2492=FACE_OUTER_BOUND('',#4280,.T.); #2493=FACE_OUTER_BOUND('',#4281,.T.); #2494=FACE_OUTER_BOUND('',#4282,.T.); #2495=FACE_OUTER_BOUND('',#4283,.T.); #2496=FACE_OUTER_BOUND('',#4284,.T.); #2497=FACE_OUTER_BOUND('',#4285,.T.); #2498=FACE_OUTER_BOUND('',#4286,.T.); #2499=FACE_OUTER_BOUND('',#4287,.T.); #2500=FACE_OUTER_BOUND('',#4288,.T.); #2501=FACE_OUTER_BOUND('',#4289,.T.); #2502=FACE_OUTER_BOUND('',#4291,.T.); #2503=FACE_OUTER_BOUND('',#4293,.T.); #2504=FACE_OUTER_BOUND('',#4295,.T.); #2505=FACE_OUTER_BOUND('',#4297,.T.); #2506=FACE_OUTER_BOUND('',#4299,.T.); #2507=FACE_OUTER_BOUND('',#4301,.T.); #2508=FACE_OUTER_BOUND('',#4303,.T.); #2509=FACE_OUTER_BOUND('',#4305,.T.); #2510=FACE_OUTER_BOUND('',#4307,.T.); #2511=FACE_OUTER_BOUND('',#4309,.T.); #2512=FACE_OUTER_BOUND('',#4311,.T.); #2513=FACE_OUTER_BOUND('',#4313,.T.); #2514=FACE_OUTER_BOUND('',#4315,.T.); #2515=FACE_OUTER_BOUND('',#4317,.T.); #2516=FACE_OUTER_BOUND('',#4319,.T.); #2517=FACE_OUTER_BOUND('',#4321,.T.); #2518=FACE_OUTER_BOUND('',#4323,.T.); #2519=FACE_OUTER_BOUND('',#4325,.T.); #2520=FACE_OUTER_BOUND('',#4327,.T.); #2521=FACE_OUTER_BOUND('',#4329,.T.); #2522=FACE_OUTER_BOUND('',#4331,.T.); #2523=FACE_OUTER_BOUND('',#4333,.T.); #2524=FACE_OUTER_BOUND('',#4335,.T.); #2525=FACE_OUTER_BOUND('',#4337,.T.); #2526=FACE_OUTER_BOUND('',#4339,.T.); #2527=FACE_OUTER_BOUND('',#4341,.T.); #2528=FACE_OUTER_BOUND('',#4343,.T.); #2529=FACE_OUTER_BOUND('',#4345,.T.); #2530=FACE_OUTER_BOUND('',#4347,.T.); #2531=FACE_OUTER_BOUND('',#4349,.T.); #2532=FACE_OUTER_BOUND('',#4351,.T.); #2533=FACE_OUTER_BOUND('',#4353,.T.); #2534=FACE_OUTER_BOUND('',#4355,.T.); #2535=FACE_OUTER_BOUND('',#4357,.T.); #2536=FACE_OUTER_BOUND('',#4359,.T.); #2537=FACE_OUTER_BOUND('',#4361,.T.); #2538=FACE_OUTER_BOUND('',#4363,.T.); #2539=FACE_OUTER_BOUND('',#4365,.T.); #2540=FACE_OUTER_BOUND('',#4367,.T.); #2541=FACE_OUTER_BOUND('',#4369,.T.); #2542=FACE_OUTER_BOUND('',#4371,.T.); #2543=FACE_OUTER_BOUND('',#4373,.T.); #2544=FACE_OUTER_BOUND('',#4374,.T.); #2545=FACE_OUTER_BOUND('',#4376,.T.); #2546=FACE_OUTER_BOUND('',#4378,.T.); #2547=FACE_OUTER_BOUND('',#4380,.T.); #2548=FACE_OUTER_BOUND('',#4382,.T.); #2549=FACE_OUTER_BOUND('',#4383,.T.); #2550=FACE_OUTER_BOUND('',#4384,.T.); #2551=FACE_OUTER_BOUND('',#4385,.T.); #2552=FACE_OUTER_BOUND('',#4386,.T.); #2553=FACE_OUTER_BOUND('',#4387,.T.); #2554=FACE_OUTER_BOUND('',#4388,.T.); #2555=FACE_OUTER_BOUND('',#4389,.T.); #2556=FACE_OUTER_BOUND('',#4390,.T.); #2557=FACE_OUTER_BOUND('',#4391,.T.); #2558=FACE_OUTER_BOUND('',#4392,.T.); #2559=FACE_OUTER_BOUND('',#4393,.T.); #2560=FACE_OUTER_BOUND('',#4394,.T.); #2561=FACE_OUTER_BOUND('',#4395,.T.); #2562=FACE_OUTER_BOUND('',#4396,.T.); #2563=FACE_OUTER_BOUND('',#4397,.T.); #2564=FACE_OUTER_BOUND('',#4398,.T.); #2565=FACE_OUTER_BOUND('',#4399,.T.); #2566=FACE_OUTER_BOUND('',#4400,.T.); #2567=FACE_OUTER_BOUND('',#4401,.T.); #2568=FACE_OUTER_BOUND('',#4402,.T.); #2569=FACE_OUTER_BOUND('',#4403,.T.); #2570=FACE_OUTER_BOUND('',#4404,.T.); #2571=FACE_OUTER_BOUND('',#4405,.T.); #2572=FACE_OUTER_BOUND('',#4406,.T.); #2573=FACE_OUTER_BOUND('',#4407,.T.); #2574=FACE_OUTER_BOUND('',#4408,.T.); #2575=FACE_OUTER_BOUND('',#4409,.T.); #2576=FACE_OUTER_BOUND('',#4410,.T.); #2577=FACE_OUTER_BOUND('',#4411,.T.); #2578=FACE_OUTER_BOUND('',#4412,.T.); #2579=FACE_OUTER_BOUND('',#4413,.T.); #2580=FACE_OUTER_BOUND('',#4414,.T.); #2581=FACE_OUTER_BOUND('',#4415,.T.); #2582=FACE_OUTER_BOUND('',#4416,.T.); #2583=FACE_OUTER_BOUND('',#4417,.T.); #2584=FACE_OUTER_BOUND('',#4418,.T.); #2585=FACE_OUTER_BOUND('',#4419,.T.); #2586=FACE_OUTER_BOUND('',#4420,.T.); #2587=FACE_OUTER_BOUND('',#4421,.T.); #2588=FACE_OUTER_BOUND('',#4422,.T.); #2589=FACE_OUTER_BOUND('',#4423,.T.); #2590=FACE_OUTER_BOUND('',#4424,.T.); #2591=FACE_OUTER_BOUND('',#4425,.T.); #2592=FACE_OUTER_BOUND('',#4426,.T.); #2593=FACE_OUTER_BOUND('',#4427,.T.); #2594=FACE_OUTER_BOUND('',#4428,.T.); #2595=FACE_OUTER_BOUND('',#4429,.T.); #2596=FACE_OUTER_BOUND('',#4430,.T.); #2597=FACE_OUTER_BOUND('',#4431,.T.); #2598=FACE_OUTER_BOUND('',#4432,.T.); #2599=FACE_OUTER_BOUND('',#4433,.T.); #2600=FACE_OUTER_BOUND('',#4434,.T.); #2601=FACE_OUTER_BOUND('',#4435,.T.); #2602=FACE_OUTER_BOUND('',#4436,.T.); #2603=FACE_OUTER_BOUND('',#4437,.T.); #2604=FACE_OUTER_BOUND('',#4438,.T.); #2605=FACE_OUTER_BOUND('',#4439,.T.); #2606=FACE_OUTER_BOUND('',#4440,.T.); #2607=FACE_OUTER_BOUND('',#4441,.T.); #2608=FACE_OUTER_BOUND('',#4442,.T.); #2609=FACE_OUTER_BOUND('',#4443,.T.); #2610=FACE_OUTER_BOUND('',#4444,.T.); #2611=FACE_OUTER_BOUND('',#4445,.T.); #2612=FACE_OUTER_BOUND('',#4446,.T.); #2613=FACE_OUTER_BOUND('',#4447,.T.); #2614=FACE_OUTER_BOUND('',#4448,.T.); #2615=FACE_OUTER_BOUND('',#4449,.T.); #2616=FACE_OUTER_BOUND('',#4450,.T.); #2617=FACE_OUTER_BOUND('',#4451,.T.); #2618=FACE_OUTER_BOUND('',#4452,.T.); #2619=FACE_OUTER_BOUND('',#4453,.T.); #2620=FACE_OUTER_BOUND('',#4454,.T.); #2621=FACE_OUTER_BOUND('',#4455,.T.); #2622=FACE_OUTER_BOUND('',#4456,.T.); #2623=FACE_OUTER_BOUND('',#4457,.T.); #2624=FACE_OUTER_BOUND('',#4458,.T.); #2625=FACE_OUTER_BOUND('',#4459,.T.); #2626=FACE_OUTER_BOUND('',#4460,.T.); #2627=FACE_OUTER_BOUND('',#4461,.T.); #2628=FACE_OUTER_BOUND('',#4462,.T.); #2629=FACE_OUTER_BOUND('',#4463,.T.); #2630=FACE_OUTER_BOUND('',#4464,.T.); #2631=FACE_OUTER_BOUND('',#4465,.T.); #2632=FACE_OUTER_BOUND('',#4466,.T.); #2633=FACE_OUTER_BOUND('',#4467,.T.); #2634=FACE_OUTER_BOUND('',#4468,.T.); #2635=FACE_OUTER_BOUND('',#4469,.T.); #2636=FACE_OUTER_BOUND('',#4470,.T.); #2637=FACE_OUTER_BOUND('',#4471,.T.); #2638=FACE_OUTER_BOUND('',#4472,.T.); #2639=FACE_OUTER_BOUND('',#4473,.T.); #2640=FACE_OUTER_BOUND('',#4475,.T.); #2641=FACE_OUTER_BOUND('',#4477,.T.); #2642=FACE_OUTER_BOUND('',#4479,.T.); #2643=FACE_OUTER_BOUND('',#4481,.T.); #2644=FACE_OUTER_BOUND('',#4483,.T.); #2645=FACE_OUTER_BOUND('',#4485,.T.); #2646=FACE_OUTER_BOUND('',#4487,.T.); #2647=FACE_OUTER_BOUND('',#4489,.T.); #2648=FACE_OUTER_BOUND('',#4491,.T.); #2649=FACE_OUTER_BOUND('',#4493,.T.); #2650=FACE_OUTER_BOUND('',#4495,.T.); #2651=FACE_OUTER_BOUND('',#4497,.T.); #2652=FACE_OUTER_BOUND('',#4499,.T.); #2653=FACE_OUTER_BOUND('',#4501,.T.); #2654=FACE_OUTER_BOUND('',#4503,.T.); #2655=FACE_OUTER_BOUND('',#4505,.T.); #2656=FACE_OUTER_BOUND('',#4507,.T.); #2657=FACE_OUTER_BOUND('',#4509,.T.); #2658=FACE_OUTER_BOUND('',#4511,.T.); #2659=FACE_OUTER_BOUND('',#4513,.T.); #2660=FACE_OUTER_BOUND('',#4515,.T.); #2661=FACE_OUTER_BOUND('',#4517,.T.); #2662=FACE_OUTER_BOUND('',#4519,.T.); #2663=FACE_OUTER_BOUND('',#4521,.T.); #2664=FACE_OUTER_BOUND('',#4523,.T.); #2665=FACE_OUTER_BOUND('',#4525,.T.); #2666=FACE_OUTER_BOUND('',#4527,.T.); #2667=FACE_OUTER_BOUND('',#4529,.T.); #2668=FACE_OUTER_BOUND('',#4531,.T.); #2669=FACE_OUTER_BOUND('',#4533,.T.); #2670=FACE_OUTER_BOUND('',#4535,.T.); #2671=FACE_OUTER_BOUND('',#4537,.T.); #2672=FACE_OUTER_BOUND('',#4539,.T.); #2673=FACE_OUTER_BOUND('',#4541,.T.); #2674=FACE_OUTER_BOUND('',#4543,.T.); #2675=FACE_OUTER_BOUND('',#4545,.T.); #2676=FACE_OUTER_BOUND('',#4547,.T.); #2677=FACE_OUTER_BOUND('',#4549,.T.); #2678=FACE_OUTER_BOUND('',#4551,.T.); #2679=FACE_OUTER_BOUND('',#4553,.T.); #2680=FACE_OUTER_BOUND('',#4555,.T.); #2681=FACE_OUTER_BOUND('',#4557,.T.); #2682=FACE_OUTER_BOUND('',#4558,.T.); #2683=FACE_OUTER_BOUND('',#4560,.T.); #2684=FACE_OUTER_BOUND('',#4562,.T.); #2685=FACE_OUTER_BOUND('',#4564,.T.); #2686=FACE_OUTER_BOUND('',#4566,.T.); #2687=FACE_OUTER_BOUND('',#4568,.T.); #2688=FACE_OUTER_BOUND('',#4570,.T.); #2689=FACE_OUTER_BOUND('',#4575,.T.); #2690=FACE_OUTER_BOUND('',#4580,.T.); #2691=FACE_OUTER_BOUND('',#4581,.T.); #2692=FACE_OUTER_BOUND('',#4582,.T.); #2693=FACE_OUTER_BOUND('',#4583,.T.); #2694=FACE_OUTER_BOUND('',#4584,.T.); #2695=FACE_OUTER_BOUND('',#4585,.T.); #2696=FACE_OUTER_BOUND('',#4586,.T.); #2697=FACE_OUTER_BOUND('',#4587,.T.); #2698=FACE_OUTER_BOUND('',#4588,.T.); #2699=FACE_OUTER_BOUND('',#4589,.T.); #2700=FACE_OUTER_BOUND('',#4590,.T.); #2701=FACE_OUTER_BOUND('',#4591,.T.); #2702=FACE_OUTER_BOUND('',#4592,.T.); #2703=FACE_OUTER_BOUND('',#4593,.T.); #2704=FACE_OUTER_BOUND('',#4594,.T.); #2705=FACE_OUTER_BOUND('',#4595,.T.); #2706=FACE_OUTER_BOUND('',#4596,.T.); #2707=FACE_OUTER_BOUND('',#4597,.T.); #2708=FACE_OUTER_BOUND('',#4598,.T.); #2709=FACE_OUTER_BOUND('',#4599,.T.); #2710=FACE_OUTER_BOUND('',#4600,.T.); #2711=FACE_OUTER_BOUND('',#4601,.T.); #2712=FACE_OUTER_BOUND('',#4602,.T.); #2713=FACE_OUTER_BOUND('',#4603,.T.); #2714=FACE_OUTER_BOUND('',#4604,.T.); #2715=FACE_OUTER_BOUND('',#4605,.T.); #2716=FACE_OUTER_BOUND('',#4606,.T.); #2717=FACE_OUTER_BOUND('',#4607,.T.); #2718=FACE_OUTER_BOUND('',#4608,.T.); #2719=FACE_OUTER_BOUND('',#4609,.T.); #2720=FACE_OUTER_BOUND('',#4610,.T.); #2721=FACE_OUTER_BOUND('',#4611,.T.); #2722=FACE_OUTER_BOUND('',#4612,.T.); #2723=FACE_OUTER_BOUND('',#4613,.T.); #2724=FACE_OUTER_BOUND('',#4614,.T.); #2725=FACE_OUTER_BOUND('',#4615,.T.); #2726=FACE_OUTER_BOUND('',#4616,.T.); #2727=FACE_OUTER_BOUND('',#4617,.T.); #2728=FACE_OUTER_BOUND('',#4618,.T.); #2729=FACE_OUTER_BOUND('',#4619,.T.); #2730=FACE_OUTER_BOUND('',#4620,.T.); #2731=FACE_OUTER_BOUND('',#4621,.T.); #2732=FACE_OUTER_BOUND('',#4622,.T.); #2733=FACE_OUTER_BOUND('',#4623,.T.); #2734=FACE_OUTER_BOUND('',#4624,.T.); #2735=FACE_OUTER_BOUND('',#4625,.T.); #2736=FACE_OUTER_BOUND('',#4626,.T.); #2737=FACE_OUTER_BOUND('',#4627,.T.); #2738=FACE_OUTER_BOUND('',#4628,.T.); #2739=FACE_OUTER_BOUND('',#4629,.T.); #2740=FACE_OUTER_BOUND('',#4630,.T.); #2741=FACE_OUTER_BOUND('',#4631,.T.); #2742=FACE_OUTER_BOUND('',#4632,.T.); #2743=FACE_OUTER_BOUND('',#4633,.T.); #2744=FACE_OUTER_BOUND('',#4634,.T.); #2745=FACE_OUTER_BOUND('',#4635,.T.); #2746=FACE_OUTER_BOUND('',#4636,.T.); #2747=FACE_OUTER_BOUND('',#4637,.T.); #2748=FACE_OUTER_BOUND('',#4638,.T.); #2749=FACE_OUTER_BOUND('',#4639,.T.); #2750=FACE_OUTER_BOUND('',#4640,.T.); #2751=FACE_OUTER_BOUND('',#4641,.T.); #2752=FACE_OUTER_BOUND('',#4642,.T.); #2753=FACE_OUTER_BOUND('',#4643,.T.); #2754=FACE_OUTER_BOUND('',#4644,.T.); #2755=FACE_OUTER_BOUND('',#4645,.T.); #2756=FACE_OUTER_BOUND('',#4646,.T.); #2757=FACE_OUTER_BOUND('',#4647,.T.); #2758=FACE_OUTER_BOUND('',#4648,.T.); #2759=FACE_OUTER_BOUND('',#4649,.T.); #2760=FACE_OUTER_BOUND('',#4650,.T.); #2761=FACE_OUTER_BOUND('',#4651,.T.); #2762=FACE_OUTER_BOUND('',#4652,.T.); #2763=FACE_OUTER_BOUND('',#4653,.T.); #2764=FACE_OUTER_BOUND('',#4654,.T.); #2765=FACE_OUTER_BOUND('',#4655,.T.); #2766=FACE_OUTER_BOUND('',#4656,.T.); #2767=FACE_OUTER_BOUND('',#4657,.T.); #2768=FACE_OUTER_BOUND('',#4658,.T.); #2769=FACE_OUTER_BOUND('',#4659,.T.); #2770=FACE_OUTER_BOUND('',#4660,.T.); #2771=FACE_OUTER_BOUND('',#4662,.T.); #2772=FACE_OUTER_BOUND('',#4663,.T.); #2773=FACE_OUTER_BOUND('',#4664,.T.); #2774=FACE_OUTER_BOUND('',#4665,.T.); #2775=FACE_OUTER_BOUND('',#4666,.T.); #2776=FACE_OUTER_BOUND('',#4667,.T.); #2777=FACE_OUTER_BOUND('',#4668,.T.); #2778=FACE_OUTER_BOUND('',#4669,.T.); #2779=FACE_OUTER_BOUND('',#4670,.T.); #2780=FACE_OUTER_BOUND('',#4671,.T.); #2781=FACE_OUTER_BOUND('',#4672,.T.); #2782=FACE_OUTER_BOUND('',#4673,.T.); #2783=FACE_OUTER_BOUND('',#4674,.T.); #2784=FACE_OUTER_BOUND('',#4675,.T.); #2785=FACE_OUTER_BOUND('',#4676,.T.); #2786=FACE_OUTER_BOUND('',#4677,.T.); #2787=FACE_OUTER_BOUND('',#4678,.T.); #2788=FACE_OUTER_BOUND('',#4679,.T.); #2789=FACE_OUTER_BOUND('',#4680,.T.); #2790=FACE_OUTER_BOUND('',#4681,.T.); #2791=FACE_OUTER_BOUND('',#4682,.T.); #2792=FACE_OUTER_BOUND('',#4683,.T.); #2793=FACE_OUTER_BOUND('',#4684,.T.); #2794=FACE_OUTER_BOUND('',#4685,.T.); #2795=FACE_OUTER_BOUND('',#4686,.T.); #2796=FACE_OUTER_BOUND('',#4687,.T.); #2797=FACE_OUTER_BOUND('',#4688,.T.); #2798=FACE_OUTER_BOUND('',#4689,.T.); #2799=FACE_OUTER_BOUND('',#4690,.T.); #2800=FACE_OUTER_BOUND('',#4691,.T.); #2801=FACE_OUTER_BOUND('',#4692,.T.); #2802=FACE_OUTER_BOUND('',#4693,.T.); #2803=FACE_OUTER_BOUND('',#4694,.T.); #2804=FACE_OUTER_BOUND('',#4695,.T.); #2805=FACE_OUTER_BOUND('',#4696,.T.); #2806=FACE_OUTER_BOUND('',#4697,.T.); #2807=FACE_OUTER_BOUND('',#4698,.T.); #2808=FACE_OUTER_BOUND('',#4699,.T.); #2809=FACE_OUTER_BOUND('',#4700,.T.); #2810=FACE_OUTER_BOUND('',#4701,.T.); #2811=FACE_OUTER_BOUND('',#4702,.T.); #2812=FACE_OUTER_BOUND('',#4703,.T.); #2813=FACE_OUTER_BOUND('',#4704,.T.); #2814=FACE_OUTER_BOUND('',#4705,.T.); #2815=FACE_OUTER_BOUND('',#4706,.T.); #2816=FACE_OUTER_BOUND('',#4707,.T.); #2817=FACE_OUTER_BOUND('',#4708,.T.); #2818=FACE_OUTER_BOUND('',#4709,.T.); #2819=FACE_OUTER_BOUND('',#4710,.T.); #2820=FACE_OUTER_BOUND('',#4711,.T.); #2821=FACE_OUTER_BOUND('',#4712,.T.); #2822=FACE_OUTER_BOUND('',#4713,.T.); #2823=FACE_OUTER_BOUND('',#4714,.T.); #2824=FACE_OUTER_BOUND('',#4715,.T.); #2825=FACE_OUTER_BOUND('',#4716,.T.); #2826=FACE_OUTER_BOUND('',#4717,.T.); #2827=FACE_OUTER_BOUND('',#4718,.T.); #2828=FACE_OUTER_BOUND('',#4719,.T.); #2829=FACE_OUTER_BOUND('',#4720,.T.); #2830=FACE_OUTER_BOUND('',#4721,.T.); #2831=FACE_OUTER_BOUND('',#4722,.T.); #2832=FACE_OUTER_BOUND('',#4723,.T.); #2833=FACE_OUTER_BOUND('',#4724,.T.); #2834=FACE_OUTER_BOUND('',#4725,.T.); #2835=FACE_OUTER_BOUND('',#4726,.T.); #2836=FACE_OUTER_BOUND('',#4727,.T.); #2837=FACE_OUTER_BOUND('',#4728,.T.); #2838=FACE_OUTER_BOUND('',#4730,.T.); #2839=FACE_OUTER_BOUND('',#4731,.T.); #2840=FACE_OUTER_BOUND('',#4732,.T.); #2841=FACE_OUTER_BOUND('',#4733,.T.); #2842=FACE_OUTER_BOUND('',#4734,.T.); #2843=FACE_OUTER_BOUND('',#4735,.T.); #2844=FACE_OUTER_BOUND('',#4736,.T.); #2845=FACE_OUTER_BOUND('',#4737,.T.); #2846=FACE_OUTER_BOUND('',#4738,.T.); #2847=FACE_OUTER_BOUND('',#4739,.T.); #2848=FACE_OUTER_BOUND('',#4740,.T.); #2849=FACE_OUTER_BOUND('',#4741,.T.); #2850=FACE_OUTER_BOUND('',#4742,.T.); #2851=FACE_OUTER_BOUND('',#4743,.T.); #2852=FACE_OUTER_BOUND('',#4744,.T.); #2853=FACE_OUTER_BOUND('',#4745,.T.); #2854=FACE_OUTER_BOUND('',#4746,.T.); #2855=FACE_OUTER_BOUND('',#4747,.T.); #2856=FACE_OUTER_BOUND('',#4748,.T.); #2857=FACE_OUTER_BOUND('',#4749,.T.); #2858=FACE_OUTER_BOUND('',#4750,.T.); #2859=FACE_OUTER_BOUND('',#4751,.T.); #2860=FACE_OUTER_BOUND('',#4752,.T.); #2861=FACE_OUTER_BOUND('',#4753,.T.); #2862=FACE_OUTER_BOUND('',#4754,.T.); #2863=FACE_OUTER_BOUND('',#4755,.T.); #2864=FACE_OUTER_BOUND('',#4756,.T.); #2865=FACE_OUTER_BOUND('',#4757,.T.); #2866=FACE_OUTER_BOUND('',#4758,.T.); #2867=FACE_OUTER_BOUND('',#4759,.T.); #2868=FACE_OUTER_BOUND('',#4760,.T.); #2869=FACE_OUTER_BOUND('',#4761,.T.); #2870=FACE_OUTER_BOUND('',#4762,.T.); #2871=FACE_OUTER_BOUND('',#4763,.T.); #2872=FACE_OUTER_BOUND('',#4764,.T.); #2873=FACE_OUTER_BOUND('',#4765,.T.); #2874=FACE_OUTER_BOUND('',#4766,.T.); #2875=FACE_OUTER_BOUND('',#4767,.T.); #2876=FACE_OUTER_BOUND('',#4768,.T.); #2877=FACE_OUTER_BOUND('',#4769,.T.); #2878=FACE_OUTER_BOUND('',#4770,.T.); #2879=FACE_OUTER_BOUND('',#4771,.T.); #2880=FACE_OUTER_BOUND('',#4772,.T.); #2881=FACE_OUTER_BOUND('',#4773,.T.); #2882=FACE_OUTER_BOUND('',#4774,.T.); #2883=FACE_OUTER_BOUND('',#4775,.T.); #2884=FACE_OUTER_BOUND('',#4776,.T.); #2885=FACE_OUTER_BOUND('',#4777,.T.); #2886=FACE_OUTER_BOUND('',#4778,.T.); #2887=FACE_OUTER_BOUND('',#4779,.T.); #2888=FACE_OUTER_BOUND('',#4780,.T.); #2889=FACE_OUTER_BOUND('',#4781,.T.); #2890=FACE_OUTER_BOUND('',#4782,.T.); #2891=FACE_OUTER_BOUND('',#4783,.T.); #2892=FACE_OUTER_BOUND('',#4784,.T.); #2893=FACE_OUTER_BOUND('',#4785,.T.); #2894=FACE_OUTER_BOUND('',#4786,.T.); #2895=FACE_OUTER_BOUND('',#4787,.T.); #2896=FACE_OUTER_BOUND('',#4788,.T.); #2897=FACE_OUTER_BOUND('',#4789,.T.); #2898=FACE_OUTER_BOUND('',#4790,.T.); #2899=FACE_OUTER_BOUND('',#4791,.T.); #2900=FACE_OUTER_BOUND('',#4792,.T.); #2901=FACE_OUTER_BOUND('',#4793,.T.); #2902=FACE_OUTER_BOUND('',#4794,.T.); #2903=FACE_OUTER_BOUND('',#4795,.T.); #2904=FACE_OUTER_BOUND('',#4796,.T.); #2905=FACE_OUTER_BOUND('',#4797,.T.); #2906=FACE_OUTER_BOUND('',#4798,.T.); #2907=FACE_OUTER_BOUND('',#4799,.T.); #2908=FACE_OUTER_BOUND('',#4800,.T.); #2909=FACE_OUTER_BOUND('',#4801,.T.); #2910=FACE_OUTER_BOUND('',#4802,.T.); #2911=FACE_OUTER_BOUND('',#4803,.T.); #2912=FACE_OUTER_BOUND('',#4806,.T.); #2913=FACE_OUTER_BOUND('',#4807,.T.); #2914=FACE_OUTER_BOUND('',#4808,.T.); #2915=FACE_OUTER_BOUND('',#4809,.T.); #2916=FACE_OUTER_BOUND('',#4810,.T.); #2917=FACE_OUTER_BOUND('',#4811,.T.); #2918=FACE_OUTER_BOUND('',#4812,.T.); #2919=FACE_OUTER_BOUND('',#4813,.T.); #2920=FACE_OUTER_BOUND('',#4814,.T.); #2921=FACE_OUTER_BOUND('',#4815,.T.); #2922=FACE_OUTER_BOUND('',#4816,.T.); #2923=FACE_OUTER_BOUND('',#4817,.T.); #2924=FACE_OUTER_BOUND('',#4818,.T.); #2925=FACE_OUTER_BOUND('',#4819,.T.); #2926=FACE_OUTER_BOUND('',#4822,.T.); #2927=FACE_OUTER_BOUND('',#4823,.T.); #2928=FACE_OUTER_BOUND('',#4824,.T.); #2929=FACE_OUTER_BOUND('',#4825,.T.); #2930=FACE_OUTER_BOUND('',#4826,.T.); #2931=FACE_OUTER_BOUND('',#4828,.T.); #2932=FACE_OUTER_BOUND('',#4829,.T.); #2933=FACE_OUTER_BOUND('',#4830,.T.); #2934=FACE_OUTER_BOUND('',#4831,.T.); #2935=FACE_OUTER_BOUND('',#4832,.T.); #2936=FACE_OUTER_BOUND('',#4834,.T.); #2937=FACE_OUTER_BOUND('',#4835,.T.); #2938=FACE_OUTER_BOUND('',#4836,.T.); #2939=FACE_OUTER_BOUND('',#4837,.T.); #2940=FACE_OUTER_BOUND('',#4838,.T.); #2941=FACE_OUTER_BOUND('',#4839,.T.); #2942=FACE_OUTER_BOUND('',#4840,.T.); #2943=FACE_OUTER_BOUND('',#4841,.T.); #2944=FACE_OUTER_BOUND('',#4842,.T.); #2945=FACE_OUTER_BOUND('',#4843,.T.); #2946=FACE_OUTER_BOUND('',#4844,.T.); #2947=FACE_OUTER_BOUND('',#4845,.T.); #2948=FACE_OUTER_BOUND('',#4846,.T.); #2949=FACE_OUTER_BOUND('',#4847,.T.); #2950=FACE_OUTER_BOUND('',#4848,.T.); #2951=FACE_OUTER_BOUND('',#4849,.T.); #2952=FACE_OUTER_BOUND('',#4850,.T.); #2953=FACE_OUTER_BOUND('',#4851,.T.); #2954=FACE_OUTER_BOUND('',#4852,.T.); #2955=FACE_OUTER_BOUND('',#4853,.T.); #2956=FACE_OUTER_BOUND('',#4854,.T.); #2957=FACE_OUTER_BOUND('',#4855,.T.); #2958=FACE_OUTER_BOUND('',#4856,.T.); #2959=FACE_OUTER_BOUND('',#4857,.T.); #2960=FACE_OUTER_BOUND('',#4858,.T.); #2961=FACE_OUTER_BOUND('',#4859,.T.); #2962=FACE_OUTER_BOUND('',#4860,.T.); #2963=FACE_OUTER_BOUND('',#4861,.T.); #2964=FACE_OUTER_BOUND('',#4862,.T.); #2965=FACE_OUTER_BOUND('',#4863,.T.); #2966=FACE_OUTER_BOUND('',#4864,.T.); #2967=FACE_OUTER_BOUND('',#4865,.T.); #2968=FACE_OUTER_BOUND('',#4866,.T.); #2969=FACE_OUTER_BOUND('',#4867,.T.); #2970=FACE_OUTER_BOUND('',#4868,.T.); #2971=FACE_OUTER_BOUND('',#4869,.T.); #2972=FACE_OUTER_BOUND('',#4870,.T.); #2973=FACE_OUTER_BOUND('',#4871,.T.); #2974=FACE_OUTER_BOUND('',#4876,.T.); #2975=FACE_OUTER_BOUND('',#4877,.T.); #2976=FACE_OUTER_BOUND('',#4878,.T.); #2977=FACE_OUTER_BOUND('',#4879,.T.); #2978=FACE_OUTER_BOUND('',#4880,.T.); #2979=FACE_OUTER_BOUND('',#4881,.T.); #2980=FACE_OUTER_BOUND('',#4882,.T.); #2981=FACE_OUTER_BOUND('',#4883,.T.); #2982=FACE_OUTER_BOUND('',#4884,.T.); #2983=FACE_OUTER_BOUND('',#4886,.T.); #2984=FACE_OUTER_BOUND('',#4887,.T.); #2985=FACE_OUTER_BOUND('',#4890,.T.); #2986=FACE_OUTER_BOUND('',#4891,.T.); #2987=FACE_OUTER_BOUND('',#4892,.T.); #2988=FACE_OUTER_BOUND('',#4893,.T.); #2989=FACE_OUTER_BOUND('',#4894,.T.); #2990=FACE_OUTER_BOUND('',#4895,.T.); #2991=FACE_OUTER_BOUND('',#4897,.T.); #2992=FACE_OUTER_BOUND('',#4898,.T.); #2993=FACE_OUTER_BOUND('',#4899,.T.); #2994=FACE_OUTER_BOUND('',#4900,.T.); #2995=FACE_OUTER_BOUND('',#4901,.T.); #2996=FACE_OUTER_BOUND('',#4902,.T.); #2997=FACE_OUTER_BOUND('',#4903,.T.); #2998=FACE_OUTER_BOUND('',#4904,.T.); #2999=FACE_OUTER_BOUND('',#4905,.T.); #3000=FACE_OUTER_BOUND('',#4906,.T.); #3001=FACE_OUTER_BOUND('',#4907,.T.); #3002=FACE_OUTER_BOUND('',#4908,.T.); #3003=FACE_OUTER_BOUND('',#4909,.T.); #3004=FACE_OUTER_BOUND('',#4910,.T.); #3005=FACE_OUTER_BOUND('',#4911,.T.); #3006=FACE_OUTER_BOUND('',#4912,.T.); #3007=FACE_OUTER_BOUND('',#4913,.T.); #3008=FACE_OUTER_BOUND('',#4914,.T.); #3009=FACE_OUTER_BOUND('',#4915,.T.); #3010=FACE_OUTER_BOUND('',#4916,.T.); #3011=FACE_OUTER_BOUND('',#4917,.T.); #3012=FACE_OUTER_BOUND('',#4918,.T.); #3013=FACE_OUTER_BOUND('',#4919,.T.); #3014=FACE_OUTER_BOUND('',#4920,.T.); #3015=FACE_OUTER_BOUND('',#4921,.T.); #3016=FACE_OUTER_BOUND('',#4922,.T.); #3017=FACE_OUTER_BOUND('',#4923,.T.); #3018=FACE_OUTER_BOUND('',#4924,.T.); #3019=FACE_OUTER_BOUND('',#4925,.T.); #3020=FACE_OUTER_BOUND('',#4926,.T.); #3021=FACE_OUTER_BOUND('',#4927,.T.); #3022=FACE_OUTER_BOUND('',#4928,.T.); #3023=FACE_OUTER_BOUND('',#4929,.T.); #3024=FACE_OUTER_BOUND('',#4930,.T.); #3025=FACE_OUTER_BOUND('',#4931,.T.); #3026=FACE_OUTER_BOUND('',#4932,.T.); #3027=FACE_OUTER_BOUND('',#4933,.T.); #3028=FACE_OUTER_BOUND('',#4934,.T.); #3029=FACE_OUTER_BOUND('',#4935,.T.); #3030=FACE_OUTER_BOUND('',#4936,.T.); #3031=FACE_OUTER_BOUND('',#4937,.T.); #3032=FACE_OUTER_BOUND('',#4938,.T.); #3033=FACE_OUTER_BOUND('',#4939,.T.); #3034=FACE_OUTER_BOUND('',#4940,.T.); #3035=FACE_OUTER_BOUND('',#4941,.T.); #3036=FACE_OUTER_BOUND('',#4942,.T.); #3037=FACE_OUTER_BOUND('',#4945,.T.); #3038=FACE_OUTER_BOUND('',#4946,.T.); #3039=FACE_OUTER_BOUND('',#4947,.T.); #3040=FACE_OUTER_BOUND('',#4948,.T.); #3041=FACE_OUTER_BOUND('',#4949,.T.); #3042=FACE_OUTER_BOUND('',#4950,.T.); #3043=FACE_OUTER_BOUND('',#4951,.T.); #3044=FACE_OUTER_BOUND('',#4952,.T.); #3045=FACE_OUTER_BOUND('',#4953,.T.); #3046=FACE_OUTER_BOUND('',#4954,.T.); #3047=FACE_OUTER_BOUND('',#4955,.T.); #3048=FACE_OUTER_BOUND('',#4956,.T.); #3049=FACE_OUTER_BOUND('',#4957,.T.); #3050=FACE_OUTER_BOUND('',#4958,.T.); #3051=FACE_OUTER_BOUND('',#4959,.T.); #3052=FACE_OUTER_BOUND('',#4960,.T.); #3053=FACE_OUTER_BOUND('',#4961,.T.); #3054=FACE_OUTER_BOUND('',#4962,.T.); #3055=FACE_OUTER_BOUND('',#4963,.T.); #3056=FACE_OUTER_BOUND('',#4964,.T.); #3057=FACE_OUTER_BOUND('',#4965,.T.); #3058=FACE_OUTER_BOUND('',#4966,.T.); #3059=FACE_OUTER_BOUND('',#4967,.T.); #3060=FACE_OUTER_BOUND('',#4968,.T.); #3061=FACE_OUTER_BOUND('',#4969,.T.); #3062=FACE_OUTER_BOUND('',#4972,.T.); #3063=FACE_OUTER_BOUND('',#4973,.T.); #3064=FACE_OUTER_BOUND('',#4974,.T.); #3065=FACE_OUTER_BOUND('',#4975,.T.); #3066=FACE_OUTER_BOUND('',#4976,.T.); #3067=FACE_OUTER_BOUND('',#4977,.T.); #3068=FACE_OUTER_BOUND('',#4978,.T.); #3069=FACE_OUTER_BOUND('',#4979,.T.); #3070=FACE_OUTER_BOUND('',#4980,.T.); #3071=FACE_OUTER_BOUND('',#4981,.T.); #3072=FACE_OUTER_BOUND('',#4982,.T.); #3073=FACE_OUTER_BOUND('',#4983,.T.); #3074=FACE_OUTER_BOUND('',#4984,.T.); #3075=FACE_OUTER_BOUND('',#4985,.T.); #3076=FACE_OUTER_BOUND('',#4986,.T.); #3077=FACE_OUTER_BOUND('',#4987,.T.); #3078=FACE_OUTER_BOUND('',#4988,.T.); #3079=FACE_OUTER_BOUND('',#4989,.T.); #3080=FACE_OUTER_BOUND('',#4990,.T.); #3081=FACE_OUTER_BOUND('',#4991,.T.); #3082=FACE_OUTER_BOUND('',#4992,.T.); #3083=FACE_OUTER_BOUND('',#4993,.T.); #3084=FACE_OUTER_BOUND('',#4994,.T.); #3085=FACE_OUTER_BOUND('',#4995,.T.); #3086=FACE_OUTER_BOUND('',#4996,.T.); #3087=FACE_OUTER_BOUND('',#4997,.T.); #3088=FACE_OUTER_BOUND('',#4998,.T.); #3089=FACE_OUTER_BOUND('',#4999,.T.); #3090=FACE_OUTER_BOUND('',#5000,.T.); #3091=FACE_OUTER_BOUND('',#5001,.T.); #3092=FACE_OUTER_BOUND('',#5002,.T.); #3093=FACE_OUTER_BOUND('',#5003,.T.); #3094=FACE_OUTER_BOUND('',#5004,.T.); #3095=FACE_OUTER_BOUND('',#5005,.T.); #3096=FACE_OUTER_BOUND('',#5006,.T.); #3097=FACE_OUTER_BOUND('',#5007,.T.); #3098=FACE_OUTER_BOUND('',#5008,.T.); #3099=FACE_OUTER_BOUND('',#5009,.T.); #3100=FACE_OUTER_BOUND('',#5010,.T.); #3101=FACE_OUTER_BOUND('',#5011,.T.); #3102=FACE_OUTER_BOUND('',#5012,.T.); #3103=FACE_OUTER_BOUND('',#5013,.T.); #3104=FACE_OUTER_BOUND('',#5014,.T.); #3105=FACE_OUTER_BOUND('',#5015,.T.); #3106=FACE_OUTER_BOUND('',#5016,.T.); #3107=FACE_OUTER_BOUND('',#5017,.T.); #3108=FACE_OUTER_BOUND('',#5018,.T.); #3109=FACE_OUTER_BOUND('',#5019,.T.); #3110=FACE_OUTER_BOUND('',#5020,.T.); #3111=FACE_OUTER_BOUND('',#5021,.T.); #3112=FACE_OUTER_BOUND('',#5022,.T.); #3113=FACE_OUTER_BOUND('',#5023,.T.); #3114=FACE_OUTER_BOUND('',#5024,.T.); #3115=FACE_OUTER_BOUND('',#5025,.T.); #3116=FACE_OUTER_BOUND('',#5026,.T.); #3117=FACE_OUTER_BOUND('',#5027,.T.); #3118=FACE_OUTER_BOUND('',#5028,.T.); #3119=FACE_OUTER_BOUND('',#5029,.T.); #3120=FACE_OUTER_BOUND('',#5030,.T.); #3121=FACE_OUTER_BOUND('',#5031,.T.); #3122=FACE_OUTER_BOUND('',#5032,.T.); #3123=FACE_OUTER_BOUND('',#5033,.T.); #3124=FACE_OUTER_BOUND('',#5038,.T.); #3125=FACE_OUTER_BOUND('',#5039,.T.); #3126=FACE_OUTER_BOUND('',#5040,.T.); #3127=FACE_OUTER_BOUND('',#5041,.T.); #3128=FACE_OUTER_BOUND('',#5042,.T.); #3129=FACE_OUTER_BOUND('',#5043,.T.); #3130=FACE_OUTER_BOUND('',#5044,.T.); #3131=FACE_OUTER_BOUND('',#5045,.T.); #3132=FACE_OUTER_BOUND('',#5050,.T.); #3133=FACE_OUTER_BOUND('',#5051,.T.); #3134=FACE_OUTER_BOUND('',#5052,.T.); #3135=FACE_OUTER_BOUND('',#5053,.T.); #3136=FACE_OUTER_BOUND('',#5054,.T.); #3137=FACE_OUTER_BOUND('',#5055,.T.); #3138=FACE_OUTER_BOUND('',#5056,.T.); #3139=FACE_OUTER_BOUND('',#5057,.T.); #3140=FACE_OUTER_BOUND('',#5058,.T.); #3141=FACE_OUTER_BOUND('',#5059,.T.); #3142=FACE_OUTER_BOUND('',#5060,.T.); #3143=FACE_OUTER_BOUND('',#5061,.T.); #3144=FACE_OUTER_BOUND('',#5062,.T.); #3145=FACE_OUTER_BOUND('',#5063,.T.); #3146=FACE_OUTER_BOUND('',#5064,.T.); #3147=FACE_OUTER_BOUND('',#5065,.T.); #3148=FACE_OUTER_BOUND('',#5066,.T.); #3149=FACE_OUTER_BOUND('',#5067,.T.); #3150=FACE_OUTER_BOUND('',#5068,.T.); #3151=FACE_OUTER_BOUND('',#5069,.T.); #3152=FACE_OUTER_BOUND('',#5070,.T.); #3153=FACE_OUTER_BOUND('',#5071,.T.); #3154=FACE_OUTER_BOUND('',#5072,.T.); #3155=FACE_OUTER_BOUND('',#5073,.T.); #3156=FACE_OUTER_BOUND('',#5074,.T.); #3157=FACE_OUTER_BOUND('',#5075,.T.); #3158=FACE_OUTER_BOUND('',#5076,.T.); #3159=FACE_OUTER_BOUND('',#5077,.T.); #3160=FACE_OUTER_BOUND('',#5078,.T.); #3161=FACE_OUTER_BOUND('',#5079,.T.); #3162=FACE_OUTER_BOUND('',#5080,.T.); #3163=FACE_OUTER_BOUND('',#5081,.T.); #3164=FACE_OUTER_BOUND('',#5082,.T.); #3165=FACE_OUTER_BOUND('',#5083,.T.); #3166=FACE_OUTER_BOUND('',#5084,.T.); #3167=FACE_OUTER_BOUND('',#5085,.T.); #3168=FACE_OUTER_BOUND('',#5086,.T.); #3169=FACE_OUTER_BOUND('',#5087,.T.); #3170=FACE_OUTER_BOUND('',#5088,.T.); #3171=FACE_OUTER_BOUND('',#5089,.T.); #3172=FACE_OUTER_BOUND('',#5090,.T.); #3173=FACE_OUTER_BOUND('',#5091,.T.); #3174=FACE_OUTER_BOUND('',#5092,.T.); #3175=FACE_OUTER_BOUND('',#5093,.T.); #3176=FACE_OUTER_BOUND('',#5094,.T.); #3177=FACE_OUTER_BOUND('',#5095,.T.); #3178=FACE_OUTER_BOUND('',#5096,.T.); #3179=FACE_OUTER_BOUND('',#5097,.T.); #3180=FACE_OUTER_BOUND('',#5098,.T.); #3181=FACE_OUTER_BOUND('',#5099,.T.); #3182=FACE_OUTER_BOUND('',#5100,.T.); #3183=FACE_OUTER_BOUND('',#5101,.T.); #3184=FACE_OUTER_BOUND('',#5102,.T.); #3185=FACE_OUTER_BOUND('',#5103,.T.); #3186=FACE_OUTER_BOUND('',#5104,.T.); #3187=FACE_OUTER_BOUND('',#5105,.T.); #3188=FACE_OUTER_BOUND('',#5106,.T.); #3189=FACE_OUTER_BOUND('',#5107,.T.); #3190=FACE_OUTER_BOUND('',#5108,.T.); #3191=FACE_OUTER_BOUND('',#5109,.T.); #3192=FACE_OUTER_BOUND('',#5110,.T.); #3193=FACE_OUTER_BOUND('',#5111,.T.); #3194=FACE_OUTER_BOUND('',#5112,.T.); #3195=FACE_OUTER_BOUND('',#5113,.T.); #3196=FACE_OUTER_BOUND('',#5114,.T.); #3197=FACE_OUTER_BOUND('',#5115,.T.); #3198=FACE_OUTER_BOUND('',#5116,.T.); #3199=FACE_OUTER_BOUND('',#5117,.T.); #3200=FACE_OUTER_BOUND('',#5118,.T.); #3201=FACE_OUTER_BOUND('',#5119,.T.); #3202=FACE_OUTER_BOUND('',#5120,.T.); #3203=FACE_OUTER_BOUND('',#5121,.T.); #3204=FACE_OUTER_BOUND('',#5122,.T.); #3205=FACE_OUTER_BOUND('',#5123,.T.); #3206=FACE_OUTER_BOUND('',#5124,.T.); #3207=FACE_OUTER_BOUND('',#5125,.T.); #3208=FACE_OUTER_BOUND('',#5126,.T.); #3209=FACE_OUTER_BOUND('',#5127,.T.); #3210=FACE_OUTER_BOUND('',#5128,.T.); #3211=FACE_OUTER_BOUND('',#5129,.T.); #3212=FACE_OUTER_BOUND('',#5130,.T.); #3213=FACE_OUTER_BOUND('',#5131,.T.); #3214=FACE_OUTER_BOUND('',#5132,.T.); #3215=FACE_OUTER_BOUND('',#5133,.T.); #3216=FACE_OUTER_BOUND('',#5134,.T.); #3217=FACE_OUTER_BOUND('',#5135,.T.); #3218=FACE_OUTER_BOUND('',#5136,.T.); #3219=FACE_OUTER_BOUND('',#5137,.T.); #3220=FACE_OUTER_BOUND('',#5138,.T.); #3221=FACE_OUTER_BOUND('',#5139,.T.); #3222=FACE_OUTER_BOUND('',#5140,.T.); #3223=FACE_OUTER_BOUND('',#5141,.T.); #3224=FACE_OUTER_BOUND('',#5142,.T.); #3225=FACE_OUTER_BOUND('',#5143,.T.); #3226=FACE_OUTER_BOUND('',#5144,.T.); #3227=FACE_OUTER_BOUND('',#5145,.T.); #3228=FACE_OUTER_BOUND('',#5146,.T.); #3229=FACE_OUTER_BOUND('',#5147,.T.); #3230=FACE_OUTER_BOUND('',#5149,.T.); #3231=FACE_OUTER_BOUND('',#5150,.T.); #3232=FACE_OUTER_BOUND('',#5151,.T.); #3233=FACE_OUTER_BOUND('',#5152,.T.); #3234=FACE_OUTER_BOUND('',#5153,.T.); #3235=FACE_OUTER_BOUND('',#5154,.T.); #3236=FACE_OUTER_BOUND('',#5155,.T.); #3237=FACE_OUTER_BOUND('',#5156,.T.); #3238=FACE_OUTER_BOUND('',#5157,.T.); #3239=FACE_OUTER_BOUND('',#5158,.T.); #3240=FACE_OUTER_BOUND('',#5159,.T.); #3241=FACE_OUTER_BOUND('',#5160,.T.); #3242=FACE_OUTER_BOUND('',#5161,.T.); #3243=FACE_OUTER_BOUND('',#5162,.T.); #3244=FACE_OUTER_BOUND('',#5163,.T.); #3245=FACE_OUTER_BOUND('',#5164,.T.); #3246=FACE_OUTER_BOUND('',#5165,.T.); #3247=FACE_OUTER_BOUND('',#5166,.T.); #3248=FACE_OUTER_BOUND('',#5167,.T.); #3249=FACE_OUTER_BOUND('',#5169,.T.); #3250=FACE_OUTER_BOUND('',#5171,.T.); #3251=FACE_OUTER_BOUND('',#5173,.T.); #3252=FACE_OUTER_BOUND('',#5175,.T.); #3253=FACE_OUTER_BOUND('',#5176,.T.); #3254=FACE_OUTER_BOUND('',#5177,.T.); #3255=FACE_OUTER_BOUND('',#5178,.T.); #3256=FACE_OUTER_BOUND('',#5179,.T.); #3257=FACE_OUTER_BOUND('',#5180,.T.); #3258=FACE_OUTER_BOUND('',#5181,.T.); #3259=FACE_OUTER_BOUND('',#5182,.T.); #3260=FACE_OUTER_BOUND('',#5183,.T.); #3261=FACE_OUTER_BOUND('',#5184,.T.); #3262=FACE_OUTER_BOUND('',#5185,.T.); #3263=FACE_OUTER_BOUND('',#5186,.T.); #3264=FACE_OUTER_BOUND('',#5187,.T.); #3265=FACE_OUTER_BOUND('',#5188,.T.); #3266=FACE_OUTER_BOUND('',#5189,.T.); #3267=FACE_OUTER_BOUND('',#5190,.T.); #3268=FACE_OUTER_BOUND('',#5191,.T.); #3269=FACE_OUTER_BOUND('',#5192,.T.); #3270=FACE_OUTER_BOUND('',#5193,.T.); #3271=FACE_OUTER_BOUND('',#5194,.T.); #3272=FACE_OUTER_BOUND('',#5195,.T.); #3273=FACE_OUTER_BOUND('',#5196,.T.); #3274=FACE_OUTER_BOUND('',#5197,.T.); #3275=FACE_OUTER_BOUND('',#5198,.T.); #3276=FACE_OUTER_BOUND('',#5199,.T.); #3277=FACE_OUTER_BOUND('',#5200,.T.); #3278=FACE_OUTER_BOUND('',#5201,.T.); #3279=FACE_OUTER_BOUND('',#5202,.T.); #3280=FACE_OUTER_BOUND('',#5203,.T.); #3281=FACE_OUTER_BOUND('',#5204,.T.); #3282=FACE_OUTER_BOUND('',#5205,.T.); #3283=FACE_OUTER_BOUND('',#5206,.T.); #3284=FACE_OUTER_BOUND('',#5207,.T.); #3285=FACE_OUTER_BOUND('',#5208,.T.); #3286=FACE_OUTER_BOUND('',#5209,.T.); #3287=FACE_OUTER_BOUND('',#5210,.T.); #3288=FACE_OUTER_BOUND('',#5211,.T.); #3289=FACE_OUTER_BOUND('',#5212,.T.); #3290=FACE_OUTER_BOUND('',#5213,.T.); #3291=FACE_OUTER_BOUND('',#5214,.T.); #3292=FACE_OUTER_BOUND('',#5215,.T.); #3293=FACE_OUTER_BOUND('',#5216,.T.); #3294=FACE_OUTER_BOUND('',#5217,.T.); #3295=FACE_OUTER_BOUND('',#5218,.T.); #3296=FACE_OUTER_BOUND('',#5219,.T.); #3297=FACE_OUTER_BOUND('',#5220,.T.); #3298=FACE_OUTER_BOUND('',#5221,.T.); #3299=FACE_OUTER_BOUND('',#5222,.T.); #3300=FACE_OUTER_BOUND('',#5223,.T.); #3301=FACE_OUTER_BOUND('',#5224,.T.); #3302=FACE_OUTER_BOUND('',#5225,.T.); #3303=FACE_OUTER_BOUND('',#5226,.T.); #3304=FACE_OUTER_BOUND('',#5227,.T.); #3305=FACE_OUTER_BOUND('',#5228,.T.); #3306=FACE_OUTER_BOUND('',#5229,.T.); #3307=FACE_OUTER_BOUND('',#5230,.T.); #3308=FACE_OUTER_BOUND('',#5231,.T.); #3309=FACE_OUTER_BOUND('',#5232,.T.); #3310=FACE_OUTER_BOUND('',#5233,.T.); #3311=FACE_OUTER_BOUND('',#5234,.T.); #3312=FACE_OUTER_BOUND('',#5235,.T.); #3313=FACE_OUTER_BOUND('',#5236,.T.); #3314=FACE_OUTER_BOUND('',#5237,.T.); #3315=FACE_OUTER_BOUND('',#5238,.T.); #3316=FACE_OUTER_BOUND('',#5239,.T.); #3317=FACE_OUTER_BOUND('',#5240,.T.); #3318=FACE_OUTER_BOUND('',#5241,.T.); #3319=FACE_OUTER_BOUND('',#5242,.T.); #3320=FACE_OUTER_BOUND('',#5243,.T.); #3321=FACE_OUTER_BOUND('',#5244,.T.); #3322=FACE_OUTER_BOUND('',#5245,.T.); #3323=FACE_OUTER_BOUND('',#5246,.T.); #3324=FACE_OUTER_BOUND('',#5247,.T.); #3325=FACE_OUTER_BOUND('',#5248,.T.); #3326=FACE_OUTER_BOUND('',#5249,.T.); #3327=FACE_OUTER_BOUND('',#5250,.T.); #3328=FACE_OUTER_BOUND('',#5251,.T.); #3329=FACE_OUTER_BOUND('',#5252,.T.); #3330=FACE_OUTER_BOUND('',#5253,.T.); #3331=FACE_OUTER_BOUND('',#5254,.T.); #3332=FACE_OUTER_BOUND('',#5255,.T.); #3333=FACE_OUTER_BOUND('',#5256,.T.); #3334=FACE_OUTER_BOUND('',#5257,.T.); #3335=FACE_OUTER_BOUND('',#5258,.T.); #3336=FACE_OUTER_BOUND('',#5259,.T.); #3337=FACE_OUTER_BOUND('',#5260,.T.); #3338=FACE_OUTER_BOUND('',#5261,.T.); #3339=FACE_OUTER_BOUND('',#5262,.T.); #3340=FACE_OUTER_BOUND('',#5263,.T.); #3341=FACE_OUTER_BOUND('',#5264,.T.); #3342=FACE_OUTER_BOUND('',#5265,.T.); #3343=FACE_OUTER_BOUND('',#5266,.T.); #3344=FACE_OUTER_BOUND('',#5267,.T.); #3345=FACE_OUTER_BOUND('',#5268,.T.); #3346=FACE_OUTER_BOUND('',#5269,.T.); #3347=FACE_OUTER_BOUND('',#5270,.T.); #3348=FACE_OUTER_BOUND('',#5271,.T.); #3349=FACE_OUTER_BOUND('',#5272,.T.); #3350=FACE_OUTER_BOUND('',#5273,.T.); #3351=FACE_OUTER_BOUND('',#5274,.T.); #3352=FACE_OUTER_BOUND('',#5275,.T.); #3353=FACE_OUTER_BOUND('',#5276,.T.); #3354=FACE_OUTER_BOUND('',#5277,.T.); #3355=FACE_OUTER_BOUND('',#5278,.T.); #3356=FACE_OUTER_BOUND('',#5279,.T.); #3357=FACE_OUTER_BOUND('',#5280,.T.); #3358=FACE_OUTER_BOUND('',#5281,.T.); #3359=FACE_OUTER_BOUND('',#5282,.T.); #3360=FACE_OUTER_BOUND('',#5283,.T.); #3361=FACE_OUTER_BOUND('',#5284,.T.); #3362=FACE_OUTER_BOUND('',#5285,.T.); #3363=FACE_OUTER_BOUND('',#5286,.T.); #3364=FACE_OUTER_BOUND('',#5287,.T.); #3365=FACE_OUTER_BOUND('',#5288,.T.); #3366=FACE_OUTER_BOUND('',#5289,.T.); #3367=FACE_OUTER_BOUND('',#5290,.T.); #3368=FACE_OUTER_BOUND('',#5291,.T.); #3369=FACE_OUTER_BOUND('',#5292,.T.); #3370=FACE_OUTER_BOUND('',#5293,.T.); #3371=FACE_OUTER_BOUND('',#5294,.T.); #3372=FACE_OUTER_BOUND('',#5295,.T.); #3373=FACE_OUTER_BOUND('',#5296,.T.); #3374=FACE_OUTER_BOUND('',#5297,.T.); #3375=FACE_OUTER_BOUND('',#5298,.T.); #3376=FACE_OUTER_BOUND('',#5299,.T.); #3377=FACE_OUTER_BOUND('',#5300,.T.); #3378=FACE_OUTER_BOUND('',#5301,.T.); #3379=FACE_OUTER_BOUND('',#5302,.T.); #3380=FACE_OUTER_BOUND('',#5303,.T.); #3381=FACE_OUTER_BOUND('',#5304,.T.); #3382=FACE_OUTER_BOUND('',#5305,.T.); #3383=FACE_OUTER_BOUND('',#5306,.T.); #3384=FACE_OUTER_BOUND('',#5307,.T.); #3385=FACE_OUTER_BOUND('',#5308,.T.); #3386=FACE_OUTER_BOUND('',#5309,.T.); #3387=FACE_OUTER_BOUND('',#5310,.T.); #3388=FACE_OUTER_BOUND('',#5311,.T.); #3389=FACE_OUTER_BOUND('',#5312,.T.); #3390=FACE_OUTER_BOUND('',#5313,.T.); #3391=FACE_OUTER_BOUND('',#5314,.T.); #3392=FACE_OUTER_BOUND('',#5315,.T.); #3393=FACE_OUTER_BOUND('',#5316,.T.); #3394=FACE_OUTER_BOUND('',#5317,.T.); #3395=FACE_OUTER_BOUND('',#5318,.T.); #3396=FACE_OUTER_BOUND('',#5319,.T.); #3397=FACE_OUTER_BOUND('',#5320,.T.); #3398=FACE_OUTER_BOUND('',#5321,.T.); #3399=FACE_OUTER_BOUND('',#5322,.T.); #3400=FACE_OUTER_BOUND('',#5323,.T.); #3401=FACE_OUTER_BOUND('',#5324,.T.); #3402=FACE_OUTER_BOUND('',#5325,.T.); #3403=FACE_OUTER_BOUND('',#5326,.T.); #3404=FACE_OUTER_BOUND('',#5327,.T.); #3405=FACE_OUTER_BOUND('',#5328,.T.); #3406=FACE_OUTER_BOUND('',#5329,.T.); #3407=FACE_OUTER_BOUND('',#5330,.T.); #3408=FACE_OUTER_BOUND('',#5331,.T.); #3409=FACE_OUTER_BOUND('',#5332,.T.); #3410=FACE_OUTER_BOUND('',#5333,.T.); #3411=FACE_OUTER_BOUND('',#5334,.T.); #3412=FACE_OUTER_BOUND('',#5335,.T.); #3413=FACE_OUTER_BOUND('',#5336,.T.); #3414=FACE_OUTER_BOUND('',#5337,.T.); #3415=FACE_OUTER_BOUND('',#5338,.T.); #3416=FACE_OUTER_BOUND('',#5339,.T.); #3417=FACE_OUTER_BOUND('',#5340,.T.); #3418=FACE_OUTER_BOUND('',#5341,.T.); #3419=FACE_OUTER_BOUND('',#5342,.T.); #3420=FACE_OUTER_BOUND('',#5343,.T.); #3421=FACE_OUTER_BOUND('',#5344,.T.); #3422=FACE_OUTER_BOUND('',#5345,.T.); #3423=FACE_OUTER_BOUND('',#5346,.T.); #3424=FACE_OUTER_BOUND('',#5347,.T.); #3425=FACE_OUTER_BOUND('',#5348,.T.); #3426=FACE_OUTER_BOUND('',#5349,.T.); #3427=FACE_OUTER_BOUND('',#5350,.T.); #3428=FACE_OUTER_BOUND('',#5351,.T.); #3429=FACE_OUTER_BOUND('',#5352,.T.); #3430=FACE_OUTER_BOUND('',#5353,.T.); #3431=FACE_OUTER_BOUND('',#5354,.T.); #3432=FACE_OUTER_BOUND('',#5355,.T.); #3433=FACE_OUTER_BOUND('',#5359,.T.); #3434=FACE_OUTER_BOUND('',#5363,.T.); #3435=FACE_OUTER_BOUND('',#5364,.T.); #3436=FACE_OUTER_BOUND('',#5365,.T.); #3437=FACE_OUTER_BOUND('',#5366,.T.); #3438=FACE_OUTER_BOUND('',#5367,.T.); #3439=FACE_OUTER_BOUND('',#5368,.T.); #3440=FACE_OUTER_BOUND('',#5369,.T.); #3441=FACE_OUTER_BOUND('',#5370,.T.); #3442=FACE_OUTER_BOUND('',#5371,.T.); #3443=FACE_OUTER_BOUND('',#5372,.T.); #3444=FACE_OUTER_BOUND('',#5373,.T.); #3445=FACE_OUTER_BOUND('',#5374,.T.); #3446=FACE_OUTER_BOUND('',#5375,.T.); #3447=FACE_OUTER_BOUND('',#5376,.T.); #3448=FACE_OUTER_BOUND('',#5377,.T.); #3449=FACE_OUTER_BOUND('',#5378,.T.); #3450=FACE_OUTER_BOUND('',#5379,.T.); #3451=FACE_OUTER_BOUND('',#5380,.T.); #3452=FACE_OUTER_BOUND('',#5381,.T.); #3453=FACE_OUTER_BOUND('',#5382,.T.); #3454=FACE_OUTER_BOUND('',#5383,.T.); #3455=FACE_OUTER_BOUND('',#5384,.T.); #3456=FACE_OUTER_BOUND('',#5385,.T.); #3457=FACE_OUTER_BOUND('',#5386,.T.); #3458=FACE_OUTER_BOUND('',#5387,.T.); #3459=FACE_OUTER_BOUND('',#5388,.T.); #3460=FACE_OUTER_BOUND('',#5389,.T.); #3461=FACE_OUTER_BOUND('',#5390,.T.); #3462=FACE_OUTER_BOUND('',#5391,.T.); #3463=FACE_OUTER_BOUND('',#5392,.T.); #3464=FACE_OUTER_BOUND('',#5393,.T.); #3465=FACE_OUTER_BOUND('',#5394,.T.); #3466=FACE_OUTER_BOUND('',#5395,.T.); #3467=FACE_OUTER_BOUND('',#5396,.T.); #3468=FACE_OUTER_BOUND('',#5397,.T.); #3469=FACE_OUTER_BOUND('',#5398,.T.); #3470=FACE_OUTER_BOUND('',#5399,.T.); #3471=FACE_OUTER_BOUND('',#5400,.T.); #3472=FACE_OUTER_BOUND('',#5401,.T.); #3473=FACE_OUTER_BOUND('',#5402,.T.); #3474=FACE_OUTER_BOUND('',#5403,.T.); #3475=FACE_OUTER_BOUND('',#5404,.T.); #3476=FACE_OUTER_BOUND('',#5405,.T.); #3477=FACE_OUTER_BOUND('',#5406,.T.); #3478=FACE_OUTER_BOUND('',#5407,.T.); #3479=FACE_OUTER_BOUND('',#5408,.T.); #3480=FACE_OUTER_BOUND('',#5409,.T.); #3481=FACE_OUTER_BOUND('',#5410,.T.); #3482=FACE_OUTER_BOUND('',#5411,.T.); #3483=FACE_OUTER_BOUND('',#5412,.T.); #3484=FACE_OUTER_BOUND('',#5413,.T.); #3485=FACE_OUTER_BOUND('',#5414,.T.); #3486=FACE_OUTER_BOUND('',#5415,.T.); #3487=FACE_OUTER_BOUND('',#5416,.T.); #3488=FACE_OUTER_BOUND('',#5417,.T.); #3489=FACE_OUTER_BOUND('',#5418,.T.); #3490=FACE_OUTER_BOUND('',#5419,.T.); #3491=FACE_OUTER_BOUND('',#5420,.T.); #3492=FACE_OUTER_BOUND('',#5421,.T.); #3493=FACE_OUTER_BOUND('',#5422,.T.); #3494=FACE_OUTER_BOUND('',#5423,.T.); #3495=FACE_OUTER_BOUND('',#5424,.T.); #3496=FACE_OUTER_BOUND('',#5425,.T.); #3497=FACE_OUTER_BOUND('',#5426,.T.); #3498=FACE_OUTER_BOUND('',#5427,.T.); #3499=FACE_OUTER_BOUND('',#5428,.T.); #3500=FACE_OUTER_BOUND('',#5429,.T.); #3501=FACE_OUTER_BOUND('',#5430,.T.); #3502=FACE_OUTER_BOUND('',#5431,.T.); #3503=FACE_OUTER_BOUND('',#5432,.T.); #3504=FACE_OUTER_BOUND('',#5433,.T.); #3505=FACE_OUTER_BOUND('',#5434,.T.); #3506=FACE_OUTER_BOUND('',#5435,.T.); #3507=FACE_OUTER_BOUND('',#5436,.T.); #3508=FACE_OUTER_BOUND('',#5437,.T.); #3509=FACE_OUTER_BOUND('',#5438,.T.); #3510=FACE_OUTER_BOUND('',#5439,.T.); #3511=FACE_OUTER_BOUND('',#5440,.T.); #3512=FACE_OUTER_BOUND('',#5441,.T.); #3513=FACE_OUTER_BOUND('',#5442,.T.); #3514=FACE_OUTER_BOUND('',#5443,.T.); #3515=FACE_OUTER_BOUND('',#5445,.T.); #3516=FACE_OUTER_BOUND('',#5446,.T.); #3517=FACE_OUTER_BOUND('',#5447,.T.); #3518=FACE_OUTER_BOUND('',#5448,.T.); #3519=FACE_OUTER_BOUND('',#5449,.T.); #3520=FACE_OUTER_BOUND('',#5450,.T.); #3521=FACE_OUTER_BOUND('',#5451,.T.); #3522=FACE_OUTER_BOUND('',#5452,.T.); #3523=FACE_OUTER_BOUND('',#5453,.T.); #3524=FACE_OUTER_BOUND('',#5455,.T.); #3525=FACE_OUTER_BOUND('',#5456,.T.); #3526=FACE_OUTER_BOUND('',#5457,.T.); #3527=FACE_OUTER_BOUND('',#5458,.T.); #3528=FACE_OUTER_BOUND('',#5459,.T.); #3529=FACE_OUTER_BOUND('',#5460,.T.); #3530=FACE_OUTER_BOUND('',#5461,.T.); #3531=FACE_OUTER_BOUND('',#5462,.T.); #3532=FACE_OUTER_BOUND('',#5463,.T.); #3533=FACE_OUTER_BOUND('',#5464,.T.); #3534=FACE_OUTER_BOUND('',#5465,.T.); #3535=FACE_OUTER_BOUND('',#5466,.T.); #3536=FACE_OUTER_BOUND('',#5467,.T.); #3537=FACE_OUTER_BOUND('',#5468,.T.); #3538=FACE_OUTER_BOUND('',#5470,.T.); #3539=FACE_OUTER_BOUND('',#5472,.T.); #3540=FACE_OUTER_BOUND('',#5473,.T.); #3541=FACE_OUTER_BOUND('',#5474,.T.); #3542=FACE_OUTER_BOUND('',#5475,.T.); #3543=FACE_OUTER_BOUND('',#5476,.T.); #3544=FACE_OUTER_BOUND('',#5477,.T.); #3545=FACE_OUTER_BOUND('',#5478,.T.); #3546=FACE_OUTER_BOUND('',#5479,.T.); #3547=FACE_OUTER_BOUND('',#5480,.T.); #3548=FACE_OUTER_BOUND('',#5481,.T.); #3549=FACE_OUTER_BOUND('',#5482,.T.); #3550=FACE_OUTER_BOUND('',#5483,.T.); #3551=FACE_OUTER_BOUND('',#5484,.T.); #3552=FACE_OUTER_BOUND('',#5485,.T.); #3553=FACE_OUTER_BOUND('',#5486,.T.); #3554=FACE_OUTER_BOUND('',#5487,.T.); #3555=FACE_OUTER_BOUND('',#5489,.T.); #3556=FACE_OUTER_BOUND('',#5490,.T.); #3557=FACE_OUTER_BOUND('',#5491,.T.); #3558=FACE_OUTER_BOUND('',#5492,.T.); #3559=FACE_OUTER_BOUND('',#5493,.T.); #3560=FACE_OUTER_BOUND('',#5494,.T.); #3561=FACE_OUTER_BOUND('',#5495,.T.); #3562=FACE_OUTER_BOUND('',#5496,.T.); #3563=FACE_OUTER_BOUND('',#5497,.T.); #3564=FACE_OUTER_BOUND('',#5498,.T.); #3565=FACE_OUTER_BOUND('',#5499,.T.); #3566=FACE_OUTER_BOUND('',#5500,.T.); #3567=FACE_OUTER_BOUND('',#5501,.T.); #3568=FACE_OUTER_BOUND('',#5502,.T.); #3569=FACE_OUTER_BOUND('',#5503,.T.); #3570=FACE_OUTER_BOUND('',#5504,.T.); #3571=FACE_OUTER_BOUND('',#5505,.T.); #3572=FACE_OUTER_BOUND('',#5506,.T.); #3573=FACE_OUTER_BOUND('',#5507,.T.); #3574=FACE_OUTER_BOUND('',#5508,.T.); #3575=FACE_OUTER_BOUND('',#5509,.T.); #3576=FACE_OUTER_BOUND('',#5510,.T.); #3577=FACE_OUTER_BOUND('',#5511,.T.); #3578=FACE_OUTER_BOUND('',#5512,.T.); #3579=FACE_OUTER_BOUND('',#5513,.T.); #3580=FACE_OUTER_BOUND('',#5514,.T.); #3581=FACE_OUTER_BOUND('',#5515,.T.); #3582=FACE_OUTER_BOUND('',#5516,.T.); #3583=FACE_OUTER_BOUND('',#5517,.T.); #3584=FACE_OUTER_BOUND('',#5518,.T.); #3585=FACE_OUTER_BOUND('',#5519,.T.); #3586=FACE_OUTER_BOUND('',#5520,.T.); #3587=FACE_OUTER_BOUND('',#5521,.T.); #3588=FACE_OUTER_BOUND('',#5522,.T.); #3589=FACE_OUTER_BOUND('',#5525,.T.); #3590=FACE_OUTER_BOUND('',#5530,.T.); #3591=FACE_OUTER_BOUND('',#5531,.T.); #3592=FACE_OUTER_BOUND('',#5532,.T.); #3593=FACE_OUTER_BOUND('',#5533,.T.); #3594=FACE_OUTER_BOUND('',#5534,.T.); #3595=FACE_OUTER_BOUND('',#5535,.T.); #3596=FACE_OUTER_BOUND('',#5536,.T.); #3597=FACE_OUTER_BOUND('',#5537,.T.); #3598=FACE_OUTER_BOUND('',#5538,.T.); #3599=FACE_OUTER_BOUND('',#5539,.T.); #3600=FACE_OUTER_BOUND('',#5540,.T.); #3601=FACE_OUTER_BOUND('',#5541,.T.); #3602=FACE_OUTER_BOUND('',#5542,.T.); #3603=FACE_OUTER_BOUND('',#5543,.T.); #3604=FACE_OUTER_BOUND('',#5544,.T.); #3605=FACE_OUTER_BOUND('',#5545,.T.); #3606=FACE_OUTER_BOUND('',#5546,.T.); #3607=FACE_OUTER_BOUND('',#5547,.T.); #3608=FACE_OUTER_BOUND('',#5548,.T.); #3609=FACE_OUTER_BOUND('',#5549,.T.); #3610=FACE_OUTER_BOUND('',#5550,.T.); #3611=FACE_OUTER_BOUND('',#5551,.T.); #3612=FACE_OUTER_BOUND('',#5552,.T.); #3613=FACE_OUTER_BOUND('',#5553,.T.); #3614=FACE_OUTER_BOUND('',#5554,.T.); #3615=FACE_OUTER_BOUND('',#5555,.T.); #3616=FACE_OUTER_BOUND('',#5556,.T.); #3617=FACE_OUTER_BOUND('',#5557,.T.); #3618=FACE_OUTER_BOUND('',#5558,.T.); #3619=FACE_OUTER_BOUND('',#5559,.T.); #3620=FACE_OUTER_BOUND('',#5560,.T.); #3621=FACE_OUTER_BOUND('',#5561,.T.); #3622=FACE_OUTER_BOUND('',#5562,.T.); #3623=FACE_OUTER_BOUND('',#5563,.T.); #3624=FACE_OUTER_BOUND('',#5564,.T.); #3625=FACE_OUTER_BOUND('',#5565,.T.); #3626=FACE_OUTER_BOUND('',#5566,.T.); #3627=FACE_OUTER_BOUND('',#5568,.T.); #3628=FACE_OUTER_BOUND('',#5569,.T.); #3629=FACE_OUTER_BOUND('',#5570,.T.); #3630=FACE_OUTER_BOUND('',#5571,.T.); #3631=FACE_OUTER_BOUND('',#5572,.T.); #3632=FACE_OUTER_BOUND('',#5573,.T.); #3633=FACE_OUTER_BOUND('',#5574,.T.); #3634=FACE_OUTER_BOUND('',#5575,.T.); #3635=FACE_OUTER_BOUND('',#5576,.T.); #3636=FACE_OUTER_BOUND('',#5578,.T.); #3637=FACE_OUTER_BOUND('',#5579,.T.); #3638=FACE_OUTER_BOUND('',#5580,.T.); #3639=FACE_OUTER_BOUND('',#5581,.T.); #3640=FACE_OUTER_BOUND('',#5582,.T.); #3641=FACE_OUTER_BOUND('',#5583,.T.); #3642=FACE_OUTER_BOUND('',#5584,.T.); #3643=FACE_OUTER_BOUND('',#5585,.T.); #3644=FACE_OUTER_BOUND('',#5586,.T.); #3645=FACE_OUTER_BOUND('',#5587,.T.); #3646=FACE_OUTER_BOUND('',#5588,.T.); #3647=FACE_OUTER_BOUND('',#5589,.T.); #3648=FACE_OUTER_BOUND('',#5590,.T.); #3649=FACE_OUTER_BOUND('',#5591,.T.); #3650=FACE_OUTER_BOUND('',#5592,.T.); #3651=FACE_OUTER_BOUND('',#5593,.T.); #3652=FACE_OUTER_BOUND('',#5594,.T.); #3653=FACE_OUTER_BOUND('',#5595,.T.); #3654=FACE_OUTER_BOUND('',#5596,.T.); #3655=FACE_OUTER_BOUND('',#5597,.T.); #3656=FACE_OUTER_BOUND('',#5598,.T.); #3657=FACE_OUTER_BOUND('',#5599,.T.); #3658=FACE_OUTER_BOUND('',#5600,.T.); #3659=FACE_OUTER_BOUND('',#5601,.T.); #3660=FACE_OUTER_BOUND('',#5602,.T.); #3661=FACE_OUTER_BOUND('',#5603,.T.); #3662=FACE_OUTER_BOUND('',#5604,.T.); #3663=FACE_OUTER_BOUND('',#5605,.T.); #3664=FACE_OUTER_BOUND('',#5606,.T.); #3665=FACE_OUTER_BOUND('',#5607,.T.); #3666=FACE_OUTER_BOUND('',#5608,.T.); #3667=FACE_OUTER_BOUND('',#5609,.T.); #3668=FACE_OUTER_BOUND('',#5610,.T.); #3669=FACE_OUTER_BOUND('',#5611,.T.); #3670=FACE_OUTER_BOUND('',#5612,.T.); #3671=FACE_OUTER_BOUND('',#5613,.T.); #3672=FACE_OUTER_BOUND('',#5614,.T.); #3673=FACE_OUTER_BOUND('',#5615,.T.); #3674=FACE_OUTER_BOUND('',#5616,.T.); #3675=FACE_OUTER_BOUND('',#5617,.T.); #3676=FACE_OUTER_BOUND('',#5618,.T.); #3677=FACE_OUTER_BOUND('',#5619,.T.); #3678=FACE_OUTER_BOUND('',#5620,.T.); #3679=FACE_OUTER_BOUND('',#5621,.T.); #3680=FACE_OUTER_BOUND('',#5622,.T.); #3681=FACE_OUTER_BOUND('',#5623,.T.); #3682=FACE_OUTER_BOUND('',#5624,.T.); #3683=FACE_OUTER_BOUND('',#5625,.T.); #3684=FACE_OUTER_BOUND('',#5626,.T.); #3685=FACE_OUTER_BOUND('',#5627,.T.); #3686=FACE_OUTER_BOUND('',#5628,.T.); #3687=FACE_OUTER_BOUND('',#5629,.T.); #3688=FACE_OUTER_BOUND('',#5630,.T.); #3689=FACE_OUTER_BOUND('',#5631,.T.); #3690=FACE_OUTER_BOUND('',#5632,.T.); #3691=FACE_OUTER_BOUND('',#5633,.T.); #3692=FACE_OUTER_BOUND('',#5634,.T.); #3693=FACE_OUTER_BOUND('',#5635,.T.); #3694=FACE_OUTER_BOUND('',#5636,.T.); #3695=FACE_OUTER_BOUND('',#5637,.T.); #3696=FACE_OUTER_BOUND('',#5638,.T.); #3697=FACE_OUTER_BOUND('',#5639,.T.); #3698=FACE_OUTER_BOUND('',#5640,.T.); #3699=FACE_OUTER_BOUND('',#5641,.T.); #3700=FACE_OUTER_BOUND('',#5642,.T.); #3701=FACE_OUTER_BOUND('',#5643,.T.); #3702=FACE_OUTER_BOUND('',#5644,.T.); #3703=FACE_OUTER_BOUND('',#5645,.T.); #3704=FACE_OUTER_BOUND('',#5646,.T.); #3705=FACE_OUTER_BOUND('',#5647,.T.); #3706=FACE_OUTER_BOUND('',#5648,.T.); #3707=FACE_OUTER_BOUND('',#5649,.T.); #3708=FACE_OUTER_BOUND('',#5650,.T.); #3709=FACE_OUTER_BOUND('',#5651,.T.); #3710=FACE_OUTER_BOUND('',#5652,.T.); #3711=FACE_OUTER_BOUND('',#5653,.T.); #3712=FACE_OUTER_BOUND('',#5654,.T.); #3713=FACE_OUTER_BOUND('',#5655,.T.); #3714=FACE_OUTER_BOUND('',#5656,.T.); #3715=FACE_OUTER_BOUND('',#5657,.T.); #3716=FACE_OUTER_BOUND('',#5658,.T.); #3717=FACE_OUTER_BOUND('',#5659,.T.); #3718=FACE_OUTER_BOUND('',#5660,.T.); #3719=FACE_OUTER_BOUND('',#5661,.T.); #3720=FACE_OUTER_BOUND('',#5662,.T.); #3721=FACE_OUTER_BOUND('',#5663,.T.); #3722=FACE_OUTER_BOUND('',#5664,.T.); #3723=FACE_OUTER_BOUND('',#5665,.T.); #3724=FACE_OUTER_BOUND('',#5666,.T.); #3725=FACE_OUTER_BOUND('',#5667,.T.); #3726=FACE_OUTER_BOUND('',#5668,.T.); #3727=FACE_OUTER_BOUND('',#5669,.T.); #3728=FACE_OUTER_BOUND('',#5670,.T.); #3729=FACE_OUTER_BOUND('',#5671,.T.); #3730=FACE_OUTER_BOUND('',#5672,.T.); #3731=FACE_OUTER_BOUND('',#5673,.T.); #3732=FACE_OUTER_BOUND('',#5674,.T.); #3733=FACE_OUTER_BOUND('',#5675,.T.); #3734=FACE_OUTER_BOUND('',#5676,.T.); #3735=FACE_OUTER_BOUND('',#5677,.T.); #3736=FACE_OUTER_BOUND('',#5678,.T.); #3737=FACE_OUTER_BOUND('',#5679,.T.); #3738=FACE_OUTER_BOUND('',#5680,.T.); #3739=FACE_OUTER_BOUND('',#5681,.T.); #3740=FACE_OUTER_BOUND('',#5682,.T.); #3741=FACE_OUTER_BOUND('',#5683,.T.); #3742=FACE_OUTER_BOUND('',#5684,.T.); #3743=FACE_OUTER_BOUND('',#5685,.T.); #3744=FACE_OUTER_BOUND('',#5686,.T.); #3745=FACE_OUTER_BOUND('',#5687,.T.); #3746=FACE_OUTER_BOUND('',#5688,.T.); #3747=FACE_OUTER_BOUND('',#5689,.T.); #3748=FACE_OUTER_BOUND('',#5690,.T.); #3749=FACE_OUTER_BOUND('',#5691,.T.); #3750=FACE_OUTER_BOUND('',#5692,.T.); #3751=FACE_OUTER_BOUND('',#5693,.T.); #3752=FACE_OUTER_BOUND('',#5694,.T.); #3753=FACE_OUTER_BOUND('',#5695,.T.); #3754=FACE_OUTER_BOUND('',#5696,.T.); #3755=FACE_OUTER_BOUND('',#5697,.T.); #3756=FACE_OUTER_BOUND('',#5698,.T.); #3757=FACE_OUTER_BOUND('',#5699,.T.); #3758=FACE_OUTER_BOUND('',#5700,.T.); #3759=FACE_OUTER_BOUND('',#5701,.T.); #3760=FACE_OUTER_BOUND('',#5702,.T.); #3761=FACE_OUTER_BOUND('',#5703,.T.); #3762=FACE_OUTER_BOUND('',#5704,.T.); #3763=FACE_OUTER_BOUND('',#5705,.T.); #3764=FACE_OUTER_BOUND('',#5706,.T.); #3765=FACE_OUTER_BOUND('',#5707,.T.); #3766=FACE_OUTER_BOUND('',#5708,.T.); #3767=FACE_OUTER_BOUND('',#5709,.T.); #3768=FACE_OUTER_BOUND('',#5710,.T.); #3769=FACE_OUTER_BOUND('',#5711,.T.); #3770=FACE_OUTER_BOUND('',#5712,.T.); #3771=FACE_OUTER_BOUND('',#5713,.T.); #3772=FACE_OUTER_BOUND('',#5714,.T.); #3773=FACE_OUTER_BOUND('',#5715,.T.); #3774=FACE_OUTER_BOUND('',#5716,.T.); #3775=FACE_OUTER_BOUND('',#5717,.T.); #3776=FACE_OUTER_BOUND('',#5718,.T.); #3777=FACE_OUTER_BOUND('',#5719,.T.); #3778=FACE_OUTER_BOUND('',#5720,.T.); #3779=FACE_OUTER_BOUND('',#5721,.T.); #3780=FACE_OUTER_BOUND('',#5722,.T.); #3781=FACE_OUTER_BOUND('',#5723,.T.); #3782=FACE_OUTER_BOUND('',#5724,.T.); #3783=FACE_OUTER_BOUND('',#5725,.T.); #3784=FACE_OUTER_BOUND('',#5726,.T.); #3785=FACE_OUTER_BOUND('',#5727,.T.); #3786=FACE_OUTER_BOUND('',#5728,.T.); #3787=FACE_OUTER_BOUND('',#5729,.T.); #3788=FACE_OUTER_BOUND('',#5730,.T.); #3789=FACE_OUTER_BOUND('',#5731,.T.); #3790=FACE_OUTER_BOUND('',#5732,.T.); #3791=FACE_OUTER_BOUND('',#5733,.T.); #3792=FACE_OUTER_BOUND('',#5734,.T.); #3793=FACE_OUTER_BOUND('',#5735,.T.); #3794=FACE_OUTER_BOUND('',#5736,.T.); #3795=FACE_OUTER_BOUND('',#5755,.T.); #3796=FACE_OUTER_BOUND('',#5756,.T.); #3797=FACE_OUTER_BOUND('',#5757,.T.); #3798=FACE_OUTER_BOUND('',#5758,.T.); #3799=FACE_OUTER_BOUND('',#5759,.T.); #3800=FACE_OUTER_BOUND('',#5760,.T.); #3801=FACE_OUTER_BOUND('',#5761,.T.); #3802=FACE_OUTER_BOUND('',#5762,.T.); #3803=FACE_OUTER_BOUND('',#5763,.T.); #3804=FACE_OUTER_BOUND('',#5764,.T.); #3805=FACE_OUTER_BOUND('',#5765,.T.); #3806=FACE_OUTER_BOUND('',#5766,.T.); #3807=FACE_OUTER_BOUND('',#5767,.T.); #3808=FACE_OUTER_BOUND('',#5768,.T.); #3809=FACE_OUTER_BOUND('',#5769,.T.); #3810=FACE_OUTER_BOUND('',#5770,.T.); #3811=FACE_OUTER_BOUND('',#5771,.T.); #3812=FACE_OUTER_BOUND('',#5772,.T.); #3813=FACE_OUTER_BOUND('',#5773,.T.); #3814=FACE_OUTER_BOUND('',#5775,.T.); #3815=FACE_OUTER_BOUND('',#5776,.T.); #3816=FACE_OUTER_BOUND('',#5777,.T.); #3817=FACE_OUTER_BOUND('',#5778,.T.); #3818=FACE_OUTER_BOUND('',#5779,.T.); #3819=FACE_OUTER_BOUND('',#5780,.T.); #3820=FACE_OUTER_BOUND('',#5781,.T.); #3821=FACE_OUTER_BOUND('',#5782,.T.); #3822=FACE_OUTER_BOUND('',#5783,.T.); #3823=FACE_OUTER_BOUND('',#5784,.T.); #3824=FACE_OUTER_BOUND('',#5785,.T.); #3825=FACE_OUTER_BOUND('',#5786,.T.); #3826=FACE_OUTER_BOUND('',#5787,.T.); #3827=FACE_OUTER_BOUND('',#5788,.T.); #3828=FACE_OUTER_BOUND('',#5789,.T.); #3829=FACE_OUTER_BOUND('',#5790,.T.); #3830=FACE_OUTER_BOUND('',#5791,.T.); #3831=FACE_OUTER_BOUND('',#5792,.T.); #3832=FACE_OUTER_BOUND('',#5793,.T.); #3833=FACE_OUTER_BOUND('',#5794,.T.); #3834=FACE_OUTER_BOUND('',#5795,.T.); #3835=FACE_OUTER_BOUND('',#5796,.T.); #3836=FACE_OUTER_BOUND('',#5797,.T.); #3837=FACE_OUTER_BOUND('',#5798,.T.); #3838=FACE_OUTER_BOUND('',#5799,.T.); #3839=FACE_OUTER_BOUND('',#5800,.T.); #3840=FACE_OUTER_BOUND('',#5801,.T.); #3841=FACE_OUTER_BOUND('',#5802,.T.); #3842=FACE_OUTER_BOUND('',#5803,.T.); #3843=FACE_OUTER_BOUND('',#5804,.T.); #3844=FACE_OUTER_BOUND('',#5805,.T.); #3845=FACE_OUTER_BOUND('',#5806,.T.); #3846=FACE_OUTER_BOUND('',#5807,.T.); #3847=FACE_OUTER_BOUND('',#5808,.T.); #3848=FACE_OUTER_BOUND('',#5809,.T.); #3849=FACE_OUTER_BOUND('',#5810,.T.); #3850=FACE_OUTER_BOUND('',#5811,.T.); #3851=FACE_OUTER_BOUND('',#5812,.T.); #3852=FACE_OUTER_BOUND('',#5813,.T.); #3853=FACE_OUTER_BOUND('',#5814,.T.); #3854=FACE_OUTER_BOUND('',#5815,.T.); #3855=FACE_OUTER_BOUND('',#5816,.T.); #3856=FACE_OUTER_BOUND('',#5817,.T.); #3857=FACE_OUTER_BOUND('',#5818,.T.); #3858=FACE_OUTER_BOUND('',#5819,.T.); #3859=FACE_OUTER_BOUND('',#5820,.T.); #3860=FACE_OUTER_BOUND('',#5821,.T.); #3861=FACE_OUTER_BOUND('',#5822,.T.); #3862=FACE_OUTER_BOUND('',#5823,.T.); #3863=FACE_OUTER_BOUND('',#5824,.T.); #3864=FACE_OUTER_BOUND('',#5825,.T.); #3865=FACE_OUTER_BOUND('',#5826,.T.); #3866=FACE_OUTER_BOUND('',#5827,.T.); #3867=FACE_OUTER_BOUND('',#5828,.T.); #3868=FACE_OUTER_BOUND('',#5829,.T.); #3869=FACE_OUTER_BOUND('',#5830,.T.); #3870=FACE_OUTER_BOUND('',#5831,.T.); #3871=FACE_OUTER_BOUND('',#5832,.T.); #3872=FACE_OUTER_BOUND('',#5833,.T.); #3873=FACE_OUTER_BOUND('',#5834,.T.); #3874=FACE_OUTER_BOUND('',#5835,.T.); #3875=FACE_OUTER_BOUND('',#5836,.T.); #3876=FACE_OUTER_BOUND('',#5837,.T.); #3877=FACE_OUTER_BOUND('',#5838,.T.); #3878=FACE_OUTER_BOUND('',#5839,.T.); #3879=FACE_OUTER_BOUND('',#5840,.T.); #3880=FACE_OUTER_BOUND('',#5841,.T.); #3881=FACE_OUTER_BOUND('',#5842,.T.); #3882=FACE_OUTER_BOUND('',#5843,.T.); #3883=FACE_OUTER_BOUND('',#5844,.T.); #3884=FACE_OUTER_BOUND('',#5845,.T.); #3885=FACE_OUTER_BOUND('',#5847,.T.); #3886=FACE_OUTER_BOUND('',#5848,.T.); #3887=FACE_OUTER_BOUND('',#5849,.T.); #3888=FACE_OUTER_BOUND('',#5850,.T.); #3889=FACE_OUTER_BOUND('',#5851,.T.); #3890=FACE_OUTER_BOUND('',#5852,.T.); #3891=FACE_OUTER_BOUND('',#5853,.T.); #3892=FACE_OUTER_BOUND('',#5856,.T.); #3893=FACE_OUTER_BOUND('',#5857,.T.); #3894=FACE_OUTER_BOUND('',#5858,.T.); #3895=FACE_OUTER_BOUND('',#5859,.T.); #3896=FACE_OUTER_BOUND('',#5860,.T.); #3897=FACE_OUTER_BOUND('',#5861,.T.); #3898=FACE_OUTER_BOUND('',#5862,.T.); #3899=FACE_OUTER_BOUND('',#5863,.T.); #3900=FACE_OUTER_BOUND('',#5864,.T.); #3901=FACE_OUTER_BOUND('',#5865,.T.); #3902=FACE_OUTER_BOUND('',#5866,.T.); #3903=FACE_OUTER_BOUND('',#5867,.T.); #3904=FACE_OUTER_BOUND('',#5868,.T.); #3905=FACE_OUTER_BOUND('',#5871,.T.); #3906=FACE_OUTER_BOUND('',#5872,.T.); #3907=FACE_OUTER_BOUND('',#5873,.T.); #3908=FACE_OUTER_BOUND('',#5874,.T.); #3909=FACE_OUTER_BOUND('',#5875,.T.); #3910=FACE_OUTER_BOUND('',#5876,.T.); #3911=FACE_OUTER_BOUND('',#5877,.T.); #3912=FACE_OUTER_BOUND('',#5878,.T.); #3913=FACE_OUTER_BOUND('',#5879,.T.); #3914=FACE_OUTER_BOUND('',#5880,.T.); #3915=FACE_OUTER_BOUND('',#5881,.T.); #3916=FACE_OUTER_BOUND('',#5882,.T.); #3917=FACE_OUTER_BOUND('',#5883,.T.); #3918=FACE_OUTER_BOUND('',#5884,.T.); #3919=FACE_OUTER_BOUND('',#5885,.T.); #3920=FACE_OUTER_BOUND('',#5886,.T.); #3921=FACE_OUTER_BOUND('',#5887,.T.); #3922=FACE_OUTER_BOUND('',#5888,.T.); #3923=FACE_OUTER_BOUND('',#5889,.T.); #3924=FACE_OUTER_BOUND('',#5890,.T.); #3925=FACE_OUTER_BOUND('',#5891,.T.); #3926=FACE_OUTER_BOUND('',#5892,.T.); #3927=FACE_OUTER_BOUND('',#5893,.T.); #3928=FACE_OUTER_BOUND('',#5894,.T.); #3929=FACE_OUTER_BOUND('',#5895,.T.); #3930=FACE_OUTER_BOUND('',#5896,.T.); #3931=FACE_OUTER_BOUND('',#5897,.T.); #3932=FACE_OUTER_BOUND('',#5898,.T.); #3933=FACE_OUTER_BOUND('',#5899,.T.); #3934=FACE_OUTER_BOUND('',#5900,.T.); #3935=FACE_OUTER_BOUND('',#5901,.T.); #3936=FACE_OUTER_BOUND('',#5902,.T.); #3937=FACE_OUTER_BOUND('',#5903,.T.); #3938=FACE_OUTER_BOUND('',#5904,.T.); #3939=FACE_OUTER_BOUND('',#5905,.T.); #3940=FACE_OUTER_BOUND('',#5906,.T.); #3941=FACE_OUTER_BOUND('',#5907,.T.); #3942=FACE_OUTER_BOUND('',#5908,.T.); #3943=FACE_OUTER_BOUND('',#5909,.T.); #3944=FACE_OUTER_BOUND('',#5910,.T.); #3945=FACE_OUTER_BOUND('',#5911,.T.); #3946=FACE_OUTER_BOUND('',#5916,.T.); #3947=FACE_OUTER_BOUND('',#5917,.T.); #3948=FACE_OUTER_BOUND('',#5918,.T.); #3949=FACE_OUTER_BOUND('',#5920,.T.); #3950=FACE_OUTER_BOUND('',#5923,.T.); #3951=FACE_OUTER_BOUND('',#5925,.T.); #3952=FACE_OUTER_BOUND('',#5927,.T.); #3953=FACE_OUTER_BOUND('',#5928,.T.); #3954=FACE_OUTER_BOUND('',#5929,.T.); #3955=FACE_OUTER_BOUND('',#5930,.T.); #3956=FACE_OUTER_BOUND('',#5931,.T.); #3957=FACE_OUTER_BOUND('',#5932,.T.); #3958=FACE_OUTER_BOUND('',#5933,.T.); #3959=FACE_OUTER_BOUND('',#5934,.T.); #3960=FACE_OUTER_BOUND('',#5935,.T.); #3961=FACE_OUTER_BOUND('',#5936,.T.); #3962=FACE_OUTER_BOUND('',#5937,.T.); #3963=FACE_OUTER_BOUND('',#5938,.T.); #3964=FACE_OUTER_BOUND('',#5939,.T.); #3965=FACE_OUTER_BOUND('',#5940,.T.); #3966=FACE_OUTER_BOUND('',#5941,.T.); #3967=FACE_OUTER_BOUND('',#5942,.T.); #3968=FACE_OUTER_BOUND('',#5943,.T.); #3969=FACE_OUTER_BOUND('',#5944,.T.); #3970=FACE_OUTER_BOUND('',#5945,.T.); #3971=EDGE_LOOP('',(#21969,#21970,#21971,#21972)); #3972=EDGE_LOOP('',(#21973,#21974,#21975,#21976)); #3973=EDGE_LOOP('',(#21977,#21978,#21979,#21980)); #3974=EDGE_LOOP('',(#21981,#21982,#21983,#21984,#21985,#21986,#21987,#21988, #21989,#21990,#21991,#21992)); #3975=EDGE_LOOP('',(#21993,#21994,#21995,#21996,#21997,#21998,#21999,#22000, #22001,#22002,#22003,#22004)); #3976=EDGE_LOOP('',(#22005,#22006,#22007,#22008,#22009,#22010,#22011,#22012, #22013,#22014,#22015,#22016)); #3977=EDGE_LOOP('',(#22017,#22018,#22019,#22020)); #3978=EDGE_LOOP('',(#22021,#22022,#22023,#22024)); #3979=EDGE_LOOP('',(#22025,#22026,#22027,#22028,#22029,#22030)); #3980=EDGE_LOOP('',(#22031,#22032,#22033,#22034)); #3981=EDGE_LOOP('',(#22035,#22036,#22037,#22038)); #3982=EDGE_LOOP('',(#22039,#22040,#22041,#22042)); #3983=EDGE_LOOP('',(#22043,#22044,#22045,#22046)); #3984=EDGE_LOOP('',(#22047,#22048,#22049,#22050)); #3985=EDGE_LOOP('',(#22051,#22052,#22053,#22054)); #3986=EDGE_LOOP('',(#22055,#22056,#22057,#22058)); #3987=EDGE_LOOP('',(#22059,#22060,#22061,#22062,#22063,#22064,#22065,#22066)); #3988=EDGE_LOOP('',(#22067,#22068,#22069,#22070)); #3989=EDGE_LOOP('',(#22071,#22072,#22073,#22074)); #3990=EDGE_LOOP('',(#22075,#22076,#22077,#22078)); #3991=EDGE_LOOP('',(#22079,#22080,#22081,#22082)); #3992=EDGE_LOOP('',(#22083,#22084,#22085,#22086)); #3993=EDGE_LOOP('',(#22087,#22088,#22089,#22090)); #3994=EDGE_LOOP('',(#22091,#22092,#22093,#22094)); #3995=EDGE_LOOP('',(#22095,#22096,#22097,#22098)); #3996=EDGE_LOOP('',(#22099,#22100,#22101,#22102)); #3997=EDGE_LOOP('',(#22103,#22104,#22105,#22106)); #3998=EDGE_LOOP('',(#22107,#22108,#22109,#22110,#22111,#22112,#22113,#22114, #22115,#22116,#22117,#22118)); #3999=EDGE_LOOP('',(#22119,#22120,#22121,#22122)); #4000=EDGE_LOOP('',(#22123,#22124,#22125,#22126,#22127,#22128,#22129,#22130, #22131,#22132,#22133,#22134)); #4001=EDGE_LOOP('',(#22135,#22136,#22137,#22138)); #4002=EDGE_LOOP('',(#22139,#22140,#22141,#22142)); #4003=EDGE_LOOP('',(#22143,#22144,#22145,#22146)); #4004=EDGE_LOOP('',(#22147,#22148,#22149,#22150,#22151,#22152,#22153,#22154, #22155,#22156,#22157,#22158)); #4005=EDGE_LOOP('',(#22159,#22160,#22161,#22162)); #4006=EDGE_LOOP('',(#22163,#22164,#22165,#22166)); #4007=EDGE_LOOP('',(#22167,#22168,#22169,#22170,#22171,#22172,#22173,#22174, #22175,#22176,#22177,#22178)); #4008=EDGE_LOOP('',(#22179,#22180,#22181,#22182)); #4009=EDGE_LOOP('',(#22183,#22184,#22185,#22186,#22187,#22188,#22189,#22190, #22191,#22192,#22193,#22194)); #4010=EDGE_LOOP('',(#22195,#22196,#22197,#22198)); #4011=EDGE_LOOP('',(#22199,#22200,#22201,#22202,#22203,#22204,#22205,#22206, #22207,#22208,#22209,#22210)); #4012=EDGE_LOOP('',(#22211,#22212,#22213,#22214)); #4013=EDGE_LOOP('',(#22215,#22216,#22217,#22218)); #4014=EDGE_LOOP('',(#22219,#22220,#22221,#22222,#22223,#22224,#22225,#22226, #22227,#22228,#22229,#22230)); #4015=EDGE_LOOP('',(#22231,#22232,#22233,#22234,#22235,#22236,#22237,#22238, #22239,#22240,#22241,#22242)); #4016=EDGE_LOOP('',(#22243,#22244,#22245,#22246)); #4017=EDGE_LOOP('',(#22247,#22248,#22249,#22250)); #4018=EDGE_LOOP('',(#22251,#22252,#22253,#22254)); #4019=EDGE_LOOP('',(#22255,#22256,#22257,#22258)); #4020=EDGE_LOOP('',(#22259,#22260,#22261,#22262)); #4021=EDGE_LOOP('',(#22263,#22264,#22265,#22266,#22267,#22268,#22269,#22270)); #4022=EDGE_LOOP('',(#22271)); #4023=EDGE_LOOP('',(#22272,#22273,#22274,#22275)); #4024=EDGE_LOOP('',(#22276,#22277,#22278,#22279,#22280,#22281)); #4025=EDGE_LOOP('',(#22282,#22283,#22284,#22285,#22286,#22287)); #4026=EDGE_LOOP('',(#22288,#22289,#22290,#22291,#22292,#22293)); #4027=EDGE_LOOP('',(#22294,#22295,#22296,#22297)); #4028=EDGE_LOOP('',(#22298,#22299,#22300,#22301)); #4029=EDGE_LOOP('',(#22302,#22303,#22304,#22305)); #4030=EDGE_LOOP('',(#22306,#22307,#22308,#22309)); #4031=EDGE_LOOP('',(#22310,#22311,#22312,#22313)); #4032=EDGE_LOOP('',(#22314,#22315,#22316,#22317)); #4033=EDGE_LOOP('',(#22318,#22319,#22320,#22321)); #4034=EDGE_LOOP('',(#22322,#22323,#22324,#22325)); #4035=EDGE_LOOP('',(#22326,#22327,#22328,#22329)); #4036=EDGE_LOOP('',(#22330,#22331,#22332,#22333)); #4037=EDGE_LOOP('',(#22334,#22335,#22336,#22337)); #4038=EDGE_LOOP('',(#22338,#22339,#22340,#22341)); #4039=EDGE_LOOP('',(#22342,#22343,#22344,#22345)); #4040=EDGE_LOOP('',(#22346,#22347,#22348,#22349)); #4041=EDGE_LOOP('',(#22350,#22351,#22352,#22353)); #4042=EDGE_LOOP('',(#22354,#22355,#22356,#22357)); #4043=EDGE_LOOP('',(#22358,#22359,#22360,#22361)); #4044=EDGE_LOOP('',(#22362,#22363,#22364,#22365)); #4045=EDGE_LOOP('',(#22366,#22367,#22368,#22369)); #4046=EDGE_LOOP('',(#22370,#22371,#22372,#22373)); #4047=EDGE_LOOP('',(#22374,#22375,#22376,#22377)); #4048=EDGE_LOOP('',(#22378,#22379,#22380,#22381)); #4049=EDGE_LOOP('',(#22382,#22383,#22384,#22385)); #4050=EDGE_LOOP('',(#22386,#22387,#22388,#22389)); #4051=EDGE_LOOP('',(#22390,#22391,#22392,#22393)); #4052=EDGE_LOOP('',(#22394,#22395,#22396,#22397)); #4053=EDGE_LOOP('',(#22398,#22399,#22400,#22401)); #4054=EDGE_LOOP('',(#22402,#22403,#22404,#22405)); #4055=EDGE_LOOP('',(#22406,#22407,#22408,#22409)); #4056=EDGE_LOOP('',(#22410,#22411,#22412,#22413)); #4057=EDGE_LOOP('',(#22414,#22415,#22416,#22417)); #4058=EDGE_LOOP('',(#22418,#22419,#22420,#22421)); #4059=EDGE_LOOP('',(#22422,#22423,#22424,#22425)); #4060=EDGE_LOOP('',(#22426,#22427,#22428,#22429)); #4061=EDGE_LOOP('',(#22430,#22431,#22432,#22433)); #4062=EDGE_LOOP('',(#22434,#22435,#22436,#22437)); #4063=EDGE_LOOP('',(#22438,#22439,#22440,#22441)); #4064=EDGE_LOOP('',(#22442,#22443,#22444,#22445)); #4065=EDGE_LOOP('',(#22446,#22447,#22448,#22449)); #4066=EDGE_LOOP('',(#22450,#22451,#22452,#22453)); #4067=EDGE_LOOP('',(#22454,#22455,#22456,#22457,#22458,#22459,#22460,#22461, #22462,#22463,#22464,#22465)); #4068=EDGE_LOOP('',(#22466,#22467,#22468,#22469)); #4069=EDGE_LOOP('',(#22470,#22471,#22472,#22473)); #4070=EDGE_LOOP('',(#22474,#22475,#22476,#22477)); #4071=EDGE_LOOP('',(#22478,#22479,#22480,#22481)); #4072=EDGE_LOOP('',(#22482,#22483,#22484,#22485)); #4073=EDGE_LOOP('',(#22486,#22487,#22488,#22489)); #4074=EDGE_LOOP('',(#22490,#22491,#22492,#22493,#22494,#22495,#22496,#22497, #22498,#22499,#22500,#22501)); #4075=EDGE_LOOP('',(#22502,#22503,#22504,#22505,#22506,#22507,#22508,#22509, #22510,#22511,#22512,#22513)); #4076=EDGE_LOOP('',(#22514,#22515,#22516,#22517)); #4077=EDGE_LOOP('',(#22518,#22519,#22520,#22521)); #4078=EDGE_LOOP('',(#22522,#22523,#22524,#22525,#22526,#22527,#22528,#22529, #22530,#22531,#22532,#22533)); #4079=EDGE_LOOP('',(#22534,#22535,#22536,#22537,#22538,#22539,#22540,#22541, #22542,#22543,#22544,#22545)); #4080=EDGE_LOOP('',(#22546,#22547,#22548,#22549)); #4081=EDGE_LOOP('',(#22550,#22551,#22552,#22553)); #4082=EDGE_LOOP('',(#22554,#22555,#22556,#22557,#22558,#22559,#22560,#22561, #22562,#22563,#22564,#22565)); #4083=EDGE_LOOP('',(#22566,#22567,#22568,#22569,#22570,#22571,#22572,#22573, #22574,#22575,#22576,#22577)); #4084=EDGE_LOOP('',(#22578,#22579,#22580,#22581)); #4085=EDGE_LOOP('',(#22582,#22583,#22584,#22585)); #4086=EDGE_LOOP('',(#22586,#22587,#22588,#22589,#22590,#22591,#22592,#22593, #22594,#22595,#22596,#22597)); #4087=EDGE_LOOP('',(#22598,#22599,#22600,#22601,#22602,#22603,#22604,#22605, #22606,#22607,#22608,#22609)); #4088=EDGE_LOOP('',(#22610,#22611,#22612,#22613)); #4089=EDGE_LOOP('',(#22614,#22615,#22616,#22617)); #4090=EDGE_LOOP('',(#22618,#22619,#22620,#22621)); #4091=EDGE_LOOP('',(#22622,#22623,#22624,#22625,#22626,#22627)); #4092=EDGE_LOOP('',(#22628,#22629,#22630,#22631,#22632,#22633)); #4093=EDGE_LOOP('',(#22634,#22635,#22636,#22637,#22638,#22639)); #4094=EDGE_LOOP('',(#22640,#22641,#22642,#22643,#22644,#22645)); #4095=EDGE_LOOP('',(#22646)); #4096=EDGE_LOOP('',(#22647,#22648,#22649,#22650)); #4097=EDGE_LOOP('',(#22651,#22652,#22653,#22654)); #4098=EDGE_LOOP('',(#22655,#22656,#22657,#22658)); #4099=EDGE_LOOP('',(#22659,#22660,#22661,#22662)); #4100=EDGE_LOOP('',(#22663,#22664,#22665,#22666)); #4101=EDGE_LOOP('',(#22667,#22668,#22669,#22670)); #4102=EDGE_LOOP('',(#22671,#22672,#22673,#22674)); #4103=EDGE_LOOP('',(#22675,#22676,#22677,#22678)); #4104=EDGE_LOOP('',(#22679,#22680,#22681,#22682)); #4105=EDGE_LOOP('',(#22683,#22684,#22685,#22686)); #4106=EDGE_LOOP('',(#22687,#22688,#22689,#22690)); #4107=EDGE_LOOP('',(#22691,#22692,#22693,#22694)); #4108=EDGE_LOOP('',(#22695,#22696,#22697,#22698)); #4109=EDGE_LOOP('',(#22699,#22700,#22701,#22702)); #4110=EDGE_LOOP('',(#22703,#22704,#22705,#22706)); #4111=EDGE_LOOP('',(#22707,#22708,#22709,#22710)); #4112=EDGE_LOOP('',(#22711,#22712,#22713,#22714)); #4113=EDGE_LOOP('',(#22715,#22716,#22717,#22718)); #4114=EDGE_LOOP('',(#22719,#22720,#22721,#22722)); #4115=EDGE_LOOP('',(#22723,#22724,#22725,#22726)); #4116=EDGE_LOOP('',(#22727,#22728,#22729,#22730)); #4117=EDGE_LOOP('',(#22731,#22732,#22733,#22734)); #4118=EDGE_LOOP('',(#22735,#22736,#22737,#22738)); #4119=EDGE_LOOP('',(#22739,#22740,#22741,#22742)); #4120=EDGE_LOOP('',(#22743,#22744,#22745,#22746)); #4121=EDGE_LOOP('',(#22747,#22748,#22749,#22750)); #4122=EDGE_LOOP('',(#22751,#22752,#22753,#22754)); #4123=EDGE_LOOP('',(#22755,#22756,#22757,#22758)); #4124=EDGE_LOOP('',(#22759,#22760,#22761,#22762)); #4125=EDGE_LOOP('',(#22763,#22764,#22765,#22766)); #4126=EDGE_LOOP('',(#22767,#22768,#22769,#22770)); #4127=EDGE_LOOP('',(#22771,#22772,#22773,#22774)); #4128=EDGE_LOOP('',(#22775,#22776,#22777,#22778)); #4129=EDGE_LOOP('',(#22779,#22780,#22781,#22782)); #4130=EDGE_LOOP('',(#22783,#22784,#22785,#22786)); #4131=EDGE_LOOP('',(#22787,#22788,#22789,#22790)); #4132=EDGE_LOOP('',(#22791)); #4133=EDGE_LOOP('',(#22792)); #4134=EDGE_LOOP('',(#22793)); #4135=EDGE_LOOP('',(#22794)); #4136=EDGE_LOOP('',(#22795)); #4137=EDGE_LOOP('',(#22796)); #4138=EDGE_LOOP('',(#22797)); #4139=EDGE_LOOP('',(#22798)); #4140=EDGE_LOOP('',(#22799)); #4141=EDGE_LOOP('',(#22800)); #4142=EDGE_LOOP('',(#22801)); #4143=EDGE_LOOP('',(#22802)); #4144=EDGE_LOOP('',(#22803)); #4145=EDGE_LOOP('',(#22804)); #4146=EDGE_LOOP('',(#22805)); #4147=EDGE_LOOP('',(#22806)); #4148=EDGE_LOOP('',(#22807)); #4149=EDGE_LOOP('',(#22808)); #4150=EDGE_LOOP('',(#22809)); #4151=EDGE_LOOP('',(#22810)); #4152=EDGE_LOOP('',(#22811)); #4153=EDGE_LOOP('',(#22812)); #4154=EDGE_LOOP('',(#22813)); #4155=EDGE_LOOP('',(#22814)); #4156=EDGE_LOOP('',(#22815)); #4157=EDGE_LOOP('',(#22816)); #4158=EDGE_LOOP('',(#22817)); #4159=EDGE_LOOP('',(#22818)); #4160=EDGE_LOOP('',(#22819)); #4161=EDGE_LOOP('',(#22820,#22821,#22822,#22823)); #4162=EDGE_LOOP('',(#22824)); #4163=EDGE_LOOP('',(#22825)); #4164=EDGE_LOOP('',(#22826)); #4165=EDGE_LOOP('',(#22827)); #4166=EDGE_LOOP('',(#22828)); #4167=EDGE_LOOP('',(#22829)); #4168=EDGE_LOOP('',(#22830)); #4169=EDGE_LOOP('',(#22831)); #4170=EDGE_LOOP('',(#22832)); #4171=EDGE_LOOP('',(#22833)); #4172=EDGE_LOOP('',(#22834)); #4173=EDGE_LOOP('',(#22835)); #4174=EDGE_LOOP('',(#22836)); #4175=EDGE_LOOP('',(#22837)); #4176=EDGE_LOOP('',(#22838)); #4177=EDGE_LOOP('',(#22839)); #4178=EDGE_LOOP('',(#22840)); #4179=EDGE_LOOP('',(#22841)); #4180=EDGE_LOOP('',(#22842)); #4181=EDGE_LOOP('',(#22843)); #4182=EDGE_LOOP('',(#22844)); #4183=EDGE_LOOP('',(#22845)); #4184=EDGE_LOOP('',(#22846)); #4185=EDGE_LOOP('',(#22847)); #4186=EDGE_LOOP('',(#22848)); #4187=EDGE_LOOP('',(#22849)); #4188=EDGE_LOOP('',(#22850)); #4189=EDGE_LOOP('',(#22851)); #4190=EDGE_LOOP('',(#22852)); #4191=EDGE_LOOP('',(#22853,#22854,#22855,#22856)); #4192=EDGE_LOOP('',(#22857,#22858,#22859,#22860)); #4193=EDGE_LOOP('',(#22861,#22862,#22863,#22864)); #4194=EDGE_LOOP('',(#22865,#22866,#22867,#22868)); #4195=EDGE_LOOP('',(#22869,#22870,#22871,#22872)); #4196=EDGE_LOOP('',(#22873,#22874,#22875,#22876)); #4197=EDGE_LOOP('',(#22877,#22878,#22879,#22880)); #4198=EDGE_LOOP('',(#22881,#22882,#22883,#22884)); #4199=EDGE_LOOP('',(#22885,#22886,#22887,#22888)); #4200=EDGE_LOOP('',(#22889,#22890,#22891,#22892)); #4201=EDGE_LOOP('',(#22893,#22894,#22895,#22896)); #4202=EDGE_LOOP('',(#22897,#22898,#22899,#22900)); #4203=EDGE_LOOP('',(#22901,#22902,#22903,#22904)); #4204=EDGE_LOOP('',(#22905,#22906,#22907,#22908)); #4205=EDGE_LOOP('',(#22909,#22910,#22911,#22912)); #4206=EDGE_LOOP('',(#22913,#22914,#22915,#22916)); #4207=EDGE_LOOP('',(#22917,#22918,#22919,#22920)); #4208=EDGE_LOOP('',(#22921,#22922,#22923,#22924)); #4209=EDGE_LOOP('',(#22925,#22926,#22927,#22928)); #4210=EDGE_LOOP('',(#22929,#22930,#22931,#22932)); #4211=EDGE_LOOP('',(#22933,#22934,#22935,#22936)); #4212=EDGE_LOOP('',(#22937,#22938,#22939,#22940)); #4213=EDGE_LOOP('',(#22941,#22942,#22943,#22944)); #4214=EDGE_LOOP('',(#22945,#22946,#22947,#22948)); #4215=EDGE_LOOP('',(#22949,#22950,#22951,#22952)); #4216=EDGE_LOOP('',(#22953,#22954,#22955,#22956)); #4217=EDGE_LOOP('',(#22957,#22958,#22959,#22960)); #4218=EDGE_LOOP('',(#22961,#22962,#22963,#22964)); #4219=EDGE_LOOP('',(#22965,#22966,#22967,#22968)); #4220=EDGE_LOOP('',(#22969,#22970,#22971,#22972)); #4221=EDGE_LOOP('',(#22973,#22974,#22975,#22976)); #4222=EDGE_LOOP('',(#22977,#22978,#22979,#22980)); #4223=EDGE_LOOP('',(#22981,#22982,#22983,#22984)); #4224=EDGE_LOOP('',(#22985,#22986,#22987,#22988)); #4225=EDGE_LOOP('',(#22989,#22990,#22991,#22992)); #4226=EDGE_LOOP('',(#22993,#22994,#22995,#22996)); #4227=EDGE_LOOP('',(#22997,#22998,#22999,#23000)); #4228=EDGE_LOOP('',(#23001,#23002,#23003,#23004)); #4229=EDGE_LOOP('',(#23005,#23006,#23007,#23008)); #4230=EDGE_LOOP('',(#23009,#23010,#23011,#23012)); #4231=EDGE_LOOP('',(#23013,#23014,#23015,#23016)); #4232=EDGE_LOOP('',(#23017,#23018,#23019,#23020)); #4233=EDGE_LOOP('',(#23021,#23022,#23023,#23024)); #4234=EDGE_LOOP('',(#23025,#23026,#23027,#23028)); #4235=EDGE_LOOP('',(#23029,#23030,#23031,#23032)); #4236=EDGE_LOOP('',(#23033,#23034,#23035,#23036)); #4237=EDGE_LOOP('',(#23037,#23038,#23039,#23040)); #4238=EDGE_LOOP('',(#23041,#23042,#23043,#23044)); #4239=EDGE_LOOP('',(#23045,#23046,#23047,#23048)); #4240=EDGE_LOOP('',(#23049,#23050,#23051,#23052)); #4241=EDGE_LOOP('',(#23053,#23054,#23055,#23056)); #4242=EDGE_LOOP('',(#23057,#23058,#23059,#23060)); #4243=EDGE_LOOP('',(#23061,#23062,#23063,#23064)); #4244=EDGE_LOOP('',(#23065,#23066,#23067,#23068)); #4245=EDGE_LOOP('',(#23069,#23070,#23071,#23072)); #4246=EDGE_LOOP('',(#23073,#23074,#23075,#23076)); #4247=EDGE_LOOP('',(#23077,#23078,#23079,#23080)); #4248=EDGE_LOOP('',(#23081,#23082,#23083,#23084)); #4249=EDGE_LOOP('',(#23085,#23086,#23087,#23088)); #4250=EDGE_LOOP('',(#23089,#23090,#23091,#23092)); #4251=EDGE_LOOP('',(#23093,#23094,#23095,#23096)); #4252=EDGE_LOOP('',(#23097,#23098,#23099,#23100)); #4253=EDGE_LOOP('',(#23101,#23102,#23103,#23104)); #4254=EDGE_LOOP('',(#23105,#23106,#23107,#23108)); #4255=EDGE_LOOP('',(#23109,#23110,#23111,#23112)); #4256=EDGE_LOOP('',(#23113,#23114,#23115,#23116)); #4257=EDGE_LOOP('',(#23117,#23118,#23119,#23120)); #4258=EDGE_LOOP('',(#23121,#23122,#23123,#23124)); #4259=EDGE_LOOP('',(#23125,#23126,#23127,#23128)); #4260=EDGE_LOOP('',(#23129,#23130,#23131,#23132)); #4261=EDGE_LOOP('',(#23133,#23134,#23135,#23136)); #4262=EDGE_LOOP('',(#23137,#23138,#23139,#23140)); #4263=EDGE_LOOP('',(#23141,#23142,#23143,#23144)); #4264=EDGE_LOOP('',(#23145,#23146,#23147,#23148)); #4265=EDGE_LOOP('',(#23149,#23150,#23151,#23152)); #4266=EDGE_LOOP('',(#23153,#23154,#23155,#23156)); #4267=EDGE_LOOP('',(#23157,#23158,#23159,#23160)); #4268=EDGE_LOOP('',(#23161,#23162,#23163,#23164)); #4269=EDGE_LOOP('',(#23165,#23166,#23167,#23168)); #4270=EDGE_LOOP('',(#23169,#23170,#23171,#23172)); #4271=EDGE_LOOP('',(#23173,#23174,#23175,#23176)); #4272=EDGE_LOOP('',(#23177,#23178,#23179,#23180)); #4273=EDGE_LOOP('',(#23181,#23182,#23183,#23184)); #4274=EDGE_LOOP('',(#23185,#23186,#23187,#23188)); #4275=EDGE_LOOP('',(#23189,#23190,#23191,#23192)); #4276=EDGE_LOOP('',(#23193,#23194,#23195,#23196)); #4277=EDGE_LOOP('',(#23197,#23198,#23199,#23200)); #4278=EDGE_LOOP('',(#23201,#23202,#23203,#23204)); #4279=EDGE_LOOP('',(#23205,#23206,#23207,#23208)); #4280=EDGE_LOOP('',(#23209,#23210,#23211,#23212)); #4281=EDGE_LOOP('',(#23213,#23214,#23215,#23216)); #4282=EDGE_LOOP('',(#23217,#23218,#23219,#23220)); #4283=EDGE_LOOP('',(#23221,#23222,#23223,#23224)); #4284=EDGE_LOOP('',(#23225,#23226,#23227,#23228)); #4285=EDGE_LOOP('',(#23229,#23230,#23231,#23232)); #4286=EDGE_LOOP('',(#23233,#23234,#23235,#23236)); #4287=EDGE_LOOP('',(#23237,#23238,#23239,#23240)); #4288=EDGE_LOOP('',(#23241,#23242,#23243,#23244)); #4289=EDGE_LOOP('',(#23245,#23246,#23247,#23248,#23249,#23250,#23251,#23252)); #4290=EDGE_LOOP('',(#23253)); #4291=EDGE_LOOP('',(#23254,#23255,#23256,#23257,#23258,#23259,#23260,#23261)); #4292=EDGE_LOOP('',(#23262)); #4293=EDGE_LOOP('',(#23263,#23264,#23265,#23266,#23267,#23268,#23269,#23270, #23271,#23272)); #4294=EDGE_LOOP('',(#23273)); #4295=EDGE_LOOP('',(#23274,#23275,#23276,#23277,#23278,#23279,#23280,#23281, #23282,#23283)); #4296=EDGE_LOOP('',(#23284)); #4297=EDGE_LOOP('',(#23285,#23286,#23287,#23288,#23289,#23290,#23291,#23292)); #4298=EDGE_LOOP('',(#23293)); #4299=EDGE_LOOP('',(#23294,#23295,#23296,#23297,#23298,#23299,#23300,#23301)); #4300=EDGE_LOOP('',(#23302)); #4301=EDGE_LOOP('',(#23303,#23304,#23305,#23306,#23307,#23308,#23309,#23310)); #4302=EDGE_LOOP('',(#23311)); #4303=EDGE_LOOP('',(#23312,#23313,#23314,#23315,#23316,#23317,#23318,#23319)); #4304=EDGE_LOOP('',(#23320)); #4305=EDGE_LOOP('',(#23321,#23322,#23323,#23324,#23325,#23326,#23327,#23328, #23329,#23330)); #4306=EDGE_LOOP('',(#23331)); #4307=EDGE_LOOP('',(#23332,#23333,#23334,#23335,#23336,#23337,#23338,#23339, #23340,#23341)); #4308=EDGE_LOOP('',(#23342)); #4309=EDGE_LOOP('',(#23343,#23344,#23345,#23346,#23347,#23348,#23349,#23350)); #4310=EDGE_LOOP('',(#23351)); #4311=EDGE_LOOP('',(#23352,#23353,#23354,#23355,#23356,#23357,#23358,#23359)); #4312=EDGE_LOOP('',(#23360)); #4313=EDGE_LOOP('',(#23361,#23362,#23363,#23364,#23365,#23366,#23367,#23368)); #4314=EDGE_LOOP('',(#23369)); #4315=EDGE_LOOP('',(#23370,#23371,#23372,#23373,#23374,#23375,#23376,#23377)); #4316=EDGE_LOOP('',(#23378)); #4317=EDGE_LOOP('',(#23379,#23380,#23381,#23382,#23383,#23384,#23385,#23386)); #4318=EDGE_LOOP('',(#23387)); #4319=EDGE_LOOP('',(#23388,#23389,#23390,#23391,#23392,#23393,#23394,#23395)); #4320=EDGE_LOOP('',(#23396)); #4321=EDGE_LOOP('',(#23397,#23398,#23399,#23400,#23401,#23402,#23403,#23404)); #4322=EDGE_LOOP('',(#23405)); #4323=EDGE_LOOP('',(#23406,#23407,#23408,#23409,#23410,#23411,#23412,#23413)); #4324=EDGE_LOOP('',(#23414)); #4325=EDGE_LOOP('',(#23415,#23416,#23417,#23418,#23419,#23420,#23421,#23422, #23423,#23424)); #4326=EDGE_LOOP('',(#23425)); #4327=EDGE_LOOP('',(#23426,#23427,#23428,#23429,#23430,#23431,#23432,#23433, #23434,#23435)); #4328=EDGE_LOOP('',(#23436)); #4329=EDGE_LOOP('',(#23437,#23438,#23439,#23440,#23441,#23442,#23443,#23444)); #4330=EDGE_LOOP('',(#23445)); #4331=EDGE_LOOP('',(#23446,#23447,#23448,#23449,#23450,#23451,#23452,#23453)); #4332=EDGE_LOOP('',(#23454)); #4333=EDGE_LOOP('',(#23455,#23456,#23457,#23458,#23459,#23460,#23461,#23462)); #4334=EDGE_LOOP('',(#23463)); #4335=EDGE_LOOP('',(#23464,#23465,#23466,#23467,#23468,#23469,#23470,#23471)); #4336=EDGE_LOOP('',(#23472)); #4337=EDGE_LOOP('',(#23473,#23474,#23475,#23476,#23477,#23478,#23479,#23480)); #4338=EDGE_LOOP('',(#23481)); #4339=EDGE_LOOP('',(#23482,#23483,#23484,#23485,#23486,#23487,#23488,#23489)); #4340=EDGE_LOOP('',(#23490)); #4341=EDGE_LOOP('',(#23491,#23492,#23493,#23494,#23495,#23496,#23497,#23498)); #4342=EDGE_LOOP('',(#23499)); #4343=EDGE_LOOP('',(#23500,#23501,#23502,#23503,#23504,#23505,#23506,#23507)); #4344=EDGE_LOOP('',(#23508)); #4345=EDGE_LOOP('',(#23509,#23510,#23511,#23512,#23513,#23514,#23515,#23516)); #4346=EDGE_LOOP('',(#23517)); #4347=EDGE_LOOP('',(#23518,#23519,#23520,#23521,#23522,#23523,#23524,#23525)); #4348=EDGE_LOOP('',(#23526)); #4349=EDGE_LOOP('',(#23527,#23528,#23529,#23530,#23531,#23532,#23533,#23534)); #4350=EDGE_LOOP('',(#23535)); #4351=EDGE_LOOP('',(#23536,#23537,#23538,#23539,#23540,#23541,#23542,#23543)); #4352=EDGE_LOOP('',(#23544)); #4353=EDGE_LOOP('',(#23545,#23546,#23547,#23548,#23549,#23550,#23551,#23552)); #4354=EDGE_LOOP('',(#23553)); #4355=EDGE_LOOP('',(#23554,#23555,#23556,#23557,#23558,#23559,#23560,#23561)); #4356=EDGE_LOOP('',(#23562)); #4357=EDGE_LOOP('',(#23563,#23564,#23565,#23566,#23567,#23568,#23569,#23570)); #4358=EDGE_LOOP('',(#23571)); #4359=EDGE_LOOP('',(#23572,#23573,#23574,#23575,#23576,#23577,#23578,#23579)); #4360=EDGE_LOOP('',(#23580)); #4361=EDGE_LOOP('',(#23581,#23582,#23583,#23584,#23585,#23586,#23587,#23588, #23589,#23590)); #4362=EDGE_LOOP('',(#23591)); #4363=EDGE_LOOP('',(#23592,#23593,#23594,#23595,#23596,#23597,#23598,#23599, #23600,#23601)); #4364=EDGE_LOOP('',(#23602)); #4365=EDGE_LOOP('',(#23603,#23604,#23605,#23606,#23607,#23608,#23609,#23610)); #4366=EDGE_LOOP('',(#23611)); #4367=EDGE_LOOP('',(#23612,#23613,#23614,#23615,#23616,#23617,#23618,#23619)); #4368=EDGE_LOOP('',(#23620)); #4369=EDGE_LOOP('',(#23621,#23622,#23623,#23624,#23625,#23626)); #4370=EDGE_LOOP('',(#23627)); #4371=EDGE_LOOP('',(#23628,#23629,#23630,#23631,#23632,#23633)); #4372=EDGE_LOOP('',(#23634)); #4373=EDGE_LOOP('',(#23635,#23636,#23637,#23638)); #4374=EDGE_LOOP('',(#23639)); #4375=EDGE_LOOP('',(#23640)); #4376=EDGE_LOOP('',(#23641)); #4377=EDGE_LOOP('',(#23642)); #4378=EDGE_LOOP('',(#23643)); #4379=EDGE_LOOP('',(#23644)); #4380=EDGE_LOOP('',(#23645)); #4381=EDGE_LOOP('',(#23646)); #4382=EDGE_LOOP('',(#23647,#23648,#23649,#23650)); #4383=EDGE_LOOP('',(#23651,#23652,#23653,#23654)); #4384=EDGE_LOOP('',(#23655,#23656,#23657,#23658,#23659,#23660)); #4385=EDGE_LOOP('',(#23661,#23662,#23663,#23664,#23665,#23666)); #4386=EDGE_LOOP('',(#23667,#23668,#23669,#23670)); #4387=EDGE_LOOP('',(#23671,#23672,#23673,#23674)); #4388=EDGE_LOOP('',(#23675,#23676,#23677,#23678)); #4389=EDGE_LOOP('',(#23679,#23680,#23681,#23682,#23683,#23684)); #4390=EDGE_LOOP('',(#23685,#23686,#23687,#23688,#23689,#23690)); #4391=EDGE_LOOP('',(#23691,#23692,#23693,#23694)); #4392=EDGE_LOOP('',(#23695,#23696,#23697,#23698)); #4393=EDGE_LOOP('',(#23699,#23700,#23701,#23702)); #4394=EDGE_LOOP('',(#23703,#23704,#23705,#23706,#23707,#23708)); #4395=EDGE_LOOP('',(#23709,#23710,#23711,#23712,#23713,#23714)); #4396=EDGE_LOOP('',(#23715,#23716,#23717,#23718)); #4397=EDGE_LOOP('',(#23719,#23720,#23721,#23722)); #4398=EDGE_LOOP('',(#23723,#23724,#23725,#23726)); #4399=EDGE_LOOP('',(#23727,#23728,#23729,#23730,#23731,#23732)); #4400=EDGE_LOOP('',(#23733,#23734,#23735,#23736,#23737,#23738)); #4401=EDGE_LOOP('',(#23739,#23740,#23741,#23742)); #4402=EDGE_LOOP('',(#23743,#23744,#23745,#23746)); #4403=EDGE_LOOP('',(#23747,#23748,#23749,#23750)); #4404=EDGE_LOOP('',(#23751,#23752,#23753,#23754)); #4405=EDGE_LOOP('',(#23755,#23756,#23757,#23758)); #4406=EDGE_LOOP('',(#23759,#23760,#23761,#23762)); #4407=EDGE_LOOP('',(#23763,#23764,#23765,#23766)); #4408=EDGE_LOOP('',(#23767,#23768,#23769,#23770)); #4409=EDGE_LOOP('',(#23771,#23772,#23773,#23774)); #4410=EDGE_LOOP('',(#23775,#23776,#23777,#23778)); #4411=EDGE_LOOP('',(#23779,#23780,#23781,#23782)); #4412=EDGE_LOOP('',(#23783,#23784,#23785,#23786)); #4413=EDGE_LOOP('',(#23787,#23788,#23789,#23790)); #4414=EDGE_LOOP('',(#23791,#23792,#23793,#23794)); #4415=EDGE_LOOP('',(#23795,#23796,#23797,#23798)); #4416=EDGE_LOOP('',(#23799,#23800,#23801,#23802)); #4417=EDGE_LOOP('',(#23803,#23804,#23805,#23806)); #4418=EDGE_LOOP('',(#23807,#23808,#23809,#23810)); #4419=EDGE_LOOP('',(#23811,#23812,#23813,#23814)); #4420=EDGE_LOOP('',(#23815,#23816,#23817,#23818)); #4421=EDGE_LOOP('',(#23819,#23820,#23821,#23822)); #4422=EDGE_LOOP('',(#23823,#23824,#23825,#23826)); #4423=EDGE_LOOP('',(#23827,#23828,#23829,#23830)); #4424=EDGE_LOOP('',(#23831,#23832,#23833,#23834)); #4425=EDGE_LOOP('',(#23835,#23836,#23837,#23838)); #4426=EDGE_LOOP('',(#23839,#23840,#23841,#23842)); #4427=EDGE_LOOP('',(#23843,#23844,#23845,#23846)); #4428=EDGE_LOOP('',(#23847,#23848,#23849,#23850)); #4429=EDGE_LOOP('',(#23851,#23852,#23853,#23854)); #4430=EDGE_LOOP('',(#23855,#23856,#23857,#23858)); #4431=EDGE_LOOP('',(#23859,#23860,#23861,#23862)); #4432=EDGE_LOOP('',(#23863,#23864,#23865,#23866)); #4433=EDGE_LOOP('',(#23867,#23868,#23869,#23870)); #4434=EDGE_LOOP('',(#23871,#23872,#23873,#23874)); #4435=EDGE_LOOP('',(#23875,#23876,#23877,#23878)); #4436=EDGE_LOOP('',(#23879,#23880,#23881,#23882)); #4437=EDGE_LOOP('',(#23883,#23884,#23885,#23886)); #4438=EDGE_LOOP('',(#23887,#23888,#23889,#23890)); #4439=EDGE_LOOP('',(#23891,#23892,#23893,#23894)); #4440=EDGE_LOOP('',(#23895,#23896,#23897,#23898)); #4441=EDGE_LOOP('',(#23899,#23900,#23901,#23902)); #4442=EDGE_LOOP('',(#23903,#23904,#23905,#23906)); #4443=EDGE_LOOP('',(#23907,#23908,#23909,#23910)); #4444=EDGE_LOOP('',(#23911,#23912,#23913,#23914)); #4445=EDGE_LOOP('',(#23915,#23916,#23917,#23918)); #4446=EDGE_LOOP('',(#23919,#23920,#23921,#23922)); #4447=EDGE_LOOP('',(#23923,#23924,#23925,#23926)); #4448=EDGE_LOOP('',(#23927,#23928,#23929,#23930)); #4449=EDGE_LOOP('',(#23931,#23932,#23933,#23934)); #4450=EDGE_LOOP('',(#23935,#23936,#23937,#23938)); #4451=EDGE_LOOP('',(#23939,#23940,#23941,#23942)); #4452=EDGE_LOOP('',(#23943,#23944,#23945,#23946)); #4453=EDGE_LOOP('',(#23947,#23948,#23949,#23950)); #4454=EDGE_LOOP('',(#23951,#23952,#23953,#23954)); #4455=EDGE_LOOP('',(#23955,#23956,#23957,#23958)); #4456=EDGE_LOOP('',(#23959,#23960,#23961,#23962)); #4457=EDGE_LOOP('',(#23963,#23964,#23965,#23966)); #4458=EDGE_LOOP('',(#23967,#23968,#23969,#23970)); #4459=EDGE_LOOP('',(#23971,#23972,#23973,#23974)); #4460=EDGE_LOOP('',(#23975,#23976,#23977,#23978)); #4461=EDGE_LOOP('',(#23979,#23980,#23981,#23982)); #4462=EDGE_LOOP('',(#23983,#23984,#23985,#23986)); #4463=EDGE_LOOP('',(#23987,#23988,#23989,#23990)); #4464=EDGE_LOOP('',(#23991,#23992,#23993,#23994)); #4465=EDGE_LOOP('',(#23995,#23996,#23997,#23998)); #4466=EDGE_LOOP('',(#23999,#24000,#24001,#24002)); #4467=EDGE_LOOP('',(#24003,#24004,#24005,#24006)); #4468=EDGE_LOOP('',(#24007,#24008,#24009,#24010)); #4469=EDGE_LOOP('',(#24011,#24012,#24013,#24014)); #4470=EDGE_LOOP('',(#24015,#24016,#24017,#24018)); #4471=EDGE_LOOP('',(#24019,#24020,#24021,#24022)); #4472=EDGE_LOOP('',(#24023,#24024,#24025,#24026)); #4473=EDGE_LOOP('',(#24027,#24028,#24029,#24030,#24031,#24032)); #4474=EDGE_LOOP('',(#24033)); #4475=EDGE_LOOP('',(#24034,#24035,#24036,#24037,#24038,#24039)); #4476=EDGE_LOOP('',(#24040)); #4477=EDGE_LOOP('',(#24041,#24042,#24043,#24044,#24045,#24046,#24047,#24048, #24049,#24050)); #4478=EDGE_LOOP('',(#24051)); #4479=EDGE_LOOP('',(#24052,#24053,#24054,#24055,#24056,#24057,#24058,#24059, #24060,#24061)); #4480=EDGE_LOOP('',(#24062)); #4481=EDGE_LOOP('',(#24063,#24064,#24065,#24066,#24067,#24068)); #4482=EDGE_LOOP('',(#24069)); #4483=EDGE_LOOP('',(#24070,#24071,#24072,#24073,#24074,#24075)); #4484=EDGE_LOOP('',(#24076)); #4485=EDGE_LOOP('',(#24077,#24078,#24079,#24080,#24081,#24082)); #4486=EDGE_LOOP('',(#24083)); #4487=EDGE_LOOP('',(#24084,#24085,#24086,#24087,#24088,#24089)); #4488=EDGE_LOOP('',(#24090)); #4489=EDGE_LOOP('',(#24091,#24092,#24093,#24094,#24095,#24096,#24097,#24098, #24099,#24100)); #4490=EDGE_LOOP('',(#24101)); #4491=EDGE_LOOP('',(#24102,#24103,#24104,#24105,#24106,#24107,#24108,#24109, #24110,#24111)); #4492=EDGE_LOOP('',(#24112)); #4493=EDGE_LOOP('',(#24113,#24114,#24115,#24116,#24117,#24118)); #4494=EDGE_LOOP('',(#24119)); #4495=EDGE_LOOP('',(#24120,#24121,#24122,#24123,#24124,#24125)); #4496=EDGE_LOOP('',(#24126)); #4497=EDGE_LOOP('',(#24127,#24128,#24129,#24130,#24131,#24132)); #4498=EDGE_LOOP('',(#24133)); #4499=EDGE_LOOP('',(#24134,#24135,#24136,#24137,#24138,#24139)); #4500=EDGE_LOOP('',(#24140)); #4501=EDGE_LOOP('',(#24141,#24142,#24143,#24144,#24145,#24146)); #4502=EDGE_LOOP('',(#24147)); #4503=EDGE_LOOP('',(#24148,#24149,#24150,#24151,#24152,#24153)); #4504=EDGE_LOOP('',(#24154)); #4505=EDGE_LOOP('',(#24155,#24156,#24157,#24158,#24159,#24160)); #4506=EDGE_LOOP('',(#24161)); #4507=EDGE_LOOP('',(#24162,#24163,#24164,#24165,#24166,#24167)); #4508=EDGE_LOOP('',(#24168)); #4509=EDGE_LOOP('',(#24169,#24170,#24171,#24172,#24173,#24174,#24175,#24176, #24177,#24178)); #4510=EDGE_LOOP('',(#24179)); #4511=EDGE_LOOP('',(#24180,#24181,#24182,#24183,#24184,#24185,#24186,#24187, #24188,#24189)); #4512=EDGE_LOOP('',(#24190)); #4513=EDGE_LOOP('',(#24191,#24192,#24193,#24194,#24195,#24196)); #4514=EDGE_LOOP('',(#24197)); #4515=EDGE_LOOP('',(#24198,#24199,#24200,#24201,#24202,#24203)); #4516=EDGE_LOOP('',(#24204)); #4517=EDGE_LOOP('',(#24205,#24206,#24207,#24208,#24209,#24210)); #4518=EDGE_LOOP('',(#24211)); #4519=EDGE_LOOP('',(#24212,#24213,#24214,#24215,#24216,#24217)); #4520=EDGE_LOOP('',(#24218)); #4521=EDGE_LOOP('',(#24219,#24220,#24221,#24222,#24223,#24224)); #4522=EDGE_LOOP('',(#24225)); #4523=EDGE_LOOP('',(#24226,#24227,#24228,#24229,#24230,#24231)); #4524=EDGE_LOOP('',(#24232)); #4525=EDGE_LOOP('',(#24233,#24234,#24235,#24236,#24237,#24238)); #4526=EDGE_LOOP('',(#24239)); #4527=EDGE_LOOP('',(#24240,#24241,#24242,#24243,#24244,#24245)); #4528=EDGE_LOOP('',(#24246)); #4529=EDGE_LOOP('',(#24247,#24248,#24249,#24250,#24251,#24252)); #4530=EDGE_LOOP('',(#24253)); #4531=EDGE_LOOP('',(#24254,#24255,#24256,#24257,#24258,#24259)); #4532=EDGE_LOOP('',(#24260)); #4533=EDGE_LOOP('',(#24261,#24262,#24263,#24264,#24265,#24266)); #4534=EDGE_LOOP('',(#24267)); #4535=EDGE_LOOP('',(#24268,#24269,#24270,#24271,#24272,#24273)); #4536=EDGE_LOOP('',(#24274)); #4537=EDGE_LOOP('',(#24275,#24276,#24277,#24278,#24279,#24280)); #4538=EDGE_LOOP('',(#24281)); #4539=EDGE_LOOP('',(#24282,#24283,#24284,#24285,#24286,#24287)); #4540=EDGE_LOOP('',(#24288)); #4541=EDGE_LOOP('',(#24289,#24290,#24291,#24292,#24293,#24294)); #4542=EDGE_LOOP('',(#24295)); #4543=EDGE_LOOP('',(#24296,#24297,#24298,#24299,#24300,#24301)); #4544=EDGE_LOOP('',(#24302)); #4545=EDGE_LOOP('',(#24303,#24304,#24305,#24306,#24307,#24308,#24309,#24310, #24311,#24312)); #4546=EDGE_LOOP('',(#24313)); #4547=EDGE_LOOP('',(#24314,#24315,#24316,#24317,#24318,#24319,#24320,#24321, #24322,#24323)); #4548=EDGE_LOOP('',(#24324)); #4549=EDGE_LOOP('',(#24325,#24326,#24327,#24328,#24329,#24330)); #4550=EDGE_LOOP('',(#24331)); #4551=EDGE_LOOP('',(#24332,#24333,#24334,#24335,#24336,#24337)); #4552=EDGE_LOOP('',(#24338)); #4553=EDGE_LOOP('',(#24339,#24340,#24341,#24342,#24343,#24344)); #4554=EDGE_LOOP('',(#24345)); #4555=EDGE_LOOP('',(#24346,#24347,#24348,#24349,#24350,#24351)); #4556=EDGE_LOOP('',(#24352)); #4557=EDGE_LOOP('',(#24353,#24354,#24355,#24356)); #4558=EDGE_LOOP('',(#24357,#24358,#24359,#24360,#24361,#24362,#24363,#24364)); #4559=EDGE_LOOP('',(#24365)); #4560=EDGE_LOOP('',(#24366,#24367,#24368,#24369,#24370,#24371,#24372,#24373)); #4561=EDGE_LOOP('',(#24374)); #4562=EDGE_LOOP('',(#24375)); #4563=EDGE_LOOP('',(#24376)); #4564=EDGE_LOOP('',(#24377)); #4565=EDGE_LOOP('',(#24378)); #4566=EDGE_LOOP('',(#24379)); #4567=EDGE_LOOP('',(#24380)); #4568=EDGE_LOOP('',(#24381)); #4569=EDGE_LOOP('',(#24382)); #4570=EDGE_LOOP('',(#24383,#24384,#24385,#24386,#24387,#24388,#24389,#24390, #24391,#24392,#24393,#24394,#24395,#24396,#24397,#24398,#24399,#24400,#24401, #24402,#24403,#24404,#24405,#24406,#24407,#24408,#24409,#24410,#24411,#24412, #24413,#24414,#24415,#24416,#24417,#24418,#24419,#24420,#24421,#24422,#24423, #24424,#24425,#24426,#24427,#24428,#24429,#24430,#24431,#24432,#24433,#24434, #24435,#24436,#24437,#24438,#24439,#24440,#24441,#24442,#24443,#24444,#24445, #24446,#24447,#24448,#24449,#24450,#24451,#24452,#24453,#24454,#24455,#24456, #24457,#24458,#24459,#24460,#24461,#24462,#24463,#24464,#24465,#24466,#24467, #24468,#24469,#24470,#24471,#24472,#24473,#24474,#24475,#24476,#24477,#24478, #24479,#24480,#24481,#24482,#24483,#24484,#24485,#24486,#24487,#24488,#24489, #24490,#24491,#24492,#24493,#24494,#24495,#24496,#24497,#24498,#24499,#24500, #24501,#24502,#24503,#24504,#24505,#24506,#24507,#24508,#24509,#24510,#24511, #24512,#24513,#24514,#24515,#24516,#24517,#24518,#24519,#24520,#24521,#24522, #24523,#24524,#24525,#24526,#24527,#24528,#24529,#24530,#24531,#24532,#24533, #24534,#24535,#24536,#24537,#24538,#24539,#24540,#24541,#24542,#24543,#24544, #24545,#24546,#24547,#24548,#24549,#24550,#24551,#24552,#24553,#24554,#24555, #24556,#24557,#24558,#24559,#24560,#24561,#24562,#24563,#24564,#24565,#24566, #24567,#24568,#24569,#24570,#24571,#24572,#24573,#24574,#24575,#24576,#24577, #24578,#24579,#24580,#24581,#24582,#24583,#24584,#24585,#24586,#24587,#24588, #24589,#24590,#24591,#24592,#24593,#24594,#24595,#24596,#24597,#24598,#24599, #24600,#24601,#24602,#24603,#24604,#24605,#24606,#24607,#24608,#24609,#24610, #24611,#24612)); #4571=EDGE_LOOP('',(#24613)); #4572=EDGE_LOOP('',(#24614)); #4573=EDGE_LOOP('',(#24615)); #4574=EDGE_LOOP('',(#24616)); #4575=EDGE_LOOP('',(#24617,#24618,#24619,#24620,#24621,#24622,#24623,#24624, #24625,#24626,#24627,#24628,#24629,#24630,#24631,#24632,#24633,#24634,#24635, #24636,#24637,#24638,#24639,#24640,#24641,#24642,#24643,#24644,#24645,#24646, #24647,#24648,#24649,#24650,#24651,#24652,#24653,#24654,#24655,#24656,#24657, #24658,#24659,#24660,#24661,#24662,#24663,#24664,#24665,#24666,#24667,#24668, #24669,#24670,#24671,#24672,#24673,#24674,#24675,#24676,#24677,#24678,#24679, #24680,#24681,#24682,#24683,#24684,#24685,#24686,#24687,#24688,#24689,#24690, #24691,#24692,#24693,#24694,#24695,#24696,#24697,#24698,#24699,#24700,#24701, #24702,#24703,#24704,#24705,#24706,#24707,#24708,#24709,#24710,#24711,#24712, #24713,#24714,#24715,#24716,#24717,#24718,#24719,#24720,#24721,#24722,#24723, #24724,#24725,#24726,#24727,#24728,#24729,#24730,#24731,#24732,#24733,#24734, #24735,#24736,#24737,#24738,#24739,#24740,#24741,#24742,#24743,#24744,#24745, #24746,#24747,#24748,#24749,#24750,#24751,#24752,#24753,#24754,#24755,#24756, #24757,#24758,#24759,#24760,#24761,#24762,#24763,#24764,#24765,#24766,#24767, #24768,#24769,#24770,#24771,#24772,#24773,#24774,#24775,#24776,#24777,#24778, #24779,#24780,#24781,#24782,#24783,#24784,#24785,#24786,#24787,#24788,#24789, #24790,#24791,#24792,#24793,#24794,#24795,#24796,#24797,#24798,#24799,#24800, #24801,#24802,#24803,#24804,#24805,#24806,#24807,#24808,#24809,#24810,#24811, #24812,#24813,#24814,#24815,#24816,#24817,#24818,#24819,#24820,#24821,#24822, #24823,#24824,#24825,#24826,#24827,#24828,#24829,#24830,#24831,#24832,#24833, #24834,#24835,#24836,#24837,#24838,#24839,#24840,#24841,#24842,#24843,#24844, #24845,#24846)); #4576=EDGE_LOOP('',(#24847)); #4577=EDGE_LOOP('',(#24848)); #4578=EDGE_LOOP('',(#24849)); #4579=EDGE_LOOP('',(#24850)); #4580=EDGE_LOOP('',(#24851,#24852,#24853,#24854)); #4581=EDGE_LOOP('',(#24855,#24856,#24857,#24858)); #4582=EDGE_LOOP('',(#24859,#24860,#24861,#24862,#24863,#24864)); #4583=EDGE_LOOP('',(#24865,#24866,#24867,#24868,#24869,#24870)); #4584=EDGE_LOOP('',(#24871,#24872,#24873,#24874)); #4585=EDGE_LOOP('',(#24875,#24876,#24877,#24878)); #4586=EDGE_LOOP('',(#24879,#24880,#24881,#24882)); #4587=EDGE_LOOP('',(#24883,#24884,#24885,#24886,#24887,#24888)); #4588=EDGE_LOOP('',(#24889,#24890,#24891,#24892,#24893,#24894)); #4589=EDGE_LOOP('',(#24895,#24896,#24897,#24898)); #4590=EDGE_LOOP('',(#24899,#24900,#24901,#24902)); #4591=EDGE_LOOP('',(#24903,#24904,#24905,#24906)); #4592=EDGE_LOOP('',(#24907,#24908,#24909,#24910,#24911,#24912)); #4593=EDGE_LOOP('',(#24913,#24914,#24915,#24916,#24917,#24918)); #4594=EDGE_LOOP('',(#24919,#24920,#24921,#24922)); #4595=EDGE_LOOP('',(#24923,#24924,#24925,#24926)); #4596=EDGE_LOOP('',(#24927,#24928,#24929,#24930)); #4597=EDGE_LOOP('',(#24931,#24932,#24933,#24934,#24935,#24936)); #4598=EDGE_LOOP('',(#24937,#24938,#24939,#24940,#24941,#24942)); #4599=EDGE_LOOP('',(#24943,#24944,#24945,#24946)); #4600=EDGE_LOOP('',(#24947,#24948,#24949,#24950)); #4601=EDGE_LOOP('',(#24951,#24952,#24953,#24954)); #4602=EDGE_LOOP('',(#24955,#24956,#24957,#24958)); #4603=EDGE_LOOP('',(#24959,#24960,#24961,#24962)); #4604=EDGE_LOOP('',(#24963,#24964,#24965,#24966)); #4605=EDGE_LOOP('',(#24967,#24968,#24969,#24970)); #4606=EDGE_LOOP('',(#24971,#24972,#24973,#24974)); #4607=EDGE_LOOP('',(#24975,#24976,#24977,#24978)); #4608=EDGE_LOOP('',(#24979,#24980,#24981,#24982)); #4609=EDGE_LOOP('',(#24983,#24984,#24985,#24986)); #4610=EDGE_LOOP('',(#24987,#24988,#24989,#24990)); #4611=EDGE_LOOP('',(#24991,#24992,#24993,#24994)); #4612=EDGE_LOOP('',(#24995,#24996,#24997,#24998)); #4613=EDGE_LOOP('',(#24999,#25000,#25001,#25002)); #4614=EDGE_LOOP('',(#25003,#25004,#25005,#25006)); #4615=EDGE_LOOP('',(#25007,#25008,#25009,#25010)); #4616=EDGE_LOOP('',(#25011,#25012,#25013,#25014)); #4617=EDGE_LOOP('',(#25015,#25016,#25017,#25018)); #4618=EDGE_LOOP('',(#25019,#25020,#25021,#25022)); #4619=EDGE_LOOP('',(#25023,#25024,#25025,#25026)); #4620=EDGE_LOOP('',(#25027,#25028,#25029,#25030)); #4621=EDGE_LOOP('',(#25031,#25032,#25033,#25034)); #4622=EDGE_LOOP('',(#25035,#25036,#25037,#25038)); #4623=EDGE_LOOP('',(#25039,#25040,#25041,#25042)); #4624=EDGE_LOOP('',(#25043,#25044,#25045,#25046)); #4625=EDGE_LOOP('',(#25047,#25048,#25049,#25050)); #4626=EDGE_LOOP('',(#25051,#25052,#25053,#25054)); #4627=EDGE_LOOP('',(#25055,#25056,#25057,#25058)); #4628=EDGE_LOOP('',(#25059,#25060,#25061,#25062)); #4629=EDGE_LOOP('',(#25063,#25064,#25065,#25066)); #4630=EDGE_LOOP('',(#25067,#25068,#25069,#25070)); #4631=EDGE_LOOP('',(#25071,#25072,#25073,#25074)); #4632=EDGE_LOOP('',(#25075,#25076,#25077,#25078)); #4633=EDGE_LOOP('',(#25079,#25080,#25081,#25082)); #4634=EDGE_LOOP('',(#25083,#25084,#25085,#25086)); #4635=EDGE_LOOP('',(#25087,#25088,#25089,#25090)); #4636=EDGE_LOOP('',(#25091,#25092,#25093,#25094)); #4637=EDGE_LOOP('',(#25095,#25096,#25097,#25098)); #4638=EDGE_LOOP('',(#25099,#25100,#25101,#25102)); #4639=EDGE_LOOP('',(#25103,#25104,#25105,#25106)); #4640=EDGE_LOOP('',(#25107,#25108,#25109,#25110)); #4641=EDGE_LOOP('',(#25111,#25112,#25113,#25114)); #4642=EDGE_LOOP('',(#25115,#25116,#25117,#25118)); #4643=EDGE_LOOP('',(#25119,#25120,#25121,#25122)); #4644=EDGE_LOOP('',(#25123,#25124,#25125,#25126)); #4645=EDGE_LOOP('',(#25127,#25128,#25129,#25130)); #4646=EDGE_LOOP('',(#25131,#25132,#25133,#25134,#25135,#25136,#25137,#25138, #25139,#25140,#25141,#25142)); #4647=EDGE_LOOP('',(#25143,#25144,#25145,#25146)); #4648=EDGE_LOOP('',(#25147,#25148,#25149,#25150)); #4649=EDGE_LOOP('',(#25151,#25152,#25153,#25154)); #4650=EDGE_LOOP('',(#25155,#25156,#25157,#25158)); #4651=EDGE_LOOP('',(#25159,#25160,#25161,#25162)); #4652=EDGE_LOOP('',(#25163,#25164,#25165,#25166)); #4653=EDGE_LOOP('',(#25167,#25168,#25169,#25170)); #4654=EDGE_LOOP('',(#25171,#25172,#25173,#25174)); #4655=EDGE_LOOP('',(#25175,#25176,#25177,#25178)); #4656=EDGE_LOOP('',(#25179,#25180,#25181,#25182)); #4657=EDGE_LOOP('',(#25183,#25184,#25185,#25186)); #4658=EDGE_LOOP('',(#25187,#25188,#25189,#25190)); #4659=EDGE_LOOP('',(#25191,#25192,#25193,#25194,#25195,#25196,#25197,#25198, #25199,#25200,#25201,#25202)); #4660=EDGE_LOOP('',(#25203,#25204,#25205,#25206,#25207,#25208,#25209,#25210, #25211,#25212,#25213,#25214)); #4661=EDGE_LOOP('',(#25215,#25216,#25217,#25218,#25219,#25220,#25221,#25222, #25223,#25224,#25225,#25226)); #4662=EDGE_LOOP('',(#25227,#25228,#25229,#25230)); #4663=EDGE_LOOP('',(#25231,#25232,#25233,#25234)); #4664=EDGE_LOOP('',(#25235,#25236,#25237,#25238)); #4665=EDGE_LOOP('',(#25239,#25240,#25241,#25242)); #4666=EDGE_LOOP('',(#25243,#25244,#25245,#25246)); #4667=EDGE_LOOP('',(#25247,#25248,#25249,#25250)); #4668=EDGE_LOOP('',(#25251,#25252,#25253,#25254)); #4669=EDGE_LOOP('',(#25255,#25256,#25257,#25258)); #4670=EDGE_LOOP('',(#25259,#25260,#25261,#25262)); #4671=EDGE_LOOP('',(#25263,#25264,#25265,#25266)); #4672=EDGE_LOOP('',(#25267,#25268,#25269,#25270)); #4673=EDGE_LOOP('',(#25271,#25272,#25273,#25274)); #4674=EDGE_LOOP('',(#25275,#25276,#25277,#25278,#25279,#25280,#25281,#25282)); #4675=EDGE_LOOP('',(#25283,#25284,#25285,#25286,#25287,#25288,#25289,#25290)); #4676=EDGE_LOOP('',(#25291,#25292,#25293,#25294)); #4677=EDGE_LOOP('',(#25295,#25296,#25297,#25298)); #4678=EDGE_LOOP('',(#25299,#25300,#25301,#25302)); #4679=EDGE_LOOP('',(#25303,#25304,#25305,#25306)); #4680=EDGE_LOOP('',(#25307,#25308,#25309,#25310)); #4681=EDGE_LOOP('',(#25311,#25312,#25313,#25314)); #4682=EDGE_LOOP('',(#25315,#25316,#25317,#25318)); #4683=EDGE_LOOP('',(#25319,#25320,#25321,#25322)); #4684=EDGE_LOOP('',(#25323,#25324,#25325,#25326,#25327,#25328,#25329,#25330)); #4685=EDGE_LOOP('',(#25331,#25332,#25333,#25334,#25335,#25336,#25337,#25338)); #4686=EDGE_LOOP('',(#25339,#25340,#25341,#25342)); #4687=EDGE_LOOP('',(#25343,#25344,#25345,#25346)); #4688=EDGE_LOOP('',(#25347,#25348,#25349,#25350)); #4689=EDGE_LOOP('',(#25351,#25352,#25353,#25354)); #4690=EDGE_LOOP('',(#25355,#25356,#25357,#25358)); #4691=EDGE_LOOP('',(#25359,#25360,#25361,#25362)); #4692=EDGE_LOOP('',(#25363,#25364,#25365,#25366)); #4693=EDGE_LOOP('',(#25367,#25368,#25369,#25370)); #4694=EDGE_LOOP('',(#25371,#25372,#25373,#25374,#25375,#25376,#25377,#25378)); #4695=EDGE_LOOP('',(#25379,#25380,#25381,#25382,#25383,#25384,#25385,#25386)); #4696=EDGE_LOOP('',(#25387,#25388,#25389,#25390)); #4697=EDGE_LOOP('',(#25391,#25392,#25393,#25394)); #4698=EDGE_LOOP('',(#25395,#25396,#25397,#25398)); #4699=EDGE_LOOP('',(#25399,#25400,#25401,#25402)); #4700=EDGE_LOOP('',(#25403,#25404,#25405,#25406)); #4701=EDGE_LOOP('',(#25407,#25408,#25409,#25410)); #4702=EDGE_LOOP('',(#25411,#25412,#25413,#25414)); #4703=EDGE_LOOP('',(#25415,#25416,#25417,#25418)); #4704=EDGE_LOOP('',(#25419,#25420,#25421,#25422,#25423,#25424,#25425,#25426)); #4705=EDGE_LOOP('',(#25427,#25428,#25429,#25430,#25431,#25432,#25433,#25434)); #4706=EDGE_LOOP('',(#25435,#25436,#25437,#25438)); #4707=EDGE_LOOP('',(#25439,#25440,#25441,#25442)); #4708=EDGE_LOOP('',(#25443,#25444,#25445,#25446)); #4709=EDGE_LOOP('',(#25447,#25448,#25449,#25450)); #4710=EDGE_LOOP('',(#25451,#25452,#25453,#25454)); #4711=EDGE_LOOP('',(#25455,#25456,#25457,#25458)); #4712=EDGE_LOOP('',(#25459,#25460,#25461,#25462)); #4713=EDGE_LOOP('',(#25463,#25464,#25465,#25466)); #4714=EDGE_LOOP('',(#25467,#25468,#25469,#25470)); #4715=EDGE_LOOP('',(#25471,#25472,#25473,#25474)); #4716=EDGE_LOOP('',(#25475,#25476,#25477,#25478)); #4717=EDGE_LOOP('',(#25479,#25480,#25481,#25482)); #4718=EDGE_LOOP('',(#25483,#25484,#25485,#25486)); #4719=EDGE_LOOP('',(#25487,#25488,#25489,#25490)); #4720=EDGE_LOOP('',(#25491,#25492,#25493,#25494)); #4721=EDGE_LOOP('',(#25495,#25496,#25497,#25498)); #4722=EDGE_LOOP('',(#25499,#25500,#25501,#25502)); #4723=EDGE_LOOP('',(#25503,#25504,#25505,#25506)); #4724=EDGE_LOOP('',(#25507,#25508,#25509,#25510)); #4725=EDGE_LOOP('',(#25511,#25512,#25513,#25514)); #4726=EDGE_LOOP('',(#25515,#25516,#25517,#25518)); #4727=EDGE_LOOP('',(#25519,#25520,#25521,#25522)); #4728=EDGE_LOOP('',(#25523,#25524,#25525,#25526)); #4729=EDGE_LOOP('',(#25527,#25528,#25529,#25530)); #4730=EDGE_LOOP('',(#25531,#25532,#25533,#25534)); #4731=EDGE_LOOP('',(#25535,#25536,#25537,#25538)); #4732=EDGE_LOOP('',(#25539,#25540,#25541,#25542)); #4733=EDGE_LOOP('',(#25543,#25544,#25545,#25546)); #4734=EDGE_LOOP('',(#25547,#25548,#25549,#25550)); #4735=EDGE_LOOP('',(#25551,#25552,#25553,#25554)); #4736=EDGE_LOOP('',(#25555,#25556,#25557,#25558)); #4737=EDGE_LOOP('',(#25559,#25560,#25561,#25562)); #4738=EDGE_LOOP('',(#25563,#25564,#25565,#25566)); #4739=EDGE_LOOP('',(#25567,#25568,#25569,#25570)); #4740=EDGE_LOOP('',(#25571,#25572,#25573,#25574,#25575,#25576,#25577,#25578)); #4741=EDGE_LOOP('',(#25579,#25580,#25581,#25582)); #4742=EDGE_LOOP('',(#25583,#25584,#25585,#25586,#25587,#25588,#25589,#25590)); #4743=EDGE_LOOP('',(#25591,#25592,#25593,#25594)); #4744=EDGE_LOOP('',(#25595,#25596,#25597,#25598)); #4745=EDGE_LOOP('',(#25599,#25600,#25601,#25602)); #4746=EDGE_LOOP('',(#25603,#25604,#25605,#25606)); #4747=EDGE_LOOP('',(#25607,#25608,#25609,#25610)); #4748=EDGE_LOOP('',(#25611,#25612,#25613,#25614)); #4749=EDGE_LOOP('',(#25615,#25616,#25617,#25618)); #4750=EDGE_LOOP('',(#25619,#25620,#25621,#25622)); #4751=EDGE_LOOP('',(#25623,#25624,#25625,#25626)); #4752=EDGE_LOOP('',(#25627,#25628,#25629,#25630)); #4753=EDGE_LOOP('',(#25631,#25632,#25633,#25634)); #4754=EDGE_LOOP('',(#25635,#25636,#25637,#25638,#25639,#25640,#25641,#25642, #25643,#25644,#25645,#25646)); #4755=EDGE_LOOP('',(#25647,#25648,#25649,#25650)); #4756=EDGE_LOOP('',(#25651,#25652,#25653,#25654)); #4757=EDGE_LOOP('',(#25655,#25656,#25657,#25658,#25659,#25660,#25661,#25662)); #4758=EDGE_LOOP('',(#25663,#25664,#25665,#25666)); #4759=EDGE_LOOP('',(#25667,#25668,#25669,#25670,#25671,#25672,#25673,#25674)); #4760=EDGE_LOOP('',(#25675,#25676,#25677,#25678)); #4761=EDGE_LOOP('',(#25679,#25680,#25681,#25682)); #4762=EDGE_LOOP('',(#25683,#25684,#25685,#25686)); #4763=EDGE_LOOP('',(#25687,#25688,#25689,#25690)); #4764=EDGE_LOOP('',(#25691,#25692,#25693,#25694)); #4765=EDGE_LOOP('',(#25695,#25696,#25697,#25698)); #4766=EDGE_LOOP('',(#25699,#25700,#25701,#25702)); #4767=EDGE_LOOP('',(#25703,#25704,#25705,#25706)); #4768=EDGE_LOOP('',(#25707,#25708,#25709,#25710)); #4769=EDGE_LOOP('',(#25711,#25712,#25713,#25714)); #4770=EDGE_LOOP('',(#25715,#25716,#25717,#25718)); #4771=EDGE_LOOP('',(#25719,#25720,#25721,#25722)); #4772=EDGE_LOOP('',(#25723,#25724,#25725,#25726)); #4773=EDGE_LOOP('',(#25727,#25728,#25729,#25730)); #4774=EDGE_LOOP('',(#25731,#25732,#25733,#25734)); #4775=EDGE_LOOP('',(#25735,#25736,#25737,#25738)); #4776=EDGE_LOOP('',(#25739,#25740,#25741,#25742)); #4777=EDGE_LOOP('',(#25743,#25744,#25745,#25746)); #4778=EDGE_LOOP('',(#25747,#25748,#25749,#25750)); #4779=EDGE_LOOP('',(#25751,#25752,#25753,#25754)); #4780=EDGE_LOOP('',(#25755,#25756,#25757,#25758)); #4781=EDGE_LOOP('',(#25759,#25760,#25761,#25762)); #4782=EDGE_LOOP('',(#25763,#25764,#25765,#25766)); #4783=EDGE_LOOP('',(#25767,#25768,#25769,#25770)); #4784=EDGE_LOOP('',(#25771,#25772,#25773,#25774)); #4785=EDGE_LOOP('',(#25775,#25776,#25777,#25778)); #4786=EDGE_LOOP('',(#25779,#25780,#25781,#25782)); #4787=EDGE_LOOP('',(#25783,#25784,#25785,#25786)); #4788=EDGE_LOOP('',(#25787,#25788,#25789,#25790)); #4789=EDGE_LOOP('',(#25791,#25792,#25793,#25794)); #4790=EDGE_LOOP('',(#25795,#25796,#25797,#25798)); #4791=EDGE_LOOP('',(#25799,#25800,#25801,#25802)); #4792=EDGE_LOOP('',(#25803,#25804,#25805,#25806)); #4793=EDGE_LOOP('',(#25807,#25808,#25809,#25810)); #4794=EDGE_LOOP('',(#25811,#25812,#25813,#25814)); #4795=EDGE_LOOP('',(#25815,#25816,#25817,#25818)); #4796=EDGE_LOOP('',(#25819,#25820,#25821,#25822)); #4797=EDGE_LOOP('',(#25823,#25824,#25825,#25826)); #4798=EDGE_LOOP('',(#25827,#25828,#25829,#25830)); #4799=EDGE_LOOP('',(#25831,#25832,#25833,#25834)); #4800=EDGE_LOOP('',(#25835,#25836,#25837,#25838)); #4801=EDGE_LOOP('',(#25839,#25840,#25841,#25842)); #4802=EDGE_LOOP('',(#25843,#25844,#25845,#25846,#25847,#25848,#25849,#25850)); #4803=EDGE_LOOP('',(#25851,#25852,#25853,#25854,#25855,#25856,#25857,#25858, #25859,#25860,#25861,#25862)); #4804=EDGE_LOOP('',(#25863,#25864,#25865,#25866)); #4805=EDGE_LOOP('',(#25867,#25868,#25869,#25870)); #4806=EDGE_LOOP('',(#25871,#25872,#25873,#25874)); #4807=EDGE_LOOP('',(#25875,#25876,#25877,#25878)); #4808=EDGE_LOOP('',(#25879,#25880,#25881,#25882,#25883)); #4809=EDGE_LOOP('',(#25884,#25885,#25886,#25887)); #4810=EDGE_LOOP('',(#25888,#25889,#25890,#25891)); #4811=EDGE_LOOP('',(#25892,#25893,#25894,#25895,#25896)); #4812=EDGE_LOOP('',(#25897,#25898,#25899,#25900)); #4813=EDGE_LOOP('',(#25901,#25902,#25903,#25904)); #4814=EDGE_LOOP('',(#25905,#25906,#25907,#25908,#25909)); #4815=EDGE_LOOP('',(#25910,#25911,#25912,#25913)); #4816=EDGE_LOOP('',(#25914,#25915,#25916,#25917,#25918)); #4817=EDGE_LOOP('',(#25919,#25920,#25921,#25922)); #4818=EDGE_LOOP('',(#25923,#25924,#25925,#25926)); #4819=EDGE_LOOP('',(#25927,#25928,#25929,#25930,#25931,#25932,#25933,#25934, #25935,#25936,#25937,#25938,#25939,#25940,#25941,#25942,#25943,#25944,#25945)); #4820=EDGE_LOOP('',(#25946,#25947,#25948,#25949,#25950,#25951,#25952,#25953, #25954,#25955,#25956,#25957)); #4821=EDGE_LOOP('',(#25958,#25959,#25960,#25961)); #4822=EDGE_LOOP('',(#25962,#25963,#25964,#25965)); #4823=EDGE_LOOP('',(#25966,#25967,#25968,#25969)); #4824=EDGE_LOOP('',(#25970,#25971,#25972,#25973)); #4825=EDGE_LOOP('',(#25974,#25975,#25976,#25977)); #4826=EDGE_LOOP('',(#25978,#25979,#25980,#25981,#25982,#25983,#25984,#25985, #25986,#25987)); #4827=EDGE_LOOP('',(#25988,#25989,#25990,#25991)); #4828=EDGE_LOOP('',(#25992,#25993,#25994,#25995,#25996,#25997)); #4829=EDGE_LOOP('',(#25998,#25999,#26000,#26001)); #4830=EDGE_LOOP('',(#26002,#26003,#26004,#26005,#26006,#26007,#26008,#26009)); #4831=EDGE_LOOP('',(#26010,#26011,#26012,#26013)); #4832=EDGE_LOOP('',(#26014,#26015,#26016,#26017,#26018,#26019,#26020,#26021, #26022,#26023,#26024,#26025,#26026,#26027,#26028,#26029,#26030,#26031,#26032, #26033,#26034,#26035,#26036,#26037,#26038,#26039)); #4833=EDGE_LOOP('',(#26040,#26041,#26042,#26043,#26044,#26045,#26046,#26047, #26048,#26049,#26050,#26051)); #4834=EDGE_LOOP('',(#26052,#26053,#26054,#26055)); #4835=EDGE_LOOP('',(#26056,#26057,#26058,#26059)); #4836=EDGE_LOOP('',(#26060,#26061,#26062,#26063)); #4837=EDGE_LOOP('',(#26064,#26065,#26066,#26067)); #4838=EDGE_LOOP('',(#26068,#26069,#26070,#26071)); #4839=EDGE_LOOP('',(#26072,#26073,#26074,#26075)); #4840=EDGE_LOOP('',(#26076,#26077,#26078,#26079)); #4841=EDGE_LOOP('',(#26080,#26081,#26082,#26083)); #4842=EDGE_LOOP('',(#26084,#26085,#26086,#26087,#26088,#26089)); #4843=EDGE_LOOP('',(#26090,#26091,#26092,#26093,#26094,#26095)); #4844=EDGE_LOOP('',(#26096,#26097,#26098,#26099,#26100,#26101)); #4845=EDGE_LOOP('',(#26102,#26103,#26104,#26105,#26106,#26107)); #4846=EDGE_LOOP('',(#26108,#26109,#26110,#26111)); #4847=EDGE_LOOP('',(#26112,#26113,#26114,#26115)); #4848=EDGE_LOOP('',(#26116,#26117,#26118,#26119)); #4849=EDGE_LOOP('',(#26120,#26121,#26122,#26123)); #4850=EDGE_LOOP('',(#26124,#26125,#26126,#26127)); #4851=EDGE_LOOP('',(#26128,#26129,#26130,#26131)); #4852=EDGE_LOOP('',(#26132,#26133,#26134,#26135)); #4853=EDGE_LOOP('',(#26136,#26137,#26138,#26139)); #4854=EDGE_LOOP('',(#26140,#26141,#26142,#26143)); #4855=EDGE_LOOP('',(#26144,#26145,#26146,#26147)); #4856=EDGE_LOOP('',(#26148,#26149,#26150,#26151)); #4857=EDGE_LOOP('',(#26152,#26153,#26154,#26155)); #4858=EDGE_LOOP('',(#26156,#26157,#26158,#26159,#26160,#26161)); #4859=EDGE_LOOP('',(#26162,#26163,#26164,#26165)); #4860=EDGE_LOOP('',(#26166,#26167,#26168,#26169,#26170,#26171)); #4861=EDGE_LOOP('',(#26172,#26173,#26174,#26175)); #4862=EDGE_LOOP('',(#26176,#26177,#26178,#26179)); #4863=EDGE_LOOP('',(#26180,#26181,#26182,#26183)); #4864=EDGE_LOOP('',(#26184,#26185,#26186,#26187,#26188,#26189)); #4865=EDGE_LOOP('',(#26190,#26191,#26192,#26193,#26194,#26195)); #4866=EDGE_LOOP('',(#26196,#26197,#26198,#26199)); #4867=EDGE_LOOP('',(#26200,#26201,#26202,#26203)); #4868=EDGE_LOOP('',(#26204,#26205,#26206,#26207,#26208,#26209,#26210,#26211)); #4869=EDGE_LOOP('',(#26212,#26213,#26214,#26215,#26216,#26217,#26218,#26219, #26220,#26221,#26222,#26223,#26224,#26225,#26226,#26227,#26228,#26229,#26230, #26231,#26232,#26233,#26234,#26235,#26236,#26237,#26238,#26239,#26240,#26241, #26242,#26243,#26244,#26245,#26246,#26247,#26248,#26249,#26250,#26251,#26252, #26253,#26254,#26255,#26256,#26257,#26258,#26259,#26260,#26261,#26262,#26263, #26264,#26265,#26266,#26267,#26268,#26269,#26270,#26271,#26272,#26273,#26274, #26275,#26276,#26277,#26278,#26279)); #4870=EDGE_LOOP('',(#26280,#26281,#26282,#26283,#26284,#26285,#26286)); #4871=EDGE_LOOP('',(#26287,#26288,#26289,#26290)); #4872=EDGE_LOOP('',(#26291,#26292,#26293,#26294)); #4873=EDGE_LOOP('',(#26295,#26296,#26297,#26298)); #4874=EDGE_LOOP('',(#26299,#26300,#26301,#26302)); #4875=EDGE_LOOP('',(#26303,#26304,#26305,#26306)); #4876=EDGE_LOOP('',(#26307,#26308,#26309,#26310)); #4877=EDGE_LOOP('',(#26311,#26312,#26313,#26314,#26315,#26316,#26317)); #4878=EDGE_LOOP('',(#26318,#26319,#26320,#26321)); #4879=EDGE_LOOP('',(#26322,#26323,#26324,#26325,#26326,#26327,#26328,#26329)); #4880=EDGE_LOOP('',(#26330,#26331,#26332,#26333,#26334,#26335)); #4881=EDGE_LOOP('',(#26336,#26337,#26338,#26339)); #4882=EDGE_LOOP('',(#26340,#26341,#26342,#26343,#26344)); #4883=EDGE_LOOP('',(#26345,#26346,#26347,#26348)); #4884=EDGE_LOOP('',(#26349,#26350,#26351,#26352,#26353,#26354,#26355,#26356, #26357,#26358)); #4885=EDGE_LOOP('',(#26359,#26360,#26361,#26362)); #4886=EDGE_LOOP('',(#26363,#26364,#26365,#26366)); #4887=EDGE_LOOP('',(#26367,#26368,#26369,#26370,#26371,#26372,#26373,#26374, #26375,#26376,#26377,#26378,#26379,#26380,#26381,#26382,#26383,#26384,#26385)); #4888=EDGE_LOOP('',(#26386,#26387,#26388,#26389,#26390,#26391,#26392,#26393, #26394,#26395,#26396,#26397)); #4889=EDGE_LOOP('',(#26398,#26399,#26400,#26401)); #4890=EDGE_LOOP('',(#26402,#26403,#26404,#26405)); #4891=EDGE_LOOP('',(#26406,#26407,#26408,#26409)); #4892=EDGE_LOOP('',(#26410,#26411,#26412,#26413)); #4893=EDGE_LOOP('',(#26414,#26415,#26416,#26417)); #4894=EDGE_LOOP('',(#26418,#26419,#26420,#26421)); #4895=EDGE_LOOP('',(#26422,#26423,#26424,#26425,#26426,#26427,#26428,#26429, #26430,#26431,#26432,#26433,#26434,#26435,#26436,#26437,#26438,#26439,#26440, #26441,#26442,#26443,#26444,#26445,#26446,#26447)); #4896=EDGE_LOOP('',(#26448,#26449,#26450,#26451,#26452,#26453,#26454,#26455, #26456,#26457,#26458,#26459)); #4897=EDGE_LOOP('',(#26460,#26461,#26462,#26463)); #4898=EDGE_LOOP('',(#26464,#26465,#26466,#26467)); #4899=EDGE_LOOP('',(#26468,#26469,#26470,#26471)); #4900=EDGE_LOOP('',(#26472,#26473,#26474,#26475)); #4901=EDGE_LOOP('',(#26476,#26477,#26478,#26479)); #4902=EDGE_LOOP('',(#26480,#26481,#26482,#26483)); #4903=EDGE_LOOP('',(#26484,#26485,#26486,#26487,#26488,#26489)); #4904=EDGE_LOOP('',(#26490,#26491,#26492,#26493,#26494,#26495)); #4905=EDGE_LOOP('',(#26496,#26497,#26498,#26499,#26500,#26501)); #4906=EDGE_LOOP('',(#26502,#26503,#26504,#26505,#26506,#26507)); #4907=EDGE_LOOP('',(#26508,#26509,#26510,#26511)); #4908=EDGE_LOOP('',(#26512,#26513,#26514,#26515)); #4909=EDGE_LOOP('',(#26516,#26517,#26518,#26519)); #4910=EDGE_LOOP('',(#26520,#26521,#26522,#26523)); #4911=EDGE_LOOP('',(#26524,#26525,#26526,#26527)); #4912=EDGE_LOOP('',(#26528,#26529,#26530,#26531)); #4913=EDGE_LOOP('',(#26532,#26533,#26534,#26535)); #4914=EDGE_LOOP('',(#26536,#26537,#26538,#26539)); #4915=EDGE_LOOP('',(#26540,#26541,#26542,#26543)); #4916=EDGE_LOOP('',(#26544,#26545,#26546,#26547)); #4917=EDGE_LOOP('',(#26548,#26549,#26550,#26551)); #4918=EDGE_LOOP('',(#26552,#26553,#26554,#26555)); #4919=EDGE_LOOP('',(#26556,#26557,#26558,#26559,#26560,#26561)); #4920=EDGE_LOOP('',(#26562,#26563,#26564,#26565)); #4921=EDGE_LOOP('',(#26566,#26567,#26568,#26569,#26570,#26571)); #4922=EDGE_LOOP('',(#26572,#26573,#26574,#26575)); #4923=EDGE_LOOP('',(#26576,#26577,#26578,#26579)); #4924=EDGE_LOOP('',(#26580,#26581,#26582,#26583)); #4925=EDGE_LOOP('',(#26584,#26585,#26586,#26587)); #4926=EDGE_LOOP('',(#26588,#26589,#26590,#26591,#26592,#26593,#26594,#26595)); #4927=EDGE_LOOP('',(#26596,#26597,#26598,#26599,#26600,#26601)); #4928=EDGE_LOOP('',(#26602,#26603,#26604,#26605,#26606,#26607,#26608)); #4929=EDGE_LOOP('',(#26609,#26610,#26611,#26612)); #4930=EDGE_LOOP('',(#26613,#26614,#26615,#26616,#26617,#26618,#26619)); #4931=EDGE_LOOP('',(#26620,#26621,#26622,#26623)); #4932=EDGE_LOOP('',(#26624,#26625,#26626,#26627)); #4933=EDGE_LOOP('',(#26628,#26629,#26630,#26631,#26632,#26633)); #4934=EDGE_LOOP('',(#26634,#26635,#26636,#26637)); #4935=EDGE_LOOP('',(#26638,#26639,#26640,#26641)); #4936=EDGE_LOOP('',(#26642,#26643,#26644,#26645)); #4937=EDGE_LOOP('',(#26646,#26647,#26648,#26649,#26650,#26651)); #4938=EDGE_LOOP('',(#26652,#26653,#26654,#26655)); #4939=EDGE_LOOP('',(#26656,#26657,#26658,#26659)); #4940=EDGE_LOOP('',(#26660,#26661,#26662,#26663)); #4941=EDGE_LOOP('',(#26664,#26665,#26666,#26667)); #4942=EDGE_LOOP('',(#26668,#26669,#26670,#26671,#26672,#26673,#26674,#26675, #26676,#26677,#26678,#26679,#26680,#26681,#26682,#26683,#26684,#26685,#26686, #26687)); #4943=EDGE_LOOP('',(#26688,#26689,#26690,#26691,#26692,#26693,#26694,#26695, #26696,#26697,#26698,#26699,#26700,#26701)); #4944=EDGE_LOOP('',(#26702,#26703,#26704,#26705,#26706,#26707,#26708,#26709, #26710,#26711,#26712,#26713,#26714,#26715)); #4945=EDGE_LOOP('',(#26716,#26717,#26718,#26719,#26720,#26721,#26722,#26723, #26724,#26725,#26726,#26727)); #4946=EDGE_LOOP('',(#26728,#26729,#26730,#26731,#26732,#26733,#26734,#26735, #26736,#26737,#26738,#26739)); #4947=EDGE_LOOP('',(#26740,#26741,#26742,#26743)); #4948=EDGE_LOOP('',(#26744,#26745,#26746,#26747)); #4949=EDGE_LOOP('',(#26748,#26749,#26750,#26751,#26752,#26753,#26754,#26755, #26756,#26757,#26758,#26759)); #4950=EDGE_LOOP('',(#26760,#26761,#26762,#26763,#26764,#26765,#26766,#26767, #26768,#26769,#26770,#26771)); #4951=EDGE_LOOP('',(#26772,#26773,#26774,#26775)); #4952=EDGE_LOOP('',(#26776,#26777,#26778,#26779)); #4953=EDGE_LOOP('',(#26780,#26781,#26782,#26783)); #4954=EDGE_LOOP('',(#26784,#26785,#26786,#26787)); #4955=EDGE_LOOP('',(#26788,#26789,#26790,#26791)); #4956=EDGE_LOOP('',(#26792,#26793,#26794,#26795)); #4957=EDGE_LOOP('',(#26796,#26797,#26798,#26799)); #4958=EDGE_LOOP('',(#26800,#26801,#26802,#26803)); #4959=EDGE_LOOP('',(#26804,#26805,#26806,#26807)); #4960=EDGE_LOOP('',(#26808,#26809,#26810,#26811)); #4961=EDGE_LOOP('',(#26812,#26813,#26814,#26815)); #4962=EDGE_LOOP('',(#26816,#26817,#26818,#26819)); #4963=EDGE_LOOP('',(#26820,#26821,#26822,#26823)); #4964=EDGE_LOOP('',(#26824,#26825,#26826,#26827)); #4965=EDGE_LOOP('',(#26828,#26829,#26830,#26831)); #4966=EDGE_LOOP('',(#26832,#26833,#26834,#26835)); #4967=EDGE_LOOP('',(#26836,#26837,#26838,#26839)); #4968=EDGE_LOOP('',(#26840,#26841,#26842,#26843)); #4969=EDGE_LOOP('',(#26844,#26845,#26846,#26847,#26848,#26849,#26850,#26851)); #4970=EDGE_LOOP('',(#26852,#26853,#26854,#26855,#26856,#26857,#26858,#26859, #26860,#26861,#26862,#26863,#26864,#26865)); #4971=EDGE_LOOP('',(#26866,#26867,#26868,#26869,#26870,#26871,#26872,#26873, #26874,#26875,#26876,#26877,#26878,#26879)); #4972=EDGE_LOOP('',(#26880,#26881,#26882,#26883)); #4973=EDGE_LOOP('',(#26884,#26885,#26886,#26887)); #4974=EDGE_LOOP('',(#26888,#26889,#26890,#26891)); #4975=EDGE_LOOP('',(#26892,#26893,#26894,#26895)); #4976=EDGE_LOOP('',(#26896,#26897,#26898,#26899)); #4977=EDGE_LOOP('',(#26900,#26901,#26902,#26903)); #4978=EDGE_LOOP('',(#26904,#26905,#26906,#26907)); #4979=EDGE_LOOP('',(#26908,#26909,#26910,#26911)); #4980=EDGE_LOOP('',(#26912,#26913,#26914,#26915,#26916,#26917,#26918,#26919, #26920,#26921,#26922,#26923)); #4981=EDGE_LOOP('',(#26924,#26925,#26926,#26927)); #4982=EDGE_LOOP('',(#26928,#26929,#26930,#26931,#26932,#26933)); #4983=EDGE_LOOP('',(#26934,#26935,#26936,#26937)); #4984=EDGE_LOOP('',(#26938,#26939,#26940,#26941)); #4985=EDGE_LOOP('',(#26942,#26943,#26944,#26945)); #4986=EDGE_LOOP('',(#26946,#26947,#26948,#26949,#26950,#26951,#26952,#26953, #26954,#26955,#26956,#26957)); #4987=EDGE_LOOP('',(#26958,#26959,#26960,#26961)); #4988=EDGE_LOOP('',(#26962,#26963,#26964,#26965,#26966,#26967)); #4989=EDGE_LOOP('',(#26968,#26969,#26970,#26971)); #4990=EDGE_LOOP('',(#26972,#26973,#26974,#26975)); #4991=EDGE_LOOP('',(#26976,#26977,#26978,#26979)); #4992=EDGE_LOOP('',(#26980,#26981,#26982,#26983)); #4993=EDGE_LOOP('',(#26984,#26985,#26986,#26987)); #4994=EDGE_LOOP('',(#26988,#26989,#26990,#26991)); #4995=EDGE_LOOP('',(#26992,#26993,#26994,#26995)); #4996=EDGE_LOOP('',(#26996,#26997,#26998,#26999)); #4997=EDGE_LOOP('',(#27000,#27001,#27002,#27003)); #4998=EDGE_LOOP('',(#27004,#27005,#27006,#27007)); #4999=EDGE_LOOP('',(#27008,#27009,#27010,#27011)); #5000=EDGE_LOOP('',(#27012,#27013,#27014,#27015)); #5001=EDGE_LOOP('',(#27016,#27017,#27018,#27019,#27020,#27021,#27022,#27023, #27024,#27025,#27026,#27027)); #5002=EDGE_LOOP('',(#27028,#27029,#27030,#27031)); #5003=EDGE_LOOP('',(#27032,#27033,#27034,#27035,#27036,#27037)); #5004=EDGE_LOOP('',(#27038,#27039,#27040,#27041)); #5005=EDGE_LOOP('',(#27042,#27043,#27044,#27045,#27046,#27047)); #5006=EDGE_LOOP('',(#27048,#27049,#27050,#27051,#27052,#27053,#27054,#27055, #27056,#27057,#27058,#27059)); #5007=EDGE_LOOP('',(#27060,#27061,#27062,#27063)); #5008=EDGE_LOOP('',(#27064,#27065,#27066,#27067)); #5009=EDGE_LOOP('',(#27068,#27069,#27070,#27071)); #5010=EDGE_LOOP('',(#27072,#27073,#27074,#27075)); #5011=EDGE_LOOP('',(#27076,#27077,#27078,#27079)); #5012=EDGE_LOOP('',(#27080,#27081,#27082,#27083)); #5013=EDGE_LOOP('',(#27084,#27085,#27086,#27087)); #5014=EDGE_LOOP('',(#27088,#27089,#27090,#27091)); #5015=EDGE_LOOP('',(#27092,#27093,#27094,#27095)); #5016=EDGE_LOOP('',(#27096,#27097,#27098,#27099)); #5017=EDGE_LOOP('',(#27100,#27101,#27102,#27103)); #5018=EDGE_LOOP('',(#27104,#27105,#27106,#27107,#27108,#27109,#27110,#27111)); #5019=EDGE_LOOP('',(#27112,#27113,#27114,#27115,#27116,#27117)); #5020=EDGE_LOOP('',(#27118,#27119,#27120,#27121,#27122,#27123)); #5021=EDGE_LOOP('',(#27124,#27125,#27126,#27127,#27128,#27129)); #5022=EDGE_LOOP('',(#27130,#27131,#27132,#27133,#27134,#27135)); #5023=EDGE_LOOP('',(#27136,#27137,#27138,#27139,#27140,#27141,#27142,#27143, #27144,#27145)); #5024=EDGE_LOOP('',(#27146,#27147,#27148,#27149)); #5025=EDGE_LOOP('',(#27150,#27151,#27152,#27153)); #5026=EDGE_LOOP('',(#27154,#27155,#27156,#27157)); #5027=EDGE_LOOP('',(#27158,#27159,#27160,#27161,#27162,#27163)); #5028=EDGE_LOOP('',(#27164,#27165,#27166,#27167)); #5029=EDGE_LOOP('',(#27168,#27169,#27170,#27171,#27172,#27173)); #5030=EDGE_LOOP('',(#27174,#27175,#27176,#27177,#27178,#27179)); #5031=EDGE_LOOP('',(#27180,#27181,#27182,#27183,#27184,#27185)); #5032=EDGE_LOOP('',(#27186,#27187,#27188,#27189,#27190,#27191,#27192)); #5033=EDGE_LOOP('',(#27193,#27194,#27195,#27196,#27197,#27198,#27199,#27200)); #5034=EDGE_LOOP('',(#27201,#27202,#27203,#27204,#27205,#27206,#27207,#27208, #27209,#27210,#27211,#27212,#27213,#27214)); #5035=EDGE_LOOP('',(#27215,#27216,#27217,#27218,#27219,#27220,#27221,#27222, #27223,#27224,#27225,#27226,#27227,#27228)); #5036=EDGE_LOOP('',(#27229,#27230,#27231,#27232)); #5037=EDGE_LOOP('',(#27233,#27234,#27235,#27236)); #5038=EDGE_LOOP('',(#27237,#27238,#27239,#27240)); #5039=EDGE_LOOP('',(#27241,#27242,#27243,#27244)); #5040=EDGE_LOOP('',(#27245,#27246,#27247,#27248)); #5041=EDGE_LOOP('',(#27249,#27250,#27251,#27252)); #5042=EDGE_LOOP('',(#27253,#27254,#27255,#27256)); #5043=EDGE_LOOP('',(#27257,#27258,#27259,#27260)); #5044=EDGE_LOOP('',(#27261,#27262,#27263,#27264)); #5045=EDGE_LOOP('',(#27265,#27266,#27267,#27268,#27269,#27270,#27271,#27272)); #5046=EDGE_LOOP('',(#27273,#27274,#27275,#27276,#27277,#27278,#27279,#27280, #27281,#27282,#27283,#27284,#27285,#27286)); #5047=EDGE_LOOP('',(#27287,#27288,#27289,#27290)); #5048=EDGE_LOOP('',(#27291,#27292,#27293,#27294)); #5049=EDGE_LOOP('',(#27295,#27296,#27297,#27298,#27299,#27300,#27301,#27302, #27303,#27304,#27305,#27306,#27307,#27308)); #5050=EDGE_LOOP('',(#27309,#27310,#27311,#27312)); #5051=EDGE_LOOP('',(#27313,#27314,#27315,#27316)); #5052=EDGE_LOOP('',(#27317,#27318,#27319,#27320)); #5053=EDGE_LOOP('',(#27321,#27322,#27323,#27324)); #5054=EDGE_LOOP('',(#27325,#27326,#27327,#27328)); #5055=EDGE_LOOP('',(#27329,#27330,#27331,#27332)); #5056=EDGE_LOOP('',(#27333,#27334,#27335,#27336)); #5057=EDGE_LOOP('',(#27337,#27338,#27339,#27340)); #5058=EDGE_LOOP('',(#27341,#27342,#27343,#27344)); #5059=EDGE_LOOP('',(#27345,#27346,#27347,#27348)); #5060=EDGE_LOOP('',(#27349,#27350,#27351,#27352)); #5061=EDGE_LOOP('',(#27353,#27354,#27355,#27356)); #5062=EDGE_LOOP('',(#27357,#27358,#27359,#27360)); #5063=EDGE_LOOP('',(#27361,#27362,#27363,#27364)); #5064=EDGE_LOOP('',(#27365,#27366,#27367,#27368)); #5065=EDGE_LOOP('',(#27369,#27370,#27371,#27372)); #5066=EDGE_LOOP('',(#27373,#27374,#27375,#27376)); #5067=EDGE_LOOP('',(#27377,#27378,#27379,#27380)); #5068=EDGE_LOOP('',(#27381,#27382,#27383,#27384,#27385,#27386)); #5069=EDGE_LOOP('',(#27387,#27388,#27389,#27390)); #5070=EDGE_LOOP('',(#27391,#27392,#27393,#27394)); #5071=EDGE_LOOP('',(#27395,#27396,#27397,#27398,#27399,#27400)); #5072=EDGE_LOOP('',(#27401,#27402,#27403,#27404)); #5073=EDGE_LOOP('',(#27405,#27406,#27407,#27408)); #5074=EDGE_LOOP('',(#27409,#27410,#27411,#27412)); #5075=EDGE_LOOP('',(#27413,#27414,#27415,#27416)); #5076=EDGE_LOOP('',(#27417,#27418,#27419,#27420)); #5077=EDGE_LOOP('',(#27421,#27422,#27423,#27424)); #5078=EDGE_LOOP('',(#27425,#27426,#27427,#27428)); #5079=EDGE_LOOP('',(#27429,#27430,#27431,#27432)); #5080=EDGE_LOOP('',(#27433,#27434,#27435,#27436)); #5081=EDGE_LOOP('',(#27437,#27438,#27439,#27440)); #5082=EDGE_LOOP('',(#27441,#27442,#27443,#27444)); #5083=EDGE_LOOP('',(#27445,#27446,#27447,#27448)); #5084=EDGE_LOOP('',(#27449,#27450,#27451,#27452)); #5085=EDGE_LOOP('',(#27453,#27454,#27455,#27456)); #5086=EDGE_LOOP('',(#27457,#27458,#27459,#27460)); #5087=EDGE_LOOP('',(#27461,#27462,#27463,#27464)); #5088=EDGE_LOOP('',(#27465,#27466,#27467,#27468)); #5089=EDGE_LOOP('',(#27469,#27470,#27471,#27472)); #5090=EDGE_LOOP('',(#27473,#27474,#27475,#27476)); #5091=EDGE_LOOP('',(#27477,#27478,#27479,#27480)); #5092=EDGE_LOOP('',(#27481,#27482,#27483,#27484)); #5093=EDGE_LOOP('',(#27485,#27486,#27487,#27488)); #5094=EDGE_LOOP('',(#27489,#27490,#27491,#27492)); #5095=EDGE_LOOP('',(#27493,#27494,#27495,#27496)); #5096=EDGE_LOOP('',(#27497,#27498,#27499,#27500)); #5097=EDGE_LOOP('',(#27501,#27502,#27503,#27504)); #5098=EDGE_LOOP('',(#27505,#27506,#27507,#27508)); #5099=EDGE_LOOP('',(#27509,#27510,#27511,#27512)); #5100=EDGE_LOOP('',(#27513,#27514,#27515,#27516,#27517,#27518)); #5101=EDGE_LOOP('',(#27519,#27520,#27521,#27522)); #5102=EDGE_LOOP('',(#27523,#27524,#27525,#27526,#27527,#27528)); #5103=EDGE_LOOP('',(#27529,#27530,#27531,#27532)); #5104=EDGE_LOOP('',(#27533,#27534,#27535,#27536)); #5105=EDGE_LOOP('',(#27537,#27538,#27539,#27540)); #5106=EDGE_LOOP('',(#27541,#27542,#27543,#27544)); #5107=EDGE_LOOP('',(#27545,#27546,#27547,#27548)); #5108=EDGE_LOOP('',(#27549,#27550,#27551,#27552)); #5109=EDGE_LOOP('',(#27553,#27554,#27555,#27556)); #5110=EDGE_LOOP('',(#27557,#27558,#27559,#27560)); #5111=EDGE_LOOP('',(#27561,#27562,#27563,#27564)); #5112=EDGE_LOOP('',(#27565,#27566,#27567,#27568)); #5113=EDGE_LOOP('',(#27569,#27570,#27571,#27572)); #5114=EDGE_LOOP('',(#27573,#27574,#27575,#27576)); #5115=EDGE_LOOP('',(#27577,#27578,#27579,#27580)); #5116=EDGE_LOOP('',(#27581,#27582,#27583,#27584)); #5117=EDGE_LOOP('',(#27585,#27586,#27587,#27588,#27589,#27590)); #5118=EDGE_LOOP('',(#27591,#27592,#27593,#27594)); #5119=EDGE_LOOP('',(#27595,#27596,#27597,#27598)); #5120=EDGE_LOOP('',(#27599,#27600,#27601,#27602)); #5121=EDGE_LOOP('',(#27603,#27604,#27605,#27606,#27607,#27608,#27609)); #5122=EDGE_LOOP('',(#27610,#27611,#27612,#27613,#27614,#27615)); #5123=EDGE_LOOP('',(#27616,#27617,#27618,#27619,#27620,#27621)); #5124=EDGE_LOOP('',(#27622,#27623,#27624,#27625)); #5125=EDGE_LOOP('',(#27626,#27627,#27628,#27629)); #5126=EDGE_LOOP('',(#27630,#27631,#27632,#27633)); #5127=EDGE_LOOP('',(#27634,#27635,#27636,#27637,#27638,#27639)); #5128=EDGE_LOOP('',(#27640,#27641,#27642,#27643)); #5129=EDGE_LOOP('',(#27644,#27645,#27646,#27647)); #5130=EDGE_LOOP('',(#27648,#27649,#27650,#27651,#27652,#27653)); #5131=EDGE_LOOP('',(#27654,#27655,#27656,#27657)); #5132=EDGE_LOOP('',(#27658,#27659,#27660,#27661)); #5133=EDGE_LOOP('',(#27662,#27663,#27664,#27665)); #5134=EDGE_LOOP('',(#27666,#27667,#27668,#27669,#27670,#27671,#27672,#27673)); #5135=EDGE_LOOP('',(#27674,#27675,#27676,#27677,#27678)); #5136=EDGE_LOOP('',(#27679,#27680,#27681,#27682,#27683,#27684,#27685,#27686, #27687,#27688,#27689,#27690,#27691,#27692,#27693,#27694)); #5137=EDGE_LOOP('',(#27695,#27696,#27697,#27698,#27699)); #5138=EDGE_LOOP('',(#27700,#27701,#27702,#27703,#27704,#27705,#27706,#27707)); #5139=EDGE_LOOP('',(#27708,#27709,#27710,#27711,#27712)); #5140=EDGE_LOOP('',(#27713,#27714,#27715,#27716,#27717,#27718,#27719,#27720)); #5141=EDGE_LOOP('',(#27721,#27722,#27723,#27724)); #5142=EDGE_LOOP('',(#27725,#27726,#27727,#27728)); #5143=EDGE_LOOP('',(#27729,#27730,#27731,#27732)); #5144=EDGE_LOOP('',(#27733,#27734,#27735,#27736,#27737)); #5145=EDGE_LOOP('',(#27738,#27739,#27740,#27741)); #5146=EDGE_LOOP('',(#27742,#27743,#27744,#27745)); #5147=EDGE_LOOP('',(#27746,#27747,#27748,#27749,#27750,#27751,#27752,#27753)); #5148=EDGE_LOOP('',(#27754,#27755,#27756,#27757,#27758,#27759,#27760,#27761, #27762,#27763,#27764,#27765,#27766,#27767,#27768,#27769,#27770,#27771,#27772, #27773)); #5149=EDGE_LOOP('',(#27774,#27775,#27776,#27777,#27778,#27779)); #5150=EDGE_LOOP('',(#27780,#27781,#27782,#27783)); #5151=EDGE_LOOP('',(#27784,#27785,#27786,#27787)); #5152=EDGE_LOOP('',(#27788,#27789,#27790,#27791,#27792,#27793)); #5153=EDGE_LOOP('',(#27794,#27795,#27796,#27797,#27798,#27799,#27800,#27801, #27802,#27803,#27804,#27805,#27806,#27807,#27808,#27809,#27810,#27811,#27812, #27813,#27814,#27815,#27816,#27817,#27818,#27819,#27820,#27821)); #5154=EDGE_LOOP('',(#27822,#27823,#27824,#27825)); #5155=EDGE_LOOP('',(#27826,#27827,#27828,#27829)); #5156=EDGE_LOOP('',(#27830,#27831,#27832,#27833,#27834,#27835)); #5157=EDGE_LOOP('',(#27836,#27837,#27838,#27839)); #5158=EDGE_LOOP('',(#27840,#27841,#27842,#27843)); #5159=EDGE_LOOP('',(#27844,#27845,#27846,#27847,#27848,#27849)); #5160=EDGE_LOOP('',(#27850,#27851,#27852,#27853,#27854,#27855)); #5161=EDGE_LOOP('',(#27856,#27857,#27858,#27859)); #5162=EDGE_LOOP('',(#27860,#27861,#27862,#27863)); #5163=EDGE_LOOP('',(#27864,#27865,#27866,#27867)); #5164=EDGE_LOOP('',(#27868,#27869,#27870,#27871)); #5165=EDGE_LOOP('',(#27872,#27873,#27874,#27875,#27876,#27877,#27878,#27879, #27880,#27881,#27882,#27883,#27884,#27885)); #5166=EDGE_LOOP('',(#27886,#27887,#27888,#27889,#27890,#27891,#27892,#27893, #27894,#27895,#27896,#27897,#27898,#27899,#27900,#27901,#27902,#27903,#27904, #27905)); #5167=EDGE_LOOP('',(#27906,#27907,#27908,#27909)); #5168=EDGE_LOOP('',(#27910,#27911,#27912,#27913)); #5169=EDGE_LOOP('',(#27914,#27915,#27916,#27917)); #5170=EDGE_LOOP('',(#27918,#27919,#27920,#27921)); #5171=EDGE_LOOP('',(#27922,#27923,#27924,#27925)); #5172=EDGE_LOOP('',(#27926,#27927,#27928,#27929)); #5173=EDGE_LOOP('',(#27930,#27931,#27932,#27933)); #5174=EDGE_LOOP('',(#27934,#27935,#27936,#27937)); #5175=EDGE_LOOP('',(#27938,#27939,#27940,#27941,#27942,#27943,#27944,#27945, #27946,#27947,#27948,#27949,#27950,#27951,#27952,#27953,#27954,#27955,#27956, #27957)); #5176=EDGE_LOOP('',(#27958,#27959,#27960,#27961)); #5177=EDGE_LOOP('',(#27962,#27963,#27964,#27965)); #5178=EDGE_LOOP('',(#27966,#27967,#27968,#27969)); #5179=EDGE_LOOP('',(#27970,#27971,#27972,#27973)); #5180=EDGE_LOOP('',(#27974,#27975,#27976,#27977)); #5181=EDGE_LOOP('',(#27978,#27979,#27980,#27981)); #5182=EDGE_LOOP('',(#27982,#27983,#27984,#27985)); #5183=EDGE_LOOP('',(#27986,#27987,#27988,#27989)); #5184=EDGE_LOOP('',(#27990,#27991,#27992,#27993,#27994,#27995)); #5185=EDGE_LOOP('',(#27996,#27997,#27998,#27999)); #5186=EDGE_LOOP('',(#28000,#28001,#28002,#28003,#28004,#28005)); #5187=EDGE_LOOP('',(#28006,#28007,#28008,#28009)); #5188=EDGE_LOOP('',(#28010,#28011,#28012,#28013,#28014,#28015)); #5189=EDGE_LOOP('',(#28016,#28017,#28018,#28019)); #5190=EDGE_LOOP('',(#28020,#28021,#28022,#28023,#28024,#28025)); #5191=EDGE_LOOP('',(#28026,#28027,#28028,#28029)); #5192=EDGE_LOOP('',(#28030,#28031,#28032,#28033,#28034,#28035)); #5193=EDGE_LOOP('',(#28036,#28037,#28038,#28039)); #5194=EDGE_LOOP('',(#28040,#28041,#28042,#28043,#28044,#28045)); #5195=EDGE_LOOP('',(#28046,#28047,#28048,#28049)); #5196=EDGE_LOOP('',(#28050,#28051,#28052,#28053,#28054,#28055)); #5197=EDGE_LOOP('',(#28056,#28057,#28058,#28059)); #5198=EDGE_LOOP('',(#28060,#28061,#28062,#28063,#28064,#28065)); #5199=EDGE_LOOP('',(#28066,#28067,#28068,#28069)); #5200=EDGE_LOOP('',(#28070,#28071,#28072,#28073)); #5201=EDGE_LOOP('',(#28074,#28075,#28076,#28077)); #5202=EDGE_LOOP('',(#28078,#28079,#28080,#28081)); #5203=EDGE_LOOP('',(#28082,#28083,#28084,#28085)); #5204=EDGE_LOOP('',(#28086,#28087,#28088,#28089)); #5205=EDGE_LOOP('',(#28090,#28091,#28092,#28093)); #5206=EDGE_LOOP('',(#28094,#28095,#28096,#28097)); #5207=EDGE_LOOP('',(#28098,#28099,#28100,#28101)); #5208=EDGE_LOOP('',(#28102,#28103,#28104,#28105,#28106,#28107,#28108,#28109, #28110,#28111,#28112,#28113,#28114,#28115)); #5209=EDGE_LOOP('',(#28116,#28117,#28118,#28119)); #5210=EDGE_LOOP('',(#28120,#28121,#28122,#28123)); #5211=EDGE_LOOP('',(#28124,#28125,#28126,#28127)); #5212=EDGE_LOOP('',(#28128,#28129,#28130,#28131)); #5213=EDGE_LOOP('',(#28132,#28133,#28134,#28135)); #5214=EDGE_LOOP('',(#28136,#28137,#28138,#28139,#28140,#28141,#28142,#28143, #28144,#28145,#28146,#28147,#28148,#28149,#28150,#28151,#28152,#28153,#28154, #28155)); #5215=EDGE_LOOP('',(#28156,#28157,#28158,#28159)); #5216=EDGE_LOOP('',(#28160,#28161,#28162,#28163)); #5217=EDGE_LOOP('',(#28164,#28165,#28166,#28167)); #5218=EDGE_LOOP('',(#28168,#28169,#28170,#28171)); #5219=EDGE_LOOP('',(#28172,#28173,#28174,#28175)); #5220=EDGE_LOOP('',(#28176,#28177,#28178,#28179)); #5221=EDGE_LOOP('',(#28180,#28181,#28182,#28183)); #5222=EDGE_LOOP('',(#28184,#28185,#28186,#28187)); #5223=EDGE_LOOP('',(#28188,#28189,#28190,#28191,#28192,#28193,#28194,#28195, #28196,#28197,#28198,#28199,#28200,#28201,#28202,#28203,#28204,#28205,#28206, #28207)); #5224=EDGE_LOOP('',(#28208,#28209,#28210,#28211)); #5225=EDGE_LOOP('',(#28212,#28213,#28214,#28215,#28216,#28217,#28218,#28219, #28220,#28221,#28222,#28223,#28224,#28225,#28226,#28227,#28228,#28229,#28230, #28231)); #5226=EDGE_LOOP('',(#28232,#28233,#28234,#28235)); #5227=EDGE_LOOP('',(#28236,#28237,#28238,#28239)); #5228=EDGE_LOOP('',(#28240,#28241,#28242,#28243)); #5229=EDGE_LOOP('',(#28244,#28245,#28246,#28247)); #5230=EDGE_LOOP('',(#28248,#28249,#28250,#28251)); #5231=EDGE_LOOP('',(#28252,#28253,#28254,#28255)); #5232=EDGE_LOOP('',(#28256,#28257,#28258,#28259)); #5233=EDGE_LOOP('',(#28260,#28261,#28262,#28263)); #5234=EDGE_LOOP('',(#28264,#28265,#28266,#28267,#28268,#28269,#28270,#28271, #28272,#28273,#28274,#28275,#28276,#28277)); #5235=EDGE_LOOP('',(#28278,#28279,#28280,#28281)); #5236=EDGE_LOOP('',(#28282,#28283,#28284,#28285,#28286,#28287,#28288,#28289, #28290,#28291,#28292,#28293,#28294,#28295)); #5237=EDGE_LOOP('',(#28296,#28297,#28298,#28299)); #5238=EDGE_LOOP('',(#28300,#28301,#28302,#28303)); #5239=EDGE_LOOP('',(#28304,#28305,#28306,#28307)); #5240=EDGE_LOOP('',(#28308,#28309,#28310,#28311,#28312,#28313)); #5241=EDGE_LOOP('',(#28314,#28315,#28316,#28317)); #5242=EDGE_LOOP('',(#28318,#28319,#28320,#28321)); #5243=EDGE_LOOP('',(#28322,#28323,#28324,#28325)); #5244=EDGE_LOOP('',(#28326,#28327,#28328,#28329,#28330,#28331)); #5245=EDGE_LOOP('',(#28332,#28333,#28334,#28335)); #5246=EDGE_LOOP('',(#28336,#28337,#28338,#28339)); #5247=EDGE_LOOP('',(#28340,#28341,#28342,#28343)); #5248=EDGE_LOOP('',(#28344,#28345,#28346,#28347)); #5249=EDGE_LOOP('',(#28348,#28349,#28350,#28351,#28352,#28353,#28354,#28355, #28356,#28357,#28358,#28359,#28360,#28361)); #5250=EDGE_LOOP('',(#28362,#28363,#28364,#28365,#28366,#28367,#28368,#28369, #28370,#28371,#28372,#28373,#28374,#28375,#28376,#28377,#28378,#28379,#28380, #28381)); #5251=EDGE_LOOP('',(#28382,#28383,#28384,#28385)); #5252=EDGE_LOOP('',(#28386,#28387,#28388,#28389,#28390,#28391,#28392,#28393, #28394,#28395,#28396,#28397,#28398,#28399,#28400,#28401,#28402,#28403,#28404, #28405)); #5253=EDGE_LOOP('',(#28406,#28407,#28408,#28409)); #5254=EDGE_LOOP('',(#28410,#28411,#28412,#28413)); #5255=EDGE_LOOP('',(#28414,#28415,#28416,#28417)); #5256=EDGE_LOOP('',(#28418,#28419,#28420,#28421)); #5257=EDGE_LOOP('',(#28422,#28423,#28424,#28425)); #5258=EDGE_LOOP('',(#28426,#28427,#28428,#28429)); #5259=EDGE_LOOP('',(#28430,#28431,#28432,#28433)); #5260=EDGE_LOOP('',(#28434,#28435,#28436,#28437)); #5261=EDGE_LOOP('',(#28438,#28439,#28440,#28441,#28442,#28443,#28444,#28445, #28446,#28447,#28448,#28449,#28450,#28451)); #5262=EDGE_LOOP('',(#28452,#28453,#28454,#28455)); #5263=EDGE_LOOP('',(#28456,#28457,#28458,#28459)); #5264=EDGE_LOOP('',(#28460,#28461,#28462,#28463)); #5265=EDGE_LOOP('',(#28464,#28465,#28466,#28467)); #5266=EDGE_LOOP('',(#28468,#28469,#28470,#28471)); #5267=EDGE_LOOP('',(#28472,#28473,#28474,#28475)); #5268=EDGE_LOOP('',(#28476,#28477,#28478,#28479)); #5269=EDGE_LOOP('',(#28480,#28481,#28482,#28483)); #5270=EDGE_LOOP('',(#28484,#28485,#28486,#28487)); #5271=EDGE_LOOP('',(#28488,#28489,#28490,#28491)); #5272=EDGE_LOOP('',(#28492,#28493,#28494,#28495)); #5273=EDGE_LOOP('',(#28496,#28497,#28498,#28499)); #5274=EDGE_LOOP('',(#28500,#28501,#28502,#28503,#28504,#28505)); #5275=EDGE_LOOP('',(#28506,#28507,#28508,#28509)); #5276=EDGE_LOOP('',(#28510,#28511,#28512,#28513)); #5277=EDGE_LOOP('',(#28514,#28515,#28516,#28517)); #5278=EDGE_LOOP('',(#28518,#28519,#28520,#28521,#28522,#28523)); #5279=EDGE_LOOP('',(#28524,#28525,#28526,#28527)); #5280=EDGE_LOOP('',(#28528,#28529,#28530,#28531)); #5281=EDGE_LOOP('',(#28532,#28533,#28534,#28535)); #5282=EDGE_LOOP('',(#28536,#28537,#28538,#28539)); #5283=EDGE_LOOP('',(#28540,#28541,#28542,#28543,#28544,#28545,#28546,#28547, #28548,#28549,#28550,#28551,#28552,#28553)); #5284=EDGE_LOOP('',(#28554,#28555,#28556,#28557,#28558,#28559,#28560,#28561, #28562,#28563,#28564,#28565,#28566,#28567,#28568,#28569,#28570,#28571,#28572, #28573)); #5285=EDGE_LOOP('',(#28574,#28575,#28576,#28577)); #5286=EDGE_LOOP('',(#28578,#28579,#28580,#28581,#28582,#28583,#28584,#28585, #28586,#28587,#28588,#28589,#28590,#28591,#28592,#28593,#28594,#28595,#28596, #28597)); #5287=EDGE_LOOP('',(#28598,#28599,#28600,#28601)); #5288=EDGE_LOOP('',(#28602,#28603,#28604,#28605)); #5289=EDGE_LOOP('',(#28606,#28607,#28608,#28609)); #5290=EDGE_LOOP('',(#28610,#28611,#28612,#28613)); #5291=EDGE_LOOP('',(#28614,#28615,#28616,#28617)); #5292=EDGE_LOOP('',(#28618,#28619,#28620,#28621)); #5293=EDGE_LOOP('',(#28622,#28623,#28624,#28625)); #5294=EDGE_LOOP('',(#28626,#28627,#28628,#28629)); #5295=EDGE_LOOP('',(#28630,#28631,#28632,#28633,#28634,#28635,#28636,#28637, #28638,#28639,#28640,#28641,#28642,#28643)); #5296=EDGE_LOOP('',(#28644,#28645,#28646,#28647)); #5297=EDGE_LOOP('',(#28648,#28649,#28650,#28651)); #5298=EDGE_LOOP('',(#28652,#28653,#28654,#28655)); #5299=EDGE_LOOP('',(#28656,#28657,#28658,#28659)); #5300=EDGE_LOOP('',(#28660,#28661,#28662,#28663)); #5301=EDGE_LOOP('',(#28664,#28665,#28666,#28667)); #5302=EDGE_LOOP('',(#28668,#28669,#28670,#28671)); #5303=EDGE_LOOP('',(#28672,#28673,#28674,#28675)); #5304=EDGE_LOOP('',(#28676,#28677,#28678,#28679)); #5305=EDGE_LOOP('',(#28680,#28681,#28682,#28683)); #5306=EDGE_LOOP('',(#28684,#28685,#28686,#28687)); #5307=EDGE_LOOP('',(#28688,#28689,#28690,#28691)); #5308=EDGE_LOOP('',(#28692,#28693,#28694,#28695,#28696,#28697)); #5309=EDGE_LOOP('',(#28698,#28699,#28700,#28701)); #5310=EDGE_LOOP('',(#28702,#28703,#28704,#28705)); #5311=EDGE_LOOP('',(#28706,#28707,#28708,#28709)); #5312=EDGE_LOOP('',(#28710,#28711,#28712,#28713)); #5313=EDGE_LOOP('',(#28714,#28715,#28716,#28717)); #5314=EDGE_LOOP('',(#28718,#28719,#28720,#28721,#28722,#28723)); #5315=EDGE_LOOP('',(#28724,#28725,#28726,#28727)); #5316=EDGE_LOOP('',(#28728,#28729,#28730,#28731)); #5317=EDGE_LOOP('',(#28732,#28733,#28734,#28735)); #5318=EDGE_LOOP('',(#28736,#28737,#28738,#28739,#28740,#28741)); #5319=EDGE_LOOP('',(#28742,#28743,#28744,#28745)); #5320=EDGE_LOOP('',(#28746,#28747,#28748,#28749)); #5321=EDGE_LOOP('',(#28750,#28751,#28752,#28753)); #5322=EDGE_LOOP('',(#28754,#28755,#28756,#28757)); #5323=EDGE_LOOP('',(#28758,#28759,#28760,#28761)); #5324=EDGE_LOOP('',(#28762,#28763,#28764,#28765)); #5325=EDGE_LOOP('',(#28766,#28767,#28768,#28769)); #5326=EDGE_LOOP('',(#28770,#28771,#28772,#28773)); #5327=EDGE_LOOP('',(#28774,#28775,#28776,#28777)); #5328=EDGE_LOOP('',(#28778,#28779,#28780,#28781)); #5329=EDGE_LOOP('',(#28782,#28783,#28784,#28785)); #5330=EDGE_LOOP('',(#28786,#28787,#28788,#28789)); #5331=EDGE_LOOP('',(#28790,#28791,#28792,#28793)); #5332=EDGE_LOOP('',(#28794,#28795,#28796,#28797)); #5333=EDGE_LOOP('',(#28798,#28799,#28800,#28801)); #5334=EDGE_LOOP('',(#28802,#28803,#28804,#28805)); #5335=EDGE_LOOP('',(#28806,#28807,#28808,#28809,#28810,#28811)); #5336=EDGE_LOOP('',(#28812,#28813,#28814,#28815)); #5337=EDGE_LOOP('',(#28816,#28817,#28818,#28819,#28820,#28821,#28822,#28823)); #5338=EDGE_LOOP('',(#28824,#28825,#28826,#28827,#28828,#28829)); #5339=EDGE_LOOP('',(#28830,#28831,#28832,#28833,#28834,#28835,#28836)); #5340=EDGE_LOOP('',(#28837,#28838,#28839,#28840)); #5341=EDGE_LOOP('',(#28841,#28842,#28843,#28844,#28845,#28846)); #5342=EDGE_LOOP('',(#28847,#28848,#28849,#28850)); #5343=EDGE_LOOP('',(#28851,#28852,#28853,#28854)); #5344=EDGE_LOOP('',(#28855,#28856,#28857,#28858)); #5345=EDGE_LOOP('',(#28859,#28860,#28861,#28862,#28863,#28864,#28865)); #5346=EDGE_LOOP('',(#28866,#28867,#28868,#28869)); #5347=EDGE_LOOP('',(#28870,#28871,#28872,#28873)); #5348=EDGE_LOOP('',(#28874,#28875,#28876,#28877)); #5349=EDGE_LOOP('',(#28878,#28879,#28880,#28881,#28882)); #5350=EDGE_LOOP('',(#28883,#28884,#28885,#28886)); #5351=EDGE_LOOP('',(#28887,#28888,#28889,#28890)); #5352=EDGE_LOOP('',(#28891,#28892,#28893,#28894)); #5353=EDGE_LOOP('',(#28895,#28896,#28897,#28898)); #5354=EDGE_LOOP('',(#28899,#28900,#28901,#28902)); #5355=EDGE_LOOP('',(#28903,#28904,#28905,#28906,#28907,#28908,#28909,#28910, #28911,#28912,#28913,#28914,#28915,#28916,#28917,#28918,#28919,#28920,#28921, #28922)); #5356=EDGE_LOOP('',(#28923,#28924,#28925,#28926)); #5357=EDGE_LOOP('',(#28927,#28928,#28929,#28930)); #5358=EDGE_LOOP('',(#28931,#28932,#28933,#28934)); #5359=EDGE_LOOP('',(#28935,#28936,#28937,#28938,#28939,#28940,#28941,#28942, #28943,#28944,#28945,#28946,#28947,#28948,#28949,#28950,#28951,#28952,#28953, #28954)); #5360=EDGE_LOOP('',(#28955,#28956,#28957,#28958)); #5361=EDGE_LOOP('',(#28959,#28960,#28961,#28962)); #5362=EDGE_LOOP('',(#28963,#28964,#28965,#28966)); #5363=EDGE_LOOP('',(#28967,#28968,#28969,#28970)); #5364=EDGE_LOOP('',(#28971,#28972,#28973,#28974)); #5365=EDGE_LOOP('',(#28975,#28976,#28977,#28978)); #5366=EDGE_LOOP('',(#28979,#28980,#28981,#28982)); #5367=EDGE_LOOP('',(#28983,#28984,#28985,#28986)); #5368=EDGE_LOOP('',(#28987,#28988,#28989,#28990)); #5369=EDGE_LOOP('',(#28991,#28992,#28993,#28994)); #5370=EDGE_LOOP('',(#28995,#28996,#28997,#28998)); #5371=EDGE_LOOP('',(#28999,#29000,#29001,#29002)); #5372=EDGE_LOOP('',(#29003,#29004,#29005,#29006)); #5373=EDGE_LOOP('',(#29007,#29008,#29009,#29010)); #5374=EDGE_LOOP('',(#29011,#29012,#29013,#29014)); #5375=EDGE_LOOP('',(#29015,#29016,#29017,#29018)); #5376=EDGE_LOOP('',(#29019,#29020,#29021,#29022)); #5377=EDGE_LOOP('',(#29023,#29024,#29025,#29026)); #5378=EDGE_LOOP('',(#29027,#29028,#29029,#29030)); #5379=EDGE_LOOP('',(#29031,#29032,#29033,#29034)); #5380=EDGE_LOOP('',(#29035,#29036,#29037,#29038)); #5381=EDGE_LOOP('',(#29039,#29040,#29041,#29042)); #5382=EDGE_LOOP('',(#29043,#29044,#29045,#29046)); #5383=EDGE_LOOP('',(#29047,#29048,#29049,#29050)); #5384=EDGE_LOOP('',(#29051,#29052,#29053,#29054)); #5385=EDGE_LOOP('',(#29055,#29056,#29057,#29058)); #5386=EDGE_LOOP('',(#29059,#29060,#29061,#29062)); #5387=EDGE_LOOP('',(#29063,#29064,#29065,#29066)); #5388=EDGE_LOOP('',(#29067,#29068,#29069,#29070)); #5389=EDGE_LOOP('',(#29071,#29072,#29073,#29074)); #5390=EDGE_LOOP('',(#29075,#29076,#29077,#29078)); #5391=EDGE_LOOP('',(#29079,#29080,#29081,#29082)); #5392=EDGE_LOOP('',(#29083,#29084,#29085,#29086)); #5393=EDGE_LOOP('',(#29087,#29088,#29089,#29090)); #5394=EDGE_LOOP('',(#29091,#29092,#29093,#29094)); #5395=EDGE_LOOP('',(#29095,#29096,#29097,#29098)); #5396=EDGE_LOOP('',(#29099,#29100,#29101,#29102)); #5397=EDGE_LOOP('',(#29103,#29104,#29105,#29106)); #5398=EDGE_LOOP('',(#29107,#29108,#29109,#29110)); #5399=EDGE_LOOP('',(#29111,#29112,#29113,#29114)); #5400=EDGE_LOOP('',(#29115,#29116,#29117,#29118)); #5401=EDGE_LOOP('',(#29119,#29120,#29121,#29122)); #5402=EDGE_LOOP('',(#29123,#29124,#29125,#29126)); #5403=EDGE_LOOP('',(#29127,#29128,#29129,#29130)); #5404=EDGE_LOOP('',(#29131,#29132,#29133,#29134)); #5405=EDGE_LOOP('',(#29135,#29136,#29137,#29138)); #5406=EDGE_LOOP('',(#29139,#29140,#29141,#29142)); #5407=EDGE_LOOP('',(#29143,#29144,#29145,#29146)); #5408=EDGE_LOOP('',(#29147,#29148,#29149,#29150)); #5409=EDGE_LOOP('',(#29151,#29152,#29153,#29154)); #5410=EDGE_LOOP('',(#29155,#29156,#29157,#29158)); #5411=EDGE_LOOP('',(#29159,#29160,#29161,#29162)); #5412=EDGE_LOOP('',(#29163,#29164,#29165,#29166)); #5413=EDGE_LOOP('',(#29167,#29168,#29169,#29170)); #5414=EDGE_LOOP('',(#29171,#29172,#29173,#29174)); #5415=EDGE_LOOP('',(#29175,#29176,#29177,#29178)); #5416=EDGE_LOOP('',(#29179,#29180,#29181,#29182)); #5417=EDGE_LOOP('',(#29183,#29184,#29185,#29186)); #5418=EDGE_LOOP('',(#29187,#29188,#29189,#29190)); #5419=EDGE_LOOP('',(#29191,#29192,#29193,#29194)); #5420=EDGE_LOOP('',(#29195,#29196,#29197,#29198)); #5421=EDGE_LOOP('',(#29199,#29200,#29201,#29202)); #5422=EDGE_LOOP('',(#29203,#29204,#29205,#29206)); #5423=EDGE_LOOP('',(#29207,#29208,#29209,#29210)); #5424=EDGE_LOOP('',(#29211,#29212,#29213,#29214)); #5425=EDGE_LOOP('',(#29215,#29216,#29217,#29218)); #5426=EDGE_LOOP('',(#29219,#29220,#29221,#29222)); #5427=EDGE_LOOP('',(#29223,#29224,#29225,#29226)); #5428=EDGE_LOOP('',(#29227,#29228,#29229,#29230)); #5429=EDGE_LOOP('',(#29231,#29232,#29233,#29234)); #5430=EDGE_LOOP('',(#29235,#29236,#29237,#29238)); #5431=EDGE_LOOP('',(#29239,#29240,#29241,#29242)); #5432=EDGE_LOOP('',(#29243,#29244,#29245,#29246)); #5433=EDGE_LOOP('',(#29247,#29248,#29249,#29250)); #5434=EDGE_LOOP('',(#29251,#29252,#29253,#29254,#29255,#29256,#29257,#29258)); #5435=EDGE_LOOP('',(#29259,#29260,#29261,#29262)); #5436=EDGE_LOOP('',(#29263,#29264,#29265,#29266)); #5437=EDGE_LOOP('',(#29267,#29268,#29269,#29270)); #5438=EDGE_LOOP('',(#29271,#29272,#29273,#29274)); #5439=EDGE_LOOP('',(#29275,#29276,#29277,#29278)); #5440=EDGE_LOOP('',(#29279,#29280,#29281,#29282)); #5441=EDGE_LOOP('',(#29283,#29284,#29285,#29286)); #5442=EDGE_LOOP('',(#29287,#29288,#29289,#29290)); #5443=EDGE_LOOP('',(#29291,#29292,#29293,#29294,#29295,#29296,#29297,#29298)); #5444=EDGE_LOOP('',(#29299,#29300,#29301,#29302,#29303,#29304,#29305,#29306)); #5445=EDGE_LOOP('',(#29307,#29308,#29309,#29310)); #5446=EDGE_LOOP('',(#29311,#29312,#29313,#29314)); #5447=EDGE_LOOP('',(#29315,#29316,#29317,#29318)); #5448=EDGE_LOOP('',(#29319,#29320,#29321,#29322)); #5449=EDGE_LOOP('',(#29323,#29324,#29325,#29326)); #5450=EDGE_LOOP('',(#29327,#29328,#29329,#29330)); #5451=EDGE_LOOP('',(#29331,#29332,#29333,#29334)); #5452=EDGE_LOOP('',(#29335,#29336,#29337,#29338)); #5453=EDGE_LOOP('',(#29339,#29340,#29341,#29342,#29343,#29344,#29345,#29346)); #5454=EDGE_LOOP('',(#29347,#29348,#29349,#29350,#29351,#29352,#29353,#29354)); #5455=EDGE_LOOP('',(#29355,#29356,#29357,#29358)); #5456=EDGE_LOOP('',(#29359,#29360,#29361,#29362)); #5457=EDGE_LOOP('',(#29363,#29364,#29365,#29366)); #5458=EDGE_LOOP('',(#29367,#29368,#29369,#29370)); #5459=EDGE_LOOP('',(#29371,#29372,#29373,#29374)); #5460=EDGE_LOOP('',(#29375,#29376,#29377,#29378)); #5461=EDGE_LOOP('',(#29379,#29380,#29381,#29382)); #5462=EDGE_LOOP('',(#29383,#29384,#29385,#29386)); #5463=EDGE_LOOP('',(#29387,#29388,#29389,#29390,#29391,#29392,#29393,#29394)); #5464=EDGE_LOOP('',(#29395,#29396,#29397,#29398,#29399,#29400)); #5465=EDGE_LOOP('',(#29401,#29402,#29403,#29404)); #5466=EDGE_LOOP('',(#29405,#29406,#29407,#29408)); #5467=EDGE_LOOP('',(#29409,#29410,#29411,#29412)); #5468=EDGE_LOOP('',(#29413,#29414,#29415,#29416,#29417,#29418,#29419,#29420)); #5469=EDGE_LOOP('',(#29421,#29422,#29423,#29424,#29425,#29426,#29427,#29428, #29429,#29430,#29431,#29432,#29433,#29434)); #5470=EDGE_LOOP('',(#29435,#29436,#29437,#29438,#29439,#29440,#29441,#29442, #29443,#29444,#29445,#29446,#29447,#29448)); #5471=EDGE_LOOP('',(#29449,#29450,#29451,#29452,#29453,#29454)); #5472=EDGE_LOOP('',(#29455,#29456,#29457,#29458)); #5473=EDGE_LOOP('',(#29459,#29460,#29461,#29462)); #5474=EDGE_LOOP('',(#29463,#29464,#29465,#29466)); #5475=EDGE_LOOP('',(#29467,#29468,#29469,#29470)); #5476=EDGE_LOOP('',(#29471,#29472,#29473,#29474)); #5477=EDGE_LOOP('',(#29475,#29476,#29477,#29478)); #5478=EDGE_LOOP('',(#29479,#29480,#29481,#29482)); #5479=EDGE_LOOP('',(#29483,#29484,#29485,#29486)); #5480=EDGE_LOOP('',(#29487,#29488,#29489,#29490)); #5481=EDGE_LOOP('',(#29491,#29492,#29493,#29494)); #5482=EDGE_LOOP('',(#29495,#29496,#29497,#29498)); #5483=EDGE_LOOP('',(#29499,#29500,#29501,#29502)); #5484=EDGE_LOOP('',(#29503,#29504,#29505,#29506)); #5485=EDGE_LOOP('',(#29507,#29508,#29509,#29510)); #5486=EDGE_LOOP('',(#29511,#29512,#29513,#29514)); #5487=EDGE_LOOP('',(#29515,#29516,#29517,#29518,#29519,#29520,#29521,#29522)); #5488=EDGE_LOOP('',(#29523,#29524,#29525)); #5489=EDGE_LOOP('',(#29526,#29527,#29528,#29529)); #5490=EDGE_LOOP('',(#29530,#29531,#29532,#29533)); #5491=EDGE_LOOP('',(#29534,#29535,#29536,#29537)); #5492=EDGE_LOOP('',(#29538,#29539,#29540,#29541)); #5493=EDGE_LOOP('',(#29542,#29543,#29544,#29545)); #5494=EDGE_LOOP('',(#29546,#29547,#29548,#29549)); #5495=EDGE_LOOP('',(#29550,#29551,#29552,#29553)); #5496=EDGE_LOOP('',(#29554,#29555,#29556,#29557)); #5497=EDGE_LOOP('',(#29558,#29559,#29560,#29561)); #5498=EDGE_LOOP('',(#29562,#29563,#29564,#29565)); #5499=EDGE_LOOP('',(#29566,#29567,#29568,#29569)); #5500=EDGE_LOOP('',(#29570,#29571,#29572,#29573)); #5501=EDGE_LOOP('',(#29574,#29575,#29576,#29577)); #5502=EDGE_LOOP('',(#29578,#29579,#29580,#29581)); #5503=EDGE_LOOP('',(#29582,#29583,#29584,#29585)); #5504=EDGE_LOOP('',(#29586,#29587,#29588,#29589)); #5505=EDGE_LOOP('',(#29590,#29591,#29592,#29593)); #5506=EDGE_LOOP('',(#29594,#29595,#29596,#29597)); #5507=EDGE_LOOP('',(#29598,#29599,#29600,#29601)); #5508=EDGE_LOOP('',(#29602,#29603,#29604,#29605)); #5509=EDGE_LOOP('',(#29606,#29607,#29608,#29609)); #5510=EDGE_LOOP('',(#29610,#29611,#29612,#29613)); #5511=EDGE_LOOP('',(#29614,#29615,#29616,#29617)); #5512=EDGE_LOOP('',(#29618,#29619,#29620,#29621)); #5513=EDGE_LOOP('',(#29622,#29623,#29624,#29625)); #5514=EDGE_LOOP('',(#29626,#29627,#29628,#29629)); #5515=EDGE_LOOP('',(#29630,#29631,#29632,#29633)); #5516=EDGE_LOOP('',(#29634,#29635,#29636,#29637)); #5517=EDGE_LOOP('',(#29638,#29639,#29640,#29641)); #5518=EDGE_LOOP('',(#29642,#29643,#29644,#29645)); #5519=EDGE_LOOP('',(#29646,#29647,#29648,#29649)); #5520=EDGE_LOOP('',(#29650,#29651,#29652,#29653)); #5521=EDGE_LOOP('',(#29654,#29655,#29656,#29657)); #5522=EDGE_LOOP('',(#29658,#29659,#29660,#29661,#29662,#29663,#29664,#29665, #29666,#29667,#29668,#29669,#29670,#29671,#29672)); #5523=EDGE_LOOP('',(#29673,#29674,#29675,#29676,#29677,#29678,#29679,#29680, #29681)); #5524=EDGE_LOOP('',(#29682,#29683,#29684,#29685,#29686,#29687,#29688,#29689, #29690)); #5525=EDGE_LOOP('',(#29691,#29692,#29693,#29694,#29695,#29696,#29697,#29698)); #5526=EDGE_LOOP('',(#29699,#29700,#29701,#29702,#29703,#29704,#29705,#29706, #29707,#29708,#29709,#29710,#29711,#29712,#29713,#29714,#29715,#29716,#29717, #29718)); #5527=EDGE_LOOP('',(#29719,#29720,#29721,#29722,#29723,#29724,#29725,#29726, #29727,#29728,#29729,#29730,#29731,#29732)); #5528=EDGE_LOOP('',(#29733,#29734,#29735,#29736,#29737,#29738,#29739,#29740, #29741,#29742,#29743,#29744,#29745,#29746,#29747)); #5529=EDGE_LOOP('',(#29748,#29749,#29750,#29751,#29752,#29753,#29754,#29755)); #5530=EDGE_LOOP('',(#29756,#29757,#29758,#29759,#29760,#29761,#29762,#29763, #29764)); #5531=EDGE_LOOP('',(#29765,#29766,#29767,#29768,#29769,#29770,#29771,#29772, #29773)); #5532=EDGE_LOOP('',(#29774,#29775,#29776,#29777)); #5533=EDGE_LOOP('',(#29778,#29779,#29780,#29781)); #5534=EDGE_LOOP('',(#29782,#29783,#29784,#29785)); #5535=EDGE_LOOP('',(#29786,#29787,#29788,#29789)); #5536=EDGE_LOOP('',(#29790,#29791,#29792,#29793)); #5537=EDGE_LOOP('',(#29794,#29795,#29796,#29797)); #5538=EDGE_LOOP('',(#29798,#29799,#29800,#29801)); #5539=EDGE_LOOP('',(#29802,#29803,#29804,#29805)); #5540=EDGE_LOOP('',(#29806,#29807,#29808,#29809)); #5541=EDGE_LOOP('',(#29810,#29811,#29812,#29813)); #5542=EDGE_LOOP('',(#29814,#29815,#29816,#29817)); #5543=EDGE_LOOP('',(#29818,#29819,#29820,#29821)); #5544=EDGE_LOOP('',(#29822,#29823,#29824,#29825)); #5545=EDGE_LOOP('',(#29826,#29827,#29828,#29829)); #5546=EDGE_LOOP('',(#29830,#29831,#29832,#29833)); #5547=EDGE_LOOP('',(#29834,#29835,#29836,#29837)); #5548=EDGE_LOOP('',(#29838,#29839,#29840,#29841)); #5549=EDGE_LOOP('',(#29842,#29843,#29844,#29845)); #5550=EDGE_LOOP('',(#29846,#29847,#29848,#29849)); #5551=EDGE_LOOP('',(#29850,#29851,#29852,#29853)); #5552=EDGE_LOOP('',(#29854,#29855,#29856,#29857)); #5553=EDGE_LOOP('',(#29858,#29859,#29860,#29861)); #5554=EDGE_LOOP('',(#29862,#29863,#29864,#29865)); #5555=EDGE_LOOP('',(#29866,#29867,#29868,#29869)); #5556=EDGE_LOOP('',(#29870,#29871,#29872,#29873)); #5557=EDGE_LOOP('',(#29874,#29875,#29876,#29877)); #5558=EDGE_LOOP('',(#29878,#29879,#29880,#29881)); #5559=EDGE_LOOP('',(#29882,#29883,#29884,#29885)); #5560=EDGE_LOOP('',(#29886,#29887,#29888,#29889)); #5561=EDGE_LOOP('',(#29890,#29891,#29892,#29893)); #5562=EDGE_LOOP('',(#29894,#29895,#29896,#29897)); #5563=EDGE_LOOP('',(#29898,#29899,#29900,#29901)); #5564=EDGE_LOOP('',(#29902,#29903,#29904,#29905)); #5565=EDGE_LOOP('',(#29906,#29907,#29908,#29909)); #5566=EDGE_LOOP('',(#29910,#29911,#29912,#29913,#29914,#29915,#29916,#29917, #29918,#29919,#29920,#29921,#29922,#29923,#29924,#29925,#29926,#29927,#29928, #29929)); #5567=EDGE_LOOP('',(#29930,#29931,#29932,#29933,#29934,#29935,#29936,#29937, #29938,#29939,#29940,#29941,#29942,#29943)); #5568=EDGE_LOOP('',(#29944,#29945,#29946,#29947)); #5569=EDGE_LOOP('',(#29948,#29949,#29950,#29951)); #5570=EDGE_LOOP('',(#29952,#29953,#29954,#29955)); #5571=EDGE_LOOP('',(#29956,#29957,#29958,#29959)); #5572=EDGE_LOOP('',(#29960,#29961,#29962,#29963)); #5573=EDGE_LOOP('',(#29964,#29965,#29966,#29967)); #5574=EDGE_LOOP('',(#29968,#29969,#29970,#29971)); #5575=EDGE_LOOP('',(#29972,#29973,#29974,#29975)); #5576=EDGE_LOOP('',(#29976,#29977,#29978,#29979)); #5577=EDGE_LOOP('',(#29980,#29981,#29982,#29983)); #5578=EDGE_LOOP('',(#29984,#29985,#29986,#29987)); #5579=EDGE_LOOP('',(#29988,#29989,#29990,#29991)); #5580=EDGE_LOOP('',(#29992,#29993,#29994,#29995)); #5581=EDGE_LOOP('',(#29996,#29997,#29998,#29999)); #5582=EDGE_LOOP('',(#30000,#30001,#30002,#30003)); #5583=EDGE_LOOP('',(#30004,#30005,#30006,#30007)); #5584=EDGE_LOOP('',(#30008,#30009,#30010,#30011)); #5585=EDGE_LOOP('',(#30012,#30013,#30014,#30015)); #5586=EDGE_LOOP('',(#30016,#30017,#30018,#30019)); #5587=EDGE_LOOP('',(#30020,#30021,#30022,#30023)); #5588=EDGE_LOOP('',(#30024,#30025,#30026,#30027)); #5589=EDGE_LOOP('',(#30028,#30029,#30030,#30031)); #5590=EDGE_LOOP('',(#30032,#30033,#30034,#30035)); #5591=EDGE_LOOP('',(#30036,#30037,#30038,#30039)); #5592=EDGE_LOOP('',(#30040,#30041,#30042,#30043)); #5593=EDGE_LOOP('',(#30044,#30045,#30046,#30047)); #5594=EDGE_LOOP('',(#30048,#30049,#30050,#30051)); #5595=EDGE_LOOP('',(#30052,#30053,#30054,#30055)); #5596=EDGE_LOOP('',(#30056,#30057,#30058,#30059)); #5597=EDGE_LOOP('',(#30060,#30061,#30062,#30063)); #5598=EDGE_LOOP('',(#30064,#30065,#30066,#30067)); #5599=EDGE_LOOP('',(#30068,#30069,#30070,#30071)); #5600=EDGE_LOOP('',(#30072,#30073,#30074,#30075)); #5601=EDGE_LOOP('',(#30076,#30077,#30078,#30079)); #5602=EDGE_LOOP('',(#30080,#30081,#30082,#30083)); #5603=EDGE_LOOP('',(#30084,#30085,#30086,#30087)); #5604=EDGE_LOOP('',(#30088,#30089,#30090,#30091)); #5605=EDGE_LOOP('',(#30092,#30093,#30094,#30095)); #5606=EDGE_LOOP('',(#30096,#30097,#30098,#30099)); #5607=EDGE_LOOP('',(#30100,#30101,#30102,#30103)); #5608=EDGE_LOOP('',(#30104,#30105,#30106,#30107)); #5609=EDGE_LOOP('',(#30108,#30109,#30110,#30111)); #5610=EDGE_LOOP('',(#30112,#30113,#30114,#30115)); #5611=EDGE_LOOP('',(#30116,#30117,#30118,#30119)); #5612=EDGE_LOOP('',(#30120,#30121,#30122,#30123)); #5613=EDGE_LOOP('',(#30124,#30125,#30126,#30127)); #5614=EDGE_LOOP('',(#30128,#30129,#30130,#30131)); #5615=EDGE_LOOP('',(#30132,#30133,#30134,#30135)); #5616=EDGE_LOOP('',(#30136,#30137,#30138,#30139)); #5617=EDGE_LOOP('',(#30140,#30141,#30142,#30143)); #5618=EDGE_LOOP('',(#30144,#30145,#30146,#30147)); #5619=EDGE_LOOP('',(#30148,#30149,#30150,#30151)); #5620=EDGE_LOOP('',(#30152,#30153,#30154,#30155)); #5621=EDGE_LOOP('',(#30156,#30157,#30158,#30159)); #5622=EDGE_LOOP('',(#30160,#30161,#30162,#30163)); #5623=EDGE_LOOP('',(#30164,#30165,#30166,#30167)); #5624=EDGE_LOOP('',(#30168,#30169,#30170,#30171)); #5625=EDGE_LOOP('',(#30172,#30173,#30174,#30175)); #5626=EDGE_LOOP('',(#30176,#30177,#30178,#30179)); #5627=EDGE_LOOP('',(#30180,#30181,#30182,#30183)); #5628=EDGE_LOOP('',(#30184,#30185,#30186,#30187)); #5629=EDGE_LOOP('',(#30188,#30189,#30190,#30191)); #5630=EDGE_LOOP('',(#30192,#30193,#30194,#30195)); #5631=EDGE_LOOP('',(#30196,#30197,#30198,#30199)); #5632=EDGE_LOOP('',(#30200,#30201,#30202,#30203)); #5633=EDGE_LOOP('',(#30204,#30205,#30206,#30207)); #5634=EDGE_LOOP('',(#30208,#30209,#30210,#30211)); #5635=EDGE_LOOP('',(#30212,#30213,#30214,#30215)); #5636=EDGE_LOOP('',(#30216,#30217,#30218,#30219)); #5637=EDGE_LOOP('',(#30220,#30221,#30222,#30223)); #5638=EDGE_LOOP('',(#30224,#30225,#30226,#30227)); #5639=EDGE_LOOP('',(#30228,#30229,#30230,#30231)); #5640=EDGE_LOOP('',(#30232,#30233,#30234,#30235)); #5641=EDGE_LOOP('',(#30236,#30237,#30238,#30239)); #5642=EDGE_LOOP('',(#30240,#30241,#30242,#30243)); #5643=EDGE_LOOP('',(#30244,#30245,#30246,#30247)); #5644=EDGE_LOOP('',(#30248,#30249,#30250,#30251)); #5645=EDGE_LOOP('',(#30252,#30253,#30254,#30255)); #5646=EDGE_LOOP('',(#30256,#30257,#30258,#30259)); #5647=EDGE_LOOP('',(#30260,#30261,#30262,#30263)); #5648=EDGE_LOOP('',(#30264,#30265,#30266,#30267)); #5649=EDGE_LOOP('',(#30268,#30269,#30270,#30271)); #5650=EDGE_LOOP('',(#30272,#30273,#30274,#30275)); #5651=EDGE_LOOP('',(#30276,#30277,#30278,#30279)); #5652=EDGE_LOOP('',(#30280,#30281,#30282,#30283)); #5653=EDGE_LOOP('',(#30284,#30285,#30286,#30287)); #5654=EDGE_LOOP('',(#30288,#30289,#30290,#30291)); #5655=EDGE_LOOP('',(#30292,#30293,#30294,#30295)); #5656=EDGE_LOOP('',(#30296,#30297,#30298,#30299)); #5657=EDGE_LOOP('',(#30300,#30301,#30302,#30303)); #5658=EDGE_LOOP('',(#30304,#30305,#30306,#30307)); #5659=EDGE_LOOP('',(#30308,#30309,#30310,#30311)); #5660=EDGE_LOOP('',(#30312,#30313,#30314,#30315)); #5661=EDGE_LOOP('',(#30316,#30317,#30318,#30319)); #5662=EDGE_LOOP('',(#30320,#30321,#30322,#30323)); #5663=EDGE_LOOP('',(#30324,#30325,#30326,#30327)); #5664=EDGE_LOOP('',(#30328,#30329,#30330,#30331)); #5665=EDGE_LOOP('',(#30332,#30333,#30334,#30335)); #5666=EDGE_LOOP('',(#30336,#30337,#30338,#30339)); #5667=EDGE_LOOP('',(#30340,#30341,#30342,#30343)); #5668=EDGE_LOOP('',(#30344,#30345,#30346,#30347)); #5669=EDGE_LOOP('',(#30348,#30349,#30350,#30351)); #5670=EDGE_LOOP('',(#30352,#30353,#30354,#30355)); #5671=EDGE_LOOP('',(#30356,#30357,#30358,#30359)); #5672=EDGE_LOOP('',(#30360,#30361,#30362,#30363)); #5673=EDGE_LOOP('',(#30364,#30365,#30366,#30367)); #5674=EDGE_LOOP('',(#30368,#30369,#30370,#30371)); #5675=EDGE_LOOP('',(#30372,#30373,#30374,#30375)); #5676=EDGE_LOOP('',(#30376,#30377,#30378,#30379)); #5677=EDGE_LOOP('',(#30380,#30381,#30382,#30383)); #5678=EDGE_LOOP('',(#30384,#30385,#30386,#30387)); #5679=EDGE_LOOP('',(#30388,#30389,#30390,#30391)); #5680=EDGE_LOOP('',(#30392,#30393,#30394,#30395)); #5681=EDGE_LOOP('',(#30396,#30397,#30398,#30399)); #5682=EDGE_LOOP('',(#30400,#30401,#30402,#30403)); #5683=EDGE_LOOP('',(#30404,#30405,#30406,#30407)); #5684=EDGE_LOOP('',(#30408,#30409,#30410,#30411)); #5685=EDGE_LOOP('',(#30412,#30413,#30414,#30415)); #5686=EDGE_LOOP('',(#30416,#30417,#30418,#30419)); #5687=EDGE_LOOP('',(#30420,#30421,#30422,#30423)); #5688=EDGE_LOOP('',(#30424,#30425,#30426,#30427)); #5689=EDGE_LOOP('',(#30428,#30429,#30430,#30431)); #5690=EDGE_LOOP('',(#30432,#30433,#30434,#30435)); #5691=EDGE_LOOP('',(#30436,#30437,#30438,#30439)); #5692=EDGE_LOOP('',(#30440,#30441,#30442,#30443)); #5693=EDGE_LOOP('',(#30444,#30445,#30446,#30447)); #5694=EDGE_LOOP('',(#30448,#30449,#30450,#30451)); #5695=EDGE_LOOP('',(#30452,#30453,#30454,#30455)); #5696=EDGE_LOOP('',(#30456,#30457,#30458,#30459)); #5697=EDGE_LOOP('',(#30460,#30461,#30462,#30463)); #5698=EDGE_LOOP('',(#30464,#30465,#30466,#30467)); #5699=EDGE_LOOP('',(#30468,#30469,#30470,#30471)); #5700=EDGE_LOOP('',(#30472,#30473,#30474,#30475)); #5701=EDGE_LOOP('',(#30476,#30477,#30478,#30479)); #5702=EDGE_LOOP('',(#30480,#30481,#30482,#30483)); #5703=EDGE_LOOP('',(#30484,#30485,#30486,#30487)); #5704=EDGE_LOOP('',(#30488,#30489,#30490,#30491)); #5705=EDGE_LOOP('',(#30492,#30493,#30494,#30495)); #5706=EDGE_LOOP('',(#30496,#30497,#30498,#30499)); #5707=EDGE_LOOP('',(#30500,#30501,#30502,#30503)); #5708=EDGE_LOOP('',(#30504,#30505,#30506,#30507)); #5709=EDGE_LOOP('',(#30508,#30509,#30510,#30511)); #5710=EDGE_LOOP('',(#30512,#30513,#30514,#30515)); #5711=EDGE_LOOP('',(#30516,#30517,#30518,#30519)); #5712=EDGE_LOOP('',(#30520,#30521,#30522,#30523)); #5713=EDGE_LOOP('',(#30524,#30525,#30526,#30527)); #5714=EDGE_LOOP('',(#30528,#30529,#30530,#30531)); #5715=EDGE_LOOP('',(#30532,#30533,#30534,#30535)); #5716=EDGE_LOOP('',(#30536,#30537,#30538,#30539)); #5717=EDGE_LOOP('',(#30540,#30541,#30542,#30543)); #5718=EDGE_LOOP('',(#30544,#30545,#30546,#30547)); #5719=EDGE_LOOP('',(#30548,#30549,#30550,#30551)); #5720=EDGE_LOOP('',(#30552,#30553,#30554,#30555)); #5721=EDGE_LOOP('',(#30556,#30557,#30558,#30559)); #5722=EDGE_LOOP('',(#30560,#30561,#30562,#30563)); #5723=EDGE_LOOP('',(#30564,#30565,#30566,#30567)); #5724=EDGE_LOOP('',(#30568,#30569,#30570,#30571)); #5725=EDGE_LOOP('',(#30572,#30573,#30574,#30575)); #5726=EDGE_LOOP('',(#30576,#30577,#30578,#30579)); #5727=EDGE_LOOP('',(#30580,#30581,#30582,#30583)); #5728=EDGE_LOOP('',(#30584,#30585,#30586,#30587)); #5729=EDGE_LOOP('',(#30588,#30589,#30590,#30591)); #5730=EDGE_LOOP('',(#30592,#30593,#30594,#30595)); #5731=EDGE_LOOP('',(#30596,#30597,#30598,#30599)); #5732=EDGE_LOOP('',(#30600,#30601,#30602,#30603)); #5733=EDGE_LOOP('',(#30604,#30605,#30606,#30607)); #5734=EDGE_LOOP('',(#30608,#30609,#30610,#30611)); #5735=EDGE_LOOP('',(#30612,#30613,#30614,#30615)); #5736=EDGE_LOOP('',(#30616,#30617,#30618,#30619,#30620,#30621,#30622,#30623, #30624,#30625,#30626,#30627,#30628,#30629)); #5737=EDGE_LOOP('',(#30630,#30631,#30632,#30633,#30634,#30635,#30636,#30637)); #5738=EDGE_LOOP('',(#30638,#30639,#30640,#30641,#30642,#30643,#30644,#30645)); #5739=EDGE_LOOP('',(#30646,#30647,#30648,#30649,#30650,#30651,#30652,#30653)); #5740=EDGE_LOOP('',(#30654,#30655,#30656,#30657,#30658,#30659,#30660,#30661)); #5741=EDGE_LOOP('',(#30662,#30663,#30664,#30665,#30666,#30667,#30668,#30669)); #5742=EDGE_LOOP('',(#30670,#30671,#30672,#30673,#30674,#30675,#30676,#30677)); #5743=EDGE_LOOP('',(#30678,#30679,#30680,#30681,#30682,#30683,#30684,#30685)); #5744=EDGE_LOOP('',(#30686,#30687,#30688,#30689,#30690,#30691,#30692,#30693)); #5745=EDGE_LOOP('',(#30694,#30695,#30696,#30697,#30698,#30699,#30700,#30701)); #5746=EDGE_LOOP('',(#30702,#30703,#30704,#30705,#30706,#30707,#30708,#30709)); #5747=EDGE_LOOP('',(#30710,#30711,#30712,#30713,#30714,#30715,#30716,#30717)); #5748=EDGE_LOOP('',(#30718,#30719,#30720,#30721,#30722,#30723,#30724,#30725)); #5749=EDGE_LOOP('',(#30726,#30727,#30728,#30729,#30730,#30731,#30732,#30733)); #5750=EDGE_LOOP('',(#30734,#30735,#30736,#30737,#30738,#30739,#30740,#30741)); #5751=EDGE_LOOP('',(#30742,#30743,#30744,#30745,#30746,#30747,#30748,#30749)); #5752=EDGE_LOOP('',(#30750,#30751,#30752,#30753,#30754,#30755,#30756,#30757)); #5753=EDGE_LOOP('',(#30758,#30759,#30760,#30761,#30762,#30763,#30764,#30765)); #5754=EDGE_LOOP('',(#30766,#30767,#30768,#30769,#30770,#30771,#30772,#30773)); #5755=EDGE_LOOP('',(#30774,#30775,#30776)); #5756=EDGE_LOOP('',(#30777,#30778,#30779,#30780,#30781,#30782,#30783,#30784)); #5757=EDGE_LOOP('',(#30785,#30786,#30787,#30788,#30789,#30790,#30791,#30792)); #5758=EDGE_LOOP('',(#30793,#30794,#30795,#30796,#30797,#30798,#30799,#30800)); #5759=EDGE_LOOP('',(#30801,#30802,#30803,#30804,#30805,#30806,#30807,#30808)); #5760=EDGE_LOOP('',(#30809,#30810,#30811,#30812,#30813,#30814,#30815,#30816)); #5761=EDGE_LOOP('',(#30817,#30818,#30819,#30820,#30821,#30822,#30823,#30824)); #5762=EDGE_LOOP('',(#30825,#30826,#30827,#30828,#30829,#30830,#30831,#30832)); #5763=EDGE_LOOP('',(#30833,#30834,#30835,#30836,#30837,#30838,#30839,#30840)); #5764=EDGE_LOOP('',(#30841,#30842,#30843,#30844,#30845,#30846,#30847,#30848)); #5765=EDGE_LOOP('',(#30849,#30850,#30851,#30852,#30853,#30854,#30855,#30856)); #5766=EDGE_LOOP('',(#30857,#30858,#30859,#30860,#30861,#30862,#30863,#30864)); #5767=EDGE_LOOP('',(#30865,#30866,#30867,#30868,#30869,#30870,#30871,#30872)); #5768=EDGE_LOOP('',(#30873,#30874,#30875,#30876,#30877,#30878,#30879,#30880)); #5769=EDGE_LOOP('',(#30881,#30882,#30883,#30884,#30885,#30886,#30887,#30888)); #5770=EDGE_LOOP('',(#30889,#30890,#30891,#30892,#30893,#30894,#30895,#30896)); #5771=EDGE_LOOP('',(#30897,#30898,#30899,#30900,#30901,#30902,#30903,#30904)); #5772=EDGE_LOOP('',(#30905,#30906,#30907,#30908,#30909,#30910,#30911,#30912)); #5773=EDGE_LOOP('',(#30913,#30914,#30915,#30916,#30917,#30918,#30919,#30920, #30921,#30922,#30923,#30924,#30925,#30926)); #5774=EDGE_LOOP('',(#30927,#30928,#30929,#30930)); #5775=EDGE_LOOP('',(#30931,#30932,#30933,#30934,#30935,#30936,#30937,#30938)); #5776=EDGE_LOOP('',(#30939,#30940,#30941,#30942)); #5777=EDGE_LOOP('',(#30943,#30944,#30945,#30946)); #5778=EDGE_LOOP('',(#30947,#30948,#30949,#30950)); #5779=EDGE_LOOP('',(#30951,#30952,#30953,#30954)); #5780=EDGE_LOOP('',(#30955,#30956,#30957,#30958)); #5781=EDGE_LOOP('',(#30959,#30960,#30961,#30962)); #5782=EDGE_LOOP('',(#30963,#30964,#30965,#30966)); #5783=EDGE_LOOP('',(#30967,#30968,#30969,#30970)); #5784=EDGE_LOOP('',(#30971,#30972,#30973,#30974)); #5785=EDGE_LOOP('',(#30975,#30976,#30977,#30978)); #5786=EDGE_LOOP('',(#30979,#30980,#30981,#30982)); #5787=EDGE_LOOP('',(#30983,#30984,#30985,#30986)); #5788=EDGE_LOOP('',(#30987,#30988,#30989,#30990)); #5789=EDGE_LOOP('',(#30991,#30992,#30993,#30994)); #5790=EDGE_LOOP('',(#30995,#30996,#30997,#30998)); #5791=EDGE_LOOP('',(#30999,#31000,#31001,#31002)); #5792=EDGE_LOOP('',(#31003,#31004,#31005,#31006)); #5793=EDGE_LOOP('',(#31007,#31008,#31009,#31010)); #5794=EDGE_LOOP('',(#31011,#31012,#31013,#31014)); #5795=EDGE_LOOP('',(#31015,#31016,#31017,#31018)); #5796=EDGE_LOOP('',(#31019,#31020,#31021,#31022)); #5797=EDGE_LOOP('',(#31023,#31024,#31025,#31026)); #5798=EDGE_LOOP('',(#31027,#31028,#31029,#31030)); #5799=EDGE_LOOP('',(#31031,#31032,#31033,#31034)); #5800=EDGE_LOOP('',(#31035,#31036,#31037,#31038)); #5801=EDGE_LOOP('',(#31039,#31040,#31041,#31042)); #5802=EDGE_LOOP('',(#31043,#31044,#31045,#31046)); #5803=EDGE_LOOP('',(#31047,#31048,#31049,#31050)); #5804=EDGE_LOOP('',(#31051,#31052,#31053,#31054)); #5805=EDGE_LOOP('',(#31055,#31056,#31057,#31058)); #5806=EDGE_LOOP('',(#31059,#31060,#31061,#31062)); #5807=EDGE_LOOP('',(#31063,#31064,#31065,#31066)); #5808=EDGE_LOOP('',(#31067,#31068,#31069,#31070)); #5809=EDGE_LOOP('',(#31071,#31072,#31073,#31074)); #5810=EDGE_LOOP('',(#31075,#31076,#31077,#31078)); #5811=EDGE_LOOP('',(#31079,#31080,#31081,#31082)); #5812=EDGE_LOOP('',(#31083,#31084,#31085,#31086)); #5813=EDGE_LOOP('',(#31087,#31088,#31089,#31090)); #5814=EDGE_LOOP('',(#31091,#31092,#31093,#31094)); #5815=EDGE_LOOP('',(#31095,#31096,#31097,#31098)); #5816=EDGE_LOOP('',(#31099,#31100,#31101,#31102)); #5817=EDGE_LOOP('',(#31103,#31104,#31105,#31106)); #5818=EDGE_LOOP('',(#31107,#31108,#31109,#31110)); #5819=EDGE_LOOP('',(#31111,#31112,#31113,#31114)); #5820=EDGE_LOOP('',(#31115,#31116,#31117,#31118)); #5821=EDGE_LOOP('',(#31119,#31120,#31121,#31122)); #5822=EDGE_LOOP('',(#31123,#31124,#31125,#31126)); #5823=EDGE_LOOP('',(#31127,#31128,#31129,#31130)); #5824=EDGE_LOOP('',(#31131,#31132,#31133,#31134)); #5825=EDGE_LOOP('',(#31135,#31136,#31137,#31138)); #5826=EDGE_LOOP('',(#31139,#31140,#31141,#31142)); #5827=EDGE_LOOP('',(#31143,#31144,#31145,#31146)); #5828=EDGE_LOOP('',(#31147,#31148,#31149,#31150)); #5829=EDGE_LOOP('',(#31151,#31152,#31153,#31154)); #5830=EDGE_LOOP('',(#31155,#31156,#31157,#31158)); #5831=EDGE_LOOP('',(#31159,#31160,#31161,#31162)); #5832=EDGE_LOOP('',(#31163,#31164,#31165,#31166)); #5833=EDGE_LOOP('',(#31167,#31168,#31169,#31170)); #5834=EDGE_LOOP('',(#31171)); #5835=EDGE_LOOP('',(#31172,#31173,#31174,#31175)); #5836=EDGE_LOOP('',(#31176,#31177,#31178,#31179)); #5837=EDGE_LOOP('',(#31180)); #5838=EDGE_LOOP('',(#31181,#31182,#31183,#31184)); #5839=EDGE_LOOP('',(#31185,#31186,#31187,#31188)); #5840=EDGE_LOOP('',(#31189)); #5841=EDGE_LOOP('',(#31190,#31191,#31192,#31193)); #5842=EDGE_LOOP('',(#31194,#31195,#31196,#31197,#31198)); #5843=EDGE_LOOP('',(#31199,#31200,#31201,#31202,#31203)); #5844=EDGE_LOOP('',(#31204,#31205,#31206,#31207)); #5845=EDGE_LOOP('',(#31208,#31209,#31210,#31211,#31212,#31213,#31214,#31215, #31216,#31217,#31218,#31219)); #5846=EDGE_LOOP('',(#31220,#31221,#31222,#31223)); #5847=EDGE_LOOP('',(#31224,#31225,#31226,#31227)); #5848=EDGE_LOOP('',(#31228,#31229,#31230,#31231)); #5849=EDGE_LOOP('',(#31232,#31233,#31234,#31235)); #5850=EDGE_LOOP('',(#31236,#31237,#31238,#31239)); #5851=EDGE_LOOP('',(#31240,#31241,#31242,#31243,#31244)); #5852=EDGE_LOOP('',(#31245,#31246,#31247,#31248)); #5853=EDGE_LOOP('',(#31249,#31250,#31251,#31252)); #5854=EDGE_LOOP('',(#31253,#31254,#31255,#31256)); #5855=EDGE_LOOP('',(#31257,#31258,#31259,#31260)); #5856=EDGE_LOOP('',(#31261,#31262,#31263,#31264)); #5857=EDGE_LOOP('',(#31265,#31266,#31267,#31268)); #5858=EDGE_LOOP('',(#31269,#31270,#31271,#31272)); #5859=EDGE_LOOP('',(#31273,#31274,#31275,#31276)); #5860=EDGE_LOOP('',(#31277,#31278,#31279,#31280)); #5861=EDGE_LOOP('',(#31281,#31282,#31283,#31284)); #5862=EDGE_LOOP('',(#31285,#31286,#31287,#31288)); #5863=EDGE_LOOP('',(#31289,#31290,#31291,#31292)); #5864=EDGE_LOOP('',(#31293,#31294,#31295,#31296)); #5865=EDGE_LOOP('',(#31297,#31298,#31299,#31300)); #5866=EDGE_LOOP('',(#31301,#31302,#31303,#31304)); #5867=EDGE_LOOP('',(#31305,#31306,#31307,#31308)); #5868=EDGE_LOOP('',(#31309,#31310,#31311,#31312)); #5869=EDGE_LOOP('',(#31313,#31314,#31315,#31316)); #5870=EDGE_LOOP('',(#31317,#31318,#31319,#31320)); #5871=EDGE_LOOP('',(#31321,#31322,#31323,#31324)); #5872=EDGE_LOOP('',(#31325,#31326,#31327,#31328)); #5873=EDGE_LOOP('',(#31329,#31330,#31331,#31332)); #5874=EDGE_LOOP('',(#31333,#31334,#31335,#31336)); #5875=EDGE_LOOP('',(#31337,#31338,#31339,#31340)); #5876=EDGE_LOOP('',(#31341,#31342,#31343,#31344)); #5877=EDGE_LOOP('',(#31345,#31346,#31347,#31348)); #5878=EDGE_LOOP('',(#31349,#31350,#31351,#31352)); #5879=EDGE_LOOP('',(#31353,#31354,#31355,#31356,#31357)); #5880=EDGE_LOOP('',(#31358,#31359,#31360,#31361)); #5881=EDGE_LOOP('',(#31362,#31363,#31364,#31365)); #5882=EDGE_LOOP('',(#31366,#31367,#31368,#31369)); #5883=EDGE_LOOP('',(#31370,#31371,#31372,#31373)); #5884=EDGE_LOOP('',(#31374,#31375,#31376,#31377)); #5885=EDGE_LOOP('',(#31378,#31379,#31380,#31381)); #5886=EDGE_LOOP('',(#31382,#31383,#31384)); #5887=EDGE_LOOP('',(#31385,#31386,#31387)); #5888=EDGE_LOOP('',(#31388,#31389,#31390,#31391)); #5889=EDGE_LOOP('',(#31392,#31393,#31394)); #5890=EDGE_LOOP('',(#31395,#31396,#31397)); #5891=EDGE_LOOP('',(#31398,#31399,#31400,#31401)); #5892=EDGE_LOOP('',(#31402,#31403,#31404)); #5893=EDGE_LOOP('',(#31405,#31406,#31407)); #5894=EDGE_LOOP('',(#31408,#31409,#31410,#31411)); #5895=EDGE_LOOP('',(#31412,#31413,#31414)); #5896=EDGE_LOOP('',(#31415,#31416,#31417)); #5897=EDGE_LOOP('',(#31418,#31419,#31420,#31421)); #5898=EDGE_LOOP('',(#31422,#31423,#31424,#31425)); #5899=EDGE_LOOP('',(#31426,#31427,#31428,#31429,#31430,#31431,#31432,#31433, #31434,#31435,#31436,#31437,#31438,#31439)); #5900=EDGE_LOOP('',(#31440,#31441,#31442,#31443)); #5901=EDGE_LOOP('',(#31444,#31445,#31446,#31447)); #5902=EDGE_LOOP('',(#31448,#31449,#31450,#31451)); #5903=EDGE_LOOP('',(#31452,#31453,#31454,#31455)); #5904=EDGE_LOOP('',(#31456,#31457,#31458,#31459)); #5905=EDGE_LOOP('',(#31460,#31461,#31462,#31463)); #5906=EDGE_LOOP('',(#31464,#31465,#31466,#31467)); #5907=EDGE_LOOP('',(#31468,#31469,#31470,#31471)); #5908=EDGE_LOOP('',(#31472,#31473,#31474,#31475)); #5909=EDGE_LOOP('',(#31476,#31477,#31478,#31479)); #5910=EDGE_LOOP('',(#31480,#31481,#31482,#31483)); #5911=EDGE_LOOP('',(#31484,#31485,#31486,#31487,#31488,#31489)); #5912=EDGE_LOOP('',(#31490)); #5913=EDGE_LOOP('',(#31491)); #5914=EDGE_LOOP('',(#31492)); #5915=EDGE_LOOP('',(#31493,#31494,#31495,#31496,#31497,#31498,#31499,#31500, #31501,#31502,#31503,#31504,#31505,#31506)); #5916=EDGE_LOOP('',(#31507,#31508,#31509,#31510)); #5917=EDGE_LOOP('',(#31511,#31512,#31513,#31514)); #5918=EDGE_LOOP('',(#31515,#31516,#31517,#31518,#31519,#31520,#31521,#31522, #31523,#31524,#31525,#31526,#31527,#31528,#31529,#31530)); #5919=EDGE_LOOP('',(#31531,#31532,#31533,#31534)); #5920=EDGE_LOOP('',(#31535,#31536,#31537,#31538)); #5921=EDGE_LOOP('',(#31539,#31540,#31541,#31542)); #5922=EDGE_LOOP('',(#31543,#31544,#31545,#31546)); #5923=EDGE_LOOP('',(#31547,#31548,#31549,#31550,#31551,#31552,#31553,#31554, #31555,#31556,#31557,#31558)); #5924=EDGE_LOOP('',(#31559,#31560,#31561,#31562)); #5925=EDGE_LOOP('',(#31563,#31564,#31565,#31566,#31567,#31568,#31569,#31570)); #5926=EDGE_LOOP('',(#31571,#31572,#31573,#31574)); #5927=EDGE_LOOP('',(#31575,#31576,#31577,#31578,#31579,#31580,#31581,#31582, #31583,#31584,#31585,#31586)); #5928=EDGE_LOOP('',(#31587,#31588,#31589,#31590)); #5929=EDGE_LOOP('',(#31591,#31592,#31593,#31594,#31595,#31596,#31597,#31598, #31599,#31600,#31601,#31602,#31603,#31604)); #5930=EDGE_LOOP('',(#31605,#31606,#31607,#31608)); #5931=EDGE_LOOP('',(#31609,#31610,#31611,#31612)); #5932=EDGE_LOOP('',(#31613,#31614,#31615,#31616,#31617,#31618,#31619,#31620)); #5933=EDGE_LOOP('',(#31621,#31622,#31623,#31624)); #5934=EDGE_LOOP('',(#31625,#31626,#31627,#31628)); #5935=EDGE_LOOP('',(#31629,#31630,#31631,#31632)); #5936=EDGE_LOOP('',(#31633,#31634,#31635,#31636)); #5937=EDGE_LOOP('',(#31637,#31638,#31639,#31640)); #5938=EDGE_LOOP('',(#31641,#31642,#31643,#31644)); #5939=EDGE_LOOP('',(#31645,#31646,#31647,#31648)); #5940=EDGE_LOOP('',(#31649,#31650,#31651,#31652)); #5941=EDGE_LOOP('',(#31653,#31654,#31655,#31656)); #5942=EDGE_LOOP('',(#31657,#31658,#31659,#31660)); #5943=EDGE_LOOP('',(#31661,#31662,#31663,#31664,#31665,#31666,#31667,#31668)); #5944=EDGE_LOOP('',(#31669,#31670,#31671,#31672)); #5945=EDGE_LOOP('',(#31673,#31674,#31675,#31676)); #5946=CIRCLE('',#33897,0.1); #5947=CIRCLE('',#33898,0.1); #5948=CIRCLE('',#33902,0.3); #5949=CIRCLE('',#33903,0.1); #5950=CIRCLE('',#33904,0.3); #5951=CIRCLE('',#33906,0.3); #5952=CIRCLE('',#33907,0.1); #5953=CIRCLE('',#33908,0.3); #5954=CIRCLE('',#33934,0.3); #5955=CIRCLE('',#33935,0.1); #5956=CIRCLE('',#33936,0.3); #5957=CIRCLE('',#33937,0.1); #5958=CIRCLE('',#33945,0.1); #5959=CIRCLE('',#33946,0.3); #5960=CIRCLE('',#33947,0.1); #5961=CIRCLE('',#33948,0.3); #5962=CIRCLE('',#33951,0.3); #5963=CIRCLE('',#33952,0.1); #5964=CIRCLE('',#33953,0.3); #5965=CIRCLE('',#33954,0.1); #5966=CIRCLE('',#33957,0.1); #5967=CIRCLE('',#33958,0.3); #5968=CIRCLE('',#33959,0.1); #5969=CIRCLE('',#33960,0.3); #5970=CIRCLE('',#33963,0.1); #5971=CIRCLE('',#33965,0.3); #5972=CIRCLE('',#33966,0.1); #5973=CIRCLE('',#33967,0.3); #5974=CIRCLE('',#33969,0.3); #5975=CIRCLE('',#33970,0.1); #5976=CIRCLE('',#33971,0.3); #5977=CIRCLE('',#33972,0.1); #5978=CIRCLE('',#33979,0.3); #5979=CIRCLE('',#34028,0.3); #5980=CIRCLE('',#34033,0.3); #5981=CIRCLE('',#34034,0.1); #5982=CIRCLE('',#34035,0.3); #5983=CIRCLE('',#34036,0.1); #5984=CIRCLE('',#34038,0.1); #5985=CIRCLE('',#34039,0.3); #5986=CIRCLE('',#34040,0.1); #5987=CIRCLE('',#34041,0.3); #5988=CIRCLE('',#34044,0.1); #5989=CIRCLE('',#34046,0.3); #5990=CIRCLE('',#34047,0.1); #5991=CIRCLE('',#34048,0.3); #5992=CIRCLE('',#34050,0.3); #5993=CIRCLE('',#34051,0.1); #5994=CIRCLE('',#34052,0.3); #5995=CIRCLE('',#34053,0.1); #5996=CIRCLE('',#34057,0.3); #5997=CIRCLE('',#34058,0.1); #5998=CIRCLE('',#34059,0.3); #5999=CIRCLE('',#34060,0.1); #6000=CIRCLE('',#34062,0.1); #6001=CIRCLE('',#34063,0.3); #6002=CIRCLE('',#34064,0.1); #6003=CIRCLE('',#34065,0.3); #6004=CIRCLE('',#34068,0.1); #6005=CIRCLE('',#34070,0.3); #6006=CIRCLE('',#34071,0.1); #6007=CIRCLE('',#34072,0.3); #6008=CIRCLE('',#34074,0.3); #6009=CIRCLE('',#34075,0.1); #6010=CIRCLE('',#34076,0.3); #6011=CIRCLE('',#34077,0.1); #6012=CIRCLE('',#34124,1.35); #6013=CIRCLE('',#34125,0.5); #6014=CIRCLE('',#34126,1.15); #6015=CIRCLE('',#34127,0.5); #6016=CIRCLE('',#34128,0.5); #6017=CIRCLE('',#34129,0.475); #6018=CIRCLE('',#34130,0.475); #6019=CIRCLE('',#34131,0.475); #6020=CIRCLE('',#34132,1.15); #6021=CIRCLE('',#34133,0.475); #6022=CIRCLE('',#34134,0.5); #6023=CIRCLE('',#34135,1.15); #6024=CIRCLE('',#34136,0.5); #6025=CIRCLE('',#34137,0.5); #6026=CIRCLE('',#34138,0.475); #6027=CIRCLE('',#34139,1.35); #6028=CIRCLE('',#34140,1.15); #6029=CIRCLE('',#34141,0.475); #6030=CIRCLE('',#34142,0.475); #6031=CIRCLE('',#34143,0.475); #6032=CIRCLE('',#34144,0.75); #6033=CIRCLE('',#34145,0.9); #6034=CIRCLE('',#34146,0.75); #6035=CIRCLE('',#34147,0.9); #6036=CIRCLE('',#34148,1.35); #6037=CIRCLE('',#34149,0.75); #6038=CIRCLE('',#34150,0.9); #6039=CIRCLE('',#34151,0.75); #6040=CIRCLE('',#34152,0.9); #6041=CIRCLE('',#34154,1.35); #6042=CIRCLE('',#34155,0.5); #6043=CIRCLE('',#34156,1.15); #6044=CIRCLE('',#34157,0.5); #6045=CIRCLE('',#34158,0.5); #6046=CIRCLE('',#34159,0.475); #6047=CIRCLE('',#34160,0.475); #6048=CIRCLE('',#34161,0.475); #6049=CIRCLE('',#34162,1.15); #6050=CIRCLE('',#34163,0.475); #6051=CIRCLE('',#34164,0.5); #6052=CIRCLE('',#34165,1.15); #6053=CIRCLE('',#34166,0.5); #6054=CIRCLE('',#34167,0.5); #6055=CIRCLE('',#34168,0.475); #6056=CIRCLE('',#34169,1.35); #6057=CIRCLE('',#34170,1.15); #6058=CIRCLE('',#34171,0.475); #6059=CIRCLE('',#34172,0.475); #6060=CIRCLE('',#34173,0.475); #6061=CIRCLE('',#34174,0.75); #6062=CIRCLE('',#34175,0.9); #6063=CIRCLE('',#34176,0.75); #6064=CIRCLE('',#34177,0.9); #6065=CIRCLE('',#34178,1.35); #6066=CIRCLE('',#34179,0.75); #6067=CIRCLE('',#34180,0.9); #6068=CIRCLE('',#34181,0.75); #6069=CIRCLE('',#34182,0.9); #6070=CIRCLE('',#34216,1.05); #6071=CIRCLE('',#34217,1.05); #6072=CIRCLE('',#34219,1.05); #6073=CIRCLE('',#34220,1.05); #6074=CIRCLE('',#34222,0.5); #6075=CIRCLE('',#34223,0.5); #6076=CIRCLE('',#34225,0.5); #6077=CIRCLE('',#34226,0.5); #6078=CIRCLE('',#34228,0.5); #6079=CIRCLE('',#34229,0.5); #6080=CIRCLE('',#34231,0.5); #6081=CIRCLE('',#34232,0.5); #6082=CIRCLE('',#34234,0.5); #6083=CIRCLE('',#34235,0.5); #6084=CIRCLE('',#34237,0.5); #6085=CIRCLE('',#34238,0.5); #6086=CIRCLE('',#34240,0.5); #6087=CIRCLE('',#34241,0.5); #6088=CIRCLE('',#34243,0.5); #6089=CIRCLE('',#34244,0.5); #6090=CIRCLE('',#34246,0.5); #6091=CIRCLE('',#34247,0.5); #6092=CIRCLE('',#34249,0.5); #6093=CIRCLE('',#34250,0.5); #6094=CIRCLE('',#34252,0.5); #6095=CIRCLE('',#34253,0.5); #6096=CIRCLE('',#34255,0.5); #6097=CIRCLE('',#34256,0.5); #6098=CIRCLE('',#34258,0.5); #6099=CIRCLE('',#34259,0.5); #6100=CIRCLE('',#34261,0.5); #6101=CIRCLE('',#34262,0.5); #6102=CIRCLE('',#34264,0.5); #6103=CIRCLE('',#34265,0.5); #6104=CIRCLE('',#34267,0.5); #6105=CIRCLE('',#34268,0.5); #6106=CIRCLE('',#34270,0.5); #6107=CIRCLE('',#34271,0.5); #6108=CIRCLE('',#34273,0.5); #6109=CIRCLE('',#34274,0.5); #6110=CIRCLE('',#34276,0.5); #6111=CIRCLE('',#34277,0.5); #6112=CIRCLE('',#34279,0.5); #6113=CIRCLE('',#34280,0.5); #6114=CIRCLE('',#34282,0.5); #6115=CIRCLE('',#34283,0.5); #6116=CIRCLE('',#34285,0.5); #6117=CIRCLE('',#34286,0.5); #6118=CIRCLE('',#34288,0.5); #6119=CIRCLE('',#34289,0.5); #6120=CIRCLE('',#34291,0.5); #6121=CIRCLE('',#34292,0.5); #6122=CIRCLE('',#34294,0.5); #6123=CIRCLE('',#34295,0.5); #6124=CIRCLE('',#34297,0.5); #6125=CIRCLE('',#34298,0.5); #6126=CIRCLE('',#34300,0.5); #6127=CIRCLE('',#34301,0.5); #6128=CIRCLE('',#34303,0.5); #6129=CIRCLE('',#34304,0.5); #6130=CIRCLE('',#34306,0.5); #6131=CIRCLE('',#34307,0.5); #6132=CIRCLE('',#34309,0.5); #6133=CIRCLE('',#34310,0.5); #6134=CIRCLE('',#34312,0.5); #6135=CIRCLE('',#34313,0.5); #6136=CIRCLE('',#34315,0.5); #6137=CIRCLE('',#34316,0.5); #6138=CIRCLE('',#34318,0.5); #6139=CIRCLE('',#34319,0.5); #6140=CIRCLE('',#34321,0.5); #6141=CIRCLE('',#34322,0.5); #6142=CIRCLE('',#34324,0.5); #6143=CIRCLE('',#34325,0.5); #6144=CIRCLE('',#34327,0.5); #6145=CIRCLE('',#34328,0.5); #6146=CIRCLE('',#34330,0.5); #6147=CIRCLE('',#34331,0.5); #6148=CIRCLE('',#34333,0.5); #6149=CIRCLE('',#34334,0.5); #6150=CIRCLE('',#34336,0.5); #6151=CIRCLE('',#34337,0.5); #6152=CIRCLE('',#34339,0.5); #6153=CIRCLE('',#34340,0.5); #6154=CIRCLE('',#34342,0.5); #6155=CIRCLE('',#34343,0.5); #6156=CIRCLE('',#34345,0.5); #6157=CIRCLE('',#34346,0.5); #6158=CIRCLE('',#34349,0.5); #6159=CIRCLE('',#34350,0.5); #6160=CIRCLE('',#34352,0.5); #6161=CIRCLE('',#34353,0.5); #6162=CIRCLE('',#34376,0.8); #6163=CIRCLE('',#34377,0.8); #6164=CIRCLE('',#34378,0.8); #6165=CIRCLE('',#34380,0.8); #6166=CIRCLE('',#34381,0.8); #6167=CIRCLE('',#34382,0.8); #6168=CIRCLE('',#34384,0.199999850585); #6169=CIRCLE('',#34385,0.199999850585); #6170=CIRCLE('',#34387,0.199999850585); #6171=CIRCLE('',#34388,0.199999850585); #6172=CIRCLE('',#34390,0.8); #6173=CIRCLE('',#34391,0.8); #6174=CIRCLE('',#34392,0.8); #6175=CIRCLE('',#34394,0.8); #6176=CIRCLE('',#34395,0.8); #6177=CIRCLE('',#34396,0.8); #6178=CIRCLE('',#34398,0.8); #6179=CIRCLE('',#34399,0.8); #6180=CIRCLE('',#34400,0.8); #6181=CIRCLE('',#34402,0.8); #6182=CIRCLE('',#34403,0.8); #6183=CIRCLE('',#34404,0.8); #6184=CIRCLE('',#34406,0.199999850585); #6185=CIRCLE('',#34407,0.199999850585); #6186=CIRCLE('',#34409,0.199999850585); #6187=CIRCLE('',#34410,0.199999850585); #6188=CIRCLE('',#34412,0.8); #6189=CIRCLE('',#34413,0.8); #6190=CIRCLE('',#34414,0.8); #6191=CIRCLE('',#34416,0.8); #6192=CIRCLE('',#34417,0.8); #6193=CIRCLE('',#34418,0.8); #6194=CIRCLE('',#34420,0.8); #6195=CIRCLE('',#34421,0.8); #6196=CIRCLE('',#34422,0.8); #6197=CIRCLE('',#34424,0.8); #6198=CIRCLE('',#34425,0.8); #6199=CIRCLE('',#34426,0.8); #6200=CIRCLE('',#34428,0.8); #6201=CIRCLE('',#34429,0.8); #6202=CIRCLE('',#34430,0.8); #6203=CIRCLE('',#34432,0.8); #6204=CIRCLE('',#34433,0.8); #6205=CIRCLE('',#34434,0.8); #6206=CIRCLE('',#34436,0.8); #6207=CIRCLE('',#34437,0.8); #6208=CIRCLE('',#34438,0.8); #6209=CIRCLE('',#34440,0.8); #6210=CIRCLE('',#34441,0.8); #6211=CIRCLE('',#34442,0.8); #6212=CIRCLE('',#34444,0.199999850585); #6213=CIRCLE('',#34445,0.199999850585); #6214=CIRCLE('',#34447,0.199999850585); #6215=CIRCLE('',#34448,0.199999850585); #6216=CIRCLE('',#34450,0.8); #6217=CIRCLE('',#34451,0.8); #6218=CIRCLE('',#34452,0.8); #6219=CIRCLE('',#34454,0.8); #6220=CIRCLE('',#34455,0.8); #6221=CIRCLE('',#34456,0.8); #6222=CIRCLE('',#34458,0.8); #6223=CIRCLE('',#34459,0.8); #6224=CIRCLE('',#34460,0.8); #6225=CIRCLE('',#34462,0.8); #6226=CIRCLE('',#34463,0.8); #6227=CIRCLE('',#34464,0.8); #6228=CIRCLE('',#34466,0.8); #6229=CIRCLE('',#34467,0.8); #6230=CIRCLE('',#34468,0.8); #6231=CIRCLE('',#34470,0.8); #6232=CIRCLE('',#34471,0.8); #6233=CIRCLE('',#34472,0.8); #6234=CIRCLE('',#34474,0.8); #6235=CIRCLE('',#34475,0.8); #6236=CIRCLE('',#34476,0.8); #6237=CIRCLE('',#34478,0.8); #6238=CIRCLE('',#34479,0.8); #6239=CIRCLE('',#34480,0.8); #6240=CIRCLE('',#34482,0.8); #6241=CIRCLE('',#34483,0.8); #6242=CIRCLE('',#34484,0.8); #6243=CIRCLE('',#34486,0.8); #6244=CIRCLE('',#34487,0.8); #6245=CIRCLE('',#34488,0.8); #6246=CIRCLE('',#34490,0.8); #6247=CIRCLE('',#34491,0.8); #6248=CIRCLE('',#34492,0.8); #6249=CIRCLE('',#34494,0.8); #6250=CIRCLE('',#34495,0.8); #6251=CIRCLE('',#34496,0.8); #6252=CIRCLE('',#34498,0.8); #6253=CIRCLE('',#34499,0.8); #6254=CIRCLE('',#34500,0.8); #6255=CIRCLE('',#34502,0.8); #6256=CIRCLE('',#34503,0.8); #6257=CIRCLE('',#34504,0.8); #6258=CIRCLE('',#34506,0.8); #6259=CIRCLE('',#34507,0.8); #6260=CIRCLE('',#34508,0.8); #6261=CIRCLE('',#34510,0.8); #6262=CIRCLE('',#34511,0.8); #6263=CIRCLE('',#34512,0.8); #6264=CIRCLE('',#34514,0.199999850585); #6265=CIRCLE('',#34515,0.199999850585); #6266=CIRCLE('',#34517,0.199999850585); #6267=CIRCLE('',#34518,0.199999850585); #6268=CIRCLE('',#34520,0.8); #6269=CIRCLE('',#34521,0.8); #6270=CIRCLE('',#34522,0.8); #6271=CIRCLE('',#34524,0.8); #6272=CIRCLE('',#34525,0.8); #6273=CIRCLE('',#34526,0.8); #6274=CIRCLE('',#34528,0.8); #6275=CIRCLE('',#34530,0.8); #6276=CIRCLE('',#34533,1.9); #6277=CIRCLE('',#34535,1.9); #6278=CIRCLE('',#34537,1.9); #6279=CIRCLE('',#34539,1.9); #6280=CIRCLE('',#34581,1.05); #6281=CIRCLE('',#34582,1.05); #6282=CIRCLE('',#34584,1.05); #6283=CIRCLE('',#34585,1.05); #6284=CIRCLE('',#34587,0.5); #6285=CIRCLE('',#34588,0.5); #6286=CIRCLE('',#34590,0.5); #6287=CIRCLE('',#34591,0.5); #6288=CIRCLE('',#34593,0.5); #6289=CIRCLE('',#34594,0.5); #6290=CIRCLE('',#34596,0.5); #6291=CIRCLE('',#34597,0.5); #6292=CIRCLE('',#34599,0.5); #6293=CIRCLE('',#34600,0.5); #6294=CIRCLE('',#34602,0.5); #6295=CIRCLE('',#34603,0.5); #6296=CIRCLE('',#34605,0.5); #6297=CIRCLE('',#34606,0.5); #6298=CIRCLE('',#34608,0.5); #6299=CIRCLE('',#34609,0.5); #6300=CIRCLE('',#34611,0.5); #6301=CIRCLE('',#34612,0.5); #6302=CIRCLE('',#34614,0.5); #6303=CIRCLE('',#34615,0.5); #6304=CIRCLE('',#34617,0.5); #6305=CIRCLE('',#34618,0.5); #6306=CIRCLE('',#34620,0.5); #6307=CIRCLE('',#34621,0.5); #6308=CIRCLE('',#34623,0.5); #6309=CIRCLE('',#34624,0.5); #6310=CIRCLE('',#34626,0.5); #6311=CIRCLE('',#34627,0.5); #6312=CIRCLE('',#34629,0.5); #6313=CIRCLE('',#34630,0.5); #6314=CIRCLE('',#34632,0.5); #6315=CIRCLE('',#34633,0.5); #6316=CIRCLE('',#34635,0.5); #6317=CIRCLE('',#34636,0.5); #6318=CIRCLE('',#34638,0.5); #6319=CIRCLE('',#34639,0.5); #6320=CIRCLE('',#34641,0.5); #6321=CIRCLE('',#34642,0.5); #6322=CIRCLE('',#34644,0.5); #6323=CIRCLE('',#34645,0.5); #6324=CIRCLE('',#34647,0.5); #6325=CIRCLE('',#34648,0.5); #6326=CIRCLE('',#34650,0.5); #6327=CIRCLE('',#34651,0.5); #6328=CIRCLE('',#34653,0.5); #6329=CIRCLE('',#34654,0.5); #6330=CIRCLE('',#34656,0.5); #6331=CIRCLE('',#34657,0.5); #6332=CIRCLE('',#34661,0.5); #6333=CIRCLE('',#34662,0.5); #6334=CIRCLE('',#34664,0.5); #6335=CIRCLE('',#34665,0.5); #6336=CIRCLE('',#34688,0.5); #6337=CIRCLE('',#34689,0.8); #6338=CIRCLE('',#34691,0.5); #6339=CIRCLE('',#34692,0.8); #6340=CIRCLE('',#34694,0.199999850585); #6341=CIRCLE('',#34695,0.199999850585); #6342=CIRCLE('',#34696,0.5); #6343=CIRCLE('',#34698,0.199999850585); #6344=CIRCLE('',#34699,0.5); #6345=CIRCLE('',#34700,0.199999850585); #6346=CIRCLE('',#34702,0.8); #6347=CIRCLE('',#34703,0.5); #6348=CIRCLE('',#34705,0.8); #6349=CIRCLE('',#34706,0.5); #6350=CIRCLE('',#34708,0.5); #6351=CIRCLE('',#34709,0.8); #6352=CIRCLE('',#34711,0.5); #6353=CIRCLE('',#34712,0.8); #6354=CIRCLE('',#34714,0.5); #6355=CIRCLE('',#34715,0.199999850585); #6356=CIRCLE('',#34716,0.199999850585); #6357=CIRCLE('',#34718,0.199999850585); #6358=CIRCLE('',#34719,0.199999850585); #6359=CIRCLE('',#34720,0.5); #6360=CIRCLE('',#34722,0.8); #6361=CIRCLE('',#34723,0.5); #6362=CIRCLE('',#34725,0.8); #6363=CIRCLE('',#34726,0.5); #6364=CIRCLE('',#34728,0.5); #6365=CIRCLE('',#34729,0.8); #6366=CIRCLE('',#34731,0.5); #6367=CIRCLE('',#34732,0.8); #6368=CIRCLE('',#34734,0.5); #6369=CIRCLE('',#34735,0.8); #6370=CIRCLE('',#34737,0.5); #6371=CIRCLE('',#34738,0.8); #6372=CIRCLE('',#34740,0.5); #6373=CIRCLE('',#34741,0.8); #6374=CIRCLE('',#34743,0.5); #6375=CIRCLE('',#34744,0.8); #6376=CIRCLE('',#34746,0.5); #6377=CIRCLE('',#34747,0.199999850585); #6378=CIRCLE('',#34748,0.199999850585); #6379=CIRCLE('',#34750,0.199999850585); #6380=CIRCLE('',#34751,0.199999850585); #6381=CIRCLE('',#34752,0.5); #6382=CIRCLE('',#34754,0.8); #6383=CIRCLE('',#34755,0.5); #6384=CIRCLE('',#34757,0.8); #6385=CIRCLE('',#34758,0.5); #6386=CIRCLE('',#34760,0.5); #6387=CIRCLE('',#34761,0.8); #6388=CIRCLE('',#34763,0.5); #6389=CIRCLE('',#34764,0.8); #6390=CIRCLE('',#34766,0.8); #6391=CIRCLE('',#34767,0.5); #6392=CIRCLE('',#34769,0.8); #6393=CIRCLE('',#34770,0.5); #6394=CIRCLE('',#34772,0.5); #6395=CIRCLE('',#34773,0.8); #6396=CIRCLE('',#34775,0.5); #6397=CIRCLE('',#34776,0.8); #6398=CIRCLE('',#34778,0.8); #6399=CIRCLE('',#34779,0.5); #6400=CIRCLE('',#34781,0.8); #6401=CIRCLE('',#34782,0.5); #6402=CIRCLE('',#34784,0.5); #6403=CIRCLE('',#34785,0.8); #6404=CIRCLE('',#34787,0.5); #6405=CIRCLE('',#34788,0.8); #6406=CIRCLE('',#34790,0.8); #6407=CIRCLE('',#34791,0.5); #6408=CIRCLE('',#34793,0.8); #6409=CIRCLE('',#34794,0.5); #6410=CIRCLE('',#34796,0.5); #6411=CIRCLE('',#34797,0.8); #6412=CIRCLE('',#34799,0.5); #6413=CIRCLE('',#34800,0.8); #6414=CIRCLE('',#34802,0.199999850585); #6415=CIRCLE('',#34803,0.199999850585); #6416=CIRCLE('',#34804,0.5); #6417=CIRCLE('',#34806,0.199999850585); #6418=CIRCLE('',#34807,0.5); #6419=CIRCLE('',#34808,0.199999850585); #6420=CIRCLE('',#34810,0.5); #6421=CIRCLE('',#34811,0.8); #6422=CIRCLE('',#34813,0.5); #6423=CIRCLE('',#34814,0.8); #6424=CIRCLE('',#34816,0.8); #6425=CIRCLE('',#34818,0.8); #6426=CIRCLE('',#34821,0.199999850585); #6427=CIRCLE('',#34822,0.199999850585); #6428=CIRCLE('',#34824,0.199999850585); #6429=CIRCLE('',#34825,0.199999850585); #6430=CIRCLE('',#34827,1.9); #6431=CIRCLE('',#34829,1.9); #6432=CIRCLE('',#34831,1.9); #6433=CIRCLE('',#34833,1.9); #6434=CIRCLE('',#34903,0.06); #6435=CIRCLE('',#34904,0.06); #6436=CIRCLE('',#34905,0.06); #6437=CIRCLE('',#34906,0.06); #6438=CIRCLE('',#34907,0.06); #6439=CIRCLE('',#34908,0.06); #6440=CIRCLE('',#34911,0.4); #6441=CIRCLE('',#34912,0.4); #6442=CIRCLE('',#34915,0.4); #6443=CIRCLE('',#34916,0.4); #6444=CIRCLE('',#34919,0.4); #6445=CIRCLE('',#34920,0.4); #6446=CIRCLE('',#34923,0.4); #6447=CIRCLE('',#34924,0.4); #6448=CIRCLE('',#34927,0.4); #6449=CIRCLE('',#34928,0.4); #6450=CIRCLE('',#34931,0.4); #6451=CIRCLE('',#34932,0.4); #6452=CIRCLE('',#34935,0.06); #6453=CIRCLE('',#34936,0.06); #6454=CIRCLE('',#34937,0.06); #6455=CIRCLE('',#34938,0.06); #6456=CIRCLE('',#34939,0.06); #6457=CIRCLE('',#34940,0.06); #6458=CIRCLE('',#34954,0.5); #6459=CIRCLE('',#34955,0.25); #6460=CIRCLE('',#34957,0.25); #6461=CIRCLE('',#34958,0.5); #6462=CIRCLE('',#34968,0.25); #6463=CIRCLE('',#34969,0.5); #6464=CIRCLE('',#34971,0.5); #6465=CIRCLE('',#34972,0.25); #6466=CIRCLE('',#34982,0.25); #6467=CIRCLE('',#34983,0.5); #6468=CIRCLE('',#34985,0.5); #6469=CIRCLE('',#34986,0.25); #6470=CIRCLE('',#34996,0.5); #6471=CIRCLE('',#34997,0.25); #6472=CIRCLE('',#34999,0.25); #6473=CIRCLE('',#35000,0.5); #6474=CIRCLE('',#35010,0.5); #6475=CIRCLE('',#35011,0.5); #6476=CIRCLE('',#35013,0.5); #6477=CIRCLE('',#35014,0.625); #6478=CIRCLE('',#35015,1.125); #6479=CIRCLE('',#35017,0.5); #6480=CIRCLE('',#35018,1.125); #6481=CIRCLE('',#35019,0.625); #6482=CIRCLE('',#35024,1.125); #6483=CIRCLE('',#35027,1.125); #6484=CIRCLE('',#35126,0.2); #6485=CIRCLE('',#35127,0.2); #6486=CIRCLE('',#35128,0.2); #6487=CIRCLE('',#35129,0.200012638024031); #6488=CIRCLE('',#35130,0.200012637814167); #6489=CIRCLE('',#35131,0.2); #6490=CIRCLE('',#35132,0.2); #6491=CIRCLE('',#35143,0.2); #6492=CIRCLE('',#35144,0.2); #6493=CIRCLE('',#35145,0.25); #6494=CIRCLE('',#35146,0.2); #6495=CIRCLE('',#35147,0.2); #6496=CIRCLE('',#35148,0.200002935896831); #6497=CIRCLE('',#35149,0.200002935953284); #6498=CIRCLE('',#35150,0.2); #6499=CIRCLE('',#35151,0.2); #6500=CIRCLE('',#35152,0.2); #6501=CIRCLE('',#35161,27.561328150008); #6502=CIRCLE('',#35165,27.5584293100866); #6503=CIRCLE('',#35175,0.2); #6504=CIRCLE('',#35176,0.2); #6505=CIRCLE('',#35178,0.2); #6506=CIRCLE('',#35180,0.2); #6507=CIRCLE('',#35204,0.2); #6508=CIRCLE('',#35205,0.2); #6509=CIRCLE('',#35206,0.200012638016018); #6510=CIRCLE('',#35207,0.200012637806229); #6511=CIRCLE('',#35208,0.2); #6512=CIRCLE('',#35209,0.2); #6513=CIRCLE('',#35210,0.2); #6514=CIRCLE('',#35216,0.2); #6515=CIRCLE('',#35218,0.2); #6516=CIRCLE('',#35219,0.25); #6517=CIRCLE('',#35220,0.2); #6518=CIRCLE('',#35221,0.2); #6519=CIRCLE('',#35222,0.2); #6520=CIRCLE('',#35223,0.2); #6521=CIRCLE('',#35224,0.200002935889477); #6522=CIRCLE('',#35225,0.200002935946474); #6523=CIRCLE('',#35226,0.2); #6524=CIRCLE('',#35233,27.558429700977); #6525=CIRCLE('',#35235,27.5613275400177); #6526=CIRCLE('',#35247,0.2); #6527=CIRCLE('',#35248,0.2); #6528=CIRCLE('',#35250,0.2); #6529=CIRCLE('',#35252,0.2); #6530=CIRCLE('',#35258,0.2); #6531=CIRCLE('',#35260,0.25); #6532=CIRCLE('',#35261,0.2); #6533=CIRCLE('',#35263,0.2); #6534=CIRCLE('',#35264,0.2); #6535=CIRCLE('',#35266,0.3); #6536=CIRCLE('',#35268,0.3); #6537=CIRCLE('',#35272,0.2); #6538=CIRCLE('',#35274,0.2); #6539=CIRCLE('',#35284,0.095); #6540=CIRCLE('',#35285,0.095); #6541=CIRCLE('',#35286,0.095); #6542=CIRCLE('',#35287,0.095); #6543=CIRCLE('',#35288,0.2); #6544=CIRCLE('',#35289,0.2); #6545=CIRCLE('',#35290,0.095); #6546=CIRCLE('',#35291,0.095); #6547=CIRCLE('',#35292,0.095); #6548=CIRCLE('',#35293,0.095); #6549=CIRCLE('',#35294,0.2); #6550=CIRCLE('',#35295,0.2); #6551=CIRCLE('',#35340,0.2); #6552=CIRCLE('',#35342,0.2); #6553=CIRCLE('',#35343,0.095); #6554=CIRCLE('',#35344,0.095); #6555=CIRCLE('',#35345,0.095); #6556=CIRCLE('',#35346,0.095); #6557=CIRCLE('',#35347,0.2); #6558=CIRCLE('',#35348,0.2); #6559=CIRCLE('',#35349,0.095); #6560=CIRCLE('',#35350,0.095); #6561=CIRCLE('',#35351,0.095); #6562=CIRCLE('',#35352,0.095); #6563=CIRCLE('',#35362,0.2); #6564=CIRCLE('',#35363,0.5); #6565=CIRCLE('',#35364,0.2); #6566=CIRCLE('',#35365,0.5); #6567=CIRCLE('',#35367,0.2); #6568=CIRCLE('',#35368,0.2); #6569=CIRCLE('',#35370,0.2); #6570=CIRCLE('',#35372,0.2); #6571=CIRCLE('',#35375,0.5); #6572=CIRCLE('',#35377,0.5); #6573=CIRCLE('',#35378,0.2); #6574=CIRCLE('',#35380,0.2); #6575=CIRCLE('',#35395,0.2); #6576=CIRCLE('',#35396,0.5); #6577=CIRCLE('',#35397,0.2); #6578=CIRCLE('',#35398,0.5); #6579=CIRCLE('',#35400,0.2); #6580=CIRCLE('',#35401,0.2); #6581=CIRCLE('',#35403,0.2); #6582=CIRCLE('',#35405,0.2); #6583=CIRCLE('',#35408,0.5); #6584=CIRCLE('',#35409,0.2); #6585=CIRCLE('',#35410,0.5); #6586=CIRCLE('',#35411,0.2); #6587=CIRCLE('',#35426,0.45); #6588=CIRCLE('',#35427,0.45); #6589=CIRCLE('',#35429,0.15); #6590=CIRCLE('',#35431,0.3); #6591=CIRCLE('',#35432,0.3); #6592=CIRCLE('',#35434,0.3); #6593=CIRCLE('',#35435,0.3); #6594=CIRCLE('',#35437,0.3); #6595=CIRCLE('',#35438,0.3); #6596=CIRCLE('',#35440,0.3); #6597=CIRCLE('',#35441,0.3); #6598=CIRCLE('',#35443,0.3); #6599=CIRCLE('',#35446,0.3); #6600=CIRCLE('',#35449,0.15); #6601=CIRCLE('',#35452,0.45); #6602=CIRCLE('',#35453,0.15); #6603=CIRCLE('',#35455,0.45); #6604=CIRCLE('',#35456,0.15); #6605=CIRCLE('',#35458,0.45); #6606=CIRCLE('',#35459,0.45); #6607=CIRCLE('',#35461,0.45); #6608=CIRCLE('',#35462,0.12); #6609=CIRCLE('',#35463,0.12); #6610=CIRCLE('',#35464,0.12); #6611=CIRCLE('',#35465,0.12); #6612=CIRCLE('',#35466,0.2); #6613=CIRCLE('',#35467,0.2); #6614=CIRCLE('',#35468,0.2); #6615=CIRCLE('',#35469,0.12); #6616=CIRCLE('',#35470,0.12); #6617=CIRCLE('',#35471,0.12); #6618=CIRCLE('',#35472,0.12); #6619=CIRCLE('',#35473,0.2); #6620=CIRCLE('',#35474,0.35); #6621=CIRCLE('',#35475,0.35); #6622=CIRCLE('',#35476,0.35); #6623=CIRCLE('',#35477,0.35); #6624=CIRCLE('',#35480,0.2); #6625=CIRCLE('',#35483,0.12); #6626=CIRCLE('',#35487,0.12); #6627=CIRCLE('',#35489,0.2); #6628=CIRCLE('',#35490,0.12); #6629=CIRCLE('',#35491,0.12); #6630=CIRCLE('',#35492,0.12); #6631=CIRCLE('',#35493,0.12); #6632=CIRCLE('',#35494,0.2); #6633=CIRCLE('',#35495,0.35); #6634=CIRCLE('',#35496,0.35); #6635=CIRCLE('',#35497,0.35); #6636=CIRCLE('',#35498,0.35); #6637=CIRCLE('',#35499,0.12); #6638=CIRCLE('',#35500,0.12); #6639=CIRCLE('',#35501,0.2); #6640=CIRCLE('',#35507,0.502338580423966); #6641=CIRCLE('',#35509,0.502338580423967); #6642=CIRCLE('',#35519,0.2); #6643=CIRCLE('',#35520,0.2); #6644=CIRCLE('',#35522,0.2); #6645=CIRCLE('',#35525,0.2); #6646=CIRCLE('',#35540,0.502338580423966); #6647=CIRCLE('',#35542,0.502338580423967); #6648=CIRCLE('',#35553,0.2); #6649=CIRCLE('',#35554,0.2); #6650=CIRCLE('',#35556,0.2); #6651=CIRCLE('',#35558,0.2); #6652=CIRCLE('',#35573,0.3); #6653=CIRCLE('',#35575,0.3); #6654=CIRCLE('',#35580,0.45); #6655=CIRCLE('',#35582,0.15); #6656=CIRCLE('',#35584,0.15); #6657=CIRCLE('',#35586,0.3); #6658=CIRCLE('',#35589,0.3); #6659=CIRCLE('',#35593,0.3); #6660=CIRCLE('',#35595,0.3); #6661=CIRCLE('',#35631,0.6); #6662=CIRCLE('',#35632,0.3); #6663=CIRCLE('',#35633,0.6); #6664=CIRCLE('',#35634,0.6); #6665=CIRCLE('',#35635,0.3); #6666=CIRCLE('',#35636,0.3); #6667=CIRCLE('',#35637,0.6); #6668=CIRCLE('',#35638,0.3); #6669=CIRCLE('',#35670,0.6); #6670=CIRCLE('',#35673,0.3); #6671=CIRCLE('',#35676,0.6); #6672=CIRCLE('',#35679,0.6); #6673=CIRCLE('',#35687,0.3); #6674=CIRCLE('',#35688,0.6); #6675=CIRCLE('',#35689,0.3); #6676=CIRCLE('',#35690,0.3); #6677=CIRCLE('',#35700,0.6); #6678=CIRCLE('',#35701,0.3); #6679=CIRCLE('',#35702,0.6); #6680=CIRCLE('',#35703,0.6); #6681=CIRCLE('',#35704,0.3); #6682=CIRCLE('',#35705,0.3); #6683=CIRCLE('',#35706,0.6); #6684=CIRCLE('',#35707,0.3); #6685=CIRCLE('',#35710,0.3); #6686=CIRCLE('',#35711,0.6); #6687=CIRCLE('',#35712,0.3); #6688=CIRCLE('',#35713,0.3); #6689=CIRCLE('',#35714,0.6); #6690=CIRCLE('',#35715,0.6); #6691=CIRCLE('',#35716,0.3); #6692=CIRCLE('',#35717,0.6); #6693=CIRCLE('',#35743,0.6); #6694=CIRCLE('',#35744,0.3); #6695=CIRCLE('',#35745,0.6); #6696=CIRCLE('',#35746,0.6); #6697=CIRCLE('',#35747,0.3); #6698=CIRCLE('',#35748,0.3); #6699=CIRCLE('',#35749,0.6); #6700=CIRCLE('',#35750,0.3); #6701=CIRCLE('',#35753,0.3); #6702=CIRCLE('',#35754,0.6); #6703=CIRCLE('',#35755,0.3); #6704=CIRCLE('',#35756,0.3); #6705=CIRCLE('',#35757,0.6); #6706=CIRCLE('',#35758,0.6); #6707=CIRCLE('',#35759,0.3); #6708=CIRCLE('',#35760,0.6); #6709=CIRCLE('',#35793,0.6); #6710=CIRCLE('',#35794,0.3); #6711=CIRCLE('',#35795,0.6); #6712=CIRCLE('',#35796,0.6); #6713=CIRCLE('',#35797,0.3); #6714=CIRCLE('',#35798,0.3); #6715=CIRCLE('',#35799,0.6); #6716=CIRCLE('',#35800,0.3); #6717=CIRCLE('',#35803,0.3); #6718=CIRCLE('',#35804,0.6); #6719=CIRCLE('',#35805,0.3); #6720=CIRCLE('',#35806,0.3); #6721=CIRCLE('',#35807,0.6); #6722=CIRCLE('',#35808,0.6); #6723=CIRCLE('',#35809,0.3); #6724=CIRCLE('',#35810,0.6); #6725=CIRCLE('',#35862,0.2); #6726=CIRCLE('',#35863,0.2); #6727=CIRCLE('',#35864,0.25); #6728=CIRCLE('',#35866,0.2); #6729=CIRCLE('',#35867,0.2); #6730=CIRCLE('',#35869,0.3); #6731=CIRCLE('',#35871,0.3); #6732=CIRCLE('',#35873,0.2); #6733=CIRCLE('',#35874,0.2); #6734=CIRCLE('',#35970,0.04); #6735=CIRCLE('',#35971,0.04); #6736=CIRCLE('',#35972,0.04); #6737=CIRCLE('',#35973,0.04); #6738=CIRCLE('',#35976,0.04); #6739=CIRCLE('',#35978,0.04); #6740=CIRCLE('',#35982,0.04); #6741=CIRCLE('',#35984,0.04); #6742=CIRCLE('',#35987,0.04); #6743=CIRCLE('',#35988,0.04); #6744=CIRCLE('',#35989,0.04); #6745=CIRCLE('',#35990,0.04); #6746=CIRCLE('',#35992,0.04); #6747=CIRCLE('',#35995,0.04); #6748=CIRCLE('',#35998,0.04); #6749=CIRCLE('',#36001,0.04); #6750=CIRCLE('',#36004,0.04); #6751=CIRCLE('',#36005,0.04); #6752=CIRCLE('',#36006,0.04); #6753=CIRCLE('',#36007,0.04); #6754=CIRCLE('',#36010,0.04); #6755=CIRCLE('',#36012,0.04); #6756=CIRCLE('',#36016,0.04); #6757=CIRCLE('',#36018,0.04); #6758=CIRCLE('',#36025,0.999999999999996); #6759=CIRCLE('',#36026,0.999999999999996); #6760=CIRCLE('',#36031,2.); #6761=CIRCLE('',#36032,2.); #6762=CIRCLE('',#36033,2.); #6763=CIRCLE('',#36034,2.); #6764=CIRCLE('',#36035,1.99999999999999); #6765=CIRCLE('',#36036,1.99999999999999); #6766=CIRCLE('',#36038,1.99999999999999); #6767=CIRCLE('',#36039,1.99999999999999); #6768=CIRCLE('',#36040,0.999999999999996); #6769=CIRCLE('',#36041,0.999999999999996); #6770=CIRCLE('',#36069,0.800000000000007); #6771=CIRCLE('',#36070,0.800000000000008); #6772=CIRCLE('',#36071,0.800000000000007); #6773=CIRCLE('',#36072,0.800000000000001); #6774=CIRCLE('',#36218,2.); #6775=CIRCLE('',#36221,2.); #6776=CIRCLE('',#36224,2.); #6777=CIRCLE('',#36230,2.); #6778=CIRCLE('',#36253,0.900000000000003); #6779=CIRCLE('',#36254,0.3); #6780=CIRCLE('',#36255,1.2); #6781=CIRCLE('',#36257,1.2); #6782=CIRCLE('',#36260,0.899999999999994); #6783=CIRCLE('',#36261,0.3); #6784=CIRCLE('',#36262,1.19999999999999); #6785=CIRCLE('',#36264,1.19999999999999); #6786=CIRCLE('',#36267,0.899999999999994); #6787=CIRCLE('',#36268,0.3); #6788=CIRCLE('',#36269,1.19999999999999); #6789=CIRCLE('',#36271,1.19999999999999); #6790=CIRCLE('',#36278,2.); #6791=CIRCLE('',#36279,2.); #6792=CIRCLE('',#36280,2.); #6793=CIRCLE('',#36281,2.); #6794=CIRCLE('',#36283,0.800000000000001); #6795=CIRCLE('',#36284,0.8); #6796=CIRCLE('',#36286,0.800000000000001); #6797=CIRCLE('',#36287,4.8); #6798=CIRCLE('',#36288,4.); #6799=CIRCLE('',#36290,0.800000000000001); #6800=CIRCLE('',#36292,4.8); #6801=CIRCLE('',#36293,4.); #6802=CIRCLE('',#36295,4.); #6803=CIRCLE('',#36296,4.); #6804=CIRCLE('',#36299,4.8); #6805=CIRCLE('',#36300,4.8); #6806=CIRCLE('',#36302,0.800000000000001); #6807=CIRCLE('',#36303,4.); #6808=CIRCLE('',#36304,0.8); #6809=CIRCLE('',#36306,0.8); #6810=CIRCLE('',#36308,0.8); #6811=CIRCLE('',#36309,4.); #6812=CIRCLE('',#36313,4.); #6813=CIRCLE('',#36328,4.); #6814=CIRCLE('',#36331,4.); #6815=CIRCLE('',#36334,4.); #6816=CIRCLE('',#36352,2.); #6817=CIRCLE('',#36353,2.); #6818=CIRCLE('',#36355,4.); #6819=CIRCLE('',#36356,2.); #6820=CIRCLE('',#36357,1.); #6821=CIRCLE('',#36358,4.); #6822=CIRCLE('',#36359,1.); #6823=CIRCLE('',#36360,1.); #6824=CIRCLE('',#36361,4.); #6825=CIRCLE('',#36362,1.); #6826=CIRCLE('',#36364,4.); #6827=CIRCLE('',#36366,2.); #6828=CIRCLE('',#36368,1.); #6829=CIRCLE('',#36370,4.); #6830=CIRCLE('',#36372,1.); #6831=CIRCLE('',#36375,1.); #6832=CIRCLE('',#36377,4.); #6833=CIRCLE('',#36379,1.); #6834=CIRCLE('',#36394,2.); #6835=CIRCLE('',#36396,0.800000000000007); #6836=CIRCLE('',#36397,0.800000000000001); #6837=CIRCLE('',#36398,0.800000000000007); #6838=CIRCLE('',#36399,0.800000000000008); #6839=CIRCLE('',#36401,2.); #6840=CIRCLE('',#36405,2.); #6841=CIRCLE('',#36408,2.); #6842=LINE('',#45050,#10376); #6843=LINE('',#45054,#10377); #6844=LINE('',#45058,#10378); #6845=LINE('',#45060,#10379); #6846=LINE('',#45061,#10380); #6847=LINE('',#45064,#10381); #6848=LINE('',#45066,#10382); #6849=LINE('',#45067,#10383); #6850=LINE('',#45070,#10384); #6851=LINE('',#45072,#10385); #6852=LINE('',#45076,#10386); #6853=LINE('',#45080,#10387); #6854=LINE('',#45082,#10388); #6855=LINE('',#45084,#10389); #6856=LINE('',#45088,#10390); #6857=LINE('',#45092,#10391); #6858=LINE('',#45094,#10392); #6859=LINE('',#45096,#10393); #6860=LINE('',#45100,#10394); #6861=LINE('',#45103,#10395); #6862=LINE('',#45107,#10396); #6863=LINE('',#45109,#10397); #6864=LINE('',#45110,#10398); #6865=LINE('',#45112,#10399); #6866=LINE('',#45114,#10400); #6867=LINE('',#45116,#10401); #6868=LINE('',#45118,#10402); #6869=LINE('',#45120,#10403); #6870=LINE('',#45122,#10404); #6871=LINE('',#45124,#10405); #6872=LINE('',#45125,#10406); #6873=LINE('',#45127,#10407); #6874=LINE('',#45130,#10408); #6875=LINE('',#45131,#10409); #6876=LINE('',#45134,#10410); #6877=LINE('',#45136,#10411); #6878=LINE('',#45137,#10412); #6879=LINE('',#45138,#10413); #6880=LINE('',#45140,#10414); #6881=LINE('',#45142,#10415); #6882=LINE('',#45144,#10416); #6883=LINE('',#45146,#10417); #6884=LINE('',#45148,#10418); #6885=LINE('',#45152,#10419); #6886=LINE('',#45153,#10420); #6887=LINE('',#45157,#10421); #6888=LINE('',#45159,#10422); #6889=LINE('',#45160,#10423); #6890=LINE('',#45162,#10424); #6891=LINE('',#45164,#10425); #6892=LINE('',#45166,#10426); #6893=LINE('',#45167,#10427); #6894=LINE('',#45170,#10428); #6895=LINE('',#45171,#10429); #6896=LINE('',#45174,#10430); #6897=LINE('',#45175,#10431); #6898=LINE('',#45178,#10432); #6899=LINE('',#45180,#10433); #6900=LINE('',#45181,#10434); #6901=LINE('',#45184,#10435); #6902=LINE('',#45186,#10436); #6903=LINE('',#45187,#10437); #6904=LINE('',#45190,#10438); #6905=LINE('',#45192,#10439); #6906=LINE('',#45193,#10440); #6907=LINE('',#45196,#10441); #6908=LINE('',#45198,#10442); #6909=LINE('',#45199,#10443); #6910=LINE('',#45202,#10444); #6911=LINE('',#45204,#10445); #6912=LINE('',#45205,#10446); #6913=LINE('',#45208,#10447); #6914=LINE('',#45210,#10448); #6915=LINE('',#45211,#10449); #6916=LINE('',#45214,#10450); #6917=LINE('',#45215,#10451); #6918=LINE('',#45218,#10452); #6919=LINE('',#45219,#10453); #6920=LINE('',#45222,#10454); #6921=LINE('',#45224,#10455); #6922=LINE('',#45226,#10456); #6923=LINE('',#45228,#10457); #6924=LINE('',#45230,#10458); #6925=LINE('',#45232,#10459); #6926=LINE('',#45234,#10460); #6927=LINE('',#45236,#10461); #6928=LINE('',#45238,#10462); #6929=LINE('',#45239,#10463); #6930=LINE('',#45241,#10464); #6931=LINE('',#45244,#10465); #6932=LINE('',#45248,#10466); #6933=LINE('',#45252,#10467); #6934=LINE('',#45254,#10468); #6935=LINE('',#45256,#10469); #6936=LINE('',#45260,#10470); #6937=LINE('',#45264,#10471); #6938=LINE('',#45265,#10472); #6939=LINE('',#45268,#10473); #6940=LINE('',#45269,#10474); #6941=LINE('',#45272,#10475); #6942=LINE('',#45273,#10476); #6943=LINE('',#45276,#10477); #6944=LINE('',#45278,#10478); #6945=LINE('',#45280,#10479); #6946=LINE('',#45282,#10480); #6947=LINE('',#45284,#10481); #6948=LINE('',#45286,#10482); #6949=LINE('',#45288,#10483); #6950=LINE('',#45290,#10484); #6951=LINE('',#45292,#10485); #6952=LINE('',#45293,#10486); #6953=LINE('',#45295,#10487); #6954=LINE('',#45298,#10488); #6955=LINE('',#45299,#10489); #6956=LINE('',#45304,#10490); #6957=LINE('',#45308,#10491); #6958=LINE('',#45310,#10492); #6959=LINE('',#45312,#10493); #6960=LINE('',#45316,#10494); #6961=LINE('',#45319,#10495); #6962=LINE('',#45321,#10496); #6963=LINE('',#45322,#10497); #6964=LINE('',#45325,#10498); #6965=LINE('',#45329,#10499); #6966=LINE('',#45333,#10500); #6967=LINE('',#45335,#10501); #6968=LINE('',#45337,#10502); #6969=LINE('',#45341,#10503); #6970=LINE('',#45344,#10504); #6971=LINE('',#45349,#10505); #6972=LINE('',#45353,#10506); #6973=LINE('',#45355,#10507); #6974=LINE('',#45357,#10508); #6975=LINE('',#45361,#10509); #6976=LINE('',#45364,#10510); #6977=LINE('',#45366,#10511); #6978=LINE('',#45367,#10512); #6979=LINE('',#45370,#10513); #6980=LINE('',#45374,#10514); #6981=LINE('',#45378,#10515); #6982=LINE('',#45380,#10516); #6983=LINE('',#45382,#10517); #6984=LINE('',#45386,#10518); #6985=LINE('',#45389,#10519); #6986=LINE('',#45392,#10520); #6987=LINE('',#45396,#10521); #6988=LINE('',#45400,#10522); #6989=LINE('',#45402,#10523); #6990=LINE('',#45404,#10524); #6991=LINE('',#45408,#10525); #6992=LINE('',#45411,#10526); #6993=LINE('',#45413,#10527); #6994=LINE('',#45414,#10528); #6995=LINE('',#45417,#10529); #6996=LINE('',#45418,#10530); #6997=LINE('',#45421,#10531); #6998=LINE('',#45422,#10532); #6999=LINE('',#45425,#10533); #7000=LINE('',#45426,#10534); #7001=LINE('',#45429,#10535); #7002=LINE('',#45431,#10536); #7003=LINE('',#45433,#10537); #7004=LINE('',#45435,#10538); #7005=LINE('',#45437,#10539); #7006=LINE('',#45438,#10540); #7007=LINE('',#45443,#10541); #7008=LINE('',#45444,#10542); #7009=LINE('',#45446,#10543); #7010=LINE('',#45448,#10544); #7011=LINE('',#45450,#10545); #7012=LINE('',#45452,#10546); #7013=LINE('',#45454,#10547); #7014=LINE('',#45456,#10548); #7015=LINE('',#45458,#10549); #7016=LINE('',#45460,#10550); #7017=LINE('',#45462,#10551); #7018=LINE('',#45464,#10552); #7019=LINE('',#45468,#10553); #7020=LINE('',#45469,#10554); #7021=LINE('',#45472,#10555); #7022=LINE('',#45473,#10556); #7023=LINE('',#45476,#10557); #7024=LINE('',#45477,#10558); #7025=LINE('',#45480,#10559); #7026=LINE('',#45482,#10560); #7027=LINE('',#45483,#10561); #7028=LINE('',#45486,#10562); #7029=LINE('',#45488,#10563); #7030=LINE('',#45489,#10564); #7031=LINE('',#45492,#10565); #7032=LINE('',#45494,#10566); #7033=LINE('',#45495,#10567); #7034=LINE('',#45498,#10568); #7035=LINE('',#45500,#10569); #7036=LINE('',#45501,#10570); #7037=LINE('',#45504,#10571); #7038=LINE('',#45506,#10572); #7039=LINE('',#45507,#10573); #7040=LINE('',#45510,#10574); #7041=LINE('',#45512,#10575); #7042=LINE('',#45513,#10576); #7043=LINE('',#45516,#10577); #7044=LINE('',#45518,#10578); #7045=LINE('',#45519,#10579); #7046=LINE('',#45522,#10580); #7047=LINE('',#45524,#10581); #7048=LINE('',#45525,#10582); #7049=LINE('',#45527,#10583); #7050=LINE('',#45529,#10584); #7051=LINE('',#45531,#10585); #7052=LINE('',#45533,#10586); #7053=LINE('',#45535,#10587); #7054=LINE('',#45537,#10588); #7055=LINE('',#45539,#10589); #7056=LINE('',#45541,#10590); #7057=LINE('',#45543,#10591); #7058=LINE('',#45546,#10592); #7059=LINE('',#45548,#10593); #7060=LINE('',#45550,#10594); #7061=LINE('',#45552,#10595); #7062=LINE('',#45554,#10596); #7063=LINE('',#45556,#10597); #7064=LINE('',#45558,#10598); #7065=LINE('',#45562,#10599); #7066=LINE('',#45563,#10600); #7067=LINE('',#45565,#10601); #7068=LINE('',#45568,#10602); #7069=LINE('',#45569,#10603); #7070=LINE('',#45573,#10604); #7071=LINE('',#45574,#10605); #7072=LINE('',#45576,#10606); #7073=LINE('',#45578,#10607); #7074=LINE('',#45580,#10608); #7075=LINE('',#45582,#10609); #7076=LINE('',#45584,#10610); #7077=LINE('',#45586,#10611); #7078=LINE('',#45588,#10612); #7079=LINE('',#45589,#10613); #7080=LINE('',#45592,#10614); #7081=LINE('',#45593,#10615); #7082=LINE('',#45595,#10616); #7083=LINE('',#45598,#10617); #7084=LINE('',#45601,#10618); #7085=LINE('',#45603,#10619); #7086=LINE('',#45605,#10620); #7087=LINE('',#45608,#10621); #7088=LINE('',#45612,#10622); #7089=LINE('',#45616,#10623); #7090=LINE('',#45618,#10624); #7091=LINE('',#45620,#10625); #7092=LINE('',#45624,#10626); #7093=LINE('',#45630,#10627); #7094=LINE('',#45634,#10628); #7095=LINE('',#45636,#10629); #7096=LINE('',#45638,#10630); #7097=LINE('',#45642,#10631); #7098=LINE('',#45645,#10632); #7099=LINE('',#45647,#10633); #7100=LINE('',#45648,#10634); #7101=LINE('',#45651,#10635); #7102=LINE('',#45655,#10636); #7103=LINE('',#45659,#10637); #7104=LINE('',#45661,#10638); #7105=LINE('',#45663,#10639); #7106=LINE('',#45667,#10640); #7107=LINE('',#45670,#10641); #7108=LINE('',#45673,#10642); #7109=LINE('',#45677,#10643); #7110=LINE('',#45681,#10644); #7111=LINE('',#45683,#10645); #7112=LINE('',#45685,#10646); #7113=LINE('',#45689,#10647); #7114=LINE('',#45692,#10648); #7115=LINE('',#45694,#10649); #7116=LINE('',#45695,#10650); #7117=LINE('',#45698,#10651); #7118=LINE('',#45702,#10652); #7119=LINE('',#45706,#10653); #7120=LINE('',#45708,#10654); #7121=LINE('',#45710,#10655); #7122=LINE('',#45714,#10656); #7123=LINE('',#45720,#10657); #7124=LINE('',#45724,#10658); #7125=LINE('',#45726,#10659); #7126=LINE('',#45728,#10660); #7127=LINE('',#45732,#10661); #7128=LINE('',#45735,#10662); #7129=LINE('',#45737,#10663); #7130=LINE('',#45738,#10664); #7131=LINE('',#45741,#10665); #7132=LINE('',#45745,#10666); #7133=LINE('',#45749,#10667); #7134=LINE('',#45751,#10668); #7135=LINE('',#45753,#10669); #7136=LINE('',#45757,#10670); #7137=LINE('',#45760,#10671); #7138=LINE('',#45763,#10672); #7139=LINE('',#45767,#10673); #7140=LINE('',#45771,#10674); #7141=LINE('',#45773,#10675); #7142=LINE('',#45775,#10676); #7143=LINE('',#45779,#10677); #7144=LINE('',#45782,#10678); #7145=LINE('',#45784,#10679); #7146=LINE('',#45785,#10680); #7147=LINE('',#45788,#10681); #7148=LINE('',#45790,#10682); #7149=LINE('',#45792,#10683); #7150=LINE('',#45794,#10684); #7151=LINE('',#45797,#10685); #7152=LINE('',#45799,#10686); #7153=LINE('',#45801,#10687); #7154=LINE('',#45803,#10688); #7155=LINE('',#45805,#10689); #7156=LINE('',#45807,#10690); #7157=LINE('',#45809,#10691); #7158=LINE('',#45812,#10692); #7159=LINE('',#45814,#10693); #7160=LINE('',#45816,#10694); #7161=LINE('',#45818,#10695); #7162=LINE('',#45820,#10696); #7163=LINE('',#45822,#10697); #7164=LINE('',#45824,#10698); #7165=LINE('',#45827,#10699); #7166=LINE('',#45829,#10700); #7167=LINE('',#45831,#10701); #7168=LINE('',#45833,#10702); #7169=LINE('',#45835,#10703); #7170=LINE('',#45837,#10704); #7171=LINE('',#45839,#10705); #7172=LINE('',#45842,#10706); #7173=LINE('',#45844,#10707); #7174=LINE('',#45846,#10708); #7175=LINE('',#45848,#10709); #7176=LINE('',#45850,#10710); #7177=LINE('',#45852,#10711); #7178=LINE('',#45854,#10712); #7179=LINE('',#45861,#10713); #7180=LINE('',#45863,#10714); #7181=LINE('',#45865,#10715); #7182=LINE('',#45866,#10716); #7183=LINE('',#45870,#10717); #7184=LINE('',#45871,#10718); #7185=LINE('',#45872,#10719); #7186=LINE('',#45875,#10720); #7187=LINE('',#45877,#10721); #7188=LINE('',#45878,#10722); #7189=LINE('',#45880,#10723); #7190=LINE('',#45940,#10724); #7191=LINE('',#46001,#10725); #7192=LINE('',#46003,#10726); #7193=LINE('',#46005,#10727); #7194=LINE('',#46007,#10728); #7195=LINE('',#46009,#10729); #7196=LINE('',#46011,#10730); #7197=LINE('',#46013,#10731); #7198=LINE('',#46015,#10732); #7199=LINE('',#46017,#10733); #7200=LINE('',#46019,#10734); #7201=LINE('',#46021,#10735); #7202=LINE('',#46023,#10736); #7203=LINE('',#46025,#10737); #7204=LINE('',#46027,#10738); #7205=LINE('',#46029,#10739); #7206=LINE('',#46031,#10740); #7207=LINE('',#46033,#10741); #7208=LINE('',#46035,#10742); #7209=LINE('',#46037,#10743); #7210=LINE('',#46039,#10744); #7211=LINE('',#46041,#10745); #7212=LINE('',#46043,#10746); #7213=LINE('',#46045,#10747); #7214=LINE('',#46047,#10748); #7215=LINE('',#46049,#10749); #7216=LINE('',#46051,#10750); #7217=LINE('',#46053,#10751); #7218=LINE('',#46055,#10752); #7219=LINE('',#46057,#10753); #7220=LINE('',#46064,#10754); #7221=LINE('',#46070,#10755); #7222=LINE('',#46076,#10756); #7223=LINE('',#46081,#10757); #7224=LINE('',#46085,#10758); #7225=LINE('',#46092,#10759); #7226=LINE('',#46095,#10760); #7227=LINE('',#46101,#10761); #7228=LINE('',#46104,#10762); #7229=LINE('',#46110,#10763); #7230=LINE('',#46113,#10764); #7231=LINE('',#46119,#10765); #7232=LINE('',#46122,#10766); #7233=LINE('',#46127,#10767); #7234=LINE('',#46133,#10768); #7235=LINE('',#46139,#10769); #7236=LINE('',#46145,#10770); #7237=LINE('',#46151,#10771); #7238=LINE('',#46157,#10772); #7239=LINE('',#46163,#10773); #7240=LINE('',#46169,#10774); #7241=LINE('',#46175,#10775); #7242=LINE('',#46181,#10776); #7243=LINE('',#46187,#10777); #7244=LINE('',#46193,#10778); #7245=LINE('',#46200,#10779); #7246=LINE('',#46203,#10780); #7247=LINE('',#46209,#10781); #7248=LINE('',#46212,#10782); #7249=LINE('',#46218,#10783); #7250=LINE('',#46221,#10784); #7251=LINE('',#46227,#10785); #7252=LINE('',#46230,#10786); #7253=LINE('',#46236,#10787); #7254=LINE('',#46239,#10788); #7255=LINE('',#46245,#10789); #7256=LINE('',#46248,#10790); #7257=LINE('',#46254,#10791); #7258=LINE('',#46257,#10792); #7259=LINE('',#46263,#10793); #7260=LINE('',#46266,#10794); #7261=LINE('',#46272,#10795); #7262=LINE('',#46275,#10796); #7263=LINE('',#46281,#10797); #7264=LINE('',#46284,#10798); #7265=LINE('',#46290,#10799); #7266=LINE('',#46293,#10800); #7267=LINE('',#46299,#10801); #7268=LINE('',#46302,#10802); #7269=LINE('',#46308,#10803); #7270=LINE('',#46311,#10804); #7271=LINE('',#46317,#10805); #7272=LINE('',#46320,#10806); #7273=LINE('',#46326,#10807); #7274=LINE('',#46329,#10808); #7275=LINE('',#46334,#10809); #7276=LINE('',#46340,#10810); #7277=LINE('',#46346,#10811); #7278=LINE('',#46352,#10812); #7279=LINE('',#46358,#10813); #7280=LINE('',#46364,#10814); #7281=LINE('',#46370,#10815); #7282=LINE('',#46376,#10816); #7283=LINE('',#46383,#10817); #7284=LINE('',#46386,#10818); #7285=LINE('',#46389,#10819); #7286=LINE('',#46391,#10820); #7287=LINE('',#46392,#10821); #7288=LINE('',#46398,#10822); #7289=LINE('',#46401,#10823); #7290=LINE('',#46407,#10824); #7291=LINE('',#46410,#10825); #7292=LINE('',#46414,#10826); #7293=LINE('',#46415,#10827); #7294=LINE('',#46416,#10828); #7295=LINE('',#46420,#10829); #7296=LINE('',#46421,#10830); #7297=LINE('',#46422,#10831); #7298=LINE('',#46426,#10832); #7299=LINE('',#46427,#10833); #7300=LINE('',#46428,#10834); #7301=LINE('',#46432,#10835); #7302=LINE('',#46433,#10836); #7303=LINE('',#46434,#10837); #7304=LINE('',#46438,#10838); #7305=LINE('',#46439,#10839); #7306=LINE('',#46440,#10840); #7307=LINE('',#46444,#10841); #7308=LINE('',#46445,#10842); #7309=LINE('',#46446,#10843); #7310=LINE('',#46450,#10844); #7311=LINE('',#46451,#10845); #7312=LINE('',#46452,#10846); #7313=LINE('',#46456,#10847); #7314=LINE('',#46457,#10848); #7315=LINE('',#46458,#10849); #7316=LINE('',#46462,#10850); #7317=LINE('',#46463,#10851); #7318=LINE('',#46464,#10852); #7319=LINE('',#46468,#10853); #7320=LINE('',#46469,#10854); #7321=LINE('',#46470,#10855); #7322=LINE('',#46474,#10856); #7323=LINE('',#46475,#10857); #7324=LINE('',#46476,#10858); #7325=LINE('',#46480,#10859); #7326=LINE('',#46481,#10860); #7327=LINE('',#46482,#10861); #7328=LINE('',#46486,#10862); #7329=LINE('',#46487,#10863); #7330=LINE('',#46488,#10864); #7331=LINE('',#46492,#10865); #7332=LINE('',#46493,#10866); #7333=LINE('',#46494,#10867); #7334=LINE('',#46498,#10868); #7335=LINE('',#46499,#10869); #7336=LINE('',#46500,#10870); #7337=LINE('',#46504,#10871); #7338=LINE('',#46505,#10872); #7339=LINE('',#46506,#10873); #7340=LINE('',#46510,#10874); #7341=LINE('',#46511,#10875); #7342=LINE('',#46512,#10876); #7343=LINE('',#46516,#10877); #7344=LINE('',#46517,#10878); #7345=LINE('',#46518,#10879); #7346=LINE('',#46522,#10880); #7347=LINE('',#46523,#10881); #7348=LINE('',#46524,#10882); #7349=LINE('',#46528,#10883); #7350=LINE('',#46529,#10884); #7351=LINE('',#46530,#10885); #7352=LINE('',#46534,#10886); #7353=LINE('',#46535,#10887); #7354=LINE('',#46536,#10888); #7355=LINE('',#46541,#10889); #7356=LINE('',#46545,#10890); #7357=LINE('',#46548,#10891); #7358=LINE('',#46553,#10892); #7359=LINE('',#46557,#10893); #7360=LINE('',#46560,#10894); #7361=LINE('',#46564,#10895); #7362=LINE('',#46566,#10896); #7363=LINE('',#46567,#10897); #7364=LINE('',#46569,#10898); #7365=LINE('',#46571,#10899); #7366=LINE('',#46575,#10900); #7367=LINE('',#46580,#10901); #7368=LINE('',#46584,#10902); #7369=LINE('',#46588,#10903); #7370=LINE('',#46589,#10904); #7371=LINE('',#46591,#10905); #7372=LINE('',#46592,#10906); #7373=LINE('',#46597,#10907); #7374=LINE('',#46601,#10908); #7375=LINE('',#46604,#10909); #7376=LINE('',#46610,#10910); #7377=LINE('',#46614,#10911); #7378=LINE('',#46616,#10912); #7379=LINE('',#46621,#10913); #7380=LINE('',#46625,#10914); #7381=LINE('',#46628,#10915); #7382=LINE('',#46633,#10916); #7383=LINE('',#46637,#10917); #7384=LINE('',#46640,#10918); #7385=LINE('',#46644,#10919); #7386=LINE('',#46648,#10920); #7387=LINE('',#46652,#10921); #7388=LINE('',#46654,#10922); #7389=LINE('',#46655,#10923); #7390=LINE('',#46656,#10924); #7391=LINE('',#46660,#10925); #7392=LINE('',#46661,#10926); #7393=LINE('',#46663,#10927); #7394=LINE('',#46665,#10928); #7395=LINE('',#46667,#10929); #7396=LINE('',#46671,#10930); #7397=LINE('',#46677,#10931); #7398=LINE('',#46681,#10932); #7399=LINE('',#46684,#10933); #7400=LINE('',#46690,#10934); #7401=LINE('',#46694,#10935); #7402=LINE('',#46696,#10936); #7403=LINE('',#46701,#10937); #7404=LINE('',#46705,#10938); #7405=LINE('',#46708,#10939); #7406=LINE('',#46713,#10940); #7407=LINE('',#46717,#10941); #7408=LINE('',#46720,#10942); #7409=LINE('',#46725,#10943); #7410=LINE('',#46729,#10944); #7411=LINE('',#46732,#10945); #7412=LINE('',#46737,#10946); #7413=LINE('',#46741,#10947); #7414=LINE('',#46744,#10948); #7415=LINE('',#46749,#10949); #7416=LINE('',#46753,#10950); #7417=LINE('',#46756,#10951); #7418=LINE('',#46761,#10952); #7419=LINE('',#46765,#10953); #7420=LINE('',#46768,#10954); #7421=LINE('',#46772,#10955); #7422=LINE('',#46776,#10956); #7423=LINE('',#46780,#10957); #7424=LINE('',#46782,#10958); #7425=LINE('',#46783,#10959); #7426=LINE('',#46784,#10960); #7427=LINE('',#46788,#10961); #7428=LINE('',#46789,#10962); #7429=LINE('',#46791,#10963); #7430=LINE('',#46793,#10964); #7431=LINE('',#46795,#10965); #7432=LINE('',#46799,#10966); #7433=LINE('',#46805,#10967); #7434=LINE('',#46809,#10968); #7435=LINE('',#46812,#10969); #7436=LINE('',#46818,#10970); #7437=LINE('',#46822,#10971); #7438=LINE('',#46824,#10972); #7439=LINE('',#46829,#10973); #7440=LINE('',#46833,#10974); #7441=LINE('',#46836,#10975); #7442=LINE('',#46841,#10976); #7443=LINE('',#46845,#10977); #7444=LINE('',#46848,#10978); #7445=LINE('',#46853,#10979); #7446=LINE('',#46857,#10980); #7447=LINE('',#46860,#10981); #7448=LINE('',#46866,#10982); #7449=LINE('',#46870,#10983); #7450=LINE('',#46872,#10984); #7451=LINE('',#46877,#10985); #7452=LINE('',#46881,#10986); #7453=LINE('',#46884,#10987); #7454=LINE('',#46889,#10988); #7455=LINE('',#46893,#10989); #7456=LINE('',#46896,#10990); #7457=LINE('',#46901,#10991); #7458=LINE('',#46905,#10992); #7459=LINE('',#46908,#10993); #7460=LINE('',#46914,#10994); #7461=LINE('',#46918,#10995); #7462=LINE('',#46920,#10996); #7463=LINE('',#46925,#10997); #7464=LINE('',#46929,#10998); #7465=LINE('',#46932,#10999); #7466=LINE('',#46937,#11000); #7467=LINE('',#46941,#11001); #7468=LINE('',#46944,#11002); #7469=LINE('',#46948,#11003); #7470=LINE('',#46952,#11004); #7471=LINE('',#46955,#11005); #7472=LINE('',#46960,#11006); #7473=LINE('',#46964,#11007); #7474=LINE('',#46966,#11008); #7475=LINE('',#46971,#11009); #7476=LINE('',#46975,#11010); #7477=LINE('',#46978,#11011); #7478=LINE('',#46983,#11012); #7479=LINE('',#46987,#11013); #7480=LINE('',#46990,#11014); #7481=LINE('',#46994,#11015); #7482=LINE('',#46996,#11016); #7483=LINE('',#46997,#11017); #7484=LINE('',#46999,#11018); #7485=LINE('',#47001,#11019); #7486=LINE('',#47005,#11020); #7487=LINE('',#47010,#11021); #7488=LINE('',#47014,#11022); #7489=LINE('',#47018,#11023); #7490=LINE('',#47019,#11024); #7491=LINE('',#47021,#11025); #7492=LINE('',#47022,#11026); #7493=LINE('',#47027,#11027); #7494=LINE('',#47031,#11028); #7495=LINE('',#47034,#11029); #7496=LINE('',#47039,#11030); #7497=LINE('',#47043,#11031); #7498=LINE('',#47046,#11032); #7499=LINE('',#47049,#11033); #7500=LINE('',#47051,#11034); #7501=LINE('',#47053,#11035); #7502=LINE('',#47057,#11036); #7503=LINE('',#47061,#11037); #7504=LINE('',#47062,#11038); #7505=LINE('',#47066,#11039); #7506=LINE('',#47068,#11040); #7507=LINE('',#47070,#11041); #7508=LINE('',#47071,#11042); #7509=LINE('',#47085,#11043); #7510=LINE('',#47086,#11044); #7511=LINE('',#47088,#11045); #7512=LINE('',#47089,#11046); #7513=LINE('',#47090,#11047); #7514=LINE('',#47092,#11048); #7515=LINE('',#47093,#11049); #7516=LINE('',#47094,#11050); #7517=LINE('',#47096,#11051); #7518=LINE('',#47097,#11052); #7519=LINE('',#47098,#11053); #7520=LINE('',#47100,#11054); #7521=LINE('',#47101,#11055); #7522=LINE('',#47102,#11056); #7523=LINE('',#47104,#11057); #7524=LINE('',#47105,#11058); #7525=LINE('',#47106,#11059); #7526=LINE('',#47108,#11060); #7527=LINE('',#47109,#11061); #7528=LINE('',#47110,#11062); #7529=LINE('',#47112,#11063); #7530=LINE('',#47113,#11064); #7531=LINE('',#47114,#11065); #7532=LINE('',#47116,#11066); #7533=LINE('',#47117,#11067); #7534=LINE('',#47118,#11068); #7535=LINE('',#47120,#11069); #7536=LINE('',#47121,#11070); #7537=LINE('',#47122,#11071); #7538=LINE('',#47124,#11072); #7539=LINE('',#47125,#11073); #7540=LINE('',#47126,#11074); #7541=LINE('',#47128,#11075); #7542=LINE('',#47129,#11076); #7543=LINE('',#47130,#11077); #7544=LINE('',#47132,#11078); #7545=LINE('',#47133,#11079); #7546=LINE('',#47134,#11080); #7547=LINE('',#47136,#11081); #7548=LINE('',#47137,#11082); #7549=LINE('',#47138,#11083); #7550=LINE('',#47140,#11084); #7551=LINE('',#47141,#11085); #7552=LINE('',#47142,#11086); #7553=LINE('',#47144,#11087); #7554=LINE('',#47145,#11088); #7555=LINE('',#47146,#11089); #7556=LINE('',#47148,#11090); #7557=LINE('',#47149,#11091); #7558=LINE('',#47150,#11092); #7559=LINE('',#47152,#11093); #7560=LINE('',#47153,#11094); #7561=LINE('',#47154,#11095); #7562=LINE('',#47156,#11096); #7563=LINE('',#47157,#11097); #7564=LINE('',#47158,#11098); #7565=LINE('',#47160,#11099); #7566=LINE('',#47161,#11100); #7567=LINE('',#47162,#11101); #7568=LINE('',#47187,#11102); #7569=LINE('',#47193,#11103); #7570=LINE('',#47199,#11104); #7571=LINE('',#47205,#11105); #7572=LINE('',#47210,#11106); #7573=LINE('',#47216,#11107); #7574=LINE('',#47220,#11108); #7575=LINE('',#47226,#11109); #7576=LINE('',#47232,#11110); #7577=LINE('',#47238,#11111); #7578=LINE('',#47244,#11112); #7579=LINE('',#47250,#11113); #7580=LINE('',#47256,#11114); #7581=LINE('',#47262,#11115); #7582=LINE('',#47268,#11116); #7583=LINE('',#47274,#11117); #7584=LINE('',#47280,#11118); #7585=LINE('',#47286,#11119); #7586=LINE('',#47292,#11120); #7587=LINE('',#47298,#11121); #7588=LINE('',#47304,#11122); #7589=LINE('',#47310,#11123); #7590=LINE('',#47316,#11124); #7591=LINE('',#47322,#11125); #7592=LINE('',#47328,#11126); #7593=LINE('',#47334,#11127); #7594=LINE('',#47340,#11128); #7595=LINE('',#47345,#11129); #7596=LINE('',#47347,#11130); #7597=LINE('',#47349,#11131); #7598=LINE('',#47350,#11132); #7599=LINE('',#47354,#11133); #7600=LINE('',#47355,#11134); #7601=LINE('',#47356,#11135); #7602=LINE('',#47362,#11136); #7603=LINE('',#47367,#11137); #7604=LINE('',#47371,#11138); #7605=LINE('',#47373,#11139); #7606=LINE('',#47374,#11140); #7607=LINE('',#47378,#11141); #7608=LINE('',#47380,#11142); #7609=LINE('',#47382,#11143); #7610=LINE('',#47383,#11144); #7611=LINE('',#47387,#11145); #7612=LINE('',#47389,#11146); #7613=LINE('',#47391,#11147); #7614=LINE('',#47392,#11148); #7615=LINE('',#47396,#11149); #7616=LINE('',#47398,#11150); #7617=LINE('',#47400,#11151); #7618=LINE('',#47401,#11152); #7619=LINE('',#47405,#11153); #7620=LINE('',#47407,#11154); #7621=LINE('',#47409,#11155); #7622=LINE('',#47410,#11156); #7623=LINE('',#47414,#11157); #7624=LINE('',#47416,#11158); #7625=LINE('',#47418,#11159); #7626=LINE('',#47419,#11160); #7627=LINE('',#47423,#11161); #7628=LINE('',#47425,#11162); #7629=LINE('',#47427,#11163); #7630=LINE('',#47428,#11164); #7631=LINE('',#47432,#11165); #7632=LINE('',#47434,#11166); #7633=LINE('',#47436,#11167); #7634=LINE('',#47437,#11168); #7635=LINE('',#47441,#11169); #7636=LINE('',#47443,#11170); #7637=LINE('',#47445,#11171); #7638=LINE('',#47446,#11172); #7639=LINE('',#47450,#11173); #7640=LINE('',#47452,#11174); #7641=LINE('',#47454,#11175); #7642=LINE('',#47455,#11176); #7643=LINE('',#47459,#11177); #7644=LINE('',#47461,#11178); #7645=LINE('',#47463,#11179); #7646=LINE('',#47464,#11180); #7647=LINE('',#47468,#11181); #7648=LINE('',#47470,#11182); #7649=LINE('',#47472,#11183); #7650=LINE('',#47473,#11184); #7651=LINE('',#47477,#11185); #7652=LINE('',#47479,#11186); #7653=LINE('',#47481,#11187); #7654=LINE('',#47482,#11188); #7655=LINE('',#47486,#11189); #7656=LINE('',#47488,#11190); #7657=LINE('',#47490,#11191); #7658=LINE('',#47491,#11192); #7659=LINE('',#47495,#11193); #7660=LINE('',#47497,#11194); #7661=LINE('',#47499,#11195); #7662=LINE('',#47500,#11196); #7663=LINE('',#47504,#11197); #7664=LINE('',#47506,#11198); #7665=LINE('',#47508,#11199); #7666=LINE('',#47509,#11200); #7667=LINE('',#47513,#11201); #7668=LINE('',#47515,#11202); #7669=LINE('',#47517,#11203); #7670=LINE('',#47518,#11204); #7671=LINE('',#47522,#11205); #7672=LINE('',#47524,#11206); #7673=LINE('',#47526,#11207); #7674=LINE('',#47527,#11208); #7675=LINE('',#47531,#11209); #7676=LINE('',#47533,#11210); #7677=LINE('',#47535,#11211); #7678=LINE('',#47536,#11212); #7679=LINE('',#47540,#11213); #7680=LINE('',#47542,#11214); #7681=LINE('',#47544,#11215); #7682=LINE('',#47545,#11216); #7683=LINE('',#47549,#11217); #7684=LINE('',#47551,#11218); #7685=LINE('',#47553,#11219); #7686=LINE('',#47554,#11220); #7687=LINE('',#47567,#11221); #7688=LINE('',#47598,#11222); #7689=LINE('',#47602,#11223); #7690=LINE('',#47606,#11224); #7691=LINE('',#47610,#11225); #7692=LINE('',#47611,#11226); #7693=LINE('',#47615,#11227); #7694=LINE('',#47616,#11228); #7695=LINE('',#47620,#11229); #7696=LINE('',#47624,#11230); #7697=LINE('',#47626,#11231); #7698=LINE('',#47628,#11232); #7699=LINE('',#47631,#11233); #7700=LINE('',#47633,#11234); #7701=LINE('',#47656,#11235); #7702=LINE('',#47670,#11236); #7703=LINE('',#47691,#11237); #7704=LINE('',#47722,#11238); #7705=LINE('',#47726,#11239); #7706=LINE('',#47727,#11240); #7707=LINE('',#47731,#11241); #7708=LINE('',#47733,#11242); #7709=LINE('',#47735,#11243); #7710=LINE('',#47739,#11244); #7711=LINE('',#47743,#11245); #7712=LINE('',#47745,#11246); #7713=LINE('',#47749,#11247); #7714=LINE('',#47753,#11248); #7715=LINE('',#47755,#11249); #7716=LINE('',#47757,#11250); #7717=LINE('',#47780,#11251); #7718=LINE('',#47794,#11252); #7719=LINE('',#47815,#11253); #7720=LINE('',#47846,#11254); #7721=LINE('',#47859,#11255); #7722=LINE('',#47890,#11256); #7723=LINE('',#47903,#11257); #7724=LINE('',#47934,#11258); #7725=LINE('',#47938,#11259); #7726=LINE('',#47939,#11260); #7727=LINE('',#47943,#11261); #7728=LINE('',#47945,#11262); #7729=LINE('',#47947,#11263); #7730=LINE('',#47951,#11264); #7731=LINE('',#47955,#11265); #7732=LINE('',#47957,#11266); #7733=LINE('',#47961,#11267); #7734=LINE('',#47965,#11268); #7735=LINE('',#47967,#11269); #7736=LINE('',#47969,#11270); #7737=LINE('',#47992,#11271); #7738=LINE('',#48006,#11272); #7739=LINE('',#48027,#11273); #7740=LINE('',#48058,#11274); #7741=LINE('',#48080,#11275); #7742=LINE('',#48094,#11276); #7743=LINE('',#48115,#11277); #7744=LINE('',#48146,#11278); #7745=LINE('',#48168,#11279); #7746=LINE('',#48182,#11280); #7747=LINE('',#48203,#11281); #7748=LINE('',#48234,#11282); #7749=LINE('',#48255,#11283); #7750=LINE('',#48268,#11284); #7751=LINE('',#48289,#11285); #7752=LINE('',#48320,#11286); #7753=LINE('',#48324,#11287); #7754=LINE('',#48328,#11288); #7755=LINE('',#48332,#11289); #7756=LINE('',#48333,#11290); #7757=LINE('',#48337,#11291); #7758=LINE('',#48338,#11292); #7759=LINE('',#48342,#11293); #7760=LINE('',#48346,#11294); #7761=LINE('',#48348,#11295); #7762=LINE('',#48350,#11296); #7763=LINE('',#48353,#11297); #7764=LINE('',#48355,#11298); #7765=LINE('',#48369,#11299); #7766=LINE('',#48400,#11300); #7767=LINE('',#48403,#11301); #7768=LINE('',#48407,#11302); #7769=LINE('',#48408,#11303); #7770=LINE('',#48409,#11304); #7771=LINE('',#48413,#11305); #7772=LINE('',#48416,#11306); #7773=LINE('',#48417,#11307); #7774=LINE('',#48418,#11308); #7775=LINE('',#48420,#11309); #7776=LINE('',#48423,#11310); #7777=LINE('',#48425,#11311); #7778=LINE('',#48429,#11312); #7779=LINE('',#48432,#11313); #7780=LINE('',#48435,#11314); #7781=LINE('',#48437,#11315); #7782=LINE('',#48441,#11316); #7783=LINE('',#48444,#11317); #7784=LINE('',#48458,#11318); #7785=LINE('',#48459,#11319); #7786=LINE('',#48460,#11320); #7787=LINE('',#48461,#11321); #7788=LINE('',#48462,#11322); #7789=LINE('',#48463,#11323); #7790=LINE('',#48464,#11324); #7791=LINE('',#48465,#11325); #7792=LINE('',#48466,#11326); #7793=LINE('',#48467,#11327); #7794=LINE('',#48468,#11328); #7795=LINE('',#48469,#11329); #7796=LINE('',#48470,#11330); #7797=LINE('',#48471,#11331); #7798=LINE('',#48472,#11332); #7799=LINE('',#48473,#11333); #7800=LINE('',#48474,#11334); #7801=LINE('',#48475,#11335); #7802=LINE('',#48476,#11336); #7803=LINE('',#48477,#11337); #7804=LINE('',#48478,#11338); #7805=LINE('',#48479,#11339); #7806=LINE('',#48480,#11340); #7807=LINE('',#48482,#11341); #7808=LINE('',#48483,#11342); #7809=LINE('',#48484,#11343); #7810=LINE('',#48485,#11344); #7811=LINE('',#48486,#11345); #7812=LINE('',#48487,#11346); #7813=LINE('',#48488,#11347); #7814=LINE('',#48489,#11348); #7815=LINE('',#48490,#11349); #7816=LINE('',#48491,#11350); #7817=LINE('',#48492,#11351); #7818=LINE('',#48493,#11352); #7819=LINE('',#48494,#11353); #7820=LINE('',#48495,#11354); #7821=LINE('',#48496,#11355); #7822=LINE('',#48497,#11356); #7823=LINE('',#48498,#11357); #7824=LINE('',#48499,#11358); #7825=LINE('',#48500,#11359); #7826=LINE('',#48501,#11360); #7827=LINE('',#48502,#11361); #7828=LINE('',#48503,#11362); #7829=LINE('',#48504,#11363); #7830=LINE('',#48507,#11364); #7831=LINE('',#48509,#11365); #7832=LINE('',#48511,#11366); #7833=LINE('',#48513,#11367); #7834=LINE('',#48515,#11368); #7835=LINE('',#48517,#11369); #7836=LINE('',#48519,#11370); #7837=LINE('',#48521,#11371); #7838=LINE('',#48523,#11372); #7839=LINE('',#48525,#11373); #7840=LINE('',#48527,#11374); #7841=LINE('',#48529,#11375); #7842=LINE('',#48531,#11376); #7843=LINE('',#48533,#11377); #7844=LINE('',#48535,#11378); #7845=LINE('',#48537,#11379); #7846=LINE('',#48539,#11380); #7847=LINE('',#48541,#11381); #7848=LINE('',#48543,#11382); #7849=LINE('',#48545,#11383); #7850=LINE('',#48547,#11384); #7851=LINE('',#48549,#11385); #7852=LINE('',#48551,#11386); #7853=LINE('',#48553,#11387); #7854=LINE('',#48555,#11388); #7855=LINE('',#48557,#11389); #7856=LINE('',#48559,#11390); #7857=LINE('',#48561,#11391); #7858=LINE('',#48563,#11392); #7859=LINE('',#48565,#11393); #7860=LINE('',#48567,#11394); #7861=LINE('',#48569,#11395); #7862=LINE('',#48571,#11396); #7863=LINE('',#48573,#11397); #7864=LINE('',#48575,#11398); #7865=LINE('',#48577,#11399); #7866=LINE('',#48579,#11400); #7867=LINE('',#48581,#11401); #7868=LINE('',#48583,#11402); #7869=LINE('',#48586,#11403); #7870=LINE('',#48589,#11404); #7871=LINE('',#48615,#11405); #7872=LINE('',#48619,#11406); #7873=LINE('',#48623,#11407); #7874=LINE('',#48627,#11408); #7875=LINE('',#48631,#11409); #7876=LINE('',#48635,#11410); #7877=LINE('',#48640,#11411); #7878=LINE('',#48642,#11412); #7879=LINE('',#48644,#11413); #7880=LINE('',#48645,#11414); #7881=LINE('',#48651,#11415); #7882=LINE('',#48655,#11416); #7883=LINE('',#48656,#11417); #7884=LINE('',#48657,#11418); #7885=LINE('',#48663,#11419); #7886=LINE('',#48667,#11420); #7887=LINE('',#48668,#11421); #7888=LINE('',#48669,#11422); #7889=LINE('',#48675,#11423); #7890=LINE('',#48679,#11424); #7891=LINE('',#48680,#11425); #7892=LINE('',#48681,#11426); #7893=LINE('',#48687,#11427); #7894=LINE('',#48691,#11428); #7895=LINE('',#48692,#11429); #7896=LINE('',#48693,#11430); #7897=LINE('',#48699,#11431); #7898=LINE('',#48703,#11432); #7899=LINE('',#48704,#11433); #7900=LINE('',#48705,#11434); #7901=LINE('',#48713,#11435); #7902=LINE('',#48717,#11436); #7903=LINE('',#48721,#11437); #7904=LINE('',#48725,#11438); #7905=LINE('',#48729,#11439); #7906=LINE('',#48733,#11440); #7907=LINE('',#48736,#11441); #7908=LINE('',#48737,#11442); #7909=LINE('',#48739,#11443); #7910=LINE('',#48741,#11444); #7911=LINE('',#48743,#11445); #7912=LINE('',#48745,#11446); #7913=LINE('',#48747,#11447); #7914=LINE('',#48749,#11448); #7915=LINE('',#48751,#11449); #7916=LINE('',#48753,#11450); #7917=LINE('',#48755,#11451); #7918=LINE('',#48757,#11452); #7919=LINE('',#48762,#11453); #7920=LINE('',#48764,#11454); #7921=LINE('',#48768,#11455); #7922=LINE('',#48770,#11456); #7923=LINE('',#48772,#11457); #7924=LINE('',#48775,#11458); #7925=LINE('',#48779,#11459); #7926=LINE('',#48781,#11460); #7927=LINE('',#48783,#11461); #7928=LINE('',#48787,#11462); #7929=LINE('',#48789,#11463); #7930=LINE('',#48791,#11464); #7931=LINE('',#48794,#11465); #7932=LINE('',#48795,#11466); #7933=LINE('',#48797,#11467); #7934=LINE('',#48799,#11468); #7935=LINE('',#48801,#11469); #7936=LINE('',#48803,#11470); #7937=LINE('',#48805,#11471); #7938=LINE('',#48807,#11472); #7939=LINE('',#48812,#11473); #7940=LINE('',#48814,#11474); #7941=LINE('',#48818,#11475); #7942=LINE('',#48820,#11476); #7943=LINE('',#48822,#11477); #7944=LINE('',#48825,#11478); #7945=LINE('',#48829,#11479); #7946=LINE('',#48831,#11480); #7947=LINE('',#48833,#11481); #7948=LINE('',#48837,#11482); #7949=LINE('',#48839,#11483); #7950=LINE('',#48841,#11484); #7951=LINE('',#48844,#11485); #7952=LINE('',#48845,#11486); #7953=LINE('',#48847,#11487); #7954=LINE('',#48849,#11488); #7955=LINE('',#48851,#11489); #7956=LINE('',#48853,#11490); #7957=LINE('',#48855,#11491); #7958=LINE('',#48857,#11492); #7959=LINE('',#48862,#11493); #7960=LINE('',#48864,#11494); #7961=LINE('',#48868,#11495); #7962=LINE('',#48870,#11496); #7963=LINE('',#48872,#11497); #7964=LINE('',#48875,#11498); #7965=LINE('',#48879,#11499); #7966=LINE('',#48881,#11500); #7967=LINE('',#48883,#11501); #7968=LINE('',#48887,#11502); #7969=LINE('',#48889,#11503); #7970=LINE('',#48891,#11504); #7971=LINE('',#48894,#11505); #7972=LINE('',#48895,#11506); #7973=LINE('',#48897,#11507); #7974=LINE('',#48899,#11508); #7975=LINE('',#48901,#11509); #7976=LINE('',#48903,#11510); #7977=LINE('',#48905,#11511); #7978=LINE('',#48907,#11512); #7979=LINE('',#48912,#11513); #7980=LINE('',#48914,#11514); #7981=LINE('',#48918,#11515); #7982=LINE('',#48920,#11516); #7983=LINE('',#48922,#11517); #7984=LINE('',#48925,#11518); #7985=LINE('',#48929,#11519); #7986=LINE('',#48931,#11520); #7987=LINE('',#48933,#11521); #7988=LINE('',#48937,#11522); #7989=LINE('',#48939,#11523); #7990=LINE('',#48941,#11524); #7991=LINE('',#48944,#11525); #7992=LINE('',#48945,#11526); #7993=LINE('',#48947,#11527); #7994=LINE('',#48949,#11528); #7995=LINE('',#48951,#11529); #7996=LINE('',#48953,#11530); #7997=LINE('',#48955,#11531); #7998=LINE('',#48957,#11532); #7999=LINE('',#48964,#11533); #8000=LINE('',#48967,#11534); #8001=LINE('',#48981,#11535); #8002=LINE('',#48982,#11536); #8003=LINE('',#48987,#11537); #8004=LINE('',#48988,#11538); #8005=LINE('',#48989,#11539); #8006=LINE('',#48992,#11540); #8007=LINE('',#48996,#11541); #8008=LINE('',#48997,#11542); #8009=LINE('',#49003,#11543); #8010=LINE('',#49005,#11544); #8011=LINE('',#49007,#11545); #8012=LINE('',#49008,#11546); #8013=LINE('',#49011,#11547); #8014=LINE('',#49013,#11548); #8015=LINE('',#49014,#11549); #8016=LINE('',#49017,#11550); #8017=LINE('',#49018,#11551); #8018=LINE('',#49021,#11552); #8019=LINE('',#49022,#11553); #8020=LINE('',#49024,#11554); #8021=LINE('',#49029,#11555); #8022=LINE('',#49031,#11556); #8023=LINE('',#49033,#11557); #8024=LINE('',#49034,#11558); #8025=LINE('',#49038,#11559); #8026=LINE('',#49040,#11560); #8027=LINE('',#49042,#11561); #8028=LINE('',#49043,#11562); #8029=LINE('',#49045,#11563); #8030=LINE('',#49046,#11564); #8031=LINE('',#49048,#11565); #8032=LINE('',#49050,#11566); #8033=LINE('',#49055,#11567); #8034=LINE('',#49057,#11568); #8035=LINE('',#49059,#11569); #8036=LINE('',#49060,#11570); #8037=LINE('',#49063,#11571); #8038=LINE('',#49065,#11572); #8039=LINE('',#49066,#11573); #8040=LINE('',#49069,#11574); #8041=LINE('',#49071,#11575); #8042=LINE('',#49072,#11576); #8043=LINE('',#49076,#11577); #8044=LINE('',#49078,#11578); #8045=LINE('',#49080,#11579); #8046=LINE('',#49081,#11580); #8047=LINE('',#49084,#11581); #8048=LINE('',#49086,#11582); #8049=LINE('',#49087,#11583); #8050=LINE('',#49088,#11584); #8051=LINE('',#49091,#11585); #8052=LINE('',#49092,#11586); #8053=LINE('',#49095,#11587); #8054=LINE('',#49096,#11588); #8055=LINE('',#49097,#11589); #8056=LINE('',#49099,#11590); #8057=LINE('',#49105,#11591); #8058=LINE('',#49107,#11592); #8059=LINE('',#49109,#11593); #8060=LINE('',#49110,#11594); #8061=LINE('',#49114,#11595); #8062=LINE('',#49115,#11596); #8063=LINE('',#49116,#11597); #8064=LINE('',#49120,#11598); #8065=LINE('',#49121,#11599); #8066=LINE('',#49122,#11600); #8067=LINE('',#49124,#11601); #8068=LINE('',#49128,#11602); #8069=LINE('',#49130,#11603); #8070=LINE('',#49132,#11604); #8071=LINE('',#49133,#11605); #8072=LINE('',#49137,#11606); #8073=LINE('',#49139,#11607); #8074=LINE('',#49141,#11608); #8075=LINE('',#49142,#11609); #8076=LINE('',#49144,#11610); #8077=LINE('',#49145,#11611); #8078=LINE('',#49147,#11612); #8079=LINE('',#49150,#11613); #8080=LINE('',#49152,#11614); #8081=LINE('',#49154,#11615); #8082=LINE('',#49155,#11616); #8083=LINE('',#49157,#11617); #8084=LINE('',#49158,#11618); #8085=LINE('',#49162,#11619); #8086=LINE('',#49164,#11620); #8087=LINE('',#49166,#11621); #8088=LINE('',#49167,#11622); #8089=LINE('',#49169,#11623); #8090=LINE('',#49170,#11624); #8091=LINE('',#49172,#11625); #8092=LINE('',#49174,#11626); #8093=LINE('',#49179,#11627); #8094=LINE('',#49181,#11628); #8095=LINE('',#49183,#11629); #8096=LINE('',#49184,#11630); #8097=LINE('',#49188,#11631); #8098=LINE('',#49190,#11632); #8099=LINE('',#49192,#11633); #8100=LINE('',#49193,#11634); #8101=LINE('',#49195,#11635); #8102=LINE('',#49196,#11636); #8103=LINE('',#49198,#11637); #8104=LINE('',#49200,#11638); #8105=LINE('',#49205,#11639); #8106=LINE('',#49207,#11640); #8107=LINE('',#49209,#11641); #8108=LINE('',#49210,#11642); #8109=LINE('',#49214,#11643); #8110=LINE('',#49216,#11644); #8111=LINE('',#49218,#11645); #8112=LINE('',#49219,#11646); #8113=LINE('',#49221,#11647); #8114=LINE('',#49222,#11648); #8115=LINE('',#49224,#11649); #8116=LINE('',#49226,#11650); #8117=LINE('',#49231,#11651); #8118=LINE('',#49233,#11652); #8119=LINE('',#49235,#11653); #8120=LINE('',#49236,#11654); #8121=LINE('',#49240,#11655); #8122=LINE('',#49242,#11656); #8123=LINE('',#49244,#11657); #8124=LINE('',#49245,#11658); #8125=LINE('',#49247,#11659); #8126=LINE('',#49248,#11660); #8127=LINE('',#49250,#11661); #8128=LINE('',#49252,#11662); #8129=LINE('',#49257,#11663); #8130=LINE('',#49259,#11664); #8131=LINE('',#49261,#11665); #8132=LINE('',#49262,#11666); #8133=LINE('',#49266,#11667); #8134=LINE('',#49268,#11668); #8135=LINE('',#49270,#11669); #8136=LINE('',#49271,#11670); #8137=LINE('',#49273,#11671); #8138=LINE('',#49274,#11672); #8139=LINE('',#49276,#11673); #8140=LINE('',#49278,#11674); #8141=LINE('',#49283,#11675); #8142=LINE('',#49285,#11676); #8143=LINE('',#49287,#11677); #8144=LINE('',#49288,#11678); #8145=LINE('',#49292,#11679); #8146=LINE('',#49294,#11680); #8147=LINE('',#49296,#11681); #8148=LINE('',#49297,#11682); #8149=LINE('',#49299,#11683); #8150=LINE('',#49300,#11684); #8151=LINE('',#49302,#11685); #8152=LINE('',#49304,#11686); #8153=LINE('',#49309,#11687); #8154=LINE('',#49311,#11688); #8155=LINE('',#49313,#11689); #8156=LINE('',#49314,#11690); #8157=LINE('',#49318,#11691); #8158=LINE('',#49320,#11692); #8159=LINE('',#49322,#11693); #8160=LINE('',#49323,#11694); #8161=LINE('',#49325,#11695); #8162=LINE('',#49326,#11696); #8163=LINE('',#49328,#11697); #8164=LINE('',#49330,#11698); #8165=LINE('',#49335,#11699); #8166=LINE('',#49337,#11700); #8167=LINE('',#49339,#11701); #8168=LINE('',#49340,#11702); #8169=LINE('',#49344,#11703); #8170=LINE('',#49346,#11704); #8171=LINE('',#49348,#11705); #8172=LINE('',#49349,#11706); #8173=LINE('',#49351,#11707); #8174=LINE('',#49352,#11708); #8175=LINE('',#49354,#11709); #8176=LINE('',#49356,#11710); #8177=LINE('',#49365,#11711); #8178=LINE('',#49367,#11712); #8179=LINE('',#49369,#11713); #8180=LINE('',#49371,#11714); #8181=LINE('',#49373,#11715); #8182=LINE('',#49375,#11716); #8183=LINE('',#49377,#11717); #8184=LINE('',#49378,#11718); #8185=LINE('',#49382,#11719); #8186=LINE('',#49384,#11720); #8187=LINE('',#49386,#11721); #8188=LINE('',#49388,#11722); #8189=LINE('',#49389,#11723); #8190=LINE('',#49391,#11724); #8191=LINE('',#49393,#11725); #8192=LINE('',#49394,#11726); #8193=LINE('',#49396,#11727); #8194=LINE('',#49397,#11728); #8195=LINE('',#49400,#11729); #8196=LINE('',#49402,#11730); #8197=LINE('',#49404,#11731); #8198=LINE('',#49405,#11732); #8199=LINE('',#49408,#11733); #8200=LINE('',#49410,#11734); #8201=LINE('',#49412,#11735); #8202=LINE('',#49413,#11736); #8203=LINE('',#49416,#11737); #8204=LINE('',#49418,#11738); #8205=LINE('',#49419,#11739); #8206=LINE('',#49423,#11740); #8207=LINE('',#49424,#11741); #8208=LINE('',#49425,#11742); #8209=LINE('',#49428,#11743); #8210=LINE('',#49429,#11744); #8211=LINE('',#49432,#11745); #8212=LINE('',#49433,#11746); #8213=LINE('',#49437,#11747); #8214=LINE('',#49439,#11748); #8215=LINE('',#49441,#11749); #8216=LINE('',#49442,#11750); #8217=LINE('',#49444,#11751); #8218=LINE('',#49448,#11752); #8219=LINE('',#49450,#11753); #8220=LINE('',#49451,#11754); #8221=LINE('',#49453,#11755); #8222=LINE('',#49454,#11756); #8223=LINE('',#49456,#11757); #8224=LINE('',#49458,#11758); #8225=LINE('',#49463,#11759); #8226=LINE('',#49464,#11760); #8227=LINE('',#49465,#11761); #8228=LINE('',#49469,#11762); #8229=LINE('',#49471,#11763); #8230=LINE('',#49473,#11764); #8231=LINE('',#49475,#11765); #8232=LINE('',#49476,#11766); #8233=LINE('',#49478,#11767); #8234=LINE('',#49480,#11768); #8235=LINE('',#49482,#11769); #8236=LINE('',#49484,#11770); #8237=LINE('',#49486,#11771); #8238=LINE('',#49488,#11772); #8239=LINE('',#49490,#11773); #8240=LINE('',#49492,#11774); #8241=LINE('',#49494,#11775); #8242=LINE('',#49496,#11776); #8243=LINE('',#49502,#11777); #8244=LINE('',#49506,#11778); #8245=LINE('',#49510,#11779); #8246=LINE('',#49514,#11780); #8247=LINE('',#49518,#11781); #8248=LINE('',#49521,#11782); #8249=LINE('',#49524,#11783); #8250=LINE('',#49526,#11784); #8251=LINE('',#49528,#11785); #8252=LINE('',#49529,#11786); #8253=LINE('',#49532,#11787); #8254=LINE('',#49534,#11788); #8255=LINE('',#49535,#11789); #8256=LINE('',#49538,#11790); #8257=LINE('',#49539,#11791); #8258=LINE('',#49542,#11792); #8259=LINE('',#49543,#11793); #8260=LINE('',#49545,#11794); #8261=LINE('',#49549,#11795); #8262=LINE('',#49551,#11796); #8263=LINE('',#49553,#11797); #8264=LINE('',#49554,#11798); #8265=LINE('',#49556,#11799); #8266=LINE('',#49558,#11800); #8267=LINE('',#49560,#11801); #8268=LINE('',#49561,#11802); #8269=LINE('',#49565,#11803); #8270=LINE('',#49567,#11804); #8271=LINE('',#49569,#11805); #8272=LINE('',#49570,#11806); #8273=LINE('',#49571,#11807); #8274=LINE('',#49573,#11808); #8275=LINE('',#49575,#11809); #8276=LINE('',#49576,#11810); #8277=LINE('',#49579,#11811); #8278=LINE('',#49581,#11812); #8279=LINE('',#49583,#11813); #8280=LINE('',#49585,#11814); #8281=LINE('',#49586,#11815); #8282=LINE('',#49590,#11816); #8283=LINE('',#49591,#11817); #8284=LINE('',#49592,#11818); #8285=LINE('',#49599,#11819); #8286=LINE('',#49601,#11820); #8287=LINE('',#49603,#11821); #8288=LINE('',#49607,#11822); #8289=LINE('',#49611,#11823); #8290=LINE('',#49613,#11824); #8291=LINE('',#49615,#11825); #8292=LINE('',#49617,#11826); #8293=LINE('',#49619,#11827); #8294=LINE('',#49621,#11828); #8295=LINE('',#49623,#11829); #8296=LINE('',#49625,#11830); #8297=LINE('',#49627,#11831); #8298=LINE('',#49629,#11832); #8299=LINE('',#49631,#11833); #8300=LINE('',#49633,#11834); #8301=LINE('',#49634,#11835); #8302=LINE('',#49635,#11836); #8303=LINE('',#49640,#11837); #8304=LINE('',#49644,#11838); #8305=LINE('',#49648,#11839); #8306=LINE('',#49652,#11840); #8307=LINE('',#49656,#11841); #8308=LINE('',#49659,#11842); #8309=LINE('',#49661,#11843); #8310=LINE('',#49662,#11844); #8311=LINE('',#49664,#11845); #8312=LINE('',#49666,#11846); #8313=LINE('',#49668,#11847); #8314=LINE('',#49670,#11848); #8315=LINE('',#49672,#11849); #8316=LINE('',#49695,#11850); #8317=LINE('',#49861,#11851); #8318=LINE('',#50027,#11852); #8319=LINE('',#50054,#11853); #8320=LINE('',#50057,#11854); #8321=LINE('',#50059,#11855); #8322=LINE('',#50060,#11856); #8323=LINE('',#50063,#11857); #8324=LINE('',#50064,#11858); #8325=LINE('',#50067,#11859); #8326=LINE('',#50068,#11860); #8327=LINE('',#50069,#11861); #8328=LINE('',#50087,#11862); #8329=LINE('',#50158,#11863); #8330=LINE('',#50243,#11864); #8331=LINE('',#50252,#11865); #8332=LINE('',#50275,#11866); #8333=LINE('',#50278,#11867); #8334=LINE('',#50280,#11868); #8335=LINE('',#50281,#11869); #8336=LINE('',#50285,#11870); #8337=LINE('',#50292,#11871); #8338=LINE('',#50293,#11872); #8339=LINE('',#50296,#11873); #8340=LINE('',#50298,#11874); #8341=LINE('',#50301,#11875); #8342=LINE('',#50302,#11876); #8343=LINE('',#50309,#11877); #8344=LINE('',#50311,#11878); #8345=LINE('',#50313,#11879); #8346=LINE('',#50315,#11880); #8347=LINE('',#50317,#11881); #8348=LINE('',#50318,#11882); #8349=LINE('',#50321,#11883); #8350=LINE('',#50323,#11884); #8351=LINE('',#50325,#11885); #8352=LINE('',#50327,#11886); #8353=LINE('',#50328,#11887); #8354=LINE('',#50332,#11888); #8355=LINE('',#50334,#11889); #8356=LINE('',#50336,#11890); #8357=LINE('',#50337,#11891); #8358=LINE('',#50339,#11892); #8359=LINE('',#50340,#11893); #8360=LINE('',#50344,#11894); #8361=LINE('',#50346,#11895); #8362=LINE('',#50348,#11896); #8363=LINE('',#50349,#11897); #8364=LINE('',#50350,#11898); #8365=LINE('',#50353,#11899); #8366=LINE('',#50355,#11900); #8367=LINE('',#50357,#11901); #8368=LINE('',#50359,#11902); #8369=LINE('',#50360,#11903); #8370=LINE('',#50362,#11904); #8371=LINE('',#50364,#11905); #8372=LINE('',#50366,#11906); #8373=LINE('',#50368,#11907); #8374=LINE('',#50370,#11908); #8375=LINE('',#50372,#11909); #8376=LINE('',#50374,#11910); #8377=LINE('',#50376,#11911); #8378=LINE('',#50378,#11912); #8379=LINE('',#50380,#11913); #8380=LINE('',#50382,#11914); #8381=LINE('',#50384,#11915); #8382=LINE('',#50386,#11916); #8383=LINE('',#50388,#11917); #8384=LINE('',#50390,#11918); #8385=LINE('',#50392,#11919); #8386=LINE('',#50394,#11920); #8387=LINE('',#50396,#11921); #8388=LINE('',#50398,#11922); #8389=LINE('',#50400,#11923); #8390=LINE('',#50402,#11924); #8391=LINE('',#50404,#11925); #8392=LINE('',#50406,#11926); #8393=LINE('',#50408,#11927); #8394=LINE('',#50410,#11928); #8395=LINE('',#50412,#11929); #8396=LINE('',#50414,#11930); #8397=LINE('',#50416,#11931); #8398=LINE('',#50418,#11932); #8399=LINE('',#50420,#11933); #8400=LINE('',#50422,#11934); #8401=LINE('',#50424,#11935); #8402=LINE('',#50426,#11936); #8403=LINE('',#50428,#11937); #8404=LINE('',#50430,#11938); #8405=LINE('',#50432,#11939); #8406=LINE('',#50434,#11940); #8407=LINE('',#50436,#11941); #8408=LINE('',#50438,#11942); #8409=LINE('',#50440,#11943); #8410=LINE('',#50442,#11944); #8411=LINE('',#50444,#11945); #8412=LINE('',#50446,#11946); #8413=LINE('',#50448,#11947); #8414=LINE('',#50450,#11948); #8415=LINE('',#50452,#11949); #8416=LINE('',#50454,#11950); #8417=LINE('',#50456,#11951); #8418=LINE('',#50458,#11952); #8419=LINE('',#50460,#11953); #8420=LINE('',#50462,#11954); #8421=LINE('',#50464,#11955); #8422=LINE('',#50466,#11956); #8423=LINE('',#50468,#11957); #8424=LINE('',#50470,#11958); #8425=LINE('',#50472,#11959); #8426=LINE('',#50474,#11960); #8427=LINE('',#50476,#11961); #8428=LINE('',#50477,#11962); #8429=LINE('',#50480,#11963); #8430=LINE('',#50481,#11964); #8431=LINE('',#50484,#11965); #8432=LINE('',#50485,#11966); #8433=LINE('',#50488,#11967); #8434=LINE('',#50490,#11968); #8435=LINE('',#50492,#11969); #8436=LINE('',#50493,#11970); #8437=LINE('',#50496,#11971); #8438=LINE('',#50498,#11972); #8439=LINE('',#50500,#11973); #8440=LINE('',#50501,#11974); #8441=LINE('',#50504,#11975); #8442=LINE('',#50506,#11976); #8443=LINE('',#50508,#11977); #8444=LINE('',#50509,#11978); #8445=LINE('',#50512,#11979); #8446=LINE('',#50514,#11980); #8447=LINE('',#50516,#11981); #8448=LINE('',#50517,#11982); #8449=LINE('',#50519,#11983); #8450=LINE('',#50522,#11984); #8451=LINE('',#50524,#11985); #8452=LINE('',#50525,#11986); #8453=LINE('',#50528,#11987); #8454=LINE('',#50529,#11988); #8455=LINE('',#50532,#11989); #8456=LINE('',#50534,#11990); #8457=LINE('',#50536,#11991); #8458=LINE('',#50538,#11992); #8459=LINE('',#50540,#11993); #8460=LINE('',#50541,#11994); #8461=LINE('',#50545,#11995); #8462=LINE('',#50546,#11996); #8463=LINE('',#50547,#11997); #8464=LINE('',#50550,#11998); #8465=LINE('',#50551,#11999); #8466=LINE('',#50554,#12000); #8467=LINE('',#50556,#12001); #8468=LINE('',#50558,#12002); #8469=LINE('',#50559,#12003); #8470=LINE('',#50561,#12004); #8471=LINE('',#50564,#12005); #8472=LINE('',#50565,#12006); #8473=LINE('',#50567,#12007); #8474=LINE('',#50568,#12008); #8475=LINE('',#50571,#12009); #8476=LINE('',#50573,#12010); #8477=LINE('',#50575,#12011); #8478=LINE('',#50576,#12012); #8479=LINE('',#50579,#12013); #8480=LINE('',#50581,#12014); #8481=LINE('',#50582,#12015); #8482=LINE('',#50585,#12016); #8483=LINE('',#50587,#12017); #8484=LINE('',#50589,#12018); #8485=LINE('',#50591,#12019); #8486=LINE('',#50593,#12020); #8487=LINE('',#50595,#12021); #8488=LINE('',#50597,#12022); #8489=LINE('',#50599,#12023); #8490=LINE('',#50600,#12024); #8491=LINE('',#50602,#12025); #8492=LINE('',#50603,#12026); #8493=LINE('',#50605,#12027); #8494=LINE('',#50607,#12028); #8495=LINE('',#50613,#12029); #8496=LINE('',#50617,#12030); #8497=LINE('',#50621,#12031); #8498=LINE('',#50625,#12032); #8499=LINE('',#50629,#12033); #8500=LINE('',#50632,#12034); #8501=LINE('',#50634,#12035); #8502=LINE('',#50636,#12036); #8503=LINE('',#50637,#12037); #8504=LINE('',#50639,#12038); #8505=LINE('',#50641,#12039); #8506=LINE('',#50645,#12040); #8507=LINE('',#50647,#12041); #8508=LINE('',#50648,#12042); #8509=LINE('',#50651,#12043); #8510=LINE('',#50655,#12044); #8511=LINE('',#50657,#12045); #8512=LINE('',#50659,#12046); #8513=LINE('',#50661,#12047); #8514=LINE('',#50663,#12048); #8515=LINE('',#50665,#12049); #8516=LINE('',#50667,#12050); #8517=LINE('',#50669,#12051); #8518=LINE('',#50671,#12052); #8519=LINE('',#50673,#12053); #8520=LINE('',#50675,#12054); #8521=LINE('',#50676,#12055); #8522=LINE('',#50680,#12056); #8523=LINE('',#50684,#12057); #8524=LINE('',#50686,#12058); #8525=LINE('',#50688,#12059); #8526=LINE('',#50696,#12060); #8527=LINE('',#50700,#12061); #8528=LINE('',#50704,#12062); #8529=LINE('',#50708,#12063); #8530=LINE('',#50710,#12064); #8531=LINE('',#50712,#12065); #8532=LINE('',#50714,#12066); #8533=LINE('',#50716,#12067); #8534=LINE('',#50718,#12068); #8535=LINE('',#50741,#12069); #8536=LINE('',#50911,#12070); #8537=LINE('',#51082,#12071); #8538=LINE('',#51100,#12072); #8539=LINE('',#51103,#12073); #8540=LINE('',#51105,#12074); #8541=LINE('',#51106,#12075); #8542=LINE('',#51109,#12076); #8543=LINE('',#51110,#12077); #8544=LINE('',#51112,#12078); #8545=LINE('',#51114,#12079); #8546=LINE('',#51115,#12080); #8547=LINE('',#51133,#12081); #8548=LINE('',#51143,#12082); #8549=LINE('',#51167,#12083); #8550=LINE('',#51237,#12084); #8551=LINE('',#51321,#12085); #8552=LINE('',#51325,#12086); #8553=LINE('',#51326,#12087); #8554=LINE('',#51327,#12088); #8555=LINE('',#51331,#12089); #8556=LINE('',#51338,#12090); #8557=LINE('',#51339,#12091); #8558=LINE('',#51342,#12092); #8559=LINE('',#51344,#12093); #8560=LINE('',#51347,#12094); #8561=LINE('',#51348,#12095); #8562=LINE('',#51354,#12096); #8563=LINE('',#51359,#12097); #8564=LINE('',#51361,#12098); #8565=LINE('',#51365,#12099); #8566=LINE('',#51366,#12100); #8567=LINE('',#51369,#12101); #8568=LINE('',#51372,#12102); #8569=LINE('',#51376,#12103); #8570=LINE('',#51379,#12104); #8571=LINE('',#51381,#12105); #8572=LINE('',#51383,#12106); #8573=LINE('',#51385,#12107); #8574=LINE('',#51389,#12108); #8575=LINE('',#51393,#12109); #8576=LINE('',#51394,#12110); #8577=LINE('',#51395,#12111); #8578=LINE('',#51399,#12112); #8579=LINE('',#51404,#12113); #8580=LINE('',#51406,#12114); #8581=LINE('',#51409,#12115); #8582=LINE('',#51411,#12116); #8583=LINE('',#51412,#12117); #8584=LINE('',#51416,#12118); #8585=LINE('',#51418,#12119); #8586=LINE('',#51422,#12120); #8587=LINE('',#51424,#12121); #8588=LINE('',#51426,#12122); #8589=LINE('',#51427,#12123); #8590=LINE('',#51428,#12124); #8591=LINE('',#51430,#12125); #8592=LINE('',#51432,#12126); #8593=LINE('',#51434,#12127); #8594=LINE('',#51436,#12128); #8595=LINE('',#51438,#12129); #8596=LINE('',#51440,#12130); #8597=LINE('',#51442,#12131); #8598=LINE('',#51444,#12132); #8599=LINE('',#51445,#12133); #8600=LINE('',#51446,#12134); #8601=LINE('',#51447,#12135); #8602=LINE('',#51452,#12136); #8603=LINE('',#51456,#12137); #8604=LINE('',#51458,#12138); #8605=LINE('',#51460,#12139); #8606=LINE('',#51464,#12140); #8607=LINE('',#51468,#12141); #8608=LINE('',#51472,#12142); #8609=LINE('',#51475,#12143); #8610=LINE('',#51480,#12144); #8611=LINE('',#51484,#12145); #8612=LINE('',#51486,#12146); #8613=LINE('',#51488,#12147); #8614=LINE('',#51492,#12148); #8615=LINE('',#51496,#12149); #8616=LINE('',#51500,#12150); #8617=LINE('',#51503,#12151); #8618=LINE('',#51507,#12152); #8619=LINE('',#51511,#12153); #8620=LINE('',#51516,#12154); #8621=LINE('',#51520,#12155); #8622=LINE('',#51521,#12156); #8623=LINE('',#51525,#12157); #8624=LINE('',#51529,#12158); #8625=LINE('',#51534,#12159); #8626=LINE('',#51538,#12160); #8627=LINE('',#51539,#12161); #8628=LINE('',#51543,#12162); #8629=LINE('',#51548,#12163); #8630=LINE('',#51549,#12164); #8631=LINE('',#51554,#12165); #8632=LINE('',#51559,#12166); #8633=LINE('',#51562,#12167); #8634=LINE('',#51566,#12168); #8635=LINE('',#51568,#12169); #8636=LINE('',#51572,#12170); #8637=LINE('',#51577,#12171); #8638=LINE('',#51580,#12172); #8639=LINE('',#51582,#12173); #8640=LINE('',#51584,#12174); #8641=LINE('',#51586,#12175); #8642=LINE('',#51589,#12176); #8643=LINE('',#51591,#12177); #8644=LINE('',#51597,#12178); #8645=LINE('',#51599,#12179); #8646=LINE('',#51601,#12180); #8647=LINE('',#51604,#12181); #8648=LINE('',#51606,#12182); #8649=LINE('',#51608,#12183); #8650=LINE('',#51613,#12184); #8651=LINE('',#51614,#12185); #8652=LINE('',#51615,#12186); #8653=LINE('',#51618,#12187); #8654=LINE('',#51621,#12188); #8655=LINE('',#51623,#12189); #8656=LINE('',#51625,#12190); #8657=LINE('',#51627,#12191); #8658=LINE('',#51629,#12192); #8659=LINE('',#51630,#12193); #8660=LINE('',#51633,#12194); #8661=LINE('',#51637,#12195); #8662=LINE('',#51641,#12196); #8663=LINE('',#51645,#12197); #8664=LINE('',#51647,#12198); #8665=LINE('',#51649,#12199); #8666=LINE('',#51653,#12200); #8667=LINE('',#51657,#12201); #8668=LINE('',#51660,#12202); #8669=LINE('',#51664,#12203); #8670=LINE('',#51668,#12204); #8671=LINE('',#51672,#12205); #8672=LINE('',#51674,#12206); #8673=LINE('',#51676,#12207); #8674=LINE('',#51680,#12208); #8675=LINE('',#51683,#12209); #8676=LINE('',#51685,#12210); #8677=LINE('',#51687,#12211); #8678=LINE('',#51689,#12212); #8679=LINE('',#51691,#12213); #8680=LINE('',#51692,#12214); #8681=LINE('',#51694,#12215); #8682=LINE('',#51697,#12216); #8683=LINE('',#51701,#12217); #8684=LINE('',#51705,#12218); #8685=LINE('',#51710,#12219); #8686=LINE('',#51714,#12220); #8687=LINE('',#51715,#12221); #8688=LINE('',#51720,#12222); #8689=LINE('',#51724,#12223); #8690=LINE('',#51728,#12224); #8691=LINE('',#51729,#12225); #8692=LINE('',#51733,#12226); #8693=LINE('',#51736,#12227); #8694=LINE('',#51737,#12228); #8695=LINE('',#51742,#12229); #8696=LINE('',#51744,#12230); #8697=LINE('',#51748,#12231); #8698=LINE('',#51750,#12232); #8699=LINE('',#51753,#12233); #8700=LINE('',#51756,#12234); #8701=LINE('',#51757,#12235); #8702=LINE('',#51760,#12236); #8703=LINE('',#51762,#12237); #8704=LINE('',#51766,#12238); #8705=LINE('',#51767,#12239); #8706=LINE('',#51769,#12240); #8707=LINE('',#51771,#12241); #8708=LINE('',#51773,#12242); #8709=LINE('',#51775,#12243); #8710=LINE('',#51777,#12244); #8711=LINE('',#51778,#12245); #8712=LINE('',#51780,#12246); #8713=LINE('',#51784,#12247); #8714=LINE('',#51788,#12248); #8715=LINE('',#51793,#12249); #8716=LINE('',#51797,#12250); #8717=LINE('',#51798,#12251); #8718=LINE('',#51803,#12252); #8719=LINE('',#51808,#12253); #8720=LINE('',#51809,#12254); #8721=LINE('',#51811,#12255); #8722=LINE('',#51815,#12256); #8723=LINE('',#51817,#12257); #8724=LINE('',#51820,#12258); #8725=LINE('',#51822,#12259); #8726=LINE('',#51823,#12260); #8727=LINE('',#51828,#12261); #8728=LINE('',#51830,#12262); #8729=LINE('',#51834,#12263); #8730=LINE('',#51837,#12264); #8731=LINE('',#51839,#12265); #8732=LINE('',#51843,#12266); #8733=LINE('',#51845,#12267); #8734=LINE('',#51849,#12268); #8735=LINE('',#51851,#12269); #8736=LINE('',#51859,#12270); #8737=LINE('',#51864,#12271); #8738=LINE('',#51866,#12272); #8739=LINE('',#51868,#12273); #8740=LINE('',#51874,#12274); #8741=LINE('',#51876,#12275); #8742=LINE('',#51880,#12276); #8743=LINE('',#51882,#12277); #8744=LINE('',#51884,#12278); #8745=LINE('',#51888,#12279); #8746=LINE('',#51893,#12280); #8747=LINE('',#51897,#12281); #8748=LINE('',#51901,#12282); #8749=LINE('',#51902,#12283); #8750=LINE('',#51908,#12284); #8751=LINE('',#51912,#12285); #8752=LINE('',#51913,#12286); #8753=LINE('',#51914,#12287); #8754=LINE('',#51916,#12288); #8755=LINE('',#51917,#12289); #8756=LINE('',#51920,#12290); #8757=LINE('',#51923,#12291); #8758=LINE('',#51926,#12292); #8759=LINE('',#51927,#12293); #8760=LINE('',#51932,#12294); #8761=LINE('',#51933,#12295); #8762=LINE('',#51940,#12296); #8763=LINE('',#51942,#12297); #8764=LINE('',#51949,#12298); #8765=LINE('',#51950,#12299); #8766=LINE('',#51960,#12300); #8767=LINE('',#51964,#12301); #8768=LINE('',#51966,#12302); #8769=LINE('',#51968,#12303); #8770=LINE('',#51972,#12304); #8771=LINE('',#51976,#12305); #8772=LINE('',#51980,#12306); #8773=LINE('',#51983,#12307); #8774=LINE('',#51988,#12308); #8775=LINE('',#51992,#12309); #8776=LINE('',#51996,#12310); #8777=LINE('',#51998,#12311); #8778=LINE('',#52000,#12312); #8779=LINE('',#52004,#12313); #8780=LINE('',#52008,#12314); #8781=LINE('',#52011,#12315); #8782=LINE('',#52016,#12316); #8783=LINE('',#52019,#12317); #8784=LINE('',#52024,#12318); #8785=LINE('',#52027,#12319); #8786=LINE('',#52030,#12320); #8787=LINE('',#52032,#12321); #8788=LINE('',#52033,#12322); #8789=LINE('',#52036,#12323); #8790=LINE('',#52040,#12324); #8791=LINE('',#52041,#12325); #8792=LINE('',#52044,#12326); #8793=LINE('',#52048,#12327); #8794=LINE('',#52050,#12328); #8795=LINE('',#52051,#12329); #8796=LINE('',#52054,#12330); #8797=LINE('',#52055,#12331); #8798=LINE('',#52058,#12332); #8799=LINE('',#52063,#12333); #8800=LINE('',#52064,#12334); #8801=LINE('',#52065,#12335); #8802=LINE('',#52070,#12336); #8803=LINE('',#52074,#12337); #8804=LINE('',#52078,#12338); #8805=LINE('',#52080,#12339); #8806=LINE('',#52082,#12340); #8807=LINE('',#52086,#12341); #8808=LINE('',#52090,#12342); #8809=LINE('',#52093,#12343); #8810=LINE('',#52098,#12344); #8811=LINE('',#52101,#12345); #8812=LINE('',#52106,#12346); #8813=LINE('',#52109,#12347); #8814=LINE('',#52113,#12348); #8815=LINE('',#52115,#12349); #8816=LINE('',#52117,#12350); #8817=LINE('',#52121,#12351); #8818=LINE('',#52123,#12352); #8819=LINE('',#52124,#12353); #8820=LINE('',#52128,#12354); #8821=LINE('',#52130,#12355); #8822=LINE('',#52150,#12356); #8823=LINE('',#52220,#12357); #8824=LINE('',#52305,#12358); #8825=LINE('',#52307,#12359); #8826=LINE('',#52310,#12360); #8827=LINE('',#52313,#12361); #8828=LINE('',#52315,#12362); #8829=LINE('',#52316,#12363); #8830=LINE('',#52319,#12364); #8831=LINE('',#52320,#12365); #8832=LINE('',#52323,#12366); #8833=LINE('',#52324,#12367); #8834=LINE('',#52326,#12368); #8835=LINE('',#52351,#12369); #8836=LINE('',#52360,#12370); #8837=LINE('',#52384,#12371); #8838=LINE('',#52392,#12372); #8839=LINE('',#52397,#12373); #8840=LINE('',#52399,#12374); #8841=LINE('',#52402,#12375); #8842=LINE('',#52405,#12376); #8843=LINE('',#52408,#12377); #8844=LINE('',#52410,#12378); #8845=LINE('',#52413,#12379); #8846=LINE('',#52416,#12380); #8847=LINE('',#52418,#12381); #8848=LINE('',#52420,#12382); #8849=LINE('',#52423,#12383); #8850=LINE('',#52424,#12384); #8851=LINE('',#52426,#12385); #8852=LINE('',#52428,#12386); #8853=LINE('',#52430,#12387); #8854=LINE('',#52432,#12388); #8855=LINE('',#52433,#12389); #8856=LINE('',#52435,#12390); #8857=LINE('',#52437,#12391); #8858=LINE('',#52439,#12392); #8859=LINE('',#52442,#12393); #8860=LINE('',#52444,#12394); #8861=LINE('',#52530,#12395); #8862=LINE('',#52534,#12396); #8863=LINE('',#52552,#12397); #8864=LINE('',#52554,#12398); #8865=LINE('',#52623,#12399); #8866=LINE('',#52626,#12400); #8867=LINE('',#52629,#12401); #8868=LINE('',#52631,#12402); #8869=LINE('',#52632,#12403); #8870=LINE('',#52635,#12404); #8871=LINE('',#52636,#12405); #8872=LINE('',#52639,#12406); #8873=LINE('',#52640,#12407); #8874=LINE('',#52642,#12408); #8875=LINE('',#52667,#12409); #8876=LINE('',#52676,#12410); #8877=LINE('',#52700,#12411); #8878=LINE('',#52708,#12412); #8879=LINE('',#52714,#12413); #8880=LINE('',#52717,#12414); #8881=LINE('',#52718,#12415); #8882=LINE('',#52721,#12416); #8883=LINE('',#52723,#12417); #8884=LINE('',#52726,#12418); #8885=LINE('',#52728,#12419); #8886=LINE('',#52731,#12420); #8887=LINE('',#52733,#12421); #8888=LINE('',#52735,#12422); #8889=LINE('',#52739,#12423); #8890=LINE('',#52740,#12424); #8891=LINE('',#52742,#12425); #8892=LINE('',#52744,#12426); #8893=LINE('',#52747,#12427); #8894=LINE('',#52748,#12428); #8895=LINE('',#52750,#12429); #8896=LINE('',#52752,#12430); #8897=LINE('',#52756,#12431); #8898=LINE('',#52757,#12432); #8899=LINE('',#52760,#12433); #8900=LINE('',#52764,#12434); #8901=LINE('',#52766,#12435); #8902=LINE('',#52769,#12436); #8903=LINE('',#52770,#12437); #8904=LINE('',#52779,#12438); #8905=LINE('',#52780,#12439); #8906=LINE('',#52784,#12440); #8907=LINE('',#52786,#12441); #8908=LINE('',#52790,#12442); #8909=LINE('',#52793,#12443); #8910=LINE('',#52794,#12444); #8911=LINE('',#52798,#12445); #8912=LINE('',#52802,#12446); #8913=LINE('',#52806,#12447); #8914=LINE('',#52808,#12448); #8915=LINE('',#52811,#12449); #8916=LINE('',#52814,#12450); #8917=LINE('',#52816,#12451); #8918=LINE('',#52818,#12452); #8919=LINE('',#52819,#12453); #8920=LINE('',#52822,#12454); #8921=LINE('',#52824,#12455); #8922=LINE('',#52826,#12456); #8923=LINE('',#52827,#12457); #8924=LINE('',#52830,#12458); #8925=LINE('',#52832,#12459); #8926=LINE('',#52834,#12460); #8927=LINE('',#52836,#12461); #8928=LINE('',#52838,#12462); #8929=LINE('',#52840,#12463); #8930=LINE('',#52842,#12464); #8931=LINE('',#52844,#12465); #8932=LINE('',#52846,#12466); #8933=LINE('',#52847,#12467); #8934=LINE('',#52849,#12468); #8935=LINE('',#52851,#12469); #8936=LINE('',#52852,#12470); #8937=LINE('',#52855,#12471); #8938=LINE('',#52857,#12472); #8939=LINE('',#52858,#12473); #8940=LINE('',#52861,#12474); #8941=LINE('',#52863,#12475); #8942=LINE('',#52865,#12476); #8943=LINE('',#52867,#12477); #8944=LINE('',#52868,#12478); #8945=LINE('',#52871,#12479); #8946=LINE('',#52872,#12480); #8947=LINE('',#52873,#12481); #8948=LINE('',#52875,#12482); #8949=LINE('',#52876,#12483); #8950=LINE('',#52878,#12484); #8951=LINE('',#52880,#12485); #8952=LINE('',#52884,#12486); #8953=LINE('',#52885,#12487); #8954=LINE('',#52887,#12488); #8955=LINE('',#52890,#12489); #8956=LINE('',#52891,#12490); #8957=LINE('',#52894,#12491); #8958=LINE('',#52896,#12492); #8959=LINE('',#52898,#12493); #8960=LINE('',#52900,#12494); #8961=LINE('',#52902,#12495); #8962=LINE('',#52904,#12496); #8963=LINE('',#52906,#12497); #8964=LINE('',#52908,#12498); #8965=LINE('',#52910,#12499); #8966=LINE('',#52912,#12500); #8967=LINE('',#52914,#12501); #8968=LINE('',#52916,#12502); #8969=LINE('',#52918,#12503); #8970=LINE('',#52920,#12504); #8971=LINE('',#52922,#12505); #8972=LINE('',#52924,#12506); #8973=LINE('',#52926,#12507); #8974=LINE('',#52928,#12508); #8975=LINE('',#52930,#12509); #8976=LINE('',#52931,#12510); #8977=LINE('',#52933,#12511); #8978=LINE('',#52935,#12512); #8979=LINE('',#52937,#12513); #8980=LINE('',#52940,#12514); #8981=LINE('',#52941,#12515); #8982=LINE('',#52945,#12516); #8983=LINE('',#52946,#12517); #8984=LINE('',#52948,#12518); #8985=LINE('',#52950,#12519); #8986=LINE('',#52952,#12520); #8987=LINE('',#52954,#12521); #8988=LINE('',#52956,#12522); #8989=LINE('',#52958,#12523); #8990=LINE('',#52960,#12524); #8991=LINE('',#52962,#12525); #8992=LINE('',#52964,#12526); #8993=LINE('',#52966,#12527); #8994=LINE('',#52968,#12528); #8995=LINE('',#52970,#12529); #8996=LINE('',#52972,#12530); #8997=LINE('',#52974,#12531); #8998=LINE('',#52976,#12532); #8999=LINE('',#52978,#12533); #9000=LINE('',#52980,#12534); #9001=LINE('',#52982,#12535); #9002=LINE('',#52984,#12536); #9003=LINE('',#52986,#12537); #9004=LINE('',#52988,#12538); #9005=LINE('',#52990,#12539); #9006=LINE('',#52992,#12540); #9007=LINE('',#52993,#12541); #9008=LINE('',#52995,#12542); #9009=LINE('',#52996,#12543); #9010=LINE('',#52998,#12544); #9011=LINE('',#53000,#12545); #9012=LINE('',#53002,#12546); #9013=LINE('',#53004,#12547); #9014=LINE('',#53007,#12548); #9015=LINE('',#53008,#12549); #9016=LINE('',#53011,#12550); #9017=LINE('',#53012,#12551); #9018=LINE('',#53014,#12552); #9019=LINE('',#53015,#12553); #9020=LINE('',#53018,#12554); #9021=LINE('',#53020,#12555); #9022=LINE('',#53021,#12556); #9023=LINE('',#53025,#12557); #9024=LINE('',#53026,#12558); #9025=LINE('',#53027,#12559); #9026=LINE('',#53030,#12560); #9027=LINE('',#53032,#12561); #9028=LINE('',#53033,#12562); #9029=LINE('',#53036,#12563); #9030=LINE('',#53038,#12564); #9031=LINE('',#53040,#12565); #9032=LINE('',#53042,#12566); #9033=LINE('',#53043,#12567); #9034=LINE('',#53045,#12568); #9035=LINE('',#53047,#12569); #9036=LINE('',#53048,#12570); #9037=LINE('',#53052,#12571); #9038=LINE('',#53054,#12572); #9039=LINE('',#53058,#12573); #9040=LINE('',#53062,#12574); #9041=LINE('',#53066,#12575); #9042=LINE('',#53069,#12576); #9043=LINE('',#53073,#12577); #9044=LINE('',#53077,#12578); #9045=LINE('',#53081,#12579); #9046=LINE('',#53084,#12580); #9047=LINE('',#53088,#12581); #9048=LINE('',#53090,#12582); #9049=LINE('',#53092,#12583); #9050=LINE('',#53093,#12584); #9051=LINE('',#53095,#12585); #9052=LINE('',#53097,#12586); #9053=LINE('',#53098,#12587); #9054=LINE('',#53102,#12588); #9055=LINE('',#53104,#12589); #9056=LINE('',#53106,#12590); #9057=LINE('',#53107,#12591); #9058=LINE('',#53110,#12592); #9059=LINE('',#53112,#12593); #9060=LINE('',#53114,#12594); #9061=LINE('',#53115,#12595); #9062=LINE('',#53119,#12596); #9063=LINE('',#53121,#12597); #9064=LINE('',#53123,#12598); #9065=LINE('',#53124,#12599); #9066=LINE('',#53127,#12600); #9067=LINE('',#53129,#12601); #9068=LINE('',#53131,#12602); #9069=LINE('',#53132,#12603); #9070=LINE('',#53136,#12604); #9071=LINE('',#53138,#12605); #9072=LINE('',#53140,#12606); #9073=LINE('',#53141,#12607); #9074=LINE('',#53144,#12608); #9075=LINE('',#53146,#12609); #9076=LINE('',#53148,#12610); #9077=LINE('',#53149,#12611); #9078=LINE('',#53152,#12612); #9079=LINE('',#53153,#12613); #9080=LINE('',#53154,#12614); #9081=LINE('',#53155,#12615); #9082=LINE('',#53156,#12616); #9083=LINE('',#53157,#12617); #9084=LINE('',#53158,#12618); #9085=LINE('',#53159,#12619); #9086=LINE('',#53160,#12620); #9087=LINE('',#53162,#12621); #9088=LINE('',#53163,#12622); #9089=LINE('',#53166,#12623); #9090=LINE('',#53168,#12624); #9091=LINE('',#53169,#12625); #9092=LINE('',#53172,#12626); #9093=LINE('',#53174,#12627); #9094=LINE('',#53175,#12628); #9095=LINE('',#53177,#12629); #9096=LINE('',#53180,#12630); #9097=LINE('',#53181,#12631); #9098=LINE('',#53184,#12632); #9099=LINE('',#53185,#12633); #9100=LINE('',#53187,#12634); #9101=LINE('',#53189,#12635); #9102=LINE('',#53192,#12636); #9103=LINE('',#53193,#12637); #9104=LINE('',#53195,#12638); #9105=LINE('',#53197,#12639); #9106=LINE('',#53200,#12640); #9107=LINE('',#53201,#12641); #9108=LINE('',#53203,#12642); #9109=LINE('',#53205,#12643); #9110=LINE('',#53208,#12644); #9111=LINE('',#53209,#12645); #9112=LINE('',#53211,#12646); #9113=LINE('',#53213,#12647); #9114=LINE('',#53216,#12648); #9115=LINE('',#53217,#12649); #9116=LINE('',#53219,#12650); #9117=LINE('',#53221,#12651); #9118=LINE('',#53225,#12652); #9119=LINE('',#53226,#12653); #9120=LINE('',#53230,#12654); #9121=LINE('',#53233,#12655); #9122=LINE('',#53234,#12656); #9123=LINE('',#53238,#12657); #9124=LINE('',#53241,#12658); #9125=LINE('',#53242,#12659); #9126=LINE('',#53246,#12660); #9127=LINE('',#53249,#12661); #9128=LINE('',#53250,#12662); #9129=LINE('',#53254,#12663); #9130=LINE('',#53256,#12664); #9131=LINE('',#53258,#12665); #9132=LINE('',#53260,#12666); #9133=LINE('',#53262,#12667); #9134=LINE('',#53264,#12668); #9135=LINE('',#53265,#12669); #9136=LINE('',#53267,#12670); #9137=LINE('',#53269,#12671); #9138=LINE('',#53271,#12672); #9139=LINE('',#53273,#12673); #9140=LINE('',#53277,#12674); #9141=LINE('',#53281,#12675); #9142=LINE('',#53285,#12676); #9143=LINE('',#53289,#12677); #9144=LINE('',#53292,#12678); #9145=LINE('',#53294,#12679); #9146=LINE('',#53296,#12680); #9147=LINE('',#53298,#12681); #9148=LINE('',#53300,#12682); #9149=LINE('',#53302,#12683); #9150=LINE('',#53304,#12684); #9151=LINE('',#53308,#12685); #9152=LINE('',#53312,#12686); #9153=LINE('',#53316,#12687); #9154=LINE('',#53320,#12688); #9155=LINE('',#53323,#12689); #9156=LINE('',#53325,#12690); #9157=LINE('',#53329,#12691); #9158=LINE('',#53333,#12692); #9159=LINE('',#53337,#12693); #9160=LINE('',#53340,#12694); #9161=LINE('',#53343,#12695); #9162=LINE('',#53344,#12696); #9163=LINE('',#53349,#12697); #9164=LINE('',#53353,#12698); #9165=LINE('',#53357,#12699); #9166=LINE('',#53360,#12700); #9167=LINE('',#53362,#12701); #9168=LINE('',#53366,#12702); #9169=LINE('',#53370,#12703); #9170=LINE('',#53374,#12704); #9171=LINE('',#53377,#12705); #9172=LINE('',#53379,#12706); #9173=LINE('',#53381,#12707); #9174=LINE('',#53383,#12708); #9175=LINE('',#53385,#12709); #9176=LINE('',#53387,#12710); #9177=LINE('',#53389,#12711); #9178=LINE('',#53391,#12712); #9179=LINE('',#53393,#12713); #9180=LINE('',#53397,#12714); #9181=LINE('',#53398,#12715); #9182=LINE('',#53400,#12716); #9183=LINE('',#53402,#12717); #9184=LINE('',#53404,#12718); #9185=LINE('',#53406,#12719); #9186=LINE('',#53408,#12720); #9187=LINE('',#53410,#12721); #9188=LINE('',#53411,#12722); #9189=LINE('',#53415,#12723); #9190=LINE('',#53416,#12724); #9191=LINE('',#53417,#12725); #9192=LINE('',#53420,#12726); #9193=LINE('',#53422,#12727); #9194=LINE('',#53424,#12728); #9195=LINE('',#53426,#12729); #9196=LINE('',#53428,#12730); #9197=LINE('',#53429,#12731); #9198=LINE('',#53430,#12732); #9199=LINE('',#53432,#12733); #9200=LINE('',#53433,#12734); #9201=LINE('',#53435,#12735); #9202=LINE('',#53437,#12736); #9203=LINE('',#53439,#12737); #9204=LINE('',#53440,#12738); #9205=LINE('',#53442,#12739); #9206=LINE('',#53443,#12740); #9207=LINE('',#53445,#12741); #9208=LINE('',#53447,#12742); #9209=LINE('',#53449,#12743); #9210=LINE('',#53451,#12744); #9211=LINE('',#53452,#12745); #9212=LINE('',#53455,#12746); #9213=LINE('',#53456,#12747); #9214=LINE('',#53458,#12748); #9215=LINE('',#53459,#12749); #9216=LINE('',#53462,#12750); #9217=LINE('',#53464,#12751); #9218=LINE('',#53465,#12752); #9219=LINE('',#53469,#12753); #9220=LINE('',#53470,#12754); #9221=LINE('',#53471,#12755); #9222=LINE('',#53474,#12756); #9223=LINE('',#53476,#12757); #9224=LINE('',#53477,#12758); #9225=LINE('',#53480,#12759); #9226=LINE('',#53482,#12760); #9227=LINE('',#53484,#12761); #9228=LINE('',#53486,#12762); #9229=LINE('',#53487,#12763); #9230=LINE('',#53489,#12764); #9231=LINE('',#53491,#12765); #9232=LINE('',#53492,#12766); #9233=LINE('',#53495,#12767); #9234=LINE('',#53499,#12768); #9235=LINE('',#53503,#12769); #9236=LINE('',#53507,#12770); #9237=LINE('',#53510,#12771); #9238=LINE('',#53514,#12772); #9239=LINE('',#53518,#12773); #9240=LINE('',#53522,#12774); #9241=LINE('',#53525,#12775); #9242=LINE('',#53528,#12776); #9243=LINE('',#53529,#12777); #9244=LINE('',#53534,#12778); #9245=LINE('',#53538,#12779); #9246=LINE('',#53542,#12780); #9247=LINE('',#53545,#12781); #9248=LINE('',#53549,#12782); #9249=LINE('',#53553,#12783); #9250=LINE('',#53557,#12784); #9251=LINE('',#53560,#12785); #9252=LINE('',#53562,#12786); #9253=LINE('',#53564,#12787); #9254=LINE('',#53566,#12788); #9255=LINE('',#53568,#12789); #9256=LINE('',#53570,#12790); #9257=LINE('',#53572,#12791); #9258=LINE('',#53574,#12792); #9259=LINE('',#53576,#12793); #9260=LINE('',#53579,#12794); #9261=LINE('',#53581,#12795); #9262=LINE('',#53583,#12796); #9263=LINE('',#53585,#12797); #9264=LINE('',#53586,#12798); #9265=LINE('',#53588,#12799); #9266=LINE('',#53590,#12800); #9267=LINE('',#53592,#12801); #9268=LINE('',#53594,#12802); #9269=LINE('',#53597,#12803); #9270=LINE('',#53599,#12804); #9271=LINE('',#53601,#12805); #9272=LINE('',#53603,#12806); #9273=LINE('',#53605,#12807); #9274=LINE('',#53607,#12808); #9275=LINE('',#53610,#12809); #9276=LINE('',#53611,#12810); #9277=LINE('',#53613,#12811); #9278=LINE('',#53615,#12812); #9279=LINE('',#53617,#12813); #9280=LINE('',#53619,#12814); #9281=LINE('',#53620,#12815); #9282=LINE('',#53623,#12816); #9283=LINE('',#53624,#12817); #9284=LINE('',#53626,#12818); #9285=LINE('',#53627,#12819); #9286=LINE('',#53630,#12820); #9287=LINE('',#53632,#12821); #9288=LINE('',#53633,#12822); #9289=LINE('',#53637,#12823); #9290=LINE('',#53638,#12824); #9291=LINE('',#53639,#12825); #9292=LINE('',#53642,#12826); #9293=LINE('',#53644,#12827); #9294=LINE('',#53645,#12828); #9295=LINE('',#53648,#12829); #9296=LINE('',#53650,#12830); #9297=LINE('',#53652,#12831); #9298=LINE('',#53654,#12832); #9299=LINE('',#53655,#12833); #9300=LINE('',#53657,#12834); #9301=LINE('',#53659,#12835); #9302=LINE('',#53660,#12836); #9303=LINE('',#53663,#12837); #9304=LINE('',#53667,#12838); #9305=LINE('',#53671,#12839); #9306=LINE('',#53675,#12840); #9307=LINE('',#53678,#12841); #9308=LINE('',#53682,#12842); #9309=LINE('',#53686,#12843); #9310=LINE('',#53690,#12844); #9311=LINE('',#53693,#12845); #9312=LINE('',#53696,#12846); #9313=LINE('',#53697,#12847); #9314=LINE('',#53702,#12848); #9315=LINE('',#53706,#12849); #9316=LINE('',#53710,#12850); #9317=LINE('',#53713,#12851); #9318=LINE('',#53717,#12852); #9319=LINE('',#53721,#12853); #9320=LINE('',#53725,#12854); #9321=LINE('',#53728,#12855); #9322=LINE('',#53730,#12856); #9323=LINE('',#53732,#12857); #9324=LINE('',#53734,#12858); #9325=LINE('',#53736,#12859); #9326=LINE('',#53738,#12860); #9327=LINE('',#53740,#12861); #9328=LINE('',#53742,#12862); #9329=LINE('',#53744,#12863); #9330=LINE('',#53747,#12864); #9331=LINE('',#53749,#12865); #9332=LINE('',#53751,#12866); #9333=LINE('',#53753,#12867); #9334=LINE('',#53754,#12868); #9335=LINE('',#53756,#12869); #9336=LINE('',#53758,#12870); #9337=LINE('',#53760,#12871); #9338=LINE('',#53762,#12872); #9339=LINE('',#53765,#12873); #9340=LINE('',#53767,#12874); #9341=LINE('',#53769,#12875); #9342=LINE('',#53771,#12876); #9343=LINE('',#53773,#12877); #9344=LINE('',#53775,#12878); #9345=LINE('',#53778,#12879); #9346=LINE('',#53779,#12880); #9347=LINE('',#53781,#12881); #9348=LINE('',#53786,#12882); #9349=LINE('',#53788,#12883); #9350=LINE('',#53790,#12884); #9351=LINE('',#53792,#12885); #9352=LINE('',#53794,#12886); #9353=LINE('',#53796,#12887); #9354=LINE('',#53799,#12888); #9355=LINE('',#53801,#12889); #9356=LINE('',#53803,#12890); #9357=LINE('',#53805,#12891); #9358=LINE('',#53808,#12892); #9359=LINE('',#53810,#12893); #9360=LINE('',#53812,#12894); #9361=LINE('',#53814,#12895); #9362=LINE('',#53816,#12896); #9363=LINE('',#53818,#12897); #9364=LINE('',#53821,#12898); #9365=LINE('',#53824,#12899); #9366=LINE('',#53827,#12900); #9367=LINE('',#53829,#12901); #9368=LINE('',#53830,#12902); #9369=LINE('',#53832,#12903); #9370=LINE('',#53836,#12904); #9371=LINE('',#53843,#12905); #9372=LINE('',#53844,#12906); #9373=LINE('',#53850,#12907); #9374=LINE('',#53853,#12908); #9375=LINE('',#53854,#12909); #9376=LINE('',#53859,#12910); #9377=LINE('',#53860,#12911); #9378=LINE('',#53861,#12912); #9379=LINE('',#53865,#12913); #9380=LINE('',#53868,#12914); #9381=LINE('',#53872,#12915); #9382=LINE('',#53875,#12916); #9383=LINE('',#53877,#12917); #9384=LINE('',#53879,#12918); #9385=LINE('',#53881,#12919); #9386=LINE('',#53883,#12920); #9387=LINE('',#53887,#12921); #9388=LINE('',#53888,#12922); #9389=LINE('',#53898,#12923); #9390=LINE('',#53900,#12924); #9391=LINE('',#53902,#12925); #9392=LINE('',#53903,#12926); #9393=LINE('',#53907,#12927); #9394=LINE('',#53908,#12928); #9395=LINE('',#53909,#12929); #9396=LINE('',#53912,#12930); #9397=LINE('',#53914,#12931); #9398=LINE('',#53915,#12932); #9399=LINE('',#53918,#12933); #9400=LINE('',#53920,#12934); #9401=LINE('',#53922,#12935); #9402=LINE('',#53924,#12936); #9403=LINE('',#53926,#12937); #9404=LINE('',#53928,#12938); #9405=LINE('',#53930,#12939); #9406=LINE('',#53932,#12940); #9407=LINE('',#53934,#12941); #9408=LINE('',#53936,#12942); #9409=LINE('',#53938,#12943); #9410=LINE('',#53940,#12944); #9411=LINE('',#53942,#12945); #9412=LINE('',#53944,#12946); #9413=LINE('',#53946,#12947); #9414=LINE('',#53948,#12948); #9415=LINE('',#53949,#12949); #9416=LINE('',#53952,#12950); #9417=LINE('',#53954,#12951); #9418=LINE('',#53956,#12952); #9419=LINE('',#53957,#12953); #9420=LINE('',#53960,#12954); #9421=LINE('',#53962,#12955); #9422=LINE('',#53964,#12956); #9423=LINE('',#53965,#12957); #9424=LINE('',#53968,#12958); #9425=LINE('',#53970,#12959); #9426=LINE('',#53972,#12960); #9427=LINE('',#53973,#12961); #9428=LINE('',#53976,#12962); #9429=LINE('',#53978,#12963); #9430=LINE('',#53980,#12964); #9431=LINE('',#53982,#12965); #9432=LINE('',#53984,#12966); #9433=LINE('',#53986,#12967); #9434=LINE('',#53988,#12968); #9435=LINE('',#53990,#12969); #9436=LINE('',#53992,#12970); #9437=LINE('',#53994,#12971); #9438=LINE('',#53996,#12972); #9439=LINE('',#53998,#12973); #9440=LINE('',#54000,#12974); #9441=LINE('',#54002,#12975); #9442=LINE('',#54004,#12976); #9443=LINE('',#54006,#12977); #9444=LINE('',#54007,#12978); #9445=LINE('',#54010,#12979); #9446=LINE('',#54012,#12980); #9447=LINE('',#54014,#12981); #9448=LINE('',#54015,#12982); #9449=LINE('',#54018,#12983); #9450=LINE('',#54020,#12984); #9451=LINE('',#54022,#12985); #9452=LINE('',#54023,#12986); #9453=LINE('',#54026,#12987); #9454=LINE('',#54028,#12988); #9455=LINE('',#54030,#12989); #9456=LINE('',#54031,#12990); #9457=LINE('',#54033,#12991); #9458=LINE('',#54035,#12992); #9459=LINE('',#54037,#12993); #9460=LINE('',#54039,#12994); #9461=LINE('',#54041,#12995); #9462=LINE('',#54043,#12996); #9463=LINE('',#54045,#12997); #9464=LINE('',#54047,#12998); #9465=LINE('',#54049,#12999); #9466=LINE('',#54051,#13000); #9467=LINE('',#54053,#13001); #9468=LINE('',#54055,#13002); #9469=LINE('',#54057,#13003); #9470=LINE('',#54059,#13004); #9471=LINE('',#54061,#13005); #9472=LINE('',#54063,#13006); #9473=LINE('',#54067,#13007); #9474=LINE('',#54069,#13008); #9475=LINE('',#54070,#13009); #9476=LINE('',#54073,#13010); #9477=LINE('',#54074,#13011); #9478=LINE('',#54077,#13012); #9479=LINE('',#54078,#13013); #9480=LINE('',#54080,#13014); #9481=LINE('',#54083,#13015); #9482=LINE('',#54085,#13016); #9483=LINE('',#54086,#13017); #9484=LINE('',#54089,#13018); #9485=LINE('',#54090,#13019); #9486=LINE('',#54093,#13020); #9487=LINE('',#54094,#13021); #9488=LINE('',#54096,#13022); #9489=LINE('',#54099,#13023); #9490=LINE('',#54101,#13024); #9491=LINE('',#54102,#13025); #9492=LINE('',#54105,#13026); #9493=LINE('',#54106,#13027); #9494=LINE('',#54109,#13028); #9495=LINE('',#54110,#13029); #9496=LINE('',#54112,#13030); #9497=LINE('',#54115,#13031); #9498=LINE('',#54117,#13032); #9499=LINE('',#54118,#13033); #9500=LINE('',#54121,#13034); #9501=LINE('',#54122,#13035); #9502=LINE('',#54125,#13036); #9503=LINE('',#54126,#13037); #9504=LINE('',#54128,#13038); #9505=LINE('',#54131,#13039); #9506=LINE('',#54133,#13040); #9507=LINE('',#54134,#13041); #9508=LINE('',#54137,#13042); #9509=LINE('',#54138,#13043); #9510=LINE('',#54141,#13044); #9511=LINE('',#54142,#13045); #9512=LINE('',#54144,#13046); #9513=LINE('',#54147,#13047); #9514=LINE('',#54149,#13048); #9515=LINE('',#54150,#13049); #9516=LINE('',#54153,#13050); #9517=LINE('',#54154,#13051); #9518=LINE('',#54157,#13052); #9519=LINE('',#54158,#13053); #9520=LINE('',#54160,#13054); #9521=LINE('',#54163,#13055); #9522=LINE('',#54165,#13056); #9523=LINE('',#54166,#13057); #9524=LINE('',#54169,#13058); #9525=LINE('',#54170,#13059); #9526=LINE('',#54173,#13060); #9527=LINE('',#54174,#13061); #9528=LINE('',#54176,#13062); #9529=LINE('',#54180,#13063); #9530=LINE('',#54181,#13064); #9531=LINE('',#54182,#13065); #9532=LINE('',#54185,#13066); #9533=LINE('',#54186,#13067); #9534=LINE('',#54189,#13068); #9535=LINE('',#54190,#13069); #9536=LINE('',#54192,#13070); #9537=LINE('',#54196,#13071); #9538=LINE('',#54197,#13072); #9539=LINE('',#54198,#13073); #9540=LINE('',#54201,#13074); #9541=LINE('',#54202,#13075); #9542=LINE('',#54205,#13076); #9543=LINE('',#54206,#13077); #9544=LINE('',#54208,#13078); #9545=LINE('',#54211,#13079); #9546=LINE('',#54213,#13080); #9547=LINE('',#54214,#13081); #9548=LINE('',#54217,#13082); #9549=LINE('',#54218,#13083); #9550=LINE('',#54221,#13084); #9551=LINE('',#54222,#13085); #9552=LINE('',#54224,#13086); #9553=LINE('',#54228,#13087); #9554=LINE('',#54229,#13088); #9555=LINE('',#54230,#13089); #9556=LINE('',#54233,#13090); #9557=LINE('',#54234,#13091); #9558=LINE('',#54237,#13092); #9559=LINE('',#54238,#13093); #9560=LINE('',#54240,#13094); #9561=LINE('',#54244,#13095); #9562=LINE('',#54245,#13096); #9563=LINE('',#54246,#13097); #9564=LINE('',#54249,#13098); #9565=LINE('',#54250,#13099); #9566=LINE('',#54253,#13100); #9567=LINE('',#54254,#13101); #9568=LINE('',#54256,#13102); #9569=LINE('',#54270,#13103); #9570=LINE('',#54274,#13104); #9571=LINE('',#54278,#13105); #9572=LINE('',#54282,#13106); #9573=LINE('',#54287,#13107); #9574=LINE('',#54288,#13108); #9575=LINE('',#54289,#13109); #9576=LINE('',#54292,#13110); #9577=LINE('',#54297,#13111); #9578=LINE('',#54300,#13112); #9579=LINE('',#54301,#13113); #9580=LINE('',#54304,#13114); #9581=LINE('',#54305,#13115); #9582=LINE('',#54308,#13116); #9583=LINE('',#54313,#13117); #9584=LINE('',#54315,#13118); #9585=LINE('',#54321,#13119); #9586=LINE('',#54325,#13120); #9587=LINE('',#54329,#13121); #9588=LINE('',#54332,#13122); #9589=LINE('',#54335,#13123); #9590=LINE('',#54338,#13124); #9591=LINE('',#54341,#13125); #9592=LINE('',#54342,#13126); #9593=LINE('',#54345,#13127); #9594=LINE('',#54349,#13128); #9595=LINE('',#54350,#13129); #9596=LINE('',#54353,#13130); #9597=LINE('',#54357,#13131); #9598=LINE('',#54358,#13132); #9599=LINE('',#54361,#13133); #9600=LINE('',#54364,#13134); #9601=LINE('',#54368,#13135); #9602=LINE('',#54372,#13136); #9603=LINE('',#54376,#13137); #9604=LINE('',#54380,#13138); #9605=LINE('',#54385,#13139); #9606=LINE('',#54386,#13140); #9607=LINE('',#54387,#13141); #9608=LINE('',#54390,#13142); #9609=LINE('',#54395,#13143); #9610=LINE('',#54398,#13144); #9611=LINE('',#54399,#13145); #9612=LINE('',#54402,#13146); #9613=LINE('',#54403,#13147); #9614=LINE('',#54406,#13148); #9615=LINE('',#54411,#13149); #9616=LINE('',#54413,#13150); #9617=LINE('',#54421,#13151); #9618=LINE('',#54425,#13152); #9619=LINE('',#54429,#13153); #9620=LINE('',#54430,#13154); #9621=LINE('',#54434,#13155); #9622=LINE('',#54436,#13156); #9623=LINE('',#54438,#13157); #9624=LINE('',#54439,#13158); #9625=LINE('',#54442,#13159); #9626=LINE('',#54444,#13160); #9627=LINE('',#54445,#13161); #9628=LINE('',#54448,#13162); #9629=LINE('',#54450,#13163); #9630=LINE('',#54451,#13164); #9631=LINE('',#54455,#13165); #9632=LINE('',#54459,#13166); #9633=LINE('',#54463,#13167); #9634=LINE('',#54467,#13168); #9635=LINE('',#54470,#13169); #9636=LINE('',#54472,#13170); #9637=LINE('',#54474,#13171); #9638=LINE('',#54476,#13172); #9639=LINE('',#54480,#13173); #9640=LINE('',#54484,#13174); #9641=LINE('',#54486,#13175); #9642=LINE('',#54488,#13176); #9643=LINE('',#54490,#13177); #9644=LINE('',#54491,#13178); #9645=LINE('',#54494,#13179); #9646=LINE('',#54496,#13180); #9647=LINE('',#54498,#13181); #9648=LINE('',#54500,#13182); #9649=LINE('',#54502,#13183); #9650=LINE('',#54506,#13184); #9651=LINE('',#54510,#13185); #9652=LINE('',#54512,#13186); #9653=LINE('',#54514,#13187); #9654=LINE('',#54515,#13188); #9655=LINE('',#54517,#13189); #9656=LINE('',#54521,#13190); #9657=LINE('',#54524,#13191); #9658=LINE('',#54526,#13192); #9659=LINE('',#54528,#13193); #9660=LINE('',#54530,#13194); #9661=LINE('',#54532,#13195); #9662=LINE('',#54533,#13196); #9663=LINE('',#54537,#13197); #9664=LINE('',#54539,#13198); #9665=LINE('',#54541,#13199); #9666=LINE('',#54542,#13200); #9667=LINE('',#54545,#13201); #9668=LINE('',#54547,#13202); #9669=LINE('',#54548,#13203); #9670=LINE('',#54550,#13204); #9671=LINE('',#54551,#13205); #9672=LINE('',#54555,#13206); #9673=LINE('',#54557,#13207); #9674=LINE('',#54559,#13208); #9675=LINE('',#54560,#13209); #9676=LINE('',#54563,#13210); #9677=LINE('',#54565,#13211); #9678=LINE('',#54566,#13212); #9679=LINE('',#54569,#13213); #9680=LINE('',#54571,#13214); #9681=LINE('',#54572,#13215); #9682=LINE('',#54575,#13216); #9683=LINE('',#54577,#13217); #9684=LINE('',#54578,#13218); #9685=LINE('',#54581,#13219); #9686=LINE('',#54583,#13220); #9687=LINE('',#54584,#13221); #9688=LINE('',#54587,#13222); #9689=LINE('',#54589,#13223); #9690=LINE('',#54590,#13224); #9691=LINE('',#54593,#13225); #9692=LINE('',#54595,#13226); #9693=LINE('',#54596,#13227); #9694=LINE('',#54598,#13228); #9695=LINE('',#54599,#13229); #9696=LINE('',#54619,#13230); #9697=LINE('',#54626,#13231); #9698=LINE('',#54644,#13232); #9699=LINE('',#54667,#13233); #9700=LINE('',#54690,#13234); #9701=LINE('',#54713,#13235); #9702=LINE('',#54736,#13236); #9703=LINE('',#54744,#13237); #9704=LINE('',#54746,#13238); #9705=LINE('',#54747,#13239); #9706=LINE('',#54750,#13240); #9707=LINE('',#54752,#13241); #9708=LINE('',#54753,#13242); #9709=LINE('',#54755,#13243); #9710=LINE('',#54756,#13244); #9711=LINE('',#54775,#13245); #9712=LINE('',#54782,#13246); #9713=LINE('',#54800,#13247); #9714=LINE('',#54823,#13248); #9715=LINE('',#54846,#13249); #9716=LINE('',#54869,#13250); #9717=LINE('',#54892,#13251); #9718=LINE('',#54900,#13252); #9719=LINE('',#54902,#13253); #9720=LINE('',#54903,#13254); #9721=LINE('',#54906,#13255); #9722=LINE('',#54908,#13256); #9723=LINE('',#54909,#13257); #9724=LINE('',#54911,#13258); #9725=LINE('',#54912,#13259); #9726=LINE('',#54916,#13260); #9727=LINE('',#54918,#13261); #9728=LINE('',#54920,#13262); #9729=LINE('',#54921,#13263); #9730=LINE('',#54939,#13264); #9731=LINE('',#54962,#13265); #9732=LINE('',#54985,#13266); #9733=LINE('',#55008,#13267); #9734=LINE('',#55031,#13268); #9735=LINE('',#55054,#13269); #9736=LINE('',#55077,#13270); #9737=LINE('',#55100,#13271); #9738=LINE('',#55123,#13272); #9739=LINE('',#55146,#13273); #9740=LINE('',#55169,#13274); #9741=LINE('',#55192,#13275); #9742=LINE('',#55200,#13276); #9743=LINE('',#55202,#13277); #9744=LINE('',#55203,#13278); #9745=LINE('',#55205,#13279); #9746=LINE('',#55206,#13280); #9747=LINE('',#55213,#13281); #9748=LINE('',#55217,#13282); #9749=LINE('',#55221,#13283); #9750=LINE('',#55224,#13284); #9751=LINE('',#55327,#13285); #9752=LINE('',#55334,#13286); #9753=LINE('',#55346,#13287); #9754=LINE('',#55358,#13288); #9755=LINE('',#55370,#13289); #9756=LINE('',#55397,#13290); #9757=LINE('',#55403,#13291); #9758=LINE('',#55418,#13292); #9759=LINE('',#55437,#13293); #9760=LINE('',#55444,#13294); #9761=LINE('',#55446,#13295); #9762=LINE('',#55447,#13296); #9763=LINE('',#55450,#13297); #9764=LINE('',#55452,#13298); #9765=LINE('',#55453,#13299); #9766=LINE('',#55468,#13300); #9767=LINE('',#55487,#13301); #9768=LINE('',#55506,#13302); #9769=LINE('',#55525,#13303); #9770=LINE('',#55544,#13304); #9771=LINE('',#55551,#13305); #9772=LINE('',#55553,#13306); #9773=LINE('',#55554,#13307); #9774=LINE('',#55557,#13308); #9775=LINE('',#55559,#13309); #9776=LINE('',#55560,#13310); #9777=LINE('',#55575,#13311); #9778=LINE('',#55605,#13312); #9779=LINE('',#55611,#13313); #9780=LINE('',#55621,#13314); #9781=LINE('',#55635,#13315); #9782=LINE('',#55649,#13316); #9783=LINE('',#55663,#13317); #9784=LINE('',#55677,#13318); #9785=LINE('',#55691,#13319); #9786=LINE('',#55705,#13320); #9787=LINE('',#55719,#13321); #9788=LINE('',#55733,#13322); #9789=LINE('',#55747,#13323); #9790=LINE('',#55761,#13324); #9791=LINE('',#55775,#13325); #9792=LINE('',#55789,#13326); #9793=LINE('',#55803,#13327); #9794=LINE('',#55817,#13328); #9795=LINE('',#55831,#13329); #9796=LINE('',#55845,#13330); #9797=LINE('',#55859,#13331); #9798=LINE('',#55892,#13332); #9799=LINE('',#55898,#13333); #9800=LINE('',#55913,#13334); #9801=LINE('',#55932,#13335); #9802=LINE('',#55968,#13336); #9803=LINE('',#55974,#13337); #9804=LINE('',#55989,#13338); #9805=LINE('',#56008,#13339); #9806=LINE('',#56045,#13340); #9807=LINE('',#56051,#13341); #9808=LINE('',#56054,#13342); #9809=LINE('',#56056,#13343); #9810=LINE('',#56057,#13344); #9811=LINE('',#56072,#13345); #9812=LINE('',#56079,#13346); #9813=LINE('',#56081,#13347); #9814=LINE('',#56082,#13348); #9815=LINE('',#56097,#13349); #9816=LINE('',#56104,#13350); #9817=LINE('',#56106,#13351); #9818=LINE('',#56107,#13352); #9819=LINE('',#56122,#13353); #9820=LINE('',#56128,#13354); #9821=LINE('',#56129,#13355); #9822=LINE('',#56145,#13356); #9823=LINE('',#56151,#13357); #9824=LINE('',#56154,#13358); #9825=LINE('',#56156,#13359); #9826=LINE('',#56157,#13360); #9827=LINE('',#56172,#13361); #9828=LINE('',#56179,#13362); #9829=LINE('',#56181,#13363); #9830=LINE('',#56182,#13364); #9831=LINE('',#56197,#13365); #9832=LINE('',#56204,#13366); #9833=LINE('',#56206,#13367); #9834=LINE('',#56207,#13368); #9835=LINE('',#56222,#13369); #9836=LINE('',#56228,#13370); #9837=LINE('',#56229,#13371); #9838=LINE('',#56245,#13372); #9839=LINE('',#56251,#13373); #9840=LINE('',#56254,#13374); #9841=LINE('',#56256,#13375); #9842=LINE('',#56257,#13376); #9843=LINE('',#56272,#13377); #9844=LINE('',#56279,#13378); #9845=LINE('',#56281,#13379); #9846=LINE('',#56282,#13380); #9847=LINE('',#56297,#13381); #9848=LINE('',#56304,#13382); #9849=LINE('',#56306,#13383); #9850=LINE('',#56307,#13384); #9851=LINE('',#56322,#13385); #9852=LINE('',#56328,#13386); #9853=LINE('',#56329,#13387); #9854=LINE('',#56345,#13388); #9855=LINE('',#56351,#13389); #9856=LINE('',#56354,#13390); #9857=LINE('',#56356,#13391); #9858=LINE('',#56357,#13392); #9859=LINE('',#56372,#13393); #9860=LINE('',#56379,#13394); #9861=LINE('',#56381,#13395); #9862=LINE('',#56382,#13396); #9863=LINE('',#56397,#13397); #9864=LINE('',#56404,#13398); #9865=LINE('',#56406,#13399); #9866=LINE('',#56407,#13400); #9867=LINE('',#56422,#13401); #9868=LINE('',#56428,#13402); #9869=LINE('',#56429,#13403); #9870=LINE('',#56445,#13404); #9871=LINE('',#56451,#13405); #9872=LINE('',#56454,#13406); #9873=LINE('',#56456,#13407); #9874=LINE('',#56457,#13408); #9875=LINE('',#56472,#13409); #9876=LINE('',#56479,#13410); #9877=LINE('',#56481,#13411); #9878=LINE('',#56482,#13412); #9879=LINE('',#56497,#13413); #9880=LINE('',#56504,#13414); #9881=LINE('',#56506,#13415); #9882=LINE('',#56507,#13416); #9883=LINE('',#56522,#13417); #9884=LINE('',#56528,#13418); #9885=LINE('',#56529,#13419); #9886=LINE('',#56545,#13420); #9887=LINE('',#56551,#13421); #9888=LINE('',#56554,#13422); #9889=LINE('',#56556,#13423); #9890=LINE('',#56557,#13424); #9891=LINE('',#56572,#13425); #9892=LINE('',#56579,#13426); #9893=LINE('',#56581,#13427); #9894=LINE('',#56582,#13428); #9895=LINE('',#56597,#13429); #9896=LINE('',#56604,#13430); #9897=LINE('',#56606,#13431); #9898=LINE('',#56607,#13432); #9899=LINE('',#56622,#13433); #9900=LINE('',#56628,#13434); #9901=LINE('',#56629,#13435); #9902=LINE('',#56645,#13436); #9903=LINE('',#56651,#13437); #9904=LINE('',#56654,#13438); #9905=LINE('',#56656,#13439); #9906=LINE('',#56657,#13440); #9907=LINE('',#56672,#13441); #9908=LINE('',#56679,#13442); #9909=LINE('',#56681,#13443); #9910=LINE('',#56682,#13444); #9911=LINE('',#56697,#13445); #9912=LINE('',#56704,#13446); #9913=LINE('',#56706,#13447); #9914=LINE('',#56707,#13448); #9915=LINE('',#56722,#13449); #9916=LINE('',#56728,#13450); #9917=LINE('',#56729,#13451); #9918=LINE('',#56745,#13452); #9919=LINE('',#56751,#13453); #9920=LINE('',#56754,#13454); #9921=LINE('',#56756,#13455); #9922=LINE('',#56757,#13456); #9923=LINE('',#56772,#13457); #9924=LINE('',#56779,#13458); #9925=LINE('',#56781,#13459); #9926=LINE('',#56782,#13460); #9927=LINE('',#56797,#13461); #9928=LINE('',#56804,#13462); #9929=LINE('',#56806,#13463); #9930=LINE('',#56807,#13464); #9931=LINE('',#56822,#13465); #9932=LINE('',#56828,#13466); #9933=LINE('',#56829,#13467); #9934=LINE('',#56845,#13468); #9935=LINE('',#56851,#13469); #9936=LINE('',#56854,#13470); #9937=LINE('',#56856,#13471); #9938=LINE('',#56857,#13472); #9939=LINE('',#56872,#13473); #9940=LINE('',#56879,#13474); #9941=LINE('',#56881,#13475); #9942=LINE('',#56882,#13476); #9943=LINE('',#56897,#13477); #9944=LINE('',#56904,#13478); #9945=LINE('',#56906,#13479); #9946=LINE('',#56907,#13480); #9947=LINE('',#56922,#13481); #9948=LINE('',#56928,#13482); #9949=LINE('',#56929,#13483); #9950=LINE('',#56945,#13484); #9951=LINE('',#56951,#13485); #9952=LINE('',#56954,#13486); #9953=LINE('',#56956,#13487); #9954=LINE('',#56957,#13488); #9955=LINE('',#56972,#13489); #9956=LINE('',#56979,#13490); #9957=LINE('',#56981,#13491); #9958=LINE('',#56982,#13492); #9959=LINE('',#56997,#13493); #9960=LINE('',#57004,#13494); #9961=LINE('',#57006,#13495); #9962=LINE('',#57007,#13496); #9963=LINE('',#57022,#13497); #9964=LINE('',#57028,#13498); #9965=LINE('',#57029,#13499); #9966=LINE('',#57045,#13500); #9967=LINE('',#57051,#13501); #9968=LINE('',#57054,#13502); #9969=LINE('',#57056,#13503); #9970=LINE('',#57057,#13504); #9971=LINE('',#57072,#13505); #9972=LINE('',#57079,#13506); #9973=LINE('',#57081,#13507); #9974=LINE('',#57082,#13508); #9975=LINE('',#57097,#13509); #9976=LINE('',#57104,#13510); #9977=LINE('',#57106,#13511); #9978=LINE('',#57107,#13512); #9979=LINE('',#57122,#13513); #9980=LINE('',#57128,#13514); #9981=LINE('',#57129,#13515); #9982=LINE('',#57145,#13516); #9983=LINE('',#57151,#13517); #9984=LINE('',#57154,#13518); #9985=LINE('',#57156,#13519); #9986=LINE('',#57157,#13520); #9987=LINE('',#57172,#13521); #9988=LINE('',#57179,#13522); #9989=LINE('',#57181,#13523); #9990=LINE('',#57182,#13524); #9991=LINE('',#57197,#13525); #9992=LINE('',#57204,#13526); #9993=LINE('',#57206,#13527); #9994=LINE('',#57207,#13528); #9995=LINE('',#57222,#13529); #9996=LINE('',#57228,#13530); #9997=LINE('',#57229,#13531); #9998=LINE('',#57245,#13532); #9999=LINE('',#57251,#13533); #10000=LINE('',#57254,#13534); #10001=LINE('',#57256,#13535); #10002=LINE('',#57257,#13536); #10003=LINE('',#57272,#13537); #10004=LINE('',#57279,#13538); #10005=LINE('',#57281,#13539); #10006=LINE('',#57282,#13540); #10007=LINE('',#57297,#13541); #10008=LINE('',#57304,#13542); #10009=LINE('',#57306,#13543); #10010=LINE('',#57307,#13544); #10011=LINE('',#57322,#13545); #10012=LINE('',#57328,#13546); #10013=LINE('',#57329,#13547); #10014=LINE('',#57345,#13548); #10015=LINE('',#57351,#13549); #10016=LINE('',#57354,#13550); #10017=LINE('',#57356,#13551); #10018=LINE('',#57357,#13552); #10019=LINE('',#57372,#13553); #10020=LINE('',#57379,#13554); #10021=LINE('',#57381,#13555); #10022=LINE('',#57382,#13556); #10023=LINE('',#57397,#13557); #10024=LINE('',#57404,#13558); #10025=LINE('',#57406,#13559); #10026=LINE('',#57407,#13560); #10027=LINE('',#57422,#13561); #10028=LINE('',#57428,#13562); #10029=LINE('',#57429,#13563); #10030=LINE('',#57445,#13564); #10031=LINE('',#57451,#13565); #10032=LINE('',#57454,#13566); #10033=LINE('',#57456,#13567); #10034=LINE('',#57457,#13568); #10035=LINE('',#57472,#13569); #10036=LINE('',#57479,#13570); #10037=LINE('',#57481,#13571); #10038=LINE('',#57482,#13572); #10039=LINE('',#57497,#13573); #10040=LINE('',#57504,#13574); #10041=LINE('',#57506,#13575); #10042=LINE('',#57507,#13576); #10043=LINE('',#57522,#13577); #10044=LINE('',#57528,#13578); #10045=LINE('',#57529,#13579); #10046=LINE('',#57545,#13580); #10047=LINE('',#57551,#13581); #10048=LINE('',#57554,#13582); #10049=LINE('',#57556,#13583); #10050=LINE('',#57557,#13584); #10051=LINE('',#57572,#13585); #10052=LINE('',#57579,#13586); #10053=LINE('',#57581,#13587); #10054=LINE('',#57582,#13588); #10055=LINE('',#57597,#13589); #10056=LINE('',#57604,#13590); #10057=LINE('',#57606,#13591); #10058=LINE('',#57607,#13592); #10059=LINE('',#57622,#13593); #10060=LINE('',#57628,#13594); #10061=LINE('',#57629,#13595); #10062=LINE('',#57645,#13596); #10063=LINE('',#57651,#13597); #10064=LINE('',#57654,#13598); #10065=LINE('',#57656,#13599); #10066=LINE('',#57657,#13600); #10067=LINE('',#57672,#13601); #10068=LINE('',#57679,#13602); #10069=LINE('',#57681,#13603); #10070=LINE('',#57682,#13604); #10071=LINE('',#57697,#13605); #10072=LINE('',#57704,#13606); #10073=LINE('',#57706,#13607); #10074=LINE('',#57707,#13608); #10075=LINE('',#57722,#13609); #10076=LINE('',#57728,#13610); #10077=LINE('',#57729,#13611); #10078=LINE('',#57745,#13612); #10079=LINE('',#57751,#13613); #10080=LINE('',#57754,#13614); #10081=LINE('',#57756,#13615); #10082=LINE('',#57757,#13616); #10083=LINE('',#57772,#13617); #10084=LINE('',#57779,#13618); #10085=LINE('',#57781,#13619); #10086=LINE('',#57782,#13620); #10087=LINE('',#57797,#13621); #10088=LINE('',#57804,#13622); #10089=LINE('',#57806,#13623); #10090=LINE('',#57807,#13624); #10091=LINE('',#57822,#13625); #10092=LINE('',#57828,#13626); #10093=LINE('',#57829,#13627); #10094=LINE('',#57832,#13628); #10095=LINE('',#57834,#13629); #10096=LINE('',#57835,#13630); #10097=LINE('',#57845,#13631); #10098=LINE('',#57859,#13632); #10099=LINE('',#57866,#13633); #10100=LINE('',#57867,#13634); #10101=LINE('',#57877,#13635); #10102=LINE('',#57891,#13636); #10103=LINE('',#57898,#13637); #10104=LINE('',#57899,#13638); #10105=LINE('',#57909,#13639); #10106=LINE('',#57923,#13640); #10107=LINE('',#57930,#13641); #10108=LINE('',#57931,#13642); #10109=LINE('',#57941,#13643); #10110=LINE('',#57955,#13644); #10111=LINE('',#57962,#13645); #10112=LINE('',#57963,#13646); #10113=LINE('',#58002,#13647); #10114=LINE('',#58005,#13648); #10115=LINE('',#58007,#13649); #10116=LINE('',#58008,#13650); #10117=LINE('',#58010,#13651); #10118=LINE('',#58011,#13652); #10119=LINE('',#58017,#13653); #10120=LINE('',#58020,#13654); #10121=LINE('',#58022,#13655); #10122=LINE('',#58023,#13656); #10123=LINE('',#58025,#13657); #10124=LINE('',#58026,#13658); #10125=LINE('',#58028,#13659); #10126=LINE('',#58031,#13660); #10127=LINE('',#58033,#13661); #10128=LINE('',#58036,#13662); #10129=LINE('',#58042,#13663); #10130=LINE('',#58045,#13664); #10131=LINE('',#58047,#13665); #10132=LINE('',#58048,#13666); #10133=LINE('',#58050,#13667); #10134=LINE('',#58051,#13668); #10135=LINE('',#58057,#13669); #10136=LINE('',#58060,#13670); #10137=LINE('',#58062,#13671); #10138=LINE('',#58063,#13672); #10139=LINE('',#58065,#13673); #10140=LINE('',#58067,#13674); #10141=LINE('',#58069,#13675); #10142=LINE('',#58071,#13676); #10143=LINE('',#58073,#13677); #10144=LINE('',#58075,#13678); #10145=LINE('',#58080,#13679); #10146=LINE('',#58082,#13680); #10147=LINE('',#58086,#13681); #10148=LINE('',#58088,#13682); #10149=LINE('',#58089,#13683); #10150=LINE('',#58092,#13684); #10151=LINE('',#58096,#13685); #10152=LINE('',#58097,#13686); #10153=LINE('',#58100,#13687); #10154=LINE('',#58104,#13688); #10155=LINE('',#58106,#13689); #10156=LINE('',#58107,#13690); #10157=LINE('',#58111,#13691); #10158=LINE('',#58112,#13692); #10159=LINE('',#58114,#13693); #10160=LINE('',#58116,#13694); #10161=LINE('',#58118,#13695); #10162=LINE('',#58121,#13696); #10163=LINE('',#58124,#13697); #10164=LINE('',#58125,#13698); #10165=LINE('',#58127,#13699); #10166=LINE('',#58130,#13700); #10167=LINE('',#58139,#13701); #10168=LINE('',#58142,#13702); #10169=LINE('',#58145,#13703); #10170=LINE('',#58147,#13704); #10171=LINE('',#58148,#13705); #10172=LINE('',#58151,#13706); #10173=LINE('',#58152,#13707); #10174=LINE('',#58155,#13708); #10175=LINE('',#58156,#13709); #10176=LINE('',#58158,#13710); #10177=LINE('',#58164,#13711); #10178=LINE('',#58167,#13712); #10179=LINE('',#58170,#13713); #10180=LINE('',#58172,#13714); #10181=LINE('',#58173,#13715); #10182=LINE('',#58176,#13716); #10183=LINE('',#58177,#13717); #10184=LINE('',#58180,#13718); #10185=LINE('',#58181,#13719); #10186=LINE('',#58183,#13720); #10187=LINE('',#58192,#13721); #10188=LINE('',#58203,#13722); #10189=LINE('',#58214,#13723); #10190=LINE('',#58220,#13724); #10191=LINE('',#58222,#13725); #10192=LINE('',#58224,#13726); #10193=LINE('',#58225,#13727); #10194=LINE('',#58229,#13728); #10195=LINE('',#58230,#13729); #10196=LINE('',#58232,#13730); #10197=LINE('',#58233,#13731); #10198=LINE('',#58237,#13732); #10199=LINE('',#58239,#13733); #10200=LINE('',#58240,#13734); #10201=LINE('',#58241,#13735); #10202=LINE('',#58243,#13736); #10203=LINE('',#58244,#13737); #10204=LINE('',#58247,#13738); #10205=LINE('',#58251,#13739); #10206=LINE('',#58255,#13740); #10207=LINE('',#58259,#13741); #10208=LINE('',#58262,#13742); #10209=LINE('',#58265,#13743); #10210=LINE('',#58267,#13744); #10211=LINE('',#58269,#13745); #10212=LINE('',#58270,#13746); #10213=LINE('',#58276,#13747); #10214=LINE('',#58279,#13748); #10215=LINE('',#58290,#13749); #10216=LINE('',#58291,#13750); #10217=LINE('',#58297,#13751); #10218=LINE('',#58302,#13752); #10219=LINE('',#58305,#13753); #10220=LINE('',#58306,#13754); #10221=LINE('',#58309,#13755); #10222=LINE('',#58311,#13756); #10223=LINE('',#58312,#13757); #10224=LINE('',#58317,#13758); #10225=LINE('',#58320,#13759); #10226=LINE('',#58330,#13760); #10227=LINE('',#58336,#13761); #10228=LINE('',#58339,#13762); #10229=LINE('',#58341,#13763); #10230=LINE('',#58342,#13764); #10231=LINE('',#58345,#13765); #10232=LINE('',#58350,#13766); #10233=LINE('',#58352,#13767); #10234=LINE('',#58354,#13768); #10235=LINE('',#58355,#13769); #10236=LINE('',#58358,#13770); #10237=LINE('',#58360,#13771); #10238=LINE('',#58361,#13772); #10239=LINE('',#58364,#13773); #10240=LINE('',#58366,#13774); #10241=LINE('',#58367,#13775); #10242=LINE('',#58369,#13776); #10243=LINE('',#58370,#13777); #10244=LINE('',#58373,#13778); #10245=LINE('',#58375,#13779); #10246=LINE('',#58376,#13780); #10247=LINE('',#58379,#13781); #10248=LINE('',#58380,#13782); #10249=LINE('',#58383,#13783); #10250=LINE('',#58385,#13784); #10251=LINE('',#58386,#13785); #10252=LINE('',#58389,#13786); #10253=LINE('',#58391,#13787); #10254=LINE('',#58393,#13788); #10255=LINE('',#58394,#13789); #10256=LINE('',#58397,#13790); #10257=LINE('',#58399,#13791); #10258=LINE('',#58400,#13792); #10259=LINE('',#58403,#13793); #10260=LINE('',#58404,#13794); #10261=LINE('',#58407,#13795); #10262=LINE('',#58408,#13796); #10263=LINE('',#58410,#13797); #10264=LINE('',#58413,#13798); #10265=LINE('',#58415,#13799); #10266=LINE('',#58416,#13800); #10267=LINE('',#58419,#13801); #10268=LINE('',#58420,#13802); #10269=LINE('',#58423,#13803); #10270=LINE('',#58427,#13804); #10271=LINE('',#58428,#13805); #10272=LINE('',#58433,#13806); #10273=LINE('',#58434,#13807); #10274=LINE('',#58439,#13808); #10275=LINE('',#58440,#13809); #10276=LINE('',#58442,#13810); #10277=LINE('',#58445,#13811); #10278=LINE('',#58446,#13812); #10279=LINE('',#58448,#13813); #10280=LINE('',#58452,#13814); #10281=LINE('',#58454,#13815); #10282=LINE('',#58455,#13816); #10283=LINE('',#58459,#13817); #10284=LINE('',#58461,#13818); #10285=LINE('',#58462,#13819); #10286=LINE('',#58464,#13820); #10287=LINE('',#58465,#13821); #10288=LINE('',#58469,#13822); #10289=LINE('',#58471,#13823); #10290=LINE('',#58472,#13824); #10291=LINE('',#58476,#13825); #10292=LINE('',#58478,#13826); #10293=LINE('',#58479,#13827); #10294=LINE('',#58481,#13828); #10295=LINE('',#58482,#13829); #10296=LINE('',#58486,#13830); #10297=LINE('',#58488,#13831); #10298=LINE('',#58489,#13832); #10299=LINE('',#58493,#13833); #10300=LINE('',#58495,#13834); #10301=LINE('',#58496,#13835); #10302=LINE('',#58498,#13836); #10303=LINE('',#58499,#13837); #10304=LINE('',#58503,#13838); #10305=LINE('',#58505,#13839); #10306=LINE('',#58506,#13840); #10307=LINE('',#58510,#13841); #10308=LINE('',#58512,#13842); #10309=LINE('',#58513,#13843); #10310=LINE('',#58515,#13844); #10311=LINE('',#58516,#13845); #10312=LINE('',#58522,#13846); #10313=LINE('',#58525,#13847); #10314=LINE('',#58532,#13848); #10315=LINE('',#58534,#13849); #10316=LINE('',#58542,#13850); #10317=LINE('',#58550,#13851); #10318=LINE('',#58551,#13852); #10319=LINE('',#58555,#13853); #10320=LINE('',#58559,#13854); #10321=LINE('',#58562,#13855); #10322=LINE('',#58565,#13856); #10323=LINE('',#58568,#13857); #10324=LINE('',#58572,#13858); #10325=LINE('',#58576,#13859); #10326=LINE('',#58577,#13860); #10327=LINE('',#58580,#13861); #10328=LINE('',#58584,#13862); #10329=LINE('',#58588,#13863); #10330=LINE('',#58592,#13864); #10331=LINE('',#58593,#13865); #10332=LINE('',#58595,#13866); #10333=LINE('',#58599,#13867); #10334=LINE('',#58601,#13868); #10335=LINE('',#58603,#13869); #10336=LINE('',#58604,#13870); #10337=LINE('',#58605,#13871); #10338=LINE('',#58607,#13872); #10339=LINE('',#58608,#13873); #10340=LINE('',#58610,#13874); #10341=LINE('',#58613,#13875); #10342=LINE('',#58615,#13876); #10343=LINE('',#58616,#13877); #10344=LINE('',#58618,#13878); #10345=LINE('',#58619,#13879); #10346=LINE('',#58620,#13880); #10347=LINE('',#58623,#13881); #10348=LINE('',#58624,#13882); #10349=LINE('',#58626,#13883); #10350=LINE('',#58627,#13884); #10351=LINE('',#58629,#13885); #10352=LINE('',#58630,#13886); #10353=LINE('',#58632,#13887); #10354=LINE('',#58634,#13888); #10355=LINE('',#58635,#13889); #10356=LINE('',#58637,#13890); #10357=LINE('',#58639,#13891); #10358=LINE('',#58644,#13892); #10359=LINE('',#58650,#13893); #10360=LINE('',#58654,#13894); #10361=LINE('',#58658,#13895); #10362=LINE('',#58661,#13896); #10363=LINE('',#58664,#13897); #10364=LINE('',#58668,#13898); #10365=LINE('',#58669,#13899); #10366=LINE('',#58671,#13900); #10367=LINE('',#58672,#13901); #10368=LINE('',#58675,#13902); #10369=LINE('',#58677,#13903); #10370=LINE('',#58681,#13904); #10371=LINE('',#58683,#13905); #10372=LINE('',#58684,#13906); #10373=LINE('',#58686,#13907); #10374=LINE('',#58688,#13908); #10375=LINE('',#58691,#13909); #10376=VECTOR('',#36444,1.); #10377=VECTOR('',#36447,1.); #10378=VECTOR('',#36452,1.); #10379=VECTOR('',#36453,1.); #10380=VECTOR('',#36454,1.); #10381=VECTOR('',#36457,1.); #10382=VECTOR('',#36458,1.); #10383=VECTOR('',#36459,1.); #10384=VECTOR('',#36462,1.); #10385=VECTOR('',#36463,1.); #10386=VECTOR('',#36466,1.); #10387=VECTOR('',#36469,1.); #10388=VECTOR('',#36470,1.); #10389=VECTOR('',#36471,1.); #10390=VECTOR('',#36476,1.); #10391=VECTOR('',#36479,1.); #10392=VECTOR('',#36480,1.); #10393=VECTOR('',#36481,1.); #10394=VECTOR('',#36484,1.); #10395=VECTOR('',#36487,1.); #10396=VECTOR('',#36490,1.); #10397=VECTOR('',#36491,10.); #10398=VECTOR('',#36492,1.); #10399=VECTOR('',#36493,1.); #10400=VECTOR('',#36494,1.); #10401=VECTOR('',#36495,1.); #10402=VECTOR('',#36496,1.); #10403=VECTOR('',#36497,1.); #10404=VECTOR('',#36498,1.); #10405=VECTOR('',#36499,1.); #10406=VECTOR('',#36500,10.); #10407=VECTOR('',#36503,1.); #10408=VECTOR('',#36506,10.); #10409=VECTOR('',#36507,1.); #10410=VECTOR('',#36510,1.); #10411=VECTOR('',#36511,1.); #10412=VECTOR('',#36512,1.); #10413=VECTOR('',#36513,1.); #10414=VECTOR('',#36516,1.); #10415=VECTOR('',#36519,1.); #10416=VECTOR('',#36522,1.); #10417=VECTOR('',#36525,1.); #10418=VECTOR('',#36528,1.); #10419=VECTOR('',#36533,1.); #10420=VECTOR('',#36534,1.); #10421=VECTOR('',#36537,1.00000000000064); #10422=VECTOR('',#36538,1.); #10423=VECTOR('',#36539,1.00000000000064); #10424=VECTOR('',#36540,1.00000000000064); #10425=VECTOR('',#36541,1.); #10426=VECTOR('',#36542,1.00000000000064); #10427=VECTOR('',#36543,1.); #10428=VECTOR('',#36546,10.); #10429=VECTOR('',#36547,1.00000000000064); #10430=VECTOR('',#36550,1.00000000000064); #10431=VECTOR('',#36551,10.); #10432=VECTOR('',#36554,1.); #10433=VECTOR('',#36555,1.); #10434=VECTOR('',#36556,10.); #10435=VECTOR('',#36559,1.); #10436=VECTOR('',#36560,1.); #10437=VECTOR('',#36561,1.); #10438=VECTOR('',#36564,1.); #10439=VECTOR('',#36565,1.); #10440=VECTOR('',#36566,1.); #10441=VECTOR('',#36569,1.); #10442=VECTOR('',#36570,1.); #10443=VECTOR('',#36571,1.); #10444=VECTOR('',#36574,1.); #10445=VECTOR('',#36575,1.); #10446=VECTOR('',#36576,1.); #10447=VECTOR('',#36579,1.); #10448=VECTOR('',#36580,1.); #10449=VECTOR('',#36581,1.); #10450=VECTOR('',#36584,10.); #10451=VECTOR('',#36585,1.00000000000064); #10452=VECTOR('',#36588,10.); #10453=VECTOR('',#36589,1.); #10454=VECTOR('',#36592,10.); #10455=VECTOR('',#36593,1.); #10456=VECTOR('',#36594,10.); #10457=VECTOR('',#36595,1.); #10458=VECTOR('',#36596,1.); #10459=VECTOR('',#36597,1.); #10460=VECTOR('',#36598,1.); #10461=VECTOR('',#36599,1.); #10462=VECTOR('',#36600,1.); #10463=VECTOR('',#36601,1.); #10464=VECTOR('',#36604,1.); #10465=VECTOR('',#36607,1.); #10466=VECTOR('',#36610,1.); #10467=VECTOR('',#36613,1.); #10468=VECTOR('',#36614,1.); #10469=VECTOR('',#36615,1.); #10470=VECTOR('',#36618,1.); #10471=VECTOR('',#36623,10.); #10472=VECTOR('',#36624,1.); #10473=VECTOR('',#36627,1.); #10474=VECTOR('',#36628,10.); #10475=VECTOR('',#36631,1.00000000000064); #10476=VECTOR('',#36632,10.); #10477=VECTOR('',#36635,1.); #10478=VECTOR('',#36636,1.); #10479=VECTOR('',#36637,1.); #10480=VECTOR('',#36638,1.); #10481=VECTOR('',#36639,1.); #10482=VECTOR('',#36640,1.); #10483=VECTOR('',#36641,1.); #10484=VECTOR('',#36642,1.); #10485=VECTOR('',#36643,1.); #10486=VECTOR('',#36644,10.); #10487=VECTOR('',#36647,1.00000000000064); #10488=VECTOR('',#36650,1.00000000000064); #10489=VECTOR('',#36651,10.); #10490=VECTOR('',#36656,1.); #10491=VECTOR('',#36659,1.); #10492=VECTOR('',#36660,1.); #10493=VECTOR('',#36661,1.); #10494=VECTOR('',#36664,1.); #10495=VECTOR('',#36667,1.); #10496=VECTOR('',#36670,1.); #10497=VECTOR('',#36671,10.); #10498=VECTOR('',#36674,1.); #10499=VECTOR('',#36677,1.); #10500=VECTOR('',#36680,1.); #10501=VECTOR('',#36681,1.); #10502=VECTOR('',#36682,1.); #10503=VECTOR('',#36685,1.); #10504=VECTOR('',#36690,1.); #10505=VECTOR('',#36695,1.); #10506=VECTOR('',#36698,1.); #10507=VECTOR('',#36699,1.); #10508=VECTOR('',#36700,1.); #10509=VECTOR('',#36703,1.); #10510=VECTOR('',#36706,1.); #10511=VECTOR('',#36709,1.); #10512=VECTOR('',#36710,1.); #10513=VECTOR('',#36713,1.); #10514=VECTOR('',#36718,1.); #10515=VECTOR('',#36721,1.); #10516=VECTOR('',#36722,1.); #10517=VECTOR('',#36723,1.); #10518=VECTOR('',#36726,1.); #10519=VECTOR('',#36729,1.); #10520=VECTOR('',#36732,1.); #10521=VECTOR('',#36735,1.); #10522=VECTOR('',#36738,1.); #10523=VECTOR('',#36739,1.); #10524=VECTOR('',#36740,1.); #10525=VECTOR('',#36743,1.); #10526=VECTOR('',#36748,1.); #10527=VECTOR('',#36751,1.); #10528=VECTOR('',#36752,1.); #10529=VECTOR('',#36755,10.); #10530=VECTOR('',#36756,1.00000000000064); #10531=VECTOR('',#36759,10.); #10532=VECTOR('',#36760,1.); #10533=VECTOR('',#36763,10.); #10534=VECTOR('',#36764,1.00000000000064); #10535=VECTOR('',#36767,1.); #10536=VECTOR('',#36768,1.00000000000064); #10537=VECTOR('',#36769,1.); #10538=VECTOR('',#36770,1.00000000000064); #10539=VECTOR('',#36771,1.); #10540=VECTOR('',#36772,1.00000000000064); #10541=VECTOR('',#36777,1.00000000000064); #10542=VECTOR('',#36778,10.); #10543=VECTOR('',#36781,1.); #10544=VECTOR('',#36784,1.); #10545=VECTOR('',#36787,1.); #10546=VECTOR('',#36790,1.); #10547=VECTOR('',#36793,1.); #10548=VECTOR('',#36796,1.); #10549=VECTOR('',#36799,1.); #10550=VECTOR('',#36802,1.); #10551=VECTOR('',#36805,1.); #10552=VECTOR('',#36808,1.); #10553=VECTOR('',#36813,1.); #10554=VECTOR('',#36814,10.); #10555=VECTOR('',#36817,1.00000000000064); #10556=VECTOR('',#36818,10.); #10557=VECTOR('',#36821,1.); #10558=VECTOR('',#36822,1.); #10559=VECTOR('',#36825,1.); #10560=VECTOR('',#36826,1.); #10561=VECTOR('',#36827,10.); #10562=VECTOR('',#36830,1.); #10563=VECTOR('',#36831,1.); #10564=VECTOR('',#36832,1.); #10565=VECTOR('',#36835,1.); #10566=VECTOR('',#36836,1.); #10567=VECTOR('',#36837,1.); #10568=VECTOR('',#36840,1.); #10569=VECTOR('',#36841,1.); #10570=VECTOR('',#36842,1.); #10571=VECTOR('',#36845,1.); #10572=VECTOR('',#36846,1.); #10573=VECTOR('',#36847,1.); #10574=VECTOR('',#36850,1.); #10575=VECTOR('',#36851,1.); #10576=VECTOR('',#36852,1.); #10577=VECTOR('',#36855,1.); #10578=VECTOR('',#36856,1.); #10579=VECTOR('',#36857,1.); #10580=VECTOR('',#36860,1.); #10581=VECTOR('',#36861,1.); #10582=VECTOR('',#36862,1.); #10583=VECTOR('',#36865,1.00000000000064); #10584=VECTOR('',#36868,10.); #10585=VECTOR('',#36871,1.); #10586=VECTOR('',#36874,1.); #10587=VECTOR('',#36877,1.); #10588=VECTOR('',#36880,1.); #10589=VECTOR('',#36883,1.); #10590=VECTOR('',#36886,1.); #10591=VECTOR('',#36889,1.); #10592=VECTOR('',#36894,1.); #10593=VECTOR('',#36897,1.); #10594=VECTOR('',#36900,1.); #10595=VECTOR('',#36903,1.); #10596=VECTOR('',#36906,1.); #10597=VECTOR('',#36909,1.); #10598=VECTOR('',#36912,1.); #10599=VECTOR('',#36917,10.); #10600=VECTOR('',#36918,1.); #10601=VECTOR('',#36921,10.); #10602=VECTOR('',#36924,1.00000000000064); #10603=VECTOR('',#36925,10.); #10604=VECTOR('',#36928,1.); #10605=VECTOR('',#36929,10.); #10606=VECTOR('',#36930,1.); #10607=VECTOR('',#36931,1.); #10608=VECTOR('',#36932,1.); #10609=VECTOR('',#36933,1.); #10610=VECTOR('',#36934,1.); #10611=VECTOR('',#36935,1.); #10612=VECTOR('',#36936,1.); #10613=VECTOR('',#36937,1.); #10614=VECTOR('',#36940,1.00000000000064); #10615=VECTOR('',#36941,10.); #10616=VECTOR('',#36944,1.); #10617=VECTOR('',#36947,0.3); #10618=VECTOR('',#36952,10.); #10619=VECTOR('',#36955,10.); #10620=VECTOR('',#36958,1.); #10621=VECTOR('',#36961,1.); #10622=VECTOR('',#36964,1.); #10623=VECTOR('',#36967,1.); #10624=VECTOR('',#36968,1.); #10625=VECTOR('',#36969,1.); #10626=VECTOR('',#36972,1.); #10627=VECTOR('',#36979,1.); #10628=VECTOR('',#36982,1.); #10629=VECTOR('',#36983,1.); #10630=VECTOR('',#36984,1.); #10631=VECTOR('',#36987,1.); #10632=VECTOR('',#36990,1.); #10633=VECTOR('',#36993,1.); #10634=VECTOR('',#36994,10.); #10635=VECTOR('',#36997,1.); #10636=VECTOR('',#37002,1.); #10637=VECTOR('',#37005,1.); #10638=VECTOR('',#37006,1.); #10639=VECTOR('',#37007,1.); #10640=VECTOR('',#37010,1.); #10641=VECTOR('',#37013,1.); #10642=VECTOR('',#37016,1.); #10643=VECTOR('',#37019,1.); #10644=VECTOR('',#37022,1.); #10645=VECTOR('',#37023,1.); #10646=VECTOR('',#37024,1.); #10647=VECTOR('',#37027,1.); #10648=VECTOR('',#37032,1.); #10649=VECTOR('',#37035,1.); #10650=VECTOR('',#37036,1.); #10651=VECTOR('',#37039,1.); #10652=VECTOR('',#37042,1.); #10653=VECTOR('',#37045,1.); #10654=VECTOR('',#37046,1.); #10655=VECTOR('',#37047,1.); #10656=VECTOR('',#37050,1.); #10657=VECTOR('',#37057,1.); #10658=VECTOR('',#37060,1.); #10659=VECTOR('',#37061,1.); #10660=VECTOR('',#37062,1.); #10661=VECTOR('',#37065,1.); #10662=VECTOR('',#37068,1.); #10663=VECTOR('',#37071,1.); #10664=VECTOR('',#37072,1.); #10665=VECTOR('',#37075,1.); #10666=VECTOR('',#37080,1.); #10667=VECTOR('',#37083,1.); #10668=VECTOR('',#37084,1.); #10669=VECTOR('',#37085,1.); #10670=VECTOR('',#37088,1.); #10671=VECTOR('',#37091,1.); #10672=VECTOR('',#37094,1.); #10673=VECTOR('',#37097,1.); #10674=VECTOR('',#37100,1.); #10675=VECTOR('',#37101,1.); #10676=VECTOR('',#37102,1.); #10677=VECTOR('',#37105,1.); #10678=VECTOR('',#37110,1.); #10679=VECTOR('',#37113,1.); #10680=VECTOR('',#37114,1.); #10681=VECTOR('',#37119,1.); #10682=VECTOR('',#37122,1.); #10683=VECTOR('',#37125,1.); #10684=VECTOR('',#37128,1.); #10685=VECTOR('',#37133,1.); #10686=VECTOR('',#37136,1.); #10687=VECTOR('',#37139,1.); #10688=VECTOR('',#37142,1.); #10689=VECTOR('',#37145,1.); #10690=VECTOR('',#37148,1.); #10691=VECTOR('',#37151,1.); #10692=VECTOR('',#37156,1.); #10693=VECTOR('',#37159,1.); #10694=VECTOR('',#37162,1.); #10695=VECTOR('',#37165,1.); #10696=VECTOR('',#37168,1.); #10697=VECTOR('',#37171,1.); #10698=VECTOR('',#37174,1.); #10699=VECTOR('',#37179,1.); #10700=VECTOR('',#37182,1.); #10701=VECTOR('',#37185,1.); #10702=VECTOR('',#37188,1.); #10703=VECTOR('',#37191,1.); #10704=VECTOR('',#37194,1.); #10705=VECTOR('',#37197,1.); #10706=VECTOR('',#37202,1.); #10707=VECTOR('',#37205,1.); #10708=VECTOR('',#37208,1.); #10709=VECTOR('',#37211,1.); #10710=VECTOR('',#37214,1.); #10711=VECTOR('',#37217,1.); #10712=VECTOR('',#37220,1.); #10713=VECTOR('',#37229,1.); #10714=VECTOR('',#37230,1.); #10715=VECTOR('',#37231,1.); #10716=VECTOR('',#37232,1.); #10717=VECTOR('',#37235,1.); #10718=VECTOR('',#37236,1.); #10719=VECTOR('',#37237,1.); #10720=VECTOR('',#37240,1.); #10721=VECTOR('',#37241,1.); #10722=VECTOR('',#37242,1.); #10723=VECTOR('',#37245,1.); #10724=VECTOR('',#37306,1.); #10725=VECTOR('',#37369,1.35); #10726=VECTOR('',#37372,0.5); #10727=VECTOR('',#37375,1.15); #10728=VECTOR('',#37378,0.5); #10729=VECTOR('',#37381,0.5); #10730=VECTOR('',#37384,0.475); #10731=VECTOR('',#37387,0.475); #10732=VECTOR('',#37390,0.475); #10733=VECTOR('',#37393,1.15); #10734=VECTOR('',#37396,0.475); #10735=VECTOR('',#37399,0.5); #10736=VECTOR('',#37402,1.15); #10737=VECTOR('',#37405,0.5); #10738=VECTOR('',#37408,0.5); #10739=VECTOR('',#37411,0.475); #10740=VECTOR('',#37414,1.35); #10741=VECTOR('',#37417,1.15); #10742=VECTOR('',#37420,0.475); #10743=VECTOR('',#37423,0.475); #10744=VECTOR('',#37426,0.475); #10745=VECTOR('',#37429,0.75); #10746=VECTOR('',#37432,0.9); #10747=VECTOR('',#37435,0.75); #10748=VECTOR('',#37438,0.9); #10749=VECTOR('',#37441,1.35); #10750=VECTOR('',#37444,0.75); #10751=VECTOR('',#37447,0.9); #10752=VECTOR('',#37450,0.75); #10753=VECTOR('',#37453,0.9); #10754=VECTOR('',#37462,1.05); #10755=VECTOR('',#37469,1.05); #10756=VECTOR('',#37476,0.5); #10757=VECTOR('',#37481,1.); #10758=VECTOR('',#37484,1.); #10759=VECTOR('',#37491,1.); #10760=VECTOR('',#37494,1.); #10761=VECTOR('',#37499,1.); #10762=VECTOR('',#37502,1.); #10763=VECTOR('',#37507,1.); #10764=VECTOR('',#37510,1.); #10765=VECTOR('',#37515,1.); #10766=VECTOR('',#37518,1.); #10767=VECTOR('',#37523,0.5); #10768=VECTOR('',#37530,0.5); #10769=VECTOR('',#37537,0.5); #10770=VECTOR('',#37544,0.5); #10771=VECTOR('',#37551,0.5); #10772=VECTOR('',#37558,0.5); #10773=VECTOR('',#37565,0.5); #10774=VECTOR('',#37572,0.5); #10775=VECTOR('',#37579,0.5); #10776=VECTOR('',#37586,0.5); #10777=VECTOR('',#37593,0.5); #10778=VECTOR('',#37600,0.5); #10779=VECTOR('',#37607,1.); #10780=VECTOR('',#37610,1.); #10781=VECTOR('',#37615,1.); #10782=VECTOR('',#37618,1.); #10783=VECTOR('',#37623,1.); #10784=VECTOR('',#37626,1.); #10785=VECTOR('',#37631,1.); #10786=VECTOR('',#37634,1.); #10787=VECTOR('',#37639,1.); #10788=VECTOR('',#37642,1.); #10789=VECTOR('',#37647,1.); #10790=VECTOR('',#37650,1.); #10791=VECTOR('',#37655,1.); #10792=VECTOR('',#37658,1.); #10793=VECTOR('',#37663,1.); #10794=VECTOR('',#37666,1.); #10795=VECTOR('',#37671,1.); #10796=VECTOR('',#37674,1.); #10797=VECTOR('',#37679,1.); #10798=VECTOR('',#37682,1.); #10799=VECTOR('',#37687,1.); #10800=VECTOR('',#37690,1.); #10801=VECTOR('',#37695,1.); #10802=VECTOR('',#37698,1.); #10803=VECTOR('',#37703,1.); #10804=VECTOR('',#37706,1.); #10805=VECTOR('',#37711,1.); #10806=VECTOR('',#37714,1.); #10807=VECTOR('',#37719,1.); #10808=VECTOR('',#37722,1.); #10809=VECTOR('',#37727,0.5); #10810=VECTOR('',#37734,0.5); #10811=VECTOR('',#37741,0.5); #10812=VECTOR('',#37748,0.5); #10813=VECTOR('',#37755,0.5); #10814=VECTOR('',#37762,0.5); #10815=VECTOR('',#37769,0.5); #10816=VECTOR('',#37776,0.5); #10817=VECTOR('',#37783,1.); #10818=VECTOR('',#37786,1.); #10819=VECTOR('',#37789,1.); #10820=VECTOR('',#37790,1.); #10821=VECTOR('',#37791,1.); #10822=VECTOR('',#37796,1.); #10823=VECTOR('',#37799,1.); #10824=VECTOR('',#37804,1.); #10825=VECTOR('',#37807,1.); #10826=VECTOR('',#37810,1.); #10827=VECTOR('',#37811,1.); #10828=VECTOR('',#37812,1.); #10829=VECTOR('',#37815,1.); #10830=VECTOR('',#37816,1.); #10831=VECTOR('',#37817,1.); #10832=VECTOR('',#37820,1.); #10833=VECTOR('',#37821,1.); #10834=VECTOR('',#37822,1.); #10835=VECTOR('',#37825,1.); #10836=VECTOR('',#37826,1.); #10837=VECTOR('',#37827,1.); #10838=VECTOR('',#37830,1.); #10839=VECTOR('',#37831,1.); #10840=VECTOR('',#37832,1.); #10841=VECTOR('',#37835,1.); #10842=VECTOR('',#37836,1.); #10843=VECTOR('',#37837,1.); #10844=VECTOR('',#37840,1.); #10845=VECTOR('',#37841,1.); #10846=VECTOR('',#37842,1.); #10847=VECTOR('',#37845,1.); #10848=VECTOR('',#37846,1.); #10849=VECTOR('',#37847,1.); #10850=VECTOR('',#37850,1.); #10851=VECTOR('',#37851,1.); #10852=VECTOR('',#37852,1.); #10853=VECTOR('',#37855,1.); #10854=VECTOR('',#37856,1.); #10855=VECTOR('',#37857,1.); #10856=VECTOR('',#37860,1.); #10857=VECTOR('',#37861,1.); #10858=VECTOR('',#37862,1.); #10859=VECTOR('',#37865,1.); #10860=VECTOR('',#37866,1.); #10861=VECTOR('',#37867,1.); #10862=VECTOR('',#37870,1.); #10863=VECTOR('',#37871,1.); #10864=VECTOR('',#37872,1.); #10865=VECTOR('',#37875,1.); #10866=VECTOR('',#37876,1.); #10867=VECTOR('',#37877,1.); #10868=VECTOR('',#37880,1.); #10869=VECTOR('',#37881,1.); #10870=VECTOR('',#37882,1.); #10871=VECTOR('',#37885,1.); #10872=VECTOR('',#37886,1.); #10873=VECTOR('',#37887,1.); #10874=VECTOR('',#37890,1.); #10875=VECTOR('',#37891,1.); #10876=VECTOR('',#37892,1.); #10877=VECTOR('',#37895,1.); #10878=VECTOR('',#37896,1.); #10879=VECTOR('',#37897,1.); #10880=VECTOR('',#37900,1.); #10881=VECTOR('',#37901,1.); #10882=VECTOR('',#37902,1.); #10883=VECTOR('',#37905,1.); #10884=VECTOR('',#37906,1.); #10885=VECTOR('',#37907,1.); #10886=VECTOR('',#37910,1.); #10887=VECTOR('',#37911,1.); #10888=VECTOR('',#37912,1.); #10889=VECTOR('',#37917,1.); #10890=VECTOR('',#37920,1.); #10891=VECTOR('',#37923,1.); #10892=VECTOR('',#37928,1.); #10893=VECTOR('',#37931,1.); #10894=VECTOR('',#37934,1.); #10895=VECTOR('',#37937,1.); #10896=VECTOR('',#37938,1.); #10897=VECTOR('',#37939,1.); #10898=VECTOR('',#37940,1.); #10899=VECTOR('',#37941,1.); #10900=VECTOR('',#37944,1.); #10901=VECTOR('',#37949,1.); #10902=VECTOR('',#37952,1.); #10903=VECTOR('',#37955,1.); #10904=VECTOR('',#37956,1.); #10905=VECTOR('',#37957,1.); #10906=VECTOR('',#37958,1.); #10907=VECTOR('',#37963,1.); #10908=VECTOR('',#37966,1.); #10909=VECTOR('',#37969,1.); #10910=VECTOR('',#37974,1.); #10911=VECTOR('',#37977,1.); #10912=VECTOR('',#37980,1.); #10913=VECTOR('',#37985,1.); #10914=VECTOR('',#37988,1.); #10915=VECTOR('',#37991,1.); #10916=VECTOR('',#37996,1.); #10917=VECTOR('',#37999,1.); #10918=VECTOR('',#38002,1.); #10919=VECTOR('',#38005,1.); #10920=VECTOR('',#38008,1.); #10921=VECTOR('',#38011,1.); #10922=VECTOR('',#38012,1.); #10923=VECTOR('',#38013,1.); #10924=VECTOR('',#38014,1.); #10925=VECTOR('',#38017,1.); #10926=VECTOR('',#38018,1.); #10927=VECTOR('',#38019,1.); #10928=VECTOR('',#38020,1.); #10929=VECTOR('',#38021,1.); #10930=VECTOR('',#38024,1.); #10931=VECTOR('',#38031,1.); #10932=VECTOR('',#38034,1.); #10933=VECTOR('',#38037,1.); #10934=VECTOR('',#38042,1.); #10935=VECTOR('',#38045,1.); #10936=VECTOR('',#38048,1.); #10937=VECTOR('',#38053,1.); #10938=VECTOR('',#38056,1.); #10939=VECTOR('',#38059,1.); #10940=VECTOR('',#38064,1.); #10941=VECTOR('',#38067,1.); #10942=VECTOR('',#38070,1.); #10943=VECTOR('',#38075,1.); #10944=VECTOR('',#38078,1.); #10945=VECTOR('',#38081,1.); #10946=VECTOR('',#38086,1.); #10947=VECTOR('',#38089,1.); #10948=VECTOR('',#38092,1.); #10949=VECTOR('',#38097,1.); #10950=VECTOR('',#38100,1.); #10951=VECTOR('',#38103,1.); #10952=VECTOR('',#38108,1.); #10953=VECTOR('',#38111,1.); #10954=VECTOR('',#38114,1.); #10955=VECTOR('',#38117,1.); #10956=VECTOR('',#38120,1.); #10957=VECTOR('',#38123,1.); #10958=VECTOR('',#38124,1.); #10959=VECTOR('',#38125,1.); #10960=VECTOR('',#38126,1.); #10961=VECTOR('',#38129,1.); #10962=VECTOR('',#38130,1.); #10963=VECTOR('',#38131,1.); #10964=VECTOR('',#38132,1.); #10965=VECTOR('',#38133,1.); #10966=VECTOR('',#38136,1.); #10967=VECTOR('',#38143,1.); #10968=VECTOR('',#38146,1.); #10969=VECTOR('',#38149,1.); #10970=VECTOR('',#38154,1.); #10971=VECTOR('',#38157,1.); #10972=VECTOR('',#38160,1.); #10973=VECTOR('',#38165,1.); #10974=VECTOR('',#38168,1.); #10975=VECTOR('',#38171,1.); #10976=VECTOR('',#38176,1.); #10977=VECTOR('',#38179,1.); #10978=VECTOR('',#38182,1.); #10979=VECTOR('',#38187,1.); #10980=VECTOR('',#38190,1.); #10981=VECTOR('',#38193,1.); #10982=VECTOR('',#38198,1.); #10983=VECTOR('',#38201,1.); #10984=VECTOR('',#38204,1.); #10985=VECTOR('',#38209,1.); #10986=VECTOR('',#38212,1.); #10987=VECTOR('',#38215,1.); #10988=VECTOR('',#38220,1.); #10989=VECTOR('',#38223,1.); #10990=VECTOR('',#38226,1.); #10991=VECTOR('',#38231,1.); #10992=VECTOR('',#38234,1.); #10993=VECTOR('',#38237,1.); #10994=VECTOR('',#38242,1.); #10995=VECTOR('',#38245,1.); #10996=VECTOR('',#38248,1.); #10997=VECTOR('',#38253,1.); #10998=VECTOR('',#38256,1.); #10999=VECTOR('',#38259,1.); #11000=VECTOR('',#38264,1.); #11001=VECTOR('',#38267,1.); #11002=VECTOR('',#38270,1.); #11003=VECTOR('',#38275,1.); #11004=VECTOR('',#38278,1.); #11005=VECTOR('',#38281,1.); #11006=VECTOR('',#38286,1.); #11007=VECTOR('',#38289,1.); #11008=VECTOR('',#38292,1.); #11009=VECTOR('',#38297,1.); #11010=VECTOR('',#38300,1.); #11011=VECTOR('',#38303,1.); #11012=VECTOR('',#38308,1.); #11013=VECTOR('',#38311,1.); #11014=VECTOR('',#38314,1.); #11015=VECTOR('',#38317,1.); #11016=VECTOR('',#38318,1.); #11017=VECTOR('',#38319,1.); #11018=VECTOR('',#38320,1.); #11019=VECTOR('',#38321,1.); #11020=VECTOR('',#38324,1.); #11021=VECTOR('',#38329,1.); #11022=VECTOR('',#38332,1.); #11023=VECTOR('',#38335,1.); #11024=VECTOR('',#38336,1.); #11025=VECTOR('',#38337,1.); #11026=VECTOR('',#38338,1.); #11027=VECTOR('',#38343,1.); #11028=VECTOR('',#38346,1.); #11029=VECTOR('',#38349,1.); #11030=VECTOR('',#38354,1.); #11031=VECTOR('',#38357,1.); #11032=VECTOR('',#38360,1.); #11033=VECTOR('',#38363,1.); #11034=VECTOR('',#38364,1.); #11035=VECTOR('',#38365,1.); #11036=VECTOR('',#38370,1.); #11037=VECTOR('',#38373,1.); #11038=VECTOR('',#38374,1.); #11039=VECTOR('',#38377,1.); #11040=VECTOR('',#38378,1.); #11041=VECTOR('',#38379,1.); #11042=VECTOR('',#38380,1.); #11043=VECTOR('',#38399,1.); #11044=VECTOR('',#38400,1.); #11045=VECTOR('',#38403,1.); #11046=VECTOR('',#38404,1.); #11047=VECTOR('',#38405,1.); #11048=VECTOR('',#38408,1.); #11049=VECTOR('',#38409,1.); #11050=VECTOR('',#38410,1.); #11051=VECTOR('',#38413,1.); #11052=VECTOR('',#38414,1.); #11053=VECTOR('',#38415,1.); #11054=VECTOR('',#38418,1.); #11055=VECTOR('',#38419,1.); #11056=VECTOR('',#38420,1.); #11057=VECTOR('',#38423,1.); #11058=VECTOR('',#38424,1.); #11059=VECTOR('',#38425,1.); #11060=VECTOR('',#38428,1.); #11061=VECTOR('',#38429,1.); #11062=VECTOR('',#38430,1.); #11063=VECTOR('',#38433,1.); #11064=VECTOR('',#38434,1.); #11065=VECTOR('',#38435,1.); #11066=VECTOR('',#38438,1.); #11067=VECTOR('',#38439,1.); #11068=VECTOR('',#38440,1.); #11069=VECTOR('',#38443,1.); #11070=VECTOR('',#38444,1.); #11071=VECTOR('',#38445,1.); #11072=VECTOR('',#38448,1.); #11073=VECTOR('',#38449,1.); #11074=VECTOR('',#38450,1.); #11075=VECTOR('',#38453,1.); #11076=VECTOR('',#38454,1.); #11077=VECTOR('',#38455,1.); #11078=VECTOR('',#38458,1.); #11079=VECTOR('',#38459,1.); #11080=VECTOR('',#38460,1.); #11081=VECTOR('',#38463,1.); #11082=VECTOR('',#38464,1.); #11083=VECTOR('',#38465,1.); #11084=VECTOR('',#38468,1.); #11085=VECTOR('',#38469,1.); #11086=VECTOR('',#38470,1.); #11087=VECTOR('',#38473,1.); #11088=VECTOR('',#38474,1.); #11089=VECTOR('',#38475,1.); #11090=VECTOR('',#38478,1.); #11091=VECTOR('',#38479,1.); #11092=VECTOR('',#38480,1.); #11093=VECTOR('',#38483,1.); #11094=VECTOR('',#38484,1.); #11095=VECTOR('',#38485,1.); #11096=VECTOR('',#38488,1.); #11097=VECTOR('',#38489,1.); #11098=VECTOR('',#38490,1.); #11099=VECTOR('',#38493,1.); #11100=VECTOR('',#38494,1.); #11101=VECTOR('',#38495,1.); #11102=VECTOR('',#38540,1.05); #11103=VECTOR('',#38547,1.05); #11104=VECTOR('',#38554,0.5); #11105=VECTOR('',#38561,0.5); #11106=VECTOR('',#38566,1.); #11107=VECTOR('',#38573,1.); #11108=VECTOR('',#38576,1.); #11109=VECTOR('',#38583,0.5); #11110=VECTOR('',#38590,0.5); #11111=VECTOR('',#38597,0.5); #11112=VECTOR('',#38604,0.5); #11113=VECTOR('',#38611,0.5); #11114=VECTOR('',#38618,0.5); #11115=VECTOR('',#38625,0.5); #11116=VECTOR('',#38632,0.5); #11117=VECTOR('',#38639,0.5); #11118=VECTOR('',#38646,0.5); #11119=VECTOR('',#38653,0.5); #11120=VECTOR('',#38660,0.5); #11121=VECTOR('',#38667,0.5); #11122=VECTOR('',#38674,0.5); #11123=VECTOR('',#38681,0.5); #11124=VECTOR('',#38688,0.5); #11125=VECTOR('',#38695,0.5); #11126=VECTOR('',#38702,0.5); #11127=VECTOR('',#38709,0.5); #11128=VECTOR('',#38716,0.5); #11129=VECTOR('',#38721,1.); #11130=VECTOR('',#38722,1.); #11131=VECTOR('',#38723,1.); #11132=VECTOR('',#38724,1.); #11133=VECTOR('',#38727,1.); #11134=VECTOR('',#38728,1.); #11135=VECTOR('',#38729,1.); #11136=VECTOR('',#38736,1.); #11137=VECTOR('',#38741,1.); #11138=VECTOR('',#38746,1.); #11139=VECTOR('',#38747,1.); #11140=VECTOR('',#38748,1.); #11141=VECTOR('',#38751,1.); #11142=VECTOR('',#38752,1.); #11143=VECTOR('',#38753,1.); #11144=VECTOR('',#38754,1.); #11145=VECTOR('',#38757,1.); #11146=VECTOR('',#38758,1.); #11147=VECTOR('',#38759,1.); #11148=VECTOR('',#38760,1.); #11149=VECTOR('',#38763,1.); #11150=VECTOR('',#38764,1.); #11151=VECTOR('',#38765,1.); #11152=VECTOR('',#38766,1.); #11153=VECTOR('',#38769,1.); #11154=VECTOR('',#38770,1.); #11155=VECTOR('',#38771,1.); #11156=VECTOR('',#38772,1.); #11157=VECTOR('',#38775,1.); #11158=VECTOR('',#38776,1.); #11159=VECTOR('',#38777,1.); #11160=VECTOR('',#38778,1.); #11161=VECTOR('',#38781,1.); #11162=VECTOR('',#38782,1.); #11163=VECTOR('',#38783,1.); #11164=VECTOR('',#38784,1.); #11165=VECTOR('',#38787,1.); #11166=VECTOR('',#38788,1.); #11167=VECTOR('',#38789,1.); #11168=VECTOR('',#38790,1.); #11169=VECTOR('',#38793,1.); #11170=VECTOR('',#38794,1.); #11171=VECTOR('',#38795,1.); #11172=VECTOR('',#38796,1.); #11173=VECTOR('',#38799,1.); #11174=VECTOR('',#38800,1.); #11175=VECTOR('',#38801,1.); #11176=VECTOR('',#38802,1.); #11177=VECTOR('',#38805,1.); #11178=VECTOR('',#38806,1.); #11179=VECTOR('',#38807,1.); #11180=VECTOR('',#38808,1.); #11181=VECTOR('',#38811,1.); #11182=VECTOR('',#38812,1.); #11183=VECTOR('',#38813,1.); #11184=VECTOR('',#38814,1.); #11185=VECTOR('',#38817,1.); #11186=VECTOR('',#38818,1.); #11187=VECTOR('',#38819,1.); #11188=VECTOR('',#38820,1.); #11189=VECTOR('',#38823,1.); #11190=VECTOR('',#38824,1.); #11191=VECTOR('',#38825,1.); #11192=VECTOR('',#38826,1.); #11193=VECTOR('',#38829,1.); #11194=VECTOR('',#38830,1.); #11195=VECTOR('',#38831,1.); #11196=VECTOR('',#38832,1.); #11197=VECTOR('',#38835,1.); #11198=VECTOR('',#38836,1.); #11199=VECTOR('',#38837,1.); #11200=VECTOR('',#38838,1.); #11201=VECTOR('',#38841,1.); #11202=VECTOR('',#38842,1.); #11203=VECTOR('',#38843,1.); #11204=VECTOR('',#38844,1.); #11205=VECTOR('',#38847,1.); #11206=VECTOR('',#38848,1.); #11207=VECTOR('',#38849,1.); #11208=VECTOR('',#38850,1.); #11209=VECTOR('',#38853,1.); #11210=VECTOR('',#38854,1.); #11211=VECTOR('',#38855,1.); #11212=VECTOR('',#38856,1.); #11213=VECTOR('',#38859,1.); #11214=VECTOR('',#38860,1.); #11215=VECTOR('',#38861,1.); #11216=VECTOR('',#38862,1.); #11217=VECTOR('',#38865,1.); #11218=VECTOR('',#38866,1.); #11219=VECTOR('',#38867,1.); #11220=VECTOR('',#38868,1.); #11221=VECTOR('',#38873,1.); #11222=VECTOR('',#38882,1.); #11223=VECTOR('',#38885,1.); #11224=VECTOR('',#38888,1.); #11225=VECTOR('',#38891,1.); #11226=VECTOR('',#38892,1.); #11227=VECTOR('',#38895,1.); #11228=VECTOR('',#38896,1.); #11229=VECTOR('',#38899,1.); #11230=VECTOR('',#38902,1.); #11231=VECTOR('',#38903,1.); #11232=VECTOR('',#38904,1.); #11233=VECTOR('',#38907,1.); #11234=VECTOR('',#38908,1.); #11235=VECTOR('',#38917,1.); #11236=VECTOR('',#38922,1.); #11237=VECTOR('',#38929,1.); #11238=VECTOR('',#38938,1.); #11239=VECTOR('',#38941,1.); #11240=VECTOR('',#38942,1.); #11241=VECTOR('',#38945,1.); #11242=VECTOR('',#38946,1.); #11243=VECTOR('',#38947,1.); #11244=VECTOR('',#38950,1.); #11245=VECTOR('',#38955,1.); #11246=VECTOR('',#38956,1.); #11247=VECTOR('',#38959,1.); #11248=VECTOR('',#38962,1.); #11249=VECTOR('',#38963,1.); #11250=VECTOR('',#38964,1.); #11251=VECTOR('',#38973,1.); #11252=VECTOR('',#38978,1.); #11253=VECTOR('',#38985,1.); #11254=VECTOR('',#38994,1.); #11255=VECTOR('',#38999,1.); #11256=VECTOR('',#39008,1.); #11257=VECTOR('',#39013,1.); #11258=VECTOR('',#39022,1.); #11259=VECTOR('',#39025,1.); #11260=VECTOR('',#39026,1.); #11261=VECTOR('',#39029,1.); #11262=VECTOR('',#39030,1.); #11263=VECTOR('',#39031,1.); #11264=VECTOR('',#39034,1.); #11265=VECTOR('',#39039,1.); #11266=VECTOR('',#39040,1.); #11267=VECTOR('',#39043,1.); #11268=VECTOR('',#39046,1.); #11269=VECTOR('',#39047,1.); #11270=VECTOR('',#39048,1.); #11271=VECTOR('',#39057,1.); #11272=VECTOR('',#39062,1.); #11273=VECTOR('',#39069,1.); #11274=VECTOR('',#39078,1.); #11275=VECTOR('',#39085,1.); #11276=VECTOR('',#39090,1.); #11277=VECTOR('',#39097,1.); #11278=VECTOR('',#39106,1.); #11279=VECTOR('',#39113,1.); #11280=VECTOR('',#39118,1.); #11281=VECTOR('',#39125,1.); #11282=VECTOR('',#39134,1.); #11283=VECTOR('',#39141,1.); #11284=VECTOR('',#39146,1.); #11285=VECTOR('',#39153,1.); #11286=VECTOR('',#39162,1.); #11287=VECTOR('',#39165,1.); #11288=VECTOR('',#39168,1.); #11289=VECTOR('',#39171,1.); #11290=VECTOR('',#39172,1.); #11291=VECTOR('',#39175,1.); #11292=VECTOR('',#39176,1.); #11293=VECTOR('',#39179,1.); #11294=VECTOR('',#39182,1.); #11295=VECTOR('',#39183,1.); #11296=VECTOR('',#39184,1.); #11297=VECTOR('',#39187,1.); #11298=VECTOR('',#39188,1.); #11299=VECTOR('',#39195,1.); #11300=VECTOR('',#39204,1.); #11301=VECTOR('',#39207,1.); #11302=VECTOR('',#39210,1.); #11303=VECTOR('',#39211,1.); #11304=VECTOR('',#39212,1.); #11305=VECTOR('',#39215,1.); #11306=VECTOR('',#39218,1.); #11307=VECTOR('',#39219,1.); #11308=VECTOR('',#39220,1.); #11309=VECTOR('',#39223,1.); #11310=VECTOR('',#39226,1.); #11311=VECTOR('',#39227,1.); #11312=VECTOR('',#39230,1.); #11313=VECTOR('',#39233,1.); #11314=VECTOR('',#39236,1.); #11315=VECTOR('',#39237,1.); #11316=VECTOR('',#39240,1.); #11317=VECTOR('',#39243,1.); #11318=VECTOR('',#39262,1.); #11319=VECTOR('',#39263,1.); #11320=VECTOR('',#39264,1.); #11321=VECTOR('',#39265,1.); #11322=VECTOR('',#39266,1.); #11323=VECTOR('',#39267,1.); #11324=VECTOR('',#39268,1.); #11325=VECTOR('',#39269,1.); #11326=VECTOR('',#39270,1.); #11327=VECTOR('',#39271,1.); #11328=VECTOR('',#39272,1.); #11329=VECTOR('',#39273,1.); #11330=VECTOR('',#39274,1.); #11331=VECTOR('',#39275,1.); #11332=VECTOR('',#39276,1.); #11333=VECTOR('',#39277,1.); #11334=VECTOR('',#39278,1.); #11335=VECTOR('',#39279,1.); #11336=VECTOR('',#39280,1.); #11337=VECTOR('',#39281,1.); #11338=VECTOR('',#39282,1.); #11339=VECTOR('',#39283,1.); #11340=VECTOR('',#39284,1.); #11341=VECTOR('',#39287,1.); #11342=VECTOR('',#39288,1.); #11343=VECTOR('',#39289,1.); #11344=VECTOR('',#39290,1.); #11345=VECTOR('',#39291,1.); #11346=VECTOR('',#39292,1.); #11347=VECTOR('',#39293,1.); #11348=VECTOR('',#39294,1.); #11349=VECTOR('',#39295,1.); #11350=VECTOR('',#39296,1.); #11351=VECTOR('',#39297,1.); #11352=VECTOR('',#39298,1.); #11353=VECTOR('',#39299,1.); #11354=VECTOR('',#39300,1.); #11355=VECTOR('',#39301,1.); #11356=VECTOR('',#39302,1.); #11357=VECTOR('',#39303,1.); #11358=VECTOR('',#39304,1.); #11359=VECTOR('',#39305,1.); #11360=VECTOR('',#39306,1.); #11361=VECTOR('',#39307,1.); #11362=VECTOR('',#39308,1.); #11363=VECTOR('',#39309,1.); #11364=VECTOR('',#39314,1.); #11365=VECTOR('',#39317,1.); #11366=VECTOR('',#39320,1.); #11367=VECTOR('',#39323,1.); #11368=VECTOR('',#39326,1.); #11369=VECTOR('',#39329,1.); #11370=VECTOR('',#39332,1.); #11371=VECTOR('',#39335,1.); #11372=VECTOR('',#39338,1.); #11373=VECTOR('',#39341,1.); #11374=VECTOR('',#39344,1.); #11375=VECTOR('',#39347,1.); #11376=VECTOR('',#39350,1.); #11377=VECTOR('',#39353,1.); #11378=VECTOR('',#39356,1.); #11379=VECTOR('',#39359,1.); #11380=VECTOR('',#39362,1.); #11381=VECTOR('',#39365,1.); #11382=VECTOR('',#39368,1.); #11383=VECTOR('',#39371,1.); #11384=VECTOR('',#39374,1.); #11385=VECTOR('',#39377,1.); #11386=VECTOR('',#39380,1.); #11387=VECTOR('',#39383,1.); #11388=VECTOR('',#39386,1.); #11389=VECTOR('',#39389,1.); #11390=VECTOR('',#39392,1.); #11391=VECTOR('',#39395,1.); #11392=VECTOR('',#39398,1.); #11393=VECTOR('',#39401,1.); #11394=VECTOR('',#39404,1.); #11395=VECTOR('',#39407,1.); #11396=VECTOR('',#39410,1.); #11397=VECTOR('',#39413,1.); #11398=VECTOR('',#39416,1.); #11399=VECTOR('',#39419,1.); #11400=VECTOR('',#39422,1.); #11401=VECTOR('',#39425,1.); #11402=VECTOR('',#39428,1.); #11403=VECTOR('',#39433,1.); #11404=VECTOR('',#39438,1.); #11405=VECTOR('',#39485,1.); #11406=VECTOR('',#39488,1.); #11407=VECTOR('',#39491,0.999999999999518); #11408=VECTOR('',#39494,1.); #11409=VECTOR('',#39497,0.999999999999518); #11410=VECTOR('',#39500,1.); #11411=VECTOR('',#39505,1.); #11412=VECTOR('',#39506,0.999999999999518); #11413=VECTOR('',#39507,1.); #11414=VECTOR('',#39508,0.999999999999518); #11415=VECTOR('',#39515,1.); #11416=VECTOR('',#39518,1.); #11417=VECTOR('',#39519,1.); #11418=VECTOR('',#39520,1.); #11419=VECTOR('',#39527,1.); #11420=VECTOR('',#39530,1.); #11421=VECTOR('',#39531,1.); #11422=VECTOR('',#39532,1.); #11423=VECTOR('',#39539,1.); #11424=VECTOR('',#39542,1.); #11425=VECTOR('',#39543,1.); #11426=VECTOR('',#39544,1.); #11427=VECTOR('',#39551,1.); #11428=VECTOR('',#39554,1.); #11429=VECTOR('',#39555,0.999999999999518); #11430=VECTOR('',#39556,0.999999999999518); #11431=VECTOR('',#39563,1.); #11432=VECTOR('',#39566,1.); #11433=VECTOR('',#39567,1.); #11434=VECTOR('',#39568,1.); #11435=VECTOR('',#39579,1.); #11436=VECTOR('',#39582,1.); #11437=VECTOR('',#39585,1.); #11438=VECTOR('',#39588,0.999999999999518); #11439=VECTOR('',#39591,1.); #11440=VECTOR('',#39594,0.999999999999518); #11441=VECTOR('',#39599,1.); #11442=VECTOR('',#39600,1.); #11443=VECTOR('',#39603,1.); #11444=VECTOR('',#39606,1.); #11445=VECTOR('',#39609,1.); #11446=VECTOR('',#39612,1.); #11447=VECTOR('',#39615,1.); #11448=VECTOR('',#39618,1.); #11449=VECTOR('',#39621,1.); #11450=VECTOR('',#39624,1.); #11451=VECTOR('',#39627,1.); #11452=VECTOR('',#39630,1.); #11453=VECTOR('',#39635,1.); #11454=VECTOR('',#39636,1.); #11455=VECTOR('',#39639,1.00000000000039); #11456=VECTOR('',#39640,1.00000000000039); #11457=VECTOR('',#39641,1.00000000000039); #11458=VECTOR('',#39644,1.); #11459=VECTOR('',#39647,1.); #11460=VECTOR('',#39648,1.); #11461=VECTOR('',#39649,1.); #11462=VECTOR('',#39652,1.00000000000039); #11463=VECTOR('',#39653,1.00000000000039); #11464=VECTOR('',#39654,1.00000000000039); #11465=VECTOR('',#39659,1.); #11466=VECTOR('',#39660,1.); #11467=VECTOR('',#39663,1.); #11468=VECTOR('',#39666,1.); #11469=VECTOR('',#39669,1.); #11470=VECTOR('',#39672,1.); #11471=VECTOR('',#39675,1.); #11472=VECTOR('',#39678,1.); #11473=VECTOR('',#39683,1.); #11474=VECTOR('',#39684,1.); #11475=VECTOR('',#39687,1.00000000000039); #11476=VECTOR('',#39688,1.00000000000039); #11477=VECTOR('',#39689,1.00000000000039); #11478=VECTOR('',#39692,1.); #11479=VECTOR('',#39695,1.); #11480=VECTOR('',#39696,1.); #11481=VECTOR('',#39697,1.); #11482=VECTOR('',#39700,1.00000000000039); #11483=VECTOR('',#39701,1.00000000000039); #11484=VECTOR('',#39702,1.00000000000039); #11485=VECTOR('',#39707,1.); #11486=VECTOR('',#39708,1.); #11487=VECTOR('',#39711,1.); #11488=VECTOR('',#39714,1.); #11489=VECTOR('',#39717,1.); #11490=VECTOR('',#39720,1.); #11491=VECTOR('',#39723,1.); #11492=VECTOR('',#39726,1.); #11493=VECTOR('',#39731,1.); #11494=VECTOR('',#39732,1.); #11495=VECTOR('',#39735,1.00000000000039); #11496=VECTOR('',#39736,1.00000000000039); #11497=VECTOR('',#39737,1.00000000000039); #11498=VECTOR('',#39740,1.); #11499=VECTOR('',#39743,1.); #11500=VECTOR('',#39744,1.); #11501=VECTOR('',#39745,1.); #11502=VECTOR('',#39748,1.00000000000039); #11503=VECTOR('',#39749,1.00000000000039); #11504=VECTOR('',#39750,1.00000000000039); #11505=VECTOR('',#39755,1.); #11506=VECTOR('',#39756,1.); #11507=VECTOR('',#39759,1.); #11508=VECTOR('',#39762,1.); #11509=VECTOR('',#39765,1.); #11510=VECTOR('',#39768,1.); #11511=VECTOR('',#39771,1.); #11512=VECTOR('',#39774,1.); #11513=VECTOR('',#39779,1.); #11514=VECTOR('',#39780,1.); #11515=VECTOR('',#39783,1.00000000000039); #11516=VECTOR('',#39784,1.00000000000039); #11517=VECTOR('',#39785,1.00000000000039); #11518=VECTOR('',#39788,1.); #11519=VECTOR('',#39791,1.); #11520=VECTOR('',#39792,1.); #11521=VECTOR('',#39793,1.); #11522=VECTOR('',#39796,1.00000000000039); #11523=VECTOR('',#39797,1.00000000000039); #11524=VECTOR('',#39798,1.00000000000039); #11525=VECTOR('',#39803,1.); #11526=VECTOR('',#39804,1.); #11527=VECTOR('',#39807,1.); #11528=VECTOR('',#39810,1.); #11529=VECTOR('',#39813,1.); #11530=VECTOR('',#39816,1.); #11531=VECTOR('',#39819,1.); #11532=VECTOR('',#39822,1.); #11533=VECTOR('',#39829,1.); #11534=VECTOR('',#39832,1.); #11535=VECTOR('',#39851,1.); #11536=VECTOR('',#39852,1.); #11537=VECTOR('',#39857,1.); #11538=VECTOR('',#39858,1.); #11539=VECTOR('',#39859,1.); #11540=VECTOR('',#39862,1.); #11541=VECTOR('',#39867,1.); #11542=VECTOR('',#39868,1.); #11543=VECTOR('',#39875,1.); #11544=VECTOR('',#39876,1.); #11545=VECTOR('',#39877,1.); #11546=VECTOR('',#39878,1.); #11547=VECTOR('',#39881,1.); #11548=VECTOR('',#39882,1.); #11549=VECTOR('',#39883,1.); #11550=VECTOR('',#39886,1.); #11551=VECTOR('',#39887,1.); #11552=VECTOR('',#39890,1.); #11553=VECTOR('',#39891,1.); #11554=VECTOR('',#39894,1.); #11555=VECTOR('',#39899,1.); #11556=VECTOR('',#39900,1.); #11557=VECTOR('',#39901,1.); #11558=VECTOR('',#39902,1.); #11559=VECTOR('',#39905,1.); #11560=VECTOR('',#39906,1.); #11561=VECTOR('',#39907,1.); #11562=VECTOR('',#39908,1.); #11563=VECTOR('',#39911,1.); #11564=VECTOR('',#39912,1.); #11565=VECTOR('',#39915,1.); #11566=VECTOR('',#39918,1.); #11567=VECTOR('',#39923,1.); #11568=VECTOR('',#39924,1.); #11569=VECTOR('',#39925,1.); #11570=VECTOR('',#39926,1.); #11571=VECTOR('',#39929,1.); #11572=VECTOR('',#39930,1.); #11573=VECTOR('',#39931,1.); #11574=VECTOR('',#39934,1.); #11575=VECTOR('',#39935,1.); #11576=VECTOR('',#39936,1.); #11577=VECTOR('',#39939,1.); #11578=VECTOR('',#39940,1.); #11579=VECTOR('',#39941,1.); #11580=VECTOR('',#39942,1.); #11581=VECTOR('',#39945,1.); #11582=VECTOR('',#39946,1.); #11583=VECTOR('',#39947,1.); #11584=VECTOR('',#39948,1.); #11585=VECTOR('',#39951,1.); #11586=VECTOR('',#39952,1.); #11587=VECTOR('',#39955,1.); #11588=VECTOR('',#39956,1.); #11589=VECTOR('',#39957,1.); #11590=VECTOR('',#39960,1.); #11591=VECTOR('',#39967,1.); #11592=VECTOR('',#39968,1.); #11593=VECTOR('',#39969,1.); #11594=VECTOR('',#39970,1.); #11595=VECTOR('',#39973,1.); #11596=VECTOR('',#39974,1.); #11597=VECTOR('',#39975,1.); #11598=VECTOR('',#39978,1.); #11599=VECTOR('',#39979,1.); #11600=VECTOR('',#39980,1.); #11601=VECTOR('',#39983,1.); #11602=VECTOR('',#39986,1.); #11603=VECTOR('',#39987,1.); #11604=VECTOR('',#39988,1.); #11605=VECTOR('',#39989,1.); #11606=VECTOR('',#39992,1.); #11607=VECTOR('',#39993,1.); #11608=VECTOR('',#39994,1.); #11609=VECTOR('',#39995,1.); #11610=VECTOR('',#39998,1.); #11611=VECTOR('',#39999,1.); #11612=VECTOR('',#40002,1.); #11613=VECTOR('',#40005,1.); #11614=VECTOR('',#40006,1.); #11615=VECTOR('',#40007,1.); #11616=VECTOR('',#40008,1.); #11617=VECTOR('',#40009,1.); #11618=VECTOR('',#40010,1.); #11619=VECTOR('',#40013,1.); #11620=VECTOR('',#40014,1.); #11621=VECTOR('',#40015,1.); #11622=VECTOR('',#40016,1.); #11623=VECTOR('',#40019,1.); #11624=VECTOR('',#40020,1.); #11625=VECTOR('',#40023,1.); #11626=VECTOR('',#40026,1.); #11627=VECTOR('',#40031,1.); #11628=VECTOR('',#40032,1.); #11629=VECTOR('',#40033,1.); #11630=VECTOR('',#40034,1.); #11631=VECTOR('',#40037,1.); #11632=VECTOR('',#40038,1.); #11633=VECTOR('',#40039,1.); #11634=VECTOR('',#40040,1.); #11635=VECTOR('',#40043,1.); #11636=VECTOR('',#40044,1.); #11637=VECTOR('',#40047,1.); #11638=VECTOR('',#40050,1.); #11639=VECTOR('',#40055,1.); #11640=VECTOR('',#40056,1.); #11641=VECTOR('',#40057,1.); #11642=VECTOR('',#40058,1.); #11643=VECTOR('',#40061,1.); #11644=VECTOR('',#40062,1.); #11645=VECTOR('',#40063,1.); #11646=VECTOR('',#40064,1.); #11647=VECTOR('',#40067,1.); #11648=VECTOR('',#40068,1.); #11649=VECTOR('',#40071,1.); #11650=VECTOR('',#40074,1.); #11651=VECTOR('',#40079,1.); #11652=VECTOR('',#40080,1.); #11653=VECTOR('',#40081,1.); #11654=VECTOR('',#40082,1.); #11655=VECTOR('',#40085,1.); #11656=VECTOR('',#40086,1.); #11657=VECTOR('',#40087,1.); #11658=VECTOR('',#40088,1.); #11659=VECTOR('',#40091,1.); #11660=VECTOR('',#40092,1.); #11661=VECTOR('',#40095,1.); #11662=VECTOR('',#40098,1.); #11663=VECTOR('',#40103,1.); #11664=VECTOR('',#40104,1.); #11665=VECTOR('',#40105,1.); #11666=VECTOR('',#40106,1.); #11667=VECTOR('',#40109,1.); #11668=VECTOR('',#40110,1.); #11669=VECTOR('',#40111,1.); #11670=VECTOR('',#40112,1.); #11671=VECTOR('',#40115,1.); #11672=VECTOR('',#40116,1.); #11673=VECTOR('',#40119,1.); #11674=VECTOR('',#40122,1.); #11675=VECTOR('',#40127,1.); #11676=VECTOR('',#40128,1.); #11677=VECTOR('',#40129,1.); #11678=VECTOR('',#40130,1.); #11679=VECTOR('',#40133,1.); #11680=VECTOR('',#40134,1.); #11681=VECTOR('',#40135,1.); #11682=VECTOR('',#40136,1.); #11683=VECTOR('',#40139,1.); #11684=VECTOR('',#40140,1.); #11685=VECTOR('',#40143,1.); #11686=VECTOR('',#40146,1.); #11687=VECTOR('',#40151,1.); #11688=VECTOR('',#40152,1.); #11689=VECTOR('',#40153,1.); #11690=VECTOR('',#40154,1.); #11691=VECTOR('',#40157,1.); #11692=VECTOR('',#40158,1.); #11693=VECTOR('',#40159,1.); #11694=VECTOR('',#40160,1.); #11695=VECTOR('',#40163,1.); #11696=VECTOR('',#40164,1.); #11697=VECTOR('',#40167,1.); #11698=VECTOR('',#40170,1.); #11699=VECTOR('',#40175,1.); #11700=VECTOR('',#40176,1.); #11701=VECTOR('',#40177,1.); #11702=VECTOR('',#40178,1.); #11703=VECTOR('',#40181,1.); #11704=VECTOR('',#40182,1.); #11705=VECTOR('',#40183,1.); #11706=VECTOR('',#40184,1.); #11707=VECTOR('',#40187,1.); #11708=VECTOR('',#40188,1.); #11709=VECTOR('',#40191,1.); #11710=VECTOR('',#40194,1.); #11711=VECTOR('',#40207,1.); #11712=VECTOR('',#40208,1.); #11713=VECTOR('',#40209,1.); #11714=VECTOR('',#40210,1.); #11715=VECTOR('',#40211,1.); #11716=VECTOR('',#40212,1.); #11717=VECTOR('',#40213,1.); #11718=VECTOR('',#40214,1.); #11719=VECTOR('',#40217,1.); #11720=VECTOR('',#40218,1.); #11721=VECTOR('',#40219,1.); #11722=VECTOR('',#40220,1.); #11723=VECTOR('',#40221,1.); #11724=VECTOR('',#40222,1.); #11725=VECTOR('',#40223,1.); #11726=VECTOR('',#40224,1.); #11727=VECTOR('',#40225,1.); #11728=VECTOR('',#40226,1.); #11729=VECTOR('',#40227,1.); #11730=VECTOR('',#40228,1.); #11731=VECTOR('',#40229,1.); #11732=VECTOR('',#40230,1.); #11733=VECTOR('',#40231,1.); #11734=VECTOR('',#40232,1.); #11735=VECTOR('',#40233,1.); #11736=VECTOR('',#40234,1.); #11737=VECTOR('',#40237,1.); #11738=VECTOR('',#40238,1.); #11739=VECTOR('',#40239,1.); #11740=VECTOR('',#40242,1.); #11741=VECTOR('',#40243,1.00000000000009); #11742=VECTOR('',#40244,1.00000000000009); #11743=VECTOR('',#40247,1.); #11744=VECTOR('',#40248,1.); #11745=VECTOR('',#40251,1.); #11746=VECTOR('',#40252,1.); #11747=VECTOR('',#40255,1.); #11748=VECTOR('',#40256,1.); #11749=VECTOR('',#40257,1.); #11750=VECTOR('',#40258,1.); #11751=VECTOR('',#40261,1.); #11752=VECTOR('',#40266,1.00000000000009); #11753=VECTOR('',#40267,1.); #11754=VECTOR('',#40268,1.00000000000009); #11755=VECTOR('',#40271,1.); #11756=VECTOR('',#40272,1.); #11757=VECTOR('',#40275,1.); #11758=VECTOR('',#40278,1.); #11759=VECTOR('',#40283,1.); #11760=VECTOR('',#40284,1.); #11761=VECTOR('',#40285,1.); #11762=VECTOR('',#40288,1.); #11763=VECTOR('',#40289,1.); #11764=VECTOR('',#40290,1.); #11765=VECTOR('',#40291,1.); #11766=VECTOR('',#40292,1.); #11767=VECTOR('',#40293,1.); #11768=VECTOR('',#40294,1.); #11769=VECTOR('',#40295,1.); #11770=VECTOR('',#40296,1.); #11771=VECTOR('',#40297,1.); #11772=VECTOR('',#40298,1.00000000000043); #11773=VECTOR('',#40299,1.); #11774=VECTOR('',#40300,1.00000000000043); #11775=VECTOR('',#40301,1.); #11776=VECTOR('',#40302,1.); #11777=VECTOR('',#40307,1.00000000000014); #11778=VECTOR('',#40310,1.); #11779=VECTOR('',#40313,1.); #11780=VECTOR('',#40316,1.); #11781=VECTOR('',#40319,1.00000000000014); #11782=VECTOR('',#40322,1.); #11783=VECTOR('',#40323,1.); #11784=VECTOR('',#40324,1.); #11785=VECTOR('',#40325,1.); #11786=VECTOR('',#40326,1.); #11787=VECTOR('',#40329,1.); #11788=VECTOR('',#40330,1.); #11789=VECTOR('',#40331,1.); #11790=VECTOR('',#40334,1.); #11791=VECTOR('',#40335,1.); #11792=VECTOR('',#40338,1.); #11793=VECTOR('',#40339,1.); #11794=VECTOR('',#40342,1.); #11795=VECTOR('',#40345,1.); #11796=VECTOR('',#40346,1.); #11797=VECTOR('',#40347,1.); #11798=VECTOR('',#40348,1.); #11799=VECTOR('',#40349,1.); #11800=VECTOR('',#40350,1.); #11801=VECTOR('',#40351,1.); #11802=VECTOR('',#40352,1.); #11803=VECTOR('',#40355,1.); #11804=VECTOR('',#40356,1.); #11805=VECTOR('',#40357,1.); #11806=VECTOR('',#40358,1.); #11807=VECTOR('',#40359,1.); #11808=VECTOR('',#40362,1.); #11809=VECTOR('',#40363,1.); #11810=VECTOR('',#40364,1.); #11811=VECTOR('',#40367,1.); #11812=VECTOR('',#40368,1.); #11813=VECTOR('',#40369,1.); #11814=VECTOR('',#40370,1.); #11815=VECTOR('',#40371,1.); #11816=VECTOR('',#40374,1.); #11817=VECTOR('',#40375,0.999999999999933); #11818=VECTOR('',#40376,0.999999999999933); #11819=VECTOR('',#40383,1.); #11820=VECTOR('',#40384,1.); #11821=VECTOR('',#40385,1.); #11822=VECTOR('',#40388,1.); #11823=VECTOR('',#40391,1.); #11824=VECTOR('',#40392,1.); #11825=VECTOR('',#40393,1.00000000000043); #11826=VECTOR('',#40394,1.); #11827=VECTOR('',#40395,1.00000000000043); #11828=VECTOR('',#40396,1.); #11829=VECTOR('',#40397,1.); #11830=VECTOR('',#40398,1.); #11831=VECTOR('',#40399,1.); #11832=VECTOR('',#40400,1.); #11833=VECTOR('',#40401,1.); #11834=VECTOR('',#40402,1.); #11835=VECTOR('',#40403,1.); #11836=VECTOR('',#40404,1.); #11837=VECTOR('',#40407,1.); #11838=VECTOR('',#40410,1.); #11839=VECTOR('',#40413,1.); #11840=VECTOR('',#40416,1.00000000000014); #11841=VECTOR('',#40419,1.); #11842=VECTOR('',#40422,1.00000000000014); #11843=VECTOR('',#40425,1.); #11844=VECTOR('',#40426,1.); #11845=VECTOR('',#40429,1.); #11846=VECTOR('',#40432,1.); #11847=VECTOR('',#40435,1.); #11848=VECTOR('',#40438,1.); #11849=VECTOR('',#40441,1.); #11850=VECTOR('',#40446,1.); #11851=VECTOR('',#40453,1.); #11852=VECTOR('',#40460,1.); #11853=VECTOR('',#40461,0.999999999999807); #11854=VECTOR('',#40464,1.00000000000045); #11855=VECTOR('',#40465,0.999999999999807); #11856=VECTOR('',#40466,1.00000000000045); #11857=VECTOR('',#40469,1.); #11858=VECTOR('',#40470,1.00000000000045); #11859=VECTOR('',#40473,0.999999999999807); #11860=VECTOR('',#40474,1.00000000000045); #11861=VECTOR('',#40475,0.999999999999807); #11862=VECTOR('',#40478,1.); #11863=VECTOR('',#40481,1.); #11864=VECTOR('',#40482,1.0000000000002); #11865=VECTOR('',#40485,1.); #11866=VECTOR('',#40486,1.0000000000002); #11867=VECTOR('',#40489,0.999999999999806); #11868=VECTOR('',#40490,0.999999999999806); #11869=VECTOR('',#40491,1.0000000000002); #11870=VECTOR('',#40494,1.0000000000002); #11871=VECTOR('',#40503,1.); #11872=VECTOR('',#40504,0.999999999999806); #11873=VECTOR('',#40507,1.0000000000002); #11874=VECTOR('',#40508,1.0000000000002); #11875=VECTOR('',#40513,0.999999999999806); #11876=VECTOR('',#40514,1.); #11877=VECTOR('',#40523,1.); #11878=VECTOR('',#40524,1.); #11879=VECTOR('',#40525,1.); #11880=VECTOR('',#40526,1.); #11881=VECTOR('',#40527,1.); #11882=VECTOR('',#40528,1.); #11883=VECTOR('',#40531,1.); #11884=VECTOR('',#40532,1.); #11885=VECTOR('',#40533,1.); #11886=VECTOR('',#40534,1.); #11887=VECTOR('',#40535,1.); #11888=VECTOR('',#40538,1.); #11889=VECTOR('',#40539,1.); #11890=VECTOR('',#40540,1.); #11891=VECTOR('',#40541,1.); #11892=VECTOR('',#40544,1.); #11893=VECTOR('',#40545,1.); #11894=VECTOR('',#40548,1.); #11895=VECTOR('',#40549,1.); #11896=VECTOR('',#40550,1.); #11897=VECTOR('',#40551,1.); #11898=VECTOR('',#40552,1.); #11899=VECTOR('',#40555,1.); #11900=VECTOR('',#40556,1.); #11901=VECTOR('',#40557,1.); #11902=VECTOR('',#40558,1.); #11903=VECTOR('',#40559,1.); #11904=VECTOR('',#40560,1.); #11905=VECTOR('',#40561,1.); #11906=VECTOR('',#40562,1.00000000000064); #11907=VECTOR('',#40563,1.); #11908=VECTOR('',#40564,1.); #11909=VECTOR('',#40565,1.); #11910=VECTOR('',#40566,1.); #11911=VECTOR('',#40567,1.); #11912=VECTOR('',#40568,1.); #11913=VECTOR('',#40569,1.); #11914=VECTOR('',#40570,1.); #11915=VECTOR('',#40571,1.); #11916=VECTOR('',#40572,1.); #11917=VECTOR('',#40573,1.); #11918=VECTOR('',#40574,1.00000000000064); #11919=VECTOR('',#40575,1.); #11920=VECTOR('',#40576,1.00000000000064); #11921=VECTOR('',#40577,1.); #11922=VECTOR('',#40578,1.); #11923=VECTOR('',#40579,1.); #11924=VECTOR('',#40580,1.); #11925=VECTOR('',#40581,1.); #11926=VECTOR('',#40582,1.); #11927=VECTOR('',#40583,1.); #11928=VECTOR('',#40584,1.); #11929=VECTOR('',#40585,1.); #11930=VECTOR('',#40586,1.); #11931=VECTOR('',#40587,1.); #11932=VECTOR('',#40588,1.00000000000064); #11933=VECTOR('',#40589,1.); #11934=VECTOR('',#40590,1.00000000000064); #11935=VECTOR('',#40591,1.); #11936=VECTOR('',#40592,1.); #11937=VECTOR('',#40593,1.); #11938=VECTOR('',#40594,1.); #11939=VECTOR('',#40595,1.); #11940=VECTOR('',#40596,1.); #11941=VECTOR('',#40597,1.); #11942=VECTOR('',#40598,1.); #11943=VECTOR('',#40599,1.); #11944=VECTOR('',#40600,1.); #11945=VECTOR('',#40601,1.); #11946=VECTOR('',#40602,1.00000000000064); #11947=VECTOR('',#40603,1.); #11948=VECTOR('',#40604,1.00000000000064); #11949=VECTOR('',#40605,1.); #11950=VECTOR('',#40606,1.); #11951=VECTOR('',#40607,1.); #11952=VECTOR('',#40608,1.); #11953=VECTOR('',#40609,1.); #11954=VECTOR('',#40610,1.); #11955=VECTOR('',#40611,1.); #11956=VECTOR('',#40612,1.); #11957=VECTOR('',#40613,1.); #11958=VECTOR('',#40614,1.); #11959=VECTOR('',#40615,1.); #11960=VECTOR('',#40616,1.00000000000064); #11961=VECTOR('',#40617,1.); #11962=VECTOR('',#40618,1.); #11963=VECTOR('',#40621,1.); #11964=VECTOR('',#40622,1.); #11965=VECTOR('',#40625,1.); #11966=VECTOR('',#40626,1.); #11967=VECTOR('',#40627,1.); #11968=VECTOR('',#40628,1.); #11969=VECTOR('',#40629,1.); #11970=VECTOR('',#40630,1.); #11971=VECTOR('',#40631,1.); #11972=VECTOR('',#40632,1.); #11973=VECTOR('',#40633,1.); #11974=VECTOR('',#40634,1.); #11975=VECTOR('',#40635,1.); #11976=VECTOR('',#40636,1.); #11977=VECTOR('',#40637,1.); #11978=VECTOR('',#40638,1.); #11979=VECTOR('',#40639,1.); #11980=VECTOR('',#40640,1.); #11981=VECTOR('',#40641,1.); #11982=VECTOR('',#40642,1.); #11983=VECTOR('',#40645,1.); #11984=VECTOR('',#40648,0.999999999999933); #11985=VECTOR('',#40649,1.); #11986=VECTOR('',#40650,1.); #11987=VECTOR('',#40653,0.999999999999933); #11988=VECTOR('',#40654,1.); #11989=VECTOR('',#40657,1.); #11990=VECTOR('',#40658,1.); #11991=VECTOR('',#40659,1.); #11992=VECTOR('',#40660,1.); #11993=VECTOR('',#40661,1.); #11994=VECTOR('',#40662,1.); #11995=VECTOR('',#40665,1.); #11996=VECTOR('',#40666,1.); #11997=VECTOR('',#40667,1.); #11998=VECTOR('',#40670,1.); #11999=VECTOR('',#40671,1.); #12000=VECTOR('',#40674,1.); #12001=VECTOR('',#40675,1.); #12002=VECTOR('',#40676,1.); #12003=VECTOR('',#40677,1.); #12004=VECTOR('',#40680,1.); #12005=VECTOR('',#40683,1.); #12006=VECTOR('',#40684,1.); #12007=VECTOR('',#40685,1.); #12008=VECTOR('',#40686,1.); #12009=VECTOR('',#40687,1.); #12010=VECTOR('',#40688,1.); #12011=VECTOR('',#40689,1.); #12012=VECTOR('',#40690,1.); #12013=VECTOR('',#40693,1.); #12014=VECTOR('',#40694,1.); #12015=VECTOR('',#40695,1.); #12016=VECTOR('',#40698,1.); #12017=VECTOR('',#40699,1.00000000000043); #12018=VECTOR('',#40700,1.); #12019=VECTOR('',#40701,1.00000000000043); #12020=VECTOR('',#40702,1.); #12021=VECTOR('',#40703,1.); #12022=VECTOR('',#40704,1.); #12023=VECTOR('',#40705,1.); #12024=VECTOR('',#40706,1.); #12025=VECTOR('',#40707,1.); #12026=VECTOR('',#40708,1.); #12027=VECTOR('',#40709,1.); #12028=VECTOR('',#40710,1.); #12029=VECTOR('',#40715,1.); #12030=VECTOR('',#40718,1.); #12031=VECTOR('',#40721,1.); #12032=VECTOR('',#40724,1.00000000000014); #12033=VECTOR('',#40727,1.); #12034=VECTOR('',#40730,1.00000000000014); #12035=VECTOR('',#40731,1.); #12036=VECTOR('',#40732,1.); #12037=VECTOR('',#40733,1.); #12038=VECTOR('',#40736,1.); #12039=VECTOR('',#40739,1.); #12040=VECTOR('',#40744,1.); #12041=VECTOR('',#40745,1.00000000000014); #12042=VECTOR('',#40746,1.); #12043=VECTOR('',#40749,1.); #12044=VECTOR('',#40754,1.); #12045=VECTOR('',#40755,1.); #12046=VECTOR('',#40756,1.); #12047=VECTOR('',#40757,1.); #12048=VECTOR('',#40758,1.); #12049=VECTOR('',#40759,1.); #12050=VECTOR('',#40760,1.); #12051=VECTOR('',#40761,1.); #12052=VECTOR('',#40762,1.00000000000043); #12053=VECTOR('',#40763,1.); #12054=VECTOR('',#40764,1.00000000000043); #12055=VECTOR('',#40765,1.); #12056=VECTOR('',#40768,1.); #12057=VECTOR('',#40771,1.); #12058=VECTOR('',#40772,1.); #12059=VECTOR('',#40773,1.); #12060=VECTOR('',#40780,1.00000000000014); #12061=VECTOR('',#40783,1.); #12062=VECTOR('',#40786,1.); #12063=VECTOR('',#40789,1.); #12064=VECTOR('',#40792,1.); #12065=VECTOR('',#40795,1.); #12066=VECTOR('',#40798,1.); #12067=VECTOR('',#40801,1.); #12068=VECTOR('',#40804,1.); #12069=VECTOR('',#40809,1.); #12070=VECTOR('',#40814,1.); #12071=VECTOR('',#40821,1.); #12072=VECTOR('',#40824,0.999999999999807); #12073=VECTOR('',#40827,1.00000000000045); #12074=VECTOR('',#40828,0.999999999999807); #12075=VECTOR('',#40829,1.00000000000045); #12076=VECTOR('',#40832,1.); #12077=VECTOR('',#40833,1.00000000000045); #12078=VECTOR('',#40836,0.999999999999807); #12079=VECTOR('',#40837,0.999999999999807); #12080=VECTOR('',#40838,1.00000000000045); #12081=VECTOR('',#40841,1.); #12082=VECTOR('',#40844,1.); #12083=VECTOR('',#40845,1.0000000000002); #12084=VECTOR('',#40848,1.); #12085=VECTOR('',#40849,1.0000000000002); #12086=VECTOR('',#40852,1.0000000000002); #12087=VECTOR('',#40853,0.999999999999806); #12088=VECTOR('',#40854,0.999999999999806); #12089=VECTOR('',#40857,1.0000000000002); #12090=VECTOR('',#40866,1.); #12091=VECTOR('',#40867,0.999999999999806); #12092=VECTOR('',#40870,1.0000000000002); #12093=VECTOR('',#40871,1.0000000000002); #12094=VECTOR('',#40876,0.999999999999806); #12095=VECTOR('',#40877,1.); #12096=VECTOR('',#40886,1.); #12097=VECTOR('',#40891,1.); #12098=VECTOR('',#40892,1.); #12099=VECTOR('',#40895,1.); #12100=VECTOR('',#40896,1.); #12101=VECTOR('',#40899,1.); #12102=VECTOR('',#40902,1.); #12103=VECTOR('',#40905,1.); #12104=VECTOR('',#40908,1.); #12105=VECTOR('',#40911,1.); #12106=VECTOR('',#40912,1.); #12107=VECTOR('',#40913,1.); #12108=VECTOR('',#40918,1.); #12109=VECTOR('',#40923,1.); #12110=VECTOR('',#40924,1.); #12111=VECTOR('',#40925,1.); #12112=VECTOR('',#40930,1.); #12113=VECTOR('',#40937,1.); #12114=VECTOR('',#40940,1.); #12115=VECTOR('',#40945,1.); #12116=VECTOR('',#40948,1.); #12117=VECTOR('',#40949,1.); #12118=VECTOR('',#40956,1.); #12119=VECTOR('',#40959,1.); #12120=VECTOR('',#40962,1.); #12121=VECTOR('',#40963,1.); #12122=VECTOR('',#40964,1.); #12123=VECTOR('',#40965,1.); #12124=VECTOR('',#40966,1.); #12125=VECTOR('',#40967,1.); #12126=VECTOR('',#40968,1.); #12127=VECTOR('',#40969,1.); #12128=VECTOR('',#40970,1.); #12129=VECTOR('',#40971,1.); #12130=VECTOR('',#40972,1.); #12131=VECTOR('',#40973,1.); #12132=VECTOR('',#40974,1.); #12133=VECTOR('',#40975,1.); #12134=VECTOR('',#40976,1.); #12135=VECTOR('',#40977,1.); #12136=VECTOR('',#40980,1.); #12137=VECTOR('',#40983,1.); #12138=VECTOR('',#40984,1.); #12139=VECTOR('',#40985,1.); #12140=VECTOR('',#40988,1.); #12141=VECTOR('',#40991,1.); #12142=VECTOR('',#40994,1.); #12143=VECTOR('',#40997,1.); #12144=VECTOR('',#41000,1.); #12145=VECTOR('',#41003,1.); #12146=VECTOR('',#41004,1.); #12147=VECTOR('',#41005,1.); #12148=VECTOR('',#41008,1.); #12149=VECTOR('',#41011,1.); #12150=VECTOR('',#41014,1.); #12151=VECTOR('',#41017,1.); #12152=VECTOR('',#41020,0.999999999999635); #12153=VECTOR('',#41023,1.00000000000064); #12154=VECTOR('',#41028,1.00000000000064); #12155=VECTOR('',#41031,0.999999999999635); #12156=VECTOR('',#41032,10.); #12157=VECTOR('',#41035,0.999999999999635); #12158=VECTOR('',#41038,1.00000000000064); #12159=VECTOR('',#41043,1.00000000000064); #12160=VECTOR('',#41046,0.999999999999635); #12161=VECTOR('',#41047,10.); #12162=VECTOR('',#41050,10.); #12163=VECTOR('',#41057,1.); #12164=VECTOR('',#41058,0.999999999999635); #12165=VECTOR('',#41063,1.00000000000064); #12166=VECTOR('',#41068,1.00000000000064); #12167=VECTOR('',#41071,0.999999999999635); #12168=VECTOR('',#41074,10.); #12169=VECTOR('',#41075,0.999999999999635); #12170=VECTOR('',#41078,1.00000000000064); #12171=VECTOR('',#41083,1.00000000000064); #12172=VECTOR('',#41086,0.999999999999635); #12173=VECTOR('',#41089,1.); #12174=VECTOR('',#41092,1.); #12175=VECTOR('',#41095,1.); #12176=VECTOR('',#41100,1.); #12177=VECTOR('',#41103,1.); #12178=VECTOR('',#41114,1.); #12179=VECTOR('',#41117,1.); #12180=VECTOR('',#41120,1.); #12181=VECTOR('',#41125,1.); #12182=VECTOR('',#41128,1.); #12183=VECTOR('',#41131,1.); #12184=VECTOR('',#41136,1.); #12185=VECTOR('',#41137,1.); #12186=VECTOR('',#41138,1.); #12187=VECTOR('',#41141,1.); #12188=VECTOR('',#41146,1.); #12189=VECTOR('',#41147,1.); #12190=VECTOR('',#41148,1.); #12191=VECTOR('',#41149,1.); #12192=VECTOR('',#41150,1.); #12193=VECTOR('',#41151,1.); #12194=VECTOR('',#41152,1.); #12195=VECTOR('',#41155,1.); #12196=VECTOR('',#41158,1.); #12197=VECTOR('',#41161,1.); #12198=VECTOR('',#41162,1.); #12199=VECTOR('',#41163,1.); #12200=VECTOR('',#41166,1.); #12201=VECTOR('',#41169,1.); #12202=VECTOR('',#41172,1.); #12203=VECTOR('',#41175,1.); #12204=VECTOR('',#41178,1.); #12205=VECTOR('',#41181,1.); #12206=VECTOR('',#41182,1.); #12207=VECTOR('',#41183,1.); #12208=VECTOR('',#41186,1.); #12209=VECTOR('',#41191,1.); #12210=VECTOR('',#41194,1.); #12211=VECTOR('',#41197,1.); #12212=VECTOR('',#41200,1.); #12213=VECTOR('',#41203,1.); #12214=VECTOR('',#41204,1.); #12215=VECTOR('',#41207,1.); #12216=VECTOR('',#41212,1.); #12217=VECTOR('',#41215,0.99999999999998); #12218=VECTOR('',#41218,1.0000000000002); #12219=VECTOR('',#41223,1.0000000000002); #12220=VECTOR('',#41226,0.99999999999998); #12221=VECTOR('',#41227,0.99999999999998); #12222=VECTOR('',#41232,0.99999999999998); #12223=VECTOR('',#41237,1.); #12224=VECTOR('',#41240,0.99999999999998); #12225=VECTOR('',#41241,1.); #12226=VECTOR('',#41246,1.); #12227=VECTOR('',#41249,1.0000000000002); #12228=VECTOR('',#41250,1.); #12229=VECTOR('',#41257,0.99999999999998); #12230=VECTOR('',#41258,0.99999999999998); #12231=VECTOR('',#41261,1.0000000000002); #12232=VECTOR('',#41264,1.); #12233=VECTOR('',#41267,0.99999999999998); #12234=VECTOR('',#41272,1.); #12235=VECTOR('',#41273,1.); #12236=VECTOR('',#41278,1.); #12237=VECTOR('',#41281,1.); #12238=VECTOR('',#41288,1.); #12239=VECTOR('',#41289,1.); #12240=VECTOR('',#41292,1.); #12241=VECTOR('',#41295,1.); #12242=VECTOR('',#41298,1.); #12243=VECTOR('',#41301,1.); #12244=VECTOR('',#41304,1.); #12245=VECTOR('',#41305,1.); #12246=VECTOR('',#41308,1.); #12247=VECTOR('',#41311,0.99999999999998); #12248=VECTOR('',#41314,1.0000000000002); #12249=VECTOR('',#41319,1.0000000000002); #12250=VECTOR('',#41322,0.99999999999998); #12251=VECTOR('',#41323,0.99999999999998); #12252=VECTOR('',#41328,0.99999999999998); #12253=VECTOR('',#41333,0.99999999999998); #12254=VECTOR('',#41334,1.); #12255=VECTOR('',#41335,1.); #12256=VECTOR('',#41340,0.99999999999998); #12257=VECTOR('',#41341,0.99999999999998); #12258=VECTOR('',#41346,1.); #12259=VECTOR('',#41347,1.); #12260=VECTOR('',#41348,0.99999999999998); #12261=VECTOR('',#41353,1.0000000000002); #12262=VECTOR('',#41356,1.); #12263=VECTOR('',#41359,1.0000000000002); #12264=VECTOR('',#41364,1.); #12265=VECTOR('',#41367,1.); #12266=VECTOR('',#41374,1.); #12267=VECTOR('',#41377,1.); #12268=VECTOR('',#41384,1.); #12269=VECTOR('',#41387,1.); #12270=VECTOR('',#41398,1.); #12271=VECTOR('',#41403,1.); #12272=VECTOR('',#41404,1.); #12273=VECTOR('',#41407,1.); #12274=VECTOR('',#41412,1.); #12275=VECTOR('',#41415,1.); #12276=VECTOR('',#41418,1.); #12277=VECTOR('',#41419,1.); #12278=VECTOR('',#41420,1.); #12279=VECTOR('',#41423,1.); #12280=VECTOR('',#41428,1.); #12281=VECTOR('',#41431,1.); #12282=VECTOR('',#41434,1.); #12283=VECTOR('',#41435,1.); #12284=VECTOR('',#41440,1.); #12285=VECTOR('',#41443,1.); #12286=VECTOR('',#41444,1.); #12287=VECTOR('',#41445,1.); #12288=VECTOR('',#41446,1.); #12289=VECTOR('',#41447,1.); #12290=VECTOR('',#41450,1.); #12291=VECTOR('',#41453,1.); #12292=VECTOR('',#41456,1.); #12293=VECTOR('',#41457,1.); #12294=VECTOR('',#41464,1.); #12295=VECTOR('',#41465,1.); #12296=VECTOR('',#41476,1.); #12297=VECTOR('',#41477,1.); #12298=VECTOR('',#41486,1.); #12299=VECTOR('',#41487,1.); #12300=VECTOR('',#41500,1.); #12301=VECTOR('',#41503,0.999999999999965); #12302=VECTOR('',#41504,1.); #12303=VECTOR('',#41505,0.999999999999964); #12304=VECTOR('',#41508,1.); #12305=VECTOR('',#41511,1.00000000000011); #12306=VECTOR('',#41514,1.); #12307=VECTOR('',#41517,1.00000000000011); #12308=VECTOR('',#41520,1.00000000000011); #12309=VECTOR('',#41523,1.); #12310=VECTOR('',#41526,0.999999999999963); #12311=VECTOR('',#41527,1.); #12312=VECTOR('',#41528,0.999999999999966); #12313=VECTOR('',#41531,1.); #12314=VECTOR('',#41534,1.00000000000011); #12315=VECTOR('',#41537,1.); #12316=VECTOR('',#41540,1.); #12317=VECTOR('',#41543,1.); #12318=VECTOR('',#41546,1.); #12319=VECTOR('',#41549,1.); #12320=VECTOR('',#41552,1.); #12321=VECTOR('',#41553,1.); #12322=VECTOR('',#41554,1.); #12323=VECTOR('',#41557,1.); #12324=VECTOR('',#41562,1.00000000000011); #12325=VECTOR('',#41563,1.); #12326=VECTOR('',#41566,1.); #12327=VECTOR('',#41571,1.); #12328=VECTOR('',#41572,1.); #12329=VECTOR('',#41573,1.); #12330=VECTOR('',#41576,1.); #12331=VECTOR('',#41577,1.); #12332=VECTOR('',#41580,1.); #12333=VECTOR('',#41585,1.); #12334=VECTOR('',#41586,1.); #12335=VECTOR('',#41587,1.); #12336=VECTOR('',#41590,1.00000000000011); #12337=VECTOR('',#41593,1.); #12338=VECTOR('',#41596,0.999999999999962); #12339=VECTOR('',#41597,1.); #12340=VECTOR('',#41598,0.999999999999966); #12341=VECTOR('',#41601,1.); #12342=VECTOR('',#41604,1.00000000000011); #12343=VECTOR('',#41607,1.); #12344=VECTOR('',#41610,1.); #12345=VECTOR('',#41613,1.); #12346=VECTOR('',#41616,1.); #12347=VECTOR('',#41619,1.); #12348=VECTOR('',#41622,0.999999999999965); #12349=VECTOR('',#41623,1.); #12350=VECTOR('',#41624,0.999999999999963); #12351=VECTOR('',#41629,1.00000000000011); #12352=VECTOR('',#41632,1.); #12353=VECTOR('',#41633,1.); #12354=VECTOR('',#41640,1.); #12355=VECTOR('',#41643,1.); #12356=VECTOR('',#41646,1.00000000000039); #12357=VECTOR('',#41649,1.); #12358=VECTOR('',#41650,1.00000000000039); #12359=VECTOR('',#41653,1.); #12360=VECTOR('',#41658,1.); #12361=VECTOR('',#41661,0.999999999999886); #12362=VECTOR('',#41662,1.); #12363=VECTOR('',#41663,0.999999999999886); #12364=VECTOR('',#41666,1.00000000000039); #12365=VECTOR('',#41667,0.999999999999886); #12366=VECTOR('',#41670,1.); #12367=VECTOR('',#41671,0.999999999999886); #12368=VECTOR('',#41674,1.00000000000039); #12369=VECTOR('',#41675,0.999999999999869); #12370=VECTOR('',#41678,1.); #12371=VECTOR('',#41679,0.999999999999869); #12372=VECTOR('',#41682,1.); #12373=VECTOR('',#41687,0.999999999999765); #12374=VECTOR('',#41688,0.999999999999766); #12375=VECTOR('',#41691,1.); #12376=VECTOR('',#41694,0.999999999999869); #12377=VECTOR('',#41697,0.999999999999869); #12378=VECTOR('',#41700,0.999999999999765); #12379=VECTOR('',#41703,1.); #12380=VECTOR('',#41706,0.999999999999766); #12381=VECTOR('',#41709,0.999999999999869); #12382=VECTOR('',#41712,0.999999999999869); #12383=VECTOR('',#41717,1.); #12384=VECTOR('',#41718,1.); #12385=VECTOR('',#41721,1.); #12386=VECTOR('',#41724,1.); #12387=VECTOR('',#41727,1.); #12388=VECTOR('',#41730,1.); #12389=VECTOR('',#41731,1.); #12390=VECTOR('',#41734,1.); #12391=VECTOR('',#41737,1.); #12392=VECTOR('',#41740,1.); #12393=VECTOR('',#41745,1.); #12394=VECTOR('',#41748,1.); #12395=VECTOR('',#41749,1.00000000000039); #12396=VECTOR('',#41754,1.); #12397=VECTOR('',#41757,1.); #12398=VECTOR('',#41758,1.00000000000039); #12399=VECTOR('',#41761,1.); #12400=VECTOR('',#41766,1.); #12401=VECTOR('',#41769,0.999999999999886); #12402=VECTOR('',#41770,1.); #12403=VECTOR('',#41771,0.999999999999886); #12404=VECTOR('',#41774,1.00000000000039); #12405=VECTOR('',#41775,0.999999999999886); #12406=VECTOR('',#41778,1.); #12407=VECTOR('',#41779,0.999999999999886); #12408=VECTOR('',#41782,1.00000000000039); #12409=VECTOR('',#41783,0.999999999999869); #12410=VECTOR('',#41786,1.); #12411=VECTOR('',#41787,0.999999999999869); #12412=VECTOR('',#41790,1.); #12413=VECTOR('',#41795,1.); #12414=VECTOR('',#41798,0.999999999999766); #12415=VECTOR('',#41799,0.999999999999766); #12416=VECTOR('',#41802,0.999999999999869); #12417=VECTOR('',#41803,0.999999999999869); #12418=VECTOR('',#41808,0.999999999999766); #12419=VECTOR('',#41809,0.999999999999765); #12420=VECTOR('',#41812,1.); #12421=VECTOR('',#41815,0.999999999999869); #12422=VECTOR('',#41818,0.999999999999869); #12423=VECTOR('',#41825,1.); #12424=VECTOR('',#41826,1.); #12425=VECTOR('',#41829,1.); #12426=VECTOR('',#41832,1.); #12427=VECTOR('',#41837,1.); #12428=VECTOR('',#41838,1.); #12429=VECTOR('',#41841,1.); #12430=VECTOR('',#41844,1.); #12431=VECTOR('',#41849,1.); #12432=VECTOR('',#41850,1.); #12433=VECTOR('',#41853,1.); #12434=VECTOR('',#41858,1.); #12435=VECTOR('',#41859,1.); #12436=VECTOR('',#41864,1.); #12437=VECTOR('',#41865,1.); #12438=VECTOR('',#41878,1.); #12439=VECTOR('',#41879,1.); #12440=VECTOR('',#41882,1.); #12441=VECTOR('',#41885,1.); #12442=VECTOR('',#41890,1.); #12443=VECTOR('',#41893,1.); #12444=VECTOR('',#41894,1.); #12445=VECTOR('',#41901,1.); #12446=VECTOR('',#41906,1.); #12447=VECTOR('',#41911,1.); #12448=VECTOR('',#41914,1.); #12449=VECTOR('',#41919,1.); #12450=VECTOR('',#41924,1.); #12451=VECTOR('',#41925,1.); #12452=VECTOR('',#41926,1.); #12453=VECTOR('',#41927,1.); #12454=VECTOR('',#41930,1.); #12455=VECTOR('',#41931,1.); #12456=VECTOR('',#41932,1.); #12457=VECTOR('',#41933,1.); #12458=VECTOR('',#41936,1.); #12459=VECTOR('',#41937,1.); #12460=VECTOR('',#41938,1.); #12461=VECTOR('',#41939,1.); #12462=VECTOR('',#41940,1.); #12463=VECTOR('',#41941,1.); #12464=VECTOR('',#41942,1.); #12465=VECTOR('',#41943,1.); #12466=VECTOR('',#41944,1.); #12467=VECTOR('',#41945,1.); #12468=VECTOR('',#41946,1.); #12469=VECTOR('',#41947,1.); #12470=VECTOR('',#41948,1.); #12471=VECTOR('',#41951,1.); #12472=VECTOR('',#41952,1.); #12473=VECTOR('',#41953,1.); #12474=VECTOR('',#41956,1.); #12475=VECTOR('',#41957,1.); #12476=VECTOR('',#41958,1.); #12477=VECTOR('',#41959,1.); #12478=VECTOR('',#41960,1.); #12479=VECTOR('',#41963,1.); #12480=VECTOR('',#41964,1.); #12481=VECTOR('',#41965,1.); #12482=VECTOR('',#41968,1.); #12483=VECTOR('',#41969,1.); #12484=VECTOR('',#41972,1.); #12485=VECTOR('',#41975,1.); #12486=VECTOR('',#41980,1.); #12487=VECTOR('',#41981,1.); #12488=VECTOR('',#41984,1.); #12489=VECTOR('',#41989,1.); #12490=VECTOR('',#41990,1.); #12491=VECTOR('',#41991,1.); #12492=VECTOR('',#41992,1.); #12493=VECTOR('',#41993,1.); #12494=VECTOR('',#41994,1.); #12495=VECTOR('',#41995,1.); #12496=VECTOR('',#41996,1.); #12497=VECTOR('',#41997,1.); #12498=VECTOR('',#41998,1.); #12499=VECTOR('',#41999,1.); #12500=VECTOR('',#42000,1.); #12501=VECTOR('',#42001,1.); #12502=VECTOR('',#42002,1.); #12503=VECTOR('',#42003,1.); #12504=VECTOR('',#42004,1.); #12505=VECTOR('',#42005,1.); #12506=VECTOR('',#42006,1.); #12507=VECTOR('',#42007,1.); #12508=VECTOR('',#42008,1.); #12509=VECTOR('',#42009,1.); #12510=VECTOR('',#42010,1.); #12511=VECTOR('',#42013,1.); #12512=VECTOR('',#42016,1.); #12513=VECTOR('',#42019,1.); #12514=VECTOR('',#42022,1.); #12515=VECTOR('',#42023,1.); #12516=VECTOR('',#42026,1.); #12517=VECTOR('',#42027,1.); #12518=VECTOR('',#42028,1.); #12519=VECTOR('',#42029,1.00000000000064); #12520=VECTOR('',#42030,1.); #12521=VECTOR('',#42031,1.); #12522=VECTOR('',#42032,1.); #12523=VECTOR('',#42033,1.00000000000064); #12524=VECTOR('',#42034,1.); #12525=VECTOR('',#42035,1.00000000000064); #12526=VECTOR('',#42036,1.); #12527=VECTOR('',#42037,1.); #12528=VECTOR('',#42038,1.); #12529=VECTOR('',#42039,1.00000000000064); #12530=VECTOR('',#42040,1.); #12531=VECTOR('',#42041,1.00000000000064); #12532=VECTOR('',#42042,1.); #12533=VECTOR('',#42043,1.); #12534=VECTOR('',#42044,1.); #12535=VECTOR('',#42045,1.00000000000064); #12536=VECTOR('',#42046,1.); #12537=VECTOR('',#42047,1.00000000000064); #12538=VECTOR('',#42048,1.); #12539=VECTOR('',#42049,1.); #12540=VECTOR('',#42050,1.); #12541=VECTOR('',#42051,1.00000000000064); #12542=VECTOR('',#42054,1.); #12543=VECTOR('',#42055,1.); #12544=VECTOR('',#42058,1.); #12545=VECTOR('',#42061,1.); #12546=VECTOR('',#42064,1.); #12547=VECTOR('',#42067,1.); #12548=VECTOR('',#42072,1.); #12549=VECTOR('',#42073,1.); #12550=VECTOR('',#42076,1.); #12551=VECTOR('',#42077,1.); #12552=VECTOR('',#42078,1.); #12553=VECTOR('',#42079,1.); #12554=VECTOR('',#42082,1.); #12555=VECTOR('',#42083,1.); #12556=VECTOR('',#42084,1.); #12557=VECTOR('',#42087,1.); #12558=VECTOR('',#42088,1.); #12559=VECTOR('',#42089,1.); #12560=VECTOR('',#42092,1.00000000000009); #12561=VECTOR('',#42093,1.00000000000009); #12562=VECTOR('',#42094,1.); #12563=VECTOR('',#42097,1.); #12564=VECTOR('',#42098,1.); #12565=VECTOR('',#42099,1.); #12566=VECTOR('',#42100,1.00000000000009); #12567=VECTOR('',#42101,1.); #12568=VECTOR('',#42102,1.); #12569=VECTOR('',#42103,1.); #12570=VECTOR('',#42104,1.); #12571=VECTOR('',#42107,1.); #12572=VECTOR('',#42108,1.); #12573=VECTOR('',#42111,1.00000000000064); #12574=VECTOR('',#42114,0.99999999999998); #12575=VECTOR('',#42117,1.); #12576=VECTOR('',#42120,1.); #12577=VECTOR('',#42123,1.); #12578=VECTOR('',#42126,0.99999999999998); #12579=VECTOR('',#42129,1.00000000000064); #12580=VECTOR('',#42132,1.); #12581=VECTOR('',#42135,1.); #12582=VECTOR('',#42136,1.); #12583=VECTOR('',#42137,1.); #12584=VECTOR('',#42138,1.); #12585=VECTOR('',#42139,1.); #12586=VECTOR('',#42140,1.); #12587=VECTOR('',#42141,1.); #12588=VECTOR('',#42144,1.); #12589=VECTOR('',#42145,1.); #12590=VECTOR('',#42146,1.); #12591=VECTOR('',#42147,1.); #12592=VECTOR('',#42148,1.); #12593=VECTOR('',#42149,1.); #12594=VECTOR('',#42150,1.); #12595=VECTOR('',#42151,1.); #12596=VECTOR('',#42154,1.); #12597=VECTOR('',#42155,1.); #12598=VECTOR('',#42156,1.); #12599=VECTOR('',#42157,1.); #12600=VECTOR('',#42158,1.); #12601=VECTOR('',#42159,1.); #12602=VECTOR('',#42160,1.); #12603=VECTOR('',#42161,1.); #12604=VECTOR('',#42164,1.); #12605=VECTOR('',#42165,1.); #12606=VECTOR('',#42166,1.); #12607=VECTOR('',#42167,1.); #12608=VECTOR('',#42168,1.); #12609=VECTOR('',#42169,1.); #12610=VECTOR('',#42170,1.); #12611=VECTOR('',#42171,1.); #12612=VECTOR('',#42174,1.); #12613=VECTOR('',#42175,1.); #12614=VECTOR('',#42176,1.); #12615=VECTOR('',#42177,1.); #12616=VECTOR('',#42178,1.); #12617=VECTOR('',#42179,1.); #12618=VECTOR('',#42180,1.); #12619=VECTOR('',#42181,1.); #12620=VECTOR('',#42182,1.); #12621=VECTOR('',#42183,1.); #12622=VECTOR('',#42184,1.); #12623=VECTOR('',#42187,0.999999999999686); #12624=VECTOR('',#42188,1.); #12625=VECTOR('',#42189,0.999999999999686); #12626=VECTOR('',#42192,1.); #12627=VECTOR('',#42193,0.999999999999686); #12628=VECTOR('',#42194,1.); #12629=VECTOR('',#42197,1.); #12630=VECTOR('',#42200,1.); #12631=VECTOR('',#42201,1.); #12632=VECTOR('',#42204,0.999999999999686); #12633=VECTOR('',#42205,1.); #12634=VECTOR('',#42208,1.); #12635=VECTOR('',#42211,1.); #12636=VECTOR('',#42216,1.); #12637=VECTOR('',#42217,1.); #12638=VECTOR('',#42220,1.); #12639=VECTOR('',#42223,1.); #12640=VECTOR('',#42228,1.); #12641=VECTOR('',#42229,1.); #12642=VECTOR('',#42232,1.); #12643=VECTOR('',#42235,1.); #12644=VECTOR('',#42240,1.); #12645=VECTOR('',#42241,1.); #12646=VECTOR('',#42244,1.); #12647=VECTOR('',#42247,1.); #12648=VECTOR('',#42252,1.); #12649=VECTOR('',#42253,1.); #12650=VECTOR('',#42256,1.); #12651=VECTOR('',#42259,1.); #12652=VECTOR('',#42264,1.); #12653=VECTOR('',#42265,1.); #12654=VECTOR('',#42270,1.); #12655=VECTOR('',#42273,1.00000000000064); #12656=VECTOR('',#42274,1.); #12657=VECTOR('',#42279,1.); #12658=VECTOR('',#42282,0.99999999999998); #12659=VECTOR('',#42283,1.); #12660=VECTOR('',#42288,1.); #12661=VECTOR('',#42291,1.); #12662=VECTOR('',#42292,1.); #12663=VECTOR('',#42297,1.); #12664=VECTOR('',#42300,1.); #12665=VECTOR('',#42301,1.); #12666=VECTOR('',#42302,1.00000000000009); #12667=VECTOR('',#42303,1.); #12668=VECTOR('',#42304,1.); #12669=VECTOR('',#42305,1.); #12670=VECTOR('',#42308,1.); #12671=VECTOR('',#42311,1.); #12672=VECTOR('',#42314,1.); #12673=VECTOR('',#42317,1.); #12674=VECTOR('',#42322,1.); #12675=VECTOR('',#42325,1.00000000000064); #12676=VECTOR('',#42328,0.99999999999998); #12677=VECTOR('',#42331,1.); #12678=VECTOR('',#42336,1.); #12679=VECTOR('',#42339,1.); #12680=VECTOR('',#42342,1.); #12681=VECTOR('',#42345,1.); #12682=VECTOR('',#42348,1.); #12683=VECTOR('',#42351,1.); #12684=VECTOR('',#42354,1.); #12685=VECTOR('',#42359,1.); #12686=VECTOR('',#42362,1.00000000000064); #12687=VECTOR('',#42365,0.99999999999998); #12688=VECTOR('',#42368,1.); #12689=VECTOR('',#42371,1.); #12690=VECTOR('',#42372,1.); #12691=VECTOR('',#42375,1.); #12692=VECTOR('',#42378,0.99999999999998); #12693=VECTOR('',#42381,1.00000000000064); #12694=VECTOR('',#42384,1.); #12695=VECTOR('',#42387,1.); #12696=VECTOR('',#42388,1.); #12697=VECTOR('',#42393,1.00000000000064); #12698=VECTOR('',#42396,0.99999999999998); #12699=VECTOR('',#42399,1.); #12700=VECTOR('',#42402,1.); #12701=VECTOR('',#42403,1.); #12702=VECTOR('',#42406,1.); #12703=VECTOR('',#42409,0.99999999999998); #12704=VECTOR('',#42412,1.00000000000064); #12705=VECTOR('',#42415,1.); #12706=VECTOR('',#42418,1.); #12707=VECTOR('',#42421,1.); #12708=VECTOR('',#42424,1.); #12709=VECTOR('',#42427,1.); #12710=VECTOR('',#42430,1.); #12711=VECTOR('',#42433,1.); #12712=VECTOR('',#42436,1.); #12713=VECTOR('',#42439,1.); #12714=VECTOR('',#42442,1.); #12715=VECTOR('',#42443,1.); #12716=VECTOR('',#42444,1.); #12717=VECTOR('',#42445,1.); #12718=VECTOR('',#42446,1.00000000000009); #12719=VECTOR('',#42447,1.); #12720=VECTOR('',#42448,1.); #12721=VECTOR('',#42449,1.); #12722=VECTOR('',#42450,1.00000000000009); #12723=VECTOR('',#42453,1.00000000000009); #12724=VECTOR('',#42454,1.); #12725=VECTOR('',#42455,1.); #12726=VECTOR('',#42458,1.); #12727=VECTOR('',#42459,1.); #12728=VECTOR('',#42460,1.); #12729=VECTOR('',#42461,1.00000000000009); #12730=VECTOR('',#42462,1.); #12731=VECTOR('',#42463,1.); #12732=VECTOR('',#42464,1.); #12733=VECTOR('',#42465,1.); #12734=VECTOR('',#42466,1.); #12735=VECTOR('',#42469,1.); #12736=VECTOR('',#42472,1.); #12737=VECTOR('',#42475,1.); #12738=VECTOR('',#42476,1.); #12739=VECTOR('',#42479,1.); #12740=VECTOR('',#42480,1.); #12741=VECTOR('',#42483,1.); #12742=VECTOR('',#42486,1.); #12743=VECTOR('',#42489,1.); #12744=VECTOR('',#42492,1.); #12745=VECTOR('',#42493,1.); #12746=VECTOR('',#42496,1.); #12747=VECTOR('',#42497,1.); #12748=VECTOR('',#42498,1.); #12749=VECTOR('',#42499,1.); #12750=VECTOR('',#42502,1.); #12751=VECTOR('',#42503,1.); #12752=VECTOR('',#42504,1.); #12753=VECTOR('',#42507,1.); #12754=VECTOR('',#42508,1.); #12755=VECTOR('',#42509,1.); #12756=VECTOR('',#42512,1.00000000000009); #12757=VECTOR('',#42513,1.00000000000009); #12758=VECTOR('',#42514,1.); #12759=VECTOR('',#42517,1.); #12760=VECTOR('',#42518,1.); #12761=VECTOR('',#42519,1.); #12762=VECTOR('',#42520,1.00000000000009); #12763=VECTOR('',#42521,1.); #12764=VECTOR('',#42522,1.); #12765=VECTOR('',#42523,1.); #12766=VECTOR('',#42524,1.); #12767=VECTOR('',#42527,1.); #12768=VECTOR('',#42530,1.00000000000064); #12769=VECTOR('',#42533,0.99999999999998); #12770=VECTOR('',#42536,1.); #12771=VECTOR('',#42539,1.); #12772=VECTOR('',#42542,1.); #12773=VECTOR('',#42545,0.99999999999998); #12774=VECTOR('',#42548,1.00000000000064); #12775=VECTOR('',#42551,1.); #12776=VECTOR('',#42554,1.); #12777=VECTOR('',#42555,1.); #12778=VECTOR('',#42560,1.00000000000064); #12779=VECTOR('',#42563,0.99999999999998); #12780=VECTOR('',#42566,1.); #12781=VECTOR('',#42569,1.); #12782=VECTOR('',#42572,1.); #12783=VECTOR('',#42575,0.99999999999998); #12784=VECTOR('',#42578,1.00000000000064); #12785=VECTOR('',#42581,1.); #12786=VECTOR('',#42584,1.); #12787=VECTOR('',#42587,1.); #12788=VECTOR('',#42590,1.); #12789=VECTOR('',#42593,1.); #12790=VECTOR('',#42596,1.); #12791=VECTOR('',#42599,1.); #12792=VECTOR('',#42602,1.); #12793=VECTOR('',#42605,1.); #12794=VECTOR('',#42608,1.); #12795=VECTOR('',#42609,1.00000000000009); #12796=VECTOR('',#42610,1.); #12797=VECTOR('',#42611,1.); #12798=VECTOR('',#42612,1.); #12799=VECTOR('',#42615,1.); #12800=VECTOR('',#42618,1.); #12801=VECTOR('',#42621,1.); #12802=VECTOR('',#42624,1.); #12803=VECTOR('',#42629,1.); #12804=VECTOR('',#42632,1.); #12805=VECTOR('',#42635,1.); #12806=VECTOR('',#42638,1.); #12807=VECTOR('',#42641,1.); #12808=VECTOR('',#42644,1.); #12809=VECTOR('',#42649,1.); #12810=VECTOR('',#42650,1.); #12811=VECTOR('',#42653,1.); #12812=VECTOR('',#42656,1.); #12813=VECTOR('',#42659,1.); #12814=VECTOR('',#42662,1.); #12815=VECTOR('',#42663,1.); #12816=VECTOR('',#42666,1.); #12817=VECTOR('',#42667,1.); #12818=VECTOR('',#42668,1.); #12819=VECTOR('',#42669,1.); #12820=VECTOR('',#42672,1.); #12821=VECTOR('',#42673,1.); #12822=VECTOR('',#42674,1.); #12823=VECTOR('',#42677,1.); #12824=VECTOR('',#42678,1.); #12825=VECTOR('',#42679,1.); #12826=VECTOR('',#42682,1.00000000000009); #12827=VECTOR('',#42683,1.00000000000009); #12828=VECTOR('',#42684,1.); #12829=VECTOR('',#42687,1.); #12830=VECTOR('',#42688,1.); #12831=VECTOR('',#42689,1.); #12832=VECTOR('',#42690,1.00000000000009); #12833=VECTOR('',#42691,1.); #12834=VECTOR('',#42692,1.); #12835=VECTOR('',#42693,1.); #12836=VECTOR('',#42694,1.); #12837=VECTOR('',#42697,1.); #12838=VECTOR('',#42700,1.00000000000064); #12839=VECTOR('',#42703,0.99999999999998); #12840=VECTOR('',#42706,1.); #12841=VECTOR('',#42709,1.); #12842=VECTOR('',#42712,1.); #12843=VECTOR('',#42715,0.99999999999998); #12844=VECTOR('',#42718,1.00000000000064); #12845=VECTOR('',#42721,1.); #12846=VECTOR('',#42724,1.); #12847=VECTOR('',#42725,1.); #12848=VECTOR('',#42730,1.00000000000064); #12849=VECTOR('',#42733,0.99999999999998); #12850=VECTOR('',#42736,1.); #12851=VECTOR('',#42739,1.); #12852=VECTOR('',#42742,1.); #12853=VECTOR('',#42745,0.99999999999998); #12854=VECTOR('',#42748,1.00000000000064); #12855=VECTOR('',#42751,1.); #12856=VECTOR('',#42754,1.); #12857=VECTOR('',#42757,1.); #12858=VECTOR('',#42760,1.); #12859=VECTOR('',#42763,1.); #12860=VECTOR('',#42766,1.); #12861=VECTOR('',#42769,1.); #12862=VECTOR('',#42772,1.); #12863=VECTOR('',#42775,1.); #12864=VECTOR('',#42778,1.); #12865=VECTOR('',#42779,1.00000000000009); #12866=VECTOR('',#42780,1.); #12867=VECTOR('',#42781,1.); #12868=VECTOR('',#42782,1.); #12869=VECTOR('',#42785,1.); #12870=VECTOR('',#42788,1.); #12871=VECTOR('',#42791,1.); #12872=VECTOR('',#42794,1.); #12873=VECTOR('',#42799,1.); #12874=VECTOR('',#42802,1.); #12875=VECTOR('',#42805,1.); #12876=VECTOR('',#42808,1.); #12877=VECTOR('',#42811,1.); #12878=VECTOR('',#42814,1.); #12879=VECTOR('',#42819,1.); #12880=VECTOR('',#42820,1.); #12881=VECTOR('',#42823,1.); #12882=VECTOR('',#42832,1.); #12883=VECTOR('',#42835,1.); #12884=VECTOR('',#42838,1.); #12885=VECTOR('',#42841,1.); #12886=VECTOR('',#42844,1.); #12887=VECTOR('',#42847,1.); #12888=VECTOR('',#42852,1.); #12889=VECTOR('',#42855,1.); #12890=VECTOR('',#42858,1.); #12891=VECTOR('',#42861,1.); #12892=VECTOR('',#42866,1.); #12893=VECTOR('',#42869,1.); #12894=VECTOR('',#42872,1.); #12895=VECTOR('',#42875,1.); #12896=VECTOR('',#42878,1.); #12897=VECTOR('',#42881,1.); #12898=VECTOR('',#42886,1.); #12899=VECTOR('',#42891,1.); #12900=VECTOR('',#42894,1.); #12901=VECTOR('',#42895,1.); #12902=VECTOR('',#42896,1.); #12903=VECTOR('',#42899,1.); #12904=VECTOR('',#42902,1.); #12905=VECTOR('',#42909,1.); #12906=VECTOR('',#42910,1.); #12907=VECTOR('',#42915,1.); #12908=VECTOR('',#42918,1.); #12909=VECTOR('',#42919,1.); #12910=VECTOR('',#42924,1.); #12911=VECTOR('',#42925,1.); #12912=VECTOR('',#42926,1.); #12913=VECTOR('',#42931,1.); #12914=VECTOR('',#42934,1.); #12915=VECTOR('',#42937,1.); #12916=VECTOR('',#42942,1.); #12917=VECTOR('',#42945,1.); #12918=VECTOR('',#42948,1.); #12919=VECTOR('',#42951,1.); #12920=VECTOR('',#42954,1.); #12921=VECTOR('',#42961,1.); #12922=VECTOR('',#42962,1.); #12923=VECTOR('',#42977,1.); #12924=VECTOR('',#42978,1.00000000000064); #12925=VECTOR('',#42979,1.); #12926=VECTOR('',#42980,1.00000000000064); #12927=VECTOR('',#42983,1.); #12928=VECTOR('',#42984,1.); #12929=VECTOR('',#42985,1.); #12930=VECTOR('',#42988,1.); #12931=VECTOR('',#42989,1.); #12932=VECTOR('',#42990,1.); #12933=VECTOR('',#42993,1.00000000000064); #12934=VECTOR('',#42994,1.); #12935=VECTOR('',#42995,1.00000000000064); #12936=VECTOR('',#42996,1.00000000000064); #12937=VECTOR('',#42997,1.); #12938=VECTOR('',#42998,1.00000000000064); #12939=VECTOR('',#42999,1.00000000000064); #12940=VECTOR('',#43000,1.); #12941=VECTOR('',#43001,1.00000000000064); #12942=VECTOR('',#43002,1.); #12943=VECTOR('',#43003,1.00000000000064); #12944=VECTOR('',#43004,1.); #12945=VECTOR('',#43005,1.00000000000064); #12946=VECTOR('',#43006,1.00000000000064); #12947=VECTOR('',#43007,1.); #12948=VECTOR('',#43008,1.00000000000064); #12949=VECTOR('',#43009,1.00000000000064); #12950=VECTOR('',#43010,1.); #12951=VECTOR('',#43011,1.); #12952=VECTOR('',#43012,1.); #12953=VECTOR('',#43013,1.); #12954=VECTOR('',#43014,1.); #12955=VECTOR('',#43015,1.); #12956=VECTOR('',#43016,1.); #12957=VECTOR('',#43017,1.); #12958=VECTOR('',#43018,1.); #12959=VECTOR('',#43019,1.); #12960=VECTOR('',#43020,1.); #12961=VECTOR('',#43021,1.); #12962=VECTOR('',#43024,1.00000000000064); #12963=VECTOR('',#43025,1.00000000000064); #12964=VECTOR('',#43026,1.); #12965=VECTOR('',#43027,1.00000000000064); #12966=VECTOR('',#43028,1.00000000000064); #12967=VECTOR('',#43029,1.); #12968=VECTOR('',#43030,1.00000000000064); #12969=VECTOR('',#43031,1.); #12970=VECTOR('',#43032,1.00000000000064); #12971=VECTOR('',#43033,1.); #12972=VECTOR('',#43034,1.00000000000064); #12973=VECTOR('',#43035,1.00000000000064); #12974=VECTOR('',#43036,1.); #12975=VECTOR('',#43037,1.00000000000064); #12976=VECTOR('',#43038,1.00000000000064); #12977=VECTOR('',#43039,1.); #12978=VECTOR('',#43040,1.00000000000064); #12979=VECTOR('',#43041,1.); #12980=VECTOR('',#43042,1.); #12981=VECTOR('',#43043,1.); #12982=VECTOR('',#43044,1.); #12983=VECTOR('',#43045,1.); #12984=VECTOR('',#43046,1.); #12985=VECTOR('',#43047,1.); #12986=VECTOR('',#43048,1.); #12987=VECTOR('',#43049,1.); #12988=VECTOR('',#43050,1.); #12989=VECTOR('',#43051,1.); #12990=VECTOR('',#43052,1.); #12991=VECTOR('',#43055,1.); #12992=VECTOR('',#43058,1.); #12993=VECTOR('',#43061,1.); #12994=VECTOR('',#43064,1.); #12995=VECTOR('',#43067,1.); #12996=VECTOR('',#43070,1.); #12997=VECTOR('',#43073,1.); #12998=VECTOR('',#43076,1.); #12999=VECTOR('',#43079,1.); #13000=VECTOR('',#43082,1.); #13001=VECTOR('',#43085,1.); #13002=VECTOR('',#43088,1.); #13003=VECTOR('',#43091,1.); #13004=VECTOR('',#43094,1.); #13005=VECTOR('',#43097,1.); #13006=VECTOR('',#43100,1.); #13007=VECTOR('',#43105,1.); #13008=VECTOR('',#43106,1.); #13009=VECTOR('',#43107,1.); #13010=VECTOR('',#43110,1.); #13011=VECTOR('',#43111,1.); #13012=VECTOR('',#43114,1.); #13013=VECTOR('',#43115,1.); #13014=VECTOR('',#43118,1.); #13015=VECTOR('',#43121,1.); #13016=VECTOR('',#43122,1.); #13017=VECTOR('',#43123,1.); #13018=VECTOR('',#43126,1.); #13019=VECTOR('',#43127,1.); #13020=VECTOR('',#43130,1.); #13021=VECTOR('',#43131,1.); #13022=VECTOR('',#43134,1.); #13023=VECTOR('',#43137,1.); #13024=VECTOR('',#43138,1.); #13025=VECTOR('',#43139,1.); #13026=VECTOR('',#43142,1.); #13027=VECTOR('',#43143,1.); #13028=VECTOR('',#43146,1.); #13029=VECTOR('',#43147,1.); #13030=VECTOR('',#43150,1.); #13031=VECTOR('',#43153,1.); #13032=VECTOR('',#43154,1.); #13033=VECTOR('',#43155,1.); #13034=VECTOR('',#43158,1.); #13035=VECTOR('',#43159,1.); #13036=VECTOR('',#43162,1.); #13037=VECTOR('',#43163,1.); #13038=VECTOR('',#43166,1.); #13039=VECTOR('',#43169,1.); #13040=VECTOR('',#43170,1.); #13041=VECTOR('',#43171,1.); #13042=VECTOR('',#43174,1.); #13043=VECTOR('',#43175,1.); #13044=VECTOR('',#43178,1.); #13045=VECTOR('',#43179,1.); #13046=VECTOR('',#43182,1.); #13047=VECTOR('',#43185,1.); #13048=VECTOR('',#43186,1.); #13049=VECTOR('',#43187,1.); #13050=VECTOR('',#43190,1.); #13051=VECTOR('',#43191,1.); #13052=VECTOR('',#43194,1.); #13053=VECTOR('',#43195,1.); #13054=VECTOR('',#43198,1.); #13055=VECTOR('',#43201,1.00000000000065); #13056=VECTOR('',#43202,1.); #13057=VECTOR('',#43203,1.00000000000065); #13058=VECTOR('',#43206,1.); #13059=VECTOR('',#43207,1.00000000000065); #13060=VECTOR('',#43210,1.00000000000065); #13061=VECTOR('',#43211,1.); #13062=VECTOR('',#43214,1.); #13063=VECTOR('',#43217,1.); #13064=VECTOR('',#43218,1.00000000000065); #13065=VECTOR('',#43219,1.00000000000065); #13066=VECTOR('',#43222,1.); #13067=VECTOR('',#43223,1.00000000000065); #13068=VECTOR('',#43226,1.); #13069=VECTOR('',#43227,1.00000000000065); #13070=VECTOR('',#43230,1.); #13071=VECTOR('',#43233,1.); #13072=VECTOR('',#43234,1.00000000000065); #13073=VECTOR('',#43235,1.00000000000065); #13074=VECTOR('',#43238,1.00000000000065); #13075=VECTOR('',#43239,1.); #13076=VECTOR('',#43242,1.); #13077=VECTOR('',#43243,1.00000000000065); #13078=VECTOR('',#43246,1.); #13079=VECTOR('',#43249,1.00000000000065); #13080=VECTOR('',#43250,1.00000000000065); #13081=VECTOR('',#43251,1.); #13082=VECTOR('',#43254,1.); #13083=VECTOR('',#43255,1.00000000000065); #13084=VECTOR('',#43258,1.00000000000065); #13085=VECTOR('',#43259,1.); #13086=VECTOR('',#43262,1.); #13087=VECTOR('',#43265,1.); #13088=VECTOR('',#43266,1.00000000000065); #13089=VECTOR('',#43267,1.00000000000065); #13090=VECTOR('',#43270,1.00000000000065); #13091=VECTOR('',#43271,1.); #13092=VECTOR('',#43274,1.); #13093=VECTOR('',#43275,1.00000000000065); #13094=VECTOR('',#43278,1.); #13095=VECTOR('',#43281,1.); #13096=VECTOR('',#43282,1.00000000000065); #13097=VECTOR('',#43283,1.00000000000065); #13098=VECTOR('',#43286,1.00000000000065); #13099=VECTOR('',#43287,1.); #13100=VECTOR('',#43290,1.); #13101=VECTOR('',#43291,1.00000000000065); #13102=VECTOR('',#43294,1.); #13103=VECTOR('',#43317,1.); #13104=VECTOR('',#43320,1.); #13105=VECTOR('',#43323,1.); #13106=VECTOR('',#43326,1.); #13107=VECTOR('',#43331,1.); #13108=VECTOR('',#43332,1.); #13109=VECTOR('',#43333,1.); #13110=VECTOR('',#43336,1.); #13111=VECTOR('',#43343,1.); #13112=VECTOR('',#43346,1.); #13113=VECTOR('',#43347,1.); #13114=VECTOR('',#43350,1.); #13115=VECTOR('',#43351,1.); #13116=VECTOR('',#43354,1.); #13117=VECTOR('',#43361,1.); #13118=VECTOR('',#43364,1.); #13119=VECTOR('',#43369,1.); #13120=VECTOR('',#43372,1.); #13121=VECTOR('',#43375,1.); #13122=VECTOR('',#43378,1.); #13123=VECTOR('',#43381,1.); #13124=VECTOR('',#43384,1.); #13125=VECTOR('',#43387,1.); #13126=VECTOR('',#43388,1.); #13127=VECTOR('',#43391,1.); #13128=VECTOR('',#43396,1.); #13129=VECTOR('',#43397,1.); #13130=VECTOR('',#43400,1.); #13131=VECTOR('',#43405,1.); #13132=VECTOR('',#43406,1.); #13133=VECTOR('',#43409,1.); #13134=VECTOR('',#43414,1.); #13135=VECTOR('',#43417,1.); #13136=VECTOR('',#43420,1.); #13137=VECTOR('',#43423,1.); #13138=VECTOR('',#43426,1.); #13139=VECTOR('',#43431,1.); #13140=VECTOR('',#43432,1.); #13141=VECTOR('',#43433,1.); #13142=VECTOR('',#43436,1.); #13143=VECTOR('',#43443,1.); #13144=VECTOR('',#43446,1.); #13145=VECTOR('',#43447,1.); #13146=VECTOR('',#43450,1.); #13147=VECTOR('',#43451,1.); #13148=VECTOR('',#43454,1.); #13149=VECTOR('',#43461,1.); #13150=VECTOR('',#43464,1.); #13151=VECTOR('',#43475,10.); #13152=VECTOR('',#43478,10.); #13153=VECTOR('',#43481,10.); #13154=VECTOR('',#43482,10.); #13155=VECTOR('',#43485,10.); #13156=VECTOR('',#43486,10.); #13157=VECTOR('',#43487,10.); #13158=VECTOR('',#43488,10.); #13159=VECTOR('',#43491,10.); #13160=VECTOR('',#43492,10.); #13161=VECTOR('',#43493,10.); #13162=VECTOR('',#43496,10.); #13163=VECTOR('',#43497,10.); #13164=VECTOR('',#43498,10.); #13165=VECTOR('',#43501,10.); #13166=VECTOR('',#43504,10.); #13167=VECTOR('',#43507,10.); #13168=VECTOR('',#43510,10.); #13169=VECTOR('',#43513,10.); #13170=VECTOR('',#43514,10.); #13171=VECTOR('',#43515,10.); #13172=VECTOR('',#43516,10.); #13173=VECTOR('',#43519,10.); #13174=VECTOR('',#43522,10.); #13175=VECTOR('',#43523,10.); #13176=VECTOR('',#43524,10.); #13177=VECTOR('',#43525,10.); #13178=VECTOR('',#43526,10.); #13179=VECTOR('',#43529,10.); #13180=VECTOR('',#43530,10.); #13181=VECTOR('',#43531,10.); #13182=VECTOR('',#43532,10.); #13183=VECTOR('',#43533,10.); #13184=VECTOR('',#43536,10.); #13185=VECTOR('',#43539,10.); #13186=VECTOR('',#43540,10.); #13187=VECTOR('',#43541,10.); #13188=VECTOR('',#43542,10.); #13189=VECTOR('',#43543,10.); #13190=VECTOR('',#43546,10.); #13191=VECTOR('',#43549,10.); #13192=VECTOR('',#43552,10.); #13193=VECTOR('',#43555,10.); #13194=VECTOR('',#43558,10.); #13195=VECTOR('',#43561,10.); #13196=VECTOR('',#43562,10.); #13197=VECTOR('',#43565,10.); #13198=VECTOR('',#43566,10.); #13199=VECTOR('',#43567,10.); #13200=VECTOR('',#43568,10.); #13201=VECTOR('',#43571,10.); #13202=VECTOR('',#43572,10.); #13203=VECTOR('',#43573,10.); #13204=VECTOR('',#43576,10.); #13205=VECTOR('',#43577,10.); #13206=VECTOR('',#43580,10.); #13207=VECTOR('',#43581,10.); #13208=VECTOR('',#43582,10.); #13209=VECTOR('',#43583,10.); #13210=VECTOR('',#43586,10.); #13211=VECTOR('',#43587,10.); #13212=VECTOR('',#43588,10.); #13213=VECTOR('',#43591,10.); #13214=VECTOR('',#43592,10.); #13215=VECTOR('',#43593,10.); #13216=VECTOR('',#43596,10.); #13217=VECTOR('',#43597,10.); #13218=VECTOR('',#43598,10.); #13219=VECTOR('',#43601,10.); #13220=VECTOR('',#43602,10.); #13221=VECTOR('',#43603,10.); #13222=VECTOR('',#43606,10.); #13223=VECTOR('',#43607,10.); #13224=VECTOR('',#43608,10.); #13225=VECTOR('',#43611,10.); #13226=VECTOR('',#43612,10.); #13227=VECTOR('',#43613,10.); #13228=VECTOR('',#43616,10.); #13229=VECTOR('',#43617,10.); #13230=VECTOR('',#43620,10.); #13231=VECTOR('',#43621,10.); #13232=VECTOR('',#43622,10.); #13233=VECTOR('',#43623,10.); #13234=VECTOR('',#43624,10.); #13235=VECTOR('',#43625,10.); #13236=VECTOR('',#43626,10.); #13237=VECTOR('',#43629,10.); #13238=VECTOR('',#43630,10.); #13239=VECTOR('',#43631,10.); #13240=VECTOR('',#43634,10.); #13241=VECTOR('',#43635,10.); #13242=VECTOR('',#43636,10.); #13243=VECTOR('',#43639,10.); #13244=VECTOR('',#43640,10.); #13245=VECTOR('',#43641,10.); #13246=VECTOR('',#43642,10.); #13247=VECTOR('',#43643,10.); #13248=VECTOR('',#43644,10.); #13249=VECTOR('',#43645,10.); #13250=VECTOR('',#43646,10.); #13251=VECTOR('',#43647,10.); #13252=VECTOR('',#43650,10.); #13253=VECTOR('',#43651,10.); #13254=VECTOR('',#43652,10.); #13255=VECTOR('',#43655,10.); #13256=VECTOR('',#43656,10.); #13257=VECTOR('',#43657,10.); #13258=VECTOR('',#43660,10.); #13259=VECTOR('',#43661,10.); #13260=VECTOR('',#43664,10.); #13261=VECTOR('',#43665,10.); #13262=VECTOR('',#43666,10.); #13263=VECTOR('',#43667,10.); #13264=VECTOR('',#43668,10.); #13265=VECTOR('',#43669,10.); #13266=VECTOR('',#43670,10.); #13267=VECTOR('',#43671,10.); #13268=VECTOR('',#43672,10.); #13269=VECTOR('',#43673,10.); #13270=VECTOR('',#43674,10.); #13271=VECTOR('',#43675,10.); #13272=VECTOR('',#43676,10.); #13273=VECTOR('',#43677,10.); #13274=VECTOR('',#43678,10.); #13275=VECTOR('',#43679,10.); #13276=VECTOR('',#43682,10.); #13277=VECTOR('',#43683,10.); #13278=VECTOR('',#43684,10.); #13279=VECTOR('',#43687,10.); #13280=VECTOR('',#43688,10.); #13281=VECTOR('',#43695,10.); #13282=VECTOR('',#43698,10.); #13283=VECTOR('',#43701,10.); #13284=VECTOR('',#43704,10.); #13285=VECTOR('',#43705,10.); #13286=VECTOR('',#43706,10.); #13287=VECTOR('',#43707,10.); #13288=VECTOR('',#43708,10.); #13289=VECTOR('',#43709,10.); #13290=VECTOR('',#43714,10.); #13291=VECTOR('',#43715,10.); #13292=VECTOR('',#43716,10.); #13293=VECTOR('',#43717,10.); #13294=VECTOR('',#43720,10.); #13295=VECTOR('',#43721,10.); #13296=VECTOR('',#43722,10.); #13297=VECTOR('',#43725,10.); #13298=VECTOR('',#43726,10.); #13299=VECTOR('',#43727,10.); #13300=VECTOR('',#43728,10.); #13301=VECTOR('',#43729,10.); #13302=VECTOR('',#43730,10.); #13303=VECTOR('',#43731,10.); #13304=VECTOR('',#43732,10.); #13305=VECTOR('',#43735,10.); #13306=VECTOR('',#43736,10.); #13307=VECTOR('',#43737,10.); #13308=VECTOR('',#43740,10.); #13309=VECTOR('',#43741,10.); #13310=VECTOR('',#43742,10.); #13311=VECTOR('',#43743,10.); #13312=VECTOR('',#43744,10.); #13313=VECTOR('',#43745,10.); #13314=VECTOR('',#43746,10.); #13315=VECTOR('',#43747,10.); #13316=VECTOR('',#43748,10.); #13317=VECTOR('',#43749,10.); #13318=VECTOR('',#43750,10.); #13319=VECTOR('',#43751,10.); #13320=VECTOR('',#43752,10.); #13321=VECTOR('',#43753,10.); #13322=VECTOR('',#43754,10.); #13323=VECTOR('',#43755,10.); #13324=VECTOR('',#43756,10.); #13325=VECTOR('',#43757,10.); #13326=VECTOR('',#43758,10.); #13327=VECTOR('',#43759,10.); #13328=VECTOR('',#43760,10.); #13329=VECTOR('',#43761,10.); #13330=VECTOR('',#43762,10.); #13331=VECTOR('',#43763,10.); #13332=VECTOR('',#43766,10.); #13333=VECTOR('',#43767,10.); #13334=VECTOR('',#43768,10.); #13335=VECTOR('',#43769,10.); #13336=VECTOR('',#43770,10.); #13337=VECTOR('',#43771,10.); #13338=VECTOR('',#43772,10.); #13339=VECTOR('',#43773,10.); #13340=VECTOR('',#43776,10.); #13341=VECTOR('',#43777,10.); #13342=VECTOR('',#43780,10.); #13343=VECTOR('',#43781,10.); #13344=VECTOR('',#43782,10.); #13345=VECTOR('',#43783,10.); #13346=VECTOR('',#43786,10.); #13347=VECTOR('',#43787,10.); #13348=VECTOR('',#43788,10.); #13349=VECTOR('',#43789,10.); #13350=VECTOR('',#43792,10.); #13351=VECTOR('',#43793,10.); #13352=VECTOR('',#43794,10.); #13353=VECTOR('',#43795,10.); #13354=VECTOR('',#43798,10.); #13355=VECTOR('',#43799,10.); #13356=VECTOR('',#43800,10.); #13357=VECTOR('',#43801,10.); #13358=VECTOR('',#43804,10.); #13359=VECTOR('',#43805,10.); #13360=VECTOR('',#43806,10.); #13361=VECTOR('',#43807,10.); #13362=VECTOR('',#43810,10.); #13363=VECTOR('',#43811,10.); #13364=VECTOR('',#43812,10.); #13365=VECTOR('',#43813,10.); #13366=VECTOR('',#43816,10.); #13367=VECTOR('',#43817,10.); #13368=VECTOR('',#43818,10.); #13369=VECTOR('',#43819,10.); #13370=VECTOR('',#43822,10.); #13371=VECTOR('',#43823,10.); #13372=VECTOR('',#43824,10.); #13373=VECTOR('',#43825,10.); #13374=VECTOR('',#43828,10.); #13375=VECTOR('',#43829,10.); #13376=VECTOR('',#43830,10.); #13377=VECTOR('',#43831,10.); #13378=VECTOR('',#43834,10.); #13379=VECTOR('',#43835,10.); #13380=VECTOR('',#43836,10.); #13381=VECTOR('',#43837,10.); #13382=VECTOR('',#43840,10.); #13383=VECTOR('',#43841,10.); #13384=VECTOR('',#43842,10.); #13385=VECTOR('',#43843,10.); #13386=VECTOR('',#43846,10.); #13387=VECTOR('',#43847,10.); #13388=VECTOR('',#43848,10.); #13389=VECTOR('',#43849,10.); #13390=VECTOR('',#43852,10.); #13391=VECTOR('',#43853,10.); #13392=VECTOR('',#43854,10.); #13393=VECTOR('',#43855,10.); #13394=VECTOR('',#43858,10.); #13395=VECTOR('',#43859,10.); #13396=VECTOR('',#43860,10.); #13397=VECTOR('',#43861,10.); #13398=VECTOR('',#43864,10.); #13399=VECTOR('',#43865,10.); #13400=VECTOR('',#43866,10.); #13401=VECTOR('',#43867,10.); #13402=VECTOR('',#43870,10.); #13403=VECTOR('',#43871,10.); #13404=VECTOR('',#43872,10.); #13405=VECTOR('',#43873,10.); #13406=VECTOR('',#43876,10.); #13407=VECTOR('',#43877,10.); #13408=VECTOR('',#43878,10.); #13409=VECTOR('',#43879,10.); #13410=VECTOR('',#43882,10.); #13411=VECTOR('',#43883,10.); #13412=VECTOR('',#43884,10.); #13413=VECTOR('',#43885,10.); #13414=VECTOR('',#43888,10.); #13415=VECTOR('',#43889,10.); #13416=VECTOR('',#43890,10.); #13417=VECTOR('',#43891,10.); #13418=VECTOR('',#43894,10.); #13419=VECTOR('',#43895,10.); #13420=VECTOR('',#43896,10.); #13421=VECTOR('',#43897,10.); #13422=VECTOR('',#43900,10.); #13423=VECTOR('',#43901,10.); #13424=VECTOR('',#43902,10.); #13425=VECTOR('',#43903,10.); #13426=VECTOR('',#43906,10.); #13427=VECTOR('',#43907,10.); #13428=VECTOR('',#43908,10.); #13429=VECTOR('',#43909,10.); #13430=VECTOR('',#43912,10.); #13431=VECTOR('',#43913,10.); #13432=VECTOR('',#43914,10.); #13433=VECTOR('',#43915,10.); #13434=VECTOR('',#43918,10.); #13435=VECTOR('',#43919,10.); #13436=VECTOR('',#43920,10.); #13437=VECTOR('',#43921,10.); #13438=VECTOR('',#43924,10.); #13439=VECTOR('',#43925,10.); #13440=VECTOR('',#43926,10.); #13441=VECTOR('',#43927,10.); #13442=VECTOR('',#43930,10.); #13443=VECTOR('',#43931,10.); #13444=VECTOR('',#43932,10.); #13445=VECTOR('',#43933,10.); #13446=VECTOR('',#43936,10.); #13447=VECTOR('',#43937,10.); #13448=VECTOR('',#43938,10.); #13449=VECTOR('',#43939,10.); #13450=VECTOR('',#43942,10.); #13451=VECTOR('',#43943,10.); #13452=VECTOR('',#43944,10.); #13453=VECTOR('',#43945,10.); #13454=VECTOR('',#43948,10.); #13455=VECTOR('',#43949,10.); #13456=VECTOR('',#43950,10.); #13457=VECTOR('',#43951,10.); #13458=VECTOR('',#43954,10.); #13459=VECTOR('',#43955,10.); #13460=VECTOR('',#43956,10.); #13461=VECTOR('',#43957,10.); #13462=VECTOR('',#43960,10.); #13463=VECTOR('',#43961,10.); #13464=VECTOR('',#43962,10.); #13465=VECTOR('',#43963,10.); #13466=VECTOR('',#43966,10.); #13467=VECTOR('',#43967,10.); #13468=VECTOR('',#43968,10.); #13469=VECTOR('',#43969,10.); #13470=VECTOR('',#43972,10.); #13471=VECTOR('',#43973,10.); #13472=VECTOR('',#43974,10.); #13473=VECTOR('',#43975,10.); #13474=VECTOR('',#43978,10.); #13475=VECTOR('',#43979,10.); #13476=VECTOR('',#43980,10.); #13477=VECTOR('',#43981,10.); #13478=VECTOR('',#43984,10.); #13479=VECTOR('',#43985,10.); #13480=VECTOR('',#43986,10.); #13481=VECTOR('',#43987,10.); #13482=VECTOR('',#43990,10.); #13483=VECTOR('',#43991,10.); #13484=VECTOR('',#43992,10.); #13485=VECTOR('',#43993,10.); #13486=VECTOR('',#43996,10.); #13487=VECTOR('',#43997,10.); #13488=VECTOR('',#43998,10.); #13489=VECTOR('',#43999,10.); #13490=VECTOR('',#44002,10.); #13491=VECTOR('',#44003,10.); #13492=VECTOR('',#44004,10.); #13493=VECTOR('',#44005,10.); #13494=VECTOR('',#44008,10.); #13495=VECTOR('',#44009,10.); #13496=VECTOR('',#44010,10.); #13497=VECTOR('',#44011,10.); #13498=VECTOR('',#44014,10.); #13499=VECTOR('',#44015,10.); #13500=VECTOR('',#44016,10.); #13501=VECTOR('',#44017,10.); #13502=VECTOR('',#44020,10.); #13503=VECTOR('',#44021,10.); #13504=VECTOR('',#44022,10.); #13505=VECTOR('',#44023,10.); #13506=VECTOR('',#44026,10.); #13507=VECTOR('',#44027,10.); #13508=VECTOR('',#44028,10.); #13509=VECTOR('',#44029,10.); #13510=VECTOR('',#44032,10.); #13511=VECTOR('',#44033,10.); #13512=VECTOR('',#44034,10.); #13513=VECTOR('',#44035,10.); #13514=VECTOR('',#44038,10.); #13515=VECTOR('',#44039,10.); #13516=VECTOR('',#44040,10.); #13517=VECTOR('',#44041,10.); #13518=VECTOR('',#44044,10.); #13519=VECTOR('',#44045,10.); #13520=VECTOR('',#44046,10.); #13521=VECTOR('',#44047,10.); #13522=VECTOR('',#44050,10.); #13523=VECTOR('',#44051,10.); #13524=VECTOR('',#44052,10.); #13525=VECTOR('',#44053,10.); #13526=VECTOR('',#44056,10.); #13527=VECTOR('',#44057,10.); #13528=VECTOR('',#44058,10.); #13529=VECTOR('',#44059,10.); #13530=VECTOR('',#44062,10.); #13531=VECTOR('',#44063,10.); #13532=VECTOR('',#44064,10.); #13533=VECTOR('',#44065,10.); #13534=VECTOR('',#44068,10.); #13535=VECTOR('',#44069,10.); #13536=VECTOR('',#44070,10.); #13537=VECTOR('',#44071,10.); #13538=VECTOR('',#44074,10.); #13539=VECTOR('',#44075,10.); #13540=VECTOR('',#44076,10.); #13541=VECTOR('',#44077,10.); #13542=VECTOR('',#44080,10.); #13543=VECTOR('',#44081,10.); #13544=VECTOR('',#44082,10.); #13545=VECTOR('',#44083,10.); #13546=VECTOR('',#44086,10.); #13547=VECTOR('',#44087,10.); #13548=VECTOR('',#44088,10.); #13549=VECTOR('',#44089,10.); #13550=VECTOR('',#44092,10.); #13551=VECTOR('',#44093,10.); #13552=VECTOR('',#44094,10.); #13553=VECTOR('',#44095,10.); #13554=VECTOR('',#44098,10.); #13555=VECTOR('',#44099,10.); #13556=VECTOR('',#44100,10.); #13557=VECTOR('',#44101,10.); #13558=VECTOR('',#44104,10.); #13559=VECTOR('',#44105,10.); #13560=VECTOR('',#44106,10.); #13561=VECTOR('',#44107,10.); #13562=VECTOR('',#44110,10.); #13563=VECTOR('',#44111,10.); #13564=VECTOR('',#44112,10.); #13565=VECTOR('',#44113,10.); #13566=VECTOR('',#44116,10.); #13567=VECTOR('',#44117,10.); #13568=VECTOR('',#44118,10.); #13569=VECTOR('',#44119,10.); #13570=VECTOR('',#44122,10.); #13571=VECTOR('',#44123,10.); #13572=VECTOR('',#44124,10.); #13573=VECTOR('',#44125,10.); #13574=VECTOR('',#44128,10.); #13575=VECTOR('',#44129,10.); #13576=VECTOR('',#44130,10.); #13577=VECTOR('',#44131,10.); #13578=VECTOR('',#44134,10.); #13579=VECTOR('',#44135,10.); #13580=VECTOR('',#44136,10.); #13581=VECTOR('',#44137,10.); #13582=VECTOR('',#44140,10.); #13583=VECTOR('',#44141,10.); #13584=VECTOR('',#44142,10.); #13585=VECTOR('',#44143,10.); #13586=VECTOR('',#44146,10.); #13587=VECTOR('',#44147,10.); #13588=VECTOR('',#44148,10.); #13589=VECTOR('',#44149,10.); #13590=VECTOR('',#44152,10.); #13591=VECTOR('',#44153,10.); #13592=VECTOR('',#44154,10.); #13593=VECTOR('',#44155,10.); #13594=VECTOR('',#44158,10.); #13595=VECTOR('',#44159,10.); #13596=VECTOR('',#44160,10.); #13597=VECTOR('',#44161,10.); #13598=VECTOR('',#44164,10.); #13599=VECTOR('',#44165,10.); #13600=VECTOR('',#44166,10.); #13601=VECTOR('',#44167,10.); #13602=VECTOR('',#44170,10.); #13603=VECTOR('',#44171,10.); #13604=VECTOR('',#44172,10.); #13605=VECTOR('',#44173,10.); #13606=VECTOR('',#44176,10.); #13607=VECTOR('',#44177,10.); #13608=VECTOR('',#44178,10.); #13609=VECTOR('',#44179,10.); #13610=VECTOR('',#44182,10.); #13611=VECTOR('',#44183,10.); #13612=VECTOR('',#44184,10.); #13613=VECTOR('',#44185,10.); #13614=VECTOR('',#44188,10.); #13615=VECTOR('',#44189,10.); #13616=VECTOR('',#44190,10.); #13617=VECTOR('',#44191,10.); #13618=VECTOR('',#44194,10.); #13619=VECTOR('',#44195,10.); #13620=VECTOR('',#44196,10.); #13621=VECTOR('',#44197,10.); #13622=VECTOR('',#44200,10.); #13623=VECTOR('',#44201,10.); #13624=VECTOR('',#44202,10.); #13625=VECTOR('',#44203,10.); #13626=VECTOR('',#44206,10.); #13627=VECTOR('',#44207,10.); #13628=VECTOR('',#44210,10.); #13629=VECTOR('',#44211,10.); #13630=VECTOR('',#44212,10.); #13631=VECTOR('',#44213,10.); #13632=VECTOR('',#44214,10.); #13633=VECTOR('',#44217,10.); #13634=VECTOR('',#44218,10.); #13635=VECTOR('',#44219,10.); #13636=VECTOR('',#44220,10.); #13637=VECTOR('',#44223,10.); #13638=VECTOR('',#44224,10.); #13639=VECTOR('',#44225,10.); #13640=VECTOR('',#44226,10.); #13641=VECTOR('',#44229,10.); #13642=VECTOR('',#44230,10.); #13643=VECTOR('',#44231,10.); #13644=VECTOR('',#44232,10.); #13645=VECTOR('',#44235,10.); #13646=VECTOR('',#44236,10.); #13647=VECTOR('',#44283,10.); #13648=VECTOR('',#44286,10.); #13649=VECTOR('',#44289,10.); #13650=VECTOR('',#44290,10.); #13651=VECTOR('',#44293,10.); #13652=VECTOR('',#44294,10.); #13653=VECTOR('',#44299,10.); #13654=VECTOR('',#44302,10.); #13655=VECTOR('',#44305,10.); #13656=VECTOR('',#44306,10.); #13657=VECTOR('',#44309,10.); #13658=VECTOR('',#44310,10.); #13659=VECTOR('',#44313,10.); #13660=VECTOR('',#44318,10.); #13661=VECTOR('',#44321,10.); #13662=VECTOR('',#44326,10.); #13663=VECTOR('',#44331,10.); #13664=VECTOR('',#44334,10.); #13665=VECTOR('',#44337,10.); #13666=VECTOR('',#44338,10.); #13667=VECTOR('',#44341,10.); #13668=VECTOR('',#44342,10.); #13669=VECTOR('',#44347,10.); #13670=VECTOR('',#44350,10.); #13671=VECTOR('',#44353,10.); #13672=VECTOR('',#44354,10.); #13673=VECTOR('',#44357,10.); #13674=VECTOR('',#44360,10.); #13675=VECTOR('',#44363,10.); #13676=VECTOR('',#44366,10.); #13677=VECTOR('',#44369,10.); #13678=VECTOR('',#44372,10.); #13679=VECTOR('',#44381,10.); #13680=VECTOR('',#44384,10.); #13681=VECTOR('',#44389,10.); #13682=VECTOR('',#44390,10.); #13683=VECTOR('',#44391,10.); #13684=VECTOR('',#44394,10.); #13685=VECTOR('',#44399,10.); #13686=VECTOR('',#44400,10.); #13687=VECTOR('',#44403,10.); #13688=VECTOR('',#44408,10.); #13689=VECTOR('',#44409,10.); #13690=VECTOR('',#44410,10.); #13691=VECTOR('',#44417,10.); #13692=VECTOR('',#44418,10.); #13693=VECTOR('',#44421,10.); #13694=VECTOR('',#44424,10.); #13695=VECTOR('',#44427,10.); #13696=VECTOR('',#44430,10.); #13697=VECTOR('',#44435,10.); #13698=VECTOR('',#44436,10.); #13699=VECTOR('',#44439,10.); #13700=VECTOR('',#44444,10.); #13701=VECTOR('',#44455,0.85); #13702=VECTOR('',#44458,0.85); #13703=VECTOR('',#44461,10.); #13704=VECTOR('',#44462,10.); #13705=VECTOR('',#44463,10.); #13706=VECTOR('',#44466,10.); #13707=VECTOR('',#44467,10.); #13708=VECTOR('',#44470,10.); #13709=VECTOR('',#44471,10.); #13710=VECTOR('',#44474,10.); #13711=VECTOR('',#44479,0.85); #13712=VECTOR('',#44482,0.85); #13713=VECTOR('',#44485,10.); #13714=VECTOR('',#44486,10.); #13715=VECTOR('',#44487,10.); #13716=VECTOR('',#44490,10.); #13717=VECTOR('',#44491,10.); #13718=VECTOR('',#44494,10.); #13719=VECTOR('',#44495,10.); #13720=VECTOR('',#44498,10.); #13721=VECTOR('',#44509,1.1); #13722=VECTOR('',#44524,1.09999999999999); #13723=VECTOR('',#44539,1.09999999999999); #13724=VECTOR('',#44546,10.); #13725=VECTOR('',#44547,10.); #13726=VECTOR('',#44548,10.); #13727=VECTOR('',#44549,10.); #13728=VECTOR('',#44552,10.); #13729=VECTOR('',#44553,10.); #13730=VECTOR('',#44554,10.); #13731=VECTOR('',#44555,10.); #13732=VECTOR('',#44558,10.); #13733=VECTOR('',#44559,10.); #13734=VECTOR('',#44560,10.); #13735=VECTOR('',#44561,10.); #13736=VECTOR('',#44564,10.); #13737=VECTOR('',#44565,10.); #13738=VECTOR('',#44568,10.); #13739=VECTOR('',#44571,10.); #13740=VECTOR('',#44574,10.); #13741=VECTOR('',#44577,10.); #13742=VECTOR('',#44580,10.); #13743=VECTOR('',#44581,10.); #13744=VECTOR('',#44582,10.); #13745=VECTOR('',#44583,10.); #13746=VECTOR('',#44584,10.); #13747=VECTOR('',#44589,10.); #13748=VECTOR('',#44592,10.); #13749=VECTOR('',#44605,10.); #13750=VECTOR('',#44606,10.); #13751=VECTOR('',#44615,10.); #13752=VECTOR('',#44620,10.); #13753=VECTOR('',#44623,10.); #13754=VECTOR('',#44624,10.); #13755=VECTOR('',#44627,10.); #13756=VECTOR('',#44628,10.); #13757=VECTOR('',#44629,10.); #13758=VECTOR('',#44632,10.); #13759=VECTOR('',#44635,10.); #13760=VECTOR('',#44648,10.); #13761=VECTOR('',#44657,10.); #13762=VECTOR('',#44660,10.); #13763=VECTOR('',#44661,10.); #13764=VECTOR('',#44662,10.); #13765=VECTOR('',#44665,10.); #13766=VECTOR('',#44670,10.); #13767=VECTOR('',#44671,10.); #13768=VECTOR('',#44672,10.); #13769=VECTOR('',#44673,10.); #13770=VECTOR('',#44676,10.); #13771=VECTOR('',#44677,10.); #13772=VECTOR('',#44678,10.); #13773=VECTOR('',#44681,10.); #13774=VECTOR('',#44682,10.); #13775=VECTOR('',#44683,10.); #13776=VECTOR('',#44686,10.); #13777=VECTOR('',#44687,10.); #13778=VECTOR('',#44690,10.); #13779=VECTOR('',#44691,10.); #13780=VECTOR('',#44692,10.); #13781=VECTOR('',#44695,10.); #13782=VECTOR('',#44696,10.); #13783=VECTOR('',#44699,10.); #13784=VECTOR('',#44700,10.); #13785=VECTOR('',#44701,10.); #13786=VECTOR('',#44702,10.); #13787=VECTOR('',#44703,10.); #13788=VECTOR('',#44704,10.); #13789=VECTOR('',#44705,10.); #13790=VECTOR('',#44708,10.); #13791=VECTOR('',#44709,10.); #13792=VECTOR('',#44710,10.); #13793=VECTOR('',#44713,10.); #13794=VECTOR('',#44714,10.); #13795=VECTOR('',#44717,10.); #13796=VECTOR('',#44718,10.); #13797=VECTOR('',#44721,10.); #13798=VECTOR('',#44724,10.); #13799=VECTOR('',#44725,10.); #13800=VECTOR('',#44726,10.); #13801=VECTOR('',#44729,10.); #13802=VECTOR('',#44730,10.); #13803=VECTOR('',#44733,10.); #13804=VECTOR('',#44738,10.); #13805=VECTOR('',#44739,10.); #13806=VECTOR('',#44746,10.); #13807=VECTOR('',#44747,10.); #13808=VECTOR('',#44754,10.); #13809=VECTOR('',#44755,10.); #13810=VECTOR('',#44758,10.); #13811=VECTOR('',#44761,10.); #13812=VECTOR('',#44762,10.); #13813=VECTOR('',#44765,10.); #13814=VECTOR('',#44768,10.); #13815=VECTOR('',#44769,10.); #13816=VECTOR('',#44770,10.); #13817=VECTOR('',#44773,10.); #13818=VECTOR('',#44774,10.); #13819=VECTOR('',#44775,10.); #13820=VECTOR('',#44778,10.); #13821=VECTOR('',#44779,10.); #13822=VECTOR('',#44782,10.); #13823=VECTOR('',#44783,10.); #13824=VECTOR('',#44784,10.); #13825=VECTOR('',#44787,10.); #13826=VECTOR('',#44788,10.); #13827=VECTOR('',#44789,10.); #13828=VECTOR('',#44792,10.); #13829=VECTOR('',#44793,10.); #13830=VECTOR('',#44796,10.); #13831=VECTOR('',#44797,10.); #13832=VECTOR('',#44798,10.); #13833=VECTOR('',#44801,10.); #13834=VECTOR('',#44802,10.); #13835=VECTOR('',#44803,10.); #13836=VECTOR('',#44806,10.); #13837=VECTOR('',#44807,10.); #13838=VECTOR('',#44810,10.); #13839=VECTOR('',#44811,10.); #13840=VECTOR('',#44812,10.); #13841=VECTOR('',#44815,10.); #13842=VECTOR('',#44816,10.); #13843=VECTOR('',#44817,10.); #13844=VECTOR('',#44820,10.); #13845=VECTOR('',#44821,10.); #13846=VECTOR('',#44826,10.); #13847=VECTOR('',#44829,10.); #13848=VECTOR('',#44836,10.); #13849=VECTOR('',#44837,10.); #13850=VECTOR('',#44844,10.); #13851=VECTOR('',#44851,10.); #13852=VECTOR('',#44852,10.); #13853=VECTOR('',#44857,10.); #13854=VECTOR('',#44862,10.); #13855=VECTOR('',#44865,10.); #13856=VECTOR('',#44868,10.); #13857=VECTOR('',#44871,10.); #13858=VECTOR('',#44876,10.); #13859=VECTOR('',#44881,10.); #13860=VECTOR('',#44882,10.); #13861=VECTOR('',#44885,10.); #13862=VECTOR('',#44890,10.); #13863=VECTOR('',#44895,10.); #13864=VECTOR('',#44900,10.); #13865=VECTOR('',#44901,10.); #13866=VECTOR('',#44904,10.); #13867=VECTOR('',#44907,10.); #13868=VECTOR('',#44908,10.); #13869=VECTOR('',#44909,10.); #13870=VECTOR('',#44910,10.); #13871=VECTOR('',#44911,10.); #13872=VECTOR('',#44912,10.); #13873=VECTOR('',#44913,10.); #13874=VECTOR('',#44916,10.); #13875=VECTOR('',#44921,10.); #13876=VECTOR('',#44922,10.); #13877=VECTOR('',#44923,10.); #13878=VECTOR('',#44924,10.); #13879=VECTOR('',#44925,10.); #13880=VECTOR('',#44926,10.); #13881=VECTOR('',#44929,10.); #13882=VECTOR('',#44930,10.); #13883=VECTOR('',#44933,10.); #13884=VECTOR('',#44934,10.); #13885=VECTOR('',#44935,10.); #13886=VECTOR('',#44936,10.); #13887=VECTOR('',#44939,10.); #13888=VECTOR('',#44942,10.); #13889=VECTOR('',#44943,10.); #13890=VECTOR('',#44946,10.); #13891=VECTOR('',#44949,10.); #13892=VECTOR('',#44956,10.); #13893=VECTOR('',#44961,10.); #13894=VECTOR('',#44964,10.); #13895=VECTOR('',#44967,10.); #13896=VECTOR('',#44970,10.); #13897=VECTOR('',#44973,10.); #13898=VECTOR('',#44978,10.); #13899=VECTOR('',#44979,10.); #13900=VECTOR('',#44982,10.); #13901=VECTOR('',#44983,10.); #13902=VECTOR('',#44988,10.); #13903=VECTOR('',#44991,10.); #13904=VECTOR('',#44996,10.); #13905=VECTOR('',#44999,10.); #13906=VECTOR('',#45000,10.); #13907=VECTOR('',#45003,10.); #13908=VECTOR('',#45006,10.); #13909=VECTOR('',#45011,10.); #13910=VERTEX_POINT('',#45048); #13911=VERTEX_POINT('',#45049); #13912=VERTEX_POINT('',#45051); #13913=VERTEX_POINT('',#45053); #13914=VERTEX_POINT('',#45057); #13915=VERTEX_POINT('',#45059); #13916=VERTEX_POINT('',#45063); #13917=VERTEX_POINT('',#45065); #13918=VERTEX_POINT('',#45069); #13919=VERTEX_POINT('',#45071); #13920=VERTEX_POINT('',#45073); #13921=VERTEX_POINT('',#45075); #13922=VERTEX_POINT('',#45077); #13923=VERTEX_POINT('',#45079); #13924=VERTEX_POINT('',#45081); #13925=VERTEX_POINT('',#45083); #13926=VERTEX_POINT('',#45087); #13927=VERTEX_POINT('',#45089); #13928=VERTEX_POINT('',#45091); #13929=VERTEX_POINT('',#45093); #13930=VERTEX_POINT('',#45095); #13931=VERTEX_POINT('',#45097); #13932=VERTEX_POINT('',#45099); #13933=VERTEX_POINT('',#45101); #13934=VERTEX_POINT('',#45105); #13935=VERTEX_POINT('',#45106); #13936=VERTEX_POINT('',#45108); #13937=VERTEX_POINT('',#45111); #13938=VERTEX_POINT('',#45113); #13939=VERTEX_POINT('',#45115); #13940=VERTEX_POINT('',#45117); #13941=VERTEX_POINT('',#45119); #13942=VERTEX_POINT('',#45121); #13943=VERTEX_POINT('',#45123); #13944=VERTEX_POINT('',#45129); #13945=VERTEX_POINT('',#45133); #13946=VERTEX_POINT('',#45135); #13947=VERTEX_POINT('',#45151); #13948=VERTEX_POINT('',#45155); #13949=VERTEX_POINT('',#45156); #13950=VERTEX_POINT('',#45158); #13951=VERTEX_POINT('',#45161); #13952=VERTEX_POINT('',#45163); #13953=VERTEX_POINT('',#45165); #13954=VERTEX_POINT('',#45169); #13955=VERTEX_POINT('',#45173); #13956=VERTEX_POINT('',#45177); #13957=VERTEX_POINT('',#45179); #13958=VERTEX_POINT('',#45183); #13959=VERTEX_POINT('',#45185); #13960=VERTEX_POINT('',#45189); #13961=VERTEX_POINT('',#45191); #13962=VERTEX_POINT('',#45195); #13963=VERTEX_POINT('',#45197); #13964=VERTEX_POINT('',#45201); #13965=VERTEX_POINT('',#45203); #13966=VERTEX_POINT('',#45207); #13967=VERTEX_POINT('',#45209); #13968=VERTEX_POINT('',#45213); #13969=VERTEX_POINT('',#45217); #13970=VERTEX_POINT('',#45221); #13971=VERTEX_POINT('',#45223); #13972=VERTEX_POINT('',#45225); #13973=VERTEX_POINT('',#45227); #13974=VERTEX_POINT('',#45229); #13975=VERTEX_POINT('',#45231); #13976=VERTEX_POINT('',#45233); #13977=VERTEX_POINT('',#45235); #13978=VERTEX_POINT('',#45237); #13979=VERTEX_POINT('',#45243); #13980=VERTEX_POINT('',#45245); #13981=VERTEX_POINT('',#45247); #13982=VERTEX_POINT('',#45249); #13983=VERTEX_POINT('',#45251); #13984=VERTEX_POINT('',#45253); #13985=VERTEX_POINT('',#45255); #13986=VERTEX_POINT('',#45257); #13987=VERTEX_POINT('',#45259); #13988=VERTEX_POINT('',#45263); #13989=VERTEX_POINT('',#45267); #13990=VERTEX_POINT('',#45271); #13991=VERTEX_POINT('',#45275); #13992=VERTEX_POINT('',#45277); #13993=VERTEX_POINT('',#45279); #13994=VERTEX_POINT('',#45281); #13995=VERTEX_POINT('',#45283); #13996=VERTEX_POINT('',#45285); #13997=VERTEX_POINT('',#45287); #13998=VERTEX_POINT('',#45289); #13999=VERTEX_POINT('',#45291); #14000=VERTEX_POINT('',#45297); #14001=VERTEX_POINT('',#45301); #14002=VERTEX_POINT('',#45303); #14003=VERTEX_POINT('',#45305); #14004=VERTEX_POINT('',#45307); #14005=VERTEX_POINT('',#45309); #14006=VERTEX_POINT('',#45311); #14007=VERTEX_POINT('',#45313); #14008=VERTEX_POINT('',#45315); #14009=VERTEX_POINT('',#45317); #14010=VERTEX_POINT('',#45324); #14011=VERTEX_POINT('',#45326); #14012=VERTEX_POINT('',#45328); #14013=VERTEX_POINT('',#45330); #14014=VERTEX_POINT('',#45332); #14015=VERTEX_POINT('',#45334); #14016=VERTEX_POINT('',#45336); #14017=VERTEX_POINT('',#45338); #14018=VERTEX_POINT('',#45340); #14019=VERTEX_POINT('',#45346); #14020=VERTEX_POINT('',#45348); #14021=VERTEX_POINT('',#45350); #14022=VERTEX_POINT('',#45352); #14023=VERTEX_POINT('',#45354); #14024=VERTEX_POINT('',#45356); #14025=VERTEX_POINT('',#45358); #14026=VERTEX_POINT('',#45360); #14027=VERTEX_POINT('',#45362); #14028=VERTEX_POINT('',#45369); #14029=VERTEX_POINT('',#45373); #14030=VERTEX_POINT('',#45375); #14031=VERTEX_POINT('',#45377); #14032=VERTEX_POINT('',#45379); #14033=VERTEX_POINT('',#45381); #14034=VERTEX_POINT('',#45383); #14035=VERTEX_POINT('',#45385); #14036=VERTEX_POINT('',#45387); #14037=VERTEX_POINT('',#45391); #14038=VERTEX_POINT('',#45393); #14039=VERTEX_POINT('',#45395); #14040=VERTEX_POINT('',#45397); #14041=VERTEX_POINT('',#45399); #14042=VERTEX_POINT('',#45401); #14043=VERTEX_POINT('',#45403); #14044=VERTEX_POINT('',#45405); #14045=VERTEX_POINT('',#45407); #14046=VERTEX_POINT('',#45416); #14047=VERTEX_POINT('',#45420); #14048=VERTEX_POINT('',#45424); #14049=VERTEX_POINT('',#45428); #14050=VERTEX_POINT('',#45430); #14051=VERTEX_POINT('',#45432); #14052=VERTEX_POINT('',#45434); #14053=VERTEX_POINT('',#45436); #14054=VERTEX_POINT('',#45439); #14055=VERTEX_POINT('',#45442); #14056=VERTEX_POINT('',#45467); #14057=VERTEX_POINT('',#45471); #14058=VERTEX_POINT('',#45475); #14059=VERTEX_POINT('',#45479); #14060=VERTEX_POINT('',#45481); #14061=VERTEX_POINT('',#45485); #14062=VERTEX_POINT('',#45487); #14063=VERTEX_POINT('',#45491); #14064=VERTEX_POINT('',#45493); #14065=VERTEX_POINT('',#45497); #14066=VERTEX_POINT('',#45499); #14067=VERTEX_POINT('',#45503); #14068=VERTEX_POINT('',#45505); #14069=VERTEX_POINT('',#45509); #14070=VERTEX_POINT('',#45511); #14071=VERTEX_POINT('',#45515); #14072=VERTEX_POINT('',#45517); #14073=VERTEX_POINT('',#45521); #14074=VERTEX_POINT('',#45523); #14075=VERTEX_POINT('',#45561); #14076=VERTEX_POINT('',#45567); #14077=VERTEX_POINT('',#45571); #14078=VERTEX_POINT('',#45572); #14079=VERTEX_POINT('',#45575); #14080=VERTEX_POINT('',#45577); #14081=VERTEX_POINT('',#45579); #14082=VERTEX_POINT('',#45581); #14083=VERTEX_POINT('',#45583); #14084=VERTEX_POINT('',#45585); #14085=VERTEX_POINT('',#45587); #14086=VERTEX_POINT('',#45591); #14087=VERTEX_POINT('',#45597); #14088=VERTEX_POINT('',#45607); #14089=VERTEX_POINT('',#45609); #14090=VERTEX_POINT('',#45611); #14091=VERTEX_POINT('',#45613); #14092=VERTEX_POINT('',#45615); #14093=VERTEX_POINT('',#45617); #14094=VERTEX_POINT('',#45619); #14095=VERTEX_POINT('',#45621); #14096=VERTEX_POINT('',#45623); #14097=VERTEX_POINT('',#45627); #14098=VERTEX_POINT('',#45629); #14099=VERTEX_POINT('',#45631); #14100=VERTEX_POINT('',#45633); #14101=VERTEX_POINT('',#45635); #14102=VERTEX_POINT('',#45637); #14103=VERTEX_POINT('',#45639); #14104=VERTEX_POINT('',#45641); #14105=VERTEX_POINT('',#45643); #14106=VERTEX_POINT('',#45650); #14107=VERTEX_POINT('',#45654); #14108=VERTEX_POINT('',#45656); #14109=VERTEX_POINT('',#45658); #14110=VERTEX_POINT('',#45660); #14111=VERTEX_POINT('',#45662); #14112=VERTEX_POINT('',#45664); #14113=VERTEX_POINT('',#45666); #14114=VERTEX_POINT('',#45668); #14115=VERTEX_POINT('',#45672); #14116=VERTEX_POINT('',#45674); #14117=VERTEX_POINT('',#45676); #14118=VERTEX_POINT('',#45678); #14119=VERTEX_POINT('',#45680); #14120=VERTEX_POINT('',#45682); #14121=VERTEX_POINT('',#45684); #14122=VERTEX_POINT('',#45686); #14123=VERTEX_POINT('',#45688); #14124=VERTEX_POINT('',#45697); #14125=VERTEX_POINT('',#45699); #14126=VERTEX_POINT('',#45701); #14127=VERTEX_POINT('',#45703); #14128=VERTEX_POINT('',#45705); #14129=VERTEX_POINT('',#45707); #14130=VERTEX_POINT('',#45709); #14131=VERTEX_POINT('',#45711); #14132=VERTEX_POINT('',#45713); #14133=VERTEX_POINT('',#45717); #14134=VERTEX_POINT('',#45719); #14135=VERTEX_POINT('',#45721); #14136=VERTEX_POINT('',#45723); #14137=VERTEX_POINT('',#45725); #14138=VERTEX_POINT('',#45727); #14139=VERTEX_POINT('',#45729); #14140=VERTEX_POINT('',#45731); #14141=VERTEX_POINT('',#45733); #14142=VERTEX_POINT('',#45740); #14143=VERTEX_POINT('',#45744); #14144=VERTEX_POINT('',#45746); #14145=VERTEX_POINT('',#45748); #14146=VERTEX_POINT('',#45750); #14147=VERTEX_POINT('',#45752); #14148=VERTEX_POINT('',#45754); #14149=VERTEX_POINT('',#45756); #14150=VERTEX_POINT('',#45758); #14151=VERTEX_POINT('',#45762); #14152=VERTEX_POINT('',#45764); #14153=VERTEX_POINT('',#45766); #14154=VERTEX_POINT('',#45768); #14155=VERTEX_POINT('',#45770); #14156=VERTEX_POINT('',#45772); #14157=VERTEX_POINT('',#45774); #14158=VERTEX_POINT('',#45776); #14159=VERTEX_POINT('',#45778); #14160=VERTEX_POINT('',#45859); #14161=VERTEX_POINT('',#45860); #14162=VERTEX_POINT('',#45862); #14163=VERTEX_POINT('',#45864); #14164=VERTEX_POINT('',#45868); #14165=VERTEX_POINT('',#45869); #14166=VERTEX_POINT('',#45874); #14167=VERTEX_POINT('',#45876); #14168=VERTEX_POINT('',#45881); #14169=VERTEX_POINT('',#45883); #14170=VERTEX_POINT('',#45885); #14171=VERTEX_POINT('',#45887); #14172=VERTEX_POINT('',#45889); #14173=VERTEX_POINT('',#45891); #14174=VERTEX_POINT('',#45893); #14175=VERTEX_POINT('',#45895); #14176=VERTEX_POINT('',#45897); #14177=VERTEX_POINT('',#45899); #14178=VERTEX_POINT('',#45901); #14179=VERTEX_POINT('',#45903); #14180=VERTEX_POINT('',#45905); #14181=VERTEX_POINT('',#45907); #14182=VERTEX_POINT('',#45909); #14183=VERTEX_POINT('',#45911); #14184=VERTEX_POINT('',#45913); #14185=VERTEX_POINT('',#45915); #14186=VERTEX_POINT('',#45917); #14187=VERTEX_POINT('',#45919); #14188=VERTEX_POINT('',#45921); #14189=VERTEX_POINT('',#45923); #14190=VERTEX_POINT('',#45925); #14191=VERTEX_POINT('',#45927); #14192=VERTEX_POINT('',#45929); #14193=VERTEX_POINT('',#45931); #14194=VERTEX_POINT('',#45933); #14195=VERTEX_POINT('',#45935); #14196=VERTEX_POINT('',#45937); #14197=VERTEX_POINT('',#45941); #14198=VERTEX_POINT('',#45943); #14199=VERTEX_POINT('',#45945); #14200=VERTEX_POINT('',#45947); #14201=VERTEX_POINT('',#45949); #14202=VERTEX_POINT('',#45951); #14203=VERTEX_POINT('',#45953); #14204=VERTEX_POINT('',#45955); #14205=VERTEX_POINT('',#45957); #14206=VERTEX_POINT('',#45959); #14207=VERTEX_POINT('',#45961); #14208=VERTEX_POINT('',#45963); #14209=VERTEX_POINT('',#45965); #14210=VERTEX_POINT('',#45967); #14211=VERTEX_POINT('',#45969); #14212=VERTEX_POINT('',#45971); #14213=VERTEX_POINT('',#45973); #14214=VERTEX_POINT('',#45975); #14215=VERTEX_POINT('',#45977); #14216=VERTEX_POINT('',#45979); #14217=VERTEX_POINT('',#45981); #14218=VERTEX_POINT('',#45983); #14219=VERTEX_POINT('',#45985); #14220=VERTEX_POINT('',#45987); #14221=VERTEX_POINT('',#45989); #14222=VERTEX_POINT('',#45991); #14223=VERTEX_POINT('',#45993); #14224=VERTEX_POINT('',#45995); #14225=VERTEX_POINT('',#45997); #14226=VERTEX_POINT('',#46061); #14227=VERTEX_POINT('',#46063); #14228=VERTEX_POINT('',#46067); #14229=VERTEX_POINT('',#46069); #14230=VERTEX_POINT('',#46073); #14231=VERTEX_POINT('',#46075); #14232=VERTEX_POINT('',#46079); #14233=VERTEX_POINT('',#46080); #14234=VERTEX_POINT('',#46082); #14235=VERTEX_POINT('',#46084); #14236=VERTEX_POINT('',#46088); #14237=VERTEX_POINT('',#46089); #14238=VERTEX_POINT('',#46091); #14239=VERTEX_POINT('',#46093); #14240=VERTEX_POINT('',#46097); #14241=VERTEX_POINT('',#46098); #14242=VERTEX_POINT('',#46100); #14243=VERTEX_POINT('',#46102); #14244=VERTEX_POINT('',#46106); #14245=VERTEX_POINT('',#46107); #14246=VERTEX_POINT('',#46109); #14247=VERTEX_POINT('',#46111); #14248=VERTEX_POINT('',#46115); #14249=VERTEX_POINT('',#46116); #14250=VERTEX_POINT('',#46118); #14251=VERTEX_POINT('',#46120); #14252=VERTEX_POINT('',#46124); #14253=VERTEX_POINT('',#46126); #14254=VERTEX_POINT('',#46130); #14255=VERTEX_POINT('',#46132); #14256=VERTEX_POINT('',#46136); #14257=VERTEX_POINT('',#46138); #14258=VERTEX_POINT('',#46142); #14259=VERTEX_POINT('',#46144); #14260=VERTEX_POINT('',#46148); #14261=VERTEX_POINT('',#46150); #14262=VERTEX_POINT('',#46154); #14263=VERTEX_POINT('',#46156); #14264=VERTEX_POINT('',#46160); #14265=VERTEX_POINT('',#46162); #14266=VERTEX_POINT('',#46166); #14267=VERTEX_POINT('',#46168); #14268=VERTEX_POINT('',#46172); #14269=VERTEX_POINT('',#46174); #14270=VERTEX_POINT('',#46178); #14271=VERTEX_POINT('',#46180); #14272=VERTEX_POINT('',#46184); #14273=VERTEX_POINT('',#46186); #14274=VERTEX_POINT('',#46190); #14275=VERTEX_POINT('',#46192); #14276=VERTEX_POINT('',#46196); #14277=VERTEX_POINT('',#46197); #14278=VERTEX_POINT('',#46199); #14279=VERTEX_POINT('',#46201); #14280=VERTEX_POINT('',#46205); #14281=VERTEX_POINT('',#46206); #14282=VERTEX_POINT('',#46208); #14283=VERTEX_POINT('',#46210); #14284=VERTEX_POINT('',#46214); #14285=VERTEX_POINT('',#46215); #14286=VERTEX_POINT('',#46217); #14287=VERTEX_POINT('',#46219); #14288=VERTEX_POINT('',#46223); #14289=VERTEX_POINT('',#46224); #14290=VERTEX_POINT('',#46226); #14291=VERTEX_POINT('',#46228); #14292=VERTEX_POINT('',#46232); #14293=VERTEX_POINT('',#46233); #14294=VERTEX_POINT('',#46235); #14295=VERTEX_POINT('',#46237); #14296=VERTEX_POINT('',#46241); #14297=VERTEX_POINT('',#46242); #14298=VERTEX_POINT('',#46244); #14299=VERTEX_POINT('',#46246); #14300=VERTEX_POINT('',#46250); #14301=VERTEX_POINT('',#46251); #14302=VERTEX_POINT('',#46253); #14303=VERTEX_POINT('',#46255); #14304=VERTEX_POINT('',#46259); #14305=VERTEX_POINT('',#46260); #14306=VERTEX_POINT('',#46262); #14307=VERTEX_POINT('',#46264); #14308=VERTEX_POINT('',#46268); #14309=VERTEX_POINT('',#46269); #14310=VERTEX_POINT('',#46271); #14311=VERTEX_POINT('',#46273); #14312=VERTEX_POINT('',#46277); #14313=VERTEX_POINT('',#46278); #14314=VERTEX_POINT('',#46280); #14315=VERTEX_POINT('',#46282); #14316=VERTEX_POINT('',#46286); #14317=VERTEX_POINT('',#46287); #14318=VERTEX_POINT('',#46289); #14319=VERTEX_POINT('',#46291); #14320=VERTEX_POINT('',#46295); #14321=VERTEX_POINT('',#46296); #14322=VERTEX_POINT('',#46298); #14323=VERTEX_POINT('',#46300); #14324=VERTEX_POINT('',#46304); #14325=VERTEX_POINT('',#46305); #14326=VERTEX_POINT('',#46307); #14327=VERTEX_POINT('',#46309); #14328=VERTEX_POINT('',#46313); #14329=VERTEX_POINT('',#46314); #14330=VERTEX_POINT('',#46316); #14331=VERTEX_POINT('',#46318); #14332=VERTEX_POINT('',#46322); #14333=VERTEX_POINT('',#46323); #14334=VERTEX_POINT('',#46325); #14335=VERTEX_POINT('',#46327); #14336=VERTEX_POINT('',#46331); #14337=VERTEX_POINT('',#46333); #14338=VERTEX_POINT('',#46337); #14339=VERTEX_POINT('',#46339); #14340=VERTEX_POINT('',#46343); #14341=VERTEX_POINT('',#46345); #14342=VERTEX_POINT('',#46349); #14343=VERTEX_POINT('',#46351); #14344=VERTEX_POINT('',#46355); #14345=VERTEX_POINT('',#46357); #14346=VERTEX_POINT('',#46361); #14347=VERTEX_POINT('',#46363); #14348=VERTEX_POINT('',#46367); #14349=VERTEX_POINT('',#46369); #14350=VERTEX_POINT('',#46373); #14351=VERTEX_POINT('',#46375); #14352=VERTEX_POINT('',#46379); #14353=VERTEX_POINT('',#46380); #14354=VERTEX_POINT('',#46382); #14355=VERTEX_POINT('',#46384); #14356=VERTEX_POINT('',#46388); #14357=VERTEX_POINT('',#46390); #14358=VERTEX_POINT('',#46394); #14359=VERTEX_POINT('',#46395); #14360=VERTEX_POINT('',#46397); #14361=VERTEX_POINT('',#46399); #14362=VERTEX_POINT('',#46403); #14363=VERTEX_POINT('',#46404); #14364=VERTEX_POINT('',#46406); #14365=VERTEX_POINT('',#46408); #14366=VERTEX_POINT('',#46412); #14367=VERTEX_POINT('',#46413); #14368=VERTEX_POINT('',#46418); #14369=VERTEX_POINT('',#46419); #14370=VERTEX_POINT('',#46424); #14371=VERTEX_POINT('',#46425); #14372=VERTEX_POINT('',#46430); #14373=VERTEX_POINT('',#46431); #14374=VERTEX_POINT('',#46436); #14375=VERTEX_POINT('',#46437); #14376=VERTEX_POINT('',#46442); #14377=VERTEX_POINT('',#46443); #14378=VERTEX_POINT('',#46448); #14379=VERTEX_POINT('',#46449); #14380=VERTEX_POINT('',#46454); #14381=VERTEX_POINT('',#46455); #14382=VERTEX_POINT('',#46460); #14383=VERTEX_POINT('',#46461); #14384=VERTEX_POINT('',#46466); #14385=VERTEX_POINT('',#46467); #14386=VERTEX_POINT('',#46472); #14387=VERTEX_POINT('',#46473); #14388=VERTEX_POINT('',#46478); #14389=VERTEX_POINT('',#46479); #14390=VERTEX_POINT('',#46484); #14391=VERTEX_POINT('',#46485); #14392=VERTEX_POINT('',#46490); #14393=VERTEX_POINT('',#46491); #14394=VERTEX_POINT('',#46496); #14395=VERTEX_POINT('',#46497); #14396=VERTEX_POINT('',#46502); #14397=VERTEX_POINT('',#46503); #14398=VERTEX_POINT('',#46508); #14399=VERTEX_POINT('',#46509); #14400=VERTEX_POINT('',#46514); #14401=VERTEX_POINT('',#46515); #14402=VERTEX_POINT('',#46520); #14403=VERTEX_POINT('',#46521); #14404=VERTEX_POINT('',#46526); #14405=VERTEX_POINT('',#46527); #14406=VERTEX_POINT('',#46532); #14407=VERTEX_POINT('',#46533); #14408=VERTEX_POINT('',#46538); #14409=VERTEX_POINT('',#46540); #14410=VERTEX_POINT('',#46542); #14411=VERTEX_POINT('',#46544); #14412=VERTEX_POINT('',#46546); #14413=VERTEX_POINT('',#46550); #14414=VERTEX_POINT('',#46552); #14415=VERTEX_POINT('',#46554); #14416=VERTEX_POINT('',#46556); #14417=VERTEX_POINT('',#46558); #14418=VERTEX_POINT('',#46562); #14419=VERTEX_POINT('',#46563); #14420=VERTEX_POINT('',#46565); #14421=VERTEX_POINT('',#46568); #14422=VERTEX_POINT('',#46570); #14423=VERTEX_POINT('',#46572); #14424=VERTEX_POINT('',#46574); #14425=VERTEX_POINT('',#46578); #14426=VERTEX_POINT('',#46579); #14427=VERTEX_POINT('',#46581); #14428=VERTEX_POINT('',#46583); #14429=VERTEX_POINT('',#46585); #14430=VERTEX_POINT('',#46587); #14431=VERTEX_POINT('',#46590); #14432=VERTEX_POINT('',#46594); #14433=VERTEX_POINT('',#46595); #14434=VERTEX_POINT('',#46598); #14435=VERTEX_POINT('',#46600); #14436=VERTEX_POINT('',#46602); #14437=VERTEX_POINT('',#46606); #14438=VERTEX_POINT('',#46607); #14439=VERTEX_POINT('',#46609); #14440=VERTEX_POINT('',#46611); #14441=VERTEX_POINT('',#46613); #14442=VERTEX_POINT('',#46618); #14443=VERTEX_POINT('',#46620); #14444=VERTEX_POINT('',#46622); #14445=VERTEX_POINT('',#46624); #14446=VERTEX_POINT('',#46626); #14447=VERTEX_POINT('',#46630); #14448=VERTEX_POINT('',#46632); #14449=VERTEX_POINT('',#46634); #14450=VERTEX_POINT('',#46636); #14451=VERTEX_POINT('',#46638); #14452=VERTEX_POINT('',#46642); #14453=VERTEX_POINT('',#46643); #14454=VERTEX_POINT('',#46645); #14455=VERTEX_POINT('',#46647); #14456=VERTEX_POINT('',#46649); #14457=VERTEX_POINT('',#46651); #14458=VERTEX_POINT('',#46653); #14459=VERTEX_POINT('',#46658); #14460=VERTEX_POINT('',#46659); #14461=VERTEX_POINT('',#46662); #14462=VERTEX_POINT('',#46664); #14463=VERTEX_POINT('',#46666); #14464=VERTEX_POINT('',#46668); #14465=VERTEX_POINT('',#46670); #14466=VERTEX_POINT('',#46674); #14467=VERTEX_POINT('',#46675); #14468=VERTEX_POINT('',#46678); #14469=VERTEX_POINT('',#46680); #14470=VERTEX_POINT('',#46682); #14471=VERTEX_POINT('',#46686); #14472=VERTEX_POINT('',#46687); #14473=VERTEX_POINT('',#46689); #14474=VERTEX_POINT('',#46691); #14475=VERTEX_POINT('',#46693); #14476=VERTEX_POINT('',#46698); #14477=VERTEX_POINT('',#46700); #14478=VERTEX_POINT('',#46702); #14479=VERTEX_POINT('',#46704); #14480=VERTEX_POINT('',#46706); #14481=VERTEX_POINT('',#46710); #14482=VERTEX_POINT('',#46712); #14483=VERTEX_POINT('',#46714); #14484=VERTEX_POINT('',#46716); #14485=VERTEX_POINT('',#46718); #14486=VERTEX_POINT('',#46722); #14487=VERTEX_POINT('',#46724); #14488=VERTEX_POINT('',#46726); #14489=VERTEX_POINT('',#46728); #14490=VERTEX_POINT('',#46730); #14491=VERTEX_POINT('',#46734); #14492=VERTEX_POINT('',#46736); #14493=VERTEX_POINT('',#46738); #14494=VERTEX_POINT('',#46740); #14495=VERTEX_POINT('',#46742); #14496=VERTEX_POINT('',#46746); #14497=VERTEX_POINT('',#46748); #14498=VERTEX_POINT('',#46750); #14499=VERTEX_POINT('',#46752); #14500=VERTEX_POINT('',#46754); #14501=VERTEX_POINT('',#46758); #14502=VERTEX_POINT('',#46760); #14503=VERTEX_POINT('',#46762); #14504=VERTEX_POINT('',#46764); #14505=VERTEX_POINT('',#46766); #14506=VERTEX_POINT('',#46770); #14507=VERTEX_POINT('',#46771); #14508=VERTEX_POINT('',#46773); #14509=VERTEX_POINT('',#46775); #14510=VERTEX_POINT('',#46777); #14511=VERTEX_POINT('',#46779); #14512=VERTEX_POINT('',#46781); #14513=VERTEX_POINT('',#46786); #14514=VERTEX_POINT('',#46787); #14515=VERTEX_POINT('',#46790); #14516=VERTEX_POINT('',#46792); #14517=VERTEX_POINT('',#46794); #14518=VERTEX_POINT('',#46796); #14519=VERTEX_POINT('',#46798); #14520=VERTEX_POINT('',#46802); #14521=VERTEX_POINT('',#46803); #14522=VERTEX_POINT('',#46806); #14523=VERTEX_POINT('',#46808); #14524=VERTEX_POINT('',#46810); #14525=VERTEX_POINT('',#46814); #14526=VERTEX_POINT('',#46815); #14527=VERTEX_POINT('',#46817); #14528=VERTEX_POINT('',#46819); #14529=VERTEX_POINT('',#46821); #14530=VERTEX_POINT('',#46826); #14531=VERTEX_POINT('',#46828); #14532=VERTEX_POINT('',#46830); #14533=VERTEX_POINT('',#46832); #14534=VERTEX_POINT('',#46834); #14535=VERTEX_POINT('',#46838); #14536=VERTEX_POINT('',#46840); #14537=VERTEX_POINT('',#46842); #14538=VERTEX_POINT('',#46844); #14539=VERTEX_POINT('',#46846); #14540=VERTEX_POINT('',#46850); #14541=VERTEX_POINT('',#46851); #14542=VERTEX_POINT('',#46854); #14543=VERTEX_POINT('',#46856); #14544=VERTEX_POINT('',#46858); #14545=VERTEX_POINT('',#46862); #14546=VERTEX_POINT('',#46863); #14547=VERTEX_POINT('',#46865); #14548=VERTEX_POINT('',#46867); #14549=VERTEX_POINT('',#46869); #14550=VERTEX_POINT('',#46874); #14551=VERTEX_POINT('',#46876); #14552=VERTEX_POINT('',#46878); #14553=VERTEX_POINT('',#46880); #14554=VERTEX_POINT('',#46882); #14555=VERTEX_POINT('',#46886); #14556=VERTEX_POINT('',#46888); #14557=VERTEX_POINT('',#46890); #14558=VERTEX_POINT('',#46892); #14559=VERTEX_POINT('',#46894); #14560=VERTEX_POINT('',#46898); #14561=VERTEX_POINT('',#46899); #14562=VERTEX_POINT('',#46902); #14563=VERTEX_POINT('',#46904); #14564=VERTEX_POINT('',#46906); #14565=VERTEX_POINT('',#46910); #14566=VERTEX_POINT('',#46911); #14567=VERTEX_POINT('',#46913); #14568=VERTEX_POINT('',#46915); #14569=VERTEX_POINT('',#46917); #14570=VERTEX_POINT('',#46922); #14571=VERTEX_POINT('',#46924); #14572=VERTEX_POINT('',#46926); #14573=VERTEX_POINT('',#46928); #14574=VERTEX_POINT('',#46930); #14575=VERTEX_POINT('',#46934); #14576=VERTEX_POINT('',#46936); #14577=VERTEX_POINT('',#46938); #14578=VERTEX_POINT('',#46940); #14579=VERTEX_POINT('',#46942); #14580=VERTEX_POINT('',#46946); #14581=VERTEX_POINT('',#46949); #14582=VERTEX_POINT('',#46951); #14583=VERTEX_POINT('',#46953); #14584=VERTEX_POINT('',#46957); #14585=VERTEX_POINT('',#46959); #14586=VERTEX_POINT('',#46961); #14587=VERTEX_POINT('',#46963); #14588=VERTEX_POINT('',#46968); #14589=VERTEX_POINT('',#46970); #14590=VERTEX_POINT('',#46972); #14591=VERTEX_POINT('',#46974); #14592=VERTEX_POINT('',#46976); #14593=VERTEX_POINT('',#46980); #14594=VERTEX_POINT('',#46982); #14595=VERTEX_POINT('',#46984); #14596=VERTEX_POINT('',#46986); #14597=VERTEX_POINT('',#46988); #14598=VERTEX_POINT('',#46992); #14599=VERTEX_POINT('',#46993); #14600=VERTEX_POINT('',#46995); #14601=VERTEX_POINT('',#46998); #14602=VERTEX_POINT('',#47000); #14603=VERTEX_POINT('',#47002); #14604=VERTEX_POINT('',#47004); #14605=VERTEX_POINT('',#47008); #14606=VERTEX_POINT('',#47009); #14607=VERTEX_POINT('',#47011); #14608=VERTEX_POINT('',#47013); #14609=VERTEX_POINT('',#47015); #14610=VERTEX_POINT('',#47017); #14611=VERTEX_POINT('',#47020); #14612=VERTEX_POINT('',#47024); #14613=VERTEX_POINT('',#47026); #14614=VERTEX_POINT('',#47028); #14615=VERTEX_POINT('',#47030); #14616=VERTEX_POINT('',#47032); #14617=VERTEX_POINT('',#47036); #14618=VERTEX_POINT('',#47038); #14619=VERTEX_POINT('',#47040); #14620=VERTEX_POINT('',#47042); #14621=VERTEX_POINT('',#47044); #14622=VERTEX_POINT('',#47048); #14623=VERTEX_POINT('',#47050); #14624=VERTEX_POINT('',#47052); #14625=VERTEX_POINT('',#47056); #14626=VERTEX_POINT('',#47058); #14627=VERTEX_POINT('',#47060); #14628=VERTEX_POINT('',#47064); #14629=VERTEX_POINT('',#47065); #14630=VERTEX_POINT('',#47067); #14631=VERTEX_POINT('',#47069); #14632=VERTEX_POINT('',#47073); #14633=VERTEX_POINT('',#47076); #14634=VERTEX_POINT('',#47079); #14635=VERTEX_POINT('',#47082); #14636=VERTEX_POINT('',#47184); #14637=VERTEX_POINT('',#47186); #14638=VERTEX_POINT('',#47190); #14639=VERTEX_POINT('',#47192); #14640=VERTEX_POINT('',#47196); #14641=VERTEX_POINT('',#47198); #14642=VERTEX_POINT('',#47202); #14643=VERTEX_POINT('',#47204); #14644=VERTEX_POINT('',#47208); #14645=VERTEX_POINT('',#47209); #14646=VERTEX_POINT('',#47214); #14647=VERTEX_POINT('',#47215); #14648=VERTEX_POINT('',#47217); #14649=VERTEX_POINT('',#47219); #14650=VERTEX_POINT('',#47223); #14651=VERTEX_POINT('',#47225); #14652=VERTEX_POINT('',#47229); #14653=VERTEX_POINT('',#47231); #14654=VERTEX_POINT('',#47235); #14655=VERTEX_POINT('',#47237); #14656=VERTEX_POINT('',#47241); #14657=VERTEX_POINT('',#47243); #14658=VERTEX_POINT('',#47247); #14659=VERTEX_POINT('',#47249); #14660=VERTEX_POINT('',#47253); #14661=VERTEX_POINT('',#47255); #14662=VERTEX_POINT('',#47259); #14663=VERTEX_POINT('',#47261); #14664=VERTEX_POINT('',#47265); #14665=VERTEX_POINT('',#47267); #14666=VERTEX_POINT('',#47271); #14667=VERTEX_POINT('',#47273); #14668=VERTEX_POINT('',#47277); #14669=VERTEX_POINT('',#47279); #14670=VERTEX_POINT('',#47283); #14671=VERTEX_POINT('',#47285); #14672=VERTEX_POINT('',#47289); #14673=VERTEX_POINT('',#47291); #14674=VERTEX_POINT('',#47295); #14675=VERTEX_POINT('',#47297); #14676=VERTEX_POINT('',#47301); #14677=VERTEX_POINT('',#47303); #14678=VERTEX_POINT('',#47307); #14679=VERTEX_POINT('',#47309); #14680=VERTEX_POINT('',#47313); #14681=VERTEX_POINT('',#47315); #14682=VERTEX_POINT('',#47319); #14683=VERTEX_POINT('',#47321); #14684=VERTEX_POINT('',#47325); #14685=VERTEX_POINT('',#47327); #14686=VERTEX_POINT('',#47331); #14687=VERTEX_POINT('',#47333); #14688=VERTEX_POINT('',#47337); #14689=VERTEX_POINT('',#47339); #14690=VERTEX_POINT('',#47343); #14691=VERTEX_POINT('',#47344); #14692=VERTEX_POINT('',#47346); #14693=VERTEX_POINT('',#47348); #14694=VERTEX_POINT('',#47352); #14695=VERTEX_POINT('',#47353); #14696=VERTEX_POINT('',#47358); #14697=VERTEX_POINT('',#47360); #14698=VERTEX_POINT('',#47364); #14699=VERTEX_POINT('',#47366); #14700=VERTEX_POINT('',#47370); #14701=VERTEX_POINT('',#47372); #14702=VERTEX_POINT('',#47376); #14703=VERTEX_POINT('',#47377); #14704=VERTEX_POINT('',#47379); #14705=VERTEX_POINT('',#47381); #14706=VERTEX_POINT('',#47385); #14707=VERTEX_POINT('',#47386); #14708=VERTEX_POINT('',#47388); #14709=VERTEX_POINT('',#47390); #14710=VERTEX_POINT('',#47394); #14711=VERTEX_POINT('',#47395); #14712=VERTEX_POINT('',#47397); #14713=VERTEX_POINT('',#47399); #14714=VERTEX_POINT('',#47403); #14715=VERTEX_POINT('',#47404); #14716=VERTEX_POINT('',#47406); #14717=VERTEX_POINT('',#47408); #14718=VERTEX_POINT('',#47412); #14719=VERTEX_POINT('',#47413); #14720=VERTEX_POINT('',#47415); #14721=VERTEX_POINT('',#47417); #14722=VERTEX_POINT('',#47421); #14723=VERTEX_POINT('',#47422); #14724=VERTEX_POINT('',#47424); #14725=VERTEX_POINT('',#47426); #14726=VERTEX_POINT('',#47430); #14727=VERTEX_POINT('',#47431); #14728=VERTEX_POINT('',#47433); #14729=VERTEX_POINT('',#47435); #14730=VERTEX_POINT('',#47439); #14731=VERTEX_POINT('',#47440); #14732=VERTEX_POINT('',#47442); #14733=VERTEX_POINT('',#47444); #14734=VERTEX_POINT('',#47448); #14735=VERTEX_POINT('',#47449); #14736=VERTEX_POINT('',#47451); #14737=VERTEX_POINT('',#47453); #14738=VERTEX_POINT('',#47457); #14739=VERTEX_POINT('',#47458); #14740=VERTEX_POINT('',#47460); #14741=VERTEX_POINT('',#47462); #14742=VERTEX_POINT('',#47466); #14743=VERTEX_POINT('',#47467); #14744=VERTEX_POINT('',#47469); #14745=VERTEX_POINT('',#47471); #14746=VERTEX_POINT('',#47475); #14747=VERTEX_POINT('',#47476); #14748=VERTEX_POINT('',#47478); #14749=VERTEX_POINT('',#47480); #14750=VERTEX_POINT('',#47484); #14751=VERTEX_POINT('',#47485); #14752=VERTEX_POINT('',#47487); #14753=VERTEX_POINT('',#47489); #14754=VERTEX_POINT('',#47493); #14755=VERTEX_POINT('',#47494); #14756=VERTEX_POINT('',#47496); #14757=VERTEX_POINT('',#47498); #14758=VERTEX_POINT('',#47502); #14759=VERTEX_POINT('',#47503); #14760=VERTEX_POINT('',#47505); #14761=VERTEX_POINT('',#47507); #14762=VERTEX_POINT('',#47511); #14763=VERTEX_POINT('',#47512); #14764=VERTEX_POINT('',#47514); #14765=VERTEX_POINT('',#47516); #14766=VERTEX_POINT('',#47520); #14767=VERTEX_POINT('',#47521); #14768=VERTEX_POINT('',#47523); #14769=VERTEX_POINT('',#47525); #14770=VERTEX_POINT('',#47529); #14771=VERTEX_POINT('',#47530); #14772=VERTEX_POINT('',#47532); #14773=VERTEX_POINT('',#47534); #14774=VERTEX_POINT('',#47538); #14775=VERTEX_POINT('',#47539); #14776=VERTEX_POINT('',#47541); #14777=VERTEX_POINT('',#47543); #14778=VERTEX_POINT('',#47547); #14779=VERTEX_POINT('',#47548); #14780=VERTEX_POINT('',#47550); #14781=VERTEX_POINT('',#47552); #14782=VERTEX_POINT('',#47556); #14783=VERTEX_POINT('',#47564); #14784=VERTEX_POINT('',#47566); #14785=VERTEX_POINT('',#47568); #14786=VERTEX_POINT('',#47578); #14787=VERTEX_POINT('',#47580); #14788=VERTEX_POINT('',#47588); #14789=VERTEX_POINT('',#47590); #14790=VERTEX_POINT('',#47600); #14791=VERTEX_POINT('',#47601); #14792=VERTEX_POINT('',#47603); #14793=VERTEX_POINT('',#47605); #14794=VERTEX_POINT('',#47607); #14795=VERTEX_POINT('',#47609); #14796=VERTEX_POINT('',#47612); #14797=VERTEX_POINT('',#47614); #14798=VERTEX_POINT('',#47618); #14799=VERTEX_POINT('',#47619); #14800=VERTEX_POINT('',#47621); #14801=VERTEX_POINT('',#47623); #14802=VERTEX_POINT('',#47625); #14803=VERTEX_POINT('',#47627); #14804=VERTEX_POINT('',#47630); #14805=VERTEX_POINT('',#47632); #14806=VERTEX_POINT('',#47636); #14807=VERTEX_POINT('',#47637); #14808=VERTEX_POINT('',#47645); #14809=VERTEX_POINT('',#47654); #14810=VERTEX_POINT('',#47658); #14811=VERTEX_POINT('',#47659); #14812=VERTEX_POINT('',#47661); #14813=VERTEX_POINT('',#47669); #14814=VERTEX_POINT('',#47680); #14815=VERTEX_POINT('',#47688); #14816=VERTEX_POINT('',#47690); #14817=VERTEX_POINT('',#47692); #14818=VERTEX_POINT('',#47702); #14819=VERTEX_POINT('',#47704); #14820=VERTEX_POINT('',#47712); #14821=VERTEX_POINT('',#47714); #14822=VERTEX_POINT('',#47724); #14823=VERTEX_POINT('',#47725); #14824=VERTEX_POINT('',#47728); #14825=VERTEX_POINT('',#47730); #14826=VERTEX_POINT('',#47732); #14827=VERTEX_POINT('',#47734); #14828=VERTEX_POINT('',#47736); #14829=VERTEX_POINT('',#47738); #14830=VERTEX_POINT('',#47742); #14831=VERTEX_POINT('',#47744); #14832=VERTEX_POINT('',#47746); #14833=VERTEX_POINT('',#47748); #14834=VERTEX_POINT('',#47750); #14835=VERTEX_POINT('',#47752); #14836=VERTEX_POINT('',#47754); #14837=VERTEX_POINT('',#47756); #14838=VERTEX_POINT('',#47760); #14839=VERTEX_POINT('',#47761); #14840=VERTEX_POINT('',#47769); #14841=VERTEX_POINT('',#47778); #14842=VERTEX_POINT('',#47782); #14843=VERTEX_POINT('',#47783); #14844=VERTEX_POINT('',#47785); #14845=VERTEX_POINT('',#47793); #14846=VERTEX_POINT('',#47804); #14847=VERTEX_POINT('',#47812); #14848=VERTEX_POINT('',#47814); #14849=VERTEX_POINT('',#47816); #14850=VERTEX_POINT('',#47826); #14851=VERTEX_POINT('',#47828); #14852=VERTEX_POINT('',#47836); #14853=VERTEX_POINT('',#47838); #14854=VERTEX_POINT('',#47848); #14855=VERTEX_POINT('',#47856); #14856=VERTEX_POINT('',#47858); #14857=VERTEX_POINT('',#47860); #14858=VERTEX_POINT('',#47870); #14859=VERTEX_POINT('',#47872); #14860=VERTEX_POINT('',#47880); #14861=VERTEX_POINT('',#47882); #14862=VERTEX_POINT('',#47892); #14863=VERTEX_POINT('',#47900); #14864=VERTEX_POINT('',#47902); #14865=VERTEX_POINT('',#47904); #14866=VERTEX_POINT('',#47914); #14867=VERTEX_POINT('',#47916); #14868=VERTEX_POINT('',#47924); #14869=VERTEX_POINT('',#47926); #14870=VERTEX_POINT('',#47936); #14871=VERTEX_POINT('',#47937); #14872=VERTEX_POINT('',#47940); #14873=VERTEX_POINT('',#47942); #14874=VERTEX_POINT('',#47944); #14875=VERTEX_POINT('',#47946); #14876=VERTEX_POINT('',#47948); #14877=VERTEX_POINT('',#47950); #14878=VERTEX_POINT('',#47954); #14879=VERTEX_POINT('',#47956); #14880=VERTEX_POINT('',#47958); #14881=VERTEX_POINT('',#47960); #14882=VERTEX_POINT('',#47962); #14883=VERTEX_POINT('',#47964); #14884=VERTEX_POINT('',#47966); #14885=VERTEX_POINT('',#47968); #14886=VERTEX_POINT('',#47972); #14887=VERTEX_POINT('',#47973); #14888=VERTEX_POINT('',#47981); #14889=VERTEX_POINT('',#47990); #14890=VERTEX_POINT('',#47994); #14891=VERTEX_POINT('',#47995); #14892=VERTEX_POINT('',#47997); #14893=VERTEX_POINT('',#48005); #14894=VERTEX_POINT('',#48016); #14895=VERTEX_POINT('',#48024); #14896=VERTEX_POINT('',#48026); #14897=VERTEX_POINT('',#48028); #14898=VERTEX_POINT('',#48038); #14899=VERTEX_POINT('',#48040); #14900=VERTEX_POINT('',#48048); #14901=VERTEX_POINT('',#48050); #14902=VERTEX_POINT('',#48060); #14903=VERTEX_POINT('',#48061); #14904=VERTEX_POINT('',#48069); #14905=VERTEX_POINT('',#48078); #14906=VERTEX_POINT('',#48082); #14907=VERTEX_POINT('',#48083); #14908=VERTEX_POINT('',#48085); #14909=VERTEX_POINT('',#48093); #14910=VERTEX_POINT('',#48104); #14911=VERTEX_POINT('',#48112); #14912=VERTEX_POINT('',#48114); #14913=VERTEX_POINT('',#48116); #14914=VERTEX_POINT('',#48126); #14915=VERTEX_POINT('',#48128); #14916=VERTEX_POINT('',#48136); #14917=VERTEX_POINT('',#48138); #14918=VERTEX_POINT('',#48148); #14919=VERTEX_POINT('',#48149); #14920=VERTEX_POINT('',#48157); #14921=VERTEX_POINT('',#48166); #14922=VERTEX_POINT('',#48170); #14923=VERTEX_POINT('',#48171); #14924=VERTEX_POINT('',#48173); #14925=VERTEX_POINT('',#48181); #14926=VERTEX_POINT('',#48192); #14927=VERTEX_POINT('',#48200); #14928=VERTEX_POINT('',#48202); #14929=VERTEX_POINT('',#48204); #14930=VERTEX_POINT('',#48214); #14931=VERTEX_POINT('',#48216); #14932=VERTEX_POINT('',#48224); #14933=VERTEX_POINT('',#48226); #14934=VERTEX_POINT('',#48236); #14935=VERTEX_POINT('',#48244); #14936=VERTEX_POINT('',#48253); #14937=VERTEX_POINT('',#48257); #14938=VERTEX_POINT('',#48258); #14939=VERTEX_POINT('',#48267); #14940=VERTEX_POINT('',#48278); #14941=VERTEX_POINT('',#48286); #14942=VERTEX_POINT('',#48288); #14943=VERTEX_POINT('',#48290); #14944=VERTEX_POINT('',#48300); #14945=VERTEX_POINT('',#48302); #14946=VERTEX_POINT('',#48310); #14947=VERTEX_POINT('',#48312); #14948=VERTEX_POINT('',#48322); #14949=VERTEX_POINT('',#48323); #14950=VERTEX_POINT('',#48325); #14951=VERTEX_POINT('',#48327); #14952=VERTEX_POINT('',#48329); #14953=VERTEX_POINT('',#48331); #14954=VERTEX_POINT('',#48334); #14955=VERTEX_POINT('',#48336); #14956=VERTEX_POINT('',#48340); #14957=VERTEX_POINT('',#48341); #14958=VERTEX_POINT('',#48343); #14959=VERTEX_POINT('',#48345); #14960=VERTEX_POINT('',#48347); #14961=VERTEX_POINT('',#48349); #14962=VERTEX_POINT('',#48352); #14963=VERTEX_POINT('',#48354); #14964=VERTEX_POINT('',#48358); #14965=VERTEX_POINT('',#48366); #14966=VERTEX_POINT('',#48368); #14967=VERTEX_POINT('',#48370); #14968=VERTEX_POINT('',#48380); #14969=VERTEX_POINT('',#48382); #14970=VERTEX_POINT('',#48390); #14971=VERTEX_POINT('',#48392); #14972=VERTEX_POINT('',#48402); #14973=VERTEX_POINT('',#48404); #14974=VERTEX_POINT('',#48406); #14975=VERTEX_POINT('',#48411); #14976=VERTEX_POINT('',#48412); #14977=VERTEX_POINT('',#48414); #14978=VERTEX_POINT('',#48422); #14979=VERTEX_POINT('',#48424); #14980=VERTEX_POINT('',#48426); #14981=VERTEX_POINT('',#48428); #14982=VERTEX_POINT('',#48430); #14983=VERTEX_POINT('',#48434); #14984=VERTEX_POINT('',#48436); #14985=VERTEX_POINT('',#48438); #14986=VERTEX_POINT('',#48440); #14987=VERTEX_POINT('',#48442); #14988=VERTEX_POINT('',#48446); #14989=VERTEX_POINT('',#48449); #14990=VERTEX_POINT('',#48452); #14991=VERTEX_POINT('',#48455); #14992=VERTEX_POINT('',#48613); #14993=VERTEX_POINT('',#48614); #14994=VERTEX_POINT('',#48616); #14995=VERTEX_POINT('',#48618); #14996=VERTEX_POINT('',#48620); #14997=VERTEX_POINT('',#48622); #14998=VERTEX_POINT('',#48624); #14999=VERTEX_POINT('',#48626); #15000=VERTEX_POINT('',#48628); #15001=VERTEX_POINT('',#48630); #15002=VERTEX_POINT('',#48632); #15003=VERTEX_POINT('',#48634); #15004=VERTEX_POINT('',#48638); #15005=VERTEX_POINT('',#48639); #15006=VERTEX_POINT('',#48641); #15007=VERTEX_POINT('',#48643); #15008=VERTEX_POINT('',#48647); #15009=VERTEX_POINT('',#48649); #15010=VERTEX_POINT('',#48653); #15011=VERTEX_POINT('',#48654); #15012=VERTEX_POINT('',#48659); #15013=VERTEX_POINT('',#48661); #15014=VERTEX_POINT('',#48665); #15015=VERTEX_POINT('',#48666); #15016=VERTEX_POINT('',#48671); #15017=VERTEX_POINT('',#48673); #15018=VERTEX_POINT('',#48677); #15019=VERTEX_POINT('',#48678); #15020=VERTEX_POINT('',#48683); #15021=VERTEX_POINT('',#48685); #15022=VERTEX_POINT('',#48689); #15023=VERTEX_POINT('',#48690); #15024=VERTEX_POINT('',#48695); #15025=VERTEX_POINT('',#48697); #15026=VERTEX_POINT('',#48701); #15027=VERTEX_POINT('',#48702); #15028=VERTEX_POINT('',#48711); #15029=VERTEX_POINT('',#48712); #15030=VERTEX_POINT('',#48714); #15031=VERTEX_POINT('',#48716); #15032=VERTEX_POINT('',#48718); #15033=VERTEX_POINT('',#48720); #15034=VERTEX_POINT('',#48722); #15035=VERTEX_POINT('',#48724); #15036=VERTEX_POINT('',#48726); #15037=VERTEX_POINT('',#48728); #15038=VERTEX_POINT('',#48730); #15039=VERTEX_POINT('',#48732); #15040=VERTEX_POINT('',#48760); #15041=VERTEX_POINT('',#48761); #15042=VERTEX_POINT('',#48763); #15043=VERTEX_POINT('',#48765); #15044=VERTEX_POINT('',#48767); #15045=VERTEX_POINT('',#48769); #15046=VERTEX_POINT('',#48771); #15047=VERTEX_POINT('',#48773); #15048=VERTEX_POINT('',#48777); #15049=VERTEX_POINT('',#48778); #15050=VERTEX_POINT('',#48780); #15051=VERTEX_POINT('',#48782); #15052=VERTEX_POINT('',#48784); #15053=VERTEX_POINT('',#48786); #15054=VERTEX_POINT('',#48788); #15055=VERTEX_POINT('',#48790); #15056=VERTEX_POINT('',#48810); #15057=VERTEX_POINT('',#48811); #15058=VERTEX_POINT('',#48813); #15059=VERTEX_POINT('',#48815); #15060=VERTEX_POINT('',#48817); #15061=VERTEX_POINT('',#48819); #15062=VERTEX_POINT('',#48821); #15063=VERTEX_POINT('',#48823); #15064=VERTEX_POINT('',#48827); #15065=VERTEX_POINT('',#48828); #15066=VERTEX_POINT('',#48830); #15067=VERTEX_POINT('',#48832); #15068=VERTEX_POINT('',#48834); #15069=VERTEX_POINT('',#48836); #15070=VERTEX_POINT('',#48838); #15071=VERTEX_POINT('',#48840); #15072=VERTEX_POINT('',#48860); #15073=VERTEX_POINT('',#48861); #15074=VERTEX_POINT('',#48863); #15075=VERTEX_POINT('',#48865); #15076=VERTEX_POINT('',#48867); #15077=VERTEX_POINT('',#48869); #15078=VERTEX_POINT('',#48871); #15079=VERTEX_POINT('',#48873); #15080=VERTEX_POINT('',#48877); #15081=VERTEX_POINT('',#48878); #15082=VERTEX_POINT('',#48880); #15083=VERTEX_POINT('',#48882); #15084=VERTEX_POINT('',#48884); #15085=VERTEX_POINT('',#48886); #15086=VERTEX_POINT('',#48888); #15087=VERTEX_POINT('',#48890); #15088=VERTEX_POINT('',#48910); #15089=VERTEX_POINT('',#48911); #15090=VERTEX_POINT('',#48913); #15091=VERTEX_POINT('',#48915); #15092=VERTEX_POINT('',#48917); #15093=VERTEX_POINT('',#48919); #15094=VERTEX_POINT('',#48921); #15095=VERTEX_POINT('',#48923); #15096=VERTEX_POINT('',#48927); #15097=VERTEX_POINT('',#48928); #15098=VERTEX_POINT('',#48930); #15099=VERTEX_POINT('',#48932); #15100=VERTEX_POINT('',#48934); #15101=VERTEX_POINT('',#48936); #15102=VERTEX_POINT('',#48938); #15103=VERTEX_POINT('',#48940); #15104=VERTEX_POINT('',#48960); #15105=VERTEX_POINT('',#48961); #15106=VERTEX_POINT('',#48963); #15107=VERTEX_POINT('',#48965); #15108=VERTEX_POINT('',#48969); #15109=VERTEX_POINT('',#48970); #15110=VERTEX_POINT('',#48975); #15111=VERTEX_POINT('',#48976); #15112=VERTEX_POINT('',#48985); #15113=VERTEX_POINT('',#48986); #15114=VERTEX_POINT('',#48991); #15115=VERTEX_POINT('',#48995); #15116=VERTEX_POINT('',#49001); #15117=VERTEX_POINT('',#49002); #15118=VERTEX_POINT('',#49004); #15119=VERTEX_POINT('',#49006); #15120=VERTEX_POINT('',#49010); #15121=VERTEX_POINT('',#49012); #15122=VERTEX_POINT('',#49016); #15123=VERTEX_POINT('',#49020); #15124=VERTEX_POINT('',#49027); #15125=VERTEX_POINT('',#49028); #15126=VERTEX_POINT('',#49030); #15127=VERTEX_POINT('',#49032); #15128=VERTEX_POINT('',#49036); #15129=VERTEX_POINT('',#49037); #15130=VERTEX_POINT('',#49039); #15131=VERTEX_POINT('',#49041); #15132=VERTEX_POINT('',#49053); #15133=VERTEX_POINT('',#49054); #15134=VERTEX_POINT('',#49056); #15135=VERTEX_POINT('',#49058); #15136=VERTEX_POINT('',#49062); #15137=VERTEX_POINT('',#49064); #15138=VERTEX_POINT('',#49068); #15139=VERTEX_POINT('',#49070); #15140=VERTEX_POINT('',#49074); #15141=VERTEX_POINT('',#49075); #15142=VERTEX_POINT('',#49077); #15143=VERTEX_POINT('',#49079); #15144=VERTEX_POINT('',#49083); #15145=VERTEX_POINT('',#49085); #15146=VERTEX_POINT('',#49090); #15147=VERTEX_POINT('',#49094); #15148=VERTEX_POINT('',#49103); #15149=VERTEX_POINT('',#49104); #15150=VERTEX_POINT('',#49106); #15151=VERTEX_POINT('',#49108); #15152=VERTEX_POINT('',#49112); #15153=VERTEX_POINT('',#49113); #15154=VERTEX_POINT('',#49118); #15155=VERTEX_POINT('',#49119); #15156=VERTEX_POINT('',#49126); #15157=VERTEX_POINT('',#49127); #15158=VERTEX_POINT('',#49129); #15159=VERTEX_POINT('',#49131); #15160=VERTEX_POINT('',#49135); #15161=VERTEX_POINT('',#49136); #15162=VERTEX_POINT('',#49138); #15163=VERTEX_POINT('',#49140); #15164=VERTEX_POINT('',#49149); #15165=VERTEX_POINT('',#49151); #15166=VERTEX_POINT('',#49153); #15167=VERTEX_POINT('',#49156); #15168=VERTEX_POINT('',#49160); #15169=VERTEX_POINT('',#49161); #15170=VERTEX_POINT('',#49163); #15171=VERTEX_POINT('',#49165); #15172=VERTEX_POINT('',#49177); #15173=VERTEX_POINT('',#49178); #15174=VERTEX_POINT('',#49180); #15175=VERTEX_POINT('',#49182); #15176=VERTEX_POINT('',#49186); #15177=VERTEX_POINT('',#49187); #15178=VERTEX_POINT('',#49189); #15179=VERTEX_POINT('',#49191); #15180=VERTEX_POINT('',#49203); #15181=VERTEX_POINT('',#49204); #15182=VERTEX_POINT('',#49206); #15183=VERTEX_POINT('',#49208); #15184=VERTEX_POINT('',#49212); #15185=VERTEX_POINT('',#49213); #15186=VERTEX_POINT('',#49215); #15187=VERTEX_POINT('',#49217); #15188=VERTEX_POINT('',#49229); #15189=VERTEX_POINT('',#49230); #15190=VERTEX_POINT('',#49232); #15191=VERTEX_POINT('',#49234); #15192=VERTEX_POINT('',#49238); #15193=VERTEX_POINT('',#49239); #15194=VERTEX_POINT('',#49241); #15195=VERTEX_POINT('',#49243); #15196=VERTEX_POINT('',#49255); #15197=VERTEX_POINT('',#49256); #15198=VERTEX_POINT('',#49258); #15199=VERTEX_POINT('',#49260); #15200=VERTEX_POINT('',#49264); #15201=VERTEX_POINT('',#49265); #15202=VERTEX_POINT('',#49267); #15203=VERTEX_POINT('',#49269); #15204=VERTEX_POINT('',#49281); #15205=VERTEX_POINT('',#49282); #15206=VERTEX_POINT('',#49284); #15207=VERTEX_POINT('',#49286); #15208=VERTEX_POINT('',#49290); #15209=VERTEX_POINT('',#49291); #15210=VERTEX_POINT('',#49293); #15211=VERTEX_POINT('',#49295); #15212=VERTEX_POINT('',#49307); #15213=VERTEX_POINT('',#49308); #15214=VERTEX_POINT('',#49310); #15215=VERTEX_POINT('',#49312); #15216=VERTEX_POINT('',#49316); #15217=VERTEX_POINT('',#49317); #15218=VERTEX_POINT('',#49319); #15219=VERTEX_POINT('',#49321); #15220=VERTEX_POINT('',#49333); #15221=VERTEX_POINT('',#49334); #15222=VERTEX_POINT('',#49336); #15223=VERTEX_POINT('',#49338); #15224=VERTEX_POINT('',#49342); #15225=VERTEX_POINT('',#49343); #15226=VERTEX_POINT('',#49345); #15227=VERTEX_POINT('',#49347); #15228=VERTEX_POINT('',#49363); #15229=VERTEX_POINT('',#49364); #15230=VERTEX_POINT('',#49366); #15231=VERTEX_POINT('',#49368); #15232=VERTEX_POINT('',#49370); #15233=VERTEX_POINT('',#49372); #15234=VERTEX_POINT('',#49374); #15235=VERTEX_POINT('',#49376); #15236=VERTEX_POINT('',#49380); #15237=VERTEX_POINT('',#49381); #15238=VERTEX_POINT('',#49383); #15239=VERTEX_POINT('',#49385); #15240=VERTEX_POINT('',#49387); #15241=VERTEX_POINT('',#49390); #15242=VERTEX_POINT('',#49392); #15243=VERTEX_POINT('',#49395); #15244=VERTEX_POINT('',#49398); #15245=VERTEX_POINT('',#49399); #15246=VERTEX_POINT('',#49401); #15247=VERTEX_POINT('',#49403); #15248=VERTEX_POINT('',#49406); #15249=VERTEX_POINT('',#49407); #15250=VERTEX_POINT('',#49409); #15251=VERTEX_POINT('',#49411); #15252=VERTEX_POINT('',#49415); #15253=VERTEX_POINT('',#49417); #15254=VERTEX_POINT('',#49421); #15255=VERTEX_POINT('',#49422); #15256=VERTEX_POINT('',#49427); #15257=VERTEX_POINT('',#49431); #15258=VERTEX_POINT('',#49435); #15259=VERTEX_POINT('',#49436); #15260=VERTEX_POINT('',#49438); #15261=VERTEX_POINT('',#49440); #15262=VERTEX_POINT('',#49447); #15263=VERTEX_POINT('',#49449); #15264=VERTEX_POINT('',#49461); #15265=VERTEX_POINT('',#49462); #15266=VERTEX_POINT('',#49467); #15267=VERTEX_POINT('',#49468); #15268=VERTEX_POINT('',#49470); #15269=VERTEX_POINT('',#49472); #15270=VERTEX_POINT('',#49474); #15271=VERTEX_POINT('',#49477); #15272=VERTEX_POINT('',#49479); #15273=VERTEX_POINT('',#49481); #15274=VERTEX_POINT('',#49483); #15275=VERTEX_POINT('',#49485); #15276=VERTEX_POINT('',#49487); #15277=VERTEX_POINT('',#49489); #15278=VERTEX_POINT('',#49491); #15279=VERTEX_POINT('',#49493); #15280=VERTEX_POINT('',#49495); #15281=VERTEX_POINT('',#49498); #15282=VERTEX_POINT('',#49499); #15283=VERTEX_POINT('',#49501); #15284=VERTEX_POINT('',#49503); #15285=VERTEX_POINT('',#49505); #15286=VERTEX_POINT('',#49507); #15287=VERTEX_POINT('',#49509); #15288=VERTEX_POINT('',#49511); #15289=VERTEX_POINT('',#49513); #15290=VERTEX_POINT('',#49515); #15291=VERTEX_POINT('',#49517); #15292=VERTEX_POINT('',#49519); #15293=VERTEX_POINT('',#49522); #15294=VERTEX_POINT('',#49523); #15295=VERTEX_POINT('',#49525); #15296=VERTEX_POINT('',#49527); #15297=VERTEX_POINT('',#49531); #15298=VERTEX_POINT('',#49533); #15299=VERTEX_POINT('',#49537); #15300=VERTEX_POINT('',#49541); #15301=VERTEX_POINT('',#49547); #15302=VERTEX_POINT('',#49548); #15303=VERTEX_POINT('',#49550); #15304=VERTEX_POINT('',#49552); #15305=VERTEX_POINT('',#49555); #15306=VERTEX_POINT('',#49557); #15307=VERTEX_POINT('',#49559); #15308=VERTEX_POINT('',#49563); #15309=VERTEX_POINT('',#49564); #15310=VERTEX_POINT('',#49566); #15311=VERTEX_POINT('',#49568); #15312=VERTEX_POINT('',#49574); #15313=VERTEX_POINT('',#49578); #15314=VERTEX_POINT('',#49580); #15315=VERTEX_POINT('',#49582); #15316=VERTEX_POINT('',#49584); #15317=VERTEX_POINT('',#49588); #15318=VERTEX_POINT('',#49589); #15319=VERTEX_POINT('',#49594); #15320=VERTEX_POINT('',#49596); #15321=VERTEX_POINT('',#49598); #15322=VERTEX_POINT('',#49600); #15323=VERTEX_POINT('',#49602); #15324=VERTEX_POINT('',#49604); #15325=VERTEX_POINT('',#49606); #15326=VERTEX_POINT('',#49608); #15327=VERTEX_POINT('',#49610); #15328=VERTEX_POINT('',#49612); #15329=VERTEX_POINT('',#49614); #15330=VERTEX_POINT('',#49616); #15331=VERTEX_POINT('',#49618); #15332=VERTEX_POINT('',#49620); #15333=VERTEX_POINT('',#49622); #15334=VERTEX_POINT('',#49624); #15335=VERTEX_POINT('',#49626); #15336=VERTEX_POINT('',#49628); #15337=VERTEX_POINT('',#49630); #15338=VERTEX_POINT('',#49632); #15339=VERTEX_POINT('',#49636); #15340=VERTEX_POINT('',#49637); #15341=VERTEX_POINT('',#49639); #15342=VERTEX_POINT('',#49641); #15343=VERTEX_POINT('',#49643); #15344=VERTEX_POINT('',#49645); #15345=VERTEX_POINT('',#49647); #15346=VERTEX_POINT('',#49649); #15347=VERTEX_POINT('',#49651); #15348=VERTEX_POINT('',#49653); #15349=VERTEX_POINT('',#49655); #15350=VERTEX_POINT('',#49657); #15351=VERTEX_POINT('',#49720); #15352=VERTEX_POINT('',#49788); #15353=VERTEX_POINT('',#49858); #15354=VERTEX_POINT('',#49860); #15355=VERTEX_POINT('',#49862); #15356=VERTEX_POINT('',#49955); #15357=VERTEX_POINT('',#50025); #15358=VERTEX_POINT('',#50026); #15359=VERTEX_POINT('',#50056); #15360=VERTEX_POINT('',#50058); #15361=VERTEX_POINT('',#50062); #15362=VERTEX_POINT('',#50066); #15363=VERTEX_POINT('',#50089); #15364=VERTEX_POINT('',#50157); #15365=VERTEX_POINT('',#50242); #15366=VERTEX_POINT('',#50251); #15367=VERTEX_POINT('',#50277); #15368=VERTEX_POINT('',#50279); #15369=VERTEX_POINT('',#50283); #15370=VERTEX_POINT('',#50284); #15371=VERTEX_POINT('',#50289); #15372=VERTEX_POINT('',#50290); #15373=VERTEX_POINT('',#50295); #15374=VERTEX_POINT('',#50297); #15375=VERTEX_POINT('',#50307); #15376=VERTEX_POINT('',#50308); #15377=VERTEX_POINT('',#50310); #15378=VERTEX_POINT('',#50312); #15379=VERTEX_POINT('',#50314); #15380=VERTEX_POINT('',#50316); #15381=VERTEX_POINT('',#50320); #15382=VERTEX_POINT('',#50322); #15383=VERTEX_POINT('',#50324); #15384=VERTEX_POINT('',#50326); #15385=VERTEX_POINT('',#50330); #15386=VERTEX_POINT('',#50331); #15387=VERTEX_POINT('',#50333); #15388=VERTEX_POINT('',#50335); #15389=VERTEX_POINT('',#50342); #15390=VERTEX_POINT('',#50343); #15391=VERTEX_POINT('',#50345); #15392=VERTEX_POINT('',#50347); #15393=VERTEX_POINT('',#50352); #15394=VERTEX_POINT('',#50354); #15395=VERTEX_POINT('',#50356); #15396=VERTEX_POINT('',#50358); #15397=VERTEX_POINT('',#50361); #15398=VERTEX_POINT('',#50363); #15399=VERTEX_POINT('',#50365); #15400=VERTEX_POINT('',#50367); #15401=VERTEX_POINT('',#50369); #15402=VERTEX_POINT('',#50371); #15403=VERTEX_POINT('',#50373); #15404=VERTEX_POINT('',#50375); #15405=VERTEX_POINT('',#50377); #15406=VERTEX_POINT('',#50379); #15407=VERTEX_POINT('',#50381); #15408=VERTEX_POINT('',#50383); #15409=VERTEX_POINT('',#50385); #15410=VERTEX_POINT('',#50387); #15411=VERTEX_POINT('',#50389); #15412=VERTEX_POINT('',#50391); #15413=VERTEX_POINT('',#50393); #15414=VERTEX_POINT('',#50395); #15415=VERTEX_POINT('',#50397); #15416=VERTEX_POINT('',#50399); #15417=VERTEX_POINT('',#50401); #15418=VERTEX_POINT('',#50403); #15419=VERTEX_POINT('',#50405); #15420=VERTEX_POINT('',#50407); #15421=VERTEX_POINT('',#50409); #15422=VERTEX_POINT('',#50411); #15423=VERTEX_POINT('',#50413); #15424=VERTEX_POINT('',#50415); #15425=VERTEX_POINT('',#50417); #15426=VERTEX_POINT('',#50419); #15427=VERTEX_POINT('',#50421); #15428=VERTEX_POINT('',#50423); #15429=VERTEX_POINT('',#50425); #15430=VERTEX_POINT('',#50427); #15431=VERTEX_POINT('',#50429); #15432=VERTEX_POINT('',#50431); #15433=VERTEX_POINT('',#50433); #15434=VERTEX_POINT('',#50435); #15435=VERTEX_POINT('',#50437); #15436=VERTEX_POINT('',#50439); #15437=VERTEX_POINT('',#50441); #15438=VERTEX_POINT('',#50443); #15439=VERTEX_POINT('',#50445); #15440=VERTEX_POINT('',#50447); #15441=VERTEX_POINT('',#50449); #15442=VERTEX_POINT('',#50451); #15443=VERTEX_POINT('',#50453); #15444=VERTEX_POINT('',#50455); #15445=VERTEX_POINT('',#50457); #15446=VERTEX_POINT('',#50459); #15447=VERTEX_POINT('',#50461); #15448=VERTEX_POINT('',#50463); #15449=VERTEX_POINT('',#50465); #15450=VERTEX_POINT('',#50467); #15451=VERTEX_POINT('',#50469); #15452=VERTEX_POINT('',#50471); #15453=VERTEX_POINT('',#50473); #15454=VERTEX_POINT('',#50475); #15455=VERTEX_POINT('',#50479); #15456=VERTEX_POINT('',#50483); #15457=VERTEX_POINT('',#50486); #15458=VERTEX_POINT('',#50487); #15459=VERTEX_POINT('',#50489); #15460=VERTEX_POINT('',#50491); #15461=VERTEX_POINT('',#50494); #15462=VERTEX_POINT('',#50495); #15463=VERTEX_POINT('',#50497); #15464=VERTEX_POINT('',#50499); #15465=VERTEX_POINT('',#50502); #15466=VERTEX_POINT('',#50503); #15467=VERTEX_POINT('',#50505); #15468=VERTEX_POINT('',#50507); #15469=VERTEX_POINT('',#50510); #15470=VERTEX_POINT('',#50511); #15471=VERTEX_POINT('',#50513); #15472=VERTEX_POINT('',#50515); #15473=VERTEX_POINT('',#50521); #15474=VERTEX_POINT('',#50523); #15475=VERTEX_POINT('',#50527); #15476=VERTEX_POINT('',#50531); #15477=VERTEX_POINT('',#50533); #15478=VERTEX_POINT('',#50535); #15479=VERTEX_POINT('',#50537); #15480=VERTEX_POINT('',#50539); #15481=VERTEX_POINT('',#50543); #15482=VERTEX_POINT('',#50544); #15483=VERTEX_POINT('',#50549); #15484=VERTEX_POINT('',#50553); #15485=VERTEX_POINT('',#50555); #15486=VERTEX_POINT('',#50557); #15487=VERTEX_POINT('',#50563); #15488=VERTEX_POINT('',#50566); #15489=VERTEX_POINT('',#50569); #15490=VERTEX_POINT('',#50570); #15491=VERTEX_POINT('',#50572); #15492=VERTEX_POINT('',#50574); #15493=VERTEX_POINT('',#50578); #15494=VERTEX_POINT('',#50580); #15495=VERTEX_POINT('',#50584); #15496=VERTEX_POINT('',#50586); #15497=VERTEX_POINT('',#50588); #15498=VERTEX_POINT('',#50590); #15499=VERTEX_POINT('',#50592); #15500=VERTEX_POINT('',#50594); #15501=VERTEX_POINT('',#50596); #15502=VERTEX_POINT('',#50598); #15503=VERTEX_POINT('',#50601); #15504=VERTEX_POINT('',#50604); #15505=VERTEX_POINT('',#50606); #15506=VERTEX_POINT('',#50609); #15507=VERTEX_POINT('',#50610); #15508=VERTEX_POINT('',#50612); #15509=VERTEX_POINT('',#50614); #15510=VERTEX_POINT('',#50616); #15511=VERTEX_POINT('',#50618); #15512=VERTEX_POINT('',#50620); #15513=VERTEX_POINT('',#50622); #15514=VERTEX_POINT('',#50624); #15515=VERTEX_POINT('',#50626); #15516=VERTEX_POINT('',#50628); #15517=VERTEX_POINT('',#50630); #15518=VERTEX_POINT('',#50633); #15519=VERTEX_POINT('',#50635); #15520=VERTEX_POINT('',#50644); #15521=VERTEX_POINT('',#50646); #15522=VERTEX_POINT('',#50650); #15523=VERTEX_POINT('',#50654); #15524=VERTEX_POINT('',#50656); #15525=VERTEX_POINT('',#50658); #15526=VERTEX_POINT('',#50660); #15527=VERTEX_POINT('',#50662); #15528=VERTEX_POINT('',#50664); #15529=VERTEX_POINT('',#50666); #15530=VERTEX_POINT('',#50668); #15531=VERTEX_POINT('',#50670); #15532=VERTEX_POINT('',#50672); #15533=VERTEX_POINT('',#50674); #15534=VERTEX_POINT('',#50677); #15535=VERTEX_POINT('',#50679); #15536=VERTEX_POINT('',#50681); #15537=VERTEX_POINT('',#50683); #15538=VERTEX_POINT('',#50685); #15539=VERTEX_POINT('',#50687); #15540=VERTEX_POINT('',#50689); #15541=VERTEX_POINT('',#50692); #15542=VERTEX_POINT('',#50693); #15543=VERTEX_POINT('',#50695); #15544=VERTEX_POINT('',#50697); #15545=VERTEX_POINT('',#50699); #15546=VERTEX_POINT('',#50701); #15547=VERTEX_POINT('',#50703); #15548=VERTEX_POINT('',#50705); #15549=VERTEX_POINT('',#50707); #15550=VERTEX_POINT('',#50766); #15551=VERTEX_POINT('',#50834); #15552=VERTEX_POINT('',#50904); #15553=VERTEX_POINT('',#50910); #15554=VERTEX_POINT('',#50912); #15555=VERTEX_POINT('',#51009); #15556=VERTEX_POINT('',#51079); #15557=VERTEX_POINT('',#51081); #15558=VERTEX_POINT('',#51102); #15559=VERTEX_POINT('',#51104); #15560=VERTEX_POINT('',#51108); #15561=VERTEX_POINT('',#51113); #15562=VERTEX_POINT('',#51135); #15563=VERTEX_POINT('',#51142); #15564=VERTEX_POINT('',#51166); #15565=VERTEX_POINT('',#51236); #15566=VERTEX_POINT('',#51323); #15567=VERTEX_POINT('',#51324); #15568=VERTEX_POINT('',#51329); #15569=VERTEX_POINT('',#51330); #15570=VERTEX_POINT('',#51335); #15571=VERTEX_POINT('',#51336); #15572=VERTEX_POINT('',#51341); #15573=VERTEX_POINT('',#51343); #15574=VERTEX_POINT('',#51353); #15575=VERTEX_POINT('',#51357); #15576=VERTEX_POINT('',#51358); #15577=VERTEX_POINT('',#51360); #15578=VERTEX_POINT('',#51362); #15579=VERTEX_POINT('',#51364); #15580=VERTEX_POINT('',#51367); #15581=VERTEX_POINT('',#51371); #15582=VERTEX_POINT('',#51373); #15583=VERTEX_POINT('',#51375); #15584=VERTEX_POINT('',#51377); #15585=VERTEX_POINT('',#51382); #15586=VERTEX_POINT('',#51384); #15587=VERTEX_POINT('',#51388); #15588=VERTEX_POINT('',#51392); #15589=VERTEX_POINT('',#51398); #15590=VERTEX_POINT('',#51402); #15591=VERTEX_POINT('',#51420); #15592=VERTEX_POINT('',#51421); #15593=VERTEX_POINT('',#51423); #15594=VERTEX_POINT('',#51425); #15595=VERTEX_POINT('',#51429); #15596=VERTEX_POINT('',#51431); #15597=VERTEX_POINT('',#51433); #15598=VERTEX_POINT('',#51435); #15599=VERTEX_POINT('',#51437); #15600=VERTEX_POINT('',#51439); #15601=VERTEX_POINT('',#51441); #15602=VERTEX_POINT('',#51443); #15603=VERTEX_POINT('',#51448); #15604=VERTEX_POINT('',#51449); #15605=VERTEX_POINT('',#51451); #15606=VERTEX_POINT('',#51453); #15607=VERTEX_POINT('',#51455); #15608=VERTEX_POINT('',#51457); #15609=VERTEX_POINT('',#51459); #15610=VERTEX_POINT('',#51461); #15611=VERTEX_POINT('',#51463); #15612=VERTEX_POINT('',#51465); #15613=VERTEX_POINT('',#51467); #15614=VERTEX_POINT('',#51469); #15615=VERTEX_POINT('',#51471); #15616=VERTEX_POINT('',#51473); #15617=VERTEX_POINT('',#51476); #15618=VERTEX_POINT('',#51477); #15619=VERTEX_POINT('',#51479); #15620=VERTEX_POINT('',#51481); #15621=VERTEX_POINT('',#51483); #15622=VERTEX_POINT('',#51485); #15623=VERTEX_POINT('',#51487); #15624=VERTEX_POINT('',#51489); #15625=VERTEX_POINT('',#51491); #15626=VERTEX_POINT('',#51493); #15627=VERTEX_POINT('',#51495); #15628=VERTEX_POINT('',#51497); #15629=VERTEX_POINT('',#51499); #15630=VERTEX_POINT('',#51501); #15631=VERTEX_POINT('',#51505); #15632=VERTEX_POINT('',#51506); #15633=VERTEX_POINT('',#51508); #15634=VERTEX_POINT('',#51510); #15635=VERTEX_POINT('',#51513); #15636=VERTEX_POINT('',#51515); #15637=VERTEX_POINT('',#51517); #15638=VERTEX_POINT('',#51519); #15639=VERTEX_POINT('',#51523); #15640=VERTEX_POINT('',#51524); #15641=VERTEX_POINT('',#51526); #15642=VERTEX_POINT('',#51528); #15643=VERTEX_POINT('',#51531); #15644=VERTEX_POINT('',#51533); #15645=VERTEX_POINT('',#51535); #15646=VERTEX_POINT('',#51537); #15647=VERTEX_POINT('',#51541); #15648=VERTEX_POINT('',#51542); #15649=VERTEX_POINT('',#51547); #15650=VERTEX_POINT('',#51551); #15651=VERTEX_POINT('',#51553); #15652=VERTEX_POINT('',#51556); #15653=VERTEX_POINT('',#51558); #15654=VERTEX_POINT('',#51560); #15655=VERTEX_POINT('',#51564); #15656=VERTEX_POINT('',#51565); #15657=VERTEX_POINT('',#51567); #15658=VERTEX_POINT('',#51569); #15659=VERTEX_POINT('',#51571); #15660=VERTEX_POINT('',#51574); #15661=VERTEX_POINT('',#51576); #15662=VERTEX_POINT('',#51578); #15663=VERTEX_POINT('',#51611); #15664=VERTEX_POINT('',#51612); #15665=VERTEX_POINT('',#51617); #15666=VERTEX_POINT('',#51622); #15667=VERTEX_POINT('',#51624); #15668=VERTEX_POINT('',#51626); #15669=VERTEX_POINT('',#51628); #15670=VERTEX_POINT('',#51631); #15671=VERTEX_POINT('',#51632); #15672=VERTEX_POINT('',#51634); #15673=VERTEX_POINT('',#51636); #15674=VERTEX_POINT('',#51638); #15675=VERTEX_POINT('',#51640); #15676=VERTEX_POINT('',#51642); #15677=VERTEX_POINT('',#51644); #15678=VERTEX_POINT('',#51646); #15679=VERTEX_POINT('',#51648); #15680=VERTEX_POINT('',#51650); #15681=VERTEX_POINT('',#51652); #15682=VERTEX_POINT('',#51654); #15683=VERTEX_POINT('',#51656); #15684=VERTEX_POINT('',#51659); #15685=VERTEX_POINT('',#51661); #15686=VERTEX_POINT('',#51663); #15687=VERTEX_POINT('',#51665); #15688=VERTEX_POINT('',#51667); #15689=VERTEX_POINT('',#51669); #15690=VERTEX_POINT('',#51671); #15691=VERTEX_POINT('',#51673); #15692=VERTEX_POINT('',#51675); #15693=VERTEX_POINT('',#51677); #15694=VERTEX_POINT('',#51679); #15695=VERTEX_POINT('',#51699); #15696=VERTEX_POINT('',#51700); #15697=VERTEX_POINT('',#51702); #15698=VERTEX_POINT('',#51704); #15699=VERTEX_POINT('',#51707); #15700=VERTEX_POINT('',#51709); #15701=VERTEX_POINT('',#51711); #15702=VERTEX_POINT('',#51713); #15703=VERTEX_POINT('',#51717); #15704=VERTEX_POINT('',#51719); #15705=VERTEX_POINT('',#51723); #15706=VERTEX_POINT('',#51725); #15707=VERTEX_POINT('',#51727); #15708=VERTEX_POINT('',#51731); #15709=VERTEX_POINT('',#51735); #15710=VERTEX_POINT('',#51741); #15711=VERTEX_POINT('',#51743); #15712=VERTEX_POINT('',#51745); #15713=VERTEX_POINT('',#51747); #15714=VERTEX_POINT('',#51752); #15715=VERTEX_POINT('',#51782); #15716=VERTEX_POINT('',#51783); #15717=VERTEX_POINT('',#51785); #15718=VERTEX_POINT('',#51787); #15719=VERTEX_POINT('',#51790); #15720=VERTEX_POINT('',#51792); #15721=VERTEX_POINT('',#51794); #15722=VERTEX_POINT('',#51796); #15723=VERTEX_POINT('',#51800); #15724=VERTEX_POINT('',#51802); #15725=VERTEX_POINT('',#51806); #15726=VERTEX_POINT('',#51807); #15727=VERTEX_POINT('',#51810); #15728=VERTEX_POINT('',#51814); #15729=VERTEX_POINT('',#51816); #15730=VERTEX_POINT('',#51821); #15731=VERTEX_POINT('',#51825); #15732=VERTEX_POINT('',#51827); #15733=VERTEX_POINT('',#51831); #15734=VERTEX_POINT('',#51833); #15735=VERTEX_POINT('',#51856); #15736=VERTEX_POINT('',#51858); #15737=VERTEX_POINT('',#51862); #15738=VERTEX_POINT('',#51863); #15739=VERTEX_POINT('',#51865); #15740=VERTEX_POINT('',#51870); #15741=VERTEX_POINT('',#51871); #15742=VERTEX_POINT('',#51873); #15743=VERTEX_POINT('',#51878); #15744=VERTEX_POINT('',#51879); #15745=VERTEX_POINT('',#51881); #15746=VERTEX_POINT('',#51883); #15747=VERTEX_POINT('',#51885); #15748=VERTEX_POINT('',#51887); #15749=VERTEX_POINT('',#51891); #15750=VERTEX_POINT('',#51892); #15751=VERTEX_POINT('',#51894); #15752=VERTEX_POINT('',#51896); #15753=VERTEX_POINT('',#51898); #15754=VERTEX_POINT('',#51900); #15755=VERTEX_POINT('',#51904); #15756=VERTEX_POINT('',#51905); #15757=VERTEX_POINT('',#51907); #15758=VERTEX_POINT('',#51909); #15759=VERTEX_POINT('',#51911); #15760=VERTEX_POINT('',#51915); #15761=VERTEX_POINT('',#51919); #15762=VERTEX_POINT('',#51921); #15763=VERTEX_POINT('',#51925); #15764=VERTEX_POINT('',#51931); #15765=VERTEX_POINT('',#51939); #15766=VERTEX_POINT('',#51941); #15767=VERTEX_POINT('',#51946); #15768=VERTEX_POINT('',#51948); #15769=VERTEX_POINT('',#51956); #15770=VERTEX_POINT('',#51957); #15771=VERTEX_POINT('',#51959); #15772=VERTEX_POINT('',#51961); #15773=VERTEX_POINT('',#51963); #15774=VERTEX_POINT('',#51965); #15775=VERTEX_POINT('',#51967); #15776=VERTEX_POINT('',#51969); #15777=VERTEX_POINT('',#51971); #15778=VERTEX_POINT('',#51973); #15779=VERTEX_POINT('',#51975); #15780=VERTEX_POINT('',#51977); #15781=VERTEX_POINT('',#51979); #15782=VERTEX_POINT('',#51981); #15783=VERTEX_POINT('',#51984); #15784=VERTEX_POINT('',#51985); #15785=VERTEX_POINT('',#51987); #15786=VERTEX_POINT('',#51989); #15787=VERTEX_POINT('',#51991); #15788=VERTEX_POINT('',#51993); #15789=VERTEX_POINT('',#51995); #15790=VERTEX_POINT('',#51997); #15791=VERTEX_POINT('',#51999); #15792=VERTEX_POINT('',#52001); #15793=VERTEX_POINT('',#52003); #15794=VERTEX_POINT('',#52005); #15795=VERTEX_POINT('',#52007); #15796=VERTEX_POINT('',#52009); #15797=VERTEX_POINT('',#52012); #15798=VERTEX_POINT('',#52013); #15799=VERTEX_POINT('',#52015); #15800=VERTEX_POINT('',#52017); #15801=VERTEX_POINT('',#52020); #15802=VERTEX_POINT('',#52021); #15803=VERTEX_POINT('',#52023); #15804=VERTEX_POINT('',#52025); #15805=VERTEX_POINT('',#52029); #15806=VERTEX_POINT('',#52031); #15807=VERTEX_POINT('',#52035); #15808=VERTEX_POINT('',#52039); #15809=VERTEX_POINT('',#52043); #15810=VERTEX_POINT('',#52047); #15811=VERTEX_POINT('',#52049); #15812=VERTEX_POINT('',#52053); #15813=VERTEX_POINT('',#52057); #15814=VERTEX_POINT('',#52061); #15815=VERTEX_POINT('',#52062); #15816=VERTEX_POINT('',#52066); #15817=VERTEX_POINT('',#52067); #15818=VERTEX_POINT('',#52069); #15819=VERTEX_POINT('',#52071); #15820=VERTEX_POINT('',#52073); #15821=VERTEX_POINT('',#52075); #15822=VERTEX_POINT('',#52077); #15823=VERTEX_POINT('',#52079); #15824=VERTEX_POINT('',#52081); #15825=VERTEX_POINT('',#52083); #15826=VERTEX_POINT('',#52085); #15827=VERTEX_POINT('',#52087); #15828=VERTEX_POINT('',#52089); #15829=VERTEX_POINT('',#52091); #15830=VERTEX_POINT('',#52094); #15831=VERTEX_POINT('',#52095); #15832=VERTEX_POINT('',#52097); #15833=VERTEX_POINT('',#52099); #15834=VERTEX_POINT('',#52102); #15835=VERTEX_POINT('',#52103); #15836=VERTEX_POINT('',#52105); #15837=VERTEX_POINT('',#52107); #15838=VERTEX_POINT('',#52110); #15839=VERTEX_POINT('',#52112); #15840=VERTEX_POINT('',#52114); #15841=VERTEX_POINT('',#52116); #15842=VERTEX_POINT('',#52119); #15843=VERTEX_POINT('',#52147); #15844=VERTEX_POINT('',#52149); #15845=VERTEX_POINT('',#52219); #15846=VERTEX_POINT('',#52304); #15847=VERTEX_POINT('',#52312); #15848=VERTEX_POINT('',#52314); #15849=VERTEX_POINT('',#52318); #15850=VERTEX_POINT('',#52322); #15851=VERTEX_POINT('',#52343); #15852=VERTEX_POINT('',#52350); #15853=VERTEX_POINT('',#52359); #15854=VERTEX_POINT('',#52383); #15855=VERTEX_POINT('',#52394); #15856=VERTEX_POINT('',#52395); #15857=VERTEX_POINT('',#52398); #15858=VERTEX_POINT('',#52400); #15859=VERTEX_POINT('',#52404); #15860=VERTEX_POINT('',#52406); #15861=VERTEX_POINT('',#52412); #15862=VERTEX_POINT('',#52414); #15863=VERTEX_POINT('',#52461); #15864=VERTEX_POINT('',#52529); #15865=VERTEX_POINT('',#52533); #15866=VERTEX_POINT('',#52553); #15867=VERTEX_POINT('',#52628); #15868=VERTEX_POINT('',#52630); #15869=VERTEX_POINT('',#52634); #15870=VERTEX_POINT('',#52638); #15871=VERTEX_POINT('',#52659); #15872=VERTEX_POINT('',#52666); #15873=VERTEX_POINT('',#52675); #15874=VERTEX_POINT('',#52699); #15875=VERTEX_POINT('',#52710); #15876=VERTEX_POINT('',#52711); #15877=VERTEX_POINT('',#52713); #15878=VERTEX_POINT('',#52715); #15879=VERTEX_POINT('',#52720); #15880=VERTEX_POINT('',#52722); #15881=VERTEX_POINT('',#52727); #15882=VERTEX_POINT('',#52729); #15883=VERTEX_POINT('',#52755); #15884=VERTEX_POINT('',#52759); #15885=VERTEX_POINT('',#52763); #15886=VERTEX_POINT('',#52765); #15887=VERTEX_POINT('',#52776); #15888=VERTEX_POINT('',#52778); #15889=VERTEX_POINT('',#52782); #15890=VERTEX_POINT('',#52783); #15891=VERTEX_POINT('',#52788); #15892=VERTEX_POINT('',#52792); #15893=VERTEX_POINT('',#52801); #15894=VERTEX_POINT('',#52805); #15895=VERTEX_POINT('',#52815); #15896=VERTEX_POINT('',#52817); #15897=VERTEX_POINT('',#52821); #15898=VERTEX_POINT('',#52823); #15899=VERTEX_POINT('',#52825); #15900=VERTEX_POINT('',#52829); #15901=VERTEX_POINT('',#52831); #15902=VERTEX_POINT('',#52833); #15903=VERTEX_POINT('',#52835); #15904=VERTEX_POINT('',#52837); #15905=VERTEX_POINT('',#52839); #15906=VERTEX_POINT('',#52841); #15907=VERTEX_POINT('',#52843); #15908=VERTEX_POINT('',#52845); #15909=VERTEX_POINT('',#52848); #15910=VERTEX_POINT('',#52850); #15911=VERTEX_POINT('',#52854); #15912=VERTEX_POINT('',#52856); #15913=VERTEX_POINT('',#52860); #15914=VERTEX_POINT('',#52862); #15915=VERTEX_POINT('',#52864); #15916=VERTEX_POINT('',#52866); #15917=VERTEX_POINT('',#52870); #15918=VERTEX_POINT('',#52883); #15919=VERTEX_POINT('',#52892); #15920=VERTEX_POINT('',#52893); #15921=VERTEX_POINT('',#52895); #15922=VERTEX_POINT('',#52897); #15923=VERTEX_POINT('',#52899); #15924=VERTEX_POINT('',#52901); #15925=VERTEX_POINT('',#52903); #15926=VERTEX_POINT('',#52905); #15927=VERTEX_POINT('',#52907); #15928=VERTEX_POINT('',#52909); #15929=VERTEX_POINT('',#52911); #15930=VERTEX_POINT('',#52913); #15931=VERTEX_POINT('',#52915); #15932=VERTEX_POINT('',#52917); #15933=VERTEX_POINT('',#52919); #15934=VERTEX_POINT('',#52921); #15935=VERTEX_POINT('',#52923); #15936=VERTEX_POINT('',#52925); #15937=VERTEX_POINT('',#52927); #15938=VERTEX_POINT('',#52929); #15939=VERTEX_POINT('',#52939); #15940=VERTEX_POINT('',#52943); #15941=VERTEX_POINT('',#52944); #15942=VERTEX_POINT('',#52947); #15943=VERTEX_POINT('',#52949); #15944=VERTEX_POINT('',#52951); #15945=VERTEX_POINT('',#52953); #15946=VERTEX_POINT('',#52955); #15947=VERTEX_POINT('',#52957); #15948=VERTEX_POINT('',#52959); #15949=VERTEX_POINT('',#52961); #15950=VERTEX_POINT('',#52963); #15951=VERTEX_POINT('',#52965); #15952=VERTEX_POINT('',#52967); #15953=VERTEX_POINT('',#52969); #15954=VERTEX_POINT('',#52971); #15955=VERTEX_POINT('',#52973); #15956=VERTEX_POINT('',#52975); #15957=VERTEX_POINT('',#52977); #15958=VERTEX_POINT('',#52979); #15959=VERTEX_POINT('',#52981); #15960=VERTEX_POINT('',#52983); #15961=VERTEX_POINT('',#52985); #15962=VERTEX_POINT('',#52987); #15963=VERTEX_POINT('',#52989); #15964=VERTEX_POINT('',#52991); #15965=VERTEX_POINT('',#53010); #15966=VERTEX_POINT('',#53013); #15967=VERTEX_POINT('',#53017); #15968=VERTEX_POINT('',#53019); #15969=VERTEX_POINT('',#53023); #15970=VERTEX_POINT('',#53024); #15971=VERTEX_POINT('',#53029); #15972=VERTEX_POINT('',#53031); #15973=VERTEX_POINT('',#53035); #15974=VERTEX_POINT('',#53037); #15975=VERTEX_POINT('',#53039); #15976=VERTEX_POINT('',#53041); #15977=VERTEX_POINT('',#53044); #15978=VERTEX_POINT('',#53046); #15979=VERTEX_POINT('',#53050); #15980=VERTEX_POINT('',#53051); #15981=VERTEX_POINT('',#53053); #15982=VERTEX_POINT('',#53055); #15983=VERTEX_POINT('',#53057); #15984=VERTEX_POINT('',#53059); #15985=VERTEX_POINT('',#53061); #15986=VERTEX_POINT('',#53063); #15987=VERTEX_POINT('',#53065); #15988=VERTEX_POINT('',#53067); #15989=VERTEX_POINT('',#53070); #15990=VERTEX_POINT('',#53072); #15991=VERTEX_POINT('',#53074); #15992=VERTEX_POINT('',#53076); #15993=VERTEX_POINT('',#53078); #15994=VERTEX_POINT('',#53080); #15995=VERTEX_POINT('',#53082); #15996=VERTEX_POINT('',#53086); #15997=VERTEX_POINT('',#53087); #15998=VERTEX_POINT('',#53089); #15999=VERTEX_POINT('',#53091); #16000=VERTEX_POINT('',#53094); #16001=VERTEX_POINT('',#53096); #16002=VERTEX_POINT('',#53100); #16003=VERTEX_POINT('',#53101); #16004=VERTEX_POINT('',#53103); #16005=VERTEX_POINT('',#53105); #16006=VERTEX_POINT('',#53108); #16007=VERTEX_POINT('',#53109); #16008=VERTEX_POINT('',#53111); #16009=VERTEX_POINT('',#53113); #16010=VERTEX_POINT('',#53117); #16011=VERTEX_POINT('',#53118); #16012=VERTEX_POINT('',#53120); #16013=VERTEX_POINT('',#53122); #16014=VERTEX_POINT('',#53125); #16015=VERTEX_POINT('',#53126); #16016=VERTEX_POINT('',#53128); #16017=VERTEX_POINT('',#53130); #16018=VERTEX_POINT('',#53134); #16019=VERTEX_POINT('',#53135); #16020=VERTEX_POINT('',#53137); #16021=VERTEX_POINT('',#53139); #16022=VERTEX_POINT('',#53142); #16023=VERTEX_POINT('',#53143); #16024=VERTEX_POINT('',#53145); #16025=VERTEX_POINT('',#53147); #16026=VERTEX_POINT('',#53151); #16027=VERTEX_POINT('',#53161); #16028=VERTEX_POINT('',#53165); #16029=VERTEX_POINT('',#53167); #16030=VERTEX_POINT('',#53171); #16031=VERTEX_POINT('',#53173); #16032=VERTEX_POINT('',#53179); #16033=VERTEX_POINT('',#53183); #16034=VERTEX_POINT('',#53224); #16035=VERTEX_POINT('',#53228); #16036=VERTEX_POINT('',#53232); #16037=VERTEX_POINT('',#53236); #16038=VERTEX_POINT('',#53240); #16039=VERTEX_POINT('',#53244); #16040=VERTEX_POINT('',#53248); #16041=VERTEX_POINT('',#53252); #16042=VERTEX_POINT('',#53257); #16043=VERTEX_POINT('',#53259); #16044=VERTEX_POINT('',#53261); #16045=VERTEX_POINT('',#53263); #16046=VERTEX_POINT('',#53276); #16047=VERTEX_POINT('',#53278); #16048=VERTEX_POINT('',#53280); #16049=VERTEX_POINT('',#53282); #16050=VERTEX_POINT('',#53284); #16051=VERTEX_POINT('',#53286); #16052=VERTEX_POINT('',#53288); #16053=VERTEX_POINT('',#53307); #16054=VERTEX_POINT('',#53309); #16055=VERTEX_POINT('',#53311); #16056=VERTEX_POINT('',#53313); #16057=VERTEX_POINT('',#53315); #16058=VERTEX_POINT('',#53317); #16059=VERTEX_POINT('',#53319); #16060=VERTEX_POINT('',#53321); #16061=VERTEX_POINT('',#53324); #16062=VERTEX_POINT('',#53326); #16063=VERTEX_POINT('',#53328); #16064=VERTEX_POINT('',#53330); #16065=VERTEX_POINT('',#53332); #16066=VERTEX_POINT('',#53334); #16067=VERTEX_POINT('',#53336); #16068=VERTEX_POINT('',#53338); #16069=VERTEX_POINT('',#53342); #16070=VERTEX_POINT('',#53346); #16071=VERTEX_POINT('',#53348); #16072=VERTEX_POINT('',#53350); #16073=VERTEX_POINT('',#53352); #16074=VERTEX_POINT('',#53354); #16075=VERTEX_POINT('',#53356); #16076=VERTEX_POINT('',#53358); #16077=VERTEX_POINT('',#53361); #16078=VERTEX_POINT('',#53363); #16079=VERTEX_POINT('',#53365); #16080=VERTEX_POINT('',#53367); #16081=VERTEX_POINT('',#53369); #16082=VERTEX_POINT('',#53371); #16083=VERTEX_POINT('',#53373); #16084=VERTEX_POINT('',#53375); #16085=VERTEX_POINT('',#53395); #16086=VERTEX_POINT('',#53396); #16087=VERTEX_POINT('',#53399); #16088=VERTEX_POINT('',#53401); #16089=VERTEX_POINT('',#53403); #16090=VERTEX_POINT('',#53405); #16091=VERTEX_POINT('',#53407); #16092=VERTEX_POINT('',#53409); #16093=VERTEX_POINT('',#53413); #16094=VERTEX_POINT('',#53414); #16095=VERTEX_POINT('',#53419); #16096=VERTEX_POINT('',#53421); #16097=VERTEX_POINT('',#53423); #16098=VERTEX_POINT('',#53425); #16099=VERTEX_POINT('',#53427); #16100=VERTEX_POINT('',#53431); #16101=VERTEX_POINT('',#53454); #16102=VERTEX_POINT('',#53457); #16103=VERTEX_POINT('',#53461); #16104=VERTEX_POINT('',#53463); #16105=VERTEX_POINT('',#53467); #16106=VERTEX_POINT('',#53468); #16107=VERTEX_POINT('',#53473); #16108=VERTEX_POINT('',#53475); #16109=VERTEX_POINT('',#53479); #16110=VERTEX_POINT('',#53481); #16111=VERTEX_POINT('',#53483); #16112=VERTEX_POINT('',#53485); #16113=VERTEX_POINT('',#53488); #16114=VERTEX_POINT('',#53490); #16115=VERTEX_POINT('',#53494); #16116=VERTEX_POINT('',#53496); #16117=VERTEX_POINT('',#53498); #16118=VERTEX_POINT('',#53500); #16119=VERTEX_POINT('',#53502); #16120=VERTEX_POINT('',#53504); #16121=VERTEX_POINT('',#53506); #16122=VERTEX_POINT('',#53508); #16123=VERTEX_POINT('',#53511); #16124=VERTEX_POINT('',#53513); #16125=VERTEX_POINT('',#53515); #16126=VERTEX_POINT('',#53517); #16127=VERTEX_POINT('',#53519); #16128=VERTEX_POINT('',#53521); #16129=VERTEX_POINT('',#53523); #16130=VERTEX_POINT('',#53527); #16131=VERTEX_POINT('',#53531); #16132=VERTEX_POINT('',#53533); #16133=VERTEX_POINT('',#53535); #16134=VERTEX_POINT('',#53537); #16135=VERTEX_POINT('',#53539); #16136=VERTEX_POINT('',#53541); #16137=VERTEX_POINT('',#53544); #16138=VERTEX_POINT('',#53546); #16139=VERTEX_POINT('',#53548); #16140=VERTEX_POINT('',#53550); #16141=VERTEX_POINT('',#53552); #16142=VERTEX_POINT('',#53554); #16143=VERTEX_POINT('',#53556); #16144=VERTEX_POINT('',#53558); #16145=VERTEX_POINT('',#53578); #16146=VERTEX_POINT('',#53580); #16147=VERTEX_POINT('',#53582); #16148=VERTEX_POINT('',#53584); #16149=VERTEX_POINT('',#53622); #16150=VERTEX_POINT('',#53625); #16151=VERTEX_POINT('',#53629); #16152=VERTEX_POINT('',#53631); #16153=VERTEX_POINT('',#53635); #16154=VERTEX_POINT('',#53636); #16155=VERTEX_POINT('',#53641); #16156=VERTEX_POINT('',#53643); #16157=VERTEX_POINT('',#53647); #16158=VERTEX_POINT('',#53649); #16159=VERTEX_POINT('',#53651); #16160=VERTEX_POINT('',#53653); #16161=VERTEX_POINT('',#53656); #16162=VERTEX_POINT('',#53658); #16163=VERTEX_POINT('',#53662); #16164=VERTEX_POINT('',#53664); #16165=VERTEX_POINT('',#53666); #16166=VERTEX_POINT('',#53668); #16167=VERTEX_POINT('',#53670); #16168=VERTEX_POINT('',#53672); #16169=VERTEX_POINT('',#53674); #16170=VERTEX_POINT('',#53676); #16171=VERTEX_POINT('',#53679); #16172=VERTEX_POINT('',#53681); #16173=VERTEX_POINT('',#53683); #16174=VERTEX_POINT('',#53685); #16175=VERTEX_POINT('',#53687); #16176=VERTEX_POINT('',#53689); #16177=VERTEX_POINT('',#53691); #16178=VERTEX_POINT('',#53695); #16179=VERTEX_POINT('',#53699); #16180=VERTEX_POINT('',#53701); #16181=VERTEX_POINT('',#53703); #16182=VERTEX_POINT('',#53705); #16183=VERTEX_POINT('',#53707); #16184=VERTEX_POINT('',#53709); #16185=VERTEX_POINT('',#53712); #16186=VERTEX_POINT('',#53714); #16187=VERTEX_POINT('',#53716); #16188=VERTEX_POINT('',#53718); #16189=VERTEX_POINT('',#53720); #16190=VERTEX_POINT('',#53722); #16191=VERTEX_POINT('',#53724); #16192=VERTEX_POINT('',#53726); #16193=VERTEX_POINT('',#53746); #16194=VERTEX_POINT('',#53748); #16195=VERTEX_POINT('',#53750); #16196=VERTEX_POINT('',#53752); #16197=VERTEX_POINT('',#53826); #16198=VERTEX_POINT('',#53828); #16199=VERTEX_POINT('',#53834); #16200=VERTEX_POINT('',#53835); #16201=VERTEX_POINT('',#53837); #16202=VERTEX_POINT('',#53840); #16203=VERTEX_POINT('',#53842); #16204=VERTEX_POINT('',#53846); #16205=VERTEX_POINT('',#53847); #16206=VERTEX_POINT('',#53849); #16207=VERTEX_POINT('',#53851); #16208=VERTEX_POINT('',#53856); #16209=VERTEX_POINT('',#53858); #16210=VERTEX_POINT('',#53863); #16211=VERTEX_POINT('',#53867); #16212=VERTEX_POINT('',#53869); #16213=VERTEX_POINT('',#53871); #16214=VERTEX_POINT('',#53896); #16215=VERTEX_POINT('',#53897); #16216=VERTEX_POINT('',#53899); #16217=VERTEX_POINT('',#53901); #16218=VERTEX_POINT('',#53905); #16219=VERTEX_POINT('',#53906); #16220=VERTEX_POINT('',#53911); #16221=VERTEX_POINT('',#53913); #16222=VERTEX_POINT('',#53917); #16223=VERTEX_POINT('',#53919); #16224=VERTEX_POINT('',#53921); #16225=VERTEX_POINT('',#53923); #16226=VERTEX_POINT('',#53925); #16227=VERTEX_POINT('',#53927); #16228=VERTEX_POINT('',#53929); #16229=VERTEX_POINT('',#53931); #16230=VERTEX_POINT('',#53933); #16231=VERTEX_POINT('',#53935); #16232=VERTEX_POINT('',#53937); #16233=VERTEX_POINT('',#53939); #16234=VERTEX_POINT('',#53941); #16235=VERTEX_POINT('',#53943); #16236=VERTEX_POINT('',#53945); #16237=VERTEX_POINT('',#53947); #16238=VERTEX_POINT('',#53950); #16239=VERTEX_POINT('',#53951); #16240=VERTEX_POINT('',#53953); #16241=VERTEX_POINT('',#53955); #16242=VERTEX_POINT('',#53958); #16243=VERTEX_POINT('',#53959); #16244=VERTEX_POINT('',#53961); #16245=VERTEX_POINT('',#53963); #16246=VERTEX_POINT('',#53966); #16247=VERTEX_POINT('',#53967); #16248=VERTEX_POINT('',#53969); #16249=VERTEX_POINT('',#53971); #16250=VERTEX_POINT('',#53975); #16251=VERTEX_POINT('',#53977); #16252=VERTEX_POINT('',#53979); #16253=VERTEX_POINT('',#53981); #16254=VERTEX_POINT('',#53983); #16255=VERTEX_POINT('',#53985); #16256=VERTEX_POINT('',#53987); #16257=VERTEX_POINT('',#53989); #16258=VERTEX_POINT('',#53991); #16259=VERTEX_POINT('',#53993); #16260=VERTEX_POINT('',#53995); #16261=VERTEX_POINT('',#53997); #16262=VERTEX_POINT('',#53999); #16263=VERTEX_POINT('',#54001); #16264=VERTEX_POINT('',#54003); #16265=VERTEX_POINT('',#54005); #16266=VERTEX_POINT('',#54008); #16267=VERTEX_POINT('',#54009); #16268=VERTEX_POINT('',#54011); #16269=VERTEX_POINT('',#54013); #16270=VERTEX_POINT('',#54016); #16271=VERTEX_POINT('',#54017); #16272=VERTEX_POINT('',#54019); #16273=VERTEX_POINT('',#54021); #16274=VERTEX_POINT('',#54024); #16275=VERTEX_POINT('',#54025); #16276=VERTEX_POINT('',#54027); #16277=VERTEX_POINT('',#54029); #16278=VERTEX_POINT('',#54066); #16279=VERTEX_POINT('',#54068); #16280=VERTEX_POINT('',#54072); #16281=VERTEX_POINT('',#54076); #16282=VERTEX_POINT('',#54082); #16283=VERTEX_POINT('',#54084); #16284=VERTEX_POINT('',#54088); #16285=VERTEX_POINT('',#54092); #16286=VERTEX_POINT('',#54098); #16287=VERTEX_POINT('',#54100); #16288=VERTEX_POINT('',#54104); #16289=VERTEX_POINT('',#54108); #16290=VERTEX_POINT('',#54114); #16291=VERTEX_POINT('',#54116); #16292=VERTEX_POINT('',#54120); #16293=VERTEX_POINT('',#54124); #16294=VERTEX_POINT('',#54130); #16295=VERTEX_POINT('',#54132); #16296=VERTEX_POINT('',#54136); #16297=VERTEX_POINT('',#54140); #16298=VERTEX_POINT('',#54146); #16299=VERTEX_POINT('',#54148); #16300=VERTEX_POINT('',#54152); #16301=VERTEX_POINT('',#54156); #16302=VERTEX_POINT('',#54162); #16303=VERTEX_POINT('',#54164); #16304=VERTEX_POINT('',#54168); #16305=VERTEX_POINT('',#54172); #16306=VERTEX_POINT('',#54178); #16307=VERTEX_POINT('',#54179); #16308=VERTEX_POINT('',#54184); #16309=VERTEX_POINT('',#54188); #16310=VERTEX_POINT('',#54194); #16311=VERTEX_POINT('',#54195); #16312=VERTEX_POINT('',#54200); #16313=VERTEX_POINT('',#54204); #16314=VERTEX_POINT('',#54210); #16315=VERTEX_POINT('',#54212); #16316=VERTEX_POINT('',#54216); #16317=VERTEX_POINT('',#54220); #16318=VERTEX_POINT('',#54226); #16319=VERTEX_POINT('',#54227); #16320=VERTEX_POINT('',#54232); #16321=VERTEX_POINT('',#54236); #16322=VERTEX_POINT('',#54242); #16323=VERTEX_POINT('',#54243); #16324=VERTEX_POINT('',#54248); #16325=VERTEX_POINT('',#54252); #16326=VERTEX_POINT('',#54268); #16327=VERTEX_POINT('',#54269); #16328=VERTEX_POINT('',#54271); #16329=VERTEX_POINT('',#54273); #16330=VERTEX_POINT('',#54275); #16331=VERTEX_POINT('',#54277); #16332=VERTEX_POINT('',#54279); #16333=VERTEX_POINT('',#54281); #16334=VERTEX_POINT('',#54285); #16335=VERTEX_POINT('',#54286); #16336=VERTEX_POINT('',#54291); #16337=VERTEX_POINT('',#54295); #16338=VERTEX_POINT('',#54299); #16339=VERTEX_POINT('',#54303); #16340=VERTEX_POINT('',#54307); #16341=VERTEX_POINT('',#54311); #16342=VERTEX_POINT('',#54317); #16343=VERTEX_POINT('',#54318); #16344=VERTEX_POINT('',#54320); #16345=VERTEX_POINT('',#54322); #16346=VERTEX_POINT('',#54324); #16347=VERTEX_POINT('',#54326); #16348=VERTEX_POINT('',#54328); #16349=VERTEX_POINT('',#54330); #16350=VERTEX_POINT('',#54334); #16351=VERTEX_POINT('',#54336); #16352=VERTEX_POINT('',#54340); #16353=VERTEX_POINT('',#54344); #16354=VERTEX_POINT('',#54348); #16355=VERTEX_POINT('',#54352); #16356=VERTEX_POINT('',#54356); #16357=VERTEX_POINT('',#54360); #16358=VERTEX_POINT('',#54366); #16359=VERTEX_POINT('',#54367); #16360=VERTEX_POINT('',#54369); #16361=VERTEX_POINT('',#54371); #16362=VERTEX_POINT('',#54373); #16363=VERTEX_POINT('',#54375); #16364=VERTEX_POINT('',#54377); #16365=VERTEX_POINT('',#54379); #16366=VERTEX_POINT('',#54383); #16367=VERTEX_POINT('',#54384); #16368=VERTEX_POINT('',#54389); #16369=VERTEX_POINT('',#54393); #16370=VERTEX_POINT('',#54397); #16371=VERTEX_POINT('',#54401); #16372=VERTEX_POINT('',#54405); #16373=VERTEX_POINT('',#54409); #16374=VERTEX_POINT('',#54419); #16375=VERTEX_POINT('',#54420); #16376=VERTEX_POINT('',#54422); #16377=VERTEX_POINT('',#54424); #16378=VERTEX_POINT('',#54426); #16379=VERTEX_POINT('',#54428); #16380=VERTEX_POINT('',#54432); #16381=VERTEX_POINT('',#54433); #16382=VERTEX_POINT('',#54435); #16383=VERTEX_POINT('',#54437); #16384=VERTEX_POINT('',#54441); #16385=VERTEX_POINT('',#54443); #16386=VERTEX_POINT('',#54447); #16387=VERTEX_POINT('',#54449); #16388=VERTEX_POINT('',#54453); #16389=VERTEX_POINT('',#54454); #16390=VERTEX_POINT('',#54456); #16391=VERTEX_POINT('',#54458); #16392=VERTEX_POINT('',#54460); #16393=VERTEX_POINT('',#54462); #16394=VERTEX_POINT('',#54464); #16395=VERTEX_POINT('',#54466); #16396=VERTEX_POINT('',#54469); #16397=VERTEX_POINT('',#54471); #16398=VERTEX_POINT('',#54473); #16399=VERTEX_POINT('',#54475); #16400=VERTEX_POINT('',#54477); #16401=VERTEX_POINT('',#54479); #16402=VERTEX_POINT('',#54481); #16403=VERTEX_POINT('',#54483); #16404=VERTEX_POINT('',#54485); #16405=VERTEX_POINT('',#54487); #16406=VERTEX_POINT('',#54489); #16407=VERTEX_POINT('',#54493); #16408=VERTEX_POINT('',#54495); #16409=VERTEX_POINT('',#54497); #16410=VERTEX_POINT('',#54499); #16411=VERTEX_POINT('',#54501); #16412=VERTEX_POINT('',#54503); #16413=VERTEX_POINT('',#54505); #16414=VERTEX_POINT('',#54507); #16415=VERTEX_POINT('',#54509); #16416=VERTEX_POINT('',#54511); #16417=VERTEX_POINT('',#54513); #16418=VERTEX_POINT('',#54516); #16419=VERTEX_POINT('',#54518); #16420=VERTEX_POINT('',#54520); #16421=VERTEX_POINT('',#54522); #16422=VERTEX_POINT('',#54535); #16423=VERTEX_POINT('',#54536); #16424=VERTEX_POINT('',#54538); #16425=VERTEX_POINT('',#54540); #16426=VERTEX_POINT('',#54544); #16427=VERTEX_POINT('',#54546); #16428=VERTEX_POINT('',#54553); #16429=VERTEX_POINT('',#54554); #16430=VERTEX_POINT('',#54556); #16431=VERTEX_POINT('',#54558); #16432=VERTEX_POINT('',#54562); #16433=VERTEX_POINT('',#54564); #16434=VERTEX_POINT('',#54568); #16435=VERTEX_POINT('',#54570); #16436=VERTEX_POINT('',#54574); #16437=VERTEX_POINT('',#54576); #16438=VERTEX_POINT('',#54580); #16439=VERTEX_POINT('',#54582); #16440=VERTEX_POINT('',#54586); #16441=VERTEX_POINT('',#54588); #16442=VERTEX_POINT('',#54592); #16443=VERTEX_POINT('',#54594); #16444=VERTEX_POINT('',#54611); #16445=VERTEX_POINT('',#54612); #16446=VERTEX_POINT('',#54618); #16447=VERTEX_POINT('',#54620); #16448=VERTEX_POINT('',#54637); #16449=VERTEX_POINT('',#54643); #16450=VERTEX_POINT('',#54660); #16451=VERTEX_POINT('',#54666); #16452=VERTEX_POINT('',#54683); #16453=VERTEX_POINT('',#54689); #16454=VERTEX_POINT('',#54706); #16455=VERTEX_POINT('',#54712); #16456=VERTEX_POINT('',#54729); #16457=VERTEX_POINT('',#54735); #16458=VERTEX_POINT('',#54743); #16459=VERTEX_POINT('',#54745); #16460=VERTEX_POINT('',#54749); #16461=VERTEX_POINT('',#54751); #16462=VERTEX_POINT('',#54767); #16463=VERTEX_POINT('',#54768); #16464=VERTEX_POINT('',#54774); #16465=VERTEX_POINT('',#54776); #16466=VERTEX_POINT('',#54793); #16467=VERTEX_POINT('',#54799); #16468=VERTEX_POINT('',#54816); #16469=VERTEX_POINT('',#54822); #16470=VERTEX_POINT('',#54839); #16471=VERTEX_POINT('',#54845); #16472=VERTEX_POINT('',#54862); #16473=VERTEX_POINT('',#54868); #16474=VERTEX_POINT('',#54885); #16475=VERTEX_POINT('',#54891); #16476=VERTEX_POINT('',#54899); #16477=VERTEX_POINT('',#54901); #16478=VERTEX_POINT('',#54905); #16479=VERTEX_POINT('',#54907); #16480=VERTEX_POINT('',#54914); #16481=VERTEX_POINT('',#54915); #16482=VERTEX_POINT('',#54917); #16483=VERTEX_POINT('',#54919); #16484=VERTEX_POINT('',#54932); #16485=VERTEX_POINT('',#54938); #16486=VERTEX_POINT('',#54955); #16487=VERTEX_POINT('',#54961); #16488=VERTEX_POINT('',#54978); #16489=VERTEX_POINT('',#54984); #16490=VERTEX_POINT('',#55001); #16491=VERTEX_POINT('',#55007); #16492=VERTEX_POINT('',#55024); #16493=VERTEX_POINT('',#55030); #16494=VERTEX_POINT('',#55047); #16495=VERTEX_POINT('',#55053); #16496=VERTEX_POINT('',#55070); #16497=VERTEX_POINT('',#55076); #16498=VERTEX_POINT('',#55093); #16499=VERTEX_POINT('',#55099); #16500=VERTEX_POINT('',#55116); #16501=VERTEX_POINT('',#55122); #16502=VERTEX_POINT('',#55139); #16503=VERTEX_POINT('',#55145); #16504=VERTEX_POINT('',#55162); #16505=VERTEX_POINT('',#55168); #16506=VERTEX_POINT('',#55185); #16507=VERTEX_POINT('',#55191); #16508=VERTEX_POINT('',#55199); #16509=VERTEX_POINT('',#55201); #16510=VERTEX_POINT('',#55209); #16511=VERTEX_POINT('',#55210); #16512=VERTEX_POINT('',#55212); #16513=VERTEX_POINT('',#55214); #16514=VERTEX_POINT('',#55216); #16515=VERTEX_POINT('',#55218); #16516=VERTEX_POINT('',#55220); #16517=VERTEX_POINT('',#55222); #16518=VERTEX_POINT('',#55225); #16519=VERTEX_POINT('',#55226); #16520=VERTEX_POINT('',#55231); #16521=VERTEX_POINT('',#55236); #16522=VERTEX_POINT('',#55241); #16523=VERTEX_POINT('',#55246); #16524=VERTEX_POINT('',#55251); #16525=VERTEX_POINT('',#55256); #16526=VERTEX_POINT('',#55261); #16527=VERTEX_POINT('',#55266); #16528=VERTEX_POINT('',#55271); #16529=VERTEX_POINT('',#55276); #16530=VERTEX_POINT('',#55281); #16531=VERTEX_POINT('',#55286); #16532=VERTEX_POINT('',#55291); #16533=VERTEX_POINT('',#55296); #16534=VERTEX_POINT('',#55301); #16535=VERTEX_POINT('',#55306); #16536=VERTEX_POINT('',#55311); #16537=VERTEX_POINT('',#55316); #16538=VERTEX_POINT('',#55325); #16539=VERTEX_POINT('',#55326); #16540=VERTEX_POINT('',#55328); #16541=VERTEX_POINT('',#55333); #16542=VERTEX_POINT('',#55335); #16543=VERTEX_POINT('',#55340); #16544=VERTEX_POINT('',#55345); #16545=VERTEX_POINT('',#55347); #16546=VERTEX_POINT('',#55352); #16547=VERTEX_POINT('',#55357); #16548=VERTEX_POINT('',#55359); #16549=VERTEX_POINT('',#55364); #16550=VERTEX_POINT('',#55369); #16551=VERTEX_POINT('',#55371); #16552=VERTEX_POINT('',#55390); #16553=VERTEX_POINT('',#55391); #16554=VERTEX_POINT('',#55396); #16555=VERTEX_POINT('',#55398); #16556=VERTEX_POINT('',#55412); #16557=VERTEX_POINT('',#55417); #16558=VERTEX_POINT('',#55431); #16559=VERTEX_POINT('',#55436); #16560=VERTEX_POINT('',#55443); #16561=VERTEX_POINT('',#55445); #16562=VERTEX_POINT('',#55449); #16563=VERTEX_POINT('',#55451); #16564=VERTEX_POINT('',#55462); #16565=VERTEX_POINT('',#55467); #16566=VERTEX_POINT('',#55481); #16567=VERTEX_POINT('',#55486); #16568=VERTEX_POINT('',#55500); #16569=VERTEX_POINT('',#55505); #16570=VERTEX_POINT('',#55519); #16571=VERTEX_POINT('',#55524); #16572=VERTEX_POINT('',#55538); #16573=VERTEX_POINT('',#55543); #16574=VERTEX_POINT('',#55550); #16575=VERTEX_POINT('',#55552); #16576=VERTEX_POINT('',#55556); #16577=VERTEX_POINT('',#55558); #16578=VERTEX_POINT('',#55569); #16579=VERTEX_POINT('',#55574); #16580=VERTEX_POINT('',#55604); #16581=VERTEX_POINT('',#55606); #16582=VERTEX_POINT('',#55620); #16583=VERTEX_POINT('',#55634); #16584=VERTEX_POINT('',#55648); #16585=VERTEX_POINT('',#55662); #16586=VERTEX_POINT('',#55676); #16587=VERTEX_POINT('',#55690); #16588=VERTEX_POINT('',#55704); #16589=VERTEX_POINT('',#55718); #16590=VERTEX_POINT('',#55732); #16591=VERTEX_POINT('',#55746); #16592=VERTEX_POINT('',#55760); #16593=VERTEX_POINT('',#55774); #16594=VERTEX_POINT('',#55788); #16595=VERTEX_POINT('',#55802); #16596=VERTEX_POINT('',#55816); #16597=VERTEX_POINT('',#55830); #16598=VERTEX_POINT('',#55844); #16599=VERTEX_POINT('',#55858); #16600=VERTEX_POINT('',#55885); #16601=VERTEX_POINT('',#55886); #16602=VERTEX_POINT('',#55891); #16603=VERTEX_POINT('',#55893); #16604=VERTEX_POINT('',#55907); #16605=VERTEX_POINT('',#55912); #16606=VERTEX_POINT('',#55926); #16607=VERTEX_POINT('',#55931); #16608=VERTEX_POINT('',#55961); #16609=VERTEX_POINT('',#55962); #16610=VERTEX_POINT('',#55967); #16611=VERTEX_POINT('',#55969); #16612=VERTEX_POINT('',#55983); #16613=VERTEX_POINT('',#55988); #16614=VERTEX_POINT('',#56002); #16615=VERTEX_POINT('',#56007); #16616=VERTEX_POINT('',#56038); #16617=VERTEX_POINT('',#56039); #16618=VERTEX_POINT('',#56044); #16619=VERTEX_POINT('',#56046); #16620=VERTEX_POINT('',#56053); #16621=VERTEX_POINT('',#56055); #16622=VERTEX_POINT('',#56066); #16623=VERTEX_POINT('',#56071); #16624=VERTEX_POINT('',#56078); #16625=VERTEX_POINT('',#56080); #16626=VERTEX_POINT('',#56091); #16627=VERTEX_POINT('',#56096); #16628=VERTEX_POINT('',#56103); #16629=VERTEX_POINT('',#56105); #16630=VERTEX_POINT('',#56116); #16631=VERTEX_POINT('',#56121); #16632=VERTEX_POINT('',#56138); #16633=VERTEX_POINT('',#56139); #16634=VERTEX_POINT('',#56144); #16635=VERTEX_POINT('',#56146); #16636=VERTEX_POINT('',#56153); #16637=VERTEX_POINT('',#56155); #16638=VERTEX_POINT('',#56166); #16639=VERTEX_POINT('',#56171); #16640=VERTEX_POINT('',#56178); #16641=VERTEX_POINT('',#56180); #16642=VERTEX_POINT('',#56191); #16643=VERTEX_POINT('',#56196); #16644=VERTEX_POINT('',#56203); #16645=VERTEX_POINT('',#56205); #16646=VERTEX_POINT('',#56216); #16647=VERTEX_POINT('',#56221); #16648=VERTEX_POINT('',#56238); #16649=VERTEX_POINT('',#56239); #16650=VERTEX_POINT('',#56244); #16651=VERTEX_POINT('',#56246); #16652=VERTEX_POINT('',#56253); #16653=VERTEX_POINT('',#56255); #16654=VERTEX_POINT('',#56266); #16655=VERTEX_POINT('',#56271); #16656=VERTEX_POINT('',#56278); #16657=VERTEX_POINT('',#56280); #16658=VERTEX_POINT('',#56291); #16659=VERTEX_POINT('',#56296); #16660=VERTEX_POINT('',#56303); #16661=VERTEX_POINT('',#56305); #16662=VERTEX_POINT('',#56316); #16663=VERTEX_POINT('',#56321); #16664=VERTEX_POINT('',#56338); #16665=VERTEX_POINT('',#56339); #16666=VERTEX_POINT('',#56344); #16667=VERTEX_POINT('',#56346); #16668=VERTEX_POINT('',#56353); #16669=VERTEX_POINT('',#56355); #16670=VERTEX_POINT('',#56366); #16671=VERTEX_POINT('',#56371); #16672=VERTEX_POINT('',#56378); #16673=VERTEX_POINT('',#56380); #16674=VERTEX_POINT('',#56391); #16675=VERTEX_POINT('',#56396); #16676=VERTEX_POINT('',#56403); #16677=VERTEX_POINT('',#56405); #16678=VERTEX_POINT('',#56416); #16679=VERTEX_POINT('',#56421); #16680=VERTEX_POINT('',#56438); #16681=VERTEX_POINT('',#56439); #16682=VERTEX_POINT('',#56444); #16683=VERTEX_POINT('',#56446); #16684=VERTEX_POINT('',#56453); #16685=VERTEX_POINT('',#56455); #16686=VERTEX_POINT('',#56466); #16687=VERTEX_POINT('',#56471); #16688=VERTEX_POINT('',#56478); #16689=VERTEX_POINT('',#56480); #16690=VERTEX_POINT('',#56491); #16691=VERTEX_POINT('',#56496); #16692=VERTEX_POINT('',#56503); #16693=VERTEX_POINT('',#56505); #16694=VERTEX_POINT('',#56516); #16695=VERTEX_POINT('',#56521); #16696=VERTEX_POINT('',#56538); #16697=VERTEX_POINT('',#56539); #16698=VERTEX_POINT('',#56544); #16699=VERTEX_POINT('',#56546); #16700=VERTEX_POINT('',#56553); #16701=VERTEX_POINT('',#56555); #16702=VERTEX_POINT('',#56566); #16703=VERTEX_POINT('',#56571); #16704=VERTEX_POINT('',#56578); #16705=VERTEX_POINT('',#56580); #16706=VERTEX_POINT('',#56591); #16707=VERTEX_POINT('',#56596); #16708=VERTEX_POINT('',#56603); #16709=VERTEX_POINT('',#56605); #16710=VERTEX_POINT('',#56616); #16711=VERTEX_POINT('',#56621); #16712=VERTEX_POINT('',#56638); #16713=VERTEX_POINT('',#56639); #16714=VERTEX_POINT('',#56644); #16715=VERTEX_POINT('',#56646); #16716=VERTEX_POINT('',#56653); #16717=VERTEX_POINT('',#56655); #16718=VERTEX_POINT('',#56666); #16719=VERTEX_POINT('',#56671); #16720=VERTEX_POINT('',#56678); #16721=VERTEX_POINT('',#56680); #16722=VERTEX_POINT('',#56691); #16723=VERTEX_POINT('',#56696); #16724=VERTEX_POINT('',#56703); #16725=VERTEX_POINT('',#56705); #16726=VERTEX_POINT('',#56716); #16727=VERTEX_POINT('',#56721); #16728=VERTEX_POINT('',#56738); #16729=VERTEX_POINT('',#56739); #16730=VERTEX_POINT('',#56744); #16731=VERTEX_POINT('',#56746); #16732=VERTEX_POINT('',#56753); #16733=VERTEX_POINT('',#56755); #16734=VERTEX_POINT('',#56766); #16735=VERTEX_POINT('',#56771); #16736=VERTEX_POINT('',#56778); #16737=VERTEX_POINT('',#56780); #16738=VERTEX_POINT('',#56791); #16739=VERTEX_POINT('',#56796); #16740=VERTEX_POINT('',#56803); #16741=VERTEX_POINT('',#56805); #16742=VERTEX_POINT('',#56816); #16743=VERTEX_POINT('',#56821); #16744=VERTEX_POINT('',#56838); #16745=VERTEX_POINT('',#56839); #16746=VERTEX_POINT('',#56844); #16747=VERTEX_POINT('',#56846); #16748=VERTEX_POINT('',#56853); #16749=VERTEX_POINT('',#56855); #16750=VERTEX_POINT('',#56866); #16751=VERTEX_POINT('',#56871); #16752=VERTEX_POINT('',#56878); #16753=VERTEX_POINT('',#56880); #16754=VERTEX_POINT('',#56891); #16755=VERTEX_POINT('',#56896); #16756=VERTEX_POINT('',#56903); #16757=VERTEX_POINT('',#56905); #16758=VERTEX_POINT('',#56916); #16759=VERTEX_POINT('',#56921); #16760=VERTEX_POINT('',#56938); #16761=VERTEX_POINT('',#56939); #16762=VERTEX_POINT('',#56944); #16763=VERTEX_POINT('',#56946); #16764=VERTEX_POINT('',#56953); #16765=VERTEX_POINT('',#56955); #16766=VERTEX_POINT('',#56966); #16767=VERTEX_POINT('',#56971); #16768=VERTEX_POINT('',#56978); #16769=VERTEX_POINT('',#56980); #16770=VERTEX_POINT('',#56991); #16771=VERTEX_POINT('',#56996); #16772=VERTEX_POINT('',#57003); #16773=VERTEX_POINT('',#57005); #16774=VERTEX_POINT('',#57016); #16775=VERTEX_POINT('',#57021); #16776=VERTEX_POINT('',#57038); #16777=VERTEX_POINT('',#57039); #16778=VERTEX_POINT('',#57044); #16779=VERTEX_POINT('',#57046); #16780=VERTEX_POINT('',#57053); #16781=VERTEX_POINT('',#57055); #16782=VERTEX_POINT('',#57066); #16783=VERTEX_POINT('',#57071); #16784=VERTEX_POINT('',#57078); #16785=VERTEX_POINT('',#57080); #16786=VERTEX_POINT('',#57091); #16787=VERTEX_POINT('',#57096); #16788=VERTEX_POINT('',#57103); #16789=VERTEX_POINT('',#57105); #16790=VERTEX_POINT('',#57116); #16791=VERTEX_POINT('',#57121); #16792=VERTEX_POINT('',#57138); #16793=VERTEX_POINT('',#57139); #16794=VERTEX_POINT('',#57144); #16795=VERTEX_POINT('',#57146); #16796=VERTEX_POINT('',#57153); #16797=VERTEX_POINT('',#57155); #16798=VERTEX_POINT('',#57166); #16799=VERTEX_POINT('',#57171); #16800=VERTEX_POINT('',#57178); #16801=VERTEX_POINT('',#57180); #16802=VERTEX_POINT('',#57191); #16803=VERTEX_POINT('',#57196); #16804=VERTEX_POINT('',#57203); #16805=VERTEX_POINT('',#57205); #16806=VERTEX_POINT('',#57216); #16807=VERTEX_POINT('',#57221); #16808=VERTEX_POINT('',#57238); #16809=VERTEX_POINT('',#57239); #16810=VERTEX_POINT('',#57244); #16811=VERTEX_POINT('',#57246); #16812=VERTEX_POINT('',#57253); #16813=VERTEX_POINT('',#57255); #16814=VERTEX_POINT('',#57266); #16815=VERTEX_POINT('',#57271); #16816=VERTEX_POINT('',#57278); #16817=VERTEX_POINT('',#57280); #16818=VERTEX_POINT('',#57291); #16819=VERTEX_POINT('',#57296); #16820=VERTEX_POINT('',#57303); #16821=VERTEX_POINT('',#57305); #16822=VERTEX_POINT('',#57316); #16823=VERTEX_POINT('',#57321); #16824=VERTEX_POINT('',#57338); #16825=VERTEX_POINT('',#57339); #16826=VERTEX_POINT('',#57344); #16827=VERTEX_POINT('',#57346); #16828=VERTEX_POINT('',#57353); #16829=VERTEX_POINT('',#57355); #16830=VERTEX_POINT('',#57366); #16831=VERTEX_POINT('',#57371); #16832=VERTEX_POINT('',#57378); #16833=VERTEX_POINT('',#57380); #16834=VERTEX_POINT('',#57391); #16835=VERTEX_POINT('',#57396); #16836=VERTEX_POINT('',#57403); #16837=VERTEX_POINT('',#57405); #16838=VERTEX_POINT('',#57416); #16839=VERTEX_POINT('',#57421); #16840=VERTEX_POINT('',#57438); #16841=VERTEX_POINT('',#57439); #16842=VERTEX_POINT('',#57444); #16843=VERTEX_POINT('',#57446); #16844=VERTEX_POINT('',#57453); #16845=VERTEX_POINT('',#57455); #16846=VERTEX_POINT('',#57466); #16847=VERTEX_POINT('',#57471); #16848=VERTEX_POINT('',#57478); #16849=VERTEX_POINT('',#57480); #16850=VERTEX_POINT('',#57491); #16851=VERTEX_POINT('',#57496); #16852=VERTEX_POINT('',#57503); #16853=VERTEX_POINT('',#57505); #16854=VERTEX_POINT('',#57516); #16855=VERTEX_POINT('',#57521); #16856=VERTEX_POINT('',#57538); #16857=VERTEX_POINT('',#57539); #16858=VERTEX_POINT('',#57544); #16859=VERTEX_POINT('',#57546); #16860=VERTEX_POINT('',#57553); #16861=VERTEX_POINT('',#57555); #16862=VERTEX_POINT('',#57566); #16863=VERTEX_POINT('',#57571); #16864=VERTEX_POINT('',#57578); #16865=VERTEX_POINT('',#57580); #16866=VERTEX_POINT('',#57591); #16867=VERTEX_POINT('',#57596); #16868=VERTEX_POINT('',#57603); #16869=VERTEX_POINT('',#57605); #16870=VERTEX_POINT('',#57616); #16871=VERTEX_POINT('',#57621); #16872=VERTEX_POINT('',#57638); #16873=VERTEX_POINT('',#57639); #16874=VERTEX_POINT('',#57644); #16875=VERTEX_POINT('',#57646); #16876=VERTEX_POINT('',#57653); #16877=VERTEX_POINT('',#57655); #16878=VERTEX_POINT('',#57666); #16879=VERTEX_POINT('',#57671); #16880=VERTEX_POINT('',#57678); #16881=VERTEX_POINT('',#57680); #16882=VERTEX_POINT('',#57691); #16883=VERTEX_POINT('',#57696); #16884=VERTEX_POINT('',#57703); #16885=VERTEX_POINT('',#57705); #16886=VERTEX_POINT('',#57716); #16887=VERTEX_POINT('',#57721); #16888=VERTEX_POINT('',#57738); #16889=VERTEX_POINT('',#57739); #16890=VERTEX_POINT('',#57744); #16891=VERTEX_POINT('',#57746); #16892=VERTEX_POINT('',#57753); #16893=VERTEX_POINT('',#57755); #16894=VERTEX_POINT('',#57766); #16895=VERTEX_POINT('',#57771); #16896=VERTEX_POINT('',#57778); #16897=VERTEX_POINT('',#57780); #16898=VERTEX_POINT('',#57791); #16899=VERTEX_POINT('',#57796); #16900=VERTEX_POINT('',#57803); #16901=VERTEX_POINT('',#57805); #16902=VERTEX_POINT('',#57816); #16903=VERTEX_POINT('',#57821); #16904=VERTEX_POINT('',#57831); #16905=VERTEX_POINT('',#57833); #16906=VERTEX_POINT('',#57844); #16907=VERTEX_POINT('',#57858); #16908=VERTEX_POINT('',#57865); #16909=VERTEX_POINT('',#57876); #16910=VERTEX_POINT('',#57890); #16911=VERTEX_POINT('',#57897); #16912=VERTEX_POINT('',#57908); #16913=VERTEX_POINT('',#57922); #16914=VERTEX_POINT('',#57929); #16915=VERTEX_POINT('',#57940); #16916=VERTEX_POINT('',#57954); #16917=VERTEX_POINT('',#57961); #16918=VERTEX_POINT('',#57998); #16919=VERTEX_POINT('',#57999); #16920=VERTEX_POINT('',#58001); #16921=VERTEX_POINT('',#58003); #16922=VERTEX_POINT('',#58013); #16923=VERTEX_POINT('',#58014); #16924=VERTEX_POINT('',#58016); #16925=VERTEX_POINT('',#58018); #16926=VERTEX_POINT('',#58038); #16927=VERTEX_POINT('',#58039); #16928=VERTEX_POINT('',#58041); #16929=VERTEX_POINT('',#58043); #16930=VERTEX_POINT('',#58053); #16931=VERTEX_POINT('',#58054); #16932=VERTEX_POINT('',#58056); #16933=VERTEX_POINT('',#58058); #16934=VERTEX_POINT('',#58085); #16935=VERTEX_POINT('',#58087); #16936=VERTEX_POINT('',#58091); #16937=VERTEX_POINT('',#58095); #16938=VERTEX_POINT('',#58099); #16939=VERTEX_POINT('',#58103); #16940=VERTEX_POINT('',#58105); #16941=VERTEX_POINT('',#58120); #16942=VERTEX_POINT('',#58135); #16943=VERTEX_POINT('',#58136); #16944=VERTEX_POINT('',#58138); #16945=VERTEX_POINT('',#58140); #16946=VERTEX_POINT('',#58144); #16947=VERTEX_POINT('',#58146); #16948=VERTEX_POINT('',#58150); #16949=VERTEX_POINT('',#58154); #16950=VERTEX_POINT('',#58160); #16951=VERTEX_POINT('',#58161); #16952=VERTEX_POINT('',#58163); #16953=VERTEX_POINT('',#58165); #16954=VERTEX_POINT('',#58169); #16955=VERTEX_POINT('',#58171); #16956=VERTEX_POINT('',#58175); #16957=VERTEX_POINT('',#58179); #16958=VERTEX_POINT('',#58185); #16959=VERTEX_POINT('',#58187); #16960=VERTEX_POINT('',#58191); #16961=VERTEX_POINT('',#58196); #16962=VERTEX_POINT('',#58198); #16963=VERTEX_POINT('',#58202); #16964=VERTEX_POINT('',#58207); #16965=VERTEX_POINT('',#58209); #16966=VERTEX_POINT('',#58213); #16967=VERTEX_POINT('',#58218); #16968=VERTEX_POINT('',#58219); #16969=VERTEX_POINT('',#58221); #16970=VERTEX_POINT('',#58223); #16971=VERTEX_POINT('',#58227); #16972=VERTEX_POINT('',#58228); #16973=VERTEX_POINT('',#58231); #16974=VERTEX_POINT('',#58235); #16975=VERTEX_POINT('',#58236); #16976=VERTEX_POINT('',#58238); #16977=VERTEX_POINT('',#58246); #16978=VERTEX_POINT('',#58248); #16979=VERTEX_POINT('',#58250); #16980=VERTEX_POINT('',#58252); #16981=VERTEX_POINT('',#58254); #16982=VERTEX_POINT('',#58256); #16983=VERTEX_POINT('',#58258); #16984=VERTEX_POINT('',#58260); #16985=VERTEX_POINT('',#58263); #16986=VERTEX_POINT('',#58264); #16987=VERTEX_POINT('',#58266); #16988=VERTEX_POINT('',#58268); #16989=VERTEX_POINT('',#58272); #16990=VERTEX_POINT('',#58273); #16991=VERTEX_POINT('',#58275); #16992=VERTEX_POINT('',#58277); #16993=VERTEX_POINT('',#58281); #16994=VERTEX_POINT('',#58282); #16995=VERTEX_POINT('',#58287); #16996=VERTEX_POINT('',#58288); #16997=VERTEX_POINT('',#58296); #16998=VERTEX_POINT('',#58298); #16999=VERTEX_POINT('',#58300); #17000=VERTEX_POINT('',#58304); #17001=VERTEX_POINT('',#58308); #17002=VERTEX_POINT('',#58310); #17003=VERTEX_POINT('',#58313); #17004=VERTEX_POINT('',#58314); #17005=VERTEX_POINT('',#58316); #17006=VERTEX_POINT('',#58318); #17007=VERTEX_POINT('',#58322); #17008=VERTEX_POINT('',#58324); #17009=VERTEX_POINT('',#58328); #17010=VERTEX_POINT('',#58332); #17011=VERTEX_POINT('',#58338); #17012=VERTEX_POINT('',#58340); #17013=VERTEX_POINT('',#58344); #17014=VERTEX_POINT('',#58348); #17015=VERTEX_POINT('',#58349); #17016=VERTEX_POINT('',#58351); #17017=VERTEX_POINT('',#58353); #17018=VERTEX_POINT('',#58357); #17019=VERTEX_POINT('',#58359); #17020=VERTEX_POINT('',#58363); #17021=VERTEX_POINT('',#58365); #17022=VERTEX_POINT('',#58372); #17023=VERTEX_POINT('',#58374); #17024=VERTEX_POINT('',#58378); #17025=VERTEX_POINT('',#58382); #17026=VERTEX_POINT('',#58384); #17027=VERTEX_POINT('',#58387); #17028=VERTEX_POINT('',#58388); #17029=VERTEX_POINT('',#58390); #17030=VERTEX_POINT('',#58392); #17031=VERTEX_POINT('',#58396); #17032=VERTEX_POINT('',#58398); #17033=VERTEX_POINT('',#58402); #17034=VERTEX_POINT('',#58406); #17035=VERTEX_POINT('',#58412); #17036=VERTEX_POINT('',#58414); #17037=VERTEX_POINT('',#58418); #17038=VERTEX_POINT('',#58422); #17039=VERTEX_POINT('',#58426); #17040=VERTEX_POINT('',#58432); #17041=VERTEX_POINT('',#58438); #17042=VERTEX_POINT('',#58444); #17043=VERTEX_POINT('',#58450); #17044=VERTEX_POINT('',#58451); #17045=VERTEX_POINT('',#58453); #17046=VERTEX_POINT('',#58457); #17047=VERTEX_POINT('',#58458); #17048=VERTEX_POINT('',#58460); #17049=VERTEX_POINT('',#58467); #17050=VERTEX_POINT('',#58468); #17051=VERTEX_POINT('',#58470); #17052=VERTEX_POINT('',#58474); #17053=VERTEX_POINT('',#58475); #17054=VERTEX_POINT('',#58477); #17055=VERTEX_POINT('',#58484); #17056=VERTEX_POINT('',#58485); #17057=VERTEX_POINT('',#58487); #17058=VERTEX_POINT('',#58491); #17059=VERTEX_POINT('',#58492); #17060=VERTEX_POINT('',#58494); #17061=VERTEX_POINT('',#58501); #17062=VERTEX_POINT('',#58502); #17063=VERTEX_POINT('',#58504); #17064=VERTEX_POINT('',#58508); #17065=VERTEX_POINT('',#58509); #17066=VERTEX_POINT('',#58511); #17067=VERTEX_POINT('',#58518); #17068=VERTEX_POINT('',#58519); #17069=VERTEX_POINT('',#58521); #17070=VERTEX_POINT('',#58523); #17071=VERTEX_POINT('',#58527); #17072=VERTEX_POINT('',#58529); #17073=VERTEX_POINT('',#58531); #17074=VERTEX_POINT('',#58533); #17075=VERTEX_POINT('',#58535); #17076=VERTEX_POINT('',#58537); #17077=VERTEX_POINT('',#58539); #17078=VERTEX_POINT('',#58541); #17079=VERTEX_POINT('',#58543); #17080=VERTEX_POINT('',#58545); #17081=VERTEX_POINT('',#58547); #17082=VERTEX_POINT('',#58549); #17083=VERTEX_POINT('',#58553); #17084=VERTEX_POINT('',#58557); #17085=VERTEX_POINT('',#58561); #17086=VERTEX_POINT('',#58563); #17087=VERTEX_POINT('',#58567); #17088=VERTEX_POINT('',#58571); #17089=VERTEX_POINT('',#58575); #17090=VERTEX_POINT('',#58579); #17091=VERTEX_POINT('',#58583); #17092=VERTEX_POINT('',#58587); #17093=VERTEX_POINT('',#58591); #17094=VERTEX_POINT('',#58597); #17095=VERTEX_POINT('',#58598); #17096=VERTEX_POINT('',#58600); #17097=VERTEX_POINT('',#58602); #17098=VERTEX_POINT('',#58606); #17099=VERTEX_POINT('',#58614); #17100=VERTEX_POINT('',#58617); #17101=VERTEX_POINT('',#58622); #17102=VERTEX_POINT('',#58628); #17103=VERTEX_POINT('',#58642); #17104=VERTEX_POINT('',#58646); #17105=VERTEX_POINT('',#58647); #17106=VERTEX_POINT('',#58649); #17107=VERTEX_POINT('',#58651); #17108=VERTEX_POINT('',#58653); #17109=VERTEX_POINT('',#58655); #17110=VERTEX_POINT('',#58657); #17111=VERTEX_POINT('',#58659); #17112=VERTEX_POINT('',#58663); #17113=VERTEX_POINT('',#58667); #17114=VERTEX_POINT('',#58679); #17115=EDGE_CURVE('',#13910,#13911,#6842,.T.); #17116=EDGE_CURVE('',#13910,#13912,#5946,.T.); #17117=EDGE_CURVE('',#13912,#13913,#6843,.T.); #17118=EDGE_CURVE('',#13911,#13913,#5947,.T.); #17119=EDGE_CURVE('',#13914,#13910,#6844,.T.); #17120=EDGE_CURVE('',#13915,#13911,#6845,.T.); #17121=EDGE_CURVE('',#13914,#13915,#6846,.T.); #17122=EDGE_CURVE('',#13912,#13916,#6847,.T.); #17123=EDGE_CURVE('',#13916,#13917,#6848,.T.); #17124=EDGE_CURVE('',#13913,#13917,#6849,.T.); #17125=EDGE_CURVE('',#13914,#13918,#6850,.T.); #17126=EDGE_CURVE('',#13919,#13918,#6851,.T.); #17127=EDGE_CURVE('',#13920,#13919,#5948,.T.); #17128=EDGE_CURVE('',#13921,#13920,#6852,.T.); #17129=EDGE_CURVE('',#13922,#13921,#5949,.T.); #17130=EDGE_CURVE('',#13923,#13922,#6853,.T.); #17131=EDGE_CURVE('',#13924,#13923,#6854,.T.); #17132=EDGE_CURVE('',#13925,#13924,#6855,.T.); #17133=EDGE_CURVE('',#13916,#13925,#5950,.T.); #17134=EDGE_CURVE('',#13915,#13926,#6856,.T.); #17135=EDGE_CURVE('',#13917,#13927,#5951,.T.); #17136=EDGE_CURVE('',#13927,#13928,#6857,.T.); #17137=EDGE_CURVE('',#13928,#13929,#6858,.T.); #17138=EDGE_CURVE('',#13929,#13930,#6859,.T.); #17139=EDGE_CURVE('',#13930,#13931,#5952,.T.); #17140=EDGE_CURVE('',#13931,#13932,#6860,.T.); #17141=EDGE_CURVE('',#13932,#13933,#5953,.T.); #17142=EDGE_CURVE('',#13933,#13926,#6861,.T.); #17143=EDGE_CURVE('',#13934,#13935,#6862,.T.); #17144=EDGE_CURVE('',#13934,#13936,#6863,.T.); #17145=EDGE_CURVE('',#13936,#13914,#6864,.T.); #17146=EDGE_CURVE('',#13915,#13937,#6865,.T.); #17147=EDGE_CURVE('',#13937,#13938,#6866,.T.); #17148=EDGE_CURVE('',#13938,#13939,#6867,.T.); #17149=EDGE_CURVE('',#13939,#13940,#6868,.T.); #17150=EDGE_CURVE('',#13940,#13941,#6869,.T.); #17151=EDGE_CURVE('',#13941,#13942,#6870,.T.); #17152=EDGE_CURVE('',#13942,#13943,#6871,.T.); #17153=EDGE_CURVE('',#13935,#13943,#6872,.T.); #17154=EDGE_CURVE('',#13925,#13927,#6873,.T.); #17155=EDGE_CURVE('',#13936,#13944,#6874,.T.); #17156=EDGE_CURVE('',#13944,#13918,#6875,.T.); #17157=EDGE_CURVE('',#13918,#13945,#6876,.T.); #17158=EDGE_CURVE('',#13945,#13946,#6877,.T.); #17159=EDGE_CURVE('',#13926,#13946,#6878,.T.); #17160=EDGE_CURVE('',#13919,#13933,#6879,.T.); #17161=EDGE_CURVE('',#13920,#13932,#6880,.T.); #17162=EDGE_CURVE('',#13921,#13931,#6881,.T.); #17163=EDGE_CURVE('',#13922,#13930,#6882,.T.); #17164=EDGE_CURVE('',#13923,#13929,#6883,.T.); #17165=EDGE_CURVE('',#13924,#13928,#6884,.T.); #17166=EDGE_CURVE('',#13926,#13947,#6885,.T.); #17167=EDGE_CURVE('',#13937,#13947,#6886,.T.); #17168=EDGE_CURVE('',#13948,#13949,#6887,.T.); #17169=EDGE_CURVE('',#13949,#13950,#6888,.T.); #17170=EDGE_CURVE('',#13950,#13934,#6889,.T.); #17171=EDGE_CURVE('',#13935,#13951,#6890,.T.); #17172=EDGE_CURVE('',#13951,#13952,#6891,.T.); #17173=EDGE_CURVE('',#13952,#13953,#6892,.T.); #17174=EDGE_CURVE('',#13953,#13948,#6893,.T.); #17175=EDGE_CURVE('',#13950,#13954,#6894,.T.); #17176=EDGE_CURVE('',#13954,#13936,#6895,.T.); #17177=EDGE_CURVE('',#13943,#13955,#6896,.T.); #17178=EDGE_CURVE('',#13951,#13955,#6897,.T.); #17179=EDGE_CURVE('',#13942,#13956,#6898,.T.); #17180=EDGE_CURVE('',#13956,#13957,#6899,.T.); #17181=EDGE_CURVE('',#13943,#13957,#6900,.T.); #17182=EDGE_CURVE('',#13941,#13958,#6901,.T.); #17183=EDGE_CURVE('',#13958,#13959,#6902,.T.); #17184=EDGE_CURVE('',#13942,#13959,#6903,.T.); #17185=EDGE_CURVE('',#13940,#13960,#6904,.T.); #17186=EDGE_CURVE('',#13960,#13961,#6905,.T.); #17187=EDGE_CURVE('',#13941,#13961,#6906,.T.); #17188=EDGE_CURVE('',#13937,#13962,#6907,.T.); #17189=EDGE_CURVE('',#13962,#13963,#6908,.T.); #17190=EDGE_CURVE('',#13938,#13963,#6909,.T.); #17191=EDGE_CURVE('',#13939,#13964,#6910,.T.); #17192=EDGE_CURVE('',#13964,#13965,#6911,.T.); #17193=EDGE_CURVE('',#13940,#13965,#6912,.T.); #17194=EDGE_CURVE('',#13938,#13966,#6913,.T.); #17195=EDGE_CURVE('',#13966,#13967,#6914,.T.); #17196=EDGE_CURVE('',#13939,#13967,#6915,.T.); #17197=EDGE_CURVE('',#13954,#13968,#6916,.T.); #17198=EDGE_CURVE('',#13968,#13944,#6917,.T.); #17199=EDGE_CURVE('',#13944,#13969,#6918,.T.); #17200=EDGE_CURVE('',#13969,#13945,#6919,.T.); #17201=EDGE_CURVE('',#13969,#13970,#6920,.T.); #17202=EDGE_CURVE('',#13970,#13971,#6921,.T.); #17203=EDGE_CURVE('',#13972,#13971,#6922,.T.); #17204=EDGE_CURVE('',#13973,#13972,#6923,.T.); #17205=EDGE_CURVE('',#13974,#13973,#6924,.T.); #17206=EDGE_CURVE('',#13975,#13974,#6925,.T.); #17207=EDGE_CURVE('',#13976,#13975,#6926,.T.); #17208=EDGE_CURVE('',#13977,#13976,#6927,.T.); #17209=EDGE_CURVE('',#13978,#13977,#6928,.T.); #17210=EDGE_CURVE('',#13946,#13978,#6929,.T.); #17211=EDGE_CURVE('',#13947,#13978,#6930,.T.); #17212=EDGE_CURVE('',#13979,#13947,#6931,.T.); #17213=EDGE_CURVE('',#13980,#13979,#5954,.T.); #17214=EDGE_CURVE('',#13981,#13980,#6932,.T.); #17215=EDGE_CURVE('',#13982,#13981,#5955,.T.); #17216=EDGE_CURVE('',#13983,#13982,#6933,.T.); #17217=EDGE_CURVE('',#13984,#13983,#6934,.T.); #17218=EDGE_CURVE('',#13985,#13984,#6935,.T.); #17219=EDGE_CURVE('',#13986,#13985,#5956,.T.); #17220=EDGE_CURVE('',#13987,#13986,#6936,.T.); #17221=EDGE_CURVE('',#13962,#13987,#5957,.T.); #17222=EDGE_CURVE('',#13949,#13988,#6937,.T.); #17223=EDGE_CURVE('',#13988,#13954,#6938,.T.); #17224=EDGE_CURVE('',#13955,#13989,#6939,.T.); #17225=EDGE_CURVE('',#13952,#13989,#6940,.T.); #17226=EDGE_CURVE('',#13989,#13990,#6941,.T.); #17227=EDGE_CURVE('',#13953,#13990,#6942,.T.); #17228=EDGE_CURVE('',#13990,#13991,#6943,.T.); #17229=EDGE_CURVE('',#13991,#13992,#6944,.T.); #17230=EDGE_CURVE('',#13992,#13993,#6945,.T.); #17231=EDGE_CURVE('',#13993,#13994,#6946,.T.); #17232=EDGE_CURVE('',#13994,#13995,#6947,.T.); #17233=EDGE_CURVE('',#13995,#13996,#6948,.T.); #17234=EDGE_CURVE('',#13996,#13997,#6949,.T.); #17235=EDGE_CURVE('',#13997,#13998,#6950,.T.); #17236=EDGE_CURVE('',#13998,#13999,#6951,.T.); #17237=EDGE_CURVE('',#13948,#13999,#6952,.T.); #17238=EDGE_CURVE('',#13999,#13988,#6953,.T.); #17239=EDGE_CURVE('',#13957,#14000,#6954,.T.); #17240=EDGE_CURVE('',#13955,#14000,#6955,.T.); #17241=EDGE_CURVE('',#13959,#14001,#5958,.T.); #17242=EDGE_CURVE('',#14001,#14002,#6956,.T.); #17243=EDGE_CURVE('',#14002,#14003,#5959,.T.); #17244=EDGE_CURVE('',#14003,#14004,#6957,.T.); #17245=EDGE_CURVE('',#14004,#14005,#6958,.T.); #17246=EDGE_CURVE('',#14005,#14006,#6959,.T.); #17247=EDGE_CURVE('',#14006,#14007,#5960,.T.); #17248=EDGE_CURVE('',#14007,#14008,#6960,.T.); #17249=EDGE_CURVE('',#14008,#14009,#5961,.T.); #17250=EDGE_CURVE('',#14009,#13956,#6961,.T.); #17251=EDGE_CURVE('',#13956,#13973,#6962,.T.); #17252=EDGE_CURVE('',#13957,#13972,#6963,.T.); #17253=EDGE_CURVE('',#14010,#13961,#6964,.T.); #17254=EDGE_CURVE('',#14011,#14010,#5962,.T.); #17255=EDGE_CURVE('',#14012,#14011,#6965,.T.); #17256=EDGE_CURVE('',#14013,#14012,#5963,.T.); #17257=EDGE_CURVE('',#14014,#14013,#6966,.T.); #17258=EDGE_CURVE('',#14015,#14014,#6967,.T.); #17259=EDGE_CURVE('',#14016,#14015,#6968,.T.); #17260=EDGE_CURVE('',#14017,#14016,#5964,.T.); #17261=EDGE_CURVE('',#14018,#14017,#6969,.T.); #17262=EDGE_CURVE('',#13958,#14018,#5965,.T.); #17263=EDGE_CURVE('',#14018,#14001,#6970,.T.); #17264=EDGE_CURVE('',#13965,#14019,#5966,.T.); #17265=EDGE_CURVE('',#14019,#14020,#6971,.T.); #17266=EDGE_CURVE('',#14020,#14021,#5967,.T.); #17267=EDGE_CURVE('',#14021,#14022,#6972,.T.); #17268=EDGE_CURVE('',#14022,#14023,#6973,.T.); #17269=EDGE_CURVE('',#14023,#14024,#6974,.T.); #17270=EDGE_CURVE('',#14024,#14025,#5968,.T.); #17271=EDGE_CURVE('',#14025,#14026,#6975,.T.); #17272=EDGE_CURVE('',#14026,#14027,#5969,.T.); #17273=EDGE_CURVE('',#14027,#13960,#6976,.T.); #17274=EDGE_CURVE('',#13960,#13975,#6977,.T.); #17275=EDGE_CURVE('',#13961,#13974,#6978,.T.); #17276=EDGE_CURVE('',#13987,#14028,#6979,.T.); #17277=EDGE_CURVE('',#13963,#14028,#5970,.T.); #17278=EDGE_CURVE('',#14028,#14029,#6980,.T.); #17279=EDGE_CURVE('',#14029,#14030,#5971,.T.); #17280=EDGE_CURVE('',#14030,#14031,#6981,.T.); #17281=EDGE_CURVE('',#14031,#14032,#6982,.T.); #17282=EDGE_CURVE('',#14032,#14033,#6983,.T.); #17283=EDGE_CURVE('',#14033,#14034,#5972,.T.); #17284=EDGE_CURVE('',#14034,#14035,#6984,.T.); #17285=EDGE_CURVE('',#14035,#14036,#5973,.T.); #17286=EDGE_CURVE('',#14036,#13966,#6985,.T.); #17287=EDGE_CURVE('',#14037,#13967,#6986,.T.); #17288=EDGE_CURVE('',#14038,#14037,#5974,.T.); #17289=EDGE_CURVE('',#14039,#14038,#6987,.T.); #17290=EDGE_CURVE('',#14040,#14039,#5975,.T.); #17291=EDGE_CURVE('',#14041,#14040,#6988,.T.); #17292=EDGE_CURVE('',#14042,#14041,#6989,.T.); #17293=EDGE_CURVE('',#14043,#14042,#6990,.T.); #17294=EDGE_CURVE('',#14044,#14043,#5976,.T.); #17295=EDGE_CURVE('',#14045,#14044,#6991,.T.); #17296=EDGE_CURVE('',#13964,#14045,#5977,.T.); #17297=EDGE_CURVE('',#14045,#14019,#6992,.T.); #17298=EDGE_CURVE('',#13966,#13977,#6993,.T.); #17299=EDGE_CURVE('',#13967,#13976,#6994,.T.); #17300=EDGE_CURVE('',#13968,#14046,#6995,.T.); #17301=EDGE_CURVE('',#14046,#13969,#6996,.T.); #17302=EDGE_CURVE('',#13988,#14047,#6997,.T.); #17303=EDGE_CURVE('',#14047,#13968,#6998,.T.); #17304=EDGE_CURVE('',#14046,#14048,#6999,.T.); #17305=EDGE_CURVE('',#14048,#13970,#7000,.T.); #17306=EDGE_CURVE('',#14049,#14048,#7001,.T.); #17307=EDGE_CURVE('',#14050,#14049,#7002,.T.); #17308=EDGE_CURVE('',#14051,#14050,#7003,.T.); #17309=EDGE_CURVE('',#14052,#14051,#7004,.T.); #17310=EDGE_CURVE('',#14053,#14052,#7005,.T.); #17311=EDGE_CURVE('',#13971,#14053,#7006,.T.); #17312=EDGE_CURVE('',#14054,#14054,#5978,.T.); #17313=EDGE_CURVE('',#13972,#14055,#7007,.T.); #17314=EDGE_CURVE('',#14055,#14053,#7008,.T.); #17315=EDGE_CURVE('',#13979,#14036,#7009,.T.); #17316=EDGE_CURVE('',#14010,#14009,#7010,.T.); #17317=EDGE_CURVE('',#14037,#14027,#7011,.T.); #17318=EDGE_CURVE('',#13980,#14035,#7012,.T.); #17319=EDGE_CURVE('',#13981,#14034,#7013,.T.); #17320=EDGE_CURVE('',#13982,#14033,#7014,.T.); #17321=EDGE_CURVE('',#13983,#14032,#7015,.T.); #17322=EDGE_CURVE('',#13984,#14031,#7016,.T.); #17323=EDGE_CURVE('',#13985,#14030,#7017,.T.); #17324=EDGE_CURVE('',#13986,#14029,#7018,.T.); #17325=EDGE_CURVE('',#14000,#14056,#7019,.T.); #17326=EDGE_CURVE('',#13989,#14056,#7020,.T.); #17327=EDGE_CURVE('',#14056,#14057,#7021,.T.); #17328=EDGE_CURVE('',#13990,#14057,#7022,.T.); #17329=EDGE_CURVE('',#14057,#14058,#7023,.T.); #17330=EDGE_CURVE('',#13991,#14058,#7024,.T.); #17331=EDGE_CURVE('',#13998,#14059,#7025,.T.); #17332=EDGE_CURVE('',#14059,#14060,#7026,.T.); #17333=EDGE_CURVE('',#13999,#14060,#7027,.T.); #17334=EDGE_CURVE('',#13991,#14061,#7028,.T.); #17335=EDGE_CURVE('',#14061,#14062,#7029,.T.); #17336=EDGE_CURVE('',#13992,#14062,#7030,.T.); #17337=EDGE_CURVE('',#13997,#14063,#7031,.T.); #17338=EDGE_CURVE('',#14063,#14064,#7032,.T.); #17339=EDGE_CURVE('',#13998,#14064,#7033,.T.); #17340=EDGE_CURVE('',#13992,#14065,#7034,.T.); #17341=EDGE_CURVE('',#14065,#14066,#7035,.T.); #17342=EDGE_CURVE('',#13993,#14066,#7036,.T.); #17343=EDGE_CURVE('',#13996,#14067,#7037,.T.); #17344=EDGE_CURVE('',#14067,#14068,#7038,.T.); #17345=EDGE_CURVE('',#13997,#14068,#7039,.T.); #17346=EDGE_CURVE('',#13993,#14069,#7040,.T.); #17347=EDGE_CURVE('',#14069,#14070,#7041,.T.); #17348=EDGE_CURVE('',#13994,#14070,#7042,.T.); #17349=EDGE_CURVE('',#13995,#14071,#7043,.T.); #17350=EDGE_CURVE('',#14071,#14072,#7044,.T.); #17351=EDGE_CURVE('',#13996,#14072,#7045,.T.); #17352=EDGE_CURVE('',#13994,#14073,#7046,.T.); #17353=EDGE_CURVE('',#14073,#14074,#7047,.T.); #17354=EDGE_CURVE('',#13995,#14074,#7048,.T.); #17355=EDGE_CURVE('',#14060,#14047,#7049,.T.); #17356=EDGE_CURVE('',#14000,#14055,#7050,.T.); #17357=EDGE_CURVE('',#14011,#14008,#7051,.T.); #17358=EDGE_CURVE('',#14012,#14007,#7052,.T.); #17359=EDGE_CURVE('',#14013,#14006,#7053,.T.); #17360=EDGE_CURVE('',#14014,#14005,#7054,.T.); #17361=EDGE_CURVE('',#14015,#14004,#7055,.T.); #17362=EDGE_CURVE('',#14016,#14003,#7056,.T.); #17363=EDGE_CURVE('',#14017,#14002,#7057,.T.); #17364=EDGE_CURVE('',#14038,#14026,#7058,.T.); #17365=EDGE_CURVE('',#14039,#14025,#7059,.T.); #17366=EDGE_CURVE('',#14040,#14024,#7060,.T.); #17367=EDGE_CURVE('',#14041,#14023,#7061,.T.); #17368=EDGE_CURVE('',#14042,#14022,#7062,.T.); #17369=EDGE_CURVE('',#14043,#14021,#7063,.T.); #17370=EDGE_CURVE('',#14044,#14020,#7064,.T.); #17371=EDGE_CURVE('',#14047,#14075,#7065,.T.); #17372=EDGE_CURVE('',#14075,#14046,#7066,.T.); #17373=EDGE_CURVE('',#14075,#14049,#7067,.T.); #17374=EDGE_CURVE('',#14076,#14075,#7068,.T.); #17375=EDGE_CURVE('',#14076,#14050,#7069,.T.); #17376=EDGE_CURVE('',#14077,#14078,#7070,.T.); #17377=EDGE_CURVE('',#14077,#14051,#7071,.T.); #17378=EDGE_CURVE('',#14079,#14076,#7072,.T.); #17379=EDGE_CURVE('',#14080,#14079,#7073,.T.); #17380=EDGE_CURVE('',#14081,#14080,#7074,.T.); #17381=EDGE_CURVE('',#14082,#14081,#7075,.T.); #17382=EDGE_CURVE('',#14083,#14082,#7076,.T.); #17383=EDGE_CURVE('',#14084,#14083,#7077,.T.); #17384=EDGE_CURVE('',#14085,#14084,#7078,.T.); #17385=EDGE_CURVE('',#14078,#14085,#7079,.T.); #17386=EDGE_CURVE('',#14086,#14077,#7080,.T.); #17387=EDGE_CURVE('',#14086,#14052,#7081,.T.); #17388=EDGE_CURVE('',#14055,#14086,#7082,.T.); #17389=EDGE_CURVE('',#14054,#14087,#7083,.T.); #17390=EDGE_CURVE('',#14087,#14087,#5979,.T.); #17391=EDGE_CURVE('',#14056,#14086,#7084,.T.); #17392=EDGE_CURVE('',#14057,#14077,#7085,.T.); #17393=EDGE_CURVE('',#14058,#14078,#7086,.T.); #17394=EDGE_CURVE('',#14088,#14058,#7087,.T.); #17395=EDGE_CURVE('',#14089,#14088,#5980,.T.); #17396=EDGE_CURVE('',#14090,#14089,#7088,.T.); #17397=EDGE_CURVE('',#14091,#14090,#5981,.T.); #17398=EDGE_CURVE('',#14092,#14091,#7089,.T.); #17399=EDGE_CURVE('',#14093,#14092,#7090,.T.); #17400=EDGE_CURVE('',#14094,#14093,#7091,.T.); #17401=EDGE_CURVE('',#14095,#14094,#5982,.T.); #17402=EDGE_CURVE('',#14096,#14095,#7092,.T.); #17403=EDGE_CURVE('',#14061,#14096,#5983,.T.); #17404=EDGE_CURVE('',#14064,#14097,#5984,.T.); #17405=EDGE_CURVE('',#14097,#14098,#7093,.T.); #17406=EDGE_CURVE('',#14098,#14099,#5985,.T.); #17407=EDGE_CURVE('',#14099,#14100,#7094,.T.); #17408=EDGE_CURVE('',#14100,#14101,#7095,.T.); #17409=EDGE_CURVE('',#14101,#14102,#7096,.T.); #17410=EDGE_CURVE('',#14102,#14103,#5986,.T.); #17411=EDGE_CURVE('',#14103,#14104,#7097,.T.); #17412=EDGE_CURVE('',#14104,#14105,#5987,.T.); #17413=EDGE_CURVE('',#14105,#14059,#7098,.T.); #17414=EDGE_CURVE('',#14059,#14079,#7099,.T.); #17415=EDGE_CURVE('',#14060,#14076,#7100,.T.); #17416=EDGE_CURVE('',#14096,#14106,#7101,.T.); #17417=EDGE_CURVE('',#14062,#14106,#5988,.T.); #17418=EDGE_CURVE('',#14106,#14107,#7102,.T.); #17419=EDGE_CURVE('',#14107,#14108,#5989,.T.); #17420=EDGE_CURVE('',#14108,#14109,#7103,.T.); #17421=EDGE_CURVE('',#14109,#14110,#7104,.T.); #17422=EDGE_CURVE('',#14110,#14111,#7105,.T.); #17423=EDGE_CURVE('',#14111,#14112,#5990,.T.); #17424=EDGE_CURVE('',#14112,#14113,#7106,.T.); #17425=EDGE_CURVE('',#14113,#14114,#5991,.T.); #17426=EDGE_CURVE('',#14114,#14065,#7107,.T.); #17427=EDGE_CURVE('',#14115,#14068,#7108,.T.); #17428=EDGE_CURVE('',#14116,#14115,#5992,.T.); #17429=EDGE_CURVE('',#14117,#14116,#7109,.T.); #17430=EDGE_CURVE('',#14118,#14117,#5993,.T.); #17431=EDGE_CURVE('',#14119,#14118,#7110,.T.); #17432=EDGE_CURVE('',#14120,#14119,#7111,.T.); #17433=EDGE_CURVE('',#14121,#14120,#7112,.T.); #17434=EDGE_CURVE('',#14122,#14121,#5994,.T.); #17435=EDGE_CURVE('',#14123,#14122,#7113,.T.); #17436=EDGE_CURVE('',#14063,#14123,#5995,.T.); #17437=EDGE_CURVE('',#14123,#14097,#7114,.T.); #17438=EDGE_CURVE('',#14065,#14085,#7115,.T.); #17439=EDGE_CURVE('',#14066,#14084,#7116,.T.); #17440=EDGE_CURVE('',#14124,#14066,#7117,.T.); #17441=EDGE_CURVE('',#14125,#14124,#5996,.T.); #17442=EDGE_CURVE('',#14126,#14125,#7118,.T.); #17443=EDGE_CURVE('',#14127,#14126,#5997,.T.); #17444=EDGE_CURVE('',#14128,#14127,#7119,.T.); #17445=EDGE_CURVE('',#14129,#14128,#7120,.T.); #17446=EDGE_CURVE('',#14130,#14129,#7121,.T.); #17447=EDGE_CURVE('',#14131,#14130,#5998,.T.); #17448=EDGE_CURVE('',#14132,#14131,#7122,.T.); #17449=EDGE_CURVE('',#14069,#14132,#5999,.T.); #17450=EDGE_CURVE('',#14072,#14133,#6000,.T.); #17451=EDGE_CURVE('',#14133,#14134,#7123,.T.); #17452=EDGE_CURVE('',#14134,#14135,#6001,.T.); #17453=EDGE_CURVE('',#14135,#14136,#7124,.T.); #17454=EDGE_CURVE('',#14136,#14137,#7125,.T.); #17455=EDGE_CURVE('',#14137,#14138,#7126,.T.); #17456=EDGE_CURVE('',#14138,#14139,#6002,.T.); #17457=EDGE_CURVE('',#14139,#14140,#7127,.T.); #17458=EDGE_CURVE('',#14140,#14141,#6003,.T.); #17459=EDGE_CURVE('',#14141,#14067,#7128,.T.); #17460=EDGE_CURVE('',#14067,#14081,#7129,.T.); #17461=EDGE_CURVE('',#14068,#14080,#7130,.T.); #17462=EDGE_CURVE('',#14132,#14142,#7131,.T.); #17463=EDGE_CURVE('',#14070,#14142,#6004,.T.); #17464=EDGE_CURVE('',#14142,#14143,#7132,.T.); #17465=EDGE_CURVE('',#14143,#14144,#6005,.T.); #17466=EDGE_CURVE('',#14144,#14145,#7133,.T.); #17467=EDGE_CURVE('',#14145,#14146,#7134,.T.); #17468=EDGE_CURVE('',#14146,#14147,#7135,.T.); #17469=EDGE_CURVE('',#14147,#14148,#6006,.T.); #17470=EDGE_CURVE('',#14148,#14149,#7136,.T.); #17471=EDGE_CURVE('',#14149,#14150,#6007,.T.); #17472=EDGE_CURVE('',#14150,#14073,#7137,.T.); #17473=EDGE_CURVE('',#14151,#14074,#7138,.T.); #17474=EDGE_CURVE('',#14152,#14151,#6008,.T.); #17475=EDGE_CURVE('',#14153,#14152,#7139,.T.); #17476=EDGE_CURVE('',#14154,#14153,#6009,.T.); #17477=EDGE_CURVE('',#14155,#14154,#7140,.T.); #17478=EDGE_CURVE('',#14156,#14155,#7141,.T.); #17479=EDGE_CURVE('',#14157,#14156,#7142,.T.); #17480=EDGE_CURVE('',#14158,#14157,#6010,.T.); #17481=EDGE_CURVE('',#14159,#14158,#7143,.T.); #17482=EDGE_CURVE('',#14071,#14159,#6011,.T.); #17483=EDGE_CURVE('',#14159,#14133,#7144,.T.); #17484=EDGE_CURVE('',#14073,#14083,#7145,.T.); #17485=EDGE_CURVE('',#14074,#14082,#7146,.T.); #17486=EDGE_CURVE('',#14088,#14114,#7147,.T.); #17487=EDGE_CURVE('',#14124,#14150,#7148,.T.); #17488=EDGE_CURVE('',#14115,#14105,#7149,.T.); #17489=EDGE_CURVE('',#14151,#14141,#7150,.T.); #17490=EDGE_CURVE('',#14089,#14113,#7151,.T.); #17491=EDGE_CURVE('',#14090,#14112,#7152,.T.); #17492=EDGE_CURVE('',#14091,#14111,#7153,.T.); #17493=EDGE_CURVE('',#14092,#14110,#7154,.T.); #17494=EDGE_CURVE('',#14093,#14109,#7155,.T.); #17495=EDGE_CURVE('',#14094,#14108,#7156,.T.); #17496=EDGE_CURVE('',#14095,#14107,#7157,.T.); #17497=EDGE_CURVE('',#14116,#14104,#7158,.T.); #17498=EDGE_CURVE('',#14117,#14103,#7159,.T.); #17499=EDGE_CURVE('',#14118,#14102,#7160,.T.); #17500=EDGE_CURVE('',#14119,#14101,#7161,.T.); #17501=EDGE_CURVE('',#14120,#14100,#7162,.T.); #17502=EDGE_CURVE('',#14121,#14099,#7163,.T.); #17503=EDGE_CURVE('',#14122,#14098,#7164,.T.); #17504=EDGE_CURVE('',#14125,#14149,#7165,.T.); #17505=EDGE_CURVE('',#14126,#14148,#7166,.T.); #17506=EDGE_CURVE('',#14127,#14147,#7167,.T.); #17507=EDGE_CURVE('',#14128,#14146,#7168,.T.); #17508=EDGE_CURVE('',#14129,#14145,#7169,.T.); #17509=EDGE_CURVE('',#14130,#14144,#7170,.T.); #17510=EDGE_CURVE('',#14131,#14143,#7171,.T.); #17511=EDGE_CURVE('',#14152,#14140,#7172,.T.); #17512=EDGE_CURVE('',#14153,#14139,#7173,.T.); #17513=EDGE_CURVE('',#14154,#14138,#7174,.T.); #17514=EDGE_CURVE('',#14155,#14137,#7175,.T.); #17515=EDGE_CURVE('',#14156,#14136,#7176,.T.); #17516=EDGE_CURVE('',#14157,#14135,#7177,.T.); #17517=EDGE_CURVE('',#14158,#14134,#7178,.T.); #17518=EDGE_CURVE('',#14160,#14161,#7179,.T.); #17519=EDGE_CURVE('',#14161,#14162,#7180,.T.); #17520=EDGE_CURVE('',#14163,#14162,#7181,.T.); #17521=EDGE_CURVE('',#14160,#14163,#7182,.T.); #17522=EDGE_CURVE('',#14164,#14165,#7183,.T.); #17523=EDGE_CURVE('',#14165,#14161,#7184,.T.); #17524=EDGE_CURVE('',#14164,#14160,#7185,.T.); #17525=EDGE_CURVE('',#14162,#14166,#7186,.T.); #17526=EDGE_CURVE('',#14167,#14166,#7187,.T.); #17527=EDGE_CURVE('',#14163,#14167,#7188,.T.); #17528=EDGE_CURVE('',#14167,#14164,#7189,.T.); #17529=EDGE_CURVE('',#14168,#14168,#6012,.T.); #17530=EDGE_CURVE('',#14169,#14169,#6013,.T.); #17531=EDGE_CURVE('',#14170,#14170,#6014,.T.); #17532=EDGE_CURVE('',#14171,#14171,#6015,.T.); #17533=EDGE_CURVE('',#14172,#14172,#6016,.T.); #17534=EDGE_CURVE('',#14173,#14173,#6017,.T.); #17535=EDGE_CURVE('',#14174,#14174,#6018,.T.); #17536=EDGE_CURVE('',#14175,#14175,#6019,.T.); #17537=EDGE_CURVE('',#14176,#14176,#6020,.T.); #17538=EDGE_CURVE('',#14177,#14177,#6021,.T.); #17539=EDGE_CURVE('',#14178,#14178,#6022,.T.); #17540=EDGE_CURVE('',#14179,#14179,#6023,.T.); #17541=EDGE_CURVE('',#14180,#14180,#6024,.T.); #17542=EDGE_CURVE('',#14181,#14181,#6025,.T.); #17543=EDGE_CURVE('',#14182,#14182,#6026,.T.); #17544=EDGE_CURVE('',#14183,#14183,#6027,.T.); #17545=EDGE_CURVE('',#14184,#14184,#6028,.T.); #17546=EDGE_CURVE('',#14185,#14185,#6029,.T.); #17547=EDGE_CURVE('',#14186,#14186,#6030,.T.); #17548=EDGE_CURVE('',#14187,#14187,#6031,.T.); #17549=EDGE_CURVE('',#14188,#14188,#6032,.T.); #17550=EDGE_CURVE('',#14189,#14189,#6033,.T.); #17551=EDGE_CURVE('',#14190,#14190,#6034,.T.); #17552=EDGE_CURVE('',#14191,#14191,#6035,.T.); #17553=EDGE_CURVE('',#14192,#14192,#6036,.T.); #17554=EDGE_CURVE('',#14193,#14193,#6037,.T.); #17555=EDGE_CURVE('',#14194,#14194,#6038,.T.); #17556=EDGE_CURVE('',#14195,#14195,#6039,.T.); #17557=EDGE_CURVE('',#14196,#14196,#6040,.T.); #17558=EDGE_CURVE('',#14166,#14165,#7190,.T.); #17559=EDGE_CURVE('',#14197,#14197,#6041,.T.); #17560=EDGE_CURVE('',#14198,#14198,#6042,.T.); #17561=EDGE_CURVE('',#14199,#14199,#6043,.T.); #17562=EDGE_CURVE('',#14200,#14200,#6044,.T.); #17563=EDGE_CURVE('',#14201,#14201,#6045,.T.); #17564=EDGE_CURVE('',#14202,#14202,#6046,.T.); #17565=EDGE_CURVE('',#14203,#14203,#6047,.T.); #17566=EDGE_CURVE('',#14204,#14204,#6048,.T.); #17567=EDGE_CURVE('',#14205,#14205,#6049,.T.); #17568=EDGE_CURVE('',#14206,#14206,#6050,.T.); #17569=EDGE_CURVE('',#14207,#14207,#6051,.T.); #17570=EDGE_CURVE('',#14208,#14208,#6052,.T.); #17571=EDGE_CURVE('',#14209,#14209,#6053,.T.); #17572=EDGE_CURVE('',#14210,#14210,#6054,.T.); #17573=EDGE_CURVE('',#14211,#14211,#6055,.T.); #17574=EDGE_CURVE('',#14212,#14212,#6056,.T.); #17575=EDGE_CURVE('',#14213,#14213,#6057,.T.); #17576=EDGE_CURVE('',#14214,#14214,#6058,.T.); #17577=EDGE_CURVE('',#14215,#14215,#6059,.T.); #17578=EDGE_CURVE('',#14216,#14216,#6060,.T.); #17579=EDGE_CURVE('',#14217,#14217,#6061,.T.); #17580=EDGE_CURVE('',#14218,#14218,#6062,.T.); #17581=EDGE_CURVE('',#14219,#14219,#6063,.T.); #17582=EDGE_CURVE('',#14220,#14220,#6064,.T.); #17583=EDGE_CURVE('',#14221,#14221,#6065,.T.); #17584=EDGE_CURVE('',#14222,#14222,#6066,.T.); #17585=EDGE_CURVE('',#14223,#14223,#6067,.T.); #17586=EDGE_CURVE('',#14224,#14224,#6068,.T.); #17587=EDGE_CURVE('',#14225,#14225,#6069,.T.); #17588=EDGE_CURVE('',#14168,#14197,#7191,.T.); #17589=EDGE_CURVE('',#14169,#14198,#7192,.T.); #17590=EDGE_CURVE('',#14170,#14199,#7193,.T.); #17591=EDGE_CURVE('',#14171,#14200,#7194,.T.); #17592=EDGE_CURVE('',#14172,#14201,#7195,.T.); #17593=EDGE_CURVE('',#14173,#14202,#7196,.T.); #17594=EDGE_CURVE('',#14174,#14203,#7197,.T.); #17595=EDGE_CURVE('',#14175,#14204,#7198,.T.); #17596=EDGE_CURVE('',#14176,#14205,#7199,.T.); #17597=EDGE_CURVE('',#14177,#14206,#7200,.T.); #17598=EDGE_CURVE('',#14178,#14207,#7201,.T.); #17599=EDGE_CURVE('',#14179,#14208,#7202,.T.); #17600=EDGE_CURVE('',#14180,#14209,#7203,.T.); #17601=EDGE_CURVE('',#14181,#14210,#7204,.T.); #17602=EDGE_CURVE('',#14182,#14211,#7205,.T.); #17603=EDGE_CURVE('',#14183,#14212,#7206,.T.); #17604=EDGE_CURVE('',#14184,#14213,#7207,.T.); #17605=EDGE_CURVE('',#14185,#14214,#7208,.T.); #17606=EDGE_CURVE('',#14186,#14215,#7209,.T.); #17607=EDGE_CURVE('',#14187,#14216,#7210,.T.); #17608=EDGE_CURVE('',#14188,#14217,#7211,.T.); #17609=EDGE_CURVE('',#14189,#14218,#7212,.T.); #17610=EDGE_CURVE('',#14190,#14219,#7213,.T.); #17611=EDGE_CURVE('',#14191,#14220,#7214,.T.); #17612=EDGE_CURVE('',#14192,#14221,#7215,.T.); #17613=EDGE_CURVE('',#14193,#14222,#7216,.T.); #17614=EDGE_CURVE('',#14194,#14223,#7217,.T.); #17615=EDGE_CURVE('',#14195,#14224,#7218,.T.); #17616=EDGE_CURVE('',#14196,#14225,#7219,.T.); #17617=EDGE_CURVE('',#14226,#14226,#6070,.T.); #17618=EDGE_CURVE('',#14226,#14227,#7220,.T.); #17619=EDGE_CURVE('',#14227,#14227,#6071,.T.); #17620=EDGE_CURVE('',#14228,#14228,#6072,.T.); #17621=EDGE_CURVE('',#14228,#14229,#7221,.T.); #17622=EDGE_CURVE('',#14229,#14229,#6073,.T.); #17623=EDGE_CURVE('',#14230,#14230,#6074,.T.); #17624=EDGE_CURVE('',#14230,#14231,#7222,.T.); #17625=EDGE_CURVE('',#14231,#14231,#6075,.T.); #17626=EDGE_CURVE('',#14232,#14233,#7223,.T.); #17627=EDGE_CURVE('',#14233,#14234,#6076,.T.); #17628=EDGE_CURVE('',#14234,#14235,#7224,.T.); #17629=EDGE_CURVE('',#14232,#14235,#6077,.T.); #17630=EDGE_CURVE('',#14236,#14237,#6078,.T.); #17631=EDGE_CURVE('',#14238,#14237,#7225,.T.); #17632=EDGE_CURVE('',#14239,#14238,#6079,.T.); #17633=EDGE_CURVE('',#14236,#14239,#7226,.T.); #17634=EDGE_CURVE('',#14240,#14241,#6080,.T.); #17635=EDGE_CURVE('',#14242,#14241,#7227,.T.); #17636=EDGE_CURVE('',#14243,#14242,#6081,.T.); #17637=EDGE_CURVE('',#14240,#14243,#7228,.T.); #17638=EDGE_CURVE('',#14244,#14245,#6082,.T.); #17639=EDGE_CURVE('',#14246,#14245,#7229,.T.); #17640=EDGE_CURVE('',#14247,#14246,#6083,.T.); #17641=EDGE_CURVE('',#14244,#14247,#7230,.T.); #17642=EDGE_CURVE('',#14248,#14249,#6084,.T.); #17643=EDGE_CURVE('',#14250,#14249,#7231,.T.); #17644=EDGE_CURVE('',#14251,#14250,#6085,.T.); #17645=EDGE_CURVE('',#14248,#14251,#7232,.T.); #17646=EDGE_CURVE('',#14252,#14252,#6086,.T.); #17647=EDGE_CURVE('',#14252,#14253,#7233,.T.); #17648=EDGE_CURVE('',#14253,#14253,#6087,.T.); #17649=EDGE_CURVE('',#14254,#14254,#6088,.T.); #17650=EDGE_CURVE('',#14254,#14255,#7234,.T.); #17651=EDGE_CURVE('',#14255,#14255,#6089,.T.); #17652=EDGE_CURVE('',#14256,#14256,#6090,.T.); #17653=EDGE_CURVE('',#14256,#14257,#7235,.T.); #17654=EDGE_CURVE('',#14257,#14257,#6091,.T.); #17655=EDGE_CURVE('',#14258,#14258,#6092,.T.); #17656=EDGE_CURVE('',#14258,#14259,#7236,.T.); #17657=EDGE_CURVE('',#14259,#14259,#6093,.T.); #17658=EDGE_CURVE('',#14260,#14260,#6094,.T.); #17659=EDGE_CURVE('',#14260,#14261,#7237,.T.); #17660=EDGE_CURVE('',#14261,#14261,#6095,.T.); #17661=EDGE_CURVE('',#14262,#14262,#6096,.T.); #17662=EDGE_CURVE('',#14262,#14263,#7238,.T.); #17663=EDGE_CURVE('',#14263,#14263,#6097,.T.); #17664=EDGE_CURVE('',#14264,#14264,#6098,.T.); #17665=EDGE_CURVE('',#14264,#14265,#7239,.T.); #17666=EDGE_CURVE('',#14265,#14265,#6099,.T.); #17667=EDGE_CURVE('',#14266,#14266,#6100,.T.); #17668=EDGE_CURVE('',#14266,#14267,#7240,.T.); #17669=EDGE_CURVE('',#14267,#14267,#6101,.T.); #17670=EDGE_CURVE('',#14268,#14268,#6102,.T.); #17671=EDGE_CURVE('',#14268,#14269,#7241,.T.); #17672=EDGE_CURVE('',#14269,#14269,#6103,.T.); #17673=EDGE_CURVE('',#14270,#14270,#6104,.T.); #17674=EDGE_CURVE('',#14270,#14271,#7242,.T.); #17675=EDGE_CURVE('',#14271,#14271,#6105,.T.); #17676=EDGE_CURVE('',#14272,#14272,#6106,.T.); #17677=EDGE_CURVE('',#14272,#14273,#7243,.T.); #17678=EDGE_CURVE('',#14273,#14273,#6107,.T.); #17679=EDGE_CURVE('',#14274,#14274,#6108,.T.); #17680=EDGE_CURVE('',#14274,#14275,#7244,.T.); #17681=EDGE_CURVE('',#14275,#14275,#6109,.T.); #17682=EDGE_CURVE('',#14276,#14277,#6110,.T.); #17683=EDGE_CURVE('',#14278,#14277,#7245,.T.); #17684=EDGE_CURVE('',#14279,#14278,#6111,.T.); #17685=EDGE_CURVE('',#14276,#14279,#7246,.T.); #17686=EDGE_CURVE('',#14280,#14281,#6112,.T.); #17687=EDGE_CURVE('',#14282,#14281,#7247,.T.); #17688=EDGE_CURVE('',#14283,#14282,#6113,.T.); #17689=EDGE_CURVE('',#14280,#14283,#7248,.T.); #17690=EDGE_CURVE('',#14284,#14285,#6114,.T.); #17691=EDGE_CURVE('',#14286,#14285,#7249,.T.); #17692=EDGE_CURVE('',#14287,#14286,#6115,.T.); #17693=EDGE_CURVE('',#14284,#14287,#7250,.T.); #17694=EDGE_CURVE('',#14288,#14289,#6116,.T.); #17695=EDGE_CURVE('',#14290,#14289,#7251,.T.); #17696=EDGE_CURVE('',#14291,#14290,#6117,.T.); #17697=EDGE_CURVE('',#14288,#14291,#7252,.T.); #17698=EDGE_CURVE('',#14292,#14293,#6118,.T.); #17699=EDGE_CURVE('',#14294,#14293,#7253,.T.); #17700=EDGE_CURVE('',#14295,#14294,#6119,.T.); #17701=EDGE_CURVE('',#14292,#14295,#7254,.T.); #17702=EDGE_CURVE('',#14296,#14297,#6120,.T.); #17703=EDGE_CURVE('',#14298,#14297,#7255,.T.); #17704=EDGE_CURVE('',#14299,#14298,#6121,.T.); #17705=EDGE_CURVE('',#14296,#14299,#7256,.T.); #17706=EDGE_CURVE('',#14300,#14301,#6122,.T.); #17707=EDGE_CURVE('',#14302,#14301,#7257,.T.); #17708=EDGE_CURVE('',#14303,#14302,#6123,.T.); #17709=EDGE_CURVE('',#14300,#14303,#7258,.T.); #17710=EDGE_CURVE('',#14304,#14305,#6124,.T.); #17711=EDGE_CURVE('',#14306,#14305,#7259,.T.); #17712=EDGE_CURVE('',#14307,#14306,#6125,.T.); #17713=EDGE_CURVE('',#14304,#14307,#7260,.T.); #17714=EDGE_CURVE('',#14308,#14309,#6126,.T.); #17715=EDGE_CURVE('',#14310,#14309,#7261,.T.); #17716=EDGE_CURVE('',#14311,#14310,#6127,.T.); #17717=EDGE_CURVE('',#14308,#14311,#7262,.T.); #17718=EDGE_CURVE('',#14312,#14313,#6128,.T.); #17719=EDGE_CURVE('',#14314,#14313,#7263,.T.); #17720=EDGE_CURVE('',#14315,#14314,#6129,.T.); #17721=EDGE_CURVE('',#14312,#14315,#7264,.T.); #17722=EDGE_CURVE('',#14316,#14317,#6130,.T.); #17723=EDGE_CURVE('',#14318,#14317,#7265,.T.); #17724=EDGE_CURVE('',#14319,#14318,#6131,.T.); #17725=EDGE_CURVE('',#14316,#14319,#7266,.T.); #17726=EDGE_CURVE('',#14320,#14321,#6132,.T.); #17727=EDGE_CURVE('',#14322,#14321,#7267,.T.); #17728=EDGE_CURVE('',#14323,#14322,#6133,.T.); #17729=EDGE_CURVE('',#14320,#14323,#7268,.T.); #17730=EDGE_CURVE('',#14324,#14325,#6134,.T.); #17731=EDGE_CURVE('',#14326,#14325,#7269,.T.); #17732=EDGE_CURVE('',#14327,#14326,#6135,.T.); #17733=EDGE_CURVE('',#14324,#14327,#7270,.T.); #17734=EDGE_CURVE('',#14328,#14329,#6136,.T.); #17735=EDGE_CURVE('',#14330,#14329,#7271,.T.); #17736=EDGE_CURVE('',#14331,#14330,#6137,.T.); #17737=EDGE_CURVE('',#14328,#14331,#7272,.T.); #17738=EDGE_CURVE('',#14332,#14333,#6138,.T.); #17739=EDGE_CURVE('',#14334,#14333,#7273,.T.); #17740=EDGE_CURVE('',#14335,#14334,#6139,.T.); #17741=EDGE_CURVE('',#14332,#14335,#7274,.T.); #17742=EDGE_CURVE('',#14336,#14336,#6140,.T.); #17743=EDGE_CURVE('',#14336,#14337,#7275,.T.); #17744=EDGE_CURVE('',#14337,#14337,#6141,.T.); #17745=EDGE_CURVE('',#14338,#14338,#6142,.T.); #17746=EDGE_CURVE('',#14338,#14339,#7276,.T.); #17747=EDGE_CURVE('',#14339,#14339,#6143,.T.); #17748=EDGE_CURVE('',#14340,#14340,#6144,.T.); #17749=EDGE_CURVE('',#14340,#14341,#7277,.T.); #17750=EDGE_CURVE('',#14341,#14341,#6145,.T.); #17751=EDGE_CURVE('',#14342,#14342,#6146,.T.); #17752=EDGE_CURVE('',#14342,#14343,#7278,.T.); #17753=EDGE_CURVE('',#14343,#14343,#6147,.T.); #17754=EDGE_CURVE('',#14344,#14344,#6148,.T.); #17755=EDGE_CURVE('',#14344,#14345,#7279,.T.); #17756=EDGE_CURVE('',#14345,#14345,#6149,.T.); #17757=EDGE_CURVE('',#14346,#14346,#6150,.T.); #17758=EDGE_CURVE('',#14346,#14347,#7280,.T.); #17759=EDGE_CURVE('',#14347,#14347,#6151,.T.); #17760=EDGE_CURVE('',#14348,#14348,#6152,.T.); #17761=EDGE_CURVE('',#14348,#14349,#7281,.T.); #17762=EDGE_CURVE('',#14349,#14349,#6153,.T.); #17763=EDGE_CURVE('',#14350,#14350,#6154,.T.); #17764=EDGE_CURVE('',#14350,#14351,#7282,.T.); #17765=EDGE_CURVE('',#14351,#14351,#6155,.T.); #17766=EDGE_CURVE('',#14352,#14353,#6156,.T.); #17767=EDGE_CURVE('',#14354,#14353,#7283,.T.); #17768=EDGE_CURVE('',#14355,#14354,#6157,.T.); #17769=EDGE_CURVE('',#14352,#14355,#7284,.T.); #17770=EDGE_CURVE('',#14232,#14356,#7285,.T.); #17771=EDGE_CURVE('',#14356,#14357,#7286,.T.); #17772=EDGE_CURVE('',#14233,#14357,#7287,.T.); #17773=EDGE_CURVE('',#14358,#14359,#6158,.T.); #17774=EDGE_CURVE('',#14360,#14358,#7288,.T.); #17775=EDGE_CURVE('',#14360,#14361,#6159,.T.); #17776=EDGE_CURVE('',#14361,#14359,#7289,.T.); #17777=EDGE_CURVE('',#14362,#14363,#6160,.T.); #17778=EDGE_CURVE('',#14364,#14362,#7290,.T.); #17779=EDGE_CURVE('',#14364,#14365,#6161,.T.); #17780=EDGE_CURVE('',#14365,#14363,#7291,.T.); #17781=EDGE_CURVE('',#14366,#14367,#7292,.T.); #17782=EDGE_CURVE('',#14366,#14360,#7293,.T.); #17783=EDGE_CURVE('',#14367,#14358,#7294,.T.); #17784=EDGE_CURVE('',#14368,#14369,#7295,.T.); #17785=EDGE_CURVE('',#14368,#14352,#7296,.T.); #17786=EDGE_CURVE('',#14369,#14355,#7297,.T.); #17787=EDGE_CURVE('',#14370,#14371,#7298,.T.); #17788=EDGE_CURVE('',#14370,#14332,#7299,.T.); #17789=EDGE_CURVE('',#14371,#14335,#7300,.T.); #17790=EDGE_CURVE('',#14372,#14373,#7301,.T.); #17791=EDGE_CURVE('',#14372,#14328,#7302,.T.); #17792=EDGE_CURVE('',#14373,#14331,#7303,.T.); #17793=EDGE_CURVE('',#14374,#14375,#7304,.T.); #17794=EDGE_CURVE('',#14374,#14324,#7305,.T.); #17795=EDGE_CURVE('',#14375,#14327,#7306,.T.); #17796=EDGE_CURVE('',#14376,#14377,#7307,.T.); #17797=EDGE_CURVE('',#14376,#14320,#7308,.T.); #17798=EDGE_CURVE('',#14377,#14323,#7309,.T.); #17799=EDGE_CURVE('',#14378,#14379,#7310,.T.); #17800=EDGE_CURVE('',#14378,#14316,#7311,.T.); #17801=EDGE_CURVE('',#14379,#14319,#7312,.T.); #17802=EDGE_CURVE('',#14380,#14381,#7313,.T.); #17803=EDGE_CURVE('',#14380,#14312,#7314,.T.); #17804=EDGE_CURVE('',#14381,#14315,#7315,.T.); #17805=EDGE_CURVE('',#14382,#14383,#7316,.T.); #17806=EDGE_CURVE('',#14382,#14308,#7317,.T.); #17807=EDGE_CURVE('',#14383,#14311,#7318,.T.); #17808=EDGE_CURVE('',#14384,#14385,#7319,.T.); #17809=EDGE_CURVE('',#14384,#14304,#7320,.T.); #17810=EDGE_CURVE('',#14385,#14307,#7321,.T.); #17811=EDGE_CURVE('',#14386,#14387,#7322,.T.); #17812=EDGE_CURVE('',#14386,#14300,#7323,.T.); #17813=EDGE_CURVE('',#14387,#14303,#7324,.T.); #17814=EDGE_CURVE('',#14388,#14389,#7325,.T.); #17815=EDGE_CURVE('',#14388,#14296,#7326,.T.); #17816=EDGE_CURVE('',#14389,#14299,#7327,.T.); #17817=EDGE_CURVE('',#14390,#14391,#7328,.T.); #17818=EDGE_CURVE('',#14390,#14292,#7329,.T.); #17819=EDGE_CURVE('',#14391,#14295,#7330,.T.); #17820=EDGE_CURVE('',#14392,#14393,#7331,.T.); #17821=EDGE_CURVE('',#14392,#14288,#7332,.T.); #17822=EDGE_CURVE('',#14393,#14291,#7333,.T.); #17823=EDGE_CURVE('',#14394,#14395,#7334,.T.); #17824=EDGE_CURVE('',#14394,#14284,#7335,.T.); #17825=EDGE_CURVE('',#14395,#14287,#7336,.T.); #17826=EDGE_CURVE('',#14396,#14397,#7337,.T.); #17827=EDGE_CURVE('',#14396,#14280,#7338,.T.); #17828=EDGE_CURVE('',#14397,#14283,#7339,.T.); #17829=EDGE_CURVE('',#14398,#14399,#7340,.T.); #17830=EDGE_CURVE('',#14398,#14248,#7341,.T.); #17831=EDGE_CURVE('',#14399,#14251,#7342,.T.); #17832=EDGE_CURVE('',#14400,#14401,#7343,.T.); #17833=EDGE_CURVE('',#14400,#14244,#7344,.T.); #17834=EDGE_CURVE('',#14401,#14247,#7345,.T.); #17835=EDGE_CURVE('',#14402,#14403,#7346,.T.); #17836=EDGE_CURVE('',#14402,#14240,#7347,.T.); #17837=EDGE_CURVE('',#14403,#14243,#7348,.T.); #17838=EDGE_CURVE('',#14404,#14405,#7349,.T.); #17839=EDGE_CURVE('',#14404,#14276,#7350,.T.); #17840=EDGE_CURVE('',#14405,#14279,#7351,.T.); #17841=EDGE_CURVE('',#14406,#14407,#7352,.T.); #17842=EDGE_CURVE('',#14406,#14236,#7353,.T.); #17843=EDGE_CURVE('',#14407,#14239,#7354,.T.); #17844=EDGE_CURVE('',#14406,#14408,#6162,.T.); #17845=EDGE_CURVE('',#14408,#14409,#7355,.T.); #17846=EDGE_CURVE('',#14409,#14410,#6163,.T.); #17847=EDGE_CURVE('',#14410,#14411,#7356,.T.); #17848=EDGE_CURVE('',#14411,#14412,#6164,.T.); #17849=EDGE_CURVE('',#14237,#14412,#7357,.T.); #17850=EDGE_CURVE('',#14407,#14413,#6165,.T.); #17851=EDGE_CURVE('',#14238,#14414,#7358,.T.); #17852=EDGE_CURVE('',#14415,#14414,#6166,.T.); #17853=EDGE_CURVE('',#14416,#14415,#7359,.T.); #17854=EDGE_CURVE('',#14417,#14416,#6167,.T.); #17855=EDGE_CURVE('',#14413,#14417,#7360,.T.); #17856=EDGE_CURVE('',#14418,#14419,#7361,.T.); #17857=EDGE_CURVE('',#14420,#14419,#7362,.T.); #17858=EDGE_CURVE('',#14241,#14420,#7363,.T.); #17859=EDGE_CURVE('',#14421,#14402,#7364,.T.); #17860=EDGE_CURVE('',#14421,#14422,#7365,.T.); #17861=EDGE_CURVE('',#14422,#14423,#6168,.T.); #17862=EDGE_CURVE('',#14423,#14424,#7366,.T.); #17863=EDGE_CURVE('',#14424,#14418,#6169,.T.); #17864=EDGE_CURVE('',#14425,#14426,#7367,.T.); #17865=EDGE_CURVE('',#14427,#14425,#6170,.T.); #17866=EDGE_CURVE('',#14428,#14427,#7368,.T.); #17867=EDGE_CURVE('',#14429,#14428,#6171,.T.); #17868=EDGE_CURVE('',#14430,#14429,#7369,.T.); #17869=EDGE_CURVE('',#14430,#14403,#7370,.T.); #17870=EDGE_CURVE('',#14242,#14431,#7371,.T.); #17871=EDGE_CURVE('',#14431,#14426,#7372,.T.); #17872=EDGE_CURVE('',#14432,#14433,#6172,.T.); #17873=EDGE_CURVE('',#14245,#14433,#7373,.T.); #17874=EDGE_CURVE('',#14400,#14434,#6173,.T.); #17875=EDGE_CURVE('',#14434,#14435,#7374,.T.); #17876=EDGE_CURVE('',#14435,#14436,#6174,.T.); #17877=EDGE_CURVE('',#14436,#14432,#7375,.T.); #17878=EDGE_CURVE('',#14437,#14438,#6175,.T.); #17879=EDGE_CURVE('',#14439,#14437,#7376,.T.); #17880=EDGE_CURVE('',#14440,#14439,#6176,.T.); #17881=EDGE_CURVE('',#14441,#14440,#7377,.T.); #17882=EDGE_CURVE('',#14401,#14441,#6177,.T.); #17883=EDGE_CURVE('',#14246,#14438,#7378,.T.); #17884=EDGE_CURVE('',#14398,#14442,#6178,.T.); #17885=EDGE_CURVE('',#14442,#14443,#7379,.T.); #17886=EDGE_CURVE('',#14443,#14444,#6179,.T.); #17887=EDGE_CURVE('',#14444,#14445,#7380,.T.); #17888=EDGE_CURVE('',#14445,#14446,#6180,.T.); #17889=EDGE_CURVE('',#14249,#14446,#7381,.T.); #17890=EDGE_CURVE('',#14399,#14447,#6181,.T.); #17891=EDGE_CURVE('',#14250,#14448,#7382,.T.); #17892=EDGE_CURVE('',#14449,#14448,#6182,.T.); #17893=EDGE_CURVE('',#14450,#14449,#7383,.T.); #17894=EDGE_CURVE('',#14451,#14450,#6183,.T.); #17895=EDGE_CURVE('',#14447,#14451,#7384,.T.); #17896=EDGE_CURVE('',#14452,#14453,#7385,.T.); #17897=EDGE_CURVE('',#14453,#14454,#6184,.T.); #17898=EDGE_CURVE('',#14454,#14455,#7386,.T.); #17899=EDGE_CURVE('',#14455,#14456,#6185,.T.); #17900=EDGE_CURVE('',#14456,#14457,#7387,.T.); #17901=EDGE_CURVE('',#14458,#14457,#7388,.T.); #17902=EDGE_CURVE('',#14309,#14458,#7389,.T.); #17903=EDGE_CURVE('',#14452,#14382,#7390,.T.); #17904=EDGE_CURVE('',#14459,#14460,#7391,.T.); #17905=EDGE_CURVE('',#14459,#14383,#7392,.T.); #17906=EDGE_CURVE('',#14310,#14461,#7393,.T.); #17907=EDGE_CURVE('',#14461,#14462,#7394,.T.); #17908=EDGE_CURVE('',#14463,#14462,#7395,.T.); #17909=EDGE_CURVE('',#14464,#14463,#6186,.T.); #17910=EDGE_CURVE('',#14465,#14464,#7396,.T.); #17911=EDGE_CURVE('',#14460,#14465,#6187,.T.); #17912=EDGE_CURVE('',#14466,#14467,#6188,.T.); #17913=EDGE_CURVE('',#14305,#14467,#7397,.T.); #17914=EDGE_CURVE('',#14384,#14468,#6189,.T.); #17915=EDGE_CURVE('',#14468,#14469,#7398,.T.); #17916=EDGE_CURVE('',#14469,#14470,#6190,.T.); #17917=EDGE_CURVE('',#14470,#14466,#7399,.T.); #17918=EDGE_CURVE('',#14471,#14472,#6191,.T.); #17919=EDGE_CURVE('',#14473,#14471,#7400,.T.); #17920=EDGE_CURVE('',#14474,#14473,#6192,.T.); #17921=EDGE_CURVE('',#14475,#14474,#7401,.T.); #17922=EDGE_CURVE('',#14385,#14475,#6193,.T.); #17923=EDGE_CURVE('',#14306,#14472,#7402,.T.); #17924=EDGE_CURVE('',#14386,#14476,#6194,.T.); #17925=EDGE_CURVE('',#14476,#14477,#7403,.T.); #17926=EDGE_CURVE('',#14477,#14478,#6195,.T.); #17927=EDGE_CURVE('',#14478,#14479,#7404,.T.); #17928=EDGE_CURVE('',#14479,#14480,#6196,.T.); #17929=EDGE_CURVE('',#14301,#14480,#7405,.T.); #17930=EDGE_CURVE('',#14387,#14481,#6197,.T.); #17931=EDGE_CURVE('',#14302,#14482,#7406,.T.); #17932=EDGE_CURVE('',#14483,#14482,#6198,.T.); #17933=EDGE_CURVE('',#14484,#14483,#7407,.T.); #17934=EDGE_CURVE('',#14485,#14484,#6199,.T.); #17935=EDGE_CURVE('',#14481,#14485,#7408,.T.); #17936=EDGE_CURVE('',#14388,#14486,#6200,.T.); #17937=EDGE_CURVE('',#14486,#14487,#7409,.T.); #17938=EDGE_CURVE('',#14487,#14488,#6201,.T.); #17939=EDGE_CURVE('',#14488,#14489,#7410,.T.); #17940=EDGE_CURVE('',#14489,#14490,#6202,.T.); #17941=EDGE_CURVE('',#14297,#14490,#7411,.T.); #17942=EDGE_CURVE('',#14389,#14491,#6203,.T.); #17943=EDGE_CURVE('',#14298,#14492,#7412,.T.); #17944=EDGE_CURVE('',#14493,#14492,#6204,.T.); #17945=EDGE_CURVE('',#14494,#14493,#7413,.T.); #17946=EDGE_CURVE('',#14495,#14494,#6205,.T.); #17947=EDGE_CURVE('',#14491,#14495,#7414,.T.); #17948=EDGE_CURVE('',#14390,#14496,#6206,.T.); #17949=EDGE_CURVE('',#14496,#14497,#7415,.T.); #17950=EDGE_CURVE('',#14497,#14498,#6207,.T.); #17951=EDGE_CURVE('',#14498,#14499,#7416,.T.); #17952=EDGE_CURVE('',#14499,#14500,#6208,.T.); #17953=EDGE_CURVE('',#14293,#14500,#7417,.T.); #17954=EDGE_CURVE('',#14391,#14501,#6209,.T.); #17955=EDGE_CURVE('',#14294,#14502,#7418,.T.); #17956=EDGE_CURVE('',#14503,#14502,#6210,.T.); #17957=EDGE_CURVE('',#14504,#14503,#7419,.T.); #17958=EDGE_CURVE('',#14505,#14504,#6211,.T.); #17959=EDGE_CURVE('',#14501,#14505,#7420,.T.); #17960=EDGE_CURVE('',#14506,#14507,#7421,.T.); #17961=EDGE_CURVE('',#14507,#14508,#6212,.T.); #17962=EDGE_CURVE('',#14508,#14509,#7422,.T.); #17963=EDGE_CURVE('',#14509,#14510,#6213,.T.); #17964=EDGE_CURVE('',#14510,#14511,#7423,.T.); #17965=EDGE_CURVE('',#14512,#14511,#7424,.T.); #17966=EDGE_CURVE('',#14289,#14512,#7425,.T.); #17967=EDGE_CURVE('',#14506,#14392,#7426,.T.); #17968=EDGE_CURVE('',#14513,#14514,#7427,.T.); #17969=EDGE_CURVE('',#14513,#14393,#7428,.T.); #17970=EDGE_CURVE('',#14290,#14515,#7429,.T.); #17971=EDGE_CURVE('',#14515,#14516,#7430,.T.); #17972=EDGE_CURVE('',#14517,#14516,#7431,.T.); #17973=EDGE_CURVE('',#14518,#14517,#6214,.T.); #17974=EDGE_CURVE('',#14519,#14518,#7432,.T.); #17975=EDGE_CURVE('',#14514,#14519,#6215,.T.); #17976=EDGE_CURVE('',#14520,#14521,#6216,.T.); #17977=EDGE_CURVE('',#14285,#14521,#7433,.T.); #17978=EDGE_CURVE('',#14394,#14522,#6217,.T.); #17979=EDGE_CURVE('',#14522,#14523,#7434,.T.); #17980=EDGE_CURVE('',#14523,#14524,#6218,.T.); #17981=EDGE_CURVE('',#14524,#14520,#7435,.T.); #17982=EDGE_CURVE('',#14525,#14526,#6219,.T.); #17983=EDGE_CURVE('',#14527,#14525,#7436,.T.); #17984=EDGE_CURVE('',#14528,#14527,#6220,.T.); #17985=EDGE_CURVE('',#14529,#14528,#7437,.T.); #17986=EDGE_CURVE('',#14395,#14529,#6221,.T.); #17987=EDGE_CURVE('',#14286,#14526,#7438,.T.); #17988=EDGE_CURVE('',#14396,#14530,#6222,.T.); #17989=EDGE_CURVE('',#14530,#14531,#7439,.T.); #17990=EDGE_CURVE('',#14531,#14532,#6223,.T.); #17991=EDGE_CURVE('',#14532,#14533,#7440,.T.); #17992=EDGE_CURVE('',#14533,#14534,#6224,.T.); #17993=EDGE_CURVE('',#14281,#14534,#7441,.T.); #17994=EDGE_CURVE('',#14397,#14535,#6225,.T.); #17995=EDGE_CURVE('',#14282,#14536,#7442,.T.); #17996=EDGE_CURVE('',#14537,#14536,#6226,.T.); #17997=EDGE_CURVE('',#14538,#14537,#7443,.T.); #17998=EDGE_CURVE('',#14539,#14538,#6227,.T.); #17999=EDGE_CURVE('',#14535,#14539,#7444,.T.); #18000=EDGE_CURVE('',#14540,#14541,#6228,.T.); #18001=EDGE_CURVE('',#14277,#14541,#7445,.T.); #18002=EDGE_CURVE('',#14404,#14542,#6229,.T.); #18003=EDGE_CURVE('',#14542,#14543,#7446,.T.); #18004=EDGE_CURVE('',#14543,#14544,#6230,.T.); #18005=EDGE_CURVE('',#14544,#14540,#7447,.T.); #18006=EDGE_CURVE('',#14545,#14546,#6231,.T.); #18007=EDGE_CURVE('',#14547,#14545,#7448,.T.); #18008=EDGE_CURVE('',#14548,#14547,#6232,.T.); #18009=EDGE_CURVE('',#14549,#14548,#7449,.T.); #18010=EDGE_CURVE('',#14405,#14549,#6233,.T.); #18011=EDGE_CURVE('',#14278,#14546,#7450,.T.); #18012=EDGE_CURVE('',#14376,#14550,#6234,.T.); #18013=EDGE_CURVE('',#14550,#14551,#7451,.T.); #18014=EDGE_CURVE('',#14551,#14552,#6235,.T.); #18015=EDGE_CURVE('',#14552,#14553,#7452,.T.); #18016=EDGE_CURVE('',#14553,#14554,#6236,.T.); #18017=EDGE_CURVE('',#14321,#14554,#7453,.T.); #18018=EDGE_CURVE('',#14377,#14555,#6237,.T.); #18019=EDGE_CURVE('',#14322,#14556,#7454,.T.); #18020=EDGE_CURVE('',#14557,#14556,#6238,.T.); #18021=EDGE_CURVE('',#14558,#14557,#7455,.T.); #18022=EDGE_CURVE('',#14559,#14558,#6239,.T.); #18023=EDGE_CURVE('',#14555,#14559,#7456,.T.); #18024=EDGE_CURVE('',#14560,#14561,#6240,.T.); #18025=EDGE_CURVE('',#14317,#14561,#7457,.T.); #18026=EDGE_CURVE('',#14378,#14562,#6241,.T.); #18027=EDGE_CURVE('',#14562,#14563,#7458,.T.); #18028=EDGE_CURVE('',#14563,#14564,#6242,.T.); #18029=EDGE_CURVE('',#14564,#14560,#7459,.T.); #18030=EDGE_CURVE('',#14565,#14566,#6243,.T.); #18031=EDGE_CURVE('',#14567,#14565,#7460,.T.); #18032=EDGE_CURVE('',#14568,#14567,#6244,.T.); #18033=EDGE_CURVE('',#14569,#14568,#7461,.T.); #18034=EDGE_CURVE('',#14379,#14569,#6245,.T.); #18035=EDGE_CURVE('',#14318,#14566,#7462,.T.); #18036=EDGE_CURVE('',#14380,#14570,#6246,.T.); #18037=EDGE_CURVE('',#14570,#14571,#7463,.T.); #18038=EDGE_CURVE('',#14571,#14572,#6247,.T.); #18039=EDGE_CURVE('',#14572,#14573,#7464,.T.); #18040=EDGE_CURVE('',#14573,#14574,#6248,.T.); #18041=EDGE_CURVE('',#14313,#14574,#7465,.T.); #18042=EDGE_CURVE('',#14381,#14575,#6249,.T.); #18043=EDGE_CURVE('',#14314,#14576,#7466,.T.); #18044=EDGE_CURVE('',#14577,#14576,#6250,.T.); #18045=EDGE_CURVE('',#14578,#14577,#7467,.T.); #18046=EDGE_CURVE('',#14579,#14578,#6251,.T.); #18047=EDGE_CURVE('',#14575,#14579,#7468,.T.); #18048=EDGE_CURVE('',#14580,#14366,#6252,.T.); #18049=EDGE_CURVE('',#14353,#14366,#7469,.T.); #18050=EDGE_CURVE('',#14368,#14581,#6253,.T.); #18051=EDGE_CURVE('',#14581,#14582,#7470,.T.); #18052=EDGE_CURVE('',#14582,#14583,#6254,.T.); #18053=EDGE_CURVE('',#14583,#14580,#7471,.T.); #18054=EDGE_CURVE('',#14584,#14367,#6255,.T.); #18055=EDGE_CURVE('',#14585,#14584,#7472,.T.); #18056=EDGE_CURVE('',#14586,#14585,#6256,.T.); #18057=EDGE_CURVE('',#14587,#14586,#7473,.T.); #18058=EDGE_CURVE('',#14369,#14587,#6257,.T.); #18059=EDGE_CURVE('',#14354,#14367,#7474,.T.); #18060=EDGE_CURVE('',#14370,#14588,#6258,.T.); #18061=EDGE_CURVE('',#14588,#14589,#7475,.T.); #18062=EDGE_CURVE('',#14589,#14590,#6259,.T.); #18063=EDGE_CURVE('',#14590,#14591,#7476,.T.); #18064=EDGE_CURVE('',#14591,#14592,#6260,.T.); #18065=EDGE_CURVE('',#14333,#14592,#7477,.T.); #18066=EDGE_CURVE('',#14371,#14593,#6261,.T.); #18067=EDGE_CURVE('',#14334,#14594,#7478,.T.); #18068=EDGE_CURVE('',#14595,#14594,#6262,.T.); #18069=EDGE_CURVE('',#14596,#14595,#7479,.T.); #18070=EDGE_CURVE('',#14597,#14596,#6263,.T.); #18071=EDGE_CURVE('',#14593,#14597,#7480,.T.); #18072=EDGE_CURVE('',#14598,#14599,#7481,.T.); #18073=EDGE_CURVE('',#14600,#14599,#7482,.T.); #18074=EDGE_CURVE('',#14329,#14600,#7483,.T.); #18075=EDGE_CURVE('',#14601,#14372,#7484,.T.); #18076=EDGE_CURVE('',#14601,#14602,#7485,.T.); #18077=EDGE_CURVE('',#14602,#14603,#6264,.T.); #18078=EDGE_CURVE('',#14603,#14604,#7486,.T.); #18079=EDGE_CURVE('',#14604,#14598,#6265,.T.); #18080=EDGE_CURVE('',#14605,#14606,#7487,.T.); #18081=EDGE_CURVE('',#14607,#14605,#6266,.T.); #18082=EDGE_CURVE('',#14608,#14607,#7488,.T.); #18083=EDGE_CURVE('',#14609,#14608,#6267,.T.); #18084=EDGE_CURVE('',#14610,#14609,#7489,.T.); #18085=EDGE_CURVE('',#14610,#14373,#7490,.T.); #18086=EDGE_CURVE('',#14330,#14611,#7491,.T.); #18087=EDGE_CURVE('',#14611,#14606,#7492,.T.); #18088=EDGE_CURVE('',#14374,#14612,#6268,.T.); #18089=EDGE_CURVE('',#14612,#14613,#7493,.T.); #18090=EDGE_CURVE('',#14613,#14614,#6269,.T.); #18091=EDGE_CURVE('',#14614,#14615,#7494,.T.); #18092=EDGE_CURVE('',#14615,#14616,#6270,.T.); #18093=EDGE_CURVE('',#14325,#14616,#7495,.T.); #18094=EDGE_CURVE('',#14375,#14617,#6271,.T.); #18095=EDGE_CURVE('',#14326,#14618,#7496,.T.); #18096=EDGE_CURVE('',#14619,#14618,#6272,.T.); #18097=EDGE_CURVE('',#14620,#14619,#7497,.T.); #18098=EDGE_CURVE('',#14621,#14620,#6273,.T.); #18099=EDGE_CURVE('',#14617,#14621,#7498,.T.); #18100=EDGE_CURVE('',#14622,#14356,#7499,.T.); #18101=EDGE_CURVE('',#14623,#14235,#7500,.T.); #18102=EDGE_CURVE('',#14623,#14624,#7501,.T.); #18103=EDGE_CURVE('',#14624,#14622,#6274,.T.); #18104=EDGE_CURVE('',#14625,#14357,#7502,.T.); #18105=EDGE_CURVE('',#14626,#14625,#6275,.T.); #18106=EDGE_CURVE('',#14627,#14626,#7503,.T.); #18107=EDGE_CURVE('',#14627,#14234,#7504,.T.); #18108=EDGE_CURVE('',#14628,#14629,#7505,.T.); #18109=EDGE_CURVE('',#14628,#14630,#7506,.T.); #18110=EDGE_CURVE('',#14630,#14631,#7507,.T.); #18111=EDGE_CURVE('',#14629,#14631,#7508,.T.); #18112=EDGE_CURVE('',#14632,#14632,#6276,.T.); #18113=EDGE_CURVE('',#14633,#14633,#6277,.T.); #18114=EDGE_CURVE('',#14634,#14634,#6278,.T.); #18115=EDGE_CURVE('',#14635,#14635,#6279,.T.); #18116=EDGE_CURVE('',#14363,#14399,#7509,.T.); #18117=EDGE_CURVE('',#14365,#14398,#7510,.T.); #18118=EDGE_CURVE('',#14446,#14400,#7511,.T.); #18119=EDGE_CURVE('',#14448,#14401,#7512,.T.); #18120=EDGE_CURVE('',#14446,#14448,#7513,.T.); #18121=EDGE_CURVE('',#14433,#14421,#7514,.T.); #18122=EDGE_CURVE('',#14438,#14430,#7515,.T.); #18123=EDGE_CURVE('',#14433,#14438,#7516,.T.); #18124=EDGE_CURVE('',#14419,#14406,#7517,.T.); #18125=EDGE_CURVE('',#14426,#14407,#7518,.T.); #18126=EDGE_CURVE('',#14420,#14431,#7519,.T.); #18127=EDGE_CURVE('',#14412,#14404,#7520,.T.); #18128=EDGE_CURVE('',#14414,#14405,#7521,.T.); #18129=EDGE_CURVE('',#14412,#14414,#7522,.T.); #18130=EDGE_CURVE('',#14541,#14396,#7523,.T.); #18131=EDGE_CURVE('',#14546,#14397,#7524,.T.); #18132=EDGE_CURVE('',#14541,#14546,#7525,.T.); #18133=EDGE_CURVE('',#14534,#14394,#7526,.T.); #18134=EDGE_CURVE('',#14536,#14395,#7527,.T.); #18135=EDGE_CURVE('',#14534,#14536,#7528,.T.); #18136=EDGE_CURVE('',#14521,#14506,#7529,.T.); #18137=EDGE_CURVE('',#14526,#14513,#7530,.T.); #18138=EDGE_CURVE('',#14521,#14526,#7531,.T.); #18139=EDGE_CURVE('',#14511,#14390,#7532,.T.); #18140=EDGE_CURVE('',#14516,#14391,#7533,.T.); #18141=EDGE_CURVE('',#14512,#14515,#7534,.T.); #18142=EDGE_CURVE('',#14500,#14388,#7535,.T.); #18143=EDGE_CURVE('',#14502,#14389,#7536,.T.); #18144=EDGE_CURVE('',#14500,#14502,#7537,.T.); #18145=EDGE_CURVE('',#14490,#14386,#7538,.T.); #18146=EDGE_CURVE('',#14492,#14387,#7539,.T.); #18147=EDGE_CURVE('',#14490,#14492,#7540,.T.); #18148=EDGE_CURVE('',#14480,#14384,#7541,.T.); #18149=EDGE_CURVE('',#14482,#14385,#7542,.T.); #18150=EDGE_CURVE('',#14480,#14482,#7543,.T.); #18151=EDGE_CURVE('',#14467,#14452,#7544,.T.); #18152=EDGE_CURVE('',#14472,#14459,#7545,.T.); #18153=EDGE_CURVE('',#14467,#14472,#7546,.T.); #18154=EDGE_CURVE('',#14457,#14380,#7547,.T.); #18155=EDGE_CURVE('',#14462,#14381,#7548,.T.); #18156=EDGE_CURVE('',#14458,#14461,#7549,.T.); #18157=EDGE_CURVE('',#14574,#14378,#7550,.T.); #18158=EDGE_CURVE('',#14576,#14379,#7551,.T.); #18159=EDGE_CURVE('',#14574,#14576,#7552,.T.); #18160=EDGE_CURVE('',#14561,#14376,#7553,.T.); #18161=EDGE_CURVE('',#14566,#14377,#7554,.T.); #18162=EDGE_CURVE('',#14561,#14566,#7555,.T.); #18163=EDGE_CURVE('',#14554,#14374,#7556,.T.); #18164=EDGE_CURVE('',#14556,#14375,#7557,.T.); #18165=EDGE_CURVE('',#14554,#14556,#7558,.T.); #18166=EDGE_CURVE('',#14616,#14601,#7559,.T.); #18167=EDGE_CURVE('',#14618,#14610,#7560,.T.); #18168=EDGE_CURVE('',#14616,#14618,#7561,.T.); #18169=EDGE_CURVE('',#14599,#14370,#7562,.T.); #18170=EDGE_CURVE('',#14606,#14371,#7563,.T.); #18171=EDGE_CURVE('',#14600,#14611,#7564,.T.); #18172=EDGE_CURVE('',#14592,#14368,#7565,.T.); #18173=EDGE_CURVE('',#14594,#14369,#7566,.T.); #18174=EDGE_CURVE('',#14592,#14594,#7567,.T.); #18175=EDGE_CURVE('',#14636,#14636,#6280,.T.); #18176=EDGE_CURVE('',#14636,#14637,#7568,.T.); #18177=EDGE_CURVE('',#14637,#14637,#6281,.T.); #18178=EDGE_CURVE('',#14638,#14638,#6282,.T.); #18179=EDGE_CURVE('',#14638,#14639,#7569,.T.); #18180=EDGE_CURVE('',#14639,#14639,#6283,.T.); #18181=EDGE_CURVE('',#14640,#14640,#6284,.T.); #18182=EDGE_CURVE('',#14640,#14641,#7570,.T.); #18183=EDGE_CURVE('',#14641,#14641,#6285,.T.); #18184=EDGE_CURVE('',#14642,#14642,#6286,.T.); #18185=EDGE_CURVE('',#14642,#14643,#7571,.T.); #18186=EDGE_CURVE('',#14643,#14643,#6287,.T.); #18187=EDGE_CURVE('',#14644,#14645,#7572,.T.); #18188=EDGE_CURVE('',#14644,#14628,#6288,.T.); #18189=EDGE_CURVE('',#14645,#14629,#6289,.T.); #18190=EDGE_CURVE('',#14646,#14647,#7573,.T.); #18191=EDGE_CURVE('',#14648,#14646,#6290,.T.); #18192=EDGE_CURVE('',#14649,#14648,#7574,.T.); #18193=EDGE_CURVE('',#14649,#14647,#6291,.T.); #18194=EDGE_CURVE('',#14650,#14650,#6292,.T.); #18195=EDGE_CURVE('',#14650,#14651,#7575,.T.); #18196=EDGE_CURVE('',#14651,#14651,#6293,.T.); #18197=EDGE_CURVE('',#14652,#14652,#6294,.T.); #18198=EDGE_CURVE('',#14652,#14653,#7576,.T.); #18199=EDGE_CURVE('',#14653,#14653,#6295,.T.); #18200=EDGE_CURVE('',#14654,#14654,#6296,.T.); #18201=EDGE_CURVE('',#14654,#14655,#7577,.T.); #18202=EDGE_CURVE('',#14655,#14655,#6297,.T.); #18203=EDGE_CURVE('',#14656,#14656,#6298,.T.); #18204=EDGE_CURVE('',#14656,#14657,#7578,.T.); #18205=EDGE_CURVE('',#14657,#14657,#6299,.T.); #18206=EDGE_CURVE('',#14658,#14658,#6300,.T.); #18207=EDGE_CURVE('',#14658,#14659,#7579,.T.); #18208=EDGE_CURVE('',#14659,#14659,#6301,.T.); #18209=EDGE_CURVE('',#14660,#14660,#6302,.T.); #18210=EDGE_CURVE('',#14660,#14661,#7580,.T.); #18211=EDGE_CURVE('',#14661,#14661,#6303,.T.); #18212=EDGE_CURVE('',#14662,#14662,#6304,.T.); #18213=EDGE_CURVE('',#14662,#14663,#7581,.T.); #18214=EDGE_CURVE('',#14663,#14663,#6305,.T.); #18215=EDGE_CURVE('',#14664,#14664,#6306,.T.); #18216=EDGE_CURVE('',#14664,#14665,#7582,.T.); #18217=EDGE_CURVE('',#14665,#14665,#6307,.T.); #18218=EDGE_CURVE('',#14666,#14666,#6308,.T.); #18219=EDGE_CURVE('',#14666,#14667,#7583,.T.); #18220=EDGE_CURVE('',#14667,#14667,#6309,.T.); #18221=EDGE_CURVE('',#14668,#14668,#6310,.T.); #18222=EDGE_CURVE('',#14668,#14669,#7584,.T.); #18223=EDGE_CURVE('',#14669,#14669,#6311,.T.); #18224=EDGE_CURVE('',#14670,#14670,#6312,.T.); #18225=EDGE_CURVE('',#14670,#14671,#7585,.T.); #18226=EDGE_CURVE('',#14671,#14671,#6313,.T.); #18227=EDGE_CURVE('',#14672,#14672,#6314,.T.); #18228=EDGE_CURVE('',#14672,#14673,#7586,.T.); #18229=EDGE_CURVE('',#14673,#14673,#6315,.T.); #18230=EDGE_CURVE('',#14674,#14674,#6316,.T.); #18231=EDGE_CURVE('',#14674,#14675,#7587,.T.); #18232=EDGE_CURVE('',#14675,#14675,#6317,.T.); #18233=EDGE_CURVE('',#14676,#14676,#6318,.T.); #18234=EDGE_CURVE('',#14676,#14677,#7588,.T.); #18235=EDGE_CURVE('',#14677,#14677,#6319,.T.); #18236=EDGE_CURVE('',#14678,#14678,#6320,.T.); #18237=EDGE_CURVE('',#14678,#14679,#7589,.T.); #18238=EDGE_CURVE('',#14679,#14679,#6321,.T.); #18239=EDGE_CURVE('',#14680,#14680,#6322,.T.); #18240=EDGE_CURVE('',#14680,#14681,#7590,.T.); #18241=EDGE_CURVE('',#14681,#14681,#6323,.T.); #18242=EDGE_CURVE('',#14682,#14682,#6324,.T.); #18243=EDGE_CURVE('',#14682,#14683,#7591,.T.); #18244=EDGE_CURVE('',#14683,#14683,#6325,.T.); #18245=EDGE_CURVE('',#14684,#14684,#6326,.T.); #18246=EDGE_CURVE('',#14684,#14685,#7592,.T.); #18247=EDGE_CURVE('',#14685,#14685,#6327,.T.); #18248=EDGE_CURVE('',#14686,#14686,#6328,.T.); #18249=EDGE_CURVE('',#14686,#14687,#7593,.T.); #18250=EDGE_CURVE('',#14687,#14687,#6329,.T.); #18251=EDGE_CURVE('',#14688,#14688,#6330,.T.); #18252=EDGE_CURVE('',#14688,#14689,#7594,.T.); #18253=EDGE_CURVE('',#14689,#14689,#6331,.T.); #18254=EDGE_CURVE('',#14690,#14691,#7595,.T.); #18255=EDGE_CURVE('',#14692,#14690,#7596,.T.); #18256=EDGE_CURVE('',#14692,#14693,#7597,.T.); #18257=EDGE_CURVE('',#14693,#14691,#7598,.T.); #18258=EDGE_CURVE('',#14694,#14695,#7599,.T.); #18259=EDGE_CURVE('',#14695,#14359,#7600,.T.); #18260=EDGE_CURVE('',#14694,#14361,#7601,.T.); #18261=EDGE_CURVE('',#14696,#14695,#6332,.T.); #18262=EDGE_CURVE('',#14697,#14694,#6333,.T.); #18263=EDGE_CURVE('',#14697,#14696,#7602,.T.); #18264=EDGE_CURVE('',#14691,#14698,#6334,.T.); #18265=EDGE_CURVE('',#14699,#14698,#7603,.T.); #18266=EDGE_CURVE('',#14690,#14699,#6335,.T.); #18267=EDGE_CURVE('',#14700,#14697,#7604,.T.); #18268=EDGE_CURVE('',#14700,#14701,#7605,.T.); #18269=EDGE_CURVE('',#14701,#14696,#7606,.T.); #18270=EDGE_CURVE('',#14702,#14703,#7607,.T.); #18271=EDGE_CURVE('',#14704,#14702,#7608,.T.); #18272=EDGE_CURVE('',#14704,#14705,#7609,.T.); #18273=EDGE_CURVE('',#14705,#14703,#7610,.T.); #18274=EDGE_CURVE('',#14706,#14707,#7611,.T.); #18275=EDGE_CURVE('',#14708,#14706,#7612,.T.); #18276=EDGE_CURVE('',#14708,#14709,#7613,.T.); #18277=EDGE_CURVE('',#14709,#14707,#7614,.T.); #18278=EDGE_CURVE('',#14710,#14711,#7615,.T.); #18279=EDGE_CURVE('',#14712,#14710,#7616,.T.); #18280=EDGE_CURVE('',#14712,#14713,#7617,.T.); #18281=EDGE_CURVE('',#14713,#14711,#7618,.T.); #18282=EDGE_CURVE('',#14714,#14715,#7619,.T.); #18283=EDGE_CURVE('',#14716,#14714,#7620,.T.); #18284=EDGE_CURVE('',#14716,#14717,#7621,.T.); #18285=EDGE_CURVE('',#14717,#14715,#7622,.T.); #18286=EDGE_CURVE('',#14718,#14719,#7623,.T.); #18287=EDGE_CURVE('',#14720,#14718,#7624,.T.); #18288=EDGE_CURVE('',#14720,#14721,#7625,.T.); #18289=EDGE_CURVE('',#14721,#14719,#7626,.T.); #18290=EDGE_CURVE('',#14722,#14723,#7627,.T.); #18291=EDGE_CURVE('',#14724,#14722,#7628,.T.); #18292=EDGE_CURVE('',#14724,#14725,#7629,.T.); #18293=EDGE_CURVE('',#14725,#14723,#7630,.T.); #18294=EDGE_CURVE('',#14726,#14727,#7631,.T.); #18295=EDGE_CURVE('',#14728,#14726,#7632,.T.); #18296=EDGE_CURVE('',#14728,#14729,#7633,.T.); #18297=EDGE_CURVE('',#14729,#14727,#7634,.T.); #18298=EDGE_CURVE('',#14730,#14731,#7635,.T.); #18299=EDGE_CURVE('',#14732,#14730,#7636,.T.); #18300=EDGE_CURVE('',#14732,#14733,#7637,.T.); #18301=EDGE_CURVE('',#14733,#14731,#7638,.T.); #18302=EDGE_CURVE('',#14734,#14735,#7639,.T.); #18303=EDGE_CURVE('',#14736,#14734,#7640,.T.); #18304=EDGE_CURVE('',#14736,#14737,#7641,.T.); #18305=EDGE_CURVE('',#14737,#14735,#7642,.T.); #18306=EDGE_CURVE('',#14738,#14739,#7643,.T.); #18307=EDGE_CURVE('',#14740,#14738,#7644,.T.); #18308=EDGE_CURVE('',#14740,#14741,#7645,.T.); #18309=EDGE_CURVE('',#14741,#14739,#7646,.T.); #18310=EDGE_CURVE('',#14742,#14743,#7647,.T.); #18311=EDGE_CURVE('',#14744,#14742,#7648,.T.); #18312=EDGE_CURVE('',#14744,#14745,#7649,.T.); #18313=EDGE_CURVE('',#14745,#14743,#7650,.T.); #18314=EDGE_CURVE('',#14746,#14747,#7651,.T.); #18315=EDGE_CURVE('',#14748,#14746,#7652,.T.); #18316=EDGE_CURVE('',#14748,#14749,#7653,.T.); #18317=EDGE_CURVE('',#14749,#14747,#7654,.T.); #18318=EDGE_CURVE('',#14750,#14751,#7655,.T.); #18319=EDGE_CURVE('',#14752,#14750,#7656,.T.); #18320=EDGE_CURVE('',#14752,#14753,#7657,.T.); #18321=EDGE_CURVE('',#14753,#14751,#7658,.T.); #18322=EDGE_CURVE('',#14754,#14755,#7659,.T.); #18323=EDGE_CURVE('',#14756,#14754,#7660,.T.); #18324=EDGE_CURVE('',#14756,#14757,#7661,.T.); #18325=EDGE_CURVE('',#14757,#14755,#7662,.T.); #18326=EDGE_CURVE('',#14758,#14759,#7663,.T.); #18327=EDGE_CURVE('',#14760,#14758,#7664,.T.); #18328=EDGE_CURVE('',#14760,#14761,#7665,.T.); #18329=EDGE_CURVE('',#14761,#14759,#7666,.T.); #18330=EDGE_CURVE('',#14762,#14763,#7667,.T.); #18331=EDGE_CURVE('',#14764,#14762,#7668,.T.); #18332=EDGE_CURVE('',#14764,#14765,#7669,.T.); #18333=EDGE_CURVE('',#14765,#14763,#7670,.T.); #18334=EDGE_CURVE('',#14766,#14767,#7671,.T.); #18335=EDGE_CURVE('',#14768,#14766,#7672,.T.); #18336=EDGE_CURVE('',#14768,#14769,#7673,.T.); #18337=EDGE_CURVE('',#14769,#14767,#7674,.T.); #18338=EDGE_CURVE('',#14770,#14771,#7675,.T.); #18339=EDGE_CURVE('',#14772,#14770,#7676,.T.); #18340=EDGE_CURVE('',#14772,#14773,#7677,.T.); #18341=EDGE_CURVE('',#14773,#14771,#7678,.T.); #18342=EDGE_CURVE('',#14774,#14775,#7679,.T.); #18343=EDGE_CURVE('',#14776,#14774,#7680,.T.); #18344=EDGE_CURVE('',#14776,#14777,#7681,.T.); #18345=EDGE_CURVE('',#14777,#14775,#7682,.T.); #18346=EDGE_CURVE('',#14778,#14779,#7683,.T.); #18347=EDGE_CURVE('',#14780,#14778,#7684,.T.); #18348=EDGE_CURVE('',#14780,#14781,#7685,.T.); #18349=EDGE_CURVE('',#14781,#14779,#7686,.T.); #18350=EDGE_CURVE('',#14780,#14782,#469,.T.); #18351=EDGE_CURVE('',#14778,#14783,#6336,.T.); #18352=EDGE_CURVE('',#14783,#14784,#7687,.T.); #18353=EDGE_CURVE('',#14785,#14784,#470,.F.); #18354=EDGE_CURVE('',#14782,#14785,#6337,.T.); #18355=EDGE_CURVE('',#14779,#14786,#6338,.T.); #18356=EDGE_CURVE('',#14781,#14787,#471,.T.); #18357=EDGE_CURVE('',#14787,#14788,#6339,.T.); #18358=EDGE_CURVE('',#14788,#14789,#472,.T.); #18359=EDGE_CURVE('',#14786,#14789,#7688,.T.); #18360=EDGE_CURVE('',#14790,#14791,#7689,.T.); #18361=EDGE_CURVE('',#14792,#14790,#6340,.T.); #18362=EDGE_CURVE('',#14793,#14792,#7690,.T.); #18363=EDGE_CURVE('',#14794,#14793,#6341,.T.); #18364=EDGE_CURVE('',#14795,#14794,#7691,.T.); #18365=EDGE_CURVE('',#14795,#14772,#7692,.T.); #18366=EDGE_CURVE('',#14770,#14796,#6342,.T.); #18367=EDGE_CURVE('',#14796,#14797,#7693,.T.); #18368=EDGE_CURVE('',#14797,#14791,#7694,.T.); #18369=EDGE_CURVE('',#14798,#14799,#7695,.T.); #18370=EDGE_CURVE('',#14799,#14800,#6343,.T.); #18371=EDGE_CURVE('',#14800,#14801,#7696,.T.); #18372=EDGE_CURVE('',#14802,#14801,#7697,.T.); #18373=EDGE_CURVE('',#14803,#14802,#7698,.T.); #18374=EDGE_CURVE('',#14771,#14803,#6344,.T.); #18375=EDGE_CURVE('',#14804,#14773,#7699,.T.); #18376=EDGE_CURVE('',#14804,#14805,#7700,.T.); #18377=EDGE_CURVE('',#14805,#14798,#6345,.T.); #18378=EDGE_CURVE('',#14806,#14807,#473,.F.); #18379=EDGE_CURVE('',#14808,#14806,#6346,.T.); #18380=EDGE_CURVE('',#14768,#14808,#474,.F.); #18381=EDGE_CURVE('',#14766,#14809,#6347,.T.); #18382=EDGE_CURVE('',#14809,#14807,#7701,.T.); #18383=EDGE_CURVE('',#14810,#14811,#6348,.T.); #18384=EDGE_CURVE('',#14811,#14812,#475,.T.); #18385=EDGE_CURVE('',#14813,#14812,#7702,.T.); #18386=EDGE_CURVE('',#14767,#14813,#6349,.T.); #18387=EDGE_CURVE('',#14769,#14810,#476,.T.); #18388=EDGE_CURVE('',#14764,#14814,#477,.T.); #18389=EDGE_CURVE('',#14762,#14815,#6350,.T.); #18390=EDGE_CURVE('',#14815,#14816,#7703,.T.); #18391=EDGE_CURVE('',#14817,#14816,#478,.F.); #18392=EDGE_CURVE('',#14814,#14817,#6351,.T.); #18393=EDGE_CURVE('',#14763,#14818,#6352,.T.); #18394=EDGE_CURVE('',#14765,#14819,#479,.T.); #18395=EDGE_CURVE('',#14819,#14820,#6353,.T.); #18396=EDGE_CURVE('',#14820,#14821,#480,.T.); #18397=EDGE_CURVE('',#14818,#14821,#7704,.T.); #18398=EDGE_CURVE('',#14822,#14823,#7705,.T.); #18399=EDGE_CURVE('',#14822,#14732,#7706,.T.); #18400=EDGE_CURVE('',#14730,#14824,#6354,.T.); #18401=EDGE_CURVE('',#14824,#14825,#7707,.T.); #18402=EDGE_CURVE('',#14825,#14826,#7708,.T.); #18403=EDGE_CURVE('',#14827,#14826,#7709,.T.); #18404=EDGE_CURVE('',#14828,#14827,#6355,.T.); #18405=EDGE_CURVE('',#14829,#14828,#7710,.T.); #18406=EDGE_CURVE('',#14823,#14829,#6356,.T.); #18407=EDGE_CURVE('',#14830,#14733,#7711,.T.); #18408=EDGE_CURVE('',#14830,#14831,#7712,.T.); #18409=EDGE_CURVE('',#14831,#14832,#6357,.T.); #18410=EDGE_CURVE('',#14832,#14833,#7713,.T.); #18411=EDGE_CURVE('',#14833,#14834,#6358,.T.); #18412=EDGE_CURVE('',#14834,#14835,#7714,.T.); #18413=EDGE_CURVE('',#14836,#14835,#7715,.T.); #18414=EDGE_CURVE('',#14837,#14836,#7716,.T.); #18415=EDGE_CURVE('',#14731,#14837,#6359,.T.); #18416=EDGE_CURVE('',#14838,#14839,#481,.F.); #18417=EDGE_CURVE('',#14840,#14838,#6360,.T.); #18418=EDGE_CURVE('',#14736,#14840,#482,.F.); #18419=EDGE_CURVE('',#14734,#14841,#6361,.T.); #18420=EDGE_CURVE('',#14841,#14839,#7717,.T.); #18421=EDGE_CURVE('',#14842,#14843,#6362,.T.); #18422=EDGE_CURVE('',#14843,#14844,#483,.T.); #18423=EDGE_CURVE('',#14845,#14844,#7718,.T.); #18424=EDGE_CURVE('',#14735,#14845,#6363,.T.); #18425=EDGE_CURVE('',#14737,#14842,#484,.T.); #18426=EDGE_CURVE('',#14740,#14846,#485,.T.); #18427=EDGE_CURVE('',#14738,#14847,#6364,.T.); #18428=EDGE_CURVE('',#14847,#14848,#7719,.T.); #18429=EDGE_CURVE('',#14849,#14848,#486,.F.); #18430=EDGE_CURVE('',#14846,#14849,#6365,.T.); #18431=EDGE_CURVE('',#14739,#14850,#6366,.T.); #18432=EDGE_CURVE('',#14741,#14851,#487,.T.); #18433=EDGE_CURVE('',#14851,#14852,#6367,.T.); #18434=EDGE_CURVE('',#14852,#14853,#488,.T.); #18435=EDGE_CURVE('',#14850,#14853,#7720,.T.); #18436=EDGE_CURVE('',#14744,#14854,#489,.T.); #18437=EDGE_CURVE('',#14742,#14855,#6368,.T.); #18438=EDGE_CURVE('',#14855,#14856,#7721,.T.); #18439=EDGE_CURVE('',#14857,#14856,#490,.F.); #18440=EDGE_CURVE('',#14854,#14857,#6369,.T.); #18441=EDGE_CURVE('',#14743,#14858,#6370,.T.); #18442=EDGE_CURVE('',#14745,#14859,#491,.T.); #18443=EDGE_CURVE('',#14859,#14860,#6371,.T.); #18444=EDGE_CURVE('',#14860,#14861,#492,.T.); #18445=EDGE_CURVE('',#14858,#14861,#7722,.T.); #18446=EDGE_CURVE('',#14748,#14862,#493,.T.); #18447=EDGE_CURVE('',#14746,#14863,#6372,.T.); #18448=EDGE_CURVE('',#14863,#14864,#7723,.T.); #18449=EDGE_CURVE('',#14865,#14864,#494,.F.); #18450=EDGE_CURVE('',#14862,#14865,#6373,.T.); #18451=EDGE_CURVE('',#14747,#14866,#6374,.T.); #18452=EDGE_CURVE('',#14749,#14867,#495,.T.); #18453=EDGE_CURVE('',#14867,#14868,#6375,.T.); #18454=EDGE_CURVE('',#14868,#14869,#496,.T.); #18455=EDGE_CURVE('',#14866,#14869,#7724,.T.); #18456=EDGE_CURVE('',#14870,#14871,#7725,.T.); #18457=EDGE_CURVE('',#14870,#14752,#7726,.T.); #18458=EDGE_CURVE('',#14750,#14872,#6376,.T.); #18459=EDGE_CURVE('',#14872,#14873,#7727,.T.); #18460=EDGE_CURVE('',#14873,#14874,#7728,.T.); #18461=EDGE_CURVE('',#14875,#14874,#7729,.T.); #18462=EDGE_CURVE('',#14876,#14875,#6377,.T.); #18463=EDGE_CURVE('',#14877,#14876,#7730,.T.); #18464=EDGE_CURVE('',#14871,#14877,#6378,.T.); #18465=EDGE_CURVE('',#14878,#14753,#7731,.T.); #18466=EDGE_CURVE('',#14878,#14879,#7732,.T.); #18467=EDGE_CURVE('',#14879,#14880,#6379,.T.); #18468=EDGE_CURVE('',#14880,#14881,#7733,.T.); #18469=EDGE_CURVE('',#14881,#14882,#6380,.T.); #18470=EDGE_CURVE('',#14882,#14883,#7734,.T.); #18471=EDGE_CURVE('',#14884,#14883,#7735,.T.); #18472=EDGE_CURVE('',#14885,#14884,#7736,.T.); #18473=EDGE_CURVE('',#14751,#14885,#6381,.T.); #18474=EDGE_CURVE('',#14886,#14887,#497,.F.); #18475=EDGE_CURVE('',#14888,#14886,#6382,.T.); #18476=EDGE_CURVE('',#14756,#14888,#498,.F.); #18477=EDGE_CURVE('',#14754,#14889,#6383,.T.); #18478=EDGE_CURVE('',#14889,#14887,#7737,.T.); #18479=EDGE_CURVE('',#14890,#14891,#6384,.T.); #18480=EDGE_CURVE('',#14891,#14892,#499,.T.); #18481=EDGE_CURVE('',#14893,#14892,#7738,.T.); #18482=EDGE_CURVE('',#14755,#14893,#6385,.T.); #18483=EDGE_CURVE('',#14757,#14890,#500,.T.); #18484=EDGE_CURVE('',#14760,#14894,#501,.T.); #18485=EDGE_CURVE('',#14758,#14895,#6386,.T.); #18486=EDGE_CURVE('',#14895,#14896,#7739,.T.); #18487=EDGE_CURVE('',#14897,#14896,#502,.F.); #18488=EDGE_CURVE('',#14894,#14897,#6387,.T.); #18489=EDGE_CURVE('',#14759,#14898,#6388,.T.); #18490=EDGE_CURVE('',#14761,#14899,#503,.T.); #18491=EDGE_CURVE('',#14899,#14900,#6389,.T.); #18492=EDGE_CURVE('',#14900,#14901,#504,.T.); #18493=EDGE_CURVE('',#14898,#14901,#7740,.T.); #18494=EDGE_CURVE('',#14902,#14903,#505,.F.); #18495=EDGE_CURVE('',#14904,#14902,#6390,.T.); #18496=EDGE_CURVE('',#14776,#14904,#506,.F.); #18497=EDGE_CURVE('',#14774,#14905,#6391,.T.); #18498=EDGE_CURVE('',#14905,#14903,#7741,.T.); #18499=EDGE_CURVE('',#14906,#14907,#6392,.T.); #18500=EDGE_CURVE('',#14907,#14908,#507,.T.); #18501=EDGE_CURVE('',#14909,#14908,#7742,.T.); #18502=EDGE_CURVE('',#14775,#14909,#6393,.T.); #18503=EDGE_CURVE('',#14777,#14906,#508,.T.); #18504=EDGE_CURVE('',#14720,#14910,#509,.T.); #18505=EDGE_CURVE('',#14718,#14911,#6394,.T.); #18506=EDGE_CURVE('',#14911,#14912,#7743,.T.); #18507=EDGE_CURVE('',#14913,#14912,#510,.F.); #18508=EDGE_CURVE('',#14910,#14913,#6395,.T.); #18509=EDGE_CURVE('',#14719,#14914,#6396,.T.); #18510=EDGE_CURVE('',#14721,#14915,#511,.T.); #18511=EDGE_CURVE('',#14915,#14916,#6397,.T.); #18512=EDGE_CURVE('',#14916,#14917,#512,.T.); #18513=EDGE_CURVE('',#14914,#14917,#7744,.T.); #18514=EDGE_CURVE('',#14918,#14919,#513,.F.); #18515=EDGE_CURVE('',#14920,#14918,#6398,.T.); #18516=EDGE_CURVE('',#14724,#14920,#514,.F.); #18517=EDGE_CURVE('',#14722,#14921,#6399,.T.); #18518=EDGE_CURVE('',#14921,#14919,#7745,.T.); #18519=EDGE_CURVE('',#14922,#14923,#6400,.T.); #18520=EDGE_CURVE('',#14923,#14924,#515,.T.); #18521=EDGE_CURVE('',#14925,#14924,#7746,.T.); #18522=EDGE_CURVE('',#14723,#14925,#6401,.T.); #18523=EDGE_CURVE('',#14725,#14922,#516,.T.); #18524=EDGE_CURVE('',#14728,#14926,#517,.T.); #18525=EDGE_CURVE('',#14726,#14927,#6402,.T.); #18526=EDGE_CURVE('',#14927,#14928,#7747,.T.); #18527=EDGE_CURVE('',#14929,#14928,#518,.F.); #18528=EDGE_CURVE('',#14926,#14929,#6403,.T.); #18529=EDGE_CURVE('',#14727,#14930,#6404,.T.); #18530=EDGE_CURVE('',#14729,#14931,#519,.T.); #18531=EDGE_CURVE('',#14931,#14932,#6405,.T.); #18532=EDGE_CURVE('',#14932,#14933,#520,.T.); #18533=EDGE_CURVE('',#14930,#14933,#7748,.T.); #18534=EDGE_CURVE('',#14934,#14700,#521,.F.); #18535=EDGE_CURVE('',#14935,#14934,#6406,.T.); #18536=EDGE_CURVE('',#14704,#14935,#522,.F.); #18537=EDGE_CURVE('',#14702,#14936,#6407,.T.); #18538=EDGE_CURVE('',#14936,#14700,#7749,.T.); #18539=EDGE_CURVE('',#14937,#14938,#6408,.T.); #18540=EDGE_CURVE('',#14938,#14701,#523,.T.); #18541=EDGE_CURVE('',#14939,#14701,#7750,.T.); #18542=EDGE_CURVE('',#14703,#14939,#6409,.T.); #18543=EDGE_CURVE('',#14705,#14937,#524,.T.); #18544=EDGE_CURVE('',#14708,#14940,#525,.T.); #18545=EDGE_CURVE('',#14706,#14941,#6410,.T.); #18546=EDGE_CURVE('',#14941,#14942,#7751,.T.); #18547=EDGE_CURVE('',#14943,#14942,#526,.F.); #18548=EDGE_CURVE('',#14940,#14943,#6411,.T.); #18549=EDGE_CURVE('',#14707,#14944,#6412,.T.); #18550=EDGE_CURVE('',#14709,#14945,#527,.T.); #18551=EDGE_CURVE('',#14945,#14946,#6413,.T.); #18552=EDGE_CURVE('',#14946,#14947,#528,.T.); #18553=EDGE_CURVE('',#14944,#14947,#7752,.T.); #18554=EDGE_CURVE('',#14948,#14949,#7753,.T.); #18555=EDGE_CURVE('',#14950,#14948,#6414,.T.); #18556=EDGE_CURVE('',#14951,#14950,#7754,.T.); #18557=EDGE_CURVE('',#14952,#14951,#6415,.T.); #18558=EDGE_CURVE('',#14953,#14952,#7755,.T.); #18559=EDGE_CURVE('',#14953,#14712,#7756,.T.); #18560=EDGE_CURVE('',#14710,#14954,#6416,.T.); #18561=EDGE_CURVE('',#14954,#14955,#7757,.T.); #18562=EDGE_CURVE('',#14955,#14949,#7758,.T.); #18563=EDGE_CURVE('',#14956,#14957,#7759,.T.); #18564=EDGE_CURVE('',#14957,#14958,#6417,.T.); #18565=EDGE_CURVE('',#14958,#14959,#7760,.T.); #18566=EDGE_CURVE('',#14960,#14959,#7761,.T.); #18567=EDGE_CURVE('',#14961,#14960,#7762,.T.); #18568=EDGE_CURVE('',#14711,#14961,#6418,.T.); #18569=EDGE_CURVE('',#14962,#14713,#7763,.T.); #18570=EDGE_CURVE('',#14962,#14963,#7764,.T.); #18571=EDGE_CURVE('',#14963,#14956,#6419,.T.); #18572=EDGE_CURVE('',#14716,#14964,#529,.T.); #18573=EDGE_CURVE('',#14714,#14965,#6420,.T.); #18574=EDGE_CURVE('',#14965,#14966,#7765,.T.); #18575=EDGE_CURVE('',#14967,#14966,#530,.F.); #18576=EDGE_CURVE('',#14964,#14967,#6421,.T.); #18577=EDGE_CURVE('',#14715,#14968,#6422,.T.); #18578=EDGE_CURVE('',#14717,#14969,#531,.T.); #18579=EDGE_CURVE('',#14969,#14970,#6423,.T.); #18580=EDGE_CURVE('',#14970,#14971,#532,.T.); #18581=EDGE_CURVE('',#14968,#14971,#7766,.T.); #18582=EDGE_CURVE('',#14972,#14692,#7767,.T.); #18583=EDGE_CURVE('',#14973,#14972,#6424,.T.); #18584=EDGE_CURVE('',#14974,#14973,#7768,.T.); #18585=EDGE_CURVE('',#14974,#14647,#7769,.T.); #18586=EDGE_CURVE('',#14649,#14692,#7770,.T.); #18587=EDGE_CURVE('',#14975,#14976,#7771,.T.); #18588=EDGE_CURVE('',#14976,#14977,#6425,.T.); #18589=EDGE_CURVE('',#14977,#14693,#7772,.T.); #18590=EDGE_CURVE('',#14648,#14693,#7773,.T.); #18591=EDGE_CURVE('',#14975,#14646,#7774,.T.); #18592=EDGE_CURVE('',#14974,#14975,#7775,.T.); #18593=EDGE_CURVE('',#14644,#14978,#7776,.T.); #18594=EDGE_CURVE('',#14979,#14978,#7777,.T.); #18595=EDGE_CURVE('',#14980,#14979,#6426,.T.); #18596=EDGE_CURVE('',#14981,#14980,#7778,.T.); #18597=EDGE_CURVE('',#14981,#14982,#6427,.T.); #18598=EDGE_CURVE('',#14982,#14630,#7779,.T.); #18599=EDGE_CURVE('',#14645,#14983,#7780,.T.); #18600=EDGE_CURVE('',#14984,#14631,#7781,.T.); #18601=EDGE_CURVE('',#14985,#14984,#6428,.T.); #18602=EDGE_CURVE('',#14985,#14986,#7782,.T.); #18603=EDGE_CURVE('',#14986,#14987,#6429,.T.); #18604=EDGE_CURVE('',#14987,#14983,#7783,.T.); #18605=EDGE_CURVE('',#14988,#14988,#6430,.T.); #18606=EDGE_CURVE('',#14989,#14989,#6431,.T.); #18607=EDGE_CURVE('',#14990,#14990,#6432,.T.); #18608=EDGE_CURVE('',#14991,#14991,#6433,.T.); #18609=EDGE_CURVE('',#14356,#14364,#7784,.T.); #18610=EDGE_CURVE('',#14630,#14623,#7785,.T.); #18611=EDGE_CURVE('',#14978,#14974,#7786,.T.); #18612=EDGE_CURVE('',#14699,#14764,#7787,.T.); #18613=EDGE_CURVE('',#14816,#14768,#7788,.T.); #18614=EDGE_CURVE('',#14807,#14795,#7789,.T.); #18615=EDGE_CURVE('',#14791,#14780,#7790,.T.); #18616=EDGE_CURVE('',#14784,#14776,#7791,.T.); #18617=EDGE_CURVE('',#14903,#14760,#7792,.T.); #18618=EDGE_CURVE('',#14896,#14756,#7793,.T.); #18619=EDGE_CURVE('',#14887,#14870,#7794,.T.); #18620=EDGE_CURVE('',#14874,#14748,#7795,.T.); #18621=EDGE_CURVE('',#14864,#14744,#7796,.T.); #18622=EDGE_CURVE('',#14856,#14740,#7797,.T.); #18623=EDGE_CURVE('',#14848,#14736,#7798,.T.); #18624=EDGE_CURVE('',#14839,#14822,#7799,.T.); #18625=EDGE_CURVE('',#14826,#14728,#7800,.T.); #18626=EDGE_CURVE('',#14928,#14724,#7801,.T.); #18627=EDGE_CURVE('',#14919,#14720,#7802,.T.); #18628=EDGE_CURVE('',#14912,#14716,#7803,.T.); #18629=EDGE_CURVE('',#14966,#14953,#7804,.T.); #18630=EDGE_CURVE('',#14949,#14708,#7805,.T.); #18631=EDGE_CURVE('',#14942,#14704,#7806,.T.); #18632=EDGE_CURVE('',#14631,#14627,#7807,.T.); #18633=EDGE_CURVE('',#14357,#14362,#7808,.T.); #18634=EDGE_CURVE('',#14947,#14705,#7809,.T.); #18635=EDGE_CURVE('',#14959,#14709,#7810,.T.); #18636=EDGE_CURVE('',#14971,#14962,#7811,.T.); #18637=EDGE_CURVE('',#14917,#14717,#7812,.T.); #18638=EDGE_CURVE('',#14924,#14721,#7813,.T.); #18639=EDGE_CURVE('',#14933,#14725,#7814,.T.); #18640=EDGE_CURVE('',#14835,#14729,#7815,.T.); #18641=EDGE_CURVE('',#14844,#14830,#7816,.T.); #18642=EDGE_CURVE('',#14853,#14737,#7817,.T.); #18643=EDGE_CURVE('',#14861,#14741,#7818,.T.); #18644=EDGE_CURVE('',#14869,#14745,#7819,.T.); #18645=EDGE_CURVE('',#14883,#14749,#7820,.T.); #18646=EDGE_CURVE('',#14892,#14878,#7821,.T.); #18647=EDGE_CURVE('',#14901,#14757,#7822,.T.); #18648=EDGE_CURVE('',#14908,#14761,#7823,.T.); #18649=EDGE_CURVE('',#14789,#14777,#7824,.T.); #18650=EDGE_CURVE('',#14801,#14781,#7825,.T.); #18651=EDGE_CURVE('',#14812,#14804,#7826,.T.); #18652=EDGE_CURVE('',#14821,#14769,#7827,.T.); #18653=EDGE_CURVE('',#14698,#14765,#7828,.T.); #18654=EDGE_CURVE('',#14983,#14975,#7829,.T.); #18655=EDGE_CURVE('',#14816,#14821,#7830,.T.); #18656=EDGE_CURVE('',#14807,#14812,#7831,.T.); #18657=EDGE_CURVE('',#14797,#14802,#7832,.T.); #18658=EDGE_CURVE('',#14784,#14789,#7833,.T.); #18659=EDGE_CURVE('',#14903,#14908,#7834,.T.); #18660=EDGE_CURVE('',#14896,#14901,#7835,.T.); #18661=EDGE_CURVE('',#14887,#14892,#7836,.T.); #18662=EDGE_CURVE('',#14873,#14884,#7837,.T.); #18663=EDGE_CURVE('',#14864,#14869,#7838,.T.); #18664=EDGE_CURVE('',#14856,#14861,#7839,.T.); #18665=EDGE_CURVE('',#14848,#14853,#7840,.T.); #18666=EDGE_CURVE('',#14839,#14844,#7841,.T.); #18667=EDGE_CURVE('',#14825,#14836,#7842,.T.); #18668=EDGE_CURVE('',#14928,#14933,#7843,.T.); #18669=EDGE_CURVE('',#14919,#14924,#7844,.T.); #18670=EDGE_CURVE('',#14912,#14917,#7845,.T.); #18671=EDGE_CURVE('',#14966,#14971,#7846,.T.); #18672=EDGE_CURVE('',#14955,#14960,#7847,.T.); #18673=EDGE_CURVE('',#14942,#14947,#7848,.T.); #18674=EDGE_CURVE('',#14939,#14936,#7849,.T.); #18675=EDGE_CURVE('',#14944,#14941,#7850,.T.); #18676=EDGE_CURVE('',#14961,#14954,#7851,.T.); #18677=EDGE_CURVE('',#14968,#14965,#7852,.T.); #18678=EDGE_CURVE('',#14914,#14911,#7853,.T.); #18679=EDGE_CURVE('',#14925,#14921,#7854,.T.); #18680=EDGE_CURVE('',#14930,#14927,#7855,.T.); #18681=EDGE_CURVE('',#14837,#14824,#7856,.T.); #18682=EDGE_CURVE('',#14845,#14841,#7857,.T.); #18683=EDGE_CURVE('',#14850,#14847,#7858,.T.); #18684=EDGE_CURVE('',#14858,#14855,#7859,.T.); #18685=EDGE_CURVE('',#14866,#14863,#7860,.T.); #18686=EDGE_CURVE('',#14885,#14872,#7861,.T.); #18687=EDGE_CURVE('',#14893,#14889,#7862,.T.); #18688=EDGE_CURVE('',#14898,#14895,#7863,.T.); #18689=EDGE_CURVE('',#14909,#14905,#7864,.T.); #18690=EDGE_CURVE('',#14786,#14783,#7865,.T.); #18691=EDGE_CURVE('',#14803,#14796,#7866,.T.); #18692=EDGE_CURVE('',#14813,#14809,#7867,.T.); #18693=EDGE_CURVE('',#14818,#14815,#7868,.T.); #18694=EDGE_CURVE('',#14623,#14627,#7869,.T.); #18695=EDGE_CURVE('',#14978,#14983,#7870,.T.); #18696=EDGE_CURVE('',#14992,#14993,#7871,.T.); #18697=EDGE_CURVE('',#14994,#14992,#6434,.T.); #18698=EDGE_CURVE('',#14995,#14994,#7872,.T.); #18699=EDGE_CURVE('',#14996,#14995,#6435,.T.); #18700=EDGE_CURVE('',#14997,#14996,#7873,.T.); #18701=EDGE_CURVE('',#14998,#14997,#6436,.T.); #18702=EDGE_CURVE('',#14999,#14998,#7874,.T.); #18703=EDGE_CURVE('',#15000,#14999,#6437,.T.); #18704=EDGE_CURVE('',#15001,#15000,#7875,.T.); #18705=EDGE_CURVE('',#15002,#15001,#6438,.T.); #18706=EDGE_CURVE('',#15003,#15002,#7876,.T.); #18707=EDGE_CURVE('',#14993,#15003,#6439,.T.); #18708=EDGE_CURVE('',#15004,#15005,#7877,.T.); #18709=EDGE_CURVE('',#15005,#15006,#7878,.T.); #18710=EDGE_CURVE('',#15007,#15006,#7879,.T.); #18711=EDGE_CURVE('',#15004,#15007,#7880,.T.); #18712=EDGE_CURVE('',#15008,#15005,#6440,.T.); #18713=EDGE_CURVE('',#15009,#15004,#6441,.T.); #18714=EDGE_CURVE('',#15009,#15008,#7881,.T.); #18715=EDGE_CURVE('',#15010,#15011,#7882,.T.); #18716=EDGE_CURVE('',#15011,#15008,#7883,.T.); #18717=EDGE_CURVE('',#15010,#15009,#7884,.T.); #18718=EDGE_CURVE('',#15012,#15011,#6442,.T.); #18719=EDGE_CURVE('',#15013,#15010,#6443,.T.); #18720=EDGE_CURVE('',#15013,#15012,#7885,.T.); #18721=EDGE_CURVE('',#15014,#15015,#7886,.T.); #18722=EDGE_CURVE('',#15015,#15012,#7887,.T.); #18723=EDGE_CURVE('',#15014,#15013,#7888,.T.); #18724=EDGE_CURVE('',#15016,#15015,#6444,.T.); #18725=EDGE_CURVE('',#15017,#15014,#6445,.T.); #18726=EDGE_CURVE('',#15017,#15016,#7889,.T.); #18727=EDGE_CURVE('',#15018,#15019,#7890,.T.); #18728=EDGE_CURVE('',#15019,#15016,#7891,.T.); #18729=EDGE_CURVE('',#15018,#15017,#7892,.T.); #18730=EDGE_CURVE('',#15020,#15019,#6446,.T.); #18731=EDGE_CURVE('',#15021,#15018,#6447,.T.); #18732=EDGE_CURVE('',#15021,#15020,#7893,.T.); #18733=EDGE_CURVE('',#15022,#15023,#7894,.T.); #18734=EDGE_CURVE('',#15023,#15020,#7895,.T.); #18735=EDGE_CURVE('',#15022,#15021,#7896,.T.); #18736=EDGE_CURVE('',#15024,#15023,#6448,.T.); #18737=EDGE_CURVE('',#15025,#15022,#6449,.T.); #18738=EDGE_CURVE('',#15025,#15024,#7897,.T.); #18739=EDGE_CURVE('',#15026,#15027,#7898,.T.); #18740=EDGE_CURVE('',#15027,#15024,#7899,.T.); #18741=EDGE_CURVE('',#15026,#15025,#7900,.T.); #18742=EDGE_CURVE('',#15006,#15027,#6450,.T.); #18743=EDGE_CURVE('',#15007,#15026,#6451,.T.); #18744=EDGE_CURVE('',#15028,#15029,#7901,.T.); #18745=EDGE_CURVE('',#15030,#15028,#6452,.T.); #18746=EDGE_CURVE('',#15031,#15030,#7902,.T.); #18747=EDGE_CURVE('',#15032,#15031,#6453,.T.); #18748=EDGE_CURVE('',#15033,#15032,#7903,.T.); #18749=EDGE_CURVE('',#15034,#15033,#6454,.T.); #18750=EDGE_CURVE('',#15035,#15034,#7904,.T.); #18751=EDGE_CURVE('',#15036,#15035,#6455,.T.); #18752=EDGE_CURVE('',#15037,#15036,#7905,.T.); #18753=EDGE_CURVE('',#15038,#15037,#6456,.T.); #18754=EDGE_CURVE('',#15039,#15038,#7906,.T.); #18755=EDGE_CURVE('',#15029,#15039,#6457,.T.); #18756=EDGE_CURVE('',#15030,#14992,#7907,.T.); #18757=EDGE_CURVE('',#15031,#14993,#7908,.T.); #18758=EDGE_CURVE('',#15032,#15003,#7909,.T.); #18759=EDGE_CURVE('',#15033,#15002,#7910,.T.); #18760=EDGE_CURVE('',#15034,#15001,#7911,.T.); #18761=EDGE_CURVE('',#15035,#15000,#7912,.T.); #18762=EDGE_CURVE('',#15036,#14999,#7913,.T.); #18763=EDGE_CURVE('',#15037,#14998,#7914,.T.); #18764=EDGE_CURVE('',#15038,#14997,#7915,.T.); #18765=EDGE_CURVE('',#15039,#14996,#7916,.T.); #18766=EDGE_CURVE('',#15029,#14995,#7917,.T.); #18767=EDGE_CURVE('',#15028,#14994,#7918,.T.); #18768=EDGE_CURVE('',#15040,#15041,#7919,.T.); #18769=EDGE_CURVE('',#15042,#15040,#7920,.T.); #18770=EDGE_CURVE('',#15043,#15042,#6458,.T.); #18771=EDGE_CURVE('',#15044,#15043,#7921,.T.); #18772=EDGE_CURVE('',#15045,#15044,#7922,.T.); #18773=EDGE_CURVE('',#15046,#15045,#7923,.T.); #18774=EDGE_CURVE('',#15047,#15046,#6459,.T.); #18775=EDGE_CURVE('',#15041,#15047,#7924,.T.); #18776=EDGE_CURVE('',#15048,#15049,#7925,.T.); #18777=EDGE_CURVE('',#15049,#15050,#7926,.T.); #18778=EDGE_CURVE('',#15050,#15051,#7927,.T.); #18779=EDGE_CURVE('',#15051,#15052,#6460,.T.); #18780=EDGE_CURVE('',#15052,#15053,#7928,.T.); #18781=EDGE_CURVE('',#15053,#15054,#7929,.T.); #18782=EDGE_CURVE('',#15054,#15055,#7930,.T.); #18783=EDGE_CURVE('',#15055,#15048,#6461,.T.); #18784=EDGE_CURVE('',#15049,#15040,#7931,.T.); #18785=EDGE_CURVE('',#15048,#15042,#7932,.T.); #18786=EDGE_CURVE('',#15055,#15043,#7933,.T.); #18787=EDGE_CURVE('',#15054,#15044,#7934,.T.); #18788=EDGE_CURVE('',#15053,#15045,#7935,.T.); #18789=EDGE_CURVE('',#15052,#15046,#7936,.T.); #18790=EDGE_CURVE('',#15051,#15047,#7937,.T.); #18791=EDGE_CURVE('',#15050,#15041,#7938,.T.); #18792=EDGE_CURVE('',#15056,#15057,#7939,.T.); #18793=EDGE_CURVE('',#15057,#15058,#7940,.T.); #18794=EDGE_CURVE('',#15058,#15059,#6462,.T.); #18795=EDGE_CURVE('',#15059,#15060,#7941,.T.); #18796=EDGE_CURVE('',#15060,#15061,#7942,.T.); #18797=EDGE_CURVE('',#15061,#15062,#7943,.T.); #18798=EDGE_CURVE('',#15062,#15063,#6463,.T.); #18799=EDGE_CURVE('',#15063,#15056,#7944,.T.); #18800=EDGE_CURVE('',#15064,#15065,#7945,.T.); #18801=EDGE_CURVE('',#15066,#15064,#7946,.T.); #18802=EDGE_CURVE('',#15067,#15066,#7947,.T.); #18803=EDGE_CURVE('',#15068,#15067,#6464,.T.); #18804=EDGE_CURVE('',#15069,#15068,#7948,.T.); #18805=EDGE_CURVE('',#15070,#15069,#7949,.T.); #18806=EDGE_CURVE('',#15071,#15070,#7950,.T.); #18807=EDGE_CURVE('',#15065,#15071,#6465,.T.); #18808=EDGE_CURVE('',#15067,#15063,#7951,.T.); #18809=EDGE_CURVE('',#15066,#15056,#7952,.T.); #18810=EDGE_CURVE('',#15068,#15062,#7953,.T.); #18811=EDGE_CURVE('',#15069,#15061,#7954,.T.); #18812=EDGE_CURVE('',#15070,#15060,#7955,.T.); #18813=EDGE_CURVE('',#15071,#15059,#7956,.T.); #18814=EDGE_CURVE('',#15065,#15058,#7957,.T.); #18815=EDGE_CURVE('',#15064,#15057,#7958,.T.); #18816=EDGE_CURVE('',#15072,#15073,#7959,.T.); #18817=EDGE_CURVE('',#15073,#15074,#7960,.T.); #18818=EDGE_CURVE('',#15074,#15075,#6466,.T.); #18819=EDGE_CURVE('',#15075,#15076,#7961,.T.); #18820=EDGE_CURVE('',#15076,#15077,#7962,.T.); #18821=EDGE_CURVE('',#15077,#15078,#7963,.T.); #18822=EDGE_CURVE('',#15078,#15079,#6467,.T.); #18823=EDGE_CURVE('',#15079,#15072,#7964,.T.); #18824=EDGE_CURVE('',#15080,#15081,#7965,.T.); #18825=EDGE_CURVE('',#15082,#15080,#7966,.T.); #18826=EDGE_CURVE('',#15083,#15082,#7967,.T.); #18827=EDGE_CURVE('',#15084,#15083,#6468,.T.); #18828=EDGE_CURVE('',#15085,#15084,#7968,.T.); #18829=EDGE_CURVE('',#15086,#15085,#7969,.T.); #18830=EDGE_CURVE('',#15087,#15086,#7970,.T.); #18831=EDGE_CURVE('',#15081,#15087,#6469,.T.); #18832=EDGE_CURVE('',#15080,#15073,#7971,.T.); #18833=EDGE_CURVE('',#15081,#15074,#7972,.T.); #18834=EDGE_CURVE('',#15087,#15075,#7973,.T.); #18835=EDGE_CURVE('',#15086,#15076,#7974,.T.); #18836=EDGE_CURVE('',#15085,#15077,#7975,.T.); #18837=EDGE_CURVE('',#15084,#15078,#7976,.T.); #18838=EDGE_CURVE('',#15083,#15079,#7977,.T.); #18839=EDGE_CURVE('',#15082,#15072,#7978,.T.); #18840=EDGE_CURVE('',#15088,#15089,#7979,.T.); #18841=EDGE_CURVE('',#15090,#15088,#7980,.T.); #18842=EDGE_CURVE('',#15091,#15090,#6470,.T.); #18843=EDGE_CURVE('',#15092,#15091,#7981,.T.); #18844=EDGE_CURVE('',#15093,#15092,#7982,.T.); #18845=EDGE_CURVE('',#15094,#15093,#7983,.T.); #18846=EDGE_CURVE('',#15095,#15094,#6471,.T.); #18847=EDGE_CURVE('',#15089,#15095,#7984,.T.); #18848=EDGE_CURVE('',#15096,#15097,#7985,.T.); #18849=EDGE_CURVE('',#15097,#15098,#7986,.T.); #18850=EDGE_CURVE('',#15098,#15099,#7987,.T.); #18851=EDGE_CURVE('',#15099,#15100,#6472,.T.); #18852=EDGE_CURVE('',#15100,#15101,#7988,.T.); #18853=EDGE_CURVE('',#15101,#15102,#7989,.T.); #18854=EDGE_CURVE('',#15102,#15103,#7990,.T.); #18855=EDGE_CURVE('',#15103,#15096,#6473,.T.); #18856=EDGE_CURVE('',#15099,#15095,#7991,.T.); #18857=EDGE_CURVE('',#15098,#15089,#7992,.T.); #18858=EDGE_CURVE('',#15100,#15094,#7993,.T.); #18859=EDGE_CURVE('',#15101,#15093,#7994,.T.); #18860=EDGE_CURVE('',#15102,#15092,#7995,.T.); #18861=EDGE_CURVE('',#15103,#15091,#7996,.T.); #18862=EDGE_CURVE('',#15096,#15090,#7997,.T.); #18863=EDGE_CURVE('',#15097,#15088,#7998,.T.); #18864=EDGE_CURVE('',#15104,#15105,#6474,.T.); #18865=EDGE_CURVE('',#15106,#15105,#7999,.T.); #18866=EDGE_CURVE('',#15106,#15107,#6475,.T.); #18867=EDGE_CURVE('',#15104,#15107,#8000,.T.); #18868=EDGE_CURVE('',#15108,#15109,#6476,.T.); #18869=EDGE_CURVE('',#15107,#15109,#6477,.T.); #18870=EDGE_CURVE('',#15108,#15106,#6478,.T.); #18871=EDGE_CURVE('',#15110,#15111,#6479,.T.); #18872=EDGE_CURVE('',#15105,#15111,#6480,.T.); #18873=EDGE_CURVE('',#15110,#15104,#6481,.T.); #18874=EDGE_CURVE('',#15111,#15108,#8001,.T.); #18875=EDGE_CURVE('',#15109,#15110,#8002,.T.); #18876=EDGE_CURVE('',#15112,#15113,#8003,.T.); #18877=EDGE_CURVE('',#15106,#15113,#8004,.T.); #18878=EDGE_CURVE('',#15105,#15112,#8005,.T.); #18879=EDGE_CURVE('',#15111,#15114,#8006,.T.); #18880=EDGE_CURVE('',#15114,#15112,#6482,.T.); #18881=EDGE_CURVE('',#15115,#15114,#8007,.T.); #18882=EDGE_CURVE('',#15108,#15115,#8008,.T.); #18883=EDGE_CURVE('',#15113,#15115,#6483,.T.); #18884=EDGE_CURVE('',#15116,#15117,#8009,.T.); #18885=EDGE_CURVE('',#15118,#15116,#8010,.T.); #18886=EDGE_CURVE('',#15119,#15118,#8011,.T.); #18887=EDGE_CURVE('',#15117,#15119,#8012,.T.); #18888=EDGE_CURVE('',#15120,#15118,#8013,.T.); #18889=EDGE_CURVE('',#15121,#15116,#8014,.T.); #18890=EDGE_CURVE('',#15120,#15121,#8015,.T.); #18891=EDGE_CURVE('',#15122,#15119,#8016,.T.); #18892=EDGE_CURVE('',#15122,#15120,#8017,.T.); #18893=EDGE_CURVE('',#15123,#15117,#8018,.T.); #18894=EDGE_CURVE('',#15123,#15122,#8019,.T.); #18895=EDGE_CURVE('',#15121,#15123,#8020,.T.); #18896=EDGE_CURVE('',#15124,#15125,#8021,.T.); #18897=EDGE_CURVE('',#15126,#15124,#8022,.T.); #18898=EDGE_CURVE('',#15127,#15126,#8023,.T.); #18899=EDGE_CURVE('',#15125,#15127,#8024,.T.); #18900=EDGE_CURVE('',#15128,#15129,#8025,.T.); #18901=EDGE_CURVE('',#15129,#15130,#8026,.T.); #18902=EDGE_CURVE('',#15130,#15131,#8027,.T.); #18903=EDGE_CURVE('',#15131,#15128,#8028,.T.); #18904=EDGE_CURVE('',#15129,#15124,#8029,.T.); #18905=EDGE_CURVE('',#15128,#15126,#8030,.T.); #18906=EDGE_CURVE('',#15131,#15127,#8031,.T.); #18907=EDGE_CURVE('',#15130,#15125,#8032,.T.); #18908=EDGE_CURVE('',#15132,#15133,#8033,.T.); #18909=EDGE_CURVE('',#15133,#15134,#8034,.T.); #18910=EDGE_CURVE('',#15134,#15135,#8035,.T.); #18911=EDGE_CURVE('',#15135,#15132,#8036,.T.); #18912=EDGE_CURVE('',#15135,#15136,#8037,.T.); #18913=EDGE_CURVE('',#15136,#15137,#8038,.T.); #18914=EDGE_CURVE('',#15132,#15137,#8039,.T.); #18915=EDGE_CURVE('',#15133,#15138,#8040,.T.); #18916=EDGE_CURVE('',#15138,#15139,#8041,.T.); #18917=EDGE_CURVE('',#15134,#15139,#8042,.T.); #18918=EDGE_CURVE('',#15140,#15141,#8043,.T.); #18919=EDGE_CURVE('',#15142,#15140,#8044,.T.); #18920=EDGE_CURVE('',#15143,#15142,#8045,.T.); #18921=EDGE_CURVE('',#15141,#15143,#8046,.T.); #18922=EDGE_CURVE('',#15144,#15142,#8047,.T.); #18923=EDGE_CURVE('',#15145,#15140,#8048,.T.); #18924=EDGE_CURVE('',#15138,#15145,#8049,.T.); #18925=EDGE_CURVE('',#15144,#15137,#8050,.T.); #18926=EDGE_CURVE('',#15146,#15143,#8051,.T.); #18927=EDGE_CURVE('',#15146,#15144,#8052,.T.); #18928=EDGE_CURVE('',#15147,#15141,#8053,.T.); #18929=EDGE_CURVE('',#15136,#15146,#8054,.T.); #18930=EDGE_CURVE('',#15147,#15139,#8055,.T.); #18931=EDGE_CURVE('',#15145,#15147,#8056,.T.); #18932=EDGE_CURVE('',#15148,#15149,#8057,.T.); #18933=EDGE_CURVE('',#15150,#15148,#8058,.T.); #18934=EDGE_CURVE('',#15150,#15151,#8059,.T.); #18935=EDGE_CURVE('',#15151,#15149,#8060,.T.); #18936=EDGE_CURVE('',#15152,#15153,#8061,.T.); #18937=EDGE_CURVE('',#15149,#15152,#8062,.T.); #18938=EDGE_CURVE('',#15151,#15153,#8063,.T.); #18939=EDGE_CURVE('',#15154,#15155,#8064,.T.); #18940=EDGE_CURVE('',#15154,#15150,#8065,.T.); #18941=EDGE_CURVE('',#15155,#15148,#8066,.T.); #18942=EDGE_CURVE('',#15153,#15154,#8067,.T.); #18943=EDGE_CURVE('',#15156,#15157,#8068,.T.); #18944=EDGE_CURVE('',#15158,#15156,#8069,.T.); #18945=EDGE_CURVE('',#15159,#15158,#8070,.T.); #18946=EDGE_CURVE('',#15159,#15157,#8071,.T.); #18947=EDGE_CURVE('',#15160,#15161,#8072,.T.); #18948=EDGE_CURVE('',#15160,#15162,#8073,.T.); #18949=EDGE_CURVE('',#15162,#15163,#8074,.T.); #18950=EDGE_CURVE('',#15161,#15163,#8075,.T.); #18951=EDGE_CURVE('',#15157,#15160,#8076,.T.); #18952=EDGE_CURVE('',#15162,#15159,#8077,.T.); #18953=EDGE_CURVE('',#15163,#15158,#8078,.T.); #18954=EDGE_CURVE('',#15161,#15164,#8079,.T.); #18955=EDGE_CURVE('',#15165,#15156,#8080,.T.); #18956=EDGE_CURVE('',#15166,#15165,#8081,.T.); #18957=EDGE_CURVE('',#15155,#15166,#8082,.T.); #18958=EDGE_CURVE('',#15167,#15152,#8083,.T.); #18959=EDGE_CURVE('',#15164,#15167,#8084,.T.); #18960=EDGE_CURVE('',#15168,#15169,#8085,.T.); #18961=EDGE_CURVE('',#15169,#15170,#8086,.T.); #18962=EDGE_CURVE('',#15170,#15171,#8087,.T.); #18963=EDGE_CURVE('',#15171,#15168,#8088,.T.); #18964=EDGE_CURVE('',#15169,#15167,#8089,.T.); #18965=EDGE_CURVE('',#15168,#15164,#8090,.T.); #18966=EDGE_CURVE('',#15171,#15165,#8091,.T.); #18967=EDGE_CURVE('',#15170,#15166,#8092,.T.); #18968=EDGE_CURVE('',#15172,#15173,#8093,.T.); #18969=EDGE_CURVE('',#15174,#15172,#8094,.T.); #18970=EDGE_CURVE('',#15175,#15174,#8095,.T.); #18971=EDGE_CURVE('',#15173,#15175,#8096,.T.); #18972=EDGE_CURVE('',#15176,#15177,#8097,.T.); #18973=EDGE_CURVE('',#15177,#15178,#8098,.T.); #18974=EDGE_CURVE('',#15178,#15179,#8099,.T.); #18975=EDGE_CURVE('',#15179,#15176,#8100,.T.); #18976=EDGE_CURVE('',#15177,#15172,#8101,.T.); #18977=EDGE_CURVE('',#15176,#15174,#8102,.T.); #18978=EDGE_CURVE('',#15179,#15175,#8103,.T.); #18979=EDGE_CURVE('',#15178,#15173,#8104,.T.); #18980=EDGE_CURVE('',#15180,#15181,#8105,.T.); #18981=EDGE_CURVE('',#15182,#15180,#8106,.T.); #18982=EDGE_CURVE('',#15183,#15182,#8107,.T.); #18983=EDGE_CURVE('',#15181,#15183,#8108,.T.); #18984=EDGE_CURVE('',#15184,#15185,#8109,.T.); #18985=EDGE_CURVE('',#15185,#15186,#8110,.T.); #18986=EDGE_CURVE('',#15186,#15187,#8111,.T.); #18987=EDGE_CURVE('',#15187,#15184,#8112,.T.); #18988=EDGE_CURVE('',#15185,#15180,#8113,.T.); #18989=EDGE_CURVE('',#15184,#15182,#8114,.T.); #18990=EDGE_CURVE('',#15187,#15183,#8115,.T.); #18991=EDGE_CURVE('',#15186,#15181,#8116,.T.); #18992=EDGE_CURVE('',#15188,#15189,#8117,.T.); #18993=EDGE_CURVE('',#15190,#15188,#8118,.T.); #18994=EDGE_CURVE('',#15191,#15190,#8119,.T.); #18995=EDGE_CURVE('',#15189,#15191,#8120,.T.); #18996=EDGE_CURVE('',#15192,#15193,#8121,.T.); #18997=EDGE_CURVE('',#15193,#15194,#8122,.T.); #18998=EDGE_CURVE('',#15194,#15195,#8123,.T.); #18999=EDGE_CURVE('',#15195,#15192,#8124,.T.); #19000=EDGE_CURVE('',#15193,#15188,#8125,.T.); #19001=EDGE_CURVE('',#15192,#15190,#8126,.T.); #19002=EDGE_CURVE('',#15195,#15191,#8127,.T.); #19003=EDGE_CURVE('',#15194,#15189,#8128,.T.); #19004=EDGE_CURVE('',#15196,#15197,#8129,.T.); #19005=EDGE_CURVE('',#15198,#15196,#8130,.T.); #19006=EDGE_CURVE('',#15199,#15198,#8131,.T.); #19007=EDGE_CURVE('',#15197,#15199,#8132,.T.); #19008=EDGE_CURVE('',#15200,#15201,#8133,.T.); #19009=EDGE_CURVE('',#15201,#15202,#8134,.T.); #19010=EDGE_CURVE('',#15202,#15203,#8135,.T.); #19011=EDGE_CURVE('',#15203,#15200,#8136,.T.); #19012=EDGE_CURVE('',#15201,#15196,#8137,.T.); #19013=EDGE_CURVE('',#15200,#15198,#8138,.T.); #19014=EDGE_CURVE('',#15203,#15199,#8139,.T.); #19015=EDGE_CURVE('',#15202,#15197,#8140,.T.); #19016=EDGE_CURVE('',#15204,#15205,#8141,.T.); #19017=EDGE_CURVE('',#15206,#15204,#8142,.T.); #19018=EDGE_CURVE('',#15207,#15206,#8143,.T.); #19019=EDGE_CURVE('',#15205,#15207,#8144,.T.); #19020=EDGE_CURVE('',#15208,#15209,#8145,.T.); #19021=EDGE_CURVE('',#15209,#15210,#8146,.T.); #19022=EDGE_CURVE('',#15210,#15211,#8147,.T.); #19023=EDGE_CURVE('',#15211,#15208,#8148,.T.); #19024=EDGE_CURVE('',#15209,#15204,#8149,.T.); #19025=EDGE_CURVE('',#15208,#15206,#8150,.T.); #19026=EDGE_CURVE('',#15211,#15207,#8151,.T.); #19027=EDGE_CURVE('',#15210,#15205,#8152,.T.); #19028=EDGE_CURVE('',#15212,#15213,#8153,.T.); #19029=EDGE_CURVE('',#15214,#15212,#8154,.T.); #19030=EDGE_CURVE('',#15215,#15214,#8155,.T.); #19031=EDGE_CURVE('',#15213,#15215,#8156,.T.); #19032=EDGE_CURVE('',#15216,#15217,#8157,.T.); #19033=EDGE_CURVE('',#15217,#15218,#8158,.T.); #19034=EDGE_CURVE('',#15218,#15219,#8159,.T.); #19035=EDGE_CURVE('',#15219,#15216,#8160,.T.); #19036=EDGE_CURVE('',#15217,#15212,#8161,.T.); #19037=EDGE_CURVE('',#15216,#15214,#8162,.T.); #19038=EDGE_CURVE('',#15219,#15215,#8163,.T.); #19039=EDGE_CURVE('',#15218,#15213,#8164,.T.); #19040=EDGE_CURVE('',#15220,#15221,#8165,.T.); #19041=EDGE_CURVE('',#15222,#15220,#8166,.T.); #19042=EDGE_CURVE('',#15223,#15222,#8167,.T.); #19043=EDGE_CURVE('',#15221,#15223,#8168,.T.); #19044=EDGE_CURVE('',#15224,#15225,#8169,.T.); #19045=EDGE_CURVE('',#15225,#15226,#8170,.T.); #19046=EDGE_CURVE('',#15226,#15227,#8171,.T.); #19047=EDGE_CURVE('',#15227,#15224,#8172,.T.); #19048=EDGE_CURVE('',#15225,#15220,#8173,.T.); #19049=EDGE_CURVE('',#15224,#15222,#8174,.T.); #19050=EDGE_CURVE('',#15227,#15223,#8175,.T.); #19051=EDGE_CURVE('',#15226,#15221,#8176,.T.); #19052=EDGE_CURVE('',#15228,#15229,#8177,.T.); #19053=EDGE_CURVE('',#15230,#15228,#8178,.T.); #19054=EDGE_CURVE('',#15231,#15230,#8179,.T.); #19055=EDGE_CURVE('',#15232,#15231,#8180,.T.); #19056=EDGE_CURVE('',#15232,#15233,#8181,.T.); #19057=EDGE_CURVE('',#15234,#15233,#8182,.T.); #19058=EDGE_CURVE('',#15235,#15234,#8183,.T.); #19059=EDGE_CURVE('',#15229,#15235,#8184,.T.); #19060=EDGE_CURVE('',#15236,#15237,#8185,.T.); #19061=EDGE_CURVE('',#15238,#15237,#8186,.T.); #19062=EDGE_CURVE('',#15239,#15238,#8187,.T.); #19063=EDGE_CURVE('',#15239,#15240,#8188,.T.); #19064=EDGE_CURVE('',#15240,#15233,#8189,.T.); #19065=EDGE_CURVE('',#15241,#15232,#8190,.T.); #19066=EDGE_CURVE('',#15241,#15242,#8191,.T.); #19067=EDGE_CURVE('',#15228,#15242,#8192,.T.); #19068=EDGE_CURVE('',#15243,#15229,#8193,.T.); #19069=EDGE_CURVE('',#15236,#15243,#8194,.T.); #19070=EDGE_CURVE('',#15244,#15245,#8195,.T.); #19071=EDGE_CURVE('',#15246,#15244,#8196,.T.); #19072=EDGE_CURVE('',#15247,#15246,#8197,.T.); #19073=EDGE_CURVE('',#15245,#15247,#8198,.T.); #19074=EDGE_CURVE('',#15248,#15249,#8199,.T.); #19075=EDGE_CURVE('',#15250,#15248,#8200,.T.); #19076=EDGE_CURVE('',#15251,#15250,#8201,.T.); #19077=EDGE_CURVE('',#15249,#15251,#8202,.T.); #19078=EDGE_CURVE('',#15249,#15252,#8203,.T.); #19079=EDGE_CURVE('',#15251,#15253,#8204,.T.); #19080=EDGE_CURVE('',#15252,#15253,#8205,.T.); #19081=EDGE_CURVE('',#15254,#15255,#8206,.T.); #19082=EDGE_CURVE('',#15252,#15254,#8207,.T.); #19083=EDGE_CURVE('',#15255,#15253,#8208,.T.); #19084=EDGE_CURVE('',#15250,#15256,#8209,.T.); #19085=EDGE_CURVE('',#15255,#15256,#8210,.T.); #19086=EDGE_CURVE('',#15256,#15257,#8211,.T.); #19087=EDGE_CURVE('',#15257,#15254,#8212,.T.); #19088=EDGE_CURVE('',#15258,#15259,#8213,.T.); #19089=EDGE_CURVE('',#15259,#15260,#8214,.T.); #19090=EDGE_CURVE('',#15260,#15261,#8215,.T.); #19091=EDGE_CURVE('',#15261,#15258,#8216,.T.); #19092=EDGE_CURVE('',#15248,#15257,#8217,.T.); #19093=EDGE_CURVE('',#15262,#15261,#8218,.T.); #19094=EDGE_CURVE('',#15262,#15263,#8219,.T.); #19095=EDGE_CURVE('',#15258,#15263,#8220,.T.); #19096=EDGE_CURVE('',#15245,#15263,#8221,.T.); #19097=EDGE_CURVE('',#15247,#15259,#8222,.T.); #19098=EDGE_CURVE('',#15246,#15260,#8223,.T.); #19099=EDGE_CURVE('',#15244,#15262,#8224,.T.); #19100=EDGE_CURVE('',#15264,#15265,#8225,.T.); #19101=EDGE_CURVE('',#15236,#15264,#8226,.T.); #19102=EDGE_CURVE('',#15265,#15243,#8227,.T.); #19103=EDGE_CURVE('',#15266,#15267,#8228,.T.); #19104=EDGE_CURVE('',#15268,#15267,#8229,.T.); #19105=EDGE_CURVE('',#15269,#15268,#8230,.T.); #19106=EDGE_CURVE('',#15269,#15270,#8231,.T.); #19107=EDGE_CURVE('',#15270,#15265,#8232,.T.); #19108=EDGE_CURVE('',#15235,#15271,#8233,.T.); #19109=EDGE_CURVE('',#15272,#15271,#8234,.T.); #19110=EDGE_CURVE('',#15272,#15273,#8235,.T.); #19111=EDGE_CURVE('',#15274,#15273,#8236,.T.); #19112=EDGE_CURVE('',#15275,#15274,#8237,.T.); #19113=EDGE_CURVE('',#15275,#15276,#8238,.T.); #19114=EDGE_CURVE('',#15276,#15277,#8239,.T.); #19115=EDGE_CURVE('',#15278,#15277,#8240,.T.); #19116=EDGE_CURVE('',#15279,#15278,#8241,.T.); #19117=EDGE_CURVE('',#15280,#15279,#8242,.T.); #19118=EDGE_CURVE('',#15280,#15266,#6484,.T.); #19119=EDGE_CURVE('',#15281,#15282,#6485,.T.); #19120=EDGE_CURVE('',#15283,#15282,#8243,.T.); #19121=EDGE_CURVE('',#15283,#15284,#6486,.T.); #19122=EDGE_CURVE('',#15285,#15284,#8244,.T.); #19123=EDGE_CURVE('',#15285,#15286,#6487,.T.); #19124=EDGE_CURVE('',#15286,#15287,#8245,.T.); #19125=EDGE_CURVE('',#15287,#15288,#6488,.T.); #19126=EDGE_CURVE('',#15289,#15288,#8246,.T.); #19127=EDGE_CURVE('',#15289,#15290,#6489,.T.); #19128=EDGE_CURVE('',#15291,#15290,#8247,.T.); #19129=EDGE_CURVE('',#15291,#15292,#6490,.T.); #19130=EDGE_CURVE('',#15281,#15292,#8248,.T.); #19131=EDGE_CURVE('',#15293,#15294,#8249,.T.); #19132=EDGE_CURVE('',#15294,#15295,#8250,.T.); #19133=EDGE_CURVE('',#15295,#15296,#8251,.T.); #19134=EDGE_CURVE('',#15296,#15293,#8252,.T.); #19135=EDGE_CURVE('',#15297,#15296,#8253,.T.); #19136=EDGE_CURVE('',#15297,#15298,#8254,.T.); #19137=EDGE_CURVE('',#15298,#15293,#8255,.T.); #19138=EDGE_CURVE('',#15298,#15299,#8256,.T.); #19139=EDGE_CURVE('',#15299,#15294,#8257,.T.); #19140=EDGE_CURVE('',#15299,#15300,#8258,.T.); #19141=EDGE_CURVE('',#15300,#15295,#8259,.T.); #19142=EDGE_CURVE('',#15300,#15297,#8260,.T.); #19143=EDGE_CURVE('',#15301,#15302,#8261,.T.); #19144=EDGE_CURVE('',#15301,#15303,#8262,.T.); #19145=EDGE_CURVE('',#15303,#15304,#8263,.T.); #19146=EDGE_CURVE('',#15237,#15304,#8264,.T.); #19147=EDGE_CURVE('',#15305,#15264,#8265,.T.); #19148=EDGE_CURVE('',#15306,#15305,#8266,.T.); #19149=EDGE_CURVE('',#15307,#15306,#8267,.T.); #19150=EDGE_CURVE('',#15302,#15307,#8268,.T.); #19151=EDGE_CURVE('',#15308,#15309,#8269,.T.); #19152=EDGE_CURVE('',#15310,#15309,#8270,.T.); #19153=EDGE_CURVE('',#15311,#15310,#8271,.T.); #19154=EDGE_CURVE('',#15302,#15311,#8272,.T.); #19155=EDGE_CURVE('',#15307,#15308,#8273,.T.); #19156=EDGE_CURVE('',#15309,#15269,#8274,.T.); #19157=EDGE_CURVE('',#15308,#15312,#8275,.T.); #19158=EDGE_CURVE('',#15312,#15269,#8276,.T.); #19159=EDGE_CURVE('',#15313,#15310,#8277,.T.); #19160=EDGE_CURVE('',#15314,#15268,#8278,.T.); #19161=EDGE_CURVE('',#15315,#15314,#8279,.T.); #19162=EDGE_CURVE('',#15316,#15315,#8280,.T.); #19163=EDGE_CURVE('',#15313,#15316,#8281,.T.); #19164=EDGE_CURVE('',#15317,#15318,#8282,.T.); #19165=EDGE_CURVE('',#15313,#15317,#8283,.T.); #19166=EDGE_CURVE('',#15318,#15316,#8284,.T.); #19167=EDGE_CURVE('',#15319,#15315,#6491,.T.); #19168=EDGE_CURVE('',#15320,#15319,#6492,.T.); #19169=EDGE_CURVE('',#15321,#15320,#8285,.T.); #19170=EDGE_CURVE('',#15321,#15322,#8286,.T.); #19171=EDGE_CURVE('',#15323,#15322,#8287,.T.); #19172=EDGE_CURVE('',#15324,#15323,#6493,.T.); #19173=EDGE_CURVE('',#15325,#15324,#8288,.T.); #19174=EDGE_CURVE('',#15325,#15326,#6494,.T.); #19175=EDGE_CURVE('',#15326,#15327,#8289,.T.); #19176=EDGE_CURVE('',#15327,#15328,#8290,.T.); #19177=EDGE_CURVE('',#15329,#15328,#8291,.T.); #19178=EDGE_CURVE('',#15330,#15329,#8292,.T.); #19179=EDGE_CURVE('',#15330,#15331,#8293,.T.); #19180=EDGE_CURVE('',#15331,#15332,#8294,.T.); #19181=EDGE_CURVE('',#15332,#15333,#8295,.T.); #19182=EDGE_CURVE('',#15333,#15334,#8296,.T.); #19183=EDGE_CURVE('',#15335,#15334,#8297,.T.); #19184=EDGE_CURVE('',#15335,#15336,#8298,.T.); #19185=EDGE_CURVE('',#15336,#15337,#8299,.T.); #19186=EDGE_CURVE('',#15337,#15338,#8300,.T.); #19187=EDGE_CURVE('',#15230,#15338,#8301,.T.); #19188=EDGE_CURVE('',#15242,#15318,#8302,.T.); #19189=EDGE_CURVE('',#15339,#15340,#6495,.T.); #19190=EDGE_CURVE('',#15340,#15341,#8303,.T.); #19191=EDGE_CURVE('',#15341,#15342,#6496,.T.); #19192=EDGE_CURVE('',#15342,#15343,#8304,.T.); #19193=EDGE_CURVE('',#15343,#15344,#6497,.T.); #19194=EDGE_CURVE('',#15344,#15345,#8305,.T.); #19195=EDGE_CURVE('',#15345,#15346,#6498,.T.); #19196=EDGE_CURVE('',#15346,#15347,#8306,.T.); #19197=EDGE_CURVE('',#15347,#15348,#6499,.T.); #19198=EDGE_CURVE('',#15348,#15349,#8307,.T.); #19199=EDGE_CURVE('',#15349,#15350,#6500,.T.); #19200=EDGE_CURVE('',#15350,#15339,#8308,.T.); #19201=EDGE_CURVE('',#15291,#15350,#8309,.T.); #19202=EDGE_CURVE('',#15290,#15339,#8310,.T.); #19203=EDGE_CURVE('',#15292,#15349,#8311,.T.); #19204=EDGE_CURVE('',#15281,#15348,#8312,.T.); #19205=EDGE_CURVE('',#15282,#15347,#8313,.T.); #19206=EDGE_CURVE('',#15283,#15346,#8314,.T.); #19207=EDGE_CURVE('',#15284,#15345,#8315,.T.); #19208=EDGE_CURVE('',#15285,#15344,#533,.T.); #19209=EDGE_CURVE('',#15341,#15288,#534,.T.); #19210=EDGE_CURVE('',#15289,#15340,#8316,.T.); #19211=EDGE_CURVE('',#15351,#15343,#535,.T.); #19212=EDGE_CURVE('',#15352,#15351,#6501,.T.); #19213=EDGE_CURVE('',#15286,#15352,#536,.T.); #19214=EDGE_CURVE('',#15352,#15353,#299,.T.); #19215=EDGE_CURVE('',#15353,#15354,#8317,.T.); #19216=EDGE_CURVE('',#15355,#15354,#300,.T.); #19217=EDGE_CURVE('',#15355,#15287,#537,.T.); #19218=EDGE_CURVE('',#15356,#15355,#6502,.T.); #19219=EDGE_CURVE('',#15342,#15356,#538,.T.); #19220=EDGE_CURVE('',#15357,#15358,#8318,.T.); #19221=EDGE_CURVE('',#15351,#15358,#539,.T.); #19222=EDGE_CURVE('',#15356,#15357,#540,.T.); #19223=EDGE_CURVE('',#15354,#15357,#8319,.T.); #19224=EDGE_CURVE('',#15354,#15359,#8320,.T.); #19225=EDGE_CURVE('',#15359,#15360,#8321,.T.); #19226=EDGE_CURVE('',#15357,#15360,#8322,.T.); #19227=EDGE_CURVE('',#15360,#15361,#8323,.T.); #19228=EDGE_CURVE('',#15358,#15361,#8324,.T.); #19229=EDGE_CURVE('',#15361,#15362,#8325,.T.); #19230=EDGE_CURVE('',#15353,#15362,#8326,.T.); #19231=EDGE_CURVE('',#15358,#15353,#8327,.T.); #19232=EDGE_CURVE('',#15362,#15359,#8328,.T.); #19233=EDGE_CURVE('',#15362,#15363,#541,.T.); #19234=EDGE_CURVE('',#15363,#15364,#8329,.T.); #19235=EDGE_CURVE('',#15359,#15364,#542,.T.); #19236=EDGE_CURVE('',#15364,#15365,#8330,.T.); #19237=EDGE_CURVE('',#15360,#15365,#543,.T.); #19238=EDGE_CURVE('',#15365,#15366,#8331,.T.); #19239=EDGE_CURVE('',#15361,#15366,#544,.T.); #19240=EDGE_CURVE('',#15366,#15363,#8332,.T.); #19241=EDGE_CURVE('',#15363,#15367,#8333,.T.); #19242=EDGE_CURVE('',#15366,#15368,#8334,.T.); #19243=EDGE_CURVE('',#15367,#15368,#8335,.T.); #19244=EDGE_CURVE('',#15369,#15370,#8336,.T.); #19245=EDGE_CURVE('',#15367,#15369,#6503,.T.); #19246=EDGE_CURVE('',#15370,#15368,#6504,.T.); #19247=EDGE_CURVE('',#15371,#15372,#6505,.T.); #19248=EDGE_CURVE('',#15372,#15370,#8337,.T.); #19249=EDGE_CURVE('',#15365,#15371,#8338,.T.); #19250=EDGE_CURVE('',#15372,#15373,#8339,.T.); #19251=EDGE_CURVE('',#15371,#15374,#8340,.T.); #19252=EDGE_CURVE('',#15373,#15374,#6506,.T.); #19253=EDGE_CURVE('',#15364,#15374,#8341,.T.); #19254=EDGE_CURVE('',#15369,#15373,#8342,.T.); #19255=EDGE_CURVE('',#15375,#15376,#8343,.T.); #19256=EDGE_CURVE('',#15377,#15376,#8344,.T.); #19257=EDGE_CURVE('',#15378,#15377,#8345,.T.); #19258=EDGE_CURVE('',#15379,#15378,#8346,.T.); #19259=EDGE_CURVE('',#15380,#15379,#8347,.T.); #19260=EDGE_CURVE('',#15380,#15375,#8348,.T.); #19261=EDGE_CURVE('',#15301,#15381,#8349,.T.); #19262=EDGE_CURVE('',#15381,#15382,#8350,.T.); #19263=EDGE_CURVE('',#15383,#15382,#8351,.T.); #19264=EDGE_CURVE('',#15384,#15383,#8352,.T.); #19265=EDGE_CURVE('',#15303,#15384,#8353,.T.); #19266=EDGE_CURVE('',#15385,#15386,#8354,.T.); #19267=EDGE_CURVE('',#15387,#15386,#8355,.T.); #19268=EDGE_CURVE('',#15387,#15388,#8356,.T.); #19269=EDGE_CURVE('',#15388,#15385,#8357,.T.); #19270=EDGE_CURVE('',#15326,#15280,#8358,.T.); #19271=EDGE_CURVE('',#15327,#15279,#8359,.T.); #19272=EDGE_CURVE('',#15389,#15390,#8360,.T.); #19273=EDGE_CURVE('',#15391,#15390,#8361,.T.); #19274=EDGE_CURVE('',#15392,#15391,#8362,.T.); #19275=EDGE_CURVE('',#15317,#15392,#8363,.T.); #19276=EDGE_CURVE('',#15389,#15241,#8364,.T.); #19277=EDGE_CURVE('',#15311,#15393,#8365,.T.); #19278=EDGE_CURVE('',#15394,#15393,#8366,.T.); #19279=EDGE_CURVE('',#15395,#15394,#8367,.T.); #19280=EDGE_CURVE('',#15396,#15395,#8368,.T.); #19281=EDGE_CURVE('',#15376,#15396,#8369,.T.); #19282=EDGE_CURVE('',#15375,#15397,#8370,.T.); #19283=EDGE_CURVE('',#15397,#15398,#8371,.T.); #19284=EDGE_CURVE('',#15398,#15399,#8372,.T.); #19285=EDGE_CURVE('',#15399,#15400,#8373,.T.); #19286=EDGE_CURVE('',#15400,#15401,#8374,.T.); #19287=EDGE_CURVE('',#15402,#15401,#8375,.T.); #19288=EDGE_CURVE('',#15403,#15402,#8376,.T.); #19289=EDGE_CURVE('',#15403,#15404,#8377,.T.); #19290=EDGE_CURVE('',#15404,#15405,#8378,.T.); #19291=EDGE_CURVE('',#15405,#15406,#8379,.T.); #19292=EDGE_CURVE('',#15407,#15406,#8380,.T.); #19293=EDGE_CURVE('',#15407,#15408,#8381,.T.); #19294=EDGE_CURVE('',#15408,#15409,#8382,.T.); #19295=EDGE_CURVE('',#15409,#15410,#8383,.T.); #19296=EDGE_CURVE('',#15410,#15411,#8384,.T.); #19297=EDGE_CURVE('',#15411,#15412,#8385,.T.); #19298=EDGE_CURVE('',#15412,#15413,#8386,.T.); #19299=EDGE_CURVE('',#15413,#15414,#8387,.T.); #19300=EDGE_CURVE('',#15414,#15415,#8388,.T.); #19301=EDGE_CURVE('',#15416,#15415,#8389,.T.); #19302=EDGE_CURVE('',#15417,#15416,#8390,.T.); #19303=EDGE_CURVE('',#15417,#15418,#8391,.T.); #19304=EDGE_CURVE('',#15418,#15419,#8392,.T.); #19305=EDGE_CURVE('',#15419,#15420,#8393,.T.); #19306=EDGE_CURVE('',#15421,#15420,#8394,.T.); #19307=EDGE_CURVE('',#15421,#15422,#8395,.T.); #19308=EDGE_CURVE('',#15422,#15423,#8396,.T.); #19309=EDGE_CURVE('',#15423,#15424,#8397,.T.); #19310=EDGE_CURVE('',#15424,#15425,#8398,.T.); #19311=EDGE_CURVE('',#15425,#15426,#8399,.T.); #19312=EDGE_CURVE('',#15426,#15427,#8400,.T.); #19313=EDGE_CURVE('',#15427,#15428,#8401,.T.); #19314=EDGE_CURVE('',#15428,#15429,#8402,.T.); #19315=EDGE_CURVE('',#15430,#15429,#8403,.T.); #19316=EDGE_CURVE('',#15431,#15430,#8404,.T.); #19317=EDGE_CURVE('',#15431,#15432,#8405,.T.); #19318=EDGE_CURVE('',#15432,#15433,#8406,.T.); #19319=EDGE_CURVE('',#15433,#15434,#8407,.T.); #19320=EDGE_CURVE('',#15435,#15434,#8408,.T.); #19321=EDGE_CURVE('',#15435,#15436,#8409,.T.); #19322=EDGE_CURVE('',#15436,#15437,#8410,.T.); #19323=EDGE_CURVE('',#15437,#15438,#8411,.T.); #19324=EDGE_CURVE('',#15438,#15439,#8412,.T.); #19325=EDGE_CURVE('',#15439,#15440,#8413,.T.); #19326=EDGE_CURVE('',#15440,#15441,#8414,.T.); #19327=EDGE_CURVE('',#15441,#15442,#8415,.T.); #19328=EDGE_CURVE('',#15442,#15443,#8416,.T.); #19329=EDGE_CURVE('',#15444,#15443,#8417,.T.); #19330=EDGE_CURVE('',#15445,#15444,#8418,.T.); #19331=EDGE_CURVE('',#15445,#15446,#8419,.T.); #19332=EDGE_CURVE('',#15446,#15447,#8420,.T.); #19333=EDGE_CURVE('',#15447,#15448,#8421,.T.); #19334=EDGE_CURVE('',#15449,#15448,#8422,.T.); #19335=EDGE_CURVE('',#15449,#15450,#8423,.T.); #19336=EDGE_CURVE('',#15450,#15451,#8424,.T.); #19337=EDGE_CURVE('',#15451,#15452,#8425,.T.); #19338=EDGE_CURVE('',#15452,#15453,#8426,.T.); #19339=EDGE_CURVE('',#15453,#15454,#8427,.T.); #19340=EDGE_CURVE('',#15381,#15454,#8428,.T.); #19341=EDGE_CURVE('',#15392,#15455,#8429,.T.); #19342=EDGE_CURVE('',#15393,#15455,#8430,.T.); #19343=EDGE_CURVE('',#15456,#15394,#8431,.T.); #19344=EDGE_CURVE('',#15455,#15456,#8432,.T.); #19345=EDGE_CURVE('',#15457,#15458,#8433,.T.); #19346=EDGE_CURVE('',#15458,#15459,#8434,.T.); #19347=EDGE_CURVE('',#15460,#15459,#8435,.T.); #19348=EDGE_CURVE('',#15460,#15457,#8436,.T.); #19349=EDGE_CURVE('',#15461,#15462,#8437,.T.); #19350=EDGE_CURVE('',#15462,#15463,#8438,.T.); #19351=EDGE_CURVE('',#15464,#15463,#8439,.T.); #19352=EDGE_CURVE('',#15464,#15461,#8440,.T.); #19353=EDGE_CURVE('',#15465,#15466,#8441,.T.); #19354=EDGE_CURVE('',#15467,#15466,#8442,.T.); #19355=EDGE_CURVE('',#15467,#15468,#8443,.T.); #19356=EDGE_CURVE('',#15468,#15465,#8444,.T.); #19357=EDGE_CURVE('',#15469,#15470,#8445,.T.); #19358=EDGE_CURVE('',#15471,#15470,#8446,.T.); #19359=EDGE_CURVE('',#15471,#15472,#8447,.T.); #19360=EDGE_CURVE('',#15472,#15469,#8448,.T.); #19361=EDGE_CURVE('',#15391,#15456,#8449,.T.); #19362=EDGE_CURVE('',#15390,#15473,#8450,.T.); #19363=EDGE_CURVE('',#15473,#15474,#8451,.T.); #19364=EDGE_CURVE('',#15395,#15474,#8452,.T.); #19365=EDGE_CURVE('',#15475,#15389,#8453,.T.); #19366=EDGE_CURVE('',#15475,#15473,#8454,.T.); #19367=EDGE_CURVE('',#15476,#15475,#8455,.T.); #19368=EDGE_CURVE('',#15477,#15476,#8456,.T.); #19369=EDGE_CURVE('',#15477,#15478,#8457,.T.); #19370=EDGE_CURVE('',#15479,#15478,#8458,.T.); #19371=EDGE_CURVE('',#15480,#15479,#8459,.T.); #19372=EDGE_CURVE('',#15474,#15480,#8460,.T.); #19373=EDGE_CURVE('',#15481,#15482,#8461,.T.); #19374=EDGE_CURVE('',#15396,#15481,#8462,.T.); #19375=EDGE_CURVE('',#15482,#15480,#8463,.T.); #19376=EDGE_CURVE('',#15483,#15482,#8464,.T.); #19377=EDGE_CURVE('',#15483,#15479,#8465,.T.); #19378=EDGE_CURVE('',#15484,#15479,#8466,.T.); #19379=EDGE_CURVE('',#15485,#15484,#8467,.T.); #19380=EDGE_CURVE('',#15485,#15486,#8468,.T.); #19381=EDGE_CURVE('',#15486,#15483,#8469,.T.); #19382=EDGE_CURVE('',#15481,#15486,#8470,.T.); #19383=EDGE_CURVE('',#15487,#15485,#8471,.T.); #19384=EDGE_CURVE('',#15239,#15487,#8472,.T.); #19385=EDGE_CURVE('',#15488,#15238,#8473,.T.); #19386=EDGE_CURVE('',#15377,#15488,#8474,.T.); #19387=EDGE_CURVE('',#15489,#15490,#8475,.T.); #19388=EDGE_CURVE('',#15491,#15489,#8476,.T.); #19389=EDGE_CURVE('',#15492,#15491,#8477,.T.); #19390=EDGE_CURVE('',#15490,#15492,#8478,.T.); #19391=EDGE_CURVE('',#15490,#15493,#8479,.T.); #19392=EDGE_CURVE('',#15492,#15494,#8480,.T.); #19393=EDGE_CURVE('',#15493,#15494,#8481,.T.); #19394=EDGE_CURVE('',#15495,#15388,#8482,.T.); #19395=EDGE_CURVE('',#15496,#15495,#8483,.T.); #19396=EDGE_CURVE('',#15497,#15496,#8484,.T.); #19397=EDGE_CURVE('',#15497,#15498,#8485,.T.); #19398=EDGE_CURVE('',#15499,#15498,#8486,.T.); #19399=EDGE_CURVE('',#15499,#15500,#8487,.T.); #19400=EDGE_CURVE('',#15501,#15500,#8488,.T.); #19401=EDGE_CURVE('',#15502,#15501,#8489,.T.); #19402=EDGE_CURVE('',#15234,#15502,#8490,.T.); #19403=EDGE_CURVE('',#15240,#15503,#8491,.T.); #19404=EDGE_CURVE('',#15503,#15484,#8492,.T.); #19405=EDGE_CURVE('',#15478,#15504,#8493,.T.); #19406=EDGE_CURVE('',#15505,#15504,#8494,.T.); #19407=EDGE_CURVE('',#15505,#15385,#6507,.T.); #19408=EDGE_CURVE('',#15506,#15507,#6508,.T.); #19409=EDGE_CURVE('',#15507,#15508,#8495,.T.); #19410=EDGE_CURVE('',#15508,#15509,#6509,.T.); #19411=EDGE_CURVE('',#15509,#15510,#8496,.T.); #19412=EDGE_CURVE('',#15510,#15511,#6510,.T.); #19413=EDGE_CURVE('',#15511,#15512,#8497,.T.); #19414=EDGE_CURVE('',#15512,#15513,#6511,.T.); #19415=EDGE_CURVE('',#15513,#15514,#8498,.T.); #19416=EDGE_CURVE('',#15514,#15515,#6512,.T.); #19417=EDGE_CURVE('',#15515,#15516,#8499,.T.); #19418=EDGE_CURVE('',#15516,#15517,#6513,.T.); #19419=EDGE_CURVE('',#15517,#15506,#8500,.T.); #19420=EDGE_CURVE('',#15494,#15518,#8501,.T.); #19421=EDGE_CURVE('',#15518,#15519,#8502,.T.); #19422=EDGE_CURVE('',#15519,#15493,#8503,.T.); #19423=EDGE_CURVE('',#15489,#15519,#8504,.T.); #19424=EDGE_CURVE('',#15491,#15518,#8505,.T.); #19425=EDGE_CURVE('',#15520,#15517,#8506,.T.); #19426=EDGE_CURVE('',#15520,#15521,#8507,.T.); #19427=EDGE_CURVE('',#15521,#15506,#8508,.T.); #19428=EDGE_CURVE('',#15522,#15516,#8509,.T.); #19429=EDGE_CURVE('',#15520,#15522,#6514,.T.); #19430=EDGE_CURVE('',#15231,#15523,#8510,.T.); #19431=EDGE_CURVE('',#15523,#15524,#8511,.T.); #19432=EDGE_CURVE('',#15524,#15525,#8512,.T.); #19433=EDGE_CURVE('',#15525,#15526,#8513,.T.); #19434=EDGE_CURVE('',#15527,#15526,#8514,.T.); #19435=EDGE_CURVE('',#15527,#15528,#8515,.T.); #19436=EDGE_CURVE('',#15528,#15529,#8516,.T.); #19437=EDGE_CURVE('',#15529,#15530,#8517,.T.); #19438=EDGE_CURVE('',#15530,#15531,#8518,.T.); #19439=EDGE_CURVE('',#15531,#15532,#8519,.T.); #19440=EDGE_CURVE('',#15533,#15532,#8520,.T.); #19441=EDGE_CURVE('',#15533,#15387,#8521,.T.); #19442=EDGE_CURVE('',#15386,#15534,#6515,.T.); #19443=EDGE_CURVE('',#15534,#15535,#8522,.T.); #19444=EDGE_CURVE('',#15535,#15536,#6516,.T.); #19445=EDGE_CURVE('',#15536,#15537,#8523,.T.); #19446=EDGE_CURVE('',#15537,#15538,#8524,.T.); #19447=EDGE_CURVE('',#15538,#15539,#8525,.T.); #19448=EDGE_CURVE('',#15539,#15540,#6517,.T.); #19449=EDGE_CURVE('',#15540,#15476,#6518,.T.); #19450=EDGE_CURVE('',#15541,#15542,#6519,.T.); #19451=EDGE_CURVE('',#15543,#15542,#8526,.T.); #19452=EDGE_CURVE('',#15543,#15544,#6520,.T.); #19453=EDGE_CURVE('',#15545,#15544,#8527,.T.); #19454=EDGE_CURVE('',#15545,#15546,#6521,.T.); #19455=EDGE_CURVE('',#15546,#15547,#8528,.T.); #19456=EDGE_CURVE('',#15547,#15548,#6522,.T.); #19457=EDGE_CURVE('',#15549,#15548,#8529,.T.); #19458=EDGE_CURVE('',#15549,#15521,#6523,.T.); #19459=EDGE_CURVE('',#15541,#15522,#8530,.T.); #19460=EDGE_CURVE('',#15541,#15515,#8531,.T.); #19461=EDGE_CURVE('',#15542,#15514,#8532,.T.); #19462=EDGE_CURVE('',#15543,#15513,#8533,.T.); #19463=EDGE_CURVE('',#15544,#15512,#8534,.T.); #19464=EDGE_CURVE('',#15545,#15511,#545,.T.); #19465=EDGE_CURVE('',#15508,#15548,#546,.T.); #19466=EDGE_CURVE('',#15549,#15507,#8535,.T.); #19467=EDGE_CURVE('',#15550,#15510,#547,.T.); #19468=EDGE_CURVE('',#15551,#15550,#6524,.T.); #19469=EDGE_CURVE('',#15546,#15551,#548,.T.); #19470=EDGE_CURVE('',#15551,#15552,#549,.T.); #19471=EDGE_CURVE('',#15553,#15552,#8536,.T.); #19472=EDGE_CURVE('',#15554,#15553,#550,.T.); #19473=EDGE_CURVE('',#15554,#15547,#551,.T.); #19474=EDGE_CURVE('',#15555,#15554,#6525,.T.); #19475=EDGE_CURVE('',#15509,#15555,#552,.T.); #19476=EDGE_CURVE('',#15555,#15556,#301,.T.); #19477=EDGE_CURVE('',#15557,#15556,#8537,.T.); #19478=EDGE_CURVE('',#15550,#15557,#302,.T.); #19479=EDGE_CURVE('',#15556,#15553,#8538,.T.); #19480=EDGE_CURVE('',#15553,#15558,#8539,.T.); #19481=EDGE_CURVE('',#15559,#15558,#8540,.T.); #19482=EDGE_CURVE('',#15556,#15559,#8541,.T.); #19483=EDGE_CURVE('',#15560,#15559,#8542,.T.); #19484=EDGE_CURVE('',#15557,#15560,#8543,.T.); #19485=EDGE_CURVE('',#15552,#15557,#8544,.T.); #19486=EDGE_CURVE('',#15561,#15560,#8545,.T.); #19487=EDGE_CURVE('',#15552,#15561,#8546,.T.); #19488=EDGE_CURVE('',#15558,#15561,#8547,.T.); #19489=EDGE_CURVE('',#15561,#15562,#553,.T.); #19490=EDGE_CURVE('',#15563,#15562,#8548,.T.); #19491=EDGE_CURVE('',#15558,#15563,#554,.T.); #19492=EDGE_CURVE('',#15564,#15563,#8549,.T.); #19493=EDGE_CURVE('',#15559,#15564,#555,.T.); #19494=EDGE_CURVE('',#15565,#15564,#8550,.T.); #19495=EDGE_CURVE('',#15560,#15565,#556,.T.); #19496=EDGE_CURVE('',#15562,#15565,#8551,.T.); #19497=EDGE_CURVE('',#15566,#15567,#8552,.T.); #19498=EDGE_CURVE('',#15562,#15566,#8553,.T.); #19499=EDGE_CURVE('',#15565,#15567,#8554,.T.); #19500=EDGE_CURVE('',#15568,#15569,#8555,.T.); #19501=EDGE_CURVE('',#15566,#15568,#6526,.T.); #19502=EDGE_CURVE('',#15569,#15567,#6527,.T.); #19503=EDGE_CURVE('',#15570,#15571,#6528,.T.); #19504=EDGE_CURVE('',#15569,#15571,#8556,.T.); #19505=EDGE_CURVE('',#15564,#15570,#8557,.T.); #19506=EDGE_CURVE('',#15571,#15572,#8558,.T.); #19507=EDGE_CURVE('',#15570,#15573,#8559,.T.); #19508=EDGE_CURVE('',#15572,#15573,#6529,.T.); #19509=EDGE_CURVE('',#15563,#15573,#8560,.T.); #19510=EDGE_CURVE('',#15572,#15568,#8561,.T.); #19511=EDGE_CURVE('',#15540,#15574,#8562,.T.); #19512=EDGE_CURVE('',#15574,#15477,#6530,.T.); #19513=EDGE_CURVE('',#15575,#15576,#8563,.T.); #19514=EDGE_CURVE('',#15577,#15575,#8564,.T.); #19515=EDGE_CURVE('',#15578,#15577,#6531,.T.); #19516=EDGE_CURVE('',#15579,#15578,#8565,.T.); #19517=EDGE_CURVE('',#15477,#15579,#8566,.T.); #19518=EDGE_CURVE('',#15580,#15574,#6532,.T.); #19519=EDGE_CURVE('',#15576,#15580,#8567,.T.); #19520=EDGE_CURVE('',#15581,#15576,#8568,.T.); #19521=EDGE_CURVE('',#15582,#15581,#6533,.T.); #19522=EDGE_CURVE('',#15583,#15582,#8569,.T.); #19523=EDGE_CURVE('',#15584,#15583,#6534,.T.); #19524=EDGE_CURVE('',#15575,#15584,#8570,.T.); #19525=EDGE_CURVE('',#15536,#15577,#8571,.T.); #19526=EDGE_CURVE('',#15585,#15584,#8572,.T.); #19527=EDGE_CURVE('',#15586,#15585,#8573,.T.); #19528=EDGE_CURVE('',#15586,#15537,#6535,.T.); #19529=EDGE_CURVE('',#15586,#15587,#8574,.T.); #19530=EDGE_CURVE('',#15538,#15587,#6536,.T.); #19531=EDGE_CURVE('',#15588,#15587,#8575,.T.); #19532=EDGE_CURVE('',#15588,#15581,#8576,.T.); #19533=EDGE_CURVE('',#15539,#15580,#8577,.T.); #19534=EDGE_CURVE('',#15589,#15582,#8578,.T.); #19535=EDGE_CURVE('',#15589,#15588,#6537,.T.); #19536=EDGE_CURVE('',#15585,#15590,#6538,.T.); #19537=EDGE_CURVE('',#15590,#15589,#8579,.T.); #19538=EDGE_CURVE('',#15590,#15583,#8580,.T.); #19539=EDGE_CURVE('',#15578,#15535,#8581,.T.); #19540=EDGE_CURVE('',#15505,#15534,#8582,.T.); #19541=EDGE_CURVE('',#15579,#15504,#8583,.T.); #19542=EDGE_CURVE('',#15328,#15278,#8584,.T.); #19543=EDGE_CURVE('',#15495,#15533,#8585,.T.); #19544=EDGE_CURVE('',#15591,#15592,#8586,.T.); #19545=EDGE_CURVE('',#15593,#15592,#8587,.T.); #19546=EDGE_CURVE('',#15593,#15594,#8588,.T.); #19547=EDGE_CURVE('',#15594,#15332,#8589,.T.); #19548=EDGE_CURVE('',#15331,#15275,#8590,.T.); #19549=EDGE_CURVE('',#15274,#15595,#8591,.T.); #19550=EDGE_CURVE('',#15595,#15596,#8592,.T.); #19551=EDGE_CURVE('',#15596,#15597,#8593,.T.); #19552=EDGE_CURVE('',#15597,#15598,#8594,.T.); #19553=EDGE_CURVE('',#15598,#15599,#8595,.T.); #19554=EDGE_CURVE('',#15599,#15600,#8596,.T.); #19555=EDGE_CURVE('',#15600,#15601,#8597,.T.); #19556=EDGE_CURVE('',#15601,#15602,#8598,.T.); #19557=EDGE_CURVE('',#15602,#15499,#8599,.T.); #19558=EDGE_CURVE('',#15498,#15530,#8600,.T.); #19559=EDGE_CURVE('',#15529,#15591,#8601,.T.); #19560=EDGE_CURVE('',#15603,#15604,#6539,.T.); #19561=EDGE_CURVE('',#15604,#15605,#8602,.T.); #19562=EDGE_CURVE('',#15605,#15606,#6540,.T.); #19563=EDGE_CURVE('',#15607,#15606,#8603,.T.); #19564=EDGE_CURVE('',#15607,#15608,#8604,.T.); #19565=EDGE_CURVE('',#15608,#15609,#8605,.T.); #19566=EDGE_CURVE('',#15609,#15610,#6541,.T.); #19567=EDGE_CURVE('',#15610,#15611,#8606,.T.); #19568=EDGE_CURVE('',#15611,#15612,#6542,.T.); #19569=EDGE_CURVE('',#15612,#15613,#8607,.T.); #19570=EDGE_CURVE('',#15613,#15614,#6543,.T.); #19571=EDGE_CURVE('',#15614,#15615,#8608,.T.); #19572=EDGE_CURVE('',#15615,#15616,#6544,.T.); #19573=EDGE_CURVE('',#15616,#15603,#8609,.T.); #19574=EDGE_CURVE('',#15617,#15618,#6545,.T.); #19575=EDGE_CURVE('',#15619,#15618,#8610,.T.); #19576=EDGE_CURVE('',#15619,#15620,#6546,.T.); #19577=EDGE_CURVE('',#15621,#15620,#8611,.T.); #19578=EDGE_CURVE('',#15622,#15621,#8612,.T.); #19579=EDGE_CURVE('',#15622,#15623,#8613,.T.); #19580=EDGE_CURVE('',#15623,#15624,#6547,.T.); #19581=EDGE_CURVE('',#15625,#15624,#8614,.T.); #19582=EDGE_CURVE('',#15625,#15626,#6548,.T.); #19583=EDGE_CURVE('',#15627,#15626,#8615,.T.); #19584=EDGE_CURVE('',#15627,#15628,#6549,.T.); #19585=EDGE_CURVE('',#15629,#15628,#8616,.T.); #19586=EDGE_CURVE('',#15629,#15630,#6550,.T.); #19587=EDGE_CURVE('',#15617,#15630,#8617,.T.); #19588=EDGE_CURVE('',#15631,#15632,#8618,.T.); #19589=EDGE_CURVE('',#15632,#15633,#303,.T.); #19590=EDGE_CURVE('',#15633,#15634,#8619,.T.); #19591=EDGE_CURVE('',#15634,#15496,#304,.T.); #19592=EDGE_CURVE('',#15532,#15635,#305,.T.); #19593=EDGE_CURVE('',#15635,#15636,#8620,.T.); #19594=EDGE_CURVE('',#15636,#15637,#306,.T.); #19595=EDGE_CURVE('',#15637,#15638,#8621,.T.); #19596=EDGE_CURVE('',#15631,#15638,#8622,.T.); #19597=EDGE_CURVE('',#15639,#15640,#8623,.T.); #19598=EDGE_CURVE('',#15640,#15641,#307,.T.); #19599=EDGE_CURVE('',#15641,#15642,#8624,.T.); #19600=EDGE_CURVE('',#15642,#15329,#308,.T.); #19601=EDGE_CURVE('',#15277,#15643,#309,.T.); #19602=EDGE_CURVE('',#15643,#15644,#8625,.T.); #19603=EDGE_CURVE('',#15644,#15645,#310,.T.); #19604=EDGE_CURVE('',#15645,#15646,#8626,.T.); #19605=EDGE_CURVE('',#15646,#15639,#8627,.T.); #19606=EDGE_CURVE('',#15647,#15648,#8628,.T.); #19607=EDGE_CURVE('',#15631,#15647,#311,.T.); #19608=EDGE_CURVE('',#15648,#15638,#312,.T.); #19609=EDGE_CURVE('',#15649,#15637,#8629,.T.); #19610=EDGE_CURVE('',#15649,#15648,#8630,.T.); #19611=EDGE_CURVE('',#15650,#15649,#313,.T.); #19612=EDGE_CURVE('',#15651,#15650,#8631,.T.); #19613=EDGE_CURVE('',#15531,#15651,#314,.T.); #19614=EDGE_CURVE('',#15652,#15497,#315,.T.); #19615=EDGE_CURVE('',#15653,#15652,#8632,.T.); #19616=EDGE_CURVE('',#15654,#15653,#316,.T.); #19617=EDGE_CURVE('',#15647,#15654,#8633,.T.); #19618=EDGE_CURVE('',#15655,#15656,#8634,.T.); #19619=EDGE_CURVE('',#15657,#15655,#8635,.T.); #19620=EDGE_CURVE('',#15658,#15657,#317,.T.); #19621=EDGE_CURVE('',#15659,#15658,#8636,.T.); #19622=EDGE_CURVE('',#15276,#15659,#318,.T.); #19623=EDGE_CURVE('',#15660,#15330,#319,.T.); #19624=EDGE_CURVE('',#15661,#15660,#8637,.T.); #19625=EDGE_CURVE('',#15662,#15661,#320,.T.); #19626=EDGE_CURVE('',#15656,#15662,#8638,.T.); #19627=EDGE_CURVE('',#15654,#15632,#8639,.T.); #19628=EDGE_CURVE('',#15653,#15633,#8640,.T.); #19629=EDGE_CURVE('',#15652,#15634,#8641,.T.); #19630=EDGE_CURVE('',#15651,#15635,#8642,.T.); #19631=EDGE_CURVE('',#15650,#15636,#8643,.T.); #19632=EDGE_CURVE('',#15655,#15646,#321,.T.); #19633=EDGE_CURVE('',#15639,#15656,#322,.T.); #19634=EDGE_CURVE('',#15662,#15640,#8644,.T.); #19635=EDGE_CURVE('',#15661,#15641,#8645,.T.); #19636=EDGE_CURVE('',#15660,#15642,#8646,.T.); #19637=EDGE_CURVE('',#15657,#15645,#8647,.T.); #19638=EDGE_CURVE('',#15658,#15644,#8648,.T.); #19639=EDGE_CURVE('',#15659,#15643,#8649,.T.); #19640=EDGE_CURVE('',#15663,#15664,#8650,.T.); #19641=EDGE_CURVE('',#15664,#15603,#8651,.T.); #19642=EDGE_CURVE('',#15663,#15616,#8652,.T.); #19643=EDGE_CURVE('',#15665,#15615,#8653,.T.); #19644=EDGE_CURVE('',#15663,#15665,#6551,.T.); #19645=EDGE_CURVE('',#15272,#15501,#8654,.T.); #19646=EDGE_CURVE('',#15500,#15666,#8655,.T.); #19647=EDGE_CURVE('',#15666,#15667,#8656,.T.); #19648=EDGE_CURVE('',#15667,#15668,#8657,.T.); #19649=EDGE_CURVE('',#15668,#15669,#8658,.T.); #19650=EDGE_CURVE('',#15669,#15273,#8659,.T.); #19651=EDGE_CURVE('',#15670,#15671,#8660,.T.); #19652=EDGE_CURVE('',#15671,#15672,#6552,.T.); #19653=EDGE_CURVE('',#15672,#15673,#8661,.T.); #19654=EDGE_CURVE('',#15673,#15674,#6553,.T.); #19655=EDGE_CURVE('',#15674,#15675,#8662,.T.); #19656=EDGE_CURVE('',#15675,#15676,#6554,.T.); #19657=EDGE_CURVE('',#15676,#15677,#8663,.T.); #19658=EDGE_CURVE('',#15677,#15678,#8664,.T.); #19659=EDGE_CURVE('',#15679,#15678,#8665,.T.); #19660=EDGE_CURVE('',#15679,#15680,#6555,.T.); #19661=EDGE_CURVE('',#15680,#15681,#8666,.T.); #19662=EDGE_CURVE('',#15681,#15682,#6556,.T.); #19663=EDGE_CURVE('',#15682,#15683,#8667,.T.); #19664=EDGE_CURVE('',#15683,#15670,#6557,.T.); #19665=EDGE_CURVE('',#15684,#15665,#8668,.T.); #19666=EDGE_CURVE('',#15684,#15685,#6558,.T.); #19667=EDGE_CURVE('',#15686,#15685,#8669,.T.); #19668=EDGE_CURVE('',#15686,#15687,#6559,.T.); #19669=EDGE_CURVE('',#15688,#15687,#8670,.T.); #19670=EDGE_CURVE('',#15688,#15689,#6560,.T.); #19671=EDGE_CURVE('',#15689,#15690,#8671,.T.); #19672=EDGE_CURVE('',#15691,#15690,#8672,.T.); #19673=EDGE_CURVE('',#15692,#15691,#8673,.T.); #19674=EDGE_CURVE('',#15692,#15693,#6561,.T.); #19675=EDGE_CURVE('',#15694,#15693,#8674,.T.); #19676=EDGE_CURVE('',#15694,#15664,#6562,.T.); #19677=EDGE_CURVE('',#15684,#15614,#8675,.T.); #19678=EDGE_CURVE('',#15685,#15613,#8676,.T.); #19679=EDGE_CURVE('',#15686,#15612,#8677,.T.); #19680=EDGE_CURVE('',#15687,#15611,#8678,.T.); #19681=EDGE_CURVE('',#15694,#15604,#8679,.T.); #19682=EDGE_CURVE('',#15605,#15693,#8680,.T.); #19683=EDGE_CURVE('',#15688,#15610,#8681,.T.); #19684=EDGE_CURVE('',#15606,#15692,#8682,.T.); #19685=EDGE_CURVE('',#15695,#15696,#8683,.T.); #19686=EDGE_CURVE('',#15696,#15697,#6563,.T.); #19687=EDGE_CURVE('',#15697,#15698,#8684,.T.); #19688=EDGE_CURVE('',#15698,#15607,#6564,.T.); #19689=EDGE_CURVE('',#15691,#15699,#6565,.T.); #19690=EDGE_CURVE('',#15699,#15700,#8685,.T.); #19691=EDGE_CURVE('',#15700,#15701,#6566,.T.); #19692=EDGE_CURVE('',#15701,#15702,#8686,.T.); #19693=EDGE_CURVE('',#15702,#15695,#8687,.T.); #19694=EDGE_CURVE('',#15703,#15702,#6567,.T.); #19695=EDGE_CURVE('',#15703,#15704,#8688,.T.); #19696=EDGE_CURVE('',#15695,#15704,#6568,.T.); #19697=EDGE_CURVE('',#15704,#15705,#8689,.T.); #19698=EDGE_CURVE('',#15705,#15706,#6569,.T.); #19699=EDGE_CURVE('',#15706,#15707,#8690,.T.); #19700=EDGE_CURVE('',#15696,#15707,#8691,.T.); #19701=EDGE_CURVE('',#15707,#15708,#6570,.T.); #19702=EDGE_CURVE('',#15697,#15708,#8692,.T.); #19703=EDGE_CURVE('',#15708,#15709,#8693,.T.); #19704=EDGE_CURVE('',#15698,#15709,#8694,.T.); #19705=EDGE_CURVE('',#15709,#15608,#6571,.T.); #19706=EDGE_CURVE('',#15706,#15710,#8695,.T.); #19707=EDGE_CURVE('',#15711,#15710,#8696,.T.); #19708=EDGE_CURVE('',#15712,#15711,#6572,.T.); #19709=EDGE_CURVE('',#15713,#15712,#8697,.T.); #19710=EDGE_CURVE('',#15690,#15713,#6573,.T.); #19711=EDGE_CURVE('',#15689,#15609,#8698,.T.); #19712=EDGE_CURVE('',#15705,#15714,#8699,.T.); #19713=EDGE_CURVE('',#15710,#15714,#6574,.T.); #19714=EDGE_CURVE('',#15701,#15711,#8700,.T.); #19715=EDGE_CURVE('',#15703,#15714,#8701,.T.); #19716=EDGE_CURVE('',#15700,#15712,#8702,.T.); #19717=EDGE_CURVE('',#15699,#15713,#8703,.T.); #19718=EDGE_CURVE('',#15629,#15670,#8704,.T.); #19719=EDGE_CURVE('',#15628,#15671,#8705,.T.); #19720=EDGE_CURVE('',#15630,#15683,#8706,.T.); #19721=EDGE_CURVE('',#15617,#15682,#8707,.T.); #19722=EDGE_CURVE('',#15618,#15681,#8708,.T.); #19723=EDGE_CURVE('',#15619,#15680,#8709,.T.); #19724=EDGE_CURVE('',#15675,#15624,#8710,.T.); #19725=EDGE_CURVE('',#15625,#15674,#8711,.T.); #19726=EDGE_CURVE('',#15620,#15679,#8712,.T.); #19727=EDGE_CURVE('',#15715,#15716,#8713,.T.); #19728=EDGE_CURVE('',#15716,#15717,#6575,.T.); #19729=EDGE_CURVE('',#15717,#15718,#8714,.T.); #19730=EDGE_CURVE('',#15718,#15621,#6576,.T.); #19731=EDGE_CURVE('',#15678,#15719,#6577,.T.); #19732=EDGE_CURVE('',#15719,#15720,#8715,.T.); #19733=EDGE_CURVE('',#15720,#15721,#6578,.T.); #19734=EDGE_CURVE('',#15721,#15722,#8716,.T.); #19735=EDGE_CURVE('',#15722,#15715,#8717,.T.); #19736=EDGE_CURVE('',#15723,#15722,#6579,.T.); #19737=EDGE_CURVE('',#15723,#15724,#8718,.T.); #19738=EDGE_CURVE('',#15715,#15724,#6580,.T.); #19739=EDGE_CURVE('',#15725,#15726,#8719,.T.); #19740=EDGE_CURVE('',#15726,#15716,#8720,.T.); #19741=EDGE_CURVE('',#15727,#15724,#8721,.T.); #19742=EDGE_CURVE('',#15727,#15725,#6581,.T.); #19743=EDGE_CURVE('',#15725,#15728,#8722,.T.); #19744=EDGE_CURVE('',#15727,#15729,#8723,.T.); #19745=EDGE_CURVE('',#15728,#15729,#6582,.T.); #19746=EDGE_CURVE('',#15729,#15723,#8724,.T.); #19747=EDGE_CURVE('',#15730,#15721,#8725,.T.); #19748=EDGE_CURVE('',#15730,#15728,#8726,.T.); #19749=EDGE_CURVE('',#15731,#15730,#6583,.T.); #19750=EDGE_CURVE('',#15732,#15731,#8727,.T.); #19751=EDGE_CURVE('',#15677,#15732,#6584,.T.); #19752=EDGE_CURVE('',#15676,#15623,#8728,.T.); #19753=EDGE_CURVE('',#15733,#15622,#6585,.T.); #19754=EDGE_CURVE('',#15734,#15733,#8729,.T.); #19755=EDGE_CURVE('',#15726,#15734,#6586,.T.); #19756=EDGE_CURVE('',#15734,#15717,#8730,.T.); #19757=EDGE_CURVE('',#15733,#15718,#8731,.T.); #19758=EDGE_CURVE('',#15732,#15719,#8732,.T.); #19759=EDGE_CURVE('',#15731,#15720,#8733,.T.); #19760=EDGE_CURVE('',#15626,#15673,#8734,.T.); #19761=EDGE_CURVE('',#15627,#15672,#8735,.T.); #19762=EDGE_CURVE('',#15529,#15501,#323,.T.); #19763=EDGE_CURVE('',#15332,#15272,#324,.T.); #19764=EDGE_CURVE('',#15594,#15735,#6587,.T.); #19765=EDGE_CURVE('',#15735,#15736,#8736,.T.); #19766=EDGE_CURVE('',#15591,#15736,#6588,.T.); #19767=EDGE_CURVE('',#15737,#15738,#8737,.T.); #19768=EDGE_CURVE('',#15738,#15739,#8738,.T.); #19769=EDGE_CURVE('',#15739,#15592,#6589,.T.); #19770=EDGE_CURVE('',#15736,#15737,#8739,.T.); #19771=EDGE_CURVE('',#15740,#15741,#6590,.T.); #19772=EDGE_CURVE('',#15741,#15742,#8740,.T.); #19773=EDGE_CURVE('',#15742,#15737,#6591,.T.); #19774=EDGE_CURVE('',#15735,#15740,#8741,.T.); #19775=EDGE_CURVE('',#15743,#15744,#8742,.T.); #19776=EDGE_CURVE('',#15744,#15745,#8743,.T.); #19777=EDGE_CURVE('',#15746,#15745,#8744,.T.); #19778=EDGE_CURVE('',#15746,#15747,#6592,.T.); #19779=EDGE_CURVE('',#15748,#15747,#8745,.T.); #19780=EDGE_CURVE('',#15748,#15743,#6593,.T.); #19781=EDGE_CURVE('',#15749,#15750,#8746,.T.); #19782=EDGE_CURVE('',#15750,#15751,#6594,.T.); #19783=EDGE_CURVE('',#15751,#15752,#8747,.T.); #19784=EDGE_CURVE('',#15752,#15753,#6595,.T.); #19785=EDGE_CURVE('',#15754,#15753,#8748,.T.); #19786=EDGE_CURVE('',#15754,#15749,#8749,.T.); #19787=EDGE_CURVE('',#15755,#15756,#6596,.T.); #19788=EDGE_CURVE('',#15757,#15756,#8750,.T.); #19789=EDGE_CURVE('',#15757,#15758,#6597,.T.); #19790=EDGE_CURVE('',#15758,#15759,#8751,.T.); #19791=EDGE_CURVE('',#15759,#15338,#8752,.T.); #19792=EDGE_CURVE('',#15337,#15524,#8753,.T.); #19793=EDGE_CURVE('',#15523,#15760,#8754,.T.); #19794=EDGE_CURVE('',#15755,#15760,#8755,.T.); #19795=EDGE_CURVE('',#15761,#15740,#8756,.T.); #19796=EDGE_CURVE('',#15762,#15761,#6598,.T.); #19797=EDGE_CURVE('',#15762,#15741,#8757,.T.); #19798=EDGE_CURVE('',#15762,#15763,#8758,.T.); #19799=EDGE_CURVE('',#15742,#15763,#8759,.T.); #19800=EDGE_CURVE('',#15738,#15763,#6599,.T.); #19801=EDGE_CURVE('',#15761,#15764,#8760,.T.); #19802=EDGE_CURVE('',#15764,#15739,#8761,.T.); #19803=EDGE_CURVE('',#15593,#15764,#6600,.T.); #19804=EDGE_CURVE('',#15525,#15744,#6601,.T.); #19805=EDGE_CURVE('',#15743,#15765,#8762,.T.); #19806=EDGE_CURVE('',#15766,#15765,#8763,.T.); #19807=EDGE_CURVE('',#15766,#15526,#6602,.T.); #19808=EDGE_CURVE('',#15749,#15336,#6603,.T.); #19809=EDGE_CURVE('',#15335,#15767,#6604,.T.); #19810=EDGE_CURVE('',#15768,#15767,#8764,.T.); #19811=EDGE_CURVE('',#15768,#15750,#8765,.T.); #19812=EDGE_CURVE('',#15528,#15745,#6605,.T.); #19813=EDGE_CURVE('',#15502,#15525,#6606,.T.); #19814=EDGE_CURVE('',#15336,#15271,#6607,.T.); #19815=EDGE_CURVE('',#15769,#15770,#6608,.T.); #19816=EDGE_CURVE('',#15771,#15770,#8766,.T.); #19817=EDGE_CURVE('',#15771,#15772,#6609,.T.); #19818=EDGE_CURVE('',#15772,#15773,#8767,.T.); #19819=EDGE_CURVE('',#15773,#15774,#8768,.T.); #19820=EDGE_CURVE('',#15775,#15774,#8769,.T.); #19821=EDGE_CURVE('',#15775,#15776,#6610,.T.); #19822=EDGE_CURVE('',#15777,#15776,#8770,.T.); #19823=EDGE_CURVE('',#15777,#15778,#6611,.T.); #19824=EDGE_CURVE('',#15779,#15778,#8771,.T.); #19825=EDGE_CURVE('',#15779,#15780,#6612,.T.); #19826=EDGE_CURVE('',#15781,#15780,#8772,.T.); #19827=EDGE_CURVE('',#15781,#15782,#6613,.T.); #19828=EDGE_CURVE('',#15769,#15782,#8773,.T.); #19829=EDGE_CURVE('',#15783,#15784,#6614,.T.); #19830=EDGE_CURVE('',#15784,#15785,#8774,.T.); #19831=EDGE_CURVE('',#15785,#15786,#6615,.T.); #19832=EDGE_CURVE('',#15786,#15787,#8775,.T.); #19833=EDGE_CURVE('',#15787,#15788,#6616,.T.); #19834=EDGE_CURVE('',#15788,#15789,#8776,.T.); #19835=EDGE_CURVE('',#15790,#15789,#8777,.T.); #19836=EDGE_CURVE('',#15791,#15790,#8778,.T.); #19837=EDGE_CURVE('',#15791,#15792,#6617,.T.); #19838=EDGE_CURVE('',#15792,#15793,#8779,.T.); #19839=EDGE_CURVE('',#15793,#15794,#6618,.T.); #19840=EDGE_CURVE('',#15794,#15795,#8780,.T.); #19841=EDGE_CURVE('',#15795,#15796,#6619,.T.); #19842=EDGE_CURVE('',#15796,#15783,#8781,.T.); #19843=EDGE_CURVE('',#15797,#15798,#6620,.T.); #19844=EDGE_CURVE('',#15798,#15799,#8782,.T.); #19845=EDGE_CURVE('',#15799,#15800,#6621,.T.); #19846=EDGE_CURVE('',#15800,#15797,#8783,.T.); #19847=EDGE_CURVE('',#15801,#15802,#6622,.T.); #19848=EDGE_CURVE('',#15802,#15803,#8784,.T.); #19849=EDGE_CURVE('',#15803,#15804,#6623,.T.); #19850=EDGE_CURVE('',#15804,#15801,#8785,.T.); #19851=EDGE_CURVE('',#15805,#15783,#8786,.T.); #19852=EDGE_CURVE('',#15806,#15796,#8787,.T.); #19853=EDGE_CURVE('',#15806,#15805,#8788,.T.); #19854=EDGE_CURVE('',#15807,#15784,#8789,.T.); #19855=EDGE_CURVE('',#15807,#15805,#6624,.T.); #19856=EDGE_CURVE('',#15807,#15808,#8790,.T.); #19857=EDGE_CURVE('',#15808,#15785,#8791,.T.); #19858=EDGE_CURVE('',#15809,#15786,#8792,.T.); #19859=EDGE_CURVE('',#15809,#15808,#6625,.T.); #19860=EDGE_CURVE('',#15810,#15792,#8793,.T.); #19861=EDGE_CURVE('',#15810,#15811,#8794,.T.); #19862=EDGE_CURVE('',#15811,#15793,#8795,.T.); #19863=EDGE_CURVE('',#15787,#15812,#8796,.T.); #19864=EDGE_CURVE('',#15809,#15812,#8797,.T.); #19865=EDGE_CURVE('',#15813,#15791,#8798,.T.); #19866=EDGE_CURVE('',#15810,#15813,#6626,.T.); #19867=EDGE_CURVE('',#15814,#15815,#8799,.T.); #19868=EDGE_CURVE('',#15760,#15815,#8800,.T.); #19869=EDGE_CURVE('',#15759,#15814,#8801,.T.); #19870=EDGE_CURVE('',#15816,#15817,#6627,.T.); #19871=EDGE_CURVE('',#15817,#15818,#8802,.T.); #19872=EDGE_CURVE('',#15818,#15819,#6628,.T.); #19873=EDGE_CURVE('',#15819,#15820,#8803,.T.); #19874=EDGE_CURVE('',#15820,#15821,#6629,.T.); #19875=EDGE_CURVE('',#15821,#15822,#8804,.T.); #19876=EDGE_CURVE('',#15822,#15823,#8805,.T.); #19877=EDGE_CURVE('',#15824,#15823,#8806,.T.); #19878=EDGE_CURVE('',#15824,#15825,#6630,.T.); #19879=EDGE_CURVE('',#15825,#15826,#8807,.T.); #19880=EDGE_CURVE('',#15826,#15827,#6631,.T.); #19881=EDGE_CURVE('',#15827,#15828,#8808,.T.); #19882=EDGE_CURVE('',#15828,#15829,#6632,.T.); #19883=EDGE_CURVE('',#15829,#15816,#8809,.T.); #19884=EDGE_CURVE('',#15830,#15831,#6633,.T.); #19885=EDGE_CURVE('',#15832,#15830,#8810,.T.); #19886=EDGE_CURVE('',#15833,#15832,#6634,.T.); #19887=EDGE_CURVE('',#15831,#15833,#8811,.T.); #19888=EDGE_CURVE('',#15834,#15835,#6635,.T.); #19889=EDGE_CURVE('',#15836,#15834,#8812,.T.); #19890=EDGE_CURVE('',#15837,#15836,#6636,.T.); #19891=EDGE_CURVE('',#15835,#15837,#8813,.T.); #19892=EDGE_CURVE('',#15838,#15811,#6637,.T.); #19893=EDGE_CURVE('',#15813,#15839,#8814,.T.); #19894=EDGE_CURVE('',#15840,#15839,#8815,.T.); #19895=EDGE_CURVE('',#15841,#15840,#8816,.T.); #19896=EDGE_CURVE('',#15841,#15812,#6638,.T.); #19897=EDGE_CURVE('',#15806,#15842,#6639,.T.); #19898=EDGE_CURVE('',#15838,#15842,#8817,.T.); #19899=EDGE_CURVE('',#15842,#15795,#8818,.T.); #19900=EDGE_CURVE('',#15838,#15794,#8819,.T.); #19901=EDGE_CURVE('',#15788,#15841,#8820,.T.); #19902=EDGE_CURVE('',#15789,#15840,#8821,.T.); #19903=EDGE_CURVE('',#15840,#15843,#6640,.T.); #19904=EDGE_CURVE('',#15844,#15843,#8822,.T.); #19905=EDGE_CURVE('',#15789,#15844,#557,.T.); #19906=EDGE_CURVE('',#15845,#15844,#8823,.T.); #19907=EDGE_CURVE('',#15790,#15845,#558,.T.); #19908=EDGE_CURVE('',#15846,#15845,#8824,.T.); #19909=EDGE_CURVE('',#15839,#15846,#6641,.T.); #19910=EDGE_CURVE('',#15839,#15790,#8825,.T.); #19911=EDGE_CURVE('',#15843,#15846,#8826,.T.); #19912=EDGE_CURVE('',#15846,#15847,#8827,.T.); #19913=EDGE_CURVE('',#15848,#15847,#8828,.T.); #19914=EDGE_CURVE('',#15843,#15848,#8829,.T.); #19915=EDGE_CURVE('',#15849,#15848,#8830,.T.); #19916=EDGE_CURVE('',#15844,#15849,#8831,.T.); #19917=EDGE_CURVE('',#15850,#15849,#8832,.T.); #19918=EDGE_CURVE('',#15845,#15850,#8833,.T.); #19919=EDGE_CURVE('',#15847,#15850,#8834,.T.); #19920=EDGE_CURVE('',#15850,#15851,#559,.T.); #19921=EDGE_CURVE('',#15852,#15851,#8835,.T.); #19922=EDGE_CURVE('',#15847,#15852,#560,.T.); #19923=EDGE_CURVE('',#15853,#15852,#8836,.T.); #19924=EDGE_CURVE('',#15848,#15853,#561,.T.); #19925=EDGE_CURVE('',#15854,#15853,#8837,.T.); #19926=EDGE_CURVE('',#15849,#15854,#562,.T.); #19927=EDGE_CURVE('',#15851,#15854,#8838,.T.); #19928=EDGE_CURVE('',#15855,#15856,#6642,.T.); #19929=EDGE_CURVE('',#15851,#15856,#8839,.T.); #19930=EDGE_CURVE('',#15854,#15857,#8840,.T.); #19931=EDGE_CURVE('',#15857,#15858,#6643,.T.); #19932=EDGE_CURVE('',#15855,#15858,#8841,.T.); #19933=EDGE_CURVE('',#15859,#15855,#8842,.T.); #19934=EDGE_CURVE('',#15860,#15859,#6644,.T.); #19935=EDGE_CURVE('',#15860,#15856,#8843,.T.); #19936=EDGE_CURVE('',#15852,#15860,#8844,.T.); #19937=EDGE_CURVE('',#15861,#15859,#8845,.T.); #19938=EDGE_CURVE('',#15861,#15862,#6645,.T.); #19939=EDGE_CURVE('',#15853,#15862,#8846,.T.); #19940=EDGE_CURVE('',#15857,#15862,#8847,.T.); #19941=EDGE_CURVE('',#15858,#15861,#8848,.T.); #19942=EDGE_CURVE('',#15781,#15829,#8849,.T.); #19943=EDGE_CURVE('',#15780,#15816,#8850,.T.); #19944=EDGE_CURVE('',#15782,#15828,#8851,.T.); #19945=EDGE_CURVE('',#15769,#15827,#8852,.T.); #19946=EDGE_CURVE('',#15770,#15826,#8853,.T.); #19947=EDGE_CURVE('',#15777,#15819,#8854,.T.); #19948=EDGE_CURVE('',#15820,#15776,#8855,.T.); #19949=EDGE_CURVE('',#15771,#15825,#8856,.T.); #19950=EDGE_CURVE('',#15778,#15818,#8857,.T.); #19951=EDGE_CURVE('',#15779,#15817,#8858,.T.); #19952=EDGE_CURVE('',#15821,#15775,#8859,.T.); #19953=EDGE_CURVE('',#15774,#15822,#8860,.T.); #19954=EDGE_CURVE('',#15774,#15863,#563,.T.); #19955=EDGE_CURVE('',#15863,#15864,#8861,.T.); #19956=EDGE_CURVE('',#15822,#15864,#6646,.T.); #19957=EDGE_CURVE('',#15864,#15865,#8862,.T.); #19958=EDGE_CURVE('',#15823,#15865,#6647,.T.); #19959=EDGE_CURVE('',#15823,#15773,#8863,.T.); #19960=EDGE_CURVE('',#15865,#15866,#8864,.T.); #19961=EDGE_CURVE('',#15773,#15866,#564,.T.); #19962=EDGE_CURVE('',#15772,#15824,#8865,.T.); #19963=EDGE_CURVE('',#15866,#15863,#8866,.T.); #19964=EDGE_CURVE('',#15866,#15867,#8867,.T.); #19965=EDGE_CURVE('',#15867,#15868,#8868,.T.); #19966=EDGE_CURVE('',#15863,#15868,#8869,.T.); #19967=EDGE_CURVE('',#15868,#15869,#8870,.T.); #19968=EDGE_CURVE('',#15864,#15869,#8871,.T.); #19969=EDGE_CURVE('',#15869,#15870,#8872,.T.); #19970=EDGE_CURVE('',#15865,#15870,#8873,.T.); #19971=EDGE_CURVE('',#15870,#15867,#8874,.T.); #19972=EDGE_CURVE('',#15870,#15871,#565,.T.); #19973=EDGE_CURVE('',#15871,#15872,#8875,.T.); #19974=EDGE_CURVE('',#15867,#15872,#566,.T.); #19975=EDGE_CURVE('',#15872,#15873,#8876,.T.); #19976=EDGE_CURVE('',#15868,#15873,#567,.T.); #19977=EDGE_CURVE('',#15873,#15874,#8877,.T.); #19978=EDGE_CURVE('',#15869,#15874,#568,.T.); #19979=EDGE_CURVE('',#15874,#15871,#8878,.T.); #19980=EDGE_CURVE('',#15875,#15876,#6648,.T.); #19981=EDGE_CURVE('',#15876,#15877,#8879,.T.); #19982=EDGE_CURVE('',#15877,#15878,#6649,.T.); #19983=EDGE_CURVE('',#15871,#15878,#8880,.T.); #19984=EDGE_CURVE('',#15874,#15875,#8881,.T.); #19985=EDGE_CURVE('',#15876,#15879,#8882,.T.); #19986=EDGE_CURVE('',#15875,#15880,#8883,.T.); #19987=EDGE_CURVE('',#15879,#15880,#6650,.T.); #19988=EDGE_CURVE('',#15873,#15880,#8884,.T.); #19989=EDGE_CURVE('',#15872,#15881,#8885,.T.); #19990=EDGE_CURVE('',#15881,#15882,#6651,.T.); #19991=EDGE_CURVE('',#15882,#15879,#8886,.T.); #19992=EDGE_CURVE('',#15882,#15877,#8887,.T.); #19993=EDGE_CURVE('',#15881,#15878,#8888,.T.); #19994=EDGE_CURVE('',#15833,#15797,#8889,.T.); #19995=EDGE_CURVE('',#15831,#15800,#8890,.T.); #19996=EDGE_CURVE('',#15830,#15799,#8891,.T.); #19997=EDGE_CURVE('',#15832,#15798,#8892,.T.); #19998=EDGE_CURVE('',#15837,#15801,#8893,.T.); #19999=EDGE_CURVE('',#15835,#15804,#8894,.T.); #20000=EDGE_CURVE('',#15834,#15803,#8895,.T.); #20001=EDGE_CURVE('',#15836,#15802,#8896,.T.); #20002=EDGE_CURVE('',#15758,#15883,#8897,.T.); #20003=EDGE_CURVE('',#15814,#15883,#8898,.T.); #20004=EDGE_CURVE('',#15757,#15884,#8899,.T.); #20005=EDGE_CURVE('',#15883,#15884,#6652,.T.); #20006=EDGE_CURVE('',#15815,#15885,#8900,.T.); #20007=EDGE_CURVE('',#15884,#15886,#8901,.T.); #20008=EDGE_CURVE('',#15886,#15885,#6653,.T.); #20009=EDGE_CURVE('',#15885,#15755,#8902,.T.); #20010=EDGE_CURVE('',#15886,#15756,#8903,.T.); #20011=EDGE_CURVE('',#15333,#15754,#6654,.T.); #20012=EDGE_CURVE('',#15527,#15887,#6655,.T.); #20013=EDGE_CURVE('',#15887,#15888,#8904,.T.); #20014=EDGE_CURVE('',#15888,#15746,#8905,.T.); #20015=EDGE_CURVE('',#15889,#15890,#8906,.T.); #20016=EDGE_CURVE('',#15890,#15334,#6656,.T.); #20017=EDGE_CURVE('',#15753,#15889,#8907,.T.); #20018=EDGE_CURVE('',#15891,#15888,#6657,.T.); #20019=EDGE_CURVE('',#15891,#15747,#8908,.T.); #20020=EDGE_CURVE('',#15892,#15891,#8909,.T.); #20021=EDGE_CURVE('',#15748,#15892,#8910,.T.); #20022=EDGE_CURVE('',#15765,#15892,#6658,.T.); #20023=EDGE_CURVE('',#15887,#15766,#8911,.T.); #20024=EDGE_CURVE('',#15752,#15893,#8912,.T.); #20025=EDGE_CURVE('',#15889,#15893,#6659,.T.); #20026=EDGE_CURVE('',#15894,#15893,#8913,.T.); #20027=EDGE_CURVE('',#15894,#15768,#6660,.T.); #20028=EDGE_CURVE('',#15767,#15890,#8914,.T.); #20029=EDGE_CURVE('',#15894,#15751,#8915,.T.); #20030=EDGE_CURVE('',#15669,#15597,#8916,.T.); #20031=EDGE_CURVE('',#15895,#15596,#8917,.T.); #20032=EDGE_CURVE('',#15896,#15895,#8918,.T.); #20033=EDGE_CURVE('',#15896,#15595,#8919,.T.); #20034=EDGE_CURVE('',#15897,#15896,#8920,.T.); #20035=EDGE_CURVE('',#15897,#15898,#8921,.T.); #20036=EDGE_CURVE('',#15898,#15899,#8922,.T.); #20037=EDGE_CURVE('',#15595,#15899,#8923,.T.); #20038=EDGE_CURVE('',#15899,#15900,#8924,.T.); #20039=EDGE_CURVE('',#15900,#15901,#8925,.T.); #20040=EDGE_CURVE('',#15901,#15902,#8926,.T.); #20041=EDGE_CURVE('',#15902,#15903,#8927,.T.); #20042=EDGE_CURVE('',#15903,#15904,#8928,.T.); #20043=EDGE_CURVE('',#15904,#15905,#8929,.T.); #20044=EDGE_CURVE('',#15905,#15906,#8930,.T.); #20045=EDGE_CURVE('',#15906,#15907,#8931,.T.); #20046=EDGE_CURVE('',#15907,#15908,#8932,.T.); #20047=EDGE_CURVE('',#15908,#15602,#8933,.T.); #20048=EDGE_CURVE('',#15601,#15909,#8934,.T.); #20049=EDGE_CURVE('',#15910,#15909,#8935,.T.); #20050=EDGE_CURVE('',#15596,#15910,#8936,.T.); #20051=EDGE_CURVE('',#15910,#15911,#8937,.T.); #20052=EDGE_CURVE('',#15912,#15911,#8938,.T.); #20053=EDGE_CURVE('',#15895,#15912,#8939,.T.); #20054=EDGE_CURVE('',#15913,#15897,#8940,.T.); #20055=EDGE_CURVE('',#15912,#15914,#8941,.T.); #20056=EDGE_CURVE('',#15915,#15914,#8942,.T.); #20057=EDGE_CURVE('',#15916,#15915,#8943,.T.); #20058=EDGE_CURVE('',#15913,#15916,#8944,.T.); #20059=EDGE_CURVE('',#15917,#15908,#8945,.T.); #20060=EDGE_CURVE('',#15917,#15913,#8946,.T.); #20061=EDGE_CURVE('',#15916,#15602,#8947,.T.); #20062=EDGE_CURVE('',#15915,#15601,#8948,.T.); #20063=EDGE_CURVE('',#15666,#15600,#8949,.T.); #20064=EDGE_CURVE('',#15667,#15599,#8950,.T.); #20065=EDGE_CURVE('',#15668,#15598,#8951,.T.); #20066=EDGE_CURVE('',#15918,#15914,#8952,.T.); #20067=EDGE_CURVE('',#15909,#15918,#8953,.T.); #20068=EDGE_CURVE('',#15911,#15918,#8954,.T.); #20069=EDGE_CURVE('',#15917,#15488,#8955,.T.); #20070=EDGE_CURVE('',#15304,#15898,#8956,.T.); #20071=EDGE_CURVE('',#15919,#15920,#8957,.T.); #20072=EDGE_CURVE('',#15921,#15919,#8958,.T.); #20073=EDGE_CURVE('',#15922,#15921,#8959,.T.); #20074=EDGE_CURVE('',#15923,#15922,#8960,.T.); #20075=EDGE_CURVE('',#15924,#15923,#8961,.T.); #20076=EDGE_CURVE('',#15925,#15924,#8962,.T.); #20077=EDGE_CURVE('',#15926,#15925,#8963,.T.); #20078=EDGE_CURVE('',#15927,#15926,#8964,.T.); #20079=EDGE_CURVE('',#15928,#15927,#8965,.T.); #20080=EDGE_CURVE('',#15929,#15928,#8966,.T.); #20081=EDGE_CURVE('',#15930,#15929,#8967,.T.); #20082=EDGE_CURVE('',#15931,#15930,#8968,.T.); #20083=EDGE_CURVE('',#15932,#15931,#8969,.T.); #20084=EDGE_CURVE('',#15933,#15932,#8970,.T.); #20085=EDGE_CURVE('',#15934,#15933,#8971,.T.); #20086=EDGE_CURVE('',#15935,#15934,#8972,.T.); #20087=EDGE_CURVE('',#15936,#15935,#8973,.T.); #20088=EDGE_CURVE('',#15937,#15936,#8974,.T.); #20089=EDGE_CURVE('',#15938,#15937,#8975,.T.); #20090=EDGE_CURVE('',#15920,#15938,#8976,.T.); #20091=EDGE_CURVE('',#15384,#15900,#8977,.T.); #20092=EDGE_CURVE('',#15383,#15901,#8978,.T.); #20093=EDGE_CURVE('',#15382,#15902,#8979,.T.); #20094=EDGE_CURVE('',#15939,#15454,#8980,.T.); #20095=EDGE_CURVE('',#15939,#15903,#8981,.T.); #20096=EDGE_CURVE('',#15940,#15941,#8982,.T.); #20097=EDGE_CURVE('',#15940,#15904,#8983,.T.); #20098=EDGE_CURVE('',#15939,#15942,#8984,.T.); #20099=EDGE_CURVE('',#15942,#15943,#8985,.T.); #20100=EDGE_CURVE('',#15944,#15943,#8986,.T.); #20101=EDGE_CURVE('',#15945,#15944,#8987,.T.); #20102=EDGE_CURVE('',#15946,#15945,#8988,.T.); #20103=EDGE_CURVE('',#15946,#15947,#8989,.T.); #20104=EDGE_CURVE('',#15948,#15947,#8990,.T.); #20105=EDGE_CURVE('',#15948,#15949,#8991,.T.); #20106=EDGE_CURVE('',#15950,#15949,#8992,.T.); #20107=EDGE_CURVE('',#15951,#15950,#8993,.T.); #20108=EDGE_CURVE('',#15952,#15951,#8994,.T.); #20109=EDGE_CURVE('',#15952,#15953,#8995,.T.); #20110=EDGE_CURVE('',#15954,#15953,#8996,.T.); #20111=EDGE_CURVE('',#15954,#15955,#8997,.T.); #20112=EDGE_CURVE('',#15956,#15955,#8998,.T.); #20113=EDGE_CURVE('',#15957,#15956,#8999,.T.); #20114=EDGE_CURVE('',#15958,#15957,#9000,.T.); #20115=EDGE_CURVE('',#15958,#15959,#9001,.T.); #20116=EDGE_CURVE('',#15960,#15959,#9002,.T.); #20117=EDGE_CURVE('',#15960,#15961,#9003,.T.); #20118=EDGE_CURVE('',#15962,#15961,#9004,.T.); #20119=EDGE_CURVE('',#15963,#15962,#9005,.T.); #20120=EDGE_CURVE('',#15964,#15963,#9006,.T.); #20121=EDGE_CURVE('',#15964,#15941,#9007,.T.); #20122=EDGE_CURVE('',#15399,#15964,#9008,.T.); #20123=EDGE_CURVE('',#15398,#15941,#9009,.T.); #20124=EDGE_CURVE('',#15940,#15397,#9010,.T.); #20125=EDGE_CURVE('',#15380,#15905,#9011,.T.); #20126=EDGE_CURVE('',#15906,#15379,#9012,.T.); #20127=EDGE_CURVE('',#15378,#15907,#9013,.T.); #20128=EDGE_CURVE('',#15963,#15404,#9014,.T.); #20129=EDGE_CURVE('',#15403,#15400,#9015,.T.); #20130=EDGE_CURVE('',#15406,#15965,#9016,.T.); #20131=EDGE_CURVE('',#15406,#15409,#9017,.T.); #20132=EDGE_CURVE('',#15409,#15966,#9018,.T.); #20133=EDGE_CURVE('',#15965,#15966,#9019,.T.); #20134=EDGE_CURVE('',#15967,#15400,#9020,.T.); #20135=EDGE_CURVE('',#15968,#15403,#9021,.T.); #20136=EDGE_CURVE('',#15968,#15967,#9022,.T.); #20137=EDGE_CURVE('',#15969,#15970,#9023,.T.); #20138=EDGE_CURVE('',#15965,#15969,#9024,.T.); #20139=EDGE_CURVE('',#15970,#15966,#9025,.T.); #20140=EDGE_CURVE('',#15969,#15971,#9026,.T.); #20141=EDGE_CURVE('',#15970,#15972,#9027,.T.); #20142=EDGE_CURVE('',#15972,#15971,#9028,.T.); #20143=EDGE_CURVE('',#15973,#15971,#9029,.T.); #20144=EDGE_CURVE('',#15973,#15974,#9030,.T.); #20145=EDGE_CURVE('',#15974,#15975,#9031,.T.); #20146=EDGE_CURVE('',#15975,#15976,#9032,.T.); #20147=EDGE_CURVE('',#15968,#15976,#9033,.T.); #20148=EDGE_CURVE('',#15977,#15402,#9034,.T.); #20149=EDGE_CURVE('',#15978,#15977,#9035,.T.); #20150=EDGE_CURVE('',#15978,#15407,#9036,.T.); #20151=EDGE_CURVE('',#15979,#15980,#9037,.T.); #20152=EDGE_CURVE('',#15981,#15980,#9038,.T.); #20153=EDGE_CURVE('',#15982,#15981,#6661,.T.); #20154=EDGE_CURVE('',#15983,#15982,#9039,.T.); #20155=EDGE_CURVE('',#15984,#15983,#6662,.T.); #20156=EDGE_CURVE('',#15985,#15984,#9040,.T.); #20157=EDGE_CURVE('',#15986,#15985,#6663,.T.); #20158=EDGE_CURVE('',#15987,#15986,#9041,.T.); #20159=EDGE_CURVE('',#15988,#15987,#6664,.T.); #20160=EDGE_CURVE('',#15408,#15988,#9042,.T.); #20161=EDGE_CURVE('',#15989,#15978,#6665,.T.); #20162=EDGE_CURVE('',#15990,#15989,#9043,.T.); #20163=EDGE_CURVE('',#15991,#15990,#6666,.T.); #20164=EDGE_CURVE('',#15992,#15991,#9044,.T.); #20165=EDGE_CURVE('',#15993,#15992,#6667,.T.); #20166=EDGE_CURVE('',#15994,#15993,#9045,.T.); #20167=EDGE_CURVE('',#15995,#15994,#6668,.T.); #20168=EDGE_CURVE('',#15979,#15995,#9046,.T.); #20169=EDGE_CURVE('',#15996,#15997,#9047,.T.); #20170=EDGE_CURVE('',#15998,#15996,#9048,.T.); #20171=EDGE_CURVE('',#15999,#15998,#9049,.T.); #20172=EDGE_CURVE('',#15999,#15997,#9050,.T.); #20173=EDGE_CURVE('',#15979,#16000,#9051,.T.); #20174=EDGE_CURVE('',#16000,#16001,#9052,.T.); #20175=EDGE_CURVE('',#15980,#16001,#9053,.T.); #20176=EDGE_CURVE('',#16002,#16003,#9054,.T.); #20177=EDGE_CURVE('',#16004,#16002,#9055,.T.); #20178=EDGE_CURVE('',#16005,#16004,#9056,.T.); #20179=EDGE_CURVE('',#16005,#16003,#9057,.T.); #20180=EDGE_CURVE('',#16006,#16007,#9058,.T.); #20181=EDGE_CURVE('',#16007,#16008,#9059,.T.); #20182=EDGE_CURVE('',#16009,#16008,#9060,.T.); #20183=EDGE_CURVE('',#16006,#16009,#9061,.T.); #20184=EDGE_CURVE('',#16010,#16011,#9062,.T.); #20185=EDGE_CURVE('',#16012,#16010,#9063,.T.); #20186=EDGE_CURVE('',#16013,#16012,#9064,.T.); #20187=EDGE_CURVE('',#16013,#16011,#9065,.T.); #20188=EDGE_CURVE('',#16014,#16015,#9066,.T.); #20189=EDGE_CURVE('',#16015,#16016,#9067,.T.); #20190=EDGE_CURVE('',#16017,#16016,#9068,.T.); #20191=EDGE_CURVE('',#16014,#16017,#9069,.T.); #20192=EDGE_CURVE('',#16018,#16019,#9070,.T.); #20193=EDGE_CURVE('',#16020,#16018,#9071,.T.); #20194=EDGE_CURVE('',#16021,#16020,#9072,.T.); #20195=EDGE_CURVE('',#16021,#16019,#9073,.T.); #20196=EDGE_CURVE('',#16022,#16023,#9074,.T.); #20197=EDGE_CURVE('',#16023,#16024,#9075,.T.); #20198=EDGE_CURVE('',#16025,#16024,#9076,.T.); #20199=EDGE_CURVE('',#16022,#16025,#9077,.T.); #20200=EDGE_CURVE('',#15932,#16026,#9078,.T.); #20201=EDGE_CURVE('',#15931,#16019,#9079,.T.); #20202=EDGE_CURVE('',#15928,#16021,#9080,.T.); #20203=EDGE_CURVE('',#15927,#16011,#9081,.T.); #20204=EDGE_CURVE('',#15924,#16013,#9082,.T.); #20205=EDGE_CURVE('',#15923,#16003,#9083,.T.); #20206=EDGE_CURVE('',#15919,#16005,#9084,.T.); #20207=EDGE_CURVE('',#15920,#15997,#9085,.T.); #20208=EDGE_CURVE('',#15936,#15999,#9086,.T.); #20209=EDGE_CURVE('',#15935,#16027,#9087,.T.); #20210=EDGE_CURVE('',#16026,#16027,#9088,.T.); #20211=EDGE_CURVE('',#16028,#16027,#9089,.T.); #20212=EDGE_CURVE('',#16029,#16028,#9090,.T.); #20213=EDGE_CURVE('',#16029,#16026,#9091,.T.); #20214=EDGE_CURVE('',#16030,#16029,#9092,.T.); #20215=EDGE_CURVE('',#16030,#16031,#9093,.T.); #20216=EDGE_CURVE('',#16031,#16026,#9094,.T.); #20217=EDGE_CURVE('',#15933,#16031,#9095,.T.); #20218=EDGE_CURVE('',#15934,#16032,#9096,.T.); #20219=EDGE_CURVE('',#16032,#16031,#9097,.T.); #20220=EDGE_CURVE('',#16033,#16032,#9098,.T.); #20221=EDGE_CURVE('',#16033,#16030,#9099,.T.); #20222=EDGE_CURVE('',#16028,#16033,#9100,.T.); #20223=EDGE_CURVE('',#16027,#16032,#9101,.T.); #20224=EDGE_CURVE('',#15937,#15459,#9102,.T.); #20225=EDGE_CURVE('',#15998,#15460,#9103,.T.); #20226=EDGE_CURVE('',#15996,#15457,#9104,.T.); #20227=EDGE_CURVE('',#15938,#15458,#9105,.T.); #20228=EDGE_CURVE('',#15921,#15463,#9106,.T.); #20229=EDGE_CURVE('',#16004,#15464,#9107,.T.); #20230=EDGE_CURVE('',#16002,#15461,#9108,.T.); #20231=EDGE_CURVE('',#15922,#15462,#9109,.T.); #20232=EDGE_CURVE('',#15925,#15470,#9110,.T.); #20233=EDGE_CURVE('',#16012,#15471,#9111,.T.); #20234=EDGE_CURVE('',#16010,#15472,#9112,.T.); #20235=EDGE_CURVE('',#15926,#15469,#9113,.T.); #20236=EDGE_CURVE('',#15929,#15466,#9114,.T.); #20237=EDGE_CURVE('',#16020,#15467,#9115,.T.); #20238=EDGE_CURVE('',#16018,#15468,#9116,.T.); #20239=EDGE_CURVE('',#15930,#15465,#9117,.T.); #20240=EDGE_CURVE('',#16034,#16001,#9118,.T.); #20241=EDGE_CURVE('',#15981,#16034,#9119,.T.); #20242=EDGE_CURVE('',#16035,#16034,#6669,.T.); #20243=EDGE_CURVE('',#15982,#16035,#9120,.T.); #20244=EDGE_CURVE('',#16036,#16035,#9121,.T.); #20245=EDGE_CURVE('',#15983,#16036,#9122,.T.); #20246=EDGE_CURVE('',#16037,#16036,#6670,.T.); #20247=EDGE_CURVE('',#15984,#16037,#9123,.T.); #20248=EDGE_CURVE('',#16038,#16037,#9124,.T.); #20249=EDGE_CURVE('',#15985,#16038,#9125,.T.); #20250=EDGE_CURVE('',#16039,#16038,#6671,.T.); #20251=EDGE_CURVE('',#15986,#16039,#9126,.T.); #20252=EDGE_CURVE('',#16040,#16039,#9127,.T.); #20253=EDGE_CURVE('',#15987,#16040,#9128,.T.); #20254=EDGE_CURVE('',#16041,#16040,#6672,.T.); #20255=EDGE_CURVE('',#15988,#16041,#9129,.T.); #20256=EDGE_CURVE('',#15401,#16041,#9130,.T.); #20257=EDGE_CURVE('',#16042,#15967,#9131,.T.); #20258=EDGE_CURVE('',#16043,#16042,#9132,.T.); #20259=EDGE_CURVE('',#16044,#16043,#9133,.T.); #20260=EDGE_CURVE('',#16045,#16044,#9134,.T.); #20261=EDGE_CURVE('',#16045,#15972,#9135,.T.); #20262=EDGE_CURVE('',#15973,#16045,#9136,.T.); #20263=EDGE_CURVE('',#15974,#16044,#9137,.T.); #20264=EDGE_CURVE('',#16043,#15975,#9138,.T.); #20265=EDGE_CURVE('',#15976,#16042,#9139,.T.); #20266=EDGE_CURVE('',#16000,#16046,#9140,.T.); #20267=EDGE_CURVE('',#16046,#16047,#6673,.T.); #20268=EDGE_CURVE('',#16047,#16048,#9141,.T.); #20269=EDGE_CURVE('',#16048,#16049,#6674,.T.); #20270=EDGE_CURVE('',#16049,#16050,#9142,.T.); #20271=EDGE_CURVE('',#16050,#16051,#6675,.T.); #20272=EDGE_CURVE('',#16051,#16052,#9143,.T.); #20273=EDGE_CURVE('',#16052,#15977,#6676,.T.); #20274=EDGE_CURVE('',#15989,#16052,#9144,.T.); #20275=EDGE_CURVE('',#15990,#16051,#9145,.T.); #20276=EDGE_CURVE('',#15991,#16050,#9146,.T.); #20277=EDGE_CURVE('',#15992,#16049,#9147,.T.); #20278=EDGE_CURVE('',#15993,#16048,#9148,.T.); #20279=EDGE_CURVE('',#15994,#16047,#9149,.T.); #20280=EDGE_CURVE('',#15995,#16046,#9150,.T.); #20281=EDGE_CURVE('',#16053,#16009,#9151,.T.); #20282=EDGE_CURVE('',#16054,#16053,#6677,.T.); #20283=EDGE_CURVE('',#16055,#16054,#9152,.T.); #20284=EDGE_CURVE('',#16056,#16055,#6678,.T.); #20285=EDGE_CURVE('',#16057,#16056,#9153,.T.); #20286=EDGE_CURVE('',#16058,#16057,#6679,.T.); #20287=EDGE_CURVE('',#16059,#16058,#9154,.T.); #20288=EDGE_CURVE('',#16060,#16059,#6680,.T.); #20289=EDGE_CURVE('',#15422,#16060,#9155,.T.); #20290=EDGE_CURVE('',#16061,#15421,#9156,.T.); #20291=EDGE_CURVE('',#16062,#16061,#6681,.T.); #20292=EDGE_CURVE('',#16063,#16062,#9157,.T.); #20293=EDGE_CURVE('',#16064,#16063,#6682,.T.); #20294=EDGE_CURVE('',#16065,#16064,#9158,.T.); #20295=EDGE_CURVE('',#16066,#16065,#6683,.T.); #20296=EDGE_CURVE('',#16067,#16066,#9159,.T.); #20297=EDGE_CURVE('',#16068,#16067,#6684,.T.); #20298=EDGE_CURVE('',#16006,#16068,#9160,.T.); #20299=EDGE_CURVE('',#16068,#16069,#9161,.T.); #20300=EDGE_CURVE('',#16007,#16069,#9162,.T.); #20301=EDGE_CURVE('',#16069,#16070,#6685,.T.); #20302=EDGE_CURVE('',#16070,#16071,#9163,.T.); #20303=EDGE_CURVE('',#16071,#16072,#6686,.T.); #20304=EDGE_CURVE('',#16072,#16073,#9164,.T.); #20305=EDGE_CURVE('',#16073,#16074,#6687,.T.); #20306=EDGE_CURVE('',#16074,#16075,#9165,.T.); #20307=EDGE_CURVE('',#16075,#16076,#6688,.T.); #20308=EDGE_CURVE('',#16076,#15416,#9166,.T.); #20309=EDGE_CURVE('',#15415,#16077,#9167,.T.); #20310=EDGE_CURVE('',#16077,#16078,#6689,.T.); #20311=EDGE_CURVE('',#16078,#16079,#9168,.T.); #20312=EDGE_CURVE('',#16079,#16080,#6690,.T.); #20313=EDGE_CURVE('',#16080,#16081,#9169,.T.); #20314=EDGE_CURVE('',#16081,#16082,#6691,.T.); #20315=EDGE_CURVE('',#16082,#16083,#9170,.T.); #20316=EDGE_CURVE('',#16083,#16084,#6692,.T.); #20317=EDGE_CURVE('',#16084,#16008,#9171,.T.); #20318=EDGE_CURVE('',#16053,#16084,#9172,.T.); #20319=EDGE_CURVE('',#16054,#16083,#9173,.T.); #20320=EDGE_CURVE('',#16055,#16082,#9174,.T.); #20321=EDGE_CURVE('',#16056,#16081,#9175,.T.); #20322=EDGE_CURVE('',#16057,#16080,#9176,.T.); #20323=EDGE_CURVE('',#16058,#16079,#9177,.T.); #20324=EDGE_CURVE('',#16059,#16078,#9178,.T.); #20325=EDGE_CURVE('',#16060,#16077,#9179,.T.); #20326=EDGE_CURVE('',#16085,#16086,#9180,.T.); #20327=EDGE_CURVE('',#15423,#16086,#9181,.T.); #20328=EDGE_CURVE('',#16087,#15414,#9182,.T.); #20329=EDGE_CURVE('',#16088,#16087,#9183,.T.); #20330=EDGE_CURVE('',#16089,#16088,#9184,.T.); #20331=EDGE_CURVE('',#16090,#16089,#9185,.T.); #20332=EDGE_CURVE('',#16091,#16090,#9186,.T.); #20333=EDGE_CURVE('',#16091,#16092,#9187,.T.); #20334=EDGE_CURVE('',#16085,#16092,#9188,.T.); #20335=EDGE_CURVE('',#16093,#16094,#9189,.T.); #20336=EDGE_CURVE('',#16093,#16085,#9190,.T.); #20337=EDGE_CURVE('',#16092,#16094,#9191,.T.); #20338=EDGE_CURVE('',#16095,#16094,#9192,.T.); #20339=EDGE_CURVE('',#16095,#16096,#9193,.T.); #20340=EDGE_CURVE('',#16096,#16097,#9194,.T.); #20341=EDGE_CURVE('',#16097,#16098,#9195,.T.); #20342=EDGE_CURVE('',#16099,#16098,#9196,.T.); #20343=EDGE_CURVE('',#16099,#15417,#9197,.T.); #20344=EDGE_CURVE('',#16061,#16076,#9198,.T.); #20345=EDGE_CURVE('',#15420,#16100,#9199,.T.); #20346=EDGE_CURVE('',#16100,#16093,#9200,.T.); #20347=EDGE_CURVE('',#16100,#16086,#9201,.T.); #20348=EDGE_CURVE('',#15420,#15423,#9202,.T.); #20349=EDGE_CURVE('',#16099,#16087,#9203,.T.); #20350=EDGE_CURVE('',#15417,#15414,#9204,.T.); #20351=EDGE_CURVE('',#15956,#15419,#9205,.T.); #20352=EDGE_CURVE('',#15424,#15955,#9206,.T.); #20353=EDGE_CURVE('',#15425,#15954,#9207,.T.); #20354=EDGE_CURVE('',#15426,#15953,#9208,.T.); #20355=EDGE_CURVE('',#15427,#15952,#9209,.T.); #20356=EDGE_CURVE('',#15431,#15428,#9210,.T.); #20357=EDGE_CURVE('',#15951,#15432,#9211,.T.); #20358=EDGE_CURVE('',#15434,#16101,#9212,.T.); #20359=EDGE_CURVE('',#15434,#15437,#9213,.T.); #20360=EDGE_CURVE('',#15437,#16102,#9214,.T.); #20361=EDGE_CURVE('',#16101,#16102,#9215,.T.); #20362=EDGE_CURVE('',#16103,#15428,#9216,.T.); #20363=EDGE_CURVE('',#16104,#15431,#9217,.T.); #20364=EDGE_CURVE('',#16104,#16103,#9218,.T.); #20365=EDGE_CURVE('',#16105,#16106,#9219,.T.); #20366=EDGE_CURVE('',#16101,#16105,#9220,.T.); #20367=EDGE_CURVE('',#16106,#16102,#9221,.T.); #20368=EDGE_CURVE('',#16105,#16107,#9222,.T.); #20369=EDGE_CURVE('',#16106,#16108,#9223,.T.); #20370=EDGE_CURVE('',#16108,#16107,#9224,.T.); #20371=EDGE_CURVE('',#16109,#16107,#9225,.T.); #20372=EDGE_CURVE('',#16109,#16110,#9226,.T.); #20373=EDGE_CURVE('',#16110,#16111,#9227,.T.); #20374=EDGE_CURVE('',#16111,#16112,#9228,.T.); #20375=EDGE_CURVE('',#16104,#16112,#9229,.T.); #20376=EDGE_CURVE('',#16113,#15430,#9230,.T.); #20377=EDGE_CURVE('',#16114,#16113,#9231,.T.); #20378=EDGE_CURVE('',#16114,#15435,#9232,.T.); #20379=EDGE_CURVE('',#16115,#16017,#9233,.T.); #20380=EDGE_CURVE('',#16116,#16115,#6693,.T.); #20381=EDGE_CURVE('',#16117,#16116,#9234,.T.); #20382=EDGE_CURVE('',#16118,#16117,#6694,.T.); #20383=EDGE_CURVE('',#16119,#16118,#9235,.T.); #20384=EDGE_CURVE('',#16120,#16119,#6695,.T.); #20385=EDGE_CURVE('',#16121,#16120,#9236,.T.); #20386=EDGE_CURVE('',#16122,#16121,#6696,.T.); #20387=EDGE_CURVE('',#15436,#16122,#9237,.T.); #20388=EDGE_CURVE('',#16123,#16114,#6697,.T.); #20389=EDGE_CURVE('',#16124,#16123,#9238,.T.); #20390=EDGE_CURVE('',#16125,#16124,#6698,.T.); #20391=EDGE_CURVE('',#16126,#16125,#9239,.T.); #20392=EDGE_CURVE('',#16127,#16126,#6699,.T.); #20393=EDGE_CURVE('',#16128,#16127,#9240,.T.); #20394=EDGE_CURVE('',#16129,#16128,#6700,.T.); #20395=EDGE_CURVE('',#16014,#16129,#9241,.T.); #20396=EDGE_CURVE('',#16129,#16130,#9242,.T.); #20397=EDGE_CURVE('',#16015,#16130,#9243,.T.); #20398=EDGE_CURVE('',#16130,#16131,#6701,.T.); #20399=EDGE_CURVE('',#16131,#16132,#9244,.T.); #20400=EDGE_CURVE('',#16132,#16133,#6702,.T.); #20401=EDGE_CURVE('',#16133,#16134,#9245,.T.); #20402=EDGE_CURVE('',#16134,#16135,#6703,.T.); #20403=EDGE_CURVE('',#16135,#16136,#9246,.T.); #20404=EDGE_CURVE('',#16136,#16113,#6704,.T.); #20405=EDGE_CURVE('',#15429,#16137,#9247,.T.); #20406=EDGE_CURVE('',#16137,#16138,#6705,.T.); #20407=EDGE_CURVE('',#16138,#16139,#9248,.T.); #20408=EDGE_CURVE('',#16139,#16140,#6706,.T.); #20409=EDGE_CURVE('',#16140,#16141,#9249,.T.); #20410=EDGE_CURVE('',#16141,#16142,#6707,.T.); #20411=EDGE_CURVE('',#16142,#16143,#9250,.T.); #20412=EDGE_CURVE('',#16143,#16144,#6708,.T.); #20413=EDGE_CURVE('',#16144,#16016,#9251,.T.); #20414=EDGE_CURVE('',#16115,#16144,#9252,.T.); #20415=EDGE_CURVE('',#16116,#16143,#9253,.T.); #20416=EDGE_CURVE('',#16117,#16142,#9254,.T.); #20417=EDGE_CURVE('',#16118,#16141,#9255,.T.); #20418=EDGE_CURVE('',#16119,#16140,#9256,.T.); #20419=EDGE_CURVE('',#16120,#16139,#9257,.T.); #20420=EDGE_CURVE('',#16121,#16138,#9258,.T.); #20421=EDGE_CURVE('',#16122,#16137,#9259,.T.); #20422=EDGE_CURVE('',#16145,#16103,#9260,.T.); #20423=EDGE_CURVE('',#16146,#16145,#9261,.T.); #20424=EDGE_CURVE('',#16147,#16146,#9262,.T.); #20425=EDGE_CURVE('',#16148,#16147,#9263,.T.); #20426=EDGE_CURVE('',#16148,#16108,#9264,.T.); #20427=EDGE_CURVE('',#16109,#16148,#9265,.T.); #20428=EDGE_CURVE('',#16110,#16147,#9266,.T.); #20429=EDGE_CURVE('',#16146,#16111,#9267,.T.); #20430=EDGE_CURVE('',#16112,#16145,#9268,.T.); #20431=EDGE_CURVE('',#16123,#16136,#9269,.T.); #20432=EDGE_CURVE('',#16124,#16135,#9270,.T.); #20433=EDGE_CURVE('',#16125,#16134,#9271,.T.); #20434=EDGE_CURVE('',#16126,#16133,#9272,.T.); #20435=EDGE_CURVE('',#16127,#16132,#9273,.T.); #20436=EDGE_CURVE('',#16128,#16131,#9274,.T.); #20437=EDGE_CURVE('',#15950,#15433,#9275,.T.); #20438=EDGE_CURVE('',#15438,#15949,#9276,.T.); #20439=EDGE_CURVE('',#15439,#15948,#9277,.T.); #20440=EDGE_CURVE('',#15440,#15947,#9278,.T.); #20441=EDGE_CURVE('',#15441,#15946,#9279,.T.); #20442=EDGE_CURVE('',#15445,#15442,#9280,.T.); #20443=EDGE_CURVE('',#15945,#15446,#9281,.T.); #20444=EDGE_CURVE('',#15448,#16149,#9282,.T.); #20445=EDGE_CURVE('',#15448,#15451,#9283,.T.); #20446=EDGE_CURVE('',#15451,#16150,#9284,.T.); #20447=EDGE_CURVE('',#16149,#16150,#9285,.T.); #20448=EDGE_CURVE('',#16151,#15442,#9286,.T.); #20449=EDGE_CURVE('',#16152,#15445,#9287,.T.); #20450=EDGE_CURVE('',#16152,#16151,#9288,.T.); #20451=EDGE_CURVE('',#16153,#16154,#9289,.T.); #20452=EDGE_CURVE('',#16149,#16153,#9290,.T.); #20453=EDGE_CURVE('',#16154,#16150,#9291,.T.); #20454=EDGE_CURVE('',#16153,#16155,#9292,.T.); #20455=EDGE_CURVE('',#16154,#16156,#9293,.T.); #20456=EDGE_CURVE('',#16156,#16155,#9294,.T.); #20457=EDGE_CURVE('',#16157,#16155,#9295,.T.); #20458=EDGE_CURVE('',#16157,#16158,#9296,.T.); #20459=EDGE_CURVE('',#16158,#16159,#9297,.T.); #20460=EDGE_CURVE('',#16159,#16160,#9298,.T.); #20461=EDGE_CURVE('',#16152,#16160,#9299,.T.); #20462=EDGE_CURVE('',#16161,#15444,#9300,.T.); #20463=EDGE_CURVE('',#16162,#16161,#9301,.T.); #20464=EDGE_CURVE('',#16162,#15449,#9302,.T.); #20465=EDGE_CURVE('',#16163,#16025,#9303,.T.); #20466=EDGE_CURVE('',#16164,#16163,#6709,.T.); #20467=EDGE_CURVE('',#16165,#16164,#9304,.T.); #20468=EDGE_CURVE('',#16166,#16165,#6710,.T.); #20469=EDGE_CURVE('',#16167,#16166,#9305,.T.); #20470=EDGE_CURVE('',#16168,#16167,#6711,.T.); #20471=EDGE_CURVE('',#16169,#16168,#9306,.T.); #20472=EDGE_CURVE('',#16170,#16169,#6712,.T.); #20473=EDGE_CURVE('',#15450,#16170,#9307,.T.); #20474=EDGE_CURVE('',#16171,#16162,#6713,.T.); #20475=EDGE_CURVE('',#16172,#16171,#9308,.T.); #20476=EDGE_CURVE('',#16173,#16172,#6714,.T.); #20477=EDGE_CURVE('',#16174,#16173,#9309,.T.); #20478=EDGE_CURVE('',#16175,#16174,#6715,.T.); #20479=EDGE_CURVE('',#16176,#16175,#9310,.T.); #20480=EDGE_CURVE('',#16177,#16176,#6716,.T.); #20481=EDGE_CURVE('',#16022,#16177,#9311,.T.); #20482=EDGE_CURVE('',#16177,#16178,#9312,.T.); #20483=EDGE_CURVE('',#16023,#16178,#9313,.T.); #20484=EDGE_CURVE('',#16178,#16179,#6717,.T.); #20485=EDGE_CURVE('',#16179,#16180,#9314,.T.); #20486=EDGE_CURVE('',#16180,#16181,#6718,.T.); #20487=EDGE_CURVE('',#16181,#16182,#9315,.T.); #20488=EDGE_CURVE('',#16182,#16183,#6719,.T.); #20489=EDGE_CURVE('',#16183,#16184,#9316,.T.); #20490=EDGE_CURVE('',#16184,#16161,#6720,.T.); #20491=EDGE_CURVE('',#15443,#16185,#9317,.T.); #20492=EDGE_CURVE('',#16185,#16186,#6721,.T.); #20493=EDGE_CURVE('',#16186,#16187,#9318,.T.); #20494=EDGE_CURVE('',#16187,#16188,#6722,.T.); #20495=EDGE_CURVE('',#16188,#16189,#9319,.T.); #20496=EDGE_CURVE('',#16189,#16190,#6723,.T.); #20497=EDGE_CURVE('',#16190,#16191,#9320,.T.); #20498=EDGE_CURVE('',#16191,#16192,#6724,.T.); #20499=EDGE_CURVE('',#16192,#16024,#9321,.T.); #20500=EDGE_CURVE('',#16163,#16192,#9322,.T.); #20501=EDGE_CURVE('',#16164,#16191,#9323,.T.); #20502=EDGE_CURVE('',#16165,#16190,#9324,.T.); #20503=EDGE_CURVE('',#16166,#16189,#9325,.T.); #20504=EDGE_CURVE('',#16167,#16188,#9326,.T.); #20505=EDGE_CURVE('',#16168,#16187,#9327,.T.); #20506=EDGE_CURVE('',#16169,#16186,#9328,.T.); #20507=EDGE_CURVE('',#16170,#16185,#9329,.T.); #20508=EDGE_CURVE('',#16193,#16151,#9330,.T.); #20509=EDGE_CURVE('',#16194,#16193,#9331,.T.); #20510=EDGE_CURVE('',#16195,#16194,#9332,.T.); #20511=EDGE_CURVE('',#16196,#16195,#9333,.T.); #20512=EDGE_CURVE('',#16196,#16156,#9334,.T.); #20513=EDGE_CURVE('',#16157,#16196,#9335,.T.); #20514=EDGE_CURVE('',#16158,#16195,#9336,.T.); #20515=EDGE_CURVE('',#16194,#16159,#9337,.T.); #20516=EDGE_CURVE('',#16160,#16193,#9338,.T.); #20517=EDGE_CURVE('',#16171,#16184,#9339,.T.); #20518=EDGE_CURVE('',#16172,#16183,#9340,.T.); #20519=EDGE_CURVE('',#16173,#16182,#9341,.T.); #20520=EDGE_CURVE('',#16174,#16181,#9342,.T.); #20521=EDGE_CURVE('',#16175,#16180,#9343,.T.); #20522=EDGE_CURVE('',#16176,#16179,#9344,.T.); #20523=EDGE_CURVE('',#15944,#15447,#9345,.T.); #20524=EDGE_CURVE('',#15452,#15943,#9346,.T.); #20525=EDGE_CURVE('',#15453,#15942,#9347,.T.); #20526=EDGE_CURVE('',#15957,#15418,#9348,.T.); #20527=EDGE_CURVE('',#15413,#15958,#9349,.T.); #20528=EDGE_CURVE('',#15412,#15959,#9350,.T.); #20529=EDGE_CURVE('',#15411,#15960,#9351,.T.); #20530=EDGE_CURVE('',#15410,#15961,#9352,.T.); #20531=EDGE_CURVE('',#15962,#15405,#9353,.T.); #20532=EDGE_CURVE('',#16098,#16088,#9354,.T.); #20533=EDGE_CURVE('',#16089,#16097,#9355,.T.); #20534=EDGE_CURVE('',#16096,#16090,#9356,.T.); #20535=EDGE_CURVE('',#16095,#16091,#9357,.T.); #20536=EDGE_CURVE('',#16062,#16075,#9358,.T.); #20537=EDGE_CURVE('',#16063,#16074,#9359,.T.); #20538=EDGE_CURVE('',#16064,#16073,#9360,.T.); #20539=EDGE_CURVE('',#16065,#16072,#9361,.T.); #20540=EDGE_CURVE('',#16066,#16071,#9362,.T.); #20541=EDGE_CURVE('',#16067,#16070,#9363,.T.); #20542=EDGE_CURVE('',#15487,#15503,#9364,.T.); #20543=EDGE_CURVE('',#15325,#15266,#9365,.T.); #20544=EDGE_CURVE('',#15324,#16197,#9366,.T.); #20545=EDGE_CURVE('',#16198,#16197,#9367,.T.); #20546=EDGE_CURVE('',#16198,#15267,#9368,.T.); #20547=EDGE_CURVE('',#15314,#16198,#9369,.T.); #20548=EDGE_CURVE('',#16199,#16200,#9370,.T.); #20549=EDGE_CURVE('',#16200,#16201,#6725,.T.); #20550=EDGE_CURVE('',#16201,#15314,#6726,.T.); #20551=EDGE_CURVE('',#16197,#16202,#6727,.T.); #20552=EDGE_CURVE('',#16202,#16203,#9371,.T.); #20553=EDGE_CURVE('',#16203,#16199,#9372,.T.); #20554=EDGE_CURVE('',#16204,#16205,#6728,.T.); #20555=EDGE_CURVE('',#16205,#16206,#9373,.T.); #20556=EDGE_CURVE('',#16206,#16207,#6729,.T.); #20557=EDGE_CURVE('',#16207,#16199,#9374,.T.); #20558=EDGE_CURVE('',#16203,#16204,#9375,.T.); #20559=EDGE_CURVE('',#15322,#16208,#6730,.T.); #20560=EDGE_CURVE('',#16209,#16208,#9376,.T.); #20561=EDGE_CURVE('',#16209,#16204,#9377,.T.); #20562=EDGE_CURVE('',#15323,#16202,#9378,.T.); #20563=EDGE_CURVE('',#16210,#15321,#6731,.T.); #20564=EDGE_CURVE('',#16210,#16208,#9379,.T.); #20565=EDGE_CURVE('',#16210,#16211,#9380,.T.); #20566=EDGE_CURVE('',#16212,#16211,#6732,.T.); #20567=EDGE_CURVE('',#16213,#16212,#9381,.T.); #20568=EDGE_CURVE('',#16209,#16213,#6733,.T.); #20569=EDGE_CURVE('',#16213,#16205,#9382,.T.); #20570=EDGE_CURVE('',#16212,#16206,#9383,.T.); #20571=EDGE_CURVE('',#16211,#16207,#9384,.T.); #20572=EDGE_CURVE('',#15320,#16200,#9385,.T.); #20573=EDGE_CURVE('',#15319,#16201,#9386,.T.); #20574=EDGE_CURVE('',#15306,#15312,#9387,.T.); #20575=EDGE_CURVE('',#15305,#15270,#9388,.T.); #20576=EDGE_CURVE('',#16214,#16215,#9389,.T.); #20577=EDGE_CURVE('',#16214,#16216,#9390,.T.); #20578=EDGE_CURVE('',#16216,#16217,#9391,.T.); #20579=EDGE_CURVE('',#16215,#16217,#9392,.T.); #20580=EDGE_CURVE('',#16218,#16219,#9393,.T.); #20581=EDGE_CURVE('',#16218,#16214,#9394,.T.); #20582=EDGE_CURVE('',#16219,#16215,#9395,.T.); #20583=EDGE_CURVE('',#16216,#16220,#9396,.T.); #20584=EDGE_CURVE('',#16220,#16221,#9397,.T.); #20585=EDGE_CURVE('',#16217,#16221,#9398,.T.); #20586=EDGE_CURVE('',#16222,#16218,#9399,.T.); #20587=EDGE_CURVE('',#16223,#16222,#9400,.T.); #20588=EDGE_CURVE('',#16224,#16223,#9401,.T.); #20589=EDGE_CURVE('',#16225,#16224,#9402,.T.); #20590=EDGE_CURVE('',#16226,#16225,#9403,.T.); #20591=EDGE_CURVE('',#16227,#16226,#9404,.T.); #20592=EDGE_CURVE('',#16228,#16227,#9405,.T.); #20593=EDGE_CURVE('',#16229,#16228,#9406,.T.); #20594=EDGE_CURVE('',#16230,#16229,#9407,.T.); #20595=EDGE_CURVE('',#16231,#16230,#9408,.T.); #20596=EDGE_CURVE('',#16232,#16231,#9409,.T.); #20597=EDGE_CURVE('',#16233,#16232,#9410,.T.); #20598=EDGE_CURVE('',#16234,#16233,#9411,.T.); #20599=EDGE_CURVE('',#16235,#16234,#9412,.T.); #20600=EDGE_CURVE('',#16236,#16235,#9413,.T.); #20601=EDGE_CURVE('',#16237,#16236,#9414,.T.); #20602=EDGE_CURVE('',#16220,#16237,#9415,.T.); #20603=EDGE_CURVE('',#16238,#16239,#9416,.T.); #20604=EDGE_CURVE('',#16239,#16240,#9417,.T.); #20605=EDGE_CURVE('',#16241,#16240,#9418,.T.); #20606=EDGE_CURVE('',#16238,#16241,#9419,.T.); #20607=EDGE_CURVE('',#16242,#16243,#9420,.T.); #20608=EDGE_CURVE('',#16242,#16244,#9421,.T.); #20609=EDGE_CURVE('',#16244,#16245,#9422,.T.); #20610=EDGE_CURVE('',#16243,#16245,#9423,.T.); #20611=EDGE_CURVE('',#16246,#16247,#9424,.T.); #20612=EDGE_CURVE('',#16248,#16247,#9425,.T.); #20613=EDGE_CURVE('',#16249,#16248,#9426,.T.); #20614=EDGE_CURVE('',#16249,#16246,#9427,.T.); #20615=EDGE_CURVE('',#16221,#16250,#9428,.T.); #20616=EDGE_CURVE('',#16250,#16251,#9429,.T.); #20617=EDGE_CURVE('',#16251,#16252,#9430,.T.); #20618=EDGE_CURVE('',#16252,#16253,#9431,.T.); #20619=EDGE_CURVE('',#16253,#16254,#9432,.T.); #20620=EDGE_CURVE('',#16254,#16255,#9433,.T.); #20621=EDGE_CURVE('',#16255,#16256,#9434,.T.); #20622=EDGE_CURVE('',#16256,#16257,#9435,.T.); #20623=EDGE_CURVE('',#16257,#16258,#9436,.T.); #20624=EDGE_CURVE('',#16258,#16259,#9437,.T.); #20625=EDGE_CURVE('',#16259,#16260,#9438,.T.); #20626=EDGE_CURVE('',#16260,#16261,#9439,.T.); #20627=EDGE_CURVE('',#16261,#16262,#9440,.T.); #20628=EDGE_CURVE('',#16262,#16263,#9441,.T.); #20629=EDGE_CURVE('',#16263,#16264,#9442,.T.); #20630=EDGE_CURVE('',#16264,#16265,#9443,.T.); #20631=EDGE_CURVE('',#16265,#16219,#9444,.T.); #20632=EDGE_CURVE('',#16266,#16267,#9445,.T.); #20633=EDGE_CURVE('',#16266,#16268,#9446,.T.); #20634=EDGE_CURVE('',#16268,#16269,#9447,.T.); #20635=EDGE_CURVE('',#16267,#16269,#9448,.T.); #20636=EDGE_CURVE('',#16270,#16271,#9449,.T.); #20637=EDGE_CURVE('',#16271,#16272,#9450,.T.); #20638=EDGE_CURVE('',#16273,#16272,#9451,.T.); #20639=EDGE_CURVE('',#16270,#16273,#9452,.T.); #20640=EDGE_CURVE('',#16274,#16275,#9453,.T.); #20641=EDGE_CURVE('',#16276,#16274,#9454,.T.); #20642=EDGE_CURVE('',#16276,#16277,#9455,.T.); #20643=EDGE_CURVE('',#16277,#16275,#9456,.T.); #20644=EDGE_CURVE('',#16222,#16265,#9457,.T.); #20645=EDGE_CURVE('',#16237,#16250,#9458,.T.); #20646=EDGE_CURVE('',#16223,#16264,#9459,.T.); #20647=EDGE_CURVE('',#16236,#16251,#9460,.T.); #20648=EDGE_CURVE('',#16224,#16263,#9461,.T.); #20649=EDGE_CURVE('',#16235,#16252,#9462,.T.); #20650=EDGE_CURVE('',#16225,#16262,#9463,.T.); #20651=EDGE_CURVE('',#16234,#16253,#9464,.T.); #20652=EDGE_CURVE('',#16226,#16261,#9465,.T.); #20653=EDGE_CURVE('',#16233,#16254,#9466,.T.); #20654=EDGE_CURVE('',#16227,#16260,#9467,.T.); #20655=EDGE_CURVE('',#16232,#16255,#9468,.T.); #20656=EDGE_CURVE('',#16228,#16259,#9469,.T.); #20657=EDGE_CURVE('',#16231,#16256,#9470,.T.); #20658=EDGE_CURVE('',#16229,#16258,#9471,.T.); #20659=EDGE_CURVE('',#16230,#16257,#9472,.T.); #20660=EDGE_CURVE('',#16278,#16238,#9473,.T.); #20661=EDGE_CURVE('',#16278,#16279,#9474,.T.); #20662=EDGE_CURVE('',#16279,#16239,#9475,.T.); #20663=EDGE_CURVE('',#16280,#16279,#9476,.T.); #20664=EDGE_CURVE('',#16280,#16240,#9477,.T.); #20665=EDGE_CURVE('',#16281,#16241,#9478,.T.); #20666=EDGE_CURVE('',#16281,#16280,#9479,.T.); #20667=EDGE_CURVE('',#16281,#16278,#9480,.T.); #20668=EDGE_CURVE('',#16282,#16242,#9481,.T.); #20669=EDGE_CURVE('',#16283,#16243,#9482,.T.); #20670=EDGE_CURVE('',#16283,#16282,#9483,.T.); #20671=EDGE_CURVE('',#16282,#16284,#9484,.T.); #20672=EDGE_CURVE('',#16284,#16244,#9485,.T.); #20673=EDGE_CURVE('',#16285,#16284,#9486,.T.); #20674=EDGE_CURVE('',#16285,#16245,#9487,.T.); #20675=EDGE_CURVE('',#16283,#16285,#9488,.T.); #20676=EDGE_CURVE('',#16286,#16246,#9489,.T.); #20677=EDGE_CURVE('',#16287,#16286,#9490,.T.); #20678=EDGE_CURVE('',#16287,#16247,#9491,.T.); #20679=EDGE_CURVE('',#16288,#16248,#9492,.T.); #20680=EDGE_CURVE('',#16288,#16287,#9493,.T.); #20681=EDGE_CURVE('',#16289,#16249,#9494,.T.); #20682=EDGE_CURVE('',#16288,#16289,#9495,.T.); #20683=EDGE_CURVE('',#16289,#16286,#9496,.T.); #20684=EDGE_CURVE('',#16266,#16290,#9497,.T.); #20685=EDGE_CURVE('',#16267,#16291,#9498,.T.); #20686=EDGE_CURVE('',#16290,#16291,#9499,.T.); #20687=EDGE_CURVE('',#16269,#16292,#9500,.T.); #20688=EDGE_CURVE('',#16292,#16291,#9501,.T.); #20689=EDGE_CURVE('',#16268,#16293,#9502,.T.); #20690=EDGE_CURVE('',#16293,#16292,#9503,.T.); #20691=EDGE_CURVE('',#16293,#16290,#9504,.T.); #20692=EDGE_CURVE('',#16270,#16294,#9505,.T.); #20693=EDGE_CURVE('',#16295,#16294,#9506,.T.); #20694=EDGE_CURVE('',#16271,#16295,#9507,.T.); #20695=EDGE_CURVE('',#16273,#16296,#9508,.T.); #20696=EDGE_CURVE('',#16294,#16296,#9509,.T.); #20697=EDGE_CURVE('',#16272,#16297,#9510,.T.); #20698=EDGE_CURVE('',#16297,#16296,#9511,.T.); #20699=EDGE_CURVE('',#16295,#16297,#9512,.T.); #20700=EDGE_CURVE('',#16274,#16298,#9513,.T.); #20701=EDGE_CURVE('',#16275,#16299,#9514,.T.); #20702=EDGE_CURVE('',#16299,#16298,#9515,.T.); #20703=EDGE_CURVE('',#16277,#16300,#9516,.T.); #20704=EDGE_CURVE('',#16300,#16299,#9517,.T.); #20705=EDGE_CURVE('',#16276,#16301,#9518,.T.); #20706=EDGE_CURVE('',#16300,#16301,#9519,.T.); #20707=EDGE_CURVE('',#16301,#16298,#9520,.T.); #20708=EDGE_CURVE('',#16278,#16302,#9521,.T.); #20709=EDGE_CURVE('',#16302,#16303,#9522,.T.); #20710=EDGE_CURVE('',#16279,#16303,#9523,.T.); #20711=EDGE_CURVE('',#16304,#16303,#9524,.T.); #20712=EDGE_CURVE('',#16280,#16304,#9525,.T.); #20713=EDGE_CURVE('',#16281,#16305,#9526,.T.); #20714=EDGE_CURVE('',#16305,#16304,#9527,.T.); #20715=EDGE_CURVE('',#16305,#16302,#9528,.T.); #20716=EDGE_CURVE('',#16306,#16307,#9529,.T.); #20717=EDGE_CURVE('',#16282,#16307,#9530,.T.); #20718=EDGE_CURVE('',#16283,#16306,#9531,.T.); #20719=EDGE_CURVE('',#16307,#16308,#9532,.T.); #20720=EDGE_CURVE('',#16284,#16308,#9533,.T.); #20721=EDGE_CURVE('',#16309,#16308,#9534,.T.); #20722=EDGE_CURVE('',#16285,#16309,#9535,.T.); #20723=EDGE_CURVE('',#16306,#16309,#9536,.T.); #20724=EDGE_CURVE('',#16310,#16311,#9537,.T.); #20725=EDGE_CURVE('',#16287,#16310,#9538,.T.); #20726=EDGE_CURVE('',#16286,#16311,#9539,.T.); #20727=EDGE_CURVE('',#16288,#16312,#9540,.T.); #20728=EDGE_CURVE('',#16312,#16310,#9541,.T.); #20729=EDGE_CURVE('',#16312,#16313,#9542,.T.); #20730=EDGE_CURVE('',#16289,#16313,#9543,.T.); #20731=EDGE_CURVE('',#16313,#16311,#9544,.T.); #20732=EDGE_CURVE('',#16290,#16314,#9545,.T.); #20733=EDGE_CURVE('',#16291,#16315,#9546,.T.); #20734=EDGE_CURVE('',#16314,#16315,#9547,.T.); #20735=EDGE_CURVE('',#16316,#16315,#9548,.T.); #20736=EDGE_CURVE('',#16292,#16316,#9549,.T.); #20737=EDGE_CURVE('',#16293,#16317,#9550,.T.); #20738=EDGE_CURVE('',#16317,#16316,#9551,.T.); #20739=EDGE_CURVE('',#16317,#16314,#9552,.T.); #20740=EDGE_CURVE('',#16318,#16319,#9553,.T.); #20741=EDGE_CURVE('',#16295,#16318,#9554,.T.); #20742=EDGE_CURVE('',#16294,#16319,#9555,.T.); #20743=EDGE_CURVE('',#16296,#16320,#9556,.T.); #20744=EDGE_CURVE('',#16319,#16320,#9557,.T.); #20745=EDGE_CURVE('',#16321,#16320,#9558,.T.); #20746=EDGE_CURVE('',#16297,#16321,#9559,.T.); #20747=EDGE_CURVE('',#16318,#16321,#9560,.T.); #20748=EDGE_CURVE('',#16322,#16323,#9561,.T.); #20749=EDGE_CURVE('',#16298,#16323,#9562,.T.); #20750=EDGE_CURVE('',#16299,#16322,#9563,.T.); #20751=EDGE_CURVE('',#16300,#16324,#9564,.T.); #20752=EDGE_CURVE('',#16324,#16322,#9565,.T.); #20753=EDGE_CURVE('',#16324,#16325,#9566,.T.); #20754=EDGE_CURVE('',#16301,#16325,#9567,.T.); #20755=EDGE_CURVE('',#16325,#16323,#9568,.T.); #20756=EDGE_CURVE('',#16326,#16327,#9569,.T.); #20757=EDGE_CURVE('',#16327,#16328,#6734,.T.); #20758=EDGE_CURVE('',#16328,#16329,#9570,.T.); #20759=EDGE_CURVE('',#16330,#16329,#6735,.T.); #20760=EDGE_CURVE('',#16331,#16330,#9571,.T.); #20761=EDGE_CURVE('',#16331,#16332,#6736,.T.); #20762=EDGE_CURVE('',#16333,#16332,#9572,.T.); #20763=EDGE_CURVE('',#16326,#16333,#6737,.T.); #20764=EDGE_CURVE('',#16334,#16335,#9573,.T.); #20765=EDGE_CURVE('',#16327,#16335,#9574,.T.); #20766=EDGE_CURVE('',#16326,#16334,#9575,.T.); #20767=EDGE_CURVE('',#16333,#16336,#9576,.T.); #20768=EDGE_CURVE('',#16334,#16336,#6738,.T.); #20769=EDGE_CURVE('',#16335,#16337,#6739,.T.); #20770=EDGE_CURVE('',#16328,#16337,#9577,.T.); #20771=EDGE_CURVE('',#16332,#16338,#9578,.T.); #20772=EDGE_CURVE('',#16336,#16338,#9579,.T.); #20773=EDGE_CURVE('',#16337,#16339,#9580,.T.); #20774=EDGE_CURVE('',#16329,#16339,#9581,.T.); #20775=EDGE_CURVE('',#16331,#16340,#9582,.T.); #20776=EDGE_CURVE('',#16340,#16338,#6740,.T.); #20777=EDGE_CURVE('',#16341,#16339,#6741,.T.); #20778=EDGE_CURVE('',#16330,#16341,#9583,.T.); #20779=EDGE_CURVE('',#16340,#16341,#9584,.T.); #20780=EDGE_CURVE('',#16342,#16343,#6742,.T.); #20781=EDGE_CURVE('',#16342,#16344,#9585,.T.); #20782=EDGE_CURVE('',#16344,#16345,#6743,.T.); #20783=EDGE_CURVE('',#16345,#16346,#9586,.T.); #20784=EDGE_CURVE('',#16347,#16346,#6744,.T.); #20785=EDGE_CURVE('',#16348,#16347,#9587,.T.); #20786=EDGE_CURVE('',#16348,#16349,#6745,.T.); #20787=EDGE_CURVE('',#16343,#16349,#9588,.T.); #20788=EDGE_CURVE('',#16343,#16350,#9589,.T.); #20789=EDGE_CURVE('',#16351,#16350,#6746,.T.); #20790=EDGE_CURVE('',#16342,#16351,#9590,.T.); #20791=EDGE_CURVE('',#16349,#16352,#9591,.T.); #20792=EDGE_CURVE('',#16350,#16352,#9592,.T.); #20793=EDGE_CURVE('',#16348,#16353,#9593,.T.); #20794=EDGE_CURVE('',#16353,#16352,#6747,.T.); #20795=EDGE_CURVE('',#16353,#16354,#9594,.T.); #20796=EDGE_CURVE('',#16347,#16354,#9595,.T.); #20797=EDGE_CURVE('',#16346,#16355,#9596,.T.); #20798=EDGE_CURVE('',#16354,#16355,#6748,.T.); #20799=EDGE_CURVE('',#16345,#16356,#9597,.T.); #20800=EDGE_CURVE('',#16356,#16355,#9598,.T.); #20801=EDGE_CURVE('',#16344,#16357,#9599,.T.); #20802=EDGE_CURVE('',#16357,#16356,#6749,.T.); #20803=EDGE_CURVE('',#16351,#16357,#9600,.T.); #20804=EDGE_CURVE('',#16358,#16359,#9601,.T.); #20805=EDGE_CURVE('',#16359,#16360,#6750,.T.); #20806=EDGE_CURVE('',#16360,#16361,#9602,.T.); #20807=EDGE_CURVE('',#16362,#16361,#6751,.T.); #20808=EDGE_CURVE('',#16363,#16362,#9603,.T.); #20809=EDGE_CURVE('',#16363,#16364,#6752,.T.); #20810=EDGE_CURVE('',#16365,#16364,#9604,.T.); #20811=EDGE_CURVE('',#16358,#16365,#6753,.T.); #20812=EDGE_CURVE('',#16366,#16367,#9605,.T.); #20813=EDGE_CURVE('',#16359,#16367,#9606,.T.); #20814=EDGE_CURVE('',#16358,#16366,#9607,.T.); #20815=EDGE_CURVE('',#16365,#16368,#9608,.T.); #20816=EDGE_CURVE('',#16366,#16368,#6754,.T.); #20817=EDGE_CURVE('',#16367,#16369,#6755,.T.); #20818=EDGE_CURVE('',#16360,#16369,#9609,.T.); #20819=EDGE_CURVE('',#16364,#16370,#9610,.T.); #20820=EDGE_CURVE('',#16368,#16370,#9611,.T.); #20821=EDGE_CURVE('',#16369,#16371,#9612,.T.); #20822=EDGE_CURVE('',#16361,#16371,#9613,.T.); #20823=EDGE_CURVE('',#16363,#16372,#9614,.T.); #20824=EDGE_CURVE('',#16372,#16370,#6756,.T.); #20825=EDGE_CURVE('',#16373,#16371,#6757,.T.); #20826=EDGE_CURVE('',#16362,#16373,#9615,.T.); #20827=EDGE_CURVE('',#16372,#16373,#9616,.T.); #20828=EDGE_CURVE('',#16374,#16375,#9617,.T.); #20829=EDGE_CURVE('',#16375,#16376,#6758,.T.); #20830=EDGE_CURVE('',#16376,#16377,#9618,.T.); #20831=EDGE_CURVE('',#16377,#16378,#6759,.T.); #20832=EDGE_CURVE('',#16378,#16379,#9619,.T.); #20833=EDGE_CURVE('',#16374,#16379,#9620,.T.); #20834=EDGE_CURVE('',#16380,#16381,#9621,.T.); #20835=EDGE_CURVE('',#16382,#16381,#9622,.T.); #20836=EDGE_CURVE('',#16383,#16382,#9623,.T.); #20837=EDGE_CURVE('',#16383,#16380,#9624,.T.); #20838=EDGE_CURVE('',#16381,#16384,#9625,.T.); #20839=EDGE_CURVE('',#16384,#16385,#9626,.T.); #20840=EDGE_CURVE('',#16382,#16385,#9627,.T.); #20841=EDGE_CURVE('',#16379,#16386,#9628,.T.); #20842=EDGE_CURVE('',#16387,#16386,#9629,.T.); #20843=EDGE_CURVE('',#16387,#16374,#9630,.T.); #20844=EDGE_CURVE('',#16388,#16389,#9631,.T.); #20845=EDGE_CURVE('',#16390,#16388,#6760,.T.); #20846=EDGE_CURVE('',#16391,#16390,#9632,.T.); #20847=EDGE_CURVE('',#16392,#16391,#6761,.T.); #20848=EDGE_CURVE('',#16393,#16392,#9633,.T.); #20849=EDGE_CURVE('',#16394,#16393,#6762,.T.); #20850=EDGE_CURVE('',#16395,#16394,#9634,.T.); #20851=EDGE_CURVE('',#16389,#16395,#6763,.T.); #20852=EDGE_CURVE('',#16385,#16396,#9635,.T.); #20853=EDGE_CURVE('',#16396,#16397,#9636,.T.); #20854=EDGE_CURVE('',#16397,#16398,#9637,.T.); #20855=EDGE_CURVE('',#16398,#16399,#9638,.T.); #20856=EDGE_CURVE('',#16399,#16400,#6764,.T.); #20857=EDGE_CURVE('',#16400,#16401,#9639,.T.); #20858=EDGE_CURVE('',#16401,#16402,#6765,.T.); #20859=EDGE_CURVE('',#16402,#16403,#9640,.T.); #20860=EDGE_CURVE('',#16403,#16404,#9641,.T.); #20861=EDGE_CURVE('',#16404,#16405,#9642,.T.); #20862=EDGE_CURVE('',#16405,#16406,#9643,.T.); #20863=EDGE_CURVE('',#16406,#16383,#9644,.T.); #20864=EDGE_CURVE('',#16380,#16407,#9645,.T.); #20865=EDGE_CURVE('',#16407,#16408,#9646,.T.); #20866=EDGE_CURVE('',#16408,#16409,#9647,.T.); #20867=EDGE_CURVE('',#16409,#16410,#9648,.T.); #20868=EDGE_CURVE('',#16410,#16411,#9649,.T.); #20869=EDGE_CURVE('',#16411,#16412,#6766,.T.); #20870=EDGE_CURVE('',#16412,#16413,#9650,.T.); #20871=EDGE_CURVE('',#16413,#16414,#6767,.T.); #20872=EDGE_CURVE('',#16414,#16415,#9651,.T.); #20873=EDGE_CURVE('',#16415,#16416,#9652,.T.); #20874=EDGE_CURVE('',#16416,#16417,#9653,.T.); #20875=EDGE_CURVE('',#16417,#16384,#9654,.T.); #20876=EDGE_CURVE('',#16386,#16418,#9655,.T.); #20877=EDGE_CURVE('',#16418,#16419,#6768,.T.); #20878=EDGE_CURVE('',#16419,#16420,#9656,.T.); #20879=EDGE_CURVE('',#16420,#16421,#6769,.T.); #20880=EDGE_CURVE('',#16421,#16387,#9657,.T.); #20881=EDGE_CURVE('',#16378,#16418,#9658,.T.); #20882=EDGE_CURVE('',#16375,#16421,#9659,.T.); #20883=EDGE_CURVE('',#16406,#16407,#9660,.T.); #20884=EDGE_CURVE('',#16377,#16419,#9661,.T.); #20885=EDGE_CURVE('',#16376,#16420,#9662,.T.); #20886=EDGE_CURVE('',#16422,#16423,#9663,.T.); #20887=EDGE_CURVE('',#16422,#16424,#9664,.T.); #20888=EDGE_CURVE('',#16424,#16425,#9665,.T.); #20889=EDGE_CURVE('',#16423,#16425,#9666,.T.); #20890=EDGE_CURVE('',#16426,#16422,#9667,.T.); #20891=EDGE_CURVE('',#16426,#16427,#9668,.T.); #20892=EDGE_CURVE('',#16427,#16424,#9669,.T.); #20893=EDGE_CURVE('',#16423,#16426,#9670,.T.); #20894=EDGE_CURVE('',#16425,#16427,#9671,.T.); #20895=EDGE_CURVE('',#16428,#16429,#9672,.T.); #20896=EDGE_CURVE('',#16428,#16430,#9673,.T.); #20897=EDGE_CURVE('',#16430,#16431,#9674,.T.); #20898=EDGE_CURVE('',#16429,#16431,#9675,.T.); #20899=EDGE_CURVE('',#16432,#16428,#9676,.T.); #20900=EDGE_CURVE('',#16432,#16433,#9677,.T.); #20901=EDGE_CURVE('',#16433,#16430,#9678,.T.); #20902=EDGE_CURVE('',#16434,#16432,#9679,.T.); #20903=EDGE_CURVE('',#16434,#16435,#9680,.T.); #20904=EDGE_CURVE('',#16435,#16433,#9681,.T.); #20905=EDGE_CURVE('',#16436,#16434,#9682,.T.); #20906=EDGE_CURVE('',#16436,#16437,#9683,.T.); #20907=EDGE_CURVE('',#16437,#16435,#9684,.T.); #20908=EDGE_CURVE('',#16438,#16436,#9685,.T.); #20909=EDGE_CURVE('',#16438,#16439,#9686,.T.); #20910=EDGE_CURVE('',#16439,#16437,#9687,.T.); #20911=EDGE_CURVE('',#16440,#16438,#9688,.T.); #20912=EDGE_CURVE('',#16440,#16441,#9689,.T.); #20913=EDGE_CURVE('',#16441,#16439,#9690,.T.); #20914=EDGE_CURVE('',#16442,#16440,#9691,.T.); #20915=EDGE_CURVE('',#16442,#16443,#9692,.T.); #20916=EDGE_CURVE('',#16443,#16441,#9693,.T.); #20917=EDGE_CURVE('',#16429,#16442,#9694,.T.); #20918=EDGE_CURVE('',#16431,#16443,#9695,.T.); #20919=EDGE_CURVE('',#16444,#16445,#569,.T.); #20920=EDGE_CURVE('',#16444,#16446,#9696,.T.); #20921=EDGE_CURVE('',#16446,#16447,#570,.T.); #20922=EDGE_CURVE('',#16445,#16447,#9697,.T.); #20923=EDGE_CURVE('',#16448,#16444,#571,.T.); #20924=EDGE_CURVE('',#16448,#16449,#9698,.T.); #20925=EDGE_CURVE('',#16449,#16446,#572,.T.); #20926=EDGE_CURVE('',#16450,#16448,#573,.T.); #20927=EDGE_CURVE('',#16450,#16451,#9699,.T.); #20928=EDGE_CURVE('',#16451,#16449,#574,.T.); #20929=EDGE_CURVE('',#16452,#16450,#575,.T.); #20930=EDGE_CURVE('',#16452,#16453,#9700,.T.); #20931=EDGE_CURVE('',#16453,#16451,#576,.T.); #20932=EDGE_CURVE('',#16454,#16452,#577,.T.); #20933=EDGE_CURVE('',#16454,#16455,#9701,.T.); #20934=EDGE_CURVE('',#16455,#16453,#578,.T.); #20935=EDGE_CURVE('',#16456,#16454,#579,.T.); #20936=EDGE_CURVE('',#16456,#16457,#9702,.T.); #20937=EDGE_CURVE('',#16457,#16455,#580,.T.); #20938=EDGE_CURVE('',#16458,#16456,#9703,.T.); #20939=EDGE_CURVE('',#16458,#16459,#9704,.T.); #20940=EDGE_CURVE('',#16459,#16457,#9705,.T.); #20941=EDGE_CURVE('',#16460,#16458,#9706,.T.); #20942=EDGE_CURVE('',#16460,#16461,#9707,.T.); #20943=EDGE_CURVE('',#16461,#16459,#9708,.T.); #20944=EDGE_CURVE('',#16445,#16460,#9709,.T.); #20945=EDGE_CURVE('',#16447,#16461,#9710,.T.); #20946=EDGE_CURVE('',#16462,#16463,#581,.T.); #20947=EDGE_CURVE('',#16462,#16464,#9711,.T.); #20948=EDGE_CURVE('',#16464,#16465,#582,.T.); #20949=EDGE_CURVE('',#16463,#16465,#9712,.T.); #20950=EDGE_CURVE('',#16466,#16462,#583,.T.); #20951=EDGE_CURVE('',#16466,#16467,#9713,.T.); #20952=EDGE_CURVE('',#16467,#16464,#584,.T.); #20953=EDGE_CURVE('',#16468,#16466,#585,.T.); #20954=EDGE_CURVE('',#16468,#16469,#9714,.T.); #20955=EDGE_CURVE('',#16469,#16467,#586,.T.); #20956=EDGE_CURVE('',#16470,#16468,#587,.T.); #20957=EDGE_CURVE('',#16470,#16471,#9715,.T.); #20958=EDGE_CURVE('',#16471,#16469,#588,.T.); #20959=EDGE_CURVE('',#16472,#16470,#589,.T.); #20960=EDGE_CURVE('',#16472,#16473,#9716,.T.); #20961=EDGE_CURVE('',#16473,#16471,#590,.T.); #20962=EDGE_CURVE('',#16474,#16472,#591,.T.); #20963=EDGE_CURVE('',#16474,#16475,#9717,.T.); #20964=EDGE_CURVE('',#16475,#16473,#592,.T.); #20965=EDGE_CURVE('',#16476,#16474,#9718,.T.); #20966=EDGE_CURVE('',#16476,#16477,#9719,.T.); #20967=EDGE_CURVE('',#16477,#16475,#9720,.T.); #20968=EDGE_CURVE('',#16478,#16476,#9721,.T.); #20969=EDGE_CURVE('',#16478,#16479,#9722,.T.); #20970=EDGE_CURVE('',#16479,#16477,#9723,.T.); #20971=EDGE_CURVE('',#16463,#16478,#9724,.T.); #20972=EDGE_CURVE('',#16465,#16479,#9725,.T.); #20973=EDGE_CURVE('',#16480,#16481,#9726,.T.); #20974=EDGE_CURVE('',#16480,#16482,#9727,.T.); #20975=EDGE_CURVE('',#16482,#16483,#9728,.T.); #20976=EDGE_CURVE('',#16481,#16483,#9729,.T.); #20977=EDGE_CURVE('',#16484,#16480,#593,.T.); #20978=EDGE_CURVE('',#16484,#16485,#9730,.T.); #20979=EDGE_CURVE('',#16485,#16482,#594,.T.); #20980=EDGE_CURVE('',#16486,#16484,#595,.T.); #20981=EDGE_CURVE('',#16486,#16487,#9731,.T.); #20982=EDGE_CURVE('',#16487,#16485,#596,.T.); #20983=EDGE_CURVE('',#16488,#16486,#597,.T.); #20984=EDGE_CURVE('',#16488,#16489,#9732,.T.); #20985=EDGE_CURVE('',#16489,#16487,#598,.T.); #20986=EDGE_CURVE('',#16490,#16488,#599,.T.); #20987=EDGE_CURVE('',#16490,#16491,#9733,.T.); #20988=EDGE_CURVE('',#16491,#16489,#600,.T.); #20989=EDGE_CURVE('',#16492,#16490,#601,.T.); #20990=EDGE_CURVE('',#16492,#16493,#9734,.T.); #20991=EDGE_CURVE('',#16493,#16491,#602,.T.); #20992=EDGE_CURVE('',#16494,#16492,#603,.T.); #20993=EDGE_CURVE('',#16494,#16495,#9735,.T.); #20994=EDGE_CURVE('',#16495,#16493,#604,.T.); #20995=EDGE_CURVE('',#16496,#16494,#605,.T.); #20996=EDGE_CURVE('',#16496,#16497,#9736,.T.); #20997=EDGE_CURVE('',#16497,#16495,#606,.T.); #20998=EDGE_CURVE('',#16498,#16496,#607,.T.); #20999=EDGE_CURVE('',#16498,#16499,#9737,.T.); #21000=EDGE_CURVE('',#16499,#16497,#608,.T.); #21001=EDGE_CURVE('',#16500,#16498,#609,.T.); #21002=EDGE_CURVE('',#16500,#16501,#9738,.T.); #21003=EDGE_CURVE('',#16501,#16499,#610,.T.); #21004=EDGE_CURVE('',#16502,#16500,#611,.T.); #21005=EDGE_CURVE('',#16502,#16503,#9739,.T.); #21006=EDGE_CURVE('',#16503,#16501,#612,.T.); #21007=EDGE_CURVE('',#16504,#16502,#613,.T.); #21008=EDGE_CURVE('',#16504,#16505,#9740,.T.); #21009=EDGE_CURVE('',#16505,#16503,#614,.T.); #21010=EDGE_CURVE('',#16506,#16504,#615,.T.); #21011=EDGE_CURVE('',#16506,#16507,#9741,.T.); #21012=EDGE_CURVE('',#16507,#16505,#616,.T.); #21013=EDGE_CURVE('',#16508,#16506,#9742,.T.); #21014=EDGE_CURVE('',#16508,#16509,#9743,.T.); #21015=EDGE_CURVE('',#16509,#16507,#9744,.T.); #21016=EDGE_CURVE('',#16481,#16508,#9745,.T.); #21017=EDGE_CURVE('',#16483,#16509,#9746,.T.); #21018=EDGE_CURVE('',#16510,#16511,#6770,.T.); #21019=EDGE_CURVE('',#16512,#16510,#9747,.T.); #21020=EDGE_CURVE('',#16513,#16512,#6771,.T.); #21021=EDGE_CURVE('',#16514,#16513,#9748,.T.); #21022=EDGE_CURVE('',#16515,#16514,#6772,.T.); #21023=EDGE_CURVE('',#16516,#16515,#9749,.T.); #21024=EDGE_CURVE('',#16517,#16516,#6773,.T.); #21025=EDGE_CURVE('',#16511,#16517,#9750,.T.); #21026=EDGE_CURVE('',#16518,#16519,#11,.T.); #21027=EDGE_CURVE('',#16519,#16520,#12,.T.); #21028=EDGE_CURVE('',#16520,#16521,#13,.T.); #21029=EDGE_CURVE('',#16521,#16522,#14,.T.); #21030=EDGE_CURVE('',#16522,#16523,#15,.T.); #21031=EDGE_CURVE('',#16523,#16524,#16,.T.); #21032=EDGE_CURVE('',#16524,#16525,#17,.T.); #21033=EDGE_CURVE('',#16525,#16526,#18,.T.); #21034=EDGE_CURVE('',#16526,#16527,#19,.T.); #21035=EDGE_CURVE('',#16527,#16528,#20,.T.); #21036=EDGE_CURVE('',#16528,#16529,#21,.T.); #21037=EDGE_CURVE('',#16529,#16530,#22,.T.); #21038=EDGE_CURVE('',#16530,#16531,#23,.T.); #21039=EDGE_CURVE('',#16531,#16532,#24,.T.); #21040=EDGE_CURVE('',#16532,#16533,#25,.T.); #21041=EDGE_CURVE('',#16533,#16534,#26,.T.); #21042=EDGE_CURVE('',#16534,#16535,#27,.T.); #21043=EDGE_CURVE('',#16535,#16536,#28,.T.); #21044=EDGE_CURVE('',#16536,#16537,#29,.T.); #21045=EDGE_CURVE('',#16537,#16518,#30,.T.); #21046=EDGE_CURVE('',#16538,#16539,#9751,.T.); #21047=EDGE_CURVE('',#16539,#16540,#31,.T.); #21048=EDGE_CURVE('',#16540,#16541,#9752,.T.); #21049=EDGE_CURVE('',#16541,#16542,#32,.T.); #21050=EDGE_CURVE('',#16542,#16543,#33,.T.); #21051=EDGE_CURVE('',#16543,#16544,#9753,.T.); #21052=EDGE_CURVE('',#16544,#16545,#34,.T.); #21053=EDGE_CURVE('',#16545,#16546,#35,.T.); #21054=EDGE_CURVE('',#16546,#16547,#9754,.T.); #21055=EDGE_CURVE('',#16547,#16548,#36,.T.); #21056=EDGE_CURVE('',#16548,#16549,#37,.T.); #21057=EDGE_CURVE('',#16549,#16550,#9755,.T.); #21058=EDGE_CURVE('',#16550,#16551,#38,.T.); #21059=EDGE_CURVE('',#16551,#16538,#39,.T.); #21060=EDGE_CURVE('',#16552,#16553,#40,.T.); #21061=EDGE_CURVE('',#16552,#16554,#9756,.T.); #21062=EDGE_CURVE('',#16554,#16555,#41,.T.); #21063=EDGE_CURVE('',#16553,#16555,#9757,.T.); #21064=EDGE_CURVE('',#16556,#16552,#42,.T.); #21065=EDGE_CURVE('',#16556,#16557,#9758,.T.); #21066=EDGE_CURVE('',#16557,#16554,#43,.T.); #21067=EDGE_CURVE('',#16558,#16556,#44,.T.); #21068=EDGE_CURVE('',#16558,#16559,#9759,.T.); #21069=EDGE_CURVE('',#16559,#16557,#45,.T.); #21070=EDGE_CURVE('',#16560,#16558,#9760,.T.); #21071=EDGE_CURVE('',#16560,#16561,#9761,.T.); #21072=EDGE_CURVE('',#16561,#16559,#9762,.T.); #21073=EDGE_CURVE('',#16562,#16560,#9763,.T.); #21074=EDGE_CURVE('',#16562,#16563,#9764,.T.); #21075=EDGE_CURVE('',#16563,#16561,#9765,.T.); #21076=EDGE_CURVE('',#16564,#16562,#46,.T.); #21077=EDGE_CURVE('',#16564,#16565,#9766,.T.); #21078=EDGE_CURVE('',#16565,#16563,#47,.T.); #21079=EDGE_CURVE('',#16566,#16564,#48,.T.); #21080=EDGE_CURVE('',#16566,#16567,#9767,.T.); #21081=EDGE_CURVE('',#16567,#16565,#49,.T.); #21082=EDGE_CURVE('',#16568,#16566,#50,.T.); #21083=EDGE_CURVE('',#16568,#16569,#9768,.T.); #21084=EDGE_CURVE('',#16569,#16567,#51,.T.); #21085=EDGE_CURVE('',#16570,#16568,#52,.T.); #21086=EDGE_CURVE('',#16570,#16571,#9769,.T.); #21087=EDGE_CURVE('',#16571,#16569,#53,.T.); #21088=EDGE_CURVE('',#16572,#16570,#54,.T.); #21089=EDGE_CURVE('',#16572,#16573,#9770,.T.); #21090=EDGE_CURVE('',#16573,#16571,#55,.T.); #21091=EDGE_CURVE('',#16574,#16572,#9771,.T.); #21092=EDGE_CURVE('',#16574,#16575,#9772,.T.); #21093=EDGE_CURVE('',#16575,#16573,#9773,.T.); #21094=EDGE_CURVE('',#16576,#16574,#9774,.T.); #21095=EDGE_CURVE('',#16576,#16577,#9775,.T.); #21096=EDGE_CURVE('',#16577,#16575,#9776,.T.); #21097=EDGE_CURVE('',#16578,#16576,#56,.T.); #21098=EDGE_CURVE('',#16578,#16579,#9777,.T.); #21099=EDGE_CURVE('',#16579,#16577,#57,.T.); #21100=EDGE_CURVE('',#16553,#16578,#58,.T.); #21101=EDGE_CURVE('',#16555,#16579,#59,.T.); #21102=EDGE_CURVE('',#16518,#16580,#9778,.T.); #21103=EDGE_CURVE('',#16580,#16581,#60,.T.); #21104=EDGE_CURVE('',#16519,#16581,#9779,.T.); #21105=EDGE_CURVE('',#16537,#16582,#9780,.T.); #21106=EDGE_CURVE('',#16582,#16580,#61,.T.); #21107=EDGE_CURVE('',#16536,#16583,#9781,.T.); #21108=EDGE_CURVE('',#16583,#16582,#62,.T.); #21109=EDGE_CURVE('',#16535,#16584,#9782,.T.); #21110=EDGE_CURVE('',#16584,#16583,#63,.T.); #21111=EDGE_CURVE('',#16534,#16585,#9783,.T.); #21112=EDGE_CURVE('',#16585,#16584,#64,.T.); #21113=EDGE_CURVE('',#16533,#16586,#9784,.T.); #21114=EDGE_CURVE('',#16586,#16585,#65,.T.); #21115=EDGE_CURVE('',#16532,#16587,#9785,.T.); #21116=EDGE_CURVE('',#16587,#16586,#66,.T.); #21117=EDGE_CURVE('',#16531,#16588,#9786,.T.); #21118=EDGE_CURVE('',#16588,#16587,#67,.T.); #21119=EDGE_CURVE('',#16530,#16589,#9787,.T.); #21120=EDGE_CURVE('',#16589,#16588,#68,.T.); #21121=EDGE_CURVE('',#16529,#16590,#9788,.T.); #21122=EDGE_CURVE('',#16590,#16589,#69,.T.); #21123=EDGE_CURVE('',#16528,#16591,#9789,.T.); #21124=EDGE_CURVE('',#16591,#16590,#70,.T.); #21125=EDGE_CURVE('',#16527,#16592,#9790,.T.); #21126=EDGE_CURVE('',#16592,#16591,#71,.T.); #21127=EDGE_CURVE('',#16526,#16593,#9791,.T.); #21128=EDGE_CURVE('',#16593,#16592,#72,.T.); #21129=EDGE_CURVE('',#16525,#16594,#9792,.T.); #21130=EDGE_CURVE('',#16594,#16593,#73,.T.); #21131=EDGE_CURVE('',#16524,#16595,#9793,.T.); #21132=EDGE_CURVE('',#16595,#16594,#74,.T.); #21133=EDGE_CURVE('',#16523,#16596,#9794,.T.); #21134=EDGE_CURVE('',#16596,#16595,#75,.T.); #21135=EDGE_CURVE('',#16522,#16597,#9795,.T.); #21136=EDGE_CURVE('',#16597,#16596,#76,.T.); #21137=EDGE_CURVE('',#16521,#16598,#9796,.T.); #21138=EDGE_CURVE('',#16598,#16597,#77,.T.); #21139=EDGE_CURVE('',#16520,#16599,#9797,.T.); #21140=EDGE_CURVE('',#16599,#16598,#78,.T.); #21141=EDGE_CURVE('',#16581,#16599,#79,.T.); #21142=EDGE_CURVE('',#16600,#16601,#80,.T.); #21143=EDGE_CURVE('',#16600,#16602,#9798,.T.); #21144=EDGE_CURVE('',#16602,#16603,#81,.T.); #21145=EDGE_CURVE('',#16601,#16603,#9799,.T.); #21146=EDGE_CURVE('',#16604,#16600,#82,.T.); #21147=EDGE_CURVE('',#16604,#16605,#9800,.T.); #21148=EDGE_CURVE('',#16605,#16602,#83,.T.); #21149=EDGE_CURVE('',#16606,#16604,#84,.T.); #21150=EDGE_CURVE('',#16606,#16607,#9801,.T.); #21151=EDGE_CURVE('',#16607,#16605,#85,.T.); #21152=EDGE_CURVE('',#16601,#16606,#86,.T.); #21153=EDGE_CURVE('',#16603,#16607,#87,.T.); #21154=EDGE_CURVE('',#16608,#16609,#88,.T.); #21155=EDGE_CURVE('',#16608,#16610,#9802,.T.); #21156=EDGE_CURVE('',#16610,#16611,#89,.T.); #21157=EDGE_CURVE('',#16609,#16611,#9803,.T.); #21158=EDGE_CURVE('',#16612,#16608,#90,.T.); #21159=EDGE_CURVE('',#16612,#16613,#9804,.T.); #21160=EDGE_CURVE('',#16613,#16610,#91,.T.); #21161=EDGE_CURVE('',#16614,#16612,#92,.T.); #21162=EDGE_CURVE('',#16614,#16615,#9805,.T.); #21163=EDGE_CURVE('',#16615,#16613,#93,.T.); #21164=EDGE_CURVE('',#16609,#16614,#94,.T.); #21165=EDGE_CURVE('',#16611,#16615,#95,.T.); #21166=EDGE_CURVE('',#16616,#16617,#96,.T.); #21167=EDGE_CURVE('',#16616,#16618,#9806,.T.); #21168=EDGE_CURVE('',#16618,#16619,#97,.T.); #21169=EDGE_CURVE('',#16617,#16619,#9807,.T.); #21170=EDGE_CURVE('',#16620,#16616,#9808,.T.); #21171=EDGE_CURVE('',#16620,#16621,#9809,.T.); #21172=EDGE_CURVE('',#16621,#16618,#9810,.T.); #21173=EDGE_CURVE('',#16622,#16620,#98,.T.); #21174=EDGE_CURVE('',#16622,#16623,#9811,.T.); #21175=EDGE_CURVE('',#16623,#16621,#99,.T.); #21176=EDGE_CURVE('',#16624,#16622,#9812,.T.); #21177=EDGE_CURVE('',#16624,#16625,#9813,.T.); #21178=EDGE_CURVE('',#16625,#16623,#9814,.T.); #21179=EDGE_CURVE('',#16626,#16624,#100,.T.); #21180=EDGE_CURVE('',#16626,#16627,#9815,.T.); #21181=EDGE_CURVE('',#16627,#16625,#101,.T.); #21182=EDGE_CURVE('',#16628,#16626,#9816,.T.); #21183=EDGE_CURVE('',#16628,#16629,#9817,.T.); #21184=EDGE_CURVE('',#16629,#16627,#9818,.T.); #21185=EDGE_CURVE('',#16630,#16628,#102,.T.); #21186=EDGE_CURVE('',#16630,#16631,#9819,.T.); #21187=EDGE_CURVE('',#16631,#16629,#103,.T.); #21188=EDGE_CURVE('',#16617,#16630,#9820,.T.); #21189=EDGE_CURVE('',#16619,#16631,#9821,.T.); #21190=EDGE_CURVE('',#16632,#16633,#104,.T.); #21191=EDGE_CURVE('',#16632,#16634,#9822,.T.); #21192=EDGE_CURVE('',#16634,#16635,#105,.T.); #21193=EDGE_CURVE('',#16633,#16635,#9823,.T.); #21194=EDGE_CURVE('',#16636,#16632,#9824,.T.); #21195=EDGE_CURVE('',#16636,#16637,#9825,.T.); #21196=EDGE_CURVE('',#16637,#16634,#9826,.T.); #21197=EDGE_CURVE('',#16638,#16636,#106,.T.); #21198=EDGE_CURVE('',#16638,#16639,#9827,.T.); #21199=EDGE_CURVE('',#16639,#16637,#107,.T.); #21200=EDGE_CURVE('',#16640,#16638,#9828,.T.); #21201=EDGE_CURVE('',#16640,#16641,#9829,.T.); #21202=EDGE_CURVE('',#16641,#16639,#9830,.T.); #21203=EDGE_CURVE('',#16642,#16640,#108,.T.); #21204=EDGE_CURVE('',#16642,#16643,#9831,.T.); #21205=EDGE_CURVE('',#16643,#16641,#109,.T.); #21206=EDGE_CURVE('',#16644,#16642,#9832,.T.); #21207=EDGE_CURVE('',#16644,#16645,#9833,.T.); #21208=EDGE_CURVE('',#16645,#16643,#9834,.T.); #21209=EDGE_CURVE('',#16646,#16644,#110,.T.); #21210=EDGE_CURVE('',#16646,#16647,#9835,.T.); #21211=EDGE_CURVE('',#16647,#16645,#111,.T.); #21212=EDGE_CURVE('',#16633,#16646,#9836,.T.); #21213=EDGE_CURVE('',#16635,#16647,#9837,.T.); #21214=EDGE_CURVE('',#16648,#16649,#112,.T.); #21215=EDGE_CURVE('',#16648,#16650,#9838,.T.); #21216=EDGE_CURVE('',#16650,#16651,#113,.T.); #21217=EDGE_CURVE('',#16649,#16651,#9839,.T.); #21218=EDGE_CURVE('',#16652,#16648,#9840,.T.); #21219=EDGE_CURVE('',#16652,#16653,#9841,.T.); #21220=EDGE_CURVE('',#16653,#16650,#9842,.T.); #21221=EDGE_CURVE('',#16654,#16652,#114,.T.); #21222=EDGE_CURVE('',#16654,#16655,#9843,.T.); #21223=EDGE_CURVE('',#16655,#16653,#115,.T.); #21224=EDGE_CURVE('',#16656,#16654,#9844,.T.); #21225=EDGE_CURVE('',#16656,#16657,#9845,.T.); #21226=EDGE_CURVE('',#16657,#16655,#9846,.T.); #21227=EDGE_CURVE('',#16658,#16656,#116,.T.); #21228=EDGE_CURVE('',#16658,#16659,#9847,.T.); #21229=EDGE_CURVE('',#16659,#16657,#117,.T.); #21230=EDGE_CURVE('',#16660,#16658,#9848,.T.); #21231=EDGE_CURVE('',#16660,#16661,#9849,.T.); #21232=EDGE_CURVE('',#16661,#16659,#9850,.T.); #21233=EDGE_CURVE('',#16662,#16660,#118,.T.); #21234=EDGE_CURVE('',#16662,#16663,#9851,.T.); #21235=EDGE_CURVE('',#16663,#16661,#119,.T.); #21236=EDGE_CURVE('',#16649,#16662,#9852,.T.); #21237=EDGE_CURVE('',#16651,#16663,#9853,.T.); #21238=EDGE_CURVE('',#16664,#16665,#120,.T.); #21239=EDGE_CURVE('',#16664,#16666,#9854,.T.); #21240=EDGE_CURVE('',#16666,#16667,#121,.T.); #21241=EDGE_CURVE('',#16665,#16667,#9855,.T.); #21242=EDGE_CURVE('',#16668,#16664,#9856,.T.); #21243=EDGE_CURVE('',#16668,#16669,#9857,.T.); #21244=EDGE_CURVE('',#16669,#16666,#9858,.T.); #21245=EDGE_CURVE('',#16670,#16668,#122,.T.); #21246=EDGE_CURVE('',#16670,#16671,#9859,.T.); #21247=EDGE_CURVE('',#16671,#16669,#123,.T.); #21248=EDGE_CURVE('',#16672,#16670,#9860,.T.); #21249=EDGE_CURVE('',#16672,#16673,#9861,.T.); #21250=EDGE_CURVE('',#16673,#16671,#9862,.T.); #21251=EDGE_CURVE('',#16674,#16672,#124,.T.); #21252=EDGE_CURVE('',#16674,#16675,#9863,.T.); #21253=EDGE_CURVE('',#16675,#16673,#125,.T.); #21254=EDGE_CURVE('',#16676,#16674,#9864,.T.); #21255=EDGE_CURVE('',#16676,#16677,#9865,.T.); #21256=EDGE_CURVE('',#16677,#16675,#9866,.T.); #21257=EDGE_CURVE('',#16678,#16676,#126,.T.); #21258=EDGE_CURVE('',#16678,#16679,#9867,.T.); #21259=EDGE_CURVE('',#16679,#16677,#127,.T.); #21260=EDGE_CURVE('',#16665,#16678,#9868,.T.); #21261=EDGE_CURVE('',#16667,#16679,#9869,.T.); #21262=EDGE_CURVE('',#16680,#16681,#128,.T.); #21263=EDGE_CURVE('',#16680,#16682,#9870,.T.); #21264=EDGE_CURVE('',#16682,#16683,#129,.T.); #21265=EDGE_CURVE('',#16681,#16683,#9871,.T.); #21266=EDGE_CURVE('',#16684,#16680,#9872,.T.); #21267=EDGE_CURVE('',#16684,#16685,#9873,.T.); #21268=EDGE_CURVE('',#16685,#16682,#9874,.T.); #21269=EDGE_CURVE('',#16686,#16684,#130,.T.); #21270=EDGE_CURVE('',#16686,#16687,#9875,.T.); #21271=EDGE_CURVE('',#16687,#16685,#131,.T.); #21272=EDGE_CURVE('',#16688,#16686,#9876,.T.); #21273=EDGE_CURVE('',#16688,#16689,#9877,.T.); #21274=EDGE_CURVE('',#16689,#16687,#9878,.T.); #21275=EDGE_CURVE('',#16690,#16688,#132,.T.); #21276=EDGE_CURVE('',#16690,#16691,#9879,.T.); #21277=EDGE_CURVE('',#16691,#16689,#133,.T.); #21278=EDGE_CURVE('',#16692,#16690,#9880,.T.); #21279=EDGE_CURVE('',#16692,#16693,#9881,.T.); #21280=EDGE_CURVE('',#16693,#16691,#9882,.T.); #21281=EDGE_CURVE('',#16694,#16692,#134,.T.); #21282=EDGE_CURVE('',#16694,#16695,#9883,.T.); #21283=EDGE_CURVE('',#16695,#16693,#135,.T.); #21284=EDGE_CURVE('',#16681,#16694,#9884,.T.); #21285=EDGE_CURVE('',#16683,#16695,#9885,.T.); #21286=EDGE_CURVE('',#16696,#16697,#136,.T.); #21287=EDGE_CURVE('',#16696,#16698,#9886,.T.); #21288=EDGE_CURVE('',#16698,#16699,#137,.T.); #21289=EDGE_CURVE('',#16697,#16699,#9887,.T.); #21290=EDGE_CURVE('',#16700,#16696,#9888,.T.); #21291=EDGE_CURVE('',#16700,#16701,#9889,.T.); #21292=EDGE_CURVE('',#16701,#16698,#9890,.T.); #21293=EDGE_CURVE('',#16702,#16700,#138,.T.); #21294=EDGE_CURVE('',#16702,#16703,#9891,.T.); #21295=EDGE_CURVE('',#16703,#16701,#139,.T.); #21296=EDGE_CURVE('',#16704,#16702,#9892,.T.); #21297=EDGE_CURVE('',#16704,#16705,#9893,.T.); #21298=EDGE_CURVE('',#16705,#16703,#9894,.T.); #21299=EDGE_CURVE('',#16706,#16704,#140,.T.); #21300=EDGE_CURVE('',#16706,#16707,#9895,.T.); #21301=EDGE_CURVE('',#16707,#16705,#141,.T.); #21302=EDGE_CURVE('',#16708,#16706,#9896,.T.); #21303=EDGE_CURVE('',#16708,#16709,#9897,.T.); #21304=EDGE_CURVE('',#16709,#16707,#9898,.T.); #21305=EDGE_CURVE('',#16710,#16708,#142,.T.); #21306=EDGE_CURVE('',#16710,#16711,#9899,.T.); #21307=EDGE_CURVE('',#16711,#16709,#143,.T.); #21308=EDGE_CURVE('',#16697,#16710,#9900,.T.); #21309=EDGE_CURVE('',#16699,#16711,#9901,.T.); #21310=EDGE_CURVE('',#16712,#16713,#144,.T.); #21311=EDGE_CURVE('',#16712,#16714,#9902,.T.); #21312=EDGE_CURVE('',#16714,#16715,#145,.T.); #21313=EDGE_CURVE('',#16713,#16715,#9903,.T.); #21314=EDGE_CURVE('',#16716,#16712,#9904,.T.); #21315=EDGE_CURVE('',#16716,#16717,#9905,.T.); #21316=EDGE_CURVE('',#16717,#16714,#9906,.T.); #21317=EDGE_CURVE('',#16718,#16716,#146,.T.); #21318=EDGE_CURVE('',#16718,#16719,#9907,.T.); #21319=EDGE_CURVE('',#16719,#16717,#147,.T.); #21320=EDGE_CURVE('',#16720,#16718,#9908,.T.); #21321=EDGE_CURVE('',#16720,#16721,#9909,.T.); #21322=EDGE_CURVE('',#16721,#16719,#9910,.T.); #21323=EDGE_CURVE('',#16722,#16720,#148,.T.); #21324=EDGE_CURVE('',#16722,#16723,#9911,.T.); #21325=EDGE_CURVE('',#16723,#16721,#149,.T.); #21326=EDGE_CURVE('',#16724,#16722,#9912,.T.); #21327=EDGE_CURVE('',#16724,#16725,#9913,.T.); #21328=EDGE_CURVE('',#16725,#16723,#9914,.T.); #21329=EDGE_CURVE('',#16726,#16724,#150,.T.); #21330=EDGE_CURVE('',#16726,#16727,#9915,.T.); #21331=EDGE_CURVE('',#16727,#16725,#151,.T.); #21332=EDGE_CURVE('',#16713,#16726,#9916,.T.); #21333=EDGE_CURVE('',#16715,#16727,#9917,.T.); #21334=EDGE_CURVE('',#16728,#16729,#152,.T.); #21335=EDGE_CURVE('',#16728,#16730,#9918,.T.); #21336=EDGE_CURVE('',#16730,#16731,#153,.T.); #21337=EDGE_CURVE('',#16729,#16731,#9919,.T.); #21338=EDGE_CURVE('',#16732,#16728,#9920,.T.); #21339=EDGE_CURVE('',#16732,#16733,#9921,.T.); #21340=EDGE_CURVE('',#16733,#16730,#9922,.T.); #21341=EDGE_CURVE('',#16734,#16732,#154,.T.); #21342=EDGE_CURVE('',#16734,#16735,#9923,.T.); #21343=EDGE_CURVE('',#16735,#16733,#155,.T.); #21344=EDGE_CURVE('',#16736,#16734,#9924,.T.); #21345=EDGE_CURVE('',#16736,#16737,#9925,.T.); #21346=EDGE_CURVE('',#16737,#16735,#9926,.T.); #21347=EDGE_CURVE('',#16738,#16736,#156,.T.); #21348=EDGE_CURVE('',#16738,#16739,#9927,.T.); #21349=EDGE_CURVE('',#16739,#16737,#157,.T.); #21350=EDGE_CURVE('',#16740,#16738,#9928,.T.); #21351=EDGE_CURVE('',#16740,#16741,#9929,.T.); #21352=EDGE_CURVE('',#16741,#16739,#9930,.T.); #21353=EDGE_CURVE('',#16742,#16740,#158,.T.); #21354=EDGE_CURVE('',#16742,#16743,#9931,.T.); #21355=EDGE_CURVE('',#16743,#16741,#159,.T.); #21356=EDGE_CURVE('',#16729,#16742,#9932,.T.); #21357=EDGE_CURVE('',#16731,#16743,#9933,.T.); #21358=EDGE_CURVE('',#16744,#16745,#160,.T.); #21359=EDGE_CURVE('',#16744,#16746,#9934,.T.); #21360=EDGE_CURVE('',#16746,#16747,#161,.T.); #21361=EDGE_CURVE('',#16745,#16747,#9935,.T.); #21362=EDGE_CURVE('',#16748,#16744,#9936,.T.); #21363=EDGE_CURVE('',#16748,#16749,#9937,.T.); #21364=EDGE_CURVE('',#16749,#16746,#9938,.T.); #21365=EDGE_CURVE('',#16750,#16748,#162,.T.); #21366=EDGE_CURVE('',#16750,#16751,#9939,.T.); #21367=EDGE_CURVE('',#16751,#16749,#163,.T.); #21368=EDGE_CURVE('',#16752,#16750,#9940,.T.); #21369=EDGE_CURVE('',#16752,#16753,#9941,.T.); #21370=EDGE_CURVE('',#16753,#16751,#9942,.T.); #21371=EDGE_CURVE('',#16754,#16752,#164,.T.); #21372=EDGE_CURVE('',#16754,#16755,#9943,.T.); #21373=EDGE_CURVE('',#16755,#16753,#165,.T.); #21374=EDGE_CURVE('',#16756,#16754,#9944,.T.); #21375=EDGE_CURVE('',#16756,#16757,#9945,.T.); #21376=EDGE_CURVE('',#16757,#16755,#9946,.T.); #21377=EDGE_CURVE('',#16758,#16756,#166,.T.); #21378=EDGE_CURVE('',#16758,#16759,#9947,.T.); #21379=EDGE_CURVE('',#16759,#16757,#167,.T.); #21380=EDGE_CURVE('',#16745,#16758,#9948,.T.); #21381=EDGE_CURVE('',#16747,#16759,#9949,.T.); #21382=EDGE_CURVE('',#16760,#16761,#168,.T.); #21383=EDGE_CURVE('',#16760,#16762,#9950,.T.); #21384=EDGE_CURVE('',#16762,#16763,#169,.T.); #21385=EDGE_CURVE('',#16761,#16763,#9951,.T.); #21386=EDGE_CURVE('',#16764,#16760,#9952,.T.); #21387=EDGE_CURVE('',#16764,#16765,#9953,.T.); #21388=EDGE_CURVE('',#16765,#16762,#9954,.T.); #21389=EDGE_CURVE('',#16766,#16764,#170,.T.); #21390=EDGE_CURVE('',#16766,#16767,#9955,.T.); #21391=EDGE_CURVE('',#16767,#16765,#171,.T.); #21392=EDGE_CURVE('',#16768,#16766,#9956,.T.); #21393=EDGE_CURVE('',#16768,#16769,#9957,.T.); #21394=EDGE_CURVE('',#16769,#16767,#9958,.T.); #21395=EDGE_CURVE('',#16770,#16768,#172,.T.); #21396=EDGE_CURVE('',#16770,#16771,#9959,.T.); #21397=EDGE_CURVE('',#16771,#16769,#173,.T.); #21398=EDGE_CURVE('',#16772,#16770,#9960,.T.); #21399=EDGE_CURVE('',#16772,#16773,#9961,.T.); #21400=EDGE_CURVE('',#16773,#16771,#9962,.T.); #21401=EDGE_CURVE('',#16774,#16772,#174,.T.); #21402=EDGE_CURVE('',#16774,#16775,#9963,.T.); #21403=EDGE_CURVE('',#16775,#16773,#175,.T.); #21404=EDGE_CURVE('',#16761,#16774,#9964,.T.); #21405=EDGE_CURVE('',#16763,#16775,#9965,.T.); #21406=EDGE_CURVE('',#16776,#16777,#176,.T.); #21407=EDGE_CURVE('',#16776,#16778,#9966,.T.); #21408=EDGE_CURVE('',#16778,#16779,#177,.T.); #21409=EDGE_CURVE('',#16777,#16779,#9967,.T.); #21410=EDGE_CURVE('',#16780,#16776,#9968,.T.); #21411=EDGE_CURVE('',#16780,#16781,#9969,.T.); #21412=EDGE_CURVE('',#16781,#16778,#9970,.T.); #21413=EDGE_CURVE('',#16782,#16780,#178,.T.); #21414=EDGE_CURVE('',#16782,#16783,#9971,.T.); #21415=EDGE_CURVE('',#16783,#16781,#179,.T.); #21416=EDGE_CURVE('',#16784,#16782,#9972,.T.); #21417=EDGE_CURVE('',#16784,#16785,#9973,.T.); #21418=EDGE_CURVE('',#16785,#16783,#9974,.T.); #21419=EDGE_CURVE('',#16786,#16784,#180,.T.); #21420=EDGE_CURVE('',#16786,#16787,#9975,.T.); #21421=EDGE_CURVE('',#16787,#16785,#181,.T.); #21422=EDGE_CURVE('',#16788,#16786,#9976,.T.); #21423=EDGE_CURVE('',#16788,#16789,#9977,.T.); #21424=EDGE_CURVE('',#16789,#16787,#9978,.T.); #21425=EDGE_CURVE('',#16790,#16788,#182,.T.); #21426=EDGE_CURVE('',#16790,#16791,#9979,.T.); #21427=EDGE_CURVE('',#16791,#16789,#183,.T.); #21428=EDGE_CURVE('',#16777,#16790,#9980,.T.); #21429=EDGE_CURVE('',#16779,#16791,#9981,.T.); #21430=EDGE_CURVE('',#16792,#16793,#184,.T.); #21431=EDGE_CURVE('',#16792,#16794,#9982,.T.); #21432=EDGE_CURVE('',#16794,#16795,#185,.T.); #21433=EDGE_CURVE('',#16793,#16795,#9983,.T.); #21434=EDGE_CURVE('',#16796,#16792,#9984,.T.); #21435=EDGE_CURVE('',#16796,#16797,#9985,.T.); #21436=EDGE_CURVE('',#16797,#16794,#9986,.T.); #21437=EDGE_CURVE('',#16798,#16796,#186,.T.); #21438=EDGE_CURVE('',#16798,#16799,#9987,.T.); #21439=EDGE_CURVE('',#16799,#16797,#187,.T.); #21440=EDGE_CURVE('',#16800,#16798,#9988,.T.); #21441=EDGE_CURVE('',#16800,#16801,#9989,.T.); #21442=EDGE_CURVE('',#16801,#16799,#9990,.T.); #21443=EDGE_CURVE('',#16802,#16800,#188,.T.); #21444=EDGE_CURVE('',#16802,#16803,#9991,.T.); #21445=EDGE_CURVE('',#16803,#16801,#189,.T.); #21446=EDGE_CURVE('',#16804,#16802,#9992,.T.); #21447=EDGE_CURVE('',#16804,#16805,#9993,.T.); #21448=EDGE_CURVE('',#16805,#16803,#9994,.T.); #21449=EDGE_CURVE('',#16806,#16804,#190,.T.); #21450=EDGE_CURVE('',#16806,#16807,#9995,.T.); #21451=EDGE_CURVE('',#16807,#16805,#191,.T.); #21452=EDGE_CURVE('',#16793,#16806,#9996,.T.); #21453=EDGE_CURVE('',#16795,#16807,#9997,.T.); #21454=EDGE_CURVE('',#16808,#16809,#192,.T.); #21455=EDGE_CURVE('',#16808,#16810,#9998,.T.); #21456=EDGE_CURVE('',#16810,#16811,#193,.T.); #21457=EDGE_CURVE('',#16809,#16811,#9999,.T.); #21458=EDGE_CURVE('',#16812,#16808,#10000,.T.); #21459=EDGE_CURVE('',#16812,#16813,#10001,.T.); #21460=EDGE_CURVE('',#16813,#16810,#10002,.T.); #21461=EDGE_CURVE('',#16814,#16812,#194,.T.); #21462=EDGE_CURVE('',#16814,#16815,#10003,.T.); #21463=EDGE_CURVE('',#16815,#16813,#195,.T.); #21464=EDGE_CURVE('',#16816,#16814,#10004,.T.); #21465=EDGE_CURVE('',#16816,#16817,#10005,.T.); #21466=EDGE_CURVE('',#16817,#16815,#10006,.T.); #21467=EDGE_CURVE('',#16818,#16816,#196,.T.); #21468=EDGE_CURVE('',#16818,#16819,#10007,.T.); #21469=EDGE_CURVE('',#16819,#16817,#197,.T.); #21470=EDGE_CURVE('',#16820,#16818,#10008,.T.); #21471=EDGE_CURVE('',#16820,#16821,#10009,.T.); #21472=EDGE_CURVE('',#16821,#16819,#10010,.T.); #21473=EDGE_CURVE('',#16822,#16820,#198,.T.); #21474=EDGE_CURVE('',#16822,#16823,#10011,.T.); #21475=EDGE_CURVE('',#16823,#16821,#199,.T.); #21476=EDGE_CURVE('',#16809,#16822,#10012,.T.); #21477=EDGE_CURVE('',#16811,#16823,#10013,.T.); #21478=EDGE_CURVE('',#16824,#16825,#200,.T.); #21479=EDGE_CURVE('',#16824,#16826,#10014,.T.); #21480=EDGE_CURVE('',#16826,#16827,#201,.T.); #21481=EDGE_CURVE('',#16825,#16827,#10015,.T.); #21482=EDGE_CURVE('',#16828,#16824,#10016,.T.); #21483=EDGE_CURVE('',#16828,#16829,#10017,.T.); #21484=EDGE_CURVE('',#16829,#16826,#10018,.T.); #21485=EDGE_CURVE('',#16830,#16828,#202,.T.); #21486=EDGE_CURVE('',#16830,#16831,#10019,.T.); #21487=EDGE_CURVE('',#16831,#16829,#203,.T.); #21488=EDGE_CURVE('',#16832,#16830,#10020,.T.); #21489=EDGE_CURVE('',#16832,#16833,#10021,.T.); #21490=EDGE_CURVE('',#16833,#16831,#10022,.T.); #21491=EDGE_CURVE('',#16834,#16832,#204,.T.); #21492=EDGE_CURVE('',#16834,#16835,#10023,.T.); #21493=EDGE_CURVE('',#16835,#16833,#205,.T.); #21494=EDGE_CURVE('',#16836,#16834,#10024,.T.); #21495=EDGE_CURVE('',#16836,#16837,#10025,.T.); #21496=EDGE_CURVE('',#16837,#16835,#10026,.T.); #21497=EDGE_CURVE('',#16838,#16836,#206,.T.); #21498=EDGE_CURVE('',#16838,#16839,#10027,.T.); #21499=EDGE_CURVE('',#16839,#16837,#207,.T.); #21500=EDGE_CURVE('',#16825,#16838,#10028,.T.); #21501=EDGE_CURVE('',#16827,#16839,#10029,.T.); #21502=EDGE_CURVE('',#16840,#16841,#208,.T.); #21503=EDGE_CURVE('',#16840,#16842,#10030,.T.); #21504=EDGE_CURVE('',#16842,#16843,#209,.T.); #21505=EDGE_CURVE('',#16841,#16843,#10031,.T.); #21506=EDGE_CURVE('',#16844,#16840,#10032,.T.); #21507=EDGE_CURVE('',#16844,#16845,#10033,.T.); #21508=EDGE_CURVE('',#16845,#16842,#10034,.T.); #21509=EDGE_CURVE('',#16846,#16844,#210,.T.); #21510=EDGE_CURVE('',#16846,#16847,#10035,.T.); #21511=EDGE_CURVE('',#16847,#16845,#211,.T.); #21512=EDGE_CURVE('',#16848,#16846,#10036,.T.); #21513=EDGE_CURVE('',#16848,#16849,#10037,.T.); #21514=EDGE_CURVE('',#16849,#16847,#10038,.T.); #21515=EDGE_CURVE('',#16850,#16848,#212,.T.); #21516=EDGE_CURVE('',#16850,#16851,#10039,.T.); #21517=EDGE_CURVE('',#16851,#16849,#213,.T.); #21518=EDGE_CURVE('',#16852,#16850,#10040,.T.); #21519=EDGE_CURVE('',#16852,#16853,#10041,.T.); #21520=EDGE_CURVE('',#16853,#16851,#10042,.T.); #21521=EDGE_CURVE('',#16854,#16852,#214,.T.); #21522=EDGE_CURVE('',#16854,#16855,#10043,.T.); #21523=EDGE_CURVE('',#16855,#16853,#215,.T.); #21524=EDGE_CURVE('',#16841,#16854,#10044,.T.); #21525=EDGE_CURVE('',#16843,#16855,#10045,.T.); #21526=EDGE_CURVE('',#16856,#16857,#216,.T.); #21527=EDGE_CURVE('',#16856,#16858,#10046,.T.); #21528=EDGE_CURVE('',#16858,#16859,#217,.T.); #21529=EDGE_CURVE('',#16857,#16859,#10047,.T.); #21530=EDGE_CURVE('',#16860,#16856,#10048,.T.); #21531=EDGE_CURVE('',#16860,#16861,#10049,.T.); #21532=EDGE_CURVE('',#16861,#16858,#10050,.T.); #21533=EDGE_CURVE('',#16862,#16860,#218,.T.); #21534=EDGE_CURVE('',#16862,#16863,#10051,.T.); #21535=EDGE_CURVE('',#16863,#16861,#219,.T.); #21536=EDGE_CURVE('',#16864,#16862,#10052,.T.); #21537=EDGE_CURVE('',#16864,#16865,#10053,.T.); #21538=EDGE_CURVE('',#16865,#16863,#10054,.T.); #21539=EDGE_CURVE('',#16866,#16864,#220,.T.); #21540=EDGE_CURVE('',#16866,#16867,#10055,.T.); #21541=EDGE_CURVE('',#16867,#16865,#221,.T.); #21542=EDGE_CURVE('',#16868,#16866,#10056,.T.); #21543=EDGE_CURVE('',#16868,#16869,#10057,.T.); #21544=EDGE_CURVE('',#16869,#16867,#10058,.T.); #21545=EDGE_CURVE('',#16870,#16868,#222,.T.); #21546=EDGE_CURVE('',#16870,#16871,#10059,.T.); #21547=EDGE_CURVE('',#16871,#16869,#223,.T.); #21548=EDGE_CURVE('',#16857,#16870,#10060,.T.); #21549=EDGE_CURVE('',#16859,#16871,#10061,.T.); #21550=EDGE_CURVE('',#16872,#16873,#224,.T.); #21551=EDGE_CURVE('',#16872,#16874,#10062,.T.); #21552=EDGE_CURVE('',#16874,#16875,#225,.T.); #21553=EDGE_CURVE('',#16873,#16875,#10063,.T.); #21554=EDGE_CURVE('',#16876,#16872,#10064,.T.); #21555=EDGE_CURVE('',#16876,#16877,#10065,.T.); #21556=EDGE_CURVE('',#16877,#16874,#10066,.T.); #21557=EDGE_CURVE('',#16878,#16876,#226,.T.); #21558=EDGE_CURVE('',#16878,#16879,#10067,.T.); #21559=EDGE_CURVE('',#16879,#16877,#227,.T.); #21560=EDGE_CURVE('',#16880,#16878,#10068,.T.); #21561=EDGE_CURVE('',#16880,#16881,#10069,.T.); #21562=EDGE_CURVE('',#16881,#16879,#10070,.T.); #21563=EDGE_CURVE('',#16882,#16880,#228,.T.); #21564=EDGE_CURVE('',#16882,#16883,#10071,.T.); #21565=EDGE_CURVE('',#16883,#16881,#229,.T.); #21566=EDGE_CURVE('',#16884,#16882,#10072,.T.); #21567=EDGE_CURVE('',#16884,#16885,#10073,.T.); #21568=EDGE_CURVE('',#16885,#16883,#10074,.T.); #21569=EDGE_CURVE('',#16886,#16884,#230,.T.); #21570=EDGE_CURVE('',#16886,#16887,#10075,.T.); #21571=EDGE_CURVE('',#16887,#16885,#231,.T.); #21572=EDGE_CURVE('',#16873,#16886,#10076,.T.); #21573=EDGE_CURVE('',#16875,#16887,#10077,.T.); #21574=EDGE_CURVE('',#16888,#16889,#232,.T.); #21575=EDGE_CURVE('',#16888,#16890,#10078,.T.); #21576=EDGE_CURVE('',#16890,#16891,#233,.T.); #21577=EDGE_CURVE('',#16889,#16891,#10079,.T.); #21578=EDGE_CURVE('',#16892,#16888,#10080,.T.); #21579=EDGE_CURVE('',#16892,#16893,#10081,.T.); #21580=EDGE_CURVE('',#16893,#16890,#10082,.T.); #21581=EDGE_CURVE('',#16894,#16892,#234,.T.); #21582=EDGE_CURVE('',#16894,#16895,#10083,.T.); #21583=EDGE_CURVE('',#16895,#16893,#235,.T.); #21584=EDGE_CURVE('',#16896,#16894,#10084,.T.); #21585=EDGE_CURVE('',#16896,#16897,#10085,.T.); #21586=EDGE_CURVE('',#16897,#16895,#10086,.T.); #21587=EDGE_CURVE('',#16898,#16896,#236,.T.); #21588=EDGE_CURVE('',#16898,#16899,#10087,.T.); #21589=EDGE_CURVE('',#16899,#16897,#237,.T.); #21590=EDGE_CURVE('',#16900,#16898,#10088,.T.); #21591=EDGE_CURVE('',#16900,#16901,#10089,.T.); #21592=EDGE_CURVE('',#16901,#16899,#10090,.T.); #21593=EDGE_CURVE('',#16902,#16900,#238,.T.); #21594=EDGE_CURVE('',#16902,#16903,#10091,.T.); #21595=EDGE_CURVE('',#16903,#16901,#239,.T.); #21596=EDGE_CURVE('',#16889,#16902,#10092,.T.); #21597=EDGE_CURVE('',#16891,#16903,#10093,.T.); #21598=EDGE_CURVE('',#16538,#16904,#10094,.T.); #21599=EDGE_CURVE('',#16904,#16905,#10095,.T.); #21600=EDGE_CURVE('',#16539,#16905,#10096,.T.); #21601=EDGE_CURVE('',#16551,#16906,#10097,.T.); #21602=EDGE_CURVE('',#16906,#16904,#240,.T.); #21603=EDGE_CURVE('',#16550,#16907,#10098,.T.); #21604=EDGE_CURVE('',#16907,#16906,#241,.T.); #21605=EDGE_CURVE('',#16549,#16908,#10099,.T.); #21606=EDGE_CURVE('',#16908,#16907,#10100,.T.); #21607=EDGE_CURVE('',#16548,#16909,#10101,.T.); #21608=EDGE_CURVE('',#16909,#16908,#242,.T.); #21609=EDGE_CURVE('',#16547,#16910,#10102,.T.); #21610=EDGE_CURVE('',#16910,#16909,#243,.T.); #21611=EDGE_CURVE('',#16546,#16911,#10103,.T.); #21612=EDGE_CURVE('',#16911,#16910,#10104,.T.); #21613=EDGE_CURVE('',#16545,#16912,#10105,.T.); #21614=EDGE_CURVE('',#16912,#16911,#244,.T.); #21615=EDGE_CURVE('',#16544,#16913,#10106,.T.); #21616=EDGE_CURVE('',#16913,#16912,#245,.T.); #21617=EDGE_CURVE('',#16543,#16914,#10107,.T.); #21618=EDGE_CURVE('',#16914,#16913,#10108,.T.); #21619=EDGE_CURVE('',#16542,#16915,#10109,.T.); #21620=EDGE_CURVE('',#16915,#16914,#246,.T.); #21621=EDGE_CURVE('',#16541,#16916,#10110,.T.); #21622=EDGE_CURVE('',#16916,#16915,#247,.T.); #21623=EDGE_CURVE('',#16540,#16917,#10111,.T.); #21624=EDGE_CURVE('',#16917,#16916,#10112,.T.); #21625=EDGE_CURVE('',#16905,#16917,#248,.T.); #21626=EDGE_CURVE('',#16918,#16919,#325,.T.); #21627=EDGE_CURVE('',#16919,#16920,#10113,.T.); #21628=EDGE_CURVE('',#16920,#16921,#326,.T.); #21629=EDGE_CURVE('',#16921,#16918,#10114,.T.); #21630=EDGE_CURVE('',#16410,#16921,#10115,.T.); #21631=EDGE_CURVE('',#16409,#16918,#10116,.T.); #21632=EDGE_CURVE('',#16403,#16920,#10117,.T.); #21633=EDGE_CURVE('',#16410,#16403,#10118,.T.); #21634=EDGE_CURVE('',#16922,#16923,#327,.T.); #21635=EDGE_CURVE('',#16923,#16924,#10119,.T.); #21636=EDGE_CURVE('',#16924,#16925,#328,.T.); #21637=EDGE_CURVE('',#16925,#16922,#10120,.T.); #21638=EDGE_CURVE('',#16408,#16925,#10121,.T.); #21639=EDGE_CURVE('',#16407,#16922,#10122,.T.); #21640=EDGE_CURVE('',#16405,#16924,#10123,.T.); #21641=EDGE_CURVE('',#16408,#16405,#10124,.T.); #21642=EDGE_CURVE('',#16406,#16923,#10125,.T.); #21643=EDGE_CURVE('',#16404,#16409,#10126,.T.); #21644=EDGE_CURVE('',#16404,#16919,#10127,.T.); #21645=EDGE_CURVE('',#16402,#16411,#10128,.T.); #21646=EDGE_CURVE('',#16926,#16927,#329,.T.); #21647=EDGE_CURVE('',#16927,#16928,#10129,.T.); #21648=EDGE_CURVE('',#16928,#16929,#330,.T.); #21649=EDGE_CURVE('',#16929,#16926,#10130,.T.); #21650=EDGE_CURVE('',#16416,#16929,#10131,.T.); #21651=EDGE_CURVE('',#16415,#16926,#10132,.T.); #21652=EDGE_CURVE('',#16397,#16928,#10133,.T.); #21653=EDGE_CURVE('',#16416,#16397,#10134,.T.); #21654=EDGE_CURVE('',#16930,#16931,#331,.T.); #21655=EDGE_CURVE('',#16931,#16932,#10135,.T.); #21656=EDGE_CURVE('',#16932,#16933,#332,.T.); #21657=EDGE_CURVE('',#16933,#16930,#10136,.T.); #21658=EDGE_CURVE('',#16384,#16933,#10137,.T.); #21659=EDGE_CURVE('',#16417,#16930,#10138,.T.); #21660=EDGE_CURVE('',#16385,#16932,#10139,.T.); #21661=EDGE_CURVE('',#16398,#16927,#10140,.T.); #21662=EDGE_CURVE('',#16398,#16415,#10141,.T.); #21663=EDGE_CURVE('',#16396,#16417,#10142,.T.); #21664=EDGE_CURVE('',#16399,#16414,#10143,.T.); #21665=EDGE_CURVE('',#16396,#16931,#10144,.T.); #21666=EDGE_CURVE('',#16400,#16413,#10145,.T.); #21667=EDGE_CURVE('',#16401,#16412,#10146,.T.); #21668=EDGE_CURVE('',#16934,#16389,#10147,.T.); #21669=EDGE_CURVE('',#16935,#16934,#10148,.T.); #21670=EDGE_CURVE('',#16388,#16935,#10149,.T.); #21671=EDGE_CURVE('',#16395,#16936,#10150,.T.); #21672=EDGE_CURVE('',#16934,#16936,#6774,.T.); #21673=EDGE_CURVE('',#16937,#16394,#10151,.T.); #21674=EDGE_CURVE('',#16936,#16937,#10152,.T.); #21675=EDGE_CURVE('',#16393,#16938,#10153,.T.); #21676=EDGE_CURVE('',#16937,#16938,#6775,.T.); #21677=EDGE_CURVE('',#16939,#16390,#10154,.T.); #21678=EDGE_CURVE('',#16940,#16939,#10155,.T.); #21679=EDGE_CURVE('',#16391,#16940,#10156,.T.); #21680=EDGE_CURVE('',#16939,#16935,#6776,.T.); #21681=EDGE_CURVE('',#16511,#16934,#10157,.T.); #21682=EDGE_CURVE('',#16936,#16510,#10158,.T.); #21683=EDGE_CURVE('',#16517,#16935,#10159,.T.); #21684=EDGE_CURVE('',#16516,#16939,#10160,.T.); #21685=EDGE_CURVE('',#16515,#16940,#10161,.T.); #21686=EDGE_CURVE('',#16514,#16941,#10162,.T.); #21687=EDGE_CURVE('',#16941,#16940,#6777,.T.); #21688=EDGE_CURVE('',#16513,#16938,#10163,.T.); #21689=EDGE_CURVE('',#16938,#16941,#10164,.T.); #21690=EDGE_CURVE('',#16512,#16937,#10165,.T.); #21691=EDGE_CURVE('',#16941,#16392,#10166,.T.); #21692=EDGE_CURVE('',#16942,#16943,#333,.T.); #21693=EDGE_CURVE('',#16944,#16942,#10167,.T.); #21694=EDGE_CURVE('',#16945,#16944,#334,.T.); #21695=EDGE_CURVE('',#16943,#16945,#10168,.T.); #21696=EDGE_CURVE('',#16946,#16942,#10169,.T.); #21697=EDGE_CURVE('',#16947,#16946,#10170,.T.); #21698=EDGE_CURVE('',#16947,#16944,#10171,.T.); #21699=EDGE_CURVE('',#16948,#16947,#10172,.T.); #21700=EDGE_CURVE('',#16948,#16945,#10173,.T.); #21701=EDGE_CURVE('',#16949,#16948,#10174,.T.); #21702=EDGE_CURVE('',#16949,#16943,#10175,.F.); #21703=EDGE_CURVE('',#16946,#16949,#10176,.T.); #21704=EDGE_CURVE('',#16950,#16951,#335,.T.); #21705=EDGE_CURVE('',#16951,#16952,#10177,.T.); #21706=EDGE_CURVE('',#16952,#16953,#336,.T.); #21707=EDGE_CURVE('',#16953,#16950,#10178,.T.); #21708=EDGE_CURVE('',#16954,#16953,#10179,.T.); #21709=EDGE_CURVE('',#16955,#16954,#10180,.T.); #21710=EDGE_CURVE('',#16955,#16950,#10181,.T.); #21711=EDGE_CURVE('',#16956,#16952,#10182,.T.); #21712=EDGE_CURVE('',#16954,#16956,#10183,.T.); #21713=EDGE_CURVE('',#16957,#16951,#10184,.F.); #21714=EDGE_CURVE('',#16956,#16957,#10185,.T.); #21715=EDGE_CURVE('',#16957,#16955,#10186,.T.); #21716=EDGE_CURVE('',#16958,#16958,#6778,.T.); #21717=EDGE_CURVE('',#16958,#16959,#6779,.T.); #21718=EDGE_CURVE('',#16959,#16959,#6780,.T.); #21719=EDGE_CURVE('',#16959,#16960,#10187,.T.); #21720=EDGE_CURVE('',#16960,#16960,#6781,.F.); #21721=EDGE_CURVE('',#16961,#16961,#6782,.T.); #21722=EDGE_CURVE('',#16961,#16962,#6783,.T.); #21723=EDGE_CURVE('',#16962,#16962,#6784,.T.); #21724=EDGE_CURVE('',#16962,#16963,#10188,.T.); #21725=EDGE_CURVE('',#16963,#16963,#6785,.F.); #21726=EDGE_CURVE('',#16964,#16964,#6786,.T.); #21727=EDGE_CURVE('',#16964,#16965,#6787,.T.); #21728=EDGE_CURVE('',#16965,#16965,#6788,.T.); #21729=EDGE_CURVE('',#16965,#16966,#10189,.T.); #21730=EDGE_CURVE('',#16966,#16966,#6789,.F.); #21731=EDGE_CURVE('',#16967,#16968,#10190,.T.); #21732=EDGE_CURVE('',#16969,#16968,#10191,.T.); #21733=EDGE_CURVE('',#16970,#16969,#10192,.T.); #21734=EDGE_CURVE('',#16967,#16970,#10193,.T.); #21735=EDGE_CURVE('',#16971,#16972,#10194,.T.); #21736=EDGE_CURVE('',#16969,#16971,#10195,.T.); #21737=EDGE_CURVE('',#16973,#16968,#10196,.T.); #21738=EDGE_CURVE('',#16972,#16973,#10197,.T.); #21739=EDGE_CURVE('',#16974,#16975,#10198,.T.); #21740=EDGE_CURVE('',#16974,#16976,#10199,.T.); #21741=EDGE_CURVE('',#16967,#16976,#10200,.T.); #21742=EDGE_CURVE('',#16975,#16970,#10201,.T.); #21743=EDGE_CURVE('',#16972,#16974,#10202,.T.); #21744=EDGE_CURVE('',#16976,#16973,#10203,.T.); #21745=EDGE_CURVE('',#16971,#16977,#10204,.T.); #21746=EDGE_CURVE('',#16977,#16978,#6790,.T.); #21747=EDGE_CURVE('',#16978,#16979,#10205,.T.); #21748=EDGE_CURVE('',#16979,#16980,#6791,.T.); #21749=EDGE_CURVE('',#16980,#16981,#10206,.T.); #21750=EDGE_CURVE('',#16981,#16982,#6792,.T.); #21751=EDGE_CURVE('',#16982,#16983,#10207,.T.); #21752=EDGE_CURVE('',#16983,#16984,#6793,.T.); #21753=EDGE_CURVE('',#16984,#16975,#10208,.T.); #21754=EDGE_CURVE('',#16985,#16986,#10209,.T.); #21755=EDGE_CURVE('',#16986,#16987,#10210,.T.); #21756=EDGE_CURVE('',#16987,#16988,#10211,.T.); #21757=EDGE_CURVE('',#16988,#16985,#10212,.T.); #21758=EDGE_CURVE('',#16989,#16990,#6794,.T.); #21759=EDGE_CURVE('',#16990,#16991,#10213,.T.); #21760=EDGE_CURVE('',#16991,#16992,#6795,.T.); #21761=EDGE_CURVE('',#16992,#16989,#10214,.T.); #21762=EDGE_CURVE('',#16993,#16994,#6796,.T.); #21763=EDGE_CURVE('',#16994,#16992,#6797,.T.); #21764=EDGE_CURVE('',#16991,#16993,#6798,.T.); #21765=EDGE_CURVE('',#16995,#16996,#6799,.T.); #21766=EDGE_CURVE('',#16996,#16994,#10215,.T.); #21767=EDGE_CURVE('',#16993,#16995,#10216,.T.); #21768=EDGE_CURVE('',#16989,#16996,#6800,.T.); #21769=EDGE_CURVE('',#16995,#16990,#6801,.T.); #21770=EDGE_CURVE('',#16991,#16997,#10217,.T.); #21771=EDGE_CURVE('',#16997,#16998,#6802,.T.); #21772=EDGE_CURVE('',#16999,#16998,#6803,.T.); #21773=EDGE_CURVE('',#16993,#16999,#10218,.T.); #21774=EDGE_CURVE('',#16990,#17000,#10219,.T.); #21775=EDGE_CURVE('',#17000,#16997,#10220,.T.); #21776=EDGE_CURVE('',#17001,#16978,#10221,.T.); #21777=EDGE_CURVE('',#17002,#17001,#10222,.T.); #21778=EDGE_CURVE('',#16979,#17002,#10223,.T.); #21779=EDGE_CURVE('',#17003,#17004,#6804,.T.); #21780=EDGE_CURVE('',#17005,#17003,#10224,.T.); #21781=EDGE_CURVE('',#17006,#17005,#6805,.T.); #21782=EDGE_CURVE('',#17004,#17006,#10225,.T.); #21783=EDGE_CURVE('',#17004,#17007,#6806,.T.); #21784=EDGE_CURVE('',#17007,#17008,#6807,.T.); #21785=EDGE_CURVE('',#17008,#17003,#6808,.T.); #21786=EDGE_CURVE('',#17009,#17005,#6809,.T.); #21787=EDGE_CURVE('',#17008,#17009,#10226,.T.); #21788=EDGE_CURVE('',#17010,#17006,#6810,.T.); #21789=EDGE_CURVE('',#17009,#17010,#6811,.T.); #21790=EDGE_CURVE('',#17010,#17007,#10227,.T.); #21791=EDGE_CURVE('',#17008,#17011,#10228,.T.); #21792=EDGE_CURVE('',#17012,#17011,#10229,.T.); #21793=EDGE_CURVE('',#17009,#17012,#10230,.T.); #21794=EDGE_CURVE('',#17007,#17013,#10231,.T.); #21795=EDGE_CURVE('',#17011,#17013,#6812,.T.); #21796=EDGE_CURVE('',#17014,#17015,#10232,.T.); #21797=EDGE_CURVE('',#17015,#17016,#10233,.T.); #21798=EDGE_CURVE('',#17016,#17017,#10234,.T.); #21799=EDGE_CURVE('',#17017,#17014,#10235,.T.); #21800=EDGE_CURVE('',#17015,#17018,#10236,.T.); #21801=EDGE_CURVE('',#17018,#17019,#10237,.T.); #21802=EDGE_CURVE('',#17019,#17016,#10238,.T.); #21803=EDGE_CURVE('',#17018,#17020,#10239,.T.); #21804=EDGE_CURVE('',#17020,#17021,#10240,.T.); #21805=EDGE_CURVE('',#17021,#17019,#10241,.T.); #21806=EDGE_CURVE('',#17017,#17021,#10242,.T.); #21807=EDGE_CURVE('',#17020,#17014,#10243,.T.); #21808=EDGE_CURVE('',#17017,#17022,#10244,.T.); #21809=EDGE_CURVE('',#17023,#17022,#10245,.T.); #21810=EDGE_CURVE('',#17021,#17023,#10246,.T.); #21811=EDGE_CURVE('',#17016,#17024,#10247,.T.); #21812=EDGE_CURVE('',#17022,#17024,#10248,.T.); #21813=EDGE_CURVE('',#17025,#16982,#10249,.T.); #21814=EDGE_CURVE('',#17026,#17025,#10250,.T.); #21815=EDGE_CURVE('',#16983,#17026,#10251,.T.); #21816=EDGE_CURVE('',#17027,#17028,#10252,.T.); #21817=EDGE_CURVE('',#17029,#17027,#10253,.T.); #21818=EDGE_CURVE('',#17030,#17029,#10254,.T.); #21819=EDGE_CURVE('',#17028,#17030,#10255,.T.); #21820=EDGE_CURVE('',#17028,#17031,#10256,.T.); #21821=EDGE_CURVE('',#17031,#17032,#10257,.T.); #21822=EDGE_CURVE('',#17027,#17032,#10258,.T.); #21823=EDGE_CURVE('',#17030,#17033,#10259,.T.); #21824=EDGE_CURVE('',#17033,#17031,#10260,.T.); #21825=EDGE_CURVE('',#17032,#17034,#10261,.T.); #21826=EDGE_CURVE('',#17034,#17029,#10262,.T.); #21827=EDGE_CURVE('',#17034,#17033,#10263,.T.); #21828=EDGE_CURVE('',#17032,#17035,#10264,.T.); #21829=EDGE_CURVE('',#17036,#17035,#10265,.T.); #21830=EDGE_CURVE('',#17034,#17036,#10266,.T.); #21831=EDGE_CURVE('',#17031,#17037,#10267,.T.); #21832=EDGE_CURVE('',#17035,#17037,#10268,.T.); #21833=EDGE_CURVE('',#17038,#16998,#10269,.T.); #21834=EDGE_CURVE('',#17038,#17000,#6813,.T.); #21835=EDGE_CURVE('',#17039,#16999,#10270,.T.); #21836=EDGE_CURVE('',#16995,#17039,#10271,.T.); #21837=EDGE_CURVE('',#17038,#17039,#6814,.T.); #21838=EDGE_CURVE('',#17010,#17040,#10272,.T.); #21839=EDGE_CURVE('',#17013,#17040,#10273,.T.); #21840=EDGE_CURVE('',#17040,#17012,#6815,.T.); #21841=EDGE_CURVE('',#17033,#17041,#10274,.T.); #21842=EDGE_CURVE('',#17037,#17041,#10275,.T.); #21843=EDGE_CURVE('',#17041,#17036,#10276,.T.); #21844=EDGE_CURVE('',#17019,#17042,#10277,.T.); #21845=EDGE_CURVE('',#17024,#17042,#10278,.T.); #21846=EDGE_CURVE('',#17042,#17023,#10279,.T.); #21847=EDGE_CURVE('',#17043,#17044,#10280,.T.); #21848=EDGE_CURVE('',#17045,#17043,#10281,.T.); #21849=EDGE_CURVE('',#17045,#17044,#10282,.T.); #21850=EDGE_CURVE('',#17046,#17047,#10283,.T.); #21851=EDGE_CURVE('',#17048,#17046,#10284,.T.); #21852=EDGE_CURVE('',#17048,#17047,#10285,.T.); #21853=EDGE_CURVE('',#17044,#17047,#10286,.F.); #21854=EDGE_CURVE('',#17043,#17048,#10287,.T.); #21855=EDGE_CURVE('',#17049,#17050,#10288,.T.); #21856=EDGE_CURVE('',#17051,#17049,#10289,.T.); #21857=EDGE_CURVE('',#17051,#17050,#10290,.T.); #21858=EDGE_CURVE('',#17052,#17053,#10291,.T.); #21859=EDGE_CURVE('',#17054,#17052,#10292,.T.); #21860=EDGE_CURVE('',#17054,#17053,#10293,.T.); #21861=EDGE_CURVE('',#17050,#17053,#10294,.F.); #21862=EDGE_CURVE('',#17049,#17054,#10295,.T.); #21863=EDGE_CURVE('',#17055,#17056,#10296,.T.); #21864=EDGE_CURVE('',#17057,#17055,#10297,.T.); #21865=EDGE_CURVE('',#17057,#17056,#10298,.T.); #21866=EDGE_CURVE('',#17058,#17059,#10299,.T.); #21867=EDGE_CURVE('',#17060,#17058,#10300,.T.); #21868=EDGE_CURVE('',#17060,#17059,#10301,.T.); #21869=EDGE_CURVE('',#17056,#17059,#10302,.F.); #21870=EDGE_CURVE('',#17055,#17060,#10303,.T.); #21871=EDGE_CURVE('',#17061,#17062,#10304,.T.); #21872=EDGE_CURVE('',#17063,#17061,#10305,.T.); #21873=EDGE_CURVE('',#17063,#17062,#10306,.T.); #21874=EDGE_CURVE('',#17064,#17065,#10307,.T.); #21875=EDGE_CURVE('',#17066,#17064,#10308,.T.); #21876=EDGE_CURVE('',#17066,#17065,#10309,.T.); #21877=EDGE_CURVE('',#17062,#17065,#10310,.F.); #21878=EDGE_CURVE('',#17061,#17066,#10311,.T.); #21879=EDGE_CURVE('',#17067,#17068,#6816,.T.); #21880=EDGE_CURVE('',#17067,#17069,#10312,.T.); #21881=EDGE_CURVE('',#17069,#17070,#6817,.T.); #21882=EDGE_CURVE('',#17070,#17068,#10313,.T.); #21883=EDGE_CURVE('',#17068,#17071,#6818,.T.); #21884=EDGE_CURVE('',#17071,#17072,#6819,.T.); #21885=EDGE_CURVE('',#17072,#17073,#10314,.T.); #21886=EDGE_CURVE('',#17073,#17074,#10315,.T.); #21887=EDGE_CURVE('',#17074,#17075,#6820,.T.); #21888=EDGE_CURVE('',#17075,#17076,#6821,.T.); #21889=EDGE_CURVE('',#17076,#17077,#6822,.T.); #21890=EDGE_CURVE('',#17077,#17078,#10316,.T.); #21891=EDGE_CURVE('',#17078,#17079,#6823,.T.); #21892=EDGE_CURVE('',#17079,#17080,#6824,.T.); #21893=EDGE_CURVE('',#17080,#17081,#6825,.T.); #21894=EDGE_CURVE('',#17081,#17082,#10317,.T.); #21895=EDGE_CURVE('',#17082,#17067,#10318,.T.); #21896=EDGE_CURVE('',#17083,#17070,#6826,.T.); #21897=EDGE_CURVE('',#17071,#17083,#10319,.T.); #21898=EDGE_CURVE('',#17083,#17084,#6827,.T.); #21899=EDGE_CURVE('',#17084,#17072,#10320,.T.); #21900=EDGE_CURVE('',#17080,#17085,#10321,.T.); #21901=EDGE_CURVE('',#17085,#17086,#6828,.T.); #21902=EDGE_CURVE('',#17086,#17081,#10322,.T.); #21903=EDGE_CURVE('',#17087,#17079,#10323,.T.); #21904=EDGE_CURVE('',#17085,#17087,#6829,.T.); #21905=EDGE_CURVE('',#17078,#17088,#10324,.T.); #21906=EDGE_CURVE('',#17088,#17087,#6830,.T.); #21907=EDGE_CURVE('',#17089,#17077,#10325,.T.); #21908=EDGE_CURVE('',#17088,#17089,#10326,.T.); #21909=EDGE_CURVE('',#17076,#17090,#10327,.T.); #21910=EDGE_CURVE('',#17090,#17089,#6831,.T.); #21911=EDGE_CURVE('',#17091,#17075,#10328,.T.); #21912=EDGE_CURVE('',#17090,#17091,#6832,.T.); #21913=EDGE_CURVE('',#17074,#17092,#10329,.T.); #21914=EDGE_CURVE('',#17092,#17091,#6833,.T.); #21915=EDGE_CURVE('',#17073,#17093,#10330,.T.); #21916=EDGE_CURVE('',#17092,#17093,#10331,.T.); #21917=EDGE_CURVE('',#17093,#17084,#10332,.T.); #21918=EDGE_CURVE('',#17094,#17095,#10333,.T.); #21919=EDGE_CURVE('',#17096,#17094,#10334,.T.); #21920=EDGE_CURVE('',#17097,#17096,#10335,.T.); #21921=EDGE_CURVE('',#16998,#17097,#10336,.T.); #21922=EDGE_CURVE('',#17095,#17038,#10337,.T.); #21923=EDGE_CURVE('',#17069,#17098,#10338,.T.); #21924=EDGE_CURVE('',#17098,#17086,#10339,.T.); #21925=EDGE_CURVE('',#17082,#17098,#10340,.T.); #21926=EDGE_CURVE('',#16968,#17057,#10341,.T.); #21927=EDGE_CURVE('',#17058,#17099,#10342,.T.); #21928=EDGE_CURVE('',#17099,#17097,#10343,.T.); #21929=EDGE_CURVE('',#17100,#17096,#10344,.T.); #21930=EDGE_CURVE('',#17100,#17063,#10345,.T.); #21931=EDGE_CURVE('',#17064,#16967,#10346,.T.); #21932=EDGE_CURVE('',#17101,#17094,#10347,.F.); #21933=EDGE_CURVE('',#17101,#17100,#10348,.T.); #21934=EDGE_CURVE('',#17046,#17051,#10349,.F.); #21935=EDGE_CURVE('',#17052,#17101,#10350,.F.); #21936=EDGE_CURVE('',#17102,#17095,#10351,.F.); #21937=EDGE_CURVE('',#17102,#17045,#10352,.F.); #21938=EDGE_CURVE('',#17099,#17102,#10353,.F.); #21939=EDGE_CURVE('',#16985,#17102,#10354,.T.); #21940=EDGE_CURVE('',#17101,#16988,#10355,.T.); #21941=EDGE_CURVE('',#17100,#16987,#10356,.T.); #21942=EDGE_CURVE('',#17099,#16986,#10357,.T.); #21943=EDGE_CURVE('',#17103,#17026,#6834,.T.); #21944=EDGE_CURVE('',#17103,#16984,#10358,.T.); #21945=EDGE_CURVE('',#17104,#17105,#6835,.T.); #21946=EDGE_CURVE('',#17106,#17104,#10359,.T.); #21947=EDGE_CURVE('',#17107,#17106,#6836,.T.); #21948=EDGE_CURVE('',#17108,#17107,#10360,.T.); #21949=EDGE_CURVE('',#17109,#17108,#6837,.T.); #21950=EDGE_CURVE('',#17110,#17109,#10361,.T.); #21951=EDGE_CURVE('',#17111,#17110,#6838,.T.); #21952=EDGE_CURVE('',#17105,#17111,#10362,.T.); #21953=EDGE_CURVE('',#16981,#17112,#10363,.T.); #21954=EDGE_CURVE('',#17025,#17112,#6839,.T.); #21955=EDGE_CURVE('',#17113,#16980,#10364,.T.); #21956=EDGE_CURVE('',#17112,#17113,#10365,.T.); #21957=EDGE_CURVE('',#17106,#17113,#10366,.T.); #21958=EDGE_CURVE('',#17112,#17104,#10367,.T.); #21959=EDGE_CURVE('',#17113,#17002,#6840,.T.); #21960=EDGE_CURVE('',#17107,#17002,#10368,.T.); #21961=EDGE_CURVE('',#17108,#17001,#10369,.T.); #21962=EDGE_CURVE('',#17001,#17114,#6841,.T.); #21963=EDGE_CURVE('',#17109,#17114,#10370,.T.); #21964=EDGE_CURVE('',#17110,#17103,#10371,.T.); #21965=EDGE_CURVE('',#17114,#17103,#10372,.T.); #21966=EDGE_CURVE('',#17111,#17026,#10373,.T.); #21967=EDGE_CURVE('',#17105,#17025,#10374,.T.); #21968=EDGE_CURVE('',#16977,#17114,#10375,.T.); #21969=ORIENTED_EDGE('',*,*,#17115,.F.); #21970=ORIENTED_EDGE('',*,*,#17116,.T.); #21971=ORIENTED_EDGE('',*,*,#17117,.T.); #21972=ORIENTED_EDGE('',*,*,#17118,.F.); #21973=ORIENTED_EDGE('',*,*,#17119,.T.); #21974=ORIENTED_EDGE('',*,*,#17115,.T.); #21975=ORIENTED_EDGE('',*,*,#17120,.F.); #21976=ORIENTED_EDGE('',*,*,#17121,.F.); #21977=ORIENTED_EDGE('',*,*,#17117,.F.); #21978=ORIENTED_EDGE('',*,*,#17122,.T.); #21979=ORIENTED_EDGE('',*,*,#17123,.T.); #21980=ORIENTED_EDGE('',*,*,#17124,.F.); #21981=ORIENTED_EDGE('',*,*,#17125,.T.); #21982=ORIENTED_EDGE('',*,*,#17126,.F.); #21983=ORIENTED_EDGE('',*,*,#17127,.F.); #21984=ORIENTED_EDGE('',*,*,#17128,.F.); #21985=ORIENTED_EDGE('',*,*,#17129,.F.); #21986=ORIENTED_EDGE('',*,*,#17130,.F.); #21987=ORIENTED_EDGE('',*,*,#17131,.F.); #21988=ORIENTED_EDGE('',*,*,#17132,.F.); #21989=ORIENTED_EDGE('',*,*,#17133,.F.); #21990=ORIENTED_EDGE('',*,*,#17122,.F.); #21991=ORIENTED_EDGE('',*,*,#17116,.F.); #21992=ORIENTED_EDGE('',*,*,#17119,.F.); #21993=ORIENTED_EDGE('',*,*,#17134,.F.); #21994=ORIENTED_EDGE('',*,*,#17120,.T.); #21995=ORIENTED_EDGE('',*,*,#17118,.T.); #21996=ORIENTED_EDGE('',*,*,#17124,.T.); #21997=ORIENTED_EDGE('',*,*,#17135,.T.); #21998=ORIENTED_EDGE('',*,*,#17136,.T.); #21999=ORIENTED_EDGE('',*,*,#17137,.T.); #22000=ORIENTED_EDGE('',*,*,#17138,.T.); #22001=ORIENTED_EDGE('',*,*,#17139,.T.); #22002=ORIENTED_EDGE('',*,*,#17140,.T.); #22003=ORIENTED_EDGE('',*,*,#17141,.T.); #22004=ORIENTED_EDGE('',*,*,#17142,.T.); #22005=ORIENTED_EDGE('',*,*,#17143,.F.); #22006=ORIENTED_EDGE('',*,*,#17144,.T.); #22007=ORIENTED_EDGE('',*,*,#17145,.T.); #22008=ORIENTED_EDGE('',*,*,#17121,.T.); #22009=ORIENTED_EDGE('',*,*,#17146,.T.); #22010=ORIENTED_EDGE('',*,*,#17147,.T.); #22011=ORIENTED_EDGE('',*,*,#17148,.T.); #22012=ORIENTED_EDGE('',*,*,#17149,.T.); #22013=ORIENTED_EDGE('',*,*,#17150,.T.); #22014=ORIENTED_EDGE('',*,*,#17151,.T.); #22015=ORIENTED_EDGE('',*,*,#17152,.T.); #22016=ORIENTED_EDGE('',*,*,#17153,.F.); #22017=ORIENTED_EDGE('',*,*,#17133,.T.); #22018=ORIENTED_EDGE('',*,*,#17154,.T.); #22019=ORIENTED_EDGE('',*,*,#17135,.F.); #22020=ORIENTED_EDGE('',*,*,#17123,.F.); #22021=ORIENTED_EDGE('',*,*,#17155,.T.); #22022=ORIENTED_EDGE('',*,*,#17156,.T.); #22023=ORIENTED_EDGE('',*,*,#17125,.F.); #22024=ORIENTED_EDGE('',*,*,#17145,.F.); #22025=ORIENTED_EDGE('',*,*,#17126,.T.); #22026=ORIENTED_EDGE('',*,*,#17157,.T.); #22027=ORIENTED_EDGE('',*,*,#17158,.T.); #22028=ORIENTED_EDGE('',*,*,#17159,.F.); #22029=ORIENTED_EDGE('',*,*,#17142,.F.); #22030=ORIENTED_EDGE('',*,*,#17160,.F.); #22031=ORIENTED_EDGE('',*,*,#17127,.T.); #22032=ORIENTED_EDGE('',*,*,#17160,.T.); #22033=ORIENTED_EDGE('',*,*,#17141,.F.); #22034=ORIENTED_EDGE('',*,*,#17161,.F.); #22035=ORIENTED_EDGE('',*,*,#17162,.F.); #22036=ORIENTED_EDGE('',*,*,#17128,.T.); #22037=ORIENTED_EDGE('',*,*,#17161,.T.); #22038=ORIENTED_EDGE('',*,*,#17140,.F.); #22039=ORIENTED_EDGE('',*,*,#17163,.F.); #22040=ORIENTED_EDGE('',*,*,#17129,.T.); #22041=ORIENTED_EDGE('',*,*,#17162,.T.); #22042=ORIENTED_EDGE('',*,*,#17139,.F.); #22043=ORIENTED_EDGE('',*,*,#17164,.F.); #22044=ORIENTED_EDGE('',*,*,#17130,.T.); #22045=ORIENTED_EDGE('',*,*,#17163,.T.); #22046=ORIENTED_EDGE('',*,*,#17138,.F.); #22047=ORIENTED_EDGE('',*,*,#17165,.F.); #22048=ORIENTED_EDGE('',*,*,#17131,.T.); #22049=ORIENTED_EDGE('',*,*,#17164,.T.); #22050=ORIENTED_EDGE('',*,*,#17137,.F.); #22051=ORIENTED_EDGE('',*,*,#17154,.F.); #22052=ORIENTED_EDGE('',*,*,#17132,.T.); #22053=ORIENTED_EDGE('',*,*,#17165,.T.); #22054=ORIENTED_EDGE('',*,*,#17136,.F.); #22055=ORIENTED_EDGE('',*,*,#17134,.T.); #22056=ORIENTED_EDGE('',*,*,#17166,.T.); #22057=ORIENTED_EDGE('',*,*,#17167,.F.); #22058=ORIENTED_EDGE('',*,*,#17146,.F.); #22059=ORIENTED_EDGE('',*,*,#17168,.T.); #22060=ORIENTED_EDGE('',*,*,#17169,.T.); #22061=ORIENTED_EDGE('',*,*,#17170,.T.); #22062=ORIENTED_EDGE('',*,*,#17143,.T.); #22063=ORIENTED_EDGE('',*,*,#17171,.T.); #22064=ORIENTED_EDGE('',*,*,#17172,.T.); #22065=ORIENTED_EDGE('',*,*,#17173,.T.); #22066=ORIENTED_EDGE('',*,*,#17174,.T.); #22067=ORIENTED_EDGE('',*,*,#17170,.F.); #22068=ORIENTED_EDGE('',*,*,#17175,.T.); #22069=ORIENTED_EDGE('',*,*,#17176,.T.); #22070=ORIENTED_EDGE('',*,*,#17144,.F.); #22071=ORIENTED_EDGE('',*,*,#17171,.F.); #22072=ORIENTED_EDGE('',*,*,#17153,.T.); #22073=ORIENTED_EDGE('',*,*,#17177,.T.); #22074=ORIENTED_EDGE('',*,*,#17178,.F.); #22075=ORIENTED_EDGE('',*,*,#17179,.T.); #22076=ORIENTED_EDGE('',*,*,#17180,.T.); #22077=ORIENTED_EDGE('',*,*,#17181,.F.); #22078=ORIENTED_EDGE('',*,*,#17152,.F.); #22079=ORIENTED_EDGE('',*,*,#17182,.T.); #22080=ORIENTED_EDGE('',*,*,#17183,.T.); #22081=ORIENTED_EDGE('',*,*,#17184,.F.); #22082=ORIENTED_EDGE('',*,*,#17151,.F.); #22083=ORIENTED_EDGE('',*,*,#17185,.T.); #22084=ORIENTED_EDGE('',*,*,#17186,.T.); #22085=ORIENTED_EDGE('',*,*,#17187,.F.); #22086=ORIENTED_EDGE('',*,*,#17150,.F.); #22087=ORIENTED_EDGE('',*,*,#17188,.T.); #22088=ORIENTED_EDGE('',*,*,#17189,.T.); #22089=ORIENTED_EDGE('',*,*,#17190,.F.); #22090=ORIENTED_EDGE('',*,*,#17147,.F.); #22091=ORIENTED_EDGE('',*,*,#17191,.T.); #22092=ORIENTED_EDGE('',*,*,#17192,.T.); #22093=ORIENTED_EDGE('',*,*,#17193,.F.); #22094=ORIENTED_EDGE('',*,*,#17149,.F.); #22095=ORIENTED_EDGE('',*,*,#17194,.T.); #22096=ORIENTED_EDGE('',*,*,#17195,.T.); #22097=ORIENTED_EDGE('',*,*,#17196,.F.); #22098=ORIENTED_EDGE('',*,*,#17148,.F.); #22099=ORIENTED_EDGE('',*,*,#17176,.F.); #22100=ORIENTED_EDGE('',*,*,#17197,.T.); #22101=ORIENTED_EDGE('',*,*,#17198,.T.); #22102=ORIENTED_EDGE('',*,*,#17155,.F.); #22103=ORIENTED_EDGE('',*,*,#17199,.T.); #22104=ORIENTED_EDGE('',*,*,#17200,.T.); #22105=ORIENTED_EDGE('',*,*,#17157,.F.); #22106=ORIENTED_EDGE('',*,*,#17156,.F.); #22107=ORIENTED_EDGE('',*,*,#17200,.F.); #22108=ORIENTED_EDGE('',*,*,#17201,.T.); #22109=ORIENTED_EDGE('',*,*,#17202,.T.); #22110=ORIENTED_EDGE('',*,*,#17203,.F.); #22111=ORIENTED_EDGE('',*,*,#17204,.F.); #22112=ORIENTED_EDGE('',*,*,#17205,.F.); #22113=ORIENTED_EDGE('',*,*,#17206,.F.); #22114=ORIENTED_EDGE('',*,*,#17207,.F.); #22115=ORIENTED_EDGE('',*,*,#17208,.F.); #22116=ORIENTED_EDGE('',*,*,#17209,.F.); #22117=ORIENTED_EDGE('',*,*,#17210,.F.); #22118=ORIENTED_EDGE('',*,*,#17158,.F.); #22119=ORIENTED_EDGE('',*,*,#17159,.T.); #22120=ORIENTED_EDGE('',*,*,#17210,.T.); #22121=ORIENTED_EDGE('',*,*,#17211,.F.); #22122=ORIENTED_EDGE('',*,*,#17166,.F.); #22123=ORIENTED_EDGE('',*,*,#17167,.T.); #22124=ORIENTED_EDGE('',*,*,#17212,.F.); #22125=ORIENTED_EDGE('',*,*,#17213,.F.); #22126=ORIENTED_EDGE('',*,*,#17214,.F.); #22127=ORIENTED_EDGE('',*,*,#17215,.F.); #22128=ORIENTED_EDGE('',*,*,#17216,.F.); #22129=ORIENTED_EDGE('',*,*,#17217,.F.); #22130=ORIENTED_EDGE('',*,*,#17218,.F.); #22131=ORIENTED_EDGE('',*,*,#17219,.F.); #22132=ORIENTED_EDGE('',*,*,#17220,.F.); #22133=ORIENTED_EDGE('',*,*,#17221,.F.); #22134=ORIENTED_EDGE('',*,*,#17188,.F.); #22135=ORIENTED_EDGE('',*,*,#17169,.F.); #22136=ORIENTED_EDGE('',*,*,#17222,.T.); #22137=ORIENTED_EDGE('',*,*,#17223,.T.); #22138=ORIENTED_EDGE('',*,*,#17175,.F.); #22139=ORIENTED_EDGE('',*,*,#17172,.F.); #22140=ORIENTED_EDGE('',*,*,#17178,.T.); #22141=ORIENTED_EDGE('',*,*,#17224,.T.); #22142=ORIENTED_EDGE('',*,*,#17225,.F.); #22143=ORIENTED_EDGE('',*,*,#17173,.F.); #22144=ORIENTED_EDGE('',*,*,#17225,.T.); #22145=ORIENTED_EDGE('',*,*,#17226,.T.); #22146=ORIENTED_EDGE('',*,*,#17227,.F.); #22147=ORIENTED_EDGE('',*,*,#17174,.F.); #22148=ORIENTED_EDGE('',*,*,#17227,.T.); #22149=ORIENTED_EDGE('',*,*,#17228,.T.); #22150=ORIENTED_EDGE('',*,*,#17229,.T.); #22151=ORIENTED_EDGE('',*,*,#17230,.T.); #22152=ORIENTED_EDGE('',*,*,#17231,.T.); #22153=ORIENTED_EDGE('',*,*,#17232,.T.); #22154=ORIENTED_EDGE('',*,*,#17233,.T.); #22155=ORIENTED_EDGE('',*,*,#17234,.T.); #22156=ORIENTED_EDGE('',*,*,#17235,.T.); #22157=ORIENTED_EDGE('',*,*,#17236,.T.); #22158=ORIENTED_EDGE('',*,*,#17237,.F.); #22159=ORIENTED_EDGE('',*,*,#17168,.F.); #22160=ORIENTED_EDGE('',*,*,#17237,.T.); #22161=ORIENTED_EDGE('',*,*,#17238,.T.); #22162=ORIENTED_EDGE('',*,*,#17222,.F.); #22163=ORIENTED_EDGE('',*,*,#17177,.F.); #22164=ORIENTED_EDGE('',*,*,#17181,.T.); #22165=ORIENTED_EDGE('',*,*,#17239,.T.); #22166=ORIENTED_EDGE('',*,*,#17240,.F.); #22167=ORIENTED_EDGE('',*,*,#17179,.F.); #22168=ORIENTED_EDGE('',*,*,#17184,.T.); #22169=ORIENTED_EDGE('',*,*,#17241,.T.); #22170=ORIENTED_EDGE('',*,*,#17242,.T.); #22171=ORIENTED_EDGE('',*,*,#17243,.T.); #22172=ORIENTED_EDGE('',*,*,#17244,.T.); #22173=ORIENTED_EDGE('',*,*,#17245,.T.); #22174=ORIENTED_EDGE('',*,*,#17246,.T.); #22175=ORIENTED_EDGE('',*,*,#17247,.T.); #22176=ORIENTED_EDGE('',*,*,#17248,.T.); #22177=ORIENTED_EDGE('',*,*,#17249,.T.); #22178=ORIENTED_EDGE('',*,*,#17250,.T.); #22179=ORIENTED_EDGE('',*,*,#17251,.T.); #22180=ORIENTED_EDGE('',*,*,#17204,.T.); #22181=ORIENTED_EDGE('',*,*,#17252,.F.); #22182=ORIENTED_EDGE('',*,*,#17180,.F.); #22183=ORIENTED_EDGE('',*,*,#17187,.T.); #22184=ORIENTED_EDGE('',*,*,#17253,.F.); #22185=ORIENTED_EDGE('',*,*,#17254,.F.); #22186=ORIENTED_EDGE('',*,*,#17255,.F.); #22187=ORIENTED_EDGE('',*,*,#17256,.F.); #22188=ORIENTED_EDGE('',*,*,#17257,.F.); #22189=ORIENTED_EDGE('',*,*,#17258,.F.); #22190=ORIENTED_EDGE('',*,*,#17259,.F.); #22191=ORIENTED_EDGE('',*,*,#17260,.F.); #22192=ORIENTED_EDGE('',*,*,#17261,.F.); #22193=ORIENTED_EDGE('',*,*,#17262,.F.); #22194=ORIENTED_EDGE('',*,*,#17182,.F.); #22195=ORIENTED_EDGE('',*,*,#17183,.F.); #22196=ORIENTED_EDGE('',*,*,#17262,.T.); #22197=ORIENTED_EDGE('',*,*,#17263,.T.); #22198=ORIENTED_EDGE('',*,*,#17241,.F.); #22199=ORIENTED_EDGE('',*,*,#17185,.F.); #22200=ORIENTED_EDGE('',*,*,#17193,.T.); #22201=ORIENTED_EDGE('',*,*,#17264,.T.); #22202=ORIENTED_EDGE('',*,*,#17265,.T.); #22203=ORIENTED_EDGE('',*,*,#17266,.T.); #22204=ORIENTED_EDGE('',*,*,#17267,.T.); #22205=ORIENTED_EDGE('',*,*,#17268,.T.); #22206=ORIENTED_EDGE('',*,*,#17269,.T.); #22207=ORIENTED_EDGE('',*,*,#17270,.T.); #22208=ORIENTED_EDGE('',*,*,#17271,.T.); #22209=ORIENTED_EDGE('',*,*,#17272,.T.); #22210=ORIENTED_EDGE('',*,*,#17273,.T.); #22211=ORIENTED_EDGE('',*,*,#17274,.T.); #22212=ORIENTED_EDGE('',*,*,#17206,.T.); #22213=ORIENTED_EDGE('',*,*,#17275,.F.); #22214=ORIENTED_EDGE('',*,*,#17186,.F.); #22215=ORIENTED_EDGE('',*,*,#17189,.F.); #22216=ORIENTED_EDGE('',*,*,#17221,.T.); #22217=ORIENTED_EDGE('',*,*,#17276,.T.); #22218=ORIENTED_EDGE('',*,*,#17277,.F.); #22219=ORIENTED_EDGE('',*,*,#17194,.F.); #22220=ORIENTED_EDGE('',*,*,#17190,.T.); #22221=ORIENTED_EDGE('',*,*,#17277,.T.); #22222=ORIENTED_EDGE('',*,*,#17278,.T.); #22223=ORIENTED_EDGE('',*,*,#17279,.T.); #22224=ORIENTED_EDGE('',*,*,#17280,.T.); #22225=ORIENTED_EDGE('',*,*,#17281,.T.); #22226=ORIENTED_EDGE('',*,*,#17282,.T.); #22227=ORIENTED_EDGE('',*,*,#17283,.T.); #22228=ORIENTED_EDGE('',*,*,#17284,.T.); #22229=ORIENTED_EDGE('',*,*,#17285,.T.); #22230=ORIENTED_EDGE('',*,*,#17286,.T.); #22231=ORIENTED_EDGE('',*,*,#17196,.T.); #22232=ORIENTED_EDGE('',*,*,#17287,.F.); #22233=ORIENTED_EDGE('',*,*,#17288,.F.); #22234=ORIENTED_EDGE('',*,*,#17289,.F.); #22235=ORIENTED_EDGE('',*,*,#17290,.F.); #22236=ORIENTED_EDGE('',*,*,#17291,.F.); #22237=ORIENTED_EDGE('',*,*,#17292,.F.); #22238=ORIENTED_EDGE('',*,*,#17293,.F.); #22239=ORIENTED_EDGE('',*,*,#17294,.F.); #22240=ORIENTED_EDGE('',*,*,#17295,.F.); #22241=ORIENTED_EDGE('',*,*,#17296,.F.); #22242=ORIENTED_EDGE('',*,*,#17191,.F.); #22243=ORIENTED_EDGE('',*,*,#17192,.F.); #22244=ORIENTED_EDGE('',*,*,#17296,.T.); #22245=ORIENTED_EDGE('',*,*,#17297,.T.); #22246=ORIENTED_EDGE('',*,*,#17264,.F.); #22247=ORIENTED_EDGE('',*,*,#17298,.T.); #22248=ORIENTED_EDGE('',*,*,#17208,.T.); #22249=ORIENTED_EDGE('',*,*,#17299,.F.); #22250=ORIENTED_EDGE('',*,*,#17195,.F.); #22251=ORIENTED_EDGE('',*,*,#17198,.F.); #22252=ORIENTED_EDGE('',*,*,#17300,.T.); #22253=ORIENTED_EDGE('',*,*,#17301,.T.); #22254=ORIENTED_EDGE('',*,*,#17199,.F.); #22255=ORIENTED_EDGE('',*,*,#17223,.F.); #22256=ORIENTED_EDGE('',*,*,#17302,.T.); #22257=ORIENTED_EDGE('',*,*,#17303,.T.); #22258=ORIENTED_EDGE('',*,*,#17197,.F.); #22259=ORIENTED_EDGE('',*,*,#17301,.F.); #22260=ORIENTED_EDGE('',*,*,#17304,.T.); #22261=ORIENTED_EDGE('',*,*,#17305,.T.); #22262=ORIENTED_EDGE('',*,*,#17201,.F.); #22263=ORIENTED_EDGE('',*,*,#17306,.F.); #22264=ORIENTED_EDGE('',*,*,#17307,.F.); #22265=ORIENTED_EDGE('',*,*,#17308,.F.); #22266=ORIENTED_EDGE('',*,*,#17309,.F.); #22267=ORIENTED_EDGE('',*,*,#17310,.F.); #22268=ORIENTED_EDGE('',*,*,#17311,.F.); #22269=ORIENTED_EDGE('',*,*,#17202,.F.); #22270=ORIENTED_EDGE('',*,*,#17305,.F.); #22271=ORIENTED_EDGE('',*,*,#17312,.F.); #22272=ORIENTED_EDGE('',*,*,#17313,.F.); #22273=ORIENTED_EDGE('',*,*,#17203,.T.); #22274=ORIENTED_EDGE('',*,*,#17311,.T.); #22275=ORIENTED_EDGE('',*,*,#17314,.F.); #22276=ORIENTED_EDGE('',*,*,#17212,.T.); #22277=ORIENTED_EDGE('',*,*,#17211,.T.); #22278=ORIENTED_EDGE('',*,*,#17209,.T.); #22279=ORIENTED_EDGE('',*,*,#17298,.F.); #22280=ORIENTED_EDGE('',*,*,#17286,.F.); #22281=ORIENTED_EDGE('',*,*,#17315,.F.); #22282=ORIENTED_EDGE('',*,*,#17253,.T.); #22283=ORIENTED_EDGE('',*,*,#17275,.T.); #22284=ORIENTED_EDGE('',*,*,#17205,.T.); #22285=ORIENTED_EDGE('',*,*,#17251,.F.); #22286=ORIENTED_EDGE('',*,*,#17250,.F.); #22287=ORIENTED_EDGE('',*,*,#17316,.F.); #22288=ORIENTED_EDGE('',*,*,#17287,.T.); #22289=ORIENTED_EDGE('',*,*,#17299,.T.); #22290=ORIENTED_EDGE('',*,*,#17207,.T.); #22291=ORIENTED_EDGE('',*,*,#17274,.F.); #22292=ORIENTED_EDGE('',*,*,#17273,.F.); #22293=ORIENTED_EDGE('',*,*,#17317,.F.); #22294=ORIENTED_EDGE('',*,*,#17213,.T.); #22295=ORIENTED_EDGE('',*,*,#17315,.T.); #22296=ORIENTED_EDGE('',*,*,#17285,.F.); #22297=ORIENTED_EDGE('',*,*,#17318,.F.); #22298=ORIENTED_EDGE('',*,*,#17319,.F.); #22299=ORIENTED_EDGE('',*,*,#17214,.T.); #22300=ORIENTED_EDGE('',*,*,#17318,.T.); #22301=ORIENTED_EDGE('',*,*,#17284,.F.); #22302=ORIENTED_EDGE('',*,*,#17320,.F.); #22303=ORIENTED_EDGE('',*,*,#17215,.T.); #22304=ORIENTED_EDGE('',*,*,#17319,.T.); #22305=ORIENTED_EDGE('',*,*,#17283,.F.); #22306=ORIENTED_EDGE('',*,*,#17321,.F.); #22307=ORIENTED_EDGE('',*,*,#17216,.T.); #22308=ORIENTED_EDGE('',*,*,#17320,.T.); #22309=ORIENTED_EDGE('',*,*,#17282,.F.); #22310=ORIENTED_EDGE('',*,*,#17322,.F.); #22311=ORIENTED_EDGE('',*,*,#17217,.T.); #22312=ORIENTED_EDGE('',*,*,#17321,.T.); #22313=ORIENTED_EDGE('',*,*,#17281,.F.); #22314=ORIENTED_EDGE('',*,*,#17323,.F.); #22315=ORIENTED_EDGE('',*,*,#17218,.T.); #22316=ORIENTED_EDGE('',*,*,#17322,.T.); #22317=ORIENTED_EDGE('',*,*,#17280,.F.); #22318=ORIENTED_EDGE('',*,*,#17219,.T.); #22319=ORIENTED_EDGE('',*,*,#17323,.T.); #22320=ORIENTED_EDGE('',*,*,#17279,.F.); #22321=ORIENTED_EDGE('',*,*,#17324,.F.); #22322=ORIENTED_EDGE('',*,*,#17276,.F.); #22323=ORIENTED_EDGE('',*,*,#17220,.T.); #22324=ORIENTED_EDGE('',*,*,#17324,.T.); #22325=ORIENTED_EDGE('',*,*,#17278,.F.); #22326=ORIENTED_EDGE('',*,*,#17224,.F.); #22327=ORIENTED_EDGE('',*,*,#17240,.T.); #22328=ORIENTED_EDGE('',*,*,#17325,.T.); #22329=ORIENTED_EDGE('',*,*,#17326,.F.); #22330=ORIENTED_EDGE('',*,*,#17226,.F.); #22331=ORIENTED_EDGE('',*,*,#17326,.T.); #22332=ORIENTED_EDGE('',*,*,#17327,.T.); #22333=ORIENTED_EDGE('',*,*,#17328,.F.); #22334=ORIENTED_EDGE('',*,*,#17328,.T.); #22335=ORIENTED_EDGE('',*,*,#17329,.T.); #22336=ORIENTED_EDGE('',*,*,#17330,.F.); #22337=ORIENTED_EDGE('',*,*,#17228,.F.); #22338=ORIENTED_EDGE('',*,*,#17331,.T.); #22339=ORIENTED_EDGE('',*,*,#17332,.T.); #22340=ORIENTED_EDGE('',*,*,#17333,.F.); #22341=ORIENTED_EDGE('',*,*,#17236,.F.); #22342=ORIENTED_EDGE('',*,*,#17334,.T.); #22343=ORIENTED_EDGE('',*,*,#17335,.T.); #22344=ORIENTED_EDGE('',*,*,#17336,.F.); #22345=ORIENTED_EDGE('',*,*,#17229,.F.); #22346=ORIENTED_EDGE('',*,*,#17337,.T.); #22347=ORIENTED_EDGE('',*,*,#17338,.T.); #22348=ORIENTED_EDGE('',*,*,#17339,.F.); #22349=ORIENTED_EDGE('',*,*,#17235,.F.); #22350=ORIENTED_EDGE('',*,*,#17340,.T.); #22351=ORIENTED_EDGE('',*,*,#17341,.T.); #22352=ORIENTED_EDGE('',*,*,#17342,.F.); #22353=ORIENTED_EDGE('',*,*,#17230,.F.); #22354=ORIENTED_EDGE('',*,*,#17343,.T.); #22355=ORIENTED_EDGE('',*,*,#17344,.T.); #22356=ORIENTED_EDGE('',*,*,#17345,.F.); #22357=ORIENTED_EDGE('',*,*,#17234,.F.); #22358=ORIENTED_EDGE('',*,*,#17346,.T.); #22359=ORIENTED_EDGE('',*,*,#17347,.T.); #22360=ORIENTED_EDGE('',*,*,#17348,.F.); #22361=ORIENTED_EDGE('',*,*,#17231,.F.); #22362=ORIENTED_EDGE('',*,*,#17349,.T.); #22363=ORIENTED_EDGE('',*,*,#17350,.T.); #22364=ORIENTED_EDGE('',*,*,#17351,.F.); #22365=ORIENTED_EDGE('',*,*,#17233,.F.); #22366=ORIENTED_EDGE('',*,*,#17352,.T.); #22367=ORIENTED_EDGE('',*,*,#17353,.T.); #22368=ORIENTED_EDGE('',*,*,#17354,.F.); #22369=ORIENTED_EDGE('',*,*,#17232,.F.); #22370=ORIENTED_EDGE('',*,*,#17238,.F.); #22371=ORIENTED_EDGE('',*,*,#17333,.T.); #22372=ORIENTED_EDGE('',*,*,#17355,.T.); #22373=ORIENTED_EDGE('',*,*,#17302,.F.); #22374=ORIENTED_EDGE('',*,*,#17239,.F.); #22375=ORIENTED_EDGE('',*,*,#17252,.T.); #22376=ORIENTED_EDGE('',*,*,#17313,.T.); #22377=ORIENTED_EDGE('',*,*,#17356,.F.); #22378=ORIENTED_EDGE('',*,*,#17254,.T.); #22379=ORIENTED_EDGE('',*,*,#17316,.T.); #22380=ORIENTED_EDGE('',*,*,#17249,.F.); #22381=ORIENTED_EDGE('',*,*,#17357,.F.); #22382=ORIENTED_EDGE('',*,*,#17358,.F.); #22383=ORIENTED_EDGE('',*,*,#17255,.T.); #22384=ORIENTED_EDGE('',*,*,#17357,.T.); #22385=ORIENTED_EDGE('',*,*,#17248,.F.); #22386=ORIENTED_EDGE('',*,*,#17359,.F.); #22387=ORIENTED_EDGE('',*,*,#17256,.T.); #22388=ORIENTED_EDGE('',*,*,#17358,.T.); #22389=ORIENTED_EDGE('',*,*,#17247,.F.); #22390=ORIENTED_EDGE('',*,*,#17360,.F.); #22391=ORIENTED_EDGE('',*,*,#17257,.T.); #22392=ORIENTED_EDGE('',*,*,#17359,.T.); #22393=ORIENTED_EDGE('',*,*,#17246,.F.); #22394=ORIENTED_EDGE('',*,*,#17361,.F.); #22395=ORIENTED_EDGE('',*,*,#17258,.T.); #22396=ORIENTED_EDGE('',*,*,#17360,.T.); #22397=ORIENTED_EDGE('',*,*,#17245,.F.); #22398=ORIENTED_EDGE('',*,*,#17362,.F.); #22399=ORIENTED_EDGE('',*,*,#17259,.T.); #22400=ORIENTED_EDGE('',*,*,#17361,.T.); #22401=ORIENTED_EDGE('',*,*,#17244,.F.); #22402=ORIENTED_EDGE('',*,*,#17260,.T.); #22403=ORIENTED_EDGE('',*,*,#17362,.T.); #22404=ORIENTED_EDGE('',*,*,#17243,.F.); #22405=ORIENTED_EDGE('',*,*,#17363,.F.); #22406=ORIENTED_EDGE('',*,*,#17263,.F.); #22407=ORIENTED_EDGE('',*,*,#17261,.T.); #22408=ORIENTED_EDGE('',*,*,#17363,.T.); #22409=ORIENTED_EDGE('',*,*,#17242,.F.); #22410=ORIENTED_EDGE('',*,*,#17288,.T.); #22411=ORIENTED_EDGE('',*,*,#17317,.T.); #22412=ORIENTED_EDGE('',*,*,#17272,.F.); #22413=ORIENTED_EDGE('',*,*,#17364,.F.); #22414=ORIENTED_EDGE('',*,*,#17365,.F.); #22415=ORIENTED_EDGE('',*,*,#17289,.T.); #22416=ORIENTED_EDGE('',*,*,#17364,.T.); #22417=ORIENTED_EDGE('',*,*,#17271,.F.); #22418=ORIENTED_EDGE('',*,*,#17366,.F.); #22419=ORIENTED_EDGE('',*,*,#17290,.T.); #22420=ORIENTED_EDGE('',*,*,#17365,.T.); #22421=ORIENTED_EDGE('',*,*,#17270,.F.); #22422=ORIENTED_EDGE('',*,*,#17367,.F.); #22423=ORIENTED_EDGE('',*,*,#17291,.T.); #22424=ORIENTED_EDGE('',*,*,#17366,.T.); #22425=ORIENTED_EDGE('',*,*,#17269,.F.); #22426=ORIENTED_EDGE('',*,*,#17368,.F.); #22427=ORIENTED_EDGE('',*,*,#17292,.T.); #22428=ORIENTED_EDGE('',*,*,#17367,.T.); #22429=ORIENTED_EDGE('',*,*,#17268,.F.); #22430=ORIENTED_EDGE('',*,*,#17369,.F.); #22431=ORIENTED_EDGE('',*,*,#17293,.T.); #22432=ORIENTED_EDGE('',*,*,#17368,.T.); #22433=ORIENTED_EDGE('',*,*,#17267,.F.); #22434=ORIENTED_EDGE('',*,*,#17294,.T.); #22435=ORIENTED_EDGE('',*,*,#17369,.T.); #22436=ORIENTED_EDGE('',*,*,#17266,.F.); #22437=ORIENTED_EDGE('',*,*,#17370,.F.); #22438=ORIENTED_EDGE('',*,*,#17297,.F.); #22439=ORIENTED_EDGE('',*,*,#17295,.T.); #22440=ORIENTED_EDGE('',*,*,#17370,.T.); #22441=ORIENTED_EDGE('',*,*,#17265,.F.); #22442=ORIENTED_EDGE('',*,*,#17303,.F.); #22443=ORIENTED_EDGE('',*,*,#17371,.T.); #22444=ORIENTED_EDGE('',*,*,#17372,.T.); #22445=ORIENTED_EDGE('',*,*,#17300,.F.); #22446=ORIENTED_EDGE('',*,*,#17372,.F.); #22447=ORIENTED_EDGE('',*,*,#17373,.T.); #22448=ORIENTED_EDGE('',*,*,#17306,.T.); #22449=ORIENTED_EDGE('',*,*,#17304,.F.); #22450=ORIENTED_EDGE('',*,*,#17374,.F.); #22451=ORIENTED_EDGE('',*,*,#17375,.T.); #22452=ORIENTED_EDGE('',*,*,#17307,.T.); #22453=ORIENTED_EDGE('',*,*,#17373,.F.); #22454=ORIENTED_EDGE('',*,*,#17376,.F.); #22455=ORIENTED_EDGE('',*,*,#17377,.T.); #22456=ORIENTED_EDGE('',*,*,#17308,.T.); #22457=ORIENTED_EDGE('',*,*,#17375,.F.); #22458=ORIENTED_EDGE('',*,*,#17378,.F.); #22459=ORIENTED_EDGE('',*,*,#17379,.F.); #22460=ORIENTED_EDGE('',*,*,#17380,.F.); #22461=ORIENTED_EDGE('',*,*,#17381,.F.); #22462=ORIENTED_EDGE('',*,*,#17382,.F.); #22463=ORIENTED_EDGE('',*,*,#17383,.F.); #22464=ORIENTED_EDGE('',*,*,#17384,.F.); #22465=ORIENTED_EDGE('',*,*,#17385,.F.); #22466=ORIENTED_EDGE('',*,*,#17386,.F.); #22467=ORIENTED_EDGE('',*,*,#17387,.T.); #22468=ORIENTED_EDGE('',*,*,#17309,.T.); #22469=ORIENTED_EDGE('',*,*,#17377,.F.); #22470=ORIENTED_EDGE('',*,*,#17388,.F.); #22471=ORIENTED_EDGE('',*,*,#17314,.T.); #22472=ORIENTED_EDGE('',*,*,#17310,.T.); #22473=ORIENTED_EDGE('',*,*,#17387,.F.); #22474=ORIENTED_EDGE('',*,*,#17312,.T.); #22475=ORIENTED_EDGE('',*,*,#17389,.T.); #22476=ORIENTED_EDGE('',*,*,#17390,.F.); #22477=ORIENTED_EDGE('',*,*,#17389,.F.); #22478=ORIENTED_EDGE('',*,*,#17325,.F.); #22479=ORIENTED_EDGE('',*,*,#17356,.T.); #22480=ORIENTED_EDGE('',*,*,#17388,.T.); #22481=ORIENTED_EDGE('',*,*,#17391,.F.); #22482=ORIENTED_EDGE('',*,*,#17327,.F.); #22483=ORIENTED_EDGE('',*,*,#17391,.T.); #22484=ORIENTED_EDGE('',*,*,#17386,.T.); #22485=ORIENTED_EDGE('',*,*,#17392,.F.); #22486=ORIENTED_EDGE('',*,*,#17392,.T.); #22487=ORIENTED_EDGE('',*,*,#17376,.T.); #22488=ORIENTED_EDGE('',*,*,#17393,.F.); #22489=ORIENTED_EDGE('',*,*,#17329,.F.); #22490=ORIENTED_EDGE('',*,*,#17330,.T.); #22491=ORIENTED_EDGE('',*,*,#17394,.F.); #22492=ORIENTED_EDGE('',*,*,#17395,.F.); #22493=ORIENTED_EDGE('',*,*,#17396,.F.); #22494=ORIENTED_EDGE('',*,*,#17397,.F.); #22495=ORIENTED_EDGE('',*,*,#17398,.F.); #22496=ORIENTED_EDGE('',*,*,#17399,.F.); #22497=ORIENTED_EDGE('',*,*,#17400,.F.); #22498=ORIENTED_EDGE('',*,*,#17401,.F.); #22499=ORIENTED_EDGE('',*,*,#17402,.F.); #22500=ORIENTED_EDGE('',*,*,#17403,.F.); #22501=ORIENTED_EDGE('',*,*,#17334,.F.); #22502=ORIENTED_EDGE('',*,*,#17331,.F.); #22503=ORIENTED_EDGE('',*,*,#17339,.T.); #22504=ORIENTED_EDGE('',*,*,#17404,.T.); #22505=ORIENTED_EDGE('',*,*,#17405,.T.); #22506=ORIENTED_EDGE('',*,*,#17406,.T.); #22507=ORIENTED_EDGE('',*,*,#17407,.T.); #22508=ORIENTED_EDGE('',*,*,#17408,.T.); #22509=ORIENTED_EDGE('',*,*,#17409,.T.); #22510=ORIENTED_EDGE('',*,*,#17410,.T.); #22511=ORIENTED_EDGE('',*,*,#17411,.T.); #22512=ORIENTED_EDGE('',*,*,#17412,.T.); #22513=ORIENTED_EDGE('',*,*,#17413,.T.); #22514=ORIENTED_EDGE('',*,*,#17414,.T.); #22515=ORIENTED_EDGE('',*,*,#17378,.T.); #22516=ORIENTED_EDGE('',*,*,#17415,.F.); #22517=ORIENTED_EDGE('',*,*,#17332,.F.); #22518=ORIENTED_EDGE('',*,*,#17335,.F.); #22519=ORIENTED_EDGE('',*,*,#17403,.T.); #22520=ORIENTED_EDGE('',*,*,#17416,.T.); #22521=ORIENTED_EDGE('',*,*,#17417,.F.); #22522=ORIENTED_EDGE('',*,*,#17340,.F.); #22523=ORIENTED_EDGE('',*,*,#17336,.T.); #22524=ORIENTED_EDGE('',*,*,#17417,.T.); #22525=ORIENTED_EDGE('',*,*,#17418,.T.); #22526=ORIENTED_EDGE('',*,*,#17419,.T.); #22527=ORIENTED_EDGE('',*,*,#17420,.T.); #22528=ORIENTED_EDGE('',*,*,#17421,.T.); #22529=ORIENTED_EDGE('',*,*,#17422,.T.); #22530=ORIENTED_EDGE('',*,*,#17423,.T.); #22531=ORIENTED_EDGE('',*,*,#17424,.T.); #22532=ORIENTED_EDGE('',*,*,#17425,.T.); #22533=ORIENTED_EDGE('',*,*,#17426,.T.); #22534=ORIENTED_EDGE('',*,*,#17345,.T.); #22535=ORIENTED_EDGE('',*,*,#17427,.F.); #22536=ORIENTED_EDGE('',*,*,#17428,.F.); #22537=ORIENTED_EDGE('',*,*,#17429,.F.); #22538=ORIENTED_EDGE('',*,*,#17430,.F.); #22539=ORIENTED_EDGE('',*,*,#17431,.F.); #22540=ORIENTED_EDGE('',*,*,#17432,.F.); #22541=ORIENTED_EDGE('',*,*,#17433,.F.); #22542=ORIENTED_EDGE('',*,*,#17434,.F.); #22543=ORIENTED_EDGE('',*,*,#17435,.F.); #22544=ORIENTED_EDGE('',*,*,#17436,.F.); #22545=ORIENTED_EDGE('',*,*,#17337,.F.); #22546=ORIENTED_EDGE('',*,*,#17338,.F.); #22547=ORIENTED_EDGE('',*,*,#17436,.T.); #22548=ORIENTED_EDGE('',*,*,#17437,.T.); #22549=ORIENTED_EDGE('',*,*,#17404,.F.); #22550=ORIENTED_EDGE('',*,*,#17438,.T.); #22551=ORIENTED_EDGE('',*,*,#17384,.T.); #22552=ORIENTED_EDGE('',*,*,#17439,.F.); #22553=ORIENTED_EDGE('',*,*,#17341,.F.); #22554=ORIENTED_EDGE('',*,*,#17342,.T.); #22555=ORIENTED_EDGE('',*,*,#17440,.F.); #22556=ORIENTED_EDGE('',*,*,#17441,.F.); #22557=ORIENTED_EDGE('',*,*,#17442,.F.); #22558=ORIENTED_EDGE('',*,*,#17443,.F.); #22559=ORIENTED_EDGE('',*,*,#17444,.F.); #22560=ORIENTED_EDGE('',*,*,#17445,.F.); #22561=ORIENTED_EDGE('',*,*,#17446,.F.); #22562=ORIENTED_EDGE('',*,*,#17447,.F.); #22563=ORIENTED_EDGE('',*,*,#17448,.F.); #22564=ORIENTED_EDGE('',*,*,#17449,.F.); #22565=ORIENTED_EDGE('',*,*,#17346,.F.); #22566=ORIENTED_EDGE('',*,*,#17343,.F.); #22567=ORIENTED_EDGE('',*,*,#17351,.T.); #22568=ORIENTED_EDGE('',*,*,#17450,.T.); #22569=ORIENTED_EDGE('',*,*,#17451,.T.); #22570=ORIENTED_EDGE('',*,*,#17452,.T.); #22571=ORIENTED_EDGE('',*,*,#17453,.T.); #22572=ORIENTED_EDGE('',*,*,#17454,.T.); #22573=ORIENTED_EDGE('',*,*,#17455,.T.); #22574=ORIENTED_EDGE('',*,*,#17456,.T.); #22575=ORIENTED_EDGE('',*,*,#17457,.T.); #22576=ORIENTED_EDGE('',*,*,#17458,.T.); #22577=ORIENTED_EDGE('',*,*,#17459,.T.); #22578=ORIENTED_EDGE('',*,*,#17460,.T.); #22579=ORIENTED_EDGE('',*,*,#17380,.T.); #22580=ORIENTED_EDGE('',*,*,#17461,.F.); #22581=ORIENTED_EDGE('',*,*,#17344,.F.); #22582=ORIENTED_EDGE('',*,*,#17347,.F.); #22583=ORIENTED_EDGE('',*,*,#17449,.T.); #22584=ORIENTED_EDGE('',*,*,#17462,.T.); #22585=ORIENTED_EDGE('',*,*,#17463,.F.); #22586=ORIENTED_EDGE('',*,*,#17352,.F.); #22587=ORIENTED_EDGE('',*,*,#17348,.T.); #22588=ORIENTED_EDGE('',*,*,#17463,.T.); #22589=ORIENTED_EDGE('',*,*,#17464,.T.); #22590=ORIENTED_EDGE('',*,*,#17465,.T.); #22591=ORIENTED_EDGE('',*,*,#17466,.T.); #22592=ORIENTED_EDGE('',*,*,#17467,.T.); #22593=ORIENTED_EDGE('',*,*,#17468,.T.); #22594=ORIENTED_EDGE('',*,*,#17469,.T.); #22595=ORIENTED_EDGE('',*,*,#17470,.T.); #22596=ORIENTED_EDGE('',*,*,#17471,.T.); #22597=ORIENTED_EDGE('',*,*,#17472,.T.); #22598=ORIENTED_EDGE('',*,*,#17354,.T.); #22599=ORIENTED_EDGE('',*,*,#17473,.F.); #22600=ORIENTED_EDGE('',*,*,#17474,.F.); #22601=ORIENTED_EDGE('',*,*,#17475,.F.); #22602=ORIENTED_EDGE('',*,*,#17476,.F.); #22603=ORIENTED_EDGE('',*,*,#17477,.F.); #22604=ORIENTED_EDGE('',*,*,#17478,.F.); #22605=ORIENTED_EDGE('',*,*,#17479,.F.); #22606=ORIENTED_EDGE('',*,*,#17480,.F.); #22607=ORIENTED_EDGE('',*,*,#17481,.F.); #22608=ORIENTED_EDGE('',*,*,#17482,.F.); #22609=ORIENTED_EDGE('',*,*,#17349,.F.); #22610=ORIENTED_EDGE('',*,*,#17350,.F.); #22611=ORIENTED_EDGE('',*,*,#17482,.T.); #22612=ORIENTED_EDGE('',*,*,#17483,.T.); #22613=ORIENTED_EDGE('',*,*,#17450,.F.); #22614=ORIENTED_EDGE('',*,*,#17484,.T.); #22615=ORIENTED_EDGE('',*,*,#17382,.T.); #22616=ORIENTED_EDGE('',*,*,#17485,.F.); #22617=ORIENTED_EDGE('',*,*,#17353,.F.); #22618=ORIENTED_EDGE('',*,*,#17355,.F.); #22619=ORIENTED_EDGE('',*,*,#17415,.T.); #22620=ORIENTED_EDGE('',*,*,#17374,.T.); #22621=ORIENTED_EDGE('',*,*,#17371,.F.); #22622=ORIENTED_EDGE('',*,*,#17394,.T.); #22623=ORIENTED_EDGE('',*,*,#17393,.T.); #22624=ORIENTED_EDGE('',*,*,#17385,.T.); #22625=ORIENTED_EDGE('',*,*,#17438,.F.); #22626=ORIENTED_EDGE('',*,*,#17426,.F.); #22627=ORIENTED_EDGE('',*,*,#17486,.F.); #22628=ORIENTED_EDGE('',*,*,#17440,.T.); #22629=ORIENTED_EDGE('',*,*,#17439,.T.); #22630=ORIENTED_EDGE('',*,*,#17383,.T.); #22631=ORIENTED_EDGE('',*,*,#17484,.F.); #22632=ORIENTED_EDGE('',*,*,#17472,.F.); #22633=ORIENTED_EDGE('',*,*,#17487,.F.); #22634=ORIENTED_EDGE('',*,*,#17427,.T.); #22635=ORIENTED_EDGE('',*,*,#17461,.T.); #22636=ORIENTED_EDGE('',*,*,#17379,.T.); #22637=ORIENTED_EDGE('',*,*,#17414,.F.); #22638=ORIENTED_EDGE('',*,*,#17413,.F.); #22639=ORIENTED_EDGE('',*,*,#17488,.F.); #22640=ORIENTED_EDGE('',*,*,#17473,.T.); #22641=ORIENTED_EDGE('',*,*,#17485,.T.); #22642=ORIENTED_EDGE('',*,*,#17381,.T.); #22643=ORIENTED_EDGE('',*,*,#17460,.F.); #22644=ORIENTED_EDGE('',*,*,#17459,.F.); #22645=ORIENTED_EDGE('',*,*,#17489,.F.); #22646=ORIENTED_EDGE('',*,*,#17390,.T.); #22647=ORIENTED_EDGE('',*,*,#17395,.T.); #22648=ORIENTED_EDGE('',*,*,#17486,.T.); #22649=ORIENTED_EDGE('',*,*,#17425,.F.); #22650=ORIENTED_EDGE('',*,*,#17490,.F.); #22651=ORIENTED_EDGE('',*,*,#17491,.F.); #22652=ORIENTED_EDGE('',*,*,#17396,.T.); #22653=ORIENTED_EDGE('',*,*,#17490,.T.); #22654=ORIENTED_EDGE('',*,*,#17424,.F.); #22655=ORIENTED_EDGE('',*,*,#17492,.F.); #22656=ORIENTED_EDGE('',*,*,#17397,.T.); #22657=ORIENTED_EDGE('',*,*,#17491,.T.); #22658=ORIENTED_EDGE('',*,*,#17423,.F.); #22659=ORIENTED_EDGE('',*,*,#17493,.F.); #22660=ORIENTED_EDGE('',*,*,#17398,.T.); #22661=ORIENTED_EDGE('',*,*,#17492,.T.); #22662=ORIENTED_EDGE('',*,*,#17422,.F.); #22663=ORIENTED_EDGE('',*,*,#17494,.F.); #22664=ORIENTED_EDGE('',*,*,#17399,.T.); #22665=ORIENTED_EDGE('',*,*,#17493,.T.); #22666=ORIENTED_EDGE('',*,*,#17421,.F.); #22667=ORIENTED_EDGE('',*,*,#17495,.F.); #22668=ORIENTED_EDGE('',*,*,#17400,.T.); #22669=ORIENTED_EDGE('',*,*,#17494,.T.); #22670=ORIENTED_EDGE('',*,*,#17420,.F.); #22671=ORIENTED_EDGE('',*,*,#17401,.T.); #22672=ORIENTED_EDGE('',*,*,#17495,.T.); #22673=ORIENTED_EDGE('',*,*,#17419,.F.); #22674=ORIENTED_EDGE('',*,*,#17496,.F.); #22675=ORIENTED_EDGE('',*,*,#17416,.F.); #22676=ORIENTED_EDGE('',*,*,#17402,.T.); #22677=ORIENTED_EDGE('',*,*,#17496,.T.); #22678=ORIENTED_EDGE('',*,*,#17418,.F.); #22679=ORIENTED_EDGE('',*,*,#17428,.T.); #22680=ORIENTED_EDGE('',*,*,#17488,.T.); #22681=ORIENTED_EDGE('',*,*,#17412,.F.); #22682=ORIENTED_EDGE('',*,*,#17497,.F.); #22683=ORIENTED_EDGE('',*,*,#17498,.F.); #22684=ORIENTED_EDGE('',*,*,#17429,.T.); #22685=ORIENTED_EDGE('',*,*,#17497,.T.); #22686=ORIENTED_EDGE('',*,*,#17411,.F.); #22687=ORIENTED_EDGE('',*,*,#17499,.F.); #22688=ORIENTED_EDGE('',*,*,#17430,.T.); #22689=ORIENTED_EDGE('',*,*,#17498,.T.); #22690=ORIENTED_EDGE('',*,*,#17410,.F.); #22691=ORIENTED_EDGE('',*,*,#17500,.F.); #22692=ORIENTED_EDGE('',*,*,#17431,.T.); #22693=ORIENTED_EDGE('',*,*,#17499,.T.); #22694=ORIENTED_EDGE('',*,*,#17409,.F.); #22695=ORIENTED_EDGE('',*,*,#17501,.F.); #22696=ORIENTED_EDGE('',*,*,#17432,.T.); #22697=ORIENTED_EDGE('',*,*,#17500,.T.); #22698=ORIENTED_EDGE('',*,*,#17408,.F.); #22699=ORIENTED_EDGE('',*,*,#17502,.F.); #22700=ORIENTED_EDGE('',*,*,#17433,.T.); #22701=ORIENTED_EDGE('',*,*,#17501,.T.); #22702=ORIENTED_EDGE('',*,*,#17407,.F.); #22703=ORIENTED_EDGE('',*,*,#17434,.T.); #22704=ORIENTED_EDGE('',*,*,#17502,.T.); #22705=ORIENTED_EDGE('',*,*,#17406,.F.); #22706=ORIENTED_EDGE('',*,*,#17503,.F.); #22707=ORIENTED_EDGE('',*,*,#17437,.F.); #22708=ORIENTED_EDGE('',*,*,#17435,.T.); #22709=ORIENTED_EDGE('',*,*,#17503,.T.); #22710=ORIENTED_EDGE('',*,*,#17405,.F.); #22711=ORIENTED_EDGE('',*,*,#17441,.T.); #22712=ORIENTED_EDGE('',*,*,#17487,.T.); #22713=ORIENTED_EDGE('',*,*,#17471,.F.); #22714=ORIENTED_EDGE('',*,*,#17504,.F.); #22715=ORIENTED_EDGE('',*,*,#17505,.F.); #22716=ORIENTED_EDGE('',*,*,#17442,.T.); #22717=ORIENTED_EDGE('',*,*,#17504,.T.); #22718=ORIENTED_EDGE('',*,*,#17470,.F.); #22719=ORIENTED_EDGE('',*,*,#17506,.F.); #22720=ORIENTED_EDGE('',*,*,#17443,.T.); #22721=ORIENTED_EDGE('',*,*,#17505,.T.); #22722=ORIENTED_EDGE('',*,*,#17469,.F.); #22723=ORIENTED_EDGE('',*,*,#17507,.F.); #22724=ORIENTED_EDGE('',*,*,#17444,.T.); #22725=ORIENTED_EDGE('',*,*,#17506,.T.); #22726=ORIENTED_EDGE('',*,*,#17468,.F.); #22727=ORIENTED_EDGE('',*,*,#17508,.F.); #22728=ORIENTED_EDGE('',*,*,#17445,.T.); #22729=ORIENTED_EDGE('',*,*,#17507,.T.); #22730=ORIENTED_EDGE('',*,*,#17467,.F.); #22731=ORIENTED_EDGE('',*,*,#17509,.F.); #22732=ORIENTED_EDGE('',*,*,#17446,.T.); #22733=ORIENTED_EDGE('',*,*,#17508,.T.); #22734=ORIENTED_EDGE('',*,*,#17466,.F.); #22735=ORIENTED_EDGE('',*,*,#17447,.T.); #22736=ORIENTED_EDGE('',*,*,#17509,.T.); #22737=ORIENTED_EDGE('',*,*,#17465,.F.); #22738=ORIENTED_EDGE('',*,*,#17510,.F.); #22739=ORIENTED_EDGE('',*,*,#17462,.F.); #22740=ORIENTED_EDGE('',*,*,#17448,.T.); #22741=ORIENTED_EDGE('',*,*,#17510,.T.); #22742=ORIENTED_EDGE('',*,*,#17464,.F.); #22743=ORIENTED_EDGE('',*,*,#17474,.T.); #22744=ORIENTED_EDGE('',*,*,#17489,.T.); #22745=ORIENTED_EDGE('',*,*,#17458,.F.); #22746=ORIENTED_EDGE('',*,*,#17511,.F.); #22747=ORIENTED_EDGE('',*,*,#17512,.F.); #22748=ORIENTED_EDGE('',*,*,#17475,.T.); #22749=ORIENTED_EDGE('',*,*,#17511,.T.); #22750=ORIENTED_EDGE('',*,*,#17457,.F.); #22751=ORIENTED_EDGE('',*,*,#17513,.F.); #22752=ORIENTED_EDGE('',*,*,#17476,.T.); #22753=ORIENTED_EDGE('',*,*,#17512,.T.); #22754=ORIENTED_EDGE('',*,*,#17456,.F.); #22755=ORIENTED_EDGE('',*,*,#17514,.F.); #22756=ORIENTED_EDGE('',*,*,#17477,.T.); #22757=ORIENTED_EDGE('',*,*,#17513,.T.); #22758=ORIENTED_EDGE('',*,*,#17455,.F.); #22759=ORIENTED_EDGE('',*,*,#17515,.F.); #22760=ORIENTED_EDGE('',*,*,#17478,.T.); #22761=ORIENTED_EDGE('',*,*,#17514,.T.); #22762=ORIENTED_EDGE('',*,*,#17454,.F.); #22763=ORIENTED_EDGE('',*,*,#17516,.F.); #22764=ORIENTED_EDGE('',*,*,#17479,.T.); #22765=ORIENTED_EDGE('',*,*,#17515,.T.); #22766=ORIENTED_EDGE('',*,*,#17453,.F.); #22767=ORIENTED_EDGE('',*,*,#17480,.T.); #22768=ORIENTED_EDGE('',*,*,#17516,.T.); #22769=ORIENTED_EDGE('',*,*,#17452,.F.); #22770=ORIENTED_EDGE('',*,*,#17517,.F.); #22771=ORIENTED_EDGE('',*,*,#17483,.F.); #22772=ORIENTED_EDGE('',*,*,#17481,.T.); #22773=ORIENTED_EDGE('',*,*,#17517,.T.); #22774=ORIENTED_EDGE('',*,*,#17451,.F.); #22775=ORIENTED_EDGE('',*,*,#17518,.T.); #22776=ORIENTED_EDGE('',*,*,#17519,.T.); #22777=ORIENTED_EDGE('',*,*,#17520,.F.); #22778=ORIENTED_EDGE('',*,*,#17521,.F.); #22779=ORIENTED_EDGE('',*,*,#17522,.T.); #22780=ORIENTED_EDGE('',*,*,#17523,.T.); #22781=ORIENTED_EDGE('',*,*,#17518,.F.); #22782=ORIENTED_EDGE('',*,*,#17524,.F.); #22783=ORIENTED_EDGE('',*,*,#17520,.T.); #22784=ORIENTED_EDGE('',*,*,#17525,.T.); #22785=ORIENTED_EDGE('',*,*,#17526,.F.); #22786=ORIENTED_EDGE('',*,*,#17527,.F.); #22787=ORIENTED_EDGE('',*,*,#17521,.T.); #22788=ORIENTED_EDGE('',*,*,#17527,.T.); #22789=ORIENTED_EDGE('',*,*,#17528,.T.); #22790=ORIENTED_EDGE('',*,*,#17524,.T.); #22791=ORIENTED_EDGE('',*,*,#17529,.T.); #22792=ORIENTED_EDGE('',*,*,#17530,.T.); #22793=ORIENTED_EDGE('',*,*,#17531,.T.); #22794=ORIENTED_EDGE('',*,*,#17532,.T.); #22795=ORIENTED_EDGE('',*,*,#17533,.T.); #22796=ORIENTED_EDGE('',*,*,#17534,.T.); #22797=ORIENTED_EDGE('',*,*,#17535,.T.); #22798=ORIENTED_EDGE('',*,*,#17536,.T.); #22799=ORIENTED_EDGE('',*,*,#17537,.T.); #22800=ORIENTED_EDGE('',*,*,#17538,.T.); #22801=ORIENTED_EDGE('',*,*,#17539,.T.); #22802=ORIENTED_EDGE('',*,*,#17540,.T.); #22803=ORIENTED_EDGE('',*,*,#17541,.T.); #22804=ORIENTED_EDGE('',*,*,#17542,.T.); #22805=ORIENTED_EDGE('',*,*,#17543,.T.); #22806=ORIENTED_EDGE('',*,*,#17544,.T.); #22807=ORIENTED_EDGE('',*,*,#17545,.T.); #22808=ORIENTED_EDGE('',*,*,#17546,.T.); #22809=ORIENTED_EDGE('',*,*,#17547,.T.); #22810=ORIENTED_EDGE('',*,*,#17548,.T.); #22811=ORIENTED_EDGE('',*,*,#17549,.T.); #22812=ORIENTED_EDGE('',*,*,#17550,.T.); #22813=ORIENTED_EDGE('',*,*,#17551,.T.); #22814=ORIENTED_EDGE('',*,*,#17552,.T.); #22815=ORIENTED_EDGE('',*,*,#17553,.T.); #22816=ORIENTED_EDGE('',*,*,#17554,.T.); #22817=ORIENTED_EDGE('',*,*,#17555,.T.); #22818=ORIENTED_EDGE('',*,*,#17556,.T.); #22819=ORIENTED_EDGE('',*,*,#17557,.T.); #22820=ORIENTED_EDGE('',*,*,#17519,.F.); #22821=ORIENTED_EDGE('',*,*,#17523,.F.); #22822=ORIENTED_EDGE('',*,*,#17558,.F.); #22823=ORIENTED_EDGE('',*,*,#17525,.F.); #22824=ORIENTED_EDGE('',*,*,#17559,.F.); #22825=ORIENTED_EDGE('',*,*,#17560,.F.); #22826=ORIENTED_EDGE('',*,*,#17561,.F.); #22827=ORIENTED_EDGE('',*,*,#17562,.F.); #22828=ORIENTED_EDGE('',*,*,#17563,.F.); #22829=ORIENTED_EDGE('',*,*,#17564,.F.); #22830=ORIENTED_EDGE('',*,*,#17565,.F.); #22831=ORIENTED_EDGE('',*,*,#17566,.F.); #22832=ORIENTED_EDGE('',*,*,#17567,.F.); #22833=ORIENTED_EDGE('',*,*,#17568,.F.); #22834=ORIENTED_EDGE('',*,*,#17569,.F.); #22835=ORIENTED_EDGE('',*,*,#17570,.F.); #22836=ORIENTED_EDGE('',*,*,#17571,.F.); #22837=ORIENTED_EDGE('',*,*,#17572,.F.); #22838=ORIENTED_EDGE('',*,*,#17573,.F.); #22839=ORIENTED_EDGE('',*,*,#17574,.F.); #22840=ORIENTED_EDGE('',*,*,#17575,.F.); #22841=ORIENTED_EDGE('',*,*,#17576,.F.); #22842=ORIENTED_EDGE('',*,*,#17577,.F.); #22843=ORIENTED_EDGE('',*,*,#17578,.F.); #22844=ORIENTED_EDGE('',*,*,#17579,.F.); #22845=ORIENTED_EDGE('',*,*,#17580,.F.); #22846=ORIENTED_EDGE('',*,*,#17581,.F.); #22847=ORIENTED_EDGE('',*,*,#17582,.F.); #22848=ORIENTED_EDGE('',*,*,#17583,.F.); #22849=ORIENTED_EDGE('',*,*,#17584,.F.); #22850=ORIENTED_EDGE('',*,*,#17585,.F.); #22851=ORIENTED_EDGE('',*,*,#17586,.F.); #22852=ORIENTED_EDGE('',*,*,#17587,.F.); #22853=ORIENTED_EDGE('',*,*,#17526,.T.); #22854=ORIENTED_EDGE('',*,*,#17558,.T.); #22855=ORIENTED_EDGE('',*,*,#17522,.F.); #22856=ORIENTED_EDGE('',*,*,#17528,.F.); #22857=ORIENTED_EDGE('',*,*,#17529,.F.); #22858=ORIENTED_EDGE('',*,*,#17588,.T.); #22859=ORIENTED_EDGE('',*,*,#17559,.T.); #22860=ORIENTED_EDGE('',*,*,#17588,.F.); #22861=ORIENTED_EDGE('',*,*,#17530,.F.); #22862=ORIENTED_EDGE('',*,*,#17589,.T.); #22863=ORIENTED_EDGE('',*,*,#17560,.T.); #22864=ORIENTED_EDGE('',*,*,#17589,.F.); #22865=ORIENTED_EDGE('',*,*,#17531,.F.); #22866=ORIENTED_EDGE('',*,*,#17590,.T.); #22867=ORIENTED_EDGE('',*,*,#17561,.T.); #22868=ORIENTED_EDGE('',*,*,#17590,.F.); #22869=ORIENTED_EDGE('',*,*,#17532,.F.); #22870=ORIENTED_EDGE('',*,*,#17591,.T.); #22871=ORIENTED_EDGE('',*,*,#17562,.T.); #22872=ORIENTED_EDGE('',*,*,#17591,.F.); #22873=ORIENTED_EDGE('',*,*,#17533,.F.); #22874=ORIENTED_EDGE('',*,*,#17592,.T.); #22875=ORIENTED_EDGE('',*,*,#17563,.T.); #22876=ORIENTED_EDGE('',*,*,#17592,.F.); #22877=ORIENTED_EDGE('',*,*,#17534,.F.); #22878=ORIENTED_EDGE('',*,*,#17593,.T.); #22879=ORIENTED_EDGE('',*,*,#17564,.T.); #22880=ORIENTED_EDGE('',*,*,#17593,.F.); #22881=ORIENTED_EDGE('',*,*,#17535,.F.); #22882=ORIENTED_EDGE('',*,*,#17594,.T.); #22883=ORIENTED_EDGE('',*,*,#17565,.T.); #22884=ORIENTED_EDGE('',*,*,#17594,.F.); #22885=ORIENTED_EDGE('',*,*,#17536,.F.); #22886=ORIENTED_EDGE('',*,*,#17595,.T.); #22887=ORIENTED_EDGE('',*,*,#17566,.T.); #22888=ORIENTED_EDGE('',*,*,#17595,.F.); #22889=ORIENTED_EDGE('',*,*,#17537,.F.); #22890=ORIENTED_EDGE('',*,*,#17596,.T.); #22891=ORIENTED_EDGE('',*,*,#17567,.T.); #22892=ORIENTED_EDGE('',*,*,#17596,.F.); #22893=ORIENTED_EDGE('',*,*,#17538,.F.); #22894=ORIENTED_EDGE('',*,*,#17597,.T.); #22895=ORIENTED_EDGE('',*,*,#17568,.T.); #22896=ORIENTED_EDGE('',*,*,#17597,.F.); #22897=ORIENTED_EDGE('',*,*,#17539,.F.); #22898=ORIENTED_EDGE('',*,*,#17598,.T.); #22899=ORIENTED_EDGE('',*,*,#17569,.T.); #22900=ORIENTED_EDGE('',*,*,#17598,.F.); #22901=ORIENTED_EDGE('',*,*,#17540,.F.); #22902=ORIENTED_EDGE('',*,*,#17599,.T.); #22903=ORIENTED_EDGE('',*,*,#17570,.T.); #22904=ORIENTED_EDGE('',*,*,#17599,.F.); #22905=ORIENTED_EDGE('',*,*,#17541,.F.); #22906=ORIENTED_EDGE('',*,*,#17600,.T.); #22907=ORIENTED_EDGE('',*,*,#17571,.T.); #22908=ORIENTED_EDGE('',*,*,#17600,.F.); #22909=ORIENTED_EDGE('',*,*,#17542,.F.); #22910=ORIENTED_EDGE('',*,*,#17601,.T.); #22911=ORIENTED_EDGE('',*,*,#17572,.T.); #22912=ORIENTED_EDGE('',*,*,#17601,.F.); #22913=ORIENTED_EDGE('',*,*,#17543,.F.); #22914=ORIENTED_EDGE('',*,*,#17602,.T.); #22915=ORIENTED_EDGE('',*,*,#17573,.T.); #22916=ORIENTED_EDGE('',*,*,#17602,.F.); #22917=ORIENTED_EDGE('',*,*,#17544,.F.); #22918=ORIENTED_EDGE('',*,*,#17603,.T.); #22919=ORIENTED_EDGE('',*,*,#17574,.T.); #22920=ORIENTED_EDGE('',*,*,#17603,.F.); #22921=ORIENTED_EDGE('',*,*,#17545,.F.); #22922=ORIENTED_EDGE('',*,*,#17604,.T.); #22923=ORIENTED_EDGE('',*,*,#17575,.T.); #22924=ORIENTED_EDGE('',*,*,#17604,.F.); #22925=ORIENTED_EDGE('',*,*,#17546,.F.); #22926=ORIENTED_EDGE('',*,*,#17605,.T.); #22927=ORIENTED_EDGE('',*,*,#17576,.T.); #22928=ORIENTED_EDGE('',*,*,#17605,.F.); #22929=ORIENTED_EDGE('',*,*,#17547,.F.); #22930=ORIENTED_EDGE('',*,*,#17606,.T.); #22931=ORIENTED_EDGE('',*,*,#17577,.T.); #22932=ORIENTED_EDGE('',*,*,#17606,.F.); #22933=ORIENTED_EDGE('',*,*,#17548,.F.); #22934=ORIENTED_EDGE('',*,*,#17607,.T.); #22935=ORIENTED_EDGE('',*,*,#17578,.T.); #22936=ORIENTED_EDGE('',*,*,#17607,.F.); #22937=ORIENTED_EDGE('',*,*,#17549,.F.); #22938=ORIENTED_EDGE('',*,*,#17608,.T.); #22939=ORIENTED_EDGE('',*,*,#17579,.T.); #22940=ORIENTED_EDGE('',*,*,#17608,.F.); #22941=ORIENTED_EDGE('',*,*,#17550,.F.); #22942=ORIENTED_EDGE('',*,*,#17609,.T.); #22943=ORIENTED_EDGE('',*,*,#17580,.T.); #22944=ORIENTED_EDGE('',*,*,#17609,.F.); #22945=ORIENTED_EDGE('',*,*,#17551,.F.); #22946=ORIENTED_EDGE('',*,*,#17610,.T.); #22947=ORIENTED_EDGE('',*,*,#17581,.T.); #22948=ORIENTED_EDGE('',*,*,#17610,.F.); #22949=ORIENTED_EDGE('',*,*,#17552,.F.); #22950=ORIENTED_EDGE('',*,*,#17611,.T.); #22951=ORIENTED_EDGE('',*,*,#17582,.T.); #22952=ORIENTED_EDGE('',*,*,#17611,.F.); #22953=ORIENTED_EDGE('',*,*,#17553,.F.); #22954=ORIENTED_EDGE('',*,*,#17612,.T.); #22955=ORIENTED_EDGE('',*,*,#17583,.T.); #22956=ORIENTED_EDGE('',*,*,#17612,.F.); #22957=ORIENTED_EDGE('',*,*,#17554,.F.); #22958=ORIENTED_EDGE('',*,*,#17613,.T.); #22959=ORIENTED_EDGE('',*,*,#17584,.T.); #22960=ORIENTED_EDGE('',*,*,#17613,.F.); #22961=ORIENTED_EDGE('',*,*,#17555,.F.); #22962=ORIENTED_EDGE('',*,*,#17614,.T.); #22963=ORIENTED_EDGE('',*,*,#17585,.T.); #22964=ORIENTED_EDGE('',*,*,#17614,.F.); #22965=ORIENTED_EDGE('',*,*,#17556,.F.); #22966=ORIENTED_EDGE('',*,*,#17615,.T.); #22967=ORIENTED_EDGE('',*,*,#17586,.T.); #22968=ORIENTED_EDGE('',*,*,#17615,.F.); #22969=ORIENTED_EDGE('',*,*,#17557,.F.); #22970=ORIENTED_EDGE('',*,*,#17616,.T.); #22971=ORIENTED_EDGE('',*,*,#17587,.T.); #22972=ORIENTED_EDGE('',*,*,#17616,.F.); #22973=ORIENTED_EDGE('',*,*,#17617,.T.); #22974=ORIENTED_EDGE('',*,*,#17618,.T.); #22975=ORIENTED_EDGE('',*,*,#17619,.F.); #22976=ORIENTED_EDGE('',*,*,#17618,.F.); #22977=ORIENTED_EDGE('',*,*,#17620,.T.); #22978=ORIENTED_EDGE('',*,*,#17621,.T.); #22979=ORIENTED_EDGE('',*,*,#17622,.F.); #22980=ORIENTED_EDGE('',*,*,#17621,.F.); #22981=ORIENTED_EDGE('',*,*,#17623,.T.); #22982=ORIENTED_EDGE('',*,*,#17624,.T.); #22983=ORIENTED_EDGE('',*,*,#17625,.F.); #22984=ORIENTED_EDGE('',*,*,#17624,.F.); #22985=ORIENTED_EDGE('',*,*,#17626,.T.); #22986=ORIENTED_EDGE('',*,*,#17627,.T.); #22987=ORIENTED_EDGE('',*,*,#17628,.T.); #22988=ORIENTED_EDGE('',*,*,#17629,.F.); #22989=ORIENTED_EDGE('',*,*,#17630,.T.); #22990=ORIENTED_EDGE('',*,*,#17631,.F.); #22991=ORIENTED_EDGE('',*,*,#17632,.F.); #22992=ORIENTED_EDGE('',*,*,#17633,.F.); #22993=ORIENTED_EDGE('',*,*,#17634,.T.); #22994=ORIENTED_EDGE('',*,*,#17635,.F.); #22995=ORIENTED_EDGE('',*,*,#17636,.F.); #22996=ORIENTED_EDGE('',*,*,#17637,.F.); #22997=ORIENTED_EDGE('',*,*,#17638,.T.); #22998=ORIENTED_EDGE('',*,*,#17639,.F.); #22999=ORIENTED_EDGE('',*,*,#17640,.F.); #23000=ORIENTED_EDGE('',*,*,#17641,.F.); #23001=ORIENTED_EDGE('',*,*,#17642,.T.); #23002=ORIENTED_EDGE('',*,*,#17643,.F.); #23003=ORIENTED_EDGE('',*,*,#17644,.F.); #23004=ORIENTED_EDGE('',*,*,#17645,.F.); #23005=ORIENTED_EDGE('',*,*,#17646,.F.); #23006=ORIENTED_EDGE('',*,*,#17647,.T.); #23007=ORIENTED_EDGE('',*,*,#17648,.T.); #23008=ORIENTED_EDGE('',*,*,#17647,.F.); #23009=ORIENTED_EDGE('',*,*,#17649,.F.); #23010=ORIENTED_EDGE('',*,*,#17650,.T.); #23011=ORIENTED_EDGE('',*,*,#17651,.T.); #23012=ORIENTED_EDGE('',*,*,#17650,.F.); #23013=ORIENTED_EDGE('',*,*,#17652,.F.); #23014=ORIENTED_EDGE('',*,*,#17653,.T.); #23015=ORIENTED_EDGE('',*,*,#17654,.T.); #23016=ORIENTED_EDGE('',*,*,#17653,.F.); #23017=ORIENTED_EDGE('',*,*,#17655,.F.); #23018=ORIENTED_EDGE('',*,*,#17656,.T.); #23019=ORIENTED_EDGE('',*,*,#17657,.T.); #23020=ORIENTED_EDGE('',*,*,#17656,.F.); #23021=ORIENTED_EDGE('',*,*,#17658,.F.); #23022=ORIENTED_EDGE('',*,*,#17659,.T.); #23023=ORIENTED_EDGE('',*,*,#17660,.T.); #23024=ORIENTED_EDGE('',*,*,#17659,.F.); #23025=ORIENTED_EDGE('',*,*,#17661,.F.); #23026=ORIENTED_EDGE('',*,*,#17662,.T.); #23027=ORIENTED_EDGE('',*,*,#17663,.T.); #23028=ORIENTED_EDGE('',*,*,#17662,.F.); #23029=ORIENTED_EDGE('',*,*,#17664,.F.); #23030=ORIENTED_EDGE('',*,*,#17665,.T.); #23031=ORIENTED_EDGE('',*,*,#17666,.T.); #23032=ORIENTED_EDGE('',*,*,#17665,.F.); #23033=ORIENTED_EDGE('',*,*,#17667,.F.); #23034=ORIENTED_EDGE('',*,*,#17668,.T.); #23035=ORIENTED_EDGE('',*,*,#17669,.T.); #23036=ORIENTED_EDGE('',*,*,#17668,.F.); #23037=ORIENTED_EDGE('',*,*,#17670,.F.); #23038=ORIENTED_EDGE('',*,*,#17671,.T.); #23039=ORIENTED_EDGE('',*,*,#17672,.T.); #23040=ORIENTED_EDGE('',*,*,#17671,.F.); #23041=ORIENTED_EDGE('',*,*,#17673,.F.); #23042=ORIENTED_EDGE('',*,*,#17674,.T.); #23043=ORIENTED_EDGE('',*,*,#17675,.T.); #23044=ORIENTED_EDGE('',*,*,#17674,.F.); #23045=ORIENTED_EDGE('',*,*,#17676,.F.); #23046=ORIENTED_EDGE('',*,*,#17677,.T.); #23047=ORIENTED_EDGE('',*,*,#17678,.T.); #23048=ORIENTED_EDGE('',*,*,#17677,.F.); #23049=ORIENTED_EDGE('',*,*,#17679,.F.); #23050=ORIENTED_EDGE('',*,*,#17680,.T.); #23051=ORIENTED_EDGE('',*,*,#17681,.T.); #23052=ORIENTED_EDGE('',*,*,#17680,.F.); #23053=ORIENTED_EDGE('',*,*,#17682,.T.); #23054=ORIENTED_EDGE('',*,*,#17683,.F.); #23055=ORIENTED_EDGE('',*,*,#17684,.F.); #23056=ORIENTED_EDGE('',*,*,#17685,.F.); #23057=ORIENTED_EDGE('',*,*,#17686,.T.); #23058=ORIENTED_EDGE('',*,*,#17687,.F.); #23059=ORIENTED_EDGE('',*,*,#17688,.F.); #23060=ORIENTED_EDGE('',*,*,#17689,.F.); #23061=ORIENTED_EDGE('',*,*,#17690,.T.); #23062=ORIENTED_EDGE('',*,*,#17691,.F.); #23063=ORIENTED_EDGE('',*,*,#17692,.F.); #23064=ORIENTED_EDGE('',*,*,#17693,.F.); #23065=ORIENTED_EDGE('',*,*,#17694,.T.); #23066=ORIENTED_EDGE('',*,*,#17695,.F.); #23067=ORIENTED_EDGE('',*,*,#17696,.F.); #23068=ORIENTED_EDGE('',*,*,#17697,.F.); #23069=ORIENTED_EDGE('',*,*,#17698,.T.); #23070=ORIENTED_EDGE('',*,*,#17699,.F.); #23071=ORIENTED_EDGE('',*,*,#17700,.F.); #23072=ORIENTED_EDGE('',*,*,#17701,.F.); #23073=ORIENTED_EDGE('',*,*,#17702,.T.); #23074=ORIENTED_EDGE('',*,*,#17703,.F.); #23075=ORIENTED_EDGE('',*,*,#17704,.F.); #23076=ORIENTED_EDGE('',*,*,#17705,.F.); #23077=ORIENTED_EDGE('',*,*,#17706,.T.); #23078=ORIENTED_EDGE('',*,*,#17707,.F.); #23079=ORIENTED_EDGE('',*,*,#17708,.F.); #23080=ORIENTED_EDGE('',*,*,#17709,.F.); #23081=ORIENTED_EDGE('',*,*,#17710,.T.); #23082=ORIENTED_EDGE('',*,*,#17711,.F.); #23083=ORIENTED_EDGE('',*,*,#17712,.F.); #23084=ORIENTED_EDGE('',*,*,#17713,.F.); #23085=ORIENTED_EDGE('',*,*,#17714,.T.); #23086=ORIENTED_EDGE('',*,*,#17715,.F.); #23087=ORIENTED_EDGE('',*,*,#17716,.F.); #23088=ORIENTED_EDGE('',*,*,#17717,.F.); #23089=ORIENTED_EDGE('',*,*,#17718,.T.); #23090=ORIENTED_EDGE('',*,*,#17719,.F.); #23091=ORIENTED_EDGE('',*,*,#17720,.F.); #23092=ORIENTED_EDGE('',*,*,#17721,.F.); #23093=ORIENTED_EDGE('',*,*,#17722,.T.); #23094=ORIENTED_EDGE('',*,*,#17723,.F.); #23095=ORIENTED_EDGE('',*,*,#17724,.F.); #23096=ORIENTED_EDGE('',*,*,#17725,.F.); #23097=ORIENTED_EDGE('',*,*,#17726,.T.); #23098=ORIENTED_EDGE('',*,*,#17727,.F.); #23099=ORIENTED_EDGE('',*,*,#17728,.F.); #23100=ORIENTED_EDGE('',*,*,#17729,.F.); #23101=ORIENTED_EDGE('',*,*,#17730,.T.); #23102=ORIENTED_EDGE('',*,*,#17731,.F.); #23103=ORIENTED_EDGE('',*,*,#17732,.F.); #23104=ORIENTED_EDGE('',*,*,#17733,.F.); #23105=ORIENTED_EDGE('',*,*,#17734,.T.); #23106=ORIENTED_EDGE('',*,*,#17735,.F.); #23107=ORIENTED_EDGE('',*,*,#17736,.F.); #23108=ORIENTED_EDGE('',*,*,#17737,.F.); #23109=ORIENTED_EDGE('',*,*,#17738,.T.); #23110=ORIENTED_EDGE('',*,*,#17739,.F.); #23111=ORIENTED_EDGE('',*,*,#17740,.F.); #23112=ORIENTED_EDGE('',*,*,#17741,.F.); #23113=ORIENTED_EDGE('',*,*,#17742,.F.); #23114=ORIENTED_EDGE('',*,*,#17743,.T.); #23115=ORIENTED_EDGE('',*,*,#17744,.T.); #23116=ORIENTED_EDGE('',*,*,#17743,.F.); #23117=ORIENTED_EDGE('',*,*,#17745,.F.); #23118=ORIENTED_EDGE('',*,*,#17746,.T.); #23119=ORIENTED_EDGE('',*,*,#17747,.T.); #23120=ORIENTED_EDGE('',*,*,#17746,.F.); #23121=ORIENTED_EDGE('',*,*,#17748,.F.); #23122=ORIENTED_EDGE('',*,*,#17749,.T.); #23123=ORIENTED_EDGE('',*,*,#17750,.T.); #23124=ORIENTED_EDGE('',*,*,#17749,.F.); #23125=ORIENTED_EDGE('',*,*,#17751,.F.); #23126=ORIENTED_EDGE('',*,*,#17752,.T.); #23127=ORIENTED_EDGE('',*,*,#17753,.T.); #23128=ORIENTED_EDGE('',*,*,#17752,.F.); #23129=ORIENTED_EDGE('',*,*,#17754,.F.); #23130=ORIENTED_EDGE('',*,*,#17755,.T.); #23131=ORIENTED_EDGE('',*,*,#17756,.T.); #23132=ORIENTED_EDGE('',*,*,#17755,.F.); #23133=ORIENTED_EDGE('',*,*,#17757,.F.); #23134=ORIENTED_EDGE('',*,*,#17758,.T.); #23135=ORIENTED_EDGE('',*,*,#17759,.T.); #23136=ORIENTED_EDGE('',*,*,#17758,.F.); #23137=ORIENTED_EDGE('',*,*,#17760,.F.); #23138=ORIENTED_EDGE('',*,*,#17761,.T.); #23139=ORIENTED_EDGE('',*,*,#17762,.T.); #23140=ORIENTED_EDGE('',*,*,#17761,.F.); #23141=ORIENTED_EDGE('',*,*,#17763,.F.); #23142=ORIENTED_EDGE('',*,*,#17764,.T.); #23143=ORIENTED_EDGE('',*,*,#17765,.T.); #23144=ORIENTED_EDGE('',*,*,#17764,.F.); #23145=ORIENTED_EDGE('',*,*,#17766,.T.); #23146=ORIENTED_EDGE('',*,*,#17767,.F.); #23147=ORIENTED_EDGE('',*,*,#17768,.F.); #23148=ORIENTED_EDGE('',*,*,#17769,.F.); #23149=ORIENTED_EDGE('',*,*,#17626,.F.); #23150=ORIENTED_EDGE('',*,*,#17770,.T.); #23151=ORIENTED_EDGE('',*,*,#17771,.T.); #23152=ORIENTED_EDGE('',*,*,#17772,.F.); #23153=ORIENTED_EDGE('',*,*,#17773,.F.); #23154=ORIENTED_EDGE('',*,*,#17774,.F.); #23155=ORIENTED_EDGE('',*,*,#17775,.T.); #23156=ORIENTED_EDGE('',*,*,#17776,.T.); #23157=ORIENTED_EDGE('',*,*,#17777,.F.); #23158=ORIENTED_EDGE('',*,*,#17778,.F.); #23159=ORIENTED_EDGE('',*,*,#17779,.T.); #23160=ORIENTED_EDGE('',*,*,#17780,.T.); #23161=ORIENTED_EDGE('',*,*,#17781,.F.); #23162=ORIENTED_EDGE('',*,*,#17782,.T.); #23163=ORIENTED_EDGE('',*,*,#17774,.T.); #23164=ORIENTED_EDGE('',*,*,#17783,.F.); #23165=ORIENTED_EDGE('',*,*,#17784,.F.); #23166=ORIENTED_EDGE('',*,*,#17785,.T.); #23167=ORIENTED_EDGE('',*,*,#17769,.T.); #23168=ORIENTED_EDGE('',*,*,#17786,.F.); #23169=ORIENTED_EDGE('',*,*,#17787,.F.); #23170=ORIENTED_EDGE('',*,*,#17788,.T.); #23171=ORIENTED_EDGE('',*,*,#17741,.T.); #23172=ORIENTED_EDGE('',*,*,#17789,.F.); #23173=ORIENTED_EDGE('',*,*,#17790,.F.); #23174=ORIENTED_EDGE('',*,*,#17791,.T.); #23175=ORIENTED_EDGE('',*,*,#17737,.T.); #23176=ORIENTED_EDGE('',*,*,#17792,.F.); #23177=ORIENTED_EDGE('',*,*,#17793,.F.); #23178=ORIENTED_EDGE('',*,*,#17794,.T.); #23179=ORIENTED_EDGE('',*,*,#17733,.T.); #23180=ORIENTED_EDGE('',*,*,#17795,.F.); #23181=ORIENTED_EDGE('',*,*,#17796,.F.); #23182=ORIENTED_EDGE('',*,*,#17797,.T.); #23183=ORIENTED_EDGE('',*,*,#17729,.T.); #23184=ORIENTED_EDGE('',*,*,#17798,.F.); #23185=ORIENTED_EDGE('',*,*,#17799,.F.); #23186=ORIENTED_EDGE('',*,*,#17800,.T.); #23187=ORIENTED_EDGE('',*,*,#17725,.T.); #23188=ORIENTED_EDGE('',*,*,#17801,.F.); #23189=ORIENTED_EDGE('',*,*,#17802,.F.); #23190=ORIENTED_EDGE('',*,*,#17803,.T.); #23191=ORIENTED_EDGE('',*,*,#17721,.T.); #23192=ORIENTED_EDGE('',*,*,#17804,.F.); #23193=ORIENTED_EDGE('',*,*,#17805,.F.); #23194=ORIENTED_EDGE('',*,*,#17806,.T.); #23195=ORIENTED_EDGE('',*,*,#17717,.T.); #23196=ORIENTED_EDGE('',*,*,#17807,.F.); #23197=ORIENTED_EDGE('',*,*,#17808,.F.); #23198=ORIENTED_EDGE('',*,*,#17809,.T.); #23199=ORIENTED_EDGE('',*,*,#17713,.T.); #23200=ORIENTED_EDGE('',*,*,#17810,.F.); #23201=ORIENTED_EDGE('',*,*,#17811,.F.); #23202=ORIENTED_EDGE('',*,*,#17812,.T.); #23203=ORIENTED_EDGE('',*,*,#17709,.T.); #23204=ORIENTED_EDGE('',*,*,#17813,.F.); #23205=ORIENTED_EDGE('',*,*,#17814,.F.); #23206=ORIENTED_EDGE('',*,*,#17815,.T.); #23207=ORIENTED_EDGE('',*,*,#17705,.T.); #23208=ORIENTED_EDGE('',*,*,#17816,.F.); #23209=ORIENTED_EDGE('',*,*,#17817,.F.); #23210=ORIENTED_EDGE('',*,*,#17818,.T.); #23211=ORIENTED_EDGE('',*,*,#17701,.T.); #23212=ORIENTED_EDGE('',*,*,#17819,.F.); #23213=ORIENTED_EDGE('',*,*,#17820,.F.); #23214=ORIENTED_EDGE('',*,*,#17821,.T.); #23215=ORIENTED_EDGE('',*,*,#17697,.T.); #23216=ORIENTED_EDGE('',*,*,#17822,.F.); #23217=ORIENTED_EDGE('',*,*,#17823,.F.); #23218=ORIENTED_EDGE('',*,*,#17824,.T.); #23219=ORIENTED_EDGE('',*,*,#17693,.T.); #23220=ORIENTED_EDGE('',*,*,#17825,.F.); #23221=ORIENTED_EDGE('',*,*,#17826,.F.); #23222=ORIENTED_EDGE('',*,*,#17827,.T.); #23223=ORIENTED_EDGE('',*,*,#17689,.T.); #23224=ORIENTED_EDGE('',*,*,#17828,.F.); #23225=ORIENTED_EDGE('',*,*,#17829,.F.); #23226=ORIENTED_EDGE('',*,*,#17830,.T.); #23227=ORIENTED_EDGE('',*,*,#17645,.T.); #23228=ORIENTED_EDGE('',*,*,#17831,.F.); #23229=ORIENTED_EDGE('',*,*,#17832,.F.); #23230=ORIENTED_EDGE('',*,*,#17833,.T.); #23231=ORIENTED_EDGE('',*,*,#17641,.T.); #23232=ORIENTED_EDGE('',*,*,#17834,.F.); #23233=ORIENTED_EDGE('',*,*,#17835,.F.); #23234=ORIENTED_EDGE('',*,*,#17836,.T.); #23235=ORIENTED_EDGE('',*,*,#17637,.T.); #23236=ORIENTED_EDGE('',*,*,#17837,.F.); #23237=ORIENTED_EDGE('',*,*,#17838,.F.); #23238=ORIENTED_EDGE('',*,*,#17839,.T.); #23239=ORIENTED_EDGE('',*,*,#17685,.T.); #23240=ORIENTED_EDGE('',*,*,#17840,.F.); #23241=ORIENTED_EDGE('',*,*,#17841,.F.); #23242=ORIENTED_EDGE('',*,*,#17842,.T.); #23243=ORIENTED_EDGE('',*,*,#17633,.T.); #23244=ORIENTED_EDGE('',*,*,#17843,.F.); #23245=ORIENTED_EDGE('',*,*,#17844,.T.); #23246=ORIENTED_EDGE('',*,*,#17845,.T.); #23247=ORIENTED_EDGE('',*,*,#17846,.T.); #23248=ORIENTED_EDGE('',*,*,#17847,.T.); #23249=ORIENTED_EDGE('',*,*,#17848,.T.); #23250=ORIENTED_EDGE('',*,*,#17849,.F.); #23251=ORIENTED_EDGE('',*,*,#17630,.F.); #23252=ORIENTED_EDGE('',*,*,#17842,.F.); #23253=ORIENTED_EDGE('',*,*,#17756,.F.); #23254=ORIENTED_EDGE('',*,*,#17850,.F.); #23255=ORIENTED_EDGE('',*,*,#17843,.T.); #23256=ORIENTED_EDGE('',*,*,#17632,.T.); #23257=ORIENTED_EDGE('',*,*,#17851,.T.); #23258=ORIENTED_EDGE('',*,*,#17852,.F.); #23259=ORIENTED_EDGE('',*,*,#17853,.F.); #23260=ORIENTED_EDGE('',*,*,#17854,.F.); #23261=ORIENTED_EDGE('',*,*,#17855,.F.); #23262=ORIENTED_EDGE('',*,*,#17754,.T.); #23263=ORIENTED_EDGE('',*,*,#17856,.T.); #23264=ORIENTED_EDGE('',*,*,#17857,.F.); #23265=ORIENTED_EDGE('',*,*,#17858,.F.); #23266=ORIENTED_EDGE('',*,*,#17634,.F.); #23267=ORIENTED_EDGE('',*,*,#17836,.F.); #23268=ORIENTED_EDGE('',*,*,#17859,.F.); #23269=ORIENTED_EDGE('',*,*,#17860,.T.); #23270=ORIENTED_EDGE('',*,*,#17861,.T.); #23271=ORIENTED_EDGE('',*,*,#17862,.T.); #23272=ORIENTED_EDGE('',*,*,#17863,.T.); #23273=ORIENTED_EDGE('',*,*,#17759,.F.); #23274=ORIENTED_EDGE('',*,*,#17864,.F.); #23275=ORIENTED_EDGE('',*,*,#17865,.F.); #23276=ORIENTED_EDGE('',*,*,#17866,.F.); #23277=ORIENTED_EDGE('',*,*,#17867,.F.); #23278=ORIENTED_EDGE('',*,*,#17868,.F.); #23279=ORIENTED_EDGE('',*,*,#17869,.T.); #23280=ORIENTED_EDGE('',*,*,#17837,.T.); #23281=ORIENTED_EDGE('',*,*,#17636,.T.); #23282=ORIENTED_EDGE('',*,*,#17870,.T.); #23283=ORIENTED_EDGE('',*,*,#17871,.T.); #23284=ORIENTED_EDGE('',*,*,#17757,.T.); #23285=ORIENTED_EDGE('',*,*,#17872,.T.); #23286=ORIENTED_EDGE('',*,*,#17873,.F.); #23287=ORIENTED_EDGE('',*,*,#17638,.F.); #23288=ORIENTED_EDGE('',*,*,#17833,.F.); #23289=ORIENTED_EDGE('',*,*,#17874,.T.); #23290=ORIENTED_EDGE('',*,*,#17875,.T.); #23291=ORIENTED_EDGE('',*,*,#17876,.T.); #23292=ORIENTED_EDGE('',*,*,#17877,.T.); #23293=ORIENTED_EDGE('',*,*,#17762,.F.); #23294=ORIENTED_EDGE('',*,*,#17878,.F.); #23295=ORIENTED_EDGE('',*,*,#17879,.F.); #23296=ORIENTED_EDGE('',*,*,#17880,.F.); #23297=ORIENTED_EDGE('',*,*,#17881,.F.); #23298=ORIENTED_EDGE('',*,*,#17882,.F.); #23299=ORIENTED_EDGE('',*,*,#17834,.T.); #23300=ORIENTED_EDGE('',*,*,#17640,.T.); #23301=ORIENTED_EDGE('',*,*,#17883,.T.); #23302=ORIENTED_EDGE('',*,*,#17760,.T.); #23303=ORIENTED_EDGE('',*,*,#17884,.T.); #23304=ORIENTED_EDGE('',*,*,#17885,.T.); #23305=ORIENTED_EDGE('',*,*,#17886,.T.); #23306=ORIENTED_EDGE('',*,*,#17887,.T.); #23307=ORIENTED_EDGE('',*,*,#17888,.T.); #23308=ORIENTED_EDGE('',*,*,#17889,.F.); #23309=ORIENTED_EDGE('',*,*,#17642,.F.); #23310=ORIENTED_EDGE('',*,*,#17830,.F.); #23311=ORIENTED_EDGE('',*,*,#17765,.F.); #23312=ORIENTED_EDGE('',*,*,#17890,.F.); #23313=ORIENTED_EDGE('',*,*,#17831,.T.); #23314=ORIENTED_EDGE('',*,*,#17644,.T.); #23315=ORIENTED_EDGE('',*,*,#17891,.T.); #23316=ORIENTED_EDGE('',*,*,#17892,.F.); #23317=ORIENTED_EDGE('',*,*,#17893,.F.); #23318=ORIENTED_EDGE('',*,*,#17894,.F.); #23319=ORIENTED_EDGE('',*,*,#17895,.F.); #23320=ORIENTED_EDGE('',*,*,#17763,.T.); #23321=ORIENTED_EDGE('',*,*,#17896,.T.); #23322=ORIENTED_EDGE('',*,*,#17897,.T.); #23323=ORIENTED_EDGE('',*,*,#17898,.T.); #23324=ORIENTED_EDGE('',*,*,#17899,.T.); #23325=ORIENTED_EDGE('',*,*,#17900,.T.); #23326=ORIENTED_EDGE('',*,*,#17901,.F.); #23327=ORIENTED_EDGE('',*,*,#17902,.F.); #23328=ORIENTED_EDGE('',*,*,#17714,.F.); #23329=ORIENTED_EDGE('',*,*,#17806,.F.); #23330=ORIENTED_EDGE('',*,*,#17903,.F.); #23331=ORIENTED_EDGE('',*,*,#17666,.F.); #23332=ORIENTED_EDGE('',*,*,#17904,.F.); #23333=ORIENTED_EDGE('',*,*,#17905,.T.); #23334=ORIENTED_EDGE('',*,*,#17807,.T.); #23335=ORIENTED_EDGE('',*,*,#17716,.T.); #23336=ORIENTED_EDGE('',*,*,#17906,.T.); #23337=ORIENTED_EDGE('',*,*,#17907,.T.); #23338=ORIENTED_EDGE('',*,*,#17908,.F.); #23339=ORIENTED_EDGE('',*,*,#17909,.F.); #23340=ORIENTED_EDGE('',*,*,#17910,.F.); #23341=ORIENTED_EDGE('',*,*,#17911,.F.); #23342=ORIENTED_EDGE('',*,*,#17664,.T.); #23343=ORIENTED_EDGE('',*,*,#17912,.T.); #23344=ORIENTED_EDGE('',*,*,#17913,.F.); #23345=ORIENTED_EDGE('',*,*,#17710,.F.); #23346=ORIENTED_EDGE('',*,*,#17809,.F.); #23347=ORIENTED_EDGE('',*,*,#17914,.T.); #23348=ORIENTED_EDGE('',*,*,#17915,.T.); #23349=ORIENTED_EDGE('',*,*,#17916,.T.); #23350=ORIENTED_EDGE('',*,*,#17917,.T.); #23351=ORIENTED_EDGE('',*,*,#17669,.F.); #23352=ORIENTED_EDGE('',*,*,#17918,.F.); #23353=ORIENTED_EDGE('',*,*,#17919,.F.); #23354=ORIENTED_EDGE('',*,*,#17920,.F.); #23355=ORIENTED_EDGE('',*,*,#17921,.F.); #23356=ORIENTED_EDGE('',*,*,#17922,.F.); #23357=ORIENTED_EDGE('',*,*,#17810,.T.); #23358=ORIENTED_EDGE('',*,*,#17712,.T.); #23359=ORIENTED_EDGE('',*,*,#17923,.T.); #23360=ORIENTED_EDGE('',*,*,#17667,.T.); #23361=ORIENTED_EDGE('',*,*,#17924,.T.); #23362=ORIENTED_EDGE('',*,*,#17925,.T.); #23363=ORIENTED_EDGE('',*,*,#17926,.T.); #23364=ORIENTED_EDGE('',*,*,#17927,.T.); #23365=ORIENTED_EDGE('',*,*,#17928,.T.); #23366=ORIENTED_EDGE('',*,*,#17929,.F.); #23367=ORIENTED_EDGE('',*,*,#17706,.F.); #23368=ORIENTED_EDGE('',*,*,#17812,.F.); #23369=ORIENTED_EDGE('',*,*,#17672,.F.); #23370=ORIENTED_EDGE('',*,*,#17930,.F.); #23371=ORIENTED_EDGE('',*,*,#17813,.T.); #23372=ORIENTED_EDGE('',*,*,#17708,.T.); #23373=ORIENTED_EDGE('',*,*,#17931,.T.); #23374=ORIENTED_EDGE('',*,*,#17932,.F.); #23375=ORIENTED_EDGE('',*,*,#17933,.F.); #23376=ORIENTED_EDGE('',*,*,#17934,.F.); #23377=ORIENTED_EDGE('',*,*,#17935,.F.); #23378=ORIENTED_EDGE('',*,*,#17670,.T.); #23379=ORIENTED_EDGE('',*,*,#17936,.T.); #23380=ORIENTED_EDGE('',*,*,#17937,.T.); #23381=ORIENTED_EDGE('',*,*,#17938,.T.); #23382=ORIENTED_EDGE('',*,*,#17939,.T.); #23383=ORIENTED_EDGE('',*,*,#17940,.T.); #23384=ORIENTED_EDGE('',*,*,#17941,.F.); #23385=ORIENTED_EDGE('',*,*,#17702,.F.); #23386=ORIENTED_EDGE('',*,*,#17815,.F.); #23387=ORIENTED_EDGE('',*,*,#17675,.F.); #23388=ORIENTED_EDGE('',*,*,#17942,.F.); #23389=ORIENTED_EDGE('',*,*,#17816,.T.); #23390=ORIENTED_EDGE('',*,*,#17704,.T.); #23391=ORIENTED_EDGE('',*,*,#17943,.T.); #23392=ORIENTED_EDGE('',*,*,#17944,.F.); #23393=ORIENTED_EDGE('',*,*,#17945,.F.); #23394=ORIENTED_EDGE('',*,*,#17946,.F.); #23395=ORIENTED_EDGE('',*,*,#17947,.F.); #23396=ORIENTED_EDGE('',*,*,#17673,.T.); #23397=ORIENTED_EDGE('',*,*,#17948,.T.); #23398=ORIENTED_EDGE('',*,*,#17949,.T.); #23399=ORIENTED_EDGE('',*,*,#17950,.T.); #23400=ORIENTED_EDGE('',*,*,#17951,.T.); #23401=ORIENTED_EDGE('',*,*,#17952,.T.); #23402=ORIENTED_EDGE('',*,*,#17953,.F.); #23403=ORIENTED_EDGE('',*,*,#17698,.F.); #23404=ORIENTED_EDGE('',*,*,#17818,.F.); #23405=ORIENTED_EDGE('',*,*,#17678,.F.); #23406=ORIENTED_EDGE('',*,*,#17954,.F.); #23407=ORIENTED_EDGE('',*,*,#17819,.T.); #23408=ORIENTED_EDGE('',*,*,#17700,.T.); #23409=ORIENTED_EDGE('',*,*,#17955,.T.); #23410=ORIENTED_EDGE('',*,*,#17956,.F.); #23411=ORIENTED_EDGE('',*,*,#17957,.F.); #23412=ORIENTED_EDGE('',*,*,#17958,.F.); #23413=ORIENTED_EDGE('',*,*,#17959,.F.); #23414=ORIENTED_EDGE('',*,*,#17676,.T.); #23415=ORIENTED_EDGE('',*,*,#17960,.T.); #23416=ORIENTED_EDGE('',*,*,#17961,.T.); #23417=ORIENTED_EDGE('',*,*,#17962,.T.); #23418=ORIENTED_EDGE('',*,*,#17963,.T.); #23419=ORIENTED_EDGE('',*,*,#17964,.T.); #23420=ORIENTED_EDGE('',*,*,#17965,.F.); #23421=ORIENTED_EDGE('',*,*,#17966,.F.); #23422=ORIENTED_EDGE('',*,*,#17694,.F.); #23423=ORIENTED_EDGE('',*,*,#17821,.F.); #23424=ORIENTED_EDGE('',*,*,#17967,.F.); #23425=ORIENTED_EDGE('',*,*,#17681,.F.); #23426=ORIENTED_EDGE('',*,*,#17968,.F.); #23427=ORIENTED_EDGE('',*,*,#17969,.T.); #23428=ORIENTED_EDGE('',*,*,#17822,.T.); #23429=ORIENTED_EDGE('',*,*,#17696,.T.); #23430=ORIENTED_EDGE('',*,*,#17970,.T.); #23431=ORIENTED_EDGE('',*,*,#17971,.T.); #23432=ORIENTED_EDGE('',*,*,#17972,.F.); #23433=ORIENTED_EDGE('',*,*,#17973,.F.); #23434=ORIENTED_EDGE('',*,*,#17974,.F.); #23435=ORIENTED_EDGE('',*,*,#17975,.F.); #23436=ORIENTED_EDGE('',*,*,#17679,.T.); #23437=ORIENTED_EDGE('',*,*,#17976,.T.); #23438=ORIENTED_EDGE('',*,*,#17977,.F.); #23439=ORIENTED_EDGE('',*,*,#17690,.F.); #23440=ORIENTED_EDGE('',*,*,#17824,.F.); #23441=ORIENTED_EDGE('',*,*,#17978,.T.); #23442=ORIENTED_EDGE('',*,*,#17979,.T.); #23443=ORIENTED_EDGE('',*,*,#17980,.T.); #23444=ORIENTED_EDGE('',*,*,#17981,.T.); #23445=ORIENTED_EDGE('',*,*,#17747,.F.); #23446=ORIENTED_EDGE('',*,*,#17982,.F.); #23447=ORIENTED_EDGE('',*,*,#17983,.F.); #23448=ORIENTED_EDGE('',*,*,#17984,.F.); #23449=ORIENTED_EDGE('',*,*,#17985,.F.); #23450=ORIENTED_EDGE('',*,*,#17986,.F.); #23451=ORIENTED_EDGE('',*,*,#17825,.T.); #23452=ORIENTED_EDGE('',*,*,#17692,.T.); #23453=ORIENTED_EDGE('',*,*,#17987,.T.); #23454=ORIENTED_EDGE('',*,*,#17745,.T.); #23455=ORIENTED_EDGE('',*,*,#17988,.T.); #23456=ORIENTED_EDGE('',*,*,#17989,.T.); #23457=ORIENTED_EDGE('',*,*,#17990,.T.); #23458=ORIENTED_EDGE('',*,*,#17991,.T.); #23459=ORIENTED_EDGE('',*,*,#17992,.T.); #23460=ORIENTED_EDGE('',*,*,#17993,.F.); #23461=ORIENTED_EDGE('',*,*,#17686,.F.); #23462=ORIENTED_EDGE('',*,*,#17827,.F.); #23463=ORIENTED_EDGE('',*,*,#17750,.F.); #23464=ORIENTED_EDGE('',*,*,#17994,.F.); #23465=ORIENTED_EDGE('',*,*,#17828,.T.); #23466=ORIENTED_EDGE('',*,*,#17688,.T.); #23467=ORIENTED_EDGE('',*,*,#17995,.T.); #23468=ORIENTED_EDGE('',*,*,#17996,.F.); #23469=ORIENTED_EDGE('',*,*,#17997,.F.); #23470=ORIENTED_EDGE('',*,*,#17998,.F.); #23471=ORIENTED_EDGE('',*,*,#17999,.F.); #23472=ORIENTED_EDGE('',*,*,#17748,.T.); #23473=ORIENTED_EDGE('',*,*,#18000,.T.); #23474=ORIENTED_EDGE('',*,*,#18001,.F.); #23475=ORIENTED_EDGE('',*,*,#17682,.F.); #23476=ORIENTED_EDGE('',*,*,#17839,.F.); #23477=ORIENTED_EDGE('',*,*,#18002,.T.); #23478=ORIENTED_EDGE('',*,*,#18003,.T.); #23479=ORIENTED_EDGE('',*,*,#18004,.T.); #23480=ORIENTED_EDGE('',*,*,#18005,.T.); #23481=ORIENTED_EDGE('',*,*,#17753,.F.); #23482=ORIENTED_EDGE('',*,*,#18006,.F.); #23483=ORIENTED_EDGE('',*,*,#18007,.F.); #23484=ORIENTED_EDGE('',*,*,#18008,.F.); #23485=ORIENTED_EDGE('',*,*,#18009,.F.); #23486=ORIENTED_EDGE('',*,*,#18010,.F.); #23487=ORIENTED_EDGE('',*,*,#17840,.T.); #23488=ORIENTED_EDGE('',*,*,#17684,.T.); #23489=ORIENTED_EDGE('',*,*,#18011,.T.); #23490=ORIENTED_EDGE('',*,*,#17751,.T.); #23491=ORIENTED_EDGE('',*,*,#18012,.T.); #23492=ORIENTED_EDGE('',*,*,#18013,.T.); #23493=ORIENTED_EDGE('',*,*,#18014,.T.); #23494=ORIENTED_EDGE('',*,*,#18015,.T.); #23495=ORIENTED_EDGE('',*,*,#18016,.T.); #23496=ORIENTED_EDGE('',*,*,#18017,.F.); #23497=ORIENTED_EDGE('',*,*,#17726,.F.); #23498=ORIENTED_EDGE('',*,*,#17797,.F.); #23499=ORIENTED_EDGE('',*,*,#17657,.F.); #23500=ORIENTED_EDGE('',*,*,#18018,.F.); #23501=ORIENTED_EDGE('',*,*,#17798,.T.); #23502=ORIENTED_EDGE('',*,*,#17728,.T.); #23503=ORIENTED_EDGE('',*,*,#18019,.T.); #23504=ORIENTED_EDGE('',*,*,#18020,.F.); #23505=ORIENTED_EDGE('',*,*,#18021,.F.); #23506=ORIENTED_EDGE('',*,*,#18022,.F.); #23507=ORIENTED_EDGE('',*,*,#18023,.F.); #23508=ORIENTED_EDGE('',*,*,#17655,.T.); #23509=ORIENTED_EDGE('',*,*,#18024,.T.); #23510=ORIENTED_EDGE('',*,*,#18025,.F.); #23511=ORIENTED_EDGE('',*,*,#17722,.F.); #23512=ORIENTED_EDGE('',*,*,#17800,.F.); #23513=ORIENTED_EDGE('',*,*,#18026,.T.); #23514=ORIENTED_EDGE('',*,*,#18027,.T.); #23515=ORIENTED_EDGE('',*,*,#18028,.T.); #23516=ORIENTED_EDGE('',*,*,#18029,.T.); #23517=ORIENTED_EDGE('',*,*,#17660,.F.); #23518=ORIENTED_EDGE('',*,*,#18030,.F.); #23519=ORIENTED_EDGE('',*,*,#18031,.F.); #23520=ORIENTED_EDGE('',*,*,#18032,.F.); #23521=ORIENTED_EDGE('',*,*,#18033,.F.); #23522=ORIENTED_EDGE('',*,*,#18034,.F.); #23523=ORIENTED_EDGE('',*,*,#17801,.T.); #23524=ORIENTED_EDGE('',*,*,#17724,.T.); #23525=ORIENTED_EDGE('',*,*,#18035,.T.); #23526=ORIENTED_EDGE('',*,*,#17658,.T.); #23527=ORIENTED_EDGE('',*,*,#18036,.T.); #23528=ORIENTED_EDGE('',*,*,#18037,.T.); #23529=ORIENTED_EDGE('',*,*,#18038,.T.); #23530=ORIENTED_EDGE('',*,*,#18039,.T.); #23531=ORIENTED_EDGE('',*,*,#18040,.T.); #23532=ORIENTED_EDGE('',*,*,#18041,.F.); #23533=ORIENTED_EDGE('',*,*,#17718,.F.); #23534=ORIENTED_EDGE('',*,*,#17803,.F.); #23535=ORIENTED_EDGE('',*,*,#17663,.F.); #23536=ORIENTED_EDGE('',*,*,#18042,.F.); #23537=ORIENTED_EDGE('',*,*,#17804,.T.); #23538=ORIENTED_EDGE('',*,*,#17720,.T.); #23539=ORIENTED_EDGE('',*,*,#18043,.T.); #23540=ORIENTED_EDGE('',*,*,#18044,.F.); #23541=ORIENTED_EDGE('',*,*,#18045,.F.); #23542=ORIENTED_EDGE('',*,*,#18046,.F.); #23543=ORIENTED_EDGE('',*,*,#18047,.F.); #23544=ORIENTED_EDGE('',*,*,#17661,.T.); #23545=ORIENTED_EDGE('',*,*,#18048,.T.); #23546=ORIENTED_EDGE('',*,*,#18049,.F.); #23547=ORIENTED_EDGE('',*,*,#17766,.F.); #23548=ORIENTED_EDGE('',*,*,#17785,.F.); #23549=ORIENTED_EDGE('',*,*,#18050,.T.); #23550=ORIENTED_EDGE('',*,*,#18051,.T.); #23551=ORIENTED_EDGE('',*,*,#18052,.T.); #23552=ORIENTED_EDGE('',*,*,#18053,.T.); #23553=ORIENTED_EDGE('',*,*,#17744,.F.); #23554=ORIENTED_EDGE('',*,*,#18054,.F.); #23555=ORIENTED_EDGE('',*,*,#18055,.F.); #23556=ORIENTED_EDGE('',*,*,#18056,.F.); #23557=ORIENTED_EDGE('',*,*,#18057,.F.); #23558=ORIENTED_EDGE('',*,*,#18058,.F.); #23559=ORIENTED_EDGE('',*,*,#17786,.T.); #23560=ORIENTED_EDGE('',*,*,#17768,.T.); #23561=ORIENTED_EDGE('',*,*,#18059,.T.); #23562=ORIENTED_EDGE('',*,*,#17742,.T.); #23563=ORIENTED_EDGE('',*,*,#18060,.T.); #23564=ORIENTED_EDGE('',*,*,#18061,.T.); #23565=ORIENTED_EDGE('',*,*,#18062,.T.); #23566=ORIENTED_EDGE('',*,*,#18063,.T.); #23567=ORIENTED_EDGE('',*,*,#18064,.T.); #23568=ORIENTED_EDGE('',*,*,#18065,.F.); #23569=ORIENTED_EDGE('',*,*,#17738,.F.); #23570=ORIENTED_EDGE('',*,*,#17788,.F.); #23571=ORIENTED_EDGE('',*,*,#17648,.F.); #23572=ORIENTED_EDGE('',*,*,#18066,.F.); #23573=ORIENTED_EDGE('',*,*,#17789,.T.); #23574=ORIENTED_EDGE('',*,*,#17740,.T.); #23575=ORIENTED_EDGE('',*,*,#18067,.T.); #23576=ORIENTED_EDGE('',*,*,#18068,.F.); #23577=ORIENTED_EDGE('',*,*,#18069,.F.); #23578=ORIENTED_EDGE('',*,*,#18070,.F.); #23579=ORIENTED_EDGE('',*,*,#18071,.F.); #23580=ORIENTED_EDGE('',*,*,#17646,.T.); #23581=ORIENTED_EDGE('',*,*,#18072,.T.); #23582=ORIENTED_EDGE('',*,*,#18073,.F.); #23583=ORIENTED_EDGE('',*,*,#18074,.F.); #23584=ORIENTED_EDGE('',*,*,#17734,.F.); #23585=ORIENTED_EDGE('',*,*,#17791,.F.); #23586=ORIENTED_EDGE('',*,*,#18075,.F.); #23587=ORIENTED_EDGE('',*,*,#18076,.T.); #23588=ORIENTED_EDGE('',*,*,#18077,.T.); #23589=ORIENTED_EDGE('',*,*,#18078,.T.); #23590=ORIENTED_EDGE('',*,*,#18079,.T.); #23591=ORIENTED_EDGE('',*,*,#17651,.F.); #23592=ORIENTED_EDGE('',*,*,#18080,.F.); #23593=ORIENTED_EDGE('',*,*,#18081,.F.); #23594=ORIENTED_EDGE('',*,*,#18082,.F.); #23595=ORIENTED_EDGE('',*,*,#18083,.F.); #23596=ORIENTED_EDGE('',*,*,#18084,.F.); #23597=ORIENTED_EDGE('',*,*,#18085,.T.); #23598=ORIENTED_EDGE('',*,*,#17792,.T.); #23599=ORIENTED_EDGE('',*,*,#17736,.T.); #23600=ORIENTED_EDGE('',*,*,#18086,.T.); #23601=ORIENTED_EDGE('',*,*,#18087,.T.); #23602=ORIENTED_EDGE('',*,*,#17649,.T.); #23603=ORIENTED_EDGE('',*,*,#18088,.T.); #23604=ORIENTED_EDGE('',*,*,#18089,.T.); #23605=ORIENTED_EDGE('',*,*,#18090,.T.); #23606=ORIENTED_EDGE('',*,*,#18091,.T.); #23607=ORIENTED_EDGE('',*,*,#18092,.T.); #23608=ORIENTED_EDGE('',*,*,#18093,.F.); #23609=ORIENTED_EDGE('',*,*,#17730,.F.); #23610=ORIENTED_EDGE('',*,*,#17794,.F.); #23611=ORIENTED_EDGE('',*,*,#17654,.F.); #23612=ORIENTED_EDGE('',*,*,#18094,.F.); #23613=ORIENTED_EDGE('',*,*,#17795,.T.); #23614=ORIENTED_EDGE('',*,*,#17732,.T.); #23615=ORIENTED_EDGE('',*,*,#18095,.T.); #23616=ORIENTED_EDGE('',*,*,#18096,.F.); #23617=ORIENTED_EDGE('',*,*,#18097,.F.); #23618=ORIENTED_EDGE('',*,*,#18098,.F.); #23619=ORIENTED_EDGE('',*,*,#18099,.F.); #23620=ORIENTED_EDGE('',*,*,#17652,.T.); #23621=ORIENTED_EDGE('',*,*,#18100,.T.); #23622=ORIENTED_EDGE('',*,*,#17770,.F.); #23623=ORIENTED_EDGE('',*,*,#17629,.T.); #23624=ORIENTED_EDGE('',*,*,#18101,.F.); #23625=ORIENTED_EDGE('',*,*,#18102,.T.); #23626=ORIENTED_EDGE('',*,*,#18103,.T.); #23627=ORIENTED_EDGE('',*,*,#17625,.T.); #23628=ORIENTED_EDGE('',*,*,#18104,.F.); #23629=ORIENTED_EDGE('',*,*,#18105,.F.); #23630=ORIENTED_EDGE('',*,*,#18106,.F.); #23631=ORIENTED_EDGE('',*,*,#18107,.T.); #23632=ORIENTED_EDGE('',*,*,#17627,.F.); #23633=ORIENTED_EDGE('',*,*,#17772,.T.); #23634=ORIENTED_EDGE('',*,*,#17623,.F.); #23635=ORIENTED_EDGE('',*,*,#18108,.F.); #23636=ORIENTED_EDGE('',*,*,#18109,.T.); #23637=ORIENTED_EDGE('',*,*,#18110,.T.); #23638=ORIENTED_EDGE('',*,*,#18111,.F.); #23639=ORIENTED_EDGE('',*,*,#18112,.T.); #23640=ORIENTED_EDGE('',*,*,#17619,.T.); #23641=ORIENTED_EDGE('',*,*,#18113,.F.); #23642=ORIENTED_EDGE('',*,*,#17617,.F.); #23643=ORIENTED_EDGE('',*,*,#18114,.T.); #23644=ORIENTED_EDGE('',*,*,#17622,.T.); #23645=ORIENTED_EDGE('',*,*,#18115,.F.); #23646=ORIENTED_EDGE('',*,*,#17620,.F.); #23647=ORIENTED_EDGE('',*,*,#17829,.T.); #23648=ORIENTED_EDGE('',*,*,#18116,.F.); #23649=ORIENTED_EDGE('',*,*,#17780,.F.); #23650=ORIENTED_EDGE('',*,*,#18117,.T.); #23651=ORIENTED_EDGE('',*,*,#18118,.T.); #23652=ORIENTED_EDGE('',*,*,#17832,.T.); #23653=ORIENTED_EDGE('',*,*,#18119,.F.); #23654=ORIENTED_EDGE('',*,*,#18120,.F.); #23655=ORIENTED_EDGE('',*,*,#18121,.T.); #23656=ORIENTED_EDGE('',*,*,#17859,.T.); #23657=ORIENTED_EDGE('',*,*,#17835,.T.); #23658=ORIENTED_EDGE('',*,*,#17869,.F.); #23659=ORIENTED_EDGE('',*,*,#18122,.F.); #23660=ORIENTED_EDGE('',*,*,#18123,.F.); #23661=ORIENTED_EDGE('',*,*,#17857,.T.); #23662=ORIENTED_EDGE('',*,*,#18124,.T.); #23663=ORIENTED_EDGE('',*,*,#17841,.T.); #23664=ORIENTED_EDGE('',*,*,#18125,.F.); #23665=ORIENTED_EDGE('',*,*,#17871,.F.); #23666=ORIENTED_EDGE('',*,*,#18126,.F.); #23667=ORIENTED_EDGE('',*,*,#18127,.T.); #23668=ORIENTED_EDGE('',*,*,#17838,.T.); #23669=ORIENTED_EDGE('',*,*,#18128,.F.); #23670=ORIENTED_EDGE('',*,*,#18129,.F.); #23671=ORIENTED_EDGE('',*,*,#18130,.T.); #23672=ORIENTED_EDGE('',*,*,#17826,.T.); #23673=ORIENTED_EDGE('',*,*,#18131,.F.); #23674=ORIENTED_EDGE('',*,*,#18132,.F.); #23675=ORIENTED_EDGE('',*,*,#18133,.T.); #23676=ORIENTED_EDGE('',*,*,#17823,.T.); #23677=ORIENTED_EDGE('',*,*,#18134,.F.); #23678=ORIENTED_EDGE('',*,*,#18135,.F.); #23679=ORIENTED_EDGE('',*,*,#18136,.T.); #23680=ORIENTED_EDGE('',*,*,#17967,.T.); #23681=ORIENTED_EDGE('',*,*,#17820,.T.); #23682=ORIENTED_EDGE('',*,*,#17969,.F.); #23683=ORIENTED_EDGE('',*,*,#18137,.F.); #23684=ORIENTED_EDGE('',*,*,#18138,.F.); #23685=ORIENTED_EDGE('',*,*,#17965,.T.); #23686=ORIENTED_EDGE('',*,*,#18139,.T.); #23687=ORIENTED_EDGE('',*,*,#17817,.T.); #23688=ORIENTED_EDGE('',*,*,#18140,.F.); #23689=ORIENTED_EDGE('',*,*,#17971,.F.); #23690=ORIENTED_EDGE('',*,*,#18141,.F.); #23691=ORIENTED_EDGE('',*,*,#18142,.T.); #23692=ORIENTED_EDGE('',*,*,#17814,.T.); #23693=ORIENTED_EDGE('',*,*,#18143,.F.); #23694=ORIENTED_EDGE('',*,*,#18144,.F.); #23695=ORIENTED_EDGE('',*,*,#18145,.T.); #23696=ORIENTED_EDGE('',*,*,#17811,.T.); #23697=ORIENTED_EDGE('',*,*,#18146,.F.); #23698=ORIENTED_EDGE('',*,*,#18147,.F.); #23699=ORIENTED_EDGE('',*,*,#18148,.T.); #23700=ORIENTED_EDGE('',*,*,#17808,.T.); #23701=ORIENTED_EDGE('',*,*,#18149,.F.); #23702=ORIENTED_EDGE('',*,*,#18150,.F.); #23703=ORIENTED_EDGE('',*,*,#18151,.T.); #23704=ORIENTED_EDGE('',*,*,#17903,.T.); #23705=ORIENTED_EDGE('',*,*,#17805,.T.); #23706=ORIENTED_EDGE('',*,*,#17905,.F.); #23707=ORIENTED_EDGE('',*,*,#18152,.F.); #23708=ORIENTED_EDGE('',*,*,#18153,.F.); #23709=ORIENTED_EDGE('',*,*,#17901,.T.); #23710=ORIENTED_EDGE('',*,*,#18154,.T.); #23711=ORIENTED_EDGE('',*,*,#17802,.T.); #23712=ORIENTED_EDGE('',*,*,#18155,.F.); #23713=ORIENTED_EDGE('',*,*,#17907,.F.); #23714=ORIENTED_EDGE('',*,*,#18156,.F.); #23715=ORIENTED_EDGE('',*,*,#18157,.T.); #23716=ORIENTED_EDGE('',*,*,#17799,.T.); #23717=ORIENTED_EDGE('',*,*,#18158,.F.); #23718=ORIENTED_EDGE('',*,*,#18159,.F.); #23719=ORIENTED_EDGE('',*,*,#18160,.T.); #23720=ORIENTED_EDGE('',*,*,#17796,.T.); #23721=ORIENTED_EDGE('',*,*,#18161,.F.); #23722=ORIENTED_EDGE('',*,*,#18162,.F.); #23723=ORIENTED_EDGE('',*,*,#18163,.T.); #23724=ORIENTED_EDGE('',*,*,#17793,.T.); #23725=ORIENTED_EDGE('',*,*,#18164,.F.); #23726=ORIENTED_EDGE('',*,*,#18165,.F.); #23727=ORIENTED_EDGE('',*,*,#18166,.T.); #23728=ORIENTED_EDGE('',*,*,#18075,.T.); #23729=ORIENTED_EDGE('',*,*,#17790,.T.); #23730=ORIENTED_EDGE('',*,*,#18085,.F.); #23731=ORIENTED_EDGE('',*,*,#18167,.F.); #23732=ORIENTED_EDGE('',*,*,#18168,.F.); #23733=ORIENTED_EDGE('',*,*,#18073,.T.); #23734=ORIENTED_EDGE('',*,*,#18169,.T.); #23735=ORIENTED_EDGE('',*,*,#17787,.T.); #23736=ORIENTED_EDGE('',*,*,#18170,.F.); #23737=ORIENTED_EDGE('',*,*,#18087,.F.); #23738=ORIENTED_EDGE('',*,*,#18171,.F.); #23739=ORIENTED_EDGE('',*,*,#18172,.T.); #23740=ORIENTED_EDGE('',*,*,#17784,.T.); #23741=ORIENTED_EDGE('',*,*,#18173,.F.); #23742=ORIENTED_EDGE('',*,*,#18174,.F.); #23743=ORIENTED_EDGE('',*,*,#17781,.T.); #23744=ORIENTED_EDGE('',*,*,#18059,.F.); #23745=ORIENTED_EDGE('',*,*,#17767,.T.); #23746=ORIENTED_EDGE('',*,*,#18049,.T.); #23747=ORIENTED_EDGE('',*,*,#18174,.T.); #23748=ORIENTED_EDGE('',*,*,#18067,.F.); #23749=ORIENTED_EDGE('',*,*,#17739,.T.); #23750=ORIENTED_EDGE('',*,*,#18065,.T.); #23751=ORIENTED_EDGE('',*,*,#18171,.T.); #23752=ORIENTED_EDGE('',*,*,#18086,.F.); #23753=ORIENTED_EDGE('',*,*,#17735,.T.); #23754=ORIENTED_EDGE('',*,*,#18074,.T.); #23755=ORIENTED_EDGE('',*,*,#18168,.T.); #23756=ORIENTED_EDGE('',*,*,#18095,.F.); #23757=ORIENTED_EDGE('',*,*,#17731,.T.); #23758=ORIENTED_EDGE('',*,*,#18093,.T.); #23759=ORIENTED_EDGE('',*,*,#18165,.T.); #23760=ORIENTED_EDGE('',*,*,#18019,.F.); #23761=ORIENTED_EDGE('',*,*,#17727,.T.); #23762=ORIENTED_EDGE('',*,*,#18017,.T.); #23763=ORIENTED_EDGE('',*,*,#18162,.T.); #23764=ORIENTED_EDGE('',*,*,#18035,.F.); #23765=ORIENTED_EDGE('',*,*,#17723,.T.); #23766=ORIENTED_EDGE('',*,*,#18025,.T.); #23767=ORIENTED_EDGE('',*,*,#18159,.T.); #23768=ORIENTED_EDGE('',*,*,#18043,.F.); #23769=ORIENTED_EDGE('',*,*,#17719,.T.); #23770=ORIENTED_EDGE('',*,*,#18041,.T.); #23771=ORIENTED_EDGE('',*,*,#18156,.T.); #23772=ORIENTED_EDGE('',*,*,#17906,.F.); #23773=ORIENTED_EDGE('',*,*,#17715,.T.); #23774=ORIENTED_EDGE('',*,*,#17902,.T.); #23775=ORIENTED_EDGE('',*,*,#18153,.T.); #23776=ORIENTED_EDGE('',*,*,#17923,.F.); #23777=ORIENTED_EDGE('',*,*,#17711,.T.); #23778=ORIENTED_EDGE('',*,*,#17913,.T.); #23779=ORIENTED_EDGE('',*,*,#18150,.T.); #23780=ORIENTED_EDGE('',*,*,#17931,.F.); #23781=ORIENTED_EDGE('',*,*,#17707,.T.); #23782=ORIENTED_EDGE('',*,*,#17929,.T.); #23783=ORIENTED_EDGE('',*,*,#18147,.T.); #23784=ORIENTED_EDGE('',*,*,#17943,.F.); #23785=ORIENTED_EDGE('',*,*,#17703,.T.); #23786=ORIENTED_EDGE('',*,*,#17941,.T.); #23787=ORIENTED_EDGE('',*,*,#18144,.T.); #23788=ORIENTED_EDGE('',*,*,#17955,.F.); #23789=ORIENTED_EDGE('',*,*,#17699,.T.); #23790=ORIENTED_EDGE('',*,*,#17953,.T.); #23791=ORIENTED_EDGE('',*,*,#18141,.T.); #23792=ORIENTED_EDGE('',*,*,#17970,.F.); #23793=ORIENTED_EDGE('',*,*,#17695,.T.); #23794=ORIENTED_EDGE('',*,*,#17966,.T.); #23795=ORIENTED_EDGE('',*,*,#18138,.T.); #23796=ORIENTED_EDGE('',*,*,#17987,.F.); #23797=ORIENTED_EDGE('',*,*,#17691,.T.); #23798=ORIENTED_EDGE('',*,*,#17977,.T.); #23799=ORIENTED_EDGE('',*,*,#18135,.T.); #23800=ORIENTED_EDGE('',*,*,#17995,.F.); #23801=ORIENTED_EDGE('',*,*,#17687,.T.); #23802=ORIENTED_EDGE('',*,*,#17993,.T.); #23803=ORIENTED_EDGE('',*,*,#18132,.T.); #23804=ORIENTED_EDGE('',*,*,#18011,.F.); #23805=ORIENTED_EDGE('',*,*,#17683,.T.); #23806=ORIENTED_EDGE('',*,*,#18001,.T.); #23807=ORIENTED_EDGE('',*,*,#18129,.T.); #23808=ORIENTED_EDGE('',*,*,#17851,.F.); #23809=ORIENTED_EDGE('',*,*,#17631,.T.); #23810=ORIENTED_EDGE('',*,*,#17849,.T.); #23811=ORIENTED_EDGE('',*,*,#18126,.T.); #23812=ORIENTED_EDGE('',*,*,#17870,.F.); #23813=ORIENTED_EDGE('',*,*,#17635,.T.); #23814=ORIENTED_EDGE('',*,*,#17858,.T.); #23815=ORIENTED_EDGE('',*,*,#18123,.T.); #23816=ORIENTED_EDGE('',*,*,#17883,.F.); #23817=ORIENTED_EDGE('',*,*,#17639,.T.); #23818=ORIENTED_EDGE('',*,*,#17873,.T.); #23819=ORIENTED_EDGE('',*,*,#18120,.T.); #23820=ORIENTED_EDGE('',*,*,#17891,.F.); #23821=ORIENTED_EDGE('',*,*,#17643,.T.); #23822=ORIENTED_EDGE('',*,*,#17889,.T.); #23823=ORIENTED_EDGE('',*,*,#18175,.F.); #23824=ORIENTED_EDGE('',*,*,#18176,.T.); #23825=ORIENTED_EDGE('',*,*,#18177,.T.); #23826=ORIENTED_EDGE('',*,*,#18176,.F.); #23827=ORIENTED_EDGE('',*,*,#18178,.F.); #23828=ORIENTED_EDGE('',*,*,#18179,.T.); #23829=ORIENTED_EDGE('',*,*,#18180,.T.); #23830=ORIENTED_EDGE('',*,*,#18179,.F.); #23831=ORIENTED_EDGE('',*,*,#18181,.F.); #23832=ORIENTED_EDGE('',*,*,#18182,.T.); #23833=ORIENTED_EDGE('',*,*,#18183,.T.); #23834=ORIENTED_EDGE('',*,*,#18182,.F.); #23835=ORIENTED_EDGE('',*,*,#18184,.F.); #23836=ORIENTED_EDGE('',*,*,#18185,.T.); #23837=ORIENTED_EDGE('',*,*,#18186,.T.); #23838=ORIENTED_EDGE('',*,*,#18185,.F.); #23839=ORIENTED_EDGE('',*,*,#18187,.F.); #23840=ORIENTED_EDGE('',*,*,#18188,.T.); #23841=ORIENTED_EDGE('',*,*,#18108,.T.); #23842=ORIENTED_EDGE('',*,*,#18189,.F.); #23843=ORIENTED_EDGE('',*,*,#18190,.F.); #23844=ORIENTED_EDGE('',*,*,#18191,.F.); #23845=ORIENTED_EDGE('',*,*,#18192,.F.); #23846=ORIENTED_EDGE('',*,*,#18193,.T.); #23847=ORIENTED_EDGE('',*,*,#18194,.T.); #23848=ORIENTED_EDGE('',*,*,#18195,.T.); #23849=ORIENTED_EDGE('',*,*,#18196,.F.); #23850=ORIENTED_EDGE('',*,*,#18195,.F.); #23851=ORIENTED_EDGE('',*,*,#18197,.T.); #23852=ORIENTED_EDGE('',*,*,#18198,.T.); #23853=ORIENTED_EDGE('',*,*,#18199,.F.); #23854=ORIENTED_EDGE('',*,*,#18198,.F.); #23855=ORIENTED_EDGE('',*,*,#18200,.T.); #23856=ORIENTED_EDGE('',*,*,#18201,.T.); #23857=ORIENTED_EDGE('',*,*,#18202,.F.); #23858=ORIENTED_EDGE('',*,*,#18201,.F.); #23859=ORIENTED_EDGE('',*,*,#18203,.T.); #23860=ORIENTED_EDGE('',*,*,#18204,.T.); #23861=ORIENTED_EDGE('',*,*,#18205,.F.); #23862=ORIENTED_EDGE('',*,*,#18204,.F.); #23863=ORIENTED_EDGE('',*,*,#18206,.T.); #23864=ORIENTED_EDGE('',*,*,#18207,.T.); #23865=ORIENTED_EDGE('',*,*,#18208,.F.); #23866=ORIENTED_EDGE('',*,*,#18207,.F.); #23867=ORIENTED_EDGE('',*,*,#18209,.T.); #23868=ORIENTED_EDGE('',*,*,#18210,.T.); #23869=ORIENTED_EDGE('',*,*,#18211,.F.); #23870=ORIENTED_EDGE('',*,*,#18210,.F.); #23871=ORIENTED_EDGE('',*,*,#18212,.T.); #23872=ORIENTED_EDGE('',*,*,#18213,.T.); #23873=ORIENTED_EDGE('',*,*,#18214,.F.); #23874=ORIENTED_EDGE('',*,*,#18213,.F.); #23875=ORIENTED_EDGE('',*,*,#18215,.T.); #23876=ORIENTED_EDGE('',*,*,#18216,.T.); #23877=ORIENTED_EDGE('',*,*,#18217,.F.); #23878=ORIENTED_EDGE('',*,*,#18216,.F.); #23879=ORIENTED_EDGE('',*,*,#18218,.T.); #23880=ORIENTED_EDGE('',*,*,#18219,.T.); #23881=ORIENTED_EDGE('',*,*,#18220,.F.); #23882=ORIENTED_EDGE('',*,*,#18219,.F.); #23883=ORIENTED_EDGE('',*,*,#18221,.T.); #23884=ORIENTED_EDGE('',*,*,#18222,.T.); #23885=ORIENTED_EDGE('',*,*,#18223,.F.); #23886=ORIENTED_EDGE('',*,*,#18222,.F.); #23887=ORIENTED_EDGE('',*,*,#18224,.T.); #23888=ORIENTED_EDGE('',*,*,#18225,.T.); #23889=ORIENTED_EDGE('',*,*,#18226,.F.); #23890=ORIENTED_EDGE('',*,*,#18225,.F.); #23891=ORIENTED_EDGE('',*,*,#18227,.T.); #23892=ORIENTED_EDGE('',*,*,#18228,.T.); #23893=ORIENTED_EDGE('',*,*,#18229,.F.); #23894=ORIENTED_EDGE('',*,*,#18228,.F.); #23895=ORIENTED_EDGE('',*,*,#18230,.T.); #23896=ORIENTED_EDGE('',*,*,#18231,.T.); #23897=ORIENTED_EDGE('',*,*,#18232,.F.); #23898=ORIENTED_EDGE('',*,*,#18231,.F.); #23899=ORIENTED_EDGE('',*,*,#18233,.T.); #23900=ORIENTED_EDGE('',*,*,#18234,.T.); #23901=ORIENTED_EDGE('',*,*,#18235,.F.); #23902=ORIENTED_EDGE('',*,*,#18234,.F.); #23903=ORIENTED_EDGE('',*,*,#18236,.T.); #23904=ORIENTED_EDGE('',*,*,#18237,.T.); #23905=ORIENTED_EDGE('',*,*,#18238,.F.); #23906=ORIENTED_EDGE('',*,*,#18237,.F.); #23907=ORIENTED_EDGE('',*,*,#18239,.T.); #23908=ORIENTED_EDGE('',*,*,#18240,.T.); #23909=ORIENTED_EDGE('',*,*,#18241,.F.); #23910=ORIENTED_EDGE('',*,*,#18240,.F.); #23911=ORIENTED_EDGE('',*,*,#18242,.T.); #23912=ORIENTED_EDGE('',*,*,#18243,.T.); #23913=ORIENTED_EDGE('',*,*,#18244,.F.); #23914=ORIENTED_EDGE('',*,*,#18243,.F.); #23915=ORIENTED_EDGE('',*,*,#18245,.T.); #23916=ORIENTED_EDGE('',*,*,#18246,.T.); #23917=ORIENTED_EDGE('',*,*,#18247,.F.); #23918=ORIENTED_EDGE('',*,*,#18246,.F.); #23919=ORIENTED_EDGE('',*,*,#18248,.T.); #23920=ORIENTED_EDGE('',*,*,#18249,.T.); #23921=ORIENTED_EDGE('',*,*,#18250,.F.); #23922=ORIENTED_EDGE('',*,*,#18249,.F.); #23923=ORIENTED_EDGE('',*,*,#18251,.T.); #23924=ORIENTED_EDGE('',*,*,#18252,.T.); #23925=ORIENTED_EDGE('',*,*,#18253,.F.); #23926=ORIENTED_EDGE('',*,*,#18252,.F.); #23927=ORIENTED_EDGE('',*,*,#18254,.F.); #23928=ORIENTED_EDGE('',*,*,#18255,.F.); #23929=ORIENTED_EDGE('',*,*,#18256,.T.); #23930=ORIENTED_EDGE('',*,*,#18257,.T.); #23931=ORIENTED_EDGE('',*,*,#18258,.T.); #23932=ORIENTED_EDGE('',*,*,#18259,.T.); #23933=ORIENTED_EDGE('',*,*,#17776,.F.); #23934=ORIENTED_EDGE('',*,*,#18260,.F.); #23935=ORIENTED_EDGE('',*,*,#18261,.T.); #23936=ORIENTED_EDGE('',*,*,#18258,.F.); #23937=ORIENTED_EDGE('',*,*,#18262,.F.); #23938=ORIENTED_EDGE('',*,*,#18263,.T.); #23939=ORIENTED_EDGE('',*,*,#18264,.T.); #23940=ORIENTED_EDGE('',*,*,#18265,.F.); #23941=ORIENTED_EDGE('',*,*,#18266,.F.); #23942=ORIENTED_EDGE('',*,*,#18254,.T.); #23943=ORIENTED_EDGE('',*,*,#18263,.F.); #23944=ORIENTED_EDGE('',*,*,#18267,.F.); #23945=ORIENTED_EDGE('',*,*,#18268,.T.); #23946=ORIENTED_EDGE('',*,*,#18269,.T.); #23947=ORIENTED_EDGE('',*,*,#18270,.F.); #23948=ORIENTED_EDGE('',*,*,#18271,.F.); #23949=ORIENTED_EDGE('',*,*,#18272,.T.); #23950=ORIENTED_EDGE('',*,*,#18273,.T.); #23951=ORIENTED_EDGE('',*,*,#18274,.F.); #23952=ORIENTED_EDGE('',*,*,#18275,.F.); #23953=ORIENTED_EDGE('',*,*,#18276,.T.); #23954=ORIENTED_EDGE('',*,*,#18277,.T.); #23955=ORIENTED_EDGE('',*,*,#18278,.F.); #23956=ORIENTED_EDGE('',*,*,#18279,.F.); #23957=ORIENTED_EDGE('',*,*,#18280,.T.); #23958=ORIENTED_EDGE('',*,*,#18281,.T.); #23959=ORIENTED_EDGE('',*,*,#18282,.F.); #23960=ORIENTED_EDGE('',*,*,#18283,.F.); #23961=ORIENTED_EDGE('',*,*,#18284,.T.); #23962=ORIENTED_EDGE('',*,*,#18285,.T.); #23963=ORIENTED_EDGE('',*,*,#18286,.F.); #23964=ORIENTED_EDGE('',*,*,#18287,.F.); #23965=ORIENTED_EDGE('',*,*,#18288,.T.); #23966=ORIENTED_EDGE('',*,*,#18289,.T.); #23967=ORIENTED_EDGE('',*,*,#18290,.F.); #23968=ORIENTED_EDGE('',*,*,#18291,.F.); #23969=ORIENTED_EDGE('',*,*,#18292,.T.); #23970=ORIENTED_EDGE('',*,*,#18293,.T.); #23971=ORIENTED_EDGE('',*,*,#18294,.F.); #23972=ORIENTED_EDGE('',*,*,#18295,.F.); #23973=ORIENTED_EDGE('',*,*,#18296,.T.); #23974=ORIENTED_EDGE('',*,*,#18297,.T.); #23975=ORIENTED_EDGE('',*,*,#18298,.F.); #23976=ORIENTED_EDGE('',*,*,#18299,.F.); #23977=ORIENTED_EDGE('',*,*,#18300,.T.); #23978=ORIENTED_EDGE('',*,*,#18301,.T.); #23979=ORIENTED_EDGE('',*,*,#18302,.F.); #23980=ORIENTED_EDGE('',*,*,#18303,.F.); #23981=ORIENTED_EDGE('',*,*,#18304,.T.); #23982=ORIENTED_EDGE('',*,*,#18305,.T.); #23983=ORIENTED_EDGE('',*,*,#18306,.F.); #23984=ORIENTED_EDGE('',*,*,#18307,.F.); #23985=ORIENTED_EDGE('',*,*,#18308,.T.); #23986=ORIENTED_EDGE('',*,*,#18309,.T.); #23987=ORIENTED_EDGE('',*,*,#18310,.F.); #23988=ORIENTED_EDGE('',*,*,#18311,.F.); #23989=ORIENTED_EDGE('',*,*,#18312,.T.); #23990=ORIENTED_EDGE('',*,*,#18313,.T.); #23991=ORIENTED_EDGE('',*,*,#18314,.F.); #23992=ORIENTED_EDGE('',*,*,#18315,.F.); #23993=ORIENTED_EDGE('',*,*,#18316,.T.); #23994=ORIENTED_EDGE('',*,*,#18317,.T.); #23995=ORIENTED_EDGE('',*,*,#18318,.F.); #23996=ORIENTED_EDGE('',*,*,#18319,.F.); #23997=ORIENTED_EDGE('',*,*,#18320,.T.); #23998=ORIENTED_EDGE('',*,*,#18321,.T.); #23999=ORIENTED_EDGE('',*,*,#18322,.F.); #24000=ORIENTED_EDGE('',*,*,#18323,.F.); #24001=ORIENTED_EDGE('',*,*,#18324,.T.); #24002=ORIENTED_EDGE('',*,*,#18325,.T.); #24003=ORIENTED_EDGE('',*,*,#18326,.F.); #24004=ORIENTED_EDGE('',*,*,#18327,.F.); #24005=ORIENTED_EDGE('',*,*,#18328,.T.); #24006=ORIENTED_EDGE('',*,*,#18329,.T.); #24007=ORIENTED_EDGE('',*,*,#18330,.F.); #24008=ORIENTED_EDGE('',*,*,#18331,.F.); #24009=ORIENTED_EDGE('',*,*,#18332,.T.); #24010=ORIENTED_EDGE('',*,*,#18333,.T.); #24011=ORIENTED_EDGE('',*,*,#18334,.F.); #24012=ORIENTED_EDGE('',*,*,#18335,.F.); #24013=ORIENTED_EDGE('',*,*,#18336,.T.); #24014=ORIENTED_EDGE('',*,*,#18337,.T.); #24015=ORIENTED_EDGE('',*,*,#18338,.F.); #24016=ORIENTED_EDGE('',*,*,#18339,.F.); #24017=ORIENTED_EDGE('',*,*,#18340,.T.); #24018=ORIENTED_EDGE('',*,*,#18341,.T.); #24019=ORIENTED_EDGE('',*,*,#18342,.F.); #24020=ORIENTED_EDGE('',*,*,#18343,.F.); #24021=ORIENTED_EDGE('',*,*,#18344,.T.); #24022=ORIENTED_EDGE('',*,*,#18345,.T.); #24023=ORIENTED_EDGE('',*,*,#18346,.F.); #24024=ORIENTED_EDGE('',*,*,#18347,.F.); #24025=ORIENTED_EDGE('',*,*,#18348,.T.); #24026=ORIENTED_EDGE('',*,*,#18349,.T.); #24027=ORIENTED_EDGE('',*,*,#18350,.F.); #24028=ORIENTED_EDGE('',*,*,#18347,.T.); #24029=ORIENTED_EDGE('',*,*,#18351,.T.); #24030=ORIENTED_EDGE('',*,*,#18352,.T.); #24031=ORIENTED_EDGE('',*,*,#18353,.F.); #24032=ORIENTED_EDGE('',*,*,#18354,.F.); #24033=ORIENTED_EDGE('',*,*,#18244,.T.); #24034=ORIENTED_EDGE('',*,*,#18355,.F.); #24035=ORIENTED_EDGE('',*,*,#18349,.F.); #24036=ORIENTED_EDGE('',*,*,#18356,.T.); #24037=ORIENTED_EDGE('',*,*,#18357,.T.); #24038=ORIENTED_EDGE('',*,*,#18358,.T.); #24039=ORIENTED_EDGE('',*,*,#18359,.F.); #24040=ORIENTED_EDGE('',*,*,#18242,.F.); #24041=ORIENTED_EDGE('',*,*,#18360,.F.); #24042=ORIENTED_EDGE('',*,*,#18361,.F.); #24043=ORIENTED_EDGE('',*,*,#18362,.F.); #24044=ORIENTED_EDGE('',*,*,#18363,.F.); #24045=ORIENTED_EDGE('',*,*,#18364,.F.); #24046=ORIENTED_EDGE('',*,*,#18365,.T.); #24047=ORIENTED_EDGE('',*,*,#18339,.T.); #24048=ORIENTED_EDGE('',*,*,#18366,.T.); #24049=ORIENTED_EDGE('',*,*,#18367,.T.); #24050=ORIENTED_EDGE('',*,*,#18368,.T.); #24051=ORIENTED_EDGE('',*,*,#18247,.T.); #24052=ORIENTED_EDGE('',*,*,#18369,.T.); #24053=ORIENTED_EDGE('',*,*,#18370,.T.); #24054=ORIENTED_EDGE('',*,*,#18371,.T.); #24055=ORIENTED_EDGE('',*,*,#18372,.F.); #24056=ORIENTED_EDGE('',*,*,#18373,.F.); #24057=ORIENTED_EDGE('',*,*,#18374,.F.); #24058=ORIENTED_EDGE('',*,*,#18341,.F.); #24059=ORIENTED_EDGE('',*,*,#18375,.F.); #24060=ORIENTED_EDGE('',*,*,#18376,.T.); #24061=ORIENTED_EDGE('',*,*,#18377,.T.); #24062=ORIENTED_EDGE('',*,*,#18245,.F.); #24063=ORIENTED_EDGE('',*,*,#18378,.F.); #24064=ORIENTED_EDGE('',*,*,#18379,.F.); #24065=ORIENTED_EDGE('',*,*,#18380,.F.); #24066=ORIENTED_EDGE('',*,*,#18335,.T.); #24067=ORIENTED_EDGE('',*,*,#18381,.T.); #24068=ORIENTED_EDGE('',*,*,#18382,.T.); #24069=ORIENTED_EDGE('',*,*,#18250,.T.); #24070=ORIENTED_EDGE('',*,*,#18383,.T.); #24071=ORIENTED_EDGE('',*,*,#18384,.T.); #24072=ORIENTED_EDGE('',*,*,#18385,.F.); #24073=ORIENTED_EDGE('',*,*,#18386,.F.); #24074=ORIENTED_EDGE('',*,*,#18337,.F.); #24075=ORIENTED_EDGE('',*,*,#18387,.T.); #24076=ORIENTED_EDGE('',*,*,#18248,.F.); #24077=ORIENTED_EDGE('',*,*,#18388,.F.); #24078=ORIENTED_EDGE('',*,*,#18331,.T.); #24079=ORIENTED_EDGE('',*,*,#18389,.T.); #24080=ORIENTED_EDGE('',*,*,#18390,.T.); #24081=ORIENTED_EDGE('',*,*,#18391,.F.); #24082=ORIENTED_EDGE('',*,*,#18392,.F.); #24083=ORIENTED_EDGE('',*,*,#18253,.T.); #24084=ORIENTED_EDGE('',*,*,#18393,.F.); #24085=ORIENTED_EDGE('',*,*,#18333,.F.); #24086=ORIENTED_EDGE('',*,*,#18394,.T.); #24087=ORIENTED_EDGE('',*,*,#18395,.T.); #24088=ORIENTED_EDGE('',*,*,#18396,.T.); #24089=ORIENTED_EDGE('',*,*,#18397,.F.); #24090=ORIENTED_EDGE('',*,*,#18251,.F.); #24091=ORIENTED_EDGE('',*,*,#18398,.F.); #24092=ORIENTED_EDGE('',*,*,#18399,.T.); #24093=ORIENTED_EDGE('',*,*,#18299,.T.); #24094=ORIENTED_EDGE('',*,*,#18400,.T.); #24095=ORIENTED_EDGE('',*,*,#18401,.T.); #24096=ORIENTED_EDGE('',*,*,#18402,.T.); #24097=ORIENTED_EDGE('',*,*,#18403,.F.); #24098=ORIENTED_EDGE('',*,*,#18404,.F.); #24099=ORIENTED_EDGE('',*,*,#18405,.F.); #24100=ORIENTED_EDGE('',*,*,#18406,.F.); #24101=ORIENTED_EDGE('',*,*,#18214,.T.); #24102=ORIENTED_EDGE('',*,*,#18301,.F.); #24103=ORIENTED_EDGE('',*,*,#18407,.F.); #24104=ORIENTED_EDGE('',*,*,#18408,.T.); #24105=ORIENTED_EDGE('',*,*,#18409,.T.); #24106=ORIENTED_EDGE('',*,*,#18410,.T.); #24107=ORIENTED_EDGE('',*,*,#18411,.T.); #24108=ORIENTED_EDGE('',*,*,#18412,.T.); #24109=ORIENTED_EDGE('',*,*,#18413,.F.); #24110=ORIENTED_EDGE('',*,*,#18414,.F.); #24111=ORIENTED_EDGE('',*,*,#18415,.F.); #24112=ORIENTED_EDGE('',*,*,#18212,.F.); #24113=ORIENTED_EDGE('',*,*,#18416,.F.); #24114=ORIENTED_EDGE('',*,*,#18417,.F.); #24115=ORIENTED_EDGE('',*,*,#18418,.F.); #24116=ORIENTED_EDGE('',*,*,#18303,.T.); #24117=ORIENTED_EDGE('',*,*,#18419,.T.); #24118=ORIENTED_EDGE('',*,*,#18420,.T.); #24119=ORIENTED_EDGE('',*,*,#18217,.T.); #24120=ORIENTED_EDGE('',*,*,#18421,.T.); #24121=ORIENTED_EDGE('',*,*,#18422,.T.); #24122=ORIENTED_EDGE('',*,*,#18423,.F.); #24123=ORIENTED_EDGE('',*,*,#18424,.F.); #24124=ORIENTED_EDGE('',*,*,#18305,.F.); #24125=ORIENTED_EDGE('',*,*,#18425,.T.); #24126=ORIENTED_EDGE('',*,*,#18215,.F.); #24127=ORIENTED_EDGE('',*,*,#18426,.F.); #24128=ORIENTED_EDGE('',*,*,#18307,.T.); #24129=ORIENTED_EDGE('',*,*,#18427,.T.); #24130=ORIENTED_EDGE('',*,*,#18428,.T.); #24131=ORIENTED_EDGE('',*,*,#18429,.F.); #24132=ORIENTED_EDGE('',*,*,#18430,.F.); #24133=ORIENTED_EDGE('',*,*,#18220,.T.); #24134=ORIENTED_EDGE('',*,*,#18431,.F.); #24135=ORIENTED_EDGE('',*,*,#18309,.F.); #24136=ORIENTED_EDGE('',*,*,#18432,.T.); #24137=ORIENTED_EDGE('',*,*,#18433,.T.); #24138=ORIENTED_EDGE('',*,*,#18434,.T.); #24139=ORIENTED_EDGE('',*,*,#18435,.F.); #24140=ORIENTED_EDGE('',*,*,#18218,.F.); #24141=ORIENTED_EDGE('',*,*,#18436,.F.); #24142=ORIENTED_EDGE('',*,*,#18311,.T.); #24143=ORIENTED_EDGE('',*,*,#18437,.T.); #24144=ORIENTED_EDGE('',*,*,#18438,.T.); #24145=ORIENTED_EDGE('',*,*,#18439,.F.); #24146=ORIENTED_EDGE('',*,*,#18440,.F.); #24147=ORIENTED_EDGE('',*,*,#18223,.T.); #24148=ORIENTED_EDGE('',*,*,#18441,.F.); #24149=ORIENTED_EDGE('',*,*,#18313,.F.); #24150=ORIENTED_EDGE('',*,*,#18442,.T.); #24151=ORIENTED_EDGE('',*,*,#18443,.T.); #24152=ORIENTED_EDGE('',*,*,#18444,.T.); #24153=ORIENTED_EDGE('',*,*,#18445,.F.); #24154=ORIENTED_EDGE('',*,*,#18221,.F.); #24155=ORIENTED_EDGE('',*,*,#18446,.F.); #24156=ORIENTED_EDGE('',*,*,#18315,.T.); #24157=ORIENTED_EDGE('',*,*,#18447,.T.); #24158=ORIENTED_EDGE('',*,*,#18448,.T.); #24159=ORIENTED_EDGE('',*,*,#18449,.F.); #24160=ORIENTED_EDGE('',*,*,#18450,.F.); #24161=ORIENTED_EDGE('',*,*,#18226,.T.); #24162=ORIENTED_EDGE('',*,*,#18451,.F.); #24163=ORIENTED_EDGE('',*,*,#18317,.F.); #24164=ORIENTED_EDGE('',*,*,#18452,.T.); #24165=ORIENTED_EDGE('',*,*,#18453,.T.); #24166=ORIENTED_EDGE('',*,*,#18454,.T.); #24167=ORIENTED_EDGE('',*,*,#18455,.F.); #24168=ORIENTED_EDGE('',*,*,#18224,.F.); #24169=ORIENTED_EDGE('',*,*,#18456,.F.); #24170=ORIENTED_EDGE('',*,*,#18457,.T.); #24171=ORIENTED_EDGE('',*,*,#18319,.T.); #24172=ORIENTED_EDGE('',*,*,#18458,.T.); #24173=ORIENTED_EDGE('',*,*,#18459,.T.); #24174=ORIENTED_EDGE('',*,*,#18460,.T.); #24175=ORIENTED_EDGE('',*,*,#18461,.F.); #24176=ORIENTED_EDGE('',*,*,#18462,.F.); #24177=ORIENTED_EDGE('',*,*,#18463,.F.); #24178=ORIENTED_EDGE('',*,*,#18464,.F.); #24179=ORIENTED_EDGE('',*,*,#18229,.T.); #24180=ORIENTED_EDGE('',*,*,#18321,.F.); #24181=ORIENTED_EDGE('',*,*,#18465,.F.); #24182=ORIENTED_EDGE('',*,*,#18466,.T.); #24183=ORIENTED_EDGE('',*,*,#18467,.T.); #24184=ORIENTED_EDGE('',*,*,#18468,.T.); #24185=ORIENTED_EDGE('',*,*,#18469,.T.); #24186=ORIENTED_EDGE('',*,*,#18470,.T.); #24187=ORIENTED_EDGE('',*,*,#18471,.F.); #24188=ORIENTED_EDGE('',*,*,#18472,.F.); #24189=ORIENTED_EDGE('',*,*,#18473,.F.); #24190=ORIENTED_EDGE('',*,*,#18227,.F.); #24191=ORIENTED_EDGE('',*,*,#18474,.F.); #24192=ORIENTED_EDGE('',*,*,#18475,.F.); #24193=ORIENTED_EDGE('',*,*,#18476,.F.); #24194=ORIENTED_EDGE('',*,*,#18323,.T.); #24195=ORIENTED_EDGE('',*,*,#18477,.T.); #24196=ORIENTED_EDGE('',*,*,#18478,.T.); #24197=ORIENTED_EDGE('',*,*,#18235,.T.); #24198=ORIENTED_EDGE('',*,*,#18479,.T.); #24199=ORIENTED_EDGE('',*,*,#18480,.T.); #24200=ORIENTED_EDGE('',*,*,#18481,.F.); #24201=ORIENTED_EDGE('',*,*,#18482,.F.); #24202=ORIENTED_EDGE('',*,*,#18325,.F.); #24203=ORIENTED_EDGE('',*,*,#18483,.T.); #24204=ORIENTED_EDGE('',*,*,#18233,.F.); #24205=ORIENTED_EDGE('',*,*,#18484,.F.); #24206=ORIENTED_EDGE('',*,*,#18327,.T.); #24207=ORIENTED_EDGE('',*,*,#18485,.T.); #24208=ORIENTED_EDGE('',*,*,#18486,.T.); #24209=ORIENTED_EDGE('',*,*,#18487,.F.); #24210=ORIENTED_EDGE('',*,*,#18488,.F.); #24211=ORIENTED_EDGE('',*,*,#18238,.T.); #24212=ORIENTED_EDGE('',*,*,#18489,.F.); #24213=ORIENTED_EDGE('',*,*,#18329,.F.); #24214=ORIENTED_EDGE('',*,*,#18490,.T.); #24215=ORIENTED_EDGE('',*,*,#18491,.T.); #24216=ORIENTED_EDGE('',*,*,#18492,.T.); #24217=ORIENTED_EDGE('',*,*,#18493,.F.); #24218=ORIENTED_EDGE('',*,*,#18236,.F.); #24219=ORIENTED_EDGE('',*,*,#18494,.F.); #24220=ORIENTED_EDGE('',*,*,#18495,.F.); #24221=ORIENTED_EDGE('',*,*,#18496,.F.); #24222=ORIENTED_EDGE('',*,*,#18343,.T.); #24223=ORIENTED_EDGE('',*,*,#18497,.T.); #24224=ORIENTED_EDGE('',*,*,#18498,.T.); #24225=ORIENTED_EDGE('',*,*,#18241,.T.); #24226=ORIENTED_EDGE('',*,*,#18499,.T.); #24227=ORIENTED_EDGE('',*,*,#18500,.T.); #24228=ORIENTED_EDGE('',*,*,#18501,.F.); #24229=ORIENTED_EDGE('',*,*,#18502,.F.); #24230=ORIENTED_EDGE('',*,*,#18345,.F.); #24231=ORIENTED_EDGE('',*,*,#18503,.T.); #24232=ORIENTED_EDGE('',*,*,#18239,.F.); #24233=ORIENTED_EDGE('',*,*,#18504,.F.); #24234=ORIENTED_EDGE('',*,*,#18287,.T.); #24235=ORIENTED_EDGE('',*,*,#18505,.T.); #24236=ORIENTED_EDGE('',*,*,#18506,.T.); #24237=ORIENTED_EDGE('',*,*,#18507,.F.); #24238=ORIENTED_EDGE('',*,*,#18508,.F.); #24239=ORIENTED_EDGE('',*,*,#18205,.T.); #24240=ORIENTED_EDGE('',*,*,#18509,.F.); #24241=ORIENTED_EDGE('',*,*,#18289,.F.); #24242=ORIENTED_EDGE('',*,*,#18510,.T.); #24243=ORIENTED_EDGE('',*,*,#18511,.T.); #24244=ORIENTED_EDGE('',*,*,#18512,.T.); #24245=ORIENTED_EDGE('',*,*,#18513,.F.); #24246=ORIENTED_EDGE('',*,*,#18203,.F.); #24247=ORIENTED_EDGE('',*,*,#18514,.F.); #24248=ORIENTED_EDGE('',*,*,#18515,.F.); #24249=ORIENTED_EDGE('',*,*,#18516,.F.); #24250=ORIENTED_EDGE('',*,*,#18291,.T.); #24251=ORIENTED_EDGE('',*,*,#18517,.T.); #24252=ORIENTED_EDGE('',*,*,#18518,.T.); #24253=ORIENTED_EDGE('',*,*,#18208,.T.); #24254=ORIENTED_EDGE('',*,*,#18519,.T.); #24255=ORIENTED_EDGE('',*,*,#18520,.T.); #24256=ORIENTED_EDGE('',*,*,#18521,.F.); #24257=ORIENTED_EDGE('',*,*,#18522,.F.); #24258=ORIENTED_EDGE('',*,*,#18293,.F.); #24259=ORIENTED_EDGE('',*,*,#18523,.T.); #24260=ORIENTED_EDGE('',*,*,#18206,.F.); #24261=ORIENTED_EDGE('',*,*,#18524,.F.); #24262=ORIENTED_EDGE('',*,*,#18295,.T.); #24263=ORIENTED_EDGE('',*,*,#18525,.T.); #24264=ORIENTED_EDGE('',*,*,#18526,.T.); #24265=ORIENTED_EDGE('',*,*,#18527,.F.); #24266=ORIENTED_EDGE('',*,*,#18528,.F.); #24267=ORIENTED_EDGE('',*,*,#18211,.T.); #24268=ORIENTED_EDGE('',*,*,#18529,.F.); #24269=ORIENTED_EDGE('',*,*,#18297,.F.); #24270=ORIENTED_EDGE('',*,*,#18530,.T.); #24271=ORIENTED_EDGE('',*,*,#18531,.T.); #24272=ORIENTED_EDGE('',*,*,#18532,.T.); #24273=ORIENTED_EDGE('',*,*,#18533,.F.); #24274=ORIENTED_EDGE('',*,*,#18209,.F.); #24275=ORIENTED_EDGE('',*,*,#18534,.F.); #24276=ORIENTED_EDGE('',*,*,#18535,.F.); #24277=ORIENTED_EDGE('',*,*,#18536,.F.); #24278=ORIENTED_EDGE('',*,*,#18271,.T.); #24279=ORIENTED_EDGE('',*,*,#18537,.T.); #24280=ORIENTED_EDGE('',*,*,#18538,.T.); #24281=ORIENTED_EDGE('',*,*,#18232,.T.); #24282=ORIENTED_EDGE('',*,*,#18539,.T.); #24283=ORIENTED_EDGE('',*,*,#18540,.T.); #24284=ORIENTED_EDGE('',*,*,#18541,.F.); #24285=ORIENTED_EDGE('',*,*,#18542,.F.); #24286=ORIENTED_EDGE('',*,*,#18273,.F.); #24287=ORIENTED_EDGE('',*,*,#18543,.T.); #24288=ORIENTED_EDGE('',*,*,#18230,.F.); #24289=ORIENTED_EDGE('',*,*,#18544,.F.); #24290=ORIENTED_EDGE('',*,*,#18275,.T.); #24291=ORIENTED_EDGE('',*,*,#18545,.T.); #24292=ORIENTED_EDGE('',*,*,#18546,.T.); #24293=ORIENTED_EDGE('',*,*,#18547,.F.); #24294=ORIENTED_EDGE('',*,*,#18548,.F.); #24295=ORIENTED_EDGE('',*,*,#18196,.T.); #24296=ORIENTED_EDGE('',*,*,#18549,.F.); #24297=ORIENTED_EDGE('',*,*,#18277,.F.); #24298=ORIENTED_EDGE('',*,*,#18550,.T.); #24299=ORIENTED_EDGE('',*,*,#18551,.T.); #24300=ORIENTED_EDGE('',*,*,#18552,.T.); #24301=ORIENTED_EDGE('',*,*,#18553,.F.); #24302=ORIENTED_EDGE('',*,*,#18194,.F.); #24303=ORIENTED_EDGE('',*,*,#18554,.F.); #24304=ORIENTED_EDGE('',*,*,#18555,.F.); #24305=ORIENTED_EDGE('',*,*,#18556,.F.); #24306=ORIENTED_EDGE('',*,*,#18557,.F.); #24307=ORIENTED_EDGE('',*,*,#18558,.F.); #24308=ORIENTED_EDGE('',*,*,#18559,.T.); #24309=ORIENTED_EDGE('',*,*,#18279,.T.); #24310=ORIENTED_EDGE('',*,*,#18560,.T.); #24311=ORIENTED_EDGE('',*,*,#18561,.T.); #24312=ORIENTED_EDGE('',*,*,#18562,.T.); #24313=ORIENTED_EDGE('',*,*,#18199,.T.); #24314=ORIENTED_EDGE('',*,*,#18563,.T.); #24315=ORIENTED_EDGE('',*,*,#18564,.T.); #24316=ORIENTED_EDGE('',*,*,#18565,.T.); #24317=ORIENTED_EDGE('',*,*,#18566,.F.); #24318=ORIENTED_EDGE('',*,*,#18567,.F.); #24319=ORIENTED_EDGE('',*,*,#18568,.F.); #24320=ORIENTED_EDGE('',*,*,#18281,.F.); #24321=ORIENTED_EDGE('',*,*,#18569,.F.); #24322=ORIENTED_EDGE('',*,*,#18570,.T.); #24323=ORIENTED_EDGE('',*,*,#18571,.T.); #24324=ORIENTED_EDGE('',*,*,#18197,.F.); #24325=ORIENTED_EDGE('',*,*,#18572,.F.); #24326=ORIENTED_EDGE('',*,*,#18283,.T.); #24327=ORIENTED_EDGE('',*,*,#18573,.T.); #24328=ORIENTED_EDGE('',*,*,#18574,.T.); #24329=ORIENTED_EDGE('',*,*,#18575,.F.); #24330=ORIENTED_EDGE('',*,*,#18576,.F.); #24331=ORIENTED_EDGE('',*,*,#18202,.T.); #24332=ORIENTED_EDGE('',*,*,#18577,.F.); #24333=ORIENTED_EDGE('',*,*,#18285,.F.); #24334=ORIENTED_EDGE('',*,*,#18578,.T.); #24335=ORIENTED_EDGE('',*,*,#18579,.T.); #24336=ORIENTED_EDGE('',*,*,#18580,.T.); #24337=ORIENTED_EDGE('',*,*,#18581,.F.); #24338=ORIENTED_EDGE('',*,*,#18200,.F.); #24339=ORIENTED_EDGE('',*,*,#18582,.F.); #24340=ORIENTED_EDGE('',*,*,#18583,.F.); #24341=ORIENTED_EDGE('',*,*,#18584,.F.); #24342=ORIENTED_EDGE('',*,*,#18585,.T.); #24343=ORIENTED_EDGE('',*,*,#18193,.F.); #24344=ORIENTED_EDGE('',*,*,#18586,.T.); #24345=ORIENTED_EDGE('',*,*,#18183,.F.); #24346=ORIENTED_EDGE('',*,*,#18587,.T.); #24347=ORIENTED_EDGE('',*,*,#18588,.T.); #24348=ORIENTED_EDGE('',*,*,#18589,.T.); #24349=ORIENTED_EDGE('',*,*,#18590,.F.); #24350=ORIENTED_EDGE('',*,*,#18191,.T.); #24351=ORIENTED_EDGE('',*,*,#18591,.F.); #24352=ORIENTED_EDGE('',*,*,#18181,.T.); #24353=ORIENTED_EDGE('',*,*,#18585,.F.); #24354=ORIENTED_EDGE('',*,*,#18592,.T.); #24355=ORIENTED_EDGE('',*,*,#18591,.T.); #24356=ORIENTED_EDGE('',*,*,#18190,.T.); #24357=ORIENTED_EDGE('',*,*,#18109,.F.); #24358=ORIENTED_EDGE('',*,*,#18188,.F.); #24359=ORIENTED_EDGE('',*,*,#18593,.T.); #24360=ORIENTED_EDGE('',*,*,#18594,.F.); #24361=ORIENTED_EDGE('',*,*,#18595,.F.); #24362=ORIENTED_EDGE('',*,*,#18596,.F.); #24363=ORIENTED_EDGE('',*,*,#18597,.T.); #24364=ORIENTED_EDGE('',*,*,#18598,.T.); #24365=ORIENTED_EDGE('',*,*,#18186,.F.); #24366=ORIENTED_EDGE('',*,*,#18599,.F.); #24367=ORIENTED_EDGE('',*,*,#18189,.T.); #24368=ORIENTED_EDGE('',*,*,#18111,.T.); #24369=ORIENTED_EDGE('',*,*,#18600,.F.); #24370=ORIENTED_EDGE('',*,*,#18601,.F.); #24371=ORIENTED_EDGE('',*,*,#18602,.T.); #24372=ORIENTED_EDGE('',*,*,#18603,.T.); #24373=ORIENTED_EDGE('',*,*,#18604,.T.); #24374=ORIENTED_EDGE('',*,*,#18184,.T.); #24375=ORIENTED_EDGE('',*,*,#18605,.F.); #24376=ORIENTED_EDGE('',*,*,#18177,.F.); #24377=ORIENTED_EDGE('',*,*,#18606,.T.); #24378=ORIENTED_EDGE('',*,*,#18175,.T.); #24379=ORIENTED_EDGE('',*,*,#18607,.F.); #24380=ORIENTED_EDGE('',*,*,#18180,.F.); #24381=ORIENTED_EDGE('',*,*,#18608,.T.); #24382=ORIENTED_EDGE('',*,*,#18178,.T.); #24383=ORIENTED_EDGE('',*,*,#18260,.T.); #24384=ORIENTED_EDGE('',*,*,#17775,.F.); #24385=ORIENTED_EDGE('',*,*,#17782,.F.); #24386=ORIENTED_EDGE('',*,*,#18048,.F.); #24387=ORIENTED_EDGE('',*,*,#18053,.F.); #24388=ORIENTED_EDGE('',*,*,#18052,.F.); #24389=ORIENTED_EDGE('',*,*,#18051,.F.); #24390=ORIENTED_EDGE('',*,*,#18050,.F.); #24391=ORIENTED_EDGE('',*,*,#18172,.F.); #24392=ORIENTED_EDGE('',*,*,#18064,.F.); #24393=ORIENTED_EDGE('',*,*,#18063,.F.); #24394=ORIENTED_EDGE('',*,*,#18062,.F.); #24395=ORIENTED_EDGE('',*,*,#18061,.F.); #24396=ORIENTED_EDGE('',*,*,#18060,.F.); #24397=ORIENTED_EDGE('',*,*,#18169,.F.); #24398=ORIENTED_EDGE('',*,*,#18072,.F.); #24399=ORIENTED_EDGE('',*,*,#18079,.F.); #24400=ORIENTED_EDGE('',*,*,#18078,.F.); #24401=ORIENTED_EDGE('',*,*,#18077,.F.); #24402=ORIENTED_EDGE('',*,*,#18076,.F.); #24403=ORIENTED_EDGE('',*,*,#18166,.F.); #24404=ORIENTED_EDGE('',*,*,#18092,.F.); #24405=ORIENTED_EDGE('',*,*,#18091,.F.); #24406=ORIENTED_EDGE('',*,*,#18090,.F.); #24407=ORIENTED_EDGE('',*,*,#18089,.F.); #24408=ORIENTED_EDGE('',*,*,#18088,.F.); #24409=ORIENTED_EDGE('',*,*,#18163,.F.); #24410=ORIENTED_EDGE('',*,*,#18016,.F.); #24411=ORIENTED_EDGE('',*,*,#18015,.F.); #24412=ORIENTED_EDGE('',*,*,#18014,.F.); #24413=ORIENTED_EDGE('',*,*,#18013,.F.); #24414=ORIENTED_EDGE('',*,*,#18012,.F.); #24415=ORIENTED_EDGE('',*,*,#18160,.F.); #24416=ORIENTED_EDGE('',*,*,#18024,.F.); #24417=ORIENTED_EDGE('',*,*,#18029,.F.); #24418=ORIENTED_EDGE('',*,*,#18028,.F.); #24419=ORIENTED_EDGE('',*,*,#18027,.F.); #24420=ORIENTED_EDGE('',*,*,#18026,.F.); #24421=ORIENTED_EDGE('',*,*,#18157,.F.); #24422=ORIENTED_EDGE('',*,*,#18040,.F.); #24423=ORIENTED_EDGE('',*,*,#18039,.F.); #24424=ORIENTED_EDGE('',*,*,#18038,.F.); #24425=ORIENTED_EDGE('',*,*,#18037,.F.); #24426=ORIENTED_EDGE('',*,*,#18036,.F.); #24427=ORIENTED_EDGE('',*,*,#18154,.F.); #24428=ORIENTED_EDGE('',*,*,#17900,.F.); #24429=ORIENTED_EDGE('',*,*,#17899,.F.); #24430=ORIENTED_EDGE('',*,*,#17898,.F.); #24431=ORIENTED_EDGE('',*,*,#17897,.F.); #24432=ORIENTED_EDGE('',*,*,#17896,.F.); #24433=ORIENTED_EDGE('',*,*,#18151,.F.); #24434=ORIENTED_EDGE('',*,*,#17912,.F.); #24435=ORIENTED_EDGE('',*,*,#17917,.F.); #24436=ORIENTED_EDGE('',*,*,#17916,.F.); #24437=ORIENTED_EDGE('',*,*,#17915,.F.); #24438=ORIENTED_EDGE('',*,*,#17914,.F.); #24439=ORIENTED_EDGE('',*,*,#18148,.F.); #24440=ORIENTED_EDGE('',*,*,#17928,.F.); #24441=ORIENTED_EDGE('',*,*,#17927,.F.); #24442=ORIENTED_EDGE('',*,*,#17926,.F.); #24443=ORIENTED_EDGE('',*,*,#17925,.F.); #24444=ORIENTED_EDGE('',*,*,#17924,.F.); #24445=ORIENTED_EDGE('',*,*,#18145,.F.); #24446=ORIENTED_EDGE('',*,*,#17940,.F.); #24447=ORIENTED_EDGE('',*,*,#17939,.F.); #24448=ORIENTED_EDGE('',*,*,#17938,.F.); #24449=ORIENTED_EDGE('',*,*,#17937,.F.); #24450=ORIENTED_EDGE('',*,*,#17936,.F.); #24451=ORIENTED_EDGE('',*,*,#18142,.F.); #24452=ORIENTED_EDGE('',*,*,#17952,.F.); #24453=ORIENTED_EDGE('',*,*,#17951,.F.); #24454=ORIENTED_EDGE('',*,*,#17950,.F.); #24455=ORIENTED_EDGE('',*,*,#17949,.F.); #24456=ORIENTED_EDGE('',*,*,#17948,.F.); #24457=ORIENTED_EDGE('',*,*,#18139,.F.); #24458=ORIENTED_EDGE('',*,*,#17964,.F.); #24459=ORIENTED_EDGE('',*,*,#17963,.F.); #24460=ORIENTED_EDGE('',*,*,#17962,.F.); #24461=ORIENTED_EDGE('',*,*,#17961,.F.); #24462=ORIENTED_EDGE('',*,*,#17960,.F.); #24463=ORIENTED_EDGE('',*,*,#18136,.F.); #24464=ORIENTED_EDGE('',*,*,#17976,.F.); #24465=ORIENTED_EDGE('',*,*,#17981,.F.); #24466=ORIENTED_EDGE('',*,*,#17980,.F.); #24467=ORIENTED_EDGE('',*,*,#17979,.F.); #24468=ORIENTED_EDGE('',*,*,#17978,.F.); #24469=ORIENTED_EDGE('',*,*,#18133,.F.); #24470=ORIENTED_EDGE('',*,*,#17992,.F.); #24471=ORIENTED_EDGE('',*,*,#17991,.F.); #24472=ORIENTED_EDGE('',*,*,#17990,.F.); #24473=ORIENTED_EDGE('',*,*,#17989,.F.); #24474=ORIENTED_EDGE('',*,*,#17988,.F.); #24475=ORIENTED_EDGE('',*,*,#18130,.F.); #24476=ORIENTED_EDGE('',*,*,#18000,.F.); #24477=ORIENTED_EDGE('',*,*,#18005,.F.); #24478=ORIENTED_EDGE('',*,*,#18004,.F.); #24479=ORIENTED_EDGE('',*,*,#18003,.F.); #24480=ORIENTED_EDGE('',*,*,#18002,.F.); #24481=ORIENTED_EDGE('',*,*,#18127,.F.); #24482=ORIENTED_EDGE('',*,*,#17848,.F.); #24483=ORIENTED_EDGE('',*,*,#17847,.F.); #24484=ORIENTED_EDGE('',*,*,#17846,.F.); #24485=ORIENTED_EDGE('',*,*,#17845,.F.); #24486=ORIENTED_EDGE('',*,*,#17844,.F.); #24487=ORIENTED_EDGE('',*,*,#18124,.F.); #24488=ORIENTED_EDGE('',*,*,#17856,.F.); #24489=ORIENTED_EDGE('',*,*,#17863,.F.); #24490=ORIENTED_EDGE('',*,*,#17862,.F.); #24491=ORIENTED_EDGE('',*,*,#17861,.F.); #24492=ORIENTED_EDGE('',*,*,#17860,.F.); #24493=ORIENTED_EDGE('',*,*,#18121,.F.); #24494=ORIENTED_EDGE('',*,*,#17872,.F.); #24495=ORIENTED_EDGE('',*,*,#17877,.F.); #24496=ORIENTED_EDGE('',*,*,#17876,.F.); #24497=ORIENTED_EDGE('',*,*,#17875,.F.); #24498=ORIENTED_EDGE('',*,*,#17874,.F.); #24499=ORIENTED_EDGE('',*,*,#18118,.F.); #24500=ORIENTED_EDGE('',*,*,#17888,.F.); #24501=ORIENTED_EDGE('',*,*,#17887,.F.); #24502=ORIENTED_EDGE('',*,*,#17886,.F.); #24503=ORIENTED_EDGE('',*,*,#17885,.F.); #24504=ORIENTED_EDGE('',*,*,#17884,.F.); #24505=ORIENTED_EDGE('',*,*,#18117,.F.); #24506=ORIENTED_EDGE('',*,*,#17779,.F.); #24507=ORIENTED_EDGE('',*,*,#18609,.F.); #24508=ORIENTED_EDGE('',*,*,#18100,.F.); #24509=ORIENTED_EDGE('',*,*,#18103,.F.); #24510=ORIENTED_EDGE('',*,*,#18102,.F.); #24511=ORIENTED_EDGE('',*,*,#18610,.F.); #24512=ORIENTED_EDGE('',*,*,#18598,.F.); #24513=ORIENTED_EDGE('',*,*,#18597,.F.); #24514=ORIENTED_EDGE('',*,*,#18596,.T.); #24515=ORIENTED_EDGE('',*,*,#18595,.T.); #24516=ORIENTED_EDGE('',*,*,#18594,.T.); #24517=ORIENTED_EDGE('',*,*,#18611,.T.); #24518=ORIENTED_EDGE('',*,*,#18584,.T.); #24519=ORIENTED_EDGE('',*,*,#18583,.T.); #24520=ORIENTED_EDGE('',*,*,#18582,.T.); #24521=ORIENTED_EDGE('',*,*,#18255,.T.); #24522=ORIENTED_EDGE('',*,*,#18266,.T.); #24523=ORIENTED_EDGE('',*,*,#18612,.T.); #24524=ORIENTED_EDGE('',*,*,#18388,.T.); #24525=ORIENTED_EDGE('',*,*,#18392,.T.); #24526=ORIENTED_EDGE('',*,*,#18391,.T.); #24527=ORIENTED_EDGE('',*,*,#18613,.T.); #24528=ORIENTED_EDGE('',*,*,#18380,.T.); #24529=ORIENTED_EDGE('',*,*,#18379,.T.); #24530=ORIENTED_EDGE('',*,*,#18378,.T.); #24531=ORIENTED_EDGE('',*,*,#18614,.T.); #24532=ORIENTED_EDGE('',*,*,#18364,.T.); #24533=ORIENTED_EDGE('',*,*,#18363,.T.); #24534=ORIENTED_EDGE('',*,*,#18362,.T.); #24535=ORIENTED_EDGE('',*,*,#18361,.T.); #24536=ORIENTED_EDGE('',*,*,#18360,.T.); #24537=ORIENTED_EDGE('',*,*,#18615,.T.); #24538=ORIENTED_EDGE('',*,*,#18350,.T.); #24539=ORIENTED_EDGE('',*,*,#18354,.T.); #24540=ORIENTED_EDGE('',*,*,#18353,.T.); #24541=ORIENTED_EDGE('',*,*,#18616,.T.); #24542=ORIENTED_EDGE('',*,*,#18496,.T.); #24543=ORIENTED_EDGE('',*,*,#18495,.T.); #24544=ORIENTED_EDGE('',*,*,#18494,.T.); #24545=ORIENTED_EDGE('',*,*,#18617,.T.); #24546=ORIENTED_EDGE('',*,*,#18484,.T.); #24547=ORIENTED_EDGE('',*,*,#18488,.T.); #24548=ORIENTED_EDGE('',*,*,#18487,.T.); #24549=ORIENTED_EDGE('',*,*,#18618,.T.); #24550=ORIENTED_EDGE('',*,*,#18476,.T.); #24551=ORIENTED_EDGE('',*,*,#18475,.T.); #24552=ORIENTED_EDGE('',*,*,#18474,.T.); #24553=ORIENTED_EDGE('',*,*,#18619,.T.); #24554=ORIENTED_EDGE('',*,*,#18456,.T.); #24555=ORIENTED_EDGE('',*,*,#18464,.T.); #24556=ORIENTED_EDGE('',*,*,#18463,.T.); #24557=ORIENTED_EDGE('',*,*,#18462,.T.); #24558=ORIENTED_EDGE('',*,*,#18461,.T.); #24559=ORIENTED_EDGE('',*,*,#18620,.T.); #24560=ORIENTED_EDGE('',*,*,#18446,.T.); #24561=ORIENTED_EDGE('',*,*,#18450,.T.); #24562=ORIENTED_EDGE('',*,*,#18449,.T.); #24563=ORIENTED_EDGE('',*,*,#18621,.T.); #24564=ORIENTED_EDGE('',*,*,#18436,.T.); #24565=ORIENTED_EDGE('',*,*,#18440,.T.); #24566=ORIENTED_EDGE('',*,*,#18439,.T.); #24567=ORIENTED_EDGE('',*,*,#18622,.T.); #24568=ORIENTED_EDGE('',*,*,#18426,.T.); #24569=ORIENTED_EDGE('',*,*,#18430,.T.); #24570=ORIENTED_EDGE('',*,*,#18429,.T.); #24571=ORIENTED_EDGE('',*,*,#18623,.T.); #24572=ORIENTED_EDGE('',*,*,#18418,.T.); #24573=ORIENTED_EDGE('',*,*,#18417,.T.); #24574=ORIENTED_EDGE('',*,*,#18416,.T.); #24575=ORIENTED_EDGE('',*,*,#18624,.T.); #24576=ORIENTED_EDGE('',*,*,#18398,.T.); #24577=ORIENTED_EDGE('',*,*,#18406,.T.); #24578=ORIENTED_EDGE('',*,*,#18405,.T.); #24579=ORIENTED_EDGE('',*,*,#18404,.T.); #24580=ORIENTED_EDGE('',*,*,#18403,.T.); #24581=ORIENTED_EDGE('',*,*,#18625,.T.); #24582=ORIENTED_EDGE('',*,*,#18524,.T.); #24583=ORIENTED_EDGE('',*,*,#18528,.T.); #24584=ORIENTED_EDGE('',*,*,#18527,.T.); #24585=ORIENTED_EDGE('',*,*,#18626,.T.); #24586=ORIENTED_EDGE('',*,*,#18516,.T.); #24587=ORIENTED_EDGE('',*,*,#18515,.T.); #24588=ORIENTED_EDGE('',*,*,#18514,.T.); #24589=ORIENTED_EDGE('',*,*,#18627,.T.); #24590=ORIENTED_EDGE('',*,*,#18504,.T.); #24591=ORIENTED_EDGE('',*,*,#18508,.T.); #24592=ORIENTED_EDGE('',*,*,#18507,.T.); #24593=ORIENTED_EDGE('',*,*,#18628,.T.); #24594=ORIENTED_EDGE('',*,*,#18572,.T.); #24595=ORIENTED_EDGE('',*,*,#18576,.T.); #24596=ORIENTED_EDGE('',*,*,#18575,.T.); #24597=ORIENTED_EDGE('',*,*,#18629,.T.); #24598=ORIENTED_EDGE('',*,*,#18558,.T.); #24599=ORIENTED_EDGE('',*,*,#18557,.T.); #24600=ORIENTED_EDGE('',*,*,#18556,.T.); #24601=ORIENTED_EDGE('',*,*,#18555,.T.); #24602=ORIENTED_EDGE('',*,*,#18554,.T.); #24603=ORIENTED_EDGE('',*,*,#18630,.T.); #24604=ORIENTED_EDGE('',*,*,#18544,.T.); #24605=ORIENTED_EDGE('',*,*,#18548,.T.); #24606=ORIENTED_EDGE('',*,*,#18547,.T.); #24607=ORIENTED_EDGE('',*,*,#18631,.T.); #24608=ORIENTED_EDGE('',*,*,#18536,.T.); #24609=ORIENTED_EDGE('',*,*,#18535,.T.); #24610=ORIENTED_EDGE('',*,*,#18534,.T.); #24611=ORIENTED_EDGE('',*,*,#18267,.T.); #24612=ORIENTED_EDGE('',*,*,#18262,.T.); #24613=ORIENTED_EDGE('',*,*,#18112,.F.); #24614=ORIENTED_EDGE('',*,*,#18114,.F.); #24615=ORIENTED_EDGE('',*,*,#18605,.T.); #24616=ORIENTED_EDGE('',*,*,#18607,.T.); #24617=ORIENTED_EDGE('',*,*,#18602,.F.); #24618=ORIENTED_EDGE('',*,*,#18601,.T.); #24619=ORIENTED_EDGE('',*,*,#18600,.T.); #24620=ORIENTED_EDGE('',*,*,#18632,.T.); #24621=ORIENTED_EDGE('',*,*,#18106,.T.); #24622=ORIENTED_EDGE('',*,*,#18105,.T.); #24623=ORIENTED_EDGE('',*,*,#18104,.T.); #24624=ORIENTED_EDGE('',*,*,#18633,.T.); #24625=ORIENTED_EDGE('',*,*,#17777,.T.); #24626=ORIENTED_EDGE('',*,*,#18116,.T.); #24627=ORIENTED_EDGE('',*,*,#17890,.T.); #24628=ORIENTED_EDGE('',*,*,#17895,.T.); #24629=ORIENTED_EDGE('',*,*,#17894,.T.); #24630=ORIENTED_EDGE('',*,*,#17893,.T.); #24631=ORIENTED_EDGE('',*,*,#17892,.T.); #24632=ORIENTED_EDGE('',*,*,#18119,.T.); #24633=ORIENTED_EDGE('',*,*,#17882,.T.); #24634=ORIENTED_EDGE('',*,*,#17881,.T.); #24635=ORIENTED_EDGE('',*,*,#17880,.T.); #24636=ORIENTED_EDGE('',*,*,#17879,.T.); #24637=ORIENTED_EDGE('',*,*,#17878,.T.); #24638=ORIENTED_EDGE('',*,*,#18122,.T.); #24639=ORIENTED_EDGE('',*,*,#17868,.T.); #24640=ORIENTED_EDGE('',*,*,#17867,.T.); #24641=ORIENTED_EDGE('',*,*,#17866,.T.); #24642=ORIENTED_EDGE('',*,*,#17865,.T.); #24643=ORIENTED_EDGE('',*,*,#17864,.T.); #24644=ORIENTED_EDGE('',*,*,#18125,.T.); #24645=ORIENTED_EDGE('',*,*,#17850,.T.); #24646=ORIENTED_EDGE('',*,*,#17855,.T.); #24647=ORIENTED_EDGE('',*,*,#17854,.T.); #24648=ORIENTED_EDGE('',*,*,#17853,.T.); #24649=ORIENTED_EDGE('',*,*,#17852,.T.); #24650=ORIENTED_EDGE('',*,*,#18128,.T.); #24651=ORIENTED_EDGE('',*,*,#18010,.T.); #24652=ORIENTED_EDGE('',*,*,#18009,.T.); #24653=ORIENTED_EDGE('',*,*,#18008,.T.); #24654=ORIENTED_EDGE('',*,*,#18007,.T.); #24655=ORIENTED_EDGE('',*,*,#18006,.T.); #24656=ORIENTED_EDGE('',*,*,#18131,.T.); #24657=ORIENTED_EDGE('',*,*,#17994,.T.); #24658=ORIENTED_EDGE('',*,*,#17999,.T.); #24659=ORIENTED_EDGE('',*,*,#17998,.T.); #24660=ORIENTED_EDGE('',*,*,#17997,.T.); #24661=ORIENTED_EDGE('',*,*,#17996,.T.); #24662=ORIENTED_EDGE('',*,*,#18134,.T.); #24663=ORIENTED_EDGE('',*,*,#17986,.T.); #24664=ORIENTED_EDGE('',*,*,#17985,.T.); #24665=ORIENTED_EDGE('',*,*,#17984,.T.); #24666=ORIENTED_EDGE('',*,*,#17983,.T.); #24667=ORIENTED_EDGE('',*,*,#17982,.T.); #24668=ORIENTED_EDGE('',*,*,#18137,.T.); #24669=ORIENTED_EDGE('',*,*,#17968,.T.); #24670=ORIENTED_EDGE('',*,*,#17975,.T.); #24671=ORIENTED_EDGE('',*,*,#17974,.T.); #24672=ORIENTED_EDGE('',*,*,#17973,.T.); #24673=ORIENTED_EDGE('',*,*,#17972,.T.); #24674=ORIENTED_EDGE('',*,*,#18140,.T.); #24675=ORIENTED_EDGE('',*,*,#17954,.T.); #24676=ORIENTED_EDGE('',*,*,#17959,.T.); #24677=ORIENTED_EDGE('',*,*,#17958,.T.); #24678=ORIENTED_EDGE('',*,*,#17957,.T.); #24679=ORIENTED_EDGE('',*,*,#17956,.T.); #24680=ORIENTED_EDGE('',*,*,#18143,.T.); #24681=ORIENTED_EDGE('',*,*,#17942,.T.); #24682=ORIENTED_EDGE('',*,*,#17947,.T.); #24683=ORIENTED_EDGE('',*,*,#17946,.T.); #24684=ORIENTED_EDGE('',*,*,#17945,.T.); #24685=ORIENTED_EDGE('',*,*,#17944,.T.); #24686=ORIENTED_EDGE('',*,*,#18146,.T.); #24687=ORIENTED_EDGE('',*,*,#17930,.T.); #24688=ORIENTED_EDGE('',*,*,#17935,.T.); #24689=ORIENTED_EDGE('',*,*,#17934,.T.); #24690=ORIENTED_EDGE('',*,*,#17933,.T.); #24691=ORIENTED_EDGE('',*,*,#17932,.T.); #24692=ORIENTED_EDGE('',*,*,#18149,.T.); #24693=ORIENTED_EDGE('',*,*,#17922,.T.); #24694=ORIENTED_EDGE('',*,*,#17921,.T.); #24695=ORIENTED_EDGE('',*,*,#17920,.T.); #24696=ORIENTED_EDGE('',*,*,#17919,.T.); #24697=ORIENTED_EDGE('',*,*,#17918,.T.); #24698=ORIENTED_EDGE('',*,*,#18152,.T.); #24699=ORIENTED_EDGE('',*,*,#17904,.T.); #24700=ORIENTED_EDGE('',*,*,#17911,.T.); #24701=ORIENTED_EDGE('',*,*,#17910,.T.); #24702=ORIENTED_EDGE('',*,*,#17909,.T.); #24703=ORIENTED_EDGE('',*,*,#17908,.T.); #24704=ORIENTED_EDGE('',*,*,#18155,.T.); #24705=ORIENTED_EDGE('',*,*,#18042,.T.); #24706=ORIENTED_EDGE('',*,*,#18047,.T.); #24707=ORIENTED_EDGE('',*,*,#18046,.T.); #24708=ORIENTED_EDGE('',*,*,#18045,.T.); #24709=ORIENTED_EDGE('',*,*,#18044,.T.); #24710=ORIENTED_EDGE('',*,*,#18158,.T.); #24711=ORIENTED_EDGE('',*,*,#18034,.T.); #24712=ORIENTED_EDGE('',*,*,#18033,.T.); #24713=ORIENTED_EDGE('',*,*,#18032,.T.); #24714=ORIENTED_EDGE('',*,*,#18031,.T.); #24715=ORIENTED_EDGE('',*,*,#18030,.T.); #24716=ORIENTED_EDGE('',*,*,#18161,.T.); #24717=ORIENTED_EDGE('',*,*,#18018,.T.); #24718=ORIENTED_EDGE('',*,*,#18023,.T.); #24719=ORIENTED_EDGE('',*,*,#18022,.T.); #24720=ORIENTED_EDGE('',*,*,#18021,.T.); #24721=ORIENTED_EDGE('',*,*,#18020,.T.); #24722=ORIENTED_EDGE('',*,*,#18164,.T.); #24723=ORIENTED_EDGE('',*,*,#18094,.T.); #24724=ORIENTED_EDGE('',*,*,#18099,.T.); #24725=ORIENTED_EDGE('',*,*,#18098,.T.); #24726=ORIENTED_EDGE('',*,*,#18097,.T.); #24727=ORIENTED_EDGE('',*,*,#18096,.T.); #24728=ORIENTED_EDGE('',*,*,#18167,.T.); #24729=ORIENTED_EDGE('',*,*,#18084,.T.); #24730=ORIENTED_EDGE('',*,*,#18083,.T.); #24731=ORIENTED_EDGE('',*,*,#18082,.T.); #24732=ORIENTED_EDGE('',*,*,#18081,.T.); #24733=ORIENTED_EDGE('',*,*,#18080,.T.); #24734=ORIENTED_EDGE('',*,*,#18170,.T.); #24735=ORIENTED_EDGE('',*,*,#18066,.T.); #24736=ORIENTED_EDGE('',*,*,#18071,.T.); #24737=ORIENTED_EDGE('',*,*,#18070,.T.); #24738=ORIENTED_EDGE('',*,*,#18069,.T.); #24739=ORIENTED_EDGE('',*,*,#18068,.T.); #24740=ORIENTED_EDGE('',*,*,#18173,.T.); #24741=ORIENTED_EDGE('',*,*,#18058,.T.); #24742=ORIENTED_EDGE('',*,*,#18057,.T.); #24743=ORIENTED_EDGE('',*,*,#18056,.T.); #24744=ORIENTED_EDGE('',*,*,#18055,.T.); #24745=ORIENTED_EDGE('',*,*,#18054,.T.); #24746=ORIENTED_EDGE('',*,*,#17783,.T.); #24747=ORIENTED_EDGE('',*,*,#17773,.T.); #24748=ORIENTED_EDGE('',*,*,#18259,.F.); #24749=ORIENTED_EDGE('',*,*,#18261,.F.); #24750=ORIENTED_EDGE('',*,*,#18269,.F.); #24751=ORIENTED_EDGE('',*,*,#18540,.F.); #24752=ORIENTED_EDGE('',*,*,#18539,.F.); #24753=ORIENTED_EDGE('',*,*,#18543,.F.); #24754=ORIENTED_EDGE('',*,*,#18634,.F.); #24755=ORIENTED_EDGE('',*,*,#18552,.F.); #24756=ORIENTED_EDGE('',*,*,#18551,.F.); #24757=ORIENTED_EDGE('',*,*,#18550,.F.); #24758=ORIENTED_EDGE('',*,*,#18635,.F.); #24759=ORIENTED_EDGE('',*,*,#18565,.F.); #24760=ORIENTED_EDGE('',*,*,#18564,.F.); #24761=ORIENTED_EDGE('',*,*,#18563,.F.); #24762=ORIENTED_EDGE('',*,*,#18571,.F.); #24763=ORIENTED_EDGE('',*,*,#18570,.F.); #24764=ORIENTED_EDGE('',*,*,#18636,.F.); #24765=ORIENTED_EDGE('',*,*,#18580,.F.); #24766=ORIENTED_EDGE('',*,*,#18579,.F.); #24767=ORIENTED_EDGE('',*,*,#18578,.F.); #24768=ORIENTED_EDGE('',*,*,#18637,.F.); #24769=ORIENTED_EDGE('',*,*,#18512,.F.); #24770=ORIENTED_EDGE('',*,*,#18511,.F.); #24771=ORIENTED_EDGE('',*,*,#18510,.F.); #24772=ORIENTED_EDGE('',*,*,#18638,.F.); #24773=ORIENTED_EDGE('',*,*,#18520,.F.); #24774=ORIENTED_EDGE('',*,*,#18519,.F.); #24775=ORIENTED_EDGE('',*,*,#18523,.F.); #24776=ORIENTED_EDGE('',*,*,#18639,.F.); #24777=ORIENTED_EDGE('',*,*,#18532,.F.); #24778=ORIENTED_EDGE('',*,*,#18531,.F.); #24779=ORIENTED_EDGE('',*,*,#18530,.F.); #24780=ORIENTED_EDGE('',*,*,#18640,.F.); #24781=ORIENTED_EDGE('',*,*,#18412,.F.); #24782=ORIENTED_EDGE('',*,*,#18411,.F.); #24783=ORIENTED_EDGE('',*,*,#18410,.F.); #24784=ORIENTED_EDGE('',*,*,#18409,.F.); #24785=ORIENTED_EDGE('',*,*,#18408,.F.); #24786=ORIENTED_EDGE('',*,*,#18641,.F.); #24787=ORIENTED_EDGE('',*,*,#18422,.F.); #24788=ORIENTED_EDGE('',*,*,#18421,.F.); #24789=ORIENTED_EDGE('',*,*,#18425,.F.); #24790=ORIENTED_EDGE('',*,*,#18642,.F.); #24791=ORIENTED_EDGE('',*,*,#18434,.F.); #24792=ORIENTED_EDGE('',*,*,#18433,.F.); #24793=ORIENTED_EDGE('',*,*,#18432,.F.); #24794=ORIENTED_EDGE('',*,*,#18643,.F.); #24795=ORIENTED_EDGE('',*,*,#18444,.F.); #24796=ORIENTED_EDGE('',*,*,#18443,.F.); #24797=ORIENTED_EDGE('',*,*,#18442,.F.); #24798=ORIENTED_EDGE('',*,*,#18644,.F.); #24799=ORIENTED_EDGE('',*,*,#18454,.F.); #24800=ORIENTED_EDGE('',*,*,#18453,.F.); #24801=ORIENTED_EDGE('',*,*,#18452,.F.); #24802=ORIENTED_EDGE('',*,*,#18645,.F.); #24803=ORIENTED_EDGE('',*,*,#18470,.F.); #24804=ORIENTED_EDGE('',*,*,#18469,.F.); #24805=ORIENTED_EDGE('',*,*,#18468,.F.); #24806=ORIENTED_EDGE('',*,*,#18467,.F.); #24807=ORIENTED_EDGE('',*,*,#18466,.F.); #24808=ORIENTED_EDGE('',*,*,#18646,.F.); #24809=ORIENTED_EDGE('',*,*,#18480,.F.); #24810=ORIENTED_EDGE('',*,*,#18479,.F.); #24811=ORIENTED_EDGE('',*,*,#18483,.F.); #24812=ORIENTED_EDGE('',*,*,#18647,.F.); #24813=ORIENTED_EDGE('',*,*,#18492,.F.); #24814=ORIENTED_EDGE('',*,*,#18491,.F.); #24815=ORIENTED_EDGE('',*,*,#18490,.F.); #24816=ORIENTED_EDGE('',*,*,#18648,.F.); #24817=ORIENTED_EDGE('',*,*,#18500,.F.); #24818=ORIENTED_EDGE('',*,*,#18499,.F.); #24819=ORIENTED_EDGE('',*,*,#18503,.F.); #24820=ORIENTED_EDGE('',*,*,#18649,.F.); #24821=ORIENTED_EDGE('',*,*,#18358,.F.); #24822=ORIENTED_EDGE('',*,*,#18357,.F.); #24823=ORIENTED_EDGE('',*,*,#18356,.F.); #24824=ORIENTED_EDGE('',*,*,#18650,.F.); #24825=ORIENTED_EDGE('',*,*,#18371,.F.); #24826=ORIENTED_EDGE('',*,*,#18370,.F.); #24827=ORIENTED_EDGE('',*,*,#18369,.F.); #24828=ORIENTED_EDGE('',*,*,#18377,.F.); #24829=ORIENTED_EDGE('',*,*,#18376,.F.); #24830=ORIENTED_EDGE('',*,*,#18651,.F.); #24831=ORIENTED_EDGE('',*,*,#18384,.F.); #24832=ORIENTED_EDGE('',*,*,#18383,.F.); #24833=ORIENTED_EDGE('',*,*,#18387,.F.); #24834=ORIENTED_EDGE('',*,*,#18652,.F.); #24835=ORIENTED_EDGE('',*,*,#18396,.F.); #24836=ORIENTED_EDGE('',*,*,#18395,.F.); #24837=ORIENTED_EDGE('',*,*,#18394,.F.); #24838=ORIENTED_EDGE('',*,*,#18653,.F.); #24839=ORIENTED_EDGE('',*,*,#18264,.F.); #24840=ORIENTED_EDGE('',*,*,#18257,.F.); #24841=ORIENTED_EDGE('',*,*,#18589,.F.); #24842=ORIENTED_EDGE('',*,*,#18588,.F.); #24843=ORIENTED_EDGE('',*,*,#18587,.F.); #24844=ORIENTED_EDGE('',*,*,#18654,.F.); #24845=ORIENTED_EDGE('',*,*,#18604,.F.); #24846=ORIENTED_EDGE('',*,*,#18603,.F.); #24847=ORIENTED_EDGE('',*,*,#18113,.T.); #24848=ORIENTED_EDGE('',*,*,#18115,.T.); #24849=ORIENTED_EDGE('',*,*,#18606,.F.); #24850=ORIENTED_EDGE('',*,*,#18608,.F.); #24851=ORIENTED_EDGE('',*,*,#18332,.F.); #24852=ORIENTED_EDGE('',*,*,#18612,.F.); #24853=ORIENTED_EDGE('',*,*,#18265,.T.); #24854=ORIENTED_EDGE('',*,*,#18653,.T.); #24855=ORIENTED_EDGE('',*,*,#18613,.F.); #24856=ORIENTED_EDGE('',*,*,#18655,.T.); #24857=ORIENTED_EDGE('',*,*,#18652,.T.); #24858=ORIENTED_EDGE('',*,*,#18336,.F.); #24859=ORIENTED_EDGE('',*,*,#18614,.F.); #24860=ORIENTED_EDGE('',*,*,#18656,.T.); #24861=ORIENTED_EDGE('',*,*,#18651,.T.); #24862=ORIENTED_EDGE('',*,*,#18375,.T.); #24863=ORIENTED_EDGE('',*,*,#18340,.F.); #24864=ORIENTED_EDGE('',*,*,#18365,.F.); #24865=ORIENTED_EDGE('',*,*,#18368,.F.); #24866=ORIENTED_EDGE('',*,*,#18657,.T.); #24867=ORIENTED_EDGE('',*,*,#18372,.T.); #24868=ORIENTED_EDGE('',*,*,#18650,.T.); #24869=ORIENTED_EDGE('',*,*,#18348,.F.); #24870=ORIENTED_EDGE('',*,*,#18615,.F.); #24871=ORIENTED_EDGE('',*,*,#18616,.F.); #24872=ORIENTED_EDGE('',*,*,#18658,.T.); #24873=ORIENTED_EDGE('',*,*,#18649,.T.); #24874=ORIENTED_EDGE('',*,*,#18344,.F.); #24875=ORIENTED_EDGE('',*,*,#18617,.F.); #24876=ORIENTED_EDGE('',*,*,#18659,.T.); #24877=ORIENTED_EDGE('',*,*,#18648,.T.); #24878=ORIENTED_EDGE('',*,*,#18328,.F.); #24879=ORIENTED_EDGE('',*,*,#18618,.F.); #24880=ORIENTED_EDGE('',*,*,#18660,.T.); #24881=ORIENTED_EDGE('',*,*,#18647,.T.); #24882=ORIENTED_EDGE('',*,*,#18324,.F.); #24883=ORIENTED_EDGE('',*,*,#18619,.F.); #24884=ORIENTED_EDGE('',*,*,#18661,.T.); #24885=ORIENTED_EDGE('',*,*,#18646,.T.); #24886=ORIENTED_EDGE('',*,*,#18465,.T.); #24887=ORIENTED_EDGE('',*,*,#18320,.F.); #24888=ORIENTED_EDGE('',*,*,#18457,.F.); #24889=ORIENTED_EDGE('',*,*,#18460,.F.); #24890=ORIENTED_EDGE('',*,*,#18662,.T.); #24891=ORIENTED_EDGE('',*,*,#18471,.T.); #24892=ORIENTED_EDGE('',*,*,#18645,.T.); #24893=ORIENTED_EDGE('',*,*,#18316,.F.); #24894=ORIENTED_EDGE('',*,*,#18620,.F.); #24895=ORIENTED_EDGE('',*,*,#18621,.F.); #24896=ORIENTED_EDGE('',*,*,#18663,.T.); #24897=ORIENTED_EDGE('',*,*,#18644,.T.); #24898=ORIENTED_EDGE('',*,*,#18312,.F.); #24899=ORIENTED_EDGE('',*,*,#18622,.F.); #24900=ORIENTED_EDGE('',*,*,#18664,.T.); #24901=ORIENTED_EDGE('',*,*,#18643,.T.); #24902=ORIENTED_EDGE('',*,*,#18308,.F.); #24903=ORIENTED_EDGE('',*,*,#18623,.F.); #24904=ORIENTED_EDGE('',*,*,#18665,.T.); #24905=ORIENTED_EDGE('',*,*,#18642,.T.); #24906=ORIENTED_EDGE('',*,*,#18304,.F.); #24907=ORIENTED_EDGE('',*,*,#18624,.F.); #24908=ORIENTED_EDGE('',*,*,#18666,.T.); #24909=ORIENTED_EDGE('',*,*,#18641,.T.); #24910=ORIENTED_EDGE('',*,*,#18407,.T.); #24911=ORIENTED_EDGE('',*,*,#18300,.F.); #24912=ORIENTED_EDGE('',*,*,#18399,.F.); #24913=ORIENTED_EDGE('',*,*,#18402,.F.); #24914=ORIENTED_EDGE('',*,*,#18667,.T.); #24915=ORIENTED_EDGE('',*,*,#18413,.T.); #24916=ORIENTED_EDGE('',*,*,#18640,.T.); #24917=ORIENTED_EDGE('',*,*,#18296,.F.); #24918=ORIENTED_EDGE('',*,*,#18625,.F.); #24919=ORIENTED_EDGE('',*,*,#18626,.F.); #24920=ORIENTED_EDGE('',*,*,#18668,.T.); #24921=ORIENTED_EDGE('',*,*,#18639,.T.); #24922=ORIENTED_EDGE('',*,*,#18292,.F.); #24923=ORIENTED_EDGE('',*,*,#18627,.F.); #24924=ORIENTED_EDGE('',*,*,#18669,.T.); #24925=ORIENTED_EDGE('',*,*,#18638,.T.); #24926=ORIENTED_EDGE('',*,*,#18288,.F.); #24927=ORIENTED_EDGE('',*,*,#18628,.F.); #24928=ORIENTED_EDGE('',*,*,#18670,.T.); #24929=ORIENTED_EDGE('',*,*,#18637,.T.); #24930=ORIENTED_EDGE('',*,*,#18284,.F.); #24931=ORIENTED_EDGE('',*,*,#18629,.F.); #24932=ORIENTED_EDGE('',*,*,#18671,.T.); #24933=ORIENTED_EDGE('',*,*,#18636,.T.); #24934=ORIENTED_EDGE('',*,*,#18569,.T.); #24935=ORIENTED_EDGE('',*,*,#18280,.F.); #24936=ORIENTED_EDGE('',*,*,#18559,.F.); #24937=ORIENTED_EDGE('',*,*,#18562,.F.); #24938=ORIENTED_EDGE('',*,*,#18672,.T.); #24939=ORIENTED_EDGE('',*,*,#18566,.T.); #24940=ORIENTED_EDGE('',*,*,#18635,.T.); #24941=ORIENTED_EDGE('',*,*,#18276,.F.); #24942=ORIENTED_EDGE('',*,*,#18630,.F.); #24943=ORIENTED_EDGE('',*,*,#18631,.F.); #24944=ORIENTED_EDGE('',*,*,#18673,.T.); #24945=ORIENTED_EDGE('',*,*,#18634,.T.); #24946=ORIENTED_EDGE('',*,*,#18272,.F.); #24947=ORIENTED_EDGE('',*,*,#18268,.F.); #24948=ORIENTED_EDGE('',*,*,#18538,.F.); #24949=ORIENTED_EDGE('',*,*,#18674,.F.); #24950=ORIENTED_EDGE('',*,*,#18541,.T.); #24951=ORIENTED_EDGE('',*,*,#18673,.F.); #24952=ORIENTED_EDGE('',*,*,#18546,.F.); #24953=ORIENTED_EDGE('',*,*,#18675,.F.); #24954=ORIENTED_EDGE('',*,*,#18553,.T.); #24955=ORIENTED_EDGE('',*,*,#18672,.F.); #24956=ORIENTED_EDGE('',*,*,#18561,.F.); #24957=ORIENTED_EDGE('',*,*,#18676,.F.); #24958=ORIENTED_EDGE('',*,*,#18567,.T.); #24959=ORIENTED_EDGE('',*,*,#18671,.F.); #24960=ORIENTED_EDGE('',*,*,#18574,.F.); #24961=ORIENTED_EDGE('',*,*,#18677,.F.); #24962=ORIENTED_EDGE('',*,*,#18581,.T.); #24963=ORIENTED_EDGE('',*,*,#18670,.F.); #24964=ORIENTED_EDGE('',*,*,#18506,.F.); #24965=ORIENTED_EDGE('',*,*,#18678,.F.); #24966=ORIENTED_EDGE('',*,*,#18513,.T.); #24967=ORIENTED_EDGE('',*,*,#18669,.F.); #24968=ORIENTED_EDGE('',*,*,#18518,.F.); #24969=ORIENTED_EDGE('',*,*,#18679,.F.); #24970=ORIENTED_EDGE('',*,*,#18521,.T.); #24971=ORIENTED_EDGE('',*,*,#18668,.F.); #24972=ORIENTED_EDGE('',*,*,#18526,.F.); #24973=ORIENTED_EDGE('',*,*,#18680,.F.); #24974=ORIENTED_EDGE('',*,*,#18533,.T.); #24975=ORIENTED_EDGE('',*,*,#18667,.F.); #24976=ORIENTED_EDGE('',*,*,#18401,.F.); #24977=ORIENTED_EDGE('',*,*,#18681,.F.); #24978=ORIENTED_EDGE('',*,*,#18414,.T.); #24979=ORIENTED_EDGE('',*,*,#18666,.F.); #24980=ORIENTED_EDGE('',*,*,#18420,.F.); #24981=ORIENTED_EDGE('',*,*,#18682,.F.); #24982=ORIENTED_EDGE('',*,*,#18423,.T.); #24983=ORIENTED_EDGE('',*,*,#18665,.F.); #24984=ORIENTED_EDGE('',*,*,#18428,.F.); #24985=ORIENTED_EDGE('',*,*,#18683,.F.); #24986=ORIENTED_EDGE('',*,*,#18435,.T.); #24987=ORIENTED_EDGE('',*,*,#18664,.F.); #24988=ORIENTED_EDGE('',*,*,#18438,.F.); #24989=ORIENTED_EDGE('',*,*,#18684,.F.); #24990=ORIENTED_EDGE('',*,*,#18445,.T.); #24991=ORIENTED_EDGE('',*,*,#18663,.F.); #24992=ORIENTED_EDGE('',*,*,#18448,.F.); #24993=ORIENTED_EDGE('',*,*,#18685,.F.); #24994=ORIENTED_EDGE('',*,*,#18455,.T.); #24995=ORIENTED_EDGE('',*,*,#18662,.F.); #24996=ORIENTED_EDGE('',*,*,#18459,.F.); #24997=ORIENTED_EDGE('',*,*,#18686,.F.); #24998=ORIENTED_EDGE('',*,*,#18472,.T.); #24999=ORIENTED_EDGE('',*,*,#18661,.F.); #25000=ORIENTED_EDGE('',*,*,#18478,.F.); #25001=ORIENTED_EDGE('',*,*,#18687,.F.); #25002=ORIENTED_EDGE('',*,*,#18481,.T.); #25003=ORIENTED_EDGE('',*,*,#18660,.F.); #25004=ORIENTED_EDGE('',*,*,#18486,.F.); #25005=ORIENTED_EDGE('',*,*,#18688,.F.); #25006=ORIENTED_EDGE('',*,*,#18493,.T.); #25007=ORIENTED_EDGE('',*,*,#18659,.F.); #25008=ORIENTED_EDGE('',*,*,#18498,.F.); #25009=ORIENTED_EDGE('',*,*,#18689,.F.); #25010=ORIENTED_EDGE('',*,*,#18501,.T.); #25011=ORIENTED_EDGE('',*,*,#18658,.F.); #25012=ORIENTED_EDGE('',*,*,#18352,.F.); #25013=ORIENTED_EDGE('',*,*,#18690,.F.); #25014=ORIENTED_EDGE('',*,*,#18359,.T.); #25015=ORIENTED_EDGE('',*,*,#18657,.F.); #25016=ORIENTED_EDGE('',*,*,#18367,.F.); #25017=ORIENTED_EDGE('',*,*,#18691,.F.); #25018=ORIENTED_EDGE('',*,*,#18373,.T.); #25019=ORIENTED_EDGE('',*,*,#18656,.F.); #25020=ORIENTED_EDGE('',*,*,#18382,.F.); #25021=ORIENTED_EDGE('',*,*,#18692,.F.); #25022=ORIENTED_EDGE('',*,*,#18385,.T.); #25023=ORIENTED_EDGE('',*,*,#18655,.F.); #25024=ORIENTED_EDGE('',*,*,#18390,.F.); #25025=ORIENTED_EDGE('',*,*,#18693,.F.); #25026=ORIENTED_EDGE('',*,*,#18397,.T.); #25027=ORIENTED_EDGE('',*,*,#17771,.F.); #25028=ORIENTED_EDGE('',*,*,#18609,.T.); #25029=ORIENTED_EDGE('',*,*,#17778,.T.); #25030=ORIENTED_EDGE('',*,*,#18633,.F.); #25031=ORIENTED_EDGE('',*,*,#18694,.F.); #25032=ORIENTED_EDGE('',*,*,#18101,.T.); #25033=ORIENTED_EDGE('',*,*,#17628,.F.); #25034=ORIENTED_EDGE('',*,*,#18107,.F.); #25035=ORIENTED_EDGE('',*,*,#18110,.F.); #25036=ORIENTED_EDGE('',*,*,#18610,.T.); #25037=ORIENTED_EDGE('',*,*,#18694,.T.); #25038=ORIENTED_EDGE('',*,*,#18632,.F.); #25039=ORIENTED_EDGE('',*,*,#18695,.F.); #25040=ORIENTED_EDGE('',*,*,#18593,.F.); #25041=ORIENTED_EDGE('',*,*,#18187,.T.); #25042=ORIENTED_EDGE('',*,*,#18599,.T.); #25043=ORIENTED_EDGE('',*,*,#18592,.F.); #25044=ORIENTED_EDGE('',*,*,#18611,.F.); #25045=ORIENTED_EDGE('',*,*,#18695,.T.); #25046=ORIENTED_EDGE('',*,*,#18654,.T.); #25047=ORIENTED_EDGE('',*,*,#18256,.F.); #25048=ORIENTED_EDGE('',*,*,#18586,.F.); #25049=ORIENTED_EDGE('',*,*,#18192,.T.); #25050=ORIENTED_EDGE('',*,*,#18590,.T.); #25051=ORIENTED_EDGE('',*,*,#18270,.T.); #25052=ORIENTED_EDGE('',*,*,#18542,.T.); #25053=ORIENTED_EDGE('',*,*,#18674,.T.); #25054=ORIENTED_EDGE('',*,*,#18537,.F.); #25055=ORIENTED_EDGE('',*,*,#18274,.T.); #25056=ORIENTED_EDGE('',*,*,#18549,.T.); #25057=ORIENTED_EDGE('',*,*,#18675,.T.); #25058=ORIENTED_EDGE('',*,*,#18545,.F.); #25059=ORIENTED_EDGE('',*,*,#18278,.T.); #25060=ORIENTED_EDGE('',*,*,#18568,.T.); #25061=ORIENTED_EDGE('',*,*,#18676,.T.); #25062=ORIENTED_EDGE('',*,*,#18560,.F.); #25063=ORIENTED_EDGE('',*,*,#18282,.T.); #25064=ORIENTED_EDGE('',*,*,#18577,.T.); #25065=ORIENTED_EDGE('',*,*,#18677,.T.); #25066=ORIENTED_EDGE('',*,*,#18573,.F.); #25067=ORIENTED_EDGE('',*,*,#18286,.T.); #25068=ORIENTED_EDGE('',*,*,#18509,.T.); #25069=ORIENTED_EDGE('',*,*,#18678,.T.); #25070=ORIENTED_EDGE('',*,*,#18505,.F.); #25071=ORIENTED_EDGE('',*,*,#18290,.T.); #25072=ORIENTED_EDGE('',*,*,#18522,.T.); #25073=ORIENTED_EDGE('',*,*,#18679,.T.); #25074=ORIENTED_EDGE('',*,*,#18517,.F.); #25075=ORIENTED_EDGE('',*,*,#18294,.T.); #25076=ORIENTED_EDGE('',*,*,#18529,.T.); #25077=ORIENTED_EDGE('',*,*,#18680,.T.); #25078=ORIENTED_EDGE('',*,*,#18525,.F.); #25079=ORIENTED_EDGE('',*,*,#18298,.T.); #25080=ORIENTED_EDGE('',*,*,#18415,.T.); #25081=ORIENTED_EDGE('',*,*,#18681,.T.); #25082=ORIENTED_EDGE('',*,*,#18400,.F.); #25083=ORIENTED_EDGE('',*,*,#18302,.T.); #25084=ORIENTED_EDGE('',*,*,#18424,.T.); #25085=ORIENTED_EDGE('',*,*,#18682,.T.); #25086=ORIENTED_EDGE('',*,*,#18419,.F.); #25087=ORIENTED_EDGE('',*,*,#18306,.T.); #25088=ORIENTED_EDGE('',*,*,#18431,.T.); #25089=ORIENTED_EDGE('',*,*,#18683,.T.); #25090=ORIENTED_EDGE('',*,*,#18427,.F.); #25091=ORIENTED_EDGE('',*,*,#18310,.T.); #25092=ORIENTED_EDGE('',*,*,#18441,.T.); #25093=ORIENTED_EDGE('',*,*,#18684,.T.); #25094=ORIENTED_EDGE('',*,*,#18437,.F.); #25095=ORIENTED_EDGE('',*,*,#18314,.T.); #25096=ORIENTED_EDGE('',*,*,#18451,.T.); #25097=ORIENTED_EDGE('',*,*,#18685,.T.); #25098=ORIENTED_EDGE('',*,*,#18447,.F.); #25099=ORIENTED_EDGE('',*,*,#18318,.T.); #25100=ORIENTED_EDGE('',*,*,#18473,.T.); #25101=ORIENTED_EDGE('',*,*,#18686,.T.); #25102=ORIENTED_EDGE('',*,*,#18458,.F.); #25103=ORIENTED_EDGE('',*,*,#18322,.T.); #25104=ORIENTED_EDGE('',*,*,#18482,.T.); #25105=ORIENTED_EDGE('',*,*,#18687,.T.); #25106=ORIENTED_EDGE('',*,*,#18477,.F.); #25107=ORIENTED_EDGE('',*,*,#18326,.T.); #25108=ORIENTED_EDGE('',*,*,#18489,.T.); #25109=ORIENTED_EDGE('',*,*,#18688,.T.); #25110=ORIENTED_EDGE('',*,*,#18485,.F.); #25111=ORIENTED_EDGE('',*,*,#18342,.T.); #25112=ORIENTED_EDGE('',*,*,#18502,.T.); #25113=ORIENTED_EDGE('',*,*,#18689,.T.); #25114=ORIENTED_EDGE('',*,*,#18497,.F.); #25115=ORIENTED_EDGE('',*,*,#18330,.T.); #25116=ORIENTED_EDGE('',*,*,#18393,.T.); #25117=ORIENTED_EDGE('',*,*,#18693,.T.); #25118=ORIENTED_EDGE('',*,*,#18389,.F.); #25119=ORIENTED_EDGE('',*,*,#18334,.T.); #25120=ORIENTED_EDGE('',*,*,#18386,.T.); #25121=ORIENTED_EDGE('',*,*,#18692,.T.); #25122=ORIENTED_EDGE('',*,*,#18381,.F.); #25123=ORIENTED_EDGE('',*,*,#18338,.T.); #25124=ORIENTED_EDGE('',*,*,#18374,.T.); #25125=ORIENTED_EDGE('',*,*,#18691,.T.); #25126=ORIENTED_EDGE('',*,*,#18366,.F.); #25127=ORIENTED_EDGE('',*,*,#18346,.T.); #25128=ORIENTED_EDGE('',*,*,#18355,.T.); #25129=ORIENTED_EDGE('',*,*,#18690,.T.); #25130=ORIENTED_EDGE('',*,*,#18351,.F.); #25131=ORIENTED_EDGE('',*,*,#18696,.F.); #25132=ORIENTED_EDGE('',*,*,#18697,.F.); #25133=ORIENTED_EDGE('',*,*,#18698,.F.); #25134=ORIENTED_EDGE('',*,*,#18699,.F.); #25135=ORIENTED_EDGE('',*,*,#18700,.F.); #25136=ORIENTED_EDGE('',*,*,#18701,.F.); #25137=ORIENTED_EDGE('',*,*,#18702,.F.); #25138=ORIENTED_EDGE('',*,*,#18703,.F.); #25139=ORIENTED_EDGE('',*,*,#18704,.F.); #25140=ORIENTED_EDGE('',*,*,#18705,.F.); #25141=ORIENTED_EDGE('',*,*,#18706,.F.); #25142=ORIENTED_EDGE('',*,*,#18707,.F.); #25143=ORIENTED_EDGE('',*,*,#18708,.T.); #25144=ORIENTED_EDGE('',*,*,#18709,.T.); #25145=ORIENTED_EDGE('',*,*,#18710,.F.); #25146=ORIENTED_EDGE('',*,*,#18711,.F.); #25147=ORIENTED_EDGE('',*,*,#18712,.T.); #25148=ORIENTED_EDGE('',*,*,#18708,.F.); #25149=ORIENTED_EDGE('',*,*,#18713,.F.); #25150=ORIENTED_EDGE('',*,*,#18714,.T.); #25151=ORIENTED_EDGE('',*,*,#18715,.T.); #25152=ORIENTED_EDGE('',*,*,#18716,.T.); #25153=ORIENTED_EDGE('',*,*,#18714,.F.); #25154=ORIENTED_EDGE('',*,*,#18717,.F.); #25155=ORIENTED_EDGE('',*,*,#18718,.T.); #25156=ORIENTED_EDGE('',*,*,#18715,.F.); #25157=ORIENTED_EDGE('',*,*,#18719,.F.); #25158=ORIENTED_EDGE('',*,*,#18720,.T.); #25159=ORIENTED_EDGE('',*,*,#18721,.T.); #25160=ORIENTED_EDGE('',*,*,#18722,.T.); #25161=ORIENTED_EDGE('',*,*,#18720,.F.); #25162=ORIENTED_EDGE('',*,*,#18723,.F.); #25163=ORIENTED_EDGE('',*,*,#18724,.T.); #25164=ORIENTED_EDGE('',*,*,#18721,.F.); #25165=ORIENTED_EDGE('',*,*,#18725,.F.); #25166=ORIENTED_EDGE('',*,*,#18726,.T.); #25167=ORIENTED_EDGE('',*,*,#18727,.T.); #25168=ORIENTED_EDGE('',*,*,#18728,.T.); #25169=ORIENTED_EDGE('',*,*,#18726,.F.); #25170=ORIENTED_EDGE('',*,*,#18729,.F.); #25171=ORIENTED_EDGE('',*,*,#18730,.T.); #25172=ORIENTED_EDGE('',*,*,#18727,.F.); #25173=ORIENTED_EDGE('',*,*,#18731,.F.); #25174=ORIENTED_EDGE('',*,*,#18732,.T.); #25175=ORIENTED_EDGE('',*,*,#18733,.T.); #25176=ORIENTED_EDGE('',*,*,#18734,.T.); #25177=ORIENTED_EDGE('',*,*,#18732,.F.); #25178=ORIENTED_EDGE('',*,*,#18735,.F.); #25179=ORIENTED_EDGE('',*,*,#18736,.T.); #25180=ORIENTED_EDGE('',*,*,#18733,.F.); #25181=ORIENTED_EDGE('',*,*,#18737,.F.); #25182=ORIENTED_EDGE('',*,*,#18738,.T.); #25183=ORIENTED_EDGE('',*,*,#18739,.T.); #25184=ORIENTED_EDGE('',*,*,#18740,.T.); #25185=ORIENTED_EDGE('',*,*,#18738,.F.); #25186=ORIENTED_EDGE('',*,*,#18741,.F.); #25187=ORIENTED_EDGE('',*,*,#18742,.T.); #25188=ORIENTED_EDGE('',*,*,#18739,.F.); #25189=ORIENTED_EDGE('',*,*,#18743,.F.); #25190=ORIENTED_EDGE('',*,*,#18710,.T.); #25191=ORIENTED_EDGE('',*,*,#18742,.F.); #25192=ORIENTED_EDGE('',*,*,#18709,.F.); #25193=ORIENTED_EDGE('',*,*,#18712,.F.); #25194=ORIENTED_EDGE('',*,*,#18716,.F.); #25195=ORIENTED_EDGE('',*,*,#18718,.F.); #25196=ORIENTED_EDGE('',*,*,#18722,.F.); #25197=ORIENTED_EDGE('',*,*,#18724,.F.); #25198=ORIENTED_EDGE('',*,*,#18728,.F.); #25199=ORIENTED_EDGE('',*,*,#18730,.F.); #25200=ORIENTED_EDGE('',*,*,#18734,.F.); #25201=ORIENTED_EDGE('',*,*,#18736,.F.); #25202=ORIENTED_EDGE('',*,*,#18740,.F.); #25203=ORIENTED_EDGE('',*,*,#18743,.T.); #25204=ORIENTED_EDGE('',*,*,#18741,.T.); #25205=ORIENTED_EDGE('',*,*,#18737,.T.); #25206=ORIENTED_EDGE('',*,*,#18735,.T.); #25207=ORIENTED_EDGE('',*,*,#18731,.T.); #25208=ORIENTED_EDGE('',*,*,#18729,.T.); #25209=ORIENTED_EDGE('',*,*,#18725,.T.); #25210=ORIENTED_EDGE('',*,*,#18723,.T.); #25211=ORIENTED_EDGE('',*,*,#18719,.T.); #25212=ORIENTED_EDGE('',*,*,#18717,.T.); #25213=ORIENTED_EDGE('',*,*,#18713,.T.); #25214=ORIENTED_EDGE('',*,*,#18711,.T.); #25215=ORIENTED_EDGE('',*,*,#18744,.F.); #25216=ORIENTED_EDGE('',*,*,#18745,.F.); #25217=ORIENTED_EDGE('',*,*,#18746,.F.); #25218=ORIENTED_EDGE('',*,*,#18747,.F.); #25219=ORIENTED_EDGE('',*,*,#18748,.F.); #25220=ORIENTED_EDGE('',*,*,#18749,.F.); #25221=ORIENTED_EDGE('',*,*,#18750,.F.); #25222=ORIENTED_EDGE('',*,*,#18751,.F.); #25223=ORIENTED_EDGE('',*,*,#18752,.F.); #25224=ORIENTED_EDGE('',*,*,#18753,.F.); #25225=ORIENTED_EDGE('',*,*,#18754,.F.); #25226=ORIENTED_EDGE('',*,*,#18755,.F.); #25227=ORIENTED_EDGE('',*,*,#18756,.T.); #25228=ORIENTED_EDGE('',*,*,#18696,.T.); #25229=ORIENTED_EDGE('',*,*,#18757,.F.); #25230=ORIENTED_EDGE('',*,*,#18746,.T.); #25231=ORIENTED_EDGE('',*,*,#18747,.T.); #25232=ORIENTED_EDGE('',*,*,#18757,.T.); #25233=ORIENTED_EDGE('',*,*,#18707,.T.); #25234=ORIENTED_EDGE('',*,*,#18758,.F.); #25235=ORIENTED_EDGE('',*,*,#18758,.T.); #25236=ORIENTED_EDGE('',*,*,#18706,.T.); #25237=ORIENTED_EDGE('',*,*,#18759,.F.); #25238=ORIENTED_EDGE('',*,*,#18748,.T.); #25239=ORIENTED_EDGE('',*,*,#18749,.T.); #25240=ORIENTED_EDGE('',*,*,#18759,.T.); #25241=ORIENTED_EDGE('',*,*,#18705,.T.); #25242=ORIENTED_EDGE('',*,*,#18760,.F.); #25243=ORIENTED_EDGE('',*,*,#18760,.T.); #25244=ORIENTED_EDGE('',*,*,#18704,.T.); #25245=ORIENTED_EDGE('',*,*,#18761,.F.); #25246=ORIENTED_EDGE('',*,*,#18750,.T.); #25247=ORIENTED_EDGE('',*,*,#18751,.T.); #25248=ORIENTED_EDGE('',*,*,#18761,.T.); #25249=ORIENTED_EDGE('',*,*,#18703,.T.); #25250=ORIENTED_EDGE('',*,*,#18762,.F.); #25251=ORIENTED_EDGE('',*,*,#18762,.T.); #25252=ORIENTED_EDGE('',*,*,#18702,.T.); #25253=ORIENTED_EDGE('',*,*,#18763,.F.); #25254=ORIENTED_EDGE('',*,*,#18752,.T.); #25255=ORIENTED_EDGE('',*,*,#18753,.T.); #25256=ORIENTED_EDGE('',*,*,#18763,.T.); #25257=ORIENTED_EDGE('',*,*,#18701,.T.); #25258=ORIENTED_EDGE('',*,*,#18764,.F.); #25259=ORIENTED_EDGE('',*,*,#18764,.T.); #25260=ORIENTED_EDGE('',*,*,#18700,.T.); #25261=ORIENTED_EDGE('',*,*,#18765,.F.); #25262=ORIENTED_EDGE('',*,*,#18754,.T.); #25263=ORIENTED_EDGE('',*,*,#18755,.T.); #25264=ORIENTED_EDGE('',*,*,#18765,.T.); #25265=ORIENTED_EDGE('',*,*,#18699,.T.); #25266=ORIENTED_EDGE('',*,*,#18766,.F.); #25267=ORIENTED_EDGE('',*,*,#18766,.T.); #25268=ORIENTED_EDGE('',*,*,#18698,.T.); #25269=ORIENTED_EDGE('',*,*,#18767,.F.); #25270=ORIENTED_EDGE('',*,*,#18744,.T.); #25271=ORIENTED_EDGE('',*,*,#18745,.T.); #25272=ORIENTED_EDGE('',*,*,#18767,.T.); #25273=ORIENTED_EDGE('',*,*,#18697,.T.); #25274=ORIENTED_EDGE('',*,*,#18756,.F.); #25275=ORIENTED_EDGE('',*,*,#18768,.F.); #25276=ORIENTED_EDGE('',*,*,#18769,.F.); #25277=ORIENTED_EDGE('',*,*,#18770,.F.); #25278=ORIENTED_EDGE('',*,*,#18771,.F.); #25279=ORIENTED_EDGE('',*,*,#18772,.F.); #25280=ORIENTED_EDGE('',*,*,#18773,.F.); #25281=ORIENTED_EDGE('',*,*,#18774,.F.); #25282=ORIENTED_EDGE('',*,*,#18775,.F.); #25283=ORIENTED_EDGE('',*,*,#18776,.T.); #25284=ORIENTED_EDGE('',*,*,#18777,.T.); #25285=ORIENTED_EDGE('',*,*,#18778,.T.); #25286=ORIENTED_EDGE('',*,*,#18779,.T.); #25287=ORIENTED_EDGE('',*,*,#18780,.T.); #25288=ORIENTED_EDGE('',*,*,#18781,.T.); #25289=ORIENTED_EDGE('',*,*,#18782,.T.); #25290=ORIENTED_EDGE('',*,*,#18783,.T.); #25291=ORIENTED_EDGE('',*,*,#18769,.T.); #25292=ORIENTED_EDGE('',*,*,#18784,.F.); #25293=ORIENTED_EDGE('',*,*,#18776,.F.); #25294=ORIENTED_EDGE('',*,*,#18785,.T.); #25295=ORIENTED_EDGE('',*,*,#18770,.T.); #25296=ORIENTED_EDGE('',*,*,#18785,.F.); #25297=ORIENTED_EDGE('',*,*,#18783,.F.); #25298=ORIENTED_EDGE('',*,*,#18786,.T.); #25299=ORIENTED_EDGE('',*,*,#18771,.T.); #25300=ORIENTED_EDGE('',*,*,#18786,.F.); #25301=ORIENTED_EDGE('',*,*,#18782,.F.); #25302=ORIENTED_EDGE('',*,*,#18787,.T.); #25303=ORIENTED_EDGE('',*,*,#18772,.T.); #25304=ORIENTED_EDGE('',*,*,#18787,.F.); #25305=ORIENTED_EDGE('',*,*,#18781,.F.); #25306=ORIENTED_EDGE('',*,*,#18788,.T.); #25307=ORIENTED_EDGE('',*,*,#18773,.T.); #25308=ORIENTED_EDGE('',*,*,#18788,.F.); #25309=ORIENTED_EDGE('',*,*,#18780,.F.); #25310=ORIENTED_EDGE('',*,*,#18789,.T.); #25311=ORIENTED_EDGE('',*,*,#18790,.T.); #25312=ORIENTED_EDGE('',*,*,#18774,.T.); #25313=ORIENTED_EDGE('',*,*,#18789,.F.); #25314=ORIENTED_EDGE('',*,*,#18779,.F.); #25315=ORIENTED_EDGE('',*,*,#18775,.T.); #25316=ORIENTED_EDGE('',*,*,#18790,.F.); #25317=ORIENTED_EDGE('',*,*,#18778,.F.); #25318=ORIENTED_EDGE('',*,*,#18791,.T.); #25319=ORIENTED_EDGE('',*,*,#18768,.T.); #25320=ORIENTED_EDGE('',*,*,#18791,.F.); #25321=ORIENTED_EDGE('',*,*,#18777,.F.); #25322=ORIENTED_EDGE('',*,*,#18784,.T.); #25323=ORIENTED_EDGE('',*,*,#18792,.T.); #25324=ORIENTED_EDGE('',*,*,#18793,.T.); #25325=ORIENTED_EDGE('',*,*,#18794,.T.); #25326=ORIENTED_EDGE('',*,*,#18795,.T.); #25327=ORIENTED_EDGE('',*,*,#18796,.T.); #25328=ORIENTED_EDGE('',*,*,#18797,.T.); #25329=ORIENTED_EDGE('',*,*,#18798,.T.); #25330=ORIENTED_EDGE('',*,*,#18799,.T.); #25331=ORIENTED_EDGE('',*,*,#18800,.F.); #25332=ORIENTED_EDGE('',*,*,#18801,.F.); #25333=ORIENTED_EDGE('',*,*,#18802,.F.); #25334=ORIENTED_EDGE('',*,*,#18803,.F.); #25335=ORIENTED_EDGE('',*,*,#18804,.F.); #25336=ORIENTED_EDGE('',*,*,#18805,.F.); #25337=ORIENTED_EDGE('',*,*,#18806,.F.); #25338=ORIENTED_EDGE('',*,*,#18807,.F.); #25339=ORIENTED_EDGE('',*,*,#18799,.F.); #25340=ORIENTED_EDGE('',*,*,#18808,.F.); #25341=ORIENTED_EDGE('',*,*,#18802,.T.); #25342=ORIENTED_EDGE('',*,*,#18809,.T.); #25343=ORIENTED_EDGE('',*,*,#18798,.F.); #25344=ORIENTED_EDGE('',*,*,#18810,.F.); #25345=ORIENTED_EDGE('',*,*,#18803,.T.); #25346=ORIENTED_EDGE('',*,*,#18808,.T.); #25347=ORIENTED_EDGE('',*,*,#18797,.F.); #25348=ORIENTED_EDGE('',*,*,#18811,.F.); #25349=ORIENTED_EDGE('',*,*,#18804,.T.); #25350=ORIENTED_EDGE('',*,*,#18810,.T.); #25351=ORIENTED_EDGE('',*,*,#18796,.F.); #25352=ORIENTED_EDGE('',*,*,#18812,.F.); #25353=ORIENTED_EDGE('',*,*,#18805,.T.); #25354=ORIENTED_EDGE('',*,*,#18811,.T.); #25355=ORIENTED_EDGE('',*,*,#18795,.F.); #25356=ORIENTED_EDGE('',*,*,#18813,.F.); #25357=ORIENTED_EDGE('',*,*,#18806,.T.); #25358=ORIENTED_EDGE('',*,*,#18812,.T.); #25359=ORIENTED_EDGE('',*,*,#18813,.T.); #25360=ORIENTED_EDGE('',*,*,#18794,.F.); #25361=ORIENTED_EDGE('',*,*,#18814,.F.); #25362=ORIENTED_EDGE('',*,*,#18807,.T.); #25363=ORIENTED_EDGE('',*,*,#18793,.F.); #25364=ORIENTED_EDGE('',*,*,#18815,.F.); #25365=ORIENTED_EDGE('',*,*,#18800,.T.); #25366=ORIENTED_EDGE('',*,*,#18814,.T.); #25367=ORIENTED_EDGE('',*,*,#18792,.F.); #25368=ORIENTED_EDGE('',*,*,#18809,.F.); #25369=ORIENTED_EDGE('',*,*,#18801,.T.); #25370=ORIENTED_EDGE('',*,*,#18815,.T.); #25371=ORIENTED_EDGE('',*,*,#18816,.T.); #25372=ORIENTED_EDGE('',*,*,#18817,.T.); #25373=ORIENTED_EDGE('',*,*,#18818,.T.); #25374=ORIENTED_EDGE('',*,*,#18819,.T.); #25375=ORIENTED_EDGE('',*,*,#18820,.T.); #25376=ORIENTED_EDGE('',*,*,#18821,.T.); #25377=ORIENTED_EDGE('',*,*,#18822,.T.); #25378=ORIENTED_EDGE('',*,*,#18823,.T.); #25379=ORIENTED_EDGE('',*,*,#18824,.F.); #25380=ORIENTED_EDGE('',*,*,#18825,.F.); #25381=ORIENTED_EDGE('',*,*,#18826,.F.); #25382=ORIENTED_EDGE('',*,*,#18827,.F.); #25383=ORIENTED_EDGE('',*,*,#18828,.F.); #25384=ORIENTED_EDGE('',*,*,#18829,.F.); #25385=ORIENTED_EDGE('',*,*,#18830,.F.); #25386=ORIENTED_EDGE('',*,*,#18831,.F.); #25387=ORIENTED_EDGE('',*,*,#18817,.F.); #25388=ORIENTED_EDGE('',*,*,#18832,.F.); #25389=ORIENTED_EDGE('',*,*,#18824,.T.); #25390=ORIENTED_EDGE('',*,*,#18833,.T.); #25391=ORIENTED_EDGE('',*,*,#18834,.T.); #25392=ORIENTED_EDGE('',*,*,#18818,.F.); #25393=ORIENTED_EDGE('',*,*,#18833,.F.); #25394=ORIENTED_EDGE('',*,*,#18831,.T.); #25395=ORIENTED_EDGE('',*,*,#18819,.F.); #25396=ORIENTED_EDGE('',*,*,#18834,.F.); #25397=ORIENTED_EDGE('',*,*,#18830,.T.); #25398=ORIENTED_EDGE('',*,*,#18835,.T.); #25399=ORIENTED_EDGE('',*,*,#18820,.F.); #25400=ORIENTED_EDGE('',*,*,#18835,.F.); #25401=ORIENTED_EDGE('',*,*,#18829,.T.); #25402=ORIENTED_EDGE('',*,*,#18836,.T.); #25403=ORIENTED_EDGE('',*,*,#18821,.F.); #25404=ORIENTED_EDGE('',*,*,#18836,.F.); #25405=ORIENTED_EDGE('',*,*,#18828,.T.); #25406=ORIENTED_EDGE('',*,*,#18837,.T.); #25407=ORIENTED_EDGE('',*,*,#18822,.F.); #25408=ORIENTED_EDGE('',*,*,#18837,.F.); #25409=ORIENTED_EDGE('',*,*,#18827,.T.); #25410=ORIENTED_EDGE('',*,*,#18838,.T.); #25411=ORIENTED_EDGE('',*,*,#18823,.F.); #25412=ORIENTED_EDGE('',*,*,#18838,.F.); #25413=ORIENTED_EDGE('',*,*,#18826,.T.); #25414=ORIENTED_EDGE('',*,*,#18839,.T.); #25415=ORIENTED_EDGE('',*,*,#18816,.F.); #25416=ORIENTED_EDGE('',*,*,#18839,.F.); #25417=ORIENTED_EDGE('',*,*,#18825,.T.); #25418=ORIENTED_EDGE('',*,*,#18832,.T.); #25419=ORIENTED_EDGE('',*,*,#18840,.F.); #25420=ORIENTED_EDGE('',*,*,#18841,.F.); #25421=ORIENTED_EDGE('',*,*,#18842,.F.); #25422=ORIENTED_EDGE('',*,*,#18843,.F.); #25423=ORIENTED_EDGE('',*,*,#18844,.F.); #25424=ORIENTED_EDGE('',*,*,#18845,.F.); #25425=ORIENTED_EDGE('',*,*,#18846,.F.); #25426=ORIENTED_EDGE('',*,*,#18847,.F.); #25427=ORIENTED_EDGE('',*,*,#18848,.T.); #25428=ORIENTED_EDGE('',*,*,#18849,.T.); #25429=ORIENTED_EDGE('',*,*,#18850,.T.); #25430=ORIENTED_EDGE('',*,*,#18851,.T.); #25431=ORIENTED_EDGE('',*,*,#18852,.T.); #25432=ORIENTED_EDGE('',*,*,#18853,.T.); #25433=ORIENTED_EDGE('',*,*,#18854,.T.); #25434=ORIENTED_EDGE('',*,*,#18855,.T.); #25435=ORIENTED_EDGE('',*,*,#18847,.T.); #25436=ORIENTED_EDGE('',*,*,#18856,.F.); #25437=ORIENTED_EDGE('',*,*,#18850,.F.); #25438=ORIENTED_EDGE('',*,*,#18857,.T.); #25439=ORIENTED_EDGE('',*,*,#18856,.T.); #25440=ORIENTED_EDGE('',*,*,#18846,.T.); #25441=ORIENTED_EDGE('',*,*,#18858,.F.); #25442=ORIENTED_EDGE('',*,*,#18851,.F.); #25443=ORIENTED_EDGE('',*,*,#18845,.T.); #25444=ORIENTED_EDGE('',*,*,#18859,.F.); #25445=ORIENTED_EDGE('',*,*,#18852,.F.); #25446=ORIENTED_EDGE('',*,*,#18858,.T.); #25447=ORIENTED_EDGE('',*,*,#18844,.T.); #25448=ORIENTED_EDGE('',*,*,#18860,.F.); #25449=ORIENTED_EDGE('',*,*,#18853,.F.); #25450=ORIENTED_EDGE('',*,*,#18859,.T.); #25451=ORIENTED_EDGE('',*,*,#18843,.T.); #25452=ORIENTED_EDGE('',*,*,#18861,.F.); #25453=ORIENTED_EDGE('',*,*,#18854,.F.); #25454=ORIENTED_EDGE('',*,*,#18860,.T.); #25455=ORIENTED_EDGE('',*,*,#18842,.T.); #25456=ORIENTED_EDGE('',*,*,#18862,.F.); #25457=ORIENTED_EDGE('',*,*,#18855,.F.); #25458=ORIENTED_EDGE('',*,*,#18861,.T.); #25459=ORIENTED_EDGE('',*,*,#18841,.T.); #25460=ORIENTED_EDGE('',*,*,#18863,.F.); #25461=ORIENTED_EDGE('',*,*,#18848,.F.); #25462=ORIENTED_EDGE('',*,*,#18862,.T.); #25463=ORIENTED_EDGE('',*,*,#18840,.T.); #25464=ORIENTED_EDGE('',*,*,#18857,.F.); #25465=ORIENTED_EDGE('',*,*,#18849,.F.); #25466=ORIENTED_EDGE('',*,*,#18863,.T.); #25467=ORIENTED_EDGE('',*,*,#18864,.T.); #25468=ORIENTED_EDGE('',*,*,#18865,.F.); #25469=ORIENTED_EDGE('',*,*,#18866,.T.); #25470=ORIENTED_EDGE('',*,*,#18867,.F.); #25471=ORIENTED_EDGE('',*,*,#18868,.T.); #25472=ORIENTED_EDGE('',*,*,#18869,.F.); #25473=ORIENTED_EDGE('',*,*,#18866,.F.); #25474=ORIENTED_EDGE('',*,*,#18870,.F.); #25475=ORIENTED_EDGE('',*,*,#18871,.T.); #25476=ORIENTED_EDGE('',*,*,#18872,.F.); #25477=ORIENTED_EDGE('',*,*,#18864,.F.); #25478=ORIENTED_EDGE('',*,*,#18873,.F.); #25479=ORIENTED_EDGE('',*,*,#18868,.F.); #25480=ORIENTED_EDGE('',*,*,#18874,.F.); #25481=ORIENTED_EDGE('',*,*,#18871,.F.); #25482=ORIENTED_EDGE('',*,*,#18875,.F.); #25483=ORIENTED_EDGE('',*,*,#18873,.T.); #25484=ORIENTED_EDGE('',*,*,#18867,.T.); #25485=ORIENTED_EDGE('',*,*,#18869,.T.); #25486=ORIENTED_EDGE('',*,*,#18875,.T.); #25487=ORIENTED_EDGE('',*,*,#18876,.T.); #25488=ORIENTED_EDGE('',*,*,#18877,.F.); #25489=ORIENTED_EDGE('',*,*,#18865,.T.); #25490=ORIENTED_EDGE('',*,*,#18878,.T.); #25491=ORIENTED_EDGE('',*,*,#18878,.F.); #25492=ORIENTED_EDGE('',*,*,#18872,.T.); #25493=ORIENTED_EDGE('',*,*,#18879,.T.); #25494=ORIENTED_EDGE('',*,*,#18880,.T.); #25495=ORIENTED_EDGE('',*,*,#18881,.T.); #25496=ORIENTED_EDGE('',*,*,#18879,.F.); #25497=ORIENTED_EDGE('',*,*,#18874,.T.); #25498=ORIENTED_EDGE('',*,*,#18882,.T.); #25499=ORIENTED_EDGE('',*,*,#18882,.F.); #25500=ORIENTED_EDGE('',*,*,#18870,.T.); #25501=ORIENTED_EDGE('',*,*,#18877,.T.); #25502=ORIENTED_EDGE('',*,*,#18883,.T.); #25503=ORIENTED_EDGE('',*,*,#18884,.F.); #25504=ORIENTED_EDGE('',*,*,#18885,.F.); #25505=ORIENTED_EDGE('',*,*,#18886,.F.); #25506=ORIENTED_EDGE('',*,*,#18887,.F.); #25507=ORIENTED_EDGE('',*,*,#18888,.T.); #25508=ORIENTED_EDGE('',*,*,#18885,.T.); #25509=ORIENTED_EDGE('',*,*,#18889,.F.); #25510=ORIENTED_EDGE('',*,*,#18890,.F.); #25511=ORIENTED_EDGE('',*,*,#18891,.T.); #25512=ORIENTED_EDGE('',*,*,#18886,.T.); #25513=ORIENTED_EDGE('',*,*,#18888,.F.); #25514=ORIENTED_EDGE('',*,*,#18892,.F.); #25515=ORIENTED_EDGE('',*,*,#18893,.T.); #25516=ORIENTED_EDGE('',*,*,#18887,.T.); #25517=ORIENTED_EDGE('',*,*,#18891,.F.); #25518=ORIENTED_EDGE('',*,*,#18894,.F.); #25519=ORIENTED_EDGE('',*,*,#18884,.T.); #25520=ORIENTED_EDGE('',*,*,#18893,.F.); #25521=ORIENTED_EDGE('',*,*,#18895,.F.); #25522=ORIENTED_EDGE('',*,*,#18889,.T.); #25523=ORIENTED_EDGE('',*,*,#18895,.T.); #25524=ORIENTED_EDGE('',*,*,#18894,.T.); #25525=ORIENTED_EDGE('',*,*,#18892,.T.); #25526=ORIENTED_EDGE('',*,*,#18890,.T.); #25527=ORIENTED_EDGE('',*,*,#18883,.F.); #25528=ORIENTED_EDGE('',*,*,#18876,.F.); #25529=ORIENTED_EDGE('',*,*,#18880,.F.); #25530=ORIENTED_EDGE('',*,*,#18881,.F.); #25531=ORIENTED_EDGE('',*,*,#18896,.F.); #25532=ORIENTED_EDGE('',*,*,#18897,.F.); #25533=ORIENTED_EDGE('',*,*,#18898,.F.); #25534=ORIENTED_EDGE('',*,*,#18899,.F.); #25535=ORIENTED_EDGE('',*,*,#18900,.T.); #25536=ORIENTED_EDGE('',*,*,#18901,.T.); #25537=ORIENTED_EDGE('',*,*,#18902,.T.); #25538=ORIENTED_EDGE('',*,*,#18903,.T.); #25539=ORIENTED_EDGE('',*,*,#18897,.T.); #25540=ORIENTED_EDGE('',*,*,#18904,.F.); #25541=ORIENTED_EDGE('',*,*,#18900,.F.); #25542=ORIENTED_EDGE('',*,*,#18905,.T.); #25543=ORIENTED_EDGE('',*,*,#18898,.T.); #25544=ORIENTED_EDGE('',*,*,#18905,.F.); #25545=ORIENTED_EDGE('',*,*,#18903,.F.); #25546=ORIENTED_EDGE('',*,*,#18906,.T.); #25547=ORIENTED_EDGE('',*,*,#18899,.T.); #25548=ORIENTED_EDGE('',*,*,#18906,.F.); #25549=ORIENTED_EDGE('',*,*,#18902,.F.); #25550=ORIENTED_EDGE('',*,*,#18907,.T.); #25551=ORIENTED_EDGE('',*,*,#18896,.T.); #25552=ORIENTED_EDGE('',*,*,#18907,.F.); #25553=ORIENTED_EDGE('',*,*,#18901,.F.); #25554=ORIENTED_EDGE('',*,*,#18904,.T.); #25555=ORIENTED_EDGE('',*,*,#18908,.T.); #25556=ORIENTED_EDGE('',*,*,#18909,.T.); #25557=ORIENTED_EDGE('',*,*,#18910,.T.); #25558=ORIENTED_EDGE('',*,*,#18911,.T.); #25559=ORIENTED_EDGE('',*,*,#18912,.T.); #25560=ORIENTED_EDGE('',*,*,#18913,.T.); #25561=ORIENTED_EDGE('',*,*,#18914,.F.); #25562=ORIENTED_EDGE('',*,*,#18911,.F.); #25563=ORIENTED_EDGE('',*,*,#18915,.T.); #25564=ORIENTED_EDGE('',*,*,#18916,.T.); #25565=ORIENTED_EDGE('',*,*,#18917,.F.); #25566=ORIENTED_EDGE('',*,*,#18909,.F.); #25567=ORIENTED_EDGE('',*,*,#18918,.F.); #25568=ORIENTED_EDGE('',*,*,#18919,.F.); #25569=ORIENTED_EDGE('',*,*,#18920,.F.); #25570=ORIENTED_EDGE('',*,*,#18921,.F.); #25571=ORIENTED_EDGE('',*,*,#18922,.T.); #25572=ORIENTED_EDGE('',*,*,#18919,.T.); #25573=ORIENTED_EDGE('',*,*,#18923,.F.); #25574=ORIENTED_EDGE('',*,*,#18924,.F.); #25575=ORIENTED_EDGE('',*,*,#18915,.F.); #25576=ORIENTED_EDGE('',*,*,#18908,.F.); #25577=ORIENTED_EDGE('',*,*,#18914,.T.); #25578=ORIENTED_EDGE('',*,*,#18925,.F.); #25579=ORIENTED_EDGE('',*,*,#18926,.T.); #25580=ORIENTED_EDGE('',*,*,#18920,.T.); #25581=ORIENTED_EDGE('',*,*,#18922,.F.); #25582=ORIENTED_EDGE('',*,*,#18927,.F.); #25583=ORIENTED_EDGE('',*,*,#18928,.T.); #25584=ORIENTED_EDGE('',*,*,#18921,.T.); #25585=ORIENTED_EDGE('',*,*,#18926,.F.); #25586=ORIENTED_EDGE('',*,*,#18929,.F.); #25587=ORIENTED_EDGE('',*,*,#18912,.F.); #25588=ORIENTED_EDGE('',*,*,#18910,.F.); #25589=ORIENTED_EDGE('',*,*,#18917,.T.); #25590=ORIENTED_EDGE('',*,*,#18930,.F.); #25591=ORIENTED_EDGE('',*,*,#18918,.T.); #25592=ORIENTED_EDGE('',*,*,#18928,.F.); #25593=ORIENTED_EDGE('',*,*,#18931,.F.); #25594=ORIENTED_EDGE('',*,*,#18923,.T.); #25595=ORIENTED_EDGE('',*,*,#18913,.F.); #25596=ORIENTED_EDGE('',*,*,#18929,.T.); #25597=ORIENTED_EDGE('',*,*,#18927,.T.); #25598=ORIENTED_EDGE('',*,*,#18925,.T.); #25599=ORIENTED_EDGE('',*,*,#18916,.F.); #25600=ORIENTED_EDGE('',*,*,#18924,.T.); #25601=ORIENTED_EDGE('',*,*,#18931,.T.); #25602=ORIENTED_EDGE('',*,*,#18930,.T.); #25603=ORIENTED_EDGE('',*,*,#18932,.F.); #25604=ORIENTED_EDGE('',*,*,#18933,.F.); #25605=ORIENTED_EDGE('',*,*,#18934,.T.); #25606=ORIENTED_EDGE('',*,*,#18935,.T.); #25607=ORIENTED_EDGE('',*,*,#18936,.F.); #25608=ORIENTED_EDGE('',*,*,#18937,.F.); #25609=ORIENTED_EDGE('',*,*,#18935,.F.); #25610=ORIENTED_EDGE('',*,*,#18938,.T.); #25611=ORIENTED_EDGE('',*,*,#18939,.F.); #25612=ORIENTED_EDGE('',*,*,#18940,.T.); #25613=ORIENTED_EDGE('',*,*,#18933,.T.); #25614=ORIENTED_EDGE('',*,*,#18941,.F.); #25615=ORIENTED_EDGE('',*,*,#18942,.F.); #25616=ORIENTED_EDGE('',*,*,#18938,.F.); #25617=ORIENTED_EDGE('',*,*,#18934,.F.); #25618=ORIENTED_EDGE('',*,*,#18940,.F.); #25619=ORIENTED_EDGE('',*,*,#18943,.F.); #25620=ORIENTED_EDGE('',*,*,#18944,.F.); #25621=ORIENTED_EDGE('',*,*,#18945,.F.); #25622=ORIENTED_EDGE('',*,*,#18946,.T.); #25623=ORIENTED_EDGE('',*,*,#18947,.F.); #25624=ORIENTED_EDGE('',*,*,#18948,.T.); #25625=ORIENTED_EDGE('',*,*,#18949,.T.); #25626=ORIENTED_EDGE('',*,*,#18950,.F.); #25627=ORIENTED_EDGE('',*,*,#18951,.F.); #25628=ORIENTED_EDGE('',*,*,#18946,.F.); #25629=ORIENTED_EDGE('',*,*,#18952,.F.); #25630=ORIENTED_EDGE('',*,*,#18948,.F.); #25631=ORIENTED_EDGE('',*,*,#18953,.F.); #25632=ORIENTED_EDGE('',*,*,#18949,.F.); #25633=ORIENTED_EDGE('',*,*,#18952,.T.); #25634=ORIENTED_EDGE('',*,*,#18945,.T.); #25635=ORIENTED_EDGE('',*,*,#18954,.F.); #25636=ORIENTED_EDGE('',*,*,#18950,.T.); #25637=ORIENTED_EDGE('',*,*,#18953,.T.); #25638=ORIENTED_EDGE('',*,*,#18944,.T.); #25639=ORIENTED_EDGE('',*,*,#18955,.F.); #25640=ORIENTED_EDGE('',*,*,#18956,.F.); #25641=ORIENTED_EDGE('',*,*,#18957,.F.); #25642=ORIENTED_EDGE('',*,*,#18941,.T.); #25643=ORIENTED_EDGE('',*,*,#18932,.T.); #25644=ORIENTED_EDGE('',*,*,#18937,.T.); #25645=ORIENTED_EDGE('',*,*,#18958,.F.); #25646=ORIENTED_EDGE('',*,*,#18959,.F.); #25647=ORIENTED_EDGE('',*,*,#18960,.T.); #25648=ORIENTED_EDGE('',*,*,#18961,.T.); #25649=ORIENTED_EDGE('',*,*,#18962,.T.); #25650=ORIENTED_EDGE('',*,*,#18963,.T.); #25651=ORIENTED_EDGE('',*,*,#18959,.T.); #25652=ORIENTED_EDGE('',*,*,#18964,.F.); #25653=ORIENTED_EDGE('',*,*,#18960,.F.); #25654=ORIENTED_EDGE('',*,*,#18965,.T.); #25655=ORIENTED_EDGE('',*,*,#18955,.T.); #25656=ORIENTED_EDGE('',*,*,#18943,.T.); #25657=ORIENTED_EDGE('',*,*,#18951,.T.); #25658=ORIENTED_EDGE('',*,*,#18947,.T.); #25659=ORIENTED_EDGE('',*,*,#18954,.T.); #25660=ORIENTED_EDGE('',*,*,#18965,.F.); #25661=ORIENTED_EDGE('',*,*,#18963,.F.); #25662=ORIENTED_EDGE('',*,*,#18966,.T.); #25663=ORIENTED_EDGE('',*,*,#18956,.T.); #25664=ORIENTED_EDGE('',*,*,#18966,.F.); #25665=ORIENTED_EDGE('',*,*,#18962,.F.); #25666=ORIENTED_EDGE('',*,*,#18967,.T.); #25667=ORIENTED_EDGE('',*,*,#18942,.T.); #25668=ORIENTED_EDGE('',*,*,#18939,.T.); #25669=ORIENTED_EDGE('',*,*,#18957,.T.); #25670=ORIENTED_EDGE('',*,*,#18967,.F.); #25671=ORIENTED_EDGE('',*,*,#18961,.F.); #25672=ORIENTED_EDGE('',*,*,#18964,.T.); #25673=ORIENTED_EDGE('',*,*,#18958,.T.); #25674=ORIENTED_EDGE('',*,*,#18936,.T.); #25675=ORIENTED_EDGE('',*,*,#18968,.F.); #25676=ORIENTED_EDGE('',*,*,#18969,.F.); #25677=ORIENTED_EDGE('',*,*,#18970,.F.); #25678=ORIENTED_EDGE('',*,*,#18971,.F.); #25679=ORIENTED_EDGE('',*,*,#18972,.T.); #25680=ORIENTED_EDGE('',*,*,#18973,.T.); #25681=ORIENTED_EDGE('',*,*,#18974,.T.); #25682=ORIENTED_EDGE('',*,*,#18975,.T.); #25683=ORIENTED_EDGE('',*,*,#18969,.T.); #25684=ORIENTED_EDGE('',*,*,#18976,.F.); #25685=ORIENTED_EDGE('',*,*,#18972,.F.); #25686=ORIENTED_EDGE('',*,*,#18977,.T.); #25687=ORIENTED_EDGE('',*,*,#18970,.T.); #25688=ORIENTED_EDGE('',*,*,#18977,.F.); #25689=ORIENTED_EDGE('',*,*,#18975,.F.); #25690=ORIENTED_EDGE('',*,*,#18978,.T.); #25691=ORIENTED_EDGE('',*,*,#18971,.T.); #25692=ORIENTED_EDGE('',*,*,#18978,.F.); #25693=ORIENTED_EDGE('',*,*,#18974,.F.); #25694=ORIENTED_EDGE('',*,*,#18979,.T.); #25695=ORIENTED_EDGE('',*,*,#18968,.T.); #25696=ORIENTED_EDGE('',*,*,#18979,.F.); #25697=ORIENTED_EDGE('',*,*,#18973,.F.); #25698=ORIENTED_EDGE('',*,*,#18976,.T.); #25699=ORIENTED_EDGE('',*,*,#18980,.F.); #25700=ORIENTED_EDGE('',*,*,#18981,.F.); #25701=ORIENTED_EDGE('',*,*,#18982,.F.); #25702=ORIENTED_EDGE('',*,*,#18983,.F.); #25703=ORIENTED_EDGE('',*,*,#18984,.T.); #25704=ORIENTED_EDGE('',*,*,#18985,.T.); #25705=ORIENTED_EDGE('',*,*,#18986,.T.); #25706=ORIENTED_EDGE('',*,*,#18987,.T.); #25707=ORIENTED_EDGE('',*,*,#18981,.T.); #25708=ORIENTED_EDGE('',*,*,#18988,.F.); #25709=ORIENTED_EDGE('',*,*,#18984,.F.); #25710=ORIENTED_EDGE('',*,*,#18989,.T.); #25711=ORIENTED_EDGE('',*,*,#18982,.T.); #25712=ORIENTED_EDGE('',*,*,#18989,.F.); #25713=ORIENTED_EDGE('',*,*,#18987,.F.); #25714=ORIENTED_EDGE('',*,*,#18990,.T.); #25715=ORIENTED_EDGE('',*,*,#18983,.T.); #25716=ORIENTED_EDGE('',*,*,#18990,.F.); #25717=ORIENTED_EDGE('',*,*,#18986,.F.); #25718=ORIENTED_EDGE('',*,*,#18991,.T.); #25719=ORIENTED_EDGE('',*,*,#18980,.T.); #25720=ORIENTED_EDGE('',*,*,#18991,.F.); #25721=ORIENTED_EDGE('',*,*,#18985,.F.); #25722=ORIENTED_EDGE('',*,*,#18988,.T.); #25723=ORIENTED_EDGE('',*,*,#18992,.F.); #25724=ORIENTED_EDGE('',*,*,#18993,.F.); #25725=ORIENTED_EDGE('',*,*,#18994,.F.); #25726=ORIENTED_EDGE('',*,*,#18995,.F.); #25727=ORIENTED_EDGE('',*,*,#18996,.T.); #25728=ORIENTED_EDGE('',*,*,#18997,.T.); #25729=ORIENTED_EDGE('',*,*,#18998,.T.); #25730=ORIENTED_EDGE('',*,*,#18999,.T.); #25731=ORIENTED_EDGE('',*,*,#18993,.T.); #25732=ORIENTED_EDGE('',*,*,#19000,.F.); #25733=ORIENTED_EDGE('',*,*,#18996,.F.); #25734=ORIENTED_EDGE('',*,*,#19001,.T.); #25735=ORIENTED_EDGE('',*,*,#18994,.T.); #25736=ORIENTED_EDGE('',*,*,#19001,.F.); #25737=ORIENTED_EDGE('',*,*,#18999,.F.); #25738=ORIENTED_EDGE('',*,*,#19002,.T.); #25739=ORIENTED_EDGE('',*,*,#18995,.T.); #25740=ORIENTED_EDGE('',*,*,#19002,.F.); #25741=ORIENTED_EDGE('',*,*,#18998,.F.); #25742=ORIENTED_EDGE('',*,*,#19003,.T.); #25743=ORIENTED_EDGE('',*,*,#18992,.T.); #25744=ORIENTED_EDGE('',*,*,#19003,.F.); #25745=ORIENTED_EDGE('',*,*,#18997,.F.); #25746=ORIENTED_EDGE('',*,*,#19000,.T.); #25747=ORIENTED_EDGE('',*,*,#19004,.F.); #25748=ORIENTED_EDGE('',*,*,#19005,.F.); #25749=ORIENTED_EDGE('',*,*,#19006,.F.); #25750=ORIENTED_EDGE('',*,*,#19007,.F.); #25751=ORIENTED_EDGE('',*,*,#19008,.T.); #25752=ORIENTED_EDGE('',*,*,#19009,.T.); #25753=ORIENTED_EDGE('',*,*,#19010,.T.); #25754=ORIENTED_EDGE('',*,*,#19011,.T.); #25755=ORIENTED_EDGE('',*,*,#19005,.T.); #25756=ORIENTED_EDGE('',*,*,#19012,.F.); #25757=ORIENTED_EDGE('',*,*,#19008,.F.); #25758=ORIENTED_EDGE('',*,*,#19013,.T.); #25759=ORIENTED_EDGE('',*,*,#19006,.T.); #25760=ORIENTED_EDGE('',*,*,#19013,.F.); #25761=ORIENTED_EDGE('',*,*,#19011,.F.); #25762=ORIENTED_EDGE('',*,*,#19014,.T.); #25763=ORIENTED_EDGE('',*,*,#19007,.T.); #25764=ORIENTED_EDGE('',*,*,#19014,.F.); #25765=ORIENTED_EDGE('',*,*,#19010,.F.); #25766=ORIENTED_EDGE('',*,*,#19015,.T.); #25767=ORIENTED_EDGE('',*,*,#19004,.T.); #25768=ORIENTED_EDGE('',*,*,#19015,.F.); #25769=ORIENTED_EDGE('',*,*,#19009,.F.); #25770=ORIENTED_EDGE('',*,*,#19012,.T.); #25771=ORIENTED_EDGE('',*,*,#19016,.F.); #25772=ORIENTED_EDGE('',*,*,#19017,.F.); #25773=ORIENTED_EDGE('',*,*,#19018,.F.); #25774=ORIENTED_EDGE('',*,*,#19019,.F.); #25775=ORIENTED_EDGE('',*,*,#19020,.T.); #25776=ORIENTED_EDGE('',*,*,#19021,.T.); #25777=ORIENTED_EDGE('',*,*,#19022,.T.); #25778=ORIENTED_EDGE('',*,*,#19023,.T.); #25779=ORIENTED_EDGE('',*,*,#19017,.T.); #25780=ORIENTED_EDGE('',*,*,#19024,.F.); #25781=ORIENTED_EDGE('',*,*,#19020,.F.); #25782=ORIENTED_EDGE('',*,*,#19025,.T.); #25783=ORIENTED_EDGE('',*,*,#19018,.T.); #25784=ORIENTED_EDGE('',*,*,#19025,.F.); #25785=ORIENTED_EDGE('',*,*,#19023,.F.); #25786=ORIENTED_EDGE('',*,*,#19026,.T.); #25787=ORIENTED_EDGE('',*,*,#19019,.T.); #25788=ORIENTED_EDGE('',*,*,#19026,.F.); #25789=ORIENTED_EDGE('',*,*,#19022,.F.); #25790=ORIENTED_EDGE('',*,*,#19027,.T.); #25791=ORIENTED_EDGE('',*,*,#19016,.T.); #25792=ORIENTED_EDGE('',*,*,#19027,.F.); #25793=ORIENTED_EDGE('',*,*,#19021,.F.); #25794=ORIENTED_EDGE('',*,*,#19024,.T.); #25795=ORIENTED_EDGE('',*,*,#19028,.F.); #25796=ORIENTED_EDGE('',*,*,#19029,.F.); #25797=ORIENTED_EDGE('',*,*,#19030,.F.); #25798=ORIENTED_EDGE('',*,*,#19031,.F.); #25799=ORIENTED_EDGE('',*,*,#19032,.T.); #25800=ORIENTED_EDGE('',*,*,#19033,.T.); #25801=ORIENTED_EDGE('',*,*,#19034,.T.); #25802=ORIENTED_EDGE('',*,*,#19035,.T.); #25803=ORIENTED_EDGE('',*,*,#19029,.T.); #25804=ORIENTED_EDGE('',*,*,#19036,.F.); #25805=ORIENTED_EDGE('',*,*,#19032,.F.); #25806=ORIENTED_EDGE('',*,*,#19037,.T.); #25807=ORIENTED_EDGE('',*,*,#19030,.T.); #25808=ORIENTED_EDGE('',*,*,#19037,.F.); #25809=ORIENTED_EDGE('',*,*,#19035,.F.); #25810=ORIENTED_EDGE('',*,*,#19038,.T.); #25811=ORIENTED_EDGE('',*,*,#19031,.T.); #25812=ORIENTED_EDGE('',*,*,#19038,.F.); #25813=ORIENTED_EDGE('',*,*,#19034,.F.); #25814=ORIENTED_EDGE('',*,*,#19039,.T.); #25815=ORIENTED_EDGE('',*,*,#19028,.T.); #25816=ORIENTED_EDGE('',*,*,#19039,.F.); #25817=ORIENTED_EDGE('',*,*,#19033,.F.); #25818=ORIENTED_EDGE('',*,*,#19036,.T.); #25819=ORIENTED_EDGE('',*,*,#19040,.F.); #25820=ORIENTED_EDGE('',*,*,#19041,.F.); #25821=ORIENTED_EDGE('',*,*,#19042,.F.); #25822=ORIENTED_EDGE('',*,*,#19043,.F.); #25823=ORIENTED_EDGE('',*,*,#19044,.T.); #25824=ORIENTED_EDGE('',*,*,#19045,.T.); #25825=ORIENTED_EDGE('',*,*,#19046,.T.); #25826=ORIENTED_EDGE('',*,*,#19047,.T.); #25827=ORIENTED_EDGE('',*,*,#19041,.T.); #25828=ORIENTED_EDGE('',*,*,#19048,.F.); #25829=ORIENTED_EDGE('',*,*,#19044,.F.); #25830=ORIENTED_EDGE('',*,*,#19049,.T.); #25831=ORIENTED_EDGE('',*,*,#19042,.T.); #25832=ORIENTED_EDGE('',*,*,#19049,.F.); #25833=ORIENTED_EDGE('',*,*,#19047,.F.); #25834=ORIENTED_EDGE('',*,*,#19050,.T.); #25835=ORIENTED_EDGE('',*,*,#19043,.T.); #25836=ORIENTED_EDGE('',*,*,#19050,.F.); #25837=ORIENTED_EDGE('',*,*,#19046,.F.); #25838=ORIENTED_EDGE('',*,*,#19051,.T.); #25839=ORIENTED_EDGE('',*,*,#19040,.T.); #25840=ORIENTED_EDGE('',*,*,#19051,.F.); #25841=ORIENTED_EDGE('',*,*,#19045,.F.); #25842=ORIENTED_EDGE('',*,*,#19048,.T.); #25843=ORIENTED_EDGE('',*,*,#19052,.F.); #25844=ORIENTED_EDGE('',*,*,#19053,.F.); #25845=ORIENTED_EDGE('',*,*,#19054,.F.); #25846=ORIENTED_EDGE('',*,*,#19055,.F.); #25847=ORIENTED_EDGE('',*,*,#19056,.T.); #25848=ORIENTED_EDGE('',*,*,#19057,.F.); #25849=ORIENTED_EDGE('',*,*,#19058,.F.); #25850=ORIENTED_EDGE('',*,*,#19059,.F.); #25851=ORIENTED_EDGE('',*,*,#19060,.T.); #25852=ORIENTED_EDGE('',*,*,#19061,.F.); #25853=ORIENTED_EDGE('',*,*,#19062,.F.); #25854=ORIENTED_EDGE('',*,*,#19063,.T.); #25855=ORIENTED_EDGE('',*,*,#19064,.T.); #25856=ORIENTED_EDGE('',*,*,#19056,.F.); #25857=ORIENTED_EDGE('',*,*,#19065,.F.); #25858=ORIENTED_EDGE('',*,*,#19066,.T.); #25859=ORIENTED_EDGE('',*,*,#19067,.F.); #25860=ORIENTED_EDGE('',*,*,#19052,.T.); #25861=ORIENTED_EDGE('',*,*,#19068,.F.); #25862=ORIENTED_EDGE('',*,*,#19069,.F.); #25863=ORIENTED_EDGE('',*,*,#19070,.F.); #25864=ORIENTED_EDGE('',*,*,#19071,.F.); #25865=ORIENTED_EDGE('',*,*,#19072,.F.); #25866=ORIENTED_EDGE('',*,*,#19073,.F.); #25867=ORIENTED_EDGE('',*,*,#19074,.F.); #25868=ORIENTED_EDGE('',*,*,#19075,.F.); #25869=ORIENTED_EDGE('',*,*,#19076,.F.); #25870=ORIENTED_EDGE('',*,*,#19077,.F.); #25871=ORIENTED_EDGE('',*,*,#19078,.F.); #25872=ORIENTED_EDGE('',*,*,#19077,.T.); #25873=ORIENTED_EDGE('',*,*,#19079,.T.); #25874=ORIENTED_EDGE('',*,*,#19080,.F.); #25875=ORIENTED_EDGE('',*,*,#19081,.F.); #25876=ORIENTED_EDGE('',*,*,#19082,.F.); #25877=ORIENTED_EDGE('',*,*,#19080,.T.); #25878=ORIENTED_EDGE('',*,*,#19083,.F.); #25879=ORIENTED_EDGE('',*,*,#19079,.F.); #25880=ORIENTED_EDGE('',*,*,#19076,.T.); #25881=ORIENTED_EDGE('',*,*,#19084,.T.); #25882=ORIENTED_EDGE('',*,*,#19085,.F.); #25883=ORIENTED_EDGE('',*,*,#19083,.T.); #25884=ORIENTED_EDGE('',*,*,#19085,.T.); #25885=ORIENTED_EDGE('',*,*,#19086,.T.); #25886=ORIENTED_EDGE('',*,*,#19087,.T.); #25887=ORIENTED_EDGE('',*,*,#19081,.T.); #25888=ORIENTED_EDGE('',*,*,#19088,.T.); #25889=ORIENTED_EDGE('',*,*,#19089,.T.); #25890=ORIENTED_EDGE('',*,*,#19090,.T.); #25891=ORIENTED_EDGE('',*,*,#19091,.T.); #25892=ORIENTED_EDGE('',*,*,#19082,.T.); #25893=ORIENTED_EDGE('',*,*,#19087,.F.); #25894=ORIENTED_EDGE('',*,*,#19092,.F.); #25895=ORIENTED_EDGE('',*,*,#19074,.T.); #25896=ORIENTED_EDGE('',*,*,#19078,.T.); #25897=ORIENTED_EDGE('',*,*,#19075,.T.); #25898=ORIENTED_EDGE('',*,*,#19092,.T.); #25899=ORIENTED_EDGE('',*,*,#19086,.F.); #25900=ORIENTED_EDGE('',*,*,#19084,.F.); #25901=ORIENTED_EDGE('',*,*,#19091,.F.); #25902=ORIENTED_EDGE('',*,*,#19093,.F.); #25903=ORIENTED_EDGE('',*,*,#19094,.T.); #25904=ORIENTED_EDGE('',*,*,#19095,.F.); #25905=ORIENTED_EDGE('',*,*,#19095,.T.); #25906=ORIENTED_EDGE('',*,*,#19096,.F.); #25907=ORIENTED_EDGE('',*,*,#19073,.T.); #25908=ORIENTED_EDGE('',*,*,#19097,.T.); #25909=ORIENTED_EDGE('',*,*,#19088,.F.); #25910=ORIENTED_EDGE('',*,*,#19072,.T.); #25911=ORIENTED_EDGE('',*,*,#19098,.T.); #25912=ORIENTED_EDGE('',*,*,#19089,.F.); #25913=ORIENTED_EDGE('',*,*,#19097,.F.); #25914=ORIENTED_EDGE('',*,*,#19093,.T.); #25915=ORIENTED_EDGE('',*,*,#19090,.F.); #25916=ORIENTED_EDGE('',*,*,#19098,.F.); #25917=ORIENTED_EDGE('',*,*,#19071,.T.); #25918=ORIENTED_EDGE('',*,*,#19099,.T.); #25919=ORIENTED_EDGE('',*,*,#19094,.F.); #25920=ORIENTED_EDGE('',*,*,#19099,.F.); #25921=ORIENTED_EDGE('',*,*,#19070,.T.); #25922=ORIENTED_EDGE('',*,*,#19096,.T.); #25923=ORIENTED_EDGE('',*,*,#19100,.F.); #25924=ORIENTED_EDGE('',*,*,#19101,.F.); #25925=ORIENTED_EDGE('',*,*,#19069,.T.); #25926=ORIENTED_EDGE('',*,*,#19102,.F.); #25927=ORIENTED_EDGE('',*,*,#19103,.T.); #25928=ORIENTED_EDGE('',*,*,#19104,.F.); #25929=ORIENTED_EDGE('',*,*,#19105,.F.); #25930=ORIENTED_EDGE('',*,*,#19106,.T.); #25931=ORIENTED_EDGE('',*,*,#19107,.T.); #25932=ORIENTED_EDGE('',*,*,#19102,.T.); #25933=ORIENTED_EDGE('',*,*,#19068,.T.); #25934=ORIENTED_EDGE('',*,*,#19059,.T.); #25935=ORIENTED_EDGE('',*,*,#19108,.T.); #25936=ORIENTED_EDGE('',*,*,#19109,.F.); #25937=ORIENTED_EDGE('',*,*,#19110,.T.); #25938=ORIENTED_EDGE('',*,*,#19111,.F.); #25939=ORIENTED_EDGE('',*,*,#19112,.F.); #25940=ORIENTED_EDGE('',*,*,#19113,.T.); #25941=ORIENTED_EDGE('',*,*,#19114,.T.); #25942=ORIENTED_EDGE('',*,*,#19115,.F.); #25943=ORIENTED_EDGE('',*,*,#19116,.F.); #25944=ORIENTED_EDGE('',*,*,#19117,.F.); #25945=ORIENTED_EDGE('',*,*,#19118,.T.); #25946=ORIENTED_EDGE('',*,*,#19119,.T.); #25947=ORIENTED_EDGE('',*,*,#19120,.F.); #25948=ORIENTED_EDGE('',*,*,#19121,.T.); #25949=ORIENTED_EDGE('',*,*,#19122,.F.); #25950=ORIENTED_EDGE('',*,*,#19123,.T.); #25951=ORIENTED_EDGE('',*,*,#19124,.T.); #25952=ORIENTED_EDGE('',*,*,#19125,.T.); #25953=ORIENTED_EDGE('',*,*,#19126,.F.); #25954=ORIENTED_EDGE('',*,*,#19127,.T.); #25955=ORIENTED_EDGE('',*,*,#19128,.F.); #25956=ORIENTED_EDGE('',*,*,#19129,.T.); #25957=ORIENTED_EDGE('',*,*,#19130,.F.); #25958=ORIENTED_EDGE('',*,*,#19131,.T.); #25959=ORIENTED_EDGE('',*,*,#19132,.T.); #25960=ORIENTED_EDGE('',*,*,#19133,.T.); #25961=ORIENTED_EDGE('',*,*,#19134,.T.); #25962=ORIENTED_EDGE('',*,*,#19135,.F.); #25963=ORIENTED_EDGE('',*,*,#19136,.T.); #25964=ORIENTED_EDGE('',*,*,#19137,.T.); #25965=ORIENTED_EDGE('',*,*,#19134,.F.); #25966=ORIENTED_EDGE('',*,*,#19137,.F.); #25967=ORIENTED_EDGE('',*,*,#19138,.T.); #25968=ORIENTED_EDGE('',*,*,#19139,.T.); #25969=ORIENTED_EDGE('',*,*,#19131,.F.); #25970=ORIENTED_EDGE('',*,*,#19139,.F.); #25971=ORIENTED_EDGE('',*,*,#19140,.T.); #25972=ORIENTED_EDGE('',*,*,#19141,.T.); #25973=ORIENTED_EDGE('',*,*,#19132,.F.); #25974=ORIENTED_EDGE('',*,*,#19133,.F.); #25975=ORIENTED_EDGE('',*,*,#19141,.F.); #25976=ORIENTED_EDGE('',*,*,#19142,.T.); #25977=ORIENTED_EDGE('',*,*,#19135,.T.); #25978=ORIENTED_EDGE('',*,*,#19143,.F.); #25979=ORIENTED_EDGE('',*,*,#19144,.T.); #25980=ORIENTED_EDGE('',*,*,#19145,.T.); #25981=ORIENTED_EDGE('',*,*,#19146,.F.); #25982=ORIENTED_EDGE('',*,*,#19060,.F.); #25983=ORIENTED_EDGE('',*,*,#19101,.T.); #25984=ORIENTED_EDGE('',*,*,#19147,.F.); #25985=ORIENTED_EDGE('',*,*,#19148,.F.); #25986=ORIENTED_EDGE('',*,*,#19149,.F.); #25987=ORIENTED_EDGE('',*,*,#19150,.F.); #25988=ORIENTED_EDGE('',*,*,#19136,.F.); #25989=ORIENTED_EDGE('',*,*,#19142,.F.); #25990=ORIENTED_EDGE('',*,*,#19140,.F.); #25991=ORIENTED_EDGE('',*,*,#19138,.F.); #25992=ORIENTED_EDGE('',*,*,#19151,.T.); #25993=ORIENTED_EDGE('',*,*,#19152,.F.); #25994=ORIENTED_EDGE('',*,*,#19153,.F.); #25995=ORIENTED_EDGE('',*,*,#19154,.F.); #25996=ORIENTED_EDGE('',*,*,#19150,.T.); #25997=ORIENTED_EDGE('',*,*,#19155,.T.); #25998=ORIENTED_EDGE('',*,*,#19156,.F.); #25999=ORIENTED_EDGE('',*,*,#19151,.F.); #26000=ORIENTED_EDGE('',*,*,#19157,.T.); #26001=ORIENTED_EDGE('',*,*,#19158,.T.); #26002=ORIENTED_EDGE('',*,*,#19159,.T.); #26003=ORIENTED_EDGE('',*,*,#19152,.T.); #26004=ORIENTED_EDGE('',*,*,#19156,.T.); #26005=ORIENTED_EDGE('',*,*,#19105,.T.); #26006=ORIENTED_EDGE('',*,*,#19160,.F.); #26007=ORIENTED_EDGE('',*,*,#19161,.F.); #26008=ORIENTED_EDGE('',*,*,#19162,.F.); #26009=ORIENTED_EDGE('',*,*,#19163,.F.); #26010=ORIENTED_EDGE('',*,*,#19164,.F.); #26011=ORIENTED_EDGE('',*,*,#19165,.F.); #26012=ORIENTED_EDGE('',*,*,#19163,.T.); #26013=ORIENTED_EDGE('',*,*,#19166,.F.); #26014=ORIENTED_EDGE('',*,*,#19162,.T.); #26015=ORIENTED_EDGE('',*,*,#19167,.F.); #26016=ORIENTED_EDGE('',*,*,#19168,.F.); #26017=ORIENTED_EDGE('',*,*,#19169,.F.); #26018=ORIENTED_EDGE('',*,*,#19170,.T.); #26019=ORIENTED_EDGE('',*,*,#19171,.F.); #26020=ORIENTED_EDGE('',*,*,#19172,.F.); #26021=ORIENTED_EDGE('',*,*,#19173,.F.); #26022=ORIENTED_EDGE('',*,*,#19174,.T.); #26023=ORIENTED_EDGE('',*,*,#19175,.T.); #26024=ORIENTED_EDGE('',*,*,#19176,.T.); #26025=ORIENTED_EDGE('',*,*,#19177,.F.); #26026=ORIENTED_EDGE('',*,*,#19178,.F.); #26027=ORIENTED_EDGE('',*,*,#19179,.T.); #26028=ORIENTED_EDGE('',*,*,#19180,.T.); #26029=ORIENTED_EDGE('',*,*,#19181,.T.); #26030=ORIENTED_EDGE('',*,*,#19182,.T.); #26031=ORIENTED_EDGE('',*,*,#19183,.F.); #26032=ORIENTED_EDGE('',*,*,#19184,.T.); #26033=ORIENTED_EDGE('',*,*,#19185,.T.); #26034=ORIENTED_EDGE('',*,*,#19186,.T.); #26035=ORIENTED_EDGE('',*,*,#19187,.F.); #26036=ORIENTED_EDGE('',*,*,#19053,.T.); #26037=ORIENTED_EDGE('',*,*,#19067,.T.); #26038=ORIENTED_EDGE('',*,*,#19188,.T.); #26039=ORIENTED_EDGE('',*,*,#19166,.T.); #26040=ORIENTED_EDGE('',*,*,#19189,.T.); #26041=ORIENTED_EDGE('',*,*,#19190,.T.); #26042=ORIENTED_EDGE('',*,*,#19191,.T.); #26043=ORIENTED_EDGE('',*,*,#19192,.T.); #26044=ORIENTED_EDGE('',*,*,#19193,.T.); #26045=ORIENTED_EDGE('',*,*,#19194,.T.); #26046=ORIENTED_EDGE('',*,*,#19195,.T.); #26047=ORIENTED_EDGE('',*,*,#19196,.T.); #26048=ORIENTED_EDGE('',*,*,#19197,.T.); #26049=ORIENTED_EDGE('',*,*,#19198,.T.); #26050=ORIENTED_EDGE('',*,*,#19199,.T.); #26051=ORIENTED_EDGE('',*,*,#19200,.T.); #26052=ORIENTED_EDGE('',*,*,#19201,.F.); #26053=ORIENTED_EDGE('',*,*,#19128,.T.); #26054=ORIENTED_EDGE('',*,*,#19202,.T.); #26055=ORIENTED_EDGE('',*,*,#19200,.F.); #26056=ORIENTED_EDGE('',*,*,#19201,.T.); #26057=ORIENTED_EDGE('',*,*,#19199,.F.); #26058=ORIENTED_EDGE('',*,*,#19203,.F.); #26059=ORIENTED_EDGE('',*,*,#19129,.F.); #26060=ORIENTED_EDGE('',*,*,#19204,.F.); #26061=ORIENTED_EDGE('',*,*,#19130,.T.); #26062=ORIENTED_EDGE('',*,*,#19203,.T.); #26063=ORIENTED_EDGE('',*,*,#19198,.F.); #26064=ORIENTED_EDGE('',*,*,#19204,.T.); #26065=ORIENTED_EDGE('',*,*,#19197,.F.); #26066=ORIENTED_EDGE('',*,*,#19205,.F.); #26067=ORIENTED_EDGE('',*,*,#19119,.F.); #26068=ORIENTED_EDGE('',*,*,#19205,.T.); #26069=ORIENTED_EDGE('',*,*,#19196,.F.); #26070=ORIENTED_EDGE('',*,*,#19206,.F.); #26071=ORIENTED_EDGE('',*,*,#19120,.T.); #26072=ORIENTED_EDGE('',*,*,#19206,.T.); #26073=ORIENTED_EDGE('',*,*,#19195,.F.); #26074=ORIENTED_EDGE('',*,*,#19207,.F.); #26075=ORIENTED_EDGE('',*,*,#19121,.F.); #26076=ORIENTED_EDGE('',*,*,#19207,.T.); #26077=ORIENTED_EDGE('',*,*,#19194,.F.); #26078=ORIENTED_EDGE('',*,*,#19208,.F.); #26079=ORIENTED_EDGE('',*,*,#19122,.T.); #26080=ORIENTED_EDGE('',*,*,#19209,.F.); #26081=ORIENTED_EDGE('',*,*,#19190,.F.); #26082=ORIENTED_EDGE('',*,*,#19210,.F.); #26083=ORIENTED_EDGE('',*,*,#19126,.T.); #26084=ORIENTED_EDGE('',*,*,#19208,.T.); #26085=ORIENTED_EDGE('',*,*,#19193,.F.); #26086=ORIENTED_EDGE('',*,*,#19211,.F.); #26087=ORIENTED_EDGE('',*,*,#19212,.F.); #26088=ORIENTED_EDGE('',*,*,#19213,.F.); #26089=ORIENTED_EDGE('',*,*,#19123,.F.); #26090=ORIENTED_EDGE('',*,*,#19124,.F.); #26091=ORIENTED_EDGE('',*,*,#19213,.T.); #26092=ORIENTED_EDGE('',*,*,#19214,.T.); #26093=ORIENTED_EDGE('',*,*,#19215,.T.); #26094=ORIENTED_EDGE('',*,*,#19216,.F.); #26095=ORIENTED_EDGE('',*,*,#19217,.T.); #26096=ORIENTED_EDGE('',*,*,#19209,.T.); #26097=ORIENTED_EDGE('',*,*,#19125,.F.); #26098=ORIENTED_EDGE('',*,*,#19217,.F.); #26099=ORIENTED_EDGE('',*,*,#19218,.F.); #26100=ORIENTED_EDGE('',*,*,#19219,.F.); #26101=ORIENTED_EDGE('',*,*,#19191,.F.); #26102=ORIENTED_EDGE('',*,*,#19220,.T.); #26103=ORIENTED_EDGE('',*,*,#19221,.F.); #26104=ORIENTED_EDGE('',*,*,#19211,.T.); #26105=ORIENTED_EDGE('',*,*,#19192,.F.); #26106=ORIENTED_EDGE('',*,*,#19219,.T.); #26107=ORIENTED_EDGE('',*,*,#19222,.T.); #26108=ORIENTED_EDGE('',*,*,#19218,.T.); #26109=ORIENTED_EDGE('',*,*,#19216,.T.); #26110=ORIENTED_EDGE('',*,*,#19223,.T.); #26111=ORIENTED_EDGE('',*,*,#19222,.F.); #26112=ORIENTED_EDGE('',*,*,#19223,.F.); #26113=ORIENTED_EDGE('',*,*,#19224,.T.); #26114=ORIENTED_EDGE('',*,*,#19225,.T.); #26115=ORIENTED_EDGE('',*,*,#19226,.F.); #26116=ORIENTED_EDGE('',*,*,#19220,.F.); #26117=ORIENTED_EDGE('',*,*,#19226,.T.); #26118=ORIENTED_EDGE('',*,*,#19227,.T.); #26119=ORIENTED_EDGE('',*,*,#19228,.F.); #26120=ORIENTED_EDGE('',*,*,#19228,.T.); #26121=ORIENTED_EDGE('',*,*,#19229,.T.); #26122=ORIENTED_EDGE('',*,*,#19230,.F.); #26123=ORIENTED_EDGE('',*,*,#19231,.F.); #26124=ORIENTED_EDGE('',*,*,#19212,.T.); #26125=ORIENTED_EDGE('',*,*,#19221,.T.); #26126=ORIENTED_EDGE('',*,*,#19231,.T.); #26127=ORIENTED_EDGE('',*,*,#19214,.F.); #26128=ORIENTED_EDGE('',*,*,#19215,.F.); #26129=ORIENTED_EDGE('',*,*,#19230,.T.); #26130=ORIENTED_EDGE('',*,*,#19232,.T.); #26131=ORIENTED_EDGE('',*,*,#19224,.F.); #26132=ORIENTED_EDGE('',*,*,#19233,.T.); #26133=ORIENTED_EDGE('',*,*,#19234,.T.); #26134=ORIENTED_EDGE('',*,*,#19235,.F.); #26135=ORIENTED_EDGE('',*,*,#19232,.F.); #26136=ORIENTED_EDGE('',*,*,#19225,.F.); #26137=ORIENTED_EDGE('',*,*,#19235,.T.); #26138=ORIENTED_EDGE('',*,*,#19236,.T.); #26139=ORIENTED_EDGE('',*,*,#19237,.F.); #26140=ORIENTED_EDGE('',*,*,#19227,.F.); #26141=ORIENTED_EDGE('',*,*,#19237,.T.); #26142=ORIENTED_EDGE('',*,*,#19238,.T.); #26143=ORIENTED_EDGE('',*,*,#19239,.F.); #26144=ORIENTED_EDGE('',*,*,#19229,.F.); #26145=ORIENTED_EDGE('',*,*,#19239,.T.); #26146=ORIENTED_EDGE('',*,*,#19240,.T.); #26147=ORIENTED_EDGE('',*,*,#19233,.F.); #26148=ORIENTED_EDGE('',*,*,#19241,.F.); #26149=ORIENTED_EDGE('',*,*,#19240,.F.); #26150=ORIENTED_EDGE('',*,*,#19242,.T.); #26151=ORIENTED_EDGE('',*,*,#19243,.F.); #26152=ORIENTED_EDGE('',*,*,#19244,.F.); #26153=ORIENTED_EDGE('',*,*,#19245,.F.); #26154=ORIENTED_EDGE('',*,*,#19243,.T.); #26155=ORIENTED_EDGE('',*,*,#19246,.F.); #26156=ORIENTED_EDGE('',*,*,#19247,.T.); #26157=ORIENTED_EDGE('',*,*,#19248,.T.); #26158=ORIENTED_EDGE('',*,*,#19246,.T.); #26159=ORIENTED_EDGE('',*,*,#19242,.F.); #26160=ORIENTED_EDGE('',*,*,#19238,.F.); #26161=ORIENTED_EDGE('',*,*,#19249,.T.); #26162=ORIENTED_EDGE('',*,*,#19250,.F.); #26163=ORIENTED_EDGE('',*,*,#19247,.F.); #26164=ORIENTED_EDGE('',*,*,#19251,.T.); #26165=ORIENTED_EDGE('',*,*,#19252,.F.); #26166=ORIENTED_EDGE('',*,*,#19252,.T.); #26167=ORIENTED_EDGE('',*,*,#19253,.F.); #26168=ORIENTED_EDGE('',*,*,#19234,.F.); #26169=ORIENTED_EDGE('',*,*,#19241,.T.); #26170=ORIENTED_EDGE('',*,*,#19245,.T.); #26171=ORIENTED_EDGE('',*,*,#19254,.T.); #26172=ORIENTED_EDGE('',*,*,#19250,.T.); #26173=ORIENTED_EDGE('',*,*,#19254,.F.); #26174=ORIENTED_EDGE('',*,*,#19244,.T.); #26175=ORIENTED_EDGE('',*,*,#19248,.F.); #26176=ORIENTED_EDGE('',*,*,#19251,.F.); #26177=ORIENTED_EDGE('',*,*,#19249,.F.); #26178=ORIENTED_EDGE('',*,*,#19236,.F.); #26179=ORIENTED_EDGE('',*,*,#19253,.T.); #26180=ORIENTED_EDGE('',*,*,#19210,.T.); #26181=ORIENTED_EDGE('',*,*,#19189,.F.); #26182=ORIENTED_EDGE('',*,*,#19202,.F.); #26183=ORIENTED_EDGE('',*,*,#19127,.F.); #26184=ORIENTED_EDGE('',*,*,#19255,.T.); #26185=ORIENTED_EDGE('',*,*,#19256,.F.); #26186=ORIENTED_EDGE('',*,*,#19257,.F.); #26187=ORIENTED_EDGE('',*,*,#19258,.F.); #26188=ORIENTED_EDGE('',*,*,#19259,.F.); #26189=ORIENTED_EDGE('',*,*,#19260,.T.); #26190=ORIENTED_EDGE('',*,*,#19261,.T.); #26191=ORIENTED_EDGE('',*,*,#19262,.T.); #26192=ORIENTED_EDGE('',*,*,#19263,.F.); #26193=ORIENTED_EDGE('',*,*,#19264,.F.); #26194=ORIENTED_EDGE('',*,*,#19265,.F.); #26195=ORIENTED_EDGE('',*,*,#19144,.F.); #26196=ORIENTED_EDGE('',*,*,#19266,.T.); #26197=ORIENTED_EDGE('',*,*,#19267,.F.); #26198=ORIENTED_EDGE('',*,*,#19268,.T.); #26199=ORIENTED_EDGE('',*,*,#19269,.T.); #26200=ORIENTED_EDGE('',*,*,#19270,.T.); #26201=ORIENTED_EDGE('',*,*,#19117,.T.); #26202=ORIENTED_EDGE('',*,*,#19271,.F.); #26203=ORIENTED_EDGE('',*,*,#19175,.F.); #26204=ORIENTED_EDGE('',*,*,#19272,.T.); #26205=ORIENTED_EDGE('',*,*,#19273,.F.); #26206=ORIENTED_EDGE('',*,*,#19274,.F.); #26207=ORIENTED_EDGE('',*,*,#19275,.F.); #26208=ORIENTED_EDGE('',*,*,#19164,.T.); #26209=ORIENTED_EDGE('',*,*,#19188,.F.); #26210=ORIENTED_EDGE('',*,*,#19066,.F.); #26211=ORIENTED_EDGE('',*,*,#19276,.F.); #26212=ORIENTED_EDGE('',*,*,#19277,.T.); #26213=ORIENTED_EDGE('',*,*,#19278,.F.); #26214=ORIENTED_EDGE('',*,*,#19279,.F.); #26215=ORIENTED_EDGE('',*,*,#19280,.F.); #26216=ORIENTED_EDGE('',*,*,#19281,.F.); #26217=ORIENTED_EDGE('',*,*,#19255,.F.); #26218=ORIENTED_EDGE('',*,*,#19282,.T.); #26219=ORIENTED_EDGE('',*,*,#19283,.T.); #26220=ORIENTED_EDGE('',*,*,#19284,.T.); #26221=ORIENTED_EDGE('',*,*,#19285,.T.); #26222=ORIENTED_EDGE('',*,*,#19286,.T.); #26223=ORIENTED_EDGE('',*,*,#19287,.F.); #26224=ORIENTED_EDGE('',*,*,#19288,.F.); #26225=ORIENTED_EDGE('',*,*,#19289,.T.); #26226=ORIENTED_EDGE('',*,*,#19290,.T.); #26227=ORIENTED_EDGE('',*,*,#19291,.T.); #26228=ORIENTED_EDGE('',*,*,#19292,.F.); #26229=ORIENTED_EDGE('',*,*,#19293,.T.); #26230=ORIENTED_EDGE('',*,*,#19294,.T.); #26231=ORIENTED_EDGE('',*,*,#19295,.T.); #26232=ORIENTED_EDGE('',*,*,#19296,.T.); #26233=ORIENTED_EDGE('',*,*,#19297,.T.); #26234=ORIENTED_EDGE('',*,*,#19298,.T.); #26235=ORIENTED_EDGE('',*,*,#19299,.T.); #26236=ORIENTED_EDGE('',*,*,#19300,.T.); #26237=ORIENTED_EDGE('',*,*,#19301,.F.); #26238=ORIENTED_EDGE('',*,*,#19302,.F.); #26239=ORIENTED_EDGE('',*,*,#19303,.T.); #26240=ORIENTED_EDGE('',*,*,#19304,.T.); #26241=ORIENTED_EDGE('',*,*,#19305,.T.); #26242=ORIENTED_EDGE('',*,*,#19306,.F.); #26243=ORIENTED_EDGE('',*,*,#19307,.T.); #26244=ORIENTED_EDGE('',*,*,#19308,.T.); #26245=ORIENTED_EDGE('',*,*,#19309,.T.); #26246=ORIENTED_EDGE('',*,*,#19310,.T.); #26247=ORIENTED_EDGE('',*,*,#19311,.T.); #26248=ORIENTED_EDGE('',*,*,#19312,.T.); #26249=ORIENTED_EDGE('',*,*,#19313,.T.); #26250=ORIENTED_EDGE('',*,*,#19314,.T.); #26251=ORIENTED_EDGE('',*,*,#19315,.F.); #26252=ORIENTED_EDGE('',*,*,#19316,.F.); #26253=ORIENTED_EDGE('',*,*,#19317,.T.); #26254=ORIENTED_EDGE('',*,*,#19318,.T.); #26255=ORIENTED_EDGE('',*,*,#19319,.T.); #26256=ORIENTED_EDGE('',*,*,#19320,.F.); #26257=ORIENTED_EDGE('',*,*,#19321,.T.); #26258=ORIENTED_EDGE('',*,*,#19322,.T.); #26259=ORIENTED_EDGE('',*,*,#19323,.T.); #26260=ORIENTED_EDGE('',*,*,#19324,.T.); #26261=ORIENTED_EDGE('',*,*,#19325,.T.); #26262=ORIENTED_EDGE('',*,*,#19326,.T.); #26263=ORIENTED_EDGE('',*,*,#19327,.T.); #26264=ORIENTED_EDGE('',*,*,#19328,.T.); #26265=ORIENTED_EDGE('',*,*,#19329,.F.); #26266=ORIENTED_EDGE('',*,*,#19330,.F.); #26267=ORIENTED_EDGE('',*,*,#19331,.T.); #26268=ORIENTED_EDGE('',*,*,#19332,.T.); #26269=ORIENTED_EDGE('',*,*,#19333,.T.); #26270=ORIENTED_EDGE('',*,*,#19334,.F.); #26271=ORIENTED_EDGE('',*,*,#19335,.T.); #26272=ORIENTED_EDGE('',*,*,#19336,.T.); #26273=ORIENTED_EDGE('',*,*,#19337,.T.); #26274=ORIENTED_EDGE('',*,*,#19338,.T.); #26275=ORIENTED_EDGE('',*,*,#19339,.T.); #26276=ORIENTED_EDGE('',*,*,#19340,.F.); #26277=ORIENTED_EDGE('',*,*,#19261,.F.); #26278=ORIENTED_EDGE('',*,*,#19143,.T.); #26279=ORIENTED_EDGE('',*,*,#19154,.T.); #26280=ORIENTED_EDGE('',*,*,#19165,.T.); #26281=ORIENTED_EDGE('',*,*,#19275,.T.); #26282=ORIENTED_EDGE('',*,*,#19341,.T.); #26283=ORIENTED_EDGE('',*,*,#19342,.F.); #26284=ORIENTED_EDGE('',*,*,#19277,.F.); #26285=ORIENTED_EDGE('',*,*,#19153,.T.); #26286=ORIENTED_EDGE('',*,*,#19159,.F.); #26287=ORIENTED_EDGE('',*,*,#19343,.T.); #26288=ORIENTED_EDGE('',*,*,#19278,.T.); #26289=ORIENTED_EDGE('',*,*,#19342,.T.); #26290=ORIENTED_EDGE('',*,*,#19344,.T.); #26291=ORIENTED_EDGE('',*,*,#19345,.T.); #26292=ORIENTED_EDGE('',*,*,#19346,.T.); #26293=ORIENTED_EDGE('',*,*,#19347,.F.); #26294=ORIENTED_EDGE('',*,*,#19348,.T.); #26295=ORIENTED_EDGE('',*,*,#19349,.T.); #26296=ORIENTED_EDGE('',*,*,#19350,.T.); #26297=ORIENTED_EDGE('',*,*,#19351,.F.); #26298=ORIENTED_EDGE('',*,*,#19352,.T.); #26299=ORIENTED_EDGE('',*,*,#19353,.T.); #26300=ORIENTED_EDGE('',*,*,#19354,.F.); #26301=ORIENTED_EDGE('',*,*,#19355,.T.); #26302=ORIENTED_EDGE('',*,*,#19356,.T.); #26303=ORIENTED_EDGE('',*,*,#19357,.T.); #26304=ORIENTED_EDGE('',*,*,#19358,.F.); #26305=ORIENTED_EDGE('',*,*,#19359,.T.); #26306=ORIENTED_EDGE('',*,*,#19360,.T.); #26307=ORIENTED_EDGE('',*,*,#19274,.T.); #26308=ORIENTED_EDGE('',*,*,#19361,.T.); #26309=ORIENTED_EDGE('',*,*,#19344,.F.); #26310=ORIENTED_EDGE('',*,*,#19341,.F.); #26311=ORIENTED_EDGE('',*,*,#19362,.T.); #26312=ORIENTED_EDGE('',*,*,#19363,.T.); #26313=ORIENTED_EDGE('',*,*,#19364,.F.); #26314=ORIENTED_EDGE('',*,*,#19279,.T.); #26315=ORIENTED_EDGE('',*,*,#19343,.F.); #26316=ORIENTED_EDGE('',*,*,#19361,.F.); #26317=ORIENTED_EDGE('',*,*,#19273,.T.); #26318=ORIENTED_EDGE('',*,*,#19272,.F.); #26319=ORIENTED_EDGE('',*,*,#19365,.F.); #26320=ORIENTED_EDGE('',*,*,#19366,.T.); #26321=ORIENTED_EDGE('',*,*,#19362,.F.); #26322=ORIENTED_EDGE('',*,*,#19366,.F.); #26323=ORIENTED_EDGE('',*,*,#19367,.F.); #26324=ORIENTED_EDGE('',*,*,#19368,.F.); #26325=ORIENTED_EDGE('',*,*,#19369,.T.); #26326=ORIENTED_EDGE('',*,*,#19370,.F.); #26327=ORIENTED_EDGE('',*,*,#19371,.F.); #26328=ORIENTED_EDGE('',*,*,#19372,.F.); #26329=ORIENTED_EDGE('',*,*,#19363,.F.); #26330=ORIENTED_EDGE('',*,*,#19373,.F.); #26331=ORIENTED_EDGE('',*,*,#19374,.F.); #26332=ORIENTED_EDGE('',*,*,#19280,.T.); #26333=ORIENTED_EDGE('',*,*,#19364,.T.); #26334=ORIENTED_EDGE('',*,*,#19372,.T.); #26335=ORIENTED_EDGE('',*,*,#19375,.F.); #26336=ORIENTED_EDGE('',*,*,#19376,.T.); #26337=ORIENTED_EDGE('',*,*,#19375,.T.); #26338=ORIENTED_EDGE('',*,*,#19371,.T.); #26339=ORIENTED_EDGE('',*,*,#19377,.F.); #26340=ORIENTED_EDGE('',*,*,#19378,.F.); #26341=ORIENTED_EDGE('',*,*,#19379,.F.); #26342=ORIENTED_EDGE('',*,*,#19380,.T.); #26343=ORIENTED_EDGE('',*,*,#19381,.T.); #26344=ORIENTED_EDGE('',*,*,#19377,.T.); #26345=ORIENTED_EDGE('',*,*,#19376,.F.); #26346=ORIENTED_EDGE('',*,*,#19381,.F.); #26347=ORIENTED_EDGE('',*,*,#19382,.F.); #26348=ORIENTED_EDGE('',*,*,#19373,.T.); #26349=ORIENTED_EDGE('',*,*,#19382,.T.); #26350=ORIENTED_EDGE('',*,*,#19380,.F.); #26351=ORIENTED_EDGE('',*,*,#19383,.F.); #26352=ORIENTED_EDGE('',*,*,#19384,.F.); #26353=ORIENTED_EDGE('',*,*,#19062,.T.); #26354=ORIENTED_EDGE('',*,*,#19385,.F.); #26355=ORIENTED_EDGE('',*,*,#19386,.F.); #26356=ORIENTED_EDGE('',*,*,#19256,.T.); #26357=ORIENTED_EDGE('',*,*,#19281,.T.); #26358=ORIENTED_EDGE('',*,*,#19374,.T.); #26359=ORIENTED_EDGE('',*,*,#19387,.F.); #26360=ORIENTED_EDGE('',*,*,#19388,.F.); #26361=ORIENTED_EDGE('',*,*,#19389,.F.); #26362=ORIENTED_EDGE('',*,*,#19390,.F.); #26363=ORIENTED_EDGE('',*,*,#19391,.F.); #26364=ORIENTED_EDGE('',*,*,#19390,.T.); #26365=ORIENTED_EDGE('',*,*,#19392,.T.); #26366=ORIENTED_EDGE('',*,*,#19393,.F.); #26367=ORIENTED_EDGE('',*,*,#19269,.F.); #26368=ORIENTED_EDGE('',*,*,#19394,.F.); #26369=ORIENTED_EDGE('',*,*,#19395,.F.); #26370=ORIENTED_EDGE('',*,*,#19396,.F.); #26371=ORIENTED_EDGE('',*,*,#19397,.T.); #26372=ORIENTED_EDGE('',*,*,#19398,.F.); #26373=ORIENTED_EDGE('',*,*,#19399,.T.); #26374=ORIENTED_EDGE('',*,*,#19400,.F.); #26375=ORIENTED_EDGE('',*,*,#19401,.F.); #26376=ORIENTED_EDGE('',*,*,#19402,.F.); #26377=ORIENTED_EDGE('',*,*,#19057,.T.); #26378=ORIENTED_EDGE('',*,*,#19064,.F.); #26379=ORIENTED_EDGE('',*,*,#19403,.T.); #26380=ORIENTED_EDGE('',*,*,#19404,.T.); #26381=ORIENTED_EDGE('',*,*,#19378,.T.); #26382=ORIENTED_EDGE('',*,*,#19370,.T.); #26383=ORIENTED_EDGE('',*,*,#19405,.T.); #26384=ORIENTED_EDGE('',*,*,#19406,.F.); #26385=ORIENTED_EDGE('',*,*,#19407,.T.); #26386=ORIENTED_EDGE('',*,*,#19408,.T.); #26387=ORIENTED_EDGE('',*,*,#19409,.T.); #26388=ORIENTED_EDGE('',*,*,#19410,.T.); #26389=ORIENTED_EDGE('',*,*,#19411,.T.); #26390=ORIENTED_EDGE('',*,*,#19412,.T.); #26391=ORIENTED_EDGE('',*,*,#19413,.T.); #26392=ORIENTED_EDGE('',*,*,#19414,.T.); #26393=ORIENTED_EDGE('',*,*,#19415,.T.); #26394=ORIENTED_EDGE('',*,*,#19416,.T.); #26395=ORIENTED_EDGE('',*,*,#19417,.T.); #26396=ORIENTED_EDGE('',*,*,#19418,.T.); #26397=ORIENTED_EDGE('',*,*,#19419,.T.); #26398=ORIENTED_EDGE('',*,*,#19420,.T.); #26399=ORIENTED_EDGE('',*,*,#19421,.T.); #26400=ORIENTED_EDGE('',*,*,#19422,.T.); #26401=ORIENTED_EDGE('',*,*,#19393,.T.); #26402=ORIENTED_EDGE('',*,*,#19422,.F.); #26403=ORIENTED_EDGE('',*,*,#19423,.F.); #26404=ORIENTED_EDGE('',*,*,#19387,.T.); #26405=ORIENTED_EDGE('',*,*,#19391,.T.); #26406=ORIENTED_EDGE('',*,*,#19421,.F.); #26407=ORIENTED_EDGE('',*,*,#19424,.F.); #26408=ORIENTED_EDGE('',*,*,#19388,.T.); #26409=ORIENTED_EDGE('',*,*,#19423,.T.); #26410=ORIENTED_EDGE('',*,*,#19420,.F.); #26411=ORIENTED_EDGE('',*,*,#19392,.F.); #26412=ORIENTED_EDGE('',*,*,#19389,.T.); #26413=ORIENTED_EDGE('',*,*,#19424,.T.); #26414=ORIENTED_EDGE('',*,*,#19425,.F.); #26415=ORIENTED_EDGE('',*,*,#19426,.T.); #26416=ORIENTED_EDGE('',*,*,#19427,.T.); #26417=ORIENTED_EDGE('',*,*,#19419,.F.); #26418=ORIENTED_EDGE('',*,*,#19425,.T.); #26419=ORIENTED_EDGE('',*,*,#19418,.F.); #26420=ORIENTED_EDGE('',*,*,#19428,.F.); #26421=ORIENTED_EDGE('',*,*,#19429,.F.); #26422=ORIENTED_EDGE('',*,*,#19276,.T.); #26423=ORIENTED_EDGE('',*,*,#19065,.T.); #26424=ORIENTED_EDGE('',*,*,#19055,.T.); #26425=ORIENTED_EDGE('',*,*,#19430,.T.); #26426=ORIENTED_EDGE('',*,*,#19431,.T.); #26427=ORIENTED_EDGE('',*,*,#19432,.T.); #26428=ORIENTED_EDGE('',*,*,#19433,.T.); #26429=ORIENTED_EDGE('',*,*,#19434,.F.); #26430=ORIENTED_EDGE('',*,*,#19435,.T.); #26431=ORIENTED_EDGE('',*,*,#19436,.T.); #26432=ORIENTED_EDGE('',*,*,#19437,.T.); #26433=ORIENTED_EDGE('',*,*,#19438,.T.); #26434=ORIENTED_EDGE('',*,*,#19439,.T.); #26435=ORIENTED_EDGE('',*,*,#19440,.F.); #26436=ORIENTED_EDGE('',*,*,#19441,.T.); #26437=ORIENTED_EDGE('',*,*,#19267,.T.); #26438=ORIENTED_EDGE('',*,*,#19442,.T.); #26439=ORIENTED_EDGE('',*,*,#19443,.T.); #26440=ORIENTED_EDGE('',*,*,#19444,.T.); #26441=ORIENTED_EDGE('',*,*,#19445,.T.); #26442=ORIENTED_EDGE('',*,*,#19446,.T.); #26443=ORIENTED_EDGE('',*,*,#19447,.T.); #26444=ORIENTED_EDGE('',*,*,#19448,.T.); #26445=ORIENTED_EDGE('',*,*,#19449,.T.); #26446=ORIENTED_EDGE('',*,*,#19367,.T.); #26447=ORIENTED_EDGE('',*,*,#19365,.T.); #26448=ORIENTED_EDGE('',*,*,#19450,.T.); #26449=ORIENTED_EDGE('',*,*,#19451,.F.); #26450=ORIENTED_EDGE('',*,*,#19452,.T.); #26451=ORIENTED_EDGE('',*,*,#19453,.F.); #26452=ORIENTED_EDGE('',*,*,#19454,.T.); #26453=ORIENTED_EDGE('',*,*,#19455,.T.); #26454=ORIENTED_EDGE('',*,*,#19456,.T.); #26455=ORIENTED_EDGE('',*,*,#19457,.F.); #26456=ORIENTED_EDGE('',*,*,#19458,.T.); #26457=ORIENTED_EDGE('',*,*,#19426,.F.); #26458=ORIENTED_EDGE('',*,*,#19429,.T.); #26459=ORIENTED_EDGE('',*,*,#19459,.F.); #26460=ORIENTED_EDGE('',*,*,#19460,.F.); #26461=ORIENTED_EDGE('',*,*,#19459,.T.); #26462=ORIENTED_EDGE('',*,*,#19428,.T.); #26463=ORIENTED_EDGE('',*,*,#19417,.F.); #26464=ORIENTED_EDGE('',*,*,#19460,.T.); #26465=ORIENTED_EDGE('',*,*,#19416,.F.); #26466=ORIENTED_EDGE('',*,*,#19461,.F.); #26467=ORIENTED_EDGE('',*,*,#19450,.F.); #26468=ORIENTED_EDGE('',*,*,#19461,.T.); #26469=ORIENTED_EDGE('',*,*,#19415,.F.); #26470=ORIENTED_EDGE('',*,*,#19462,.F.); #26471=ORIENTED_EDGE('',*,*,#19451,.T.); #26472=ORIENTED_EDGE('',*,*,#19462,.T.); #26473=ORIENTED_EDGE('',*,*,#19414,.F.); #26474=ORIENTED_EDGE('',*,*,#19463,.F.); #26475=ORIENTED_EDGE('',*,*,#19452,.F.); #26476=ORIENTED_EDGE('',*,*,#19463,.T.); #26477=ORIENTED_EDGE('',*,*,#19413,.F.); #26478=ORIENTED_EDGE('',*,*,#19464,.F.); #26479=ORIENTED_EDGE('',*,*,#19453,.T.); #26480=ORIENTED_EDGE('',*,*,#19465,.F.); #26481=ORIENTED_EDGE('',*,*,#19409,.F.); #26482=ORIENTED_EDGE('',*,*,#19466,.F.); #26483=ORIENTED_EDGE('',*,*,#19457,.T.); #26484=ORIENTED_EDGE('',*,*,#19464,.T.); #26485=ORIENTED_EDGE('',*,*,#19412,.F.); #26486=ORIENTED_EDGE('',*,*,#19467,.F.); #26487=ORIENTED_EDGE('',*,*,#19468,.F.); #26488=ORIENTED_EDGE('',*,*,#19469,.F.); #26489=ORIENTED_EDGE('',*,*,#19454,.F.); #26490=ORIENTED_EDGE('',*,*,#19469,.T.); #26491=ORIENTED_EDGE('',*,*,#19470,.T.); #26492=ORIENTED_EDGE('',*,*,#19471,.F.); #26493=ORIENTED_EDGE('',*,*,#19472,.F.); #26494=ORIENTED_EDGE('',*,*,#19473,.T.); #26495=ORIENTED_EDGE('',*,*,#19455,.F.); #26496=ORIENTED_EDGE('',*,*,#19465,.T.); #26497=ORIENTED_EDGE('',*,*,#19456,.F.); #26498=ORIENTED_EDGE('',*,*,#19473,.F.); #26499=ORIENTED_EDGE('',*,*,#19474,.F.); #26500=ORIENTED_EDGE('',*,*,#19475,.F.); #26501=ORIENTED_EDGE('',*,*,#19410,.F.); #26502=ORIENTED_EDGE('',*,*,#19476,.T.); #26503=ORIENTED_EDGE('',*,*,#19477,.F.); #26504=ORIENTED_EDGE('',*,*,#19478,.F.); #26505=ORIENTED_EDGE('',*,*,#19467,.T.); #26506=ORIENTED_EDGE('',*,*,#19411,.F.); #26507=ORIENTED_EDGE('',*,*,#19475,.T.); #26508=ORIENTED_EDGE('',*,*,#19472,.T.); #26509=ORIENTED_EDGE('',*,*,#19479,.F.); #26510=ORIENTED_EDGE('',*,*,#19476,.F.); #26511=ORIENTED_EDGE('',*,*,#19474,.T.); #26512=ORIENTED_EDGE('',*,*,#19480,.T.); #26513=ORIENTED_EDGE('',*,*,#19481,.F.); #26514=ORIENTED_EDGE('',*,*,#19482,.F.); #26515=ORIENTED_EDGE('',*,*,#19479,.T.); #26516=ORIENTED_EDGE('',*,*,#19477,.T.); #26517=ORIENTED_EDGE('',*,*,#19482,.T.); #26518=ORIENTED_EDGE('',*,*,#19483,.F.); #26519=ORIENTED_EDGE('',*,*,#19484,.F.); #26520=ORIENTED_EDGE('',*,*,#19485,.T.); #26521=ORIENTED_EDGE('',*,*,#19484,.T.); #26522=ORIENTED_EDGE('',*,*,#19486,.F.); #26523=ORIENTED_EDGE('',*,*,#19487,.F.); #26524=ORIENTED_EDGE('',*,*,#19478,.T.); #26525=ORIENTED_EDGE('',*,*,#19485,.F.); #26526=ORIENTED_EDGE('',*,*,#19470,.F.); #26527=ORIENTED_EDGE('',*,*,#19468,.T.); #26528=ORIENTED_EDGE('',*,*,#19471,.T.); #26529=ORIENTED_EDGE('',*,*,#19487,.T.); #26530=ORIENTED_EDGE('',*,*,#19488,.F.); #26531=ORIENTED_EDGE('',*,*,#19480,.F.); #26532=ORIENTED_EDGE('',*,*,#19488,.T.); #26533=ORIENTED_EDGE('',*,*,#19489,.T.); #26534=ORIENTED_EDGE('',*,*,#19490,.F.); #26535=ORIENTED_EDGE('',*,*,#19491,.F.); #26536=ORIENTED_EDGE('',*,*,#19491,.T.); #26537=ORIENTED_EDGE('',*,*,#19492,.F.); #26538=ORIENTED_EDGE('',*,*,#19493,.F.); #26539=ORIENTED_EDGE('',*,*,#19481,.T.); #26540=ORIENTED_EDGE('',*,*,#19493,.T.); #26541=ORIENTED_EDGE('',*,*,#19494,.F.); #26542=ORIENTED_EDGE('',*,*,#19495,.F.); #26543=ORIENTED_EDGE('',*,*,#19483,.T.); #26544=ORIENTED_EDGE('',*,*,#19495,.T.); #26545=ORIENTED_EDGE('',*,*,#19496,.F.); #26546=ORIENTED_EDGE('',*,*,#19489,.F.); #26547=ORIENTED_EDGE('',*,*,#19486,.T.); #26548=ORIENTED_EDGE('',*,*,#19497,.F.); #26549=ORIENTED_EDGE('',*,*,#19498,.F.); #26550=ORIENTED_EDGE('',*,*,#19496,.T.); #26551=ORIENTED_EDGE('',*,*,#19499,.T.); #26552=ORIENTED_EDGE('',*,*,#19500,.F.); #26553=ORIENTED_EDGE('',*,*,#19501,.F.); #26554=ORIENTED_EDGE('',*,*,#19497,.T.); #26555=ORIENTED_EDGE('',*,*,#19502,.F.); #26556=ORIENTED_EDGE('',*,*,#19503,.T.); #26557=ORIENTED_EDGE('',*,*,#19504,.F.); #26558=ORIENTED_EDGE('',*,*,#19502,.T.); #26559=ORIENTED_EDGE('',*,*,#19499,.F.); #26560=ORIENTED_EDGE('',*,*,#19494,.T.); #26561=ORIENTED_EDGE('',*,*,#19505,.T.); #26562=ORIENTED_EDGE('',*,*,#19506,.F.); #26563=ORIENTED_EDGE('',*,*,#19503,.F.); #26564=ORIENTED_EDGE('',*,*,#19507,.T.); #26565=ORIENTED_EDGE('',*,*,#19508,.F.); #26566=ORIENTED_EDGE('',*,*,#19508,.T.); #26567=ORIENTED_EDGE('',*,*,#19509,.F.); #26568=ORIENTED_EDGE('',*,*,#19490,.T.); #26569=ORIENTED_EDGE('',*,*,#19498,.T.); #26570=ORIENTED_EDGE('',*,*,#19501,.T.); #26571=ORIENTED_EDGE('',*,*,#19510,.F.); #26572=ORIENTED_EDGE('',*,*,#19506,.T.); #26573=ORIENTED_EDGE('',*,*,#19510,.T.); #26574=ORIENTED_EDGE('',*,*,#19500,.T.); #26575=ORIENTED_EDGE('',*,*,#19504,.T.); #26576=ORIENTED_EDGE('',*,*,#19507,.F.); #26577=ORIENTED_EDGE('',*,*,#19505,.F.); #26578=ORIENTED_EDGE('',*,*,#19492,.T.); #26579=ORIENTED_EDGE('',*,*,#19509,.T.); #26580=ORIENTED_EDGE('',*,*,#19466,.T.); #26581=ORIENTED_EDGE('',*,*,#19408,.F.); #26582=ORIENTED_EDGE('',*,*,#19427,.F.); #26583=ORIENTED_EDGE('',*,*,#19458,.F.); #26584=ORIENTED_EDGE('',*,*,#19449,.F.); #26585=ORIENTED_EDGE('',*,*,#19511,.T.); #26586=ORIENTED_EDGE('',*,*,#19512,.T.); #26587=ORIENTED_EDGE('',*,*,#19368,.T.); #26588=ORIENTED_EDGE('',*,*,#19513,.F.); #26589=ORIENTED_EDGE('',*,*,#19514,.F.); #26590=ORIENTED_EDGE('',*,*,#19515,.F.); #26591=ORIENTED_EDGE('',*,*,#19516,.F.); #26592=ORIENTED_EDGE('',*,*,#19517,.F.); #26593=ORIENTED_EDGE('',*,*,#19512,.F.); #26594=ORIENTED_EDGE('',*,*,#19518,.F.); #26595=ORIENTED_EDGE('',*,*,#19519,.F.); #26596=ORIENTED_EDGE('',*,*,#19513,.T.); #26597=ORIENTED_EDGE('',*,*,#19520,.F.); #26598=ORIENTED_EDGE('',*,*,#19521,.F.); #26599=ORIENTED_EDGE('',*,*,#19522,.F.); #26600=ORIENTED_EDGE('',*,*,#19523,.F.); #26601=ORIENTED_EDGE('',*,*,#19524,.F.); #26602=ORIENTED_EDGE('',*,*,#19445,.F.); #26603=ORIENTED_EDGE('',*,*,#19525,.T.); #26604=ORIENTED_EDGE('',*,*,#19514,.T.); #26605=ORIENTED_EDGE('',*,*,#19524,.T.); #26606=ORIENTED_EDGE('',*,*,#19526,.F.); #26607=ORIENTED_EDGE('',*,*,#19527,.F.); #26608=ORIENTED_EDGE('',*,*,#19528,.T.); #26609=ORIENTED_EDGE('',*,*,#19446,.F.); #26610=ORIENTED_EDGE('',*,*,#19528,.F.); #26611=ORIENTED_EDGE('',*,*,#19529,.T.); #26612=ORIENTED_EDGE('',*,*,#19530,.F.); #26613=ORIENTED_EDGE('',*,*,#19531,.F.); #26614=ORIENTED_EDGE('',*,*,#19532,.T.); #26615=ORIENTED_EDGE('',*,*,#19520,.T.); #26616=ORIENTED_EDGE('',*,*,#19519,.T.); #26617=ORIENTED_EDGE('',*,*,#19533,.F.); #26618=ORIENTED_EDGE('',*,*,#19447,.F.); #26619=ORIENTED_EDGE('',*,*,#19530,.T.); #26620=ORIENTED_EDGE('',*,*,#19448,.F.); #26621=ORIENTED_EDGE('',*,*,#19533,.T.); #26622=ORIENTED_EDGE('',*,*,#19518,.T.); #26623=ORIENTED_EDGE('',*,*,#19511,.F.); #26624=ORIENTED_EDGE('',*,*,#19534,.T.); #26625=ORIENTED_EDGE('',*,*,#19521,.T.); #26626=ORIENTED_EDGE('',*,*,#19532,.F.); #26627=ORIENTED_EDGE('',*,*,#19535,.F.); #26628=ORIENTED_EDGE('',*,*,#19527,.T.); #26629=ORIENTED_EDGE('',*,*,#19536,.T.); #26630=ORIENTED_EDGE('',*,*,#19537,.T.); #26631=ORIENTED_EDGE('',*,*,#19535,.T.); #26632=ORIENTED_EDGE('',*,*,#19531,.T.); #26633=ORIENTED_EDGE('',*,*,#19529,.F.); #26634=ORIENTED_EDGE('',*,*,#19537,.F.); #26635=ORIENTED_EDGE('',*,*,#19538,.T.); #26636=ORIENTED_EDGE('',*,*,#19522,.T.); #26637=ORIENTED_EDGE('',*,*,#19534,.F.); #26638=ORIENTED_EDGE('',*,*,#19526,.T.); #26639=ORIENTED_EDGE('',*,*,#19523,.T.); #26640=ORIENTED_EDGE('',*,*,#19538,.F.); #26641=ORIENTED_EDGE('',*,*,#19536,.F.); #26642=ORIENTED_EDGE('',*,*,#19539,.F.); #26643=ORIENTED_EDGE('',*,*,#19515,.T.); #26644=ORIENTED_EDGE('',*,*,#19525,.F.); #26645=ORIENTED_EDGE('',*,*,#19444,.F.); #26646=ORIENTED_EDGE('',*,*,#19540,.F.); #26647=ORIENTED_EDGE('',*,*,#19406,.T.); #26648=ORIENTED_EDGE('',*,*,#19541,.F.); #26649=ORIENTED_EDGE('',*,*,#19516,.T.); #26650=ORIENTED_EDGE('',*,*,#19539,.T.); #26651=ORIENTED_EDGE('',*,*,#19443,.F.); #26652=ORIENTED_EDGE('',*,*,#19266,.F.); #26653=ORIENTED_EDGE('',*,*,#19407,.F.); #26654=ORIENTED_EDGE('',*,*,#19540,.T.); #26655=ORIENTED_EDGE('',*,*,#19442,.F.); #26656=ORIENTED_EDGE('',*,*,#19517,.T.); #26657=ORIENTED_EDGE('',*,*,#19541,.T.); #26658=ORIENTED_EDGE('',*,*,#19405,.F.); #26659=ORIENTED_EDGE('',*,*,#19369,.F.); #26660=ORIENTED_EDGE('',*,*,#19542,.F.); #26661=ORIENTED_EDGE('',*,*,#19176,.F.); #26662=ORIENTED_EDGE('',*,*,#19271,.T.); #26663=ORIENTED_EDGE('',*,*,#19116,.T.); #26664=ORIENTED_EDGE('',*,*,#19543,.F.); #26665=ORIENTED_EDGE('',*,*,#19394,.T.); #26666=ORIENTED_EDGE('',*,*,#19268,.F.); #26667=ORIENTED_EDGE('',*,*,#19441,.F.); #26668=ORIENTED_EDGE('',*,*,#19544,.T.); #26669=ORIENTED_EDGE('',*,*,#19545,.F.); #26670=ORIENTED_EDGE('',*,*,#19546,.T.); #26671=ORIENTED_EDGE('',*,*,#19547,.T.); #26672=ORIENTED_EDGE('',*,*,#19180,.F.); #26673=ORIENTED_EDGE('',*,*,#19548,.T.); #26674=ORIENTED_EDGE('',*,*,#19112,.T.); #26675=ORIENTED_EDGE('',*,*,#19549,.T.); #26676=ORIENTED_EDGE('',*,*,#19550,.T.); #26677=ORIENTED_EDGE('',*,*,#19551,.T.); #26678=ORIENTED_EDGE('',*,*,#19552,.T.); #26679=ORIENTED_EDGE('',*,*,#19553,.T.); #26680=ORIENTED_EDGE('',*,*,#19554,.T.); #26681=ORIENTED_EDGE('',*,*,#19555,.T.); #26682=ORIENTED_EDGE('',*,*,#19556,.T.); #26683=ORIENTED_EDGE('',*,*,#19557,.T.); #26684=ORIENTED_EDGE('',*,*,#19398,.T.); #26685=ORIENTED_EDGE('',*,*,#19558,.T.); #26686=ORIENTED_EDGE('',*,*,#19437,.F.); #26687=ORIENTED_EDGE('',*,*,#19559,.T.); #26688=ORIENTED_EDGE('',*,*,#19560,.T.); #26689=ORIENTED_EDGE('',*,*,#19561,.T.); #26690=ORIENTED_EDGE('',*,*,#19562,.T.); #26691=ORIENTED_EDGE('',*,*,#19563,.F.); #26692=ORIENTED_EDGE('',*,*,#19564,.T.); #26693=ORIENTED_EDGE('',*,*,#19565,.T.); #26694=ORIENTED_EDGE('',*,*,#19566,.T.); #26695=ORIENTED_EDGE('',*,*,#19567,.T.); #26696=ORIENTED_EDGE('',*,*,#19568,.T.); #26697=ORIENTED_EDGE('',*,*,#19569,.T.); #26698=ORIENTED_EDGE('',*,*,#19570,.T.); #26699=ORIENTED_EDGE('',*,*,#19571,.T.); #26700=ORIENTED_EDGE('',*,*,#19572,.T.); #26701=ORIENTED_EDGE('',*,*,#19573,.T.); #26702=ORIENTED_EDGE('',*,*,#19574,.T.); #26703=ORIENTED_EDGE('',*,*,#19575,.F.); #26704=ORIENTED_EDGE('',*,*,#19576,.T.); #26705=ORIENTED_EDGE('',*,*,#19577,.F.); #26706=ORIENTED_EDGE('',*,*,#19578,.F.); #26707=ORIENTED_EDGE('',*,*,#19579,.T.); #26708=ORIENTED_EDGE('',*,*,#19580,.T.); #26709=ORIENTED_EDGE('',*,*,#19581,.F.); #26710=ORIENTED_EDGE('',*,*,#19582,.T.); #26711=ORIENTED_EDGE('',*,*,#19583,.F.); #26712=ORIENTED_EDGE('',*,*,#19584,.T.); #26713=ORIENTED_EDGE('',*,*,#19585,.F.); #26714=ORIENTED_EDGE('',*,*,#19586,.T.); #26715=ORIENTED_EDGE('',*,*,#19587,.F.); #26716=ORIENTED_EDGE('',*,*,#19588,.T.); #26717=ORIENTED_EDGE('',*,*,#19589,.T.); #26718=ORIENTED_EDGE('',*,*,#19590,.T.); #26719=ORIENTED_EDGE('',*,*,#19591,.T.); #26720=ORIENTED_EDGE('',*,*,#19395,.T.); #26721=ORIENTED_EDGE('',*,*,#19543,.T.); #26722=ORIENTED_EDGE('',*,*,#19440,.T.); #26723=ORIENTED_EDGE('',*,*,#19592,.T.); #26724=ORIENTED_EDGE('',*,*,#19593,.T.); #26725=ORIENTED_EDGE('',*,*,#19594,.T.); #26726=ORIENTED_EDGE('',*,*,#19595,.T.); #26727=ORIENTED_EDGE('',*,*,#19596,.F.); #26728=ORIENTED_EDGE('',*,*,#19597,.T.); #26729=ORIENTED_EDGE('',*,*,#19598,.T.); #26730=ORIENTED_EDGE('',*,*,#19599,.T.); #26731=ORIENTED_EDGE('',*,*,#19600,.T.); #26732=ORIENTED_EDGE('',*,*,#19177,.T.); #26733=ORIENTED_EDGE('',*,*,#19542,.T.); #26734=ORIENTED_EDGE('',*,*,#19115,.T.); #26735=ORIENTED_EDGE('',*,*,#19601,.T.); #26736=ORIENTED_EDGE('',*,*,#19602,.T.); #26737=ORIENTED_EDGE('',*,*,#19603,.T.); #26738=ORIENTED_EDGE('',*,*,#19604,.T.); #26739=ORIENTED_EDGE('',*,*,#19605,.T.); #26740=ORIENTED_EDGE('',*,*,#19606,.F.); #26741=ORIENTED_EDGE('',*,*,#19607,.F.); #26742=ORIENTED_EDGE('',*,*,#19596,.T.); #26743=ORIENTED_EDGE('',*,*,#19608,.F.); #26744=ORIENTED_EDGE('',*,*,#19595,.F.); #26745=ORIENTED_EDGE('',*,*,#19609,.F.); #26746=ORIENTED_EDGE('',*,*,#19610,.T.); #26747=ORIENTED_EDGE('',*,*,#19608,.T.); #26748=ORIENTED_EDGE('',*,*,#19606,.T.); #26749=ORIENTED_EDGE('',*,*,#19610,.F.); #26750=ORIENTED_EDGE('',*,*,#19611,.F.); #26751=ORIENTED_EDGE('',*,*,#19612,.F.); #26752=ORIENTED_EDGE('',*,*,#19613,.F.); #26753=ORIENTED_EDGE('',*,*,#19438,.F.); #26754=ORIENTED_EDGE('',*,*,#19558,.F.); #26755=ORIENTED_EDGE('',*,*,#19397,.F.); #26756=ORIENTED_EDGE('',*,*,#19614,.F.); #26757=ORIENTED_EDGE('',*,*,#19615,.F.); #26758=ORIENTED_EDGE('',*,*,#19616,.F.); #26759=ORIENTED_EDGE('',*,*,#19617,.F.); #26760=ORIENTED_EDGE('',*,*,#19618,.F.); #26761=ORIENTED_EDGE('',*,*,#19619,.F.); #26762=ORIENTED_EDGE('',*,*,#19620,.F.); #26763=ORIENTED_EDGE('',*,*,#19621,.F.); #26764=ORIENTED_EDGE('',*,*,#19622,.F.); #26765=ORIENTED_EDGE('',*,*,#19113,.F.); #26766=ORIENTED_EDGE('',*,*,#19548,.F.); #26767=ORIENTED_EDGE('',*,*,#19179,.F.); #26768=ORIENTED_EDGE('',*,*,#19623,.F.); #26769=ORIENTED_EDGE('',*,*,#19624,.F.); #26770=ORIENTED_EDGE('',*,*,#19625,.F.); #26771=ORIENTED_EDGE('',*,*,#19626,.F.); #26772=ORIENTED_EDGE('',*,*,#19607,.T.); #26773=ORIENTED_EDGE('',*,*,#19617,.T.); #26774=ORIENTED_EDGE('',*,*,#19627,.T.); #26775=ORIENTED_EDGE('',*,*,#19588,.F.); #26776=ORIENTED_EDGE('',*,*,#19616,.T.); #26777=ORIENTED_EDGE('',*,*,#19628,.T.); #26778=ORIENTED_EDGE('',*,*,#19589,.F.); #26779=ORIENTED_EDGE('',*,*,#19627,.F.); #26780=ORIENTED_EDGE('',*,*,#19615,.T.); #26781=ORIENTED_EDGE('',*,*,#19629,.T.); #26782=ORIENTED_EDGE('',*,*,#19590,.F.); #26783=ORIENTED_EDGE('',*,*,#19628,.F.); #26784=ORIENTED_EDGE('',*,*,#19396,.T.); #26785=ORIENTED_EDGE('',*,*,#19591,.F.); #26786=ORIENTED_EDGE('',*,*,#19629,.F.); #26787=ORIENTED_EDGE('',*,*,#19614,.T.); #26788=ORIENTED_EDGE('',*,*,#19613,.T.); #26789=ORIENTED_EDGE('',*,*,#19630,.T.); #26790=ORIENTED_EDGE('',*,*,#19592,.F.); #26791=ORIENTED_EDGE('',*,*,#19439,.F.); #26792=ORIENTED_EDGE('',*,*,#19612,.T.); #26793=ORIENTED_EDGE('',*,*,#19631,.T.); #26794=ORIENTED_EDGE('',*,*,#19593,.F.); #26795=ORIENTED_EDGE('',*,*,#19630,.F.); #26796=ORIENTED_EDGE('',*,*,#19609,.T.); #26797=ORIENTED_EDGE('',*,*,#19594,.F.); #26798=ORIENTED_EDGE('',*,*,#19631,.F.); #26799=ORIENTED_EDGE('',*,*,#19611,.T.); #26800=ORIENTED_EDGE('',*,*,#19605,.F.); #26801=ORIENTED_EDGE('',*,*,#19632,.F.); #26802=ORIENTED_EDGE('',*,*,#19618,.T.); #26803=ORIENTED_EDGE('',*,*,#19633,.F.); #26804=ORIENTED_EDGE('',*,*,#19633,.T.); #26805=ORIENTED_EDGE('',*,*,#19626,.T.); #26806=ORIENTED_EDGE('',*,*,#19634,.T.); #26807=ORIENTED_EDGE('',*,*,#19597,.F.); #26808=ORIENTED_EDGE('',*,*,#19635,.T.); #26809=ORIENTED_EDGE('',*,*,#19598,.F.); #26810=ORIENTED_EDGE('',*,*,#19634,.F.); #26811=ORIENTED_EDGE('',*,*,#19625,.T.); #26812=ORIENTED_EDGE('',*,*,#19624,.T.); #26813=ORIENTED_EDGE('',*,*,#19636,.T.); #26814=ORIENTED_EDGE('',*,*,#19599,.F.); #26815=ORIENTED_EDGE('',*,*,#19635,.F.); #26816=ORIENTED_EDGE('',*,*,#19623,.T.); #26817=ORIENTED_EDGE('',*,*,#19178,.T.); #26818=ORIENTED_EDGE('',*,*,#19600,.F.); #26819=ORIENTED_EDGE('',*,*,#19636,.F.); #26820=ORIENTED_EDGE('',*,*,#19632,.T.); #26821=ORIENTED_EDGE('',*,*,#19604,.F.); #26822=ORIENTED_EDGE('',*,*,#19637,.F.); #26823=ORIENTED_EDGE('',*,*,#19619,.T.); #26824=ORIENTED_EDGE('',*,*,#19620,.T.); #26825=ORIENTED_EDGE('',*,*,#19637,.T.); #26826=ORIENTED_EDGE('',*,*,#19603,.F.); #26827=ORIENTED_EDGE('',*,*,#19638,.F.); #26828=ORIENTED_EDGE('',*,*,#19621,.T.); #26829=ORIENTED_EDGE('',*,*,#19638,.T.); #26830=ORIENTED_EDGE('',*,*,#19602,.F.); #26831=ORIENTED_EDGE('',*,*,#19639,.F.); #26832=ORIENTED_EDGE('',*,*,#19639,.T.); #26833=ORIENTED_EDGE('',*,*,#19601,.F.); #26834=ORIENTED_EDGE('',*,*,#19114,.F.); #26835=ORIENTED_EDGE('',*,*,#19622,.T.); #26836=ORIENTED_EDGE('',*,*,#19640,.T.); #26837=ORIENTED_EDGE('',*,*,#19641,.T.); #26838=ORIENTED_EDGE('',*,*,#19573,.F.); #26839=ORIENTED_EDGE('',*,*,#19642,.F.); #26840=ORIENTED_EDGE('',*,*,#19642,.T.); #26841=ORIENTED_EDGE('',*,*,#19572,.F.); #26842=ORIENTED_EDGE('',*,*,#19643,.F.); #26843=ORIENTED_EDGE('',*,*,#19644,.F.); #26844=ORIENTED_EDGE('',*,*,#19645,.T.); #26845=ORIENTED_EDGE('',*,*,#19400,.T.); #26846=ORIENTED_EDGE('',*,*,#19646,.T.); #26847=ORIENTED_EDGE('',*,*,#19647,.T.); #26848=ORIENTED_EDGE('',*,*,#19648,.T.); #26849=ORIENTED_EDGE('',*,*,#19649,.T.); #26850=ORIENTED_EDGE('',*,*,#19650,.T.); #26851=ORIENTED_EDGE('',*,*,#19110,.F.); #26852=ORIENTED_EDGE('',*,*,#19651,.T.); #26853=ORIENTED_EDGE('',*,*,#19652,.T.); #26854=ORIENTED_EDGE('',*,*,#19653,.T.); #26855=ORIENTED_EDGE('',*,*,#19654,.T.); #26856=ORIENTED_EDGE('',*,*,#19655,.T.); #26857=ORIENTED_EDGE('',*,*,#19656,.T.); #26858=ORIENTED_EDGE('',*,*,#19657,.T.); #26859=ORIENTED_EDGE('',*,*,#19658,.T.); #26860=ORIENTED_EDGE('',*,*,#19659,.F.); #26861=ORIENTED_EDGE('',*,*,#19660,.T.); #26862=ORIENTED_EDGE('',*,*,#19661,.T.); #26863=ORIENTED_EDGE('',*,*,#19662,.T.); #26864=ORIENTED_EDGE('',*,*,#19663,.T.); #26865=ORIENTED_EDGE('',*,*,#19664,.T.); #26866=ORIENTED_EDGE('',*,*,#19665,.F.); #26867=ORIENTED_EDGE('',*,*,#19666,.T.); #26868=ORIENTED_EDGE('',*,*,#19667,.F.); #26869=ORIENTED_EDGE('',*,*,#19668,.T.); #26870=ORIENTED_EDGE('',*,*,#19669,.F.); #26871=ORIENTED_EDGE('',*,*,#19670,.T.); #26872=ORIENTED_EDGE('',*,*,#19671,.T.); #26873=ORIENTED_EDGE('',*,*,#19672,.F.); #26874=ORIENTED_EDGE('',*,*,#19673,.F.); #26875=ORIENTED_EDGE('',*,*,#19674,.T.); #26876=ORIENTED_EDGE('',*,*,#19675,.F.); #26877=ORIENTED_EDGE('',*,*,#19676,.T.); #26878=ORIENTED_EDGE('',*,*,#19640,.F.); #26879=ORIENTED_EDGE('',*,*,#19644,.T.); #26880=ORIENTED_EDGE('',*,*,#19677,.F.); #26881=ORIENTED_EDGE('',*,*,#19665,.T.); #26882=ORIENTED_EDGE('',*,*,#19643,.T.); #26883=ORIENTED_EDGE('',*,*,#19571,.F.); #26884=ORIENTED_EDGE('',*,*,#19677,.T.); #26885=ORIENTED_EDGE('',*,*,#19570,.F.); #26886=ORIENTED_EDGE('',*,*,#19678,.F.); #26887=ORIENTED_EDGE('',*,*,#19666,.F.); #26888=ORIENTED_EDGE('',*,*,#19678,.T.); #26889=ORIENTED_EDGE('',*,*,#19569,.F.); #26890=ORIENTED_EDGE('',*,*,#19679,.F.); #26891=ORIENTED_EDGE('',*,*,#19667,.T.); #26892=ORIENTED_EDGE('',*,*,#19679,.T.); #26893=ORIENTED_EDGE('',*,*,#19568,.F.); #26894=ORIENTED_EDGE('',*,*,#19680,.F.); #26895=ORIENTED_EDGE('',*,*,#19668,.F.); #26896=ORIENTED_EDGE('',*,*,#19681,.F.); #26897=ORIENTED_EDGE('',*,*,#19675,.T.); #26898=ORIENTED_EDGE('',*,*,#19682,.F.); #26899=ORIENTED_EDGE('',*,*,#19561,.F.); #26900=ORIENTED_EDGE('',*,*,#19683,.F.); #26901=ORIENTED_EDGE('',*,*,#19669,.T.); #26902=ORIENTED_EDGE('',*,*,#19680,.T.); #26903=ORIENTED_EDGE('',*,*,#19567,.F.); #26904=ORIENTED_EDGE('',*,*,#19681,.T.); #26905=ORIENTED_EDGE('',*,*,#19560,.F.); #26906=ORIENTED_EDGE('',*,*,#19641,.F.); #26907=ORIENTED_EDGE('',*,*,#19676,.F.); #26908=ORIENTED_EDGE('',*,*,#19682,.T.); #26909=ORIENTED_EDGE('',*,*,#19674,.F.); #26910=ORIENTED_EDGE('',*,*,#19684,.F.); #26911=ORIENTED_EDGE('',*,*,#19562,.F.); #26912=ORIENTED_EDGE('',*,*,#19685,.T.); #26913=ORIENTED_EDGE('',*,*,#19686,.T.); #26914=ORIENTED_EDGE('',*,*,#19687,.T.); #26915=ORIENTED_EDGE('',*,*,#19688,.T.); #26916=ORIENTED_EDGE('',*,*,#19563,.T.); #26917=ORIENTED_EDGE('',*,*,#19684,.T.); #26918=ORIENTED_EDGE('',*,*,#19673,.T.); #26919=ORIENTED_EDGE('',*,*,#19689,.T.); #26920=ORIENTED_EDGE('',*,*,#19690,.T.); #26921=ORIENTED_EDGE('',*,*,#19691,.T.); #26922=ORIENTED_EDGE('',*,*,#19692,.T.); #26923=ORIENTED_EDGE('',*,*,#19693,.T.); #26924=ORIENTED_EDGE('',*,*,#19693,.F.); #26925=ORIENTED_EDGE('',*,*,#19694,.F.); #26926=ORIENTED_EDGE('',*,*,#19695,.T.); #26927=ORIENTED_EDGE('',*,*,#19696,.F.); #26928=ORIENTED_EDGE('',*,*,#19696,.T.); #26929=ORIENTED_EDGE('',*,*,#19697,.T.); #26930=ORIENTED_EDGE('',*,*,#19698,.T.); #26931=ORIENTED_EDGE('',*,*,#19699,.T.); #26932=ORIENTED_EDGE('',*,*,#19700,.F.); #26933=ORIENTED_EDGE('',*,*,#19685,.F.); #26934=ORIENTED_EDGE('',*,*,#19686,.F.); #26935=ORIENTED_EDGE('',*,*,#19700,.T.); #26936=ORIENTED_EDGE('',*,*,#19701,.T.); #26937=ORIENTED_EDGE('',*,*,#19702,.F.); #26938=ORIENTED_EDGE('',*,*,#19687,.F.); #26939=ORIENTED_EDGE('',*,*,#19702,.T.); #26940=ORIENTED_EDGE('',*,*,#19703,.T.); #26941=ORIENTED_EDGE('',*,*,#19704,.F.); #26942=ORIENTED_EDGE('',*,*,#19704,.T.); #26943=ORIENTED_EDGE('',*,*,#19705,.T.); #26944=ORIENTED_EDGE('',*,*,#19564,.F.); #26945=ORIENTED_EDGE('',*,*,#19688,.F.); #26946=ORIENTED_EDGE('',*,*,#19706,.T.); #26947=ORIENTED_EDGE('',*,*,#19707,.F.); #26948=ORIENTED_EDGE('',*,*,#19708,.F.); #26949=ORIENTED_EDGE('',*,*,#19709,.F.); #26950=ORIENTED_EDGE('',*,*,#19710,.F.); #26951=ORIENTED_EDGE('',*,*,#19671,.F.); #26952=ORIENTED_EDGE('',*,*,#19711,.T.); #26953=ORIENTED_EDGE('',*,*,#19565,.F.); #26954=ORIENTED_EDGE('',*,*,#19705,.F.); #26955=ORIENTED_EDGE('',*,*,#19703,.F.); #26956=ORIENTED_EDGE('',*,*,#19701,.F.); #26957=ORIENTED_EDGE('',*,*,#19699,.F.); #26958=ORIENTED_EDGE('',*,*,#19706,.F.); #26959=ORIENTED_EDGE('',*,*,#19698,.F.); #26960=ORIENTED_EDGE('',*,*,#19712,.T.); #26961=ORIENTED_EDGE('',*,*,#19713,.F.); #26962=ORIENTED_EDGE('',*,*,#19694,.T.); #26963=ORIENTED_EDGE('',*,*,#19692,.F.); #26964=ORIENTED_EDGE('',*,*,#19714,.T.); #26965=ORIENTED_EDGE('',*,*,#19707,.T.); #26966=ORIENTED_EDGE('',*,*,#19713,.T.); #26967=ORIENTED_EDGE('',*,*,#19715,.F.); #26968=ORIENTED_EDGE('',*,*,#19695,.F.); #26969=ORIENTED_EDGE('',*,*,#19715,.T.); #26970=ORIENTED_EDGE('',*,*,#19712,.F.); #26971=ORIENTED_EDGE('',*,*,#19697,.F.); #26972=ORIENTED_EDGE('',*,*,#19716,.T.); #26973=ORIENTED_EDGE('',*,*,#19708,.T.); #26974=ORIENTED_EDGE('',*,*,#19714,.F.); #26975=ORIENTED_EDGE('',*,*,#19691,.F.); #26976=ORIENTED_EDGE('',*,*,#19690,.F.); #26977=ORIENTED_EDGE('',*,*,#19717,.T.); #26978=ORIENTED_EDGE('',*,*,#19709,.T.); #26979=ORIENTED_EDGE('',*,*,#19716,.F.); #26980=ORIENTED_EDGE('',*,*,#19689,.F.); #26981=ORIENTED_EDGE('',*,*,#19672,.T.); #26982=ORIENTED_EDGE('',*,*,#19710,.T.); #26983=ORIENTED_EDGE('',*,*,#19717,.F.); #26984=ORIENTED_EDGE('',*,*,#19683,.T.); #26985=ORIENTED_EDGE('',*,*,#19566,.F.); #26986=ORIENTED_EDGE('',*,*,#19711,.F.); #26987=ORIENTED_EDGE('',*,*,#19670,.F.); #26988=ORIENTED_EDGE('',*,*,#19718,.F.); #26989=ORIENTED_EDGE('',*,*,#19585,.T.); #26990=ORIENTED_EDGE('',*,*,#19719,.T.); #26991=ORIENTED_EDGE('',*,*,#19651,.F.); #26992=ORIENTED_EDGE('',*,*,#19718,.T.); #26993=ORIENTED_EDGE('',*,*,#19664,.F.); #26994=ORIENTED_EDGE('',*,*,#19720,.F.); #26995=ORIENTED_EDGE('',*,*,#19586,.F.); #26996=ORIENTED_EDGE('',*,*,#19720,.T.); #26997=ORIENTED_EDGE('',*,*,#19663,.F.); #26998=ORIENTED_EDGE('',*,*,#19721,.F.); #26999=ORIENTED_EDGE('',*,*,#19587,.T.); #27000=ORIENTED_EDGE('',*,*,#19721,.T.); #27001=ORIENTED_EDGE('',*,*,#19662,.F.); #27002=ORIENTED_EDGE('',*,*,#19722,.F.); #27003=ORIENTED_EDGE('',*,*,#19574,.F.); #27004=ORIENTED_EDGE('',*,*,#19722,.T.); #27005=ORIENTED_EDGE('',*,*,#19661,.F.); #27006=ORIENTED_EDGE('',*,*,#19723,.F.); #27007=ORIENTED_EDGE('',*,*,#19575,.T.); #27008=ORIENTED_EDGE('',*,*,#19724,.F.); #27009=ORIENTED_EDGE('',*,*,#19655,.F.); #27010=ORIENTED_EDGE('',*,*,#19725,.F.); #27011=ORIENTED_EDGE('',*,*,#19581,.T.); #27012=ORIENTED_EDGE('',*,*,#19723,.T.); #27013=ORIENTED_EDGE('',*,*,#19660,.F.); #27014=ORIENTED_EDGE('',*,*,#19726,.F.); #27015=ORIENTED_EDGE('',*,*,#19576,.F.); #27016=ORIENTED_EDGE('',*,*,#19727,.T.); #27017=ORIENTED_EDGE('',*,*,#19728,.T.); #27018=ORIENTED_EDGE('',*,*,#19729,.T.); #27019=ORIENTED_EDGE('',*,*,#19730,.T.); #27020=ORIENTED_EDGE('',*,*,#19577,.T.); #27021=ORIENTED_EDGE('',*,*,#19726,.T.); #27022=ORIENTED_EDGE('',*,*,#19659,.T.); #27023=ORIENTED_EDGE('',*,*,#19731,.T.); #27024=ORIENTED_EDGE('',*,*,#19732,.T.); #27025=ORIENTED_EDGE('',*,*,#19733,.T.); #27026=ORIENTED_EDGE('',*,*,#19734,.T.); #27027=ORIENTED_EDGE('',*,*,#19735,.T.); #27028=ORIENTED_EDGE('',*,*,#19735,.F.); #27029=ORIENTED_EDGE('',*,*,#19736,.F.); #27030=ORIENTED_EDGE('',*,*,#19737,.T.); #27031=ORIENTED_EDGE('',*,*,#19738,.F.); #27032=ORIENTED_EDGE('',*,*,#19739,.T.); #27033=ORIENTED_EDGE('',*,*,#19740,.T.); #27034=ORIENTED_EDGE('',*,*,#19727,.F.); #27035=ORIENTED_EDGE('',*,*,#19738,.T.); #27036=ORIENTED_EDGE('',*,*,#19741,.F.); #27037=ORIENTED_EDGE('',*,*,#19742,.T.); #27038=ORIENTED_EDGE('',*,*,#19743,.F.); #27039=ORIENTED_EDGE('',*,*,#19742,.F.); #27040=ORIENTED_EDGE('',*,*,#19744,.T.); #27041=ORIENTED_EDGE('',*,*,#19745,.F.); #27042=ORIENTED_EDGE('',*,*,#19746,.T.); #27043=ORIENTED_EDGE('',*,*,#19736,.T.); #27044=ORIENTED_EDGE('',*,*,#19734,.F.); #27045=ORIENTED_EDGE('',*,*,#19747,.F.); #27046=ORIENTED_EDGE('',*,*,#19748,.T.); #27047=ORIENTED_EDGE('',*,*,#19745,.T.); #27048=ORIENTED_EDGE('',*,*,#19743,.T.); #27049=ORIENTED_EDGE('',*,*,#19748,.F.); #27050=ORIENTED_EDGE('',*,*,#19749,.F.); #27051=ORIENTED_EDGE('',*,*,#19750,.F.); #27052=ORIENTED_EDGE('',*,*,#19751,.F.); #27053=ORIENTED_EDGE('',*,*,#19657,.F.); #27054=ORIENTED_EDGE('',*,*,#19752,.T.); #27055=ORIENTED_EDGE('',*,*,#19579,.F.); #27056=ORIENTED_EDGE('',*,*,#19753,.F.); #27057=ORIENTED_EDGE('',*,*,#19754,.F.); #27058=ORIENTED_EDGE('',*,*,#19755,.F.); #27059=ORIENTED_EDGE('',*,*,#19739,.F.); #27060=ORIENTED_EDGE('',*,*,#19755,.T.); #27061=ORIENTED_EDGE('',*,*,#19756,.T.); #27062=ORIENTED_EDGE('',*,*,#19728,.F.); #27063=ORIENTED_EDGE('',*,*,#19740,.F.); #27064=ORIENTED_EDGE('',*,*,#19754,.T.); #27065=ORIENTED_EDGE('',*,*,#19757,.T.); #27066=ORIENTED_EDGE('',*,*,#19729,.F.); #27067=ORIENTED_EDGE('',*,*,#19756,.F.); #27068=ORIENTED_EDGE('',*,*,#19578,.T.); #27069=ORIENTED_EDGE('',*,*,#19730,.F.); #27070=ORIENTED_EDGE('',*,*,#19757,.F.); #27071=ORIENTED_EDGE('',*,*,#19753,.T.); #27072=ORIENTED_EDGE('',*,*,#19724,.T.); #27073=ORIENTED_EDGE('',*,*,#19580,.F.); #27074=ORIENTED_EDGE('',*,*,#19752,.F.); #27075=ORIENTED_EDGE('',*,*,#19656,.F.); #27076=ORIENTED_EDGE('',*,*,#19751,.T.); #27077=ORIENTED_EDGE('',*,*,#19758,.T.); #27078=ORIENTED_EDGE('',*,*,#19731,.F.); #27079=ORIENTED_EDGE('',*,*,#19658,.F.); #27080=ORIENTED_EDGE('',*,*,#19750,.T.); #27081=ORIENTED_EDGE('',*,*,#19759,.T.); #27082=ORIENTED_EDGE('',*,*,#19732,.F.); #27083=ORIENTED_EDGE('',*,*,#19758,.F.); #27084=ORIENTED_EDGE('',*,*,#19747,.T.); #27085=ORIENTED_EDGE('',*,*,#19733,.F.); #27086=ORIENTED_EDGE('',*,*,#19759,.F.); #27087=ORIENTED_EDGE('',*,*,#19749,.T.); #27088=ORIENTED_EDGE('',*,*,#19744,.F.); #27089=ORIENTED_EDGE('',*,*,#19741,.T.); #27090=ORIENTED_EDGE('',*,*,#19737,.F.); #27091=ORIENTED_EDGE('',*,*,#19746,.F.); #27092=ORIENTED_EDGE('',*,*,#19725,.T.); #27093=ORIENTED_EDGE('',*,*,#19654,.F.); #27094=ORIENTED_EDGE('',*,*,#19760,.F.); #27095=ORIENTED_EDGE('',*,*,#19582,.F.); #27096=ORIENTED_EDGE('',*,*,#19761,.F.); #27097=ORIENTED_EDGE('',*,*,#19583,.T.); #27098=ORIENTED_EDGE('',*,*,#19760,.T.); #27099=ORIENTED_EDGE('',*,*,#19653,.F.); #27100=ORIENTED_EDGE('',*,*,#19761,.T.); #27101=ORIENTED_EDGE('',*,*,#19652,.F.); #27102=ORIENTED_EDGE('',*,*,#19719,.F.); #27103=ORIENTED_EDGE('',*,*,#19584,.F.); #27104=ORIENTED_EDGE('',*,*,#19762,.T.); #27105=ORIENTED_EDGE('',*,*,#19645,.F.); #27106=ORIENTED_EDGE('',*,*,#19763,.F.); #27107=ORIENTED_EDGE('',*,*,#19547,.F.); #27108=ORIENTED_EDGE('',*,*,#19764,.T.); #27109=ORIENTED_EDGE('',*,*,#19765,.T.); #27110=ORIENTED_EDGE('',*,*,#19766,.F.); #27111=ORIENTED_EDGE('',*,*,#19559,.F.); #27112=ORIENTED_EDGE('',*,*,#19767,.T.); #27113=ORIENTED_EDGE('',*,*,#19768,.T.); #27114=ORIENTED_EDGE('',*,*,#19769,.T.); #27115=ORIENTED_EDGE('',*,*,#19544,.F.); #27116=ORIENTED_EDGE('',*,*,#19766,.T.); #27117=ORIENTED_EDGE('',*,*,#19770,.T.); #27118=ORIENTED_EDGE('',*,*,#19771,.T.); #27119=ORIENTED_EDGE('',*,*,#19772,.T.); #27120=ORIENTED_EDGE('',*,*,#19773,.T.); #27121=ORIENTED_EDGE('',*,*,#19770,.F.); #27122=ORIENTED_EDGE('',*,*,#19765,.F.); #27123=ORIENTED_EDGE('',*,*,#19774,.T.); #27124=ORIENTED_EDGE('',*,*,#19775,.T.); #27125=ORIENTED_EDGE('',*,*,#19776,.T.); #27126=ORIENTED_EDGE('',*,*,#19777,.F.); #27127=ORIENTED_EDGE('',*,*,#19778,.T.); #27128=ORIENTED_EDGE('',*,*,#19779,.F.); #27129=ORIENTED_EDGE('',*,*,#19780,.T.); #27130=ORIENTED_EDGE('',*,*,#19781,.T.); #27131=ORIENTED_EDGE('',*,*,#19782,.T.); #27132=ORIENTED_EDGE('',*,*,#19783,.T.); #27133=ORIENTED_EDGE('',*,*,#19784,.T.); #27134=ORIENTED_EDGE('',*,*,#19785,.F.); #27135=ORIENTED_EDGE('',*,*,#19786,.T.); #27136=ORIENTED_EDGE('',*,*,#19787,.T.); #27137=ORIENTED_EDGE('',*,*,#19788,.F.); #27138=ORIENTED_EDGE('',*,*,#19789,.T.); #27139=ORIENTED_EDGE('',*,*,#19790,.T.); #27140=ORIENTED_EDGE('',*,*,#19791,.T.); #27141=ORIENTED_EDGE('',*,*,#19186,.F.); #27142=ORIENTED_EDGE('',*,*,#19792,.T.); #27143=ORIENTED_EDGE('',*,*,#19431,.F.); #27144=ORIENTED_EDGE('',*,*,#19793,.T.); #27145=ORIENTED_EDGE('',*,*,#19794,.F.); #27146=ORIENTED_EDGE('',*,*,#19795,.F.); #27147=ORIENTED_EDGE('',*,*,#19796,.F.); #27148=ORIENTED_EDGE('',*,*,#19797,.T.); #27149=ORIENTED_EDGE('',*,*,#19771,.F.); #27150=ORIENTED_EDGE('',*,*,#19798,.T.); #27151=ORIENTED_EDGE('',*,*,#19799,.F.); #27152=ORIENTED_EDGE('',*,*,#19772,.F.); #27153=ORIENTED_EDGE('',*,*,#19797,.F.); #27154=ORIENTED_EDGE('',*,*,#19767,.F.); #27155=ORIENTED_EDGE('',*,*,#19773,.F.); #27156=ORIENTED_EDGE('',*,*,#19799,.T.); #27157=ORIENTED_EDGE('',*,*,#19800,.F.); #27158=ORIENTED_EDGE('',*,*,#19801,.T.); #27159=ORIENTED_EDGE('',*,*,#19802,.T.); #27160=ORIENTED_EDGE('',*,*,#19768,.F.); #27161=ORIENTED_EDGE('',*,*,#19800,.T.); #27162=ORIENTED_EDGE('',*,*,#19798,.F.); #27163=ORIENTED_EDGE('',*,*,#19796,.T.); #27164=ORIENTED_EDGE('',*,*,#19545,.T.); #27165=ORIENTED_EDGE('',*,*,#19769,.F.); #27166=ORIENTED_EDGE('',*,*,#19802,.F.); #27167=ORIENTED_EDGE('',*,*,#19803,.F.); #27168=ORIENTED_EDGE('',*,*,#19795,.T.); #27169=ORIENTED_EDGE('',*,*,#19774,.F.); #27170=ORIENTED_EDGE('',*,*,#19764,.F.); #27171=ORIENTED_EDGE('',*,*,#19546,.F.); #27172=ORIENTED_EDGE('',*,*,#19803,.T.); #27173=ORIENTED_EDGE('',*,*,#19801,.F.); #27174=ORIENTED_EDGE('',*,*,#19804,.T.); #27175=ORIENTED_EDGE('',*,*,#19775,.F.); #27176=ORIENTED_EDGE('',*,*,#19805,.T.); #27177=ORIENTED_EDGE('',*,*,#19806,.F.); #27178=ORIENTED_EDGE('',*,*,#19807,.T.); #27179=ORIENTED_EDGE('',*,*,#19433,.F.); #27180=ORIENTED_EDGE('',*,*,#19808,.T.); #27181=ORIENTED_EDGE('',*,*,#19184,.F.); #27182=ORIENTED_EDGE('',*,*,#19809,.T.); #27183=ORIENTED_EDGE('',*,*,#19810,.F.); #27184=ORIENTED_EDGE('',*,*,#19811,.T.); #27185=ORIENTED_EDGE('',*,*,#19781,.F.); #27186=ORIENTED_EDGE('',*,*,#19401,.T.); #27187=ORIENTED_EDGE('',*,*,#19762,.F.); #27188=ORIENTED_EDGE('',*,*,#19436,.F.); #27189=ORIENTED_EDGE('',*,*,#19812,.T.); #27190=ORIENTED_EDGE('',*,*,#19776,.F.); #27191=ORIENTED_EDGE('',*,*,#19804,.F.); #27192=ORIENTED_EDGE('',*,*,#19813,.F.); #27193=ORIENTED_EDGE('',*,*,#19432,.F.); #27194=ORIENTED_EDGE('',*,*,#19792,.F.); #27195=ORIENTED_EDGE('',*,*,#19185,.F.); #27196=ORIENTED_EDGE('',*,*,#19814,.T.); #27197=ORIENTED_EDGE('',*,*,#19108,.F.); #27198=ORIENTED_EDGE('',*,*,#19058,.T.); #27199=ORIENTED_EDGE('',*,*,#19402,.T.); #27200=ORIENTED_EDGE('',*,*,#19813,.T.); #27201=ORIENTED_EDGE('',*,*,#19815,.T.); #27202=ORIENTED_EDGE('',*,*,#19816,.F.); #27203=ORIENTED_EDGE('',*,*,#19817,.T.); #27204=ORIENTED_EDGE('',*,*,#19818,.T.); #27205=ORIENTED_EDGE('',*,*,#19819,.T.); #27206=ORIENTED_EDGE('',*,*,#19820,.F.); #27207=ORIENTED_EDGE('',*,*,#19821,.T.); #27208=ORIENTED_EDGE('',*,*,#19822,.F.); #27209=ORIENTED_EDGE('',*,*,#19823,.T.); #27210=ORIENTED_EDGE('',*,*,#19824,.F.); #27211=ORIENTED_EDGE('',*,*,#19825,.T.); #27212=ORIENTED_EDGE('',*,*,#19826,.F.); #27213=ORIENTED_EDGE('',*,*,#19827,.T.); #27214=ORIENTED_EDGE('',*,*,#19828,.F.); #27215=ORIENTED_EDGE('',*,*,#19829,.T.); #27216=ORIENTED_EDGE('',*,*,#19830,.T.); #27217=ORIENTED_EDGE('',*,*,#19831,.T.); #27218=ORIENTED_EDGE('',*,*,#19832,.T.); #27219=ORIENTED_EDGE('',*,*,#19833,.T.); #27220=ORIENTED_EDGE('',*,*,#19834,.T.); #27221=ORIENTED_EDGE('',*,*,#19835,.F.); #27222=ORIENTED_EDGE('',*,*,#19836,.F.); #27223=ORIENTED_EDGE('',*,*,#19837,.T.); #27224=ORIENTED_EDGE('',*,*,#19838,.T.); #27225=ORIENTED_EDGE('',*,*,#19839,.T.); #27226=ORIENTED_EDGE('',*,*,#19840,.T.); #27227=ORIENTED_EDGE('',*,*,#19841,.T.); #27228=ORIENTED_EDGE('',*,*,#19842,.T.); #27229=ORIENTED_EDGE('',*,*,#19843,.T.); #27230=ORIENTED_EDGE('',*,*,#19844,.T.); #27231=ORIENTED_EDGE('',*,*,#19845,.T.); #27232=ORIENTED_EDGE('',*,*,#19846,.T.); #27233=ORIENTED_EDGE('',*,*,#19847,.T.); #27234=ORIENTED_EDGE('',*,*,#19848,.T.); #27235=ORIENTED_EDGE('',*,*,#19849,.T.); #27236=ORIENTED_EDGE('',*,*,#19850,.T.); #27237=ORIENTED_EDGE('',*,*,#19851,.T.); #27238=ORIENTED_EDGE('',*,*,#19842,.F.); #27239=ORIENTED_EDGE('',*,*,#19852,.F.); #27240=ORIENTED_EDGE('',*,*,#19853,.T.); #27241=ORIENTED_EDGE('',*,*,#19854,.T.); #27242=ORIENTED_EDGE('',*,*,#19829,.F.); #27243=ORIENTED_EDGE('',*,*,#19851,.F.); #27244=ORIENTED_EDGE('',*,*,#19855,.F.); #27245=ORIENTED_EDGE('',*,*,#19854,.F.); #27246=ORIENTED_EDGE('',*,*,#19856,.T.); #27247=ORIENTED_EDGE('',*,*,#19857,.T.); #27248=ORIENTED_EDGE('',*,*,#19830,.F.); #27249=ORIENTED_EDGE('',*,*,#19858,.T.); #27250=ORIENTED_EDGE('',*,*,#19831,.F.); #27251=ORIENTED_EDGE('',*,*,#19857,.F.); #27252=ORIENTED_EDGE('',*,*,#19859,.F.); #27253=ORIENTED_EDGE('',*,*,#19860,.F.); #27254=ORIENTED_EDGE('',*,*,#19861,.T.); #27255=ORIENTED_EDGE('',*,*,#19862,.T.); #27256=ORIENTED_EDGE('',*,*,#19838,.F.); #27257=ORIENTED_EDGE('',*,*,#19863,.F.); #27258=ORIENTED_EDGE('',*,*,#19832,.F.); #27259=ORIENTED_EDGE('',*,*,#19858,.F.); #27260=ORIENTED_EDGE('',*,*,#19864,.T.); #27261=ORIENTED_EDGE('',*,*,#19860,.T.); #27262=ORIENTED_EDGE('',*,*,#19837,.F.); #27263=ORIENTED_EDGE('',*,*,#19865,.F.); #27264=ORIENTED_EDGE('',*,*,#19866,.F.); #27265=ORIENTED_EDGE('',*,*,#19867,.T.); #27266=ORIENTED_EDGE('',*,*,#19868,.F.); #27267=ORIENTED_EDGE('',*,*,#19793,.F.); #27268=ORIENTED_EDGE('',*,*,#19430,.F.); #27269=ORIENTED_EDGE('',*,*,#19054,.T.); #27270=ORIENTED_EDGE('',*,*,#19187,.T.); #27271=ORIENTED_EDGE('',*,*,#19791,.F.); #27272=ORIENTED_EDGE('',*,*,#19869,.T.); #27273=ORIENTED_EDGE('',*,*,#19870,.T.); #27274=ORIENTED_EDGE('',*,*,#19871,.T.); #27275=ORIENTED_EDGE('',*,*,#19872,.T.); #27276=ORIENTED_EDGE('',*,*,#19873,.T.); #27277=ORIENTED_EDGE('',*,*,#19874,.T.); #27278=ORIENTED_EDGE('',*,*,#19875,.T.); #27279=ORIENTED_EDGE('',*,*,#19876,.T.); #27280=ORIENTED_EDGE('',*,*,#19877,.F.); #27281=ORIENTED_EDGE('',*,*,#19878,.T.); #27282=ORIENTED_EDGE('',*,*,#19879,.T.); #27283=ORIENTED_EDGE('',*,*,#19880,.T.); #27284=ORIENTED_EDGE('',*,*,#19881,.T.); #27285=ORIENTED_EDGE('',*,*,#19882,.T.); #27286=ORIENTED_EDGE('',*,*,#19883,.T.); #27287=ORIENTED_EDGE('',*,*,#19884,.F.); #27288=ORIENTED_EDGE('',*,*,#19885,.F.); #27289=ORIENTED_EDGE('',*,*,#19886,.F.); #27290=ORIENTED_EDGE('',*,*,#19887,.F.); #27291=ORIENTED_EDGE('',*,*,#19888,.F.); #27292=ORIENTED_EDGE('',*,*,#19889,.F.); #27293=ORIENTED_EDGE('',*,*,#19890,.F.); #27294=ORIENTED_EDGE('',*,*,#19891,.F.); #27295=ORIENTED_EDGE('',*,*,#19892,.T.); #27296=ORIENTED_EDGE('',*,*,#19861,.F.); #27297=ORIENTED_EDGE('',*,*,#19866,.T.); #27298=ORIENTED_EDGE('',*,*,#19893,.T.); #27299=ORIENTED_EDGE('',*,*,#19894,.F.); #27300=ORIENTED_EDGE('',*,*,#19895,.F.); #27301=ORIENTED_EDGE('',*,*,#19896,.T.); #27302=ORIENTED_EDGE('',*,*,#19864,.F.); #27303=ORIENTED_EDGE('',*,*,#19859,.T.); #27304=ORIENTED_EDGE('',*,*,#19856,.F.); #27305=ORIENTED_EDGE('',*,*,#19855,.T.); #27306=ORIENTED_EDGE('',*,*,#19853,.F.); #27307=ORIENTED_EDGE('',*,*,#19897,.T.); #27308=ORIENTED_EDGE('',*,*,#19898,.F.); #27309=ORIENTED_EDGE('',*,*,#19899,.T.); #27310=ORIENTED_EDGE('',*,*,#19840,.F.); #27311=ORIENTED_EDGE('',*,*,#19900,.F.); #27312=ORIENTED_EDGE('',*,*,#19898,.T.); #27313=ORIENTED_EDGE('',*,*,#19852,.T.); #27314=ORIENTED_EDGE('',*,*,#19841,.F.); #27315=ORIENTED_EDGE('',*,*,#19899,.F.); #27316=ORIENTED_EDGE('',*,*,#19897,.F.); #27317=ORIENTED_EDGE('',*,*,#19900,.T.); #27318=ORIENTED_EDGE('',*,*,#19839,.F.); #27319=ORIENTED_EDGE('',*,*,#19862,.F.); #27320=ORIENTED_EDGE('',*,*,#19892,.F.); #27321=ORIENTED_EDGE('',*,*,#19863,.T.); #27322=ORIENTED_EDGE('',*,*,#19896,.F.); #27323=ORIENTED_EDGE('',*,*,#19901,.F.); #27324=ORIENTED_EDGE('',*,*,#19833,.F.); #27325=ORIENTED_EDGE('',*,*,#19901,.T.); #27326=ORIENTED_EDGE('',*,*,#19895,.T.); #27327=ORIENTED_EDGE('',*,*,#19902,.F.); #27328=ORIENTED_EDGE('',*,*,#19834,.F.); #27329=ORIENTED_EDGE('',*,*,#19903,.T.); #27330=ORIENTED_EDGE('',*,*,#19904,.F.); #27331=ORIENTED_EDGE('',*,*,#19905,.F.); #27332=ORIENTED_EDGE('',*,*,#19902,.T.); #27333=ORIENTED_EDGE('',*,*,#19835,.T.); #27334=ORIENTED_EDGE('',*,*,#19905,.T.); #27335=ORIENTED_EDGE('',*,*,#19906,.F.); #27336=ORIENTED_EDGE('',*,*,#19907,.F.); #27337=ORIENTED_EDGE('',*,*,#19907,.T.); #27338=ORIENTED_EDGE('',*,*,#19908,.F.); #27339=ORIENTED_EDGE('',*,*,#19909,.F.); #27340=ORIENTED_EDGE('',*,*,#19910,.T.); #27341=ORIENTED_EDGE('',*,*,#19865,.T.); #27342=ORIENTED_EDGE('',*,*,#19836,.T.); #27343=ORIENTED_EDGE('',*,*,#19910,.F.); #27344=ORIENTED_EDGE('',*,*,#19893,.F.); #27345=ORIENTED_EDGE('',*,*,#19909,.T.); #27346=ORIENTED_EDGE('',*,*,#19911,.F.); #27347=ORIENTED_EDGE('',*,*,#19903,.F.); #27348=ORIENTED_EDGE('',*,*,#19894,.T.); #27349=ORIENTED_EDGE('',*,*,#19912,.T.); #27350=ORIENTED_EDGE('',*,*,#19913,.F.); #27351=ORIENTED_EDGE('',*,*,#19914,.F.); #27352=ORIENTED_EDGE('',*,*,#19911,.T.); #27353=ORIENTED_EDGE('',*,*,#19914,.T.); #27354=ORIENTED_EDGE('',*,*,#19915,.F.); #27355=ORIENTED_EDGE('',*,*,#19916,.F.); #27356=ORIENTED_EDGE('',*,*,#19904,.T.); #27357=ORIENTED_EDGE('',*,*,#19906,.T.); #27358=ORIENTED_EDGE('',*,*,#19916,.T.); #27359=ORIENTED_EDGE('',*,*,#19917,.F.); #27360=ORIENTED_EDGE('',*,*,#19918,.F.); #27361=ORIENTED_EDGE('',*,*,#19908,.T.); #27362=ORIENTED_EDGE('',*,*,#19918,.T.); #27363=ORIENTED_EDGE('',*,*,#19919,.F.); #27364=ORIENTED_EDGE('',*,*,#19912,.F.); #27365=ORIENTED_EDGE('',*,*,#19920,.T.); #27366=ORIENTED_EDGE('',*,*,#19921,.F.); #27367=ORIENTED_EDGE('',*,*,#19922,.F.); #27368=ORIENTED_EDGE('',*,*,#19919,.T.); #27369=ORIENTED_EDGE('',*,*,#19913,.T.); #27370=ORIENTED_EDGE('',*,*,#19922,.T.); #27371=ORIENTED_EDGE('',*,*,#19923,.F.); #27372=ORIENTED_EDGE('',*,*,#19924,.F.); #27373=ORIENTED_EDGE('',*,*,#19924,.T.); #27374=ORIENTED_EDGE('',*,*,#19925,.F.); #27375=ORIENTED_EDGE('',*,*,#19926,.F.); #27376=ORIENTED_EDGE('',*,*,#19915,.T.); #27377=ORIENTED_EDGE('',*,*,#19926,.T.); #27378=ORIENTED_EDGE('',*,*,#19927,.F.); #27379=ORIENTED_EDGE('',*,*,#19920,.F.); #27380=ORIENTED_EDGE('',*,*,#19917,.T.); #27381=ORIENTED_EDGE('',*,*,#19928,.T.); #27382=ORIENTED_EDGE('',*,*,#19929,.F.); #27383=ORIENTED_EDGE('',*,*,#19927,.T.); #27384=ORIENTED_EDGE('',*,*,#19930,.T.); #27385=ORIENTED_EDGE('',*,*,#19931,.T.); #27386=ORIENTED_EDGE('',*,*,#19932,.F.); #27387=ORIENTED_EDGE('',*,*,#19933,.F.); #27388=ORIENTED_EDGE('',*,*,#19934,.F.); #27389=ORIENTED_EDGE('',*,*,#19935,.T.); #27390=ORIENTED_EDGE('',*,*,#19928,.F.); #27391=ORIENTED_EDGE('',*,*,#19935,.F.); #27392=ORIENTED_EDGE('',*,*,#19936,.F.); #27393=ORIENTED_EDGE('',*,*,#19921,.T.); #27394=ORIENTED_EDGE('',*,*,#19929,.T.); #27395=ORIENTED_EDGE('',*,*,#19937,.F.); #27396=ORIENTED_EDGE('',*,*,#19938,.T.); #27397=ORIENTED_EDGE('',*,*,#19939,.F.); #27398=ORIENTED_EDGE('',*,*,#19923,.T.); #27399=ORIENTED_EDGE('',*,*,#19936,.T.); #27400=ORIENTED_EDGE('',*,*,#19934,.T.); #27401=ORIENTED_EDGE('',*,*,#19940,.F.); #27402=ORIENTED_EDGE('',*,*,#19930,.F.); #27403=ORIENTED_EDGE('',*,*,#19925,.T.); #27404=ORIENTED_EDGE('',*,*,#19939,.T.); #27405=ORIENTED_EDGE('',*,*,#19941,.F.); #27406=ORIENTED_EDGE('',*,*,#19931,.F.); #27407=ORIENTED_EDGE('',*,*,#19940,.T.); #27408=ORIENTED_EDGE('',*,*,#19938,.F.); #27409=ORIENTED_EDGE('',*,*,#19933,.T.); #27410=ORIENTED_EDGE('',*,*,#19932,.T.); #27411=ORIENTED_EDGE('',*,*,#19941,.T.); #27412=ORIENTED_EDGE('',*,*,#19937,.T.); #27413=ORIENTED_EDGE('',*,*,#19942,.F.); #27414=ORIENTED_EDGE('',*,*,#19826,.T.); #27415=ORIENTED_EDGE('',*,*,#19943,.T.); #27416=ORIENTED_EDGE('',*,*,#19883,.F.); #27417=ORIENTED_EDGE('',*,*,#19942,.T.); #27418=ORIENTED_EDGE('',*,*,#19882,.F.); #27419=ORIENTED_EDGE('',*,*,#19944,.F.); #27420=ORIENTED_EDGE('',*,*,#19827,.F.); #27421=ORIENTED_EDGE('',*,*,#19944,.T.); #27422=ORIENTED_EDGE('',*,*,#19881,.F.); #27423=ORIENTED_EDGE('',*,*,#19945,.F.); #27424=ORIENTED_EDGE('',*,*,#19828,.T.); #27425=ORIENTED_EDGE('',*,*,#19945,.T.); #27426=ORIENTED_EDGE('',*,*,#19880,.F.); #27427=ORIENTED_EDGE('',*,*,#19946,.F.); #27428=ORIENTED_EDGE('',*,*,#19815,.F.); #27429=ORIENTED_EDGE('',*,*,#19947,.F.); #27430=ORIENTED_EDGE('',*,*,#19822,.T.); #27431=ORIENTED_EDGE('',*,*,#19948,.F.); #27432=ORIENTED_EDGE('',*,*,#19873,.F.); #27433=ORIENTED_EDGE('',*,*,#19949,.F.); #27434=ORIENTED_EDGE('',*,*,#19816,.T.); #27435=ORIENTED_EDGE('',*,*,#19946,.T.); #27436=ORIENTED_EDGE('',*,*,#19879,.F.); #27437=ORIENTED_EDGE('',*,*,#19947,.T.); #27438=ORIENTED_EDGE('',*,*,#19872,.F.); #27439=ORIENTED_EDGE('',*,*,#19950,.F.); #27440=ORIENTED_EDGE('',*,*,#19823,.F.); #27441=ORIENTED_EDGE('',*,*,#19951,.F.); #27442=ORIENTED_EDGE('',*,*,#19824,.T.); #27443=ORIENTED_EDGE('',*,*,#19950,.T.); #27444=ORIENTED_EDGE('',*,*,#19871,.F.); #27445=ORIENTED_EDGE('',*,*,#19951,.T.); #27446=ORIENTED_EDGE('',*,*,#19870,.F.); #27447=ORIENTED_EDGE('',*,*,#19943,.F.); #27448=ORIENTED_EDGE('',*,*,#19825,.F.); #27449=ORIENTED_EDGE('',*,*,#19948,.T.); #27450=ORIENTED_EDGE('',*,*,#19821,.F.); #27451=ORIENTED_EDGE('',*,*,#19952,.F.); #27452=ORIENTED_EDGE('',*,*,#19874,.F.); #27453=ORIENTED_EDGE('',*,*,#19952,.T.); #27454=ORIENTED_EDGE('',*,*,#19820,.T.); #27455=ORIENTED_EDGE('',*,*,#19953,.T.); #27456=ORIENTED_EDGE('',*,*,#19875,.F.); #27457=ORIENTED_EDGE('',*,*,#19953,.F.); #27458=ORIENTED_EDGE('',*,*,#19954,.T.); #27459=ORIENTED_EDGE('',*,*,#19955,.T.); #27460=ORIENTED_EDGE('',*,*,#19956,.F.); #27461=ORIENTED_EDGE('',*,*,#19956,.T.); #27462=ORIENTED_EDGE('',*,*,#19957,.T.); #27463=ORIENTED_EDGE('',*,*,#19958,.F.); #27464=ORIENTED_EDGE('',*,*,#19876,.F.); #27465=ORIENTED_EDGE('',*,*,#19959,.F.); #27466=ORIENTED_EDGE('',*,*,#19958,.T.); #27467=ORIENTED_EDGE('',*,*,#19960,.T.); #27468=ORIENTED_EDGE('',*,*,#19961,.F.); #27469=ORIENTED_EDGE('',*,*,#19962,.T.); #27470=ORIENTED_EDGE('',*,*,#19877,.T.); #27471=ORIENTED_EDGE('',*,*,#19959,.T.); #27472=ORIENTED_EDGE('',*,*,#19818,.F.); #27473=ORIENTED_EDGE('',*,*,#19949,.T.); #27474=ORIENTED_EDGE('',*,*,#19878,.F.); #27475=ORIENTED_EDGE('',*,*,#19962,.F.); #27476=ORIENTED_EDGE('',*,*,#19817,.F.); #27477=ORIENTED_EDGE('',*,*,#19819,.F.); #27478=ORIENTED_EDGE('',*,*,#19961,.T.); #27479=ORIENTED_EDGE('',*,*,#19963,.T.); #27480=ORIENTED_EDGE('',*,*,#19954,.F.); #27481=ORIENTED_EDGE('',*,*,#19964,.T.); #27482=ORIENTED_EDGE('',*,*,#19965,.T.); #27483=ORIENTED_EDGE('',*,*,#19966,.F.); #27484=ORIENTED_EDGE('',*,*,#19963,.F.); #27485=ORIENTED_EDGE('',*,*,#19955,.F.); #27486=ORIENTED_EDGE('',*,*,#19966,.T.); #27487=ORIENTED_EDGE('',*,*,#19967,.T.); #27488=ORIENTED_EDGE('',*,*,#19968,.F.); #27489=ORIENTED_EDGE('',*,*,#19957,.F.); #27490=ORIENTED_EDGE('',*,*,#19968,.T.); #27491=ORIENTED_EDGE('',*,*,#19969,.T.); #27492=ORIENTED_EDGE('',*,*,#19970,.F.); #27493=ORIENTED_EDGE('',*,*,#19960,.F.); #27494=ORIENTED_EDGE('',*,*,#19970,.T.); #27495=ORIENTED_EDGE('',*,*,#19971,.T.); #27496=ORIENTED_EDGE('',*,*,#19964,.F.); #27497=ORIENTED_EDGE('',*,*,#19971,.F.); #27498=ORIENTED_EDGE('',*,*,#19972,.T.); #27499=ORIENTED_EDGE('',*,*,#19973,.T.); #27500=ORIENTED_EDGE('',*,*,#19974,.F.); #27501=ORIENTED_EDGE('',*,*,#19974,.T.); #27502=ORIENTED_EDGE('',*,*,#19975,.T.); #27503=ORIENTED_EDGE('',*,*,#19976,.F.); #27504=ORIENTED_EDGE('',*,*,#19965,.F.); #27505=ORIENTED_EDGE('',*,*,#19967,.F.); #27506=ORIENTED_EDGE('',*,*,#19976,.T.); #27507=ORIENTED_EDGE('',*,*,#19977,.T.); #27508=ORIENTED_EDGE('',*,*,#19978,.F.); #27509=ORIENTED_EDGE('',*,*,#19969,.F.); #27510=ORIENTED_EDGE('',*,*,#19978,.T.); #27511=ORIENTED_EDGE('',*,*,#19979,.T.); #27512=ORIENTED_EDGE('',*,*,#19972,.F.); #27513=ORIENTED_EDGE('',*,*,#19980,.T.); #27514=ORIENTED_EDGE('',*,*,#19981,.T.); #27515=ORIENTED_EDGE('',*,*,#19982,.T.); #27516=ORIENTED_EDGE('',*,*,#19983,.F.); #27517=ORIENTED_EDGE('',*,*,#19979,.F.); #27518=ORIENTED_EDGE('',*,*,#19984,.T.); #27519=ORIENTED_EDGE('',*,*,#19985,.F.); #27520=ORIENTED_EDGE('',*,*,#19980,.F.); #27521=ORIENTED_EDGE('',*,*,#19986,.T.); #27522=ORIENTED_EDGE('',*,*,#19987,.F.); #27523=ORIENTED_EDGE('',*,*,#19988,.F.); #27524=ORIENTED_EDGE('',*,*,#19975,.F.); #27525=ORIENTED_EDGE('',*,*,#19989,.T.); #27526=ORIENTED_EDGE('',*,*,#19990,.T.); #27527=ORIENTED_EDGE('',*,*,#19991,.T.); #27528=ORIENTED_EDGE('',*,*,#19987,.T.); #27529=ORIENTED_EDGE('',*,*,#19985,.T.); #27530=ORIENTED_EDGE('',*,*,#19991,.F.); #27531=ORIENTED_EDGE('',*,*,#19992,.T.); #27532=ORIENTED_EDGE('',*,*,#19981,.F.); #27533=ORIENTED_EDGE('',*,*,#19992,.F.); #27534=ORIENTED_EDGE('',*,*,#19990,.F.); #27535=ORIENTED_EDGE('',*,*,#19993,.T.); #27536=ORIENTED_EDGE('',*,*,#19982,.F.); #27537=ORIENTED_EDGE('',*,*,#19993,.F.); #27538=ORIENTED_EDGE('',*,*,#19989,.F.); #27539=ORIENTED_EDGE('',*,*,#19973,.F.); #27540=ORIENTED_EDGE('',*,*,#19983,.T.); #27541=ORIENTED_EDGE('',*,*,#19986,.F.); #27542=ORIENTED_EDGE('',*,*,#19984,.F.); #27543=ORIENTED_EDGE('',*,*,#19977,.F.); #27544=ORIENTED_EDGE('',*,*,#19988,.T.); #27545=ORIENTED_EDGE('',*,*,#19887,.T.); #27546=ORIENTED_EDGE('',*,*,#19994,.T.); #27547=ORIENTED_EDGE('',*,*,#19846,.F.); #27548=ORIENTED_EDGE('',*,*,#19995,.F.); #27549=ORIENTED_EDGE('',*,*,#19884,.T.); #27550=ORIENTED_EDGE('',*,*,#19995,.T.); #27551=ORIENTED_EDGE('',*,*,#19845,.F.); #27552=ORIENTED_EDGE('',*,*,#19996,.F.); #27553=ORIENTED_EDGE('',*,*,#19885,.T.); #27554=ORIENTED_EDGE('',*,*,#19996,.T.); #27555=ORIENTED_EDGE('',*,*,#19844,.F.); #27556=ORIENTED_EDGE('',*,*,#19997,.F.); #27557=ORIENTED_EDGE('',*,*,#19886,.T.); #27558=ORIENTED_EDGE('',*,*,#19997,.T.); #27559=ORIENTED_EDGE('',*,*,#19843,.F.); #27560=ORIENTED_EDGE('',*,*,#19994,.F.); #27561=ORIENTED_EDGE('',*,*,#19891,.T.); #27562=ORIENTED_EDGE('',*,*,#19998,.T.); #27563=ORIENTED_EDGE('',*,*,#19850,.F.); #27564=ORIENTED_EDGE('',*,*,#19999,.F.); #27565=ORIENTED_EDGE('',*,*,#19888,.T.); #27566=ORIENTED_EDGE('',*,*,#19999,.T.); #27567=ORIENTED_EDGE('',*,*,#19849,.F.); #27568=ORIENTED_EDGE('',*,*,#20000,.F.); #27569=ORIENTED_EDGE('',*,*,#19889,.T.); #27570=ORIENTED_EDGE('',*,*,#20000,.T.); #27571=ORIENTED_EDGE('',*,*,#19848,.F.); #27572=ORIENTED_EDGE('',*,*,#20001,.F.); #27573=ORIENTED_EDGE('',*,*,#19890,.T.); #27574=ORIENTED_EDGE('',*,*,#20001,.T.); #27575=ORIENTED_EDGE('',*,*,#19847,.F.); #27576=ORIENTED_EDGE('',*,*,#19998,.F.); #27577=ORIENTED_EDGE('',*,*,#20002,.T.); #27578=ORIENTED_EDGE('',*,*,#20003,.F.); #27579=ORIENTED_EDGE('',*,*,#19869,.F.); #27580=ORIENTED_EDGE('',*,*,#19790,.F.); #27581=ORIENTED_EDGE('',*,*,#20002,.F.); #27582=ORIENTED_EDGE('',*,*,#19789,.F.); #27583=ORIENTED_EDGE('',*,*,#20004,.T.); #27584=ORIENTED_EDGE('',*,*,#20005,.F.); #27585=ORIENTED_EDGE('',*,*,#20006,.F.); #27586=ORIENTED_EDGE('',*,*,#19867,.F.); #27587=ORIENTED_EDGE('',*,*,#20003,.T.); #27588=ORIENTED_EDGE('',*,*,#20005,.T.); #27589=ORIENTED_EDGE('',*,*,#20007,.T.); #27590=ORIENTED_EDGE('',*,*,#20008,.T.); #27591=ORIENTED_EDGE('',*,*,#20009,.F.); #27592=ORIENTED_EDGE('',*,*,#20008,.F.); #27593=ORIENTED_EDGE('',*,*,#20010,.T.); #27594=ORIENTED_EDGE('',*,*,#19787,.F.); #27595=ORIENTED_EDGE('',*,*,#20010,.F.); #27596=ORIENTED_EDGE('',*,*,#20007,.F.); #27597=ORIENTED_EDGE('',*,*,#20004,.F.); #27598=ORIENTED_EDGE('',*,*,#19788,.T.); #27599=ORIENTED_EDGE('',*,*,#20009,.T.); #27600=ORIENTED_EDGE('',*,*,#19794,.T.); #27601=ORIENTED_EDGE('',*,*,#19868,.T.); #27602=ORIENTED_EDGE('',*,*,#20006,.T.); #27603=ORIENTED_EDGE('',*,*,#19786,.F.); #27604=ORIENTED_EDGE('',*,*,#20011,.F.); #27605=ORIENTED_EDGE('',*,*,#19181,.F.); #27606=ORIENTED_EDGE('',*,*,#19763,.T.); #27607=ORIENTED_EDGE('',*,*,#19109,.T.); #27608=ORIENTED_EDGE('',*,*,#19814,.F.); #27609=ORIENTED_EDGE('',*,*,#19808,.F.); #27610=ORIENTED_EDGE('',*,*,#19777,.T.); #27611=ORIENTED_EDGE('',*,*,#19812,.F.); #27612=ORIENTED_EDGE('',*,*,#19435,.F.); #27613=ORIENTED_EDGE('',*,*,#20012,.T.); #27614=ORIENTED_EDGE('',*,*,#20013,.T.); #27615=ORIENTED_EDGE('',*,*,#20014,.T.); #27616=ORIENTED_EDGE('',*,*,#20015,.T.); #27617=ORIENTED_EDGE('',*,*,#20016,.T.); #27618=ORIENTED_EDGE('',*,*,#19182,.F.); #27619=ORIENTED_EDGE('',*,*,#20011,.T.); #27620=ORIENTED_EDGE('',*,*,#19785,.T.); #27621=ORIENTED_EDGE('',*,*,#20017,.T.); #27622=ORIENTED_EDGE('',*,*,#20014,.F.); #27623=ORIENTED_EDGE('',*,*,#20018,.F.); #27624=ORIENTED_EDGE('',*,*,#20019,.T.); #27625=ORIENTED_EDGE('',*,*,#19778,.F.); #27626=ORIENTED_EDGE('',*,*,#20020,.F.); #27627=ORIENTED_EDGE('',*,*,#20021,.F.); #27628=ORIENTED_EDGE('',*,*,#19779,.T.); #27629=ORIENTED_EDGE('',*,*,#20019,.F.); #27630=ORIENTED_EDGE('',*,*,#19805,.F.); #27631=ORIENTED_EDGE('',*,*,#19780,.F.); #27632=ORIENTED_EDGE('',*,*,#20021,.T.); #27633=ORIENTED_EDGE('',*,*,#20022,.F.); #27634=ORIENTED_EDGE('',*,*,#20018,.T.); #27635=ORIENTED_EDGE('',*,*,#20013,.F.); #27636=ORIENTED_EDGE('',*,*,#20023,.T.); #27637=ORIENTED_EDGE('',*,*,#19806,.T.); #27638=ORIENTED_EDGE('',*,*,#20022,.T.); #27639=ORIENTED_EDGE('',*,*,#20020,.T.); #27640=ORIENTED_EDGE('',*,*,#19434,.T.); #27641=ORIENTED_EDGE('',*,*,#19807,.F.); #27642=ORIENTED_EDGE('',*,*,#20023,.F.); #27643=ORIENTED_EDGE('',*,*,#20012,.F.); #27644=ORIENTED_EDGE('',*,*,#20017,.F.); #27645=ORIENTED_EDGE('',*,*,#19784,.F.); #27646=ORIENTED_EDGE('',*,*,#20024,.T.); #27647=ORIENTED_EDGE('',*,*,#20025,.F.); #27648=ORIENTED_EDGE('',*,*,#20026,.F.); #27649=ORIENTED_EDGE('',*,*,#20027,.T.); #27650=ORIENTED_EDGE('',*,*,#19810,.T.); #27651=ORIENTED_EDGE('',*,*,#20028,.T.); #27652=ORIENTED_EDGE('',*,*,#20015,.F.); #27653=ORIENTED_EDGE('',*,*,#20025,.T.); #27654=ORIENTED_EDGE('',*,*,#19183,.T.); #27655=ORIENTED_EDGE('',*,*,#20016,.F.); #27656=ORIENTED_EDGE('',*,*,#20028,.F.); #27657=ORIENTED_EDGE('',*,*,#19809,.F.); #27658=ORIENTED_EDGE('',*,*,#19811,.F.); #27659=ORIENTED_EDGE('',*,*,#20027,.F.); #27660=ORIENTED_EDGE('',*,*,#20029,.T.); #27661=ORIENTED_EDGE('',*,*,#19782,.F.); #27662=ORIENTED_EDGE('',*,*,#20024,.F.); #27663=ORIENTED_EDGE('',*,*,#19783,.F.); #27664=ORIENTED_EDGE('',*,*,#20029,.F.); #27665=ORIENTED_EDGE('',*,*,#20026,.T.); #27666=ORIENTED_EDGE('',*,*,#19650,.F.); #27667=ORIENTED_EDGE('',*,*,#20030,.T.); #27668=ORIENTED_EDGE('',*,*,#19551,.F.); #27669=ORIENTED_EDGE('',*,*,#20031,.F.); #27670=ORIENTED_EDGE('',*,*,#20032,.F.); #27671=ORIENTED_EDGE('',*,*,#20033,.T.); #27672=ORIENTED_EDGE('',*,*,#19549,.F.); #27673=ORIENTED_EDGE('',*,*,#19111,.T.); #27674=ORIENTED_EDGE('',*,*,#20033,.F.); #27675=ORIENTED_EDGE('',*,*,#20034,.F.); #27676=ORIENTED_EDGE('',*,*,#20035,.T.); #27677=ORIENTED_EDGE('',*,*,#20036,.T.); #27678=ORIENTED_EDGE('',*,*,#20037,.F.); #27679=ORIENTED_EDGE('',*,*,#20037,.T.); #27680=ORIENTED_EDGE('',*,*,#20038,.T.); #27681=ORIENTED_EDGE('',*,*,#20039,.T.); #27682=ORIENTED_EDGE('',*,*,#20040,.T.); #27683=ORIENTED_EDGE('',*,*,#20041,.T.); #27684=ORIENTED_EDGE('',*,*,#20042,.T.); #27685=ORIENTED_EDGE('',*,*,#20043,.T.); #27686=ORIENTED_EDGE('',*,*,#20044,.T.); #27687=ORIENTED_EDGE('',*,*,#20045,.T.); #27688=ORIENTED_EDGE('',*,*,#20046,.T.); #27689=ORIENTED_EDGE('',*,*,#20047,.T.); #27690=ORIENTED_EDGE('',*,*,#19556,.F.); #27691=ORIENTED_EDGE('',*,*,#20048,.T.); #27692=ORIENTED_EDGE('',*,*,#20049,.F.); #27693=ORIENTED_EDGE('',*,*,#20050,.F.); #27694=ORIENTED_EDGE('',*,*,#19550,.F.); #27695=ORIENTED_EDGE('',*,*,#20031,.T.); #27696=ORIENTED_EDGE('',*,*,#20050,.T.); #27697=ORIENTED_EDGE('',*,*,#20051,.T.); #27698=ORIENTED_EDGE('',*,*,#20052,.F.); #27699=ORIENTED_EDGE('',*,*,#20053,.F.); #27700=ORIENTED_EDGE('',*,*,#20054,.T.); #27701=ORIENTED_EDGE('',*,*,#20034,.T.); #27702=ORIENTED_EDGE('',*,*,#20032,.T.); #27703=ORIENTED_EDGE('',*,*,#20053,.T.); #27704=ORIENTED_EDGE('',*,*,#20055,.T.); #27705=ORIENTED_EDGE('',*,*,#20056,.F.); #27706=ORIENTED_EDGE('',*,*,#20057,.F.); #27707=ORIENTED_EDGE('',*,*,#20058,.F.); #27708=ORIENTED_EDGE('',*,*,#20059,.F.); #27709=ORIENTED_EDGE('',*,*,#20060,.T.); #27710=ORIENTED_EDGE('',*,*,#20058,.T.); #27711=ORIENTED_EDGE('',*,*,#20061,.T.); #27712=ORIENTED_EDGE('',*,*,#20047,.F.); #27713=ORIENTED_EDGE('',*,*,#19399,.F.); #27714=ORIENTED_EDGE('',*,*,#19557,.F.); #27715=ORIENTED_EDGE('',*,*,#20061,.F.); #27716=ORIENTED_EDGE('',*,*,#20057,.T.); #27717=ORIENTED_EDGE('',*,*,#20062,.T.); #27718=ORIENTED_EDGE('',*,*,#19555,.F.); #27719=ORIENTED_EDGE('',*,*,#20063,.F.); #27720=ORIENTED_EDGE('',*,*,#19646,.F.); #27721=ORIENTED_EDGE('',*,*,#19554,.F.); #27722=ORIENTED_EDGE('',*,*,#20064,.F.); #27723=ORIENTED_EDGE('',*,*,#19647,.F.); #27724=ORIENTED_EDGE('',*,*,#20063,.T.); #27725=ORIENTED_EDGE('',*,*,#19553,.F.); #27726=ORIENTED_EDGE('',*,*,#20065,.F.); #27727=ORIENTED_EDGE('',*,*,#19648,.F.); #27728=ORIENTED_EDGE('',*,*,#20064,.T.); #27729=ORIENTED_EDGE('',*,*,#19552,.F.); #27730=ORIENTED_EDGE('',*,*,#20030,.F.); #27731=ORIENTED_EDGE('',*,*,#19649,.F.); #27732=ORIENTED_EDGE('',*,*,#20065,.T.); #27733=ORIENTED_EDGE('',*,*,#20062,.F.); #27734=ORIENTED_EDGE('',*,*,#20056,.T.); #27735=ORIENTED_EDGE('',*,*,#20066,.F.); #27736=ORIENTED_EDGE('',*,*,#20067,.F.); #27737=ORIENTED_EDGE('',*,*,#20048,.F.); #27738=ORIENTED_EDGE('',*,*,#20049,.T.); #27739=ORIENTED_EDGE('',*,*,#20067,.T.); #27740=ORIENTED_EDGE('',*,*,#20068,.F.); #27741=ORIENTED_EDGE('',*,*,#20051,.F.); #27742=ORIENTED_EDGE('',*,*,#20055,.F.); #27743=ORIENTED_EDGE('',*,*,#20052,.T.); #27744=ORIENTED_EDGE('',*,*,#20068,.T.); #27745=ORIENTED_EDGE('',*,*,#20066,.T.); #27746=ORIENTED_EDGE('',*,*,#20060,.F.); #27747=ORIENTED_EDGE('',*,*,#20069,.T.); #27748=ORIENTED_EDGE('',*,*,#19385,.T.); #27749=ORIENTED_EDGE('',*,*,#19061,.T.); #27750=ORIENTED_EDGE('',*,*,#19146,.T.); #27751=ORIENTED_EDGE('',*,*,#20070,.T.); #27752=ORIENTED_EDGE('',*,*,#20035,.F.); #27753=ORIENTED_EDGE('',*,*,#20054,.F.); #27754=ORIENTED_EDGE('',*,*,#20071,.F.); #27755=ORIENTED_EDGE('',*,*,#20072,.F.); #27756=ORIENTED_EDGE('',*,*,#20073,.F.); #27757=ORIENTED_EDGE('',*,*,#20074,.F.); #27758=ORIENTED_EDGE('',*,*,#20075,.F.); #27759=ORIENTED_EDGE('',*,*,#20076,.F.); #27760=ORIENTED_EDGE('',*,*,#20077,.F.); #27761=ORIENTED_EDGE('',*,*,#20078,.F.); #27762=ORIENTED_EDGE('',*,*,#20079,.F.); #27763=ORIENTED_EDGE('',*,*,#20080,.F.); #27764=ORIENTED_EDGE('',*,*,#20081,.F.); #27765=ORIENTED_EDGE('',*,*,#20082,.F.); #27766=ORIENTED_EDGE('',*,*,#20083,.F.); #27767=ORIENTED_EDGE('',*,*,#20084,.F.); #27768=ORIENTED_EDGE('',*,*,#20085,.F.); #27769=ORIENTED_EDGE('',*,*,#20086,.F.); #27770=ORIENTED_EDGE('',*,*,#20087,.F.); #27771=ORIENTED_EDGE('',*,*,#20088,.F.); #27772=ORIENTED_EDGE('',*,*,#20089,.F.); #27773=ORIENTED_EDGE('',*,*,#20090,.F.); #27774=ORIENTED_EDGE('',*,*,#20070,.F.); #27775=ORIENTED_EDGE('',*,*,#19145,.F.); #27776=ORIENTED_EDGE('',*,*,#19265,.T.); #27777=ORIENTED_EDGE('',*,*,#20091,.T.); #27778=ORIENTED_EDGE('',*,*,#20038,.F.); #27779=ORIENTED_EDGE('',*,*,#20036,.F.); #27780=ORIENTED_EDGE('',*,*,#20091,.F.); #27781=ORIENTED_EDGE('',*,*,#19264,.T.); #27782=ORIENTED_EDGE('',*,*,#20092,.T.); #27783=ORIENTED_EDGE('',*,*,#20039,.F.); #27784=ORIENTED_EDGE('',*,*,#20092,.F.); #27785=ORIENTED_EDGE('',*,*,#19263,.T.); #27786=ORIENTED_EDGE('',*,*,#20093,.T.); #27787=ORIENTED_EDGE('',*,*,#20040,.F.); #27788=ORIENTED_EDGE('',*,*,#19340,.T.); #27789=ORIENTED_EDGE('',*,*,#20094,.F.); #27790=ORIENTED_EDGE('',*,*,#20095,.T.); #27791=ORIENTED_EDGE('',*,*,#20041,.F.); #27792=ORIENTED_EDGE('',*,*,#20093,.F.); #27793=ORIENTED_EDGE('',*,*,#19262,.F.); #27794=ORIENTED_EDGE('',*,*,#20096,.F.); #27795=ORIENTED_EDGE('',*,*,#20097,.T.); #27796=ORIENTED_EDGE('',*,*,#20042,.F.); #27797=ORIENTED_EDGE('',*,*,#20095,.F.); #27798=ORIENTED_EDGE('',*,*,#20098,.T.); #27799=ORIENTED_EDGE('',*,*,#20099,.T.); #27800=ORIENTED_EDGE('',*,*,#20100,.F.); #27801=ORIENTED_EDGE('',*,*,#20101,.F.); #27802=ORIENTED_EDGE('',*,*,#20102,.F.); #27803=ORIENTED_EDGE('',*,*,#20103,.T.); #27804=ORIENTED_EDGE('',*,*,#20104,.F.); #27805=ORIENTED_EDGE('',*,*,#20105,.T.); #27806=ORIENTED_EDGE('',*,*,#20106,.F.); #27807=ORIENTED_EDGE('',*,*,#20107,.F.); #27808=ORIENTED_EDGE('',*,*,#20108,.F.); #27809=ORIENTED_EDGE('',*,*,#20109,.T.); #27810=ORIENTED_EDGE('',*,*,#20110,.F.); #27811=ORIENTED_EDGE('',*,*,#20111,.T.); #27812=ORIENTED_EDGE('',*,*,#20112,.F.); #27813=ORIENTED_EDGE('',*,*,#20113,.F.); #27814=ORIENTED_EDGE('',*,*,#20114,.F.); #27815=ORIENTED_EDGE('',*,*,#20115,.T.); #27816=ORIENTED_EDGE('',*,*,#20116,.F.); #27817=ORIENTED_EDGE('',*,*,#20117,.T.); #27818=ORIENTED_EDGE('',*,*,#20118,.F.); #27819=ORIENTED_EDGE('',*,*,#20119,.F.); #27820=ORIENTED_EDGE('',*,*,#20120,.F.); #27821=ORIENTED_EDGE('',*,*,#20121,.T.); #27822=ORIENTED_EDGE('',*,*,#20121,.F.); #27823=ORIENTED_EDGE('',*,*,#20122,.F.); #27824=ORIENTED_EDGE('',*,*,#19284,.F.); #27825=ORIENTED_EDGE('',*,*,#20123,.T.); #27826=ORIENTED_EDGE('',*,*,#20123,.F.); #27827=ORIENTED_EDGE('',*,*,#19283,.F.); #27828=ORIENTED_EDGE('',*,*,#20124,.F.); #27829=ORIENTED_EDGE('',*,*,#20096,.T.); #27830=ORIENTED_EDGE('',*,*,#19260,.F.); #27831=ORIENTED_EDGE('',*,*,#20125,.T.); #27832=ORIENTED_EDGE('',*,*,#20043,.F.); #27833=ORIENTED_EDGE('',*,*,#20097,.F.); #27834=ORIENTED_EDGE('',*,*,#20124,.T.); #27835=ORIENTED_EDGE('',*,*,#19282,.F.); #27836=ORIENTED_EDGE('',*,*,#20125,.F.); #27837=ORIENTED_EDGE('',*,*,#19259,.T.); #27838=ORIENTED_EDGE('',*,*,#20126,.F.); #27839=ORIENTED_EDGE('',*,*,#20044,.F.); #27840=ORIENTED_EDGE('',*,*,#20126,.T.); #27841=ORIENTED_EDGE('',*,*,#19258,.T.); #27842=ORIENTED_EDGE('',*,*,#20127,.T.); #27843=ORIENTED_EDGE('',*,*,#20045,.F.); #27844=ORIENTED_EDGE('',*,*,#20127,.F.); #27845=ORIENTED_EDGE('',*,*,#19257,.T.); #27846=ORIENTED_EDGE('',*,*,#19386,.T.); #27847=ORIENTED_EDGE('',*,*,#20069,.F.); #27848=ORIENTED_EDGE('',*,*,#20059,.T.); #27849=ORIENTED_EDGE('',*,*,#20046,.F.); #27850=ORIENTED_EDGE('',*,*,#19285,.F.); #27851=ORIENTED_EDGE('',*,*,#20122,.T.); #27852=ORIENTED_EDGE('',*,*,#20120,.T.); #27853=ORIENTED_EDGE('',*,*,#20128,.T.); #27854=ORIENTED_EDGE('',*,*,#19289,.F.); #27855=ORIENTED_EDGE('',*,*,#20129,.T.); #27856=ORIENTED_EDGE('',*,*,#20130,.F.); #27857=ORIENTED_EDGE('',*,*,#20131,.T.); #27858=ORIENTED_EDGE('',*,*,#20132,.T.); #27859=ORIENTED_EDGE('',*,*,#20133,.F.); #27860=ORIENTED_EDGE('',*,*,#20134,.T.); #27861=ORIENTED_EDGE('',*,*,#20129,.F.); #27862=ORIENTED_EDGE('',*,*,#20135,.F.); #27863=ORIENTED_EDGE('',*,*,#20136,.T.); #27864=ORIENTED_EDGE('',*,*,#20137,.F.); #27865=ORIENTED_EDGE('',*,*,#20138,.F.); #27866=ORIENTED_EDGE('',*,*,#20133,.T.); #27867=ORIENTED_EDGE('',*,*,#20139,.F.); #27868=ORIENTED_EDGE('',*,*,#20140,.F.); #27869=ORIENTED_EDGE('',*,*,#20137,.T.); #27870=ORIENTED_EDGE('',*,*,#20141,.T.); #27871=ORIENTED_EDGE('',*,*,#20142,.T.); #27872=ORIENTED_EDGE('',*,*,#20143,.F.); #27873=ORIENTED_EDGE('',*,*,#20144,.T.); #27874=ORIENTED_EDGE('',*,*,#20145,.T.); #27875=ORIENTED_EDGE('',*,*,#20146,.T.); #27876=ORIENTED_EDGE('',*,*,#20147,.F.); #27877=ORIENTED_EDGE('',*,*,#20135,.T.); #27878=ORIENTED_EDGE('',*,*,#19288,.T.); #27879=ORIENTED_EDGE('',*,*,#20148,.F.); #27880=ORIENTED_EDGE('',*,*,#20149,.F.); #27881=ORIENTED_EDGE('',*,*,#20150,.T.); #27882=ORIENTED_EDGE('',*,*,#19292,.T.); #27883=ORIENTED_EDGE('',*,*,#20130,.T.); #27884=ORIENTED_EDGE('',*,*,#20138,.T.); #27885=ORIENTED_EDGE('',*,*,#20140,.T.); #27886=ORIENTED_EDGE('',*,*,#20151,.T.); #27887=ORIENTED_EDGE('',*,*,#20152,.F.); #27888=ORIENTED_EDGE('',*,*,#20153,.F.); #27889=ORIENTED_EDGE('',*,*,#20154,.F.); #27890=ORIENTED_EDGE('',*,*,#20155,.F.); #27891=ORIENTED_EDGE('',*,*,#20156,.F.); #27892=ORIENTED_EDGE('',*,*,#20157,.F.); #27893=ORIENTED_EDGE('',*,*,#20158,.F.); #27894=ORIENTED_EDGE('',*,*,#20159,.F.); #27895=ORIENTED_EDGE('',*,*,#20160,.F.); #27896=ORIENTED_EDGE('',*,*,#19293,.F.); #27897=ORIENTED_EDGE('',*,*,#20150,.F.); #27898=ORIENTED_EDGE('',*,*,#20161,.F.); #27899=ORIENTED_EDGE('',*,*,#20162,.F.); #27900=ORIENTED_EDGE('',*,*,#20163,.F.); #27901=ORIENTED_EDGE('',*,*,#20164,.F.); #27902=ORIENTED_EDGE('',*,*,#20165,.F.); #27903=ORIENTED_EDGE('',*,*,#20166,.F.); #27904=ORIENTED_EDGE('',*,*,#20167,.F.); #27905=ORIENTED_EDGE('',*,*,#20168,.F.); #27906=ORIENTED_EDGE('',*,*,#20169,.F.); #27907=ORIENTED_EDGE('',*,*,#20170,.F.); #27908=ORIENTED_EDGE('',*,*,#20171,.F.); #27909=ORIENTED_EDGE('',*,*,#20172,.T.); #27910=ORIENTED_EDGE('',*,*,#20173,.T.); #27911=ORIENTED_EDGE('',*,*,#20174,.T.); #27912=ORIENTED_EDGE('',*,*,#20175,.F.); #27913=ORIENTED_EDGE('',*,*,#20151,.F.); #27914=ORIENTED_EDGE('',*,*,#20176,.F.); #27915=ORIENTED_EDGE('',*,*,#20177,.F.); #27916=ORIENTED_EDGE('',*,*,#20178,.F.); #27917=ORIENTED_EDGE('',*,*,#20179,.T.); #27918=ORIENTED_EDGE('',*,*,#20180,.T.); #27919=ORIENTED_EDGE('',*,*,#20181,.T.); #27920=ORIENTED_EDGE('',*,*,#20182,.F.); #27921=ORIENTED_EDGE('',*,*,#20183,.F.); #27922=ORIENTED_EDGE('',*,*,#20184,.F.); #27923=ORIENTED_EDGE('',*,*,#20185,.F.); #27924=ORIENTED_EDGE('',*,*,#20186,.F.); #27925=ORIENTED_EDGE('',*,*,#20187,.T.); #27926=ORIENTED_EDGE('',*,*,#20188,.T.); #27927=ORIENTED_EDGE('',*,*,#20189,.T.); #27928=ORIENTED_EDGE('',*,*,#20190,.F.); #27929=ORIENTED_EDGE('',*,*,#20191,.F.); #27930=ORIENTED_EDGE('',*,*,#20192,.F.); #27931=ORIENTED_EDGE('',*,*,#20193,.F.); #27932=ORIENTED_EDGE('',*,*,#20194,.F.); #27933=ORIENTED_EDGE('',*,*,#20195,.T.); #27934=ORIENTED_EDGE('',*,*,#20196,.T.); #27935=ORIENTED_EDGE('',*,*,#20197,.T.); #27936=ORIENTED_EDGE('',*,*,#20198,.F.); #27937=ORIENTED_EDGE('',*,*,#20199,.F.); #27938=ORIENTED_EDGE('',*,*,#20200,.F.); #27939=ORIENTED_EDGE('',*,*,#20083,.T.); #27940=ORIENTED_EDGE('',*,*,#20201,.T.); #27941=ORIENTED_EDGE('',*,*,#20195,.F.); #27942=ORIENTED_EDGE('',*,*,#20202,.F.); #27943=ORIENTED_EDGE('',*,*,#20079,.T.); #27944=ORIENTED_EDGE('',*,*,#20203,.T.); #27945=ORIENTED_EDGE('',*,*,#20187,.F.); #27946=ORIENTED_EDGE('',*,*,#20204,.F.); #27947=ORIENTED_EDGE('',*,*,#20075,.T.); #27948=ORIENTED_EDGE('',*,*,#20205,.T.); #27949=ORIENTED_EDGE('',*,*,#20179,.F.); #27950=ORIENTED_EDGE('',*,*,#20206,.F.); #27951=ORIENTED_EDGE('',*,*,#20071,.T.); #27952=ORIENTED_EDGE('',*,*,#20207,.T.); #27953=ORIENTED_EDGE('',*,*,#20172,.F.); #27954=ORIENTED_EDGE('',*,*,#20208,.F.); #27955=ORIENTED_EDGE('',*,*,#20087,.T.); #27956=ORIENTED_EDGE('',*,*,#20209,.T.); #27957=ORIENTED_EDGE('',*,*,#20210,.F.); #27958=ORIENTED_EDGE('',*,*,#20211,.F.); #27959=ORIENTED_EDGE('',*,*,#20212,.F.); #27960=ORIENTED_EDGE('',*,*,#20213,.T.); #27961=ORIENTED_EDGE('',*,*,#20210,.T.); #27962=ORIENTED_EDGE('',*,*,#20213,.F.); #27963=ORIENTED_EDGE('',*,*,#20214,.F.); #27964=ORIENTED_EDGE('',*,*,#20215,.T.); #27965=ORIENTED_EDGE('',*,*,#20216,.T.); #27966=ORIENTED_EDGE('',*,*,#20216,.F.); #27967=ORIENTED_EDGE('',*,*,#20217,.F.); #27968=ORIENTED_EDGE('',*,*,#20084,.T.); #27969=ORIENTED_EDGE('',*,*,#20200,.T.); #27970=ORIENTED_EDGE('',*,*,#20218,.F.); #27971=ORIENTED_EDGE('',*,*,#20085,.T.); #27972=ORIENTED_EDGE('',*,*,#20217,.T.); #27973=ORIENTED_EDGE('',*,*,#20219,.F.); #27974=ORIENTED_EDGE('',*,*,#20220,.T.); #27975=ORIENTED_EDGE('',*,*,#20219,.T.); #27976=ORIENTED_EDGE('',*,*,#20215,.F.); #27977=ORIENTED_EDGE('',*,*,#20221,.F.); #27978=ORIENTED_EDGE('',*,*,#20212,.T.); #27979=ORIENTED_EDGE('',*,*,#20222,.T.); #27980=ORIENTED_EDGE('',*,*,#20221,.T.); #27981=ORIENTED_EDGE('',*,*,#20214,.T.); #27982=ORIENTED_EDGE('',*,*,#20223,.T.); #27983=ORIENTED_EDGE('',*,*,#20220,.F.); #27984=ORIENTED_EDGE('',*,*,#20222,.F.); #27985=ORIENTED_EDGE('',*,*,#20211,.T.); #27986=ORIENTED_EDGE('',*,*,#20223,.F.); #27987=ORIENTED_EDGE('',*,*,#20209,.F.); #27988=ORIENTED_EDGE('',*,*,#20086,.T.); #27989=ORIENTED_EDGE('',*,*,#20218,.T.); #27990=ORIENTED_EDGE('',*,*,#19347,.T.); #27991=ORIENTED_EDGE('',*,*,#20224,.F.); #27992=ORIENTED_EDGE('',*,*,#20088,.T.); #27993=ORIENTED_EDGE('',*,*,#20208,.T.); #27994=ORIENTED_EDGE('',*,*,#20171,.T.); #27995=ORIENTED_EDGE('',*,*,#20225,.T.); #27996=ORIENTED_EDGE('',*,*,#19348,.F.); #27997=ORIENTED_EDGE('',*,*,#20225,.F.); #27998=ORIENTED_EDGE('',*,*,#20170,.T.); #27999=ORIENTED_EDGE('',*,*,#20226,.T.); #28000=ORIENTED_EDGE('',*,*,#19345,.F.); #28001=ORIENTED_EDGE('',*,*,#20226,.F.); #28002=ORIENTED_EDGE('',*,*,#20169,.T.); #28003=ORIENTED_EDGE('',*,*,#20207,.F.); #28004=ORIENTED_EDGE('',*,*,#20090,.T.); #28005=ORIENTED_EDGE('',*,*,#20227,.T.); #28006=ORIENTED_EDGE('',*,*,#19346,.F.); #28007=ORIENTED_EDGE('',*,*,#20227,.F.); #28008=ORIENTED_EDGE('',*,*,#20089,.T.); #28009=ORIENTED_EDGE('',*,*,#20224,.T.); #28010=ORIENTED_EDGE('',*,*,#19351,.T.); #28011=ORIENTED_EDGE('',*,*,#20228,.F.); #28012=ORIENTED_EDGE('',*,*,#20072,.T.); #28013=ORIENTED_EDGE('',*,*,#20206,.T.); #28014=ORIENTED_EDGE('',*,*,#20178,.T.); #28015=ORIENTED_EDGE('',*,*,#20229,.T.); #28016=ORIENTED_EDGE('',*,*,#19352,.F.); #28017=ORIENTED_EDGE('',*,*,#20229,.F.); #28018=ORIENTED_EDGE('',*,*,#20177,.T.); #28019=ORIENTED_EDGE('',*,*,#20230,.T.); #28020=ORIENTED_EDGE('',*,*,#19349,.F.); #28021=ORIENTED_EDGE('',*,*,#20230,.F.); #28022=ORIENTED_EDGE('',*,*,#20176,.T.); #28023=ORIENTED_EDGE('',*,*,#20205,.F.); #28024=ORIENTED_EDGE('',*,*,#20074,.T.); #28025=ORIENTED_EDGE('',*,*,#20231,.T.); #28026=ORIENTED_EDGE('',*,*,#19350,.F.); #28027=ORIENTED_EDGE('',*,*,#20231,.F.); #28028=ORIENTED_EDGE('',*,*,#20073,.T.); #28029=ORIENTED_EDGE('',*,*,#20228,.T.); #28030=ORIENTED_EDGE('',*,*,#19358,.T.); #28031=ORIENTED_EDGE('',*,*,#20232,.F.); #28032=ORIENTED_EDGE('',*,*,#20076,.T.); #28033=ORIENTED_EDGE('',*,*,#20204,.T.); #28034=ORIENTED_EDGE('',*,*,#20186,.T.); #28035=ORIENTED_EDGE('',*,*,#20233,.T.); #28036=ORIENTED_EDGE('',*,*,#19359,.F.); #28037=ORIENTED_EDGE('',*,*,#20233,.F.); #28038=ORIENTED_EDGE('',*,*,#20185,.T.); #28039=ORIENTED_EDGE('',*,*,#20234,.T.); #28040=ORIENTED_EDGE('',*,*,#19360,.F.); #28041=ORIENTED_EDGE('',*,*,#20234,.F.); #28042=ORIENTED_EDGE('',*,*,#20184,.T.); #28043=ORIENTED_EDGE('',*,*,#20203,.F.); #28044=ORIENTED_EDGE('',*,*,#20078,.T.); #28045=ORIENTED_EDGE('',*,*,#20235,.T.); #28046=ORIENTED_EDGE('',*,*,#19357,.F.); #28047=ORIENTED_EDGE('',*,*,#20235,.F.); #28048=ORIENTED_EDGE('',*,*,#20077,.T.); #28049=ORIENTED_EDGE('',*,*,#20232,.T.); #28050=ORIENTED_EDGE('',*,*,#19354,.T.); #28051=ORIENTED_EDGE('',*,*,#20236,.F.); #28052=ORIENTED_EDGE('',*,*,#20080,.T.); #28053=ORIENTED_EDGE('',*,*,#20202,.T.); #28054=ORIENTED_EDGE('',*,*,#20194,.T.); #28055=ORIENTED_EDGE('',*,*,#20237,.T.); #28056=ORIENTED_EDGE('',*,*,#19355,.F.); #28057=ORIENTED_EDGE('',*,*,#20237,.F.); #28058=ORIENTED_EDGE('',*,*,#20193,.T.); #28059=ORIENTED_EDGE('',*,*,#20238,.T.); #28060=ORIENTED_EDGE('',*,*,#19356,.F.); #28061=ORIENTED_EDGE('',*,*,#20238,.F.); #28062=ORIENTED_EDGE('',*,*,#20192,.T.); #28063=ORIENTED_EDGE('',*,*,#20201,.F.); #28064=ORIENTED_EDGE('',*,*,#20082,.T.); #28065=ORIENTED_EDGE('',*,*,#20239,.T.); #28066=ORIENTED_EDGE('',*,*,#19353,.F.); #28067=ORIENTED_EDGE('',*,*,#20239,.F.); #28068=ORIENTED_EDGE('',*,*,#20081,.T.); #28069=ORIENTED_EDGE('',*,*,#20236,.T.); #28070=ORIENTED_EDGE('',*,*,#20240,.F.); #28071=ORIENTED_EDGE('',*,*,#20241,.F.); #28072=ORIENTED_EDGE('',*,*,#20152,.T.); #28073=ORIENTED_EDGE('',*,*,#20175,.T.); #28074=ORIENTED_EDGE('',*,*,#20241,.T.); #28075=ORIENTED_EDGE('',*,*,#20242,.F.); #28076=ORIENTED_EDGE('',*,*,#20243,.F.); #28077=ORIENTED_EDGE('',*,*,#20153,.T.); #28078=ORIENTED_EDGE('',*,*,#20243,.T.); #28079=ORIENTED_EDGE('',*,*,#20244,.F.); #28080=ORIENTED_EDGE('',*,*,#20245,.F.); #28081=ORIENTED_EDGE('',*,*,#20154,.T.); #28082=ORIENTED_EDGE('',*,*,#20155,.T.); #28083=ORIENTED_EDGE('',*,*,#20245,.T.); #28084=ORIENTED_EDGE('',*,*,#20246,.F.); #28085=ORIENTED_EDGE('',*,*,#20247,.F.); #28086=ORIENTED_EDGE('',*,*,#20247,.T.); #28087=ORIENTED_EDGE('',*,*,#20248,.F.); #28088=ORIENTED_EDGE('',*,*,#20249,.F.); #28089=ORIENTED_EDGE('',*,*,#20156,.T.); #28090=ORIENTED_EDGE('',*,*,#20249,.T.); #28091=ORIENTED_EDGE('',*,*,#20250,.F.); #28092=ORIENTED_EDGE('',*,*,#20251,.F.); #28093=ORIENTED_EDGE('',*,*,#20157,.T.); #28094=ORIENTED_EDGE('',*,*,#20251,.T.); #28095=ORIENTED_EDGE('',*,*,#20252,.F.); #28096=ORIENTED_EDGE('',*,*,#20253,.F.); #28097=ORIENTED_EDGE('',*,*,#20158,.T.); #28098=ORIENTED_EDGE('',*,*,#20253,.T.); #28099=ORIENTED_EDGE('',*,*,#20254,.F.); #28100=ORIENTED_EDGE('',*,*,#20255,.F.); #28101=ORIENTED_EDGE('',*,*,#20159,.T.); #28102=ORIENTED_EDGE('',*,*,#20139,.T.); #28103=ORIENTED_EDGE('',*,*,#20132,.F.); #28104=ORIENTED_EDGE('',*,*,#19294,.F.); #28105=ORIENTED_EDGE('',*,*,#20160,.T.); #28106=ORIENTED_EDGE('',*,*,#20255,.T.); #28107=ORIENTED_EDGE('',*,*,#20256,.F.); #28108=ORIENTED_EDGE('',*,*,#19286,.F.); #28109=ORIENTED_EDGE('',*,*,#20134,.F.); #28110=ORIENTED_EDGE('',*,*,#20257,.F.); #28111=ORIENTED_EDGE('',*,*,#20258,.F.); #28112=ORIENTED_EDGE('',*,*,#20259,.F.); #28113=ORIENTED_EDGE('',*,*,#20260,.F.); #28114=ORIENTED_EDGE('',*,*,#20261,.T.); #28115=ORIENTED_EDGE('',*,*,#20141,.F.); #28116=ORIENTED_EDGE('',*,*,#20143,.T.); #28117=ORIENTED_EDGE('',*,*,#20142,.F.); #28118=ORIENTED_EDGE('',*,*,#20261,.F.); #28119=ORIENTED_EDGE('',*,*,#20262,.F.); #28120=ORIENTED_EDGE('',*,*,#20262,.T.); #28121=ORIENTED_EDGE('',*,*,#20260,.T.); #28122=ORIENTED_EDGE('',*,*,#20263,.F.); #28123=ORIENTED_EDGE('',*,*,#20144,.F.); #28124=ORIENTED_EDGE('',*,*,#20145,.F.); #28125=ORIENTED_EDGE('',*,*,#20263,.T.); #28126=ORIENTED_EDGE('',*,*,#20259,.T.); #28127=ORIENTED_EDGE('',*,*,#20264,.T.); #28128=ORIENTED_EDGE('',*,*,#20146,.F.); #28129=ORIENTED_EDGE('',*,*,#20264,.F.); #28130=ORIENTED_EDGE('',*,*,#20258,.T.); #28131=ORIENTED_EDGE('',*,*,#20265,.F.); #28132=ORIENTED_EDGE('',*,*,#20265,.T.); #28133=ORIENTED_EDGE('',*,*,#20257,.T.); #28134=ORIENTED_EDGE('',*,*,#20136,.F.); #28135=ORIENTED_EDGE('',*,*,#20147,.T.); #28136=ORIENTED_EDGE('',*,*,#20266,.T.); #28137=ORIENTED_EDGE('',*,*,#20267,.T.); #28138=ORIENTED_EDGE('',*,*,#20268,.T.); #28139=ORIENTED_EDGE('',*,*,#20269,.T.); #28140=ORIENTED_EDGE('',*,*,#20270,.T.); #28141=ORIENTED_EDGE('',*,*,#20271,.T.); #28142=ORIENTED_EDGE('',*,*,#20272,.T.); #28143=ORIENTED_EDGE('',*,*,#20273,.T.); #28144=ORIENTED_EDGE('',*,*,#20148,.T.); #28145=ORIENTED_EDGE('',*,*,#19287,.T.); #28146=ORIENTED_EDGE('',*,*,#20256,.T.); #28147=ORIENTED_EDGE('',*,*,#20254,.T.); #28148=ORIENTED_EDGE('',*,*,#20252,.T.); #28149=ORIENTED_EDGE('',*,*,#20250,.T.); #28150=ORIENTED_EDGE('',*,*,#20248,.T.); #28151=ORIENTED_EDGE('',*,*,#20246,.T.); #28152=ORIENTED_EDGE('',*,*,#20244,.T.); #28153=ORIENTED_EDGE('',*,*,#20242,.T.); #28154=ORIENTED_EDGE('',*,*,#20240,.T.); #28155=ORIENTED_EDGE('',*,*,#20174,.F.); #28156=ORIENTED_EDGE('',*,*,#20161,.T.); #28157=ORIENTED_EDGE('',*,*,#20149,.T.); #28158=ORIENTED_EDGE('',*,*,#20273,.F.); #28159=ORIENTED_EDGE('',*,*,#20274,.F.); #28160=ORIENTED_EDGE('',*,*,#20162,.T.); #28161=ORIENTED_EDGE('',*,*,#20274,.T.); #28162=ORIENTED_EDGE('',*,*,#20272,.F.); #28163=ORIENTED_EDGE('',*,*,#20275,.F.); #28164=ORIENTED_EDGE('',*,*,#20163,.T.); #28165=ORIENTED_EDGE('',*,*,#20275,.T.); #28166=ORIENTED_EDGE('',*,*,#20271,.F.); #28167=ORIENTED_EDGE('',*,*,#20276,.F.); #28168=ORIENTED_EDGE('',*,*,#20164,.T.); #28169=ORIENTED_EDGE('',*,*,#20276,.T.); #28170=ORIENTED_EDGE('',*,*,#20270,.F.); #28171=ORIENTED_EDGE('',*,*,#20277,.F.); #28172=ORIENTED_EDGE('',*,*,#20277,.T.); #28173=ORIENTED_EDGE('',*,*,#20269,.F.); #28174=ORIENTED_EDGE('',*,*,#20278,.F.); #28175=ORIENTED_EDGE('',*,*,#20165,.T.); #28176=ORIENTED_EDGE('',*,*,#20166,.T.); #28177=ORIENTED_EDGE('',*,*,#20278,.T.); #28178=ORIENTED_EDGE('',*,*,#20268,.F.); #28179=ORIENTED_EDGE('',*,*,#20279,.F.); #28180=ORIENTED_EDGE('',*,*,#20167,.T.); #28181=ORIENTED_EDGE('',*,*,#20279,.T.); #28182=ORIENTED_EDGE('',*,*,#20267,.F.); #28183=ORIENTED_EDGE('',*,*,#20280,.F.); #28184=ORIENTED_EDGE('',*,*,#20173,.F.); #28185=ORIENTED_EDGE('',*,*,#20168,.T.); #28186=ORIENTED_EDGE('',*,*,#20280,.T.); #28187=ORIENTED_EDGE('',*,*,#20266,.F.); #28188=ORIENTED_EDGE('',*,*,#20183,.T.); #28189=ORIENTED_EDGE('',*,*,#20281,.F.); #28190=ORIENTED_EDGE('',*,*,#20282,.F.); #28191=ORIENTED_EDGE('',*,*,#20283,.F.); #28192=ORIENTED_EDGE('',*,*,#20284,.F.); #28193=ORIENTED_EDGE('',*,*,#20285,.F.); #28194=ORIENTED_EDGE('',*,*,#20286,.F.); #28195=ORIENTED_EDGE('',*,*,#20287,.F.); #28196=ORIENTED_EDGE('',*,*,#20288,.F.); #28197=ORIENTED_EDGE('',*,*,#20289,.F.); #28198=ORIENTED_EDGE('',*,*,#19307,.F.); #28199=ORIENTED_EDGE('',*,*,#20290,.F.); #28200=ORIENTED_EDGE('',*,*,#20291,.F.); #28201=ORIENTED_EDGE('',*,*,#20292,.F.); #28202=ORIENTED_EDGE('',*,*,#20293,.F.); #28203=ORIENTED_EDGE('',*,*,#20294,.F.); #28204=ORIENTED_EDGE('',*,*,#20295,.F.); #28205=ORIENTED_EDGE('',*,*,#20296,.F.); #28206=ORIENTED_EDGE('',*,*,#20297,.F.); #28207=ORIENTED_EDGE('',*,*,#20298,.F.); #28208=ORIENTED_EDGE('',*,*,#20298,.T.); #28209=ORIENTED_EDGE('',*,*,#20299,.T.); #28210=ORIENTED_EDGE('',*,*,#20300,.F.); #28211=ORIENTED_EDGE('',*,*,#20180,.F.); #28212=ORIENTED_EDGE('',*,*,#20300,.T.); #28213=ORIENTED_EDGE('',*,*,#20301,.T.); #28214=ORIENTED_EDGE('',*,*,#20302,.T.); #28215=ORIENTED_EDGE('',*,*,#20303,.T.); #28216=ORIENTED_EDGE('',*,*,#20304,.T.); #28217=ORIENTED_EDGE('',*,*,#20305,.T.); #28218=ORIENTED_EDGE('',*,*,#20306,.T.); #28219=ORIENTED_EDGE('',*,*,#20307,.T.); #28220=ORIENTED_EDGE('',*,*,#20308,.T.); #28221=ORIENTED_EDGE('',*,*,#19301,.T.); #28222=ORIENTED_EDGE('',*,*,#20309,.T.); #28223=ORIENTED_EDGE('',*,*,#20310,.T.); #28224=ORIENTED_EDGE('',*,*,#20311,.T.); #28225=ORIENTED_EDGE('',*,*,#20312,.T.); #28226=ORIENTED_EDGE('',*,*,#20313,.T.); #28227=ORIENTED_EDGE('',*,*,#20314,.T.); #28228=ORIENTED_EDGE('',*,*,#20315,.T.); #28229=ORIENTED_EDGE('',*,*,#20316,.T.); #28230=ORIENTED_EDGE('',*,*,#20317,.T.); #28231=ORIENTED_EDGE('',*,*,#20181,.F.); #28232=ORIENTED_EDGE('',*,*,#20182,.T.); #28233=ORIENTED_EDGE('',*,*,#20317,.F.); #28234=ORIENTED_EDGE('',*,*,#20318,.F.); #28235=ORIENTED_EDGE('',*,*,#20281,.T.); #28236=ORIENTED_EDGE('',*,*,#20318,.T.); #28237=ORIENTED_EDGE('',*,*,#20316,.F.); #28238=ORIENTED_EDGE('',*,*,#20319,.F.); #28239=ORIENTED_EDGE('',*,*,#20282,.T.); #28240=ORIENTED_EDGE('',*,*,#20283,.T.); #28241=ORIENTED_EDGE('',*,*,#20319,.T.); #28242=ORIENTED_EDGE('',*,*,#20315,.F.); #28243=ORIENTED_EDGE('',*,*,#20320,.F.); #28244=ORIENTED_EDGE('',*,*,#20284,.T.); #28245=ORIENTED_EDGE('',*,*,#20320,.T.); #28246=ORIENTED_EDGE('',*,*,#20314,.F.); #28247=ORIENTED_EDGE('',*,*,#20321,.F.); #28248=ORIENTED_EDGE('',*,*,#20285,.T.); #28249=ORIENTED_EDGE('',*,*,#20321,.T.); #28250=ORIENTED_EDGE('',*,*,#20313,.F.); #28251=ORIENTED_EDGE('',*,*,#20322,.F.); #28252=ORIENTED_EDGE('',*,*,#20322,.T.); #28253=ORIENTED_EDGE('',*,*,#20312,.F.); #28254=ORIENTED_EDGE('',*,*,#20323,.F.); #28255=ORIENTED_EDGE('',*,*,#20286,.T.); #28256=ORIENTED_EDGE('',*,*,#20287,.T.); #28257=ORIENTED_EDGE('',*,*,#20323,.T.); #28258=ORIENTED_EDGE('',*,*,#20311,.F.); #28259=ORIENTED_EDGE('',*,*,#20324,.F.); #28260=ORIENTED_EDGE('',*,*,#20324,.T.); #28261=ORIENTED_EDGE('',*,*,#20310,.F.); #28262=ORIENTED_EDGE('',*,*,#20325,.F.); #28263=ORIENTED_EDGE('',*,*,#20288,.T.); #28264=ORIENTED_EDGE('',*,*,#20326,.T.); #28265=ORIENTED_EDGE('',*,*,#20327,.F.); #28266=ORIENTED_EDGE('',*,*,#19308,.F.); #28267=ORIENTED_EDGE('',*,*,#20289,.T.); #28268=ORIENTED_EDGE('',*,*,#20325,.T.); #28269=ORIENTED_EDGE('',*,*,#20309,.F.); #28270=ORIENTED_EDGE('',*,*,#19300,.F.); #28271=ORIENTED_EDGE('',*,*,#20328,.F.); #28272=ORIENTED_EDGE('',*,*,#20329,.F.); #28273=ORIENTED_EDGE('',*,*,#20330,.F.); #28274=ORIENTED_EDGE('',*,*,#20331,.F.); #28275=ORIENTED_EDGE('',*,*,#20332,.F.); #28276=ORIENTED_EDGE('',*,*,#20333,.T.); #28277=ORIENTED_EDGE('',*,*,#20334,.F.); #28278=ORIENTED_EDGE('',*,*,#20335,.F.); #28279=ORIENTED_EDGE('',*,*,#20336,.T.); #28280=ORIENTED_EDGE('',*,*,#20334,.T.); #28281=ORIENTED_EDGE('',*,*,#20337,.T.); #28282=ORIENTED_EDGE('',*,*,#20338,.F.); #28283=ORIENTED_EDGE('',*,*,#20339,.T.); #28284=ORIENTED_EDGE('',*,*,#20340,.T.); #28285=ORIENTED_EDGE('',*,*,#20341,.T.); #28286=ORIENTED_EDGE('',*,*,#20342,.F.); #28287=ORIENTED_EDGE('',*,*,#20343,.T.); #28288=ORIENTED_EDGE('',*,*,#19302,.T.); #28289=ORIENTED_EDGE('',*,*,#20308,.F.); #28290=ORIENTED_EDGE('',*,*,#20344,.F.); #28291=ORIENTED_EDGE('',*,*,#20290,.T.); #28292=ORIENTED_EDGE('',*,*,#19306,.T.); #28293=ORIENTED_EDGE('',*,*,#20345,.T.); #28294=ORIENTED_EDGE('',*,*,#20346,.T.); #28295=ORIENTED_EDGE('',*,*,#20335,.T.); #28296=ORIENTED_EDGE('',*,*,#20336,.F.); #28297=ORIENTED_EDGE('',*,*,#20346,.F.); #28298=ORIENTED_EDGE('',*,*,#20347,.T.); #28299=ORIENTED_EDGE('',*,*,#20326,.F.); #28300=ORIENTED_EDGE('',*,*,#20347,.F.); #28301=ORIENTED_EDGE('',*,*,#20345,.F.); #28302=ORIENTED_EDGE('',*,*,#20348,.T.); #28303=ORIENTED_EDGE('',*,*,#20327,.T.); #28304=ORIENTED_EDGE('',*,*,#20349,.T.); #28305=ORIENTED_EDGE('',*,*,#20328,.T.); #28306=ORIENTED_EDGE('',*,*,#20350,.F.); #28307=ORIENTED_EDGE('',*,*,#20343,.F.); #28308=ORIENTED_EDGE('',*,*,#20348,.F.); #28309=ORIENTED_EDGE('',*,*,#19305,.F.); #28310=ORIENTED_EDGE('',*,*,#20351,.F.); #28311=ORIENTED_EDGE('',*,*,#20112,.T.); #28312=ORIENTED_EDGE('',*,*,#20352,.F.); #28313=ORIENTED_EDGE('',*,*,#19309,.F.); #28314=ORIENTED_EDGE('',*,*,#20111,.F.); #28315=ORIENTED_EDGE('',*,*,#20353,.F.); #28316=ORIENTED_EDGE('',*,*,#19310,.F.); #28317=ORIENTED_EDGE('',*,*,#20352,.T.); #28318=ORIENTED_EDGE('',*,*,#20353,.T.); #28319=ORIENTED_EDGE('',*,*,#20110,.T.); #28320=ORIENTED_EDGE('',*,*,#20354,.F.); #28321=ORIENTED_EDGE('',*,*,#19311,.F.); #28322=ORIENTED_EDGE('',*,*,#20109,.F.); #28323=ORIENTED_EDGE('',*,*,#20355,.F.); #28324=ORIENTED_EDGE('',*,*,#19312,.F.); #28325=ORIENTED_EDGE('',*,*,#20354,.T.); #28326=ORIENTED_EDGE('',*,*,#20356,.T.); #28327=ORIENTED_EDGE('',*,*,#19313,.F.); #28328=ORIENTED_EDGE('',*,*,#20355,.T.); #28329=ORIENTED_EDGE('',*,*,#20108,.T.); #28330=ORIENTED_EDGE('',*,*,#20357,.T.); #28331=ORIENTED_EDGE('',*,*,#19317,.F.); #28332=ORIENTED_EDGE('',*,*,#20358,.F.); #28333=ORIENTED_EDGE('',*,*,#20359,.T.); #28334=ORIENTED_EDGE('',*,*,#20360,.T.); #28335=ORIENTED_EDGE('',*,*,#20361,.F.); #28336=ORIENTED_EDGE('',*,*,#20362,.T.); #28337=ORIENTED_EDGE('',*,*,#20356,.F.); #28338=ORIENTED_EDGE('',*,*,#20363,.F.); #28339=ORIENTED_EDGE('',*,*,#20364,.T.); #28340=ORIENTED_EDGE('',*,*,#20365,.F.); #28341=ORIENTED_EDGE('',*,*,#20366,.F.); #28342=ORIENTED_EDGE('',*,*,#20361,.T.); #28343=ORIENTED_EDGE('',*,*,#20367,.F.); #28344=ORIENTED_EDGE('',*,*,#20368,.F.); #28345=ORIENTED_EDGE('',*,*,#20365,.T.); #28346=ORIENTED_EDGE('',*,*,#20369,.T.); #28347=ORIENTED_EDGE('',*,*,#20370,.T.); #28348=ORIENTED_EDGE('',*,*,#20371,.F.); #28349=ORIENTED_EDGE('',*,*,#20372,.T.); #28350=ORIENTED_EDGE('',*,*,#20373,.T.); #28351=ORIENTED_EDGE('',*,*,#20374,.T.); #28352=ORIENTED_EDGE('',*,*,#20375,.F.); #28353=ORIENTED_EDGE('',*,*,#20363,.T.); #28354=ORIENTED_EDGE('',*,*,#19316,.T.); #28355=ORIENTED_EDGE('',*,*,#20376,.F.); #28356=ORIENTED_EDGE('',*,*,#20377,.F.); #28357=ORIENTED_EDGE('',*,*,#20378,.T.); #28358=ORIENTED_EDGE('',*,*,#19320,.T.); #28359=ORIENTED_EDGE('',*,*,#20358,.T.); #28360=ORIENTED_EDGE('',*,*,#20366,.T.); #28361=ORIENTED_EDGE('',*,*,#20368,.T.); #28362=ORIENTED_EDGE('',*,*,#20191,.T.); #28363=ORIENTED_EDGE('',*,*,#20379,.F.); #28364=ORIENTED_EDGE('',*,*,#20380,.F.); #28365=ORIENTED_EDGE('',*,*,#20381,.F.); #28366=ORIENTED_EDGE('',*,*,#20382,.F.); #28367=ORIENTED_EDGE('',*,*,#20383,.F.); #28368=ORIENTED_EDGE('',*,*,#20384,.F.); #28369=ORIENTED_EDGE('',*,*,#20385,.F.); #28370=ORIENTED_EDGE('',*,*,#20386,.F.); #28371=ORIENTED_EDGE('',*,*,#20387,.F.); #28372=ORIENTED_EDGE('',*,*,#19321,.F.); #28373=ORIENTED_EDGE('',*,*,#20378,.F.); #28374=ORIENTED_EDGE('',*,*,#20388,.F.); #28375=ORIENTED_EDGE('',*,*,#20389,.F.); #28376=ORIENTED_EDGE('',*,*,#20390,.F.); #28377=ORIENTED_EDGE('',*,*,#20391,.F.); #28378=ORIENTED_EDGE('',*,*,#20392,.F.); #28379=ORIENTED_EDGE('',*,*,#20393,.F.); #28380=ORIENTED_EDGE('',*,*,#20394,.F.); #28381=ORIENTED_EDGE('',*,*,#20395,.F.); #28382=ORIENTED_EDGE('',*,*,#20395,.T.); #28383=ORIENTED_EDGE('',*,*,#20396,.T.); #28384=ORIENTED_EDGE('',*,*,#20397,.F.); #28385=ORIENTED_EDGE('',*,*,#20188,.F.); #28386=ORIENTED_EDGE('',*,*,#20397,.T.); #28387=ORIENTED_EDGE('',*,*,#20398,.T.); #28388=ORIENTED_EDGE('',*,*,#20399,.T.); #28389=ORIENTED_EDGE('',*,*,#20400,.T.); #28390=ORIENTED_EDGE('',*,*,#20401,.T.); #28391=ORIENTED_EDGE('',*,*,#20402,.T.); #28392=ORIENTED_EDGE('',*,*,#20403,.T.); #28393=ORIENTED_EDGE('',*,*,#20404,.T.); #28394=ORIENTED_EDGE('',*,*,#20376,.T.); #28395=ORIENTED_EDGE('',*,*,#19315,.T.); #28396=ORIENTED_EDGE('',*,*,#20405,.T.); #28397=ORIENTED_EDGE('',*,*,#20406,.T.); #28398=ORIENTED_EDGE('',*,*,#20407,.T.); #28399=ORIENTED_EDGE('',*,*,#20408,.T.); #28400=ORIENTED_EDGE('',*,*,#20409,.T.); #28401=ORIENTED_EDGE('',*,*,#20410,.T.); #28402=ORIENTED_EDGE('',*,*,#20411,.T.); #28403=ORIENTED_EDGE('',*,*,#20412,.T.); #28404=ORIENTED_EDGE('',*,*,#20413,.T.); #28405=ORIENTED_EDGE('',*,*,#20189,.F.); #28406=ORIENTED_EDGE('',*,*,#20190,.T.); #28407=ORIENTED_EDGE('',*,*,#20413,.F.); #28408=ORIENTED_EDGE('',*,*,#20414,.F.); #28409=ORIENTED_EDGE('',*,*,#20379,.T.); #28410=ORIENTED_EDGE('',*,*,#20414,.T.); #28411=ORIENTED_EDGE('',*,*,#20412,.F.); #28412=ORIENTED_EDGE('',*,*,#20415,.F.); #28413=ORIENTED_EDGE('',*,*,#20380,.T.); #28414=ORIENTED_EDGE('',*,*,#20381,.T.); #28415=ORIENTED_EDGE('',*,*,#20415,.T.); #28416=ORIENTED_EDGE('',*,*,#20411,.F.); #28417=ORIENTED_EDGE('',*,*,#20416,.F.); #28418=ORIENTED_EDGE('',*,*,#20382,.T.); #28419=ORIENTED_EDGE('',*,*,#20416,.T.); #28420=ORIENTED_EDGE('',*,*,#20410,.F.); #28421=ORIENTED_EDGE('',*,*,#20417,.F.); #28422=ORIENTED_EDGE('',*,*,#20383,.T.); #28423=ORIENTED_EDGE('',*,*,#20417,.T.); #28424=ORIENTED_EDGE('',*,*,#20409,.F.); #28425=ORIENTED_EDGE('',*,*,#20418,.F.); #28426=ORIENTED_EDGE('',*,*,#20418,.T.); #28427=ORIENTED_EDGE('',*,*,#20408,.F.); #28428=ORIENTED_EDGE('',*,*,#20419,.F.); #28429=ORIENTED_EDGE('',*,*,#20384,.T.); #28430=ORIENTED_EDGE('',*,*,#20385,.T.); #28431=ORIENTED_EDGE('',*,*,#20419,.T.); #28432=ORIENTED_EDGE('',*,*,#20407,.F.); #28433=ORIENTED_EDGE('',*,*,#20420,.F.); #28434=ORIENTED_EDGE('',*,*,#20420,.T.); #28435=ORIENTED_EDGE('',*,*,#20406,.F.); #28436=ORIENTED_EDGE('',*,*,#20421,.F.); #28437=ORIENTED_EDGE('',*,*,#20386,.T.); #28438=ORIENTED_EDGE('',*,*,#20367,.T.); #28439=ORIENTED_EDGE('',*,*,#20360,.F.); #28440=ORIENTED_EDGE('',*,*,#19322,.F.); #28441=ORIENTED_EDGE('',*,*,#20387,.T.); #28442=ORIENTED_EDGE('',*,*,#20421,.T.); #28443=ORIENTED_EDGE('',*,*,#20405,.F.); #28444=ORIENTED_EDGE('',*,*,#19314,.F.); #28445=ORIENTED_EDGE('',*,*,#20362,.F.); #28446=ORIENTED_EDGE('',*,*,#20422,.F.); #28447=ORIENTED_EDGE('',*,*,#20423,.F.); #28448=ORIENTED_EDGE('',*,*,#20424,.F.); #28449=ORIENTED_EDGE('',*,*,#20425,.F.); #28450=ORIENTED_EDGE('',*,*,#20426,.T.); #28451=ORIENTED_EDGE('',*,*,#20369,.F.); #28452=ORIENTED_EDGE('',*,*,#20371,.T.); #28453=ORIENTED_EDGE('',*,*,#20370,.F.); #28454=ORIENTED_EDGE('',*,*,#20426,.F.); #28455=ORIENTED_EDGE('',*,*,#20427,.F.); #28456=ORIENTED_EDGE('',*,*,#20427,.T.); #28457=ORIENTED_EDGE('',*,*,#20425,.T.); #28458=ORIENTED_EDGE('',*,*,#20428,.F.); #28459=ORIENTED_EDGE('',*,*,#20372,.F.); #28460=ORIENTED_EDGE('',*,*,#20373,.F.); #28461=ORIENTED_EDGE('',*,*,#20428,.T.); #28462=ORIENTED_EDGE('',*,*,#20424,.T.); #28463=ORIENTED_EDGE('',*,*,#20429,.T.); #28464=ORIENTED_EDGE('',*,*,#20374,.F.); #28465=ORIENTED_EDGE('',*,*,#20429,.F.); #28466=ORIENTED_EDGE('',*,*,#20423,.T.); #28467=ORIENTED_EDGE('',*,*,#20430,.F.); #28468=ORIENTED_EDGE('',*,*,#20430,.T.); #28469=ORIENTED_EDGE('',*,*,#20422,.T.); #28470=ORIENTED_EDGE('',*,*,#20364,.F.); #28471=ORIENTED_EDGE('',*,*,#20375,.T.); #28472=ORIENTED_EDGE('',*,*,#20388,.T.); #28473=ORIENTED_EDGE('',*,*,#20377,.T.); #28474=ORIENTED_EDGE('',*,*,#20404,.F.); #28475=ORIENTED_EDGE('',*,*,#20431,.F.); #28476=ORIENTED_EDGE('',*,*,#20389,.T.); #28477=ORIENTED_EDGE('',*,*,#20431,.T.); #28478=ORIENTED_EDGE('',*,*,#20403,.F.); #28479=ORIENTED_EDGE('',*,*,#20432,.F.); #28480=ORIENTED_EDGE('',*,*,#20390,.T.); #28481=ORIENTED_EDGE('',*,*,#20432,.T.); #28482=ORIENTED_EDGE('',*,*,#20402,.F.); #28483=ORIENTED_EDGE('',*,*,#20433,.F.); #28484=ORIENTED_EDGE('',*,*,#20391,.T.); #28485=ORIENTED_EDGE('',*,*,#20433,.T.); #28486=ORIENTED_EDGE('',*,*,#20401,.F.); #28487=ORIENTED_EDGE('',*,*,#20434,.F.); #28488=ORIENTED_EDGE('',*,*,#20434,.T.); #28489=ORIENTED_EDGE('',*,*,#20400,.F.); #28490=ORIENTED_EDGE('',*,*,#20435,.F.); #28491=ORIENTED_EDGE('',*,*,#20392,.T.); #28492=ORIENTED_EDGE('',*,*,#20393,.T.); #28493=ORIENTED_EDGE('',*,*,#20435,.T.); #28494=ORIENTED_EDGE('',*,*,#20399,.F.); #28495=ORIENTED_EDGE('',*,*,#20436,.F.); #28496=ORIENTED_EDGE('',*,*,#20394,.T.); #28497=ORIENTED_EDGE('',*,*,#20436,.T.); #28498=ORIENTED_EDGE('',*,*,#20398,.F.); #28499=ORIENTED_EDGE('',*,*,#20396,.F.); #28500=ORIENTED_EDGE('',*,*,#20359,.F.); #28501=ORIENTED_EDGE('',*,*,#19319,.F.); #28502=ORIENTED_EDGE('',*,*,#20437,.F.); #28503=ORIENTED_EDGE('',*,*,#20106,.T.); #28504=ORIENTED_EDGE('',*,*,#20438,.F.); #28505=ORIENTED_EDGE('',*,*,#19323,.F.); #28506=ORIENTED_EDGE('',*,*,#20105,.F.); #28507=ORIENTED_EDGE('',*,*,#20439,.F.); #28508=ORIENTED_EDGE('',*,*,#19324,.F.); #28509=ORIENTED_EDGE('',*,*,#20438,.T.); #28510=ORIENTED_EDGE('',*,*,#20439,.T.); #28511=ORIENTED_EDGE('',*,*,#20104,.T.); #28512=ORIENTED_EDGE('',*,*,#20440,.F.); #28513=ORIENTED_EDGE('',*,*,#19325,.F.); #28514=ORIENTED_EDGE('',*,*,#20103,.F.); #28515=ORIENTED_EDGE('',*,*,#20441,.F.); #28516=ORIENTED_EDGE('',*,*,#19326,.F.); #28517=ORIENTED_EDGE('',*,*,#20440,.T.); #28518=ORIENTED_EDGE('',*,*,#20442,.T.); #28519=ORIENTED_EDGE('',*,*,#19327,.F.); #28520=ORIENTED_EDGE('',*,*,#20441,.T.); #28521=ORIENTED_EDGE('',*,*,#20102,.T.); #28522=ORIENTED_EDGE('',*,*,#20443,.T.); #28523=ORIENTED_EDGE('',*,*,#19331,.F.); #28524=ORIENTED_EDGE('',*,*,#20444,.F.); #28525=ORIENTED_EDGE('',*,*,#20445,.T.); #28526=ORIENTED_EDGE('',*,*,#20446,.T.); #28527=ORIENTED_EDGE('',*,*,#20447,.F.); #28528=ORIENTED_EDGE('',*,*,#20448,.T.); #28529=ORIENTED_EDGE('',*,*,#20442,.F.); #28530=ORIENTED_EDGE('',*,*,#20449,.F.); #28531=ORIENTED_EDGE('',*,*,#20450,.T.); #28532=ORIENTED_EDGE('',*,*,#20451,.F.); #28533=ORIENTED_EDGE('',*,*,#20452,.F.); #28534=ORIENTED_EDGE('',*,*,#20447,.T.); #28535=ORIENTED_EDGE('',*,*,#20453,.F.); #28536=ORIENTED_EDGE('',*,*,#20454,.F.); #28537=ORIENTED_EDGE('',*,*,#20451,.T.); #28538=ORIENTED_EDGE('',*,*,#20455,.T.); #28539=ORIENTED_EDGE('',*,*,#20456,.T.); #28540=ORIENTED_EDGE('',*,*,#20457,.F.); #28541=ORIENTED_EDGE('',*,*,#20458,.T.); #28542=ORIENTED_EDGE('',*,*,#20459,.T.); #28543=ORIENTED_EDGE('',*,*,#20460,.T.); #28544=ORIENTED_EDGE('',*,*,#20461,.F.); #28545=ORIENTED_EDGE('',*,*,#20449,.T.); #28546=ORIENTED_EDGE('',*,*,#19330,.T.); #28547=ORIENTED_EDGE('',*,*,#20462,.F.); #28548=ORIENTED_EDGE('',*,*,#20463,.F.); #28549=ORIENTED_EDGE('',*,*,#20464,.T.); #28550=ORIENTED_EDGE('',*,*,#19334,.T.); #28551=ORIENTED_EDGE('',*,*,#20444,.T.); #28552=ORIENTED_EDGE('',*,*,#20452,.T.); #28553=ORIENTED_EDGE('',*,*,#20454,.T.); #28554=ORIENTED_EDGE('',*,*,#20199,.T.); #28555=ORIENTED_EDGE('',*,*,#20465,.F.); #28556=ORIENTED_EDGE('',*,*,#20466,.F.); #28557=ORIENTED_EDGE('',*,*,#20467,.F.); #28558=ORIENTED_EDGE('',*,*,#20468,.F.); #28559=ORIENTED_EDGE('',*,*,#20469,.F.); #28560=ORIENTED_EDGE('',*,*,#20470,.F.); #28561=ORIENTED_EDGE('',*,*,#20471,.F.); #28562=ORIENTED_EDGE('',*,*,#20472,.F.); #28563=ORIENTED_EDGE('',*,*,#20473,.F.); #28564=ORIENTED_EDGE('',*,*,#19335,.F.); #28565=ORIENTED_EDGE('',*,*,#20464,.F.); #28566=ORIENTED_EDGE('',*,*,#20474,.F.); #28567=ORIENTED_EDGE('',*,*,#20475,.F.); #28568=ORIENTED_EDGE('',*,*,#20476,.F.); #28569=ORIENTED_EDGE('',*,*,#20477,.F.); #28570=ORIENTED_EDGE('',*,*,#20478,.F.); #28571=ORIENTED_EDGE('',*,*,#20479,.F.); #28572=ORIENTED_EDGE('',*,*,#20480,.F.); #28573=ORIENTED_EDGE('',*,*,#20481,.F.); #28574=ORIENTED_EDGE('',*,*,#20481,.T.); #28575=ORIENTED_EDGE('',*,*,#20482,.T.); #28576=ORIENTED_EDGE('',*,*,#20483,.F.); #28577=ORIENTED_EDGE('',*,*,#20196,.F.); #28578=ORIENTED_EDGE('',*,*,#20483,.T.); #28579=ORIENTED_EDGE('',*,*,#20484,.T.); #28580=ORIENTED_EDGE('',*,*,#20485,.T.); #28581=ORIENTED_EDGE('',*,*,#20486,.T.); #28582=ORIENTED_EDGE('',*,*,#20487,.T.); #28583=ORIENTED_EDGE('',*,*,#20488,.T.); #28584=ORIENTED_EDGE('',*,*,#20489,.T.); #28585=ORIENTED_EDGE('',*,*,#20490,.T.); #28586=ORIENTED_EDGE('',*,*,#20462,.T.); #28587=ORIENTED_EDGE('',*,*,#19329,.T.); #28588=ORIENTED_EDGE('',*,*,#20491,.T.); #28589=ORIENTED_EDGE('',*,*,#20492,.T.); #28590=ORIENTED_EDGE('',*,*,#20493,.T.); #28591=ORIENTED_EDGE('',*,*,#20494,.T.); #28592=ORIENTED_EDGE('',*,*,#20495,.T.); #28593=ORIENTED_EDGE('',*,*,#20496,.T.); #28594=ORIENTED_EDGE('',*,*,#20497,.T.); #28595=ORIENTED_EDGE('',*,*,#20498,.T.); #28596=ORIENTED_EDGE('',*,*,#20499,.T.); #28597=ORIENTED_EDGE('',*,*,#20197,.F.); #28598=ORIENTED_EDGE('',*,*,#20198,.T.); #28599=ORIENTED_EDGE('',*,*,#20499,.F.); #28600=ORIENTED_EDGE('',*,*,#20500,.F.); #28601=ORIENTED_EDGE('',*,*,#20465,.T.); #28602=ORIENTED_EDGE('',*,*,#20500,.T.); #28603=ORIENTED_EDGE('',*,*,#20498,.F.); #28604=ORIENTED_EDGE('',*,*,#20501,.F.); #28605=ORIENTED_EDGE('',*,*,#20466,.T.); #28606=ORIENTED_EDGE('',*,*,#20467,.T.); #28607=ORIENTED_EDGE('',*,*,#20501,.T.); #28608=ORIENTED_EDGE('',*,*,#20497,.F.); #28609=ORIENTED_EDGE('',*,*,#20502,.F.); #28610=ORIENTED_EDGE('',*,*,#20468,.T.); #28611=ORIENTED_EDGE('',*,*,#20502,.T.); #28612=ORIENTED_EDGE('',*,*,#20496,.F.); #28613=ORIENTED_EDGE('',*,*,#20503,.F.); #28614=ORIENTED_EDGE('',*,*,#20469,.T.); #28615=ORIENTED_EDGE('',*,*,#20503,.T.); #28616=ORIENTED_EDGE('',*,*,#20495,.F.); #28617=ORIENTED_EDGE('',*,*,#20504,.F.); #28618=ORIENTED_EDGE('',*,*,#20504,.T.); #28619=ORIENTED_EDGE('',*,*,#20494,.F.); #28620=ORIENTED_EDGE('',*,*,#20505,.F.); #28621=ORIENTED_EDGE('',*,*,#20470,.T.); #28622=ORIENTED_EDGE('',*,*,#20471,.T.); #28623=ORIENTED_EDGE('',*,*,#20505,.T.); #28624=ORIENTED_EDGE('',*,*,#20493,.F.); #28625=ORIENTED_EDGE('',*,*,#20506,.F.); #28626=ORIENTED_EDGE('',*,*,#20506,.T.); #28627=ORIENTED_EDGE('',*,*,#20492,.F.); #28628=ORIENTED_EDGE('',*,*,#20507,.F.); #28629=ORIENTED_EDGE('',*,*,#20472,.T.); #28630=ORIENTED_EDGE('',*,*,#20453,.T.); #28631=ORIENTED_EDGE('',*,*,#20446,.F.); #28632=ORIENTED_EDGE('',*,*,#19336,.F.); #28633=ORIENTED_EDGE('',*,*,#20473,.T.); #28634=ORIENTED_EDGE('',*,*,#20507,.T.); #28635=ORIENTED_EDGE('',*,*,#20491,.F.); #28636=ORIENTED_EDGE('',*,*,#19328,.F.); #28637=ORIENTED_EDGE('',*,*,#20448,.F.); #28638=ORIENTED_EDGE('',*,*,#20508,.F.); #28639=ORIENTED_EDGE('',*,*,#20509,.F.); #28640=ORIENTED_EDGE('',*,*,#20510,.F.); #28641=ORIENTED_EDGE('',*,*,#20511,.F.); #28642=ORIENTED_EDGE('',*,*,#20512,.T.); #28643=ORIENTED_EDGE('',*,*,#20455,.F.); #28644=ORIENTED_EDGE('',*,*,#20457,.T.); #28645=ORIENTED_EDGE('',*,*,#20456,.F.); #28646=ORIENTED_EDGE('',*,*,#20512,.F.); #28647=ORIENTED_EDGE('',*,*,#20513,.F.); #28648=ORIENTED_EDGE('',*,*,#20513,.T.); #28649=ORIENTED_EDGE('',*,*,#20511,.T.); #28650=ORIENTED_EDGE('',*,*,#20514,.F.); #28651=ORIENTED_EDGE('',*,*,#20458,.F.); #28652=ORIENTED_EDGE('',*,*,#20459,.F.); #28653=ORIENTED_EDGE('',*,*,#20514,.T.); #28654=ORIENTED_EDGE('',*,*,#20510,.T.); #28655=ORIENTED_EDGE('',*,*,#20515,.T.); #28656=ORIENTED_EDGE('',*,*,#20460,.F.); #28657=ORIENTED_EDGE('',*,*,#20515,.F.); #28658=ORIENTED_EDGE('',*,*,#20509,.T.); #28659=ORIENTED_EDGE('',*,*,#20516,.F.); #28660=ORIENTED_EDGE('',*,*,#20516,.T.); #28661=ORIENTED_EDGE('',*,*,#20508,.T.); #28662=ORIENTED_EDGE('',*,*,#20450,.F.); #28663=ORIENTED_EDGE('',*,*,#20461,.T.); #28664=ORIENTED_EDGE('',*,*,#20474,.T.); #28665=ORIENTED_EDGE('',*,*,#20463,.T.); #28666=ORIENTED_EDGE('',*,*,#20490,.F.); #28667=ORIENTED_EDGE('',*,*,#20517,.F.); #28668=ORIENTED_EDGE('',*,*,#20475,.T.); #28669=ORIENTED_EDGE('',*,*,#20517,.T.); #28670=ORIENTED_EDGE('',*,*,#20489,.F.); #28671=ORIENTED_EDGE('',*,*,#20518,.F.); #28672=ORIENTED_EDGE('',*,*,#20476,.T.); #28673=ORIENTED_EDGE('',*,*,#20518,.T.); #28674=ORIENTED_EDGE('',*,*,#20488,.F.); #28675=ORIENTED_EDGE('',*,*,#20519,.F.); #28676=ORIENTED_EDGE('',*,*,#20477,.T.); #28677=ORIENTED_EDGE('',*,*,#20519,.T.); #28678=ORIENTED_EDGE('',*,*,#20487,.F.); #28679=ORIENTED_EDGE('',*,*,#20520,.F.); #28680=ORIENTED_EDGE('',*,*,#20520,.T.); #28681=ORIENTED_EDGE('',*,*,#20486,.F.); #28682=ORIENTED_EDGE('',*,*,#20521,.F.); #28683=ORIENTED_EDGE('',*,*,#20478,.T.); #28684=ORIENTED_EDGE('',*,*,#20479,.T.); #28685=ORIENTED_EDGE('',*,*,#20521,.T.); #28686=ORIENTED_EDGE('',*,*,#20485,.F.); #28687=ORIENTED_EDGE('',*,*,#20522,.F.); #28688=ORIENTED_EDGE('',*,*,#20480,.T.); #28689=ORIENTED_EDGE('',*,*,#20522,.T.); #28690=ORIENTED_EDGE('',*,*,#20484,.F.); #28691=ORIENTED_EDGE('',*,*,#20482,.F.); #28692=ORIENTED_EDGE('',*,*,#20445,.F.); #28693=ORIENTED_EDGE('',*,*,#19333,.F.); #28694=ORIENTED_EDGE('',*,*,#20523,.F.); #28695=ORIENTED_EDGE('',*,*,#20100,.T.); #28696=ORIENTED_EDGE('',*,*,#20524,.F.); #28697=ORIENTED_EDGE('',*,*,#19337,.F.); #28698=ORIENTED_EDGE('',*,*,#20099,.F.); #28699=ORIENTED_EDGE('',*,*,#20525,.F.); #28700=ORIENTED_EDGE('',*,*,#19338,.F.); #28701=ORIENTED_EDGE('',*,*,#20524,.T.); #28702=ORIENTED_EDGE('',*,*,#20525,.T.); #28703=ORIENTED_EDGE('',*,*,#20098,.F.); #28704=ORIENTED_EDGE('',*,*,#20094,.T.); #28705=ORIENTED_EDGE('',*,*,#19339,.F.); #28706=ORIENTED_EDGE('',*,*,#19332,.F.); #28707=ORIENTED_EDGE('',*,*,#20443,.F.); #28708=ORIENTED_EDGE('',*,*,#20101,.T.); #28709=ORIENTED_EDGE('',*,*,#20523,.T.); #28710=ORIENTED_EDGE('',*,*,#19318,.F.); #28711=ORIENTED_EDGE('',*,*,#20357,.F.); #28712=ORIENTED_EDGE('',*,*,#20107,.T.); #28713=ORIENTED_EDGE('',*,*,#20437,.T.); #28714=ORIENTED_EDGE('',*,*,#19304,.F.); #28715=ORIENTED_EDGE('',*,*,#20526,.F.); #28716=ORIENTED_EDGE('',*,*,#20113,.T.); #28717=ORIENTED_EDGE('',*,*,#20351,.T.); #28718=ORIENTED_EDGE('',*,*,#20350,.T.); #28719=ORIENTED_EDGE('',*,*,#19299,.F.); #28720=ORIENTED_EDGE('',*,*,#20527,.T.); #28721=ORIENTED_EDGE('',*,*,#20114,.T.); #28722=ORIENTED_EDGE('',*,*,#20526,.T.); #28723=ORIENTED_EDGE('',*,*,#19303,.F.); #28724=ORIENTED_EDGE('',*,*,#20115,.F.); #28725=ORIENTED_EDGE('',*,*,#20527,.F.); #28726=ORIENTED_EDGE('',*,*,#19298,.F.); #28727=ORIENTED_EDGE('',*,*,#20528,.T.); #28728=ORIENTED_EDGE('',*,*,#20529,.T.); #28729=ORIENTED_EDGE('',*,*,#20116,.T.); #28730=ORIENTED_EDGE('',*,*,#20528,.F.); #28731=ORIENTED_EDGE('',*,*,#19297,.F.); #28732=ORIENTED_EDGE('',*,*,#20117,.F.); #28733=ORIENTED_EDGE('',*,*,#20529,.F.); #28734=ORIENTED_EDGE('',*,*,#19296,.F.); #28735=ORIENTED_EDGE('',*,*,#20530,.T.); #28736=ORIENTED_EDGE('',*,*,#19291,.F.); #28737=ORIENTED_EDGE('',*,*,#20531,.F.); #28738=ORIENTED_EDGE('',*,*,#20118,.T.); #28739=ORIENTED_EDGE('',*,*,#20530,.F.); #28740=ORIENTED_EDGE('',*,*,#19295,.F.); #28741=ORIENTED_EDGE('',*,*,#20131,.F.); #28742=ORIENTED_EDGE('',*,*,#19290,.F.); #28743=ORIENTED_EDGE('',*,*,#20128,.F.); #28744=ORIENTED_EDGE('',*,*,#20119,.T.); #28745=ORIENTED_EDGE('',*,*,#20531,.T.); #28746=ORIENTED_EDGE('',*,*,#20532,.T.); #28747=ORIENTED_EDGE('',*,*,#20329,.T.); #28748=ORIENTED_EDGE('',*,*,#20349,.F.); #28749=ORIENTED_EDGE('',*,*,#20342,.T.); #28750=ORIENTED_EDGE('',*,*,#20341,.F.); #28751=ORIENTED_EDGE('',*,*,#20533,.F.); #28752=ORIENTED_EDGE('',*,*,#20330,.T.); #28753=ORIENTED_EDGE('',*,*,#20532,.F.); #28754=ORIENTED_EDGE('',*,*,#20340,.F.); #28755=ORIENTED_EDGE('',*,*,#20534,.T.); #28756=ORIENTED_EDGE('',*,*,#20331,.T.); #28757=ORIENTED_EDGE('',*,*,#20533,.T.); #28758=ORIENTED_EDGE('',*,*,#20535,.T.); #28759=ORIENTED_EDGE('',*,*,#20332,.T.); #28760=ORIENTED_EDGE('',*,*,#20534,.F.); #28761=ORIENTED_EDGE('',*,*,#20339,.F.); #28762=ORIENTED_EDGE('',*,*,#20338,.T.); #28763=ORIENTED_EDGE('',*,*,#20337,.F.); #28764=ORIENTED_EDGE('',*,*,#20333,.F.); #28765=ORIENTED_EDGE('',*,*,#20535,.F.); #28766=ORIENTED_EDGE('',*,*,#20291,.T.); #28767=ORIENTED_EDGE('',*,*,#20344,.T.); #28768=ORIENTED_EDGE('',*,*,#20307,.F.); #28769=ORIENTED_EDGE('',*,*,#20536,.F.); #28770=ORIENTED_EDGE('',*,*,#20292,.T.); #28771=ORIENTED_EDGE('',*,*,#20536,.T.); #28772=ORIENTED_EDGE('',*,*,#20306,.F.); #28773=ORIENTED_EDGE('',*,*,#20537,.F.); #28774=ORIENTED_EDGE('',*,*,#20293,.T.); #28775=ORIENTED_EDGE('',*,*,#20537,.T.); #28776=ORIENTED_EDGE('',*,*,#20305,.F.); #28777=ORIENTED_EDGE('',*,*,#20538,.F.); #28778=ORIENTED_EDGE('',*,*,#20294,.T.); #28779=ORIENTED_EDGE('',*,*,#20538,.T.); #28780=ORIENTED_EDGE('',*,*,#20304,.F.); #28781=ORIENTED_EDGE('',*,*,#20539,.F.); #28782=ORIENTED_EDGE('',*,*,#20539,.T.); #28783=ORIENTED_EDGE('',*,*,#20303,.F.); #28784=ORIENTED_EDGE('',*,*,#20540,.F.); #28785=ORIENTED_EDGE('',*,*,#20295,.T.); #28786=ORIENTED_EDGE('',*,*,#20296,.T.); #28787=ORIENTED_EDGE('',*,*,#20540,.T.); #28788=ORIENTED_EDGE('',*,*,#20302,.F.); #28789=ORIENTED_EDGE('',*,*,#20541,.F.); #28790=ORIENTED_EDGE('',*,*,#20297,.T.); #28791=ORIENTED_EDGE('',*,*,#20541,.T.); #28792=ORIENTED_EDGE('',*,*,#20301,.F.); #28793=ORIENTED_EDGE('',*,*,#20299,.F.); #28794=ORIENTED_EDGE('',*,*,#19404,.F.); #28795=ORIENTED_EDGE('',*,*,#20542,.F.); #28796=ORIENTED_EDGE('',*,*,#19383,.T.); #28797=ORIENTED_EDGE('',*,*,#19379,.T.); #28798=ORIENTED_EDGE('',*,*,#19403,.F.); #28799=ORIENTED_EDGE('',*,*,#19063,.F.); #28800=ORIENTED_EDGE('',*,*,#19384,.T.); #28801=ORIENTED_EDGE('',*,*,#20542,.T.); #28802=ORIENTED_EDGE('',*,*,#19270,.F.); #28803=ORIENTED_EDGE('',*,*,#19174,.F.); #28804=ORIENTED_EDGE('',*,*,#20543,.T.); #28805=ORIENTED_EDGE('',*,*,#19118,.F.); #28806=ORIENTED_EDGE('',*,*,#19173,.T.); #28807=ORIENTED_EDGE('',*,*,#20544,.T.); #28808=ORIENTED_EDGE('',*,*,#20545,.F.); #28809=ORIENTED_EDGE('',*,*,#20546,.T.); #28810=ORIENTED_EDGE('',*,*,#19103,.F.); #28811=ORIENTED_EDGE('',*,*,#20543,.F.); #28812=ORIENTED_EDGE('',*,*,#20547,.F.); #28813=ORIENTED_EDGE('',*,*,#19160,.T.); #28814=ORIENTED_EDGE('',*,*,#19104,.T.); #28815=ORIENTED_EDGE('',*,*,#20546,.F.); #28816=ORIENTED_EDGE('',*,*,#20548,.T.); #28817=ORIENTED_EDGE('',*,*,#20549,.T.); #28818=ORIENTED_EDGE('',*,*,#20550,.T.); #28819=ORIENTED_EDGE('',*,*,#20547,.T.); #28820=ORIENTED_EDGE('',*,*,#20545,.T.); #28821=ORIENTED_EDGE('',*,*,#20551,.T.); #28822=ORIENTED_EDGE('',*,*,#20552,.T.); #28823=ORIENTED_EDGE('',*,*,#20553,.T.); #28824=ORIENTED_EDGE('',*,*,#20554,.T.); #28825=ORIENTED_EDGE('',*,*,#20555,.T.); #28826=ORIENTED_EDGE('',*,*,#20556,.T.); #28827=ORIENTED_EDGE('',*,*,#20557,.T.); #28828=ORIENTED_EDGE('',*,*,#20553,.F.); #28829=ORIENTED_EDGE('',*,*,#20558,.T.); #28830=ORIENTED_EDGE('',*,*,#20559,.T.); #28831=ORIENTED_EDGE('',*,*,#20560,.F.); #28832=ORIENTED_EDGE('',*,*,#20561,.T.); #28833=ORIENTED_EDGE('',*,*,#20558,.F.); #28834=ORIENTED_EDGE('',*,*,#20552,.F.); #28835=ORIENTED_EDGE('',*,*,#20562,.F.); #28836=ORIENTED_EDGE('',*,*,#19171,.T.); #28837=ORIENTED_EDGE('',*,*,#19170,.F.); #28838=ORIENTED_EDGE('',*,*,#20563,.F.); #28839=ORIENTED_EDGE('',*,*,#20564,.T.); #28840=ORIENTED_EDGE('',*,*,#20559,.F.); #28841=ORIENTED_EDGE('',*,*,#20564,.F.); #28842=ORIENTED_EDGE('',*,*,#20565,.T.); #28843=ORIENTED_EDGE('',*,*,#20566,.F.); #28844=ORIENTED_EDGE('',*,*,#20567,.F.); #28845=ORIENTED_EDGE('',*,*,#20568,.F.); #28846=ORIENTED_EDGE('',*,*,#20560,.T.); #28847=ORIENTED_EDGE('',*,*,#20569,.T.); #28848=ORIENTED_EDGE('',*,*,#20554,.F.); #28849=ORIENTED_EDGE('',*,*,#20561,.F.); #28850=ORIENTED_EDGE('',*,*,#20568,.T.); #28851=ORIENTED_EDGE('',*,*,#20567,.T.); #28852=ORIENTED_EDGE('',*,*,#20570,.T.); #28853=ORIENTED_EDGE('',*,*,#20555,.F.); #28854=ORIENTED_EDGE('',*,*,#20569,.F.); #28855=ORIENTED_EDGE('',*,*,#20571,.T.); #28856=ORIENTED_EDGE('',*,*,#20556,.F.); #28857=ORIENTED_EDGE('',*,*,#20570,.F.); #28858=ORIENTED_EDGE('',*,*,#20566,.T.); #28859=ORIENTED_EDGE('',*,*,#20563,.T.); #28860=ORIENTED_EDGE('',*,*,#19169,.T.); #28861=ORIENTED_EDGE('',*,*,#20572,.T.); #28862=ORIENTED_EDGE('',*,*,#20548,.F.); #28863=ORIENTED_EDGE('',*,*,#20557,.F.); #28864=ORIENTED_EDGE('',*,*,#20571,.F.); #28865=ORIENTED_EDGE('',*,*,#20565,.F.); #28866=ORIENTED_EDGE('',*,*,#19168,.T.); #28867=ORIENTED_EDGE('',*,*,#20573,.T.); #28868=ORIENTED_EDGE('',*,*,#20549,.F.); #28869=ORIENTED_EDGE('',*,*,#20572,.F.); #28870=ORIENTED_EDGE('',*,*,#19161,.T.); #28871=ORIENTED_EDGE('',*,*,#20550,.F.); #28872=ORIENTED_EDGE('',*,*,#20573,.F.); #28873=ORIENTED_EDGE('',*,*,#19167,.T.); #28874=ORIENTED_EDGE('',*,*,#19172,.T.); #28875=ORIENTED_EDGE('',*,*,#20562,.T.); #28876=ORIENTED_EDGE('',*,*,#20551,.F.); #28877=ORIENTED_EDGE('',*,*,#20544,.F.); #28878=ORIENTED_EDGE('',*,*,#19158,.F.); #28879=ORIENTED_EDGE('',*,*,#20574,.F.); #28880=ORIENTED_EDGE('',*,*,#19148,.T.); #28881=ORIENTED_EDGE('',*,*,#20575,.T.); #28882=ORIENTED_EDGE('',*,*,#19106,.F.); #28883=ORIENTED_EDGE('',*,*,#19107,.F.); #28884=ORIENTED_EDGE('',*,*,#20575,.F.); #28885=ORIENTED_EDGE('',*,*,#19147,.T.); #28886=ORIENTED_EDGE('',*,*,#19100,.T.); #28887=ORIENTED_EDGE('',*,*,#19157,.F.); #28888=ORIENTED_EDGE('',*,*,#19155,.F.); #28889=ORIENTED_EDGE('',*,*,#19149,.T.); #28890=ORIENTED_EDGE('',*,*,#20574,.T.); #28891=ORIENTED_EDGE('',*,*,#20576,.F.); #28892=ORIENTED_EDGE('',*,*,#20577,.T.); #28893=ORIENTED_EDGE('',*,*,#20578,.T.); #28894=ORIENTED_EDGE('',*,*,#20579,.F.); #28895=ORIENTED_EDGE('',*,*,#20580,.F.); #28896=ORIENTED_EDGE('',*,*,#20581,.T.); #28897=ORIENTED_EDGE('',*,*,#20576,.T.); #28898=ORIENTED_EDGE('',*,*,#20582,.F.); #28899=ORIENTED_EDGE('',*,*,#20578,.F.); #28900=ORIENTED_EDGE('',*,*,#20583,.T.); #28901=ORIENTED_EDGE('',*,*,#20584,.T.); #28902=ORIENTED_EDGE('',*,*,#20585,.F.); #28903=ORIENTED_EDGE('',*,*,#20577,.F.); #28904=ORIENTED_EDGE('',*,*,#20581,.F.); #28905=ORIENTED_EDGE('',*,*,#20586,.F.); #28906=ORIENTED_EDGE('',*,*,#20587,.F.); #28907=ORIENTED_EDGE('',*,*,#20588,.F.); #28908=ORIENTED_EDGE('',*,*,#20589,.F.); #28909=ORIENTED_EDGE('',*,*,#20590,.F.); #28910=ORIENTED_EDGE('',*,*,#20591,.F.); #28911=ORIENTED_EDGE('',*,*,#20592,.F.); #28912=ORIENTED_EDGE('',*,*,#20593,.F.); #28913=ORIENTED_EDGE('',*,*,#20594,.F.); #28914=ORIENTED_EDGE('',*,*,#20595,.F.); #28915=ORIENTED_EDGE('',*,*,#20596,.F.); #28916=ORIENTED_EDGE('',*,*,#20597,.F.); #28917=ORIENTED_EDGE('',*,*,#20598,.F.); #28918=ORIENTED_EDGE('',*,*,#20599,.F.); #28919=ORIENTED_EDGE('',*,*,#20600,.F.); #28920=ORIENTED_EDGE('',*,*,#20601,.F.); #28921=ORIENTED_EDGE('',*,*,#20602,.F.); #28922=ORIENTED_EDGE('',*,*,#20583,.F.); #28923=ORIENTED_EDGE('',*,*,#20603,.T.); #28924=ORIENTED_EDGE('',*,*,#20604,.T.); #28925=ORIENTED_EDGE('',*,*,#20605,.F.); #28926=ORIENTED_EDGE('',*,*,#20606,.F.); #28927=ORIENTED_EDGE('',*,*,#20607,.F.); #28928=ORIENTED_EDGE('',*,*,#20608,.T.); #28929=ORIENTED_EDGE('',*,*,#20609,.T.); #28930=ORIENTED_EDGE('',*,*,#20610,.F.); #28931=ORIENTED_EDGE('',*,*,#20611,.T.); #28932=ORIENTED_EDGE('',*,*,#20612,.F.); #28933=ORIENTED_EDGE('',*,*,#20613,.F.); #28934=ORIENTED_EDGE('',*,*,#20614,.T.); #28935=ORIENTED_EDGE('',*,*,#20579,.T.); #28936=ORIENTED_EDGE('',*,*,#20585,.T.); #28937=ORIENTED_EDGE('',*,*,#20615,.T.); #28938=ORIENTED_EDGE('',*,*,#20616,.T.); #28939=ORIENTED_EDGE('',*,*,#20617,.T.); #28940=ORIENTED_EDGE('',*,*,#20618,.T.); #28941=ORIENTED_EDGE('',*,*,#20619,.T.); #28942=ORIENTED_EDGE('',*,*,#20620,.T.); #28943=ORIENTED_EDGE('',*,*,#20621,.T.); #28944=ORIENTED_EDGE('',*,*,#20622,.T.); #28945=ORIENTED_EDGE('',*,*,#20623,.T.); #28946=ORIENTED_EDGE('',*,*,#20624,.T.); #28947=ORIENTED_EDGE('',*,*,#20625,.T.); #28948=ORIENTED_EDGE('',*,*,#20626,.T.); #28949=ORIENTED_EDGE('',*,*,#20627,.T.); #28950=ORIENTED_EDGE('',*,*,#20628,.T.); #28951=ORIENTED_EDGE('',*,*,#20629,.T.); #28952=ORIENTED_EDGE('',*,*,#20630,.T.); #28953=ORIENTED_EDGE('',*,*,#20631,.T.); #28954=ORIENTED_EDGE('',*,*,#20582,.T.); #28955=ORIENTED_EDGE('',*,*,#20632,.F.); #28956=ORIENTED_EDGE('',*,*,#20633,.T.); #28957=ORIENTED_EDGE('',*,*,#20634,.T.); #28958=ORIENTED_EDGE('',*,*,#20635,.F.); #28959=ORIENTED_EDGE('',*,*,#20636,.T.); #28960=ORIENTED_EDGE('',*,*,#20637,.T.); #28961=ORIENTED_EDGE('',*,*,#20638,.F.); #28962=ORIENTED_EDGE('',*,*,#20639,.F.); #28963=ORIENTED_EDGE('',*,*,#20640,.F.); #28964=ORIENTED_EDGE('',*,*,#20641,.F.); #28965=ORIENTED_EDGE('',*,*,#20642,.T.); #28966=ORIENTED_EDGE('',*,*,#20643,.T.); #28967=ORIENTED_EDGE('',*,*,#20644,.F.); #28968=ORIENTED_EDGE('',*,*,#20586,.T.); #28969=ORIENTED_EDGE('',*,*,#20580,.T.); #28970=ORIENTED_EDGE('',*,*,#20631,.F.); #28971=ORIENTED_EDGE('',*,*,#20584,.F.); #28972=ORIENTED_EDGE('',*,*,#20602,.T.); #28973=ORIENTED_EDGE('',*,*,#20645,.T.); #28974=ORIENTED_EDGE('',*,*,#20615,.F.); #28975=ORIENTED_EDGE('',*,*,#20646,.F.); #28976=ORIENTED_EDGE('',*,*,#20587,.T.); #28977=ORIENTED_EDGE('',*,*,#20644,.T.); #28978=ORIENTED_EDGE('',*,*,#20630,.F.); #28979=ORIENTED_EDGE('',*,*,#20645,.F.); #28980=ORIENTED_EDGE('',*,*,#20601,.T.); #28981=ORIENTED_EDGE('',*,*,#20647,.T.); #28982=ORIENTED_EDGE('',*,*,#20616,.F.); #28983=ORIENTED_EDGE('',*,*,#20648,.F.); #28984=ORIENTED_EDGE('',*,*,#20588,.T.); #28985=ORIENTED_EDGE('',*,*,#20646,.T.); #28986=ORIENTED_EDGE('',*,*,#20629,.F.); #28987=ORIENTED_EDGE('',*,*,#20647,.F.); #28988=ORIENTED_EDGE('',*,*,#20600,.T.); #28989=ORIENTED_EDGE('',*,*,#20649,.T.); #28990=ORIENTED_EDGE('',*,*,#20617,.F.); #28991=ORIENTED_EDGE('',*,*,#20650,.F.); #28992=ORIENTED_EDGE('',*,*,#20589,.T.); #28993=ORIENTED_EDGE('',*,*,#20648,.T.); #28994=ORIENTED_EDGE('',*,*,#20628,.F.); #28995=ORIENTED_EDGE('',*,*,#20649,.F.); #28996=ORIENTED_EDGE('',*,*,#20599,.T.); #28997=ORIENTED_EDGE('',*,*,#20651,.T.); #28998=ORIENTED_EDGE('',*,*,#20618,.F.); #28999=ORIENTED_EDGE('',*,*,#20652,.F.); #29000=ORIENTED_EDGE('',*,*,#20590,.T.); #29001=ORIENTED_EDGE('',*,*,#20650,.T.); #29002=ORIENTED_EDGE('',*,*,#20627,.F.); #29003=ORIENTED_EDGE('',*,*,#20651,.F.); #29004=ORIENTED_EDGE('',*,*,#20598,.T.); #29005=ORIENTED_EDGE('',*,*,#20653,.T.); #29006=ORIENTED_EDGE('',*,*,#20619,.F.); #29007=ORIENTED_EDGE('',*,*,#20654,.F.); #29008=ORIENTED_EDGE('',*,*,#20591,.T.); #29009=ORIENTED_EDGE('',*,*,#20652,.T.); #29010=ORIENTED_EDGE('',*,*,#20626,.F.); #29011=ORIENTED_EDGE('',*,*,#20653,.F.); #29012=ORIENTED_EDGE('',*,*,#20597,.T.); #29013=ORIENTED_EDGE('',*,*,#20655,.T.); #29014=ORIENTED_EDGE('',*,*,#20620,.F.); #29015=ORIENTED_EDGE('',*,*,#20656,.F.); #29016=ORIENTED_EDGE('',*,*,#20592,.T.); #29017=ORIENTED_EDGE('',*,*,#20654,.T.); #29018=ORIENTED_EDGE('',*,*,#20625,.F.); #29019=ORIENTED_EDGE('',*,*,#20655,.F.); #29020=ORIENTED_EDGE('',*,*,#20596,.T.); #29021=ORIENTED_EDGE('',*,*,#20657,.T.); #29022=ORIENTED_EDGE('',*,*,#20621,.F.); #29023=ORIENTED_EDGE('',*,*,#20658,.F.); #29024=ORIENTED_EDGE('',*,*,#20593,.T.); #29025=ORIENTED_EDGE('',*,*,#20656,.T.); #29026=ORIENTED_EDGE('',*,*,#20624,.F.); #29027=ORIENTED_EDGE('',*,*,#20657,.F.); #29028=ORIENTED_EDGE('',*,*,#20595,.T.); #29029=ORIENTED_EDGE('',*,*,#20659,.T.); #29030=ORIENTED_EDGE('',*,*,#20622,.F.); #29031=ORIENTED_EDGE('',*,*,#20659,.F.); #29032=ORIENTED_EDGE('',*,*,#20594,.T.); #29033=ORIENTED_EDGE('',*,*,#20658,.T.); #29034=ORIENTED_EDGE('',*,*,#20623,.F.); #29035=ORIENTED_EDGE('',*,*,#20660,.F.); #29036=ORIENTED_EDGE('',*,*,#20661,.T.); #29037=ORIENTED_EDGE('',*,*,#20662,.T.); #29038=ORIENTED_EDGE('',*,*,#20603,.F.); #29039=ORIENTED_EDGE('',*,*,#20662,.F.); #29040=ORIENTED_EDGE('',*,*,#20663,.F.); #29041=ORIENTED_EDGE('',*,*,#20664,.T.); #29042=ORIENTED_EDGE('',*,*,#20604,.F.); #29043=ORIENTED_EDGE('',*,*,#20665,.T.); #29044=ORIENTED_EDGE('',*,*,#20605,.T.); #29045=ORIENTED_EDGE('',*,*,#20664,.F.); #29046=ORIENTED_EDGE('',*,*,#20666,.F.); #29047=ORIENTED_EDGE('',*,*,#20660,.T.); #29048=ORIENTED_EDGE('',*,*,#20606,.T.); #29049=ORIENTED_EDGE('',*,*,#20665,.F.); #29050=ORIENTED_EDGE('',*,*,#20667,.T.); #29051=ORIENTED_EDGE('',*,*,#20668,.T.); #29052=ORIENTED_EDGE('',*,*,#20607,.T.); #29053=ORIENTED_EDGE('',*,*,#20669,.F.); #29054=ORIENTED_EDGE('',*,*,#20670,.T.); #29055=ORIENTED_EDGE('',*,*,#20668,.F.); #29056=ORIENTED_EDGE('',*,*,#20671,.T.); #29057=ORIENTED_EDGE('',*,*,#20672,.T.); #29058=ORIENTED_EDGE('',*,*,#20608,.F.); #29059=ORIENTED_EDGE('',*,*,#20672,.F.); #29060=ORIENTED_EDGE('',*,*,#20673,.F.); #29061=ORIENTED_EDGE('',*,*,#20674,.T.); #29062=ORIENTED_EDGE('',*,*,#20609,.F.); #29063=ORIENTED_EDGE('',*,*,#20669,.T.); #29064=ORIENTED_EDGE('',*,*,#20610,.T.); #29065=ORIENTED_EDGE('',*,*,#20674,.F.); #29066=ORIENTED_EDGE('',*,*,#20675,.F.); #29067=ORIENTED_EDGE('',*,*,#20676,.F.); #29068=ORIENTED_EDGE('',*,*,#20677,.F.); #29069=ORIENTED_EDGE('',*,*,#20678,.T.); #29070=ORIENTED_EDGE('',*,*,#20611,.F.); #29071=ORIENTED_EDGE('',*,*,#20679,.T.); #29072=ORIENTED_EDGE('',*,*,#20612,.T.); #29073=ORIENTED_EDGE('',*,*,#20678,.F.); #29074=ORIENTED_EDGE('',*,*,#20680,.F.); #29075=ORIENTED_EDGE('',*,*,#20681,.T.); #29076=ORIENTED_EDGE('',*,*,#20613,.T.); #29077=ORIENTED_EDGE('',*,*,#20679,.F.); #29078=ORIENTED_EDGE('',*,*,#20682,.T.); #29079=ORIENTED_EDGE('',*,*,#20681,.F.); #29080=ORIENTED_EDGE('',*,*,#20683,.T.); #29081=ORIENTED_EDGE('',*,*,#20676,.T.); #29082=ORIENTED_EDGE('',*,*,#20614,.F.); #29083=ORIENTED_EDGE('',*,*,#20684,.F.); #29084=ORIENTED_EDGE('',*,*,#20632,.T.); #29085=ORIENTED_EDGE('',*,*,#20685,.T.); #29086=ORIENTED_EDGE('',*,*,#20686,.F.); #29087=ORIENTED_EDGE('',*,*,#20685,.F.); #29088=ORIENTED_EDGE('',*,*,#20635,.T.); #29089=ORIENTED_EDGE('',*,*,#20687,.T.); #29090=ORIENTED_EDGE('',*,*,#20688,.T.); #29091=ORIENTED_EDGE('',*,*,#20689,.T.); #29092=ORIENTED_EDGE('',*,*,#20690,.T.); #29093=ORIENTED_EDGE('',*,*,#20687,.F.); #29094=ORIENTED_EDGE('',*,*,#20634,.F.); #29095=ORIENTED_EDGE('',*,*,#20684,.T.); #29096=ORIENTED_EDGE('',*,*,#20691,.F.); #29097=ORIENTED_EDGE('',*,*,#20689,.F.); #29098=ORIENTED_EDGE('',*,*,#20633,.F.); #29099=ORIENTED_EDGE('',*,*,#20692,.T.); #29100=ORIENTED_EDGE('',*,*,#20693,.F.); #29101=ORIENTED_EDGE('',*,*,#20694,.F.); #29102=ORIENTED_EDGE('',*,*,#20636,.F.); #29103=ORIENTED_EDGE('',*,*,#20692,.F.); #29104=ORIENTED_EDGE('',*,*,#20639,.T.); #29105=ORIENTED_EDGE('',*,*,#20695,.T.); #29106=ORIENTED_EDGE('',*,*,#20696,.F.); #29107=ORIENTED_EDGE('',*,*,#20695,.F.); #29108=ORIENTED_EDGE('',*,*,#20638,.T.); #29109=ORIENTED_EDGE('',*,*,#20697,.T.); #29110=ORIENTED_EDGE('',*,*,#20698,.T.); #29111=ORIENTED_EDGE('',*,*,#20694,.T.); #29112=ORIENTED_EDGE('',*,*,#20699,.T.); #29113=ORIENTED_EDGE('',*,*,#20697,.F.); #29114=ORIENTED_EDGE('',*,*,#20637,.F.); #29115=ORIENTED_EDGE('',*,*,#20700,.F.); #29116=ORIENTED_EDGE('',*,*,#20640,.T.); #29117=ORIENTED_EDGE('',*,*,#20701,.T.); #29118=ORIENTED_EDGE('',*,*,#20702,.T.); #29119=ORIENTED_EDGE('',*,*,#20703,.T.); #29120=ORIENTED_EDGE('',*,*,#20704,.T.); #29121=ORIENTED_EDGE('',*,*,#20701,.F.); #29122=ORIENTED_EDGE('',*,*,#20643,.F.); #29123=ORIENTED_EDGE('',*,*,#20705,.T.); #29124=ORIENTED_EDGE('',*,*,#20706,.F.); #29125=ORIENTED_EDGE('',*,*,#20703,.F.); #29126=ORIENTED_EDGE('',*,*,#20642,.F.); #29127=ORIENTED_EDGE('',*,*,#20705,.F.); #29128=ORIENTED_EDGE('',*,*,#20641,.T.); #29129=ORIENTED_EDGE('',*,*,#20700,.T.); #29130=ORIENTED_EDGE('',*,*,#20707,.F.); #29131=ORIENTED_EDGE('',*,*,#20708,.T.); #29132=ORIENTED_EDGE('',*,*,#20709,.T.); #29133=ORIENTED_EDGE('',*,*,#20710,.F.); #29134=ORIENTED_EDGE('',*,*,#20661,.F.); #29135=ORIENTED_EDGE('',*,*,#20711,.F.); #29136=ORIENTED_EDGE('',*,*,#20712,.F.); #29137=ORIENTED_EDGE('',*,*,#20663,.T.); #29138=ORIENTED_EDGE('',*,*,#20710,.T.); #29139=ORIENTED_EDGE('',*,*,#20713,.F.); #29140=ORIENTED_EDGE('',*,*,#20666,.T.); #29141=ORIENTED_EDGE('',*,*,#20712,.T.); #29142=ORIENTED_EDGE('',*,*,#20714,.F.); #29143=ORIENTED_EDGE('',*,*,#20713,.T.); #29144=ORIENTED_EDGE('',*,*,#20715,.T.); #29145=ORIENTED_EDGE('',*,*,#20708,.F.); #29146=ORIENTED_EDGE('',*,*,#20667,.F.); #29147=ORIENTED_EDGE('',*,*,#20716,.T.); #29148=ORIENTED_EDGE('',*,*,#20717,.F.); #29149=ORIENTED_EDGE('',*,*,#20670,.F.); #29150=ORIENTED_EDGE('',*,*,#20718,.T.); #29151=ORIENTED_EDGE('',*,*,#20717,.T.); #29152=ORIENTED_EDGE('',*,*,#20719,.T.); #29153=ORIENTED_EDGE('',*,*,#20720,.F.); #29154=ORIENTED_EDGE('',*,*,#20671,.F.); #29155=ORIENTED_EDGE('',*,*,#20721,.F.); #29156=ORIENTED_EDGE('',*,*,#20722,.F.); #29157=ORIENTED_EDGE('',*,*,#20673,.T.); #29158=ORIENTED_EDGE('',*,*,#20720,.T.); #29159=ORIENTED_EDGE('',*,*,#20718,.F.); #29160=ORIENTED_EDGE('',*,*,#20675,.T.); #29161=ORIENTED_EDGE('',*,*,#20722,.T.); #29162=ORIENTED_EDGE('',*,*,#20723,.F.); #29163=ORIENTED_EDGE('',*,*,#20724,.F.); #29164=ORIENTED_EDGE('',*,*,#20725,.F.); #29165=ORIENTED_EDGE('',*,*,#20677,.T.); #29166=ORIENTED_EDGE('',*,*,#20726,.T.); #29167=ORIENTED_EDGE('',*,*,#20727,.F.); #29168=ORIENTED_EDGE('',*,*,#20680,.T.); #29169=ORIENTED_EDGE('',*,*,#20725,.T.); #29170=ORIENTED_EDGE('',*,*,#20728,.F.); #29171=ORIENTED_EDGE('',*,*,#20729,.T.); #29172=ORIENTED_EDGE('',*,*,#20730,.F.); #29173=ORIENTED_EDGE('',*,*,#20682,.F.); #29174=ORIENTED_EDGE('',*,*,#20727,.T.); #29175=ORIENTED_EDGE('',*,*,#20730,.T.); #29176=ORIENTED_EDGE('',*,*,#20731,.T.); #29177=ORIENTED_EDGE('',*,*,#20726,.F.); #29178=ORIENTED_EDGE('',*,*,#20683,.F.); #29179=ORIENTED_EDGE('',*,*,#20732,.F.); #29180=ORIENTED_EDGE('',*,*,#20686,.T.); #29181=ORIENTED_EDGE('',*,*,#20733,.T.); #29182=ORIENTED_EDGE('',*,*,#20734,.F.); #29183=ORIENTED_EDGE('',*,*,#20735,.T.); #29184=ORIENTED_EDGE('',*,*,#20733,.F.); #29185=ORIENTED_EDGE('',*,*,#20688,.F.); #29186=ORIENTED_EDGE('',*,*,#20736,.T.); #29187=ORIENTED_EDGE('',*,*,#20737,.T.); #29188=ORIENTED_EDGE('',*,*,#20738,.T.); #29189=ORIENTED_EDGE('',*,*,#20736,.F.); #29190=ORIENTED_EDGE('',*,*,#20690,.F.); #29191=ORIENTED_EDGE('',*,*,#20737,.F.); #29192=ORIENTED_EDGE('',*,*,#20691,.T.); #29193=ORIENTED_EDGE('',*,*,#20732,.T.); #29194=ORIENTED_EDGE('',*,*,#20739,.F.); #29195=ORIENTED_EDGE('',*,*,#20740,.F.); #29196=ORIENTED_EDGE('',*,*,#20741,.F.); #29197=ORIENTED_EDGE('',*,*,#20693,.T.); #29198=ORIENTED_EDGE('',*,*,#20742,.T.); #29199=ORIENTED_EDGE('',*,*,#20742,.F.); #29200=ORIENTED_EDGE('',*,*,#20696,.T.); #29201=ORIENTED_EDGE('',*,*,#20743,.T.); #29202=ORIENTED_EDGE('',*,*,#20744,.F.); #29203=ORIENTED_EDGE('',*,*,#20745,.T.); #29204=ORIENTED_EDGE('',*,*,#20743,.F.); #29205=ORIENTED_EDGE('',*,*,#20698,.F.); #29206=ORIENTED_EDGE('',*,*,#20746,.T.); #29207=ORIENTED_EDGE('',*,*,#20741,.T.); #29208=ORIENTED_EDGE('',*,*,#20747,.T.); #29209=ORIENTED_EDGE('',*,*,#20746,.F.); #29210=ORIENTED_EDGE('',*,*,#20699,.F.); #29211=ORIENTED_EDGE('',*,*,#20748,.T.); #29212=ORIENTED_EDGE('',*,*,#20749,.F.); #29213=ORIENTED_EDGE('',*,*,#20702,.F.); #29214=ORIENTED_EDGE('',*,*,#20750,.T.); #29215=ORIENTED_EDGE('',*,*,#20751,.T.); #29216=ORIENTED_EDGE('',*,*,#20752,.T.); #29217=ORIENTED_EDGE('',*,*,#20750,.F.); #29218=ORIENTED_EDGE('',*,*,#20704,.F.); #29219=ORIENTED_EDGE('',*,*,#20753,.F.); #29220=ORIENTED_EDGE('',*,*,#20751,.F.); #29221=ORIENTED_EDGE('',*,*,#20706,.T.); #29222=ORIENTED_EDGE('',*,*,#20754,.T.); #29223=ORIENTED_EDGE('',*,*,#20754,.F.); #29224=ORIENTED_EDGE('',*,*,#20707,.T.); #29225=ORIENTED_EDGE('',*,*,#20749,.T.); #29226=ORIENTED_EDGE('',*,*,#20755,.F.); #29227=ORIENTED_EDGE('',*,*,#20711,.T.); #29228=ORIENTED_EDGE('',*,*,#20709,.F.); #29229=ORIENTED_EDGE('',*,*,#20715,.F.); #29230=ORIENTED_EDGE('',*,*,#20714,.T.); #29231=ORIENTED_EDGE('',*,*,#20721,.T.); #29232=ORIENTED_EDGE('',*,*,#20719,.F.); #29233=ORIENTED_EDGE('',*,*,#20716,.F.); #29234=ORIENTED_EDGE('',*,*,#20723,.T.); #29235=ORIENTED_EDGE('',*,*,#20724,.T.); #29236=ORIENTED_EDGE('',*,*,#20731,.F.); #29237=ORIENTED_EDGE('',*,*,#20729,.F.); #29238=ORIENTED_EDGE('',*,*,#20728,.T.); #29239=ORIENTED_EDGE('',*,*,#20739,.T.); #29240=ORIENTED_EDGE('',*,*,#20734,.T.); #29241=ORIENTED_EDGE('',*,*,#20735,.F.); #29242=ORIENTED_EDGE('',*,*,#20738,.F.); #29243=ORIENTED_EDGE('',*,*,#20740,.T.); #29244=ORIENTED_EDGE('',*,*,#20744,.T.); #29245=ORIENTED_EDGE('',*,*,#20745,.F.); #29246=ORIENTED_EDGE('',*,*,#20747,.F.); #29247=ORIENTED_EDGE('',*,*,#20753,.T.); #29248=ORIENTED_EDGE('',*,*,#20755,.T.); #29249=ORIENTED_EDGE('',*,*,#20748,.F.); #29250=ORIENTED_EDGE('',*,*,#20752,.F.); #29251=ORIENTED_EDGE('',*,*,#20756,.T.); #29252=ORIENTED_EDGE('',*,*,#20757,.T.); #29253=ORIENTED_EDGE('',*,*,#20758,.T.); #29254=ORIENTED_EDGE('',*,*,#20759,.F.); #29255=ORIENTED_EDGE('',*,*,#20760,.F.); #29256=ORIENTED_EDGE('',*,*,#20761,.T.); #29257=ORIENTED_EDGE('',*,*,#20762,.F.); #29258=ORIENTED_EDGE('',*,*,#20763,.F.); #29259=ORIENTED_EDGE('',*,*,#20764,.T.); #29260=ORIENTED_EDGE('',*,*,#20765,.F.); #29261=ORIENTED_EDGE('',*,*,#20756,.F.); #29262=ORIENTED_EDGE('',*,*,#20766,.T.); #29263=ORIENTED_EDGE('',*,*,#20763,.T.); #29264=ORIENTED_EDGE('',*,*,#20767,.T.); #29265=ORIENTED_EDGE('',*,*,#20768,.F.); #29266=ORIENTED_EDGE('',*,*,#20766,.F.); #29267=ORIENTED_EDGE('',*,*,#20765,.T.); #29268=ORIENTED_EDGE('',*,*,#20769,.T.); #29269=ORIENTED_EDGE('',*,*,#20770,.F.); #29270=ORIENTED_EDGE('',*,*,#20757,.F.); #29271=ORIENTED_EDGE('',*,*,#20762,.T.); #29272=ORIENTED_EDGE('',*,*,#20771,.T.); #29273=ORIENTED_EDGE('',*,*,#20772,.F.); #29274=ORIENTED_EDGE('',*,*,#20767,.F.); #29275=ORIENTED_EDGE('',*,*,#20758,.F.); #29276=ORIENTED_EDGE('',*,*,#20770,.T.); #29277=ORIENTED_EDGE('',*,*,#20773,.T.); #29278=ORIENTED_EDGE('',*,*,#20774,.F.); #29279=ORIENTED_EDGE('',*,*,#20775,.T.); #29280=ORIENTED_EDGE('',*,*,#20776,.T.); #29281=ORIENTED_EDGE('',*,*,#20771,.F.); #29282=ORIENTED_EDGE('',*,*,#20761,.F.); #29283=ORIENTED_EDGE('',*,*,#20759,.T.); #29284=ORIENTED_EDGE('',*,*,#20774,.T.); #29285=ORIENTED_EDGE('',*,*,#20777,.F.); #29286=ORIENTED_EDGE('',*,*,#20778,.F.); #29287=ORIENTED_EDGE('',*,*,#20779,.F.); #29288=ORIENTED_EDGE('',*,*,#20775,.F.); #29289=ORIENTED_EDGE('',*,*,#20760,.T.); #29290=ORIENTED_EDGE('',*,*,#20778,.T.); #29291=ORIENTED_EDGE('',*,*,#20764,.F.); #29292=ORIENTED_EDGE('',*,*,#20768,.T.); #29293=ORIENTED_EDGE('',*,*,#20772,.T.); #29294=ORIENTED_EDGE('',*,*,#20776,.F.); #29295=ORIENTED_EDGE('',*,*,#20779,.T.); #29296=ORIENTED_EDGE('',*,*,#20777,.T.); #29297=ORIENTED_EDGE('',*,*,#20773,.F.); #29298=ORIENTED_EDGE('',*,*,#20769,.F.); #29299=ORIENTED_EDGE('',*,*,#20780,.F.); #29300=ORIENTED_EDGE('',*,*,#20781,.T.); #29301=ORIENTED_EDGE('',*,*,#20782,.T.); #29302=ORIENTED_EDGE('',*,*,#20783,.T.); #29303=ORIENTED_EDGE('',*,*,#20784,.F.); #29304=ORIENTED_EDGE('',*,*,#20785,.F.); #29305=ORIENTED_EDGE('',*,*,#20786,.T.); #29306=ORIENTED_EDGE('',*,*,#20787,.F.); #29307=ORIENTED_EDGE('',*,*,#20780,.T.); #29308=ORIENTED_EDGE('',*,*,#20788,.T.); #29309=ORIENTED_EDGE('',*,*,#20789,.F.); #29310=ORIENTED_EDGE('',*,*,#20790,.F.); #29311=ORIENTED_EDGE('',*,*,#20787,.T.); #29312=ORIENTED_EDGE('',*,*,#20791,.T.); #29313=ORIENTED_EDGE('',*,*,#20792,.F.); #29314=ORIENTED_EDGE('',*,*,#20788,.F.); #29315=ORIENTED_EDGE('',*,*,#20793,.T.); #29316=ORIENTED_EDGE('',*,*,#20794,.T.); #29317=ORIENTED_EDGE('',*,*,#20791,.F.); #29318=ORIENTED_EDGE('',*,*,#20786,.F.); #29319=ORIENTED_EDGE('',*,*,#20795,.F.); #29320=ORIENTED_EDGE('',*,*,#20793,.F.); #29321=ORIENTED_EDGE('',*,*,#20785,.T.); #29322=ORIENTED_EDGE('',*,*,#20796,.T.); #29323=ORIENTED_EDGE('',*,*,#20784,.T.); #29324=ORIENTED_EDGE('',*,*,#20797,.T.); #29325=ORIENTED_EDGE('',*,*,#20798,.F.); #29326=ORIENTED_EDGE('',*,*,#20796,.F.); #29327=ORIENTED_EDGE('',*,*,#20783,.F.); #29328=ORIENTED_EDGE('',*,*,#20799,.T.); #29329=ORIENTED_EDGE('',*,*,#20800,.T.); #29330=ORIENTED_EDGE('',*,*,#20797,.F.); #29331=ORIENTED_EDGE('',*,*,#20801,.T.); #29332=ORIENTED_EDGE('',*,*,#20802,.T.); #29333=ORIENTED_EDGE('',*,*,#20799,.F.); #29334=ORIENTED_EDGE('',*,*,#20782,.F.); #29335=ORIENTED_EDGE('',*,*,#20803,.T.); #29336=ORIENTED_EDGE('',*,*,#20801,.F.); #29337=ORIENTED_EDGE('',*,*,#20781,.F.); #29338=ORIENTED_EDGE('',*,*,#20790,.T.); #29339=ORIENTED_EDGE('',*,*,#20804,.T.); #29340=ORIENTED_EDGE('',*,*,#20805,.T.); #29341=ORIENTED_EDGE('',*,*,#20806,.T.); #29342=ORIENTED_EDGE('',*,*,#20807,.F.); #29343=ORIENTED_EDGE('',*,*,#20808,.F.); #29344=ORIENTED_EDGE('',*,*,#20809,.T.); #29345=ORIENTED_EDGE('',*,*,#20810,.F.); #29346=ORIENTED_EDGE('',*,*,#20811,.F.); #29347=ORIENTED_EDGE('',*,*,#20789,.T.); #29348=ORIENTED_EDGE('',*,*,#20792,.T.); #29349=ORIENTED_EDGE('',*,*,#20794,.F.); #29350=ORIENTED_EDGE('',*,*,#20795,.T.); #29351=ORIENTED_EDGE('',*,*,#20798,.T.); #29352=ORIENTED_EDGE('',*,*,#20800,.F.); #29353=ORIENTED_EDGE('',*,*,#20802,.F.); #29354=ORIENTED_EDGE('',*,*,#20803,.F.); #29355=ORIENTED_EDGE('',*,*,#20812,.T.); #29356=ORIENTED_EDGE('',*,*,#20813,.F.); #29357=ORIENTED_EDGE('',*,*,#20804,.F.); #29358=ORIENTED_EDGE('',*,*,#20814,.T.); #29359=ORIENTED_EDGE('',*,*,#20811,.T.); #29360=ORIENTED_EDGE('',*,*,#20815,.T.); #29361=ORIENTED_EDGE('',*,*,#20816,.F.); #29362=ORIENTED_EDGE('',*,*,#20814,.F.); #29363=ORIENTED_EDGE('',*,*,#20813,.T.); #29364=ORIENTED_EDGE('',*,*,#20817,.T.); #29365=ORIENTED_EDGE('',*,*,#20818,.F.); #29366=ORIENTED_EDGE('',*,*,#20805,.F.); #29367=ORIENTED_EDGE('',*,*,#20810,.T.); #29368=ORIENTED_EDGE('',*,*,#20819,.T.); #29369=ORIENTED_EDGE('',*,*,#20820,.F.); #29370=ORIENTED_EDGE('',*,*,#20815,.F.); #29371=ORIENTED_EDGE('',*,*,#20806,.F.); #29372=ORIENTED_EDGE('',*,*,#20818,.T.); #29373=ORIENTED_EDGE('',*,*,#20821,.T.); #29374=ORIENTED_EDGE('',*,*,#20822,.F.); #29375=ORIENTED_EDGE('',*,*,#20823,.T.); #29376=ORIENTED_EDGE('',*,*,#20824,.T.); #29377=ORIENTED_EDGE('',*,*,#20819,.F.); #29378=ORIENTED_EDGE('',*,*,#20809,.F.); #29379=ORIENTED_EDGE('',*,*,#20807,.T.); #29380=ORIENTED_EDGE('',*,*,#20822,.T.); #29381=ORIENTED_EDGE('',*,*,#20825,.F.); #29382=ORIENTED_EDGE('',*,*,#20826,.F.); #29383=ORIENTED_EDGE('',*,*,#20827,.F.); #29384=ORIENTED_EDGE('',*,*,#20823,.F.); #29385=ORIENTED_EDGE('',*,*,#20808,.T.); #29386=ORIENTED_EDGE('',*,*,#20826,.T.); #29387=ORIENTED_EDGE('',*,*,#20812,.F.); #29388=ORIENTED_EDGE('',*,*,#20816,.T.); #29389=ORIENTED_EDGE('',*,*,#20820,.T.); #29390=ORIENTED_EDGE('',*,*,#20824,.F.); #29391=ORIENTED_EDGE('',*,*,#20827,.T.); #29392=ORIENTED_EDGE('',*,*,#20825,.T.); #29393=ORIENTED_EDGE('',*,*,#20821,.F.); #29394=ORIENTED_EDGE('',*,*,#20817,.F.); #29395=ORIENTED_EDGE('',*,*,#20828,.T.); #29396=ORIENTED_EDGE('',*,*,#20829,.T.); #29397=ORIENTED_EDGE('',*,*,#20830,.T.); #29398=ORIENTED_EDGE('',*,*,#20831,.T.); #29399=ORIENTED_EDGE('',*,*,#20832,.T.); #29400=ORIENTED_EDGE('',*,*,#20833,.F.); #29401=ORIENTED_EDGE('',*,*,#20834,.T.); #29402=ORIENTED_EDGE('',*,*,#20835,.F.); #29403=ORIENTED_EDGE('',*,*,#20836,.F.); #29404=ORIENTED_EDGE('',*,*,#20837,.T.); #29405=ORIENTED_EDGE('',*,*,#20838,.T.); #29406=ORIENTED_EDGE('',*,*,#20839,.T.); #29407=ORIENTED_EDGE('',*,*,#20840,.F.); #29408=ORIENTED_EDGE('',*,*,#20835,.T.); #29409=ORIENTED_EDGE('',*,*,#20833,.T.); #29410=ORIENTED_EDGE('',*,*,#20841,.T.); #29411=ORIENTED_EDGE('',*,*,#20842,.F.); #29412=ORIENTED_EDGE('',*,*,#20843,.T.); #29413=ORIENTED_EDGE('',*,*,#20844,.F.); #29414=ORIENTED_EDGE('',*,*,#20845,.F.); #29415=ORIENTED_EDGE('',*,*,#20846,.F.); #29416=ORIENTED_EDGE('',*,*,#20847,.F.); #29417=ORIENTED_EDGE('',*,*,#20848,.F.); #29418=ORIENTED_EDGE('',*,*,#20849,.F.); #29419=ORIENTED_EDGE('',*,*,#20850,.F.); #29420=ORIENTED_EDGE('',*,*,#20851,.F.); #29421=ORIENTED_EDGE('',*,*,#20840,.T.); #29422=ORIENTED_EDGE('',*,*,#20852,.T.); #29423=ORIENTED_EDGE('',*,*,#20853,.T.); #29424=ORIENTED_EDGE('',*,*,#20854,.T.); #29425=ORIENTED_EDGE('',*,*,#20855,.T.); #29426=ORIENTED_EDGE('',*,*,#20856,.T.); #29427=ORIENTED_EDGE('',*,*,#20857,.T.); #29428=ORIENTED_EDGE('',*,*,#20858,.T.); #29429=ORIENTED_EDGE('',*,*,#20859,.T.); #29430=ORIENTED_EDGE('',*,*,#20860,.T.); #29431=ORIENTED_EDGE('',*,*,#20861,.T.); #29432=ORIENTED_EDGE('',*,*,#20862,.T.); #29433=ORIENTED_EDGE('',*,*,#20863,.T.); #29434=ORIENTED_EDGE('',*,*,#20836,.T.); #29435=ORIENTED_EDGE('',*,*,#20834,.F.); #29436=ORIENTED_EDGE('',*,*,#20864,.T.); #29437=ORIENTED_EDGE('',*,*,#20865,.T.); #29438=ORIENTED_EDGE('',*,*,#20866,.T.); #29439=ORIENTED_EDGE('',*,*,#20867,.T.); #29440=ORIENTED_EDGE('',*,*,#20868,.T.); #29441=ORIENTED_EDGE('',*,*,#20869,.T.); #29442=ORIENTED_EDGE('',*,*,#20870,.T.); #29443=ORIENTED_EDGE('',*,*,#20871,.T.); #29444=ORIENTED_EDGE('',*,*,#20872,.T.); #29445=ORIENTED_EDGE('',*,*,#20873,.T.); #29446=ORIENTED_EDGE('',*,*,#20874,.T.); #29447=ORIENTED_EDGE('',*,*,#20875,.T.); #29448=ORIENTED_EDGE('',*,*,#20838,.F.); #29449=ORIENTED_EDGE('',*,*,#20876,.T.); #29450=ORIENTED_EDGE('',*,*,#20877,.T.); #29451=ORIENTED_EDGE('',*,*,#20878,.T.); #29452=ORIENTED_EDGE('',*,*,#20879,.T.); #29453=ORIENTED_EDGE('',*,*,#20880,.T.); #29454=ORIENTED_EDGE('',*,*,#20842,.T.); #29455=ORIENTED_EDGE('',*,*,#20841,.F.); #29456=ORIENTED_EDGE('',*,*,#20832,.F.); #29457=ORIENTED_EDGE('',*,*,#20881,.T.); #29458=ORIENTED_EDGE('',*,*,#20876,.F.); #29459=ORIENTED_EDGE('',*,*,#20843,.F.); #29460=ORIENTED_EDGE('',*,*,#20880,.F.); #29461=ORIENTED_EDGE('',*,*,#20882,.F.); #29462=ORIENTED_EDGE('',*,*,#20828,.F.); #29463=ORIENTED_EDGE('',*,*,#20864,.F.); #29464=ORIENTED_EDGE('',*,*,#20837,.F.); #29465=ORIENTED_EDGE('',*,*,#20863,.F.); #29466=ORIENTED_EDGE('',*,*,#20883,.T.); #29467=ORIENTED_EDGE('',*,*,#20878,.F.); #29468=ORIENTED_EDGE('',*,*,#20884,.F.); #29469=ORIENTED_EDGE('',*,*,#20830,.F.); #29470=ORIENTED_EDGE('',*,*,#20885,.T.); #29471=ORIENTED_EDGE('',*,*,#20886,.F.); #29472=ORIENTED_EDGE('',*,*,#20887,.T.); #29473=ORIENTED_EDGE('',*,*,#20888,.T.); #29474=ORIENTED_EDGE('',*,*,#20889,.F.); #29475=ORIENTED_EDGE('',*,*,#20890,.F.); #29476=ORIENTED_EDGE('',*,*,#20891,.T.); #29477=ORIENTED_EDGE('',*,*,#20892,.T.); #29478=ORIENTED_EDGE('',*,*,#20887,.F.); #29479=ORIENTED_EDGE('',*,*,#20893,.F.); #29480=ORIENTED_EDGE('',*,*,#20889,.T.); #29481=ORIENTED_EDGE('',*,*,#20894,.T.); #29482=ORIENTED_EDGE('',*,*,#20891,.F.); #29483=ORIENTED_EDGE('',*,*,#20895,.F.); #29484=ORIENTED_EDGE('',*,*,#20896,.T.); #29485=ORIENTED_EDGE('',*,*,#20897,.T.); #29486=ORIENTED_EDGE('',*,*,#20898,.F.); #29487=ORIENTED_EDGE('',*,*,#20899,.F.); #29488=ORIENTED_EDGE('',*,*,#20900,.T.); #29489=ORIENTED_EDGE('',*,*,#20901,.T.); #29490=ORIENTED_EDGE('',*,*,#20896,.F.); #29491=ORIENTED_EDGE('',*,*,#20902,.F.); #29492=ORIENTED_EDGE('',*,*,#20903,.T.); #29493=ORIENTED_EDGE('',*,*,#20904,.T.); #29494=ORIENTED_EDGE('',*,*,#20900,.F.); #29495=ORIENTED_EDGE('',*,*,#20905,.F.); #29496=ORIENTED_EDGE('',*,*,#20906,.T.); #29497=ORIENTED_EDGE('',*,*,#20907,.T.); #29498=ORIENTED_EDGE('',*,*,#20903,.F.); #29499=ORIENTED_EDGE('',*,*,#20908,.F.); #29500=ORIENTED_EDGE('',*,*,#20909,.T.); #29501=ORIENTED_EDGE('',*,*,#20910,.T.); #29502=ORIENTED_EDGE('',*,*,#20906,.F.); #29503=ORIENTED_EDGE('',*,*,#20911,.F.); #29504=ORIENTED_EDGE('',*,*,#20912,.T.); #29505=ORIENTED_EDGE('',*,*,#20913,.T.); #29506=ORIENTED_EDGE('',*,*,#20909,.F.); #29507=ORIENTED_EDGE('',*,*,#20914,.F.); #29508=ORIENTED_EDGE('',*,*,#20915,.T.); #29509=ORIENTED_EDGE('',*,*,#20916,.T.); #29510=ORIENTED_EDGE('',*,*,#20912,.F.); #29511=ORIENTED_EDGE('',*,*,#20917,.F.); #29512=ORIENTED_EDGE('',*,*,#20898,.T.); #29513=ORIENTED_EDGE('',*,*,#20918,.T.); #29514=ORIENTED_EDGE('',*,*,#20915,.F.); #29515=ORIENTED_EDGE('',*,*,#20918,.F.); #29516=ORIENTED_EDGE('',*,*,#20897,.F.); #29517=ORIENTED_EDGE('',*,*,#20901,.F.); #29518=ORIENTED_EDGE('',*,*,#20904,.F.); #29519=ORIENTED_EDGE('',*,*,#20907,.F.); #29520=ORIENTED_EDGE('',*,*,#20910,.F.); #29521=ORIENTED_EDGE('',*,*,#20913,.F.); #29522=ORIENTED_EDGE('',*,*,#20916,.F.); #29523=ORIENTED_EDGE('',*,*,#20894,.F.); #29524=ORIENTED_EDGE('',*,*,#20888,.F.); #29525=ORIENTED_EDGE('',*,*,#20892,.F.); #29526=ORIENTED_EDGE('',*,*,#20919,.F.); #29527=ORIENTED_EDGE('',*,*,#20920,.T.); #29528=ORIENTED_EDGE('',*,*,#20921,.T.); #29529=ORIENTED_EDGE('',*,*,#20922,.F.); #29530=ORIENTED_EDGE('',*,*,#20923,.F.); #29531=ORIENTED_EDGE('',*,*,#20924,.T.); #29532=ORIENTED_EDGE('',*,*,#20925,.T.); #29533=ORIENTED_EDGE('',*,*,#20920,.F.); #29534=ORIENTED_EDGE('',*,*,#20926,.F.); #29535=ORIENTED_EDGE('',*,*,#20927,.T.); #29536=ORIENTED_EDGE('',*,*,#20928,.T.); #29537=ORIENTED_EDGE('',*,*,#20924,.F.); #29538=ORIENTED_EDGE('',*,*,#20929,.F.); #29539=ORIENTED_EDGE('',*,*,#20930,.T.); #29540=ORIENTED_EDGE('',*,*,#20931,.T.); #29541=ORIENTED_EDGE('',*,*,#20927,.F.); #29542=ORIENTED_EDGE('',*,*,#20932,.F.); #29543=ORIENTED_EDGE('',*,*,#20933,.T.); #29544=ORIENTED_EDGE('',*,*,#20934,.T.); #29545=ORIENTED_EDGE('',*,*,#20930,.F.); #29546=ORIENTED_EDGE('',*,*,#20935,.F.); #29547=ORIENTED_EDGE('',*,*,#20936,.T.); #29548=ORIENTED_EDGE('',*,*,#20937,.T.); #29549=ORIENTED_EDGE('',*,*,#20933,.F.); #29550=ORIENTED_EDGE('',*,*,#20938,.F.); #29551=ORIENTED_EDGE('',*,*,#20939,.T.); #29552=ORIENTED_EDGE('',*,*,#20940,.T.); #29553=ORIENTED_EDGE('',*,*,#20936,.F.); #29554=ORIENTED_EDGE('',*,*,#20941,.F.); #29555=ORIENTED_EDGE('',*,*,#20942,.T.); #29556=ORIENTED_EDGE('',*,*,#20943,.T.); #29557=ORIENTED_EDGE('',*,*,#20939,.F.); #29558=ORIENTED_EDGE('',*,*,#20944,.F.); #29559=ORIENTED_EDGE('',*,*,#20922,.T.); #29560=ORIENTED_EDGE('',*,*,#20945,.T.); #29561=ORIENTED_EDGE('',*,*,#20942,.F.); #29562=ORIENTED_EDGE('',*,*,#20946,.F.); #29563=ORIENTED_EDGE('',*,*,#20947,.T.); #29564=ORIENTED_EDGE('',*,*,#20948,.T.); #29565=ORIENTED_EDGE('',*,*,#20949,.F.); #29566=ORIENTED_EDGE('',*,*,#20950,.F.); #29567=ORIENTED_EDGE('',*,*,#20951,.T.); #29568=ORIENTED_EDGE('',*,*,#20952,.T.); #29569=ORIENTED_EDGE('',*,*,#20947,.F.); #29570=ORIENTED_EDGE('',*,*,#20953,.F.); #29571=ORIENTED_EDGE('',*,*,#20954,.T.); #29572=ORIENTED_EDGE('',*,*,#20955,.T.); #29573=ORIENTED_EDGE('',*,*,#20951,.F.); #29574=ORIENTED_EDGE('',*,*,#20956,.F.); #29575=ORIENTED_EDGE('',*,*,#20957,.T.); #29576=ORIENTED_EDGE('',*,*,#20958,.T.); #29577=ORIENTED_EDGE('',*,*,#20954,.F.); #29578=ORIENTED_EDGE('',*,*,#20959,.F.); #29579=ORIENTED_EDGE('',*,*,#20960,.T.); #29580=ORIENTED_EDGE('',*,*,#20961,.T.); #29581=ORIENTED_EDGE('',*,*,#20957,.F.); #29582=ORIENTED_EDGE('',*,*,#20962,.F.); #29583=ORIENTED_EDGE('',*,*,#20963,.T.); #29584=ORIENTED_EDGE('',*,*,#20964,.T.); #29585=ORIENTED_EDGE('',*,*,#20960,.F.); #29586=ORIENTED_EDGE('',*,*,#20965,.F.); #29587=ORIENTED_EDGE('',*,*,#20966,.T.); #29588=ORIENTED_EDGE('',*,*,#20967,.T.); #29589=ORIENTED_EDGE('',*,*,#20963,.F.); #29590=ORIENTED_EDGE('',*,*,#20968,.F.); #29591=ORIENTED_EDGE('',*,*,#20969,.T.); #29592=ORIENTED_EDGE('',*,*,#20970,.T.); #29593=ORIENTED_EDGE('',*,*,#20966,.F.); #29594=ORIENTED_EDGE('',*,*,#20971,.F.); #29595=ORIENTED_EDGE('',*,*,#20949,.T.); #29596=ORIENTED_EDGE('',*,*,#20972,.T.); #29597=ORIENTED_EDGE('',*,*,#20969,.F.); #29598=ORIENTED_EDGE('',*,*,#20973,.F.); #29599=ORIENTED_EDGE('',*,*,#20974,.T.); #29600=ORIENTED_EDGE('',*,*,#20975,.T.); #29601=ORIENTED_EDGE('',*,*,#20976,.F.); #29602=ORIENTED_EDGE('',*,*,#20977,.F.); #29603=ORIENTED_EDGE('',*,*,#20978,.T.); #29604=ORIENTED_EDGE('',*,*,#20979,.T.); #29605=ORIENTED_EDGE('',*,*,#20974,.F.); #29606=ORIENTED_EDGE('',*,*,#20980,.F.); #29607=ORIENTED_EDGE('',*,*,#20981,.T.); #29608=ORIENTED_EDGE('',*,*,#20982,.T.); #29609=ORIENTED_EDGE('',*,*,#20978,.F.); #29610=ORIENTED_EDGE('',*,*,#20983,.F.); #29611=ORIENTED_EDGE('',*,*,#20984,.T.); #29612=ORIENTED_EDGE('',*,*,#20985,.T.); #29613=ORIENTED_EDGE('',*,*,#20981,.F.); #29614=ORIENTED_EDGE('',*,*,#20986,.F.); #29615=ORIENTED_EDGE('',*,*,#20987,.T.); #29616=ORIENTED_EDGE('',*,*,#20988,.T.); #29617=ORIENTED_EDGE('',*,*,#20984,.F.); #29618=ORIENTED_EDGE('',*,*,#20989,.F.); #29619=ORIENTED_EDGE('',*,*,#20990,.T.); #29620=ORIENTED_EDGE('',*,*,#20991,.T.); #29621=ORIENTED_EDGE('',*,*,#20987,.F.); #29622=ORIENTED_EDGE('',*,*,#20992,.F.); #29623=ORIENTED_EDGE('',*,*,#20993,.T.); #29624=ORIENTED_EDGE('',*,*,#20994,.T.); #29625=ORIENTED_EDGE('',*,*,#20990,.F.); #29626=ORIENTED_EDGE('',*,*,#20995,.F.); #29627=ORIENTED_EDGE('',*,*,#20996,.T.); #29628=ORIENTED_EDGE('',*,*,#20997,.T.); #29629=ORIENTED_EDGE('',*,*,#20993,.F.); #29630=ORIENTED_EDGE('',*,*,#20998,.F.); #29631=ORIENTED_EDGE('',*,*,#20999,.T.); #29632=ORIENTED_EDGE('',*,*,#21000,.T.); #29633=ORIENTED_EDGE('',*,*,#20996,.F.); #29634=ORIENTED_EDGE('',*,*,#21001,.F.); #29635=ORIENTED_EDGE('',*,*,#21002,.T.); #29636=ORIENTED_EDGE('',*,*,#21003,.T.); #29637=ORIENTED_EDGE('',*,*,#20999,.F.); #29638=ORIENTED_EDGE('',*,*,#21004,.F.); #29639=ORIENTED_EDGE('',*,*,#21005,.T.); #29640=ORIENTED_EDGE('',*,*,#21006,.T.); #29641=ORIENTED_EDGE('',*,*,#21002,.F.); #29642=ORIENTED_EDGE('',*,*,#21007,.F.); #29643=ORIENTED_EDGE('',*,*,#21008,.T.); #29644=ORIENTED_EDGE('',*,*,#21009,.T.); #29645=ORIENTED_EDGE('',*,*,#21005,.F.); #29646=ORIENTED_EDGE('',*,*,#21010,.F.); #29647=ORIENTED_EDGE('',*,*,#21011,.T.); #29648=ORIENTED_EDGE('',*,*,#21012,.T.); #29649=ORIENTED_EDGE('',*,*,#21008,.F.); #29650=ORIENTED_EDGE('',*,*,#21013,.F.); #29651=ORIENTED_EDGE('',*,*,#21014,.T.); #29652=ORIENTED_EDGE('',*,*,#21015,.T.); #29653=ORIENTED_EDGE('',*,*,#21011,.F.); #29654=ORIENTED_EDGE('',*,*,#21016,.F.); #29655=ORIENTED_EDGE('',*,*,#20976,.T.); #29656=ORIENTED_EDGE('',*,*,#21017,.T.); #29657=ORIENTED_EDGE('',*,*,#21014,.F.); #29658=ORIENTED_EDGE('',*,*,#21017,.F.); #29659=ORIENTED_EDGE('',*,*,#20975,.F.); #29660=ORIENTED_EDGE('',*,*,#20979,.F.); #29661=ORIENTED_EDGE('',*,*,#20982,.F.); #29662=ORIENTED_EDGE('',*,*,#20985,.F.); #29663=ORIENTED_EDGE('',*,*,#20988,.F.); #29664=ORIENTED_EDGE('',*,*,#20991,.F.); #29665=ORIENTED_EDGE('',*,*,#20994,.F.); #29666=ORIENTED_EDGE('',*,*,#20997,.F.); #29667=ORIENTED_EDGE('',*,*,#21000,.F.); #29668=ORIENTED_EDGE('',*,*,#21003,.F.); #29669=ORIENTED_EDGE('',*,*,#21006,.F.); #29670=ORIENTED_EDGE('',*,*,#21009,.F.); #29671=ORIENTED_EDGE('',*,*,#21012,.F.); #29672=ORIENTED_EDGE('',*,*,#21015,.F.); #29673=ORIENTED_EDGE('',*,*,#20972,.F.); #29674=ORIENTED_EDGE('',*,*,#20948,.F.); #29675=ORIENTED_EDGE('',*,*,#20952,.F.); #29676=ORIENTED_EDGE('',*,*,#20955,.F.); #29677=ORIENTED_EDGE('',*,*,#20958,.F.); #29678=ORIENTED_EDGE('',*,*,#20961,.F.); #29679=ORIENTED_EDGE('',*,*,#20964,.F.); #29680=ORIENTED_EDGE('',*,*,#20967,.F.); #29681=ORIENTED_EDGE('',*,*,#20970,.F.); #29682=ORIENTED_EDGE('',*,*,#20945,.F.); #29683=ORIENTED_EDGE('',*,*,#20921,.F.); #29684=ORIENTED_EDGE('',*,*,#20925,.F.); #29685=ORIENTED_EDGE('',*,*,#20928,.F.); #29686=ORIENTED_EDGE('',*,*,#20931,.F.); #29687=ORIENTED_EDGE('',*,*,#20934,.F.); #29688=ORIENTED_EDGE('',*,*,#20937,.F.); #29689=ORIENTED_EDGE('',*,*,#20940,.F.); #29690=ORIENTED_EDGE('',*,*,#20943,.F.); #29691=ORIENTED_EDGE('',*,*,#21018,.F.); #29692=ORIENTED_EDGE('',*,*,#21019,.F.); #29693=ORIENTED_EDGE('',*,*,#21020,.F.); #29694=ORIENTED_EDGE('',*,*,#21021,.F.); #29695=ORIENTED_EDGE('',*,*,#21022,.F.); #29696=ORIENTED_EDGE('',*,*,#21023,.F.); #29697=ORIENTED_EDGE('',*,*,#21024,.F.); #29698=ORIENTED_EDGE('',*,*,#21025,.F.); #29699=ORIENTED_EDGE('',*,*,#21026,.T.); #29700=ORIENTED_EDGE('',*,*,#21027,.T.); #29701=ORIENTED_EDGE('',*,*,#21028,.T.); #29702=ORIENTED_EDGE('',*,*,#21029,.T.); #29703=ORIENTED_EDGE('',*,*,#21030,.T.); #29704=ORIENTED_EDGE('',*,*,#21031,.T.); #29705=ORIENTED_EDGE('',*,*,#21032,.T.); #29706=ORIENTED_EDGE('',*,*,#21033,.T.); #29707=ORIENTED_EDGE('',*,*,#21034,.T.); #29708=ORIENTED_EDGE('',*,*,#21035,.T.); #29709=ORIENTED_EDGE('',*,*,#21036,.T.); #29710=ORIENTED_EDGE('',*,*,#21037,.T.); #29711=ORIENTED_EDGE('',*,*,#21038,.T.); #29712=ORIENTED_EDGE('',*,*,#21039,.T.); #29713=ORIENTED_EDGE('',*,*,#21040,.T.); #29714=ORIENTED_EDGE('',*,*,#21041,.T.); #29715=ORIENTED_EDGE('',*,*,#21042,.T.); #29716=ORIENTED_EDGE('',*,*,#21043,.T.); #29717=ORIENTED_EDGE('',*,*,#21044,.T.); #29718=ORIENTED_EDGE('',*,*,#21045,.T.); #29719=ORIENTED_EDGE('',*,*,#21046,.T.); #29720=ORIENTED_EDGE('',*,*,#21047,.T.); #29721=ORIENTED_EDGE('',*,*,#21048,.T.); #29722=ORIENTED_EDGE('',*,*,#21049,.T.); #29723=ORIENTED_EDGE('',*,*,#21050,.T.); #29724=ORIENTED_EDGE('',*,*,#21051,.T.); #29725=ORIENTED_EDGE('',*,*,#21052,.T.); #29726=ORIENTED_EDGE('',*,*,#21053,.T.); #29727=ORIENTED_EDGE('',*,*,#21054,.T.); #29728=ORIENTED_EDGE('',*,*,#21055,.T.); #29729=ORIENTED_EDGE('',*,*,#21056,.T.); #29730=ORIENTED_EDGE('',*,*,#21057,.T.); #29731=ORIENTED_EDGE('',*,*,#21058,.T.); #29732=ORIENTED_EDGE('',*,*,#21059,.T.); #29733=ORIENTED_EDGE('',*,*,#20973,.T.); #29734=ORIENTED_EDGE('',*,*,#21016,.T.); #29735=ORIENTED_EDGE('',*,*,#21013,.T.); #29736=ORIENTED_EDGE('',*,*,#21010,.T.); #29737=ORIENTED_EDGE('',*,*,#21007,.T.); #29738=ORIENTED_EDGE('',*,*,#21004,.T.); #29739=ORIENTED_EDGE('',*,*,#21001,.T.); #29740=ORIENTED_EDGE('',*,*,#20998,.T.); #29741=ORIENTED_EDGE('',*,*,#20995,.T.); #29742=ORIENTED_EDGE('',*,*,#20992,.T.); #29743=ORIENTED_EDGE('',*,*,#20989,.T.); #29744=ORIENTED_EDGE('',*,*,#20986,.T.); #29745=ORIENTED_EDGE('',*,*,#20983,.T.); #29746=ORIENTED_EDGE('',*,*,#20980,.T.); #29747=ORIENTED_EDGE('',*,*,#20977,.T.); #29748=ORIENTED_EDGE('',*,*,#20895,.T.); #29749=ORIENTED_EDGE('',*,*,#20917,.T.); #29750=ORIENTED_EDGE('',*,*,#20914,.T.); #29751=ORIENTED_EDGE('',*,*,#20911,.T.); #29752=ORIENTED_EDGE('',*,*,#20908,.T.); #29753=ORIENTED_EDGE('',*,*,#20905,.T.); #29754=ORIENTED_EDGE('',*,*,#20902,.T.); #29755=ORIENTED_EDGE('',*,*,#20899,.T.); #29756=ORIENTED_EDGE('',*,*,#20946,.T.); #29757=ORIENTED_EDGE('',*,*,#20971,.T.); #29758=ORIENTED_EDGE('',*,*,#20968,.T.); #29759=ORIENTED_EDGE('',*,*,#20965,.T.); #29760=ORIENTED_EDGE('',*,*,#20962,.T.); #29761=ORIENTED_EDGE('',*,*,#20959,.T.); #29762=ORIENTED_EDGE('',*,*,#20956,.T.); #29763=ORIENTED_EDGE('',*,*,#20953,.T.); #29764=ORIENTED_EDGE('',*,*,#20950,.T.); #29765=ORIENTED_EDGE('',*,*,#20919,.T.); #29766=ORIENTED_EDGE('',*,*,#20944,.T.); #29767=ORIENTED_EDGE('',*,*,#20941,.T.); #29768=ORIENTED_EDGE('',*,*,#20938,.T.); #29769=ORIENTED_EDGE('',*,*,#20935,.T.); #29770=ORIENTED_EDGE('',*,*,#20932,.T.); #29771=ORIENTED_EDGE('',*,*,#20929,.T.); #29772=ORIENTED_EDGE('',*,*,#20926,.T.); #29773=ORIENTED_EDGE('',*,*,#20923,.T.); #29774=ORIENTED_EDGE('',*,*,#21060,.F.); #29775=ORIENTED_EDGE('',*,*,#21061,.T.); #29776=ORIENTED_EDGE('',*,*,#21062,.T.); #29777=ORIENTED_EDGE('',*,*,#21063,.F.); #29778=ORIENTED_EDGE('',*,*,#21064,.F.); #29779=ORIENTED_EDGE('',*,*,#21065,.T.); #29780=ORIENTED_EDGE('',*,*,#21066,.T.); #29781=ORIENTED_EDGE('',*,*,#21061,.F.); #29782=ORIENTED_EDGE('',*,*,#21067,.F.); #29783=ORIENTED_EDGE('',*,*,#21068,.T.); #29784=ORIENTED_EDGE('',*,*,#21069,.T.); #29785=ORIENTED_EDGE('',*,*,#21065,.F.); #29786=ORIENTED_EDGE('',*,*,#21070,.F.); #29787=ORIENTED_EDGE('',*,*,#21071,.T.); #29788=ORIENTED_EDGE('',*,*,#21072,.T.); #29789=ORIENTED_EDGE('',*,*,#21068,.F.); #29790=ORIENTED_EDGE('',*,*,#21073,.F.); #29791=ORIENTED_EDGE('',*,*,#21074,.T.); #29792=ORIENTED_EDGE('',*,*,#21075,.T.); #29793=ORIENTED_EDGE('',*,*,#21071,.F.); #29794=ORIENTED_EDGE('',*,*,#21076,.F.); #29795=ORIENTED_EDGE('',*,*,#21077,.T.); #29796=ORIENTED_EDGE('',*,*,#21078,.T.); #29797=ORIENTED_EDGE('',*,*,#21074,.F.); #29798=ORIENTED_EDGE('',*,*,#21079,.F.); #29799=ORIENTED_EDGE('',*,*,#21080,.T.); #29800=ORIENTED_EDGE('',*,*,#21081,.T.); #29801=ORIENTED_EDGE('',*,*,#21077,.F.); #29802=ORIENTED_EDGE('',*,*,#21082,.F.); #29803=ORIENTED_EDGE('',*,*,#21083,.T.); #29804=ORIENTED_EDGE('',*,*,#21084,.T.); #29805=ORIENTED_EDGE('',*,*,#21080,.F.); #29806=ORIENTED_EDGE('',*,*,#21085,.F.); #29807=ORIENTED_EDGE('',*,*,#21086,.T.); #29808=ORIENTED_EDGE('',*,*,#21087,.T.); #29809=ORIENTED_EDGE('',*,*,#21083,.F.); #29810=ORIENTED_EDGE('',*,*,#21088,.F.); #29811=ORIENTED_EDGE('',*,*,#21089,.T.); #29812=ORIENTED_EDGE('',*,*,#21090,.T.); #29813=ORIENTED_EDGE('',*,*,#21086,.F.); #29814=ORIENTED_EDGE('',*,*,#21091,.F.); #29815=ORIENTED_EDGE('',*,*,#21092,.T.); #29816=ORIENTED_EDGE('',*,*,#21093,.T.); #29817=ORIENTED_EDGE('',*,*,#21089,.F.); #29818=ORIENTED_EDGE('',*,*,#21094,.F.); #29819=ORIENTED_EDGE('',*,*,#21095,.T.); #29820=ORIENTED_EDGE('',*,*,#21096,.T.); #29821=ORIENTED_EDGE('',*,*,#21092,.F.); #29822=ORIENTED_EDGE('',*,*,#21097,.F.); #29823=ORIENTED_EDGE('',*,*,#21098,.T.); #29824=ORIENTED_EDGE('',*,*,#21099,.T.); #29825=ORIENTED_EDGE('',*,*,#21095,.F.); #29826=ORIENTED_EDGE('',*,*,#21100,.F.); #29827=ORIENTED_EDGE('',*,*,#21063,.T.); #29828=ORIENTED_EDGE('',*,*,#21101,.T.); #29829=ORIENTED_EDGE('',*,*,#21098,.F.); #29830=ORIENTED_EDGE('',*,*,#21026,.F.); #29831=ORIENTED_EDGE('',*,*,#21102,.T.); #29832=ORIENTED_EDGE('',*,*,#21103,.T.); #29833=ORIENTED_EDGE('',*,*,#21104,.F.); #29834=ORIENTED_EDGE('',*,*,#21045,.F.); #29835=ORIENTED_EDGE('',*,*,#21105,.T.); #29836=ORIENTED_EDGE('',*,*,#21106,.T.); #29837=ORIENTED_EDGE('',*,*,#21102,.F.); #29838=ORIENTED_EDGE('',*,*,#21044,.F.); #29839=ORIENTED_EDGE('',*,*,#21107,.T.); #29840=ORIENTED_EDGE('',*,*,#21108,.T.); #29841=ORIENTED_EDGE('',*,*,#21105,.F.); #29842=ORIENTED_EDGE('',*,*,#21043,.F.); #29843=ORIENTED_EDGE('',*,*,#21109,.T.); #29844=ORIENTED_EDGE('',*,*,#21110,.T.); #29845=ORIENTED_EDGE('',*,*,#21107,.F.); #29846=ORIENTED_EDGE('',*,*,#21042,.F.); #29847=ORIENTED_EDGE('',*,*,#21111,.T.); #29848=ORIENTED_EDGE('',*,*,#21112,.T.); #29849=ORIENTED_EDGE('',*,*,#21109,.F.); #29850=ORIENTED_EDGE('',*,*,#21041,.F.); #29851=ORIENTED_EDGE('',*,*,#21113,.T.); #29852=ORIENTED_EDGE('',*,*,#21114,.T.); #29853=ORIENTED_EDGE('',*,*,#21111,.F.); #29854=ORIENTED_EDGE('',*,*,#21040,.F.); #29855=ORIENTED_EDGE('',*,*,#21115,.T.); #29856=ORIENTED_EDGE('',*,*,#21116,.T.); #29857=ORIENTED_EDGE('',*,*,#21113,.F.); #29858=ORIENTED_EDGE('',*,*,#21039,.F.); #29859=ORIENTED_EDGE('',*,*,#21117,.T.); #29860=ORIENTED_EDGE('',*,*,#21118,.T.); #29861=ORIENTED_EDGE('',*,*,#21115,.F.); #29862=ORIENTED_EDGE('',*,*,#21038,.F.); #29863=ORIENTED_EDGE('',*,*,#21119,.T.); #29864=ORIENTED_EDGE('',*,*,#21120,.T.); #29865=ORIENTED_EDGE('',*,*,#21117,.F.); #29866=ORIENTED_EDGE('',*,*,#21037,.F.); #29867=ORIENTED_EDGE('',*,*,#21121,.T.); #29868=ORIENTED_EDGE('',*,*,#21122,.T.); #29869=ORIENTED_EDGE('',*,*,#21119,.F.); #29870=ORIENTED_EDGE('',*,*,#21036,.F.); #29871=ORIENTED_EDGE('',*,*,#21123,.T.); #29872=ORIENTED_EDGE('',*,*,#21124,.T.); #29873=ORIENTED_EDGE('',*,*,#21121,.F.); #29874=ORIENTED_EDGE('',*,*,#21035,.F.); #29875=ORIENTED_EDGE('',*,*,#21125,.T.); #29876=ORIENTED_EDGE('',*,*,#21126,.T.); #29877=ORIENTED_EDGE('',*,*,#21123,.F.); #29878=ORIENTED_EDGE('',*,*,#21034,.F.); #29879=ORIENTED_EDGE('',*,*,#21127,.T.); #29880=ORIENTED_EDGE('',*,*,#21128,.T.); #29881=ORIENTED_EDGE('',*,*,#21125,.F.); #29882=ORIENTED_EDGE('',*,*,#21033,.F.); #29883=ORIENTED_EDGE('',*,*,#21129,.T.); #29884=ORIENTED_EDGE('',*,*,#21130,.T.); #29885=ORIENTED_EDGE('',*,*,#21127,.F.); #29886=ORIENTED_EDGE('',*,*,#21032,.F.); #29887=ORIENTED_EDGE('',*,*,#21131,.T.); #29888=ORIENTED_EDGE('',*,*,#21132,.T.); #29889=ORIENTED_EDGE('',*,*,#21129,.F.); #29890=ORIENTED_EDGE('',*,*,#21031,.F.); #29891=ORIENTED_EDGE('',*,*,#21133,.T.); #29892=ORIENTED_EDGE('',*,*,#21134,.T.); #29893=ORIENTED_EDGE('',*,*,#21131,.F.); #29894=ORIENTED_EDGE('',*,*,#21030,.F.); #29895=ORIENTED_EDGE('',*,*,#21135,.T.); #29896=ORIENTED_EDGE('',*,*,#21136,.T.); #29897=ORIENTED_EDGE('',*,*,#21133,.F.); #29898=ORIENTED_EDGE('',*,*,#21029,.F.); #29899=ORIENTED_EDGE('',*,*,#21137,.T.); #29900=ORIENTED_EDGE('',*,*,#21138,.T.); #29901=ORIENTED_EDGE('',*,*,#21135,.F.); #29902=ORIENTED_EDGE('',*,*,#21028,.F.); #29903=ORIENTED_EDGE('',*,*,#21139,.T.); #29904=ORIENTED_EDGE('',*,*,#21140,.T.); #29905=ORIENTED_EDGE('',*,*,#21137,.F.); #29906=ORIENTED_EDGE('',*,*,#21027,.F.); #29907=ORIENTED_EDGE('',*,*,#21104,.T.); #29908=ORIENTED_EDGE('',*,*,#21141,.T.); #29909=ORIENTED_EDGE('',*,*,#21139,.F.); #29910=ORIENTED_EDGE('',*,*,#21141,.F.); #29911=ORIENTED_EDGE('',*,*,#21103,.F.); #29912=ORIENTED_EDGE('',*,*,#21106,.F.); #29913=ORIENTED_EDGE('',*,*,#21108,.F.); #29914=ORIENTED_EDGE('',*,*,#21110,.F.); #29915=ORIENTED_EDGE('',*,*,#21112,.F.); #29916=ORIENTED_EDGE('',*,*,#21114,.F.); #29917=ORIENTED_EDGE('',*,*,#21116,.F.); #29918=ORIENTED_EDGE('',*,*,#21118,.F.); #29919=ORIENTED_EDGE('',*,*,#21120,.F.); #29920=ORIENTED_EDGE('',*,*,#21122,.F.); #29921=ORIENTED_EDGE('',*,*,#21124,.F.); #29922=ORIENTED_EDGE('',*,*,#21126,.F.); #29923=ORIENTED_EDGE('',*,*,#21128,.F.); #29924=ORIENTED_EDGE('',*,*,#21130,.F.); #29925=ORIENTED_EDGE('',*,*,#21132,.F.); #29926=ORIENTED_EDGE('',*,*,#21134,.F.); #29927=ORIENTED_EDGE('',*,*,#21136,.F.); #29928=ORIENTED_EDGE('',*,*,#21138,.F.); #29929=ORIENTED_EDGE('',*,*,#21140,.F.); #29930=ORIENTED_EDGE('',*,*,#21101,.F.); #29931=ORIENTED_EDGE('',*,*,#21062,.F.); #29932=ORIENTED_EDGE('',*,*,#21066,.F.); #29933=ORIENTED_EDGE('',*,*,#21069,.F.); #29934=ORIENTED_EDGE('',*,*,#21072,.F.); #29935=ORIENTED_EDGE('',*,*,#21075,.F.); #29936=ORIENTED_EDGE('',*,*,#21078,.F.); #29937=ORIENTED_EDGE('',*,*,#21081,.F.); #29938=ORIENTED_EDGE('',*,*,#21084,.F.); #29939=ORIENTED_EDGE('',*,*,#21087,.F.); #29940=ORIENTED_EDGE('',*,*,#21090,.F.); #29941=ORIENTED_EDGE('',*,*,#21093,.F.); #29942=ORIENTED_EDGE('',*,*,#21096,.F.); #29943=ORIENTED_EDGE('',*,*,#21099,.F.); #29944=ORIENTED_EDGE('',*,*,#21142,.F.); #29945=ORIENTED_EDGE('',*,*,#21143,.T.); #29946=ORIENTED_EDGE('',*,*,#21144,.T.); #29947=ORIENTED_EDGE('',*,*,#21145,.F.); #29948=ORIENTED_EDGE('',*,*,#21146,.F.); #29949=ORIENTED_EDGE('',*,*,#21147,.T.); #29950=ORIENTED_EDGE('',*,*,#21148,.T.); #29951=ORIENTED_EDGE('',*,*,#21143,.F.); #29952=ORIENTED_EDGE('',*,*,#21149,.F.); #29953=ORIENTED_EDGE('',*,*,#21150,.T.); #29954=ORIENTED_EDGE('',*,*,#21151,.T.); #29955=ORIENTED_EDGE('',*,*,#21147,.F.); #29956=ORIENTED_EDGE('',*,*,#21152,.F.); #29957=ORIENTED_EDGE('',*,*,#21145,.T.); #29958=ORIENTED_EDGE('',*,*,#21153,.T.); #29959=ORIENTED_EDGE('',*,*,#21150,.F.); #29960=ORIENTED_EDGE('',*,*,#21154,.F.); #29961=ORIENTED_EDGE('',*,*,#21155,.T.); #29962=ORIENTED_EDGE('',*,*,#21156,.T.); #29963=ORIENTED_EDGE('',*,*,#21157,.F.); #29964=ORIENTED_EDGE('',*,*,#21158,.F.); #29965=ORIENTED_EDGE('',*,*,#21159,.T.); #29966=ORIENTED_EDGE('',*,*,#21160,.T.); #29967=ORIENTED_EDGE('',*,*,#21155,.F.); #29968=ORIENTED_EDGE('',*,*,#21161,.F.); #29969=ORIENTED_EDGE('',*,*,#21162,.T.); #29970=ORIENTED_EDGE('',*,*,#21163,.T.); #29971=ORIENTED_EDGE('',*,*,#21159,.F.); #29972=ORIENTED_EDGE('',*,*,#21164,.F.); #29973=ORIENTED_EDGE('',*,*,#21157,.T.); #29974=ORIENTED_EDGE('',*,*,#21165,.T.); #29975=ORIENTED_EDGE('',*,*,#21162,.F.); #29976=ORIENTED_EDGE('',*,*,#21165,.F.); #29977=ORIENTED_EDGE('',*,*,#21156,.F.); #29978=ORIENTED_EDGE('',*,*,#21160,.F.); #29979=ORIENTED_EDGE('',*,*,#21163,.F.); #29980=ORIENTED_EDGE('',*,*,#21153,.F.); #29981=ORIENTED_EDGE('',*,*,#21144,.F.); #29982=ORIENTED_EDGE('',*,*,#21148,.F.); #29983=ORIENTED_EDGE('',*,*,#21151,.F.); #29984=ORIENTED_EDGE('',*,*,#21166,.F.); #29985=ORIENTED_EDGE('',*,*,#21167,.T.); #29986=ORIENTED_EDGE('',*,*,#21168,.T.); #29987=ORIENTED_EDGE('',*,*,#21169,.F.); #29988=ORIENTED_EDGE('',*,*,#21170,.F.); #29989=ORIENTED_EDGE('',*,*,#21171,.T.); #29990=ORIENTED_EDGE('',*,*,#21172,.T.); #29991=ORIENTED_EDGE('',*,*,#21167,.F.); #29992=ORIENTED_EDGE('',*,*,#21173,.F.); #29993=ORIENTED_EDGE('',*,*,#21174,.T.); #29994=ORIENTED_EDGE('',*,*,#21175,.T.); #29995=ORIENTED_EDGE('',*,*,#21171,.F.); #29996=ORIENTED_EDGE('',*,*,#21176,.F.); #29997=ORIENTED_EDGE('',*,*,#21177,.T.); #29998=ORIENTED_EDGE('',*,*,#21178,.T.); #29999=ORIENTED_EDGE('',*,*,#21174,.F.); #30000=ORIENTED_EDGE('',*,*,#21179,.F.); #30001=ORIENTED_EDGE('',*,*,#21180,.T.); #30002=ORIENTED_EDGE('',*,*,#21181,.T.); #30003=ORIENTED_EDGE('',*,*,#21177,.F.); #30004=ORIENTED_EDGE('',*,*,#21182,.F.); #30005=ORIENTED_EDGE('',*,*,#21183,.T.); #30006=ORIENTED_EDGE('',*,*,#21184,.T.); #30007=ORIENTED_EDGE('',*,*,#21180,.F.); #30008=ORIENTED_EDGE('',*,*,#21185,.F.); #30009=ORIENTED_EDGE('',*,*,#21186,.T.); #30010=ORIENTED_EDGE('',*,*,#21187,.T.); #30011=ORIENTED_EDGE('',*,*,#21183,.F.); #30012=ORIENTED_EDGE('',*,*,#21188,.F.); #30013=ORIENTED_EDGE('',*,*,#21169,.T.); #30014=ORIENTED_EDGE('',*,*,#21189,.T.); #30015=ORIENTED_EDGE('',*,*,#21186,.F.); #30016=ORIENTED_EDGE('',*,*,#21190,.F.); #30017=ORIENTED_EDGE('',*,*,#21191,.T.); #30018=ORIENTED_EDGE('',*,*,#21192,.T.); #30019=ORIENTED_EDGE('',*,*,#21193,.F.); #30020=ORIENTED_EDGE('',*,*,#21194,.F.); #30021=ORIENTED_EDGE('',*,*,#21195,.T.); #30022=ORIENTED_EDGE('',*,*,#21196,.T.); #30023=ORIENTED_EDGE('',*,*,#21191,.F.); #30024=ORIENTED_EDGE('',*,*,#21197,.F.); #30025=ORIENTED_EDGE('',*,*,#21198,.T.); #30026=ORIENTED_EDGE('',*,*,#21199,.T.); #30027=ORIENTED_EDGE('',*,*,#21195,.F.); #30028=ORIENTED_EDGE('',*,*,#21200,.F.); #30029=ORIENTED_EDGE('',*,*,#21201,.T.); #30030=ORIENTED_EDGE('',*,*,#21202,.T.); #30031=ORIENTED_EDGE('',*,*,#21198,.F.); #30032=ORIENTED_EDGE('',*,*,#21203,.F.); #30033=ORIENTED_EDGE('',*,*,#21204,.T.); #30034=ORIENTED_EDGE('',*,*,#21205,.T.); #30035=ORIENTED_EDGE('',*,*,#21201,.F.); #30036=ORIENTED_EDGE('',*,*,#21206,.F.); #30037=ORIENTED_EDGE('',*,*,#21207,.T.); #30038=ORIENTED_EDGE('',*,*,#21208,.T.); #30039=ORIENTED_EDGE('',*,*,#21204,.F.); #30040=ORIENTED_EDGE('',*,*,#21209,.F.); #30041=ORIENTED_EDGE('',*,*,#21210,.T.); #30042=ORIENTED_EDGE('',*,*,#21211,.T.); #30043=ORIENTED_EDGE('',*,*,#21207,.F.); #30044=ORIENTED_EDGE('',*,*,#21212,.F.); #30045=ORIENTED_EDGE('',*,*,#21193,.T.); #30046=ORIENTED_EDGE('',*,*,#21213,.T.); #30047=ORIENTED_EDGE('',*,*,#21210,.F.); #30048=ORIENTED_EDGE('',*,*,#21214,.F.); #30049=ORIENTED_EDGE('',*,*,#21215,.T.); #30050=ORIENTED_EDGE('',*,*,#21216,.T.); #30051=ORIENTED_EDGE('',*,*,#21217,.F.); #30052=ORIENTED_EDGE('',*,*,#21218,.F.); #30053=ORIENTED_EDGE('',*,*,#21219,.T.); #30054=ORIENTED_EDGE('',*,*,#21220,.T.); #30055=ORIENTED_EDGE('',*,*,#21215,.F.); #30056=ORIENTED_EDGE('',*,*,#21221,.F.); #30057=ORIENTED_EDGE('',*,*,#21222,.T.); #30058=ORIENTED_EDGE('',*,*,#21223,.T.); #30059=ORIENTED_EDGE('',*,*,#21219,.F.); #30060=ORIENTED_EDGE('',*,*,#21224,.F.); #30061=ORIENTED_EDGE('',*,*,#21225,.T.); #30062=ORIENTED_EDGE('',*,*,#21226,.T.); #30063=ORIENTED_EDGE('',*,*,#21222,.F.); #30064=ORIENTED_EDGE('',*,*,#21227,.F.); #30065=ORIENTED_EDGE('',*,*,#21228,.T.); #30066=ORIENTED_EDGE('',*,*,#21229,.T.); #30067=ORIENTED_EDGE('',*,*,#21225,.F.); #30068=ORIENTED_EDGE('',*,*,#21230,.F.); #30069=ORIENTED_EDGE('',*,*,#21231,.T.); #30070=ORIENTED_EDGE('',*,*,#21232,.T.); #30071=ORIENTED_EDGE('',*,*,#21228,.F.); #30072=ORIENTED_EDGE('',*,*,#21233,.F.); #30073=ORIENTED_EDGE('',*,*,#21234,.T.); #30074=ORIENTED_EDGE('',*,*,#21235,.T.); #30075=ORIENTED_EDGE('',*,*,#21231,.F.); #30076=ORIENTED_EDGE('',*,*,#21236,.F.); #30077=ORIENTED_EDGE('',*,*,#21217,.T.); #30078=ORIENTED_EDGE('',*,*,#21237,.T.); #30079=ORIENTED_EDGE('',*,*,#21234,.F.); #30080=ORIENTED_EDGE('',*,*,#21238,.F.); #30081=ORIENTED_EDGE('',*,*,#21239,.T.); #30082=ORIENTED_EDGE('',*,*,#21240,.T.); #30083=ORIENTED_EDGE('',*,*,#21241,.F.); #30084=ORIENTED_EDGE('',*,*,#21242,.F.); #30085=ORIENTED_EDGE('',*,*,#21243,.T.); #30086=ORIENTED_EDGE('',*,*,#21244,.T.); #30087=ORIENTED_EDGE('',*,*,#21239,.F.); #30088=ORIENTED_EDGE('',*,*,#21245,.F.); #30089=ORIENTED_EDGE('',*,*,#21246,.T.); #30090=ORIENTED_EDGE('',*,*,#21247,.T.); #30091=ORIENTED_EDGE('',*,*,#21243,.F.); #30092=ORIENTED_EDGE('',*,*,#21248,.F.); #30093=ORIENTED_EDGE('',*,*,#21249,.T.); #30094=ORIENTED_EDGE('',*,*,#21250,.T.); #30095=ORIENTED_EDGE('',*,*,#21246,.F.); #30096=ORIENTED_EDGE('',*,*,#21251,.F.); #30097=ORIENTED_EDGE('',*,*,#21252,.T.); #30098=ORIENTED_EDGE('',*,*,#21253,.T.); #30099=ORIENTED_EDGE('',*,*,#21249,.F.); #30100=ORIENTED_EDGE('',*,*,#21254,.F.); #30101=ORIENTED_EDGE('',*,*,#21255,.T.); #30102=ORIENTED_EDGE('',*,*,#21256,.T.); #30103=ORIENTED_EDGE('',*,*,#21252,.F.); #30104=ORIENTED_EDGE('',*,*,#21257,.F.); #30105=ORIENTED_EDGE('',*,*,#21258,.T.); #30106=ORIENTED_EDGE('',*,*,#21259,.T.); #30107=ORIENTED_EDGE('',*,*,#21255,.F.); #30108=ORIENTED_EDGE('',*,*,#21260,.F.); #30109=ORIENTED_EDGE('',*,*,#21241,.T.); #30110=ORIENTED_EDGE('',*,*,#21261,.T.); #30111=ORIENTED_EDGE('',*,*,#21258,.F.); #30112=ORIENTED_EDGE('',*,*,#21262,.F.); #30113=ORIENTED_EDGE('',*,*,#21263,.T.); #30114=ORIENTED_EDGE('',*,*,#21264,.T.); #30115=ORIENTED_EDGE('',*,*,#21265,.F.); #30116=ORIENTED_EDGE('',*,*,#21266,.F.); #30117=ORIENTED_EDGE('',*,*,#21267,.T.); #30118=ORIENTED_EDGE('',*,*,#21268,.T.); #30119=ORIENTED_EDGE('',*,*,#21263,.F.); #30120=ORIENTED_EDGE('',*,*,#21269,.F.); #30121=ORIENTED_EDGE('',*,*,#21270,.T.); #30122=ORIENTED_EDGE('',*,*,#21271,.T.); #30123=ORIENTED_EDGE('',*,*,#21267,.F.); #30124=ORIENTED_EDGE('',*,*,#21272,.F.); #30125=ORIENTED_EDGE('',*,*,#21273,.T.); #30126=ORIENTED_EDGE('',*,*,#21274,.T.); #30127=ORIENTED_EDGE('',*,*,#21270,.F.); #30128=ORIENTED_EDGE('',*,*,#21275,.F.); #30129=ORIENTED_EDGE('',*,*,#21276,.T.); #30130=ORIENTED_EDGE('',*,*,#21277,.T.); #30131=ORIENTED_EDGE('',*,*,#21273,.F.); #30132=ORIENTED_EDGE('',*,*,#21278,.F.); #30133=ORIENTED_EDGE('',*,*,#21279,.T.); #30134=ORIENTED_EDGE('',*,*,#21280,.T.); #30135=ORIENTED_EDGE('',*,*,#21276,.F.); #30136=ORIENTED_EDGE('',*,*,#21281,.F.); #30137=ORIENTED_EDGE('',*,*,#21282,.T.); #30138=ORIENTED_EDGE('',*,*,#21283,.T.); #30139=ORIENTED_EDGE('',*,*,#21279,.F.); #30140=ORIENTED_EDGE('',*,*,#21284,.F.); #30141=ORIENTED_EDGE('',*,*,#21265,.T.); #30142=ORIENTED_EDGE('',*,*,#21285,.T.); #30143=ORIENTED_EDGE('',*,*,#21282,.F.); #30144=ORIENTED_EDGE('',*,*,#21286,.F.); #30145=ORIENTED_EDGE('',*,*,#21287,.T.); #30146=ORIENTED_EDGE('',*,*,#21288,.T.); #30147=ORIENTED_EDGE('',*,*,#21289,.F.); #30148=ORIENTED_EDGE('',*,*,#21290,.F.); #30149=ORIENTED_EDGE('',*,*,#21291,.T.); #30150=ORIENTED_EDGE('',*,*,#21292,.T.); #30151=ORIENTED_EDGE('',*,*,#21287,.F.); #30152=ORIENTED_EDGE('',*,*,#21293,.F.); #30153=ORIENTED_EDGE('',*,*,#21294,.T.); #30154=ORIENTED_EDGE('',*,*,#21295,.T.); #30155=ORIENTED_EDGE('',*,*,#21291,.F.); #30156=ORIENTED_EDGE('',*,*,#21296,.F.); #30157=ORIENTED_EDGE('',*,*,#21297,.T.); #30158=ORIENTED_EDGE('',*,*,#21298,.T.); #30159=ORIENTED_EDGE('',*,*,#21294,.F.); #30160=ORIENTED_EDGE('',*,*,#21299,.F.); #30161=ORIENTED_EDGE('',*,*,#21300,.T.); #30162=ORIENTED_EDGE('',*,*,#21301,.T.); #30163=ORIENTED_EDGE('',*,*,#21297,.F.); #30164=ORIENTED_EDGE('',*,*,#21302,.F.); #30165=ORIENTED_EDGE('',*,*,#21303,.T.); #30166=ORIENTED_EDGE('',*,*,#21304,.T.); #30167=ORIENTED_EDGE('',*,*,#21300,.F.); #30168=ORIENTED_EDGE('',*,*,#21305,.F.); #30169=ORIENTED_EDGE('',*,*,#21306,.T.); #30170=ORIENTED_EDGE('',*,*,#21307,.T.); #30171=ORIENTED_EDGE('',*,*,#21303,.F.); #30172=ORIENTED_EDGE('',*,*,#21308,.F.); #30173=ORIENTED_EDGE('',*,*,#21289,.T.); #30174=ORIENTED_EDGE('',*,*,#21309,.T.); #30175=ORIENTED_EDGE('',*,*,#21306,.F.); #30176=ORIENTED_EDGE('',*,*,#21310,.F.); #30177=ORIENTED_EDGE('',*,*,#21311,.T.); #30178=ORIENTED_EDGE('',*,*,#21312,.T.); #30179=ORIENTED_EDGE('',*,*,#21313,.F.); #30180=ORIENTED_EDGE('',*,*,#21314,.F.); #30181=ORIENTED_EDGE('',*,*,#21315,.T.); #30182=ORIENTED_EDGE('',*,*,#21316,.T.); #30183=ORIENTED_EDGE('',*,*,#21311,.F.); #30184=ORIENTED_EDGE('',*,*,#21317,.F.); #30185=ORIENTED_EDGE('',*,*,#21318,.T.); #30186=ORIENTED_EDGE('',*,*,#21319,.T.); #30187=ORIENTED_EDGE('',*,*,#21315,.F.); #30188=ORIENTED_EDGE('',*,*,#21320,.F.); #30189=ORIENTED_EDGE('',*,*,#21321,.T.); #30190=ORIENTED_EDGE('',*,*,#21322,.T.); #30191=ORIENTED_EDGE('',*,*,#21318,.F.); #30192=ORIENTED_EDGE('',*,*,#21323,.F.); #30193=ORIENTED_EDGE('',*,*,#21324,.T.); #30194=ORIENTED_EDGE('',*,*,#21325,.T.); #30195=ORIENTED_EDGE('',*,*,#21321,.F.); #30196=ORIENTED_EDGE('',*,*,#21326,.F.); #30197=ORIENTED_EDGE('',*,*,#21327,.T.); #30198=ORIENTED_EDGE('',*,*,#21328,.T.); #30199=ORIENTED_EDGE('',*,*,#21324,.F.); #30200=ORIENTED_EDGE('',*,*,#21329,.F.); #30201=ORIENTED_EDGE('',*,*,#21330,.T.); #30202=ORIENTED_EDGE('',*,*,#21331,.T.); #30203=ORIENTED_EDGE('',*,*,#21327,.F.); #30204=ORIENTED_EDGE('',*,*,#21332,.F.); #30205=ORIENTED_EDGE('',*,*,#21313,.T.); #30206=ORIENTED_EDGE('',*,*,#21333,.T.); #30207=ORIENTED_EDGE('',*,*,#21330,.F.); #30208=ORIENTED_EDGE('',*,*,#21334,.F.); #30209=ORIENTED_EDGE('',*,*,#21335,.T.); #30210=ORIENTED_EDGE('',*,*,#21336,.T.); #30211=ORIENTED_EDGE('',*,*,#21337,.F.); #30212=ORIENTED_EDGE('',*,*,#21338,.F.); #30213=ORIENTED_EDGE('',*,*,#21339,.T.); #30214=ORIENTED_EDGE('',*,*,#21340,.T.); #30215=ORIENTED_EDGE('',*,*,#21335,.F.); #30216=ORIENTED_EDGE('',*,*,#21341,.F.); #30217=ORIENTED_EDGE('',*,*,#21342,.T.); #30218=ORIENTED_EDGE('',*,*,#21343,.T.); #30219=ORIENTED_EDGE('',*,*,#21339,.F.); #30220=ORIENTED_EDGE('',*,*,#21344,.F.); #30221=ORIENTED_EDGE('',*,*,#21345,.T.); #30222=ORIENTED_EDGE('',*,*,#21346,.T.); #30223=ORIENTED_EDGE('',*,*,#21342,.F.); #30224=ORIENTED_EDGE('',*,*,#21347,.F.); #30225=ORIENTED_EDGE('',*,*,#21348,.T.); #30226=ORIENTED_EDGE('',*,*,#21349,.T.); #30227=ORIENTED_EDGE('',*,*,#21345,.F.); #30228=ORIENTED_EDGE('',*,*,#21350,.F.); #30229=ORIENTED_EDGE('',*,*,#21351,.T.); #30230=ORIENTED_EDGE('',*,*,#21352,.T.); #30231=ORIENTED_EDGE('',*,*,#21348,.F.); #30232=ORIENTED_EDGE('',*,*,#21353,.F.); #30233=ORIENTED_EDGE('',*,*,#21354,.T.); #30234=ORIENTED_EDGE('',*,*,#21355,.T.); #30235=ORIENTED_EDGE('',*,*,#21351,.F.); #30236=ORIENTED_EDGE('',*,*,#21356,.F.); #30237=ORIENTED_EDGE('',*,*,#21337,.T.); #30238=ORIENTED_EDGE('',*,*,#21357,.T.); #30239=ORIENTED_EDGE('',*,*,#21354,.F.); #30240=ORIENTED_EDGE('',*,*,#21358,.F.); #30241=ORIENTED_EDGE('',*,*,#21359,.T.); #30242=ORIENTED_EDGE('',*,*,#21360,.T.); #30243=ORIENTED_EDGE('',*,*,#21361,.F.); #30244=ORIENTED_EDGE('',*,*,#21362,.F.); #30245=ORIENTED_EDGE('',*,*,#21363,.T.); #30246=ORIENTED_EDGE('',*,*,#21364,.T.); #30247=ORIENTED_EDGE('',*,*,#21359,.F.); #30248=ORIENTED_EDGE('',*,*,#21365,.F.); #30249=ORIENTED_EDGE('',*,*,#21366,.T.); #30250=ORIENTED_EDGE('',*,*,#21367,.T.); #30251=ORIENTED_EDGE('',*,*,#21363,.F.); #30252=ORIENTED_EDGE('',*,*,#21368,.F.); #30253=ORIENTED_EDGE('',*,*,#21369,.T.); #30254=ORIENTED_EDGE('',*,*,#21370,.T.); #30255=ORIENTED_EDGE('',*,*,#21366,.F.); #30256=ORIENTED_EDGE('',*,*,#21371,.F.); #30257=ORIENTED_EDGE('',*,*,#21372,.T.); #30258=ORIENTED_EDGE('',*,*,#21373,.T.); #30259=ORIENTED_EDGE('',*,*,#21369,.F.); #30260=ORIENTED_EDGE('',*,*,#21374,.F.); #30261=ORIENTED_EDGE('',*,*,#21375,.T.); #30262=ORIENTED_EDGE('',*,*,#21376,.T.); #30263=ORIENTED_EDGE('',*,*,#21372,.F.); #30264=ORIENTED_EDGE('',*,*,#21377,.F.); #30265=ORIENTED_EDGE('',*,*,#21378,.T.); #30266=ORIENTED_EDGE('',*,*,#21379,.T.); #30267=ORIENTED_EDGE('',*,*,#21375,.F.); #30268=ORIENTED_EDGE('',*,*,#21380,.F.); #30269=ORIENTED_EDGE('',*,*,#21361,.T.); #30270=ORIENTED_EDGE('',*,*,#21381,.T.); #30271=ORIENTED_EDGE('',*,*,#21378,.F.); #30272=ORIENTED_EDGE('',*,*,#21382,.F.); #30273=ORIENTED_EDGE('',*,*,#21383,.T.); #30274=ORIENTED_EDGE('',*,*,#21384,.T.); #30275=ORIENTED_EDGE('',*,*,#21385,.F.); #30276=ORIENTED_EDGE('',*,*,#21386,.F.); #30277=ORIENTED_EDGE('',*,*,#21387,.T.); #30278=ORIENTED_EDGE('',*,*,#21388,.T.); #30279=ORIENTED_EDGE('',*,*,#21383,.F.); #30280=ORIENTED_EDGE('',*,*,#21389,.F.); #30281=ORIENTED_EDGE('',*,*,#21390,.T.); #30282=ORIENTED_EDGE('',*,*,#21391,.T.); #30283=ORIENTED_EDGE('',*,*,#21387,.F.); #30284=ORIENTED_EDGE('',*,*,#21392,.F.); #30285=ORIENTED_EDGE('',*,*,#21393,.T.); #30286=ORIENTED_EDGE('',*,*,#21394,.T.); #30287=ORIENTED_EDGE('',*,*,#21390,.F.); #30288=ORIENTED_EDGE('',*,*,#21395,.F.); #30289=ORIENTED_EDGE('',*,*,#21396,.T.); #30290=ORIENTED_EDGE('',*,*,#21397,.T.); #30291=ORIENTED_EDGE('',*,*,#21393,.F.); #30292=ORIENTED_EDGE('',*,*,#21398,.F.); #30293=ORIENTED_EDGE('',*,*,#21399,.T.); #30294=ORIENTED_EDGE('',*,*,#21400,.T.); #30295=ORIENTED_EDGE('',*,*,#21396,.F.); #30296=ORIENTED_EDGE('',*,*,#21401,.F.); #30297=ORIENTED_EDGE('',*,*,#21402,.T.); #30298=ORIENTED_EDGE('',*,*,#21403,.T.); #30299=ORIENTED_EDGE('',*,*,#21399,.F.); #30300=ORIENTED_EDGE('',*,*,#21404,.F.); #30301=ORIENTED_EDGE('',*,*,#21385,.T.); #30302=ORIENTED_EDGE('',*,*,#21405,.T.); #30303=ORIENTED_EDGE('',*,*,#21402,.F.); #30304=ORIENTED_EDGE('',*,*,#21406,.F.); #30305=ORIENTED_EDGE('',*,*,#21407,.T.); #30306=ORIENTED_EDGE('',*,*,#21408,.T.); #30307=ORIENTED_EDGE('',*,*,#21409,.F.); #30308=ORIENTED_EDGE('',*,*,#21410,.F.); #30309=ORIENTED_EDGE('',*,*,#21411,.T.); #30310=ORIENTED_EDGE('',*,*,#21412,.T.); #30311=ORIENTED_EDGE('',*,*,#21407,.F.); #30312=ORIENTED_EDGE('',*,*,#21413,.F.); #30313=ORIENTED_EDGE('',*,*,#21414,.T.); #30314=ORIENTED_EDGE('',*,*,#21415,.T.); #30315=ORIENTED_EDGE('',*,*,#21411,.F.); #30316=ORIENTED_EDGE('',*,*,#21416,.F.); #30317=ORIENTED_EDGE('',*,*,#21417,.T.); #30318=ORIENTED_EDGE('',*,*,#21418,.T.); #30319=ORIENTED_EDGE('',*,*,#21414,.F.); #30320=ORIENTED_EDGE('',*,*,#21419,.F.); #30321=ORIENTED_EDGE('',*,*,#21420,.T.); #30322=ORIENTED_EDGE('',*,*,#21421,.T.); #30323=ORIENTED_EDGE('',*,*,#21417,.F.); #30324=ORIENTED_EDGE('',*,*,#21422,.F.); #30325=ORIENTED_EDGE('',*,*,#21423,.T.); #30326=ORIENTED_EDGE('',*,*,#21424,.T.); #30327=ORIENTED_EDGE('',*,*,#21420,.F.); #30328=ORIENTED_EDGE('',*,*,#21425,.F.); #30329=ORIENTED_EDGE('',*,*,#21426,.T.); #30330=ORIENTED_EDGE('',*,*,#21427,.T.); #30331=ORIENTED_EDGE('',*,*,#21423,.F.); #30332=ORIENTED_EDGE('',*,*,#21428,.F.); #30333=ORIENTED_EDGE('',*,*,#21409,.T.); #30334=ORIENTED_EDGE('',*,*,#21429,.T.); #30335=ORIENTED_EDGE('',*,*,#21426,.F.); #30336=ORIENTED_EDGE('',*,*,#21430,.F.); #30337=ORIENTED_EDGE('',*,*,#21431,.T.); #30338=ORIENTED_EDGE('',*,*,#21432,.T.); #30339=ORIENTED_EDGE('',*,*,#21433,.F.); #30340=ORIENTED_EDGE('',*,*,#21434,.F.); #30341=ORIENTED_EDGE('',*,*,#21435,.T.); #30342=ORIENTED_EDGE('',*,*,#21436,.T.); #30343=ORIENTED_EDGE('',*,*,#21431,.F.); #30344=ORIENTED_EDGE('',*,*,#21437,.F.); #30345=ORIENTED_EDGE('',*,*,#21438,.T.); #30346=ORIENTED_EDGE('',*,*,#21439,.T.); #30347=ORIENTED_EDGE('',*,*,#21435,.F.); #30348=ORIENTED_EDGE('',*,*,#21440,.F.); #30349=ORIENTED_EDGE('',*,*,#21441,.T.); #30350=ORIENTED_EDGE('',*,*,#21442,.T.); #30351=ORIENTED_EDGE('',*,*,#21438,.F.); #30352=ORIENTED_EDGE('',*,*,#21443,.F.); #30353=ORIENTED_EDGE('',*,*,#21444,.T.); #30354=ORIENTED_EDGE('',*,*,#21445,.T.); #30355=ORIENTED_EDGE('',*,*,#21441,.F.); #30356=ORIENTED_EDGE('',*,*,#21446,.F.); #30357=ORIENTED_EDGE('',*,*,#21447,.T.); #30358=ORIENTED_EDGE('',*,*,#21448,.T.); #30359=ORIENTED_EDGE('',*,*,#21444,.F.); #30360=ORIENTED_EDGE('',*,*,#21449,.F.); #30361=ORIENTED_EDGE('',*,*,#21450,.T.); #30362=ORIENTED_EDGE('',*,*,#21451,.T.); #30363=ORIENTED_EDGE('',*,*,#21447,.F.); #30364=ORIENTED_EDGE('',*,*,#21452,.F.); #30365=ORIENTED_EDGE('',*,*,#21433,.T.); #30366=ORIENTED_EDGE('',*,*,#21453,.T.); #30367=ORIENTED_EDGE('',*,*,#21450,.F.); #30368=ORIENTED_EDGE('',*,*,#21454,.F.); #30369=ORIENTED_EDGE('',*,*,#21455,.T.); #30370=ORIENTED_EDGE('',*,*,#21456,.T.); #30371=ORIENTED_EDGE('',*,*,#21457,.F.); #30372=ORIENTED_EDGE('',*,*,#21458,.F.); #30373=ORIENTED_EDGE('',*,*,#21459,.T.); #30374=ORIENTED_EDGE('',*,*,#21460,.T.); #30375=ORIENTED_EDGE('',*,*,#21455,.F.); #30376=ORIENTED_EDGE('',*,*,#21461,.F.); #30377=ORIENTED_EDGE('',*,*,#21462,.T.); #30378=ORIENTED_EDGE('',*,*,#21463,.T.); #30379=ORIENTED_EDGE('',*,*,#21459,.F.); #30380=ORIENTED_EDGE('',*,*,#21464,.F.); #30381=ORIENTED_EDGE('',*,*,#21465,.T.); #30382=ORIENTED_EDGE('',*,*,#21466,.T.); #30383=ORIENTED_EDGE('',*,*,#21462,.F.); #30384=ORIENTED_EDGE('',*,*,#21467,.F.); #30385=ORIENTED_EDGE('',*,*,#21468,.T.); #30386=ORIENTED_EDGE('',*,*,#21469,.T.); #30387=ORIENTED_EDGE('',*,*,#21465,.F.); #30388=ORIENTED_EDGE('',*,*,#21470,.F.); #30389=ORIENTED_EDGE('',*,*,#21471,.T.); #30390=ORIENTED_EDGE('',*,*,#21472,.T.); #30391=ORIENTED_EDGE('',*,*,#21468,.F.); #30392=ORIENTED_EDGE('',*,*,#21473,.F.); #30393=ORIENTED_EDGE('',*,*,#21474,.T.); #30394=ORIENTED_EDGE('',*,*,#21475,.T.); #30395=ORIENTED_EDGE('',*,*,#21471,.F.); #30396=ORIENTED_EDGE('',*,*,#21476,.F.); #30397=ORIENTED_EDGE('',*,*,#21457,.T.); #30398=ORIENTED_EDGE('',*,*,#21477,.T.); #30399=ORIENTED_EDGE('',*,*,#21474,.F.); #30400=ORIENTED_EDGE('',*,*,#21478,.F.); #30401=ORIENTED_EDGE('',*,*,#21479,.T.); #30402=ORIENTED_EDGE('',*,*,#21480,.T.); #30403=ORIENTED_EDGE('',*,*,#21481,.F.); #30404=ORIENTED_EDGE('',*,*,#21482,.F.); #30405=ORIENTED_EDGE('',*,*,#21483,.T.); #30406=ORIENTED_EDGE('',*,*,#21484,.T.); #30407=ORIENTED_EDGE('',*,*,#21479,.F.); #30408=ORIENTED_EDGE('',*,*,#21485,.F.); #30409=ORIENTED_EDGE('',*,*,#21486,.T.); #30410=ORIENTED_EDGE('',*,*,#21487,.T.); #30411=ORIENTED_EDGE('',*,*,#21483,.F.); #30412=ORIENTED_EDGE('',*,*,#21488,.F.); #30413=ORIENTED_EDGE('',*,*,#21489,.T.); #30414=ORIENTED_EDGE('',*,*,#21490,.T.); #30415=ORIENTED_EDGE('',*,*,#21486,.F.); #30416=ORIENTED_EDGE('',*,*,#21491,.F.); #30417=ORIENTED_EDGE('',*,*,#21492,.T.); #30418=ORIENTED_EDGE('',*,*,#21493,.T.); #30419=ORIENTED_EDGE('',*,*,#21489,.F.); #30420=ORIENTED_EDGE('',*,*,#21494,.F.); #30421=ORIENTED_EDGE('',*,*,#21495,.T.); #30422=ORIENTED_EDGE('',*,*,#21496,.T.); #30423=ORIENTED_EDGE('',*,*,#21492,.F.); #30424=ORIENTED_EDGE('',*,*,#21497,.F.); #30425=ORIENTED_EDGE('',*,*,#21498,.T.); #30426=ORIENTED_EDGE('',*,*,#21499,.T.); #30427=ORIENTED_EDGE('',*,*,#21495,.F.); #30428=ORIENTED_EDGE('',*,*,#21500,.F.); #30429=ORIENTED_EDGE('',*,*,#21481,.T.); #30430=ORIENTED_EDGE('',*,*,#21501,.T.); #30431=ORIENTED_EDGE('',*,*,#21498,.F.); #30432=ORIENTED_EDGE('',*,*,#21502,.F.); #30433=ORIENTED_EDGE('',*,*,#21503,.T.); #30434=ORIENTED_EDGE('',*,*,#21504,.T.); #30435=ORIENTED_EDGE('',*,*,#21505,.F.); #30436=ORIENTED_EDGE('',*,*,#21506,.F.); #30437=ORIENTED_EDGE('',*,*,#21507,.T.); #30438=ORIENTED_EDGE('',*,*,#21508,.T.); #30439=ORIENTED_EDGE('',*,*,#21503,.F.); #30440=ORIENTED_EDGE('',*,*,#21509,.F.); #30441=ORIENTED_EDGE('',*,*,#21510,.T.); #30442=ORIENTED_EDGE('',*,*,#21511,.T.); #30443=ORIENTED_EDGE('',*,*,#21507,.F.); #30444=ORIENTED_EDGE('',*,*,#21512,.F.); #30445=ORIENTED_EDGE('',*,*,#21513,.T.); #30446=ORIENTED_EDGE('',*,*,#21514,.T.); #30447=ORIENTED_EDGE('',*,*,#21510,.F.); #30448=ORIENTED_EDGE('',*,*,#21515,.F.); #30449=ORIENTED_EDGE('',*,*,#21516,.T.); #30450=ORIENTED_EDGE('',*,*,#21517,.T.); #30451=ORIENTED_EDGE('',*,*,#21513,.F.); #30452=ORIENTED_EDGE('',*,*,#21518,.F.); #30453=ORIENTED_EDGE('',*,*,#21519,.T.); #30454=ORIENTED_EDGE('',*,*,#21520,.T.); #30455=ORIENTED_EDGE('',*,*,#21516,.F.); #30456=ORIENTED_EDGE('',*,*,#21521,.F.); #30457=ORIENTED_EDGE('',*,*,#21522,.T.); #30458=ORIENTED_EDGE('',*,*,#21523,.T.); #30459=ORIENTED_EDGE('',*,*,#21519,.F.); #30460=ORIENTED_EDGE('',*,*,#21524,.F.); #30461=ORIENTED_EDGE('',*,*,#21505,.T.); #30462=ORIENTED_EDGE('',*,*,#21525,.T.); #30463=ORIENTED_EDGE('',*,*,#21522,.F.); #30464=ORIENTED_EDGE('',*,*,#21526,.F.); #30465=ORIENTED_EDGE('',*,*,#21527,.T.); #30466=ORIENTED_EDGE('',*,*,#21528,.T.); #30467=ORIENTED_EDGE('',*,*,#21529,.F.); #30468=ORIENTED_EDGE('',*,*,#21530,.F.); #30469=ORIENTED_EDGE('',*,*,#21531,.T.); #30470=ORIENTED_EDGE('',*,*,#21532,.T.); #30471=ORIENTED_EDGE('',*,*,#21527,.F.); #30472=ORIENTED_EDGE('',*,*,#21533,.F.); #30473=ORIENTED_EDGE('',*,*,#21534,.T.); #30474=ORIENTED_EDGE('',*,*,#21535,.T.); #30475=ORIENTED_EDGE('',*,*,#21531,.F.); #30476=ORIENTED_EDGE('',*,*,#21536,.F.); #30477=ORIENTED_EDGE('',*,*,#21537,.T.); #30478=ORIENTED_EDGE('',*,*,#21538,.T.); #30479=ORIENTED_EDGE('',*,*,#21534,.F.); #30480=ORIENTED_EDGE('',*,*,#21539,.F.); #30481=ORIENTED_EDGE('',*,*,#21540,.T.); #30482=ORIENTED_EDGE('',*,*,#21541,.T.); #30483=ORIENTED_EDGE('',*,*,#21537,.F.); #30484=ORIENTED_EDGE('',*,*,#21542,.F.); #30485=ORIENTED_EDGE('',*,*,#21543,.T.); #30486=ORIENTED_EDGE('',*,*,#21544,.T.); #30487=ORIENTED_EDGE('',*,*,#21540,.F.); #30488=ORIENTED_EDGE('',*,*,#21545,.F.); #30489=ORIENTED_EDGE('',*,*,#21546,.T.); #30490=ORIENTED_EDGE('',*,*,#21547,.T.); #30491=ORIENTED_EDGE('',*,*,#21543,.F.); #30492=ORIENTED_EDGE('',*,*,#21548,.F.); #30493=ORIENTED_EDGE('',*,*,#21529,.T.); #30494=ORIENTED_EDGE('',*,*,#21549,.T.); #30495=ORIENTED_EDGE('',*,*,#21546,.F.); #30496=ORIENTED_EDGE('',*,*,#21550,.F.); #30497=ORIENTED_EDGE('',*,*,#21551,.T.); #30498=ORIENTED_EDGE('',*,*,#21552,.T.); #30499=ORIENTED_EDGE('',*,*,#21553,.F.); #30500=ORIENTED_EDGE('',*,*,#21554,.F.); #30501=ORIENTED_EDGE('',*,*,#21555,.T.); #30502=ORIENTED_EDGE('',*,*,#21556,.T.); #30503=ORIENTED_EDGE('',*,*,#21551,.F.); #30504=ORIENTED_EDGE('',*,*,#21557,.F.); #30505=ORIENTED_EDGE('',*,*,#21558,.T.); #30506=ORIENTED_EDGE('',*,*,#21559,.T.); #30507=ORIENTED_EDGE('',*,*,#21555,.F.); #30508=ORIENTED_EDGE('',*,*,#21560,.F.); #30509=ORIENTED_EDGE('',*,*,#21561,.T.); #30510=ORIENTED_EDGE('',*,*,#21562,.T.); #30511=ORIENTED_EDGE('',*,*,#21558,.F.); #30512=ORIENTED_EDGE('',*,*,#21563,.F.); #30513=ORIENTED_EDGE('',*,*,#21564,.T.); #30514=ORIENTED_EDGE('',*,*,#21565,.T.); #30515=ORIENTED_EDGE('',*,*,#21561,.F.); #30516=ORIENTED_EDGE('',*,*,#21566,.F.); #30517=ORIENTED_EDGE('',*,*,#21567,.T.); #30518=ORIENTED_EDGE('',*,*,#21568,.T.); #30519=ORIENTED_EDGE('',*,*,#21564,.F.); #30520=ORIENTED_EDGE('',*,*,#21569,.F.); #30521=ORIENTED_EDGE('',*,*,#21570,.T.); #30522=ORIENTED_EDGE('',*,*,#21571,.T.); #30523=ORIENTED_EDGE('',*,*,#21567,.F.); #30524=ORIENTED_EDGE('',*,*,#21572,.F.); #30525=ORIENTED_EDGE('',*,*,#21553,.T.); #30526=ORIENTED_EDGE('',*,*,#21573,.T.); #30527=ORIENTED_EDGE('',*,*,#21570,.F.); #30528=ORIENTED_EDGE('',*,*,#21574,.F.); #30529=ORIENTED_EDGE('',*,*,#21575,.T.); #30530=ORIENTED_EDGE('',*,*,#21576,.T.); #30531=ORIENTED_EDGE('',*,*,#21577,.F.); #30532=ORIENTED_EDGE('',*,*,#21578,.F.); #30533=ORIENTED_EDGE('',*,*,#21579,.T.); #30534=ORIENTED_EDGE('',*,*,#21580,.T.); #30535=ORIENTED_EDGE('',*,*,#21575,.F.); #30536=ORIENTED_EDGE('',*,*,#21581,.F.); #30537=ORIENTED_EDGE('',*,*,#21582,.T.); #30538=ORIENTED_EDGE('',*,*,#21583,.T.); #30539=ORIENTED_EDGE('',*,*,#21579,.F.); #30540=ORIENTED_EDGE('',*,*,#21584,.F.); #30541=ORIENTED_EDGE('',*,*,#21585,.T.); #30542=ORIENTED_EDGE('',*,*,#21586,.T.); #30543=ORIENTED_EDGE('',*,*,#21582,.F.); #30544=ORIENTED_EDGE('',*,*,#21587,.F.); #30545=ORIENTED_EDGE('',*,*,#21588,.T.); #30546=ORIENTED_EDGE('',*,*,#21589,.T.); #30547=ORIENTED_EDGE('',*,*,#21585,.F.); #30548=ORIENTED_EDGE('',*,*,#21590,.F.); #30549=ORIENTED_EDGE('',*,*,#21591,.T.); #30550=ORIENTED_EDGE('',*,*,#21592,.T.); #30551=ORIENTED_EDGE('',*,*,#21588,.F.); #30552=ORIENTED_EDGE('',*,*,#21593,.F.); #30553=ORIENTED_EDGE('',*,*,#21594,.T.); #30554=ORIENTED_EDGE('',*,*,#21595,.T.); #30555=ORIENTED_EDGE('',*,*,#21591,.F.); #30556=ORIENTED_EDGE('',*,*,#21596,.F.); #30557=ORIENTED_EDGE('',*,*,#21577,.T.); #30558=ORIENTED_EDGE('',*,*,#21597,.T.); #30559=ORIENTED_EDGE('',*,*,#21594,.F.); #30560=ORIENTED_EDGE('',*,*,#21046,.F.); #30561=ORIENTED_EDGE('',*,*,#21598,.T.); #30562=ORIENTED_EDGE('',*,*,#21599,.T.); #30563=ORIENTED_EDGE('',*,*,#21600,.F.); #30564=ORIENTED_EDGE('',*,*,#21059,.F.); #30565=ORIENTED_EDGE('',*,*,#21601,.T.); #30566=ORIENTED_EDGE('',*,*,#21602,.T.); #30567=ORIENTED_EDGE('',*,*,#21598,.F.); #30568=ORIENTED_EDGE('',*,*,#21058,.F.); #30569=ORIENTED_EDGE('',*,*,#21603,.T.); #30570=ORIENTED_EDGE('',*,*,#21604,.T.); #30571=ORIENTED_EDGE('',*,*,#21601,.F.); #30572=ORIENTED_EDGE('',*,*,#21057,.F.); #30573=ORIENTED_EDGE('',*,*,#21605,.T.); #30574=ORIENTED_EDGE('',*,*,#21606,.T.); #30575=ORIENTED_EDGE('',*,*,#21603,.F.); #30576=ORIENTED_EDGE('',*,*,#21056,.F.); #30577=ORIENTED_EDGE('',*,*,#21607,.T.); #30578=ORIENTED_EDGE('',*,*,#21608,.T.); #30579=ORIENTED_EDGE('',*,*,#21605,.F.); #30580=ORIENTED_EDGE('',*,*,#21055,.F.); #30581=ORIENTED_EDGE('',*,*,#21609,.T.); #30582=ORIENTED_EDGE('',*,*,#21610,.T.); #30583=ORIENTED_EDGE('',*,*,#21607,.F.); #30584=ORIENTED_EDGE('',*,*,#21054,.F.); #30585=ORIENTED_EDGE('',*,*,#21611,.T.); #30586=ORIENTED_EDGE('',*,*,#21612,.T.); #30587=ORIENTED_EDGE('',*,*,#21609,.F.); #30588=ORIENTED_EDGE('',*,*,#21053,.F.); #30589=ORIENTED_EDGE('',*,*,#21613,.T.); #30590=ORIENTED_EDGE('',*,*,#21614,.T.); #30591=ORIENTED_EDGE('',*,*,#21611,.F.); #30592=ORIENTED_EDGE('',*,*,#21052,.F.); #30593=ORIENTED_EDGE('',*,*,#21615,.T.); #30594=ORIENTED_EDGE('',*,*,#21616,.T.); #30595=ORIENTED_EDGE('',*,*,#21613,.F.); #30596=ORIENTED_EDGE('',*,*,#21051,.F.); #30597=ORIENTED_EDGE('',*,*,#21617,.T.); #30598=ORIENTED_EDGE('',*,*,#21618,.T.); #30599=ORIENTED_EDGE('',*,*,#21615,.F.); #30600=ORIENTED_EDGE('',*,*,#21050,.F.); #30601=ORIENTED_EDGE('',*,*,#21619,.T.); #30602=ORIENTED_EDGE('',*,*,#21620,.T.); #30603=ORIENTED_EDGE('',*,*,#21617,.F.); #30604=ORIENTED_EDGE('',*,*,#21049,.F.); #30605=ORIENTED_EDGE('',*,*,#21621,.T.); #30606=ORIENTED_EDGE('',*,*,#21622,.T.); #30607=ORIENTED_EDGE('',*,*,#21619,.F.); #30608=ORIENTED_EDGE('',*,*,#21048,.F.); #30609=ORIENTED_EDGE('',*,*,#21623,.T.); #30610=ORIENTED_EDGE('',*,*,#21624,.T.); #30611=ORIENTED_EDGE('',*,*,#21621,.F.); #30612=ORIENTED_EDGE('',*,*,#21047,.F.); #30613=ORIENTED_EDGE('',*,*,#21600,.T.); #30614=ORIENTED_EDGE('',*,*,#21625,.T.); #30615=ORIENTED_EDGE('',*,*,#21623,.F.); #30616=ORIENTED_EDGE('',*,*,#21625,.F.); #30617=ORIENTED_EDGE('',*,*,#21599,.F.); #30618=ORIENTED_EDGE('',*,*,#21602,.F.); #30619=ORIENTED_EDGE('',*,*,#21604,.F.); #30620=ORIENTED_EDGE('',*,*,#21606,.F.); #30621=ORIENTED_EDGE('',*,*,#21608,.F.); #30622=ORIENTED_EDGE('',*,*,#21610,.F.); #30623=ORIENTED_EDGE('',*,*,#21612,.F.); #30624=ORIENTED_EDGE('',*,*,#21614,.F.); #30625=ORIENTED_EDGE('',*,*,#21616,.F.); #30626=ORIENTED_EDGE('',*,*,#21618,.F.); #30627=ORIENTED_EDGE('',*,*,#21620,.F.); #30628=ORIENTED_EDGE('',*,*,#21622,.F.); #30629=ORIENTED_EDGE('',*,*,#21624,.F.); #30630=ORIENTED_EDGE('',*,*,#21597,.F.); #30631=ORIENTED_EDGE('',*,*,#21576,.F.); #30632=ORIENTED_EDGE('',*,*,#21580,.F.); #30633=ORIENTED_EDGE('',*,*,#21583,.F.); #30634=ORIENTED_EDGE('',*,*,#21586,.F.); #30635=ORIENTED_EDGE('',*,*,#21589,.F.); #30636=ORIENTED_EDGE('',*,*,#21592,.F.); #30637=ORIENTED_EDGE('',*,*,#21595,.F.); #30638=ORIENTED_EDGE('',*,*,#21573,.F.); #30639=ORIENTED_EDGE('',*,*,#21552,.F.); #30640=ORIENTED_EDGE('',*,*,#21556,.F.); #30641=ORIENTED_EDGE('',*,*,#21559,.F.); #30642=ORIENTED_EDGE('',*,*,#21562,.F.); #30643=ORIENTED_EDGE('',*,*,#21565,.F.); #30644=ORIENTED_EDGE('',*,*,#21568,.F.); #30645=ORIENTED_EDGE('',*,*,#21571,.F.); #30646=ORIENTED_EDGE('',*,*,#21549,.F.); #30647=ORIENTED_EDGE('',*,*,#21528,.F.); #30648=ORIENTED_EDGE('',*,*,#21532,.F.); #30649=ORIENTED_EDGE('',*,*,#21535,.F.); #30650=ORIENTED_EDGE('',*,*,#21538,.F.); #30651=ORIENTED_EDGE('',*,*,#21541,.F.); #30652=ORIENTED_EDGE('',*,*,#21544,.F.); #30653=ORIENTED_EDGE('',*,*,#21547,.F.); #30654=ORIENTED_EDGE('',*,*,#21525,.F.); #30655=ORIENTED_EDGE('',*,*,#21504,.F.); #30656=ORIENTED_EDGE('',*,*,#21508,.F.); #30657=ORIENTED_EDGE('',*,*,#21511,.F.); #30658=ORIENTED_EDGE('',*,*,#21514,.F.); #30659=ORIENTED_EDGE('',*,*,#21517,.F.); #30660=ORIENTED_EDGE('',*,*,#21520,.F.); #30661=ORIENTED_EDGE('',*,*,#21523,.F.); #30662=ORIENTED_EDGE('',*,*,#21501,.F.); #30663=ORIENTED_EDGE('',*,*,#21480,.F.); #30664=ORIENTED_EDGE('',*,*,#21484,.F.); #30665=ORIENTED_EDGE('',*,*,#21487,.F.); #30666=ORIENTED_EDGE('',*,*,#21490,.F.); #30667=ORIENTED_EDGE('',*,*,#21493,.F.); #30668=ORIENTED_EDGE('',*,*,#21496,.F.); #30669=ORIENTED_EDGE('',*,*,#21499,.F.); #30670=ORIENTED_EDGE('',*,*,#21477,.F.); #30671=ORIENTED_EDGE('',*,*,#21456,.F.); #30672=ORIENTED_EDGE('',*,*,#21460,.F.); #30673=ORIENTED_EDGE('',*,*,#21463,.F.); #30674=ORIENTED_EDGE('',*,*,#21466,.F.); #30675=ORIENTED_EDGE('',*,*,#21469,.F.); #30676=ORIENTED_EDGE('',*,*,#21472,.F.); #30677=ORIENTED_EDGE('',*,*,#21475,.F.); #30678=ORIENTED_EDGE('',*,*,#21453,.F.); #30679=ORIENTED_EDGE('',*,*,#21432,.F.); #30680=ORIENTED_EDGE('',*,*,#21436,.F.); #30681=ORIENTED_EDGE('',*,*,#21439,.F.); #30682=ORIENTED_EDGE('',*,*,#21442,.F.); #30683=ORIENTED_EDGE('',*,*,#21445,.F.); #30684=ORIENTED_EDGE('',*,*,#21448,.F.); #30685=ORIENTED_EDGE('',*,*,#21451,.F.); #30686=ORIENTED_EDGE('',*,*,#21429,.F.); #30687=ORIENTED_EDGE('',*,*,#21408,.F.); #30688=ORIENTED_EDGE('',*,*,#21412,.F.); #30689=ORIENTED_EDGE('',*,*,#21415,.F.); #30690=ORIENTED_EDGE('',*,*,#21418,.F.); #30691=ORIENTED_EDGE('',*,*,#21421,.F.); #30692=ORIENTED_EDGE('',*,*,#21424,.F.); #30693=ORIENTED_EDGE('',*,*,#21427,.F.); #30694=ORIENTED_EDGE('',*,*,#21405,.F.); #30695=ORIENTED_EDGE('',*,*,#21384,.F.); #30696=ORIENTED_EDGE('',*,*,#21388,.F.); #30697=ORIENTED_EDGE('',*,*,#21391,.F.); #30698=ORIENTED_EDGE('',*,*,#21394,.F.); #30699=ORIENTED_EDGE('',*,*,#21397,.F.); #30700=ORIENTED_EDGE('',*,*,#21400,.F.); #30701=ORIENTED_EDGE('',*,*,#21403,.F.); #30702=ORIENTED_EDGE('',*,*,#21381,.F.); #30703=ORIENTED_EDGE('',*,*,#21360,.F.); #30704=ORIENTED_EDGE('',*,*,#21364,.F.); #30705=ORIENTED_EDGE('',*,*,#21367,.F.); #30706=ORIENTED_EDGE('',*,*,#21370,.F.); #30707=ORIENTED_EDGE('',*,*,#21373,.F.); #30708=ORIENTED_EDGE('',*,*,#21376,.F.); #30709=ORIENTED_EDGE('',*,*,#21379,.F.); #30710=ORIENTED_EDGE('',*,*,#21357,.F.); #30711=ORIENTED_EDGE('',*,*,#21336,.F.); #30712=ORIENTED_EDGE('',*,*,#21340,.F.); #30713=ORIENTED_EDGE('',*,*,#21343,.F.); #30714=ORIENTED_EDGE('',*,*,#21346,.F.); #30715=ORIENTED_EDGE('',*,*,#21349,.F.); #30716=ORIENTED_EDGE('',*,*,#21352,.F.); #30717=ORIENTED_EDGE('',*,*,#21355,.F.); #30718=ORIENTED_EDGE('',*,*,#21333,.F.); #30719=ORIENTED_EDGE('',*,*,#21312,.F.); #30720=ORIENTED_EDGE('',*,*,#21316,.F.); #30721=ORIENTED_EDGE('',*,*,#21319,.F.); #30722=ORIENTED_EDGE('',*,*,#21322,.F.); #30723=ORIENTED_EDGE('',*,*,#21325,.F.); #30724=ORIENTED_EDGE('',*,*,#21328,.F.); #30725=ORIENTED_EDGE('',*,*,#21331,.F.); #30726=ORIENTED_EDGE('',*,*,#21309,.F.); #30727=ORIENTED_EDGE('',*,*,#21288,.F.); #30728=ORIENTED_EDGE('',*,*,#21292,.F.); #30729=ORIENTED_EDGE('',*,*,#21295,.F.); #30730=ORIENTED_EDGE('',*,*,#21298,.F.); #30731=ORIENTED_EDGE('',*,*,#21301,.F.); #30732=ORIENTED_EDGE('',*,*,#21304,.F.); #30733=ORIENTED_EDGE('',*,*,#21307,.F.); #30734=ORIENTED_EDGE('',*,*,#21285,.F.); #30735=ORIENTED_EDGE('',*,*,#21264,.F.); #30736=ORIENTED_EDGE('',*,*,#21268,.F.); #30737=ORIENTED_EDGE('',*,*,#21271,.F.); #30738=ORIENTED_EDGE('',*,*,#21274,.F.); #30739=ORIENTED_EDGE('',*,*,#21277,.F.); #30740=ORIENTED_EDGE('',*,*,#21280,.F.); #30741=ORIENTED_EDGE('',*,*,#21283,.F.); #30742=ORIENTED_EDGE('',*,*,#21261,.F.); #30743=ORIENTED_EDGE('',*,*,#21240,.F.); #30744=ORIENTED_EDGE('',*,*,#21244,.F.); #30745=ORIENTED_EDGE('',*,*,#21247,.F.); #30746=ORIENTED_EDGE('',*,*,#21250,.F.); #30747=ORIENTED_EDGE('',*,*,#21253,.F.); #30748=ORIENTED_EDGE('',*,*,#21256,.F.); #30749=ORIENTED_EDGE('',*,*,#21259,.F.); #30750=ORIENTED_EDGE('',*,*,#21237,.F.); #30751=ORIENTED_EDGE('',*,*,#21216,.F.); #30752=ORIENTED_EDGE('',*,*,#21220,.F.); #30753=ORIENTED_EDGE('',*,*,#21223,.F.); #30754=ORIENTED_EDGE('',*,*,#21226,.F.); #30755=ORIENTED_EDGE('',*,*,#21229,.F.); #30756=ORIENTED_EDGE('',*,*,#21232,.F.); #30757=ORIENTED_EDGE('',*,*,#21235,.F.); #30758=ORIENTED_EDGE('',*,*,#21213,.F.); #30759=ORIENTED_EDGE('',*,*,#21192,.F.); #30760=ORIENTED_EDGE('',*,*,#21196,.F.); #30761=ORIENTED_EDGE('',*,*,#21199,.F.); #30762=ORIENTED_EDGE('',*,*,#21202,.F.); #30763=ORIENTED_EDGE('',*,*,#21205,.F.); #30764=ORIENTED_EDGE('',*,*,#21208,.F.); #30765=ORIENTED_EDGE('',*,*,#21211,.F.); #30766=ORIENTED_EDGE('',*,*,#21189,.F.); #30767=ORIENTED_EDGE('',*,*,#21168,.F.); #30768=ORIENTED_EDGE('',*,*,#21172,.F.); #30769=ORIENTED_EDGE('',*,*,#21175,.F.); #30770=ORIENTED_EDGE('',*,*,#21178,.F.); #30771=ORIENTED_EDGE('',*,*,#21181,.F.); #30772=ORIENTED_EDGE('',*,*,#21184,.F.); #30773=ORIENTED_EDGE('',*,*,#21187,.F.); #30774=ORIENTED_EDGE('',*,*,#20886,.T.); #30775=ORIENTED_EDGE('',*,*,#20893,.T.); #30776=ORIENTED_EDGE('',*,*,#20890,.T.); #30777=ORIENTED_EDGE('',*,*,#21574,.T.); #30778=ORIENTED_EDGE('',*,*,#21596,.T.); #30779=ORIENTED_EDGE('',*,*,#21593,.T.); #30780=ORIENTED_EDGE('',*,*,#21590,.T.); #30781=ORIENTED_EDGE('',*,*,#21587,.T.); #30782=ORIENTED_EDGE('',*,*,#21584,.T.); #30783=ORIENTED_EDGE('',*,*,#21581,.T.); #30784=ORIENTED_EDGE('',*,*,#21578,.T.); #30785=ORIENTED_EDGE('',*,*,#21550,.T.); #30786=ORIENTED_EDGE('',*,*,#21572,.T.); #30787=ORIENTED_EDGE('',*,*,#21569,.T.); #30788=ORIENTED_EDGE('',*,*,#21566,.T.); #30789=ORIENTED_EDGE('',*,*,#21563,.T.); #30790=ORIENTED_EDGE('',*,*,#21560,.T.); #30791=ORIENTED_EDGE('',*,*,#21557,.T.); #30792=ORIENTED_EDGE('',*,*,#21554,.T.); #30793=ORIENTED_EDGE('',*,*,#21526,.T.); #30794=ORIENTED_EDGE('',*,*,#21548,.T.); #30795=ORIENTED_EDGE('',*,*,#21545,.T.); #30796=ORIENTED_EDGE('',*,*,#21542,.T.); #30797=ORIENTED_EDGE('',*,*,#21539,.T.); #30798=ORIENTED_EDGE('',*,*,#21536,.T.); #30799=ORIENTED_EDGE('',*,*,#21533,.T.); #30800=ORIENTED_EDGE('',*,*,#21530,.T.); #30801=ORIENTED_EDGE('',*,*,#21502,.T.); #30802=ORIENTED_EDGE('',*,*,#21524,.T.); #30803=ORIENTED_EDGE('',*,*,#21521,.T.); #30804=ORIENTED_EDGE('',*,*,#21518,.T.); #30805=ORIENTED_EDGE('',*,*,#21515,.T.); #30806=ORIENTED_EDGE('',*,*,#21512,.T.); #30807=ORIENTED_EDGE('',*,*,#21509,.T.); #30808=ORIENTED_EDGE('',*,*,#21506,.T.); #30809=ORIENTED_EDGE('',*,*,#21478,.T.); #30810=ORIENTED_EDGE('',*,*,#21500,.T.); #30811=ORIENTED_EDGE('',*,*,#21497,.T.); #30812=ORIENTED_EDGE('',*,*,#21494,.T.); #30813=ORIENTED_EDGE('',*,*,#21491,.T.); #30814=ORIENTED_EDGE('',*,*,#21488,.T.); #30815=ORIENTED_EDGE('',*,*,#21485,.T.); #30816=ORIENTED_EDGE('',*,*,#21482,.T.); #30817=ORIENTED_EDGE('',*,*,#21454,.T.); #30818=ORIENTED_EDGE('',*,*,#21476,.T.); #30819=ORIENTED_EDGE('',*,*,#21473,.T.); #30820=ORIENTED_EDGE('',*,*,#21470,.T.); #30821=ORIENTED_EDGE('',*,*,#21467,.T.); #30822=ORIENTED_EDGE('',*,*,#21464,.T.); #30823=ORIENTED_EDGE('',*,*,#21461,.T.); #30824=ORIENTED_EDGE('',*,*,#21458,.T.); #30825=ORIENTED_EDGE('',*,*,#21430,.T.); #30826=ORIENTED_EDGE('',*,*,#21452,.T.); #30827=ORIENTED_EDGE('',*,*,#21449,.T.); #30828=ORIENTED_EDGE('',*,*,#21446,.T.); #30829=ORIENTED_EDGE('',*,*,#21443,.T.); #30830=ORIENTED_EDGE('',*,*,#21440,.T.); #30831=ORIENTED_EDGE('',*,*,#21437,.T.); #30832=ORIENTED_EDGE('',*,*,#21434,.T.); #30833=ORIENTED_EDGE('',*,*,#21406,.T.); #30834=ORIENTED_EDGE('',*,*,#21428,.T.); #30835=ORIENTED_EDGE('',*,*,#21425,.T.); #30836=ORIENTED_EDGE('',*,*,#21422,.T.); #30837=ORIENTED_EDGE('',*,*,#21419,.T.); #30838=ORIENTED_EDGE('',*,*,#21416,.T.); #30839=ORIENTED_EDGE('',*,*,#21413,.T.); #30840=ORIENTED_EDGE('',*,*,#21410,.T.); #30841=ORIENTED_EDGE('',*,*,#21382,.T.); #30842=ORIENTED_EDGE('',*,*,#21404,.T.); #30843=ORIENTED_EDGE('',*,*,#21401,.T.); #30844=ORIENTED_EDGE('',*,*,#21398,.T.); #30845=ORIENTED_EDGE('',*,*,#21395,.T.); #30846=ORIENTED_EDGE('',*,*,#21392,.T.); #30847=ORIENTED_EDGE('',*,*,#21389,.T.); #30848=ORIENTED_EDGE('',*,*,#21386,.T.); #30849=ORIENTED_EDGE('',*,*,#21358,.T.); #30850=ORIENTED_EDGE('',*,*,#21380,.T.); #30851=ORIENTED_EDGE('',*,*,#21377,.T.); #30852=ORIENTED_EDGE('',*,*,#21374,.T.); #30853=ORIENTED_EDGE('',*,*,#21371,.T.); #30854=ORIENTED_EDGE('',*,*,#21368,.T.); #30855=ORIENTED_EDGE('',*,*,#21365,.T.); #30856=ORIENTED_EDGE('',*,*,#21362,.T.); #30857=ORIENTED_EDGE('',*,*,#21334,.T.); #30858=ORIENTED_EDGE('',*,*,#21356,.T.); #30859=ORIENTED_EDGE('',*,*,#21353,.T.); #30860=ORIENTED_EDGE('',*,*,#21350,.T.); #30861=ORIENTED_EDGE('',*,*,#21347,.T.); #30862=ORIENTED_EDGE('',*,*,#21344,.T.); #30863=ORIENTED_EDGE('',*,*,#21341,.T.); #30864=ORIENTED_EDGE('',*,*,#21338,.T.); #30865=ORIENTED_EDGE('',*,*,#21310,.T.); #30866=ORIENTED_EDGE('',*,*,#21332,.T.); #30867=ORIENTED_EDGE('',*,*,#21329,.T.); #30868=ORIENTED_EDGE('',*,*,#21326,.T.); #30869=ORIENTED_EDGE('',*,*,#21323,.T.); #30870=ORIENTED_EDGE('',*,*,#21320,.T.); #30871=ORIENTED_EDGE('',*,*,#21317,.T.); #30872=ORIENTED_EDGE('',*,*,#21314,.T.); #30873=ORIENTED_EDGE('',*,*,#21286,.T.); #30874=ORIENTED_EDGE('',*,*,#21308,.T.); #30875=ORIENTED_EDGE('',*,*,#21305,.T.); #30876=ORIENTED_EDGE('',*,*,#21302,.T.); #30877=ORIENTED_EDGE('',*,*,#21299,.T.); #30878=ORIENTED_EDGE('',*,*,#21296,.T.); #30879=ORIENTED_EDGE('',*,*,#21293,.T.); #30880=ORIENTED_EDGE('',*,*,#21290,.T.); #30881=ORIENTED_EDGE('',*,*,#21262,.T.); #30882=ORIENTED_EDGE('',*,*,#21284,.T.); #30883=ORIENTED_EDGE('',*,*,#21281,.T.); #30884=ORIENTED_EDGE('',*,*,#21278,.T.); #30885=ORIENTED_EDGE('',*,*,#21275,.T.); #30886=ORIENTED_EDGE('',*,*,#21272,.T.); #30887=ORIENTED_EDGE('',*,*,#21269,.T.); #30888=ORIENTED_EDGE('',*,*,#21266,.T.); #30889=ORIENTED_EDGE('',*,*,#21238,.T.); #30890=ORIENTED_EDGE('',*,*,#21260,.T.); #30891=ORIENTED_EDGE('',*,*,#21257,.T.); #30892=ORIENTED_EDGE('',*,*,#21254,.T.); #30893=ORIENTED_EDGE('',*,*,#21251,.T.); #30894=ORIENTED_EDGE('',*,*,#21248,.T.); #30895=ORIENTED_EDGE('',*,*,#21245,.T.); #30896=ORIENTED_EDGE('',*,*,#21242,.T.); #30897=ORIENTED_EDGE('',*,*,#21214,.T.); #30898=ORIENTED_EDGE('',*,*,#21236,.T.); #30899=ORIENTED_EDGE('',*,*,#21233,.T.); #30900=ORIENTED_EDGE('',*,*,#21230,.T.); #30901=ORIENTED_EDGE('',*,*,#21227,.T.); #30902=ORIENTED_EDGE('',*,*,#21224,.T.); #30903=ORIENTED_EDGE('',*,*,#21221,.T.); #30904=ORIENTED_EDGE('',*,*,#21218,.T.); #30905=ORIENTED_EDGE('',*,*,#21190,.T.); #30906=ORIENTED_EDGE('',*,*,#21212,.T.); #30907=ORIENTED_EDGE('',*,*,#21209,.T.); #30908=ORIENTED_EDGE('',*,*,#21206,.T.); #30909=ORIENTED_EDGE('',*,*,#21203,.T.); #30910=ORIENTED_EDGE('',*,*,#21200,.T.); #30911=ORIENTED_EDGE('',*,*,#21197,.T.); #30912=ORIENTED_EDGE('',*,*,#21194,.T.); #30913=ORIENTED_EDGE('',*,*,#21060,.T.); #30914=ORIENTED_EDGE('',*,*,#21100,.T.); #30915=ORIENTED_EDGE('',*,*,#21097,.T.); #30916=ORIENTED_EDGE('',*,*,#21094,.T.); #30917=ORIENTED_EDGE('',*,*,#21091,.T.); #30918=ORIENTED_EDGE('',*,*,#21088,.T.); #30919=ORIENTED_EDGE('',*,*,#21085,.T.); #30920=ORIENTED_EDGE('',*,*,#21082,.T.); #30921=ORIENTED_EDGE('',*,*,#21079,.T.); #30922=ORIENTED_EDGE('',*,*,#21076,.T.); #30923=ORIENTED_EDGE('',*,*,#21073,.T.); #30924=ORIENTED_EDGE('',*,*,#21070,.T.); #30925=ORIENTED_EDGE('',*,*,#21067,.T.); #30926=ORIENTED_EDGE('',*,*,#21064,.T.); #30927=ORIENTED_EDGE('',*,*,#21154,.T.); #30928=ORIENTED_EDGE('',*,*,#21164,.T.); #30929=ORIENTED_EDGE('',*,*,#21161,.T.); #30930=ORIENTED_EDGE('',*,*,#21158,.T.); #30931=ORIENTED_EDGE('',*,*,#21166,.T.); #30932=ORIENTED_EDGE('',*,*,#21188,.T.); #30933=ORIENTED_EDGE('',*,*,#21185,.T.); #30934=ORIENTED_EDGE('',*,*,#21182,.T.); #30935=ORIENTED_EDGE('',*,*,#21179,.T.); #30936=ORIENTED_EDGE('',*,*,#21176,.T.); #30937=ORIENTED_EDGE('',*,*,#21173,.T.); #30938=ORIENTED_EDGE('',*,*,#21170,.T.); #30939=ORIENTED_EDGE('',*,*,#21626,.T.); #30940=ORIENTED_EDGE('',*,*,#21627,.T.); #30941=ORIENTED_EDGE('',*,*,#21628,.T.); #30942=ORIENTED_EDGE('',*,*,#21629,.T.); #30943=ORIENTED_EDGE('',*,*,#21629,.F.); #30944=ORIENTED_EDGE('',*,*,#21630,.F.); #30945=ORIENTED_EDGE('',*,*,#20867,.F.); #30946=ORIENTED_EDGE('',*,*,#21631,.T.); #30947=ORIENTED_EDGE('',*,*,#21628,.F.); #30948=ORIENTED_EDGE('',*,*,#21632,.F.); #30949=ORIENTED_EDGE('',*,*,#21633,.F.); #30950=ORIENTED_EDGE('',*,*,#21630,.T.); #30951=ORIENTED_EDGE('',*,*,#21634,.T.); #30952=ORIENTED_EDGE('',*,*,#21635,.T.); #30953=ORIENTED_EDGE('',*,*,#21636,.T.); #30954=ORIENTED_EDGE('',*,*,#21637,.T.); #30955=ORIENTED_EDGE('',*,*,#21637,.F.); #30956=ORIENTED_EDGE('',*,*,#21638,.F.); #30957=ORIENTED_EDGE('',*,*,#20865,.F.); #30958=ORIENTED_EDGE('',*,*,#21639,.T.); #30959=ORIENTED_EDGE('',*,*,#21636,.F.); #30960=ORIENTED_EDGE('',*,*,#21640,.F.); #30961=ORIENTED_EDGE('',*,*,#21641,.F.); #30962=ORIENTED_EDGE('',*,*,#21638,.T.); #30963=ORIENTED_EDGE('',*,*,#21635,.F.); #30964=ORIENTED_EDGE('',*,*,#21642,.F.); #30965=ORIENTED_EDGE('',*,*,#20862,.F.); #30966=ORIENTED_EDGE('',*,*,#21640,.T.); #30967=ORIENTED_EDGE('',*,*,#21634,.F.); #30968=ORIENTED_EDGE('',*,*,#21639,.F.); #30969=ORIENTED_EDGE('',*,*,#20883,.F.); #30970=ORIENTED_EDGE('',*,*,#21642,.T.); #30971=ORIENTED_EDGE('',*,*,#21641,.T.); #30972=ORIENTED_EDGE('',*,*,#20861,.F.); #30973=ORIENTED_EDGE('',*,*,#21643,.T.); #30974=ORIENTED_EDGE('',*,*,#20866,.F.); #30975=ORIENTED_EDGE('',*,*,#21627,.F.); #30976=ORIENTED_EDGE('',*,*,#21644,.F.); #30977=ORIENTED_EDGE('',*,*,#20860,.F.); #30978=ORIENTED_EDGE('',*,*,#21632,.T.); #30979=ORIENTED_EDGE('',*,*,#21626,.F.); #30980=ORIENTED_EDGE('',*,*,#21631,.F.); #30981=ORIENTED_EDGE('',*,*,#21643,.F.); #30982=ORIENTED_EDGE('',*,*,#21644,.T.); #30983=ORIENTED_EDGE('',*,*,#21633,.T.); #30984=ORIENTED_EDGE('',*,*,#20859,.F.); #30985=ORIENTED_EDGE('',*,*,#21645,.T.); #30986=ORIENTED_EDGE('',*,*,#20868,.F.); #30987=ORIENTED_EDGE('',*,*,#21646,.T.); #30988=ORIENTED_EDGE('',*,*,#21647,.T.); #30989=ORIENTED_EDGE('',*,*,#21648,.T.); #30990=ORIENTED_EDGE('',*,*,#21649,.T.); #30991=ORIENTED_EDGE('',*,*,#21649,.F.); #30992=ORIENTED_EDGE('',*,*,#21650,.F.); #30993=ORIENTED_EDGE('',*,*,#20873,.F.); #30994=ORIENTED_EDGE('',*,*,#21651,.T.); #30995=ORIENTED_EDGE('',*,*,#21648,.F.); #30996=ORIENTED_EDGE('',*,*,#21652,.F.); #30997=ORIENTED_EDGE('',*,*,#21653,.F.); #30998=ORIENTED_EDGE('',*,*,#21650,.T.); #30999=ORIENTED_EDGE('',*,*,#21654,.T.); #31000=ORIENTED_EDGE('',*,*,#21655,.T.); #31001=ORIENTED_EDGE('',*,*,#21656,.T.); #31002=ORIENTED_EDGE('',*,*,#21657,.T.); #31003=ORIENTED_EDGE('',*,*,#21657,.F.); #31004=ORIENTED_EDGE('',*,*,#21658,.F.); #31005=ORIENTED_EDGE('',*,*,#20875,.F.); #31006=ORIENTED_EDGE('',*,*,#21659,.T.); #31007=ORIENTED_EDGE('',*,*,#21656,.F.); #31008=ORIENTED_EDGE('',*,*,#21660,.F.); #31009=ORIENTED_EDGE('',*,*,#20839,.F.); #31010=ORIENTED_EDGE('',*,*,#21658,.T.); #31011=ORIENTED_EDGE('',*,*,#21647,.F.); #31012=ORIENTED_EDGE('',*,*,#21661,.F.); #31013=ORIENTED_EDGE('',*,*,#20854,.F.); #31014=ORIENTED_EDGE('',*,*,#21652,.T.); #31015=ORIENTED_EDGE('',*,*,#21646,.F.); #31016=ORIENTED_EDGE('',*,*,#21651,.F.); #31017=ORIENTED_EDGE('',*,*,#21662,.F.); #31018=ORIENTED_EDGE('',*,*,#21661,.T.); #31019=ORIENTED_EDGE('',*,*,#21653,.T.); #31020=ORIENTED_EDGE('',*,*,#20853,.F.); #31021=ORIENTED_EDGE('',*,*,#21663,.T.); #31022=ORIENTED_EDGE('',*,*,#20874,.F.); #31023=ORIENTED_EDGE('',*,*,#21662,.T.); #31024=ORIENTED_EDGE('',*,*,#20872,.F.); #31025=ORIENTED_EDGE('',*,*,#21664,.F.); #31026=ORIENTED_EDGE('',*,*,#20855,.F.); #31027=ORIENTED_EDGE('',*,*,#21655,.F.); #31028=ORIENTED_EDGE('',*,*,#21665,.F.); #31029=ORIENTED_EDGE('',*,*,#20852,.F.); #31030=ORIENTED_EDGE('',*,*,#21660,.T.); #31031=ORIENTED_EDGE('',*,*,#21654,.F.); #31032=ORIENTED_EDGE('',*,*,#21659,.F.); #31033=ORIENTED_EDGE('',*,*,#21663,.F.); #31034=ORIENTED_EDGE('',*,*,#21665,.T.); #31035=ORIENTED_EDGE('',*,*,#20829,.F.); #31036=ORIENTED_EDGE('',*,*,#20882,.T.); #31037=ORIENTED_EDGE('',*,*,#20879,.F.); #31038=ORIENTED_EDGE('',*,*,#20885,.F.); #31039=ORIENTED_EDGE('',*,*,#20831,.F.); #31040=ORIENTED_EDGE('',*,*,#20884,.T.); #31041=ORIENTED_EDGE('',*,*,#20877,.F.); #31042=ORIENTED_EDGE('',*,*,#20881,.F.); #31043=ORIENTED_EDGE('',*,*,#20856,.F.); #31044=ORIENTED_EDGE('',*,*,#21664,.T.); #31045=ORIENTED_EDGE('',*,*,#20871,.F.); #31046=ORIENTED_EDGE('',*,*,#21666,.F.); #31047=ORIENTED_EDGE('',*,*,#20857,.F.); #31048=ORIENTED_EDGE('',*,*,#21666,.T.); #31049=ORIENTED_EDGE('',*,*,#20870,.F.); #31050=ORIENTED_EDGE('',*,*,#21667,.F.); #31051=ORIENTED_EDGE('',*,*,#20858,.F.); #31052=ORIENTED_EDGE('',*,*,#21667,.T.); #31053=ORIENTED_EDGE('',*,*,#20869,.F.); #31054=ORIENTED_EDGE('',*,*,#21645,.F.); #31055=ORIENTED_EDGE('',*,*,#20844,.T.); #31056=ORIENTED_EDGE('',*,*,#21668,.F.); #31057=ORIENTED_EDGE('',*,*,#21669,.F.); #31058=ORIENTED_EDGE('',*,*,#21670,.F.); #31059=ORIENTED_EDGE('',*,*,#20851,.T.); #31060=ORIENTED_EDGE('',*,*,#21671,.T.); #31061=ORIENTED_EDGE('',*,*,#21672,.F.); #31062=ORIENTED_EDGE('',*,*,#21668,.T.); #31063=ORIENTED_EDGE('',*,*,#20850,.T.); #31064=ORIENTED_EDGE('',*,*,#21673,.F.); #31065=ORIENTED_EDGE('',*,*,#21674,.F.); #31066=ORIENTED_EDGE('',*,*,#21671,.F.); #31067=ORIENTED_EDGE('',*,*,#20849,.T.); #31068=ORIENTED_EDGE('',*,*,#21675,.T.); #31069=ORIENTED_EDGE('',*,*,#21676,.F.); #31070=ORIENTED_EDGE('',*,*,#21673,.T.); #31071=ORIENTED_EDGE('',*,*,#20846,.T.); #31072=ORIENTED_EDGE('',*,*,#21677,.F.); #31073=ORIENTED_EDGE('',*,*,#21678,.F.); #31074=ORIENTED_EDGE('',*,*,#21679,.F.); #31075=ORIENTED_EDGE('',*,*,#20845,.T.); #31076=ORIENTED_EDGE('',*,*,#21670,.T.); #31077=ORIENTED_EDGE('',*,*,#21680,.F.); #31078=ORIENTED_EDGE('',*,*,#21677,.T.); #31079=ORIENTED_EDGE('',*,*,#21681,.T.); #31080=ORIENTED_EDGE('',*,*,#21672,.T.); #31081=ORIENTED_EDGE('',*,*,#21682,.T.); #31082=ORIENTED_EDGE('',*,*,#21018,.T.); #31083=ORIENTED_EDGE('',*,*,#21681,.F.); #31084=ORIENTED_EDGE('',*,*,#21025,.T.); #31085=ORIENTED_EDGE('',*,*,#21683,.T.); #31086=ORIENTED_EDGE('',*,*,#21669,.T.); #31087=ORIENTED_EDGE('',*,*,#21684,.T.); #31088=ORIENTED_EDGE('',*,*,#21680,.T.); #31089=ORIENTED_EDGE('',*,*,#21683,.F.); #31090=ORIENTED_EDGE('',*,*,#21024,.T.); #31091=ORIENTED_EDGE('',*,*,#21684,.F.); #31092=ORIENTED_EDGE('',*,*,#21023,.T.); #31093=ORIENTED_EDGE('',*,*,#21685,.T.); #31094=ORIENTED_EDGE('',*,*,#21678,.T.); #31095=ORIENTED_EDGE('',*,*,#21686,.T.); #31096=ORIENTED_EDGE('',*,*,#21687,.T.); #31097=ORIENTED_EDGE('',*,*,#21685,.F.); #31098=ORIENTED_EDGE('',*,*,#21022,.T.); #31099=ORIENTED_EDGE('',*,*,#21686,.F.); #31100=ORIENTED_EDGE('',*,*,#21021,.T.); #31101=ORIENTED_EDGE('',*,*,#21688,.T.); #31102=ORIENTED_EDGE('',*,*,#21689,.T.); #31103=ORIENTED_EDGE('',*,*,#21690,.T.); #31104=ORIENTED_EDGE('',*,*,#21676,.T.); #31105=ORIENTED_EDGE('',*,*,#21688,.F.); #31106=ORIENTED_EDGE('',*,*,#21020,.T.); #31107=ORIENTED_EDGE('',*,*,#21690,.F.); #31108=ORIENTED_EDGE('',*,*,#21019,.T.); #31109=ORIENTED_EDGE('',*,*,#21682,.F.); #31110=ORIENTED_EDGE('',*,*,#21674,.T.); #31111=ORIENTED_EDGE('',*,*,#20848,.T.); #31112=ORIENTED_EDGE('',*,*,#21691,.F.); #31113=ORIENTED_EDGE('',*,*,#21689,.F.); #31114=ORIENTED_EDGE('',*,*,#21675,.F.); #31115=ORIENTED_EDGE('',*,*,#21142,.T.); #31116=ORIENTED_EDGE('',*,*,#21152,.T.); #31117=ORIENTED_EDGE('',*,*,#21149,.T.); #31118=ORIENTED_EDGE('',*,*,#21146,.T.); #31119=ORIENTED_EDGE('',*,*,#20847,.T.); #31120=ORIENTED_EDGE('',*,*,#21679,.T.); #31121=ORIENTED_EDGE('',*,*,#21687,.F.); #31122=ORIENTED_EDGE('',*,*,#21691,.T.); #31123=ORIENTED_EDGE('',*,*,#21692,.F.); #31124=ORIENTED_EDGE('',*,*,#21693,.F.); #31125=ORIENTED_EDGE('',*,*,#21694,.F.); #31126=ORIENTED_EDGE('',*,*,#21695,.F.); #31127=ORIENTED_EDGE('',*,*,#21693,.T.); #31128=ORIENTED_EDGE('',*,*,#21696,.F.); #31129=ORIENTED_EDGE('',*,*,#21697,.F.); #31130=ORIENTED_EDGE('',*,*,#21698,.T.); #31131=ORIENTED_EDGE('',*,*,#21694,.T.); #31132=ORIENTED_EDGE('',*,*,#21698,.F.); #31133=ORIENTED_EDGE('',*,*,#21699,.F.); #31134=ORIENTED_EDGE('',*,*,#21700,.T.); #31135=ORIENTED_EDGE('',*,*,#21695,.T.); #31136=ORIENTED_EDGE('',*,*,#21700,.F.); #31137=ORIENTED_EDGE('',*,*,#21701,.F.); #31138=ORIENTED_EDGE('',*,*,#21702,.T.); #31139=ORIENTED_EDGE('',*,*,#21692,.T.); #31140=ORIENTED_EDGE('',*,*,#21702,.F.); #31141=ORIENTED_EDGE('',*,*,#21703,.F.); #31142=ORIENTED_EDGE('',*,*,#21696,.T.); #31143=ORIENTED_EDGE('',*,*,#21704,.T.); #31144=ORIENTED_EDGE('',*,*,#21705,.T.); #31145=ORIENTED_EDGE('',*,*,#21706,.T.); #31146=ORIENTED_EDGE('',*,*,#21707,.T.); #31147=ORIENTED_EDGE('',*,*,#21707,.F.); #31148=ORIENTED_EDGE('',*,*,#21708,.F.); #31149=ORIENTED_EDGE('',*,*,#21709,.F.); #31150=ORIENTED_EDGE('',*,*,#21710,.T.); #31151=ORIENTED_EDGE('',*,*,#21706,.F.); #31152=ORIENTED_EDGE('',*,*,#21711,.F.); #31153=ORIENTED_EDGE('',*,*,#21712,.F.); #31154=ORIENTED_EDGE('',*,*,#21708,.T.); #31155=ORIENTED_EDGE('',*,*,#21705,.F.); #31156=ORIENTED_EDGE('',*,*,#21713,.F.); #31157=ORIENTED_EDGE('',*,*,#21714,.F.); #31158=ORIENTED_EDGE('',*,*,#21711,.T.); #31159=ORIENTED_EDGE('',*,*,#21704,.F.); #31160=ORIENTED_EDGE('',*,*,#21710,.F.); #31161=ORIENTED_EDGE('',*,*,#21715,.F.); #31162=ORIENTED_EDGE('',*,*,#21713,.T.); #31163=ORIENTED_EDGE('',*,*,#21716,.T.); #31164=ORIENTED_EDGE('',*,*,#21717,.T.); #31165=ORIENTED_EDGE('',*,*,#21718,.T.); #31166=ORIENTED_EDGE('',*,*,#21717,.F.); #31167=ORIENTED_EDGE('',*,*,#21718,.F.); #31168=ORIENTED_EDGE('',*,*,#21719,.T.); #31169=ORIENTED_EDGE('',*,*,#21720,.F.); #31170=ORIENTED_EDGE('',*,*,#21719,.F.); #31171=ORIENTED_EDGE('',*,*,#21716,.F.); #31172=ORIENTED_EDGE('',*,*,#21721,.T.); #31173=ORIENTED_EDGE('',*,*,#21722,.T.); #31174=ORIENTED_EDGE('',*,*,#21723,.T.); #31175=ORIENTED_EDGE('',*,*,#21722,.F.); #31176=ORIENTED_EDGE('',*,*,#21723,.F.); #31177=ORIENTED_EDGE('',*,*,#21724,.T.); #31178=ORIENTED_EDGE('',*,*,#21725,.F.); #31179=ORIENTED_EDGE('',*,*,#21724,.F.); #31180=ORIENTED_EDGE('',*,*,#21721,.F.); #31181=ORIENTED_EDGE('',*,*,#21726,.T.); #31182=ORIENTED_EDGE('',*,*,#21727,.T.); #31183=ORIENTED_EDGE('',*,*,#21728,.T.); #31184=ORIENTED_EDGE('',*,*,#21727,.F.); #31185=ORIENTED_EDGE('',*,*,#21728,.F.); #31186=ORIENTED_EDGE('',*,*,#21729,.T.); #31187=ORIENTED_EDGE('',*,*,#21730,.F.); #31188=ORIENTED_EDGE('',*,*,#21729,.F.); #31189=ORIENTED_EDGE('',*,*,#21726,.F.); #31190=ORIENTED_EDGE('',*,*,#21731,.T.); #31191=ORIENTED_EDGE('',*,*,#21732,.F.); #31192=ORIENTED_EDGE('',*,*,#21733,.F.); #31193=ORIENTED_EDGE('',*,*,#21734,.F.); #31194=ORIENTED_EDGE('',*,*,#21735,.F.); #31195=ORIENTED_EDGE('',*,*,#21736,.F.); #31196=ORIENTED_EDGE('',*,*,#21732,.T.); #31197=ORIENTED_EDGE('',*,*,#21737,.F.); #31198=ORIENTED_EDGE('',*,*,#21738,.F.); #31199=ORIENTED_EDGE('',*,*,#21739,.F.); #31200=ORIENTED_EDGE('',*,*,#21740,.T.); #31201=ORIENTED_EDGE('',*,*,#21741,.F.); #31202=ORIENTED_EDGE('',*,*,#21734,.T.); #31203=ORIENTED_EDGE('',*,*,#21742,.F.); #31204=ORIENTED_EDGE('',*,*,#21743,.F.); #31205=ORIENTED_EDGE('',*,*,#21738,.T.); #31206=ORIENTED_EDGE('',*,*,#21744,.F.); #31207=ORIENTED_EDGE('',*,*,#21740,.F.); #31208=ORIENTED_EDGE('',*,*,#21742,.T.); #31209=ORIENTED_EDGE('',*,*,#21733,.T.); #31210=ORIENTED_EDGE('',*,*,#21736,.T.); #31211=ORIENTED_EDGE('',*,*,#21745,.T.); #31212=ORIENTED_EDGE('',*,*,#21746,.T.); #31213=ORIENTED_EDGE('',*,*,#21747,.T.); #31214=ORIENTED_EDGE('',*,*,#21748,.T.); #31215=ORIENTED_EDGE('',*,*,#21749,.T.); #31216=ORIENTED_EDGE('',*,*,#21750,.T.); #31217=ORIENTED_EDGE('',*,*,#21751,.T.); #31218=ORIENTED_EDGE('',*,*,#21752,.T.); #31219=ORIENTED_EDGE('',*,*,#21753,.T.); #31220=ORIENTED_EDGE('',*,*,#21754,.T.); #31221=ORIENTED_EDGE('',*,*,#21755,.T.); #31222=ORIENTED_EDGE('',*,*,#21756,.T.); #31223=ORIENTED_EDGE('',*,*,#21757,.T.); #31224=ORIENTED_EDGE('',*,*,#21758,.T.); #31225=ORIENTED_EDGE('',*,*,#21759,.T.); #31226=ORIENTED_EDGE('',*,*,#21760,.T.); #31227=ORIENTED_EDGE('',*,*,#21761,.T.); #31228=ORIENTED_EDGE('',*,*,#21762,.T.); #31229=ORIENTED_EDGE('',*,*,#21763,.T.); #31230=ORIENTED_EDGE('',*,*,#21760,.F.); #31231=ORIENTED_EDGE('',*,*,#21764,.T.); #31232=ORIENTED_EDGE('',*,*,#21765,.T.); #31233=ORIENTED_EDGE('',*,*,#21766,.T.); #31234=ORIENTED_EDGE('',*,*,#21762,.F.); #31235=ORIENTED_EDGE('',*,*,#21767,.T.); #31236=ORIENTED_EDGE('',*,*,#21758,.F.); #31237=ORIENTED_EDGE('',*,*,#21768,.T.); #31238=ORIENTED_EDGE('',*,*,#21765,.F.); #31239=ORIENTED_EDGE('',*,*,#21769,.T.); #31240=ORIENTED_EDGE('',*,*,#21764,.F.); #31241=ORIENTED_EDGE('',*,*,#21770,.T.); #31242=ORIENTED_EDGE('',*,*,#21771,.T.); #31243=ORIENTED_EDGE('',*,*,#21772,.F.); #31244=ORIENTED_EDGE('',*,*,#21773,.F.); #31245=ORIENTED_EDGE('',*,*,#21759,.F.); #31246=ORIENTED_EDGE('',*,*,#21774,.T.); #31247=ORIENTED_EDGE('',*,*,#21775,.T.); #31248=ORIENTED_EDGE('',*,*,#21770,.F.); #31249=ORIENTED_EDGE('',*,*,#21747,.F.); #31250=ORIENTED_EDGE('',*,*,#21776,.F.); #31251=ORIENTED_EDGE('',*,*,#21777,.F.); #31252=ORIENTED_EDGE('',*,*,#21778,.F.); #31253=ORIENTED_EDGE('',*,*,#21779,.F.); #31254=ORIENTED_EDGE('',*,*,#21780,.F.); #31255=ORIENTED_EDGE('',*,*,#21781,.F.); #31256=ORIENTED_EDGE('',*,*,#21782,.F.); #31257=ORIENTED_EDGE('',*,*,#21761,.F.); #31258=ORIENTED_EDGE('',*,*,#21763,.F.); #31259=ORIENTED_EDGE('',*,*,#21766,.F.); #31260=ORIENTED_EDGE('',*,*,#21768,.F.); #31261=ORIENTED_EDGE('',*,*,#21783,.T.); #31262=ORIENTED_EDGE('',*,*,#21784,.T.); #31263=ORIENTED_EDGE('',*,*,#21785,.T.); #31264=ORIENTED_EDGE('',*,*,#21779,.T.); #31265=ORIENTED_EDGE('',*,*,#21786,.T.); #31266=ORIENTED_EDGE('',*,*,#21780,.T.); #31267=ORIENTED_EDGE('',*,*,#21785,.F.); #31268=ORIENTED_EDGE('',*,*,#21787,.T.); #31269=ORIENTED_EDGE('',*,*,#21788,.T.); #31270=ORIENTED_EDGE('',*,*,#21781,.T.); #31271=ORIENTED_EDGE('',*,*,#21786,.F.); #31272=ORIENTED_EDGE('',*,*,#21789,.T.); #31273=ORIENTED_EDGE('',*,*,#21783,.F.); #31274=ORIENTED_EDGE('',*,*,#21782,.T.); #31275=ORIENTED_EDGE('',*,*,#21788,.F.); #31276=ORIENTED_EDGE('',*,*,#21790,.T.); #31277=ORIENTED_EDGE('',*,*,#21787,.F.); #31278=ORIENTED_EDGE('',*,*,#21791,.T.); #31279=ORIENTED_EDGE('',*,*,#21792,.F.); #31280=ORIENTED_EDGE('',*,*,#21793,.F.); #31281=ORIENTED_EDGE('',*,*,#21784,.F.); #31282=ORIENTED_EDGE('',*,*,#21794,.T.); #31283=ORIENTED_EDGE('',*,*,#21795,.F.); #31284=ORIENTED_EDGE('',*,*,#21791,.F.); #31285=ORIENTED_EDGE('',*,*,#21796,.T.); #31286=ORIENTED_EDGE('',*,*,#21797,.T.); #31287=ORIENTED_EDGE('',*,*,#21798,.T.); #31288=ORIENTED_EDGE('',*,*,#21799,.T.); #31289=ORIENTED_EDGE('',*,*,#21800,.T.); #31290=ORIENTED_EDGE('',*,*,#21801,.T.); #31291=ORIENTED_EDGE('',*,*,#21802,.T.); #31292=ORIENTED_EDGE('',*,*,#21797,.F.); #31293=ORIENTED_EDGE('',*,*,#21803,.T.); #31294=ORIENTED_EDGE('',*,*,#21804,.T.); #31295=ORIENTED_EDGE('',*,*,#21805,.T.); #31296=ORIENTED_EDGE('',*,*,#21801,.F.); #31297=ORIENTED_EDGE('',*,*,#21806,.T.); #31298=ORIENTED_EDGE('',*,*,#21804,.F.); #31299=ORIENTED_EDGE('',*,*,#21807,.T.); #31300=ORIENTED_EDGE('',*,*,#21799,.F.); #31301=ORIENTED_EDGE('',*,*,#21806,.F.); #31302=ORIENTED_EDGE('',*,*,#21808,.T.); #31303=ORIENTED_EDGE('',*,*,#21809,.F.); #31304=ORIENTED_EDGE('',*,*,#21810,.F.); #31305=ORIENTED_EDGE('',*,*,#21798,.F.); #31306=ORIENTED_EDGE('',*,*,#21811,.T.); #31307=ORIENTED_EDGE('',*,*,#21812,.F.); #31308=ORIENTED_EDGE('',*,*,#21808,.F.); #31309=ORIENTED_EDGE('',*,*,#21751,.F.); #31310=ORIENTED_EDGE('',*,*,#21813,.F.); #31311=ORIENTED_EDGE('',*,*,#21814,.F.); #31312=ORIENTED_EDGE('',*,*,#21815,.F.); #31313=ORIENTED_EDGE('',*,*,#21816,.F.); #31314=ORIENTED_EDGE('',*,*,#21817,.F.); #31315=ORIENTED_EDGE('',*,*,#21818,.F.); #31316=ORIENTED_EDGE('',*,*,#21819,.F.); #31317=ORIENTED_EDGE('',*,*,#21796,.F.); #31318=ORIENTED_EDGE('',*,*,#21807,.F.); #31319=ORIENTED_EDGE('',*,*,#21803,.F.); #31320=ORIENTED_EDGE('',*,*,#21800,.F.); #31321=ORIENTED_EDGE('',*,*,#21816,.T.); #31322=ORIENTED_EDGE('',*,*,#21820,.T.); #31323=ORIENTED_EDGE('',*,*,#21821,.T.); #31324=ORIENTED_EDGE('',*,*,#21822,.F.); #31325=ORIENTED_EDGE('',*,*,#21819,.T.); #31326=ORIENTED_EDGE('',*,*,#21823,.T.); #31327=ORIENTED_EDGE('',*,*,#21824,.T.); #31328=ORIENTED_EDGE('',*,*,#21820,.F.); #31329=ORIENTED_EDGE('',*,*,#21825,.T.); #31330=ORIENTED_EDGE('',*,*,#21826,.T.); #31331=ORIENTED_EDGE('',*,*,#21817,.T.); #31332=ORIENTED_EDGE('',*,*,#21822,.T.); #31333=ORIENTED_EDGE('',*,*,#21818,.T.); #31334=ORIENTED_EDGE('',*,*,#21826,.F.); #31335=ORIENTED_EDGE('',*,*,#21827,.T.); #31336=ORIENTED_EDGE('',*,*,#21823,.F.); #31337=ORIENTED_EDGE('',*,*,#21825,.F.); #31338=ORIENTED_EDGE('',*,*,#21828,.T.); #31339=ORIENTED_EDGE('',*,*,#21829,.F.); #31340=ORIENTED_EDGE('',*,*,#21830,.F.); #31341=ORIENTED_EDGE('',*,*,#21821,.F.); #31342=ORIENTED_EDGE('',*,*,#21831,.T.); #31343=ORIENTED_EDGE('',*,*,#21832,.F.); #31344=ORIENTED_EDGE('',*,*,#21828,.F.); #31345=ORIENTED_EDGE('',*,*,#21833,.T.); #31346=ORIENTED_EDGE('',*,*,#21771,.F.); #31347=ORIENTED_EDGE('',*,*,#21775,.F.); #31348=ORIENTED_EDGE('',*,*,#21834,.F.); #31349=ORIENTED_EDGE('',*,*,#21767,.F.); #31350=ORIENTED_EDGE('',*,*,#21773,.T.); #31351=ORIENTED_EDGE('',*,*,#21835,.F.); #31352=ORIENTED_EDGE('',*,*,#21836,.F.); #31353=ORIENTED_EDGE('',*,*,#21769,.F.); #31354=ORIENTED_EDGE('',*,*,#21836,.T.); #31355=ORIENTED_EDGE('',*,*,#21837,.F.); #31356=ORIENTED_EDGE('',*,*,#21834,.T.); #31357=ORIENTED_EDGE('',*,*,#21774,.F.); #31358=ORIENTED_EDGE('',*,*,#21790,.F.); #31359=ORIENTED_EDGE('',*,*,#21838,.T.); #31360=ORIENTED_EDGE('',*,*,#21839,.F.); #31361=ORIENTED_EDGE('',*,*,#21794,.F.); #31362=ORIENTED_EDGE('',*,*,#21789,.F.); #31363=ORIENTED_EDGE('',*,*,#21793,.T.); #31364=ORIENTED_EDGE('',*,*,#21840,.F.); #31365=ORIENTED_EDGE('',*,*,#21838,.F.); #31366=ORIENTED_EDGE('',*,*,#21824,.F.); #31367=ORIENTED_EDGE('',*,*,#21841,.T.); #31368=ORIENTED_EDGE('',*,*,#21842,.F.); #31369=ORIENTED_EDGE('',*,*,#21831,.F.); #31370=ORIENTED_EDGE('',*,*,#21827,.F.); #31371=ORIENTED_EDGE('',*,*,#21830,.T.); #31372=ORIENTED_EDGE('',*,*,#21843,.F.); #31373=ORIENTED_EDGE('',*,*,#21841,.F.); #31374=ORIENTED_EDGE('',*,*,#21802,.F.); #31375=ORIENTED_EDGE('',*,*,#21844,.T.); #31376=ORIENTED_EDGE('',*,*,#21845,.F.); #31377=ORIENTED_EDGE('',*,*,#21811,.F.); #31378=ORIENTED_EDGE('',*,*,#21805,.F.); #31379=ORIENTED_EDGE('',*,*,#21810,.T.); #31380=ORIENTED_EDGE('',*,*,#21846,.F.); #31381=ORIENTED_EDGE('',*,*,#21844,.F.); #31382=ORIENTED_EDGE('',*,*,#21847,.F.); #31383=ORIENTED_EDGE('',*,*,#21848,.F.); #31384=ORIENTED_EDGE('',*,*,#21849,.T.); #31385=ORIENTED_EDGE('',*,*,#21850,.F.); #31386=ORIENTED_EDGE('',*,*,#21851,.F.); #31387=ORIENTED_EDGE('',*,*,#21852,.T.); #31388=ORIENTED_EDGE('',*,*,#21847,.T.); #31389=ORIENTED_EDGE('',*,*,#21853,.T.); #31390=ORIENTED_EDGE('',*,*,#21852,.F.); #31391=ORIENTED_EDGE('',*,*,#21854,.F.); #31392=ORIENTED_EDGE('',*,*,#21855,.F.); #31393=ORIENTED_EDGE('',*,*,#21856,.F.); #31394=ORIENTED_EDGE('',*,*,#21857,.T.); #31395=ORIENTED_EDGE('',*,*,#21858,.F.); #31396=ORIENTED_EDGE('',*,*,#21859,.F.); #31397=ORIENTED_EDGE('',*,*,#21860,.T.); #31398=ORIENTED_EDGE('',*,*,#21855,.T.); #31399=ORIENTED_EDGE('',*,*,#21861,.T.); #31400=ORIENTED_EDGE('',*,*,#21860,.F.); #31401=ORIENTED_EDGE('',*,*,#21862,.F.); #31402=ORIENTED_EDGE('',*,*,#21863,.F.); #31403=ORIENTED_EDGE('',*,*,#21864,.F.); #31404=ORIENTED_EDGE('',*,*,#21865,.T.); #31405=ORIENTED_EDGE('',*,*,#21866,.F.); #31406=ORIENTED_EDGE('',*,*,#21867,.F.); #31407=ORIENTED_EDGE('',*,*,#21868,.T.); #31408=ORIENTED_EDGE('',*,*,#21863,.T.); #31409=ORIENTED_EDGE('',*,*,#21869,.T.); #31410=ORIENTED_EDGE('',*,*,#21868,.F.); #31411=ORIENTED_EDGE('',*,*,#21870,.F.); #31412=ORIENTED_EDGE('',*,*,#21871,.F.); #31413=ORIENTED_EDGE('',*,*,#21872,.F.); #31414=ORIENTED_EDGE('',*,*,#21873,.T.); #31415=ORIENTED_EDGE('',*,*,#21874,.F.); #31416=ORIENTED_EDGE('',*,*,#21875,.F.); #31417=ORIENTED_EDGE('',*,*,#21876,.T.); #31418=ORIENTED_EDGE('',*,*,#21871,.T.); #31419=ORIENTED_EDGE('',*,*,#21877,.T.); #31420=ORIENTED_EDGE('',*,*,#21876,.F.); #31421=ORIENTED_EDGE('',*,*,#21878,.F.); #31422=ORIENTED_EDGE('',*,*,#21879,.F.); #31423=ORIENTED_EDGE('',*,*,#21880,.T.); #31424=ORIENTED_EDGE('',*,*,#21881,.T.); #31425=ORIENTED_EDGE('',*,*,#21882,.T.); #31426=ORIENTED_EDGE('',*,*,#21879,.T.); #31427=ORIENTED_EDGE('',*,*,#21883,.T.); #31428=ORIENTED_EDGE('',*,*,#21884,.T.); #31429=ORIENTED_EDGE('',*,*,#21885,.T.); #31430=ORIENTED_EDGE('',*,*,#21886,.T.); #31431=ORIENTED_EDGE('',*,*,#21887,.T.); #31432=ORIENTED_EDGE('',*,*,#21888,.T.); #31433=ORIENTED_EDGE('',*,*,#21889,.T.); #31434=ORIENTED_EDGE('',*,*,#21890,.T.); #31435=ORIENTED_EDGE('',*,*,#21891,.T.); #31436=ORIENTED_EDGE('',*,*,#21892,.T.); #31437=ORIENTED_EDGE('',*,*,#21893,.T.); #31438=ORIENTED_EDGE('',*,*,#21894,.T.); #31439=ORIENTED_EDGE('',*,*,#21895,.T.); #31440=ORIENTED_EDGE('',*,*,#21882,.F.); #31441=ORIENTED_EDGE('',*,*,#21896,.F.); #31442=ORIENTED_EDGE('',*,*,#21897,.F.); #31443=ORIENTED_EDGE('',*,*,#21883,.F.); #31444=ORIENTED_EDGE('',*,*,#21884,.F.); #31445=ORIENTED_EDGE('',*,*,#21897,.T.); #31446=ORIENTED_EDGE('',*,*,#21898,.T.); #31447=ORIENTED_EDGE('',*,*,#21899,.T.); #31448=ORIENTED_EDGE('',*,*,#21893,.F.); #31449=ORIENTED_EDGE('',*,*,#21900,.T.); #31450=ORIENTED_EDGE('',*,*,#21901,.T.); #31451=ORIENTED_EDGE('',*,*,#21902,.T.); #31452=ORIENTED_EDGE('',*,*,#21900,.F.); #31453=ORIENTED_EDGE('',*,*,#21892,.F.); #31454=ORIENTED_EDGE('',*,*,#21903,.F.); #31455=ORIENTED_EDGE('',*,*,#21904,.F.); #31456=ORIENTED_EDGE('',*,*,#21891,.F.); #31457=ORIENTED_EDGE('',*,*,#21905,.T.); #31458=ORIENTED_EDGE('',*,*,#21906,.T.); #31459=ORIENTED_EDGE('',*,*,#21903,.T.); #31460=ORIENTED_EDGE('',*,*,#21905,.F.); #31461=ORIENTED_EDGE('',*,*,#21890,.F.); #31462=ORIENTED_EDGE('',*,*,#21907,.F.); #31463=ORIENTED_EDGE('',*,*,#21908,.F.); #31464=ORIENTED_EDGE('',*,*,#21889,.F.); #31465=ORIENTED_EDGE('',*,*,#21909,.T.); #31466=ORIENTED_EDGE('',*,*,#21910,.T.); #31467=ORIENTED_EDGE('',*,*,#21907,.T.); #31468=ORIENTED_EDGE('',*,*,#21909,.F.); #31469=ORIENTED_EDGE('',*,*,#21888,.F.); #31470=ORIENTED_EDGE('',*,*,#21911,.F.); #31471=ORIENTED_EDGE('',*,*,#21912,.F.); #31472=ORIENTED_EDGE('',*,*,#21887,.F.); #31473=ORIENTED_EDGE('',*,*,#21913,.T.); #31474=ORIENTED_EDGE('',*,*,#21914,.T.); #31475=ORIENTED_EDGE('',*,*,#21911,.T.); #31476=ORIENTED_EDGE('',*,*,#21913,.F.); #31477=ORIENTED_EDGE('',*,*,#21886,.F.); #31478=ORIENTED_EDGE('',*,*,#21915,.T.); #31479=ORIENTED_EDGE('',*,*,#21916,.F.); #31480=ORIENTED_EDGE('',*,*,#21899,.F.); #31481=ORIENTED_EDGE('',*,*,#21917,.F.); #31482=ORIENTED_EDGE('',*,*,#21915,.F.); #31483=ORIENTED_EDGE('',*,*,#21885,.F.); #31484=ORIENTED_EDGE('',*,*,#21918,.F.); #31485=ORIENTED_EDGE('',*,*,#21919,.F.); #31486=ORIENTED_EDGE('',*,*,#21920,.F.); #31487=ORIENTED_EDGE('',*,*,#21921,.F.); #31488=ORIENTED_EDGE('',*,*,#21833,.F.); #31489=ORIENTED_EDGE('',*,*,#21922,.F.); #31490=ORIENTED_EDGE('',*,*,#21730,.T.); #31491=ORIENTED_EDGE('',*,*,#21720,.T.); #31492=ORIENTED_EDGE('',*,*,#21725,.T.); #31493=ORIENTED_EDGE('',*,*,#21923,.T.); #31494=ORIENTED_EDGE('',*,*,#21924,.T.); #31495=ORIENTED_EDGE('',*,*,#21901,.F.); #31496=ORIENTED_EDGE('',*,*,#21904,.T.); #31497=ORIENTED_EDGE('',*,*,#21906,.F.); #31498=ORIENTED_EDGE('',*,*,#21908,.T.); #31499=ORIENTED_EDGE('',*,*,#21910,.F.); #31500=ORIENTED_EDGE('',*,*,#21912,.T.); #31501=ORIENTED_EDGE('',*,*,#21914,.F.); #31502=ORIENTED_EDGE('',*,*,#21916,.T.); #31503=ORIENTED_EDGE('',*,*,#21917,.T.); #31504=ORIENTED_EDGE('',*,*,#21898,.F.); #31505=ORIENTED_EDGE('',*,*,#21896,.T.); #31506=ORIENTED_EDGE('',*,*,#21881,.F.); #31507=ORIENTED_EDGE('',*,*,#21902,.F.); #31508=ORIENTED_EDGE('',*,*,#21924,.F.); #31509=ORIENTED_EDGE('',*,*,#21925,.F.); #31510=ORIENTED_EDGE('',*,*,#21894,.F.); #31511=ORIENTED_EDGE('',*,*,#21880,.F.); #31512=ORIENTED_EDGE('',*,*,#21895,.F.); #31513=ORIENTED_EDGE('',*,*,#21925,.T.); #31514=ORIENTED_EDGE('',*,*,#21923,.F.); #31515=ORIENTED_EDGE('',*,*,#21737,.T.); #31516=ORIENTED_EDGE('',*,*,#21926,.T.); #31517=ORIENTED_EDGE('',*,*,#21864,.T.); #31518=ORIENTED_EDGE('',*,*,#21870,.T.); #31519=ORIENTED_EDGE('',*,*,#21867,.T.); #31520=ORIENTED_EDGE('',*,*,#21927,.T.); #31521=ORIENTED_EDGE('',*,*,#21928,.T.); #31522=ORIENTED_EDGE('',*,*,#21920,.T.); #31523=ORIENTED_EDGE('',*,*,#21929,.F.); #31524=ORIENTED_EDGE('',*,*,#21930,.T.); #31525=ORIENTED_EDGE('',*,*,#21872,.T.); #31526=ORIENTED_EDGE('',*,*,#21878,.T.); #31527=ORIENTED_EDGE('',*,*,#21875,.T.); #31528=ORIENTED_EDGE('',*,*,#21931,.T.); #31529=ORIENTED_EDGE('',*,*,#21741,.T.); #31530=ORIENTED_EDGE('',*,*,#21744,.T.); #31531=ORIENTED_EDGE('',*,*,#21697,.T.); #31532=ORIENTED_EDGE('',*,*,#21703,.T.); #31533=ORIENTED_EDGE('',*,*,#21701,.T.); #31534=ORIENTED_EDGE('',*,*,#21699,.T.); #31535=ORIENTED_EDGE('',*,*,#21919,.T.); #31536=ORIENTED_EDGE('',*,*,#21932,.F.); #31537=ORIENTED_EDGE('',*,*,#21933,.T.); #31538=ORIENTED_EDGE('',*,*,#21929,.T.); #31539=ORIENTED_EDGE('',*,*,#21829,.T.); #31540=ORIENTED_EDGE('',*,*,#21832,.T.); #31541=ORIENTED_EDGE('',*,*,#21842,.T.); #31542=ORIENTED_EDGE('',*,*,#21843,.T.); #31543=ORIENTED_EDGE('',*,*,#21812,.T.); #31544=ORIENTED_EDGE('',*,*,#21845,.T.); #31545=ORIENTED_EDGE('',*,*,#21846,.T.); #31546=ORIENTED_EDGE('',*,*,#21809,.T.); #31547=ORIENTED_EDGE('',*,*,#21851,.T.); #31548=ORIENTED_EDGE('',*,*,#21934,.T.); #31549=ORIENTED_EDGE('',*,*,#21856,.T.); #31550=ORIENTED_EDGE('',*,*,#21862,.T.); #31551=ORIENTED_EDGE('',*,*,#21859,.T.); #31552=ORIENTED_EDGE('',*,*,#21935,.T.); #31553=ORIENTED_EDGE('',*,*,#21932,.T.); #31554=ORIENTED_EDGE('',*,*,#21918,.T.); #31555=ORIENTED_EDGE('',*,*,#21936,.F.); #31556=ORIENTED_EDGE('',*,*,#21937,.T.); #31557=ORIENTED_EDGE('',*,*,#21848,.T.); #31558=ORIENTED_EDGE('',*,*,#21854,.T.); #31559=ORIENTED_EDGE('',*,*,#21709,.T.); #31560=ORIENTED_EDGE('',*,*,#21712,.T.); #31561=ORIENTED_EDGE('',*,*,#21714,.T.); #31562=ORIENTED_EDGE('',*,*,#21715,.T.); #31563=ORIENTED_EDGE('',*,*,#21772,.T.); #31564=ORIENTED_EDGE('',*,*,#21921,.T.); #31565=ORIENTED_EDGE('',*,*,#21928,.F.); #31566=ORIENTED_EDGE('',*,*,#21938,.T.); #31567=ORIENTED_EDGE('',*,*,#21936,.T.); #31568=ORIENTED_EDGE('',*,*,#21922,.T.); #31569=ORIENTED_EDGE('',*,*,#21837,.T.); #31570=ORIENTED_EDGE('',*,*,#21835,.T.); #31571=ORIENTED_EDGE('',*,*,#21792,.T.); #31572=ORIENTED_EDGE('',*,*,#21795,.T.); #31573=ORIENTED_EDGE('',*,*,#21839,.T.); #31574=ORIENTED_EDGE('',*,*,#21840,.T.); #31575=ORIENTED_EDGE('',*,*,#21939,.F.); #31576=ORIENTED_EDGE('',*,*,#21757,.F.); #31577=ORIENTED_EDGE('',*,*,#21940,.F.); #31578=ORIENTED_EDGE('',*,*,#21935,.F.); #31579=ORIENTED_EDGE('',*,*,#21858,.T.); #31580=ORIENTED_EDGE('',*,*,#21861,.F.); #31581=ORIENTED_EDGE('',*,*,#21857,.F.); #31582=ORIENTED_EDGE('',*,*,#21934,.F.); #31583=ORIENTED_EDGE('',*,*,#21850,.T.); #31584=ORIENTED_EDGE('',*,*,#21853,.F.); #31585=ORIENTED_EDGE('',*,*,#21849,.F.); #31586=ORIENTED_EDGE('',*,*,#21937,.F.); #31587=ORIENTED_EDGE('',*,*,#21941,.F.); #31588=ORIENTED_EDGE('',*,*,#21933,.F.); #31589=ORIENTED_EDGE('',*,*,#21940,.T.); #31590=ORIENTED_EDGE('',*,*,#21756,.F.); #31591=ORIENTED_EDGE('',*,*,#21942,.F.); #31592=ORIENTED_EDGE('',*,*,#21927,.F.); #31593=ORIENTED_EDGE('',*,*,#21866,.T.); #31594=ORIENTED_EDGE('',*,*,#21869,.F.); #31595=ORIENTED_EDGE('',*,*,#21865,.F.); #31596=ORIENTED_EDGE('',*,*,#21926,.F.); #31597=ORIENTED_EDGE('',*,*,#21731,.F.); #31598=ORIENTED_EDGE('',*,*,#21931,.F.); #31599=ORIENTED_EDGE('',*,*,#21874,.T.); #31600=ORIENTED_EDGE('',*,*,#21877,.F.); #31601=ORIENTED_EDGE('',*,*,#21873,.F.); #31602=ORIENTED_EDGE('',*,*,#21930,.F.); #31603=ORIENTED_EDGE('',*,*,#21941,.T.); #31604=ORIENTED_EDGE('',*,*,#21755,.F.); #31605=ORIENTED_EDGE('',*,*,#21942,.T.); #31606=ORIENTED_EDGE('',*,*,#21754,.F.); #31607=ORIENTED_EDGE('',*,*,#21939,.T.); #31608=ORIENTED_EDGE('',*,*,#21938,.F.); #31609=ORIENTED_EDGE('',*,*,#21752,.F.); #31610=ORIENTED_EDGE('',*,*,#21815,.T.); #31611=ORIENTED_EDGE('',*,*,#21943,.F.); #31612=ORIENTED_EDGE('',*,*,#21944,.T.); #31613=ORIENTED_EDGE('',*,*,#21945,.F.); #31614=ORIENTED_EDGE('',*,*,#21946,.F.); #31615=ORIENTED_EDGE('',*,*,#21947,.F.); #31616=ORIENTED_EDGE('',*,*,#21948,.F.); #31617=ORIENTED_EDGE('',*,*,#21949,.F.); #31618=ORIENTED_EDGE('',*,*,#21950,.F.); #31619=ORIENTED_EDGE('',*,*,#21951,.F.); #31620=ORIENTED_EDGE('',*,*,#21952,.F.); #31621=ORIENTED_EDGE('',*,*,#21750,.F.); #31622=ORIENTED_EDGE('',*,*,#21953,.T.); #31623=ORIENTED_EDGE('',*,*,#21954,.F.); #31624=ORIENTED_EDGE('',*,*,#21813,.T.); #31625=ORIENTED_EDGE('',*,*,#21749,.F.); #31626=ORIENTED_EDGE('',*,*,#21955,.F.); #31627=ORIENTED_EDGE('',*,*,#21956,.F.); #31628=ORIENTED_EDGE('',*,*,#21953,.F.); #31629=ORIENTED_EDGE('',*,*,#21957,.F.); #31630=ORIENTED_EDGE('',*,*,#21946,.T.); #31631=ORIENTED_EDGE('',*,*,#21958,.F.); #31632=ORIENTED_EDGE('',*,*,#21956,.T.); #31633=ORIENTED_EDGE('',*,*,#21957,.T.); #31634=ORIENTED_EDGE('',*,*,#21959,.T.); #31635=ORIENTED_EDGE('',*,*,#21960,.F.); #31636=ORIENTED_EDGE('',*,*,#21947,.T.); #31637=ORIENTED_EDGE('',*,*,#21961,.F.); #31638=ORIENTED_EDGE('',*,*,#21948,.T.); #31639=ORIENTED_EDGE('',*,*,#21960,.T.); #31640=ORIENTED_EDGE('',*,*,#21777,.T.); #31641=ORIENTED_EDGE('',*,*,#21961,.T.); #31642=ORIENTED_EDGE('',*,*,#21962,.T.); #31643=ORIENTED_EDGE('',*,*,#21963,.F.); #31644=ORIENTED_EDGE('',*,*,#21949,.T.); #31645=ORIENTED_EDGE('',*,*,#21964,.F.); #31646=ORIENTED_EDGE('',*,*,#21950,.T.); #31647=ORIENTED_EDGE('',*,*,#21963,.T.); #31648=ORIENTED_EDGE('',*,*,#21965,.T.); #31649=ORIENTED_EDGE('',*,*,#21964,.T.); #31650=ORIENTED_EDGE('',*,*,#21943,.T.); #31651=ORIENTED_EDGE('',*,*,#21966,.F.); #31652=ORIENTED_EDGE('',*,*,#21951,.T.); #31653=ORIENTED_EDGE('',*,*,#21967,.F.); #31654=ORIENTED_EDGE('',*,*,#21952,.T.); #31655=ORIENTED_EDGE('',*,*,#21966,.T.); #31656=ORIENTED_EDGE('',*,*,#21814,.T.); #31657=ORIENTED_EDGE('',*,*,#21967,.T.); #31658=ORIENTED_EDGE('',*,*,#21954,.T.); #31659=ORIENTED_EDGE('',*,*,#21958,.T.); #31660=ORIENTED_EDGE('',*,*,#21945,.T.); #31661=ORIENTED_EDGE('',*,*,#21739,.T.); #31662=ORIENTED_EDGE('',*,*,#21753,.F.); #31663=ORIENTED_EDGE('',*,*,#21944,.F.); #31664=ORIENTED_EDGE('',*,*,#21965,.F.); #31665=ORIENTED_EDGE('',*,*,#21968,.F.); #31666=ORIENTED_EDGE('',*,*,#21745,.F.); #31667=ORIENTED_EDGE('',*,*,#21735,.T.); #31668=ORIENTED_EDGE('',*,*,#21743,.T.); #31669=ORIENTED_EDGE('',*,*,#21746,.F.); #31670=ORIENTED_EDGE('',*,*,#21968,.T.); #31671=ORIENTED_EDGE('',*,*,#21962,.F.); #31672=ORIENTED_EDGE('',*,*,#21776,.T.); #31673=ORIENTED_EDGE('',*,*,#21748,.F.); #31674=ORIENTED_EDGE('',*,*,#21778,.T.); #31675=ORIENTED_EDGE('',*,*,#21959,.F.); #31676=ORIENTED_EDGE('',*,*,#21955,.T.); #31677=CYLINDRICAL_SURFACE('',#33896,0.1); #31678=CYLINDRICAL_SURFACE('',#33910,0.3); #31679=CYLINDRICAL_SURFACE('',#33913,0.3); #31680=CYLINDRICAL_SURFACE('',#33915,0.1); #31681=CYLINDRICAL_SURFACE('',#33955,0.1); #31682=CYLINDRICAL_SURFACE('',#33962,0.1); #31683=CYLINDRICAL_SURFACE('',#33973,0.1); #31684=CYLINDRICAL_SURFACE('',#33984,0.3); #31685=CYLINDRICAL_SURFACE('',#33986,0.1); #31686=CYLINDRICAL_SURFACE('',#33990,0.3); #31687=CYLINDRICAL_SURFACE('',#34005,0.3); #31688=CYLINDRICAL_SURFACE('',#34007,0.1); #31689=CYLINDRICAL_SURFACE('',#34011,0.3); #31690=CYLINDRICAL_SURFACE('',#34013,0.3); #31691=CYLINDRICAL_SURFACE('',#34015,0.1); #31692=CYLINDRICAL_SURFACE('',#34019,0.3); #31693=CYLINDRICAL_SURFACE('',#34027,0.3); #31694=CYLINDRICAL_SURFACE('',#34043,0.1); #31695=CYLINDRICAL_SURFACE('',#34054,0.1); #31696=CYLINDRICAL_SURFACE('',#34067,0.1); #31697=CYLINDRICAL_SURFACE('',#34078,0.1); #31698=CYLINDRICAL_SURFACE('',#34086,0.3); #31699=CYLINDRICAL_SURFACE('',#34088,0.1); #31700=CYLINDRICAL_SURFACE('',#34092,0.3); #31701=CYLINDRICAL_SURFACE('',#34094,0.3); #31702=CYLINDRICAL_SURFACE('',#34096,0.1); #31703=CYLINDRICAL_SURFACE('',#34100,0.3); #31704=CYLINDRICAL_SURFACE('',#34102,0.3); #31705=CYLINDRICAL_SURFACE('',#34104,0.1); #31706=CYLINDRICAL_SURFACE('',#34108,0.3); #31707=CYLINDRICAL_SURFACE('',#34110,0.3); #31708=CYLINDRICAL_SURFACE('',#34112,0.1); #31709=CYLINDRICAL_SURFACE('',#34116,0.3); #31710=CYLINDRICAL_SURFACE('',#34184,1.35); #31711=CYLINDRICAL_SURFACE('',#34185,0.5); #31712=CYLINDRICAL_SURFACE('',#34186,1.15); #31713=CYLINDRICAL_SURFACE('',#34187,0.5); #31714=CYLINDRICAL_SURFACE('',#34188,0.5); #31715=CYLINDRICAL_SURFACE('',#34189,0.475); #31716=CYLINDRICAL_SURFACE('',#34190,0.475); #31717=CYLINDRICAL_SURFACE('',#34191,0.475); #31718=CYLINDRICAL_SURFACE('',#34192,1.15); #31719=CYLINDRICAL_SURFACE('',#34193,0.475); #31720=CYLINDRICAL_SURFACE('',#34194,0.5); #31721=CYLINDRICAL_SURFACE('',#34195,1.15); #31722=CYLINDRICAL_SURFACE('',#34196,0.5); #31723=CYLINDRICAL_SURFACE('',#34197,0.5); #31724=CYLINDRICAL_SURFACE('',#34198,0.475); #31725=CYLINDRICAL_SURFACE('',#34199,1.35); #31726=CYLINDRICAL_SURFACE('',#34200,1.15); #31727=CYLINDRICAL_SURFACE('',#34201,0.475); #31728=CYLINDRICAL_SURFACE('',#34202,0.475); #31729=CYLINDRICAL_SURFACE('',#34203,0.475); #31730=CYLINDRICAL_SURFACE('',#34204,0.75); #31731=CYLINDRICAL_SURFACE('',#34205,0.9); #31732=CYLINDRICAL_SURFACE('',#34206,0.75); #31733=CYLINDRICAL_SURFACE('',#34207,0.9); #31734=CYLINDRICAL_SURFACE('',#34208,1.35); #31735=CYLINDRICAL_SURFACE('',#34209,0.75); #31736=CYLINDRICAL_SURFACE('',#34210,0.9); #31737=CYLINDRICAL_SURFACE('',#34211,0.75); #31738=CYLINDRICAL_SURFACE('',#34212,0.9); #31739=CYLINDRICAL_SURFACE('',#34215,1.05); #31740=CYLINDRICAL_SURFACE('',#34218,1.05); #31741=CYLINDRICAL_SURFACE('',#34221,0.5); #31742=CYLINDRICAL_SURFACE('',#34224,0.5); #31743=CYLINDRICAL_SURFACE('',#34227,0.5); #31744=CYLINDRICAL_SURFACE('',#34230,0.5); #31745=CYLINDRICAL_SURFACE('',#34233,0.5); #31746=CYLINDRICAL_SURFACE('',#34236,0.5); #31747=CYLINDRICAL_SURFACE('',#34239,0.5); #31748=CYLINDRICAL_SURFACE('',#34242,0.5); #31749=CYLINDRICAL_SURFACE('',#34245,0.5); #31750=CYLINDRICAL_SURFACE('',#34248,0.5); #31751=CYLINDRICAL_SURFACE('',#34251,0.5); #31752=CYLINDRICAL_SURFACE('',#34254,0.5); #31753=CYLINDRICAL_SURFACE('',#34257,0.5); #31754=CYLINDRICAL_SURFACE('',#34260,0.5); #31755=CYLINDRICAL_SURFACE('',#34263,0.5); #31756=CYLINDRICAL_SURFACE('',#34266,0.5); #31757=CYLINDRICAL_SURFACE('',#34269,0.5); #31758=CYLINDRICAL_SURFACE('',#34272,0.5); #31759=CYLINDRICAL_SURFACE('',#34275,0.5); #31760=CYLINDRICAL_SURFACE('',#34278,0.5); #31761=CYLINDRICAL_SURFACE('',#34281,0.5); #31762=CYLINDRICAL_SURFACE('',#34284,0.5); #31763=CYLINDRICAL_SURFACE('',#34287,0.5); #31764=CYLINDRICAL_SURFACE('',#34290,0.5); #31765=CYLINDRICAL_SURFACE('',#34293,0.5); #31766=CYLINDRICAL_SURFACE('',#34296,0.5); #31767=CYLINDRICAL_SURFACE('',#34299,0.5); #31768=CYLINDRICAL_SURFACE('',#34302,0.5); #31769=CYLINDRICAL_SURFACE('',#34305,0.5); #31770=CYLINDRICAL_SURFACE('',#34308,0.5); #31771=CYLINDRICAL_SURFACE('',#34311,0.5); #31772=CYLINDRICAL_SURFACE('',#34314,0.5); #31773=CYLINDRICAL_SURFACE('',#34317,0.5); #31774=CYLINDRICAL_SURFACE('',#34320,0.5); #31775=CYLINDRICAL_SURFACE('',#34323,0.5); #31776=CYLINDRICAL_SURFACE('',#34326,0.5); #31777=CYLINDRICAL_SURFACE('',#34329,0.5); #31778=CYLINDRICAL_SURFACE('',#34332,0.5); #31779=CYLINDRICAL_SURFACE('',#34335,0.5); #31780=CYLINDRICAL_SURFACE('',#34338,0.5); #31781=CYLINDRICAL_SURFACE('',#34341,0.5); #31782=CYLINDRICAL_SURFACE('',#34344,0.5); #31783=CYLINDRICAL_SURFACE('',#34348,0.5); #31784=CYLINDRICAL_SURFACE('',#34351,0.5); #31785=CYLINDRICAL_SURFACE('',#34580,1.05); #31786=CYLINDRICAL_SURFACE('',#34583,1.05); #31787=CYLINDRICAL_SURFACE('',#34586,0.5); #31788=CYLINDRICAL_SURFACE('',#34589,0.5); #31789=CYLINDRICAL_SURFACE('',#34592,0.5); #31790=CYLINDRICAL_SURFACE('',#34595,0.5); #31791=CYLINDRICAL_SURFACE('',#34598,0.5); #31792=CYLINDRICAL_SURFACE('',#34601,0.5); #31793=CYLINDRICAL_SURFACE('',#34604,0.5); #31794=CYLINDRICAL_SURFACE('',#34607,0.5); #31795=CYLINDRICAL_SURFACE('',#34610,0.5); #31796=CYLINDRICAL_SURFACE('',#34613,0.5); #31797=CYLINDRICAL_SURFACE('',#34616,0.5); #31798=CYLINDRICAL_SURFACE('',#34619,0.5); #31799=CYLINDRICAL_SURFACE('',#34622,0.5); #31800=CYLINDRICAL_SURFACE('',#34625,0.5); #31801=CYLINDRICAL_SURFACE('',#34628,0.5); #31802=CYLINDRICAL_SURFACE('',#34631,0.5); #31803=CYLINDRICAL_SURFACE('',#34634,0.5); #31804=CYLINDRICAL_SURFACE('',#34637,0.5); #31805=CYLINDRICAL_SURFACE('',#34640,0.5); #31806=CYLINDRICAL_SURFACE('',#34643,0.5); #31807=CYLINDRICAL_SURFACE('',#34646,0.5); #31808=CYLINDRICAL_SURFACE('',#34649,0.5); #31809=CYLINDRICAL_SURFACE('',#34652,0.5); #31810=CYLINDRICAL_SURFACE('',#34655,0.5); #31811=CYLINDRICAL_SURFACE('',#34660,0.5); #31812=CYLINDRICAL_SURFACE('',#34663,0.5); #31813=CYLINDRICAL_SURFACE('',#34882,0.5); #31814=CYLINDRICAL_SURFACE('',#34883,0.5); #31815=CYLINDRICAL_SURFACE('',#34884,0.5); #31816=CYLINDRICAL_SURFACE('',#34885,0.5); #31817=CYLINDRICAL_SURFACE('',#34886,0.5); #31818=CYLINDRICAL_SURFACE('',#34887,0.5); #31819=CYLINDRICAL_SURFACE('',#34888,0.5); #31820=CYLINDRICAL_SURFACE('',#34889,0.5); #31821=CYLINDRICAL_SURFACE('',#34890,0.5); #31822=CYLINDRICAL_SURFACE('',#34891,0.5); #31823=CYLINDRICAL_SURFACE('',#34892,0.5); #31824=CYLINDRICAL_SURFACE('',#34893,0.5); #31825=CYLINDRICAL_SURFACE('',#34894,0.5); #31826=CYLINDRICAL_SURFACE('',#34895,0.5); #31827=CYLINDRICAL_SURFACE('',#34896,0.5); #31828=CYLINDRICAL_SURFACE('',#34897,0.5); #31829=CYLINDRICAL_SURFACE('',#34898,0.5); #31830=CYLINDRICAL_SURFACE('',#34899,0.5); #31831=CYLINDRICAL_SURFACE('',#34900,0.5); #31832=CYLINDRICAL_SURFACE('',#34901,0.5); #31833=CYLINDRICAL_SURFACE('',#34910,0.4); #31834=CYLINDRICAL_SURFACE('',#34914,0.4); #31835=CYLINDRICAL_SURFACE('',#34918,0.4); #31836=CYLINDRICAL_SURFACE('',#34922,0.4); #31837=CYLINDRICAL_SURFACE('',#34926,0.4); #31838=CYLINDRICAL_SURFACE('',#34930,0.4); #31839=CYLINDRICAL_SURFACE('',#34942,0.06); #31840=CYLINDRICAL_SURFACE('',#34944,0.06); #31841=CYLINDRICAL_SURFACE('',#34946,0.06); #31842=CYLINDRICAL_SURFACE('',#34948,0.06); #31843=CYLINDRICAL_SURFACE('',#34950,0.06); #31844=CYLINDRICAL_SURFACE('',#34952,0.06); #31845=CYLINDRICAL_SURFACE('',#34960,0.5); #31846=CYLINDRICAL_SURFACE('',#34964,0.25); #31847=CYLINDRICAL_SURFACE('',#34974,0.5); #31848=CYLINDRICAL_SURFACE('',#34978,0.25); #31849=CYLINDRICAL_SURFACE('',#34988,0.25); #31850=CYLINDRICAL_SURFACE('',#34992,0.5); #31851=CYLINDRICAL_SURFACE('',#35002,0.25); #31852=CYLINDRICAL_SURFACE('',#35006,0.5); #31853=CYLINDRICAL_SURFACE('',#35009,0.5); #31854=CYLINDRICAL_SURFACE('',#35020,0.5); #31855=CYLINDRICAL_SURFACE('',#35023,1.125); #31856=CYLINDRICAL_SURFACE('',#35026,1.125); #31857=CYLINDRICAL_SURFACE('',#35154,0.2); #31858=CYLINDRICAL_SURFACE('',#35156,0.2); #31859=CYLINDRICAL_SURFACE('',#35158,0.2); #31860=CYLINDRICAL_SURFACE('',#35162,1.); #31861=CYLINDRICAL_SURFACE('',#35166,1.3); #31862=CYLINDRICAL_SURFACE('',#35171,0.5); #31863=CYLINDRICAL_SURFACE('',#35172,0.2); #31864=CYLINDRICAL_SURFACE('',#35174,0.2); #31865=CYLINDRICAL_SURFACE('',#35179,0.2); #31866=CYLINDRICAL_SURFACE('',#35184,0.2); #31867=CYLINDRICAL_SURFACE('',#35215,0.2); #31868=CYLINDRICAL_SURFACE('',#35228,0.2); #31869=CYLINDRICAL_SURFACE('',#35230,0.2); #31870=CYLINDRICAL_SURFACE('',#35234,1.3); #31871=CYLINDRICAL_SURFACE('',#35236,1.); #31872=CYLINDRICAL_SURFACE('',#35243,0.2); #31873=CYLINDRICAL_SURFACE('',#35244,0.5); #31874=CYLINDRICAL_SURFACE('',#35246,0.2); #31875=CYLINDRICAL_SURFACE('',#35251,0.2); #31876=CYLINDRICAL_SURFACE('',#35256,0.2); #31877=CYLINDRICAL_SURFACE('',#35257,0.2); #31878=CYLINDRICAL_SURFACE('',#35267,0.3); #31879=CYLINDRICAL_SURFACE('',#35270,0.2); #31880=CYLINDRICAL_SURFACE('',#35271,0.2); #31881=CYLINDRICAL_SURFACE('',#35276,0.2); #31882=CYLINDRICAL_SURFACE('',#35277,0.25); #31883=CYLINDRICAL_SURFACE('',#35279,0.2); #31884=CYLINDRICAL_SURFACE('',#35321,0.5); #31885=CYLINDRICAL_SURFACE('',#35323,0.5); #31886=CYLINDRICAL_SURFACE('',#35324,0.2); #31887=CYLINDRICAL_SURFACE('',#35326,0.8); #31888=CYLINDRICAL_SURFACE('',#35331,0.8); #31889=CYLINDRICAL_SURFACE('',#35333,0.2); #31890=CYLINDRICAL_SURFACE('',#35335,0.5); #31891=CYLINDRICAL_SURFACE('',#35337,0.5); #31892=CYLINDRICAL_SURFACE('',#35339,0.2); #31893=CYLINDRICAL_SURFACE('',#35354,0.2); #31894=CYLINDRICAL_SURFACE('',#35356,0.095); #31895=CYLINDRICAL_SURFACE('',#35359,0.095); #31896=CYLINDRICAL_SURFACE('',#35360,0.095); #31897=CYLINDRICAL_SURFACE('',#35366,0.2); #31898=CYLINDRICAL_SURFACE('',#35371,0.2); #31899=CYLINDRICAL_SURFACE('',#35374,0.5); #31900=CYLINDRICAL_SURFACE('',#35379,0.2); #31901=CYLINDRICAL_SURFACE('',#35383,0.5); #31902=CYLINDRICAL_SURFACE('',#35385,0.2); #31903=CYLINDRICAL_SURFACE('',#35386,0.095); #31904=CYLINDRICAL_SURFACE('',#35388,0.2); #31905=CYLINDRICAL_SURFACE('',#35390,0.095); #31906=CYLINDRICAL_SURFACE('',#35393,0.095); #31907=CYLINDRICAL_SURFACE('',#35399,0.2); #31908=CYLINDRICAL_SURFACE('',#35404,0.2); #31909=CYLINDRICAL_SURFACE('',#35412,0.2); #31910=CYLINDRICAL_SURFACE('',#35414,0.5); #31911=CYLINDRICAL_SURFACE('',#35415,0.095); #31912=CYLINDRICAL_SURFACE('',#35416,0.2); #31913=CYLINDRICAL_SURFACE('',#35418,0.5); #31914=CYLINDRICAL_SURFACE('',#35420,0.095); #31915=CYLINDRICAL_SURFACE('',#35422,0.2); #31916=CYLINDRICAL_SURFACE('',#35423,0.45); #31917=CYLINDRICAL_SURFACE('',#35442,0.3); #31918=CYLINDRICAL_SURFACE('',#35445,0.3); #31919=CYLINDRICAL_SURFACE('',#35448,0.15); #31920=CYLINDRICAL_SURFACE('',#35457,0.45); #31921=CYLINDRICAL_SURFACE('',#35479,0.2); #31922=CYLINDRICAL_SURFACE('',#35482,0.12); #31923=CYLINDRICAL_SURFACE('',#35486,0.12); #31924=CYLINDRICAL_SURFACE('',#35503,0.2); #31925=CYLINDRICAL_SURFACE('',#35504,0.12); #31926=CYLINDRICAL_SURFACE('',#35505,0.12); #31927=CYLINDRICAL_SURFACE('',#35508,0.2); #31928=CYLINDRICAL_SURFACE('',#35511,0.5); #31929=CYLINDRICAL_SURFACE('',#35516,0.5); #31930=CYLINDRICAL_SURFACE('',#35517,0.8); #31931=CYLINDRICAL_SURFACE('',#35521,0.2); #31932=CYLINDRICAL_SURFACE('',#35527,0.2); #31933=CYLINDRICAL_SURFACE('',#35530,0.2); #31934=CYLINDRICAL_SURFACE('',#35532,0.12); #31935=CYLINDRICAL_SURFACE('',#35535,0.12); #31936=CYLINDRICAL_SURFACE('',#35537,0.2); #31937=CYLINDRICAL_SURFACE('',#35538,0.12); #31938=CYLINDRICAL_SURFACE('',#35541,0.5); #31939=CYLINDRICAL_SURFACE('',#35544,0.12); #31940=CYLINDRICAL_SURFACE('',#35545,0.2); #31941=CYLINDRICAL_SURFACE('',#35550,0.8); #31942=CYLINDRICAL_SURFACE('',#35551,0.5); #31943=CYLINDRICAL_SURFACE('',#35555,0.2); #31944=CYLINDRICAL_SURFACE('',#35560,0.2); #31945=CYLINDRICAL_SURFACE('',#35564,0.35); #31946=CYLINDRICAL_SURFACE('',#35566,0.35); #31947=CYLINDRICAL_SURFACE('',#35568,0.35); #31948=CYLINDRICAL_SURFACE('',#35570,0.35); #31949=CYLINDRICAL_SURFACE('',#35572,0.3); #31950=CYLINDRICAL_SURFACE('',#35576,0.3); #31951=CYLINDRICAL_SURFACE('',#35579,0.45); #31952=CYLINDRICAL_SURFACE('',#35585,0.3); #31953=CYLINDRICAL_SURFACE('',#35588,0.3); #31954=CYLINDRICAL_SURFACE('',#35591,0.15); #31955=CYLINDRICAL_SURFACE('',#35592,0.3); #31956=CYLINDRICAL_SURFACE('',#35596,0.15); #31957=CYLINDRICAL_SURFACE('',#35597,0.3); #31958=CYLINDRICAL_SURFACE('',#35669,0.6); #31959=CYLINDRICAL_SURFACE('',#35672,0.3); #31960=CYLINDRICAL_SURFACE('',#35675,0.6); #31961=CYLINDRICAL_SURFACE('',#35678,0.6); #31962=CYLINDRICAL_SURFACE('',#35691,0.3); #31963=CYLINDRICAL_SURFACE('',#35693,0.3); #31964=CYLINDRICAL_SURFACE('',#35695,0.6); #31965=CYLINDRICAL_SURFACE('',#35697,0.3); #31966=CYLINDRICAL_SURFACE('',#35719,0.6); #31967=CYLINDRICAL_SURFACE('',#35721,0.3); #31968=CYLINDRICAL_SURFACE('',#35723,0.6); #31969=CYLINDRICAL_SURFACE('',#35725,0.6); #31970=CYLINDRICAL_SURFACE('',#35762,0.6); #31971=CYLINDRICAL_SURFACE('',#35764,0.3); #31972=CYLINDRICAL_SURFACE('',#35766,0.6); #31973=CYLINDRICAL_SURFACE('',#35768,0.6); #31974=CYLINDRICAL_SURFACE('',#35775,0.3); #31975=CYLINDRICAL_SURFACE('',#35777,0.3); #31976=CYLINDRICAL_SURFACE('',#35779,0.6); #31977=CYLINDRICAL_SURFACE('',#35781,0.3); #31978=CYLINDRICAL_SURFACE('',#35812,0.6); #31979=CYLINDRICAL_SURFACE('',#35814,0.3); #31980=CYLINDRICAL_SURFACE('',#35816,0.6); #31981=CYLINDRICAL_SURFACE('',#35818,0.6); #31982=CYLINDRICAL_SURFACE('',#35825,0.3); #31983=CYLINDRICAL_SURFACE('',#35827,0.3); #31984=CYLINDRICAL_SURFACE('',#35829,0.6); #31985=CYLINDRICAL_SURFACE('',#35831,0.3); #31986=CYLINDRICAL_SURFACE('',#35849,0.3); #31987=CYLINDRICAL_SURFACE('',#35851,0.3); #31988=CYLINDRICAL_SURFACE('',#35853,0.6); #31989=CYLINDRICAL_SURFACE('',#35855,0.3); #31990=CYLINDRICAL_SURFACE('',#35858,0.2); #31991=CYLINDRICAL_SURFACE('',#35870,0.3); #31992=CYLINDRICAL_SURFACE('',#35875,0.2); #31993=CYLINDRICAL_SURFACE('',#35877,0.2); #31994=CYLINDRICAL_SURFACE('',#35879,0.2); #31995=CYLINDRICAL_SURFACE('',#35880,0.2); #31996=CYLINDRICAL_SURFACE('',#35881,0.25); #31997=CYLINDRICAL_SURFACE('',#35975,0.04); #31998=CYLINDRICAL_SURFACE('',#35977,0.04); #31999=CYLINDRICAL_SURFACE('',#35981,0.04); #32000=CYLINDRICAL_SURFACE('',#35983,0.04); #32001=CYLINDRICAL_SURFACE('',#35991,0.04); #32002=CYLINDRICAL_SURFACE('',#35994,0.04); #32003=CYLINDRICAL_SURFACE('',#35997,0.04); #32004=CYLINDRICAL_SURFACE('',#36000,0.04); #32005=CYLINDRICAL_SURFACE('',#36009,0.04); #32006=CYLINDRICAL_SURFACE('',#36011,0.04); #32007=CYLINDRICAL_SURFACE('',#36015,0.04); #32008=CYLINDRICAL_SURFACE('',#36017,0.04); #32009=CYLINDRICAL_SURFACE('',#36179,1.); #32010=CYLINDRICAL_SURFACE('',#36184,1.); #32011=CYLINDRICAL_SURFACE('',#36195,1.); #32012=CYLINDRICAL_SURFACE('',#36200,1.); #32013=CYLINDRICAL_SURFACE('',#36211,0.999999999999996); #32014=CYLINDRICAL_SURFACE('',#36212,0.999999999999996); #32015=CYLINDRICAL_SURFACE('',#36213,1.99999999999999); #32016=CYLINDRICAL_SURFACE('',#36215,1.99999999999999); #32017=CYLINDRICAL_SURFACE('',#36217,2.); #32018=CYLINDRICAL_SURFACE('',#36220,2.); #32019=CYLINDRICAL_SURFACE('',#36223,2.); #32020=CYLINDRICAL_SURFACE('',#36236,2.); #32021=CYLINDRICAL_SURFACE('',#36238,0.850000000000001); #32022=CYLINDRICAL_SURFACE('',#36245,0.850000000000001); #32023=CYLINDRICAL_SURFACE('',#36256,1.2); #32024=CYLINDRICAL_SURFACE('',#36263,1.19999999999999); #32025=CYLINDRICAL_SURFACE('',#36270,1.19999999999999); #32026=CYLINDRICAL_SURFACE('',#36282,0.8); #32027=CYLINDRICAL_SURFACE('',#36289,0.8); #32028=CYLINDRICAL_SURFACE('',#36294,4.); #32029=CYLINDRICAL_SURFACE('',#36305,0.8); #32030=CYLINDRICAL_SURFACE('',#36310,0.8); #32031=CYLINDRICAL_SURFACE('',#36312,4.); #32032=CYLINDRICAL_SURFACE('',#36330,4.); #32033=CYLINDRICAL_SURFACE('',#36333,4.); #32034=CYLINDRICAL_SURFACE('',#36351,2.); #32035=CYLINDRICAL_SURFACE('',#36363,4.); #32036=CYLINDRICAL_SURFACE('',#36365,2.); #32037=CYLINDRICAL_SURFACE('',#36367,1.); #32038=CYLINDRICAL_SURFACE('',#36369,4.); #32039=CYLINDRICAL_SURFACE('',#36371,1.); #32040=CYLINDRICAL_SURFACE('',#36374,1.); #32041=CYLINDRICAL_SURFACE('',#36376,4.); #32042=CYLINDRICAL_SURFACE('',#36378,1.); #32043=CYLINDRICAL_SURFACE('',#36393,2.); #32044=CYLINDRICAL_SURFACE('',#36400,2.); #32045=CYLINDRICAL_SURFACE('',#36414,2.); #32046=CYLINDRICAL_SURFACE('',#36415,2.); #32047=ADVANCED_FACE('',(#2242),#31677,.F.); #32048=ADVANCED_FACE('',(#2243),#1065,.F.); #32049=ADVANCED_FACE('',(#2244),#1066,.F.); #32050=ADVANCED_FACE('',(#2245),#1067,.F.); #32051=ADVANCED_FACE('',(#2246),#1068,.T.); #32052=ADVANCED_FACE('',(#2247),#1069,.F.); #32053=ADVANCED_FACE('',(#2248),#31678,.T.); #32054=ADVANCED_FACE('',(#2249),#1070,.F.); #32055=ADVANCED_FACE('',(#2250),#1071,.F.); #32056=ADVANCED_FACE('',(#2251),#31679,.T.); #32057=ADVANCED_FACE('',(#2252),#1072,.F.); #32058=ADVANCED_FACE('',(#2253),#31680,.F.); #32059=ADVANCED_FACE('',(#2254),#1073,.F.); #32060=ADVANCED_FACE('',(#2255),#1074,.F.); #32061=ADVANCED_FACE('',(#2256),#1075,.F.); #32062=ADVANCED_FACE('',(#2257),#1076,.F.); #32063=ADVANCED_FACE('',(#2258),#1077,.F.); #32064=ADVANCED_FACE('',(#2259),#1078,.F.); #32065=ADVANCED_FACE('',(#2260),#1079,.F.); #32066=ADVANCED_FACE('',(#2261),#1080,.F.); #32067=ADVANCED_FACE('',(#2262),#1081,.F.); #32068=ADVANCED_FACE('',(#2263),#1082,.F.); #32069=ADVANCED_FACE('',(#2264),#1083,.F.); #32070=ADVANCED_FACE('',(#2265),#1084,.F.); #32071=ADVANCED_FACE('',(#2266),#1085,.F.); #32072=ADVANCED_FACE('',(#2267),#1086,.F.); #32073=ADVANCED_FACE('',(#2268),#1087,.F.); #32074=ADVANCED_FACE('',(#2269),#1088,.F.); #32075=ADVANCED_FACE('',(#2270),#1089,.F.); #32076=ADVANCED_FACE('',(#2271),#1090,.F.); #32077=ADVANCED_FACE('',(#2272),#1091,.F.); #32078=ADVANCED_FACE('',(#2273),#1092,.F.); #32079=ADVANCED_FACE('',(#2274),#1093,.F.); #32080=ADVANCED_FACE('',(#2275),#1094,.F.); #32081=ADVANCED_FACE('',(#2276),#1095,.F.); #32082=ADVANCED_FACE('',(#2277),#1096,.F.); #32083=ADVANCED_FACE('',(#2278),#1097,.T.); #32084=ADVANCED_FACE('',(#2279),#1098,.F.); #32085=ADVANCED_FACE('',(#2280),#1099,.F.); #32086=ADVANCED_FACE('',(#2281),#31681,.F.); #32087=ADVANCED_FACE('',(#2282),#1100,.T.); #32088=ADVANCED_FACE('',(#2283),#1101,.F.); #32089=ADVANCED_FACE('',(#2284),#31682,.F.); #32090=ADVANCED_FACE('',(#2285),#1102,.T.); #32091=ADVANCED_FACE('',(#2286),#1103,.F.); #32092=ADVANCED_FACE('',(#2287),#31683,.F.); #32093=ADVANCED_FACE('',(#2288),#1104,.F.); #32094=ADVANCED_FACE('',(#2289),#1105,.F.); #32095=ADVANCED_FACE('',(#2290),#1106,.F.); #32096=ADVANCED_FACE('',(#2291),#1107,.F.); #32097=ADVANCED_FACE('',(#2292,#819),#1108,.F.); #32098=ADVANCED_FACE('',(#2293),#1109,.F.); #32099=ADVANCED_FACE('',(#2294),#1110,.F.); #32100=ADVANCED_FACE('',(#2295),#1111,.F.); #32101=ADVANCED_FACE('',(#2296),#1112,.F.); #32102=ADVANCED_FACE('',(#2297),#31684,.T.); #32103=ADVANCED_FACE('',(#2298),#1113,.F.); #32104=ADVANCED_FACE('',(#2299),#31685,.F.); #32105=ADVANCED_FACE('',(#2300),#1114,.F.); #32106=ADVANCED_FACE('',(#2301),#1115,.F.); #32107=ADVANCED_FACE('',(#2302),#1116,.F.); #32108=ADVANCED_FACE('',(#2303),#31686,.T.); #32109=ADVANCED_FACE('',(#2304),#1117,.F.); #32110=ADVANCED_FACE('',(#2305),#1118,.F.); #32111=ADVANCED_FACE('',(#2306),#1119,.F.); #32112=ADVANCED_FACE('',(#2307),#1120,.F.); #32113=ADVANCED_FACE('',(#2308),#1121,.F.); #32114=ADVANCED_FACE('',(#2309),#1122,.F.); #32115=ADVANCED_FACE('',(#2310),#1123,.F.); #32116=ADVANCED_FACE('',(#2311),#1124,.F.); #32117=ADVANCED_FACE('',(#2312),#1125,.F.); #32118=ADVANCED_FACE('',(#2313),#1126,.F.); #32119=ADVANCED_FACE('',(#2314),#1127,.F.); #32120=ADVANCED_FACE('',(#2315),#1128,.F.); #32121=ADVANCED_FACE('',(#2316),#1129,.F.); #32122=ADVANCED_FACE('',(#2317),#1130,.F.); #32123=ADVANCED_FACE('',(#2318),#31687,.T.); #32124=ADVANCED_FACE('',(#2319),#1131,.F.); #32125=ADVANCED_FACE('',(#2320),#31688,.F.); #32126=ADVANCED_FACE('',(#2321),#1132,.F.); #32127=ADVANCED_FACE('',(#2322),#1133,.F.); #32128=ADVANCED_FACE('',(#2323),#1134,.F.); #32129=ADVANCED_FACE('',(#2324),#31689,.T.); #32130=ADVANCED_FACE('',(#2325),#1135,.F.); #32131=ADVANCED_FACE('',(#2326),#31690,.T.); #32132=ADVANCED_FACE('',(#2327),#1136,.F.); #32133=ADVANCED_FACE('',(#2328),#31691,.F.); #32134=ADVANCED_FACE('',(#2329),#1137,.F.); #32135=ADVANCED_FACE('',(#2330),#1138,.F.); #32136=ADVANCED_FACE('',(#2331),#1139,.F.); #32137=ADVANCED_FACE('',(#2332),#31692,.T.); #32138=ADVANCED_FACE('',(#2333),#1140,.F.); #32139=ADVANCED_FACE('',(#2334),#1141,.F.); #32140=ADVANCED_FACE('',(#2335),#1142,.F.); #32141=ADVANCED_FACE('',(#2336),#1143,.F.); #32142=ADVANCED_FACE('',(#2337),#1144,.F.); #32143=ADVANCED_FACE('',(#2338),#1145,.F.); #32144=ADVANCED_FACE('',(#2339),#1146,.F.); #32145=ADVANCED_FACE('',(#2340),#31693,.F.); #32146=ADVANCED_FACE('',(#2341),#1147,.F.); #32147=ADVANCED_FACE('',(#2342),#1148,.F.); #32148=ADVANCED_FACE('',(#2343),#1149,.F.); #32149=ADVANCED_FACE('',(#2344),#1150,.F.); #32150=ADVANCED_FACE('',(#2345),#1151,.T.); #32151=ADVANCED_FACE('',(#2346),#1152,.F.); #32152=ADVANCED_FACE('',(#2347),#31694,.F.); #32153=ADVANCED_FACE('',(#2348),#1153,.T.); #32154=ADVANCED_FACE('',(#2349),#1154,.F.); #32155=ADVANCED_FACE('',(#2350),#31695,.F.); #32156=ADVANCED_FACE('',(#2351),#1155,.F.); #32157=ADVANCED_FACE('',(#2352),#1156,.F.); #32158=ADVANCED_FACE('',(#2353),#1157,.T.); #32159=ADVANCED_FACE('',(#2354),#1158,.F.); #32160=ADVANCED_FACE('',(#2355),#31696,.F.); #32161=ADVANCED_FACE('',(#2356),#1159,.T.); #32162=ADVANCED_FACE('',(#2357),#1160,.F.); #32163=ADVANCED_FACE('',(#2358),#31697,.F.); #32164=ADVANCED_FACE('',(#2359),#1161,.F.); #32165=ADVANCED_FACE('',(#2360),#1162,.F.); #32166=ADVANCED_FACE('',(#2361),#1163,.F.); #32167=ADVANCED_FACE('',(#2362),#1164,.F.); #32168=ADVANCED_FACE('',(#2363),#1165,.F.); #32169=ADVANCED_FACE('',(#2364),#1166,.F.); #32170=ADVANCED_FACE('',(#2365),#1167,.T.); #32171=ADVANCED_FACE('',(#2366),#31698,.T.); #32172=ADVANCED_FACE('',(#2367),#1168,.F.); #32173=ADVANCED_FACE('',(#2368),#31699,.F.); #32174=ADVANCED_FACE('',(#2369),#1169,.F.); #32175=ADVANCED_FACE('',(#2370),#1170,.F.); #32176=ADVANCED_FACE('',(#2371),#1171,.F.); #32177=ADVANCED_FACE('',(#2372),#31700,.T.); #32178=ADVANCED_FACE('',(#2373),#1172,.F.); #32179=ADVANCED_FACE('',(#2374),#31701,.T.); #32180=ADVANCED_FACE('',(#2375),#1173,.F.); #32181=ADVANCED_FACE('',(#2376),#31702,.F.); #32182=ADVANCED_FACE('',(#2377),#1174,.F.); #32183=ADVANCED_FACE('',(#2378),#1175,.F.); #32184=ADVANCED_FACE('',(#2379),#1176,.F.); #32185=ADVANCED_FACE('',(#2380),#31703,.T.); #32186=ADVANCED_FACE('',(#2381),#1177,.F.); #32187=ADVANCED_FACE('',(#2382),#31704,.T.); #32188=ADVANCED_FACE('',(#2383),#1178,.F.); #32189=ADVANCED_FACE('',(#2384),#31705,.F.); #32190=ADVANCED_FACE('',(#2385),#1179,.F.); #32191=ADVANCED_FACE('',(#2386),#1180,.F.); #32192=ADVANCED_FACE('',(#2387),#1181,.F.); #32193=ADVANCED_FACE('',(#2388),#31706,.T.); #32194=ADVANCED_FACE('',(#2389),#1182,.F.); #32195=ADVANCED_FACE('',(#2390),#31707,.T.); #32196=ADVANCED_FACE('',(#2391),#1183,.F.); #32197=ADVANCED_FACE('',(#2392),#31708,.F.); #32198=ADVANCED_FACE('',(#2393),#1184,.F.); #32199=ADVANCED_FACE('',(#2394),#1185,.F.); #32200=ADVANCED_FACE('',(#2395),#1186,.F.); #32201=ADVANCED_FACE('',(#2396),#31709,.T.); #32202=ADVANCED_FACE('',(#2397),#1187,.F.); #32203=ADVANCED_FACE('',(#2398),#1188,.T.); #32204=ADVANCED_FACE('',(#2399),#1189,.T.); #32205=ADVANCED_FACE('',(#2400),#1190,.T.); #32206=ADVANCED_FACE('',(#2401,#820,#821,#822,#823,#824,#825,#826,#827, #828,#829,#830,#831,#832,#833,#834,#835,#836,#837,#838,#839,#840,#841,#842, #843,#844,#845,#846,#847,#848),#1191,.T.); #32207=ADVANCED_FACE('',(#2402,#849,#850,#851,#852,#853,#854,#855,#856, #857,#858,#859,#860,#861,#862,#863,#864,#865,#866,#867,#868,#869,#870,#871, #872,#873,#874,#875,#876,#877),#1192,.F.); #32208=ADVANCED_FACE('',(#2403),#1193,.T.); #32209=ADVANCED_FACE('',(#2404),#31710,.F.); #32210=ADVANCED_FACE('',(#2405),#31711,.F.); #32211=ADVANCED_FACE('',(#2406),#31712,.F.); #32212=ADVANCED_FACE('',(#2407),#31713,.F.); #32213=ADVANCED_FACE('',(#2408),#31714,.F.); #32214=ADVANCED_FACE('',(#2409),#31715,.F.); #32215=ADVANCED_FACE('',(#2410),#31716,.F.); #32216=ADVANCED_FACE('',(#2411),#31717,.F.); #32217=ADVANCED_FACE('',(#2412),#31718,.F.); #32218=ADVANCED_FACE('',(#2413),#31719,.F.); #32219=ADVANCED_FACE('',(#2414),#31720,.F.); #32220=ADVANCED_FACE('',(#2415),#31721,.F.); #32221=ADVANCED_FACE('',(#2416),#31722,.F.); #32222=ADVANCED_FACE('',(#2417),#31723,.F.); #32223=ADVANCED_FACE('',(#2418),#31724,.F.); #32224=ADVANCED_FACE('',(#2419),#31725,.F.); #32225=ADVANCED_FACE('',(#2420),#31726,.F.); #32226=ADVANCED_FACE('',(#2421),#31727,.F.); #32227=ADVANCED_FACE('',(#2422),#31728,.F.); #32228=ADVANCED_FACE('',(#2423),#31729,.F.); #32229=ADVANCED_FACE('',(#2424),#31730,.F.); #32230=ADVANCED_FACE('',(#2425),#31731,.F.); #32231=ADVANCED_FACE('',(#2426),#31732,.F.); #32232=ADVANCED_FACE('',(#2427),#31733,.F.); #32233=ADVANCED_FACE('',(#2428),#31734,.F.); #32234=ADVANCED_FACE('',(#2429),#31735,.F.); #32235=ADVANCED_FACE('',(#2430),#31736,.F.); #32236=ADVANCED_FACE('',(#2431),#31737,.F.); #32237=ADVANCED_FACE('',(#2432),#31738,.F.); #32238=ADVANCED_FACE('',(#2433),#31739,.F.); #32239=ADVANCED_FACE('',(#2434),#31740,.F.); #32240=ADVANCED_FACE('',(#2435),#31741,.F.); #32241=ADVANCED_FACE('',(#2436),#31742,.F.); #32242=ADVANCED_FACE('',(#2437),#31743,.F.); #32243=ADVANCED_FACE('',(#2438),#31744,.F.); #32244=ADVANCED_FACE('',(#2439),#31745,.F.); #32245=ADVANCED_FACE('',(#2440),#31746,.F.); #32246=ADVANCED_FACE('',(#2441),#31747,.F.); #32247=ADVANCED_FACE('',(#2442),#31748,.F.); #32248=ADVANCED_FACE('',(#2443),#31749,.F.); #32249=ADVANCED_FACE('',(#2444),#31750,.F.); #32250=ADVANCED_FACE('',(#2445),#31751,.F.); #32251=ADVANCED_FACE('',(#2446),#31752,.F.); #32252=ADVANCED_FACE('',(#2447),#31753,.F.); #32253=ADVANCED_FACE('',(#2448),#31754,.F.); #32254=ADVANCED_FACE('',(#2449),#31755,.F.); #32255=ADVANCED_FACE('',(#2450),#31756,.F.); #32256=ADVANCED_FACE('',(#2451),#31757,.F.); #32257=ADVANCED_FACE('',(#2452),#31758,.F.); #32258=ADVANCED_FACE('',(#2453),#31759,.F.); #32259=ADVANCED_FACE('',(#2454),#31760,.F.); #32260=ADVANCED_FACE('',(#2455),#31761,.F.); #32261=ADVANCED_FACE('',(#2456),#31762,.F.); #32262=ADVANCED_FACE('',(#2457),#31763,.F.); #32263=ADVANCED_FACE('',(#2458),#31764,.F.); #32264=ADVANCED_FACE('',(#2459),#31765,.F.); #32265=ADVANCED_FACE('',(#2460),#31766,.F.); #32266=ADVANCED_FACE('',(#2461),#31767,.F.); #32267=ADVANCED_FACE('',(#2462),#31768,.F.); #32268=ADVANCED_FACE('',(#2463),#31769,.F.); #32269=ADVANCED_FACE('',(#2464),#31770,.F.); #32270=ADVANCED_FACE('',(#2465),#31771,.F.); #32271=ADVANCED_FACE('',(#2466),#31772,.F.); #32272=ADVANCED_FACE('',(#2467),#31773,.F.); #32273=ADVANCED_FACE('',(#2468),#31774,.F.); #32274=ADVANCED_FACE('',(#2469),#31775,.F.); #32275=ADVANCED_FACE('',(#2470),#31776,.F.); #32276=ADVANCED_FACE('',(#2471),#31777,.F.); #32277=ADVANCED_FACE('',(#2472),#31778,.F.); #32278=ADVANCED_FACE('',(#2473),#31779,.F.); #32279=ADVANCED_FACE('',(#2474),#31780,.F.); #32280=ADVANCED_FACE('',(#2475),#31781,.F.); #32281=ADVANCED_FACE('',(#2476),#31782,.F.); #32282=ADVANCED_FACE('',(#2477),#1194,.F.); #32283=ADVANCED_FACE('',(#2478),#31783,.T.); #32284=ADVANCED_FACE('',(#2479),#31784,.T.); #32285=ADVANCED_FACE('',(#2480),#1195,.F.); #32286=ADVANCED_FACE('',(#2481),#1196,.F.); #32287=ADVANCED_FACE('',(#2482),#1197,.F.); #32288=ADVANCED_FACE('',(#2483),#1198,.F.); #32289=ADVANCED_FACE('',(#2484),#1199,.F.); #32290=ADVANCED_FACE('',(#2485),#1200,.F.); #32291=ADVANCED_FACE('',(#2486),#1201,.F.); #32292=ADVANCED_FACE('',(#2487),#1202,.F.); #32293=ADVANCED_FACE('',(#2488),#1203,.F.); #32294=ADVANCED_FACE('',(#2489),#1204,.F.); #32295=ADVANCED_FACE('',(#2490),#1205,.F.); #32296=ADVANCED_FACE('',(#2491),#1206,.F.); #32297=ADVANCED_FACE('',(#2492),#1207,.F.); #32298=ADVANCED_FACE('',(#2493),#1208,.F.); #32299=ADVANCED_FACE('',(#2494),#1209,.F.); #32300=ADVANCED_FACE('',(#2495),#1210,.F.); #32301=ADVANCED_FACE('',(#2496),#1211,.F.); #32302=ADVANCED_FACE('',(#2497),#1212,.F.); #32303=ADVANCED_FACE('',(#2498),#1213,.F.); #32304=ADVANCED_FACE('',(#2499),#1214,.F.); #32305=ADVANCED_FACE('',(#2500),#1215,.F.); #32306=ADVANCED_FACE('',(#2501,#878),#1216,.T.); #32307=ADVANCED_FACE('',(#2502,#879),#1217,.F.); #32308=ADVANCED_FACE('',(#2503,#880),#1218,.T.); #32309=ADVANCED_FACE('',(#2504,#881),#1219,.F.); #32310=ADVANCED_FACE('',(#2505,#882),#1220,.T.); #32311=ADVANCED_FACE('',(#2506,#883),#1221,.F.); #32312=ADVANCED_FACE('',(#2507,#884),#1222,.T.); #32313=ADVANCED_FACE('',(#2508,#885),#1223,.F.); #32314=ADVANCED_FACE('',(#2509,#886),#1224,.T.); #32315=ADVANCED_FACE('',(#2510,#887),#1225,.F.); #32316=ADVANCED_FACE('',(#2511,#888),#1226,.T.); #32317=ADVANCED_FACE('',(#2512,#889),#1227,.F.); #32318=ADVANCED_FACE('',(#2513,#890),#1228,.T.); #32319=ADVANCED_FACE('',(#2514,#891),#1229,.F.); #32320=ADVANCED_FACE('',(#2515,#892),#1230,.T.); #32321=ADVANCED_FACE('',(#2516,#893),#1231,.F.); #32322=ADVANCED_FACE('',(#2517,#894),#1232,.T.); #32323=ADVANCED_FACE('',(#2518,#895),#1233,.F.); #32324=ADVANCED_FACE('',(#2519,#896),#1234,.T.); #32325=ADVANCED_FACE('',(#2520,#897),#1235,.F.); #32326=ADVANCED_FACE('',(#2521,#898),#1236,.T.); #32327=ADVANCED_FACE('',(#2522,#899),#1237,.F.); #32328=ADVANCED_FACE('',(#2523,#900),#1238,.T.); #32329=ADVANCED_FACE('',(#2524,#901),#1239,.F.); #32330=ADVANCED_FACE('',(#2525,#902),#1240,.T.); #32331=ADVANCED_FACE('',(#2526,#903),#1241,.F.); #32332=ADVANCED_FACE('',(#2527,#904),#1242,.T.); #32333=ADVANCED_FACE('',(#2528,#905),#1243,.F.); #32334=ADVANCED_FACE('',(#2529,#906),#1244,.T.); #32335=ADVANCED_FACE('',(#2530,#907),#1245,.F.); #32336=ADVANCED_FACE('',(#2531,#908),#1246,.T.); #32337=ADVANCED_FACE('',(#2532,#909),#1247,.F.); #32338=ADVANCED_FACE('',(#2533,#910),#1248,.T.); #32339=ADVANCED_FACE('',(#2534,#911),#1249,.F.); #32340=ADVANCED_FACE('',(#2535,#912),#1250,.T.); #32341=ADVANCED_FACE('',(#2536,#913),#1251,.F.); #32342=ADVANCED_FACE('',(#2537,#914),#1252,.T.); #32343=ADVANCED_FACE('',(#2538,#915),#1253,.F.); #32344=ADVANCED_FACE('',(#2539,#916),#1254,.T.); #32345=ADVANCED_FACE('',(#2540,#917),#1255,.F.); #32346=ADVANCED_FACE('',(#2541,#918),#1256,.T.); #32347=ADVANCED_FACE('',(#2542,#919),#1257,.F.); #32348=ADVANCED_FACE('',(#2543),#1258,.F.); #32349=ADVANCED_FACE('',(#2544,#920),#1259,.T.); #32350=ADVANCED_FACE('',(#2545,#921),#1260,.F.); #32351=ADVANCED_FACE('',(#2546,#922),#1261,.T.); #32352=ADVANCED_FACE('',(#2547,#923),#1262,.F.); #32353=ADVANCED_FACE('',(#2548),#1263,.F.); #32354=ADVANCED_FACE('',(#2549),#1264,.F.); #32355=ADVANCED_FACE('',(#2550),#1265,.F.); #32356=ADVANCED_FACE('',(#2551),#1266,.F.); #32357=ADVANCED_FACE('',(#2552),#1267,.F.); #32358=ADVANCED_FACE('',(#2553),#1268,.F.); #32359=ADVANCED_FACE('',(#2554),#1269,.F.); #32360=ADVANCED_FACE('',(#2555),#1270,.F.); #32361=ADVANCED_FACE('',(#2556),#1271,.F.); #32362=ADVANCED_FACE('',(#2557),#1272,.F.); #32363=ADVANCED_FACE('',(#2558),#1273,.F.); #32364=ADVANCED_FACE('',(#2559),#1274,.F.); #32365=ADVANCED_FACE('',(#2560),#1275,.F.); #32366=ADVANCED_FACE('',(#2561),#1276,.F.); #32367=ADVANCED_FACE('',(#2562),#1277,.F.); #32368=ADVANCED_FACE('',(#2563),#1278,.F.); #32369=ADVANCED_FACE('',(#2564),#1279,.F.); #32370=ADVANCED_FACE('',(#2565),#1280,.F.); #32371=ADVANCED_FACE('',(#2566),#1281,.F.); #32372=ADVANCED_FACE('',(#2567),#1282,.F.); #32373=ADVANCED_FACE('',(#2568),#1283,.F.); #32374=ADVANCED_FACE('',(#2569),#1284,.F.); #32375=ADVANCED_FACE('',(#2570),#1285,.F.); #32376=ADVANCED_FACE('',(#2571),#1286,.F.); #32377=ADVANCED_FACE('',(#2572),#1287,.F.); #32378=ADVANCED_FACE('',(#2573),#1288,.F.); #32379=ADVANCED_FACE('',(#2574),#1289,.F.); #32380=ADVANCED_FACE('',(#2575),#1290,.F.); #32381=ADVANCED_FACE('',(#2576),#1291,.F.); #32382=ADVANCED_FACE('',(#2577),#1292,.F.); #32383=ADVANCED_FACE('',(#2578),#1293,.F.); #32384=ADVANCED_FACE('',(#2579),#1294,.F.); #32385=ADVANCED_FACE('',(#2580),#1295,.F.); #32386=ADVANCED_FACE('',(#2581),#1296,.F.); #32387=ADVANCED_FACE('',(#2582),#1297,.F.); #32388=ADVANCED_FACE('',(#2583),#1298,.F.); #32389=ADVANCED_FACE('',(#2584),#1299,.F.); #32390=ADVANCED_FACE('',(#2585),#1300,.F.); #32391=ADVANCED_FACE('',(#2586),#1301,.F.); #32392=ADVANCED_FACE('',(#2587),#1302,.F.); #32393=ADVANCED_FACE('',(#2588),#31785,.F.); #32394=ADVANCED_FACE('',(#2589),#31786,.F.); #32395=ADVANCED_FACE('',(#2590),#31787,.F.); #32396=ADVANCED_FACE('',(#2591),#31788,.F.); #32397=ADVANCED_FACE('',(#2592),#31789,.F.); #32398=ADVANCED_FACE('',(#2593),#31790,.F.); #32399=ADVANCED_FACE('',(#2594),#31791,.F.); #32400=ADVANCED_FACE('',(#2595),#31792,.F.); #32401=ADVANCED_FACE('',(#2596),#31793,.F.); #32402=ADVANCED_FACE('',(#2597),#31794,.F.); #32403=ADVANCED_FACE('',(#2598),#31795,.F.); #32404=ADVANCED_FACE('',(#2599),#31796,.F.); #32405=ADVANCED_FACE('',(#2600),#31797,.F.); #32406=ADVANCED_FACE('',(#2601),#31798,.F.); #32407=ADVANCED_FACE('',(#2602),#31799,.F.); #32408=ADVANCED_FACE('',(#2603),#31800,.F.); #32409=ADVANCED_FACE('',(#2604),#31801,.F.); #32410=ADVANCED_FACE('',(#2605),#31802,.F.); #32411=ADVANCED_FACE('',(#2606),#31803,.F.); #32412=ADVANCED_FACE('',(#2607),#31804,.F.); #32413=ADVANCED_FACE('',(#2608),#31805,.F.); #32414=ADVANCED_FACE('',(#2609),#31806,.F.); #32415=ADVANCED_FACE('',(#2610),#31807,.F.); #32416=ADVANCED_FACE('',(#2611),#31808,.F.); #32417=ADVANCED_FACE('',(#2612),#31809,.F.); #32418=ADVANCED_FACE('',(#2613),#31810,.F.); #32419=ADVANCED_FACE('',(#2614),#1303,.F.); #32420=ADVANCED_FACE('',(#2615),#1304,.F.); #32421=ADVANCED_FACE('',(#2616),#31811,.T.); #32422=ADVANCED_FACE('',(#2617),#31812,.T.); #32423=ADVANCED_FACE('',(#2618),#1305,.F.); #32424=ADVANCED_FACE('',(#2619),#1306,.F.); #32425=ADVANCED_FACE('',(#2620),#1307,.F.); #32426=ADVANCED_FACE('',(#2621),#1308,.F.); #32427=ADVANCED_FACE('',(#2622),#1309,.F.); #32428=ADVANCED_FACE('',(#2623),#1310,.F.); #32429=ADVANCED_FACE('',(#2624),#1311,.F.); #32430=ADVANCED_FACE('',(#2625),#1312,.F.); #32431=ADVANCED_FACE('',(#2626),#1313,.F.); #32432=ADVANCED_FACE('',(#2627),#1314,.F.); #32433=ADVANCED_FACE('',(#2628),#1315,.F.); #32434=ADVANCED_FACE('',(#2629),#1316,.F.); #32435=ADVANCED_FACE('',(#2630),#1317,.F.); #32436=ADVANCED_FACE('',(#2631),#1318,.F.); #32437=ADVANCED_FACE('',(#2632),#1319,.F.); #32438=ADVANCED_FACE('',(#2633),#1320,.F.); #32439=ADVANCED_FACE('',(#2634),#1321,.F.); #32440=ADVANCED_FACE('',(#2635),#1322,.F.); #32441=ADVANCED_FACE('',(#2636),#1323,.F.); #32442=ADVANCED_FACE('',(#2637),#1324,.F.); #32443=ADVANCED_FACE('',(#2638),#1325,.F.); #32444=ADVANCED_FACE('',(#2639,#924),#1326,.T.); #32445=ADVANCED_FACE('',(#2640,#925),#1327,.F.); #32446=ADVANCED_FACE('',(#2641,#926),#1328,.T.); #32447=ADVANCED_FACE('',(#2642,#927),#1329,.F.); #32448=ADVANCED_FACE('',(#2643,#928),#1330,.T.); #32449=ADVANCED_FACE('',(#2644,#929),#1331,.F.); #32450=ADVANCED_FACE('',(#2645,#930),#1332,.T.); #32451=ADVANCED_FACE('',(#2646,#931),#1333,.F.); #32452=ADVANCED_FACE('',(#2647,#932),#1334,.T.); #32453=ADVANCED_FACE('',(#2648,#933),#1335,.F.); #32454=ADVANCED_FACE('',(#2649,#934),#1336,.T.); #32455=ADVANCED_FACE('',(#2650,#935),#1337,.F.); #32456=ADVANCED_FACE('',(#2651,#936),#1338,.T.); #32457=ADVANCED_FACE('',(#2652,#937),#1339,.F.); #32458=ADVANCED_FACE('',(#2653,#938),#1340,.T.); #32459=ADVANCED_FACE('',(#2654,#939),#1341,.F.); #32460=ADVANCED_FACE('',(#2655,#940),#1342,.T.); #32461=ADVANCED_FACE('',(#2656,#941),#1343,.F.); #32462=ADVANCED_FACE('',(#2657,#942),#1344,.T.); #32463=ADVANCED_FACE('',(#2658,#943),#1345,.F.); #32464=ADVANCED_FACE('',(#2659,#944),#1346,.T.); #32465=ADVANCED_FACE('',(#2660,#945),#1347,.F.); #32466=ADVANCED_FACE('',(#2661,#946),#1348,.T.); #32467=ADVANCED_FACE('',(#2662,#947),#1349,.F.); #32468=ADVANCED_FACE('',(#2663,#948),#1350,.T.); #32469=ADVANCED_FACE('',(#2664,#949),#1351,.F.); #32470=ADVANCED_FACE('',(#2665,#950),#1352,.T.); #32471=ADVANCED_FACE('',(#2666,#951),#1353,.F.); #32472=ADVANCED_FACE('',(#2667,#952),#1354,.T.); #32473=ADVANCED_FACE('',(#2668,#953),#1355,.F.); #32474=ADVANCED_FACE('',(#2669,#954),#1356,.T.); #32475=ADVANCED_FACE('',(#2670,#955),#1357,.F.); #32476=ADVANCED_FACE('',(#2671,#956),#1358,.T.); #32477=ADVANCED_FACE('',(#2672,#957),#1359,.F.); #32478=ADVANCED_FACE('',(#2673,#958),#1360,.T.); #32479=ADVANCED_FACE('',(#2674,#959),#1361,.F.); #32480=ADVANCED_FACE('',(#2675,#960),#1362,.T.); #32481=ADVANCED_FACE('',(#2676,#961),#1363,.F.); #32482=ADVANCED_FACE('',(#2677,#962),#1364,.T.); #32483=ADVANCED_FACE('',(#2678,#963),#1365,.F.); #32484=ADVANCED_FACE('',(#2679,#964),#1366,.T.); #32485=ADVANCED_FACE('',(#2680,#965),#1367,.F.); #32486=ADVANCED_FACE('',(#2681),#1368,.F.); #32487=ADVANCED_FACE('',(#2682,#966),#1369,.T.); #32488=ADVANCED_FACE('',(#2683,#967),#1370,.F.); #32489=ADVANCED_FACE('',(#2684,#968),#1371,.T.); #32490=ADVANCED_FACE('',(#2685,#969),#1372,.F.); #32491=ADVANCED_FACE('',(#2686,#970),#1373,.T.); #32492=ADVANCED_FACE('',(#2687,#971),#1374,.F.); #32493=ADVANCED_FACE('',(#2688,#972,#973,#974,#975),#1375,.T.); #32494=ADVANCED_FACE('',(#2689,#976,#977,#978,#979),#1376,.F.); #32495=ADVANCED_FACE('',(#2690),#1377,.F.); #32496=ADVANCED_FACE('',(#2691),#1378,.F.); #32497=ADVANCED_FACE('',(#2692),#1379,.F.); #32498=ADVANCED_FACE('',(#2693),#1380,.F.); #32499=ADVANCED_FACE('',(#2694),#1381,.F.); #32500=ADVANCED_FACE('',(#2695),#1382,.F.); #32501=ADVANCED_FACE('',(#2696),#1383,.F.); #32502=ADVANCED_FACE('',(#2697),#1384,.F.); #32503=ADVANCED_FACE('',(#2698),#1385,.F.); #32504=ADVANCED_FACE('',(#2699),#1386,.F.); #32505=ADVANCED_FACE('',(#2700),#1387,.F.); #32506=ADVANCED_FACE('',(#2701),#1388,.F.); #32507=ADVANCED_FACE('',(#2702),#1389,.F.); #32508=ADVANCED_FACE('',(#2703),#1390,.F.); #32509=ADVANCED_FACE('',(#2704),#1391,.F.); #32510=ADVANCED_FACE('',(#2705),#1392,.F.); #32511=ADVANCED_FACE('',(#2706),#1393,.F.); #32512=ADVANCED_FACE('',(#2707),#1394,.F.); #32513=ADVANCED_FACE('',(#2708),#1395,.F.); #32514=ADVANCED_FACE('',(#2709),#1396,.F.); #32515=ADVANCED_FACE('',(#2710),#1397,.F.); #32516=ADVANCED_FACE('',(#2711),#1398,.F.); #32517=ADVANCED_FACE('',(#2712),#1399,.F.); #32518=ADVANCED_FACE('',(#2713),#1400,.F.); #32519=ADVANCED_FACE('',(#2714),#1401,.F.); #32520=ADVANCED_FACE('',(#2715),#1402,.F.); #32521=ADVANCED_FACE('',(#2716),#1403,.F.); #32522=ADVANCED_FACE('',(#2717),#1404,.F.); #32523=ADVANCED_FACE('',(#2718),#1405,.F.); #32524=ADVANCED_FACE('',(#2719),#1406,.F.); #32525=ADVANCED_FACE('',(#2720),#1407,.F.); #32526=ADVANCED_FACE('',(#2721),#1408,.F.); #32527=ADVANCED_FACE('',(#2722),#1409,.F.); #32528=ADVANCED_FACE('',(#2723),#1410,.F.); #32529=ADVANCED_FACE('',(#2724),#1411,.F.); #32530=ADVANCED_FACE('',(#2725),#1412,.F.); #32531=ADVANCED_FACE('',(#2726),#1413,.F.); #32532=ADVANCED_FACE('',(#2727),#1414,.F.); #32533=ADVANCED_FACE('',(#2728),#1415,.F.); #32534=ADVANCED_FACE('',(#2729),#1416,.F.); #32535=ADVANCED_FACE('',(#2730),#1417,.F.); #32536=ADVANCED_FACE('',(#2731),#1418,.F.); #32537=ADVANCED_FACE('',(#2732),#1419,.F.); #32538=ADVANCED_FACE('',(#2733),#1420,.F.); #32539=ADVANCED_FACE('',(#2734),#1421,.F.); #32540=ADVANCED_FACE('',(#2735),#1422,.F.); #32541=ADVANCED_FACE('',(#2736),#31813,.F.); #32542=ADVANCED_FACE('',(#2737),#31814,.F.); #32543=ADVANCED_FACE('',(#2738),#31815,.F.); #32544=ADVANCED_FACE('',(#2739),#31816,.F.); #32545=ADVANCED_FACE('',(#2740),#31817,.F.); #32546=ADVANCED_FACE('',(#2741),#31818,.F.); #32547=ADVANCED_FACE('',(#2742),#31819,.F.); #32548=ADVANCED_FACE('',(#2743),#31820,.F.); #32549=ADVANCED_FACE('',(#2744),#31821,.F.); #32550=ADVANCED_FACE('',(#2745),#31822,.F.); #32551=ADVANCED_FACE('',(#2746),#31823,.F.); #32552=ADVANCED_FACE('',(#2747),#31824,.F.); #32553=ADVANCED_FACE('',(#2748),#31825,.F.); #32554=ADVANCED_FACE('',(#2749),#31826,.F.); #32555=ADVANCED_FACE('',(#2750),#31827,.F.); #32556=ADVANCED_FACE('',(#2751),#31828,.F.); #32557=ADVANCED_FACE('',(#2752),#31829,.F.); #32558=ADVANCED_FACE('',(#2753),#31830,.F.); #32559=ADVANCED_FACE('',(#2754),#31831,.F.); #32560=ADVANCED_FACE('',(#2755),#31832,.F.); #32561=ADVANCED_FACE('',(#2756),#1423,.F.); #32562=ADVANCED_FACE('',(#2757),#1424,.F.); #32563=ADVANCED_FACE('',(#2758),#31833,.T.); #32564=ADVANCED_FACE('',(#2759),#1425,.F.); #32565=ADVANCED_FACE('',(#2760),#31834,.T.); #32566=ADVANCED_FACE('',(#2761),#1426,.F.); #32567=ADVANCED_FACE('',(#2762),#31835,.T.); #32568=ADVANCED_FACE('',(#2763),#1427,.F.); #32569=ADVANCED_FACE('',(#2764),#31836,.T.); #32570=ADVANCED_FACE('',(#2765),#1428,.F.); #32571=ADVANCED_FACE('',(#2766),#31837,.T.); #32572=ADVANCED_FACE('',(#2767),#1429,.F.); #32573=ADVANCED_FACE('',(#2768),#31838,.T.); #32574=ADVANCED_FACE('',(#2769),#1430,.F.); #32575=ADVANCED_FACE('',(#2770,#980),#1431,.T.); #32576=ADVANCED_FACE('',(#2771),#1432,.T.); #32577=ADVANCED_FACE('',(#2772),#31839,.F.); #32578=ADVANCED_FACE('',(#2773),#1433,.T.); #32579=ADVANCED_FACE('',(#2774),#31840,.F.); #32580=ADVANCED_FACE('',(#2775),#1434,.T.); #32581=ADVANCED_FACE('',(#2776),#31841,.F.); #32582=ADVANCED_FACE('',(#2777),#1435,.T.); #32583=ADVANCED_FACE('',(#2778),#31842,.F.); #32584=ADVANCED_FACE('',(#2779),#1436,.T.); #32585=ADVANCED_FACE('',(#2780),#31843,.F.); #32586=ADVANCED_FACE('',(#2781),#1437,.T.); #32587=ADVANCED_FACE('',(#2782),#31844,.F.); #32588=ADVANCED_FACE('',(#2783),#1438,.T.); #32589=ADVANCED_FACE('',(#2784),#1439,.F.); #32590=ADVANCED_FACE('',(#2785),#1440,.F.); #32591=ADVANCED_FACE('',(#2786),#31845,.T.); #32592=ADVANCED_FACE('',(#2787),#1441,.F.); #32593=ADVANCED_FACE('',(#2788),#1442,.F.); #32594=ADVANCED_FACE('',(#2789),#1443,.F.); #32595=ADVANCED_FACE('',(#2790),#31846,.F.); #32596=ADVANCED_FACE('',(#2791),#1444,.F.); #32597=ADVANCED_FACE('',(#2792),#1445,.F.); #32598=ADVANCED_FACE('',(#2793),#1446,.T.); #32599=ADVANCED_FACE('',(#2794),#1447,.F.); #32600=ADVANCED_FACE('',(#2795),#1448,.F.); #32601=ADVANCED_FACE('',(#2796),#31847,.T.); #32602=ADVANCED_FACE('',(#2797),#1449,.F.); #32603=ADVANCED_FACE('',(#2798),#1450,.F.); #32604=ADVANCED_FACE('',(#2799),#1451,.F.); #32605=ADVANCED_FACE('',(#2800),#31848,.F.); #32606=ADVANCED_FACE('',(#2801),#1452,.F.); #32607=ADVANCED_FACE('',(#2802),#1453,.F.); #32608=ADVANCED_FACE('',(#2803),#1454,.T.); #32609=ADVANCED_FACE('',(#2804),#1455,.F.); #32610=ADVANCED_FACE('',(#2805),#1456,.T.); #32611=ADVANCED_FACE('',(#2806),#31849,.F.); #32612=ADVANCED_FACE('',(#2807),#1457,.T.); #32613=ADVANCED_FACE('',(#2808),#1458,.T.); #32614=ADVANCED_FACE('',(#2809),#1459,.T.); #32615=ADVANCED_FACE('',(#2810),#31850,.T.); #32616=ADVANCED_FACE('',(#2811),#1460,.T.); #32617=ADVANCED_FACE('',(#2812),#1461,.T.); #32618=ADVANCED_FACE('',(#2813),#1462,.T.); #32619=ADVANCED_FACE('',(#2814),#1463,.F.); #32620=ADVANCED_FACE('',(#2815),#1464,.T.); #32621=ADVANCED_FACE('',(#2816),#31851,.F.); #32622=ADVANCED_FACE('',(#2817),#1465,.T.); #32623=ADVANCED_FACE('',(#2818),#1466,.T.); #32624=ADVANCED_FACE('',(#2819),#1467,.T.); #32625=ADVANCED_FACE('',(#2820),#31852,.T.); #32626=ADVANCED_FACE('',(#2821),#1468,.T.); #32627=ADVANCED_FACE('',(#2822),#1469,.T.); #32628=ADVANCED_FACE('',(#2823),#31853,.T.); #32629=ADVANCED_FACE('',(#2824),#460,.T.); #32630=ADVANCED_FACE('',(#2825),#461,.T.); #32631=ADVANCED_FACE('',(#2826),#31854,.T.); #32632=ADVANCED_FACE('',(#2827),#1470,.T.); #32633=ADVANCED_FACE('',(#2828),#1471,.F.); #32634=ADVANCED_FACE('',(#2829),#31855,.T.); #32635=ADVANCED_FACE('',(#2830),#1472,.F.); #32636=ADVANCED_FACE('',(#2831),#31856,.T.); #32637=ADVANCED_FACE('',(#2832),#1473,.T.); #32638=ADVANCED_FACE('',(#2833),#1474,.F.); #32639=ADVANCED_FACE('',(#2834),#1475,.F.); #32640=ADVANCED_FACE('',(#2835),#1476,.F.); #32641=ADVANCED_FACE('',(#2836),#1477,.F.); #32642=ADVANCED_FACE('',(#2837,#981),#1478,.F.); #32643=ADVANCED_FACE('',(#2838),#1479,.T.); #32644=ADVANCED_FACE('',(#2839),#1480,.F.); #32645=ADVANCED_FACE('',(#2840),#1481,.F.); #32646=ADVANCED_FACE('',(#2841),#1482,.F.); #32647=ADVANCED_FACE('',(#2842),#1483,.F.); #32648=ADVANCED_FACE('',(#2843),#1484,.F.); #32649=ADVANCED_FACE('',(#2844),#1485,.F.); #32650=ADVANCED_FACE('',(#2845),#1486,.F.); #32651=ADVANCED_FACE('',(#2846),#1487,.F.); #32652=ADVANCED_FACE('',(#2847),#1488,.T.); #32653=ADVANCED_FACE('',(#2848),#1489,.F.); #32654=ADVANCED_FACE('',(#2849),#1490,.F.); #32655=ADVANCED_FACE('',(#2850),#1491,.F.); #32656=ADVANCED_FACE('',(#2851),#1492,.F.); #32657=ADVANCED_FACE('',(#2852),#1493,.F.); #32658=ADVANCED_FACE('',(#2853),#1494,.F.); #32659=ADVANCED_FACE('',(#2854),#1495,.T.); #32660=ADVANCED_FACE('',(#2855),#1496,.T.); #32661=ADVANCED_FACE('',(#2856),#1497,.T.); #32662=ADVANCED_FACE('',(#2857),#1498,.T.); #32663=ADVANCED_FACE('',(#2858),#1499,.T.); #32664=ADVANCED_FACE('',(#2859),#1500,.T.); #32665=ADVANCED_FACE('',(#2860),#1501,.T.); #32666=ADVANCED_FACE('',(#2861),#1502,.T.); #32667=ADVANCED_FACE('',(#2862),#1503,.T.); #32668=ADVANCED_FACE('',(#2863),#1504,.F.); #32669=ADVANCED_FACE('',(#2864),#1505,.F.); #32670=ADVANCED_FACE('',(#2865),#1506,.F.); #32671=ADVANCED_FACE('',(#2866),#1507,.F.); #32672=ADVANCED_FACE('',(#2867),#1508,.F.); #32673=ADVANCED_FACE('',(#2868),#1509,.T.); #32674=ADVANCED_FACE('',(#2869),#1510,.F.); #32675=ADVANCED_FACE('',(#2870),#1511,.F.); #32676=ADVANCED_FACE('',(#2871),#1512,.F.); #32677=ADVANCED_FACE('',(#2872),#1513,.F.); #32678=ADVANCED_FACE('',(#2873),#1514,.F.); #32679=ADVANCED_FACE('',(#2874),#1515,.T.); #32680=ADVANCED_FACE('',(#2875),#1516,.F.); #32681=ADVANCED_FACE('',(#2876),#1517,.F.); #32682=ADVANCED_FACE('',(#2877),#1518,.F.); #32683=ADVANCED_FACE('',(#2878),#1519,.F.); #32684=ADVANCED_FACE('',(#2879),#1520,.F.); #32685=ADVANCED_FACE('',(#2880),#1521,.T.); #32686=ADVANCED_FACE('',(#2881),#1522,.F.); #32687=ADVANCED_FACE('',(#2882),#1523,.F.); #32688=ADVANCED_FACE('',(#2883),#1524,.F.); #32689=ADVANCED_FACE('',(#2884),#1525,.F.); #32690=ADVANCED_FACE('',(#2885),#1526,.F.); #32691=ADVANCED_FACE('',(#2886),#1527,.T.); #32692=ADVANCED_FACE('',(#2887),#1528,.F.); #32693=ADVANCED_FACE('',(#2888),#1529,.F.); #32694=ADVANCED_FACE('',(#2889),#1530,.F.); #32695=ADVANCED_FACE('',(#2890),#1531,.F.); #32696=ADVANCED_FACE('',(#2891),#1532,.F.); #32697=ADVANCED_FACE('',(#2892),#1533,.T.); #32698=ADVANCED_FACE('',(#2893),#1534,.F.); #32699=ADVANCED_FACE('',(#2894),#1535,.F.); #32700=ADVANCED_FACE('',(#2895),#1536,.F.); #32701=ADVANCED_FACE('',(#2896),#1537,.F.); #32702=ADVANCED_FACE('',(#2897),#1538,.F.); #32703=ADVANCED_FACE('',(#2898),#1539,.T.); #32704=ADVANCED_FACE('',(#2899),#1540,.F.); #32705=ADVANCED_FACE('',(#2900),#1541,.F.); #32706=ADVANCED_FACE('',(#2901),#1542,.F.); #32707=ADVANCED_FACE('',(#2902),#1543,.F.); #32708=ADVANCED_FACE('',(#2903),#1544,.F.); #32709=ADVANCED_FACE('',(#2904),#1545,.T.); #32710=ADVANCED_FACE('',(#2905),#1546,.F.); #32711=ADVANCED_FACE('',(#2906),#1547,.F.); #32712=ADVANCED_FACE('',(#2907),#1548,.F.); #32713=ADVANCED_FACE('',(#2908),#1549,.F.); #32714=ADVANCED_FACE('',(#2909),#1550,.F.); #32715=ADVANCED_FACE('',(#2910),#1551,.F.); #32716=ADVANCED_FACE('',(#2911,#982,#983),#1552,.T.); #32717=ADVANCED_FACE('',(#2912),#1553,.T.); #32718=ADVANCED_FACE('',(#2913),#1554,.T.); #32719=ADVANCED_FACE('',(#2914),#1555,.T.); #32720=ADVANCED_FACE('',(#2915),#1556,.T.); #32721=ADVANCED_FACE('',(#2916),#1557,.T.); #32722=ADVANCED_FACE('',(#2917),#1558,.T.); #32723=ADVANCED_FACE('',(#2918),#1559,.T.); #32724=ADVANCED_FACE('',(#2919),#1560,.T.); #32725=ADVANCED_FACE('',(#2920),#1561,.T.); #32726=ADVANCED_FACE('',(#2921),#1562,.T.); #32727=ADVANCED_FACE('',(#2922),#1563,.T.); #32728=ADVANCED_FACE('',(#2923),#1564,.T.); #32729=ADVANCED_FACE('',(#2924),#1565,.T.); #32730=ADVANCED_FACE('',(#2925,#984,#985),#1566,.T.); #32731=ADVANCED_FACE('',(#2926),#1567,.T.); #32732=ADVANCED_FACE('',(#2927),#1568,.T.); #32733=ADVANCED_FACE('',(#2928),#1569,.T.); #32734=ADVANCED_FACE('',(#2929),#1570,.T.); #32735=ADVANCED_FACE('',(#2930,#986),#1571,.T.); #32736=ADVANCED_FACE('',(#2931),#1572,.F.); #32737=ADVANCED_FACE('',(#2932),#1573,.F.); #32738=ADVANCED_FACE('',(#2933),#1574,.T.); #32739=ADVANCED_FACE('',(#2934),#1575,.T.); #32740=ADVANCED_FACE('',(#2935,#987),#1576,.T.); #32741=ADVANCED_FACE('',(#2936),#1577,.T.); #32742=ADVANCED_FACE('',(#2937),#31857,.F.); #32743=ADVANCED_FACE('',(#2938),#1578,.T.); #32744=ADVANCED_FACE('',(#2939),#31858,.F.); #32745=ADVANCED_FACE('',(#2940),#1579,.T.); #32746=ADVANCED_FACE('',(#2941),#31859,.F.); #32747=ADVANCED_FACE('',(#2942),#1580,.T.); #32748=ADVANCED_FACE('',(#2943),#1581,.T.); #32749=ADVANCED_FACE('',(#2944),#337,.F.); #32750=ADVANCED_FACE('',(#2945),#31860,.F.); #32751=ADVANCED_FACE('',(#2946),#338,.F.); #32752=ADVANCED_FACE('',(#2947),#31861,.T.); #32753=ADVANCED_FACE('',(#2948),#259,.F.); #32754=ADVANCED_FACE('',(#2949),#1582,.F.); #32755=ADVANCED_FACE('',(#2950),#1583,.F.); #32756=ADVANCED_FACE('',(#2951),#1584,.T.); #32757=ADVANCED_FACE('',(#2952),#260,.F.); #32758=ADVANCED_FACE('',(#2953),#1585,.T.); #32759=ADVANCED_FACE('',(#2954),#31862,.T.); #32760=ADVANCED_FACE('',(#2955),#261,.F.); #32761=ADVANCED_FACE('',(#2956),#31863,.F.); #32762=ADVANCED_FACE('',(#2957),#262,.F.); #32763=ADVANCED_FACE('',(#2958),#1586,.T.); #32764=ADVANCED_FACE('',(#2959),#31864,.T.); #32765=ADVANCED_FACE('',(#2960),#1587,.F.); #32766=ADVANCED_FACE('',(#2961),#31865,.T.); #32767=ADVANCED_FACE('',(#2962),#1588,.T.); #32768=ADVANCED_FACE('',(#2963),#1589,.F.); #32769=ADVANCED_FACE('',(#2964),#1590,.F.); #32770=ADVANCED_FACE('',(#2965),#31866,.F.); #32771=ADVANCED_FACE('',(#2966),#1591,.F.); #32772=ADVANCED_FACE('',(#2967),#1592,.F.); #32773=ADVANCED_FACE('',(#2968),#1593,.F.); #32774=ADVANCED_FACE('',(#2969),#1594,.F.); #32775=ADVANCED_FACE('',(#2970),#1595,.F.); #32776=ADVANCED_FACE('',(#2971),#1596,.F.); #32777=ADVANCED_FACE('',(#2972),#1597,.F.); #32778=ADVANCED_FACE('',(#2973,#988,#989,#990,#991),#1598,.T.); #32779=ADVANCED_FACE('',(#2974),#1599,.F.); #32780=ADVANCED_FACE('',(#2975),#1600,.F.); #32781=ADVANCED_FACE('',(#2976),#1601,.T.); #32782=ADVANCED_FACE('',(#2977),#1602,.F.); #32783=ADVANCED_FACE('',(#2978),#1603,.T.); #32784=ADVANCED_FACE('',(#2979),#1604,.T.); #32785=ADVANCED_FACE('',(#2980),#1605,.T.); #32786=ADVANCED_FACE('',(#2981),#1606,.T.); #32787=ADVANCED_FACE('',(#2982,#992),#1607,.T.); #32788=ADVANCED_FACE('',(#2983),#1608,.T.); #32789=ADVANCED_FACE('',(#2984,#993,#994),#1609,.T.); #32790=ADVANCED_FACE('',(#2985),#1610,.T.); #32791=ADVANCED_FACE('',(#2986),#1611,.T.); #32792=ADVANCED_FACE('',(#2987),#1612,.T.); #32793=ADVANCED_FACE('',(#2988),#1613,.F.); #32794=ADVANCED_FACE('',(#2989),#31867,.F.); #32795=ADVANCED_FACE('',(#2990,#995),#1614,.T.); #32796=ADVANCED_FACE('',(#2991),#1615,.F.); #32797=ADVANCED_FACE('',(#2992),#31868,.F.); #32798=ADVANCED_FACE('',(#2993),#1616,.F.); #32799=ADVANCED_FACE('',(#2994),#31869,.F.); #32800=ADVANCED_FACE('',(#2995),#1617,.F.); #32801=ADVANCED_FACE('',(#2996),#1618,.F.); #32802=ADVANCED_FACE('',(#2997),#339,.F.); #32803=ADVANCED_FACE('',(#2998),#31870,.T.); #32804=ADVANCED_FACE('',(#2999),#340,.F.); #32805=ADVANCED_FACE('',(#3000),#31871,.F.); #32806=ADVANCED_FACE('',(#3001),#263,.T.); #32807=ADVANCED_FACE('',(#3002),#1619,.T.); #32808=ADVANCED_FACE('',(#3003),#1620,.F.); #32809=ADVANCED_FACE('',(#3004),#1621,.F.); #32810=ADVANCED_FACE('',(#3005),#264,.T.); #32811=ADVANCED_FACE('',(#3006),#1622,.T.); #32812=ADVANCED_FACE('',(#3007),#31872,.F.); #32813=ADVANCED_FACE('',(#3008),#265,.T.); #32814=ADVANCED_FACE('',(#3009),#31873,.T.); #32815=ADVANCED_FACE('',(#3010),#266,.T.); #32816=ADVANCED_FACE('',(#3011),#1623,.F.); #32817=ADVANCED_FACE('',(#3012),#31874,.T.); #32818=ADVANCED_FACE('',(#3013),#1624,.F.); #32819=ADVANCED_FACE('',(#3014),#31875,.T.); #32820=ADVANCED_FACE('',(#3015),#1625,.T.); #32821=ADVANCED_FACE('',(#3016),#1626,.T.); #32822=ADVANCED_FACE('',(#3017),#1627,.T.); #32823=ADVANCED_FACE('',(#3018),#31876,.F.); #32824=ADVANCED_FACE('',(#3019),#31877,.T.); #32825=ADVANCED_FACE('',(#3020),#1628,.F.); #32826=ADVANCED_FACE('',(#3021),#1629,.F.); #32827=ADVANCED_FACE('',(#3022),#1630,.T.); #32828=ADVANCED_FACE('',(#3023),#31878,.T.); #32829=ADVANCED_FACE('',(#3024),#1631,.T.); #32830=ADVANCED_FACE('',(#3025),#31879,.F.); #32831=ADVANCED_FACE('',(#3026),#31880,.T.); #32832=ADVANCED_FACE('',(#3027),#1632,.T.); #32833=ADVANCED_FACE('',(#3028),#1633,.T.); #32834=ADVANCED_FACE('',(#3029),#31881,.T.); #32835=ADVANCED_FACE('',(#3030),#31882,.F.); #32836=ADVANCED_FACE('',(#3031),#1634,.F.); #32837=ADVANCED_FACE('',(#3032),#31883,.T.); #32838=ADVANCED_FACE('',(#3033),#1635,.F.); #32839=ADVANCED_FACE('',(#3034),#1636,.T.); #32840=ADVANCED_FACE('',(#3035),#1637,.T.); #32841=ADVANCED_FACE('',(#3036,#996,#997),#1638,.T.); #32842=ADVANCED_FACE('',(#3037),#1639,.T.); #32843=ADVANCED_FACE('',(#3038),#1640,.T.); #32844=ADVANCED_FACE('',(#3039),#249,.T.); #32845=ADVANCED_FACE('',(#3040),#1641,.T.); #32846=ADVANCED_FACE('',(#3041),#1642,.F.); #32847=ADVANCED_FACE('',(#3042),#1643,.F.); #32848=ADVANCED_FACE('',(#3043),#1644,.T.); #32849=ADVANCED_FACE('',(#3044),#31884,.F.); #32850=ADVANCED_FACE('',(#3045),#1645,.T.); #32851=ADVANCED_FACE('',(#3046),#31885,.T.); #32852=ADVANCED_FACE('',(#3047),#31886,.F.); #32853=ADVANCED_FACE('',(#3048),#1646,.T.); #32854=ADVANCED_FACE('',(#3049),#31887,.T.); #32855=ADVANCED_FACE('',(#3050),#250,.T.); #32856=ADVANCED_FACE('',(#3051),#1647,.T.); #32857=ADVANCED_FACE('',(#3052),#31888,.T.); #32858=ADVANCED_FACE('',(#3053),#1648,.T.); #32859=ADVANCED_FACE('',(#3054),#31889,.F.); #32860=ADVANCED_FACE('',(#3055),#1649,.T.); #32861=ADVANCED_FACE('',(#3056),#31890,.F.); #32862=ADVANCED_FACE('',(#3057),#1650,.T.); #32863=ADVANCED_FACE('',(#3058),#31891,.T.); #32864=ADVANCED_FACE('',(#3059),#1651,.T.); #32865=ADVANCED_FACE('',(#3060),#31892,.F.); #32866=ADVANCED_FACE('',(#3061,#998,#999),#1652,.F.); #32867=ADVANCED_FACE('',(#3062),#1653,.T.); #32868=ADVANCED_FACE('',(#3063),#31893,.F.); #32869=ADVANCED_FACE('',(#3064),#1654,.T.); #32870=ADVANCED_FACE('',(#3065),#31894,.F.); #32871=ADVANCED_FACE('',(#3066),#1655,.T.); #32872=ADVANCED_FACE('',(#3067),#1656,.T.); #32873=ADVANCED_FACE('',(#3068),#31895,.F.); #32874=ADVANCED_FACE('',(#3069),#31896,.F.); #32875=ADVANCED_FACE('',(#3070),#1657,.T.); #32876=ADVANCED_FACE('',(#3071),#31897,.T.); #32877=ADVANCED_FACE('',(#3072),#1658,.F.); #32878=ADVANCED_FACE('',(#3073),#31898,.F.); #32879=ADVANCED_FACE('',(#3074),#1659,.F.); #32880=ADVANCED_FACE('',(#3075),#31899,.T.); #32881=ADVANCED_FACE('',(#3076),#1660,.F.); #32882=ADVANCED_FACE('',(#3077),#31900,.T.); #32883=ADVANCED_FACE('',(#3078),#1661,.F.); #32884=ADVANCED_FACE('',(#3079),#1662,.F.); #32885=ADVANCED_FACE('',(#3080),#31901,.T.); #32886=ADVANCED_FACE('',(#3081),#1663,.F.); #32887=ADVANCED_FACE('',(#3082),#31902,.F.); #32888=ADVANCED_FACE('',(#3083),#31903,.F.); #32889=ADVANCED_FACE('',(#3084),#1664,.F.); #32890=ADVANCED_FACE('',(#3085),#31904,.F.); #32891=ADVANCED_FACE('',(#3086),#1665,.F.); #32892=ADVANCED_FACE('',(#3087),#31905,.F.); #32893=ADVANCED_FACE('',(#3088),#1666,.F.); #32894=ADVANCED_FACE('',(#3089),#1667,.F.); #32895=ADVANCED_FACE('',(#3090),#31906,.F.); #32896=ADVANCED_FACE('',(#3091),#1668,.T.); #32897=ADVANCED_FACE('',(#3092),#31907,.T.); #32898=ADVANCED_FACE('',(#3093),#1669,.T.); #32899=ADVANCED_FACE('',(#3094),#31908,.T.); #32900=ADVANCED_FACE('',(#3095),#1670,.T.); #32901=ADVANCED_FACE('',(#3096),#1671,.F.); #32902=ADVANCED_FACE('',(#3097),#31909,.F.); #32903=ADVANCED_FACE('',(#3098),#1672,.T.); #32904=ADVANCED_FACE('',(#3099),#31910,.T.); #32905=ADVANCED_FACE('',(#3100),#31911,.F.); #32906=ADVANCED_FACE('',(#3101),#31912,.F.); #32907=ADVANCED_FACE('',(#3102),#1673,.T.); #32908=ADVANCED_FACE('',(#3103),#31913,.T.); #32909=ADVANCED_FACE('',(#3104),#1674,.T.); #32910=ADVANCED_FACE('',(#3105),#31914,.F.); #32911=ADVANCED_FACE('',(#3106),#1675,.F.); #32912=ADVANCED_FACE('',(#3107),#31915,.F.); #32913=ADVANCED_FACE('',(#3108),#31916,.T.); #32914=ADVANCED_FACE('',(#3109),#1676,.T.); #32915=ADVANCED_FACE('',(#3110),#1677,.F.); #32916=ADVANCED_FACE('',(#3111),#1678,.F.); #32917=ADVANCED_FACE('',(#3112),#1679,.F.); #32918=ADVANCED_FACE('',(#3113),#1680,.F.); #32919=ADVANCED_FACE('',(#3114),#31917,.T.); #32920=ADVANCED_FACE('',(#3115),#1681,.T.); #32921=ADVANCED_FACE('',(#3116),#31918,.T.); #32922=ADVANCED_FACE('',(#3117),#1682,.T.); #32923=ADVANCED_FACE('',(#3118),#31919,.F.); #32924=ADVANCED_FACE('',(#3119),#1683,.F.); #32925=ADVANCED_FACE('',(#3120),#1684,.F.); #32926=ADVANCED_FACE('',(#3121),#1685,.F.); #32927=ADVANCED_FACE('',(#3122),#31920,.T.); #32928=ADVANCED_FACE('',(#3123,#1000,#1001,#1002,#1003),#1686,.T.); #32929=ADVANCED_FACE('',(#3124),#1687,.F.); #32930=ADVANCED_FACE('',(#3125),#31921,.F.); #32931=ADVANCED_FACE('',(#3126),#1688,.F.); #32932=ADVANCED_FACE('',(#3127),#31922,.F.); #32933=ADVANCED_FACE('',(#3128),#1689,.F.); #32934=ADVANCED_FACE('',(#3129),#1690,.F.); #32935=ADVANCED_FACE('',(#3130),#31923,.F.); #32936=ADVANCED_FACE('',(#3131,#1004,#1005,#1006,#1007),#1691,.T.); #32937=ADVANCED_FACE('',(#3132),#1692,.F.); #32938=ADVANCED_FACE('',(#3133),#31924,.F.); #32939=ADVANCED_FACE('',(#3134),#31925,.F.); #32940=ADVANCED_FACE('',(#3135),#31926,.F.); #32941=ADVANCED_FACE('',(#3136),#1693,.T.); #32942=ADVANCED_FACE('',(#3137),#267,.T.); #32943=ADVANCED_FACE('',(#3138),#31927,.F.); #32944=ADVANCED_FACE('',(#3139),#268,.T.); #32945=ADVANCED_FACE('',(#3140),#1694,.F.); #32946=ADVANCED_FACE('',(#3141),#31928,.T.); #32947=ADVANCED_FACE('',(#3142),#1695,.T.); #32948=ADVANCED_FACE('',(#3143),#1696,.T.); #32949=ADVANCED_FACE('',(#3144),#1697,.F.); #32950=ADVANCED_FACE('',(#3145),#1698,.F.); #32951=ADVANCED_FACE('',(#3146),#269,.T.); #32952=ADVANCED_FACE('',(#3147),#31929,.F.); #32953=ADVANCED_FACE('',(#3148),#270,.T.); #32954=ADVANCED_FACE('',(#3149),#31930,.T.); #32955=ADVANCED_FACE('',(#3150),#1699,.F.); #32956=ADVANCED_FACE('',(#3151),#31931,.T.); #32957=ADVANCED_FACE('',(#3152),#1700,.F.); #32958=ADVANCED_FACE('',(#3153),#1701,.T.); #32959=ADVANCED_FACE('',(#3154),#1702,.T.); #32960=ADVANCED_FACE('',(#3155),#31932,.T.); #32961=ADVANCED_FACE('',(#3156),#1703,.T.); #32962=ADVANCED_FACE('',(#3157),#1704,.T.); #32963=ADVANCED_FACE('',(#3158),#31933,.F.); #32964=ADVANCED_FACE('',(#3159),#1705,.T.); #32965=ADVANCED_FACE('',(#3160),#31934,.F.); #32966=ADVANCED_FACE('',(#3161),#1706,.T.); #32967=ADVANCED_FACE('',(#3162),#1707,.T.); #32968=ADVANCED_FACE('',(#3163),#31935,.F.); #32969=ADVANCED_FACE('',(#3164),#1708,.T.); #32970=ADVANCED_FACE('',(#3165),#31936,.F.); #32971=ADVANCED_FACE('',(#3166),#31937,.F.); #32972=ADVANCED_FACE('',(#3167),#1709,.F.); #32973=ADVANCED_FACE('',(#3168),#271,.F.); #32974=ADVANCED_FACE('',(#3169),#31938,.T.); #32975=ADVANCED_FACE('',(#3170),#272,.F.); #32976=ADVANCED_FACE('',(#3171),#1710,.T.); #32977=ADVANCED_FACE('',(#3172),#31939,.F.); #32978=ADVANCED_FACE('',(#3173),#31940,.F.); #32979=ADVANCED_FACE('',(#3174),#1711,.T.); #32980=ADVANCED_FACE('',(#3175),#1712,.F.); #32981=ADVANCED_FACE('',(#3176),#1713,.F.); #32982=ADVANCED_FACE('',(#3177),#1714,.T.); #32983=ADVANCED_FACE('',(#3178),#273,.F.); #32984=ADVANCED_FACE('',(#3179),#31941,.T.); #32985=ADVANCED_FACE('',(#3180),#274,.F.); #32986=ADVANCED_FACE('',(#3181),#31942,.F.); #32987=ADVANCED_FACE('',(#3182),#1715,.F.); #32988=ADVANCED_FACE('',(#3183),#31943,.T.); #32989=ADVANCED_FACE('',(#3184),#1716,.T.); #32990=ADVANCED_FACE('',(#3185),#1717,.F.); #32991=ADVANCED_FACE('',(#3186),#31944,.T.); #32992=ADVANCED_FACE('',(#3187),#1718,.T.); #32993=ADVANCED_FACE('',(#3188),#1719,.F.); #32994=ADVANCED_FACE('',(#3189),#1720,.F.); #32995=ADVANCED_FACE('',(#3190),#31945,.F.); #32996=ADVANCED_FACE('',(#3191),#1721,.F.); #32997=ADVANCED_FACE('',(#3192),#31946,.F.); #32998=ADVANCED_FACE('',(#3193),#1722,.F.); #32999=ADVANCED_FACE('',(#3194),#31947,.F.); #33000=ADVANCED_FACE('',(#3195),#1723,.F.); #33001=ADVANCED_FACE('',(#3196),#31948,.F.); #33002=ADVANCED_FACE('',(#3197),#1724,.F.); #33003=ADVANCED_FACE('',(#3198),#31949,.T.); #33004=ADVANCED_FACE('',(#3199),#1725,.T.); #33005=ADVANCED_FACE('',(#3200),#31950,.T.); #33006=ADVANCED_FACE('',(#3201),#1726,.T.); #33007=ADVANCED_FACE('',(#3202),#1727,.T.); #33008=ADVANCED_FACE('',(#3203),#31951,.T.); #33009=ADVANCED_FACE('',(#3204),#1728,.T.); #33010=ADVANCED_FACE('',(#3205),#1729,.T.); #33011=ADVANCED_FACE('',(#3206),#31952,.T.); #33012=ADVANCED_FACE('',(#3207),#1730,.T.); #33013=ADVANCED_FACE('',(#3208),#31953,.T.); #33014=ADVANCED_FACE('',(#3209),#1731,.T.); #33015=ADVANCED_FACE('',(#3210),#31954,.F.); #33016=ADVANCED_FACE('',(#3211),#31955,.T.); #33017=ADVANCED_FACE('',(#3212),#1732,.T.); #33018=ADVANCED_FACE('',(#3213),#31956,.F.); #33019=ADVANCED_FACE('',(#3214),#31957,.T.); #33020=ADVANCED_FACE('',(#3215),#1733,.T.); #33021=ADVANCED_FACE('',(#3216),#1734,.T.); #33022=ADVANCED_FACE('',(#3217),#1735,.T.); #33023=ADVANCED_FACE('',(#3218),#1736,.T.); #33024=ADVANCED_FACE('',(#3219),#1737,.F.); #33025=ADVANCED_FACE('',(#3220),#1738,.T.); #33026=ADVANCED_FACE('',(#3221),#1739,.T.); #33027=ADVANCED_FACE('',(#3222),#1740,.T.); #33028=ADVANCED_FACE('',(#3223),#1741,.T.); #33029=ADVANCED_FACE('',(#3224),#1742,.T.); #33030=ADVANCED_FACE('',(#3225),#1743,.T.); #33031=ADVANCED_FACE('',(#3226),#1744,.F.); #33032=ADVANCED_FACE('',(#3227),#1745,.F.); #33033=ADVANCED_FACE('',(#3228),#1746,.T.); #33034=ADVANCED_FACE('',(#3229,#1008),#1747,.T.); #33035=ADVANCED_FACE('',(#3230),#1748,.T.); #33036=ADVANCED_FACE('',(#3231),#1749,.T.); #33037=ADVANCED_FACE('',(#3232),#1750,.T.); #33038=ADVANCED_FACE('',(#3233),#1751,.T.); #33039=ADVANCED_FACE('',(#3234),#1752,.T.); #33040=ADVANCED_FACE('',(#3235),#1753,.T.); #33041=ADVANCED_FACE('',(#3236),#1754,.F.); #33042=ADVANCED_FACE('',(#3237),#1755,.T.); #33043=ADVANCED_FACE('',(#3238),#1756,.T.); #33044=ADVANCED_FACE('',(#3239),#1757,.T.); #33045=ADVANCED_FACE('',(#3240),#1758,.T.); #33046=ADVANCED_FACE('',(#3241),#1759,.F.); #33047=ADVANCED_FACE('',(#3242),#1760,.T.); #33048=ADVANCED_FACE('',(#3243),#1761,.T.); #33049=ADVANCED_FACE('',(#3244),#1762,.F.); #33050=ADVANCED_FACE('',(#3245),#1763,.F.); #33051=ADVANCED_FACE('',(#3246),#1764,.T.); #33052=ADVANCED_FACE('',(#3247),#1765,.F.); #33053=ADVANCED_FACE('',(#3248,#1009),#1766,.T.); #33054=ADVANCED_FACE('',(#3249,#1010),#1767,.T.); #33055=ADVANCED_FACE('',(#3250,#1011),#1768,.T.); #33056=ADVANCED_FACE('',(#3251,#1012),#1769,.T.); #33057=ADVANCED_FACE('',(#3252),#1770,.T.); #33058=ADVANCED_FACE('',(#3253),#1771,.T.); #33059=ADVANCED_FACE('',(#3254),#1772,.T.); #33060=ADVANCED_FACE('',(#3255),#1773,.T.); #33061=ADVANCED_FACE('',(#3256),#1774,.T.); #33062=ADVANCED_FACE('',(#3257),#1775,.T.); #33063=ADVANCED_FACE('',(#3258),#1776,.T.); #33064=ADVANCED_FACE('',(#3259),#1777,.T.); #33065=ADVANCED_FACE('',(#3260),#1778,.T.); #33066=ADVANCED_FACE('',(#3261),#1779,.F.); #33067=ADVANCED_FACE('',(#3262),#1780,.F.); #33068=ADVANCED_FACE('',(#3263),#1781,.F.); #33069=ADVANCED_FACE('',(#3264),#1782,.F.); #33070=ADVANCED_FACE('',(#3265),#1783,.F.); #33071=ADVANCED_FACE('',(#3266),#1784,.F.); #33072=ADVANCED_FACE('',(#3267),#1785,.F.); #33073=ADVANCED_FACE('',(#3268),#1786,.F.); #33074=ADVANCED_FACE('',(#3269),#1787,.F.); #33075=ADVANCED_FACE('',(#3270),#1788,.F.); #33076=ADVANCED_FACE('',(#3271),#1789,.F.); #33077=ADVANCED_FACE('',(#3272),#1790,.F.); #33078=ADVANCED_FACE('',(#3273),#1791,.F.); #33079=ADVANCED_FACE('',(#3274),#1792,.F.); #33080=ADVANCED_FACE('',(#3275),#1793,.F.); #33081=ADVANCED_FACE('',(#3276),#1794,.F.); #33082=ADVANCED_FACE('',(#3277),#1795,.T.); #33083=ADVANCED_FACE('',(#3278),#31958,.T.); #33084=ADVANCED_FACE('',(#3279),#1796,.T.); #33085=ADVANCED_FACE('',(#3280),#31959,.F.); #33086=ADVANCED_FACE('',(#3281),#1797,.T.); #33087=ADVANCED_FACE('',(#3282),#31960,.T.); #33088=ADVANCED_FACE('',(#3283),#1798,.T.); #33089=ADVANCED_FACE('',(#3284),#31961,.T.); #33090=ADVANCED_FACE('',(#3285),#1799,.T.); #33091=ADVANCED_FACE('',(#3286),#1800,.F.); #33092=ADVANCED_FACE('',(#3287),#1801,.T.); #33093=ADVANCED_FACE('',(#3288),#1802,.F.); #33094=ADVANCED_FACE('',(#3289),#1803,.F.); #33095=ADVANCED_FACE('',(#3290),#1804,.T.); #33096=ADVANCED_FACE('',(#3291),#1805,.T.); #33097=ADVANCED_FACE('',(#3292),#31962,.F.); #33098=ADVANCED_FACE('',(#3293),#1806,.T.); #33099=ADVANCED_FACE('',(#3294),#31963,.F.); #33100=ADVANCED_FACE('',(#3295),#1807,.T.); #33101=ADVANCED_FACE('',(#3296),#31964,.T.); #33102=ADVANCED_FACE('',(#3297),#1808,.T.); #33103=ADVANCED_FACE('',(#3298),#31965,.F.); #33104=ADVANCED_FACE('',(#3299),#1809,.T.); #33105=ADVANCED_FACE('',(#3300),#1810,.F.); #33106=ADVANCED_FACE('',(#3301),#1811,.T.); #33107=ADVANCED_FACE('',(#3302),#1812,.T.); #33108=ADVANCED_FACE('',(#3303),#1813,.T.); #33109=ADVANCED_FACE('',(#3304),#31966,.T.); #33110=ADVANCED_FACE('',(#3305),#1814,.T.); #33111=ADVANCED_FACE('',(#3306),#31967,.F.); #33112=ADVANCED_FACE('',(#3307),#1815,.T.); #33113=ADVANCED_FACE('',(#3308),#31968,.T.); #33114=ADVANCED_FACE('',(#3309),#1816,.T.); #33115=ADVANCED_FACE('',(#3310),#31969,.T.); #33116=ADVANCED_FACE('',(#3311),#1817,.T.); #33117=ADVANCED_FACE('',(#3312),#1818,.F.); #33118=ADVANCED_FACE('',(#3313),#1819,.T.); #33119=ADVANCED_FACE('',(#3314),#1820,.F.); #33120=ADVANCED_FACE('',(#3315),#1821,.T.); #33121=ADVANCED_FACE('',(#3316),#1822,.T.); #33122=ADVANCED_FACE('',(#3317),#1823,.F.); #33123=ADVANCED_FACE('',(#3318),#1824,.T.); #33124=ADVANCED_FACE('',(#3319),#1825,.F.); #33125=ADVANCED_FACE('',(#3320),#1826,.T.); #33126=ADVANCED_FACE('',(#3321),#1827,.F.); #33127=ADVANCED_FACE('',(#3322),#1828,.T.); #33128=ADVANCED_FACE('',(#3323),#1829,.T.); #33129=ADVANCED_FACE('',(#3324),#1830,.F.); #33130=ADVANCED_FACE('',(#3325),#1831,.F.); #33131=ADVANCED_FACE('',(#3326),#1832,.T.); #33132=ADVANCED_FACE('',(#3327),#1833,.F.); #33133=ADVANCED_FACE('',(#3328),#1834,.T.); #33134=ADVANCED_FACE('',(#3329),#1835,.T.); #33135=ADVANCED_FACE('',(#3330),#1836,.T.); #33136=ADVANCED_FACE('',(#3331),#31970,.T.); #33137=ADVANCED_FACE('',(#3332),#1837,.T.); #33138=ADVANCED_FACE('',(#3333),#31971,.F.); #33139=ADVANCED_FACE('',(#3334),#1838,.T.); #33140=ADVANCED_FACE('',(#3335),#31972,.T.); #33141=ADVANCED_FACE('',(#3336),#1839,.T.); #33142=ADVANCED_FACE('',(#3337),#31973,.T.); #33143=ADVANCED_FACE('',(#3338),#1840,.T.); #33144=ADVANCED_FACE('',(#3339),#1841,.F.); #33145=ADVANCED_FACE('',(#3340),#1842,.T.); #33146=ADVANCED_FACE('',(#3341),#1843,.F.); #33147=ADVANCED_FACE('',(#3342),#1844,.F.); #33148=ADVANCED_FACE('',(#3343),#1845,.T.); #33149=ADVANCED_FACE('',(#3344),#31974,.F.); #33150=ADVANCED_FACE('',(#3345),#1846,.T.); #33151=ADVANCED_FACE('',(#3346),#31975,.F.); #33152=ADVANCED_FACE('',(#3347),#1847,.T.); #33153=ADVANCED_FACE('',(#3348),#31976,.T.); #33154=ADVANCED_FACE('',(#3349),#1848,.T.); #33155=ADVANCED_FACE('',(#3350),#31977,.F.); #33156=ADVANCED_FACE('',(#3351),#1849,.F.); #33157=ADVANCED_FACE('',(#3352),#1850,.T.); #33158=ADVANCED_FACE('',(#3353),#1851,.F.); #33159=ADVANCED_FACE('',(#3354),#1852,.T.); #33160=ADVANCED_FACE('',(#3355),#1853,.F.); #33161=ADVANCED_FACE('',(#3356),#1854,.T.); #33162=ADVANCED_FACE('',(#3357),#1855,.T.); #33163=ADVANCED_FACE('',(#3358),#1856,.F.); #33164=ADVANCED_FACE('',(#3359),#1857,.F.); #33165=ADVANCED_FACE('',(#3360),#1858,.T.); #33166=ADVANCED_FACE('',(#3361),#1859,.F.); #33167=ADVANCED_FACE('',(#3362),#1860,.T.); #33168=ADVANCED_FACE('',(#3363),#1861,.T.); #33169=ADVANCED_FACE('',(#3364),#1862,.T.); #33170=ADVANCED_FACE('',(#3365),#31978,.T.); #33171=ADVANCED_FACE('',(#3366),#1863,.T.); #33172=ADVANCED_FACE('',(#3367),#31979,.F.); #33173=ADVANCED_FACE('',(#3368),#1864,.T.); #33174=ADVANCED_FACE('',(#3369),#31980,.T.); #33175=ADVANCED_FACE('',(#3370),#1865,.T.); #33176=ADVANCED_FACE('',(#3371),#31981,.T.); #33177=ADVANCED_FACE('',(#3372),#1866,.T.); #33178=ADVANCED_FACE('',(#3373),#1867,.F.); #33179=ADVANCED_FACE('',(#3374),#1868,.T.); #33180=ADVANCED_FACE('',(#3375),#1869,.F.); #33181=ADVANCED_FACE('',(#3376),#1870,.F.); #33182=ADVANCED_FACE('',(#3377),#1871,.T.); #33183=ADVANCED_FACE('',(#3378),#31982,.F.); #33184=ADVANCED_FACE('',(#3379),#1872,.T.); #33185=ADVANCED_FACE('',(#3380),#31983,.F.); #33186=ADVANCED_FACE('',(#3381),#1873,.T.); #33187=ADVANCED_FACE('',(#3382),#31984,.T.); #33188=ADVANCED_FACE('',(#3383),#1874,.T.); #33189=ADVANCED_FACE('',(#3384),#31985,.F.); #33190=ADVANCED_FACE('',(#3385),#1875,.F.); #33191=ADVANCED_FACE('',(#3386),#1876,.T.); #33192=ADVANCED_FACE('',(#3387),#1877,.F.); #33193=ADVANCED_FACE('',(#3388),#1878,.F.); #33194=ADVANCED_FACE('',(#3389),#1879,.F.); #33195=ADVANCED_FACE('',(#3390),#1880,.F.); #33196=ADVANCED_FACE('',(#3391),#1881,.F.); #33197=ADVANCED_FACE('',(#3392),#1882,.T.); #33198=ADVANCED_FACE('',(#3393),#1883,.F.); #33199=ADVANCED_FACE('',(#3394),#1884,.T.); #33200=ADVANCED_FACE('',(#3395),#1885,.F.); #33201=ADVANCED_FACE('',(#3396),#1886,.F.); #33202=ADVANCED_FACE('',(#3397),#1887,.T.); #33203=ADVANCED_FACE('',(#3398),#1888,.F.); #33204=ADVANCED_FACE('',(#3399),#1889,.F.); #33205=ADVANCED_FACE('',(#3400),#1890,.T.); #33206=ADVANCED_FACE('',(#3401),#1891,.F.); #33207=ADVANCED_FACE('',(#3402),#31986,.F.); #33208=ADVANCED_FACE('',(#3403),#1892,.T.); #33209=ADVANCED_FACE('',(#3404),#31987,.F.); #33210=ADVANCED_FACE('',(#3405),#1893,.T.); #33211=ADVANCED_FACE('',(#3406),#31988,.T.); #33212=ADVANCED_FACE('',(#3407),#1894,.T.); #33213=ADVANCED_FACE('',(#3408),#31989,.F.); #33214=ADVANCED_FACE('',(#3409),#1895,.T.); #33215=ADVANCED_FACE('',(#3410),#1896,.T.); #33216=ADVANCED_FACE('',(#3411),#31990,.T.); #33217=ADVANCED_FACE('',(#3412),#1897,.T.); #33218=ADVANCED_FACE('',(#3413),#1898,.T.); #33219=ADVANCED_FACE('',(#3414),#1899,.T.); #33220=ADVANCED_FACE('',(#3415),#1900,.T.); #33221=ADVANCED_FACE('',(#3416),#1901,.F.); #33222=ADVANCED_FACE('',(#3417),#31991,.T.); #33223=ADVANCED_FACE('',(#3418),#1902,.F.); #33224=ADVANCED_FACE('',(#3419),#31992,.T.); #33225=ADVANCED_FACE('',(#3420),#1903,.F.); #33226=ADVANCED_FACE('',(#3421),#31993,.T.); #33227=ADVANCED_FACE('',(#3422),#1904,.F.); #33228=ADVANCED_FACE('',(#3423),#31994,.F.); #33229=ADVANCED_FACE('',(#3424),#31995,.T.); #33230=ADVANCED_FACE('',(#3425),#31996,.F.); #33231=ADVANCED_FACE('',(#3426),#1905,.T.); #33232=ADVANCED_FACE('',(#3427),#1906,.T.); #33233=ADVANCED_FACE('',(#3428),#1907,.T.); #33234=ADVANCED_FACE('',(#3429),#1908,.F.); #33235=ADVANCED_FACE('',(#3430),#1909,.F.); #33236=ADVANCED_FACE('',(#3431),#1910,.F.); #33237=ADVANCED_FACE('',(#3432,#1013,#1014,#1015),#1911,.F.); #33238=ADVANCED_FACE('',(#3433,#1016,#1017,#1018),#1912,.T.); #33239=ADVANCED_FACE('',(#3434),#1913,.F.); #33240=ADVANCED_FACE('',(#3435),#1914,.F.); #33241=ADVANCED_FACE('',(#3436),#1915,.F.); #33242=ADVANCED_FACE('',(#3437),#1916,.F.); #33243=ADVANCED_FACE('',(#3438),#1917,.F.); #33244=ADVANCED_FACE('',(#3439),#1918,.F.); #33245=ADVANCED_FACE('',(#3440),#1919,.F.); #33246=ADVANCED_FACE('',(#3441),#1920,.F.); #33247=ADVANCED_FACE('',(#3442),#1921,.F.); #33248=ADVANCED_FACE('',(#3443),#1922,.F.); #33249=ADVANCED_FACE('',(#3444),#1923,.F.); #33250=ADVANCED_FACE('',(#3445),#1924,.F.); #33251=ADVANCED_FACE('',(#3446),#1925,.F.); #33252=ADVANCED_FACE('',(#3447),#1926,.F.); #33253=ADVANCED_FACE('',(#3448),#1927,.F.); #33254=ADVANCED_FACE('',(#3449),#1928,.F.); #33255=ADVANCED_FACE('',(#3450),#1929,.F.); #33256=ADVANCED_FACE('',(#3451),#1930,.T.); #33257=ADVANCED_FACE('',(#3452),#1931,.T.); #33258=ADVANCED_FACE('',(#3453),#1932,.F.); #33259=ADVANCED_FACE('',(#3454),#1933,.F.); #33260=ADVANCED_FACE('',(#3455),#1934,.F.); #33261=ADVANCED_FACE('',(#3456),#1935,.T.); #33262=ADVANCED_FACE('',(#3457),#1936,.T.); #33263=ADVANCED_FACE('',(#3458),#1937,.F.); #33264=ADVANCED_FACE('',(#3459),#1938,.T.); #33265=ADVANCED_FACE('',(#3460),#1939,.F.); #33266=ADVANCED_FACE('',(#3461),#1940,.F.); #33267=ADVANCED_FACE('',(#3462),#1941,.T.); #33268=ADVANCED_FACE('',(#3463),#1942,.T.); #33269=ADVANCED_FACE('',(#3464),#1943,.T.); #33270=ADVANCED_FACE('',(#3465),#1944,.F.); #33271=ADVANCED_FACE('',(#3466),#1945,.F.); #33272=ADVANCED_FACE('',(#3467),#1946,.F.); #33273=ADVANCED_FACE('',(#3468),#1947,.T.); #33274=ADVANCED_FACE('',(#3469),#1948,.T.); #33275=ADVANCED_FACE('',(#3470),#1949,.F.); #33276=ADVANCED_FACE('',(#3471),#1950,.T.); #33277=ADVANCED_FACE('',(#3472),#1951,.F.); #33278=ADVANCED_FACE('',(#3473),#1952,.F.); #33279=ADVANCED_FACE('',(#3474),#1953,.T.); #33280=ADVANCED_FACE('',(#3475),#1954,.F.); #33281=ADVANCED_FACE('',(#3476),#1955,.F.); #33282=ADVANCED_FACE('',(#3477),#1956,.T.); #33283=ADVANCED_FACE('',(#3478),#1957,.T.); #33284=ADVANCED_FACE('',(#3479),#1958,.T.); #33285=ADVANCED_FACE('',(#3480),#1959,.F.); #33286=ADVANCED_FACE('',(#3481),#1960,.F.); #33287=ADVANCED_FACE('',(#3482),#1961,.T.); #33288=ADVANCED_FACE('',(#3483),#1962,.F.); #33289=ADVANCED_FACE('',(#3484),#1963,.T.); #33290=ADVANCED_FACE('',(#3485),#1964,.T.); #33291=ADVANCED_FACE('',(#3486),#1965,.F.); #33292=ADVANCED_FACE('',(#3487),#1966,.T.); #33293=ADVANCED_FACE('',(#3488),#1967,.T.); #33294=ADVANCED_FACE('',(#3489),#1968,.F.); #33295=ADVANCED_FACE('',(#3490),#1969,.F.); #33296=ADVANCED_FACE('',(#3491),#1970,.F.); #33297=ADVANCED_FACE('',(#3492),#1971,.T.); #33298=ADVANCED_FACE('',(#3493),#1972,.T.); #33299=ADVANCED_FACE('',(#3494),#1973,.F.); #33300=ADVANCED_FACE('',(#3495),#1974,.T.); #33301=ADVANCED_FACE('',(#3496),#1975,.F.); #33302=ADVANCED_FACE('',(#3497),#1976,.F.); #33303=ADVANCED_FACE('',(#3498),#1977,.T.); #33304=ADVANCED_FACE('',(#3499),#1978,.F.); #33305=ADVANCED_FACE('',(#3500),#1979,.F.); #33306=ADVANCED_FACE('',(#3501),#1980,.F.); #33307=ADVANCED_FACE('',(#3502),#1981,.T.); #33308=ADVANCED_FACE('',(#3503),#1982,.T.); #33309=ADVANCED_FACE('',(#3504),#1983,.T.); #33310=ADVANCED_FACE('',(#3505),#1984,.F.); #33311=ADVANCED_FACE('',(#3506),#1985,.F.); #33312=ADVANCED_FACE('',(#3507),#31997,.T.); #33313=ADVANCED_FACE('',(#3508),#31998,.T.); #33314=ADVANCED_FACE('',(#3509),#1986,.F.); #33315=ADVANCED_FACE('',(#3510),#1987,.T.); #33316=ADVANCED_FACE('',(#3511),#31999,.T.); #33317=ADVANCED_FACE('',(#3512),#32000,.T.); #33318=ADVANCED_FACE('',(#3513),#1988,.T.); #33319=ADVANCED_FACE('',(#3514,#1019),#1989,.T.); #33320=ADVANCED_FACE('',(#3515),#32001,.T.); #33321=ADVANCED_FACE('',(#3516),#1990,.F.); #33322=ADVANCED_FACE('',(#3517),#32002,.T.); #33323=ADVANCED_FACE('',(#3518),#1991,.T.); #33324=ADVANCED_FACE('',(#3519),#32003,.T.); #33325=ADVANCED_FACE('',(#3520),#1992,.T.); #33326=ADVANCED_FACE('',(#3521),#32004,.T.); #33327=ADVANCED_FACE('',(#3522),#1993,.F.); #33328=ADVANCED_FACE('',(#3523,#1020),#1994,.F.); #33329=ADVANCED_FACE('',(#3524),#1995,.F.); #33330=ADVANCED_FACE('',(#3525),#32005,.T.); #33331=ADVANCED_FACE('',(#3526),#32006,.T.); #33332=ADVANCED_FACE('',(#3527),#1996,.F.); #33333=ADVANCED_FACE('',(#3528),#1997,.T.); #33334=ADVANCED_FACE('',(#3529),#32007,.T.); #33335=ADVANCED_FACE('',(#3530),#32008,.T.); #33336=ADVANCED_FACE('',(#3531),#1998,.T.); #33337=ADVANCED_FACE('',(#3532),#1999,.T.); #33338=ADVANCED_FACE('',(#3533),#2000,.F.); #33339=ADVANCED_FACE('',(#3534),#2001,.T.); #33340=ADVANCED_FACE('',(#3535),#2002,.T.); #33341=ADVANCED_FACE('',(#3536),#2003,.T.); #33342=ADVANCED_FACE('',(#3537,#1021),#2004,.F.); #33343=ADVANCED_FACE('',(#3538,#1022),#2005,.T.); #33344=ADVANCED_FACE('',(#3539),#2006,.T.); #33345=ADVANCED_FACE('',(#3540),#2007,.T.); #33346=ADVANCED_FACE('',(#3541),#2008,.T.); #33347=ADVANCED_FACE('',(#3542),#2009,.T.); #33348=ADVANCED_FACE('',(#3543),#2010,.F.); #33349=ADVANCED_FACE('',(#3544),#2011,.F.); #33350=ADVANCED_FACE('',(#3545),#2012,.F.); #33351=ADVANCED_FACE('',(#3546),#2013,.F.); #33352=ADVANCED_FACE('',(#3547),#2014,.F.); #33353=ADVANCED_FACE('',(#3548),#2015,.F.); #33354=ADVANCED_FACE('',(#3549),#2016,.F.); #33355=ADVANCED_FACE('',(#3550),#2017,.F.); #33356=ADVANCED_FACE('',(#3551),#2018,.F.); #33357=ADVANCED_FACE('',(#3552),#2019,.F.); #33358=ADVANCED_FACE('',(#3553),#2020,.F.); #33359=ADVANCED_FACE('',(#3554,#1023),#2021,.F.); #33360=ADVANCED_FACE('',(#3555),#275,.F.); #33361=ADVANCED_FACE('',(#3556),#276,.F.); #33362=ADVANCED_FACE('',(#3557),#277,.F.); #33363=ADVANCED_FACE('',(#3558),#278,.F.); #33364=ADVANCED_FACE('',(#3559),#279,.F.); #33365=ADVANCED_FACE('',(#3560),#280,.F.); #33366=ADVANCED_FACE('',(#3561),#2022,.F.); #33367=ADVANCED_FACE('',(#3562),#2023,.F.); #33368=ADVANCED_FACE('',(#3563),#2024,.F.); #33369=ADVANCED_FACE('',(#3564),#281,.F.); #33370=ADVANCED_FACE('',(#3565),#282,.F.); #33371=ADVANCED_FACE('',(#3566),#283,.F.); #33372=ADVANCED_FACE('',(#3567),#284,.F.); #33373=ADVANCED_FACE('',(#3568),#285,.F.); #33374=ADVANCED_FACE('',(#3569),#286,.F.); #33375=ADVANCED_FACE('',(#3570),#2025,.F.); #33376=ADVANCED_FACE('',(#3571),#2026,.F.); #33377=ADVANCED_FACE('',(#3572),#2027,.F.); #33378=ADVANCED_FACE('',(#3573),#2028,.F.); #33379=ADVANCED_FACE('',(#3574),#287,.F.); #33380=ADVANCED_FACE('',(#3575),#288,.F.); #33381=ADVANCED_FACE('',(#3576),#289,.F.); #33382=ADVANCED_FACE('',(#3577),#290,.F.); #33383=ADVANCED_FACE('',(#3578),#291,.F.); #33384=ADVANCED_FACE('',(#3579),#292,.F.); #33385=ADVANCED_FACE('',(#3580),#293,.F.); #33386=ADVANCED_FACE('',(#3581),#294,.F.); #33387=ADVANCED_FACE('',(#3582),#295,.F.); #33388=ADVANCED_FACE('',(#3583),#296,.F.); #33389=ADVANCED_FACE('',(#3584),#297,.F.); #33390=ADVANCED_FACE('',(#3585),#298,.F.); #33391=ADVANCED_FACE('',(#3586),#2029,.F.); #33392=ADVANCED_FACE('',(#3587),#2030,.F.); #33393=ADVANCED_FACE('',(#3588,#1024,#1025),#2031,.T.); #33394=ADVANCED_FACE('',(#3589,#1026,#1027,#1028,#1029),#2032,.T.); #33395=ADVANCED_FACE('',(#3590),#2033,.T.); #33396=ADVANCED_FACE('',(#3591),#2034,.T.); #33397=ADVANCED_FACE('',(#3592),#341,.F.); #33398=ADVANCED_FACE('',(#3593),#342,.F.); #33399=ADVANCED_FACE('',(#3594),#343,.F.); #33400=ADVANCED_FACE('',(#3595),#2035,.F.); #33401=ADVANCED_FACE('',(#3596),#2036,.F.); #33402=ADVANCED_FACE('',(#3597),#344,.F.); #33403=ADVANCED_FACE('',(#3598),#345,.F.); #33404=ADVANCED_FACE('',(#3599),#346,.F.); #33405=ADVANCED_FACE('',(#3600),#347,.F.); #33406=ADVANCED_FACE('',(#3601),#348,.F.); #33407=ADVANCED_FACE('',(#3602),#2037,.F.); #33408=ADVANCED_FACE('',(#3603),#2038,.F.); #33409=ADVANCED_FACE('',(#3604),#349,.F.); #33410=ADVANCED_FACE('',(#3605),#350,.F.); #33411=ADVANCED_FACE('',(#3606),#351,.F.); #33412=ADVANCED_FACE('',(#3607),#352,.F.); #33413=ADVANCED_FACE('',(#3608),#353,.F.); #33414=ADVANCED_FACE('',(#3609),#354,.F.); #33415=ADVANCED_FACE('',(#3610),#355,.F.); #33416=ADVANCED_FACE('',(#3611),#356,.F.); #33417=ADVANCED_FACE('',(#3612),#357,.F.); #33418=ADVANCED_FACE('',(#3613),#358,.F.); #33419=ADVANCED_FACE('',(#3614),#359,.F.); #33420=ADVANCED_FACE('',(#3615),#360,.F.); #33421=ADVANCED_FACE('',(#3616),#361,.F.); #33422=ADVANCED_FACE('',(#3617),#362,.F.); #33423=ADVANCED_FACE('',(#3618),#363,.F.); #33424=ADVANCED_FACE('',(#3619),#364,.F.); #33425=ADVANCED_FACE('',(#3620),#365,.F.); #33426=ADVANCED_FACE('',(#3621),#366,.F.); #33427=ADVANCED_FACE('',(#3622),#367,.F.); #33428=ADVANCED_FACE('',(#3623),#368,.F.); #33429=ADVANCED_FACE('',(#3624),#369,.F.); #33430=ADVANCED_FACE('',(#3625),#370,.F.); #33431=ADVANCED_FACE('',(#3626,#1030),#2039,.T.); #33432=ADVANCED_FACE('',(#3627),#371,.F.); #33433=ADVANCED_FACE('',(#3628),#372,.F.); #33434=ADVANCED_FACE('',(#3629),#373,.F.); #33435=ADVANCED_FACE('',(#3630),#374,.F.); #33436=ADVANCED_FACE('',(#3631),#375,.F.); #33437=ADVANCED_FACE('',(#3632),#376,.F.); #33438=ADVANCED_FACE('',(#3633),#377,.F.); #33439=ADVANCED_FACE('',(#3634),#378,.F.); #33440=ADVANCED_FACE('',(#3635,#1031),#2040,.T.); #33441=ADVANCED_FACE('',(#3636),#379,.F.); #33442=ADVANCED_FACE('',(#3637),#2041,.F.); #33443=ADVANCED_FACE('',(#3638),#380,.F.); #33444=ADVANCED_FACE('',(#3639),#2042,.F.); #33445=ADVANCED_FACE('',(#3640),#381,.F.); #33446=ADVANCED_FACE('',(#3641),#2043,.F.); #33447=ADVANCED_FACE('',(#3642),#382,.F.); #33448=ADVANCED_FACE('',(#3643),#2044,.F.); #33449=ADVANCED_FACE('',(#3644),#383,.F.); #33450=ADVANCED_FACE('',(#3645),#2045,.F.); #33451=ADVANCED_FACE('',(#3646),#384,.F.); #33452=ADVANCED_FACE('',(#3647),#2046,.F.); #33453=ADVANCED_FACE('',(#3648),#385,.F.); #33454=ADVANCED_FACE('',(#3649),#2047,.F.); #33455=ADVANCED_FACE('',(#3650),#386,.F.); #33456=ADVANCED_FACE('',(#3651),#2048,.F.); #33457=ADVANCED_FACE('',(#3652),#387,.F.); #33458=ADVANCED_FACE('',(#3653),#2049,.F.); #33459=ADVANCED_FACE('',(#3654),#388,.F.); #33460=ADVANCED_FACE('',(#3655),#2050,.F.); #33461=ADVANCED_FACE('',(#3656),#389,.F.); #33462=ADVANCED_FACE('',(#3657),#2051,.F.); #33463=ADVANCED_FACE('',(#3658),#390,.F.); #33464=ADVANCED_FACE('',(#3659),#2052,.F.); #33465=ADVANCED_FACE('',(#3660),#391,.F.); #33466=ADVANCED_FACE('',(#3661),#2053,.F.); #33467=ADVANCED_FACE('',(#3662),#392,.F.); #33468=ADVANCED_FACE('',(#3663),#2054,.F.); #33469=ADVANCED_FACE('',(#3664),#393,.F.); #33470=ADVANCED_FACE('',(#3665),#2055,.F.); #33471=ADVANCED_FACE('',(#3666),#394,.F.); #33472=ADVANCED_FACE('',(#3667),#2056,.F.); #33473=ADVANCED_FACE('',(#3668),#395,.F.); #33474=ADVANCED_FACE('',(#3669),#2057,.F.); #33475=ADVANCED_FACE('',(#3670),#396,.F.); #33476=ADVANCED_FACE('',(#3671),#2058,.F.); #33477=ADVANCED_FACE('',(#3672),#397,.F.); #33478=ADVANCED_FACE('',(#3673),#2059,.F.); #33479=ADVANCED_FACE('',(#3674),#398,.F.); #33480=ADVANCED_FACE('',(#3675),#2060,.F.); #33481=ADVANCED_FACE('',(#3676),#399,.F.); #33482=ADVANCED_FACE('',(#3677),#2061,.F.); #33483=ADVANCED_FACE('',(#3678),#400,.F.); #33484=ADVANCED_FACE('',(#3679),#2062,.F.); #33485=ADVANCED_FACE('',(#3680),#401,.F.); #33486=ADVANCED_FACE('',(#3681),#2063,.F.); #33487=ADVANCED_FACE('',(#3682),#402,.F.); #33488=ADVANCED_FACE('',(#3683),#2064,.F.); #33489=ADVANCED_FACE('',(#3684),#403,.F.); #33490=ADVANCED_FACE('',(#3685),#2065,.F.); #33491=ADVANCED_FACE('',(#3686),#404,.F.); #33492=ADVANCED_FACE('',(#3687),#2066,.F.); #33493=ADVANCED_FACE('',(#3688),#405,.F.); #33494=ADVANCED_FACE('',(#3689),#2067,.F.); #33495=ADVANCED_FACE('',(#3690),#406,.F.); #33496=ADVANCED_FACE('',(#3691),#2068,.F.); #33497=ADVANCED_FACE('',(#3692),#407,.F.); #33498=ADVANCED_FACE('',(#3693),#2069,.F.); #33499=ADVANCED_FACE('',(#3694),#408,.F.); #33500=ADVANCED_FACE('',(#3695),#2070,.F.); #33501=ADVANCED_FACE('',(#3696),#409,.F.); #33502=ADVANCED_FACE('',(#3697),#2071,.F.); #33503=ADVANCED_FACE('',(#3698),#410,.F.); #33504=ADVANCED_FACE('',(#3699),#2072,.F.); #33505=ADVANCED_FACE('',(#3700),#411,.F.); #33506=ADVANCED_FACE('',(#3701),#2073,.F.); #33507=ADVANCED_FACE('',(#3702),#412,.F.); #33508=ADVANCED_FACE('',(#3703),#2074,.F.); #33509=ADVANCED_FACE('',(#3704),#413,.F.); #33510=ADVANCED_FACE('',(#3705),#2075,.F.); #33511=ADVANCED_FACE('',(#3706),#414,.F.); #33512=ADVANCED_FACE('',(#3707),#2076,.F.); #33513=ADVANCED_FACE('',(#3708),#415,.F.); #33514=ADVANCED_FACE('',(#3709),#2077,.F.); #33515=ADVANCED_FACE('',(#3710),#416,.F.); #33516=ADVANCED_FACE('',(#3711),#2078,.F.); #33517=ADVANCED_FACE('',(#3712),#417,.F.); #33518=ADVANCED_FACE('',(#3713),#2079,.F.); #33519=ADVANCED_FACE('',(#3714),#418,.F.); #33520=ADVANCED_FACE('',(#3715),#2080,.F.); #33521=ADVANCED_FACE('',(#3716),#419,.F.); #33522=ADVANCED_FACE('',(#3717),#2081,.F.); #33523=ADVANCED_FACE('',(#3718),#420,.F.); #33524=ADVANCED_FACE('',(#3719),#2082,.F.); #33525=ADVANCED_FACE('',(#3720),#421,.F.); #33526=ADVANCED_FACE('',(#3721),#2083,.F.); #33527=ADVANCED_FACE('',(#3722),#422,.F.); #33528=ADVANCED_FACE('',(#3723),#2084,.F.); #33529=ADVANCED_FACE('',(#3724),#423,.F.); #33530=ADVANCED_FACE('',(#3725),#2085,.F.); #33531=ADVANCED_FACE('',(#3726),#424,.F.); #33532=ADVANCED_FACE('',(#3727),#2086,.F.); #33533=ADVANCED_FACE('',(#3728),#425,.F.); #33534=ADVANCED_FACE('',(#3729),#2087,.F.); #33535=ADVANCED_FACE('',(#3730),#426,.F.); #33536=ADVANCED_FACE('',(#3731),#2088,.F.); #33537=ADVANCED_FACE('',(#3732),#427,.F.); #33538=ADVANCED_FACE('',(#3733),#2089,.F.); #33539=ADVANCED_FACE('',(#3734),#428,.F.); #33540=ADVANCED_FACE('',(#3735),#2090,.F.); #33541=ADVANCED_FACE('',(#3736),#429,.F.); #33542=ADVANCED_FACE('',(#3737),#2091,.F.); #33543=ADVANCED_FACE('',(#3738),#430,.F.); #33544=ADVANCED_FACE('',(#3739),#2092,.F.); #33545=ADVANCED_FACE('',(#3740),#431,.F.); #33546=ADVANCED_FACE('',(#3741),#2093,.F.); #33547=ADVANCED_FACE('',(#3742),#432,.F.); #33548=ADVANCED_FACE('',(#3743),#2094,.F.); #33549=ADVANCED_FACE('',(#3744),#433,.F.); #33550=ADVANCED_FACE('',(#3745),#2095,.F.); #33551=ADVANCED_FACE('',(#3746),#434,.F.); #33552=ADVANCED_FACE('',(#3747),#2096,.F.); #33553=ADVANCED_FACE('',(#3748),#435,.F.); #33554=ADVANCED_FACE('',(#3749),#2097,.F.); #33555=ADVANCED_FACE('',(#3750),#436,.F.); #33556=ADVANCED_FACE('',(#3751),#2098,.F.); #33557=ADVANCED_FACE('',(#3752),#437,.F.); #33558=ADVANCED_FACE('',(#3753),#2099,.F.); #33559=ADVANCED_FACE('',(#3754),#438,.F.); #33560=ADVANCED_FACE('',(#3755),#2100,.F.); #33561=ADVANCED_FACE('',(#3756),#439,.F.); #33562=ADVANCED_FACE('',(#3757),#2101,.F.); #33563=ADVANCED_FACE('',(#3758),#440,.F.); #33564=ADVANCED_FACE('',(#3759),#2102,.F.); #33565=ADVANCED_FACE('',(#3760),#441,.F.); #33566=ADVANCED_FACE('',(#3761),#2103,.F.); #33567=ADVANCED_FACE('',(#3762),#442,.F.); #33568=ADVANCED_FACE('',(#3763),#2104,.F.); #33569=ADVANCED_FACE('',(#3764),#443,.F.); #33570=ADVANCED_FACE('',(#3765),#2105,.F.); #33571=ADVANCED_FACE('',(#3766),#444,.F.); #33572=ADVANCED_FACE('',(#3767),#2106,.F.); #33573=ADVANCED_FACE('',(#3768),#445,.F.); #33574=ADVANCED_FACE('',(#3769),#2107,.F.); #33575=ADVANCED_FACE('',(#3770),#446,.F.); #33576=ADVANCED_FACE('',(#3771),#2108,.F.); #33577=ADVANCED_FACE('',(#3772),#447,.F.); #33578=ADVANCED_FACE('',(#3773),#2109,.F.); #33579=ADVANCED_FACE('',(#3774),#448,.F.); #33580=ADVANCED_FACE('',(#3775),#2110,.F.); #33581=ADVANCED_FACE('',(#3776),#449,.F.); #33582=ADVANCED_FACE('',(#3777),#2111,.F.); #33583=ADVANCED_FACE('',(#3778),#450,.F.); #33584=ADVANCED_FACE('',(#3779),#2112,.F.); #33585=ADVANCED_FACE('',(#3780),#2113,.F.); #33586=ADVANCED_FACE('',(#3781),#451,.F.); #33587=ADVANCED_FACE('',(#3782),#452,.F.); #33588=ADVANCED_FACE('',(#3783),#2114,.F.); #33589=ADVANCED_FACE('',(#3784),#453,.F.); #33590=ADVANCED_FACE('',(#3785),#454,.F.); #33591=ADVANCED_FACE('',(#3786),#2115,.F.); #33592=ADVANCED_FACE('',(#3787),#455,.F.); #33593=ADVANCED_FACE('',(#3788),#456,.F.); #33594=ADVANCED_FACE('',(#3789),#2116,.F.); #33595=ADVANCED_FACE('',(#3790),#457,.F.); #33596=ADVANCED_FACE('',(#3791),#458,.F.); #33597=ADVANCED_FACE('',(#3792),#2117,.F.); #33598=ADVANCED_FACE('',(#3793),#459,.F.); #33599=ADVANCED_FACE('',(#3794,#1032,#1033,#1034,#1035,#1036,#1037,#1038, #1039,#1040,#1041,#1042,#1043,#1044,#1045,#1046,#1047,#1048,#1049),#2118, .T.); #33600=ADVANCED_FACE('',(#3795),#2119,.T.); #33601=ADVANCED_FACE('',(#3796),#2120,.T.); #33602=ADVANCED_FACE('',(#3797),#2121,.T.); #33603=ADVANCED_FACE('',(#3798),#2122,.T.); #33604=ADVANCED_FACE('',(#3799),#2123,.T.); #33605=ADVANCED_FACE('',(#3800),#2124,.T.); #33606=ADVANCED_FACE('',(#3801),#2125,.T.); #33607=ADVANCED_FACE('',(#3802),#2126,.T.); #33608=ADVANCED_FACE('',(#3803),#2127,.T.); #33609=ADVANCED_FACE('',(#3804),#2128,.T.); #33610=ADVANCED_FACE('',(#3805),#2129,.T.); #33611=ADVANCED_FACE('',(#3806),#2130,.T.); #33612=ADVANCED_FACE('',(#3807),#2131,.T.); #33613=ADVANCED_FACE('',(#3808),#2132,.T.); #33614=ADVANCED_FACE('',(#3809),#2133,.T.); #33615=ADVANCED_FACE('',(#3810),#2134,.T.); #33616=ADVANCED_FACE('',(#3811),#2135,.T.); #33617=ADVANCED_FACE('',(#3812),#2136,.T.); #33618=ADVANCED_FACE('',(#3813,#1050),#2137,.T.); #33619=ADVANCED_FACE('',(#3814),#2138,.T.); #33620=ADVANCED_FACE('',(#3815),#32009,.T.); #33621=ADVANCED_FACE('',(#3816),#2139,.T.); #33622=ADVANCED_FACE('',(#3817),#2140,.T.); #33623=ADVANCED_FACE('',(#3818),#32010,.T.); #33624=ADVANCED_FACE('',(#3819),#2141,.T.); #33625=ADVANCED_FACE('',(#3820),#2142,.T.); #33626=ADVANCED_FACE('',(#3821),#2143,.T.); #33627=ADVANCED_FACE('',(#3822),#2144,.T.); #33628=ADVANCED_FACE('',(#3823),#2145,.T.); #33629=ADVANCED_FACE('',(#3824),#2146,.T.); #33630=ADVANCED_FACE('',(#3825),#2147,.T.); #33631=ADVANCED_FACE('',(#3826),#2148,.T.); #33632=ADVANCED_FACE('',(#3827),#32011,.T.); #33633=ADVANCED_FACE('',(#3828),#2149,.T.); #33634=ADVANCED_FACE('',(#3829),#2150,.T.); #33635=ADVANCED_FACE('',(#3830),#32012,.T.); #33636=ADVANCED_FACE('',(#3831),#2151,.T.); #33637=ADVANCED_FACE('',(#3832),#2152,.T.); #33638=ADVANCED_FACE('',(#3833),#2153,.T.); #33639=ADVANCED_FACE('',(#3834),#2154,.T.); #33640=ADVANCED_FACE('',(#3835),#2155,.T.); #33641=ADVANCED_FACE('',(#3836),#2156,.T.); #33642=ADVANCED_FACE('',(#3837),#2157,.T.); #33643=ADVANCED_FACE('',(#3838),#2158,.T.); #33644=ADVANCED_FACE('',(#3839),#32013,.F.); #33645=ADVANCED_FACE('',(#3840),#32014,.F.); #33646=ADVANCED_FACE('',(#3841),#32015,.T.); #33647=ADVANCED_FACE('',(#3842),#2159,.T.); #33648=ADVANCED_FACE('',(#3843),#32016,.T.); #33649=ADVANCED_FACE('',(#3844),#2160,.T.); #33650=ADVANCED_FACE('',(#3845),#32017,.T.); #33651=ADVANCED_FACE('',(#3846),#2161,.T.); #33652=ADVANCED_FACE('',(#3847),#32018,.T.); #33653=ADVANCED_FACE('',(#3848),#2162,.T.); #33654=ADVANCED_FACE('',(#3849),#32019,.T.); #33655=ADVANCED_FACE('',(#3850),#251,.T.); #33656=ADVANCED_FACE('',(#3851),#2163,.T.); #33657=ADVANCED_FACE('',(#3852),#252,.T.); #33658=ADVANCED_FACE('',(#3853),#2164,.T.); #33659=ADVANCED_FACE('',(#3854),#253,.T.); #33660=ADVANCED_FACE('',(#3855),#2165,.T.); #33661=ADVANCED_FACE('',(#3856),#254,.T.); #33662=ADVANCED_FACE('',(#3857),#2166,.T.); #33663=ADVANCED_FACE('',(#3858),#2167,.T.); #33664=ADVANCED_FACE('',(#3859),#2168,.T.); #33665=ADVANCED_FACE('',(#3860),#32020,.T.); #33666=ADVANCED_FACE('',(#3861),#32021,.T.); #33667=ADVANCED_FACE('',(#3862),#2169,.F.); #33668=ADVANCED_FACE('',(#3863),#2170,.F.); #33669=ADVANCED_FACE('',(#3864),#2171,.F.); #33670=ADVANCED_FACE('',(#3865),#2172,.F.); #33671=ADVANCED_FACE('',(#3866),#32022,.T.); #33672=ADVANCED_FACE('',(#3867),#2173,.T.); #33673=ADVANCED_FACE('',(#3868),#2174,.T.); #33674=ADVANCED_FACE('',(#3869),#2175,.T.); #33675=ADVANCED_FACE('',(#3870),#2176,.T.); #33676=ADVANCED_FACE('',(#3871),#462,.T.); #33677=ADVANCED_FACE('',(#3872),#32023,.T.); #33678=ADVANCED_FACE('',(#3873),#2177,.T.); #33679=ADVANCED_FACE('',(#3874),#463,.T.); #33680=ADVANCED_FACE('',(#3875),#32024,.T.); #33681=ADVANCED_FACE('',(#3876),#2178,.T.); #33682=ADVANCED_FACE('',(#3877),#464,.T.); #33683=ADVANCED_FACE('',(#3878),#32025,.T.); #33684=ADVANCED_FACE('',(#3879),#2179,.T.); #33685=ADVANCED_FACE('',(#3880),#2180,.F.); #33686=ADVANCED_FACE('',(#3881),#2181,.F.); #33687=ADVANCED_FACE('',(#3882),#2182,.F.); #33688=ADVANCED_FACE('',(#3883),#2183,.F.); #33689=ADVANCED_FACE('',(#3884,#1051),#2184,.T.); #33690=ADVANCED_FACE('',(#3885),#32026,.T.); #33691=ADVANCED_FACE('',(#3886),#465,.T.); #33692=ADVANCED_FACE('',(#3887),#32027,.T.); #33693=ADVANCED_FACE('',(#3888),#466,.T.); #33694=ADVANCED_FACE('',(#3889),#32028,.F.); #33695=ADVANCED_FACE('',(#3890),#2185,.F.); #33696=ADVANCED_FACE('',(#3891,#1052,#1053),#2186,.T.); #33697=ADVANCED_FACE('',(#3892),#467,.T.); #33698=ADVANCED_FACE('',(#3893),#32029,.T.); #33699=ADVANCED_FACE('',(#3894),#468,.T.); #33700=ADVANCED_FACE('',(#3895),#32030,.T.); #33701=ADVANCED_FACE('',(#3896),#2187,.F.); #33702=ADVANCED_FACE('',(#3897),#32031,.F.); #33703=ADVANCED_FACE('',(#3898),#2188,.T.); #33704=ADVANCED_FACE('',(#3899),#2189,.T.); #33705=ADVANCED_FACE('',(#3900),#2190,.T.); #33706=ADVANCED_FACE('',(#3901),#2191,.T.); #33707=ADVANCED_FACE('',(#3902),#2192,.F.); #33708=ADVANCED_FACE('',(#3903),#2193,.F.); #33709=ADVANCED_FACE('',(#3904,#1054,#1055),#2194,.T.); #33710=ADVANCED_FACE('',(#3905),#2195,.T.); #33711=ADVANCED_FACE('',(#3906),#2196,.T.); #33712=ADVANCED_FACE('',(#3907),#2197,.T.); #33713=ADVANCED_FACE('',(#3908),#2198,.T.); #33714=ADVANCED_FACE('',(#3909),#2199,.F.); #33715=ADVANCED_FACE('',(#3910),#2200,.F.); #33716=ADVANCED_FACE('',(#3911),#2201,.T.); #33717=ADVANCED_FACE('',(#3912),#2202,.F.); #33718=ADVANCED_FACE('',(#3913),#32032,.F.); #33719=ADVANCED_FACE('',(#3914),#2203,.F.); #33720=ADVANCED_FACE('',(#3915),#32033,.F.); #33721=ADVANCED_FACE('',(#3916),#2204,.F.); #33722=ADVANCED_FACE('',(#3917),#2205,.F.); #33723=ADVANCED_FACE('',(#3918),#2206,.F.); #33724=ADVANCED_FACE('',(#3919),#2207,.F.); #33725=ADVANCED_FACE('',(#3920),#2208,.F.); #33726=ADVANCED_FACE('',(#3921),#2209,.F.); #33727=ADVANCED_FACE('',(#3922),#2210,.F.); #33728=ADVANCED_FACE('',(#3923),#2211,.F.); #33729=ADVANCED_FACE('',(#3924),#2212,.F.); #33730=ADVANCED_FACE('',(#3925),#2213,.F.); #33731=ADVANCED_FACE('',(#3926),#2214,.F.); #33732=ADVANCED_FACE('',(#3927),#2215,.F.); #33733=ADVANCED_FACE('',(#3928),#2216,.F.); #33734=ADVANCED_FACE('',(#3929),#2217,.F.); #33735=ADVANCED_FACE('',(#3930),#2218,.F.); #33736=ADVANCED_FACE('',(#3931),#2219,.F.); #33737=ADVANCED_FACE('',(#3932),#32034,.F.); #33738=ADVANCED_FACE('',(#3933),#2220,.T.); #33739=ADVANCED_FACE('',(#3934),#32035,.T.); #33740=ADVANCED_FACE('',(#3935),#32036,.F.); #33741=ADVANCED_FACE('',(#3936),#32037,.F.); #33742=ADVANCED_FACE('',(#3937),#32038,.T.); #33743=ADVANCED_FACE('',(#3938),#32039,.F.); #33744=ADVANCED_FACE('',(#3939),#2221,.T.); #33745=ADVANCED_FACE('',(#3940),#32040,.F.); #33746=ADVANCED_FACE('',(#3941),#32041,.T.); #33747=ADVANCED_FACE('',(#3942),#32042,.F.); #33748=ADVANCED_FACE('',(#3943),#2222,.T.); #33749=ADVANCED_FACE('',(#3944),#2223,.T.); #33750=ADVANCED_FACE('',(#3945,#1056,#1057,#1058,#1059),#2224,.F.); #33751=ADVANCED_FACE('',(#3946),#2225,.T.); #33752=ADVANCED_FACE('',(#3947),#2226,.T.); #33753=ADVANCED_FACE('',(#3948,#1060),#2227,.F.); #33754=ADVANCED_FACE('',(#3949,#1061,#1062),#2228,.F.); #33755=ADVANCED_FACE('',(#3950,#1063),#2229,.F.); #33756=ADVANCED_FACE('',(#3951,#1064),#2230,.F.); #33757=ADVANCED_FACE('',(#3952),#2231,.F.); #33758=ADVANCED_FACE('',(#3953),#2232,.F.); #33759=ADVANCED_FACE('',(#3954),#2233,.F.); #33760=ADVANCED_FACE('',(#3955),#2234,.F.); #33761=ADVANCED_FACE('',(#3956),#32043,.T.); #33762=ADVANCED_FACE('',(#3957),#2235,.F.); #33763=ADVANCED_FACE('',(#3958),#32044,.T.); #33764=ADVANCED_FACE('',(#3959),#2236,.T.); #33765=ADVANCED_FACE('',(#3960),#2237,.T.); #33766=ADVANCED_FACE('',(#3961),#255,.T.); #33767=ADVANCED_FACE('',(#3962),#2238,.T.); #33768=ADVANCED_FACE('',(#3963),#256,.T.); #33769=ADVANCED_FACE('',(#3964),#2239,.T.); #33770=ADVANCED_FACE('',(#3965),#257,.T.); #33771=ADVANCED_FACE('',(#3966),#2240,.T.); #33772=ADVANCED_FACE('',(#3967),#258,.T.); #33773=ADVANCED_FACE('',(#3968),#2241,.T.); #33774=ADVANCED_FACE('',(#3969),#32045,.T.); #33775=ADVANCED_FACE('',(#3970),#32046,.T.); #33776=CLOSED_SHELL('',(#32047,#32048,#32049,#32050,#32051,#32052,#32053, #32054,#32055,#32056,#32057,#32058,#32059,#32060,#32061,#32062,#32063,#32064, #32065,#32066,#32067,#32068,#32069,#32070,#32071,#32072,#32073,#32074,#32075, #32076,#32077,#32078,#32079,#32080,#32081,#32082,#32083,#32084,#32085,#32086, #32087,#32088,#32089,#32090,#32091,#32092,#32093,#32094,#32095,#32096,#32097, #32098,#32099,#32100,#32101,#32102,#32103,#32104,#32105,#32106,#32107,#32108, #32109,#32110,#32111,#32112,#32113,#32114,#32115,#32116,#32117,#32118,#32119, #32120,#32121,#32122,#32123,#32124,#32125,#32126,#32127,#32128,#32129,#32130, #32131,#32132,#32133,#32134,#32135,#32136,#32137,#32138,#32139,#32140,#32141, #32142,#32143,#32144,#32145,#32146,#32147,#32148,#32149,#32150,#32151,#32152, #32153,#32154,#32155,#32156,#32157,#32158,#32159,#32160,#32161,#32162,#32163, #32164,#32165,#32166,#32167,#32168,#32169,#32170,#32171,#32172,#32173,#32174, #32175,#32176,#32177,#32178,#32179,#32180,#32181,#32182,#32183,#32184,#32185, #32186,#32187,#32188,#32189,#32190,#32191,#32192,#32193,#32194,#32195,#32196, #32197,#32198,#32199,#32200,#32201,#32202)); #33777=CLOSED_SHELL('',(#32203,#32204,#32205,#32206,#32207,#32208,#32209, #32210,#32211,#32212,#32213,#32214,#32215,#32216,#32217,#32218,#32219,#32220, #32221,#32222,#32223,#32224,#32225,#32226,#32227,#32228,#32229,#32230,#32231, #32232,#32233,#32234,#32235,#32236,#32237)); #33778=CLOSED_SHELL('',(#32238,#32239,#32240,#32241,#32242,#32243,#32244, #32245,#32246,#32247,#32248,#32249,#32250,#32251,#32252,#32253,#32254,#32255, #32256,#32257,#32258,#32259,#32260,#32261,#32262,#32263,#32264,#32265,#32266, #32267,#32268,#32269,#32270,#32271,#32272,#32273,#32274,#32275,#32276,#32277, #32278,#32279,#32280,#32281,#32282,#32283,#32284,#32285,#32286,#32287,#32288, #32289,#32290,#32291,#32292,#32293,#32294,#32295,#32296,#32297,#32298,#32299, #32300,#32301,#32302,#32303,#32304,#32305,#32306,#32307,#32308,#32309,#32310, #32311,#32312,#32313,#32314,#32315,#32316,#32317,#32318,#32319,#32320,#32321, #32322,#32323,#32324,#32325,#32326,#32327,#32328,#32329,#32330,#32331,#32332, #32333,#32334,#32335,#32336,#32337,#32338,#32339,#32340,#32341,#32342,#32343, #32344,#32345,#32346,#32347,#32348,#32349,#32350,#32351,#32352,#32353,#32354, #32355,#32356,#32357,#32358,#32359,#32360,#32361,#32362,#32363,#32364,#32365, #32366,#32367,#32368,#32369,#32370,#32371,#32372,#32373,#32374,#32375,#32376, #32377,#32378,#32379,#32380,#32381,#32382,#32383,#32384,#32385,#32386,#32387, #32388,#32389,#32390,#32391,#32392,#32393,#32394,#32395,#32396,#32397,#32398, #32399,#32400,#32401,#32402,#32403,#32404,#32405,#32406,#32407,#32408,#32409, #32410,#32411,#32412,#32413,#32414,#32415,#32416,#32417,#32418,#32419,#32420, #32421,#32422,#32423,#32424,#32425,#32426,#32427,#32428,#32429,#32430,#32431, #32432,#32433,#32434,#32435,#32436,#32437,#32438,#32439,#32440,#32441,#32442, #32443,#32444,#32445,#32446,#32447,#32448,#32449,#32450,#32451,#32452,#32453, #32454,#32455,#32456,#32457,#32458,#32459,#32460,#32461,#32462,#32463,#32464, #32465,#32466,#32467,#32468,#32469,#32470,#32471,#32472,#32473,#32474,#32475, #32476,#32477,#32478,#32479,#32480,#32481,#32482,#32483,#32484,#32485,#32486, #32487,#32488,#32489,#32490,#32491,#32492,#32493,#32494,#32495,#32496,#32497, #32498,#32499,#32500,#32501,#32502,#32503,#32504,#32505,#32506,#32507,#32508, #32509,#32510,#32511,#32512,#32513,#32514,#32515,#32516,#32517,#32518,#32519, #32520,#32521,#32522,#32523,#32524,#32525,#32526,#32527,#32528,#32529,#32530, #32531,#32532,#32533,#32534,#32535,#32536,#32537,#32538,#32539,#32540,#32541, #32542,#32543,#32544,#32545,#32546,#32547,#32548,#32549,#32550,#32551,#32552, #32553,#32554,#32555,#32556,#32557,#32558,#32559,#32560)); #33779=CLOSED_SHELL('',(#32561,#32562,#32563,#32564,#32565,#32566,#32567, #32568,#32569,#32570,#32571,#32572,#32573,#32574,#32575,#32576,#32577,#32578, #32579,#32580,#32581,#32582,#32583,#32584,#32585,#32586,#32587)); #33780=CLOSED_SHELL('',(#32588,#32589,#32590,#32591,#32592,#32593,#32594, #32595,#32596,#32597)); #33781=CLOSED_SHELL('',(#32598,#32599,#32600,#32601,#32602,#32603,#32604, #32605,#32606,#32607)); #33782=CLOSED_SHELL('',(#32608,#32609,#32610,#32611,#32612,#32613,#32614, #32615,#32616,#32617)); #33783=CLOSED_SHELL('',(#32618,#32619,#32620,#32621,#32622,#32623,#32624, #32625,#32626,#32627)); #33784=CLOSED_SHELL('',(#32628,#32629,#32630,#32631,#32632,#32633,#32634, #32635,#32636,#32637,#32638,#32639,#32640,#32641,#32642)); #33785=CLOSED_SHELL('',(#32643,#32644,#32645,#32646,#32647,#32648)); #33786=CLOSED_SHELL('',(#32649,#32650,#32651,#32652,#32653,#32654,#32655, #32656,#32657,#32658)); #33787=CLOSED_SHELL('',(#32659,#32660,#32661,#32662,#32663,#32664,#32665, #32666,#32667,#32668,#32669,#32670,#32671,#32672)); #33788=CLOSED_SHELL('',(#32673,#32674,#32675,#32676,#32677,#32678)); #33789=CLOSED_SHELL('',(#32679,#32680,#32681,#32682,#32683,#32684)); #33790=CLOSED_SHELL('',(#32685,#32686,#32687,#32688,#32689,#32690)); #33791=CLOSED_SHELL('',(#32691,#32692,#32693,#32694,#32695,#32696)); #33792=CLOSED_SHELL('',(#32697,#32698,#32699,#32700,#32701,#32702)); #33793=CLOSED_SHELL('',(#32703,#32704,#32705,#32706,#32707,#32708)); #33794=CLOSED_SHELL('',(#32709,#32710,#32711,#32712,#32713,#32714)); #33795=CLOSED_SHELL('',(#32715,#32716,#32717,#32718,#32719,#32720,#32721, #32722,#32723,#32724,#32725,#32726,#32727,#32728,#32729,#32730,#32731,#32732, #32733,#32734,#32735,#32736,#32737,#32738,#32739,#32740,#32741,#32742,#32743, #32744,#32745,#32746,#32747,#32748,#32749,#32750,#32751,#32752,#32753,#32754, #32755,#32756,#32757,#32758,#32759,#32760,#32761,#32762,#32763,#32764,#32765, #32766,#32767,#32768,#32769,#32770,#32771,#32772,#32773,#32774,#32775,#32776, #32777,#32778,#32779,#32780,#32781,#32782,#32783,#32784,#32785,#32786,#32787, #32788,#32789,#32790,#32791,#32792,#32793,#32794,#32795,#32796,#32797,#32798, #32799,#32800,#32801,#32802,#32803,#32804,#32805,#32806,#32807,#32808,#32809, #32810,#32811,#32812,#32813,#32814,#32815,#32816,#32817,#32818,#32819,#32820, #32821,#32822,#32823,#32824,#32825,#32826,#32827,#32828,#32829,#32830,#32831, #32832,#32833,#32834,#32835,#32836,#32837,#32838,#32839,#32840,#32841,#32842, #32843,#32844,#32845,#32846,#32847,#32848,#32849,#32850,#32851,#32852,#32853, #32854,#32855,#32856,#32857,#32858,#32859,#32860,#32861,#32862,#32863,#32864, #32865,#32866,#32867,#32868,#32869,#32870,#32871,#32872,#32873,#32874,#32875, #32876,#32877,#32878,#32879,#32880,#32881,#32882,#32883,#32884,#32885,#32886, #32887,#32888,#32889,#32890,#32891,#32892,#32893,#32894,#32895,#32896,#32897, #32898,#32899,#32900,#32901,#32902,#32903,#32904,#32905,#32906,#32907,#32908, #32909,#32910,#32911,#32912,#32913,#32914,#32915,#32916,#32917,#32918,#32919, #32920,#32921,#32922,#32923,#32924,#32925,#32926,#32927,#32928,#32929,#32930, #32931,#32932,#32933,#32934,#32935,#32936,#32937,#32938,#32939,#32940,#32941, #32942,#32943,#32944,#32945,#32946,#32947,#32948,#32949,#32950,#32951,#32952, #32953,#32954,#32955,#32956,#32957,#32958,#32959,#32960,#32961,#32962,#32963, #32964,#32965,#32966,#32967,#32968,#32969,#32970,#32971,#32972,#32973,#32974, #32975,#32976,#32977,#32978,#32979,#32980,#32981,#32982,#32983,#32984,#32985, #32986,#32987,#32988,#32989,#32990,#32991,#32992,#32993,#32994,#32995,#32996, #32997,#32998,#32999,#33000,#33001,#33002,#33003,#33004,#33005,#33006,#33007, #33008,#33009,#33010,#33011,#33012,#33013,#33014,#33015,#33016,#33017,#33018, #33019,#33020,#33021,#33022,#33023,#33024,#33025,#33026,#33027,#33028,#33029, #33030,#33031,#33032,#33033,#33034,#33035,#33036,#33037,#33038,#33039,#33040, #33041,#33042,#33043,#33044,#33045,#33046,#33047,#33048,#33049,#33050,#33051, #33052,#33053,#33054,#33055,#33056,#33057,#33058,#33059,#33060,#33061,#33062, #33063,#33064,#33065,#33066,#33067,#33068,#33069,#33070,#33071,#33072,#33073, #33074,#33075,#33076,#33077,#33078,#33079,#33080,#33081,#33082,#33083,#33084, #33085,#33086,#33087,#33088,#33089,#33090,#33091,#33092,#33093,#33094,#33095, #33096,#33097,#33098,#33099,#33100,#33101,#33102,#33103,#33104,#33105,#33106, #33107,#33108,#33109,#33110,#33111,#33112,#33113,#33114,#33115,#33116,#33117, #33118,#33119,#33120,#33121,#33122,#33123,#33124,#33125,#33126,#33127,#33128, #33129,#33130,#33131,#33132,#33133,#33134,#33135,#33136,#33137,#33138,#33139, #33140,#33141,#33142,#33143,#33144,#33145,#33146,#33147,#33148,#33149,#33150, #33151,#33152,#33153,#33154,#33155,#33156,#33157,#33158,#33159,#33160,#33161, #33162,#33163,#33164,#33165,#33166,#33167,#33168,#33169,#33170,#33171,#33172, #33173,#33174,#33175,#33176,#33177,#33178,#33179,#33180,#33181,#33182,#33183, #33184,#33185,#33186,#33187,#33188,#33189,#33190,#33191,#33192,#33193,#33194, #33195,#33196,#33197,#33198,#33199,#33200,#33201,#33202,#33203,#33204,#33205, #33206,#33207,#33208,#33209,#33210,#33211,#33212,#33213,#33214,#33215,#33216, #33217,#33218,#33219,#33220,#33221,#33222,#33223,#33224,#33225,#33226,#33227, #33228,#33229,#33230,#33231,#33232,#33233)); #33796=CLOSED_SHELL('',(#33234,#33235,#33236,#33237,#33238,#33239,#33240, #33241,#33242,#33243,#33244,#33245,#33246,#33247,#33248,#33249,#33250,#33251, #33252,#33253,#33254,#33255,#33256,#33257,#33258,#33259,#33260,#33261,#33262, #33263,#33264,#33265,#33266,#33267,#33268,#33269,#33270,#33271,#33272,#33273, #33274,#33275,#33276,#33277,#33278,#33279,#33280,#33281,#33282,#33283,#33284, #33285,#33286,#33287,#33288,#33289,#33290,#33291,#33292,#33293,#33294,#33295, #33296,#33297,#33298,#33299,#33300,#33301,#33302,#33303,#33304,#33305,#33306, #33307,#33308,#33309)); #33797=CLOSED_SHELL('',(#33310,#33311,#33312,#33313,#33314,#33315,#33316, #33317,#33318,#33319,#33320,#33321,#33322,#33323,#33324,#33325,#33326,#33327, #33328,#33329,#33330,#33331,#33332,#33333,#33334,#33335,#33336,#33337)); #33798=CLOSED_SHELL('',(#33338,#33339,#33340,#33341,#33342,#33343,#33344, #33345,#33346,#33347,#33348,#33349,#33350,#33351,#33352,#33353,#33354,#33355, #33356,#33357,#33358,#33359,#33360,#33361,#33362,#33363,#33364,#33365,#33366, #33367,#33368,#33369,#33370,#33371,#33372,#33373,#33374,#33375,#33376,#33377, #33378,#33379,#33380,#33381,#33382,#33383,#33384,#33385,#33386,#33387,#33388, #33389,#33390,#33391,#33392,#33393,#33394,#33395,#33396,#33397,#33398,#33399, #33400,#33401,#33402,#33403,#33404,#33405,#33406,#33407,#33408,#33409,#33410, #33411,#33412,#33413,#33414,#33415,#33416,#33417,#33418,#33419,#33420,#33421, #33422,#33423,#33424,#33425,#33426,#33427,#33428,#33429,#33430,#33431,#33432, #33433,#33434,#33435,#33436,#33437,#33438,#33439,#33440,#33441,#33442,#33443, #33444,#33445,#33446,#33447,#33448,#33449,#33450,#33451,#33452,#33453,#33454, #33455,#33456,#33457,#33458,#33459,#33460,#33461,#33462,#33463,#33464,#33465, #33466,#33467,#33468,#33469,#33470,#33471,#33472,#33473,#33474,#33475,#33476, #33477,#33478,#33479,#33480,#33481,#33482,#33483,#33484,#33485,#33486,#33487, #33488,#33489,#33490,#33491,#33492,#33493,#33494,#33495,#33496,#33497,#33498, #33499,#33500,#33501,#33502,#33503,#33504,#33505,#33506,#33507,#33508,#33509, #33510,#33511,#33512,#33513,#33514,#33515,#33516,#33517,#33518,#33519,#33520, #33521,#33522,#33523,#33524,#33525,#33526,#33527,#33528,#33529,#33530,#33531, #33532,#33533,#33534,#33535,#33536,#33537,#33538,#33539,#33540,#33541,#33542, #33543,#33544,#33545,#33546,#33547,#33548,#33549,#33550,#33551,#33552,#33553, #33554,#33555,#33556,#33557,#33558,#33559,#33560,#33561,#33562,#33563,#33564, #33565,#33566,#33567,#33568,#33569,#33570,#33571,#33572,#33573,#33574,#33575, #33576,#33577,#33578,#33579,#33580,#33581,#33582,#33583,#33584,#33585,#33586, #33587,#33588,#33589,#33590,#33591,#33592,#33593,#33594,#33595,#33596,#33597, #33598,#33599,#33600,#33601,#33602,#33603,#33604,#33605,#33606,#33607,#33608, #33609,#33610,#33611,#33612,#33613,#33614,#33615,#33616,#33617,#33618,#33619, #33620,#33621,#33622,#33623,#33624,#33625,#33626,#33627,#33628,#33629,#33630, #33631,#33632,#33633,#33634,#33635,#33636,#33637,#33638,#33639,#33640,#33641, #33642,#33643,#33644,#33645,#33646,#33647,#33648,#33649,#33650,#33651,#33652, #33653,#33654,#33655,#33656,#33657,#33658,#33659,#33660,#33661,#33662,#33663, #33664,#33665)); #33799=CLOSED_SHELL('',(#33666,#33667,#33668,#33669,#33670,#33671,#33672, #33673,#33674,#33675,#33676,#33677,#33678,#33679,#33680,#33681,#33682,#33683, #33684,#33685,#33686,#33687,#33688,#33689,#33690,#33691,#33692,#33693,#33694, #33695,#33696,#33697,#33698,#33699,#33700,#33701,#33702,#33703,#33704,#33705, #33706,#33707,#33708,#33709,#33710,#33711,#33712,#33713,#33714,#33715,#33716, #33717,#33718,#33719,#33720,#33721,#33722,#33723,#33724,#33725,#33726,#33727, #33728,#33729,#33730,#33731,#33732,#33733,#33734,#33735,#33736,#33737,#33738, #33739,#33740,#33741,#33742,#33743,#33744,#33745,#33746,#33747,#33748,#33749, #33750,#33751,#33752,#33753,#33754,#33755,#33756,#33757,#33758,#33759,#33760, #33761,#33762,#33763,#33764,#33765,#33766,#33767,#33768,#33769,#33770,#33771, #33772,#33773,#33774,#33775)); #33800=DERIVED_UNIT_ELEMENT(#33816,1.); #33801=DERIVED_UNIT_ELEMENT(#58745,-3.); #33802=DERIVED_UNIT_ELEMENT(#33816,1.); #33803=DERIVED_UNIT_ELEMENT(#58745,-3.); #33804=DERIVED_UNIT_ELEMENT(#33816,1.); #33805=DERIVED_UNIT_ELEMENT(#58745,-3.); #33806=DERIVED_UNIT_ELEMENT(#33816,1.); #33807=DERIVED_UNIT_ELEMENT(#58745,-3.); #33808=DERIVED_UNIT_ELEMENT(#33816,1.); #33809=DERIVED_UNIT_ELEMENT(#58745,-3.); #33810=DERIVED_UNIT_ELEMENT(#33816,1.); #33811=DERIVED_UNIT_ELEMENT(#58745,-3.); #33812=DERIVED_UNIT_ELEMENT(#33816,1.); #33813=DERIVED_UNIT_ELEMENT(#58745,-3.); #33814=DERIVED_UNIT_ELEMENT(#33816,1.); #33815=DERIVED_UNIT_ELEMENT(#58745,-3.); #33816=( MASS_UNIT() NAMED_UNIT(*) SI_UNIT(.KILO.,.GRAM.) ); #33817=DERIVED_UNIT((#33800,#33801)); #33818=DERIVED_UNIT((#33802,#33803)); #33819=DERIVED_UNIT((#33804,#33805)); #33820=DERIVED_UNIT((#33806,#33807)); #33821=DERIVED_UNIT((#33808,#33809)); #33822=DERIVED_UNIT((#33810,#33811)); #33823=DERIVED_UNIT((#33812,#33813)); #33824=DERIVED_UNIT((#33814,#33815)); #33825=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#33817); #33826=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#33818); #33827=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#33819); #33828=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#33820); #33829=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#33821); #33830=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#33822); #33831=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#33823); #33832=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#33824); #33833=PROPERTY_DEFINITION_REPRESENTATION(#33873,#33849); #33834=PROPERTY_DEFINITION_REPRESENTATION(#33874,#33850); #33835=PROPERTY_DEFINITION_REPRESENTATION(#33875,#33851); #33836=PROPERTY_DEFINITION_REPRESENTATION(#33876,#33852); #33837=PROPERTY_DEFINITION_REPRESENTATION(#33877,#33853); #33838=PROPERTY_DEFINITION_REPRESENTATION(#33878,#33854); #33839=PROPERTY_DEFINITION_REPRESENTATION(#33879,#33855); #33840=PROPERTY_DEFINITION_REPRESENTATION(#33880,#33856); #33841=PROPERTY_DEFINITION_REPRESENTATION(#33881,#33857); #33842=PROPERTY_DEFINITION_REPRESENTATION(#33882,#33858); #33843=PROPERTY_DEFINITION_REPRESENTATION(#33883,#33859); #33844=PROPERTY_DEFINITION_REPRESENTATION(#33884,#33860); #33845=PROPERTY_DEFINITION_REPRESENTATION(#33885,#33861); #33846=PROPERTY_DEFINITION_REPRESENTATION(#33886,#33862); #33847=PROPERTY_DEFINITION_REPRESENTATION(#33887,#33863); #33848=PROPERTY_DEFINITION_REPRESENTATION(#33888,#33864); #33849=REPRESENTATION('material name',(#33865),#58731); #33850=REPRESENTATION('density',(#33825),#58731); #33851=REPRESENTATION('material name',(#33866),#58732); #33852=REPRESENTATION('density',(#33826),#58732); #33853=REPRESENTATION('material name',(#33867),#58734); #33854=REPRESENTATION('density',(#33827),#58734); #33855=REPRESENTATION('material name',(#33868),#58736); #33856=REPRESENTATION('density',(#33828),#58736); #33857=REPRESENTATION('material name',(#33869),#58738); #33858=REPRESENTATION('density',(#33829),#58738); #33859=REPRESENTATION('material name',(#33870),#58740); #33860=REPRESENTATION('density',(#33830),#58740); #33861=REPRESENTATION('material name',(#33871),#58741); #33862=REPRESENTATION('density',(#33831),#58741); #33863=REPRESENTATION('material name',(#33872),#58742); #33864=REPRESENTATION('density',(#33832),#58742); #33865=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #33866=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #33867=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #33868=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #33869=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #33870=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #33871=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #33872=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #33873=PROPERTY_DEFINITION('material property','material name',#58830); #33874=PROPERTY_DEFINITION('material property','density of part',#58830); #33875=PROPERTY_DEFINITION('material property','material name',#58831); #33876=PROPERTY_DEFINITION('material property','density of part',#58831); #33877=PROPERTY_DEFINITION('material property','material name',#58833); #33878=PROPERTY_DEFINITION('material property','density of part',#58833); #33879=PROPERTY_DEFINITION('material property','material name',#58835); #33880=PROPERTY_DEFINITION('material property','density of part',#58835); #33881=PROPERTY_DEFINITION('material property','material name',#58837); #33882=PROPERTY_DEFINITION('material property','density of part',#58837); #33883=PROPERTY_DEFINITION('material property','material name',#58839); #33884=PROPERTY_DEFINITION('material property','density of part',#58839); #33885=PROPERTY_DEFINITION('material property','material name',#58840); #33886=PROPERTY_DEFINITION('material property','density of part',#58840); #33887=PROPERTY_DEFINITION('material property','material name',#58841); #33888=PROPERTY_DEFINITION('material property','density of part',#58841); #33889=AXIS2_PLACEMENT_3D('',#45040,#36428,#36429); #33890=AXIS2_PLACEMENT_3D('',#45041,#36430,#36431); #33891=AXIS2_PLACEMENT_3D('',#45042,#36432,#36433); #33892=AXIS2_PLACEMENT_3D('',#45043,#36434,#36435); #33893=AXIS2_PLACEMENT_3D('',#45044,#36436,#36437); #33894=AXIS2_PLACEMENT_3D('',#45045,#36438,#36439); #33895=AXIS2_PLACEMENT_3D('',#45046,#36440,#36441); #33896=AXIS2_PLACEMENT_3D('',#45047,#36442,#36443); #33897=AXIS2_PLACEMENT_3D('',#45052,#36445,#36446); #33898=AXIS2_PLACEMENT_3D('',#45055,#36448,#36449); #33899=AXIS2_PLACEMENT_3D('',#45056,#36450,#36451); #33900=AXIS2_PLACEMENT_3D('',#45062,#36455,#36456); #33901=AXIS2_PLACEMENT_3D('',#45068,#36460,#36461); #33902=AXIS2_PLACEMENT_3D('',#45074,#36464,#36465); #33903=AXIS2_PLACEMENT_3D('',#45078,#36467,#36468); #33904=AXIS2_PLACEMENT_3D('',#45085,#36472,#36473); #33905=AXIS2_PLACEMENT_3D('',#45086,#36474,#36475); #33906=AXIS2_PLACEMENT_3D('',#45090,#36477,#36478); #33907=AXIS2_PLACEMENT_3D('',#45098,#36482,#36483); #33908=AXIS2_PLACEMENT_3D('',#45102,#36485,#36486); #33909=AXIS2_PLACEMENT_3D('',#45104,#36488,#36489); #33910=AXIS2_PLACEMENT_3D('',#45126,#36501,#36502); #33911=AXIS2_PLACEMENT_3D('',#45128,#36504,#36505); #33912=AXIS2_PLACEMENT_3D('',#45132,#36508,#36509); #33913=AXIS2_PLACEMENT_3D('',#45139,#36514,#36515); #33914=AXIS2_PLACEMENT_3D('',#45141,#36517,#36518); #33915=AXIS2_PLACEMENT_3D('',#45143,#36520,#36521); #33916=AXIS2_PLACEMENT_3D('',#45145,#36523,#36524); #33917=AXIS2_PLACEMENT_3D('',#45147,#36526,#36527); #33918=AXIS2_PLACEMENT_3D('',#45149,#36529,#36530); #33919=AXIS2_PLACEMENT_3D('',#45150,#36531,#36532); #33920=AXIS2_PLACEMENT_3D('',#45154,#36535,#36536); #33921=AXIS2_PLACEMENT_3D('',#45168,#36544,#36545); #33922=AXIS2_PLACEMENT_3D('',#45172,#36548,#36549); #33923=AXIS2_PLACEMENT_3D('',#45176,#36552,#36553); #33924=AXIS2_PLACEMENT_3D('',#45182,#36557,#36558); #33925=AXIS2_PLACEMENT_3D('',#45188,#36562,#36563); #33926=AXIS2_PLACEMENT_3D('',#45194,#36567,#36568); #33927=AXIS2_PLACEMENT_3D('',#45200,#36572,#36573); #33928=AXIS2_PLACEMENT_3D('',#45206,#36577,#36578); #33929=AXIS2_PLACEMENT_3D('',#45212,#36582,#36583); #33930=AXIS2_PLACEMENT_3D('',#45216,#36586,#36587); #33931=AXIS2_PLACEMENT_3D('',#45220,#36590,#36591); #33932=AXIS2_PLACEMENT_3D('',#45240,#36602,#36603); #33933=AXIS2_PLACEMENT_3D('',#45242,#36605,#36606); #33934=AXIS2_PLACEMENT_3D('',#45246,#36608,#36609); #33935=AXIS2_PLACEMENT_3D('',#45250,#36611,#36612); #33936=AXIS2_PLACEMENT_3D('',#45258,#36616,#36617); #33937=AXIS2_PLACEMENT_3D('',#45261,#36619,#36620); #33938=AXIS2_PLACEMENT_3D('',#45262,#36621,#36622); #33939=AXIS2_PLACEMENT_3D('',#45266,#36625,#36626); #33940=AXIS2_PLACEMENT_3D('',#45270,#36629,#36630); #33941=AXIS2_PLACEMENT_3D('',#45274,#36633,#36634); #33942=AXIS2_PLACEMENT_3D('',#45294,#36645,#36646); #33943=AXIS2_PLACEMENT_3D('',#45296,#36648,#36649); #33944=AXIS2_PLACEMENT_3D('',#45300,#36652,#36653); #33945=AXIS2_PLACEMENT_3D('',#45302,#36654,#36655); #33946=AXIS2_PLACEMENT_3D('',#45306,#36657,#36658); #33947=AXIS2_PLACEMENT_3D('',#45314,#36662,#36663); #33948=AXIS2_PLACEMENT_3D('',#45318,#36665,#36666); #33949=AXIS2_PLACEMENT_3D('',#45320,#36668,#36669); #33950=AXIS2_PLACEMENT_3D('',#45323,#36672,#36673); #33951=AXIS2_PLACEMENT_3D('',#45327,#36675,#36676); #33952=AXIS2_PLACEMENT_3D('',#45331,#36678,#36679); #33953=AXIS2_PLACEMENT_3D('',#45339,#36683,#36684); #33954=AXIS2_PLACEMENT_3D('',#45342,#36686,#36687); #33955=AXIS2_PLACEMENT_3D('',#45343,#36688,#36689); #33956=AXIS2_PLACEMENT_3D('',#45345,#36691,#36692); #33957=AXIS2_PLACEMENT_3D('',#45347,#36693,#36694); #33958=AXIS2_PLACEMENT_3D('',#45351,#36696,#36697); #33959=AXIS2_PLACEMENT_3D('',#45359,#36701,#36702); #33960=AXIS2_PLACEMENT_3D('',#45363,#36704,#36705); #33961=AXIS2_PLACEMENT_3D('',#45365,#36707,#36708); #33962=AXIS2_PLACEMENT_3D('',#45368,#36711,#36712); #33963=AXIS2_PLACEMENT_3D('',#45371,#36714,#36715); #33964=AXIS2_PLACEMENT_3D('',#45372,#36716,#36717); #33965=AXIS2_PLACEMENT_3D('',#45376,#36719,#36720); #33966=AXIS2_PLACEMENT_3D('',#45384,#36724,#36725); #33967=AXIS2_PLACEMENT_3D('',#45388,#36727,#36728); #33968=AXIS2_PLACEMENT_3D('',#45390,#36730,#36731); #33969=AXIS2_PLACEMENT_3D('',#45394,#36733,#36734); #33970=AXIS2_PLACEMENT_3D('',#45398,#36736,#36737); #33971=AXIS2_PLACEMENT_3D('',#45406,#36741,#36742); #33972=AXIS2_PLACEMENT_3D('',#45409,#36744,#36745); #33973=AXIS2_PLACEMENT_3D('',#45410,#36746,#36747); #33974=AXIS2_PLACEMENT_3D('',#45412,#36749,#36750); #33975=AXIS2_PLACEMENT_3D('',#45415,#36753,#36754); #33976=AXIS2_PLACEMENT_3D('',#45419,#36757,#36758); #33977=AXIS2_PLACEMENT_3D('',#45423,#36761,#36762); #33978=AXIS2_PLACEMENT_3D('',#45427,#36765,#36766); #33979=AXIS2_PLACEMENT_3D('',#45440,#36773,#36774); #33980=AXIS2_PLACEMENT_3D('',#45441,#36775,#36776); #33981=AXIS2_PLACEMENT_3D('',#45445,#36779,#36780); #33982=AXIS2_PLACEMENT_3D('',#45447,#36782,#36783); #33983=AXIS2_PLACEMENT_3D('',#45449,#36785,#36786); #33984=AXIS2_PLACEMENT_3D('',#45451,#36788,#36789); #33985=AXIS2_PLACEMENT_3D('',#45453,#36791,#36792); #33986=AXIS2_PLACEMENT_3D('',#45455,#36794,#36795); #33987=AXIS2_PLACEMENT_3D('',#45457,#36797,#36798); #33988=AXIS2_PLACEMENT_3D('',#45459,#36800,#36801); #33989=AXIS2_PLACEMENT_3D('',#45461,#36803,#36804); #33990=AXIS2_PLACEMENT_3D('',#45463,#36806,#36807); #33991=AXIS2_PLACEMENT_3D('',#45465,#36809,#36810); #33992=AXIS2_PLACEMENT_3D('',#45466,#36811,#36812); #33993=AXIS2_PLACEMENT_3D('',#45470,#36815,#36816); #33994=AXIS2_PLACEMENT_3D('',#45474,#36819,#36820); #33995=AXIS2_PLACEMENT_3D('',#45478,#36823,#36824); #33996=AXIS2_PLACEMENT_3D('',#45484,#36828,#36829); #33997=AXIS2_PLACEMENT_3D('',#45490,#36833,#36834); #33998=AXIS2_PLACEMENT_3D('',#45496,#36838,#36839); #33999=AXIS2_PLACEMENT_3D('',#45502,#36843,#36844); #34000=AXIS2_PLACEMENT_3D('',#45508,#36848,#36849); #34001=AXIS2_PLACEMENT_3D('',#45514,#36853,#36854); #34002=AXIS2_PLACEMENT_3D('',#45520,#36858,#36859); #34003=AXIS2_PLACEMENT_3D('',#45526,#36863,#36864); #34004=AXIS2_PLACEMENT_3D('',#45528,#36866,#36867); #34005=AXIS2_PLACEMENT_3D('',#45530,#36869,#36870); #34006=AXIS2_PLACEMENT_3D('',#45532,#36872,#36873); #34007=AXIS2_PLACEMENT_3D('',#45534,#36875,#36876); #34008=AXIS2_PLACEMENT_3D('',#45536,#36878,#36879); #34009=AXIS2_PLACEMENT_3D('',#45538,#36881,#36882); #34010=AXIS2_PLACEMENT_3D('',#45540,#36884,#36885); #34011=AXIS2_PLACEMENT_3D('',#45542,#36887,#36888); #34012=AXIS2_PLACEMENT_3D('',#45544,#36890,#36891); #34013=AXIS2_PLACEMENT_3D('',#45545,#36892,#36893); #34014=AXIS2_PLACEMENT_3D('',#45547,#36895,#36896); #34015=AXIS2_PLACEMENT_3D('',#45549,#36898,#36899); #34016=AXIS2_PLACEMENT_3D('',#45551,#36901,#36902); #34017=AXIS2_PLACEMENT_3D('',#45553,#36904,#36905); #34018=AXIS2_PLACEMENT_3D('',#45555,#36907,#36908); #34019=AXIS2_PLACEMENT_3D('',#45557,#36910,#36911); #34020=AXIS2_PLACEMENT_3D('',#45559,#36913,#36914); #34021=AXIS2_PLACEMENT_3D('',#45560,#36915,#36916); #34022=AXIS2_PLACEMENT_3D('',#45564,#36919,#36920); #34023=AXIS2_PLACEMENT_3D('',#45566,#36922,#36923); #34024=AXIS2_PLACEMENT_3D('',#45570,#36926,#36927); #34025=AXIS2_PLACEMENT_3D('',#45590,#36938,#36939); #34026=AXIS2_PLACEMENT_3D('',#45594,#36942,#36943); #34027=AXIS2_PLACEMENT_3D('',#45596,#36945,#36946); #34028=AXIS2_PLACEMENT_3D('',#45599,#36948,#36949); #34029=AXIS2_PLACEMENT_3D('',#45600,#36950,#36951); #34030=AXIS2_PLACEMENT_3D('',#45602,#36953,#36954); #34031=AXIS2_PLACEMENT_3D('',#45604,#36956,#36957); #34032=AXIS2_PLACEMENT_3D('',#45606,#36959,#36960); #34033=AXIS2_PLACEMENT_3D('',#45610,#36962,#36963); #34034=AXIS2_PLACEMENT_3D('',#45614,#36965,#36966); #34035=AXIS2_PLACEMENT_3D('',#45622,#36970,#36971); #34036=AXIS2_PLACEMENT_3D('',#45625,#36973,#36974); #34037=AXIS2_PLACEMENT_3D('',#45626,#36975,#36976); #34038=AXIS2_PLACEMENT_3D('',#45628,#36977,#36978); #34039=AXIS2_PLACEMENT_3D('',#45632,#36980,#36981); #34040=AXIS2_PLACEMENT_3D('',#45640,#36985,#36986); #34041=AXIS2_PLACEMENT_3D('',#45644,#36988,#36989); #34042=AXIS2_PLACEMENT_3D('',#45646,#36991,#36992); #34043=AXIS2_PLACEMENT_3D('',#45649,#36995,#36996); #34044=AXIS2_PLACEMENT_3D('',#45652,#36998,#36999); #34045=AXIS2_PLACEMENT_3D('',#45653,#37000,#37001); #34046=AXIS2_PLACEMENT_3D('',#45657,#37003,#37004); #34047=AXIS2_PLACEMENT_3D('',#45665,#37008,#37009); #34048=AXIS2_PLACEMENT_3D('',#45669,#37011,#37012); #34049=AXIS2_PLACEMENT_3D('',#45671,#37014,#37015); #34050=AXIS2_PLACEMENT_3D('',#45675,#37017,#37018); #34051=AXIS2_PLACEMENT_3D('',#45679,#37020,#37021); #34052=AXIS2_PLACEMENT_3D('',#45687,#37025,#37026); #34053=AXIS2_PLACEMENT_3D('',#45690,#37028,#37029); #34054=AXIS2_PLACEMENT_3D('',#45691,#37030,#37031); #34055=AXIS2_PLACEMENT_3D('',#45693,#37033,#37034); #34056=AXIS2_PLACEMENT_3D('',#45696,#37037,#37038); #34057=AXIS2_PLACEMENT_3D('',#45700,#37040,#37041); #34058=AXIS2_PLACEMENT_3D('',#45704,#37043,#37044); #34059=AXIS2_PLACEMENT_3D('',#45712,#37048,#37049); #34060=AXIS2_PLACEMENT_3D('',#45715,#37051,#37052); #34061=AXIS2_PLACEMENT_3D('',#45716,#37053,#37054); #34062=AXIS2_PLACEMENT_3D('',#45718,#37055,#37056); #34063=AXIS2_PLACEMENT_3D('',#45722,#37058,#37059); #34064=AXIS2_PLACEMENT_3D('',#45730,#37063,#37064); #34065=AXIS2_PLACEMENT_3D('',#45734,#37066,#37067); #34066=AXIS2_PLACEMENT_3D('',#45736,#37069,#37070); #34067=AXIS2_PLACEMENT_3D('',#45739,#37073,#37074); #34068=AXIS2_PLACEMENT_3D('',#45742,#37076,#37077); #34069=AXIS2_PLACEMENT_3D('',#45743,#37078,#37079); #34070=AXIS2_PLACEMENT_3D('',#45747,#37081,#37082); #34071=AXIS2_PLACEMENT_3D('',#45755,#37086,#37087); #34072=AXIS2_PLACEMENT_3D('',#45759,#37089,#37090); #34073=AXIS2_PLACEMENT_3D('',#45761,#37092,#37093); #34074=AXIS2_PLACEMENT_3D('',#45765,#37095,#37096); #34075=AXIS2_PLACEMENT_3D('',#45769,#37098,#37099); #34076=AXIS2_PLACEMENT_3D('',#45777,#37103,#37104); #34077=AXIS2_PLACEMENT_3D('',#45780,#37106,#37107); #34078=AXIS2_PLACEMENT_3D('',#45781,#37108,#37109); #34079=AXIS2_PLACEMENT_3D('',#45783,#37111,#37112); #34080=AXIS2_PLACEMENT_3D('',#45786,#37115,#37116); #34081=AXIS2_PLACEMENT_3D('',#45787,#37117,#37118); #34082=AXIS2_PLACEMENT_3D('',#45789,#37120,#37121); #34083=AXIS2_PLACEMENT_3D('',#45791,#37123,#37124); #34084=AXIS2_PLACEMENT_3D('',#45793,#37126,#37127); #34085=AXIS2_PLACEMENT_3D('',#45795,#37129,#37130); #34086=AXIS2_PLACEMENT_3D('',#45796,#37131,#37132); #34087=AXIS2_PLACEMENT_3D('',#45798,#37134,#37135); #34088=AXIS2_PLACEMENT_3D('',#45800,#37137,#37138); #34089=AXIS2_PLACEMENT_3D('',#45802,#37140,#37141); #34090=AXIS2_PLACEMENT_3D('',#45804,#37143,#37144); #34091=AXIS2_PLACEMENT_3D('',#45806,#37146,#37147); #34092=AXIS2_PLACEMENT_3D('',#45808,#37149,#37150); #34093=AXIS2_PLACEMENT_3D('',#45810,#37152,#37153); #34094=AXIS2_PLACEMENT_3D('',#45811,#37154,#37155); #34095=AXIS2_PLACEMENT_3D('',#45813,#37157,#37158); #34096=AXIS2_PLACEMENT_3D('',#45815,#37160,#37161); #34097=AXIS2_PLACEMENT_3D('',#45817,#37163,#37164); #34098=AXIS2_PLACEMENT_3D('',#45819,#37166,#37167); #34099=AXIS2_PLACEMENT_3D('',#45821,#37169,#37170); #34100=AXIS2_PLACEMENT_3D('',#45823,#37172,#37173); #34101=AXIS2_PLACEMENT_3D('',#45825,#37175,#37176); #34102=AXIS2_PLACEMENT_3D('',#45826,#37177,#37178); #34103=AXIS2_PLACEMENT_3D('',#45828,#37180,#37181); #34104=AXIS2_PLACEMENT_3D('',#45830,#37183,#37184); #34105=AXIS2_PLACEMENT_3D('',#45832,#37186,#37187); #34106=AXIS2_PLACEMENT_3D('',#45834,#37189,#37190); #34107=AXIS2_PLACEMENT_3D('',#45836,#37192,#37193); #34108=AXIS2_PLACEMENT_3D('',#45838,#37195,#37196); #34109=AXIS2_PLACEMENT_3D('',#45840,#37198,#37199); #34110=AXIS2_PLACEMENT_3D('',#45841,#37200,#37201); #34111=AXIS2_PLACEMENT_3D('',#45843,#37203,#37204); #34112=AXIS2_PLACEMENT_3D('',#45845,#37206,#37207); #34113=AXIS2_PLACEMENT_3D('',#45847,#37209,#37210); #34114=AXIS2_PLACEMENT_3D('',#45849,#37212,#37213); #34115=AXIS2_PLACEMENT_3D('',#45851,#37215,#37216); #34116=AXIS2_PLACEMENT_3D('',#45853,#37218,#37219); #34117=AXIS2_PLACEMENT_3D('',#45855,#37221,#37222); #34118=AXIS2_PLACEMENT_3D('',#45856,#37223,#37224); #34119=AXIS2_PLACEMENT_3D('',#45857,#37225,#37226); #34120=AXIS2_PLACEMENT_3D('',#45858,#37227,#37228); #34121=AXIS2_PLACEMENT_3D('',#45867,#37233,#37234); #34122=AXIS2_PLACEMENT_3D('',#45873,#37238,#37239); #34123=AXIS2_PLACEMENT_3D('',#45879,#37243,#37244); #34124=AXIS2_PLACEMENT_3D('',#45882,#37246,#37247); #34125=AXIS2_PLACEMENT_3D('',#45884,#37248,#37249); #34126=AXIS2_PLACEMENT_3D('',#45886,#37250,#37251); #34127=AXIS2_PLACEMENT_3D('',#45888,#37252,#37253); #34128=AXIS2_PLACEMENT_3D('',#45890,#37254,#37255); #34129=AXIS2_PLACEMENT_3D('',#45892,#37256,#37257); #34130=AXIS2_PLACEMENT_3D('',#45894,#37258,#37259); #34131=AXIS2_PLACEMENT_3D('',#45896,#37260,#37261); #34132=AXIS2_PLACEMENT_3D('',#45898,#37262,#37263); #34133=AXIS2_PLACEMENT_3D('',#45900,#37264,#37265); #34134=AXIS2_PLACEMENT_3D('',#45902,#37266,#37267); #34135=AXIS2_PLACEMENT_3D('',#45904,#37268,#37269); #34136=AXIS2_PLACEMENT_3D('',#45906,#37270,#37271); #34137=AXIS2_PLACEMENT_3D('',#45908,#37272,#37273); #34138=AXIS2_PLACEMENT_3D('',#45910,#37274,#37275); #34139=AXIS2_PLACEMENT_3D('',#45912,#37276,#37277); #34140=AXIS2_PLACEMENT_3D('',#45914,#37278,#37279); #34141=AXIS2_PLACEMENT_3D('',#45916,#37280,#37281); #34142=AXIS2_PLACEMENT_3D('',#45918,#37282,#37283); #34143=AXIS2_PLACEMENT_3D('',#45920,#37284,#37285); #34144=AXIS2_PLACEMENT_3D('',#45922,#37286,#37287); #34145=AXIS2_PLACEMENT_3D('',#45924,#37288,#37289); #34146=AXIS2_PLACEMENT_3D('',#45926,#37290,#37291); #34147=AXIS2_PLACEMENT_3D('',#45928,#37292,#37293); #34148=AXIS2_PLACEMENT_3D('',#45930,#37294,#37295); #34149=AXIS2_PLACEMENT_3D('',#45932,#37296,#37297); #34150=AXIS2_PLACEMENT_3D('',#45934,#37298,#37299); #34151=AXIS2_PLACEMENT_3D('',#45936,#37300,#37301); #34152=AXIS2_PLACEMENT_3D('',#45938,#37302,#37303); #34153=AXIS2_PLACEMENT_3D('',#45939,#37304,#37305); #34154=AXIS2_PLACEMENT_3D('',#45942,#37307,#37308); #34155=AXIS2_PLACEMENT_3D('',#45944,#37309,#37310); #34156=AXIS2_PLACEMENT_3D('',#45946,#37311,#37312); #34157=AXIS2_PLACEMENT_3D('',#45948,#37313,#37314); #34158=AXIS2_PLACEMENT_3D('',#45950,#37315,#37316); #34159=AXIS2_PLACEMENT_3D('',#45952,#37317,#37318); #34160=AXIS2_PLACEMENT_3D('',#45954,#37319,#37320); #34161=AXIS2_PLACEMENT_3D('',#45956,#37321,#37322); #34162=AXIS2_PLACEMENT_3D('',#45958,#37323,#37324); #34163=AXIS2_PLACEMENT_3D('',#45960,#37325,#37326); #34164=AXIS2_PLACEMENT_3D('',#45962,#37327,#37328); #34165=AXIS2_PLACEMENT_3D('',#45964,#37329,#37330); #34166=AXIS2_PLACEMENT_3D('',#45966,#37331,#37332); #34167=AXIS2_PLACEMENT_3D('',#45968,#37333,#37334); #34168=AXIS2_PLACEMENT_3D('',#45970,#37335,#37336); #34169=AXIS2_PLACEMENT_3D('',#45972,#37337,#37338); #34170=AXIS2_PLACEMENT_3D('',#45974,#37339,#37340); #34171=AXIS2_PLACEMENT_3D('',#45976,#37341,#37342); #34172=AXIS2_PLACEMENT_3D('',#45978,#37343,#37344); #34173=AXIS2_PLACEMENT_3D('',#45980,#37345,#37346); #34174=AXIS2_PLACEMENT_3D('',#45982,#37347,#37348); #34175=AXIS2_PLACEMENT_3D('',#45984,#37349,#37350); #34176=AXIS2_PLACEMENT_3D('',#45986,#37351,#37352); #34177=AXIS2_PLACEMENT_3D('',#45988,#37353,#37354); #34178=AXIS2_PLACEMENT_3D('',#45990,#37355,#37356); #34179=AXIS2_PLACEMENT_3D('',#45992,#37357,#37358); #34180=AXIS2_PLACEMENT_3D('',#45994,#37359,#37360); #34181=AXIS2_PLACEMENT_3D('',#45996,#37361,#37362); #34182=AXIS2_PLACEMENT_3D('',#45998,#37363,#37364); #34183=AXIS2_PLACEMENT_3D('',#45999,#37365,#37366); #34184=AXIS2_PLACEMENT_3D('',#46000,#37367,#37368); #34185=AXIS2_PLACEMENT_3D('',#46002,#37370,#37371); #34186=AXIS2_PLACEMENT_3D('',#46004,#37373,#37374); #34187=AXIS2_PLACEMENT_3D('',#46006,#37376,#37377); #34188=AXIS2_PLACEMENT_3D('',#46008,#37379,#37380); #34189=AXIS2_PLACEMENT_3D('',#46010,#37382,#37383); #34190=AXIS2_PLACEMENT_3D('',#46012,#37385,#37386); #34191=AXIS2_PLACEMENT_3D('',#46014,#37388,#37389); #34192=AXIS2_PLACEMENT_3D('',#46016,#37391,#37392); #34193=AXIS2_PLACEMENT_3D('',#46018,#37394,#37395); #34194=AXIS2_PLACEMENT_3D('',#46020,#37397,#37398); #34195=AXIS2_PLACEMENT_3D('',#46022,#37400,#37401); #34196=AXIS2_PLACEMENT_3D('',#46024,#37403,#37404); #34197=AXIS2_PLACEMENT_3D('',#46026,#37406,#37407); #34198=AXIS2_PLACEMENT_3D('',#46028,#37409,#37410); #34199=AXIS2_PLACEMENT_3D('',#46030,#37412,#37413); #34200=AXIS2_PLACEMENT_3D('',#46032,#37415,#37416); #34201=AXIS2_PLACEMENT_3D('',#46034,#37418,#37419); #34202=AXIS2_PLACEMENT_3D('',#46036,#37421,#37422); #34203=AXIS2_PLACEMENT_3D('',#46038,#37424,#37425); #34204=AXIS2_PLACEMENT_3D('',#46040,#37427,#37428); #34205=AXIS2_PLACEMENT_3D('',#46042,#37430,#37431); #34206=AXIS2_PLACEMENT_3D('',#46044,#37433,#37434); #34207=AXIS2_PLACEMENT_3D('',#46046,#37436,#37437); #34208=AXIS2_PLACEMENT_3D('',#46048,#37439,#37440); #34209=AXIS2_PLACEMENT_3D('',#46050,#37442,#37443); #34210=AXIS2_PLACEMENT_3D('',#46052,#37445,#37446); #34211=AXIS2_PLACEMENT_3D('',#46054,#37448,#37449); #34212=AXIS2_PLACEMENT_3D('',#46056,#37451,#37452); #34213=AXIS2_PLACEMENT_3D('',#46058,#37454,#37455); #34214=AXIS2_PLACEMENT_3D('',#46059,#37456,#37457); #34215=AXIS2_PLACEMENT_3D('',#46060,#37458,#37459); #34216=AXIS2_PLACEMENT_3D('',#46062,#37460,#37461); #34217=AXIS2_PLACEMENT_3D('',#46065,#37463,#37464); #34218=AXIS2_PLACEMENT_3D('',#46066,#37465,#37466); #34219=AXIS2_PLACEMENT_3D('',#46068,#37467,#37468); #34220=AXIS2_PLACEMENT_3D('',#46071,#37470,#37471); #34221=AXIS2_PLACEMENT_3D('',#46072,#37472,#37473); #34222=AXIS2_PLACEMENT_3D('',#46074,#37474,#37475); #34223=AXIS2_PLACEMENT_3D('',#46077,#37477,#37478); #34224=AXIS2_PLACEMENT_3D('',#46078,#37479,#37480); #34225=AXIS2_PLACEMENT_3D('',#46083,#37482,#37483); #34226=AXIS2_PLACEMENT_3D('',#46086,#37485,#37486); #34227=AXIS2_PLACEMENT_3D('',#46087,#37487,#37488); #34228=AXIS2_PLACEMENT_3D('',#46090,#37489,#37490); #34229=AXIS2_PLACEMENT_3D('',#46094,#37492,#37493); #34230=AXIS2_PLACEMENT_3D('',#46096,#37495,#37496); #34231=AXIS2_PLACEMENT_3D('',#46099,#37497,#37498); #34232=AXIS2_PLACEMENT_3D('',#46103,#37500,#37501); #34233=AXIS2_PLACEMENT_3D('',#46105,#37503,#37504); #34234=AXIS2_PLACEMENT_3D('',#46108,#37505,#37506); #34235=AXIS2_PLACEMENT_3D('',#46112,#37508,#37509); #34236=AXIS2_PLACEMENT_3D('',#46114,#37511,#37512); #34237=AXIS2_PLACEMENT_3D('',#46117,#37513,#37514); #34238=AXIS2_PLACEMENT_3D('',#46121,#37516,#37517); #34239=AXIS2_PLACEMENT_3D('',#46123,#37519,#37520); #34240=AXIS2_PLACEMENT_3D('',#46125,#37521,#37522); #34241=AXIS2_PLACEMENT_3D('',#46128,#37524,#37525); #34242=AXIS2_PLACEMENT_3D('',#46129,#37526,#37527); #34243=AXIS2_PLACEMENT_3D('',#46131,#37528,#37529); #34244=AXIS2_PLACEMENT_3D('',#46134,#37531,#37532); #34245=AXIS2_PLACEMENT_3D('',#46135,#37533,#37534); #34246=AXIS2_PLACEMENT_3D('',#46137,#37535,#37536); #34247=AXIS2_PLACEMENT_3D('',#46140,#37538,#37539); #34248=AXIS2_PLACEMENT_3D('',#46141,#37540,#37541); #34249=AXIS2_PLACEMENT_3D('',#46143,#37542,#37543); #34250=AXIS2_PLACEMENT_3D('',#46146,#37545,#37546); #34251=AXIS2_PLACEMENT_3D('',#46147,#37547,#37548); #34252=AXIS2_PLACEMENT_3D('',#46149,#37549,#37550); #34253=AXIS2_PLACEMENT_3D('',#46152,#37552,#37553); #34254=AXIS2_PLACEMENT_3D('',#46153,#37554,#37555); #34255=AXIS2_PLACEMENT_3D('',#46155,#37556,#37557); #34256=AXIS2_PLACEMENT_3D('',#46158,#37559,#37560); #34257=AXIS2_PLACEMENT_3D('',#46159,#37561,#37562); #34258=AXIS2_PLACEMENT_3D('',#46161,#37563,#37564); #34259=AXIS2_PLACEMENT_3D('',#46164,#37566,#37567); #34260=AXIS2_PLACEMENT_3D('',#46165,#37568,#37569); #34261=AXIS2_PLACEMENT_3D('',#46167,#37570,#37571); #34262=AXIS2_PLACEMENT_3D('',#46170,#37573,#37574); #34263=AXIS2_PLACEMENT_3D('',#46171,#37575,#37576); #34264=AXIS2_PLACEMENT_3D('',#46173,#37577,#37578); #34265=AXIS2_PLACEMENT_3D('',#46176,#37580,#37581); #34266=AXIS2_PLACEMENT_3D('',#46177,#37582,#37583); #34267=AXIS2_PLACEMENT_3D('',#46179,#37584,#37585); #34268=AXIS2_PLACEMENT_3D('',#46182,#37587,#37588); #34269=AXIS2_PLACEMENT_3D('',#46183,#37589,#37590); #34270=AXIS2_PLACEMENT_3D('',#46185,#37591,#37592); #34271=AXIS2_PLACEMENT_3D('',#46188,#37594,#37595); #34272=AXIS2_PLACEMENT_3D('',#46189,#37596,#37597); #34273=AXIS2_PLACEMENT_3D('',#46191,#37598,#37599); #34274=AXIS2_PLACEMENT_3D('',#46194,#37601,#37602); #34275=AXIS2_PLACEMENT_3D('',#46195,#37603,#37604); #34276=AXIS2_PLACEMENT_3D('',#46198,#37605,#37606); #34277=AXIS2_PLACEMENT_3D('',#46202,#37608,#37609); #34278=AXIS2_PLACEMENT_3D('',#46204,#37611,#37612); #34279=AXIS2_PLACEMENT_3D('',#46207,#37613,#37614); #34280=AXIS2_PLACEMENT_3D('',#46211,#37616,#37617); #34281=AXIS2_PLACEMENT_3D('',#46213,#37619,#37620); #34282=AXIS2_PLACEMENT_3D('',#46216,#37621,#37622); #34283=AXIS2_PLACEMENT_3D('',#46220,#37624,#37625); #34284=AXIS2_PLACEMENT_3D('',#46222,#37627,#37628); #34285=AXIS2_PLACEMENT_3D('',#46225,#37629,#37630); #34286=AXIS2_PLACEMENT_3D('',#46229,#37632,#37633); #34287=AXIS2_PLACEMENT_3D('',#46231,#37635,#37636); #34288=AXIS2_PLACEMENT_3D('',#46234,#37637,#37638); #34289=AXIS2_PLACEMENT_3D('',#46238,#37640,#37641); #34290=AXIS2_PLACEMENT_3D('',#46240,#37643,#37644); #34291=AXIS2_PLACEMENT_3D('',#46243,#37645,#37646); #34292=AXIS2_PLACEMENT_3D('',#46247,#37648,#37649); #34293=AXIS2_PLACEMENT_3D('',#46249,#37651,#37652); #34294=AXIS2_PLACEMENT_3D('',#46252,#37653,#37654); #34295=AXIS2_PLACEMENT_3D('',#46256,#37656,#37657); #34296=AXIS2_PLACEMENT_3D('',#46258,#37659,#37660); #34297=AXIS2_PLACEMENT_3D('',#46261,#37661,#37662); #34298=AXIS2_PLACEMENT_3D('',#46265,#37664,#37665); #34299=AXIS2_PLACEMENT_3D('',#46267,#37667,#37668); #34300=AXIS2_PLACEMENT_3D('',#46270,#37669,#37670); #34301=AXIS2_PLACEMENT_3D('',#46274,#37672,#37673); #34302=AXIS2_PLACEMENT_3D('',#46276,#37675,#37676); #34303=AXIS2_PLACEMENT_3D('',#46279,#37677,#37678); #34304=AXIS2_PLACEMENT_3D('',#46283,#37680,#37681); #34305=AXIS2_PLACEMENT_3D('',#46285,#37683,#37684); #34306=AXIS2_PLACEMENT_3D('',#46288,#37685,#37686); #34307=AXIS2_PLACEMENT_3D('',#46292,#37688,#37689); #34308=AXIS2_PLACEMENT_3D('',#46294,#37691,#37692); #34309=AXIS2_PLACEMENT_3D('',#46297,#37693,#37694); #34310=AXIS2_PLACEMENT_3D('',#46301,#37696,#37697); #34311=AXIS2_PLACEMENT_3D('',#46303,#37699,#37700); #34312=AXIS2_PLACEMENT_3D('',#46306,#37701,#37702); #34313=AXIS2_PLACEMENT_3D('',#46310,#37704,#37705); #34314=AXIS2_PLACEMENT_3D('',#46312,#37707,#37708); #34315=AXIS2_PLACEMENT_3D('',#46315,#37709,#37710); #34316=AXIS2_PLACEMENT_3D('',#46319,#37712,#37713); #34317=AXIS2_PLACEMENT_3D('',#46321,#37715,#37716); #34318=AXIS2_PLACEMENT_3D('',#46324,#37717,#37718); #34319=AXIS2_PLACEMENT_3D('',#46328,#37720,#37721); #34320=AXIS2_PLACEMENT_3D('',#46330,#37723,#37724); #34321=AXIS2_PLACEMENT_3D('',#46332,#37725,#37726); #34322=AXIS2_PLACEMENT_3D('',#46335,#37728,#37729); #34323=AXIS2_PLACEMENT_3D('',#46336,#37730,#37731); #34324=AXIS2_PLACEMENT_3D('',#46338,#37732,#37733); #34325=AXIS2_PLACEMENT_3D('',#46341,#37735,#37736); #34326=AXIS2_PLACEMENT_3D('',#46342,#37737,#37738); #34327=AXIS2_PLACEMENT_3D('',#46344,#37739,#37740); #34328=AXIS2_PLACEMENT_3D('',#46347,#37742,#37743); #34329=AXIS2_PLACEMENT_3D('',#46348,#37744,#37745); #34330=AXIS2_PLACEMENT_3D('',#46350,#37746,#37747); #34331=AXIS2_PLACEMENT_3D('',#46353,#37749,#37750); #34332=AXIS2_PLACEMENT_3D('',#46354,#37751,#37752); #34333=AXIS2_PLACEMENT_3D('',#46356,#37753,#37754); #34334=AXIS2_PLACEMENT_3D('',#46359,#37756,#37757); #34335=AXIS2_PLACEMENT_3D('',#46360,#37758,#37759); #34336=AXIS2_PLACEMENT_3D('',#46362,#37760,#37761); #34337=AXIS2_PLACEMENT_3D('',#46365,#37763,#37764); #34338=AXIS2_PLACEMENT_3D('',#46366,#37765,#37766); #34339=AXIS2_PLACEMENT_3D('',#46368,#37767,#37768); #34340=AXIS2_PLACEMENT_3D('',#46371,#37770,#37771); #34341=AXIS2_PLACEMENT_3D('',#46372,#37772,#37773); #34342=AXIS2_PLACEMENT_3D('',#46374,#37774,#37775); #34343=AXIS2_PLACEMENT_3D('',#46377,#37777,#37778); #34344=AXIS2_PLACEMENT_3D('',#46378,#37779,#37780); #34345=AXIS2_PLACEMENT_3D('',#46381,#37781,#37782); #34346=AXIS2_PLACEMENT_3D('',#46385,#37784,#37785); #34347=AXIS2_PLACEMENT_3D('',#46387,#37787,#37788); #34348=AXIS2_PLACEMENT_3D('',#46393,#37792,#37793); #34349=AXIS2_PLACEMENT_3D('',#46396,#37794,#37795); #34350=AXIS2_PLACEMENT_3D('',#46400,#37797,#37798); #34351=AXIS2_PLACEMENT_3D('',#46402,#37800,#37801); #34352=AXIS2_PLACEMENT_3D('',#46405,#37802,#37803); #34353=AXIS2_PLACEMENT_3D('',#46409,#37805,#37806); #34354=AXIS2_PLACEMENT_3D('',#46411,#37808,#37809); #34355=AXIS2_PLACEMENT_3D('',#46417,#37813,#37814); #34356=AXIS2_PLACEMENT_3D('',#46423,#37818,#37819); #34357=AXIS2_PLACEMENT_3D('',#46429,#37823,#37824); #34358=AXIS2_PLACEMENT_3D('',#46435,#37828,#37829); #34359=AXIS2_PLACEMENT_3D('',#46441,#37833,#37834); #34360=AXIS2_PLACEMENT_3D('',#46447,#37838,#37839); #34361=AXIS2_PLACEMENT_3D('',#46453,#37843,#37844); #34362=AXIS2_PLACEMENT_3D('',#46459,#37848,#37849); #34363=AXIS2_PLACEMENT_3D('',#46465,#37853,#37854); #34364=AXIS2_PLACEMENT_3D('',#46471,#37858,#37859); #34365=AXIS2_PLACEMENT_3D('',#46477,#37863,#37864); #34366=AXIS2_PLACEMENT_3D('',#46483,#37868,#37869); #34367=AXIS2_PLACEMENT_3D('',#46489,#37873,#37874); #34368=AXIS2_PLACEMENT_3D('',#46495,#37878,#37879); #34369=AXIS2_PLACEMENT_3D('',#46501,#37883,#37884); #34370=AXIS2_PLACEMENT_3D('',#46507,#37888,#37889); #34371=AXIS2_PLACEMENT_3D('',#46513,#37893,#37894); #34372=AXIS2_PLACEMENT_3D('',#46519,#37898,#37899); #34373=AXIS2_PLACEMENT_3D('',#46525,#37903,#37904); #34374=AXIS2_PLACEMENT_3D('',#46531,#37908,#37909); #34375=AXIS2_PLACEMENT_3D('',#46537,#37913,#37914); #34376=AXIS2_PLACEMENT_3D('',#46539,#37915,#37916); #34377=AXIS2_PLACEMENT_3D('',#46543,#37918,#37919); #34378=AXIS2_PLACEMENT_3D('',#46547,#37921,#37922); #34379=AXIS2_PLACEMENT_3D('',#46549,#37924,#37925); #34380=AXIS2_PLACEMENT_3D('',#46551,#37926,#37927); #34381=AXIS2_PLACEMENT_3D('',#46555,#37929,#37930); #34382=AXIS2_PLACEMENT_3D('',#46559,#37932,#37933); #34383=AXIS2_PLACEMENT_3D('',#46561,#37935,#37936); #34384=AXIS2_PLACEMENT_3D('',#46573,#37942,#37943); #34385=AXIS2_PLACEMENT_3D('',#46576,#37945,#37946); #34386=AXIS2_PLACEMENT_3D('',#46577,#37947,#37948); #34387=AXIS2_PLACEMENT_3D('',#46582,#37950,#37951); #34388=AXIS2_PLACEMENT_3D('',#46586,#37953,#37954); #34389=AXIS2_PLACEMENT_3D('',#46593,#37959,#37960); #34390=AXIS2_PLACEMENT_3D('',#46596,#37961,#37962); #34391=AXIS2_PLACEMENT_3D('',#46599,#37964,#37965); #34392=AXIS2_PLACEMENT_3D('',#46603,#37967,#37968); #34393=AXIS2_PLACEMENT_3D('',#46605,#37970,#37971); #34394=AXIS2_PLACEMENT_3D('',#46608,#37972,#37973); #34395=AXIS2_PLACEMENT_3D('',#46612,#37975,#37976); #34396=AXIS2_PLACEMENT_3D('',#46615,#37978,#37979); #34397=AXIS2_PLACEMENT_3D('',#46617,#37981,#37982); #34398=AXIS2_PLACEMENT_3D('',#46619,#37983,#37984); #34399=AXIS2_PLACEMENT_3D('',#46623,#37986,#37987); #34400=AXIS2_PLACEMENT_3D('',#46627,#37989,#37990); #34401=AXIS2_PLACEMENT_3D('',#46629,#37992,#37993); #34402=AXIS2_PLACEMENT_3D('',#46631,#37994,#37995); #34403=AXIS2_PLACEMENT_3D('',#46635,#37997,#37998); #34404=AXIS2_PLACEMENT_3D('',#46639,#38000,#38001); #34405=AXIS2_PLACEMENT_3D('',#46641,#38003,#38004); #34406=AXIS2_PLACEMENT_3D('',#46646,#38006,#38007); #34407=AXIS2_PLACEMENT_3D('',#46650,#38009,#38010); #34408=AXIS2_PLACEMENT_3D('',#46657,#38015,#38016); #34409=AXIS2_PLACEMENT_3D('',#46669,#38022,#38023); #34410=AXIS2_PLACEMENT_3D('',#46672,#38025,#38026); #34411=AXIS2_PLACEMENT_3D('',#46673,#38027,#38028); #34412=AXIS2_PLACEMENT_3D('',#46676,#38029,#38030); #34413=AXIS2_PLACEMENT_3D('',#46679,#38032,#38033); #34414=AXIS2_PLACEMENT_3D('',#46683,#38035,#38036); #34415=AXIS2_PLACEMENT_3D('',#46685,#38038,#38039); #34416=AXIS2_PLACEMENT_3D('',#46688,#38040,#38041); #34417=AXIS2_PLACEMENT_3D('',#46692,#38043,#38044); #34418=AXIS2_PLACEMENT_3D('',#46695,#38046,#38047); #34419=AXIS2_PLACEMENT_3D('',#46697,#38049,#38050); #34420=AXIS2_PLACEMENT_3D('',#46699,#38051,#38052); #34421=AXIS2_PLACEMENT_3D('',#46703,#38054,#38055); #34422=AXIS2_PLACEMENT_3D('',#46707,#38057,#38058); #34423=AXIS2_PLACEMENT_3D('',#46709,#38060,#38061); #34424=AXIS2_PLACEMENT_3D('',#46711,#38062,#38063); #34425=AXIS2_PLACEMENT_3D('',#46715,#38065,#38066); #34426=AXIS2_PLACEMENT_3D('',#46719,#38068,#38069); #34427=AXIS2_PLACEMENT_3D('',#46721,#38071,#38072); #34428=AXIS2_PLACEMENT_3D('',#46723,#38073,#38074); #34429=AXIS2_PLACEMENT_3D('',#46727,#38076,#38077); #34430=AXIS2_PLACEMENT_3D('',#46731,#38079,#38080); #34431=AXIS2_PLACEMENT_3D('',#46733,#38082,#38083); #34432=AXIS2_PLACEMENT_3D('',#46735,#38084,#38085); #34433=AXIS2_PLACEMENT_3D('',#46739,#38087,#38088); #34434=AXIS2_PLACEMENT_3D('',#46743,#38090,#38091); #34435=AXIS2_PLACEMENT_3D('',#46745,#38093,#38094); #34436=AXIS2_PLACEMENT_3D('',#46747,#38095,#38096); #34437=AXIS2_PLACEMENT_3D('',#46751,#38098,#38099); #34438=AXIS2_PLACEMENT_3D('',#46755,#38101,#38102); #34439=AXIS2_PLACEMENT_3D('',#46757,#38104,#38105); #34440=AXIS2_PLACEMENT_3D('',#46759,#38106,#38107); #34441=AXIS2_PLACEMENT_3D('',#46763,#38109,#38110); #34442=AXIS2_PLACEMENT_3D('',#46767,#38112,#38113); #34443=AXIS2_PLACEMENT_3D('',#46769,#38115,#38116); #34444=AXIS2_PLACEMENT_3D('',#46774,#38118,#38119); #34445=AXIS2_PLACEMENT_3D('',#46778,#38121,#38122); #34446=AXIS2_PLACEMENT_3D('',#46785,#38127,#38128); #34447=AXIS2_PLACEMENT_3D('',#46797,#38134,#38135); #34448=AXIS2_PLACEMENT_3D('',#46800,#38137,#38138); #34449=AXIS2_PLACEMENT_3D('',#46801,#38139,#38140); #34450=AXIS2_PLACEMENT_3D('',#46804,#38141,#38142); #34451=AXIS2_PLACEMENT_3D('',#46807,#38144,#38145); #34452=AXIS2_PLACEMENT_3D('',#46811,#38147,#38148); #34453=AXIS2_PLACEMENT_3D('',#46813,#38150,#38151); #34454=AXIS2_PLACEMENT_3D('',#46816,#38152,#38153); #34455=AXIS2_PLACEMENT_3D('',#46820,#38155,#38156); #34456=AXIS2_PLACEMENT_3D('',#46823,#38158,#38159); #34457=AXIS2_PLACEMENT_3D('',#46825,#38161,#38162); #34458=AXIS2_PLACEMENT_3D('',#46827,#38163,#38164); #34459=AXIS2_PLACEMENT_3D('',#46831,#38166,#38167); #34460=AXIS2_PLACEMENT_3D('',#46835,#38169,#38170); #34461=AXIS2_PLACEMENT_3D('',#46837,#38172,#38173); #34462=AXIS2_PLACEMENT_3D('',#46839,#38174,#38175); #34463=AXIS2_PLACEMENT_3D('',#46843,#38177,#38178); #34464=AXIS2_PLACEMENT_3D('',#46847,#38180,#38181); #34465=AXIS2_PLACEMENT_3D('',#46849,#38183,#38184); #34466=AXIS2_PLACEMENT_3D('',#46852,#38185,#38186); #34467=AXIS2_PLACEMENT_3D('',#46855,#38188,#38189); #34468=AXIS2_PLACEMENT_3D('',#46859,#38191,#38192); #34469=AXIS2_PLACEMENT_3D('',#46861,#38194,#38195); #34470=AXIS2_PLACEMENT_3D('',#46864,#38196,#38197); #34471=AXIS2_PLACEMENT_3D('',#46868,#38199,#38200); #34472=AXIS2_PLACEMENT_3D('',#46871,#38202,#38203); #34473=AXIS2_PLACEMENT_3D('',#46873,#38205,#38206); #34474=AXIS2_PLACEMENT_3D('',#46875,#38207,#38208); #34475=AXIS2_PLACEMENT_3D('',#46879,#38210,#38211); #34476=AXIS2_PLACEMENT_3D('',#46883,#38213,#38214); #34477=AXIS2_PLACEMENT_3D('',#46885,#38216,#38217); #34478=AXIS2_PLACEMENT_3D('',#46887,#38218,#38219); #34479=AXIS2_PLACEMENT_3D('',#46891,#38221,#38222); #34480=AXIS2_PLACEMENT_3D('',#46895,#38224,#38225); #34481=AXIS2_PLACEMENT_3D('',#46897,#38227,#38228); #34482=AXIS2_PLACEMENT_3D('',#46900,#38229,#38230); #34483=AXIS2_PLACEMENT_3D('',#46903,#38232,#38233); #34484=AXIS2_PLACEMENT_3D('',#46907,#38235,#38236); #34485=AXIS2_PLACEMENT_3D('',#46909,#38238,#38239); #34486=AXIS2_PLACEMENT_3D('',#46912,#38240,#38241); #34487=AXIS2_PLACEMENT_3D('',#46916,#38243,#38244); #34488=AXIS2_PLACEMENT_3D('',#46919,#38246,#38247); #34489=AXIS2_PLACEMENT_3D('',#46921,#38249,#38250); #34490=AXIS2_PLACEMENT_3D('',#46923,#38251,#38252); #34491=AXIS2_PLACEMENT_3D('',#46927,#38254,#38255); #34492=AXIS2_PLACEMENT_3D('',#46931,#38257,#38258); #34493=AXIS2_PLACEMENT_3D('',#46933,#38260,#38261); #34494=AXIS2_PLACEMENT_3D('',#46935,#38262,#38263); #34495=AXIS2_PLACEMENT_3D('',#46939,#38265,#38266); #34496=AXIS2_PLACEMENT_3D('',#46943,#38268,#38269); #34497=AXIS2_PLACEMENT_3D('',#46945,#38271,#38272); #34498=AXIS2_PLACEMENT_3D('',#46947,#38273,#38274); #34499=AXIS2_PLACEMENT_3D('',#46950,#38276,#38277); #34500=AXIS2_PLACEMENT_3D('',#46954,#38279,#38280); #34501=AXIS2_PLACEMENT_3D('',#46956,#38282,#38283); #34502=AXIS2_PLACEMENT_3D('',#46958,#38284,#38285); #34503=AXIS2_PLACEMENT_3D('',#46962,#38287,#38288); #34504=AXIS2_PLACEMENT_3D('',#46965,#38290,#38291); #34505=AXIS2_PLACEMENT_3D('',#46967,#38293,#38294); #34506=AXIS2_PLACEMENT_3D('',#46969,#38295,#38296); #34507=AXIS2_PLACEMENT_3D('',#46973,#38298,#38299); #34508=AXIS2_PLACEMENT_3D('',#46977,#38301,#38302); #34509=AXIS2_PLACEMENT_3D('',#46979,#38304,#38305); #34510=AXIS2_PLACEMENT_3D('',#46981,#38306,#38307); #34511=AXIS2_PLACEMENT_3D('',#46985,#38309,#38310); #34512=AXIS2_PLACEMENT_3D('',#46989,#38312,#38313); #34513=AXIS2_PLACEMENT_3D('',#46991,#38315,#38316); #34514=AXIS2_PLACEMENT_3D('',#47003,#38322,#38323); #34515=AXIS2_PLACEMENT_3D('',#47006,#38325,#38326); #34516=AXIS2_PLACEMENT_3D('',#47007,#38327,#38328); #34517=AXIS2_PLACEMENT_3D('',#47012,#38330,#38331); #34518=AXIS2_PLACEMENT_3D('',#47016,#38333,#38334); #34519=AXIS2_PLACEMENT_3D('',#47023,#38339,#38340); #34520=AXIS2_PLACEMENT_3D('',#47025,#38341,#38342); #34521=AXIS2_PLACEMENT_3D('',#47029,#38344,#38345); #34522=AXIS2_PLACEMENT_3D('',#47033,#38347,#38348); #34523=AXIS2_PLACEMENT_3D('',#47035,#38350,#38351); #34524=AXIS2_PLACEMENT_3D('',#47037,#38352,#38353); #34525=AXIS2_PLACEMENT_3D('',#47041,#38355,#38356); #34526=AXIS2_PLACEMENT_3D('',#47045,#38358,#38359); #34527=AXIS2_PLACEMENT_3D('',#47047,#38361,#38362); #34528=AXIS2_PLACEMENT_3D('',#47054,#38366,#38367); #34529=AXIS2_PLACEMENT_3D('',#47055,#38368,#38369); #34530=AXIS2_PLACEMENT_3D('',#47059,#38371,#38372); #34531=AXIS2_PLACEMENT_3D('',#47063,#38375,#38376); #34532=AXIS2_PLACEMENT_3D('',#47072,#38381,#38382); #34533=AXIS2_PLACEMENT_3D('',#47074,#38383,#38384); #34534=AXIS2_PLACEMENT_3D('',#47075,#38385,#38386); #34535=AXIS2_PLACEMENT_3D('',#47077,#38387,#38388); #34536=AXIS2_PLACEMENT_3D('',#47078,#38389,#38390); #34537=AXIS2_PLACEMENT_3D('',#47080,#38391,#38392); #34538=AXIS2_PLACEMENT_3D('',#47081,#38393,#38394); #34539=AXIS2_PLACEMENT_3D('',#47083,#38395,#38396); #34540=AXIS2_PLACEMENT_3D('',#47084,#38397,#38398); #34541=AXIS2_PLACEMENT_3D('',#47087,#38401,#38402); #34542=AXIS2_PLACEMENT_3D('',#47091,#38406,#38407); #34543=AXIS2_PLACEMENT_3D('',#47095,#38411,#38412); #34544=AXIS2_PLACEMENT_3D('',#47099,#38416,#38417); #34545=AXIS2_PLACEMENT_3D('',#47103,#38421,#38422); #34546=AXIS2_PLACEMENT_3D('',#47107,#38426,#38427); #34547=AXIS2_PLACEMENT_3D('',#47111,#38431,#38432); #34548=AXIS2_PLACEMENT_3D('',#47115,#38436,#38437); #34549=AXIS2_PLACEMENT_3D('',#47119,#38441,#38442); #34550=AXIS2_PLACEMENT_3D('',#47123,#38446,#38447); #34551=AXIS2_PLACEMENT_3D('',#47127,#38451,#38452); #34552=AXIS2_PLACEMENT_3D('',#47131,#38456,#38457); #34553=AXIS2_PLACEMENT_3D('',#47135,#38461,#38462); #34554=AXIS2_PLACEMENT_3D('',#47139,#38466,#38467); #34555=AXIS2_PLACEMENT_3D('',#47143,#38471,#38472); #34556=AXIS2_PLACEMENT_3D('',#47147,#38476,#38477); #34557=AXIS2_PLACEMENT_3D('',#47151,#38481,#38482); #34558=AXIS2_PLACEMENT_3D('',#47155,#38486,#38487); #34559=AXIS2_PLACEMENT_3D('',#47159,#38491,#38492); #34560=AXIS2_PLACEMENT_3D('',#47163,#38496,#38497); #34561=AXIS2_PLACEMENT_3D('',#47164,#38498,#38499); #34562=AXIS2_PLACEMENT_3D('',#47165,#38500,#38501); #34563=AXIS2_PLACEMENT_3D('',#47166,#38502,#38503); #34564=AXIS2_PLACEMENT_3D('',#47167,#38504,#38505); #34565=AXIS2_PLACEMENT_3D('',#47168,#38506,#38507); #34566=AXIS2_PLACEMENT_3D('',#47169,#38508,#38509); #34567=AXIS2_PLACEMENT_3D('',#47170,#38510,#38511); #34568=AXIS2_PLACEMENT_3D('',#47171,#38512,#38513); #34569=AXIS2_PLACEMENT_3D('',#47172,#38514,#38515); #34570=AXIS2_PLACEMENT_3D('',#47173,#38516,#38517); #34571=AXIS2_PLACEMENT_3D('',#47174,#38518,#38519); #34572=AXIS2_PLACEMENT_3D('',#47175,#38520,#38521); #34573=AXIS2_PLACEMENT_3D('',#47176,#38522,#38523); #34574=AXIS2_PLACEMENT_3D('',#47177,#38524,#38525); #34575=AXIS2_PLACEMENT_3D('',#47178,#38526,#38527); #34576=AXIS2_PLACEMENT_3D('',#47179,#38528,#38529); #34577=AXIS2_PLACEMENT_3D('',#47180,#38530,#38531); #34578=AXIS2_PLACEMENT_3D('',#47181,#38532,#38533); #34579=AXIS2_PLACEMENT_3D('',#47182,#38534,#38535); #34580=AXIS2_PLACEMENT_3D('',#47183,#38536,#38537); #34581=AXIS2_PLACEMENT_3D('',#47185,#38538,#38539); #34582=AXIS2_PLACEMENT_3D('',#47188,#38541,#38542); #34583=AXIS2_PLACEMENT_3D('',#47189,#38543,#38544); #34584=AXIS2_PLACEMENT_3D('',#47191,#38545,#38546); #34585=AXIS2_PLACEMENT_3D('',#47194,#38548,#38549); #34586=AXIS2_PLACEMENT_3D('',#47195,#38550,#38551); #34587=AXIS2_PLACEMENT_3D('',#47197,#38552,#38553); #34588=AXIS2_PLACEMENT_3D('',#47200,#38555,#38556); #34589=AXIS2_PLACEMENT_3D('',#47201,#38557,#38558); #34590=AXIS2_PLACEMENT_3D('',#47203,#38559,#38560); #34591=AXIS2_PLACEMENT_3D('',#47206,#38562,#38563); #34592=AXIS2_PLACEMENT_3D('',#47207,#38564,#38565); #34593=AXIS2_PLACEMENT_3D('',#47211,#38567,#38568); #34594=AXIS2_PLACEMENT_3D('',#47212,#38569,#38570); #34595=AXIS2_PLACEMENT_3D('',#47213,#38571,#38572); #34596=AXIS2_PLACEMENT_3D('',#47218,#38574,#38575); #34597=AXIS2_PLACEMENT_3D('',#47221,#38577,#38578); #34598=AXIS2_PLACEMENT_3D('',#47222,#38579,#38580); #34599=AXIS2_PLACEMENT_3D('',#47224,#38581,#38582); #34600=AXIS2_PLACEMENT_3D('',#47227,#38584,#38585); #34601=AXIS2_PLACEMENT_3D('',#47228,#38586,#38587); #34602=AXIS2_PLACEMENT_3D('',#47230,#38588,#38589); #34603=AXIS2_PLACEMENT_3D('',#47233,#38591,#38592); #34604=AXIS2_PLACEMENT_3D('',#47234,#38593,#38594); #34605=AXIS2_PLACEMENT_3D('',#47236,#38595,#38596); #34606=AXIS2_PLACEMENT_3D('',#47239,#38598,#38599); #34607=AXIS2_PLACEMENT_3D('',#47240,#38600,#38601); #34608=AXIS2_PLACEMENT_3D('',#47242,#38602,#38603); #34609=AXIS2_PLACEMENT_3D('',#47245,#38605,#38606); #34610=AXIS2_PLACEMENT_3D('',#47246,#38607,#38608); #34611=AXIS2_PLACEMENT_3D('',#47248,#38609,#38610); #34612=AXIS2_PLACEMENT_3D('',#47251,#38612,#38613); #34613=AXIS2_PLACEMENT_3D('',#47252,#38614,#38615); #34614=AXIS2_PLACEMENT_3D('',#47254,#38616,#38617); #34615=AXIS2_PLACEMENT_3D('',#47257,#38619,#38620); #34616=AXIS2_PLACEMENT_3D('',#47258,#38621,#38622); #34617=AXIS2_PLACEMENT_3D('',#47260,#38623,#38624); #34618=AXIS2_PLACEMENT_3D('',#47263,#38626,#38627); #34619=AXIS2_PLACEMENT_3D('',#47264,#38628,#38629); #34620=AXIS2_PLACEMENT_3D('',#47266,#38630,#38631); #34621=AXIS2_PLACEMENT_3D('',#47269,#38633,#38634); #34622=AXIS2_PLACEMENT_3D('',#47270,#38635,#38636); #34623=AXIS2_PLACEMENT_3D('',#47272,#38637,#38638); #34624=AXIS2_PLACEMENT_3D('',#47275,#38640,#38641); #34625=AXIS2_PLACEMENT_3D('',#47276,#38642,#38643); #34626=AXIS2_PLACEMENT_3D('',#47278,#38644,#38645); #34627=AXIS2_PLACEMENT_3D('',#47281,#38647,#38648); #34628=AXIS2_PLACEMENT_3D('',#47282,#38649,#38650); #34629=AXIS2_PLACEMENT_3D('',#47284,#38651,#38652); #34630=AXIS2_PLACEMENT_3D('',#47287,#38654,#38655); #34631=AXIS2_PLACEMENT_3D('',#47288,#38656,#38657); #34632=AXIS2_PLACEMENT_3D('',#47290,#38658,#38659); #34633=AXIS2_PLACEMENT_3D('',#47293,#38661,#38662); #34634=AXIS2_PLACEMENT_3D('',#47294,#38663,#38664); #34635=AXIS2_PLACEMENT_3D('',#47296,#38665,#38666); #34636=AXIS2_PLACEMENT_3D('',#47299,#38668,#38669); #34637=AXIS2_PLACEMENT_3D('',#47300,#38670,#38671); #34638=AXIS2_PLACEMENT_3D('',#47302,#38672,#38673); #34639=AXIS2_PLACEMENT_3D('',#47305,#38675,#38676); #34640=AXIS2_PLACEMENT_3D('',#47306,#38677,#38678); #34641=AXIS2_PLACEMENT_3D('',#47308,#38679,#38680); #34642=AXIS2_PLACEMENT_3D('',#47311,#38682,#38683); #34643=AXIS2_PLACEMENT_3D('',#47312,#38684,#38685); #34644=AXIS2_PLACEMENT_3D('',#47314,#38686,#38687); #34645=AXIS2_PLACEMENT_3D('',#47317,#38689,#38690); #34646=AXIS2_PLACEMENT_3D('',#47318,#38691,#38692); #34647=AXIS2_PLACEMENT_3D('',#47320,#38693,#38694); #34648=AXIS2_PLACEMENT_3D('',#47323,#38696,#38697); #34649=AXIS2_PLACEMENT_3D('',#47324,#38698,#38699); #34650=AXIS2_PLACEMENT_3D('',#47326,#38700,#38701); #34651=AXIS2_PLACEMENT_3D('',#47329,#38703,#38704); #34652=AXIS2_PLACEMENT_3D('',#47330,#38705,#38706); #34653=AXIS2_PLACEMENT_3D('',#47332,#38707,#38708); #34654=AXIS2_PLACEMENT_3D('',#47335,#38710,#38711); #34655=AXIS2_PLACEMENT_3D('',#47336,#38712,#38713); #34656=AXIS2_PLACEMENT_3D('',#47338,#38714,#38715); #34657=AXIS2_PLACEMENT_3D('',#47341,#38717,#38718); #34658=AXIS2_PLACEMENT_3D('',#47342,#38719,#38720); #34659=AXIS2_PLACEMENT_3D('',#47351,#38725,#38726); #34660=AXIS2_PLACEMENT_3D('',#47357,#38730,#38731); #34661=AXIS2_PLACEMENT_3D('',#47359,#38732,#38733); #34662=AXIS2_PLACEMENT_3D('',#47361,#38734,#38735); #34663=AXIS2_PLACEMENT_3D('',#47363,#38737,#38738); #34664=AXIS2_PLACEMENT_3D('',#47365,#38739,#38740); #34665=AXIS2_PLACEMENT_3D('',#47368,#38742,#38743); #34666=AXIS2_PLACEMENT_3D('',#47369,#38744,#38745); #34667=AXIS2_PLACEMENT_3D('',#47375,#38749,#38750); #34668=AXIS2_PLACEMENT_3D('',#47384,#38755,#38756); #34669=AXIS2_PLACEMENT_3D('',#47393,#38761,#38762); #34670=AXIS2_PLACEMENT_3D('',#47402,#38767,#38768); #34671=AXIS2_PLACEMENT_3D('',#47411,#38773,#38774); #34672=AXIS2_PLACEMENT_3D('',#47420,#38779,#38780); #34673=AXIS2_PLACEMENT_3D('',#47429,#38785,#38786); #34674=AXIS2_PLACEMENT_3D('',#47438,#38791,#38792); #34675=AXIS2_PLACEMENT_3D('',#47447,#38797,#38798); #34676=AXIS2_PLACEMENT_3D('',#47456,#38803,#38804); #34677=AXIS2_PLACEMENT_3D('',#47465,#38809,#38810); #34678=AXIS2_PLACEMENT_3D('',#47474,#38815,#38816); #34679=AXIS2_PLACEMENT_3D('',#47483,#38821,#38822); #34680=AXIS2_PLACEMENT_3D('',#47492,#38827,#38828); #34681=AXIS2_PLACEMENT_3D('',#47501,#38833,#38834); #34682=AXIS2_PLACEMENT_3D('',#47510,#38839,#38840); #34683=AXIS2_PLACEMENT_3D('',#47519,#38845,#38846); #34684=AXIS2_PLACEMENT_3D('',#47528,#38851,#38852); #34685=AXIS2_PLACEMENT_3D('',#47537,#38857,#38858); #34686=AXIS2_PLACEMENT_3D('',#47546,#38863,#38864); #34687=AXIS2_PLACEMENT_3D('',#47555,#38869,#38870); #34688=AXIS2_PLACEMENT_3D('',#47565,#38871,#38872); #34689=AXIS2_PLACEMENT_3D('',#47576,#38874,#38875); #34690=AXIS2_PLACEMENT_3D('',#47577,#38876,#38877); #34691=AXIS2_PLACEMENT_3D('',#47579,#38878,#38879); #34692=AXIS2_PLACEMENT_3D('',#47589,#38880,#38881); #34693=AXIS2_PLACEMENT_3D('',#47599,#38883,#38884); #34694=AXIS2_PLACEMENT_3D('',#47604,#38886,#38887); #34695=AXIS2_PLACEMENT_3D('',#47608,#38889,#38890); #34696=AXIS2_PLACEMENT_3D('',#47613,#38893,#38894); #34697=AXIS2_PLACEMENT_3D('',#47617,#38897,#38898); #34698=AXIS2_PLACEMENT_3D('',#47622,#38900,#38901); #34699=AXIS2_PLACEMENT_3D('',#47629,#38905,#38906); #34700=AXIS2_PLACEMENT_3D('',#47634,#38909,#38910); #34701=AXIS2_PLACEMENT_3D('',#47635,#38911,#38912); #34702=AXIS2_PLACEMENT_3D('',#47646,#38913,#38914); #34703=AXIS2_PLACEMENT_3D('',#47655,#38915,#38916); #34704=AXIS2_PLACEMENT_3D('',#47657,#38918,#38919); #34705=AXIS2_PLACEMENT_3D('',#47660,#38920,#38921); #34706=AXIS2_PLACEMENT_3D('',#47671,#38923,#38924); #34707=AXIS2_PLACEMENT_3D('',#47679,#38925,#38926); #34708=AXIS2_PLACEMENT_3D('',#47689,#38927,#38928); #34709=AXIS2_PLACEMENT_3D('',#47700,#38930,#38931); #34710=AXIS2_PLACEMENT_3D('',#47701,#38932,#38933); #34711=AXIS2_PLACEMENT_3D('',#47703,#38934,#38935); #34712=AXIS2_PLACEMENT_3D('',#47713,#38936,#38937); #34713=AXIS2_PLACEMENT_3D('',#47723,#38939,#38940); #34714=AXIS2_PLACEMENT_3D('',#47729,#38943,#38944); #34715=AXIS2_PLACEMENT_3D('',#47737,#38948,#38949); #34716=AXIS2_PLACEMENT_3D('',#47740,#38951,#38952); #34717=AXIS2_PLACEMENT_3D('',#47741,#38953,#38954); #34718=AXIS2_PLACEMENT_3D('',#47747,#38957,#38958); #34719=AXIS2_PLACEMENT_3D('',#47751,#38960,#38961); #34720=AXIS2_PLACEMENT_3D('',#47758,#38965,#38966); #34721=AXIS2_PLACEMENT_3D('',#47759,#38967,#38968); #34722=AXIS2_PLACEMENT_3D('',#47770,#38969,#38970); #34723=AXIS2_PLACEMENT_3D('',#47779,#38971,#38972); #34724=AXIS2_PLACEMENT_3D('',#47781,#38974,#38975); #34725=AXIS2_PLACEMENT_3D('',#47784,#38976,#38977); #34726=AXIS2_PLACEMENT_3D('',#47795,#38979,#38980); #34727=AXIS2_PLACEMENT_3D('',#47803,#38981,#38982); #34728=AXIS2_PLACEMENT_3D('',#47813,#38983,#38984); #34729=AXIS2_PLACEMENT_3D('',#47824,#38986,#38987); #34730=AXIS2_PLACEMENT_3D('',#47825,#38988,#38989); #34731=AXIS2_PLACEMENT_3D('',#47827,#38990,#38991); #34732=AXIS2_PLACEMENT_3D('',#47837,#38992,#38993); #34733=AXIS2_PLACEMENT_3D('',#47847,#38995,#38996); #34734=AXIS2_PLACEMENT_3D('',#47857,#38997,#38998); #34735=AXIS2_PLACEMENT_3D('',#47868,#39000,#39001); #34736=AXIS2_PLACEMENT_3D('',#47869,#39002,#39003); #34737=AXIS2_PLACEMENT_3D('',#47871,#39004,#39005); #34738=AXIS2_PLACEMENT_3D('',#47881,#39006,#39007); #34739=AXIS2_PLACEMENT_3D('',#47891,#39009,#39010); #34740=AXIS2_PLACEMENT_3D('',#47901,#39011,#39012); #34741=AXIS2_PLACEMENT_3D('',#47912,#39014,#39015); #34742=AXIS2_PLACEMENT_3D('',#47913,#39016,#39017); #34743=AXIS2_PLACEMENT_3D('',#47915,#39018,#39019); #34744=AXIS2_PLACEMENT_3D('',#47925,#39020,#39021); #34745=AXIS2_PLACEMENT_3D('',#47935,#39023,#39024); #34746=AXIS2_PLACEMENT_3D('',#47941,#39027,#39028); #34747=AXIS2_PLACEMENT_3D('',#47949,#39032,#39033); #34748=AXIS2_PLACEMENT_3D('',#47952,#39035,#39036); #34749=AXIS2_PLACEMENT_3D('',#47953,#39037,#39038); #34750=AXIS2_PLACEMENT_3D('',#47959,#39041,#39042); #34751=AXIS2_PLACEMENT_3D('',#47963,#39044,#39045); #34752=AXIS2_PLACEMENT_3D('',#47970,#39049,#39050); #34753=AXIS2_PLACEMENT_3D('',#47971,#39051,#39052); #34754=AXIS2_PLACEMENT_3D('',#47982,#39053,#39054); #34755=AXIS2_PLACEMENT_3D('',#47991,#39055,#39056); #34756=AXIS2_PLACEMENT_3D('',#47993,#39058,#39059); #34757=AXIS2_PLACEMENT_3D('',#47996,#39060,#39061); #34758=AXIS2_PLACEMENT_3D('',#48007,#39063,#39064); #34759=AXIS2_PLACEMENT_3D('',#48015,#39065,#39066); #34760=AXIS2_PLACEMENT_3D('',#48025,#39067,#39068); #34761=AXIS2_PLACEMENT_3D('',#48036,#39070,#39071); #34762=AXIS2_PLACEMENT_3D('',#48037,#39072,#39073); #34763=AXIS2_PLACEMENT_3D('',#48039,#39074,#39075); #34764=AXIS2_PLACEMENT_3D('',#48049,#39076,#39077); #34765=AXIS2_PLACEMENT_3D('',#48059,#39079,#39080); #34766=AXIS2_PLACEMENT_3D('',#48070,#39081,#39082); #34767=AXIS2_PLACEMENT_3D('',#48079,#39083,#39084); #34768=AXIS2_PLACEMENT_3D('',#48081,#39086,#39087); #34769=AXIS2_PLACEMENT_3D('',#48084,#39088,#39089); #34770=AXIS2_PLACEMENT_3D('',#48095,#39091,#39092); #34771=AXIS2_PLACEMENT_3D('',#48103,#39093,#39094); #34772=AXIS2_PLACEMENT_3D('',#48113,#39095,#39096); #34773=AXIS2_PLACEMENT_3D('',#48124,#39098,#39099); #34774=AXIS2_PLACEMENT_3D('',#48125,#39100,#39101); #34775=AXIS2_PLACEMENT_3D('',#48127,#39102,#39103); #34776=AXIS2_PLACEMENT_3D('',#48137,#39104,#39105); #34777=AXIS2_PLACEMENT_3D('',#48147,#39107,#39108); #34778=AXIS2_PLACEMENT_3D('',#48158,#39109,#39110); #34779=AXIS2_PLACEMENT_3D('',#48167,#39111,#39112); #34780=AXIS2_PLACEMENT_3D('',#48169,#39114,#39115); #34781=AXIS2_PLACEMENT_3D('',#48172,#39116,#39117); #34782=AXIS2_PLACEMENT_3D('',#48183,#39119,#39120); #34783=AXIS2_PLACEMENT_3D('',#48191,#39121,#39122); #34784=AXIS2_PLACEMENT_3D('',#48201,#39123,#39124); #34785=AXIS2_PLACEMENT_3D('',#48212,#39126,#39127); #34786=AXIS2_PLACEMENT_3D('',#48213,#39128,#39129); #34787=AXIS2_PLACEMENT_3D('',#48215,#39130,#39131); #34788=AXIS2_PLACEMENT_3D('',#48225,#39132,#39133); #34789=AXIS2_PLACEMENT_3D('',#48235,#39135,#39136); #34790=AXIS2_PLACEMENT_3D('',#48245,#39137,#39138); #34791=AXIS2_PLACEMENT_3D('',#48254,#39139,#39140); #34792=AXIS2_PLACEMENT_3D('',#48256,#39142,#39143); #34793=AXIS2_PLACEMENT_3D('',#48259,#39144,#39145); #34794=AXIS2_PLACEMENT_3D('',#48269,#39147,#39148); #34795=AXIS2_PLACEMENT_3D('',#48277,#39149,#39150); #34796=AXIS2_PLACEMENT_3D('',#48287,#39151,#39152); #34797=AXIS2_PLACEMENT_3D('',#48298,#39154,#39155); #34798=AXIS2_PLACEMENT_3D('',#48299,#39156,#39157); #34799=AXIS2_PLACEMENT_3D('',#48301,#39158,#39159); #34800=AXIS2_PLACEMENT_3D('',#48311,#39160,#39161); #34801=AXIS2_PLACEMENT_3D('',#48321,#39163,#39164); #34802=AXIS2_PLACEMENT_3D('',#48326,#39166,#39167); #34803=AXIS2_PLACEMENT_3D('',#48330,#39169,#39170); #34804=AXIS2_PLACEMENT_3D('',#48335,#39173,#39174); #34805=AXIS2_PLACEMENT_3D('',#48339,#39177,#39178); #34806=AXIS2_PLACEMENT_3D('',#48344,#39180,#39181); #34807=AXIS2_PLACEMENT_3D('',#48351,#39185,#39186); #34808=AXIS2_PLACEMENT_3D('',#48356,#39189,#39190); #34809=AXIS2_PLACEMENT_3D('',#48357,#39191,#39192); #34810=AXIS2_PLACEMENT_3D('',#48367,#39193,#39194); #34811=AXIS2_PLACEMENT_3D('',#48378,#39196,#39197); #34812=AXIS2_PLACEMENT_3D('',#48379,#39198,#39199); #34813=AXIS2_PLACEMENT_3D('',#48381,#39200,#39201); #34814=AXIS2_PLACEMENT_3D('',#48391,#39202,#39203); #34815=AXIS2_PLACEMENT_3D('',#48401,#39205,#39206); #34816=AXIS2_PLACEMENT_3D('',#48405,#39208,#39209); #34817=AXIS2_PLACEMENT_3D('',#48410,#39213,#39214); #34818=AXIS2_PLACEMENT_3D('',#48415,#39216,#39217); #34819=AXIS2_PLACEMENT_3D('',#48419,#39221,#39222); #34820=AXIS2_PLACEMENT_3D('',#48421,#39224,#39225); #34821=AXIS2_PLACEMENT_3D('',#48427,#39228,#39229); #34822=AXIS2_PLACEMENT_3D('',#48431,#39231,#39232); #34823=AXIS2_PLACEMENT_3D('',#48433,#39234,#39235); #34824=AXIS2_PLACEMENT_3D('',#48439,#39238,#39239); #34825=AXIS2_PLACEMENT_3D('',#48443,#39241,#39242); #34826=AXIS2_PLACEMENT_3D('',#48445,#39244,#39245); #34827=AXIS2_PLACEMENT_3D('',#48447,#39246,#39247); #34828=AXIS2_PLACEMENT_3D('',#48448,#39248,#39249); #34829=AXIS2_PLACEMENT_3D('',#48450,#39250,#39251); #34830=AXIS2_PLACEMENT_3D('',#48451,#39252,#39253); #34831=AXIS2_PLACEMENT_3D('',#48453,#39254,#39255); #34832=AXIS2_PLACEMENT_3D('',#48454,#39256,#39257); #34833=AXIS2_PLACEMENT_3D('',#48456,#39258,#39259); #34834=AXIS2_PLACEMENT_3D('',#48457,#39260,#39261); #34835=AXIS2_PLACEMENT_3D('',#48481,#39285,#39286); #34836=AXIS2_PLACEMENT_3D('',#48505,#39310,#39311); #34837=AXIS2_PLACEMENT_3D('',#48506,#39312,#39313); #34838=AXIS2_PLACEMENT_3D('',#48508,#39315,#39316); #34839=AXIS2_PLACEMENT_3D('',#48510,#39318,#39319); #34840=AXIS2_PLACEMENT_3D('',#48512,#39321,#39322); #34841=AXIS2_PLACEMENT_3D('',#48514,#39324,#39325); #34842=AXIS2_PLACEMENT_3D('',#48516,#39327,#39328); #34843=AXIS2_PLACEMENT_3D('',#48518,#39330,#39331); #34844=AXIS2_PLACEMENT_3D('',#48520,#39333,#39334); #34845=AXIS2_PLACEMENT_3D('',#48522,#39336,#39337); #34846=AXIS2_PLACEMENT_3D('',#48524,#39339,#39340); #34847=AXIS2_PLACEMENT_3D('',#48526,#39342,#39343); #34848=AXIS2_PLACEMENT_3D('',#48528,#39345,#39346); #34849=AXIS2_PLACEMENT_3D('',#48530,#39348,#39349); #34850=AXIS2_PLACEMENT_3D('',#48532,#39351,#39352); #34851=AXIS2_PLACEMENT_3D('',#48534,#39354,#39355); #34852=AXIS2_PLACEMENT_3D('',#48536,#39357,#39358); #34853=AXIS2_PLACEMENT_3D('',#48538,#39360,#39361); #34854=AXIS2_PLACEMENT_3D('',#48540,#39363,#39364); #34855=AXIS2_PLACEMENT_3D('',#48542,#39366,#39367); #34856=AXIS2_PLACEMENT_3D('',#48544,#39369,#39370); #34857=AXIS2_PLACEMENT_3D('',#48546,#39372,#39373); #34858=AXIS2_PLACEMENT_3D('',#48548,#39375,#39376); #34859=AXIS2_PLACEMENT_3D('',#48550,#39378,#39379); #34860=AXIS2_PLACEMENT_3D('',#48552,#39381,#39382); #34861=AXIS2_PLACEMENT_3D('',#48554,#39384,#39385); #34862=AXIS2_PLACEMENT_3D('',#48556,#39387,#39388); #34863=AXIS2_PLACEMENT_3D('',#48558,#39390,#39391); #34864=AXIS2_PLACEMENT_3D('',#48560,#39393,#39394); #34865=AXIS2_PLACEMENT_3D('',#48562,#39396,#39397); #34866=AXIS2_PLACEMENT_3D('',#48564,#39399,#39400); #34867=AXIS2_PLACEMENT_3D('',#48566,#39402,#39403); #34868=AXIS2_PLACEMENT_3D('',#48568,#39405,#39406); #34869=AXIS2_PLACEMENT_3D('',#48570,#39408,#39409); #34870=AXIS2_PLACEMENT_3D('',#48572,#39411,#39412); #34871=AXIS2_PLACEMENT_3D('',#48574,#39414,#39415); #34872=AXIS2_PLACEMENT_3D('',#48576,#39417,#39418); #34873=AXIS2_PLACEMENT_3D('',#48578,#39420,#39421); #34874=AXIS2_PLACEMENT_3D('',#48580,#39423,#39424); #34875=AXIS2_PLACEMENT_3D('',#48582,#39426,#39427); #34876=AXIS2_PLACEMENT_3D('',#48584,#39429,#39430); #34877=AXIS2_PLACEMENT_3D('',#48585,#39431,#39432); #34878=AXIS2_PLACEMENT_3D('',#48587,#39434,#39435); #34879=AXIS2_PLACEMENT_3D('',#48588,#39436,#39437); #34880=AXIS2_PLACEMENT_3D('',#48590,#39439,#39440); #34881=AXIS2_PLACEMENT_3D('',#48591,#39441,#39442); #34882=AXIS2_PLACEMENT_3D('',#48592,#39443,#39444); #34883=AXIS2_PLACEMENT_3D('',#48593,#39445,#39446); #34884=AXIS2_PLACEMENT_3D('',#48594,#39447,#39448); #34885=AXIS2_PLACEMENT_3D('',#48595,#39449,#39450); #34886=AXIS2_PLACEMENT_3D('',#48596,#39451,#39452); #34887=AXIS2_PLACEMENT_3D('',#48597,#39453,#39454); #34888=AXIS2_PLACEMENT_3D('',#48598,#39455,#39456); #34889=AXIS2_PLACEMENT_3D('',#48599,#39457,#39458); #34890=AXIS2_PLACEMENT_3D('',#48600,#39459,#39460); #34891=AXIS2_PLACEMENT_3D('',#48601,#39461,#39462); #34892=AXIS2_PLACEMENT_3D('',#48602,#39463,#39464); #34893=AXIS2_PLACEMENT_3D('',#48603,#39465,#39466); #34894=AXIS2_PLACEMENT_3D('',#48604,#39467,#39468); #34895=AXIS2_PLACEMENT_3D('',#48605,#39469,#39470); #34896=AXIS2_PLACEMENT_3D('',#48606,#39471,#39472); #34897=AXIS2_PLACEMENT_3D('',#48607,#39473,#39474); #34898=AXIS2_PLACEMENT_3D('',#48608,#39475,#39476); #34899=AXIS2_PLACEMENT_3D('',#48609,#39477,#39478); #34900=AXIS2_PLACEMENT_3D('',#48610,#39479,#39480); #34901=AXIS2_PLACEMENT_3D('',#48611,#39481,#39482); #34902=AXIS2_PLACEMENT_3D('',#48612,#39483,#39484); #34903=AXIS2_PLACEMENT_3D('',#48617,#39486,#39487); #34904=AXIS2_PLACEMENT_3D('',#48621,#39489,#39490); #34905=AXIS2_PLACEMENT_3D('',#48625,#39492,#39493); #34906=AXIS2_PLACEMENT_3D('',#48629,#39495,#39496); #34907=AXIS2_PLACEMENT_3D('',#48633,#39498,#39499); #34908=AXIS2_PLACEMENT_3D('',#48636,#39501,#39502); #34909=AXIS2_PLACEMENT_3D('',#48637,#39503,#39504); #34910=AXIS2_PLACEMENT_3D('',#48646,#39509,#39510); #34911=AXIS2_PLACEMENT_3D('',#48648,#39511,#39512); #34912=AXIS2_PLACEMENT_3D('',#48650,#39513,#39514); #34913=AXIS2_PLACEMENT_3D('',#48652,#39516,#39517); #34914=AXIS2_PLACEMENT_3D('',#48658,#39521,#39522); #34915=AXIS2_PLACEMENT_3D('',#48660,#39523,#39524); #34916=AXIS2_PLACEMENT_3D('',#48662,#39525,#39526); #34917=AXIS2_PLACEMENT_3D('',#48664,#39528,#39529); #34918=AXIS2_PLACEMENT_3D('',#48670,#39533,#39534); #34919=AXIS2_PLACEMENT_3D('',#48672,#39535,#39536); #34920=AXIS2_PLACEMENT_3D('',#48674,#39537,#39538); #34921=AXIS2_PLACEMENT_3D('',#48676,#39540,#39541); #34922=AXIS2_PLACEMENT_3D('',#48682,#39545,#39546); #34923=AXIS2_PLACEMENT_3D('',#48684,#39547,#39548); #34924=AXIS2_PLACEMENT_3D('',#48686,#39549,#39550); #34925=AXIS2_PLACEMENT_3D('',#48688,#39552,#39553); #34926=AXIS2_PLACEMENT_3D('',#48694,#39557,#39558); #34927=AXIS2_PLACEMENT_3D('',#48696,#39559,#39560); #34928=AXIS2_PLACEMENT_3D('',#48698,#39561,#39562); #34929=AXIS2_PLACEMENT_3D('',#48700,#39564,#39565); #34930=AXIS2_PLACEMENT_3D('',#48706,#39569,#39570); #34931=AXIS2_PLACEMENT_3D('',#48707,#39571,#39572); #34932=AXIS2_PLACEMENT_3D('',#48708,#39573,#39574); #34933=AXIS2_PLACEMENT_3D('',#48709,#39575,#39576); #34934=AXIS2_PLACEMENT_3D('',#48710,#39577,#39578); #34935=AXIS2_PLACEMENT_3D('',#48715,#39580,#39581); #34936=AXIS2_PLACEMENT_3D('',#48719,#39583,#39584); #34937=AXIS2_PLACEMENT_3D('',#48723,#39586,#39587); #34938=AXIS2_PLACEMENT_3D('',#48727,#39589,#39590); #34939=AXIS2_PLACEMENT_3D('',#48731,#39592,#39593); #34940=AXIS2_PLACEMENT_3D('',#48734,#39595,#39596); #34941=AXIS2_PLACEMENT_3D('',#48735,#39597,#39598); #34942=AXIS2_PLACEMENT_3D('',#48738,#39601,#39602); #34943=AXIS2_PLACEMENT_3D('',#48740,#39604,#39605); #34944=AXIS2_PLACEMENT_3D('',#48742,#39607,#39608); #34945=AXIS2_PLACEMENT_3D('',#48744,#39610,#39611); #34946=AXIS2_PLACEMENT_3D('',#48746,#39613,#39614); #34947=AXIS2_PLACEMENT_3D('',#48748,#39616,#39617); #34948=AXIS2_PLACEMENT_3D('',#48750,#39619,#39620); #34949=AXIS2_PLACEMENT_3D('',#48752,#39622,#39623); #34950=AXIS2_PLACEMENT_3D('',#48754,#39625,#39626); #34951=AXIS2_PLACEMENT_3D('',#48756,#39628,#39629); #34952=AXIS2_PLACEMENT_3D('',#48758,#39631,#39632); #34953=AXIS2_PLACEMENT_3D('',#48759,#39633,#39634); #34954=AXIS2_PLACEMENT_3D('',#48766,#39637,#39638); #34955=AXIS2_PLACEMENT_3D('',#48774,#39642,#39643); #34956=AXIS2_PLACEMENT_3D('',#48776,#39645,#39646); #34957=AXIS2_PLACEMENT_3D('',#48785,#39650,#39651); #34958=AXIS2_PLACEMENT_3D('',#48792,#39655,#39656); #34959=AXIS2_PLACEMENT_3D('',#48793,#39657,#39658); #34960=AXIS2_PLACEMENT_3D('',#48796,#39661,#39662); #34961=AXIS2_PLACEMENT_3D('',#48798,#39664,#39665); #34962=AXIS2_PLACEMENT_3D('',#48800,#39667,#39668); #34963=AXIS2_PLACEMENT_3D('',#48802,#39670,#39671); #34964=AXIS2_PLACEMENT_3D('',#48804,#39673,#39674); #34965=AXIS2_PLACEMENT_3D('',#48806,#39676,#39677); #34966=AXIS2_PLACEMENT_3D('',#48808,#39679,#39680); #34967=AXIS2_PLACEMENT_3D('',#48809,#39681,#39682); #34968=AXIS2_PLACEMENT_3D('',#48816,#39685,#39686); #34969=AXIS2_PLACEMENT_3D('',#48824,#39690,#39691); #34970=AXIS2_PLACEMENT_3D('',#48826,#39693,#39694); #34971=AXIS2_PLACEMENT_3D('',#48835,#39698,#39699); #34972=AXIS2_PLACEMENT_3D('',#48842,#39703,#39704); #34973=AXIS2_PLACEMENT_3D('',#48843,#39705,#39706); #34974=AXIS2_PLACEMENT_3D('',#48846,#39709,#39710); #34975=AXIS2_PLACEMENT_3D('',#48848,#39712,#39713); #34976=AXIS2_PLACEMENT_3D('',#48850,#39715,#39716); #34977=AXIS2_PLACEMENT_3D('',#48852,#39718,#39719); #34978=AXIS2_PLACEMENT_3D('',#48854,#39721,#39722); #34979=AXIS2_PLACEMENT_3D('',#48856,#39724,#39725); #34980=AXIS2_PLACEMENT_3D('',#48858,#39727,#39728); #34981=AXIS2_PLACEMENT_3D('',#48859,#39729,#39730); #34982=AXIS2_PLACEMENT_3D('',#48866,#39733,#39734); #34983=AXIS2_PLACEMENT_3D('',#48874,#39738,#39739); #34984=AXIS2_PLACEMENT_3D('',#48876,#39741,#39742); #34985=AXIS2_PLACEMENT_3D('',#48885,#39746,#39747); #34986=AXIS2_PLACEMENT_3D('',#48892,#39751,#39752); #34987=AXIS2_PLACEMENT_3D('',#48893,#39753,#39754); #34988=AXIS2_PLACEMENT_3D('',#48896,#39757,#39758); #34989=AXIS2_PLACEMENT_3D('',#48898,#39760,#39761); #34990=AXIS2_PLACEMENT_3D('',#48900,#39763,#39764); #34991=AXIS2_PLACEMENT_3D('',#48902,#39766,#39767); #34992=AXIS2_PLACEMENT_3D('',#48904,#39769,#39770); #34993=AXIS2_PLACEMENT_3D('',#48906,#39772,#39773); #34994=AXIS2_PLACEMENT_3D('',#48908,#39775,#39776); #34995=AXIS2_PLACEMENT_3D('',#48909,#39777,#39778); #34996=AXIS2_PLACEMENT_3D('',#48916,#39781,#39782); #34997=AXIS2_PLACEMENT_3D('',#48924,#39786,#39787); #34998=AXIS2_PLACEMENT_3D('',#48926,#39789,#39790); #34999=AXIS2_PLACEMENT_3D('',#48935,#39794,#39795); #35000=AXIS2_PLACEMENT_3D('',#48942,#39799,#39800); #35001=AXIS2_PLACEMENT_3D('',#48943,#39801,#39802); #35002=AXIS2_PLACEMENT_3D('',#48946,#39805,#39806); #35003=AXIS2_PLACEMENT_3D('',#48948,#39808,#39809); #35004=AXIS2_PLACEMENT_3D('',#48950,#39811,#39812); #35005=AXIS2_PLACEMENT_3D('',#48952,#39814,#39815); #35006=AXIS2_PLACEMENT_3D('',#48954,#39817,#39818); #35007=AXIS2_PLACEMENT_3D('',#48956,#39820,#39821); #35008=AXIS2_PLACEMENT_3D('',#48958,#39823,#39824); #35009=AXIS2_PLACEMENT_3D('',#48959,#39825,#39826); #35010=AXIS2_PLACEMENT_3D('',#48962,#39827,#39828); #35011=AXIS2_PLACEMENT_3D('',#48966,#39830,#39831); #35012=AXIS2_PLACEMENT_3D('',#48968,#39833,#39834); #35013=AXIS2_PLACEMENT_3D('',#48971,#39835,#39836); #35014=AXIS2_PLACEMENT_3D('',#48972,#39837,#39838); #35015=AXIS2_PLACEMENT_3D('',#48973,#39839,#39840); #35016=AXIS2_PLACEMENT_3D('',#48974,#39841,#39842); #35017=AXIS2_PLACEMENT_3D('',#48977,#39843,#39844); #35018=AXIS2_PLACEMENT_3D('',#48978,#39845,#39846); #35019=AXIS2_PLACEMENT_3D('',#48979,#39847,#39848); #35020=AXIS2_PLACEMENT_3D('',#48980,#39849,#39850); #35021=AXIS2_PLACEMENT_3D('',#48983,#39853,#39854); #35022=AXIS2_PLACEMENT_3D('',#48984,#39855,#39856); #35023=AXIS2_PLACEMENT_3D('',#48990,#39860,#39861); #35024=AXIS2_PLACEMENT_3D('',#48993,#39863,#39864); #35025=AXIS2_PLACEMENT_3D('',#48994,#39865,#39866); #35026=AXIS2_PLACEMENT_3D('',#48998,#39869,#39870); #35027=AXIS2_PLACEMENT_3D('',#48999,#39871,#39872); #35028=AXIS2_PLACEMENT_3D('',#49000,#39873,#39874); #35029=AXIS2_PLACEMENT_3D('',#49009,#39879,#39880); #35030=AXIS2_PLACEMENT_3D('',#49015,#39884,#39885); #35031=AXIS2_PLACEMENT_3D('',#49019,#39888,#39889); #35032=AXIS2_PLACEMENT_3D('',#49023,#39892,#39893); #35033=AXIS2_PLACEMENT_3D('',#49025,#39895,#39896); #35034=AXIS2_PLACEMENT_3D('',#49026,#39897,#39898); #35035=AXIS2_PLACEMENT_3D('',#49035,#39903,#39904); #35036=AXIS2_PLACEMENT_3D('',#49044,#39909,#39910); #35037=AXIS2_PLACEMENT_3D('',#49047,#39913,#39914); #35038=AXIS2_PLACEMENT_3D('',#49049,#39916,#39917); #35039=AXIS2_PLACEMENT_3D('',#49051,#39919,#39920); #35040=AXIS2_PLACEMENT_3D('',#49052,#39921,#39922); #35041=AXIS2_PLACEMENT_3D('',#49061,#39927,#39928); #35042=AXIS2_PLACEMENT_3D('',#49067,#39932,#39933); #35043=AXIS2_PLACEMENT_3D('',#49073,#39937,#39938); #35044=AXIS2_PLACEMENT_3D('',#49082,#39943,#39944); #35045=AXIS2_PLACEMENT_3D('',#49089,#39949,#39950); #35046=AXIS2_PLACEMENT_3D('',#49093,#39953,#39954); #35047=AXIS2_PLACEMENT_3D('',#49098,#39958,#39959); #35048=AXIS2_PLACEMENT_3D('',#49100,#39961,#39962); #35049=AXIS2_PLACEMENT_3D('',#49101,#39963,#39964); #35050=AXIS2_PLACEMENT_3D('',#49102,#39965,#39966); #35051=AXIS2_PLACEMENT_3D('',#49111,#39971,#39972); #35052=AXIS2_PLACEMENT_3D('',#49117,#39976,#39977); #35053=AXIS2_PLACEMENT_3D('',#49123,#39981,#39982); #35054=AXIS2_PLACEMENT_3D('',#49125,#39984,#39985); #35055=AXIS2_PLACEMENT_3D('',#49134,#39990,#39991); #35056=AXIS2_PLACEMENT_3D('',#49143,#39996,#39997); #35057=AXIS2_PLACEMENT_3D('',#49146,#40000,#40001); #35058=AXIS2_PLACEMENT_3D('',#49148,#40003,#40004); #35059=AXIS2_PLACEMENT_3D('',#49159,#40011,#40012); #35060=AXIS2_PLACEMENT_3D('',#49168,#40017,#40018); #35061=AXIS2_PLACEMENT_3D('',#49171,#40021,#40022); #35062=AXIS2_PLACEMENT_3D('',#49173,#40024,#40025); #35063=AXIS2_PLACEMENT_3D('',#49175,#40027,#40028); #35064=AXIS2_PLACEMENT_3D('',#49176,#40029,#40030); #35065=AXIS2_PLACEMENT_3D('',#49185,#40035,#40036); #35066=AXIS2_PLACEMENT_3D('',#49194,#40041,#40042); #35067=AXIS2_PLACEMENT_3D('',#49197,#40045,#40046); #35068=AXIS2_PLACEMENT_3D('',#49199,#40048,#40049); #35069=AXIS2_PLACEMENT_3D('',#49201,#40051,#40052); #35070=AXIS2_PLACEMENT_3D('',#49202,#40053,#40054); #35071=AXIS2_PLACEMENT_3D('',#49211,#40059,#40060); #35072=AXIS2_PLACEMENT_3D('',#49220,#40065,#40066); #35073=AXIS2_PLACEMENT_3D('',#49223,#40069,#40070); #35074=AXIS2_PLACEMENT_3D('',#49225,#40072,#40073); #35075=AXIS2_PLACEMENT_3D('',#49227,#40075,#40076); #35076=AXIS2_PLACEMENT_3D('',#49228,#40077,#40078); #35077=AXIS2_PLACEMENT_3D('',#49237,#40083,#40084); #35078=AXIS2_PLACEMENT_3D('',#49246,#40089,#40090); #35079=AXIS2_PLACEMENT_3D('',#49249,#40093,#40094); #35080=AXIS2_PLACEMENT_3D('',#49251,#40096,#40097); #35081=AXIS2_PLACEMENT_3D('',#49253,#40099,#40100); #35082=AXIS2_PLACEMENT_3D('',#49254,#40101,#40102); #35083=AXIS2_PLACEMENT_3D('',#49263,#40107,#40108); #35084=AXIS2_PLACEMENT_3D('',#49272,#40113,#40114); #35085=AXIS2_PLACEMENT_3D('',#49275,#40117,#40118); #35086=AXIS2_PLACEMENT_3D('',#49277,#40120,#40121); #35087=AXIS2_PLACEMENT_3D('',#49279,#40123,#40124); #35088=AXIS2_PLACEMENT_3D('',#49280,#40125,#40126); #35089=AXIS2_PLACEMENT_3D('',#49289,#40131,#40132); #35090=AXIS2_PLACEMENT_3D('',#49298,#40137,#40138); #35091=AXIS2_PLACEMENT_3D('',#49301,#40141,#40142); #35092=AXIS2_PLACEMENT_3D('',#49303,#40144,#40145); #35093=AXIS2_PLACEMENT_3D('',#49305,#40147,#40148); #35094=AXIS2_PLACEMENT_3D('',#49306,#40149,#40150); #35095=AXIS2_PLACEMENT_3D('',#49315,#40155,#40156); #35096=AXIS2_PLACEMENT_3D('',#49324,#40161,#40162); #35097=AXIS2_PLACEMENT_3D('',#49327,#40165,#40166); #35098=AXIS2_PLACEMENT_3D('',#49329,#40168,#40169); #35099=AXIS2_PLACEMENT_3D('',#49331,#40171,#40172); #35100=AXIS2_PLACEMENT_3D('',#49332,#40173,#40174); #35101=AXIS2_PLACEMENT_3D('',#49341,#40179,#40180); #35102=AXIS2_PLACEMENT_3D('',#49350,#40185,#40186); #35103=AXIS2_PLACEMENT_3D('',#49353,#40189,#40190); #35104=AXIS2_PLACEMENT_3D('',#49355,#40192,#40193); #35105=AXIS2_PLACEMENT_3D('',#49357,#40195,#40196); #35106=AXIS2_PLACEMENT_3D('',#49358,#40197,#40198); #35107=AXIS2_PLACEMENT_3D('',#49359,#40199,#40200); #35108=AXIS2_PLACEMENT_3D('',#49360,#40201,#40202); #35109=AXIS2_PLACEMENT_3D('',#49361,#40203,#40204); #35110=AXIS2_PLACEMENT_3D('',#49362,#40205,#40206); #35111=AXIS2_PLACEMENT_3D('',#49379,#40215,#40216); #35112=AXIS2_PLACEMENT_3D('',#49414,#40235,#40236); #35113=AXIS2_PLACEMENT_3D('',#49420,#40240,#40241); #35114=AXIS2_PLACEMENT_3D('',#49426,#40245,#40246); #35115=AXIS2_PLACEMENT_3D('',#49430,#40249,#40250); #35116=AXIS2_PLACEMENT_3D('',#49434,#40253,#40254); #35117=AXIS2_PLACEMENT_3D('',#49443,#40259,#40260); #35118=AXIS2_PLACEMENT_3D('',#49445,#40262,#40263); #35119=AXIS2_PLACEMENT_3D('',#49446,#40264,#40265); #35120=AXIS2_PLACEMENT_3D('',#49452,#40269,#40270); #35121=AXIS2_PLACEMENT_3D('',#49455,#40273,#40274); #35122=AXIS2_PLACEMENT_3D('',#49457,#40276,#40277); #35123=AXIS2_PLACEMENT_3D('',#49459,#40279,#40280); #35124=AXIS2_PLACEMENT_3D('',#49460,#40281,#40282); #35125=AXIS2_PLACEMENT_3D('',#49466,#40286,#40287); #35126=AXIS2_PLACEMENT_3D('',#49497,#40303,#40304); #35127=AXIS2_PLACEMENT_3D('',#49500,#40305,#40306); #35128=AXIS2_PLACEMENT_3D('',#49504,#40308,#40309); #35129=AXIS2_PLACEMENT_3D('',#49508,#40311,#40312); #35130=AXIS2_PLACEMENT_3D('',#49512,#40314,#40315); #35131=AXIS2_PLACEMENT_3D('',#49516,#40317,#40318); #35132=AXIS2_PLACEMENT_3D('',#49520,#40320,#40321); #35133=AXIS2_PLACEMENT_3D('',#49530,#40327,#40328); #35134=AXIS2_PLACEMENT_3D('',#49536,#40332,#40333); #35135=AXIS2_PLACEMENT_3D('',#49540,#40336,#40337); #35136=AXIS2_PLACEMENT_3D('',#49544,#40340,#40341); #35137=AXIS2_PLACEMENT_3D('',#49546,#40343,#40344); #35138=AXIS2_PLACEMENT_3D('',#49562,#40353,#40354); #35139=AXIS2_PLACEMENT_3D('',#49572,#40360,#40361); #35140=AXIS2_PLACEMENT_3D('',#49577,#40365,#40366); #35141=AXIS2_PLACEMENT_3D('',#49587,#40372,#40373); #35142=AXIS2_PLACEMENT_3D('',#49593,#40377,#40378); #35143=AXIS2_PLACEMENT_3D('',#49595,#40379,#40380); #35144=AXIS2_PLACEMENT_3D('',#49597,#40381,#40382); #35145=AXIS2_PLACEMENT_3D('',#49605,#40386,#40387); #35146=AXIS2_PLACEMENT_3D('',#49609,#40389,#40390); #35147=AXIS2_PLACEMENT_3D('',#49638,#40405,#40406); #35148=AXIS2_PLACEMENT_3D('',#49642,#40408,#40409); #35149=AXIS2_PLACEMENT_3D('',#49646,#40411,#40412); #35150=AXIS2_PLACEMENT_3D('',#49650,#40414,#40415); #35151=AXIS2_PLACEMENT_3D('',#49654,#40417,#40418); #35152=AXIS2_PLACEMENT_3D('',#49658,#40420,#40421); #35153=AXIS2_PLACEMENT_3D('',#49660,#40423,#40424); #35154=AXIS2_PLACEMENT_3D('',#49663,#40427,#40428); #35155=AXIS2_PLACEMENT_3D('',#49665,#40430,#40431); #35156=AXIS2_PLACEMENT_3D('',#49667,#40433,#40434); #35157=AXIS2_PLACEMENT_3D('',#49669,#40436,#40437); #35158=AXIS2_PLACEMENT_3D('',#49671,#40439,#40440); #35159=AXIS2_PLACEMENT_3D('',#49673,#40442,#40443); #35160=AXIS2_PLACEMENT_3D('',#49684,#40444,#40445); #35161=AXIS2_PLACEMENT_3D('',#49789,#40447,#40448); #35162=AXIS2_PLACEMENT_3D('',#49857,#40449,#40450); #35163=AXIS2_PLACEMENT_3D('',#49859,#40451,#40452); #35164=AXIS2_PLACEMENT_3D('',#49863,#40454,#40455); #35165=AXIS2_PLACEMENT_3D('',#49956,#40456,#40457); #35166=AXIS2_PLACEMENT_3D('',#50024,#40458,#40459); #35167=AXIS2_PLACEMENT_3D('',#50055,#40462,#40463); #35168=AXIS2_PLACEMENT_3D('',#50061,#40467,#40468); #35169=AXIS2_PLACEMENT_3D('',#50065,#40471,#40472); #35170=AXIS2_PLACEMENT_3D('',#50086,#40476,#40477); #35171=AXIS2_PLACEMENT_3D('',#50088,#40479,#40480); #35172=AXIS2_PLACEMENT_3D('',#50250,#40483,#40484); #35173=AXIS2_PLACEMENT_3D('',#50276,#40487,#40488); #35174=AXIS2_PLACEMENT_3D('',#50282,#40492,#40493); #35175=AXIS2_PLACEMENT_3D('',#50286,#40495,#40496); #35176=AXIS2_PLACEMENT_3D('',#50287,#40497,#40498); #35177=AXIS2_PLACEMENT_3D('',#50288,#40499,#40500); #35178=AXIS2_PLACEMENT_3D('',#50291,#40501,#40502); #35179=AXIS2_PLACEMENT_3D('',#50294,#40505,#40506); #35180=AXIS2_PLACEMENT_3D('',#50299,#40509,#40510); #35181=AXIS2_PLACEMENT_3D('',#50300,#40511,#40512); #35182=AXIS2_PLACEMENT_3D('',#50303,#40515,#40516); #35183=AXIS2_PLACEMENT_3D('',#50304,#40517,#40518); #35184=AXIS2_PLACEMENT_3D('',#50305,#40519,#40520); #35185=AXIS2_PLACEMENT_3D('',#50306,#40521,#40522); #35186=AXIS2_PLACEMENT_3D('',#50319,#40529,#40530); #35187=AXIS2_PLACEMENT_3D('',#50329,#40536,#40537); #35188=AXIS2_PLACEMENT_3D('',#50338,#40542,#40543); #35189=AXIS2_PLACEMENT_3D('',#50341,#40546,#40547); #35190=AXIS2_PLACEMENT_3D('',#50351,#40553,#40554); #35191=AXIS2_PLACEMENT_3D('',#50478,#40619,#40620); #35192=AXIS2_PLACEMENT_3D('',#50482,#40623,#40624); #35193=AXIS2_PLACEMENT_3D('',#50518,#40643,#40644); #35194=AXIS2_PLACEMENT_3D('',#50520,#40646,#40647); #35195=AXIS2_PLACEMENT_3D('',#50526,#40651,#40652); #35196=AXIS2_PLACEMENT_3D('',#50530,#40655,#40656); #35197=AXIS2_PLACEMENT_3D('',#50542,#40663,#40664); #35198=AXIS2_PLACEMENT_3D('',#50548,#40668,#40669); #35199=AXIS2_PLACEMENT_3D('',#50552,#40672,#40673); #35200=AXIS2_PLACEMENT_3D('',#50560,#40678,#40679); #35201=AXIS2_PLACEMENT_3D('',#50562,#40681,#40682); #35202=AXIS2_PLACEMENT_3D('',#50577,#40691,#40692); #35203=AXIS2_PLACEMENT_3D('',#50583,#40696,#40697); #35204=AXIS2_PLACEMENT_3D('',#50608,#40711,#40712); #35205=AXIS2_PLACEMENT_3D('',#50611,#40713,#40714); #35206=AXIS2_PLACEMENT_3D('',#50615,#40716,#40717); #35207=AXIS2_PLACEMENT_3D('',#50619,#40719,#40720); #35208=AXIS2_PLACEMENT_3D('',#50623,#40722,#40723); #35209=AXIS2_PLACEMENT_3D('',#50627,#40725,#40726); #35210=AXIS2_PLACEMENT_3D('',#50631,#40728,#40729); #35211=AXIS2_PLACEMENT_3D('',#50638,#40734,#40735); #35212=AXIS2_PLACEMENT_3D('',#50640,#40737,#40738); #35213=AXIS2_PLACEMENT_3D('',#50642,#40740,#40741); #35214=AXIS2_PLACEMENT_3D('',#50643,#40742,#40743); #35215=AXIS2_PLACEMENT_3D('',#50649,#40747,#40748); #35216=AXIS2_PLACEMENT_3D('',#50652,#40750,#40751); #35217=AXIS2_PLACEMENT_3D('',#50653,#40752,#40753); #35218=AXIS2_PLACEMENT_3D('',#50678,#40766,#40767); #35219=AXIS2_PLACEMENT_3D('',#50682,#40769,#40770); #35220=AXIS2_PLACEMENT_3D('',#50690,#40774,#40775); #35221=AXIS2_PLACEMENT_3D('',#50691,#40776,#40777); #35222=AXIS2_PLACEMENT_3D('',#50694,#40778,#40779); #35223=AXIS2_PLACEMENT_3D('',#50698,#40781,#40782); #35224=AXIS2_PLACEMENT_3D('',#50702,#40784,#40785); #35225=AXIS2_PLACEMENT_3D('',#50706,#40787,#40788); #35226=AXIS2_PLACEMENT_3D('',#50709,#40790,#40791); #35227=AXIS2_PLACEMENT_3D('',#50711,#40793,#40794); #35228=AXIS2_PLACEMENT_3D('',#50713,#40796,#40797); #35229=AXIS2_PLACEMENT_3D('',#50715,#40799,#40800); #35230=AXIS2_PLACEMENT_3D('',#50717,#40802,#40803); #35231=AXIS2_PLACEMENT_3D('',#50719,#40805,#40806); #35232=AXIS2_PLACEMENT_3D('',#50730,#40807,#40808); #35233=AXIS2_PLACEMENT_3D('',#50835,#40810,#40811); #35234=AXIS2_PLACEMENT_3D('',#50903,#40812,#40813); #35235=AXIS2_PLACEMENT_3D('',#51010,#40815,#40816); #35236=AXIS2_PLACEMENT_3D('',#51078,#40817,#40818); #35237=AXIS2_PLACEMENT_3D('',#51080,#40819,#40820); #35238=AXIS2_PLACEMENT_3D('',#51083,#40822,#40823); #35239=AXIS2_PLACEMENT_3D('',#51101,#40825,#40826); #35240=AXIS2_PLACEMENT_3D('',#51107,#40830,#40831); #35241=AXIS2_PLACEMENT_3D('',#51111,#40834,#40835); #35242=AXIS2_PLACEMENT_3D('',#51132,#40839,#40840); #35243=AXIS2_PLACEMENT_3D('',#51134,#40842,#40843); #35244=AXIS2_PLACEMENT_3D('',#51235,#40846,#40847); #35245=AXIS2_PLACEMENT_3D('',#51322,#40850,#40851); #35246=AXIS2_PLACEMENT_3D('',#51328,#40855,#40856); #35247=AXIS2_PLACEMENT_3D('',#51332,#40858,#40859); #35248=AXIS2_PLACEMENT_3D('',#51333,#40860,#40861); #35249=AXIS2_PLACEMENT_3D('',#51334,#40862,#40863); #35250=AXIS2_PLACEMENT_3D('',#51337,#40864,#40865); #35251=AXIS2_PLACEMENT_3D('',#51340,#40868,#40869); #35252=AXIS2_PLACEMENT_3D('',#51345,#40872,#40873); #35253=AXIS2_PLACEMENT_3D('',#51346,#40874,#40875); #35254=AXIS2_PLACEMENT_3D('',#51349,#40878,#40879); #35255=AXIS2_PLACEMENT_3D('',#51350,#40880,#40881); #35256=AXIS2_PLACEMENT_3D('',#51351,#40882,#40883); #35257=AXIS2_PLACEMENT_3D('',#51352,#40884,#40885); #35258=AXIS2_PLACEMENT_3D('',#51355,#40887,#40888); #35259=AXIS2_PLACEMENT_3D('',#51356,#40889,#40890); #35260=AXIS2_PLACEMENT_3D('',#51363,#40893,#40894); #35261=AXIS2_PLACEMENT_3D('',#51368,#40897,#40898); #35262=AXIS2_PLACEMENT_3D('',#51370,#40900,#40901); #35263=AXIS2_PLACEMENT_3D('',#51374,#40903,#40904); #35264=AXIS2_PLACEMENT_3D('',#51378,#40906,#40907); #35265=AXIS2_PLACEMENT_3D('',#51380,#40909,#40910); #35266=AXIS2_PLACEMENT_3D('',#51386,#40914,#40915); #35267=AXIS2_PLACEMENT_3D('',#51387,#40916,#40917); #35268=AXIS2_PLACEMENT_3D('',#51390,#40919,#40920); #35269=AXIS2_PLACEMENT_3D('',#51391,#40921,#40922); #35270=AXIS2_PLACEMENT_3D('',#51396,#40926,#40927); #35271=AXIS2_PLACEMENT_3D('',#51397,#40928,#40929); #35272=AXIS2_PLACEMENT_3D('',#51400,#40931,#40932); #35273=AXIS2_PLACEMENT_3D('',#51401,#40933,#40934); #35274=AXIS2_PLACEMENT_3D('',#51403,#40935,#40936); #35275=AXIS2_PLACEMENT_3D('',#51405,#40938,#40939); #35276=AXIS2_PLACEMENT_3D('',#51407,#40941,#40942); #35277=AXIS2_PLACEMENT_3D('',#51408,#40943,#40944); #35278=AXIS2_PLACEMENT_3D('',#51410,#40946,#40947); #35279=AXIS2_PLACEMENT_3D('',#51413,#40950,#40951); #35280=AXIS2_PLACEMENT_3D('',#51414,#40952,#40953); #35281=AXIS2_PLACEMENT_3D('',#51415,#40954,#40955); #35282=AXIS2_PLACEMENT_3D('',#51417,#40957,#40958); #35283=AXIS2_PLACEMENT_3D('',#51419,#40960,#40961); #35284=AXIS2_PLACEMENT_3D('',#51450,#40978,#40979); #35285=AXIS2_PLACEMENT_3D('',#51454,#40981,#40982); #35286=AXIS2_PLACEMENT_3D('',#51462,#40986,#40987); #35287=AXIS2_PLACEMENT_3D('',#51466,#40989,#40990); #35288=AXIS2_PLACEMENT_3D('',#51470,#40992,#40993); #35289=AXIS2_PLACEMENT_3D('',#51474,#40995,#40996); #35290=AXIS2_PLACEMENT_3D('',#51478,#40998,#40999); #35291=AXIS2_PLACEMENT_3D('',#51482,#41001,#41002); #35292=AXIS2_PLACEMENT_3D('',#51490,#41006,#41007); #35293=AXIS2_PLACEMENT_3D('',#51494,#41009,#41010); #35294=AXIS2_PLACEMENT_3D('',#51498,#41012,#41013); #35295=AXIS2_PLACEMENT_3D('',#51502,#41015,#41016); #35296=AXIS2_PLACEMENT_3D('',#51504,#41018,#41019); #35297=AXIS2_PLACEMENT_3D('',#51509,#41021,#41022); #35298=AXIS2_PLACEMENT_3D('',#51512,#41024,#41025); #35299=AXIS2_PLACEMENT_3D('',#51514,#41026,#41027); #35300=AXIS2_PLACEMENT_3D('',#51518,#41029,#41030); #35301=AXIS2_PLACEMENT_3D('',#51522,#41033,#41034); #35302=AXIS2_PLACEMENT_3D('',#51527,#41036,#41037); #35303=AXIS2_PLACEMENT_3D('',#51530,#41039,#41040); #35304=AXIS2_PLACEMENT_3D('',#51532,#41041,#41042); #35305=AXIS2_PLACEMENT_3D('',#51536,#41044,#41045); #35306=AXIS2_PLACEMENT_3D('',#51540,#41048,#41049); #35307=AXIS2_PLACEMENT_3D('',#51544,#41051,#41052); #35308=AXIS2_PLACEMENT_3D('',#51545,#41053,#41054); #35309=AXIS2_PLACEMENT_3D('',#51546,#41055,#41056); #35310=AXIS2_PLACEMENT_3D('',#51550,#41059,#41060); #35311=AXIS2_PLACEMENT_3D('',#51552,#41061,#41062); #35312=AXIS2_PLACEMENT_3D('',#51555,#41064,#41065); #35313=AXIS2_PLACEMENT_3D('',#51557,#41066,#41067); #35314=AXIS2_PLACEMENT_3D('',#51561,#41069,#41070); #35315=AXIS2_PLACEMENT_3D('',#51563,#41072,#41073); #35316=AXIS2_PLACEMENT_3D('',#51570,#41076,#41077); #35317=AXIS2_PLACEMENT_3D('',#51573,#41079,#41080); #35318=AXIS2_PLACEMENT_3D('',#51575,#41081,#41082); #35319=AXIS2_PLACEMENT_3D('',#51579,#41084,#41085); #35320=AXIS2_PLACEMENT_3D('',#51581,#41087,#41088); #35321=AXIS2_PLACEMENT_3D('',#51583,#41090,#41091); #35322=AXIS2_PLACEMENT_3D('',#51585,#41093,#41094); #35323=AXIS2_PLACEMENT_3D('',#51587,#41096,#41097); #35324=AXIS2_PLACEMENT_3D('',#51588,#41098,#41099); #35325=AXIS2_PLACEMENT_3D('',#51590,#41101,#41102); #35326=AXIS2_PLACEMENT_3D('',#51592,#41104,#41105); #35327=AXIS2_PLACEMENT_3D('',#51593,#41106,#41107); #35328=AXIS2_PLACEMENT_3D('',#51594,#41108,#41109); #35329=AXIS2_PLACEMENT_3D('',#51595,#41110,#41111); #35330=AXIS2_PLACEMENT_3D('',#51596,#41112,#41113); #35331=AXIS2_PLACEMENT_3D('',#51598,#41115,#41116); #35332=AXIS2_PLACEMENT_3D('',#51600,#41118,#41119); #35333=AXIS2_PLACEMENT_3D('',#51602,#41121,#41122); #35334=AXIS2_PLACEMENT_3D('',#51603,#41123,#41124); #35335=AXIS2_PLACEMENT_3D('',#51605,#41126,#41127); #35336=AXIS2_PLACEMENT_3D('',#51607,#41129,#41130); #35337=AXIS2_PLACEMENT_3D('',#51609,#41132,#41133); #35338=AXIS2_PLACEMENT_3D('',#51610,#41134,#41135); #35339=AXIS2_PLACEMENT_3D('',#51616,#41139,#41140); #35340=AXIS2_PLACEMENT_3D('',#51619,#41142,#41143); #35341=AXIS2_PLACEMENT_3D('',#51620,#41144,#41145); #35342=AXIS2_PLACEMENT_3D('',#51635,#41153,#41154); #35343=AXIS2_PLACEMENT_3D('',#51639,#41156,#41157); #35344=AXIS2_PLACEMENT_3D('',#51643,#41159,#41160); #35345=AXIS2_PLACEMENT_3D('',#51651,#41164,#41165); #35346=AXIS2_PLACEMENT_3D('',#51655,#41167,#41168); #35347=AXIS2_PLACEMENT_3D('',#51658,#41170,#41171); #35348=AXIS2_PLACEMENT_3D('',#51662,#41173,#41174); #35349=AXIS2_PLACEMENT_3D('',#51666,#41176,#41177); #35350=AXIS2_PLACEMENT_3D('',#51670,#41179,#41180); #35351=AXIS2_PLACEMENT_3D('',#51678,#41184,#41185); #35352=AXIS2_PLACEMENT_3D('',#51681,#41187,#41188); #35353=AXIS2_PLACEMENT_3D('',#51682,#41189,#41190); #35354=AXIS2_PLACEMENT_3D('',#51684,#41192,#41193); #35355=AXIS2_PLACEMENT_3D('',#51686,#41195,#41196); #35356=AXIS2_PLACEMENT_3D('',#51688,#41198,#41199); #35357=AXIS2_PLACEMENT_3D('',#51690,#41201,#41202); #35358=AXIS2_PLACEMENT_3D('',#51693,#41205,#41206); #35359=AXIS2_PLACEMENT_3D('',#51695,#41208,#41209); #35360=AXIS2_PLACEMENT_3D('',#51696,#41210,#41211); #35361=AXIS2_PLACEMENT_3D('',#51698,#41213,#41214); #35362=AXIS2_PLACEMENT_3D('',#51703,#41216,#41217); #35363=AXIS2_PLACEMENT_3D('',#51706,#41219,#41220); #35364=AXIS2_PLACEMENT_3D('',#51708,#41221,#41222); #35365=AXIS2_PLACEMENT_3D('',#51712,#41224,#41225); #35366=AXIS2_PLACEMENT_3D('',#51716,#41228,#41229); #35367=AXIS2_PLACEMENT_3D('',#51718,#41230,#41231); #35368=AXIS2_PLACEMENT_3D('',#51721,#41233,#41234); #35369=AXIS2_PLACEMENT_3D('',#51722,#41235,#41236); #35370=AXIS2_PLACEMENT_3D('',#51726,#41238,#41239); #35371=AXIS2_PLACEMENT_3D('',#51730,#41242,#41243); #35372=AXIS2_PLACEMENT_3D('',#51732,#41244,#41245); #35373=AXIS2_PLACEMENT_3D('',#51734,#41247,#41248); #35374=AXIS2_PLACEMENT_3D('',#51738,#41251,#41252); #35375=AXIS2_PLACEMENT_3D('',#51739,#41253,#41254); #35376=AXIS2_PLACEMENT_3D('',#51740,#41255,#41256); #35377=AXIS2_PLACEMENT_3D('',#51746,#41259,#41260); #35378=AXIS2_PLACEMENT_3D('',#51749,#41262,#41263); #35379=AXIS2_PLACEMENT_3D('',#51751,#41265,#41266); #35380=AXIS2_PLACEMENT_3D('',#51754,#41268,#41269); #35381=AXIS2_PLACEMENT_3D('',#51755,#41270,#41271); #35382=AXIS2_PLACEMENT_3D('',#51758,#41274,#41275); #35383=AXIS2_PLACEMENT_3D('',#51759,#41276,#41277); #35384=AXIS2_PLACEMENT_3D('',#51761,#41279,#41280); #35385=AXIS2_PLACEMENT_3D('',#51763,#41282,#41283); #35386=AXIS2_PLACEMENT_3D('',#51764,#41284,#41285); #35387=AXIS2_PLACEMENT_3D('',#51765,#41286,#41287); #35388=AXIS2_PLACEMENT_3D('',#51768,#41290,#41291); #35389=AXIS2_PLACEMENT_3D('',#51770,#41293,#41294); #35390=AXIS2_PLACEMENT_3D('',#51772,#41296,#41297); #35391=AXIS2_PLACEMENT_3D('',#51774,#41299,#41300); #35392=AXIS2_PLACEMENT_3D('',#51776,#41302,#41303); #35393=AXIS2_PLACEMENT_3D('',#51779,#41306,#41307); #35394=AXIS2_PLACEMENT_3D('',#51781,#41309,#41310); #35395=AXIS2_PLACEMENT_3D('',#51786,#41312,#41313); #35396=AXIS2_PLACEMENT_3D('',#51789,#41315,#41316); #35397=AXIS2_PLACEMENT_3D('',#51791,#41317,#41318); #35398=AXIS2_PLACEMENT_3D('',#51795,#41320,#41321); #35399=AXIS2_PLACEMENT_3D('',#51799,#41324,#41325); #35400=AXIS2_PLACEMENT_3D('',#51801,#41326,#41327); #35401=AXIS2_PLACEMENT_3D('',#51804,#41329,#41330); #35402=AXIS2_PLACEMENT_3D('',#51805,#41331,#41332); #35403=AXIS2_PLACEMENT_3D('',#51812,#41336,#41337); #35404=AXIS2_PLACEMENT_3D('',#51813,#41338,#41339); #35405=AXIS2_PLACEMENT_3D('',#51818,#41342,#41343); #35406=AXIS2_PLACEMENT_3D('',#51819,#41344,#41345); #35407=AXIS2_PLACEMENT_3D('',#51824,#41349,#41350); #35408=AXIS2_PLACEMENT_3D('',#51826,#41351,#41352); #35409=AXIS2_PLACEMENT_3D('',#51829,#41354,#41355); #35410=AXIS2_PLACEMENT_3D('',#51832,#41357,#41358); #35411=AXIS2_PLACEMENT_3D('',#51835,#41360,#41361); #35412=AXIS2_PLACEMENT_3D('',#51836,#41362,#41363); #35413=AXIS2_PLACEMENT_3D('',#51838,#41365,#41366); #35414=AXIS2_PLACEMENT_3D('',#51840,#41368,#41369); #35415=AXIS2_PLACEMENT_3D('',#51841,#41370,#41371); #35416=AXIS2_PLACEMENT_3D('',#51842,#41372,#41373); #35417=AXIS2_PLACEMENT_3D('',#51844,#41375,#41376); #35418=AXIS2_PLACEMENT_3D('',#51846,#41378,#41379); #35419=AXIS2_PLACEMENT_3D('',#51847,#41380,#41381); #35420=AXIS2_PLACEMENT_3D('',#51848,#41382,#41383); #35421=AXIS2_PLACEMENT_3D('',#51850,#41385,#41386); #35422=AXIS2_PLACEMENT_3D('',#51852,#41388,#41389); #35423=AXIS2_PLACEMENT_3D('',#51853,#41390,#41391); #35424=AXIS2_PLACEMENT_3D('',#51854,#41392,#41393); #35425=AXIS2_PLACEMENT_3D('',#51855,#41394,#41395); #35426=AXIS2_PLACEMENT_3D('',#51857,#41396,#41397); #35427=AXIS2_PLACEMENT_3D('',#51860,#41399,#41400); #35428=AXIS2_PLACEMENT_3D('',#51861,#41401,#41402); #35429=AXIS2_PLACEMENT_3D('',#51867,#41405,#41406); #35430=AXIS2_PLACEMENT_3D('',#51869,#41408,#41409); #35431=AXIS2_PLACEMENT_3D('',#51872,#41410,#41411); #35432=AXIS2_PLACEMENT_3D('',#51875,#41413,#41414); #35433=AXIS2_PLACEMENT_3D('',#51877,#41416,#41417); #35434=AXIS2_PLACEMENT_3D('',#51886,#41421,#41422); #35435=AXIS2_PLACEMENT_3D('',#51889,#41424,#41425); #35436=AXIS2_PLACEMENT_3D('',#51890,#41426,#41427); #35437=AXIS2_PLACEMENT_3D('',#51895,#41429,#41430); #35438=AXIS2_PLACEMENT_3D('',#51899,#41432,#41433); #35439=AXIS2_PLACEMENT_3D('',#51903,#41436,#41437); #35440=AXIS2_PLACEMENT_3D('',#51906,#41438,#41439); #35441=AXIS2_PLACEMENT_3D('',#51910,#41441,#41442); #35442=AXIS2_PLACEMENT_3D('',#51918,#41448,#41449); #35443=AXIS2_PLACEMENT_3D('',#51922,#41451,#41452); #35444=AXIS2_PLACEMENT_3D('',#51924,#41454,#41455); #35445=AXIS2_PLACEMENT_3D('',#51928,#41458,#41459); #35446=AXIS2_PLACEMENT_3D('',#51929,#41460,#41461); #35447=AXIS2_PLACEMENT_3D('',#51930,#41462,#41463); #35448=AXIS2_PLACEMENT_3D('',#51934,#41466,#41467); #35449=AXIS2_PLACEMENT_3D('',#51935,#41468,#41469); #35450=AXIS2_PLACEMENT_3D('',#51936,#41470,#41471); #35451=AXIS2_PLACEMENT_3D('',#51937,#41472,#41473); #35452=AXIS2_PLACEMENT_3D('',#51938,#41474,#41475); #35453=AXIS2_PLACEMENT_3D('',#51943,#41478,#41479); #35454=AXIS2_PLACEMENT_3D('',#51944,#41480,#41481); #35455=AXIS2_PLACEMENT_3D('',#51945,#41482,#41483); #35456=AXIS2_PLACEMENT_3D('',#51947,#41484,#41485); #35457=AXIS2_PLACEMENT_3D('',#51951,#41488,#41489); #35458=AXIS2_PLACEMENT_3D('',#51952,#41490,#41491); #35459=AXIS2_PLACEMENT_3D('',#51953,#41492,#41493); #35460=AXIS2_PLACEMENT_3D('',#51954,#41494,#41495); #35461=AXIS2_PLACEMENT_3D('',#51955,#41496,#41497); #35462=AXIS2_PLACEMENT_3D('',#51958,#41498,#41499); #35463=AXIS2_PLACEMENT_3D('',#51962,#41501,#41502); #35464=AXIS2_PLACEMENT_3D('',#51970,#41506,#41507); #35465=AXIS2_PLACEMENT_3D('',#51974,#41509,#41510); #35466=AXIS2_PLACEMENT_3D('',#51978,#41512,#41513); #35467=AXIS2_PLACEMENT_3D('',#51982,#41515,#41516); #35468=AXIS2_PLACEMENT_3D('',#51986,#41518,#41519); #35469=AXIS2_PLACEMENT_3D('',#51990,#41521,#41522); #35470=AXIS2_PLACEMENT_3D('',#51994,#41524,#41525); #35471=AXIS2_PLACEMENT_3D('',#52002,#41529,#41530); #35472=AXIS2_PLACEMENT_3D('',#52006,#41532,#41533); #35473=AXIS2_PLACEMENT_3D('',#52010,#41535,#41536); #35474=AXIS2_PLACEMENT_3D('',#52014,#41538,#41539); #35475=AXIS2_PLACEMENT_3D('',#52018,#41541,#41542); #35476=AXIS2_PLACEMENT_3D('',#52022,#41544,#41545); #35477=AXIS2_PLACEMENT_3D('',#52026,#41547,#41548); #35478=AXIS2_PLACEMENT_3D('',#52028,#41550,#41551); #35479=AXIS2_PLACEMENT_3D('',#52034,#41555,#41556); #35480=AXIS2_PLACEMENT_3D('',#52037,#41558,#41559); #35481=AXIS2_PLACEMENT_3D('',#52038,#41560,#41561); #35482=AXIS2_PLACEMENT_3D('',#52042,#41564,#41565); #35483=AXIS2_PLACEMENT_3D('',#52045,#41567,#41568); #35484=AXIS2_PLACEMENT_3D('',#52046,#41569,#41570); #35485=AXIS2_PLACEMENT_3D('',#52052,#41574,#41575); #35486=AXIS2_PLACEMENT_3D('',#52056,#41578,#41579); #35487=AXIS2_PLACEMENT_3D('',#52059,#41581,#41582); #35488=AXIS2_PLACEMENT_3D('',#52060,#41583,#41584); #35489=AXIS2_PLACEMENT_3D('',#52068,#41588,#41589); #35490=AXIS2_PLACEMENT_3D('',#52072,#41591,#41592); #35491=AXIS2_PLACEMENT_3D('',#52076,#41594,#41595); #35492=AXIS2_PLACEMENT_3D('',#52084,#41599,#41600); #35493=AXIS2_PLACEMENT_3D('',#52088,#41602,#41603); #35494=AXIS2_PLACEMENT_3D('',#52092,#41605,#41606); #35495=AXIS2_PLACEMENT_3D('',#52096,#41608,#41609); #35496=AXIS2_PLACEMENT_3D('',#52100,#41611,#41612); #35497=AXIS2_PLACEMENT_3D('',#52104,#41614,#41615); #35498=AXIS2_PLACEMENT_3D('',#52108,#41617,#41618); #35499=AXIS2_PLACEMENT_3D('',#52111,#41620,#41621); #35500=AXIS2_PLACEMENT_3D('',#52118,#41625,#41626); #35501=AXIS2_PLACEMENT_3D('',#52120,#41627,#41628); #35502=AXIS2_PLACEMENT_3D('',#52122,#41630,#41631); #35503=AXIS2_PLACEMENT_3D('',#52125,#41634,#41635); #35504=AXIS2_PLACEMENT_3D('',#52126,#41636,#41637); #35505=AXIS2_PLACEMENT_3D('',#52127,#41638,#41639); #35506=AXIS2_PLACEMENT_3D('',#52129,#41641,#41642); #35507=AXIS2_PLACEMENT_3D('',#52148,#41644,#41645); #35508=AXIS2_PLACEMENT_3D('',#52218,#41647,#41648); #35509=AXIS2_PLACEMENT_3D('',#52306,#41651,#41652); #35510=AXIS2_PLACEMENT_3D('',#52308,#41654,#41655); #35511=AXIS2_PLACEMENT_3D('',#52309,#41656,#41657); #35512=AXIS2_PLACEMENT_3D('',#52311,#41659,#41660); #35513=AXIS2_PLACEMENT_3D('',#52317,#41664,#41665); #35514=AXIS2_PLACEMENT_3D('',#52321,#41668,#41669); #35515=AXIS2_PLACEMENT_3D('',#52325,#41672,#41673); #35516=AXIS2_PLACEMENT_3D('',#52358,#41676,#41677); #35517=AXIS2_PLACEMENT_3D('',#52391,#41680,#41681); #35518=AXIS2_PLACEMENT_3D('',#52393,#41683,#41684); #35519=AXIS2_PLACEMENT_3D('',#52396,#41685,#41686); #35520=AXIS2_PLACEMENT_3D('',#52401,#41689,#41690); #35521=AXIS2_PLACEMENT_3D('',#52403,#41692,#41693); #35522=AXIS2_PLACEMENT_3D('',#52407,#41695,#41696); #35523=AXIS2_PLACEMENT_3D('',#52409,#41698,#41699); #35524=AXIS2_PLACEMENT_3D('',#52411,#41701,#41702); #35525=AXIS2_PLACEMENT_3D('',#52415,#41704,#41705); #35526=AXIS2_PLACEMENT_3D('',#52417,#41707,#41708); #35527=AXIS2_PLACEMENT_3D('',#52419,#41710,#41711); #35528=AXIS2_PLACEMENT_3D('',#52421,#41713,#41714); #35529=AXIS2_PLACEMENT_3D('',#52422,#41715,#41716); #35530=AXIS2_PLACEMENT_3D('',#52425,#41719,#41720); #35531=AXIS2_PLACEMENT_3D('',#52427,#41722,#41723); #35532=AXIS2_PLACEMENT_3D('',#52429,#41725,#41726); #35533=AXIS2_PLACEMENT_3D('',#52431,#41728,#41729); #35534=AXIS2_PLACEMENT_3D('',#52434,#41732,#41733); #35535=AXIS2_PLACEMENT_3D('',#52436,#41735,#41736); #35536=AXIS2_PLACEMENT_3D('',#52438,#41738,#41739); #35537=AXIS2_PLACEMENT_3D('',#52440,#41741,#41742); #35538=AXIS2_PLACEMENT_3D('',#52441,#41743,#41744); #35539=AXIS2_PLACEMENT_3D('',#52443,#41746,#41747); #35540=AXIS2_PLACEMENT_3D('',#52531,#41750,#41751); #35541=AXIS2_PLACEMENT_3D('',#52532,#41752,#41753); #35542=AXIS2_PLACEMENT_3D('',#52535,#41755,#41756); #35543=AXIS2_PLACEMENT_3D('',#52622,#41759,#41760); #35544=AXIS2_PLACEMENT_3D('',#52624,#41762,#41763); #35545=AXIS2_PLACEMENT_3D('',#52625,#41764,#41765); #35546=AXIS2_PLACEMENT_3D('',#52627,#41767,#41768); #35547=AXIS2_PLACEMENT_3D('',#52633,#41772,#41773); #35548=AXIS2_PLACEMENT_3D('',#52637,#41776,#41777); #35549=AXIS2_PLACEMENT_3D('',#52641,#41780,#41781); #35550=AXIS2_PLACEMENT_3D('',#52674,#41784,#41785); #35551=AXIS2_PLACEMENT_3D('',#52707,#41788,#41789); #35552=AXIS2_PLACEMENT_3D('',#52709,#41791,#41792); #35553=AXIS2_PLACEMENT_3D('',#52712,#41793,#41794); #35554=AXIS2_PLACEMENT_3D('',#52716,#41796,#41797); #35555=AXIS2_PLACEMENT_3D('',#52719,#41800,#41801); #35556=AXIS2_PLACEMENT_3D('',#52724,#41804,#41805); #35557=AXIS2_PLACEMENT_3D('',#52725,#41806,#41807); #35558=AXIS2_PLACEMENT_3D('',#52730,#41810,#41811); #35559=AXIS2_PLACEMENT_3D('',#52732,#41813,#41814); #35560=AXIS2_PLACEMENT_3D('',#52734,#41816,#41817); #35561=AXIS2_PLACEMENT_3D('',#52736,#41819,#41820); #35562=AXIS2_PLACEMENT_3D('',#52737,#41821,#41822); #35563=AXIS2_PLACEMENT_3D('',#52738,#41823,#41824); #35564=AXIS2_PLACEMENT_3D('',#52741,#41827,#41828); #35565=AXIS2_PLACEMENT_3D('',#52743,#41830,#41831); #35566=AXIS2_PLACEMENT_3D('',#52745,#41833,#41834); #35567=AXIS2_PLACEMENT_3D('',#52746,#41835,#41836); #35568=AXIS2_PLACEMENT_3D('',#52749,#41839,#41840); #35569=AXIS2_PLACEMENT_3D('',#52751,#41842,#41843); #35570=AXIS2_PLACEMENT_3D('',#52753,#41845,#41846); #35571=AXIS2_PLACEMENT_3D('',#52754,#41847,#41848); #35572=AXIS2_PLACEMENT_3D('',#52758,#41851,#41852); #35573=AXIS2_PLACEMENT_3D('',#52761,#41854,#41855); #35574=AXIS2_PLACEMENT_3D('',#52762,#41856,#41857); #35575=AXIS2_PLACEMENT_3D('',#52767,#41860,#41861); #35576=AXIS2_PLACEMENT_3D('',#52768,#41862,#41863); #35577=AXIS2_PLACEMENT_3D('',#52771,#41866,#41867); #35578=AXIS2_PLACEMENT_3D('',#52772,#41868,#41869); #35579=AXIS2_PLACEMENT_3D('',#52773,#41870,#41871); #35580=AXIS2_PLACEMENT_3D('',#52774,#41872,#41873); #35581=AXIS2_PLACEMENT_3D('',#52775,#41874,#41875); #35582=AXIS2_PLACEMENT_3D('',#52777,#41876,#41877); #35583=AXIS2_PLACEMENT_3D('',#52781,#41880,#41881); #35584=AXIS2_PLACEMENT_3D('',#52785,#41883,#41884); #35585=AXIS2_PLACEMENT_3D('',#52787,#41886,#41887); #35586=AXIS2_PLACEMENT_3D('',#52789,#41888,#41889); #35587=AXIS2_PLACEMENT_3D('',#52791,#41891,#41892); #35588=AXIS2_PLACEMENT_3D('',#52795,#41895,#41896); #35589=AXIS2_PLACEMENT_3D('',#52796,#41897,#41898); #35590=AXIS2_PLACEMENT_3D('',#52797,#41899,#41900); #35591=AXIS2_PLACEMENT_3D('',#52799,#41902,#41903); #35592=AXIS2_PLACEMENT_3D('',#52800,#41904,#41905); #35593=AXIS2_PLACEMENT_3D('',#52803,#41907,#41908); #35594=AXIS2_PLACEMENT_3D('',#52804,#41909,#41910); #35595=AXIS2_PLACEMENT_3D('',#52807,#41912,#41913); #35596=AXIS2_PLACEMENT_3D('',#52809,#41915,#41916); #35597=AXIS2_PLACEMENT_3D('',#52810,#41917,#41918); #35598=AXIS2_PLACEMENT_3D('',#52812,#41920,#41921); #35599=AXIS2_PLACEMENT_3D('',#52813,#41922,#41923); #35600=AXIS2_PLACEMENT_3D('',#52820,#41928,#41929); #35601=AXIS2_PLACEMENT_3D('',#52828,#41934,#41935); #35602=AXIS2_PLACEMENT_3D('',#52853,#41949,#41950); #35603=AXIS2_PLACEMENT_3D('',#52859,#41954,#41955); #35604=AXIS2_PLACEMENT_3D('',#52869,#41961,#41962); #35605=AXIS2_PLACEMENT_3D('',#52874,#41966,#41967); #35606=AXIS2_PLACEMENT_3D('',#52877,#41970,#41971); #35607=AXIS2_PLACEMENT_3D('',#52879,#41973,#41974); #35608=AXIS2_PLACEMENT_3D('',#52881,#41976,#41977); #35609=AXIS2_PLACEMENT_3D('',#52882,#41978,#41979); #35610=AXIS2_PLACEMENT_3D('',#52886,#41982,#41983); #35611=AXIS2_PLACEMENT_3D('',#52888,#41985,#41986); #35612=AXIS2_PLACEMENT_3D('',#52889,#41987,#41988); #35613=AXIS2_PLACEMENT_3D('',#52932,#42011,#42012); #35614=AXIS2_PLACEMENT_3D('',#52934,#42014,#42015); #35615=AXIS2_PLACEMENT_3D('',#52936,#42017,#42018); #35616=AXIS2_PLACEMENT_3D('',#52938,#42020,#42021); #35617=AXIS2_PLACEMENT_3D('',#52942,#42024,#42025); #35618=AXIS2_PLACEMENT_3D('',#52994,#42052,#42053); #35619=AXIS2_PLACEMENT_3D('',#52997,#42056,#42057); #35620=AXIS2_PLACEMENT_3D('',#52999,#42059,#42060); #35621=AXIS2_PLACEMENT_3D('',#53001,#42062,#42063); #35622=AXIS2_PLACEMENT_3D('',#53003,#42065,#42066); #35623=AXIS2_PLACEMENT_3D('',#53005,#42068,#42069); #35624=AXIS2_PLACEMENT_3D('',#53006,#42070,#42071); #35625=AXIS2_PLACEMENT_3D('',#53009,#42074,#42075); #35626=AXIS2_PLACEMENT_3D('',#53016,#42080,#42081); #35627=AXIS2_PLACEMENT_3D('',#53022,#42085,#42086); #35628=AXIS2_PLACEMENT_3D('',#53028,#42090,#42091); #35629=AXIS2_PLACEMENT_3D('',#53034,#42095,#42096); #35630=AXIS2_PLACEMENT_3D('',#53049,#42105,#42106); #35631=AXIS2_PLACEMENT_3D('',#53056,#42109,#42110); #35632=AXIS2_PLACEMENT_3D('',#53060,#42112,#42113); #35633=AXIS2_PLACEMENT_3D('',#53064,#42115,#42116); #35634=AXIS2_PLACEMENT_3D('',#53068,#42118,#42119); #35635=AXIS2_PLACEMENT_3D('',#53071,#42121,#42122); #35636=AXIS2_PLACEMENT_3D('',#53075,#42124,#42125); #35637=AXIS2_PLACEMENT_3D('',#53079,#42127,#42128); #35638=AXIS2_PLACEMENT_3D('',#53083,#42130,#42131); #35639=AXIS2_PLACEMENT_3D('',#53085,#42133,#42134); #35640=AXIS2_PLACEMENT_3D('',#53099,#42142,#42143); #35641=AXIS2_PLACEMENT_3D('',#53116,#42152,#42153); #35642=AXIS2_PLACEMENT_3D('',#53133,#42162,#42163); #35643=AXIS2_PLACEMENT_3D('',#53150,#42172,#42173); #35644=AXIS2_PLACEMENT_3D('',#53164,#42185,#42186); #35645=AXIS2_PLACEMENT_3D('',#53170,#42190,#42191); #35646=AXIS2_PLACEMENT_3D('',#53176,#42195,#42196); #35647=AXIS2_PLACEMENT_3D('',#53178,#42198,#42199); #35648=AXIS2_PLACEMENT_3D('',#53182,#42202,#42203); #35649=AXIS2_PLACEMENT_3D('',#53186,#42206,#42207); #35650=AXIS2_PLACEMENT_3D('',#53188,#42209,#42210); #35651=AXIS2_PLACEMENT_3D('',#53190,#42212,#42213); #35652=AXIS2_PLACEMENT_3D('',#53191,#42214,#42215); #35653=AXIS2_PLACEMENT_3D('',#53194,#42218,#42219); #35654=AXIS2_PLACEMENT_3D('',#53196,#42221,#42222); #35655=AXIS2_PLACEMENT_3D('',#53198,#42224,#42225); #35656=AXIS2_PLACEMENT_3D('',#53199,#42226,#42227); #35657=AXIS2_PLACEMENT_3D('',#53202,#42230,#42231); #35658=AXIS2_PLACEMENT_3D('',#53204,#42233,#42234); #35659=AXIS2_PLACEMENT_3D('',#53206,#42236,#42237); #35660=AXIS2_PLACEMENT_3D('',#53207,#42238,#42239); #35661=AXIS2_PLACEMENT_3D('',#53210,#42242,#42243); #35662=AXIS2_PLACEMENT_3D('',#53212,#42245,#42246); #35663=AXIS2_PLACEMENT_3D('',#53214,#42248,#42249); #35664=AXIS2_PLACEMENT_3D('',#53215,#42250,#42251); #35665=AXIS2_PLACEMENT_3D('',#53218,#42254,#42255); #35666=AXIS2_PLACEMENT_3D('',#53220,#42257,#42258); #35667=AXIS2_PLACEMENT_3D('',#53222,#42260,#42261); #35668=AXIS2_PLACEMENT_3D('',#53223,#42262,#42263); #35669=AXIS2_PLACEMENT_3D('',#53227,#42266,#42267); #35670=AXIS2_PLACEMENT_3D('',#53229,#42268,#42269); #35671=AXIS2_PLACEMENT_3D('',#53231,#42271,#42272); #35672=AXIS2_PLACEMENT_3D('',#53235,#42275,#42276); #35673=AXIS2_PLACEMENT_3D('',#53237,#42277,#42278); #35674=AXIS2_PLACEMENT_3D('',#53239,#42280,#42281); #35675=AXIS2_PLACEMENT_3D('',#53243,#42284,#42285); #35676=AXIS2_PLACEMENT_3D('',#53245,#42286,#42287); #35677=AXIS2_PLACEMENT_3D('',#53247,#42289,#42290); #35678=AXIS2_PLACEMENT_3D('',#53251,#42293,#42294); #35679=AXIS2_PLACEMENT_3D('',#53253,#42295,#42296); #35680=AXIS2_PLACEMENT_3D('',#53255,#42298,#42299); #35681=AXIS2_PLACEMENT_3D('',#53266,#42306,#42307); #35682=AXIS2_PLACEMENT_3D('',#53268,#42309,#42310); #35683=AXIS2_PLACEMENT_3D('',#53270,#42312,#42313); #35684=AXIS2_PLACEMENT_3D('',#53272,#42315,#42316); #35685=AXIS2_PLACEMENT_3D('',#53274,#42318,#42319); #35686=AXIS2_PLACEMENT_3D('',#53275,#42320,#42321); #35687=AXIS2_PLACEMENT_3D('',#53279,#42323,#42324); #35688=AXIS2_PLACEMENT_3D('',#53283,#42326,#42327); #35689=AXIS2_PLACEMENT_3D('',#53287,#42329,#42330); #35690=AXIS2_PLACEMENT_3D('',#53290,#42332,#42333); #35691=AXIS2_PLACEMENT_3D('',#53291,#42334,#42335); #35692=AXIS2_PLACEMENT_3D('',#53293,#42337,#42338); #35693=AXIS2_PLACEMENT_3D('',#53295,#42340,#42341); #35694=AXIS2_PLACEMENT_3D('',#53297,#42343,#42344); #35695=AXIS2_PLACEMENT_3D('',#53299,#42346,#42347); #35696=AXIS2_PLACEMENT_3D('',#53301,#42349,#42350); #35697=AXIS2_PLACEMENT_3D('',#53303,#42352,#42353); #35698=AXIS2_PLACEMENT_3D('',#53305,#42355,#42356); #35699=AXIS2_PLACEMENT_3D('',#53306,#42357,#42358); #35700=AXIS2_PLACEMENT_3D('',#53310,#42360,#42361); #35701=AXIS2_PLACEMENT_3D('',#53314,#42363,#42364); #35702=AXIS2_PLACEMENT_3D('',#53318,#42366,#42367); #35703=AXIS2_PLACEMENT_3D('',#53322,#42369,#42370); #35704=AXIS2_PLACEMENT_3D('',#53327,#42373,#42374); #35705=AXIS2_PLACEMENT_3D('',#53331,#42376,#42377); #35706=AXIS2_PLACEMENT_3D('',#53335,#42379,#42380); #35707=AXIS2_PLACEMENT_3D('',#53339,#42382,#42383); #35708=AXIS2_PLACEMENT_3D('',#53341,#42385,#42386); #35709=AXIS2_PLACEMENT_3D('',#53345,#42389,#42390); #35710=AXIS2_PLACEMENT_3D('',#53347,#42391,#42392); #35711=AXIS2_PLACEMENT_3D('',#53351,#42394,#42395); #35712=AXIS2_PLACEMENT_3D('',#53355,#42397,#42398); #35713=AXIS2_PLACEMENT_3D('',#53359,#42400,#42401); #35714=AXIS2_PLACEMENT_3D('',#53364,#42404,#42405); #35715=AXIS2_PLACEMENT_3D('',#53368,#42407,#42408); #35716=AXIS2_PLACEMENT_3D('',#53372,#42410,#42411); #35717=AXIS2_PLACEMENT_3D('',#53376,#42413,#42414); #35718=AXIS2_PLACEMENT_3D('',#53378,#42416,#42417); #35719=AXIS2_PLACEMENT_3D('',#53380,#42419,#42420); #35720=AXIS2_PLACEMENT_3D('',#53382,#42422,#42423); #35721=AXIS2_PLACEMENT_3D('',#53384,#42425,#42426); #35722=AXIS2_PLACEMENT_3D('',#53386,#42428,#42429); #35723=AXIS2_PLACEMENT_3D('',#53388,#42431,#42432); #35724=AXIS2_PLACEMENT_3D('',#53390,#42434,#42435); #35725=AXIS2_PLACEMENT_3D('',#53392,#42437,#42438); #35726=AXIS2_PLACEMENT_3D('',#53394,#42440,#42441); #35727=AXIS2_PLACEMENT_3D('',#53412,#42451,#42452); #35728=AXIS2_PLACEMENT_3D('',#53418,#42456,#42457); #35729=AXIS2_PLACEMENT_3D('',#53434,#42467,#42468); #35730=AXIS2_PLACEMENT_3D('',#53436,#42470,#42471); #35731=AXIS2_PLACEMENT_3D('',#53438,#42473,#42474); #35732=AXIS2_PLACEMENT_3D('',#53441,#42477,#42478); #35733=AXIS2_PLACEMENT_3D('',#53444,#42481,#42482); #35734=AXIS2_PLACEMENT_3D('',#53446,#42484,#42485); #35735=AXIS2_PLACEMENT_3D('',#53448,#42487,#42488); #35736=AXIS2_PLACEMENT_3D('',#53450,#42490,#42491); #35737=AXIS2_PLACEMENT_3D('',#53453,#42494,#42495); #35738=AXIS2_PLACEMENT_3D('',#53460,#42500,#42501); #35739=AXIS2_PLACEMENT_3D('',#53466,#42505,#42506); #35740=AXIS2_PLACEMENT_3D('',#53472,#42510,#42511); #35741=AXIS2_PLACEMENT_3D('',#53478,#42515,#42516); #35742=AXIS2_PLACEMENT_3D('',#53493,#42525,#42526); #35743=AXIS2_PLACEMENT_3D('',#53497,#42528,#42529); #35744=AXIS2_PLACEMENT_3D('',#53501,#42531,#42532); #35745=AXIS2_PLACEMENT_3D('',#53505,#42534,#42535); #35746=AXIS2_PLACEMENT_3D('',#53509,#42537,#42538); #35747=AXIS2_PLACEMENT_3D('',#53512,#42540,#42541); #35748=AXIS2_PLACEMENT_3D('',#53516,#42543,#42544); #35749=AXIS2_PLACEMENT_3D('',#53520,#42546,#42547); #35750=AXIS2_PLACEMENT_3D('',#53524,#42549,#42550); #35751=AXIS2_PLACEMENT_3D('',#53526,#42552,#42553); #35752=AXIS2_PLACEMENT_3D('',#53530,#42556,#42557); #35753=AXIS2_PLACEMENT_3D('',#53532,#42558,#42559); #35754=AXIS2_PLACEMENT_3D('',#53536,#42561,#42562); #35755=AXIS2_PLACEMENT_3D('',#53540,#42564,#42565); #35756=AXIS2_PLACEMENT_3D('',#53543,#42567,#42568); #35757=AXIS2_PLACEMENT_3D('',#53547,#42570,#42571); #35758=AXIS2_PLACEMENT_3D('',#53551,#42573,#42574); #35759=AXIS2_PLACEMENT_3D('',#53555,#42576,#42577); #35760=AXIS2_PLACEMENT_3D('',#53559,#42579,#42580); #35761=AXIS2_PLACEMENT_3D('',#53561,#42582,#42583); #35762=AXIS2_PLACEMENT_3D('',#53563,#42585,#42586); #35763=AXIS2_PLACEMENT_3D('',#53565,#42588,#42589); #35764=AXIS2_PLACEMENT_3D('',#53567,#42591,#42592); #35765=AXIS2_PLACEMENT_3D('',#53569,#42594,#42595); #35766=AXIS2_PLACEMENT_3D('',#53571,#42597,#42598); #35767=AXIS2_PLACEMENT_3D('',#53573,#42600,#42601); #35768=AXIS2_PLACEMENT_3D('',#53575,#42603,#42604); #35769=AXIS2_PLACEMENT_3D('',#53577,#42606,#42607); #35770=AXIS2_PLACEMENT_3D('',#53587,#42613,#42614); #35771=AXIS2_PLACEMENT_3D('',#53589,#42616,#42617); #35772=AXIS2_PLACEMENT_3D('',#53591,#42619,#42620); #35773=AXIS2_PLACEMENT_3D('',#53593,#42622,#42623); #35774=AXIS2_PLACEMENT_3D('',#53595,#42625,#42626); #35775=AXIS2_PLACEMENT_3D('',#53596,#42627,#42628); #35776=AXIS2_PLACEMENT_3D('',#53598,#42630,#42631); #35777=AXIS2_PLACEMENT_3D('',#53600,#42633,#42634); #35778=AXIS2_PLACEMENT_3D('',#53602,#42636,#42637); #35779=AXIS2_PLACEMENT_3D('',#53604,#42639,#42640); #35780=AXIS2_PLACEMENT_3D('',#53606,#42642,#42643); #35781=AXIS2_PLACEMENT_3D('',#53608,#42645,#42646); #35782=AXIS2_PLACEMENT_3D('',#53609,#42647,#42648); #35783=AXIS2_PLACEMENT_3D('',#53612,#42651,#42652); #35784=AXIS2_PLACEMENT_3D('',#53614,#42654,#42655); #35785=AXIS2_PLACEMENT_3D('',#53616,#42657,#42658); #35786=AXIS2_PLACEMENT_3D('',#53618,#42660,#42661); #35787=AXIS2_PLACEMENT_3D('',#53621,#42664,#42665); #35788=AXIS2_PLACEMENT_3D('',#53628,#42670,#42671); #35789=AXIS2_PLACEMENT_3D('',#53634,#42675,#42676); #35790=AXIS2_PLACEMENT_3D('',#53640,#42680,#42681); #35791=AXIS2_PLACEMENT_3D('',#53646,#42685,#42686); #35792=AXIS2_PLACEMENT_3D('',#53661,#42695,#42696); #35793=AXIS2_PLACEMENT_3D('',#53665,#42698,#42699); #35794=AXIS2_PLACEMENT_3D('',#53669,#42701,#42702); #35795=AXIS2_PLACEMENT_3D('',#53673,#42704,#42705); #35796=AXIS2_PLACEMENT_3D('',#53677,#42707,#42708); #35797=AXIS2_PLACEMENT_3D('',#53680,#42710,#42711); #35798=AXIS2_PLACEMENT_3D('',#53684,#42713,#42714); #35799=AXIS2_PLACEMENT_3D('',#53688,#42716,#42717); #35800=AXIS2_PLACEMENT_3D('',#53692,#42719,#42720); #35801=AXIS2_PLACEMENT_3D('',#53694,#42722,#42723); #35802=AXIS2_PLACEMENT_3D('',#53698,#42726,#42727); #35803=AXIS2_PLACEMENT_3D('',#53700,#42728,#42729); #35804=AXIS2_PLACEMENT_3D('',#53704,#42731,#42732); #35805=AXIS2_PLACEMENT_3D('',#53708,#42734,#42735); #35806=AXIS2_PLACEMENT_3D('',#53711,#42737,#42738); #35807=AXIS2_PLACEMENT_3D('',#53715,#42740,#42741); #35808=AXIS2_PLACEMENT_3D('',#53719,#42743,#42744); #35809=AXIS2_PLACEMENT_3D('',#53723,#42746,#42747); #35810=AXIS2_PLACEMENT_3D('',#53727,#42749,#42750); #35811=AXIS2_PLACEMENT_3D('',#53729,#42752,#42753); #35812=AXIS2_PLACEMENT_3D('',#53731,#42755,#42756); #35813=AXIS2_PLACEMENT_3D('',#53733,#42758,#42759); #35814=AXIS2_PLACEMENT_3D('',#53735,#42761,#42762); #35815=AXIS2_PLACEMENT_3D('',#53737,#42764,#42765); #35816=AXIS2_PLACEMENT_3D('',#53739,#42767,#42768); #35817=AXIS2_PLACEMENT_3D('',#53741,#42770,#42771); #35818=AXIS2_PLACEMENT_3D('',#53743,#42773,#42774); #35819=AXIS2_PLACEMENT_3D('',#53745,#42776,#42777); #35820=AXIS2_PLACEMENT_3D('',#53755,#42783,#42784); #35821=AXIS2_PLACEMENT_3D('',#53757,#42786,#42787); #35822=AXIS2_PLACEMENT_3D('',#53759,#42789,#42790); #35823=AXIS2_PLACEMENT_3D('',#53761,#42792,#42793); #35824=AXIS2_PLACEMENT_3D('',#53763,#42795,#42796); #35825=AXIS2_PLACEMENT_3D('',#53764,#42797,#42798); #35826=AXIS2_PLACEMENT_3D('',#53766,#42800,#42801); #35827=AXIS2_PLACEMENT_3D('',#53768,#42803,#42804); #35828=AXIS2_PLACEMENT_3D('',#53770,#42806,#42807); #35829=AXIS2_PLACEMENT_3D('',#53772,#42809,#42810); #35830=AXIS2_PLACEMENT_3D('',#53774,#42812,#42813); #35831=AXIS2_PLACEMENT_3D('',#53776,#42815,#42816); #35832=AXIS2_PLACEMENT_3D('',#53777,#42817,#42818); #35833=AXIS2_PLACEMENT_3D('',#53780,#42821,#42822); #35834=AXIS2_PLACEMENT_3D('',#53782,#42824,#42825); #35835=AXIS2_PLACEMENT_3D('',#53783,#42826,#42827); #35836=AXIS2_PLACEMENT_3D('',#53784,#42828,#42829); #35837=AXIS2_PLACEMENT_3D('',#53785,#42830,#42831); #35838=AXIS2_PLACEMENT_3D('',#53787,#42833,#42834); #35839=AXIS2_PLACEMENT_3D('',#53789,#42836,#42837); #35840=AXIS2_PLACEMENT_3D('',#53791,#42839,#42840); #35841=AXIS2_PLACEMENT_3D('',#53793,#42842,#42843); #35842=AXIS2_PLACEMENT_3D('',#53795,#42845,#42846); #35843=AXIS2_PLACEMENT_3D('',#53797,#42848,#42849); #35844=AXIS2_PLACEMENT_3D('',#53798,#42850,#42851); #35845=AXIS2_PLACEMENT_3D('',#53800,#42853,#42854); #35846=AXIS2_PLACEMENT_3D('',#53802,#42856,#42857); #35847=AXIS2_PLACEMENT_3D('',#53804,#42859,#42860); #35848=AXIS2_PLACEMENT_3D('',#53806,#42862,#42863); #35849=AXIS2_PLACEMENT_3D('',#53807,#42864,#42865); #35850=AXIS2_PLACEMENT_3D('',#53809,#42867,#42868); #35851=AXIS2_PLACEMENT_3D('',#53811,#42870,#42871); #35852=AXIS2_PLACEMENT_3D('',#53813,#42873,#42874); #35853=AXIS2_PLACEMENT_3D('',#53815,#42876,#42877); #35854=AXIS2_PLACEMENT_3D('',#53817,#42879,#42880); #35855=AXIS2_PLACEMENT_3D('',#53819,#42882,#42883); #35856=AXIS2_PLACEMENT_3D('',#53820,#42884,#42885); #35857=AXIS2_PLACEMENT_3D('',#53822,#42887,#42888); #35858=AXIS2_PLACEMENT_3D('',#53823,#42889,#42890); #35859=AXIS2_PLACEMENT_3D('',#53825,#42892,#42893); #35860=AXIS2_PLACEMENT_3D('',#53831,#42897,#42898); #35861=AXIS2_PLACEMENT_3D('',#53833,#42900,#42901); #35862=AXIS2_PLACEMENT_3D('',#53838,#42903,#42904); #35863=AXIS2_PLACEMENT_3D('',#53839,#42905,#42906); #35864=AXIS2_PLACEMENT_3D('',#53841,#42907,#42908); #35865=AXIS2_PLACEMENT_3D('',#53845,#42911,#42912); #35866=AXIS2_PLACEMENT_3D('',#53848,#42913,#42914); #35867=AXIS2_PLACEMENT_3D('',#53852,#42916,#42917); #35868=AXIS2_PLACEMENT_3D('',#53855,#42920,#42921); #35869=AXIS2_PLACEMENT_3D('',#53857,#42922,#42923); #35870=AXIS2_PLACEMENT_3D('',#53862,#42927,#42928); #35871=AXIS2_PLACEMENT_3D('',#53864,#42929,#42930); #35872=AXIS2_PLACEMENT_3D('',#53866,#42932,#42933); #35873=AXIS2_PLACEMENT_3D('',#53870,#42935,#42936); #35874=AXIS2_PLACEMENT_3D('',#53873,#42938,#42939); #35875=AXIS2_PLACEMENT_3D('',#53874,#42940,#42941); #35876=AXIS2_PLACEMENT_3D('',#53876,#42943,#42944); #35877=AXIS2_PLACEMENT_3D('',#53878,#42946,#42947); #35878=AXIS2_PLACEMENT_3D('',#53880,#42949,#42950); #35879=AXIS2_PLACEMENT_3D('',#53882,#42952,#42953); #35880=AXIS2_PLACEMENT_3D('',#53884,#42955,#42956); #35881=AXIS2_PLACEMENT_3D('',#53885,#42957,#42958); #35882=AXIS2_PLACEMENT_3D('',#53886,#42959,#42960); #35883=AXIS2_PLACEMENT_3D('',#53889,#42963,#42964); #35884=AXIS2_PLACEMENT_3D('',#53890,#42965,#42966); #35885=AXIS2_PLACEMENT_3D('',#53891,#42967,#42968); #35886=AXIS2_PLACEMENT_3D('',#53892,#42969,#42970); #35887=AXIS2_PLACEMENT_3D('',#53893,#42971,#42972); #35888=AXIS2_PLACEMENT_3D('',#53894,#42973,#42974); #35889=AXIS2_PLACEMENT_3D('',#53895,#42975,#42976); #35890=AXIS2_PLACEMENT_3D('',#53904,#42981,#42982); #35891=AXIS2_PLACEMENT_3D('',#53910,#42986,#42987); #35892=AXIS2_PLACEMENT_3D('',#53916,#42991,#42992); #35893=AXIS2_PLACEMENT_3D('',#53974,#43022,#43023); #35894=AXIS2_PLACEMENT_3D('',#54032,#43053,#43054); #35895=AXIS2_PLACEMENT_3D('',#54034,#43056,#43057); #35896=AXIS2_PLACEMENT_3D('',#54036,#43059,#43060); #35897=AXIS2_PLACEMENT_3D('',#54038,#43062,#43063); #35898=AXIS2_PLACEMENT_3D('',#54040,#43065,#43066); #35899=AXIS2_PLACEMENT_3D('',#54042,#43068,#43069); #35900=AXIS2_PLACEMENT_3D('',#54044,#43071,#43072); #35901=AXIS2_PLACEMENT_3D('',#54046,#43074,#43075); #35902=AXIS2_PLACEMENT_3D('',#54048,#43077,#43078); #35903=AXIS2_PLACEMENT_3D('',#54050,#43080,#43081); #35904=AXIS2_PLACEMENT_3D('',#54052,#43083,#43084); #35905=AXIS2_PLACEMENT_3D('',#54054,#43086,#43087); #35906=AXIS2_PLACEMENT_3D('',#54056,#43089,#43090); #35907=AXIS2_PLACEMENT_3D('',#54058,#43092,#43093); #35908=AXIS2_PLACEMENT_3D('',#54060,#43095,#43096); #35909=AXIS2_PLACEMENT_3D('',#54062,#43098,#43099); #35910=AXIS2_PLACEMENT_3D('',#54064,#43101,#43102); #35911=AXIS2_PLACEMENT_3D('',#54065,#43103,#43104); #35912=AXIS2_PLACEMENT_3D('',#54071,#43108,#43109); #35913=AXIS2_PLACEMENT_3D('',#54075,#43112,#43113); #35914=AXIS2_PLACEMENT_3D('',#54079,#43116,#43117); #35915=AXIS2_PLACEMENT_3D('',#54081,#43119,#43120); #35916=AXIS2_PLACEMENT_3D('',#54087,#43124,#43125); #35917=AXIS2_PLACEMENT_3D('',#54091,#43128,#43129); #35918=AXIS2_PLACEMENT_3D('',#54095,#43132,#43133); #35919=AXIS2_PLACEMENT_3D('',#54097,#43135,#43136); #35920=AXIS2_PLACEMENT_3D('',#54103,#43140,#43141); #35921=AXIS2_PLACEMENT_3D('',#54107,#43144,#43145); #35922=AXIS2_PLACEMENT_3D('',#54111,#43148,#43149); #35923=AXIS2_PLACEMENT_3D('',#54113,#43151,#43152); #35924=AXIS2_PLACEMENT_3D('',#54119,#43156,#43157); #35925=AXIS2_PLACEMENT_3D('',#54123,#43160,#43161); #35926=AXIS2_PLACEMENT_3D('',#54127,#43164,#43165); #35927=AXIS2_PLACEMENT_3D('',#54129,#43167,#43168); #35928=AXIS2_PLACEMENT_3D('',#54135,#43172,#43173); #35929=AXIS2_PLACEMENT_3D('',#54139,#43176,#43177); #35930=AXIS2_PLACEMENT_3D('',#54143,#43180,#43181); #35931=AXIS2_PLACEMENT_3D('',#54145,#43183,#43184); #35932=AXIS2_PLACEMENT_3D('',#54151,#43188,#43189); #35933=AXIS2_PLACEMENT_3D('',#54155,#43192,#43193); #35934=AXIS2_PLACEMENT_3D('',#54159,#43196,#43197); #35935=AXIS2_PLACEMENT_3D('',#54161,#43199,#43200); #35936=AXIS2_PLACEMENT_3D('',#54167,#43204,#43205); #35937=AXIS2_PLACEMENT_3D('',#54171,#43208,#43209); #35938=AXIS2_PLACEMENT_3D('',#54175,#43212,#43213); #35939=AXIS2_PLACEMENT_3D('',#54177,#43215,#43216); #35940=AXIS2_PLACEMENT_3D('',#54183,#43220,#43221); #35941=AXIS2_PLACEMENT_3D('',#54187,#43224,#43225); #35942=AXIS2_PLACEMENT_3D('',#54191,#43228,#43229); #35943=AXIS2_PLACEMENT_3D('',#54193,#43231,#43232); #35944=AXIS2_PLACEMENT_3D('',#54199,#43236,#43237); #35945=AXIS2_PLACEMENT_3D('',#54203,#43240,#43241); #35946=AXIS2_PLACEMENT_3D('',#54207,#43244,#43245); #35947=AXIS2_PLACEMENT_3D('',#54209,#43247,#43248); #35948=AXIS2_PLACEMENT_3D('',#54215,#43252,#43253); #35949=AXIS2_PLACEMENT_3D('',#54219,#43256,#43257); #35950=AXIS2_PLACEMENT_3D('',#54223,#43260,#43261); #35951=AXIS2_PLACEMENT_3D('',#54225,#43263,#43264); #35952=AXIS2_PLACEMENT_3D('',#54231,#43268,#43269); #35953=AXIS2_PLACEMENT_3D('',#54235,#43272,#43273); #35954=AXIS2_PLACEMENT_3D('',#54239,#43276,#43277); #35955=AXIS2_PLACEMENT_3D('',#54241,#43279,#43280); #35956=AXIS2_PLACEMENT_3D('',#54247,#43284,#43285); #35957=AXIS2_PLACEMENT_3D('',#54251,#43288,#43289); #35958=AXIS2_PLACEMENT_3D('',#54255,#43292,#43293); #35959=AXIS2_PLACEMENT_3D('',#54257,#43295,#43296); #35960=AXIS2_PLACEMENT_3D('',#54258,#43297,#43298); #35961=AXIS2_PLACEMENT_3D('',#54259,#43299,#43300); #35962=AXIS2_PLACEMENT_3D('',#54260,#43301,#43302); #35963=AXIS2_PLACEMENT_3D('',#54261,#43303,#43304); #35964=AXIS2_PLACEMENT_3D('',#54262,#43305,#43306); #35965=AXIS2_PLACEMENT_3D('',#54263,#43307,#43308); #35966=AXIS2_PLACEMENT_3D('',#54264,#43309,#43310); #35967=AXIS2_PLACEMENT_3D('',#54265,#43311,#43312); #35968=AXIS2_PLACEMENT_3D('',#54266,#43313,#43314); #35969=AXIS2_PLACEMENT_3D('',#54267,#43315,#43316); #35970=AXIS2_PLACEMENT_3D('',#54272,#43318,#43319); #35971=AXIS2_PLACEMENT_3D('',#54276,#43321,#43322); #35972=AXIS2_PLACEMENT_3D('',#54280,#43324,#43325); #35973=AXIS2_PLACEMENT_3D('',#54283,#43327,#43328); #35974=AXIS2_PLACEMENT_3D('',#54284,#43329,#43330); #35975=AXIS2_PLACEMENT_3D('',#54290,#43334,#43335); #35976=AXIS2_PLACEMENT_3D('',#54293,#43337,#43338); #35977=AXIS2_PLACEMENT_3D('',#54294,#43339,#43340); #35978=AXIS2_PLACEMENT_3D('',#54296,#43341,#43342); #35979=AXIS2_PLACEMENT_3D('',#54298,#43344,#43345); #35980=AXIS2_PLACEMENT_3D('',#54302,#43348,#43349); #35981=AXIS2_PLACEMENT_3D('',#54306,#43352,#43353); #35982=AXIS2_PLACEMENT_3D('',#54309,#43355,#43356); #35983=AXIS2_PLACEMENT_3D('',#54310,#43357,#43358); #35984=AXIS2_PLACEMENT_3D('',#54312,#43359,#43360); #35985=AXIS2_PLACEMENT_3D('',#54314,#43362,#43363); #35986=AXIS2_PLACEMENT_3D('',#54316,#43365,#43366); #35987=AXIS2_PLACEMENT_3D('',#54319,#43367,#43368); #35988=AXIS2_PLACEMENT_3D('',#54323,#43370,#43371); #35989=AXIS2_PLACEMENT_3D('',#54327,#43373,#43374); #35990=AXIS2_PLACEMENT_3D('',#54331,#43376,#43377); #35991=AXIS2_PLACEMENT_3D('',#54333,#43379,#43380); #35992=AXIS2_PLACEMENT_3D('',#54337,#43382,#43383); #35993=AXIS2_PLACEMENT_3D('',#54339,#43385,#43386); #35994=AXIS2_PLACEMENT_3D('',#54343,#43389,#43390); #35995=AXIS2_PLACEMENT_3D('',#54346,#43392,#43393); #35996=AXIS2_PLACEMENT_3D('',#54347,#43394,#43395); #35997=AXIS2_PLACEMENT_3D('',#54351,#43398,#43399); #35998=AXIS2_PLACEMENT_3D('',#54354,#43401,#43402); #35999=AXIS2_PLACEMENT_3D('',#54355,#43403,#43404); #36000=AXIS2_PLACEMENT_3D('',#54359,#43407,#43408); #36001=AXIS2_PLACEMENT_3D('',#54362,#43410,#43411); #36002=AXIS2_PLACEMENT_3D('',#54363,#43412,#43413); #36003=AXIS2_PLACEMENT_3D('',#54365,#43415,#43416); #36004=AXIS2_PLACEMENT_3D('',#54370,#43418,#43419); #36005=AXIS2_PLACEMENT_3D('',#54374,#43421,#43422); #36006=AXIS2_PLACEMENT_3D('',#54378,#43424,#43425); #36007=AXIS2_PLACEMENT_3D('',#54381,#43427,#43428); #36008=AXIS2_PLACEMENT_3D('',#54382,#43429,#43430); #36009=AXIS2_PLACEMENT_3D('',#54388,#43434,#43435); #36010=AXIS2_PLACEMENT_3D('',#54391,#43437,#43438); #36011=AXIS2_PLACEMENT_3D('',#54392,#43439,#43440); #36012=AXIS2_PLACEMENT_3D('',#54394,#43441,#43442); #36013=AXIS2_PLACEMENT_3D('',#54396,#43444,#43445); #36014=AXIS2_PLACEMENT_3D('',#54400,#43448,#43449); #36015=AXIS2_PLACEMENT_3D('',#54404,#43452,#43453); #36016=AXIS2_PLACEMENT_3D('',#54407,#43455,#43456); #36017=AXIS2_PLACEMENT_3D('',#54408,#43457,#43458); #36018=AXIS2_PLACEMENT_3D('',#54410,#43459,#43460); #36019=AXIS2_PLACEMENT_3D('',#54412,#43462,#43463); #36020=AXIS2_PLACEMENT_3D('',#54414,#43465,#43466); #36021=AXIS2_PLACEMENT_3D('',#54415,#43467,#43468); #36022=AXIS2_PLACEMENT_3D('',#54416,#43469,#43470); #36023=AXIS2_PLACEMENT_3D('',#54417,#43471,#43472); #36024=AXIS2_PLACEMENT_3D('',#54418,#43473,#43474); #36025=AXIS2_PLACEMENT_3D('',#54423,#43476,#43477); #36026=AXIS2_PLACEMENT_3D('',#54427,#43479,#43480); #36027=AXIS2_PLACEMENT_3D('',#54431,#43483,#43484); #36028=AXIS2_PLACEMENT_3D('',#54440,#43489,#43490); #36029=AXIS2_PLACEMENT_3D('',#54446,#43494,#43495); #36030=AXIS2_PLACEMENT_3D('',#54452,#43499,#43500); #36031=AXIS2_PLACEMENT_3D('',#54457,#43502,#43503); #36032=AXIS2_PLACEMENT_3D('',#54461,#43505,#43506); #36033=AXIS2_PLACEMENT_3D('',#54465,#43508,#43509); #36034=AXIS2_PLACEMENT_3D('',#54468,#43511,#43512); #36035=AXIS2_PLACEMENT_3D('',#54478,#43517,#43518); #36036=AXIS2_PLACEMENT_3D('',#54482,#43520,#43521); #36037=AXIS2_PLACEMENT_3D('',#54492,#43527,#43528); #36038=AXIS2_PLACEMENT_3D('',#54504,#43534,#43535); #36039=AXIS2_PLACEMENT_3D('',#54508,#43537,#43538); #36040=AXIS2_PLACEMENT_3D('',#54519,#43544,#43545); #36041=AXIS2_PLACEMENT_3D('',#54523,#43547,#43548); #36042=AXIS2_PLACEMENT_3D('',#54525,#43550,#43551); #36043=AXIS2_PLACEMENT_3D('',#54527,#43553,#43554); #36044=AXIS2_PLACEMENT_3D('',#54529,#43556,#43557); #36045=AXIS2_PLACEMENT_3D('',#54531,#43559,#43560); #36046=AXIS2_PLACEMENT_3D('',#54534,#43563,#43564); #36047=AXIS2_PLACEMENT_3D('',#54543,#43569,#43570); #36048=AXIS2_PLACEMENT_3D('',#54549,#43574,#43575); #36049=AXIS2_PLACEMENT_3D('',#54552,#43578,#43579); #36050=AXIS2_PLACEMENT_3D('',#54561,#43584,#43585); #36051=AXIS2_PLACEMENT_3D('',#54567,#43589,#43590); #36052=AXIS2_PLACEMENT_3D('',#54573,#43594,#43595); #36053=AXIS2_PLACEMENT_3D('',#54579,#43599,#43600); #36054=AXIS2_PLACEMENT_3D('',#54585,#43604,#43605); #36055=AXIS2_PLACEMENT_3D('',#54591,#43609,#43610); #36056=AXIS2_PLACEMENT_3D('',#54597,#43614,#43615); #36057=AXIS2_PLACEMENT_3D('',#54600,#43618,#43619); #36058=AXIS2_PLACEMENT_3D('',#54742,#43627,#43628); #36059=AXIS2_PLACEMENT_3D('',#54748,#43632,#43633); #36060=AXIS2_PLACEMENT_3D('',#54754,#43637,#43638); #36061=AXIS2_PLACEMENT_3D('',#54898,#43648,#43649); #36062=AXIS2_PLACEMENT_3D('',#54904,#43653,#43654); #36063=AXIS2_PLACEMENT_3D('',#54910,#43658,#43659); #36064=AXIS2_PLACEMENT_3D('',#54913,#43662,#43663); #36065=AXIS2_PLACEMENT_3D('',#55198,#43680,#43681); #36066=AXIS2_PLACEMENT_3D('',#55204,#43685,#43686); #36067=AXIS2_PLACEMENT_3D('',#55207,#43689,#43690); #36068=AXIS2_PLACEMENT_3D('',#55208,#43691,#43692); #36069=AXIS2_PLACEMENT_3D('',#55211,#43693,#43694); #36070=AXIS2_PLACEMENT_3D('',#55215,#43696,#43697); #36071=AXIS2_PLACEMENT_3D('',#55219,#43699,#43700); #36072=AXIS2_PLACEMENT_3D('',#55223,#43702,#43703); #36073=AXIS2_PLACEMENT_3D('',#55380,#43710,#43711); #36074=AXIS2_PLACEMENT_3D('',#55381,#43712,#43713); #36075=AXIS2_PLACEMENT_3D('',#55442,#43718,#43719); #36076=AXIS2_PLACEMENT_3D('',#55448,#43723,#43724); #36077=AXIS2_PLACEMENT_3D('',#55549,#43733,#43734); #36078=AXIS2_PLACEMENT_3D('',#55555,#43738,#43739); #36079=AXIS2_PLACEMENT_3D('',#55876,#43764,#43765); #36080=AXIS2_PLACEMENT_3D('',#56029,#43774,#43775); #36081=AXIS2_PLACEMENT_3D('',#56052,#43778,#43779); #36082=AXIS2_PLACEMENT_3D('',#56077,#43784,#43785); #36083=AXIS2_PLACEMENT_3D('',#56102,#43790,#43791); #36084=AXIS2_PLACEMENT_3D('',#56127,#43796,#43797); #36085=AXIS2_PLACEMENT_3D('',#56152,#43802,#43803); #36086=AXIS2_PLACEMENT_3D('',#56177,#43808,#43809); #36087=AXIS2_PLACEMENT_3D('',#56202,#43814,#43815); #36088=AXIS2_PLACEMENT_3D('',#56227,#43820,#43821); #36089=AXIS2_PLACEMENT_3D('',#56252,#43826,#43827); #36090=AXIS2_PLACEMENT_3D('',#56277,#43832,#43833); #36091=AXIS2_PLACEMENT_3D('',#56302,#43838,#43839); #36092=AXIS2_PLACEMENT_3D('',#56327,#43844,#43845); #36093=AXIS2_PLACEMENT_3D('',#56352,#43850,#43851); #36094=AXIS2_PLACEMENT_3D('',#56377,#43856,#43857); #36095=AXIS2_PLACEMENT_3D('',#56402,#43862,#43863); #36096=AXIS2_PLACEMENT_3D('',#56427,#43868,#43869); #36097=AXIS2_PLACEMENT_3D('',#56452,#43874,#43875); #36098=AXIS2_PLACEMENT_3D('',#56477,#43880,#43881); #36099=AXIS2_PLACEMENT_3D('',#56502,#43886,#43887); #36100=AXIS2_PLACEMENT_3D('',#56527,#43892,#43893); #36101=AXIS2_PLACEMENT_3D('',#56552,#43898,#43899); #36102=AXIS2_PLACEMENT_3D('',#56577,#43904,#43905); #36103=AXIS2_PLACEMENT_3D('',#56602,#43910,#43911); #36104=AXIS2_PLACEMENT_3D('',#56627,#43916,#43917); #36105=AXIS2_PLACEMENT_3D('',#56652,#43922,#43923); #36106=AXIS2_PLACEMENT_3D('',#56677,#43928,#43929); #36107=AXIS2_PLACEMENT_3D('',#56702,#43934,#43935); #36108=AXIS2_PLACEMENT_3D('',#56727,#43940,#43941); #36109=AXIS2_PLACEMENT_3D('',#56752,#43946,#43947); #36110=AXIS2_PLACEMENT_3D('',#56777,#43952,#43953); #36111=AXIS2_PLACEMENT_3D('',#56802,#43958,#43959); #36112=AXIS2_PLACEMENT_3D('',#56827,#43964,#43965); #36113=AXIS2_PLACEMENT_3D('',#56852,#43970,#43971); #36114=AXIS2_PLACEMENT_3D('',#56877,#43976,#43977); #36115=AXIS2_PLACEMENT_3D('',#56902,#43982,#43983); #36116=AXIS2_PLACEMENT_3D('',#56927,#43988,#43989); #36117=AXIS2_PLACEMENT_3D('',#56952,#43994,#43995); #36118=AXIS2_PLACEMENT_3D('',#56977,#44000,#44001); #36119=AXIS2_PLACEMENT_3D('',#57002,#44006,#44007); #36120=AXIS2_PLACEMENT_3D('',#57027,#44012,#44013); #36121=AXIS2_PLACEMENT_3D('',#57052,#44018,#44019); #36122=AXIS2_PLACEMENT_3D('',#57077,#44024,#44025); #36123=AXIS2_PLACEMENT_3D('',#57102,#44030,#44031); #36124=AXIS2_PLACEMENT_3D('',#57127,#44036,#44037); #36125=AXIS2_PLACEMENT_3D('',#57152,#44042,#44043); #36126=AXIS2_PLACEMENT_3D('',#57177,#44048,#44049); #36127=AXIS2_PLACEMENT_3D('',#57202,#44054,#44055); #36128=AXIS2_PLACEMENT_3D('',#57227,#44060,#44061); #36129=AXIS2_PLACEMENT_3D('',#57252,#44066,#44067); #36130=AXIS2_PLACEMENT_3D('',#57277,#44072,#44073); #36131=AXIS2_PLACEMENT_3D('',#57302,#44078,#44079); #36132=AXIS2_PLACEMENT_3D('',#57327,#44084,#44085); #36133=AXIS2_PLACEMENT_3D('',#57352,#44090,#44091); #36134=AXIS2_PLACEMENT_3D('',#57377,#44096,#44097); #36135=AXIS2_PLACEMENT_3D('',#57402,#44102,#44103); #36136=AXIS2_PLACEMENT_3D('',#57427,#44108,#44109); #36137=AXIS2_PLACEMENT_3D('',#57452,#44114,#44115); #36138=AXIS2_PLACEMENT_3D('',#57477,#44120,#44121); #36139=AXIS2_PLACEMENT_3D('',#57502,#44126,#44127); #36140=AXIS2_PLACEMENT_3D('',#57527,#44132,#44133); #36141=AXIS2_PLACEMENT_3D('',#57552,#44138,#44139); #36142=AXIS2_PLACEMENT_3D('',#57577,#44144,#44145); #36143=AXIS2_PLACEMENT_3D('',#57602,#44150,#44151); #36144=AXIS2_PLACEMENT_3D('',#57627,#44156,#44157); #36145=AXIS2_PLACEMENT_3D('',#57652,#44162,#44163); #36146=AXIS2_PLACEMENT_3D('',#57677,#44168,#44169); #36147=AXIS2_PLACEMENT_3D('',#57702,#44174,#44175); #36148=AXIS2_PLACEMENT_3D('',#57727,#44180,#44181); #36149=AXIS2_PLACEMENT_3D('',#57752,#44186,#44187); #36150=AXIS2_PLACEMENT_3D('',#57777,#44192,#44193); #36151=AXIS2_PLACEMENT_3D('',#57802,#44198,#44199); #36152=AXIS2_PLACEMENT_3D('',#57827,#44204,#44205); #36153=AXIS2_PLACEMENT_3D('',#57830,#44208,#44209); #36154=AXIS2_PLACEMENT_3D('',#57864,#44215,#44216); #36155=AXIS2_PLACEMENT_3D('',#57896,#44221,#44222); #36156=AXIS2_PLACEMENT_3D('',#57928,#44227,#44228); #36157=AXIS2_PLACEMENT_3D('',#57960,#44233,#44234); #36158=AXIS2_PLACEMENT_3D('',#57976,#44237,#44238); #36159=AXIS2_PLACEMENT_3D('',#57977,#44239,#44240); #36160=AXIS2_PLACEMENT_3D('',#57978,#44241,#44242); #36161=AXIS2_PLACEMENT_3D('',#57979,#44243,#44244); #36162=AXIS2_PLACEMENT_3D('',#57980,#44245,#44246); #36163=AXIS2_PLACEMENT_3D('',#57981,#44247,#44248); #36164=AXIS2_PLACEMENT_3D('',#57982,#44249,#44250); #36165=AXIS2_PLACEMENT_3D('',#57983,#44251,#44252); #36166=AXIS2_PLACEMENT_3D('',#57984,#44253,#44254); #36167=AXIS2_PLACEMENT_3D('',#57985,#44255,#44256); #36168=AXIS2_PLACEMENT_3D('',#57986,#44257,#44258); #36169=AXIS2_PLACEMENT_3D('',#57987,#44259,#44260); #36170=AXIS2_PLACEMENT_3D('',#57988,#44261,#44262); #36171=AXIS2_PLACEMENT_3D('',#57989,#44263,#44264); #36172=AXIS2_PLACEMENT_3D('',#57990,#44265,#44266); #36173=AXIS2_PLACEMENT_3D('',#57991,#44267,#44268); #36174=AXIS2_PLACEMENT_3D('',#57992,#44269,#44270); #36175=AXIS2_PLACEMENT_3D('',#57993,#44271,#44272); #36176=AXIS2_PLACEMENT_3D('',#57994,#44273,#44274); #36177=AXIS2_PLACEMENT_3D('',#57995,#44275,#44276); #36178=AXIS2_PLACEMENT_3D('',#57996,#44277,#44278); #36179=AXIS2_PLACEMENT_3D('',#57997,#44279,#44280); #36180=AXIS2_PLACEMENT_3D('',#58000,#44281,#44282); #36181=AXIS2_PLACEMENT_3D('',#58004,#44284,#44285); #36182=AXIS2_PLACEMENT_3D('',#58006,#44287,#44288); #36183=AXIS2_PLACEMENT_3D('',#58009,#44291,#44292); #36184=AXIS2_PLACEMENT_3D('',#58012,#44295,#44296); #36185=AXIS2_PLACEMENT_3D('',#58015,#44297,#44298); #36186=AXIS2_PLACEMENT_3D('',#58019,#44300,#44301); #36187=AXIS2_PLACEMENT_3D('',#58021,#44303,#44304); #36188=AXIS2_PLACEMENT_3D('',#58024,#44307,#44308); #36189=AXIS2_PLACEMENT_3D('',#58027,#44311,#44312); #36190=AXIS2_PLACEMENT_3D('',#58029,#44314,#44315); #36191=AXIS2_PLACEMENT_3D('',#58030,#44316,#44317); #36192=AXIS2_PLACEMENT_3D('',#58032,#44319,#44320); #36193=AXIS2_PLACEMENT_3D('',#58034,#44322,#44323); #36194=AXIS2_PLACEMENT_3D('',#58035,#44324,#44325); #36195=AXIS2_PLACEMENT_3D('',#58037,#44327,#44328); #36196=AXIS2_PLACEMENT_3D('',#58040,#44329,#44330); #36197=AXIS2_PLACEMENT_3D('',#58044,#44332,#44333); #36198=AXIS2_PLACEMENT_3D('',#58046,#44335,#44336); #36199=AXIS2_PLACEMENT_3D('',#58049,#44339,#44340); #36200=AXIS2_PLACEMENT_3D('',#58052,#44343,#44344); #36201=AXIS2_PLACEMENT_3D('',#58055,#44345,#44346); #36202=AXIS2_PLACEMENT_3D('',#58059,#44348,#44349); #36203=AXIS2_PLACEMENT_3D('',#58061,#44351,#44352); #36204=AXIS2_PLACEMENT_3D('',#58064,#44355,#44356); #36205=AXIS2_PLACEMENT_3D('',#58066,#44358,#44359); #36206=AXIS2_PLACEMENT_3D('',#58068,#44361,#44362); #36207=AXIS2_PLACEMENT_3D('',#58070,#44364,#44365); #36208=AXIS2_PLACEMENT_3D('',#58072,#44367,#44368); #36209=AXIS2_PLACEMENT_3D('',#58074,#44370,#44371); #36210=AXIS2_PLACEMENT_3D('',#58076,#44373,#44374); #36211=AXIS2_PLACEMENT_3D('',#58077,#44375,#44376); #36212=AXIS2_PLACEMENT_3D('',#58078,#44377,#44378); #36213=AXIS2_PLACEMENT_3D('',#58079,#44379,#44380); #36214=AXIS2_PLACEMENT_3D('',#58081,#44382,#44383); #36215=AXIS2_PLACEMENT_3D('',#58083,#44385,#44386); #36216=AXIS2_PLACEMENT_3D('',#58084,#44387,#44388); #36217=AXIS2_PLACEMENT_3D('',#58090,#44392,#44393); #36218=AXIS2_PLACEMENT_3D('',#58093,#44395,#44396); #36219=AXIS2_PLACEMENT_3D('',#58094,#44397,#44398); #36220=AXIS2_PLACEMENT_3D('',#58098,#44401,#44402); #36221=AXIS2_PLACEMENT_3D('',#58101,#44404,#44405); #36222=AXIS2_PLACEMENT_3D('',#58102,#44406,#44407); #36223=AXIS2_PLACEMENT_3D('',#58108,#44411,#44412); #36224=AXIS2_PLACEMENT_3D('',#58109,#44413,#44414); #36225=AXIS2_PLACEMENT_3D('',#58110,#44415,#44416); #36226=AXIS2_PLACEMENT_3D('',#58113,#44419,#44420); #36227=AXIS2_PLACEMENT_3D('',#58115,#44422,#44423); #36228=AXIS2_PLACEMENT_3D('',#58117,#44425,#44426); #36229=AXIS2_PLACEMENT_3D('',#58119,#44428,#44429); #36230=AXIS2_PLACEMENT_3D('',#58122,#44431,#44432); #36231=AXIS2_PLACEMENT_3D('',#58123,#44433,#44434); #36232=AXIS2_PLACEMENT_3D('',#58126,#44437,#44438); #36233=AXIS2_PLACEMENT_3D('',#58128,#44440,#44441); #36234=AXIS2_PLACEMENT_3D('',#58129,#44442,#44443); #36235=AXIS2_PLACEMENT_3D('',#58131,#44445,#44446); #36236=AXIS2_PLACEMENT_3D('',#58132,#44447,#44448); #36237=AXIS2_PLACEMENT_3D('',#58133,#44449,#44450); #36238=AXIS2_PLACEMENT_3D('',#58134,#44451,#44452); #36239=AXIS2_PLACEMENT_3D('',#58137,#44453,#44454); #36240=AXIS2_PLACEMENT_3D('',#58141,#44456,#44457); #36241=AXIS2_PLACEMENT_3D('',#58143,#44459,#44460); #36242=AXIS2_PLACEMENT_3D('',#58149,#44464,#44465); #36243=AXIS2_PLACEMENT_3D('',#58153,#44468,#44469); #36244=AXIS2_PLACEMENT_3D('',#58157,#44472,#44473); #36245=AXIS2_PLACEMENT_3D('',#58159,#44475,#44476); #36246=AXIS2_PLACEMENT_3D('',#58162,#44477,#44478); #36247=AXIS2_PLACEMENT_3D('',#58166,#44480,#44481); #36248=AXIS2_PLACEMENT_3D('',#58168,#44483,#44484); #36249=AXIS2_PLACEMENT_3D('',#58174,#44488,#44489); #36250=AXIS2_PLACEMENT_3D('',#58178,#44492,#44493); #36251=AXIS2_PLACEMENT_3D('',#58182,#44496,#44497); #36252=AXIS2_PLACEMENT_3D('',#58184,#44499,#44500); #36253=AXIS2_PLACEMENT_3D('',#58186,#44501,#44502); #36254=AXIS2_PLACEMENT_3D('',#58188,#44503,#44504); #36255=AXIS2_PLACEMENT_3D('',#58189,#44505,#44506); #36256=AXIS2_PLACEMENT_3D('',#58190,#44507,#44508); #36257=AXIS2_PLACEMENT_3D('',#58193,#44510,#44511); #36258=AXIS2_PLACEMENT_3D('',#58194,#44512,#44513); #36259=AXIS2_PLACEMENT_3D('',#58195,#44514,#44515); #36260=AXIS2_PLACEMENT_3D('',#58197,#44516,#44517); #36261=AXIS2_PLACEMENT_3D('',#58199,#44518,#44519); #36262=AXIS2_PLACEMENT_3D('',#58200,#44520,#44521); #36263=AXIS2_PLACEMENT_3D('',#58201,#44522,#44523); #36264=AXIS2_PLACEMENT_3D('',#58204,#44525,#44526); #36265=AXIS2_PLACEMENT_3D('',#58205,#44527,#44528); #36266=AXIS2_PLACEMENT_3D('',#58206,#44529,#44530); #36267=AXIS2_PLACEMENT_3D('',#58208,#44531,#44532); #36268=AXIS2_PLACEMENT_3D('',#58210,#44533,#44534); #36269=AXIS2_PLACEMENT_3D('',#58211,#44535,#44536); #36270=AXIS2_PLACEMENT_3D('',#58212,#44537,#44538); #36271=AXIS2_PLACEMENT_3D('',#58215,#44540,#44541); #36272=AXIS2_PLACEMENT_3D('',#58216,#44542,#44543); #36273=AXIS2_PLACEMENT_3D('',#58217,#44544,#44545); #36274=AXIS2_PLACEMENT_3D('',#58226,#44550,#44551); #36275=AXIS2_PLACEMENT_3D('',#58234,#44556,#44557); #36276=AXIS2_PLACEMENT_3D('',#58242,#44562,#44563); #36277=AXIS2_PLACEMENT_3D('',#58245,#44566,#44567); #36278=AXIS2_PLACEMENT_3D('',#58249,#44569,#44570); #36279=AXIS2_PLACEMENT_3D('',#58253,#44572,#44573); #36280=AXIS2_PLACEMENT_3D('',#58257,#44575,#44576); #36281=AXIS2_PLACEMENT_3D('',#58261,#44578,#44579); #36282=AXIS2_PLACEMENT_3D('',#58271,#44585,#44586); #36283=AXIS2_PLACEMENT_3D('',#58274,#44587,#44588); #36284=AXIS2_PLACEMENT_3D('',#58278,#44590,#44591); #36285=AXIS2_PLACEMENT_3D('',#58280,#44593,#44594); #36286=AXIS2_PLACEMENT_3D('',#58283,#44595,#44596); #36287=AXIS2_PLACEMENT_3D('',#58284,#44597,#44598); #36288=AXIS2_PLACEMENT_3D('',#58285,#44599,#44600); #36289=AXIS2_PLACEMENT_3D('',#58286,#44601,#44602); #36290=AXIS2_PLACEMENT_3D('',#58289,#44603,#44604); #36291=AXIS2_PLACEMENT_3D('',#58292,#44607,#44608); #36292=AXIS2_PLACEMENT_3D('',#58293,#44609,#44610); #36293=AXIS2_PLACEMENT_3D('',#58294,#44611,#44612); #36294=AXIS2_PLACEMENT_3D('',#58295,#44613,#44614); #36295=AXIS2_PLACEMENT_3D('',#58299,#44616,#44617); #36296=AXIS2_PLACEMENT_3D('',#58301,#44618,#44619); #36297=AXIS2_PLACEMENT_3D('',#58303,#44621,#44622); #36298=AXIS2_PLACEMENT_3D('',#58307,#44625,#44626); #36299=AXIS2_PLACEMENT_3D('',#58315,#44630,#44631); #36300=AXIS2_PLACEMENT_3D('',#58319,#44633,#44634); #36301=AXIS2_PLACEMENT_3D('',#58321,#44636,#44637); #36302=AXIS2_PLACEMENT_3D('',#58323,#44638,#44639); #36303=AXIS2_PLACEMENT_3D('',#58325,#44640,#44641); #36304=AXIS2_PLACEMENT_3D('',#58326,#44642,#44643); #36305=AXIS2_PLACEMENT_3D('',#58327,#44644,#44645); #36306=AXIS2_PLACEMENT_3D('',#58329,#44646,#44647); #36307=AXIS2_PLACEMENT_3D('',#58331,#44649,#44650); #36308=AXIS2_PLACEMENT_3D('',#58333,#44651,#44652); #36309=AXIS2_PLACEMENT_3D('',#58334,#44653,#44654); #36310=AXIS2_PLACEMENT_3D('',#58335,#44655,#44656); #36311=AXIS2_PLACEMENT_3D('',#58337,#44658,#44659); #36312=AXIS2_PLACEMENT_3D('',#58343,#44663,#44664); #36313=AXIS2_PLACEMENT_3D('',#58346,#44666,#44667); #36314=AXIS2_PLACEMENT_3D('',#58347,#44668,#44669); #36315=AXIS2_PLACEMENT_3D('',#58356,#44674,#44675); #36316=AXIS2_PLACEMENT_3D('',#58362,#44679,#44680); #36317=AXIS2_PLACEMENT_3D('',#58368,#44684,#44685); #36318=AXIS2_PLACEMENT_3D('',#58371,#44688,#44689); #36319=AXIS2_PLACEMENT_3D('',#58377,#44693,#44694); #36320=AXIS2_PLACEMENT_3D('',#58381,#44697,#44698); #36321=AXIS2_PLACEMENT_3D('',#58395,#44706,#44707); #36322=AXIS2_PLACEMENT_3D('',#58401,#44711,#44712); #36323=AXIS2_PLACEMENT_3D('',#58405,#44715,#44716); #36324=AXIS2_PLACEMENT_3D('',#58409,#44719,#44720); #36325=AXIS2_PLACEMENT_3D('',#58411,#44722,#44723); #36326=AXIS2_PLACEMENT_3D('',#58417,#44727,#44728); #36327=AXIS2_PLACEMENT_3D('',#58421,#44731,#44732); #36328=AXIS2_PLACEMENT_3D('',#58424,#44734,#44735); #36329=AXIS2_PLACEMENT_3D('',#58425,#44736,#44737); #36330=AXIS2_PLACEMENT_3D('',#58429,#44740,#44741); #36331=AXIS2_PLACEMENT_3D('',#58430,#44742,#44743); #36332=AXIS2_PLACEMENT_3D('',#58431,#44744,#44745); #36333=AXIS2_PLACEMENT_3D('',#58435,#44748,#44749); #36334=AXIS2_PLACEMENT_3D('',#58436,#44750,#44751); #36335=AXIS2_PLACEMENT_3D('',#58437,#44752,#44753); #36336=AXIS2_PLACEMENT_3D('',#58441,#44756,#44757); #36337=AXIS2_PLACEMENT_3D('',#58443,#44759,#44760); #36338=AXIS2_PLACEMENT_3D('',#58447,#44763,#44764); #36339=AXIS2_PLACEMENT_3D('',#58449,#44766,#44767); #36340=AXIS2_PLACEMENT_3D('',#58456,#44771,#44772); #36341=AXIS2_PLACEMENT_3D('',#58463,#44776,#44777); #36342=AXIS2_PLACEMENT_3D('',#58466,#44780,#44781); #36343=AXIS2_PLACEMENT_3D('',#58473,#44785,#44786); #36344=AXIS2_PLACEMENT_3D('',#58480,#44790,#44791); #36345=AXIS2_PLACEMENT_3D('',#58483,#44794,#44795); #36346=AXIS2_PLACEMENT_3D('',#58490,#44799,#44800); #36347=AXIS2_PLACEMENT_3D('',#58497,#44804,#44805); #36348=AXIS2_PLACEMENT_3D('',#58500,#44808,#44809); #36349=AXIS2_PLACEMENT_3D('',#58507,#44813,#44814); #36350=AXIS2_PLACEMENT_3D('',#58514,#44818,#44819); #36351=AXIS2_PLACEMENT_3D('',#58517,#44822,#44823); #36352=AXIS2_PLACEMENT_3D('',#58520,#44824,#44825); #36353=AXIS2_PLACEMENT_3D('',#58524,#44827,#44828); #36354=AXIS2_PLACEMENT_3D('',#58526,#44830,#44831); #36355=AXIS2_PLACEMENT_3D('',#58528,#44832,#44833); #36356=AXIS2_PLACEMENT_3D('',#58530,#44834,#44835); #36357=AXIS2_PLACEMENT_3D('',#58536,#44838,#44839); #36358=AXIS2_PLACEMENT_3D('',#58538,#44840,#44841); #36359=AXIS2_PLACEMENT_3D('',#58540,#44842,#44843); #36360=AXIS2_PLACEMENT_3D('',#58544,#44845,#44846); #36361=AXIS2_PLACEMENT_3D('',#58546,#44847,#44848); #36362=AXIS2_PLACEMENT_3D('',#58548,#44849,#44850); #36363=AXIS2_PLACEMENT_3D('',#58552,#44853,#44854); #36364=AXIS2_PLACEMENT_3D('',#58554,#44855,#44856); #36365=AXIS2_PLACEMENT_3D('',#58556,#44858,#44859); #36366=AXIS2_PLACEMENT_3D('',#58558,#44860,#44861); #36367=AXIS2_PLACEMENT_3D('',#58560,#44863,#44864); #36368=AXIS2_PLACEMENT_3D('',#58564,#44866,#44867); #36369=AXIS2_PLACEMENT_3D('',#58566,#44869,#44870); #36370=AXIS2_PLACEMENT_3D('',#58569,#44872,#44873); #36371=AXIS2_PLACEMENT_3D('',#58570,#44874,#44875); #36372=AXIS2_PLACEMENT_3D('',#58573,#44877,#44878); #36373=AXIS2_PLACEMENT_3D('',#58574,#44879,#44880); #36374=AXIS2_PLACEMENT_3D('',#58578,#44883,#44884); #36375=AXIS2_PLACEMENT_3D('',#58581,#44886,#44887); #36376=AXIS2_PLACEMENT_3D('',#58582,#44888,#44889); #36377=AXIS2_PLACEMENT_3D('',#58585,#44891,#44892); #36378=AXIS2_PLACEMENT_3D('',#58586,#44893,#44894); #36379=AXIS2_PLACEMENT_3D('',#58589,#44896,#44897); #36380=AXIS2_PLACEMENT_3D('',#58590,#44898,#44899); #36381=AXIS2_PLACEMENT_3D('',#58594,#44902,#44903); #36382=AXIS2_PLACEMENT_3D('',#58596,#44905,#44906); #36383=AXIS2_PLACEMENT_3D('',#58609,#44914,#44915); #36384=AXIS2_PLACEMENT_3D('',#58611,#44917,#44918); #36385=AXIS2_PLACEMENT_3D('',#58612,#44919,#44920); #36386=AXIS2_PLACEMENT_3D('',#58621,#44927,#44928); #36387=AXIS2_PLACEMENT_3D('',#58625,#44931,#44932); #36388=AXIS2_PLACEMENT_3D('',#58631,#44937,#44938); #36389=AXIS2_PLACEMENT_3D('',#58633,#44940,#44941); #36390=AXIS2_PLACEMENT_3D('',#58636,#44944,#44945); #36391=AXIS2_PLACEMENT_3D('',#58638,#44947,#44948); #36392=AXIS2_PLACEMENT_3D('',#58640,#44950,#44951); #36393=AXIS2_PLACEMENT_3D('',#58641,#44952,#44953); #36394=AXIS2_PLACEMENT_3D('',#58643,#44954,#44955); #36395=AXIS2_PLACEMENT_3D('',#58645,#44957,#44958); #36396=AXIS2_PLACEMENT_3D('',#58648,#44959,#44960); #36397=AXIS2_PLACEMENT_3D('',#58652,#44962,#44963); #36398=AXIS2_PLACEMENT_3D('',#58656,#44965,#44966); #36399=AXIS2_PLACEMENT_3D('',#58660,#44968,#44969); #36400=AXIS2_PLACEMENT_3D('',#58662,#44971,#44972); #36401=AXIS2_PLACEMENT_3D('',#58665,#44974,#44975); #36402=AXIS2_PLACEMENT_3D('',#58666,#44976,#44977); #36403=AXIS2_PLACEMENT_3D('',#58670,#44980,#44981); #36404=AXIS2_PLACEMENT_3D('',#58673,#44984,#44985); #36405=AXIS2_PLACEMENT_3D('',#58674,#44986,#44987); #36406=AXIS2_PLACEMENT_3D('',#58676,#44989,#44990); #36407=AXIS2_PLACEMENT_3D('',#58678,#44992,#44993); #36408=AXIS2_PLACEMENT_3D('',#58680,#44994,#44995); #36409=AXIS2_PLACEMENT_3D('',#58682,#44997,#44998); #36410=AXIS2_PLACEMENT_3D('',#58685,#45001,#45002); #36411=AXIS2_PLACEMENT_3D('',#58687,#45004,#45005); #36412=AXIS2_PLACEMENT_3D('',#58689,#45007,#45008); #36413=AXIS2_PLACEMENT_3D('',#58690,#45009,#45010); #36414=AXIS2_PLACEMENT_3D('',#58692,#45012,#45013); #36415=AXIS2_PLACEMENT_3D('',#58693,#45014,#45015); #36416=AXIS2_PLACEMENT_3D('',#58694,#45016,#45017); #36417=AXIS2_PLACEMENT_3D('',#58695,#45018,#45019); #36418=AXIS2_PLACEMENT_3D('',#58696,#45020,#45021); #36419=AXIS2_PLACEMENT_3D('',#58697,#45022,#45023); #36420=AXIS2_PLACEMENT_3D('',#58698,#45024,#45025); #36421=AXIS2_PLACEMENT_3D('',#58699,#45026,#45027); #36422=AXIS2_PLACEMENT_3D('',#58700,#45028,#45029); #36423=AXIS2_PLACEMENT_3D('',#58701,#45030,#45031); #36424=AXIS2_PLACEMENT_3D('',#58702,#45032,#45033); #36425=AXIS2_PLACEMENT_3D('',#58703,#45034,#45035); #36426=AXIS2_PLACEMENT_3D('',#58704,#45036,#45037); #36427=AXIS2_PLACEMENT_3D('',#58705,#45038,#45039); #36428=DIRECTION('axis',(0.,0.,1.)); #36429=DIRECTION('refdir',(1.,0.,0.)); #36430=DIRECTION('axis',(0.,0.,1.)); #36431=DIRECTION('refdir',(1.,0.,0.)); #36432=DIRECTION('axis',(0.,0.,1.)); #36433=DIRECTION('refdir',(1.,0.,0.)); #36434=DIRECTION('axis',(0.,0.,1.)); #36435=DIRECTION('refdir',(1.,0.,0.)); #36436=DIRECTION('axis',(0.,0.,1.)); #36437=DIRECTION('refdir',(1.,0.,0.)); #36438=DIRECTION('axis',(0.,0.,1.)); #36439=DIRECTION('refdir',(1.,0.,0.)); #36440=DIRECTION('axis',(0.,0.,1.)); #36441=DIRECTION('refdir',(1.,0.,0.)); #36442=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36443=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36444=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36445=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36446=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36447=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36448=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36449=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36450=DIRECTION('center_axis',(0.,0.,1.)); #36451=DIRECTION('ref_axis',(1.,2.22044604925E-16,0.)); #36452=DIRECTION('',(1.,2.22044604925E-16,0.)); #36453=DIRECTION('',(1.,2.22044604925E-16,0.)); #36454=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36455=DIRECTION('center_axis',(1.,2.22044604925E-16,1.044915787883E-15)); #36456=DIRECTION('ref_axis',(1.044915787883E-15,2.320179133003E-31,-1.)); #36457=DIRECTION('',(1.044915787883E-15,2.320179133003E-31,-1.)); #36458=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36459=DIRECTION('',(1.044915787883E-15,2.320179133003E-31,-1.)); #36460=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36461=DIRECTION('ref_axis',(0.,0.,1.)); #36462=DIRECTION('',(0.,0.,1.)); #36463=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36464=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36465=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36466=DIRECTION('',(0.,0.,1.)); #36467=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36468=DIRECTION('ref_axis',(0.,0.,-1.)); #36469=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36470=DIRECTION('',(0.,0.,1.)); #36471=DIRECTION('',(1.,2.22044604925E-16,0.)); #36472=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36473=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36474=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36475=DIRECTION('ref_axis',(0.,0.,1.)); #36476=DIRECTION('',(0.,0.,1.)); #36477=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36478=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36479=DIRECTION('',(1.,2.22044604925E-16,0.)); #36480=DIRECTION('',(0.,0.,1.)); #36481=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36482=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36483=DIRECTION('ref_axis',(0.,0.,-1.)); #36484=DIRECTION('',(0.,0.,1.)); #36485=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36486=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36487=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36488=DIRECTION('center_axis',(-0.987688340595198,0.,0.156434465039847)); #36489=DIRECTION('ref_axis',(0.156434465039847,0.,0.987688340595198)); #36490=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36491=DIRECTION('',(0.155958121626951,0.0779790608141543,0.984680826650512)); #36492=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36493=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36494=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36495=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36496=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36497=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36498=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36499=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36500=DIRECTION('',(0.155958121626951,-0.0779790608141543,0.984680826650512)); #36501=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36502=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36503=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36504=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36505=DIRECTION('ref_axis',(2.22044604925E-16,-1.,0.)); #36506=DIRECTION('',(0.,0.,1.)); #36507=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36508=DIRECTION('center_axis',(0.,0.,-1.)); #36509=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,0.)); #36510=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36511=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36512=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36513=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36514=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36515=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36516=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36517=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36518=DIRECTION('ref_axis',(0.,0.,1.)); #36519=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36520=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36521=DIRECTION('ref_axis',(0.,0.,-1.)); #36522=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36523=DIRECTION('center_axis',(0.,0.,-1.)); #36524=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,0.)); #36525=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36526=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36527=DIRECTION('ref_axis',(0.,0.,1.)); #36528=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36529=DIRECTION('center_axis',(0.,0.,1.)); #36530=DIRECTION('ref_axis',(1.,2.22044604925E-16,0.)); #36531=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36532=DIRECTION('ref_axis',(2.22044604925E-16,-1.,0.)); #36533=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36534=DIRECTION('',(0.,0.,1.)); #36535=DIRECTION('center_axis',(0.,0.,1.)); #36536=DIRECTION('ref_axis',(0.592513131497685,-0.805560791624572,0.)); #36537=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #36538=DIRECTION('',(1.,2.22044604925E-16,0.)); #36539=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #36540=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #36541=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36542=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #36543=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36544=DIRECTION('center_axis',(-0.697335374529794,-0.697335374529794,0.165670609520168)); #36545=DIRECTION('ref_axis',(0.231143032291625,0.,0.972919780158176)); #36546=DIRECTION('',(0.0779790608141543,0.155958121626951,0.984680826650512)); #36547=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #36548=DIRECTION('center_axis',(-0.697335374529794,0.697335374529794,0.165670609520168)); #36549=DIRECTION('ref_axis',(0.231143032291625,0.,0.972919780158176)); #36550=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #36551=DIRECTION('',(0.0779790608141543,-0.155958121626951,0.984680826650512)); #36552=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36553=DIRECTION('ref_axis',(2.22044604925E-16,-1.,0.)); #36554=DIRECTION('',(0.,0.,1.)); #36555=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36556=DIRECTION('',(0.,0.,1.)); #36557=DIRECTION('center_axis',(0.,0.,1.)); #36558=DIRECTION('ref_axis',(1.,2.22044604925E-16,0.)); #36559=DIRECTION('',(1.,2.22044604925E-16,0.)); #36560=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36561=DIRECTION('',(1.,2.22044604925E-16,0.)); #36562=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36563=DIRECTION('ref_axis',(2.22044604925E-16,-1.,0.)); #36564=DIRECTION('',(0.,0.,1.)); #36565=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36566=DIRECTION('',(0.,0.,1.)); #36567=DIRECTION('center_axis',(0.,0.,1.)); #36568=DIRECTION('ref_axis',(1.,2.22044604925E-16,0.)); #36569=DIRECTION('',(1.,2.22044604925E-16,0.)); #36570=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36571=DIRECTION('',(1.,2.22044604925E-16,0.)); #36572=DIRECTION('center_axis',(0.,0.,1.)); #36573=DIRECTION('ref_axis',(1.,2.22044604925E-16,0.)); #36574=DIRECTION('',(1.,2.22044604925E-16,0.)); #36575=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36576=DIRECTION('',(1.,2.22044604925E-16,0.)); #36577=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36578=DIRECTION('ref_axis',(2.22044604925E-16,-1.,0.)); #36579=DIRECTION('',(0.,0.,1.)); #36580=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36581=DIRECTION('',(0.,0.,1.)); #36582=DIRECTION('center_axis',(-0.707106781186548,-0.707106781186548,0.)); #36583=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #36584=DIRECTION('',(0.,0.,1.)); #36585=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #36586=DIRECTION('center_axis',(0.,0.,-1.)); #36587=DIRECTION('ref_axis',(-1.,0.,0.)); #36588=DIRECTION('',(-0.894427190999916,-0.447213595499958,0.)); #36589=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36590=DIRECTION('center_axis',(-0.987688340595199,0.,-0.156434465039847)); #36591=DIRECTION('ref_axis',(-0.156434465039847,0.,0.987688340595199)); #36592=DIRECTION('',(-0.15595812162695,-0.0779790608141543,0.984680826650512)); #36593=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36594=DIRECTION('',(-0.15595812162695,0.0779790608141543,0.984680826650512)); #36595=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36596=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36597=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36598=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36599=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36600=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36601=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36602=DIRECTION('center_axis',(0.,0.,-1.)); #36603=DIRECTION('ref_axis',(-1.,0.,0.)); #36604=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36605=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36606=DIRECTION('ref_axis',(0.,0.,1.)); #36607=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36608=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36609=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36610=DIRECTION('',(0.,0.,1.)); #36611=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36612=DIRECTION('ref_axis',(0.,0.,-1.)); #36613=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36614=DIRECTION('',(0.,0.,1.)); #36615=DIRECTION('',(1.,2.22044604925E-16,0.)); #36616=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36617=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36618=DIRECTION('',(1.044915787883E-15,2.320179133003E-31,-1.)); #36619=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36620=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36621=DIRECTION('center_axis',(0.,-0.987688340595198,0.156434465039847)); #36622=DIRECTION('ref_axis',(0.,-0.156434465039847,-0.987688340595198)); #36623=DIRECTION('',(-0.0779790608141543,0.155958121626951,0.984680826650512)); #36624=DIRECTION('',(1.,2.22044604925E-16,0.)); #36625=DIRECTION('center_axis',(0.,0.987688340595198,0.156434465039847)); #36626=DIRECTION('ref_axis',(0.,-0.156434465039847,0.987688340595198)); #36627=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36628=DIRECTION('',(-0.0779790608141543,-0.155958121626951,0.984680826650512)); #36629=DIRECTION('center_axis',(0.697335374529794,0.697335374529794,0.165670609520168)); #36630=DIRECTION('ref_axis',(0.231143032291625,0.,-0.972919780158176)); #36631=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #36632=DIRECTION('',(-0.155958121626951,-0.0779790608141543,0.984680826650512)); #36633=DIRECTION('center_axis',(0.987688340595198,0.,0.156434465039847)); #36634=DIRECTION('ref_axis',(0.156434465039847,0.,-0.987688340595198)); #36635=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36636=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36637=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36638=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36639=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36640=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36641=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36642=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36643=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36644=DIRECTION('',(-0.155958121626951,0.0779790608141543,0.984680826650512)); #36645=DIRECTION('center_axis',(0.697335374529794,-0.697335374529794,0.165670609520168)); #36646=DIRECTION('ref_axis',(0.231143032291625,0.,-0.972919780158176)); #36647=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #36648=DIRECTION('center_axis',(-0.707106781186548,0.707106781186548,0.)); #36649=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #36650=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #36651=DIRECTION('',(0.,0.,1.)); #36652=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36653=DIRECTION('ref_axis',(0.,0.,1.)); #36654=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36655=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36656=DIRECTION('',(1.044915787883E-15,2.320179133003E-31,-1.)); #36657=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36658=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36659=DIRECTION('',(1.,2.22044604925E-16,0.)); #36660=DIRECTION('',(0.,0.,1.)); #36661=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36662=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36663=DIRECTION('ref_axis',(0.,0.,-1.)); #36664=DIRECTION('',(0.,0.,1.)); #36665=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36666=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36667=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36668=DIRECTION('center_axis',(0.,0.,-1.)); #36669=DIRECTION('ref_axis',(-1.,0.,0.)); #36670=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36671=DIRECTION('',(-0.894427190999916,0.447213595499958,0.)); #36672=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36673=DIRECTION('ref_axis',(0.,0.,1.)); #36674=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36675=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36676=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36677=DIRECTION('',(0.,0.,1.)); #36678=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36679=DIRECTION('ref_axis',(0.,0.,-1.)); #36680=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36681=DIRECTION('',(0.,0.,1.)); #36682=DIRECTION('',(1.,2.22044604925E-16,0.)); #36683=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36684=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36685=DIRECTION('',(1.044915787883E-15,2.320179133003E-31,-1.)); #36686=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36687=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36688=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36689=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36690=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36691=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36692=DIRECTION('ref_axis',(0.,0.,1.)); #36693=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36694=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36695=DIRECTION('',(1.044915787883E-15,2.320179133003E-31,-1.)); #36696=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36697=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36698=DIRECTION('',(1.,2.22044604925E-16,0.)); #36699=DIRECTION('',(0.,0.,1.)); #36700=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36701=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36702=DIRECTION('ref_axis',(0.,0.,-1.)); #36703=DIRECTION('',(0.,0.,1.)); #36704=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36705=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36706=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36707=DIRECTION('center_axis',(0.,0.,-1.)); #36708=DIRECTION('ref_axis',(-1.,0.,0.)); #36709=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36710=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36711=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36712=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36713=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36714=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36715=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36716=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36717=DIRECTION('ref_axis',(0.,0.,1.)); #36718=DIRECTION('',(1.044915787883E-15,2.320179133003E-31,-1.)); #36719=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36720=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36721=DIRECTION('',(1.,2.22044604925E-16,0.)); #36722=DIRECTION('',(0.,0.,1.)); #36723=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36724=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36725=DIRECTION('ref_axis',(0.,0.,-1.)); #36726=DIRECTION('',(0.,0.,1.)); #36727=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36728=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36729=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36730=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36731=DIRECTION('ref_axis',(0.,0.,1.)); #36732=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36733=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36734=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36735=DIRECTION('',(0.,0.,1.)); #36736=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36737=DIRECTION('ref_axis',(0.,0.,-1.)); #36738=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36739=DIRECTION('',(0.,0.,1.)); #36740=DIRECTION('',(1.,2.22044604925E-16,0.)); #36741=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36742=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36743=DIRECTION('',(1.044915787883E-15,2.320179133003E-31,-1.)); #36744=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36745=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36746=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36747=DIRECTION('ref_axis',(4.440892098501E-15,9.86076131526209E-31,1.)); #36748=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36749=DIRECTION('center_axis',(0.,0.,-1.)); #36750=DIRECTION('ref_axis',(-1.,0.,0.)); #36751=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36752=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36753=DIRECTION('center_axis',(0.,0.,-1.)); #36754=DIRECTION('ref_axis',(-1.,0.,0.)); #36755=DIRECTION('',(-0.447213595499955,-0.894427190999917,0.)); #36756=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #36757=DIRECTION('center_axis',(2.22044604925E-16,-1.,0.)); #36758=DIRECTION('ref_axis',(1.,2.22044604925E-16,0.)); #36759=DIRECTION('',(0.,0.,1.)); #36760=DIRECTION('',(1.,2.22044604925E-16,0.)); #36761=DIRECTION('center_axis',(-0.697335374529795,-0.697335374529793,-0.165670609520168)); #36762=DIRECTION('ref_axis',(-0.231143032291625,0.,0.972919780158176)); #36763=DIRECTION('',(-0.0779790608141547,-0.155958121626951,0.984680826650512)); #36764=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #36765=DIRECTION('center_axis',(0.,0.,-1.)); #36766=DIRECTION('ref_axis',(0.596575959062282,-0.802556617983379,0.)); #36767=DIRECTION('',(1.,2.22044604925E-16,0.)); #36768=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #36769=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36770=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #36771=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36772=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #36773=DIRECTION('center_axis',(0.,0.,1.)); #36774=DIRECTION('ref_axis',(2.22044604925E-16,-1.,0.)); #36775=DIRECTION('center_axis',(-0.697335374529795,0.697335374529793,-0.165670609520168)); #36776=DIRECTION('ref_axis',(-0.231143032291625,0.,0.972919780158176)); #36777=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #36778=DIRECTION('',(-0.0779790608141547,0.155958121626951,0.984680826650512)); #36779=DIRECTION('center_axis',(0.,0.,-1.)); #36780=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,0.)); #36781=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36782=DIRECTION('center_axis',(0.,0.,-1.)); #36783=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,0.)); #36784=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36785=DIRECTION('center_axis',(0.,0.,-1.)); #36786=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,0.)); #36787=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36788=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36789=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36790=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36791=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36792=DIRECTION('ref_axis',(0.,0.,1.)); #36793=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36794=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36795=DIRECTION('ref_axis',(0.,0.,-1.)); #36796=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36797=DIRECTION('center_axis',(0.,0.,-1.)); #36798=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,0.)); #36799=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36800=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36801=DIRECTION('ref_axis',(0.,0.,1.)); #36802=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36803=DIRECTION('center_axis',(0.,0.,1.)); #36804=DIRECTION('ref_axis',(1.,2.22044604925E-16,0.)); #36805=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36806=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36807=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36808=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36809=DIRECTION('center_axis',(1.,2.22044604925E-16,1.044915787883E-15)); #36810=DIRECTION('ref_axis',(1.044915787883E-15,2.320179133003E-31,-1.)); #36811=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36812=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,0.)); #36813=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36814=DIRECTION('',(0.,0.,1.)); #36815=DIRECTION('center_axis',(0.707106781186548,0.707106781186548,0.)); #36816=DIRECTION('ref_axis',(-0.707106781186548,0.707106781186548,0.)); #36817=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #36818=DIRECTION('',(0.,0.,1.)); #36819=DIRECTION('center_axis',(1.,2.22044604925E-16,0.)); #36820=DIRECTION('ref_axis',(-2.22044604925E-16,1.,0.)); #36821=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36822=DIRECTION('',(0.,0.,1.)); #36823=DIRECTION('center_axis',(1.,2.22044604925E-16,0.)); #36824=DIRECTION('ref_axis',(-2.22044604925E-16,1.,0.)); #36825=DIRECTION('',(0.,0.,1.)); #36826=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36827=DIRECTION('',(0.,0.,1.)); #36828=DIRECTION('center_axis',(0.,0.,1.)); #36829=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,0.)); #36830=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #36831=DIRECTION('',(-9.95799250103E-17,1.,0.)); #36832=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #36833=DIRECTION('center_axis',(0.,0.,1.)); #36834=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,0.)); #36835=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #36836=DIRECTION('',(-9.95799250103E-17,1.,0.)); #36837=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #36838=DIRECTION('center_axis',(1.,2.22044604925E-16,0.)); #36839=DIRECTION('ref_axis',(-2.22044604925E-16,1.,0.)); #36840=DIRECTION('',(0.,0.,1.)); #36841=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36842=DIRECTION('',(0.,0.,1.)); #36843=DIRECTION('center_axis',(1.,2.22044604925E-16,0.)); #36844=DIRECTION('ref_axis',(-2.22044604925E-16,1.,0.)); #36845=DIRECTION('',(0.,0.,1.)); #36846=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36847=DIRECTION('',(0.,0.,1.)); #36848=DIRECTION('center_axis',(0.,0.,1.)); #36849=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,0.)); #36850=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #36851=DIRECTION('',(-9.95799250103E-17,1.,0.)); #36852=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #36853=DIRECTION('center_axis',(0.,0.,1.)); #36854=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,0.)); #36855=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #36856=DIRECTION('',(-9.95799250103E-17,1.,0.)); #36857=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #36858=DIRECTION('center_axis',(1.,2.22044604925E-16,0.)); #36859=DIRECTION('ref_axis',(-2.22044604925E-16,1.,0.)); #36860=DIRECTION('',(0.,0.,1.)); #36861=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36862=DIRECTION('',(0.,0.,1.)); #36863=DIRECTION('center_axis',(0.707106781186548,-0.707106781186548,0.)); #36864=DIRECTION('ref_axis',(0.707106781186548,0.707106781186548,0.)); #36865=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #36866=DIRECTION('center_axis',(0.,0.,-1.)); #36867=DIRECTION('ref_axis',(-1.,0.,0.)); #36868=DIRECTION('',(-0.447213595499955,0.894427190999917,0.)); #36869=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36870=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36871=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36872=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36873=DIRECTION('ref_axis',(0.,0.,1.)); #36874=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36875=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36876=DIRECTION('ref_axis',(0.,0.,-1.)); #36877=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36878=DIRECTION('center_axis',(0.,0.,-1.)); #36879=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,0.)); #36880=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36881=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36882=DIRECTION('ref_axis',(0.,0.,1.)); #36883=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36884=DIRECTION('center_axis',(0.,0.,1.)); #36885=DIRECTION('ref_axis',(1.,2.22044604925E-16,0.)); #36886=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36887=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36888=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36889=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36890=DIRECTION('center_axis',(1.,2.22044604925E-16,1.044915787883E-15)); #36891=DIRECTION('ref_axis',(1.044915787883E-15,2.320179133003E-31,-1.)); #36892=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36893=DIRECTION('ref_axis',(1.,2.22044604925E-16,3.700743415417E-16)); #36894=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36895=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36896=DIRECTION('ref_axis',(0.,0.,1.)); #36897=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36898=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36899=DIRECTION('ref_axis',(0.,0.,-1.)); #36900=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36901=DIRECTION('center_axis',(0.,0.,-1.)); #36902=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,0.)); #36903=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36904=DIRECTION('center_axis',(-1.,-2.22044604925E-16,0.)); #36905=DIRECTION('ref_axis',(0.,0.,1.)); #36906=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36907=DIRECTION('center_axis',(0.,0.,1.)); #36908=DIRECTION('ref_axis',(1.,2.22044604925E-16,0.)); #36909=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36910=DIRECTION('center_axis',(-2.22044604925E-16,1.,0.)); #36911=DIRECTION('ref_axis',(-1.,-2.22044604925E-16,3.515706244646E-15)); #36912=DIRECTION('',(2.22044604925E-16,-1.,0.)); #36913=DIRECTION('center_axis',(1.,2.22044604925E-16,1.044915787883E-15)); #36914=DIRECTION('ref_axis',(1.044915787883E-15,2.320179133003E-31,-1.)); #36915=DIRECTION('center_axis',(0.,0.,-1.)); #36916=DIRECTION('ref_axis',(-1.,0.,0.)); #36917=DIRECTION('',(0.447213595499955,-0.894427190999917,0.)); #36918=DIRECTION('',(1.,2.22044604925E-16,0.)); #36919=DIRECTION('center_axis',(0.,-0.987688340595198,-0.156434465039847)); #36920=DIRECTION('ref_axis',(0.,0.156434465039847,-0.987688340595198)); #36921=DIRECTION('',(0.0779790608141547,-0.155958121626951,0.984680826650512)); #36922=DIRECTION('center_axis',(0.697335374529795,-0.697335374529793,-0.165670609520168)); #36923=DIRECTION('ref_axis',(-0.231143032291625,0.,-0.972919780158176)); #36924=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #36925=DIRECTION('',(0.15595812162695,-0.0779790608141543,0.984680826650512)); #36926=DIRECTION('center_axis',(0.987688340595199,0.,-0.156434465039847)); #36927=DIRECTION('ref_axis',(-0.156434465039847,0.,-0.987688340595199)); #36928=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36929=DIRECTION('',(0.15595812162695,0.0779790608141543,0.984680826650512)); #36930=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36931=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36932=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36933=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36934=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36935=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36936=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36937=DIRECTION('',(-2.22044604925E-16,1.,0.)); #36938=DIRECTION('center_axis',(0.697335374529795,0.697335374529793,-0.165670609520168)); #36939=DIRECTION('ref_axis',(-0.231143032291625,0.,-0.972919780158176)); #36940=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #36941=DIRECTION('',(0.0779790608141547,0.155958121626951,0.984680826650512)); #36942=DIRECTION('center_axis',(0.,0.987688340595198,-0.156434465039847)); #36943=DIRECTION('ref_axis',(0.,0.156434465039847,0.987688340595198)); #36944=DIRECTION('',(-1.,-2.22044604925E-16,0.)); #36945=DIRECTION('center_axis',(0.,0.,-1.)); #36946=DIRECTION('ref_axis',(2.22044604925E-16,-1.,0.)); #36947=DIRECTION('',(0.,0.,-1.)); #36948=DIRECTION('center_axis',(0.,0.,1.)); #36949=DIRECTION('ref_axis',(2.22044604925E-16,-1.,0.)); #36950=DIRECTION('center_axis',(0.,0.,-1.)); #36951=DIRECTION('ref_axis',(-1.,0.,0.)); #36952=DIRECTION('',(0.447213595499955,0.894427190999917,0.)); #36953=DIRECTION('center_axis',(0.,0.,-1.)); #36954=DIRECTION('ref_axis',(-1.,0.,0.)); #36955=DIRECTION('',(0.894427190999916,0.447213595499958,0.)); #36956=DIRECTION('center_axis',(0.,0.,-1.)); #36957=DIRECTION('ref_axis',(-1.,0.,0.)); #36958=DIRECTION('',(1.,9.95799250103E-17,0.)); #36959=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #36960=DIRECTION('ref_axis',(0.,0.,1.)); #36961=DIRECTION('',(1.,9.95799250103E-17,0.)); #36962=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #36963=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #36964=DIRECTION('',(0.,0.,1.)); #36965=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #36966=DIRECTION('ref_axis',(0.,0.,-1.)); #36967=DIRECTION('',(1.,9.95799250103E-17,0.)); #36968=DIRECTION('',(0.,0.,1.)); #36969=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #36970=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #36971=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #36972=DIRECTION('',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #36973=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #36974=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #36975=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #36976=DIRECTION('ref_axis',(0.,0.,1.)); #36977=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #36978=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #36979=DIRECTION('',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #36980=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #36981=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #36982=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #36983=DIRECTION('',(0.,0.,1.)); #36984=DIRECTION('',(1.,9.95799250103E-17,0.)); #36985=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #36986=DIRECTION('ref_axis',(0.,0.,-1.)); #36987=DIRECTION('',(0.,0.,1.)); #36988=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #36989=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #36990=DIRECTION('',(1.,9.95799250103E-17,0.)); #36991=DIRECTION('center_axis',(0.,0.,-1.)); #36992=DIRECTION('ref_axis',(-1.,0.,0.)); #36993=DIRECTION('',(1.,9.95799250103E-17,0.)); #36994=DIRECTION('',(0.894427190999916,-0.447213595499958,0.)); #36995=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #36996=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #36997=DIRECTION('',(-9.95799250103E-17,1.,0.)); #36998=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #36999=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #37000=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37001=DIRECTION('ref_axis',(0.,0.,1.)); #37002=DIRECTION('',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #37003=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37004=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #37005=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #37006=DIRECTION('',(0.,0.,1.)); #37007=DIRECTION('',(1.,9.95799250103E-17,0.)); #37008=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37009=DIRECTION('ref_axis',(0.,0.,-1.)); #37010=DIRECTION('',(0.,0.,1.)); #37011=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37012=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #37013=DIRECTION('',(1.,9.95799250103E-17,0.)); #37014=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37015=DIRECTION('ref_axis',(0.,0.,1.)); #37016=DIRECTION('',(1.,9.95799250103E-17,0.)); #37017=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37018=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #37019=DIRECTION('',(0.,0.,1.)); #37020=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37021=DIRECTION('ref_axis',(0.,0.,-1.)); #37022=DIRECTION('',(1.,9.95799250103E-17,0.)); #37023=DIRECTION('',(0.,0.,1.)); #37024=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #37025=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37026=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #37027=DIRECTION('',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #37028=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37029=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #37030=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37031=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #37032=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37033=DIRECTION('center_axis',(0.,0.,-1.)); #37034=DIRECTION('ref_axis',(-1.,0.,0.)); #37035=DIRECTION('',(1.,9.95799250103E-17,0.)); #37036=DIRECTION('',(1.,9.95799250103E-17,0.)); #37037=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37038=DIRECTION('ref_axis',(0.,0.,1.)); #37039=DIRECTION('',(1.,9.95799250103E-17,0.)); #37040=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37041=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #37042=DIRECTION('',(0.,0.,1.)); #37043=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37044=DIRECTION('ref_axis',(0.,0.,-1.)); #37045=DIRECTION('',(1.,9.95799250103E-17,0.)); #37046=DIRECTION('',(0.,0.,1.)); #37047=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #37048=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37049=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #37050=DIRECTION('',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #37051=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37052=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #37053=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37054=DIRECTION('ref_axis',(0.,0.,1.)); #37055=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37056=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #37057=DIRECTION('',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #37058=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37059=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #37060=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #37061=DIRECTION('',(0.,0.,1.)); #37062=DIRECTION('',(1.,9.95799250103E-17,0.)); #37063=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37064=DIRECTION('ref_axis',(0.,0.,-1.)); #37065=DIRECTION('',(0.,0.,1.)); #37066=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37067=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #37068=DIRECTION('',(1.,9.95799250103E-17,0.)); #37069=DIRECTION('center_axis',(0.,0.,-1.)); #37070=DIRECTION('ref_axis',(-1.,0.,0.)); #37071=DIRECTION('',(1.,9.95799250103E-17,0.)); #37072=DIRECTION('',(1.,9.95799250103E-17,0.)); #37073=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37074=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #37075=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37076=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37077=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #37078=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37079=DIRECTION('ref_axis',(0.,0.,1.)); #37080=DIRECTION('',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #37081=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37082=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #37083=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #37084=DIRECTION('',(0.,0.,1.)); #37085=DIRECTION('',(1.,9.95799250103E-17,0.)); #37086=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37087=DIRECTION('ref_axis',(0.,0.,-1.)); #37088=DIRECTION('',(0.,0.,1.)); #37089=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37090=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #37091=DIRECTION('',(1.,9.95799250103E-17,0.)); #37092=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37093=DIRECTION('ref_axis',(0.,0.,1.)); #37094=DIRECTION('',(1.,9.95799250103E-17,0.)); #37095=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37096=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #37097=DIRECTION('',(0.,0.,1.)); #37098=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37099=DIRECTION('ref_axis',(0.,0.,-1.)); #37100=DIRECTION('',(1.,9.95799250103E-17,0.)); #37101=DIRECTION('',(0.,0.,1.)); #37102=DIRECTION('',(-1.,-9.95799250103E-17,0.)); #37103=DIRECTION('center_axis',(-9.95799250103E-17,1.,0.)); #37104=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #37105=DIRECTION('',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #37106=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37107=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #37108=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37109=DIRECTION('ref_axis',(-4.440892098501E-15,-4.42223702147563E-31, 1.)); #37110=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37111=DIRECTION('center_axis',(0.,0.,-1.)); #37112=DIRECTION('ref_axis',(-1.,0.,0.)); #37113=DIRECTION('',(1.,9.95799250103E-17,0.)); #37114=DIRECTION('',(1.,9.95799250103E-17,0.)); #37115=DIRECTION('center_axis',(0.,0.,-1.)); #37116=DIRECTION('ref_axis',(-1.,0.,0.)); #37117=DIRECTION('center_axis',(0.,0.,-1.)); #37118=DIRECTION('ref_axis',(1.,9.95799250103E-17,0.)); #37119=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37120=DIRECTION('center_axis',(0.,0.,-1.)); #37121=DIRECTION('ref_axis',(1.,9.95799250103E-17,0.)); #37122=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37123=DIRECTION('center_axis',(0.,0.,-1.)); #37124=DIRECTION('ref_axis',(1.,9.95799250103E-17,0.)); #37125=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37126=DIRECTION('center_axis',(0.,0.,-1.)); #37127=DIRECTION('ref_axis',(1.,9.95799250103E-17,0.)); #37128=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37129=DIRECTION('center_axis',(0.,0.,1.)); #37130=DIRECTION('ref_axis',(2.22044604925E-16,-1.,0.)); #37131=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37132=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #37133=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37134=DIRECTION('center_axis',(1.,9.95799250103E-17,0.)); #37135=DIRECTION('ref_axis',(0.,0.,1.)); #37136=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37137=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37138=DIRECTION('ref_axis',(0.,0.,-1.)); #37139=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37140=DIRECTION('center_axis',(0.,0.,-1.)); #37141=DIRECTION('ref_axis',(1.,9.95799250103E-17,0.)); #37142=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37143=DIRECTION('center_axis',(1.,9.95799250103E-17,0.)); #37144=DIRECTION('ref_axis',(0.,0.,1.)); #37145=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37146=DIRECTION('center_axis',(0.,0.,1.)); #37147=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,0.)); #37148=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37149=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37150=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #37151=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37152=DIRECTION('center_axis',(-1.,-9.95799250103E-17,1.044915787883E-15)); #37153=DIRECTION('ref_axis',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #37154=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37155=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #37156=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37157=DIRECTION('center_axis',(1.,9.95799250103E-17,0.)); #37158=DIRECTION('ref_axis',(0.,0.,1.)); #37159=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37160=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37161=DIRECTION('ref_axis',(0.,0.,-1.)); #37162=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37163=DIRECTION('center_axis',(0.,0.,-1.)); #37164=DIRECTION('ref_axis',(1.,9.95799250103E-17,0.)); #37165=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37166=DIRECTION('center_axis',(1.,9.95799250103E-17,0.)); #37167=DIRECTION('ref_axis',(0.,0.,1.)); #37168=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37169=DIRECTION('center_axis',(0.,0.,1.)); #37170=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,0.)); #37171=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37172=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37173=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #37174=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37175=DIRECTION('center_axis',(-1.,-9.95799250103E-17,1.044915787883E-15)); #37176=DIRECTION('ref_axis',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #37177=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37178=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #37179=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37180=DIRECTION('center_axis',(1.,9.95799250103E-17,0.)); #37181=DIRECTION('ref_axis',(0.,0.,1.)); #37182=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37183=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37184=DIRECTION('ref_axis',(0.,0.,-1.)); #37185=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37186=DIRECTION('center_axis',(0.,0.,-1.)); #37187=DIRECTION('ref_axis',(1.,9.95799250103E-17,0.)); #37188=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37189=DIRECTION('center_axis',(1.,9.95799250103E-17,0.)); #37190=DIRECTION('ref_axis',(0.,0.,1.)); #37191=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37192=DIRECTION('center_axis',(0.,0.,1.)); #37193=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,0.)); #37194=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37195=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37196=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #37197=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37198=DIRECTION('center_axis',(-1.,-9.95799250103E-17,1.044915787883E-15)); #37199=DIRECTION('ref_axis',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #37200=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37201=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,3.700743415417E-16)); #37202=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37203=DIRECTION('center_axis',(1.,9.95799250103E-17,0.)); #37204=DIRECTION('ref_axis',(0.,0.,1.)); #37205=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37206=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37207=DIRECTION('ref_axis',(0.,0.,-1.)); #37208=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37209=DIRECTION('center_axis',(0.,0.,-1.)); #37210=DIRECTION('ref_axis',(1.,9.95799250103E-17,0.)); #37211=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37212=DIRECTION('center_axis',(1.,9.95799250103E-17,0.)); #37213=DIRECTION('ref_axis',(0.,0.,1.)); #37214=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37215=DIRECTION('center_axis',(0.,0.,1.)); #37216=DIRECTION('ref_axis',(-1.,-9.95799250103E-17,0.)); #37217=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37218=DIRECTION('center_axis',(9.95799250103E-17,-1.,0.)); #37219=DIRECTION('ref_axis',(1.,9.95799250103E-17,3.515706244646E-15)); #37220=DIRECTION('',(-9.95799250103E-17,1.,0.)); #37221=DIRECTION('center_axis',(-1.,-9.95799250103E-17,1.044915787883E-15)); #37222=DIRECTION('ref_axis',(-1.044915787883E-15,-1.040526357994E-31,-1.)); #37223=DIRECTION('',(0.,0.,1.)); #37224=DIRECTION('',(1.,0.,0.)); #37225=DIRECTION('axis',(0.,0.,1.)); #37226=DIRECTION('refdir',(1.,0.,0.)); #37227=DIRECTION('center_axis',(0.,-1.,0.)); #37228=DIRECTION('ref_axis',(-1.,0.,0.)); #37229=DIRECTION('',(0.,0.,1.)); #37230=DIRECTION('',(-1.,0.,0.)); #37231=DIRECTION('',(0.,0.,1.)); #37232=DIRECTION('',(-1.,0.,0.)); #37233=DIRECTION('center_axis',(1.,0.,0.)); #37234=DIRECTION('ref_axis',(0.,-1.,0.)); #37235=DIRECTION('',(0.,0.,1.)); #37236=DIRECTION('',(0.,-1.,0.)); #37237=DIRECTION('',(0.,-1.,0.)); #37238=DIRECTION('center_axis',(-1.,0.,0.)); #37239=DIRECTION('ref_axis',(0.,1.,0.)); #37240=DIRECTION('',(0.,1.,0.)); #37241=DIRECTION('',(0.,0.,1.)); #37242=DIRECTION('',(0.,1.,0.)); #37243=DIRECTION('center_axis',(0.,0.,-1.)); #37244=DIRECTION('ref_axis',(-1.,0.,0.)); #37245=DIRECTION('',(1.,0.,0.)); #37246=DIRECTION('center_axis',(0.,0.,1.)); #37247=DIRECTION('ref_axis',(1.,0.,0.)); #37248=DIRECTION('center_axis',(0.,0.,1.)); #37249=DIRECTION('ref_axis',(1.,0.,0.)); #37250=DIRECTION('center_axis',(0.,0.,1.)); #37251=DIRECTION('ref_axis',(1.,0.,0.)); #37252=DIRECTION('center_axis',(0.,0.,1.)); #37253=DIRECTION('ref_axis',(1.,0.,0.)); #37254=DIRECTION('center_axis',(0.,0.,1.)); #37255=DIRECTION('ref_axis',(1.,0.,0.)); #37256=DIRECTION('center_axis',(0.,0.,1.)); #37257=DIRECTION('ref_axis',(1.,0.,0.)); #37258=DIRECTION('center_axis',(0.,0.,1.)); #37259=DIRECTION('ref_axis',(1.,0.,0.)); #37260=DIRECTION('center_axis',(0.,0.,1.)); #37261=DIRECTION('ref_axis',(1.,0.,0.)); #37262=DIRECTION('center_axis',(0.,0.,1.)); #37263=DIRECTION('ref_axis',(1.,0.,0.)); #37264=DIRECTION('center_axis',(0.,0.,1.)); #37265=DIRECTION('ref_axis',(1.,0.,0.)); #37266=DIRECTION('center_axis',(0.,0.,1.)); #37267=DIRECTION('ref_axis',(1.,0.,0.)); #37268=DIRECTION('center_axis',(0.,0.,1.)); #37269=DIRECTION('ref_axis',(1.,0.,0.)); #37270=DIRECTION('center_axis',(0.,0.,1.)); #37271=DIRECTION('ref_axis',(1.,0.,0.)); #37272=DIRECTION('center_axis',(0.,0.,1.)); #37273=DIRECTION('ref_axis',(1.,0.,0.)); #37274=DIRECTION('center_axis',(0.,0.,1.)); #37275=DIRECTION('ref_axis',(1.,0.,0.)); #37276=DIRECTION('center_axis',(0.,0.,1.)); #37277=DIRECTION('ref_axis',(1.,0.,0.)); #37278=DIRECTION('center_axis',(0.,0.,1.)); #37279=DIRECTION('ref_axis',(1.,0.,0.)); #37280=DIRECTION('center_axis',(0.,0.,1.)); #37281=DIRECTION('ref_axis',(1.,0.,0.)); #37282=DIRECTION('center_axis',(0.,0.,1.)); #37283=DIRECTION('ref_axis',(1.,0.,0.)); #37284=DIRECTION('center_axis',(0.,0.,1.)); #37285=DIRECTION('ref_axis',(1.,0.,0.)); #37286=DIRECTION('center_axis',(0.,0.,1.)); #37287=DIRECTION('ref_axis',(1.,0.,0.)); #37288=DIRECTION('center_axis',(0.,0.,1.)); #37289=DIRECTION('ref_axis',(1.,0.,0.)); #37290=DIRECTION('center_axis',(0.,0.,1.)); #37291=DIRECTION('ref_axis',(1.,0.,0.)); #37292=DIRECTION('center_axis',(0.,0.,1.)); #37293=DIRECTION('ref_axis',(1.,0.,0.)); #37294=DIRECTION('center_axis',(0.,0.,1.)); #37295=DIRECTION('ref_axis',(1.,0.,0.)); #37296=DIRECTION('center_axis',(0.,0.,1.)); #37297=DIRECTION('ref_axis',(1.,0.,0.)); #37298=DIRECTION('center_axis',(0.,0.,1.)); #37299=DIRECTION('ref_axis',(1.,0.,0.)); #37300=DIRECTION('center_axis',(0.,0.,1.)); #37301=DIRECTION('ref_axis',(1.,0.,0.)); #37302=DIRECTION('center_axis',(0.,0.,1.)); #37303=DIRECTION('ref_axis',(1.,0.,0.)); #37304=DIRECTION('center_axis',(0.,0.,-1.)); #37305=DIRECTION('ref_axis',(-1.,0.,0.)); #37306=DIRECTION('',(1.,0.,0.)); #37307=DIRECTION('center_axis',(0.,0.,1.)); #37308=DIRECTION('ref_axis',(1.,0.,0.)); #37309=DIRECTION('center_axis',(0.,0.,1.)); #37310=DIRECTION('ref_axis',(1.,0.,0.)); #37311=DIRECTION('center_axis',(0.,0.,1.)); #37312=DIRECTION('ref_axis',(1.,0.,0.)); #37313=DIRECTION('center_axis',(0.,0.,1.)); #37314=DIRECTION('ref_axis',(1.,0.,0.)); #37315=DIRECTION('center_axis',(0.,0.,1.)); #37316=DIRECTION('ref_axis',(1.,0.,0.)); #37317=DIRECTION('center_axis',(0.,0.,1.)); #37318=DIRECTION('ref_axis',(1.,0.,0.)); #37319=DIRECTION('center_axis',(0.,0.,1.)); #37320=DIRECTION('ref_axis',(1.,0.,0.)); #37321=DIRECTION('center_axis',(0.,0.,1.)); #37322=DIRECTION('ref_axis',(1.,0.,0.)); #37323=DIRECTION('center_axis',(0.,0.,1.)); #37324=DIRECTION('ref_axis',(1.,0.,0.)); #37325=DIRECTION('center_axis',(0.,0.,1.)); #37326=DIRECTION('ref_axis',(1.,0.,0.)); #37327=DIRECTION('center_axis',(0.,0.,1.)); #37328=DIRECTION('ref_axis',(1.,0.,0.)); #37329=DIRECTION('center_axis',(0.,0.,1.)); #37330=DIRECTION('ref_axis',(1.,0.,0.)); #37331=DIRECTION('center_axis',(0.,0.,1.)); #37332=DIRECTION('ref_axis',(1.,0.,0.)); #37333=DIRECTION('center_axis',(0.,0.,1.)); #37334=DIRECTION('ref_axis',(1.,0.,0.)); #37335=DIRECTION('center_axis',(0.,0.,1.)); #37336=DIRECTION('ref_axis',(1.,0.,0.)); #37337=DIRECTION('center_axis',(0.,0.,1.)); #37338=DIRECTION('ref_axis',(1.,0.,0.)); #37339=DIRECTION('center_axis',(0.,0.,1.)); #37340=DIRECTION('ref_axis',(1.,0.,0.)); #37341=DIRECTION('center_axis',(0.,0.,1.)); #37342=DIRECTION('ref_axis',(1.,0.,0.)); #37343=DIRECTION('center_axis',(0.,0.,1.)); #37344=DIRECTION('ref_axis',(1.,0.,0.)); #37345=DIRECTION('center_axis',(0.,0.,1.)); #37346=DIRECTION('ref_axis',(1.,0.,0.)); #37347=DIRECTION('center_axis',(0.,0.,1.)); #37348=DIRECTION('ref_axis',(1.,0.,0.)); #37349=DIRECTION('center_axis',(0.,0.,1.)); #37350=DIRECTION('ref_axis',(1.,0.,0.)); #37351=DIRECTION('center_axis',(0.,0.,1.)); #37352=DIRECTION('ref_axis',(1.,0.,0.)); #37353=DIRECTION('center_axis',(0.,0.,1.)); #37354=DIRECTION('ref_axis',(1.,0.,0.)); #37355=DIRECTION('center_axis',(0.,0.,1.)); #37356=DIRECTION('ref_axis',(1.,0.,0.)); #37357=DIRECTION('center_axis',(0.,0.,1.)); #37358=DIRECTION('ref_axis',(1.,0.,0.)); #37359=DIRECTION('center_axis',(0.,0.,1.)); #37360=DIRECTION('ref_axis',(1.,0.,0.)); #37361=DIRECTION('center_axis',(0.,0.,1.)); #37362=DIRECTION('ref_axis',(1.,0.,0.)); #37363=DIRECTION('center_axis',(0.,0.,1.)); #37364=DIRECTION('ref_axis',(1.,0.,0.)); #37365=DIRECTION('center_axis',(0.,1.,0.)); #37366=DIRECTION('ref_axis',(1.,0.,0.)); #37367=DIRECTION('center_axis',(0.,0.,1.)); #37368=DIRECTION('ref_axis',(1.,0.,0.)); #37369=DIRECTION('',(0.,0.,1.)); #37370=DIRECTION('center_axis',(0.,0.,1.)); #37371=DIRECTION('ref_axis',(1.,0.,0.)); #37372=DIRECTION('',(0.,0.,1.)); #37373=DIRECTION('center_axis',(0.,0.,1.)); #37374=DIRECTION('ref_axis',(1.,0.,0.)); #37375=DIRECTION('',(0.,0.,1.)); #37376=DIRECTION('center_axis',(0.,0.,1.)); #37377=DIRECTION('ref_axis',(1.,0.,0.)); #37378=DIRECTION('',(0.,0.,1.)); #37379=DIRECTION('center_axis',(0.,0.,1.)); #37380=DIRECTION('ref_axis',(1.,0.,0.)); #37381=DIRECTION('',(0.,0.,1.)); #37382=DIRECTION('center_axis',(0.,0.,1.)); #37383=DIRECTION('ref_axis',(1.,0.,0.)); #37384=DIRECTION('',(0.,0.,1.)); #37385=DIRECTION('center_axis',(0.,0.,1.)); #37386=DIRECTION('ref_axis',(1.,0.,0.)); #37387=DIRECTION('',(0.,0.,1.)); #37388=DIRECTION('center_axis',(0.,0.,1.)); #37389=DIRECTION('ref_axis',(1.,0.,0.)); #37390=DIRECTION('',(0.,0.,1.)); #37391=DIRECTION('center_axis',(0.,0.,1.)); #37392=DIRECTION('ref_axis',(1.,0.,0.)); #37393=DIRECTION('',(0.,0.,1.)); #37394=DIRECTION('center_axis',(0.,0.,1.)); #37395=DIRECTION('ref_axis',(1.,0.,0.)); #37396=DIRECTION('',(0.,0.,1.)); #37397=DIRECTION('center_axis',(0.,0.,1.)); #37398=DIRECTION('ref_axis',(1.,0.,0.)); #37399=DIRECTION('',(0.,0.,1.)); #37400=DIRECTION('center_axis',(0.,0.,1.)); #37401=DIRECTION('ref_axis',(1.,0.,0.)); #37402=DIRECTION('',(0.,0.,1.)); #37403=DIRECTION('center_axis',(0.,0.,1.)); #37404=DIRECTION('ref_axis',(1.,0.,0.)); #37405=DIRECTION('',(0.,0.,1.)); #37406=DIRECTION('center_axis',(0.,0.,1.)); #37407=DIRECTION('ref_axis',(1.,0.,0.)); #37408=DIRECTION('',(0.,0.,1.)); #37409=DIRECTION('center_axis',(0.,0.,1.)); #37410=DIRECTION('ref_axis',(1.,0.,0.)); #37411=DIRECTION('',(0.,0.,1.)); #37412=DIRECTION('center_axis',(0.,0.,1.)); #37413=DIRECTION('ref_axis',(1.,0.,0.)); #37414=DIRECTION('',(0.,0.,1.)); #37415=DIRECTION('center_axis',(0.,0.,1.)); #37416=DIRECTION('ref_axis',(1.,0.,0.)); #37417=DIRECTION('',(0.,0.,1.)); #37418=DIRECTION('center_axis',(0.,0.,1.)); #37419=DIRECTION('ref_axis',(1.,0.,0.)); #37420=DIRECTION('',(0.,0.,1.)); #37421=DIRECTION('center_axis',(0.,0.,1.)); #37422=DIRECTION('ref_axis',(1.,0.,0.)); #37423=DIRECTION('',(0.,0.,1.)); #37424=DIRECTION('center_axis',(0.,0.,1.)); #37425=DIRECTION('ref_axis',(1.,0.,0.)); #37426=DIRECTION('',(0.,0.,1.)); #37427=DIRECTION('center_axis',(0.,0.,1.)); #37428=DIRECTION('ref_axis',(1.,0.,0.)); #37429=DIRECTION('',(0.,0.,1.)); #37430=DIRECTION('center_axis',(0.,0.,1.)); #37431=DIRECTION('ref_axis',(1.,0.,0.)); #37432=DIRECTION('',(0.,0.,1.)); #37433=DIRECTION('center_axis',(0.,0.,1.)); #37434=DIRECTION('ref_axis',(1.,0.,0.)); #37435=DIRECTION('',(0.,0.,1.)); #37436=DIRECTION('center_axis',(0.,0.,1.)); #37437=DIRECTION('ref_axis',(1.,0.,0.)); #37438=DIRECTION('',(0.,0.,1.)); #37439=DIRECTION('center_axis',(0.,0.,1.)); #37440=DIRECTION('ref_axis',(1.,0.,0.)); #37441=DIRECTION('',(0.,0.,1.)); #37442=DIRECTION('center_axis',(0.,0.,1.)); #37443=DIRECTION('ref_axis',(1.,0.,0.)); #37444=DIRECTION('',(0.,0.,1.)); #37445=DIRECTION('center_axis',(0.,0.,1.)); #37446=DIRECTION('ref_axis',(1.,0.,0.)); #37447=DIRECTION('',(0.,0.,1.)); #37448=DIRECTION('center_axis',(0.,0.,1.)); #37449=DIRECTION('ref_axis',(1.,0.,0.)); #37450=DIRECTION('',(0.,0.,1.)); #37451=DIRECTION('center_axis',(0.,0.,1.)); #37452=DIRECTION('ref_axis',(1.,0.,0.)); #37453=DIRECTION('',(0.,0.,1.)); #37454=DIRECTION('axis',(0.,0.,1.)); #37455=DIRECTION('refdir',(1.,0.,0.)); #37456=DIRECTION('axis',(0.,0.,1.)); #37457=DIRECTION('refdir',(1.,0.,0.)); #37458=DIRECTION('center_axis',(0.,1.,0.)); #37459=DIRECTION('ref_axis',(0.,0.,1.)); #37460=DIRECTION('center_axis',(0.,-1.,0.)); #37461=DIRECTION('ref_axis',(0.,0.,1.)); #37462=DIRECTION('',(0.,1.,0.)); #37463=DIRECTION('center_axis',(0.,-1.,0.)); #37464=DIRECTION('ref_axis',(0.,0.,1.)); #37465=DIRECTION('center_axis',(0.,1.,0.)); #37466=DIRECTION('ref_axis',(0.,0.,1.)); #37467=DIRECTION('center_axis',(0.,-1.,0.)); #37468=DIRECTION('ref_axis',(0.,0.,1.)); #37469=DIRECTION('',(0.,1.,0.)); #37470=DIRECTION('center_axis',(0.,-1.,0.)); #37471=DIRECTION('ref_axis',(0.,0.,1.)); #37472=DIRECTION('center_axis',(0.,1.,0.)); #37473=DIRECTION('ref_axis',(0.,0.,1.)); #37474=DIRECTION('center_axis',(0.,-1.,0.)); #37475=DIRECTION('ref_axis',(0.,0.,1.)); #37476=DIRECTION('',(0.,1.,0.)); #37477=DIRECTION('center_axis',(0.,-1.,0.)); #37478=DIRECTION('ref_axis',(0.,0.,1.)); #37479=DIRECTION('center_axis',(0.,1.,0.)); #37480=DIRECTION('ref_axis',(-1.22464679914735E-16,0.,-1.)); #37481=DIRECTION('',(0.,-1.,0.)); #37482=DIRECTION('center_axis',(0.,-1.,0.)); #37483=DIRECTION('ref_axis',(0.,0.,1.)); #37484=DIRECTION('',(0.,1.,0.)); #37485=DIRECTION('center_axis',(0.,-1.,0.)); #37486=DIRECTION('ref_axis',(0.,0.,1.)); #37487=DIRECTION('center_axis',(0.,1.,0.)); #37488=DIRECTION('ref_axis',(1.,0.,6.12323399573677E-17)); #37489=DIRECTION('center_axis',(0.,1.,0.)); #37490=DIRECTION('ref_axis',(0.,0.,1.)); #37491=DIRECTION('',(0.,1.,0.)); #37492=DIRECTION('center_axis',(0.,1.,0.)); #37493=DIRECTION('ref_axis',(0.,0.,1.)); #37494=DIRECTION('',(0.,-1.,0.)); #37495=DIRECTION('center_axis',(0.,1.,0.)); #37496=DIRECTION('ref_axis',(1.,0.,6.12323399573677E-17)); #37497=DIRECTION('center_axis',(0.,1.,0.)); #37498=DIRECTION('ref_axis',(0.,0.,1.)); #37499=DIRECTION('',(0.,1.,0.)); #37500=DIRECTION('center_axis',(0.,1.,0.)); #37501=DIRECTION('ref_axis',(0.,0.,1.)); #37502=DIRECTION('',(0.,-1.,0.)); #37503=DIRECTION('center_axis',(0.,1.,0.)); #37504=DIRECTION('ref_axis',(1.,0.,6.12323399573677E-17)); #37505=DIRECTION('center_axis',(0.,1.,0.)); #37506=DIRECTION('ref_axis',(0.,0.,1.)); #37507=DIRECTION('',(0.,1.,0.)); #37508=DIRECTION('center_axis',(0.,1.,0.)); #37509=DIRECTION('ref_axis',(0.,0.,1.)); #37510=DIRECTION('',(0.,-1.,0.)); #37511=DIRECTION('center_axis',(0.,1.,0.)); #37512=DIRECTION('ref_axis',(1.,0.,6.12323399573677E-17)); #37513=DIRECTION('center_axis',(0.,1.,0.)); #37514=DIRECTION('ref_axis',(0.,0.,1.)); #37515=DIRECTION('',(0.,1.,0.)); #37516=DIRECTION('center_axis',(0.,1.,0.)); #37517=DIRECTION('ref_axis',(0.,0.,1.)); #37518=DIRECTION('',(0.,-1.,0.)); #37519=DIRECTION('center_axis',(0.,1.,0.)); #37520=DIRECTION('ref_axis',(0.,0.,1.)); #37521=DIRECTION('center_axis',(0.,1.,0.)); #37522=DIRECTION('ref_axis',(0.,0.,1.)); #37523=DIRECTION('',(0.,1.,0.)); #37524=DIRECTION('center_axis',(0.,1.,0.)); #37525=DIRECTION('ref_axis',(0.,0.,1.)); #37526=DIRECTION('center_axis',(0.,1.,0.)); #37527=DIRECTION('ref_axis',(0.,0.,1.)); #37528=DIRECTION('center_axis',(0.,1.,0.)); #37529=DIRECTION('ref_axis',(0.,0.,1.)); #37530=DIRECTION('',(0.,1.,0.)); #37531=DIRECTION('center_axis',(0.,1.,0.)); #37532=DIRECTION('ref_axis',(0.,0.,1.)); #37533=DIRECTION('center_axis',(0.,1.,0.)); #37534=DIRECTION('ref_axis',(0.,0.,1.)); #37535=DIRECTION('center_axis',(0.,1.,0.)); #37536=DIRECTION('ref_axis',(0.,0.,1.)); #37537=DIRECTION('',(0.,1.,0.)); #37538=DIRECTION('center_axis',(0.,1.,0.)); #37539=DIRECTION('ref_axis',(0.,0.,1.)); #37540=DIRECTION('center_axis',(0.,1.,0.)); #37541=DIRECTION('ref_axis',(0.,0.,1.)); #37542=DIRECTION('center_axis',(0.,1.,0.)); #37543=DIRECTION('ref_axis',(0.,0.,1.)); #37544=DIRECTION('',(0.,1.,0.)); #37545=DIRECTION('center_axis',(0.,1.,0.)); #37546=DIRECTION('ref_axis',(0.,0.,1.)); #37547=DIRECTION('center_axis',(0.,1.,0.)); #37548=DIRECTION('ref_axis',(0.,0.,1.)); #37549=DIRECTION('center_axis',(0.,1.,0.)); #37550=DIRECTION('ref_axis',(0.,0.,1.)); #37551=DIRECTION('',(0.,1.,0.)); #37552=DIRECTION('center_axis',(0.,1.,0.)); #37553=DIRECTION('ref_axis',(0.,0.,1.)); #37554=DIRECTION('center_axis',(0.,1.,0.)); #37555=DIRECTION('ref_axis',(0.,0.,1.)); #37556=DIRECTION('center_axis',(0.,1.,0.)); #37557=DIRECTION('ref_axis',(0.,0.,1.)); #37558=DIRECTION('',(0.,1.,0.)); #37559=DIRECTION('center_axis',(0.,1.,0.)); #37560=DIRECTION('ref_axis',(0.,0.,1.)); #37561=DIRECTION('center_axis',(0.,1.,0.)); #37562=DIRECTION('ref_axis',(0.,0.,1.)); #37563=DIRECTION('center_axis',(0.,1.,0.)); #37564=DIRECTION('ref_axis',(0.,0.,1.)); #37565=DIRECTION('',(0.,1.,0.)); #37566=DIRECTION('center_axis',(0.,1.,0.)); #37567=DIRECTION('ref_axis',(0.,0.,1.)); #37568=DIRECTION('center_axis',(0.,1.,0.)); #37569=DIRECTION('ref_axis',(0.,0.,1.)); #37570=DIRECTION('center_axis',(0.,1.,0.)); #37571=DIRECTION('ref_axis',(0.,0.,1.)); #37572=DIRECTION('',(0.,1.,0.)); #37573=DIRECTION('center_axis',(0.,1.,0.)); #37574=DIRECTION('ref_axis',(0.,0.,1.)); #37575=DIRECTION('center_axis',(0.,1.,0.)); #37576=DIRECTION('ref_axis',(0.,0.,1.)); #37577=DIRECTION('center_axis',(0.,1.,0.)); #37578=DIRECTION('ref_axis',(0.,0.,1.)); #37579=DIRECTION('',(0.,1.,0.)); #37580=DIRECTION('center_axis',(0.,1.,0.)); #37581=DIRECTION('ref_axis',(0.,0.,1.)); #37582=DIRECTION('center_axis',(0.,1.,0.)); #37583=DIRECTION('ref_axis',(0.,0.,1.)); #37584=DIRECTION('center_axis',(0.,1.,0.)); #37585=DIRECTION('ref_axis',(0.,0.,1.)); #37586=DIRECTION('',(0.,1.,0.)); #37587=DIRECTION('center_axis',(0.,1.,0.)); #37588=DIRECTION('ref_axis',(0.,0.,1.)); #37589=DIRECTION('center_axis',(0.,1.,0.)); #37590=DIRECTION('ref_axis',(0.,0.,1.)); #37591=DIRECTION('center_axis',(0.,1.,0.)); #37592=DIRECTION('ref_axis',(0.,0.,1.)); #37593=DIRECTION('',(0.,1.,0.)); #37594=DIRECTION('center_axis',(0.,1.,0.)); #37595=DIRECTION('ref_axis',(0.,0.,1.)); #37596=DIRECTION('center_axis',(0.,1.,0.)); #37597=DIRECTION('ref_axis',(0.,0.,1.)); #37598=DIRECTION('center_axis',(0.,1.,0.)); #37599=DIRECTION('ref_axis',(0.,0.,1.)); #37600=DIRECTION('',(0.,1.,0.)); #37601=DIRECTION('center_axis',(0.,1.,0.)); #37602=DIRECTION('ref_axis',(0.,0.,1.)); #37603=DIRECTION('center_axis',(0.,1.,0.)); #37604=DIRECTION('ref_axis',(1.,0.,-1.99778912092571E-13)); #37605=DIRECTION('center_axis',(0.,1.,0.)); #37606=DIRECTION('ref_axis',(0.,0.,1.)); #37607=DIRECTION('',(0.,1.,0.)); #37608=DIRECTION('center_axis',(0.,1.,0.)); #37609=DIRECTION('ref_axis',(0.,0.,1.)); #37610=DIRECTION('',(0.,-1.,0.)); #37611=DIRECTION('center_axis',(0.,1.,0.)); #37612=DIRECTION('ref_axis',(1.,0.,-1.99778912092571E-13)); #37613=DIRECTION('center_axis',(0.,1.,0.)); #37614=DIRECTION('ref_axis',(0.,0.,1.)); #37615=DIRECTION('',(0.,1.,0.)); #37616=DIRECTION('center_axis',(0.,1.,0.)); #37617=DIRECTION('ref_axis',(0.,0.,1.)); #37618=DIRECTION('',(0.,-1.,0.)); #37619=DIRECTION('center_axis',(0.,1.,0.)); #37620=DIRECTION('ref_axis',(1.,0.,-1.99778912092571E-13)); #37621=DIRECTION('center_axis',(0.,1.,0.)); #37622=DIRECTION('ref_axis',(0.,0.,1.)); #37623=DIRECTION('',(0.,1.,0.)); #37624=DIRECTION('center_axis',(0.,1.,0.)); #37625=DIRECTION('ref_axis',(0.,0.,1.)); #37626=DIRECTION('',(0.,-1.,0.)); #37627=DIRECTION('center_axis',(0.,1.,0.)); #37628=DIRECTION('ref_axis',(1.,0.,-2.00000956697496E-13)); #37629=DIRECTION('center_axis',(0.,1.,0.)); #37630=DIRECTION('ref_axis',(0.,0.,1.)); #37631=DIRECTION('',(0.,1.,0.)); #37632=DIRECTION('center_axis',(0.,1.,0.)); #37633=DIRECTION('ref_axis',(0.,0.,1.)); #37634=DIRECTION('',(0.,-1.,0.)); #37635=DIRECTION('center_axis',(0.,1.,0.)); #37636=DIRECTION('ref_axis',(1.,0.,-2.00000956697496E-13)); #37637=DIRECTION('center_axis',(0.,1.,0.)); #37638=DIRECTION('ref_axis',(0.,0.,1.)); #37639=DIRECTION('',(0.,1.,0.)); #37640=DIRECTION('center_axis',(0.,1.,0.)); #37641=DIRECTION('ref_axis',(0.,0.,1.)); #37642=DIRECTION('',(0.,-1.,0.)); #37643=DIRECTION('center_axis',(0.,1.,0.)); #37644=DIRECTION('ref_axis',(1.,0.,-1.99778912092571E-13)); #37645=DIRECTION('center_axis',(0.,1.,0.)); #37646=DIRECTION('ref_axis',(0.,0.,1.)); #37647=DIRECTION('',(0.,1.,0.)); #37648=DIRECTION('center_axis',(0.,1.,0.)); #37649=DIRECTION('ref_axis',(0.,0.,1.)); #37650=DIRECTION('',(0.,-1.,0.)); #37651=DIRECTION('center_axis',(0.,1.,0.)); #37652=DIRECTION('ref_axis',(1.,0.,-1.99556867487646E-13)); #37653=DIRECTION('center_axis',(0.,1.,0.)); #37654=DIRECTION('ref_axis',(0.,0.,1.)); #37655=DIRECTION('',(0.,1.,0.)); #37656=DIRECTION('center_axis',(0.,1.,0.)); #37657=DIRECTION('ref_axis',(0.,0.,1.)); #37658=DIRECTION('',(0.,-1.,0.)); #37659=DIRECTION('center_axis',(0.,1.,0.)); #37660=DIRECTION('ref_axis',(1.,0.,-2.00000956697496E-13)); #37661=DIRECTION('center_axis',(0.,1.,0.)); #37662=DIRECTION('ref_axis',(0.,0.,1.)); #37663=DIRECTION('',(0.,1.,0.)); #37664=DIRECTION('center_axis',(0.,1.,0.)); #37665=DIRECTION('ref_axis',(0.,0.,1.)); #37666=DIRECTION('',(0.,-1.,0.)); #37667=DIRECTION('center_axis',(0.,1.,0.)); #37668=DIRECTION('ref_axis',(1.,0.,-2.00000956697496E-13)); #37669=DIRECTION('center_axis',(0.,1.,0.)); #37670=DIRECTION('ref_axis',(0.,0.,1.)); #37671=DIRECTION('',(0.,1.,0.)); #37672=DIRECTION('center_axis',(0.,1.,0.)); #37673=DIRECTION('ref_axis',(0.,0.,1.)); #37674=DIRECTION('',(0.,-1.,0.)); #37675=DIRECTION('center_axis',(0.,1.,0.)); #37676=DIRECTION('ref_axis',(1.,0.,-1.99778912092571E-13)); #37677=DIRECTION('center_axis',(0.,1.,0.)); #37678=DIRECTION('ref_axis',(0.,0.,1.)); #37679=DIRECTION('',(0.,1.,0.)); #37680=DIRECTION('center_axis',(0.,1.,0.)); #37681=DIRECTION('ref_axis',(0.,0.,1.)); #37682=DIRECTION('',(0.,-1.,0.)); #37683=DIRECTION('center_axis',(0.,1.,0.)); #37684=DIRECTION('ref_axis',(1.,0.,-1.99778912092571E-13)); #37685=DIRECTION('center_axis',(0.,1.,0.)); #37686=DIRECTION('ref_axis',(0.,0.,1.)); #37687=DIRECTION('',(0.,1.,0.)); #37688=DIRECTION('center_axis',(0.,1.,0.)); #37689=DIRECTION('ref_axis',(0.,0.,1.)); #37690=DIRECTION('',(0.,-1.,0.)); #37691=DIRECTION('center_axis',(0.,1.,0.)); #37692=DIRECTION('ref_axis',(1.,0.,-1.99778912092571E-13)); #37693=DIRECTION('center_axis',(0.,1.,0.)); #37694=DIRECTION('ref_axis',(0.,0.,1.)); #37695=DIRECTION('',(0.,1.,0.)); #37696=DIRECTION('center_axis',(0.,1.,0.)); #37697=DIRECTION('ref_axis',(0.,0.,1.)); #37698=DIRECTION('',(0.,-1.,0.)); #37699=DIRECTION('center_axis',(0.,1.,0.)); #37700=DIRECTION('ref_axis',(1.,0.,-1.99556867487646E-13)); #37701=DIRECTION('center_axis',(0.,1.,0.)); #37702=DIRECTION('ref_axis',(0.,0.,1.)); #37703=DIRECTION('',(0.,1.,0.)); #37704=DIRECTION('center_axis',(0.,1.,0.)); #37705=DIRECTION('ref_axis',(0.,0.,1.)); #37706=DIRECTION('',(0.,-1.,0.)); #37707=DIRECTION('center_axis',(0.,1.,0.)); #37708=DIRECTION('ref_axis',(1.,0.,-1.99778912092571E-13)); #37709=DIRECTION('center_axis',(0.,1.,0.)); #37710=DIRECTION('ref_axis',(0.,0.,1.)); #37711=DIRECTION('',(0.,1.,0.)); #37712=DIRECTION('center_axis',(0.,1.,0.)); #37713=DIRECTION('ref_axis',(0.,0.,1.)); #37714=DIRECTION('',(0.,-1.,0.)); #37715=DIRECTION('center_axis',(0.,1.,0.)); #37716=DIRECTION('ref_axis',(1.,0.,-1.99778912092571E-13)); #37717=DIRECTION('center_axis',(0.,1.,0.)); #37718=DIRECTION('ref_axis',(0.,0.,1.)); #37719=DIRECTION('',(0.,1.,0.)); #37720=DIRECTION('center_axis',(0.,1.,0.)); #37721=DIRECTION('ref_axis',(0.,0.,1.)); #37722=DIRECTION('',(0.,-1.,0.)); #37723=DIRECTION('center_axis',(0.,1.,0.)); #37724=DIRECTION('ref_axis',(0.,0.,1.)); #37725=DIRECTION('center_axis',(0.,1.,0.)); #37726=DIRECTION('ref_axis',(0.,0.,1.)); #37727=DIRECTION('',(0.,1.,0.)); #37728=DIRECTION('center_axis',(0.,1.,0.)); #37729=DIRECTION('ref_axis',(0.,0.,1.)); #37730=DIRECTION('center_axis',(0.,1.,0.)); #37731=DIRECTION('ref_axis',(0.,0.,1.)); #37732=DIRECTION('center_axis',(0.,1.,0.)); #37733=DIRECTION('ref_axis',(0.,0.,1.)); #37734=DIRECTION('',(0.,1.,0.)); #37735=DIRECTION('center_axis',(0.,1.,0.)); #37736=DIRECTION('ref_axis',(0.,0.,1.)); #37737=DIRECTION('center_axis',(0.,1.,0.)); #37738=DIRECTION('ref_axis',(0.,0.,1.)); #37739=DIRECTION('center_axis',(0.,1.,0.)); #37740=DIRECTION('ref_axis',(0.,0.,1.)); #37741=DIRECTION('',(0.,1.,0.)); #37742=DIRECTION('center_axis',(0.,1.,0.)); #37743=DIRECTION('ref_axis',(0.,0.,1.)); #37744=DIRECTION('center_axis',(0.,1.,0.)); #37745=DIRECTION('ref_axis',(0.,0.,1.)); #37746=DIRECTION('center_axis',(0.,1.,0.)); #37747=DIRECTION('ref_axis',(0.,0.,1.)); #37748=DIRECTION('',(0.,1.,0.)); #37749=DIRECTION('center_axis',(0.,1.,0.)); #37750=DIRECTION('ref_axis',(0.,0.,1.)); #37751=DIRECTION('center_axis',(0.,1.,0.)); #37752=DIRECTION('ref_axis',(0.,0.,1.)); #37753=DIRECTION('center_axis',(0.,1.,0.)); #37754=DIRECTION('ref_axis',(0.,0.,1.)); #37755=DIRECTION('',(0.,1.,0.)); #37756=DIRECTION('center_axis',(0.,1.,0.)); #37757=DIRECTION('ref_axis',(0.,0.,1.)); #37758=DIRECTION('center_axis',(0.,1.,0.)); #37759=DIRECTION('ref_axis',(0.,0.,1.)); #37760=DIRECTION('center_axis',(0.,1.,0.)); #37761=DIRECTION('ref_axis',(0.,0.,1.)); #37762=DIRECTION('',(0.,1.,0.)); #37763=DIRECTION('center_axis',(0.,1.,0.)); #37764=DIRECTION('ref_axis',(0.,0.,1.)); #37765=DIRECTION('center_axis',(0.,1.,0.)); #37766=DIRECTION('ref_axis',(0.,0.,1.)); #37767=DIRECTION('center_axis',(0.,1.,0.)); #37768=DIRECTION('ref_axis',(0.,0.,1.)); #37769=DIRECTION('',(0.,1.,0.)); #37770=DIRECTION('center_axis',(0.,1.,0.)); #37771=DIRECTION('ref_axis',(0.,0.,1.)); #37772=DIRECTION('center_axis',(0.,1.,0.)); #37773=DIRECTION('ref_axis',(0.,0.,1.)); #37774=DIRECTION('center_axis',(0.,1.,0.)); #37775=DIRECTION('ref_axis',(0.,0.,1.)); #37776=DIRECTION('',(0.,1.,0.)); #37777=DIRECTION('center_axis',(0.,1.,0.)); #37778=DIRECTION('ref_axis',(0.,0.,1.)); #37779=DIRECTION('center_axis',(0.,1.,0.)); #37780=DIRECTION('ref_axis',(1.,0.,-2.00223001302421E-13)); #37781=DIRECTION('center_axis',(0.,1.,0.)); #37782=DIRECTION('ref_axis',(0.,0.,1.)); #37783=DIRECTION('',(0.,1.,0.)); #37784=DIRECTION('center_axis',(0.,1.,0.)); #37785=DIRECTION('ref_axis',(0.,0.,1.)); #37786=DIRECTION('',(0.,-1.,0.)); #37787=DIRECTION('center_axis',(0.,0.,-1.)); #37788=DIRECTION('ref_axis',(0.,-1.,0.)); #37789=DIRECTION('',(-1.,0.,0.)); #37790=DIRECTION('',(0.,-1.,0.)); #37791=DIRECTION('',(-1.,0.,0.)); #37792=DIRECTION('center_axis',(0.,-1.,0.)); #37793=DIRECTION('ref_axis',(0.,0.,-1.)); #37794=DIRECTION('center_axis',(0.,-1.,0.)); #37795=DIRECTION('ref_axis',(0.,0.,-1.)); #37796=DIRECTION('',(0.,-1.,0.)); #37797=DIRECTION('center_axis',(0.,-1.,0.)); #37798=DIRECTION('ref_axis',(0.,0.,-1.)); #37799=DIRECTION('',(0.,-1.,0.)); #37800=DIRECTION('center_axis',(0.,-1.,0.)); #37801=DIRECTION('ref_axis',(0.,0.,-1.)); #37802=DIRECTION('center_axis',(0.,-1.,0.)); #37803=DIRECTION('ref_axis',(0.,0.,1.)); #37804=DIRECTION('',(0.,-1.,0.)); #37805=DIRECTION('center_axis',(0.,-1.,0.)); #37806=DIRECTION('ref_axis',(0.,0.,1.)); #37807=DIRECTION('',(0.,-1.,0.)); #37808=DIRECTION('center_axis',(1.,0.,0.)); #37809=DIRECTION('ref_axis',(0.,1.,0.)); #37810=DIRECTION('',(0.,-1.,0.)); #37811=DIRECTION('',(0.,0.,-1.)); #37812=DIRECTION('',(0.,0.,-1.)); #37813=DIRECTION('center_axis',(1.,0.,0.)); #37814=DIRECTION('ref_axis',(0.,1.,0.)); #37815=DIRECTION('',(0.,-1.,0.)); #37816=DIRECTION('',(0.,0.,-1.)); #37817=DIRECTION('',(0.,0.,-1.)); #37818=DIRECTION('center_axis',(1.,0.,0.)); #37819=DIRECTION('ref_axis',(0.,1.,0.)); #37820=DIRECTION('',(0.,-1.,0.)); #37821=DIRECTION('',(0.,0.,-1.)); #37822=DIRECTION('',(0.,0.,-1.)); #37823=DIRECTION('center_axis',(1.,0.,0.)); #37824=DIRECTION('ref_axis',(0.,1.,0.)); #37825=DIRECTION('',(0.,-1.,0.)); #37826=DIRECTION('',(0.,0.,-1.)); #37827=DIRECTION('',(0.,0.,-1.)); #37828=DIRECTION('center_axis',(1.,0.,0.)); #37829=DIRECTION('ref_axis',(0.,1.,0.)); #37830=DIRECTION('',(0.,-1.,0.)); #37831=DIRECTION('',(0.,0.,-1.)); #37832=DIRECTION('',(0.,0.,-1.)); #37833=DIRECTION('center_axis',(1.,0.,0.)); #37834=DIRECTION('ref_axis',(0.,1.,0.)); #37835=DIRECTION('',(0.,-1.,0.)); #37836=DIRECTION('',(0.,0.,-1.)); #37837=DIRECTION('',(0.,0.,-1.)); #37838=DIRECTION('center_axis',(1.,0.,0.)); #37839=DIRECTION('ref_axis',(0.,1.,0.)); #37840=DIRECTION('',(0.,-1.,0.)); #37841=DIRECTION('',(0.,0.,-1.)); #37842=DIRECTION('',(0.,0.,-1.)); #37843=DIRECTION('center_axis',(1.,0.,0.)); #37844=DIRECTION('ref_axis',(0.,1.,0.)); #37845=DIRECTION('',(0.,-1.,0.)); #37846=DIRECTION('',(0.,0.,-1.)); #37847=DIRECTION('',(0.,0.,-1.)); #37848=DIRECTION('center_axis',(1.,0.,0.)); #37849=DIRECTION('ref_axis',(0.,1.,0.)); #37850=DIRECTION('',(0.,-1.,0.)); #37851=DIRECTION('',(0.,0.,-1.)); #37852=DIRECTION('',(0.,0.,-1.)); #37853=DIRECTION('center_axis',(1.,0.,0.)); #37854=DIRECTION('ref_axis',(0.,1.,0.)); #37855=DIRECTION('',(0.,-1.,0.)); #37856=DIRECTION('',(0.,0.,-1.)); #37857=DIRECTION('',(0.,0.,-1.)); #37858=DIRECTION('center_axis',(1.,0.,0.)); #37859=DIRECTION('ref_axis',(0.,1.,0.)); #37860=DIRECTION('',(0.,-1.,0.)); #37861=DIRECTION('',(0.,0.,-1.)); #37862=DIRECTION('',(0.,0.,-1.)); #37863=DIRECTION('center_axis',(1.,0.,0.)); #37864=DIRECTION('ref_axis',(0.,1.,0.)); #37865=DIRECTION('',(0.,-1.,0.)); #37866=DIRECTION('',(0.,0.,-1.)); #37867=DIRECTION('',(0.,0.,-1.)); #37868=DIRECTION('center_axis',(1.,0.,0.)); #37869=DIRECTION('ref_axis',(0.,1.,0.)); #37870=DIRECTION('',(0.,-1.,0.)); #37871=DIRECTION('',(0.,0.,-1.)); #37872=DIRECTION('',(0.,0.,-1.)); #37873=DIRECTION('center_axis',(1.,0.,0.)); #37874=DIRECTION('ref_axis',(0.,1.,0.)); #37875=DIRECTION('',(0.,-1.,0.)); #37876=DIRECTION('',(0.,0.,-1.)); #37877=DIRECTION('',(0.,0.,-1.)); #37878=DIRECTION('center_axis',(1.,0.,0.)); #37879=DIRECTION('ref_axis',(0.,1.,0.)); #37880=DIRECTION('',(0.,-1.,0.)); #37881=DIRECTION('',(0.,0.,-1.)); #37882=DIRECTION('',(0.,0.,-1.)); #37883=DIRECTION('center_axis',(1.,0.,0.)); #37884=DIRECTION('ref_axis',(0.,1.,0.)); #37885=DIRECTION('',(0.,-1.,0.)); #37886=DIRECTION('',(0.,0.,-1.)); #37887=DIRECTION('',(0.,0.,-1.)); #37888=DIRECTION('center_axis',(1.,0.,0.)); #37889=DIRECTION('ref_axis',(0.,1.,0.)); #37890=DIRECTION('',(0.,-1.,0.)); #37891=DIRECTION('',(0.,0.,-1.)); #37892=DIRECTION('',(0.,0.,-1.)); #37893=DIRECTION('center_axis',(1.,0.,0.)); #37894=DIRECTION('ref_axis',(0.,1.,0.)); #37895=DIRECTION('',(0.,-1.,0.)); #37896=DIRECTION('',(0.,0.,-1.)); #37897=DIRECTION('',(0.,0.,-1.)); #37898=DIRECTION('center_axis',(1.,0.,0.)); #37899=DIRECTION('ref_axis',(0.,1.,0.)); #37900=DIRECTION('',(0.,-1.,0.)); #37901=DIRECTION('',(0.,0.,-1.)); #37902=DIRECTION('',(0.,0.,-1.)); #37903=DIRECTION('center_axis',(1.,0.,0.)); #37904=DIRECTION('ref_axis',(0.,1.,0.)); #37905=DIRECTION('',(0.,-1.,0.)); #37906=DIRECTION('',(0.,0.,-1.)); #37907=DIRECTION('',(0.,0.,-1.)); #37908=DIRECTION('center_axis',(1.,0.,0.)); #37909=DIRECTION('ref_axis',(0.,1.,0.)); #37910=DIRECTION('',(0.,-1.,0.)); #37911=DIRECTION('',(0.,0.,-1.)); #37912=DIRECTION('',(0.,0.,-1.)); #37913=DIRECTION('center_axis',(0.,1.,0.)); #37914=DIRECTION('ref_axis',(1.,0.,0.)); #37915=DIRECTION('center_axis',(0.,1.,0.)); #37916=DIRECTION('ref_axis',(-1.82965469354E-13,0.,1.)); #37917=DIRECTION('',(1.,0.,0.)); #37918=DIRECTION('center_axis',(0.,1.,0.)); #37919=DIRECTION('ref_axis',(0.,0.,1.)); #37920=DIRECTION('',(-1.,0.,0.)); #37921=DIRECTION('center_axis',(0.,1.,0.)); #37922=DIRECTION('ref_axis',(0.,0.,1.)); #37923=DIRECTION('',(0.,0.,-1.)); #37924=DIRECTION('center_axis',(0.,1.,0.)); #37925=DIRECTION('ref_axis',(1.,0.,0.)); #37926=DIRECTION('center_axis',(0.,1.,0.)); #37927=DIRECTION('ref_axis',(-1.82965469354E-13,0.,1.)); #37928=DIRECTION('',(0.,0.,-1.)); #37929=DIRECTION('center_axis',(0.,1.,0.)); #37930=DIRECTION('ref_axis',(0.,0.,1.)); #37931=DIRECTION('',(-1.,0.,0.)); #37932=DIRECTION('center_axis',(0.,1.,0.)); #37933=DIRECTION('ref_axis',(0.,0.,1.)); #37934=DIRECTION('',(1.,0.,0.)); #37935=DIRECTION('center_axis',(0.,1.,0.)); #37936=DIRECTION('ref_axis',(1.,0.,0.)); #37937=DIRECTION('',(-1.,0.,0.)); #37938=DIRECTION('',(0.,0.,-1.)); #37939=DIRECTION('',(0.,0.,-1.)); #37940=DIRECTION('',(0.,0.,-1.)); #37941=DIRECTION('',(1.,0.,0.)); #37942=DIRECTION('center_axis',(0.,1.,0.)); #37943=DIRECTION('ref_axis',(0.,0.,1.)); #37944=DIRECTION('',(-5.782411586589E-15,0.,-1.)); #37945=DIRECTION('center_axis',(0.,1.,0.)); #37946=DIRECTION('ref_axis',(0.,0.,1.)); #37947=DIRECTION('center_axis',(0.,1.,0.)); #37948=DIRECTION('ref_axis',(1.,0.,0.)); #37949=DIRECTION('',(-1.,0.,0.)); #37950=DIRECTION('center_axis',(0.,1.,0.)); #37951=DIRECTION('ref_axis',(0.,0.,1.)); #37952=DIRECTION('',(-5.782411586589E-15,0.,-1.)); #37953=DIRECTION('center_axis',(0.,1.,0.)); #37954=DIRECTION('ref_axis',(0.,0.,1.)); #37955=DIRECTION('',(1.,0.,0.)); #37956=DIRECTION('',(0.,0.,-1.)); #37957=DIRECTION('',(0.,0.,-1.)); #37958=DIRECTION('',(0.,0.,-1.)); #37959=DIRECTION('center_axis',(0.,1.,0.)); #37960=DIRECTION('ref_axis',(1.,0.,0.)); #37961=DIRECTION('center_axis',(0.,1.,0.)); #37962=DIRECTION('ref_axis',(0.,0.,1.)); #37963=DIRECTION('',(0.,0.,-1.)); #37964=DIRECTION('center_axis',(0.,1.,0.)); #37965=DIRECTION('ref_axis',(-1.341149617035E-13,0.,1.)); #37966=DIRECTION('',(1.,0.,0.)); #37967=DIRECTION('center_axis',(0.,1.,0.)); #37968=DIRECTION('ref_axis',(0.,0.,1.)); #37969=DIRECTION('',(-1.,0.,0.)); #37970=DIRECTION('center_axis',(0.,1.,0.)); #37971=DIRECTION('ref_axis',(1.,0.,0.)); #37972=DIRECTION('center_axis',(0.,1.,0.)); #37973=DIRECTION('ref_axis',(0.,0.,1.)); #37974=DIRECTION('',(-1.,0.,0.)); #37975=DIRECTION('center_axis',(0.,1.,0.)); #37976=DIRECTION('ref_axis',(0.,0.,1.)); #37977=DIRECTION('',(1.,0.,0.)); #37978=DIRECTION('center_axis',(0.,1.,0.)); #37979=DIRECTION('ref_axis',(-1.341149617035E-13,0.,1.)); #37980=DIRECTION('',(0.,0.,-1.)); #37981=DIRECTION('center_axis',(0.,1.,0.)); #37982=DIRECTION('ref_axis',(1.,0.,0.)); #37983=DIRECTION('center_axis',(0.,1.,0.)); #37984=DIRECTION('ref_axis',(-1.350022287158E-13,0.,1.)); #37985=DIRECTION('',(1.,0.,0.)); #37986=DIRECTION('center_axis',(0.,1.,0.)); #37987=DIRECTION('ref_axis',(0.,0.,1.)); #37988=DIRECTION('',(-1.,0.,0.)); #37989=DIRECTION('center_axis',(0.,1.,0.)); #37990=DIRECTION('ref_axis',(0.,0.,1.)); #37991=DIRECTION('',(0.,0.,-1.)); #37992=DIRECTION('center_axis',(0.,1.,0.)); #37993=DIRECTION('ref_axis',(1.,0.,0.)); #37994=DIRECTION('center_axis',(0.,1.,0.)); #37995=DIRECTION('ref_axis',(-1.350022287158E-13,0.,1.)); #37996=DIRECTION('',(0.,0.,-1.)); #37997=DIRECTION('center_axis',(0.,1.,0.)); #37998=DIRECTION('ref_axis',(0.,0.,1.)); #37999=DIRECTION('',(-1.,0.,0.)); #38000=DIRECTION('center_axis',(0.,1.,0.)); #38001=DIRECTION('ref_axis',(0.,0.,1.)); #38002=DIRECTION('',(1.,0.,0.)); #38003=DIRECTION('center_axis',(0.,1.,0.)); #38004=DIRECTION('ref_axis',(1.,0.,0.)); #38005=DIRECTION('',(1.,0.,0.)); #38006=DIRECTION('center_axis',(0.,1.,0.)); #38007=DIRECTION('ref_axis',(0.,0.,1.)); #38008=DIRECTION('',(0.,0.,-1.)); #38009=DIRECTION('center_axis',(0.,1.,0.)); #38010=DIRECTION('ref_axis',(0.,0.,1.)); #38011=DIRECTION('',(-1.,0.,0.)); #38012=DIRECTION('',(0.,0.,-1.)); #38013=DIRECTION('',(0.,0.,-1.)); #38014=DIRECTION('',(0.,0.,-1.)); #38015=DIRECTION('center_axis',(0.,1.,0.)); #38016=DIRECTION('ref_axis',(1.,0.,0.)); #38017=DIRECTION('',(1.,0.,0.)); #38018=DIRECTION('',(0.,0.,-1.)); #38019=DIRECTION('',(0.,0.,-1.)); #38020=DIRECTION('',(0.,0.,-1.)); #38021=DIRECTION('',(-1.,0.,0.)); #38022=DIRECTION('center_axis',(0.,1.,0.)); #38023=DIRECTION('ref_axis',(0.,0.,1.)); #38024=DIRECTION('',(0.,0.,-1.)); #38025=DIRECTION('center_axis',(0.,1.,0.)); #38026=DIRECTION('ref_axis',(0.,0.,1.)); #38027=DIRECTION('center_axis',(0.,1.,0.)); #38028=DIRECTION('ref_axis',(1.,0.,0.)); #38029=DIRECTION('center_axis',(0.,1.,0.)); #38030=DIRECTION('ref_axis',(0.,0.,1.)); #38031=DIRECTION('',(0.,0.,-1.)); #38032=DIRECTION('center_axis',(0.,1.,0.)); #38033=DIRECTION('ref_axis',(1.190165994187E-13,0.,1.)); #38034=DIRECTION('',(1.,0.,0.)); #38035=DIRECTION('center_axis',(0.,1.,0.)); #38036=DIRECTION('ref_axis',(0.,0.,1.)); #38037=DIRECTION('',(-1.,0.,0.)); #38038=DIRECTION('center_axis',(0.,1.,0.)); #38039=DIRECTION('ref_axis',(1.,0.,0.)); #38040=DIRECTION('center_axis',(0.,1.,0.)); #38041=DIRECTION('ref_axis',(0.,0.,1.)); #38042=DIRECTION('',(-1.,0.,0.)); #38043=DIRECTION('center_axis',(0.,1.,0.)); #38044=DIRECTION('ref_axis',(0.,0.,1.)); #38045=DIRECTION('',(1.,0.,0.)); #38046=DIRECTION('center_axis',(0.,1.,0.)); #38047=DIRECTION('ref_axis',(1.190165994187E-13,0.,1.)); #38048=DIRECTION('',(0.,0.,-1.)); #38049=DIRECTION('center_axis',(0.,1.,0.)); #38050=DIRECTION('ref_axis',(1.,0.,0.)); #38051=DIRECTION('center_axis',(0.,1.,0.)); #38052=DIRECTION('ref_axis',(1.714182927006E-13,0.,1.)); #38053=DIRECTION('',(1.,0.,0.)); #38054=DIRECTION('center_axis',(0.,1.,0.)); #38055=DIRECTION('ref_axis',(0.,0.,1.)); #38056=DIRECTION('',(-1.,0.,0.)); #38057=DIRECTION('center_axis',(0.,1.,0.)); #38058=DIRECTION('ref_axis',(0.,0.,1.)); #38059=DIRECTION('',(0.,0.,-1.)); #38060=DIRECTION('center_axis',(0.,1.,0.)); #38061=DIRECTION('ref_axis',(1.,0.,0.)); #38062=DIRECTION('center_axis',(0.,1.,0.)); #38063=DIRECTION('ref_axis',(1.714182927006E-13,0.,1.)); #38064=DIRECTION('',(0.,0.,-1.)); #38065=DIRECTION('center_axis',(0.,1.,0.)); #38066=DIRECTION('ref_axis',(0.,0.,1.)); #38067=DIRECTION('',(-1.,0.,0.)); #38068=DIRECTION('center_axis',(0.,1.,0.)); #38069=DIRECTION('ref_axis',(0.,0.,1.)); #38070=DIRECTION('',(1.,0.,0.)); #38071=DIRECTION('center_axis',(0.,1.,0.)); #38072=DIRECTION('ref_axis',(1.,0.,0.)); #38073=DIRECTION('center_axis',(0.,1.,0.)); #38074=DIRECTION('ref_axis',(1.714182927006E-13,0.,1.)); #38075=DIRECTION('',(1.,0.,0.)); #38076=DIRECTION('center_axis',(0.,1.,0.)); #38077=DIRECTION('ref_axis',(0.,0.,1.)); #38078=DIRECTION('',(-1.,0.,0.)); #38079=DIRECTION('center_axis',(0.,1.,0.)); #38080=DIRECTION('ref_axis',(0.,0.,1.)); #38081=DIRECTION('',(0.,0.,-1.)); #38082=DIRECTION('center_axis',(0.,1.,0.)); #38083=DIRECTION('ref_axis',(1.,0.,0.)); #38084=DIRECTION('center_axis',(0.,1.,0.)); #38085=DIRECTION('ref_axis',(1.714182927006E-13,0.,1.)); #38086=DIRECTION('',(0.,0.,-1.)); #38087=DIRECTION('center_axis',(0.,1.,0.)); #38088=DIRECTION('ref_axis',(0.,0.,1.)); #38089=DIRECTION('',(-1.,0.,0.)); #38090=DIRECTION('center_axis',(0.,1.,0.)); #38091=DIRECTION('ref_axis',(0.,0.,1.)); #38092=DIRECTION('',(1.,0.,0.)); #38093=DIRECTION('center_axis',(0.,1.,0.)); #38094=DIRECTION('ref_axis',(1.,0.,0.)); #38095=DIRECTION('center_axis',(0.,1.,0.)); #38096=DIRECTION('ref_axis',(1.438854867501E-13,0.,1.)); #38097=DIRECTION('',(1.,0.,0.)); #38098=DIRECTION('center_axis',(0.,1.,0.)); #38099=DIRECTION('ref_axis',(0.,0.,1.)); #38100=DIRECTION('',(-1.,0.,0.)); #38101=DIRECTION('center_axis',(0.,1.,0.)); #38102=DIRECTION('ref_axis',(0.,0.,1.)); #38103=DIRECTION('',(0.,0.,-1.)); #38104=DIRECTION('center_axis',(0.,1.,0.)); #38105=DIRECTION('ref_axis',(1.,0.,0.)); #38106=DIRECTION('center_axis',(0.,1.,0.)); #38107=DIRECTION('ref_axis',(1.438854867501E-13,0.,1.)); #38108=DIRECTION('',(0.,0.,-1.)); #38109=DIRECTION('center_axis',(0.,1.,0.)); #38110=DIRECTION('ref_axis',(0.,0.,1.)); #38111=DIRECTION('',(-1.,0.,0.)); #38112=DIRECTION('center_axis',(0.,1.,0.)); #38113=DIRECTION('ref_axis',(0.,0.,1.)); #38114=DIRECTION('',(1.,0.,0.)); #38115=DIRECTION('center_axis',(0.,1.,0.)); #38116=DIRECTION('ref_axis',(1.,0.,0.)); #38117=DIRECTION('',(1.,0.,0.)); #38118=DIRECTION('center_axis',(0.,1.,0.)); #38119=DIRECTION('ref_axis',(0.,0.,1.)); #38120=DIRECTION('',(0.,0.,-1.)); #38121=DIRECTION('center_axis',(0.,1.,0.)); #38122=DIRECTION('ref_axis',(0.,0.,1.)); #38123=DIRECTION('',(-1.,0.,0.)); #38124=DIRECTION('',(0.,0.,-1.)); #38125=DIRECTION('',(0.,0.,-1.)); #38126=DIRECTION('',(0.,0.,-1.)); #38127=DIRECTION('center_axis',(0.,1.,0.)); #38128=DIRECTION('ref_axis',(1.,0.,0.)); #38129=DIRECTION('',(1.,0.,0.)); #38130=DIRECTION('',(0.,0.,-1.)); #38131=DIRECTION('',(0.,0.,-1.)); #38132=DIRECTION('',(0.,0.,-1.)); #38133=DIRECTION('',(-1.,0.,0.)); #38134=DIRECTION('center_axis',(0.,1.,0.)); #38135=DIRECTION('ref_axis',(0.,0.,1.)); #38136=DIRECTION('',(0.,0.,-1.)); #38137=DIRECTION('center_axis',(0.,1.,0.)); #38138=DIRECTION('ref_axis',(0.,0.,1.)); #38139=DIRECTION('center_axis',(0.,1.,0.)); #38140=DIRECTION('ref_axis',(1.,0.,0.)); #38141=DIRECTION('center_axis',(0.,1.,0.)); #38142=DIRECTION('ref_axis',(0.,0.,1.)); #38143=DIRECTION('',(0.,0.,-1.)); #38144=DIRECTION('center_axis',(0.,1.,0.)); #38145=DIRECTION('ref_axis',(1.953999130197E-13,0.,1.)); #38146=DIRECTION('',(1.,0.,0.)); #38147=DIRECTION('center_axis',(0.,1.,0.)); #38148=DIRECTION('ref_axis',(0.,0.,1.)); #38149=DIRECTION('',(-1.,0.,0.)); #38150=DIRECTION('center_axis',(0.,1.,0.)); #38151=DIRECTION('ref_axis',(1.,0.,0.)); #38152=DIRECTION('center_axis',(0.,1.,0.)); #38153=DIRECTION('ref_axis',(0.,0.,1.)); #38154=DIRECTION('',(-1.,0.,0.)); #38155=DIRECTION('center_axis',(0.,1.,0.)); #38156=DIRECTION('ref_axis',(0.,0.,1.)); #38157=DIRECTION('',(1.,0.,0.)); #38158=DIRECTION('center_axis',(0.,1.,0.)); #38159=DIRECTION('ref_axis',(1.953999130197E-13,0.,1.)); #38160=DIRECTION('',(0.,0.,-1.)); #38161=DIRECTION('center_axis',(0.,1.,0.)); #38162=DIRECTION('ref_axis',(1.,0.,0.)); #38163=DIRECTION('center_axis',(0.,1.,0.)); #38164=DIRECTION('ref_axis',(1.953999130197E-13,0.,1.)); #38165=DIRECTION('',(1.,0.,0.)); #38166=DIRECTION('center_axis',(0.,1.,0.)); #38167=DIRECTION('ref_axis',(0.,0.,1.)); #38168=DIRECTION('',(-1.,0.,0.)); #38169=DIRECTION('center_axis',(0.,1.,0.)); #38170=DIRECTION('ref_axis',(0.,0.,1.)); #38171=DIRECTION('',(0.,0.,-1.)); #38172=DIRECTION('center_axis',(0.,1.,0.)); #38173=DIRECTION('ref_axis',(1.,0.,0.)); #38174=DIRECTION('center_axis',(0.,1.,0.)); #38175=DIRECTION('ref_axis',(1.953999130197E-13,0.,1.)); #38176=DIRECTION('',(0.,0.,-1.)); #38177=DIRECTION('center_axis',(0.,1.,0.)); #38178=DIRECTION('ref_axis',(0.,0.,1.)); #38179=DIRECTION('',(-1.,0.,0.)); #38180=DIRECTION('center_axis',(0.,1.,0.)); #38181=DIRECTION('ref_axis',(0.,0.,1.)); #38182=DIRECTION('',(1.,0.,0.)); #38183=DIRECTION('center_axis',(0.,1.,0.)); #38184=DIRECTION('ref_axis',(1.,0.,0.)); #38185=DIRECTION('center_axis',(0.,1.,0.)); #38186=DIRECTION('ref_axis',(0.,0.,1.)); #38187=DIRECTION('',(0.,0.,-1.)); #38188=DIRECTION('center_axis',(0.,1.,0.)); #38189=DIRECTION('ref_axis',(-1.82965469354E-13,0.,1.)); #38190=DIRECTION('',(1.,0.,0.)); #38191=DIRECTION('center_axis',(0.,1.,0.)); #38192=DIRECTION('ref_axis',(0.,0.,1.)); #38193=DIRECTION('',(-1.,0.,0.)); #38194=DIRECTION('center_axis',(0.,1.,0.)); #38195=DIRECTION('ref_axis',(1.,0.,0.)); #38196=DIRECTION('center_axis',(0.,1.,0.)); #38197=DIRECTION('ref_axis',(0.,0.,1.)); #38198=DIRECTION('',(-1.,0.,0.)); #38199=DIRECTION('center_axis',(0.,1.,0.)); #38200=DIRECTION('ref_axis',(0.,0.,1.)); #38201=DIRECTION('',(1.,0.,0.)); #38202=DIRECTION('center_axis',(0.,1.,0.)); #38203=DIRECTION('ref_axis',(-1.82965469354E-13,0.,1.)); #38204=DIRECTION('',(0.,0.,-1.)); #38205=DIRECTION('center_axis',(0.,1.,0.)); #38206=DIRECTION('ref_axis',(1.,0.,0.)); #38207=DIRECTION('center_axis',(0.,1.,0.)); #38208=DIRECTION('ref_axis',(6.57255215422E-14,0.,1.)); #38209=DIRECTION('',(1.,0.,-4.336808689942E-15)); #38210=DIRECTION('center_axis',(0.,1.,0.)); #38211=DIRECTION('ref_axis',(0.,0.,1.)); #38212=DIRECTION('',(-1.,0.,4.336808689942E-15)); #38213=DIRECTION('center_axis',(0.,1.,0.)); #38214=DIRECTION('ref_axis',(0.,0.,1.)); #38215=DIRECTION('',(0.,0.,-1.)); #38216=DIRECTION('center_axis',(0.,1.,0.)); #38217=DIRECTION('ref_axis',(1.,0.,0.)); #38218=DIRECTION('center_axis',(0.,1.,0.)); #38219=DIRECTION('ref_axis',(6.57255215422E-14,0.,1.)); #38220=DIRECTION('',(0.,0.,-1.)); #38221=DIRECTION('center_axis',(0.,1.,0.)); #38222=DIRECTION('ref_axis',(0.,0.,1.)); #38223=DIRECTION('',(-1.,0.,4.336808689942E-15)); #38224=DIRECTION('center_axis',(0.,1.,0.)); #38225=DIRECTION('ref_axis',(0.,0.,1.)); #38226=DIRECTION('',(1.,0.,-4.336808689942E-15)); #38227=DIRECTION('center_axis',(0.,1.,0.)); #38228=DIRECTION('ref_axis',(1.,0.,0.)); #38229=DIRECTION('center_axis',(0.,1.,0.)); #38230=DIRECTION('ref_axis',(0.,0.,1.)); #38231=DIRECTION('',(0.,0.,-1.)); #38232=DIRECTION('center_axis',(0.,1.,0.)); #38233=DIRECTION('ref_axis',(6.57255215422E-14,0.,1.)); #38234=DIRECTION('',(1.,0.,-4.336808689942E-15)); #38235=DIRECTION('center_axis',(0.,1.,0.)); #38236=DIRECTION('ref_axis',(0.,0.,1.)); #38237=DIRECTION('',(-1.,0.,0.)); #38238=DIRECTION('center_axis',(0.,1.,0.)); #38239=DIRECTION('ref_axis',(1.,0.,0.)); #38240=DIRECTION('center_axis',(0.,1.,0.)); #38241=DIRECTION('ref_axis',(0.,0.,1.)); #38242=DIRECTION('',(-1.,0.,0.)); #38243=DIRECTION('center_axis',(0.,1.,0.)); #38244=DIRECTION('ref_axis',(0.,0.,1.)); #38245=DIRECTION('',(1.,0.,-4.336808689942E-15)); #38246=DIRECTION('center_axis',(0.,1.,0.)); #38247=DIRECTION('ref_axis',(6.57255215422E-14,0.,1.)); #38248=DIRECTION('',(0.,0.,-1.)); #38249=DIRECTION('center_axis',(0.,1.,0.)); #38250=DIRECTION('ref_axis',(1.,0.,0.)); #38251=DIRECTION('center_axis',(0.,1.,0.)); #38252=DIRECTION('ref_axis',(-2.161827134136E-12,0.,1.)); #38253=DIRECTION('',(1.,0.,0.)); #38254=DIRECTION('center_axis',(0.,1.,0.)); #38255=DIRECTION('ref_axis',(0.,0.,1.)); #38256=DIRECTION('',(-1.,0.,0.)); #38257=DIRECTION('center_axis',(0.,1.,0.)); #38258=DIRECTION('ref_axis',(0.,0.,1.)); #38259=DIRECTION('',(0.,0.,-1.)); #38260=DIRECTION('center_axis',(0.,1.,0.)); #38261=DIRECTION('ref_axis',(1.,0.,0.)); #38262=DIRECTION('center_axis',(0.,1.,0.)); #38263=DIRECTION('ref_axis',(-2.161827134136E-12,0.,1.)); #38264=DIRECTION('',(0.,0.,-1.)); #38265=DIRECTION('center_axis',(0.,1.,0.)); #38266=DIRECTION('ref_axis',(0.,0.,1.)); #38267=DIRECTION('',(-1.,0.,0.)); #38268=DIRECTION('center_axis',(0.,1.,0.)); #38269=DIRECTION('ref_axis',(0.,0.,1.)); #38270=DIRECTION('',(1.,0.,0.)); #38271=DIRECTION('center_axis',(0.,1.,0.)); #38272=DIRECTION('ref_axis',(1.,0.,0.)); #38273=DIRECTION('center_axis',(0.,1.,0.)); #38274=DIRECTION('ref_axis',(0.,0.,1.)); #38275=DIRECTION('',(0.,0.,-1.)); #38276=DIRECTION('center_axis',(0.,1.,0.)); #38277=DIRECTION('ref_axis',(-3.81927155917E-14,0.,1.)); #38278=DIRECTION('',(1.,0.,0.)); #38279=DIRECTION('center_axis',(0.,1.,0.)); #38280=DIRECTION('ref_axis',(0.,0.,1.)); #38281=DIRECTION('',(-1.,0.,0.)); #38282=DIRECTION('center_axis',(0.,1.,0.)); #38283=DIRECTION('ref_axis',(1.,0.,0.)); #38284=DIRECTION('center_axis',(0.,1.,0.)); #38285=DIRECTION('ref_axis',(0.,0.,1.)); #38286=DIRECTION('',(-1.,0.,0.)); #38287=DIRECTION('center_axis',(0.,1.,0.)); #38288=DIRECTION('ref_axis',(0.,0.,1.)); #38289=DIRECTION('',(1.,0.,0.)); #38290=DIRECTION('center_axis',(0.,1.,0.)); #38291=DIRECTION('ref_axis',(-3.81927155917E-14,0.,1.)); #38292=DIRECTION('',(0.,0.,-1.)); #38293=DIRECTION('center_axis',(0.,1.,0.)); #38294=DIRECTION('ref_axis',(1.,0.,0.)); #38295=DIRECTION('center_axis',(0.,1.,0.)); #38296=DIRECTION('ref_axis',(1.421109527256E-14,0.,1.)); #38297=DIRECTION('',(1.,0.,0.)); #38298=DIRECTION('center_axis',(0.,1.,0.)); #38299=DIRECTION('ref_axis',(0.,0.,1.)); #38300=DIRECTION('',(-1.,0.,0.)); #38301=DIRECTION('center_axis',(0.,1.,0.)); #38302=DIRECTION('ref_axis',(0.,0.,1.)); #38303=DIRECTION('',(0.,0.,-1.)); #38304=DIRECTION('center_axis',(0.,1.,0.)); #38305=DIRECTION('ref_axis',(1.,0.,0.)); #38306=DIRECTION('center_axis',(0.,1.,0.)); #38307=DIRECTION('ref_axis',(1.421109527256E-14,0.,1.)); #38308=DIRECTION('',(0.,0.,-1.)); #38309=DIRECTION('center_axis',(0.,1.,0.)); #38310=DIRECTION('ref_axis',(0.,0.,1.)); #38311=DIRECTION('',(-1.,0.,0.)); #38312=DIRECTION('center_axis',(0.,1.,0.)); #38313=DIRECTION('ref_axis',(0.,0.,1.)); #38314=DIRECTION('',(1.,0.,0.)); #38315=DIRECTION('center_axis',(0.,1.,0.)); #38316=DIRECTION('ref_axis',(1.,0.,0.)); #38317=DIRECTION('',(-1.,0.,0.)); #38318=DIRECTION('',(0.,0.,-1.)); #38319=DIRECTION('',(0.,0.,-1.)); #38320=DIRECTION('',(0.,0.,-1.)); #38321=DIRECTION('',(1.,0.,0.)); #38322=DIRECTION('center_axis',(0.,1.,0.)); #38323=DIRECTION('ref_axis',(0.,0.,1.)); #38324=DIRECTION('',(0.,0.,-1.)); #38325=DIRECTION('center_axis',(0.,1.,0.)); #38326=DIRECTION('ref_axis',(0.,0.,1.)); #38327=DIRECTION('center_axis',(0.,1.,0.)); #38328=DIRECTION('ref_axis',(1.,0.,0.)); #38329=DIRECTION('',(-1.,0.,0.)); #38330=DIRECTION('center_axis',(0.,1.,0.)); #38331=DIRECTION('ref_axis',(0.,0.,1.)); #38332=DIRECTION('',(0.,0.,-1.)); #38333=DIRECTION('center_axis',(0.,1.,0.)); #38334=DIRECTION('ref_axis',(0.,0.,1.)); #38335=DIRECTION('',(1.,0.,0.)); #38336=DIRECTION('',(0.,0.,-1.)); #38337=DIRECTION('',(0.,0.,-1.)); #38338=DIRECTION('',(0.,0.,-1.)); #38339=DIRECTION('center_axis',(0.,1.,0.)); #38340=DIRECTION('ref_axis',(1.,0.,0.)); #38341=DIRECTION('center_axis',(0.,1.,0.)); #38342=DIRECTION('ref_axis',(-4.085663421081E-14,0.,1.)); #38343=DIRECTION('',(1.,0.,0.)); #38344=DIRECTION('center_axis',(0.,1.,0.)); #38345=DIRECTION('ref_axis',(0.,0.,1.)); #38346=DIRECTION('',(-1.,0.,0.)); #38347=DIRECTION('center_axis',(0.,1.,0.)); #38348=DIRECTION('ref_axis',(0.,0.,1.)); #38349=DIRECTION('',(0.,0.,-1.)); #38350=DIRECTION('center_axis',(0.,1.,0.)); #38351=DIRECTION('ref_axis',(1.,0.,0.)); #38352=DIRECTION('center_axis',(0.,1.,0.)); #38353=DIRECTION('ref_axis',(-4.085663421081E-14,0.,1.)); #38354=DIRECTION('',(0.,0.,-1.)); #38355=DIRECTION('center_axis',(0.,1.,0.)); #38356=DIRECTION('ref_axis',(0.,0.,1.)); #38357=DIRECTION('',(-1.,0.,0.)); #38358=DIRECTION('center_axis',(0.,1.,0.)); #38359=DIRECTION('ref_axis',(0.,0.,1.)); #38360=DIRECTION('',(1.,0.,0.)); #38361=DIRECTION('center_axis',(0.,1.,0.)); #38362=DIRECTION('ref_axis',(1.,0.,0.)); #38363=DIRECTION('',(0.,0.,1.)); #38364=DIRECTION('',(-1.,0.,0.)); #38365=DIRECTION('',(0.,0.,-1.)); #38366=DIRECTION('center_axis',(0.,1.,0.)); #38367=DIRECTION('ref_axis',(0.,0.,1.)); #38368=DIRECTION('center_axis',(0.,1.,0.)); #38369=DIRECTION('ref_axis',(1.,0.,0.)); #38370=DIRECTION('',(0.,0.,1.)); #38371=DIRECTION('center_axis',(0.,1.,0.)); #38372=DIRECTION('ref_axis',(0.,0.,1.)); #38373=DIRECTION('',(0.,0.,-1.)); #38374=DIRECTION('',(-1.,0.,0.)); #38375=DIRECTION('center_axis',(0.,0.,-1.)); #38376=DIRECTION('ref_axis',(0.,-1.,0.)); #38377=DIRECTION('',(0.,-1.,0.)); #38378=DIRECTION('',(-1.,0.,0.)); #38379=DIRECTION('',(0.,-1.,0.)); #38380=DIRECTION('',(-1.,0.,0.)); #38381=DIRECTION('center_axis',(0.,1.,0.)); #38382=DIRECTION('ref_axis',(1.,0.,0.)); #38383=DIRECTION('center_axis',(0.,1.,0.)); #38384=DIRECTION('ref_axis',(0.,0.,1.)); #38385=DIRECTION('center_axis',(0.,1.,0.)); #38386=DIRECTION('ref_axis',(1.,0.,0.)); #38387=DIRECTION('center_axis',(0.,1.,0.)); #38388=DIRECTION('ref_axis',(0.,0.,1.)); #38389=DIRECTION('center_axis',(0.,1.,0.)); #38390=DIRECTION('ref_axis',(1.,0.,0.)); #38391=DIRECTION('center_axis',(0.,1.,0.)); #38392=DIRECTION('ref_axis',(0.,0.,1.)); #38393=DIRECTION('center_axis',(0.,1.,0.)); #38394=DIRECTION('ref_axis',(1.,0.,0.)); #38395=DIRECTION('center_axis',(0.,1.,0.)); #38396=DIRECTION('ref_axis',(0.,0.,1.)); #38397=DIRECTION('center_axis',(1.,0.,0.)); #38398=DIRECTION('ref_axis',(0.,1.,0.)); #38399=DIRECTION('',(0.,0.,-1.)); #38400=DIRECTION('',(0.,0.,-1.)); #38401=DIRECTION('center_axis',(1.,0.,0.)); #38402=DIRECTION('ref_axis',(0.,1.,0.)); #38403=DIRECTION('',(0.,0.,-1.)); #38404=DIRECTION('',(0.,0.,-1.)); #38405=DIRECTION('',(0.,-1.,0.)); #38406=DIRECTION('center_axis',(1.,0.,0.)); #38407=DIRECTION('ref_axis',(0.,1.,0.)); #38408=DIRECTION('',(0.,0.,-1.)); #38409=DIRECTION('',(0.,0.,-1.)); #38410=DIRECTION('',(0.,-1.,0.)); #38411=DIRECTION('center_axis',(1.,0.,0.)); #38412=DIRECTION('ref_axis',(0.,1.,0.)); #38413=DIRECTION('',(0.,0.,-1.)); #38414=DIRECTION('',(0.,0.,-1.)); #38415=DIRECTION('',(0.,-1.,0.)); #38416=DIRECTION('center_axis',(1.,0.,0.)); #38417=DIRECTION('ref_axis',(0.,1.,0.)); #38418=DIRECTION('',(0.,0.,-1.)); #38419=DIRECTION('',(0.,0.,-1.)); #38420=DIRECTION('',(0.,-1.,0.)); #38421=DIRECTION('center_axis',(1.,0.,0.)); #38422=DIRECTION('ref_axis',(0.,1.,0.)); #38423=DIRECTION('',(0.,0.,-1.)); #38424=DIRECTION('',(0.,0.,-1.)); #38425=DIRECTION('',(0.,-1.,0.)); #38426=DIRECTION('center_axis',(1.,0.,0.)); #38427=DIRECTION('ref_axis',(0.,1.,0.)); #38428=DIRECTION('',(0.,0.,-1.)); #38429=DIRECTION('',(0.,0.,-1.)); #38430=DIRECTION('',(0.,-1.,0.)); #38431=DIRECTION('center_axis',(1.,0.,0.)); #38432=DIRECTION('ref_axis',(0.,1.,0.)); #38433=DIRECTION('',(0.,0.,-1.)); #38434=DIRECTION('',(0.,0.,-1.)); #38435=DIRECTION('',(0.,-1.,0.)); #38436=DIRECTION('center_axis',(1.,0.,0.)); #38437=DIRECTION('ref_axis',(0.,1.,0.)); #38438=DIRECTION('',(0.,0.,-1.)); #38439=DIRECTION('',(0.,0.,-1.)); #38440=DIRECTION('',(0.,-1.,0.)); #38441=DIRECTION('center_axis',(1.,0.,0.)); #38442=DIRECTION('ref_axis',(0.,1.,0.)); #38443=DIRECTION('',(0.,0.,-1.)); #38444=DIRECTION('',(0.,0.,-1.)); #38445=DIRECTION('',(0.,-1.,0.)); #38446=DIRECTION('center_axis',(1.,0.,0.)); #38447=DIRECTION('ref_axis',(0.,1.,0.)); #38448=DIRECTION('',(0.,0.,-1.)); #38449=DIRECTION('',(0.,0.,-1.)); #38450=DIRECTION('',(0.,-1.,0.)); #38451=DIRECTION('center_axis',(1.,0.,0.)); #38452=DIRECTION('ref_axis',(0.,1.,0.)); #38453=DIRECTION('',(0.,0.,-1.)); #38454=DIRECTION('',(0.,0.,-1.)); #38455=DIRECTION('',(0.,-1.,0.)); #38456=DIRECTION('center_axis',(1.,0.,0.)); #38457=DIRECTION('ref_axis',(0.,1.,0.)); #38458=DIRECTION('',(0.,0.,-1.)); #38459=DIRECTION('',(0.,0.,-1.)); #38460=DIRECTION('',(0.,-1.,0.)); #38461=DIRECTION('center_axis',(1.,0.,0.)); #38462=DIRECTION('ref_axis',(0.,1.,0.)); #38463=DIRECTION('',(0.,0.,-1.)); #38464=DIRECTION('',(0.,0.,-1.)); #38465=DIRECTION('',(0.,-1.,0.)); #38466=DIRECTION('center_axis',(1.,0.,0.)); #38467=DIRECTION('ref_axis',(0.,1.,0.)); #38468=DIRECTION('',(0.,0.,-1.)); #38469=DIRECTION('',(0.,0.,-1.)); #38470=DIRECTION('',(0.,-1.,0.)); #38471=DIRECTION('center_axis',(1.,0.,0.)); #38472=DIRECTION('ref_axis',(0.,1.,0.)); #38473=DIRECTION('',(0.,0.,-1.)); #38474=DIRECTION('',(0.,0.,-1.)); #38475=DIRECTION('',(0.,-1.,0.)); #38476=DIRECTION('center_axis',(1.,0.,0.)); #38477=DIRECTION('ref_axis',(0.,1.,0.)); #38478=DIRECTION('',(0.,0.,-1.)); #38479=DIRECTION('',(0.,0.,-1.)); #38480=DIRECTION('',(0.,-1.,0.)); #38481=DIRECTION('center_axis',(1.,0.,0.)); #38482=DIRECTION('ref_axis',(0.,1.,0.)); #38483=DIRECTION('',(0.,0.,-1.)); #38484=DIRECTION('',(0.,0.,-1.)); #38485=DIRECTION('',(0.,-1.,0.)); #38486=DIRECTION('center_axis',(1.,0.,0.)); #38487=DIRECTION('ref_axis',(0.,1.,0.)); #38488=DIRECTION('',(0.,0.,-1.)); #38489=DIRECTION('',(0.,0.,-1.)); #38490=DIRECTION('',(0.,-1.,0.)); #38491=DIRECTION('center_axis',(1.,0.,0.)); #38492=DIRECTION('ref_axis',(0.,1.,0.)); #38493=DIRECTION('',(0.,0.,-1.)); #38494=DIRECTION('',(0.,0.,-1.)); #38495=DIRECTION('',(0.,-1.,0.)); #38496=DIRECTION('center_axis',(1.,0.,0.)); #38497=DIRECTION('ref_axis',(0.,1.,0.)); #38498=DIRECTION('center_axis',(1.,0.,0.)); #38499=DIRECTION('ref_axis',(0.,1.,0.)); #38500=DIRECTION('center_axis',(1.,0.,0.)); #38501=DIRECTION('ref_axis',(0.,1.,0.)); #38502=DIRECTION('center_axis',(1.,0.,0.)); #38503=DIRECTION('ref_axis',(0.,1.,0.)); #38504=DIRECTION('center_axis',(1.,0.,0.)); #38505=DIRECTION('ref_axis',(0.,1.,0.)); #38506=DIRECTION('center_axis',(1.,0.,0.)); #38507=DIRECTION('ref_axis',(0.,1.,0.)); #38508=DIRECTION('center_axis',(1.,0.,0.)); #38509=DIRECTION('ref_axis',(0.,1.,0.)); #38510=DIRECTION('center_axis',(1.,0.,0.)); #38511=DIRECTION('ref_axis',(0.,1.,0.)); #38512=DIRECTION('center_axis',(1.,0.,0.)); #38513=DIRECTION('ref_axis',(0.,1.,0.)); #38514=DIRECTION('center_axis',(1.,0.,0.)); #38515=DIRECTION('ref_axis',(0.,1.,0.)); #38516=DIRECTION('center_axis',(1.,0.,0.)); #38517=DIRECTION('ref_axis',(0.,1.,0.)); #38518=DIRECTION('center_axis',(1.,0.,0.)); #38519=DIRECTION('ref_axis',(0.,1.,0.)); #38520=DIRECTION('center_axis',(1.,0.,0.)); #38521=DIRECTION('ref_axis',(0.,1.,0.)); #38522=DIRECTION('center_axis',(1.,0.,0.)); #38523=DIRECTION('ref_axis',(0.,1.,0.)); #38524=DIRECTION('center_axis',(1.,0.,0.)); #38525=DIRECTION('ref_axis',(0.,1.,0.)); #38526=DIRECTION('center_axis',(1.,0.,0.)); #38527=DIRECTION('ref_axis',(0.,1.,0.)); #38528=DIRECTION('center_axis',(1.,0.,0.)); #38529=DIRECTION('ref_axis',(0.,1.,0.)); #38530=DIRECTION('center_axis',(1.,0.,0.)); #38531=DIRECTION('ref_axis',(0.,1.,0.)); #38532=DIRECTION('center_axis',(1.,0.,0.)); #38533=DIRECTION('ref_axis',(0.,1.,0.)); #38534=DIRECTION('center_axis',(1.,0.,0.)); #38535=DIRECTION('ref_axis',(0.,1.,0.)); #38536=DIRECTION('center_axis',(0.,1.,0.)); #38537=DIRECTION('ref_axis',(0.,0.,1.)); #38538=DIRECTION('center_axis',(0.,1.,0.)); #38539=DIRECTION('ref_axis',(0.,0.,1.)); #38540=DIRECTION('',(0.,1.,0.)); #38541=DIRECTION('center_axis',(0.,1.,0.)); #38542=DIRECTION('ref_axis',(0.,0.,1.)); #38543=DIRECTION('center_axis',(0.,1.,0.)); #38544=DIRECTION('ref_axis',(0.,0.,1.)); #38545=DIRECTION('center_axis',(0.,1.,0.)); #38546=DIRECTION('ref_axis',(0.,0.,1.)); #38547=DIRECTION('',(0.,1.,0.)); #38548=DIRECTION('center_axis',(0.,1.,0.)); #38549=DIRECTION('ref_axis',(0.,0.,1.)); #38550=DIRECTION('center_axis',(0.,1.,0.)); #38551=DIRECTION('ref_axis',(0.,0.,1.)); #38552=DIRECTION('center_axis',(0.,1.,0.)); #38553=DIRECTION('ref_axis',(0.,0.,1.)); #38554=DIRECTION('',(0.,1.,0.)); #38555=DIRECTION('center_axis',(0.,1.,0.)); #38556=DIRECTION('ref_axis',(0.,0.,1.)); #38557=DIRECTION('center_axis',(0.,1.,0.)); #38558=DIRECTION('ref_axis',(0.,0.,1.)); #38559=DIRECTION('center_axis',(0.,1.,0.)); #38560=DIRECTION('ref_axis',(0.,0.,1.)); #38561=DIRECTION('',(0.,1.,0.)); #38562=DIRECTION('center_axis',(0.,1.,0.)); #38563=DIRECTION('ref_axis',(0.,0.,1.)); #38564=DIRECTION('center_axis',(0.,1.,0.)); #38565=DIRECTION('ref_axis',(1.22464679914735E-16,0.,-1.)); #38566=DIRECTION('',(0.,-1.,0.)); #38567=DIRECTION('center_axis',(0.,1.,0.)); #38568=DIRECTION('ref_axis',(0.,0.,1.)); #38569=DIRECTION('center_axis',(0.,1.,0.)); #38570=DIRECTION('ref_axis',(0.,0.,1.)); #38571=DIRECTION('center_axis',(0.,1.,0.)); #38572=DIRECTION('ref_axis',(-1.22464679914735E-16,0.,-1.)); #38573=DIRECTION('',(0.,1.,0.)); #38574=DIRECTION('center_axis',(0.,1.,0.)); #38575=DIRECTION('ref_axis',(0.,0.,1.)); #38576=DIRECTION('',(0.,-1.,0.)); #38577=DIRECTION('center_axis',(0.,1.,0.)); #38578=DIRECTION('ref_axis',(0.,0.,1.)); #38579=DIRECTION('center_axis',(0.,1.,0.)); #38580=DIRECTION('ref_axis',(0.,0.,1.)); #38581=DIRECTION('center_axis',(0.,-1.,0.)); #38582=DIRECTION('ref_axis',(0.,0.,1.)); #38583=DIRECTION('',(0.,1.,0.)); #38584=DIRECTION('center_axis',(0.,-1.,0.)); #38585=DIRECTION('ref_axis',(0.,0.,1.)); #38586=DIRECTION('center_axis',(0.,1.,0.)); #38587=DIRECTION('ref_axis',(0.,0.,1.)); #38588=DIRECTION('center_axis',(0.,-1.,0.)); #38589=DIRECTION('ref_axis',(0.,0.,1.)); #38590=DIRECTION('',(0.,1.,0.)); #38591=DIRECTION('center_axis',(0.,-1.,0.)); #38592=DIRECTION('ref_axis',(0.,0.,1.)); #38593=DIRECTION('center_axis',(0.,1.,0.)); #38594=DIRECTION('ref_axis',(0.,0.,1.)); #38595=DIRECTION('center_axis',(0.,-1.,0.)); #38596=DIRECTION('ref_axis',(0.,0.,1.)); #38597=DIRECTION('',(0.,1.,0.)); #38598=DIRECTION('center_axis',(0.,-1.,0.)); #38599=DIRECTION('ref_axis',(0.,0.,1.)); #38600=DIRECTION('center_axis',(0.,1.,0.)); #38601=DIRECTION('ref_axis',(0.,0.,1.)); #38602=DIRECTION('center_axis',(0.,-1.,0.)); #38603=DIRECTION('ref_axis',(0.,0.,1.)); #38604=DIRECTION('',(0.,1.,0.)); #38605=DIRECTION('center_axis',(0.,-1.,0.)); #38606=DIRECTION('ref_axis',(0.,0.,1.)); #38607=DIRECTION('center_axis',(0.,1.,0.)); #38608=DIRECTION('ref_axis',(0.,0.,1.)); #38609=DIRECTION('center_axis',(0.,-1.,0.)); #38610=DIRECTION('ref_axis',(0.,0.,1.)); #38611=DIRECTION('',(0.,1.,0.)); #38612=DIRECTION('center_axis',(0.,-1.,0.)); #38613=DIRECTION('ref_axis',(0.,0.,1.)); #38614=DIRECTION('center_axis',(0.,1.,0.)); #38615=DIRECTION('ref_axis',(0.,0.,1.)); #38616=DIRECTION('center_axis',(0.,-1.,0.)); #38617=DIRECTION('ref_axis',(0.,0.,1.)); #38618=DIRECTION('',(0.,1.,0.)); #38619=DIRECTION('center_axis',(0.,-1.,0.)); #38620=DIRECTION('ref_axis',(0.,0.,1.)); #38621=DIRECTION('center_axis',(0.,1.,0.)); #38622=DIRECTION('ref_axis',(0.,0.,1.)); #38623=DIRECTION('center_axis',(0.,-1.,0.)); #38624=DIRECTION('ref_axis',(0.,0.,1.)); #38625=DIRECTION('',(0.,1.,0.)); #38626=DIRECTION('center_axis',(0.,-1.,0.)); #38627=DIRECTION('ref_axis',(0.,0.,1.)); #38628=DIRECTION('center_axis',(0.,1.,0.)); #38629=DIRECTION('ref_axis',(0.,0.,1.)); #38630=DIRECTION('center_axis',(0.,-1.,0.)); #38631=DIRECTION('ref_axis',(0.,0.,1.)); #38632=DIRECTION('',(0.,1.,0.)); #38633=DIRECTION('center_axis',(0.,-1.,0.)); #38634=DIRECTION('ref_axis',(0.,0.,1.)); #38635=DIRECTION('center_axis',(0.,1.,0.)); #38636=DIRECTION('ref_axis',(0.,0.,1.)); #38637=DIRECTION('center_axis',(0.,-1.,0.)); #38638=DIRECTION('ref_axis',(0.,0.,1.)); #38639=DIRECTION('',(0.,1.,0.)); #38640=DIRECTION('center_axis',(0.,-1.,0.)); #38641=DIRECTION('ref_axis',(0.,0.,1.)); #38642=DIRECTION('center_axis',(0.,1.,0.)); #38643=DIRECTION('ref_axis',(0.,0.,1.)); #38644=DIRECTION('center_axis',(0.,-1.,0.)); #38645=DIRECTION('ref_axis',(0.,0.,1.)); #38646=DIRECTION('',(0.,1.,0.)); #38647=DIRECTION('center_axis',(0.,-1.,0.)); #38648=DIRECTION('ref_axis',(0.,0.,1.)); #38649=DIRECTION('center_axis',(0.,1.,0.)); #38650=DIRECTION('ref_axis',(0.,0.,1.)); #38651=DIRECTION('center_axis',(0.,-1.,0.)); #38652=DIRECTION('ref_axis',(0.,0.,1.)); #38653=DIRECTION('',(0.,1.,0.)); #38654=DIRECTION('center_axis',(0.,-1.,0.)); #38655=DIRECTION('ref_axis',(0.,0.,1.)); #38656=DIRECTION('center_axis',(0.,1.,0.)); #38657=DIRECTION('ref_axis',(0.,0.,1.)); #38658=DIRECTION('center_axis',(0.,-1.,0.)); #38659=DIRECTION('ref_axis',(0.,0.,1.)); #38660=DIRECTION('',(0.,1.,0.)); #38661=DIRECTION('center_axis',(0.,-1.,0.)); #38662=DIRECTION('ref_axis',(0.,0.,1.)); #38663=DIRECTION('center_axis',(0.,1.,0.)); #38664=DIRECTION('ref_axis',(0.,0.,1.)); #38665=DIRECTION('center_axis',(0.,-1.,0.)); #38666=DIRECTION('ref_axis',(0.,0.,1.)); #38667=DIRECTION('',(0.,1.,0.)); #38668=DIRECTION('center_axis',(0.,-1.,0.)); #38669=DIRECTION('ref_axis',(0.,0.,1.)); #38670=DIRECTION('center_axis',(0.,1.,0.)); #38671=DIRECTION('ref_axis',(0.,0.,1.)); #38672=DIRECTION('center_axis',(0.,-1.,0.)); #38673=DIRECTION('ref_axis',(0.,0.,1.)); #38674=DIRECTION('',(0.,1.,0.)); #38675=DIRECTION('center_axis',(0.,-1.,0.)); #38676=DIRECTION('ref_axis',(0.,0.,1.)); #38677=DIRECTION('center_axis',(0.,1.,0.)); #38678=DIRECTION('ref_axis',(0.,0.,1.)); #38679=DIRECTION('center_axis',(0.,-1.,0.)); #38680=DIRECTION('ref_axis',(0.,0.,1.)); #38681=DIRECTION('',(0.,1.,0.)); #38682=DIRECTION('center_axis',(0.,-1.,0.)); #38683=DIRECTION('ref_axis',(0.,0.,1.)); #38684=DIRECTION('center_axis',(0.,1.,0.)); #38685=DIRECTION('ref_axis',(0.,0.,1.)); #38686=DIRECTION('center_axis',(0.,-1.,0.)); #38687=DIRECTION('ref_axis',(0.,0.,1.)); #38688=DIRECTION('',(0.,1.,0.)); #38689=DIRECTION('center_axis',(0.,-1.,0.)); #38690=DIRECTION('ref_axis',(0.,0.,1.)); #38691=DIRECTION('center_axis',(0.,1.,0.)); #38692=DIRECTION('ref_axis',(0.,0.,1.)); #38693=DIRECTION('center_axis',(0.,-1.,0.)); #38694=DIRECTION('ref_axis',(0.,0.,1.)); #38695=DIRECTION('',(0.,1.,0.)); #38696=DIRECTION('center_axis',(0.,-1.,0.)); #38697=DIRECTION('ref_axis',(0.,0.,1.)); #38698=DIRECTION('center_axis',(0.,1.,0.)); #38699=DIRECTION('ref_axis',(0.,0.,1.)); #38700=DIRECTION('center_axis',(0.,-1.,0.)); #38701=DIRECTION('ref_axis',(0.,0.,1.)); #38702=DIRECTION('',(0.,1.,0.)); #38703=DIRECTION('center_axis',(0.,-1.,0.)); #38704=DIRECTION('ref_axis',(0.,0.,1.)); #38705=DIRECTION('center_axis',(0.,1.,0.)); #38706=DIRECTION('ref_axis',(0.,0.,1.)); #38707=DIRECTION('center_axis',(0.,-1.,0.)); #38708=DIRECTION('ref_axis',(0.,0.,1.)); #38709=DIRECTION('',(0.,1.,0.)); #38710=DIRECTION('center_axis',(0.,-1.,0.)); #38711=DIRECTION('ref_axis',(0.,0.,1.)); #38712=DIRECTION('center_axis',(0.,1.,0.)); #38713=DIRECTION('ref_axis',(0.,0.,1.)); #38714=DIRECTION('center_axis',(0.,-1.,0.)); #38715=DIRECTION('ref_axis',(0.,0.,1.)); #38716=DIRECTION('',(0.,1.,0.)); #38717=DIRECTION('center_axis',(0.,-1.,0.)); #38718=DIRECTION('ref_axis',(0.,0.,1.)); #38719=DIRECTION('center_axis',(0.,0.,-1.)); #38720=DIRECTION('ref_axis',(0.,-1.,0.)); #38721=DIRECTION('',(0.,-1.,0.)); #38722=DIRECTION('',(1.,0.,0.)); #38723=DIRECTION('',(0.,-1.,0.)); #38724=DIRECTION('',(1.,0.,0.)); #38725=DIRECTION('center_axis',(0.,0.,1.)); #38726=DIRECTION('ref_axis',(1.,0.,0.)); #38727=DIRECTION('',(0.,-1.,0.)); #38728=DIRECTION('',(-1.,0.,0.)); #38729=DIRECTION('',(-1.,0.,0.)); #38730=DIRECTION('center_axis',(0.,-1.,0.)); #38731=DIRECTION('ref_axis',(0.,0.,-1.)); #38732=DIRECTION('center_axis',(0.,1.,0.)); #38733=DIRECTION('ref_axis',(0.,0.,-1.)); #38734=DIRECTION('center_axis',(0.,1.,0.)); #38735=DIRECTION('ref_axis',(0.,0.,-1.)); #38736=DIRECTION('',(0.,-1.,0.)); #38737=DIRECTION('center_axis',(0.,-1.,0.)); #38738=DIRECTION('ref_axis',(0.,0.,-1.)); #38739=DIRECTION('center_axis',(0.,1.,0.)); #38740=DIRECTION('ref_axis',(0.,0.,1.)); #38741=DIRECTION('',(0.,-1.,0.)); #38742=DIRECTION('center_axis',(0.,1.,0.)); #38743=DIRECTION('ref_axis',(0.,0.,1.)); #38744=DIRECTION('center_axis',(-1.,0.,0.)); #38745=DIRECTION('ref_axis',(0.,0.,1.)); #38746=DIRECTION('',(0.,0.,-1.)); #38747=DIRECTION('',(0.,-1.,0.)); #38748=DIRECTION('',(0.,0.,-1.)); #38749=DIRECTION('center_axis',(-1.,0.,0.)); #38750=DIRECTION('ref_axis',(0.,0.,1.)); #38751=DIRECTION('',(0.,-1.,0.)); #38752=DIRECTION('',(0.,0.,-1.)); #38753=DIRECTION('',(0.,-1.,0.)); #38754=DIRECTION('',(0.,0.,-1.)); #38755=DIRECTION('center_axis',(-1.,0.,0.)); #38756=DIRECTION('ref_axis',(0.,0.,1.)); #38757=DIRECTION('',(0.,-1.,0.)); #38758=DIRECTION('',(0.,0.,-1.)); #38759=DIRECTION('',(0.,-1.,0.)); #38760=DIRECTION('',(0.,0.,-1.)); #38761=DIRECTION('center_axis',(-1.,0.,0.)); #38762=DIRECTION('ref_axis',(0.,0.,1.)); #38763=DIRECTION('',(0.,-1.,0.)); #38764=DIRECTION('',(0.,0.,-1.)); #38765=DIRECTION('',(0.,-1.,0.)); #38766=DIRECTION('',(0.,0.,-1.)); #38767=DIRECTION('center_axis',(-1.,0.,0.)); #38768=DIRECTION('ref_axis',(0.,0.,1.)); #38769=DIRECTION('',(0.,-1.,0.)); #38770=DIRECTION('',(0.,0.,-1.)); #38771=DIRECTION('',(0.,-1.,0.)); #38772=DIRECTION('',(0.,0.,-1.)); #38773=DIRECTION('center_axis',(-1.,0.,0.)); #38774=DIRECTION('ref_axis',(0.,0.,1.)); #38775=DIRECTION('',(0.,-1.,0.)); #38776=DIRECTION('',(0.,0.,-1.)); #38777=DIRECTION('',(0.,-1.,0.)); #38778=DIRECTION('',(0.,0.,-1.)); #38779=DIRECTION('center_axis',(-1.,0.,0.)); #38780=DIRECTION('ref_axis',(0.,0.,1.)); #38781=DIRECTION('',(0.,-1.,0.)); #38782=DIRECTION('',(0.,0.,-1.)); #38783=DIRECTION('',(0.,-1.,0.)); #38784=DIRECTION('',(0.,0.,-1.)); #38785=DIRECTION('center_axis',(-1.,0.,0.)); #38786=DIRECTION('ref_axis',(0.,0.,1.)); #38787=DIRECTION('',(0.,-1.,0.)); #38788=DIRECTION('',(0.,0.,-1.)); #38789=DIRECTION('',(0.,-1.,0.)); #38790=DIRECTION('',(0.,0.,-1.)); #38791=DIRECTION('center_axis',(-1.,0.,0.)); #38792=DIRECTION('ref_axis',(0.,0.,1.)); #38793=DIRECTION('',(0.,-1.,0.)); #38794=DIRECTION('',(0.,0.,-1.)); #38795=DIRECTION('',(0.,-1.,0.)); #38796=DIRECTION('',(0.,0.,-1.)); #38797=DIRECTION('center_axis',(-1.,0.,0.)); #38798=DIRECTION('ref_axis',(0.,0.,1.)); #38799=DIRECTION('',(0.,-1.,0.)); #38800=DIRECTION('',(0.,0.,-1.)); #38801=DIRECTION('',(0.,-1.,0.)); #38802=DIRECTION('',(0.,0.,-1.)); #38803=DIRECTION('center_axis',(-1.,0.,0.)); #38804=DIRECTION('ref_axis',(0.,0.,1.)); #38805=DIRECTION('',(0.,-1.,0.)); #38806=DIRECTION('',(0.,0.,-1.)); #38807=DIRECTION('',(0.,-1.,0.)); #38808=DIRECTION('',(0.,0.,-1.)); #38809=DIRECTION('center_axis',(-1.,0.,0.)); #38810=DIRECTION('ref_axis',(0.,0.,1.)); #38811=DIRECTION('',(0.,-1.,0.)); #38812=DIRECTION('',(0.,0.,-1.)); #38813=DIRECTION('',(0.,-1.,0.)); #38814=DIRECTION('',(0.,0.,-1.)); #38815=DIRECTION('center_axis',(-1.,0.,0.)); #38816=DIRECTION('ref_axis',(0.,0.,1.)); #38817=DIRECTION('',(0.,-1.,0.)); #38818=DIRECTION('',(0.,0.,-1.)); #38819=DIRECTION('',(0.,-1.,0.)); #38820=DIRECTION('',(0.,0.,-1.)); #38821=DIRECTION('center_axis',(-1.,0.,0.)); #38822=DIRECTION('ref_axis',(0.,0.,1.)); #38823=DIRECTION('',(0.,-1.,0.)); #38824=DIRECTION('',(0.,0.,-1.)); #38825=DIRECTION('',(0.,-1.,0.)); #38826=DIRECTION('',(0.,0.,-1.)); #38827=DIRECTION('center_axis',(-1.,0.,0.)); #38828=DIRECTION('ref_axis',(0.,0.,1.)); #38829=DIRECTION('',(0.,-1.,0.)); #38830=DIRECTION('',(0.,0.,-1.)); #38831=DIRECTION('',(0.,-1.,0.)); #38832=DIRECTION('',(0.,0.,-1.)); #38833=DIRECTION('center_axis',(-1.,0.,0.)); #38834=DIRECTION('ref_axis',(0.,0.,1.)); #38835=DIRECTION('',(0.,-1.,0.)); #38836=DIRECTION('',(0.,0.,-1.)); #38837=DIRECTION('',(0.,-1.,0.)); #38838=DIRECTION('',(0.,0.,-1.)); #38839=DIRECTION('center_axis',(-1.,0.,0.)); #38840=DIRECTION('ref_axis',(0.,0.,1.)); #38841=DIRECTION('',(0.,-1.,0.)); #38842=DIRECTION('',(0.,0.,-1.)); #38843=DIRECTION('',(0.,-1.,0.)); #38844=DIRECTION('',(0.,0.,-1.)); #38845=DIRECTION('center_axis',(-1.,0.,0.)); #38846=DIRECTION('ref_axis',(0.,0.,1.)); #38847=DIRECTION('',(0.,-1.,0.)); #38848=DIRECTION('',(0.,0.,-1.)); #38849=DIRECTION('',(0.,-1.,0.)); #38850=DIRECTION('',(0.,0.,-1.)); #38851=DIRECTION('center_axis',(-1.,0.,0.)); #38852=DIRECTION('ref_axis',(0.,0.,1.)); #38853=DIRECTION('',(0.,-1.,0.)); #38854=DIRECTION('',(0.,0.,-1.)); #38855=DIRECTION('',(0.,-1.,0.)); #38856=DIRECTION('',(0.,0.,-1.)); #38857=DIRECTION('center_axis',(-1.,0.,0.)); #38858=DIRECTION('ref_axis',(0.,0.,1.)); #38859=DIRECTION('',(0.,-1.,0.)); #38860=DIRECTION('',(0.,0.,-1.)); #38861=DIRECTION('',(0.,-1.,0.)); #38862=DIRECTION('',(0.,0.,-1.)); #38863=DIRECTION('center_axis',(-1.,0.,0.)); #38864=DIRECTION('ref_axis',(0.,0.,1.)); #38865=DIRECTION('',(0.,-1.,0.)); #38866=DIRECTION('',(0.,0.,-1.)); #38867=DIRECTION('',(0.,-1.,0.)); #38868=DIRECTION('',(0.,0.,-1.)); #38869=DIRECTION('center_axis',(0.,1.,0.)); #38870=DIRECTION('ref_axis',(1.,0.,0.)); #38871=DIRECTION('center_axis',(0.,-1.,0.)); #38872=DIRECTION('ref_axis',(-5.551115123126E-14,0.,1.)); #38873=DIRECTION('',(0.,0.,-1.)); #38874=DIRECTION('center_axis',(0.,-1.,0.)); #38875=DIRECTION('ref_axis',(0.,0.,1.)); #38876=DIRECTION('center_axis',(0.,1.,0.)); #38877=DIRECTION('ref_axis',(1.,0.,0.)); #38878=DIRECTION('center_axis',(0.,-1.,0.)); #38879=DIRECTION('ref_axis',(-5.551115123126E-14,0.,1.)); #38880=DIRECTION('center_axis',(0.,-1.,0.)); #38881=DIRECTION('ref_axis',(0.,0.,1.)); #38882=DIRECTION('',(0.,0.,-1.)); #38883=DIRECTION('center_axis',(0.,1.,0.)); #38884=DIRECTION('ref_axis',(1.,0.,0.)); #38885=DIRECTION('',(1.,0.,0.)); #38886=DIRECTION('center_axis',(0.,-1.,0.)); #38887=DIRECTION('ref_axis',(0.,0.,1.)); #38888=DIRECTION('',(5.782411586589E-15,0.,-1.)); #38889=DIRECTION('center_axis',(0.,-1.,0.)); #38890=DIRECTION('ref_axis',(0.,0.,1.)); #38891=DIRECTION('',(-1.,0.,0.)); #38892=DIRECTION('',(0.,0.,-1.)); #38893=DIRECTION('center_axis',(0.,-1.,0.)); #38894=DIRECTION('ref_axis',(9.020562075079E-14,0.,1.)); #38895=DIRECTION('',(0.,0.,-1.)); #38896=DIRECTION('',(0.,0.,-1.)); #38897=DIRECTION('center_axis',(0.,1.,0.)); #38898=DIRECTION('ref_axis',(1.,0.,0.)); #38899=DIRECTION('',(5.782411586589E-15,0.,-1.)); #38900=DIRECTION('center_axis',(0.,-1.,0.)); #38901=DIRECTION('ref_axis',(0.,0.,1.)); #38902=DIRECTION('',(1.,0.,0.)); #38903=DIRECTION('',(0.,0.,-1.)); #38904=DIRECTION('',(0.,0.,-1.)); #38905=DIRECTION('center_axis',(0.,-1.,0.)); #38906=DIRECTION('ref_axis',(9.020562075079E-14,0.,1.)); #38907=DIRECTION('',(0.,0.,-1.)); #38908=DIRECTION('',(-1.,0.,0.)); #38909=DIRECTION('center_axis',(0.,-1.,0.)); #38910=DIRECTION('ref_axis',(0.,0.,1.)); #38911=DIRECTION('center_axis',(0.,1.,0.)); #38912=DIRECTION('ref_axis',(1.,0.,0.)); #38913=DIRECTION('center_axis',(0.,-1.,0.)); #38914=DIRECTION('ref_axis',(0.,0.,1.)); #38915=DIRECTION('center_axis',(0.,-1.,0.)); #38916=DIRECTION('ref_axis',(0.,0.,1.)); #38917=DIRECTION('',(0.,0.,-1.)); #38918=DIRECTION('center_axis',(0.,1.,0.)); #38919=DIRECTION('ref_axis',(1.,0.,0.)); #38920=DIRECTION('center_axis',(0.,-1.,0.)); #38921=DIRECTION('ref_axis',(0.,0.,1.)); #38922=DIRECTION('',(0.,0.,-1.)); #38923=DIRECTION('center_axis',(0.,-1.,0.)); #38924=DIRECTION('ref_axis',(0.,0.,1.)); #38925=DIRECTION('center_axis',(0.,1.,0.)); #38926=DIRECTION('ref_axis',(1.,0.,0.)); #38927=DIRECTION('center_axis',(0.,-1.,0.)); #38928=DIRECTION('ref_axis',(-1.318389841742E-13,0.,1.)); #38929=DIRECTION('',(0.,0.,-1.)); #38930=DIRECTION('center_axis',(0.,-1.,0.)); #38931=DIRECTION('ref_axis',(0.,0.,1.)); #38932=DIRECTION('center_axis',(0.,1.,0.)); #38933=DIRECTION('ref_axis',(1.,0.,0.)); #38934=DIRECTION('center_axis',(0.,-1.,0.)); #38935=DIRECTION('ref_axis',(-1.318389841742E-13,0.,1.)); #38936=DIRECTION('center_axis',(0.,-1.,0.)); #38937=DIRECTION('ref_axis',(0.,0.,1.)); #38938=DIRECTION('',(0.,0.,-1.)); #38939=DIRECTION('center_axis',(0.,1.,0.)); #38940=DIRECTION('ref_axis',(1.,0.,0.)); #38941=DIRECTION('',(-1.,0.,0.)); #38942=DIRECTION('',(0.,0.,-1.)); #38943=DIRECTION('center_axis',(0.,-1.,0.)); #38944=DIRECTION('ref_axis',(-1.318389841742E-13,0.,1.)); #38945=DIRECTION('',(0.,0.,-1.)); #38946=DIRECTION('',(0.,0.,-1.)); #38947=DIRECTION('',(1.,0.,0.)); #38948=DIRECTION('center_axis',(0.,-1.,0.)); #38949=DIRECTION('ref_axis',(0.,0.,1.)); #38950=DIRECTION('',(0.,0.,-1.)); #38951=DIRECTION('center_axis',(0.,-1.,0.)); #38952=DIRECTION('ref_axis',(0.,0.,1.)); #38953=DIRECTION('center_axis',(0.,1.,0.)); #38954=DIRECTION('ref_axis',(1.,0.,0.)); #38955=DIRECTION('',(0.,0.,-1.)); #38956=DIRECTION('',(-1.,0.,0.)); #38957=DIRECTION('center_axis',(0.,-1.,0.)); #38958=DIRECTION('ref_axis',(0.,0.,1.)); #38959=DIRECTION('',(0.,0.,-1.)); #38960=DIRECTION('center_axis',(0.,-1.,0.)); #38961=DIRECTION('ref_axis',(0.,0.,1.)); #38962=DIRECTION('',(1.,0.,0.)); #38963=DIRECTION('',(0.,0.,-1.)); #38964=DIRECTION('',(0.,0.,-1.)); #38965=DIRECTION('center_axis',(0.,-1.,0.)); #38966=DIRECTION('ref_axis',(-1.318389841742E-13,0.,1.)); #38967=DIRECTION('center_axis',(0.,1.,0.)); #38968=DIRECTION('ref_axis',(1.,0.,0.)); #38969=DIRECTION('center_axis',(0.,-1.,0.)); #38970=DIRECTION('ref_axis',(0.,0.,1.)); #38971=DIRECTION('center_axis',(0.,-1.,0.)); #38972=DIRECTION('ref_axis',(4.857225732735E-14,0.,1.)); #38973=DIRECTION('',(0.,0.,-1.)); #38974=DIRECTION('center_axis',(0.,1.,0.)); #38975=DIRECTION('ref_axis',(1.,0.,0.)); #38976=DIRECTION('center_axis',(0.,-1.,0.)); #38977=DIRECTION('ref_axis',(0.,0.,1.)); #38978=DIRECTION('',(0.,0.,-1.)); #38979=DIRECTION('center_axis',(0.,-1.,0.)); #38980=DIRECTION('ref_axis',(4.857225732735E-14,0.,1.)); #38981=DIRECTION('center_axis',(0.,1.,0.)); #38982=DIRECTION('ref_axis',(1.,0.,0.)); #38983=DIRECTION('center_axis',(0.,-1.,0.)); #38984=DIRECTION('ref_axis',(-9.71445146547E-14,0.,1.)); #38985=DIRECTION('',(0.,0.,-1.)); #38986=DIRECTION('center_axis',(0.,-1.,0.)); #38987=DIRECTION('ref_axis',(0.,0.,1.)); #38988=DIRECTION('center_axis',(0.,1.,0.)); #38989=DIRECTION('ref_axis',(1.,0.,0.)); #38990=DIRECTION('center_axis',(0.,-1.,0.)); #38991=DIRECTION('ref_axis',(-9.71445146547E-14,0.,1.)); #38992=DIRECTION('center_axis',(0.,-1.,0.)); #38993=DIRECTION('ref_axis',(0.,0.,1.)); #38994=DIRECTION('',(0.,0.,-1.)); #38995=DIRECTION('center_axis',(0.,1.,0.)); #38996=DIRECTION('ref_axis',(1.,0.,0.)); #38997=DIRECTION('center_axis',(0.,-1.,0.)); #38998=DIRECTION('ref_axis',(9.020562075079E-14,0.,1.)); #38999=DIRECTION('',(0.,0.,-1.)); #39000=DIRECTION('center_axis',(0.,-1.,0.)); #39001=DIRECTION('ref_axis',(0.,0.,1.)); #39002=DIRECTION('center_axis',(0.,1.,0.)); #39003=DIRECTION('ref_axis',(1.,0.,0.)); #39004=DIRECTION('center_axis',(0.,-1.,0.)); #39005=DIRECTION('ref_axis',(9.020562075079E-14,0.,1.)); #39006=DIRECTION('center_axis',(0.,-1.,0.)); #39007=DIRECTION('ref_axis',(0.,0.,1.)); #39008=DIRECTION('',(0.,0.,-1.)); #39009=DIRECTION('center_axis',(0.,1.,0.)); #39010=DIRECTION('ref_axis',(1.,0.,0.)); #39011=DIRECTION('center_axis',(0.,-1.,0.)); #39012=DIRECTION('ref_axis',(-4.857225732735E-14,0.,1.)); #39013=DIRECTION('',(0.,0.,-1.)); #39014=DIRECTION('center_axis',(0.,-1.,0.)); #39015=DIRECTION('ref_axis',(0.,0.,1.)); #39016=DIRECTION('center_axis',(0.,1.,0.)); #39017=DIRECTION('ref_axis',(1.,0.,0.)); #39018=DIRECTION('center_axis',(0.,-1.,0.)); #39019=DIRECTION('ref_axis',(-4.857225732735E-14,0.,1.)); #39020=DIRECTION('center_axis',(0.,-1.,0.)); #39021=DIRECTION('ref_axis',(0.,0.,1.)); #39022=DIRECTION('',(0.,0.,-1.)); #39023=DIRECTION('center_axis',(0.,1.,0.)); #39024=DIRECTION('ref_axis',(1.,0.,0.)); #39025=DIRECTION('',(-1.,0.,0.)); #39026=DIRECTION('',(0.,0.,-1.)); #39027=DIRECTION('center_axis',(0.,-1.,0.)); #39028=DIRECTION('ref_axis',(9.020562075079E-14,0.,1.)); #39029=DIRECTION('',(0.,0.,-1.)); #39030=DIRECTION('',(0.,0.,-1.)); #39031=DIRECTION('',(1.,0.,0.)); #39032=DIRECTION('center_axis',(0.,-1.,0.)); #39033=DIRECTION('ref_axis',(0.,0.,1.)); #39034=DIRECTION('',(0.,0.,-1.)); #39035=DIRECTION('center_axis',(0.,-1.,0.)); #39036=DIRECTION('ref_axis',(0.,0.,1.)); #39037=DIRECTION('center_axis',(0.,1.,0.)); #39038=DIRECTION('ref_axis',(1.,0.,0.)); #39039=DIRECTION('',(0.,0.,-1.)); #39040=DIRECTION('',(-1.,0.,0.)); #39041=DIRECTION('center_axis',(0.,-1.,0.)); #39042=DIRECTION('ref_axis',(0.,0.,1.)); #39043=DIRECTION('',(0.,0.,-1.)); #39044=DIRECTION('center_axis',(0.,-1.,0.)); #39045=DIRECTION('ref_axis',(0.,0.,1.)); #39046=DIRECTION('',(1.,0.,0.)); #39047=DIRECTION('',(0.,0.,-1.)); #39048=DIRECTION('',(0.,0.,-1.)); #39049=DIRECTION('center_axis',(0.,-1.,0.)); #39050=DIRECTION('ref_axis',(9.020562075079E-14,0.,1.)); #39051=DIRECTION('center_axis',(0.,1.,0.)); #39052=DIRECTION('ref_axis',(1.,0.,0.)); #39053=DIRECTION('center_axis',(0.,-1.,0.)); #39054=DIRECTION('ref_axis',(0.,0.,1.)); #39055=DIRECTION('center_axis',(0.,-1.,0.)); #39056=DIRECTION('ref_axis',(4.163336342344E-14,0.,1.)); #39057=DIRECTION('',(0.,0.,-1.)); #39058=DIRECTION('center_axis',(0.,1.,0.)); #39059=DIRECTION('ref_axis',(1.,0.,0.)); #39060=DIRECTION('center_axis',(0.,-1.,0.)); #39061=DIRECTION('ref_axis',(0.,0.,1.)); #39062=DIRECTION('',(0.,0.,-1.)); #39063=DIRECTION('center_axis',(0.,-1.,0.)); #39064=DIRECTION('ref_axis',(4.163336342344E-14,0.,1.)); #39065=DIRECTION('center_axis',(0.,1.,0.)); #39066=DIRECTION('ref_axis',(1.,0.,0.)); #39067=DIRECTION('center_axis',(0.,-1.,0.)); #39068=DIRECTION('ref_axis',(-1.249000902703E-13,0.,1.)); #39069=DIRECTION('',(0.,0.,-1.)); #39070=DIRECTION('center_axis',(0.,-1.,0.)); #39071=DIRECTION('ref_axis',(0.,0.,1.)); #39072=DIRECTION('center_axis',(0.,1.,0.)); #39073=DIRECTION('ref_axis',(1.,0.,0.)); #39074=DIRECTION('center_axis',(0.,-1.,0.)); #39075=DIRECTION('ref_axis',(-1.249000902703E-13,0.,1.)); #39076=DIRECTION('center_axis',(0.,-1.,0.)); #39077=DIRECTION('ref_axis',(0.,0.,1.)); #39078=DIRECTION('',(0.,0.,-1.)); #39079=DIRECTION('center_axis',(0.,1.,0.)); #39080=DIRECTION('ref_axis',(1.,0.,0.)); #39081=DIRECTION('center_axis',(0.,-1.,0.)); #39082=DIRECTION('ref_axis',(0.,0.,1.)); #39083=DIRECTION('center_axis',(0.,-1.,0.)); #39084=DIRECTION('ref_axis',(8.326672684689E-14,0.,1.)); #39085=DIRECTION('',(0.,0.,-1.)); #39086=DIRECTION('center_axis',(0.,1.,0.)); #39087=DIRECTION('ref_axis',(1.,0.,0.)); #39088=DIRECTION('center_axis',(0.,-1.,0.)); #39089=DIRECTION('ref_axis',(0.,0.,1.)); #39090=DIRECTION('',(0.,0.,-1.)); #39091=DIRECTION('center_axis',(0.,-1.,0.)); #39092=DIRECTION('ref_axis',(8.326672684689E-14,0.,1.)); #39093=DIRECTION('center_axis',(0.,1.,0.)); #39094=DIRECTION('ref_axis',(1.,0.,0.)); #39095=DIRECTION('center_axis',(0.,-1.,0.)); #39096=DIRECTION('ref_axis',(-9.020562075079E-14,0.,1.)); #39097=DIRECTION('',(0.,0.,-1.)); #39098=DIRECTION('center_axis',(0.,-1.,0.)); #39099=DIRECTION('ref_axis',(0.,0.,1.)); #39100=DIRECTION('center_axis',(0.,1.,0.)); #39101=DIRECTION('ref_axis',(1.,0.,0.)); #39102=DIRECTION('center_axis',(0.,-1.,0.)); #39103=DIRECTION('ref_axis',(-9.020562075079E-14,0.,1.)); #39104=DIRECTION('center_axis',(0.,-1.,0.)); #39105=DIRECTION('ref_axis',(0.,0.,1.)); #39106=DIRECTION('',(0.,0.,-1.)); #39107=DIRECTION('center_axis',(0.,1.,0.)); #39108=DIRECTION('ref_axis',(1.,0.,0.)); #39109=DIRECTION('center_axis',(0.,-1.,0.)); #39110=DIRECTION('ref_axis',(0.,0.,1.)); #39111=DIRECTION('center_axis',(0.,-1.,0.)); #39112=DIRECTION('ref_axis',(1.040834085586E-13,0.,1.)); #39113=DIRECTION('',(0.,0.,-1.)); #39114=DIRECTION('center_axis',(0.,1.,0.)); #39115=DIRECTION('ref_axis',(1.,0.,0.)); #39116=DIRECTION('center_axis',(0.,-1.,0.)); #39117=DIRECTION('ref_axis',(0.,0.,1.)); #39118=DIRECTION('',(0.,0.,-1.)); #39119=DIRECTION('center_axis',(0.,-1.,0.)); #39120=DIRECTION('ref_axis',(1.040834085586E-13,0.,1.)); #39121=DIRECTION('center_axis',(0.,1.,0.)); #39122=DIRECTION('ref_axis',(1.,0.,0.)); #39123=DIRECTION('center_axis',(0.,-1.,0.)); #39124=DIRECTION('ref_axis',(-4.163336342344E-14,0.,1.)); #39125=DIRECTION('',(0.,0.,-1.)); #39126=DIRECTION('center_axis',(0.,-1.,0.)); #39127=DIRECTION('ref_axis',(0.,0.,1.)); #39128=DIRECTION('center_axis',(0.,1.,0.)); #39129=DIRECTION('ref_axis',(1.,0.,0.)); #39130=DIRECTION('center_axis',(0.,-1.,0.)); #39131=DIRECTION('ref_axis',(-4.163336342344E-14,0.,1.)); #39132=DIRECTION('center_axis',(0.,-1.,0.)); #39133=DIRECTION('ref_axis',(0.,0.,1.)); #39134=DIRECTION('',(0.,0.,-1.)); #39135=DIRECTION('center_axis',(0.,1.,0.)); #39136=DIRECTION('ref_axis',(1.,0.,0.)); #39137=DIRECTION('center_axis',(0.,-1.,0.)); #39138=DIRECTION('ref_axis',(0.,0.,1.)); #39139=DIRECTION('center_axis',(0.,-1.,0.)); #39140=DIRECTION('ref_axis',(-1.249000902703E-13,0.,1.)); #39141=DIRECTION('',(0.,0.,-1.)); #39142=DIRECTION('center_axis',(0.,1.,0.)); #39143=DIRECTION('ref_axis',(1.,0.,0.)); #39144=DIRECTION('center_axis',(0.,-1.,0.)); #39145=DIRECTION('ref_axis',(0.,0.,1.)); #39146=DIRECTION('',(0.,0.,-1.)); #39147=DIRECTION('center_axis',(0.,-1.,0.)); #39148=DIRECTION('ref_axis',(-1.249000902703E-13,0.,1.)); #39149=DIRECTION('center_axis',(0.,1.,0.)); #39150=DIRECTION('ref_axis',(1.,0.,0.)); #39151=DIRECTION('center_axis',(0.,-1.,0.)); #39152=DIRECTION('ref_axis',(6.938893903907E-15,0.,1.)); #39153=DIRECTION('',(0.,0.,-1.)); #39154=DIRECTION('center_axis',(0.,-1.,0.)); #39155=DIRECTION('ref_axis',(0.,0.,1.)); #39156=DIRECTION('center_axis',(0.,1.,0.)); #39157=DIRECTION('ref_axis',(1.,0.,0.)); #39158=DIRECTION('center_axis',(0.,-1.,0.)); #39159=DIRECTION('ref_axis',(6.938893903907E-15,0.,1.)); #39160=DIRECTION('center_axis',(0.,-1.,0.)); #39161=DIRECTION('ref_axis',(0.,0.,1.)); #39162=DIRECTION('',(0.,0.,-1.)); #39163=DIRECTION('center_axis',(0.,1.,0.)); #39164=DIRECTION('ref_axis',(1.,0.,0.)); #39165=DIRECTION('',(1.,0.,0.)); #39166=DIRECTION('center_axis',(0.,-1.,0.)); #39167=DIRECTION('ref_axis',(0.,0.,1.)); #39168=DIRECTION('',(0.,0.,-1.)); #39169=DIRECTION('center_axis',(0.,-1.,0.)); #39170=DIRECTION('ref_axis',(0.,0.,1.)); #39171=DIRECTION('',(-1.,0.,0.)); #39172=DIRECTION('',(0.,0.,-1.)); #39173=DIRECTION('center_axis',(0.,-1.,0.)); #39174=DIRECTION('ref_axis',(-8.326672684689E-14,0.,1.)); #39175=DIRECTION('',(0.,0.,-1.)); #39176=DIRECTION('',(0.,0.,-1.)); #39177=DIRECTION('center_axis',(0.,1.,0.)); #39178=DIRECTION('ref_axis',(1.,0.,0.)); #39179=DIRECTION('',(0.,0.,-1.)); #39180=DIRECTION('center_axis',(0.,-1.,0.)); #39181=DIRECTION('ref_axis',(0.,0.,1.)); #39182=DIRECTION('',(1.,0.,0.)); #39183=DIRECTION('',(0.,0.,-1.)); #39184=DIRECTION('',(0.,0.,-1.)); #39185=DIRECTION('center_axis',(0.,-1.,0.)); #39186=DIRECTION('ref_axis',(-8.326672684689E-14,0.,1.)); #39187=DIRECTION('',(0.,0.,-1.)); #39188=DIRECTION('',(-1.,0.,0.)); #39189=DIRECTION('center_axis',(0.,-1.,0.)); #39190=DIRECTION('ref_axis',(0.,0.,1.)); #39191=DIRECTION('center_axis',(0.,1.,0.)); #39192=DIRECTION('ref_axis',(1.,0.,0.)); #39193=DIRECTION('center_axis',(0.,-1.,0.)); #39194=DIRECTION('ref_axis',(5.551115123126E-14,0.,1.)); #39195=DIRECTION('',(0.,0.,-1.)); #39196=DIRECTION('center_axis',(0.,-1.,0.)); #39197=DIRECTION('ref_axis',(0.,0.,1.)); #39198=DIRECTION('center_axis',(0.,1.,0.)); #39199=DIRECTION('ref_axis',(1.,0.,0.)); #39200=DIRECTION('center_axis',(0.,-1.,0.)); #39201=DIRECTION('ref_axis',(5.551115123126E-14,0.,1.)); #39202=DIRECTION('center_axis',(0.,-1.,0.)); #39203=DIRECTION('ref_axis',(0.,0.,1.)); #39204=DIRECTION('',(0.,0.,-1.)); #39205=DIRECTION('center_axis',(0.,1.,0.)); #39206=DIRECTION('ref_axis',(1.,0.,0.)); #39207=DIRECTION('',(0.,0.,1.)); #39208=DIRECTION('center_axis',(0.,-1.,0.)); #39209=DIRECTION('ref_axis',(0.,0.,1.)); #39210=DIRECTION('',(0.,0.,-1.)); #39211=DIRECTION('',(1.,0.,0.)); #39212=DIRECTION('',(1.,0.,0.)); #39213=DIRECTION('center_axis',(0.,1.,0.)); #39214=DIRECTION('ref_axis',(1.,0.,0.)); #39215=DIRECTION('',(0.,0.,-1.)); #39216=DIRECTION('center_axis',(0.,-1.,0.)); #39217=DIRECTION('ref_axis',(0.,0.,1.)); #39218=DIRECTION('',(0.,0.,1.)); #39219=DIRECTION('',(1.,0.,0.)); #39220=DIRECTION('',(1.,0.,0.)); #39221=DIRECTION('center_axis',(0.,0.,-1.)); #39222=DIRECTION('ref_axis',(0.,-1.,0.)); #39223=DIRECTION('',(0.,-1.,0.)); #39224=DIRECTION('center_axis',(0.,1.,0.)); #39225=DIRECTION('ref_axis',(1.,0.,0.)); #39226=DIRECTION('',(1.,0.,0.)); #39227=DIRECTION('',(0.,0.,1.)); #39228=DIRECTION('center_axis',(0.,-1.,0.)); #39229=DIRECTION('ref_axis',(0.,0.,1.)); #39230=DIRECTION('',(1.,0.,0.)); #39231=DIRECTION('center_axis',(0.,1.,0.)); #39232=DIRECTION('ref_axis',(0.,0.,1.)); #39233=DIRECTION('',(0.,0.,1.)); #39234=DIRECTION('center_axis',(0.,1.,0.)); #39235=DIRECTION('ref_axis',(1.,0.,0.)); #39236=DIRECTION('',(1.,0.,0.)); #39237=DIRECTION('',(0.,0.,1.)); #39238=DIRECTION('center_axis',(0.,1.,0.)); #39239=DIRECTION('ref_axis',(0.,0.,1.)); #39240=DIRECTION('',(1.,0.,0.)); #39241=DIRECTION('center_axis',(0.,-1.,0.)); #39242=DIRECTION('ref_axis',(0.,0.,1.)); #39243=DIRECTION('',(0.,0.,1.)); #39244=DIRECTION('center_axis',(0.,1.,0.)); #39245=DIRECTION('ref_axis',(1.,0.,0.)); #39246=DIRECTION('center_axis',(0.,-1.,0.)); #39247=DIRECTION('ref_axis',(0.,0.,1.)); #39248=DIRECTION('center_axis',(0.,1.,0.)); #39249=DIRECTION('ref_axis',(1.,0.,0.)); #39250=DIRECTION('center_axis',(0.,-1.,0.)); #39251=DIRECTION('ref_axis',(0.,0.,1.)); #39252=DIRECTION('center_axis',(0.,1.,0.)); #39253=DIRECTION('ref_axis',(1.,0.,0.)); #39254=DIRECTION('center_axis',(0.,-1.,0.)); #39255=DIRECTION('ref_axis',(0.,0.,1.)); #39256=DIRECTION('center_axis',(0.,1.,0.)); #39257=DIRECTION('ref_axis',(1.,0.,0.)); #39258=DIRECTION('center_axis',(0.,-1.,0.)); #39259=DIRECTION('ref_axis',(0.,0.,1.)); #39260=DIRECTION('center_axis',(0.,1.,0.)); #39261=DIRECTION('ref_axis',(1.,0.,0.)); #39262=DIRECTION('',(-1.,0.,0.)); #39263=DIRECTION('',(-1.,0.,0.)); #39264=DIRECTION('',(1.,0.,0.)); #39265=DIRECTION('',(0.,0.,-1.)); #39266=DIRECTION('',(0.,0.,-1.)); #39267=DIRECTION('',(0.,0.,-1.)); #39268=DIRECTION('',(0.,0.,-1.)); #39269=DIRECTION('',(0.,0.,-1.)); #39270=DIRECTION('',(0.,0.,-1.)); #39271=DIRECTION('',(0.,0.,-1.)); #39272=DIRECTION('',(0.,0.,-1.)); #39273=DIRECTION('',(0.,0.,-1.)); #39274=DIRECTION('',(0.,0.,-1.)); #39275=DIRECTION('',(0.,0.,-1.)); #39276=DIRECTION('',(0.,0.,-1.)); #39277=DIRECTION('',(0.,0.,-1.)); #39278=DIRECTION('',(0.,0.,-1.)); #39279=DIRECTION('',(0.,0.,-1.)); #39280=DIRECTION('',(0.,0.,-1.)); #39281=DIRECTION('',(0.,0.,-1.)); #39282=DIRECTION('',(0.,0.,-1.)); #39283=DIRECTION('',(0.,0.,-1.)); #39284=DIRECTION('',(0.,0.,-1.)); #39285=DIRECTION('center_axis',(0.,1.,0.)); #39286=DIRECTION('ref_axis',(1.,0.,0.)); #39287=DIRECTION('',(-1.,0.,0.)); #39288=DIRECTION('',(-1.,0.,0.)); #39289=DIRECTION('',(0.,0.,-1.)); #39290=DIRECTION('',(0.,0.,-1.)); #39291=DIRECTION('',(0.,0.,-1.)); #39292=DIRECTION('',(0.,0.,-1.)); #39293=DIRECTION('',(0.,0.,-1.)); #39294=DIRECTION('',(0.,0.,-1.)); #39295=DIRECTION('',(0.,0.,-1.)); #39296=DIRECTION('',(0.,0.,-1.)); #39297=DIRECTION('',(0.,0.,-1.)); #39298=DIRECTION('',(0.,0.,-1.)); #39299=DIRECTION('',(0.,0.,-1.)); #39300=DIRECTION('',(0.,0.,-1.)); #39301=DIRECTION('',(0.,0.,-1.)); #39302=DIRECTION('',(0.,0.,-1.)); #39303=DIRECTION('',(0.,0.,-1.)); #39304=DIRECTION('',(0.,0.,-1.)); #39305=DIRECTION('',(0.,0.,-1.)); #39306=DIRECTION('',(0.,0.,-1.)); #39307=DIRECTION('',(0.,0.,-1.)); #39308=DIRECTION('',(0.,0.,-1.)); #39309=DIRECTION('',(1.,0.,0.)); #39310=DIRECTION('center_axis',(-1.,0.,0.)); #39311=DIRECTION('ref_axis',(0.,0.,1.)); #39312=DIRECTION('center_axis',(-1.,0.,0.)); #39313=DIRECTION('ref_axis',(0.,0.,1.)); #39314=DIRECTION('',(0.,-1.,0.)); #39315=DIRECTION('center_axis',(-1.,0.,0.)); #39316=DIRECTION('ref_axis',(0.,0.,1.)); #39317=DIRECTION('',(0.,-1.,0.)); #39318=DIRECTION('center_axis',(-1.,0.,0.)); #39319=DIRECTION('ref_axis',(0.,0.,1.)); #39320=DIRECTION('',(0.,-1.,0.)); #39321=DIRECTION('center_axis',(-1.,0.,0.)); #39322=DIRECTION('ref_axis',(0.,0.,1.)); #39323=DIRECTION('',(0.,-1.,0.)); #39324=DIRECTION('center_axis',(-1.,0.,0.)); #39325=DIRECTION('ref_axis',(0.,0.,1.)); #39326=DIRECTION('',(0.,-1.,0.)); #39327=DIRECTION('center_axis',(-1.,0.,0.)); #39328=DIRECTION('ref_axis',(0.,0.,1.)); #39329=DIRECTION('',(0.,-1.,0.)); #39330=DIRECTION('center_axis',(-1.,0.,0.)); #39331=DIRECTION('ref_axis',(0.,0.,1.)); #39332=DIRECTION('',(0.,-1.,0.)); #39333=DIRECTION('center_axis',(-1.,0.,0.)); #39334=DIRECTION('ref_axis',(0.,0.,1.)); #39335=DIRECTION('',(0.,-1.,0.)); #39336=DIRECTION('center_axis',(-1.,0.,0.)); #39337=DIRECTION('ref_axis',(0.,0.,1.)); #39338=DIRECTION('',(0.,-1.,0.)); #39339=DIRECTION('center_axis',(-1.,0.,0.)); #39340=DIRECTION('ref_axis',(0.,0.,1.)); #39341=DIRECTION('',(0.,-1.,0.)); #39342=DIRECTION('center_axis',(-1.,0.,0.)); #39343=DIRECTION('ref_axis',(0.,0.,1.)); #39344=DIRECTION('',(0.,-1.,0.)); #39345=DIRECTION('center_axis',(-1.,0.,0.)); #39346=DIRECTION('ref_axis',(0.,0.,1.)); #39347=DIRECTION('',(0.,-1.,0.)); #39348=DIRECTION('center_axis',(-1.,0.,0.)); #39349=DIRECTION('ref_axis',(0.,0.,1.)); #39350=DIRECTION('',(0.,-1.,0.)); #39351=DIRECTION('center_axis',(-1.,0.,0.)); #39352=DIRECTION('ref_axis',(0.,0.,1.)); #39353=DIRECTION('',(0.,-1.,0.)); #39354=DIRECTION('center_axis',(-1.,0.,0.)); #39355=DIRECTION('ref_axis',(0.,0.,1.)); #39356=DIRECTION('',(0.,-1.,0.)); #39357=DIRECTION('center_axis',(-1.,0.,0.)); #39358=DIRECTION('ref_axis',(0.,0.,1.)); #39359=DIRECTION('',(0.,-1.,0.)); #39360=DIRECTION('center_axis',(-1.,0.,0.)); #39361=DIRECTION('ref_axis',(0.,0.,1.)); #39362=DIRECTION('',(0.,-1.,0.)); #39363=DIRECTION('center_axis',(-1.,0.,0.)); #39364=DIRECTION('ref_axis',(0.,0.,1.)); #39365=DIRECTION('',(0.,-1.,0.)); #39366=DIRECTION('center_axis',(-1.,0.,0.)); #39367=DIRECTION('ref_axis',(0.,0.,1.)); #39368=DIRECTION('',(0.,-1.,0.)); #39369=DIRECTION('center_axis',(-1.,0.,0.)); #39370=DIRECTION('ref_axis',(0.,0.,1.)); #39371=DIRECTION('',(0.,1.,0.)); #39372=DIRECTION('center_axis',(-1.,0.,0.)); #39373=DIRECTION('ref_axis',(0.,0.,1.)); #39374=DIRECTION('',(0.,1.,0.)); #39375=DIRECTION('center_axis',(-1.,0.,0.)); #39376=DIRECTION('ref_axis',(0.,0.,1.)); #39377=DIRECTION('',(0.,1.,0.)); #39378=DIRECTION('center_axis',(-1.,0.,0.)); #39379=DIRECTION('ref_axis',(0.,0.,1.)); #39380=DIRECTION('',(0.,1.,0.)); #39381=DIRECTION('center_axis',(-1.,0.,0.)); #39382=DIRECTION('ref_axis',(0.,0.,1.)); #39383=DIRECTION('',(0.,1.,0.)); #39384=DIRECTION('center_axis',(-1.,0.,0.)); #39385=DIRECTION('ref_axis',(0.,0.,1.)); #39386=DIRECTION('',(0.,1.,0.)); #39387=DIRECTION('center_axis',(-1.,0.,0.)); #39388=DIRECTION('ref_axis',(0.,0.,1.)); #39389=DIRECTION('',(0.,1.,0.)); #39390=DIRECTION('center_axis',(-1.,0.,0.)); #39391=DIRECTION('ref_axis',(0.,0.,1.)); #39392=DIRECTION('',(0.,1.,0.)); #39393=DIRECTION('center_axis',(-1.,0.,0.)); #39394=DIRECTION('ref_axis',(0.,0.,1.)); #39395=DIRECTION('',(0.,1.,0.)); #39396=DIRECTION('center_axis',(-1.,0.,0.)); #39397=DIRECTION('ref_axis',(0.,0.,1.)); #39398=DIRECTION('',(0.,1.,0.)); #39399=DIRECTION('center_axis',(-1.,0.,0.)); #39400=DIRECTION('ref_axis',(0.,0.,1.)); #39401=DIRECTION('',(0.,1.,0.)); #39402=DIRECTION('center_axis',(-1.,0.,0.)); #39403=DIRECTION('ref_axis',(0.,0.,1.)); #39404=DIRECTION('',(0.,1.,0.)); #39405=DIRECTION('center_axis',(-1.,0.,0.)); #39406=DIRECTION('ref_axis',(0.,0.,1.)); #39407=DIRECTION('',(0.,1.,0.)); #39408=DIRECTION('center_axis',(-1.,0.,0.)); #39409=DIRECTION('ref_axis',(0.,0.,1.)); #39410=DIRECTION('',(0.,1.,0.)); #39411=DIRECTION('center_axis',(-1.,0.,0.)); #39412=DIRECTION('ref_axis',(0.,0.,1.)); #39413=DIRECTION('',(0.,1.,0.)); #39414=DIRECTION('center_axis',(-1.,0.,0.)); #39415=DIRECTION('ref_axis',(0.,0.,1.)); #39416=DIRECTION('',(0.,1.,0.)); #39417=DIRECTION('center_axis',(-1.,0.,0.)); #39418=DIRECTION('ref_axis',(0.,0.,1.)); #39419=DIRECTION('',(0.,1.,0.)); #39420=DIRECTION('center_axis',(-1.,0.,0.)); #39421=DIRECTION('ref_axis',(0.,0.,1.)); #39422=DIRECTION('',(0.,1.,0.)); #39423=DIRECTION('center_axis',(-1.,0.,0.)); #39424=DIRECTION('ref_axis',(0.,0.,1.)); #39425=DIRECTION('',(0.,1.,0.)); #39426=DIRECTION('center_axis',(-1.,0.,0.)); #39427=DIRECTION('ref_axis',(0.,0.,1.)); #39428=DIRECTION('',(0.,1.,0.)); #39429=DIRECTION('center_axis',(0.,0.,-1.)); #39430=DIRECTION('ref_axis',(0.,-1.,0.)); #39431=DIRECTION('center_axis',(0.,0.,-1.)); #39432=DIRECTION('ref_axis',(0.,-1.,0.)); #39433=DIRECTION('',(0.,-1.,0.)); #39434=DIRECTION('center_axis',(0.,0.,-1.)); #39435=DIRECTION('ref_axis',(0.,-1.,0.)); #39436=DIRECTION('center_axis',(0.,0.,-1.)); #39437=DIRECTION('ref_axis',(0.,-1.,0.)); #39438=DIRECTION('',(0.,-1.,0.)); #39439=DIRECTION('center_axis',(0.,0.,-1.)); #39440=DIRECTION('ref_axis',(0.,-1.,0.)); #39441=DIRECTION('center_axis',(0.,0.,-1.)); #39442=DIRECTION('ref_axis',(0.,-1.,0.)); #39443=DIRECTION('center_axis',(0.,1.,0.)); #39444=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39445=DIRECTION('center_axis',(0.,1.,0.)); #39446=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39447=DIRECTION('center_axis',(0.,1.,0.)); #39448=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39449=DIRECTION('center_axis',(0.,1.,0.)); #39450=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39451=DIRECTION('center_axis',(0.,1.,0.)); #39452=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39453=DIRECTION('center_axis',(0.,1.,0.)); #39454=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39455=DIRECTION('center_axis',(0.,1.,0.)); #39456=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39457=DIRECTION('center_axis',(0.,1.,0.)); #39458=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39459=DIRECTION('center_axis',(0.,1.,0.)); #39460=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39461=DIRECTION('center_axis',(0.,1.,0.)); #39462=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39463=DIRECTION('center_axis',(0.,1.,0.)); #39464=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39465=DIRECTION('center_axis',(0.,1.,0.)); #39466=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39467=DIRECTION('center_axis',(0.,1.,0.)); #39468=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39469=DIRECTION('center_axis',(0.,1.,0.)); #39470=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39471=DIRECTION('center_axis',(0.,1.,0.)); #39472=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39473=DIRECTION('center_axis',(0.,1.,0.)); #39474=DIRECTION('ref_axis',(-1.,0.,-1.99778912092571E-13)); #39475=DIRECTION('center_axis',(0.,1.,0.)); #39476=DIRECTION('ref_axis',(-1.,0.,6.12323399573677E-17)); #39477=DIRECTION('center_axis',(0.,1.,0.)); #39478=DIRECTION('ref_axis',(-1.,0.,6.12323399573677E-17)); #39479=DIRECTION('center_axis',(0.,1.,0.)); #39480=DIRECTION('ref_axis',(-1.,0.,6.12323399573677E-17)); #39481=DIRECTION('center_axis',(0.,1.,0.)); #39482=DIRECTION('ref_axis',(-1.,0.,6.12323399573677E-17)); #39483=DIRECTION('center_axis',(0.,0.,1.)); #39484=DIRECTION('ref_axis',(0.,-1.,0.)); #39485=DIRECTION('',(-1.,1.279294598803E-16,0.)); #39486=DIRECTION('center_axis',(0.,0.,1.)); #39487=DIRECTION('ref_axis',(1.,0.,0.)); #39488=DIRECTION('',(0.,1.,0.)); #39489=DIRECTION('center_axis',(0.,0.,1.)); #39490=DIRECTION('ref_axis',(1.,0.,0.)); #39491=DIRECTION('',(0.66497358146432,0.74686687967436,0.)); #39492=DIRECTION('center_axis',(0.,0.,1.)); #39493=DIRECTION('ref_axis',(1.,0.,0.)); #39494=DIRECTION('',(1.,0.,0.)); #39495=DIRECTION('center_axis',(0.,0.,1.)); #39496=DIRECTION('ref_axis',(1.,0.,0.)); #39497=DIRECTION('',(0.66497358146432,-0.74686687967436,0.)); #39498=DIRECTION('center_axis',(0.,0.,1.)); #39499=DIRECTION('ref_axis',(1.,0.,0.)); #39500=DIRECTION('',(0.,-1.,0.)); #39501=DIRECTION('center_axis',(0.,0.,1.)); #39502=DIRECTION('ref_axis',(1.,0.,0.)); #39503=DIRECTION('center_axis',(-0.74686687967436,0.664973581464321,0.)); #39504=DIRECTION('ref_axis',(0.,0.,1.)); #39505=DIRECTION('',(0.,0.,1.)); #39506=DIRECTION('',(-0.66497358146432,-0.74686687967436,0.)); #39507=DIRECTION('',(0.,0.,1.)); #39508=DIRECTION('',(-0.66497358146432,-0.74686687967436,0.)); #39509=DIRECTION('center_axis',(0.,0.,1.)); #39510=DIRECTION('ref_axis',(1.,0.,0.)); #39511=DIRECTION('center_axis',(0.,0.,-1.)); #39512=DIRECTION('ref_axis',(-1.,0.,0.)); #39513=DIRECTION('center_axis',(0.,0.,-1.)); #39514=DIRECTION('ref_axis',(-1.,0.,0.)); #39515=DIRECTION('',(0.,0.,1.)); #39516=DIRECTION('center_axis',(-1.,5.239378459865E-16,0.)); #39517=DIRECTION('ref_axis',(5.239378459865E-16,1.,0.)); #39518=DIRECTION('',(0.,0.,1.)); #39519=DIRECTION('',(-5.239378459865E-16,-1.,0.)); #39520=DIRECTION('',(-5.239378459865E-16,-1.,0.)); #39521=DIRECTION('center_axis',(0.,0.,1.)); #39522=DIRECTION('ref_axis',(1.,0.,0.)); #39523=DIRECTION('center_axis',(0.,0.,-1.)); #39524=DIRECTION('ref_axis',(1.,0.,0.)); #39525=DIRECTION('center_axis',(0.,0.,-1.)); #39526=DIRECTION('ref_axis',(1.,0.,0.)); #39527=DIRECTION('',(0.,0.,1.)); #39528=DIRECTION('center_axis',(-1.279294598803E-16,-1.,0.)); #39529=DIRECTION('ref_axis',(0.,0.,1.)); #39530=DIRECTION('',(0.,0.,1.)); #39531=DIRECTION('',(1.,-1.279294598803E-16,0.)); #39532=DIRECTION('',(1.,-1.279294598803E-16,0.)); #39533=DIRECTION('center_axis',(0.,0.,1.)); #39534=DIRECTION('ref_axis',(1.,0.,0.)); #39535=DIRECTION('center_axis',(0.,0.,-1.)); #39536=DIRECTION('ref_axis',(-1.,0.,0.)); #39537=DIRECTION('center_axis',(0.,0.,-1.)); #39538=DIRECTION('ref_axis',(-1.,0.,0.)); #39539=DIRECTION('',(0.,0.,1.)); #39540=DIRECTION('center_axis',(1.,5.239378459865E-16,0.)); #39541=DIRECTION('ref_axis',(0.,0.,-1.)); #39542=DIRECTION('',(0.,0.,1.)); #39543=DIRECTION('',(-5.239378459865E-16,1.,0.)); #39544=DIRECTION('',(-5.239378459865E-16,1.,0.)); #39545=DIRECTION('center_axis',(0.,0.,1.)); #39546=DIRECTION('ref_axis',(1.,0.,0.)); #39547=DIRECTION('center_axis',(0.,0.,-1.)); #39548=DIRECTION('ref_axis',(1.,0.,0.)); #39549=DIRECTION('center_axis',(0.,0.,-1.)); #39550=DIRECTION('ref_axis',(1.,0.,0.)); #39551=DIRECTION('',(0.,0.,1.)); #39552=DIRECTION('center_axis',(0.74686687967436,0.664973581464321,0.)); #39553=DIRECTION('ref_axis',(0.,0.,-1.)); #39554=DIRECTION('',(0.,0.,1.)); #39555=DIRECTION('',(-0.66497358146432,0.74686687967436,0.)); #39556=DIRECTION('',(-0.66497358146432,0.74686687967436,0.)); #39557=DIRECTION('center_axis',(0.,0.,1.)); #39558=DIRECTION('ref_axis',(1.,0.,0.)); #39559=DIRECTION('center_axis',(0.,0.,-1.)); #39560=DIRECTION('ref_axis',(1.,0.,0.)); #39561=DIRECTION('center_axis',(0.,0.,-1.)); #39562=DIRECTION('ref_axis',(1.,0.,0.)); #39563=DIRECTION('',(0.,0.,1.)); #39564=DIRECTION('center_axis',(1.253137817706E-16,1.,0.)); #39565=DIRECTION('ref_axis',(-1.,1.253137817706E-16,0.)); #39566=DIRECTION('',(0.,0.,1.)); #39567=DIRECTION('',(-1.,1.253137817706E-16,0.)); #39568=DIRECTION('',(-1.,1.253137817706E-16,0.)); #39569=DIRECTION('center_axis',(0.,0.,1.)); #39570=DIRECTION('ref_axis',(1.,0.,0.)); #39571=DIRECTION('center_axis',(0.,0.,-1.)); #39572=DIRECTION('ref_axis',(-1.,0.,0.)); #39573=DIRECTION('center_axis',(0.,0.,-1.)); #39574=DIRECTION('ref_axis',(-1.,0.,0.)); #39575=DIRECTION('center_axis',(0.,0.,-1.)); #39576=DIRECTION('ref_axis',(-1.,0.,0.)); #39577=DIRECTION('center_axis',(0.,0.,-1.)); #39578=DIRECTION('ref_axis',(-1.,0.,0.)); #39579=DIRECTION('',(0.,-1.,0.)); #39580=DIRECTION('center_axis',(0.,0.,-1.)); #39581=DIRECTION('ref_axis',(1.,0.,0.)); #39582=DIRECTION('',(1.,-1.279294598803E-16,0.)); #39583=DIRECTION('center_axis',(0.,0.,-1.)); #39584=DIRECTION('ref_axis',(-1.,0.,0.)); #39585=DIRECTION('',(0.,1.,0.)); #39586=DIRECTION('center_axis',(0.,0.,-1.)); #39587=DIRECTION('ref_axis',(1.,0.,0.)); #39588=DIRECTION('',(-0.66497358146432,0.74686687967436,0.)); #39589=DIRECTION('center_axis',(0.,0.,-1.)); #39590=DIRECTION('ref_axis',(1.,0.,0.)); #39591=DIRECTION('',(-1.,0.,0.)); #39592=DIRECTION('center_axis',(0.,0.,-1.)); #39593=DIRECTION('ref_axis',(-1.,0.,0.)); #39594=DIRECTION('',(-0.66497358146432,-0.74686687967436,0.)); #39595=DIRECTION('center_axis',(0.,0.,-1.)); #39596=DIRECTION('ref_axis',(-1.,0.,0.)); #39597=DIRECTION('center_axis',(-1.279294598803E-16,-1.,0.)); #39598=DIRECTION('ref_axis',(0.,0.,1.)); #39599=DIRECTION('',(0.,0.,1.)); #39600=DIRECTION('',(0.,0.,1.)); #39601=DIRECTION('center_axis',(0.,0.,1.)); #39602=DIRECTION('ref_axis',(1.,0.,0.)); #39603=DIRECTION('',(0.,0.,1.)); #39604=DIRECTION('center_axis',(1.,0.,0.)); #39605=DIRECTION('ref_axis',(0.,0.,-1.)); #39606=DIRECTION('',(0.,0.,1.)); #39607=DIRECTION('center_axis',(0.,0.,1.)); #39608=DIRECTION('ref_axis',(1.,0.,0.)); #39609=DIRECTION('',(0.,0.,1.)); #39610=DIRECTION('center_axis',(0.74686687967436,0.664973581464321,0.)); #39611=DIRECTION('ref_axis',(0.,0.,-1.)); #39612=DIRECTION('',(0.,0.,1.)); #39613=DIRECTION('center_axis',(0.,0.,1.)); #39614=DIRECTION('ref_axis',(1.,0.,0.)); #39615=DIRECTION('',(0.,0.,1.)); #39616=DIRECTION('center_axis',(0.,1.,0.)); #39617=DIRECTION('ref_axis',(-1.,0.,0.)); #39618=DIRECTION('',(0.,0.,1.)); #39619=DIRECTION('center_axis',(0.,0.,1.)); #39620=DIRECTION('ref_axis',(1.,0.,0.)); #39621=DIRECTION('',(0.,0.,1.)); #39622=DIRECTION('center_axis',(-0.74686687967436,0.664973581464321,0.)); #39623=DIRECTION('ref_axis',(0.,0.,1.)); #39624=DIRECTION('',(0.,0.,1.)); #39625=DIRECTION('center_axis',(0.,0.,1.)); #39626=DIRECTION('ref_axis',(1.,0.,0.)); #39627=DIRECTION('',(0.,0.,1.)); #39628=DIRECTION('center_axis',(-1.,0.,0.)); #39629=DIRECTION('ref_axis',(0.,1.,0.)); #39630=DIRECTION('',(0.,0.,1.)); #39631=DIRECTION('center_axis',(0.,0.,1.)); #39632=DIRECTION('ref_axis',(1.,0.,0.)); #39633=DIRECTION('center_axis',(1.,0.,0.)); #39634=DIRECTION('ref_axis',(0.,0.,-1.)); #39635=DIRECTION('',(0.,1.,0.)); #39636=DIRECTION('',(0.,1.673950084893E-15,1.)); #39637=DIRECTION('center_axis',(-1.,0.,0.)); #39638=DIRECTION('ref_axis',(0.,0.,-1.)); #39639=DIRECTION('',(0.,-0.607764068228761,0.794117647058688)); #39640=DIRECTION('',(0.,-0.794117647058688,-0.607764068228761)); #39641=DIRECTION('',(0.,0.607764068228761,-0.794117647058688)); #39642=DIRECTION('center_axis',(1.,0.,0.)); #39643=DIRECTION('ref_axis',(0.,0.,1.)); #39644=DIRECTION('',(0.,0.,-1.)); #39645=DIRECTION('center_axis',(1.,0.,0.)); #39646=DIRECTION('ref_axis',(0.,0.,-1.)); #39647=DIRECTION('',(0.,1.673950084893E-15,1.)); #39648=DIRECTION('',(0.,1.,0.)); #39649=DIRECTION('',(0.,0.,-1.)); #39650=DIRECTION('center_axis',(1.,0.,0.)); #39651=DIRECTION('ref_axis',(0.,0.,1.)); #39652=DIRECTION('',(0.,0.607764068228761,-0.794117647058688)); #39653=DIRECTION('',(0.,-0.794117647058688,-0.607764068228761)); #39654=DIRECTION('',(0.,-0.607764068228761,0.794117647058688)); #39655=DIRECTION('center_axis',(-1.,0.,0.)); #39656=DIRECTION('ref_axis',(0.,0.,-1.)); #39657=DIRECTION('center_axis',(0.,1.,-1.673950084893E-15)); #39658=DIRECTION('ref_axis',(0.,1.673950084893E-15,1.)); #39659=DIRECTION('',(1.,0.,0.)); #39660=DIRECTION('',(1.,0.,0.)); #39661=DIRECTION('center_axis',(1.,0.,0.)); #39662=DIRECTION('ref_axis',(0.,0.,-1.)); #39663=DIRECTION('',(1.,0.,0.)); #39664=DIRECTION('center_axis',(0.,0.794117647058688,0.607764068228761)); #39665=DIRECTION('ref_axis',(1.,0.,0.)); #39666=DIRECTION('',(1.,0.,0.)); #39667=DIRECTION('center_axis',(0.,-0.607764068228761,0.794117647058688)); #39668=DIRECTION('ref_axis',(0.,-0.794117647058688,-0.607764068228761)); #39669=DIRECTION('',(1.,0.,0.)); #39670=DIRECTION('center_axis',(0.,-0.794117647058688,-0.607764068228761)); #39671=DIRECTION('ref_axis',(1.,0.,0.)); #39672=DIRECTION('',(1.,0.,0.)); #39673=DIRECTION('center_axis',(1.,0.,0.)); #39674=DIRECTION('ref_axis',(0.,0.,-1.)); #39675=DIRECTION('',(1.,0.,0.)); #39676=DIRECTION('center_axis',(0.,-1.,0.)); #39677=DIRECTION('ref_axis',(0.,0.,1.)); #39678=DIRECTION('',(1.,0.,0.)); #39679=DIRECTION('center_axis',(0.,0.,-1.)); #39680=DIRECTION('ref_axis',(-1.,0.,0.)); #39681=DIRECTION('center_axis',(1.,0.,0.)); #39682=DIRECTION('ref_axis',(0.,0.,-1.)); #39683=DIRECTION('',(0.,-1.,0.)); #39684=DIRECTION('',(0.,0.,-1.)); #39685=DIRECTION('center_axis',(-1.,0.,0.)); #39686=DIRECTION('ref_axis',(0.,-8.673617379884E-16,-1.)); #39687=DIRECTION('',(0.,-0.607764068228761,-0.794117647058688)); #39688=DIRECTION('',(0.,0.794117647058688,-0.607764068228761)); #39689=DIRECTION('',(0.,0.607764068228761,0.794117647058688)); #39690=DIRECTION('center_axis',(1.,0.,0.)); #39691=DIRECTION('ref_axis',(0.,0.,-1.)); #39692=DIRECTION('',(0.,-1.673950084893E-15,1.)); #39693=DIRECTION('center_axis',(1.,0.,0.)); #39694=DIRECTION('ref_axis',(0.,0.,-1.)); #39695=DIRECTION('',(0.,0.,-1.)); #39696=DIRECTION('',(0.,-1.,0.)); #39697=DIRECTION('',(0.,-1.673950084893E-15,1.)); #39698=DIRECTION('center_axis',(1.,0.,0.)); #39699=DIRECTION('ref_axis',(0.,0.,-1.)); #39700=DIRECTION('',(0.,0.607764068228761,0.794117647058688)); #39701=DIRECTION('',(0.,0.794117647058688,-0.607764068228761)); #39702=DIRECTION('',(0.,-0.607764068228761,-0.794117647058688)); #39703=DIRECTION('center_axis',(-1.,0.,0.)); #39704=DIRECTION('ref_axis',(0.,-8.673617379884E-16,-1.)); #39705=DIRECTION('center_axis',(0.,-1.,-1.673950084893E-15)); #39706=DIRECTION('ref_axis',(1.,0.,0.)); #39707=DIRECTION('',(1.,0.,0.)); #39708=DIRECTION('',(1.,0.,0.)); #39709=DIRECTION('center_axis',(1.,0.,0.)); #39710=DIRECTION('ref_axis',(0.,0.,-1.)); #39711=DIRECTION('',(1.,0.,0.)); #39712=DIRECTION('center_axis',(0.,-0.794117647058688,0.607764068228761)); #39713=DIRECTION('ref_axis',(0.,0.607764068228761,0.794117647058688)); #39714=DIRECTION('',(1.,0.,0.)); #39715=DIRECTION('center_axis',(0.,0.607764068228761,0.794117647058688)); #39716=DIRECTION('ref_axis',(1.,0.,0.)); #39717=DIRECTION('',(1.,0.,0.)); #39718=DIRECTION('center_axis',(0.,0.794117647058688,-0.607764068228761)); #39719=DIRECTION('ref_axis',(-1.,0.,0.)); #39720=DIRECTION('',(1.,0.,0.)); #39721=DIRECTION('center_axis',(1.,0.,0.)); #39722=DIRECTION('ref_axis',(0.,0.,-1.)); #39723=DIRECTION('',(1.,0.,0.)); #39724=DIRECTION('center_axis',(0.,1.,0.)); #39725=DIRECTION('ref_axis',(-1.,0.,0.)); #39726=DIRECTION('',(1.,0.,0.)); #39727=DIRECTION('center_axis',(0.,0.,-1.)); #39728=DIRECTION('ref_axis',(-1.,0.,0.)); #39729=DIRECTION('center_axis',(0.,1.,0.)); #39730=DIRECTION('ref_axis',(-1.,0.,0.)); #39731=DIRECTION('',(1.,0.,0.)); #39732=DIRECTION('',(0.,0.,-1.)); #39733=DIRECTION('center_axis',(0.,-1.,0.)); #39734=DIRECTION('ref_axis',(0.,0.,1.)); #39735=DIRECTION('',(0.607764068228761,0.,-0.794117647058688)); #39736=DIRECTION('',(-0.794117647058688,0.,-0.607764068228761)); #39737=DIRECTION('',(-0.607764068228761,0.,0.794117647058688)); #39738=DIRECTION('center_axis',(0.,1.,0.)); #39739=DIRECTION('ref_axis',(0.,0.,-1.)); #39740=DIRECTION('',(-6.695800339572E-15,0.,1.)); #39741=DIRECTION('center_axis',(0.,1.,0.)); #39742=DIRECTION('ref_axis',(-1.,0.,0.)); #39743=DIRECTION('',(0.,0.,-1.)); #39744=DIRECTION('',(1.,0.,0.)); #39745=DIRECTION('',(-6.695800339572E-15,0.,1.)); #39746=DIRECTION('center_axis',(0.,1.,0.)); #39747=DIRECTION('ref_axis',(0.,0.,-1.)); #39748=DIRECTION('',(-0.607764068228761,0.,0.794117647058688)); #39749=DIRECTION('',(-0.794117647058688,0.,-0.607764068228761)); #39750=DIRECTION('',(0.607764068228761,0.,-0.794117647058688)); #39751=DIRECTION('center_axis',(0.,-1.,0.)); #39752=DIRECTION('ref_axis',(0.,0.,1.)); #39753=DIRECTION('center_axis',(1.,0.,0.)); #39754=DIRECTION('ref_axis',(0.,0.,-1.)); #39755=DIRECTION('',(0.,1.,0.)); #39756=DIRECTION('',(0.,1.,0.)); #39757=DIRECTION('center_axis',(0.,1.,0.)); #39758=DIRECTION('ref_axis',(0.,0.,-1.)); #39759=DIRECTION('',(0.,1.,0.)); #39760=DIRECTION('center_axis',(0.794117647058688,0.,0.607764068228761)); #39761=DIRECTION('ref_axis',(0.607764068228761,0.,-0.794117647058688)); #39762=DIRECTION('',(0.,1.,0.)); #39763=DIRECTION('center_axis',(0.607764068228761,0.,-0.794117647058688)); #39764=DIRECTION('ref_axis',(0.,1.,0.)); #39765=DIRECTION('',(0.,1.,0.)); #39766=DIRECTION('center_axis',(-0.794117647058688,0.,-0.607764068228761)); #39767=DIRECTION('ref_axis',(0.,-1.,0.)); #39768=DIRECTION('',(0.,1.,0.)); #39769=DIRECTION('center_axis',(0.,1.,0.)); #39770=DIRECTION('ref_axis',(0.,0.,-1.)); #39771=DIRECTION('',(0.,1.,0.)); #39772=DIRECTION('center_axis',(-1.,0.,-6.695800339572E-15)); #39773=DIRECTION('ref_axis',(6.695800339572E-15,0.,-1.)); #39774=DIRECTION('',(0.,1.,0.)); #39775=DIRECTION('center_axis',(0.,0.,1.)); #39776=DIRECTION('ref_axis',(0.,-1.,0.)); #39777=DIRECTION('center_axis',(0.,1.,0.)); #39778=DIRECTION('ref_axis',(-1.,0.,0.)); #39779=DIRECTION('',(-1.,0.,0.)); #39780=DIRECTION('',(6.695800339572E-15,0.,1.)); #39781=DIRECTION('center_axis',(0.,-1.,0.)); #39782=DIRECTION('ref_axis',(0.,0.,-1.)); #39783=DIRECTION('',(0.607764068228761,0.,0.794117647058688)); #39784=DIRECTION('',(0.794117647058688,0.,-0.607764068228761)); #39785=DIRECTION('',(-0.607764068228761,0.,-0.794117647058688)); #39786=DIRECTION('center_axis',(0.,1.,0.)); #39787=DIRECTION('ref_axis',(0.,0.,1.)); #39788=DIRECTION('',(0.,0.,-1.)); #39789=DIRECTION('center_axis',(0.,1.,0.)); #39790=DIRECTION('ref_axis',(-1.,0.,0.)); #39791=DIRECTION('',(6.695800339572E-15,0.,1.)); #39792=DIRECTION('',(-1.,0.,0.)); #39793=DIRECTION('',(0.,0.,-1.)); #39794=DIRECTION('center_axis',(0.,1.,0.)); #39795=DIRECTION('ref_axis',(0.,0.,1.)); #39796=DIRECTION('',(-0.607764068228761,0.,-0.794117647058688)); #39797=DIRECTION('',(0.794117647058688,0.,-0.607764068228761)); #39798=DIRECTION('',(0.607764068228761,0.,0.794117647058688)); #39799=DIRECTION('center_axis',(0.,-1.,0.)); #39800=DIRECTION('ref_axis',(0.,0.,-1.)); #39801=DIRECTION('center_axis',(-1.,0.,0.)); #39802=DIRECTION('ref_axis',(0.,1.,0.)); #39803=DIRECTION('',(0.,1.,0.)); #39804=DIRECTION('',(0.,1.,0.)); #39805=DIRECTION('center_axis',(0.,1.,0.)); #39806=DIRECTION('ref_axis',(0.,0.,-1.)); #39807=DIRECTION('',(0.,1.,0.)); #39808=DIRECTION('center_axis',(-0.794117647058688,0.,0.607764068228761)); #39809=DIRECTION('ref_axis',(0.,-1.,0.)); #39810=DIRECTION('',(0.,1.,0.)); #39811=DIRECTION('center_axis',(-0.607764068228761,0.,-0.794117647058688)); #39812=DIRECTION('ref_axis',(0.,-1.,0.)); #39813=DIRECTION('',(0.,1.,0.)); #39814=DIRECTION('center_axis',(0.794117647058688,0.,-0.607764068228761)); #39815=DIRECTION('ref_axis',(0.,1.,0.)); #39816=DIRECTION('',(0.,1.,0.)); #39817=DIRECTION('center_axis',(0.,1.,0.)); #39818=DIRECTION('ref_axis',(0.,0.,-1.)); #39819=DIRECTION('',(0.,1.,0.)); #39820=DIRECTION('center_axis',(1.,0.,-6.695800339572E-15)); #39821=DIRECTION('ref_axis',(0.,1.,0.)); #39822=DIRECTION('',(0.,1.,0.)); #39823=DIRECTION('center_axis',(0.,0.,1.)); #39824=DIRECTION('ref_axis',(0.,-1.,0.)); #39825=DIRECTION('center_axis',(-2.168404344971E-16,0.,-1.)); #39826=DIRECTION('ref_axis',(-1.,0.,2.168404344971E-16)); #39827=DIRECTION('center_axis',(2.168404344971E-16,0.,1.)); #39828=DIRECTION('ref_axis',(1.,0.,-2.168404344971E-16)); #39829=DIRECTION('',(-1.885568995627E-16,0.,-1.)); #39830=DIRECTION('center_axis',(-2.168404344971E-16,-4.701977403289E-32, -1.)); #39831=DIRECTION('ref_axis',(-1.,8.50802870020078E-63,2.168404344971E-16)); #39832=DIRECTION('',(1.885568995627E-16,0.,1.)); #39833=DIRECTION('center_axis',(0.,1.,0.)); #39834=DIRECTION('ref_axis',(1.,0.,0.)); #39835=DIRECTION('center_axis',(2.168404344971E-16,0.,1.)); #39836=DIRECTION('ref_axis',(1.,0.,-2.168404344971E-16)); #39837=DIRECTION('center_axis',(0.,1.,0.)); #39838=DIRECTION('ref_axis',(1.,0.,0.)); #39839=DIRECTION('center_axis',(0.,-1.,0.)); #39840=DIRECTION('ref_axis',(1.,0.,0.)); #39841=DIRECTION('center_axis',(0.,1.,0.)); #39842=DIRECTION('ref_axis',(1.,0.,0.)); #39843=DIRECTION('center_axis',(-4.336808689942E-16,0.,-1.)); #39844=DIRECTION('ref_axis',(-1.,0.,4.336808689942E-16)); #39845=DIRECTION('center_axis',(0.,-1.,0.)); #39846=DIRECTION('ref_axis',(1.,0.,0.)); #39847=DIRECTION('center_axis',(0.,1.,0.)); #39848=DIRECTION('ref_axis',(1.,0.,0.)); #39849=DIRECTION('center_axis',(2.168404344971E-16,0.,1.)); #39850=DIRECTION('ref_axis',(1.,0.,-2.168404344971E-16)); #39851=DIRECTION('',(1.885568995627E-16,0.,1.)); #39852=DIRECTION('',(-1.885568995627E-16,0.,-1.)); #39853=DIRECTION('center_axis',(0.,1.,0.)); #39854=DIRECTION('ref_axis',(0.,0.,-1.)); #39855=DIRECTION('center_axis',(1.,0.,-1.885568995627E-16)); #39856=DIRECTION('ref_axis',(-1.885568995627E-16,0.,-1.)); #39857=DIRECTION('',(1.885568995627E-16,0.,1.)); #39858=DIRECTION('',(0.,-1.,0.)); #39859=DIRECTION('',(0.,-1.,0.)); #39860=DIRECTION('center_axis',(0.,-1.,0.)); #39861=DIRECTION('ref_axis',(-1.,0.,0.)); #39862=DIRECTION('',(0.,-1.,0.)); #39863=DIRECTION('center_axis',(0.,1.,0.)); #39864=DIRECTION('ref_axis',(1.,0.,0.)); #39865=DIRECTION('center_axis',(-1.,0.,1.885568995627E-16)); #39866=DIRECTION('ref_axis',(1.885568995627E-16,0.,1.)); #39867=DIRECTION('',(-1.885568995627E-16,0.,-1.)); #39868=DIRECTION('',(0.,-1.,0.)); #39869=DIRECTION('center_axis',(0.,-1.,0.)); #39870=DIRECTION('ref_axis',(-1.,0.,0.)); #39871=DIRECTION('center_axis',(0.,1.,0.)); #39872=DIRECTION('ref_axis',(1.,0.,0.)); #39873=DIRECTION('center_axis',(0.,-1.,0.)); #39874=DIRECTION('ref_axis',(-1.,0.,0.)); #39875=DIRECTION('',(-1.,0.,0.)); #39876=DIRECTION('',(0.,0.,-1.)); #39877=DIRECTION('',(1.,0.,0.)); #39878=DIRECTION('',(0.,0.,1.)); #39879=DIRECTION('center_axis',(-1.,0.,0.)); #39880=DIRECTION('ref_axis',(0.,-1.,0.)); #39881=DIRECTION('',(0.,-1.,0.)); #39882=DIRECTION('',(0.,-1.,0.)); #39883=DIRECTION('',(0.,0.,-1.)); #39884=DIRECTION('center_axis',(0.,0.,-1.)); #39885=DIRECTION('ref_axis',(0.,1.,0.)); #39886=DIRECTION('',(0.,-1.,0.)); #39887=DIRECTION('',(1.,0.,0.)); #39888=DIRECTION('center_axis',(1.,0.,0.)); #39889=DIRECTION('ref_axis',(0.,0.,-1.)); #39890=DIRECTION('',(0.,-1.,0.)); #39891=DIRECTION('',(0.,0.,1.)); #39892=DIRECTION('center_axis',(0.,0.,1.)); #39893=DIRECTION('ref_axis',(1.,0.,0.)); #39894=DIRECTION('',(-1.,0.,0.)); #39895=DIRECTION('center_axis',(0.,-1.,0.)); #39896=DIRECTION('ref_axis',(-1.,0.,0.)); #39897=DIRECTION('center_axis',(0.,-1.,0.)); #39898=DIRECTION('ref_axis',(0.,0.,-1.)); #39899=DIRECTION('',(0.,0.,-1.)); #39900=DIRECTION('',(1.,0.,0.)); #39901=DIRECTION('',(0.,0.,1.)); #39902=DIRECTION('',(-1.,0.,0.)); #39903=DIRECTION('center_axis',(0.,-1.,0.)); #39904=DIRECTION('ref_axis',(0.,0.,-1.)); #39905=DIRECTION('',(1.,0.,0.)); #39906=DIRECTION('',(0.,0.,-1.)); #39907=DIRECTION('',(-1.,0.,0.)); #39908=DIRECTION('',(0.,0.,1.)); #39909=DIRECTION('center_axis',(0.,0.,-1.)); #39910=DIRECTION('ref_axis',(0.,-1.,0.)); #39911=DIRECTION('',(0.,-1.,0.)); #39912=DIRECTION('',(0.,-1.,0.)); #39913=DIRECTION('center_axis',(1.,0.,0.)); #39914=DIRECTION('ref_axis',(0.,1.,0.)); #39915=DIRECTION('',(0.,-1.,0.)); #39916=DIRECTION('center_axis',(0.,0.,1.)); #39917=DIRECTION('ref_axis',(1.,0.,0.)); #39918=DIRECTION('',(0.,-1.,0.)); #39919=DIRECTION('center_axis',(-1.,0.,0.)); #39920=DIRECTION('ref_axis',(0.,0.,1.)); #39921=DIRECTION('center_axis',(0.,-1.,0.)); #39922=DIRECTION('ref_axis',(0.,0.,-1.)); #39923=DIRECTION('',(1.,0.,0.)); #39924=DIRECTION('',(0.,0.,-1.)); #39925=DIRECTION('',(-1.,0.,0.)); #39926=DIRECTION('',(0.,0.,1.)); #39927=DIRECTION('center_axis',(1.,0.,0.)); #39928=DIRECTION('ref_axis',(0.,1.,0.)); #39929=DIRECTION('',(0.,-1.,0.)); #39930=DIRECTION('',(0.,0.,1.)); #39931=DIRECTION('',(0.,-1.,0.)); #39932=DIRECTION('center_axis',(-1.,0.,0.)); #39933=DIRECTION('ref_axis',(0.,0.,1.)); #39934=DIRECTION('',(0.,-1.,0.)); #39935=DIRECTION('',(0.,0.,-1.)); #39936=DIRECTION('',(0.,-1.,0.)); #39937=DIRECTION('center_axis',(0.,-1.,0.)); #39938=DIRECTION('ref_axis',(0.,0.,-1.)); #39939=DIRECTION('',(0.,0.,-1.)); #39940=DIRECTION('',(1.,0.,0.)); #39941=DIRECTION('',(0.,0.,1.)); #39942=DIRECTION('',(-1.,0.,0.)); #39943=DIRECTION('center_axis',(0.,0.,-1.)); #39944=DIRECTION('ref_axis',(0.,-1.,0.)); #39945=DIRECTION('',(0.,-1.,0.)); #39946=DIRECTION('',(0.,-1.,0.)); #39947=DIRECTION('',(1.,0.,0.)); #39948=DIRECTION('',(1.,0.,0.)); #39949=DIRECTION('center_axis',(1.,0.,0.)); #39950=DIRECTION('ref_axis',(0.,1.,0.)); #39951=DIRECTION('',(0.,-1.,0.)); #39952=DIRECTION('',(0.,0.,1.)); #39953=DIRECTION('center_axis',(0.,0.,1.)); #39954=DIRECTION('ref_axis',(1.,0.,0.)); #39955=DIRECTION('',(0.,-1.,0.)); #39956=DIRECTION('',(-1.,0.,0.)); #39957=DIRECTION('',(-1.,0.,0.)); #39958=DIRECTION('center_axis',(-1.,0.,0.)); #39959=DIRECTION('ref_axis',(0.,0.,1.)); #39960=DIRECTION('',(0.,0.,-1.)); #39961=DIRECTION('center_axis',(0.,-1.,0.)); #39962=DIRECTION('ref_axis',(0.,0.,-1.)); #39963=DIRECTION('center_axis',(0.,-1.,0.)); #39964=DIRECTION('ref_axis',(0.,0.,-1.)); #39965=DIRECTION('center_axis',(0.,0.,-1.)); #39966=DIRECTION('ref_axis',(0.,1.,0.)); #39967=DIRECTION('',(1.,0.,0.)); #39968=DIRECTION('',(0.,-1.,0.)); #39969=DIRECTION('',(1.,0.,0.)); #39970=DIRECTION('',(0.,-1.,0.)); #39971=DIRECTION('center_axis',(1.,0.,0.)); #39972=DIRECTION('ref_axis',(0.,0.,-1.)); #39973=DIRECTION('',(0.,1.,0.)); #39974=DIRECTION('',(0.,0.,1.)); #39975=DIRECTION('',(0.,0.,1.)); #39976=DIRECTION('center_axis',(-1.,0.,0.)); #39977=DIRECTION('ref_axis',(0.,-1.,0.)); #39978=DIRECTION('',(0.,-1.,0.)); #39979=DIRECTION('',(0.,0.,-1.)); #39980=DIRECTION('',(0.,0.,-1.)); #39981=DIRECTION('center_axis',(0.,1.,0.)); #39982=DIRECTION('ref_axis',(0.,0.,-1.)); #39983=DIRECTION('',(-1.,0.,0.)); #39984=DIRECTION('center_axis',(-1.,0.,0.)); #39985=DIRECTION('ref_axis',(0.,-1.,0.)); #39986=DIRECTION('',(0.,1.,0.)); #39987=DIRECTION('',(0.,0.,-1.)); #39988=DIRECTION('',(0.,-1.,0.)); #39989=DIRECTION('',(0.,0.,-1.)); #39990=DIRECTION('center_axis',(1.,0.,0.)); #39991=DIRECTION('ref_axis',(0.,0.,-1.)); #39992=DIRECTION('',(0.,-1.,0.)); #39993=DIRECTION('',(0.,0.,1.)); #39994=DIRECTION('',(0.,-1.,0.)); #39995=DIRECTION('',(0.,0.,1.)); #39996=DIRECTION('center_axis',(0.,1.,0.)); #39997=DIRECTION('ref_axis',(0.,0.,-1.)); #39998=DIRECTION('',(1.,0.,0.)); #39999=DIRECTION('',(-1.,0.,0.)); #40000=DIRECTION('center_axis',(0.,0.,1.)); #40001=DIRECTION('ref_axis',(1.,0.,0.)); #40002=DIRECTION('',(-1.,0.,0.)); #40003=DIRECTION('center_axis',(0.,-1.,0.)); #40004=DIRECTION('ref_axis',(-1.,0.,0.)); #40005=DIRECTION('',(1.,0.,0.)); #40006=DIRECTION('',(1.,0.,0.)); #40007=DIRECTION('',(0.,0.,1.)); #40008=DIRECTION('',(-1.,0.,0.)); #40009=DIRECTION('',(-1.,0.,0.)); #40010=DIRECTION('',(0.,0.,-1.)); #40011=DIRECTION('center_axis',(0.,-1.,0.)); #40012=DIRECTION('ref_axis',(-1.,0.,0.)); #40013=DIRECTION('',(0.,0.,-1.)); #40014=DIRECTION('',(-1.,0.,0.)); #40015=DIRECTION('',(0.,0.,1.)); #40016=DIRECTION('',(1.,0.,0.)); #40017=DIRECTION('center_axis',(-1.,0.,0.)); #40018=DIRECTION('ref_axis',(0.,-1.,0.)); #40019=DIRECTION('',(0.,-1.,0.)); #40020=DIRECTION('',(0.,-1.,0.)); #40021=DIRECTION('center_axis',(0.,0.,-1.)); #40022=DIRECTION('ref_axis',(0.,1.,0.)); #40023=DIRECTION('',(0.,-1.,0.)); #40024=DIRECTION('center_axis',(1.,0.,0.)); #40025=DIRECTION('ref_axis',(0.,0.,-1.)); #40026=DIRECTION('',(0.,-1.,0.)); #40027=DIRECTION('center_axis',(0.,0.,1.)); #40028=DIRECTION('ref_axis',(1.,0.,0.)); #40029=DIRECTION('center_axis',(0.,-1.,0.)); #40030=DIRECTION('ref_axis',(1.,0.,0.)); #40031=DIRECTION('',(1.,0.,0.)); #40032=DIRECTION('',(0.,0.,1.)); #40033=DIRECTION('',(-1.,0.,0.)); #40034=DIRECTION('',(0.,0.,-1.)); #40035=DIRECTION('center_axis',(0.,-1.,0.)); #40036=DIRECTION('ref_axis',(1.,0.,0.)); #40037=DIRECTION('',(0.,0.,1.)); #40038=DIRECTION('',(1.,0.,0.)); #40039=DIRECTION('',(0.,0.,-1.)); #40040=DIRECTION('',(-1.,0.,0.)); #40041=DIRECTION('center_axis',(1.,0.,0.)); #40042=DIRECTION('ref_axis',(0.,-1.,0.)); #40043=DIRECTION('',(0.,-1.,0.)); #40044=DIRECTION('',(0.,-1.,0.)); #40045=DIRECTION('center_axis',(0.,0.,1.)); #40046=DIRECTION('ref_axis',(0.,1.,0.)); #40047=DIRECTION('',(0.,-1.,0.)); #40048=DIRECTION('center_axis',(-1.,0.,0.)); #40049=DIRECTION('ref_axis',(0.,0.,1.)); #40050=DIRECTION('',(0.,-1.,0.)); #40051=DIRECTION('center_axis',(0.,0.,-1.)); #40052=DIRECTION('ref_axis',(-1.,0.,0.)); #40053=DIRECTION('center_axis',(0.,-1.,0.)); #40054=DIRECTION('ref_axis',(0.,0.,-1.)); #40055=DIRECTION('',(0.,0.,-1.)); #40056=DIRECTION('',(1.,0.,0.)); #40057=DIRECTION('',(0.,0.,1.)); #40058=DIRECTION('',(-1.,0.,0.)); #40059=DIRECTION('center_axis',(0.,-1.,0.)); #40060=DIRECTION('ref_axis',(0.,0.,-1.)); #40061=DIRECTION('',(1.,0.,0.)); #40062=DIRECTION('',(0.,0.,-1.)); #40063=DIRECTION('',(-1.,0.,0.)); #40064=DIRECTION('',(0.,0.,1.)); #40065=DIRECTION('center_axis',(0.,0.,-1.)); #40066=DIRECTION('ref_axis',(0.,-1.,0.)); #40067=DIRECTION('',(0.,-1.,0.)); #40068=DIRECTION('',(0.,-1.,0.)); #40069=DIRECTION('center_axis',(1.,0.,0.)); #40070=DIRECTION('ref_axis',(0.,1.,0.)); #40071=DIRECTION('',(0.,-1.,0.)); #40072=DIRECTION('center_axis',(0.,0.,1.)); #40073=DIRECTION('ref_axis',(1.,0.,0.)); #40074=DIRECTION('',(0.,-1.,0.)); #40075=DIRECTION('center_axis',(-1.,0.,0.)); #40076=DIRECTION('ref_axis',(0.,0.,1.)); #40077=DIRECTION('center_axis',(0.,-1.,0.)); #40078=DIRECTION('ref_axis',(0.,0.,-1.)); #40079=DIRECTION('',(0.,0.,-1.)); #40080=DIRECTION('',(1.,0.,0.)); #40081=DIRECTION('',(0.,0.,1.)); #40082=DIRECTION('',(-1.,0.,0.)); #40083=DIRECTION('center_axis',(0.,-1.,0.)); #40084=DIRECTION('ref_axis',(0.,0.,-1.)); #40085=DIRECTION('',(1.,0.,0.)); #40086=DIRECTION('',(0.,0.,-1.)); #40087=DIRECTION('',(-1.,0.,0.)); #40088=DIRECTION('',(0.,0.,1.)); #40089=DIRECTION('center_axis',(0.,0.,-1.)); #40090=DIRECTION('ref_axis',(0.,-1.,0.)); #40091=DIRECTION('',(0.,-1.,0.)); #40092=DIRECTION('',(0.,-1.,0.)); #40093=DIRECTION('center_axis',(1.,0.,0.)); #40094=DIRECTION('ref_axis',(0.,1.,0.)); #40095=DIRECTION('',(0.,-1.,0.)); #40096=DIRECTION('center_axis',(0.,0.,1.)); #40097=DIRECTION('ref_axis',(1.,0.,0.)); #40098=DIRECTION('',(0.,-1.,0.)); #40099=DIRECTION('center_axis',(-1.,0.,0.)); #40100=DIRECTION('ref_axis',(0.,0.,1.)); #40101=DIRECTION('center_axis',(0.,-1.,0.)); #40102=DIRECTION('ref_axis',(0.,0.,-1.)); #40103=DIRECTION('',(0.,0.,-1.)); #40104=DIRECTION('',(1.,0.,0.)); #40105=DIRECTION('',(0.,0.,1.)); #40106=DIRECTION('',(-1.,0.,0.)); #40107=DIRECTION('center_axis',(0.,-1.,0.)); #40108=DIRECTION('ref_axis',(0.,0.,-1.)); #40109=DIRECTION('',(1.,0.,0.)); #40110=DIRECTION('',(0.,0.,-1.)); #40111=DIRECTION('',(-1.,0.,0.)); #40112=DIRECTION('',(0.,0.,1.)); #40113=DIRECTION('center_axis',(0.,0.,-1.)); #40114=DIRECTION('ref_axis',(0.,-1.,0.)); #40115=DIRECTION('',(0.,-1.,0.)); #40116=DIRECTION('',(0.,-1.,0.)); #40117=DIRECTION('center_axis',(1.,0.,0.)); #40118=DIRECTION('ref_axis',(0.,1.,0.)); #40119=DIRECTION('',(0.,-1.,0.)); #40120=DIRECTION('center_axis',(0.,0.,1.)); #40121=DIRECTION('ref_axis',(1.,0.,0.)); #40122=DIRECTION('',(0.,-1.,0.)); #40123=DIRECTION('center_axis',(-1.,0.,0.)); #40124=DIRECTION('ref_axis',(0.,0.,1.)); #40125=DIRECTION('center_axis',(0.,-1.,0.)); #40126=DIRECTION('ref_axis',(0.,0.,-1.)); #40127=DIRECTION('',(0.,0.,-1.)); #40128=DIRECTION('',(1.,0.,0.)); #40129=DIRECTION('',(0.,0.,1.)); #40130=DIRECTION('',(-1.,0.,0.)); #40131=DIRECTION('center_axis',(0.,-1.,0.)); #40132=DIRECTION('ref_axis',(0.,0.,-1.)); #40133=DIRECTION('',(1.,0.,0.)); #40134=DIRECTION('',(0.,0.,-1.)); #40135=DIRECTION('',(-1.,0.,0.)); #40136=DIRECTION('',(0.,0.,1.)); #40137=DIRECTION('center_axis',(0.,0.,-1.)); #40138=DIRECTION('ref_axis',(0.,-1.,0.)); #40139=DIRECTION('',(0.,-1.,0.)); #40140=DIRECTION('',(0.,-1.,0.)); #40141=DIRECTION('center_axis',(1.,0.,0.)); #40142=DIRECTION('ref_axis',(0.,1.,0.)); #40143=DIRECTION('',(0.,-1.,0.)); #40144=DIRECTION('center_axis',(0.,0.,1.)); #40145=DIRECTION('ref_axis',(1.,0.,0.)); #40146=DIRECTION('',(0.,-1.,0.)); #40147=DIRECTION('center_axis',(-1.,0.,0.)); #40148=DIRECTION('ref_axis',(0.,0.,1.)); #40149=DIRECTION('center_axis',(0.,-1.,0.)); #40150=DIRECTION('ref_axis',(0.,0.,-1.)); #40151=DIRECTION('',(0.,0.,-1.)); #40152=DIRECTION('',(1.,0.,0.)); #40153=DIRECTION('',(0.,0.,1.)); #40154=DIRECTION('',(-1.,0.,0.)); #40155=DIRECTION('center_axis',(0.,-1.,0.)); #40156=DIRECTION('ref_axis',(0.,0.,-1.)); #40157=DIRECTION('',(1.,0.,0.)); #40158=DIRECTION('',(0.,0.,-1.)); #40159=DIRECTION('',(-1.,0.,0.)); #40160=DIRECTION('',(0.,0.,1.)); #40161=DIRECTION('center_axis',(0.,0.,-1.)); #40162=DIRECTION('ref_axis',(0.,-1.,0.)); #40163=DIRECTION('',(0.,-1.,0.)); #40164=DIRECTION('',(0.,-1.,0.)); #40165=DIRECTION('center_axis',(1.,0.,0.)); #40166=DIRECTION('ref_axis',(0.,1.,0.)); #40167=DIRECTION('',(0.,-1.,0.)); #40168=DIRECTION('center_axis',(0.,0.,1.)); #40169=DIRECTION('ref_axis',(1.,0.,0.)); #40170=DIRECTION('',(0.,-1.,0.)); #40171=DIRECTION('center_axis',(-1.,0.,0.)); #40172=DIRECTION('ref_axis',(0.,0.,1.)); #40173=DIRECTION('center_axis',(0.,-1.,0.)); #40174=DIRECTION('ref_axis',(0.,0.,-1.)); #40175=DIRECTION('',(0.,0.,-1.)); #40176=DIRECTION('',(1.,0.,0.)); #40177=DIRECTION('',(0.,0.,1.)); #40178=DIRECTION('',(-1.,0.,0.)); #40179=DIRECTION('center_axis',(0.,-1.,0.)); #40180=DIRECTION('ref_axis',(0.,0.,-1.)); #40181=DIRECTION('',(1.,0.,0.)); #40182=DIRECTION('',(0.,0.,-1.)); #40183=DIRECTION('',(-1.,0.,0.)); #40184=DIRECTION('',(0.,0.,1.)); #40185=DIRECTION('center_axis',(0.,0.,-1.)); #40186=DIRECTION('ref_axis',(0.,-1.,0.)); #40187=DIRECTION('',(0.,-1.,0.)); #40188=DIRECTION('',(0.,-1.,0.)); #40189=DIRECTION('center_axis',(1.,0.,0.)); #40190=DIRECTION('ref_axis',(0.,1.,0.)); #40191=DIRECTION('',(0.,-1.,0.)); #40192=DIRECTION('center_axis',(0.,0.,1.)); #40193=DIRECTION('ref_axis',(1.,0.,0.)); #40194=DIRECTION('',(0.,-1.,0.)); #40195=DIRECTION('center_axis',(-1.,0.,0.)); #40196=DIRECTION('ref_axis',(0.,0.,1.)); #40197=DIRECTION('',(6.07716335728541E-64,0.,1.)); #40198=DIRECTION('',(1.,0.,0.)); #40199=DIRECTION('',(6.07716335728541E-64,0.,1.)); #40200=DIRECTION('',(1.,0.,0.)); #40201=DIRECTION('axis',(0.,0.,1.)); #40202=DIRECTION('refdir',(1.,0.,0.)); #40203=DIRECTION('axis',(0.,0.,1.)); #40204=DIRECTION('refdir',(1.,0.,0.)); #40205=DIRECTION('center_axis',(0.,0.,1.)); #40206=DIRECTION('ref_axis',(1.,0.,0.)); #40207=DIRECTION('',(1.,0.,0.)); #40208=DIRECTION('',(0.,-1.,0.)); #40209=DIRECTION('',(-1.,0.,0.)); #40210=DIRECTION('',(0.,1.,0.)); #40211=DIRECTION('',(-1.,0.,0.)); #40212=DIRECTION('',(0.,-1.,0.)); #40213=DIRECTION('',(1.,0.,0.)); #40214=DIRECTION('',(0.,1.,0.)); #40215=DIRECTION('center_axis',(0.,1.,0.)); #40216=DIRECTION('ref_axis',(-1.,0.,0.)); #40217=DIRECTION('',(0.,0.,1.)); #40218=DIRECTION('',(-1.,0.,0.)); #40219=DIRECTION('',(0.,0.,1.)); #40220=DIRECTION('',(1.,0.,0.)); #40221=DIRECTION('',(0.,0.,1.)); #40222=DIRECTION('',(0.,0.,1.)); #40223=DIRECTION('',(-1.,0.,0.)); #40224=DIRECTION('',(0.,0.,-1.)); #40225=DIRECTION('',(0.,0.,1.)); #40226=DIRECTION('',(-1.,0.,0.)); #40227=DIRECTION('',(1.,0.,0.)); #40228=DIRECTION('',(0.,0.,1.)); #40229=DIRECTION('',(-1.,0.,0.)); #40230=DIRECTION('',(0.,0.,-1.)); #40231=DIRECTION('',(0.,0.,1.)); #40232=DIRECTION('',(-1.,0.,0.)); #40233=DIRECTION('',(0.,0.,-1.)); #40234=DIRECTION('',(1.,0.,0.)); #40235=DIRECTION('center_axis',(0.,0.,1.)); #40236=DIRECTION('ref_axis',(1.,0.,0.)); #40237=DIRECTION('',(0.,1.,0.)); #40238=DIRECTION('',(0.,1.,0.)); #40239=DIRECTION('',(1.,0.,0.)); #40240=DIRECTION('center_axis',(0.,0.894427190999916,0.447213595499958)); #40241=DIRECTION('ref_axis',(-1.,0.,0.)); #40242=DIRECTION('',(1.,0.,0.)); #40243=DIRECTION('',(0.,0.447213595499958,-0.894427190999916)); #40244=DIRECTION('',(0.,-0.447213595499958,0.894427190999916)); #40245=DIRECTION('center_axis',(1.,0.,0.)); #40246=DIRECTION('ref_axis',(0.,0.,-1.)); #40247=DIRECTION('',(0.,1.,0.)); #40248=DIRECTION('',(0.,0.,-1.)); #40249=DIRECTION('center_axis',(0.,1.,0.)); #40250=DIRECTION('ref_axis',(0.,0.,-1.)); #40251=DIRECTION('',(-1.,0.,0.)); #40252=DIRECTION('',(0.,0.,1.)); #40253=DIRECTION('center_axis',(0.,1.,0.)); #40254=DIRECTION('ref_axis',(0.,0.,-1.)); #40255=DIRECTION('',(0.,0.,-1.)); #40256=DIRECTION('',(-1.,0.,0.)); #40257=DIRECTION('',(0.,0.,1.)); #40258=DIRECTION('',(1.,0.,0.)); #40259=DIRECTION('center_axis',(-1.,0.,0.)); #40260=DIRECTION('ref_axis',(0.,0.,1.)); #40261=DIRECTION('',(0.,1.,0.)); #40262=DIRECTION('center_axis',(0.,0.,-1.)); #40263=DIRECTION('ref_axis',(-1.,0.,0.)); #40264=DIRECTION('center_axis',(0.,0.894427190999916,0.447213595499958)); #40265=DIRECTION('ref_axis',(-1.,0.,0.)); #40266=DIRECTION('',(0.,0.447213595499958,-0.894427190999916)); #40267=DIRECTION('',(1.,0.,0.)); #40268=DIRECTION('',(0.,-0.447213595499958,0.894427190999916)); #40269=DIRECTION('center_axis',(1.,0.,0.)); #40270=DIRECTION('ref_axis',(0.,0.,-1.)); #40271=DIRECTION('',(0.,1.,0.)); #40272=DIRECTION('',(0.,1.,0.)); #40273=DIRECTION('center_axis',(0.,0.,-1.)); #40274=DIRECTION('ref_axis',(-1.,0.,0.)); #40275=DIRECTION('',(0.,1.,0.)); #40276=DIRECTION('center_axis',(-1.,0.,0.)); #40277=DIRECTION('ref_axis',(0.,0.,1.)); #40278=DIRECTION('',(0.,1.,0.)); #40279=DIRECTION('center_axis',(0.,0.,1.)); #40280=DIRECTION('ref_axis',(1.,0.,0.)); #40281=DIRECTION('center_axis',(0.,0.,1.)); #40282=DIRECTION('ref_axis',(0.,1.,0.)); #40283=DIRECTION('',(-1.,0.,0.)); #40284=DIRECTION('',(0.,-1.,0.)); #40285=DIRECTION('',(0.,1.,0.)); #40286=DIRECTION('center_axis',(1.,0.,0.)); #40287=DIRECTION('ref_axis',(0.,1.,0.)); #40288=DIRECTION('',(0.,0.,1.)); #40289=DIRECTION('',(0.,-1.,0.)); #40290=DIRECTION('',(0.,0.,1.)); #40291=DIRECTION('',(0.,1.,0.)); #40292=DIRECTION('',(0.,0.,1.)); #40293=DIRECTION('',(0.,0.,1.)); #40294=DIRECTION('',(0.,1.,0.)); #40295=DIRECTION('',(0.,0.,-1.)); #40296=DIRECTION('',(0.,1.,0.)); #40297=DIRECTION('',(0.,0.,1.)); #40298=DIRECTION('',(0.,-0.998629534754575,-0.0523359562429177)); #40299=DIRECTION('',(0.,0.,-1.)); #40300=DIRECTION('',(0.,-0.998629534754575,0.0523359562429177)); #40301=DIRECTION('',(0.,0.,1.)); #40302=DIRECTION('',(0.,-1.,0.)); #40303=DIRECTION('center_axis',(1.,0.,0.)); #40304=DIRECTION('ref_axis',(0.,0.,-1.)); #40305=DIRECTION('center_axis',(-1.,0.,0.)); #40306=DIRECTION('ref_axis',(0.,0.,-1.)); #40307=DIRECTION('',(0.,0.132743362831981,-0.99115044247786)); #40308=DIRECTION('center_axis',(-1.,0.,0.)); #40309=DIRECTION('ref_axis',(0.,-0.99115044247786,-0.132743362831981)); #40310=DIRECTION('',(-2.004774333932E-14,-1.,-1.067033120138E-8)); #40311=DIRECTION('center_axis',(-1.,5.8062136096452E-11,8.42246989946629E-11)); #40312=DIRECTION('ref_axis',(9.698295506667E-11,0.799981050980098,0.600025264528735)); #40313=DIRECTION('',(0.,1.,0.)); #40314=DIRECTION('center_axis',(-1.,-5.53923488584218E-11,8.17298200908529E-11)); #40315=DIRECTION('ref_axis',(8.17294546646037E-11,6.03517077346775E-6,0.999999999981788)); #40316=DIRECTION('',(0.,-1.,1.006504973448E-8)); #40317=DIRECTION('center_axis',(-1.,0.,0.)); #40318=DIRECTION('ref_axis',(0.,0.,1.)); #40319=DIRECTION('',(0.,0.132743362831981,0.99115044247786)); #40320=DIRECTION('center_axis',(-1.,0.,0.)); #40321=DIRECTION('ref_axis',(0.,0.99115044247786,-0.132743362831981)); #40322=DIRECTION('',(0.,1.,0.)); #40323=DIRECTION('',(0.,1.,0.)); #40324=DIRECTION('',(0.,0.,-1.)); #40325=DIRECTION('',(0.,-1.,0.)); #40326=DIRECTION('',(0.,0.,1.)); #40327=DIRECTION('center_axis',(0.,-1.,0.)); #40328=DIRECTION('ref_axis',(0.,0.,1.)); #40329=DIRECTION('',(-1.,0.,0.)); #40330=DIRECTION('',(0.,0.,1.)); #40331=DIRECTION('',(-1.,0.,0.)); #40332=DIRECTION('center_axis',(0.,0.,1.)); #40333=DIRECTION('ref_axis',(0.,1.,0.)); #40334=DIRECTION('',(0.,1.,0.)); #40335=DIRECTION('',(-1.,0.,0.)); #40336=DIRECTION('center_axis',(0.,1.,0.)); #40337=DIRECTION('ref_axis',(0.,0.,-1.)); #40338=DIRECTION('',(0.,0.,-1.)); #40339=DIRECTION('',(-1.,0.,0.)); #40340=DIRECTION('center_axis',(0.,0.,-1.)); #40341=DIRECTION('ref_axis',(0.,-1.,0.)); #40342=DIRECTION('',(0.,-1.,0.)); #40343=DIRECTION('center_axis',(-1.,0.,0.)); #40344=DIRECTION('ref_axis',(0.,-1.,0.)); #40345=DIRECTION('',(0.,0.,1.)); #40346=DIRECTION('',(0.,-1.,0.)); #40347=DIRECTION('',(0.,0.,1.)); #40348=DIRECTION('',(0.,-1.,0.)); #40349=DIRECTION('',(0.,0.,1.)); #40350=DIRECTION('',(0.,1.,0.)); #40351=DIRECTION('',(0.,0.,1.)); #40352=DIRECTION('',(0.,1.,0.)); #40353=DIRECTION('center_axis',(0.,0.,1.)); #40354=DIRECTION('ref_axis',(1.,0.,0.)); #40355=DIRECTION('',(0.,1.,0.)); #40356=DIRECTION('',(-1.,0.,0.)); #40357=DIRECTION('',(0.,1.,0.)); #40358=DIRECTION('',(1.,0.,0.)); #40359=DIRECTION('',(-1.,0.,0.)); #40360=DIRECTION('center_axis',(1.,0.,0.)); #40361=DIRECTION('ref_axis',(0.,0.,-1.)); #40362=DIRECTION('',(0.,0.,1.)); #40363=DIRECTION('',(0.,0.,1.)); #40364=DIRECTION('',(0.,1.,0.)); #40365=DIRECTION('center_axis',(0.,-1.,0.)); #40366=DIRECTION('ref_axis',(-1.,0.,0.)); #40367=DIRECTION('',(0.,0.,1.)); #40368=DIRECTION('',(1.,0.,0.)); #40369=DIRECTION('',(1.,0.,0.)); #40370=DIRECTION('',(0.,0.,1.)); #40371=DIRECTION('',(-1.,0.,0.)); #40372=DIRECTION('center_axis',(0.,-0.707106781186548,-0.707106781186548)); #40373=DIRECTION('ref_axis',(0.,-0.707106781186548,0.707106781186548)); #40374=DIRECTION('',(-1.,0.,0.)); #40375=DIRECTION('',(0.,0.707106781186048,-0.707106781187048)); #40376=DIRECTION('',(0.,-0.707106781186048,0.707106781187048)); #40377=DIRECTION('center_axis',(-1.,0.,0.)); #40378=DIRECTION('ref_axis',(0.,1.,0.)); #40379=DIRECTION('center_axis',(1.,0.,0.)); #40380=DIRECTION('ref_axis',(0.,0.474999999999959,-0.879985795339924)); #40381=DIRECTION('center_axis',(-1.,0.,0.)); #40382=DIRECTION('ref_axis',(0.,-1.,0.)); #40383=DIRECTION('',(0.,0.,1.)); #40384=DIRECTION('',(0.,-1.,0.)); #40385=DIRECTION('',(0.,0.,-1.)); #40386=DIRECTION('center_axis',(-1.,0.,0.)); #40387=DIRECTION('ref_axis',(0.,-1.,0.)); #40388=DIRECTION('',(0.,0.,1.)); #40389=DIRECTION('center_axis',(-1.,0.,0.)); #40390=DIRECTION('ref_axis',(0.,1.,0.)); #40391=DIRECTION('',(0.,-1.,0.)); #40392=DIRECTION('',(0.,0.,1.)); #40393=DIRECTION('',(0.,0.998629534754575,-0.0523359562429177)); #40394=DIRECTION('',(0.,0.,-1.)); #40395=DIRECTION('',(0.,0.998629534754575,0.0523359562429177)); #40396=DIRECTION('',(0.,0.,1.)); #40397=DIRECTION('',(0.,1.,0.)); #40398=DIRECTION('',(0.,0.,-1.)); #40399=DIRECTION('',(0.,-1.,0.)); #40400=DIRECTION('',(0.,0.,1.)); #40401=DIRECTION('',(0.,-3.451122128663E-14,1.)); #40402=DIRECTION('',(0.,1.,1.184237892934E-14)); #40403=DIRECTION('',(0.,0.,1.)); #40404=DIRECTION('',(0.,-1.,0.)); #40405=DIRECTION('center_axis',(1.,0.,0.)); #40406=DIRECTION('ref_axis',(0.,0.99115044247786,-0.132743362831981)); #40407=DIRECTION('',(0.,-1.,1.402710064781E-8)); #40408=DIRECTION('center_axis',(1.,4.05042817692219E-12,-5.65845417992295E-12)); #40409=DIRECTION('ref_axis',(6.63348519599448E-12,-0.799995609446816,0.60000585402629)); #40410=DIRECTION('',(0.,-1.,0.)); #40411=DIRECTION('center_axis',(1.,-6.1686054946828E-12,-9.74219937329439E-12)); #40412=DIRECTION('ref_axis',(9.74206402986134E-12,-1.40978852955075E-6, 0.999999999999006)); #40413=DIRECTION('',(1.026399253625E-14,-1.,-1.419588174107E-8)); #40414=DIRECTION('center_axis',(1.,0.,0.)); #40415=DIRECTION('ref_axis',(0.,0.,1.)); #40416=DIRECTION('',(0.,0.132743362831981,-0.99115044247786)); #40417=DIRECTION('center_axis',(1.,0.,0.)); #40418=DIRECTION('ref_axis',(0.,-0.99115044247786,-0.132743362831981)); #40419=DIRECTION('',(0.,1.,0.)); #40420=DIRECTION('center_axis',(1.,0.,0.)); #40421=DIRECTION('ref_axis',(0.,0.,-1.)); #40422=DIRECTION('',(0.,0.132743362831981,0.99115044247786)); #40423=DIRECTION('center_axis',(0.,-0.99115044247786,0.132743362831981)); #40424=DIRECTION('ref_axis',(0.,0.132743362831981,0.99115044247786)); #40425=DIRECTION('',(-1.,0.,0.)); #40426=DIRECTION('',(-1.,0.,0.)); #40427=DIRECTION('center_axis',(-1.,0.,0.)); #40428=DIRECTION('ref_axis',(0.,0.99115044247786,-0.132743362831981)); #40429=DIRECTION('',(-1.,0.,0.)); #40430=DIRECTION('center_axis',(0.,0.,1.)); #40431=DIRECTION('ref_axis',(0.,1.,0.)); #40432=DIRECTION('',(-1.,0.,0.)); #40433=DIRECTION('center_axis',(-1.,0.,0.)); #40434=DIRECTION('ref_axis',(0.,0.,-1.)); #40435=DIRECTION('',(-1.,0.,0.)); #40436=DIRECTION('center_axis',(0.,0.99115044247786,0.132743362831981)); #40437=DIRECTION('ref_axis',(0.,0.132743362831981,-0.99115044247786)); #40438=DIRECTION('',(-1.,0.,0.)); #40439=DIRECTION('center_axis',(-1.,0.,0.)); #40440=DIRECTION('ref_axis',(0.,-0.99115044247786,-0.132743362831981)); #40441=DIRECTION('',(-1.,0.,0.)); #40442=DIRECTION('center_axis',(0.,0.,-1.)); #40443=DIRECTION('ref_axis',(0.,-1.,0.)); #40444=DIRECTION('center_axis',(0.,0.,-1.)); #40445=DIRECTION('ref_axis',(0.,-1.,0.)); #40446=DIRECTION('',(-1.,0.,0.)); #40447=DIRECTION('center_axis',(0.00164683353308695,0.941506147455744,-0.336991783642208)); #40448=DIRECTION('ref_axis',(0.0154947060032482,-0.336975809198222,-0.941385796632325)); #40449=DIRECTION('center_axis',(0.,-1.,0.)); #40450=DIRECTION('ref_axis',(-1.,0.,0.)); #40451=DIRECTION('center_axis',(0.0123901809318524,-0.995957687045909,-0.0889649876672832)); #40452=DIRECTION('ref_axis',(0.990434397980922,-4.13856545310928E-6,0.13798443129223)); #40453=DIRECTION('',(0.,1.,0.)); #40454=DIRECTION('center_axis',(-0.0123901921699999,-0.995957687064472, 0.0889649858943267)); #40455=DIRECTION('ref_axis',(0.99043440420076,4.12307867929801E-6,0.137984386647495)); #40456=DIRECTION('center_axis',(0.00164835602593368,-0.941481658196388, -0.337060187803589)); #40457=DIRECTION('ref_axis',(0.0264059605518989,0.336984092404975,-0.941139971902866)); #40458=DIRECTION('center_axis',(0.,-1.,0.)); #40459=DIRECTION('ref_axis',(-1.,0.,0.)); #40460=DIRECTION('',(0.,-1.,0.)); #40461=DIRECTION('',(-0.98480775301219,0.,-0.173648177667033)); #40462=DIRECTION('center_axis',(-0.0155943360548859,-0.995959439571379, 0.0884398745570836)); #40463=DIRECTION('ref_axis',(-0.98480775301219,-9.36230259984863E-15,-0.173648177667032)); #40464=DIRECTION('',(0.172946541711923,-0.08980420217703,-0.980828577775563)); #40465=DIRECTION('',(-0.98480775301219,0.,-0.173648177667033)); #40466=DIRECTION('',(0.172946541711923,-0.08980420217703,-0.980828577775563)); #40467=DIRECTION('center_axis',(0.98480775301219,0.,0.173648177667033)); #40468=DIRECTION('ref_axis',(0.,1.,0.)); #40469=DIRECTION('',(0.,-1.,0.)); #40470=DIRECTION('',(0.172946541711923,0.08980420217703,-0.980828577775563)); #40471=DIRECTION('center_axis',(0.0155943360548859,-0.995959439571379,-0.0884398745570836)); #40472=DIRECTION('ref_axis',(-0.98480775301219,9.36230259984863E-15,-0.173648177667032)); #40473=DIRECTION('',(0.98480775301219,0.,0.173648177667033)); #40474=DIRECTION('',(0.172946541711923,0.08980420217703,-0.980828577775563)); #40475=DIRECTION('',(0.98480775301219,0.,0.173648177667033)); #40476=DIRECTION('center_axis',(0.98480775301219,0.,0.173648177667033)); #40477=DIRECTION('ref_axis',(0.,1.,0.)); #40478=DIRECTION('',(0.,1.,0.)); #40479=DIRECTION('center_axis',(0.,1.,0.)); #40480=DIRECTION('ref_axis',(0.98480775301219,0.,0.173648177667033)); #40481=DIRECTION('',(0.,1.,0.)); #40482=DIRECTION('',(-0.939692620785813,0.,0.342020143325932)); #40483=DIRECTION('center_axis',(0.,1.,0.)); #40484=DIRECTION('ref_axis',(0.98480775301219,0.,0.173648177667033)); #40485=DIRECTION('',(0.,-1.,0.)); #40486=DIRECTION('',(0.939692620785813,0.,-0.342020143325932)); #40487=DIRECTION('center_axis',(-0.0307148460998617,-0.995959439571378, -0.0843883461013921)); #40488=DIRECTION('ref_axis',(-0.939692620785814,-2.4466539905172E-14,0.34202014332593)); #40489=DIRECTION('',(-0.340638190269066,0.0898042021770874,-0.935895735967182)); #40490=DIRECTION('',(-0.340638190269066,0.0898042021770874,-0.935895735967182)); #40491=DIRECTION('',(-0.939692620785813,0.,0.342020143325932)); #40492=DIRECTION('center_axis',(-0.939692620785813,0.,0.342020143325932)); #40493=DIRECTION('ref_axis',(-0.342020143325932,0.,-0.939692620785813)); #40494=DIRECTION('',(-0.939692620785813,0.,0.342020143325932)); #40495=DIRECTION('center_axis',(0.939692620785813,3.46944695195331E-18, -0.342020143325932)); #40496=DIRECTION('ref_axis',(-0.0307148460998772,-0.99595943957138,-0.0843883461013629)); #40497=DIRECTION('center_axis',(-0.939692620785813,0.,0.342020143325932)); #40498=DIRECTION('ref_axis',(-0.342020143325932,0.,-0.939692620785813)); #40499=DIRECTION('center_axis',(0.939692620785813,0.,-0.342020143325932)); #40500=DIRECTION('ref_axis',(0.,1.,0.)); #40501=DIRECTION('center_axis',(-0.939692620785813,3.46944695195331E-18, 0.342020143325932)); #40502=DIRECTION('ref_axis',(-0.0307148460998815,0.995959439571379,-0.0843883461013749)); #40503=DIRECTION('',(0.,-1.,0.)); #40504=DIRECTION('',(-0.340638190269066,-0.0898042021770874,-0.935895735967182)); #40505=DIRECTION('center_axis',(0.939692620785813,0.,-0.342020143325932)); #40506=DIRECTION('ref_axis',(-0.342020143325932,0.,-0.939692620785813)); #40507=DIRECTION('',(0.939692620785813,0.,-0.342020143325932)); #40508=DIRECTION('',(0.939692620785813,0.,-0.342020143325932)); #40509=DIRECTION('center_axis',(0.939692620785813,0.,-0.342020143325932)); #40510=DIRECTION('ref_axis',(-0.342020143325932,0.,-0.939692620785813)); #40511=DIRECTION('center_axis',(0.939692620785813,0.,-0.342020143325932)); #40512=DIRECTION('ref_axis',(0.,1.,0.)); #40513=DIRECTION('',(-0.340638190269066,-0.0898042021770874,-0.935895735967182)); #40514=DIRECTION('',(0.,1.,0.)); #40515=DIRECTION('center_axis',(0.342020143325932,0.,0.939692620785813)); #40516=DIRECTION('ref_axis',(0.939692620785813,0.,-0.342020143325932)); #40517=DIRECTION('center_axis',(0.0307148460998617,-0.995959439571378,0.0843883461013921)); #40518=DIRECTION('ref_axis',(-0.939692620785814,2.4466539905172E-14,0.34202014332593)); #40519=DIRECTION('center_axis',(-1.,0.,0.)); #40520=DIRECTION('ref_axis',(0.,0.,1.)); #40521=DIRECTION('center_axis',(0.,0.,1.)); #40522=DIRECTION('ref_axis',(1.,0.,0.)); #40523=DIRECTION('',(1.,0.,0.)); #40524=DIRECTION('',(0.,1.,0.)); #40525=DIRECTION('',(1.,0.,0.)); #40526=DIRECTION('',(0.,1.,0.)); #40527=DIRECTION('',(1.,0.,0.)); #40528=DIRECTION('',(0.,1.,0.)); #40529=DIRECTION('center_axis',(0.,0.,1.)); #40530=DIRECTION('ref_axis',(1.,0.,0.)); #40531=DIRECTION('',(1.,0.,0.)); #40532=DIRECTION('',(0.,-1.,0.)); #40533=DIRECTION('',(1.,0.,0.)); #40534=DIRECTION('',(0.,-1.,0.)); #40535=DIRECTION('',(1.,0.,0.)); #40536=DIRECTION('center_axis',(0.,0.,1.)); #40537=DIRECTION('ref_axis',(1.,0.,0.)); #40538=DIRECTION('',(1.,0.,0.)); #40539=DIRECTION('',(0.,1.,0.)); #40540=DIRECTION('',(-1.,0.,0.)); #40541=DIRECTION('',(0.,1.,0.)); #40542=DIRECTION('center_axis',(0.,0.,1.)); #40543=DIRECTION('ref_axis',(1.,0.,0.)); #40544=DIRECTION('',(1.,0.,0.)); #40545=DIRECTION('',(1.,0.,0.)); #40546=DIRECTION('center_axis',(0.,0.,1.)); #40547=DIRECTION('ref_axis',(1.,0.,0.)); #40548=DIRECTION('',(-1.,0.,0.)); #40549=DIRECTION('',(0.,-1.,0.)); #40550=DIRECTION('',(1.,0.,0.)); #40551=DIRECTION('',(0.,1.,0.)); #40552=DIRECTION('',(0.,1.,0.)); #40553=DIRECTION('center_axis',(0.,-1.,0.)); #40554=DIRECTION('ref_axis',(-1.,0.,0.)); #40555=DIRECTION('',(0.,0.,1.)); #40556=DIRECTION('',(-1.,0.,0.)); #40557=DIRECTION('',(0.,0.,1.)); #40558=DIRECTION('',(-1.,0.,0.)); #40559=DIRECTION('',(0.,0.,1.)); #40560=DIRECTION('',(0.,0.,1.)); #40561=DIRECTION('',(-1.,0.,0.)); #40562=DIRECTION('',(-0.707106781186548,0.,0.707106781186548)); #40563=DIRECTION('',(0.,0.,1.)); #40564=DIRECTION('',(1.,0.,0.)); #40565=DIRECTION('',(0.,0.,-1.)); #40566=DIRECTION('',(1.,0.,0.)); #40567=DIRECTION('',(0.,0.,1.)); #40568=DIRECTION('',(-1.,0.,0.)); #40569=DIRECTION('',(0.,0.,-1.)); #40570=DIRECTION('',(1.,0.,0.)); #40571=DIRECTION('',(0.,0.,-1.)); #40572=DIRECTION('',(1.,0.,0.)); #40573=DIRECTION('',(0.,0.,-1.)); #40574=DIRECTION('',(-0.707106781186548,0.,-0.707106781186548)); #40575=DIRECTION('',(-1.,0.,0.)); #40576=DIRECTION('',(-0.707106781186548,0.,0.707106781186548)); #40577=DIRECTION('',(0.,0.,1.)); #40578=DIRECTION('',(1.,0.,0.)); #40579=DIRECTION('',(0.,0.,-1.)); #40580=DIRECTION('',(1.,0.,0.)); #40581=DIRECTION('',(0.,0.,1.)); #40582=DIRECTION('',(-1.,0.,0.)); #40583=DIRECTION('',(0.,0.,-1.)); #40584=DIRECTION('',(1.,0.,0.)); #40585=DIRECTION('',(0.,0.,-1.)); #40586=DIRECTION('',(1.,0.,0.)); #40587=DIRECTION('',(0.,0.,-1.)); #40588=DIRECTION('',(-0.707106781186548,0.,-0.707106781186548)); #40589=DIRECTION('',(-1.,0.,0.)); #40590=DIRECTION('',(-0.707106781186548,0.,0.707106781186548)); #40591=DIRECTION('',(0.,0.,1.)); #40592=DIRECTION('',(1.,0.,0.)); #40593=DIRECTION('',(0.,0.,-1.)); #40594=DIRECTION('',(1.,0.,0.)); #40595=DIRECTION('',(0.,0.,1.)); #40596=DIRECTION('',(-1.,0.,0.)); #40597=DIRECTION('',(0.,0.,-1.)); #40598=DIRECTION('',(1.,0.,0.)); #40599=DIRECTION('',(0.,0.,-1.)); #40600=DIRECTION('',(1.,0.,0.)); #40601=DIRECTION('',(0.,0.,-1.)); #40602=DIRECTION('',(-0.707106781186548,0.,-0.707106781186548)); #40603=DIRECTION('',(-1.,0.,0.)); #40604=DIRECTION('',(-0.707106781186548,0.,0.707106781186548)); #40605=DIRECTION('',(0.,0.,1.)); #40606=DIRECTION('',(1.,0.,0.)); #40607=DIRECTION('',(0.,0.,-1.)); #40608=DIRECTION('',(1.,0.,0.)); #40609=DIRECTION('',(0.,0.,1.)); #40610=DIRECTION('',(-1.,0.,0.)); #40611=DIRECTION('',(0.,0.,-1.)); #40612=DIRECTION('',(1.,0.,0.)); #40613=DIRECTION('',(0.,0.,-1.)); #40614=DIRECTION('',(1.,0.,0.)); #40615=DIRECTION('',(0.,0.,-1.)); #40616=DIRECTION('',(-0.707106781186548,0.,-0.707106781186548)); #40617=DIRECTION('',(-1.,0.,0.)); #40618=DIRECTION('',(0.,0.,1.)); #40619=DIRECTION('center_axis',(-1.,0.,0.)); #40620=DIRECTION('ref_axis',(0.,1.,0.)); #40621=DIRECTION('',(0.,0.,1.)); #40622=DIRECTION('',(0.,1.,0.)); #40623=DIRECTION('center_axis',(0.,0.,-1.)); #40624=DIRECTION('ref_axis',(-1.,0.,0.)); #40625=DIRECTION('',(0.,-1.,0.)); #40626=DIRECTION('',(1.,0.,0.)); #40627=DIRECTION('',(0.,-1.,0.)); #40628=DIRECTION('',(1.,0.,0.)); #40629=DIRECTION('',(0.,-1.,0.)); #40630=DIRECTION('',(-1.,0.,0.)); #40631=DIRECTION('',(0.,-1.,0.)); #40632=DIRECTION('',(1.,0.,0.)); #40633=DIRECTION('',(0.,-1.,0.)); #40634=DIRECTION('',(-1.,0.,0.)); #40635=DIRECTION('',(1.,0.,0.)); #40636=DIRECTION('',(0.,-1.,0.)); #40637=DIRECTION('',(-1.,0.,0.)); #40638=DIRECTION('',(0.,-1.,0.)); #40639=DIRECTION('',(1.,0.,0.)); #40640=DIRECTION('',(0.,-1.,0.)); #40641=DIRECTION('',(-1.,0.,0.)); #40642=DIRECTION('',(0.,-1.,0.)); #40643=DIRECTION('center_axis',(0.,1.,0.)); #40644=DIRECTION('ref_axis',(1.,0.,0.)); #40645=DIRECTION('',(0.,0.,1.)); #40646=DIRECTION('center_axis',(1.,0.,0.)); #40647=DIRECTION('ref_axis',(0.,-1.,0.)); #40648=DIRECTION('',(0.,-0.707106781186048,0.707106781187048)); #40649=DIRECTION('',(0.,0.,1.)); #40650=DIRECTION('',(0.,1.,0.)); #40651=DIRECTION('center_axis',(0.,-0.707106781186548,-0.707106781186548)); #40652=DIRECTION('ref_axis',(0.,-0.707106781186548,0.707106781186548)); #40653=DIRECTION('',(0.,0.707106781186048,-0.707106781187048)); #40654=DIRECTION('',(-1.,0.,0.)); #40655=DIRECTION('center_axis',(0.,1.,0.)); #40656=DIRECTION('ref_axis',(1.,0.,0.)); #40657=DIRECTION('',(0.,0.,-1.)); #40658=DIRECTION('',(1.,0.,0.)); #40659=DIRECTION('',(-1.,0.,0.)); #40660=DIRECTION('',(0.,0.,1.)); #40661=DIRECTION('',(0.,0.,1.)); #40662=DIRECTION('',(1.,0.,0.)); #40663=DIRECTION('center_axis',(0.,0.,-1.)); #40664=DIRECTION('ref_axis',(-1.,0.,0.)); #40665=DIRECTION('',(1.,0.,0.)); #40666=DIRECTION('',(0.,1.,0.)); #40667=DIRECTION('',(0.,1.,0.)); #40668=DIRECTION('center_axis',(1.,0.,0.)); #40669=DIRECTION('ref_axis',(0.,0.,-1.)); #40670=DIRECTION('',(0.,0.,-1.)); #40671=DIRECTION('',(0.,1.,0.)); #40672=DIRECTION('center_axis',(0.,0.,1.)); #40673=DIRECTION('ref_axis',(0.,-1.,0.)); #40674=DIRECTION('',(0.,-1.,0.)); #40675=DIRECTION('',(1.,0.,0.)); #40676=DIRECTION('',(0.,-1.,0.)); #40677=DIRECTION('',(1.,0.,0.)); #40678=DIRECTION('center_axis',(0.,-1.,0.)); #40679=DIRECTION('ref_axis',(0.,0.,-1.)); #40680=DIRECTION('',(0.,0.,1.)); #40681=DIRECTION('center_axis',(1.,0.,0.)); #40682=DIRECTION('ref_axis',(0.,1.,0.)); #40683=DIRECTION('',(0.,0.,-1.)); #40684=DIRECTION('',(0.,-1.,0.)); #40685=DIRECTION('',(0.,1.,0.)); #40686=DIRECTION('',(0.,0.,1.)); #40687=DIRECTION('',(0.,1.,0.)); #40688=DIRECTION('',(0.,0.,-1.)); #40689=DIRECTION('',(0.,-1.,0.)); #40690=DIRECTION('',(0.,0.,1.)); #40691=DIRECTION('center_axis',(0.,1.,0.)); #40692=DIRECTION('ref_axis',(0.,0.,1.)); #40693=DIRECTION('',(1.,0.,0.)); #40694=DIRECTION('',(1.,0.,0.)); #40695=DIRECTION('',(0.,0.,1.)); #40696=DIRECTION('center_axis',(-1.,0.,0.)); #40697=DIRECTION('ref_axis',(0.,-1.,0.)); #40698=DIRECTION('',(0.,0.,-1.)); #40699=DIRECTION('',(0.,0.998629534754575,-0.0523359562429177)); #40700=DIRECTION('',(0.,0.,-1.)); #40701=DIRECTION('',(0.,0.998629534754575,0.0523359562429177)); #40702=DIRECTION('',(0.,0.,-1.)); #40703=DIRECTION('',(0.,1.,0.)); #40704=DIRECTION('',(0.,0.,-1.)); #40705=DIRECTION('',(0.,-1.,0.)); #40706=DIRECTION('',(0.,0.,1.)); #40707=DIRECTION('',(0.,-1.,0.)); #40708=DIRECTION('',(0.,0.,-1.)); #40709=DIRECTION('',(0.,-1.,0.)); #40710=DIRECTION('',(0.,0.,1.)); #40711=DIRECTION('center_axis',(-1.,0.,0.)); #40712=DIRECTION('ref_axis',(0.,1.,0.)); #40713=DIRECTION('center_axis',(1.,0.,0.)); #40714=DIRECTION('ref_axis',(0.,0.99115044247786,-0.132743362831981)); #40715=DIRECTION('',(2.004774333932E-14,-1.,1.067151401824E-8)); #40716=DIRECTION('center_axis',(1.,-5.77377129363562E-11,8.35341888081372E-11)); #40717=DIRECTION('ref_axis',(-9.63113125817999E-11,-0.799981050987364,0.600025264519048)); #40718=DIRECTION('',(0.,-1.,0.)); #40719=DIRECTION('center_axis',(1.,5.74180131614885E-11,8.19233142773179E-11)); #40720=DIRECTION('ref_axis',(-8.1923731420997E-11,-6.03517562507534E-6, 0.999999999981788)); #40721=DIRECTION('',(2.004774333932E-14,-1.,-1.006376667891E-8)); #40722=DIRECTION('center_axis',(1.,0.,0.)); #40723=DIRECTION('ref_axis',(0.,0.,1.)); #40724=DIRECTION('',(0.,0.132743362831981,-0.99115044247786)); #40725=DIRECTION('center_axis',(1.,0.,0.)); #40726=DIRECTION('ref_axis',(0.,-0.99115044247786,-0.132743362831981)); #40727=DIRECTION('',(0.,1.,0.)); #40728=DIRECTION('center_axis',(1.,0.,0.)); #40729=DIRECTION('ref_axis',(0.,0.,-1.)); #40730=DIRECTION('',(0.,0.132743362831981,0.99115044247786)); #40731=DIRECTION('',(0.,-1.,0.)); #40732=DIRECTION('',(0.,0.,-1.)); #40733=DIRECTION('',(0.,1.,0.)); #40734=DIRECTION('center_axis',(0.,0.,-1.)); #40735=DIRECTION('ref_axis',(0.,1.,0.)); #40736=DIRECTION('',(1.,0.,0.)); #40737=DIRECTION('center_axis',(0.,-1.,0.)); #40738=DIRECTION('ref_axis',(0.,0.,-1.)); #40739=DIRECTION('',(1.,0.,0.)); #40740=DIRECTION('center_axis',(0.,0.,1.)); #40741=DIRECTION('ref_axis',(0.,-1.,0.)); #40742=DIRECTION('center_axis',(0.,0.99115044247786,-0.132743362831981)); #40743=DIRECTION('ref_axis',(0.,0.132743362831981,0.99115044247786)); #40744=DIRECTION('',(-1.,0.,0.)); #40745=DIRECTION('',(0.,0.132743362831981,0.99115044247786)); #40746=DIRECTION('',(-1.,0.,0.)); #40747=DIRECTION('center_axis',(-1.,0.,0.)); #40748=DIRECTION('ref_axis',(0.,0.99115044247786,-0.132743362831981)); #40749=DIRECTION('',(-1.,0.,0.)); #40750=DIRECTION('center_axis',(-1.,0.,0.)); #40751=DIRECTION('ref_axis',(0.,0.99115044247786,-0.132743362831981)); #40752=DIRECTION('center_axis',(1.,0.,0.)); #40753=DIRECTION('ref_axis',(0.,-1.,0.)); #40754=DIRECTION('',(0.,0.,1.)); #40755=DIRECTION('',(0.,-1.,0.)); #40756=DIRECTION('',(0.,3.451122128663E-14,-1.)); #40757=DIRECTION('',(0.,0.,-1.)); #40758=DIRECTION('',(0.,1.,0.)); #40759=DIRECTION('',(0.,0.,1.)); #40760=DIRECTION('',(0.,-1.,0.)); #40761=DIRECTION('',(0.,0.,-1.)); #40762=DIRECTION('',(0.,-0.998629534754575,-0.0523359562429177)); #40763=DIRECTION('',(0.,0.,-1.)); #40764=DIRECTION('',(0.,-0.998629534754575,0.0523359562429177)); #40765=DIRECTION('',(0.,0.,-1.)); #40766=DIRECTION('center_axis',(1.,0.,0.)); #40767=DIRECTION('ref_axis',(0.,0.,-1.)); #40768=DIRECTION('',(0.,0.,1.)); #40769=DIRECTION('center_axis',(-1.,0.,0.)); #40770=DIRECTION('ref_axis',(0.,-1.,0.)); #40771=DIRECTION('',(0.,0.,-1.)); #40772=DIRECTION('',(0.,1.,0.)); #40773=DIRECTION('',(0.,0.,1.)); #40774=DIRECTION('center_axis',(-1.,0.,0.)); #40775=DIRECTION('ref_axis',(0.,-1.,0.)); #40776=DIRECTION('center_axis',(1.,0.,0.)); #40777=DIRECTION('ref_axis',(0.,0.474999999999959,-0.879985795339924)); #40778=DIRECTION('center_axis',(-1.,0.,0.)); #40779=DIRECTION('ref_axis',(0.,0.,-1.)); #40780=DIRECTION('',(0.,0.132743362831981,-0.99115044247786)); #40781=DIRECTION('center_axis',(-1.,0.,0.)); #40782=DIRECTION('ref_axis',(0.,-0.99115044247786,-0.132743362831981)); #40783=DIRECTION('',(0.,-1.,-1.402340561049E-8)); #40784=DIRECTION('center_axis',(-1.,-3.88104762175491E-12,-5.36132273583922E-12)); #40785=DIRECTION('ref_axis',(-6.32262731256528E-12,0.799995609449005,0.600005854023371)); #40786=DIRECTION('',(0.,1.,0.)); #40787=DIRECTION('center_axis',(-1.,3.43719466251788E-12,-2.80827267272188E-12)); #40788=DIRECTION('ref_axis',(-2.80882301953145E-12,1.40980347853234E-6, 0.999999999999006)); #40789=DIRECTION('',(0.,-1.,1.41995562504E-8)); #40790=DIRECTION('center_axis',(-1.,0.,0.)); #40791=DIRECTION('ref_axis',(0.,0.,1.)); #40792=DIRECTION('',(0.,1.,0.)); #40793=DIRECTION('center_axis',(0.,0.,-1.)); #40794=DIRECTION('ref_axis',(0.,1.,0.)); #40795=DIRECTION('',(-1.,0.,0.)); #40796=DIRECTION('center_axis',(-1.,0.,0.)); #40797=DIRECTION('ref_axis',(0.,0.,-1.)); #40798=DIRECTION('',(-1.,0.,0.)); #40799=DIRECTION('center_axis',(0.,-0.99115044247786,-0.132743362831981)); #40800=DIRECTION('ref_axis',(0.,0.132743362831981,-0.99115044247786)); #40801=DIRECTION('',(-1.,0.,0.)); #40802=DIRECTION('center_axis',(-1.,0.,0.)); #40803=DIRECTION('ref_axis',(0.,-0.99115044247786,-0.132743362831981)); #40804=DIRECTION('',(-1.,0.,0.)); #40805=DIRECTION('center_axis',(0.,0.,1.)); #40806=DIRECTION('ref_axis',(0.,-1.,0.)); #40807=DIRECTION('center_axis',(0.,0.,1.)); #40808=DIRECTION('ref_axis',(0.,-1.,0.)); #40809=DIRECTION('',(-1.,0.,0.)); #40810=DIRECTION('center_axis',(-0.00164835580933354,0.941481661682366, -0.337060178067561)); #40811=DIRECTION('ref_axis',(-0.02640596049185,-0.336984082667417,-0.941139975391176)); #40812=DIRECTION('center_axis',(0.,1.,0.)); #40813=DIRECTION('ref_axis',(1.,0.,0.)); #40814=DIRECTION('',(0.,-1.,0.)); #40815=DIRECTION('center_axis',(-0.00164683385277926,-0.941506142314065, -0.33699179800575)); #40816=DIRECTION('ref_axis',(-0.0154947058573032,0.336975823565305,-0.941385791491926)); #40817=DIRECTION('center_axis',(0.,1.,0.)); #40818=DIRECTION('ref_axis',(1.,0.,0.)); #40819=DIRECTION('center_axis',(-0.0123901816849373,0.995957687047146,-0.0889649875485503)); #40820=DIRECTION('ref_axis',(0.990434398062192,-4.13774697820221E-6,-0.137984430708911)); #40821=DIRECTION('',(0.,1.,0.)); #40822=DIRECTION('center_axis',(0.0123901906604703,0.995957687061996,0.088964986132276)); #40823=DIRECTION('ref_axis',(0.990434404193627,4.12461746198091E-6,-0.137984386698648)); #40824=DIRECTION('',(0.98480775301219,0.,-0.173648177667033)); #40825=DIRECTION('center_axis',(-0.0155943360548859,0.995959439571379,-0.0884398745570836)); #40826=DIRECTION('ref_axis',(0.98480775301219,-9.36230259984863E-15,-0.173648177667032)); #40827=DIRECTION('',(-0.172946541711923,-0.08980420217703,-0.980828577775563)); #40828=DIRECTION('',(0.98480775301219,0.,-0.173648177667033)); #40829=DIRECTION('',(-0.172946541711923,-0.08980420217703,-0.980828577775563)); #40830=DIRECTION('center_axis',(0.98480775301219,0.,-0.173648177667033)); #40831=DIRECTION('ref_axis',(0.,1.,0.)); #40832=DIRECTION('',(0.,1.,0.)); #40833=DIRECTION('',(-0.172946541711923,0.08980420217703,-0.980828577775563)); #40834=DIRECTION('center_axis',(0.0155943360548859,0.995959439571379,0.0884398745570836)); #40835=DIRECTION('ref_axis',(0.98480775301219,9.36230259984863E-15,-0.173648177667032)); #40836=DIRECTION('',(-0.98480775301219,0.,0.173648177667033)); #40837=DIRECTION('',(-0.98480775301219,0.,0.173648177667033)); #40838=DIRECTION('',(-0.172946541711923,0.08980420217703,-0.980828577775563)); #40839=DIRECTION('center_axis',(0.98480775301219,0.,-0.173648177667033)); #40840=DIRECTION('ref_axis',(0.,1.,0.)); #40841=DIRECTION('',(0.,-1.,0.)); #40842=DIRECTION('center_axis',(0.,-1.,0.)); #40843=DIRECTION('ref_axis',(-0.98480775301219,0.,0.173648177667033)); #40844=DIRECTION('',(0.,-1.,0.)); #40845=DIRECTION('',(0.939692620785813,0.,0.342020143325932)); #40846=DIRECTION('center_axis',(0.,-1.,0.)); #40847=DIRECTION('ref_axis',(-0.98480775301219,0.,0.173648177667033)); #40848=DIRECTION('',(0.,1.,0.)); #40849=DIRECTION('',(-0.939692620785813,0.,-0.342020143325932)); #40850=DIRECTION('center_axis',(-0.0307148460998617,0.995959439571378,0.0843883461013921)); #40851=DIRECTION('ref_axis',(0.939692620785814,-2.4466539905172E-14,0.34202014332593)); #40852=DIRECTION('',(-0.939692620785813,0.,-0.342020143325932)); #40853=DIRECTION('',(0.340638190269066,0.0898042021770874,-0.935895735967182)); #40854=DIRECTION('',(0.340638190269066,0.0898042021770874,-0.935895735967182)); #40855=DIRECTION('center_axis',(-0.939692620785813,0.,-0.342020143325932)); #40856=DIRECTION('ref_axis',(0.342020143325932,0.,-0.939692620785813)); #40857=DIRECTION('',(-0.939692620785813,0.,-0.342020143325932)); #40858=DIRECTION('center_axis',(0.939692620785813,-3.46944695195331E-18, 0.342020143325932)); #40859=DIRECTION('ref_axis',(0.0307148460998815,-0.995959439571379,-0.0843883461013749)); #40860=DIRECTION('center_axis',(-0.939692620785813,0.,-0.342020143325932)); #40861=DIRECTION('ref_axis',(0.342020143325932,0.,-0.939692620785813)); #40862=DIRECTION('center_axis',(0.939692620785813,0.,0.342020143325932)); #40863=DIRECTION('ref_axis',(0.,1.,0.)); #40864=DIRECTION('center_axis',(-0.939692620785813,-3.46944695195331E-18, -0.342020143325932)); #40865=DIRECTION('ref_axis',(0.0307148460998847,0.995959439571378,-0.0843883461013836)); #40866=DIRECTION('',(0.,1.,0.)); #40867=DIRECTION('',(0.340638190269066,-0.0898042021770874,-0.935895735967182)); #40868=DIRECTION('center_axis',(0.939692620785813,0.,0.342020143325932)); #40869=DIRECTION('ref_axis',(0.342020143325932,0.,-0.939692620785813)); #40870=DIRECTION('',(0.939692620785813,0.,0.342020143325932)); #40871=DIRECTION('',(0.939692620785813,0.,0.342020143325932)); #40872=DIRECTION('center_axis',(0.939692620785813,0.,0.342020143325932)); #40873=DIRECTION('ref_axis',(0.342020143325932,0.,-0.939692620785813)); #40874=DIRECTION('center_axis',(0.939692620785813,0.,0.342020143325932)); #40875=DIRECTION('ref_axis',(0.,1.,0.)); #40876=DIRECTION('',(0.340638190269066,-0.0898042021770874,-0.935895735967182)); #40877=DIRECTION('',(0.,-1.,0.)); #40878=DIRECTION('center_axis',(0.342020143325932,0.,-0.939692620785813)); #40879=DIRECTION('ref_axis',(-0.939692620785813,0.,-0.342020143325932)); #40880=DIRECTION('center_axis',(0.0307148460998617,0.995959439571378,-0.0843883461013921)); #40881=DIRECTION('ref_axis',(0.939692620785814,2.4466539905172E-14,0.34202014332593)); #40882=DIRECTION('center_axis',(-1.,0.,0.)); #40883=DIRECTION('ref_axis',(0.,0.,1.)); #40884=DIRECTION('center_axis',(1.,0.,0.)); #40885=DIRECTION('ref_axis',(0.,0.,-1.)); #40886=DIRECTION('',(-1.,0.,0.)); #40887=DIRECTION('center_axis',(1.,0.,0.)); #40888=DIRECTION('ref_axis',(0.,0.474999999999959,-0.879985795339924)); #40889=DIRECTION('center_axis',(1.,0.,0.)); #40890=DIRECTION('ref_axis',(0.,0.,-1.)); #40891=DIRECTION('',(0.,1.,0.)); #40892=DIRECTION('',(0.,0.,-1.)); #40893=DIRECTION('center_axis',(-1.,0.,0.)); #40894=DIRECTION('ref_axis',(0.,-1.,0.)); #40895=DIRECTION('',(0.,0.,-1.)); #40896=DIRECTION('',(0.,-1.,0.)); #40897=DIRECTION('center_axis',(-1.,0.,0.)); #40898=DIRECTION('ref_axis',(0.,-1.,0.)); #40899=DIRECTION('',(0.,0.,1.)); #40900=DIRECTION('center_axis',(0.,0.,-1.)); #40901=DIRECTION('ref_axis',(-1.,0.,0.)); #40902=DIRECTION('',(1.,0.,0.)); #40903=DIRECTION('center_axis',(0.,0.,-1.)); #40904=DIRECTION('ref_axis',(-1.,0.,0.)); #40905=DIRECTION('',(0.,1.,0.)); #40906=DIRECTION('center_axis',(0.,0.,-1.)); #40907=DIRECTION('ref_axis',(0.,-1.,0.)); #40908=DIRECTION('',(-1.,0.,0.)); #40909=DIRECTION('center_axis',(0.,-1.,0.)); #40910=DIRECTION('ref_axis',(0.,0.,-1.)); #40911=DIRECTION('',(-1.,0.,0.)); #40912=DIRECTION('',(0.,0.,1.)); #40913=DIRECTION('',(-1.,0.,0.)); #40914=DIRECTION('center_axis',(0.,-1.,0.)); #40915=DIRECTION('ref_axis',(0.,0.,-1.)); #40916=DIRECTION('center_axis',(0.,1.,0.)); #40917=DIRECTION('ref_axis',(1.,0.,0.)); #40918=DIRECTION('',(0.,1.,0.)); #40919=DIRECTION('center_axis',(0.,1.,0.)); #40920=DIRECTION('ref_axis',(1.,0.,0.)); #40921=DIRECTION('center_axis',(0.,1.,0.)); #40922=DIRECTION('ref_axis',(0.,0.,1.)); #40923=DIRECTION('',(1.,0.,0.)); #40924=DIRECTION('',(0.,0.,1.)); #40925=DIRECTION('',(-1.,0.,0.)); #40926=DIRECTION('center_axis',(1.,0.,0.)); #40927=DIRECTION('ref_axis',(0.,0.,-1.)); #40928=DIRECTION('center_axis',(0.,0.,-1.)); #40929=DIRECTION('ref_axis',(-1.,0.,0.)); #40930=DIRECTION('',(0.,0.,1.)); #40931=DIRECTION('center_axis',(0.,0.,-1.)); #40932=DIRECTION('ref_axis',(-1.,0.,0.)); #40933=DIRECTION('center_axis',(0.,0.,-1.)); #40934=DIRECTION('ref_axis',(0.,1.,0.)); #40935=DIRECTION('center_axis',(0.,0.,-1.)); #40936=DIRECTION('ref_axis',(0.,-1.,0.)); #40937=DIRECTION('',(0.,1.,0.)); #40938=DIRECTION('center_axis',(-1.,0.,0.)); #40939=DIRECTION('ref_axis',(0.,1.,0.)); #40940=DIRECTION('',(0.,0.,1.)); #40941=DIRECTION('center_axis',(0.,0.,-1.)); #40942=DIRECTION('ref_axis',(-1.,0.,0.)); #40943=DIRECTION('center_axis',(1.,0.,0.)); #40944=DIRECTION('ref_axis',(0.,-1.22464679914735E-16,1.)); #40945=DIRECTION('',(1.,0.,0.)); #40946=DIRECTION('center_axis',(0.,-1.,0.)); #40947=DIRECTION('ref_axis',(0.,0.,-1.)); #40948=DIRECTION('',(1.,0.,0.)); #40949=DIRECTION('',(-1.,0.,0.)); #40950=DIRECTION('center_axis',(1.,0.,0.)); #40951=DIRECTION('ref_axis',(0.,0.,-1.)); #40952=DIRECTION('center_axis',(0.,0.,1.)); #40953=DIRECTION('ref_axis',(0.,-1.,0.)); #40954=DIRECTION('center_axis',(0.,-1.,0.)); #40955=DIRECTION('ref_axis',(0.,0.,-1.)); #40956=DIRECTION('',(1.,0.,0.)); #40957=DIRECTION('center_axis',(0.,-1.,0.)); #40958=DIRECTION('ref_axis',(0.,0.,-1.)); #40959=DIRECTION('',(1.,0.,0.)); #40960=DIRECTION('center_axis',(0.,-1.,0.)); #40961=DIRECTION('ref_axis',(0.,0.,-1.)); #40962=DIRECTION('',(0.,0.,-1.)); #40963=DIRECTION('',(1.,0.,0.)); #40964=DIRECTION('',(0.,0.,1.)); #40965=DIRECTION('',(-1.,0.,0.)); #40966=DIRECTION('',(1.,0.,0.)); #40967=DIRECTION('',(1.,0.,0.)); #40968=DIRECTION('',(1.,0.,0.)); #40969=DIRECTION('',(1.,0.,0.)); #40970=DIRECTION('',(0.,0.,-1.)); #40971=DIRECTION('',(1.,0.,0.)); #40972=DIRECTION('',(0.,0.,1.)); #40973=DIRECTION('',(1.,0.,0.)); #40974=DIRECTION('',(1.,0.,0.)); #40975=DIRECTION('',(1.,0.,0.)); #40976=DIRECTION('',(1.,0.,0.)); #40977=DIRECTION('',(-1.,0.,0.)); #40978=DIRECTION('center_axis',(0.,1.,0.)); #40979=DIRECTION('ref_axis',(1.,0.,0.)); #40980=DIRECTION('',(-1.,0.,1.7763568394E-13)); #40981=DIRECTION('center_axis',(0.,1.,0.)); #40982=DIRECTION('ref_axis',(0.,0.,-1.)); #40983=DIRECTION('',(0.,8.881784197003E-14,-1.)); #40984=DIRECTION('',(-1.,0.,0.)); #40985=DIRECTION('',(0.,8.881784197003E-14,-1.)); #40986=DIRECTION('center_axis',(0.,1.,0.)); #40987=DIRECTION('ref_axis',(1.,0.,0.)); #40988=DIRECTION('',(-1.,0.,1.7763568394E-13)); #40989=DIRECTION('center_axis',(0.,1.,0.)); #40990=DIRECTION('ref_axis',(0.,0.,-1.)); #40991=DIRECTION('',(0.,0.,1.)); #40992=DIRECTION('center_axis',(0.,1.,0.)); #40993=DIRECTION('ref_axis',(-1.,0.,0.)); #40994=DIRECTION('',(1.,0.,0.)); #40995=DIRECTION('center_axis',(0.,1.,0.)); #40996=DIRECTION('ref_axis',(0.,0.,1.)); #40997=DIRECTION('',(0.,0.,-1.)); #40998=DIRECTION('center_axis',(0.,1.,0.)); #40999=DIRECTION('ref_axis',(1.,0.,-1.869849304632E-14)); #41000=DIRECTION('',(1.,0.,-1.7763568394E-13)); #41001=DIRECTION('center_axis',(0.,1.,0.)); #41002=DIRECTION('ref_axis',(0.,0.,-1.)); #41003=DIRECTION('',(0.,8.881784197003E-14,-1.)); #41004=DIRECTION('',(1.,0.,0.)); #41005=DIRECTION('',(0.,8.881784197003E-14,-1.)); #41006=DIRECTION('center_axis',(0.,1.,0.)); #41007=DIRECTION('ref_axis',(1.,0.,0.)); #41008=DIRECTION('',(1.,0.,-1.7763568394E-13)); #41009=DIRECTION('center_axis',(0.,1.,0.)); #41010=DIRECTION('ref_axis',(0.,0.,-1.)); #41011=DIRECTION('',(0.,0.,-1.)); #41012=DIRECTION('center_axis',(0.,1.,0.)); #41013=DIRECTION('ref_axis',(-1.,0.,0.)); #41014=DIRECTION('',(-1.,0.,0.)); #41015=DIRECTION('center_axis',(0.,1.,0.)); #41016=DIRECTION('ref_axis',(0.,0.,1.)); #41017=DIRECTION('',(0.,0.,1.)); #41018=DIRECTION('center_axis',(0.,-0.0523359562429177,-0.998629534754575)); #41019=DIRECTION('ref_axis',(1.,0.,0.)); #41020=DIRECTION('',(0.76561015191128,0.642423196094235,-0.0336679730672323)); #41021=DIRECTION('center_axis',(0.,0.0523359562429177,0.998629534754575)); #41022=DIRECTION('ref_axis',(0.,0.998629534754575,-0.0523359562429177)); #41023=DIRECTION('',(-0.642270226449588,0.765427849787509,-0.0401143738087342)); #41024=DIRECTION('center_axis',(0.,-0.0523359562429177,-0.998629534754575)); #41025=DIRECTION('ref_axis',(0.,0.998629534754575,-0.0523359562429177)); #41026=DIRECTION('center_axis',(0.,0.0523359562429177,0.998629534754575)); #41027=DIRECTION('ref_axis',(0.,0.998629534754575,-0.0523359562429177)); #41028=DIRECTION('',(0.642270226449588,-0.765427849787509,0.0401143738087342)); #41029=DIRECTION('center_axis',(0.,-0.0523359562429177,-0.998629534754575)); #41030=DIRECTION('ref_axis',(0.,0.998629534754575,-0.0523359562429177)); #41031=DIRECTION('',(-0.76561015191128,-0.642423196094235,0.0336679730672323)); #41032=DIRECTION('',(0.611006463352787,-0.790540711670607,0.041430483130769)); #41033=DIRECTION('center_axis',(0.,-0.0523359562429177,-0.998629534754575)); #41034=DIRECTION('ref_axis',(1.,0.,0.)); #41035=DIRECTION('',(-0.76561015191128,0.642423196094235,-0.0336679730672323)); #41036=DIRECTION('center_axis',(0.,-0.0523359562429177,-0.998629534754575)); #41037=DIRECTION('ref_axis',(0.,0.998629534754575,-0.0523359562429177)); #41038=DIRECTION('',(0.642270226449588,0.765427849787509,-0.0401143738087342)); #41039=DIRECTION('center_axis',(0.,0.0523359562429177,0.998629534754575)); #41040=DIRECTION('ref_axis',(0.,0.998629534754575,-0.0523359562429177)); #41041=DIRECTION('center_axis',(0.,-0.0523359562429177,-0.998629534754575)); #41042=DIRECTION('ref_axis',(0.,0.998629534754575,-0.0523359562429177)); #41043=DIRECTION('',(-0.642270226449588,-0.765427849787509,0.0401143738087342)); #41044=DIRECTION('center_axis',(0.,0.0523359562429177,0.998629534754575)); #41045=DIRECTION('ref_axis',(0.,0.998629534754575,-0.0523359562429177)); #41046=DIRECTION('',(0.76561015191128,-0.642423196094235,0.0336679730672323)); #41047=DIRECTION('',(-0.611006463352787,-0.790540711670607,0.041430483130769)); #41048=DIRECTION('center_axis',(-0.610481309193519,0.792030662995674,-1.0493855722694E-11)); #41049=DIRECTION('ref_axis',(-0.214022256312301,-0.164964051676739,0.962798699343422)); #41050=DIRECTION('',(0.611006463352787,-0.790540711670608,-0.0414304831307672)); #41051=DIRECTION('center_axis',(-0.642787609686651,0.766044443118885,1.51606963170886E-14)); #41052=DIRECTION('ref_axis',(0.766044443118885,0.642787609686651,1.2048526727709E-9)); #41053=DIRECTION('center_axis',(0.642787609686495,-0.766044443119015,1.11315479458175E-15)); #41054=DIRECTION('ref_axis',(0.766044443119015,0.642787609686495,1.2117705219527E-9)); #41055=DIRECTION('center_axis',(0.642787609686799,-0.76604444311876,0.)); #41056=DIRECTION('ref_axis',(-0.76604444311876,-0.642787609686799,0.)); #41057=DIRECTION('',(0.,0.,-1.)); #41058=DIRECTION('',(-0.76561015191128,-0.642423196094235,-0.0336679730672323)); #41059=DIRECTION('center_axis',(0.,0.0523359562429177,-0.998629534754575)); #41060=DIRECTION('ref_axis',(1.,0.,0.)); #41061=DIRECTION('center_axis',(0.,0.0523359562429177,-0.998629534754575)); #41062=DIRECTION('ref_axis',(0.,0.998629534754575,0.0523359562429177)); #41063=DIRECTION('',(0.642270226449588,-0.765427849787509,-0.0401143738087342)); #41064=DIRECTION('center_axis',(0.,-0.0523359562429177,0.998629534754575)); #41065=DIRECTION('ref_axis',(0.,0.998629534754575,0.0523359562429177)); #41066=DIRECTION('center_axis',(0.,0.0523359562429177,-0.998629534754575)); #41067=DIRECTION('ref_axis',(0.,0.998629534754575,0.0523359562429177)); #41068=DIRECTION('',(-0.642270226449588,0.765427849787509,0.0401143738087342)); #41069=DIRECTION('center_axis',(0.,-0.0523359562429177,0.998629534754575)); #41070=DIRECTION('ref_axis',(0.,0.998629534754575,0.0523359562429177)); #41071=DIRECTION('',(0.76561015191128,0.642423196094235,0.0336679730672223)); #41072=DIRECTION('center_axis',(0.,0.0523359562429177,-0.998629534754575)); #41073=DIRECTION('ref_axis',(1.,0.,0.)); #41074=DIRECTION('',(-0.611006463352787,-0.790540711670608,-0.0414304831307672)); #41075=DIRECTION('',(0.76561015191128,-0.642423196094235,-0.0336679730672223)); #41076=DIRECTION('center_axis',(0.,-0.0523359562429177,0.998629534754575)); #41077=DIRECTION('ref_axis',(0.,0.998629534754575,0.0523359562429177)); #41078=DIRECTION('',(-0.642270226449588,-0.765427849787509,-0.0401143738087342)); #41079=DIRECTION('center_axis',(0.,0.0523359562429177,-0.998629534754575)); #41080=DIRECTION('ref_axis',(0.,0.998629534754575,0.0523359562429177)); #41081=DIRECTION('center_axis',(0.,-0.0523359562429177,0.998629534754575)); #41082=DIRECTION('ref_axis',(0.,0.998629534754575,0.0523359562429177)); #41083=DIRECTION('',(0.642270226449588,0.765427849787509,0.0401143738087342)); #41084=DIRECTION('center_axis',(0.,0.0523359562429177,-0.998629534754575)); #41085=DIRECTION('ref_axis',(0.,0.998629534754575,0.0523359562429177)); #41086=DIRECTION('',(-0.76561015191128,0.642423196094235,0.0336679730672323)); #41087=DIRECTION('center_axis',(-0.642787609686799,0.76604444311876,0.)); #41088=DIRECTION('ref_axis',(0.76604444311876,0.642787609686799,0.)); #41089=DIRECTION('',(0.,0.,-1.)); #41090=DIRECTION('center_axis',(0.,0.,-1.)); #41091=DIRECTION('ref_axis',(0.996194698091764,-0.0871557427474441,0.)); #41092=DIRECTION('',(0.,0.,-1.)); #41093=DIRECTION('center_axis',(-0.76604444311876,-0.642787609686799,0.)); #41094=DIRECTION('ref_axis',(-0.642787609686799,0.76604444311876,0.)); #41095=DIRECTION('',(0.,0.,-1.)); #41096=DIRECTION('center_axis',(0.,0.,-1.)); #41097=DIRECTION('ref_axis',(-1.,0.,0.)); #41098=DIRECTION('center_axis',(0.,0.,-1.)); #41099=DIRECTION('ref_axis',(-1.,0.,0.)); #41100=DIRECTION('',(0.,0.,-1.)); #41101=DIRECTION('center_axis',(0.76604444311876,0.642787609686799,0.)); #41102=DIRECTION('ref_axis',(0.642787609686799,-0.76604444311876,0.)); #41103=DIRECTION('',(0.,0.,-1.)); #41104=DIRECTION('center_axis',(0.,0.,-1.)); #41105=DIRECTION('ref_axis',(0.996194698091739,-0.0871557427477307,0.)); #41106=DIRECTION('center_axis',(0.610481309207602,0.79203066298482,-7.66310049090889E-12)); #41107=DIRECTION('ref_axis',(0.214022256382964,-0.164964051759343,-0.962798699313561)); #41108=DIRECTION('center_axis',(0.642787609686432,0.766044443119068,-9.10464029534519E-15)); #41109=DIRECTION('ref_axis',(0.766044443119068,-0.642787609686432,7.99457988994321E-10)); #41110=DIRECTION('center_axis',(-0.642787609686273,-0.766044443119202,2.05289501607043E-15)); #41111=DIRECTION('ref_axis',(0.766044443119199,-0.642787609686271,8.36641915539944E-8)); #41112=DIRECTION('center_axis',(-0.642787609686799,-0.76604444311876,0.)); #41113=DIRECTION('ref_axis',(-0.76604444311876,0.642787609686799,0.)); #41114=DIRECTION('',(0.,0.,-1.)); #41115=DIRECTION('center_axis',(0.,0.,-1.)); #41116=DIRECTION('ref_axis',(-1.,0.,0.)); #41117=DIRECTION('',(0.,0.,-1.)); #41118=DIRECTION('center_axis',(-0.76604444311876,0.642787609686799,0.)); #41119=DIRECTION('ref_axis',(0.642787609686799,0.76604444311876,0.)); #41120=DIRECTION('',(0.,0.,-1.)); #41121=DIRECTION('center_axis',(0.,0.,-1.)); #41122=DIRECTION('ref_axis',(-1.,0.,0.)); #41123=DIRECTION('center_axis',(0.642787609686799,0.76604444311876,0.)); #41124=DIRECTION('ref_axis',(0.76604444311876,-0.642787609686799,0.)); #41125=DIRECTION('',(0.,0.,-1.)); #41126=DIRECTION('center_axis',(0.,0.,-1.)); #41127=DIRECTION('ref_axis',(-1.,0.,0.)); #41128=DIRECTION('',(0.,0.,-1.)); #41129=DIRECTION('center_axis',(0.76604444311876,-0.642787609686799,0.)); #41130=DIRECTION('ref_axis',(-0.642787609686799,-0.76604444311876,0.)); #41131=DIRECTION('',(0.,0.,-1.)); #41132=DIRECTION('center_axis',(0.,0.,-1.)); #41133=DIRECTION('ref_axis',(-1.,0.,0.)); #41134=DIRECTION('center_axis',(-1.,0.,0.)); #41135=DIRECTION('ref_axis',(0.,0.,-1.)); #41136=DIRECTION('',(0.,0.,-1.)); #41137=DIRECTION('',(0.,-1.,0.)); #41138=DIRECTION('',(0.,-1.,0.)); #41139=DIRECTION('center_axis',(0.,-1.,0.)); #41140=DIRECTION('ref_axis',(1.,0.,0.)); #41141=DIRECTION('',(0.,-1.,0.)); #41142=DIRECTION('center_axis',(0.,-1.,0.)); #41143=DIRECTION('ref_axis',(1.,0.,0.)); #41144=DIRECTION('center_axis',(0.,-1.,0.)); #41145=DIRECTION('ref_axis',(-1.,0.,0.)); #41146=DIRECTION('',(1.,0.,0.)); #41147=DIRECTION('',(-1.,0.,0.)); #41148=DIRECTION('',(0.,0.,-1.)); #41149=DIRECTION('',(-1.,0.,0.)); #41150=DIRECTION('',(0.,0.,1.)); #41151=DIRECTION('',(-1.,0.,0.)); #41152=DIRECTION('',(-1.,0.,0.)); #41153=DIRECTION('center_axis',(0.,-1.,0.)); #41154=DIRECTION('ref_axis',(0.,0.,1.)); #41155=DIRECTION('',(0.,0.,-1.)); #41156=DIRECTION('center_axis',(0.,-1.,0.)); #41157=DIRECTION('ref_axis',(-1.,0.,0.)); #41158=DIRECTION('',(1.,0.,0.)); #41159=DIRECTION('center_axis',(0.,-1.,0.)); #41160=DIRECTION('ref_axis',(0.,0.,-1.)); #41161=DIRECTION('',(0.,-4.4408920985E-14,1.)); #41162=DIRECTION('',(1.,0.,0.)); #41163=DIRECTION('',(0.,-4.4408920985E-14,1.)); #41164=DIRECTION('center_axis',(0.,-1.,0.)); #41165=DIRECTION('ref_axis',(-1.,0.,0.)); #41166=DIRECTION('',(1.,0.,0.)); #41167=DIRECTION('center_axis',(0.,-1.,0.)); #41168=DIRECTION('ref_axis',(0.,0.,-1.)); #41169=DIRECTION('',(0.,0.,1.)); #41170=DIRECTION('center_axis',(0.,-1.,0.)); #41171=DIRECTION('ref_axis',(1.,0.,0.)); #41172=DIRECTION('',(1.,0.,0.)); #41173=DIRECTION('center_axis',(0.,-1.,0.)); #41174=DIRECTION('ref_axis',(0.,0.,1.)); #41175=DIRECTION('',(0.,0.,1.)); #41176=DIRECTION('center_axis',(0.,-1.,0.)); #41177=DIRECTION('ref_axis',(-1.,0.,-1.869849304632E-14)); #41178=DIRECTION('',(-1.,0.,0.)); #41179=DIRECTION('center_axis',(0.,-1.,0.)); #41180=DIRECTION('ref_axis',(0.,0.,-1.)); #41181=DIRECTION('',(0.,-4.4408920985E-14,1.)); #41182=DIRECTION('',(-1.,0.,0.)); #41183=DIRECTION('',(-4.4408920985E-14,-4.4408920985E-14,1.)); #41184=DIRECTION('center_axis',(0.,-1.,0.)); #41185=DIRECTION('ref_axis',(-1.,0.,0.)); #41186=DIRECTION('',(-1.,0.,0.)); #41187=DIRECTION('center_axis',(0.,-1.,0.)); #41188=DIRECTION('ref_axis',(0.,0.,-1.)); #41189=DIRECTION('center_axis',(0.,0.,-1.)); #41190=DIRECTION('ref_axis',(1.,0.,0.)); #41191=DIRECTION('',(0.,-1.,0.)); #41192=DIRECTION('center_axis',(0.,-1.,0.)); #41193=DIRECTION('ref_axis',(0.,0.,1.)); #41194=DIRECTION('',(0.,-1.,0.)); #41195=DIRECTION('center_axis',(1.,0.,0.)); #41196=DIRECTION('ref_axis',(0.,0.,1.)); #41197=DIRECTION('',(0.,-1.,0.)); #41198=DIRECTION('center_axis',(0.,-1.,0.)); #41199=DIRECTION('ref_axis',(-1.,0.,0.)); #41200=DIRECTION('',(0.,-1.,0.)); #41201=DIRECTION('center_axis',(0.,0.,1.)); #41202=DIRECTION('ref_axis',(-1.,0.,0.)); #41203=DIRECTION('',(0.,-1.,0.)); #41204=DIRECTION('',(0.,1.,0.)); #41205=DIRECTION('center_axis',(0.,0.,1.)); #41206=DIRECTION('ref_axis',(-1.,0.,0.)); #41207=DIRECTION('',(0.,-1.,0.)); #41208=DIRECTION('center_axis',(0.,-1.,0.)); #41209=DIRECTION('ref_axis',(0.,0.,-1.)); #41210=DIRECTION('center_axis',(0.,1.,0.)); #41211=DIRECTION('ref_axis',(0.,0.,-1.)); #41212=DIRECTION('',(0.,1.,0.)); #41213=DIRECTION('center_axis',(1.,0.,0.)); #41214=DIRECTION('ref_axis',(0.,0.,-1.)); #41215=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #41216=DIRECTION('center_axis',(-1.,0.,0.)); #41217=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #41218=DIRECTION('',(0.,-0.342020143325932,-0.939692620785813)); #41219=DIRECTION('center_axis',(1.,0.,0.)); #41220=DIRECTION('ref_axis',(0.,-0.939692620785813,0.342020143325932)); #41221=DIRECTION('center_axis',(-1.,0.,0.)); #41222=DIRECTION('ref_axis',(0.,-1.,0.)); #41223=DIRECTION('',(0.,0.342020143325932,0.939692620785813)); #41224=DIRECTION('center_axis',(1.,0.,0.)); #41225=DIRECTION('ref_axis',(0.,0.939692620785813,-0.342020143325932)); #41226=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #41227=DIRECTION('',(0.,-0.819152044289016,-0.573576436351011)); #41228=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #41229=DIRECTION('ref_axis',(1.,0.,0.)); #41230=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #41231=DIRECTION('ref_axis',(0.,-0.573576436351011,0.819152044289016)); #41232=DIRECTION('',(0.,-0.819152044289016,-0.573576436351011)); #41233=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #41234=DIRECTION('ref_axis',(1.,0.,0.)); #41235=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #41236=DIRECTION('ref_axis',(0.,0.573576436351011,-0.819152044289016)); #41237=DIRECTION('',(-1.,0.,0.)); #41238=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #41239=DIRECTION('ref_axis',(0.,-0.573576436351011,0.819152044289016)); #41240=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #41241=DIRECTION('',(-1.,0.,0.)); #41242=DIRECTION('center_axis',(1.,0.,0.)); #41243=DIRECTION('ref_axis',(0.,0.,-1.)); #41244=DIRECTION('center_axis',(-1.,0.,0.)); #41245=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #41246=DIRECTION('',(-1.,0.,0.)); #41247=DIRECTION('center_axis',(0.,0.939692620785813,-0.342020143325932)); #41248=DIRECTION('ref_axis',(0.,-0.342020143325932,-0.939692620785813)); #41249=DIRECTION('',(0.,-0.342020143325932,-0.939692620785813)); #41250=DIRECTION('',(-1.,0.,0.)); #41251=DIRECTION('center_axis',(1.,0.,0.)); #41252=DIRECTION('ref_axis',(0.,0.,-1.)); #41253=DIRECTION('center_axis',(1.,0.,0.)); #41254=DIRECTION('ref_axis',(0.,-0.939692620785813,0.342020143325932)); #41255=DIRECTION('center_axis',(1.,0.,0.)); #41256=DIRECTION('ref_axis',(0.,0.,-1.)); #41257=DIRECTION('',(0.,0.819152044289016,0.573576436351011)); #41258=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #41259=DIRECTION('center_axis',(1.,0.,0.)); #41260=DIRECTION('ref_axis',(0.,0.939692620785813,-0.342020143325932)); #41261=DIRECTION('',(0.,0.342020143325932,0.939692620785813)); #41262=DIRECTION('center_axis',(-1.,0.,0.)); #41263=DIRECTION('ref_axis',(0.,-1.,0.)); #41264=DIRECTION('',(0.,-1.,0.)); #41265=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #41266=DIRECTION('ref_axis',(-1.,0.,0.)); #41267=DIRECTION('',(0.,0.819152044289016,0.573576436351011)); #41268=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #41269=DIRECTION('ref_axis',(-1.,0.,0.)); #41270=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #41271=DIRECTION('ref_axis',(0.,-0.573576436351011,0.819152044289016)); #41272=DIRECTION('',(-1.,0.,0.)); #41273=DIRECTION('',(-1.,0.,0.)); #41274=DIRECTION('center_axis',(0.,0.573576436351011,-0.819152044289016)); #41275=DIRECTION('ref_axis',(0.,-0.819152044289016,-0.573576436351011)); #41276=DIRECTION('center_axis',(1.,0.,0.)); #41277=DIRECTION('ref_axis',(0.,0.,-1.)); #41278=DIRECTION('',(-1.,0.,0.)); #41279=DIRECTION('center_axis',(0.,-0.939692620785813,0.342020143325932)); #41280=DIRECTION('ref_axis',(0.,0.342020143325932,0.939692620785813)); #41281=DIRECTION('',(-1.,0.,0.)); #41282=DIRECTION('center_axis',(1.,0.,0.)); #41283=DIRECTION('ref_axis',(0.,0.,-1.)); #41284=DIRECTION('center_axis',(0.,-1.,0.)); #41285=DIRECTION('ref_axis',(0.,0.,-1.)); #41286=DIRECTION('center_axis',(0.,0.,1.)); #41287=DIRECTION('ref_axis',(-1.,0.,0.)); #41288=DIRECTION('',(0.,1.,0.)); #41289=DIRECTION('',(0.,1.,0.)); #41290=DIRECTION('center_axis',(0.,1.,0.)); #41291=DIRECTION('ref_axis',(0.,0.,1.)); #41292=DIRECTION('',(0.,1.,0.)); #41293=DIRECTION('center_axis',(1.,0.,0.)); #41294=DIRECTION('ref_axis',(0.,0.,1.)); #41295=DIRECTION('',(0.,1.,0.)); #41296=DIRECTION('center_axis',(0.,1.,0.)); #41297=DIRECTION('ref_axis',(1.,0.,0.)); #41298=DIRECTION('',(0.,1.,0.)); #41299=DIRECTION('center_axis',(0.,0.,-1.)); #41300=DIRECTION('ref_axis',(1.,0.,0.)); #41301=DIRECTION('',(0.,1.,0.)); #41302=DIRECTION('center_axis',(0.,0.,-1.)); #41303=DIRECTION('ref_axis',(1.,0.,0.)); #41304=DIRECTION('',(0.,-1.,0.)); #41305=DIRECTION('',(0.,1.,0.)); #41306=DIRECTION('center_axis',(0.,1.,0.)); #41307=DIRECTION('ref_axis',(0.,0.,-1.)); #41308=DIRECTION('',(0.,1.,0.)); #41309=DIRECTION('center_axis',(1.,0.,0.)); #41310=DIRECTION('ref_axis',(0.,0.,-1.)); #41311=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #41312=DIRECTION('center_axis',(-1.,0.,0.)); #41313=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #41314=DIRECTION('',(0.,-0.342020143325932,-0.939692620785813)); #41315=DIRECTION('center_axis',(1.,0.,0.)); #41316=DIRECTION('ref_axis',(0.,-0.939692620785813,0.342020143325932)); #41317=DIRECTION('center_axis',(-1.,0.,0.)); #41318=DIRECTION('ref_axis',(0.,-1.,0.)); #41319=DIRECTION('',(0.,0.342020143325932,0.939692620785813)); #41320=DIRECTION('center_axis',(1.,0.,0.)); #41321=DIRECTION('ref_axis',(0.,0.939692620785813,-0.342020143325932)); #41322=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #41323=DIRECTION('',(0.,-0.819152044289016,-0.573576436351011)); #41324=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #41325=DIRECTION('ref_axis',(1.,0.,0.)); #41326=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #41327=DIRECTION('ref_axis',(0.,-0.573576436351011,0.819152044289016)); #41328=DIRECTION('',(0.,-0.819152044289016,-0.573576436351011)); #41329=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #41330=DIRECTION('ref_axis',(1.,0.,0.)); #41331=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #41332=DIRECTION('ref_axis',(0.,0.573576436351011,-0.819152044289016)); #41333=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #41334=DIRECTION('',(1.,0.,0.)); #41335=DIRECTION('',(1.,0.,0.)); #41336=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #41337=DIRECTION('ref_axis',(0.,-0.573576436351011,0.819152044289016)); #41338=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #41339=DIRECTION('ref_axis',(-1.,0.,0.)); #41340=DIRECTION('',(0.,0.819152044289016,0.573576436351011)); #41341=DIRECTION('',(0.,0.819152044289016,0.573576436351011)); #41342=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #41343=DIRECTION('ref_axis',(-1.,0.,0.)); #41344=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #41345=DIRECTION('ref_axis',(0.,-0.573576436351011,0.819152044289016)); #41346=DIRECTION('',(1.,0.,0.)); #41347=DIRECTION('',(1.,0.,0.)); #41348=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #41349=DIRECTION('center_axis',(1.,0.,0.)); #41350=DIRECTION('ref_axis',(0.,0.,-1.)); #41351=DIRECTION('center_axis',(1.,0.,0.)); #41352=DIRECTION('ref_axis',(0.,0.939692620785813,-0.342020143325932)); #41353=DIRECTION('',(0.,0.342020143325932,0.939692620785813)); #41354=DIRECTION('center_axis',(-1.,0.,0.)); #41355=DIRECTION('ref_axis',(0.,-1.,0.)); #41356=DIRECTION('',(0.,-1.,0.)); #41357=DIRECTION('center_axis',(1.,0.,0.)); #41358=DIRECTION('ref_axis',(0.,-0.939692620785813,0.342020143325932)); #41359=DIRECTION('',(0.,-0.342020143325932,-0.939692620785813)); #41360=DIRECTION('center_axis',(-1.,0.,0.)); #41361=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #41362=DIRECTION('center_axis',(1.,0.,0.)); #41363=DIRECTION('ref_axis',(0.,0.,-1.)); #41364=DIRECTION('',(1.,0.,0.)); #41365=DIRECTION('center_axis',(0.,-0.939692620785813,0.342020143325932)); #41366=DIRECTION('ref_axis',(0.,-0.342020143325932,-0.939692620785813)); #41367=DIRECTION('',(1.,0.,0.)); #41368=DIRECTION('center_axis',(1.,0.,0.)); #41369=DIRECTION('ref_axis',(0.,0.,-1.)); #41370=DIRECTION('center_axis',(0.,-1.,0.)); #41371=DIRECTION('ref_axis',(0.,0.,-1.)); #41372=DIRECTION('center_axis',(1.,0.,0.)); #41373=DIRECTION('ref_axis',(0.,0.,-1.)); #41374=DIRECTION('',(1.,0.,0.)); #41375=DIRECTION('center_axis',(0.,0.939692620785813,-0.342020143325932)); #41376=DIRECTION('ref_axis',(0.,0.342020143325932,0.939692620785813)); #41377=DIRECTION('',(1.,0.,0.)); #41378=DIRECTION('center_axis',(1.,0.,0.)); #41379=DIRECTION('ref_axis',(0.,0.,-1.)); #41380=DIRECTION('center_axis',(0.,-0.573576436351011,0.819152044289016)); #41381=DIRECTION('ref_axis',(0.,-0.819152044289016,-0.573576436351011)); #41382=DIRECTION('center_axis',(0.,1.,0.)); #41383=DIRECTION('ref_axis',(0.,0.,-1.)); #41384=DIRECTION('',(0.,1.,0.)); #41385=DIRECTION('center_axis',(-1.,0.,0.)); #41386=DIRECTION('ref_axis',(0.,0.,-1.)); #41387=DIRECTION('',(0.,1.,0.)); #41388=DIRECTION('center_axis',(0.,1.,0.)); #41389=DIRECTION('ref_axis',(-1.,0.,0.)); #41390=DIRECTION('center_axis',(1.,0.,0.)); #41391=DIRECTION('ref_axis',(0.,1.,0.)); #41392=DIRECTION('center_axis',(-0.707106781186547,-0.707106781186548,0.)); #41393=DIRECTION('ref_axis',(-0.707106781186548,0.707106781186547,0.)); #41394=DIRECTION('center_axis',(-0.707106781186547,0.707106781186548,0.)); #41395=DIRECTION('ref_axis',(0.707106781186548,0.707106781186547,0.)); #41396=DIRECTION('center_axis',(1.,0.,0.)); #41397=DIRECTION('ref_axis',(0.,0.333333333333057,0.942809041582161)); #41398=DIRECTION('',(1.,0.,0.)); #41399=DIRECTION('center_axis',(1.,0.,0.)); #41400=DIRECTION('ref_axis',(0.,0.333333333333057,0.942809041582161)); #41401=DIRECTION('center_axis',(1.,0.,0.)); #41402=DIRECTION('ref_axis',(0.,0.,-1.)); #41403=DIRECTION('',(0.,0.,-1.)); #41404=DIRECTION('',(0.,1.,0.)); #41405=DIRECTION('center_axis',(-1.,0.,0.)); #41406=DIRECTION('ref_axis',(0.,0.,1.)); #41407=DIRECTION('',(0.,-1.,0.)); #41408=DIRECTION('center_axis',(0.,0.,-1.)); #41409=DIRECTION('ref_axis',(-1.,0.,0.)); #41410=DIRECTION('center_axis',(0.,0.,1.)); #41411=DIRECTION('ref_axis',(-1.,0.,0.)); #41412=DIRECTION('',(1.,0.,0.)); #41413=DIRECTION('center_axis',(0.,0.,1.)); #41414=DIRECTION('ref_axis',(0.,-1.,0.)); #41415=DIRECTION('',(0.,-1.,0.)); #41416=DIRECTION('center_axis',(0.,0.,-1.)); #41417=DIRECTION('ref_axis',(-1.,0.,0.)); #41418=DIRECTION('',(-1.,0.,2.6645352591E-14)); #41419=DIRECTION('',(0.,-1.,0.)); #41420=DIRECTION('',(-1.,0.,0.)); #41421=DIRECTION('center_axis',(0.,0.,1.)); #41422=DIRECTION('ref_axis',(0.,-1.,0.)); #41423=DIRECTION('',(0.,-1.,0.)); #41424=DIRECTION('center_axis',(0.,0.,1.)); #41425=DIRECTION('ref_axis',(1.,0.,0.)); #41426=DIRECTION('center_axis',(0.,0.,-1.)); #41427=DIRECTION('ref_axis',(-1.,0.,0.)); #41428=DIRECTION('',(-1.,0.,0.)); #41429=DIRECTION('center_axis',(0.,0.,1.)); #41430=DIRECTION('ref_axis',(0.,1.,0.)); #41431=DIRECTION('',(0.,-1.,0.)); #41432=DIRECTION('center_axis',(0.,0.,1.)); #41433=DIRECTION('ref_axis',(-1.,0.,0.)); #41434=DIRECTION('',(-1.,0.,0.)); #41435=DIRECTION('',(0.,1.,0.)); #41436=DIRECTION('center_axis',(0.,0.,-1.)); #41437=DIRECTION('ref_axis',(-1.,0.,0.)); #41438=DIRECTION('center_axis',(0.,0.,1.)); #41439=DIRECTION('ref_axis',(1.,0.,0.)); #41440=DIRECTION('',(1.,0.,0.)); #41441=DIRECTION('center_axis',(0.,0.,1.)); #41442=DIRECTION('ref_axis',(0.,1.,0.)); #41443=DIRECTION('',(0.,-1.,0.)); #41444=DIRECTION('',(-1.,0.,0.)); #41445=DIRECTION('',(1.,0.,0.)); #41446=DIRECTION('',(-1.,0.,0.)); #41447=DIRECTION('',(0.,-1.,0.)); #41448=DIRECTION('center_axis',(0.,0.,1.)); #41449=DIRECTION('ref_axis',(-1.,0.,0.)); #41450=DIRECTION('',(0.,0.,1.)); #41451=DIRECTION('center_axis',(0.,0.,-1.)); #41452=DIRECTION('ref_axis',(0.,-1.,0.)); #41453=DIRECTION('',(0.,0.,1.)); #41454=DIRECTION('center_axis',(0.,-1.,0.)); #41455=DIRECTION('ref_axis',(0.,0.,-1.)); #41456=DIRECTION('',(1.,0.,0.)); #41457=DIRECTION('',(0.,0.,-1.)); #41458=DIRECTION('center_axis',(0.,0.,-1.)); #41459=DIRECTION('ref_axis',(1.,0.,0.)); #41460=DIRECTION('center_axis',(0.,0.,-1.)); #41461=DIRECTION('ref_axis',(1.,0.,0.)); #41462=DIRECTION('center_axis',(0.,0.,-1.)); #41463=DIRECTION('ref_axis',(0.,1.,0.)); #41464=DIRECTION('',(0.,1.,0.)); #41465=DIRECTION('',(1.,0.,0.)); #41466=DIRECTION('center_axis',(1.,0.,0.)); #41467=DIRECTION('ref_axis',(0.,1.,0.)); #41468=DIRECTION('center_axis',(1.,0.,0.)); #41469=DIRECTION('ref_axis',(0.,1.,0.)); #41470=DIRECTION('center_axis',(1.,0.,0.)); #41471=DIRECTION('ref_axis',(0.,0.,-1.)); #41472=DIRECTION('center_axis',(0.,-1.,0.)); #41473=DIRECTION('ref_axis',(1.,0.,0.)); #41474=DIRECTION('center_axis',(0.,1.,0.)); #41475=DIRECTION('ref_axis',(-0.333333333333057,0.,0.942809041582161)); #41476=DIRECTION('',(0.,0.,-1.)); #41477=DIRECTION('',(1.,0.,0.)); #41478=DIRECTION('center_axis',(0.,-1.,0.)); #41479=DIRECTION('ref_axis',(0.,0.,1.)); #41480=DIRECTION('center_axis',(0.,-1.,0.)); #41481=DIRECTION('ref_axis',(1.,0.,0.)); #41482=DIRECTION('center_axis',(0.,1.,0.)); #41483=DIRECTION('ref_axis',(4.736951571734E-14,0.,1.)); #41484=DIRECTION('center_axis',(0.,-1.,0.)); #41485=DIRECTION('ref_axis',(1.,0.,1.184237892933E-14)); #41486=DIRECTION('',(1.,0.,0.)); #41487=DIRECTION('',(0.,0.,1.)); #41488=DIRECTION('center_axis',(0.,-1.,0.)); #41489=DIRECTION('ref_axis',(0.,0.,1.)); #41490=DIRECTION('center_axis',(0.,1.,0.)); #41491=DIRECTION('ref_axis',(-0.333333333333057,0.,0.942809041582161)); #41492=DIRECTION('center_axis',(0.,1.,0.)); #41493=DIRECTION('ref_axis',(-1.,0.,0.)); #41494=DIRECTION('center_axis',(0.,-1.,0.)); #41495=DIRECTION('ref_axis',(1.,0.,0.)); #41496=DIRECTION('center_axis',(0.,1.,0.)); #41497=DIRECTION('ref_axis',(0.333333333333057,0.,0.942809041582161)); #41498=DIRECTION('center_axis',(0.,1.,0.)); #41499=DIRECTION('ref_axis',(0.998052578482888,0.,0.062378286155183)); #41500=DIRECTION('',(1.,0.,0.)); #41501=DIRECTION('center_axis',(0.,1.,0.)); #41502=DIRECTION('ref_axis',(0.,0.,-1.)); #41503=DIRECTION('',(-0.0681299360299524,2.32115507463108E-14,0.997676456481035)); #41504=DIRECTION('',(-1.,0.,0.)); #41505=DIRECTION('',(0.0681299360299325,2.32115507463108E-14,0.997676456481036)); #41506=DIRECTION('center_axis',(0.,1.,0.)); #41507=DIRECTION('ref_axis',(0.997676456481036,0.,-0.0681299360299424)); #41508=DIRECTION('',(1.,0.,0.)); #41509=DIRECTION('center_axis',(0.,1.,0.)); #41510=DIRECTION('ref_axis',(0.,0.,-1.)); #41511=DIRECTION('',(-0.0623782861551731,0.,-0.998052578482889)); #41512=DIRECTION('center_axis',(0.,1.,0.)); #41513=DIRECTION('ref_axis',(-0.998052578482888,0.,0.062378286155183)); #41514=DIRECTION('',(-1.,0.,0.)); #41515=DIRECTION('center_axis',(0.,1.,0.)); #41516=DIRECTION('ref_axis',(0.,0.,1.)); #41517=DIRECTION('',(-0.0623782861551731,0.,0.998052578482889)); #41518=DIRECTION('center_axis',(0.,1.,0.)); #41519=DIRECTION('ref_axis',(0.,0.,1.)); #41520=DIRECTION('',(0.0623782861551731,0.,-0.998052578482889)); #41521=DIRECTION('center_axis',(0.,1.,0.)); #41522=DIRECTION('ref_axis',(0.998052578482888,0.,0.062378286155183)); #41523=DIRECTION('',(-1.,0.,0.)); #41524=DIRECTION('center_axis',(0.,1.,0.)); #41525=DIRECTION('ref_axis',(0.,0.,-1.)); #41526=DIRECTION('',(-0.0681299360299225,2.32115507463109E-14,0.997676456481037)); #41527=DIRECTION('',(1.,0.,0.)); #41528=DIRECTION('',(0.0681299360299623,2.32115507463108E-14,0.997676456481034)); #41529=DIRECTION('center_axis',(0.,1.,0.)); #41530=DIRECTION('ref_axis',(0.997676456481036,0.,-0.0681299360299424)); #41531=DIRECTION('',(-1.,0.,0.)); #41532=DIRECTION('center_axis',(0.,1.,0.)); #41533=DIRECTION('ref_axis',(0.,0.,-1.)); #41534=DIRECTION('',(0.0623782861551731,0.,0.998052578482889)); #41535=DIRECTION('center_axis',(0.,1.,0.)); #41536=DIRECTION('ref_axis',(-0.99805257848289,0.,0.0623782861551631)); #41537=DIRECTION('',(1.,0.,0.)); #41538=DIRECTION('center_axis',(0.,1.,0.)); #41539=DIRECTION('ref_axis',(0.,0.,-1.)); #41540=DIRECTION('',(1.,0.,0.)); #41541=DIRECTION('center_axis',(0.,1.,0.)); #41542=DIRECTION('ref_axis',(0.,0.,1.)); #41543=DIRECTION('',(-1.,0.,0.)); #41544=DIRECTION('center_axis',(0.,1.,0.)); #41545=DIRECTION('ref_axis',(0.,0.,1.)); #41546=DIRECTION('',(-1.,0.,0.)); #41547=DIRECTION('center_axis',(0.,1.,0.)); #41548=DIRECTION('ref_axis',(0.,0.,-1.)); #41549=DIRECTION('',(1.,0.,0.)); #41550=DIRECTION('center_axis',(0.,0.,1.)); #41551=DIRECTION('ref_axis',(1.,0.,0.)); #41552=DIRECTION('',(0.,-1.,0.)); #41553=DIRECTION('',(0.,-1.,0.)); #41554=DIRECTION('',(1.,0.,0.)); #41555=DIRECTION('center_axis',(0.,-1.,0.)); #41556=DIRECTION('ref_axis',(0.99805257848289,0.,0.0623782861551631)); #41557=DIRECTION('',(0.,-1.,0.)); #41558=DIRECTION('center_axis',(0.,-1.,0.)); #41559=DIRECTION('ref_axis',(0.99805257848289,0.,0.0623782861551631)); #41560=DIRECTION('center_axis',(0.998052578482889,0.,0.0623782861551731)); #41561=DIRECTION('ref_axis',(0.0623782861551731,0.,-0.998052578482889)); #41562=DIRECTION('',(0.0623782861551731,0.,-0.998052578482889)); #41563=DIRECTION('',(0.,-1.,0.)); #41564=DIRECTION('center_axis',(0.,-1.,0.)); #41565=DIRECTION('ref_axis',(0.,0.,-1.)); #41566=DIRECTION('',(0.,-1.,0.)); #41567=DIRECTION('center_axis',(0.,-1.,0.)); #41568=DIRECTION('ref_axis',(0.,0.,-1.)); #41569=DIRECTION('center_axis',(0.,0.,-1.)); #41570=DIRECTION('ref_axis',(-1.,0.,0.)); #41571=DIRECTION('',(0.,-1.,0.)); #41572=DIRECTION('',(-1.,0.,0.)); #41573=DIRECTION('',(0.,-1.,0.)); #41574=DIRECTION('center_axis',(0.,0.,-1.)); #41575=DIRECTION('ref_axis',(-1.,0.,0.)); #41576=DIRECTION('',(0.,1.,0.)); #41577=DIRECTION('',(-1.,0.,0.)); #41578=DIRECTION('center_axis',(0.,-1.,0.)); #41579=DIRECTION('ref_axis',(0.,0.,-1.)); #41580=DIRECTION('',(0.,-1.,0.)); #41581=DIRECTION('center_axis',(0.,-1.,0.)); #41582=DIRECTION('ref_axis',(0.,0.,-1.)); #41583=DIRECTION('center_axis',(0.,1.,0.)); #41584=DIRECTION('ref_axis',(-1.,0.,0.)); #41585=DIRECTION('',(1.,0.,0.)); #41586=DIRECTION('',(0.,0.,-1.)); #41587=DIRECTION('',(0.,0.,-1.)); #41588=DIRECTION('center_axis',(0.,-1.,0.)); #41589=DIRECTION('ref_axis',(0.,0.,1.)); #41590=DIRECTION('',(-0.0623782861551731,0.,-0.998052578482889)); #41591=DIRECTION('center_axis',(0.,-1.,0.)); #41592=DIRECTION('ref_axis',(-0.998052578482888,0.,0.062378286155183)); #41593=DIRECTION('',(1.,0.,0.)); #41594=DIRECTION('center_axis',(0.,-1.,0.)); #41595=DIRECTION('ref_axis',(0.,0.,-1.)); #41596=DIRECTION('',(0.0681299360299126,0.,0.997676456481038)); #41597=DIRECTION('',(1.,0.,0.)); #41598=DIRECTION('',(-0.0681299360299723,0.,0.997676456481034)); #41599=DIRECTION('center_axis',(0.,-1.,0.)); #41600=DIRECTION('ref_axis',(-0.997676456481036,0.,-0.0681299360299424)); #41601=DIRECTION('',(1.,0.,0.)); #41602=DIRECTION('center_axis',(0.,-1.,0.)); #41603=DIRECTION('ref_axis',(0.,0.,-1.)); #41604=DIRECTION('',(-0.0623782861551731,0.,0.998052578482889)); #41605=DIRECTION('center_axis',(0.,-1.,0.)); #41606=DIRECTION('ref_axis',(0.99805257848289,0.,0.0623782861551631)); #41607=DIRECTION('',(-1.,0.,0.)); #41608=DIRECTION('center_axis',(0.,1.,0.)); #41609=DIRECTION('ref_axis',(0.,0.,1.)); #41610=DIRECTION('',(1.,0.,0.)); #41611=DIRECTION('center_axis',(0.,1.,0.)); #41612=DIRECTION('ref_axis',(0.,0.,-1.)); #41613=DIRECTION('',(-1.,0.,0.)); #41614=DIRECTION('center_axis',(0.,1.,0.)); #41615=DIRECTION('ref_axis',(0.,0.,-1.)); #41616=DIRECTION('',(-1.,0.,0.)); #41617=DIRECTION('center_axis',(0.,1.,0.)); #41618=DIRECTION('ref_axis',(0.,0.,1.)); #41619=DIRECTION('',(1.,0.,0.)); #41620=DIRECTION('center_axis',(0.,-1.,0.)); #41621=DIRECTION('ref_axis',(-0.998052578482888,0.,0.062378286155183)); #41622=DIRECTION('',(0.0681299360299524,0.,0.997676456481035)); #41623=DIRECTION('',(-1.,0.,0.)); #41624=DIRECTION('',(-0.0681299360299225,0.,0.997676456481037)); #41625=DIRECTION('center_axis',(0.,-1.,0.)); #41626=DIRECTION('ref_axis',(-0.997676456481036,0.,-0.0681299360299424)); #41627=DIRECTION('center_axis',(0.,-1.,0.)); #41628=DIRECTION('ref_axis',(0.,0.,1.)); #41629=DIRECTION('',(0.0623782861551731,0.,0.998052578482889)); #41630=DIRECTION('center_axis',(-0.998052578482889,0.,0.0623782861551731)); #41631=DIRECTION('ref_axis',(0.0623782861551731,0.,0.998052578482889)); #41632=DIRECTION('',(0.,-1.,0.)); #41633=DIRECTION('',(0.,-1.,0.)); #41634=DIRECTION('center_axis',(0.,-1.,0.)); #41635=DIRECTION('ref_axis',(0.,0.,1.)); #41636=DIRECTION('center_axis',(0.,-1.,0.)); #41637=DIRECTION('ref_axis',(-0.998052578482888,0.,0.062378286155183)); #41638=DIRECTION('center_axis',(0.,1.,0.)); #41639=DIRECTION('ref_axis',(0.,0.,-1.)); #41640=DIRECTION('',(0.,1.,0.)); #41641=DIRECTION('center_axis',(0.997676456481036,0.,0.0681299360299325)); #41642=DIRECTION('ref_axis',(0.,1.,0.)); #41643=DIRECTION('',(0.,1.,0.)); #41644=DIRECTION('center_axis',(0.997668929427756,-0.00672155073364454, 0.067908232271287)); #41645=DIRECTION('ref_axis',(-0.00670589124197125,0.980663798552371,0.195585135507496)); #41646=DIRECTION('',(0.,0.980596055564618,0.196039220083924)); #41647=DIRECTION('center_axis',(1.,0.,0.)); #41648=DIRECTION('ref_axis',(0.,1.,0.)); #41649=DIRECTION('',(1.,0.,0.)); #41650=DIRECTION('',(0.,-0.980596055564618,-0.196039220083924)); #41651=DIRECTION('center_axis',(0.997668929427755,0.00672155073381479,-0.067908232271273)); #41652=DIRECTION('ref_axis',(0.00670589124180217,0.98066379855237,0.195585135507509)); #41653=DIRECTION('',(0.,-1.,0.)); #41654=DIRECTION('center_axis',(0.997676456481036,0.,-0.0681299360299325)); #41655=DIRECTION('ref_axis',(0.,1.,0.)); #41656=DIRECTION('center_axis',(1.,0.,0.)); #41657=DIRECTION('ref_axis',(0.,1.,0.)); #41658=DIRECTION('',(-1.,0.,0.)); #41659=DIRECTION('center_axis',(0.,0.980596055564618,0.196039220083924)); #41660=DIRECTION('ref_axis',(1.,0.,0.)); #41661=DIRECTION('',(0.0681299360299378,-0.195583714424022,0.978317597955112)); #41662=DIRECTION('',(-1.,0.,0.)); #41663=DIRECTION('',(-0.0681299360299378,-0.195583714424022,0.978317597955112)); #41664=DIRECTION('center_axis',(0.997676456481036,-0.0133561395236605,0.0668079465368324)); #41665=DIRECTION('ref_axis',(-1.68927372090556E-14,0.980596055564618,0.196039220083923)); #41666=DIRECTION('',(0.,0.980596055564618,0.196039220083924)); #41667=DIRECTION('',(-0.0681299360299378,-0.195583714424022,0.978317597955112)); #41668=DIRECTION('center_axis',(0.,0.980596055564618,0.196039220083924)); #41669=DIRECTION('ref_axis',(1.,0.,0.)); #41670=DIRECTION('',(1.,0.,0.)); #41671=DIRECTION('',(0.0681299360299378,-0.195583714424022,0.978317597955112)); #41672=DIRECTION('center_axis',(0.997676456481036,0.0133561395236605,-0.0668079465368324)); #41673=DIRECTION('ref_axis',(1.68927372090556E-14,0.980596055564618,0.196039220083923)); #41674=DIRECTION('',(0.,-0.980596055564618,-0.196039220083924)); #41675=DIRECTION('',(0.,-0.832006782394109,0.554765458595073)); #41676=DIRECTION('center_axis',(-1.,0.,0.)); #41677=DIRECTION('ref_axis',(0.,-0.980596055564618,-0.196039220083924)); #41678=DIRECTION('',(-1.,0.,0.)); #41679=DIRECTION('',(0.,0.832006782394109,-0.554765458595073)); #41680=DIRECTION('center_axis',(-1.,0.,0.)); #41681=DIRECTION('ref_axis',(0.,-0.980596055564618,-0.196039220083924)); #41682=DIRECTION('',(1.,0.,0.)); #41683=DIRECTION('center_axis',(0.,0.832006782394109,-0.554765458595073)); #41684=DIRECTION('ref_axis',(1.,0.,0.)); #41685=DIRECTION('center_axis',(0.,-0.832006782394109,0.554765458595073)); #41686=DIRECTION('ref_axis',(-1.77635683940023E-14,0.554765458595073,0.832006782394109)); #41687=DIRECTION('',(0.068129936029946,0.55347643690913,0.830073578427195)); #41688=DIRECTION('',(-0.068129936029956,0.55347643690913,0.830073578427195)); #41689=DIRECTION('center_axis',(-6.93889390390791E-18,-0.832006782394109, 0.554765458595073)); #41690=DIRECTION('ref_axis',(0.997676456481035,0.0377961352057061,0.0566845688609921)); #41691=DIRECTION('',(1.,0.,0.)); #41692=DIRECTION('center_axis',(0.,-0.832006782394109,0.554765458595073)); #41693=DIRECTION('ref_axis',(0.,0.554765458595073,0.832006782394109)); #41694=DIRECTION('',(0.,-0.832006782394109,0.554765458595073)); #41695=DIRECTION('center_axis',(0.,0.832006782394109,-0.554765458595073)); #41696=DIRECTION('ref_axis',(-0.997676456481036,0.0377961352057031,0.0566845688609875)); #41697=DIRECTION('',(0.,-0.832006782394109,0.554765458595073)); #41698=DIRECTION('center_axis',(0.997676456481036,-0.0377961352056814,-0.0566845688609921)); #41699=DIRECTION('ref_axis',(-2.05044314860485E-14,0.83200678239411,-0.554765458595072)); #41700=DIRECTION('',(0.068129936029946,0.55347643690913,0.830073578427195)); #41701=DIRECTION('center_axis',(0.,0.832006782394109,-0.554765458595073)); #41702=DIRECTION('ref_axis',(1.,0.,0.)); #41703=DIRECTION('',(-1.,0.,0.)); #41704=DIRECTION('center_axis',(-1.57772181044221E-30,0.832006782394109, -0.554765458595073)); #41705=DIRECTION('ref_axis',(-1.5543122344752E-14,0.554765458595073,0.832006782394109)); #41706=DIRECTION('',(-0.068129936029956,0.55347643690913,0.830073578427195)); #41707=DIRECTION('center_axis',(0.997676456481036,0.0377961352056914,0.0566845688609921)); #41708=DIRECTION('ref_axis',(1.21708199074549E-14,0.83200678239411,-0.554765458595071)); #41709=DIRECTION('',(0.,0.832006782394109,-0.554765458595073)); #41710=DIRECTION('center_axis',(0.,0.832006782394109,-0.554765458595073)); #41711=DIRECTION('ref_axis',(0.,0.554765458595073,0.832006782394109)); #41712=DIRECTION('',(0.,0.832006782394109,-0.554765458595073)); #41713=DIRECTION('center_axis',(0.,0.554765458595073,0.832006782394109)); #41714=DIRECTION('ref_axis',(0.,-0.832006782394109,0.554765458595073)); #41715=DIRECTION('center_axis',(0.,0.,-1.)); #41716=DIRECTION('ref_axis',(-1.,0.,0.)); #41717=DIRECTION('',(0.,1.,0.)); #41718=DIRECTION('',(0.,1.,0.)); #41719=DIRECTION('center_axis',(0.,1.,0.)); #41720=DIRECTION('ref_axis',(0.,0.,1.)); #41721=DIRECTION('',(0.,1.,0.)); #41722=DIRECTION('center_axis',(-0.998052578482889,0.,-0.0623782861551731)); #41723=DIRECTION('ref_axis',(-0.0623782861551731,0.,0.998052578482889)); #41724=DIRECTION('',(0.,1.,-1.184237892934E-14)); #41725=DIRECTION('center_axis',(0.,1.,0.)); #41726=DIRECTION('ref_axis',(0.998052578482889,0.,0.0623782861551731)); #41727=DIRECTION('',(0.,1.,0.)); #41728=DIRECTION('center_axis',(0.,0.,1.)); #41729=DIRECTION('ref_axis',(1.,0.,0.)); #41730=DIRECTION('',(0.,1.,0.)); #41731=DIRECTION('',(0.,-1.,0.)); #41732=DIRECTION('center_axis',(0.,0.,1.)); #41733=DIRECTION('ref_axis',(1.,0.,0.)); #41734=DIRECTION('',(0.,1.,0.)); #41735=DIRECTION('center_axis',(0.,1.,0.)); #41736=DIRECTION('ref_axis',(0.,0.,-1.)); #41737=DIRECTION('',(0.,1.,0.)); #41738=DIRECTION('center_axis',(0.998052578482889,0.,-0.0623782861551731)); #41739=DIRECTION('ref_axis',(-0.0623782861551731,0.,-0.998052578482889)); #41740=DIRECTION('',(0.,1.,0.)); #41741=DIRECTION('center_axis',(0.,1.,0.)); #41742=DIRECTION('ref_axis',(-0.998052578482889,0.,0.0623782861551731)); #41743=DIRECTION('center_axis',(0.,-1.,0.)); #41744=DIRECTION('ref_axis',(0.,0.,-1.)); #41745=DIRECTION('',(0.,-1.,0.)); #41746=DIRECTION('center_axis',(0.997676456481036,0.,-0.0681299360299325)); #41747=DIRECTION('ref_axis',(0.,1.,0.)); #41748=DIRECTION('',(0.,1.,0.)); #41749=DIRECTION('',(0.,0.980596055564618,0.196039220083924)); #41750=DIRECTION('center_axis',(0.997668929427756,0.00672155073364454,-0.067908232271287)); #41751=DIRECTION('ref_axis',(0.00670589124197125,0.980663798552371,0.195585135507496)); #41752=DIRECTION('center_axis',(1.,0.,0.)); #41753=DIRECTION('ref_axis',(0.,1.,0.)); #41754=DIRECTION('',(1.,0.,0.)); #41755=DIRECTION('center_axis',(0.997668929427755,-0.00672155073381479, 0.067908232271273)); #41756=DIRECTION('ref_axis',(-0.00670589124180217,0.98066379855237,0.195585135507509)); #41757=DIRECTION('',(0.,-1.,0.)); #41758=DIRECTION('',(0.,-0.980596055564618,-0.196039220083924)); #41759=DIRECTION('center_axis',(0.997676456481036,0.,0.0681299360299325)); #41760=DIRECTION('ref_axis',(0.,1.,0.)); #41761=DIRECTION('',(0.,1.,0.)); #41762=DIRECTION('center_axis',(0.,1.,0.)); #41763=DIRECTION('ref_axis',(0.,0.,-1.)); #41764=DIRECTION('center_axis',(1.,0.,0.)); #41765=DIRECTION('ref_axis',(0.,1.,0.)); #41766=DIRECTION('',(-1.,0.,0.)); #41767=DIRECTION('center_axis',(0.,-0.980596055564618,-0.196039220083924)); #41768=DIRECTION('ref_axis',(-1.,0.,0.)); #41769=DIRECTION('',(-0.0681299360299378,-0.195583714424022,0.978317597955112)); #41770=DIRECTION('',(-1.,0.,0.)); #41771=DIRECTION('',(0.0681299360299378,-0.195583714424022,0.978317597955112)); #41772=DIRECTION('center_axis',(0.997676456481036,0.0133561395236605,-0.0668079465368324)); #41773=DIRECTION('ref_axis',(1.68927372090556E-14,0.980596055564618,0.196039220083923)); #41774=DIRECTION('',(0.,0.980596055564618,0.196039220083924)); #41775=DIRECTION('',(0.0681299360299378,-0.195583714424022,0.978317597955112)); #41776=DIRECTION('center_axis',(0.,-0.980596055564618,-0.196039220083924)); #41777=DIRECTION('ref_axis',(-1.,0.,0.)); #41778=DIRECTION('',(1.,0.,0.)); #41779=DIRECTION('',(-0.0681299360299378,-0.195583714424022,0.978317597955112)); #41780=DIRECTION('center_axis',(0.997676456481036,-0.0133561395236605,0.0668079465368324)); #41781=DIRECTION('ref_axis',(-1.68927372090556E-14,0.980596055564618,0.196039220083923)); #41782=DIRECTION('',(0.,-0.980596055564618,-0.196039220083924)); #41783=DIRECTION('',(0.,-0.832006782394109,0.554765458595073)); #41784=DIRECTION('center_axis',(-1.,0.,0.)); #41785=DIRECTION('ref_axis',(0.,-0.980596055564618,-0.196039220083924)); #41786=DIRECTION('',(-1.,0.,0.)); #41787=DIRECTION('',(0.,0.832006782394109,-0.554765458595073)); #41788=DIRECTION('center_axis',(-1.,0.,0.)); #41789=DIRECTION('ref_axis',(0.,-0.980596055564618,-0.196039220083924)); #41790=DIRECTION('',(1.,0.,0.)); #41791=DIRECTION('center_axis',(0.,-0.832006782394109,0.554765458595073)); #41792=DIRECTION('ref_axis',(-1.,0.,0.)); #41793=DIRECTION('center_axis',(0.,0.832006782394109,-0.554765458595073)); #41794=DIRECTION('ref_axis',(-0.997676456481035,0.0377961352057107,0.056684568860999)); #41795=DIRECTION('',(1.,0.,0.)); #41796=DIRECTION('center_axis',(0.,0.832006782394109,-0.554765458595073)); #41797=DIRECTION('ref_axis',(1.77635683940023E-14,0.554765458595073,0.832006782394109)); #41798=DIRECTION('',(-0.068129936029956,0.55347643690913,0.830073578427195)); #41799=DIRECTION('',(0.068129936029956,0.55347643690913,0.830073578427195)); #41800=DIRECTION('center_axis',(0.,-0.832006782394109,0.554765458595073)); #41801=DIRECTION('ref_axis',(0.,0.554765458595073,0.832006782394109)); #41802=DIRECTION('',(0.,-0.832006782394109,0.554765458595073)); #41803=DIRECTION('',(0.,-0.832006782394109,0.554765458595073)); #41804=DIRECTION('center_axis',(0.,-0.832006782394109,0.554765458595073)); #41805=DIRECTION('ref_axis',(0.,0.554765458595073,0.832006782394109)); #41806=DIRECTION('center_axis',(0.,-0.832006782394109,0.554765458595073)); #41807=DIRECTION('ref_axis',(-1.,0.,0.)); #41808=DIRECTION('',(0.068129936029956,0.55347643690913,0.830073578427195)); #41809=DIRECTION('',(-0.068129936029946,0.55347643690913,0.830073578427195)); #41810=DIRECTION('center_axis',(0.,-0.832006782394109,0.554765458595073)); #41811=DIRECTION('ref_axis',(0.997676456481035,0.0377961352057107,0.056684568860999)); #41812=DIRECTION('',(-1.,0.,0.)); #41813=DIRECTION('center_axis',(0.,-0.554765458595073,-0.832006782394109)); #41814=DIRECTION('ref_axis',(0.,-0.832006782394109,0.554765458595073)); #41815=DIRECTION('',(0.,0.832006782394109,-0.554765458595073)); #41816=DIRECTION('center_axis',(0.,0.832006782394109,-0.554765458595073)); #41817=DIRECTION('ref_axis',(0.,0.554765458595073,0.832006782394109)); #41818=DIRECTION('',(0.,0.832006782394109,-0.554765458595073)); #41819=DIRECTION('center_axis',(0.997676456481036,0.0377961352056814,0.0566845688609921)); #41820=DIRECTION('ref_axis',(2.05044314860485E-14,0.83200678239411,-0.554765458595072)); #41821=DIRECTION('center_axis',(0.997676456481036,-0.0377961352056914,-0.0566845688609921)); #41822=DIRECTION('ref_axis',(-1.21708199074549E-14,0.83200678239411,-0.554765458595071)); #41823=DIRECTION('center_axis',(0.,0.,-1.)); #41824=DIRECTION('ref_axis',(-1.,0.,0.)); #41825=DIRECTION('',(0.,-1.,0.)); #41826=DIRECTION('',(0.,-1.,0.)); #41827=DIRECTION('center_axis',(0.,1.,0.)); #41828=DIRECTION('ref_axis',(0.,0.,-1.)); #41829=DIRECTION('',(0.,-1.,0.)); #41830=DIRECTION('center_axis',(0.,0.,1.)); #41831=DIRECTION('ref_axis',(1.,0.,0.)); #41832=DIRECTION('',(0.,-1.,0.)); #41833=DIRECTION('center_axis',(0.,1.,0.)); #41834=DIRECTION('ref_axis',(0.,0.,-1.)); #41835=DIRECTION('center_axis',(0.,0.,1.)); #41836=DIRECTION('ref_axis',(1.,0.,0.)); #41837=DIRECTION('',(0.,-1.,0.)); #41838=DIRECTION('',(0.,-1.,0.)); #41839=DIRECTION('center_axis',(0.,1.,0.)); #41840=DIRECTION('ref_axis',(0.,0.,-1.)); #41841=DIRECTION('',(0.,-1.,0.)); #41842=DIRECTION('center_axis',(0.,0.,-1.)); #41843=DIRECTION('ref_axis',(-1.,0.,0.)); #41844=DIRECTION('',(0.,-1.,0.)); #41845=DIRECTION('center_axis',(0.,1.,0.)); #41846=DIRECTION('ref_axis',(0.,0.,-1.)); #41847=DIRECTION('center_axis',(1.,0.,0.)); #41848=DIRECTION('ref_axis',(0.,0.,-1.)); #41849=DIRECTION('',(0.,0.,-1.)); #41850=DIRECTION('',(0.,1.,0.)); #41851=DIRECTION('center_axis',(0.,0.,-1.)); #41852=DIRECTION('ref_axis',(-1.,0.,0.)); #41853=DIRECTION('',(0.,0.,-1.)); #41854=DIRECTION('center_axis',(0.,0.,-1.)); #41855=DIRECTION('ref_axis',(-1.,0.,0.)); #41856=DIRECTION('center_axis',(0.,0.,-1.)); #41857=DIRECTION('ref_axis',(0.,1.,0.)); #41858=DIRECTION('',(0.,1.,0.)); #41859=DIRECTION('',(1.,0.,0.)); #41860=DIRECTION('center_axis',(0.,0.,-1.)); #41861=DIRECTION('ref_axis',(0.,1.,0.)); #41862=DIRECTION('center_axis',(0.,0.,1.)); #41863=DIRECTION('ref_axis',(1.,0.,0.)); #41864=DIRECTION('',(0.,0.,1.)); #41865=DIRECTION('',(0.,0.,1.)); #41866=DIRECTION('center_axis',(0.,1.,0.)); #41867=DIRECTION('ref_axis',(0.,0.,1.)); #41868=DIRECTION('center_axis',(1.,0.,0.)); #41869=DIRECTION('ref_axis',(0.,0.,-1.)); #41870=DIRECTION('center_axis',(0.,1.,0.)); #41871=DIRECTION('ref_axis',(0.,0.,1.)); #41872=DIRECTION('center_axis',(0.,-1.,0.)); #41873=DIRECTION('ref_axis',(0.333333333333057,0.,0.942809041582161)); #41874=DIRECTION('center_axis',(0.,-1.,0.)); #41875=DIRECTION('ref_axis',(-1.,0.,0.)); #41876=DIRECTION('center_axis',(0.,1.,0.)); #41877=DIRECTION('ref_axis',(-1.,0.,1.184237892933E-14)); #41878=DIRECTION('',(1.,0.,0.)); #41879=DIRECTION('',(0.,0.,1.)); #41880=DIRECTION('center_axis',(0.,-1.,0.)); #41881=DIRECTION('ref_axis',(-1.,0.,0.)); #41882=DIRECTION('',(1.,0.,0.)); #41883=DIRECTION('center_axis',(0.,1.,0.)); #41884=DIRECTION('ref_axis',(0.,0.,1.)); #41885=DIRECTION('',(0.,0.,-1.)); #41886=DIRECTION('center_axis',(0.,0.,1.)); #41887=DIRECTION('ref_axis',(0.,-1.,0.)); #41888=DIRECTION('center_axis',(0.,0.,-1.)); #41889=DIRECTION('ref_axis',(1.,0.,0.)); #41890=DIRECTION('',(0.,0.,1.)); #41891=DIRECTION('center_axis',(1.,0.,0.)); #41892=DIRECTION('ref_axis',(0.,0.,1.)); #41893=DIRECTION('',(0.,-1.,0.)); #41894=DIRECTION('',(0.,0.,-1.)); #41895=DIRECTION('center_axis',(0.,0.,-1.)); #41896=DIRECTION('ref_axis',(0.,1.,0.)); #41897=DIRECTION('center_axis',(0.,0.,-1.)); #41898=DIRECTION('ref_axis',(0.,1.,0.)); #41899=DIRECTION('center_axis',(0.,0.,-1.)); #41900=DIRECTION('ref_axis',(1.,0.,0.)); #41901=DIRECTION('',(0.,1.,0.)); #41902=DIRECTION('center_axis',(0.,1.,0.)); #41903=DIRECTION('ref_axis',(-1.,0.,1.184237892933E-14)); #41904=DIRECTION('center_axis',(0.,0.,-1.)); #41905=DIRECTION('ref_axis',(0.,-1.,0.)); #41906=DIRECTION('',(0.,0.,-1.)); #41907=DIRECTION('center_axis',(0.,0.,-1.)); #41908=DIRECTION('ref_axis',(0.,-1.,0.)); #41909=DIRECTION('center_axis',(0.,0.,-1.)); #41910=DIRECTION('ref_axis',(1.,0.,0.)); #41911=DIRECTION('',(0.,-1.,0.)); #41912=DIRECTION('center_axis',(0.,0.,-1.)); #41913=DIRECTION('ref_axis',(-1.,0.,0.)); #41914=DIRECTION('',(0.,-1.,0.)); #41915=DIRECTION('center_axis',(0.,-1.,0.)); #41916=DIRECTION('ref_axis',(1.,0.,1.184237892933E-14)); #41917=DIRECTION('center_axis',(0.,0.,1.)); #41918=DIRECTION('ref_axis',(0.,1.,0.)); #41919=DIRECTION('',(0.,0.,1.)); #41920=DIRECTION('center_axis',(-1.,0.,0.)); #41921=DIRECTION('ref_axis',(0.,0.,-1.)); #41922=DIRECTION('center_axis',(0.,0.,-1.)); #41923=DIRECTION('ref_axis',(1.,0.,0.)); #41924=DIRECTION('',(0.,-1.,0.)); #41925=DIRECTION('',(0.,-1.,0.)); #41926=DIRECTION('',(1.,0.,0.)); #41927=DIRECTION('',(0.,-1.,0.)); #41928=DIRECTION('center_axis',(-1.,0.,0.)); #41929=DIRECTION('ref_axis',(0.,-1.,0.)); #41930=DIRECTION('',(0.,0.,1.)); #41931=DIRECTION('',(0.,-1.,0.)); #41932=DIRECTION('',(0.,0.,1.)); #41933=DIRECTION('',(0.,-1.,0.)); #41934=DIRECTION('center_axis',(0.,0.,1.)); #41935=DIRECTION('ref_axis',(1.,0.,0.)); #41936=DIRECTION('',(1.,0.,0.)); #41937=DIRECTION('',(0.,-1.,0.)); #41938=DIRECTION('',(1.,0.,0.)); #41939=DIRECTION('',(0.,1.,0.)); #41940=DIRECTION('',(1.,0.,0.)); #41941=DIRECTION('',(0.,-1.,0.)); #41942=DIRECTION('',(1.,0.,0.)); #41943=DIRECTION('',(0.,1.,0.)); #41944=DIRECTION('',(1.,0.,0.)); #41945=DIRECTION('',(0.,1.,0.)); #41946=DIRECTION('',(0.,-1.,0.)); #41947=DIRECTION('',(1.,0.,0.)); #41948=DIRECTION('',(0.,-1.,0.)); #41949=DIRECTION('center_axis',(-1.,0.,0.)); #41950=DIRECTION('ref_axis',(0.,-1.,0.)); #41951=DIRECTION('',(0.,0.,-1.)); #41952=DIRECTION('',(0.,-1.,0.)); #41953=DIRECTION('',(0.,0.,-1.)); #41954=DIRECTION('center_axis',(0.,1.,0.)); #41955=DIRECTION('ref_axis',(-1.,0.,0.)); #41956=DIRECTION('',(-1.,0.,0.)); #41957=DIRECTION('',(1.,0.,0.)); #41958=DIRECTION('',(0.,0.,-1.)); #41959=DIRECTION('',(-1.,0.,0.)); #41960=DIRECTION('',(0.,0.,1.)); #41961=DIRECTION('center_axis',(1.,0.,0.)); #41962=DIRECTION('ref_axis',(0.,1.,0.)); #41963=DIRECTION('',(0.,0.,1.)); #41964=DIRECTION('',(0.,1.,0.)); #41965=DIRECTION('',(0.,-1.,0.)); #41966=DIRECTION('center_axis',(0.,0.,-1.)); #41967=DIRECTION('ref_axis',(1.,0.,0.)); #41968=DIRECTION('',(0.,-1.,0.)); #41969=DIRECTION('',(0.,-1.,0.)); #41970=DIRECTION('center_axis',(1.,0.,0.)); #41971=DIRECTION('ref_axis',(0.,0.,1.)); #41972=DIRECTION('',(0.,-1.,0.)); #41973=DIRECTION('center_axis',(0.,0.,-1.)); #41974=DIRECTION('ref_axis',(1.,0.,0.)); #41975=DIRECTION('',(0.,-1.,0.)); #41976=DIRECTION('center_axis',(-1.,0.,0.)); #41977=DIRECTION('ref_axis',(0.,0.,-1.)); #41978=DIRECTION('center_axis',(1.,0.,0.)); #41979=DIRECTION('ref_axis',(0.,1.,0.)); #41980=DIRECTION('',(0.,1.,0.)); #41981=DIRECTION('',(0.,0.,-1.)); #41982=DIRECTION('center_axis',(0.,-1.,0.)); #41983=DIRECTION('ref_axis',(1.,0.,0.)); #41984=DIRECTION('',(1.,0.,0.)); #41985=DIRECTION('center_axis',(0.,0.,1.)); #41986=DIRECTION('ref_axis',(1.,0.,0.)); #41987=DIRECTION('center_axis',(0.,0.,1.)); #41988=DIRECTION('ref_axis',(1.,0.,0.)); #41989=DIRECTION('',(1.,0.,0.)); #41990=DIRECTION('',(1.,0.,0.)); #41991=DIRECTION('',(1.,0.,0.)); #41992=DIRECTION('',(0.,1.,0.)); #41993=DIRECTION('',(1.,0.,0.)); #41994=DIRECTION('',(0.,-1.,0.)); #41995=DIRECTION('',(1.,0.,0.)); #41996=DIRECTION('',(0.,1.,0.)); #41997=DIRECTION('',(1.,0.,0.)); #41998=DIRECTION('',(0.,-1.,0.)); #41999=DIRECTION('',(1.,0.,0.)); #42000=DIRECTION('',(0.,1.,0.)); #42001=DIRECTION('',(1.,0.,0.)); #42002=DIRECTION('',(0.,-1.,0.)); #42003=DIRECTION('',(1.,0.,0.)); #42004=DIRECTION('',(0.,-1.,0.)); #42005=DIRECTION('',(-1.,0.,0.)); #42006=DIRECTION('',(0.,1.,0.)); #42007=DIRECTION('',(1.,0.,0.)); #42008=DIRECTION('',(0.,1.,0.)); #42009=DIRECTION('',(1.,0.,0.)); #42010=DIRECTION('',(0.,-1.,0.)); #42011=DIRECTION('center_axis',(0.,-1.,0.)); #42012=DIRECTION('ref_axis',(1.,0.,0.)); #42013=DIRECTION('',(0.,0.,1.)); #42014=DIRECTION('center_axis',(-1.,0.,0.)); #42015=DIRECTION('ref_axis',(0.,-1.,0.)); #42016=DIRECTION('',(0.,0.,1.)); #42017=DIRECTION('center_axis',(0.,-1.,0.)); #42018=DIRECTION('ref_axis',(1.,0.,0.)); #42019=DIRECTION('',(0.,0.,1.)); #42020=DIRECTION('center_axis',(1.,0.,0.)); #42021=DIRECTION('ref_axis',(0.,1.,0.)); #42022=DIRECTION('',(0.,1.,0.)); #42023=DIRECTION('',(0.,0.,1.)); #42024=DIRECTION('center_axis',(0.,-1.,0.)); #42025=DIRECTION('ref_axis',(1.,0.,0.)); #42026=DIRECTION('',(-1.,0.,0.)); #42027=DIRECTION('',(0.,0.,1.)); #42028=DIRECTION('',(1.,0.,0.)); #42029=DIRECTION('',(0.707106781186548,0.,0.707106781186548)); #42030=DIRECTION('',(0.,0.,-1.)); #42031=DIRECTION('',(-1.,0.,0.)); #42032=DIRECTION('',(0.,0.,1.)); #42033=DIRECTION('',(0.707106781186548,0.,-0.707106781186548)); #42034=DIRECTION('',(-1.,0.,0.)); #42035=DIRECTION('',(0.707106781186548,0.,0.707106781186548)); #42036=DIRECTION('',(0.,0.,-1.)); #42037=DIRECTION('',(-1.,0.,0.)); #42038=DIRECTION('',(0.,0.,1.)); #42039=DIRECTION('',(0.707106781186548,0.,-0.707106781186548)); #42040=DIRECTION('',(-1.,0.,0.)); #42041=DIRECTION('',(0.707106781186548,0.,0.707106781186548)); #42042=DIRECTION('',(0.,0.,-1.)); #42043=DIRECTION('',(-1.,0.,0.)); #42044=DIRECTION('',(0.,0.,1.)); #42045=DIRECTION('',(0.707106781186548,0.,-0.707106781186548)); #42046=DIRECTION('',(-1.,0.,0.)); #42047=DIRECTION('',(0.707106781186548,0.,0.707106781186548)); #42048=DIRECTION('',(0.,0.,-1.)); #42049=DIRECTION('',(-1.,0.,0.)); #42050=DIRECTION('',(0.,0.,1.)); #42051=DIRECTION('',(0.707106781186548,0.,-0.707106781186548)); #42052=DIRECTION('center_axis',(-0.707106781186548,0.,-0.707106781186548)); #42053=DIRECTION('ref_axis',(0.,-1.,0.)); #42054=DIRECTION('',(0.,-1.,0.)); #42055=DIRECTION('',(0.,-1.,0.)); #42056=DIRECTION('center_axis',(0.,0.,1.)); #42057=DIRECTION('ref_axis',(-1.,0.,0.)); #42058=DIRECTION('',(0.,1.,0.)); #42059=DIRECTION('center_axis',(-1.,0.,0.)); #42060=DIRECTION('ref_axis',(0.,-1.,0.)); #42061=DIRECTION('',(0.,0.,1.)); #42062=DIRECTION('center_axis',(0.,-1.,0.)); #42063=DIRECTION('ref_axis',(1.,0.,0.)); #42064=DIRECTION('',(0.,0.,-1.)); #42065=DIRECTION('center_axis',(1.,0.,0.)); #42066=DIRECTION('ref_axis',(0.,1.,0.)); #42067=DIRECTION('',(0.,0.,1.)); #42068=DIRECTION('center_axis',(0.,-1.,0.)); #42069=DIRECTION('ref_axis',(1.,0.,0.)); #42070=DIRECTION('center_axis',(1.,0.,0.)); #42071=DIRECTION('ref_axis',(0.,0.,1.)); #42072=DIRECTION('',(0.,1.,0.)); #42073=DIRECTION('',(0.,0.,-1.)); #42074=DIRECTION('center_axis',(0.,-1.,0.)); #42075=DIRECTION('ref_axis',(0.,0.,-1.)); #42076=DIRECTION('',(1.,0.,-1.7763568394E-14)); #42077=DIRECTION('',(0.,0.,-1.)); #42078=DIRECTION('',(1.,0.,0.)); #42079=DIRECTION('',(0.,0.,-1.)); #42080=DIRECTION('center_axis',(0.,-1.,0.)); #42081=DIRECTION('ref_axis',(0.,0.,-1.)); #42082=DIRECTION('',(1.,0.,0.)); #42083=DIRECTION('',(1.,0.,1.7763568394E-14)); #42084=DIRECTION('',(0.,0.,-1.)); #42085=DIRECTION('center_axis',(1.,0.,0.)); #42086=DIRECTION('ref_axis',(0.,0.,-1.)); #42087=DIRECTION('',(0.,0.,-1.)); #42088=DIRECTION('',(0.,-1.,0.)); #42089=DIRECTION('',(0.,1.,0.)); #42090=DIRECTION('center_axis',(0.894427190999916,0.447213595499958,0.)); #42091=DIRECTION('ref_axis',(0.447213595499958,-0.894427190999916,0.)); #42092=DIRECTION('',(0.447213595499958,-0.894427190999916,0.)); #42093=DIRECTION('',(0.447213595499958,-0.894427190999916,0.)); #42094=DIRECTION('',(0.,0.,1.)); #42095=DIRECTION('center_axis',(0.,0.,1.)); #42096=DIRECTION('ref_axis',(0.,-1.,0.)); #42097=DIRECTION('',(0.,1.,0.)); #42098=DIRECTION('',(1.,0.,0.)); #42099=DIRECTION('',(0.,1.,0.)); #42100=DIRECTION('',(0.447213595499958,0.894427190999916,0.)); #42101=DIRECTION('',(0.,-1.,0.)); #42102=DIRECTION('',(0.,-1.,0.)); #42103=DIRECTION('',(1.,0.,0.)); #42104=DIRECTION('',(0.,-1.,0.)); #42105=DIRECTION('center_axis',(1.,0.,0.)); #42106=DIRECTION('ref_axis',(0.,0.,-1.)); #42107=DIRECTION('',(0.,1.,0.)); #42108=DIRECTION('',(0.,0.,1.)); #42109=DIRECTION('center_axis',(1.,0.,0.)); #42110=DIRECTION('ref_axis',(0.,0.707106781186548,-0.707106781186548)); #42111=DIRECTION('',(0.,0.707106781186548,0.707106781186548)); #42112=DIRECTION('center_axis',(-1.,0.,0.)); #42113=DIRECTION('ref_axis',(0.,-0.819152044289016,-0.573576436351011)); #42114=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #42115=DIRECTION('center_axis',(1.,0.,0.)); #42116=DIRECTION('ref_axis',(0.,1.,0.)); #42117=DIRECTION('',(0.,0.,1.)); #42118=DIRECTION('center_axis',(1.,0.,0.)); #42119=DIRECTION('ref_axis',(0.,0.,-1.)); #42120=DIRECTION('',(0.,1.,0.)); #42121=DIRECTION('center_axis',(-1.,0.,0.)); #42122=DIRECTION('ref_axis',(0.,1.,0.)); #42123=DIRECTION('',(0.,0.,-1.)); #42124=DIRECTION('center_axis',(-1.,0.,0.)); #42125=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #42126=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #42127=DIRECTION('center_axis',(1.,0.,0.)); #42128=DIRECTION('ref_axis',(0.,-0.707106781186048,0.707106781187047)); #42129=DIRECTION('',(0.,-0.707106781186548,-0.707106781186548)); #42130=DIRECTION('center_axis',(-1.,0.,0.)); #42131=DIRECTION('ref_axis',(0.,1.,2.368475785867E-14)); #42132=DIRECTION('',(0.,0.,-1.)); #42133=DIRECTION('center_axis',(0.,0.,-1.)); #42134=DIRECTION('ref_axis',(-1.,0.,0.)); #42135=DIRECTION('',(0.,-1.,0.)); #42136=DIRECTION('',(-1.,0.,0.)); #42137=DIRECTION('',(0.,1.,0.)); #42138=DIRECTION('',(-1.,0.,0.)); #42139=DIRECTION('',(1.,0.,0.)); #42140=DIRECTION('',(0.,1.,0.)); #42141=DIRECTION('',(1.,0.,0.)); #42142=DIRECTION('center_axis',(0.,0.,-1.)); #42143=DIRECTION('ref_axis',(-1.,0.,0.)); #42144=DIRECTION('',(0.,-1.,0.)); #42145=DIRECTION('',(-1.,0.,0.)); #42146=DIRECTION('',(0.,1.,0.)); #42147=DIRECTION('',(-1.,0.,0.)); #42148=DIRECTION('',(1.,0.,0.)); #42149=DIRECTION('',(0.,1.,0.)); #42150=DIRECTION('',(1.,0.,0.)); #42151=DIRECTION('',(0.,1.,0.)); #42152=DIRECTION('center_axis',(0.,0.,-1.)); #42153=DIRECTION('ref_axis',(-1.,0.,0.)); #42154=DIRECTION('',(0.,-1.,0.)); #42155=DIRECTION('',(-1.,0.,0.)); #42156=DIRECTION('',(0.,1.,0.)); #42157=DIRECTION('',(-1.,0.,0.)); #42158=DIRECTION('',(1.,0.,0.)); #42159=DIRECTION('',(0.,1.,0.)); #42160=DIRECTION('',(1.,0.,0.)); #42161=DIRECTION('',(0.,1.,0.)); #42162=DIRECTION('center_axis',(0.,0.,-1.)); #42163=DIRECTION('ref_axis',(-1.,0.,0.)); #42164=DIRECTION('',(0.,-1.,0.)); #42165=DIRECTION('',(-1.,0.,0.)); #42166=DIRECTION('',(0.,1.,0.)); #42167=DIRECTION('',(-1.,0.,0.)); #42168=DIRECTION('',(1.,0.,0.)); #42169=DIRECTION('',(0.,1.,0.)); #42170=DIRECTION('',(1.,0.,0.)); #42171=DIRECTION('',(0.,1.,0.)); #42172=DIRECTION('center_axis',(0.,-1.,0.)); #42173=DIRECTION('ref_axis',(1.,0.,0.)); #42174=DIRECTION('',(0.,0.,1.)); #42175=DIRECTION('',(0.,0.,1.)); #42176=DIRECTION('',(0.,0.,1.)); #42177=DIRECTION('',(0.,0.,1.)); #42178=DIRECTION('',(0.,0.,1.)); #42179=DIRECTION('',(0.,0.,1.)); #42180=DIRECTION('',(0.,0.,1.)); #42181=DIRECTION('',(0.,0.,1.)); #42182=DIRECTION('',(0.,0.,1.)); #42183=DIRECTION('',(0.,0.,1.)); #42184=DIRECTION('',(1.,0.,0.)); #42185=DIRECTION('center_axis',(0.,-0.980580675690959,0.196116135137992)); #42186=DIRECTION('ref_axis',(-1.,0.,0.)); #42187=DIRECTION('',(0.19245008973006,-0.19245008973006,-0.962250448649302)); #42188=DIRECTION('',(1.,0.,0.)); #42189=DIRECTION('',(-0.19245008973006,-0.19245008973006,-0.962250448649302)); #42190=DIRECTION('center_axis',(-0.980580675690959,0.,0.196116135137992)); #42191=DIRECTION('ref_axis',(0.,-1.,0.)); #42192=DIRECTION('',(0.,-1.,0.)); #42193=DIRECTION('',(-0.19245008973006,0.19245008973006,-0.962250448649302)); #42194=DIRECTION('',(0.,-1.,0.)); #42195=DIRECTION('center_axis',(-1.,0.,0.)); #42196=DIRECTION('ref_axis',(0.,-1.,0.)); #42197=DIRECTION('',(0.,0.,1.)); #42198=DIRECTION('center_axis',(0.,1.,0.)); #42199=DIRECTION('ref_axis',(-1.,0.,0.)); #42200=DIRECTION('',(0.,0.,1.)); #42201=DIRECTION('',(-1.,0.,0.)); #42202=DIRECTION('center_axis',(0.,0.980580675690959,0.196116135137992)); #42203=DIRECTION('ref_axis',(-1.,0.,0.)); #42204=DIRECTION('',(0.19245008973006,0.19245008973006,-0.962250448649302)); #42205=DIRECTION('',(-1.,0.,0.)); #42206=DIRECTION('center_axis',(0.,0.,1.)); #42207=DIRECTION('ref_axis',(-1.,0.,0.)); #42208=DIRECTION('',(0.,1.,0.)); #42209=DIRECTION('center_axis',(0.980580675690959,0.,0.196116135137992)); #42210=DIRECTION('ref_axis',(0.,-1.,0.)); #42211=DIRECTION('',(0.,1.,0.)); #42212=DIRECTION('center_axis',(1.,0.,0.)); #42213=DIRECTION('ref_axis',(0.,1.,0.)); #42214=DIRECTION('center_axis',(1.,0.,0.)); #42215=DIRECTION('ref_axis',(0.,1.,0.)); #42216=DIRECTION('',(0.,0.,-1.)); #42217=DIRECTION('',(0.,0.,-1.)); #42218=DIRECTION('center_axis',(0.,1.,0.)); #42219=DIRECTION('ref_axis',(-1.,0.,0.)); #42220=DIRECTION('',(0.,0.,-1.)); #42221=DIRECTION('center_axis',(-1.,0.,0.)); #42222=DIRECTION('ref_axis',(0.,-1.,0.)); #42223=DIRECTION('',(0.,0.,-1.)); #42224=DIRECTION('center_axis',(0.,-1.,0.)); #42225=DIRECTION('ref_axis',(1.,0.,0.)); #42226=DIRECTION('center_axis',(1.,0.,0.)); #42227=DIRECTION('ref_axis',(0.,1.,0.)); #42228=DIRECTION('',(0.,0.,-1.)); #42229=DIRECTION('',(0.,0.,-1.)); #42230=DIRECTION('center_axis',(0.,1.,0.)); #42231=DIRECTION('ref_axis',(-1.,0.,0.)); #42232=DIRECTION('',(0.,0.,-1.)); #42233=DIRECTION('center_axis',(-1.,0.,0.)); #42234=DIRECTION('ref_axis',(0.,-1.,0.)); #42235=DIRECTION('',(0.,0.,-1.)); #42236=DIRECTION('center_axis',(0.,-1.,0.)); #42237=DIRECTION('ref_axis',(1.,0.,0.)); #42238=DIRECTION('center_axis',(1.,0.,0.)); #42239=DIRECTION('ref_axis',(0.,1.,0.)); #42240=DIRECTION('',(0.,0.,-1.)); #42241=DIRECTION('',(0.,0.,-1.)); #42242=DIRECTION('center_axis',(0.,1.,0.)); #42243=DIRECTION('ref_axis',(-1.,0.,0.)); #42244=DIRECTION('',(0.,0.,-1.)); #42245=DIRECTION('center_axis',(-1.,0.,0.)); #42246=DIRECTION('ref_axis',(0.,-1.,0.)); #42247=DIRECTION('',(0.,0.,-1.)); #42248=DIRECTION('center_axis',(0.,-1.,0.)); #42249=DIRECTION('ref_axis',(1.,0.,0.)); #42250=DIRECTION('center_axis',(1.,0.,0.)); #42251=DIRECTION('ref_axis',(0.,1.,0.)); #42252=DIRECTION('',(0.,0.,-1.)); #42253=DIRECTION('',(0.,0.,-1.)); #42254=DIRECTION('center_axis',(0.,1.,0.)); #42255=DIRECTION('ref_axis',(-1.,0.,0.)); #42256=DIRECTION('',(0.,0.,-1.)); #42257=DIRECTION('center_axis',(-1.,0.,0.)); #42258=DIRECTION('ref_axis',(0.,-1.,0.)); #42259=DIRECTION('',(0.,0.,-1.)); #42260=DIRECTION('center_axis',(0.,-1.,0.)); #42261=DIRECTION('ref_axis',(1.,0.,0.)); #42262=DIRECTION('center_axis',(0.,1.,0.)); #42263=DIRECTION('ref_axis',(0.,0.,1.)); #42264=DIRECTION('',(0.,0.,1.)); #42265=DIRECTION('',(1.,0.,0.)); #42266=DIRECTION('center_axis',(1.,0.,0.)); #42267=DIRECTION('ref_axis',(0.,0.,-1.)); #42268=DIRECTION('center_axis',(1.,0.,0.)); #42269=DIRECTION('ref_axis',(0.,0.707106781186548,-0.707106781186548)); #42270=DIRECTION('',(1.,0.,0.)); #42271=DIRECTION('center_axis',(0.,0.707106781186548,-0.707106781186548)); #42272=DIRECTION('ref_axis',(0.,0.707106781186548,0.707106781186548)); #42273=DIRECTION('',(0.,0.707106781186548,0.707106781186548)); #42274=DIRECTION('',(1.,0.,0.)); #42275=DIRECTION('center_axis',(1.,0.,0.)); #42276=DIRECTION('ref_axis',(0.,0.,-1.)); #42277=DIRECTION('center_axis',(-1.,0.,0.)); #42278=DIRECTION('ref_axis',(0.,-0.819152044289016,-0.573576436351011)); #42279=DIRECTION('',(1.,0.,0.)); #42280=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #42281=DIRECTION('ref_axis',(0.,-0.573576436351011,0.819152044289016)); #42282=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #42283=DIRECTION('',(1.,0.,0.)); #42284=DIRECTION('center_axis',(1.,0.,0.)); #42285=DIRECTION('ref_axis',(0.,0.,-1.)); #42286=DIRECTION('center_axis',(1.,0.,0.)); #42287=DIRECTION('ref_axis',(0.,1.,0.)); #42288=DIRECTION('',(1.,0.,0.)); #42289=DIRECTION('center_axis',(0.,1.,0.)); #42290=DIRECTION('ref_axis',(0.,0.,1.)); #42291=DIRECTION('',(0.,0.,1.)); #42292=DIRECTION('',(1.,0.,0.)); #42293=DIRECTION('center_axis',(1.,0.,0.)); #42294=DIRECTION('ref_axis',(0.,0.,-1.)); #42295=DIRECTION('center_axis',(1.,0.,0.)); #42296=DIRECTION('ref_axis',(0.,0.,-1.)); #42297=DIRECTION('',(1.,0.,0.)); #42298=DIRECTION('center_axis',(0.,0.,-1.)); #42299=DIRECTION('ref_axis',(0.,1.,0.)); #42300=DIRECTION('',(0.,1.,0.)); #42301=DIRECTION('',(0.,1.,0.)); #42302=DIRECTION('',(0.447213595499958,0.894427190999916,0.)); #42303=DIRECTION('',(0.,1.,0.)); #42304=DIRECTION('',(1.,0.,0.)); #42305=DIRECTION('',(0.,1.,0.)); #42306=DIRECTION('center_axis',(1.,0.,0.)); #42307=DIRECTION('ref_axis',(0.,-1.,0.)); #42308=DIRECTION('',(0.,0.,-1.)); #42309=DIRECTION('center_axis',(0.,-1.,0.)); #42310=DIRECTION('ref_axis',(0.,0.,-1.)); #42311=DIRECTION('',(0.,0.,-1.)); #42312=DIRECTION('center_axis',(-1.,0.,0.)); #42313=DIRECTION('ref_axis',(0.,1.,0.)); #42314=DIRECTION('',(0.,0.,1.)); #42315=DIRECTION('center_axis',(-0.894427190999916,0.447213595499958,0.)); #42316=DIRECTION('ref_axis',(0.447213595499958,0.894427190999916,0.)); #42317=DIRECTION('',(0.,0.,-1.)); #42318=DIRECTION('center_axis',(1.,0.,0.)); #42319=DIRECTION('ref_axis',(0.,0.,-1.)); #42320=DIRECTION('center_axis',(1.,0.,0.)); #42321=DIRECTION('ref_axis',(0.,0.,-1.)); #42322=DIRECTION('',(0.,0.,-1.)); #42323=DIRECTION('center_axis',(-1.,0.,0.)); #42324=DIRECTION('ref_axis',(0.,1.,2.368475785867E-14)); #42325=DIRECTION('',(0.,-0.707106781186548,-0.707106781186548)); #42326=DIRECTION('center_axis',(1.,0.,0.)); #42327=DIRECTION('ref_axis',(0.,-0.707106781186048,0.707106781187047)); #42328=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #42329=DIRECTION('center_axis',(-1.,0.,0.)); #42330=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #42331=DIRECTION('',(0.,0.,-1.)); #42332=DIRECTION('center_axis',(-1.,0.,0.)); #42333=DIRECTION('ref_axis',(0.,1.,0.)); #42334=DIRECTION('center_axis',(1.,0.,0.)); #42335=DIRECTION('ref_axis',(0.,0.,-1.)); #42336=DIRECTION('',(1.,0.,0.)); #42337=DIRECTION('center_axis',(0.,-1.,0.)); #42338=DIRECTION('ref_axis',(0.,0.,-1.)); #42339=DIRECTION('',(1.,0.,0.)); #42340=DIRECTION('center_axis',(1.,0.,0.)); #42341=DIRECTION('ref_axis',(0.,0.,-1.)); #42342=DIRECTION('',(1.,0.,0.)); #42343=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #42344=DIRECTION('ref_axis',(0.,0.573576436351011,-0.819152044289016)); #42345=DIRECTION('',(1.,0.,0.)); #42346=DIRECTION('center_axis',(1.,0.,0.)); #42347=DIRECTION('ref_axis',(0.,0.,-1.)); #42348=DIRECTION('',(1.,0.,0.)); #42349=DIRECTION('center_axis',(0.,-0.707106781186548,0.707106781186548)); #42350=DIRECTION('ref_axis',(0.,-0.707106781186548,-0.707106781186548)); #42351=DIRECTION('',(1.,0.,0.)); #42352=DIRECTION('center_axis',(1.,0.,0.)); #42353=DIRECTION('ref_axis',(0.,0.,-1.)); #42354=DIRECTION('',(1.,0.,0.)); #42355=DIRECTION('center_axis',(0.,-1.,0.)); #42356=DIRECTION('ref_axis',(0.,0.,-1.)); #42357=DIRECTION('center_axis',(1.,0.,0.)); #42358=DIRECTION('ref_axis',(0.,0.,-1.)); #42359=DIRECTION('',(0.,0.,1.)); #42360=DIRECTION('center_axis',(1.,0.,0.)); #42361=DIRECTION('ref_axis',(0.,0.707106781186548,-0.707106781186548)); #42362=DIRECTION('',(0.,0.707106781186548,0.707106781186548)); #42363=DIRECTION('center_axis',(-1.,0.,0.)); #42364=DIRECTION('ref_axis',(0.,-0.819152044289016,-0.573576436351011)); #42365=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #42366=DIRECTION('center_axis',(1.,0.,0.)); #42367=DIRECTION('ref_axis',(0.,1.,0.)); #42368=DIRECTION('',(0.,0.,1.)); #42369=DIRECTION('center_axis',(1.,0.,0.)); #42370=DIRECTION('ref_axis',(0.,0.,-1.)); #42371=DIRECTION('',(0.,1.,0.)); #42372=DIRECTION('',(0.,-1.,0.)); #42373=DIRECTION('center_axis',(-1.,0.,0.)); #42374=DIRECTION('ref_axis',(0.,1.,0.)); #42375=DIRECTION('',(0.,0.,-1.)); #42376=DIRECTION('center_axis',(-1.,0.,0.)); #42377=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #42378=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #42379=DIRECTION('center_axis',(1.,0.,0.)); #42380=DIRECTION('ref_axis',(0.,-0.707106781186048,0.707106781187047)); #42381=DIRECTION('',(0.,-0.707106781186548,-0.707106781186548)); #42382=DIRECTION('center_axis',(-1.,0.,0.)); #42383=DIRECTION('ref_axis',(0.,1.,2.368475785867E-14)); #42384=DIRECTION('',(0.,0.,-1.)); #42385=DIRECTION('center_axis',(0.,-1.,0.)); #42386=DIRECTION('ref_axis',(0.,0.,-1.)); #42387=DIRECTION('',(1.,0.,0.)); #42388=DIRECTION('',(0.,0.,-1.)); #42389=DIRECTION('center_axis',(1.,0.,0.)); #42390=DIRECTION('ref_axis',(0.,0.,-1.)); #42391=DIRECTION('center_axis',(-1.,0.,0.)); #42392=DIRECTION('ref_axis',(0.,1.,2.368475785867E-14)); #42393=DIRECTION('',(0.,-0.707106781186548,-0.707106781186548)); #42394=DIRECTION('center_axis',(1.,0.,0.)); #42395=DIRECTION('ref_axis',(0.,-0.707106781186048,0.707106781187047)); #42396=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #42397=DIRECTION('center_axis',(-1.,0.,0.)); #42398=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #42399=DIRECTION('',(0.,0.,-1.)); #42400=DIRECTION('center_axis',(-1.,0.,0.)); #42401=DIRECTION('ref_axis',(0.,1.,0.)); #42402=DIRECTION('',(0.,-1.,0.)); #42403=DIRECTION('',(0.,1.,0.)); #42404=DIRECTION('center_axis',(1.,0.,0.)); #42405=DIRECTION('ref_axis',(0.,0.,-1.)); #42406=DIRECTION('',(0.,0.,1.)); #42407=DIRECTION('center_axis',(1.,0.,0.)); #42408=DIRECTION('ref_axis',(0.,1.,0.)); #42409=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #42410=DIRECTION('center_axis',(-1.,0.,0.)); #42411=DIRECTION('ref_axis',(0.,-0.819152044289016,-0.573576436351011)); #42412=DIRECTION('',(0.,0.707106781186548,0.707106781186548)); #42413=DIRECTION('center_axis',(1.,0.,0.)); #42414=DIRECTION('ref_axis',(0.,0.707106781186548,-0.707106781186548)); #42415=DIRECTION('',(0.,0.,1.)); #42416=DIRECTION('center_axis',(0.,1.,0.)); #42417=DIRECTION('ref_axis',(0.,0.,1.)); #42418=DIRECTION('',(1.,0.,0.)); #42419=DIRECTION('center_axis',(1.,0.,0.)); #42420=DIRECTION('ref_axis',(0.,0.,-1.)); #42421=DIRECTION('',(1.,0.,0.)); #42422=DIRECTION('center_axis',(0.,0.707106781186548,-0.707106781186548)); #42423=DIRECTION('ref_axis',(0.,0.707106781186548,0.707106781186548)); #42424=DIRECTION('',(1.,0.,0.)); #42425=DIRECTION('center_axis',(1.,0.,0.)); #42426=DIRECTION('ref_axis',(0.,0.,-1.)); #42427=DIRECTION('',(1.,0.,0.)); #42428=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #42429=DIRECTION('ref_axis',(0.,-0.573576436351011,0.819152044289016)); #42430=DIRECTION('',(1.,0.,0.)); #42431=DIRECTION('center_axis',(1.,0.,0.)); #42432=DIRECTION('ref_axis',(0.,0.,-1.)); #42433=DIRECTION('',(1.,0.,0.)); #42434=DIRECTION('center_axis',(0.,1.,0.)); #42435=DIRECTION('ref_axis',(0.,0.,1.)); #42436=DIRECTION('',(1.,0.,0.)); #42437=DIRECTION('center_axis',(1.,0.,0.)); #42438=DIRECTION('ref_axis',(0.,0.,-1.)); #42439=DIRECTION('',(1.,0.,0.)); #42440=DIRECTION('center_axis',(0.,0.,-1.)); #42441=DIRECTION('ref_axis',(0.,1.,0.)); #42442=DIRECTION('',(0.,1.,0.)); #42443=DIRECTION('',(1.,0.,0.)); #42444=DIRECTION('',(1.,0.,0.)); #42445=DIRECTION('',(0.,1.,0.)); #42446=DIRECTION('',(0.447213595499958,0.894427190999916,0.)); #42447=DIRECTION('',(0.,1.,0.)); #42448=DIRECTION('',(1.,0.,0.)); #42449=DIRECTION('',(0.,1.,0.)); #42450=DIRECTION('',(0.447213595499958,-0.894427190999916,0.)); #42451=DIRECTION('center_axis',(0.894427190999916,0.447213595499958,0.)); #42452=DIRECTION('ref_axis',(0.447213595499958,-0.894427190999916,0.)); #42453=DIRECTION('',(0.447213595499958,-0.894427190999916,0.)); #42454=DIRECTION('',(0.,0.,-1.)); #42455=DIRECTION('',(0.,0.,1.)); #42456=DIRECTION('center_axis',(0.,0.,1.)); #42457=DIRECTION('ref_axis',(0.,-1.,0.)); #42458=DIRECTION('',(0.,1.,0.)); #42459=DIRECTION('',(1.,0.,0.)); #42460=DIRECTION('',(0.,1.,0.)); #42461=DIRECTION('',(0.447213595499958,0.894427190999916,0.)); #42462=DIRECTION('',(0.,-1.,0.)); #42463=DIRECTION('',(1.,0.,1.7763568394E-14)); #42464=DIRECTION('',(1.,0.,0.)); #42465=DIRECTION('',(1.,0.,-1.7763568394E-14)); #42466=DIRECTION('',(0.,-1.,0.)); #42467=DIRECTION('center_axis',(1.,0.,0.)); #42468=DIRECTION('ref_axis',(0.,0.,-1.)); #42469=DIRECTION('',(0.,0.,-1.)); #42470=DIRECTION('center_axis',(0.,-1.,0.)); #42471=DIRECTION('ref_axis',(0.,0.,-1.)); #42472=DIRECTION('',(0.,0.,-1.)); #42473=DIRECTION('center_axis',(0.,-1.,0.)); #42474=DIRECTION('ref_axis',(0.,0.,-1.)); #42475=DIRECTION('',(0.,0.,-1.)); #42476=DIRECTION('',(0.,0.,-1.)); #42477=DIRECTION('center_axis',(-1.,0.,0.)); #42478=DIRECTION('ref_axis',(0.,0.,-1.)); #42479=DIRECTION('',(0.,1.,0.)); #42480=DIRECTION('',(0.,-1.,0.)); #42481=DIRECTION('center_axis',(0.707106781186548,0.,-0.707106781186548)); #42482=DIRECTION('ref_axis',(0.,-1.,0.)); #42483=DIRECTION('',(0.,-1.,0.)); #42484=DIRECTION('center_axis',(0.,0.,1.)); #42485=DIRECTION('ref_axis',(-1.,0.,0.)); #42486=DIRECTION('',(0.,-1.,0.)); #42487=DIRECTION('center_axis',(-0.707106781186548,0.,-0.707106781186548)); #42488=DIRECTION('ref_axis',(0.,-1.,0.)); #42489=DIRECTION('',(0.,-1.,0.)); #42490=DIRECTION('center_axis',(1.,0.,0.)); #42491=DIRECTION('ref_axis',(0.,0.,1.)); #42492=DIRECTION('',(0.,0.,-1.)); #42493=DIRECTION('',(0.,1.,0.)); #42494=DIRECTION('center_axis',(0.,-1.,0.)); #42495=DIRECTION('ref_axis',(0.,0.,-1.)); #42496=DIRECTION('',(1.,0.,-1.7763568394E-14)); #42497=DIRECTION('',(0.,0.,-1.)); #42498=DIRECTION('',(1.,0.,0.)); #42499=DIRECTION('',(0.,0.,-1.)); #42500=DIRECTION('center_axis',(0.,-1.,0.)); #42501=DIRECTION('ref_axis',(0.,0.,-1.)); #42502=DIRECTION('',(1.,0.,0.)); #42503=DIRECTION('',(1.,0.,1.7763568394E-14)); #42504=DIRECTION('',(0.,0.,-1.)); #42505=DIRECTION('center_axis',(1.,0.,0.)); #42506=DIRECTION('ref_axis',(0.,0.,-1.)); #42507=DIRECTION('',(0.,0.,-1.)); #42508=DIRECTION('',(0.,-1.,0.)); #42509=DIRECTION('',(0.,1.,0.)); #42510=DIRECTION('center_axis',(0.894427190999916,0.447213595499958,0.)); #42511=DIRECTION('ref_axis',(0.447213595499958,-0.894427190999916,0.)); #42512=DIRECTION('',(0.447213595499958,-0.894427190999916,0.)); #42513=DIRECTION('',(0.447213595499958,-0.894427190999916,0.)); #42514=DIRECTION('',(0.,0.,1.)); #42515=DIRECTION('center_axis',(0.,0.,1.)); #42516=DIRECTION('ref_axis',(0.,-1.,0.)); #42517=DIRECTION('',(0.,1.,0.)); #42518=DIRECTION('',(1.,0.,0.)); #42519=DIRECTION('',(0.,1.,0.)); #42520=DIRECTION('',(0.447213595499958,0.894427190999916,0.)); #42521=DIRECTION('',(0.,-1.,0.)); #42522=DIRECTION('',(0.,-1.,0.)); #42523=DIRECTION('',(1.,0.,0.)); #42524=DIRECTION('',(0.,-1.,0.)); #42525=DIRECTION('center_axis',(1.,0.,0.)); #42526=DIRECTION('ref_axis',(0.,0.,-1.)); #42527=DIRECTION('',(0.,0.,1.)); #42528=DIRECTION('center_axis',(1.,0.,0.)); #42529=DIRECTION('ref_axis',(0.,0.707106781186548,-0.707106781186548)); #42530=DIRECTION('',(0.,0.707106781186548,0.707106781186548)); #42531=DIRECTION('center_axis',(-1.,0.,0.)); #42532=DIRECTION('ref_axis',(0.,-0.819152044289016,-0.573576436351011)); #42533=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #42534=DIRECTION('center_axis',(1.,0.,0.)); #42535=DIRECTION('ref_axis',(0.,1.,0.)); #42536=DIRECTION('',(0.,0.,1.)); #42537=DIRECTION('center_axis',(1.,0.,0.)); #42538=DIRECTION('ref_axis',(0.,0.,-1.)); #42539=DIRECTION('',(0.,1.,0.)); #42540=DIRECTION('center_axis',(-1.,0.,0.)); #42541=DIRECTION('ref_axis',(0.,1.,0.)); #42542=DIRECTION('',(0.,0.,-1.)); #42543=DIRECTION('center_axis',(-1.,0.,0.)); #42544=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #42545=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #42546=DIRECTION('center_axis',(1.,0.,0.)); #42547=DIRECTION('ref_axis',(0.,-0.707106781186048,0.707106781187047)); #42548=DIRECTION('',(0.,-0.707106781186548,-0.707106781186548)); #42549=DIRECTION('center_axis',(-1.,0.,0.)); #42550=DIRECTION('ref_axis',(0.,1.,2.368475785867E-14)); #42551=DIRECTION('',(0.,0.,-1.)); #42552=DIRECTION('center_axis',(0.,-1.,0.)); #42553=DIRECTION('ref_axis',(0.,0.,-1.)); #42554=DIRECTION('',(1.,0.,0.)); #42555=DIRECTION('',(0.,0.,-1.)); #42556=DIRECTION('center_axis',(1.,0.,0.)); #42557=DIRECTION('ref_axis',(0.,0.,-1.)); #42558=DIRECTION('center_axis',(-1.,0.,0.)); #42559=DIRECTION('ref_axis',(0.,1.,2.368475785867E-14)); #42560=DIRECTION('',(0.,-0.707106781186548,-0.707106781186548)); #42561=DIRECTION('center_axis',(1.,0.,0.)); #42562=DIRECTION('ref_axis',(0.,-0.707106781186048,0.707106781187047)); #42563=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #42564=DIRECTION('center_axis',(-1.,0.,0.)); #42565=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #42566=DIRECTION('',(0.,0.,-1.)); #42567=DIRECTION('center_axis',(-1.,0.,0.)); #42568=DIRECTION('ref_axis',(0.,1.,0.)); #42569=DIRECTION('',(0.,1.,0.)); #42570=DIRECTION('center_axis',(1.,0.,0.)); #42571=DIRECTION('ref_axis',(0.,0.,-1.)); #42572=DIRECTION('',(0.,0.,1.)); #42573=DIRECTION('center_axis',(1.,0.,0.)); #42574=DIRECTION('ref_axis',(0.,1.,0.)); #42575=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #42576=DIRECTION('center_axis',(-1.,0.,0.)); #42577=DIRECTION('ref_axis',(0.,-0.819152044289016,-0.573576436351011)); #42578=DIRECTION('',(0.,0.707106781186548,0.707106781186548)); #42579=DIRECTION('center_axis',(1.,0.,0.)); #42580=DIRECTION('ref_axis',(0.,0.707106781186548,-0.707106781186548)); #42581=DIRECTION('',(0.,0.,1.)); #42582=DIRECTION('center_axis',(0.,1.,0.)); #42583=DIRECTION('ref_axis',(0.,0.,1.)); #42584=DIRECTION('',(1.,0.,0.)); #42585=DIRECTION('center_axis',(1.,0.,0.)); #42586=DIRECTION('ref_axis',(0.,0.,-1.)); #42587=DIRECTION('',(1.,0.,0.)); #42588=DIRECTION('center_axis',(0.,0.707106781186548,-0.707106781186548)); #42589=DIRECTION('ref_axis',(0.,0.707106781186548,0.707106781186548)); #42590=DIRECTION('',(1.,0.,0.)); #42591=DIRECTION('center_axis',(1.,0.,0.)); #42592=DIRECTION('ref_axis',(0.,0.,-1.)); #42593=DIRECTION('',(1.,0.,0.)); #42594=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #42595=DIRECTION('ref_axis',(0.,-0.573576436351011,0.819152044289016)); #42596=DIRECTION('',(1.,0.,0.)); #42597=DIRECTION('center_axis',(1.,0.,0.)); #42598=DIRECTION('ref_axis',(0.,0.,-1.)); #42599=DIRECTION('',(1.,0.,0.)); #42600=DIRECTION('center_axis',(0.,1.,0.)); #42601=DIRECTION('ref_axis',(0.,0.,1.)); #42602=DIRECTION('',(1.,0.,0.)); #42603=DIRECTION('center_axis',(1.,0.,0.)); #42604=DIRECTION('ref_axis',(0.,0.,-1.)); #42605=DIRECTION('',(1.,0.,0.)); #42606=DIRECTION('center_axis',(0.,0.,-1.)); #42607=DIRECTION('ref_axis',(0.,1.,0.)); #42608=DIRECTION('',(0.,1.,0.)); #42609=DIRECTION('',(0.447213595499958,0.894427190999916,0.)); #42610=DIRECTION('',(0.,1.,0.)); #42611=DIRECTION('',(1.,0.,0.)); #42612=DIRECTION('',(0.,1.,0.)); #42613=DIRECTION('center_axis',(1.,0.,0.)); #42614=DIRECTION('ref_axis',(0.,-1.,0.)); #42615=DIRECTION('',(0.,0.,-1.)); #42616=DIRECTION('center_axis',(0.,-1.,0.)); #42617=DIRECTION('ref_axis',(0.,0.,-1.)); #42618=DIRECTION('',(0.,0.,-1.)); #42619=DIRECTION('center_axis',(-1.,0.,0.)); #42620=DIRECTION('ref_axis',(0.,1.,0.)); #42621=DIRECTION('',(0.,0.,1.)); #42622=DIRECTION('center_axis',(-0.894427190999916,0.447213595499958,0.)); #42623=DIRECTION('ref_axis',(0.447213595499958,0.894427190999916,0.)); #42624=DIRECTION('',(0.,0.,-1.)); #42625=DIRECTION('center_axis',(1.,0.,0.)); #42626=DIRECTION('ref_axis',(0.,0.,-1.)); #42627=DIRECTION('center_axis',(1.,0.,0.)); #42628=DIRECTION('ref_axis',(0.,0.,-1.)); #42629=DIRECTION('',(1.,0.,0.)); #42630=DIRECTION('center_axis',(0.,-1.,0.)); #42631=DIRECTION('ref_axis',(0.,0.,-1.)); #42632=DIRECTION('',(1.,0.,0.)); #42633=DIRECTION('center_axis',(1.,0.,0.)); #42634=DIRECTION('ref_axis',(0.,0.,-1.)); #42635=DIRECTION('',(1.,0.,0.)); #42636=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #42637=DIRECTION('ref_axis',(0.,0.573576436351011,-0.819152044289016)); #42638=DIRECTION('',(1.,0.,0.)); #42639=DIRECTION('center_axis',(1.,0.,0.)); #42640=DIRECTION('ref_axis',(0.,0.,-1.)); #42641=DIRECTION('',(1.,0.,0.)); #42642=DIRECTION('center_axis',(0.,-0.707106781186548,0.707106781186548)); #42643=DIRECTION('ref_axis',(0.,-0.707106781186548,-0.707106781186548)); #42644=DIRECTION('',(1.,0.,0.)); #42645=DIRECTION('center_axis',(1.,0.,0.)); #42646=DIRECTION('ref_axis',(0.,0.,-1.)); #42647=DIRECTION('center_axis',(-1.,0.,0.)); #42648=DIRECTION('ref_axis',(0.,0.,-1.)); #42649=DIRECTION('',(0.,1.,0.)); #42650=DIRECTION('',(0.,-1.,0.)); #42651=DIRECTION('center_axis',(0.707106781186548,0.,-0.707106781186548)); #42652=DIRECTION('ref_axis',(0.,-1.,0.)); #42653=DIRECTION('',(0.,-1.,0.)); #42654=DIRECTION('center_axis',(0.,0.,1.)); #42655=DIRECTION('ref_axis',(-1.,0.,0.)); #42656=DIRECTION('',(0.,-1.,0.)); #42657=DIRECTION('center_axis',(-0.707106781186548,0.,-0.707106781186548)); #42658=DIRECTION('ref_axis',(0.,-1.,0.)); #42659=DIRECTION('',(0.,-1.,0.)); #42660=DIRECTION('center_axis',(1.,0.,0.)); #42661=DIRECTION('ref_axis',(0.,0.,1.)); #42662=DIRECTION('',(0.,0.,-1.)); #42663=DIRECTION('',(0.,1.,0.)); #42664=DIRECTION('center_axis',(0.,-1.,0.)); #42665=DIRECTION('ref_axis',(0.,0.,-1.)); #42666=DIRECTION('',(1.,0.,-1.7763568394E-14)); #42667=DIRECTION('',(0.,0.,-1.)); #42668=DIRECTION('',(1.,0.,0.)); #42669=DIRECTION('',(0.,0.,-1.)); #42670=DIRECTION('center_axis',(0.,-1.,0.)); #42671=DIRECTION('ref_axis',(0.,0.,-1.)); #42672=DIRECTION('',(1.,0.,0.)); #42673=DIRECTION('',(1.,0.,1.7763568394E-14)); #42674=DIRECTION('',(0.,0.,-1.)); #42675=DIRECTION('center_axis',(1.,0.,0.)); #42676=DIRECTION('ref_axis',(0.,0.,-1.)); #42677=DIRECTION('',(0.,0.,-1.)); #42678=DIRECTION('',(0.,-1.,0.)); #42679=DIRECTION('',(0.,1.,0.)); #42680=DIRECTION('center_axis',(0.894427190999916,0.447213595499958,0.)); #42681=DIRECTION('ref_axis',(0.447213595499958,-0.894427190999916,0.)); #42682=DIRECTION('',(0.447213595499958,-0.894427190999916,0.)); #42683=DIRECTION('',(0.447213595499958,-0.894427190999916,0.)); #42684=DIRECTION('',(0.,0.,1.)); #42685=DIRECTION('center_axis',(0.,0.,1.)); #42686=DIRECTION('ref_axis',(0.,-1.,0.)); #42687=DIRECTION('',(0.,1.,0.)); #42688=DIRECTION('',(1.,0.,0.)); #42689=DIRECTION('',(0.,1.,0.)); #42690=DIRECTION('',(0.447213595499958,0.894427190999916,0.)); #42691=DIRECTION('',(0.,-1.,0.)); #42692=DIRECTION('',(0.,-1.,0.)); #42693=DIRECTION('',(1.,0.,0.)); #42694=DIRECTION('',(0.,-1.,0.)); #42695=DIRECTION('center_axis',(1.,0.,0.)); #42696=DIRECTION('ref_axis',(0.,0.,-1.)); #42697=DIRECTION('',(0.,0.,1.)); #42698=DIRECTION('center_axis',(1.,0.,0.)); #42699=DIRECTION('ref_axis',(0.,0.707106781186548,-0.707106781186548)); #42700=DIRECTION('',(0.,0.707106781186548,0.707106781186548)); #42701=DIRECTION('center_axis',(-1.,0.,0.)); #42702=DIRECTION('ref_axis',(0.,-0.819152044289016,-0.573576436351011)); #42703=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #42704=DIRECTION('center_axis',(1.,0.,0.)); #42705=DIRECTION('ref_axis',(0.,1.,0.)); #42706=DIRECTION('',(0.,0.,1.)); #42707=DIRECTION('center_axis',(1.,0.,0.)); #42708=DIRECTION('ref_axis',(0.,0.,-1.)); #42709=DIRECTION('',(0.,1.,0.)); #42710=DIRECTION('center_axis',(-1.,0.,0.)); #42711=DIRECTION('ref_axis',(0.,1.,0.)); #42712=DIRECTION('',(0.,0.,-1.)); #42713=DIRECTION('center_axis',(-1.,0.,0.)); #42714=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #42715=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #42716=DIRECTION('center_axis',(1.,0.,0.)); #42717=DIRECTION('ref_axis',(0.,-0.707106781186048,0.707106781187047)); #42718=DIRECTION('',(0.,-0.707106781186548,-0.707106781186548)); #42719=DIRECTION('center_axis',(-1.,0.,0.)); #42720=DIRECTION('ref_axis',(0.,1.,2.368475785867E-14)); #42721=DIRECTION('',(0.,0.,-1.)); #42722=DIRECTION('center_axis',(0.,-1.,0.)); #42723=DIRECTION('ref_axis',(0.,0.,-1.)); #42724=DIRECTION('',(1.,0.,0.)); #42725=DIRECTION('',(0.,0.,-1.)); #42726=DIRECTION('center_axis',(1.,0.,0.)); #42727=DIRECTION('ref_axis',(0.,0.,-1.)); #42728=DIRECTION('center_axis',(-1.,0.,0.)); #42729=DIRECTION('ref_axis',(0.,1.,2.368475785867E-14)); #42730=DIRECTION('',(0.,-0.707106781186548,-0.707106781186548)); #42731=DIRECTION('center_axis',(1.,0.,0.)); #42732=DIRECTION('ref_axis',(0.,-0.707106781186048,0.707106781187047)); #42733=DIRECTION('',(0.,0.573576436351011,-0.819152044289016)); #42734=DIRECTION('center_axis',(-1.,0.,0.)); #42735=DIRECTION('ref_axis',(0.,0.819152044289016,0.573576436351011)); #42736=DIRECTION('',(0.,0.,-1.)); #42737=DIRECTION('center_axis',(-1.,0.,0.)); #42738=DIRECTION('ref_axis',(0.,1.,0.)); #42739=DIRECTION('',(0.,1.,0.)); #42740=DIRECTION('center_axis',(1.,0.,0.)); #42741=DIRECTION('ref_axis',(0.,0.,-1.)); #42742=DIRECTION('',(0.,0.,1.)); #42743=DIRECTION('center_axis',(1.,0.,0.)); #42744=DIRECTION('ref_axis',(0.,1.,0.)); #42745=DIRECTION('',(0.,-0.573576436351011,0.819152044289016)); #42746=DIRECTION('center_axis',(-1.,0.,0.)); #42747=DIRECTION('ref_axis',(0.,-0.819152044289016,-0.573576436351011)); #42748=DIRECTION('',(0.,0.707106781186548,0.707106781186548)); #42749=DIRECTION('center_axis',(1.,0.,0.)); #42750=DIRECTION('ref_axis',(0.,0.707106781186548,-0.707106781186548)); #42751=DIRECTION('',(0.,0.,1.)); #42752=DIRECTION('center_axis',(0.,1.,0.)); #42753=DIRECTION('ref_axis',(0.,0.,1.)); #42754=DIRECTION('',(1.,0.,0.)); #42755=DIRECTION('center_axis',(1.,0.,0.)); #42756=DIRECTION('ref_axis',(0.,0.,-1.)); #42757=DIRECTION('',(1.,0.,0.)); #42758=DIRECTION('center_axis',(0.,0.707106781186548,-0.707106781186548)); #42759=DIRECTION('ref_axis',(0.,0.707106781186548,0.707106781186548)); #42760=DIRECTION('',(1.,0.,0.)); #42761=DIRECTION('center_axis',(1.,0.,0.)); #42762=DIRECTION('ref_axis',(0.,0.,-1.)); #42763=DIRECTION('',(1.,0.,0.)); #42764=DIRECTION('center_axis',(0.,0.819152044289016,0.573576436351011)); #42765=DIRECTION('ref_axis',(0.,-0.573576436351011,0.819152044289016)); #42766=DIRECTION('',(1.,0.,0.)); #42767=DIRECTION('center_axis',(1.,0.,0.)); #42768=DIRECTION('ref_axis',(0.,0.,-1.)); #42769=DIRECTION('',(1.,0.,0.)); #42770=DIRECTION('center_axis',(0.,1.,0.)); #42771=DIRECTION('ref_axis',(0.,0.,1.)); #42772=DIRECTION('',(1.,0.,0.)); #42773=DIRECTION('center_axis',(1.,0.,0.)); #42774=DIRECTION('ref_axis',(0.,0.,-1.)); #42775=DIRECTION('',(1.,0.,0.)); #42776=DIRECTION('center_axis',(0.,0.,-1.)); #42777=DIRECTION('ref_axis',(0.,1.,0.)); #42778=DIRECTION('',(0.,1.,0.)); #42779=DIRECTION('',(0.447213595499958,0.894427190999916,0.)); #42780=DIRECTION('',(0.,1.,0.)); #42781=DIRECTION('',(1.,0.,0.)); #42782=DIRECTION('',(0.,1.,0.)); #42783=DIRECTION('center_axis',(1.,0.,0.)); #42784=DIRECTION('ref_axis',(0.,-1.,0.)); #42785=DIRECTION('',(0.,0.,-1.)); #42786=DIRECTION('center_axis',(0.,-1.,0.)); #42787=DIRECTION('ref_axis',(0.,0.,-1.)); #42788=DIRECTION('',(0.,0.,-1.)); #42789=DIRECTION('center_axis',(-1.,0.,0.)); #42790=DIRECTION('ref_axis',(0.,1.,0.)); #42791=DIRECTION('',(0.,0.,1.)); #42792=DIRECTION('center_axis',(-0.894427190999916,0.447213595499958,0.)); #42793=DIRECTION('ref_axis',(0.447213595499958,0.894427190999916,0.)); #42794=DIRECTION('',(0.,0.,-1.)); #42795=DIRECTION('center_axis',(1.,0.,0.)); #42796=DIRECTION('ref_axis',(0.,0.,-1.)); #42797=DIRECTION('center_axis',(1.,0.,0.)); #42798=DIRECTION('ref_axis',(0.,0.,-1.)); #42799=DIRECTION('',(1.,0.,0.)); #42800=DIRECTION('center_axis',(0.,-1.,0.)); #42801=DIRECTION('ref_axis',(0.,0.,-1.)); #42802=DIRECTION('',(1.,0.,0.)); #42803=DIRECTION('center_axis',(1.,0.,0.)); #42804=DIRECTION('ref_axis',(0.,0.,-1.)); #42805=DIRECTION('',(1.,0.,0.)); #42806=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #42807=DIRECTION('ref_axis',(0.,0.573576436351011,-0.819152044289016)); #42808=DIRECTION('',(1.,0.,0.)); #42809=DIRECTION('center_axis',(1.,0.,0.)); #42810=DIRECTION('ref_axis',(0.,0.,-1.)); #42811=DIRECTION('',(1.,0.,0.)); #42812=DIRECTION('center_axis',(0.,-0.707106781186548,0.707106781186548)); #42813=DIRECTION('ref_axis',(0.,-0.707106781186548,-0.707106781186548)); #42814=DIRECTION('',(1.,0.,0.)); #42815=DIRECTION('center_axis',(1.,0.,0.)); #42816=DIRECTION('ref_axis',(0.,0.,-1.)); #42817=DIRECTION('center_axis',(-1.,0.,0.)); #42818=DIRECTION('ref_axis',(0.,0.,-1.)); #42819=DIRECTION('',(0.,1.,0.)); #42820=DIRECTION('',(0.,-1.,0.)); #42821=DIRECTION('center_axis',(0.707106781186548,0.,-0.707106781186548)); #42822=DIRECTION('ref_axis',(0.,-1.,0.)); #42823=DIRECTION('',(0.,-1.,0.)); #42824=DIRECTION('center_axis',(0.,0.,1.)); #42825=DIRECTION('ref_axis',(-1.,0.,0.)); #42826=DIRECTION('center_axis',(0.,0.,1.)); #42827=DIRECTION('ref_axis',(-1.,0.,0.)); #42828=DIRECTION('center_axis',(0.,0.,1.)); #42829=DIRECTION('ref_axis',(-1.,0.,0.)); #42830=DIRECTION('center_axis',(0.,0.,1.)); #42831=DIRECTION('ref_axis',(-1.,0.,0.)); #42832=DIRECTION('',(0.,1.,0.)); #42833=DIRECTION('center_axis',(1.,0.,0.)); #42834=DIRECTION('ref_axis',(0.,0.,1.)); #42835=DIRECTION('',(0.,-1.,0.)); #42836=DIRECTION('center_axis',(-0.707106781186548,0.,-0.707106781186548)); #42837=DIRECTION('ref_axis',(0.,-1.,0.)); #42838=DIRECTION('',(0.,-1.,0.)); #42839=DIRECTION('center_axis',(0.,0.,1.)); #42840=DIRECTION('ref_axis',(-1.,0.,0.)); #42841=DIRECTION('',(0.,-1.,0.)); #42842=DIRECTION('center_axis',(0.707106781186548,0.,-0.707106781186548)); #42843=DIRECTION('ref_axis',(0.,-1.,0.)); #42844=DIRECTION('',(0.,-1.,0.)); #42845=DIRECTION('center_axis',(-1.,0.,0.)); #42846=DIRECTION('ref_axis',(0.,0.,-1.)); #42847=DIRECTION('',(0.,1.,0.)); #42848=DIRECTION('center_axis',(0.,0.,1.)); #42849=DIRECTION('ref_axis',(-1.,0.,0.)); #42850=DIRECTION('center_axis',(1.,0.,0.)); #42851=DIRECTION('ref_axis',(0.,0.,-1.)); #42852=DIRECTION('',(0.,0.,-1.)); #42853=DIRECTION('center_axis',(-0.894427190999916,0.447213595499958,0.)); #42854=DIRECTION('ref_axis',(0.447213595499958,0.894427190999916,0.)); #42855=DIRECTION('',(0.,0.,1.)); #42856=DIRECTION('center_axis',(-1.,0.,0.)); #42857=DIRECTION('ref_axis',(0.,1.,0.)); #42858=DIRECTION('',(0.,0.,-1.)); #42859=DIRECTION('center_axis',(0.,-1.,0.)); #42860=DIRECTION('ref_axis',(0.,0.,-1.)); #42861=DIRECTION('',(0.,0.,-1.)); #42862=DIRECTION('center_axis',(1.,0.,0.)); #42863=DIRECTION('ref_axis',(0.,-1.,0.)); #42864=DIRECTION('center_axis',(1.,0.,0.)); #42865=DIRECTION('ref_axis',(0.,0.,-1.)); #42866=DIRECTION('',(1.,0.,0.)); #42867=DIRECTION('center_axis',(0.,-1.,0.)); #42868=DIRECTION('ref_axis',(0.,0.,-1.)); #42869=DIRECTION('',(1.,0.,0.)); #42870=DIRECTION('center_axis',(1.,0.,0.)); #42871=DIRECTION('ref_axis',(0.,0.,-1.)); #42872=DIRECTION('',(1.,0.,0.)); #42873=DIRECTION('center_axis',(0.,-0.819152044289016,-0.573576436351011)); #42874=DIRECTION('ref_axis',(0.,0.573576436351011,-0.819152044289016)); #42875=DIRECTION('',(1.,0.,0.)); #42876=DIRECTION('center_axis',(1.,0.,0.)); #42877=DIRECTION('ref_axis',(0.,0.,-1.)); #42878=DIRECTION('',(1.,0.,0.)); #42879=DIRECTION('center_axis',(0.,-0.707106781186548,0.707106781186548)); #42880=DIRECTION('ref_axis',(0.,-0.707106781186548,-0.707106781186548)); #42881=DIRECTION('',(1.,0.,0.)); #42882=DIRECTION('center_axis',(1.,0.,0.)); #42883=DIRECTION('ref_axis',(0.,0.,-1.)); #42884=DIRECTION('center_axis',(0.,-1.,0.)); #42885=DIRECTION('ref_axis',(0.,0.,-1.)); #42886=DIRECTION('',(1.,0.,0.)); #42887=DIRECTION('center_axis',(0.,0.,1.)); #42888=DIRECTION('ref_axis',(0.,-1.,0.)); #42889=DIRECTION('center_axis',(1.,0.,0.)); #42890=DIRECTION('ref_axis',(0.,0.,-1.)); #42891=DIRECTION('',(1.,0.,0.)); #42892=DIRECTION('center_axis',(0.,1.,0.)); #42893=DIRECTION('ref_axis',(0.,0.,-1.)); #42894=DIRECTION('',(1.,0.,0.)); #42895=DIRECTION('',(0.,0.,-1.)); #42896=DIRECTION('',(1.,0.,0.)); #42897=DIRECTION('center_axis',(0.,0.,-1.)); #42898=DIRECTION('ref_axis',(0.,-1.,0.)); #42899=DIRECTION('',(0.,-1.,0.)); #42900=DIRECTION('center_axis',(1.,0.,0.)); #42901=DIRECTION('ref_axis',(0.,0.,-1.)); #42902=DIRECTION('',(0.,0.,1.)); #42903=DIRECTION('center_axis',(-1.,0.,0.)); #42904=DIRECTION('ref_axis',(0.,-1.,0.)); #42905=DIRECTION('center_axis',(1.,0.,0.)); #42906=DIRECTION('ref_axis',(0.,0.474999999999959,-0.879985795339924)); #42907=DIRECTION('center_axis',(-1.,0.,0.)); #42908=DIRECTION('ref_axis',(0.,-1.,0.)); #42909=DIRECTION('',(0.,0.,-1.)); #42910=DIRECTION('',(0.,1.,0.)); #42911=DIRECTION('center_axis',(0.,0.,1.)); #42912=DIRECTION('ref_axis',(1.,0.,0.)); #42913=DIRECTION('center_axis',(0.,0.,1.)); #42914=DIRECTION('ref_axis',(0.,-1.,0.)); #42915=DIRECTION('',(0.,1.,0.)); #42916=DIRECTION('center_axis',(0.,0.,1.)); #42917=DIRECTION('ref_axis',(1.,0.,0.)); #42918=DIRECTION('',(-1.,0.,0.)); #42919=DIRECTION('',(1.,0.,0.)); #42920=DIRECTION('center_axis',(0.,1.,0.)); #42921=DIRECTION('ref_axis',(0.,0.,-1.)); #42922=DIRECTION('center_axis',(0.,-1.,0.)); #42923=DIRECTION('ref_axis',(-1.,0.,0.)); #42924=DIRECTION('',(-1.,0.,0.)); #42925=DIRECTION('',(0.,0.,1.)); #42926=DIRECTION('',(1.,0.,0.)); #42927=DIRECTION('center_axis',(0.,-1.,0.)); #42928=DIRECTION('ref_axis',(-1.,0.,0.)); #42929=DIRECTION('center_axis',(0.,1.,0.)); #42930=DIRECTION('ref_axis',(0.,0.,-1.)); #42931=DIRECTION('',(0.,-1.,0.)); #42932=DIRECTION('center_axis',(0.,0.,1.)); #42933=DIRECTION('ref_axis',(0.,1.,0.)); #42934=DIRECTION('',(1.,0.,0.)); #42935=DIRECTION('center_axis',(0.,0.,1.)); #42936=DIRECTION('ref_axis',(1.,0.,0.)); #42937=DIRECTION('',(0.,1.,0.)); #42938=DIRECTION('center_axis',(0.,0.,1.)); #42939=DIRECTION('ref_axis',(0.,-1.,0.)); #42940=DIRECTION('center_axis',(0.,0.,1.)); #42941=DIRECTION('ref_axis',(1.,0.,0.)); #42942=DIRECTION('',(0.,0.,1.)); #42943=DIRECTION('center_axis',(-1.,0.,0.)); #42944=DIRECTION('ref_axis',(0.,1.,0.)); #42945=DIRECTION('',(0.,0.,1.)); #42946=DIRECTION('center_axis',(0.,0.,1.)); #42947=DIRECTION('ref_axis',(1.,0.,0.)); #42948=DIRECTION('',(0.,0.,1.)); #42949=DIRECTION('center_axis',(0.,-1.,0.)); #42950=DIRECTION('ref_axis',(0.,0.,1.)); #42951=DIRECTION('',(1.,0.,0.)); #42952=DIRECTION('center_axis',(1.,0.,0.)); #42953=DIRECTION('ref_axis',(0.,0.,-1.)); #42954=DIRECTION('',(1.,0.,0.)); #42955=DIRECTION('center_axis',(1.,0.,0.)); #42956=DIRECTION('ref_axis',(0.,0.,-1.)); #42957=DIRECTION('center_axis',(1.,0.,0.)); #42958=DIRECTION('ref_axis',(0.,1.22464679914735E-16,1.)); #42959=DIRECTION('center_axis',(0.,0.,1.)); #42960=DIRECTION('ref_axis',(0.,1.,0.)); #42961=DIRECTION('',(-1.,0.,0.)); #42962=DIRECTION('',(-1.,0.,0.)); #42963=DIRECTION('center_axis',(0.,-1.,0.)); #42964=DIRECTION('ref_axis',(0.,0.,1.)); #42965=DIRECTION('center_axis',(0.,-1.,0.)); #42966=DIRECTION('ref_axis',(0.,0.,1.)); #42967=DIRECTION('',(6.07716335728541E-64,0.,1.)); #42968=DIRECTION('',(1.,0.,0.)); #42969=DIRECTION('',(6.07716335728541E-64,0.,1.)); #42970=DIRECTION('',(1.,0.,0.)); #42971=DIRECTION('axis',(0.,0.,1.)); #42972=DIRECTION('refdir',(1.,0.,0.)); #42973=DIRECTION('axis',(0.,0.,1.)); #42974=DIRECTION('refdir',(1.,0.,0.)); #42975=DIRECTION('center_axis',(0.707106781186548,-0.707106781186548,0.)); #42976=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #42977=DIRECTION('',(0.,0.,1.)); #42978=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #42979=DIRECTION('',(0.,0.,1.)); #42980=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #42981=DIRECTION('center_axis',(0.,-1.,0.)); #42982=DIRECTION('ref_axis',(-1.,0.,0.)); #42983=DIRECTION('',(0.,0.,1.)); #42984=DIRECTION('',(-1.,0.,0.)); #42985=DIRECTION('',(-1.,0.,0.)); #42986=DIRECTION('center_axis',(1.,0.,0.)); #42987=DIRECTION('ref_axis',(0.,-1.,0.)); #42988=DIRECTION('',(0.,-1.,0.)); #42989=DIRECTION('',(0.,0.,1.)); #42990=DIRECTION('',(0.,-1.,0.)); #42991=DIRECTION('center_axis',(0.,0.,1.)); #42992=DIRECTION('ref_axis',(1.,0.,0.)); #42993=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #42994=DIRECTION('',(0.,1.,0.)); #42995=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #42996=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #42997=DIRECTION('',(0.,1.,0.)); #42998=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #42999=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #43000=DIRECTION('',(0.,1.,0.)); #43001=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #43002=DIRECTION('',(1.,0.,0.)); #43003=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #43004=DIRECTION('',(0.,-1.,0.)); #43005=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #43006=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #43007=DIRECTION('',(0.,-1.,0.)); #43008=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #43009=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #43010=DIRECTION('',(0.,1.,0.)); #43011=DIRECTION('',(-1.,0.,0.)); #43012=DIRECTION('',(0.,1.,0.)); #43013=DIRECTION('',(-1.,0.,0.)); #43014=DIRECTION('',(-1.,0.,0.)); #43015=DIRECTION('',(0.,1.,0.)); #43016=DIRECTION('',(-1.,0.,0.)); #43017=DIRECTION('',(0.,1.,0.)); #43018=DIRECTION('',(-1.,0.,0.)); #43019=DIRECTION('',(0.,1.,0.)); #43020=DIRECTION('',(-1.,0.,0.)); #43021=DIRECTION('',(0.,1.,0.)); #43022=DIRECTION('center_axis',(0.,0.,1.)); #43023=DIRECTION('ref_axis',(1.,0.,0.)); #43024=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #43025=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #43026=DIRECTION('',(0.,-1.,0.)); #43027=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #43028=DIRECTION('',(-0.707106781186548,-0.707106781186548,0.)); #43029=DIRECTION('',(0.,-1.,0.)); #43030=DIRECTION('',(0.707106781186548,-0.707106781186548,0.)); #43031=DIRECTION('',(1.,0.,0.)); #43032=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #43033=DIRECTION('',(0.,1.,0.)); #43034=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #43035=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #43036=DIRECTION('',(0.,1.,0.)); #43037=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #43038=DIRECTION('',(0.707106781186548,0.707106781186548,0.)); #43039=DIRECTION('',(0.,1.,0.)); #43040=DIRECTION('',(-0.707106781186548,0.707106781186548,0.)); #43041=DIRECTION('',(0.,1.,0.)); #43042=DIRECTION('',(-1.,0.,0.)); #43043=DIRECTION('',(0.,1.,0.)); #43044=DIRECTION('',(-1.,0.,0.)); #43045=DIRECTION('',(-1.,0.,0.)); #43046=DIRECTION('',(0.,1.,0.)); #43047=DIRECTION('',(-1.,0.,0.)); #43048=DIRECTION('',(0.,1.,0.)); #43049=DIRECTION('',(-1.,0.,0.)); #43050=DIRECTION('',(0.,1.,0.)); #43051=DIRECTION('',(-1.,0.,0.)); #43052=DIRECTION('',(0.,1.,0.)); #43053=DIRECTION('center_axis',(-0.707106781186548,-0.707106781186548,0.)); #43054=DIRECTION('ref_axis',(-0.707106781186548,0.707106781186548,0.)); #43055=DIRECTION('',(0.,0.,1.)); #43056=DIRECTION('center_axis',(0.707106781186548,0.707106781186548,0.)); #43057=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #43058=DIRECTION('',(0.,0.,1.)); #43059=DIRECTION('center_axis',(-1.,0.,0.)); #43060=DIRECTION('ref_axis',(0.,1.,0.)); #43061=DIRECTION('',(0.,0.,1.)); #43062=DIRECTION('center_axis',(0.707106781186548,-0.707106781186548,0.)); #43063=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #43064=DIRECTION('',(0.,0.,1.)); #43065=DIRECTION('center_axis',(-0.707106781186548,0.707106781186548,0.)); #43066=DIRECTION('ref_axis',(0.707106781186548,0.707106781186548,0.)); #43067=DIRECTION('',(0.,0.,1.)); #43068=DIRECTION('center_axis',(1.,0.,0.)); #43069=DIRECTION('ref_axis',(0.,-1.,0.)); #43070=DIRECTION('',(0.,0.,1.)); #43071=DIRECTION('center_axis',(-0.707106781186548,-0.707106781186548,0.)); #43072=DIRECTION('ref_axis',(-0.707106781186548,0.707106781186548,0.)); #43073=DIRECTION('',(0.,0.,1.)); #43074=DIRECTION('center_axis',(0.707106781186548,0.707106781186548,0.)); #43075=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #43076=DIRECTION('',(0.,0.,1.)); #43077=DIRECTION('center_axis',(-1.,0.,0.)); #43078=DIRECTION('ref_axis',(0.,1.,0.)); #43079=DIRECTION('',(0.,0.,1.)); #43080=DIRECTION('center_axis',(0.707106781186548,-0.707106781186548,0.)); #43081=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #43082=DIRECTION('',(0.,0.,1.)); #43083=DIRECTION('center_axis',(-0.707106781186548,0.707106781186548,0.)); #43084=DIRECTION('ref_axis',(0.707106781186548,0.707106781186548,0.)); #43085=DIRECTION('',(0.,0.,1.)); #43086=DIRECTION('center_axis',(1.,0.,0.)); #43087=DIRECTION('ref_axis',(0.,-1.,0.)); #43088=DIRECTION('',(0.,0.,1.)); #43089=DIRECTION('center_axis',(-0.707106781186548,-0.707106781186548,0.)); #43090=DIRECTION('ref_axis',(-0.707106781186548,0.707106781186548,0.)); #43091=DIRECTION('',(0.,0.,1.)); #43092=DIRECTION('center_axis',(0.707106781186548,0.707106781186548,0.)); #43093=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #43094=DIRECTION('',(0.,0.,1.)); #43095=DIRECTION('center_axis',(-1.,0.,0.)); #43096=DIRECTION('ref_axis',(0.,1.,0.)); #43097=DIRECTION('',(0.,0.,1.)); #43098=DIRECTION('center_axis',(0.,1.,0.)); #43099=DIRECTION('ref_axis',(1.,0.,0.)); #43100=DIRECTION('',(0.,0.,1.)); #43101=DIRECTION('center_axis',(-0.707106781186548,0.707106781186548,0.)); #43102=DIRECTION('ref_axis',(0.707106781186548,0.707106781186548,0.)); #43103=DIRECTION('center_axis',(1.,0.,0.)); #43104=DIRECTION('ref_axis',(0.,0.,1.)); #43105=DIRECTION('',(0.,0.,1.)); #43106=DIRECTION('',(0.,1.,0.)); #43107=DIRECTION('',(0.,0.,1.)); #43108=DIRECTION('center_axis',(0.,1.,0.)); #43109=DIRECTION('ref_axis',(0.,0.,1.)); #43110=DIRECTION('',(1.,0.,0.)); #43111=DIRECTION('',(0.,0.,1.)); #43112=DIRECTION('center_axis',(1.,0.,0.)); #43113=DIRECTION('ref_axis',(0.,0.,1.)); #43114=DIRECTION('',(0.,0.,1.)); #43115=DIRECTION('',(0.,1.,0.)); #43116=DIRECTION('center_axis',(0.,1.,0.)); #43117=DIRECTION('ref_axis',(0.,0.,1.)); #43118=DIRECTION('',(1.,0.,0.)); #43119=DIRECTION('center_axis',(0.,1.,0.)); #43120=DIRECTION('ref_axis',(0.,0.,1.)); #43121=DIRECTION('',(0.,0.,1.)); #43122=DIRECTION('',(0.,0.,1.)); #43123=DIRECTION('',(1.,0.,0.)); #43124=DIRECTION('center_axis',(1.,0.,0.)); #43125=DIRECTION('ref_axis',(0.,0.,1.)); #43126=DIRECTION('',(0.,1.,0.)); #43127=DIRECTION('',(0.,0.,1.)); #43128=DIRECTION('center_axis',(0.,1.,0.)); #43129=DIRECTION('ref_axis',(0.,0.,1.)); #43130=DIRECTION('',(1.,0.,0.)); #43131=DIRECTION('',(0.,0.,1.)); #43132=DIRECTION('center_axis',(1.,0.,0.)); #43133=DIRECTION('ref_axis',(0.,0.,1.)); #43134=DIRECTION('',(0.,1.,0.)); #43135=DIRECTION('center_axis',(0.,1.,0.)); #43136=DIRECTION('ref_axis',(0.,0.,1.)); #43137=DIRECTION('',(0.,0.,1.)); #43138=DIRECTION('',(1.,0.,0.)); #43139=DIRECTION('',(0.,0.,1.)); #43140=DIRECTION('center_axis',(1.,0.,0.)); #43141=DIRECTION('ref_axis',(0.,0.,1.)); #43142=DIRECTION('',(0.,0.,1.)); #43143=DIRECTION('',(0.,1.,0.)); #43144=DIRECTION('center_axis',(0.,1.,0.)); #43145=DIRECTION('ref_axis',(0.,0.,1.)); #43146=DIRECTION('',(0.,0.,1.)); #43147=DIRECTION('',(1.,0.,0.)); #43148=DIRECTION('center_axis',(1.,0.,0.)); #43149=DIRECTION('ref_axis',(0.,0.,1.)); #43150=DIRECTION('',(0.,1.,0.)); #43151=DIRECTION('center_axis',(1.,0.,0.)); #43152=DIRECTION('ref_axis',(0.,0.,1.)); #43153=DIRECTION('',(0.,0.,1.)); #43154=DIRECTION('',(0.,0.,1.)); #43155=DIRECTION('',(0.,1.,0.)); #43156=DIRECTION('center_axis',(0.,1.,0.)); #43157=DIRECTION('ref_axis',(0.,0.,1.)); #43158=DIRECTION('',(0.,0.,1.)); #43159=DIRECTION('',(1.,0.,0.)); #43160=DIRECTION('center_axis',(1.,0.,0.)); #43161=DIRECTION('ref_axis',(0.,0.,1.)); #43162=DIRECTION('',(0.,0.,1.)); #43163=DIRECTION('',(0.,1.,0.)); #43164=DIRECTION('center_axis',(0.,1.,0.)); #43165=DIRECTION('ref_axis',(0.,0.,1.)); #43166=DIRECTION('',(1.,0.,0.)); #43167=DIRECTION('center_axis',(0.,1.,0.)); #43168=DIRECTION('ref_axis',(0.,0.,1.)); #43169=DIRECTION('',(0.,0.,1.)); #43170=DIRECTION('',(1.,0.,0.)); #43171=DIRECTION('',(0.,0.,1.)); #43172=DIRECTION('center_axis',(1.,0.,0.)); #43173=DIRECTION('ref_axis',(0.,0.,1.)); #43174=DIRECTION('',(0.,0.,1.)); #43175=DIRECTION('',(0.,1.,0.)); #43176=DIRECTION('center_axis',(0.,1.,0.)); #43177=DIRECTION('ref_axis',(0.,0.,1.)); #43178=DIRECTION('',(0.,0.,1.)); #43179=DIRECTION('',(1.,0.,0.)); #43180=DIRECTION('center_axis',(1.,0.,0.)); #43181=DIRECTION('ref_axis',(0.,0.,1.)); #43182=DIRECTION('',(0.,1.,0.)); #43183=DIRECTION('center_axis',(0.,1.,0.)); #43184=DIRECTION('ref_axis',(0.,0.,1.)); #43185=DIRECTION('',(0.,0.,1.)); #43186=DIRECTION('',(0.,0.,1.)); #43187=DIRECTION('',(1.,0.,0.)); #43188=DIRECTION('center_axis',(1.,0.,0.)); #43189=DIRECTION('ref_axis',(0.,0.,1.)); #43190=DIRECTION('',(0.,0.,1.)); #43191=DIRECTION('',(0.,1.,0.)); #43192=DIRECTION('center_axis',(0.,1.,0.)); #43193=DIRECTION('ref_axis',(0.,0.,1.)); #43194=DIRECTION('',(0.,0.,1.)); #43195=DIRECTION('',(1.,0.,0.)); #43196=DIRECTION('center_axis',(1.,0.,0.)); #43197=DIRECTION('ref_axis',(0.,0.,1.)); #43198=DIRECTION('',(0.,1.,0.)); #43199=DIRECTION('center_axis',(-0.707106781186548,1.73516750835589E-18, 0.707106781186548)); #43200=DIRECTION('ref_axis',(1.22694871165302E-18,1.,-1.22694871165302E-18)); #43201=DIRECTION('',(-0.577350269189626,0.577350269189626,-0.577350269189626)); #43202=DIRECTION('',(0.,1.,0.)); #43203=DIRECTION('',(-0.577350269189626,-0.577350269189626,-0.577350269189626)); #43204=DIRECTION('center_axis',(-1.73516750835589E-18,-0.707106781186548, 0.707106781186548)); #43205=DIRECTION('ref_axis',(-1.,1.22694871165302E-18,-1.22694871165302E-18)); #43206=DIRECTION('',(1.,0.,0.)); #43207=DIRECTION('',(0.577350269189626,-0.577350269189626,-0.577350269189626)); #43208=DIRECTION('center_axis',(-0.707106781186548,-1.73516750835589E-18, -0.707106781186548)); #43209=DIRECTION('ref_axis',(-1.22694871165302E-18,1.,-1.22694871165302E-18)); #43210=DIRECTION('',(0.577350269189626,0.577350269189626,-0.577350269189626)); #43211=DIRECTION('',(0.,1.,0.)); #43212=DIRECTION('center_axis',(1.73516750835589E-18,-0.707106781186548, -0.707106781186548)); #43213=DIRECTION('ref_axis',(-1.,-1.22694871165302E-18,-1.22694871165302E-18)); #43214=DIRECTION('',(1.,0.,0.)); #43215=DIRECTION('center_axis',(1.73516750835589E-18,-0.707106781186548, -0.707106781186548)); #43216=DIRECTION('ref_axis',(-1.,-1.22694871165302E-18,-1.22694871165302E-18)); #43217=DIRECTION('',(1.,0.,0.)); #43218=DIRECTION('',(-0.577350269189626,0.577350269189626,-0.577350269189626)); #43219=DIRECTION('',(0.577350269189626,0.577350269189626,-0.577350269189626)); #43220=DIRECTION('center_axis',(-0.707106781186548,1.73516750835589E-18, 0.707106781186548)); #43221=DIRECTION('ref_axis',(1.22694871165302E-18,1.,-1.22694871165302E-18)); #43222=DIRECTION('',(0.,1.,0.)); #43223=DIRECTION('',(-0.577350269189626,-0.577350269189626,-0.577350269189626)); #43224=DIRECTION('center_axis',(-1.73516750835589E-18,-0.707106781186548, 0.707106781186548)); #43225=DIRECTION('ref_axis',(-1.,1.22694871165302E-18,-1.22694871165302E-18)); #43226=DIRECTION('',(1.,0.,0.)); #43227=DIRECTION('',(0.577350269189626,-0.577350269189626,-0.577350269189626)); #43228=DIRECTION('center_axis',(-0.707106781186548,-1.73516750835589E-18, -0.707106781186548)); #43229=DIRECTION('ref_axis',(-1.22694871165302E-18,1.,-1.22694871165302E-18)); #43230=DIRECTION('',(0.,1.,0.)); #43231=DIRECTION('center_axis',(-1.73516750835589E-18,-0.707106781186548, 0.707106781186548)); #43232=DIRECTION('ref_axis',(-1.,1.22694871165302E-18,-1.22694871165302E-18)); #43233=DIRECTION('',(1.,0.,0.)); #43234=DIRECTION('',(0.577350269189626,-0.577350269189626,-0.577350269189626)); #43235=DIRECTION('',(-0.577350269189626,-0.577350269189626,-0.577350269189626)); #43236=DIRECTION('center_axis',(-0.707106781186548,-1.73516750835589E-18, -0.707106781186548)); #43237=DIRECTION('ref_axis',(-1.22694871165302E-18,1.,-1.22694871165302E-18)); #43238=DIRECTION('',(0.577350269189626,0.577350269189626,-0.577350269189626)); #43239=DIRECTION('',(0.,1.,0.)); #43240=DIRECTION('center_axis',(1.73516750835589E-18,-0.707106781186548, -0.707106781186548)); #43241=DIRECTION('ref_axis',(-1.,-1.22694871165302E-18,-1.22694871165302E-18)); #43242=DIRECTION('',(1.,0.,0.)); #43243=DIRECTION('',(-0.577350269189626,0.577350269189626,-0.577350269189626)); #43244=DIRECTION('center_axis',(-0.707106781186548,1.73516750835589E-18, 0.707106781186548)); #43245=DIRECTION('ref_axis',(1.22694871165302E-18,1.,-1.22694871165302E-18)); #43246=DIRECTION('',(0.,1.,0.)); #43247=DIRECTION('center_axis',(0.707106781186548,-1.73516750835589E-18, 0.707106781186548)); #43248=DIRECTION('ref_axis',(1.22694871165302E-18,1.,1.22694871165302E-18)); #43249=DIRECTION('',(-0.577350269189626,0.577350269189626,0.577350269189626)); #43250=DIRECTION('',(-0.577350269189626,-0.577350269189626,0.577350269189626)); #43251=DIRECTION('',(0.,1.,0.)); #43252=DIRECTION('center_axis',(1.73516750835589E-18,0.707106781186548, 0.707106781186548)); #43253=DIRECTION('ref_axis',(-1.,1.22694871165302E-18,1.22694871165302E-18)); #43254=DIRECTION('',(1.,0.,0.)); #43255=DIRECTION('',(0.577350269189626,-0.577350269189626,0.577350269189626)); #43256=DIRECTION('center_axis',(0.707106781186548,1.73516750835589E-18, -0.707106781186548)); #43257=DIRECTION('ref_axis',(-1.22694871165302E-18,1.,1.22694871165302E-18)); #43258=DIRECTION('',(0.577350269189626,0.577350269189626,0.577350269189626)); #43259=DIRECTION('',(0.,1.,0.)); #43260=DIRECTION('center_axis',(-1.73516750835589E-18,0.707106781186548, -0.707106781186548)); #43261=DIRECTION('ref_axis',(-1.,-1.22694871165302E-18,1.22694871165302E-18)); #43262=DIRECTION('',(1.,0.,0.)); #43263=DIRECTION('center_axis',(-1.73516750835589E-18,0.707106781186548, -0.707106781186548)); #43264=DIRECTION('ref_axis',(-1.,-1.22694871165302E-18,1.22694871165302E-18)); #43265=DIRECTION('',(1.,0.,0.)); #43266=DIRECTION('',(0.577350269189626,0.577350269189626,0.577350269189626)); #43267=DIRECTION('',(-0.577350269189626,0.577350269189626,0.577350269189626)); #43268=DIRECTION('center_axis',(0.707106781186548,-1.73516750835589E-18, 0.707106781186548)); #43269=DIRECTION('ref_axis',(1.22694871165302E-18,1.,1.22694871165302E-18)); #43270=DIRECTION('',(-0.577350269189626,-0.577350269189626,0.577350269189626)); #43271=DIRECTION('',(0.,1.,0.)); #43272=DIRECTION('center_axis',(1.73516750835589E-18,0.707106781186548, 0.707106781186548)); #43273=DIRECTION('ref_axis',(-1.,1.22694871165302E-18,1.22694871165302E-18)); #43274=DIRECTION('',(1.,0.,0.)); #43275=DIRECTION('',(0.577350269189626,-0.577350269189626,0.577350269189626)); #43276=DIRECTION('center_axis',(0.707106781186548,1.73516750835589E-18, -0.707106781186548)); #43277=DIRECTION('ref_axis',(-1.22694871165302E-18,1.,1.22694871165302E-18)); #43278=DIRECTION('',(0.,1.,0.)); #43279=DIRECTION('center_axis',(1.73516750835589E-18,0.707106781186548, 0.707106781186548)); #43280=DIRECTION('ref_axis',(-1.,1.22694871165302E-18,1.22694871165302E-18)); #43281=DIRECTION('',(1.,0.,0.)); #43282=DIRECTION('',(-0.577350269189626,-0.577350269189626,0.577350269189626)); #43283=DIRECTION('',(0.577350269189626,-0.577350269189626,0.577350269189626)); #43284=DIRECTION('center_axis',(0.707106781186548,1.73516750835589E-18, -0.707106781186548)); #43285=DIRECTION('ref_axis',(-1.22694871165302E-18,1.,1.22694871165302E-18)); #43286=DIRECTION('',(0.577350269189626,0.577350269189626,0.577350269189626)); #43287=DIRECTION('',(0.,1.,0.)); #43288=DIRECTION('center_axis',(-1.73516750835589E-18,0.707106781186548, -0.707106781186548)); #43289=DIRECTION('ref_axis',(-1.,-1.22694871165302E-18,1.22694871165302E-18)); #43290=DIRECTION('',(1.,0.,0.)); #43291=DIRECTION('',(-0.577350269189626,0.577350269189626,0.577350269189626)); #43292=DIRECTION('center_axis',(0.707106781186548,-1.73516750835589E-18, 0.707106781186548)); #43293=DIRECTION('ref_axis',(1.22694871165302E-18,1.,1.22694871165302E-18)); #43294=DIRECTION('',(0.,1.,0.)); #43295=DIRECTION('center_axis',(0.,0.,1.)); #43296=DIRECTION('ref_axis',(1.,0.,0.)); #43297=DIRECTION('center_axis',(0.,0.,1.)); #43298=DIRECTION('ref_axis',(1.,0.,0.)); #43299=DIRECTION('center_axis',(0.,0.,1.)); #43300=DIRECTION('ref_axis',(1.,0.,0.)); #43301=DIRECTION('center_axis',(0.,0.,1.)); #43302=DIRECTION('ref_axis',(1.,0.,0.)); #43303=DIRECTION('center_axis',(0.,0.,1.)); #43304=DIRECTION('ref_axis',(1.,0.,0.)); #43305=DIRECTION('center_axis',(0.,0.,1.)); #43306=DIRECTION('ref_axis',(1.,0.,0.)); #43307=DIRECTION('',(0.,0.,1.)); #43308=DIRECTION('',(1.,0.,0.)); #43309=DIRECTION('',(0.,0.,1.)); #43310=DIRECTION('',(1.,0.,0.)); #43311=DIRECTION('axis',(0.,0.,1.)); #43312=DIRECTION('refdir',(1.,0.,0.)); #43313=DIRECTION('axis',(0.,0.,1.)); #43314=DIRECTION('refdir',(1.,0.,0.)); #43315=DIRECTION('center_axis',(1.,0.,0.)); #43316=DIRECTION('ref_axis',(0.,0.,1.)); #43317=DIRECTION('',(0.,0.,1.)); #43318=DIRECTION('center_axis',(-1.,0.,0.)); #43319=DIRECTION('ref_axis',(0.,0.,1.)); #43320=DIRECTION('',(0.,1.,0.)); #43321=DIRECTION('center_axis',(1.,0.,0.)); #43322=DIRECTION('ref_axis',(0.,0.,1.)); #43323=DIRECTION('',(0.,0.,1.)); #43324=DIRECTION('center_axis',(-1.,0.,0.)); #43325=DIRECTION('ref_axis',(0.,0.,1.)); #43326=DIRECTION('',(0.,1.,0.)); #43327=DIRECTION('center_axis',(1.,0.,0.)); #43328=DIRECTION('ref_axis',(0.,0.,1.)); #43329=DIRECTION('center_axis',(0.,1.,0.)); #43330=DIRECTION('ref_axis',(0.,0.,1.)); #43331=DIRECTION('',(0.,0.,1.)); #43332=DIRECTION('',(1.,0.,0.)); #43333=DIRECTION('',(1.,0.,0.)); #43334=DIRECTION('center_axis',(1.,0.,0.)); #43335=DIRECTION('ref_axis',(0.,-1.,0.)); #43336=DIRECTION('',(1.,0.,0.)); #43337=DIRECTION('center_axis',(1.,0.,0.)); #43338=DIRECTION('ref_axis',(0.,0.,1.)); #43339=DIRECTION('center_axis',(1.,0.,0.)); #43340=DIRECTION('ref_axis',(0.,-1.,0.)); #43341=DIRECTION('center_axis',(-1.,0.,0.)); #43342=DIRECTION('ref_axis',(0.,0.,1.)); #43343=DIRECTION('',(1.,0.,0.)); #43344=DIRECTION('center_axis',(0.,0.,1.)); #43345=DIRECTION('ref_axis',(1.,0.,0.)); #43346=DIRECTION('',(1.,0.,0.)); #43347=DIRECTION('',(0.,1.,0.)); #43348=DIRECTION('center_axis',(0.,0.,1.)); #43349=DIRECTION('ref_axis',(1.,0.,0.)); #43350=DIRECTION('',(0.,1.,0.)); #43351=DIRECTION('',(1.,0.,0.)); #43352=DIRECTION('center_axis',(1.,0.,0.)); #43353=DIRECTION('ref_axis',(0.,1.,0.)); #43354=DIRECTION('',(1.,0.,0.)); #43355=DIRECTION('center_axis',(-1.,0.,0.)); #43356=DIRECTION('ref_axis',(0.,0.,1.)); #43357=DIRECTION('center_axis',(1.,0.,0.)); #43358=DIRECTION('ref_axis',(0.,1.,0.)); #43359=DIRECTION('center_axis',(1.,0.,0.)); #43360=DIRECTION('ref_axis',(0.,0.,1.)); #43361=DIRECTION('',(1.,0.,0.)); #43362=DIRECTION('center_axis',(0.,1.,0.)); #43363=DIRECTION('ref_axis',(0.,0.,1.)); #43364=DIRECTION('',(0.,0.,1.)); #43365=DIRECTION('center_axis',(1.,0.,0.)); #43366=DIRECTION('ref_axis',(0.,0.,1.)); #43367=DIRECTION('center_axis',(1.,0.,0.)); #43368=DIRECTION('ref_axis',(0.,0.,1.)); #43369=DIRECTION('',(0.,0.,1.)); #43370=DIRECTION('center_axis',(-1.,0.,0.)); #43371=DIRECTION('ref_axis',(0.,0.,1.)); #43372=DIRECTION('',(0.,1.,0.)); #43373=DIRECTION('center_axis',(1.,0.,0.)); #43374=DIRECTION('ref_axis',(0.,0.,1.)); #43375=DIRECTION('',(0.,0.,1.)); #43376=DIRECTION('center_axis',(-1.,0.,0.)); #43377=DIRECTION('ref_axis',(0.,0.,1.)); #43378=DIRECTION('',(0.,1.,0.)); #43379=DIRECTION('center_axis',(1.,0.,0.)); #43380=DIRECTION('ref_axis',(0.,-1.,0.)); #43381=DIRECTION('',(1.,0.,0.)); #43382=DIRECTION('center_axis',(1.,0.,0.)); #43383=DIRECTION('ref_axis',(0.,0.,1.)); #43384=DIRECTION('',(1.,0.,0.)); #43385=DIRECTION('center_axis',(0.,0.,1.)); #43386=DIRECTION('ref_axis',(1.,0.,0.)); #43387=DIRECTION('',(1.,0.,0.)); #43388=DIRECTION('',(0.,1.,0.)); #43389=DIRECTION('center_axis',(1.,0.,0.)); #43390=DIRECTION('ref_axis',(0.,1.,0.)); #43391=DIRECTION('',(1.,0.,0.)); #43392=DIRECTION('center_axis',(-1.,0.,0.)); #43393=DIRECTION('ref_axis',(0.,0.,1.)); #43394=DIRECTION('center_axis',(0.,1.,0.)); #43395=DIRECTION('ref_axis',(0.,0.,1.)); #43396=DIRECTION('',(0.,0.,1.)); #43397=DIRECTION('',(1.,0.,0.)); #43398=DIRECTION('center_axis',(1.,0.,0.)); #43399=DIRECTION('ref_axis',(0.,1.,0.)); #43400=DIRECTION('',(1.,0.,0.)); #43401=DIRECTION('center_axis',(1.,0.,0.)); #43402=DIRECTION('ref_axis',(0.,0.,1.)); #43403=DIRECTION('center_axis',(0.,0.,1.)); #43404=DIRECTION('ref_axis',(1.,0.,0.)); #43405=DIRECTION('',(1.,0.,0.)); #43406=DIRECTION('',(0.,1.,0.)); #43407=DIRECTION('center_axis',(1.,0.,0.)); #43408=DIRECTION('ref_axis',(0.,-1.,0.)); #43409=DIRECTION('',(1.,0.,0.)); #43410=DIRECTION('center_axis',(-1.,0.,0.)); #43411=DIRECTION('ref_axis',(0.,0.,1.)); #43412=DIRECTION('center_axis',(0.,1.,0.)); #43413=DIRECTION('ref_axis',(0.,0.,1.)); #43414=DIRECTION('',(0.,0.,1.)); #43415=DIRECTION('center_axis',(1.,0.,0.)); #43416=DIRECTION('ref_axis',(0.,0.,1.)); #43417=DIRECTION('',(0.,0.,1.)); #43418=DIRECTION('center_axis',(-1.,0.,0.)); #43419=DIRECTION('ref_axis',(0.,0.,1.)); #43420=DIRECTION('',(0.,1.,0.)); #43421=DIRECTION('center_axis',(1.,0.,0.)); #43422=DIRECTION('ref_axis',(0.,0.,1.)); #43423=DIRECTION('',(0.,0.,1.)); #43424=DIRECTION('center_axis',(-1.,0.,0.)); #43425=DIRECTION('ref_axis',(0.,0.,1.)); #43426=DIRECTION('',(0.,1.,0.)); #43427=DIRECTION('center_axis',(1.,0.,0.)); #43428=DIRECTION('ref_axis',(0.,0.,1.)); #43429=DIRECTION('center_axis',(0.,1.,0.)); #43430=DIRECTION('ref_axis',(0.,0.,1.)); #43431=DIRECTION('',(0.,0.,1.)); #43432=DIRECTION('',(1.,0.,0.)); #43433=DIRECTION('',(1.,0.,0.)); #43434=DIRECTION('center_axis',(1.,0.,0.)); #43435=DIRECTION('ref_axis',(0.,-1.,0.)); #43436=DIRECTION('',(1.,0.,0.)); #43437=DIRECTION('center_axis',(1.,0.,0.)); #43438=DIRECTION('ref_axis',(0.,0.,1.)); #43439=DIRECTION('center_axis',(1.,0.,0.)); #43440=DIRECTION('ref_axis',(0.,-1.,0.)); #43441=DIRECTION('center_axis',(-1.,0.,0.)); #43442=DIRECTION('ref_axis',(0.,0.,1.)); #43443=DIRECTION('',(1.,0.,0.)); #43444=DIRECTION('center_axis',(0.,0.,1.)); #43445=DIRECTION('ref_axis',(1.,0.,0.)); #43446=DIRECTION('',(1.,0.,0.)); #43447=DIRECTION('',(0.,1.,0.)); #43448=DIRECTION('center_axis',(0.,0.,1.)); #43449=DIRECTION('ref_axis',(1.,0.,0.)); #43450=DIRECTION('',(0.,1.,0.)); #43451=DIRECTION('',(1.,0.,0.)); #43452=DIRECTION('center_axis',(1.,0.,0.)); #43453=DIRECTION('ref_axis',(0.,1.,0.)); #43454=DIRECTION('',(1.,0.,0.)); #43455=DIRECTION('center_axis',(-1.,0.,0.)); #43456=DIRECTION('ref_axis',(0.,0.,1.)); #43457=DIRECTION('center_axis',(1.,0.,0.)); #43458=DIRECTION('ref_axis',(0.,1.,0.)); #43459=DIRECTION('center_axis',(1.,0.,0.)); #43460=DIRECTION('ref_axis',(0.,0.,1.)); #43461=DIRECTION('',(1.,0.,0.)); #43462=DIRECTION('center_axis',(0.,1.,0.)); #43463=DIRECTION('ref_axis',(0.,0.,1.)); #43464=DIRECTION('',(0.,0.,1.)); #43465=DIRECTION('center_axis',(1.,0.,0.)); #43466=DIRECTION('ref_axis',(0.,0.,1.)); #43467=DIRECTION('',(0.,0.,1.)); #43468=DIRECTION('',(1.,0.,0.)); #43469=DIRECTION('',(0.,0.,1.)); #43470=DIRECTION('',(1.,0.,0.)); #43471=DIRECTION('axis',(0.,0.,1.)); #43472=DIRECTION('refdir',(1.,0.,0.)); #43473=DIRECTION('center_axis',(0.,0.,1.)); #43474=DIRECTION('ref_axis',(1.,0.,0.)); #43475=DIRECTION('',(-4.94806919052994E-16,-1.,0.)); #43476=DIRECTION('center_axis',(0.,0.,-1.)); #43477=DIRECTION('ref_axis',(1.,0.,0.)); #43478=DIRECTION('',(-1.,5.46571335200077E-16,0.)); #43479=DIRECTION('center_axis',(0.,0.,-1.)); #43480=DIRECTION('ref_axis',(8.88178419700128E-15,-1.,0.)); #43481=DIRECTION('',(1.85552594644873E-16,1.,0.)); #43482=DIRECTION('',(-1.,0.,0.)); #43483=DIRECTION('center_axis',(0.,1.,0.)); #43484=DIRECTION('ref_axis',(1.,0.,0.)); #43485=DIRECTION('',(-1.,0.,0.)); #43486=DIRECTION('',(0.,0.,-1.)); #43487=DIRECTION('',(-1.,0.,0.)); #43488=DIRECTION('',(0.,0.,-1.)); #43489=DIRECTION('center_axis',(-1.,1.85552594644873E-16,0.)); #43490=DIRECTION('ref_axis',(1.85552594644873E-16,1.,0.)); #43491=DIRECTION('',(-1.85552594644873E-16,-1.,0.)); #43492=DIRECTION('',(0.,0.,1.)); #43493=DIRECTION('',(-1.85552594644873E-16,-1.,0.)); #43494=DIRECTION('center_axis',(0.,-1.,0.)); #43495=DIRECTION('ref_axis',(-1.,0.,0.)); #43496=DIRECTION('',(0.,0.,-1.)); #43497=DIRECTION('',(-1.,0.,0.)); #43498=DIRECTION('',(0.,0.,1.)); #43499=DIRECTION('center_axis',(0.,0.,1.)); #43500=DIRECTION('ref_axis',(1.,0.,0.)); #43501=DIRECTION('',(0.,-1.,0.)); #43502=DIRECTION('center_axis',(0.,0.,1.)); #43503=DIRECTION('ref_axis',(-0.707106781186546,0.707106781186549,0.)); #43504=DIRECTION('',(-1.,1.2166827667125E-16,0.)); #43505=DIRECTION('center_axis',(0.,0.,1.)); #43506=DIRECTION('ref_axis',(0.707106781186552,0.707106781186543,0.)); #43507=DIRECTION('',(6.67803323082801E-16,1.,0.)); #43508=DIRECTION('center_axis',(0.,0.,1.)); #43509=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #43510=DIRECTION('',(1.,-4.86673106685E-16,0.)); #43511=DIRECTION('center_axis',(0.,0.,1.)); #43512=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,0.)); #43513=DIRECTION('',(-1.85552594644873E-16,-1.,0.)); #43514=DIRECTION('',(-1.85552594644873E-16,-1.,0.)); #43515=DIRECTION('',(-1.85552594644873E-16,-1.,0.)); #43516=DIRECTION('',(-1.85552594644873E-16,-1.,0.)); #43517=DIRECTION('center_axis',(0.,0.,1.)); #43518=DIRECTION('ref_axis',(4.44089209850064E-15,-1.,0.)); #43519=DIRECTION('',(1.,-5.46571335200077E-16,0.)); #43520=DIRECTION('center_axis',(0.,0.,1.)); #43521=DIRECTION('ref_axis',(1.,0.,0.)); #43522=DIRECTION('',(4.94806919052994E-16,1.,0.)); #43523=DIRECTION('',(4.94806919052994E-16,1.,0.)); #43524=DIRECTION('',(4.94806919052994E-16,1.,0.)); #43525=DIRECTION('',(4.94806919052994E-16,1.,0.)); #43526=DIRECTION('',(4.94806919052994E-16,1.,0.)); #43527=DIRECTION('center_axis',(0.,0.,-1.)); #43528=DIRECTION('ref_axis',(1.,0.,0.)); #43529=DIRECTION('',(-4.94806919052994E-16,-1.,0.)); #43530=DIRECTION('',(-4.94806919052994E-16,-1.,0.)); #43531=DIRECTION('',(-4.94806919052994E-16,-1.,0.)); #43532=DIRECTION('',(-4.94806919052994E-16,-1.,0.)); #43533=DIRECTION('',(-4.94806919052994E-16,-1.,0.)); #43534=DIRECTION('center_axis',(0.,0.,-1.)); #43535=DIRECTION('ref_axis',(1.,0.,0.)); #43536=DIRECTION('',(-1.,5.46571335200077E-16,0.)); #43537=DIRECTION('center_axis',(0.,0.,-1.)); #43538=DIRECTION('ref_axis',(4.44089209850064E-15,-1.,0.)); #43539=DIRECTION('',(1.85552594644873E-16,1.,0.)); #43540=DIRECTION('',(1.85552594644873E-16,1.,0.)); #43541=DIRECTION('',(1.85552594644873E-16,1.,0.)); #43542=DIRECTION('',(1.85552594644873E-16,1.,0.)); #43543=DIRECTION('',(-1.85552594644873E-16,-1.,0.)); #43544=DIRECTION('center_axis',(0.,0.,1.)); #43545=DIRECTION('ref_axis',(8.88178419700128E-15,-1.,0.)); #43546=DIRECTION('',(1.,-5.46571335200077E-16,0.)); #43547=DIRECTION('center_axis',(0.,0.,1.)); #43548=DIRECTION('ref_axis',(1.,0.,0.)); #43549=DIRECTION('',(4.94806919052994E-16,1.,0.)); #43550=DIRECTION('center_axis',(1.,-1.85552594644873E-16,0.)); #43551=DIRECTION('ref_axis',(-1.85552594644873E-16,-1.,0.)); #43552=DIRECTION('',(0.,0.,-1.)); #43553=DIRECTION('center_axis',(-1.,4.94806919052994E-16,0.)); #43554=DIRECTION('ref_axis',(4.94806919052994E-16,1.,0.)); #43555=DIRECTION('',(0.,0.,-1.)); #43556=DIRECTION('center_axis',(1.,-4.94806919052994E-16,0.)); #43557=DIRECTION('ref_axis',(-4.94806919052994E-16,-1.,0.)); #43558=DIRECTION('',(0.,0.,-1.)); #43559=DIRECTION('center_axis',(5.46571335200077E-16,1.,0.)); #43560=DIRECTION('ref_axis',(1.,-5.46571335200077E-16,0.)); #43561=DIRECTION('',(0.,0.,-1.)); #43562=DIRECTION('',(0.,0.,-1.)); #43563=DIRECTION('center_axis',(-0.93969258046665,0.3420202541019,0.)); #43564=DIRECTION('ref_axis',(0.3420202541019,0.93969258046665,0.)); #43565=DIRECTION('',(0.3420202541019,0.93969258046665,0.)); #43566=DIRECTION('',(0.,0.,-1.)); #43567=DIRECTION('',(0.3420202541019,0.93969258046665,0.)); #43568=DIRECTION('',(0.,0.,-1.)); #43569=DIRECTION('center_axis',(0.937457404482118,0.348100006868214,0.)); #43570=DIRECTION('ref_axis',(0.348100006868214,-0.937457404482118,0.)); #43571=DIRECTION('',(0.348100006868214,-0.937457404482118,0.)); #43572=DIRECTION('',(0.,0.,-1.)); #43573=DIRECTION('',(0.348100006868214,-0.937457404482118,0.)); #43574=DIRECTION('center_axis',(0.,-1.,0.)); #43575=DIRECTION('ref_axis',(-1.,0.,0.)); #43576=DIRECTION('',(-1.,0.,0.)); #43577=DIRECTION('',(-1.,0.,0.)); #43578=DIRECTION('center_axis',(0.,-1.,0.)); #43579=DIRECTION('ref_axis',(-1.,0.,0.)); #43580=DIRECTION('',(-1.,0.,0.)); #43581=DIRECTION('',(0.,0.,-1.)); #43582=DIRECTION('',(-1.,0.,0.)); #43583=DIRECTION('',(0.,0.,-1.)); #43584=DIRECTION('center_axis',(0.931813686030705,-0.362936984235378,0.)); #43585=DIRECTION('ref_axis',(-0.362936984235378,-0.931813686030705,0.)); #43586=DIRECTION('',(-0.362936984235378,-0.931813686030705,0.)); #43587=DIRECTION('',(0.,0.,-1.)); #43588=DIRECTION('',(-0.362936984235378,-0.931813686030705,0.)); #43589=DIRECTION('center_axis',(0.,1.,0.)); #43590=DIRECTION('ref_axis',(1.,0.,0.)); #43591=DIRECTION('',(1.,0.,0.)); #43592=DIRECTION('',(0.,0.,-1.)); #43593=DIRECTION('',(1.,0.,0.)); #43594=DIRECTION('center_axis',(-0.939875797120872,0.341516450535556,0.)); #43595=DIRECTION('ref_axis',(0.341516450535556,0.939875797120872,0.)); #43596=DIRECTION('',(0.341516450535556,0.939875797120872,0.)); #43597=DIRECTION('',(0.,0.,-1.)); #43598=DIRECTION('',(0.341516450535556,0.939875797120872,0.)); #43599=DIRECTION('center_axis',(0.,1.,0.)); #43600=DIRECTION('ref_axis',(1.,0.,0.)); #43601=DIRECTION('',(1.,0.,0.)); #43602=DIRECTION('',(0.,0.,-1.)); #43603=DIRECTION('',(1.,0.,0.)); #43604=DIRECTION('center_axis',(0.933417920117808,0.358791006580358,0.)); #43605=DIRECTION('ref_axis',(0.358791006580358,-0.933417920117808,0.)); #43606=DIRECTION('',(0.358791006580358,-0.933417920117808,0.)); #43607=DIRECTION('',(0.,0.,-1.)); #43608=DIRECTION('',(0.358791006580358,-0.933417920117808,0.)); #43609=DIRECTION('center_axis',(0.,1.,0.)); #43610=DIRECTION('ref_axis',(1.,0.,0.)); #43611=DIRECTION('',(1.,0.,0.)); #43612=DIRECTION('',(0.,0.,-1.)); #43613=DIRECTION('',(1.,0.,0.)); #43614=DIRECTION('center_axis',(-0.92834561306339,-0.37171820335566,0.)); #43615=DIRECTION('ref_axis',(-0.37171820335566,0.92834561306339,0.)); #43616=DIRECTION('',(-0.37171820335566,0.92834561306339,0.)); #43617=DIRECTION('',(-0.37171820335566,0.928345613063389,0.)); #43618=DIRECTION('center_axis',(0.,0.,-1.)); #43619=DIRECTION('ref_axis',(-1.,0.,0.)); #43620=DIRECTION('',(0.,0.,-1.)); #43621=DIRECTION('',(0.,0.,-1.)); #43622=DIRECTION('',(0.,0.,-1.)); #43623=DIRECTION('',(0.,0.,-1.)); #43624=DIRECTION('',(0.,0.,-1.)); #43625=DIRECTION('',(0.,0.,-1.)); #43626=DIRECTION('',(0.,0.,-1.)); #43627=DIRECTION('center_axis',(0.,-1.,0.)); #43628=DIRECTION('ref_axis',(-1.,0.,0.)); #43629=DIRECTION('',(-1.,0.,0.)); #43630=DIRECTION('',(0.,0.,-1.)); #43631=DIRECTION('',(-1.,0.,0.)); #43632=DIRECTION('center_axis',(-1.,0.,0.)); #43633=DIRECTION('ref_axis',(0.,1.,0.)); #43634=DIRECTION('',(0.,1.,0.)); #43635=DIRECTION('',(0.,0.,-1.)); #43636=DIRECTION('',(0.,1.,0.)); #43637=DIRECTION('center_axis',(0.,1.,0.)); #43638=DIRECTION('ref_axis',(1.,0.,0.)); #43639=DIRECTION('',(1.,0.,0.)); #43640=DIRECTION('',(1.,0.,0.)); #43641=DIRECTION('',(0.,0.,-1.)); #43642=DIRECTION('',(0.,0.,-1.)); #43643=DIRECTION('',(0.,0.,-1.)); #43644=DIRECTION('',(0.,0.,-1.)); #43645=DIRECTION('',(0.,0.,-1.)); #43646=DIRECTION('',(0.,0.,-1.)); #43647=DIRECTION('',(0.,0.,-1.)); #43648=DIRECTION('center_axis',(0.,-1.,0.)); #43649=DIRECTION('ref_axis',(-1.,0.,0.)); #43650=DIRECTION('',(-1.,0.,0.)); #43651=DIRECTION('',(0.,0.,-1.)); #43652=DIRECTION('',(-1.,0.,0.)); #43653=DIRECTION('center_axis',(-1.,0.,0.)); #43654=DIRECTION('ref_axis',(0.,1.,0.)); #43655=DIRECTION('',(0.,1.,0.)); #43656=DIRECTION('',(0.,0.,-1.)); #43657=DIRECTION('',(0.,1.,0.)); #43658=DIRECTION('center_axis',(0.,1.,0.)); #43659=DIRECTION('ref_axis',(1.,0.,0.)); #43660=DIRECTION('',(1.,0.,0.)); #43661=DIRECTION('',(1.,0.,0.)); #43662=DIRECTION('center_axis',(0.,1.,0.)); #43663=DIRECTION('ref_axis',(1.,0.,0.)); #43664=DIRECTION('',(1.,0.,0.)); #43665=DIRECTION('',(0.,0.,-1.)); #43666=DIRECTION('',(1.,0.,0.)); #43667=DIRECTION('',(0.,0.,-1.)); #43668=DIRECTION('',(0.,0.,-1.)); #43669=DIRECTION('',(0.,0.,-1.)); #43670=DIRECTION('',(0.,0.,-1.)); #43671=DIRECTION('',(0.,0.,-1.)); #43672=DIRECTION('',(0.,0.,-1.)); #43673=DIRECTION('',(0.,0.,-1.)); #43674=DIRECTION('',(0.,0.,-1.)); #43675=DIRECTION('',(0.,0.,-1.)); #43676=DIRECTION('',(0.,0.,-1.)); #43677=DIRECTION('',(0.,0.,-1.)); #43678=DIRECTION('',(0.,0.,-1.)); #43679=DIRECTION('',(0.,0.,-1.)); #43680=DIRECTION('center_axis',(0.,-1.,0.)); #43681=DIRECTION('ref_axis',(-1.,0.,0.)); #43682=DIRECTION('',(-1.,0.,0.)); #43683=DIRECTION('',(0.,0.,-1.)); #43684=DIRECTION('',(-1.,0.,0.)); #43685=DIRECTION('center_axis',(1.,0.,0.)); #43686=DIRECTION('ref_axis',(0.,-1.,0.)); #43687=DIRECTION('',(0.,-1.,0.)); #43688=DIRECTION('',(0.,-1.,0.)); #43689=DIRECTION('center_axis',(0.,0.,1.)); #43690=DIRECTION('ref_axis',(1.,0.,0.)); #43691=DIRECTION('center_axis',(0.,0.,1.)); #43692=DIRECTION('ref_axis',(1.,0.,0.)); #43693=DIRECTION('center_axis',(0.,0.,-1.)); #43694=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,0.)); #43695=DIRECTION('',(-1.,4.86673106685E-16,0.)); #43696=DIRECTION('center_axis',(0.,0.,-1.)); #43697=DIRECTION('ref_axis',(0.707106781186547,-0.707106781186547,0.)); #43698=DIRECTION('',(-6.67803323082801E-16,-1.,0.)); #43699=DIRECTION('center_axis',(0.,0.,-1.)); #43700=DIRECTION('ref_axis',(0.707106781186552,0.707106781186543,0.)); #43701=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #43702=DIRECTION('center_axis',(0.,0.,-1.)); #43703=DIRECTION('ref_axis',(-0.707106781186546,0.707106781186549,0.)); #43704=DIRECTION('',(0.,1.,0.)); #43705=DIRECTION('',(1.,0.,0.)); #43706=DIRECTION('',(1.,0.,0.)); #43707=DIRECTION('',(-6.36725203038173E-15,-1.,0.)); #43708=DIRECTION('',(-1.,0.,0.)); #43709=DIRECTION('',(0.,1.,0.)); #43710=DIRECTION('center_axis',(0.,0.,1.)); #43711=DIRECTION('ref_axis',(1.,0.,0.)); #43712=DIRECTION('center_axis',(0.,0.,1.)); #43713=DIRECTION('ref_axis',(1.,0.,0.)); #43714=DIRECTION('',(0.,0.,-1.)); #43715=DIRECTION('',(0.,0.,-1.)); #43716=DIRECTION('',(0.,0.,-1.)); #43717=DIRECTION('',(0.,0.,-1.)); #43718=DIRECTION('center_axis',(0.551769085673727,-0.833996928108719,0.)); #43719=DIRECTION('ref_axis',(-0.833996928108719,-0.551769085673727,0.)); #43720=DIRECTION('',(-0.833996928108719,-0.551769085673727,0.)); #43721=DIRECTION('',(0.,0.,-1.)); #43722=DIRECTION('',(-0.833996928108719,-0.551769085673727,0.)); #43723=DIRECTION('center_axis',(0.933314371944145,0.359060277839956,0.)); #43724=DIRECTION('ref_axis',(0.359060277839956,-0.933314371944145,0.)); #43725=DIRECTION('',(0.359060277839956,-0.933314371944145,0.)); #43726=DIRECTION('',(0.,0.,-1.)); #43727=DIRECTION('',(0.359060277839955,-0.933314371944145,0.)); #43728=DIRECTION('',(0.,0.,-1.)); #43729=DIRECTION('',(0.,0.,-1.)); #43730=DIRECTION('',(0.,0.,-1.)); #43731=DIRECTION('',(0.,0.,-1.)); #43732=DIRECTION('',(0.,0.,-1.)); #43733=DIRECTION('center_axis',(-0.947737037130025,-0.319052516761742,0.)); #43734=DIRECTION('ref_axis',(-0.319052516761742,0.947737037130025,0.)); #43735=DIRECTION('',(-0.319052516761742,0.947737037130025,0.)); #43736=DIRECTION('',(0.,0.,-1.)); #43737=DIRECTION('',(-0.319052516761742,0.947737037130025,0.)); #43738=DIRECTION('center_axis',(0.348311177360029,-0.937378964840832,0.)); #43739=DIRECTION('ref_axis',(-0.937378964840832,-0.348311177360029,0.)); #43740=DIRECTION('',(-0.937378964840832,-0.348311177360029,0.)); #43741=DIRECTION('',(0.,0.,-1.)); #43742=DIRECTION('',(-0.937378964840832,-0.348311177360029,0.)); #43743=DIRECTION('',(0.,0.,-1.)); #43744=DIRECTION('',(0.,0.,-1.)); #43745=DIRECTION('',(0.,0.,-1.)); #43746=DIRECTION('',(0.,0.,-1.)); #43747=DIRECTION('',(0.,0.,-1.)); #43748=DIRECTION('',(0.,0.,-1.)); #43749=DIRECTION('',(0.,0.,-1.)); #43750=DIRECTION('',(0.,0.,-1.)); #43751=DIRECTION('',(0.,0.,-1.)); #43752=DIRECTION('',(0.,0.,-1.)); #43753=DIRECTION('',(0.,0.,-1.)); #43754=DIRECTION('',(0.,0.,-1.)); #43755=DIRECTION('',(0.,0.,-1.)); #43756=DIRECTION('',(0.,0.,-1.)); #43757=DIRECTION('',(0.,0.,-1.)); #43758=DIRECTION('',(0.,0.,-1.)); #43759=DIRECTION('',(0.,0.,-1.)); #43760=DIRECTION('',(0.,0.,-1.)); #43761=DIRECTION('',(0.,0.,-1.)); #43762=DIRECTION('',(0.,0.,-1.)); #43763=DIRECTION('',(0.,0.,-1.)); #43764=DIRECTION('center_axis',(0.,0.,1.)); #43765=DIRECTION('ref_axis',(1.,0.,0.)); #43766=DIRECTION('',(0.,0.,-1.)); #43767=DIRECTION('',(0.,0.,-1.)); #43768=DIRECTION('',(0.,0.,-1.)); #43769=DIRECTION('',(0.,0.,-1.)); #43770=DIRECTION('',(0.,0.,-1.)); #43771=DIRECTION('',(0.,0.,-1.)); #43772=DIRECTION('',(0.,0.,-1.)); #43773=DIRECTION('',(0.,0.,-1.)); #43774=DIRECTION('center_axis',(0.,0.,1.)); #43775=DIRECTION('ref_axis',(1.,0.,0.)); #43776=DIRECTION('',(0.,0.,-1.)); #43777=DIRECTION('',(0.,0.,-1.)); #43778=DIRECTION('center_axis',(0.,-1.,0.)); #43779=DIRECTION('ref_axis',(-1.,0.,0.)); #43780=DIRECTION('',(-1.,0.,0.)); #43781=DIRECTION('',(0.,0.,-1.)); #43782=DIRECTION('',(-1.,0.,0.)); #43783=DIRECTION('',(0.,0.,-1.)); #43784=DIRECTION('center_axis',(-1.,0.,0.)); #43785=DIRECTION('ref_axis',(0.,1.,0.)); #43786=DIRECTION('',(0.,1.,0.)); #43787=DIRECTION('',(0.,0.,-1.)); #43788=DIRECTION('',(0.,1.,0.)); #43789=DIRECTION('',(0.,0.,-1.)); #43790=DIRECTION('center_axis',(0.,1.,0.)); #43791=DIRECTION('ref_axis',(1.,0.,0.)); #43792=DIRECTION('',(1.,0.,0.)); #43793=DIRECTION('',(0.,0.,-1.)); #43794=DIRECTION('',(1.,0.,0.)); #43795=DIRECTION('',(0.,0.,-1.)); #43796=DIRECTION('center_axis',(1.,0.,0.)); #43797=DIRECTION('ref_axis',(0.,-1.,0.)); #43798=DIRECTION('',(0.,-1.,0.)); #43799=DIRECTION('',(0.,-1.,0.)); #43800=DIRECTION('',(0.,0.,-1.)); #43801=DIRECTION('',(0.,0.,-1.)); #43802=DIRECTION('center_axis',(0.,-1.,0.)); #43803=DIRECTION('ref_axis',(-1.,0.,0.)); #43804=DIRECTION('',(-1.,0.,0.)); #43805=DIRECTION('',(0.,0.,-1.)); #43806=DIRECTION('',(-1.,0.,0.)); #43807=DIRECTION('',(0.,0.,-1.)); #43808=DIRECTION('center_axis',(-1.,0.,0.)); #43809=DIRECTION('ref_axis',(0.,1.,0.)); #43810=DIRECTION('',(0.,1.,0.)); #43811=DIRECTION('',(0.,0.,-1.)); #43812=DIRECTION('',(0.,1.,0.)); #43813=DIRECTION('',(0.,0.,-1.)); #43814=DIRECTION('center_axis',(0.,1.,0.)); #43815=DIRECTION('ref_axis',(1.,0.,0.)); #43816=DIRECTION('',(1.,0.,0.)); #43817=DIRECTION('',(0.,0.,-1.)); #43818=DIRECTION('',(1.,0.,0.)); #43819=DIRECTION('',(0.,0.,-1.)); #43820=DIRECTION('center_axis',(1.,0.,0.)); #43821=DIRECTION('ref_axis',(0.,-1.,0.)); #43822=DIRECTION('',(0.,-1.,0.)); #43823=DIRECTION('',(0.,-1.,0.)); #43824=DIRECTION('',(0.,0.,-1.)); #43825=DIRECTION('',(0.,0.,-1.)); #43826=DIRECTION('center_axis',(0.,-1.,0.)); #43827=DIRECTION('ref_axis',(-1.,0.,0.)); #43828=DIRECTION('',(-1.,0.,0.)); #43829=DIRECTION('',(0.,0.,-1.)); #43830=DIRECTION('',(-1.,0.,0.)); #43831=DIRECTION('',(0.,0.,-1.)); #43832=DIRECTION('center_axis',(-1.,0.,0.)); #43833=DIRECTION('ref_axis',(0.,1.,0.)); #43834=DIRECTION('',(0.,1.,0.)); #43835=DIRECTION('',(0.,0.,-1.)); #43836=DIRECTION('',(0.,1.,0.)); #43837=DIRECTION('',(0.,0.,-1.)); #43838=DIRECTION('center_axis',(0.,1.,0.)); #43839=DIRECTION('ref_axis',(1.,0.,0.)); #43840=DIRECTION('',(1.,0.,0.)); #43841=DIRECTION('',(0.,0.,-1.)); #43842=DIRECTION('',(1.,0.,0.)); #43843=DIRECTION('',(0.,0.,-1.)); #43844=DIRECTION('center_axis',(1.,0.,0.)); #43845=DIRECTION('ref_axis',(0.,-1.,0.)); #43846=DIRECTION('',(0.,-1.,0.)); #43847=DIRECTION('',(0.,-1.,0.)); #43848=DIRECTION('',(0.,0.,-1.)); #43849=DIRECTION('',(0.,0.,-1.)); #43850=DIRECTION('center_axis',(0.,-1.,0.)); #43851=DIRECTION('ref_axis',(-1.,0.,0.)); #43852=DIRECTION('',(-1.,0.,0.)); #43853=DIRECTION('',(0.,0.,-1.)); #43854=DIRECTION('',(-1.,0.,0.)); #43855=DIRECTION('',(0.,0.,-1.)); #43856=DIRECTION('center_axis',(-1.,0.,0.)); #43857=DIRECTION('ref_axis',(0.,1.,0.)); #43858=DIRECTION('',(0.,1.,0.)); #43859=DIRECTION('',(0.,0.,-1.)); #43860=DIRECTION('',(0.,1.,0.)); #43861=DIRECTION('',(0.,0.,-1.)); #43862=DIRECTION('center_axis',(1.69861850201879E-14,1.,0.)); #43863=DIRECTION('ref_axis',(1.,-1.69861850201879E-14,0.)); #43864=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43865=DIRECTION('',(0.,0.,-1.)); #43866=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43867=DIRECTION('',(0.,0.,-1.)); #43868=DIRECTION('center_axis',(1.,0.,0.)); #43869=DIRECTION('ref_axis',(0.,-1.,0.)); #43870=DIRECTION('',(0.,-1.,0.)); #43871=DIRECTION('',(0.,-1.,0.)); #43872=DIRECTION('',(0.,0.,-1.)); #43873=DIRECTION('',(0.,0.,-1.)); #43874=DIRECTION('center_axis',(0.,-1.,0.)); #43875=DIRECTION('ref_axis',(-1.,0.,0.)); #43876=DIRECTION('',(-1.,0.,0.)); #43877=DIRECTION('',(0.,0.,-1.)); #43878=DIRECTION('',(-1.,0.,0.)); #43879=DIRECTION('',(0.,0.,-1.)); #43880=DIRECTION('center_axis',(-1.,0.,0.)); #43881=DIRECTION('ref_axis',(0.,1.,0.)); #43882=DIRECTION('',(0.,1.,0.)); #43883=DIRECTION('',(0.,0.,-1.)); #43884=DIRECTION('',(0.,1.,0.)); #43885=DIRECTION('',(0.,0.,-1.)); #43886=DIRECTION('center_axis',(1.69861850201879E-14,1.,0.)); #43887=DIRECTION('ref_axis',(1.,-1.69861850201879E-14,0.)); #43888=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43889=DIRECTION('',(0.,0.,-1.)); #43890=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43891=DIRECTION('',(0.,0.,-1.)); #43892=DIRECTION('center_axis',(1.,0.,0.)); #43893=DIRECTION('ref_axis',(0.,-1.,0.)); #43894=DIRECTION('',(0.,-1.,0.)); #43895=DIRECTION('',(0.,-1.,0.)); #43896=DIRECTION('',(0.,0.,-1.)); #43897=DIRECTION('',(0.,0.,-1.)); #43898=DIRECTION('center_axis',(0.,-1.,0.)); #43899=DIRECTION('ref_axis',(-1.,0.,0.)); #43900=DIRECTION('',(-1.,0.,0.)); #43901=DIRECTION('',(0.,0.,-1.)); #43902=DIRECTION('',(-1.,0.,0.)); #43903=DIRECTION('',(0.,0.,-1.)); #43904=DIRECTION('center_axis',(-1.,0.,0.)); #43905=DIRECTION('ref_axis',(0.,1.,0.)); #43906=DIRECTION('',(0.,1.,0.)); #43907=DIRECTION('',(0.,0.,-1.)); #43908=DIRECTION('',(0.,1.,0.)); #43909=DIRECTION('',(0.,0.,-1.)); #43910=DIRECTION('center_axis',(1.69861850201879E-14,1.,0.)); #43911=DIRECTION('ref_axis',(1.,-1.69861850201879E-14,0.)); #43912=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43913=DIRECTION('',(0.,0.,-1.)); #43914=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43915=DIRECTION('',(0.,0.,-1.)); #43916=DIRECTION('center_axis',(1.,0.,0.)); #43917=DIRECTION('ref_axis',(0.,-1.,0.)); #43918=DIRECTION('',(0.,-1.,0.)); #43919=DIRECTION('',(0.,-1.,0.)); #43920=DIRECTION('',(0.,0.,-1.)); #43921=DIRECTION('',(0.,0.,-1.)); #43922=DIRECTION('center_axis',(0.,-1.,0.)); #43923=DIRECTION('ref_axis',(-1.,0.,0.)); #43924=DIRECTION('',(-1.,0.,0.)); #43925=DIRECTION('',(0.,0.,-1.)); #43926=DIRECTION('',(-1.,0.,0.)); #43927=DIRECTION('',(0.,0.,-1.)); #43928=DIRECTION('center_axis',(-1.,0.,0.)); #43929=DIRECTION('ref_axis',(0.,1.,0.)); #43930=DIRECTION('',(0.,1.,0.)); #43931=DIRECTION('',(0.,0.,-1.)); #43932=DIRECTION('',(0.,1.,0.)); #43933=DIRECTION('',(0.,0.,-1.)); #43934=DIRECTION('center_axis',(1.69861850201879E-14,1.,0.)); #43935=DIRECTION('ref_axis',(1.,-1.69861850201879E-14,0.)); #43936=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43937=DIRECTION('',(0.,0.,-1.)); #43938=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43939=DIRECTION('',(0.,0.,-1.)); #43940=DIRECTION('center_axis',(1.,0.,0.)); #43941=DIRECTION('ref_axis',(0.,-1.,0.)); #43942=DIRECTION('',(0.,-1.,0.)); #43943=DIRECTION('',(0.,-1.,0.)); #43944=DIRECTION('',(0.,0.,-1.)); #43945=DIRECTION('',(0.,0.,-1.)); #43946=DIRECTION('center_axis',(0.,-1.,0.)); #43947=DIRECTION('ref_axis',(-1.,0.,0.)); #43948=DIRECTION('',(-1.,0.,0.)); #43949=DIRECTION('',(0.,0.,-1.)); #43950=DIRECTION('',(-1.,0.,0.)); #43951=DIRECTION('',(0.,0.,-1.)); #43952=DIRECTION('center_axis',(-1.,0.,0.)); #43953=DIRECTION('ref_axis',(0.,1.,0.)); #43954=DIRECTION('',(0.,1.,0.)); #43955=DIRECTION('',(0.,0.,-1.)); #43956=DIRECTION('',(0.,1.,0.)); #43957=DIRECTION('',(0.,0.,-1.)); #43958=DIRECTION('center_axis',(1.69861850201879E-14,1.,0.)); #43959=DIRECTION('ref_axis',(1.,-1.69861850201879E-14,0.)); #43960=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43961=DIRECTION('',(0.,0.,-1.)); #43962=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43963=DIRECTION('',(0.,0.,-1.)); #43964=DIRECTION('center_axis',(1.,0.,0.)); #43965=DIRECTION('ref_axis',(0.,-1.,0.)); #43966=DIRECTION('',(0.,-1.,0.)); #43967=DIRECTION('',(0.,-1.,0.)); #43968=DIRECTION('',(0.,0.,-1.)); #43969=DIRECTION('',(0.,0.,-1.)); #43970=DIRECTION('center_axis',(0.,-1.,0.)); #43971=DIRECTION('ref_axis',(-1.,0.,0.)); #43972=DIRECTION('',(-1.,0.,0.)); #43973=DIRECTION('',(0.,0.,-1.)); #43974=DIRECTION('',(-1.,0.,0.)); #43975=DIRECTION('',(0.,0.,-1.)); #43976=DIRECTION('center_axis',(-1.,0.,0.)); #43977=DIRECTION('ref_axis',(0.,1.,0.)); #43978=DIRECTION('',(0.,1.,0.)); #43979=DIRECTION('',(0.,0.,-1.)); #43980=DIRECTION('',(0.,1.,0.)); #43981=DIRECTION('',(0.,0.,-1.)); #43982=DIRECTION('center_axis',(1.69861850201879E-14,1.,0.)); #43983=DIRECTION('ref_axis',(1.,-1.69861850201879E-14,0.)); #43984=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43985=DIRECTION('',(0.,0.,-1.)); #43986=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #43987=DIRECTION('',(0.,0.,-1.)); #43988=DIRECTION('center_axis',(1.,0.,0.)); #43989=DIRECTION('ref_axis',(0.,-1.,0.)); #43990=DIRECTION('',(0.,-1.,0.)); #43991=DIRECTION('',(0.,-1.,0.)); #43992=DIRECTION('',(0.,0.,-1.)); #43993=DIRECTION('',(0.,0.,-1.)); #43994=DIRECTION('center_axis',(0.,-1.,0.)); #43995=DIRECTION('ref_axis',(-1.,0.,0.)); #43996=DIRECTION('',(-1.,0.,0.)); #43997=DIRECTION('',(0.,0.,-1.)); #43998=DIRECTION('',(-1.,0.,0.)); #43999=DIRECTION('',(0.,0.,-1.)); #44000=DIRECTION('center_axis',(-1.,0.,0.)); #44001=DIRECTION('ref_axis',(0.,1.,0.)); #44002=DIRECTION('',(0.,1.,0.)); #44003=DIRECTION('',(0.,0.,-1.)); #44004=DIRECTION('',(0.,1.,0.)); #44005=DIRECTION('',(0.,0.,-1.)); #44006=DIRECTION('center_axis',(0.,1.,0.)); #44007=DIRECTION('ref_axis',(1.,0.,0.)); #44008=DIRECTION('',(1.,0.,0.)); #44009=DIRECTION('',(0.,0.,-1.)); #44010=DIRECTION('',(1.,0.,0.)); #44011=DIRECTION('',(0.,0.,-1.)); #44012=DIRECTION('center_axis',(1.,0.,0.)); #44013=DIRECTION('ref_axis',(0.,-1.,0.)); #44014=DIRECTION('',(0.,-1.,0.)); #44015=DIRECTION('',(0.,-1.,0.)); #44016=DIRECTION('',(0.,0.,-1.)); #44017=DIRECTION('',(0.,0.,-1.)); #44018=DIRECTION('center_axis',(0.,-1.,0.)); #44019=DIRECTION('ref_axis',(-1.,0.,0.)); #44020=DIRECTION('',(-1.,0.,0.)); #44021=DIRECTION('',(0.,0.,-1.)); #44022=DIRECTION('',(-1.,0.,0.)); #44023=DIRECTION('',(0.,0.,-1.)); #44024=DIRECTION('center_axis',(-1.,0.,0.)); #44025=DIRECTION('ref_axis',(0.,1.,0.)); #44026=DIRECTION('',(0.,1.,0.)); #44027=DIRECTION('',(0.,0.,-1.)); #44028=DIRECTION('',(0.,1.,0.)); #44029=DIRECTION('',(0.,0.,-1.)); #44030=DIRECTION('center_axis',(0.,1.,0.)); #44031=DIRECTION('ref_axis',(1.,0.,0.)); #44032=DIRECTION('',(1.,0.,0.)); #44033=DIRECTION('',(0.,0.,-1.)); #44034=DIRECTION('',(1.,0.,0.)); #44035=DIRECTION('',(0.,0.,-1.)); #44036=DIRECTION('center_axis',(1.,0.,0.)); #44037=DIRECTION('ref_axis',(0.,-1.,0.)); #44038=DIRECTION('',(0.,-1.,0.)); #44039=DIRECTION('',(0.,-1.,0.)); #44040=DIRECTION('',(0.,0.,-1.)); #44041=DIRECTION('',(0.,0.,-1.)); #44042=DIRECTION('center_axis',(0.,-1.,0.)); #44043=DIRECTION('ref_axis',(-1.,0.,0.)); #44044=DIRECTION('',(-1.,0.,0.)); #44045=DIRECTION('',(0.,0.,-1.)); #44046=DIRECTION('',(-1.,0.,0.)); #44047=DIRECTION('',(0.,0.,-1.)); #44048=DIRECTION('center_axis',(-1.,0.,0.)); #44049=DIRECTION('ref_axis',(0.,1.,0.)); #44050=DIRECTION('',(0.,1.,0.)); #44051=DIRECTION('',(0.,0.,-1.)); #44052=DIRECTION('',(0.,1.,0.)); #44053=DIRECTION('',(0.,0.,-1.)); #44054=DIRECTION('center_axis',(1.69861850201879E-14,1.,0.)); #44055=DIRECTION('ref_axis',(1.,-1.69861850201879E-14,0.)); #44056=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #44057=DIRECTION('',(0.,0.,-1.)); #44058=DIRECTION('',(1.,-1.69861850201879E-14,0.)); #44059=DIRECTION('',(0.,0.,-1.)); #44060=DIRECTION('center_axis',(1.,0.,0.)); #44061=DIRECTION('ref_axis',(0.,-1.,0.)); #44062=DIRECTION('',(0.,-1.,0.)); #44063=DIRECTION('',(0.,-1.,0.)); #44064=DIRECTION('',(0.,0.,-1.)); #44065=DIRECTION('',(0.,0.,-1.)); #44066=DIRECTION('center_axis',(0.,-1.,0.)); #44067=DIRECTION('ref_axis',(-1.,0.,0.)); #44068=DIRECTION('',(-1.,0.,0.)); #44069=DIRECTION('',(0.,0.,-1.)); #44070=DIRECTION('',(-1.,0.,0.)); #44071=DIRECTION('',(0.,0.,-1.)); #44072=DIRECTION('center_axis',(-1.,0.,0.)); #44073=DIRECTION('ref_axis',(0.,1.,0.)); #44074=DIRECTION('',(0.,1.,0.)); #44075=DIRECTION('',(0.,0.,-1.)); #44076=DIRECTION('',(0.,1.,0.)); #44077=DIRECTION('',(0.,0.,-1.)); #44078=DIRECTION('center_axis',(0.,1.,0.)); #44079=DIRECTION('ref_axis',(1.,0.,0.)); #44080=DIRECTION('',(1.,0.,0.)); #44081=DIRECTION('',(0.,0.,-1.)); #44082=DIRECTION('',(1.,0.,0.)); #44083=DIRECTION('',(0.,0.,-1.)); #44084=DIRECTION('center_axis',(1.,0.,0.)); #44085=DIRECTION('ref_axis',(0.,-1.,0.)); #44086=DIRECTION('',(0.,-1.,0.)); #44087=DIRECTION('',(0.,-1.,0.)); #44088=DIRECTION('',(0.,0.,-1.)); #44089=DIRECTION('',(0.,0.,-1.)); #44090=DIRECTION('center_axis',(0.,-1.,0.)); #44091=DIRECTION('ref_axis',(-1.,0.,0.)); #44092=DIRECTION('',(-1.,0.,0.)); #44093=DIRECTION('',(0.,0.,-1.)); #44094=DIRECTION('',(-1.,0.,0.)); #44095=DIRECTION('',(0.,0.,-1.)); #44096=DIRECTION('center_axis',(-1.,0.,0.)); #44097=DIRECTION('ref_axis',(0.,1.,0.)); #44098=DIRECTION('',(0.,1.,0.)); #44099=DIRECTION('',(0.,0.,-1.)); #44100=DIRECTION('',(0.,1.,0.)); #44101=DIRECTION('',(0.,0.,-1.)); #44102=DIRECTION('center_axis',(0.,1.,0.)); #44103=DIRECTION('ref_axis',(1.,0.,0.)); #44104=DIRECTION('',(1.,0.,0.)); #44105=DIRECTION('',(0.,0.,-1.)); #44106=DIRECTION('',(1.,0.,0.)); #44107=DIRECTION('',(0.,0.,-1.)); #44108=DIRECTION('center_axis',(1.,0.,0.)); #44109=DIRECTION('ref_axis',(0.,-1.,0.)); #44110=DIRECTION('',(0.,-1.,0.)); #44111=DIRECTION('',(0.,-1.,0.)); #44112=DIRECTION('',(0.,0.,-1.)); #44113=DIRECTION('',(0.,0.,-1.)); #44114=DIRECTION('center_axis',(0.,-1.,0.)); #44115=DIRECTION('ref_axis',(-1.,0.,0.)); #44116=DIRECTION('',(-1.,0.,0.)); #44117=DIRECTION('',(0.,0.,-1.)); #44118=DIRECTION('',(-1.,0.,0.)); #44119=DIRECTION('',(0.,0.,-1.)); #44120=DIRECTION('center_axis',(-1.,0.,0.)); #44121=DIRECTION('ref_axis',(0.,1.,0.)); #44122=DIRECTION('',(0.,1.,0.)); #44123=DIRECTION('',(0.,0.,-1.)); #44124=DIRECTION('',(0.,1.,0.)); #44125=DIRECTION('',(0.,0.,-1.)); #44126=DIRECTION('center_axis',(0.,1.,0.)); #44127=DIRECTION('ref_axis',(1.,0.,0.)); #44128=DIRECTION('',(1.,0.,0.)); #44129=DIRECTION('',(0.,0.,-1.)); #44130=DIRECTION('',(1.,0.,0.)); #44131=DIRECTION('',(0.,0.,-1.)); #44132=DIRECTION('center_axis',(1.,0.,0.)); #44133=DIRECTION('ref_axis',(0.,-1.,0.)); #44134=DIRECTION('',(0.,-1.,0.)); #44135=DIRECTION('',(0.,-1.,0.)); #44136=DIRECTION('',(0.,0.,-1.)); #44137=DIRECTION('',(0.,0.,-1.)); #44138=DIRECTION('center_axis',(0.,-1.,0.)); #44139=DIRECTION('ref_axis',(-1.,0.,0.)); #44140=DIRECTION('',(-1.,0.,0.)); #44141=DIRECTION('',(0.,0.,-1.)); #44142=DIRECTION('',(-1.,0.,0.)); #44143=DIRECTION('',(0.,0.,-1.)); #44144=DIRECTION('center_axis',(-1.,0.,0.)); #44145=DIRECTION('ref_axis',(0.,1.,0.)); #44146=DIRECTION('',(0.,1.,0.)); #44147=DIRECTION('',(0.,0.,-1.)); #44148=DIRECTION('',(0.,1.,0.)); #44149=DIRECTION('',(0.,0.,-1.)); #44150=DIRECTION('center_axis',(0.,1.,0.)); #44151=DIRECTION('ref_axis',(1.,0.,0.)); #44152=DIRECTION('',(1.,0.,0.)); #44153=DIRECTION('',(0.,0.,-1.)); #44154=DIRECTION('',(1.,0.,0.)); #44155=DIRECTION('',(0.,0.,-1.)); #44156=DIRECTION('center_axis',(1.,0.,0.)); #44157=DIRECTION('ref_axis',(0.,-1.,0.)); #44158=DIRECTION('',(0.,-1.,0.)); #44159=DIRECTION('',(0.,-1.,0.)); #44160=DIRECTION('',(0.,0.,-1.)); #44161=DIRECTION('',(0.,0.,-1.)); #44162=DIRECTION('center_axis',(0.,-1.,0.)); #44163=DIRECTION('ref_axis',(-1.,0.,0.)); #44164=DIRECTION('',(-1.,0.,0.)); #44165=DIRECTION('',(0.,0.,-1.)); #44166=DIRECTION('',(-1.,0.,0.)); #44167=DIRECTION('',(0.,0.,-1.)); #44168=DIRECTION('center_axis',(-1.,0.,0.)); #44169=DIRECTION('ref_axis',(0.,1.,0.)); #44170=DIRECTION('',(0.,1.,0.)); #44171=DIRECTION('',(0.,0.,-1.)); #44172=DIRECTION('',(0.,1.,0.)); #44173=DIRECTION('',(0.,0.,-1.)); #44174=DIRECTION('center_axis',(0.,1.,0.)); #44175=DIRECTION('ref_axis',(1.,0.,0.)); #44176=DIRECTION('',(1.,0.,0.)); #44177=DIRECTION('',(0.,0.,-1.)); #44178=DIRECTION('',(1.,0.,0.)); #44179=DIRECTION('',(0.,0.,-1.)); #44180=DIRECTION('center_axis',(1.,0.,0.)); #44181=DIRECTION('ref_axis',(0.,-1.,0.)); #44182=DIRECTION('',(0.,-1.,0.)); #44183=DIRECTION('',(0.,-1.,0.)); #44184=DIRECTION('',(0.,0.,-1.)); #44185=DIRECTION('',(0.,0.,-1.)); #44186=DIRECTION('center_axis',(0.,-1.,0.)); #44187=DIRECTION('ref_axis',(-1.,0.,0.)); #44188=DIRECTION('',(-1.,0.,0.)); #44189=DIRECTION('',(0.,0.,-1.)); #44190=DIRECTION('',(-1.,0.,0.)); #44191=DIRECTION('',(0.,0.,-1.)); #44192=DIRECTION('center_axis',(-1.,0.,0.)); #44193=DIRECTION('ref_axis',(0.,1.,0.)); #44194=DIRECTION('',(0.,1.,0.)); #44195=DIRECTION('',(0.,0.,-1.)); #44196=DIRECTION('',(0.,1.,0.)); #44197=DIRECTION('',(0.,0.,-1.)); #44198=DIRECTION('center_axis',(0.,1.,0.)); #44199=DIRECTION('ref_axis',(1.,0.,0.)); #44200=DIRECTION('',(1.,0.,0.)); #44201=DIRECTION('',(0.,0.,-1.)); #44202=DIRECTION('',(1.,0.,0.)); #44203=DIRECTION('',(0.,0.,-1.)); #44204=DIRECTION('center_axis',(1.,0.,0.)); #44205=DIRECTION('ref_axis',(0.,-1.,0.)); #44206=DIRECTION('',(0.,-1.,0.)); #44207=DIRECTION('',(0.,-1.,0.)); #44208=DIRECTION('center_axis',(0.,1.,0.)); #44209=DIRECTION('ref_axis',(1.,0.,0.)); #44210=DIRECTION('',(0.,0.,-1.)); #44211=DIRECTION('',(1.,0.,0.)); #44212=DIRECTION('',(0.,0.,-1.)); #44213=DIRECTION('',(0.,0.,-1.)); #44214=DIRECTION('',(0.,0.,-1.)); #44215=DIRECTION('center_axis',(-1.,0.,0.)); #44216=DIRECTION('ref_axis',(0.,1.,0.)); #44217=DIRECTION('',(0.,0.,-1.)); #44218=DIRECTION('',(0.,1.,0.)); #44219=DIRECTION('',(0.,0.,-1.)); #44220=DIRECTION('',(0.,0.,-1.)); #44221=DIRECTION('center_axis',(0.,-1.,0.)); #44222=DIRECTION('ref_axis',(-1.,0.,0.)); #44223=DIRECTION('',(0.,0.,-1.)); #44224=DIRECTION('',(-1.,0.,0.)); #44225=DIRECTION('',(0.,0.,-1.)); #44226=DIRECTION('',(0.,0.,-1.)); #44227=DIRECTION('center_axis',(1.,-6.36725203038173E-15,0.)); #44228=DIRECTION('ref_axis',(-6.36725203038173E-15,-1.,0.)); #44229=DIRECTION('',(0.,0.,-1.)); #44230=DIRECTION('',(-6.36725203038173E-15,-1.,0.)); #44231=DIRECTION('',(0.,0.,-1.)); #44232=DIRECTION('',(0.,0.,-1.)); #44233=DIRECTION('center_axis',(0.,1.,0.)); #44234=DIRECTION('ref_axis',(1.,0.,0.)); #44235=DIRECTION('',(0.,0.,-1.)); #44236=DIRECTION('',(1.,0.,0.)); #44237=DIRECTION('center_axis',(0.,0.,1.)); #44238=DIRECTION('ref_axis',(1.,0.,0.)); #44239=DIRECTION('center_axis',(0.,0.,1.)); #44240=DIRECTION('ref_axis',(1.,0.,0.)); #44241=DIRECTION('center_axis',(0.,0.,1.)); #44242=DIRECTION('ref_axis',(1.,0.,0.)); #44243=DIRECTION('center_axis',(0.,0.,1.)); #44244=DIRECTION('ref_axis',(1.,0.,0.)); #44245=DIRECTION('center_axis',(0.,0.,1.)); #44246=DIRECTION('ref_axis',(1.,0.,0.)); #44247=DIRECTION('center_axis',(0.,0.,1.)); #44248=DIRECTION('ref_axis',(1.,0.,0.)); #44249=DIRECTION('center_axis',(0.,0.,1.)); #44250=DIRECTION('ref_axis',(1.,0.,0.)); #44251=DIRECTION('center_axis',(0.,0.,1.)); #44252=DIRECTION('ref_axis',(1.,0.,0.)); #44253=DIRECTION('center_axis',(0.,0.,1.)); #44254=DIRECTION('ref_axis',(1.,0.,0.)); #44255=DIRECTION('center_axis',(0.,0.,1.)); #44256=DIRECTION('ref_axis',(1.,0.,0.)); #44257=DIRECTION('center_axis',(0.,0.,1.)); #44258=DIRECTION('ref_axis',(1.,0.,0.)); #44259=DIRECTION('center_axis',(0.,0.,1.)); #44260=DIRECTION('ref_axis',(1.,0.,0.)); #44261=DIRECTION('center_axis',(0.,0.,1.)); #44262=DIRECTION('ref_axis',(1.,0.,0.)); #44263=DIRECTION('center_axis',(0.,0.,1.)); #44264=DIRECTION('ref_axis',(1.,0.,0.)); #44265=DIRECTION('center_axis',(0.,0.,1.)); #44266=DIRECTION('ref_axis',(1.,0.,0.)); #44267=DIRECTION('center_axis',(0.,0.,1.)); #44268=DIRECTION('ref_axis',(1.,0.,0.)); #44269=DIRECTION('center_axis',(0.,0.,1.)); #44270=DIRECTION('ref_axis',(1.,0.,0.)); #44271=DIRECTION('center_axis',(0.,0.,1.)); #44272=DIRECTION('ref_axis',(1.,0.,0.)); #44273=DIRECTION('center_axis',(0.,0.,1.)); #44274=DIRECTION('ref_axis',(1.,0.,0.)); #44275=DIRECTION('center_axis',(0.,0.,1.)); #44276=DIRECTION('ref_axis',(1.,0.,0.)); #44277=DIRECTION('center_axis',(0.,0.,1.)); #44278=DIRECTION('ref_axis',(1.,0.,0.)); #44279=DIRECTION('center_axis',(4.94806919052994E-16,1.,0.)); #44280=DIRECTION('ref_axis',(1.,0.,-6.28036983473511E-15)); #44281=DIRECTION('center_axis',(-0.707106781186547,-0.707106781186548,0.)); #44282=DIRECTION('ref_axis',(0.707106781186547,-0.707106781186547,-4.44089209850064E-15)); #44283=DIRECTION('',(-4.94806919052994E-16,-1.,0.)); #44284=DIRECTION('center_axis',(-0.707106781186547,0.707106781186548,0.)); #44285=DIRECTION('ref_axis',(0.707106781186548,0.707106781186547,-4.44089209850063E-15)); #44286=DIRECTION('',(4.94806919052994E-16,1.,0.)); #44287=DIRECTION('center_axis',(0.707106781186547,-3.49881327840395E-16, -0.707106781186548)); #44288=DIRECTION('ref_axis',(4.94806919052994E-16,1.,0.)); #44289=DIRECTION('',(0.577350269189626,0.577350269189626,0.577350269189625)); #44290=DIRECTION('',(0.577350269189626,-0.577350269189626,0.577350269189626)); #44291=DIRECTION('center_axis',(0.707106781186547,-0.707106781186548,0.)); #44292=DIRECTION('ref_axis',(0.,0.,-1.)); #44293=DIRECTION('',(0.577350269189624,0.577350269189624,-0.577350269189629)); #44294=DIRECTION('',(0.,0.,1.)); #44295=DIRECTION('center_axis',(4.94806919052994E-16,1.,-4.93038065763132E-32)); #44296=DIRECTION('ref_axis',(1.,0.,3.14018491736756E-15)); #44297=DIRECTION('center_axis',(-0.707106781186547,-0.707106781186548,0.)); #44298=DIRECTION('ref_axis',(0.707106781186547,-0.707106781186547,2.22044604925032E-15)); #44299=DIRECTION('',(-4.94806919052994E-16,-1.,2.46519032881564E-32)); #44300=DIRECTION('center_axis',(-0.707106781186547,0.707106781186548,0.)); #44301=DIRECTION('ref_axis',(0.707106781186548,0.707106781186547,2.22044604925032E-15)); #44302=DIRECTION('',(4.94806919052994E-16,1.,-2.46519032881566E-32)); #44303=DIRECTION('center_axis',(0.707106781186547,-3.49881327840395E-16, -0.707106781186548)); #44304=DIRECTION('ref_axis',(4.94806919052994E-16,1.,0.)); #44305=DIRECTION('',(0.577350269189626,0.577350269189626,0.577350269189625)); #44306=DIRECTION('',(0.577350269189626,-0.577350269189626,0.577350269189626)); #44307=DIRECTION('center_axis',(0.707106781186547,-0.707106781186548,0.)); #44308=DIRECTION('ref_axis',(0.,0.,-1.)); #44309=DIRECTION('',(0.577350269189628,0.577350269189628,-0.577350269189622)); #44310=DIRECTION('',(0.,0.,1.)); #44311=DIRECTION('center_axis',(0.707106781186544,-3.49881327840394E-16, 0.707106781186551)); #44312=DIRECTION('ref_axis',(-4.94806919052994E-16,-1.,0.)); #44313=DIRECTION('',(0.577350269189628,-0.577350269189628,-0.577350269189622)); #44314=DIRECTION('center_axis',(0.707106781186547,0.707106781186548,0.)); #44315=DIRECTION('ref_axis',(0.,0.,1.)); #44316=DIRECTION('center_axis',(1.,-4.94806919052994E-16,0.)); #44317=DIRECTION('ref_axis',(-4.94806919052994E-16,-1.,0.)); #44318=DIRECTION('',(0.,0.,-1.)); #44319=DIRECTION('center_axis',(0.70710678118655,-3.49881327840397E-16, 0.707106781186545)); #44320=DIRECTION('ref_axis',(-4.94806919052994E-16,-1.,0.)); #44321=DIRECTION('',(0.577350269189624,-0.577350269189624,-0.577350269189629)); #44322=DIRECTION('center_axis',(0.707106781186547,0.707106781186548,0.)); #44323=DIRECTION('ref_axis',(0.,0.,1.)); #44324=DIRECTION('center_axis',(1.,-4.94806919052994E-16,0.)); #44325=DIRECTION('ref_axis',(-4.94806919052994E-16,-1.,0.)); #44326=DIRECTION('',(0.,0.,-1.)); #44327=DIRECTION('center_axis',(-1.85552594644873E-16,-1.,0.)); #44328=DIRECTION('ref_axis',(-1.,0.,0.)); #44329=DIRECTION('center_axis',(0.707106781186547,0.707106781186548,0.)); #44330=DIRECTION('ref_axis',(-0.707106781186547,0.707106781186547,0.)); #44331=DIRECTION('',(1.85552594644873E-16,1.,0.)); #44332=DIRECTION('center_axis',(0.707106781186547,-0.707106781186548,0.)); #44333=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186547,0.)); #44334=DIRECTION('',(-1.85552594644873E-16,-1.,-1.74315279842105E-32)); #44335=DIRECTION('center_axis',(-0.707106781186547,1.31205497940148E-16, -0.707106781186548)); #44336=DIRECTION('ref_axis',(-1.85552594644873E-16,-1.,0.)); #44337=DIRECTION('',(-0.577350269189626,-0.577350269189626,0.577350269189626)); #44338=DIRECTION('',(-0.577350269189626,0.577350269189626,0.577350269189626)); #44339=DIRECTION('center_axis',(-0.707106781186547,0.707106781186548,0.)); #44340=DIRECTION('ref_axis',(0.,0.,-1.)); #44341=DIRECTION('',(-0.577350269189626,-0.577350269189626,-0.577350269189625)); #44342=DIRECTION('',(0.,0.,1.)); #44343=DIRECTION('center_axis',(-1.85552594644873E-16,-1.,0.)); #44344=DIRECTION('ref_axis',(-1.,0.,0.)); #44345=DIRECTION('center_axis',(0.707106781186547,0.707106781186548,0.)); #44346=DIRECTION('ref_axis',(-0.707106781186547,0.707106781186547,0.)); #44347=DIRECTION('',(1.85552594644873E-16,1.,0.)); #44348=DIRECTION('center_axis',(0.707106781186547,-0.707106781186548,0.)); #44349=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186547,0.)); #44350=DIRECTION('',(-1.85552594644873E-16,-1.,-1.74315279842105E-32)); #44351=DIRECTION('center_axis',(-0.707106781186547,1.31205497940148E-16, -0.707106781186548)); #44352=DIRECTION('ref_axis',(-1.85552594644873E-16,-1.,0.)); #44353=DIRECTION('',(-0.577350269189626,-0.577350269189626,0.577350269189626)); #44354=DIRECTION('',(-0.577350269189626,0.577350269189626,0.577350269189626)); #44355=DIRECTION('center_axis',(-0.707106781186547,0.707106781186548,0.)); #44356=DIRECTION('ref_axis',(0.,0.,-1.)); #44357=DIRECTION('',(-0.577350269189626,-0.577350269189626,-0.577350269189625)); #44358=DIRECTION('center_axis',(-0.707106781186547,1.31205497940148E-16, 0.707106781186548)); #44359=DIRECTION('ref_axis',(1.85552594644873E-16,1.,0.)); #44360=DIRECTION('',(-0.577350269189626,0.577350269189626,-0.577350269189625)); #44361=DIRECTION('center_axis',(-0.707106781186547,-0.707106781186548,0.)); #44362=DIRECTION('ref_axis',(0.,0.,1.)); #44363=DIRECTION('',(0.,0.,-1.)); #44364=DIRECTION('center_axis',(-1.,1.85552594644873E-16,0.)); #44365=DIRECTION('ref_axis',(1.85552594644873E-16,1.,0.)); #44366=DIRECTION('',(0.,0.,-1.)); #44367=DIRECTION('center_axis',(-1.,1.85552594644873E-16,0.)); #44368=DIRECTION('ref_axis',(1.85552594644873E-16,1.,0.)); #44369=DIRECTION('',(0.,0.,-1.)); #44370=DIRECTION('center_axis',(-0.707106781186547,1.31205497940148E-16, 0.707106781186548)); #44371=DIRECTION('ref_axis',(1.85552594644873E-16,1.,0.)); #44372=DIRECTION('',(-0.577350269189626,0.577350269189626,-0.577350269189625)); #44373=DIRECTION('center_axis',(-0.707106781186547,-0.707106781186548,0.)); #44374=DIRECTION('ref_axis',(0.,0.,1.)); #44375=DIRECTION('center_axis',(0.,0.,-1.)); #44376=DIRECTION('ref_axis',(1.,0.,0.)); #44377=DIRECTION('center_axis',(0.,0.,-1.)); #44378=DIRECTION('ref_axis',(8.88178419700128E-15,-1.,0.)); #44379=DIRECTION('center_axis',(0.,0.,-1.)); #44380=DIRECTION('ref_axis',(4.44089209850064E-15,-1.,0.)); #44381=DIRECTION('',(0.,0.,-1.)); #44382=DIRECTION('center_axis',(-5.46571335200077E-16,-1.,0.)); #44383=DIRECTION('ref_axis',(-1.,5.46571335200077E-16,0.)); #44384=DIRECTION('',(0.,0.,-1.)); #44385=DIRECTION('center_axis',(0.,0.,-1.)); #44386=DIRECTION('ref_axis',(1.,0.,0.)); #44387=DIRECTION('center_axis',(-1.,0.,0.)); #44388=DIRECTION('ref_axis',(0.,-1.,0.)); #44389=DIRECTION('',(0.,0.,-1.)); #44390=DIRECTION('',(0.,-1.,0.)); #44391=DIRECTION('',(0.,0.,1.)); #44392=DIRECTION('center_axis',(0.,0.,1.)); #44393=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,0.)); #44394=DIRECTION('',(0.,0.,1.)); #44395=DIRECTION('center_axis',(0.,0.,1.)); #44396=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,0.)); #44397=DIRECTION('center_axis',(-4.86673106685E-16,-1.,0.)); #44398=DIRECTION('ref_axis',(1.,-4.86673106685E-16,0.)); #44399=DIRECTION('',(0.,0.,-1.)); #44400=DIRECTION('',(1.,-4.86673106685E-16,0.)); #44401=DIRECTION('center_axis',(0.,0.,1.)); #44402=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #44403=DIRECTION('',(0.,0.,1.)); #44404=DIRECTION('center_axis',(0.,0.,1.)); #44405=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #44406=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44407=DIRECTION('ref_axis',(-1.,1.2166827667125E-16,0.)); #44408=DIRECTION('',(0.,0.,-1.)); #44409=DIRECTION('',(-1.,1.2166827667125E-16,0.)); #44410=DIRECTION('',(0.,0.,1.)); #44411=DIRECTION('center_axis',(0.,0.,1.)); #44412=DIRECTION('ref_axis',(-0.707106781186546,0.707106781186549,0.)); #44413=DIRECTION('center_axis',(0.,0.,1.)); #44414=DIRECTION('ref_axis',(-0.707106781186546,0.707106781186549,0.)); #44415=DIRECTION('center_axis',(0.,0.,-1.)); #44416=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,0.)); #44417=DIRECTION('',(-0.707106781186547,0.,-0.707106781186548)); #44418=DIRECTION('',(0.,0.70710678118654,0.707106781186555)); #44419=DIRECTION('center_axis',(-0.707106781186547,0.,0.707106781186548)); #44420=DIRECTION('ref_axis',(0.707106781186548,0.,0.707106781186547)); #44421=DIRECTION('',(-0.707106781186548,0.,-0.707106781186547)); #44422=DIRECTION('center_axis',(0.,0.,-1.)); #44423=DIRECTION('ref_axis',(-0.707106781186546,0.707106781186549,0.)); #44424=DIRECTION('',(0.,0.707106781186551,-0.707106781186544)); #44425=DIRECTION('center_axis',(8.60324634895218E-17,0.707106781186547, 0.707106781186548)); #44426=DIRECTION('ref_axis',(1.,0.,-1.2166827667125E-16)); #44427=DIRECTION('',(0.,0.707106781186548,-0.707106781186547)); #44428=DIRECTION('center_axis',(0.,0.,-1.)); #44429=DIRECTION('ref_axis',(0.707106781186552,0.707106781186543,0.)); #44430=DIRECTION('',(0.707106781186551,0.,-0.707106781186544)); #44431=DIRECTION('center_axis',(0.,0.,1.)); #44432=DIRECTION('ref_axis',(0.707106781186552,0.707106781186543,0.)); #44433=DIRECTION('center_axis',(0.707106781186549,-4.72208258250761E-16, 0.707106781186546)); #44434=DIRECTION('ref_axis',(0.707106781186546,0.,-0.707106781186549)); #44435=DIRECTION('',(0.707106781186546,0.,-0.707106781186549)); #44436=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44437=DIRECTION('center_axis',(0.,0.,-1.)); #44438=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #44439=DIRECTION('',(0.,-0.70710678118654,-0.707106781186555)); #44440=DIRECTION('center_axis',(-3.44129853958086E-16,-0.707106781186544, 0.707106781186551)); #44441=DIRECTION('ref_axis',(1.,0.,4.86673106684996E-16)); #44442=DIRECTION('center_axis',(1.,-6.67803323082801E-16,0.)); #44443=DIRECTION('ref_axis',(6.67803323082801E-16,1.,0.)); #44444=DIRECTION('',(0.,0.,-1.)); #44445=DIRECTION('center_axis',(0.,0.,1.)); #44446=DIRECTION('ref_axis',(1.,0.,0.)); #44447=DIRECTION('center_axis',(0.,0.,1.)); #44448=DIRECTION('ref_axis',(0.707106781186552,0.707106781186543,0.)); #44449=DIRECTION('axis',(0.,0.,1.)); #44450=DIRECTION('refdir',(1.,0.,0.)); #44451=DIRECTION('center_axis',(0.,-1.,0.)); #44452=DIRECTION('ref_axis',(-0.499999999999999,0.,0.866025403784439)); #44453=DIRECTION('center_axis',(-0.499999999999998,-0.86602540378444,0.)); #44454=DIRECTION('ref_axis',(-0.86602540378444,0.499999999999998,0.)); #44455=DIRECTION('',(0.,-1.,0.)); #44456=DIRECTION('center_axis',(-0.500000000000001,0.866025403784438,0.)); #44457=DIRECTION('ref_axis',(-0.866025403784438,-0.5,0.)); #44458=DIRECTION('',(0.,1.,0.)); #44459=DIRECTION('center_axis',(0.5,0.,-0.866025403784439)); #44460=DIRECTION('ref_axis',(0.,-1.,0.)); #44461=DIRECTION('',(-0.774596669241484,0.447213595499956,-0.447213595499958)); #44462=DIRECTION('',(-6.67803323082801E-16,-1.,-3.85556428347582E-16)); #44463=DIRECTION('',(-0.774596669241483,-0.447213595499958,-0.447213595499958)); #44464=DIRECTION('center_axis',(0.500000000000001,-0.866025403784438,0.)); #44465=DIRECTION('ref_axis',(0.,0.,1.)); #44466=DIRECTION('',(0.,0.,1.)); #44467=DIRECTION('',(-0.843610022961951,-0.487058473848149,0.226044624379456)); #44468=DIRECTION('center_axis',(0.258819045102521,0.,0.965925826289068)); #44469=DIRECTION('ref_axis',(0.,1.,0.)); #44470=DIRECTION('',(6.67803323082801E-16,1.,-1.78937361122857E-16)); #44471=DIRECTION('',(0.843610022961952,-0.487058473848146,-0.226044624379456)); #44472=DIRECTION('center_axis',(0.499999999999998,0.86602540378444,0.)); #44473=DIRECTION('ref_axis',(0.,0.,-1.)); #44474=DIRECTION('',(0.,0.,-1.)); #44475=DIRECTION('center_axis',(0.,1.,0.)); #44476=DIRECTION('ref_axis',(0.499999999999999,0.,0.866025403784439)); #44477=DIRECTION('center_axis',(-0.499999999999998,0.86602540378444,0.)); #44478=DIRECTION('ref_axis',(0.86602540378444,0.499999999999998,0.)); #44479=DIRECTION('',(0.,1.,0.)); #44480=DIRECTION('center_axis',(-0.500000000000001,-0.866025403784438,0.)); #44481=DIRECTION('ref_axis',(0.866025403784438,-0.5,0.)); #44482=DIRECTION('',(0.,-1.,0.)); #44483=DIRECTION('center_axis',(0.5,0.,0.866025403784439)); #44484=DIRECTION('ref_axis',(0.,-1.,0.)); #44485=DIRECTION('',(0.774596669241483,-0.447213595499958,-0.447213595499958)); #44486=DIRECTION('',(0.,1.,0.)); #44487=DIRECTION('',(0.774596669241484,0.447213595499956,-0.447213595499958)); #44488=DIRECTION('center_axis',(0.500000000000001,0.866025403784438,0.)); #44489=DIRECTION('ref_axis',(0.,0.,1.)); #44490=DIRECTION('',(0.843610022961951,-0.487058473848149,0.226044624379456)); #44491=DIRECTION('',(0.,0.,-1.)); #44492=DIRECTION('center_axis',(0.258819045102521,0.,-0.965925826289068)); #44493=DIRECTION('ref_axis',(0.,1.,0.)); #44494=DIRECTION('',(-0.843610022961952,-0.487058473848146,-0.226044624379456)); #44495=DIRECTION('',(0.,-1.,0.)); #44496=DIRECTION('center_axis',(0.499999999999998,-0.86602540378444,0.)); #44497=DIRECTION('ref_axis',(0.,0.,-1.)); #44498=DIRECTION('',(0.,0.,1.)); #44499=DIRECTION('center_axis',(0.,0.,1.)); #44500=DIRECTION('ref_axis',(1.,0.,0.)); #44501=DIRECTION('center_axis',(0.,0.,-1.)); #44502=DIRECTION('ref_axis',(1.,0.,0.)); #44503=DIRECTION('center_axis',(0.,-1.,0.)); #44504=DIRECTION('ref_axis',(-1.,0.,0.)); #44505=DIRECTION('center_axis',(0.,0.,1.)); #44506=DIRECTION('ref_axis',(1.,0.,0.)); #44507=DIRECTION('center_axis',(0.,0.,1.)); #44508=DIRECTION('ref_axis',(1.,0.,0.)); #44509=DIRECTION('',(0.,0.,-1.)); #44510=DIRECTION('center_axis',(0.,0.,1.)); #44511=DIRECTION('ref_axis',(1.,0.,0.)); #44512=DIRECTION('center_axis',(0.,0.,1.)); #44513=DIRECTION('ref_axis',(1.,0.,0.)); #44514=DIRECTION('center_axis',(0.,0.,1.)); #44515=DIRECTION('ref_axis',(1.,0.,0.)); #44516=DIRECTION('center_axis',(0.,0.,-1.)); #44517=DIRECTION('ref_axis',(1.,0.,0.)); #44518=DIRECTION('center_axis',(0.,-1.,0.)); #44519=DIRECTION('ref_axis',(-1.,0.,0.)); #44520=DIRECTION('center_axis',(0.,0.,1.)); #44521=DIRECTION('ref_axis',(1.,0.,0.)); #44522=DIRECTION('center_axis',(0.,0.,1.)); #44523=DIRECTION('ref_axis',(1.,0.,0.)); #44524=DIRECTION('',(0.,0.,-1.)); #44525=DIRECTION('center_axis',(0.,0.,1.)); #44526=DIRECTION('ref_axis',(1.,0.,0.)); #44527=DIRECTION('center_axis',(0.,0.,1.)); #44528=DIRECTION('ref_axis',(1.,0.,0.)); #44529=DIRECTION('center_axis',(0.,0.,1.)); #44530=DIRECTION('ref_axis',(1.,0.,0.)); #44531=DIRECTION('center_axis',(0.,0.,-1.)); #44532=DIRECTION('ref_axis',(1.,0.,0.)); #44533=DIRECTION('center_axis',(0.,-1.,0.)); #44534=DIRECTION('ref_axis',(-1.,0.,0.)); #44535=DIRECTION('center_axis',(0.,0.,1.)); #44536=DIRECTION('ref_axis',(1.,0.,0.)); #44537=DIRECTION('center_axis',(0.,0.,1.)); #44538=DIRECTION('ref_axis',(1.,0.,0.)); #44539=DIRECTION('',(0.,0.,-1.)); #44540=DIRECTION('center_axis',(0.,0.,1.)); #44541=DIRECTION('ref_axis',(1.,0.,0.)); #44542=DIRECTION('center_axis',(0.,0.,1.)); #44543=DIRECTION('ref_axis',(1.,0.,0.)); #44544=DIRECTION('center_axis',(-1.,0.,0.)); #44545=DIRECTION('ref_axis',(0.,0.,1.)); #44546=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44547=DIRECTION('',(0.,0.,-1.)); #44548=DIRECTION('',(0.,1.,0.)); #44549=DIRECTION('',(0.,0.,1.)); #44550=DIRECTION('center_axis',(0.,1.,0.)); #44551=DIRECTION('ref_axis',(0.,0.,-1.)); #44552=DIRECTION('',(0.,0.,-1.)); #44553=DIRECTION('',(1.,0.,0.)); #44554=DIRECTION('',(0.,0.,1.)); #44555=DIRECTION('',(-1.,0.,0.)); #44556=DIRECTION('center_axis',(0.,-1.,0.)); #44557=DIRECTION('ref_axis',(0.,0.,1.)); #44558=DIRECTION('',(0.,0.,1.)); #44559=DIRECTION('',(-1.,0.,0.)); #44560=DIRECTION('',(0.,0.,-1.)); #44561=DIRECTION('',(-1.,0.,0.)); #44562=DIRECTION('center_axis',(0.,0.,-1.)); #44563=DIRECTION('ref_axis',(-6.67803323082801E-16,-1.,0.)); #44564=DIRECTION('',(-6.67803323082801E-16,-1.,0.)); #44565=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44566=DIRECTION('center_axis',(0.,0.,1.)); #44567=DIRECTION('ref_axis',(1.,0.,0.)); #44568=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44569=DIRECTION('center_axis',(0.,0.,1.)); #44570=DIRECTION('ref_axis',(0.707106781186552,0.707106781186543,0.)); #44571=DIRECTION('',(-1.,1.2166827667125E-16,0.)); #44572=DIRECTION('center_axis',(0.,0.,1.)); #44573=DIRECTION('ref_axis',(-0.707106781186546,0.707106781186549,0.)); #44574=DIRECTION('',(0.,-1.,0.)); #44575=DIRECTION('center_axis',(0.,0.,1.)); #44576=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,0.)); #44577=DIRECTION('',(1.,-4.86673106685E-16,0.)); #44578=DIRECTION('center_axis',(0.,0.,1.)); #44579=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #44580=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44581=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44582=DIRECTION('',(-6.67803323082801E-16,-1.,0.)); #44583=DIRECTION('',(-1.,4.86673106685E-16,0.)); #44584=DIRECTION('',(0.,1.,0.)); #44585=DIRECTION('center_axis',(1.,-1.2166827667125E-16,0.)); #44586=DIRECTION('ref_axis',(0.,0.707106781186548,0.707106781186547)); #44587=DIRECTION('center_axis',(1.,0.,0.)); #44588=DIRECTION('ref_axis',(0.,1.,0.)); #44589=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44590=DIRECTION('center_axis',(-1.,0.,0.)); #44591=DIRECTION('ref_axis',(0.,0.,1.)); #44592=DIRECTION('',(-1.,1.2166827667125E-16,0.)); #44593=DIRECTION('center_axis',(-1.2166827667125E-16,-1.,0.)); #44594=DIRECTION('ref_axis',(0.,0.,-1.)); #44595=DIRECTION('center_axis',(1.,0.,0.)); #44596=DIRECTION('ref_axis',(0.,0.,-1.)); #44597=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44598=DIRECTION('ref_axis',(1.,-1.2166827667125E-16,0.)); #44599=DIRECTION('center_axis',(-1.2166827667125E-16,-1.,0.)); #44600=DIRECTION('ref_axis',(1.,-1.38777878078144E-16,0.)); #44601=DIRECTION('center_axis',(-1.,1.2166827667125E-16,0.)); #44602=DIRECTION('ref_axis',(0.,0.707106781186548,-0.707106781186548)); #44603=DIRECTION('center_axis',(1.,0.,0.)); #44604=DIRECTION('ref_axis',(0.,0.,-1.)); #44605=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44606=DIRECTION('',(-1.,1.2166827667125E-16,0.)); #44607=DIRECTION('center_axis',(-1.2166827667125E-16,-1.,0.)); #44608=DIRECTION('ref_axis',(0.,0.,-1.)); #44609=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44610=DIRECTION('ref_axis',(-1.,1.2166827667125E-16,0.)); #44611=DIRECTION('center_axis',(-1.2166827667125E-16,-1.,0.)); #44612=DIRECTION('ref_axis',(-1.,1.38777878078144E-16,0.)); #44613=DIRECTION('center_axis',(0.,-1.,0.)); #44614=DIRECTION('ref_axis',(0.,0.,1.)); #44615=DIRECTION('',(0.,-1.,0.)); #44616=DIRECTION('center_axis',(0.,-1.,0.)); #44617=DIRECTION('ref_axis',(0.,0.,1.)); #44618=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44619=DIRECTION('ref_axis',(0.,0.,1.)); #44620=DIRECTION('',(0.,-1.,0.)); #44621=DIRECTION('center_axis',(0.,0.,-1.)); #44622=DIRECTION('ref_axis',(1.,0.,0.)); #44623=DIRECTION('',(0.,-1.,0.)); #44624=DIRECTION('',(1.,0.,0.)); #44625=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44626=DIRECTION('ref_axis',(-1.,1.2166827667125E-16,0.)); #44627=DIRECTION('',(0.,0.,1.)); #44628=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44629=DIRECTION('',(0.,0.,-1.)); #44630=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44631=DIRECTION('ref_axis',(1.,-1.2166827667125E-16,0.)); #44632=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44633=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44634=DIRECTION('ref_axis',(-1.,1.2166827667125E-16,0.)); #44635=DIRECTION('',(-1.,1.2166827667125E-16,2.3039296165317E-17)); #44636=DIRECTION('center_axis',(-1.2166827667125E-16,-1.,0.)); #44637=DIRECTION('ref_axis',(0.,0.,-1.)); #44638=DIRECTION('center_axis',(1.,0.,0.)); #44639=DIRECTION('ref_axis',(0.,1.,0.)); #44640=DIRECTION('center_axis',(-1.2166827667125E-16,-1.,0.)); #44641=DIRECTION('ref_axis',(1.,-1.38777878078144E-16,0.)); #44642=DIRECTION('center_axis',(1.,0.,0.)); #44643=DIRECTION('ref_axis',(0.,0.,-1.)); #44644=DIRECTION('center_axis',(-1.,1.2166827667125E-16,0.)); #44645=DIRECTION('ref_axis',(0.,0.707106781186544,-0.707106781186551)); #44646=DIRECTION('center_axis',(1.,0.,0.)); #44647=DIRECTION('ref_axis',(0.,0.,-1.)); #44648=DIRECTION('',(-1.,1.2166827667125E-16,0.)); #44649=DIRECTION('center_axis',(-1.2166827667125E-16,-1.,0.)); #44650=DIRECTION('ref_axis',(0.,0.,-1.)); #44651=DIRECTION('center_axis',(-1.,0.,0.)); #44652=DIRECTION('ref_axis',(0.,0.,1.)); #44653=DIRECTION('center_axis',(-1.2166827667125E-16,-1.,0.)); #44654=DIRECTION('ref_axis',(-1.,1.38777878078144E-16,0.)); #44655=DIRECTION('center_axis',(1.,-1.2166827667125E-16,-2.30392961653169E-17)); #44656=DIRECTION('ref_axis',(0.,0.707106781186544,0.707106781186551)); #44657=DIRECTION('',(1.,-1.2166827667125E-16,-2.3039296165317E-17)); #44658=DIRECTION('center_axis',(0.,0.,1.)); #44659=DIRECTION('ref_axis',(-1.,0.,0.)); #44660=DIRECTION('',(0.,-1.,0.)); #44661=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44662=DIRECTION('',(0.,-1.,0.)); #44663=DIRECTION('center_axis',(0.,-1.,0.)); #44664=DIRECTION('ref_axis',(0.,0.,1.)); #44665=DIRECTION('',(0.,-1.,0.)); #44666=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44667=DIRECTION('ref_axis',(0.,0.,1.)); #44668=DIRECTION('center_axis',(-0.707106781186548,-0.707106781186548,0.)); #44669=DIRECTION('ref_axis',(0.,0.,1.)); #44670=DIRECTION('',(0.,0.,1.)); #44671=DIRECTION('',(-0.57735026918963,0.577350269189617,-0.57735026918963)); #44672=DIRECTION('',(0.,0.,-1.)); #44673=DIRECTION('',(0.57735026918963,-0.577350269189617,-0.57735026918963)); #44674=DIRECTION('center_axis',(-3.44129853958091E-16,-0.707106781186555, -0.70710678118654)); #44675=DIRECTION('ref_axis',(-1.,0.,4.86673106685011E-16)); #44676=DIRECTION('',(-1.,4.86673106685E-16,0.)); #44677=DIRECTION('',(0.577350269189634,0.577350269189609,-0.577350269189634)); #44678=DIRECTION('',(1.,-4.86673106685E-16,0.)); #44679=DIRECTION('center_axis',(0.70710678118654,-0.707106781186555,0.)); #44680=DIRECTION('ref_axis',(0.,0.,-1.)); #44681=DIRECTION('',(0.,0.,-1.)); #44682=DIRECTION('',(0.57735026918963,0.577350269189617,0.57735026918963)); #44683=DIRECTION('',(0.,0.,1.)); #44684=DIRECTION('center_axis',(-3.44129853958091E-16,-0.707106781186555, 0.70710678118654)); #44685=DIRECTION('ref_axis',(1.,0.,4.86673106685011E-16)); #44686=DIRECTION('',(-1.,4.86673106685E-16,0.)); #44687=DIRECTION('',(1.,-4.86673106685E-16,0.)); #44688=DIRECTION('center_axis',(0.,0.,-1.)); #44689=DIRECTION('ref_axis',(-1.,4.86673106685E-16,0.)); #44690=DIRECTION('',(0.,1.,0.)); #44691=DIRECTION('',(1.,-4.86673106685E-16,0.)); #44692=DIRECTION('',(0.,1.,0.)); #44693=DIRECTION('center_axis',(1.,0.,0.)); #44694=DIRECTION('ref_axis',(0.,0.,-1.)); #44695=DIRECTION('',(0.,1.,0.)); #44696=DIRECTION('',(0.,0.,1.)); #44697=DIRECTION('center_axis',(-4.86673106685E-16,-1.,0.)); #44698=DIRECTION('ref_axis',(1.,-4.86673106685E-16,0.)); #44699=DIRECTION('',(0.,0.,1.)); #44700=DIRECTION('',(-1.,4.86673106685E-16,0.)); #44701=DIRECTION('',(0.,0.,-1.)); #44702=DIRECTION('',(-1.,4.86673106685E-16,0.)); #44703=DIRECTION('',(0.,0.,1.)); #44704=DIRECTION('',(1.,-4.86673106685E-16,0.)); #44705=DIRECTION('',(0.,0.,-1.)); #44706=DIRECTION('center_axis',(-3.44129853958084E-16,-0.70710678118654, -0.707106781186555)); #44707=DIRECTION('ref_axis',(-1.,0.,4.86673106684989E-16)); #44708=DIRECTION('',(0.577350269189626,0.577350269189626,-0.577350269189626)); #44709=DIRECTION('',(1.,-4.86673106685E-16,0.)); #44710=DIRECTION('',(-0.577350269189622,0.577350269189634,-0.577350269189622)); #44711=DIRECTION('center_axis',(0.707106781186548,-0.707106781186548,0.)); #44712=DIRECTION('ref_axis',(0.,0.,-1.)); #44713=DIRECTION('',(0.577350269189626,0.577350269189626,0.577350269189625)); #44714=DIRECTION('',(0.,0.,1.)); #44715=DIRECTION('center_axis',(-0.707106781186555,-0.70710678118654,0.)); #44716=DIRECTION('ref_axis',(0.,0.,1.)); #44717=DIRECTION('',(0.,0.,-1.)); #44718=DIRECTION('',(0.577350269189626,-0.577350269189626,-0.577350269189625)); #44719=DIRECTION('center_axis',(-3.44129853958084E-16,-0.707106781186539, 0.707106781186556)); #44720=DIRECTION('ref_axis',(1.,0.,4.86673106684989E-16)); #44721=DIRECTION('',(-1.,4.86673106685E-16,0.)); #44722=DIRECTION('center_axis',(1.,0.,0.)); #44723=DIRECTION('ref_axis',(0.,0.,-1.)); #44724=DIRECTION('',(0.,1.,0.)); #44725=DIRECTION('',(0.,0.,1.)); #44726=DIRECTION('',(0.,1.,0.)); #44727=DIRECTION('center_axis',(0.,0.,1.)); #44728=DIRECTION('ref_axis',(1.,-4.86673106685E-16,0.)); #44729=DIRECTION('',(0.,1.,0.)); #44730=DIRECTION('',(-1.,4.86673106685E-16,0.)); #44731=DIRECTION('center_axis',(0.,1.,0.)); #44732=DIRECTION('ref_axis',(1.,0.,0.)); #44733=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44734=DIRECTION('center_axis',(0.,-1.,0.)); #44735=DIRECTION('ref_axis',(0.,0.,-1.)); #44736=DIRECTION('center_axis',(0.,0.,1.)); #44737=DIRECTION('ref_axis',(-1.,0.,0.)); #44738=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44739=DIRECTION('',(0.,-1.,0.)); #44740=DIRECTION('center_axis',(0.,-1.,0.)); #44741=DIRECTION('ref_axis',(0.,0.,-1.)); #44742=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44743=DIRECTION('ref_axis',(0.,0.,-1.)); #44744=DIRECTION('center_axis',(-2.30392961653169E-17,0.,-1.)); #44745=DIRECTION('ref_axis',(1.,0.,-2.3039296165317E-17)); #44746=DIRECTION('',(0.,-1.,0.)); #44747=DIRECTION('',(-1.,1.2166827667125E-16,2.3039296165317E-17)); #44748=DIRECTION('center_axis',(0.,-1.,0.)); #44749=DIRECTION('ref_axis',(0.,0.,-1.)); #44750=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44751=DIRECTION('ref_axis',(0.,0.,-1.)); #44752=DIRECTION('center_axis',(-1.,0.,0.)); #44753=DIRECTION('ref_axis',(0.,0.,1.)); #44754=DIRECTION('',(0.,1.,0.)); #44755=DIRECTION('',(0.,0.,-1.)); #44756=DIRECTION('center_axis',(0.,0.,-1.)); #44757=DIRECTION('ref_axis',(-1.,4.86673106685E-16,0.)); #44758=DIRECTION('',(1.,-4.86673106685E-16,0.)); #44759=DIRECTION('center_axis',(0.,0.,1.)); #44760=DIRECTION('ref_axis',(1.,-4.86673106685E-16,0.)); #44761=DIRECTION('',(0.,1.,0.)); #44762=DIRECTION('',(-1.,4.86673106685E-16,0.)); #44763=DIRECTION('center_axis',(-1.,0.,0.)); #44764=DIRECTION('ref_axis',(0.,0.,1.)); #44765=DIRECTION('',(0.,0.,-1.)); #44766=DIRECTION('center_axis',(-0.707106781186547,0.707106781186548,0.)); #44767=DIRECTION('ref_axis',(0.,0.,-1.)); #44768=DIRECTION('',(-0.577350269189626,-0.577350269189626,0.577350269189626)); #44769=DIRECTION('',(0.,0.,-1.)); #44770=DIRECTION('',(-0.577350269189626,-0.577350269189626,-0.577350269189625)); #44771=DIRECTION('center_axis',(-0.707106781186547,-0.707106781186548,0.)); #44772=DIRECTION('ref_axis',(0.,0.,1.)); #44773=DIRECTION('',(-0.577350269189626,0.577350269189626,-0.577350269189625)); #44774=DIRECTION('',(0.,0.,1.)); #44775=DIRECTION('',(-0.577350269189626,0.577350269189626,0.577350269189626)); #44776=DIRECTION('center_axis',(-0.707106781186548,0.,-0.707106781186548)); #44777=DIRECTION('ref_axis',(0.,-1.,0.)); #44778=DIRECTION('',(0.,1.,0.)); #44779=DIRECTION('',(0.,-1.,0.)); #44780=DIRECTION('center_axis',(-0.707106781186547,0.707106781186548,0.)); #44781=DIRECTION('ref_axis',(0.,0.,-1.)); #44782=DIRECTION('',(-0.577350269189626,-0.577350269189626,0.577350269189626)); #44783=DIRECTION('',(0.,0.,-1.)); #44784=DIRECTION('',(-0.577350269189626,-0.577350269189626,-0.577350269189625)); #44785=DIRECTION('center_axis',(-0.707106781186547,-0.707106781186548,0.)); #44786=DIRECTION('ref_axis',(0.,0.,1.)); #44787=DIRECTION('',(-0.577350269189626,0.577350269189626,-0.577350269189625)); #44788=DIRECTION('',(0.,0.,1.)); #44789=DIRECTION('',(-0.577350269189626,0.577350269189626,0.577350269189626)); #44790=DIRECTION('center_axis',(-0.707106781186548,0.,-0.707106781186548)); #44791=DIRECTION('ref_axis',(0.,-1.,0.)); #44792=DIRECTION('',(0.,1.,0.)); #44793=DIRECTION('',(0.,-1.,0.)); #44794=DIRECTION('center_axis',(0.707106781186547,-0.707106781186548,0.)); #44795=DIRECTION('ref_axis',(0.,0.,-1.)); #44796=DIRECTION('',(0.577350269189626,0.577350269189626,0.577350269189625)); #44797=DIRECTION('',(0.,0.,-1.)); #44798=DIRECTION('',(0.577350269189625,0.577350269189624,-0.577350269189628)); #44799=DIRECTION('center_axis',(0.707106781186547,0.707106781186548,0.)); #44800=DIRECTION('ref_axis',(0.,0.,1.)); #44801=DIRECTION('',(0.577350269189624,-0.577350269189624,-0.577350269189629)); #44802=DIRECTION('',(0.,0.,1.)); #44803=DIRECTION('',(0.577350269189626,-0.577350269189626,0.577350269189626)); #44804=DIRECTION('center_axis',(0.707106781186547,-4.72208258250759E-16, -0.707106781186548)); #44805=DIRECTION('ref_axis',(6.67803323082801E-16,1.,0.)); #44806=DIRECTION('',(-6.67803323082801E-16,-1.,4.93038065763132E-32)); #44807=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44808=DIRECTION('center_axis',(0.707106781186547,-0.707106781186548,0.)); #44809=DIRECTION('ref_axis',(0.,0.,-1.)); #44810=DIRECTION('',(0.577350269189623,0.577350269189623,0.577350269189632)); #44811=DIRECTION('',(0.,0.,-1.)); #44812=DIRECTION('',(0.577350269189625,0.577350269189624,-0.577350269189628)); #44813=DIRECTION('center_axis',(0.707106781186547,0.707106781186548,0.)); #44814=DIRECTION('ref_axis',(0.,0.,1.)); #44815=DIRECTION('',(0.577350269189624,-0.577350269189624,-0.577350269189629)); #44816=DIRECTION('',(0.,0.,1.)); #44817=DIRECTION('',(0.577350269189622,-0.577350269189622,0.577350269189633)); #44818=DIRECTION('center_axis',(0.707106781186554,-4.72208258250763E-16, -0.707106781186541)); #44819=DIRECTION('ref_axis',(6.67803323082801E-16,1.,0.)); #44820=DIRECTION('',(-6.67803323082801E-16,-1.,-4.93038065763132E-32)); #44821=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44822=DIRECTION('center_axis',(0.,0.,1.)); #44823=DIRECTION('ref_axis',(-0.705367518677173,0.708841776135696,0.)); #44824=DIRECTION('center_axis',(0.,0.,1.)); #44825=DIRECTION('ref_axis',(-0.705367518677173,0.708841776135696,0.)); #44826=DIRECTION('',(0.,0.,1.)); #44827=DIRECTION('center_axis',(0.,0.,1.)); #44828=DIRECTION('ref_axis',(-0.705367518677173,0.708841776135696,0.)); #44829=DIRECTION('',(0.,0.,-1.)); #44830=DIRECTION('center_axis',(0.,0.,1.)); #44831=DIRECTION('ref_axis',(1.,0.,0.)); #44832=DIRECTION('center_axis',(0.,0.,-1.)); #44833=DIRECTION('ref_axis',(1.,0.,0.)); #44834=DIRECTION('center_axis',(0.,0.,1.)); #44835=DIRECTION('ref_axis',(0.705367518677173,0.708841776135696,0.)); #44836=DIRECTION('',(-1.,0.,0.)); #44837=DIRECTION('',(-6.31791608152537E-17,-1.,0.)); #44838=DIRECTION('center_axis',(0.,0.,1.)); #44839=DIRECTION('ref_axis',(-0.606980535601453,-0.794716697572772,0.)); #44840=DIRECTION('center_axis',(0.,0.,-1.)); #44841=DIRECTION('ref_axis',(1.,0.,0.)); #44842=DIRECTION('center_axis',(0.,0.,1.)); #44843=DIRECTION('ref_axis',(-0.774730463584057,-0.632291632709806,0.)); #44844=DIRECTION('',(1.,0.,0.)); #44845=DIRECTION('center_axis',(0.,0.,1.)); #44846=DIRECTION('ref_axis',(0.775437930076433,-0.631423801102538,0.)); #44847=DIRECTION('center_axis',(0.,0.,-1.)); #44848=DIRECTION('ref_axis',(1.,0.,0.)); #44849=DIRECTION('center_axis',(0.,0.,1.)); #44850=DIRECTION('ref_axis',(0.622833056633996,-0.782354768352538,0.)); #44851=DIRECTION('',(0.,1.,0.)); #44852=DIRECTION('',(-1.,0.,0.)); #44853=DIRECTION('center_axis',(0.,0.,1.)); #44854=DIRECTION('ref_axis',(1.,0.,0.)); #44855=DIRECTION('center_axis',(0.,0.,1.)); #44856=DIRECTION('ref_axis',(1.,0.,0.)); #44857=DIRECTION('',(0.,0.,1.)); #44858=DIRECTION('center_axis',(0.,0.,1.)); #44859=DIRECTION('ref_axis',(0.705367518677173,0.708841776135696,0.)); #44860=DIRECTION('center_axis',(0.,0.,1.)); #44861=DIRECTION('ref_axis',(0.705367518677173,0.708841776135696,0.)); #44862=DIRECTION('',(0.,0.,-1.)); #44863=DIRECTION('center_axis',(0.,0.,1.)); #44864=DIRECTION('ref_axis',(0.622833056633996,-0.782354768352538,0.)); #44865=DIRECTION('',(0.,0.,1.)); #44866=DIRECTION('center_axis',(0.,0.,1.)); #44867=DIRECTION('ref_axis',(0.622833056633996,-0.782354768352538,0.)); #44868=DIRECTION('',(0.,0.,-1.)); #44869=DIRECTION('center_axis',(0.,0.,1.)); #44870=DIRECTION('ref_axis',(-0.699265060890125,0.714862486509349,0.)); #44871=DIRECTION('',(0.,0.,-1.)); #44872=DIRECTION('center_axis',(0.,0.,1.)); #44873=DIRECTION('ref_axis',(1.,0.,0.)); #44874=DIRECTION('center_axis',(0.,0.,1.)); #44875=DIRECTION('ref_axis',(0.775437930076433,-0.631423801102538,0.)); #44876=DIRECTION('',(0.,0.,1.)); #44877=DIRECTION('center_axis',(0.,0.,1.)); #44878=DIRECTION('ref_axis',(0.775437930076433,-0.631423801102538,0.)); #44879=DIRECTION('center_axis',(0.,1.,0.)); #44880=DIRECTION('ref_axis',(-1.,0.,0.)); #44881=DIRECTION('',(0.,0.,-1.)); #44882=DIRECTION('',(-1.,0.,0.)); #44883=DIRECTION('center_axis',(0.,0.,1.)); #44884=DIRECTION('ref_axis',(-0.774730463584057,-0.632291632709806,0.)); #44885=DIRECTION('',(0.,0.,1.)); #44886=DIRECTION('center_axis',(0.,0.,1.)); #44887=DIRECTION('ref_axis',(-0.774730463584057,-0.632291632709806,0.)); #44888=DIRECTION('center_axis',(0.,0.,1.)); #44889=DIRECTION('ref_axis',(1.,0.,0.)); #44890=DIRECTION('',(0.,0.,-1.)); #44891=DIRECTION('center_axis',(0.,0.,1.)); #44892=DIRECTION('ref_axis',(1.,0.,0.)); #44893=DIRECTION('center_axis',(0.,0.,1.)); #44894=DIRECTION('ref_axis',(-0.606980535601453,-0.794716697572772,0.)); #44895=DIRECTION('',(0.,0.,1.)); #44896=DIRECTION('center_axis',(0.,0.,1.)); #44897=DIRECTION('ref_axis',(-0.606980535601453,-0.794716697572772,0.)); #44898=DIRECTION('center_axis',(1.,-6.31791608152537E-17,0.)); #44899=DIRECTION('ref_axis',(6.31791608152537E-17,1.,0.)); #44900=DIRECTION('',(0.,0.,1.)); #44901=DIRECTION('',(6.31791608152537E-17,1.,0.)); #44902=DIRECTION('center_axis',(0.,-1.,0.)); #44903=DIRECTION('ref_axis',(1.,0.,0.)); #44904=DIRECTION('',(1.,0.,0.)); #44905=DIRECTION('center_axis',(0.,0.,-1.)); #44906=DIRECTION('ref_axis',(1.,0.,0.)); #44907=DIRECTION('',(0.,1.,0.)); #44908=DIRECTION('',(-1.,4.86673106685E-16,0.)); #44909=DIRECTION('',(-6.67803323082801E-16,-1.,0.)); #44910=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44911=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44912=DIRECTION('',(1.,0.,0.)); #44913=DIRECTION('',(0.,-1.,0.)); #44914=DIRECTION('center_axis',(-1.,0.,0.)); #44915=DIRECTION('ref_axis',(0.,-1.,0.)); #44916=DIRECTION('',(0.,0.,1.)); #44917=DIRECTION('center_axis',(0.,-1.,0.)); #44918=DIRECTION('ref_axis',(1.,0.,0.)); #44919=DIRECTION('center_axis',(1.,-6.67803323082801E-16,0.)); #44920=DIRECTION('ref_axis',(6.67803323082801E-16,1.,0.)); #44921=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44922=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44923=DIRECTION('',(0.,0.,-1.)); #44924=DIRECTION('',(0.,0.,-1.)); #44925=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44926=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44927=DIRECTION('center_axis',(-4.86673106685E-16,-1.,0.)); #44928=DIRECTION('ref_axis',(1.,-4.86673106685E-16,0.)); #44929=DIRECTION('',(0.,0.,1.)); #44930=DIRECTION('',(1.,-4.86673106685E-16,0.)); #44931=DIRECTION('center_axis',(-1.,0.,0.)); #44932=DIRECTION('ref_axis',(0.,-1.,0.)); #44933=DIRECTION('',(0.,1.,0.)); #44934=DIRECTION('',(0.,1.,0.)); #44935=DIRECTION('',(0.,0.,1.)); #44936=DIRECTION('',(0.,1.,0.)); #44937=DIRECTION('center_axis',(1.2166827667125E-16,1.,0.)); #44938=DIRECTION('ref_axis',(-1.,1.2166827667125E-16,0.)); #44939=DIRECTION('',(1.,-1.2166827667125E-16,0.)); #44940=DIRECTION('center_axis',(-0.707106781186547,0.,0.707106781186548)); #44941=DIRECTION('ref_axis',(0.707106781186548,0.,0.707106781186547)); #44942=DIRECTION('',(-0.577350269189626,0.577350269189626,-0.577350269189625)); #44943=DIRECTION('',(0.577350269189625,0.577350269189629,0.577350269189624)); #44944=DIRECTION('center_axis',(-3.44129853958086E-16,-0.707106781186544, 0.707106781186551)); #44945=DIRECTION('ref_axis',(1.,0.,4.86673106684996E-16)); #44946=DIRECTION('',(-0.577350269189622,0.577350269189631,0.577350269189625)); #44947=DIRECTION('center_axis',(0.707106781186549,-4.72208258250761E-16, 0.707106781186546)); #44948=DIRECTION('ref_axis',(0.707106781186546,0.,-0.707106781186549)); #44949=DIRECTION('',(-0.577350269189624,-0.577350269189627,0.577350269189626)); #44950=DIRECTION('center_axis',(8.60324634895218E-17,0.707106781186547, 0.707106781186548)); #44951=DIRECTION('ref_axis',(1.,0.,-1.2166827667125E-16)); #44952=DIRECTION('center_axis',(0.,0.,1.)); #44953=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #44954=DIRECTION('center_axis',(0.,0.,-1.)); #44955=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #44956=DIRECTION('',(0.,0.,1.)); #44957=DIRECTION('center_axis',(0.,0.,1.)); #44958=DIRECTION('ref_axis',(1.,0.,0.)); #44959=DIRECTION('center_axis',(0.,0.,1.)); #44960=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,0.)); #44961=DIRECTION('',(0.,-1.,0.)); #44962=DIRECTION('center_axis',(0.,0.,1.)); #44963=DIRECTION('ref_axis',(-0.707106781186546,0.707106781186549,0.)); #44964=DIRECTION('',(-1.,1.2166827667125E-16,0.)); #44965=DIRECTION('center_axis',(0.,0.,1.)); #44966=DIRECTION('ref_axis',(0.707106781186552,0.707106781186543,0.)); #44967=DIRECTION('',(6.67803323082801E-16,1.,0.)); #44968=DIRECTION('center_axis',(0.,0.,1.)); #44969=DIRECTION('ref_axis',(0.707106781186547,-0.707106781186547,0.)); #44970=DIRECTION('',(1.,-4.86673106685E-16,0.)); #44971=DIRECTION('center_axis',(0.,0.,1.)); #44972=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,0.)); #44973=DIRECTION('',(0.,0.,-1.)); #44974=DIRECTION('center_axis',(0.,0.,-1.)); #44975=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,0.)); #44976=DIRECTION('center_axis',(-1.,0.,0.)); #44977=DIRECTION('ref_axis',(0.,-1.,0.)); #44978=DIRECTION('',(0.,0.,1.)); #44979=DIRECTION('',(0.,1.,0.)); #44980=DIRECTION('center_axis',(-0.707106781186547,0.,-0.707106781186548)); #44981=DIRECTION('ref_axis',(-0.707106781186548,0.,0.707106781186547)); #44982=DIRECTION('',(-0.707106781186548,0.,0.707106781186547)); #44983=DIRECTION('',(0.707106781186547,0.,-0.707106781186548)); #44984=DIRECTION('center_axis',(0.,0.,1.)); #44985=DIRECTION('ref_axis',(-0.707106781186546,0.707106781186549,0.)); #44986=DIRECTION('center_axis',(0.,0.,-1.)); #44987=DIRECTION('ref_axis',(-0.707106781186546,0.707106781186549,0.)); #44988=DIRECTION('',(0.,0.707106781186549,0.707106781186546)); #44989=DIRECTION('center_axis',(8.60324634895218E-17,0.707106781186547, -0.707106781186548)); #44990=DIRECTION('ref_axis',(-1.,0.,-1.2166827667125E-16)); #44991=DIRECTION('',(0.,0.707106781186545,0.70710678118655)); #44992=DIRECTION('center_axis',(0.,0.,1.)); #44993=DIRECTION('ref_axis',(0.707106781186552,0.707106781186543,0.)); #44994=DIRECTION('center_axis',(0.,0.,-1.)); #44995=DIRECTION('ref_axis',(0.707106781186552,0.707106781186543,0.)); #44996=DIRECTION('',(0.707106781186545,0.,0.70710678118655)); #44997=DIRECTION('center_axis',(0.70710678118655,-4.72208258250761E-16, -0.707106781186545)); #44998=DIRECTION('ref_axis',(-0.707106781186545,0.,-0.70710678118655)); #44999=DIRECTION('',(0.70710678118654,0.,0.707106781186555)); #45000=DIRECTION('',(-6.67803323082801E-16,-1.,0.)); #45001=DIRECTION('center_axis',(0.,0.,1.)); #45002=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #45003=DIRECTION('',(0.,-0.70710678118655,0.707106781186545)); #45004=DIRECTION('center_axis',(-3.44129853958086E-16,-0.707106781186545, -0.70710678118655)); #45005=DIRECTION('ref_axis',(-1.,0.,4.86673106684996E-16)); #45006=DIRECTION('',(0.,-0.70710678118654,0.707106781186555)); #45007=DIRECTION('center_axis',(0.,0.,1.)); #45008=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,0.)); #45009=DIRECTION('center_axis',(1.,-6.67803323082801E-16,0.)); #45010=DIRECTION('ref_axis',(6.67803323082801E-16,1.,0.)); #45011=DIRECTION('',(0.,0.,-1.)); #45012=DIRECTION('center_axis',(0.,0.,1.)); #45013=DIRECTION('ref_axis',(0.707106781186552,0.707106781186543,0.)); #45014=DIRECTION('center_axis',(0.,0.,1.)); #45015=DIRECTION('ref_axis',(-0.707106781186546,0.707106781186549,0.)); #45016=DIRECTION('',(-4.44089209850063E-16,-1.,1.110223024625E-16)); #45017=DIRECTION('',(1.,-4.44089209850063E-16,0.)); #45018=DIRECTION('',(0.,0.,1.)); #45019=DIRECTION('',(1.,-4.44089209850063E-16,0.)); #45020=DIRECTION('',(-4.44089209850063E-16,-1.,1.110223024625E-16)); #45021=DIRECTION('',(1.,-4.44089209850063E-16,0.)); #45022=DIRECTION('',(0.,0.,1.)); #45023=DIRECTION('',(1.,-4.44089209850063E-16,0.)); #45024=DIRECTION('',(0.,0.,1.)); #45025=DIRECTION('',(1.,-4.44089209850063E-16,0.)); #45026=DIRECTION('',(0.,0.,1.)); #45027=DIRECTION('',(1.,0.,0.)); #45028=DIRECTION('',(-4.44089209850063E-16,-1.,1.110223024625E-16)); #45029=DIRECTION('',(1.,-4.44089209850063E-16,0.)); #45030=DIRECTION('',(-4.44089209850063E-16,-1.,1.110223024625E-16)); #45031=DIRECTION('',(1.,-4.44089209850063E-16,0.)); #45032=DIRECTION('',(0.,0.,1.)); #45033=DIRECTION('',(1.,-4.44089209850063E-16,0.)); #45034=DIRECTION('',(0.,0.,1.)); #45035=DIRECTION('',(-1.,5.66553889764763E-16,0.)); #45036=DIRECTION('',(0.,0.,1.)); #45037=DIRECTION('',(1.,0.,0.)); #45038=DIRECTION('',(0.,0.,1.)); #45039=DIRECTION('',(1.,0.,0.)); #45040=CARTESIAN_POINT('',(0.,0.,0.)); #45041=CARTESIAN_POINT('',(0.,0.,0.)); #45042=CARTESIAN_POINT('',(0.,0.,0.)); #45043=CARTESIAN_POINT('',(0.,0.,0.)); #45044=CARTESIAN_POINT('',(0.,0.,0.)); #45045=CARTESIAN_POINT('',(0.,0.,0.)); #45046=CARTESIAN_POINT('',(0.,0.,0.)); #45047=CARTESIAN_POINT('Origin',(2.25,2.11,0.725)); #45048=CARTESIAN_POINT('',(2.25,2.11,0.825)); #45049=CARTESIAN_POINT('',(2.25,1.7,0.825)); #45050=CARTESIAN_POINT('',(2.25,2.11,0.825)); #45051=CARTESIAN_POINT('',(2.35,2.11,0.725)); #45052=CARTESIAN_POINT('Origin',(2.25,2.11,0.725)); #45053=CARTESIAN_POINT('',(2.35,1.7,0.725)); #45054=CARTESIAN_POINT('',(2.35,2.11,0.725)); #45055=CARTESIAN_POINT('Origin',(2.25,1.7,0.725)); #45056=CARTESIAN_POINT('Origin',(1.8,2.11,0.825)); #45057=CARTESIAN_POINT('',(1.95,2.11,0.825)); #45058=CARTESIAN_POINT('',(1.8,2.11,0.825)); #45059=CARTESIAN_POINT('',(1.95,1.7,0.825)); #45060=CARTESIAN_POINT('',(1.8,1.7,0.825)); #45061=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45062=CARTESIAN_POINT('Origin',(2.35,2.11,0.725)); #45063=CARTESIAN_POINT('',(2.35,2.11,0.3)); #45064=CARTESIAN_POINT('',(2.35,2.11,0.725)); #45065=CARTESIAN_POINT('',(2.35,1.7,0.3)); #45066=CARTESIAN_POINT('',(2.35,2.11,0.3)); #45067=CARTESIAN_POINT('',(2.35,1.7,0.725)); #45068=CARTESIAN_POINT('Origin',(2.41578967201,2.11,0.532659657565)); #45069=CARTESIAN_POINT('',(1.95,2.11,1.025)); #45070=CARTESIAN_POINT('',(1.95,2.11,0.778829828783)); #45071=CARTESIAN_POINT('',(2.25,2.11,1.025)); #45072=CARTESIAN_POINT('',(2.25,2.11,1.025)); #45073=CARTESIAN_POINT('',(2.55,2.11,0.725)); #45074=CARTESIAN_POINT('Origin',(2.25,2.11,0.725)); #45075=CARTESIAN_POINT('',(2.55,2.11,0.3)); #45076=CARTESIAN_POINT('',(2.55,2.11,0.3)); #45077=CARTESIAN_POINT('',(2.65,2.11,0.2)); #45078=CARTESIAN_POINT('Origin',(2.65,2.11,0.3)); #45079=CARTESIAN_POINT('',(3.,2.11,0.2)); #45080=CARTESIAN_POINT('',(3.,2.11,0.2)); #45081=CARTESIAN_POINT('',(3.,2.11,5.551115123126E-17)); #45082=CARTESIAN_POINT('',(3.,2.11,5.551115123126E-17)); #45083=CARTESIAN_POINT('',(2.65,2.11,5.551115123126E-17)); #45084=CARTESIAN_POINT('',(2.65,2.11,5.551115123126E-17)); #45085=CARTESIAN_POINT('Origin',(2.65,2.11,0.3)); #45086=CARTESIAN_POINT('Origin',(2.41578967201,1.7,0.532659657565)); #45087=CARTESIAN_POINT('',(1.95,1.7,1.025)); #45088=CARTESIAN_POINT('',(1.95,1.7,0.778829828783)); #45089=CARTESIAN_POINT('',(2.65,1.7,5.551115123126E-17)); #45090=CARTESIAN_POINT('Origin',(2.65,1.7,0.3)); #45091=CARTESIAN_POINT('',(3.,1.7,5.551115123126E-17)); #45092=CARTESIAN_POINT('',(2.65,1.7,5.551115123126E-17)); #45093=CARTESIAN_POINT('',(3.,1.7,0.2)); #45094=CARTESIAN_POINT('',(3.,1.7,5.551115123126E-17)); #45095=CARTESIAN_POINT('',(2.65,1.7,0.2)); #45096=CARTESIAN_POINT('',(3.,1.7,0.2)); #45097=CARTESIAN_POINT('',(2.55,1.7,0.3)); #45098=CARTESIAN_POINT('Origin',(2.65,1.7,0.3)); #45099=CARTESIAN_POINT('',(2.55,1.7,0.725)); #45100=CARTESIAN_POINT('',(2.55,1.7,0.3)); #45101=CARTESIAN_POINT('',(2.25,1.7,1.025)); #45102=CARTESIAN_POINT('Origin',(2.25,1.7,0.725)); #45103=CARTESIAN_POINT('',(2.25,1.7,1.025)); #45104=CARTESIAN_POINT('Origin',(1.835171280765,2.77555756156289E-16,0.1)); #45105=CARTESIAN_POINT('',(1.835171280765,2.217585640382,0.1)); #45106=CARTESIAN_POINT('',(1.835171280765,-2.217585640382,0.1)); #45107=CARTESIAN_POINT('',(1.835171280765,2.217585640382,0.1)); #45108=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45109=CARTESIAN_POINT('',(1.835171280765,2.217585640382,0.1)); #45110=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45111=CARTESIAN_POINT('',(1.95,0.84,0.825)); #45112=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45113=CARTESIAN_POINT('',(1.95,0.43,0.825)); #45114=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45115=CARTESIAN_POINT('',(1.95,-0.43,0.825)); #45116=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45117=CARTESIAN_POINT('',(1.95,-0.84,0.825)); #45118=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45119=CARTESIAN_POINT('',(1.95,-1.7,0.825)); #45120=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45121=CARTESIAN_POINT('',(1.95,-2.11,0.825)); #45122=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45123=CARTESIAN_POINT('',(1.95,-2.275,0.825)); #45124=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45125=CARTESIAN_POINT('',(1.835171280765,-2.217585640382,0.1)); #45126=CARTESIAN_POINT('Origin',(2.65,2.11,0.3)); #45127=CARTESIAN_POINT('',(2.65,2.11,5.551115123126E-17)); #45128=CARTESIAN_POINT('Origin',(1.95,2.275,1.025)); #45129=CARTESIAN_POINT('',(1.95,2.275,1.025)); #45130=CARTESIAN_POINT('',(1.95,2.275,0.825)); #45131=CARTESIAN_POINT('',(1.95,2.275,1.025)); #45132=CARTESIAN_POINT('Origin',(2.25,2.11,1.025)); #45133=CARTESIAN_POINT('',(1.875,2.11,1.025)); #45134=CARTESIAN_POINT('',(2.25,2.11,1.025)); #45135=CARTESIAN_POINT('',(1.875,1.7,1.025)); #45136=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45137=CARTESIAN_POINT('',(2.25,1.7,1.025)); #45138=CARTESIAN_POINT('',(2.25,2.11,1.025)); #45139=CARTESIAN_POINT('Origin',(2.25,2.11,0.725)); #45140=CARTESIAN_POINT('',(2.55,2.11,0.725)); #45141=CARTESIAN_POINT('Origin',(2.55,2.11,0.3)); #45142=CARTESIAN_POINT('',(2.55,2.11,0.3)); #45143=CARTESIAN_POINT('Origin',(2.65,2.11,0.3)); #45144=CARTESIAN_POINT('',(2.65,2.11,0.2)); #45145=CARTESIAN_POINT('Origin',(3.,2.11,0.2)); #45146=CARTESIAN_POINT('',(3.,2.11,0.2)); #45147=CARTESIAN_POINT('Origin',(3.,2.11,5.551115123126E-17)); #45148=CARTESIAN_POINT('',(3.,2.11,5.551115123126E-17)); #45149=CARTESIAN_POINT('Origin',(2.65,2.11,5.551115123126E-17)); #45150=CARTESIAN_POINT('Origin',(1.95,2.275,1.025)); #45151=CARTESIAN_POINT('',(1.95,0.84,1.025)); #45152=CARTESIAN_POINT('',(1.95,2.275,1.025)); #45153=CARTESIAN_POINT('',(1.95,0.84,0.778829828783)); #45154=CARTESIAN_POINT('Origin',(-1.717585640382,2.335171280765,0.1)); #45155=CARTESIAN_POINT('',(-1.835171280765,2.217585640382,0.1)); #45156=CARTESIAN_POINT('',(-1.717585640382,2.335171280765,0.1)); #45157=CARTESIAN_POINT('',(-1.835171280765,2.217585640382,0.1)); #45158=CARTESIAN_POINT('',(1.717585640382,2.335171280765,0.1)); #45159=CARTESIAN_POINT('',(-1.717585640382,2.335171280765,0.1)); #45160=CARTESIAN_POINT('',(1.717585640382,2.335171280765,0.1)); #45161=CARTESIAN_POINT('',(1.717585640382,-2.335171280765,0.1)); #45162=CARTESIAN_POINT('',(1.835171280765,-2.217585640382,0.1)); #45163=CARTESIAN_POINT('',(-1.717585640382,-2.335171280765,0.1)); #45164=CARTESIAN_POINT('',(1.717585640382,-2.335171280765,0.1)); #45165=CARTESIAN_POINT('',(-1.835171280765,-2.217585640382,0.1)); #45166=CARTESIAN_POINT('',(-1.717585640382,-2.335171280765,0.1)); #45167=CARTESIAN_POINT('',(-1.835171280765,-2.217585640382,0.1)); #45168=CARTESIAN_POINT('Origin',(1.7763784605735,2.2763784605735,0.1)); #45169=CARTESIAN_POINT('',(1.775,2.45,0.825)); #45170=CARTESIAN_POINT('',(1.717585640382,2.335171280765,0.1)); #45171=CARTESIAN_POINT('',(1.775,2.45,0.825)); #45172=CARTESIAN_POINT('Origin',(1.7763784605735,-2.2763784605735,0.1)); #45173=CARTESIAN_POINT('',(1.775,-2.45,0.825)); #45174=CARTESIAN_POINT('',(1.95,-2.275,0.825)); #45175=CARTESIAN_POINT('',(1.717585640382,-2.335171280765,0.1)); #45176=CARTESIAN_POINT('Origin',(1.95,2.275,1.025)); #45177=CARTESIAN_POINT('',(1.95,-2.11,1.025)); #45178=CARTESIAN_POINT('',(1.95,-2.11,0.778829828783)); #45179=CARTESIAN_POINT('',(1.95,-2.275,1.025)); #45180=CARTESIAN_POINT('',(1.95,2.275,1.025)); #45181=CARTESIAN_POINT('',(1.95,-2.275,0.825)); #45182=CARTESIAN_POINT('Origin',(1.8,-1.7,0.825)); #45183=CARTESIAN_POINT('',(2.25,-1.7,0.825)); #45184=CARTESIAN_POINT('',(1.8,-1.7,0.825)); #45185=CARTESIAN_POINT('',(2.25,-2.11,0.825)); #45186=CARTESIAN_POINT('',(2.25,-1.7,0.825)); #45187=CARTESIAN_POINT('',(1.8,-2.11,0.825)); #45188=CARTESIAN_POINT('Origin',(1.95,2.275,1.025)); #45189=CARTESIAN_POINT('',(1.95,-0.84,1.025)); #45190=CARTESIAN_POINT('',(1.95,-0.84,0.778829828783)); #45191=CARTESIAN_POINT('',(1.95,-1.7,1.025)); #45192=CARTESIAN_POINT('',(1.95,2.275,1.025)); #45193=CARTESIAN_POINT('',(1.95,-1.7,0.778829828783)); #45194=CARTESIAN_POINT('Origin',(1.8,0.84,0.825)); #45195=CARTESIAN_POINT('',(2.25,0.84,0.825)); #45196=CARTESIAN_POINT('',(1.8,0.84,0.825)); #45197=CARTESIAN_POINT('',(2.25,0.43,0.825)); #45198=CARTESIAN_POINT('',(2.25,0.84,0.825)); #45199=CARTESIAN_POINT('',(1.8,0.43,0.825)); #45200=CARTESIAN_POINT('Origin',(1.8,-0.43,0.825)); #45201=CARTESIAN_POINT('',(2.25,-0.43,0.825)); #45202=CARTESIAN_POINT('',(1.8,-0.43,0.825)); #45203=CARTESIAN_POINT('',(2.25,-0.84,0.825)); #45204=CARTESIAN_POINT('',(2.25,-0.43,0.825)); #45205=CARTESIAN_POINT('',(1.8,-0.84,0.825)); #45206=CARTESIAN_POINT('Origin',(1.95,2.275,1.025)); #45207=CARTESIAN_POINT('',(1.95,0.43,1.025)); #45208=CARTESIAN_POINT('',(1.95,0.43,0.778829828783)); #45209=CARTESIAN_POINT('',(1.95,-0.43,1.025)); #45210=CARTESIAN_POINT('',(1.95,2.275,1.025)); #45211=CARTESIAN_POINT('',(1.95,-0.43,0.778829828783)); #45212=CARTESIAN_POINT('Origin',(1.775,2.45,1.025)); #45213=CARTESIAN_POINT('',(1.775,2.45,1.025)); #45214=CARTESIAN_POINT('',(1.775,2.45,0.825)); #45215=CARTESIAN_POINT('',(1.775,2.45,1.025)); #45216=CARTESIAN_POINT('Origin',(1.95,2.77555756156289E-16,1.025)); #45217=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45218=CARTESIAN_POINT('',(1.95,2.275,1.025)); #45219=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45220=CARTESIAN_POINT('Origin',(1.875,0.,1.025)); #45221=CARTESIAN_POINT('',(1.760171280765,2.180085640382,1.75)); #45222=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45223=CARTESIAN_POINT('',(1.760171280765,-2.180085640382,1.75)); #45224=CARTESIAN_POINT('',(1.760171280765,2.180085640382,1.75)); #45225=CARTESIAN_POINT('',(1.875,-2.2375,1.025)); #45226=CARTESIAN_POINT('',(1.875,-2.2375,1.025)); #45227=CARTESIAN_POINT('',(1.875,-2.11,1.025)); #45228=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45229=CARTESIAN_POINT('',(1.875,-1.7,1.025)); #45230=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45231=CARTESIAN_POINT('',(1.875,-0.84,1.025)); #45232=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45233=CARTESIAN_POINT('',(1.875,-0.43,1.025)); #45234=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45235=CARTESIAN_POINT('',(1.875,0.43,1.025)); #45236=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45237=CARTESIAN_POINT('',(1.875,0.84,1.025)); #45238=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45239=CARTESIAN_POINT('',(1.875,2.2375,1.025)); #45240=CARTESIAN_POINT('Origin',(1.95,2.77555756156289E-16,1.025)); #45241=CARTESIAN_POINT('',(2.25,0.84,1.025)); #45242=CARTESIAN_POINT('Origin',(2.41578967201,0.84,0.532659657565)); #45243=CARTESIAN_POINT('',(2.25,0.84,1.025)); #45244=CARTESIAN_POINT('',(2.25,0.84,1.025)); #45245=CARTESIAN_POINT('',(2.55,0.84,0.725)); #45246=CARTESIAN_POINT('Origin',(2.25,0.84,0.725)); #45247=CARTESIAN_POINT('',(2.55,0.84,0.3)); #45248=CARTESIAN_POINT('',(2.55,0.84,0.3)); #45249=CARTESIAN_POINT('',(2.65,0.84,0.2)); #45250=CARTESIAN_POINT('Origin',(2.65,0.84,0.3)); #45251=CARTESIAN_POINT('',(3.,0.84,0.2)); #45252=CARTESIAN_POINT('',(3.,0.84,0.2)); #45253=CARTESIAN_POINT('',(3.,0.84,5.551115123126E-17)); #45254=CARTESIAN_POINT('',(3.,0.84,5.551115123126E-17)); #45255=CARTESIAN_POINT('',(2.65,0.84,5.551115123126E-17)); #45256=CARTESIAN_POINT('',(2.65,0.84,5.551115123126E-17)); #45257=CARTESIAN_POINT('',(2.35,0.84,0.3)); #45258=CARTESIAN_POINT('Origin',(2.65,0.84,0.3)); #45259=CARTESIAN_POINT('',(2.35,0.84,0.725)); #45260=CARTESIAN_POINT('',(2.35,0.84,0.725)); #45261=CARTESIAN_POINT('Origin',(2.25,0.84,0.725)); #45262=CARTESIAN_POINT('Origin',(0.,2.335171280765,0.1)); #45263=CARTESIAN_POINT('',(-1.775,2.45,0.825)); #45264=CARTESIAN_POINT('',(-1.717585640382,2.335171280765,0.1)); #45265=CARTESIAN_POINT('',(-1.775,2.45,0.825)); #45266=CARTESIAN_POINT('Origin',(0.,-2.335171280765,0.1)); #45267=CARTESIAN_POINT('',(-1.775,-2.45,0.825)); #45268=CARTESIAN_POINT('',(1.775,-2.45,0.825)); #45269=CARTESIAN_POINT('',(-1.717585640382,-2.335171280765,0.1)); #45270=CARTESIAN_POINT('Origin',(-1.7763784605735,-2.2763784605735,0.1)); #45271=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45272=CARTESIAN_POINT('',(-1.775,-2.45,0.825)); #45273=CARTESIAN_POINT('',(-1.835171280765,-2.217585640382,0.1)); #45274=CARTESIAN_POINT('Origin',(-1.835171280765,-2.77555756156289E-16, 0.1)); #45275=CARTESIAN_POINT('',(-1.95,-2.11,0.825)); #45276=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45277=CARTESIAN_POINT('',(-1.95,-1.7,0.825)); #45278=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45279=CARTESIAN_POINT('',(-1.95,-0.84,0.825)); #45280=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45281=CARTESIAN_POINT('',(-1.95,-0.43,0.825)); #45282=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45283=CARTESIAN_POINT('',(-1.95,0.43,0.825)); #45284=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45285=CARTESIAN_POINT('',(-1.95,0.84,0.825)); #45286=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45287=CARTESIAN_POINT('',(-1.95,1.7,0.825)); #45288=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45289=CARTESIAN_POINT('',(-1.95,2.11,0.825)); #45290=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45291=CARTESIAN_POINT('',(-1.95,2.275,0.825)); #45292=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45293=CARTESIAN_POINT('',(-1.835171280765,2.217585640382,0.1)); #45294=CARTESIAN_POINT('Origin',(-1.7763784605735,2.2763784605735,0.1)); #45295=CARTESIAN_POINT('',(-1.95,2.275,0.825)); #45296=CARTESIAN_POINT('Origin',(1.95,-2.275,1.025)); #45297=CARTESIAN_POINT('',(1.775,-2.45,1.025)); #45298=CARTESIAN_POINT('',(1.95,-2.275,1.025)); #45299=CARTESIAN_POINT('',(1.775,-2.45,0.825)); #45300=CARTESIAN_POINT('Origin',(2.41578967201,-2.11,0.532659657565)); #45301=CARTESIAN_POINT('',(2.35,-2.11,0.725)); #45302=CARTESIAN_POINT('Origin',(2.25,-2.11,0.725)); #45303=CARTESIAN_POINT('',(2.35,-2.11,0.3)); #45304=CARTESIAN_POINT('',(2.35,-2.11,0.725)); #45305=CARTESIAN_POINT('',(2.65,-2.11,5.551115123126E-17)); #45306=CARTESIAN_POINT('Origin',(2.65,-2.11,0.3)); #45307=CARTESIAN_POINT('',(3.,-2.11,5.551115123126E-17)); #45308=CARTESIAN_POINT('',(2.65,-2.11,5.551115123126E-17)); #45309=CARTESIAN_POINT('',(3.,-2.11,0.2)); #45310=CARTESIAN_POINT('',(3.,-2.11,5.551115123126E-17)); #45311=CARTESIAN_POINT('',(2.65,-2.11,0.2)); #45312=CARTESIAN_POINT('',(3.,-2.11,0.2)); #45313=CARTESIAN_POINT('',(2.55,-2.11,0.3)); #45314=CARTESIAN_POINT('Origin',(2.65,-2.11,0.3)); #45315=CARTESIAN_POINT('',(2.55,-2.11,0.725)); #45316=CARTESIAN_POINT('',(2.55,-2.11,0.3)); #45317=CARTESIAN_POINT('',(2.25,-2.11,1.025)); #45318=CARTESIAN_POINT('Origin',(2.25,-2.11,0.725)); #45319=CARTESIAN_POINT('',(2.25,-2.11,1.025)); #45320=CARTESIAN_POINT('Origin',(1.95,2.77555756156289E-16,1.025)); #45321=CARTESIAN_POINT('',(2.25,-2.11,1.025)); #45322=CARTESIAN_POINT('',(1.95,-2.275,1.025)); #45323=CARTESIAN_POINT('Origin',(2.41578967201,-1.7,0.532659657565)); #45324=CARTESIAN_POINT('',(2.25,-1.7,1.025)); #45325=CARTESIAN_POINT('',(2.25,-1.7,1.025)); #45326=CARTESIAN_POINT('',(2.55,-1.7,0.725)); #45327=CARTESIAN_POINT('Origin',(2.25,-1.7,0.725)); #45328=CARTESIAN_POINT('',(2.55,-1.7,0.3)); #45329=CARTESIAN_POINT('',(2.55,-1.7,0.3)); #45330=CARTESIAN_POINT('',(2.65,-1.7,0.2)); #45331=CARTESIAN_POINT('Origin',(2.65,-1.7,0.3)); #45332=CARTESIAN_POINT('',(3.,-1.7,0.2)); #45333=CARTESIAN_POINT('',(3.,-1.7,0.2)); #45334=CARTESIAN_POINT('',(3.,-1.7,5.551115123126E-17)); #45335=CARTESIAN_POINT('',(3.,-1.7,5.551115123126E-17)); #45336=CARTESIAN_POINT('',(2.65,-1.7,5.551115123126E-17)); #45337=CARTESIAN_POINT('',(2.65,-1.7,5.551115123126E-17)); #45338=CARTESIAN_POINT('',(2.35,-1.7,0.3)); #45339=CARTESIAN_POINT('Origin',(2.65,-1.7,0.3)); #45340=CARTESIAN_POINT('',(2.35,-1.7,0.725)); #45341=CARTESIAN_POINT('',(2.35,-1.7,0.725)); #45342=CARTESIAN_POINT('Origin',(2.25,-1.7,0.725)); #45343=CARTESIAN_POINT('Origin',(2.25,-1.7,0.725)); #45344=CARTESIAN_POINT('',(2.35,-1.7,0.725)); #45345=CARTESIAN_POINT('Origin',(2.41578967201,-0.84,0.532659657565)); #45346=CARTESIAN_POINT('',(2.35,-0.84,0.725)); #45347=CARTESIAN_POINT('Origin',(2.25,-0.84,0.725)); #45348=CARTESIAN_POINT('',(2.35,-0.84,0.3)); #45349=CARTESIAN_POINT('',(2.35,-0.84,0.725)); #45350=CARTESIAN_POINT('',(2.65,-0.84,5.551115123126E-17)); #45351=CARTESIAN_POINT('Origin',(2.65,-0.84,0.3)); #45352=CARTESIAN_POINT('',(3.,-0.84,5.551115123126E-17)); #45353=CARTESIAN_POINT('',(2.65,-0.84,5.551115123126E-17)); #45354=CARTESIAN_POINT('',(3.,-0.84,0.2)); #45355=CARTESIAN_POINT('',(3.,-0.84,5.551115123126E-17)); #45356=CARTESIAN_POINT('',(2.65,-0.84,0.2)); #45357=CARTESIAN_POINT('',(3.,-0.84,0.2)); #45358=CARTESIAN_POINT('',(2.55,-0.84,0.3)); #45359=CARTESIAN_POINT('Origin',(2.65,-0.84,0.3)); #45360=CARTESIAN_POINT('',(2.55,-0.84,0.725)); #45361=CARTESIAN_POINT('',(2.55,-0.84,0.3)); #45362=CARTESIAN_POINT('',(2.25,-0.84,1.025)); #45363=CARTESIAN_POINT('Origin',(2.25,-0.84,0.725)); #45364=CARTESIAN_POINT('',(2.25,-0.84,1.025)); #45365=CARTESIAN_POINT('Origin',(1.95,2.77555756156289E-16,1.025)); #45366=CARTESIAN_POINT('',(2.25,-0.84,1.025)); #45367=CARTESIAN_POINT('',(2.25,-1.7,1.025)); #45368=CARTESIAN_POINT('Origin',(2.25,0.84,0.725)); #45369=CARTESIAN_POINT('',(2.35,0.43,0.725)); #45370=CARTESIAN_POINT('',(2.35,0.84,0.725)); #45371=CARTESIAN_POINT('Origin',(2.25,0.43,0.725)); #45372=CARTESIAN_POINT('Origin',(2.41578967201,0.43,0.532659657565)); #45373=CARTESIAN_POINT('',(2.35,0.43,0.3)); #45374=CARTESIAN_POINT('',(2.35,0.43,0.725)); #45375=CARTESIAN_POINT('',(2.65,0.43,5.551115123126E-17)); #45376=CARTESIAN_POINT('Origin',(2.65,0.43,0.3)); #45377=CARTESIAN_POINT('',(3.,0.43,5.551115123126E-17)); #45378=CARTESIAN_POINT('',(2.65,0.43,5.551115123126E-17)); #45379=CARTESIAN_POINT('',(3.,0.43,0.2)); #45380=CARTESIAN_POINT('',(3.,0.43,5.551115123126E-17)); #45381=CARTESIAN_POINT('',(2.65,0.43,0.2)); #45382=CARTESIAN_POINT('',(3.,0.43,0.2)); #45383=CARTESIAN_POINT('',(2.55,0.43,0.3)); #45384=CARTESIAN_POINT('Origin',(2.65,0.43,0.3)); #45385=CARTESIAN_POINT('',(2.55,0.43,0.725)); #45386=CARTESIAN_POINT('',(2.55,0.43,0.3)); #45387=CARTESIAN_POINT('',(2.25,0.43,1.025)); #45388=CARTESIAN_POINT('Origin',(2.25,0.43,0.725)); #45389=CARTESIAN_POINT('',(2.25,0.43,1.025)); #45390=CARTESIAN_POINT('Origin',(2.41578967201,-0.43,0.532659657565)); #45391=CARTESIAN_POINT('',(2.25,-0.43,1.025)); #45392=CARTESIAN_POINT('',(2.25,-0.43,1.025)); #45393=CARTESIAN_POINT('',(2.55,-0.43,0.725)); #45394=CARTESIAN_POINT('Origin',(2.25,-0.43,0.725)); #45395=CARTESIAN_POINT('',(2.55,-0.43,0.3)); #45396=CARTESIAN_POINT('',(2.55,-0.43,0.3)); #45397=CARTESIAN_POINT('',(2.65,-0.43,0.2)); #45398=CARTESIAN_POINT('Origin',(2.65,-0.43,0.3)); #45399=CARTESIAN_POINT('',(3.,-0.43,0.2)); #45400=CARTESIAN_POINT('',(3.,-0.43,0.2)); #45401=CARTESIAN_POINT('',(3.,-0.43,5.551115123126E-17)); #45402=CARTESIAN_POINT('',(3.,-0.43,5.551115123126E-17)); #45403=CARTESIAN_POINT('',(2.65,-0.43,5.551115123126E-17)); #45404=CARTESIAN_POINT('',(2.65,-0.43,5.551115123126E-17)); #45405=CARTESIAN_POINT('',(2.35,-0.43,0.3)); #45406=CARTESIAN_POINT('Origin',(2.65,-0.43,0.3)); #45407=CARTESIAN_POINT('',(2.35,-0.43,0.725)); #45408=CARTESIAN_POINT('',(2.35,-0.43,0.725)); #45409=CARTESIAN_POINT('Origin',(2.25,-0.43,0.725)); #45410=CARTESIAN_POINT('Origin',(2.25,-0.43,0.725)); #45411=CARTESIAN_POINT('',(2.35,-0.43,0.725)); #45412=CARTESIAN_POINT('Origin',(1.95,2.77555756156289E-16,1.025)); #45413=CARTESIAN_POINT('',(2.25,0.43,1.025)); #45414=CARTESIAN_POINT('',(2.25,-0.43,1.025)); #45415=CARTESIAN_POINT('Origin',(1.8625,2.3625,1.025)); #45416=CARTESIAN_POINT('',(1.7375,2.375,1.025)); #45417=CARTESIAN_POINT('',(1.775,2.45,1.025)); #45418=CARTESIAN_POINT('',(1.7375,2.375,1.025)); #45419=CARTESIAN_POINT('Origin',(-1.775,2.45,1.025)); #45420=CARTESIAN_POINT('',(-1.775,2.45,1.025)); #45421=CARTESIAN_POINT('',(-1.775,2.45,0.825)); #45422=CARTESIAN_POINT('',(-1.775,2.45,1.025)); #45423=CARTESIAN_POINT('Origin',(1.80625,2.30625,1.025)); #45424=CARTESIAN_POINT('',(1.680085640382,2.260171280765,1.75)); #45425=CARTESIAN_POINT('',(1.7375,2.375,1.025)); #45426=CARTESIAN_POINT('',(1.680085640382,2.260171280765,1.75)); #45427=CARTESIAN_POINT('Origin',(-1.680085640382,2.260171280765,1.75)); #45428=CARTESIAN_POINT('',(-1.680085640382,2.260171280765,1.75)); #45429=CARTESIAN_POINT('',(-1.680085640382,2.260171280765,1.75)); #45430=CARTESIAN_POINT('',(-1.760171280765,2.180085640382,1.75)); #45431=CARTESIAN_POINT('',(-1.760171280765,2.180085640382,1.75)); #45432=CARTESIAN_POINT('',(-1.760171280765,-2.180085640382,1.75)); #45433=CARTESIAN_POINT('',(-1.760171280765,-2.180085640382,1.75)); #45434=CARTESIAN_POINT('',(-1.680085640382,-2.260171280765,1.75)); #45435=CARTESIAN_POINT('',(-1.680085640382,-2.260171280765,1.75)); #45436=CARTESIAN_POINT('',(1.680085640382,-2.260171280765,1.75)); #45437=CARTESIAN_POINT('',(1.680085640382,-2.260171280765,1.75)); #45438=CARTESIAN_POINT('',(1.760171280765,-2.180085640382,1.75)); #45439=CARTESIAN_POINT('',(-1.110171280765,1.910171280765,1.75)); #45440=CARTESIAN_POINT('Origin',(-1.110171280765,1.610171280765,1.75)); #45441=CARTESIAN_POINT('Origin',(1.80625,-2.30625,1.025)); #45442=CARTESIAN_POINT('',(1.7375,-2.375,1.025)); #45443=CARTESIAN_POINT('',(1.875,-2.2375,1.025)); #45444=CARTESIAN_POINT('',(1.7375,-2.375,1.025)); #45445=CARTESIAN_POINT('Origin',(2.25,0.84,1.025)); #45446=CARTESIAN_POINT('',(2.25,0.84,1.025)); #45447=CARTESIAN_POINT('Origin',(2.25,-1.7,1.025)); #45448=CARTESIAN_POINT('',(2.25,-1.7,1.025)); #45449=CARTESIAN_POINT('Origin',(2.25,-0.43,1.025)); #45450=CARTESIAN_POINT('',(2.25,-0.43,1.025)); #45451=CARTESIAN_POINT('Origin',(2.25,0.84,0.725)); #45452=CARTESIAN_POINT('',(2.55,0.84,0.725)); #45453=CARTESIAN_POINT('Origin',(2.55,0.84,0.3)); #45454=CARTESIAN_POINT('',(2.55,0.84,0.3)); #45455=CARTESIAN_POINT('Origin',(2.65,0.84,0.3)); #45456=CARTESIAN_POINT('',(2.65,0.84,0.2)); #45457=CARTESIAN_POINT('Origin',(3.,0.84,0.2)); #45458=CARTESIAN_POINT('',(3.,0.84,0.2)); #45459=CARTESIAN_POINT('Origin',(3.,0.84,5.551115123126E-17)); #45460=CARTESIAN_POINT('',(3.,0.84,5.551115123126E-17)); #45461=CARTESIAN_POINT('Origin',(2.65,0.84,5.551115123126E-17)); #45462=CARTESIAN_POINT('',(2.65,0.84,5.551115123126E-17)); #45463=CARTESIAN_POINT('Origin',(2.65,0.84,0.3)); #45464=CARTESIAN_POINT('',(2.35,0.84,0.3)); #45465=CARTESIAN_POINT('Origin',(2.35,0.84,0.725)); #45466=CARTESIAN_POINT('Origin',(1.775,-2.45,1.025)); #45467=CARTESIAN_POINT('',(-1.775,-2.45,1.025)); #45468=CARTESIAN_POINT('',(1.775,-2.45,1.025)); #45469=CARTESIAN_POINT('',(-1.775,-2.45,0.825)); #45470=CARTESIAN_POINT('Origin',(-1.775,-2.45,1.025)); #45471=CARTESIAN_POINT('',(-1.95,-2.275,1.025)); #45472=CARTESIAN_POINT('',(-1.775,-2.45,1.025)); #45473=CARTESIAN_POINT('',(-1.95,-2.275,0.825)); #45474=CARTESIAN_POINT('Origin',(-1.95,-2.275,1.025)); #45475=CARTESIAN_POINT('',(-1.95,-2.11,1.025)); #45476=CARTESIAN_POINT('',(-1.95,-2.275,1.025)); #45477=CARTESIAN_POINT('',(-1.95,-2.11,0.778829828783)); #45478=CARTESIAN_POINT('Origin',(-1.95,-2.275,1.025)); #45479=CARTESIAN_POINT('',(-1.95,2.11,1.025)); #45480=CARTESIAN_POINT('',(-1.95,2.11,0.778829828783)); #45481=CARTESIAN_POINT('',(-1.95,2.275,1.025)); #45482=CARTESIAN_POINT('',(-1.95,-2.275,1.025)); #45483=CARTESIAN_POINT('',(-1.95,2.275,0.825)); #45484=CARTESIAN_POINT('Origin',(-1.8,-2.11,0.825)); #45485=CARTESIAN_POINT('',(-2.25,-2.11,0.825)); #45486=CARTESIAN_POINT('',(-1.8,-2.11,0.825)); #45487=CARTESIAN_POINT('',(-2.25,-1.7,0.825)); #45488=CARTESIAN_POINT('',(-2.25,-2.11,0.825)); #45489=CARTESIAN_POINT('',(-1.8,-1.7,0.825)); #45490=CARTESIAN_POINT('Origin',(-1.8,1.7,0.825)); #45491=CARTESIAN_POINT('',(-2.25,1.7,0.825)); #45492=CARTESIAN_POINT('',(-1.8,1.7,0.825)); #45493=CARTESIAN_POINT('',(-2.25,2.11,0.825)); #45494=CARTESIAN_POINT('',(-2.25,1.7,0.825)); #45495=CARTESIAN_POINT('',(-1.8,2.11,0.825)); #45496=CARTESIAN_POINT('Origin',(-1.95,-2.275,1.025)); #45497=CARTESIAN_POINT('',(-1.95,-1.7,1.025)); #45498=CARTESIAN_POINT('',(-1.95,-1.7,0.778829828783)); #45499=CARTESIAN_POINT('',(-1.95,-0.84,1.025)); #45500=CARTESIAN_POINT('',(-1.95,-2.275,1.025)); #45501=CARTESIAN_POINT('',(-1.95,-0.84,0.778829828783)); #45502=CARTESIAN_POINT('Origin',(-1.95,-2.275,1.025)); #45503=CARTESIAN_POINT('',(-1.95,0.84,1.025)); #45504=CARTESIAN_POINT('',(-1.95,0.84,0.778829828783)); #45505=CARTESIAN_POINT('',(-1.95,1.7,1.025)); #45506=CARTESIAN_POINT('',(-1.95,-2.275,1.025)); #45507=CARTESIAN_POINT('',(-1.95,1.7,0.778829828783)); #45508=CARTESIAN_POINT('Origin',(-1.8,-0.84,0.825)); #45509=CARTESIAN_POINT('',(-2.25,-0.84,0.825)); #45510=CARTESIAN_POINT('',(-1.8,-0.84,0.825)); #45511=CARTESIAN_POINT('',(-2.25,-0.43,0.825)); #45512=CARTESIAN_POINT('',(-2.25,-0.84,0.825)); #45513=CARTESIAN_POINT('',(-1.8,-0.43,0.825)); #45514=CARTESIAN_POINT('Origin',(-1.8,0.43,0.825)); #45515=CARTESIAN_POINT('',(-2.25,0.43,0.825)); #45516=CARTESIAN_POINT('',(-1.8,0.43,0.825)); #45517=CARTESIAN_POINT('',(-2.25,0.84,0.825)); #45518=CARTESIAN_POINT('',(-2.25,0.43,0.825)); #45519=CARTESIAN_POINT('',(-1.8,0.84,0.825)); #45520=CARTESIAN_POINT('Origin',(-1.95,-2.275,1.025)); #45521=CARTESIAN_POINT('',(-1.95,-0.43,1.025)); #45522=CARTESIAN_POINT('',(-1.95,-0.43,0.778829828783)); #45523=CARTESIAN_POINT('',(-1.95,0.43,1.025)); #45524=CARTESIAN_POINT('',(-1.95,-2.275,1.025)); #45525=CARTESIAN_POINT('',(-1.95,0.43,0.778829828783)); #45526=CARTESIAN_POINT('Origin',(-1.95,2.275,1.025)); #45527=CARTESIAN_POINT('',(-1.95,2.275,1.025)); #45528=CARTESIAN_POINT('Origin',(1.8625,-2.3625,1.025)); #45529=CARTESIAN_POINT('',(1.775,-2.45,1.025)); #45530=CARTESIAN_POINT('Origin',(2.25,-1.7,0.725)); #45531=CARTESIAN_POINT('',(2.55,-1.7,0.725)); #45532=CARTESIAN_POINT('Origin',(2.55,-1.7,0.3)); #45533=CARTESIAN_POINT('',(2.55,-1.7,0.3)); #45534=CARTESIAN_POINT('Origin',(2.65,-1.7,0.3)); #45535=CARTESIAN_POINT('',(2.65,-1.7,0.2)); #45536=CARTESIAN_POINT('Origin',(3.,-1.7,0.2)); #45537=CARTESIAN_POINT('',(3.,-1.7,0.2)); #45538=CARTESIAN_POINT('Origin',(3.,-1.7,5.551115123126E-17)); #45539=CARTESIAN_POINT('',(3.,-1.7,5.551115123126E-17)); #45540=CARTESIAN_POINT('Origin',(2.65,-1.7,5.551115123126E-17)); #45541=CARTESIAN_POINT('',(2.65,-1.7,5.551115123126E-17)); #45542=CARTESIAN_POINT('Origin',(2.65,-1.7,0.3)); #45543=CARTESIAN_POINT('',(2.35,-1.7,0.3)); #45544=CARTESIAN_POINT('Origin',(2.35,-1.7,0.725)); #45545=CARTESIAN_POINT('Origin',(2.25,-0.43,0.725)); #45546=CARTESIAN_POINT('',(2.55,-0.43,0.725)); #45547=CARTESIAN_POINT('Origin',(2.55,-0.43,0.3)); #45548=CARTESIAN_POINT('',(2.55,-0.43,0.3)); #45549=CARTESIAN_POINT('Origin',(2.65,-0.43,0.3)); #45550=CARTESIAN_POINT('',(2.65,-0.43,0.2)); #45551=CARTESIAN_POINT('Origin',(3.,-0.43,0.2)); #45552=CARTESIAN_POINT('',(3.,-0.43,0.2)); #45553=CARTESIAN_POINT('Origin',(3.,-0.43,5.551115123126E-17)); #45554=CARTESIAN_POINT('',(3.,-0.43,5.551115123126E-17)); #45555=CARTESIAN_POINT('Origin',(2.65,-0.43,5.551115123126E-17)); #45556=CARTESIAN_POINT('',(2.65,-0.43,5.551115123126E-17)); #45557=CARTESIAN_POINT('Origin',(2.65,-0.43,0.3)); #45558=CARTESIAN_POINT('',(2.35,-0.43,0.3)); #45559=CARTESIAN_POINT('Origin',(2.35,-0.43,0.725)); #45560=CARTESIAN_POINT('Origin',(0.,2.45,1.025)); #45561=CARTESIAN_POINT('',(-1.7375,2.375,1.025)); #45562=CARTESIAN_POINT('',(-1.775,2.45,1.025)); #45563=CARTESIAN_POINT('',(-1.7375,2.375,1.025)); #45564=CARTESIAN_POINT('Origin',(0.,2.375,1.025)); #45565=CARTESIAN_POINT('',(-1.7375,2.375,1.025)); #45566=CARTESIAN_POINT('Origin',(-1.80625,2.30625,1.025)); #45567=CARTESIAN_POINT('',(-1.875,2.2375,1.025)); #45568=CARTESIAN_POINT('',(-1.875,2.2375,1.025)); #45569=CARTESIAN_POINT('',(-1.875,2.2375,1.025)); #45570=CARTESIAN_POINT('Origin',(-1.875,0.,1.025)); #45571=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45572=CARTESIAN_POINT('',(-1.875,-2.11,1.025)); #45573=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45574=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45575=CARTESIAN_POINT('',(-1.875,2.11,1.025)); #45576=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45577=CARTESIAN_POINT('',(-1.875,1.7,1.025)); #45578=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45579=CARTESIAN_POINT('',(-1.875,0.84,1.025)); #45580=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45581=CARTESIAN_POINT('',(-1.875,0.43,1.025)); #45582=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45583=CARTESIAN_POINT('',(-1.875,-0.43,1.025)); #45584=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45585=CARTESIAN_POINT('',(-1.875,-0.84,1.025)); #45586=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45587=CARTESIAN_POINT('',(-1.875,-1.7,1.025)); #45588=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45589=CARTESIAN_POINT('',(-1.875,-2.2375,1.025)); #45590=CARTESIAN_POINT('Origin',(-1.80625,-2.30625,1.025)); #45591=CARTESIAN_POINT('',(-1.7375,-2.375,1.025)); #45592=CARTESIAN_POINT('',(-1.7375,-2.375,1.025)); #45593=CARTESIAN_POINT('',(-1.7375,-2.375,1.025)); #45594=CARTESIAN_POINT('Origin',(0.,-2.375,1.025)); #45595=CARTESIAN_POINT('',(1.7375,-2.375,1.025)); #45596=CARTESIAN_POINT('Origin',(-1.110171280765,1.610171280765,1.75)); #45597=CARTESIAN_POINT('',(-1.110171280765,1.910171280765,1.7)); #45598=CARTESIAN_POINT('',(-1.110171280765,1.910171280765,1.75)); #45599=CARTESIAN_POINT('Origin',(-1.110171280765,1.610171280765,1.7)); #45600=CARTESIAN_POINT('Origin',(0.,-2.45,1.025)); #45601=CARTESIAN_POINT('',(-1.775,-2.45,1.025)); #45602=CARTESIAN_POINT('Origin',(-1.8625,-2.3625,1.025)); #45603=CARTESIAN_POINT('',(-1.95,-2.275,1.025)); #45604=CARTESIAN_POINT('Origin',(-1.95,-2.77555756156289E-16,1.025)); #45605=CARTESIAN_POINT('',(-2.25,-2.11,1.025)); #45606=CARTESIAN_POINT('Origin',(-2.41578967201,-2.11,0.532659657565)); #45607=CARTESIAN_POINT('',(-2.25,-2.11,1.025)); #45608=CARTESIAN_POINT('',(-2.25,-2.11,1.025)); #45609=CARTESIAN_POINT('',(-2.55,-2.11,0.725)); #45610=CARTESIAN_POINT('Origin',(-2.25,-2.11,0.725)); #45611=CARTESIAN_POINT('',(-2.55,-2.11,0.3)); #45612=CARTESIAN_POINT('',(-2.55,-2.11,0.3)); #45613=CARTESIAN_POINT('',(-2.65,-2.11,0.2)); #45614=CARTESIAN_POINT('Origin',(-2.65,-2.11,0.3)); #45615=CARTESIAN_POINT('',(-3.,-2.11,0.2)); #45616=CARTESIAN_POINT('',(-3.,-2.11,0.2)); #45617=CARTESIAN_POINT('',(-3.,-2.11,5.551115123126E-17)); #45618=CARTESIAN_POINT('',(-3.,-2.11,5.551115123126E-17)); #45619=CARTESIAN_POINT('',(-2.65,-2.11,5.551115123126E-17)); #45620=CARTESIAN_POINT('',(-2.65,-2.11,5.551115123126E-17)); #45621=CARTESIAN_POINT('',(-2.35,-2.11,0.3)); #45622=CARTESIAN_POINT('Origin',(-2.65,-2.11,0.3)); #45623=CARTESIAN_POINT('',(-2.35,-2.11,0.725)); #45624=CARTESIAN_POINT('',(-2.35,-2.11,0.725)); #45625=CARTESIAN_POINT('Origin',(-2.25,-2.11,0.725)); #45626=CARTESIAN_POINT('Origin',(-2.41578967201,2.11,0.532659657565)); #45627=CARTESIAN_POINT('',(-2.35,2.11,0.725)); #45628=CARTESIAN_POINT('Origin',(-2.25,2.11,0.725)); #45629=CARTESIAN_POINT('',(-2.35,2.11,0.3)); #45630=CARTESIAN_POINT('',(-2.35,2.11,0.725)); #45631=CARTESIAN_POINT('',(-2.65,2.11,5.551115123126E-17)); #45632=CARTESIAN_POINT('Origin',(-2.65,2.11,0.3)); #45633=CARTESIAN_POINT('',(-3.,2.11,5.551115123126E-17)); #45634=CARTESIAN_POINT('',(-2.65,2.11,5.551115123126E-17)); #45635=CARTESIAN_POINT('',(-3.,2.11,0.2)); #45636=CARTESIAN_POINT('',(-3.,2.11,5.551115123126E-17)); #45637=CARTESIAN_POINT('',(-2.65,2.11,0.2)); #45638=CARTESIAN_POINT('',(-3.,2.11,0.2)); #45639=CARTESIAN_POINT('',(-2.55,2.11,0.3)); #45640=CARTESIAN_POINT('Origin',(-2.65,2.11,0.3)); #45641=CARTESIAN_POINT('',(-2.55,2.11,0.725)); #45642=CARTESIAN_POINT('',(-2.55,2.11,0.3)); #45643=CARTESIAN_POINT('',(-2.25,2.11,1.025)); #45644=CARTESIAN_POINT('Origin',(-2.25,2.11,0.725)); #45645=CARTESIAN_POINT('',(-2.25,2.11,1.025)); #45646=CARTESIAN_POINT('Origin',(-1.95,-2.77555756156289E-16,1.025)); #45647=CARTESIAN_POINT('',(-2.25,2.11,1.025)); #45648=CARTESIAN_POINT('',(-1.95,2.275,1.025)); #45649=CARTESIAN_POINT('Origin',(-2.25,-2.11,0.725)); #45650=CARTESIAN_POINT('',(-2.35,-1.7,0.725)); #45651=CARTESIAN_POINT('',(-2.35,-2.11,0.725)); #45652=CARTESIAN_POINT('Origin',(-2.25,-1.7,0.725)); #45653=CARTESIAN_POINT('Origin',(-2.41578967201,-1.7,0.532659657565)); #45654=CARTESIAN_POINT('',(-2.35,-1.7,0.3)); #45655=CARTESIAN_POINT('',(-2.35,-1.7,0.725)); #45656=CARTESIAN_POINT('',(-2.65,-1.7,5.551115123126E-17)); #45657=CARTESIAN_POINT('Origin',(-2.65,-1.7,0.3)); #45658=CARTESIAN_POINT('',(-3.,-1.7,5.551115123126E-17)); #45659=CARTESIAN_POINT('',(-2.65,-1.7,5.551115123126E-17)); #45660=CARTESIAN_POINT('',(-3.,-1.7,0.2)); #45661=CARTESIAN_POINT('',(-3.,-1.7,5.551115123126E-17)); #45662=CARTESIAN_POINT('',(-2.65,-1.7,0.2)); #45663=CARTESIAN_POINT('',(-3.,-1.7,0.2)); #45664=CARTESIAN_POINT('',(-2.55,-1.7,0.3)); #45665=CARTESIAN_POINT('Origin',(-2.65,-1.7,0.3)); #45666=CARTESIAN_POINT('',(-2.55,-1.7,0.725)); #45667=CARTESIAN_POINT('',(-2.55,-1.7,0.3)); #45668=CARTESIAN_POINT('',(-2.25,-1.7,1.025)); #45669=CARTESIAN_POINT('Origin',(-2.25,-1.7,0.725)); #45670=CARTESIAN_POINT('',(-2.25,-1.7,1.025)); #45671=CARTESIAN_POINT('Origin',(-2.41578967201,1.7,0.532659657565)); #45672=CARTESIAN_POINT('',(-2.25,1.7,1.025)); #45673=CARTESIAN_POINT('',(-2.25,1.7,1.025)); #45674=CARTESIAN_POINT('',(-2.55,1.7,0.725)); #45675=CARTESIAN_POINT('Origin',(-2.25,1.7,0.725)); #45676=CARTESIAN_POINT('',(-2.55,1.7,0.3)); #45677=CARTESIAN_POINT('',(-2.55,1.7,0.3)); #45678=CARTESIAN_POINT('',(-2.65,1.7,0.2)); #45679=CARTESIAN_POINT('Origin',(-2.65,1.7,0.3)); #45680=CARTESIAN_POINT('',(-3.,1.7,0.2)); #45681=CARTESIAN_POINT('',(-3.,1.7,0.2)); #45682=CARTESIAN_POINT('',(-3.,1.7,5.551115123126E-17)); #45683=CARTESIAN_POINT('',(-3.,1.7,5.551115123126E-17)); #45684=CARTESIAN_POINT('',(-2.65,1.7,5.551115123126E-17)); #45685=CARTESIAN_POINT('',(-2.65,1.7,5.551115123126E-17)); #45686=CARTESIAN_POINT('',(-2.35,1.7,0.3)); #45687=CARTESIAN_POINT('Origin',(-2.65,1.7,0.3)); #45688=CARTESIAN_POINT('',(-2.35,1.7,0.725)); #45689=CARTESIAN_POINT('',(-2.35,1.7,0.725)); #45690=CARTESIAN_POINT('Origin',(-2.25,1.7,0.725)); #45691=CARTESIAN_POINT('Origin',(-2.25,1.7,0.725)); #45692=CARTESIAN_POINT('',(-2.35,1.7,0.725)); #45693=CARTESIAN_POINT('Origin',(-1.95,-2.77555756156289E-16,1.025)); #45694=CARTESIAN_POINT('',(-2.25,-1.7,1.025)); #45695=CARTESIAN_POINT('',(-2.25,-0.84,1.025)); #45696=CARTESIAN_POINT('Origin',(-2.41578967201,-0.84,0.532659657565)); #45697=CARTESIAN_POINT('',(-2.25,-0.84,1.025)); #45698=CARTESIAN_POINT('',(-2.25,-0.84,1.025)); #45699=CARTESIAN_POINT('',(-2.55,-0.84,0.725)); #45700=CARTESIAN_POINT('Origin',(-2.25,-0.84,0.725)); #45701=CARTESIAN_POINT('',(-2.55,-0.84,0.3)); #45702=CARTESIAN_POINT('',(-2.55,-0.84,0.3)); #45703=CARTESIAN_POINT('',(-2.65,-0.84,0.2)); #45704=CARTESIAN_POINT('Origin',(-2.65,-0.84,0.3)); #45705=CARTESIAN_POINT('',(-3.,-0.84,0.2)); #45706=CARTESIAN_POINT('',(-3.,-0.84,0.2)); #45707=CARTESIAN_POINT('',(-3.,-0.84,5.551115123126E-17)); #45708=CARTESIAN_POINT('',(-3.,-0.84,5.551115123126E-17)); #45709=CARTESIAN_POINT('',(-2.65,-0.84,5.551115123126E-17)); #45710=CARTESIAN_POINT('',(-2.65,-0.84,5.551115123126E-17)); #45711=CARTESIAN_POINT('',(-2.35,-0.84,0.3)); #45712=CARTESIAN_POINT('Origin',(-2.65,-0.84,0.3)); #45713=CARTESIAN_POINT('',(-2.35,-0.84,0.725)); #45714=CARTESIAN_POINT('',(-2.35,-0.84,0.725)); #45715=CARTESIAN_POINT('Origin',(-2.25,-0.84,0.725)); #45716=CARTESIAN_POINT('Origin',(-2.41578967201,0.84,0.532659657565)); #45717=CARTESIAN_POINT('',(-2.35,0.84,0.725)); #45718=CARTESIAN_POINT('Origin',(-2.25,0.84,0.725)); #45719=CARTESIAN_POINT('',(-2.35,0.84,0.3)); #45720=CARTESIAN_POINT('',(-2.35,0.84,0.725)); #45721=CARTESIAN_POINT('',(-2.65,0.84,5.551115123126E-17)); #45722=CARTESIAN_POINT('Origin',(-2.65,0.84,0.3)); #45723=CARTESIAN_POINT('',(-3.,0.84,5.551115123126E-17)); #45724=CARTESIAN_POINT('',(-2.65,0.84,5.551115123126E-17)); #45725=CARTESIAN_POINT('',(-3.,0.84,0.2)); #45726=CARTESIAN_POINT('',(-3.,0.84,5.551115123126E-17)); #45727=CARTESIAN_POINT('',(-2.65,0.84,0.2)); #45728=CARTESIAN_POINT('',(-3.,0.84,0.2)); #45729=CARTESIAN_POINT('',(-2.55,0.84,0.3)); #45730=CARTESIAN_POINT('Origin',(-2.65,0.84,0.3)); #45731=CARTESIAN_POINT('',(-2.55,0.84,0.725)); #45732=CARTESIAN_POINT('',(-2.55,0.84,0.3)); #45733=CARTESIAN_POINT('',(-2.25,0.84,1.025)); #45734=CARTESIAN_POINT('Origin',(-2.25,0.84,0.725)); #45735=CARTESIAN_POINT('',(-2.25,0.84,1.025)); #45736=CARTESIAN_POINT('Origin',(-1.95,-2.77555756156289E-16,1.025)); #45737=CARTESIAN_POINT('',(-2.25,0.84,1.025)); #45738=CARTESIAN_POINT('',(-2.25,1.7,1.025)); #45739=CARTESIAN_POINT('Origin',(-2.25,-0.84,0.725)); #45740=CARTESIAN_POINT('',(-2.35,-0.43,0.725)); #45741=CARTESIAN_POINT('',(-2.35,-0.84,0.725)); #45742=CARTESIAN_POINT('Origin',(-2.25,-0.43,0.725)); #45743=CARTESIAN_POINT('Origin',(-2.41578967201,-0.43,0.532659657565)); #45744=CARTESIAN_POINT('',(-2.35,-0.43,0.3)); #45745=CARTESIAN_POINT('',(-2.35,-0.43,0.725)); #45746=CARTESIAN_POINT('',(-2.65,-0.43,5.551115123126E-17)); #45747=CARTESIAN_POINT('Origin',(-2.65,-0.43,0.3)); #45748=CARTESIAN_POINT('',(-3.,-0.43,5.551115123126E-17)); #45749=CARTESIAN_POINT('',(-2.65,-0.43,5.551115123126E-17)); #45750=CARTESIAN_POINT('',(-3.,-0.43,0.2)); #45751=CARTESIAN_POINT('',(-3.,-0.43,5.551115123126E-17)); #45752=CARTESIAN_POINT('',(-2.65,-0.43,0.2)); #45753=CARTESIAN_POINT('',(-3.,-0.43,0.2)); #45754=CARTESIAN_POINT('',(-2.55,-0.43,0.3)); #45755=CARTESIAN_POINT('Origin',(-2.65,-0.43,0.3)); #45756=CARTESIAN_POINT('',(-2.55,-0.43,0.725)); #45757=CARTESIAN_POINT('',(-2.55,-0.43,0.3)); #45758=CARTESIAN_POINT('',(-2.25,-0.43,1.025)); #45759=CARTESIAN_POINT('Origin',(-2.25,-0.43,0.725)); #45760=CARTESIAN_POINT('',(-2.25,-0.43,1.025)); #45761=CARTESIAN_POINT('Origin',(-2.41578967201,0.43,0.532659657565)); #45762=CARTESIAN_POINT('',(-2.25,0.43,1.025)); #45763=CARTESIAN_POINT('',(-2.25,0.43,1.025)); #45764=CARTESIAN_POINT('',(-2.55,0.43,0.725)); #45765=CARTESIAN_POINT('Origin',(-2.25,0.43,0.725)); #45766=CARTESIAN_POINT('',(-2.55,0.43,0.3)); #45767=CARTESIAN_POINT('',(-2.55,0.43,0.3)); #45768=CARTESIAN_POINT('',(-2.65,0.43,0.2)); #45769=CARTESIAN_POINT('Origin',(-2.65,0.43,0.3)); #45770=CARTESIAN_POINT('',(-3.,0.43,0.2)); #45771=CARTESIAN_POINT('',(-3.,0.43,0.2)); #45772=CARTESIAN_POINT('',(-3.,0.43,5.551115123126E-17)); #45773=CARTESIAN_POINT('',(-3.,0.43,5.551115123126E-17)); #45774=CARTESIAN_POINT('',(-2.65,0.43,5.551115123126E-17)); #45775=CARTESIAN_POINT('',(-2.65,0.43,5.551115123126E-17)); #45776=CARTESIAN_POINT('',(-2.35,0.43,0.3)); #45777=CARTESIAN_POINT('Origin',(-2.65,0.43,0.3)); #45778=CARTESIAN_POINT('',(-2.35,0.43,0.725)); #45779=CARTESIAN_POINT('',(-2.35,0.43,0.725)); #45780=CARTESIAN_POINT('Origin',(-2.25,0.43,0.725)); #45781=CARTESIAN_POINT('Origin',(-2.25,0.43,0.725)); #45782=CARTESIAN_POINT('',(-2.35,0.43,0.725)); #45783=CARTESIAN_POINT('Origin',(-1.95,-2.77555756156289E-16,1.025)); #45784=CARTESIAN_POINT('',(-2.25,-0.43,1.025)); #45785=CARTESIAN_POINT('',(-2.25,0.43,1.025)); #45786=CARTESIAN_POINT('Origin',(-1.8625,2.3625,1.025)); #45787=CARTESIAN_POINT('Origin',(-2.25,-2.11,1.025)); #45788=CARTESIAN_POINT('',(-2.25,-2.11,1.025)); #45789=CARTESIAN_POINT('Origin',(-2.25,-0.84,1.025)); #45790=CARTESIAN_POINT('',(-2.25,-0.84,1.025)); #45791=CARTESIAN_POINT('Origin',(-2.25,1.7,1.025)); #45792=CARTESIAN_POINT('',(-2.25,1.7,1.025)); #45793=CARTESIAN_POINT('Origin',(-2.25,0.43,1.025)); #45794=CARTESIAN_POINT('',(-2.25,0.43,1.025)); #45795=CARTESIAN_POINT('Origin',(-1.110171280765,1.610171280765,1.7)); #45796=CARTESIAN_POINT('Origin',(-2.25,-2.11,0.725)); #45797=CARTESIAN_POINT('',(-2.55,-2.11,0.725)); #45798=CARTESIAN_POINT('Origin',(-2.55,-2.11,0.3)); #45799=CARTESIAN_POINT('',(-2.55,-2.11,0.3)); #45800=CARTESIAN_POINT('Origin',(-2.65,-2.11,0.3)); #45801=CARTESIAN_POINT('',(-2.65,-2.11,0.2)); #45802=CARTESIAN_POINT('Origin',(-3.,-2.11,0.2)); #45803=CARTESIAN_POINT('',(-3.,-2.11,0.2)); #45804=CARTESIAN_POINT('Origin',(-3.,-2.11,5.551115123126E-17)); #45805=CARTESIAN_POINT('',(-3.,-2.11,5.551115123126E-17)); #45806=CARTESIAN_POINT('Origin',(-2.65,-2.11,5.551115123126E-17)); #45807=CARTESIAN_POINT('',(-2.65,-2.11,5.551115123126E-17)); #45808=CARTESIAN_POINT('Origin',(-2.65,-2.11,0.3)); #45809=CARTESIAN_POINT('',(-2.35,-2.11,0.3)); #45810=CARTESIAN_POINT('Origin',(-2.35,-2.11,0.725)); #45811=CARTESIAN_POINT('Origin',(-2.25,1.7,0.725)); #45812=CARTESIAN_POINT('',(-2.55,1.7,0.725)); #45813=CARTESIAN_POINT('Origin',(-2.55,1.7,0.3)); #45814=CARTESIAN_POINT('',(-2.55,1.7,0.3)); #45815=CARTESIAN_POINT('Origin',(-2.65,1.7,0.3)); #45816=CARTESIAN_POINT('',(-2.65,1.7,0.2)); #45817=CARTESIAN_POINT('Origin',(-3.,1.7,0.2)); #45818=CARTESIAN_POINT('',(-3.,1.7,0.2)); #45819=CARTESIAN_POINT('Origin',(-3.,1.7,5.551115123126E-17)); #45820=CARTESIAN_POINT('',(-3.,1.7,5.551115123126E-17)); #45821=CARTESIAN_POINT('Origin',(-2.65,1.7,5.551115123126E-17)); #45822=CARTESIAN_POINT('',(-2.65,1.7,5.551115123126E-17)); #45823=CARTESIAN_POINT('Origin',(-2.65,1.7,0.3)); #45824=CARTESIAN_POINT('',(-2.35,1.7,0.3)); #45825=CARTESIAN_POINT('Origin',(-2.35,1.7,0.725)); #45826=CARTESIAN_POINT('Origin',(-2.25,-0.84,0.725)); #45827=CARTESIAN_POINT('',(-2.55,-0.84,0.725)); #45828=CARTESIAN_POINT('Origin',(-2.55,-0.84,0.3)); #45829=CARTESIAN_POINT('',(-2.55,-0.84,0.3)); #45830=CARTESIAN_POINT('Origin',(-2.65,-0.84,0.3)); #45831=CARTESIAN_POINT('',(-2.65,-0.84,0.2)); #45832=CARTESIAN_POINT('Origin',(-3.,-0.84,0.2)); #45833=CARTESIAN_POINT('',(-3.,-0.84,0.2)); #45834=CARTESIAN_POINT('Origin',(-3.,-0.84,5.551115123126E-17)); #45835=CARTESIAN_POINT('',(-3.,-0.84,5.551115123126E-17)); #45836=CARTESIAN_POINT('Origin',(-2.65,-0.84,5.551115123126E-17)); #45837=CARTESIAN_POINT('',(-2.65,-0.84,5.551115123126E-17)); #45838=CARTESIAN_POINT('Origin',(-2.65,-0.84,0.3)); #45839=CARTESIAN_POINT('',(-2.35,-0.84,0.3)); #45840=CARTESIAN_POINT('Origin',(-2.35,-0.84,0.725)); #45841=CARTESIAN_POINT('Origin',(-2.25,0.43,0.725)); #45842=CARTESIAN_POINT('',(-2.55,0.43,0.725)); #45843=CARTESIAN_POINT('Origin',(-2.55,0.43,0.3)); #45844=CARTESIAN_POINT('',(-2.55,0.43,0.3)); #45845=CARTESIAN_POINT('Origin',(-2.65,0.43,0.3)); #45846=CARTESIAN_POINT('',(-2.65,0.43,0.2)); #45847=CARTESIAN_POINT('Origin',(-3.,0.43,0.2)); #45848=CARTESIAN_POINT('',(-3.,0.43,0.2)); #45849=CARTESIAN_POINT('Origin',(-3.,0.43,5.551115123126E-17)); #45850=CARTESIAN_POINT('',(-3.,0.43,5.551115123126E-17)); #45851=CARTESIAN_POINT('Origin',(-2.65,0.43,5.551115123126E-17)); #45852=CARTESIAN_POINT('',(-2.65,0.43,5.551115123126E-17)); #45853=CARTESIAN_POINT('Origin',(-2.65,0.43,0.3)); #45854=CARTESIAN_POINT('',(-2.35,0.43,0.3)); #45855=CARTESIAN_POINT('Origin',(-2.35,0.43,0.725)); #45856=CARTESIAN_POINT('',(0.,0.,0.)); #45857=CARTESIAN_POINT('',(0.,0.,0.)); #45858=CARTESIAN_POINT('Origin',(100.689573,-115.566375,0.)); #45859=CARTESIAN_POINT('',(100.689573,-115.566375,0.)); #45860=CARTESIAN_POINT('',(100.689573,-115.566375,1.6)); #45861=CARTESIAN_POINT('',(100.689573,-115.566375,0.)); #45862=CARTESIAN_POINT('',(33.773403,-115.566375,1.6)); #45863=CARTESIAN_POINT('',(100.689573,-115.566375,1.6)); #45864=CARTESIAN_POINT('',(33.773403,-115.566375,0.)); #45865=CARTESIAN_POINT('',(33.773403,-115.566375,0.)); #45866=CARTESIAN_POINT('',(100.689573,-115.566375,0.)); #45867=CARTESIAN_POINT('Origin',(100.689573,-41.085124,0.)); #45868=CARTESIAN_POINT('',(100.689573,-41.085124,0.)); #45869=CARTESIAN_POINT('',(100.689573,-41.085124,1.6)); #45870=CARTESIAN_POINT('',(100.689573,-41.085124,0.)); #45871=CARTESIAN_POINT('',(100.689573,-41.085124,1.6)); #45872=CARTESIAN_POINT('',(100.689573,-41.085124,0.)); #45873=CARTESIAN_POINT('Origin',(33.773403,-115.566375,0.)); #45874=CARTESIAN_POINT('',(33.773403,-41.085124,1.6)); #45875=CARTESIAN_POINT('',(33.773403,-115.566375,1.6)); #45876=CARTESIAN_POINT('',(33.773403,-41.085124,0.)); #45877=CARTESIAN_POINT('',(33.773403,-41.085124,0.)); #45878=CARTESIAN_POINT('',(33.773403,-115.566375,0.)); #45879=CARTESIAN_POINT('Origin',(67.231488,-78.3257495,0.)); #45880=CARTESIAN_POINT('',(33.773403,-41.085124,0.)); #45881=CARTESIAN_POINT('',(95.424,-111.506,0.)); #45882=CARTESIAN_POINT('Origin',(96.774,-111.506,0.)); #45883=CARTESIAN_POINT('',(95.167537,-104.875757,0.)); #45884=CARTESIAN_POINT('Origin',(95.667537,-104.875757,0.)); #45885=CARTESIAN_POINT('',(90.002,-104.284,0.)); #45886=CARTESIAN_POINT('Origin',(91.152,-104.284,0.)); #45887=CARTESIAN_POINT('',(95.167537,-102.335757,0.)); #45888=CARTESIAN_POINT('Origin',(95.667537,-102.335757,0.)); #45889=CARTESIAN_POINT('',(95.167537,-99.795757,0.)); #45890=CARTESIAN_POINT('Origin',(95.667537,-99.795757,0.)); #45891=CARTESIAN_POINT('',(87.607,-101.574,0.)); #45892=CARTESIAN_POINT('Origin',(88.082,-101.574,0.)); #45893=CARTESIAN_POINT('',(85.107,-101.574,0.)); #45894=CARTESIAN_POINT('Origin',(85.582,-101.574,0.)); #45895=CARTESIAN_POINT('',(83.107,-101.574,0.)); #45896=CARTESIAN_POINT('Origin',(83.582,-101.574,0.)); #45897=CARTESIAN_POINT('',(76.862,-104.284,0.)); #45898=CARTESIAN_POINT('Origin',(78.012,-104.284,0.)); #45899=CARTESIAN_POINT('',(80.607,-101.574,0.)); #45900=CARTESIAN_POINT('Origin',(81.082,-101.574,0.)); #45901=CARTESIAN_POINT('',(60.231042,-104.797876,0.)); #45902=CARTESIAN_POINT('Origin',(60.731042,-104.797876,0.)); #45903=CARTESIAN_POINT('',(54.696,-104.284,0.)); #45904=CARTESIAN_POINT('Origin',(55.846,-104.284,0.)); #45905=CARTESIAN_POINT('',(60.231042,-102.257876,0.)); #45906=CARTESIAN_POINT('Origin',(60.731042,-102.257876,0.)); #45907=CARTESIAN_POINT('',(60.231042,-99.717876,0.)); #45908=CARTESIAN_POINT('Origin',(60.731042,-99.717876,0.)); #45909=CARTESIAN_POINT('',(52.301,-101.574,0.)); #45910=CARTESIAN_POINT('Origin',(52.776,-101.574,0.)); #45911=CARTESIAN_POINT('',(36.496,-111.506,0.)); #45912=CARTESIAN_POINT('Origin',(37.846,-111.506,0.)); #45913=CARTESIAN_POINT('',(41.556,-104.284,0.)); #45914=CARTESIAN_POINT('Origin',(42.706,-104.284,0.)); #45915=CARTESIAN_POINT('',(49.801,-101.574,0.)); #45916=CARTESIAN_POINT('Origin',(50.276,-101.574,0.)); #45917=CARTESIAN_POINT('',(47.801,-101.574,0.)); #45918=CARTESIAN_POINT('Origin',(48.276,-101.574,0.)); #45919=CARTESIAN_POINT('',(45.301,-101.574,0.)); #45920=CARTESIAN_POINT('Origin',(45.776,-101.574,0.)); #45921=CARTESIAN_POINT('',(87.019,-47.864,0.)); #45922=CARTESIAN_POINT('Origin',(87.769,-47.864,0.)); #45923=CARTESIAN_POINT('',(87.169,-44.834,0.)); #45924=CARTESIAN_POINT('Origin',(88.069,-44.834,0.)); #45925=CARTESIAN_POINT('',(82.169,-47.864,0.)); #45926=CARTESIAN_POINT('Origin',(82.919,-47.864,0.)); #45927=CARTESIAN_POINT('',(81.719,-44.834,0.)); #45928=CARTESIAN_POINT('Origin',(82.619,-44.834,0.)); #45929=CARTESIAN_POINT('',(65.96,-45.212,0.)); #45930=CARTESIAN_POINT('Origin',(67.31,-45.212,0.)); #45931=CARTESIAN_POINT('',(50.560523,-47.848249,0.)); #45932=CARTESIAN_POINT('Origin',(51.310523,-47.848249,0.)); #45933=CARTESIAN_POINT('',(50.710523,-44.818249,0.)); #45934=CARTESIAN_POINT('Origin',(51.610523,-44.818249,0.)); #45935=CARTESIAN_POINT('',(45.710523,-47.848249,0.)); #45936=CARTESIAN_POINT('Origin',(46.460523,-47.848249,0.)); #45937=CARTESIAN_POINT('',(45.260523,-44.818249,0.)); #45938=CARTESIAN_POINT('Origin',(46.160523,-44.818249,0.)); #45939=CARTESIAN_POINT('Origin',(67.231488,-78.3257495,1.6)); #45940=CARTESIAN_POINT('',(33.773403,-41.085124,1.6)); #45941=CARTESIAN_POINT('',(95.424,-111.506,1.6)); #45942=CARTESIAN_POINT('Origin',(96.774,-111.506,1.6)); #45943=CARTESIAN_POINT('',(95.167537,-104.875757,1.6)); #45944=CARTESIAN_POINT('Origin',(95.667537,-104.875757,1.6)); #45945=CARTESIAN_POINT('',(90.002,-104.284,1.6)); #45946=CARTESIAN_POINT('Origin',(91.152,-104.284,1.6)); #45947=CARTESIAN_POINT('',(95.167537,-102.335757,1.6)); #45948=CARTESIAN_POINT('Origin',(95.667537,-102.335757,1.6)); #45949=CARTESIAN_POINT('',(95.167537,-99.795757,1.6)); #45950=CARTESIAN_POINT('Origin',(95.667537,-99.795757,1.6)); #45951=CARTESIAN_POINT('',(87.607,-101.574,1.6)); #45952=CARTESIAN_POINT('Origin',(88.082,-101.574,1.6)); #45953=CARTESIAN_POINT('',(85.107,-101.574,1.6)); #45954=CARTESIAN_POINT('Origin',(85.582,-101.574,1.6)); #45955=CARTESIAN_POINT('',(83.107,-101.574,1.6)); #45956=CARTESIAN_POINT('Origin',(83.582,-101.574,1.6)); #45957=CARTESIAN_POINT('',(76.862,-104.284,1.6)); #45958=CARTESIAN_POINT('Origin',(78.012,-104.284,1.6)); #45959=CARTESIAN_POINT('',(80.607,-101.574,1.6)); #45960=CARTESIAN_POINT('Origin',(81.082,-101.574,1.6)); #45961=CARTESIAN_POINT('',(60.231042,-104.797876,1.6)); #45962=CARTESIAN_POINT('Origin',(60.731042,-104.797876,1.6)); #45963=CARTESIAN_POINT('',(54.696,-104.284,1.6)); #45964=CARTESIAN_POINT('Origin',(55.846,-104.284,1.6)); #45965=CARTESIAN_POINT('',(60.231042,-102.257876,1.6)); #45966=CARTESIAN_POINT('Origin',(60.731042,-102.257876,1.6)); #45967=CARTESIAN_POINT('',(60.231042,-99.717876,1.6)); #45968=CARTESIAN_POINT('Origin',(60.731042,-99.717876,1.6)); #45969=CARTESIAN_POINT('',(52.301,-101.574,1.6)); #45970=CARTESIAN_POINT('Origin',(52.776,-101.574,1.6)); #45971=CARTESIAN_POINT('',(36.496,-111.506,1.6)); #45972=CARTESIAN_POINT('Origin',(37.846,-111.506,1.6)); #45973=CARTESIAN_POINT('',(41.556,-104.284,1.6)); #45974=CARTESIAN_POINT('Origin',(42.706,-104.284,1.6)); #45975=CARTESIAN_POINT('',(49.801,-101.574,1.6)); #45976=CARTESIAN_POINT('Origin',(50.276,-101.574,1.6)); #45977=CARTESIAN_POINT('',(47.801,-101.574,1.6)); #45978=CARTESIAN_POINT('Origin',(48.276,-101.574,1.6)); #45979=CARTESIAN_POINT('',(45.301,-101.574,1.6)); #45980=CARTESIAN_POINT('Origin',(45.776,-101.574,1.6)); #45981=CARTESIAN_POINT('',(87.019,-47.864,1.6)); #45982=CARTESIAN_POINT('Origin',(87.769,-47.864,1.6)); #45983=CARTESIAN_POINT('',(87.169,-44.834,1.6)); #45984=CARTESIAN_POINT('Origin',(88.069,-44.834,1.6)); #45985=CARTESIAN_POINT('',(82.169,-47.864,1.6)); #45986=CARTESIAN_POINT('Origin',(82.919,-47.864,1.6)); #45987=CARTESIAN_POINT('',(81.719,-44.834,1.6)); #45988=CARTESIAN_POINT('Origin',(82.619,-44.834,1.6)); #45989=CARTESIAN_POINT('',(65.96,-45.212,1.6)); #45990=CARTESIAN_POINT('Origin',(67.31,-45.212,1.6)); #45991=CARTESIAN_POINT('',(50.560523,-47.848249,1.6)); #45992=CARTESIAN_POINT('Origin',(51.310523,-47.848249,1.6)); #45993=CARTESIAN_POINT('',(50.710523,-44.818249,1.6)); #45994=CARTESIAN_POINT('Origin',(51.610523,-44.818249,1.6)); #45995=CARTESIAN_POINT('',(45.710523,-47.848249,1.6)); #45996=CARTESIAN_POINT('Origin',(46.460523,-47.848249,1.6)); #45997=CARTESIAN_POINT('',(45.260523,-44.818249,1.6)); #45998=CARTESIAN_POINT('Origin',(46.160523,-44.818249,1.6)); #45999=CARTESIAN_POINT('Origin',(33.773403,-41.085124,0.)); #46000=CARTESIAN_POINT('Origin',(96.774,-111.506,-0.01)); #46001=CARTESIAN_POINT('',(95.424,-111.506,-0.01)); #46002=CARTESIAN_POINT('Origin',(95.667537,-104.875757,-0.01)); #46003=CARTESIAN_POINT('',(95.167537,-104.875757,-0.01)); #46004=CARTESIAN_POINT('Origin',(91.152,-104.284,-0.01)); #46005=CARTESIAN_POINT('',(90.002,-104.284,-0.01)); #46006=CARTESIAN_POINT('Origin',(95.667537,-102.335757,-0.01)); #46007=CARTESIAN_POINT('',(95.167537,-102.335757,-0.01)); #46008=CARTESIAN_POINT('Origin',(95.667537,-99.795757,-0.01)); #46009=CARTESIAN_POINT('',(95.167537,-99.795757,-0.01)); #46010=CARTESIAN_POINT('Origin',(88.082,-101.574,-0.01)); #46011=CARTESIAN_POINT('',(87.607,-101.574,-0.01)); #46012=CARTESIAN_POINT('Origin',(85.582,-101.574,-0.01)); #46013=CARTESIAN_POINT('',(85.107,-101.574,-0.01)); #46014=CARTESIAN_POINT('Origin',(83.582,-101.574,-0.01)); #46015=CARTESIAN_POINT('',(83.107,-101.574,-0.01)); #46016=CARTESIAN_POINT('Origin',(78.012,-104.284,-0.01)); #46017=CARTESIAN_POINT('',(76.862,-104.284,-0.01)); #46018=CARTESIAN_POINT('Origin',(81.082,-101.574,-0.01)); #46019=CARTESIAN_POINT('',(80.607,-101.574,-0.01)); #46020=CARTESIAN_POINT('Origin',(60.731042,-104.797876,-0.01)); #46021=CARTESIAN_POINT('',(60.231042,-104.797876,-0.01)); #46022=CARTESIAN_POINT('Origin',(55.846,-104.284,-0.01)); #46023=CARTESIAN_POINT('',(54.696,-104.284,-0.01)); #46024=CARTESIAN_POINT('Origin',(60.731042,-102.257876,-0.01)); #46025=CARTESIAN_POINT('',(60.231042,-102.257876,-0.01)); #46026=CARTESIAN_POINT('Origin',(60.731042,-99.717876,-0.01)); #46027=CARTESIAN_POINT('',(60.231042,-99.717876,-0.01)); #46028=CARTESIAN_POINT('Origin',(52.776,-101.574,-0.01)); #46029=CARTESIAN_POINT('',(52.301,-101.574,-0.01)); #46030=CARTESIAN_POINT('Origin',(37.846,-111.506,-0.01)); #46031=CARTESIAN_POINT('',(36.496,-111.506,-0.01)); #46032=CARTESIAN_POINT('Origin',(42.706,-104.284,-0.01)); #46033=CARTESIAN_POINT('',(41.556,-104.284,-0.01)); #46034=CARTESIAN_POINT('Origin',(50.276,-101.574,-0.01)); #46035=CARTESIAN_POINT('',(49.801,-101.574,-0.01)); #46036=CARTESIAN_POINT('Origin',(48.276,-101.574,-0.01)); #46037=CARTESIAN_POINT('',(47.801,-101.574,-0.01)); #46038=CARTESIAN_POINT('Origin',(45.776,-101.574,-0.01)); #46039=CARTESIAN_POINT('',(45.301,-101.574,-0.01)); #46040=CARTESIAN_POINT('Origin',(87.769,-47.864,-0.01)); #46041=CARTESIAN_POINT('',(87.019,-47.864,-0.01)); #46042=CARTESIAN_POINT('Origin',(88.069,-44.834,-0.01)); #46043=CARTESIAN_POINT('',(87.169,-44.834,-0.01)); #46044=CARTESIAN_POINT('Origin',(82.919,-47.864,-0.01)); #46045=CARTESIAN_POINT('',(82.169,-47.864,-0.01)); #46046=CARTESIAN_POINT('Origin',(82.619,-44.834,-0.01)); #46047=CARTESIAN_POINT('',(81.719,-44.834,-0.01)); #46048=CARTESIAN_POINT('Origin',(67.31,-45.212,-0.01)); #46049=CARTESIAN_POINT('',(65.96,-45.212,-0.01)); #46050=CARTESIAN_POINT('Origin',(51.310523,-47.848249,-0.01)); #46051=CARTESIAN_POINT('',(50.560523,-47.848249,-0.01)); #46052=CARTESIAN_POINT('Origin',(51.610523,-44.818249,-0.01)); #46053=CARTESIAN_POINT('',(50.710523,-44.818249,-0.01)); #46054=CARTESIAN_POINT('Origin',(46.460523,-47.848249,-0.01)); #46055=CARTESIAN_POINT('',(45.710523,-47.848249,-0.01)); #46056=CARTESIAN_POINT('Origin',(46.160523,-44.818249,-0.01)); #46057=CARTESIAN_POINT('',(45.260523,-44.818249,-0.01)); #46058=CARTESIAN_POINT('',(0.,0.,0.)); #46059=CARTESIAN_POINT('',(0.,0.,0.)); #46060=CARTESIAN_POINT('Origin',(4.8,-9.5,-49.)); #46061=CARTESIAN_POINT('',(4.8,-0.5,-50.05)); #46062=CARTESIAN_POINT('Origin',(4.8,-0.5,-49.)); #46063=CARTESIAN_POINT('',(4.8,0.499999999999999,-50.05)); #46064=CARTESIAN_POINT('',(4.8,-9.5,-50.05)); #46065=CARTESIAN_POINT('Origin',(4.8,0.5,-49.)); #46066=CARTESIAN_POINT('Origin',(4.8,-9.5,-2.)); #46067=CARTESIAN_POINT('',(4.8,-0.5,-3.05)); #46068=CARTESIAN_POINT('Origin',(4.8,-0.5,-2.)); #46069=CARTESIAN_POINT('',(4.8,0.499999999999999,-3.05)); #46070=CARTESIAN_POINT('',(4.8,-9.5,-3.05)); #46071=CARTESIAN_POINT('Origin',(4.8,0.5,-2.)); #46072=CARTESIAN_POINT('Origin',(7.96,-2.5,-1.6)); #46073=CARTESIAN_POINT('',(7.96,-0.5,-2.1)); #46074=CARTESIAN_POINT('Origin',(7.96,-0.5,-1.6)); #46075=CARTESIAN_POINT('',(7.96,0.5,-2.1)); #46076=CARTESIAN_POINT('',(7.96,-2.5,-2.1)); #46077=CARTESIAN_POINT('Origin',(7.96,0.5,-1.6)); #46078=CARTESIAN_POINT('Origin',(7.96,-2.5,-4.898587196589E-17)); #46079=CARTESIAN_POINT('',(7.46,0.5,0.)); #46080=CARTESIAN_POINT('',(7.46,-0.5,0.)); #46081=CARTESIAN_POINT('',(7.46,-2.5,0.)); #46082=CARTESIAN_POINT('',(8.46,-0.5,0.)); #46083=CARTESIAN_POINT('Origin',(7.96,-0.5,-4.898587196589E-17)); #46084=CARTESIAN_POINT('',(8.46,0.5,0.)); #46085=CARTESIAN_POINT('',(8.46,-2.5,0.)); #46086=CARTESIAN_POINT('Origin',(7.96,0.5,-4.898587196589E-17)); #46087=CARTESIAN_POINT('Origin',(0.01000000000042,-1.5,-8.99)); #46088=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-8.490100010002)); #46089=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-9.489899989998)); #46090=CARTESIAN_POINT('Origin',(0.01000000000042,0.5,-8.99)); #46091=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-9.489899989998)); #46092=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-9.489899989998)); #46093=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-8.490100010002)); #46094=CARTESIAN_POINT('Origin',(0.01000000000042,-0.5,-8.99)); #46095=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-8.490100010002)); #46096=CARTESIAN_POINT('Origin',(0.01000000000045,-1.5,-6.45)); #46097=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-5.950100010002)); #46098=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-6.949899989998)); #46099=CARTESIAN_POINT('Origin',(0.01000000000045,0.5,-6.45)); #46100=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-6.949899989998)); #46101=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-6.949899989998)); #46102=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-5.950100010002)); #46103=CARTESIAN_POINT('Origin',(0.01000000000045,-0.5,-6.45)); #46104=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-5.950100010002)); #46105=CARTESIAN_POINT('Origin',(0.01000000000047,-1.5,-3.91)); #46106=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-3.410100010002)); #46107=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-4.409899989998)); #46108=CARTESIAN_POINT('Origin',(0.01000000000047,0.5,-3.91)); #46109=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-4.409899989998)); #46110=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-4.409899989998)); #46111=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-3.410100010002)); #46112=CARTESIAN_POINT('Origin',(0.01000000000047,-0.5,-3.91)); #46113=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-3.410100010002)); #46114=CARTESIAN_POINT('Origin',(0.0100000000005,-1.5,-1.37)); #46115=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.870100010002)); #46116=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-1.869899989998)); #46117=CARTESIAN_POINT('Origin',(0.0100000000005,0.5,-1.37)); #46118=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-1.869899989998)); #46119=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-1.869899989998)); #46120=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.870100010002)); #46121=CARTESIAN_POINT('Origin',(0.0100000000005,-0.5,-1.37)); #46122=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-0.870100010002)); #46123=CARTESIAN_POINT('Origin',(1.61,-1.5,-47.09)); #46124=CARTESIAN_POINT('',(1.61,-0.5,-47.59)); #46125=CARTESIAN_POINT('Origin',(1.61,-0.5,-47.09)); #46126=CARTESIAN_POINT('',(1.61,0.5,-47.59)); #46127=CARTESIAN_POINT('',(1.61,-1.5,-47.59)); #46128=CARTESIAN_POINT('Origin',(1.61,0.5,-47.09)); #46129=CARTESIAN_POINT('Origin',(1.61,-1.5,-44.55)); #46130=CARTESIAN_POINT('',(1.61,-0.5,-45.05)); #46131=CARTESIAN_POINT('Origin',(1.61,-0.5,-44.55)); #46132=CARTESIAN_POINT('',(1.61,0.5,-45.05)); #46133=CARTESIAN_POINT('',(1.61,-1.5,-45.05)); #46134=CARTESIAN_POINT('Origin',(1.61,0.5,-44.55)); #46135=CARTESIAN_POINT('Origin',(1.61,-1.5,-42.01)); #46136=CARTESIAN_POINT('',(1.61,-0.5,-42.51)); #46137=CARTESIAN_POINT('Origin',(1.61,-0.5,-42.01)); #46138=CARTESIAN_POINT('',(1.61,0.5,-42.51)); #46139=CARTESIAN_POINT('',(1.61,-1.5,-42.51)); #46140=CARTESIAN_POINT('Origin',(1.61,0.5,-42.01)); #46141=CARTESIAN_POINT('Origin',(1.61,-1.5,-39.47)); #46142=CARTESIAN_POINT('',(1.61,-0.5,-39.97)); #46143=CARTESIAN_POINT('Origin',(1.61,-0.5,-39.47)); #46144=CARTESIAN_POINT('',(1.61,0.5,-39.97)); #46145=CARTESIAN_POINT('',(1.61,-1.5,-39.97)); #46146=CARTESIAN_POINT('Origin',(1.61,0.5,-39.47)); #46147=CARTESIAN_POINT('Origin',(1.61,-1.5,-36.93)); #46148=CARTESIAN_POINT('',(1.61,-0.5,-37.43)); #46149=CARTESIAN_POINT('Origin',(1.61,-0.5,-36.93)); #46150=CARTESIAN_POINT('',(1.61,0.5,-37.43)); #46151=CARTESIAN_POINT('',(1.61,-1.5,-37.43)); #46152=CARTESIAN_POINT('Origin',(1.61,0.5,-36.93)); #46153=CARTESIAN_POINT('Origin',(1.61,-1.5,-34.39)); #46154=CARTESIAN_POINT('',(1.61,-0.5,-34.89)); #46155=CARTESIAN_POINT('Origin',(1.61,-0.5,-34.39)); #46156=CARTESIAN_POINT('',(1.61,0.5,-34.89)); #46157=CARTESIAN_POINT('',(1.61,-1.5,-34.89)); #46158=CARTESIAN_POINT('Origin',(1.61,0.5,-34.39)); #46159=CARTESIAN_POINT('Origin',(1.61,-1.5,-31.85)); #46160=CARTESIAN_POINT('',(1.61,-0.5,-32.35)); #46161=CARTESIAN_POINT('Origin',(1.61,-0.5,-31.85)); #46162=CARTESIAN_POINT('',(1.61,0.5,-32.35)); #46163=CARTESIAN_POINT('',(1.61,-1.5,-32.35)); #46164=CARTESIAN_POINT('Origin',(1.61,0.5,-31.85)); #46165=CARTESIAN_POINT('Origin',(1.61,-1.5,-29.31)); #46166=CARTESIAN_POINT('',(1.61,-0.5,-29.81)); #46167=CARTESIAN_POINT('Origin',(1.61,-0.5,-29.31)); #46168=CARTESIAN_POINT('',(1.61,0.5,-29.81)); #46169=CARTESIAN_POINT('',(1.61,-1.5,-29.81)); #46170=CARTESIAN_POINT('Origin',(1.61,0.5,-29.31)); #46171=CARTESIAN_POINT('Origin',(1.61,-1.5,-26.77)); #46172=CARTESIAN_POINT('',(1.61,-0.5,-27.27)); #46173=CARTESIAN_POINT('Origin',(1.61,-0.5,-26.77)); #46174=CARTESIAN_POINT('',(1.61,0.5,-27.27)); #46175=CARTESIAN_POINT('',(1.61,-1.5,-27.27)); #46176=CARTESIAN_POINT('Origin',(1.61,0.5,-26.77)); #46177=CARTESIAN_POINT('Origin',(1.61,-1.5,-24.23)); #46178=CARTESIAN_POINT('',(1.61,-0.5,-24.73)); #46179=CARTESIAN_POINT('Origin',(1.61,-0.5,-24.23)); #46180=CARTESIAN_POINT('',(1.61,0.5,-24.73)); #46181=CARTESIAN_POINT('',(1.61,-1.5,-24.73)); #46182=CARTESIAN_POINT('Origin',(1.61,0.5,-24.23)); #46183=CARTESIAN_POINT('Origin',(1.61,-1.5,-21.69)); #46184=CARTESIAN_POINT('',(1.61,-0.5,-22.19)); #46185=CARTESIAN_POINT('Origin',(1.61,-0.5,-21.69)); #46186=CARTESIAN_POINT('',(1.61,0.5,-22.19)); #46187=CARTESIAN_POINT('',(1.61,-1.5,-22.19)); #46188=CARTESIAN_POINT('Origin',(1.61,0.5,-21.69)); #46189=CARTESIAN_POINT('Origin',(1.61,-1.5,-19.15)); #46190=CARTESIAN_POINT('',(1.61,-0.5,-19.65)); #46191=CARTESIAN_POINT('Origin',(1.61,-0.5,-19.15)); #46192=CARTESIAN_POINT('',(1.61,0.5,-19.65)); #46193=CARTESIAN_POINT('',(1.61,-1.5,-19.65)); #46194=CARTESIAN_POINT('Origin',(1.61,0.5,-19.15)); #46195=CARTESIAN_POINT('Origin',(0.0100000000004,-1.5,-11.53)); #46196=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-11.03010001)); #46197=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-12.02989998999)); #46198=CARTESIAN_POINT('Origin',(0.0100000000004,0.5,-11.53)); #46199=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-12.02989998999)); #46200=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-12.02989998999)); #46201=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-11.03010001)); #46202=CARTESIAN_POINT('Origin',(0.0100000000004,-0.5,-11.53)); #46203=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-11.03010001)); #46204=CARTESIAN_POINT('Origin',(0.01000000000037,-1.5,-14.07)); #46205=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-13.57010001)); #46206=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-14.56989998999)); #46207=CARTESIAN_POINT('Origin',(0.01000000000037,0.5,-14.07)); #46208=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-14.56989998999)); #46209=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-14.56989998999)); #46210=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-13.57010001)); #46211=CARTESIAN_POINT('Origin',(0.01000000000037,-0.5,-14.07)); #46212=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-13.57010001)); #46213=CARTESIAN_POINT('Origin',(0.01000000000034,-1.5,-16.61)); #46214=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-16.11010001)); #46215=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-17.10989998999)); #46216=CARTESIAN_POINT('Origin',(0.01000000000034,0.5,-16.61)); #46217=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-17.10989998999)); #46218=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-17.10989998999)); #46219=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-16.11010001)); #46220=CARTESIAN_POINT('Origin',(0.01000000000034,-0.5,-16.61)); #46221=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-16.11010001)); #46222=CARTESIAN_POINT('Origin',(0.01000000000032,-1.5,-19.15)); #46223=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-18.65010001)); #46224=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-19.64989998999)); #46225=CARTESIAN_POINT('Origin',(0.01000000000032,0.5,-19.15)); #46226=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-19.64989998999)); #46227=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-19.64989998999)); #46228=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-18.65010001)); #46229=CARTESIAN_POINT('Origin',(0.01000000000032,-0.5,-19.15)); #46230=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-18.65010001)); #46231=CARTESIAN_POINT('Origin',(0.01000000000029,-1.5,-21.69)); #46232=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-21.19010001)); #46233=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-22.18989998999)); #46234=CARTESIAN_POINT('Origin',(0.01000000000029,0.5,-21.69)); #46235=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-22.18989998999)); #46236=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-22.18989998999)); #46237=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-21.19010001)); #46238=CARTESIAN_POINT('Origin',(0.01000000000029,-0.5,-21.69)); #46239=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-21.19010001)); #46240=CARTESIAN_POINT('Origin',(0.01000000000026,-1.5,-24.23)); #46241=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-23.73010001)); #46242=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-24.72989998999)); #46243=CARTESIAN_POINT('Origin',(0.01000000000026,0.5,-24.23)); #46244=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-24.72989998999)); #46245=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-24.72989998999)); #46246=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-23.73010001)); #46247=CARTESIAN_POINT('Origin',(0.01000000000026,-0.5,-24.23)); #46248=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-23.73010001)); #46249=CARTESIAN_POINT('Origin',(0.01000000000024,-1.5,-26.77)); #46250=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-26.27010001)); #46251=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-27.26989998999)); #46252=CARTESIAN_POINT('Origin',(0.01000000000024,0.5,-26.77)); #46253=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-27.26989998999)); #46254=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-27.26989998999)); #46255=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-26.27010001)); #46256=CARTESIAN_POINT('Origin',(0.01000000000024,-0.5,-26.77)); #46257=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-26.27010001)); #46258=CARTESIAN_POINT('Origin',(0.01000000000021,-1.5,-29.31)); #46259=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-28.81010001)); #46260=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-29.80989998999)); #46261=CARTESIAN_POINT('Origin',(0.01000000000021,0.5,-29.31)); #46262=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-29.80989998999)); #46263=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-29.80989998999)); #46264=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-28.81010001)); #46265=CARTESIAN_POINT('Origin',(0.01000000000021,-0.5,-29.31)); #46266=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-28.81010001)); #46267=CARTESIAN_POINT('Origin',(0.01000000000018,-1.5,-31.85)); #46268=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-31.35010001)); #46269=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-32.34989998999)); #46270=CARTESIAN_POINT('Origin',(0.01000000000018,0.5,-31.85)); #46271=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-32.34989998999)); #46272=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-32.34989998999)); #46273=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-31.35010001)); #46274=CARTESIAN_POINT('Origin',(0.01000000000018,-0.5,-31.85)); #46275=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-31.35010001)); #46276=CARTESIAN_POINT('Origin',(0.01000000000016,-1.5,-34.39)); #46277=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-33.89010001)); #46278=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-34.88989998999)); #46279=CARTESIAN_POINT('Origin',(0.01000000000016,0.5,-34.39)); #46280=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-34.88989998999)); #46281=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-34.88989998999)); #46282=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-33.89010001)); #46283=CARTESIAN_POINT('Origin',(0.01000000000016,-0.5,-34.39)); #46284=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-33.89010001)); #46285=CARTESIAN_POINT('Origin',(0.01000000000013,-1.5,-36.93)); #46286=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-36.43010001)); #46287=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-37.42989998999)); #46288=CARTESIAN_POINT('Origin',(0.01000000000013,0.5,-36.93)); #46289=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-37.42989998999)); #46290=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-37.42989998999)); #46291=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-36.43010001)); #46292=CARTESIAN_POINT('Origin',(0.01000000000013,-0.5,-36.93)); #46293=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-36.43010001)); #46294=CARTESIAN_POINT('Origin',(0.01000000000011,-1.5,-39.47)); #46295=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-38.97010001)); #46296=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-39.96989998999)); #46297=CARTESIAN_POINT('Origin',(0.01000000000011,0.5,-39.47)); #46298=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-39.96989998999)); #46299=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-39.96989998999)); #46300=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-38.97010001)); #46301=CARTESIAN_POINT('Origin',(0.01000000000011,-0.5,-39.47)); #46302=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-38.97010001)); #46303=CARTESIAN_POINT('Origin',(0.01000000000008,-1.5,-42.01)); #46304=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-41.51010001)); #46305=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-42.50989998999)); #46306=CARTESIAN_POINT('Origin',(0.01000000000008,0.5,-42.01)); #46307=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-42.50989998999)); #46308=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-42.50989998999)); #46309=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-41.51010001)); #46310=CARTESIAN_POINT('Origin',(0.01000000000008,-0.5,-42.01)); #46311=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-41.51010001)); #46312=CARTESIAN_POINT('Origin',(0.01000000000005,-1.5,-44.55)); #46313=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-44.05010001)); #46314=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-45.04989998999)); #46315=CARTESIAN_POINT('Origin',(0.01000000000005,0.5,-44.55)); #46316=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-45.04989998999)); #46317=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-45.04989998999)); #46318=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-44.05010001)); #46319=CARTESIAN_POINT('Origin',(0.01000000000005,-0.5,-44.55)); #46320=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-44.05010001)); #46321=CARTESIAN_POINT('Origin',(0.01000000000003,-1.5,-47.09)); #46322=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-46.59010001)); #46323=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-47.58989998999)); #46324=CARTESIAN_POINT('Origin',(0.01000000000003,0.5,-47.09)); #46325=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-47.58989998999)); #46326=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-47.58989998999)); #46327=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-46.59010001)); #46328=CARTESIAN_POINT('Origin',(0.01000000000003,-0.5,-47.09)); #46329=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-46.59010001)); #46330=CARTESIAN_POINT('Origin',(1.61,-1.5,-49.63)); #46331=CARTESIAN_POINT('',(1.61,-0.5,-50.13)); #46332=CARTESIAN_POINT('Origin',(1.61,-0.5,-49.63)); #46333=CARTESIAN_POINT('',(1.61,0.5,-50.13)); #46334=CARTESIAN_POINT('',(1.61,-1.5,-50.13)); #46335=CARTESIAN_POINT('Origin',(1.61,0.5,-49.63)); #46336=CARTESIAN_POINT('Origin',(1.61,-1.5,-16.61)); #46337=CARTESIAN_POINT('',(1.61,-0.5,-17.11)); #46338=CARTESIAN_POINT('Origin',(1.61,-0.5,-16.61)); #46339=CARTESIAN_POINT('',(1.61,0.5,-17.11)); #46340=CARTESIAN_POINT('',(1.61,-1.5,-17.11)); #46341=CARTESIAN_POINT('Origin',(1.61,0.5,-16.61)); #46342=CARTESIAN_POINT('Origin',(1.61,-1.5,-14.07)); #46343=CARTESIAN_POINT('',(1.61,-0.5,-14.57)); #46344=CARTESIAN_POINT('Origin',(1.61,-0.5,-14.07)); #46345=CARTESIAN_POINT('',(1.61,0.5,-14.57)); #46346=CARTESIAN_POINT('',(1.61,-1.5,-14.57)); #46347=CARTESIAN_POINT('Origin',(1.61,0.5,-14.07)); #46348=CARTESIAN_POINT('Origin',(1.61,-1.5,-11.53)); #46349=CARTESIAN_POINT('',(1.61,-0.5,-12.03)); #46350=CARTESIAN_POINT('Origin',(1.61,-0.5,-11.53)); #46351=CARTESIAN_POINT('',(1.61,0.5,-12.03)); #46352=CARTESIAN_POINT('',(1.61,-1.5,-12.03)); #46353=CARTESIAN_POINT('Origin',(1.61,0.5,-11.53)); #46354=CARTESIAN_POINT('Origin',(1.61,-1.5,-8.99)); #46355=CARTESIAN_POINT('',(1.61,-0.5,-9.49)); #46356=CARTESIAN_POINT('Origin',(1.61,-0.5,-8.99)); #46357=CARTESIAN_POINT('',(1.61,0.5,-9.49)); #46358=CARTESIAN_POINT('',(1.61,-1.5,-9.49)); #46359=CARTESIAN_POINT('Origin',(1.61,0.5,-8.99)); #46360=CARTESIAN_POINT('Origin',(1.61,-1.5,-6.45)); #46361=CARTESIAN_POINT('',(1.61,-0.5,-6.95)); #46362=CARTESIAN_POINT('Origin',(1.61,-0.5,-6.45)); #46363=CARTESIAN_POINT('',(1.61,0.5,-6.95)); #46364=CARTESIAN_POINT('',(1.61,-1.5,-6.95)); #46365=CARTESIAN_POINT('Origin',(1.61,0.5,-6.45)); #46366=CARTESIAN_POINT('Origin',(1.61,-1.5,-3.91)); #46367=CARTESIAN_POINT('',(1.61,-0.5,-4.41)); #46368=CARTESIAN_POINT('Origin',(1.61,-0.5,-3.91)); #46369=CARTESIAN_POINT('',(1.61,0.5,-4.41)); #46370=CARTESIAN_POINT('',(1.61,-1.5,-4.41)); #46371=CARTESIAN_POINT('Origin',(1.61,0.5,-3.91)); #46372=CARTESIAN_POINT('Origin',(1.610000000001,-1.5,-1.37)); #46373=CARTESIAN_POINT('',(1.610000000001,-0.5,-1.87)); #46374=CARTESIAN_POINT('Origin',(1.610000000001,-0.5,-1.37)); #46375=CARTESIAN_POINT('',(1.610000000001,0.5,-1.87)); #46376=CARTESIAN_POINT('',(1.610000000001,-1.5,-1.87)); #46377=CARTESIAN_POINT('Origin',(1.610000000001,0.5,-1.37)); #46378=CARTESIAN_POINT('Origin',(0.01,-1.5,-49.63)); #46379=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-49.13010001)); #46380=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-50.12989998999)); #46381=CARTESIAN_POINT('Origin',(0.01,0.5,-49.63)); #46382=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-50.12989998999)); #46383=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-50.12989998999)); #46384=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-49.13010001)); #46385=CARTESIAN_POINT('Origin',(0.01,-0.5,-49.63)); #46386=CARTESIAN_POINT('',(-3.469446951954E-15,-1.5,-49.13010001)); #46387=CARTESIAN_POINT('Origin',(20.5,0.5,0.)); #46388=CARTESIAN_POINT('',(7.16,0.5,0.)); #46389=CARTESIAN_POINT('',(20.5,0.5,0.)); #46390=CARTESIAN_POINT('',(7.16,-0.5,0.)); #46391=CARTESIAN_POINT('',(7.16,0.5,0.)); #46392=CARTESIAN_POINT('',(20.5,-0.5,0.)); #46393=CARTESIAN_POINT('Origin',(0.5,0.5,-50.5)); #46394=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-50.5)); #46395=CARTESIAN_POINT('',(0.5,-0.5,-51.)); #46396=CARTESIAN_POINT('Origin',(0.5,-0.5,-50.5)); #46397=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-50.5)); #46398=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-50.5)); #46399=CARTESIAN_POINT('',(0.5,0.5,-51.)); #46400=CARTESIAN_POINT('Origin',(0.5,0.5,-50.5)); #46401=CARTESIAN_POINT('',(0.5,0.5,-51.)); #46402=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46403=CARTESIAN_POINT('',(0.5,-0.5,0.)); #46404=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46405=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46406=CARTESIAN_POINT('',(0.5,0.5,0.)); #46407=CARTESIAN_POINT('',(0.5,0.5,0.)); #46408=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46409=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46410=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46411=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46412=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-50.42993749755)); #46413=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-50.42993749755)); #46414=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-50.42993749755)); #46415=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46416=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46417=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46418=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-48.83006250244)); #46419=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-48.83006250244)); #46420=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-48.83006250244)); #46421=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46422=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46423=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46424=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-46.29006250244)); #46425=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-46.29006250244)); #46426=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-46.29006250244)); #46427=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46428=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46429=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46430=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-43.75006250244)); #46431=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-43.75006250244)); #46432=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-43.75006250244)); #46433=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46434=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46435=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46436=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-41.21006250244)); #46437=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-41.21006250244)); #46438=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-41.21006250244)); #46439=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46440=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46441=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46442=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-38.67006250244)); #46443=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-38.67006250244)); #46444=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-38.67006250244)); #46445=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46446=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46447=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46448=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-36.13006250244)); #46449=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-36.13006250244)); #46450=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-36.13006250244)); #46451=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46452=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46453=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46454=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-33.59006250244)); #46455=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-33.59006250244)); #46456=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-33.59006250244)); #46457=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46458=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46459=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46460=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-31.05006250244)); #46461=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-31.05006250244)); #46462=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-31.05006250244)); #46463=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46464=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46465=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46466=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-28.51006250244)); #46467=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-28.51006250244)); #46468=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-28.51006250244)); #46469=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46470=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46471=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46472=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-25.97006250244)); #46473=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-25.97006250244)); #46474=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-25.97006250244)); #46475=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46476=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46477=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46478=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-23.43006250244)); #46479=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-23.43006250244)); #46480=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-23.43006250244)); #46481=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46482=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46483=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46484=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-20.89006250244)); #46485=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-20.89006250244)); #46486=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-20.89006250244)); #46487=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46488=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46489=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46490=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-18.35006250244)); #46491=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-18.35006250244)); #46492=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-18.35006250244)); #46493=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46494=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46495=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46496=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-15.81006250244)); #46497=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-15.81006250244)); #46498=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-15.81006250244)); #46499=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46500=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46501=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46502=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-13.27006250244)); #46503=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-13.27006250244)); #46504=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-13.27006250244)); #46505=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46506=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46507=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46508=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.570062502442)); #46509=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.570062502442)); #46510=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.570062502442)); #46511=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46512=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46513=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46514=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-3.110062502442)); #46515=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-3.110062502442)); #46516=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-3.110062502442)); #46517=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46518=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46519=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46520=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-5.650062502442)); #46521=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-5.650062502442)); #46522=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-5.650062502442)); #46523=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46524=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46525=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46526=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-10.73006250244)); #46527=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-10.73006250244)); #46528=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-10.73006250244)); #46529=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46530=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46531=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #46532=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-8.190062502442)); #46533=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-8.190062502442)); #46534=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-8.190062502442)); #46535=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46536=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46537=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46538=CARTESIAN_POINT('',(0.01000000000002,0.5,-8.19)); #46539=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-8.99)); #46540=CARTESIAN_POINT('',(1.61,0.5,-8.19)); #46541=CARTESIAN_POINT('',(0.5,0.5,-8.19)); #46542=CARTESIAN_POINT('',(1.61,0.5,-9.79)); #46543=CARTESIAN_POINT('Origin',(1.61,0.5,-8.99)); #46544=CARTESIAN_POINT('',(0.01000000000002,0.5,-9.79)); #46545=CARTESIAN_POINT('',(0.5,0.5,-9.79)); #46546=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-9.789937497558)); #46547=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-8.99)); #46548=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46549=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46550=CARTESIAN_POINT('',(0.01000000000002,-0.5,-8.19)); #46551=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-8.99)); #46552=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-9.789937497558)); #46553=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46554=CARTESIAN_POINT('',(0.01000000000002,-0.5,-9.79)); #46555=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-8.99)); #46556=CARTESIAN_POINT('',(1.61,-0.5,-9.79)); #46557=CARTESIAN_POINT('',(0.5,-0.5,-9.79)); #46558=CARTESIAN_POINT('',(1.61,-0.5,-8.19)); #46559=CARTESIAN_POINT('Origin',(1.61,-0.5,-8.99)); #46560=CARTESIAN_POINT('',(0.5,-0.5,-8.19)); #46561=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46562=CARTESIAN_POINT('',(2.21,0.5,-7.25)); #46563=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-7.25)); #46564=CARTESIAN_POINT('',(0.5,0.5,-7.25)); #46565=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-7.249937497558)); #46566=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-7.249937497558)); #46567=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46568=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-5.65)); #46569=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-5.65)); #46570=CARTESIAN_POINT('',(2.21,0.5,-5.65)); #46571=CARTESIAN_POINT('',(0.5,0.5,-5.65)); #46572=CARTESIAN_POINT('',(2.41,0.5,-5.85)); #46573=CARTESIAN_POINT('Origin',(2.210000149415,0.5,-5.849999850585)); #46574=CARTESIAN_POINT('',(2.41,0.5,-7.05)); #46575=CARTESIAN_POINT('',(2.41,0.5,-0.5)); #46576=CARTESIAN_POINT('Origin',(2.210000149415,0.5,-7.050000149415)); #46577=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46578=CARTESIAN_POINT('',(2.21,-0.5,-7.25)); #46579=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-7.25)); #46580=CARTESIAN_POINT('',(0.5,-0.5,-7.25)); #46581=CARTESIAN_POINT('',(2.41,-0.5,-7.05)); #46582=CARTESIAN_POINT('Origin',(2.210000149415,-0.5,-7.050000149415)); #46583=CARTESIAN_POINT('',(2.41,-0.5,-5.85)); #46584=CARTESIAN_POINT('',(2.41,-0.5,-0.5)); #46585=CARTESIAN_POINT('',(2.21,-0.5,-5.65)); #46586=CARTESIAN_POINT('Origin',(2.210000149415,-0.5,-5.849999850585)); #46587=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-5.65)); #46588=CARTESIAN_POINT('',(0.5,-0.5,-5.65)); #46589=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-5.65)); #46590=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-7.249937497558)); #46591=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46592=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-7.249937497558)); #46593=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46594=CARTESIAN_POINT('',(0.01000000000003,0.5,-4.71)); #46595=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-4.709937497558)); #46596=CARTESIAN_POINT('Origin',(0.01000000000003,0.5,-3.91)); #46597=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46598=CARTESIAN_POINT('',(0.01000000000003,0.5,-3.11)); #46599=CARTESIAN_POINT('Origin',(0.01000000000003,0.5,-3.91)); #46600=CARTESIAN_POINT('',(1.61,0.5,-3.11)); #46601=CARTESIAN_POINT('',(0.5,0.5,-3.11)); #46602=CARTESIAN_POINT('',(1.61,0.5,-4.71)); #46603=CARTESIAN_POINT('Origin',(1.61,0.5,-3.91)); #46604=CARTESIAN_POINT('',(0.5,0.5,-4.71)); #46605=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46606=CARTESIAN_POINT('',(0.01000000000003,-0.5,-4.71)); #46607=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-4.709937497558)); #46608=CARTESIAN_POINT('Origin',(0.01000000000003,-0.5,-3.91)); #46609=CARTESIAN_POINT('',(1.61,-0.5,-4.71)); #46610=CARTESIAN_POINT('',(0.5,-0.5,-4.71)); #46611=CARTESIAN_POINT('',(1.61,-0.5,-3.11)); #46612=CARTESIAN_POINT('Origin',(1.61,-0.5,-3.91)); #46613=CARTESIAN_POINT('',(0.01000000000003,-0.5,-3.11)); #46614=CARTESIAN_POINT('',(0.5,-0.5,-3.11)); #46615=CARTESIAN_POINT('Origin',(0.01000000000003,-0.5,-3.91)); #46616=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46617=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46618=CARTESIAN_POINT('',(0.01000000000003,0.5,-0.57)); #46619=CARTESIAN_POINT('Origin',(0.01000000000003,0.5,-1.37)); #46620=CARTESIAN_POINT('',(1.61,0.5,-0.57)); #46621=CARTESIAN_POINT('',(0.5,0.5,-0.57)); #46622=CARTESIAN_POINT('',(1.61,0.5,-2.17)); #46623=CARTESIAN_POINT('Origin',(1.61,0.5,-1.37)); #46624=CARTESIAN_POINT('',(0.01000000000003,0.5,-2.17)); #46625=CARTESIAN_POINT('',(0.5,0.5,-2.17)); #46626=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-2.169937497558)); #46627=CARTESIAN_POINT('Origin',(0.01000000000003,0.5,-1.37)); #46628=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46629=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46630=CARTESIAN_POINT('',(0.01000000000003,-0.5,-0.57)); #46631=CARTESIAN_POINT('Origin',(0.01000000000003,-0.5,-1.37)); #46632=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-2.169937497558)); #46633=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46634=CARTESIAN_POINT('',(0.01000000000003,-0.5,-2.17)); #46635=CARTESIAN_POINT('Origin',(0.01000000000003,-0.5,-1.37)); #46636=CARTESIAN_POINT('',(1.61,-0.5,-2.17)); #46637=CARTESIAN_POINT('',(0.5,-0.5,-2.17)); #46638=CARTESIAN_POINT('',(1.61,-0.5,-0.57)); #46639=CARTESIAN_POINT('Origin',(1.61,-0.5,-1.37)); #46640=CARTESIAN_POINT('',(0.5,-0.5,-0.57)); #46641=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46642=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-31.05)); #46643=CARTESIAN_POINT('',(2.210000149415,0.5,-31.05)); #46644=CARTESIAN_POINT('',(0.5,0.5,-31.05)); #46645=CARTESIAN_POINT('',(2.41,0.5,-31.25)); #46646=CARTESIAN_POINT('Origin',(2.210000149415,0.5,-31.24999985058)); #46647=CARTESIAN_POINT('',(2.41,0.5,-32.45)); #46648=CARTESIAN_POINT('',(2.41,0.5,-0.5)); #46649=CARTESIAN_POINT('',(2.21,0.5,-32.65)); #46650=CARTESIAN_POINT('Origin',(2.210000149415,0.5,-32.45000014941)); #46651=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-32.65)); #46652=CARTESIAN_POINT('',(0.5,0.5,-32.65)); #46653=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-32.64993749755)); #46654=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-32.64993749755)); #46655=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46656=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-31.05)); #46657=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46658=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-31.05)); #46659=CARTESIAN_POINT('',(2.210000149415,-0.5,-31.05)); #46660=CARTESIAN_POINT('',(0.5,-0.5,-31.05)); #46661=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-31.05)); #46662=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-32.64993749755)); #46663=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46664=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-32.65)); #46665=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-32.64993749755)); #46666=CARTESIAN_POINT('',(2.21,-0.5,-32.65)); #46667=CARTESIAN_POINT('',(0.5,-0.5,-32.65)); #46668=CARTESIAN_POINT('',(2.41,-0.5,-32.45)); #46669=CARTESIAN_POINT('Origin',(2.210000149415,-0.5,-32.45000014941)); #46670=CARTESIAN_POINT('',(2.41,-0.5,-31.25)); #46671=CARTESIAN_POINT('',(2.41,-0.5,-0.5)); #46672=CARTESIAN_POINT('Origin',(2.210000149415,-0.5,-31.24999985058)); #46673=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46674=CARTESIAN_POINT('',(0.01000000000001,0.5,-30.11)); #46675=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-30.10993749755)); #46676=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-29.31)); #46677=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46678=CARTESIAN_POINT('',(0.01000000000001,0.5,-28.51)); #46679=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-29.31)); #46680=CARTESIAN_POINT('',(1.61,0.5,-28.51)); #46681=CARTESIAN_POINT('',(0.5,0.5,-28.51)); #46682=CARTESIAN_POINT('',(1.61,0.5,-30.11)); #46683=CARTESIAN_POINT('Origin',(1.61,0.5,-29.31)); #46684=CARTESIAN_POINT('',(0.5,0.5,-30.11)); #46685=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46686=CARTESIAN_POINT('',(0.01000000000001,-0.5,-30.11)); #46687=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-30.10993749755)); #46688=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-29.31)); #46689=CARTESIAN_POINT('',(1.61,-0.5,-30.11)); #46690=CARTESIAN_POINT('',(0.5,-0.5,-30.11)); #46691=CARTESIAN_POINT('',(1.61,-0.5,-28.51)); #46692=CARTESIAN_POINT('Origin',(1.61,-0.5,-29.31)); #46693=CARTESIAN_POINT('',(0.01000000000001,-0.5,-28.51)); #46694=CARTESIAN_POINT('',(0.5,-0.5,-28.51)); #46695=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-29.31)); #46696=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46697=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46698=CARTESIAN_POINT('',(0.01000000000002,0.5,-25.97)); #46699=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-26.77)); #46700=CARTESIAN_POINT('',(1.61,0.5,-25.97)); #46701=CARTESIAN_POINT('',(0.5,0.5,-25.97)); #46702=CARTESIAN_POINT('',(1.61,0.5,-27.57)); #46703=CARTESIAN_POINT('Origin',(1.61,0.5,-26.77)); #46704=CARTESIAN_POINT('',(0.01000000000001,0.5,-27.57)); #46705=CARTESIAN_POINT('',(0.5,0.5,-27.57)); #46706=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-27.56993749755)); #46707=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-26.77)); #46708=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46709=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46710=CARTESIAN_POINT('',(0.01000000000002,-0.5,-25.97)); #46711=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-26.77)); #46712=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-27.56993749755)); #46713=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46714=CARTESIAN_POINT('',(0.01000000000001,-0.5,-27.57)); #46715=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-26.77)); #46716=CARTESIAN_POINT('',(1.61,-0.5,-27.57)); #46717=CARTESIAN_POINT('',(0.5,-0.5,-27.57)); #46718=CARTESIAN_POINT('',(1.61,-0.5,-25.97)); #46719=CARTESIAN_POINT('Origin',(1.61,-0.5,-26.77)); #46720=CARTESIAN_POINT('',(0.5,-0.5,-25.97)); #46721=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46722=CARTESIAN_POINT('',(0.01000000000002,0.5,-23.43)); #46723=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-24.23)); #46724=CARTESIAN_POINT('',(1.61,0.5,-23.43)); #46725=CARTESIAN_POINT('',(0.5,0.5,-23.43)); #46726=CARTESIAN_POINT('',(1.61,0.5,-25.03)); #46727=CARTESIAN_POINT('Origin',(1.61,0.5,-24.23)); #46728=CARTESIAN_POINT('',(0.01000000000002,0.5,-25.03)); #46729=CARTESIAN_POINT('',(0.5,0.5,-25.03)); #46730=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-25.02993749755)); #46731=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-24.23)); #46732=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46733=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46734=CARTESIAN_POINT('',(0.01000000000002,-0.5,-23.43)); #46735=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-24.23)); #46736=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-25.02993749755)); #46737=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46738=CARTESIAN_POINT('',(0.01000000000002,-0.5,-25.03)); #46739=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-24.23)); #46740=CARTESIAN_POINT('',(1.61,-0.5,-25.03)); #46741=CARTESIAN_POINT('',(0.5,-0.5,-25.03)); #46742=CARTESIAN_POINT('',(1.61,-0.5,-23.43)); #46743=CARTESIAN_POINT('Origin',(1.61,-0.5,-24.23)); #46744=CARTESIAN_POINT('',(0.5,-0.5,-23.43)); #46745=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46746=CARTESIAN_POINT('',(0.01000000000002,0.5,-20.89)); #46747=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-21.69)); #46748=CARTESIAN_POINT('',(1.61,0.5,-20.89)); #46749=CARTESIAN_POINT('',(0.5,0.5,-20.89)); #46750=CARTESIAN_POINT('',(1.61,0.5,-22.49)); #46751=CARTESIAN_POINT('Origin',(1.61,0.5,-21.69)); #46752=CARTESIAN_POINT('',(0.01000000000002,0.5,-22.49)); #46753=CARTESIAN_POINT('',(0.5,0.5,-22.49)); #46754=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-22.48993749755)); #46755=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-21.69)); #46756=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46757=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46758=CARTESIAN_POINT('',(0.01000000000002,-0.5,-20.89)); #46759=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-21.69)); #46760=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-22.48993749755)); #46761=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46762=CARTESIAN_POINT('',(0.01000000000002,-0.5,-22.49)); #46763=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-21.69)); #46764=CARTESIAN_POINT('',(1.61,-0.5,-22.49)); #46765=CARTESIAN_POINT('',(0.5,-0.5,-22.49)); #46766=CARTESIAN_POINT('',(1.61,-0.5,-20.89)); #46767=CARTESIAN_POINT('Origin',(1.61,-0.5,-21.69)); #46768=CARTESIAN_POINT('',(0.5,-0.5,-20.89)); #46769=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46770=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-18.35)); #46771=CARTESIAN_POINT('',(2.210000149415,0.5,-18.35)); #46772=CARTESIAN_POINT('',(0.5,0.5,-18.35)); #46773=CARTESIAN_POINT('',(2.41,0.5,-18.55)); #46774=CARTESIAN_POINT('Origin',(2.210000149415,0.5,-18.54999985058)); #46775=CARTESIAN_POINT('',(2.41,0.5,-19.75)); #46776=CARTESIAN_POINT('',(2.41,0.5,-0.5)); #46777=CARTESIAN_POINT('',(2.21,0.5,-19.95)); #46778=CARTESIAN_POINT('Origin',(2.210000149415,0.5,-19.75000014941)); #46779=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-19.95)); #46780=CARTESIAN_POINT('',(0.5,0.5,-19.95)); #46781=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-19.94993749755)); #46782=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-19.94993749755)); #46783=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46784=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-18.35)); #46785=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46786=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-18.35)); #46787=CARTESIAN_POINT('',(2.210000149415,-0.5,-18.35)); #46788=CARTESIAN_POINT('',(0.5,-0.5,-18.35)); #46789=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-18.35)); #46790=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-19.94993749755)); #46791=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46792=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-19.95)); #46793=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-19.94993749755)); #46794=CARTESIAN_POINT('',(2.21,-0.5,-19.95)); #46795=CARTESIAN_POINT('',(0.5,-0.5,-19.95)); #46796=CARTESIAN_POINT('',(2.41,-0.5,-19.75)); #46797=CARTESIAN_POINT('Origin',(2.210000149415,-0.5,-19.75000014941)); #46798=CARTESIAN_POINT('',(2.41,-0.5,-18.55)); #46799=CARTESIAN_POINT('',(2.41,-0.5,-0.5)); #46800=CARTESIAN_POINT('Origin',(2.210000149415,-0.5,-18.54999985058)); #46801=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46802=CARTESIAN_POINT('',(0.01000000000002,0.5,-17.41)); #46803=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-17.40993749755)); #46804=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-16.61)); #46805=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46806=CARTESIAN_POINT('',(0.01000000000002,0.5,-15.81)); #46807=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-16.61)); #46808=CARTESIAN_POINT('',(1.61,0.5,-15.81)); #46809=CARTESIAN_POINT('',(0.5,0.5,-15.81)); #46810=CARTESIAN_POINT('',(1.61,0.5,-17.41)); #46811=CARTESIAN_POINT('Origin',(1.61,0.5,-16.61)); #46812=CARTESIAN_POINT('',(0.5,0.5,-17.41)); #46813=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46814=CARTESIAN_POINT('',(0.01000000000002,-0.5,-17.41)); #46815=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-17.40993749755)); #46816=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-16.61)); #46817=CARTESIAN_POINT('',(1.61,-0.5,-17.41)); #46818=CARTESIAN_POINT('',(0.5,-0.5,-17.41)); #46819=CARTESIAN_POINT('',(1.61,-0.5,-15.81)); #46820=CARTESIAN_POINT('Origin',(1.61,-0.5,-16.61)); #46821=CARTESIAN_POINT('',(0.01000000000002,-0.5,-15.81)); #46822=CARTESIAN_POINT('',(0.5,-0.5,-15.81)); #46823=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-16.61)); #46824=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46825=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46826=CARTESIAN_POINT('',(0.01000000000002,0.5,-13.27)); #46827=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-14.07)); #46828=CARTESIAN_POINT('',(1.61,0.5,-13.27)); #46829=CARTESIAN_POINT('',(0.5,0.5,-13.27)); #46830=CARTESIAN_POINT('',(1.61,0.5,-14.87)); #46831=CARTESIAN_POINT('Origin',(1.61,0.5,-14.07)); #46832=CARTESIAN_POINT('',(0.01000000000002,0.5,-14.87)); #46833=CARTESIAN_POINT('',(0.5,0.5,-14.87)); #46834=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-14.86993749755)); #46835=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-14.07)); #46836=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46837=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46838=CARTESIAN_POINT('',(0.01000000000002,-0.5,-13.27)); #46839=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-14.07)); #46840=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-14.86993749755)); #46841=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46842=CARTESIAN_POINT('',(0.01000000000002,-0.5,-14.87)); #46843=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-14.07)); #46844=CARTESIAN_POINT('',(1.61,-0.5,-14.87)); #46845=CARTESIAN_POINT('',(0.5,-0.5,-14.87)); #46846=CARTESIAN_POINT('',(1.61,-0.5,-13.27)); #46847=CARTESIAN_POINT('Origin',(1.61,-0.5,-14.07)); #46848=CARTESIAN_POINT('',(0.5,-0.5,-13.27)); #46849=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46850=CARTESIAN_POINT('',(0.01000000000002,0.5,-12.33)); #46851=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-12.32993749755)); #46852=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-11.53)); #46853=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46854=CARTESIAN_POINT('',(0.01000000000002,0.5,-10.73)); #46855=CARTESIAN_POINT('Origin',(0.01000000000002,0.5,-11.53)); #46856=CARTESIAN_POINT('',(1.61,0.5,-10.73)); #46857=CARTESIAN_POINT('',(0.5,0.5,-10.73)); #46858=CARTESIAN_POINT('',(1.61,0.5,-12.33)); #46859=CARTESIAN_POINT('Origin',(1.61,0.5,-11.53)); #46860=CARTESIAN_POINT('',(0.5,0.5,-12.33)); #46861=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46862=CARTESIAN_POINT('',(0.01000000000002,-0.5,-12.33)); #46863=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-12.32993749755)); #46864=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-11.53)); #46865=CARTESIAN_POINT('',(1.61,-0.5,-12.33)); #46866=CARTESIAN_POINT('',(0.5,-0.5,-12.33)); #46867=CARTESIAN_POINT('',(1.61,-0.5,-10.73)); #46868=CARTESIAN_POINT('Origin',(1.61,-0.5,-11.53)); #46869=CARTESIAN_POINT('',(0.01000000000002,-0.5,-10.73)); #46870=CARTESIAN_POINT('',(0.5,-0.5,-10.73)); #46871=CARTESIAN_POINT('Origin',(0.01000000000002,-0.5,-11.53)); #46872=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46873=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46874=CARTESIAN_POINT('',(0.01000000000001,0.5,-38.67)); #46875=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-39.47)); #46876=CARTESIAN_POINT('',(1.61,0.5,-38.67)); #46877=CARTESIAN_POINT('',(0.5,0.5,-38.67)); #46878=CARTESIAN_POINT('',(1.61,0.5,-40.27)); #46879=CARTESIAN_POINT('Origin',(1.61,0.5,-39.47)); #46880=CARTESIAN_POINT('',(0.01000000000001,0.5,-40.27)); #46881=CARTESIAN_POINT('',(0.5,0.5,-40.27)); #46882=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-40.26993749755)); #46883=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-39.47)); #46884=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46885=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46886=CARTESIAN_POINT('',(0.01000000000001,-0.5,-38.67)); #46887=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-39.47)); #46888=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-40.26993749755)); #46889=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46890=CARTESIAN_POINT('',(0.01000000000001,-0.5,-40.27)); #46891=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-39.47)); #46892=CARTESIAN_POINT('',(1.61,-0.5,-40.27)); #46893=CARTESIAN_POINT('',(0.5,-0.5,-40.27)); #46894=CARTESIAN_POINT('',(1.61,-0.5,-38.67)); #46895=CARTESIAN_POINT('Origin',(1.61,-0.5,-39.47)); #46896=CARTESIAN_POINT('',(0.5,-0.5,-38.67)); #46897=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46898=CARTESIAN_POINT('',(0.01000000000001,0.5,-37.73)); #46899=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-37.72993749755)); #46900=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-36.93)); #46901=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46902=CARTESIAN_POINT('',(0.01000000000001,0.5,-36.13)); #46903=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-36.93)); #46904=CARTESIAN_POINT('',(1.61,0.5,-36.13)); #46905=CARTESIAN_POINT('',(0.5,0.5,-36.13)); #46906=CARTESIAN_POINT('',(1.61,0.5,-37.73)); #46907=CARTESIAN_POINT('Origin',(1.61,0.5,-36.93)); #46908=CARTESIAN_POINT('',(0.5,0.5,-37.73)); #46909=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46910=CARTESIAN_POINT('',(0.01000000000001,-0.5,-37.73)); #46911=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-37.72993749755)); #46912=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-36.93)); #46913=CARTESIAN_POINT('',(1.61,-0.5,-37.73)); #46914=CARTESIAN_POINT('',(0.5,-0.5,-37.73)); #46915=CARTESIAN_POINT('',(1.61,-0.5,-36.13)); #46916=CARTESIAN_POINT('Origin',(1.61,-0.5,-36.93)); #46917=CARTESIAN_POINT('',(0.01000000000001,-0.5,-36.13)); #46918=CARTESIAN_POINT('',(0.5,-0.5,-36.13)); #46919=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-36.93)); #46920=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46921=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46922=CARTESIAN_POINT('',(0.01000000000001,0.5,-33.59)); #46923=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-34.39)); #46924=CARTESIAN_POINT('',(1.61,0.5,-33.59)); #46925=CARTESIAN_POINT('',(0.5,0.5,-33.59)); #46926=CARTESIAN_POINT('',(1.61,0.5,-35.19)); #46927=CARTESIAN_POINT('Origin',(1.61,0.5,-34.39)); #46928=CARTESIAN_POINT('',(0.01000000000001,0.5,-35.19)); #46929=CARTESIAN_POINT('',(0.5,0.5,-35.19)); #46930=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-35.18993749755)); #46931=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-34.39)); #46932=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46933=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46934=CARTESIAN_POINT('',(0.01000000000001,-0.5,-33.59)); #46935=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-34.39)); #46936=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-35.18993749755)); #46937=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46938=CARTESIAN_POINT('',(0.01000000000001,-0.5,-35.19)); #46939=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-34.39)); #46940=CARTESIAN_POINT('',(1.61,-0.5,-35.19)); #46941=CARTESIAN_POINT('',(0.5,-0.5,-35.19)); #46942=CARTESIAN_POINT('',(1.61,-0.5,-33.59)); #46943=CARTESIAN_POINT('Origin',(1.61,-0.5,-34.39)); #46944=CARTESIAN_POINT('',(0.5,-0.5,-33.59)); #46945=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46946=CARTESIAN_POINT('',(0.01,0.5,-50.43)); #46947=CARTESIAN_POINT('Origin',(0.01,0.5,-49.63)); #46948=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46949=CARTESIAN_POINT('',(0.01,0.5,-48.83)); #46950=CARTESIAN_POINT('Origin',(0.01,0.5,-49.63)); #46951=CARTESIAN_POINT('',(1.61,0.5,-48.83)); #46952=CARTESIAN_POINT('',(0.5,0.5,-48.83)); #46953=CARTESIAN_POINT('',(1.61,0.5,-50.43)); #46954=CARTESIAN_POINT('Origin',(1.61,0.5,-49.63)); #46955=CARTESIAN_POINT('',(0.5,0.5,-50.43)); #46956=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46957=CARTESIAN_POINT('',(0.01,-0.5,-50.43)); #46958=CARTESIAN_POINT('Origin',(0.01,-0.5,-49.63)); #46959=CARTESIAN_POINT('',(1.61,-0.5,-50.43)); #46960=CARTESIAN_POINT('',(0.5,-0.5,-50.43)); #46961=CARTESIAN_POINT('',(1.61,-0.5,-48.83)); #46962=CARTESIAN_POINT('Origin',(1.61,-0.5,-49.63)); #46963=CARTESIAN_POINT('',(0.01,-0.5,-48.83)); #46964=CARTESIAN_POINT('',(0.5,-0.5,-48.83)); #46965=CARTESIAN_POINT('Origin',(0.01,-0.5,-49.63)); #46966=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46967=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46968=CARTESIAN_POINT('',(0.01000000000001,0.5,-46.29)); #46969=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-47.09)); #46970=CARTESIAN_POINT('',(1.61,0.5,-46.29)); #46971=CARTESIAN_POINT('',(0.5,0.5,-46.29)); #46972=CARTESIAN_POINT('',(1.61,0.5,-47.89)); #46973=CARTESIAN_POINT('Origin',(1.61,0.5,-47.09)); #46974=CARTESIAN_POINT('',(0.01,0.5,-47.89)); #46975=CARTESIAN_POINT('',(0.5,0.5,-47.89)); #46976=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-47.88993749755)); #46977=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-47.09)); #46978=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46979=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #46980=CARTESIAN_POINT('',(0.01000000000001,-0.5,-46.29)); #46981=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-47.09)); #46982=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-47.88993749755)); #46983=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #46984=CARTESIAN_POINT('',(0.01,-0.5,-47.89)); #46985=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-47.09)); #46986=CARTESIAN_POINT('',(1.61,-0.5,-47.89)); #46987=CARTESIAN_POINT('',(0.5,-0.5,-47.89)); #46988=CARTESIAN_POINT('',(1.61,-0.5,-46.29)); #46989=CARTESIAN_POINT('Origin',(1.61,-0.5,-47.09)); #46990=CARTESIAN_POINT('',(0.5,-0.5,-46.29)); #46991=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #46992=CARTESIAN_POINT('',(2.21,0.5,-45.35)); #46993=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-45.35)); #46994=CARTESIAN_POINT('',(0.5,0.5,-45.35)); #46995=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-45.34993749755)); #46996=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-45.34993749755)); #46997=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #46998=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-43.75)); #46999=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-43.75)); #47000=CARTESIAN_POINT('',(2.21,0.5,-43.75)); #47001=CARTESIAN_POINT('',(0.5,0.5,-43.75)); #47002=CARTESIAN_POINT('',(2.41,0.5,-43.95)); #47003=CARTESIAN_POINT('Origin',(2.210000149415,0.5,-43.94999985058)); #47004=CARTESIAN_POINT('',(2.41,0.5,-45.15)); #47005=CARTESIAN_POINT('',(2.41,0.5,-0.5)); #47006=CARTESIAN_POINT('Origin',(2.210000149415,0.5,-45.15000014941)); #47007=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #47008=CARTESIAN_POINT('',(2.21,-0.5,-45.35)); #47009=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-45.35)); #47010=CARTESIAN_POINT('',(0.5,-0.5,-45.35)); #47011=CARTESIAN_POINT('',(2.41,-0.5,-45.15)); #47012=CARTESIAN_POINT('Origin',(2.210000149415,-0.5,-45.15000014941)); #47013=CARTESIAN_POINT('',(2.41,-0.5,-43.95)); #47014=CARTESIAN_POINT('',(2.41,-0.5,-0.5)); #47015=CARTESIAN_POINT('',(2.21,-0.5,-43.75)); #47016=CARTESIAN_POINT('Origin',(2.210000149415,-0.5,-43.94999985058)); #47017=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-43.75)); #47018=CARTESIAN_POINT('',(0.5,-0.5,-43.75)); #47019=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-43.75)); #47020=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-45.34993749755)); #47021=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47022=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-45.34993749755)); #47023=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #47024=CARTESIAN_POINT('',(0.01000000000001,0.5,-41.21)); #47025=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-42.01)); #47026=CARTESIAN_POINT('',(1.61,0.5,-41.21)); #47027=CARTESIAN_POINT('',(0.5,0.5,-41.21)); #47028=CARTESIAN_POINT('',(1.61,0.5,-42.81)); #47029=CARTESIAN_POINT('Origin',(1.61,0.5,-42.01)); #47030=CARTESIAN_POINT('',(0.01000000000001,0.5,-42.81)); #47031=CARTESIAN_POINT('',(0.5,0.5,-42.81)); #47032=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-42.80993749755)); #47033=CARTESIAN_POINT('Origin',(0.01000000000001,0.5,-42.01)); #47034=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47035=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #47036=CARTESIAN_POINT('',(0.01000000000001,-0.5,-41.21)); #47037=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-42.01)); #47038=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-42.80993749755)); #47039=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47040=CARTESIAN_POINT('',(0.01000000000001,-0.5,-42.81)); #47041=CARTESIAN_POINT('Origin',(0.01000000000001,-0.5,-42.01)); #47042=CARTESIAN_POINT('',(1.61,-0.5,-42.81)); #47043=CARTESIAN_POINT('',(0.5,-0.5,-42.81)); #47044=CARTESIAN_POINT('',(1.61,-0.5,-41.21)); #47045=CARTESIAN_POINT('Origin',(1.61,-0.5,-42.01)); #47046=CARTESIAN_POINT('',(0.5,-0.5,-41.21)); #47047=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #47048=CARTESIAN_POINT('',(7.16,0.5,-1.6)); #47049=CARTESIAN_POINT('',(7.16,0.5,-0.5)); #47050=CARTESIAN_POINT('',(8.76,0.5,0.)); #47051=CARTESIAN_POINT('',(20.5,0.5,0.)); #47052=CARTESIAN_POINT('',(8.76,0.5,-1.6)); #47053=CARTESIAN_POINT('',(8.76,0.5,-0.5)); #47054=CARTESIAN_POINT('Origin',(7.96,0.5,-1.6)); #47055=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #47056=CARTESIAN_POINT('',(7.16,-0.5,-1.6)); #47057=CARTESIAN_POINT('',(7.16,-0.5,-0.5)); #47058=CARTESIAN_POINT('',(8.76,-0.5,-1.6)); #47059=CARTESIAN_POINT('Origin',(7.96,-0.5,-1.6)); #47060=CARTESIAN_POINT('',(8.76,-0.5,0.)); #47061=CARTESIAN_POINT('',(8.76,-0.5,-0.5)); #47062=CARTESIAN_POINT('',(20.5,-0.5,0.)); #47063=CARTESIAN_POINT('Origin',(20.5,0.5,0.)); #47064=CARTESIAN_POINT('',(10.,0.5,0.)); #47065=CARTESIAN_POINT('',(10.,-0.5,0.)); #47066=CARTESIAN_POINT('',(10.,-2.5,0.)); #47067=CARTESIAN_POINT('',(9.7,0.5,0.)); #47068=CARTESIAN_POINT('',(20.5,0.5,0.)); #47069=CARTESIAN_POINT('',(9.7,-0.5,0.)); #47070=CARTESIAN_POINT('',(9.7,0.5,0.)); #47071=CARTESIAN_POINT('',(20.5,-0.5,0.)); #47072=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #47073=CARTESIAN_POINT('',(4.8,0.5,-50.9)); #47074=CARTESIAN_POINT('Origin',(4.8,0.5,-49.)); #47075=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #47076=CARTESIAN_POINT('',(4.8,-0.5,-47.1)); #47077=CARTESIAN_POINT('Origin',(4.8,-0.5,-49.)); #47078=CARTESIAN_POINT('Origin',(0.5,0.5,-0.5)); #47079=CARTESIAN_POINT('',(4.8,0.5,-3.9)); #47080=CARTESIAN_POINT('Origin',(4.8,0.5,-2.)); #47081=CARTESIAN_POINT('Origin',(0.5,-0.5,-0.5)); #47082=CARTESIAN_POINT('',(4.8,-0.5,-0.1)); #47083=CARTESIAN_POINT('Origin',(4.8,-0.5,-2.)); #47084=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47085=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47086=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47087=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47088=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47089=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47090=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-2.169937497558)); #47091=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47092=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47093=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47094=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-4.709937497558)); #47095=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47096=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47097=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47098=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-7.249937497558)); #47099=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47100=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47101=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47102=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-9.789937497558)); #47103=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47104=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47105=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47106=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-12.32993749755)); #47107=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47108=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47109=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47110=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-14.86993749755)); #47111=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47112=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47113=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47114=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-17.40993749755)); #47115=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47116=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47117=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47118=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-19.94993749755)); #47119=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47120=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47121=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47122=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-22.48993749755)); #47123=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47124=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47125=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47126=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-25.02993749755)); #47127=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47128=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47129=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47130=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-27.56993749755)); #47131=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47132=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47133=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47134=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-30.10993749755)); #47135=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47136=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47137=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47138=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-32.64993749755)); #47139=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47140=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47141=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47142=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-35.18993749755)); #47143=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47144=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47145=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47146=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-37.72993749755)); #47147=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47148=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47149=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47150=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-40.26993749755)); #47151=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47152=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47153=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47154=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-42.80993749755)); #47155=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47156=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47157=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47158=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-45.34993749755)); #47159=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47160=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-0.5)); #47161=CARTESIAN_POINT('',(-3.469446951954E-15,-0.5,-0.5)); #47162=CARTESIAN_POINT('',(-3.469446951954E-15,0.5,-47.88993749755)); #47163=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47164=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47165=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47166=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47167=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47168=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47169=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47170=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47171=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47172=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47173=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47174=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47175=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47176=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47177=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47178=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47179=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47180=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47181=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47182=CARTESIAN_POINT('Origin',(-3.469446951954E-15,0.5,-0.5)); #47183=CARTESIAN_POINT('Origin',(16.2,-9.5,-49.)); #47184=CARTESIAN_POINT('',(16.2,-0.5,-50.05)); #47185=CARTESIAN_POINT('Origin',(16.2,-0.5,-49.)); #47186=CARTESIAN_POINT('',(16.2,0.499999999999999,-50.05)); #47187=CARTESIAN_POINT('',(16.2,-9.5,-50.05)); #47188=CARTESIAN_POINT('Origin',(16.2,0.5,-49.)); #47189=CARTESIAN_POINT('Origin',(16.2,-9.5,-2.)); #47190=CARTESIAN_POINT('',(16.2,-0.5,-3.05)); #47191=CARTESIAN_POINT('Origin',(16.2,-0.5,-2.)); #47192=CARTESIAN_POINT('',(16.2,0.499999999999999,-3.05)); #47193=CARTESIAN_POINT('',(16.2,-9.5,-3.05)); #47194=CARTESIAN_POINT('Origin',(16.2,0.5,-2.)); #47195=CARTESIAN_POINT('Origin',(13.04,-2.5,-1.6)); #47196=CARTESIAN_POINT('',(13.04,-0.5,-2.1)); #47197=CARTESIAN_POINT('Origin',(13.04,-0.5,-1.6)); #47198=CARTESIAN_POINT('',(13.04,0.5,-2.1)); #47199=CARTESIAN_POINT('',(13.04,-2.5,-2.1)); #47200=CARTESIAN_POINT('Origin',(13.04,0.5,-1.6)); #47201=CARTESIAN_POINT('Origin',(10.5,-2.5,-1.6)); #47202=CARTESIAN_POINT('',(10.5,-0.5,-2.1)); #47203=CARTESIAN_POINT('Origin',(10.5,-0.5,-1.6)); #47204=CARTESIAN_POINT('',(10.5,0.5,-2.1)); #47205=CARTESIAN_POINT('',(10.5,-2.5,-2.1)); #47206=CARTESIAN_POINT('Origin',(10.5,0.5,-1.6)); #47207=CARTESIAN_POINT('Origin',(10.5,-2.5,-4.898587196589E-17)); #47208=CARTESIAN_POINT('',(11.,0.5,0.)); #47209=CARTESIAN_POINT('',(11.,-0.5,0.)); #47210=CARTESIAN_POINT('',(11.,-2.5,0.)); #47211=CARTESIAN_POINT('Origin',(10.5,0.5,-4.898587196589E-17)); #47212=CARTESIAN_POINT('Origin',(10.5,-0.5,-4.898587196589E-17)); #47213=CARTESIAN_POINT('Origin',(13.04,-2.5,-4.898587196589E-17)); #47214=CARTESIAN_POINT('',(12.54,-0.5,0.)); #47215=CARTESIAN_POINT('',(12.54,0.5,0.)); #47216=CARTESIAN_POINT('',(12.54,-2.5,0.)); #47217=CARTESIAN_POINT('',(13.54,-0.5,0.)); #47218=CARTESIAN_POINT('Origin',(13.04,-0.5,-4.898587196589E-17)); #47219=CARTESIAN_POINT('',(13.54,0.5,0.)); #47220=CARTESIAN_POINT('',(13.54,-2.5,0.)); #47221=CARTESIAN_POINT('Origin',(13.04,0.5,-4.898587196589E-17)); #47222=CARTESIAN_POINT('Origin',(19.39,-1.5,-47.09)); #47223=CARTESIAN_POINT('',(19.39,-0.5,-47.59)); #47224=CARTESIAN_POINT('Origin',(19.39,-0.5,-47.09)); #47225=CARTESIAN_POINT('',(19.39,0.5,-47.59)); #47226=CARTESIAN_POINT('',(19.39,-1.5,-47.59)); #47227=CARTESIAN_POINT('Origin',(19.39,0.5,-47.09)); #47228=CARTESIAN_POINT('Origin',(19.39,-1.5,-44.55)); #47229=CARTESIAN_POINT('',(19.39,-0.5,-45.05)); #47230=CARTESIAN_POINT('Origin',(19.39,-0.5,-44.55)); #47231=CARTESIAN_POINT('',(19.39,0.5,-45.05)); #47232=CARTESIAN_POINT('',(19.39,-1.5,-45.05)); #47233=CARTESIAN_POINT('Origin',(19.39,0.5,-44.55)); #47234=CARTESIAN_POINT('Origin',(19.39,-1.5,-42.01)); #47235=CARTESIAN_POINT('',(19.39,-0.5,-42.51)); #47236=CARTESIAN_POINT('Origin',(19.39,-0.5,-42.01)); #47237=CARTESIAN_POINT('',(19.39,0.5,-42.51)); #47238=CARTESIAN_POINT('',(19.39,-1.5,-42.51)); #47239=CARTESIAN_POINT('Origin',(19.39,0.5,-42.01)); #47240=CARTESIAN_POINT('Origin',(19.39,-1.5,-39.47)); #47241=CARTESIAN_POINT('',(19.39,-0.5,-39.97)); #47242=CARTESIAN_POINT('Origin',(19.39,-0.5,-39.47)); #47243=CARTESIAN_POINT('',(19.39,0.5,-39.97)); #47244=CARTESIAN_POINT('',(19.39,-1.5,-39.97)); #47245=CARTESIAN_POINT('Origin',(19.39,0.5,-39.47)); #47246=CARTESIAN_POINT('Origin',(19.39,-1.5,-36.93)); #47247=CARTESIAN_POINT('',(19.39,-0.5,-37.43)); #47248=CARTESIAN_POINT('Origin',(19.39,-0.5,-36.93)); #47249=CARTESIAN_POINT('',(19.39,0.5,-37.43)); #47250=CARTESIAN_POINT('',(19.39,-1.5,-37.43)); #47251=CARTESIAN_POINT('Origin',(19.39,0.5,-36.93)); #47252=CARTESIAN_POINT('Origin',(19.39,-1.5,-34.39)); #47253=CARTESIAN_POINT('',(19.39,-0.5,-34.89)); #47254=CARTESIAN_POINT('Origin',(19.39,-0.5,-34.39)); #47255=CARTESIAN_POINT('',(19.39,0.5,-34.89)); #47256=CARTESIAN_POINT('',(19.39,-1.5,-34.89)); #47257=CARTESIAN_POINT('Origin',(19.39,0.5,-34.39)); #47258=CARTESIAN_POINT('Origin',(19.39,-1.5,-31.85)); #47259=CARTESIAN_POINT('',(19.39,-0.5,-32.35)); #47260=CARTESIAN_POINT('Origin',(19.39,-0.5,-31.85)); #47261=CARTESIAN_POINT('',(19.39,0.5,-32.35)); #47262=CARTESIAN_POINT('',(19.39,-1.5,-32.35)); #47263=CARTESIAN_POINT('Origin',(19.39,0.5,-31.85)); #47264=CARTESIAN_POINT('Origin',(19.39,-1.5,-29.31)); #47265=CARTESIAN_POINT('',(19.39,-0.5,-29.81)); #47266=CARTESIAN_POINT('Origin',(19.39,-0.5,-29.31)); #47267=CARTESIAN_POINT('',(19.39,0.5,-29.81)); #47268=CARTESIAN_POINT('',(19.39,-1.5,-29.81)); #47269=CARTESIAN_POINT('Origin',(19.39,0.5,-29.31)); #47270=CARTESIAN_POINT('Origin',(19.39,-1.5,-26.77)); #47271=CARTESIAN_POINT('',(19.39,-0.5,-27.27)); #47272=CARTESIAN_POINT('Origin',(19.39,-0.5,-26.77)); #47273=CARTESIAN_POINT('',(19.39,0.5,-27.27)); #47274=CARTESIAN_POINT('',(19.39,-1.5,-27.27)); #47275=CARTESIAN_POINT('Origin',(19.39,0.5,-26.77)); #47276=CARTESIAN_POINT('Origin',(19.39,-1.5,-24.23)); #47277=CARTESIAN_POINT('',(19.39,-0.5,-24.73)); #47278=CARTESIAN_POINT('Origin',(19.39,-0.5,-24.23)); #47279=CARTESIAN_POINT('',(19.39,0.5,-24.73)); #47280=CARTESIAN_POINT('',(19.39,-1.5,-24.73)); #47281=CARTESIAN_POINT('Origin',(19.39,0.5,-24.23)); #47282=CARTESIAN_POINT('Origin',(19.39,-1.5,-21.69)); #47283=CARTESIAN_POINT('',(19.39,-0.5,-22.19)); #47284=CARTESIAN_POINT('Origin',(19.39,-0.5,-21.69)); #47285=CARTESIAN_POINT('',(19.39,0.5,-22.19)); #47286=CARTESIAN_POINT('',(19.39,-1.5,-22.19)); #47287=CARTESIAN_POINT('Origin',(19.39,0.5,-21.69)); #47288=CARTESIAN_POINT('Origin',(19.39,-1.5,-19.15)); #47289=CARTESIAN_POINT('',(19.39,-0.5,-19.65)); #47290=CARTESIAN_POINT('Origin',(19.39,-0.5,-19.15)); #47291=CARTESIAN_POINT('',(19.39,0.5,-19.65)); #47292=CARTESIAN_POINT('',(19.39,-1.5,-19.65)); #47293=CARTESIAN_POINT('Origin',(19.39,0.5,-19.15)); #47294=CARTESIAN_POINT('Origin',(19.39,-1.5,-49.63)); #47295=CARTESIAN_POINT('',(19.39,-0.5,-50.13)); #47296=CARTESIAN_POINT('Origin',(19.39,-0.5,-49.63)); #47297=CARTESIAN_POINT('',(19.39,0.5,-50.13)); #47298=CARTESIAN_POINT('',(19.39,-1.5,-50.13)); #47299=CARTESIAN_POINT('Origin',(19.39,0.5,-49.63)); #47300=CARTESIAN_POINT('Origin',(19.39,-1.5,-16.61)); #47301=CARTESIAN_POINT('',(19.39,-0.5,-17.11)); #47302=CARTESIAN_POINT('Origin',(19.39,-0.5,-16.61)); #47303=CARTESIAN_POINT('',(19.39,0.5,-17.11)); #47304=CARTESIAN_POINT('',(19.39,-1.5,-17.11)); #47305=CARTESIAN_POINT('Origin',(19.39,0.5,-16.61)); #47306=CARTESIAN_POINT('Origin',(19.39,-1.5,-14.07)); #47307=CARTESIAN_POINT('',(19.39,-0.5,-14.57)); #47308=CARTESIAN_POINT('Origin',(19.39,-0.5,-14.07)); #47309=CARTESIAN_POINT('',(19.39,0.5,-14.57)); #47310=CARTESIAN_POINT('',(19.39,-1.5,-14.57)); #47311=CARTESIAN_POINT('Origin',(19.39,0.5,-14.07)); #47312=CARTESIAN_POINT('Origin',(19.39,-1.5,-11.53)); #47313=CARTESIAN_POINT('',(19.39,-0.5,-12.03)); #47314=CARTESIAN_POINT('Origin',(19.39,-0.5,-11.53)); #47315=CARTESIAN_POINT('',(19.39,0.5,-12.03)); #47316=CARTESIAN_POINT('',(19.39,-1.5,-12.03)); #47317=CARTESIAN_POINT('Origin',(19.39,0.5,-11.53)); #47318=CARTESIAN_POINT('Origin',(19.39,-1.5,-8.99)); #47319=CARTESIAN_POINT('',(19.39,-0.5,-9.49)); #47320=CARTESIAN_POINT('Origin',(19.39,-0.5,-8.99)); #47321=CARTESIAN_POINT('',(19.39,0.5,-9.49)); #47322=CARTESIAN_POINT('',(19.39,-1.5,-9.49)); #47323=CARTESIAN_POINT('Origin',(19.39,0.5,-8.99)); #47324=CARTESIAN_POINT('Origin',(19.39,-1.5,-6.45)); #47325=CARTESIAN_POINT('',(19.39,-0.5,-6.95)); #47326=CARTESIAN_POINT('Origin',(19.39,-0.5,-6.45)); #47327=CARTESIAN_POINT('',(19.39,0.5,-6.95)); #47328=CARTESIAN_POINT('',(19.39,-1.5,-6.95)); #47329=CARTESIAN_POINT('Origin',(19.39,0.5,-6.45)); #47330=CARTESIAN_POINT('Origin',(19.389999999999,-1.5,-3.91)); #47331=CARTESIAN_POINT('',(19.389999999999,-0.5,-4.41)); #47332=CARTESIAN_POINT('Origin',(19.389999999999,-0.5,-3.91)); #47333=CARTESIAN_POINT('',(19.389999999999,0.5,-4.41)); #47334=CARTESIAN_POINT('',(19.389999999999,-1.5,-4.41)); #47335=CARTESIAN_POINT('Origin',(19.389999999999,0.5,-3.91)); #47336=CARTESIAN_POINT('Origin',(19.389999999999,-1.5,-1.37)); #47337=CARTESIAN_POINT('',(19.389999999999,-0.5,-1.87)); #47338=CARTESIAN_POINT('Origin',(19.389999999999,-0.5,-1.37)); #47339=CARTESIAN_POINT('',(19.389999999999,0.5,-1.87)); #47340=CARTESIAN_POINT('',(19.389999999999,-1.5,-1.87)); #47341=CARTESIAN_POINT('Origin',(19.389999999999,0.5,-1.37)); #47342=CARTESIAN_POINT('Origin',(0.5,0.5,0.)); #47343=CARTESIAN_POINT('',(20.5,0.5,0.)); #47344=CARTESIAN_POINT('',(20.5,-0.5,0.)); #47345=CARTESIAN_POINT('',(20.5,0.5,0.)); #47346=CARTESIAN_POINT('',(13.84,0.5,0.)); #47347=CARTESIAN_POINT('',(0.5,0.5,0.)); #47348=CARTESIAN_POINT('',(13.84,-0.5,0.)); #47349=CARTESIAN_POINT('',(13.84,0.5,0.)); #47350=CARTESIAN_POINT('',(0.5,-0.5,0.)); #47351=CARTESIAN_POINT('Origin',(0.5,0.5,-51.)); #47352=CARTESIAN_POINT('',(20.5,0.5,-51.)); #47353=CARTESIAN_POINT('',(20.5,-0.5,-51.)); #47354=CARTESIAN_POINT('',(20.5,0.5,-51.)); #47355=CARTESIAN_POINT('',(0.5,-0.5,-51.)); #47356=CARTESIAN_POINT('',(0.5,0.5,-51.)); #47357=CARTESIAN_POINT('Origin',(20.5,0.5,-50.5)); #47358=CARTESIAN_POINT('',(21.,-0.5,-50.5)); #47359=CARTESIAN_POINT('Origin',(20.5,-0.5,-50.5)); #47360=CARTESIAN_POINT('',(21.,0.5,-50.5)); #47361=CARTESIAN_POINT('Origin',(20.5,0.5,-50.5)); #47362=CARTESIAN_POINT('',(21.,0.5,-50.5)); #47363=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47364=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47365=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47366=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47367=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47368=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47369=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47370=CARTESIAN_POINT('',(21.,0.5,-50.42993749755)); #47371=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47372=CARTESIAN_POINT('',(21.,-0.5,-50.42993749755)); #47373=CARTESIAN_POINT('',(21.,0.5,-50.42993749755)); #47374=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47375=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47376=CARTESIAN_POINT('',(21.,0.5,-49.13010001)); #47377=CARTESIAN_POINT('',(21.,-0.5,-49.13010001)); #47378=CARTESIAN_POINT('',(21.,-1.5,-49.13010001)); #47379=CARTESIAN_POINT('',(21.,0.5,-48.83006250244)); #47380=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47381=CARTESIAN_POINT('',(21.,-0.5,-48.83006250244)); #47382=CARTESIAN_POINT('',(21.,0.5,-48.83006250244)); #47383=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47384=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47385=CARTESIAN_POINT('',(21.,0.5,-46.59010001)); #47386=CARTESIAN_POINT('',(21.,-0.5,-46.59010001)); #47387=CARTESIAN_POINT('',(21.,-1.5,-46.59010001)); #47388=CARTESIAN_POINT('',(21.,0.5,-46.29006250244)); #47389=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47390=CARTESIAN_POINT('',(21.,-0.5,-46.29006250244)); #47391=CARTESIAN_POINT('',(21.,0.5,-46.29006250244)); #47392=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47393=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47394=CARTESIAN_POINT('',(21.,0.5,-44.05010001)); #47395=CARTESIAN_POINT('',(21.,-0.5,-44.05010001)); #47396=CARTESIAN_POINT('',(21.,-1.5,-44.05010001)); #47397=CARTESIAN_POINT('',(21.,0.5,-43.75006250244)); #47398=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47399=CARTESIAN_POINT('',(21.,-0.5,-43.75006250244)); #47400=CARTESIAN_POINT('',(21.,0.5,-43.75006250244)); #47401=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47402=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47403=CARTESIAN_POINT('',(21.,0.5,-41.51010001)); #47404=CARTESIAN_POINT('',(21.,-0.5,-41.51010001)); #47405=CARTESIAN_POINT('',(21.,-1.5,-41.51010001)); #47406=CARTESIAN_POINT('',(21.,0.5,-41.21006250244)); #47407=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47408=CARTESIAN_POINT('',(21.,-0.5,-41.21006250244)); #47409=CARTESIAN_POINT('',(21.,0.5,-41.21006250244)); #47410=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47411=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47412=CARTESIAN_POINT('',(21.,0.5,-38.97010001)); #47413=CARTESIAN_POINT('',(21.,-0.5,-38.97010001)); #47414=CARTESIAN_POINT('',(21.,-1.5,-38.97010001)); #47415=CARTESIAN_POINT('',(21.,0.5,-38.67006250244)); #47416=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47417=CARTESIAN_POINT('',(21.,-0.5,-38.67006250244)); #47418=CARTESIAN_POINT('',(21.,0.5,-38.67006250244)); #47419=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47420=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47421=CARTESIAN_POINT('',(21.,0.5,-36.43010001)); #47422=CARTESIAN_POINT('',(21.,-0.5,-36.43010001)); #47423=CARTESIAN_POINT('',(21.,-1.5,-36.43010001)); #47424=CARTESIAN_POINT('',(21.,0.5,-36.13006250244)); #47425=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47426=CARTESIAN_POINT('',(21.,-0.5,-36.13006250244)); #47427=CARTESIAN_POINT('',(21.,0.5,-36.13006250244)); #47428=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47429=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47430=CARTESIAN_POINT('',(21.,0.5,-33.89010001)); #47431=CARTESIAN_POINT('',(21.,-0.5,-33.89010001)); #47432=CARTESIAN_POINT('',(21.,-1.5,-33.89010001)); #47433=CARTESIAN_POINT('',(21.,0.5,-33.59006250244)); #47434=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47435=CARTESIAN_POINT('',(21.,-0.5,-33.59006250244)); #47436=CARTESIAN_POINT('',(21.,0.5,-33.59006250244)); #47437=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47438=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47439=CARTESIAN_POINT('',(21.,0.5,-31.35010001)); #47440=CARTESIAN_POINT('',(21.,-0.5,-31.35010001)); #47441=CARTESIAN_POINT('',(21.,-1.5,-31.35010001)); #47442=CARTESIAN_POINT('',(21.,0.5,-31.05006250244)); #47443=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47444=CARTESIAN_POINT('',(21.,-0.5,-31.05006250244)); #47445=CARTESIAN_POINT('',(21.,0.5,-31.05006250244)); #47446=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47447=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47448=CARTESIAN_POINT('',(21.,0.5,-28.81010001)); #47449=CARTESIAN_POINT('',(21.,-0.5,-28.81010001)); #47450=CARTESIAN_POINT('',(21.,-1.5,-28.81010001)); #47451=CARTESIAN_POINT('',(21.,0.5,-28.51006250244)); #47452=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47453=CARTESIAN_POINT('',(21.,-0.5,-28.51006250244)); #47454=CARTESIAN_POINT('',(21.,0.5,-28.51006250244)); #47455=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47456=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47457=CARTESIAN_POINT('',(21.,0.5,-26.27010001)); #47458=CARTESIAN_POINT('',(21.,-0.5,-26.27010001)); #47459=CARTESIAN_POINT('',(21.,-1.5,-26.27010001)); #47460=CARTESIAN_POINT('',(21.,0.5,-25.97006250244)); #47461=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47462=CARTESIAN_POINT('',(21.,-0.5,-25.97006250244)); #47463=CARTESIAN_POINT('',(21.,0.5,-25.97006250244)); #47464=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47465=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47466=CARTESIAN_POINT('',(21.,0.5,-23.73010001)); #47467=CARTESIAN_POINT('',(21.,-0.5,-23.73010001)); #47468=CARTESIAN_POINT('',(21.,-1.5,-23.73010001)); #47469=CARTESIAN_POINT('',(21.,0.5,-23.43006250244)); #47470=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47471=CARTESIAN_POINT('',(21.,-0.5,-23.43006250244)); #47472=CARTESIAN_POINT('',(21.,0.5,-23.43006250244)); #47473=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47474=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47475=CARTESIAN_POINT('',(21.,0.5,-21.19010001)); #47476=CARTESIAN_POINT('',(21.,-0.5,-21.19010001)); #47477=CARTESIAN_POINT('',(21.,-1.5,-21.19010001)); #47478=CARTESIAN_POINT('',(21.,0.5,-20.89006250244)); #47479=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47480=CARTESIAN_POINT('',(21.,-0.5,-20.89006250244)); #47481=CARTESIAN_POINT('',(21.,0.5,-20.89006250244)); #47482=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47483=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47484=CARTESIAN_POINT('',(21.,0.5,-18.65010001)); #47485=CARTESIAN_POINT('',(21.,-0.5,-18.65010001)); #47486=CARTESIAN_POINT('',(21.,-1.5,-18.65010001)); #47487=CARTESIAN_POINT('',(21.,0.5,-18.35006250244)); #47488=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47489=CARTESIAN_POINT('',(21.,-0.5,-18.35006250244)); #47490=CARTESIAN_POINT('',(21.,0.5,-18.35006250244)); #47491=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47492=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47493=CARTESIAN_POINT('',(21.,0.5,-16.11010001)); #47494=CARTESIAN_POINT('',(21.,-0.5,-16.11010001)); #47495=CARTESIAN_POINT('',(21.,-1.5,-16.11010001)); #47496=CARTESIAN_POINT('',(21.,0.5,-15.81006250244)); #47497=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47498=CARTESIAN_POINT('',(21.,-0.5,-15.81006250244)); #47499=CARTESIAN_POINT('',(21.,0.5,-15.81006250244)); #47500=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47501=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47502=CARTESIAN_POINT('',(21.,0.5,-13.57010001)); #47503=CARTESIAN_POINT('',(21.,-0.5,-13.57010001)); #47504=CARTESIAN_POINT('',(21.,-1.5,-13.57010001)); #47505=CARTESIAN_POINT('',(21.,0.5,-13.27006250244)); #47506=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47507=CARTESIAN_POINT('',(21.,-0.5,-13.27006250244)); #47508=CARTESIAN_POINT('',(21.,0.5,-13.27006250244)); #47509=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47510=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47511=CARTESIAN_POINT('',(21.,0.5,-0.870100010002)); #47512=CARTESIAN_POINT('',(21.,-0.5,-0.870100010002)); #47513=CARTESIAN_POINT('',(21.,-1.5,-0.870100010002)); #47514=CARTESIAN_POINT('',(21.,0.5,-0.570062502442)); #47515=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47516=CARTESIAN_POINT('',(21.,-0.5,-0.570062502442)); #47517=CARTESIAN_POINT('',(21.,0.5,-0.570062502442)); #47518=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47519=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47520=CARTESIAN_POINT('',(21.,0.5,-3.410100010002)); #47521=CARTESIAN_POINT('',(21.,-0.5,-3.410100010002)); #47522=CARTESIAN_POINT('',(21.,-1.5,-3.410100010002)); #47523=CARTESIAN_POINT('',(21.,0.5,-3.110062502442)); #47524=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47525=CARTESIAN_POINT('',(21.,-0.5,-3.110062502442)); #47526=CARTESIAN_POINT('',(21.,0.5,-3.110062502442)); #47527=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47528=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47529=CARTESIAN_POINT('',(21.,0.5,-5.950100010002)); #47530=CARTESIAN_POINT('',(21.,-0.5,-5.950100010002)); #47531=CARTESIAN_POINT('',(21.,-1.5,-5.950100010002)); #47532=CARTESIAN_POINT('',(21.,0.5,-5.650062502442)); #47533=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47534=CARTESIAN_POINT('',(21.,-0.5,-5.650062502442)); #47535=CARTESIAN_POINT('',(21.,0.5,-5.650062502442)); #47536=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47537=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47538=CARTESIAN_POINT('',(21.,0.5,-11.03010001)); #47539=CARTESIAN_POINT('',(21.,-0.5,-11.03010001)); #47540=CARTESIAN_POINT('',(21.,-1.5,-11.03010001)); #47541=CARTESIAN_POINT('',(21.,0.5,-10.73006250244)); #47542=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47543=CARTESIAN_POINT('',(21.,-0.5,-10.73006250244)); #47544=CARTESIAN_POINT('',(21.,0.5,-10.73006250244)); #47545=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47546=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #47547=CARTESIAN_POINT('',(21.,0.5,-8.490100010002)); #47548=CARTESIAN_POINT('',(21.,-0.5,-8.490100010002)); #47549=CARTESIAN_POINT('',(21.,-1.5,-8.490100010002)); #47550=CARTESIAN_POINT('',(21.,0.5,-8.190062502442)); #47551=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47552=CARTESIAN_POINT('',(21.,-0.5,-8.190062502442)); #47553=CARTESIAN_POINT('',(21.,0.5,-8.190062502442)); #47554=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47555=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47556=CARTESIAN_POINT('',(19.39,0.5,-8.19)); #47557=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-8.1900625024416)); #47558=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-8.19002083468978)); #47559=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-8.19)); #47560=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-8.19)); #47561=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-8.19)); #47562=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-8.19)); #47563=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-8.19)); #47564=CARTESIAN_POINT('',(21.,0.5,-9.489899989998)); #47565=CARTESIAN_POINT('Origin',(20.99,0.5,-8.99)); #47566=CARTESIAN_POINT('',(21.,0.5,-9.789937497558)); #47567=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47568=CARTESIAN_POINT('',(19.39,0.5,-9.79)); #47569=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-9.7899374975584)); #47570=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-9.78997916531022)); #47571=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-9.79)); #47572=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-9.79)); #47573=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-9.79)); #47574=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-9.79)); #47575=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-9.79)); #47576=CARTESIAN_POINT('Origin',(19.39,0.5,-8.99)); #47577=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47578=CARTESIAN_POINT('',(21.,-0.5,-9.489899989998)); #47579=CARTESIAN_POINT('Origin',(20.99,-0.5,-8.99)); #47580=CARTESIAN_POINT('',(19.39,-0.5,-8.19)); #47581=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-8.1900625024416)); #47582=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-8.19002083468978)); #47583=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-8.19)); #47584=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-8.19)); #47585=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-8.19)); #47586=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-8.19)); #47587=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-8.19)); #47588=CARTESIAN_POINT('',(19.39,-0.5,-9.79)); #47589=CARTESIAN_POINT('Origin',(19.39,-0.5,-8.99)); #47590=CARTESIAN_POINT('',(21.,-0.5,-9.789937497558)); #47591=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-9.79)); #47592=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-9.79)); #47593=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-9.79)); #47594=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-9.79)); #47595=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-9.79)); #47596=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-9.78997916531022)); #47597=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-9.7899374975584)); #47598=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47599=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47600=CARTESIAN_POINT('',(18.79,0.5,-7.25)); #47601=CARTESIAN_POINT('',(21.,0.5,-7.25)); #47602=CARTESIAN_POINT('',(20.5,0.5,-7.25)); #47603=CARTESIAN_POINT('',(18.59,0.5,-7.05)); #47604=CARTESIAN_POINT('Origin',(18.789999850585,0.5,-7.050000149415)); #47605=CARTESIAN_POINT('',(18.59,0.5,-5.85)); #47606=CARTESIAN_POINT('',(18.59,0.5,-0.5)); #47607=CARTESIAN_POINT('',(18.79,0.5,-5.65)); #47608=CARTESIAN_POINT('Origin',(18.789999850585,0.5,-5.849999850585)); #47609=CARTESIAN_POINT('',(21.,0.5,-5.65)); #47610=CARTESIAN_POINT('',(20.5,0.5,-5.65)); #47611=CARTESIAN_POINT('',(21.,0.5,-5.65)); #47612=CARTESIAN_POINT('',(21.,0.5,-6.949899989998)); #47613=CARTESIAN_POINT('Origin',(20.99,0.5,-6.45)); #47614=CARTESIAN_POINT('',(21.,0.5,-7.249937497558)); #47615=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47616=CARTESIAN_POINT('',(21.,0.5,-7.249937497558)); #47617=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47618=CARTESIAN_POINT('',(18.59,-0.5,-5.85)); #47619=CARTESIAN_POINT('',(18.59,-0.5,-7.05)); #47620=CARTESIAN_POINT('',(18.59,-0.5,-0.5)); #47621=CARTESIAN_POINT('',(18.79,-0.5,-7.25)); #47622=CARTESIAN_POINT('Origin',(18.789999850585,-0.5,-7.050000149415)); #47623=CARTESIAN_POINT('',(21.,-0.5,-7.25)); #47624=CARTESIAN_POINT('',(20.5,-0.5,-7.25)); #47625=CARTESIAN_POINT('',(21.,-0.5,-7.249937497558)); #47626=CARTESIAN_POINT('',(21.,-0.5,-7.249937497558)); #47627=CARTESIAN_POINT('',(21.,-0.5,-6.949899989998)); #47628=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47629=CARTESIAN_POINT('Origin',(20.99,-0.5,-6.45)); #47630=CARTESIAN_POINT('',(21.,-0.5,-5.65)); #47631=CARTESIAN_POINT('',(21.,-0.5,-5.65)); #47632=CARTESIAN_POINT('',(18.79,-0.5,-5.65)); #47633=CARTESIAN_POINT('',(20.5,-0.5,-5.65)); #47634=CARTESIAN_POINT('Origin',(18.789999850585,-0.5,-5.849999850585)); #47635=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47636=CARTESIAN_POINT('',(19.39,0.5,-4.71)); #47637=CARTESIAN_POINT('',(21.,0.5,-4.709937497558)); #47638=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-4.7099374975584)); #47639=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-4.70997916531021)); #47640=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-4.71)); #47641=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-4.71)); #47642=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-4.71)); #47643=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-4.71)); #47644=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-4.71)); #47645=CARTESIAN_POINT('',(19.39,0.5,-3.11)); #47646=CARTESIAN_POINT('Origin',(19.39,0.5,-3.91)); #47647=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-3.11)); #47648=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-3.11)); #47649=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-3.11)); #47650=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-3.11)); #47651=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-3.11)); #47652=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-3.11002083468979)); #47653=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-3.1100625024416)); #47654=CARTESIAN_POINT('',(21.,0.5,-4.409899989998)); #47655=CARTESIAN_POINT('Origin',(20.99,0.5,-3.91)); #47656=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47657=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47658=CARTESIAN_POINT('',(19.39,-0.5,-3.11)); #47659=CARTESIAN_POINT('',(19.39,-0.5,-4.71)); #47660=CARTESIAN_POINT('Origin',(19.39,-0.5,-3.91)); #47661=CARTESIAN_POINT('',(21.,-0.5,-4.709937497558)); #47662=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-4.71)); #47663=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-4.71)); #47664=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-4.71)); #47665=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-4.71)); #47666=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-4.71)); #47667=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-4.70997916531021)); #47668=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-4.7099374975584)); #47669=CARTESIAN_POINT('',(21.,-0.5,-4.409899989998)); #47670=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47671=CARTESIAN_POINT('Origin',(20.99,-0.5,-3.91)); #47672=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-3.1100625024416)); #47673=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-3.11002083468979)); #47674=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-3.11)); #47675=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-3.11)); #47676=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-3.11)); #47677=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-3.11)); #47678=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-3.11)); #47679=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47680=CARTESIAN_POINT('',(19.39,0.5,-0.57)); #47681=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-0.570062502441597)); #47682=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-0.570020834689785)); #47683=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-0.57)); #47684=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-0.57)); #47685=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-0.57)); #47686=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-0.57)); #47687=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-0.57)); #47688=CARTESIAN_POINT('',(21.,0.5,-1.869899989998)); #47689=CARTESIAN_POINT('Origin',(20.99,0.5,-1.37)); #47690=CARTESIAN_POINT('',(21.,0.5,-2.169937497558)); #47691=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47692=CARTESIAN_POINT('',(19.39,0.5,-2.17)); #47693=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-2.1699374975584)); #47694=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-2.16997916531022)); #47695=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-2.17)); #47696=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-2.17)); #47697=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-2.17)); #47698=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-2.17)); #47699=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-2.17)); #47700=CARTESIAN_POINT('Origin',(19.39,0.5,-1.37)); #47701=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47702=CARTESIAN_POINT('',(21.,-0.5,-1.869899989998)); #47703=CARTESIAN_POINT('Origin',(20.99,-0.5,-1.37)); #47704=CARTESIAN_POINT('',(19.39,-0.5,-0.57)); #47705=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-0.570062502441597)); #47706=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-0.570020834689785)); #47707=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-0.57)); #47708=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-0.57)); #47709=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-0.57)); #47710=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-0.57)); #47711=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-0.57)); #47712=CARTESIAN_POINT('',(19.39,-0.5,-2.17)); #47713=CARTESIAN_POINT('Origin',(19.39,-0.5,-1.37)); #47714=CARTESIAN_POINT('',(21.,-0.5,-2.169937497558)); #47715=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-2.17)); #47716=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-2.17)); #47717=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-2.17)); #47718=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-2.17)); #47719=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-2.17)); #47720=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-2.16997916531022)); #47721=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-2.1699374975584)); #47722=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47723=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47724=CARTESIAN_POINT('',(21.,0.5,-31.05)); #47725=CARTESIAN_POINT('',(18.789999850585,0.5,-31.05)); #47726=CARTESIAN_POINT('',(20.5,0.5,-31.05)); #47727=CARTESIAN_POINT('',(21.,0.5,-31.05)); #47728=CARTESIAN_POINT('',(21.,0.5,-32.34989998999)); #47729=CARTESIAN_POINT('Origin',(20.99,0.5,-31.85)); #47730=CARTESIAN_POINT('',(21.,0.5,-32.64993749755)); #47731=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47732=CARTESIAN_POINT('',(21.,0.5,-32.65)); #47733=CARTESIAN_POINT('',(21.,0.5,-32.64993749755)); #47734=CARTESIAN_POINT('',(18.79,0.5,-32.65)); #47735=CARTESIAN_POINT('',(20.5,0.5,-32.65)); #47736=CARTESIAN_POINT('',(18.59,0.5,-32.45)); #47737=CARTESIAN_POINT('Origin',(18.789999850585,0.5,-32.45000014941)); #47738=CARTESIAN_POINT('',(18.59,0.5,-31.25)); #47739=CARTESIAN_POINT('',(18.59,0.5,-0.5)); #47740=CARTESIAN_POINT('Origin',(18.789999850585,0.5,-31.24999985058)); #47741=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47742=CARTESIAN_POINT('',(21.,-0.5,-31.05)); #47743=CARTESIAN_POINT('',(21.,-0.5,-31.05)); #47744=CARTESIAN_POINT('',(18.789999850585,-0.5,-31.05)); #47745=CARTESIAN_POINT('',(20.5,-0.5,-31.05)); #47746=CARTESIAN_POINT('',(18.59,-0.5,-31.25)); #47747=CARTESIAN_POINT('Origin',(18.789999850585,-0.5,-31.24999985058)); #47748=CARTESIAN_POINT('',(18.59,-0.5,-32.45)); #47749=CARTESIAN_POINT('',(18.59,-0.5,-0.5)); #47750=CARTESIAN_POINT('',(18.79,-0.5,-32.65)); #47751=CARTESIAN_POINT('Origin',(18.789999850585,-0.5,-32.45000014941)); #47752=CARTESIAN_POINT('',(21.,-0.5,-32.65)); #47753=CARTESIAN_POINT('',(20.5,-0.5,-32.65)); #47754=CARTESIAN_POINT('',(21.,-0.5,-32.64993749755)); #47755=CARTESIAN_POINT('',(21.,-0.5,-32.64993749755)); #47756=CARTESIAN_POINT('',(21.,-0.5,-32.34989998999)); #47757=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47758=CARTESIAN_POINT('Origin',(20.99,-0.5,-31.85)); #47759=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47760=CARTESIAN_POINT('',(19.39,0.5,-30.11)); #47761=CARTESIAN_POINT('',(21.,0.5,-30.10993749755)); #47762=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-30.1099374975584)); #47763=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-30.1099791653102)); #47764=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-30.11)); #47765=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-30.11)); #47766=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-30.11)); #47767=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-30.11)); #47768=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-30.11)); #47769=CARTESIAN_POINT('',(19.39,0.5,-28.51)); #47770=CARTESIAN_POINT('Origin',(19.39,0.5,-29.31)); #47771=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-28.51)); #47772=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-28.51)); #47773=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-28.51)); #47774=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-28.51)); #47775=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-28.51)); #47776=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-28.5100208346898)); #47777=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-28.5100625024416)); #47778=CARTESIAN_POINT('',(21.,0.5,-29.80989998999)); #47779=CARTESIAN_POINT('Origin',(20.99,0.5,-29.31)); #47780=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47781=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47782=CARTESIAN_POINT('',(19.39,-0.5,-28.51)); #47783=CARTESIAN_POINT('',(19.39,-0.5,-30.11)); #47784=CARTESIAN_POINT('Origin',(19.39,-0.5,-29.31)); #47785=CARTESIAN_POINT('',(21.,-0.5,-30.10993749755)); #47786=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-30.11)); #47787=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-30.11)); #47788=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-30.11)); #47789=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-30.11)); #47790=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-30.11)); #47791=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-30.1099791653102)); #47792=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-30.1099374975584)); #47793=CARTESIAN_POINT('',(21.,-0.5,-29.80989998999)); #47794=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47795=CARTESIAN_POINT('Origin',(20.99,-0.5,-29.31)); #47796=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-28.5100625024416)); #47797=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-28.5100208346898)); #47798=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-28.51)); #47799=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-28.51)); #47800=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-28.51)); #47801=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-28.51)); #47802=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-28.51)); #47803=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47804=CARTESIAN_POINT('',(19.39,0.5,-25.97)); #47805=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-25.9700625024416)); #47806=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-25.9700208346898)); #47807=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-25.97)); #47808=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-25.97)); #47809=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-25.97)); #47810=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-25.97)); #47811=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-25.97)); #47812=CARTESIAN_POINT('',(21.,0.5,-27.26989998999)); #47813=CARTESIAN_POINT('Origin',(20.99,0.5,-26.77)); #47814=CARTESIAN_POINT('',(21.,0.5,-27.56993749755)); #47815=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47816=CARTESIAN_POINT('',(19.39,0.5,-27.57)); #47817=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-27.5699374975584)); #47818=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-27.5699791653102)); #47819=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-27.57)); #47820=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-27.57)); #47821=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-27.57)); #47822=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-27.57)); #47823=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-27.57)); #47824=CARTESIAN_POINT('Origin',(19.39,0.5,-26.77)); #47825=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47826=CARTESIAN_POINT('',(21.,-0.5,-27.26989998999)); #47827=CARTESIAN_POINT('Origin',(20.99,-0.5,-26.77)); #47828=CARTESIAN_POINT('',(19.39,-0.5,-25.97)); #47829=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-25.9700625024416)); #47830=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-25.9700208346898)); #47831=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-25.97)); #47832=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-25.97)); #47833=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-25.97)); #47834=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-25.97)); #47835=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-25.97)); #47836=CARTESIAN_POINT('',(19.39,-0.5,-27.57)); #47837=CARTESIAN_POINT('Origin',(19.39,-0.5,-26.77)); #47838=CARTESIAN_POINT('',(21.,-0.5,-27.56993749755)); #47839=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-27.57)); #47840=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-27.57)); #47841=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-27.57)); #47842=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-27.57)); #47843=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-27.57)); #47844=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-27.5699791653102)); #47845=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-27.5699374975584)); #47846=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47847=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47848=CARTESIAN_POINT('',(19.39,0.5,-23.43)); #47849=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-23.4300625024416)); #47850=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-23.4300208346898)); #47851=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-23.43)); #47852=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-23.43)); #47853=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-23.43)); #47854=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-23.43)); #47855=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-23.43)); #47856=CARTESIAN_POINT('',(21.,0.5,-24.72989998999)); #47857=CARTESIAN_POINT('Origin',(20.99,0.5,-24.23)); #47858=CARTESIAN_POINT('',(21.,0.5,-25.02993749755)); #47859=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47860=CARTESIAN_POINT('',(19.39,0.5,-25.03)); #47861=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-25.0299374975584)); #47862=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-25.0299791653102)); #47863=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-25.03)); #47864=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-25.03)); #47865=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-25.03)); #47866=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-25.03)); #47867=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-25.03)); #47868=CARTESIAN_POINT('Origin',(19.39,0.5,-24.23)); #47869=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47870=CARTESIAN_POINT('',(21.,-0.5,-24.72989998999)); #47871=CARTESIAN_POINT('Origin',(20.99,-0.5,-24.23)); #47872=CARTESIAN_POINT('',(19.39,-0.5,-23.43)); #47873=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-23.4300625024416)); #47874=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-23.4300208346898)); #47875=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-23.43)); #47876=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-23.43)); #47877=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-23.43)); #47878=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-23.43)); #47879=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-23.43)); #47880=CARTESIAN_POINT('',(19.39,-0.5,-25.03)); #47881=CARTESIAN_POINT('Origin',(19.39,-0.5,-24.23)); #47882=CARTESIAN_POINT('',(21.,-0.5,-25.02993749755)); #47883=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-25.03)); #47884=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-25.03)); #47885=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-25.03)); #47886=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-25.03)); #47887=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-25.03)); #47888=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-25.0299791653102)); #47889=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-25.0299374975584)); #47890=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47891=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47892=CARTESIAN_POINT('',(19.39,0.5,-20.89)); #47893=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-20.8900625024416)); #47894=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-20.8900208346898)); #47895=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-20.89)); #47896=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-20.89)); #47897=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-20.89)); #47898=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-20.89)); #47899=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-20.89)); #47900=CARTESIAN_POINT('',(21.,0.5,-22.18989998999)); #47901=CARTESIAN_POINT('Origin',(20.99,0.5,-21.69)); #47902=CARTESIAN_POINT('',(21.,0.5,-22.48993749755)); #47903=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47904=CARTESIAN_POINT('',(19.39,0.5,-22.49)); #47905=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-22.4899374975584)); #47906=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-22.4899791653102)); #47907=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-22.49)); #47908=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-22.49)); #47909=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-22.49)); #47910=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-22.49)); #47911=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-22.49)); #47912=CARTESIAN_POINT('Origin',(19.39,0.5,-21.69)); #47913=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47914=CARTESIAN_POINT('',(21.,-0.5,-22.18989998999)); #47915=CARTESIAN_POINT('Origin',(20.99,-0.5,-21.69)); #47916=CARTESIAN_POINT('',(19.39,-0.5,-20.89)); #47917=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-20.8900625024416)); #47918=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-20.8900208346898)); #47919=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-20.89)); #47920=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-20.89)); #47921=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-20.89)); #47922=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-20.89)); #47923=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-20.89)); #47924=CARTESIAN_POINT('',(19.39,-0.5,-22.49)); #47925=CARTESIAN_POINT('Origin',(19.39,-0.5,-21.69)); #47926=CARTESIAN_POINT('',(21.,-0.5,-22.48993749755)); #47927=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-22.49)); #47928=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-22.49)); #47929=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-22.49)); #47930=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-22.49)); #47931=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-22.49)); #47932=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-22.4899791653102)); #47933=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-22.4899374975584)); #47934=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47935=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47936=CARTESIAN_POINT('',(21.,0.5,-18.35)); #47937=CARTESIAN_POINT('',(18.789999850585,0.5,-18.35)); #47938=CARTESIAN_POINT('',(20.5,0.5,-18.35)); #47939=CARTESIAN_POINT('',(21.,0.5,-18.35)); #47940=CARTESIAN_POINT('',(21.,0.5,-19.64989998999)); #47941=CARTESIAN_POINT('Origin',(20.99,0.5,-19.15)); #47942=CARTESIAN_POINT('',(21.,0.5,-19.94993749755)); #47943=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47944=CARTESIAN_POINT('',(21.,0.5,-19.95)); #47945=CARTESIAN_POINT('',(21.,0.5,-19.94993749755)); #47946=CARTESIAN_POINT('',(18.79,0.5,-19.95)); #47947=CARTESIAN_POINT('',(20.5,0.5,-19.95)); #47948=CARTESIAN_POINT('',(18.59,0.5,-19.75)); #47949=CARTESIAN_POINT('Origin',(18.789999850585,0.5,-19.75000014941)); #47950=CARTESIAN_POINT('',(18.59,0.5,-18.55)); #47951=CARTESIAN_POINT('',(18.59,0.5,-0.5)); #47952=CARTESIAN_POINT('Origin',(18.789999850585,0.5,-18.54999985058)); #47953=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47954=CARTESIAN_POINT('',(21.,-0.5,-18.35)); #47955=CARTESIAN_POINT('',(21.,-0.5,-18.35)); #47956=CARTESIAN_POINT('',(18.789999850585,-0.5,-18.35)); #47957=CARTESIAN_POINT('',(20.5,-0.5,-18.35)); #47958=CARTESIAN_POINT('',(18.59,-0.5,-18.55)); #47959=CARTESIAN_POINT('Origin',(18.789999850585,-0.5,-18.54999985058)); #47960=CARTESIAN_POINT('',(18.59,-0.5,-19.75)); #47961=CARTESIAN_POINT('',(18.59,-0.5,-0.5)); #47962=CARTESIAN_POINT('',(18.79,-0.5,-19.95)); #47963=CARTESIAN_POINT('Origin',(18.789999850585,-0.5,-19.75000014941)); #47964=CARTESIAN_POINT('',(21.,-0.5,-19.95)); #47965=CARTESIAN_POINT('',(20.5,-0.5,-19.95)); #47966=CARTESIAN_POINT('',(21.,-0.5,-19.94993749755)); #47967=CARTESIAN_POINT('',(21.,-0.5,-19.94993749755)); #47968=CARTESIAN_POINT('',(21.,-0.5,-19.64989998999)); #47969=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #47970=CARTESIAN_POINT('Origin',(20.99,-0.5,-19.15)); #47971=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #47972=CARTESIAN_POINT('',(19.39,0.5,-17.41)); #47973=CARTESIAN_POINT('',(21.,0.5,-17.40993749755)); #47974=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-17.4099374975584)); #47975=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-17.4099791653102)); #47976=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-17.41)); #47977=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-17.41)); #47978=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-17.41)); #47979=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-17.41)); #47980=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-17.41)); #47981=CARTESIAN_POINT('',(19.39,0.5,-15.81)); #47982=CARTESIAN_POINT('Origin',(19.39,0.5,-16.61)); #47983=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-15.81)); #47984=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-15.81)); #47985=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-15.81)); #47986=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-15.81)); #47987=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-15.81)); #47988=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-15.8100208346898)); #47989=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-15.8100625024416)); #47990=CARTESIAN_POINT('',(21.,0.5,-17.10989998999)); #47991=CARTESIAN_POINT('Origin',(20.99,0.5,-16.61)); #47992=CARTESIAN_POINT('',(21.,0.5,-0.5)); #47993=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #47994=CARTESIAN_POINT('',(19.39,-0.5,-15.81)); #47995=CARTESIAN_POINT('',(19.39,-0.5,-17.41)); #47996=CARTESIAN_POINT('Origin',(19.39,-0.5,-16.61)); #47997=CARTESIAN_POINT('',(21.,-0.5,-17.40993749755)); #47998=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-17.41)); #47999=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-17.41)); #48000=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-17.41)); #48001=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-17.41)); #48002=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-17.41)); #48003=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-17.4099791653102)); #48004=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-17.4099374975584)); #48005=CARTESIAN_POINT('',(21.,-0.5,-17.10989998999)); #48006=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48007=CARTESIAN_POINT('Origin',(20.99,-0.5,-16.61)); #48008=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-15.8100625024416)); #48009=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-15.8100208346898)); #48010=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-15.81)); #48011=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-15.81)); #48012=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-15.81)); #48013=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-15.81)); #48014=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-15.81)); #48015=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48016=CARTESIAN_POINT('',(19.39,0.5,-13.27)); #48017=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-13.2700625024416)); #48018=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-13.2700208346898)); #48019=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-13.27)); #48020=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-13.27)); #48021=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-13.27)); #48022=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-13.27)); #48023=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-13.27)); #48024=CARTESIAN_POINT('',(21.,0.5,-14.56989998999)); #48025=CARTESIAN_POINT('Origin',(20.99,0.5,-14.07)); #48026=CARTESIAN_POINT('',(21.,0.5,-14.86993749755)); #48027=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48028=CARTESIAN_POINT('',(19.39,0.5,-14.87)); #48029=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-14.8699374975584)); #48030=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-14.8699791653102)); #48031=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-14.87)); #48032=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-14.87)); #48033=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-14.87)); #48034=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-14.87)); #48035=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-14.87)); #48036=CARTESIAN_POINT('Origin',(19.39,0.5,-14.07)); #48037=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48038=CARTESIAN_POINT('',(21.,-0.5,-14.56989998999)); #48039=CARTESIAN_POINT('Origin',(20.99,-0.5,-14.07)); #48040=CARTESIAN_POINT('',(19.39,-0.5,-13.27)); #48041=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-13.2700625024416)); #48042=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-13.2700208346898)); #48043=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-13.27)); #48044=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-13.27)); #48045=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-13.27)); #48046=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-13.27)); #48047=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-13.27)); #48048=CARTESIAN_POINT('',(19.39,-0.5,-14.87)); #48049=CARTESIAN_POINT('Origin',(19.39,-0.5,-14.07)); #48050=CARTESIAN_POINT('',(21.,-0.5,-14.86993749755)); #48051=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-14.87)); #48052=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-14.87)); #48053=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-14.87)); #48054=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-14.87)); #48055=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-14.87)); #48056=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-14.8699791653102)); #48057=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-14.8699374975584)); #48058=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48059=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48060=CARTESIAN_POINT('',(19.39,0.5,-12.33)); #48061=CARTESIAN_POINT('',(21.,0.5,-12.32993749755)); #48062=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-12.3299374975584)); #48063=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-12.3299791653102)); #48064=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-12.33)); #48065=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-12.33)); #48066=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-12.33)); #48067=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-12.33)); #48068=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-12.33)); #48069=CARTESIAN_POINT('',(19.39,0.5,-10.73)); #48070=CARTESIAN_POINT('Origin',(19.39,0.5,-11.53)); #48071=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-10.73)); #48072=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-10.73)); #48073=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-10.73)); #48074=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-10.73)); #48075=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-10.73)); #48076=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-10.7300208346898)); #48077=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-10.7300625024416)); #48078=CARTESIAN_POINT('',(21.,0.5,-12.02989998999)); #48079=CARTESIAN_POINT('Origin',(20.99,0.5,-11.53)); #48080=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48081=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48082=CARTESIAN_POINT('',(19.39,-0.5,-10.73)); #48083=CARTESIAN_POINT('',(19.39,-0.5,-12.33)); #48084=CARTESIAN_POINT('Origin',(19.39,-0.5,-11.53)); #48085=CARTESIAN_POINT('',(21.,-0.5,-12.32993749755)); #48086=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-12.33)); #48087=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-12.33)); #48088=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-12.33)); #48089=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-12.33)); #48090=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-12.33)); #48091=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-12.3299791653102)); #48092=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-12.3299374975584)); #48093=CARTESIAN_POINT('',(21.,-0.5,-12.02989998999)); #48094=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48095=CARTESIAN_POINT('Origin',(20.99,-0.5,-11.53)); #48096=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-10.7300625024416)); #48097=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-10.7300208346898)); #48098=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-10.73)); #48099=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-10.73)); #48100=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-10.73)); #48101=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-10.73)); #48102=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-10.73)); #48103=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48104=CARTESIAN_POINT('',(19.39,0.5,-38.67)); #48105=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-38.6700625024416)); #48106=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-38.6700208346898)); #48107=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-38.67)); #48108=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-38.67)); #48109=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-38.67)); #48110=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-38.67)); #48111=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-38.67)); #48112=CARTESIAN_POINT('',(21.,0.5,-39.96989998999)); #48113=CARTESIAN_POINT('Origin',(20.99,0.5,-39.47)); #48114=CARTESIAN_POINT('',(21.,0.5,-40.26993749755)); #48115=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48116=CARTESIAN_POINT('',(19.39,0.5,-40.27)); #48117=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-40.2699374975584)); #48118=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-40.2699791653102)); #48119=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-40.27)); #48120=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-40.27)); #48121=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-40.27)); #48122=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-40.27)); #48123=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-40.27)); #48124=CARTESIAN_POINT('Origin',(19.39,0.5,-39.47)); #48125=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48126=CARTESIAN_POINT('',(21.,-0.5,-39.96989998999)); #48127=CARTESIAN_POINT('Origin',(20.99,-0.5,-39.47)); #48128=CARTESIAN_POINT('',(19.39,-0.5,-38.67)); #48129=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-38.6700625024416)); #48130=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-38.6700208346898)); #48131=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-38.67)); #48132=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-38.67)); #48133=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-38.67)); #48134=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-38.67)); #48135=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-38.67)); #48136=CARTESIAN_POINT('',(19.39,-0.5,-40.27)); #48137=CARTESIAN_POINT('Origin',(19.39,-0.5,-39.47)); #48138=CARTESIAN_POINT('',(21.,-0.5,-40.26993749755)); #48139=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-40.27)); #48140=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-40.27)); #48141=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-40.27)); #48142=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-40.27)); #48143=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-40.27)); #48144=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-40.2699791653102)); #48145=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-40.2699374975584)); #48146=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48147=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48148=CARTESIAN_POINT('',(19.39,0.5,-37.73)); #48149=CARTESIAN_POINT('',(21.,0.5,-37.72993749755)); #48150=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-37.7299374975584)); #48151=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-37.7299791653102)); #48152=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-37.73)); #48153=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-37.73)); #48154=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-37.73)); #48155=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-37.73)); #48156=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-37.73)); #48157=CARTESIAN_POINT('',(19.39,0.5,-36.13)); #48158=CARTESIAN_POINT('Origin',(19.39,0.5,-36.93)); #48159=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-36.13)); #48160=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-36.13)); #48161=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-36.13)); #48162=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-36.13)); #48163=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-36.13)); #48164=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-36.1300208346898)); #48165=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-36.1300625024416)); #48166=CARTESIAN_POINT('',(21.,0.5,-37.42989998999)); #48167=CARTESIAN_POINT('Origin',(20.99,0.5,-36.93)); #48168=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48169=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48170=CARTESIAN_POINT('',(19.39,-0.5,-36.13)); #48171=CARTESIAN_POINT('',(19.39,-0.5,-37.73)); #48172=CARTESIAN_POINT('Origin',(19.39,-0.5,-36.93)); #48173=CARTESIAN_POINT('',(21.,-0.5,-37.72993749755)); #48174=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-37.73)); #48175=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-37.73)); #48176=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-37.73)); #48177=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-37.73)); #48178=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-37.73)); #48179=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-37.7299791653102)); #48180=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-37.7299374975584)); #48181=CARTESIAN_POINT('',(21.,-0.5,-37.42989998999)); #48182=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48183=CARTESIAN_POINT('Origin',(20.99,-0.5,-36.93)); #48184=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-36.1300625024416)); #48185=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-36.1300208346898)); #48186=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-36.13)); #48187=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-36.13)); #48188=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-36.13)); #48189=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-36.13)); #48190=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-36.13)); #48191=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48192=CARTESIAN_POINT('',(19.39,0.5,-33.59)); #48193=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-33.5900625024416)); #48194=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-33.5900208346898)); #48195=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-33.59)); #48196=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-33.59)); #48197=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-33.59)); #48198=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-33.59)); #48199=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-33.59)); #48200=CARTESIAN_POINT('',(21.,0.5,-34.88989998999)); #48201=CARTESIAN_POINT('Origin',(20.99,0.5,-34.39)); #48202=CARTESIAN_POINT('',(21.,0.5,-35.18993749755)); #48203=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48204=CARTESIAN_POINT('',(19.39,0.5,-35.19)); #48205=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-35.1899374975584)); #48206=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-35.1899791653102)); #48207=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-35.19)); #48208=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-35.19)); #48209=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-35.19)); #48210=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-35.19)); #48211=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-35.19)); #48212=CARTESIAN_POINT('Origin',(19.39,0.5,-34.39)); #48213=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48214=CARTESIAN_POINT('',(21.,-0.5,-34.88989998999)); #48215=CARTESIAN_POINT('Origin',(20.99,-0.5,-34.39)); #48216=CARTESIAN_POINT('',(19.39,-0.5,-33.59)); #48217=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-33.5900625024416)); #48218=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-33.5900208346898)); #48219=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-33.59)); #48220=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-33.59)); #48221=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-33.59)); #48222=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-33.59)); #48223=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-33.59)); #48224=CARTESIAN_POINT('',(19.39,-0.5,-35.19)); #48225=CARTESIAN_POINT('Origin',(19.39,-0.5,-34.39)); #48226=CARTESIAN_POINT('',(21.,-0.5,-35.18993749755)); #48227=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-35.19)); #48228=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-35.19)); #48229=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-35.19)); #48230=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-35.19)); #48231=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-35.19)); #48232=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-35.1899791653102)); #48233=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-35.1899374975584)); #48234=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48235=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48236=CARTESIAN_POINT('',(19.39,0.5,-50.43)); #48237=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-50.4299374975584)); #48238=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-50.4299791653102)); #48239=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-50.43)); #48240=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-50.43)); #48241=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-50.43)); #48242=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-50.43)); #48243=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-50.43)); #48244=CARTESIAN_POINT('',(19.39,0.5,-48.83)); #48245=CARTESIAN_POINT('Origin',(19.39,0.5,-49.63)); #48246=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-48.83)); #48247=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-48.83)); #48248=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-48.83)); #48249=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-48.83)); #48250=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-48.83)); #48251=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-48.8300208346898)); #48252=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-48.8300625024416)); #48253=CARTESIAN_POINT('',(21.,0.5,-50.12989998999)); #48254=CARTESIAN_POINT('Origin',(20.99,0.5,-49.63)); #48255=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48256=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48257=CARTESIAN_POINT('',(19.39,-0.5,-48.83)); #48258=CARTESIAN_POINT('',(19.39,-0.5,-50.43)); #48259=CARTESIAN_POINT('Origin',(19.39,-0.5,-49.63)); #48260=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-50.43)); #48261=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-50.43)); #48262=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-50.43)); #48263=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-50.43)); #48264=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-50.43)); #48265=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-50.4299791653102)); #48266=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-50.4299374975584)); #48267=CARTESIAN_POINT('',(21.,-0.5,-50.12989998999)); #48268=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48269=CARTESIAN_POINT('Origin',(20.99,-0.5,-49.63)); #48270=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-48.8300625024416)); #48271=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-48.8300208346898)); #48272=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-48.83)); #48273=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-48.83)); #48274=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-48.83)); #48275=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-48.83)); #48276=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-48.83)); #48277=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48278=CARTESIAN_POINT('',(19.39,0.5,-46.29)); #48279=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-46.2900625024416)); #48280=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-46.2900208346898)); #48281=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-46.29)); #48282=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-46.29)); #48283=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-46.29)); #48284=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-46.29)); #48285=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-46.29)); #48286=CARTESIAN_POINT('',(21.,0.5,-47.58989998999)); #48287=CARTESIAN_POINT('Origin',(20.99,0.5,-47.09)); #48288=CARTESIAN_POINT('',(21.,0.5,-47.88993749755)); #48289=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48290=CARTESIAN_POINT('',(19.39,0.5,-47.89)); #48291=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-47.8899374975584)); #48292=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-47.8899791653102)); #48293=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-47.89)); #48294=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-47.89)); #48295=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-47.89)); #48296=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-47.89)); #48297=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-47.89)); #48298=CARTESIAN_POINT('Origin',(19.39,0.5,-47.09)); #48299=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48300=CARTESIAN_POINT('',(21.,-0.5,-47.58989998999)); #48301=CARTESIAN_POINT('Origin',(20.99,-0.5,-47.09)); #48302=CARTESIAN_POINT('',(19.39,-0.5,-46.29)); #48303=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-46.2900625024416)); #48304=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-46.2900208346898)); #48305=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-46.29)); #48306=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-46.29)); #48307=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-46.29)); #48308=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-46.29)); #48309=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-46.29)); #48310=CARTESIAN_POINT('',(19.39,-0.5,-47.89)); #48311=CARTESIAN_POINT('Origin',(19.39,-0.5,-47.09)); #48312=CARTESIAN_POINT('',(21.,-0.5,-47.88993749755)); #48313=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-47.89)); #48314=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-47.89)); #48315=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-47.89)); #48316=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-47.89)); #48317=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-47.89)); #48318=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-47.8899791653102)); #48319=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-47.8899374975584)); #48320=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48321=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48322=CARTESIAN_POINT('',(18.79,0.5,-45.35)); #48323=CARTESIAN_POINT('',(21.,0.5,-45.35)); #48324=CARTESIAN_POINT('',(20.5,0.5,-45.35)); #48325=CARTESIAN_POINT('',(18.59,0.5,-45.15)); #48326=CARTESIAN_POINT('Origin',(18.789999850585,0.5,-45.15000014941)); #48327=CARTESIAN_POINT('',(18.59,0.5,-43.95)); #48328=CARTESIAN_POINT('',(18.59,0.5,-0.5)); #48329=CARTESIAN_POINT('',(18.79,0.5,-43.75)); #48330=CARTESIAN_POINT('Origin',(18.789999850585,0.5,-43.94999985058)); #48331=CARTESIAN_POINT('',(21.,0.5,-43.75)); #48332=CARTESIAN_POINT('',(20.5,0.5,-43.75)); #48333=CARTESIAN_POINT('',(21.,0.5,-43.75)); #48334=CARTESIAN_POINT('',(21.,0.5,-45.04989998999)); #48335=CARTESIAN_POINT('Origin',(20.99,0.5,-44.55)); #48336=CARTESIAN_POINT('',(21.,0.5,-45.34993749755)); #48337=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48338=CARTESIAN_POINT('',(21.,0.5,-45.34993749755)); #48339=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48340=CARTESIAN_POINT('',(18.59,-0.5,-43.95)); #48341=CARTESIAN_POINT('',(18.59,-0.5,-45.15)); #48342=CARTESIAN_POINT('',(18.59,-0.5,-0.5)); #48343=CARTESIAN_POINT('',(18.79,-0.5,-45.35)); #48344=CARTESIAN_POINT('Origin',(18.789999850585,-0.5,-45.15000014941)); #48345=CARTESIAN_POINT('',(21.,-0.5,-45.35)); #48346=CARTESIAN_POINT('',(20.5,-0.5,-45.35)); #48347=CARTESIAN_POINT('',(21.,-0.5,-45.34993749755)); #48348=CARTESIAN_POINT('',(21.,-0.5,-45.34993749755)); #48349=CARTESIAN_POINT('',(21.,-0.5,-45.04989998999)); #48350=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48351=CARTESIAN_POINT('Origin',(20.99,-0.5,-44.55)); #48352=CARTESIAN_POINT('',(21.,-0.5,-43.75)); #48353=CARTESIAN_POINT('',(21.,-0.5,-43.75)); #48354=CARTESIAN_POINT('',(18.79,-0.5,-43.75)); #48355=CARTESIAN_POINT('',(20.5,-0.5,-43.75)); #48356=CARTESIAN_POINT('Origin',(18.789999850585,-0.5,-43.94999985058)); #48357=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48358=CARTESIAN_POINT('',(19.39,0.5,-41.21)); #48359=CARTESIAN_POINT('Ctrl Pts',(21.,0.5,-41.2100625024416)); #48360=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,0.5,-41.2100208346898)); #48361=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-41.21)); #48362=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-41.21)); #48363=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-41.21)); #48364=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-41.21)); #48365=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-41.21)); #48366=CARTESIAN_POINT('',(21.,0.5,-42.50989998999)); #48367=CARTESIAN_POINT('Origin',(20.99,0.5,-42.01)); #48368=CARTESIAN_POINT('',(21.,0.5,-42.80993749755)); #48369=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48370=CARTESIAN_POINT('',(19.39,0.5,-42.81)); #48371=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,0.5,-42.8099374975584)); #48372=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,0.5,-42.8099791653102)); #48373=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,0.5,-42.81)); #48374=CARTESIAN_POINT('Ctrl Pts',(20.99,0.5,-42.81)); #48375=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,0.5,-42.81)); #48376=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,0.5,-42.81)); #48377=CARTESIAN_POINT('Ctrl Pts',(19.39,0.5,-42.81)); #48378=CARTESIAN_POINT('Origin',(19.39,0.5,-42.01)); #48379=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48380=CARTESIAN_POINT('',(21.,-0.5,-42.50989998999)); #48381=CARTESIAN_POINT('Origin',(20.99,-0.5,-42.01)); #48382=CARTESIAN_POINT('',(19.39,-0.5,-41.21)); #48383=CARTESIAN_POINT('Ctrl Pts',(21.,-0.5,-41.2100625024416)); #48384=CARTESIAN_POINT('Ctrl Pts',(20.9966668402886,-0.5,-41.2100208346898)); #48385=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-41.21)); #48386=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-41.21)); #48387=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-41.21)); #48388=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-41.21)); #48389=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-41.21)); #48390=CARTESIAN_POINT('',(19.39,-0.5,-42.81)); #48391=CARTESIAN_POINT('Origin',(19.39,-0.5,-42.01)); #48392=CARTESIAN_POINT('',(21.,-0.5,-42.80993749755)); #48393=CARTESIAN_POINT('Ctrl Pts',(19.39,-0.5,-42.81)); #48394=CARTESIAN_POINT('Ctrl Pts',(19.9233333333333,-0.5,-42.81)); #48395=CARTESIAN_POINT('Ctrl Pts',(20.4566666666667,-0.5,-42.81)); #48396=CARTESIAN_POINT('Ctrl Pts',(20.99,-0.5,-42.81)); #48397=CARTESIAN_POINT('Ctrl Pts',(20.993333420145,-0.5,-42.81)); #48398=CARTESIAN_POINT('Ctrl Pts',(20.9966668402887,-0.5,-42.8099791653102)); #48399=CARTESIAN_POINT('Ctrl Pts',(21.0000000000001,-0.5,-42.8099374975584)); #48400=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48401=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48402=CARTESIAN_POINT('',(13.84,0.5,-1.6)); #48403=CARTESIAN_POINT('',(13.84,0.5,-0.5)); #48404=CARTESIAN_POINT('',(12.24,0.5,-1.6)); #48405=CARTESIAN_POINT('Origin',(13.04,0.5,-1.6)); #48406=CARTESIAN_POINT('',(12.24,0.5,0.)); #48407=CARTESIAN_POINT('',(12.24,0.5,-0.5)); #48408=CARTESIAN_POINT('',(0.5,0.5,0.)); #48409=CARTESIAN_POINT('',(0.5,0.5,0.)); #48410=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48411=CARTESIAN_POINT('',(12.24,-0.5,0.)); #48412=CARTESIAN_POINT('',(12.24,-0.5,-1.6)); #48413=CARTESIAN_POINT('',(12.24,-0.5,-0.5)); #48414=CARTESIAN_POINT('',(13.84,-0.5,-1.6)); #48415=CARTESIAN_POINT('Origin',(13.04,-0.5,-1.6)); #48416=CARTESIAN_POINT('',(13.84,-0.5,-0.5)); #48417=CARTESIAN_POINT('',(0.5,-0.5,0.)); #48418=CARTESIAN_POINT('',(0.5,-0.5,0.)); #48419=CARTESIAN_POINT('Origin',(0.5,0.5,0.)); #48420=CARTESIAN_POINT('',(12.24,0.5,0.)); #48421=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48422=CARTESIAN_POINT('',(11.3,0.5,0.)); #48423=CARTESIAN_POINT('',(0.5,0.5,0.)); #48424=CARTESIAN_POINT('',(11.3,0.5,-2.2)); #48425=CARTESIAN_POINT('',(11.3,0.5,-0.5)); #48426=CARTESIAN_POINT('',(11.1,0.5,-2.4)); #48427=CARTESIAN_POINT('Origin',(11.100000149415,0.5,-2.200000149415)); #48428=CARTESIAN_POINT('',(9.9,0.5,-2.4)); #48429=CARTESIAN_POINT('',(20.5,0.5,-2.4)); #48430=CARTESIAN_POINT('',(9.7,0.5,-2.2)); #48431=CARTESIAN_POINT('Origin',(9.899999850585,0.5,-2.200000149415)); #48432=CARTESIAN_POINT('',(9.7,0.5,-0.5)); #48433=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48434=CARTESIAN_POINT('',(11.3,-0.5,0.)); #48435=CARTESIAN_POINT('',(0.5,-0.5,0.)); #48436=CARTESIAN_POINT('',(9.7,-0.5,-2.2)); #48437=CARTESIAN_POINT('',(9.7,-0.5,-0.5)); #48438=CARTESIAN_POINT('',(9.9,-0.5,-2.4)); #48439=CARTESIAN_POINT('Origin',(9.899999850585,-0.5,-2.200000149415)); #48440=CARTESIAN_POINT('',(11.1,-0.5,-2.4)); #48441=CARTESIAN_POINT('',(20.5,-0.5,-2.4)); #48442=CARTESIAN_POINT('',(11.3,-0.5,-2.2)); #48443=CARTESIAN_POINT('Origin',(11.100000149415,-0.5,-2.200000149415)); #48444=CARTESIAN_POINT('',(11.3,-0.5,-0.5)); #48445=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48446=CARTESIAN_POINT('',(16.2,0.5,-50.9)); #48447=CARTESIAN_POINT('Origin',(16.2,0.5,-49.)); #48448=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48449=CARTESIAN_POINT('',(16.2,-0.5,-47.1)); #48450=CARTESIAN_POINT('Origin',(16.2,-0.5,-49.)); #48451=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48452=CARTESIAN_POINT('',(16.2,0.5,-3.9)); #48453=CARTESIAN_POINT('Origin',(16.2,0.5,-2.)); #48454=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48455=CARTESIAN_POINT('',(16.2,-0.5,-0.1)); #48456=CARTESIAN_POINT('Origin',(16.2,-0.5,-2.)); #48457=CARTESIAN_POINT('Origin',(20.5,0.5,-0.5)); #48458=CARTESIAN_POINT('',(20.5,0.5,0.)); #48459=CARTESIAN_POINT('',(20.5,0.5,0.)); #48460=CARTESIAN_POINT('',(0.5,0.5,0.)); #48461=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48462=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48463=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48464=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48465=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48466=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48467=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48468=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48469=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48470=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48471=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48472=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48473=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48474=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48475=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48476=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48477=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48478=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48479=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48480=CARTESIAN_POINT('',(21.,0.5,-0.5)); #48481=CARTESIAN_POINT('Origin',(20.5,-0.5,-0.5)); #48482=CARTESIAN_POINT('',(20.5,-0.5,0.)); #48483=CARTESIAN_POINT('',(20.5,-0.5,0.)); #48484=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48485=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48486=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48487=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48488=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48489=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48490=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48491=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48492=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48493=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48494=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48495=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48496=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48497=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48498=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48499=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48500=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48501=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48502=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48503=CARTESIAN_POINT('',(21.,-0.5,-0.5)); #48504=CARTESIAN_POINT('',(0.5,-0.5,0.)); #48505=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48506=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48507=CARTESIAN_POINT('',(21.,0.5,-2.169937497558)); #48508=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48509=CARTESIAN_POINT('',(21.,0.5,-4.709937497558)); #48510=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48511=CARTESIAN_POINT('',(21.,0.5,-7.249937497558)); #48512=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48513=CARTESIAN_POINT('',(21.,0.5,-9.789937497558)); #48514=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48515=CARTESIAN_POINT('',(21.,0.5,-12.32993749755)); #48516=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48517=CARTESIAN_POINT('',(21.,0.5,-14.86993749755)); #48518=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48519=CARTESIAN_POINT('',(21.,0.5,-17.40993749755)); #48520=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48521=CARTESIAN_POINT('',(21.,0.5,-19.94993749755)); #48522=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48523=CARTESIAN_POINT('',(21.,0.5,-22.48993749755)); #48524=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48525=CARTESIAN_POINT('',(21.,0.5,-25.02993749755)); #48526=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48527=CARTESIAN_POINT('',(21.,0.5,-27.56993749755)); #48528=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48529=CARTESIAN_POINT('',(21.,0.5,-30.10993749755)); #48530=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48531=CARTESIAN_POINT('',(21.,0.5,-32.64993749755)); #48532=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48533=CARTESIAN_POINT('',(21.,0.5,-35.18993749755)); #48534=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48535=CARTESIAN_POINT('',(21.,0.5,-37.72993749755)); #48536=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48537=CARTESIAN_POINT('',(21.,0.5,-40.26993749755)); #48538=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48539=CARTESIAN_POINT('',(21.,0.5,-42.80993749755)); #48540=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48541=CARTESIAN_POINT('',(21.,0.5,-45.34993749755)); #48542=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48543=CARTESIAN_POINT('',(21.,0.5,-47.88993749755)); #48544=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48545=CARTESIAN_POINT('',(21.,-1.5,-50.12989998999)); #48546=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48547=CARTESIAN_POINT('',(21.,-1.5,-47.58989998999)); #48548=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48549=CARTESIAN_POINT('',(21.,-1.5,-45.04989998999)); #48550=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48551=CARTESIAN_POINT('',(21.,-1.5,-42.50989998999)); #48552=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48553=CARTESIAN_POINT('',(21.,-1.5,-39.96989998999)); #48554=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48555=CARTESIAN_POINT('',(21.,-1.5,-37.42989998999)); #48556=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48557=CARTESIAN_POINT('',(21.,-1.5,-34.88989998999)); #48558=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48559=CARTESIAN_POINT('',(21.,-1.5,-32.34989998999)); #48560=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48561=CARTESIAN_POINT('',(21.,-1.5,-29.80989998999)); #48562=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48563=CARTESIAN_POINT('',(21.,-1.5,-27.26989998999)); #48564=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48565=CARTESIAN_POINT('',(21.,-1.5,-24.72989998999)); #48566=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48567=CARTESIAN_POINT('',(21.,-1.5,-22.18989998999)); #48568=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48569=CARTESIAN_POINT('',(21.,-1.5,-19.64989998999)); #48570=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48571=CARTESIAN_POINT('',(21.,-1.5,-17.10989998999)); #48572=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48573=CARTESIAN_POINT('',(21.,-1.5,-14.56989998999)); #48574=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48575=CARTESIAN_POINT('',(21.,-1.5,-12.02989998999)); #48576=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48577=CARTESIAN_POINT('',(21.,-1.5,-9.489899989998)); #48578=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48579=CARTESIAN_POINT('',(21.,-1.5,-6.949899989998)); #48580=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48581=CARTESIAN_POINT('',(21.,-1.5,-4.409899989998)); #48582=CARTESIAN_POINT('Origin',(21.,0.5,-0.5)); #48583=CARTESIAN_POINT('',(21.,-1.5,-1.869899989998)); #48584=CARTESIAN_POINT('Origin',(20.5,0.5,0.)); #48585=CARTESIAN_POINT('Origin',(20.5,0.5,0.)); #48586=CARTESIAN_POINT('',(8.76,0.5,0.)); #48587=CARTESIAN_POINT('Origin',(20.5,0.5,0.)); #48588=CARTESIAN_POINT('Origin',(0.5,0.5,0.)); #48589=CARTESIAN_POINT('',(11.3,0.5,0.)); #48590=CARTESIAN_POINT('Origin',(0.5,0.5,0.)); #48591=CARTESIAN_POINT('Origin',(0.5,0.5,0.)); #48592=CARTESIAN_POINT('Origin',(20.99,-1.5,-49.63)); #48593=CARTESIAN_POINT('Origin',(20.99,-1.5,-47.09)); #48594=CARTESIAN_POINT('Origin',(20.99,-1.5,-44.55)); #48595=CARTESIAN_POINT('Origin',(20.99,-1.5,-42.01)); #48596=CARTESIAN_POINT('Origin',(20.99,-1.5,-39.47)); #48597=CARTESIAN_POINT('Origin',(20.99,-1.5,-36.93)); #48598=CARTESIAN_POINT('Origin',(20.99,-1.5,-34.39)); #48599=CARTESIAN_POINT('Origin',(20.99,-1.5,-31.85)); #48600=CARTESIAN_POINT('Origin',(20.99,-1.5,-29.31)); #48601=CARTESIAN_POINT('Origin',(20.99,-1.5,-26.77)); #48602=CARTESIAN_POINT('Origin',(20.99,-1.5,-24.23)); #48603=CARTESIAN_POINT('Origin',(20.99,-1.5,-21.69)); #48604=CARTESIAN_POINT('Origin',(20.99,-1.5,-19.15)); #48605=CARTESIAN_POINT('Origin',(20.99,-1.5,-16.61)); #48606=CARTESIAN_POINT('Origin',(20.99,-1.5,-14.07)); #48607=CARTESIAN_POINT('Origin',(20.99,-1.5,-11.53)); #48608=CARTESIAN_POINT('Origin',(20.99,-1.5,-1.37)); #48609=CARTESIAN_POINT('Origin',(20.99,-1.5,-3.91)); #48610=CARTESIAN_POINT('Origin',(20.99,-1.5,-6.45)); #48611=CARTESIAN_POINT('Origin',(20.99,-1.5,-8.99)); #48612=CARTESIAN_POINT('Origin',(13.095569674381,0.9,-47.04)); #48613=CARTESIAN_POINT('',(13.89,2.68,-47.04)); #48614=CARTESIAN_POINT('',(7.11,2.68,-47.04)); #48615=CARTESIAN_POINT('',(13.89,2.68,-47.04)); #48616=CARTESIAN_POINT('',(13.95,2.62,-47.04)); #48617=CARTESIAN_POINT('Origin',(13.89,2.62,-47.04)); #48618=CARTESIAN_POINT('',(13.95,1.792266572617,-47.04)); #48619=CARTESIAN_POINT('',(13.95,2.62,-47.04)); #48620=CARTESIAN_POINT('',(13.93481201278,1.752368157729,-47.04)); #48621=CARTESIAN_POINT('Origin',(13.89,1.792266572617,-47.04)); #48622=CARTESIAN_POINT('',(13.140381687161,0.860101585112,-47.04)); #48623=CARTESIAN_POINT('',(13.93481201278,1.752368157729,-47.04)); #48624=CARTESIAN_POINT('',(13.095569674381,0.84,-47.04)); #48625=CARTESIAN_POINT('Origin',(13.095569674381,0.9,-47.04)); #48626=CARTESIAN_POINT('',(7.904430325619,0.84,-47.04)); #48627=CARTESIAN_POINT('',(13.095569674381,0.84,-47.04)); #48628=CARTESIAN_POINT('',(7.859618312839,0.860101585112,-47.04)); #48629=CARTESIAN_POINT('Origin',(7.904430325619,0.9,-47.04)); #48630=CARTESIAN_POINT('',(7.06518798722,1.752368157729,-47.04)); #48631=CARTESIAN_POINT('',(7.06518798722,1.752368157729,-47.04)); #48632=CARTESIAN_POINT('',(7.05,1.792266572617,-47.04)); #48633=CARTESIAN_POINT('Origin',(7.11,1.792266572617,-47.04)); #48634=CARTESIAN_POINT('',(7.05,2.62,-47.04)); #48635=CARTESIAN_POINT('',(7.05,2.62,-47.04)); #48636=CARTESIAN_POINT('Origin',(7.11,2.62,-47.04)); #48637=CARTESIAN_POINT('Origin',(14.18874675187,1.526277140031,-51.7)); #48638=CARTESIAN_POINT('',(14.18874675187,1.526277140031,-51.7)); #48639=CARTESIAN_POINT('',(14.18874675187,1.526277140031,-46.7)); #48640=CARTESIAN_POINT('',(14.18874675187,1.526277140031,-51.7)); #48641=CARTESIAN_POINT('',(13.39431642625,0.634010567414,-46.7)); #48642=CARTESIAN_POINT('',(14.18874675187,1.526277140031,-46.7)); #48643=CARTESIAN_POINT('',(13.39431642625,0.634010567414,-51.7)); #48644=CARTESIAN_POINT('',(13.39431642625,0.634010567414,-51.7)); #48645=CARTESIAN_POINT('',(14.18874675187,1.526277140031,-51.7)); #48646=CARTESIAN_POINT('Origin',(13.89,1.792266572617,-51.7)); #48647=CARTESIAN_POINT('',(14.29,1.792266572617,-46.7)); #48648=CARTESIAN_POINT('Origin',(13.89,1.792266572617,-46.7)); #48649=CARTESIAN_POINT('',(14.29,1.792266572617,-51.7)); #48650=CARTESIAN_POINT('Origin',(13.89,1.792266572617,-51.7)); #48651=CARTESIAN_POINT('',(14.29,1.792266572617,-51.7)); #48652=CARTESIAN_POINT('Origin',(14.29,2.62,-51.7)); #48653=CARTESIAN_POINT('',(14.29,2.62,-51.7)); #48654=CARTESIAN_POINT('',(14.29,2.62,-46.7)); #48655=CARTESIAN_POINT('',(14.29,2.62,-51.7)); #48656=CARTESIAN_POINT('',(14.29,2.62,-46.7)); #48657=CARTESIAN_POINT('',(14.29,2.62,-51.7)); #48658=CARTESIAN_POINT('Origin',(13.89,2.62,-51.7)); #48659=CARTESIAN_POINT('',(13.89,3.02,-46.7)); #48660=CARTESIAN_POINT('Origin',(13.89,2.62,-46.7)); #48661=CARTESIAN_POINT('',(13.89,3.02,-51.7)); #48662=CARTESIAN_POINT('Origin',(13.89,2.62,-51.7)); #48663=CARTESIAN_POINT('',(13.89,3.02,-51.7)); #48664=CARTESIAN_POINT('Origin',(13.89,3.02,-51.7)); #48665=CARTESIAN_POINT('',(7.11,3.02,-51.7)); #48666=CARTESIAN_POINT('',(7.11,3.02,-46.7)); #48667=CARTESIAN_POINT('',(7.11,3.02,-51.7)); #48668=CARTESIAN_POINT('',(13.89,3.02,-46.7)); #48669=CARTESIAN_POINT('',(13.89,3.02,-51.7)); #48670=CARTESIAN_POINT('Origin',(7.11,2.62,-51.7)); #48671=CARTESIAN_POINT('',(6.71,2.62,-46.7)); #48672=CARTESIAN_POINT('Origin',(7.11,2.62,-46.7)); #48673=CARTESIAN_POINT('',(6.71,2.62,-51.7)); #48674=CARTESIAN_POINT('Origin',(7.11,2.62,-51.7)); #48675=CARTESIAN_POINT('',(6.71,2.62,-51.7)); #48676=CARTESIAN_POINT('Origin',(6.71,2.62,-51.7)); #48677=CARTESIAN_POINT('',(6.71,1.792266572617,-51.7)); #48678=CARTESIAN_POINT('',(6.71,1.792266572617,-46.7)); #48679=CARTESIAN_POINT('',(6.71,1.792266572617,-51.7)); #48680=CARTESIAN_POINT('',(6.71,2.62,-46.7)); #48681=CARTESIAN_POINT('',(6.71,2.62,-51.7)); #48682=CARTESIAN_POINT('Origin',(7.11,1.792266572617,-51.7)); #48683=CARTESIAN_POINT('',(6.81125324813,1.526277140031,-46.7)); #48684=CARTESIAN_POINT('Origin',(7.11,1.792266572617,-46.7)); #48685=CARTESIAN_POINT('',(6.81125324813,1.526277140031,-51.7)); #48686=CARTESIAN_POINT('Origin',(7.11,1.792266572617,-51.7)); #48687=CARTESIAN_POINT('',(6.81125324813,1.526277140031,-51.7)); #48688=CARTESIAN_POINT('Origin',(6.81125324813,1.526277140031,-51.7)); #48689=CARTESIAN_POINT('',(7.60568357375,0.634010567414,-51.7)); #48690=CARTESIAN_POINT('',(7.60568357375,0.634010567414,-46.7)); #48691=CARTESIAN_POINT('',(7.60568357375,0.634010567414,-51.7)); #48692=CARTESIAN_POINT('',(6.81125324813,1.526277140031,-46.7)); #48693=CARTESIAN_POINT('',(6.81125324813,1.526277140031,-51.7)); #48694=CARTESIAN_POINT('Origin',(7.904430325619,0.9,-51.7)); #48695=CARTESIAN_POINT('',(7.904430325619,0.5,-46.7)); #48696=CARTESIAN_POINT('Origin',(7.904430325619,0.9,-46.7)); #48697=CARTESIAN_POINT('',(7.904430325619,0.5,-51.7)); #48698=CARTESIAN_POINT('Origin',(7.904430325619,0.9,-51.7)); #48699=CARTESIAN_POINT('',(7.904430325619,0.5,-51.7)); #48700=CARTESIAN_POINT('Origin',(13.095569674381,0.5,-51.7)); #48701=CARTESIAN_POINT('',(13.095569674381,0.5,-51.7)); #48702=CARTESIAN_POINT('',(13.095569674381,0.5,-46.7)); #48703=CARTESIAN_POINT('',(13.095569674381,0.5,-51.7)); #48704=CARTESIAN_POINT('',(13.095569674381,0.5,-46.7)); #48705=CARTESIAN_POINT('',(13.095569674381,0.5,-51.7)); #48706=CARTESIAN_POINT('Origin',(13.095569674381,0.9,-51.7)); #48707=CARTESIAN_POINT('Origin',(13.095569674381,0.9,-46.7)); #48708=CARTESIAN_POINT('Origin',(13.095569674381,0.9,-51.7)); #48709=CARTESIAN_POINT('Origin',(13.095569674381,0.9,-46.7)); #48710=CARTESIAN_POINT('Origin',(13.095569674381,0.9,-51.7)); #48711=CARTESIAN_POINT('',(13.95,2.62,-51.7)); #48712=CARTESIAN_POINT('',(13.95,1.792266572617,-51.7)); #48713=CARTESIAN_POINT('',(13.95,2.62,-51.7)); #48714=CARTESIAN_POINT('',(13.89,2.68,-51.7)); #48715=CARTESIAN_POINT('Origin',(13.89,2.62,-51.7)); #48716=CARTESIAN_POINT('',(7.11,2.68,-51.7)); #48717=CARTESIAN_POINT('',(13.89,2.68,-51.7)); #48718=CARTESIAN_POINT('',(7.05,2.62,-51.7)); #48719=CARTESIAN_POINT('Origin',(7.11,2.62,-51.7)); #48720=CARTESIAN_POINT('',(7.05,1.792266572617,-51.7)); #48721=CARTESIAN_POINT('',(7.05,2.62,-51.7)); #48722=CARTESIAN_POINT('',(7.06518798722,1.752368157729,-51.7)); #48723=CARTESIAN_POINT('Origin',(7.11,1.792266572617,-51.7)); #48724=CARTESIAN_POINT('',(7.859618312839,0.860101585112,-51.7)); #48725=CARTESIAN_POINT('',(7.06518798722,1.752368157729,-51.7)); #48726=CARTESIAN_POINT('',(7.904430325619,0.84,-51.7)); #48727=CARTESIAN_POINT('Origin',(7.904430325619,0.9,-51.7)); #48728=CARTESIAN_POINT('',(13.095569674381,0.84,-51.7)); #48729=CARTESIAN_POINT('',(13.095569674381,0.84,-51.7)); #48730=CARTESIAN_POINT('',(13.140381687161,0.860101585112,-51.7)); #48731=CARTESIAN_POINT('Origin',(13.095569674381,0.9,-51.7)); #48732=CARTESIAN_POINT('',(13.93481201278,1.752368157729,-51.7)); #48733=CARTESIAN_POINT('',(13.93481201278,1.752368157729,-51.7)); #48734=CARTESIAN_POINT('Origin',(13.89,1.792266572617,-51.7)); #48735=CARTESIAN_POINT('Origin',(13.89,2.68,-51.7)); #48736=CARTESIAN_POINT('',(13.89,2.68,-51.7)); #48737=CARTESIAN_POINT('',(7.11,2.68,-51.7)); #48738=CARTESIAN_POINT('Origin',(7.11,2.62,-51.7)); #48739=CARTESIAN_POINT('',(7.05,2.62,-51.7)); #48740=CARTESIAN_POINT('Origin',(7.05,2.62,-51.7)); #48741=CARTESIAN_POINT('',(7.05,1.792266572617,-51.7)); #48742=CARTESIAN_POINT('Origin',(7.11,1.792266572617,-51.7)); #48743=CARTESIAN_POINT('',(7.06518798722,1.752368157729,-51.7)); #48744=CARTESIAN_POINT('Origin',(7.06518798722,1.752368157729,-51.7)); #48745=CARTESIAN_POINT('',(7.859618312839,0.860101585112,-51.7)); #48746=CARTESIAN_POINT('Origin',(7.904430325619,0.9,-51.7)); #48747=CARTESIAN_POINT('',(7.904430325619,0.84,-51.7)); #48748=CARTESIAN_POINT('Origin',(13.095569674381,0.84,-51.7)); #48749=CARTESIAN_POINT('',(13.095569674381,0.84,-51.7)); #48750=CARTESIAN_POINT('Origin',(13.095569674381,0.9,-51.7)); #48751=CARTESIAN_POINT('',(13.140381687161,0.860101585112,-51.7)); #48752=CARTESIAN_POINT('Origin',(13.93481201278,1.752368157729,-51.7)); #48753=CARTESIAN_POINT('',(13.93481201278,1.752368157729,-51.7)); #48754=CARTESIAN_POINT('Origin',(13.89,1.792266572617,-51.7)); #48755=CARTESIAN_POINT('',(13.95,1.792266572617,-51.7)); #48756=CARTESIAN_POINT('Origin',(13.95,2.62,-51.7)); #48757=CARTESIAN_POINT('',(13.95,2.62,-51.7)); #48758=CARTESIAN_POINT('Origin',(13.89,2.62,-51.7)); #48759=CARTESIAN_POINT('Origin',(13.7,3.18,-51.76476908614)); #48760=CARTESIAN_POINT('',(13.7,2.68,-51.7)); #48761=CARTESIAN_POINT('',(13.7,3.02,-51.7)); #48762=CARTESIAN_POINT('',(13.7,3.02,-51.7)); #48763=CARTESIAN_POINT('',(13.7,2.68,-51.76476908614)); #48764=CARTESIAN_POINT('',(13.7,2.68,-51.7)); #48765=CARTESIAN_POINT('',(13.7,2.782941176471,-52.06865112025)); #48766=CARTESIAN_POINT('Origin',(13.7,3.18,-51.76476908614)); #48767=CARTESIAN_POINT('',(13.7,2.96,-52.3)); #48768=CARTESIAN_POINT('',(13.7,2.782941176471,-52.06865112025)); #48769=CARTESIAN_POINT('',(13.7,3.23,-52.0933602168)); #48770=CARTESIAN_POINT('',(13.7,2.96,-52.3)); #48771=CARTESIAN_POINT('',(13.7,3.071470588235,-51.88622226633)); #48772=CARTESIAN_POINT('',(13.7,3.23,-52.0933602168)); #48773=CARTESIAN_POINT('',(13.7,3.02,-51.73428124927)); #48774=CARTESIAN_POINT('Origin',(13.7,3.27,-51.73428124927)); #48775=CARTESIAN_POINT('',(13.7,3.02,-51.73428124927)); #48776=CARTESIAN_POINT('Origin',(7.3,3.18,-51.76476908614)); #48777=CARTESIAN_POINT('',(7.3,2.68,-51.76476908614)); #48778=CARTESIAN_POINT('',(7.3,2.68,-51.7)); #48779=CARTESIAN_POINT('',(7.3,2.68,-51.7)); #48780=CARTESIAN_POINT('',(7.3,3.02,-51.7)); #48781=CARTESIAN_POINT('',(7.3,3.02,-51.7)); #48782=CARTESIAN_POINT('',(7.3,3.02,-51.73428124927)); #48783=CARTESIAN_POINT('',(7.3,3.02,-51.73428124927)); #48784=CARTESIAN_POINT('',(7.3,3.071470588235,-51.88622226633)); #48785=CARTESIAN_POINT('Origin',(7.3,3.27,-51.73428124927)); #48786=CARTESIAN_POINT('',(7.3,3.23,-52.0933602168)); #48787=CARTESIAN_POINT('',(7.3,3.23,-52.0933602168)); #48788=CARTESIAN_POINT('',(7.3,2.96,-52.3)); #48789=CARTESIAN_POINT('',(7.3,2.96,-52.3)); #48790=CARTESIAN_POINT('',(7.3,2.782941176471,-52.06865112025)); #48791=CARTESIAN_POINT('',(7.3,2.782941176471,-52.06865112025)); #48792=CARTESIAN_POINT('Origin',(7.3,3.18,-51.76476908614)); #48793=CARTESIAN_POINT('Origin',(7.3,2.68,-51.7)); #48794=CARTESIAN_POINT('',(7.3,2.68,-51.7)); #48795=CARTESIAN_POINT('',(7.3,2.68,-51.76476908614)); #48796=CARTESIAN_POINT('Origin',(7.3,3.18,-51.76476908614)); #48797=CARTESIAN_POINT('',(7.3,2.782941176471,-52.06865112025)); #48798=CARTESIAN_POINT('Origin',(7.3,2.782941176471,-52.06865112025)); #48799=CARTESIAN_POINT('',(7.3,2.96,-52.3)); #48800=CARTESIAN_POINT('Origin',(7.3,2.96,-52.3)); #48801=CARTESIAN_POINT('',(7.3,3.23,-52.0933602168)); #48802=CARTESIAN_POINT('Origin',(7.3,3.23,-52.0933602168)); #48803=CARTESIAN_POINT('',(7.3,3.071470588235,-51.88622226633)); #48804=CARTESIAN_POINT('Origin',(7.3,3.27,-51.73428124927)); #48805=CARTESIAN_POINT('',(7.3,3.02,-51.73428124927)); #48806=CARTESIAN_POINT('Origin',(7.3,3.02,-51.73428124927)); #48807=CARTESIAN_POINT('',(7.3,3.02,-51.7)); #48808=CARTESIAN_POINT('Origin',(7.3,3.02,-51.7)); #48809=CARTESIAN_POINT('Origin',(13.1,0.34,-51.76476908614)); #48810=CARTESIAN_POINT('',(13.1,0.84,-51.7)); #48811=CARTESIAN_POINT('',(13.1,0.5,-51.7)); #48812=CARTESIAN_POINT('',(13.1,0.5,-51.7)); #48813=CARTESIAN_POINT('',(13.1,0.5,-51.73428124927)); #48814=CARTESIAN_POINT('',(13.1,0.5,-51.73428124927)); #48815=CARTESIAN_POINT('',(13.1,0.448529411765,-51.88622226633)); #48816=CARTESIAN_POINT('Origin',(13.1,0.25,-51.73428124927)); #48817=CARTESIAN_POINT('',(13.1,0.29,-52.0933602168)); #48818=CARTESIAN_POINT('',(13.1,0.29,-52.0933602168)); #48819=CARTESIAN_POINT('',(13.1,0.56,-52.3)); #48820=CARTESIAN_POINT('',(13.1,0.56,-52.3)); #48821=CARTESIAN_POINT('',(13.1,0.737058823529,-52.06865112025)); #48822=CARTESIAN_POINT('',(13.1,0.737058823529,-52.06865112025)); #48823=CARTESIAN_POINT('',(13.1,0.84,-51.76476908614)); #48824=CARTESIAN_POINT('Origin',(13.1,0.34,-51.76476908614)); #48825=CARTESIAN_POINT('',(13.1,0.84,-51.7)); #48826=CARTESIAN_POINT('Origin',(7.9,0.34,-51.76476908614)); #48827=CARTESIAN_POINT('',(7.9,0.5,-51.7)); #48828=CARTESIAN_POINT('',(7.9,0.5,-51.73428124927)); #48829=CARTESIAN_POINT('',(7.9,0.5,-51.73428124927)); #48830=CARTESIAN_POINT('',(7.9,0.84,-51.7)); #48831=CARTESIAN_POINT('',(7.9,0.5,-51.7)); #48832=CARTESIAN_POINT('',(7.9,0.84,-51.76476908614)); #48833=CARTESIAN_POINT('',(7.9,0.84,-51.7)); #48834=CARTESIAN_POINT('',(7.9,0.737058823529,-52.06865112025)); #48835=CARTESIAN_POINT('Origin',(7.9,0.34,-51.76476908614)); #48836=CARTESIAN_POINT('',(7.9,0.56,-52.3)); #48837=CARTESIAN_POINT('',(7.9,0.737058823529,-52.06865112025)); #48838=CARTESIAN_POINT('',(7.9,0.29,-52.0933602168)); #48839=CARTESIAN_POINT('',(7.9,0.56,-52.3)); #48840=CARTESIAN_POINT('',(7.9,0.448529411765,-51.88622226633)); #48841=CARTESIAN_POINT('',(7.9,0.29,-52.0933602168)); #48842=CARTESIAN_POINT('Origin',(7.9,0.25,-51.73428124927)); #48843=CARTESIAN_POINT('Origin',(7.3,0.84,-51.7)); #48844=CARTESIAN_POINT('',(7.3,0.84,-51.76476908614)); #48845=CARTESIAN_POINT('',(7.3,0.84,-51.7)); #48846=CARTESIAN_POINT('Origin',(7.3,0.34,-51.76476908614)); #48847=CARTESIAN_POINT('',(7.3,0.737058823529,-52.06865112025)); #48848=CARTESIAN_POINT('Origin',(7.3,0.737058823529,-52.06865112025)); #48849=CARTESIAN_POINT('',(7.3,0.56,-52.3)); #48850=CARTESIAN_POINT('Origin',(7.3,0.56,-52.3)); #48851=CARTESIAN_POINT('',(7.3,0.29,-52.0933602168)); #48852=CARTESIAN_POINT('Origin',(7.3,0.29,-52.0933602168)); #48853=CARTESIAN_POINT('',(7.3,0.448529411765,-51.88622226633)); #48854=CARTESIAN_POINT('Origin',(7.3,0.25,-51.73428124927)); #48855=CARTESIAN_POINT('',(7.3,0.5,-51.73428124927)); #48856=CARTESIAN_POINT('Origin',(7.3,0.5,-51.73428124927)); #48857=CARTESIAN_POINT('',(7.3,0.5,-51.7)); #48858=CARTESIAN_POINT('Origin',(7.3,0.5,-51.7)); #48859=CARTESIAN_POINT('Origin',(14.45,2.62,-51.76476908614)); #48860=CARTESIAN_POINT('',(13.95,2.62,-51.7)); #48861=CARTESIAN_POINT('',(14.29,2.62,-51.7)); #48862=CARTESIAN_POINT('',(14.29,2.62,-51.7)); #48863=CARTESIAN_POINT('',(14.29,2.62,-51.73428124927)); #48864=CARTESIAN_POINT('',(14.29,2.62,-51.7)); #48865=CARTESIAN_POINT('',(14.341470588235,2.62,-51.88622226633)); #48866=CARTESIAN_POINT('Origin',(14.54,2.62,-51.73428124927)); #48867=CARTESIAN_POINT('',(14.5,2.62,-52.0933602168)); #48868=CARTESIAN_POINT('',(14.341470588235,2.62,-51.88622226633)); #48869=CARTESIAN_POINT('',(14.23,2.62,-52.3)); #48870=CARTESIAN_POINT('',(14.5,2.62,-52.0933602168)); #48871=CARTESIAN_POINT('',(14.052941176471,2.62,-52.06865112025)); #48872=CARTESIAN_POINT('',(14.23,2.62,-52.3)); #48873=CARTESIAN_POINT('',(13.95,2.62,-51.76476908614)); #48874=CARTESIAN_POINT('Origin',(14.45,2.62,-51.76476908614)); #48875=CARTESIAN_POINT('',(13.95,2.62,-51.76476908614)); #48876=CARTESIAN_POINT('Origin',(14.45,1.7,-51.76476908614)); #48877=CARTESIAN_POINT('',(14.29,1.7,-51.7)); #48878=CARTESIAN_POINT('',(14.29,1.7,-51.73428124927)); #48879=CARTESIAN_POINT('',(14.29,1.7,-51.7)); #48880=CARTESIAN_POINT('',(13.95,1.7,-51.7)); #48881=CARTESIAN_POINT('',(14.29,1.7,-51.7)); #48882=CARTESIAN_POINT('',(13.95,1.7,-51.76476908614)); #48883=CARTESIAN_POINT('',(13.95,1.7,-51.76476908614)); #48884=CARTESIAN_POINT('',(14.052941176471,1.7,-52.06865112025)); #48885=CARTESIAN_POINT('Origin',(14.45,1.7,-51.76476908614)); #48886=CARTESIAN_POINT('',(14.23,1.7,-52.3)); #48887=CARTESIAN_POINT('',(14.23,1.7,-52.3)); #48888=CARTESIAN_POINT('',(14.5,1.7,-52.0933602168)); #48889=CARTESIAN_POINT('',(14.5,1.7,-52.0933602168)); #48890=CARTESIAN_POINT('',(14.341470588235,1.7,-51.88622226633)); #48891=CARTESIAN_POINT('',(14.341470588235,1.7,-51.88622226633)); #48892=CARTESIAN_POINT('Origin',(14.54,1.7,-51.73428124927)); #48893=CARTESIAN_POINT('Origin',(14.29,1.7,-51.7)); #48894=CARTESIAN_POINT('',(14.29,1.7,-51.7)); #48895=CARTESIAN_POINT('',(14.29,1.7,-51.73428124927)); #48896=CARTESIAN_POINT('Origin',(14.54,1.7,-51.73428124927)); #48897=CARTESIAN_POINT('',(14.341470588235,1.7,-51.88622226633)); #48898=CARTESIAN_POINT('Origin',(14.341470588235,1.7,-51.88622226633)); #48899=CARTESIAN_POINT('',(14.5,1.7,-52.0933602168)); #48900=CARTESIAN_POINT('Origin',(14.5,1.7,-52.0933602168)); #48901=CARTESIAN_POINT('',(14.23,1.7,-52.3)); #48902=CARTESIAN_POINT('Origin',(14.23,1.7,-52.3)); #48903=CARTESIAN_POINT('',(14.052941176471,1.7,-52.06865112025)); #48904=CARTESIAN_POINT('Origin',(14.45,1.7,-51.76476908614)); #48905=CARTESIAN_POINT('',(13.95,1.7,-51.76476908614)); #48906=CARTESIAN_POINT('Origin',(13.95,1.7,-51.76476908614)); #48907=CARTESIAN_POINT('',(13.95,1.7,-51.7)); #48908=CARTESIAN_POINT('Origin',(14.29,1.7,-51.7)); #48909=CARTESIAN_POINT('Origin',(6.55,2.62,-51.76476908614)); #48910=CARTESIAN_POINT('',(7.05,2.62,-51.7)); #48911=CARTESIAN_POINT('',(6.71,2.62,-51.7)); #48912=CARTESIAN_POINT('',(6.71,2.62,-51.7)); #48913=CARTESIAN_POINT('',(7.05,2.62,-51.76476908614)); #48914=CARTESIAN_POINT('',(7.05,2.62,-51.76476908614)); #48915=CARTESIAN_POINT('',(6.947058823529,2.62,-52.06865112025)); #48916=CARTESIAN_POINT('Origin',(6.55,2.62,-51.76476908614)); #48917=CARTESIAN_POINT('',(6.77,2.62,-52.3)); #48918=CARTESIAN_POINT('',(6.77,2.62,-52.3)); #48919=CARTESIAN_POINT('',(6.5,2.62,-52.0933602168)); #48920=CARTESIAN_POINT('',(6.5,2.62,-52.0933602168)); #48921=CARTESIAN_POINT('',(6.658529411765,2.62,-51.88622226633)); #48922=CARTESIAN_POINT('',(6.658529411765,2.62,-51.88622226633)); #48923=CARTESIAN_POINT('',(6.71,2.62,-51.73428124927)); #48924=CARTESIAN_POINT('Origin',(6.46,2.62,-51.73428124927)); #48925=CARTESIAN_POINT('',(6.71,2.62,-51.7)); #48926=CARTESIAN_POINT('Origin',(6.55,1.7,-51.76476908614)); #48927=CARTESIAN_POINT('',(7.05,1.7,-51.76476908614)); #48928=CARTESIAN_POINT('',(7.05,1.7,-51.7)); #48929=CARTESIAN_POINT('',(7.05,1.7,-51.76476908614)); #48930=CARTESIAN_POINT('',(6.71,1.7,-51.7)); #48931=CARTESIAN_POINT('',(6.71,1.7,-51.7)); #48932=CARTESIAN_POINT('',(6.71,1.7,-51.73428124927)); #48933=CARTESIAN_POINT('',(6.71,1.7,-51.7)); #48934=CARTESIAN_POINT('',(6.658529411765,1.7,-51.88622226633)); #48935=CARTESIAN_POINT('Origin',(6.46,1.7,-51.73428124927)); #48936=CARTESIAN_POINT('',(6.5,1.7,-52.0933602168)); #48937=CARTESIAN_POINT('',(6.658529411765,1.7,-51.88622226633)); #48938=CARTESIAN_POINT('',(6.77,1.7,-52.3)); #48939=CARTESIAN_POINT('',(6.5,1.7,-52.0933602168)); #48940=CARTESIAN_POINT('',(6.947058823529,1.7,-52.06865112025)); #48941=CARTESIAN_POINT('',(6.77,1.7,-52.3)); #48942=CARTESIAN_POINT('Origin',(6.55,1.7,-51.76476908614)); #48943=CARTESIAN_POINT('Origin',(6.71,1.7,-51.7)); #48944=CARTESIAN_POINT('',(6.71,1.7,-51.73428124927)); #48945=CARTESIAN_POINT('',(6.71,1.7,-51.7)); #48946=CARTESIAN_POINT('Origin',(6.46,1.7,-51.73428124927)); #48947=CARTESIAN_POINT('',(6.658529411765,1.7,-51.88622226633)); #48948=CARTESIAN_POINT('Origin',(6.658529411765,1.7,-51.88622226633)); #48949=CARTESIAN_POINT('',(6.5,1.7,-52.0933602168)); #48950=CARTESIAN_POINT('Origin',(6.5,1.7,-52.0933602168)); #48951=CARTESIAN_POINT('',(6.77,1.7,-52.3)); #48952=CARTESIAN_POINT('Origin',(6.77,1.7,-52.3)); #48953=CARTESIAN_POINT('',(6.947058823529,1.7,-52.06865112025)); #48954=CARTESIAN_POINT('Origin',(6.55,1.7,-51.76476908614)); #48955=CARTESIAN_POINT('',(7.05,1.7,-51.76476908614)); #48956=CARTESIAN_POINT('Origin',(7.05,1.7,-51.76476908614)); #48957=CARTESIAN_POINT('',(7.05,1.7,-51.7)); #48958=CARTESIAN_POINT('Origin',(6.71,1.7,-51.7)); #48959=CARTESIAN_POINT('Origin',(6.375,2.5,-38.425)); #48960=CARTESIAN_POINT('',(6.375,3.,-39.575)); #48961=CARTESIAN_POINT('',(5.875,2.5,-39.575)); #48962=CARTESIAN_POINT('Origin',(6.375,2.5,-39.575)); #48963=CARTESIAN_POINT('',(5.875,2.5,-38.425)); #48964=CARTESIAN_POINT('',(5.875,2.5,-39.575)); #48965=CARTESIAN_POINT('',(6.375,3.,-38.425)); #48966=CARTESIAN_POINT('Origin',(6.375,2.5,-38.425)); #48967=CARTESIAN_POINT('',(6.375,3.,-38.425)); #48968=CARTESIAN_POINT('Origin',(7.,2.5,-38.425)); #48969=CARTESIAN_POINT('',(8.125,2.5,-38.425)); #48970=CARTESIAN_POINT('',(7.625,3.,-38.425)); #48971=CARTESIAN_POINT('Origin',(7.625,2.5,-38.425)); #48972=CARTESIAN_POINT('Origin',(7.,3.,-38.425)); #48973=CARTESIAN_POINT('Origin',(7.,2.5,-38.425)); #48974=CARTESIAN_POINT('Origin',(7.,2.5,-39.575)); #48975=CARTESIAN_POINT('',(7.625,3.,-39.575)); #48976=CARTESIAN_POINT('',(8.125,2.5,-39.575)); #48977=CARTESIAN_POINT('Origin',(7.625,2.5,-39.575)); #48978=CARTESIAN_POINT('Origin',(7.,2.5,-39.575)); #48979=CARTESIAN_POINT('Origin',(7.,3.,-39.575)); #48980=CARTESIAN_POINT('Origin',(7.625,2.5,-38.425)); #48981=CARTESIAN_POINT('',(8.125,2.5,-38.425)); #48982=CARTESIAN_POINT('',(7.625,3.,-39.575)); #48983=CARTESIAN_POINT('Origin',(7.,3.,-38.425)); #48984=CARTESIAN_POINT('Origin',(5.875,3.,-38.425)); #48985=CARTESIAN_POINT('',(5.875,2.1,-39.575)); #48986=CARTESIAN_POINT('',(5.875,2.1,-38.425)); #48987=CARTESIAN_POINT('',(5.875,2.1,-38.425)); #48988=CARTESIAN_POINT('',(5.875,3.,-38.425)); #48989=CARTESIAN_POINT('',(5.875,3.,-39.575)); #48990=CARTESIAN_POINT('Origin',(7.,3.,-39.575)); #48991=CARTESIAN_POINT('',(8.125,2.1,-39.575)); #48992=CARTESIAN_POINT('',(8.125,3.,-39.575)); #48993=CARTESIAN_POINT('Origin',(7.,2.1,-39.575)); #48994=CARTESIAN_POINT('Origin',(8.125,3.,-38.425)); #48995=CARTESIAN_POINT('',(8.125,2.1,-38.425)); #48996=CARTESIAN_POINT('',(8.125,2.1,-38.425)); #48997=CARTESIAN_POINT('',(8.125,3.,-38.425)); #48998=CARTESIAN_POINT('Origin',(7.,3.,-38.425)); #48999=CARTESIAN_POINT('Origin',(7.,2.1,-38.425)); #49000=CARTESIAN_POINT('Origin',(7.,0.5,-39.)); #49001=CARTESIAN_POINT('',(8.6,0.5,-41.125)); #49002=CARTESIAN_POINT('',(5.4,0.5,-41.125)); #49003=CARTESIAN_POINT('',(8.6,0.5,-41.125)); #49004=CARTESIAN_POINT('',(8.6,0.5,-36.875)); #49005=CARTESIAN_POINT('',(8.6,0.5,-36.875)); #49006=CARTESIAN_POINT('',(5.4,0.5,-36.875)); #49007=CARTESIAN_POINT('',(8.6,0.5,-36.875)); #49008=CARTESIAN_POINT('',(5.4,0.5,-36.875)); #49009=CARTESIAN_POINT('Origin',(8.6,2.1,-36.875)); #49010=CARTESIAN_POINT('',(8.6,2.1,-36.875)); #49011=CARTESIAN_POINT('',(8.6,2.1,-36.875)); #49012=CARTESIAN_POINT('',(8.6,2.1,-41.125)); #49013=CARTESIAN_POINT('',(8.6,2.1,-41.125)); #49014=CARTESIAN_POINT('',(8.6,2.1,-36.875)); #49015=CARTESIAN_POINT('Origin',(8.6,2.1,-36.875)); #49016=CARTESIAN_POINT('',(5.4,2.1,-36.875)); #49017=CARTESIAN_POINT('',(5.4,2.1,-36.875)); #49018=CARTESIAN_POINT('',(8.6,2.1,-36.875)); #49019=CARTESIAN_POINT('Origin',(5.4,2.1,-36.875)); #49020=CARTESIAN_POINT('',(5.4,2.1,-41.125)); #49021=CARTESIAN_POINT('',(5.4,2.1,-41.125)); #49022=CARTESIAN_POINT('',(5.4,2.1,-36.875)); #49023=CARTESIAN_POINT('Origin',(8.6,2.1,-41.125)); #49024=CARTESIAN_POINT('',(8.6,2.1,-41.125)); #49025=CARTESIAN_POINT('Origin',(7.,2.1,-39.)); #49026=CARTESIAN_POINT('Origin',(10.5,0.5,-25.)); #49027=CARTESIAN_POINT('',(14.,0.5,-21.5)); #49028=CARTESIAN_POINT('',(14.,0.5,-28.5)); #49029=CARTESIAN_POINT('',(14.,0.5,-21.5)); #49030=CARTESIAN_POINT('',(7.,0.5,-21.5)); #49031=CARTESIAN_POINT('',(7.,0.5,-21.5)); #49032=CARTESIAN_POINT('',(7.,0.5,-28.5)); #49033=CARTESIAN_POINT('',(7.,0.5,-21.5)); #49034=CARTESIAN_POINT('',(7.,0.5,-28.5)); #49035=CARTESIAN_POINT('Origin',(10.5,1.4,-25.)); #49036=CARTESIAN_POINT('',(7.,1.4,-21.5)); #49037=CARTESIAN_POINT('',(14.,1.4,-21.5)); #49038=CARTESIAN_POINT('',(7.,1.4,-21.5)); #49039=CARTESIAN_POINT('',(14.,1.4,-28.5)); #49040=CARTESIAN_POINT('',(14.,1.4,-21.5)); #49041=CARTESIAN_POINT('',(7.,1.4,-28.5)); #49042=CARTESIAN_POINT('',(7.,1.4,-28.5)); #49043=CARTESIAN_POINT('',(7.,1.4,-21.5)); #49044=CARTESIAN_POINT('Origin',(7.,1.4,-21.5)); #49045=CARTESIAN_POINT('',(14.,1.4,-21.5)); #49046=CARTESIAN_POINT('',(7.,1.4,-21.5)); #49047=CARTESIAN_POINT('Origin',(7.,1.4,-21.5)); #49048=CARTESIAN_POINT('',(7.,1.4,-28.5)); #49049=CARTESIAN_POINT('Origin',(7.,1.4,-28.5)); #49050=CARTESIAN_POINT('',(14.,1.4,-28.5)); #49051=CARTESIAN_POINT('Origin',(14.,1.4,-21.5)); #49052=CARTESIAN_POINT('Origin',(4.8,1.1,-46.2)); #49053=CARTESIAN_POINT('',(4.3,1.1,-45.8)); #49054=CARTESIAN_POINT('',(5.3,1.1,-45.8)); #49055=CARTESIAN_POINT('',(4.3,1.1,-45.8)); #49056=CARTESIAN_POINT('',(5.3,1.1,-46.6)); #49057=CARTESIAN_POINT('',(5.3,1.1,-45.8)); #49058=CARTESIAN_POINT('',(4.3,1.1,-46.6)); #49059=CARTESIAN_POINT('',(4.3,1.1,-46.6)); #49060=CARTESIAN_POINT('',(4.3,1.1,-45.8)); #49061=CARTESIAN_POINT('Origin',(4.3,1.1,-45.8)); #49062=CARTESIAN_POINT('',(4.3,0.8,-46.6)); #49063=CARTESIAN_POINT('',(4.3,1.1,-46.6)); #49064=CARTESIAN_POINT('',(4.3,0.8,-45.8)); #49065=CARTESIAN_POINT('',(4.3,0.8,-45.8)); #49066=CARTESIAN_POINT('',(4.3,1.1,-45.8)); #49067=CARTESIAN_POINT('Origin',(5.3,1.1,-45.8)); #49068=CARTESIAN_POINT('',(5.3,0.8,-45.8)); #49069=CARTESIAN_POINT('',(5.3,1.1,-45.8)); #49070=CARTESIAN_POINT('',(5.3,0.8,-46.6)); #49071=CARTESIAN_POINT('',(5.3,0.8,-45.8)); #49072=CARTESIAN_POINT('',(5.3,1.1,-46.6)); #49073=CARTESIAN_POINT('Origin',(4.8,0.5,-46.2)); #49074=CARTESIAN_POINT('',(5.6,0.5,-45.8)); #49075=CARTESIAN_POINT('',(5.6,0.5,-46.6)); #49076=CARTESIAN_POINT('',(5.6,0.5,-45.8)); #49077=CARTESIAN_POINT('',(4.,0.5,-45.8)); #49078=CARTESIAN_POINT('',(4.,0.5,-45.8)); #49079=CARTESIAN_POINT('',(4.,0.5,-46.6)); #49080=CARTESIAN_POINT('',(4.,0.5,-45.8)); #49081=CARTESIAN_POINT('',(4.,0.5,-46.6)); #49082=CARTESIAN_POINT('Origin',(4.,0.8,-45.8)); #49083=CARTESIAN_POINT('',(4.,0.8,-45.8)); #49084=CARTESIAN_POINT('',(4.,0.8,-45.8)); #49085=CARTESIAN_POINT('',(5.6,0.8,-45.8)); #49086=CARTESIAN_POINT('',(5.6,0.8,-45.8)); #49087=CARTESIAN_POINT('',(4.,0.8,-45.8)); #49088=CARTESIAN_POINT('',(4.,0.8,-45.8)); #49089=CARTESIAN_POINT('Origin',(4.,0.8,-45.8)); #49090=CARTESIAN_POINT('',(4.,0.8,-46.6)); #49091=CARTESIAN_POINT('',(4.,0.8,-46.6)); #49092=CARTESIAN_POINT('',(4.,0.8,-45.8)); #49093=CARTESIAN_POINT('Origin',(4.,0.8,-46.6)); #49094=CARTESIAN_POINT('',(5.6,0.8,-46.6)); #49095=CARTESIAN_POINT('',(5.6,0.8,-46.6)); #49096=CARTESIAN_POINT('',(4.,0.8,-46.6)); #49097=CARTESIAN_POINT('',(4.,0.8,-46.6)); #49098=CARTESIAN_POINT('Origin',(5.6,0.8,-45.8)); #49099=CARTESIAN_POINT('',(5.6,0.8,-45.8)); #49100=CARTESIAN_POINT('Origin',(4.8,0.8,-46.2)); #49101=CARTESIAN_POINT('Origin',(4.8,0.8,-46.2)); #49102=CARTESIAN_POINT('Origin',(16.05,0.65,-46.2)); #49103=CARTESIAN_POINT('',(16.05,0.5,-46.2)); #49104=CARTESIAN_POINT('',(16.95,0.5,-46.2)); #49105=CARTESIAN_POINT('',(16.05,0.5,-46.2)); #49106=CARTESIAN_POINT('',(16.05,0.65,-46.2)); #49107=CARTESIAN_POINT('',(16.05,0.65,-46.2)); #49108=CARTESIAN_POINT('',(16.95,0.65,-46.2)); #49109=CARTESIAN_POINT('',(16.05,0.65,-46.2)); #49110=CARTESIAN_POINT('',(16.95,0.65,-46.2)); #49111=CARTESIAN_POINT('Origin',(16.95,0.65,-42.6)); #49112=CARTESIAN_POINT('',(16.95,0.5,-45.75)); #49113=CARTESIAN_POINT('',(16.95,0.65,-45.75)); #49114=CARTESIAN_POINT('',(16.95,1.45,-45.75)); #49115=CARTESIAN_POINT('',(16.95,0.5,-42.6)); #49116=CARTESIAN_POINT('',(16.95,0.65,-42.6)); #49117=CARTESIAN_POINT('Origin',(16.05,0.65,-42.6)); #49118=CARTESIAN_POINT('',(16.05,0.65,-45.75)); #49119=CARTESIAN_POINT('',(16.05,0.5,-45.75)); #49120=CARTESIAN_POINT('',(16.05,1.45,-45.75)); #49121=CARTESIAN_POINT('',(16.05,0.65,-42.6)); #49122=CARTESIAN_POINT('',(16.05,0.5,-42.6)); #49123=CARTESIAN_POINT('Origin',(16.5,0.65,-44.4)); #49124=CARTESIAN_POINT('',(17.325,0.65,-45.75)); #49125=CARTESIAN_POINT('Origin',(16.05,0.65,-42.6)); #49126=CARTESIAN_POINT('',(16.05,0.5,-43.05)); #49127=CARTESIAN_POINT('',(16.05,0.65,-43.05)); #49128=CARTESIAN_POINT('',(16.05,1.45,-43.05)); #49129=CARTESIAN_POINT('',(16.05,0.5,-42.6)); #49130=CARTESIAN_POINT('',(16.05,0.5,-42.6)); #49131=CARTESIAN_POINT('',(16.05,0.65,-42.6)); #49132=CARTESIAN_POINT('',(16.05,0.65,-42.6)); #49133=CARTESIAN_POINT('',(16.05,0.65,-42.6)); #49134=CARTESIAN_POINT('Origin',(16.95,0.65,-42.6)); #49135=CARTESIAN_POINT('',(16.95,0.65,-43.05)); #49136=CARTESIAN_POINT('',(16.95,0.5,-43.05)); #49137=CARTESIAN_POINT('',(16.95,1.45,-43.05)); #49138=CARTESIAN_POINT('',(16.95,0.65,-42.6)); #49139=CARTESIAN_POINT('',(16.95,0.65,-42.6)); #49140=CARTESIAN_POINT('',(16.95,0.5,-42.6)); #49141=CARTESIAN_POINT('',(16.95,0.65,-42.6)); #49142=CARTESIAN_POINT('',(16.95,0.5,-42.6)); #49143=CARTESIAN_POINT('Origin',(16.5,0.65,-44.4)); #49144=CARTESIAN_POINT('',(17.325,0.65,-43.05)); #49145=CARTESIAN_POINT('',(16.05,0.65,-42.6)); #49146=CARTESIAN_POINT('Origin',(16.05,0.65,-42.6)); #49147=CARTESIAN_POINT('',(16.05,0.5,-42.6)); #49148=CARTESIAN_POINT('Origin',(16.5,0.5,-44.4)); #49149=CARTESIAN_POINT('',(17.325,0.5,-43.05)); #49150=CARTESIAN_POINT('',(17.325,0.5,-43.05)); #49151=CARTESIAN_POINT('',(15.675,0.5,-43.05)); #49152=CARTESIAN_POINT('',(17.325,0.5,-43.05)); #49153=CARTESIAN_POINT('',(15.675,0.5,-45.75)); #49154=CARTESIAN_POINT('',(15.675,0.5,-43.05)); #49155=CARTESIAN_POINT('',(17.325,0.5,-45.75)); #49156=CARTESIAN_POINT('',(17.325,0.5,-45.75)); #49157=CARTESIAN_POINT('',(17.325,0.5,-45.75)); #49158=CARTESIAN_POINT('',(17.325,0.5,-43.05)); #49159=CARTESIAN_POINT('Origin',(16.5,1.45,-44.4)); #49160=CARTESIAN_POINT('',(17.325,1.45,-43.05)); #49161=CARTESIAN_POINT('',(17.325,1.45,-45.75)); #49162=CARTESIAN_POINT('',(17.325,1.45,-43.05)); #49163=CARTESIAN_POINT('',(15.675,1.45,-45.75)); #49164=CARTESIAN_POINT('',(17.325,1.45,-45.75)); #49165=CARTESIAN_POINT('',(15.675,1.45,-43.05)); #49166=CARTESIAN_POINT('',(15.675,1.45,-43.05)); #49167=CARTESIAN_POINT('',(17.325,1.45,-43.05)); #49168=CARTESIAN_POINT('Origin',(17.325,1.45,-43.05)); #49169=CARTESIAN_POINT('',(17.325,1.45,-45.75)); #49170=CARTESIAN_POINT('',(17.325,1.45,-43.05)); #49171=CARTESIAN_POINT('Origin',(17.325,1.45,-43.05)); #49172=CARTESIAN_POINT('',(15.675,1.45,-43.05)); #49173=CARTESIAN_POINT('Origin',(15.675,1.45,-43.05)); #49174=CARTESIAN_POINT('',(15.675,1.45,-45.75)); #49175=CARTESIAN_POINT('Origin',(17.325,1.45,-45.75)); #49176=CARTESIAN_POINT('Origin',(16.5,0.5,-40.1)); #49177=CARTESIAN_POINT('',(15.5,0.5,-38.85)); #49178=CARTESIAN_POINT('',(17.5,0.5,-38.85)); #49179=CARTESIAN_POINT('',(15.5,0.5,-38.85)); #49180=CARTESIAN_POINT('',(15.5,0.5,-41.35)); #49181=CARTESIAN_POINT('',(15.5,0.5,-41.35)); #49182=CARTESIAN_POINT('',(17.5,0.5,-41.35)); #49183=CARTESIAN_POINT('',(15.5,0.5,-41.35)); #49184=CARTESIAN_POINT('',(17.5,0.5,-41.35)); #49185=CARTESIAN_POINT('Origin',(16.5,1.7,-40.1)); #49186=CARTESIAN_POINT('',(15.5,1.7,-41.35)); #49187=CARTESIAN_POINT('',(15.5,1.7,-38.85)); #49188=CARTESIAN_POINT('',(15.5,1.7,-41.35)); #49189=CARTESIAN_POINT('',(17.5,1.7,-38.85)); #49190=CARTESIAN_POINT('',(15.5,1.7,-38.85)); #49191=CARTESIAN_POINT('',(17.5,1.7,-41.35)); #49192=CARTESIAN_POINT('',(17.5,1.7,-41.35)); #49193=CARTESIAN_POINT('',(15.5,1.7,-41.35)); #49194=CARTESIAN_POINT('Origin',(15.5,1.7,-41.35)); #49195=CARTESIAN_POINT('',(15.5,1.7,-38.85)); #49196=CARTESIAN_POINT('',(15.5,1.7,-41.35)); #49197=CARTESIAN_POINT('Origin',(15.5,1.7,-41.35)); #49198=CARTESIAN_POINT('',(17.5,1.7,-41.35)); #49199=CARTESIAN_POINT('Origin',(17.5,1.7,-41.35)); #49200=CARTESIAN_POINT('',(17.5,1.7,-38.85)); #49201=CARTESIAN_POINT('Origin',(15.5,1.7,-38.85)); #49202=CARTESIAN_POINT('Origin',(13.4,0.5,-42.6)); #49203=CARTESIAN_POINT('',(14.4,0.5,-41.975)); #49204=CARTESIAN_POINT('',(14.4,0.5,-43.225)); #49205=CARTESIAN_POINT('',(14.4,0.5,-41.975)); #49206=CARTESIAN_POINT('',(12.4,0.5,-41.975)); #49207=CARTESIAN_POINT('',(12.4,0.5,-41.975)); #49208=CARTESIAN_POINT('',(12.4,0.5,-43.225)); #49209=CARTESIAN_POINT('',(12.4,0.5,-41.975)); #49210=CARTESIAN_POINT('',(12.4,0.5,-43.225)); #49211=CARTESIAN_POINT('Origin',(13.4,1.75,-42.6)); #49212=CARTESIAN_POINT('',(12.4,1.75,-41.975)); #49213=CARTESIAN_POINT('',(14.4,1.75,-41.975)); #49214=CARTESIAN_POINT('',(12.4,1.75,-41.975)); #49215=CARTESIAN_POINT('',(14.4,1.75,-43.225)); #49216=CARTESIAN_POINT('',(14.4,1.75,-41.975)); #49217=CARTESIAN_POINT('',(12.4,1.75,-43.225)); #49218=CARTESIAN_POINT('',(12.4,1.75,-43.225)); #49219=CARTESIAN_POINT('',(12.4,1.75,-41.975)); #49220=CARTESIAN_POINT('Origin',(12.4,1.75,-41.975)); #49221=CARTESIAN_POINT('',(14.4,1.75,-41.975)); #49222=CARTESIAN_POINT('',(12.4,1.75,-41.975)); #49223=CARTESIAN_POINT('Origin',(12.4,1.75,-41.975)); #49224=CARTESIAN_POINT('',(12.4,1.75,-43.225)); #49225=CARTESIAN_POINT('Origin',(12.4,1.75,-43.225)); #49226=CARTESIAN_POINT('',(14.4,1.75,-43.225)); #49227=CARTESIAN_POINT('Origin',(14.4,1.75,-41.975)); #49228=CARTESIAN_POINT('Origin',(13.4,0.5,-37.6)); #49229=CARTESIAN_POINT('',(14.4,0.5,-36.975)); #49230=CARTESIAN_POINT('',(14.4,0.5,-38.225)); #49231=CARTESIAN_POINT('',(14.4,0.5,-36.975)); #49232=CARTESIAN_POINT('',(12.4,0.5,-36.975)); #49233=CARTESIAN_POINT('',(12.4,0.5,-36.975)); #49234=CARTESIAN_POINT('',(12.4,0.5,-38.225)); #49235=CARTESIAN_POINT('',(12.4,0.5,-36.975)); #49236=CARTESIAN_POINT('',(12.4,0.5,-38.225)); #49237=CARTESIAN_POINT('Origin',(13.4,1.75,-37.6)); #49238=CARTESIAN_POINT('',(12.4,1.75,-36.975)); #49239=CARTESIAN_POINT('',(14.4,1.75,-36.975)); #49240=CARTESIAN_POINT('',(12.4,1.75,-36.975)); #49241=CARTESIAN_POINT('',(14.4,1.75,-38.225)); #49242=CARTESIAN_POINT('',(14.4,1.75,-36.975)); #49243=CARTESIAN_POINT('',(12.4,1.75,-38.225)); #49244=CARTESIAN_POINT('',(12.4,1.75,-38.225)); #49245=CARTESIAN_POINT('',(12.4,1.75,-36.975)); #49246=CARTESIAN_POINT('Origin',(12.4,1.75,-36.975)); #49247=CARTESIAN_POINT('',(14.4,1.75,-36.975)); #49248=CARTESIAN_POINT('',(12.4,1.75,-36.975)); #49249=CARTESIAN_POINT('Origin',(12.4,1.75,-36.975)); #49250=CARTESIAN_POINT('',(12.4,1.75,-38.225)); #49251=CARTESIAN_POINT('Origin',(12.4,1.75,-38.225)); #49252=CARTESIAN_POINT('',(14.4,1.75,-38.225)); #49253=CARTESIAN_POINT('Origin',(14.4,1.75,-36.975)); #49254=CARTESIAN_POINT('Origin',(13.4,0.5,-40.1)); #49255=CARTESIAN_POINT('',(14.65,0.5,-38.85)); #49256=CARTESIAN_POINT('',(14.65,0.5,-41.35)); #49257=CARTESIAN_POINT('',(14.65,0.5,-38.85)); #49258=CARTESIAN_POINT('',(12.15,0.5,-38.85)); #49259=CARTESIAN_POINT('',(12.15,0.5,-38.85)); #49260=CARTESIAN_POINT('',(12.15,0.5,-41.35)); #49261=CARTESIAN_POINT('',(12.15,0.5,-38.85)); #49262=CARTESIAN_POINT('',(12.15,0.5,-41.35)); #49263=CARTESIAN_POINT('Origin',(13.4,1.25,-40.1)); #49264=CARTESIAN_POINT('',(12.15,1.25,-38.85)); #49265=CARTESIAN_POINT('',(14.65,1.25,-38.85)); #49266=CARTESIAN_POINT('',(12.15,1.25,-38.85)); #49267=CARTESIAN_POINT('',(14.65,1.25,-41.35)); #49268=CARTESIAN_POINT('',(14.65,1.25,-38.85)); #49269=CARTESIAN_POINT('',(12.15,1.25,-41.35)); #49270=CARTESIAN_POINT('',(12.15,1.25,-41.35)); #49271=CARTESIAN_POINT('',(12.15,1.25,-38.85)); #49272=CARTESIAN_POINT('Origin',(12.15,1.25,-38.85)); #49273=CARTESIAN_POINT('',(14.65,1.25,-38.85)); #49274=CARTESIAN_POINT('',(12.15,1.25,-38.85)); #49275=CARTESIAN_POINT('Origin',(12.15,1.25,-38.85)); #49276=CARTESIAN_POINT('',(12.15,1.25,-41.35)); #49277=CARTESIAN_POINT('Origin',(12.15,1.25,-41.35)); #49278=CARTESIAN_POINT('',(14.65,1.25,-41.35)); #49279=CARTESIAN_POINT('Origin',(14.65,1.25,-38.85)); #49280=CARTESIAN_POINT('Origin',(16.9,0.5,-32.7)); #49281=CARTESIAN_POINT('',(17.7,0.5,-32.3)); #49282=CARTESIAN_POINT('',(17.7,0.5,-33.1)); #49283=CARTESIAN_POINT('',(17.7,0.5,-32.3)); #49284=CARTESIAN_POINT('',(16.1,0.5,-32.3)); #49285=CARTESIAN_POINT('',(16.1,0.5,-32.3)); #49286=CARTESIAN_POINT('',(16.1,0.5,-33.1)); #49287=CARTESIAN_POINT('',(16.1,0.5,-32.3)); #49288=CARTESIAN_POINT('',(16.1,0.5,-33.1)); #49289=CARTESIAN_POINT('Origin',(16.9,1.3,-32.7)); #49290=CARTESIAN_POINT('',(16.1,1.3,-32.3)); #49291=CARTESIAN_POINT('',(17.7,1.3,-32.3)); #49292=CARTESIAN_POINT('',(16.1,1.3,-32.3)); #49293=CARTESIAN_POINT('',(17.7,1.3,-33.1)); #49294=CARTESIAN_POINT('',(17.7,1.3,-32.3)); #49295=CARTESIAN_POINT('',(16.1,1.3,-33.1)); #49296=CARTESIAN_POINT('',(16.1,1.3,-33.1)); #49297=CARTESIAN_POINT('',(16.1,1.3,-32.3)); #49298=CARTESIAN_POINT('Origin',(16.1,1.3,-32.3)); #49299=CARTESIAN_POINT('',(17.7,1.3,-32.3)); #49300=CARTESIAN_POINT('',(16.1,1.3,-32.3)); #49301=CARTESIAN_POINT('Origin',(16.1,1.3,-32.3)); #49302=CARTESIAN_POINT('',(16.1,1.3,-33.1)); #49303=CARTESIAN_POINT('Origin',(16.1,1.3,-33.1)); #49304=CARTESIAN_POINT('',(17.7,1.3,-33.1)); #49305=CARTESIAN_POINT('Origin',(17.7,1.3,-32.3)); #49306=CARTESIAN_POINT('Origin',(8.2,0.5,-16.45)); #49307=CARTESIAN_POINT('',(9.8,0.5,-15.2)); #49308=CARTESIAN_POINT('',(9.8,0.5,-17.7)); #49309=CARTESIAN_POINT('',(9.8,0.5,-15.2)); #49310=CARTESIAN_POINT('',(6.6,0.5,-15.2)); #49311=CARTESIAN_POINT('',(6.6,0.5,-15.2)); #49312=CARTESIAN_POINT('',(6.6,0.5,-17.7)); #49313=CARTESIAN_POINT('',(6.6,0.5,-15.2)); #49314=CARTESIAN_POINT('',(6.6,0.5,-17.7)); #49315=CARTESIAN_POINT('Origin',(8.2,1.1,-16.45)); #49316=CARTESIAN_POINT('',(6.6,1.1,-15.2)); #49317=CARTESIAN_POINT('',(9.8,1.1,-15.2)); #49318=CARTESIAN_POINT('',(6.6,1.1,-15.2)); #49319=CARTESIAN_POINT('',(9.8,1.1,-17.7)); #49320=CARTESIAN_POINT('',(9.8,1.1,-15.2)); #49321=CARTESIAN_POINT('',(6.6,1.1,-17.7)); #49322=CARTESIAN_POINT('',(6.6,1.1,-17.7)); #49323=CARTESIAN_POINT('',(6.6,1.1,-15.2)); #49324=CARTESIAN_POINT('Origin',(6.6,1.1,-15.2)); #49325=CARTESIAN_POINT('',(9.8,1.1,-15.2)); #49326=CARTESIAN_POINT('',(6.6,1.1,-15.2)); #49327=CARTESIAN_POINT('Origin',(6.6,1.1,-15.2)); #49328=CARTESIAN_POINT('',(6.6,1.1,-17.7)); #49329=CARTESIAN_POINT('Origin',(6.6,1.1,-17.7)); #49330=CARTESIAN_POINT('',(9.8,1.1,-17.7)); #49331=CARTESIAN_POINT('Origin',(9.8,1.1,-15.2)); #49332=CARTESIAN_POINT('Origin',(6.7,0.5,-31.9)); #49333=CARTESIAN_POINT('',(7.7,0.5,-30.4)); #49334=CARTESIAN_POINT('',(7.7,0.5,-33.4)); #49335=CARTESIAN_POINT('',(7.7,0.5,-30.4)); #49336=CARTESIAN_POINT('',(5.7,0.5,-30.4)); #49337=CARTESIAN_POINT('',(5.7,0.5,-30.4)); #49338=CARTESIAN_POINT('',(5.7,0.5,-33.4)); #49339=CARTESIAN_POINT('',(5.7,0.5,-30.4)); #49340=CARTESIAN_POINT('',(5.7,0.5,-33.4)); #49341=CARTESIAN_POINT('Origin',(6.7,1.1,-31.9)); #49342=CARTESIAN_POINT('',(5.7,1.1,-30.4)); #49343=CARTESIAN_POINT('',(7.7,1.1,-30.4)); #49344=CARTESIAN_POINT('',(5.7,1.1,-30.4)); #49345=CARTESIAN_POINT('',(7.7,1.1,-33.4)); #49346=CARTESIAN_POINT('',(7.7,1.1,-30.4)); #49347=CARTESIAN_POINT('',(5.7,1.1,-33.4)); #49348=CARTESIAN_POINT('',(5.7,1.1,-33.4)); #49349=CARTESIAN_POINT('',(5.7,1.1,-30.4)); #49350=CARTESIAN_POINT('Origin',(5.7,1.1,-30.4)); #49351=CARTESIAN_POINT('',(7.7,1.1,-30.4)); #49352=CARTESIAN_POINT('',(5.7,1.1,-30.4)); #49353=CARTESIAN_POINT('Origin',(5.7,1.1,-30.4)); #49354=CARTESIAN_POINT('',(5.7,1.1,-33.4)); #49355=CARTESIAN_POINT('Origin',(5.7,1.1,-33.4)); #49356=CARTESIAN_POINT('',(7.7,1.1,-33.4)); #49357=CARTESIAN_POINT('Origin',(7.7,1.1,-30.4)); #49358=CARTESIAN_POINT('',(0.,0.,0.)); #49359=CARTESIAN_POINT('',(0.,0.,0.)); #49360=CARTESIAN_POINT('',(0.,0.,0.)); #49361=CARTESIAN_POINT('',(0.,0.,0.)); #49362=CARTESIAN_POINT('Origin',(-6.55,0.,1.54)); #49363=CARTESIAN_POINT('',(-6.55,6.57,1.54)); #49364=CARTESIAN_POINT('',(-6.25,6.57,1.54)); #49365=CARTESIAN_POINT('',(-6.55,6.57,1.54)); #49366=CARTESIAN_POINT('',(-6.55,7.01,1.54)); #49367=CARTESIAN_POINT('',(-6.55,7.01,1.54)); #49368=CARTESIAN_POINT('',(6.55,7.01,1.54)); #49369=CARTESIAN_POINT('',(6.55,7.01,1.54)); #49370=CARTESIAN_POINT('',(6.55,6.57,1.54)); #49371=CARTESIAN_POINT('',(6.55,6.57,1.54)); #49372=CARTESIAN_POINT('',(6.25,6.57,1.54)); #49373=CARTESIAN_POINT('',(6.55,6.57,1.54)); #49374=CARTESIAN_POINT('',(6.25,6.71,1.54)); #49375=CARTESIAN_POINT('',(6.25,6.71,1.54)); #49376=CARTESIAN_POINT('',(-6.25,6.71,1.54)); #49377=CARTESIAN_POINT('',(-6.25,6.71,1.54)); #49378=CARTESIAN_POINT('',(-6.25,6.57,1.54)); #49379=CARTESIAN_POINT('Origin',(6.15,6.57,0.)); #49380=CARTESIAN_POINT('',(-6.15,6.57,1.53)); #49381=CARTESIAN_POINT('',(-6.15,6.57,5.1)); #49382=CARTESIAN_POINT('',(-6.15,6.57,1.53)); #49383=CARTESIAN_POINT('',(6.15,6.57,5.1)); #49384=CARTESIAN_POINT('',(6.15,6.57,5.1)); #49385=CARTESIAN_POINT('',(6.15,6.57,1.53)); #49386=CARTESIAN_POINT('',(6.15,6.57,1.53)); #49387=CARTESIAN_POINT('',(6.25,6.57,1.53)); #49388=CARTESIAN_POINT('',(6.15,6.57,1.53)); #49389=CARTESIAN_POINT('',(6.25,6.57,1.53)); #49390=CARTESIAN_POINT('',(6.55,6.57,0.)); #49391=CARTESIAN_POINT('',(6.55,6.57,0.)); #49392=CARTESIAN_POINT('',(-6.55,6.57,0.)); #49393=CARTESIAN_POINT('',(6.55,6.57,0.)); #49394=CARTESIAN_POINT('',(-6.55,6.57,1.54)); #49395=CARTESIAN_POINT('',(-6.25,6.57,1.53)); #49396=CARTESIAN_POINT('',(-6.25,6.57,1.53)); #49397=CARTESIAN_POINT('',(-6.15,6.57,1.53)); #49398=CARTESIAN_POINT('',(1.05,6.57,2.96)); #49399=CARTESIAN_POINT('',(4.75,6.57,2.96)); #49400=CARTESIAN_POINT('',(1.05,6.57,2.96)); #49401=CARTESIAN_POINT('',(1.05,6.57,2.36)); #49402=CARTESIAN_POINT('',(1.05,6.57,2.36)); #49403=CARTESIAN_POINT('',(4.75,6.57,2.36)); #49404=CARTESIAN_POINT('',(4.75,6.57,2.36)); #49405=CARTESIAN_POINT('',(4.75,6.57,2.96)); #49406=CARTESIAN_POINT('',(-4.75,6.57,2.36)); #49407=CARTESIAN_POINT('',(-4.75,6.57,2.96)); #49408=CARTESIAN_POINT('',(-4.75,6.57,2.36)); #49409=CARTESIAN_POINT('',(-1.05,6.57,2.36)); #49410=CARTESIAN_POINT('',(-1.05,6.57,2.36)); #49411=CARTESIAN_POINT('',(-1.05,6.57,2.96)); #49412=CARTESIAN_POINT('',(-1.05,6.57,2.96)); #49413=CARTESIAN_POINT('',(-4.75,6.57,2.96)); #49414=CARTESIAN_POINT('Origin',(-4.75,6.57,2.96)); #49415=CARTESIAN_POINT('',(-4.75,6.72,2.96)); #49416=CARTESIAN_POINT('',(-4.75,6.57,2.96)); #49417=CARTESIAN_POINT('',(-1.05,6.72,2.96)); #49418=CARTESIAN_POINT('',(-1.05,6.57,2.96)); #49419=CARTESIAN_POINT('',(-4.75,6.72,2.96)); #49420=CARTESIAN_POINT('Origin',(-2.9,6.795,2.81)); #49421=CARTESIAN_POINT('',(-4.75,6.87,2.66)); #49422=CARTESIAN_POINT('',(-1.05,6.87,2.66)); #49423=CARTESIAN_POINT('',(-4.75,6.87,2.66)); #49424=CARTESIAN_POINT('',(-4.75,6.72,2.96)); #49425=CARTESIAN_POINT('',(-1.05,6.87,2.66)); #49426=CARTESIAN_POINT('Origin',(-1.05,6.57,2.96)); #49427=CARTESIAN_POINT('',(-1.05,6.87,2.36)); #49428=CARTESIAN_POINT('',(-1.05,6.57,2.36)); #49429=CARTESIAN_POINT('',(-1.05,6.87,2.66)); #49430=CARTESIAN_POINT('Origin',(0.,6.87,0.)); #49431=CARTESIAN_POINT('',(-4.75,6.87,2.36)); #49432=CARTESIAN_POINT('',(-1.05,6.87,2.36)); #49433=CARTESIAN_POINT('',(-4.75,6.87,2.36)); #49434=CARTESIAN_POINT('Origin',(0.,6.87,0.)); #49435=CARTESIAN_POINT('',(4.75,6.87,2.66)); #49436=CARTESIAN_POINT('',(4.75,6.87,2.36)); #49437=CARTESIAN_POINT('',(4.75,6.87,2.66)); #49438=CARTESIAN_POINT('',(1.05,6.87,2.36)); #49439=CARTESIAN_POINT('',(4.75,6.87,2.36)); #49440=CARTESIAN_POINT('',(1.05,6.87,2.66)); #49441=CARTESIAN_POINT('',(1.05,6.87,2.36)); #49442=CARTESIAN_POINT('',(1.05,6.87,2.66)); #49443=CARTESIAN_POINT('Origin',(-4.75,6.57,2.36)); #49444=CARTESIAN_POINT('',(-4.75,6.57,2.36)); #49445=CARTESIAN_POINT('Origin',(-1.05,6.57,2.36)); #49446=CARTESIAN_POINT('Origin',(2.9,6.795,2.81)); #49447=CARTESIAN_POINT('',(1.05,6.72,2.96)); #49448=CARTESIAN_POINT('',(1.05,6.72,2.96)); #49449=CARTESIAN_POINT('',(4.75,6.72,2.96)); #49450=CARTESIAN_POINT('',(1.05,6.72,2.96)); #49451=CARTESIAN_POINT('',(4.75,6.87,2.66)); #49452=CARTESIAN_POINT('Origin',(4.75,6.57,2.96)); #49453=CARTESIAN_POINT('',(4.75,6.57,2.96)); #49454=CARTESIAN_POINT('',(4.75,6.57,2.36)); #49455=CARTESIAN_POINT('Origin',(4.75,6.57,2.36)); #49456=CARTESIAN_POINT('',(1.05,6.57,2.36)); #49457=CARTESIAN_POINT('Origin',(1.05,6.57,2.36)); #49458=CARTESIAN_POINT('',(1.05,6.57,2.96)); #49459=CARTESIAN_POINT('Origin',(1.05,6.57,2.96)); #49460=CARTESIAN_POINT('Origin',(-6.15,4.92,1.53)); #49461=CARTESIAN_POINT('',(-6.15,4.92,1.53)); #49462=CARTESIAN_POINT('',(-6.25,4.92,1.53)); #49463=CARTESIAN_POINT('',(-6.15,4.92,1.53)); #49464=CARTESIAN_POINT('',(-6.15,6.57,1.53)); #49465=CARTESIAN_POINT('',(-6.25,4.92,1.53)); #49466=CARTESIAN_POINT('Origin',(-6.25,4.71,1.54)); #49467=CARTESIAN_POINT('',(-6.25,3.01,0.2)); #49468=CARTESIAN_POINT('',(-6.25,3.01,1.3)); #49469=CARTESIAN_POINT('',(-6.25,3.01,0.2)); #49470=CARTESIAN_POINT('',(-6.25,4.62,1.3)); #49471=CARTESIAN_POINT('',(-6.25,4.62,1.3)); #49472=CARTESIAN_POINT('',(-6.25,4.62,1.03)); #49473=CARTESIAN_POINT('',(-6.25,4.62,1.03)); #49474=CARTESIAN_POINT('',(-6.25,4.92,1.03)); #49475=CARTESIAN_POINT('',(-6.25,4.62,1.03)); #49476=CARTESIAN_POINT('',(-6.25,4.92,1.03)); #49477=CARTESIAN_POINT('',(-6.25,6.71,14.81)); #49478=CARTESIAN_POINT('',(-6.25,6.71,1.54)); #49479=CARTESIAN_POINT('',(-6.25,1.59,14.81)); #49480=CARTESIAN_POINT('',(-6.25,1.59,14.81)); #49481=CARTESIAN_POINT('',(-6.25,1.59,11.54)); #49482=CARTESIAN_POINT('',(-6.25,1.59,14.81)); #49483=CARTESIAN_POINT('',(-6.25,1.29,11.54)); #49484=CARTESIAN_POINT('',(-6.25,1.29,11.54)); #49485=CARTESIAN_POINT('',(-6.25,1.29,5.73)); #49486=CARTESIAN_POINT('',(-6.25,1.29,5.73)); #49487=CARTESIAN_POINT('',(-6.25,-0.01824646474114,5.661437708028)); #49488=CARTESIAN_POINT('',(-6.25,1.29,5.73)); #49489=CARTESIAN_POINT('',(-6.25,-0.01824646474114,4.298562291972)); #49490=CARTESIAN_POINT('',(-6.25,-0.01824646474114,5.661437708028)); #49491=CARTESIAN_POINT('',(-6.25,1.29,4.23)); #49492=CARTESIAN_POINT('',(-6.25,1.29,4.23)); #49493=CARTESIAN_POINT('',(-6.25,1.29,0.)); #49494=CARTESIAN_POINT('',(-6.25,1.29,0.)); #49495=CARTESIAN_POINT('',(-6.25,2.81,0.)); #49496=CARTESIAN_POINT('',(-6.25,2.81,0.)); #49497=CARTESIAN_POINT('Origin',(-6.25,2.81,0.2)); #49498=CARTESIAN_POINT('',(-6.25,3.825,6.66)); #49499=CARTESIAN_POINT('',(-6.25,3.626769911504,6.833451327434)); #49500=CARTESIAN_POINT('Origin',(-6.25,3.825,6.86)); #49501=CARTESIAN_POINT('',(-6.25,2.930341340076,12.03345132743)); #49502=CARTESIAN_POINT('',(-6.25,2.930341340076,12.03345132743)); #49503=CARTESIAN_POINT('',(-6.25,3.128571428571,12.26)); #49504=CARTESIAN_POINT('Origin',(-6.25,3.128571428571,12.06)); #49505=CARTESIAN_POINT('',(-6.25,3.217177752452,12.26000000095)); #49506=CARTESIAN_POINT('',(-6.25,3.217177752452,12.26000000095)); #49507=CARTESIAN_POINT('',(-6.25,3.377185279902,12.18)); #49508=CARTESIAN_POINT('Origin',(-6.25000000001687,3.21717895926394,12.0599873637638)); #49509=CARTESIAN_POINT('',(-6.25,5.42281472002,12.18)); #49510=CARTESIAN_POINT('',(-6.25,3.377185279902,12.18)); #49511=CARTESIAN_POINT('',(-6.25,5.582822247548,12.26000000089)); #49512=CARTESIAN_POINT('Origin',(-6.25000000001636,5.5828210404374,12.059987363825)); #49513=CARTESIAN_POINT('',(-6.25,5.671428571429,12.26)); #49514=CARTESIAN_POINT('',(-6.25,5.671428571429,12.26)); #49515=CARTESIAN_POINT('',(-6.25,5.869658659924,12.03345132743)); #49516=CARTESIAN_POINT('Origin',(-6.25,5.671428571429,12.06)); #49517=CARTESIAN_POINT('',(-6.25,5.173230088496,6.833451327434)); #49518=CARTESIAN_POINT('',(-6.25,5.173230088496,6.833451327434)); #49519=CARTESIAN_POINT('',(-6.25,4.975,6.66)); #49520=CARTESIAN_POINT('Origin',(-6.25,4.975,6.86)); #49521=CARTESIAN_POINT('',(-6.25,3.825,6.66)); #49522=CARTESIAN_POINT('',(-6.25,3.12,4.57)); #49523=CARTESIAN_POINT('',(-6.25,4.32,4.57)); #49524=CARTESIAN_POINT('',(-6.25,3.12,4.57)); #49525=CARTESIAN_POINT('',(-6.25,4.32,2.36)); #49526=CARTESIAN_POINT('',(-6.25,4.32,4.57)); #49527=CARTESIAN_POINT('',(-6.25,3.12,2.36)); #49528=CARTESIAN_POINT('',(-6.25,4.32,2.36)); #49529=CARTESIAN_POINT('',(-6.25,3.12,2.36)); #49530=CARTESIAN_POINT('Origin',(-6.15,3.12,2.36)); #49531=CARTESIAN_POINT('',(-6.15,3.12,2.36)); #49532=CARTESIAN_POINT('',(-6.15,3.12,2.36)); #49533=CARTESIAN_POINT('',(-6.15,3.12,4.57)); #49534=CARTESIAN_POINT('',(-6.15,3.12,2.36)); #49535=CARTESIAN_POINT('',(-6.15,3.12,4.57)); #49536=CARTESIAN_POINT('Origin',(-6.15,3.12,4.57)); #49537=CARTESIAN_POINT('',(-6.15,4.32,4.57)); #49538=CARTESIAN_POINT('',(-6.15,3.12,4.57)); #49539=CARTESIAN_POINT('',(-6.15,4.32,4.57)); #49540=CARTESIAN_POINT('Origin',(-6.15,4.32,4.57)); #49541=CARTESIAN_POINT('',(-6.15,4.32,2.36)); #49542=CARTESIAN_POINT('',(-6.15,4.32,4.57)); #49543=CARTESIAN_POINT('',(-6.15,4.32,2.36)); #49544=CARTESIAN_POINT('Origin',(-6.15,4.32,2.36)); #49545=CARTESIAN_POINT('',(-6.15,4.32,2.36)); #49546=CARTESIAN_POINT('Origin',(-6.15,6.57,0.)); #49547=CARTESIAN_POINT('',(-6.15,3.25,0.)); #49548=CARTESIAN_POINT('',(-6.15,3.25,0.65)); #49549=CARTESIAN_POINT('',(-6.15,3.25,0.)); #49550=CARTESIAN_POINT('',(-6.15,0.4,0.)); #49551=CARTESIAN_POINT('',(-6.15,3.25,0.)); #49552=CARTESIAN_POINT('',(-6.15,0.4,5.1)); #49553=CARTESIAN_POINT('',(-6.15,0.4,0.)); #49554=CARTESIAN_POINT('',(-6.15,6.57,5.1)); #49555=CARTESIAN_POINT('',(-6.15,4.92,1.03)); #49556=CARTESIAN_POINT('',(-6.15,4.92,1.03)); #49557=CARTESIAN_POINT('',(-6.15,4.42,1.03)); #49558=CARTESIAN_POINT('',(-6.15,4.42,1.03)); #49559=CARTESIAN_POINT('',(-6.15,4.42,0.65)); #49560=CARTESIAN_POINT('',(-6.15,4.42,0.65)); #49561=CARTESIAN_POINT('',(-6.15,3.25,0.65)); #49562=CARTESIAN_POINT('Origin',(0.,0.,0.65)); #49563=CARTESIAN_POINT('',(-6.25,4.42,0.65)); #49564=CARTESIAN_POINT('',(-6.25,4.62,0.65)); #49565=CARTESIAN_POINT('',(-6.25,4.42,0.65)); #49566=CARTESIAN_POINT('',(-5.55,4.62,0.65)); #49567=CARTESIAN_POINT('',(-5.55,4.62,0.65)); #49568=CARTESIAN_POINT('',(-5.55,3.25,0.65)); #49569=CARTESIAN_POINT('',(-5.55,3.25,0.65)); #49570=CARTESIAN_POINT('',(-6.15,3.25,0.65)); #49571=CARTESIAN_POINT('',(-6.15,4.42,0.65)); #49572=CARTESIAN_POINT('Origin',(-6.25,0.,0.)); #49573=CARTESIAN_POINT('',(-6.25,4.62,0.65)); #49574=CARTESIAN_POINT('',(-6.25,4.42,1.03)); #49575=CARTESIAN_POINT('',(-6.25,4.42,0.65)); #49576=CARTESIAN_POINT('',(-6.25,4.42,1.03)); #49577=CARTESIAN_POINT('Origin',(-5.55,4.62,0.)); #49578=CARTESIAN_POINT('',(-5.55,4.62,0.1)); #49579=CARTESIAN_POINT('',(-5.55,4.62,0.1)); #49580=CARTESIAN_POINT('',(-6.26,4.62,1.3)); #49581=CARTESIAN_POINT('',(-6.26,4.62,1.3)); #49582=CARTESIAN_POINT('',(-6.55,4.62,1.3)); #49583=CARTESIAN_POINT('',(-6.55,4.62,1.3)); #49584=CARTESIAN_POINT('',(-6.55,4.62,0.1)); #49585=CARTESIAN_POINT('',(-6.55,4.62,0.1)); #49586=CARTESIAN_POINT('',(-5.55,4.62,0.1)); #49587=CARTESIAN_POINT('Origin',(-6.05,4.67,0.05)); #49588=CARTESIAN_POINT('',(-5.55,4.72,0.)); #49589=CARTESIAN_POINT('',(-6.55,4.72,0.)); #49590=CARTESIAN_POINT('',(-5.55,4.72,0.)); #49591=CARTESIAN_POINT('',(-5.55,4.62,0.1)); #49592=CARTESIAN_POINT('',(-6.55,4.72,0.)); #49593=CARTESIAN_POINT('Origin',(-6.55,0.,0.)); #49594=CARTESIAN_POINT('',(-6.55,4.515,1.124002840932)); #49595=CARTESIAN_POINT('Origin',(-6.55,4.42,1.3)); #49596=CARTESIAN_POINT('',(-6.55,4.41,0.948005681864)); #49597=CARTESIAN_POINT('Origin',(-6.55,4.61,0.948005681864)); #49598=CARTESIAN_POINT('',(-6.55,4.41,0.6)); #49599=CARTESIAN_POINT('',(-6.55,4.41,0.6)); #49600=CARTESIAN_POINT('',(-6.55,3.51,0.6)); #49601=CARTESIAN_POINT('',(-6.55,4.41,0.6)); #49602=CARTESIAN_POINT('',(-6.55,3.51,0.948005681864)); #49603=CARTESIAN_POINT('',(-6.55,3.51,0.948005681864)); #49604=CARTESIAN_POINT('',(-6.55,3.01,0.948005681864)); #49605=CARTESIAN_POINT('Origin',(-6.55,3.26,0.948005681864)); #49606=CARTESIAN_POINT('',(-6.55,3.01,0.2)); #49607=CARTESIAN_POINT('',(-6.55,3.01,0.2)); #49608=CARTESIAN_POINT('',(-6.55,2.81,0.)); #49609=CARTESIAN_POINT('Origin',(-6.55,2.81,0.2)); #49610=CARTESIAN_POINT('',(-6.55,1.29,0.)); #49611=CARTESIAN_POINT('',(-6.55,2.81,0.)); #49612=CARTESIAN_POINT('',(-6.55,1.29,4.23)); #49613=CARTESIAN_POINT('',(-6.55,1.29,0.)); #49614=CARTESIAN_POINT('',(-6.55,-0.01824646474114,4.298562291972)); #49615=CARTESIAN_POINT('',(-6.55,-0.01824646474114,4.298562291972)); #49616=CARTESIAN_POINT('',(-6.55,-0.01824646474114,5.661437708028)); #49617=CARTESIAN_POINT('',(-6.55,-0.01824646474114,5.661437708028)); #49618=CARTESIAN_POINT('',(-6.55,1.29,5.73)); #49619=CARTESIAN_POINT('',(-6.55,-0.01824646474114,5.661437708028)); #49620=CARTESIAN_POINT('',(-6.55,1.29,15.23426406871)); #49621=CARTESIAN_POINT('',(-6.55,1.29,5.73)); #49622=CARTESIAN_POINT('',(-6.55,1.59,15.23426406871)); #49623=CARTESIAN_POINT('',(-6.55,1.29,15.23426406871)); #49624=CARTESIAN_POINT('',(-6.55,1.59,14.81)); #49625=CARTESIAN_POINT('',(-6.55,1.59,15.23426406871)); #49626=CARTESIAN_POINT('',(-6.55,6.71,14.81)); #49627=CARTESIAN_POINT('',(-6.55,6.71,14.81)); #49628=CARTESIAN_POINT('',(-6.55,6.71,15.23426406871)); #49629=CARTESIAN_POINT('',(-6.55,6.71,14.81)); #49630=CARTESIAN_POINT('',(-6.55,6.71,15.26)); #49631=CARTESIAN_POINT('',(-6.55,6.71,15.23426406871)); #49632=CARTESIAN_POINT('',(-6.55,7.01,15.26)); #49633=CARTESIAN_POINT('',(-6.55,6.71,15.26)); #49634=CARTESIAN_POINT('',(-6.55,7.01,1.54)); #49635=CARTESIAN_POINT('',(-6.55,6.57,0.)); #49636=CARTESIAN_POINT('',(-6.55,5.869658659924,12.03345132743)); #49637=CARTESIAN_POINT('',(-6.55,5.671428571429,12.26)); #49638=CARTESIAN_POINT('Origin',(-6.55,5.671428571429,12.06)); #49639=CARTESIAN_POINT('',(-6.55,5.58489514727,12.2600000015729)); #49640=CARTESIAN_POINT('',(-6.55,5.671428571429,12.26)); #49641=CARTESIAN_POINT('',(-6.55,5.424893394715,12.18)); #49642=CARTESIAN_POINT('Origin',(-6.55000000000114,5.58489486535066,12.0599970676084)); #49643=CARTESIAN_POINT('',(-6.55,3.375106605389,12.18)); #49644=CARTESIAN_POINT('',(-6.55,5.424893394715,12.18)); #49645=CARTESIAN_POINT('',(-6.55,3.21510485273,12.2600000015935)); #49646=CARTESIAN_POINT('Origin',(-6.55000000000201,3.21510513469184,12.0599970675973)); #49647=CARTESIAN_POINT('',(-6.55,3.128571428571,12.26)); #49648=CARTESIAN_POINT('',(-6.55,3.21510485273,12.26000000123)); #49649=CARTESIAN_POINT('',(-6.55,2.930341340076,12.03345132743)); #49650=CARTESIAN_POINT('Origin',(-6.55,3.128571428571,12.06)); #49651=CARTESIAN_POINT('',(-6.55,3.626769911504,6.833451327434)); #49652=CARTESIAN_POINT('',(-6.55,2.930341340076,12.03345132743)); #49653=CARTESIAN_POINT('',(-6.55,3.825,6.66)); #49654=CARTESIAN_POINT('Origin',(-6.55,3.825,6.86)); #49655=CARTESIAN_POINT('',(-6.55,4.975,6.66)); #49656=CARTESIAN_POINT('',(-6.55,3.825,6.66)); #49657=CARTESIAN_POINT('',(-6.55,5.173230088496,6.833451327434)); #49658=CARTESIAN_POINT('Origin',(-6.55,4.975,6.86)); #49659=CARTESIAN_POINT('',(-6.55,5.173230088496,6.833451327434)); #49660=CARTESIAN_POINT('Origin',(-6.55,5.15,6.66)); #49661=CARTESIAN_POINT('',(-6.25,5.173230088496,6.833451327434)); #49662=CARTESIAN_POINT('',(-6.25,5.869658659924,12.03345132743)); #49663=CARTESIAN_POINT('Origin',(-6.220423643081,4.975,6.86)); #49664=CARTESIAN_POINT('',(-6.25,4.975,6.66)); #49665=CARTESIAN_POINT('Origin',(-6.55,3.65,6.66)); #49666=CARTESIAN_POINT('',(-6.25,3.825,6.66)); #49667=CARTESIAN_POINT('Origin',(-6.220423643081,3.825,6.86)); #49668=CARTESIAN_POINT('',(-6.25,3.626769911504,6.833451327434)); #49669=CARTESIAN_POINT('Origin',(-6.55,2.9,12.26)); #49670=CARTESIAN_POINT('',(-6.25,2.930341340076,12.03345132743)); #49671=CARTESIAN_POINT('Origin',(-6.220423643081,3.128571428571,12.06)); #49672=CARTESIAN_POINT('',(-6.25,3.128571428571,12.26)); #49673=CARTESIAN_POINT('Origin',(-6.55,5.9,12.26)); #49674=CARTESIAN_POINT('Ctrl Pts',(-6.25,3.217177752452,12.26)); #49675=CARTESIAN_POINT('Ctrl Pts',(-6.286338838703,3.216825300633,12.26)); #49676=CARTESIAN_POINT('Ctrl Pts',(-6.32167595178245,3.2165275545715,12.26)); #49677=CARTESIAN_POINT('Ctrl Pts',(-6.35601058845516,3.21626903174642,12.26)); #49678=CARTESIAN_POINT('Ctrl Pts',(-6.39034522512797,3.21601050892133,12.26)); #49679=CARTESIAN_POINT('Ctrl Pts',(-6.42367738539403,3.21579120933267,12.26)); #49680=CARTESIAN_POINT('Ctrl Pts',(-6.45600877329284,3.21560027170058,12.26)); #49681=CARTESIAN_POINT('Ctrl Pts',(-6.48834016119155,3.2154093340685,12.26)); #49682=CARTESIAN_POINT('Ctrl Pts',(-6.519670776723,3.215246758393,12.26)); #49683=CARTESIAN_POINT('Ctrl Pts',(-6.55,3.21510485273,12.26)); #49684=CARTESIAN_POINT('Origin',(-6.55,5.9,12.26)); #49685=CARTESIAN_POINT('Ctrl Pts',(-6.55,5.58489514727,12.26)); #49686=CARTESIAN_POINT('Ctrl Pts',(-6.519475025592,5.584752325954,12.26)); #49687=CARTESIAN_POINT('Ctrl Pts',(-6.48801390919005,5.584588922554,12.26)); #49688=CARTESIAN_POINT('Ctrl Pts',(-6.45561723737775,5.58439741476333,12.26)); #49689=CARTESIAN_POINT('Ctrl Pts',(-6.42322056556537,5.58420590697267,12.26)); #49690=CARTESIAN_POINT('Ctrl Pts',(-6.38988833834263,5.58398629479133,12.26)); #49691=CARTESIAN_POINT('Ctrl Pts',(-6.35561894796199,5.58372801785492,12.26)); #49692=CARTESIAN_POINT('Ctrl Pts',(-6.32134955758145,5.5834697409185,12.26)); #49693=CARTESIAN_POINT('Ctrl Pts',(-6.286143004043,5.583172799227,12.26)); #49694=CARTESIAN_POINT('Ctrl Pts',(-6.25,5.582822247548,12.26)); #49695=CARTESIAN_POINT('',(-6.25,5.671428571429,12.26)); #49696=CARTESIAN_POINT('Ctrl Pts',(-6.227442663238,3.181147638998,12.25668687787)); #49697=CARTESIAN_POINT('Ctrl Pts',(-6.266138339349,3.181738899965,12.25686873701)); #49698=CARTESIAN_POINT('Ctrl Pts',(-6.343470975895,3.18288532745,12.25719053189)); #49699=CARTESIAN_POINT('Ctrl Pts',(-6.455928213822,3.184337477915,12.25754936967)); #49700=CARTESIAN_POINT('Ctrl Pts',(-6.529696215493,3.185146142415,12.25773050083)); #49701=CARTESIAN_POINT('Ctrl Pts',(-6.564844909433,3.185500347186,12.25780703705)); #49702=CARTESIAN_POINT('Ctrl Pts',(-6.228857880155,3.319646258362,12.28221597269)); #49703=CARTESIAN_POINT('Ctrl Pts',(-6.267426275386,3.320366890224,12.28170304594)); #49704=CARTESIAN_POINT('Ctrl Pts',(-6.344535314506,3.321741873503,12.2807367297)); #49705=CARTESIAN_POINT('Ctrl Pts',(-6.456740518525,3.323448374537,12.2795438642)); #49706=CARTESIAN_POINT('Ctrl Pts',(-6.53037915521,3.324385242014,12.27889058095)); #49707=CARTESIAN_POINT('Ctrl Pts',(-6.565472701364,3.324793592352,12.27860614149)); #49708=CARTESIAN_POINT('Ctrl Pts',(-6.229936655282,3.425219379014,12.18900246758)); #49709=CARTESIAN_POINT('Ctrl Pts',(-6.268402253162,3.425473452017,12.18795992529)); #49710=CARTESIAN_POINT('Ctrl Pts',(-6.345333264391,3.425976379224,12.18602023196)); #49711=CARTESIAN_POINT('Ctrl Pts',(-6.457342387242,3.42661929261,12.18367076305)); #49712=CARTESIAN_POINT('Ctrl Pts',(-6.530882240884,3.426978892905,12.18240208134)); #49713=CARTESIAN_POINT('Ctrl Pts',(-6.565933959723,3.4271366943,12.18185242455)); #49714=CARTESIAN_POINT('Ctrl Pts',(-6.229853194362,3.417051570176,12.04840060046)); #49715=CARTESIAN_POINT('Ctrl Pts',(-6.268319169022,3.416600301867,12.0473990297)); #49716=CARTESIAN_POINT('Ctrl Pts',(-6.345254000907,3.415798113509,12.04554580615)); #49717=CARTESIAN_POINT('Ctrl Pts',(-6.45727309399,3.414873669386,12.04332020494)); #49718=CARTESIAN_POINT('Ctrl Pts',(-6.530820364211,3.414392426028,12.04212622363)); #49719=CARTESIAN_POINT('Ctrl Pts',(-6.5658755947,3.414186777306,12.04161012971)); #49720=CARTESIAN_POINT('',(-6.54548552227936,3.41478266531779,12.0717536995337)); #49721=CARTESIAN_POINT('Ctrl Pts',(-6.54548552226134,3.41478266146838,12.0717536993071)); #49722=CARTESIAN_POINT('Ctrl Pts',(-6.54563659733412,3.41467550465854,12.0735617264191)); #49723=CARTESIAN_POINT('Ctrl Pts',(-6.54578323697267,3.41454418235481,12.075362041438)); #49724=CARTESIAN_POINT('Ctrl Pts',(-6.54592553575072,3.41438918419811,12.0771546036024)); #49725=CARTESIAN_POINT('Ctrl Pts',(-6.54606783452877,3.4142341860414,12.0789471657667)); #49726=CARTESIAN_POINT('Ctrl Pts',(-6.54620579244948,3.41405551276249,12.080731975557)); #49727=CARTESIAN_POINT('Ctrl Pts',(-6.54633950372627,3.41385359174922,12.0825090972065)); #49728=CARTESIAN_POINT('Ctrl Pts',(-6.54647321500305,3.41365167073596,12.0842862188559)); #49729=CARTESIAN_POINT('Ctrl Pts',(-6.54660267963417,3.4134265016752,12.0860556531089)); #49730=CARTESIAN_POINT('Ctrl Pts',(-6.54672799158593,3.41317845705345,12.0878174543941)); #49731=CARTESIAN_POINT('Ctrl Pts',(-6.54685330353769,3.41293041243171,12.0895792556792)); #49732=CARTESIAN_POINT('Ctrl Pts',(-6.54697446280945,3.41265949216526,12.0913334246318)); #49733=CARTESIAN_POINT('Ctrl Pts',(-6.54709156309646,3.41236601278809,12.0930800274305)); #49734=CARTESIAN_POINT('Ctrl Pts',(-6.54720866338346,3.41207253341091,12.0948266302293)); #49735=CARTESIAN_POINT('Ctrl Pts',(-6.54732170468457,3.41175649472991,12.096565667486)); #49736=CARTESIAN_POINT('Ctrl Pts',(-6.54743078044481,3.4114181602314,12.0982972024097)); #49737=CARTESIAN_POINT('Ctrl Pts',(-6.54753985620504,3.4110798257329,12.1000287373335)); #49738=CARTESIAN_POINT('Ctrl Pts',(-6.54764496642323,3.41071919521098,12.1017527704935)); #49739=CARTESIAN_POINT('Ctrl Pts',(-6.54774620430402,3.41033648128961,12.1034693577544)); #49740=CARTESIAN_POINT('Ctrl Pts',(-6.54784744218482,3.40995376736824,12.1051859450154)); #49741=CARTESIAN_POINT('Ctrl Pts',(-6.5479448077269,3.40954896980652,12.1068950869083)); #49742=CARTESIAN_POINT('Ctrl Pts',(-6.54803839391047,3.40912225338835,12.1085968252927)); #49743=CARTESIAN_POINT('Ctrl Pts',(-6.54813198009403,3.4086955369702,12.1102985636771)); #49744=CARTESIAN_POINT('Ctrl Pts',(-6.54822178691766,3.40824690143002,12.1119928990454)); #49745=CARTESIAN_POINT('Ctrl Pts',(-6.54830790715248,3.40777646698436,12.113679853813)); #49746=CARTESIAN_POINT('Ctrl Pts',(-6.5483940273873,3.40730603253868,12.1153668085806)); #49747=CARTESIAN_POINT('Ctrl Pts',(-6.54847646103178,3.40681379889388,12.1170463832018)); #49748=CARTESIAN_POINT('Ctrl Pts',(-6.548555300667,3.40629984550751,12.1187185750153)); #49749=CARTESIAN_POINT('Ctrl Pts',(-6.54863414030222,3.40578589212116,12.1203907668288)); #49750=CARTESIAN_POINT('Ctrl Pts',(-6.5487093859266,3.40525021868735,12.1220555762516)); #49751=CARTESIAN_POINT('Ctrl Pts',(-6.54878112994818,3.40469286759266,12.1237129717843)); #49752=CARTESIAN_POINT('Ctrl Pts',(-6.54885287396976,3.40413551649796,12.125370367317)); #49753=CARTESIAN_POINT('Ctrl Pts',(-6.54892111638668,3.40355648737459,12.1270203493348)); #49754=CARTESIAN_POINT('Ctrl Pts',(-6.54898594946278,3.40295579149747,12.1286628487443)); #49755=CARTESIAN_POINT('Ctrl Pts',(-6.54905078253887,3.40235509562035,12.1303053481539)); #49756=CARTESIAN_POINT('Ctrl Pts',(-6.54911220627255,3.40173273266345,12.1319403652981)); #49757=CARTESIAN_POINT('Ctrl Pts',(-6.5491703054136,3.40108868529016,12.1335677959285)); #49758=CARTESIAN_POINT('Ctrl Pts',(-6.54922840455465,3.4004446379169,12.1351952265588)); #49759=CARTESIAN_POINT('Ctrl Pts',(-6.54928317910352,3.39977890624381,12.1368150710747)); #49760=CARTESIAN_POINT('Ctrl Pts',(-6.54933471359125,3.39909142689543,12.1384272344057)); #49761=CARTESIAN_POINT('Ctrl Pts',(-6.54938624807899,3.39840394754703,12.1400393977367)); #49762=CARTESIAN_POINT('Ctrl Pts',(-6.54943454250569,3.39769472056451,12.1416438802897)); #49763=CARTESIAN_POINT('Ctrl Pts',(-6.54947968118807,3.39696363717116,12.1432405856852)); #49764=CARTESIAN_POINT('Ctrl Pts',(-6.54952481987044,3.39623255377783,12.1448372910808)); #49765=CARTESIAN_POINT('Ctrl Pts',(-6.54956680280848,3.39547961399013,12.1464262197394)); #49766=CARTESIAN_POINT('Ctrl Pts',(-6.54960571410103,3.39470466275938,12.1480072687561)); #49767=CARTESIAN_POINT('Ctrl Pts',(-6.54964462539357,3.39392971152862,12.1495883177729)); #49768=CARTESIAN_POINT('Ctrl Pts',(-6.54968046504042,3.39313274883172,12.1511614875775)); #49769=CARTESIAN_POINT('Ctrl Pts',(-6.54971331692404,3.39231357359973,12.1527266619299)); #49770=CARTESIAN_POINT('Ctrl Pts',(-6.54974616880766,3.39149439836775,12.1542918362823)); #49771=CARTESIAN_POINT('Ctrl Pts',(-6.54977603292769,3.39065301054046,12.1558490156207)); #49772=CARTESIAN_POINT('Ctrl Pts',(-6.54980299295412,3.38978916366715,12.1573980638284)); #49773=CARTESIAN_POINT('Ctrl Pts',(-6.54982995298056,3.38892531679381,12.1589471120361)); #49774=CARTESIAN_POINT('Ctrl Pts',(-6.54985400891286,3.38803901077375,12.1604880295572)); #49775=CARTESIAN_POINT('Ctrl Pts',(-6.54987524421431,3.38712995509406,12.1620206535677)); #49776=CARTESIAN_POINT('Ctrl Pts',(-6.54989647951575,3.3862208994144,12.1635532775782)); #49777=CARTESIAN_POINT('Ctrl Pts',(-6.54991489418562,3.38528909393423,12.1650776085266)); #49778=CARTESIAN_POINT('Ctrl Pts',(-6.54993057148995,3.38433420588985,12.1665934501833)); #49779=CARTESIAN_POINT('Ctrl Pts',(-6.54994624879428,3.38337931784544,12.1681092918401)); #49780=CARTESIAN_POINT('Ctrl Pts',(-6.54995918873211,3.38240134704533,12.1696166446514)); #49781=CARTESIAN_POINT('Ctrl Pts',(-6.54996947438476,3.38139992151575,12.1711152713686)); #49782=CARTESIAN_POINT('Ctrl Pts',(-6.5499797600374,3.38039849598621,12.1726138980858)); #49783=CARTESIAN_POINT('Ctrl Pts',(-6.5499873914038,3.37937361551134,12.1741037991648)); #49784=CARTESIAN_POINT('Ctrl Pts',(-6.54999245139408,3.37832487062801,12.1755846916245)); #49785=CARTESIAN_POINT('Ctrl Pts',(-6.54999751138436,3.37727612574467,12.1770655840842)); #49786=CARTESIAN_POINT('Ctrl Pts',(-6.54999999999684,3.37620351610253,12.1785374683241)); #49787=CARTESIAN_POINT('Ctrl Pts',(-6.54999999999986,3.37510660534796,12.179999999969)); #49788=CARTESIAN_POINT('',(-6.24476936900661,3.41643996493636,12.0778535243915)); #49789=CARTESIAN_POINT('Origin',(-6.97254019904412,12.7022835256667,38.0175965565343)); #49790=CARTESIAN_POINT('Ctrl Pts',(-6.24999999999747,3.3771852796398,12.1799999998031)); #49791=CARTESIAN_POINT('Ctrl Pts',(-6.24999999999449,3.37822477929648,12.1786140659077)); #49792=CARTESIAN_POINT('Ctrl Pts',(-6.24999709438352,3.37924256681611,12.1772196083365)); #49793=CARTESIAN_POINT('Ctrl Pts',(-6.24999119047843,3.38023900014166,12.175816921575)); #49794=CARTESIAN_POINT('Ctrl Pts',(-6.24998528657333,3.3812354334672,12.1744142348136)); #49795=CARTESIAN_POINT('Ctrl Pts',(-6.24997638437667,3.38221051285181,12.1730033185571)); #49796=CARTESIAN_POINT('Ctrl Pts',(-6.2499643909604,3.3831645743691,12.1715844200159)); #49797=CARTESIAN_POINT('Ctrl Pts',(-6.24995239754412,3.3841186358864,12.1701655214748)); #49798=CARTESIAN_POINT('Ctrl Pts',(-6.24993731290987,3.38505167969241,12.1687386403049)); #49799=CARTESIAN_POINT('Ctrl Pts',(-6.24991904384804,3.3859640120844,12.1673039883188)); #49800=CARTESIAN_POINT('Ctrl Pts',(-6.24990077478622,3.38687634447636,12.1658693363327)); #49801=CARTESIAN_POINT('Ctrl Pts',(-6.2498793212983,3.38776796559343,12.1644269131936)); #49802=CARTESIAN_POINT('Ctrl Pts',(-6.24985458987196,3.38863915078486,12.1629768988311)); #49803=CARTESIAN_POINT('Ctrl Pts',(-6.24982985844562,3.3895103359763,12.1615268844686)); #49804=CARTESIAN_POINT('Ctrl Pts',(-6.24980184908199,3.39036108534503,12.1600692785448)); #49805=CARTESIAN_POINT('Ctrl Pts',(-6.24977046794703,3.39119164106974,12.1586042348298)); #49806=CARTESIAN_POINT('Ctrl Pts',(-6.24973908681207,3.39202219679444,12.1571391911149)); #49807=CARTESIAN_POINT('Ctrl Pts',(-6.24970433390664,3.39283255894931,12.1556667092742)); #49808=CARTESIAN_POINT('Ctrl Pts',(-6.24966611506116,3.39362293522567,12.1541869219452)); #49809=CARTESIAN_POINT('Ctrl Pts',(-6.24962789621567,3.39441331150205,12.1527071346162)); #49810=CARTESIAN_POINT('Ctrl Pts',(-6.24958621143072,3.39518370194511,12.1512200414687)); #49811=CARTESIAN_POINT('Ctrl Pts',(-6.24954096619144,3.39593427878701,12.1497257591338)); #49812=CARTESIAN_POINT('Ctrl Pts',(-6.24949572095216,3.39668485562889,12.1482314767989)); #49813=CARTESIAN_POINT('Ctrl Pts',(-6.2494469152589,3.39741561888819,12.1467300049526)); #49814=CARTESIAN_POINT('Ctrl Pts',(-6.24939445424604,3.39812670486018,12.1452214491277)); #49815=CARTESIAN_POINT('Ctrl Pts',(-6.24934199323318,3.39883779083217,12.1437128933027)); #49816=CARTESIAN_POINT('Ctrl Pts',(-6.24928587690082,3.39952919950706,12.1421972531817)); #49817=CARTESIAN_POINT('Ctrl Pts',(-6.24922601002952,3.40020103103327,12.1406746283076)); #49818=CARTESIAN_POINT('Ctrl Pts',(-6.24916614315822,3.40087286255947,12.1391520034335)); #49819=CARTESIAN_POINT('Ctrl Pts',(-6.24910252574792,3.4015251169096,12.1376223934989)); #49820=CARTESIAN_POINT('Ctrl Pts',(-6.24903506223042,3.40215785872049,12.1360858959612)); #49821=CARTESIAN_POINT('Ctrl Pts',(-6.24896759871291,3.4027906005314,12.1345493984235)); #49822=CARTESIAN_POINT('Ctrl Pts',(-6.24889628908763,3.40340382972156,12.1330060129806)); #49823=CARTESIAN_POINT('Ctrl Pts',(-6.24882103742962,3.40399757482373,12.1314558428898)); #49824=CARTESIAN_POINT('Ctrl Pts',(-6.2487457857716,3.40459131992589,12.1299056727991)); #49825=CARTESIAN_POINT('Ctrl Pts',(-6.24866659208452,3.40516558130405,12.1283487178128)); #49826=CARTESIAN_POINT('Ctrl Pts',(-6.24858335380981,3.40572036977746,12.1267850395351)); #49827=CARTESIAN_POINT('Ctrl Pts',(-6.2485001155351,3.40627515825086,12.1252213612575)); #49828=CARTESIAN_POINT('Ctrl Pts',(-6.2484128326756,3.40681047408757,12.1236509593994)); #49829=CARTESIAN_POINT('Ctrl Pts',(-6.24832140242762,3.40732630265671,12.1220738659056)); #49830=CARTESIAN_POINT('Ctrl Pts',(-6.24822997217964,3.40784213122587,12.1204967724117)); #49831=CARTESIAN_POINT('Ctrl Pts',(-6.2481343945456,3.40833847275009,12.1189129869643)); #49832=CARTESIAN_POINT('Ctrl Pts',(-6.2480345664327,3.40881528272673,12.117322518577)); #49833=CARTESIAN_POINT('Ctrl Pts',(-6.24793473831981,3.40929209270336,12.1157320501897)); #49834=CARTESIAN_POINT('Ctrl Pts',(-6.24783065973043,3.4097493713457,12.1141348985197)); #49835=CARTESIAN_POINT('Ctrl Pts',(-6.2477222272566,3.41018704164629,12.1125310525598)); #49836=CARTESIAN_POINT('Ctrl Pts',(-6.24761379478277,3.41062471194688,12.1109272065998)); #49837=CARTESIAN_POINT('Ctrl Pts',(-6.24750100842669,3.41104277409849,12.1093166659819)); #49838=CARTESIAN_POINT('Ctrl Pts',(-6.24738376443743,3.41144111584019,12.1076994039625)); #49839=CARTESIAN_POINT('Ctrl Pts',(-6.24726652044817,3.41183945758188,12.1060821419431)); #49840=CARTESIAN_POINT('Ctrl Pts',(-6.2471448188278,3.41221807908861,12.1044581581287)); #49841=CARTESIAN_POINT('Ctrl Pts',(-6.24701855545844,3.41257683050386,12.1028274141375)); #49842=CARTESIAN_POINT('Ctrl Pts',(-6.24689229208908,3.41293558191913,12.1011966701462)); #49843=CARTESIAN_POINT('Ctrl Pts',(-6.24676146697258,3.41327446339299,12.0995591655593)); #49844=CARTESIAN_POINT('Ctrl Pts',(-6.24662597560043,3.41359328529393,12.0979148553279)); #49845=CARTESIAN_POINT('Ctrl Pts',(-6.24649048422829,3.41391210719487,12.0962705450965)); #49846=CARTESIAN_POINT('Ctrl Pts',(-6.2463503266023,3.41421086966434,12.0946194287739)); #49847=CARTESIAN_POINT('Ctrl Pts',(-6.24620539780904,3.4144893417817,12.0929614578546)); #49848=CARTESIAN_POINT('Ctrl Pts',(-6.24606046901578,3.41476781389907,12.0913034869353)); #49849=CARTESIAN_POINT('Ctrl Pts',(-6.24591076905634,3.41502599572847,12.089638660957)); #49850=CARTESIAN_POINT('Ctrl Pts',(-6.24575619257722,3.41526361277649,12.0879669388892)); #49851=CARTESIAN_POINT('Ctrl Pts',(-6.24560161609811,3.41550122982451,12.0862952168214)); #49852=CARTESIAN_POINT('Ctrl Pts',(-6.24544216310206,3.41571828232133,12.0846165981316)); #49853=CARTESIAN_POINT('Ctrl Pts',(-6.24527772784478,3.41591445365801,12.0829310328658)); #49854=CARTESIAN_POINT('Ctrl Pts',(-6.24511329258749,3.41611062499469,12.0812454675999)); #49855=CARTESIAN_POINT('Ctrl Pts',(-6.24494387506443,3.41628591465468,12.0795529553947)); #49856=CARTESIAN_POINT('Ctrl Pts',(-6.24476936891589,3.41643995589441,12.0778535235813)); #49857=CARTESIAN_POINT('Origin',(-5.25,4.4,12.18)); #49858=CARTESIAN_POINT('',(-6.234807753012,3.422950860615,12.00635182233)); #49859=CARTESIAN_POINT('Origin',(-5.11259251786463,3.41969048105837,12.1991428330388)); #49860=CARTESIAN_POINT('',(-6.234807753012,5.377049139385,12.00635182233)); #49861=CARTESIAN_POINT('',(-6.234807753012,3.422950860615,12.00635182233)); #49862=CARTESIAN_POINT('',(-6.24476936900667,5.38356003504159,12.0778535243921)); #49863=CARTESIAN_POINT('Origin',(-5.11259234361782,5.38030950549834,12.1991428524115)); #49864=CARTESIAN_POINT('Ctrl Pts',(-6.24476936891641,5.38356004405984,12.077853523584)); #49865=CARTESIAN_POINT('Ctrl Pts',(-6.24494387506551,5.38371408529845,12.0795529554049)); #49866=CARTESIAN_POINT('Ctrl Pts',(-6.24511329258931,5.38388937495754,12.0812454676174)); #49867=CARTESIAN_POINT('Ctrl Pts',(-6.24527772784719,5.3840855462935,12.0829310328901)); #49868=CARTESIAN_POINT('Ctrl Pts',(-6.24544216310507,5.38428171762945,12.0846165981629)); #49869=CARTESIAN_POINT('Ctrl Pts',(-6.24560161610156,5.38449877012572,12.0862952168592)); #49870=CARTESIAN_POINT('Ctrl Pts',(-6.24575619258114,5.38473638717333,12.087966938933)); #49871=CARTESIAN_POINT('Ctrl Pts',(-6.24591076906072,5.38497400422094,12.0896386610068)); #49872=CARTESIAN_POINT('Ctrl Pts',(-6.24606046902063,5.38523218605006,12.0913034869907)); #49873=CARTESIAN_POINT('Ctrl Pts',(-6.24620539781425,5.38551065816729,12.0929614579153)); #49874=CARTESIAN_POINT('Ctrl Pts',(-6.24635032660786,5.38578913028451,12.0946194288399)); #49875=CARTESIAN_POINT('Ctrl Pts',(-6.2464904842341,5.38608789275399,12.0962705451675)); #49876=CARTESIAN_POINT('Ctrl Pts',(-6.24662597560649,5.38640671465503,12.0979148554035)); #49877=CARTESIAN_POINT('Ctrl Pts',(-6.24676146697888,5.38672553655609,12.0995591656396)); #49878=CARTESIAN_POINT('Ctrl Pts',(-6.24689229209561,5.38706441803016,12.1011966702307)); #49879=CARTESIAN_POINT('Ctrl Pts',(-6.24701855546515,5.38742316944569,12.1028274142258)); #49880=CARTESIAN_POINT('Ctrl Pts',(-6.2471448188347,5.38778192086122,12.1044581582209)); #49881=CARTESIAN_POINT('Ctrl Pts',(-6.24726652045521,5.38816054236827,12.1060821420386)); #49882=CARTESIAN_POINT('Ctrl Pts',(-6.24738376444454,5.38855888411034,12.107699404061)); #49883=CARTESIAN_POINT('Ctrl Pts',(-6.24750100843387,5.38895722585243,12.1093166660834)); #49884=CARTESIAN_POINT('Ctrl Pts',(-6.24761379478996,5.38937528800447,12.110927206704)); #49885=CARTESIAN_POINT('Ctrl Pts',(-6.24772222726372,5.38981295830552,12.1125310526662)); #49886=CARTESIAN_POINT('Ctrl Pts',(-6.24783065973748,5.39025062860656,12.1141348986284)); #49887=CARTESIAN_POINT('Ctrl Pts',(-6.2479347383267,5.39070790724936,12.1157320503002)); #49888=CARTESIAN_POINT('Ctrl Pts',(-6.24803456643948,5.39118471722646,12.117322518689)); #49889=CARTESIAN_POINT('Ctrl Pts',(-6.24813439455226,5.39166152720358,12.1189129870779)); #49890=CARTESIAN_POINT('Ctrl Pts',(-6.24822997218622,5.39215786872828,12.1204967725264)); #49891=CARTESIAN_POINT('Ctrl Pts',(-6.24832140243407,5.39267369729787,12.122073866021)); #49892=CARTESIAN_POINT('Ctrl Pts',(-6.24841283268192,5.39318952586745,12.1236509595156)); #49893=CARTESIAN_POINT('Ctrl Pts',(-6.24850011554123,5.39372484170455,12.125221361374)); #49894=CARTESIAN_POINT('Ctrl Pts',(-6.24858335381579,5.39427963017829,12.1267850396516)); #49895=CARTESIAN_POINT('Ctrl Pts',(-6.24866659209035,5.39483441865204,12.1283487179292)); #49896=CARTESIAN_POINT('Ctrl Pts',(-6.24874578577731,5.3954086800305,12.1299056729151)); #49897=CARTESIAN_POINT('Ctrl Pts',(-6.24882103743519,5.39600242513288,12.1314558430052)); #49898=CARTESIAN_POINT('Ctrl Pts',(-6.24889628909306,5.39659617023526,12.1330060130952)); #49899=CARTESIAN_POINT('Ctrl Pts',(-6.24896759871819,5.39720939942556,12.1345493985371)); #49900=CARTESIAN_POINT('Ctrl Pts',(-6.2490350622355,5.39784214123652,12.1360858960734)); #49901=CARTESIAN_POINT('Ctrl Pts',(-6.24910252575279,5.39847488304747,12.1376223936097)); #49902=CARTESIAN_POINT('Ctrl Pts',(-6.24916614316284,5.39912713739757,12.1391520035427)); #49903=CARTESIAN_POINT('Ctrl Pts',(-6.2492260100339,5.39979896892366,12.1406746284149)); #49904=CARTESIAN_POINT('Ctrl Pts',(-6.24928587690497,5.40047080044976,12.1421972532871)); #49905=CARTESIAN_POINT('Ctrl Pts',(-6.24934199323711,5.40116220912445,12.1437128934059)); #49906=CARTESIAN_POINT('Ctrl Pts',(-6.24939445424978,5.40187329509613,12.1452214492285)); #49907=CARTESIAN_POINT('Ctrl Pts',(-6.24944691526245,5.40258438106779,12.146730005051)); #49908=CARTESIAN_POINT('Ctrl Pts',(-6.24949572095556,5.40331514432664,12.1482314768945)); #49909=CARTESIAN_POINT('Ctrl Pts',(-6.24954096619462,5.40406572116794,12.1497257592264)); #49910=CARTESIAN_POINT('Ctrl Pts',(-6.24958621143369,5.40481629800926,12.1512200415584)); #49911=CARTESIAN_POINT('Ctrl Pts',(-6.24962789621837,5.4055866884516,12.1527071347027)); #49912=CARTESIAN_POINT('Ctrl Pts',(-6.24966611506365,5.40637706472712,12.1541869220283)); #49913=CARTESIAN_POINT('Ctrl Pts',(-6.24970433390893,5.40716744100261,12.1556667093539)); #49914=CARTESIAN_POINT('Ctrl Pts',(-6.24973908681422,5.40797780315646,12.1571391911908)); #49915=CARTESIAN_POINT('Ctrl Pts',(-6.24977046794897,5.40880835888002,12.158604234902)); #49916=CARTESIAN_POINT('Ctrl Pts',(-6.24980184908372,5.4096389146036,12.1600692786131)); #49917=CARTESIAN_POINT('Ctrl Pts',(-6.24982985844708,5.41048966397107,12.161526884533)); #49918=CARTESIAN_POINT('Ctrl Pts',(-6.24985458987323,5.41136084916103,12.1629768988912)); #49919=CARTESIAN_POINT('Ctrl Pts',(-6.24987932129939,5.41223203435098,12.1644269132495)); #49920=CARTESIAN_POINT('Ctrl Pts',(-6.24990077478722,5.41312365546632,12.1658693363841)); #49921=CARTESIAN_POINT('Ctrl Pts',(-6.2499190438489,5.41403598785647,12.1673039883657)); #49922=CARTESIAN_POINT('Ctrl Pts',(-6.24993731291058,5.41494832024663,12.1687386403472)); #49923=CARTESIAN_POINT('Ctrl Pts',(-6.24995239754464,5.41588136405074,12.1701655215125)); #49924=CARTESIAN_POINT('Ctrl Pts',(-6.24996439096081,5.41683542556589,12.1715844200489)); #49925=CARTESIAN_POINT('Ctrl Pts',(-6.24997638437698,5.41778948708102,12.1730033185852)); #49926=CARTESIAN_POINT('Ctrl Pts',(-6.24998528657364,5.41876456646322,12.1744142348367)); #49927=CARTESIAN_POINT('Ctrl Pts',(-6.24999119047869,5.41976099978612,12.1758169215929)); #49928=CARTESIAN_POINT('Ctrl Pts',(-6.24999709438375,5.42075743310905,12.1772196083492)); #49929=CARTESIAN_POINT('Ctrl Pts',(-6.24999999999465,5.42177522062583,12.1786140659151)); #49930=CARTESIAN_POINT('Ctrl Pts',(-6.24999999999768,5.42281472027963,12.1799999998054)); #49931=CARTESIAN_POINT('Ctrl Pts',(-6.5648441231,5.61449966013,12.25780703541)); #49932=CARTESIAN_POINT('Ctrl Pts',(-6.529523113642,5.614855603544,12.25773012337)); #49933=CARTESIAN_POINT('Ctrl Pts',(-6.455582719387,5.615666479685,12.25754846999)); #49934=CARTESIAN_POINT('Ctrl Pts',(-6.343125239068,5.61711967215,12.2571891928)); #49935=CARTESIAN_POINT('Ctrl Pts',(-6.265964979052,5.618263750567,12.25686792195)); #49936=CARTESIAN_POINT('Ctrl Pts',(-6.227441867528,5.618852373211,12.25668687409)); #49937=CARTESIAN_POINT('Ctrl Pts',(-6.565471916274,5.475206416245,12.27860614749)); #49938=CARTESIAN_POINT('Ctrl Pts',(-6.530206325168,5.475616771105,12.27889198258)); #49939=CARTESIAN_POINT('Ctrl Pts',(-6.456395664386,5.476556220081,12.27954707021)); #49940=CARTESIAN_POINT('Ctrl Pts',(-6.344190508325,5.478264076523,12.28074089595)); #49941=CARTESIAN_POINT('Ctrl Pts',(-6.267253485289,5.479636340238,12.28170534431)); #49942=CARTESIAN_POINT('Ctrl Pts',(-6.228857087098,5.48035375666,12.28221598321)); #49943=CARTESIAN_POINT('Ctrl Pts',(-6.565933175573,5.372863309025,12.18185243632)); #49944=CARTESIAN_POINT('Ctrl Pts',(-6.530709617004,5.373021885494,12.18240479041)); #49945=CARTESIAN_POINT('Ctrl Pts',(-6.456998023307,5.373382465395,12.18367700192)); #49946=CARTESIAN_POINT('Ctrl Pts',(-6.344989193028,5.374025827107,12.18602853845)); #49947=CARTESIAN_POINT('Ctrl Pts',(-6.268229923569,5.374527687805,12.18796459716)); #49948=CARTESIAN_POINT('Ctrl Pts',(-6.229935864367,5.374780626444,12.18900248917)); #49949=CARTESIAN_POINT('Ctrl Pts',(-6.565874810469,5.385813218136,12.04161014089)); #49950=CARTESIAN_POINT('Ctrl Pts',(-6.530647723029,5.385606560842,12.04212876756)); #49951=CARTESIAN_POINT('Ctrl Pts',(-6.456928694924,5.385123949685,12.04332608212)); #49952=CARTESIAN_POINT('Ctrl Pts',(-6.344909906038,5.384198520679,12.04555371839)); #49953=CARTESIAN_POINT('Ctrl Pts',(-6.268146837725,5.383397677015,12.04740351816)); #49954=CARTESIAN_POINT('Ctrl Pts',(-6.22985240344,5.382948420563,12.04840062135)); #49955=CARTESIAN_POINT('',(-6.54548552227844,5.38521733473808,12.0717536995329)); #49956=CARTESIAN_POINT('Origin',(-6.97247616632282,-3.90319226256344,38.0141929117306)); #49957=CARTESIAN_POINT('Ctrl Pts',(-6.54999999999981,5.42489339475673,12.1799999999689)); #49958=CARTESIAN_POINT('Ctrl Pts',(-6.54999999999706,5.42379648400568,12.1785374683292)); #49959=CARTESIAN_POINT('Ctrl Pts',(-6.54999751138455,5.42272387436688,12.1770655840944)); #49960=CARTESIAN_POINT('Ctrl Pts',(-6.54999245139424,5.42167512948661,12.1755846916398)); #49961=CARTESIAN_POINT('Ctrl Pts',(-6.54998739140394,5.42062638460635,12.1741037991851)); #49962=CARTESIAN_POINT('Ctrl Pts',(-6.54997976003754,5.41960150413428,12.172613898111)); #49963=CARTESIAN_POINT('Ctrl Pts',(-6.54996947438493,5.41860007860723,12.1711152713985)); #49964=CARTESIAN_POINT('Ctrl Pts',(-6.54995918873233,5.41759865308016,12.1696166446859)); #49965=CARTESIAN_POINT('Ctrl Pts',(-6.54994624879458,5.41662068228223,12.168109291879)); #49966=CARTESIAN_POINT('Ctrl Pts',(-6.54993057149035,5.41566579423979,12.1665934502265)); #49967=CARTESIAN_POINT('Ctrl Pts',(-6.54991489418611,5.41471090619737,12.165077608574)); #49968=CARTESIAN_POINT('Ctrl Pts',(-6.54989647951633,5.41377910071893,12.1635532776296)); #49969=CARTESIAN_POINT('Ctrl Pts',(-6.54987524421504,5.41287004504072,12.1620206536229)); #49970=CARTESIAN_POINT('Ctrl Pts',(-6.54985400891374,5.41196098936249,12.1604880296161)); #49971=CARTESIAN_POINT('Ctrl Pts',(-6.54982995298164,5.41107468334363,12.1589471120985)); #49972=CARTESIAN_POINT('Ctrl Pts',(-6.54980299295533,5.41021083647125,12.157398063894)); #49973=CARTESIAN_POINT('Ctrl Pts',(-6.54977603292901,5.40934698959888,12.1558490156894)); #49974=CARTESIAN_POINT('Ctrl Pts',(-6.54974616880902,5.40850560177231,12.1542918363539)); #49975=CARTESIAN_POINT('Ctrl Pts',(-6.54971331692552,5.40768642654087,12.1527266620041)); #49976=CARTESIAN_POINT('Ctrl Pts',(-6.54968046504202,5.40686725130942,12.1511614876543)); #49977=CARTESIAN_POINT('Ctrl Pts',(-6.54964462539536,5.40607028861286,12.1495883178521)); #49978=CARTESIAN_POINT('Ctrl Pts',(-6.54960571410296,5.40529533738224,12.1480072688373)); #49979=CARTESIAN_POINT('Ctrl Pts',(-6.54956680281055,5.40452038615164,12.1464262198225)); #49980=CARTESIAN_POINT('Ctrl Pts',(-6.54952481987259,5.40376744636387,12.1448372911654)); #49981=CARTESIAN_POINT('Ctrl Pts',(-6.54947968119031,5.40303636297037,12.1432405857713)); #49982=CARTESIAN_POINT('Ctrl Pts',(-6.54943454250802,5.40230527957685,12.1416438803771)); #49983=CARTESIAN_POINT('Ctrl Pts',(-6.54938624808142,5.40159605259406,12.1400393978252)); #49984=CARTESIAN_POINT('Ctrl Pts',(-6.54933471359383,5.40090857324522,12.1384272344949)); #49985=CARTESIAN_POINT('Ctrl Pts',(-6.54928317910624,5.4002210938964,12.1368150711646)); #49986=CARTESIAN_POINT('Ctrl Pts',(-6.54922840455757,5.39955536222269,12.135195226649)); #49987=CARTESIAN_POINT('Ctrl Pts',(-6.54917030541667,5.39891131484874,12.1335677960186)); #49988=CARTESIAN_POINT('Ctrl Pts',(-6.54911220627577,5.39826726747477,12.1319403653882)); #49989=CARTESIAN_POINT('Ctrl Pts',(-6.54905078254221,5.39764490451712,12.1303053482436)); #49990=CARTESIAN_POINT('Ctrl Pts',(-6.54898594946618,5.39704420863919,12.1286628488335)); #49991=CARTESIAN_POINT('Ctrl Pts',(-6.54892111639014,5.39644351276127,12.1270203494234)); #49992=CARTESIAN_POINT('Ctrl Pts',(-6.54885287397323,5.39586448363705,12.1253703674048)); #49993=CARTESIAN_POINT('Ctrl Pts',(-6.54878112995172,5.39530713254149,12.1237129718709)); #49994=CARTESIAN_POINT('Ctrl Pts',(-6.54870938593022,5.39474978144593,12.122055576337)); #49995=CARTESIAN_POINT('Ctrl Pts',(-6.54863414030596,5.39421410801123,12.1203907669128)); #49996=CARTESIAN_POINT('Ctrl Pts',(-6.54855530067081,5.39370015462401,12.1187185750977)); #49997=CARTESIAN_POINT('Ctrl Pts',(-6.54847646103565,5.39318620123678,12.1170463832825)); #49998=CARTESIAN_POINT('Ctrl Pts',(-6.54839402739117,5.39269396759113,12.1153668086594)); #49999=CARTESIAN_POINT('Ctrl Pts',(-6.5483079071564,5.39222353314462,12.1136798538897)); #50000=CARTESIAN_POINT('Ctrl Pts',(-6.54822178692163,5.39175309869812,12.11199289912)); #50001=CARTESIAN_POINT('Ctrl Pts',(-6.5481319800981,5.39130446315714,12.1102985637492)); #50002=CARTESIAN_POINT('Ctrl Pts',(-6.54803839391452,5.39087774673825,12.1085968253623)); #50003=CARTESIAN_POINT('Ctrl Pts',(-6.54794480773093,5.39045103031934,12.1068950869754)); #50004=CARTESIAN_POINT('Ctrl Pts',(-6.54784744218871,5.39004623275696,12.1051859450798)); #50005=CARTESIAN_POINT('Ctrl Pts',(-6.54774620430782,5.38966351883501,12.103469357816)); #50006=CARTESIAN_POINT('Ctrl Pts',(-6.54764496642693,5.38928080491306,12.1017527705523)); #50007=CARTESIAN_POINT('Ctrl Pts',(-6.54753985620869,5.38892017439065,12.1000287373892)); #50008=CARTESIAN_POINT('Ctrl Pts',(-6.54743078044835,5.38858183989174,12.0982972024624)); #50009=CARTESIAN_POINT('Ctrl Pts',(-6.54732170468801,5.38824350539283,12.0965656675355)); #50010=CARTESIAN_POINT('Ctrl Pts',(-6.54720866338676,5.38792746671152,12.0948266302756)); #50011=CARTESIAN_POINT('Ctrl Pts',(-6.54709156309957,5.38763398733414,12.0930800274735)); #50012=CARTESIAN_POINT('Ctrl Pts',(-6.54697446281239,5.38734050795677,12.0913334246714)); #50013=CARTESIAN_POINT('Ctrl Pts',(-6.54685330354041,5.38706958769022,12.0895792557153)); #50014=CARTESIAN_POINT('Ctrl Pts',(-6.54672799158835,5.3868215430685,12.0878174544265)); #50015=CARTESIAN_POINT('Ctrl Pts',(-6.54660267963629,5.38657349844676,12.0860556531377)); #50016=CARTESIAN_POINT('Ctrl Pts',(-6.54647321500479,5.38634832938613,12.0842862188809)); #50017=CARTESIAN_POINT('Ctrl Pts',(-6.54633950372765,5.38614640837311,12.0825090972275)); #50018=CARTESIAN_POINT('Ctrl Pts',(-6.5462057924505,5.38594448736011,12.080731975574)); #50019=CARTESIAN_POINT('Ctrl Pts',(-6.54606783452946,5.38576581408157,12.0789471657796)); #50020=CARTESIAN_POINT('Ctrl Pts',(-6.54592553575099,5.38561081592539,12.077154603611)); #50021=CARTESIAN_POINT('Ctrl Pts',(-6.54578323697251,5.3854558177692,12.0753620414424)); #50022=CARTESIAN_POINT('Ctrl Pts',(-6.54563659733344,5.38532449546612,12.0735617264189)); #50023=CARTESIAN_POINT('Ctrl Pts',(-6.54548552226007,5.3852173386571,12.0717536993023)); #50024=CARTESIAN_POINT('Origin',(-5.25,4.4,12.18)); #50025=CARTESIAN_POINT('',(-6.53025007892237,5.37704913897324,11.9542573690666)); #50026=CARTESIAN_POINT('',(-6.53025007892237,3.42295086102676,11.9542573690666)); #50027=CARTESIAN_POINT('',(-6.530250078916,5.377049139385,11.95425736903)); #50028=CARTESIAN_POINT('Ctrl Pts',(-6.545485522277,3.414782664745,12.0717536995)); #50029=CARTESIAN_POINT('Ctrl Pts',(-6.543804754551,3.415974845808,12.05163836765)); #50030=CARTESIAN_POINT('Ctrl Pts',(-6.53954109678,3.418308071189,12.01190609642)); #50031=CARTESIAN_POINT('Ctrl Pts',(-6.533602627089,3.42121001682,11.97327061454)); #50032=CARTESIAN_POINT('Ctrl Pts',(-6.530250078916,3.422950860615,11.95425736903)); #50033=CARTESIAN_POINT('Ctrl Pts',(-6.545485522276,5.385217335297,12.0717536995)); #50034=CARTESIAN_POINT('Ctrl Pts',(-6.543804754554,5.384025154236,12.05163836769)); #50035=CARTESIAN_POINT('Ctrl Pts',(-6.539541096791,5.381691928795,12.0119060965)); #50036=CARTESIAN_POINT('Ctrl Pts',(-6.533602627096,5.378789983184,11.97327061458)); #50037=CARTESIAN_POINT('Ctrl Pts',(-6.530250078916,5.377049139385,11.95425736903)); #50038=CARTESIAN_POINT('Ctrl Pts',(-6.217856325953,5.386634163186,12.1135995694)); #50039=CARTESIAN_POINT('Ctrl Pts',(-6.215180381112,5.382953749066,12.07459485033)); #50040=CARTESIAN_POINT('Ctrl Pts',(-6.210145301053,5.379225390781,12.03575683807)); #50041=CARTESIAN_POINT('Ctrl Pts',(-6.202779995708,5.375757930638,11.99733866132)); #50042=CARTESIAN_POINT('Ctrl Pts',(-6.337488194967,5.38653854324,12.10540178492)); #50043=CARTESIAN_POINT('Ctrl Pts',(-6.334480602192,5.383043527571,12.06155728468)); #50044=CARTESIAN_POINT('Ctrl Pts',(-6.32881373561,5.379693047324,12.01788172122)); #50045=CARTESIAN_POINT('Ctrl Pts',(-6.320551530257,5.375556047512,11.97478087499)); #50046=CARTESIAN_POINT('Ctrl Pts',(-6.457120307927,5.386442923294,12.0972075583)); #50047=CARTESIAN_POINT('Ctrl Pts',(-6.453780737886,5.383133306077,12.04851636867)); #50048=CARTESIAN_POINT('Ctrl Pts',(-6.44747859152,5.380160703867,11.99998953118)); #50049=CARTESIAN_POINT('Ctrl Pts',(-6.438324481852,5.375354164387,11.95223048351)); #50050=CARTESIAN_POINT('Ctrl Pts',(-6.576752664675,5.386347303348,12.08901688957)); #50051=CARTESIAN_POINT('Ctrl Pts',(-6.573080788654,5.383223084583,12.03547210227)); #50052=CARTESIAN_POINT('Ctrl Pts',(-6.566139872701,5.38062836041,11.98208026716)); #50053=CARTESIAN_POINT('Ctrl Pts',(-6.556098849796,5.375152281261,11.92968748699)); #50054=CARTESIAN_POINT('',(-6.234807753012,5.377049139385,12.00635182233)); #50055=CARTESIAN_POINT('Origin',(-6.068923101205,5.214206218597,10.20175763991)); #50056=CARTESIAN_POINT('',(-5.60759612934722,5.05136292430736,8.44925794398477)); #50057=CARTESIAN_POINT('',(-6.234807753012,5.377049139385,12.00635182233)); #50058=CARTESIAN_POINT('',(-5.90303845088204,5.05136320309722,8.39716346590953)); #50059=CARTESIAN_POINT('',(-5.607596123494,5.051363297809,8.449257910793)); #50060=CARTESIAN_POINT('',(-6.530250078916,5.377049139385,11.95425736903)); #50061=CARTESIAN_POINT('Origin',(-6.216644264157,4.4,10.17571041326)); #50062=CARTESIAN_POINT('',(-5.90303845088204,3.74863679690278,8.39716346590953)); #50063=CARTESIAN_POINT('',(-5.903038449398,5.051363297809,8.397163457493)); #50064=CARTESIAN_POINT('',(-6.530250078916,3.422950860615,11.95425736903)); #50065=CARTESIAN_POINT('Origin',(-6.068923101205,3.585793781403,10.20175763991)); #50066=CARTESIAN_POINT('',(-5.60759612934722,3.74863707569264,8.44925794398476)); #50067=CARTESIAN_POINT('',(-5.903038449398,3.748636702191,8.397163457493)); #50068=CARTESIAN_POINT('',(-6.234807753012,3.422950860615,12.00635182233)); #50069=CARTESIAN_POINT('',(-6.530250078916,3.422950860615,11.95425736903)); #50070=CARTESIAN_POINT('Ctrl Pts',(-6.576752664675,3.413652696652,12.08901688957)); #50071=CARTESIAN_POINT('Ctrl Pts',(-6.573080788654,3.416776915417,12.03547210227)); #50072=CARTESIAN_POINT('Ctrl Pts',(-6.566139872701,3.41937163959,11.98208026716)); #50073=CARTESIAN_POINT('Ctrl Pts',(-6.556098849796,3.424847718739,11.92968748699)); #50074=CARTESIAN_POINT('Ctrl Pts',(-6.457120307927,3.413557076706,12.0972075583)); #50075=CARTESIAN_POINT('Ctrl Pts',(-6.453780737886,3.416866693923,12.04851636867)); #50076=CARTESIAN_POINT('Ctrl Pts',(-6.44747859152,3.419839296133,11.99998953118)); #50077=CARTESIAN_POINT('Ctrl Pts',(-6.438324481852,3.424645835613,11.95223048351)); #50078=CARTESIAN_POINT('Ctrl Pts',(-6.337488194967,3.41346145676,12.10540178492)); #50079=CARTESIAN_POINT('Ctrl Pts',(-6.334480602192,3.416956472429,12.06155728468)); #50080=CARTESIAN_POINT('Ctrl Pts',(-6.32881373561,3.420306952676,12.01788172122)); #50081=CARTESIAN_POINT('Ctrl Pts',(-6.320551530257,3.424443952488,11.97478087499)); #50082=CARTESIAN_POINT('Ctrl Pts',(-6.217856325953,3.413365836814,12.1135995694)); #50083=CARTESIAN_POINT('Ctrl Pts',(-6.215180381112,3.417046250934,12.07459485033)); #50084=CARTESIAN_POINT('Ctrl Pts',(-6.210145301053,3.420774609219,12.03575683807)); #50085=CARTESIAN_POINT('Ctrl Pts',(-6.202779995708,3.424242069362,11.99733866132)); #50086=CARTESIAN_POINT('Origin',(-5.921201938253,4.4,10.22780486656)); #50087=CARTESIAN_POINT('',(-5.607596123494,3.748636702191,8.449257910793)); #50088=CARTESIAN_POINT('Origin',(-6.1,4.4,8.36243382196)); #50089=CARTESIAN_POINT('',(-5.63015370117699,3.77224239422088,8.19142371851061)); #50090=CARTESIAN_POINT('Ctrl Pts',(-5.60759613521986,3.74863745065839,8.44925797728308)); #50091=CARTESIAN_POINT('Ctrl Pts',(-5.60690733572749,3.74899526585437,8.44535158608367)); #50092=CARTESIAN_POINT('Ctrl Pts',(-5.60626513950523,3.74935309226442,8.44143699949644)); #50093=CARTESIAN_POINT('Ctrl Pts',(-5.60566964632695,3.74971092093924,8.43751531586743)); #50094=CARTESIAN_POINT('Ctrl Pts',(-5.60507415314866,3.75006874961405,8.43359363223842)); #50095=CARTESIAN_POINT('Ctrl Pts',(-5.60452536314251,3.75042658046957,8.42966485157776)); #50096=CARTESIAN_POINT('Ctrl Pts',(-5.60402337332334,3.75078440222244,8.42573009807291)); #50097=CARTESIAN_POINT('Ctrl Pts',(-5.60352138350417,3.75114222397532,8.42179534456803)); #50098=CARTESIAN_POINT('Ctrl Pts',(-5.60306619374024,3.75150003655766,8.41785461819872)); #50099=CARTESIAN_POINT('Ctrl Pts',(-5.60265790218418,3.75185783034344,8.41390903629356)); #50100=CARTESIAN_POINT('Ctrl Pts',(-5.60224961062814,3.75221562412921,8.40996345438848)); #50101=CARTESIAN_POINT('Ctrl Pts',(-5.60188821722058,3.7525733990613,8.40601301694509)); #50102=CARTESIAN_POINT('Ctrl Pts',(-5.60157381946074,3.75293114737613,8.40205884335457)); #50103=CARTESIAN_POINT('Ctrl Pts',(-5.60125942170089,3.75328889569096,8.39810466976396)); #50104=CARTESIAN_POINT('Ctrl Pts',(-5.60099201951068,3.75364661734459,8.39414676000422)); #50105=CARTESIAN_POINT('Ctrl Pts',(-5.600771712522,3.75400430740886,8.39018623305395)); #50106=CARTESIAN_POINT('Ctrl Pts',(-5.60055140553332,3.75436199747312,8.38622570610377)); #50107=CARTESIAN_POINT('Ctrl Pts',(-5.60037819367968,3.75471965591842,8.38226256201594)); #50108=CARTESIAN_POINT('Ctrl Pts',(-5.60025216960745,3.75507728117963,8.37829792064314)); #50109=CARTESIAN_POINT('Ctrl Pts',(-5.60012614553522,3.75543490644085,8.37433327927026)); #50110=CARTESIAN_POINT('Ctrl Pts',(-5.60004730916348,3.7557924984971,8.37036714040145)); #50111=CARTESIAN_POINT('Ctrl Pts',(-5.60001577968519,3.75615005949033,8.36640062320593)); #50112=CARTESIAN_POINT('Ctrl Pts',(-5.59998425020691,3.75650762048355,8.36243410601049)); #50113=CARTESIAN_POINT('Ctrl Pts',(-5.60000002757264,3.7568651504535,8.35846721173754)); #50114=CARTESIAN_POINT('Ctrl Pts',(-5.60006307407005,3.75722265539239,8.35450106031768)); #50115=CARTESIAN_POINT('Ctrl Pts',(-5.60012612056746,3.75758016033128,8.35053490889774)); #50116=CARTESIAN_POINT('Ctrl Pts',(-5.60023643620113,3.75793764028626,8.34656950092486)); #50117=CARTESIAN_POINT('Ctrl Pts',(-5.60039390897719,3.75829510282481,8.34260595816507)); #50118=CARTESIAN_POINT('Ctrl Pts',(-5.60055138175325,3.75865256536335,8.33864241540536)); #50119=CARTESIAN_POINT('Ctrl Pts',(-5.6007560116753,3.75901001050979,8.3346807377196)); #50120=CARTESIAN_POINT('Ctrl Pts',(-5.60100770466363,3.75936744669445,8.33072204700586)); #50121=CARTESIAN_POINT('Ctrl Pts',(-5.60125939765196,3.75972488287913,8.32676335629202)); #50122=CARTESIAN_POINT('Ctrl Pts',(-5.60155815370504,3.76008231013375,8.32280765259545)); #50123=CARTESIAN_POINT('Ctrl Pts',(-5.60190387345973,3.76043973734897,8.31885605769625)); #50124=CARTESIAN_POINT('Ctrl Pts',(-5.60224959321442,3.76079716456419,8.31490446279706)); #50125=CARTESIAN_POINT('Ctrl Pts',(-5.6026422766721,3.76115459176917,8.31095697667915)); #50126=CARTESIAN_POINT('Ctrl Pts',(-5.60308182689183,3.76151202785665,8.30701472133458)); #50127=CARTESIAN_POINT('Ctrl Pts',(-5.60352137711156,3.76186946394413,8.30307246599009)); #50128=CARTESIAN_POINT('Ctrl Pts',(-5.60400779408692,3.76222690894583,8.29913544146375)); #50129=CARTESIAN_POINT('Ctrl Pts',(-5.60454097565319,3.76258437129818,8.29520476894698)); #50130=CARTESIAN_POINT('Ctrl Pts',(-5.60507415721947,3.76294183365054,8.29127409643012)); #50131=CARTESIAN_POINT('Ctrl Pts',(-5.60565410339721,3.76329931337791,8.28734977578519)); #50132=CARTESIAN_POINT('Ctrl Pts',(-5.6062807296865,3.7636568180575,8.28343293118451)); #50133=CARTESIAN_POINT('Ctrl Pts',(-5.60690735597577,3.76401432273708,8.27951608658391)); #50134=CARTESIAN_POINT('Ctrl Pts',(-5.60758066226888,3.7643718524161,8.27560671861171)); #50135=CARTESIAN_POINT('Ctrl Pts',(-5.60830049123122,3.76472941309956,8.27170593673418)); #50136=CARTESIAN_POINT('Ctrl Pts',(-5.60902032019358,3.76508697378303,8.26780515485657)); #50137=CARTESIAN_POINT('Ctrl Pts',(-5.60978667165685,3.76544456551076,8.26391296031244)); #50138=CARTESIAN_POINT('Ctrl Pts',(-5.61059923389698,3.76580219043975,8.26003043457186)); #50139=CARTESIAN_POINT('Ctrl Pts',(-5.6114117961371,3.76615981536874,8.25614790883136)); #50140=CARTESIAN_POINT('Ctrl Pts',(-5.61227056927032,3.7665174734782,8.25227505170072)); #50141=CARTESIAN_POINT('Ctrl Pts',(-5.61317526759687,3.76687516321923,8.24841294993329)); #50142=CARTESIAN_POINT('Ctrl Pts',(-5.61407996592343,3.76723285296026,8.24455084816577)); #50143=CARTESIAN_POINT('Ctrl Pts',(-5.61503058949953,3.76759057430337,8.24069950182509)); #50144=CARTESIAN_POINT('Ctrl Pts',(-5.61602684589777,3.76794832233662,8.2368599955904)); #50145=CARTESIAN_POINT('Ctrl Pts',(-5.61702310229598,3.76830607036986,8.2330204893558)); #50146=CARTESIAN_POINT('Ctrl Pts',(-5.61806499159696,3.7686638450494,8.2291928232191)); #50147=CARTESIAN_POINT('Ctrl Pts',(-5.61915222340154,3.76902163862643,8.2253780826357)); #50148=CARTESIAN_POINT('Ctrl Pts',(-5.62023945520615,3.76937943220347,8.22156334205221)); #50149=CARTESIAN_POINT('Ctrl Pts',(-5.6213720295732,3.76973724462099,8.21776152702992)); #50150=CARTESIAN_POINT('Ctrl Pts',(-5.62254965581915,3.77009506626454,8.21397372088112)); #50151=CARTESIAN_POINT('Ctrl Pts',(-5.62372728206508,3.77045288790809,8.2101859147324)); #50152=CARTESIAN_POINT('Ctrl Pts',(-5.62494996032302,3.7708107187099,8.20641211746016)); #50153=CARTESIAN_POINT('Ctrl Pts',(-5.62621739983695,3.77116854739395,8.20265341932114)); #50154=CARTESIAN_POINT('Ctrl Pts',(-5.6274848393509,3.77152637607802,8.19889472118203)); #50155=CARTESIAN_POINT('Ctrl Pts',(-5.62879703999298,3.77188420256042,8.19515112216384)); #50156=CARTESIAN_POINT('Ctrl Pts',(-5.63015371278456,3.77224201789044,8.19142368662224)); #50157=CARTESIAN_POINT('',(-5.63015370117699,5.02775760577912,8.19142371851061)); #50158=CARTESIAN_POINT('',(-5.630153689607,3.772242769082,8.191423750297)); #50159=CARTESIAN_POINT('Ctrl Pts',(-5.60759613521984,5.05136254934161,8.44925797728308)); #50160=CARTESIAN_POINT('Ctrl Pts',(-5.60690733572748,5.05100473414563,8.44535158608367)); #50161=CARTESIAN_POINT('Ctrl Pts',(-5.60626513950518,5.05064690773558,8.44143699949645)); #50162=CARTESIAN_POINT('Ctrl Pts',(-5.60566964632687,5.05028907906076,8.43751531586745)); #50163=CARTESIAN_POINT('Ctrl Pts',(-5.60507415314855,5.04993125038595,8.43359363223844)); #50164=CARTESIAN_POINT('Ctrl Pts',(-5.60452536314239,5.04957341953043,8.42966485157779)); #50165=CARTESIAN_POINT('Ctrl Pts',(-5.60402337332326,5.04921559777756,8.42573009807293)); #50166=CARTESIAN_POINT('Ctrl Pts',(-5.60352138350413,5.04885777602469,8.42179534456804)); #50167=CARTESIAN_POINT('Ctrl Pts',(-5.60306619374029,5.04849996344234,8.41785461819872)); #50168=CARTESIAN_POINT('Ctrl Pts',(-5.60265790218427,5.04814216965656,8.41390903629356)); #50169=CARTESIAN_POINT('Ctrl Pts',(-5.60224961062826,5.04778437587079,8.40996345438847)); #50170=CARTESIAN_POINT('Ctrl Pts',(-5.60188821722068,5.0474266009387,8.40601301694508)); #50171=CARTESIAN_POINT('Ctrl Pts',(-5.60157381946084,5.04706885262387,8.40205884335456)); #50172=CARTESIAN_POINT('Ctrl Pts',(-5.60125942170099,5.04671110430904,8.39810466976395)); #50173=CARTESIAN_POINT('Ctrl Pts',(-5.60099201951079,5.04635338265541,8.39414676000422)); #50174=CARTESIAN_POINT('Ctrl Pts',(-5.6007717125221,5.04599569259114,8.39018623305395)); #50175=CARTESIAN_POINT('Ctrl Pts',(-5.60055140553342,5.04563800252688,8.38622570610376)); #50176=CARTESIAN_POINT('Ctrl Pts',(-5.60037819367976,5.04528034408158,8.38226256201594)); #50177=CARTESIAN_POINT('Ctrl Pts',(-5.60025216960751,5.04492271882037,8.37829792064314)); #50178=CARTESIAN_POINT('Ctrl Pts',(-5.60012614553526,5.04456509355915,8.37433327927026)); #50179=CARTESIAN_POINT('Ctrl Pts',(-5.60004730916348,5.0442075015029,8.37036714040145)); #50180=CARTESIAN_POINT('Ctrl Pts',(-5.60001577968516,5.04384994050967,8.36640062320593)); #50181=CARTESIAN_POINT('Ctrl Pts',(-5.59998425020684,5.04349237951645,8.36243410601049)); #50182=CARTESIAN_POINT('Ctrl Pts',(-5.60000002757255,5.0431348495465,8.35846721173753)); #50183=CARTESIAN_POINT('Ctrl Pts',(-5.60006307406998,5.04277734460762,8.35450106031768)); #50184=CARTESIAN_POINT('Ctrl Pts',(-5.60012612056741,5.04241983966873,8.35053490889774)); #50185=CARTESIAN_POINT('Ctrl Pts',(-5.60023643620115,5.04206235971374,8.34656950092486)); #50186=CARTESIAN_POINT('Ctrl Pts',(-5.60039390897725,5.04170489717519,8.34260595816507)); #50187=CARTESIAN_POINT('Ctrl Pts',(-5.60055138175335,5.04134743463665,8.33864241540536)); #50188=CARTESIAN_POINT('Ctrl Pts',(-5.60075601167541,5.04098998949022,8.33468073771961)); #50189=CARTESIAN_POINT('Ctrl Pts',(-5.60100770466374,5.04063255330555,8.33072204700586)); #50190=CARTESIAN_POINT('Ctrl Pts',(-5.60125939765208,5.04027511712087,8.32676335629203)); #50191=CARTESIAN_POINT('Ctrl Pts',(-5.60155815370516,5.03991768986625,8.32280765259546)); #50192=CARTESIAN_POINT('Ctrl Pts',(-5.60190387345984,5.03956026265103,8.31885605769626)); #50193=CARTESIAN_POINT('Ctrl Pts',(-5.60224959321452,5.03920283543581,8.31490446279707)); #50194=CARTESIAN_POINT('Ctrl Pts',(-5.60264227667216,5.03884540823083,8.31095697667916)); #50195=CARTESIAN_POINT('Ctrl Pts',(-5.60308182689186,5.03848797214335,8.30701472133458)); #50196=CARTESIAN_POINT('Ctrl Pts',(-5.60352137711156,5.03813053605587,8.30307246599009)); #50197=CARTESIAN_POINT('Ctrl Pts',(-5.6040077940869,5.03777309105417,8.29913544146375)); #50198=CARTESIAN_POINT('Ctrl Pts',(-5.60454097565315,5.03741562870182,8.29520476894698)); #50199=CARTESIAN_POINT('Ctrl Pts',(-5.60507415721941,5.03705816634946,8.29127409643012)); #50200=CARTESIAN_POINT('Ctrl Pts',(-5.60565410339712,5.03670068662209,8.28734977578518)); #50201=CARTESIAN_POINT('Ctrl Pts',(-5.60628072968639,5.0363431819425,8.28343293118449)); #50202=CARTESIAN_POINT('Ctrl Pts',(-5.60690735597565,5.03598567726292,8.27951608658389)); #50203=CARTESIAN_POINT('Ctrl Pts',(-5.60758066226875,5.0356281475839,8.27560671861169)); #50204=CARTESIAN_POINT('Ctrl Pts',(-5.60830049123112,5.03527058690044,8.27170593673417)); #50205=CARTESIAN_POINT('Ctrl Pts',(-5.6090203201935,5.03491302621697,8.26780515485656)); #50206=CARTESIAN_POINT('Ctrl Pts',(-5.60978667165682,5.03455543448924,8.26391296031243)); #50207=CARTESIAN_POINT('Ctrl Pts',(-5.610599233897,5.03419780956025,8.26003043457186)); #50208=CARTESIAN_POINT('Ctrl Pts',(-5.61141179613716,5.03384018463126,8.25614790883137)); #50209=CARTESIAN_POINT('Ctrl Pts',(-5.61227056927041,5.03348252652181,8.25227505170075)); #50210=CARTESIAN_POINT('Ctrl Pts',(-5.61317526759697,5.03312483678077,8.24841294993331)); #50211=CARTESIAN_POINT('Ctrl Pts',(-5.61407996592355,5.03276714703974,8.2445508481658)); #50212=CARTESIAN_POINT('Ctrl Pts',(-5.61503058949964,5.03240942569663,8.24069950182512)); #50213=CARTESIAN_POINT('Ctrl Pts',(-5.61602684589785,5.03205167766338,8.23685999559042)); #50214=CARTESIAN_POINT('Ctrl Pts',(-5.61702310229604,5.03169392963014,8.23302048935582)); #50215=CARTESIAN_POINT('Ctrl Pts',(-5.61806499159698,5.0313361549506,8.22919282321911)); #50216=CARTESIAN_POINT('Ctrl Pts',(-5.61915222340155,5.03097836137357,8.2253780826357)); #50217=CARTESIAN_POINT('Ctrl Pts',(-5.62023945520614,5.03062056779653,8.22156334205221)); #50218=CARTESIAN_POINT('Ctrl Pts',(-5.62137202957318,5.03026275537901,8.21776152702991)); #50219=CARTESIAN_POINT('Ctrl Pts',(-5.6225496558191,5.02990493373547,8.21397372088119)); #50220=CARTESIAN_POINT('Ctrl Pts',(-5.62372728206498,5.02954711209193,8.21018591473254)); #50221=CARTESIAN_POINT('Ctrl Pts',(-5.62494996032283,5.02918928129013,8.20641211746045)); #50222=CARTESIAN_POINT('Ctrl Pts',(-5.62621739983677,5.02883145260607,8.20265341932138)); #50223=CARTESIAN_POINT('Ctrl Pts',(-5.62748483935074,5.02847362392201,8.19889472118224)); #50224=CARTESIAN_POINT('Ctrl Pts',(-5.62879703999296,5.02811579743958,8.19515112216383)); #50225=CARTESIAN_POINT('Ctrl Pts',(-5.63015371278465,5.02775798210956,8.19142368662227)); #50226=CARTESIAN_POINT('Ctrl Pts',(-5.586386796832,5.054982754934,8.492672975942)); #50227=CARTESIAN_POINT('Ctrl Pts',(-5.55725573642,5.043709739755,8.37779126186)); #50228=CARTESIAN_POINT('Ctrl Pts',(-5.568187987908,5.035403226513,8.252966270117)); #50229=CARTESIAN_POINT('Ctrl Pts',(-5.616845104293,5.024128601964,8.144897373397)); #50230=CARTESIAN_POINT('Ctrl Pts',(-5.702639660183,5.05381741696,8.463274583275)); #50231=CARTESIAN_POINT('Ctrl Pts',(-5.680006274884,5.047290261586,8.374088085035)); #50232=CARTESIAN_POINT('Ctrl Pts',(-5.688425941659,5.031820107232,8.277950631593)); #50233=CARTESIAN_POINT('Ctrl Pts',(-5.726218010538,5.025297803565,8.194055904178)); #50234=CARTESIAN_POINT('Ctrl Pts',(-5.818879542158,5.052652078986,8.433824927174)); #50235=CARTESIAN_POINT('Ctrl Pts',(-5.802808097337,5.050870783417,8.370539529645)); #50236=CARTESIAN_POINT('Ctrl Pts',(-5.808741359756,5.028236987951,8.302791548503)); #50237=CARTESIAN_POINT('Ctrl Pts',(-5.835569150169,5.026467005167,8.243262821364)); #50238=CARTESIAN_POINT('Ctrl Pts',(-5.935106408851,5.051486741012,8.40432401624)); #50239=CARTESIAN_POINT('Ctrl Pts',(-5.925661444123,5.054451305248,8.367145526642)); #50240=CARTESIAN_POINT('Ctrl Pts',(-5.929134467861,5.02465386867,8.327489131123)); #50241=CARTESIAN_POINT('Ctrl Pts',(-5.94489849108,5.027636206769,8.292518110495)); #50242=CARTESIAN_POINT('',(-5.91206147878015,5.02775732608924,8.29402978522404)); #50243=CARTESIAN_POINT('',(-5.630153689607,5.027757230918,8.191423750297)); #50244=CARTESIAN_POINT('Ctrl Pts',(-5.90303845238853,5.05136310689352,8.397163474456)); #50245=CARTESIAN_POINT('Ctrl Pts',(-5.90000607728953,5.04978784738871,8.37996602934753)); #50246=CARTESIAN_POINT('Ctrl Pts',(-5.89924028498224,5.04470133353443,8.36246466584742)); #50247=CARTESIAN_POINT('Ctrl Pts',(-5.90227265614408,5.03445012435922,8.32764572388337)); #50248=CARTESIAN_POINT('Ctrl Pts',(-5.9060707297766,5.02933746888351,8.31048922840526)); #50249=CARTESIAN_POINT('Ctrl Pts',(-5.91206148176287,5.02775742275957,8.29402977702967)); #50250=CARTESIAN_POINT('Origin',(-6.1,4.4,8.36243382196)); #50251=CARTESIAN_POINT('',(-5.91206147878015,3.77224267391076,8.29402978522404)); #50252=CARTESIAN_POINT('',(-5.912061475843,5.027757230918,8.294029793294)); #50253=CARTESIAN_POINT('Ctrl Pts',(-5.90303845238853,3.74863689310648,8.39716347445601)); #50254=CARTESIAN_POINT('Ctrl Pts',(-5.90000607728953,3.75021215261128,8.37996602934754)); #50255=CARTESIAN_POINT('Ctrl Pts',(-5.89924028498224,3.75529866646556,8.36246466584742)); #50256=CARTESIAN_POINT('Ctrl Pts',(-5.90227265614408,3.76554987564078,8.32764572388336)); #50257=CARTESIAN_POINT('Ctrl Pts',(-5.90607072977661,3.77066253111649,8.31048922840525)); #50258=CARTESIAN_POINT('Ctrl Pts',(-5.91206148176287,3.77224257724043,8.29402977702967)); #50259=CARTESIAN_POINT('Ctrl Pts',(-5.935106408851,3.748513258988,8.40432401624)); #50260=CARTESIAN_POINT('Ctrl Pts',(-5.925661444123,3.745548694752,8.367145526642)); #50261=CARTESIAN_POINT('Ctrl Pts',(-5.929134467861,3.77534613133,8.327489131123)); #50262=CARTESIAN_POINT('Ctrl Pts',(-5.94489849108,3.772363793231,8.292518110495)); #50263=CARTESIAN_POINT('Ctrl Pts',(-5.818879542158,3.747347921014,8.433824927174)); #50264=CARTESIAN_POINT('Ctrl Pts',(-5.802808097337,3.749129216583,8.370539529645)); #50265=CARTESIAN_POINT('Ctrl Pts',(-5.808741359756,3.771763012049,8.302791548503)); #50266=CARTESIAN_POINT('Ctrl Pts',(-5.835569150169,3.773532994833,8.243262821364)); #50267=CARTESIAN_POINT('Ctrl Pts',(-5.702639660183,3.74618258304,8.463274583275)); #50268=CARTESIAN_POINT('Ctrl Pts',(-5.680006274884,3.752709738414,8.374088085035)); #50269=CARTESIAN_POINT('Ctrl Pts',(-5.688425941659,3.768179892768,8.277950631593)); #50270=CARTESIAN_POINT('Ctrl Pts',(-5.726218010538,3.774702196435,8.194055904178)); #50271=CARTESIAN_POINT('Ctrl Pts',(-5.586386796832,3.745017245066,8.492672975942)); #50272=CARTESIAN_POINT('Ctrl Pts',(-5.55725573642,3.756290260245,8.37779126186)); #50273=CARTESIAN_POINT('Ctrl Pts',(-5.568187987908,3.764596773487,8.252966270117)); #50274=CARTESIAN_POINT('Ctrl Pts',(-5.616845104293,3.775871398036,8.144897373397)); #50275=CARTESIAN_POINT('',(-5.912061475843,3.772242769082,8.294029793294)); #50276=CARTESIAN_POINT('Origin',(-6.013406889876,3.836121384541,7.577014896647)); #50277=CARTESIAN_POINT('',(-6.052491244465,3.883585795927,7.031060854937)); #50278=CARTESIAN_POINT('',(-5.630153689607,3.772242769082,8.191423750297)); #50279=CARTESIAN_POINT('',(-6.334399030701,3.883585795927,7.133666897935)); #50280=CARTESIAN_POINT('',(-5.912061475843,3.772242769082,8.294029793294)); #50281=CARTESIAN_POINT('',(-6.052491244465,3.883585795927,7.031060854937)); #50282=CARTESIAN_POINT('Origin',(-6.015614684881,4.082777683841,7.036752412073)); #50283=CARTESIAN_POINT('',(-6.11475230391,4.082777683841,6.86)); #50284=CARTESIAN_POINT('',(-6.396660090146,4.082777683841,6.962606042998)); #50285=CARTESIAN_POINT('',(-6.11475230391,4.082777683841,6.86)); #50286=CARTESIAN_POINT('Origin',(-6.046348275245,4.082777683841,7.047938524157)); #50287=CARTESIAN_POINT('Origin',(-6.328256061481,4.082777683841,7.150544567155)); #50288=CARTESIAN_POINT('Origin',(-6.154360782994,4.4,7.628317918146)); #50289=CARTESIAN_POINT('',(-6.334399030701,4.916414204073,7.133666897935)); #50290=CARTESIAN_POINT('',(-6.396660090146,4.717222316159,6.962606042998)); #50291=CARTESIAN_POINT('Origin',(-6.328256061481,4.717222316159,7.150544567155)); #50292=CARTESIAN_POINT('',(-6.396660090146,4.717222316159,6.962606042998)); #50293=CARTESIAN_POINT('',(-5.912061475843,5.027757230918,8.294029793294)); #50294=CARTESIAN_POINT('Origin',(-6.361760938176,4.717222316159,7.162739344975)); #50295=CARTESIAN_POINT('',(-6.11475230391,4.717222316159,6.86)); #50296=CARTESIAN_POINT('',(-6.396660090146,4.717222316159,6.962606042998)); #50297=CARTESIAN_POINT('',(-6.052491244465,4.916414204073,7.031060854937)); #50298=CARTESIAN_POINT('',(-6.334399030701,4.916414204073,7.133666897935)); #50299=CARTESIAN_POINT('Origin',(-6.046348275245,4.717222316159,7.047938524157)); #50300=CARTESIAN_POINT('Origin',(-5.872452996759,4.4,7.525711875148)); #50301=CARTESIAN_POINT('',(-5.630153689607,5.027757230918,8.191423750297)); #50302=CARTESIAN_POINT('',(-6.11475230391,4.082777683841,6.86)); #50303=CARTESIAN_POINT('Origin',(-6.11475230391,4.4,6.86)); #50304=CARTESIAN_POINT('Origin',(-6.013406889876,4.963878615459,7.577014896647)); #50305=CARTESIAN_POINT('Origin',(-6.220423643081,5.671428571429,12.06)); #50306=CARTESIAN_POINT('Origin',(0.,0.,0.)); #50307=CARTESIAN_POINT('',(4.5,3.25,0.)); #50308=CARTESIAN_POINT('',(6.15,3.25,0.)); #50309=CARTESIAN_POINT('',(4.5,3.25,0.)); #50310=CARTESIAN_POINT('',(6.15,0.4,0.)); #50311=CARTESIAN_POINT('',(6.15,0.4,0.)); #50312=CARTESIAN_POINT('',(5.5,0.4,0.)); #50313=CARTESIAN_POINT('',(5.5,0.4,0.)); #50314=CARTESIAN_POINT('',(5.5,0.,0.)); #50315=CARTESIAN_POINT('',(5.5,0.,0.)); #50316=CARTESIAN_POINT('',(4.5,0.,0.)); #50317=CARTESIAN_POINT('',(4.5,0.,0.)); #50318=CARTESIAN_POINT('',(4.5,0.,0.)); #50319=CARTESIAN_POINT('Origin',(0.,0.,0.)); #50320=CARTESIAN_POINT('',(-4.5,3.25,0.)); #50321=CARTESIAN_POINT('',(-6.15,3.25,0.)); #50322=CARTESIAN_POINT('',(-4.5,0.,0.)); #50323=CARTESIAN_POINT('',(-4.5,3.25,0.)); #50324=CARTESIAN_POINT('',(-5.5,0.,0.)); #50325=CARTESIAN_POINT('',(-5.5,0.,0.)); #50326=CARTESIAN_POINT('',(-5.5,0.4,0.)); #50327=CARTESIAN_POINT('',(-5.5,0.4,0.)); #50328=CARTESIAN_POINT('',(-6.15,0.4,0.)); #50329=CARTESIAN_POINT('Origin',(0.,0.,0.)); #50330=CARTESIAN_POINT('',(6.25,2.81,0.)); #50331=CARTESIAN_POINT('',(6.55,2.81,0.)); #50332=CARTESIAN_POINT('',(6.25,2.81,0.)); #50333=CARTESIAN_POINT('',(6.55,1.29,0.)); #50334=CARTESIAN_POINT('',(6.55,1.29,0.)); #50335=CARTESIAN_POINT('',(6.25,1.29,0.)); #50336=CARTESIAN_POINT('',(6.55,1.29,0.)); #50337=CARTESIAN_POINT('',(6.25,1.29,0.)); #50338=CARTESIAN_POINT('Origin',(0.,0.,0.)); #50339=CARTESIAN_POINT('',(-6.55,2.81,0.)); #50340=CARTESIAN_POINT('',(-6.55,1.29,0.)); #50341=CARTESIAN_POINT('Origin',(0.,0.,0.)); #50342=CARTESIAN_POINT('',(6.55,4.72,0.)); #50343=CARTESIAN_POINT('',(5.55,4.72,0.)); #50344=CARTESIAN_POINT('',(6.55,4.72,0.)); #50345=CARTESIAN_POINT('',(5.55,5.99,0.)); #50346=CARTESIAN_POINT('',(5.55,5.99,0.)); #50347=CARTESIAN_POINT('',(-5.55,5.99,0.)); #50348=CARTESIAN_POINT('',(-5.55,5.99,0.)); #50349=CARTESIAN_POINT('',(-5.55,4.72,0.)); #50350=CARTESIAN_POINT('',(6.55,4.72,0.)); #50351=CARTESIAN_POINT('Origin',(5.55,3.25,0.)); #50352=CARTESIAN_POINT('',(-5.55,3.25,2.92)); #50353=CARTESIAN_POINT('',(-5.55,3.25,0.65)); #50354=CARTESIAN_POINT('',(5.55,3.25,2.92)); #50355=CARTESIAN_POINT('',(5.55,3.25,2.92)); #50356=CARTESIAN_POINT('',(5.55,3.25,0.65)); #50357=CARTESIAN_POINT('',(5.55,3.25,0.65)); #50358=CARTESIAN_POINT('',(6.15,3.25,0.65)); #50359=CARTESIAN_POINT('',(6.15,3.25,0.65)); #50360=CARTESIAN_POINT('',(6.15,3.25,0.)); #50361=CARTESIAN_POINT('',(4.5,3.25,0.5)); #50362=CARTESIAN_POINT('',(4.5,3.25,0.)); #50363=CARTESIAN_POINT('',(4.1,3.25,0.5)); #50364=CARTESIAN_POINT('',(4.5,3.25,0.5)); #50365=CARTESIAN_POINT('',(3.85,3.25,0.75)); #50366=CARTESIAN_POINT('',(4.1,3.25,0.5)); #50367=CARTESIAN_POINT('',(3.85,3.25,2.12)); #50368=CARTESIAN_POINT('',(3.85,3.25,0.75)); #50369=CARTESIAN_POINT('',(4.,3.25,2.12)); #50370=CARTESIAN_POINT('',(3.85,3.25,2.12)); #50371=CARTESIAN_POINT('',(4.,3.25,2.42)); #50372=CARTESIAN_POINT('',(4.,3.25,2.42)); #50373=CARTESIAN_POINT('',(3.85,3.25,2.42)); #50374=CARTESIAN_POINT('',(3.85,3.25,2.42)); #50375=CARTESIAN_POINT('',(3.85,3.25,2.5)); #50376=CARTESIAN_POINT('',(3.85,3.25,2.42)); #50377=CARTESIAN_POINT('',(3.15,3.25,2.5)); #50378=CARTESIAN_POINT('',(3.85,3.25,2.5)); #50379=CARTESIAN_POINT('',(3.15,3.25,2.42)); #50380=CARTESIAN_POINT('',(3.15,3.25,2.5)); #50381=CARTESIAN_POINT('',(3.,3.25,2.42)); #50382=CARTESIAN_POINT('',(3.,3.25,2.42)); #50383=CARTESIAN_POINT('',(3.,3.25,2.12)); #50384=CARTESIAN_POINT('',(3.,3.25,2.42)); #50385=CARTESIAN_POINT('',(3.15,3.25,2.12)); #50386=CARTESIAN_POINT('',(3.,3.25,2.12)); #50387=CARTESIAN_POINT('',(3.15,3.25,0.75)); #50388=CARTESIAN_POINT('',(3.15,3.25,2.12)); #50389=CARTESIAN_POINT('',(2.9,3.25,0.5)); #50390=CARTESIAN_POINT('',(3.15,3.25,0.75)); #50391=CARTESIAN_POINT('',(1.6,3.25,0.5)); #50392=CARTESIAN_POINT('',(2.9,3.25,0.5)); #50393=CARTESIAN_POINT('',(1.35,3.25,0.75)); #50394=CARTESIAN_POINT('',(1.6,3.25,0.5)); #50395=CARTESIAN_POINT('',(1.35,3.25,2.12)); #50396=CARTESIAN_POINT('',(1.35,3.25,0.75)); #50397=CARTESIAN_POINT('',(1.5,3.25,2.12)); #50398=CARTESIAN_POINT('',(1.35,3.25,2.12)); #50399=CARTESIAN_POINT('',(1.5,3.25,2.42)); #50400=CARTESIAN_POINT('',(1.5,3.25,2.42)); #50401=CARTESIAN_POINT('',(1.35,3.25,2.42)); #50402=CARTESIAN_POINT('',(1.35,3.25,2.42)); #50403=CARTESIAN_POINT('',(1.35,3.25,2.5)); #50404=CARTESIAN_POINT('',(1.35,3.25,2.42)); #50405=CARTESIAN_POINT('',(0.65,3.25,2.5)); #50406=CARTESIAN_POINT('',(1.35,3.25,2.5)); #50407=CARTESIAN_POINT('',(0.65,3.25,2.42)); #50408=CARTESIAN_POINT('',(0.65,3.25,2.5)); #50409=CARTESIAN_POINT('',(0.5,3.25,2.42)); #50410=CARTESIAN_POINT('',(0.5,3.25,2.42)); #50411=CARTESIAN_POINT('',(0.5,3.25,2.12)); #50412=CARTESIAN_POINT('',(0.5,3.25,2.42)); #50413=CARTESIAN_POINT('',(0.65,3.25,2.12)); #50414=CARTESIAN_POINT('',(0.5,3.25,2.12)); #50415=CARTESIAN_POINT('',(0.65,3.25,0.75)); #50416=CARTESIAN_POINT('',(0.65,3.25,2.12)); #50417=CARTESIAN_POINT('',(0.4,3.25,0.5)); #50418=CARTESIAN_POINT('',(0.65,3.25,0.75)); #50419=CARTESIAN_POINT('',(-0.4,3.25,0.5)); #50420=CARTESIAN_POINT('',(0.4,3.25,0.5)); #50421=CARTESIAN_POINT('',(-0.65,3.25,0.75)); #50422=CARTESIAN_POINT('',(-0.4,3.25,0.5)); #50423=CARTESIAN_POINT('',(-0.65,3.25,2.12)); #50424=CARTESIAN_POINT('',(-0.65,3.25,0.75)); #50425=CARTESIAN_POINT('',(-0.5,3.25,2.12)); #50426=CARTESIAN_POINT('',(-0.65,3.25,2.12)); #50427=CARTESIAN_POINT('',(-0.5,3.25,2.42)); #50428=CARTESIAN_POINT('',(-0.5,3.25,2.42)); #50429=CARTESIAN_POINT('',(-0.65,3.25,2.42)); #50430=CARTESIAN_POINT('',(-0.65,3.25,2.42)); #50431=CARTESIAN_POINT('',(-0.65,3.25,2.5)); #50432=CARTESIAN_POINT('',(-0.65,3.25,2.42)); #50433=CARTESIAN_POINT('',(-1.35,3.25,2.5)); #50434=CARTESIAN_POINT('',(-0.65,3.25,2.5)); #50435=CARTESIAN_POINT('',(-1.35,3.25,2.42)); #50436=CARTESIAN_POINT('',(-1.35,3.25,2.5)); #50437=CARTESIAN_POINT('',(-1.5,3.25,2.42)); #50438=CARTESIAN_POINT('',(-1.5,3.25,2.42)); #50439=CARTESIAN_POINT('',(-1.5,3.25,2.12)); #50440=CARTESIAN_POINT('',(-1.5,3.25,2.42)); #50441=CARTESIAN_POINT('',(-1.35,3.25,2.12)); #50442=CARTESIAN_POINT('',(-1.5,3.25,2.12)); #50443=CARTESIAN_POINT('',(-1.35,3.25,0.75)); #50444=CARTESIAN_POINT('',(-1.35,3.25,2.12)); #50445=CARTESIAN_POINT('',(-1.6,3.25,0.5)); #50446=CARTESIAN_POINT('',(-1.35,3.25,0.75)); #50447=CARTESIAN_POINT('',(-2.9,3.25,0.5)); #50448=CARTESIAN_POINT('',(-1.6,3.25,0.5)); #50449=CARTESIAN_POINT('',(-3.15,3.25,0.75)); #50450=CARTESIAN_POINT('',(-2.9,3.25,0.5)); #50451=CARTESIAN_POINT('',(-3.15,3.25,2.12)); #50452=CARTESIAN_POINT('',(-3.15,3.25,0.75)); #50453=CARTESIAN_POINT('',(-3.,3.25,2.12)); #50454=CARTESIAN_POINT('',(-3.15,3.25,2.12)); #50455=CARTESIAN_POINT('',(-3.,3.25,2.42)); #50456=CARTESIAN_POINT('',(-3.,3.25,2.42)); #50457=CARTESIAN_POINT('',(-3.15,3.25,2.42)); #50458=CARTESIAN_POINT('',(-3.15,3.25,2.42)); #50459=CARTESIAN_POINT('',(-3.15,3.25,2.5)); #50460=CARTESIAN_POINT('',(-3.15,3.25,2.42)); #50461=CARTESIAN_POINT('',(-3.85,3.25,2.5)); #50462=CARTESIAN_POINT('',(-3.15,3.25,2.5)); #50463=CARTESIAN_POINT('',(-3.85,3.25,2.42)); #50464=CARTESIAN_POINT('',(-3.85,3.25,2.5)); #50465=CARTESIAN_POINT('',(-4.,3.25,2.42)); #50466=CARTESIAN_POINT('',(-4.,3.25,2.42)); #50467=CARTESIAN_POINT('',(-4.,3.25,2.12)); #50468=CARTESIAN_POINT('',(-4.,3.25,2.42)); #50469=CARTESIAN_POINT('',(-3.85,3.25,2.12)); #50470=CARTESIAN_POINT('',(-4.,3.25,2.12)); #50471=CARTESIAN_POINT('',(-3.85,3.25,0.75)); #50472=CARTESIAN_POINT('',(-3.85,3.25,2.12)); #50473=CARTESIAN_POINT('',(-4.1,3.25,0.5)); #50474=CARTESIAN_POINT('',(-3.85,3.25,0.75)); #50475=CARTESIAN_POINT('',(-4.5,3.25,0.5)); #50476=CARTESIAN_POINT('',(-4.1,3.25,0.5)); #50477=CARTESIAN_POINT('',(-4.5,3.25,0.)); #50478=CARTESIAN_POINT('Origin',(-5.55,3.25,0.)); #50479=CARTESIAN_POINT('',(-5.55,5.99,2.92)); #50480=CARTESIAN_POINT('',(-5.55,5.99,0.)); #50481=CARTESIAN_POINT('',(-5.55,3.25,2.92)); #50482=CARTESIAN_POINT('Origin',(0.,0.,2.92)); #50483=CARTESIAN_POINT('',(5.55,5.99,2.92)); #50484=CARTESIAN_POINT('',(5.55,5.99,2.92)); #50485=CARTESIAN_POINT('',(-5.55,5.99,2.92)); #50486=CARTESIAN_POINT('',(2.86,5.47,2.92)); #50487=CARTESIAN_POINT('',(2.86,3.38,2.92)); #50488=CARTESIAN_POINT('',(2.86,5.47,2.92)); #50489=CARTESIAN_POINT('',(4.14,3.38,2.92)); #50490=CARTESIAN_POINT('',(2.86,3.38,2.92)); #50491=CARTESIAN_POINT('',(4.14,5.47,2.92)); #50492=CARTESIAN_POINT('',(4.14,5.47,2.92)); #50493=CARTESIAN_POINT('',(4.14,5.47,2.92)); #50494=CARTESIAN_POINT('',(0.36,5.47,2.92)); #50495=CARTESIAN_POINT('',(0.36,3.38,2.92)); #50496=CARTESIAN_POINT('',(0.36,5.47,2.92)); #50497=CARTESIAN_POINT('',(1.64,3.38,2.92)); #50498=CARTESIAN_POINT('',(0.36,3.38,2.92)); #50499=CARTESIAN_POINT('',(1.64,5.47,2.92)); #50500=CARTESIAN_POINT('',(1.64,5.47,2.92)); #50501=CARTESIAN_POINT('',(1.64,5.47,2.92)); #50502=CARTESIAN_POINT('',(-4.14,3.38,2.92)); #50503=CARTESIAN_POINT('',(-2.86,3.38,2.92)); #50504=CARTESIAN_POINT('',(-4.14,3.38,2.92)); #50505=CARTESIAN_POINT('',(-2.86,5.47,2.92)); #50506=CARTESIAN_POINT('',(-2.86,5.47,2.92)); #50507=CARTESIAN_POINT('',(-4.14,5.47,2.92)); #50508=CARTESIAN_POINT('',(-2.86,5.47,2.92)); #50509=CARTESIAN_POINT('',(-4.14,5.47,2.92)); #50510=CARTESIAN_POINT('',(-1.64,3.38,2.92)); #50511=CARTESIAN_POINT('',(-0.36,3.38,2.92)); #50512=CARTESIAN_POINT('',(-1.64,3.38,2.92)); #50513=CARTESIAN_POINT('',(-0.36,5.47,2.92)); #50514=CARTESIAN_POINT('',(-0.36,5.47,2.92)); #50515=CARTESIAN_POINT('',(-1.64,5.47,2.92)); #50516=CARTESIAN_POINT('',(-0.36,5.47,2.92)); #50517=CARTESIAN_POINT('',(-1.64,5.47,2.92)); #50518=CARTESIAN_POINT('Origin',(-5.55,5.99,0.)); #50519=CARTESIAN_POINT('',(5.55,5.99,0.)); #50520=CARTESIAN_POINT('Origin',(5.55,5.99,0.)); #50521=CARTESIAN_POINT('',(5.55,4.62,0.1)); #50522=CARTESIAN_POINT('',(5.55,4.72,0.)); #50523=CARTESIAN_POINT('',(5.55,4.62,0.65)); #50524=CARTESIAN_POINT('',(5.55,4.62,0.1)); #50525=CARTESIAN_POINT('',(5.55,3.25,0.65)); #50526=CARTESIAN_POINT('Origin',(6.05,4.67,0.05)); #50527=CARTESIAN_POINT('',(6.55,4.62,0.1)); #50528=CARTESIAN_POINT('',(6.55,4.62,0.1)); #50529=CARTESIAN_POINT('',(6.55,4.62,0.1)); #50530=CARTESIAN_POINT('Origin',(5.55,4.62,0.)); #50531=CARTESIAN_POINT('',(6.55,4.62,1.3)); #50532=CARTESIAN_POINT('',(6.55,4.62,1.3)); #50533=CARTESIAN_POINT('',(6.26,4.62,1.3)); #50534=CARTESIAN_POINT('',(6.26,4.62,1.3)); #50535=CARTESIAN_POINT('',(6.25,4.62,1.3)); #50536=CARTESIAN_POINT('',(6.26,4.62,1.3)); #50537=CARTESIAN_POINT('',(6.25,4.62,1.03)); #50538=CARTESIAN_POINT('',(6.25,4.62,1.03)); #50539=CARTESIAN_POINT('',(6.25,4.62,0.65)); #50540=CARTESIAN_POINT('',(6.25,4.62,0.65)); #50541=CARTESIAN_POINT('',(5.55,4.62,0.65)); #50542=CARTESIAN_POINT('Origin',(0.,0.,0.65)); #50543=CARTESIAN_POINT('',(6.15,4.42,0.65)); #50544=CARTESIAN_POINT('',(6.25,4.42,0.65)); #50545=CARTESIAN_POINT('',(6.15,4.42,0.65)); #50546=CARTESIAN_POINT('',(6.15,3.25,0.65)); #50547=CARTESIAN_POINT('',(6.25,4.42,0.65)); #50548=CARTESIAN_POINT('Origin',(6.25,0.,0.)); #50549=CARTESIAN_POINT('',(6.25,4.42,1.03)); #50550=CARTESIAN_POINT('',(6.25,4.42,1.03)); #50551=CARTESIAN_POINT('',(6.25,4.42,1.03)); #50552=CARTESIAN_POINT('Origin',(6.15,4.92,1.03)); #50553=CARTESIAN_POINT('',(6.25,4.92,1.03)); #50554=CARTESIAN_POINT('',(6.25,4.92,1.03)); #50555=CARTESIAN_POINT('',(6.15,4.92,1.03)); #50556=CARTESIAN_POINT('',(6.15,4.92,1.03)); #50557=CARTESIAN_POINT('',(6.15,4.42,1.03)); #50558=CARTESIAN_POINT('',(6.15,4.92,1.03)); #50559=CARTESIAN_POINT('',(6.15,4.42,1.03)); #50560=CARTESIAN_POINT('Origin',(6.15,4.42,1.03)); #50561=CARTESIAN_POINT('',(6.15,4.42,0.65)); #50562=CARTESIAN_POINT('Origin',(6.15,0.4,0.)); #50563=CARTESIAN_POINT('',(6.15,4.92,1.53)); #50564=CARTESIAN_POINT('',(6.15,4.92,1.53)); #50565=CARTESIAN_POINT('',(6.15,6.57,1.53)); #50566=CARTESIAN_POINT('',(6.15,0.4,5.1)); #50567=CARTESIAN_POINT('',(6.15,0.4,5.1)); #50568=CARTESIAN_POINT('',(6.15,0.4,0.)); #50569=CARTESIAN_POINT('',(6.15,3.12,2.36)); #50570=CARTESIAN_POINT('',(6.15,4.32,2.36)); #50571=CARTESIAN_POINT('',(6.15,3.12,2.36)); #50572=CARTESIAN_POINT('',(6.15,3.12,4.57)); #50573=CARTESIAN_POINT('',(6.15,3.12,4.57)); #50574=CARTESIAN_POINT('',(6.15,4.32,4.57)); #50575=CARTESIAN_POINT('',(6.15,4.32,4.57)); #50576=CARTESIAN_POINT('',(6.15,4.32,2.36)); #50577=CARTESIAN_POINT('Origin',(6.15,4.32,2.36)); #50578=CARTESIAN_POINT('',(6.25,4.32,2.36)); #50579=CARTESIAN_POINT('',(6.15,4.32,2.36)); #50580=CARTESIAN_POINT('',(6.25,4.32,4.57)); #50581=CARTESIAN_POINT('',(6.15,4.32,4.57)); #50582=CARTESIAN_POINT('',(6.25,4.32,2.36)); #50583=CARTESIAN_POINT('Origin',(6.25,6.71,1.54)); #50584=CARTESIAN_POINT('',(6.25,1.29,4.23)); #50585=CARTESIAN_POINT('',(6.25,1.29,4.23)); #50586=CARTESIAN_POINT('',(6.25,-0.01824646474114,4.298562291972)); #50587=CARTESIAN_POINT('',(6.25,-0.01824646474114,4.298562291972)); #50588=CARTESIAN_POINT('',(6.25,-0.01824646474114,5.661437708028)); #50589=CARTESIAN_POINT('',(6.25,-0.01824646474114,5.661437708028)); #50590=CARTESIAN_POINT('',(6.25,1.29,5.73)); #50591=CARTESIAN_POINT('',(6.25,-0.01824646474114,5.661437708028)); #50592=CARTESIAN_POINT('',(6.25,1.29,11.54)); #50593=CARTESIAN_POINT('',(6.25,1.29,11.54)); #50594=CARTESIAN_POINT('',(6.25,1.59,11.54)); #50595=CARTESIAN_POINT('',(6.25,1.29,11.54)); #50596=CARTESIAN_POINT('',(6.25,1.59,14.81)); #50597=CARTESIAN_POINT('',(6.25,1.59,14.81)); #50598=CARTESIAN_POINT('',(6.25,6.71,14.81)); #50599=CARTESIAN_POINT('',(6.25,6.71,14.81)); #50600=CARTESIAN_POINT('',(6.25,6.71,1.54)); #50601=CARTESIAN_POINT('',(6.25,4.92,1.53)); #50602=CARTESIAN_POINT('',(6.25,6.57,1.53)); #50603=CARTESIAN_POINT('',(6.25,4.92,1.53)); #50604=CARTESIAN_POINT('',(6.25,3.01,1.3)); #50605=CARTESIAN_POINT('',(6.25,4.62,1.3)); #50606=CARTESIAN_POINT('',(6.25,3.01,0.2)); #50607=CARTESIAN_POINT('',(6.25,3.01,0.2)); #50608=CARTESIAN_POINT('Origin',(6.25,2.81,0.2)); #50609=CARTESIAN_POINT('',(6.25,5.869658659924,12.03345132743)); #50610=CARTESIAN_POINT('',(6.25,5.671428571429,12.26)); #50611=CARTESIAN_POINT('Origin',(6.25,5.671428571429,12.06)); #50612=CARTESIAN_POINT('',(6.25,5.582822247548,12.26000000095)); #50613=CARTESIAN_POINT('',(6.25,5.671428571429,12.26)); #50614=CARTESIAN_POINT('',(6.25,5.422814720093,12.18)); #50615=CARTESIAN_POINT('Origin',(6.25000000001672,5.58282104072612,12.0599873637705)); #50616=CARTESIAN_POINT('',(6.25,3.377185279974,12.18)); #50617=CARTESIAN_POINT('',(6.25,5.422814720093,12.18)); #50618=CARTESIAN_POINT('',(6.25,3.217177752452,12.26000000089)); #50619=CARTESIAN_POINT('Origin',(6.25000000001656,3.21717895956346,12.059987363832)); #50620=CARTESIAN_POINT('',(6.25,3.128571428571,12.26)); #50621=CARTESIAN_POINT('',(6.25,3.217177752452,12.26000000089)); #50622=CARTESIAN_POINT('',(6.25,2.930341340076,12.03345132743)); #50623=CARTESIAN_POINT('Origin',(6.25,3.128571428571,12.06)); #50624=CARTESIAN_POINT('',(6.25,3.626769911504,6.833451327434)); #50625=CARTESIAN_POINT('',(6.25,2.930341340076,12.03345132743)); #50626=CARTESIAN_POINT('',(6.25,3.825,6.66)); #50627=CARTESIAN_POINT('Origin',(6.25,3.825,6.86)); #50628=CARTESIAN_POINT('',(6.25,4.975,6.66)); #50629=CARTESIAN_POINT('',(6.25,3.825,6.66)); #50630=CARTESIAN_POINT('',(6.25,5.173230088496,6.833451327434)); #50631=CARTESIAN_POINT('Origin',(6.25,4.975,6.86)); #50632=CARTESIAN_POINT('',(6.25,5.173230088496,6.833451327434)); #50633=CARTESIAN_POINT('',(6.25,3.12,4.57)); #50634=CARTESIAN_POINT('',(6.25,4.32,4.57)); #50635=CARTESIAN_POINT('',(6.25,3.12,2.36)); #50636=CARTESIAN_POINT('',(6.25,3.12,4.57)); #50637=CARTESIAN_POINT('',(6.25,3.12,2.36)); #50638=CARTESIAN_POINT('Origin',(6.15,3.12,2.36)); #50639=CARTESIAN_POINT('',(6.15,3.12,2.36)); #50640=CARTESIAN_POINT('Origin',(6.15,3.12,4.57)); #50641=CARTESIAN_POINT('',(6.15,3.12,4.57)); #50642=CARTESIAN_POINT('Origin',(6.15,4.32,4.57)); #50643=CARTESIAN_POINT('Origin',(6.55,5.15,6.66)); #50644=CARTESIAN_POINT('',(6.55,5.173230088496,6.833451327434)); #50645=CARTESIAN_POINT('',(6.55,5.173230088496,6.833451327434)); #50646=CARTESIAN_POINT('',(6.55,5.869658659924,12.03345132743)); #50647=CARTESIAN_POINT('',(6.55,5.173230088496,6.833451327434)); #50648=CARTESIAN_POINT('',(6.55,5.869658659924,12.03345132743)); #50649=CARTESIAN_POINT('Origin',(6.584614583937,4.975,6.86)); #50650=CARTESIAN_POINT('',(6.55,4.975,6.66)); #50651=CARTESIAN_POINT('',(6.55,4.975,6.66)); #50652=CARTESIAN_POINT('Origin',(6.55,4.975,6.86)); #50653=CARTESIAN_POINT('Origin',(6.55,0.,0.)); #50654=CARTESIAN_POINT('',(6.55,7.01,15.26)); #50655=CARTESIAN_POINT('',(6.55,7.01,1.54)); #50656=CARTESIAN_POINT('',(6.55,6.71,15.26)); #50657=CARTESIAN_POINT('',(6.55,7.01,15.26)); #50658=CARTESIAN_POINT('',(6.55,6.71,15.23426406871)); #50659=CARTESIAN_POINT('',(6.55,6.71,15.26)); #50660=CARTESIAN_POINT('',(6.55,6.71,14.81)); #50661=CARTESIAN_POINT('',(6.55,6.71,15.23426406871)); #50662=CARTESIAN_POINT('',(6.55,1.59,14.81)); #50663=CARTESIAN_POINT('',(6.55,1.59,14.81)); #50664=CARTESIAN_POINT('',(6.55,1.59,15.23426406871)); #50665=CARTESIAN_POINT('',(6.55,1.59,14.81)); #50666=CARTESIAN_POINT('',(6.55,1.29,15.23426406871)); #50667=CARTESIAN_POINT('',(6.55,1.59,15.23426406871)); #50668=CARTESIAN_POINT('',(6.55,1.29,5.73)); #50669=CARTESIAN_POINT('',(6.55,1.29,15.23426406871)); #50670=CARTESIAN_POINT('',(6.55,-0.01824646474114,5.661437708028)); #50671=CARTESIAN_POINT('',(6.55,1.29,5.73)); #50672=CARTESIAN_POINT('',(6.55,-0.01824646474114,4.298562291972)); #50673=CARTESIAN_POINT('',(6.55,-0.01824646474114,5.661437708028)); #50674=CARTESIAN_POINT('',(6.55,1.29,4.23)); #50675=CARTESIAN_POINT('',(6.55,1.29,4.23)); #50676=CARTESIAN_POINT('',(6.55,1.29,4.23)); #50677=CARTESIAN_POINT('',(6.55,3.01,0.2)); #50678=CARTESIAN_POINT('Origin',(6.55,2.81,0.2)); #50679=CARTESIAN_POINT('',(6.55,3.01,0.948005681864)); #50680=CARTESIAN_POINT('',(6.55,3.01,0.2)); #50681=CARTESIAN_POINT('',(6.55,3.51,0.948005681864)); #50682=CARTESIAN_POINT('Origin',(6.55,3.26,0.948005681864)); #50683=CARTESIAN_POINT('',(6.55,3.51,0.6)); #50684=CARTESIAN_POINT('',(6.55,3.51,0.948005681864)); #50685=CARTESIAN_POINT('',(6.55,4.41,0.6)); #50686=CARTESIAN_POINT('',(6.55,3.51,0.6)); #50687=CARTESIAN_POINT('',(6.55,4.41,0.948005681864)); #50688=CARTESIAN_POINT('',(6.55,4.41,0.6)); #50689=CARTESIAN_POINT('',(6.55,4.515,1.124002840932)); #50690=CARTESIAN_POINT('Origin',(6.55,4.61,0.948005681864)); #50691=CARTESIAN_POINT('Origin',(6.55,4.42,1.3)); #50692=CARTESIAN_POINT('',(6.55,3.825,6.66)); #50693=CARTESIAN_POINT('',(6.55,3.626769911504,6.833451327434)); #50694=CARTESIAN_POINT('Origin',(6.55,3.825,6.86)); #50695=CARTESIAN_POINT('',(6.55,2.930341340076,12.03345132743)); #50696=CARTESIAN_POINT('',(6.55,2.930341340076,12.03345132743)); #50697=CARTESIAN_POINT('',(6.55,3.128571428571,12.26)); #50698=CARTESIAN_POINT('Origin',(6.55,3.128571428571,12.06)); #50699=CARTESIAN_POINT('',(6.55,3.21510485273,12.2600000015709)); #50700=CARTESIAN_POINT('',(6.55,3.21510485273,12.26000000121)); #50701=CARTESIAN_POINT('',(6.55,3.375106605286,12.18)); #50702=CARTESIAN_POINT('Origin',(6.55000000000109,3.21510513465594,12.0599970676134)); #50703=CARTESIAN_POINT('',(6.55,5.424893394612,12.18)); #50704=CARTESIAN_POINT('',(6.55,3.375106605286,12.18)); #50705=CARTESIAN_POINT('',(6.55,5.58489514727,12.2600000015941)); #50706=CARTESIAN_POINT('Origin',(6.5500000000006,5.58489486530517,12.059997067606)); #50707=CARTESIAN_POINT('',(6.55,5.671428571429,12.26)); #50708=CARTESIAN_POINT('',(6.55,5.671428571429,12.26)); #50709=CARTESIAN_POINT('Origin',(6.55,5.671428571429,12.06)); #50710=CARTESIAN_POINT('',(6.55,3.825,6.66)); #50711=CARTESIAN_POINT('Origin',(6.55,3.65,6.66)); #50712=CARTESIAN_POINT('',(6.55,3.825,6.66)); #50713=CARTESIAN_POINT('Origin',(6.584614583937,3.825,6.86)); #50714=CARTESIAN_POINT('',(6.55,3.626769911504,6.833451327434)); #50715=CARTESIAN_POINT('Origin',(6.55,2.9,12.26)); #50716=CARTESIAN_POINT('',(6.55,2.930341340076,12.03345132743)); #50717=CARTESIAN_POINT('Origin',(6.584614583937,3.128571428571,12.06)); #50718=CARTESIAN_POINT('',(6.55,3.128571428571,12.26)); #50719=CARTESIAN_POINT('Origin',(6.55,5.9,12.26)); #50720=CARTESIAN_POINT('Ctrl Pts',(6.55,3.21510485273,12.26)); #50721=CARTESIAN_POINT('Ctrl Pts',(6.519475052906,3.21524767392,12.26)); #50722=CARTESIAN_POINT('Ctrl Pts',(6.48801395471355,3.215411077206,12.26)); #50723=CARTESIAN_POINT('Ctrl Pts',(6.45561729201101,3.215602584916,12.26)); #50724=CARTESIAN_POINT('Ctrl Pts',(6.42322062930837,3.215794092626,12.26)); #50725=CARTESIAN_POINT('Ctrl Pts',(6.38988840209563,3.21601370476,12.26)); #50726=CARTESIAN_POINT('Ctrl Pts',(6.35561900261099,3.216271981731,12.26)); #50727=CARTESIAN_POINT('Ctrl Pts',(6.32134960312645,3.216530258702,12.26)); #50728=CARTESIAN_POINT('Ctrl Pts',(6.28614303137,3.21682720051,12.26)); #50729=CARTESIAN_POINT('Ctrl Pts',(6.25,3.217177752452,12.26)); #50730=CARTESIAN_POINT('Origin',(6.55,5.9,12.26)); #50731=CARTESIAN_POINT('Ctrl Pts',(6.25,5.582822247548,12.26)); #50732=CARTESIAN_POINT('Ctrl Pts',(6.286338797485,5.583174698968,12.26)); #50733=CARTESIAN_POINT('Ctrl Pts',(6.32167588308495,5.5834724448565,12.26)); #50734=CARTESIAN_POINT('Ctrl Pts',(6.35601050602657,5.58373096762975,12.26)); #50735=CARTESIAN_POINT('Ctrl Pts',(6.3903451289683,5.583989490403,12.26)); #50736=CARTESIAN_POINT('Ctrl Pts',(6.4236772892517,5.584208790061,12.26)); #50737=CARTESIAN_POINT('Ctrl Pts',(6.45600869089117,5.584399727814,12.26)); #50738=CARTESIAN_POINT('Ctrl Pts',(6.48834009253055,5.584590665567,12.26)); #50739=CARTESIAN_POINT('Ctrl Pts',(6.519670735526,5.584753241415,12.26)); #50740=CARTESIAN_POINT('Ctrl Pts',(6.55,5.58489514727,12.26)); #50741=CARTESIAN_POINT('',(6.55,5.671428571429,12.26)); #50742=CARTESIAN_POINT('Ctrl Pts',(6.564844123014,3.185500339866,12.25780703541)); #50743=CARTESIAN_POINT('Ctrl Pts',(6.529521888071,3.185144384115,12.25773012069)); #50744=CARTESIAN_POINT('Ctrl Pts',(6.455580266807,3.184333492179,12.2575484636)); #50745=CARTESIAN_POINT('Ctrl Pts',(6.34312278483,3.182880292422,12.2571891833)); #50746=CARTESIAN_POINT('Ctrl Pts',(6.265963750794,3.181736230491,12.25686791615)); #50747=CARTESIAN_POINT('Ctrl Pts',(6.227441867571,3.181147626759,12.25668687408)); #50748=CARTESIAN_POINT('Ctrl Pts',(6.565471916188,3.324793583783,12.2786061475)); #50749=CARTESIAN_POINT('Ctrl Pts',(6.530205101522,3.324383214698,12.2788919925)); #50750=CARTESIAN_POINT('Ctrl Pts',(6.456393216351,3.323443747291,12.27954709299)); #50751=CARTESIAN_POINT('Ctrl Pts',(6.344188060694,3.32173588134,12.28074092551)); #50752=CARTESIAN_POINT('Ctrl Pts',(6.267252261076,3.320363636724,12.28170536069)); #50753=CARTESIAN_POINT('Ctrl Pts',(6.228857087142,3.319646243339,12.28221598323)); #50754=CARTESIAN_POINT('Ctrl Pts',(6.565933175487,3.427136691014,12.18185243629)); #50755=CARTESIAN_POINT('Ctrl Pts',(6.530708394817,3.426978109052,12.18240480954)); #50756=CARTESIAN_POINT('Ctrl Pts',(6.456995578753,3.426617522142,12.18367704621)); #50757=CARTESIAN_POINT('Ctrl Pts',(6.344986750615,3.425974157319,12.18602859733)); #50758=CARTESIAN_POINT('Ctrl Pts',(6.268228702622,3.425472304053,12.18796463039)); #50759=CARTESIAN_POINT('Ctrl Pts',(6.229935864411,3.425219373579,12.18900248917)); #50760=CARTESIAN_POINT('Ctrl Pts',(6.565874810383,3.414186781859,12.04161014083)); #50761=CARTESIAN_POINT('Ctrl Pts',(6.53064650072,3.414393446327,12.04212878549)); #50762=CARTESIAN_POINT('Ctrl Pts',(6.45692625012,3.414876067211,12.04332612381)); #50763=CARTESIAN_POINT('Ctrl Pts',(6.344907463458,3.415801503221,12.04555377445)); #50764=CARTESIAN_POINT('Ctrl Pts',(6.268145616767,3.416602337301,12.04740355005)); #50765=CARTESIAN_POINT('Ctrl Pts',(6.229852403484,3.417051579432,12.04840062132)); #50766=CARTESIAN_POINT('',(6.24476936900667,3.41643996495602,12.0778535243921)); #50767=CARTESIAN_POINT('Ctrl Pts',(6.24476936891627,3.4164399559353,12.0778535235838)); #50768=CARTESIAN_POINT('Ctrl Pts',(6.24494387505781,3.41628591470335,12.0795529553312)); #50769=CARTESIAN_POINT('Ctrl Pts',(6.24511329257481,3.41611062505256,12.0812454674732)); #50770=CARTESIAN_POINT('Ctrl Pts',(6.24527772782656,3.41591445372624,12.0829310326788)); #50771=CARTESIAN_POINT('Ctrl Pts',(6.24544216307831,3.41571828239992,12.0846165978845)); #50772=CARTESIAN_POINT('Ctrl Pts',(6.24560161606934,3.41550122991463,12.0862952165169)); #50773=CARTESIAN_POINT('Ctrl Pts',(6.24575619254404,3.41526361287908,12.0879669385303)); #50774=CARTESIAN_POINT('Ctrl Pts',(6.24591076901874,3.41502599584353,12.0896386605437)); #50775=CARTESIAN_POINT('Ctrl Pts',(6.24606046897435,3.41476781402755,12.0913034864706)); #50776=CARTESIAN_POINT('Ctrl Pts',(6.24620539776432,3.4144893419243,12.0929614573415)); #50777=CARTESIAN_POINT('Ctrl Pts',(6.24635032655428,3.41421086982105,12.0946194282124)); #50778=CARTESIAN_POINT('Ctrl Pts',(6.2464904841775,3.41391210736639,12.0962705444896)); #50779=CARTESIAN_POINT('Ctrl Pts',(6.24662597554728,3.41359328548072,12.0979148546788)); #50780=CARTESIAN_POINT('Ctrl Pts',(6.24676146691706,3.41327446359505,12.099559164868)); #50781=CARTESIAN_POINT('Ctrl Pts',(6.24689229203159,3.41293558213692,12.1011966694158)); #50782=CARTESIAN_POINT('Ctrl Pts',(6.24701855539947,3.41257683073764,12.102827413371)); #50783=CARTESIAN_POINT('Ctrl Pts',(6.24714481876734,3.41221807933836,12.1044581573262)); #50784=CARTESIAN_POINT('Ctrl Pts',(6.24726652038671,3.41183945784786,12.1060821411076)); #50785=CARTESIAN_POINT('Ctrl Pts',(6.2473837643753,3.41144111612239,12.1076994030971)); #50786=CARTESIAN_POINT('Ctrl Pts',(6.2475010083639,3.41104277439691,12.1093166650866)); #50787=CARTESIAN_POINT('Ctrl Pts',(6.24761379471967,3.41062471226153,12.1109272056779)); #50788=CARTESIAN_POINT('Ctrl Pts',(6.24772222719345,3.41018704197689,12.1125310516143)); #50789=CARTESIAN_POINT('Ctrl Pts',(6.24783065966724,3.40974937169226,12.1141348975507)); #50790=CARTESIAN_POINT('Ctrl Pts',(6.24793473825684,3.40929209306561,12.1157320492005)); #50791=CARTESIAN_POINT('Ctrl Pts',(6.24803456637024,3.40881528310415,12.1173225175708)); #50792=CARTESIAN_POINT('Ctrl Pts',(6.24813439448363,3.40833847314267,12.1189129859413)); #50793=CARTESIAN_POINT('Ctrl Pts',(6.24822997211845,3.40784213163309,12.1204967713749)); #50794=CARTESIAN_POINT('Ctrl Pts',(6.24832140236745,3.4073263030778,12.1220738648585)); #50795=CARTESIAN_POINT('Ctrl Pts',(6.24841283261645,3.40681047452252,12.123650958342)); #50796=CARTESIAN_POINT('Ctrl Pts',(6.2485001154772,3.40627515869889,12.125221360193)); #50797=CARTESIAN_POINT('Ctrl Pts',(6.24858335375333,3.40572037023751,12.1267850384669)); #50798=CARTESIAN_POINT('Ctrl Pts',(6.24866659202945,3.40516558177613,12.1283487167409)); #50799=CARTESIAN_POINT('Ctrl Pts',(6.24874578571809,3.40459132040892,12.1299056717268)); #50800=CARTESIAN_POINT('Ctrl Pts',(6.24882103737783,3.40399757531635,12.1314558418207)); #50801=CARTESIAN_POINT('Ctrl Pts',(6.24889628903757,3.40340383022377,12.1330060119145)); #50802=CARTESIAN_POINT('Ctrl Pts',(6.24896759866474,3.40279060104183,12.134549397364)); #50803=CARTESIAN_POINT('Ctrl Pts',(6.24903506218415,3.40215785923757,12.1360858949115)); #50804=CARTESIAN_POINT('Ctrl Pts',(6.24910252570355,3.40152511743332,12.1376223924589)); #50805=CARTESIAN_POINT('Ctrl Pts',(6.24916614311577,3.40087286308827,12.1391520024065)); #50806=CARTESIAN_POINT('Ctrl Pts',(6.24922600998912,3.40020103156539,12.1406746272967)); #50807=CARTESIAN_POINT('Ctrl Pts',(6.24928587686247,3.3995292000425,12.1421972521868)); #50808=CARTESIAN_POINT('Ctrl Pts',(6.24934199319703,3.39883779136915,12.1437128923268)); #50809=CARTESIAN_POINT('Ctrl Pts',(6.249394454212,3.3981267053968,12.1452214481736)); #50810=CARTESIAN_POINT('Ctrl Pts',(6.24944691522697,3.39741561942447,12.1467300040204)); #50811=CARTESIAN_POINT('Ctrl Pts',(6.24949572092228,3.39668485616292,12.1482314758912)); #50812=CARTESIAN_POINT('Ctrl Pts',(6.2495409661636,3.39593427931668,12.1497257582532)); #50813=CARTESIAN_POINT('Ctrl Pts',(6.24958621140493,3.39518370247042,12.1512200406153)); #50814=CARTESIAN_POINT('Ctrl Pts',(6.24962789619194,3.39441331202089,12.1527071337926)); #50815=CARTESIAN_POINT('Ctrl Pts',(6.24966611503944,3.39362293573581,12.1541869211538)); #50816=CARTESIAN_POINT('Ctrl Pts',(6.24970433388694,3.39283255945074,12.1556667085149)); #50817=CARTESIAN_POINT('Ctrl Pts',(6.24973908679433,3.39202219728493,12.15713919039)); #50818=CARTESIAN_POINT('Ctrl Pts',(6.24977046793115,3.39119164154684,12.1586042341417)); #50819=CARTESIAN_POINT('Ctrl Pts',(6.24980184906796,3.39036108580873,12.1600692778935)); #50820=CARTESIAN_POINT('Ctrl Pts',(6.24982985843334,3.38951033642416,12.1615268838563)); #50821=CARTESIAN_POINT('Ctrl Pts',(6.24985458986129,3.38863915121435,12.1629768982597)); #50822=CARTESIAN_POINT('Ctrl Pts',(6.24987932128923,3.38776796600456,12.1644269126631)); #50823=CARTESIAN_POINT('Ctrl Pts',(6.24990077477863,3.38687634486662,12.1658693358451)); #50824=CARTESIAN_POINT('Ctrl Pts',(6.24991904384178,3.385964012451,12.1673039878759)); #50825=CARTESIAN_POINT('Ctrl Pts',(6.24993731290493,3.38505168003537,12.1687386399067)); #50826=CARTESIAN_POINT('Ctrl Pts',(6.24995239754036,3.38411863620292,12.1701655211232)); #50827=CARTESIAN_POINT('Ctrl Pts',(6.24996439095756,3.38316457465634,12.1715844197125)); #50828=CARTESIAN_POINT('Ctrl Pts',(6.24997638437477,3.38221051310978,12.1730033183018)); #50829=CARTESIAN_POINT('Ctrl Pts',(6.24998528657212,3.38123543369307,12.1744142346081)); #50830=CARTESIAN_POINT('Ctrl Pts',(6.24999119047774,3.38023900033244,12.1758169214206)); #50831=CARTESIAN_POINT('Ctrl Pts',(6.24999709438336,3.37924256697179,12.1772196082331)); #50832=CARTESIAN_POINT('Ctrl Pts',(6.24999999999469,3.37822477941407,12.1786140658568)); #50833=CARTESIAN_POINT('Ctrl Pts',(6.24999999999754,3.37718527971571,12.1799999998065)); #50834=CARTESIAN_POINT('',(6.54548552227882,3.41478266526265,12.0717536995329)); #50835=CARTESIAN_POINT('Origin',(6.97247617498982,12.7031921259355,38.0141933757456)); #50836=CARTESIAN_POINT('Ctrl Pts',(6.54999999999982,3.37510660524444,12.1799999999689)); #50837=CARTESIAN_POINT('Ctrl Pts',(6.54999999999706,3.37620351604115,12.1785374682683)); #50838=CARTESIAN_POINT('Ctrl Pts',(6.54999751138429,3.37727612572199,12.177065583974)); #50839=CARTESIAN_POINT('Ctrl Pts',(6.54999245139351,3.37832487064098,12.1755846914612)); #50840=CARTESIAN_POINT('Ctrl Pts',(6.54998739140273,3.37937361555997,12.1741037989484)); #50841=CARTESIAN_POINT('Ctrl Pts',(6.54997976003563,3.38039849606744,12.1726138978177)); #50842=CARTESIAN_POINT('Ctrl Pts',(6.54996947438213,3.38139992162664,12.1711152710502)); #50843=CARTESIAN_POINT('Ctrl Pts',(6.54995918872864,3.38240134718584,12.1696166442828)); #50844=CARTESIAN_POINT('Ctrl Pts',(6.54994624878981,3.38337931801263,12.1681092914228)); #50845=CARTESIAN_POINT('Ctrl Pts',(6.54993057148434,3.38433420608088,12.1665934497193)); #50846=CARTESIAN_POINT('Ctrl Pts',(6.54991489417887,3.38528909414912,12.1650776080157)); #50847=CARTESIAN_POINT('Ctrl Pts',(6.54989647950771,3.38622089965034,12.1635532770223)); #50848=CARTESIAN_POINT('Ctrl Pts',(6.5498752442049,3.38712995534848,12.1620206529687)); #50849=CARTESIAN_POINT('Ctrl Pts',(6.54985400890209,3.38803901104665,12.160488028915)); #50850=CARTESIAN_POINT('Ctrl Pts',(6.54982995296835,3.38892531708261,12.1589471113527)); #50851=CARTESIAN_POINT('Ctrl Pts',(6.54980299294031,3.38978916396937,12.1573980631059)); #50852=CARTESIAN_POINT('Ctrl Pts',(6.54977603291227,3.39065301085612,12.1558490148592)); #50853=CARTESIAN_POINT('Ctrl Pts',(6.54974616879047,3.39149439869437,12.1542918354839)); #50854=CARTESIAN_POINT('Ctrl Pts',(6.54971331690509,3.39231357393503,12.152726661097)); #50855=CARTESIAN_POINT('Ctrl Pts',(6.54968046501972,3.3931327491757,12.1511614867101)); #50856=CARTESIAN_POINT('Ctrl Pts',(6.54964462537114,3.39392971187903,12.1495883168733)); #50857=CARTESIAN_POINT('Ctrl Pts',(6.54960571407679,3.39470466311406,12.1480072678271)); #50858=CARTESIAN_POINT('Ctrl Pts',(6.54956680278243,3.39547961434908,12.1464262187808)); #50859=CARTESIAN_POINT('Ctrl Pts',(6.5495248198425,3.39623255413892,12.1448372900952)); #50860=CARTESIAN_POINT('Ctrl Pts',(6.54947968115826,3.39696363753238,12.1432405846757)); #50861=CARTESIAN_POINT('Ctrl Pts',(6.54943454247401,3.39769472092586,12.1416438792562)); #50862=CARTESIAN_POINT('Ctrl Pts',(6.54938624804546,3.3984039479065,12.1400393966822)); #50863=CARTESIAN_POINT('Ctrl Pts',(6.54933471355597,3.39909142725126,12.1384272333333)); #50864=CARTESIAN_POINT('Ctrl Pts',(6.54928317906647,3.39977890659601,12.1368150699844)); #50865=CARTESIAN_POINT('Ctrl Pts',(6.54922840451594,3.40044463826372,12.1351952254536)); #50866=CARTESIAN_POINT('Ctrl Pts',(6.54917030537326,3.40108868562999,12.1335677948118)); #50867=CARTESIAN_POINT('Ctrl Pts',(6.54911220623057,3.40173273299628,12.1319403641699)); #50868=CARTESIAN_POINT('Ctrl Pts',(6.54905078249531,3.40235509594458,12.1303053470176)); #50869=CARTESIAN_POINT('Ctrl Pts',(6.54898594941768,3.40295579181173,12.1286628476036)); #50870=CARTESIAN_POINT('Ctrl Pts',(6.54892111634006,3.40355648767887,12.1270203481896)); #50871=CARTESIAN_POINT('Ctrl Pts',(6.54885287392167,3.40413551679088,12.1253703661711)); #50872=CARTESIAN_POINT('Ctrl Pts',(6.54878112989883,3.40469286787312,12.1237129706413)); #50873=CARTESIAN_POINT('Ctrl Pts',(6.548709385876,3.40525021895535,12.1220555751115)); #50874=CARTESIAN_POINT('Ctrl Pts',(6.54863414025058,3.4057858923756,12.1203907656954)); #50875=CARTESIAN_POINT('Ctrl Pts',(6.54855530061446,3.40629984574764,12.1187185738922)); #50876=CARTESIAN_POINT('Ctrl Pts',(6.54847646097834,3.40681379911968,12.1170463820889)); #50877=CARTESIAN_POINT('Ctrl Pts',(6.5483940273331,3.4073060327494,12.1153668074816)); #50878=CARTESIAN_POINT('Ctrl Pts',(6.54830790709781,3.40777646717954,12.1136798527313)); #50879=CARTESIAN_POINT('Ctrl Pts',(6.54822178686253,3.40824690160967,12.1119928979812)); #50880=CARTESIAN_POINT('Ctrl Pts',(6.54813198003873,3.40869553713384,12.1102985626338)); #50881=CARTESIAN_POINT('Ctrl Pts',(6.54803839385518,3.40912225353582,12.1085968242739)); #50882=CARTESIAN_POINT('Ctrl Pts',(6.54794480767162,3.4095489699378,12.106895085914)); #50883=CARTESIAN_POINT('Ctrl Pts',(6.54784744212972,3.40995376748315,12.1051859440491)); #50884=CARTESIAN_POINT('Ctrl Pts',(6.54774620424949,3.41033648138826,12.1034693568197)); #50885=CARTESIAN_POINT('Ctrl Pts',(6.54764496636926,3.41071919529336,12.1017527695904)); #50886=CARTESIAN_POINT('Ctrl Pts',(6.54753985615203,3.4110798257991,12.1000287364653)); #50887=CARTESIAN_POINT('Ctrl Pts',(6.54743078039308,3.41141816028181,12.0982972015801)); #50888=CARTESIAN_POINT('Ctrl Pts',(6.54732170463412,3.41175649476452,12.0965656666948)); #50889=CARTESIAN_POINT('Ctrl Pts',(6.54720866333464,3.4120725334301,12.0948266294801)); #50890=CARTESIAN_POINT('Ctrl Pts',(6.54709156304965,3.41236601279252,12.0930800267266)); #50891=CARTESIAN_POINT('Ctrl Pts',(6.54697446276466,3.41265949215493,12.0913334239732)); #50892=CARTESIAN_POINT('Ctrl Pts',(6.54685330349532,3.41293041240728,12.0895792550691)); #50893=CARTESIAN_POINT('Ctrl Pts',(6.54672799154637,3.41317845701583,12.0878174538359)); #50894=CARTESIAN_POINT('Ctrl Pts',(6.54660267959741,3.41342650162439,12.0860556526026)); #50895=CARTESIAN_POINT('Ctrl Pts',(6.54647321496949,3.41365167067288,12.0842862184049)); #50896=CARTESIAN_POINT('Ctrl Pts',(6.54633950369644,3.41385359167507,12.0825090968138)); #50897=CARTESIAN_POINT('Ctrl Pts',(6.5462057924234,3.41405551267725,12.0807319752227)); #50898=CARTESIAN_POINT('Ctrl Pts',(6.54606783450698,3.41423418594628,12.078947165494)); #50899=CARTESIAN_POINT('Ctrl Pts',(6.54592553573369,3.41438918409455,12.0771546033943)); #50900=CARTESIAN_POINT('Ctrl Pts',(6.5457832369604,3.41454418224281,12.0753620412946)); #50901=CARTESIAN_POINT('Ctrl Pts',(6.54563659732708,3.41467550453955,12.0735617263434)); #50902=CARTESIAN_POINT('Ctrl Pts',(6.54548552226008,3.4147826613441,12.0717536993023)); #50903=CARTESIAN_POINT('Origin',(5.25,4.4,12.18)); #50904=CARTESIAN_POINT('',(6.53025007892237,3.42295086102676,11.9542573690666)); #50905=CARTESIAN_POINT('Ctrl Pts',(6.545485522276,3.414782664704,12.0717536995)); #50906=CARTESIAN_POINT('Ctrl Pts',(6.543804754554,3.415974845764,12.05163836769)); #50907=CARTESIAN_POINT('Ctrl Pts',(6.539541096791,3.418308071205,12.0119060965)); #50908=CARTESIAN_POINT('Ctrl Pts',(6.533602627096,3.421210016816,11.97327061458)); #50909=CARTESIAN_POINT('Ctrl Pts',(6.530250078916,3.422950860615,11.95425736903)); #50910=CARTESIAN_POINT('',(6.53025007892237,5.37704913897324,11.9542573690666)); #50911=CARTESIAN_POINT('',(6.530250078916,5.377049139385,11.95425736903)); #50912=CARTESIAN_POINT('',(6.54548552227937,5.38521733468266,12.0717536995337)); #50913=CARTESIAN_POINT('Ctrl Pts',(6.545485522277,5.385217335255,12.0717536995)); #50914=CARTESIAN_POINT('Ctrl Pts',(6.543804754551,5.384025154193,12.05163836765)); #50915=CARTESIAN_POINT('Ctrl Pts',(6.53954109678,5.38169192881,12.01190609642)); #50916=CARTESIAN_POINT('Ctrl Pts',(6.533602627089,5.37878998318,11.97327061454)); #50917=CARTESIAN_POINT('Ctrl Pts',(6.530250078916,5.377049139385,11.95425736903)); #50918=CARTESIAN_POINT('Ctrl Pts',(6.54548552226138,5.38521733853296,12.071753699307)); #50919=CARTESIAN_POINT('Ctrl Pts',(6.54563659732687,5.38532449533756,12.0735617263307)); #50920=CARTESIAN_POINT('Ctrl Pts',(6.54578323695876,5.38545581763386,12.0753620412652)); #50921=CARTESIAN_POINT('Ctrl Pts',(6.54592553573071,5.38561081578128,12.077154603349)); #50922=CARTESIAN_POINT('Ctrl Pts',(6.54606783450265,5.38576581392871,12.0789471654327)); #50923=CARTESIAN_POINT('Ctrl Pts',(6.5462057924178,5.3859444871965,12.0807319751463)); #50924=CARTESIAN_POINT('Ctrl Pts',(6.54633950368972,5.38614640819709,12.082509096723)); #50925=CARTESIAN_POINT('Ctrl Pts',(6.54647321496164,5.38634832919769,12.0842862182996)); #50926=CARTESIAN_POINT('Ctrl Pts',(6.54660267958858,5.38657349824423,12.0860556524835)); #50927=CARTESIAN_POINT('Ctrl Pts',(6.54672799153673,5.38682154285055,12.0878174537037)); #50928=CARTESIAN_POINT('Ctrl Pts',(6.54685330348489,5.38706958745685,12.0895792549238)); #50929=CARTESIAN_POINT('Ctrl Pts',(6.54697446275362,5.38734050770665,12.0913334238154)); #50930=CARTESIAN_POINT('Ctrl Pts',(6.54709156303804,5.38763398706629,12.0930800265572)); #50931=CARTESIAN_POINT('Ctrl Pts',(6.54720866332246,5.38792746642594,12.094826629299)); #50932=CARTESIAN_POINT('Ctrl Pts',(6.54732170462144,5.38824350508853,12.0965656665029)); #50933=CARTESIAN_POINT('Ctrl Pts',(6.54743078037999,5.38858183956808,12.0982972013781)); #50934=CARTESIAN_POINT('Ctrl Pts',(6.54753985613854,5.38892017404761,12.1000287362532)); #50935=CARTESIAN_POINT('Ctrl Pts',(6.54764496635548,5.38928080455001,12.1017527693688)); #50936=CARTESIAN_POINT('Ctrl Pts',(6.54774620423554,5.38966351845164,12.1034693565895)); #50937=CARTESIAN_POINT('Ctrl Pts',(6.5478474421156,5.39004623235329,12.1051859438103)); #50938=CARTESIAN_POINT('Ctrl Pts',(6.54794480765745,5.39045102989505,12.1068950856673)); #50939=CARTESIAN_POINT('Ctrl Pts',(6.54803839384099,5.39087774629342,12.1085968240201)); #50940=CARTESIAN_POINT('Ctrl Pts',(6.54813198002452,5.39130446269177,12.1102985623728)); #50941=CARTESIAN_POINT('Ctrl Pts',(6.54822178684833,5.39175309821229,12.111992897714)); #50942=CARTESIAN_POINT('Ctrl Pts',(6.54830790708371,5.39222353263878,12.1136798524587)); #50943=CARTESIAN_POINT('Ctrl Pts',(6.54839402731909,5.39269396706529,12.1153668072035)); #50944=CARTESIAN_POINT('Ctrl Pts',(6.54847646096451,5.39318620069141,12.1170463818062)); #50945=CARTESIAN_POINT('Ctrl Pts',(6.54855530060087,5.39370015405996,12.1187185736058)); #50946=CARTESIAN_POINT('Ctrl Pts',(6.54863414023722,5.39421410742851,12.1203907654053)); #50947=CARTESIAN_POINT('Ctrl Pts',(6.54870938586294,5.3947497808454,12.1220555748186)); #50948=CARTESIAN_POINT('Ctrl Pts',(6.54878112988611,5.39530713192447,12.1237129703466)); #50949=CARTESIAN_POINT('Ctrl Pts',(6.54885287390928,5.39586448300356,12.1253703658746)); #50950=CARTESIAN_POINT('Ctrl Pts',(6.54892111632805,5.39644351211262,12.1270203478922)); #50951=CARTESIAN_POINT('Ctrl Pts',(6.54898594940607,5.39704420797712,12.1286628473063)); #50952=CARTESIAN_POINT('Ctrl Pts',(6.54905078248409,5.39764490384161,12.1303053467204)); #50953=CARTESIAN_POINT('Ctrl Pts',(6.54911220621976,5.39826726678756,12.1319403638737)); #50954=CARTESIAN_POINT('Ctrl Pts',(6.54917030536282,5.39891131415188,12.1335677945176)); #50955=CARTESIAN_POINT('Ctrl Pts',(6.54922840450589,5.3995553615162,12.1351952251615)); #50956=CARTESIAN_POINT('Ctrl Pts',(6.54928317905678,5.40022109318234,12.1368150696953)); #50957=CARTESIAN_POINT('Ctrl Pts',(6.54933471354673,5.40090857252595,12.1384272330482)); #50958=CARTESIAN_POINT('Ctrl Pts',(6.54938624803668,5.40159605186959,12.140039396401)); #50959=CARTESIAN_POINT('Ctrl Pts',(6.54943454246578,5.40230527884953,12.1416438789798)); #50960=CARTESIAN_POINT('Ctrl Pts',(6.5494796811505,5.40303636224284,12.1432405844051)); #50961=CARTESIAN_POINT('Ctrl Pts',(6.54952481983523,5.40376744563613,12.1448372898303)); #50962=CARTESIAN_POINT('Ctrl Pts',(6.54956680277557,5.40452038542633,12.1464262185225)); #50963=CARTESIAN_POINT('Ctrl Pts',(6.54960571407036,5.40529533666224,12.1480072675761)); #50964=CARTESIAN_POINT('Ctrl Pts',(6.54964462536515,5.40607028789817,12.1495883166297)); #50965=CARTESIAN_POINT('Ctrl Pts',(6.5496804650142,5.4068672506029,12.1511614864746)); #50966=CARTESIAN_POINT('Ctrl Pts',(6.54971331690001,5.40768642584564,12.1527266608704)); #50967=CARTESIAN_POINT('Ctrl Pts',(6.54974616878583,5.40850560108836,12.1542918352661)); #50968=CARTESIAN_POINT('Ctrl Pts',(6.54977603290805,5.40934698892931,12.1558490146511)); #50969=CARTESIAN_POINT('Ctrl Pts',(6.54980299293651,5.41021083581945,12.1573980629082)); #50970=CARTESIAN_POINT('Ctrl Pts',(6.54982995296497,5.41107468270962,12.1589471111653)); #50971=CARTESIAN_POINT('Ctrl Pts',(6.54985400889913,5.41196098874966,12.1604880287387)); #50972=CARTESIAN_POINT('Ctrl Pts',(6.5498752442023,5.41287004445263,12.1620206528041)); #50973=CARTESIAN_POINT('Ctrl Pts',(6.54989647950548,5.41377910015558,12.1635532768694)); #50974=CARTESIAN_POINT('Ctrl Pts',(6.54991489417695,5.41471090566231,12.1650776078752)); #50975=CARTESIAN_POINT('Ctrl Pts',(6.54993057148271,5.41566579373685,12.1665934495916)); #50976=CARTESIAN_POINT('Ctrl Pts',(6.54994624878847,5.41662068181141,12.1681092913081)); #50977=CARTESIAN_POINT('Ctrl Pts',(6.54995918872755,5.41759865264529,12.1696166441815)); #50978=CARTESIAN_POINT('Ctrl Pts',(6.54996947438132,5.41860007821237,12.1711152709628)); #50979=CARTESIAN_POINT('Ctrl Pts',(6.54997976003509,5.41960150377943,12.1726138977441)); #50980=CARTESIAN_POINT('Ctrl Pts',(6.54998739140248,5.42062638429557,12.1741037988893)); #50981=CARTESIAN_POINT('Ctrl Pts',(6.5499924513934,5.42167512922409,12.1755846914168)); #50982=CARTESIAN_POINT('Ctrl Pts',(6.54999751138432,5.42272387415263,12.1770655839445)); #50983=CARTESIAN_POINT('Ctrl Pts',(6.54999999999708,5.42379648384389,12.178537468254)); #50984=CARTESIAN_POINT('Ctrl Pts',(6.54999999999971,5.42489339465175,12.17999999997)); #50985=CARTESIAN_POINT('Ctrl Pts',(6.22744266319,5.618852360972,12.25668687787)); #50986=CARTESIAN_POINT('Ctrl Pts',(6.266139556767,5.618261081256,12.25686874276)); #50987=CARTESIAN_POINT('Ctrl Pts',(6.343473408468,5.617114637445,12.2571905413)); #50988=CARTESIAN_POINT('Ctrl Pts',(6.455930644753,5.615662494208,12.257549376)); #50989=CARTESIAN_POINT('Ctrl Pts',(6.52969743024,5.614853845354,12.25773050348)); #50990=CARTESIAN_POINT('Ctrl Pts',(6.564844909513,5.61449965281,12.25780703705)); #50991=CARTESIAN_POINT('Ctrl Pts',(6.228857880106,5.480353741638,12.28221597267)); #50992=CARTESIAN_POINT('Ctrl Pts',(6.267427488795,5.479633086938,12.28170302972)); #50993=CARTESIAN_POINT('Ctrl Pts',(6.344537740533,5.478258084747,12.28073670042)); #50994=CARTESIAN_POINT('Ctrl Pts',(6.456742944953,5.476551593137,12.27954384162)); #50995=CARTESIAN_POINT('Ctrl Pts',(6.53038036805,5.475614743915,12.27889057112)); #50996=CARTESIAN_POINT('Ctrl Pts',(6.565472701444,5.475206407676,12.27860614149)); #50997=CARTESIAN_POINT('Ctrl Pts',(6.229936655232,5.374780621009,12.18900246758)); #50998=CARTESIAN_POINT('Ctrl Pts',(6.268403463333,5.374526539912,12.18795989235)); #50999=CARTESIAN_POINT('Ctrl Pts',(6.345335685251,5.374023605344,12.18602017362)); #51000=CARTESIAN_POINT('Ctrl Pts',(6.457344810222,5.373380695041,12.18367071917)); #51001=CARTESIAN_POINT('Ctrl Pts',(6.530883452277,5.37302110169,12.18240206239)); #51002=CARTESIAN_POINT('Ctrl Pts',(6.565933959802,5.372863305739,12.18185242458)); #51003=CARTESIAN_POINT('Ctrl Pts',(6.229853194313,5.382948429819,12.0484006005)); #51004=CARTESIAN_POINT('Ctrl Pts',(6.268320379204,5.383399712323,12.04739899808)); #51005=CARTESIAN_POINT('Ctrl Pts',(6.345256421933,5.384201910166,12.04554575062)); #51006=CARTESIAN_POINT('Ctrl Pts',(6.457275517218,5.385126347352,12.04332016363)); #51007=CARTESIAN_POINT('Ctrl Pts',(6.530821575725,5.385607581077,12.04212620586)); #51008=CARTESIAN_POINT('Ctrl Pts',(6.56587559478,5.38581322269,12.04161012977)); #51009=CARTESIAN_POINT('',(6.24476936900662,5.38356003506133,12.0778535243916)); #51010=CARTESIAN_POINT('Origin',(6.97254018557006,-3.90228371609056,38.0175958406218)); #51011=CARTESIAN_POINT('Ctrl Pts',(6.24999999999746,5.42281472035523,12.1799999998032)); #51012=CARTESIAN_POINT('Ctrl Pts',(6.24999999999448,5.42177522064604,12.1786140658377)); #51013=CARTESIAN_POINT('Ctrl Pts',(6.24999709438316,5.42075743307817,12.1772196081984)); #51014=CARTESIAN_POINT('Ctrl Pts',(6.24999119047741,5.41976099970822,12.1758169213707)); #51015=CARTESIAN_POINT('Ctrl Pts',(6.24998528657165,5.41876456633827,12.174414234543)); #51016=CARTESIAN_POINT('Ctrl Pts',(6.24997638437401,5.41778948691308,12.1730033182221)); #51017=CARTESIAN_POINT('Ctrl Pts',(6.2499643909565,5.41683542535877,12.1715844196186)); #51018=CARTESIAN_POINT('Ctrl Pts',(6.249952397539,5.41588136380446,12.170165521015)); #51019=CARTESIAN_POINT('Ctrl Pts',(6.24993731290326,5.414948319965,12.1687386397848)); #51020=CARTESIAN_POINT('Ctrl Pts',(6.24991904383972,5.41403598754308,12.1673039877408)); #51021=CARTESIAN_POINT('Ctrl Pts',(6.24990077477618,5.41312365512118,12.1658693356968)); #51022=CARTESIAN_POINT('Ctrl Pts',(6.24987932128633,5.41223203397769,12.1644269125022)); #51023=CARTESIAN_POINT('Ctrl Pts',(6.24985458985789,5.41136084876302,12.1629768980868)); #51024=CARTESIAN_POINT('Ctrl Pts',(6.24982985842945,5.41048966354833,12.1615268836713)); #51025=CARTESIAN_POINT('Ctrl Pts',(6.24980184906356,5.40963891415954,12.1600692776971)); #51026=CARTESIAN_POINT('Ctrl Pts',(6.24977046792621,5.40880835841781,12.1586042339346)); #51027=CARTESIAN_POINT('Ctrl Pts',(6.24973908678886,5.40797780267609,12.1571391901721)); #51028=CARTESIAN_POINT('Ctrl Pts',(6.24970433388091,5.40716744050723,12.1556667082867)); #51029=CARTESIAN_POINT('Ctrl Pts',(6.24966611503283,5.40637706421973,12.1541869209161)); #51030=CARTESIAN_POINT('Ctrl Pts',(6.24962789618475,5.40558668793221,12.1527071335455)); #51031=CARTESIAN_POINT('Ctrl Pts',(6.24958621139713,5.40481629748085,12.1512200403595)); #51032=CARTESIAN_POINT('Ctrl Pts',(6.24954096615515,5.40406572063325,12.1497257579894)); #51033=CARTESIAN_POINT('Ctrl Pts',(6.24949572091317,5.40331514378566,12.1482314756193)); #51034=CARTESIAN_POINT('Ctrl Pts',(6.24944691521717,5.40258438052326,12.1467300037412)); #51035=CARTESIAN_POINT('Ctrl Pts',(6.2493944542016,5.40187329455057,12.145221447888)); #51036=CARTESIAN_POINT('Ctrl Pts',(6.24934199318602,5.40116220857786,12.1437128920348)); #51037=CARTESIAN_POINT('Ctrl Pts',(6.24928587685095,5.40047079990466,12.1421972518892)); #51038=CARTESIAN_POINT('Ctrl Pts',(6.24922600997701,5.39979896838231,12.1406746269943)); #51039=CARTESIAN_POINT('Ctrl Pts',(6.24916614310307,5.39912713685998,12.1391520020994)); #51040=CARTESIAN_POINT('Ctrl Pts',(6.24910252569019,5.39847488251588,12.1376223921479)); #51041=CARTESIAN_POINT('Ctrl Pts',(6.24903506217021,5.39784214071294,12.1360858945974)); #51042=CARTESIAN_POINT('Ctrl Pts',(6.24896759865024,5.39720939890999,12.1345493970469)); #51043=CARTESIAN_POINT('Ctrl Pts',(6.2488962890226,5.39659616972971,12.1330060115953)); #51044=CARTESIAN_POINT('Ctrl Pts',(6.24882103736237,5.39600242463913,12.1314558415003)); #51045=CARTESIAN_POINT('Ctrl Pts',(6.24874578570215,5.39540867954855,12.1299056714053)); #51046=CARTESIAN_POINT('Ctrl Pts',(6.24866659201301,5.39483441818366,12.1283487164193)); #51047=CARTESIAN_POINT('Ctrl Pts',(6.24858335373646,5.3942796297248,12.1267850381462)); #51048=CARTESIAN_POINT('Ctrl Pts',(6.24850011545991,5.39372484126594,12.1252213598731)); #51049=CARTESIAN_POINT('Ctrl Pts',(6.24841283259881,5.39318952544505,12.1236509580238)); #51050=CARTESIAN_POINT('Ctrl Pts',(6.24832140234949,5.39267369689268,12.122073864543)); #51051=CARTESIAN_POINT('Ctrl Pts',(6.24822997210017,5.39215786834029,12.1204967710622)); #51052=CARTESIAN_POINT('Ctrl Pts',(6.24813439446508,5.39166152683379,12.1189129856323)); #51053=CARTESIAN_POINT('Ctrl Pts',(6.24803456635147,5.39118471687549,12.1173225172667)); #51054=CARTESIAN_POINT('Ctrl Pts',(6.24793473823787,5.39070790691721,12.1157320489011)); #51055=CARTESIAN_POINT('Ctrl Pts',(6.24783065964812,5.39025062829384,12.1141348972572)); #51056=CARTESIAN_POINT('Ctrl Pts',(6.24772222717433,5.38981295801248,12.1125310513276)); #51057=CARTESIAN_POINT('Ctrl Pts',(6.24761379470054,5.38937528773112,12.1109272053979)); #51058=CARTESIAN_POINT('Ctrl Pts',(6.24750100834491,5.38895722559902,12.1093166648144)); #51059=CARTESIAN_POINT('Ctrl Pts',(6.24738376435658,5.38855888387677,12.1076994028335)); #51060=CARTESIAN_POINT('Ctrl Pts',(6.24726652036824,5.38816054215452,12.1060821408527)); #51061=CARTESIAN_POINT('Ctrl Pts',(6.24714481874926,5.38778192066717,12.104458157081)); #51062=CARTESIAN_POINT('Ctrl Pts',(6.24701855538182,5.38742316927093,12.1028274131364)); #51063=CARTESIAN_POINT('Ctrl Pts',(6.24689229201438,5.38706441787468,12.1011966691918)); #51064=CARTESIAN_POINT('Ctrl Pts',(6.24676146690034,5.38672553641946,12.0995591646557)); #51065=CARTESIAN_POINT('Ctrl Pts',(6.24662597553125,5.38640671453651,12.0979148544792)); #51066=CARTESIAN_POINT('Ctrl Pts',(6.24649048416215,5.38608789265357,12.0962705443026)); #51067=CARTESIAN_POINT('Ctrl Pts',(6.24635032653981,5.38578913020143,12.094619428039)); #51068=CARTESIAN_POINT('Ctrl Pts',(6.24620539775085,5.38551065810043,12.0929614571827)); #51069=CARTESIAN_POINT('Ctrl Pts',(6.2460604689619,5.38523218599943,12.0913034863263)); #51070=CARTESIAN_POINT('Ctrl Pts',(6.24591076900743,5.38497400418543,12.0896386604149)); #51071=CARTESIAN_POINT('Ctrl Pts',(6.24575619253399,5.38473638715152,12.0879669384179)); #51072=CARTESIAN_POINT('Ctrl Pts',(6.24560161606056,5.38449877011762,12.086295216421)); #51073=CARTESIAN_POINT('Ctrl Pts',(6.24544216307092,5.38428171763364,12.084616597806)); #51074=CARTESIAN_POINT('Ctrl Pts',(6.24527772782082,5.38408554630824,12.0829310326187)); #51075=CARTESIAN_POINT('Ctrl Pts',(6.24511329257072,5.38388937498283,12.0812454674314)); #51076=CARTESIAN_POINT('Ctrl Pts',(6.24494387505564,5.38371408533254,12.0795529553088)); #51077=CARTESIAN_POINT('Ctrl Pts',(6.24476936891592,5.38356004410063,12.0778535235817)); #51078=CARTESIAN_POINT('Origin',(5.25,4.4,12.18)); #51079=CARTESIAN_POINT('',(6.234807753012,5.377049139385,12.00635182233)); #51080=CARTESIAN_POINT('Origin',(5.11259251176375,5.3803095180694,12.1991428338807)); #51081=CARTESIAN_POINT('',(6.234807753012,3.422950860615,12.00635182233)); #51082=CARTESIAN_POINT('',(6.234807753012,3.422950860615,12.00635182233)); #51083=CARTESIAN_POINT('Origin',(5.11259236315155,3.41969049276665,12.1991428495573)); #51084=CARTESIAN_POINT('Ctrl Pts',(6.217856325953,5.386634163186,12.1135995694)); #51085=CARTESIAN_POINT('Ctrl Pts',(6.215180381112,5.382953749066,12.07459485033)); #51086=CARTESIAN_POINT('Ctrl Pts',(6.210145301053,5.379225390781,12.03575683807)); #51087=CARTESIAN_POINT('Ctrl Pts',(6.202779995708,5.375757930638,11.99733866132)); #51088=CARTESIAN_POINT('Ctrl Pts',(6.337488194967,5.38653854324,12.10540178492)); #51089=CARTESIAN_POINT('Ctrl Pts',(6.334480602192,5.383043527571,12.06155728468)); #51090=CARTESIAN_POINT('Ctrl Pts',(6.32881373561,5.379693047324,12.01788172122)); #51091=CARTESIAN_POINT('Ctrl Pts',(6.320551530257,5.375556047512,11.97478087499)); #51092=CARTESIAN_POINT('Ctrl Pts',(6.457120307927,5.386442923294,12.0972075583)); #51093=CARTESIAN_POINT('Ctrl Pts',(6.453780737886,5.383133306077,12.04851636867)); #51094=CARTESIAN_POINT('Ctrl Pts',(6.44747859152,5.380160703867,11.99998953118)); #51095=CARTESIAN_POINT('Ctrl Pts',(6.438324481852,5.375354164387,11.95223048351)); #51096=CARTESIAN_POINT('Ctrl Pts',(6.576752664675,5.386347303348,12.08901688957)); #51097=CARTESIAN_POINT('Ctrl Pts',(6.573080788654,5.383223084583,12.03547210227)); #51098=CARTESIAN_POINT('Ctrl Pts',(6.566139872701,5.38062836041,11.98208026716)); #51099=CARTESIAN_POINT('Ctrl Pts',(6.556098849796,5.375152281261,11.92968748699)); #51100=CARTESIAN_POINT('',(6.234807753012,5.377049139385,12.00635182233)); #51101=CARTESIAN_POINT('Origin',(6.068923101205,5.214206218597,10.20175763991)); #51102=CARTESIAN_POINT('',(5.90303845088204,5.05136320309722,8.39716346590953)); #51103=CARTESIAN_POINT('',(6.530250078916,5.377049139385,11.95425736903)); #51104=CARTESIAN_POINT('',(5.60759612934722,5.05136292430736,8.44925794398477)); #51105=CARTESIAN_POINT('',(5.607596123494,5.051363297809,8.449257910793)); #51106=CARTESIAN_POINT('',(6.234807753012,5.377049139385,12.00635182233)); #51107=CARTESIAN_POINT('Origin',(5.921201938253,4.4,10.22780486656)); #51108=CARTESIAN_POINT('',(5.60759612934722,3.74863707569264,8.44925794398476)); #51109=CARTESIAN_POINT('',(5.607596123494,3.748636702191,8.449257910793)); #51110=CARTESIAN_POINT('',(6.234807753012,3.422950860615,12.00635182233)); #51111=CARTESIAN_POINT('Origin',(6.068923101205,3.585793781403,10.20175763991)); #51112=CARTESIAN_POINT('',(6.530250078916,3.422950860615,11.95425736903)); #51113=CARTESIAN_POINT('',(5.90303845088204,3.74863679690278,8.39716346590953)); #51114=CARTESIAN_POINT('',(5.903038449398,3.748636702191,8.397163457493)); #51115=CARTESIAN_POINT('',(6.530250078916,3.422950860615,11.95425736903)); #51116=CARTESIAN_POINT('Ctrl Pts',(6.576752664675,3.413652696652,12.08901688957)); #51117=CARTESIAN_POINT('Ctrl Pts',(6.573080788654,3.416776915417,12.03547210227)); #51118=CARTESIAN_POINT('Ctrl Pts',(6.566139872701,3.41937163959,11.98208026716)); #51119=CARTESIAN_POINT('Ctrl Pts',(6.556098849796,3.424847718739,11.92968748699)); #51120=CARTESIAN_POINT('Ctrl Pts',(6.457120307927,3.413557076706,12.0972075583)); #51121=CARTESIAN_POINT('Ctrl Pts',(6.453780737886,3.416866693923,12.04851636867)); #51122=CARTESIAN_POINT('Ctrl Pts',(6.44747859152,3.419839296133,11.99998953118)); #51123=CARTESIAN_POINT('Ctrl Pts',(6.438324481852,3.424645835613,11.95223048351)); #51124=CARTESIAN_POINT('Ctrl Pts',(6.337488194967,3.41346145676,12.10540178492)); #51125=CARTESIAN_POINT('Ctrl Pts',(6.334480602192,3.416956472429,12.06155728468)); #51126=CARTESIAN_POINT('Ctrl Pts',(6.32881373561,3.420306952676,12.01788172122)); #51127=CARTESIAN_POINT('Ctrl Pts',(6.320551530257,3.424443952488,11.97478087499)); #51128=CARTESIAN_POINT('Ctrl Pts',(6.217856325953,3.413365836814,12.1135995694)); #51129=CARTESIAN_POINT('Ctrl Pts',(6.215180381112,3.417046250934,12.07459485033)); #51130=CARTESIAN_POINT('Ctrl Pts',(6.210145301053,3.420774609219,12.03575683807)); #51131=CARTESIAN_POINT('Ctrl Pts',(6.202779995708,3.424242069362,11.99733866132)); #51132=CARTESIAN_POINT('Origin',(6.216644264157,4.4,10.17571041326)); #51133=CARTESIAN_POINT('',(5.903038449398,5.051363297809,8.397163457493)); #51134=CARTESIAN_POINT('Origin',(6.1,4.4,8.36243382196)); #51135=CARTESIAN_POINT('',(5.91206147878015,3.77224267391076,8.29402978522404)); #51136=CARTESIAN_POINT('Ctrl Pts',(5.90303845238853,3.74863689310648,8.39716347445601)); #51137=CARTESIAN_POINT('Ctrl Pts',(5.90000607728953,3.75021215261128,8.37996602934755)); #51138=CARTESIAN_POINT('Ctrl Pts',(5.89924028498224,3.75529866646556,8.36246466584744)); #51139=CARTESIAN_POINT('Ctrl Pts',(5.90227265614408,3.76554987564078,8.32764572388336)); #51140=CARTESIAN_POINT('Ctrl Pts',(5.90607072977661,3.77066253111649,8.31048922840525)); #51141=CARTESIAN_POINT('Ctrl Pts',(5.91206148176287,3.77224257724043,8.29402977702967)); #51142=CARTESIAN_POINT('',(5.91206147878015,5.02775732608924,8.29402978522404)); #51143=CARTESIAN_POINT('',(5.912061475843,5.027757230918,8.294029793294)); #51144=CARTESIAN_POINT('Ctrl Pts',(5.90303845238853,5.05136310689352,8.397163474456)); #51145=CARTESIAN_POINT('Ctrl Pts',(5.90000607728953,5.04978784738871,8.37996602934752)); #51146=CARTESIAN_POINT('Ctrl Pts',(5.89924028498224,5.04470133353443,8.3624646658474)); #51147=CARTESIAN_POINT('Ctrl Pts',(5.90227265614408,5.03445012435923,8.32764572388339)); #51148=CARTESIAN_POINT('Ctrl Pts',(5.9060707297766,5.02933746888351,8.31048922840527)); #51149=CARTESIAN_POINT('Ctrl Pts',(5.91206148176287,5.02775742275957,8.29402977702967)); #51150=CARTESIAN_POINT('Ctrl Pts',(5.586386796832,5.054982754934,8.492672975942)); #51151=CARTESIAN_POINT('Ctrl Pts',(5.55725573642,5.043709739755,8.37779126186)); #51152=CARTESIAN_POINT('Ctrl Pts',(5.568187987908,5.035403226513,8.252966270117)); #51153=CARTESIAN_POINT('Ctrl Pts',(5.616845104293,5.024128601964,8.144897373397)); #51154=CARTESIAN_POINT('Ctrl Pts',(5.702639660183,5.05381741696,8.463274583275)); #51155=CARTESIAN_POINT('Ctrl Pts',(5.680006274884,5.047290261586,8.374088085035)); #51156=CARTESIAN_POINT('Ctrl Pts',(5.688425941659,5.031820107232,8.277950631593)); #51157=CARTESIAN_POINT('Ctrl Pts',(5.726218010538,5.025297803565,8.194055904178)); #51158=CARTESIAN_POINT('Ctrl Pts',(5.818879542158,5.052652078986,8.433824927174)); #51159=CARTESIAN_POINT('Ctrl Pts',(5.802808097337,5.050870783417,8.370539529645)); #51160=CARTESIAN_POINT('Ctrl Pts',(5.808741359756,5.028236987951,8.302791548503)); #51161=CARTESIAN_POINT('Ctrl Pts',(5.835569150169,5.026467005167,8.243262821364)); #51162=CARTESIAN_POINT('Ctrl Pts',(5.935106408851,5.051486741012,8.40432401624)); #51163=CARTESIAN_POINT('Ctrl Pts',(5.925661444123,5.054451305248,8.367145526642)); #51164=CARTESIAN_POINT('Ctrl Pts',(5.929134467861,5.02465386867,8.327489131123)); #51165=CARTESIAN_POINT('Ctrl Pts',(5.94489849108,5.027636206769,8.292518110495)); #51166=CARTESIAN_POINT('',(5.63015370117699,5.02775760577912,8.19142371851061)); #51167=CARTESIAN_POINT('',(5.630153689607,5.027757230918,8.191423750297)); #51168=CARTESIAN_POINT('Ctrl Pts',(5.60759613521984,5.05136254934161,8.44925797728308)); #51169=CARTESIAN_POINT('Ctrl Pts',(5.60690733572748,5.05100473414563,8.44535158608367)); #51170=CARTESIAN_POINT('Ctrl Pts',(5.60626513950518,5.05064690773558,8.44143699949645)); #51171=CARTESIAN_POINT('Ctrl Pts',(5.60566964632687,5.05028907906076,8.43751531586745)); #51172=CARTESIAN_POINT('Ctrl Pts',(5.60507415314855,5.04993125038595,8.43359363223844)); #51173=CARTESIAN_POINT('Ctrl Pts',(5.60452536314239,5.04957341953043,8.42966485157779)); #51174=CARTESIAN_POINT('Ctrl Pts',(5.60402337332326,5.04921559777756,8.42573009807293)); #51175=CARTESIAN_POINT('Ctrl Pts',(5.60352138350413,5.04885777602469,8.42179534456804)); #51176=CARTESIAN_POINT('Ctrl Pts',(5.60306619374029,5.04849996344234,8.41785461819872)); #51177=CARTESIAN_POINT('Ctrl Pts',(5.60265790218427,5.04814216965656,8.41390903629356)); #51178=CARTESIAN_POINT('Ctrl Pts',(5.60224961062826,5.04778437587079,8.40996345438847)); #51179=CARTESIAN_POINT('Ctrl Pts',(5.60188821722068,5.0474266009387,8.40601301694508)); #51180=CARTESIAN_POINT('Ctrl Pts',(5.60157381946084,5.04706885262387,8.40205884335456)); #51181=CARTESIAN_POINT('Ctrl Pts',(5.60125942170099,5.04671110430904,8.39810466976395)); #51182=CARTESIAN_POINT('Ctrl Pts',(5.60099201951079,5.04635338265541,8.39414676000422)); #51183=CARTESIAN_POINT('Ctrl Pts',(5.6007717125221,5.04599569259114,8.39018623305395)); #51184=CARTESIAN_POINT('Ctrl Pts',(5.60055140553342,5.04563800252688,8.38622570610376)); #51185=CARTESIAN_POINT('Ctrl Pts',(5.60037819367976,5.04528034408158,8.38226256201594)); #51186=CARTESIAN_POINT('Ctrl Pts',(5.60025216960751,5.04492271882037,8.37829792064314)); #51187=CARTESIAN_POINT('Ctrl Pts',(5.60012614553526,5.04456509355915,8.37433327927026)); #51188=CARTESIAN_POINT('Ctrl Pts',(5.60004730916348,5.0442075015029,8.37036714040145)); #51189=CARTESIAN_POINT('Ctrl Pts',(5.60001577968516,5.04384994050967,8.36640062320593)); #51190=CARTESIAN_POINT('Ctrl Pts',(5.59998425020684,5.04349237951645,8.36243410601049)); #51191=CARTESIAN_POINT('Ctrl Pts',(5.60000002757255,5.0431348495465,8.35846721173753)); #51192=CARTESIAN_POINT('Ctrl Pts',(5.60006307406998,5.04277734460762,8.35450106031768)); #51193=CARTESIAN_POINT('Ctrl Pts',(5.60012612056741,5.04241983966873,8.35053490889774)); #51194=CARTESIAN_POINT('Ctrl Pts',(5.60023643620115,5.04206235971374,8.34656950092486)); #51195=CARTESIAN_POINT('Ctrl Pts',(5.60039390897725,5.04170489717519,8.34260595816507)); #51196=CARTESIAN_POINT('Ctrl Pts',(5.60055138175335,5.04134743463665,8.33864241540536)); #51197=CARTESIAN_POINT('Ctrl Pts',(5.60075601167541,5.04098998949022,8.33468073771961)); #51198=CARTESIAN_POINT('Ctrl Pts',(5.60100770466374,5.04063255330555,8.33072204700586)); #51199=CARTESIAN_POINT('Ctrl Pts',(5.60125939765208,5.04027511712087,8.32676335629203)); #51200=CARTESIAN_POINT('Ctrl Pts',(5.60155815370516,5.03991768986625,8.32280765259546)); #51201=CARTESIAN_POINT('Ctrl Pts',(5.60190387345984,5.03956026265103,8.31885605769626)); #51202=CARTESIAN_POINT('Ctrl Pts',(5.60224959321452,5.03920283543581,8.31490446279707)); #51203=CARTESIAN_POINT('Ctrl Pts',(5.60264227667216,5.03884540823083,8.31095697667916)); #51204=CARTESIAN_POINT('Ctrl Pts',(5.60308182689186,5.03848797214335,8.30701472133458)); #51205=CARTESIAN_POINT('Ctrl Pts',(5.60352137711156,5.03813053605587,8.30307246599009)); #51206=CARTESIAN_POINT('Ctrl Pts',(5.6040077940869,5.03777309105417,8.29913544146375)); #51207=CARTESIAN_POINT('Ctrl Pts',(5.60454097565315,5.03741562870182,8.29520476894698)); #51208=CARTESIAN_POINT('Ctrl Pts',(5.60507415721941,5.03705816634946,8.29127409643012)); #51209=CARTESIAN_POINT('Ctrl Pts',(5.60565410339712,5.03670068662209,8.28734977578518)); #51210=CARTESIAN_POINT('Ctrl Pts',(5.60628072968639,5.0363431819425,8.28343293118449)); #51211=CARTESIAN_POINT('Ctrl Pts',(5.60690735597565,5.03598567726292,8.27951608658389)); #51212=CARTESIAN_POINT('Ctrl Pts',(5.60758066226875,5.0356281475839,8.27560671861169)); #51213=CARTESIAN_POINT('Ctrl Pts',(5.60830049123112,5.03527058690044,8.27170593673417)); #51214=CARTESIAN_POINT('Ctrl Pts',(5.6090203201935,5.03491302621697,8.26780515485656)); #51215=CARTESIAN_POINT('Ctrl Pts',(5.60978667165682,5.03455543448924,8.26391296031243)); #51216=CARTESIAN_POINT('Ctrl Pts',(5.610599233897,5.03419780956025,8.26003043457186)); #51217=CARTESIAN_POINT('Ctrl Pts',(5.61141179613716,5.03384018463126,8.25614790883137)); #51218=CARTESIAN_POINT('Ctrl Pts',(5.61227056927041,5.03348252652181,8.25227505170075)); #51219=CARTESIAN_POINT('Ctrl Pts',(5.61317526759697,5.03312483678077,8.24841294993331)); #51220=CARTESIAN_POINT('Ctrl Pts',(5.61407996592355,5.03276714703974,8.2445508481658)); #51221=CARTESIAN_POINT('Ctrl Pts',(5.61503058949964,5.03240942569663,8.24069950182512)); #51222=CARTESIAN_POINT('Ctrl Pts',(5.61602684589785,5.03205167766338,8.23685999559042)); #51223=CARTESIAN_POINT('Ctrl Pts',(5.61702310229604,5.03169392963014,8.23302048935582)); #51224=CARTESIAN_POINT('Ctrl Pts',(5.61806499159698,5.0313361549506,8.22919282321911)); #51225=CARTESIAN_POINT('Ctrl Pts',(5.61915222340155,5.03097836137357,8.2253780826357)); #51226=CARTESIAN_POINT('Ctrl Pts',(5.62023945520614,5.03062056779653,8.22156334205221)); #51227=CARTESIAN_POINT('Ctrl Pts',(5.62137202957318,5.03026275537901,8.21776152702991)); #51228=CARTESIAN_POINT('Ctrl Pts',(5.6225496558191,5.02990493373547,8.21397372088119)); #51229=CARTESIAN_POINT('Ctrl Pts',(5.62372728206498,5.02954711209193,8.21018591473254)); #51230=CARTESIAN_POINT('Ctrl Pts',(5.62494996032283,5.02918928129013,8.20641211746045)); #51231=CARTESIAN_POINT('Ctrl Pts',(5.62621739983677,5.02883145260607,8.20265341932138)); #51232=CARTESIAN_POINT('Ctrl Pts',(5.62748483935074,5.02847362392201,8.19889472118224)); #51233=CARTESIAN_POINT('Ctrl Pts',(5.62879703999296,5.02811579743958,8.19515112216383)); #51234=CARTESIAN_POINT('Ctrl Pts',(5.63015371278465,5.02775798210956,8.19142368662227)); #51235=CARTESIAN_POINT('Origin',(6.1,4.4,8.36243382196)); #51236=CARTESIAN_POINT('',(5.63015370117699,3.77224239422088,8.19142371851061)); #51237=CARTESIAN_POINT('',(5.630153689607,3.772242769082,8.191423750297)); #51238=CARTESIAN_POINT('Ctrl Pts',(5.60759613521985,3.74863745065839,8.44925797728308)); #51239=CARTESIAN_POINT('Ctrl Pts',(5.60690733572749,3.74899526585437,8.44535158608366)); #51240=CARTESIAN_POINT('Ctrl Pts',(5.60626513950523,3.74935309226442,8.44143699949644)); #51241=CARTESIAN_POINT('Ctrl Pts',(5.60566964632695,3.74971092093924,8.43751531586743)); #51242=CARTESIAN_POINT('Ctrl Pts',(5.60507415314866,3.75006874961405,8.43359363223842)); #51243=CARTESIAN_POINT('Ctrl Pts',(5.60452536314251,3.75042658046957,8.42966485157777)); #51244=CARTESIAN_POINT('Ctrl Pts',(5.60402337332335,3.75078440222244,8.42573009807292)); #51245=CARTESIAN_POINT('Ctrl Pts',(5.60352138350417,3.75114222397531,8.42179534456803)); #51246=CARTESIAN_POINT('Ctrl Pts',(5.60306619374024,3.75150003655766,8.41785461819872)); #51247=CARTESIAN_POINT('Ctrl Pts',(5.60265790218418,3.75185783034344,8.41390903629356)); #51248=CARTESIAN_POINT('Ctrl Pts',(5.60224961062814,3.75221562412921,8.40996345438848)); #51249=CARTESIAN_POINT('Ctrl Pts',(5.60188821722058,3.7525733990613,8.40601301694509)); #51250=CARTESIAN_POINT('Ctrl Pts',(5.60157381946074,3.75293114737613,8.40205884335457)); #51251=CARTESIAN_POINT('Ctrl Pts',(5.60125942170089,3.75328889569096,8.39810466976396)); #51252=CARTESIAN_POINT('Ctrl Pts',(5.60099201951068,3.75364661734459,8.39414676000422)); #51253=CARTESIAN_POINT('Ctrl Pts',(5.600771712522,3.75400430740886,8.39018623305395)); #51254=CARTESIAN_POINT('Ctrl Pts',(5.60055140553332,3.75436199747312,8.38622570610377)); #51255=CARTESIAN_POINT('Ctrl Pts',(5.60037819367968,3.75471965591842,8.38226256201594)); #51256=CARTESIAN_POINT('Ctrl Pts',(5.60025216960745,3.75507728117963,8.37829792064314)); #51257=CARTESIAN_POINT('Ctrl Pts',(5.60012614553522,3.75543490644085,8.37433327927026)); #51258=CARTESIAN_POINT('Ctrl Pts',(5.60004730916348,3.7557924984971,8.37036714040145)); #51259=CARTESIAN_POINT('Ctrl Pts',(5.60001577968519,3.75615005949033,8.36640062320593)); #51260=CARTESIAN_POINT('Ctrl Pts',(5.59998425020691,3.75650762048355,8.36243410601049)); #51261=CARTESIAN_POINT('Ctrl Pts',(5.60000002757264,3.7568651504535,8.35846721173754)); #51262=CARTESIAN_POINT('Ctrl Pts',(5.60006307407005,3.75722265539239,8.35450106031768)); #51263=CARTESIAN_POINT('Ctrl Pts',(5.60012612056746,3.75758016033128,8.35053490889774)); #51264=CARTESIAN_POINT('Ctrl Pts',(5.60023643620113,3.75793764028626,8.34656950092486)); #51265=CARTESIAN_POINT('Ctrl Pts',(5.60039390897719,3.75829510282481,8.34260595816507)); #51266=CARTESIAN_POINT('Ctrl Pts',(5.60055138175325,3.75865256536335,8.33864241540536)); #51267=CARTESIAN_POINT('Ctrl Pts',(5.6007560116753,3.75901001050979,8.3346807377196)); #51268=CARTESIAN_POINT('Ctrl Pts',(5.60100770466363,3.75936744669445,8.33072204700586)); #51269=CARTESIAN_POINT('Ctrl Pts',(5.60125939765196,3.75972488287913,8.32676335629202)); #51270=CARTESIAN_POINT('Ctrl Pts',(5.60155815370504,3.76008231013375,8.32280765259545)); #51271=CARTESIAN_POINT('Ctrl Pts',(5.60190387345973,3.76043973734897,8.31885605769625)); #51272=CARTESIAN_POINT('Ctrl Pts',(5.60224959321442,3.76079716456419,8.31490446279706)); #51273=CARTESIAN_POINT('Ctrl Pts',(5.6026422766721,3.76115459176917,8.31095697667915)); #51274=CARTESIAN_POINT('Ctrl Pts',(5.60308182689183,3.76151202785665,8.30701472133458)); #51275=CARTESIAN_POINT('Ctrl Pts',(5.60352137711156,3.76186946394413,8.30307246599009)); #51276=CARTESIAN_POINT('Ctrl Pts',(5.60400779408692,3.76222690894583,8.29913544146375)); #51277=CARTESIAN_POINT('Ctrl Pts',(5.60454097565319,3.76258437129818,8.29520476894698)); #51278=CARTESIAN_POINT('Ctrl Pts',(5.60507415721947,3.76294183365054,8.29127409643012)); #51279=CARTESIAN_POINT('Ctrl Pts',(5.60565410339721,3.76329931337791,8.28734977578519)); #51280=CARTESIAN_POINT('Ctrl Pts',(5.6062807296865,3.7636568180575,8.28343293118451)); #51281=CARTESIAN_POINT('Ctrl Pts',(5.60690735597577,3.76401432273708,8.27951608658391)); #51282=CARTESIAN_POINT('Ctrl Pts',(5.60758066226888,3.7643718524161,8.27560671861171)); #51283=CARTESIAN_POINT('Ctrl Pts',(5.60830049123122,3.76472941309956,8.27170593673418)); #51284=CARTESIAN_POINT('Ctrl Pts',(5.60902032019358,3.76508697378303,8.26780515485657)); #51285=CARTESIAN_POINT('Ctrl Pts',(5.60978667165685,3.76544456551076,8.26391296031244)); #51286=CARTESIAN_POINT('Ctrl Pts',(5.61059923389698,3.76580219043975,8.26003043457186)); #51287=CARTESIAN_POINT('Ctrl Pts',(5.6114117961371,3.76615981536874,8.25614790883136)); #51288=CARTESIAN_POINT('Ctrl Pts',(5.61227056927032,3.7665174734782,8.25227505170072)); #51289=CARTESIAN_POINT('Ctrl Pts',(5.61317526759687,3.76687516321923,8.24841294993329)); #51290=CARTESIAN_POINT('Ctrl Pts',(5.61407996592343,3.76723285296026,8.24455084816577)); #51291=CARTESIAN_POINT('Ctrl Pts',(5.61503058949953,3.76759057430337,8.24069950182509)); #51292=CARTESIAN_POINT('Ctrl Pts',(5.61602684589777,3.76794832233662,8.2368599955904)); #51293=CARTESIAN_POINT('Ctrl Pts',(5.61702310229598,3.76830607036986,8.2330204893558)); #51294=CARTESIAN_POINT('Ctrl Pts',(5.61806499159696,3.7686638450494,8.2291928232191)); #51295=CARTESIAN_POINT('Ctrl Pts',(5.61915222340154,3.76902163862643,8.2253780826357)); #51296=CARTESIAN_POINT('Ctrl Pts',(5.62023945520615,3.76937943220347,8.22156334205221)); #51297=CARTESIAN_POINT('Ctrl Pts',(5.6213720295732,3.76973724462099,8.21776152702992)); #51298=CARTESIAN_POINT('Ctrl Pts',(5.62254965581915,3.77009506626454,8.21397372088112)); #51299=CARTESIAN_POINT('Ctrl Pts',(5.62372728206508,3.77045288790809,8.2101859147324)); #51300=CARTESIAN_POINT('Ctrl Pts',(5.62494996032302,3.7708107187099,8.20641211746016)); #51301=CARTESIAN_POINT('Ctrl Pts',(5.62621739983695,3.77116854739395,8.20265341932114)); #51302=CARTESIAN_POINT('Ctrl Pts',(5.6274848393509,3.77152637607802,8.19889472118203)); #51303=CARTESIAN_POINT('Ctrl Pts',(5.62879703999298,3.77188420256042,8.19515112216384)); #51304=CARTESIAN_POINT('Ctrl Pts',(5.63015371278456,3.77224201789044,8.19142368662224)); #51305=CARTESIAN_POINT('Ctrl Pts',(5.935106408851,3.748513258988,8.40432401624)); #51306=CARTESIAN_POINT('Ctrl Pts',(5.925661444123,3.745548694752,8.367145526642)); #51307=CARTESIAN_POINT('Ctrl Pts',(5.929134467861,3.77534613133,8.327489131123)); #51308=CARTESIAN_POINT('Ctrl Pts',(5.94489849108,3.772363793231,8.292518110495)); #51309=CARTESIAN_POINT('Ctrl Pts',(5.818879542158,3.747347921014,8.433824927174)); #51310=CARTESIAN_POINT('Ctrl Pts',(5.802808097337,3.749129216583,8.370539529645)); #51311=CARTESIAN_POINT('Ctrl Pts',(5.808741359756,3.771763012049,8.302791548503)); #51312=CARTESIAN_POINT('Ctrl Pts',(5.835569150169,3.773532994833,8.243262821364)); #51313=CARTESIAN_POINT('Ctrl Pts',(5.702639660183,3.74618258304,8.463274583275)); #51314=CARTESIAN_POINT('Ctrl Pts',(5.680006274884,3.752709738414,8.374088085035)); #51315=CARTESIAN_POINT('Ctrl Pts',(5.688425941659,3.768179892768,8.277950631593)); #51316=CARTESIAN_POINT('Ctrl Pts',(5.726218010538,3.774702196435,8.194055904178)); #51317=CARTESIAN_POINT('Ctrl Pts',(5.586386796832,3.745017245066,8.492672975942)); #51318=CARTESIAN_POINT('Ctrl Pts',(5.55725573642,3.756290260245,8.37779126186)); #51319=CARTESIAN_POINT('Ctrl Pts',(5.568187987908,3.764596773487,8.252966270117)); #51320=CARTESIAN_POINT('Ctrl Pts',(5.616845104293,3.775871398036,8.144897373397)); #51321=CARTESIAN_POINT('',(5.912061475843,3.772242769082,8.294029793294)); #51322=CARTESIAN_POINT('Origin',(6.013406889876,3.836121384541,7.577014896647)); #51323=CARTESIAN_POINT('',(6.334399030701,3.883585795927,7.133666897935)); #51324=CARTESIAN_POINT('',(6.052491244465,3.883585795927,7.031060854937)); #51325=CARTESIAN_POINT('',(6.334399030701,3.883585795927,7.133666897935)); #51326=CARTESIAN_POINT('',(5.912061475843,3.772242769082,8.294029793294)); #51327=CARTESIAN_POINT('',(5.630153689607,3.772242769082,8.191423750297)); #51328=CARTESIAN_POINT('Origin',(6.361760938176,4.082777683841,7.162739344975)); #51329=CARTESIAN_POINT('',(6.396660090146,4.082777683841,6.962606042998)); #51330=CARTESIAN_POINT('',(6.11475230391,4.082777683841,6.86)); #51331=CARTESIAN_POINT('',(6.396660090146,4.082777683841,6.962606042998)); #51332=CARTESIAN_POINT('Origin',(6.328256061481,4.082777683841,7.150544567155)); #51333=CARTESIAN_POINT('Origin',(6.046348275245,4.082777683841,7.047938524157)); #51334=CARTESIAN_POINT('Origin',(5.872452996759,4.4,7.525711875148)); #51335=CARTESIAN_POINT('',(6.052491244465,4.916414204073,7.031060854937)); #51336=CARTESIAN_POINT('',(6.11475230391,4.717222316159,6.86)); #51337=CARTESIAN_POINT('Origin',(6.046348275245,4.717222316159,7.047938524157)); #51338=CARTESIAN_POINT('',(6.11475230391,4.082777683841,6.86)); #51339=CARTESIAN_POINT('',(5.630153689607,5.027757230918,8.191423750297)); #51340=CARTESIAN_POINT('Origin',(6.015614684881,4.717222316159,7.036752412073)); #51341=CARTESIAN_POINT('',(6.396660090146,4.717222316159,6.962606042998)); #51342=CARTESIAN_POINT('',(6.11475230391,4.717222316159,6.86)); #51343=CARTESIAN_POINT('',(6.334399030701,4.916414204073,7.133666897935)); #51344=CARTESIAN_POINT('',(6.052491244465,4.916414204073,7.031060854937)); #51345=CARTESIAN_POINT('Origin',(6.328256061481,4.717222316159,7.150544567155)); #51346=CARTESIAN_POINT('Origin',(6.154360782994,4.4,7.628317918146)); #51347=CARTESIAN_POINT('',(5.912061475843,5.027757230918,8.294029793294)); #51348=CARTESIAN_POINT('',(6.396660090146,4.717222316159,6.962606042998)); #51349=CARTESIAN_POINT('Origin',(6.11475230391,4.4,6.86)); #51350=CARTESIAN_POINT('Origin',(6.013406889876,4.963878615459,7.577014896647)); #51351=CARTESIAN_POINT('Origin',(6.584614583937,5.671428571429,12.06)); #51352=CARTESIAN_POINT('Origin',(6.55,4.42,1.3)); #51353=CARTESIAN_POINT('',(6.26,4.515,1.124002840932)); #51354=CARTESIAN_POINT('',(6.55,4.515,1.124002840932)); #51355=CARTESIAN_POINT('Origin',(6.26,4.42,1.3)); #51356=CARTESIAN_POINT('Origin',(6.26,0.,0.)); #51357=CARTESIAN_POINT('',(6.26,3.51,0.6)); #51358=CARTESIAN_POINT('',(6.26,4.41,0.6)); #51359=CARTESIAN_POINT('',(6.26,3.51,0.6)); #51360=CARTESIAN_POINT('',(6.26,3.51,0.948005681864)); #51361=CARTESIAN_POINT('',(6.26,3.51,0.948005681864)); #51362=CARTESIAN_POINT('',(6.26,3.01,0.948005681864)); #51363=CARTESIAN_POINT('Origin',(6.26,3.26,0.948005681864)); #51364=CARTESIAN_POINT('',(6.26,3.01,1.3)); #51365=CARTESIAN_POINT('',(6.26,3.01,1.3)); #51366=CARTESIAN_POINT('',(6.26,4.62,1.3)); #51367=CARTESIAN_POINT('',(6.26,4.41,0.948005681864)); #51368=CARTESIAN_POINT('Origin',(6.26,4.61,0.948005681864)); #51369=CARTESIAN_POINT('',(6.26,4.41,0.6)); #51370=CARTESIAN_POINT('Origin',(6.26,0.,0.6)); #51371=CARTESIAN_POINT('',(5.75,4.41,0.6)); #51372=CARTESIAN_POINT('',(5.75,4.41,0.6)); #51373=CARTESIAN_POINT('',(5.55,4.21,0.6)); #51374=CARTESIAN_POINT('Origin',(5.75,4.21,0.6)); #51375=CARTESIAN_POINT('',(5.55,3.71,0.6)); #51376=CARTESIAN_POINT('',(5.55,3.71,0.6)); #51377=CARTESIAN_POINT('',(5.75,3.51,0.6)); #51378=CARTESIAN_POINT('Origin',(5.75,3.71,0.6)); #51379=CARTESIAN_POINT('',(6.26,3.51,0.6)); #51380=CARTESIAN_POINT('Origin',(6.55,3.51,0.948005681864)); #51381=CARTESIAN_POINT('',(6.55,3.51,0.948005681864)); #51382=CARTESIAN_POINT('',(5.75,3.51,0.3)); #51383=CARTESIAN_POINT('',(5.75,3.51,0.3)); #51384=CARTESIAN_POINT('',(6.25,3.51,0.3)); #51385=CARTESIAN_POINT('',(6.25,3.51,0.3)); #51386=CARTESIAN_POINT('Origin',(6.25,3.51,0.6)); #51387=CARTESIAN_POINT('Origin',(6.25,-18.60246605675,0.6)); #51388=CARTESIAN_POINT('',(6.25,4.41,0.3)); #51389=CARTESIAN_POINT('',(6.25,3.51,0.3)); #51390=CARTESIAN_POINT('Origin',(6.25,4.41,0.6)); #51391=CARTESIAN_POINT('Origin',(6.55,4.41,0.3)); #51392=CARTESIAN_POINT('',(5.75,4.41,0.3)); #51393=CARTESIAN_POINT('',(5.75,4.41,0.3)); #51394=CARTESIAN_POINT('',(5.75,4.41,0.3)); #51395=CARTESIAN_POINT('',(6.55,4.41,0.948005681864)); #51396=CARTESIAN_POINT('Origin',(6.55,4.61,0.948005681864)); #51397=CARTESIAN_POINT('Origin',(5.75,4.21,0.3)); #51398=CARTESIAN_POINT('',(5.55,4.21,0.3)); #51399=CARTESIAN_POINT('',(5.55,4.21,0.3)); #51400=CARTESIAN_POINT('Origin',(5.75,4.21,0.3)); #51401=CARTESIAN_POINT('Origin',(6.55,3.51,0.3)); #51402=CARTESIAN_POINT('',(5.55,3.71,0.3)); #51403=CARTESIAN_POINT('Origin',(5.75,3.71,0.3)); #51404=CARTESIAN_POINT('',(5.55,3.71,0.3)); #51405=CARTESIAN_POINT('Origin',(5.55,3.71,0.3)); #51406=CARTESIAN_POINT('',(5.55,3.71,0.3)); #51407=CARTESIAN_POINT('Origin',(5.75,3.71,0.3)); #51408=CARTESIAN_POINT('Origin',(6.55,3.26,0.948005681864)); #51409=CARTESIAN_POINT('',(6.26,3.01,0.948005681864)); #51410=CARTESIAN_POINT('Origin',(6.55,3.01,1.3)); #51411=CARTESIAN_POINT('',(6.25,3.01,0.2)); #51412=CARTESIAN_POINT('',(6.26,3.01,1.3)); #51413=CARTESIAN_POINT('Origin',(-26.02337369419,2.81,0.2)); #51414=CARTESIAN_POINT('Origin',(6.55,4.62,1.3)); #51415=CARTESIAN_POINT('Origin',(6.55,1.29,15.26)); #51416=CARTESIAN_POINT('',(-6.55,1.29,4.23)); #51417=CARTESIAN_POINT('Origin',(6.55,1.29,15.26)); #51418=CARTESIAN_POINT('',(6.25,1.29,4.23)); #51419=CARTESIAN_POINT('Origin',(6.55,1.29,15.26)); #51420=CARTESIAN_POINT('',(5.65,1.29,15.23426406871)); #51421=CARTESIAN_POINT('',(5.65,1.29,14.81)); #51422=CARTESIAN_POINT('',(5.65,1.29,15.23426406871)); #51423=CARTESIAN_POINT('',(-5.65,1.29,14.81)); #51424=CARTESIAN_POINT('',(-5.65,1.29,14.81)); #51425=CARTESIAN_POINT('',(-5.65,1.29,15.23426406871)); #51426=CARTESIAN_POINT('',(-5.65,1.29,14.81)); #51427=CARTESIAN_POINT('',(-5.65,1.29,15.23426406871)); #51428=CARTESIAN_POINT('',(-6.55,1.29,5.73)); #51429=CARTESIAN_POINT('',(-5.65,1.29,11.54)); #51430=CARTESIAN_POINT('',(-6.25,1.29,11.54)); #51431=CARTESIAN_POINT('',(-0.75,1.29,11.54)); #51432=CARTESIAN_POINT('',(-5.65,1.29,11.54)); #51433=CARTESIAN_POINT('',(-0.725,1.29,11.54)); #51434=CARTESIAN_POINT('',(-0.75,1.29,11.54)); #51435=CARTESIAN_POINT('',(-0.725,1.29,10.84)); #51436=CARTESIAN_POINT('',(-0.725,1.29,11.54)); #51437=CARTESIAN_POINT('',(0.725,1.29,10.84)); #51438=CARTESIAN_POINT('',(-0.725,1.29,10.84)); #51439=CARTESIAN_POINT('',(0.725,1.29,11.54)); #51440=CARTESIAN_POINT('',(0.725,1.29,10.84)); #51441=CARTESIAN_POINT('',(0.75,1.29,11.54)); #51442=CARTESIAN_POINT('',(0.725,1.29,11.54)); #51443=CARTESIAN_POINT('',(5.65,1.29,11.54)); #51444=CARTESIAN_POINT('',(0.75,1.29,11.54)); #51445=CARTESIAN_POINT('',(5.65,1.29,11.54)); #51446=CARTESIAN_POINT('',(6.25,1.29,5.73)); #51447=CARTESIAN_POINT('',(6.55,1.29,15.23426406871)); #51448=CARTESIAN_POINT('',(-1.72,1.29,11.855)); #51449=CARTESIAN_POINT('',(-1.815,1.29,11.76)); #51450=CARTESIAN_POINT('Origin',(-1.815,1.29,11.855)); #51451=CARTESIAN_POINT('',(-1.825,1.29,11.76)); #51452=CARTESIAN_POINT('',(-1.815,1.29,11.76)); #51453=CARTESIAN_POINT('',(-1.92,1.29,11.855)); #51454=CARTESIAN_POINT('Origin',(-1.825,1.29,11.855)); #51455=CARTESIAN_POINT('',(-1.92,1.29,11.86)); #51456=CARTESIAN_POINT('',(-1.92,1.29,11.86)); #51457=CARTESIAN_POINT('',(-3.72,1.29,11.86)); #51458=CARTESIAN_POINT('',(-1.92,1.29,11.86)); #51459=CARTESIAN_POINT('',(-3.72,1.29,11.855)); #51460=CARTESIAN_POINT('',(-3.72,1.29,11.86)); #51461=CARTESIAN_POINT('',(-3.815,1.29,11.76)); #51462=CARTESIAN_POINT('Origin',(-3.815,1.29,11.855)); #51463=CARTESIAN_POINT('',(-3.825,1.29,11.76)); #51464=CARTESIAN_POINT('',(-3.815,1.29,11.76)); #51465=CARTESIAN_POINT('',(-3.92,1.29,11.855)); #51466=CARTESIAN_POINT('Origin',(-3.825,1.29,11.855)); #51467=CARTESIAN_POINT('',(-3.92,1.29,13.36)); #51468=CARTESIAN_POINT('',(-3.92,1.29,11.855)); #51469=CARTESIAN_POINT('',(-3.72,1.29,13.56)); #51470=CARTESIAN_POINT('Origin',(-3.72,1.29,13.36)); #51471=CARTESIAN_POINT('',(-1.92,1.29,13.56)); #51472=CARTESIAN_POINT('',(-3.72,1.29,13.56)); #51473=CARTESIAN_POINT('',(-1.72,1.29,13.36)); #51474=CARTESIAN_POINT('Origin',(-1.92,1.29,13.36)); #51475=CARTESIAN_POINT('',(-1.72,1.29,13.36)); #51476=CARTESIAN_POINT('',(3.92,1.29,11.855)); #51477=CARTESIAN_POINT('',(3.825,1.29,11.76)); #51478=CARTESIAN_POINT('Origin',(3.825,1.29,11.855)); #51479=CARTESIAN_POINT('',(3.815,1.29,11.76)); #51480=CARTESIAN_POINT('',(3.815,1.29,11.76)); #51481=CARTESIAN_POINT('',(3.72,1.29,11.855)); #51482=CARTESIAN_POINT('Origin',(3.815,1.29,11.855)); #51483=CARTESIAN_POINT('',(3.72,1.29,11.86)); #51484=CARTESIAN_POINT('',(3.72,1.29,11.86)); #51485=CARTESIAN_POINT('',(1.92,1.29,11.86)); #51486=CARTESIAN_POINT('',(1.92,1.29,11.86)); #51487=CARTESIAN_POINT('',(1.92,1.29,11.855)); #51488=CARTESIAN_POINT('',(1.92,1.29,11.86)); #51489=CARTESIAN_POINT('',(1.825,1.29,11.76)); #51490=CARTESIAN_POINT('Origin',(1.825,1.29,11.855)); #51491=CARTESIAN_POINT('',(1.815,1.29,11.76)); #51492=CARTESIAN_POINT('',(1.815,1.29,11.76)); #51493=CARTESIAN_POINT('',(1.72,1.29,11.855)); #51494=CARTESIAN_POINT('Origin',(1.815,1.29,11.855)); #51495=CARTESIAN_POINT('',(1.72,1.29,13.36)); #51496=CARTESIAN_POINT('',(1.72,1.29,13.36)); #51497=CARTESIAN_POINT('',(1.92,1.29,13.56)); #51498=CARTESIAN_POINT('Origin',(1.92,1.29,13.36)); #51499=CARTESIAN_POINT('',(3.72,1.29,13.56)); #51500=CARTESIAN_POINT('',(3.72,1.29,13.56)); #51501=CARTESIAN_POINT('',(3.92,1.29,13.36)); #51502=CARTESIAN_POINT('Origin',(3.72,1.29,13.36)); #51503=CARTESIAN_POINT('',(3.92,1.29,11.855)); #51504=CARTESIAN_POINT('Origin',(8.295648887882,1.29,4.23)); #51505=CARTESIAN_POINT('',(6.740703786754,-3.148358336071,4.462604504056)); #51506=CARTESIAN_POINT('',(7.521393804843,-2.493281629828,4.428273388622)); #51507=CARTESIAN_POINT('',(6.740703786754,-3.148358336071,4.462604504056)); #51508=CARTESIAN_POINT('',(7.583022221559,-1.788865603426,4.391356508986)); #51509=CARTESIAN_POINT('Origin',(7.2,-2.110259408269,4.40820004457356)); #51510=CARTESIAN_POINT('',(6.366977778441,-0.339640269584,4.315405827559)); #51511=CARTESIAN_POINT('',(7.583022221559,-1.788865603426,4.391356508986)); #51512=CARTESIAN_POINT('Origin',(6.75,-0.01824646474114,4.29856229197194)); #51513=CARTESIAN_POINT('',(6.596791111376,-0.146803986678,4.305299706207)); #51514=CARTESIAN_POINT('Origin',(6.75,-0.01824646474114,4.29856229197194)); #51515=CARTESIAN_POINT('',(7.812835554495,-1.59602932052,4.381250387634)); #51516=CARTESIAN_POINT('',(6.596791111376,-0.146803986678,4.305299706207)); #51517=CARTESIAN_POINT('',(7.714230087749,-2.723094962764,4.44031739505)); #51518=CARTESIAN_POINT('Origin',(7.2,-2.110259408269,4.40820004457356)); #51519=CARTESIAN_POINT('',(6.924311119227,-3.385915677911,4.475054356794)); #51520=CARTESIAN_POINT('',(7.714230087749,-2.723094962764,4.44031739505)); #51521=CARTESIAN_POINT('',(6.740703786754,-3.148358336071,4.462604504056)); #51522=CARTESIAN_POINT('Origin',(8.295648887882,1.29,4.23)); #51523=CARTESIAN_POINT('',(-6.924311119227,-3.385915677911,4.475054356794)); #51524=CARTESIAN_POINT('',(-7.714230087749,-2.723094962764,4.44031739505)); #51525=CARTESIAN_POINT('',(-6.924311119227,-3.385915677911,4.475054356794)); #51526=CARTESIAN_POINT('',(-7.812835554495,-1.59602932052,4.381250387634)); #51527=CARTESIAN_POINT('Origin',(-7.2,-2.110259408269,4.40820004457356)); #51528=CARTESIAN_POINT('',(-6.596791111376,-0.146803986678,4.305299706207)); #51529=CARTESIAN_POINT('',(-7.812835554495,-1.59602932052,4.381250387634)); #51530=CARTESIAN_POINT('Origin',(-6.75,-0.01824646474114,4.29856229197194)); #51531=CARTESIAN_POINT('',(-6.366977778441,-0.339640269584,4.315405827559)); #51532=CARTESIAN_POINT('Origin',(-6.75,-0.01824646474114,4.29856229197194)); #51533=CARTESIAN_POINT('',(-7.583022221559,-1.788865603426,4.391356508986)); #51534=CARTESIAN_POINT('',(-6.366977778441,-0.339640269584,4.315405827559)); #51535=CARTESIAN_POINT('',(-7.521393804843,-2.493281629828,4.428273388622)); #51536=CARTESIAN_POINT('Origin',(-7.2,-2.110259408269,4.40820004457356)); #51537=CARTESIAN_POINT('',(-6.740703786754,-3.148358336071,4.462604504056)); #51538=CARTESIAN_POINT('',(-7.521393804843,-2.493281629828,4.428273388622)); #51539=CARTESIAN_POINT('',(-6.740703786754,-3.148358336071,4.462604504056)); #51540=CARTESIAN_POINT('Origin',(6.75880552531065,-3.14472775185453,4.97999999997838)); #51541=CARTESIAN_POINT('',(6.740703786754,-3.148358336071,5.497395495944)); #51542=CARTESIAN_POINT('',(6.924311119227,-3.385915677911,5.484945643206)); #51543=CARTESIAN_POINT('',(6.740703786754,-3.148358336071,5.497395495944)); #51544=CARTESIAN_POINT('Origin',(6.75407860871705,-3.13713552789474,4.98000000000004)); #51545=CARTESIAN_POINT('Origin',(6.93736410892518,-3.37496291906955,4.98000000000004)); #51546=CARTESIAN_POINT('Origin',(7.714230087749,-2.723094962764,5.73)); #51547=CARTESIAN_POINT('',(7.714230087749,-2.723094962764,5.51968260495)); #51548=CARTESIAN_POINT('',(7.714230087749,-2.723094962764,5.51968260495)); #51549=CARTESIAN_POINT('',(7.714230087749,-2.723094962764,5.51968260495)); #51550=CARTESIAN_POINT('Origin',(8.295648887882,1.29,5.73)); #51551=CARTESIAN_POINT('',(7.812835554495,-1.59602932052,5.578749612366)); #51552=CARTESIAN_POINT('Origin',(7.2,-2.110259408269,5.55179995542644)); #51553=CARTESIAN_POINT('',(6.596791111376,-0.146803986678,5.654700293793)); #51554=CARTESIAN_POINT('',(6.596791111376,-0.146803986678,5.654700293793)); #51555=CARTESIAN_POINT('Origin',(6.75,-0.01824646474114,5.66143770802806)); #51556=CARTESIAN_POINT('',(6.366977778441,-0.339640269584,5.644594172441)); #51557=CARTESIAN_POINT('Origin',(6.75,-0.01824646474114,5.66143770802806)); #51558=CARTESIAN_POINT('',(7.583022221559,-1.788865603426,5.568643491014)); #51559=CARTESIAN_POINT('',(7.583022221559,-1.788865603426,5.568643491014)); #51560=CARTESIAN_POINT('',(7.521393804843,-2.493281629828,5.531726611378)); #51561=CARTESIAN_POINT('Origin',(7.2,-2.110259408269,5.55179995542644)); #51562=CARTESIAN_POINT('',(6.740703786754,-3.148358336071,5.497395495944)); #51563=CARTESIAN_POINT('Origin',(8.295648887882,1.29,5.73)); #51564=CARTESIAN_POINT('',(-6.740703786754,-3.148358336071,5.497395495944)); #51565=CARTESIAN_POINT('',(-6.924311119227,-3.385915677911,5.484945643206)); #51566=CARTESIAN_POINT('',(-6.740703786754,-3.148358336071,5.497395495944)); #51567=CARTESIAN_POINT('',(-7.521393804843,-2.493281629828,5.531726611378)); #51568=CARTESIAN_POINT('',(-7.521393804843,-2.493281629828,5.531726611378)); #51569=CARTESIAN_POINT('',(-7.583022221559,-1.788865603426,5.568643491014)); #51570=CARTESIAN_POINT('Origin',(-7.2,-2.110259408269,5.55179995542644)); #51571=CARTESIAN_POINT('',(-6.366977778441,-0.339640269584,5.644594172441)); #51572=CARTESIAN_POINT('',(-6.366977778441,-0.339640269584,5.644594172441)); #51573=CARTESIAN_POINT('Origin',(-6.75,-0.01824646474114,5.66143770802806)); #51574=CARTESIAN_POINT('',(-6.596791111376,-0.146803986678,5.654700293793)); #51575=CARTESIAN_POINT('Origin',(-6.75,-0.01824646474114,5.66143770802806)); #51576=CARTESIAN_POINT('',(-7.812835554495,-1.59602932052,5.578749612366)); #51577=CARTESIAN_POINT('',(-7.812835554495,-1.59602932052,5.578749612366)); #51578=CARTESIAN_POINT('',(-7.714230087749,-2.723094962764,5.51968260495)); #51579=CARTESIAN_POINT('Origin',(-7.2,-2.110259408269,5.55179995542644)); #51580=CARTESIAN_POINT('',(-6.924311119227,-3.385915677911,5.484945643206)); #51581=CARTESIAN_POINT('Origin',(6.357163717094,-3.470186667064,5.73)); #51582=CARTESIAN_POINT('',(7.521393804843,-2.493281629828,5.531726611378)); #51583=CARTESIAN_POINT('Origin',(7.2,-2.110259408269,5.73)); #51584=CARTESIAN_POINT('',(7.583022221559,-1.788865603426,5.568643491014)); #51585=CARTESIAN_POINT('Origin',(7.583022221559,-1.788865603426,5.73)); #51586=CARTESIAN_POINT('',(6.366977778441,-0.339640269584,5.644594172441)); #51587=CARTESIAN_POINT('Origin',(6.75,-0.01824646474114,5.73)); #51588=CARTESIAN_POINT('Origin',(6.75,-0.01824646474114,5.73)); #51589=CARTESIAN_POINT('',(6.596791111376,-0.146803986678,5.654700293793)); #51590=CARTESIAN_POINT('Origin',(6.596791111376,-0.146803986678,5.73)); #51591=CARTESIAN_POINT('',(7.812835554495,-1.59602932052,5.578749612366)); #51592=CARTESIAN_POINT('Origin',(7.2,-2.110259408269,5.73)); #51593=CARTESIAN_POINT('Origin',(-6.75880948688218,-3.14473289146635,4.97999999998504)); #51594=CARTESIAN_POINT('Origin',(-6.7540786087146,-3.13713552789679,4.97999999999998)); #51595=CARTESIAN_POINT('Origin',(-6.9373640612722,-3.37496295905539,4.97999999999755)); #51596=CARTESIAN_POINT('Origin',(-6.55,-3.7,5.73)); #51597=CARTESIAN_POINT('',(-7.714230087749,-2.723094962764,5.51968260495)); #51598=CARTESIAN_POINT('Origin',(-7.2,-2.110259408269,5.73)); #51599=CARTESIAN_POINT('',(-7.812835554495,-1.59602932052,5.578749612366)); #51600=CARTESIAN_POINT('Origin',(-7.812835554495,-1.59602932052,5.73)); #51601=CARTESIAN_POINT('',(-6.596791111376,-0.146803986678,5.654700293793)); #51602=CARTESIAN_POINT('Origin',(-6.75,-0.01824646474114,5.73)); #51603=CARTESIAN_POINT('Origin',(-7.521393804843,-2.493281629828,5.73)); #51604=CARTESIAN_POINT('',(-7.521393804843,-2.493281629828,5.531726611378)); #51605=CARTESIAN_POINT('Origin',(-7.2,-2.110259408269,5.73)); #51606=CARTESIAN_POINT('',(-7.583022221559,-1.788865603426,5.568643491014)); #51607=CARTESIAN_POINT('Origin',(-6.366977778441,-0.339640269584,5.73)); #51608=CARTESIAN_POINT('',(-6.366977778441,-0.339640269584,5.644594172441)); #51609=CARTESIAN_POINT('Origin',(-6.75,-0.01824646474114,5.73)); #51610=CARTESIAN_POINT('Origin',(-1.72,1.29,13.56)); #51611=CARTESIAN_POINT('',(-1.72,1.59,13.36)); #51612=CARTESIAN_POINT('',(-1.72,1.59,11.855)); #51613=CARTESIAN_POINT('',(-1.72,1.59,13.36)); #51614=CARTESIAN_POINT('',(-1.72,1.59,11.855)); #51615=CARTESIAN_POINT('',(-1.72,1.59,13.36)); #51616=CARTESIAN_POINT('Origin',(-1.92,1.622852649481,13.36)); #51617=CARTESIAN_POINT('',(-1.92,1.59,13.56)); #51618=CARTESIAN_POINT('',(-1.92,1.59,13.56)); #51619=CARTESIAN_POINT('Origin',(-1.92,1.59,13.36)); #51620=CARTESIAN_POINT('Origin',(6.55,1.59,0.)); #51621=CARTESIAN_POINT('',(-6.25,1.59,14.81)); #51622=CARTESIAN_POINT('',(0.725,1.59,11.54)); #51623=CARTESIAN_POINT('',(6.25,1.59,11.54)); #51624=CARTESIAN_POINT('',(0.725,1.59,10.84)); #51625=CARTESIAN_POINT('',(0.725,1.59,11.54)); #51626=CARTESIAN_POINT('',(-0.725,1.59,10.84)); #51627=CARTESIAN_POINT('',(0.725,1.59,10.84)); #51628=CARTESIAN_POINT('',(-0.725,1.59,11.54)); #51629=CARTESIAN_POINT('',(-0.725,1.59,10.84)); #51630=CARTESIAN_POINT('',(-0.725,1.59,11.54)); #51631=CARTESIAN_POINT('',(3.72,1.59,13.56)); #51632=CARTESIAN_POINT('',(1.92,1.59,13.56)); #51633=CARTESIAN_POINT('',(3.72,1.59,13.56)); #51634=CARTESIAN_POINT('',(1.72,1.59,13.36)); #51635=CARTESIAN_POINT('Origin',(1.92,1.59,13.36)); #51636=CARTESIAN_POINT('',(1.72,1.59,11.855)); #51637=CARTESIAN_POINT('',(1.72,1.59,13.36)); #51638=CARTESIAN_POINT('',(1.815,1.59,11.76)); #51639=CARTESIAN_POINT('Origin',(1.815,1.59,11.855)); #51640=CARTESIAN_POINT('',(1.825,1.59,11.76)); #51641=CARTESIAN_POINT('',(1.815,1.59,11.76)); #51642=CARTESIAN_POINT('',(1.92,1.59,11.855)); #51643=CARTESIAN_POINT('Origin',(1.825,1.59,11.855)); #51644=CARTESIAN_POINT('',(1.92,1.59,11.86)); #51645=CARTESIAN_POINT('',(1.92,1.59,11.855)); #51646=CARTESIAN_POINT('',(3.72,1.59,11.86)); #51647=CARTESIAN_POINT('',(1.92,1.59,11.86)); #51648=CARTESIAN_POINT('',(3.72,1.59,11.855)); #51649=CARTESIAN_POINT('',(3.72,1.59,11.855)); #51650=CARTESIAN_POINT('',(3.815,1.59,11.76)); #51651=CARTESIAN_POINT('Origin',(3.815,1.59,11.855)); #51652=CARTESIAN_POINT('',(3.825,1.59,11.76)); #51653=CARTESIAN_POINT('',(3.815,1.59,11.76)); #51654=CARTESIAN_POINT('',(3.92,1.59,11.855)); #51655=CARTESIAN_POINT('Origin',(3.825,1.59,11.855)); #51656=CARTESIAN_POINT('',(3.92,1.59,13.36)); #51657=CARTESIAN_POINT('',(3.92,1.59,11.855)); #51658=CARTESIAN_POINT('Origin',(3.72,1.59,13.36)); #51659=CARTESIAN_POINT('',(-3.72,1.59,13.56)); #51660=CARTESIAN_POINT('',(-3.72,1.59,13.56)); #51661=CARTESIAN_POINT('',(-3.92,1.59,13.36)); #51662=CARTESIAN_POINT('Origin',(-3.72,1.59,13.36)); #51663=CARTESIAN_POINT('',(-3.92,1.59,11.855)); #51664=CARTESIAN_POINT('',(-3.92,1.59,11.855)); #51665=CARTESIAN_POINT('',(-3.825,1.59,11.76)); #51666=CARTESIAN_POINT('Origin',(-3.825,1.59,11.855)); #51667=CARTESIAN_POINT('',(-3.815,1.59,11.76)); #51668=CARTESIAN_POINT('',(-3.815,1.59,11.76)); #51669=CARTESIAN_POINT('',(-3.72,1.59,11.855)); #51670=CARTESIAN_POINT('Origin',(-3.815,1.59,11.855)); #51671=CARTESIAN_POINT('',(-3.72,1.59,11.86)); #51672=CARTESIAN_POINT('',(-3.72,1.59,11.855)); #51673=CARTESIAN_POINT('',(-1.92,1.59,11.86)); #51674=CARTESIAN_POINT('',(-1.92,1.59,11.86)); #51675=CARTESIAN_POINT('',(-1.92,1.59,11.855)); #51676=CARTESIAN_POINT('',(-1.92,1.59,11.855)); #51677=CARTESIAN_POINT('',(-1.825,1.59,11.76)); #51678=CARTESIAN_POINT('Origin',(-1.825,1.59,11.855)); #51679=CARTESIAN_POINT('',(-1.815,1.59,11.76)); #51680=CARTESIAN_POINT('',(-1.815,1.59,11.76)); #51681=CARTESIAN_POINT('Origin',(-1.815,1.59,11.855)); #51682=CARTESIAN_POINT('Origin',(-3.92,1.29,13.56)); #51683=CARTESIAN_POINT('',(-3.72,1.59,13.56)); #51684=CARTESIAN_POINT('Origin',(-3.72,1.622852649481,13.36)); #51685=CARTESIAN_POINT('',(-3.92,1.59,13.36)); #51686=CARTESIAN_POINT('Origin',(-3.92,1.29,11.76)); #51687=CARTESIAN_POINT('',(-3.92,1.59,11.855)); #51688=CARTESIAN_POINT('Origin',(-3.825,1.622852649481,11.855)); #51689=CARTESIAN_POINT('',(-3.825,1.59,11.76)); #51690=CARTESIAN_POINT('Origin',(-1.72,1.29,11.76)); #51691=CARTESIAN_POINT('',(-1.815,1.59,11.76)); #51692=CARTESIAN_POINT('',(-1.825,1.29,11.76)); #51693=CARTESIAN_POINT('Origin',(-1.72,1.29,11.76)); #51694=CARTESIAN_POINT('',(-3.815,1.59,11.76)); #51695=CARTESIAN_POINT('Origin',(-1.815,1.622852649481,11.855)); #51696=CARTESIAN_POINT('Origin',(-1.825,1.257147350519,11.855)); #51697=CARTESIAN_POINT('',(-1.92,1.29,11.855)); #51698=CARTESIAN_POINT('Origin',(-1.92,0.,0.)); #51699=CARTESIAN_POINT('',(-1.92,1.50471528727,13.12409666024)); #51700=CARTESIAN_POINT('',(-1.92,1.585338406872,13.00895491268)); #51701=CARTESIAN_POINT('',(-1.92,1.50471528727,13.12409666024)); #51702=CARTESIAN_POINT('',(-1.92,1.609446522172,12.82583559674)); #51703=CARTESIAN_POINT('Origin',(-1.92,1.421507998015,12.89423962541)); #51704=CARTESIAN_POINT('',(-1.92,1.320153689607,12.03101007166)); #51705=CARTESIAN_POINT('',(-1.92,1.609446522172,12.82583559674)); #51706=CARTESIAN_POINT('Origin',(-1.92,1.79,11.86)); #51707=CARTESIAN_POINT('',(-1.92,1.602061475843,11.92840402867)); #51708=CARTESIAN_POINT('Origin',(-1.92,1.79,11.86)); #51709=CARTESIAN_POINT('',(-1.92,1.891354308408,12.72322955375)); #51710=CARTESIAN_POINT('',(-1.92,1.602061475843,11.92840402867)); #51711=CARTESIAN_POINT('',(-1.92,1.831084020159,13.18102784359)); #51712=CARTESIAN_POINT('Origin',(-1.92,1.421507998015,12.89423962541)); #51713=CARTESIAN_POINT('',(-1.92,1.750460900557,13.29616959114)); #51714=CARTESIAN_POINT('',(-1.92,1.831084020159,13.18102784359)); #51715=CARTESIAN_POINT('',(-1.92,1.750460900557,13.29616959114)); #51716=CARTESIAN_POINT('Origin',(-2.12,1.781410603499,13.31784080645)); #51717=CARTESIAN_POINT('',(-2.12,1.635745613287,13.46)); #51718=CARTESIAN_POINT('Origin',(-2.12,1.750460900557,13.29616959114)); #51719=CARTESIAN_POINT('',(-2.12,1.39,13.28792706909)); #51720=CARTESIAN_POINT('',(-2.12,1.635745613287,13.46)); #51721=CARTESIAN_POINT('Origin',(-2.12,1.50471528727,13.12409666024)); #51722=CARTESIAN_POINT('Origin',(-1.92,1.39,13.28792706909)); #51723=CARTESIAN_POINT('',(-3.52,1.39,13.28792706909)); #51724=CARTESIAN_POINT('',(-2.12,1.39,13.28792706909)); #51725=CARTESIAN_POINT('',(-3.72,1.50471528727,13.12409666024)); #51726=CARTESIAN_POINT('Origin',(-3.52,1.50471528727,13.12409666024)); #51727=CARTESIAN_POINT('',(-3.72,1.585338406872,13.00895491268)); #51728=CARTESIAN_POINT('',(-3.72,1.50471528727,13.12409666024)); #51729=CARTESIAN_POINT('',(-1.92,1.585338406872,13.00895491268)); #51730=CARTESIAN_POINT('Origin',(-1.92,1.421507998015,12.89423962541)); #51731=CARTESIAN_POINT('',(-3.72,1.609446522172,12.82583559674)); #51732=CARTESIAN_POINT('Origin',(-3.72,1.421507998015,12.89423962541)); #51733=CARTESIAN_POINT('',(-1.92,1.609446522172,12.82583559674)); #51734=CARTESIAN_POINT('Origin',(-1.92,1.609446522172,12.82583559674)); #51735=CARTESIAN_POINT('',(-3.72,1.320153689607,12.03101007166)); #51736=CARTESIAN_POINT('',(-3.72,1.609446522172,12.82583559674)); #51737=CARTESIAN_POINT('',(-1.92,1.320153689607,12.03101007166)); #51738=CARTESIAN_POINT('Origin',(-1.92,1.79,11.86)); #51739=CARTESIAN_POINT('Origin',(-3.72,1.79,11.86)); #51740=CARTESIAN_POINT('Origin',(-3.72,0.,0.)); #51741=CARTESIAN_POINT('',(-3.72,1.750460900557,13.29616959114)); #51742=CARTESIAN_POINT('',(-3.72,1.50471528727,13.12409666024)); #51743=CARTESIAN_POINT('',(-3.72,1.831084020159,13.18102784359)); #51744=CARTESIAN_POINT('',(-3.72,1.831084020159,13.18102784359)); #51745=CARTESIAN_POINT('',(-3.72,1.891354308408,12.72322955375)); #51746=CARTESIAN_POINT('Origin',(-3.72,1.421507998015,12.89423962541)); #51747=CARTESIAN_POINT('',(-3.72,1.602061475843,11.92840402867)); #51748=CARTESIAN_POINT('',(-3.72,1.602061475843,11.92840402867)); #51749=CARTESIAN_POINT('Origin',(-3.72,1.79,11.86)); #51750=CARTESIAN_POINT('',(-3.72,1.59,11.855)); #51751=CARTESIAN_POINT('Origin',(-3.52,1.460749512129,13.09331149306)); #51752=CARTESIAN_POINT('',(-3.52,1.635745613287,13.46)); #51753=CARTESIAN_POINT('',(-3.52,1.39,13.28792706909)); #51754=CARTESIAN_POINT('Origin',(-3.52,1.750460900557,13.29616959114)); #51755=CARTESIAN_POINT('Origin',(-1.92,1.831084020159,13.18102784359)); #51756=CARTESIAN_POINT('',(-1.92,1.831084020159,13.18102784359)); #51757=CARTESIAN_POINT('',(-2.12,1.635745613287,13.46)); #51758=CARTESIAN_POINT('Origin',(-1.92,1.635745613287,13.46)); #51759=CARTESIAN_POINT('Origin',(-1.92,1.421507998015,12.89423962541)); #51760=CARTESIAN_POINT('',(-1.92,1.891354308408,12.72322955375)); #51761=CARTESIAN_POINT('Origin',(-1.92,1.602061475843,11.92840402867)); #51762=CARTESIAN_POINT('',(-1.92,1.602061475843,11.92840402867)); #51763=CARTESIAN_POINT('Origin',(-1.92,1.79,11.86)); #51764=CARTESIAN_POINT('Origin',(-3.815,1.627054321129,11.855)); #51765=CARTESIAN_POINT('Origin',(3.92,1.29,13.56)); #51766=CARTESIAN_POINT('',(3.72,1.29,13.56)); #51767=CARTESIAN_POINT('',(1.92,1.29,13.56)); #51768=CARTESIAN_POINT('Origin',(3.72,1.251551018737,13.36)); #51769=CARTESIAN_POINT('',(3.92,1.29,13.36)); #51770=CARTESIAN_POINT('Origin',(3.92,1.29,11.76)); #51771=CARTESIAN_POINT('',(3.92,1.29,11.855)); #51772=CARTESIAN_POINT('Origin',(3.825,1.251551018737,11.855)); #51773=CARTESIAN_POINT('',(3.825,1.29,11.76)); #51774=CARTESIAN_POINT('Origin',(1.72,1.29,11.76)); #51775=CARTESIAN_POINT('',(3.815,1.29,11.76)); #51776=CARTESIAN_POINT('Origin',(1.72,1.29,11.76)); #51777=CARTESIAN_POINT('',(1.825,1.59,11.76)); #51778=CARTESIAN_POINT('',(1.815,1.29,11.76)); #51779=CARTESIAN_POINT('Origin',(3.815,1.257147350519,11.855)); #51780=CARTESIAN_POINT('',(3.72,1.29,11.855)); #51781=CARTESIAN_POINT('Origin',(3.72,0.,0.)); #51782=CARTESIAN_POINT('',(3.72,1.50471528727,13.12409666024)); #51783=CARTESIAN_POINT('',(3.72,1.585338406872,13.00895491268)); #51784=CARTESIAN_POINT('',(3.72,1.50471528727,13.12409666024)); #51785=CARTESIAN_POINT('',(3.72,1.609446522172,12.82583559674)); #51786=CARTESIAN_POINT('Origin',(3.72,1.421507998015,12.89423962541)); #51787=CARTESIAN_POINT('',(3.72,1.320153689607,12.03101007166)); #51788=CARTESIAN_POINT('',(3.72,1.609446522172,12.82583559674)); #51789=CARTESIAN_POINT('Origin',(3.72,1.79,11.86)); #51790=CARTESIAN_POINT('',(3.72,1.602061475843,11.92840402867)); #51791=CARTESIAN_POINT('Origin',(3.72,1.79,11.86)); #51792=CARTESIAN_POINT('',(3.72,1.891354308408,12.72322955375)); #51793=CARTESIAN_POINT('',(3.72,1.602061475843,11.92840402867)); #51794=CARTESIAN_POINT('',(3.72,1.831084020159,13.18102784359)); #51795=CARTESIAN_POINT('Origin',(3.72,1.421507998015,12.89423962541)); #51796=CARTESIAN_POINT('',(3.72,1.750460900557,13.29616959114)); #51797=CARTESIAN_POINT('',(3.72,1.831084020159,13.18102784359)); #51798=CARTESIAN_POINT('',(3.72,1.750460900557,13.29616959114)); #51799=CARTESIAN_POINT('Origin',(3.52,1.781410603499,13.31784080645)); #51800=CARTESIAN_POINT('',(3.52,1.635745613287,13.46)); #51801=CARTESIAN_POINT('Origin',(3.52,1.750460900557,13.29616959114)); #51802=CARTESIAN_POINT('',(3.52,1.39,13.28792706909)); #51803=CARTESIAN_POINT('',(3.52,1.635745613287,13.46)); #51804=CARTESIAN_POINT('Origin',(3.52,1.50471528727,13.12409666024)); #51805=CARTESIAN_POINT('Origin',(1.92,1.39,13.28792706909)); #51806=CARTESIAN_POINT('',(1.92,1.50471528727,13.12409666024)); #51807=CARTESIAN_POINT('',(1.92,1.585338406872,13.00895491268)); #51808=CARTESIAN_POINT('',(1.92,1.50471528727,13.12409666024)); #51809=CARTESIAN_POINT('',(1.92,1.585338406872,13.00895491268)); #51810=CARTESIAN_POINT('',(2.12,1.39,13.28792706909)); #51811=CARTESIAN_POINT('',(2.12,1.39,13.28792706909)); #51812=CARTESIAN_POINT('Origin',(2.12,1.50471528727,13.12409666024)); #51813=CARTESIAN_POINT('Origin',(2.12,1.460749512129,13.09331149306)); #51814=CARTESIAN_POINT('',(1.92,1.750460900557,13.29616959114)); #51815=CARTESIAN_POINT('',(1.92,1.50471528727,13.12409666024)); #51816=CARTESIAN_POINT('',(2.12,1.635745613287,13.46)); #51817=CARTESIAN_POINT('',(2.12,1.39,13.28792706909)); #51818=CARTESIAN_POINT('Origin',(2.12,1.750460900557,13.29616959114)); #51819=CARTESIAN_POINT('Origin',(1.92,1.831084020159,13.18102784359)); #51820=CARTESIAN_POINT('',(2.12,1.635745613287,13.46)); #51821=CARTESIAN_POINT('',(1.92,1.831084020159,13.18102784359)); #51822=CARTESIAN_POINT('',(1.92,1.831084020159,13.18102784359)); #51823=CARTESIAN_POINT('',(1.92,1.831084020159,13.18102784359)); #51824=CARTESIAN_POINT('Origin',(1.92,0.,0.)); #51825=CARTESIAN_POINT('',(1.92,1.891354308408,12.72322955375)); #51826=CARTESIAN_POINT('Origin',(1.92,1.421507998015,12.89423962541)); #51827=CARTESIAN_POINT('',(1.92,1.602061475843,11.92840402867)); #51828=CARTESIAN_POINT('',(1.92,1.602061475843,11.92840402867)); #51829=CARTESIAN_POINT('Origin',(1.92,1.79,11.86)); #51830=CARTESIAN_POINT('',(1.92,1.59,11.855)); #51831=CARTESIAN_POINT('',(1.92,1.320153689607,12.03101007166)); #51832=CARTESIAN_POINT('Origin',(1.92,1.79,11.86)); #51833=CARTESIAN_POINT('',(1.92,1.609446522172,12.82583559674)); #51834=CARTESIAN_POINT('',(1.92,1.609446522172,12.82583559674)); #51835=CARTESIAN_POINT('Origin',(1.92,1.421507998015,12.89423962541)); #51836=CARTESIAN_POINT('Origin',(1.92,1.421507998015,12.89423962541)); #51837=CARTESIAN_POINT('',(1.92,1.609446522172,12.82583559674)); #51838=CARTESIAN_POINT('Origin',(1.92,1.609446522172,12.82583559674)); #51839=CARTESIAN_POINT('',(1.92,1.320153689607,12.03101007166)); #51840=CARTESIAN_POINT('Origin',(1.92,1.79,11.86)); #51841=CARTESIAN_POINT('Origin',(1.825,1.627054321129,11.855)); #51842=CARTESIAN_POINT('Origin',(1.92,1.79,11.86)); #51843=CARTESIAN_POINT('',(1.92,1.602061475843,11.92840402867)); #51844=CARTESIAN_POINT('Origin',(1.92,1.602061475843,11.92840402867)); #51845=CARTESIAN_POINT('',(1.92,1.891354308408,12.72322955375)); #51846=CARTESIAN_POINT('Origin',(1.92,1.421507998015,12.89423962541)); #51847=CARTESIAN_POINT('Origin',(1.92,1.635745613287,13.46)); #51848=CARTESIAN_POINT('Origin',(1.815,1.251551018737,11.855)); #51849=CARTESIAN_POINT('',(1.72,1.29,11.855)); #51850=CARTESIAN_POINT('Origin',(1.72,1.29,13.56)); #51851=CARTESIAN_POINT('',(1.72,1.29,13.36)); #51852=CARTESIAN_POINT('Origin',(1.92,1.251551018737,13.36)); #51853=CARTESIAN_POINT('Origin',(-6.286328979918,1.14,14.81)); #51854=CARTESIAN_POINT('Origin',(6.7,1.14,14.81)); #51855=CARTESIAN_POINT('Origin',(-6.7,1.14,14.81)); #51856=CARTESIAN_POINT('',(-5.65,1.14,15.26)); #51857=CARTESIAN_POINT('Origin',(-5.65,1.14,14.81)); #51858=CARTESIAN_POINT('',(5.65,1.14,15.26)); #51859=CARTESIAN_POINT('',(-5.65,1.14,15.26)); #51860=CARTESIAN_POINT('Origin',(5.65,1.14,14.81)); #51861=CARTESIAN_POINT('Origin',(5.65,0.,0.)); #51862=CARTESIAN_POINT('',(5.65,0.87,15.26)); #51863=CARTESIAN_POINT('',(5.65,0.87,14.96)); #51864=CARTESIAN_POINT('',(5.65,0.87,15.26)); #51865=CARTESIAN_POINT('',(5.65,1.14,14.96)); #51866=CARTESIAN_POINT('',(5.65,0.87,14.96)); #51867=CARTESIAN_POINT('Origin',(5.65,1.14,14.81)); #51868=CARTESIAN_POINT('',(5.65,1.14,15.26)); #51869=CARTESIAN_POINT('Origin',(0.,0.,15.26)); #51870=CARTESIAN_POINT('',(-5.65,0.87,15.26)); #51871=CARTESIAN_POINT('',(-5.35,0.57,15.26)); #51872=CARTESIAN_POINT('Origin',(-5.35,0.87,15.26)); #51873=CARTESIAN_POINT('',(5.35,0.57,15.26)); #51874=CARTESIAN_POINT('',(-5.35,0.57,15.26)); #51875=CARTESIAN_POINT('Origin',(5.35,0.87,15.26)); #51876=CARTESIAN_POINT('',(-5.65,1.14,15.26)); #51877=CARTESIAN_POINT('Origin',(0.,0.,15.26)); #51878=CARTESIAN_POINT('',(6.9,6.71,15.26)); #51879=CARTESIAN_POINT('',(6.7,6.71,15.26)); #51880=CARTESIAN_POINT('',(6.9,6.71,15.26)); #51881=CARTESIAN_POINT('',(6.7,1.59,15.26)); #51882=CARTESIAN_POINT('',(6.7,6.71,15.26)); #51883=CARTESIAN_POINT('',(6.9,1.59,15.26)); #51884=CARTESIAN_POINT('',(6.9,1.59,15.26)); #51885=CARTESIAN_POINT('',(7.2,1.89,15.26)); #51886=CARTESIAN_POINT('Origin',(6.9,1.89,15.26)); #51887=CARTESIAN_POINT('',(7.2,6.41,15.26)); #51888=CARTESIAN_POINT('',(7.2,6.41,15.26)); #51889=CARTESIAN_POINT('Origin',(6.9,6.41,15.26)); #51890=CARTESIAN_POINT('Origin',(0.,0.,15.26)); #51891=CARTESIAN_POINT('',(-6.7,6.71,15.26)); #51892=CARTESIAN_POINT('',(-6.9,6.71,15.26)); #51893=CARTESIAN_POINT('',(-6.7,6.71,15.26)); #51894=CARTESIAN_POINT('',(-7.2,6.41,15.26)); #51895=CARTESIAN_POINT('Origin',(-6.9,6.41,15.26)); #51896=CARTESIAN_POINT('',(-7.2,1.89,15.26)); #51897=CARTESIAN_POINT('',(-7.2,6.41,15.26)); #51898=CARTESIAN_POINT('',(-6.9,1.59,15.26)); #51899=CARTESIAN_POINT('Origin',(-6.9,1.89,15.26)); #51900=CARTESIAN_POINT('',(-6.7,1.59,15.26)); #51901=CARTESIAN_POINT('',(-6.7,1.59,15.26)); #51902=CARTESIAN_POINT('',(-6.7,1.59,15.26)); #51903=CARTESIAN_POINT('Origin',(0.,0.,15.26)); #51904=CARTESIAN_POINT('',(5.65,7.43,15.26)); #51905=CARTESIAN_POINT('',(5.35,7.73,15.26)); #51906=CARTESIAN_POINT('Origin',(5.35,7.43,15.26)); #51907=CARTESIAN_POINT('',(-5.35,7.73,15.26)); #51908=CARTESIAN_POINT('',(-5.35,7.73,15.26)); #51909=CARTESIAN_POINT('',(-5.65,7.43,15.26)); #51910=CARTESIAN_POINT('Origin',(-5.35,7.43,15.26)); #51911=CARTESIAN_POINT('',(-5.65,7.01,15.26)); #51912=CARTESIAN_POINT('',(-5.65,7.43,15.26)); #51913=CARTESIAN_POINT('',(-5.65,7.01,15.26)); #51914=CARTESIAN_POINT('',(-6.55,6.71,15.26)); #51915=CARTESIAN_POINT('',(5.65,7.01,15.26)); #51916=CARTESIAN_POINT('',(6.55,7.01,15.26)); #51917=CARTESIAN_POINT('',(5.65,7.43,15.26)); #51918=CARTESIAN_POINT('Origin',(-5.35,0.87,14.92367102008)); #51919=CARTESIAN_POINT('',(-5.65,0.87,14.96)); #51920=CARTESIAN_POINT('',(-5.65,0.87,14.96)); #51921=CARTESIAN_POINT('',(-5.35,0.57,14.96)); #51922=CARTESIAN_POINT('Origin',(-5.35,0.87,14.96)); #51923=CARTESIAN_POINT('',(-5.35,0.57,14.96)); #51924=CARTESIAN_POINT('Origin',(-5.65,0.57,15.26)); #51925=CARTESIAN_POINT('',(5.35,0.57,14.96)); #51926=CARTESIAN_POINT('',(-5.35,0.57,14.96)); #51927=CARTESIAN_POINT('',(5.35,0.57,15.26)); #51928=CARTESIAN_POINT('Origin',(5.35,0.87,15.29778261088)); #51929=CARTESIAN_POINT('Origin',(5.35,0.87,14.96)); #51930=CARTESIAN_POINT('Origin',(-5.65,0.57,14.96)); #51931=CARTESIAN_POINT('',(-5.65,1.14,14.96)); #51932=CARTESIAN_POINT('',(-5.65,0.87,14.96)); #51933=CARTESIAN_POINT('',(-5.65,1.14,14.96)); #51934=CARTESIAN_POINT('Origin',(-6.601586901272,1.14,14.81)); #51935=CARTESIAN_POINT('Origin',(-5.65,1.14,14.81)); #51936=CARTESIAN_POINT('Origin',(-5.65,0.,0.)); #51937=CARTESIAN_POINT('Origin',(-6.55,6.71,1.54)); #51938=CARTESIAN_POINT('Origin',(6.7,6.71,14.81)); #51939=CARTESIAN_POINT('',(6.9,6.71,14.96)); #51940=CARTESIAN_POINT('',(6.9,6.71,15.26)); #51941=CARTESIAN_POINT('',(6.7,6.71,14.96)); #51942=CARTESIAN_POINT('',(6.7,6.71,14.96)); #51943=CARTESIAN_POINT('Origin',(6.7,6.71,14.81)); #51944=CARTESIAN_POINT('Origin',(-6.55,6.71,1.54)); #51945=CARTESIAN_POINT('Origin',(-6.7,6.71,14.81)); #51946=CARTESIAN_POINT('',(-6.7,6.71,14.96)); #51947=CARTESIAN_POINT('Origin',(-6.7,6.71,14.81)); #51948=CARTESIAN_POINT('',(-6.9,6.71,14.96)); #51949=CARTESIAN_POINT('',(-6.9,6.71,14.96)); #51950=CARTESIAN_POINT('',(-6.9,6.71,14.96)); #51951=CARTESIAN_POINT('Origin',(6.7,6.747782610882,14.81)); #51952=CARTESIAN_POINT('Origin',(6.7,1.59,14.81)); #51953=CARTESIAN_POINT('Origin',(6.7,6.71,14.81)); #51954=CARTESIAN_POINT('Origin',(-6.25,6.71,1.54)); #51955=CARTESIAN_POINT('Origin',(-6.7,6.71,14.81)); #51956=CARTESIAN_POINT('',(-1.577967837146,6.71,9.687485394339)); #51957=CARTESIAN_POINT('',(-1.697734146564,6.71,9.56)); #51958=CARTESIAN_POINT('Origin',(-1.697734146564,6.71,9.68)); #51959=CARTESIAN_POINT('',(-1.707915158316,6.71,9.56)); #51960=CARTESIAN_POINT('',(-1.707915158316,6.71,9.56)); #51961=CARTESIAN_POINT('',(-1.827636333094,6.71,9.671824407676)); #51962=CARTESIAN_POINT('Origin',(-1.707915158316,6.71,9.68)); #51963=CARTESIAN_POINT('',(-1.83024329015217,6.71,9.70999999999999)); #51964=CARTESIAN_POINT('',(-1.827636333094,6.71,9.671824407676)); #51965=CARTESIAN_POINT('',(-3.80975670984783,6.71,9.70999999999999)); #51966=CARTESIAN_POINT('',(-1.830243291137,6.71,9.71)); #51967=CARTESIAN_POINT('',(-3.812363666906,6.71,9.671824407676)); #51968=CARTESIAN_POINT('',(-3.812363666906,6.71,9.671824407676)); #51969=CARTESIAN_POINT('',(-3.932084841684,6.71,9.56)); #51970=CARTESIAN_POINT('Origin',(-3.932084841684,6.71,9.68)); #51971=CARTESIAN_POINT('',(-3.942265853436,6.71,9.56)); #51972=CARTESIAN_POINT('',(-3.942265853436,6.71,9.56)); #51973=CARTESIAN_POINT('',(-4.062032162854,6.71,9.687485394339)); #51974=CARTESIAN_POINT('Origin',(-3.942265853436,6.71,9.68)); #51975=CARTESIAN_POINT('',(-3.831720271423,6.71,13.37247565723)); #51976=CARTESIAN_POINT('',(-3.831720271423,6.71,13.37247565723)); #51977=CARTESIAN_POINT('',(-3.632109755726,6.71,13.56)); #51978=CARTESIAN_POINT('Origin',(-3.632109755726,6.71,13.36)); #51979=CARTESIAN_POINT('',(-2.007890244274,6.71,13.56)); #51980=CARTESIAN_POINT('',(-2.007890244274,6.71,13.56)); #51981=CARTESIAN_POINT('',(-1.808279728577,6.71,13.37247565723)); #51982=CARTESIAN_POINT('Origin',(-2.007890244274,6.71,13.36)); #51983=CARTESIAN_POINT('',(-1.577967837146,6.71,9.687485394339)); #51984=CARTESIAN_POINT('',(3.632109755726,6.71,13.56)); #51985=CARTESIAN_POINT('',(3.831720271423,6.71,13.37247565723)); #51986=CARTESIAN_POINT('Origin',(3.632109755726,6.71,13.36)); #51987=CARTESIAN_POINT('',(4.062032162854,6.71,9.687485394339)); #51988=CARTESIAN_POINT('',(3.831720271423,6.71,13.37247565723)); #51989=CARTESIAN_POINT('',(3.942265853436,6.71,9.56)); #51990=CARTESIAN_POINT('Origin',(3.942265853436,6.71,9.68)); #51991=CARTESIAN_POINT('',(3.932084841684,6.71,9.56)); #51992=CARTESIAN_POINT('',(3.942265853436,6.71,9.56)); #51993=CARTESIAN_POINT('',(3.812363666906,6.71,9.671824407676)); #51994=CARTESIAN_POINT('Origin',(3.932084841684,6.71,9.68)); #51995=CARTESIAN_POINT('',(3.80975670984783,6.71,9.70999999999999)); #51996=CARTESIAN_POINT('',(3.812363666906,6.71,9.671824407676)); #51997=CARTESIAN_POINT('',(1.83024329015217,6.71,9.70999999999999)); #51998=CARTESIAN_POINT('',(1.830243291137,6.71,9.71)); #51999=CARTESIAN_POINT('',(1.827636333094,6.71,9.671824407676)); #52000=CARTESIAN_POINT('',(1.827636333094,6.71,9.671824407676)); #52001=CARTESIAN_POINT('',(1.707915158316,6.71,9.56)); #52002=CARTESIAN_POINT('Origin',(1.707915158316,6.71,9.68)); #52003=CARTESIAN_POINT('',(1.697734146564,6.71,9.56)); #52004=CARTESIAN_POINT('',(1.707915158316,6.71,9.56)); #52005=CARTESIAN_POINT('',(1.577967837146,6.71,9.687485394339)); #52006=CARTESIAN_POINT('Origin',(1.697734146564,6.71,9.68)); #52007=CARTESIAN_POINT('',(1.808279728577,6.71,13.37247565723)); #52008=CARTESIAN_POINT('',(1.577967837146,6.71,9.687485394339)); #52009=CARTESIAN_POINT('',(2.007890244274,6.71,13.56)); #52010=CARTESIAN_POINT('Origin',(2.007890244274,6.71,13.36)); #52011=CARTESIAN_POINT('',(2.007890244274,6.71,13.56)); #52012=CARTESIAN_POINT('',(-4.8,6.71,2.31)); #52013=CARTESIAN_POINT('',(-4.8,6.71,3.01)); #52014=CARTESIAN_POINT('Origin',(-4.8,6.71,2.66)); #52015=CARTESIAN_POINT('',(-1.,6.71,3.01)); #52016=CARTESIAN_POINT('',(-4.8,6.71,3.01)); #52017=CARTESIAN_POINT('',(-1.,6.71,2.31)); #52018=CARTESIAN_POINT('Origin',(-1.,6.71,2.66)); #52019=CARTESIAN_POINT('',(-1.,6.71,2.31)); #52020=CARTESIAN_POINT('',(4.8,6.71,3.01)); #52021=CARTESIAN_POINT('',(4.8,6.71,2.31)); #52022=CARTESIAN_POINT('Origin',(4.8,6.71,2.66)); #52023=CARTESIAN_POINT('',(1.,6.71,2.31)); #52024=CARTESIAN_POINT('',(4.8,6.71,2.31)); #52025=CARTESIAN_POINT('',(1.,6.71,3.01)); #52026=CARTESIAN_POINT('Origin',(1.,6.71,2.66)); #52027=CARTESIAN_POINT('',(1.,6.71,3.01)); #52028=CARTESIAN_POINT('Origin',(1.82,7.01,13.56)); #52029=CARTESIAN_POINT('',(3.632109755726,7.01,13.56)); #52030=CARTESIAN_POINT('',(3.632109755726,7.01,13.56)); #52031=CARTESIAN_POINT('',(2.007890244274,7.01,13.56)); #52032=CARTESIAN_POINT('',(2.007890244274,7.01,13.56)); #52033=CARTESIAN_POINT('',(2.007890244274,7.01,13.56)); #52034=CARTESIAN_POINT('Origin',(3.632109755726,7.048448981263,13.36)); #52035=CARTESIAN_POINT('',(3.831720271423,7.01,13.37247565723)); #52036=CARTESIAN_POINT('',(3.831720271423,7.01,13.37247565723)); #52037=CARTESIAN_POINT('Origin',(3.632109755726,7.01,13.36)); #52038=CARTESIAN_POINT('Origin',(3.82,7.01,13.56)); #52039=CARTESIAN_POINT('',(4.062032162854,7.01,9.687485394339)); #52040=CARTESIAN_POINT('',(3.831720271423,7.01,13.37247565723)); #52041=CARTESIAN_POINT('',(4.062032162854,7.01,9.687485394339)); #52042=CARTESIAN_POINT('Origin',(3.942265853436,7.048448981263,9.68)); #52043=CARTESIAN_POINT('',(3.942265853436,7.01,9.56)); #52044=CARTESIAN_POINT('',(3.942265853436,7.01,9.56)); #52045=CARTESIAN_POINT('Origin',(3.942265853436,7.01,9.68)); #52046=CARTESIAN_POINT('Origin',(4.07,7.01,9.56)); #52047=CARTESIAN_POINT('',(1.707915158316,7.01,9.56)); #52048=CARTESIAN_POINT('',(1.707915158316,7.01,9.56)); #52049=CARTESIAN_POINT('',(1.697734146564,7.01,9.56)); #52050=CARTESIAN_POINT('',(1.707915158316,7.01,9.56)); #52051=CARTESIAN_POINT('',(1.697734146564,7.01,9.56)); #52052=CARTESIAN_POINT('Origin',(4.07,7.01,9.56)); #52053=CARTESIAN_POINT('',(3.932084841684,7.01,9.56)); #52054=CARTESIAN_POINT('',(3.932084841684,6.71,9.56)); #52055=CARTESIAN_POINT('',(3.942265853436,7.01,9.56)); #52056=CARTESIAN_POINT('Origin',(1.707915158316,7.048448981263,9.68)); #52057=CARTESIAN_POINT('',(1.827636333094,7.01,9.671824407676)); #52058=CARTESIAN_POINT('',(1.827636333094,7.01,9.671824407676)); #52059=CARTESIAN_POINT('Origin',(1.707915158316,7.01,9.68)); #52060=CARTESIAN_POINT('Origin',(6.55,7.01,1.54)); #52061=CARTESIAN_POINT('',(-5.65,7.01,14.96)); #52062=CARTESIAN_POINT('',(5.65,7.01,14.96)); #52063=CARTESIAN_POINT('',(-5.65,7.01,14.96)); #52064=CARTESIAN_POINT('',(5.65,7.01,15.26)); #52065=CARTESIAN_POINT('',(-5.65,7.01,15.26)); #52066=CARTESIAN_POINT('',(-3.632109755726,7.01,13.56)); #52067=CARTESIAN_POINT('',(-3.831720271423,7.01,13.37247565723)); #52068=CARTESIAN_POINT('Origin',(-3.632109755726,7.01,13.36)); #52069=CARTESIAN_POINT('',(-4.062032162854,7.01,9.687485394339)); #52070=CARTESIAN_POINT('',(-3.831720271423,7.01,13.37247565723)); #52071=CARTESIAN_POINT('',(-3.942265853436,7.01,9.56)); #52072=CARTESIAN_POINT('Origin',(-3.942265853436,7.01,9.68)); #52073=CARTESIAN_POINT('',(-3.932084841684,7.01,9.56)); #52074=CARTESIAN_POINT('',(-3.942265853436,7.01,9.56)); #52075=CARTESIAN_POINT('',(-3.812363666906,7.01,9.671824407676)); #52076=CARTESIAN_POINT('Origin',(-3.932084841684,7.01,9.68)); #52077=CARTESIAN_POINT('',(-3.80975670850789,7.01,9.71000000013908)); #52078=CARTESIAN_POINT('',(-3.812363666906,7.01,9.671824407676)); #52079=CARTESIAN_POINT('',(-1.83024329149211,7.01,9.71000000013908)); #52080=CARTESIAN_POINT('',(-3.809756708863,7.01,9.71)); #52081=CARTESIAN_POINT('',(-1.827636333094,7.01,9.671824407676)); #52082=CARTESIAN_POINT('',(-1.827636333094,7.01,9.671824407676)); #52083=CARTESIAN_POINT('',(-1.707915158316,7.01,9.56)); #52084=CARTESIAN_POINT('Origin',(-1.707915158316,7.01,9.68)); #52085=CARTESIAN_POINT('',(-1.697734146564,7.01,9.56)); #52086=CARTESIAN_POINT('',(-1.707915158316,7.01,9.56)); #52087=CARTESIAN_POINT('',(-1.577967837146,7.01,9.687485394339)); #52088=CARTESIAN_POINT('Origin',(-1.697734146564,7.01,9.68)); #52089=CARTESIAN_POINT('',(-1.808279728577,7.01,13.37247565723)); #52090=CARTESIAN_POINT('',(-1.577967837146,7.01,9.687485394339)); #52091=CARTESIAN_POINT('',(-2.007890244274,7.01,13.56)); #52092=CARTESIAN_POINT('Origin',(-2.007890244274,7.01,13.36)); #52093=CARTESIAN_POINT('',(-2.007890244274,7.01,13.56)); #52094=CARTESIAN_POINT('',(-1.,7.01,3.01)); #52095=CARTESIAN_POINT('',(-1.,7.01,2.31)); #52096=CARTESIAN_POINT('Origin',(-1.,7.01,2.66)); #52097=CARTESIAN_POINT('',(-4.8,7.01,3.01)); #52098=CARTESIAN_POINT('',(-4.8,7.01,3.01)); #52099=CARTESIAN_POINT('',(-4.8,7.01,2.31)); #52100=CARTESIAN_POINT('Origin',(-4.8,7.01,2.66)); #52101=CARTESIAN_POINT('',(-1.,7.01,2.31)); #52102=CARTESIAN_POINT('',(1.,7.01,2.31)); #52103=CARTESIAN_POINT('',(1.,7.01,3.01)); #52104=CARTESIAN_POINT('Origin',(1.,7.01,2.66)); #52105=CARTESIAN_POINT('',(4.8,7.01,2.31)); #52106=CARTESIAN_POINT('',(4.8,7.01,2.31)); #52107=CARTESIAN_POINT('',(4.8,7.01,3.01)); #52108=CARTESIAN_POINT('Origin',(4.8,7.01,2.66)); #52109=CARTESIAN_POINT('',(1.,7.01,3.01)); #52110=CARTESIAN_POINT('',(1.577967837146,7.01,9.687485394339)); #52111=CARTESIAN_POINT('Origin',(1.697734146564,7.01,9.68)); #52112=CARTESIAN_POINT('',(1.83024329149211,7.01,9.71000000013908)); #52113=CARTESIAN_POINT('',(1.827636333094,7.01,9.671824407676)); #52114=CARTESIAN_POINT('',(3.80975670850789,7.01,9.71000000013908)); #52115=CARTESIAN_POINT('',(3.809756708863,7.01,9.71)); #52116=CARTESIAN_POINT('',(3.812363666906,7.01,9.671824407676)); #52117=CARTESIAN_POINT('',(3.812363666906,7.01,9.671824407676)); #52118=CARTESIAN_POINT('Origin',(3.932084841684,7.01,9.68)); #52119=CARTESIAN_POINT('',(1.808279728577,7.01,13.37247565723)); #52120=CARTESIAN_POINT('Origin',(2.007890244274,7.01,13.36)); #52121=CARTESIAN_POINT('',(1.577967837146,7.01,9.687485394339)); #52122=CARTESIAN_POINT('Origin',(1.57,7.01,9.56)); #52123=CARTESIAN_POINT('',(1.808279728577,7.01,13.37247565723)); #52124=CARTESIAN_POINT('',(1.577967837146,7.01,9.687485394339)); #52125=CARTESIAN_POINT('Origin',(2.007890244274,7.048448981263,13.36)); #52126=CARTESIAN_POINT('Origin',(1.697734146564,7.048448981263,9.68)); #52127=CARTESIAN_POINT('Origin',(3.932084841684,6.672945678871,9.68)); #52128=CARTESIAN_POINT('',(3.812363666906,6.71,9.671824407676)); #52129=CARTESIAN_POINT('Origin',(3.814878354431,6.86,9.635)); #52130=CARTESIAN_POINT('',(3.809756708863,6.71,9.71)); #52131=CARTESIAN_POINT('Ctrl Pts',(3.808271069199,6.679659569157,9.697338429303)); #52132=CARTESIAN_POINT('Ctrl Pts',(3.814966951621,6.681131942154,9.717067590425)); #52133=CARTESIAN_POINT('Ctrl Pts',(3.797786801431,6.679189467577,9.736665360348)); #52134=CARTESIAN_POINT('Ctrl Pts',(3.804521422769,6.673872416717,9.755722158942)); #52135=CARTESIAN_POINT('Ctrl Pts',(3.809730942829,6.799241212816,9.688437939169)); #52136=CARTESIAN_POINT('Ctrl Pts',(3.812562027691,6.801743918579,9.722010200524)); #52137=CARTESIAN_POINT('Ctrl Pts',(3.800196392108,6.798424802406,9.755496693952)); #52138=CARTESIAN_POINT('Ctrl Pts',(3.803052133682,6.789379798747,9.787925154591)); #52139=CARTESIAN_POINT('Ctrl Pts',(3.811190816459,6.91882658659,9.679587497679)); #52140=CARTESIAN_POINT('Ctrl Pts',(3.81015710376,6.922343943318,9.726870795728)); #52141=CARTESIAN_POINT('Ctrl Pts',(3.802605982784,6.917632237884,9.774406244603)); #52142=CARTESIAN_POINT('Ctrl Pts',(3.801582844595,6.904900750607,9.820079496003)); #52143=CARTESIAN_POINT('Ctrl Pts',(3.812650690088,7.038415659055,9.670787107167)); #52144=CARTESIAN_POINT('Ctrl Pts',(3.80775217983,7.042932151045,9.731649362387)); #52145=CARTESIAN_POINT('Ctrl Pts',(3.80501557346,7.036811904606,9.793394052511)); #52146=CARTESIAN_POINT('Ctrl Pts',(3.800113555508,7.020435241553,9.852185174612)); #52147=CARTESIAN_POINT('',(3.8030194534559,7.00029802780933,9.8080196099053)); #52148=CARTESIAN_POINT('Origin',(3.80638808098697,6.50767276734403,9.70976965071914)); #52149=CARTESIAN_POINT('',(3.80301945213781,6.70611921111293,9.749207844017)); #52150=CARTESIAN_POINT('',(3.8030194531,6.706119211113,9.749207844017)); #52151=CARTESIAN_POINT('Ctrl Pts',(3.809756708863,6.71,9.71)); #52152=CARTESIAN_POINT('Ctrl Pts',(3.809716471556,6.71,9.71058922490984)); #52153=CARTESIAN_POINT('Ctrl Pts',(3.809668191334,6.70999739671413,9.71117842020117)); #52154=CARTESIAN_POINT('Ctrl Pts',(3.80961252810583,6.7099921872734,9.71176777532549)); #52155=CARTESIAN_POINT('Ctrl Pts',(3.80955686487767,6.70998697783267,9.71235713044981)); #52156=CARTESIAN_POINT('Ctrl Pts',(3.80949381864333,6.709979162236,9.71294664541806)); #52157=CARTESIAN_POINT('Ctrl Pts',(3.8094240493515,6.70996873031632,9.71353650896793)); #52158=CARTESIAN_POINT('Ctrl Pts',(3.80935428005967,6.70995829839663,9.71412637251781)); #52159=CARTESIAN_POINT('Ctrl Pts',(3.80927778771033,6.70994525016105,9.71471658466046)); #52160=CARTESIAN_POINT('Ctrl Pts',(3.80919523211133,6.70992956806538,9.7153073357901)); #52161=CARTESIAN_POINT('Ctrl Pts',(3.80911267651233,6.70991388596972,9.71589808691972)); #52162=CARTESIAN_POINT('Ctrl Pts',(3.80902405766367,6.70989557001376,9.71648937704749)); #52163=CARTESIAN_POINT('Ctrl Pts',(3.808930035899,6.7098745952845,9.71708139533268)); #52164=CARTESIAN_POINT('Ctrl Pts',(3.80883601413433,6.70985362055524,9.71767341361787)); #52165=CARTESIAN_POINT('Ctrl Pts',(3.80873658945367,6.70982998707521,9.71826616007274)); #52166=CARTESIAN_POINT('Ctrl Pts',(3.808632420226,6.70980366216543,9.71885982986756)); #52167=CARTESIAN_POINT('Ctrl Pts',(3.80852825099833,6.70977733725566,9.71945349966237)); #52168=CARTESIAN_POINT('Ctrl Pts',(3.80841933722367,6.70974832085643,9.72004809280574)); #52169=CARTESIAN_POINT('Ctrl Pts',(3.80830634460467,6.70971657391304,9.72064378243087)); #52170=CARTESIAN_POINT('Ctrl Pts',(3.80819335198567,6.70968482696965,9.72123947205601)); #52171=CARTESIAN_POINT('Ctrl Pts',(3.80807628052233,6.70965034973116,9.7218362581893)); #52172=CARTESIAN_POINT('Ctrl Pts',(3.80795576854833,6.70961309031567,9.72243439482354)); #52173=CARTESIAN_POINT('Ctrl Pts',(3.80783525657433,6.70957583090019,9.72303253145776)); #52174=CARTESIAN_POINT('Ctrl Pts',(3.80771130408967,6.70953578786343,9.72363201850547)); #52175=CARTESIAN_POINT('Ctrl Pts',(3.80758471161367,6.70949293803368,9.72423262711842)); #52176=CARTESIAN_POINT('Ctrl Pts',(3.80745811913767,6.70945008820392,9.72483323573138)); #52177=CARTESIAN_POINT('Ctrl Pts',(3.80732888667033,6.70940443088537,9.72543496584295)); #52178=CARTESIAN_POINT('Ctrl Pts',(3.80719789138116,6.70935597076383,9.72603736015722)); #52179=CARTESIAN_POINT('Ctrl Pts',(3.807066896092,6.70930751064228,9.72663975447147)); #52180=CARTESIAN_POINT('Ctrl Pts',(3.806934137981,6.70925624787538,9.72724281297896)); #52181=CARTESIAN_POINT('Ctrl Pts',(3.80680047576784,6.70920219759682,9.72784613326738)); #52182=CARTESIAN_POINT('Ctrl Pts',(3.80666681355467,6.70914814731826,9.72844945355581)); #52183=CARTESIAN_POINT('Ctrl Pts',(3.80653224723933,6.70909130948355,9.7290530355999)); #52184=CARTESIAN_POINT('Ctrl Pts',(3.80639764019717,6.70903171461108,9.72965646405067)); #52185=CARTESIAN_POINT('Ctrl Pts',(3.806263033155,6.70897211973861,9.73025989250144)); #52186=CARTESIAN_POINT('Ctrl Pts',(3.806128385386,6.70890976782966,9.7308631673372)); #52187=CARTESIAN_POINT('Ctrl Pts',(3.80599456009166,6.70884470379433,9.73146587461399)); #52188=CARTESIAN_POINT('Ctrl Pts',(3.80586073479733,6.70877963975901,9.73206858189077)); #52189=CARTESIAN_POINT('Ctrl Pts',(3.80572773197767,6.70871186364448,9.73267072159224)); #52190=CARTESIAN_POINT('Ctrl Pts',(3.80559641087484,6.70864143293629,9.73327189551834)); #52191=CARTESIAN_POINT('Ctrl Pts',(3.805465089772,6.70857100222811,9.73387306944444)); #52192=CARTESIAN_POINT('Ctrl Pts',(3.805335450386,6.70849791677106,9.7344732775546)); #52193=CARTESIAN_POINT('Ctrl Pts',(3.80520836796916,6.70842225510561,9.73507206969525)); #52194=CARTESIAN_POINT('Ctrl Pts',(3.80508128555233,6.70834659344017,9.73567086183587)); #52195=CARTESIAN_POINT('Ctrl Pts',(3.80495676010467,6.70826835626428,9.7362682380779)); #52196=CARTESIAN_POINT('Ctrl Pts',(3.80483560027584,6.7081876047071,9.73686397849283)); #52197=CARTESIAN_POINT('Ctrl Pts',(3.804714440447,6.70810685314991,9.73745971890778)); #52198=CARTESIAN_POINT('Ctrl Pts',(3.804596646237,6.70802358865449,9.73805382369372)); #52199=CARTESIAN_POINT('Ctrl Pts',(3.80448288535666,6.70793780580472,9.73864655360094)); #52200=CARTESIAN_POINT('Ctrl Pts',(3.80436912447633,6.70785202295496,9.73923928350815)); #52201=CARTESIAN_POINT('Ctrl Pts',(3.80425939692567,6.70776372150103,9.73983063851382)); #52202=CARTESIAN_POINT('Ctrl Pts',(3.80415439419834,6.70767289923407,9.74042079730047)); #52203=CARTESIAN_POINT('Ctrl Pts',(3.804049391471,6.70758207696712,9.74101095608713)); #52204=CARTESIAN_POINT('Ctrl Pts',(3.803949113567,6.70748873394569,9.74159991867529)); #52205=CARTESIAN_POINT('Ctrl Pts',(3.80385424560816,6.70739285729876,9.74218788417139)); #52206=CARTESIAN_POINT('Ctrl Pts',(3.80375937764933,6.70729698065184,9.74277584966748)); #52207=CARTESIAN_POINT('Ctrl Pts',(3.80366991963567,6.70719857035598,9.74336281807948)); #52208=CARTESIAN_POINT('Ctrl Pts',(3.80358655839567,6.70709760699867,9.74394898106565)); #52209=CARTESIAN_POINT('Ctrl Pts',(3.80350319715567,6.70699664364137,9.74453514405184)); #52210=CARTESIAN_POINT('Ctrl Pts',(3.80342593268933,6.70689312722182,9.74512050162364)); #52211=CARTESIAN_POINT('Ctrl Pts',(3.803355451368,6.70678703073884,9.74570524517477)); #52212=CARTESIAN_POINT('Ctrl Pts',(3.80328497004667,6.70668093425586,9.74628998872589)); #52213=CARTESIAN_POINT('Ctrl Pts',(3.80322127187033,6.70657225770152,9.74687411826641)); #52214=CARTESIAN_POINT('Ctrl Pts',(3.80316504333342,6.70646096702002,9.74745782211445)); #52215=CARTESIAN_POINT('Ctrl Pts',(3.8031088147965,6.70634967633852,9.74804152596249)); #52216=CARTESIAN_POINT('Ctrl Pts',(3.803060055899,6.70623577152956,9.74862480412947)); #52217=CARTESIAN_POINT('Ctrl Pts',(3.8030194531,6.70611921111287,9.74920784401707)); #52218=CARTESIAN_POINT('Origin',(2.82,6.51,9.71)); #52219=CARTESIAN_POINT('',(1.83698054786219,6.70611921111293,9.74920784401697)); #52220=CARTESIAN_POINT('',(1.8369805469,6.706119211113,9.749207844017)); #52221=CARTESIAN_POINT('Ctrl Pts',(1.830243291137,6.71,9.71)); #52222=CARTESIAN_POINT('Ctrl Pts',(1.830283528444,6.71,9.71058922490984)); #52223=CARTESIAN_POINT('Ctrl Pts',(1.830331808666,6.70999739671413,9.71117842020117)); #52224=CARTESIAN_POINT('Ctrl Pts',(1.83038747189417,6.7099921872734,9.71176777532549)); #52225=CARTESIAN_POINT('Ctrl Pts',(1.83044313512233,6.70998697783267,9.71235713044981)); #52226=CARTESIAN_POINT('Ctrl Pts',(1.83050618135667,6.709979162236,9.71294664541806)); #52227=CARTESIAN_POINT('Ctrl Pts',(1.8305759506485,6.70996873031632,9.71353650896793)); #52228=CARTESIAN_POINT('Ctrl Pts',(1.83064571994033,6.70995829839663,9.71412637251781)); #52229=CARTESIAN_POINT('Ctrl Pts',(1.83072221228967,6.70994525016105,9.71471658466046)); #52230=CARTESIAN_POINT('Ctrl Pts',(1.83080476788867,6.70992956806538,9.7153073357901)); #52231=CARTESIAN_POINT('Ctrl Pts',(1.83088732348767,6.70991388596972,9.71589808691972)); #52232=CARTESIAN_POINT('Ctrl Pts',(1.83097594233633,6.70989557001376,9.71648937704749)); #52233=CARTESIAN_POINT('Ctrl Pts',(1.831069964101,6.7098745952845,9.71708139533268)); #52234=CARTESIAN_POINT('Ctrl Pts',(1.83116398586567,6.70985362055524,9.71767341361787)); #52235=CARTESIAN_POINT('Ctrl Pts',(1.83126341054633,6.70982998707521,9.71826616007274)); #52236=CARTESIAN_POINT('Ctrl Pts',(1.831367579774,6.70980366216543,9.71885982986756)); #52237=CARTESIAN_POINT('Ctrl Pts',(1.83147174900167,6.70977733725566,9.71945349966237)); #52238=CARTESIAN_POINT('Ctrl Pts',(1.83158066277633,6.70974832085643,9.72004809280574)); #52239=CARTESIAN_POINT('Ctrl Pts',(1.83169365539533,6.70971657391304,9.72064378243087)); #52240=CARTESIAN_POINT('Ctrl Pts',(1.83180664801433,6.70968482696965,9.72123947205601)); #52241=CARTESIAN_POINT('Ctrl Pts',(1.83192371947767,6.70965034973116,9.7218362581893)); #52242=CARTESIAN_POINT('Ctrl Pts',(1.83204423145167,6.70961309031567,9.72243439482354)); #52243=CARTESIAN_POINT('Ctrl Pts',(1.83216474342567,6.70957583090019,9.72303253145776)); #52244=CARTESIAN_POINT('Ctrl Pts',(1.83228869591033,6.70953578786343,9.72363201850547)); #52245=CARTESIAN_POINT('Ctrl Pts',(1.83241528838633,6.70949293803368,9.72423262711842)); #52246=CARTESIAN_POINT('Ctrl Pts',(1.83254188086233,6.70945008820392,9.72483323573138)); #52247=CARTESIAN_POINT('Ctrl Pts',(1.83267111332967,6.70940443088537,9.72543496584295)); #52248=CARTESIAN_POINT('Ctrl Pts',(1.83280210861884,6.70935597076383,9.72603736015722)); #52249=CARTESIAN_POINT('Ctrl Pts',(1.832933103908,6.70930751064228,9.72663975447147)); #52250=CARTESIAN_POINT('Ctrl Pts',(1.833065862019,6.70925624787538,9.72724281297896)); #52251=CARTESIAN_POINT('Ctrl Pts',(1.83319952423216,6.70920219759682,9.72784613326738)); #52252=CARTESIAN_POINT('Ctrl Pts',(1.83333318644533,6.70914814731826,9.72844945355581)); #52253=CARTESIAN_POINT('Ctrl Pts',(1.83346775276067,6.70909130948355,9.7290530355999)); #52254=CARTESIAN_POINT('Ctrl Pts',(1.83360235980283,6.70903171461108,9.72965646405067)); #52255=CARTESIAN_POINT('Ctrl Pts',(1.833736966845,6.70897211973861,9.73025989250144)); #52256=CARTESIAN_POINT('Ctrl Pts',(1.833871614614,6.70890976782966,9.7308631673372)); #52257=CARTESIAN_POINT('Ctrl Pts',(1.83400543990834,6.70884470379433,9.73146587461399)); #52258=CARTESIAN_POINT('Ctrl Pts',(1.83413926520267,6.70877963975901,9.73206858189077)); #52259=CARTESIAN_POINT('Ctrl Pts',(1.83427226802233,6.70871186364448,9.73267072159224)); #52260=CARTESIAN_POINT('Ctrl Pts',(1.83440358912516,6.70864143293629,9.73327189551834)); #52261=CARTESIAN_POINT('Ctrl Pts',(1.834534910228,6.70857100222811,9.73387306944444)); #52262=CARTESIAN_POINT('Ctrl Pts',(1.834664549614,6.70849791677106,9.7344732775546)); #52263=CARTESIAN_POINT('Ctrl Pts',(1.83479163203084,6.70842225510561,9.73507206969525)); #52264=CARTESIAN_POINT('Ctrl Pts',(1.83491871444767,6.70834659344017,9.73567086183587)); #52265=CARTESIAN_POINT('Ctrl Pts',(1.83504323989533,6.70826835626428,9.7362682380779)); #52266=CARTESIAN_POINT('Ctrl Pts',(1.83516439972416,6.7081876047071,9.73686397849283)); #52267=CARTESIAN_POINT('Ctrl Pts',(1.835285559553,6.70810685314991,9.73745971890778)); #52268=CARTESIAN_POINT('Ctrl Pts',(1.835403353763,6.70802358865449,9.73805382369372)); #52269=CARTESIAN_POINT('Ctrl Pts',(1.83551711464333,6.70793780580472,9.73864655360094)); #52270=CARTESIAN_POINT('Ctrl Pts',(1.83563087552367,6.70785202295496,9.73923928350815)); #52271=CARTESIAN_POINT('Ctrl Pts',(1.83574060307433,6.70776372150103,9.73983063851382)); #52272=CARTESIAN_POINT('Ctrl Pts',(1.83584560580166,6.70767289923407,9.74042079730047)); #52273=CARTESIAN_POINT('Ctrl Pts',(1.835950608529,6.70758207696712,9.74101095608713)); #52274=CARTESIAN_POINT('Ctrl Pts',(1.836050886433,6.70748873394569,9.74159991867529)); #52275=CARTESIAN_POINT('Ctrl Pts',(1.83614575439183,6.70739285729876,9.74218788417139)); #52276=CARTESIAN_POINT('Ctrl Pts',(1.83624062235067,6.70729698065184,9.74277584966748)); #52277=CARTESIAN_POINT('Ctrl Pts',(1.83633008036433,6.70719857035598,9.74336281807948)); #52278=CARTESIAN_POINT('Ctrl Pts',(1.83641344160433,6.70709760699867,9.74394898106565)); #52279=CARTESIAN_POINT('Ctrl Pts',(1.83649680284433,6.70699664364137,9.74453514405184)); #52280=CARTESIAN_POINT('Ctrl Pts',(1.83657406731067,6.70689312722182,9.74512050162364)); #52281=CARTESIAN_POINT('Ctrl Pts',(1.836644548632,6.70678703073884,9.74570524517477)); #52282=CARTESIAN_POINT('Ctrl Pts',(1.83671502995333,6.70668093425586,9.74628998872589)); #52283=CARTESIAN_POINT('Ctrl Pts',(1.83677872812967,6.70657225770152,9.74687411826641)); #52284=CARTESIAN_POINT('Ctrl Pts',(1.83683495666658,6.70646096702002,9.74745782211445)); #52285=CARTESIAN_POINT('Ctrl Pts',(1.8368911852035,6.70634967633852,9.74804152596249)); #52286=CARTESIAN_POINT('Ctrl Pts',(1.836939944101,6.70623577152956,9.74862480412947)); #52287=CARTESIAN_POINT('Ctrl Pts',(1.8369805469,6.70611921111287,9.74920784401707)); #52288=CARTESIAN_POINT('Ctrl Pts',(1.827349309912,7.038415659055,9.670787107167)); #52289=CARTESIAN_POINT('Ctrl Pts',(1.83224782017,7.042932151045,9.731649362387)); #52290=CARTESIAN_POINT('Ctrl Pts',(1.83498442654,7.036811904606,9.793394052511)); #52291=CARTESIAN_POINT('Ctrl Pts',(1.839886444492,7.020435241553,9.852185174612)); #52292=CARTESIAN_POINT('Ctrl Pts',(1.828809183541,6.91882658659,9.679587497679)); #52293=CARTESIAN_POINT('Ctrl Pts',(1.82984289624,6.922343943318,9.726870795728)); #52294=CARTESIAN_POINT('Ctrl Pts',(1.837394017216,6.917632237884,9.774406244603)); #52295=CARTESIAN_POINT('Ctrl Pts',(1.838417155405,6.904900750607,9.820079496003)); #52296=CARTESIAN_POINT('Ctrl Pts',(1.830269057171,6.799241212816,9.688437939169)); #52297=CARTESIAN_POINT('Ctrl Pts',(1.827437972309,6.801743918579,9.722010200524)); #52298=CARTESIAN_POINT('Ctrl Pts',(1.839803607892,6.798424802406,9.755496693952)); #52299=CARTESIAN_POINT('Ctrl Pts',(1.836947866318,6.789379798747,9.787925154591)); #52300=CARTESIAN_POINT('Ctrl Pts',(1.831728930801,6.679659569157,9.697338429303)); #52301=CARTESIAN_POINT('Ctrl Pts',(1.825033048379,6.681131942154,9.717067590425)); #52302=CARTESIAN_POINT('Ctrl Pts',(1.842213198569,6.679189467577,9.736665360348)); #52303=CARTESIAN_POINT('Ctrl Pts',(1.835478577231,6.673872416717,9.755722158942)); #52304=CARTESIAN_POINT('',(1.8369805465441,7.00029802780934,9.80801960990527)); #52305=CARTESIAN_POINT('',(1.8369805469,7.000298027782,9.808019610042)); #52306=CARTESIAN_POINT('Origin',(1.83361191901312,6.50767276734403,9.70976965071913)); #52307=CARTESIAN_POINT('',(1.830243291137,7.01,9.71)); #52308=CARTESIAN_POINT('Origin',(1.825121645569,6.86,9.635)); #52309=CARTESIAN_POINT('Origin',(2.82,6.51,9.71)); #52310=CARTESIAN_POINT('',(3.8030194531,7.000298027782,9.808019610042)); #52311=CARTESIAN_POINT('Origin',(2.82,6.76,11.01)); #52312=CARTESIAN_POINT('',(2.0043922538177,6.51970197392715,12.2119803814083)); #52313=CARTESIAN_POINT('',(1.8369805469,7.000298027782,9.808019610042)); #52314=CARTESIAN_POINT('',(3.6356077461823,6.51970197392715,12.2119803814083)); #52315=CARTESIAN_POINT('',(3.635607873775,6.519701972218,12.21198038996)); #52316=CARTESIAN_POINT('',(3.8030194531,7.000298027782,9.808019610042)); #52317=CARTESIAN_POINT('Origin',(3.719313663437,6.612910591665,10.98059411699)); #52318=CARTESIAN_POINT('',(3.63560763501395,6.22552315874798,12.1531686079258)); #52319=CARTESIAN_POINT('',(3.635607873775,6.225523155548,12.15316862393)); #52320=CARTESIAN_POINT('',(3.8030194531,6.706119211113,9.749207844017)); #52321=CARTESIAN_POINT('Origin',(2.82,6.465821183331,10.95118823397)); #52322=CARTESIAN_POINT('',(2.00439236498605,6.22552315874797,12.1531686079258)); #52323=CARTESIAN_POINT('',(2.004392126225,6.225523155548,12.15316862393)); #52324=CARTESIAN_POINT('',(1.8369805469,6.706119211113,9.749207844017)); #52325=CARTESIAN_POINT('Origin',(1.920686336563,6.612910591665,10.98059411699)); #52326=CARTESIAN_POINT('',(2.004392126225,6.519701972218,12.21198038996)); #52327=CARTESIAN_POINT('Ctrl Pts',(2.00343901686,6.551952545096,12.20409419813)); #52328=CARTESIAN_POINT('Ctrl Pts',(2.012354156032,6.522103521924,12.33319259363)); #52329=CARTESIAN_POINT('Ctrl Pts',(2.02324635195,6.550045226398,12.47438513984)); #52330=CARTESIAN_POINT('Ctrl Pts',(2.032161570713,6.626815254441,12.58238384788)); #52331=CARTESIAN_POINT('Ctrl Pts',(2.003168234643,6.435117181778,12.17710371739)); #52332=CARTESIAN_POINT('Ctrl Pts',(2.014909682739,6.397714148645,12.33890182043)); #52333=CARTESIAN_POINT('Ctrl Pts',(2.02069097411,6.432857187312,12.51648355588)); #52334=CARTESIAN_POINT('Ctrl Pts',(2.032432182266,6.529066494261,12.65184007909)); #52335=CARTESIAN_POINT('Ctrl Pts',(2.002897452425,6.31827792559,12.15013008073)); #52336=CARTESIAN_POINT('Ctrl Pts',(2.017465209447,6.273366245459,12.34445317345)); #52337=CARTESIAN_POINT('Ctrl Pts',(2.018135596271,6.315767615338,12.55871214487)); #52338=CARTESIAN_POINT('Ctrl Pts',(2.03270279382,6.431307725394,12.72128222746)); #52339=CARTESIAN_POINT('Ctrl Pts',(2.002626670208,6.201434780174,12.12317328898)); #52340=CARTESIAN_POINT('Ctrl Pts',(2.020020736155,6.149059740204,12.34984663496)); #52341=CARTESIAN_POINT('Ctrl Pts',(2.015580218431,6.198776450554,12.60107095066)); #52342=CARTESIAN_POINT('Ctrl Pts',(2.032973405373,6.333538950883,12.79071029081)); #52343=CARTESIAN_POINT('',(2.03120876119786,6.3443945831307,12.7538123804446)); #52344=CARTESIAN_POINT('Ctrl Pts',(2.00439260562057,6.22552316197161,12.1531685918032)); #52345=CARTESIAN_POINT('Ctrl Pts',(2.01156105239056,6.2049557528308,12.2560475767893)); #52346=CARTESIAN_POINT('Ctrl Pts',(2.0146592132844,6.20480426380411,12.3620809071173)); #52347=CARTESIAN_POINT('Ctrl Pts',(2.02093793778557,6.24561215507949,12.5684144816716)); #52348=CARTESIAN_POINT('Ctrl Pts',(2.02403546479881,6.28615407383874,12.6664664693106)); #52349=CARTESIAN_POINT('Ctrl Pts',(2.03120852081225,6.34439459224341,12.7538123941095)); #52350=CARTESIAN_POINT('',(2.03120887225408,6.59399661363643,12.5873827365478)); #52351=CARTESIAN_POINT('',(2.031208999712,6.593996608803,12.5873827293)); #52352=CARTESIAN_POINT('Ctrl Pts',(2.00439238241139,6.51970197564932,12.2119803727929)); #52353=CARTESIAN_POINT('Ctrl Pts',(2.00887857761635,6.50682956427272,12.2763686799759)); #52354=CARTESIAN_POINT('Ctrl Pts',(2.01332416597023,6.5067652926426,12.3426568619548)); #52355=CARTESIAN_POINT('Ctrl Pts',(2.02227695935313,6.53226112091596,12.4714843791869)); #52356=CARTESIAN_POINT('Ctrl Pts',(2.02672254962127,6.55756937539278,12.5327511683475)); #52357=CARTESIAN_POINT('Ctrl Pts',(2.03120874379609,6.59399661850593,12.5873827438495)); #52358=CARTESIAN_POINT('Origin',(2.82,7.01,12.31)); #52359=CARTESIAN_POINT('',(3.60879112774592,6.59399661363643,12.5873827365478)); #52360=CARTESIAN_POINT('',(3.608791000288,6.593996608803,12.5873827293)); #52361=CARTESIAN_POINT('Ctrl Pts',(3.63560761758861,6.51970197564931,12.2119803727929)); #52362=CARTESIAN_POINT('Ctrl Pts',(3.63112142238366,6.50682956427272,12.2763686799759)); #52363=CARTESIAN_POINT('Ctrl Pts',(3.62667583402977,6.5067652926426,12.3426568619548)); #52364=CARTESIAN_POINT('Ctrl Pts',(3.61772304064687,6.53226112091596,12.4714843791869)); #52365=CARTESIAN_POINT('Ctrl Pts',(3.61327745037873,6.55756937539277,12.5327511683475)); #52366=CARTESIAN_POINT('Ctrl Pts',(3.60879125620391,6.59399661850592,12.5873827438495)); #52367=CARTESIAN_POINT('Ctrl Pts',(3.637373329792,6.201434780174,12.12317328898)); #52368=CARTESIAN_POINT('Ctrl Pts',(3.619979263845,6.149059740204,12.34984663496)); #52369=CARTESIAN_POINT('Ctrl Pts',(3.624419781569,6.198776450554,12.60107095066)); #52370=CARTESIAN_POINT('Ctrl Pts',(3.607026594627,6.333538950883,12.79071029081)); #52371=CARTESIAN_POINT('Ctrl Pts',(3.637102547575,6.31827792559,12.15013008073)); #52372=CARTESIAN_POINT('Ctrl Pts',(3.622534790553,6.273366245459,12.34445317345)); #52373=CARTESIAN_POINT('Ctrl Pts',(3.621864403729,6.315767615338,12.55871214487)); #52374=CARTESIAN_POINT('Ctrl Pts',(3.60729720618,6.431307725394,12.72128222746)); #52375=CARTESIAN_POINT('Ctrl Pts',(3.636831765357,6.435117181778,12.17710371739)); #52376=CARTESIAN_POINT('Ctrl Pts',(3.625090317261,6.397714148645,12.33890182043)); #52377=CARTESIAN_POINT('Ctrl Pts',(3.61930902589,6.432857187312,12.51648355588)); #52378=CARTESIAN_POINT('Ctrl Pts',(3.607567817734,6.529066494261,12.65184007909)); #52379=CARTESIAN_POINT('Ctrl Pts',(3.63656098314,6.551952545096,12.20409419813)); #52380=CARTESIAN_POINT('Ctrl Pts',(3.627645843968,6.522103521924,12.33319259363)); #52381=CARTESIAN_POINT('Ctrl Pts',(3.61675364805,6.550045226398,12.47438513984)); #52382=CARTESIAN_POINT('Ctrl Pts',(3.607838429287,6.626815254441,12.58238384788)); #52383=CARTESIAN_POINT('',(3.60879123880214,6.34439458313069,12.7538123804446)); #52384=CARTESIAN_POINT('',(3.608791000288,6.344394574085,12.75381236688)); #52385=CARTESIAN_POINT('Ctrl Pts',(3.63560739437943,6.22552316197161,12.1531685918032)); #52386=CARTESIAN_POINT('Ctrl Pts',(3.62843894760943,6.20495575283076,12.2560475767895)); #52387=CARTESIAN_POINT('Ctrl Pts',(3.62534078671559,6.20480426380428,12.3620809071177)); #52388=CARTESIAN_POINT('Ctrl Pts',(3.61906206221444,6.2456121550795,12.5684144816712)); #52389=CARTESIAN_POINT('Ctrl Pts',(3.6159645352012,6.28615407383863,12.6664664693104)); #52390=CARTESIAN_POINT('Ctrl Pts',(3.60879147918775,6.34439459224341,12.7538123941095)); #52391=CARTESIAN_POINT('Origin',(2.82,7.01,12.31)); #52392=CARTESIAN_POINT('',(2.031208999712,6.344394574085,12.75381236688)); #52393=CARTESIAN_POINT('Origin',(2.82,6.501960439213,12.99012100223)); #52394=CARTESIAN_POINT('',(2.256808069473,6.659526304341,13.22642963758)); #52395=CARTESIAN_POINT('',(2.057272778177,6.556132439663,13.07136519487)); #52396=CARTESIAN_POINT('Origin',(2.256808069473,6.548573212622,13.0600282811)); #52397=CARTESIAN_POINT('',(2.031208999712,6.344394574085,12.75381236688)); #52398=CARTESIAN_POINT('',(3.582727221823,6.556132439663,13.07136519487)); #52399=CARTESIAN_POINT('',(3.608791000288,6.344394574085,12.75381236688)); #52400=CARTESIAN_POINT('',(3.383191930527,6.659526304341,13.22642963758)); #52401=CARTESIAN_POINT('Origin',(3.383191930527,6.548573212622,13.0600282811)); #52402=CARTESIAN_POINT('',(2.256808069473,6.659526304341,13.22642963758)); #52403=CARTESIAN_POINT('Origin',(2.256808069473,6.831126717488,12.8716272632)); #52404=CARTESIAN_POINT('',(2.256808069473,6.909128339059,13.06)); #52405=CARTESIAN_POINT('',(2.256808069473,6.909128339059,13.06)); #52406=CARTESIAN_POINT('',(2.057272778177,6.805734474382,12.90493555729)); #52407=CARTESIAN_POINT('Origin',(2.256808069473,6.798175247341,12.89359864352)); #52408=CARTESIAN_POINT('',(2.057272778177,6.805734474382,12.90493555729)); #52409=CARTESIAN_POINT('Origin',(2.050604499856,6.626761456572,12.90690618344)); #52410=CARTESIAN_POINT('',(2.031208999712,6.593996608803,12.5873827293)); #52411=CARTESIAN_POINT('Origin',(2.82,6.751562473931,12.82369136465)); #52412=CARTESIAN_POINT('',(3.383191930527,6.909128339059,13.06)); #52413=CARTESIAN_POINT('',(3.383191930527,6.909128339059,13.06)); #52414=CARTESIAN_POINT('',(3.582727221823,6.805734474382,12.90493555729)); #52415=CARTESIAN_POINT('Origin',(3.383191930527,6.798175247341,12.89359864352)); #52416=CARTESIAN_POINT('',(3.608791000288,6.593996608803,12.5873827293)); #52417=CARTESIAN_POINT('Origin',(3.589395500144,6.626761456572,12.90690618344)); #52418=CARTESIAN_POINT('',(3.582727221823,6.556132439663,13.07136519487)); #52419=CARTESIAN_POINT('Origin',(3.383191930527,6.518347254933,13.0801823443)); #52420=CARTESIAN_POINT('',(3.383191930527,6.659526304341,13.22642963758)); #52421=CARTESIAN_POINT('Origin',(2.82,6.909128339059,13.06)); #52422=CARTESIAN_POINT('Origin',(-1.82,7.01,13.56)); #52423=CARTESIAN_POINT('',(-2.007890244274,6.71,13.56)); #52424=CARTESIAN_POINT('',(-3.632109755726,6.71,13.56)); #52425=CARTESIAN_POINT('Origin',(-2.007890244274,6.677147350519,13.36)); #52426=CARTESIAN_POINT('',(-1.808279728577,6.71,13.37247565723)); #52427=CARTESIAN_POINT('Origin',(-1.57,7.01,9.56)); #52428=CARTESIAN_POINT('',(-1.577967837146,6.71,9.687485394339)); #52429=CARTESIAN_POINT('Origin',(-1.697734146564,6.677147350519,9.68)); #52430=CARTESIAN_POINT('',(-1.697734146564,6.71,9.56)); #52431=CARTESIAN_POINT('Origin',(-4.07,7.01,9.56)); #52432=CARTESIAN_POINT('',(-3.942265853436,6.71,9.56)); #52433=CARTESIAN_POINT('',(-3.932084841684,7.01,9.56)); #52434=CARTESIAN_POINT('Origin',(-4.07,7.01,9.56)); #52435=CARTESIAN_POINT('',(-1.707915158316,6.71,9.56)); #52436=CARTESIAN_POINT('Origin',(-3.942265853436,6.677147350519,9.68)); #52437=CARTESIAN_POINT('',(-4.062032162854,6.71,9.687485394339)); #52438=CARTESIAN_POINT('Origin',(-3.82,7.01,13.56)); #52439=CARTESIAN_POINT('',(-3.831720271423,6.71,13.37247565723)); #52440=CARTESIAN_POINT('Origin',(-3.632109755726,6.677147350519,13.36)); #52441=CARTESIAN_POINT('Origin',(-3.932084841684,7.048448981263,9.68)); #52442=CARTESIAN_POINT('',(-3.812363666906,7.01,9.671824407676)); #52443=CARTESIAN_POINT('Origin',(-3.814878354431,6.86,9.635)); #52444=CARTESIAN_POINT('',(-3.809756708863,6.71,9.71)); #52445=CARTESIAN_POINT('Ctrl Pts',(-3.808271069199,6.679659569157,9.697338429303)); #52446=CARTESIAN_POINT('Ctrl Pts',(-3.814966951621,6.681131942154,9.717067590425)); #52447=CARTESIAN_POINT('Ctrl Pts',(-3.797786801431,6.679189467577,9.736665360348)); #52448=CARTESIAN_POINT('Ctrl Pts',(-3.804521422769,6.673872416717,9.755722158942)); #52449=CARTESIAN_POINT('Ctrl Pts',(-3.809730942829,6.799241212816,9.688437939169)); #52450=CARTESIAN_POINT('Ctrl Pts',(-3.812562027691,6.801743918579,9.722010200524)); #52451=CARTESIAN_POINT('Ctrl Pts',(-3.800196392108,6.798424802406,9.755496693952)); #52452=CARTESIAN_POINT('Ctrl Pts',(-3.803052133682,6.789379798747,9.787925154591)); #52453=CARTESIAN_POINT('Ctrl Pts',(-3.811190816459,6.91882658659,9.679587497679)); #52454=CARTESIAN_POINT('Ctrl Pts',(-3.81015710376,6.922343943318,9.726870795728)); #52455=CARTESIAN_POINT('Ctrl Pts',(-3.802605982784,6.917632237884,9.774406244603)); #52456=CARTESIAN_POINT('Ctrl Pts',(-3.801582844595,6.904900750607,9.820079496003)); #52457=CARTESIAN_POINT('Ctrl Pts',(-3.812650690088,7.038415659055,9.670787107167)); #52458=CARTESIAN_POINT('Ctrl Pts',(-3.80775217983,7.042932151045,9.731649362387)); #52459=CARTESIAN_POINT('Ctrl Pts',(-3.80501557346,7.036811904606,9.793394052511)); #52460=CARTESIAN_POINT('Ctrl Pts',(-3.800113555508,7.020435241553,9.852185174612)); #52461=CARTESIAN_POINT('',(-3.80301945213781,6.70611921111293,9.749207844017)); #52462=CARTESIAN_POINT('Ctrl Pts',(-3.809756708863,6.71,9.71)); #52463=CARTESIAN_POINT('Ctrl Pts',(-3.809716471512,6.71,9.71058922555904)); #52464=CARTESIAN_POINT('Ctrl Pts',(-3.809668191231,6.70999739670838,9.71117842146594)); #52465=CARTESIAN_POINT('Ctrl Pts',(-3.80961252793433,6.70999218725714,9.71176777716513)); #52466=CARTESIAN_POINT('Ctrl Pts',(-3.80955686463767,6.7099869778059,9.71235713286432)); #52467=CARTESIAN_POINT('Ctrl Pts',(-3.80949381832533,6.70997916219399,9.71294664836672)); #52468=CARTESIAN_POINT('Ctrl Pts',(-3.80942404895167,6.70996873025557,9.71353651240299)); #52469=CARTESIAN_POINT('Ctrl Pts',(-3.809354279578,6.70995829831714,9.71412637643925)); #52470=CARTESIAN_POINT('Ctrl Pts',(-3.809277787143,6.70994525005934,9.71471658902054)); #52471=CARTESIAN_POINT('Ctrl Pts',(-3.8091952314595,6.70992956793945,9.71530734053392)); #52472=CARTESIAN_POINT('Ctrl Pts',(-3.809112675776,6.70991388581957,9.7158980920473)); #52473=CARTESIAN_POINT('Ctrl Pts',(-3.809024056844,6.70989556983741,9.71648938250392)); #52474=CARTESIAN_POINT('Ctrl Pts',(-3.80893003500284,6.70987459508173,9.71708140105602)); #52475=CARTESIAN_POINT('Ctrl Pts',(-3.80883601316167,6.70985362032604,9.71767341960812)); #52476=CARTESIAN_POINT('Ctrl Pts',(-3.80873658841133,6.70982998681934,9.71826616626795)); #52477=CARTESIAN_POINT('Ctrl Pts',(-3.808632419126,6.7098036618847,9.71885983619841)); #52478=CARTESIAN_POINT('Ctrl Pts',(-3.80852824984067,6.70977733695007,9.71945350612886)); #52479=CARTESIAN_POINT('Ctrl Pts',(-3.80841933602033,6.70974832052779,9.72004809933856)); #52480=CARTESIAN_POINT('Ctrl Pts',(-3.80830634337267,6.70971657356538,9.72064378895441)); #52481=CARTESIAN_POINT('Ctrl Pts',(-3.808193350725,6.70968482660297,9.72123947857027)); #52482=CARTESIAN_POINT('Ctrl Pts',(-3.80807627925,6.70965034934948,9.72183626461866)); #52483=CARTESIAN_POINT('Ctrl Pts',(-3.807955767288,6.70961308992581,9.7224344010821)); #52484=CARTESIAN_POINT('Ctrl Pts',(-3.807835255326,6.70957583050214,9.72303253754553)); #52485=CARTESIAN_POINT('Ctrl Pts',(-3.807711302877,6.70953578746407,9.72363202433654)); #52486=CARTESIAN_POINT('Ctrl Pts',(-3.80758471045734,6.70949293764114,9.72423263262039)); #52487=CARTESIAN_POINT('Ctrl Pts',(-3.80745811803767,6.70945008781822,9.72483324090426)); #52488=CARTESIAN_POINT('Ctrl Pts',(-3.80732888564733,6.70940443051468,9.72543497061434)); #52489=CARTESIAN_POINT('Ctrl Pts',(-3.80719789044916,6.70935597041612,9.72603736447948)); #52490=CARTESIAN_POINT('Ctrl Pts',(-3.807066895251,6.70930751031756,9.72663975834461)); #52491=CARTESIAN_POINT('Ctrl Pts',(-3.806934137245,6.70925624758161,9.72724281635535)); #52492=CARTESIAN_POINT('Ctrl Pts',(-3.806800475144,6.70920219734113,9.72784613612145)); #52493=CARTESIAN_POINT('Ctrl Pts',(-3.806666813043,6.70914814710065,9.72844945588757)); #52494=CARTESIAN_POINT('Ctrl Pts',(-3.806532246847,6.70909130931114,9.72905303738378)); #52495=CARTESIAN_POINT('Ctrl Pts',(-3.80639763992567,6.70903171448929,9.7296564652838)); #52496=CARTESIAN_POINT('Ctrl Pts',(-3.80626303300433,6.70897211966744,9.73025989318382)); #52497=CARTESIAN_POINT('Ctrl Pts',(-3.80612838535767,6.70890976781452,9.73086316746596)); #52498=CARTESIAN_POINT('Ctrl Pts',(-3.80599456018016,6.70884470383807,9.7314658742089)); #52499=CARTESIAN_POINT('Ctrl Pts',(-3.80586073500267,6.70877963986161,9.73206858095182)); #52500=CARTESIAN_POINT('Ctrl Pts',(-3.80572773229433,6.7087118638088,9.73267072013923)); #52501=CARTESIAN_POINT('Ctrl Pts',(-3.80559641129167,6.70864143316188,9.73327189359277)); #52502=CARTESIAN_POINT('Ctrl Pts',(-3.805465090289,6.70857100251497,9.73387306704633)); #52503=CARTESIAN_POINT('Ctrl Pts',(-3.805335450992,6.70849791711875,9.73447327472547)); #52504=CARTESIAN_POINT('Ctrl Pts',(-3.80520836864566,6.70842225550922,9.73507206650108)); #52505=CARTESIAN_POINT('Ctrl Pts',(-3.80508128629933,6.70834659389969,9.73567085827667)); #52506=CARTESIAN_POINT('Ctrl Pts',(-3.80495676090367,6.70826835677477,9.73626823421963)); #52507=CARTESIAN_POINT('Ctrl Pts',(-3.80483560110517,6.70818760525992,9.73686397441439)); #52508=CARTESIAN_POINT('Ctrl Pts',(-3.80471444130667,6.70810685374507,9.73745971460917)); #52509=CARTESIAN_POINT('Ctrl Pts',(-3.80459664710533,6.70802358928326,9.7380538192538)); #52510=CARTESIAN_POINT('Ctrl Pts',(-3.80448288621783,6.70793780645787,9.73864654908796)); #52511=CARTESIAN_POINT('Ctrl Pts',(-3.80436912533033,6.70785202363247,9.73923927892211)); #52512=CARTESIAN_POINT('Ctrl Pts',(-3.80425939775667,6.70776372219368,9.73983063392295)); #52513=CARTESIAN_POINT('Ctrl Pts',(-3.80415439499517,6.70767289993186,9.74042079276631)); #52514=CARTESIAN_POINT('Ctrl Pts',(-3.80404939223367,6.70758207767003,9.74101095160968)); #52515=CARTESIAN_POINT('Ctrl Pts',(-3.80394911428433,6.70748873464372,9.74159991431607)); #52516=CARTESIAN_POINT('Ctrl Pts',(-3.80385424627316,6.70739285798151,9.74218787998439)); #52517=CARTESIAN_POINT('Ctrl Pts',(-3.803759378262,6.70729698131931,9.7427758456527)); #52518=CARTESIAN_POINT('Ctrl Pts',(-3.803669920189,6.70719857099777,9.74336281429091)); #52519=CARTESIAN_POINT('Ctrl Pts',(-3.80358655888733,6.70709760760426,9.74394897754983)); #52520=CARTESIAN_POINT('Ctrl Pts',(-3.80350319758567,6.70699664421074,9.74453514080876)); #52521=CARTESIAN_POINT('Ctrl Pts',(-3.80342593305533,6.70689312774445,9.74512049869984)); #52522=CARTESIAN_POINT('Ctrl Pts',(-3.8033554516725,6.70678703120428,9.74570524260952)); #52523=CARTESIAN_POINT('Ctrl Pts',(-3.80328497028967,6.70668093466412,9.74628998651919)); #52524=CARTESIAN_POINT('Ctrl Pts',(-3.80322127205433,6.70657225804216,9.74687411645754)); #52525=CARTESIAN_POINT('Ctrl Pts',(-3.80316504346517,6.70646096728294,9.7474578207355)); #52526=CARTESIAN_POINT('Ctrl Pts',(-3.803108814876,6.70634967652371,9.74804152501348)); #52527=CARTESIAN_POINT('Ctrl Pts',(-3.803060055933,6.70623577162691,9.74862480364251)); #52528=CARTESIAN_POINT('Ctrl Pts',(-3.8030194531,6.70611921111287,9.74920784401707)); #52529=CARTESIAN_POINT('',(-3.8030194534559,7.00029802780933,9.8080196099053)); #52530=CARTESIAN_POINT('',(-3.8030194531,6.706119211113,9.749207844017)); #52531=CARTESIAN_POINT('Origin',(-3.80638808098697,6.50767276734403,9.70976965071914)); #52532=CARTESIAN_POINT('Origin',(-2.82,6.51,9.71)); #52533=CARTESIAN_POINT('',(-1.8369805465441,7.00029802780934,9.80801960990527)); #52534=CARTESIAN_POINT('',(-3.8030194531,7.000298027782,9.808019610042)); #52535=CARTESIAN_POINT('Origin',(-1.83361191901312,6.50767276734403,9.70976965071913)); #52536=CARTESIAN_POINT('Ctrl Pts',(-1.827349309912,7.038415659055,9.670787107167)); #52537=CARTESIAN_POINT('Ctrl Pts',(-1.83224782017,7.042932151045,9.731649362387)); #52538=CARTESIAN_POINT('Ctrl Pts',(-1.83498442654,7.036811904606,9.793394052511)); #52539=CARTESIAN_POINT('Ctrl Pts',(-1.839886444492,7.020435241553,9.852185174612)); #52540=CARTESIAN_POINT('Ctrl Pts',(-1.828809183541,6.91882658659,9.679587497679)); #52541=CARTESIAN_POINT('Ctrl Pts',(-1.82984289624,6.922343943318,9.726870795728)); #52542=CARTESIAN_POINT('Ctrl Pts',(-1.837394017216,6.917632237884,9.774406244603)); #52543=CARTESIAN_POINT('Ctrl Pts',(-1.838417155405,6.904900750607,9.820079496003)); #52544=CARTESIAN_POINT('Ctrl Pts',(-1.830269057171,6.799241212816,9.688437939169)); #52545=CARTESIAN_POINT('Ctrl Pts',(-1.827437972309,6.801743918579,9.722010200524)); #52546=CARTESIAN_POINT('Ctrl Pts',(-1.839803607892,6.798424802406,9.755496693952)); #52547=CARTESIAN_POINT('Ctrl Pts',(-1.836947866318,6.789379798747,9.787925154591)); #52548=CARTESIAN_POINT('Ctrl Pts',(-1.831728930801,6.679659569157,9.697338429303)); #52549=CARTESIAN_POINT('Ctrl Pts',(-1.825033048379,6.681131942154,9.717067590425)); #52550=CARTESIAN_POINT('Ctrl Pts',(-1.842213198569,6.679189467577,9.736665360348)); #52551=CARTESIAN_POINT('Ctrl Pts',(-1.835478577231,6.673872416717,9.755722158942)); #52552=CARTESIAN_POINT('',(-1.830243291137,7.01,9.71)); #52553=CARTESIAN_POINT('',(-1.83698054786219,6.70611921111293,9.74920784401697)); #52554=CARTESIAN_POINT('',(-1.8369805469,7.000298027782,9.808019610042)); #52555=CARTESIAN_POINT('Ctrl Pts',(-1.830243291137,6.71,9.71)); #52556=CARTESIAN_POINT('Ctrl Pts',(-1.830283528488,6.71,9.71058922555904)); #52557=CARTESIAN_POINT('Ctrl Pts',(-1.830331808769,6.70999739670838,9.71117842146594)); #52558=CARTESIAN_POINT('Ctrl Pts',(-1.83038747206567,6.70999218725714,9.71176777716513)); #52559=CARTESIAN_POINT('Ctrl Pts',(-1.83044313536233,6.7099869778059,9.71235713286432)); #52560=CARTESIAN_POINT('Ctrl Pts',(-1.83050618167467,6.70997916219399,9.71294664836672)); #52561=CARTESIAN_POINT('Ctrl Pts',(-1.83057595104833,6.70996873025557,9.71353651240299)); #52562=CARTESIAN_POINT('Ctrl Pts',(-1.830645720422,6.70995829831714,9.71412637643925)); #52563=CARTESIAN_POINT('Ctrl Pts',(-1.830722212857,6.70994525005934,9.71471658902054)); #52564=CARTESIAN_POINT('Ctrl Pts',(-1.8308047685405,6.70992956793945,9.71530734053392)); #52565=CARTESIAN_POINT('Ctrl Pts',(-1.830887324224,6.70991388581957,9.7158980920473)); #52566=CARTESIAN_POINT('Ctrl Pts',(-1.830975943156,6.70989556983741,9.71648938250392)); #52567=CARTESIAN_POINT('Ctrl Pts',(-1.83106996499716,6.70987459508173,9.71708140105602)); #52568=CARTESIAN_POINT('Ctrl Pts',(-1.83116398683833,6.70985362032604,9.71767341960812)); #52569=CARTESIAN_POINT('Ctrl Pts',(-1.83126341158867,6.70982998681934,9.71826616626795)); #52570=CARTESIAN_POINT('Ctrl Pts',(-1.831367580874,6.7098036618847,9.71885983619841)); #52571=CARTESIAN_POINT('Ctrl Pts',(-1.83147175015933,6.70977733695007,9.71945350612886)); #52572=CARTESIAN_POINT('Ctrl Pts',(-1.83158066397967,6.70974832052779,9.72004809933856)); #52573=CARTESIAN_POINT('Ctrl Pts',(-1.83169365662733,6.70971657356538,9.72064378895441)); #52574=CARTESIAN_POINT('Ctrl Pts',(-1.831806649275,6.70968482660297,9.72123947857027)); #52575=CARTESIAN_POINT('Ctrl Pts',(-1.83192372075,6.70965034934948,9.72183626461866)); #52576=CARTESIAN_POINT('Ctrl Pts',(-1.832044232712,6.70961308992581,9.7224344010821)); #52577=CARTESIAN_POINT('Ctrl Pts',(-1.832164744674,6.70957583050214,9.72303253754553)); #52578=CARTESIAN_POINT('Ctrl Pts',(-1.832288697123,6.70953578746407,9.72363202433654)); #52579=CARTESIAN_POINT('Ctrl Pts',(-1.83241528954266,6.70949293764114,9.72423263262039)); #52580=CARTESIAN_POINT('Ctrl Pts',(-1.83254188196233,6.70945008781822,9.72483324090426)); #52581=CARTESIAN_POINT('Ctrl Pts',(-1.83267111435267,6.70940443051468,9.72543497061434)); #52582=CARTESIAN_POINT('Ctrl Pts',(-1.83280210955084,6.70935597041612,9.72603736447948)); #52583=CARTESIAN_POINT('Ctrl Pts',(-1.832933104749,6.70930751031756,9.72663975834461)); #52584=CARTESIAN_POINT('Ctrl Pts',(-1.833065862755,6.70925624758161,9.72724281635535)); #52585=CARTESIAN_POINT('Ctrl Pts',(-1.833199524856,6.70920219734113,9.72784613612145)); #52586=CARTESIAN_POINT('Ctrl Pts',(-1.833333186957,6.70914814710065,9.72844945588757)); #52587=CARTESIAN_POINT('Ctrl Pts',(-1.833467753153,6.70909130931114,9.72905303738378)); #52588=CARTESIAN_POINT('Ctrl Pts',(-1.83360236007433,6.70903171448929,9.7296564652838)); #52589=CARTESIAN_POINT('Ctrl Pts',(-1.83373696699567,6.70897211966744,9.73025989318382)); #52590=CARTESIAN_POINT('Ctrl Pts',(-1.83387161464233,6.70890976781452,9.73086316746596)); #52591=CARTESIAN_POINT('Ctrl Pts',(-1.83400543981984,6.70884470383807,9.7314658742089)); #52592=CARTESIAN_POINT('Ctrl Pts',(-1.83413926499733,6.70877963986161,9.73206858095182)); #52593=CARTESIAN_POINT('Ctrl Pts',(-1.83427226770567,6.7087118638088,9.73267072013923)); #52594=CARTESIAN_POINT('Ctrl Pts',(-1.83440358870833,6.70864143316188,9.73327189359277)); #52595=CARTESIAN_POINT('Ctrl Pts',(-1.834534909711,6.70857100251497,9.73387306704633)); #52596=CARTESIAN_POINT('Ctrl Pts',(-1.834664549008,6.70849791711875,9.73447327472547)); #52597=CARTESIAN_POINT('Ctrl Pts',(-1.83479163135434,6.70842225550922,9.73507206650108)); #52598=CARTESIAN_POINT('Ctrl Pts',(-1.83491871370067,6.70834659389969,9.73567085827667)); #52599=CARTESIAN_POINT('Ctrl Pts',(-1.83504323909633,6.70826835677477,9.73626823421963)); #52600=CARTESIAN_POINT('Ctrl Pts',(-1.83516439889483,6.70818760525992,9.73686397441439)); #52601=CARTESIAN_POINT('Ctrl Pts',(-1.83528555869333,6.70810685374507,9.73745971460917)); #52602=CARTESIAN_POINT('Ctrl Pts',(-1.83540335289467,6.70802358928326,9.7380538192538)); #52603=CARTESIAN_POINT('Ctrl Pts',(-1.83551711378217,6.70793780645787,9.73864654908796)); #52604=CARTESIAN_POINT('Ctrl Pts',(-1.83563087466967,6.70785202363247,9.73923927892211)); #52605=CARTESIAN_POINT('Ctrl Pts',(-1.83574060224333,6.70776372219368,9.73983063392295)); #52606=CARTESIAN_POINT('Ctrl Pts',(-1.83584560500483,6.70767289993186,9.74042079276631)); #52607=CARTESIAN_POINT('Ctrl Pts',(-1.83595060776633,6.70758207767003,9.74101095160968)); #52608=CARTESIAN_POINT('Ctrl Pts',(-1.83605088571567,6.70748873464372,9.74159991431607)); #52609=CARTESIAN_POINT('Ctrl Pts',(-1.83614575372683,6.70739285798151,9.74218787998439)); #52610=CARTESIAN_POINT('Ctrl Pts',(-1.836240621738,6.70729698131931,9.7427758456527)); #52611=CARTESIAN_POINT('Ctrl Pts',(-1.836330079811,6.70719857099777,9.74336281429091)); #52612=CARTESIAN_POINT('Ctrl Pts',(-1.83641344111266,6.70709760760426,9.74394897754983)); #52613=CARTESIAN_POINT('Ctrl Pts',(-1.83649680241433,6.70699664421074,9.74453514080876)); #52614=CARTESIAN_POINT('Ctrl Pts',(-1.83657406694467,6.70689312774445,9.74512049869984)); #52615=CARTESIAN_POINT('Ctrl Pts',(-1.8366445483275,6.70678703120428,9.74570524260952)); #52616=CARTESIAN_POINT('Ctrl Pts',(-1.83671502971033,6.70668093466412,9.74628998651919)); #52617=CARTESIAN_POINT('Ctrl Pts',(-1.83677872794567,6.70657225804216,9.74687411645754)); #52618=CARTESIAN_POINT('Ctrl Pts',(-1.83683495653483,6.70646096728294,9.7474578207355)); #52619=CARTESIAN_POINT('Ctrl Pts',(-1.836891185124,6.70634967652371,9.74804152501348)); #52620=CARTESIAN_POINT('Ctrl Pts',(-1.836939944067,6.70623577162691,9.74862480364251)); #52621=CARTESIAN_POINT('Ctrl Pts',(-1.8369805469,6.70611921111287,9.74920784401707)); #52622=CARTESIAN_POINT('Origin',(-1.825121645569,6.86,9.635)); #52623=CARTESIAN_POINT('',(-1.827636333094,6.71,9.671824407676)); #52624=CARTESIAN_POINT('Origin',(-1.707915158316,6.672945678871,9.68)); #52625=CARTESIAN_POINT('Origin',(-2.82,6.51,9.71)); #52626=CARTESIAN_POINT('',(-1.8369805469,6.706119211113,9.749207844017)); #52627=CARTESIAN_POINT('Origin',(-2.82,6.465821183331,10.95118823397)); #52628=CARTESIAN_POINT('',(-2.00439236498605,6.22552315874797,12.1531686079258)); #52629=CARTESIAN_POINT('',(-1.8369805469,6.706119211113,9.749207844017)); #52630=CARTESIAN_POINT('',(-3.63560763501395,6.22552315874797,12.1531686079258)); #52631=CARTESIAN_POINT('',(-2.004392126225,6.225523155548,12.15316862393)); #52632=CARTESIAN_POINT('',(-3.8030194531,6.706119211113,9.749207844017)); #52633=CARTESIAN_POINT('Origin',(-3.719313663437,6.612910591665,10.98059411699)); #52634=CARTESIAN_POINT('',(-3.6356077461823,6.51970197392715,12.2119803814083)); #52635=CARTESIAN_POINT('',(-3.635607873775,6.225523155548,12.15316862393)); #52636=CARTESIAN_POINT('',(-3.8030194531,7.000298027782,9.808019610042)); #52637=CARTESIAN_POINT('Origin',(-2.82,6.76,11.01)); #52638=CARTESIAN_POINT('',(-2.0043922538177,6.51970197392715,12.2119803814083)); #52639=CARTESIAN_POINT('',(-3.635607873775,6.519701972218,12.21198038996)); #52640=CARTESIAN_POINT('',(-1.8369805469,7.000298027782,9.808019610042)); #52641=CARTESIAN_POINT('Origin',(-1.920686336563,6.612910591665,10.98059411699)); #52642=CARTESIAN_POINT('',(-2.004392126225,6.519701972218,12.21198038996)); #52643=CARTESIAN_POINT('Ctrl Pts',(-2.00343901686,6.551952545096,12.20409419813)); #52644=CARTESIAN_POINT('Ctrl Pts',(-2.012354156032,6.522103521924,12.33319259363)); #52645=CARTESIAN_POINT('Ctrl Pts',(-2.02324635195,6.550045226398,12.47438513984)); #52646=CARTESIAN_POINT('Ctrl Pts',(-2.032161570713,6.626815254441,12.58238384788)); #52647=CARTESIAN_POINT('Ctrl Pts',(-2.003168234643,6.435117181778,12.17710371739)); #52648=CARTESIAN_POINT('Ctrl Pts',(-2.014909682739,6.397714148645,12.33890182043)); #52649=CARTESIAN_POINT('Ctrl Pts',(-2.02069097411,6.432857187312,12.51648355588)); #52650=CARTESIAN_POINT('Ctrl Pts',(-2.032432182266,6.529066494261,12.65184007909)); #52651=CARTESIAN_POINT('Ctrl Pts',(-2.002897452425,6.31827792559,12.15013008073)); #52652=CARTESIAN_POINT('Ctrl Pts',(-2.017465209447,6.273366245459,12.34445317345)); #52653=CARTESIAN_POINT('Ctrl Pts',(-2.018135596271,6.315767615338,12.55871214487)); #52654=CARTESIAN_POINT('Ctrl Pts',(-2.03270279382,6.431307725394,12.72128222746)); #52655=CARTESIAN_POINT('Ctrl Pts',(-2.002626670208,6.201434780174,12.12317328898)); #52656=CARTESIAN_POINT('Ctrl Pts',(-2.020020736155,6.149059740204,12.34984663496)); #52657=CARTESIAN_POINT('Ctrl Pts',(-2.015580218431,6.198776450554,12.60107095066)); #52658=CARTESIAN_POINT('Ctrl Pts',(-2.032973405373,6.333538950883,12.79071029081)); #52659=CARTESIAN_POINT('',(-2.03120887225408,6.59399661363643,12.5873827365478)); #52660=CARTESIAN_POINT('Ctrl Pts',(-2.00439238241139,6.51970197564932,12.2119803727929)); #52661=CARTESIAN_POINT('Ctrl Pts',(-2.00887857761635,6.50682956427272,12.2763686799759)); #52662=CARTESIAN_POINT('Ctrl Pts',(-2.01332416597023,6.5067652926426,12.3426568619548)); #52663=CARTESIAN_POINT('Ctrl Pts',(-2.02227695935313,6.53226112091596,12.4714843791869)); #52664=CARTESIAN_POINT('Ctrl Pts',(-2.02672254962127,6.55756937539277,12.5327511683475)); #52665=CARTESIAN_POINT('Ctrl Pts',(-2.03120874379609,6.59399661850592,12.5873827438495)); #52666=CARTESIAN_POINT('',(-2.03120876119786,6.3443945831307,12.7538123804446)); #52667=CARTESIAN_POINT('',(-2.031208999712,6.593996608803,12.5873827293)); #52668=CARTESIAN_POINT('Ctrl Pts',(-2.00439260562057,6.22552316197161,12.1531685918032)); #52669=CARTESIAN_POINT('Ctrl Pts',(-2.01156105239056,6.2049557528308,12.2560475767893)); #52670=CARTESIAN_POINT('Ctrl Pts',(-2.0146592132844,6.20480426380411,12.3620809071173)); #52671=CARTESIAN_POINT('Ctrl Pts',(-2.02093793778557,6.24561215507949,12.5684144816716)); #52672=CARTESIAN_POINT('Ctrl Pts',(-2.02403546479881,6.28615407383874,12.6664664693106)); #52673=CARTESIAN_POINT('Ctrl Pts',(-2.03120852081225,6.34439459224341,12.7538123941095)); #52674=CARTESIAN_POINT('Origin',(-2.82,7.01,12.31)); #52675=CARTESIAN_POINT('',(-3.60879123880214,6.34439458313069,12.7538123804446)); #52676=CARTESIAN_POINT('',(-2.031208999712,6.344394574085,12.75381236688)); #52677=CARTESIAN_POINT('Ctrl Pts',(-3.63560739437943,6.22552316197161,12.1531685918032)); #52678=CARTESIAN_POINT('Ctrl Pts',(-3.62843894760943,6.20495575283076,12.2560475767895)); #52679=CARTESIAN_POINT('Ctrl Pts',(-3.62534078671559,6.20480426380428,12.3620809071177)); #52680=CARTESIAN_POINT('Ctrl Pts',(-3.61906206221444,6.2456121550795,12.5684144816712)); #52681=CARTESIAN_POINT('Ctrl Pts',(-3.6159645352012,6.28615407383863,12.6664664693104)); #52682=CARTESIAN_POINT('Ctrl Pts',(-3.60879147918775,6.34439459224341,12.7538123941095)); #52683=CARTESIAN_POINT('Ctrl Pts',(-3.637373329792,6.201434780174,12.12317328898)); #52684=CARTESIAN_POINT('Ctrl Pts',(-3.619979263845,6.149059740204,12.34984663496)); #52685=CARTESIAN_POINT('Ctrl Pts',(-3.624419781569,6.198776450554,12.60107095066)); #52686=CARTESIAN_POINT('Ctrl Pts',(-3.607026594627,6.333538950883,12.79071029081)); #52687=CARTESIAN_POINT('Ctrl Pts',(-3.637102547575,6.31827792559,12.15013008073)); #52688=CARTESIAN_POINT('Ctrl Pts',(-3.622534790553,6.273366245459,12.34445317345)); #52689=CARTESIAN_POINT('Ctrl Pts',(-3.621864403729,6.315767615338,12.55871214487)); #52690=CARTESIAN_POINT('Ctrl Pts',(-3.60729720618,6.431307725394,12.72128222746)); #52691=CARTESIAN_POINT('Ctrl Pts',(-3.636831765357,6.435117181778,12.17710371739)); #52692=CARTESIAN_POINT('Ctrl Pts',(-3.625090317261,6.397714148645,12.33890182043)); #52693=CARTESIAN_POINT('Ctrl Pts',(-3.61930902589,6.432857187312,12.51648355588)); #52694=CARTESIAN_POINT('Ctrl Pts',(-3.607567817734,6.529066494261,12.65184007909)); #52695=CARTESIAN_POINT('Ctrl Pts',(-3.63656098314,6.551952545096,12.20409419813)); #52696=CARTESIAN_POINT('Ctrl Pts',(-3.627645843968,6.522103521924,12.33319259363)); #52697=CARTESIAN_POINT('Ctrl Pts',(-3.61675364805,6.550045226398,12.47438513984)); #52698=CARTESIAN_POINT('Ctrl Pts',(-3.607838429287,6.626815254441,12.58238384788)); #52699=CARTESIAN_POINT('',(-3.60879112774592,6.59399661363643,12.5873827365478)); #52700=CARTESIAN_POINT('',(-3.608791000288,6.344394574085,12.75381236688)); #52701=CARTESIAN_POINT('Ctrl Pts',(-3.63560761758861,6.51970197564932,12.2119803727929)); #52702=CARTESIAN_POINT('Ctrl Pts',(-3.63112142238365,6.50682956427272,12.2763686799759)); #52703=CARTESIAN_POINT('Ctrl Pts',(-3.62667583402977,6.5067652926426,12.3426568619548)); #52704=CARTESIAN_POINT('Ctrl Pts',(-3.61772304064687,6.53226112091596,12.4714843791869)); #52705=CARTESIAN_POINT('Ctrl Pts',(-3.61327745037873,6.55756937539278,12.5327511683475)); #52706=CARTESIAN_POINT('Ctrl Pts',(-3.60879125620391,6.59399661850592,12.5873827438495)); #52707=CARTESIAN_POINT('Origin',(-2.82,7.01,12.31)); #52708=CARTESIAN_POINT('',(-3.608791000288,6.593996608803,12.5873827293)); #52709=CARTESIAN_POINT('Origin',(-2.82,6.751562473931,12.82369136465)); #52710=CARTESIAN_POINT('',(-3.582727221823,6.805734474382,12.90493555729)); #52711=CARTESIAN_POINT('',(-3.383191930527,6.909128339059,13.06)); #52712=CARTESIAN_POINT('Origin',(-3.383191930527,6.798175247341,12.89359864352)); #52713=CARTESIAN_POINT('',(-2.256808069473,6.909128339059,13.06)); #52714=CARTESIAN_POINT('',(-3.383191930527,6.909128339059,13.06)); #52715=CARTESIAN_POINT('',(-2.057272778177,6.805734474382,12.90493555729)); #52716=CARTESIAN_POINT('Origin',(-2.256808069473,6.798175247341,12.89359864352)); #52717=CARTESIAN_POINT('',(-2.031208999712,6.593996608803,12.5873827293)); #52718=CARTESIAN_POINT('',(-3.608791000288,6.593996608803,12.5873827293)); #52719=CARTESIAN_POINT('Origin',(-3.383191930527,6.831126717488,12.8716272632)); #52720=CARTESIAN_POINT('',(-3.383191930527,6.659526304341,13.22642963758)); #52721=CARTESIAN_POINT('',(-3.383191930527,6.909128339059,13.06)); #52722=CARTESIAN_POINT('',(-3.582727221823,6.556132439663,13.07136519487)); #52723=CARTESIAN_POINT('',(-3.582727221823,6.805734474382,12.90493555729)); #52724=CARTESIAN_POINT('Origin',(-3.383191930527,6.548573212622,13.0600282811)); #52725=CARTESIAN_POINT('Origin',(-2.82,6.501960439213,12.99012100223)); #52726=CARTESIAN_POINT('',(-3.608791000288,6.344394574085,12.75381236688)); #52727=CARTESIAN_POINT('',(-2.057272778177,6.556132439663,13.07136519487)); #52728=CARTESIAN_POINT('',(-2.031208999712,6.344394574085,12.75381236688)); #52729=CARTESIAN_POINT('',(-2.256808069473,6.659526304341,13.22642963758)); #52730=CARTESIAN_POINT('Origin',(-2.256808069473,6.548573212622,13.0600282811)); #52731=CARTESIAN_POINT('',(-2.256808069473,6.659526304341,13.22642963758)); #52732=CARTESIAN_POINT('Origin',(-2.82,6.909128339059,13.06)); #52733=CARTESIAN_POINT('',(-2.256808069473,6.659526304341,13.22642963758)); #52734=CARTESIAN_POINT('Origin',(-2.256808069473,6.518347254933,13.0801823443)); #52735=CARTESIAN_POINT('',(-2.057272778177,6.556132439663,13.07136519487)); #52736=CARTESIAN_POINT('Origin',(-2.050604499856,6.626761456572,12.90690618344)); #52737=CARTESIAN_POINT('Origin',(-3.589395500144,6.626761456572,12.90690618344)); #52738=CARTESIAN_POINT('Origin',(-1.,7.01,2.31)); #52739=CARTESIAN_POINT('',(-4.8,7.01,2.31)); #52740=CARTESIAN_POINT('',(-1.,7.01,2.31)); #52741=CARTESIAN_POINT('Origin',(-1.,7.01,2.66)); #52742=CARTESIAN_POINT('',(-1.,7.01,3.01)); #52743=CARTESIAN_POINT('Origin',(-4.8,7.01,3.01)); #52744=CARTESIAN_POINT('',(-4.8,7.01,3.01)); #52745=CARTESIAN_POINT('Origin',(-4.8,7.01,2.66)); #52746=CARTESIAN_POINT('Origin',(1.,7.01,3.01)); #52747=CARTESIAN_POINT('',(4.8,7.01,3.01)); #52748=CARTESIAN_POINT('',(1.,7.01,3.01)); #52749=CARTESIAN_POINT('Origin',(1.,7.01,2.66)); #52750=CARTESIAN_POINT('',(1.,7.01,2.31)); #52751=CARTESIAN_POINT('Origin',(4.8,7.01,2.31)); #52752=CARTESIAN_POINT('',(4.8,7.01,2.31)); #52753=CARTESIAN_POINT('Origin',(4.8,7.01,2.66)); #52754=CARTESIAN_POINT('Origin',(-5.65,0.,0.)); #52755=CARTESIAN_POINT('',(-5.65,7.43,14.96)); #52756=CARTESIAN_POINT('',(-5.65,7.43,15.26)); #52757=CARTESIAN_POINT('',(-5.65,7.01,14.96)); #52758=CARTESIAN_POINT('Origin',(-5.35,7.43,15.30011793224)); #52759=CARTESIAN_POINT('',(-5.35,7.73,14.96)); #52760=CARTESIAN_POINT('',(-5.35,7.73,15.26)); #52761=CARTESIAN_POINT('Origin',(-5.35,7.43,14.96)); #52762=CARTESIAN_POINT('Origin',(-5.65,7.01,14.96)); #52763=CARTESIAN_POINT('',(5.65,7.43,14.96)); #52764=CARTESIAN_POINT('',(5.65,7.01,14.96)); #52765=CARTESIAN_POINT('',(5.35,7.73,14.96)); #52766=CARTESIAN_POINT('',(-5.35,7.73,14.96)); #52767=CARTESIAN_POINT('Origin',(5.35,7.43,14.96)); #52768=CARTESIAN_POINT('Origin',(5.35,7.43,14.92320033925)); #52769=CARTESIAN_POINT('',(5.65,7.43,14.96)); #52770=CARTESIAN_POINT('',(5.35,7.73,14.96)); #52771=CARTESIAN_POINT('Origin',(-5.65,7.73,14.96)); #52772=CARTESIAN_POINT('Origin',(5.65,0.,0.)); #52773=CARTESIAN_POINT('Origin',(-6.7,0.532945678871,14.81)); #52774=CARTESIAN_POINT('Origin',(-6.7,1.59,14.81)); #52775=CARTESIAN_POINT('Origin',(6.55,1.59,0.)); #52776=CARTESIAN_POINT('',(6.7,1.59,14.96)); #52777=CARTESIAN_POINT('Origin',(6.7,1.59,14.81)); #52778=CARTESIAN_POINT('',(6.9,1.59,14.96)); #52779=CARTESIAN_POINT('',(6.7,1.59,14.96)); #52780=CARTESIAN_POINT('',(6.9,1.59,14.96)); #52781=CARTESIAN_POINT('Origin',(6.55,1.59,0.)); #52782=CARTESIAN_POINT('',(-6.9,1.59,14.96)); #52783=CARTESIAN_POINT('',(-6.7,1.59,14.96)); #52784=CARTESIAN_POINT('',(-6.9,1.59,14.96)); #52785=CARTESIAN_POINT('Origin',(-6.7,1.59,14.81)); #52786=CARTESIAN_POINT('',(-6.9,1.59,15.26)); #52787=CARTESIAN_POINT('Origin',(6.9,1.89,14.92221738912)); #52788=CARTESIAN_POINT('',(7.2,1.89,14.96)); #52789=CARTESIAN_POINT('Origin',(6.9,1.89,14.96)); #52790=CARTESIAN_POINT('',(7.2,1.89,14.96)); #52791=CARTESIAN_POINT('Origin',(7.2,6.71,14.96)); #52792=CARTESIAN_POINT('',(7.2,6.41,14.96)); #52793=CARTESIAN_POINT('',(7.2,6.41,14.96)); #52794=CARTESIAN_POINT('',(7.2,6.41,15.26)); #52795=CARTESIAN_POINT('Origin',(6.9,6.41,15.29844898126)); #52796=CARTESIAN_POINT('Origin',(6.9,6.41,14.96)); #52797=CARTESIAN_POINT('Origin',(6.55,6.71,14.96)); #52798=CARTESIAN_POINT('',(6.7,1.59,14.96)); #52799=CARTESIAN_POINT('Origin',(6.7,-0.06536039280348,14.81)); #52800=CARTESIAN_POINT('Origin',(-6.9,1.89,15.29705432113)); #52801=CARTESIAN_POINT('',(-7.2,1.89,14.96)); #52802=CARTESIAN_POINT('',(-7.2,1.89,15.26)); #52803=CARTESIAN_POINT('Origin',(-6.9,1.89,14.96)); #52804=CARTESIAN_POINT('Origin',(-7.2,6.71,14.96)); #52805=CARTESIAN_POINT('',(-7.2,6.41,14.96)); #52806=CARTESIAN_POINT('',(-7.2,6.41,14.96)); #52807=CARTESIAN_POINT('Origin',(-6.9,6.41,14.96)); #52808=CARTESIAN_POINT('',(-6.7,6.71,14.96)); #52809=CARTESIAN_POINT('Origin',(-6.7,7.057113928062,14.81)); #52810=CARTESIAN_POINT('Origin',(-6.9,6.41,14.92294567887)); #52811=CARTESIAN_POINT('',(-7.2,6.41,14.96)); #52812=CARTESIAN_POINT('Origin',(-7.2,6.71,15.26)); #52813=CARTESIAN_POINT('Origin',(-6.55,1.29,11.54)); #52814=CARTESIAN_POINT('',(-0.725,1.59,11.54)); #52815=CARTESIAN_POINT('',(-0.75,1.45,11.54)); #52816=CARTESIAN_POINT('',(-0.75,1.45,11.54)); #52817=CARTESIAN_POINT('',(-5.65,1.45,11.54)); #52818=CARTESIAN_POINT('',(-5.65,1.45,11.54)); #52819=CARTESIAN_POINT('',(-5.65,1.45,11.54)); #52820=CARTESIAN_POINT('Origin',(-5.65,1.45,5.1)); #52821=CARTESIAN_POINT('',(-5.65,1.45,5.1)); #52822=CARTESIAN_POINT('',(-5.65,1.45,5.1)); #52823=CARTESIAN_POINT('',(-5.65,0.4,5.1)); #52824=CARTESIAN_POINT('',(-5.65,1.45,5.1)); #52825=CARTESIAN_POINT('',(-5.65,0.4,11.54)); #52826=CARTESIAN_POINT('',(-5.65,0.4,5.1)); #52827=CARTESIAN_POINT('',(-5.65,1.29,11.54)); #52828=CARTESIAN_POINT('Origin',(0.,0.,11.54)); #52829=CARTESIAN_POINT('',(-5.5,0.4,11.54)); #52830=CARTESIAN_POINT('',(-5.65,0.4,11.54)); #52831=CARTESIAN_POINT('',(-5.5,0.,11.54)); #52832=CARTESIAN_POINT('',(-5.5,0.4,11.54)); #52833=CARTESIAN_POINT('',(-4.5,0.,11.54)); #52834=CARTESIAN_POINT('',(-5.5,0.,11.54)); #52835=CARTESIAN_POINT('',(-4.5,0.4,11.54)); #52836=CARTESIAN_POINT('',(-4.5,0.,11.54)); #52837=CARTESIAN_POINT('',(4.5,0.4,11.54)); #52838=CARTESIAN_POINT('',(-4.5,0.4,11.54)); #52839=CARTESIAN_POINT('',(4.5,0.,11.54)); #52840=CARTESIAN_POINT('',(4.5,0.4,11.54)); #52841=CARTESIAN_POINT('',(5.5,0.,11.54)); #52842=CARTESIAN_POINT('',(4.5,0.,11.54)); #52843=CARTESIAN_POINT('',(5.5,0.4,11.54)); #52844=CARTESIAN_POINT('',(5.5,0.,11.54)); #52845=CARTESIAN_POINT('',(5.65,0.4,11.54)); #52846=CARTESIAN_POINT('',(5.5,0.4,11.54)); #52847=CARTESIAN_POINT('',(5.65,0.4,11.54)); #52848=CARTESIAN_POINT('',(0.75,1.15,11.54)); #52849=CARTESIAN_POINT('',(0.75,1.29,11.54)); #52850=CARTESIAN_POINT('',(-0.75,1.15,11.54)); #52851=CARTESIAN_POINT('',(-0.75,1.15,11.54)); #52852=CARTESIAN_POINT('',(-0.75,1.29,11.54)); #52853=CARTESIAN_POINT('Origin',(-0.75,1.45,11.54)); #52854=CARTESIAN_POINT('',(-0.75,1.15,10.81)); #52855=CARTESIAN_POINT('',(-0.75,1.15,11.54)); #52856=CARTESIAN_POINT('',(-0.75,1.45,10.81)); #52857=CARTESIAN_POINT('',(-0.75,1.45,10.81)); #52858=CARTESIAN_POINT('',(-0.75,1.45,11.54)); #52859=CARTESIAN_POINT('Origin',(5.65,1.45,5.1)); #52860=CARTESIAN_POINT('',(5.65,1.45,5.1)); #52861=CARTESIAN_POINT('',(5.65,1.45,5.1)); #52862=CARTESIAN_POINT('',(0.75,1.45,10.81)); #52863=CARTESIAN_POINT('',(-0.75,1.45,10.81)); #52864=CARTESIAN_POINT('',(0.75,1.45,11.54)); #52865=CARTESIAN_POINT('',(0.75,1.45,11.54)); #52866=CARTESIAN_POINT('',(5.65,1.45,11.54)); #52867=CARTESIAN_POINT('',(5.65,1.45,11.54)); #52868=CARTESIAN_POINT('',(5.65,1.45,5.1)); #52869=CARTESIAN_POINT('Origin',(5.65,0.4,5.1)); #52870=CARTESIAN_POINT('',(5.65,0.4,5.1)); #52871=CARTESIAN_POINT('',(5.65,0.4,5.1)); #52872=CARTESIAN_POINT('',(5.65,0.4,5.1)); #52873=CARTESIAN_POINT('',(5.65,1.45,11.54)); #52874=CARTESIAN_POINT('Origin',(0.725,1.29,11.54)); #52875=CARTESIAN_POINT('',(0.75,1.45,11.54)); #52876=CARTESIAN_POINT('',(0.725,1.59,11.54)); #52877=CARTESIAN_POINT('Origin',(0.725,1.29,10.84)); #52878=CARTESIAN_POINT('',(0.725,1.59,10.84)); #52879=CARTESIAN_POINT('Origin',(-0.725,1.29,10.84)); #52880=CARTESIAN_POINT('',(-0.725,1.59,10.84)); #52881=CARTESIAN_POINT('Origin',(-0.725,1.29,11.54)); #52882=CARTESIAN_POINT('Origin',(0.75,1.15,11.54)); #52883=CARTESIAN_POINT('',(0.75,1.15,10.81)); #52884=CARTESIAN_POINT('',(0.75,1.15,10.81)); #52885=CARTESIAN_POINT('',(0.75,1.15,11.54)); #52886=CARTESIAN_POINT('Origin',(-0.75,1.15,11.54)); #52887=CARTESIAN_POINT('',(-0.75,1.15,10.81)); #52888=CARTESIAN_POINT('Origin',(0.,0.,10.81)); #52889=CARTESIAN_POINT('Origin',(0.,0.,5.1)); #52890=CARTESIAN_POINT('',(5.65,0.4,5.1)); #52891=CARTESIAN_POINT('',(-6.15,0.4,5.1)); #52892=CARTESIAN_POINT('',(1.64,4.15,5.1)); #52893=CARTESIAN_POINT('',(2.86,4.15,5.1)); #52894=CARTESIAN_POINT('',(1.64,4.15,5.1)); #52895=CARTESIAN_POINT('',(1.64,3.38,5.1)); #52896=CARTESIAN_POINT('',(1.64,3.38,5.1)); #52897=CARTESIAN_POINT('',(0.36,3.38,5.1)); #52898=CARTESIAN_POINT('',(0.36,3.38,5.1)); #52899=CARTESIAN_POINT('',(0.36,4.15,5.1)); #52900=CARTESIAN_POINT('',(0.36,4.15,5.1)); #52901=CARTESIAN_POINT('',(-0.36,4.15,5.1)); #52902=CARTESIAN_POINT('',(-0.36,4.15,5.1)); #52903=CARTESIAN_POINT('',(-0.36,3.38,5.1)); #52904=CARTESIAN_POINT('',(-0.36,3.38,5.1)); #52905=CARTESIAN_POINT('',(-1.64,3.38,5.1)); #52906=CARTESIAN_POINT('',(-1.64,3.38,5.1)); #52907=CARTESIAN_POINT('',(-1.64,4.15,5.1)); #52908=CARTESIAN_POINT('',(-1.64,4.15,5.1)); #52909=CARTESIAN_POINT('',(-2.86,4.15,5.1)); #52910=CARTESIAN_POINT('',(-2.86,4.15,5.1)); #52911=CARTESIAN_POINT('',(-2.86,3.38,5.1)); #52912=CARTESIAN_POINT('',(-2.86,3.38,5.1)); #52913=CARTESIAN_POINT('',(-4.14,3.38,5.1)); #52914=CARTESIAN_POINT('',(-4.14,3.38,5.1)); #52915=CARTESIAN_POINT('',(-4.14,4.15,5.1)); #52916=CARTESIAN_POINT('',(-4.14,4.15,5.1)); #52917=CARTESIAN_POINT('',(-5.55,4.15,5.1)); #52918=CARTESIAN_POINT('',(-5.55,4.15,5.1)); #52919=CARTESIAN_POINT('',(-5.55,5.99,5.1)); #52920=CARTESIAN_POINT('',(-5.55,5.99,5.1)); #52921=CARTESIAN_POINT('',(5.55,5.99,5.1)); #52922=CARTESIAN_POINT('',(5.55,5.99,5.1)); #52923=CARTESIAN_POINT('',(5.55,4.15,5.1)); #52924=CARTESIAN_POINT('',(5.55,4.15,5.1)); #52925=CARTESIAN_POINT('',(4.14,4.15,5.1)); #52926=CARTESIAN_POINT('',(4.14,4.15,5.1)); #52927=CARTESIAN_POINT('',(4.14,3.38,5.1)); #52928=CARTESIAN_POINT('',(4.14,3.38,5.1)); #52929=CARTESIAN_POINT('',(2.86,3.38,5.1)); #52930=CARTESIAN_POINT('',(2.86,3.38,5.1)); #52931=CARTESIAN_POINT('',(2.86,4.15,5.1)); #52932=CARTESIAN_POINT('Origin',(-6.15,0.4,0.)); #52933=CARTESIAN_POINT('',(-5.5,0.4,0.)); #52934=CARTESIAN_POINT('Origin',(-5.5,0.4,0.)); #52935=CARTESIAN_POINT('',(-5.5,0.,0.)); #52936=CARTESIAN_POINT('Origin',(-5.5,0.,0.)); #52937=CARTESIAN_POINT('',(-4.5,0.,0.)); #52938=CARTESIAN_POINT('Origin',(-4.5,0.,0.)); #52939=CARTESIAN_POINT('',(-4.5,0.4,0.5)); #52940=CARTESIAN_POINT('',(-4.5,0.4,0.5)); #52941=CARTESIAN_POINT('',(-4.5,0.4,0.5)); #52942=CARTESIAN_POINT('Origin',(-4.5,0.4,0.)); #52943=CARTESIAN_POINT('',(4.5,0.4,0.5)); #52944=CARTESIAN_POINT('',(4.1,0.4,0.5)); #52945=CARTESIAN_POINT('',(4.5,0.4,0.5)); #52946=CARTESIAN_POINT('',(4.5,0.4,0.5)); #52947=CARTESIAN_POINT('',(-4.1,0.4,0.5)); #52948=CARTESIAN_POINT('',(-4.5,0.4,0.5)); #52949=CARTESIAN_POINT('',(-3.85,0.4,0.75)); #52950=CARTESIAN_POINT('',(-4.1,0.4,0.5)); #52951=CARTESIAN_POINT('',(-3.85,0.4,2.5)); #52952=CARTESIAN_POINT('',(-3.85,0.4,2.5)); #52953=CARTESIAN_POINT('',(-3.15,0.4,2.5)); #52954=CARTESIAN_POINT('',(-3.15,0.4,2.5)); #52955=CARTESIAN_POINT('',(-3.15,0.4,0.75)); #52956=CARTESIAN_POINT('',(-3.15,0.4,0.75)); #52957=CARTESIAN_POINT('',(-2.9,0.4,0.5)); #52958=CARTESIAN_POINT('',(-3.15,0.4,0.75)); #52959=CARTESIAN_POINT('',(-1.6,0.4,0.5)); #52960=CARTESIAN_POINT('',(-1.6,0.4,0.5)); #52961=CARTESIAN_POINT('',(-1.35,0.4,0.75)); #52962=CARTESIAN_POINT('',(-1.6,0.4,0.5)); #52963=CARTESIAN_POINT('',(-1.35,0.4,2.5)); #52964=CARTESIAN_POINT('',(-1.35,0.4,2.5)); #52965=CARTESIAN_POINT('',(-0.65,0.4,2.5)); #52966=CARTESIAN_POINT('',(-0.65,0.4,2.5)); #52967=CARTESIAN_POINT('',(-0.65,0.4,0.75)); #52968=CARTESIAN_POINT('',(-0.65,0.4,0.75)); #52969=CARTESIAN_POINT('',(-0.4,0.4,0.5)); #52970=CARTESIAN_POINT('',(-0.65,0.4,0.75)); #52971=CARTESIAN_POINT('',(0.4,0.4,0.5)); #52972=CARTESIAN_POINT('',(0.4,0.4,0.5)); #52973=CARTESIAN_POINT('',(0.65,0.4,0.75)); #52974=CARTESIAN_POINT('',(0.4,0.4,0.5)); #52975=CARTESIAN_POINT('',(0.65,0.4,2.5)); #52976=CARTESIAN_POINT('',(0.65,0.4,2.5)); #52977=CARTESIAN_POINT('',(1.35,0.4,2.5)); #52978=CARTESIAN_POINT('',(1.35,0.4,2.5)); #52979=CARTESIAN_POINT('',(1.35,0.4,0.75)); #52980=CARTESIAN_POINT('',(1.35,0.4,0.75)); #52981=CARTESIAN_POINT('',(1.6,0.4,0.5)); #52982=CARTESIAN_POINT('',(1.35,0.4,0.75)); #52983=CARTESIAN_POINT('',(2.9,0.4,0.5)); #52984=CARTESIAN_POINT('',(2.9,0.4,0.5)); #52985=CARTESIAN_POINT('',(3.15,0.4,0.75)); #52986=CARTESIAN_POINT('',(2.9,0.4,0.5)); #52987=CARTESIAN_POINT('',(3.15,0.4,2.5)); #52988=CARTESIAN_POINT('',(3.15,0.4,2.5)); #52989=CARTESIAN_POINT('',(3.85,0.4,2.5)); #52990=CARTESIAN_POINT('',(3.85,0.4,2.5)); #52991=CARTESIAN_POINT('',(3.85,0.4,0.75)); #52992=CARTESIAN_POINT('',(3.85,0.4,0.75)); #52993=CARTESIAN_POINT('',(3.85,0.4,0.75)); #52994=CARTESIAN_POINT('Origin',(3.975,1.825,0.625)); #52995=CARTESIAN_POINT('',(3.85,3.25,0.75)); #52996=CARTESIAN_POINT('',(4.1,3.25,0.5)); #52997=CARTESIAN_POINT('Origin',(4.5,0.4,0.5)); #52998=CARTESIAN_POINT('',(4.5,0.4,0.5)); #52999=CARTESIAN_POINT('Origin',(4.5,0.4,0.)); #53000=CARTESIAN_POINT('',(4.5,0.,0.)); #53001=CARTESIAN_POINT('Origin',(4.5,0.,0.)); #53002=CARTESIAN_POINT('',(5.5,0.,11.54)); #53003=CARTESIAN_POINT('Origin',(5.5,0.,0.)); #53004=CARTESIAN_POINT('',(5.5,0.4,0.)); #53005=CARTESIAN_POINT('Origin',(5.5,0.4,0.)); #53006=CARTESIAN_POINT('Origin',(3.85,0.4,0.5)); #53007=CARTESIAN_POINT('',(3.85,0.4,2.5)); #53008=CARTESIAN_POINT('',(3.85,3.25,2.42)); #53009=CARTESIAN_POINT('Origin',(3.,3.25,2.42)); #53010=CARTESIAN_POINT('',(3.175,3.25,2.42)); #53011=CARTESIAN_POINT('',(3.15,3.25,2.42)); #53012=CARTESIAN_POINT('',(3.15,3.25,2.42)); #53013=CARTESIAN_POINT('',(3.175,3.25,2.12)); #53014=CARTESIAN_POINT('',(3.15,3.25,2.12)); #53015=CARTESIAN_POINT('',(3.175,3.25,2.42)); #53016=CARTESIAN_POINT('Origin',(3.,3.25,2.42)); #53017=CARTESIAN_POINT('',(3.825,3.25,2.12)); #53018=CARTESIAN_POINT('',(3.825,3.25,2.12)); #53019=CARTESIAN_POINT('',(3.825,3.25,2.42)); #53020=CARTESIAN_POINT('',(3.825,3.25,2.42)); #53021=CARTESIAN_POINT('',(3.825,3.25,2.42)); #53022=CARTESIAN_POINT('Origin',(3.175,0.,0.)); #53023=CARTESIAN_POINT('',(3.175,-2.,2.42)); #53024=CARTESIAN_POINT('',(3.175,-2.,2.12)); #53025=CARTESIAN_POINT('',(3.175,-2.,2.42)); #53026=CARTESIAN_POINT('',(3.175,3.25,2.42)); #53027=CARTESIAN_POINT('',(3.175,-2.,2.12)); #53028=CARTESIAN_POINT('Origin',(3.175,-2.,2.12)); #53029=CARTESIAN_POINT('',(3.35,-2.35,2.42)); #53030=CARTESIAN_POINT('',(3.175,-2.,2.42)); #53031=CARTESIAN_POINT('',(3.35,-2.35,2.12)); #53032=CARTESIAN_POINT('',(3.175,-2.,2.12)); #53033=CARTESIAN_POINT('',(3.35,-2.35,2.12)); #53034=CARTESIAN_POINT('Origin',(3.,4.77,2.42)); #53035=CARTESIAN_POINT('',(3.35,-2.6,2.42)); #53036=CARTESIAN_POINT('',(3.35,-2.6,2.42)); #53037=CARTESIAN_POINT('',(3.65,-2.6,2.42)); #53038=CARTESIAN_POINT('',(3.35,-2.6,2.42)); #53039=CARTESIAN_POINT('',(3.65,-2.35,2.42)); #53040=CARTESIAN_POINT('',(3.65,-2.6,2.42)); #53041=CARTESIAN_POINT('',(3.825,-2.,2.42)); #53042=CARTESIAN_POINT('',(3.65,-2.35,2.42)); #53043=CARTESIAN_POINT('',(3.825,3.25,2.42)); #53044=CARTESIAN_POINT('',(4.,4.77,2.42)); #53045=CARTESIAN_POINT('',(4.,4.77,2.42)); #53046=CARTESIAN_POINT('',(3.,4.77,2.42)); #53047=CARTESIAN_POINT('',(3.,4.77,2.42)); #53048=CARTESIAN_POINT('',(3.,4.77,2.42)); #53049=CARTESIAN_POINT('Origin',(3.,0.,0.)); #53050=CARTESIAN_POINT('',(3.,4.35,12.75)); #53051=CARTESIAN_POINT('',(3.,4.65,12.75)); #53052=CARTESIAN_POINT('',(3.,4.35,12.75)); #53053=CARTESIAN_POINT('',(3.,4.65,12.25)); #53054=CARTESIAN_POINT('',(3.,4.65,12.25)); #53055=CARTESIAN_POINT('',(3.,4.474264068712,11.82573593129)); #53056=CARTESIAN_POINT('Origin',(3.,4.05,12.25)); #53057=CARTESIAN_POINT('',(3.,3.837867965644,11.18933982822)); #53058=CARTESIAN_POINT('',(3.,3.837867965644,11.18933982822)); #53059=CARTESIAN_POINT('',(3.,3.804254386713,10.80513486296)); #53060=CARTESIAN_POINT('Origin',(3.,4.05,10.97720779386)); #53061=CARTESIAN_POINT('',(3.,5.261491226573,8.723984974761)); #53062=CARTESIAN_POINT('',(3.,5.261491226573,8.723984974761)); #53063=CARTESIAN_POINT('',(3.,5.37,8.379839112951)); #53064=CARTESIAN_POINT('Origin',(3.,4.77,8.379839112951)); #53065=CARTESIAN_POINT('',(3.,5.37,2.72)); #53066=CARTESIAN_POINT('',(3.,5.37,2.72)); #53067=CARTESIAN_POINT('',(3.,4.77,2.12)); #53068=CARTESIAN_POINT('Origin',(3.,4.77,2.72)); #53069=CARTESIAN_POINT('',(3.,3.25,2.12)); #53070=CARTESIAN_POINT('',(3.,5.07,2.72)); #53071=CARTESIAN_POINT('Origin',(3.,4.77,2.72)); #53072=CARTESIAN_POINT('',(3.,5.07,8.379839112951)); #53073=CARTESIAN_POINT('',(3.,5.07,8.379839112951)); #53074=CARTESIAN_POINT('',(3.,5.015745613287,8.551912043856)); #53075=CARTESIAN_POINT('Origin',(3.,4.77,8.379839112951)); #53076=CARTESIAN_POINT('',(3.,3.558508773427,10.63306193205)); #53077=CARTESIAN_POINT('',(3.,3.558508773427,10.63306193205)); #53078=CARTESIAN_POINT('',(3.,3.625735931288,11.40147186258)); #53079=CARTESIAN_POINT('Origin',(3.,4.05,10.97720779386)); #53080=CARTESIAN_POINT('',(3.,4.262132034356,12.03786796564)); #53081=CARTESIAN_POINT('',(3.,4.262132034356,12.03786796564)); #53082=CARTESIAN_POINT('',(3.,4.35,12.25)); #53083=CARTESIAN_POINT('Origin',(3.,4.05,12.25)); #53084=CARTESIAN_POINT('',(3.,4.35,12.75)); #53085=CARTESIAN_POINT('Origin',(0.,0.,12.75)); #53086=CARTESIAN_POINT('',(2.86,5.47,12.75)); #53087=CARTESIAN_POINT('',(2.86,4.15,12.75)); #53088=CARTESIAN_POINT('',(2.86,5.47,12.75)); #53089=CARTESIAN_POINT('',(4.14,5.47,12.75)); #53090=CARTESIAN_POINT('',(4.14,5.47,12.75)); #53091=CARTESIAN_POINT('',(4.14,4.15,12.75)); #53092=CARTESIAN_POINT('',(4.14,4.15,12.75)); #53093=CARTESIAN_POINT('',(4.14,4.15,12.75)); #53094=CARTESIAN_POINT('',(4.,4.35,12.75)); #53095=CARTESIAN_POINT('',(3.,4.35,12.75)); #53096=CARTESIAN_POINT('',(4.,4.65,12.75)); #53097=CARTESIAN_POINT('',(4.,4.35,12.75)); #53098=CARTESIAN_POINT('',(3.,4.65,12.75)); #53099=CARTESIAN_POINT('Origin',(0.,0.,12.75)); #53100=CARTESIAN_POINT('',(0.36,5.47,12.75)); #53101=CARTESIAN_POINT('',(0.36,4.15,12.75)); #53102=CARTESIAN_POINT('',(0.36,5.47,12.75)); #53103=CARTESIAN_POINT('',(1.64,5.47,12.75)); #53104=CARTESIAN_POINT('',(1.64,5.47,12.75)); #53105=CARTESIAN_POINT('',(1.64,4.15,12.75)); #53106=CARTESIAN_POINT('',(1.64,4.15,12.75)); #53107=CARTESIAN_POINT('',(1.64,4.15,12.75)); #53108=CARTESIAN_POINT('',(0.5,4.35,12.75)); #53109=CARTESIAN_POINT('',(1.5,4.35,12.75)); #53110=CARTESIAN_POINT('',(0.5,4.35,12.75)); #53111=CARTESIAN_POINT('',(1.5,4.65,12.75)); #53112=CARTESIAN_POINT('',(1.5,4.35,12.75)); #53113=CARTESIAN_POINT('',(0.5,4.65,12.75)); #53114=CARTESIAN_POINT('',(0.5,4.65,12.75)); #53115=CARTESIAN_POINT('',(0.5,4.35,12.75)); #53116=CARTESIAN_POINT('Origin',(0.,0.,12.75)); #53117=CARTESIAN_POINT('',(-1.64,5.47,12.75)); #53118=CARTESIAN_POINT('',(-1.64,4.15,12.75)); #53119=CARTESIAN_POINT('',(-1.64,5.47,12.75)); #53120=CARTESIAN_POINT('',(-0.36,5.47,12.75)); #53121=CARTESIAN_POINT('',(-0.36,5.47,12.75)); #53122=CARTESIAN_POINT('',(-0.36,4.15,12.75)); #53123=CARTESIAN_POINT('',(-0.36,4.15,12.75)); #53124=CARTESIAN_POINT('',(-0.36,4.15,12.75)); #53125=CARTESIAN_POINT('',(-1.5,4.35,12.75)); #53126=CARTESIAN_POINT('',(-0.5,4.35,12.75)); #53127=CARTESIAN_POINT('',(-1.5,4.35,12.75)); #53128=CARTESIAN_POINT('',(-0.5,4.65,12.75)); #53129=CARTESIAN_POINT('',(-0.5,4.35,12.75)); #53130=CARTESIAN_POINT('',(-1.5,4.65,12.75)); #53131=CARTESIAN_POINT('',(-1.5,4.65,12.75)); #53132=CARTESIAN_POINT('',(-1.5,4.35,12.75)); #53133=CARTESIAN_POINT('Origin',(0.,0.,12.75)); #53134=CARTESIAN_POINT('',(-4.14,5.47,12.75)); #53135=CARTESIAN_POINT('',(-4.14,4.15,12.75)); #53136=CARTESIAN_POINT('',(-4.14,5.47,12.75)); #53137=CARTESIAN_POINT('',(-2.86,5.47,12.75)); #53138=CARTESIAN_POINT('',(-2.86,5.47,12.75)); #53139=CARTESIAN_POINT('',(-2.86,4.15,12.75)); #53140=CARTESIAN_POINT('',(-2.86,4.15,12.75)); #53141=CARTESIAN_POINT('',(-2.86,4.15,12.75)); #53142=CARTESIAN_POINT('',(-4.,4.35,12.75)); #53143=CARTESIAN_POINT('',(-3.,4.35,12.75)); #53144=CARTESIAN_POINT('',(-4.,4.35,12.75)); #53145=CARTESIAN_POINT('',(-3.,4.65,12.75)); #53146=CARTESIAN_POINT('',(-3.,4.35,12.75)); #53147=CARTESIAN_POINT('',(-4.,4.65,12.75)); #53148=CARTESIAN_POINT('',(-4.,4.65,12.75)); #53149=CARTESIAN_POINT('',(-4.,4.35,12.75)); #53150=CARTESIAN_POINT('Origin',(-5.55,4.15,5.1)); #53151=CARTESIAN_POINT('',(-5.55,4.15,14.1)); #53152=CARTESIAN_POINT('',(-5.55,4.15,5.1)); #53153=CARTESIAN_POINT('',(-4.14,4.15,5.1)); #53154=CARTESIAN_POINT('',(-2.86,4.15,5.1)); #53155=CARTESIAN_POINT('',(-1.64,4.15,5.1)); #53156=CARTESIAN_POINT('',(-0.36,4.15,5.1)); #53157=CARTESIAN_POINT('',(0.36,4.15,5.1)); #53158=CARTESIAN_POINT('',(1.64,4.15,5.1)); #53159=CARTESIAN_POINT('',(2.86,4.15,5.1)); #53160=CARTESIAN_POINT('',(4.14,4.15,5.1)); #53161=CARTESIAN_POINT('',(5.55,4.15,14.1)); #53162=CARTESIAN_POINT('',(5.55,4.15,5.1)); #53163=CARTESIAN_POINT('',(-5.55,4.15,14.1)); #53164=CARTESIAN_POINT('Origin',(0.,4.25,14.6)); #53165=CARTESIAN_POINT('',(5.35,4.35,15.1)); #53166=CARTESIAN_POINT('',(5.35,4.35,15.1)); #53167=CARTESIAN_POINT('',(-5.35,4.35,15.1)); #53168=CARTESIAN_POINT('',(-5.35,4.35,15.1)); #53169=CARTESIAN_POINT('',(-5.35,4.35,15.1)); #53170=CARTESIAN_POINT('Origin',(-5.45,5.07,14.6)); #53171=CARTESIAN_POINT('',(-5.35,5.79,15.1)); #53172=CARTESIAN_POINT('',(-5.35,5.79,15.1)); #53173=CARTESIAN_POINT('',(-5.55,5.99,14.1)); #53174=CARTESIAN_POINT('',(-5.35,5.79,15.1)); #53175=CARTESIAN_POINT('',(-5.55,5.99,14.1)); #53176=CARTESIAN_POINT('Origin',(-5.55,5.99,5.1)); #53177=CARTESIAN_POINT('',(-5.55,5.99,5.1)); #53178=CARTESIAN_POINT('Origin',(5.55,5.99,5.1)); #53179=CARTESIAN_POINT('',(5.55,5.99,14.1)); #53180=CARTESIAN_POINT('',(5.55,5.99,5.1)); #53181=CARTESIAN_POINT('',(5.55,5.99,14.1)); #53182=CARTESIAN_POINT('Origin',(0.,5.89,14.6)); #53183=CARTESIAN_POINT('',(5.35,5.79,15.1)); #53184=CARTESIAN_POINT('',(5.35,5.79,15.1)); #53185=CARTESIAN_POINT('',(5.35,5.79,15.1)); #53186=CARTESIAN_POINT('Origin',(0.,0.,15.1)); #53187=CARTESIAN_POINT('',(5.35,4.35,15.1)); #53188=CARTESIAN_POINT('Origin',(5.45,5.07,14.6)); #53189=CARTESIAN_POINT('',(5.55,4.15,14.1)); #53190=CARTESIAN_POINT('Origin',(5.55,4.15,5.1)); #53191=CARTESIAN_POINT('Origin',(4.14,3.38,12.75)); #53192=CARTESIAN_POINT('',(4.14,3.38,5.1)); #53193=CARTESIAN_POINT('',(4.14,5.47,12.75)); #53194=CARTESIAN_POINT('Origin',(4.14,5.47,12.75)); #53195=CARTESIAN_POINT('',(2.86,5.47,12.75)); #53196=CARTESIAN_POINT('Origin',(2.86,5.47,12.75)); #53197=CARTESIAN_POINT('',(2.86,3.38,5.1)); #53198=CARTESIAN_POINT('Origin',(2.86,3.38,12.75)); #53199=CARTESIAN_POINT('Origin',(1.64,3.38,12.75)); #53200=CARTESIAN_POINT('',(1.64,3.38,5.1)); #53201=CARTESIAN_POINT('',(1.64,5.47,12.75)); #53202=CARTESIAN_POINT('Origin',(1.64,5.47,12.75)); #53203=CARTESIAN_POINT('',(0.36,5.47,12.75)); #53204=CARTESIAN_POINT('Origin',(0.36,5.47,12.75)); #53205=CARTESIAN_POINT('',(0.36,3.38,5.1)); #53206=CARTESIAN_POINT('Origin',(0.36,3.38,12.75)); #53207=CARTESIAN_POINT('Origin',(-0.36,3.38,12.75)); #53208=CARTESIAN_POINT('',(-0.36,3.38,5.1)); #53209=CARTESIAN_POINT('',(-0.36,5.47,12.75)); #53210=CARTESIAN_POINT('Origin',(-0.36,5.47,12.75)); #53211=CARTESIAN_POINT('',(-1.64,5.47,12.75)); #53212=CARTESIAN_POINT('Origin',(-1.64,5.47,12.75)); #53213=CARTESIAN_POINT('',(-1.64,3.38,5.1)); #53214=CARTESIAN_POINT('Origin',(-1.64,3.38,12.75)); #53215=CARTESIAN_POINT('Origin',(-2.86,3.38,12.75)); #53216=CARTESIAN_POINT('',(-2.86,3.38,5.1)); #53217=CARTESIAN_POINT('',(-2.86,5.47,12.75)); #53218=CARTESIAN_POINT('Origin',(-2.86,5.47,12.75)); #53219=CARTESIAN_POINT('',(-4.14,5.47,12.75)); #53220=CARTESIAN_POINT('Origin',(-4.14,5.47,12.75)); #53221=CARTESIAN_POINT('',(-4.14,3.38,5.1)); #53222=CARTESIAN_POINT('Origin',(-4.14,3.38,12.75)); #53223=CARTESIAN_POINT('Origin',(3.,4.65,12.25)); #53224=CARTESIAN_POINT('',(4.,4.65,12.25)); #53225=CARTESIAN_POINT('',(4.,4.65,12.25)); #53226=CARTESIAN_POINT('',(3.,4.65,12.25)); #53227=CARTESIAN_POINT('Origin',(3.,4.05,12.25)); #53228=CARTESIAN_POINT('',(4.,4.474264068712,11.82573593129)); #53229=CARTESIAN_POINT('Origin',(4.,4.05,12.25)); #53230=CARTESIAN_POINT('',(3.,4.474264068712,11.82573593129)); #53231=CARTESIAN_POINT('Origin',(3.,3.837867965644,11.18933982822)); #53232=CARTESIAN_POINT('',(4.,3.837867965644,11.18933982822)); #53233=CARTESIAN_POINT('',(4.,3.837867965644,11.18933982822)); #53234=CARTESIAN_POINT('',(3.,3.837867965644,11.18933982822)); #53235=CARTESIAN_POINT('Origin',(3.,4.05,10.97720779386)); #53236=CARTESIAN_POINT('',(4.,3.804254386713,10.80513486296)); #53237=CARTESIAN_POINT('Origin',(4.,4.05,10.97720779386)); #53238=CARTESIAN_POINT('',(3.,3.804254386713,10.80513486296)); #53239=CARTESIAN_POINT('Origin',(3.,5.261491226573,8.723984974761)); #53240=CARTESIAN_POINT('',(4.,5.261491226573,8.723984974761)); #53241=CARTESIAN_POINT('',(4.,5.261491226573,8.723984974761)); #53242=CARTESIAN_POINT('',(3.,5.261491226573,8.723984974761)); #53243=CARTESIAN_POINT('Origin',(3.,4.77,8.379839112951)); #53244=CARTESIAN_POINT('',(4.,5.37,8.379839112951)); #53245=CARTESIAN_POINT('Origin',(4.,4.77,8.379839112951)); #53246=CARTESIAN_POINT('',(3.,5.37,8.379839112951)); #53247=CARTESIAN_POINT('Origin',(3.,5.37,2.72)); #53248=CARTESIAN_POINT('',(4.,5.37,2.72)); #53249=CARTESIAN_POINT('',(4.,5.37,2.72)); #53250=CARTESIAN_POINT('',(3.,5.37,2.72)); #53251=CARTESIAN_POINT('Origin',(3.,4.77,2.72)); #53252=CARTESIAN_POINT('',(4.,4.77,2.12)); #53253=CARTESIAN_POINT('Origin',(4.,4.77,2.72)); #53254=CARTESIAN_POINT('',(3.,4.77,2.12)); #53255=CARTESIAN_POINT('Origin',(3.,3.25,2.12)); #53256=CARTESIAN_POINT('',(4.,3.25,2.12)); #53257=CARTESIAN_POINT('',(3.825,-2.,2.12)); #53258=CARTESIAN_POINT('',(3.825,-2.,2.12)); #53259=CARTESIAN_POINT('',(3.65,-2.35,2.12)); #53260=CARTESIAN_POINT('',(3.65,-2.35,2.12)); #53261=CARTESIAN_POINT('',(3.65,-2.6,2.12)); #53262=CARTESIAN_POINT('',(3.65,-2.6,2.12)); #53263=CARTESIAN_POINT('',(3.35,-2.6,2.12)); #53264=CARTESIAN_POINT('',(3.35,-2.6,2.12)); #53265=CARTESIAN_POINT('',(3.35,-2.6,2.12)); #53266=CARTESIAN_POINT('Origin',(3.35,-2.35,2.12)); #53267=CARTESIAN_POINT('',(3.35,-2.6,2.42)); #53268=CARTESIAN_POINT('Origin',(3.175,-2.6,2.42)); #53269=CARTESIAN_POINT('',(3.65,-2.6,2.42)); #53270=CARTESIAN_POINT('Origin',(3.65,-2.6,2.12)); #53271=CARTESIAN_POINT('',(3.65,-2.35,2.12)); #53272=CARTESIAN_POINT('Origin',(3.65,-2.35,2.12)); #53273=CARTESIAN_POINT('',(3.825,-2.,2.42)); #53274=CARTESIAN_POINT('Origin',(3.825,0.,0.)); #53275=CARTESIAN_POINT('Origin',(4.,0.,0.)); #53276=CARTESIAN_POINT('',(4.,4.35,12.25)); #53277=CARTESIAN_POINT('',(4.,4.35,12.75)); #53278=CARTESIAN_POINT('',(4.,4.262132034356,12.03786796564)); #53279=CARTESIAN_POINT('Origin',(4.,4.05,12.25)); #53280=CARTESIAN_POINT('',(4.,3.625735931288,11.40147186258)); #53281=CARTESIAN_POINT('',(4.,4.262132034356,12.03786796564)); #53282=CARTESIAN_POINT('',(4.,3.558508773427,10.63306193205)); #53283=CARTESIAN_POINT('Origin',(4.,4.05,10.97720779386)); #53284=CARTESIAN_POINT('',(4.,5.015745613287,8.551912043856)); #53285=CARTESIAN_POINT('',(4.,3.558508773427,10.63306193205)); #53286=CARTESIAN_POINT('',(4.,5.07,8.379839112951)); #53287=CARTESIAN_POINT('Origin',(4.,4.77,8.379839112951)); #53288=CARTESIAN_POINT('',(4.,5.07,2.72)); #53289=CARTESIAN_POINT('',(4.,5.07,8.379839112951)); #53290=CARTESIAN_POINT('Origin',(4.,4.77,2.72)); #53291=CARTESIAN_POINT('Origin',(3.,4.77,2.72)); #53292=CARTESIAN_POINT('',(3.,5.07,2.72)); #53293=CARTESIAN_POINT('Origin',(3.,5.07,8.379839112951)); #53294=CARTESIAN_POINT('',(3.,5.07,8.379839112951)); #53295=CARTESIAN_POINT('Origin',(3.,4.77,8.379839112951)); #53296=CARTESIAN_POINT('',(3.,5.015745613287,8.551912043856)); #53297=CARTESIAN_POINT('Origin',(3.,3.558508773427,10.63306193205)); #53298=CARTESIAN_POINT('',(3.,3.558508773427,10.63306193205)); #53299=CARTESIAN_POINT('Origin',(3.,4.05,10.97720779386)); #53300=CARTESIAN_POINT('',(3.,3.625735931288,11.40147186258)); #53301=CARTESIAN_POINT('Origin',(3.,4.262132034356,12.03786796564)); #53302=CARTESIAN_POINT('',(3.,4.262132034356,12.03786796564)); #53303=CARTESIAN_POINT('Origin',(3.,4.05,12.25)); #53304=CARTESIAN_POINT('',(3.,4.35,12.25)); #53305=CARTESIAN_POINT('Origin',(3.,4.35,12.75)); #53306=CARTESIAN_POINT('Origin',(0.5,0.,0.)); #53307=CARTESIAN_POINT('',(0.5,4.65,12.25)); #53308=CARTESIAN_POINT('',(0.5,4.65,12.25)); #53309=CARTESIAN_POINT('',(0.5,4.474264068712,11.82573593129)); #53310=CARTESIAN_POINT('Origin',(0.5,4.05,12.25)); #53311=CARTESIAN_POINT('',(0.5,3.837867965644,11.18933982822)); #53312=CARTESIAN_POINT('',(0.5,3.837867965644,11.18933982822)); #53313=CARTESIAN_POINT('',(0.5,3.804254386713,10.80513486296)); #53314=CARTESIAN_POINT('Origin',(0.5,4.05,10.97720779386)); #53315=CARTESIAN_POINT('',(0.5,5.261491226573,8.723984974761)); #53316=CARTESIAN_POINT('',(0.5,5.261491226573,8.723984974761)); #53317=CARTESIAN_POINT('',(0.5,5.37,8.379839112951)); #53318=CARTESIAN_POINT('Origin',(0.5,4.77,8.379839112951)); #53319=CARTESIAN_POINT('',(0.5,5.37,2.72)); #53320=CARTESIAN_POINT('',(0.5,5.37,2.72)); #53321=CARTESIAN_POINT('',(0.5,4.77,2.12)); #53322=CARTESIAN_POINT('Origin',(0.5,4.77,2.72)); #53323=CARTESIAN_POINT('',(0.5,3.25,2.12)); #53324=CARTESIAN_POINT('',(0.5,4.77,2.42)); #53325=CARTESIAN_POINT('',(0.5,4.77,2.42)); #53326=CARTESIAN_POINT('',(0.5,5.07,2.72)); #53327=CARTESIAN_POINT('Origin',(0.5,4.77,2.72)); #53328=CARTESIAN_POINT('',(0.5,5.07,8.379839112951)); #53329=CARTESIAN_POINT('',(0.5,5.07,8.379839112951)); #53330=CARTESIAN_POINT('',(0.5,5.015745613287,8.551912043856)); #53331=CARTESIAN_POINT('Origin',(0.5,4.77,8.379839112951)); #53332=CARTESIAN_POINT('',(0.5,3.558508773427,10.63306193205)); #53333=CARTESIAN_POINT('',(0.5,3.558508773427,10.63306193205)); #53334=CARTESIAN_POINT('',(0.5,3.625735931288,11.40147186258)); #53335=CARTESIAN_POINT('Origin',(0.5,4.05,10.97720779386)); #53336=CARTESIAN_POINT('',(0.5,4.262132034356,12.03786796564)); #53337=CARTESIAN_POINT('',(0.5,4.262132034356,12.03786796564)); #53338=CARTESIAN_POINT('',(0.5,4.35,12.25)); #53339=CARTESIAN_POINT('Origin',(0.5,4.05,12.25)); #53340=CARTESIAN_POINT('',(0.5,4.35,12.75)); #53341=CARTESIAN_POINT('Origin',(0.5,4.35,12.75)); #53342=CARTESIAN_POINT('',(1.5,4.35,12.25)); #53343=CARTESIAN_POINT('',(0.5,4.35,12.25)); #53344=CARTESIAN_POINT('',(1.5,4.35,12.75)); #53345=CARTESIAN_POINT('Origin',(1.5,0.,0.)); #53346=CARTESIAN_POINT('',(1.5,4.262132034356,12.03786796564)); #53347=CARTESIAN_POINT('Origin',(1.5,4.05,12.25)); #53348=CARTESIAN_POINT('',(1.5,3.625735931288,11.40147186258)); #53349=CARTESIAN_POINT('',(1.5,4.262132034356,12.03786796564)); #53350=CARTESIAN_POINT('',(1.5,3.558508773427,10.63306193205)); #53351=CARTESIAN_POINT('Origin',(1.5,4.05,10.97720779386)); #53352=CARTESIAN_POINT('',(1.5,5.015745613287,8.551912043856)); #53353=CARTESIAN_POINT('',(1.5,3.558508773427,10.63306193205)); #53354=CARTESIAN_POINT('',(1.5,5.07,8.379839112951)); #53355=CARTESIAN_POINT('Origin',(1.5,4.77,8.379839112951)); #53356=CARTESIAN_POINT('',(1.5,5.07,2.72)); #53357=CARTESIAN_POINT('',(1.5,5.07,8.379839112951)); #53358=CARTESIAN_POINT('',(1.5,4.77,2.42)); #53359=CARTESIAN_POINT('Origin',(1.5,4.77,2.72)); #53360=CARTESIAN_POINT('',(1.5,4.77,2.42)); #53361=CARTESIAN_POINT('',(1.5,4.77,2.12)); #53362=CARTESIAN_POINT('',(1.5,3.25,2.12)); #53363=CARTESIAN_POINT('',(1.5,5.37,2.72)); #53364=CARTESIAN_POINT('Origin',(1.5,4.77,2.72)); #53365=CARTESIAN_POINT('',(1.5,5.37,8.379839112951)); #53366=CARTESIAN_POINT('',(1.5,5.37,2.72)); #53367=CARTESIAN_POINT('',(1.5,5.261491226573,8.723984974761)); #53368=CARTESIAN_POINT('Origin',(1.5,4.77,8.379839112951)); #53369=CARTESIAN_POINT('',(1.5,3.804254386713,10.80513486296)); #53370=CARTESIAN_POINT('',(1.5,5.261491226573,8.723984974761)); #53371=CARTESIAN_POINT('',(1.5,3.837867965644,11.18933982822)); #53372=CARTESIAN_POINT('Origin',(1.5,4.05,10.97720779386)); #53373=CARTESIAN_POINT('',(1.5,4.474264068712,11.82573593129)); #53374=CARTESIAN_POINT('',(1.5,3.837867965644,11.18933982822)); #53375=CARTESIAN_POINT('',(1.5,4.65,12.25)); #53376=CARTESIAN_POINT('Origin',(1.5,4.05,12.25)); #53377=CARTESIAN_POINT('',(1.5,4.65,12.25)); #53378=CARTESIAN_POINT('Origin',(0.5,4.65,12.25)); #53379=CARTESIAN_POINT('',(0.5,4.65,12.25)); #53380=CARTESIAN_POINT('Origin',(0.5,4.05,12.25)); #53381=CARTESIAN_POINT('',(0.5,4.474264068712,11.82573593129)); #53382=CARTESIAN_POINT('Origin',(0.5,3.837867965644,11.18933982822)); #53383=CARTESIAN_POINT('',(0.5,3.837867965644,11.18933982822)); #53384=CARTESIAN_POINT('Origin',(0.5,4.05,10.97720779386)); #53385=CARTESIAN_POINT('',(0.5,3.804254386713,10.80513486296)); #53386=CARTESIAN_POINT('Origin',(0.5,5.261491226573,8.723984974761)); #53387=CARTESIAN_POINT('',(0.5,5.261491226573,8.723984974761)); #53388=CARTESIAN_POINT('Origin',(0.5,4.77,8.379839112951)); #53389=CARTESIAN_POINT('',(0.5,5.37,8.379839112951)); #53390=CARTESIAN_POINT('Origin',(0.5,5.37,2.72)); #53391=CARTESIAN_POINT('',(0.5,5.37,2.72)); #53392=CARTESIAN_POINT('Origin',(0.5,4.77,2.72)); #53393=CARTESIAN_POINT('',(0.5,4.77,2.12)); #53394=CARTESIAN_POINT('Origin',(0.5,3.25,2.12)); #53395=CARTESIAN_POINT('',(0.675,-2.,2.12)); #53396=CARTESIAN_POINT('',(0.675,3.25,2.12)); #53397=CARTESIAN_POINT('',(0.675,-2.,2.12)); #53398=CARTESIAN_POINT('',(0.65,3.25,2.12)); #53399=CARTESIAN_POINT('',(1.325,3.25,2.12)); #53400=CARTESIAN_POINT('',(1.325,3.25,2.12)); #53401=CARTESIAN_POINT('',(1.325,-2.,2.12)); #53402=CARTESIAN_POINT('',(1.325,-2.,2.12)); #53403=CARTESIAN_POINT('',(1.15,-2.35,2.12)); #53404=CARTESIAN_POINT('',(1.15,-2.35,2.12)); #53405=CARTESIAN_POINT('',(1.15,-2.6,2.12)); #53406=CARTESIAN_POINT('',(1.15,-2.6,2.12)); #53407=CARTESIAN_POINT('',(0.85,-2.6,2.12)); #53408=CARTESIAN_POINT('',(0.85,-2.6,2.12)); #53409=CARTESIAN_POINT('',(0.85,-2.35,2.12)); #53410=CARTESIAN_POINT('',(0.85,-2.6,2.12)); #53411=CARTESIAN_POINT('',(0.675,-2.,2.12)); #53412=CARTESIAN_POINT('Origin',(0.675,-2.,2.12)); #53413=CARTESIAN_POINT('',(0.675,-2.,2.42)); #53414=CARTESIAN_POINT('',(0.85,-2.35,2.42)); #53415=CARTESIAN_POINT('',(0.675,-2.,2.42)); #53416=CARTESIAN_POINT('',(0.675,-2.,2.42)); #53417=CARTESIAN_POINT('',(0.85,-2.35,2.12)); #53418=CARTESIAN_POINT('Origin',(0.5,4.77,2.42)); #53419=CARTESIAN_POINT('',(0.85,-2.6,2.42)); #53420=CARTESIAN_POINT('',(0.85,-2.6,2.42)); #53421=CARTESIAN_POINT('',(1.15,-2.6,2.42)); #53422=CARTESIAN_POINT('',(0.85,-2.6,2.42)); #53423=CARTESIAN_POINT('',(1.15,-2.35,2.42)); #53424=CARTESIAN_POINT('',(1.15,-2.6,2.42)); #53425=CARTESIAN_POINT('',(1.325,-2.,2.42)); #53426=CARTESIAN_POINT('',(1.15,-2.35,2.42)); #53427=CARTESIAN_POINT('',(1.325,3.25,2.42)); #53428=CARTESIAN_POINT('',(1.325,3.25,2.42)); #53429=CARTESIAN_POINT('',(1.325,3.25,2.42)); #53430=CARTESIAN_POINT('',(0.5,4.77,2.42)); #53431=CARTESIAN_POINT('',(0.675,3.25,2.42)); #53432=CARTESIAN_POINT('',(0.65,3.25,2.42)); #53433=CARTESIAN_POINT('',(0.675,3.25,2.42)); #53434=CARTESIAN_POINT('Origin',(0.675,0.,0.)); #53435=CARTESIAN_POINT('',(0.675,3.25,2.42)); #53436=CARTESIAN_POINT('Origin',(0.5,3.25,2.42)); #53437=CARTESIAN_POINT('',(0.65,3.25,2.42)); #53438=CARTESIAN_POINT('Origin',(0.5,3.25,2.42)); #53439=CARTESIAN_POINT('',(1.325,3.25,2.42)); #53440=CARTESIAN_POINT('',(1.35,3.25,2.42)); #53441=CARTESIAN_POINT('Origin',(0.65,0.4,2.5)); #53442=CARTESIAN_POINT('',(0.65,0.4,2.5)); #53443=CARTESIAN_POINT('',(0.65,3.25,0.75)); #53444=CARTESIAN_POINT('Origin',(0.525,1.825,0.625)); #53445=CARTESIAN_POINT('',(0.4,3.25,0.5)); #53446=CARTESIAN_POINT('Origin',(0.65,0.4,0.5)); #53447=CARTESIAN_POINT('',(-0.4,3.25,0.5)); #53448=CARTESIAN_POINT('Origin',(-0.525,1.825,0.625)); #53449=CARTESIAN_POINT('',(-0.65,3.25,0.75)); #53450=CARTESIAN_POINT('Origin',(-0.65,0.4,0.5)); #53451=CARTESIAN_POINT('',(-0.65,3.25,2.42)); #53452=CARTESIAN_POINT('',(-0.65,0.4,2.5)); #53453=CARTESIAN_POINT('Origin',(-1.5,3.25,2.42)); #53454=CARTESIAN_POINT('',(-1.325,3.25,2.42)); #53455=CARTESIAN_POINT('',(-1.35,3.25,2.42)); #53456=CARTESIAN_POINT('',(-1.35,3.25,2.42)); #53457=CARTESIAN_POINT('',(-1.325,3.25,2.12)); #53458=CARTESIAN_POINT('',(-1.35,3.25,2.12)); #53459=CARTESIAN_POINT('',(-1.325,3.25,2.42)); #53460=CARTESIAN_POINT('Origin',(-1.5,3.25,2.42)); #53461=CARTESIAN_POINT('',(-0.675,3.25,2.12)); #53462=CARTESIAN_POINT('',(-0.675,3.25,2.12)); #53463=CARTESIAN_POINT('',(-0.675,3.25,2.42)); #53464=CARTESIAN_POINT('',(-0.675,3.25,2.42)); #53465=CARTESIAN_POINT('',(-0.675,3.25,2.42)); #53466=CARTESIAN_POINT('Origin',(-1.325,0.,0.)); #53467=CARTESIAN_POINT('',(-1.325,-2.,2.42)); #53468=CARTESIAN_POINT('',(-1.325,-2.,2.12)); #53469=CARTESIAN_POINT('',(-1.325,-2.,2.42)); #53470=CARTESIAN_POINT('',(-1.325,3.25,2.42)); #53471=CARTESIAN_POINT('',(-1.325,-2.,2.12)); #53472=CARTESIAN_POINT('Origin',(-1.325,-2.,2.12)); #53473=CARTESIAN_POINT('',(-1.15,-2.35,2.42)); #53474=CARTESIAN_POINT('',(-1.325,-2.,2.42)); #53475=CARTESIAN_POINT('',(-1.15,-2.35,2.12)); #53476=CARTESIAN_POINT('',(-1.325,-2.,2.12)); #53477=CARTESIAN_POINT('',(-1.15,-2.35,2.12)); #53478=CARTESIAN_POINT('Origin',(-1.5,4.77,2.42)); #53479=CARTESIAN_POINT('',(-1.15,-2.6,2.42)); #53480=CARTESIAN_POINT('',(-1.15,-2.6,2.42)); #53481=CARTESIAN_POINT('',(-0.85,-2.6,2.42)); #53482=CARTESIAN_POINT('',(-1.15,-2.6,2.42)); #53483=CARTESIAN_POINT('',(-0.85,-2.35,2.42)); #53484=CARTESIAN_POINT('',(-0.85,-2.6,2.42)); #53485=CARTESIAN_POINT('',(-0.675,-2.,2.42)); #53486=CARTESIAN_POINT('',(-0.85,-2.35,2.42)); #53487=CARTESIAN_POINT('',(-0.675,3.25,2.42)); #53488=CARTESIAN_POINT('',(-0.5,4.77,2.42)); #53489=CARTESIAN_POINT('',(-0.5,4.77,2.42)); #53490=CARTESIAN_POINT('',(-1.5,4.77,2.42)); #53491=CARTESIAN_POINT('',(-1.5,4.77,2.42)); #53492=CARTESIAN_POINT('',(-1.5,4.77,2.42)); #53493=CARTESIAN_POINT('Origin',(-1.5,0.,0.)); #53494=CARTESIAN_POINT('',(-1.5,4.65,12.25)); #53495=CARTESIAN_POINT('',(-1.5,4.65,12.25)); #53496=CARTESIAN_POINT('',(-1.5,4.474264068712,11.82573593129)); #53497=CARTESIAN_POINT('Origin',(-1.5,4.05,12.25)); #53498=CARTESIAN_POINT('',(-1.5,3.837867965644,11.18933982822)); #53499=CARTESIAN_POINT('',(-1.5,3.837867965644,11.18933982822)); #53500=CARTESIAN_POINT('',(-1.5,3.804254386713,10.80513486296)); #53501=CARTESIAN_POINT('Origin',(-1.5,4.05,10.97720779386)); #53502=CARTESIAN_POINT('',(-1.5,5.261491226573,8.723984974761)); #53503=CARTESIAN_POINT('',(-1.5,5.261491226573,8.723984974761)); #53504=CARTESIAN_POINT('',(-1.5,5.37,8.379839112951)); #53505=CARTESIAN_POINT('Origin',(-1.5,4.77,8.379839112951)); #53506=CARTESIAN_POINT('',(-1.5,5.37,2.72)); #53507=CARTESIAN_POINT('',(-1.5,5.37,2.72)); #53508=CARTESIAN_POINT('',(-1.5,4.77,2.12)); #53509=CARTESIAN_POINT('Origin',(-1.5,4.77,2.72)); #53510=CARTESIAN_POINT('',(-1.5,3.25,2.12)); #53511=CARTESIAN_POINT('',(-1.5,5.07,2.72)); #53512=CARTESIAN_POINT('Origin',(-1.5,4.77,2.72)); #53513=CARTESIAN_POINT('',(-1.5,5.07,8.379839112951)); #53514=CARTESIAN_POINT('',(-1.5,5.07,8.379839112951)); #53515=CARTESIAN_POINT('',(-1.5,5.015745613287,8.551912043856)); #53516=CARTESIAN_POINT('Origin',(-1.5,4.77,8.379839112951)); #53517=CARTESIAN_POINT('',(-1.5,3.558508773427,10.63306193205)); #53518=CARTESIAN_POINT('',(-1.5,3.558508773427,10.63306193205)); #53519=CARTESIAN_POINT('',(-1.5,3.625735931288,11.40147186258)); #53520=CARTESIAN_POINT('Origin',(-1.5,4.05,10.97720779386)); #53521=CARTESIAN_POINT('',(-1.5,4.262132034356,12.03786796564)); #53522=CARTESIAN_POINT('',(-1.5,4.262132034356,12.03786796564)); #53523=CARTESIAN_POINT('',(-1.5,4.35,12.25)); #53524=CARTESIAN_POINT('Origin',(-1.5,4.05,12.25)); #53525=CARTESIAN_POINT('',(-1.5,4.35,12.75)); #53526=CARTESIAN_POINT('Origin',(-1.5,4.35,12.75)); #53527=CARTESIAN_POINT('',(-0.5,4.35,12.25)); #53528=CARTESIAN_POINT('',(-1.5,4.35,12.25)); #53529=CARTESIAN_POINT('',(-0.5,4.35,12.75)); #53530=CARTESIAN_POINT('Origin',(-0.5,0.,0.)); #53531=CARTESIAN_POINT('',(-0.5,4.262132034356,12.03786796564)); #53532=CARTESIAN_POINT('Origin',(-0.5,4.05,12.25)); #53533=CARTESIAN_POINT('',(-0.5,3.625735931288,11.40147186258)); #53534=CARTESIAN_POINT('',(-0.5,4.262132034356,12.03786796564)); #53535=CARTESIAN_POINT('',(-0.5,3.558508773427,10.63306193205)); #53536=CARTESIAN_POINT('Origin',(-0.5,4.05,10.97720779386)); #53537=CARTESIAN_POINT('',(-0.5,5.015745613287,8.551912043856)); #53538=CARTESIAN_POINT('',(-0.5,3.558508773427,10.63306193205)); #53539=CARTESIAN_POINT('',(-0.5,5.07,8.379839112951)); #53540=CARTESIAN_POINT('Origin',(-0.5,4.77,8.379839112951)); #53541=CARTESIAN_POINT('',(-0.5,5.07,2.72)); #53542=CARTESIAN_POINT('',(-0.5,5.07,8.379839112951)); #53543=CARTESIAN_POINT('Origin',(-0.5,4.77,2.72)); #53544=CARTESIAN_POINT('',(-0.5,4.77,2.12)); #53545=CARTESIAN_POINT('',(-0.5,3.25,2.12)); #53546=CARTESIAN_POINT('',(-0.5,5.37,2.72)); #53547=CARTESIAN_POINT('Origin',(-0.5,4.77,2.72)); #53548=CARTESIAN_POINT('',(-0.5,5.37,8.379839112951)); #53549=CARTESIAN_POINT('',(-0.5,5.37,2.72)); #53550=CARTESIAN_POINT('',(-0.5,5.261491226573,8.723984974761)); #53551=CARTESIAN_POINT('Origin',(-0.5,4.77,8.379839112951)); #53552=CARTESIAN_POINT('',(-0.5,3.804254386713,10.80513486296)); #53553=CARTESIAN_POINT('',(-0.5,5.261491226573,8.723984974761)); #53554=CARTESIAN_POINT('',(-0.5,3.837867965644,11.18933982822)); #53555=CARTESIAN_POINT('Origin',(-0.5,4.05,10.97720779386)); #53556=CARTESIAN_POINT('',(-0.5,4.474264068712,11.82573593129)); #53557=CARTESIAN_POINT('',(-0.5,3.837867965644,11.18933982822)); #53558=CARTESIAN_POINT('',(-0.5,4.65,12.25)); #53559=CARTESIAN_POINT('Origin',(-0.5,4.05,12.25)); #53560=CARTESIAN_POINT('',(-0.5,4.65,12.25)); #53561=CARTESIAN_POINT('Origin',(-1.5,4.65,12.25)); #53562=CARTESIAN_POINT('',(-1.5,4.65,12.25)); #53563=CARTESIAN_POINT('Origin',(-1.5,4.05,12.25)); #53564=CARTESIAN_POINT('',(-1.5,4.474264068712,11.82573593129)); #53565=CARTESIAN_POINT('Origin',(-1.5,3.837867965644,11.18933982822)); #53566=CARTESIAN_POINT('',(-1.5,3.837867965644,11.18933982822)); #53567=CARTESIAN_POINT('Origin',(-1.5,4.05,10.97720779386)); #53568=CARTESIAN_POINT('',(-1.5,3.804254386713,10.80513486296)); #53569=CARTESIAN_POINT('Origin',(-1.5,5.261491226573,8.723984974761)); #53570=CARTESIAN_POINT('',(-1.5,5.261491226573,8.723984974761)); #53571=CARTESIAN_POINT('Origin',(-1.5,4.77,8.379839112951)); #53572=CARTESIAN_POINT('',(-1.5,5.37,8.379839112951)); #53573=CARTESIAN_POINT('Origin',(-1.5,5.37,2.72)); #53574=CARTESIAN_POINT('',(-1.5,5.37,2.72)); #53575=CARTESIAN_POINT('Origin',(-1.5,4.77,2.72)); #53576=CARTESIAN_POINT('',(-1.5,4.77,2.12)); #53577=CARTESIAN_POINT('Origin',(-1.5,3.25,2.12)); #53578=CARTESIAN_POINT('',(-0.675,-2.,2.12)); #53579=CARTESIAN_POINT('',(-0.675,-2.,2.12)); #53580=CARTESIAN_POINT('',(-0.85,-2.35,2.12)); #53581=CARTESIAN_POINT('',(-0.85,-2.35,2.12)); #53582=CARTESIAN_POINT('',(-0.85,-2.6,2.12)); #53583=CARTESIAN_POINT('',(-0.85,-2.6,2.12)); #53584=CARTESIAN_POINT('',(-1.15,-2.6,2.12)); #53585=CARTESIAN_POINT('',(-1.15,-2.6,2.12)); #53586=CARTESIAN_POINT('',(-1.15,-2.6,2.12)); #53587=CARTESIAN_POINT('Origin',(-1.15,-2.35,2.12)); #53588=CARTESIAN_POINT('',(-1.15,-2.6,2.42)); #53589=CARTESIAN_POINT('Origin',(-1.325,-2.6,2.42)); #53590=CARTESIAN_POINT('',(-0.85,-2.6,2.42)); #53591=CARTESIAN_POINT('Origin',(-0.85,-2.6,2.12)); #53592=CARTESIAN_POINT('',(-0.85,-2.35,2.12)); #53593=CARTESIAN_POINT('Origin',(-0.85,-2.35,2.12)); #53594=CARTESIAN_POINT('',(-0.675,-2.,2.42)); #53595=CARTESIAN_POINT('Origin',(-0.675,0.,0.)); #53596=CARTESIAN_POINT('Origin',(-1.5,4.77,2.72)); #53597=CARTESIAN_POINT('',(-1.5,5.07,2.72)); #53598=CARTESIAN_POINT('Origin',(-1.5,5.07,8.379839112951)); #53599=CARTESIAN_POINT('',(-1.5,5.07,8.379839112951)); #53600=CARTESIAN_POINT('Origin',(-1.5,4.77,8.379839112951)); #53601=CARTESIAN_POINT('',(-1.5,5.015745613287,8.551912043856)); #53602=CARTESIAN_POINT('Origin',(-1.5,3.558508773427,10.63306193205)); #53603=CARTESIAN_POINT('',(-1.5,3.558508773427,10.63306193205)); #53604=CARTESIAN_POINT('Origin',(-1.5,4.05,10.97720779386)); #53605=CARTESIAN_POINT('',(-1.5,3.625735931288,11.40147186258)); #53606=CARTESIAN_POINT('Origin',(-1.5,4.262132034356,12.03786796564)); #53607=CARTESIAN_POINT('',(-1.5,4.262132034356,12.03786796564)); #53608=CARTESIAN_POINT('Origin',(-1.5,4.05,12.25)); #53609=CARTESIAN_POINT('Origin',(-1.35,0.4,2.5)); #53610=CARTESIAN_POINT('',(-1.35,0.4,2.5)); #53611=CARTESIAN_POINT('',(-1.35,3.25,0.75)); #53612=CARTESIAN_POINT('Origin',(-1.475,1.825,0.625)); #53613=CARTESIAN_POINT('',(-1.6,3.25,0.5)); #53614=CARTESIAN_POINT('Origin',(-1.35,0.4,0.5)); #53615=CARTESIAN_POINT('',(-2.9,3.25,0.5)); #53616=CARTESIAN_POINT('Origin',(-3.025,1.825,0.625)); #53617=CARTESIAN_POINT('',(-3.15,3.25,0.75)); #53618=CARTESIAN_POINT('Origin',(-3.15,0.4,0.5)); #53619=CARTESIAN_POINT('',(-3.15,3.25,2.42)); #53620=CARTESIAN_POINT('',(-3.15,0.4,2.5)); #53621=CARTESIAN_POINT('Origin',(-4.,3.25,2.42)); #53622=CARTESIAN_POINT('',(-3.825,3.25,2.42)); #53623=CARTESIAN_POINT('',(-3.85,3.25,2.42)); #53624=CARTESIAN_POINT('',(-3.85,3.25,2.42)); #53625=CARTESIAN_POINT('',(-3.825,3.25,2.12)); #53626=CARTESIAN_POINT('',(-3.85,3.25,2.12)); #53627=CARTESIAN_POINT('',(-3.825,3.25,2.42)); #53628=CARTESIAN_POINT('Origin',(-4.,3.25,2.42)); #53629=CARTESIAN_POINT('',(-3.175,3.25,2.12)); #53630=CARTESIAN_POINT('',(-3.175,3.25,2.12)); #53631=CARTESIAN_POINT('',(-3.175,3.25,2.42)); #53632=CARTESIAN_POINT('',(-3.175,3.25,2.42)); #53633=CARTESIAN_POINT('',(-3.175,3.25,2.42)); #53634=CARTESIAN_POINT('Origin',(-3.825,0.,0.)); #53635=CARTESIAN_POINT('',(-3.825,-2.,2.42)); #53636=CARTESIAN_POINT('',(-3.825,-2.,2.12)); #53637=CARTESIAN_POINT('',(-3.825,-2.,2.42)); #53638=CARTESIAN_POINT('',(-3.825,3.25,2.42)); #53639=CARTESIAN_POINT('',(-3.825,-2.,2.12)); #53640=CARTESIAN_POINT('Origin',(-3.825,-2.,2.12)); #53641=CARTESIAN_POINT('',(-3.65,-2.35,2.42)); #53642=CARTESIAN_POINT('',(-3.825,-2.,2.42)); #53643=CARTESIAN_POINT('',(-3.65,-2.35,2.12)); #53644=CARTESIAN_POINT('',(-3.825,-2.,2.12)); #53645=CARTESIAN_POINT('',(-3.65,-2.35,2.12)); #53646=CARTESIAN_POINT('Origin',(-4.,4.77,2.42)); #53647=CARTESIAN_POINT('',(-3.65,-2.6,2.42)); #53648=CARTESIAN_POINT('',(-3.65,-2.6,2.42)); #53649=CARTESIAN_POINT('',(-3.35,-2.6,2.42)); #53650=CARTESIAN_POINT('',(-3.65,-2.6,2.42)); #53651=CARTESIAN_POINT('',(-3.35,-2.35,2.42)); #53652=CARTESIAN_POINT('',(-3.35,-2.6,2.42)); #53653=CARTESIAN_POINT('',(-3.175,-2.,2.42)); #53654=CARTESIAN_POINT('',(-3.35,-2.35,2.42)); #53655=CARTESIAN_POINT('',(-3.175,3.25,2.42)); #53656=CARTESIAN_POINT('',(-3.,4.77,2.42)); #53657=CARTESIAN_POINT('',(-3.,4.77,2.42)); #53658=CARTESIAN_POINT('',(-4.,4.77,2.42)); #53659=CARTESIAN_POINT('',(-4.,4.77,2.42)); #53660=CARTESIAN_POINT('',(-4.,4.77,2.42)); #53661=CARTESIAN_POINT('Origin',(-4.,0.,0.)); #53662=CARTESIAN_POINT('',(-4.,4.65,12.25)); #53663=CARTESIAN_POINT('',(-4.,4.65,12.25)); #53664=CARTESIAN_POINT('',(-4.,4.474264068712,11.82573593129)); #53665=CARTESIAN_POINT('Origin',(-4.,4.05,12.25)); #53666=CARTESIAN_POINT('',(-4.,3.837867965644,11.18933982822)); #53667=CARTESIAN_POINT('',(-4.,3.837867965644,11.18933982822)); #53668=CARTESIAN_POINT('',(-4.,3.804254386713,10.80513486296)); #53669=CARTESIAN_POINT('Origin',(-4.,4.05,10.97720779386)); #53670=CARTESIAN_POINT('',(-4.,5.261491226573,8.723984974761)); #53671=CARTESIAN_POINT('',(-4.,5.261491226573,8.723984974761)); #53672=CARTESIAN_POINT('',(-4.,5.37,8.379839112951)); #53673=CARTESIAN_POINT('Origin',(-4.,4.77,8.379839112951)); #53674=CARTESIAN_POINT('',(-4.,5.37,2.72)); #53675=CARTESIAN_POINT('',(-4.,5.37,2.72)); #53676=CARTESIAN_POINT('',(-4.,4.77,2.12)); #53677=CARTESIAN_POINT('Origin',(-4.,4.77,2.72)); #53678=CARTESIAN_POINT('',(-4.,3.25,2.12)); #53679=CARTESIAN_POINT('',(-4.,5.07,2.72)); #53680=CARTESIAN_POINT('Origin',(-4.,4.77,2.72)); #53681=CARTESIAN_POINT('',(-4.,5.07,8.379839112951)); #53682=CARTESIAN_POINT('',(-4.,5.07,8.379839112951)); #53683=CARTESIAN_POINT('',(-4.,5.015745613287,8.551912043856)); #53684=CARTESIAN_POINT('Origin',(-4.,4.77,8.379839112951)); #53685=CARTESIAN_POINT('',(-4.,3.558508773427,10.63306193205)); #53686=CARTESIAN_POINT('',(-4.,3.558508773427,10.63306193205)); #53687=CARTESIAN_POINT('',(-4.,3.625735931288,11.40147186258)); #53688=CARTESIAN_POINT('Origin',(-4.,4.05,10.97720779386)); #53689=CARTESIAN_POINT('',(-4.,4.262132034356,12.03786796564)); #53690=CARTESIAN_POINT('',(-4.,4.262132034356,12.03786796564)); #53691=CARTESIAN_POINT('',(-4.,4.35,12.25)); #53692=CARTESIAN_POINT('Origin',(-4.,4.05,12.25)); #53693=CARTESIAN_POINT('',(-4.,4.35,12.75)); #53694=CARTESIAN_POINT('Origin',(-4.,4.35,12.75)); #53695=CARTESIAN_POINT('',(-3.,4.35,12.25)); #53696=CARTESIAN_POINT('',(-4.,4.35,12.25)); #53697=CARTESIAN_POINT('',(-3.,4.35,12.75)); #53698=CARTESIAN_POINT('Origin',(-3.,0.,0.)); #53699=CARTESIAN_POINT('',(-3.,4.262132034356,12.03786796564)); #53700=CARTESIAN_POINT('Origin',(-3.,4.05,12.25)); #53701=CARTESIAN_POINT('',(-3.,3.625735931288,11.40147186258)); #53702=CARTESIAN_POINT('',(-3.,4.262132034356,12.03786796564)); #53703=CARTESIAN_POINT('',(-3.,3.558508773427,10.63306193205)); #53704=CARTESIAN_POINT('Origin',(-3.,4.05,10.97720779386)); #53705=CARTESIAN_POINT('',(-3.,5.015745613287,8.551912043856)); #53706=CARTESIAN_POINT('',(-3.,3.558508773427,10.63306193205)); #53707=CARTESIAN_POINT('',(-3.,5.07,8.379839112951)); #53708=CARTESIAN_POINT('Origin',(-3.,4.77,8.379839112951)); #53709=CARTESIAN_POINT('',(-3.,5.07,2.72)); #53710=CARTESIAN_POINT('',(-3.,5.07,8.379839112951)); #53711=CARTESIAN_POINT('Origin',(-3.,4.77,2.72)); #53712=CARTESIAN_POINT('',(-3.,4.77,2.12)); #53713=CARTESIAN_POINT('',(-3.,3.25,2.12)); #53714=CARTESIAN_POINT('',(-3.,5.37,2.72)); #53715=CARTESIAN_POINT('Origin',(-3.,4.77,2.72)); #53716=CARTESIAN_POINT('',(-3.,5.37,8.379839112951)); #53717=CARTESIAN_POINT('',(-3.,5.37,2.72)); #53718=CARTESIAN_POINT('',(-3.,5.261491226573,8.723984974761)); #53719=CARTESIAN_POINT('Origin',(-3.,4.77,8.379839112951)); #53720=CARTESIAN_POINT('',(-3.,3.804254386713,10.80513486296)); #53721=CARTESIAN_POINT('',(-3.,5.261491226573,8.723984974761)); #53722=CARTESIAN_POINT('',(-3.,3.837867965644,11.18933982822)); #53723=CARTESIAN_POINT('Origin',(-3.,4.05,10.97720779386)); #53724=CARTESIAN_POINT('',(-3.,4.474264068712,11.82573593129)); #53725=CARTESIAN_POINT('',(-3.,3.837867965644,11.18933982822)); #53726=CARTESIAN_POINT('',(-3.,4.65,12.25)); #53727=CARTESIAN_POINT('Origin',(-3.,4.05,12.25)); #53728=CARTESIAN_POINT('',(-3.,4.65,12.25)); #53729=CARTESIAN_POINT('Origin',(-4.,4.65,12.25)); #53730=CARTESIAN_POINT('',(-4.,4.65,12.25)); #53731=CARTESIAN_POINT('Origin',(-4.,4.05,12.25)); #53732=CARTESIAN_POINT('',(-4.,4.474264068712,11.82573593129)); #53733=CARTESIAN_POINT('Origin',(-4.,3.837867965644,11.18933982822)); #53734=CARTESIAN_POINT('',(-4.,3.837867965644,11.18933982822)); #53735=CARTESIAN_POINT('Origin',(-4.,4.05,10.97720779386)); #53736=CARTESIAN_POINT('',(-4.,3.804254386713,10.80513486296)); #53737=CARTESIAN_POINT('Origin',(-4.,5.261491226573,8.723984974761)); #53738=CARTESIAN_POINT('',(-4.,5.261491226573,8.723984974761)); #53739=CARTESIAN_POINT('Origin',(-4.,4.77,8.379839112951)); #53740=CARTESIAN_POINT('',(-4.,5.37,8.379839112951)); #53741=CARTESIAN_POINT('Origin',(-4.,5.37,2.72)); #53742=CARTESIAN_POINT('',(-4.,5.37,2.72)); #53743=CARTESIAN_POINT('Origin',(-4.,4.77,2.72)); #53744=CARTESIAN_POINT('',(-4.,4.77,2.12)); #53745=CARTESIAN_POINT('Origin',(-4.,3.25,2.12)); #53746=CARTESIAN_POINT('',(-3.175,-2.,2.12)); #53747=CARTESIAN_POINT('',(-3.175,-2.,2.12)); #53748=CARTESIAN_POINT('',(-3.35,-2.35,2.12)); #53749=CARTESIAN_POINT('',(-3.35,-2.35,2.12)); #53750=CARTESIAN_POINT('',(-3.35,-2.6,2.12)); #53751=CARTESIAN_POINT('',(-3.35,-2.6,2.12)); #53752=CARTESIAN_POINT('',(-3.65,-2.6,2.12)); #53753=CARTESIAN_POINT('',(-3.65,-2.6,2.12)); #53754=CARTESIAN_POINT('',(-3.65,-2.6,2.12)); #53755=CARTESIAN_POINT('Origin',(-3.65,-2.35,2.12)); #53756=CARTESIAN_POINT('',(-3.65,-2.6,2.42)); #53757=CARTESIAN_POINT('Origin',(-3.825,-2.6,2.42)); #53758=CARTESIAN_POINT('',(-3.35,-2.6,2.42)); #53759=CARTESIAN_POINT('Origin',(-3.35,-2.6,2.12)); #53760=CARTESIAN_POINT('',(-3.35,-2.35,2.12)); #53761=CARTESIAN_POINT('Origin',(-3.35,-2.35,2.12)); #53762=CARTESIAN_POINT('',(-3.175,-2.,2.42)); #53763=CARTESIAN_POINT('Origin',(-3.175,0.,0.)); #53764=CARTESIAN_POINT('Origin',(-4.,4.77,2.72)); #53765=CARTESIAN_POINT('',(-4.,5.07,2.72)); #53766=CARTESIAN_POINT('Origin',(-4.,5.07,8.379839112951)); #53767=CARTESIAN_POINT('',(-4.,5.07,8.379839112951)); #53768=CARTESIAN_POINT('Origin',(-4.,4.77,8.379839112951)); #53769=CARTESIAN_POINT('',(-4.,5.015745613287,8.551912043856)); #53770=CARTESIAN_POINT('Origin',(-4.,3.558508773427,10.63306193205)); #53771=CARTESIAN_POINT('',(-4.,3.558508773427,10.63306193205)); #53772=CARTESIAN_POINT('Origin',(-4.,4.05,10.97720779386)); #53773=CARTESIAN_POINT('',(-4.,3.625735931288,11.40147186258)); #53774=CARTESIAN_POINT('Origin',(-4.,4.262132034356,12.03786796564)); #53775=CARTESIAN_POINT('',(-4.,4.262132034356,12.03786796564)); #53776=CARTESIAN_POINT('Origin',(-4.,4.05,12.25)); #53777=CARTESIAN_POINT('Origin',(-3.85,0.4,2.5)); #53778=CARTESIAN_POINT('',(-3.85,0.4,2.5)); #53779=CARTESIAN_POINT('',(-3.85,3.25,0.75)); #53780=CARTESIAN_POINT('Origin',(-3.975,1.825,0.625)); #53781=CARTESIAN_POINT('',(-4.1,3.25,0.5)); #53782=CARTESIAN_POINT('Origin',(-3.85,0.4,0.5)); #53783=CARTESIAN_POINT('Origin',(-3.15,0.4,2.5)); #53784=CARTESIAN_POINT('Origin',(-0.65,0.4,2.5)); #53785=CARTESIAN_POINT('Origin',(1.35,0.4,2.5)); #53786=CARTESIAN_POINT('',(1.35,0.4,2.5)); #53787=CARTESIAN_POINT('Origin',(1.35,0.4,0.5)); #53788=CARTESIAN_POINT('',(1.35,3.25,0.75)); #53789=CARTESIAN_POINT('Origin',(1.475,1.825,0.625)); #53790=CARTESIAN_POINT('',(1.6,3.25,0.5)); #53791=CARTESIAN_POINT('Origin',(3.15,0.4,0.5)); #53792=CARTESIAN_POINT('',(2.9,3.25,0.5)); #53793=CARTESIAN_POINT('Origin',(3.025,1.825,0.625)); #53794=CARTESIAN_POINT('',(3.15,3.25,0.75)); #53795=CARTESIAN_POINT('Origin',(3.15,0.4,2.5)); #53796=CARTESIAN_POINT('',(3.15,0.4,2.5)); #53797=CARTESIAN_POINT('Origin',(3.85,0.4,2.5)); #53798=CARTESIAN_POINT('Origin',(1.325,0.,0.)); #53799=CARTESIAN_POINT('',(1.325,-2.,2.42)); #53800=CARTESIAN_POINT('Origin',(1.15,-2.35,2.12)); #53801=CARTESIAN_POINT('',(1.15,-2.35,2.12)); #53802=CARTESIAN_POINT('Origin',(1.15,-2.6,2.12)); #53803=CARTESIAN_POINT('',(1.15,-2.6,2.42)); #53804=CARTESIAN_POINT('Origin',(0.675,-2.6,2.42)); #53805=CARTESIAN_POINT('',(0.85,-2.6,2.42)); #53806=CARTESIAN_POINT('Origin',(0.85,-2.35,2.12)); #53807=CARTESIAN_POINT('Origin',(0.5,4.77,2.72)); #53808=CARTESIAN_POINT('',(0.5,5.07,2.72)); #53809=CARTESIAN_POINT('Origin',(0.5,5.07,8.379839112951)); #53810=CARTESIAN_POINT('',(0.5,5.07,8.379839112951)); #53811=CARTESIAN_POINT('Origin',(0.5,4.77,8.379839112951)); #53812=CARTESIAN_POINT('',(0.5,5.015745613287,8.551912043856)); #53813=CARTESIAN_POINT('Origin',(0.5,3.558508773427,10.63306193205)); #53814=CARTESIAN_POINT('',(0.5,3.558508773427,10.63306193205)); #53815=CARTESIAN_POINT('Origin',(0.5,4.05,10.97720779386)); #53816=CARTESIAN_POINT('',(0.5,3.625735931288,11.40147186258)); #53817=CARTESIAN_POINT('Origin',(0.5,4.262132034356,12.03786796564)); #53818=CARTESIAN_POINT('',(0.5,4.262132034356,12.03786796564)); #53819=CARTESIAN_POINT('Origin',(0.5,4.05,12.25)); #53820=CARTESIAN_POINT('Origin',(6.15,4.92,1.53)); #53821=CARTESIAN_POINT('',(6.15,4.92,1.53)); #53822=CARTESIAN_POINT('Origin',(6.15,6.57,1.53)); #53823=CARTESIAN_POINT('Origin',(-28.8577420612,2.81,0.2)); #53824=CARTESIAN_POINT('',(-6.55,3.01,0.2)); #53825=CARTESIAN_POINT('Origin',(-6.55,3.01,1.3)); #53826=CARTESIAN_POINT('',(-6.26,3.01,0.948005681864)); #53827=CARTESIAN_POINT('',(-6.55,3.01,0.948005681864)); #53828=CARTESIAN_POINT('',(-6.26,3.01,1.3)); #53829=CARTESIAN_POINT('',(-6.26,3.01,1.3)); #53830=CARTESIAN_POINT('',(-6.26,3.01,1.3)); #53831=CARTESIAN_POINT('Origin',(-6.55,4.62,1.3)); #53832=CARTESIAN_POINT('',(-6.26,4.62,1.3)); #53833=CARTESIAN_POINT('Origin',(-6.26,0.,0.)); #53834=CARTESIAN_POINT('',(-6.26,4.41,0.6)); #53835=CARTESIAN_POINT('',(-6.26,4.41,0.948005681864)); #53836=CARTESIAN_POINT('',(-6.26,4.41,0.6)); #53837=CARTESIAN_POINT('',(-6.26,4.515,1.124002840932)); #53838=CARTESIAN_POINT('Origin',(-6.26,4.61,0.948005681864)); #53839=CARTESIAN_POINT('Origin',(-6.26,4.42,1.3)); #53840=CARTESIAN_POINT('',(-6.26,3.51,0.948005681864)); #53841=CARTESIAN_POINT('Origin',(-6.26,3.26,0.948005681864)); #53842=CARTESIAN_POINT('',(-6.26,3.51,0.6)); #53843=CARTESIAN_POINT('',(-6.26,3.51,0.948005681864)); #53844=CARTESIAN_POINT('',(-6.26,3.51,0.6)); #53845=CARTESIAN_POINT('Origin',(-6.26,0.,0.6)); #53846=CARTESIAN_POINT('',(-5.75,3.51,0.6)); #53847=CARTESIAN_POINT('',(-5.55,3.71,0.6)); #53848=CARTESIAN_POINT('Origin',(-5.75,3.71,0.6)); #53849=CARTESIAN_POINT('',(-5.55,4.21,0.6)); #53850=CARTESIAN_POINT('',(-5.55,3.71,0.6)); #53851=CARTESIAN_POINT('',(-5.75,4.41,0.6)); #53852=CARTESIAN_POINT('Origin',(-5.75,4.21,0.6)); #53853=CARTESIAN_POINT('',(-5.75,4.41,0.6)); #53854=CARTESIAN_POINT('',(-6.26,3.51,0.6)); #53855=CARTESIAN_POINT('Origin',(-6.55,3.51,0.948005681864)); #53856=CARTESIAN_POINT('',(-6.25,3.51,0.3)); #53857=CARTESIAN_POINT('Origin',(-6.25,3.51,0.6)); #53858=CARTESIAN_POINT('',(-5.75,3.51,0.3)); #53859=CARTESIAN_POINT('',(-5.75,3.51,0.3)); #53860=CARTESIAN_POINT('',(-5.75,3.51,0.3)); #53861=CARTESIAN_POINT('',(-6.55,3.51,0.948005681864)); #53862=CARTESIAN_POINT('Origin',(-6.25,22.63145978103,0.6)); #53863=CARTESIAN_POINT('',(-6.25,4.41,0.3)); #53864=CARTESIAN_POINT('Origin',(-6.25,4.41,0.6)); #53865=CARTESIAN_POINT('',(-6.25,4.41,0.3)); #53866=CARTESIAN_POINT('Origin',(-6.55,3.51,0.3)); #53867=CARTESIAN_POINT('',(-5.75,4.41,0.3)); #53868=CARTESIAN_POINT('',(-6.25,4.41,0.3)); #53869=CARTESIAN_POINT('',(-5.55,4.21,0.3)); #53870=CARTESIAN_POINT('Origin',(-5.75,4.21,0.3)); #53871=CARTESIAN_POINT('',(-5.55,3.71,0.3)); #53872=CARTESIAN_POINT('',(-5.55,3.71,0.3)); #53873=CARTESIAN_POINT('Origin',(-5.75,3.71,0.3)); #53874=CARTESIAN_POINT('Origin',(-5.75,3.71,0.3)); #53875=CARTESIAN_POINT('',(-5.55,3.71,0.3)); #53876=CARTESIAN_POINT('Origin',(-5.55,3.71,0.3)); #53877=CARTESIAN_POINT('',(-5.55,4.21,0.3)); #53878=CARTESIAN_POINT('Origin',(-5.75,4.21,0.3)); #53879=CARTESIAN_POINT('',(-5.75,4.41,0.3)); #53880=CARTESIAN_POINT('Origin',(-6.55,4.41,0.3)); #53881=CARTESIAN_POINT('',(-6.55,4.41,0.948005681864)); #53882=CARTESIAN_POINT('Origin',(-6.55,4.61,0.948005681864)); #53883=CARTESIAN_POINT('',(-6.55,4.515,1.124002840932)); #53884=CARTESIAN_POINT('Origin',(-6.55,4.42,1.3)); #53885=CARTESIAN_POINT('Origin',(-6.55,3.26,0.948005681864)); #53886=CARTESIAN_POINT('Origin',(-6.15,4.42,1.03)); #53887=CARTESIAN_POINT('',(-6.15,4.42,1.03)); #53888=CARTESIAN_POINT('',(-6.15,4.92,1.03)); #53889=CARTESIAN_POINT('Origin',(-6.15,4.92,1.03)); #53890=CARTESIAN_POINT('Origin',(-6.15,4.42,0.)); #53891=CARTESIAN_POINT('',(0.,0.,0.)); #53892=CARTESIAN_POINT('',(0.,0.,0.)); #53893=CARTESIAN_POINT('',(0.,0.,0.)); #53894=CARTESIAN_POINT('',(0.,0.,0.)); #53895=CARTESIAN_POINT('Origin',(-1.016,1.27,0.)); #53896=CARTESIAN_POINT('',(-1.016,1.27,0.)); #53897=CARTESIAN_POINT('',(-1.016,1.27,2.54)); #53898=CARTESIAN_POINT('',(-1.016,1.27,0.)); #53899=CARTESIAN_POINT('',(-1.27,1.016,0.)); #53900=CARTESIAN_POINT('',(-1.016,1.27,0.)); #53901=CARTESIAN_POINT('',(-1.27,1.016,2.54)); #53902=CARTESIAN_POINT('',(-1.27,1.016,0.)); #53903=CARTESIAN_POINT('',(-1.016,1.27,2.54)); #53904=CARTESIAN_POINT('Origin',(1.016,1.27,0.)); #53905=CARTESIAN_POINT('',(1.016,1.27,0.)); #53906=CARTESIAN_POINT('',(1.016,1.27,2.54)); #53907=CARTESIAN_POINT('',(1.016,1.27,0.)); #53908=CARTESIAN_POINT('',(1.016,1.27,0.)); #53909=CARTESIAN_POINT('',(1.016,1.27,2.54)); #53910=CARTESIAN_POINT('Origin',(-1.27,1.016,0.)); #53911=CARTESIAN_POINT('',(-1.27,-1.016,0.)); #53912=CARTESIAN_POINT('',(-1.27,1.016,0.)); #53913=CARTESIAN_POINT('',(-1.27,-1.016,2.54)); #53914=CARTESIAN_POINT('',(-1.27,-1.016,0.)); #53915=CARTESIAN_POINT('',(-1.27,1.016,2.54)); #53916=CARTESIAN_POINT('Origin',(5.398204781459E-17,-2.54,0.)); #53917=CARTESIAN_POINT('',(1.27,1.016,0.)); #53918=CARTESIAN_POINT('',(1.27,1.016,0.)); #53919=CARTESIAN_POINT('',(1.27,-1.016,0.)); #53920=CARTESIAN_POINT('',(1.27,-1.016,0.)); #53921=CARTESIAN_POINT('',(1.016,-1.27,0.)); #53922=CARTESIAN_POINT('',(1.016,-1.27,0.)); #53923=CARTESIAN_POINT('',(1.27,-1.524,0.)); #53924=CARTESIAN_POINT('',(1.27,-1.524,0.)); #53925=CARTESIAN_POINT('',(1.27,-3.556,0.)); #53926=CARTESIAN_POINT('',(1.27,-3.556,0.)); #53927=CARTESIAN_POINT('',(1.016,-3.81,0.)); #53928=CARTESIAN_POINT('',(1.016,-3.81,0.)); #53929=CARTESIAN_POINT('',(1.27,-4.064,0.)); #53930=CARTESIAN_POINT('',(1.27,-4.064,0.)); #53931=CARTESIAN_POINT('',(1.27,-6.096,0.)); #53932=CARTESIAN_POINT('',(1.27,-6.096,0.)); #53933=CARTESIAN_POINT('',(1.016,-6.35,0.)); #53934=CARTESIAN_POINT('',(1.016,-6.35,0.)); #53935=CARTESIAN_POINT('',(-1.016,-6.35,0.)); #53936=CARTESIAN_POINT('',(-1.016,-6.35,0.)); #53937=CARTESIAN_POINT('',(-1.27,-6.096,0.)); #53938=CARTESIAN_POINT('',(-1.27,-6.096,0.)); #53939=CARTESIAN_POINT('',(-1.27,-4.064,0.)); #53940=CARTESIAN_POINT('',(-1.27,-4.064,0.)); #53941=CARTESIAN_POINT('',(-1.016,-3.81,0.)); #53942=CARTESIAN_POINT('',(-1.016,-3.81,0.)); #53943=CARTESIAN_POINT('',(-1.27,-3.556,0.)); #53944=CARTESIAN_POINT('',(-1.27,-3.556,0.)); #53945=CARTESIAN_POINT('',(-1.27,-1.524,0.)); #53946=CARTESIAN_POINT('',(-1.27,-1.524,0.)); #53947=CARTESIAN_POINT('',(-1.016,-1.27,0.)); #53948=CARTESIAN_POINT('',(-1.016,-1.27,0.)); #53949=CARTESIAN_POINT('',(-1.27,-1.016,0.)); #53950=CARTESIAN_POINT('',(0.32,-0.32,0.)); #53951=CARTESIAN_POINT('',(0.32,0.32,0.)); #53952=CARTESIAN_POINT('',(0.32,-1.43,0.)); #53953=CARTESIAN_POINT('',(-0.32,0.32,0.)); #53954=CARTESIAN_POINT('',(-0.16,0.32,0.)); #53955=CARTESIAN_POINT('',(-0.32,-0.32,0.)); #53956=CARTESIAN_POINT('',(-0.32,-1.43,0.)); #53957=CARTESIAN_POINT('',(-0.16,-0.32,0.)); #53958=CARTESIAN_POINT('',(0.32,-2.86,0.)); #53959=CARTESIAN_POINT('',(-0.32,-2.86,0.)); #53960=CARTESIAN_POINT('',(-0.16,-2.86,0.)); #53961=CARTESIAN_POINT('',(0.32,-2.22,0.)); #53962=CARTESIAN_POINT('',(0.32,-2.7,0.)); #53963=CARTESIAN_POINT('',(-0.32,-2.22,0.)); #53964=CARTESIAN_POINT('',(-0.16,-2.22,0.)); #53965=CARTESIAN_POINT('',(-0.32,-2.7,0.)); #53966=CARTESIAN_POINT('',(0.32,-4.76,0.)); #53967=CARTESIAN_POINT('',(-0.32,-4.76,0.)); #53968=CARTESIAN_POINT('',(-0.16,-4.76,0.)); #53969=CARTESIAN_POINT('',(-0.32,-5.4,0.)); #53970=CARTESIAN_POINT('',(-0.32,-3.97,0.)); #53971=CARTESIAN_POINT('',(0.32,-5.4,0.)); #53972=CARTESIAN_POINT('',(-0.16,-5.4,0.)); #53973=CARTESIAN_POINT('',(0.32,-3.97,0.)); #53974=CARTESIAN_POINT('Origin',(5.398204781459E-17,-2.54,2.54)); #53975=CARTESIAN_POINT('',(-1.016,-1.27,2.54)); #53976=CARTESIAN_POINT('',(-1.27,-1.016,2.54)); #53977=CARTESIAN_POINT('',(-1.27,-1.524,2.54)); #53978=CARTESIAN_POINT('',(-1.016,-1.27,2.54)); #53979=CARTESIAN_POINT('',(-1.27,-3.556,2.54)); #53980=CARTESIAN_POINT('',(-1.27,-1.524,2.54)); #53981=CARTESIAN_POINT('',(-1.016,-3.81,2.54)); #53982=CARTESIAN_POINT('',(-1.27,-3.556,2.54)); #53983=CARTESIAN_POINT('',(-1.27,-4.064,2.54)); #53984=CARTESIAN_POINT('',(-1.016,-3.81,2.54)); #53985=CARTESIAN_POINT('',(-1.27,-6.096,2.54)); #53986=CARTESIAN_POINT('',(-1.27,-4.064,2.54)); #53987=CARTESIAN_POINT('',(-1.016,-6.35,2.54)); #53988=CARTESIAN_POINT('',(-1.27,-6.096,2.54)); #53989=CARTESIAN_POINT('',(1.016,-6.35,2.54)); #53990=CARTESIAN_POINT('',(-1.016,-6.35,2.54)); #53991=CARTESIAN_POINT('',(1.27,-6.096,2.54)); #53992=CARTESIAN_POINT('',(1.016,-6.35,2.54)); #53993=CARTESIAN_POINT('',(1.27,-4.064,2.54)); #53994=CARTESIAN_POINT('',(1.27,-6.096,2.54)); #53995=CARTESIAN_POINT('',(1.016,-3.81,2.54)); #53996=CARTESIAN_POINT('',(1.27,-4.064,2.54)); #53997=CARTESIAN_POINT('',(1.27,-3.556,2.54)); #53998=CARTESIAN_POINT('',(1.016,-3.81,2.54)); #53999=CARTESIAN_POINT('',(1.27,-1.524,2.54)); #54000=CARTESIAN_POINT('',(1.27,-3.556,2.54)); #54001=CARTESIAN_POINT('',(1.016,-1.27,2.54)); #54002=CARTESIAN_POINT('',(1.27,-1.524,2.54)); #54003=CARTESIAN_POINT('',(1.27,-1.016,2.54)); #54004=CARTESIAN_POINT('',(1.016,-1.27,2.54)); #54005=CARTESIAN_POINT('',(1.27,1.016,2.54)); #54006=CARTESIAN_POINT('',(1.27,-1.016,2.54)); #54007=CARTESIAN_POINT('',(1.27,1.016,2.54)); #54008=CARTESIAN_POINT('',(0.32,-0.32,2.54)); #54009=CARTESIAN_POINT('',(0.32,0.32,2.54)); #54010=CARTESIAN_POINT('',(0.32,-1.43,2.54)); #54011=CARTESIAN_POINT('',(-0.32,-0.32,2.54)); #54012=CARTESIAN_POINT('',(-0.16,-0.32,2.54)); #54013=CARTESIAN_POINT('',(-0.32,0.32,2.54)); #54014=CARTESIAN_POINT('',(-0.32,-1.43,2.54)); #54015=CARTESIAN_POINT('',(-0.16,0.32,2.54)); #54016=CARTESIAN_POINT('',(0.32,-2.86,2.54)); #54017=CARTESIAN_POINT('',(-0.32,-2.86,2.54)); #54018=CARTESIAN_POINT('',(-0.16,-2.86,2.54)); #54019=CARTESIAN_POINT('',(-0.32,-2.22,2.54)); #54020=CARTESIAN_POINT('',(-0.32,-2.7,2.54)); #54021=CARTESIAN_POINT('',(0.32,-2.22,2.54)); #54022=CARTESIAN_POINT('',(-0.16,-2.22,2.54)); #54023=CARTESIAN_POINT('',(0.32,-2.7,2.54)); #54024=CARTESIAN_POINT('',(0.32,-4.76,2.54)); #54025=CARTESIAN_POINT('',(-0.32,-4.76,2.54)); #54026=CARTESIAN_POINT('',(-0.16,-4.76,2.54)); #54027=CARTESIAN_POINT('',(0.32,-5.4,2.54)); #54028=CARTESIAN_POINT('',(0.32,-3.97,2.54)); #54029=CARTESIAN_POINT('',(-0.32,-5.4,2.54)); #54030=CARTESIAN_POINT('',(-0.16,-5.4,2.54)); #54031=CARTESIAN_POINT('',(-0.32,-3.97,2.54)); #54032=CARTESIAN_POINT('Origin',(1.27,1.016,0.)); #54033=CARTESIAN_POINT('',(1.27,1.016,0.)); #54034=CARTESIAN_POINT('Origin',(-1.27,-1.016,0.)); #54035=CARTESIAN_POINT('',(-1.016,-1.27,0.)); #54036=CARTESIAN_POINT('Origin',(1.27,-1.016,0.)); #54037=CARTESIAN_POINT('',(1.27,-1.016,0.)); #54038=CARTESIAN_POINT('Origin',(-1.016,-1.27,0.)); #54039=CARTESIAN_POINT('',(-1.27,-1.524,0.)); #54040=CARTESIAN_POINT('Origin',(1.016,-1.27,0.)); #54041=CARTESIAN_POINT('',(1.016,-1.27,0.)); #54042=CARTESIAN_POINT('Origin',(-1.27,-1.524,0.)); #54043=CARTESIAN_POINT('',(-1.27,-3.556,0.)); #54044=CARTESIAN_POINT('Origin',(1.27,-1.524,0.)); #54045=CARTESIAN_POINT('',(1.27,-1.524,0.)); #54046=CARTESIAN_POINT('Origin',(-1.27,-3.556,0.)); #54047=CARTESIAN_POINT('',(-1.016,-3.81,0.)); #54048=CARTESIAN_POINT('Origin',(1.27,-3.556,0.)); #54049=CARTESIAN_POINT('',(1.27,-3.556,0.)); #54050=CARTESIAN_POINT('Origin',(-1.016,-3.81,0.)); #54051=CARTESIAN_POINT('',(-1.27,-4.064,0.)); #54052=CARTESIAN_POINT('Origin',(1.016,-3.81,0.)); #54053=CARTESIAN_POINT('',(1.016,-3.81,0.)); #54054=CARTESIAN_POINT('Origin',(-1.27,-4.064,0.)); #54055=CARTESIAN_POINT('',(-1.27,-6.096,0.)); #54056=CARTESIAN_POINT('Origin',(1.27,-4.064,0.)); #54057=CARTESIAN_POINT('',(1.27,-4.064,0.)); #54058=CARTESIAN_POINT('Origin',(-1.27,-6.096,0.)); #54059=CARTESIAN_POINT('',(-1.016,-6.35,0.)); #54060=CARTESIAN_POINT('Origin',(1.27,-6.096,0.)); #54061=CARTESIAN_POINT('',(1.27,-6.096,0.)); #54062=CARTESIAN_POINT('Origin',(-1.016,-6.35,0.)); #54063=CARTESIAN_POINT('',(1.016,-6.35,0.)); #54064=CARTESIAN_POINT('Origin',(1.016,-6.35,0.)); #54065=CARTESIAN_POINT('Origin',(0.32,-0.32,-3.)); #54066=CARTESIAN_POINT('',(0.32,-0.32,-2.84)); #54067=CARTESIAN_POINT('',(0.32,-0.32,-3.)); #54068=CARTESIAN_POINT('',(0.32,0.32,-2.84)); #54069=CARTESIAN_POINT('',(0.32,-0.32,-2.84)); #54070=CARTESIAN_POINT('',(0.32,0.32,-3.)); #54071=CARTESIAN_POINT('Origin',(-0.32,0.32,-3.)); #54072=CARTESIAN_POINT('',(-0.32,0.32,-2.84)); #54073=CARTESIAN_POINT('',(-0.32,0.32,-2.84)); #54074=CARTESIAN_POINT('',(-0.32,0.32,-3.)); #54075=CARTESIAN_POINT('Origin',(-0.32,-0.32,-3.)); #54076=CARTESIAN_POINT('',(-0.32,-0.32,-2.84)); #54077=CARTESIAN_POINT('',(-0.32,-0.32,-3.)); #54078=CARTESIAN_POINT('',(-0.32,-0.32,-2.84)); #54079=CARTESIAN_POINT('Origin',(-0.32,-0.32,-3.)); #54080=CARTESIAN_POINT('',(-0.32,-0.32,-2.84)); #54081=CARTESIAN_POINT('Origin',(-0.32,-2.86,-3.)); #54082=CARTESIAN_POINT('',(0.32,-2.86,-2.84)); #54083=CARTESIAN_POINT('',(0.32,-2.86,-3.)); #54084=CARTESIAN_POINT('',(-0.32,-2.86,-2.84)); #54085=CARTESIAN_POINT('',(-0.32,-2.86,-3.)); #54086=CARTESIAN_POINT('',(-0.32,-2.86,-2.84)); #54087=CARTESIAN_POINT('Origin',(0.32,-2.86,-3.)); #54088=CARTESIAN_POINT('',(0.32,-2.22,-2.84)); #54089=CARTESIAN_POINT('',(0.32,-2.86,-2.84)); #54090=CARTESIAN_POINT('',(0.32,-2.22,-3.)); #54091=CARTESIAN_POINT('Origin',(-0.32,-2.22,-3.)); #54092=CARTESIAN_POINT('',(-0.32,-2.22,-2.84)); #54093=CARTESIAN_POINT('',(-0.32,-2.22,-2.84)); #54094=CARTESIAN_POINT('',(-0.32,-2.22,-3.)); #54095=CARTESIAN_POINT('Origin',(-0.32,-2.86,-3.)); #54096=CARTESIAN_POINT('',(-0.32,-2.86,-2.84)); #54097=CARTESIAN_POINT('Origin',(-0.32,-4.76,-3.)); #54098=CARTESIAN_POINT('',(0.32,-4.76,-2.84)); #54099=CARTESIAN_POINT('',(0.32,-4.76,-3.)); #54100=CARTESIAN_POINT('',(-0.32,-4.76,-2.84)); #54101=CARTESIAN_POINT('',(-0.32,-4.76,-2.84)); #54102=CARTESIAN_POINT('',(-0.32,-4.76,-3.)); #54103=CARTESIAN_POINT('Origin',(-0.32,-5.4,-3.)); #54104=CARTESIAN_POINT('',(-0.32,-5.4,-2.84)); #54105=CARTESIAN_POINT('',(-0.32,-5.4,-3.)); #54106=CARTESIAN_POINT('',(-0.32,-5.4,-2.84)); #54107=CARTESIAN_POINT('Origin',(-0.32,-5.4,-3.)); #54108=CARTESIAN_POINT('',(0.32,-5.4,-2.84)); #54109=CARTESIAN_POINT('',(0.32,-5.4,-3.)); #54110=CARTESIAN_POINT('',(-0.32,-5.4,-2.84)); #54111=CARTESIAN_POINT('Origin',(0.32,-5.4,-3.)); #54112=CARTESIAN_POINT('',(0.32,-5.4,-2.84)); #54113=CARTESIAN_POINT('Origin',(0.32,-0.32,-3.)); #54114=CARTESIAN_POINT('',(0.32,-0.32,8.38)); #54115=CARTESIAN_POINT('',(0.32,-0.32,-3.)); #54116=CARTESIAN_POINT('',(0.32,0.32,8.38)); #54117=CARTESIAN_POINT('',(0.32,0.32,-3.)); #54118=CARTESIAN_POINT('',(0.32,-0.32,8.38)); #54119=CARTESIAN_POINT('Origin',(-0.32,0.32,-3.)); #54120=CARTESIAN_POINT('',(-0.32,0.32,8.38)); #54121=CARTESIAN_POINT('',(-0.32,0.32,-3.)); #54122=CARTESIAN_POINT('',(-0.32,0.32,8.38)); #54123=CARTESIAN_POINT('Origin',(-0.32,-0.32,-3.)); #54124=CARTESIAN_POINT('',(-0.32,-0.32,8.38)); #54125=CARTESIAN_POINT('',(-0.32,-0.32,-3.)); #54126=CARTESIAN_POINT('',(-0.32,-0.32,8.38)); #54127=CARTESIAN_POINT('Origin',(-0.32,-0.32,-3.)); #54128=CARTESIAN_POINT('',(-0.32,-0.32,8.38)); #54129=CARTESIAN_POINT('Origin',(-0.32,-2.86,-3.)); #54130=CARTESIAN_POINT('',(0.32,-2.86,8.38)); #54131=CARTESIAN_POINT('',(0.32,-2.86,-3.)); #54132=CARTESIAN_POINT('',(-0.32,-2.86,8.38)); #54133=CARTESIAN_POINT('',(-0.32,-2.86,8.38)); #54134=CARTESIAN_POINT('',(-0.32,-2.86,-3.)); #54135=CARTESIAN_POINT('Origin',(0.32,-2.86,-3.)); #54136=CARTESIAN_POINT('',(0.32,-2.22,8.38)); #54137=CARTESIAN_POINT('',(0.32,-2.22,-3.)); #54138=CARTESIAN_POINT('',(0.32,-2.86,8.38)); #54139=CARTESIAN_POINT('Origin',(-0.32,-2.22,-3.)); #54140=CARTESIAN_POINT('',(-0.32,-2.22,8.38)); #54141=CARTESIAN_POINT('',(-0.32,-2.22,-3.)); #54142=CARTESIAN_POINT('',(-0.32,-2.22,8.38)); #54143=CARTESIAN_POINT('Origin',(-0.32,-2.86,-3.)); #54144=CARTESIAN_POINT('',(-0.32,-2.86,8.38)); #54145=CARTESIAN_POINT('Origin',(-0.32,-4.76,-3.)); #54146=CARTESIAN_POINT('',(0.32,-4.76,8.38)); #54147=CARTESIAN_POINT('',(0.32,-4.76,-3.)); #54148=CARTESIAN_POINT('',(-0.32,-4.76,8.38)); #54149=CARTESIAN_POINT('',(-0.32,-4.76,-3.)); #54150=CARTESIAN_POINT('',(-0.32,-4.76,8.38)); #54151=CARTESIAN_POINT('Origin',(-0.32,-5.4,-3.)); #54152=CARTESIAN_POINT('',(-0.32,-5.4,8.38)); #54153=CARTESIAN_POINT('',(-0.32,-5.4,-3.)); #54154=CARTESIAN_POINT('',(-0.32,-5.4,8.38)); #54155=CARTESIAN_POINT('Origin',(-0.32,-5.4,-3.)); #54156=CARTESIAN_POINT('',(0.32,-5.4,8.38)); #54157=CARTESIAN_POINT('',(0.32,-5.4,-3.)); #54158=CARTESIAN_POINT('',(-0.32,-5.4,8.38)); #54159=CARTESIAN_POINT('Origin',(0.32,-5.4,-3.)); #54160=CARTESIAN_POINT('',(0.32,-5.4,8.38)); #54161=CARTESIAN_POINT('Origin',(0.24,-0.32,-2.92)); #54162=CARTESIAN_POINT('',(0.16,-0.16,-3.)); #54163=CARTESIAN_POINT('',(0.16,-0.16,-3.)); #54164=CARTESIAN_POINT('',(0.16,0.16,-3.)); #54165=CARTESIAN_POINT('',(0.16,-0.32,-3.)); #54166=CARTESIAN_POINT('',(0.05333333333333,0.05333333333333,-3.106666666667)); #54167=CARTESIAN_POINT('Origin',(-0.32,0.24,-2.92)); #54168=CARTESIAN_POINT('',(-0.16,0.16,-3.)); #54169=CARTESIAN_POINT('',(-0.32,0.16,-3.)); #54170=CARTESIAN_POINT('',(-0.16,0.16,-3.)); #54171=CARTESIAN_POINT('Origin',(-0.24,-0.32,-2.92)); #54172=CARTESIAN_POINT('',(-0.16,-0.16,-3.)); #54173=CARTESIAN_POINT('',(-0.266666666667,-0.266666666667,-2.893333333333)); #54174=CARTESIAN_POINT('',(-0.16,-0.32,-3.)); #54175=CARTESIAN_POINT('Origin',(-0.32,-0.24,-2.92)); #54176=CARTESIAN_POINT('',(-0.32,-0.16,-3.)); #54177=CARTESIAN_POINT('Origin',(-0.32,-2.78,-2.92)); #54178=CARTESIAN_POINT('',(-0.16,-2.7,-3.)); #54179=CARTESIAN_POINT('',(0.16,-2.7,-3.)); #54180=CARTESIAN_POINT('',(-0.32,-2.7,-3.)); #54181=CARTESIAN_POINT('',(0.16,-2.7,-3.)); #54182=CARTESIAN_POINT('',(-0.266666666667,-2.806666666667,-2.893333333333)); #54183=CARTESIAN_POINT('Origin',(0.24,-2.86,-2.92)); #54184=CARTESIAN_POINT('',(0.16,-2.38,-3.)); #54185=CARTESIAN_POINT('',(0.16,-2.86,-3.)); #54186=CARTESIAN_POINT('',(0.05333333333333,-2.486666666667,-3.106666666667)); #54187=CARTESIAN_POINT('Origin',(-0.32,-2.3,-2.92)); #54188=CARTESIAN_POINT('',(-0.16,-2.38,-3.)); #54189=CARTESIAN_POINT('',(-0.32,-2.38,-3.)); #54190=CARTESIAN_POINT('',(-0.16,-2.38,-3.)); #54191=CARTESIAN_POINT('Origin',(-0.24,-2.86,-2.92)); #54192=CARTESIAN_POINT('',(-0.16,-2.86,-3.)); #54193=CARTESIAN_POINT('Origin',(-0.32,-4.84,-2.92)); #54194=CARTESIAN_POINT('',(-0.16,-4.92,-3.)); #54195=CARTESIAN_POINT('',(0.16,-4.92,-3.)); #54196=CARTESIAN_POINT('',(-0.32,-4.92,-3.)); #54197=CARTESIAN_POINT('',(-0.16,-4.92,-3.)); #54198=CARTESIAN_POINT('',(0.05333333333333,-5.026666666667,-3.106666666667)); #54199=CARTESIAN_POINT('Origin',(-0.24,-5.4,-2.92)); #54200=CARTESIAN_POINT('',(-0.16,-5.24,-3.)); #54201=CARTESIAN_POINT('',(-0.266666666667,-5.346666666667,-2.893333333333)); #54202=CARTESIAN_POINT('',(-0.16,-5.4,-3.)); #54203=CARTESIAN_POINT('Origin',(-0.32,-5.32,-2.92)); #54204=CARTESIAN_POINT('',(0.16,-5.24,-3.)); #54205=CARTESIAN_POINT('',(-0.32,-5.24,-3.)); #54206=CARTESIAN_POINT('',(0.16,-5.24,-3.)); #54207=CARTESIAN_POINT('Origin',(0.24,-5.4,-2.92)); #54208=CARTESIAN_POINT('',(0.16,-5.4,-3.)); #54209=CARTESIAN_POINT('Origin',(0.24,-0.32,8.46)); #54210=CARTESIAN_POINT('',(0.16,-0.16,8.54)); #54211=CARTESIAN_POINT('',(0.16,-0.16,8.54)); #54212=CARTESIAN_POINT('',(0.16,0.16,8.54)); #54213=CARTESIAN_POINT('',(0.05333333333333,0.05333333333333,8.646666666667)); #54214=CARTESIAN_POINT('',(0.16,-0.32,8.54)); #54215=CARTESIAN_POINT('Origin',(-0.32,0.24,8.46)); #54216=CARTESIAN_POINT('',(-0.16,0.16,8.54)); #54217=CARTESIAN_POINT('',(-0.32,0.16,8.54)); #54218=CARTESIAN_POINT('',(-0.16,0.16,8.54)); #54219=CARTESIAN_POINT('Origin',(-0.24,-0.32,8.46)); #54220=CARTESIAN_POINT('',(-0.16,-0.16,8.54)); #54221=CARTESIAN_POINT('',(-0.266666666667,-0.266666666667,8.433333333333)); #54222=CARTESIAN_POINT('',(-0.16,-0.32,8.54)); #54223=CARTESIAN_POINT('Origin',(-0.32,-0.24,8.46)); #54224=CARTESIAN_POINT('',(-0.32,-0.16,8.54)); #54225=CARTESIAN_POINT('Origin',(-0.32,-2.78,8.46)); #54226=CARTESIAN_POINT('',(-0.16,-2.7,8.54)); #54227=CARTESIAN_POINT('',(0.16,-2.7,8.54)); #54228=CARTESIAN_POINT('',(-0.32,-2.7,8.54)); #54229=CARTESIAN_POINT('',(-0.266666666667,-2.806666666667,8.433333333333)); #54230=CARTESIAN_POINT('',(0.16,-2.7,8.54)); #54231=CARTESIAN_POINT('Origin',(0.24,-2.86,8.46)); #54232=CARTESIAN_POINT('',(0.16,-2.38,8.54)); #54233=CARTESIAN_POINT('',(0.05333333333333,-2.486666666667,8.646666666667)); #54234=CARTESIAN_POINT('',(0.16,-2.86,8.54)); #54235=CARTESIAN_POINT('Origin',(-0.32,-2.3,8.46)); #54236=CARTESIAN_POINT('',(-0.16,-2.38,8.54)); #54237=CARTESIAN_POINT('',(-0.32,-2.38,8.54)); #54238=CARTESIAN_POINT('',(-0.16,-2.38,8.54)); #54239=CARTESIAN_POINT('Origin',(-0.24,-2.86,8.46)); #54240=CARTESIAN_POINT('',(-0.16,-2.86,8.54)); #54241=CARTESIAN_POINT('Origin',(-0.32,-4.84,8.46)); #54242=CARTESIAN_POINT('',(-0.16,-4.92,8.54)); #54243=CARTESIAN_POINT('',(0.16,-4.92,8.54)); #54244=CARTESIAN_POINT('',(-0.32,-4.92,8.54)); #54245=CARTESIAN_POINT('',(0.05333333333333,-5.026666666667,8.646666666667)); #54246=CARTESIAN_POINT('',(-0.16,-4.92,8.54)); #54247=CARTESIAN_POINT('Origin',(-0.24,-5.4,8.46)); #54248=CARTESIAN_POINT('',(-0.16,-5.24,8.54)); #54249=CARTESIAN_POINT('',(-0.266666666667,-5.346666666667,8.433333333333)); #54250=CARTESIAN_POINT('',(-0.16,-5.4,8.54)); #54251=CARTESIAN_POINT('Origin',(-0.32,-5.32,8.46)); #54252=CARTESIAN_POINT('',(0.16,-5.24,8.54)); #54253=CARTESIAN_POINT('',(-0.32,-5.24,8.54)); #54254=CARTESIAN_POINT('',(0.16,-5.24,8.54)); #54255=CARTESIAN_POINT('Origin',(0.24,-5.4,8.46)); #54256=CARTESIAN_POINT('',(0.16,-5.4,8.54)); #54257=CARTESIAN_POINT('Origin',(-0.32,-0.32,-3.)); #54258=CARTESIAN_POINT('Origin',(-0.32,-2.86,-3.)); #54259=CARTESIAN_POINT('Origin',(-0.32,-5.4,-3.)); #54260=CARTESIAN_POINT('Origin',(-0.32,-0.32,8.54)); #54261=CARTESIAN_POINT('Origin',(-0.32,-2.86,8.54)); #54262=CARTESIAN_POINT('Origin',(-0.32,-5.4,8.54)); #54263=CARTESIAN_POINT('',(0.,0.,0.)); #54264=CARTESIAN_POINT('',(0.,0.,0.)); #54265=CARTESIAN_POINT('',(0.,0.,0.)); #54266=CARTESIAN_POINT('',(0.,0.,0.)); #54267=CARTESIAN_POINT('Origin',(-1.6,-0.8,0.)); #54268=CARTESIAN_POINT('',(-1.6,-0.8,0.04)); #54269=CARTESIAN_POINT('',(-1.6,-0.8,1.56)); #54270=CARTESIAN_POINT('',(-1.6,-0.8,0.)); #54271=CARTESIAN_POINT('',(-1.6,-0.76,1.6)); #54272=CARTESIAN_POINT('Origin',(-1.6,-0.76,1.56)); #54273=CARTESIAN_POINT('',(-1.6,0.76,1.6)); #54274=CARTESIAN_POINT('',(-1.6,-0.8,1.6)); #54275=CARTESIAN_POINT('',(-1.6,0.8,1.56)); #54276=CARTESIAN_POINT('Origin',(-1.6,0.76,1.56)); #54277=CARTESIAN_POINT('',(-1.6,0.8,0.04)); #54278=CARTESIAN_POINT('',(-1.6,0.8,0.)); #54279=CARTESIAN_POINT('',(-1.6,0.76,0.)); #54280=CARTESIAN_POINT('Origin',(-1.6,0.76,0.04)); #54281=CARTESIAN_POINT('',(-1.6,-0.76,0.)); #54282=CARTESIAN_POINT('',(-1.6,-0.8,0.)); #54283=CARTESIAN_POINT('Origin',(-1.6,-0.76,0.04)); #54284=CARTESIAN_POINT('Origin',(-1.6,-0.8,0.)); #54285=CARTESIAN_POINT('',(-1.2,-0.8,0.04)); #54286=CARTESIAN_POINT('',(-1.2,-0.8,1.56)); #54287=CARTESIAN_POINT('',(-1.2,-0.8,0.)); #54288=CARTESIAN_POINT('',(-1.6,-0.8,1.56)); #54289=CARTESIAN_POINT('',(-1.6,-0.8,0.04)); #54290=CARTESIAN_POINT('Origin',(-1.6,-0.76,0.04)); #54291=CARTESIAN_POINT('',(-1.2,-0.76,0.)); #54292=CARTESIAN_POINT('',(-1.6,-0.76,0.)); #54293=CARTESIAN_POINT('Origin',(-1.2,-0.76,0.04)); #54294=CARTESIAN_POINT('Origin',(-1.6,-0.76,1.56)); #54295=CARTESIAN_POINT('',(-1.2,-0.76,1.6)); #54296=CARTESIAN_POINT('Origin',(-1.2,-0.76,1.56)); #54297=CARTESIAN_POINT('',(-1.6,-0.76,1.6)); #54298=CARTESIAN_POINT('Origin',(-1.6,-0.8,0.)); #54299=CARTESIAN_POINT('',(-1.2,0.76,0.)); #54300=CARTESIAN_POINT('',(-1.6,0.76,0.)); #54301=CARTESIAN_POINT('',(-1.2,-0.8,0.)); #54302=CARTESIAN_POINT('Origin',(-1.6,-0.8,1.6)); #54303=CARTESIAN_POINT('',(-1.2,0.76,1.6)); #54304=CARTESIAN_POINT('',(-1.2,-0.8,1.6)); #54305=CARTESIAN_POINT('',(-1.6,0.76,1.6)); #54306=CARTESIAN_POINT('Origin',(-1.6,0.76,0.04)); #54307=CARTESIAN_POINT('',(-1.2,0.8,0.04)); #54308=CARTESIAN_POINT('',(-1.6,0.8,0.04)); #54309=CARTESIAN_POINT('Origin',(-1.2,0.76,0.04)); #54310=CARTESIAN_POINT('Origin',(-1.6,0.76,1.56)); #54311=CARTESIAN_POINT('',(-1.2,0.8,1.56)); #54312=CARTESIAN_POINT('Origin',(-1.2,0.76,1.56)); #54313=CARTESIAN_POINT('',(-1.6,0.8,1.56)); #54314=CARTESIAN_POINT('Origin',(-1.6,0.8,0.)); #54315=CARTESIAN_POINT('',(-1.2,0.8,0.)); #54316=CARTESIAN_POINT('Origin',(-1.2,-0.8,0.)); #54317=CARTESIAN_POINT('',(-1.2,-0.76,0.08)); #54318=CARTESIAN_POINT('',(-1.2,-0.72,0.04)); #54319=CARTESIAN_POINT('Origin',(-1.2,-0.72,0.08)); #54320=CARTESIAN_POINT('',(-1.2,-0.76,1.52)); #54321=CARTESIAN_POINT('',(-1.2,-0.76,0.04)); #54322=CARTESIAN_POINT('',(-1.2,-0.72,1.56)); #54323=CARTESIAN_POINT('Origin',(-1.2,-0.72,1.52)); #54324=CARTESIAN_POINT('',(-1.2,0.72,1.56)); #54325=CARTESIAN_POINT('',(-1.2,-0.76,1.56)); #54326=CARTESIAN_POINT('',(-1.2,0.76,1.52)); #54327=CARTESIAN_POINT('Origin',(-1.2,0.72,1.52)); #54328=CARTESIAN_POINT('',(-1.2,0.76,0.08)); #54329=CARTESIAN_POINT('',(-1.2,0.76,0.04)); #54330=CARTESIAN_POINT('',(-1.2,0.72,0.04)); #54331=CARTESIAN_POINT('Origin',(-1.2,0.72,0.08)); #54332=CARTESIAN_POINT('',(-1.2,-0.76,0.04)); #54333=CARTESIAN_POINT('Origin',(-1.2,-0.72,0.08)); #54334=CARTESIAN_POINT('',(1.2,-0.72,0.04)); #54335=CARTESIAN_POINT('',(-1.2,-0.72,0.04)); #54336=CARTESIAN_POINT('',(1.2,-0.76,0.08)); #54337=CARTESIAN_POINT('Origin',(1.2,-0.72,0.08)); #54338=CARTESIAN_POINT('',(-1.2,-0.76,0.08)); #54339=CARTESIAN_POINT('Origin',(-1.2,-0.76,0.04)); #54340=CARTESIAN_POINT('',(1.2,0.72,0.04)); #54341=CARTESIAN_POINT('',(-1.2,0.72,0.04)); #54342=CARTESIAN_POINT('',(1.2,-0.76,0.04)); #54343=CARTESIAN_POINT('Origin',(-1.2,0.72,0.08)); #54344=CARTESIAN_POINT('',(1.2,0.76,0.08)); #54345=CARTESIAN_POINT('',(-1.2,0.76,0.08)); #54346=CARTESIAN_POINT('Origin',(1.2,0.72,0.08)); #54347=CARTESIAN_POINT('Origin',(-1.2,0.76,0.04)); #54348=CARTESIAN_POINT('',(1.2,0.76,1.52)); #54349=CARTESIAN_POINT('',(1.2,0.76,0.04)); #54350=CARTESIAN_POINT('',(-1.2,0.76,1.52)); #54351=CARTESIAN_POINT('Origin',(-1.2,0.72,1.52)); #54352=CARTESIAN_POINT('',(1.2,0.72,1.56)); #54353=CARTESIAN_POINT('',(-1.2,0.72,1.56)); #54354=CARTESIAN_POINT('Origin',(1.2,0.72,1.52)); #54355=CARTESIAN_POINT('Origin',(-1.2,-0.76,1.56)); #54356=CARTESIAN_POINT('',(1.2,-0.72,1.56)); #54357=CARTESIAN_POINT('',(-1.2,-0.72,1.56)); #54358=CARTESIAN_POINT('',(1.2,-0.76,1.56)); #54359=CARTESIAN_POINT('Origin',(-1.2,-0.72,1.52)); #54360=CARTESIAN_POINT('',(1.2,-0.76,1.52)); #54361=CARTESIAN_POINT('',(-1.2,-0.76,1.52)); #54362=CARTESIAN_POINT('Origin',(1.2,-0.72,1.52)); #54363=CARTESIAN_POINT('Origin',(-1.2,-0.76,0.04)); #54364=CARTESIAN_POINT('',(1.2,-0.76,0.04)); #54365=CARTESIAN_POINT('Origin',(1.2,-0.8,0.)); #54366=CARTESIAN_POINT('',(1.2,-0.8,0.04)); #54367=CARTESIAN_POINT('',(1.2,-0.8,1.56)); #54368=CARTESIAN_POINT('',(1.2,-0.8,0.)); #54369=CARTESIAN_POINT('',(1.2,-0.76,1.6)); #54370=CARTESIAN_POINT('Origin',(1.2,-0.76,1.56)); #54371=CARTESIAN_POINT('',(1.2,0.76,1.6)); #54372=CARTESIAN_POINT('',(1.2,-0.8,1.6)); #54373=CARTESIAN_POINT('',(1.2,0.8,1.56)); #54374=CARTESIAN_POINT('Origin',(1.2,0.76,1.56)); #54375=CARTESIAN_POINT('',(1.2,0.8,0.04)); #54376=CARTESIAN_POINT('',(1.2,0.8,0.)); #54377=CARTESIAN_POINT('',(1.2,0.76,0.)); #54378=CARTESIAN_POINT('Origin',(1.2,0.76,0.04)); #54379=CARTESIAN_POINT('',(1.2,-0.76,0.)); #54380=CARTESIAN_POINT('',(1.2,-0.8,0.)); #54381=CARTESIAN_POINT('Origin',(1.2,-0.76,0.04)); #54382=CARTESIAN_POINT('Origin',(1.2,-0.8,0.)); #54383=CARTESIAN_POINT('',(1.6,-0.8,0.04)); #54384=CARTESIAN_POINT('',(1.6,-0.8,1.56)); #54385=CARTESIAN_POINT('',(1.6,-0.8,0.)); #54386=CARTESIAN_POINT('',(1.2,-0.8,1.56)); #54387=CARTESIAN_POINT('',(1.2,-0.8,0.04)); #54388=CARTESIAN_POINT('Origin',(1.2,-0.76,0.04)); #54389=CARTESIAN_POINT('',(1.6,-0.76,0.)); #54390=CARTESIAN_POINT('',(1.2,-0.76,0.)); #54391=CARTESIAN_POINT('Origin',(1.6,-0.76,0.04)); #54392=CARTESIAN_POINT('Origin',(1.2,-0.76,1.56)); #54393=CARTESIAN_POINT('',(1.6,-0.76,1.6)); #54394=CARTESIAN_POINT('Origin',(1.6,-0.76,1.56)); #54395=CARTESIAN_POINT('',(1.2,-0.76,1.6)); #54396=CARTESIAN_POINT('Origin',(1.2,-0.8,0.)); #54397=CARTESIAN_POINT('',(1.6,0.76,0.)); #54398=CARTESIAN_POINT('',(1.2,0.76,0.)); #54399=CARTESIAN_POINT('',(1.6,-0.8,0.)); #54400=CARTESIAN_POINT('Origin',(1.2,-0.8,1.6)); #54401=CARTESIAN_POINT('',(1.6,0.76,1.6)); #54402=CARTESIAN_POINT('',(1.6,-0.8,1.6)); #54403=CARTESIAN_POINT('',(1.2,0.76,1.6)); #54404=CARTESIAN_POINT('Origin',(1.2,0.76,0.04)); #54405=CARTESIAN_POINT('',(1.6,0.8,0.04)); #54406=CARTESIAN_POINT('',(1.2,0.8,0.04)); #54407=CARTESIAN_POINT('Origin',(1.6,0.76,0.04)); #54408=CARTESIAN_POINT('Origin',(1.2,0.76,1.56)); #54409=CARTESIAN_POINT('',(1.6,0.8,1.56)); #54410=CARTESIAN_POINT('Origin',(1.6,0.76,1.56)); #54411=CARTESIAN_POINT('',(1.2,0.8,1.56)); #54412=CARTESIAN_POINT('Origin',(1.2,0.8,0.)); #54413=CARTESIAN_POINT('',(1.6,0.8,0.)); #54414=CARTESIAN_POINT('Origin',(1.6,-0.8,0.)); #54415=CARTESIAN_POINT('',(0.,0.,0.)); #54416=CARTESIAN_POINT('',(0.,0.,0.)); #54417=CARTESIAN_POINT('',(0.,0.,0.)); #54418=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,11.)); #54419=CARTESIAN_POINT('',(100.724010151733,-41.4229236644913,11.)); #54420=CARTESIAN_POINT('',(100.724010151733,-114.222923664491,11.)); #54421=CARTESIAN_POINT('',(100.724010151733,-96.2729236644913,11.)); #54422=CARTESIAN_POINT('',(99.7240101517326,-115.222923664491,11.)); #54423=CARTESIAN_POINT('Origin',(99.7240101517326,-114.222923664491,11.)); #54424=CARTESIAN_POINT('',(34.7240101517326,-115.222923664491,11.)); #54425=CARTESIAN_POINT('',(50.9740101517326,-115.222923664491,11.)); #54426=CARTESIAN_POINT('',(33.7240101517326,-114.222923664491,11.)); #54427=CARTESIAN_POINT('Origin',(34.7240101517325,-114.222923664491,11.)); #54428=CARTESIAN_POINT('',(33.7240101517326,-41.4229236644913,11.)); #54429=CARTESIAN_POINT('',(33.7240101517326,-60.3729236644913,11.)); #54430=CARTESIAN_POINT('',(83.4740101517326,-41.4229236644913,11.)); #54431=CARTESIAN_POINT('Origin',(34.7240101517326,-40.4229236644913,11.)); #54432=CARTESIAN_POINT('',(101.724010151733,-40.4229236644913,9.)); #54433=CARTESIAN_POINT('',(32.7240101517326,-40.4229236644913,9.)); #54434=CARTESIAN_POINT('',(34.7240101517326,-40.4229236644913,9.)); #54435=CARTESIAN_POINT('',(32.7240101517326,-40.4229236644913,11.)); #54436=CARTESIAN_POINT('',(32.7240101517326,-40.4229236644913,11.)); #54437=CARTESIAN_POINT('',(101.724010151733,-40.4229236644913,11.)); #54438=CARTESIAN_POINT('',(50.9740101517326,-40.4229236644913,11.)); #54439=CARTESIAN_POINT('',(101.724010151733,-40.4229236644913,11.)); #54440=CARTESIAN_POINT('Origin',(32.7240101517326,-114.222923664491,11.)); #54441=CARTESIAN_POINT('',(32.7240101517326,-45.0493333077436,9.)); #54442=CARTESIAN_POINT('',(32.7240101517326,-78.3229236644913,9.)); #54443=CARTESIAN_POINT('',(32.7240101517326,-45.0493333077436,11.)); #54444=CARTESIAN_POINT('',(32.7240101517326,-45.0493333077436,10.)); #54445=CARTESIAN_POINT('',(32.7240101517326,-96.2729236644913,11.)); #54446=CARTESIAN_POINT('Origin',(99.7240101517326,-41.4229236644913,11.)); #54447=CARTESIAN_POINT('',(33.7240101517326,-41.4229236644913,9.)); #54448=CARTESIAN_POINT('',(33.7240101517326,-41.4229236644913,11.)); #54449=CARTESIAN_POINT('',(100.724010151733,-41.4229236644913,9.)); #54450=CARTESIAN_POINT('',(34.7240101517326,-41.4229236644913,9.)); #54451=CARTESIAN_POINT('',(100.724010151733,-41.4229236644913,11.)); #54452=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,11.)); #54453=CARTESIAN_POINT('',(30.7240101517326,-40.4229236644913,11.)); #54454=CARTESIAN_POINT('',(30.7240101517326,-116.222923664491,11.)); #54455=CARTESIAN_POINT('',(30.7240101517326,-58.3729236644913,11.)); #54456=CARTESIAN_POINT('',(32.7240101517326,-38.4229236644913,11.)); #54457=CARTESIAN_POINT('Origin',(32.7240101517326,-40.4229236644913,11.)); #54458=CARTESIAN_POINT('',(101.724010151733,-38.4229236644913,11.)); #54459=CARTESIAN_POINT('',(85.4740101517326,-38.4229236644913,11.)); #54460=CARTESIAN_POINT('',(103.724010151733,-40.4229236644913,11.)); #54461=CARTESIAN_POINT('Origin',(101.724010151733,-40.4229236644913,11.)); #54462=CARTESIAN_POINT('',(103.724010151733,-116.222923664491,11.)); #54463=CARTESIAN_POINT('',(103.724010151733,-98.2729236644914,11.)); #54464=CARTESIAN_POINT('',(101.724010151733,-118.222923664491,11.)); #54465=CARTESIAN_POINT('Origin',(101.724010151733,-116.222923664491,11.)); #54466=CARTESIAN_POINT('',(32.7240101517326,-118.222923664491,11.)); #54467=CARTESIAN_POINT('',(48.9740101517326,-118.222923664491,11.)); #54468=CARTESIAN_POINT('Origin',(32.7240101517326,-116.222923664491,11.)); #54469=CARTESIAN_POINT('',(32.7240101517326,-55.0493333077436,11.)); #54470=CARTESIAN_POINT('',(32.7240101517326,-96.2729236644913,11.)); #54471=CARTESIAN_POINT('',(32.7240101517326,-89.9169081409833,11.)); #54472=CARTESIAN_POINT('',(32.7240101517326,-96.2729236644913,11.)); #54473=CARTESIAN_POINT('',(32.7240101517326,-99.9169081409833,11.)); #54474=CARTESIAN_POINT('',(32.7240101517326,-96.2729236644913,11.)); #54475=CARTESIAN_POINT('',(32.7240101517326,-114.222923664491,11.)); #54476=CARTESIAN_POINT('',(32.7240101517326,-96.2729236644913,11.)); #54477=CARTESIAN_POINT('',(34.7240101517326,-116.222923664491,11.)); #54478=CARTESIAN_POINT('Origin',(34.7240101517325,-114.222923664491,11.)); #54479=CARTESIAN_POINT('',(99.7240101517326,-116.222923664491,11.)); #54480=CARTESIAN_POINT('',(83.4740101517326,-116.222923664491,11.)); #54481=CARTESIAN_POINT('',(101.724010151733,-114.222923664491,11.)); #54482=CARTESIAN_POINT('Origin',(99.7240101517326,-114.222923664491,11.)); #54483=CARTESIAN_POINT('',(101.724010151733,-99.9794594777285,11.)); #54484=CARTESIAN_POINT('',(101.724010151733,-60.3729236644913,11.)); #54485=CARTESIAN_POINT('',(101.724010151733,-89.9794594777285,11.)); #54486=CARTESIAN_POINT('',(101.724010151733,-60.3729236644913,11.)); #54487=CARTESIAN_POINT('',(101.724010151733,-55.0655512937422,11.)); #54488=CARTESIAN_POINT('',(101.724010151733,-60.3729236644913,11.)); #54489=CARTESIAN_POINT('',(101.724010151733,-45.0655512937422,11.)); #54490=CARTESIAN_POINT('',(101.724010151733,-60.3729236644913,11.)); #54491=CARTESIAN_POINT('',(101.724010151733,-60.3729236644913,11.)); #54492=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644914,9.)); #54493=CARTESIAN_POINT('',(101.724010151733,-45.0655512937422,9.)); #54494=CARTESIAN_POINT('',(101.724010151733,-42.4229236644913,9.)); #54495=CARTESIAN_POINT('',(101.724010151733,-55.0655512937422,9.)); #54496=CARTESIAN_POINT('',(101.724010151733,-42.4229236644913,9.)); #54497=CARTESIAN_POINT('',(101.724010151733,-89.9794594777285,9.)); #54498=CARTESIAN_POINT('',(101.724010151733,-42.4229236644913,9.)); #54499=CARTESIAN_POINT('',(101.724010151733,-99.9794594777285,9.)); #54500=CARTESIAN_POINT('',(101.724010151733,-42.4229236644913,9.)); #54501=CARTESIAN_POINT('',(101.724010151733,-114.222923664491,9.)); #54502=CARTESIAN_POINT('',(101.724010151733,-42.4229236644913,9.)); #54503=CARTESIAN_POINT('',(99.7240101517326,-116.222923664491,9.)); #54504=CARTESIAN_POINT('Origin',(99.7240101517326,-114.222923664491,9.)); #54505=CARTESIAN_POINT('',(34.7240101517326,-116.222923664491,9.)); #54506=CARTESIAN_POINT('',(99.7240101517326,-116.222923664491,9.)); #54507=CARTESIAN_POINT('',(32.7240101517326,-114.222923664491,9.)); #54508=CARTESIAN_POINT('Origin',(34.7240101517325,-114.222923664491,9.)); #54509=CARTESIAN_POINT('',(32.7240101517326,-99.9169081409833,9.)); #54510=CARTESIAN_POINT('',(32.7240101517326,-114.222923664491,9.)); #54511=CARTESIAN_POINT('',(32.7240101517326,-89.9169081409833,9.)); #54512=CARTESIAN_POINT('',(32.7240101517326,-114.222923664491,9.)); #54513=CARTESIAN_POINT('',(32.7240101517326,-55.0493333077436,9.)); #54514=CARTESIAN_POINT('',(32.7240101517326,-114.222923664491,9.)); #54515=CARTESIAN_POINT('',(32.7240101517326,-114.222923664491,9.)); #54516=CARTESIAN_POINT('',(33.7240101517326,-114.222923664491,9.)); #54517=CARTESIAN_POINT('',(33.7240101517326,-114.222923664491,9.)); #54518=CARTESIAN_POINT('',(34.7240101517326,-115.222923664491,9.)); #54519=CARTESIAN_POINT('Origin',(34.7240101517325,-114.222923664491,9.)); #54520=CARTESIAN_POINT('',(99.7240101517326,-115.222923664491,9.)); #54521=CARTESIAN_POINT('',(99.7240101517326,-115.222923664491,9.)); #54522=CARTESIAN_POINT('',(100.724010151733,-114.222923664491,9.)); #54523=CARTESIAN_POINT('Origin',(99.7240101517326,-114.222923664491,9.)); #54524=CARTESIAN_POINT('',(100.724010151733,-42.4229236644913,9.)); #54525=CARTESIAN_POINT('Origin',(33.7240101517326,-42.4229236644913,11.)); #54526=CARTESIAN_POINT('',(33.7240101517326,-114.222923664491,11.)); #54527=CARTESIAN_POINT('Origin',(100.724010151733,-114.222923664491,11.)); #54528=CARTESIAN_POINT('',(100.724010151733,-114.222923664491,11.)); #54529=CARTESIAN_POINT('Origin',(101.724010151733,-42.4229236644913,11.)); #54530=CARTESIAN_POINT('',(101.724010151733,-45.0655512937422,11.)); #54531=CARTESIAN_POINT('Origin',(34.7240101517326,-115.222923664491,11.)); #54532=CARTESIAN_POINT('',(34.7240101517326,-115.222923664491,11.)); #54533=CARTESIAN_POINT('',(99.7240101517326,-115.222923664491,11.)); #54534=CARTESIAN_POINT('Origin',(85.3714530825214,-51.601390530861,13.)); #54535=CARTESIAN_POINT('',(85.3714530825214,-51.601390530861,13.)); #54536=CARTESIAN_POINT('',(86.1818211435871,-49.3749233982926,13.)); #54537=CARTESIAN_POINT('',(80.015959806663,-66.3154819792693,13.)); #54538=CARTESIAN_POINT('',(85.3714530825214,-51.601390530861,12.)); #54539=CARTESIAN_POINT('',(85.3714530825214,-51.601390530861,13.)); #54540=CARTESIAN_POINT('',(86.1818211435871,-49.3749233982926,12.)); #54541=CARTESIAN_POINT('',(85.3714530825214,-51.601390530861,12.)); #54542=CARTESIAN_POINT('',(86.1818211435871,-49.3749233982926,13.)); #54543=CARTESIAN_POINT('Origin',(84.5447134136753,-49.3749233982926,13.)); #54544=CARTESIAN_POINT('',(84.5447134136753,-49.3749233982926,13.)); #54545=CARTESIAN_POINT('',(88.2185922621659,-59.2689333429452,13.)); #54546=CARTESIAN_POINT('',(84.5447134136753,-49.3749233982926,12.)); #54547=CARTESIAN_POINT('',(84.5447134136753,-49.3749233982926,13.)); #54548=CARTESIAN_POINT('',(84.5447134136753,-49.3749233982926,12.)); #54549=CARTESIAN_POINT('Origin',(86.1818211435871,-49.3749233982926,13.)); #54550=CARTESIAN_POINT('',(76.7029156476598,-49.3749233982926,13.)); #54551=CARTESIAN_POINT('',(86.1818211435871,-49.3749233982926,12.)); #54552=CARTESIAN_POINT('Origin',(85.9976463675098,-53.0011173985368,13.)); #54553=CARTESIAN_POINT('',(85.9976463675098,-53.0011173985368,13.)); #54554=CARTESIAN_POINT('',(84.7166102289752,-53.0011173985368,13.)); #54555=CARTESIAN_POINT('',(76.6108282596212,-53.0011173985368,13.)); #54556=CARTESIAN_POINT('',(85.9976463675098,-53.0011173985368,12.)); #54557=CARTESIAN_POINT('',(85.9976463675098,-53.0011173985368,13.)); #54558=CARTESIAN_POINT('',(84.7166102289752,-53.0011173985368,12.)); #54559=CARTESIAN_POINT('',(85.9976463675098,-53.0011173985368,12.)); #54560=CARTESIAN_POINT('',(84.7166102289752,-53.0011173985368,13.)); #54561=CARTESIAN_POINT('Origin',(88.3346178292827,-47.0011171601182,13.)); #54562=CARTESIAN_POINT('',(88.3346178292827,-47.0011171601182,13.)); #54563=CARTESIAN_POINT('',(81.6478834800403,-64.1688097682509,13.)); #54564=CARTESIAN_POINT('',(88.3346178292827,-47.0011171601182,12.)); #54565=CARTESIAN_POINT('',(88.3346178292827,-47.0011171601182,13.)); #54566=CARTESIAN_POINT('',(88.3346178292827,-47.0011171601182,12.)); #54567=CARTESIAN_POINT('Origin',(87.0494883417682,-47.0011171601182,13.)); #54568=CARTESIAN_POINT('',(87.0494883417682,-47.0011171601182,13.)); #54569=CARTESIAN_POINT('',(77.1367492467504,-47.0011171601182,13.)); #54570=CARTESIAN_POINT('',(87.0494883417682,-47.0011171601182,12.)); #54571=CARTESIAN_POINT('',(87.0494883417682,-47.0011171601182,13.)); #54572=CARTESIAN_POINT('',(87.0494883417682,-47.0011171601182,12.)); #54573=CARTESIAN_POINT('Origin',(86.5542631506519,-48.3640095494157,13.)); #54574=CARTESIAN_POINT('',(86.5542631506519,-48.3640095494157,13.)); #54575=CARTESIAN_POINT('',(80.6188339981143,-64.6987020576318,13.)); #54576=CARTESIAN_POINT('',(86.5542631506519,-48.3640095494157,12.)); #54577=CARTESIAN_POINT('',(86.5542631506519,-48.3640095494157,13.)); #54578=CARTESIAN_POINT('',(86.5542631506519,-48.3640095494157,12.)); #54579=CARTESIAN_POINT('Origin',(84.1559003948764,-48.3640095494157,13.)); #54580=CARTESIAN_POINT('',(84.1559003948764,-48.3640095494157,13.)); #54581=CARTESIAN_POINT('',(75.6899552733045,-48.3640095494157,13.)); #54582=CARTESIAN_POINT('',(84.1559003948764,-48.3640095494157,12.)); #54583=CARTESIAN_POINT('',(84.1559003948764,-48.3640095494157,13.)); #54584=CARTESIAN_POINT('',(84.1559003948764,-48.3640095494157,12.)); #54585=CARTESIAN_POINT('Origin',(83.6320262312488,-47.0011171601182,13.)); #54586=CARTESIAN_POINT('',(83.6320262312488,-47.0011171601182,13.)); #54587=CARTESIAN_POINT('',(87.8207833019232,-57.8984385563609,13.)); #54588=CARTESIAN_POINT('',(83.6320262312488,-47.0011171601182,12.)); #54589=CARTESIAN_POINT('',(83.6320262312488,-47.0011171601182,13.)); #54590=CARTESIAN_POINT('',(83.6320262312488,-47.0011171601182,12.)); #54591=CARTESIAN_POINT('Origin',(82.3141544222431,-47.0011171601182,13.)); #54592=CARTESIAN_POINT('',(82.3141544222431,-47.0011171601182,13.)); #54593=CARTESIAN_POINT('',(74.7690822869878,-47.0011171601182,13.)); #54594=CARTESIAN_POINT('',(82.3141544222431,-47.0011171601182,12.)); #54595=CARTESIAN_POINT('',(82.3141544222431,-47.0011171601182,13.)); #54596=CARTESIAN_POINT('',(82.3141544222431,-47.0011171601182,12.)); #54597=CARTESIAN_POINT('Origin',(84.7166102289752,-53.0011173985368,13.)); #54598=CARTESIAN_POINT('',(87.8771572425336,-60.8944084142318,13.)); #54599=CARTESIAN_POINT('',(84.7166102289752,-53.0011173985368,12.)); #54600=CARTESIAN_POINT('Origin',(85.3243861257629,-50.0011172793275,12.)); #54601=CARTESIAN_POINT('Ctrl Pts',(48.071117688273,-49.5304486058122,13.)); #54602=CARTESIAN_POINT('Ctrl Pts',(48.071117688273,-49.5304486058122,12.)); #54603=CARTESIAN_POINT('Ctrl Pts',(48.2010927634447,-49.5551192473642,13.)); #54604=CARTESIAN_POINT('Ctrl Pts',(48.2010927634447,-49.5551192473642,12.)); #54605=CARTESIAN_POINT('Ctrl Pts',(48.554764805046,-49.6222499349503,13.)); #54606=CARTESIAN_POINT('Ctrl Pts',(48.554764805046,-49.6222499349503,12.)); #54607=CARTESIAN_POINT('Ctrl Pts',(48.9153525733703,-49.6186648632531,13.)); #54608=CARTESIAN_POINT('Ctrl Pts',(48.9153525733703,-49.6186648632531,12.)); #54609=CARTESIAN_POINT('Ctrl Pts',(49.1434237252221,-49.6163973114854,13.)); #54610=CARTESIAN_POINT('Ctrl Pts',(49.1434237252221,-49.6163973114854,12.)); #54611=CARTESIAN_POINT('',(48.071117688273,-49.5304486058122,13.)); #54612=CARTESIAN_POINT('',(49.1434237252221,-49.6163973114854,13.)); #54613=CARTESIAN_POINT('Ctrl Pts',(48.071117688273,-49.5304486058122,13.)); #54614=CARTESIAN_POINT('Ctrl Pts',(48.2010927634447,-49.5551192473642,13.)); #54615=CARTESIAN_POINT('Ctrl Pts',(48.554764805046,-49.6222499349503,13.)); #54616=CARTESIAN_POINT('Ctrl Pts',(48.9153525733703,-49.6186648632531,13.)); #54617=CARTESIAN_POINT('Ctrl Pts',(49.1434237252221,-49.6163973114854,13.)); #54618=CARTESIAN_POINT('',(48.071117688273,-49.5304486058122,12.)); #54619=CARTESIAN_POINT('',(48.071117688273,-49.5304486058122,13.)); #54620=CARTESIAN_POINT('',(49.1434237252221,-49.6163973114854,12.)); #54621=CARTESIAN_POINT('Ctrl Pts',(48.071117688273,-49.5304486058122,12.)); #54622=CARTESIAN_POINT('Ctrl Pts',(48.2010927634447,-49.5551192473642,12.)); #54623=CARTESIAN_POINT('Ctrl Pts',(48.554764805046,-49.6222499349503,12.)); #54624=CARTESIAN_POINT('Ctrl Pts',(48.9153525733703,-49.6186648632531,12.)); #54625=CARTESIAN_POINT('Ctrl Pts',(49.1434237252221,-49.6163973114854,12.)); #54626=CARTESIAN_POINT('',(49.1434237252221,-49.6163973114854,13.)); #54627=CARTESIAN_POINT('Ctrl Pts',(47.6904907713876,-49.2562332651978,13.)); #54628=CARTESIAN_POINT('Ctrl Pts',(47.6904907713876,-49.2562332651978,12.)); #54629=CARTESIAN_POINT('Ctrl Pts',(47.7405674089455,-49.3152173142458,13.)); #54630=CARTESIAN_POINT('Ctrl Pts',(47.7405674089455,-49.3152173142458,12.)); #54631=CARTESIAN_POINT('Ctrl Pts',(47.844665357444,-49.4378317468327,13.)); #54632=CARTESIAN_POINT('Ctrl Pts',(47.844665357444,-49.4378317468327,12.)); #54633=CARTESIAN_POINT('Ctrl Pts',(47.9937504414219,-49.4988061344585,13.)); #54634=CARTESIAN_POINT('Ctrl Pts',(47.9937504414219,-49.4988061344585,12.)); #54635=CARTESIAN_POINT('Ctrl Pts',(48.071117688273,-49.5304486058122,13.)); #54636=CARTESIAN_POINT('Ctrl Pts',(48.071117688273,-49.5304486058122,12.)); #54637=CARTESIAN_POINT('',(47.6904907713876,-49.2562332651978,13.)); #54638=CARTESIAN_POINT('Ctrl Pts',(47.6904907713876,-49.2562332651978,13.)); #54639=CARTESIAN_POINT('Ctrl Pts',(47.7405674089455,-49.3152173142458,13.)); #54640=CARTESIAN_POINT('Ctrl Pts',(47.844665357444,-49.4378317468327,13.)); #54641=CARTESIAN_POINT('Ctrl Pts',(47.9937504414219,-49.4988061344585,13.)); #54642=CARTESIAN_POINT('Ctrl Pts',(48.071117688273,-49.5304486058122,13.)); #54643=CARTESIAN_POINT('',(47.6904907713876,-49.2562332651978,12.)); #54644=CARTESIAN_POINT('',(47.6904907713876,-49.2562332651978,13.)); #54645=CARTESIAN_POINT('Ctrl Pts',(47.6904907713876,-49.2562332651978,12.)); #54646=CARTESIAN_POINT('Ctrl Pts',(47.7405674089455,-49.3152173142458,12.)); #54647=CARTESIAN_POINT('Ctrl Pts',(47.844665357444,-49.4378317468327,12.)); #54648=CARTESIAN_POINT('Ctrl Pts',(47.9937504414219,-49.4988061344585,12.)); #54649=CARTESIAN_POINT('Ctrl Pts',(48.071117688273,-49.5304486058122,12.)); #54650=CARTESIAN_POINT('Ctrl Pts',(47.5595214854226,-48.7978431485062,13.)); #54651=CARTESIAN_POINT('Ctrl Pts',(47.5595214854226,-48.7978431485062,12.)); #54652=CARTESIAN_POINT('Ctrl Pts',(47.5639581999011,-48.8829613771238,13.)); #54653=CARTESIAN_POINT('Ctrl Pts',(47.5639581999011,-48.8829613771238,12.)); #54654=CARTESIAN_POINT('Ctrl Pts',(47.5724596984927,-49.0460623619241,13.)); #54655=CARTESIAN_POINT('Ctrl Pts',(47.5724596984927,-49.0460623619241,12.)); #54656=CARTESIAN_POINT('Ctrl Pts',(47.6523115547303,-49.1882498075003,13.)); #54657=CARTESIAN_POINT('Ctrl Pts',(47.6523115547303,-49.1882498075003,12.)); #54658=CARTESIAN_POINT('Ctrl Pts',(47.6904907713876,-49.2562332651978,13.)); #54659=CARTESIAN_POINT('Ctrl Pts',(47.6904907713876,-49.2562332651978,12.)); #54660=CARTESIAN_POINT('',(47.5595214854226,-48.7978431485062,13.)); #54661=CARTESIAN_POINT('Ctrl Pts',(47.5595214854226,-48.7978431485062,13.)); #54662=CARTESIAN_POINT('Ctrl Pts',(47.5639581999011,-48.8829613771238,13.)); #54663=CARTESIAN_POINT('Ctrl Pts',(47.5724596984927,-49.0460623619241,13.)); #54664=CARTESIAN_POINT('Ctrl Pts',(47.6523115547303,-49.1882498075003,13.)); #54665=CARTESIAN_POINT('Ctrl Pts',(47.6904907713876,-49.2562332651978,13.)); #54666=CARTESIAN_POINT('',(47.5595214854226,-48.7978431485062,12.)); #54667=CARTESIAN_POINT('',(47.5595214854226,-48.7978431485062,13.)); #54668=CARTESIAN_POINT('Ctrl Pts',(47.5595214854226,-48.7978431485062,12.)); #54669=CARTESIAN_POINT('Ctrl Pts',(47.5639581999011,-48.8829613771238,12.)); #54670=CARTESIAN_POINT('Ctrl Pts',(47.5724596984927,-49.0460623619241,12.)); #54671=CARTESIAN_POINT('Ctrl Pts',(47.6523115547303,-49.1882498075003,12.)); #54672=CARTESIAN_POINT('Ctrl Pts',(47.6904907713876,-49.2562332651978,12.)); #54673=CARTESIAN_POINT('Ctrl Pts',(47.7314183007226,-48.2862469456559,13.)); #54674=CARTESIAN_POINT('Ctrl Pts',(47.7314183007226,-48.2862469456559,12.)); #54675=CARTESIAN_POINT('Ctrl Pts',(47.6813279996841,-48.3584608575014,13.)); #54676=CARTESIAN_POINT('Ctrl Pts',(47.6813279996841,-48.3584608575014,12.)); #54677=CARTESIAN_POINT('Ctrl Pts',(47.574910079786,-48.5118808635102,13.)); #54678=CARTESIAN_POINT('Ctrl Pts',(47.574910079786,-48.5118808635102,12.)); #54679=CARTESIAN_POINT('Ctrl Pts',(47.5648476091659,-48.6988691629799,13.)); #54680=CARTESIAN_POINT('Ctrl Pts',(47.5648476091659,-48.6988691629799,12.)); #54681=CARTESIAN_POINT('Ctrl Pts',(47.5595214854226,-48.7978431485062,13.)); #54682=CARTESIAN_POINT('Ctrl Pts',(47.5595214854226,-48.7978431485062,12.)); #54683=CARTESIAN_POINT('',(47.7314183007226,-48.2862469456559,13.)); #54684=CARTESIAN_POINT('Ctrl Pts',(47.7314183007226,-48.2862469456559,13.)); #54685=CARTESIAN_POINT('Ctrl Pts',(47.6813279996841,-48.3584608575014,13.)); #54686=CARTESIAN_POINT('Ctrl Pts',(47.574910079786,-48.5118808635102,13.)); #54687=CARTESIAN_POINT('Ctrl Pts',(47.5648476091659,-48.6988691629799,13.)); #54688=CARTESIAN_POINT('Ctrl Pts',(47.5595214854226,-48.7978431485062,13.)); #54689=CARTESIAN_POINT('',(47.7314183007226,-48.2862469456559,12.)); #54690=CARTESIAN_POINT('',(47.7314183007226,-48.2862469456559,13.)); #54691=CARTESIAN_POINT('Ctrl Pts',(47.7314183007226,-48.2862469456559,12.)); #54692=CARTESIAN_POINT('Ctrl Pts',(47.6813279996841,-48.3584608575014,12.)); #54693=CARTESIAN_POINT('Ctrl Pts',(47.574910079786,-48.5118808635102,12.)); #54694=CARTESIAN_POINT('Ctrl Pts',(47.5648476091659,-48.6988691629799,12.)); #54695=CARTESIAN_POINT('Ctrl Pts',(47.5595214854226,-48.7978431485062,12.)); #54696=CARTESIAN_POINT('Ctrl Pts',(48.1693443547235,-48.0488660834199,13.)); #54697=CARTESIAN_POINT('Ctrl Pts',(48.1693443547235,-48.0488660834199,12.)); #54698=CARTESIAN_POINT('Ctrl Pts',(48.0842464259686,-48.0702844926295,13.)); #54699=CARTESIAN_POINT('Ctrl Pts',(48.0842464259686,-48.0702844926295,12.)); #54700=CARTESIAN_POINT('Ctrl Pts',(47.9178852545124,-48.1121561538905,13.)); #54701=CARTESIAN_POINT('Ctrl Pts',(47.9178852545124,-48.1121561538905,12.)); #54702=CARTESIAN_POINT('Ctrl Pts',(47.7926114160023,-48.2291153323962,13.)); #54703=CARTESIAN_POINT('Ctrl Pts',(47.7926114160023,-48.2291153323962,12.)); #54704=CARTESIAN_POINT('Ctrl Pts',(47.7314183007226,-48.2862469456559,13.)); #54705=CARTESIAN_POINT('Ctrl Pts',(47.7314183007226,-48.2862469456559,12.)); #54706=CARTESIAN_POINT('',(48.1693443547235,-48.0488660834199,13.)); #54707=CARTESIAN_POINT('Ctrl Pts',(48.1693443547235,-48.0488660834199,13.)); #54708=CARTESIAN_POINT('Ctrl Pts',(48.0842464259686,-48.0702844926295,13.)); #54709=CARTESIAN_POINT('Ctrl Pts',(47.9178852545124,-48.1121561538905,13.)); #54710=CARTESIAN_POINT('Ctrl Pts',(47.7926114160023,-48.2291153323962,13.)); #54711=CARTESIAN_POINT('Ctrl Pts',(47.7314183007226,-48.2862469456559,13.)); #54712=CARTESIAN_POINT('',(48.1693443547235,-48.0488660834199,12.)); #54713=CARTESIAN_POINT('',(48.1693443547235,-48.0488660834199,13.)); #54714=CARTESIAN_POINT('Ctrl Pts',(48.1693443547235,-48.0488660834199,12.)); #54715=CARTESIAN_POINT('Ctrl Pts',(48.0842464259686,-48.0702844926295,12.)); #54716=CARTESIAN_POINT('Ctrl Pts',(47.9178852545124,-48.1121561538905,12.)); #54717=CARTESIAN_POINT('Ctrl Pts',(47.7926114160023,-48.2291153323962,12.)); #54718=CARTESIAN_POINT('Ctrl Pts',(47.7314183007226,-48.2862469456559,12.)); #54719=CARTESIAN_POINT('Ctrl Pts',(49.0001764784799,-48.0120310089951,13.)); #54720=CARTESIAN_POINT('Ctrl Pts',(49.0001764784799,-48.0120310089951,12.)); #54721=CARTESIAN_POINT('Ctrl Pts',(48.8215598003906,-48.0107513651759,13.)); #54722=CARTESIAN_POINT('Ctrl Pts',(48.8215598003906,-48.0107513651759,12.)); #54723=CARTESIAN_POINT('Ctrl Pts',(48.5438276313022,-48.0087616391471,13.)); #54724=CARTESIAN_POINT('Ctrl Pts',(48.5438276313022,-48.0087616391471,12.)); #54725=CARTESIAN_POINT('Ctrl Pts',(48.2678379842724,-48.0383181296806,13.)); #54726=CARTESIAN_POINT('Ctrl Pts',(48.2678379842724,-48.0383181296806,12.)); #54727=CARTESIAN_POINT('Ctrl Pts',(48.1693443547235,-48.0488660834199,13.)); #54728=CARTESIAN_POINT('Ctrl Pts',(48.1693443547235,-48.0488660834199,12.)); #54729=CARTESIAN_POINT('',(49.0001764784799,-48.0120310089951,13.)); #54730=CARTESIAN_POINT('Ctrl Pts',(49.0001764784799,-48.0120310089951,13.)); #54731=CARTESIAN_POINT('Ctrl Pts',(48.8215598003906,-48.0107513651759,13.)); #54732=CARTESIAN_POINT('Ctrl Pts',(48.5438276313022,-48.0087616391471,13.)); #54733=CARTESIAN_POINT('Ctrl Pts',(48.2678379842724,-48.0383181296806,13.)); #54734=CARTESIAN_POINT('Ctrl Pts',(48.1693443547235,-48.0488660834199,13.)); #54735=CARTESIAN_POINT('',(49.0001764784799,-48.0120310089951,12.)); #54736=CARTESIAN_POINT('',(49.0001764784799,-48.0120310089951,13.)); #54737=CARTESIAN_POINT('Ctrl Pts',(49.0001764784799,-48.0120310089951,12.)); #54738=CARTESIAN_POINT('Ctrl Pts',(48.8215598003906,-48.0107513651759,12.)); #54739=CARTESIAN_POINT('Ctrl Pts',(48.5438276313022,-48.0087616391471,12.)); #54740=CARTESIAN_POINT('Ctrl Pts',(48.2678379842724,-48.0383181296806,12.)); #54741=CARTESIAN_POINT('Ctrl Pts',(48.1693443547235,-48.0488660834199,12.)); #54742=CARTESIAN_POINT('Origin',(50.1215955506311,-48.0120310089951,13.)); #54743=CARTESIAN_POINT('',(50.1215955506311,-48.0120310089951,13.)); #54744=CARTESIAN_POINT('',(58.6728028511818,-48.0120310089951,13.)); #54745=CARTESIAN_POINT('',(50.1215955506311,-48.0120310089951,12.)); #54746=CARTESIAN_POINT('',(50.1215955506311,-48.0120310089951,13.)); #54747=CARTESIAN_POINT('',(50.1215955506311,-48.0120310089951,12.)); #54748=CARTESIAN_POINT('Origin',(50.1215955506311,-49.6163973114854,13.)); #54749=CARTESIAN_POINT('',(50.1215955506311,-49.6163973114854,13.)); #54750=CARTESIAN_POINT('',(50.1215955506311,-63.9696604879883,13.)); #54751=CARTESIAN_POINT('',(50.1215955506311,-49.6163973114854,12.)); #54752=CARTESIAN_POINT('',(50.1215955506311,-49.6163973114854,13.)); #54753=CARTESIAN_POINT('',(50.1215955506311,-49.6163973114854,12.)); #54754=CARTESIAN_POINT('Origin',(49.1434237252221,-49.6163973114854,13.)); #54755=CARTESIAN_POINT('',(58.1837169384774,-49.6163973114854,13.)); #54756=CARTESIAN_POINT('',(49.1434237252221,-49.6163973114854,12.)); #54757=CARTESIAN_POINT('Ctrl Pts',(48.3903542052255,-51.9820174477464,13.)); #54758=CARTESIAN_POINT('Ctrl Pts',(48.3903542052255,-51.9820174477464,12.)); #54759=CARTESIAN_POINT('Ctrl Pts',(48.5066385576703,-51.9878497598279,13.)); #54760=CARTESIAN_POINT('Ctrl Pts',(48.5066385576703,-51.9878497598279,12.)); #54761=CARTESIAN_POINT('Ctrl Pts',(48.8515261712553,-52.0051478068412,13.)); #54762=CARTESIAN_POINT('Ctrl Pts',(48.8515261712553,-52.0051478068412,12.)); #54763=CARTESIAN_POINT('Ctrl Pts',(49.1968997754651,-52.0035443417392,13.)); #54764=CARTESIAN_POINT('Ctrl Pts',(49.1968997754651,-52.0035443417392,12.)); #54765=CARTESIAN_POINT('Ctrl Pts',(49.4258251677499,-52.0024815104371,13.)); #54766=CARTESIAN_POINT('Ctrl Pts',(49.4258251677499,-52.0024815104371,12.)); #54767=CARTESIAN_POINT('',(48.3903542052255,-51.9820174477464,13.)); #54768=CARTESIAN_POINT('',(49.4258251677499,-52.0024815104371,13.)); #54769=CARTESIAN_POINT('Ctrl Pts',(48.3903542052255,-51.9820174477464,13.)); #54770=CARTESIAN_POINT('Ctrl Pts',(48.5066385576703,-51.9878497598279,13.)); #54771=CARTESIAN_POINT('Ctrl Pts',(48.8515261712553,-52.0051478068412,13.)); #54772=CARTESIAN_POINT('Ctrl Pts',(49.1968997754651,-52.0035443417392,13.)); #54773=CARTESIAN_POINT('Ctrl Pts',(49.4258251677499,-52.0024815104371,13.)); #54774=CARTESIAN_POINT('',(48.3903542052255,-51.9820174477464,12.)); #54775=CARTESIAN_POINT('',(48.3903542052255,-51.9820174477464,13.)); #54776=CARTESIAN_POINT('',(49.4258251677499,-52.0024815104371,12.)); #54777=CARTESIAN_POINT('Ctrl Pts',(48.3903542052255,-51.9820174477464,12.)); #54778=CARTESIAN_POINT('Ctrl Pts',(48.5066385576703,-51.9878497598279,12.)); #54779=CARTESIAN_POINT('Ctrl Pts',(48.8515261712553,-52.0051478068412,12.)); #54780=CARTESIAN_POINT('Ctrl Pts',(49.1968997754651,-52.0035443417392,12.)); #54781=CARTESIAN_POINT('Ctrl Pts',(49.4258251677499,-52.0024815104371,12.)); #54782=CARTESIAN_POINT('',(49.4258251677499,-52.0024815104371,13.)); #54783=CARTESIAN_POINT('Ctrl Pts',(47.9360565434442,-51.7691936991578,13.)); #54784=CARTESIAN_POINT('Ctrl Pts',(47.9360565434442,-51.7691936991578,12.)); #54785=CARTESIAN_POINT('Ctrl Pts',(47.9961719667194,-51.8223944606701,13.)); #54786=CARTESIAN_POINT('Ctrl Pts',(47.9961719667194,-51.8223944606701,12.)); #54787=CARTESIAN_POINT('Ctrl Pts',(48.1261681905293,-51.9374381170835,13.)); #54788=CARTESIAN_POINT('Ctrl Pts',(48.1261681905293,-51.9374381170835,12.)); #54789=CARTESIAN_POINT('Ctrl Pts',(48.2979897613502,-51.9664316678187,13.)); #54790=CARTESIAN_POINT('Ctrl Pts',(48.2979897613502,-51.9664316678187,12.)); #54791=CARTESIAN_POINT('Ctrl Pts',(48.3903542052255,-51.9820174477464,13.)); #54792=CARTESIAN_POINT('Ctrl Pts',(48.3903542052255,-51.9820174477464,12.)); #54793=CARTESIAN_POINT('',(47.9360565434442,-51.7691936991578,13.)); #54794=CARTESIAN_POINT('Ctrl Pts',(47.9360565434442,-51.7691936991578,13.)); #54795=CARTESIAN_POINT('Ctrl Pts',(47.9961719667194,-51.8223944606701,13.)); #54796=CARTESIAN_POINT('Ctrl Pts',(48.1261681905293,-51.9374381170835,13.)); #54797=CARTESIAN_POINT('Ctrl Pts',(48.2979897613502,-51.9664316678187,13.)); #54798=CARTESIAN_POINT('Ctrl Pts',(48.3903542052255,-51.9820174477464,13.)); #54799=CARTESIAN_POINT('',(47.9360565434442,-51.7691936991578,12.)); #54800=CARTESIAN_POINT('',(47.9360565434442,-51.7691936991578,13.)); #54801=CARTESIAN_POINT('Ctrl Pts',(47.9360565434442,-51.7691936991578,12.)); #54802=CARTESIAN_POINT('Ctrl Pts',(47.9961719667194,-51.8223944606701,12.)); #54803=CARTESIAN_POINT('Ctrl Pts',(48.1261681905293,-51.9374381170835,12.)); #54804=CARTESIAN_POINT('Ctrl Pts',(48.2979897613502,-51.9664316678187,12.)); #54805=CARTESIAN_POINT('Ctrl Pts',(48.3903542052255,-51.9820174477464,12.)); #54806=CARTESIAN_POINT('Ctrl Pts',(47.7805313359247,-51.3189890883332,13.)); #54807=CARTESIAN_POINT('Ctrl Pts',(47.7805313359247,-51.3189890883332,12.)); #54808=CARTESIAN_POINT('Ctrl Pts',(47.785600153434,-51.4057024687948,13.)); #54809=CARTESIAN_POINT('Ctrl Pts',(47.785600153434,-51.4057024687948,12.)); #54810=CARTESIAN_POINT('Ctrl Pts',(47.7952510683983,-51.570802802265,13.)); #54811=CARTESIAN_POINT('Ctrl Pts',(47.7952510683983,-51.570802802265,12.)); #54812=CARTESIAN_POINT('Ctrl Pts',(47.8907264060255,-51.7053248288896,13.)); #54813=CARTESIAN_POINT('Ctrl Pts',(47.8907264060255,-51.7053248288896,12.)); #54814=CARTESIAN_POINT('Ctrl Pts',(47.9360565434442,-51.7691936991578,13.)); #54815=CARTESIAN_POINT('Ctrl Pts',(47.9360565434442,-51.7691936991578,12.)); #54816=CARTESIAN_POINT('',(47.7805313359247,-51.3189890883332,13.)); #54817=CARTESIAN_POINT('Ctrl Pts',(47.7805313359247,-51.3189890883332,13.)); #54818=CARTESIAN_POINT('Ctrl Pts',(47.785600153434,-51.4057024687948,13.)); #54819=CARTESIAN_POINT('Ctrl Pts',(47.7952510683983,-51.570802802265,13.)); #54820=CARTESIAN_POINT('Ctrl Pts',(47.8907264060255,-51.7053248288896,13.)); #54821=CARTESIAN_POINT('Ctrl Pts',(47.9360565434442,-51.7691936991578,13.)); #54822=CARTESIAN_POINT('',(47.7805313359247,-51.3189890883332,12.)); #54823=CARTESIAN_POINT('',(47.7805313359247,-51.3189890883332,13.)); #54824=CARTESIAN_POINT('Ctrl Pts',(47.7805313359247,-51.3189890883332,12.)); #54825=CARTESIAN_POINT('Ctrl Pts',(47.785600153434,-51.4057024687948,12.)); #54826=CARTESIAN_POINT('Ctrl Pts',(47.7952510683983,-51.570802802265,12.)); #54827=CARTESIAN_POINT('Ctrl Pts',(47.8907264060255,-51.7053248288896,12.)); #54828=CARTESIAN_POINT('Ctrl Pts',(47.9360565434442,-51.7691936991578,12.)); #54829=CARTESIAN_POINT('Ctrl Pts',(47.9606130610452,-50.8483204148179,13.)); #54830=CARTESIAN_POINT('Ctrl Pts',(47.9606130610452,-50.8483204148179,12.)); #54831=CARTESIAN_POINT('Ctrl Pts',(47.9081090871626,-50.914627633848,13.)); #54832=CARTESIAN_POINT('Ctrl Pts',(47.9081090871626,-50.914627633848,12.)); #54833=CARTESIAN_POINT('Ctrl Pts',(47.7990688736509,-51.0523344165112,13.)); #54834=CARTESIAN_POINT('Ctrl Pts',(47.7990688736509,-51.0523344165112,12.)); #54835=CARTESIAN_POINT('Ctrl Pts',(47.7868609960614,-51.227939593442,13.)); #54836=CARTESIAN_POINT('Ctrl Pts',(47.7868609960614,-51.227939593442,12.)); #54837=CARTESIAN_POINT('Ctrl Pts',(47.7805313359247,-51.3189890883332,13.)); #54838=CARTESIAN_POINT('Ctrl Pts',(47.7805313359247,-51.3189890883332,12.)); #54839=CARTESIAN_POINT('',(47.9606130610452,-50.8483204148179,13.)); #54840=CARTESIAN_POINT('Ctrl Pts',(47.9606130610452,-50.8483204148179,13.)); #54841=CARTESIAN_POINT('Ctrl Pts',(47.9081090871626,-50.914627633848,13.)); #54842=CARTESIAN_POINT('Ctrl Pts',(47.7990688736509,-51.0523344165112,13.)); #54843=CARTESIAN_POINT('Ctrl Pts',(47.7868609960614,-51.227939593442,13.)); #54844=CARTESIAN_POINT('Ctrl Pts',(47.7805313359247,-51.3189890883332,13.)); #54845=CARTESIAN_POINT('',(47.9606130610452,-50.8483204148179,12.)); #54846=CARTESIAN_POINT('',(47.9606130610452,-50.8483204148179,13.)); #54847=CARTESIAN_POINT('Ctrl Pts',(47.9606130610452,-50.8483204148179,12.)); #54848=CARTESIAN_POINT('Ctrl Pts',(47.9081090871626,-50.914627633848,12.)); #54849=CARTESIAN_POINT('Ctrl Pts',(47.7990688736509,-51.0523344165112,12.)); #54850=CARTESIAN_POINT('Ctrl Pts',(47.7868609960614,-51.227939593442,12.)); #54851=CARTESIAN_POINT('Ctrl Pts',(47.7805313359247,-51.3189890883332,12.)); #54852=CARTESIAN_POINT('Ctrl Pts',(48.4476527462945,-50.6354960701829,13.)); #54853=CARTESIAN_POINT('Ctrl Pts',(48.4476527462945,-50.6354960701829,12.)); #54854=CARTESIAN_POINT('Ctrl Pts',(48.3517092197146,-50.6515545835166,13.)); #54855=CARTESIAN_POINT('Ctrl Pts',(48.3517092197146,-50.6515545835166,12.)); #54856=CARTESIAN_POINT('Ctrl Pts',(48.171056246844,-50.6817913100267,13.)); #54857=CARTESIAN_POINT('Ctrl Pts',(48.171056246844,-50.6817913100267,12.)); #54858=CARTESIAN_POINT('Ctrl Pts',(48.0277910955273,-50.7951607085463,13.)); #54859=CARTESIAN_POINT('Ctrl Pts',(48.0277910955273,-50.7951607085463,12.)); #54860=CARTESIAN_POINT('Ctrl Pts',(47.9606130610452,-50.8483204148179,13.)); #54861=CARTESIAN_POINT('Ctrl Pts',(47.9606130610452,-50.8483204148179,12.)); #54862=CARTESIAN_POINT('',(48.4476527462945,-50.6354960701829,13.)); #54863=CARTESIAN_POINT('Ctrl Pts',(48.4476527462945,-50.6354960701829,13.)); #54864=CARTESIAN_POINT('Ctrl Pts',(48.3517092197146,-50.6515545835166,13.)); #54865=CARTESIAN_POINT('Ctrl Pts',(48.171056246844,-50.6817913100267,13.)); #54866=CARTESIAN_POINT('Ctrl Pts',(48.0277910955273,-50.7951607085463,13.)); #54867=CARTESIAN_POINT('Ctrl Pts',(47.9606130610452,-50.8483204148179,13.)); #54868=CARTESIAN_POINT('',(48.4476527462945,-50.6354960701829,12.)); #54869=CARTESIAN_POINT('',(48.4476527462945,-50.6354960701829,13.)); #54870=CARTESIAN_POINT('Ctrl Pts',(48.4476527462945,-50.6354960701829,12.)); #54871=CARTESIAN_POINT('Ctrl Pts',(48.3517092197146,-50.6515545835166,12.)); #54872=CARTESIAN_POINT('Ctrl Pts',(48.171056246844,-50.6817913100267,12.)); #54873=CARTESIAN_POINT('Ctrl Pts',(48.0277910955273,-50.7951607085463,12.)); #54874=CARTESIAN_POINT('Ctrl Pts',(47.9606130610452,-50.8483204148179,12.)); #54875=CARTESIAN_POINT('Ctrl Pts',(49.327597905253,-50.6150326035386,13.)); #54876=CARTESIAN_POINT('Ctrl Pts',(49.327597905253,-50.6150326035386,12.)); #54877=CARTESIAN_POINT('Ctrl Pts',(49.1361851620805,-50.6141682648372,13.)); #54878=CARTESIAN_POINT('Ctrl Pts',(49.1361851620805,-50.6141682648372,12.)); #54879=CARTESIAN_POINT('Ctrl Pts',(48.8426295619709,-50.6128426923494,13.)); #54880=CARTESIAN_POINT('Ctrl Pts',(48.8426295619709,-50.6128426923494,12.)); #54881=CARTESIAN_POINT('Ctrl Pts',(48.5496093237304,-50.6296484842497,13.)); #54882=CARTESIAN_POINT('Ctrl Pts',(48.5496093237304,-50.6296484842497,12.)); #54883=CARTESIAN_POINT('Ctrl Pts',(48.4476527462945,-50.6354960701829,13.)); #54884=CARTESIAN_POINT('Ctrl Pts',(48.4476527462945,-50.6354960701829,12.)); #54885=CARTESIAN_POINT('',(49.327597905253,-50.6150326035386,13.)); #54886=CARTESIAN_POINT('Ctrl Pts',(49.327597905253,-50.6150326035386,13.)); #54887=CARTESIAN_POINT('Ctrl Pts',(49.1361851620805,-50.6141682648372,13.)); #54888=CARTESIAN_POINT('Ctrl Pts',(48.8426295619709,-50.6128426923494,13.)); #54889=CARTESIAN_POINT('Ctrl Pts',(48.5496093237304,-50.6296484842497,13.)); #54890=CARTESIAN_POINT('Ctrl Pts',(48.4476527462945,-50.6354960701829,13.)); #54891=CARTESIAN_POINT('',(49.327597905253,-50.6150326035386,12.)); #54892=CARTESIAN_POINT('',(49.327597905253,-50.6150326035386,13.)); #54893=CARTESIAN_POINT('Ctrl Pts',(49.327597905253,-50.6150326035386,12.)); #54894=CARTESIAN_POINT('Ctrl Pts',(49.1361851620805,-50.6141682648372,12.)); #54895=CARTESIAN_POINT('Ctrl Pts',(48.8426295619709,-50.6128426923494,12.)); #54896=CARTESIAN_POINT('Ctrl Pts',(48.5496093237304,-50.6296484842497,12.)); #54897=CARTESIAN_POINT('Ctrl Pts',(48.4476527462945,-50.6354960701829,12.)); #54898=CARTESIAN_POINT('Origin',(50.1215955506311,-50.6150326035386,13.)); #54899=CARTESIAN_POINT('',(50.1215955506311,-50.6150326035386,13.)); #54900=CARTESIAN_POINT('',(58.6728028511818,-50.6150326035386,13.)); #54901=CARTESIAN_POINT('',(50.1215955506311,-50.6150326035386,12.)); #54902=CARTESIAN_POINT('',(50.1215955506311,-50.6150326035386,13.)); #54903=CARTESIAN_POINT('',(50.1215955506311,-50.6150326035386,12.)); #54904=CARTESIAN_POINT('Origin',(50.1215955506311,-52.0024815104371,13.)); #54905=CARTESIAN_POINT('',(50.1215955506311,-52.0024815104371,13.)); #54906=CARTESIAN_POINT('',(50.1215955506311,-65.1627025874642,13.)); #54907=CARTESIAN_POINT('',(50.1215955506311,-52.0024815104371,12.)); #54908=CARTESIAN_POINT('',(50.1215955506311,-52.0024815104371,13.)); #54909=CARTESIAN_POINT('',(50.1215955506311,-52.0024815104371,12.)); #54910=CARTESIAN_POINT('Origin',(49.4258251677499,-52.0024815104371,13.)); #54911=CARTESIAN_POINT('',(58.3249176597413,-52.0024815104371,13.)); #54912=CARTESIAN_POINT('',(49.4258251677499,-52.0024815104371,12.)); #54913=CARTESIAN_POINT('Origin',(49.2907634268747,-47.0011171601182,13.)); #54914=CARTESIAN_POINT('',(49.2907634268747,-47.0011171601182,13.)); #54915=CARTESIAN_POINT('',(51.3330554853425,-47.0011171601182,13.)); #54916=CARTESIAN_POINT('',(58.2573867893036,-47.0011171601182,13.)); #54917=CARTESIAN_POINT('',(49.2907634268747,-47.0011171601182,12.)); #54918=CARTESIAN_POINT('',(49.2907634268747,-47.0011171601182,13.)); #54919=CARTESIAN_POINT('',(51.3330554853425,-47.0011171601182,12.)); #54920=CARTESIAN_POINT('',(49.2907634268747,-47.0011171601182,12.)); #54921=CARTESIAN_POINT('',(51.3330554853425,-47.0011171601182,13.)); #54922=CARTESIAN_POINT('Ctrl Pts',(47.8296449671731,-47.0420446894532,13.)); #54923=CARTESIAN_POINT('Ctrl Pts',(47.8296449671731,-47.0420446894532,12.)); #54924=CARTESIAN_POINT('Ctrl Pts',(48.0018452649869,-47.0320705221409,13.)); #54925=CARTESIAN_POINT('Ctrl Pts',(48.0018452649869,-47.0320705221409,12.)); #54926=CARTESIAN_POINT('Ctrl Pts',(48.4884003524904,-47.003888330176,13.)); #54927=CARTESIAN_POINT('Ctrl Pts',(48.4884003524904,-47.003888330176,12.)); #54928=CARTESIAN_POINT('Ctrl Pts',(48.975838261528,-47.0022048362794,13.)); #54929=CARTESIAN_POINT('Ctrl Pts',(48.975838261528,-47.0022048362794,12.)); #54930=CARTESIAN_POINT('Ctrl Pts',(49.2907634268747,-47.0011171601182,13.)); #54931=CARTESIAN_POINT('Ctrl Pts',(49.2907634268747,-47.0011171601182,12.)); #54932=CARTESIAN_POINT('',(47.8296449671731,-47.0420446894532,13.)); #54933=CARTESIAN_POINT('Ctrl Pts',(47.8296449671731,-47.0420446894532,13.)); #54934=CARTESIAN_POINT('Ctrl Pts',(48.0018452649869,-47.0320705221409,13.)); #54935=CARTESIAN_POINT('Ctrl Pts',(48.4884003524904,-47.003888330176,13.)); #54936=CARTESIAN_POINT('Ctrl Pts',(48.975838261528,-47.0022048362794,13.)); #54937=CARTESIAN_POINT('Ctrl Pts',(49.2907634268747,-47.0011171601182,13.)); #54938=CARTESIAN_POINT('',(47.8296449671731,-47.0420446894532,12.)); #54939=CARTESIAN_POINT('',(47.8296449671731,-47.0420446894532,13.)); #54940=CARTESIAN_POINT('Ctrl Pts',(47.8296449671731,-47.0420446894532,12.)); #54941=CARTESIAN_POINT('Ctrl Pts',(48.0018452649869,-47.0320705221409,12.)); #54942=CARTESIAN_POINT('Ctrl Pts',(48.4884003524904,-47.003888330176,12.)); #54943=CARTESIAN_POINT('Ctrl Pts',(48.975838261528,-47.0022048362794,12.)); #54944=CARTESIAN_POINT('Ctrl Pts',(49.2907634268747,-47.0011171601182,12.)); #54945=CARTESIAN_POINT('Ctrl Pts',(47.019276310061,-47.324446131981,13.)); #54946=CARTESIAN_POINT('Ctrl Pts',(47.019276310061,-47.324446131981,12.)); #54947=CARTESIAN_POINT('Ctrl Pts',(47.1386362514818,-47.2550084038331,13.)); #54948=CARTESIAN_POINT('Ctrl Pts',(47.1386362514818,-47.2550084038331,12.)); #54949=CARTESIAN_POINT('Ctrl Pts',(47.3901862389075,-47.1086690253569,13.)); #54950=CARTESIAN_POINT('Ctrl Pts',(47.3901862389075,-47.1086690253569,12.)); #54951=CARTESIAN_POINT('Ctrl Pts',(47.678261049818,-47.0649953155566,13.)); #54952=CARTESIAN_POINT('Ctrl Pts',(47.678261049818,-47.0649953155566,12.)); #54953=CARTESIAN_POINT('Ctrl Pts',(47.8296449671731,-47.0420446894532,13.)); #54954=CARTESIAN_POINT('Ctrl Pts',(47.8296449671731,-47.0420446894532,12.)); #54955=CARTESIAN_POINT('',(47.019276310061,-47.324446131981,13.)); #54956=CARTESIAN_POINT('Ctrl Pts',(47.019276310061,-47.324446131981,13.)); #54957=CARTESIAN_POINT('Ctrl Pts',(47.1386362514818,-47.2550084038331,13.)); #54958=CARTESIAN_POINT('Ctrl Pts',(47.3901862389075,-47.1086690253569,13.)); #54959=CARTESIAN_POINT('Ctrl Pts',(47.678261049818,-47.0649953155566,13.)); #54960=CARTESIAN_POINT('Ctrl Pts',(47.8296449671731,-47.0420446894532,13.)); #54961=CARTESIAN_POINT('',(47.019276310061,-47.324446131981,12.)); #54962=CARTESIAN_POINT('',(47.019276310061,-47.324446131981,13.)); #54963=CARTESIAN_POINT('Ctrl Pts',(47.019276310061,-47.324446131981,12.)); #54964=CARTESIAN_POINT('Ctrl Pts',(47.1386362514818,-47.2550084038331,12.)); #54965=CARTESIAN_POINT('Ctrl Pts',(47.3901862389075,-47.1086690253569,12.)); #54966=CARTESIAN_POINT('Ctrl Pts',(47.678261049818,-47.0649953155566,12.)); #54967=CARTESIAN_POINT('Ctrl Pts',(47.8296449671731,-47.0420446894532,12.)); #54968=CARTESIAN_POINT('Ctrl Pts',(46.4994946013437,-47.9424539111024,13.)); #54969=CARTESIAN_POINT('Ctrl Pts',(46.4994946013437,-47.9424539111024,12.)); #54970=CARTESIAN_POINT('Ctrl Pts',(46.5674008015638,-47.8211036626041,13.)); #54971=CARTESIAN_POINT('Ctrl Pts',(46.5674008015638,-47.8211036626041,12.)); #54972=CARTESIAN_POINT('Ctrl Pts',(46.7012813370654,-47.581855461416,13.)); #54973=CARTESIAN_POINT('Ctrl Pts',(46.7012813370654,-47.581855461416,12.)); #54974=CARTESIAN_POINT('Ctrl Pts',(46.9143026014693,-47.4094198398429,13.)); #54975=CARTESIAN_POINT('Ctrl Pts',(46.9143026014693,-47.4094198398429,12.)); #54976=CARTESIAN_POINT('Ctrl Pts',(47.019276310061,-47.324446131981,13.)); #54977=CARTESIAN_POINT('Ctrl Pts',(47.019276310061,-47.324446131981,12.)); #54978=CARTESIAN_POINT('',(46.4994946013437,-47.9424539111024,13.)); #54979=CARTESIAN_POINT('Ctrl Pts',(46.4994946013437,-47.9424539111024,13.)); #54980=CARTESIAN_POINT('Ctrl Pts',(46.5674008015638,-47.8211036626041,13.)); #54981=CARTESIAN_POINT('Ctrl Pts',(46.7012813370654,-47.581855461416,13.)); #54982=CARTESIAN_POINT('Ctrl Pts',(46.9143026014693,-47.4094198398429,13.)); #54983=CARTESIAN_POINT('Ctrl Pts',(47.019276310061,-47.324446131981,13.)); #54984=CARTESIAN_POINT('',(46.4994946013437,-47.9424539111024,12.)); #54985=CARTESIAN_POINT('',(46.4994946013437,-47.9424539111024,13.)); #54986=CARTESIAN_POINT('Ctrl Pts',(46.4994946013437,-47.9424539111024,12.)); #54987=CARTESIAN_POINT('Ctrl Pts',(46.5674008015638,-47.8211036626041,12.)); #54988=CARTESIAN_POINT('Ctrl Pts',(46.7012813370654,-47.581855461416,12.)); #54989=CARTESIAN_POINT('Ctrl Pts',(46.9143026014693,-47.4094198398429,12.)); #54990=CARTESIAN_POINT('Ctrl Pts',(47.019276310061,-47.324446131981,12.)); #54991=CARTESIAN_POINT('Ctrl Pts',(46.3071349154458,-48.7405440113908,13.)); #54992=CARTESIAN_POINT('Ctrl Pts',(46.3071349154458,-48.7405440113908,12.)); #54993=CARTESIAN_POINT('Ctrl Pts',(46.3156239694608,-48.6040203779181,13.)); #54994=CARTESIAN_POINT('Ctrl Pts',(46.3156239694608,-48.6040203779181,12.)); #54995=CARTESIAN_POINT('Ctrl Pts',(46.33286289806,-48.3267785126431,13.)); #54996=CARTESIAN_POINT('Ctrl Pts',(46.33286289806,-48.3267785126431,12.)); #54997=CARTESIAN_POINT('Ctrl Pts',(46.4433932681967,-48.0718477904347,13.)); #54998=CARTESIAN_POINT('Ctrl Pts',(46.4433932681967,-48.0718477904347,12.)); #54999=CARTESIAN_POINT('Ctrl Pts',(46.4994946013437,-47.9424539111024,13.)); #55000=CARTESIAN_POINT('Ctrl Pts',(46.4994946013437,-47.9424539111024,12.)); #55001=CARTESIAN_POINT('',(46.3071349154458,-48.7405440113908,13.)); #55002=CARTESIAN_POINT('Ctrl Pts',(46.3071349154458,-48.7405440113908,13.)); #55003=CARTESIAN_POINT('Ctrl Pts',(46.3156239694608,-48.6040203779181,13.)); #55004=CARTESIAN_POINT('Ctrl Pts',(46.33286289806,-48.3267785126431,13.)); #55005=CARTESIAN_POINT('Ctrl Pts',(46.4433932681967,-48.0718477904347,13.)); #55006=CARTESIAN_POINT('Ctrl Pts',(46.4994946013437,-47.9424539111024,13.)); #55007=CARTESIAN_POINT('',(46.3071349154458,-48.7405440113908,12.)); #55008=CARTESIAN_POINT('',(46.3071349154458,-48.7405440113908,13.)); #55009=CARTESIAN_POINT('Ctrl Pts',(46.3071349154458,-48.7405440113908,12.)); #55010=CARTESIAN_POINT('Ctrl Pts',(46.3156239694608,-48.6040203779181,12.)); #55011=CARTESIAN_POINT('Ctrl Pts',(46.33286289806,-48.3267785126431,12.)); #55012=CARTESIAN_POINT('Ctrl Pts',(46.4433932681967,-48.0718477904347,12.)); #55013=CARTESIAN_POINT('Ctrl Pts',(46.4994946013437,-47.9424539111024,12.)); #55014=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-49.6450462839967,13.)); #55015=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-49.6450462839967,12.)); #55016=CARTESIAN_POINT('Ctrl Pts',(46.5158749833687,-49.5095919292045,13.)); #55017=CARTESIAN_POINT('Ctrl Pts',(46.5158749833687,-49.5095919292045,12.)); #55018=CARTESIAN_POINT('Ctrl Pts',(46.3406718774163,-49.233443369656,13.)); #55019=CARTESIAN_POINT('Ctrl Pts',(46.3406718774163,-49.233443369656,12.)); #55020=CARTESIAN_POINT('Ctrl Pts',(46.3184544262984,-48.9069090995595,13.)); #55021=CARTESIAN_POINT('Ctrl Pts',(46.3184544262984,-48.9069090995595,12.)); #55022=CARTESIAN_POINT('Ctrl Pts',(46.3071349154458,-48.7405440113908,13.)); #55023=CARTESIAN_POINT('Ctrl Pts',(46.3071349154458,-48.7405440113908,12.)); #55024=CARTESIAN_POINT('',(46.6018143187509,-49.6450462839967,13.)); #55025=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-49.6450462839967,13.)); #55026=CARTESIAN_POINT('Ctrl Pts',(46.5158749833687,-49.5095919292045,13.)); #55027=CARTESIAN_POINT('Ctrl Pts',(46.3406718774163,-49.233443369656,13.)); #55028=CARTESIAN_POINT('Ctrl Pts',(46.3184544262984,-48.9069090995595,13.)); #55029=CARTESIAN_POINT('Ctrl Pts',(46.3071349154458,-48.7405440113908,13.)); #55030=CARTESIAN_POINT('',(46.6018143187509,-49.6450462839967,12.)); #55031=CARTESIAN_POINT('',(46.6018143187509,-49.6450462839967,13.)); #55032=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-49.6450462839967,12.)); #55033=CARTESIAN_POINT('Ctrl Pts',(46.5158749833687,-49.5095919292045,12.)); #55034=CARTESIAN_POINT('Ctrl Pts',(46.3406718774163,-49.233443369656,12.)); #55035=CARTESIAN_POINT('Ctrl Pts',(46.3184544262984,-48.9069090995595,12.)); #55036=CARTESIAN_POINT('Ctrl Pts',(46.3071349154458,-48.7405440113908,12.)); #55037=CARTESIAN_POINT('Ctrl Pts',(47.4449244032846,-50.189384510315,13.)); #55038=CARTESIAN_POINT('Ctrl Pts',(47.4449244032846,-50.189384510315,12.)); #55039=CARTESIAN_POINT('Ctrl Pts',(47.2751023602268,-50.1298574251576,13.)); #55040=CARTESIAN_POINT('Ctrl Pts',(47.2751023602268,-50.1298574251576,12.)); #55041=CARTESIAN_POINT('Ctrl Pts',(46.9498372216076,-50.0158434534923,13.)); #55042=CARTESIAN_POINT('Ctrl Pts',(46.9498372216076,-50.0158434534923,12.)); #55043=CARTESIAN_POINT('Ctrl Pts',(46.7143519320051,-49.7649482447985,13.)); #55044=CARTESIAN_POINT('Ctrl Pts',(46.7143519320051,-49.7649482447985,12.)); #55045=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-49.6450462839967,13.)); #55046=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-49.6450462839967,12.)); #55047=CARTESIAN_POINT('',(47.4449244032846,-50.189384510315,13.)); #55048=CARTESIAN_POINT('Ctrl Pts',(47.4449244032846,-50.189384510315,13.)); #55049=CARTESIAN_POINT('Ctrl Pts',(47.2751023602268,-50.1298574251576,13.)); #55050=CARTESIAN_POINT('Ctrl Pts',(46.9498372216076,-50.0158434534923,13.)); #55051=CARTESIAN_POINT('Ctrl Pts',(46.7143519320051,-49.7649482447985,13.)); #55052=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-49.6450462839967,13.)); #55053=CARTESIAN_POINT('',(47.4449244032846,-50.189384510315,12.)); #55054=CARTESIAN_POINT('',(47.4449244032846,-50.189384510315,13.)); #55055=CARTESIAN_POINT('Ctrl Pts',(47.4449244032846,-50.189384510315,12.)); #55056=CARTESIAN_POINT('Ctrl Pts',(47.2751023602268,-50.1298574251576,12.)); #55057=CARTESIAN_POINT('Ctrl Pts',(46.9498372216076,-50.0158434534923,12.)); #55058=CARTESIAN_POINT('Ctrl Pts',(46.7143519320051,-49.7649482447985,12.)); #55059=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-49.6450462839967,12.)); #55060=CARTESIAN_POINT('Ctrl Pts',(46.8310096751199,-50.7173523209458,13.)); #55061=CARTESIAN_POINT('Ctrl Pts',(46.8310096751199,-50.7173523209458,12.)); #55062=CARTESIAN_POINT('Ctrl Pts',(46.913227982409,-50.6071951995781,13.)); #55063=CARTESIAN_POINT('Ctrl Pts',(46.913227982409,-50.6071951995781,12.)); #55064=CARTESIAN_POINT('Ctrl Pts',(47.0786010297419,-50.3856263124695,13.)); #55065=CARTESIAN_POINT('Ctrl Pts',(47.0786010297419,-50.3856263124695,12.)); #55066=CARTESIAN_POINT('Ctrl Pts',(47.3223565197475,-50.2550449188196,13.)); #55067=CARTESIAN_POINT('Ctrl Pts',(47.3223565197475,-50.2550449188196,12.)); #55068=CARTESIAN_POINT('Ctrl Pts',(47.4449244032846,-50.189384510315,13.)); #55069=CARTESIAN_POINT('Ctrl Pts',(47.4449244032846,-50.189384510315,12.)); #55070=CARTESIAN_POINT('',(46.8310096751199,-50.7173523209458,13.)); #55071=CARTESIAN_POINT('Ctrl Pts',(46.8310096751199,-50.7173523209458,13.)); #55072=CARTESIAN_POINT('Ctrl Pts',(46.913227982409,-50.6071951995781,13.)); #55073=CARTESIAN_POINT('Ctrl Pts',(47.0786010297419,-50.3856263124695,13.)); #55074=CARTESIAN_POINT('Ctrl Pts',(47.3223565197475,-50.2550449188196,13.)); #55075=CARTESIAN_POINT('Ctrl Pts',(47.4449244032846,-50.189384510315,13.)); #55076=CARTESIAN_POINT('',(46.8310096751199,-50.7173523209458,12.)); #55077=CARTESIAN_POINT('',(46.8310096751199,-50.7173523209458,13.)); #55078=CARTESIAN_POINT('Ctrl Pts',(46.8310096751199,-50.7173523209458,12.)); #55079=CARTESIAN_POINT('Ctrl Pts',(46.913227982409,-50.6071951995781,12.)); #55080=CARTESIAN_POINT('Ctrl Pts',(47.0786010297419,-50.3856263124695,12.)); #55081=CARTESIAN_POINT('Ctrl Pts',(47.3223565197475,-50.2550449188196,12.)); #55082=CARTESIAN_POINT('Ctrl Pts',(47.4449244032846,-50.189384510315,12.)); #55083=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-51.4908853075868,13.)); #55084=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-51.4908853075868,12.)); #55085=CARTESIAN_POINT('Ctrl Pts',(46.6113271444987,-51.3533228361508,13.)); #55086=CARTESIAN_POINT('Ctrl Pts',(46.6113271444987,-51.3533228361508,12.)); #55087=CARTESIAN_POINT('Ctrl Pts',(46.6303343477639,-51.0784646682866,13.)); #55088=CARTESIAN_POINT('Ctrl Pts',(46.6303343477639,-51.0784646682866,12.)); #55089=CARTESIAN_POINT('Ctrl Pts',(46.7641611964029,-50.837645190945,13.)); #55090=CARTESIAN_POINT('Ctrl Pts',(46.7641611964029,-50.837645190945,12.)); #55091=CARTESIAN_POINT('Ctrl Pts',(46.8310096751199,-50.7173523209458,13.)); #55092=CARTESIAN_POINT('Ctrl Pts',(46.8310096751199,-50.7173523209458,12.)); #55093=CARTESIAN_POINT('',(46.6018143187509,-51.4908853075868,13.)); #55094=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-51.4908853075868,13.)); #55095=CARTESIAN_POINT('Ctrl Pts',(46.6113271444987,-51.3533228361508,13.)); #55096=CARTESIAN_POINT('Ctrl Pts',(46.6303343477639,-51.0784646682866,13.)); #55097=CARTESIAN_POINT('Ctrl Pts',(46.7641611964029,-50.837645190945,13.)); #55098=CARTESIAN_POINT('Ctrl Pts',(46.8310096751199,-50.7173523209458,13.)); #55099=CARTESIAN_POINT('',(46.6018143187509,-51.4908853075868,12.)); #55100=CARTESIAN_POINT('',(46.6018143187509,-51.4908853075868,13.)); #55101=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-51.4908853075868,12.)); #55102=CARTESIAN_POINT('Ctrl Pts',(46.6113271444987,-51.3533228361508,12.)); #55103=CARTESIAN_POINT('Ctrl Pts',(46.6303343477639,-51.0784646682866,12.)); #55104=CARTESIAN_POINT('Ctrl Pts',(46.7641611964029,-50.837645190945,12.)); #55105=CARTESIAN_POINT('Ctrl Pts',(46.8310096751199,-50.7173523209458,12.)); #55106=CARTESIAN_POINT('Ctrl Pts',(46.7859890948282,-52.1907487414246,13.)); #55107=CARTESIAN_POINT('Ctrl Pts',(46.7859890948282,-52.1907487414246,12.)); #55108=CARTESIAN_POINT('Ctrl Pts',(46.7322771586703,-52.0826246040665,13.)); #55109=CARTESIAN_POINT('Ctrl Pts',(46.7322771586703,-52.0826246040665,12.)); #55110=CARTESIAN_POINT('Ctrl Pts',(46.622748723146,-51.86213976486,13.)); #55111=CARTESIAN_POINT('Ctrl Pts',(46.622748723146,-51.86213976486,12.)); #55112=CARTESIAN_POINT('Ctrl Pts',(46.6088812734806,-51.6162119418308,13.)); #55113=CARTESIAN_POINT('Ctrl Pts',(46.6088812734806,-51.6162119418308,12.)); #55114=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-51.4908853075868,13.)); #55115=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-51.4908853075868,12.)); #55116=CARTESIAN_POINT('',(46.7859890948282,-52.1907487414246,13.)); #55117=CARTESIAN_POINT('Ctrl Pts',(46.7859890948282,-52.1907487414246,13.)); #55118=CARTESIAN_POINT('Ctrl Pts',(46.7322771586703,-52.0826246040665,13.)); #55119=CARTESIAN_POINT('Ctrl Pts',(46.622748723146,-51.86213976486,13.)); #55120=CARTESIAN_POINT('Ctrl Pts',(46.6088812734806,-51.6162119418308,13.)); #55121=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-51.4908853075868,13.)); #55122=CARTESIAN_POINT('',(46.7859890948282,-52.1907487414246,12.)); #55123=CARTESIAN_POINT('',(46.7859890948282,-52.1907487414246,13.)); #55124=CARTESIAN_POINT('Ctrl Pts',(46.7859890948282,-52.1907487414246,12.)); #55125=CARTESIAN_POINT('Ctrl Pts',(46.7322771586703,-52.0826246040665,12.)); #55126=CARTESIAN_POINT('Ctrl Pts',(46.622748723146,-51.86213976486,12.)); #55127=CARTESIAN_POINT('Ctrl Pts',(46.6088812734806,-51.6162119418308,12.)); #55128=CARTESIAN_POINT('Ctrl Pts',(46.6018143187509,-51.4908853075868,12.)); #55129=CARTESIAN_POINT('Ctrl Pts',(47.2484710703836,-52.694159438408,13.)); #55130=CARTESIAN_POINT('Ctrl Pts',(47.2484710703836,-52.694159438408,12.)); #55131=CARTESIAN_POINT('Ctrl Pts',(47.158996068078,-52.6250314880746,13.)); #55132=CARTESIAN_POINT('Ctrl Pts',(47.158996068078,-52.6250314880746,12.)); #55133=CARTESIAN_POINT('Ctrl Pts',(46.9761175200436,-52.4837404139219,13.)); #55134=CARTESIAN_POINT('Ctrl Pts',(46.9761175200436,-52.4837404139219,12.)); #55135=CARTESIAN_POINT('Ctrl Pts',(46.8502664021884,-52.2898013463456,13.)); #55136=CARTESIAN_POINT('Ctrl Pts',(46.8502664021884,-52.2898013463456,12.)); #55137=CARTESIAN_POINT('Ctrl Pts',(46.7859890948282,-52.1907487414246,13.)); #55138=CARTESIAN_POINT('Ctrl Pts',(46.7859890948282,-52.1907487414246,12.)); #55139=CARTESIAN_POINT('',(47.2484710703836,-52.694159438408,13.)); #55140=CARTESIAN_POINT('Ctrl Pts',(47.2484710703836,-52.694159438408,13.)); #55141=CARTESIAN_POINT('Ctrl Pts',(47.158996068078,-52.6250314880746,13.)); #55142=CARTESIAN_POINT('Ctrl Pts',(46.9761175200436,-52.4837404139219,13.)); #55143=CARTESIAN_POINT('Ctrl Pts',(46.8502664021884,-52.2898013463456,13.)); #55144=CARTESIAN_POINT('Ctrl Pts',(46.7859890948282,-52.1907487414246,13.)); #55145=CARTESIAN_POINT('',(47.2484710703836,-52.694159438408,12.)); #55146=CARTESIAN_POINT('',(47.2484710703836,-52.694159438408,13.)); #55147=CARTESIAN_POINT('Ctrl Pts',(47.2484710703836,-52.694159438408,12.)); #55148=CARTESIAN_POINT('Ctrl Pts',(47.158996068078,-52.6250314880746,12.)); #55149=CARTESIAN_POINT('Ctrl Pts',(46.9761175200436,-52.4837404139219,12.)); #55150=CARTESIAN_POINT('Ctrl Pts',(46.8502664021884,-52.2898013463456,12.)); #55151=CARTESIAN_POINT('Ctrl Pts',(46.7859890948282,-52.1907487414246,12.)); #55152=CARTESIAN_POINT('Ctrl Pts',(47.8746649514184,-52.939725806511,13.)); #55153=CARTESIAN_POINT('Ctrl Pts',(47.8746649514184,-52.939725806511,12.)); #55154=CARTESIAN_POINT('Ctrl Pts',(47.7614363214553,-52.9157525142495,13.)); #55155=CARTESIAN_POINT('Ctrl Pts',(47.7614363214553,-52.9157525142495,12.)); #55156=CARTESIAN_POINT('Ctrl Pts',(47.5389931770013,-52.8686558169276,13.)); #55157=CARTESIAN_POINT('Ctrl Pts',(47.5389931770013,-52.8686558169276,12.)); #55158=CARTESIAN_POINT('Ctrl Pts',(47.3441396912261,-52.7516209103398,13.)); #55159=CARTESIAN_POINT('Ctrl Pts',(47.3441396912261,-52.7516209103398,12.)); #55160=CARTESIAN_POINT('Ctrl Pts',(47.2484710703836,-52.694159438408,13.)); #55161=CARTESIAN_POINT('Ctrl Pts',(47.2484710703836,-52.694159438408,12.)); #55162=CARTESIAN_POINT('',(47.8746649514184,-52.939725806511,13.)); #55163=CARTESIAN_POINT('Ctrl Pts',(47.8746649514184,-52.939725806511,13.)); #55164=CARTESIAN_POINT('Ctrl Pts',(47.7614363214553,-52.9157525142495,13.)); #55165=CARTESIAN_POINT('Ctrl Pts',(47.5389931770013,-52.8686558169276,13.)); #55166=CARTESIAN_POINT('Ctrl Pts',(47.3441396912261,-52.7516209103398,13.)); #55167=CARTESIAN_POINT('Ctrl Pts',(47.2484710703836,-52.694159438408,13.)); #55168=CARTESIAN_POINT('',(47.8746649514184,-52.939725806511,12.)); #55169=CARTESIAN_POINT('',(47.8746649514184,-52.939725806511,13.)); #55170=CARTESIAN_POINT('Ctrl Pts',(47.8746649514184,-52.939725806511,12.)); #55171=CARTESIAN_POINT('Ctrl Pts',(47.7614363214553,-52.9157525142495,12.)); #55172=CARTESIAN_POINT('Ctrl Pts',(47.5389931770013,-52.8686558169276,12.)); #55173=CARTESIAN_POINT('Ctrl Pts',(47.3441396912261,-52.7516209103398,12.)); #55174=CARTESIAN_POINT('Ctrl Pts',(47.2484710703836,-52.694159438408,12.)); #55175=CARTESIAN_POINT('Ctrl Pts',(48.9346924315439,-53.0011173985368,13.)); #55176=CARTESIAN_POINT('Ctrl Pts',(48.9346924315439,-53.0011173985368,12.)); #55177=CARTESIAN_POINT('Ctrl Pts',(48.7273545776166,-53.0008213651922,13.)); #55178=CARTESIAN_POINT('Ctrl Pts',(48.7273545776166,-53.0008213651922,12.)); #55179=CARTESIAN_POINT('Ctrl Pts',(48.3727208345262,-53.0003150253654,13.)); #55180=CARTESIAN_POINT('Ctrl Pts',(48.3727208345262,-53.0003150253654,12.)); #55181=CARTESIAN_POINT('Ctrl Pts',(48.0208240530956,-52.9575062727186,13.)); #55182=CARTESIAN_POINT('Ctrl Pts',(48.0208240530956,-52.9575062727186,12.)); #55183=CARTESIAN_POINT('Ctrl Pts',(47.8746649514184,-52.939725806511,13.)); #55184=CARTESIAN_POINT('Ctrl Pts',(47.8746649514184,-52.939725806511,12.)); #55185=CARTESIAN_POINT('',(48.9346924315439,-53.0011173985368,13.)); #55186=CARTESIAN_POINT('Ctrl Pts',(48.9346924315439,-53.0011173985368,13.)); #55187=CARTESIAN_POINT('Ctrl Pts',(48.7273545776166,-53.0008213651922,13.)); #55188=CARTESIAN_POINT('Ctrl Pts',(48.3727208345262,-53.0003150253654,13.)); #55189=CARTESIAN_POINT('Ctrl Pts',(48.0208240530956,-52.9575062727186,13.)); #55190=CARTESIAN_POINT('Ctrl Pts',(47.8746649514184,-52.939725806511,13.)); #55191=CARTESIAN_POINT('',(48.9346924315439,-53.0011173985368,12.)); #55192=CARTESIAN_POINT('',(48.9346924315439,-53.0011173985368,13.)); #55193=CARTESIAN_POINT('Ctrl Pts',(48.9346924315439,-53.0011173985368,12.)); #55194=CARTESIAN_POINT('Ctrl Pts',(48.7273545776166,-53.0008213651922,12.)); #55195=CARTESIAN_POINT('Ctrl Pts',(48.3727208345262,-53.0003150253654,12.)); #55196=CARTESIAN_POINT('Ctrl Pts',(48.0208240530956,-52.9575062727186,12.)); #55197=CARTESIAN_POINT('Ctrl Pts',(47.8746649514184,-52.939725806511,12.)); #55198=CARTESIAN_POINT('Origin',(51.3330554853425,-53.0011173985368,13.)); #55199=CARTESIAN_POINT('',(51.3330554853425,-53.0011173985368,13.)); #55200=CARTESIAN_POINT('',(59.2785328185376,-53.0011173985368,13.)); #55201=CARTESIAN_POINT('',(51.3330554853425,-53.0011173985368,12.)); #55202=CARTESIAN_POINT('',(51.3330554853425,-53.0011173985368,13.)); #55203=CARTESIAN_POINT('',(51.3330554853425,-53.0011173985368,12.)); #55204=CARTESIAN_POINT('Origin',(51.3330554853425,-47.0011171601182,13.)); #55205=CARTESIAN_POINT('',(51.3330554853425,-62.6620204123048,13.)); #55206=CARTESIAN_POINT('',(51.3330554853425,-47.0011171601182,12.)); #55207=CARTESIAN_POINT('Origin',(48.8200952003942,-50.0011172793275,12.)); #55208=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #55209=CARTESIAN_POINT('',(32.7240101517326,-117.022923664491,13.)); #55210=CARTESIAN_POINT('',(31.9240101517326,-116.222923664491,13.)); #55211=CARTESIAN_POINT('Origin',(32.7240101517326,-116.222923664491,13.)); #55212=CARTESIAN_POINT('',(101.724010151733,-117.022923664491,13.)); #55213=CARTESIAN_POINT('',(48.9740101517326,-117.022923664491,13.)); #55214=CARTESIAN_POINT('',(102.524010151733,-116.222923664491,13.)); #55215=CARTESIAN_POINT('Origin',(101.724010151733,-116.222923664491,13.)); #55216=CARTESIAN_POINT('',(102.524010151733,-40.4229236644913,13.)); #55217=CARTESIAN_POINT('',(102.524010151733,-98.2729236644914,13.)); #55218=CARTESIAN_POINT('',(101.724010151733,-39.6229236644913,13.)); #55219=CARTESIAN_POINT('Origin',(101.724010151733,-40.4229236644913,13.)); #55220=CARTESIAN_POINT('',(32.7240101517326,-39.6229236644913,13.)); #55221=CARTESIAN_POINT('',(85.4740101517326,-39.6229236644913,13.)); #55222=CARTESIAN_POINT('',(31.9240101517326,-40.4229236644913,13.)); #55223=CARTESIAN_POINT('Origin',(32.7240101517326,-40.4229236644913,13.)); #55224=CARTESIAN_POINT('',(31.9240101517326,-58.3729236644913,13.)); #55225=CARTESIAN_POINT('',(54.4768451637323,-95.4221217908776,13.)); #55226=CARTESIAN_POINT('',(55.9502036327417,-99.4501650466836,13.)); #55227=CARTESIAN_POINT('Ctrl Pts',(54.4768451637323,-95.4221217908776,13.)); #55228=CARTESIAN_POINT('Ctrl Pts',(54.0151994079645,-96.4472499885476,13.)); #55229=CARTESIAN_POINT('Ctrl Pts',(54.5247080368097,-97.8400431837953,13.)); #55230=CARTESIAN_POINT('Ctrl Pts',(55.9502036327417,-99.4501650466836,13.)); #55231=CARTESIAN_POINT('',(57.6450190300043,-103.572981466285,13.)); #55232=CARTESIAN_POINT('Ctrl Pts',(55.9502036327417,-99.4501650466836,13.)); #55233=CARTESIAN_POINT('Ctrl Pts',(57.4499146598871,-101.144265250198,13.)); #55234=CARTESIAN_POINT('Ctrl Pts',(58.0202250522668,-102.531263922683,13.)); #55235=CARTESIAN_POINT('Ctrl Pts',(57.6450190300043,-103.572981466285,13.)); #55236=CARTESIAN_POINT('',(55.8973398536737,-104.949343675605,13.)); #55237=CARTESIAN_POINT('Ctrl Pts',(57.6450190300043,-103.572981466285,13.)); #55238=CARTESIAN_POINT('Ctrl Pts',(57.2983081192071,-104.535799392692,13.)); #55239=CARTESIAN_POINT('Ctrl Pts',(56.2746097034509,-104.860364126197,13.)); #55240=CARTESIAN_POINT('Ctrl Pts',(55.8973398536737,-104.949343675605,13.)); #55241=CARTESIAN_POINT('',(56.0718858856256,-106.352138380042,13.)); #55242=CARTESIAN_POINT('Ctrl Pts',(55.8973398536737,-104.949343675605,13.)); #55243=CARTESIAN_POINT('Ctrl Pts',(56.0297372955377,-105.446786664954,13.)); #55244=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-105.934467653266,13.)); #55245=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-106.352138380042,13.)); #55246=CARTESIAN_POINT('',(49.4475657838876,-109.027552837364,13.)); #55247=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-106.352138380042,13.)); #55248=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-109.027552837364,13.)); #55249=CARTESIAN_POINT('Ctrl Pts',(53.0021374553735,-109.027552837364,13.)); #55250=CARTESIAN_POINT('Ctrl Pts',(49.4475657838876,-109.027552837364,13.)); #55251=CARTESIAN_POINT('',(42.3458051055963,-106.82862697982,13.)); #55252=CARTESIAN_POINT('Ctrl Pts',(49.4475657838876,-109.027552837364,13.)); #55253=CARTESIAN_POINT('Ctrl Pts',(45.7590887683923,-109.027552837364,13.)); #55254=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-108.761090177528,13.)); #55255=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.82862697982,13.)); #55256=CARTESIAN_POINT('',(44.6168824154432,-104.00827345275,13.)); #55257=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.82862697982,13.)); #55258=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.038368772498,13.)); #55259=CARTESIAN_POINT('Ctrl Pts',(43.1901169872577,-104.993794692985,13.)); #55260=CARTESIAN_POINT('Ctrl Pts',(44.6168824154432,-104.00827345275,13.)); #55261=CARTESIAN_POINT('',(44.5571923512514,-103.758718675605,13.)); #55262=CARTESIAN_POINT('Ctrl Pts',(44.6168824154432,-104.00827345275,13.)); #55263=CARTESIAN_POINT('Ctrl Pts',(44.5933873015936,-103.926278699867,13.)); #55264=CARTESIAN_POINT('Ctrl Pts',(44.5734642201955,-103.842618593208,13.)); #55265=CARTESIAN_POINT('Ctrl Pts',(44.5571923512514,-103.758718675605,13.)); #55266=CARTESIAN_POINT('',(44.736262392431,-102.113513258926,13.)); #55267=CARTESIAN_POINT('Ctrl Pts',(44.5571923512514,-103.758718675605,13.)); #55268=CARTESIAN_POINT('Ctrl Pts',(44.4440830368097,-103.176582454673,13.)); #55269=CARTESIAN_POINT('Ctrl Pts',(44.5075829762514,-102.59222374343,13.)); #55270=CARTESIAN_POINT('Ctrl Pts',(44.736262392431,-102.113513258926,13.)); #55271=CARTESIAN_POINT('',(45.867514805227,-101.1739515438,13.)); #55272=CARTESIAN_POINT('Ctrl Pts',(44.736262392431,-102.113513258926,13.)); #55273=CARTESIAN_POINT('Ctrl Pts',(44.9805785721834,-101.601624082557,13.)); #55274=CARTESIAN_POINT('Ctrl Pts',(45.3823748439844,-101.268090056411,13.)); #55275=CARTESIAN_POINT('Ctrl Pts',(45.867514805227,-101.1739515438,13.)); #55276=CARTESIAN_POINT('',(47.8256959098871,-102.389897188178,13.)); #55277=CARTESIAN_POINT('Ctrl Pts',(45.867514805227,-101.1739515438,13.)); #55278=CARTESIAN_POINT('Ctrl Pts',(46.6328484195764,-101.024885424606,13.)); #55279=CARTESIAN_POINT('Ctrl Pts',(47.4177084583337,-101.526297406188,13.)); #55280=CARTESIAN_POINT('Ctrl Pts',(47.8256959098871,-102.389897188178,13.)); #55281=CARTESIAN_POINT('',(50.8207529205377,-101.83776458644,13.)); #55282=CARTESIAN_POINT('Ctrl Pts',(47.8256959098871,-102.389897188178,13.)); #55283=CARTESIAN_POINT('Ctrl Pts',(48.8812249893243,-102.027947381965,13.)); #55284=CARTESIAN_POINT('Ctrl Pts',(49.9110361618097,-101.83776458644,13.)); #55285=CARTESIAN_POINT('Ctrl Pts',(50.8207529205377,-101.83776458644,13.)); #55286=CARTESIAN_POINT('',(55.6808838314111,-104.32775855445,13.)); #55287=CARTESIAN_POINT('Ctrl Pts',(50.8207529205377,-101.83776458644,13.)); #55288=CARTESIAN_POINT('Ctrl Pts',(53.7870762199457,-101.83776458644,13.)); #55289=CARTESIAN_POINT('Ctrl Pts',(55.1141463798578,-103.030056756965,13.)); #55290=CARTESIAN_POINT('Ctrl Pts',(55.6808838314111,-104.32775855445,13.)); #55291=CARTESIAN_POINT('',(57.0311320823724,-103.34866800212,13.)); #55292=CARTESIAN_POINT('Ctrl Pts',(55.6808838314111,-104.32775855445,13.)); #55293=CARTESIAN_POINT('Ctrl Pts',(55.8432854980524,-104.29521451377,13.)); #55294=CARTESIAN_POINT('Ctrl Pts',(56.7699888652856,-104.080346330634,13.)); #55295=CARTESIAN_POINT('Ctrl Pts',(57.0311320823724,-103.34866800212,13.)); #55296=CARTESIAN_POINT('',(55.4609360164697,-99.8836318054116,13.)); #55297=CARTESIAN_POINT('Ctrl Pts',(57.0311320823724,-103.34866800212,13.)); #55298=CARTESIAN_POINT('Ctrl Pts',(57.3125163120325,-102.560077570907,13.)); #55299=CARTESIAN_POINT('Ctrl Pts',(56.7695916027124,-101.361911849014,13.)); #55300=CARTESIAN_POINT('Ctrl Pts',(55.4609360164697,-99.8836318054116,13.)); #55301=CARTESIAN_POINT('',(53.880818075567,-95.1537547233022,13.)); #55302=CARTESIAN_POINT('Ctrl Pts',(55.4609360164697,-99.8836318054116,13.)); #55303=CARTESIAN_POINT('Ctrl Pts',(53.4283808178003,-97.5876303567804,13.)); #55304=CARTESIAN_POINT('Ctrl Pts',(53.4798154205377,-96.0441835060037,13.)); #55305=CARTESIAN_POINT('Ctrl Pts',(53.880818075567,-95.1537547233022,13.)); #55306=CARTESIAN_POINT('',(56.7445882839258,-93.3387660350717,13.)); #55307=CARTESIAN_POINT('Ctrl Pts',(53.880818075567,-95.1537547233022,13.)); #55308=CARTESIAN_POINT('Ctrl Pts',(54.4384269661005,-93.9154253994739,13.)); #55309=CARTESIAN_POINT('Ctrl Pts',(55.9192474311884,-93.3387660350717,13.)); #55310=CARTESIAN_POINT('Ctrl Pts',(56.7445882839258,-93.3387660350717,13.)); #55311=CARTESIAN_POINT('',(57.0713767189081,-93.6655529939449,13.)); #55312=CARTESIAN_POINT('Ctrl Pts',(56.7445882839258,-93.3387660350717,13.)); #55313=CARTESIAN_POINT('Ctrl Pts',(56.9250871986444,-93.3387660350717,13.)); #55314=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.4849748613752,13.)); #55315=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.6655529939449,13.)); #55316=CARTESIAN_POINT('',(56.7445894950922,-93.9923398771203,13.)); #55317=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.6655529939449,13.)); #55318=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.8461311265147,13.)); #55319=CARTESIAN_POINT('Ctrl Pts',(56.9250884098108,-93.9923398771203,13.)); #55320=CARTESIAN_POINT('Ctrl Pts',(56.7445894950922,-93.9923398771203,13.)); #55321=CARTESIAN_POINT('Ctrl Pts',(56.7445894950922,-93.9923398771203,13.)); #55322=CARTESIAN_POINT('Ctrl Pts',(56.1959492916162,-93.9923398771203,13.)); #55323=CARTESIAN_POINT('Ctrl Pts',(54.926186680227,-94.4241399195111,13.)); #55324=CARTESIAN_POINT('Ctrl Pts',(54.4768451637323,-95.4221217908776,13.)); #55325=CARTESIAN_POINT('',(77.5142707253188,-101.585138291906,13.)); #55326=CARTESIAN_POINT('',(88.7383716304392,-101.585138291906,13.)); #55327=CARTESIAN_POINT('',(72.3691404385257,-101.585138291906,13.)); #55328=CARTESIAN_POINT('',(89.8637509157747,-101.583788982536,13.)); #55329=CARTESIAN_POINT('Ctrl Pts',(88.7383716304392,-101.585138291906,13.)); #55330=CARTESIAN_POINT('Ctrl Pts',(89.0514265892595,-101.585138291906,13.)); #55331=CARTESIAN_POINT('Ctrl Pts',(89.5506959569544,-101.585138291906,13.)); #55332=CARTESIAN_POINT('Ctrl Pts',(89.8637509157747,-101.583788982536,13.)); #55333=CARTESIAN_POINT('',(91.6503231275172,-101.583788982536,13.)); #55334=CARTESIAN_POINT('',(78.5438805337537,-101.583788982536,13.)); #55335=CARTESIAN_POINT('',(92.1482428319544,-101.791592727388,13.)); #55336=CARTESIAN_POINT('Ctrl Pts',(91.6503231275172,-101.583788982536,13.)); #55337=CARTESIAN_POINT('Ctrl Pts',(91.8446334569544,-101.583788982536,13.)); #55338=CARTESIAN_POINT('Ctrl Pts',(92.020052618751,-101.663402128126,13.)); #55339=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-101.791592727388,13.)); #55340=CARTESIAN_POINT('',(92.3560467054934,-102.289512110109,13.)); #55341=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-101.791592727388,13.)); #55342=CARTESIAN_POINT('Ctrl Pts',(92.2764340746492,-101.919783390994,13.)); #55343=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-102.095202102388,13.)); #55344=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-102.289512110109,13.)); #55345=CARTESIAN_POINT('',(92.3560467054934,-107.869177657898,13.)); #55346=CARTESIAN_POINT('',(92.3560467054935,-90.3062178873005,13.)); #55347=CARTESIAN_POINT('',(92.1482428319544,-108.367096847589,13.)); #55348=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-107.869177657898,13.)); #55349=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-108.063487472589,13.)); #55350=CARTESIAN_POINT('Ctrl Pts',(92.2764330451578,-108.23890611964,13.)); #55351=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-108.367096847589,13.)); #55352=CARTESIAN_POINT('',(91.6503231275172,-108.574900721128,13.)); #55353=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-108.367096847589,13.)); #55354=CARTESIAN_POINT('Ctrl Pts',(92.0200515892596,-108.495287575538,13.)); #55355=CARTESIAN_POINT('Ctrl Pts',(91.8446334569544,-108.574900721128,13.)); #55356=CARTESIAN_POINT('Ctrl Pts',(91.6503231275172,-108.574900721128,13.)); #55357=CARTESIAN_POINT('',(77.5156200025171,-108.574900721128,13.)); #55358=CARTESIAN_POINT('',(79.4371666396249,-108.574900721128,13.)); #55359=CARTESIAN_POINT('',(77.0177006841392,-108.367096847589,13.)); #55360=CARTESIAN_POINT('Ctrl Pts',(77.5156200025171,-108.574900721128,13.)); #55361=CARTESIAN_POINT('Ctrl Pts',(77.3213100591392,-108.574900721128,13.)); #55362=CARTESIAN_POINT('Ctrl Pts',(77.1458912834019,-108.495287575538,13.)); #55363=CARTESIAN_POINT('Ctrl Pts',(77.0177006841392,-108.367096847589,13.)); #55364=CARTESIAN_POINT('',(76.809896907115,-107.869177657898,13.)); #55365=CARTESIAN_POINT('Ctrl Pts',(77.0177006841392,-108.367096847589,13.)); #55366=CARTESIAN_POINT('Ctrl Pts',(76.8895100205333,-108.238906634386,13.)); #55367=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-108.063487472589,13.)); #55368=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-107.869177657898,13.)); #55369=CARTESIAN_POINT('',(76.809896907115,-102.289512110109,13.)); #55370=CARTESIAN_POINT('',(76.809896907115,-93.0960506611945,13.)); #55371=CARTESIAN_POINT('',(77.0163513425976,-101.79294206893,13.)); #55372=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-102.289512110109,13.)); #55373=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-102.09655144393,13.)); #55374=CARTESIAN_POINT('Ctrl Pts',(76.8881606789917,-101.919783326651,13.)); #55375=CARTESIAN_POINT('Ctrl Pts',(77.0163513425976,-101.79294206893,13.)); #55376=CARTESIAN_POINT('Ctrl Pts',(77.0163513425976,-101.79294206893,13.)); #55377=CARTESIAN_POINT('Ctrl Pts',(77.1445420062036,-101.664751405324,13.)); #55378=CARTESIAN_POINT('Ctrl Pts',(77.3199607175977,-101.585138291906,13.)); #55379=CARTESIAN_POINT('Ctrl Pts',(77.5142707253188,-101.585138291906,13.)); #55380=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #55381=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #55382=CARTESIAN_POINT('Ctrl Pts',(49.4477244466837,-108.373978389732,13.)); #55383=CARTESIAN_POINT('Ctrl Pts',(49.4477244466837,-108.373978389732,12.)); #55384=CARTESIAN_POINT('Ctrl Pts',(53.2608995193536,-108.373978389732,13.)); #55385=CARTESIAN_POINT('Ctrl Pts',(53.2608995193536,-108.373978389732,12.)); #55386=CARTESIAN_POINT('Ctrl Pts',(55.418391374975,-108.280157808296,13.)); #55387=CARTESIAN_POINT('Ctrl Pts',(55.418391374975,-108.280157808296,12.)); #55388=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-106.352059654228,13.)); #55389=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-106.352059654228,12.)); #55390=CARTESIAN_POINT('',(49.4477244466837,-108.373978389732,13.)); #55391=CARTESIAN_POINT('',(55.4183925861414,-106.352059654228,13.)); #55392=CARTESIAN_POINT('Ctrl Pts',(49.4477244466837,-108.373978389732,13.)); #55393=CARTESIAN_POINT('Ctrl Pts',(53.2608995193536,-108.373978389732,13.)); #55394=CARTESIAN_POINT('Ctrl Pts',(55.418391374975,-108.280157808296,13.)); #55395=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-106.352059654228,13.)); #55396=CARTESIAN_POINT('',(49.4477244466837,-108.373978389732,12.)); #55397=CARTESIAN_POINT('',(49.4477244466837,-108.373978389732,13.)); #55398=CARTESIAN_POINT('',(55.4183925861414,-106.352059654228,12.)); #55399=CARTESIAN_POINT('Ctrl Pts',(49.4477244466837,-108.373978389732,12.)); #55400=CARTESIAN_POINT('Ctrl Pts',(53.2608995193536,-108.373978389732,12.)); #55401=CARTESIAN_POINT('Ctrl Pts',(55.418391374975,-108.280157808296,12.)); #55402=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-106.352059654228,12.)); #55403=CARTESIAN_POINT('',(55.4183925861414,-106.352059654228,13.)); #55404=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.82862697982,13.)); #55405=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.82862697982,12.)); #55406=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-108.213720487586,13.)); #55407=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-108.213720487586,12.)); #55408=CARTESIAN_POINT('Ctrl Pts',(46.6796006530817,-108.373978389732,13.)); #55409=CARTESIAN_POINT('Ctrl Pts',(46.6796006530817,-108.373978389732,12.)); #55410=CARTESIAN_POINT('Ctrl Pts',(49.4477244466837,-108.373978389732,13.)); #55411=CARTESIAN_POINT('Ctrl Pts',(49.4477244466837,-108.373978389732,12.)); #55412=CARTESIAN_POINT('',(42.999616941839,-106.82862697982,13.)); #55413=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.82862697982,13.)); #55414=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-108.213720487586,13.)); #55415=CARTESIAN_POINT('Ctrl Pts',(46.6796006530817,-108.373978389732,13.)); #55416=CARTESIAN_POINT('Ctrl Pts',(49.4477244466837,-108.373978389732,13.)); #55417=CARTESIAN_POINT('',(42.999616941839,-106.82862697982,12.)); #55418=CARTESIAN_POINT('',(42.999616941839,-106.82862697982,13.)); #55419=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.82862697982,12.)); #55420=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-108.213720487586,12.)); #55421=CARTESIAN_POINT('Ctrl Pts',(46.6796006530817,-108.373978389732,12.)); #55422=CARTESIAN_POINT('Ctrl Pts',(49.4477244466837,-108.373978389732,12.)); #55423=CARTESIAN_POINT('Ctrl Pts',(45.185525183111,-104.413007711402,13.)); #55424=CARTESIAN_POINT('Ctrl Pts',(45.185525183111,-104.413007711402,12.)); #55425=CARTESIAN_POINT('Ctrl Pts',(43.6755743497903,-105.410989431373,13.)); #55426=CARTESIAN_POINT('Ctrl Pts',(43.6755743497903,-105.410989431373,12.)); #55427=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.34547090911,13.)); #55428=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.34547090911,12.)); #55429=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.82862697982,13.)); #55430=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.82862697982,12.)); #55431=CARTESIAN_POINT('',(45.185525183111,-104.413007711402,13.)); #55432=CARTESIAN_POINT('Ctrl Pts',(45.185525183111,-104.413007711402,13.)); #55433=CARTESIAN_POINT('Ctrl Pts',(43.6755743497903,-105.410989431373,13.)); #55434=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.34547090911,13.)); #55435=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.82862697982,13.)); #55436=CARTESIAN_POINT('',(45.185525183111,-104.413007711402,12.)); #55437=CARTESIAN_POINT('',(45.185525183111,-104.413007711402,13.)); #55438=CARTESIAN_POINT('Ctrl Pts',(45.185525183111,-104.413007711402,12.)); #55439=CARTESIAN_POINT('Ctrl Pts',(43.6755743497903,-105.410989431373,12.)); #55440=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.34547090911,12.)); #55441=CARTESIAN_POINT('Ctrl Pts',(42.999616941839,-106.82862697982,12.)); #55442=CARTESIAN_POINT('Origin',(45.4046000498827,-104.268068641654,13.)); #55443=CARTESIAN_POINT('',(45.4046000498827,-104.268068641654,13.)); #55444=CARTESIAN_POINT('',(58.9624919281656,-95.2982207282958,13.)); #55445=CARTESIAN_POINT('',(45.4046000498827,-104.268068641654,12.)); #55446=CARTESIAN_POINT('',(45.4046000498827,-104.268068641654,13.)); #55447=CARTESIAN_POINT('',(45.185525183111,-104.413007711402,12.)); #55448=CARTESIAN_POINT('Origin',(45.3103025716836,-104.02295884513,13.)); #55449=CARTESIAN_POINT('',(45.3103025716836,-104.02295884513,13.)); #55450=CARTESIAN_POINT('',(42.4166590845667,-96.5014388650989,13.)); #55451=CARTESIAN_POINT('',(45.3103025716836,-104.02295884513,12.)); #55452=CARTESIAN_POINT('',(45.3103025716836,-104.02295884513,13.)); #55453=CARTESIAN_POINT('',(45.4046000498827,-104.268068641654,12.)); #55454=CARTESIAN_POINT('Ctrl Pts',(45.199098119169,-103.634180492393,13.)); #55455=CARTESIAN_POINT('Ctrl Pts',(45.199098119169,-103.634180492393,12.)); #55456=CARTESIAN_POINT('Ctrl Pts',(45.2249743861253,-103.767688573829,13.)); #55457=CARTESIAN_POINT('Ctrl Pts',(45.2249743861253,-103.767688573829,12.)); #55458=CARTESIAN_POINT('Ctrl Pts',(45.2624393958147,-103.898499387733,13.)); #55459=CARTESIAN_POINT('Ctrl Pts',(45.2624393958147,-103.898499387733,12.)); #55460=CARTESIAN_POINT('Ctrl Pts',(45.3103025716836,-104.02295884513,13.)); #55461=CARTESIAN_POINT('Ctrl Pts',(45.3103025716836,-104.02295884513,12.)); #55462=CARTESIAN_POINT('',(45.199098119169,-103.634180492393,13.)); #55463=CARTESIAN_POINT('Ctrl Pts',(45.199098119169,-103.634180492393,13.)); #55464=CARTESIAN_POINT('Ctrl Pts',(45.2249743861253,-103.767688573829,13.)); #55465=CARTESIAN_POINT('Ctrl Pts',(45.2624393958147,-103.898499387733,13.)); #55466=CARTESIAN_POINT('Ctrl Pts',(45.3103025716836,-104.02295884513,13.)); #55467=CARTESIAN_POINT('',(45.199098119169,-103.634180492393,12.)); #55468=CARTESIAN_POINT('',(45.199098119169,-103.634180492393,13.)); #55469=CARTESIAN_POINT('Ctrl Pts',(45.199098119169,-103.634180492393,12.)); #55470=CARTESIAN_POINT('Ctrl Pts',(45.2249743861253,-103.767688573829,12.)); #55471=CARTESIAN_POINT('Ctrl Pts',(45.2624393958147,-103.898499387733,12.)); #55472=CARTESIAN_POINT('Ctrl Pts',(45.3103025716836,-104.02295884513,12.)); #55473=CARTESIAN_POINT('Ctrl Pts',(45.32625696364,-102.395216025344,13.)); #55474=CARTESIAN_POINT('Ctrl Pts',(45.32625696364,-102.395216025344,12.)); #55475=CARTESIAN_POINT('Ctrl Pts',(45.15758508864,-102.748196538917,13.)); #55476=CARTESIAN_POINT('Ctrl Pts',(45.15758508864,-102.748196538917,12.)); #55477=CARTESIAN_POINT('Ctrl Pts',(45.1125000256593,-103.18833137416,13.)); #55478=CARTESIAN_POINT('Ctrl Pts',(45.1125000256593,-103.18833137416,12.)); #55479=CARTESIAN_POINT('Ctrl Pts',(45.199098119169,-103.634180492393,13.)); #55480=CARTESIAN_POINT('Ctrl Pts',(45.199098119169,-103.634180492393,12.)); #55481=CARTESIAN_POINT('',(45.32625696364,-102.395216025344,13.)); #55482=CARTESIAN_POINT('Ctrl Pts',(45.32625696364,-102.395216025344,13.)); #55483=CARTESIAN_POINT('Ctrl Pts',(45.15758508864,-102.748196538917,13.)); #55484=CARTESIAN_POINT('Ctrl Pts',(45.1125000256593,-103.18833137416,13.)); #55485=CARTESIAN_POINT('Ctrl Pts',(45.199098119169,-103.634180492393,13.)); #55486=CARTESIAN_POINT('',(45.32625696364,-102.395216025344,12.)); #55487=CARTESIAN_POINT('',(45.32625696364,-102.395216025344,13.)); #55488=CARTESIAN_POINT('Ctrl Pts',(45.32625696364,-102.395216025344,12.)); #55489=CARTESIAN_POINT('Ctrl Pts',(45.15758508864,-102.748196538917,12.)); #55490=CARTESIAN_POINT('Ctrl Pts',(45.1125000256593,-103.18833137416,12.)); #55491=CARTESIAN_POINT('Ctrl Pts',(45.199098119169,-103.634180492393,12.)); #55492=CARTESIAN_POINT('Ctrl Pts',(45.9922924965913,-101.815302294723,13.)); #55493=CARTESIAN_POINT('Ctrl Pts',(45.9922924965913,-101.815302294723,12.)); #55494=CARTESIAN_POINT('Ctrl Pts',(45.7155912417467,-101.868880661956,13.)); #55495=CARTESIAN_POINT('Ctrl Pts',(45.7155912417467,-101.868880661956,12.)); #55496=CARTESIAN_POINT('Ctrl Pts',(45.4791331094797,-102.075096878043,13.)); #55497=CARTESIAN_POINT('Ctrl Pts',(45.4791331094797,-102.075096878043,12.)); #55498=CARTESIAN_POINT('Ctrl Pts',(45.32625696364,-102.395216025344,13.)); #55499=CARTESIAN_POINT('Ctrl Pts',(45.32625696364,-102.395216025344,12.)); #55500=CARTESIAN_POINT('',(45.9922924965913,-101.815302294723,13.)); #55501=CARTESIAN_POINT('Ctrl Pts',(45.9922924965913,-101.815302294723,13.)); #55502=CARTESIAN_POINT('Ctrl Pts',(45.7155912417467,-101.868880661956,13.)); #55503=CARTESIAN_POINT('Ctrl Pts',(45.4791331094797,-102.075096878043,13.)); #55504=CARTESIAN_POINT('Ctrl Pts',(45.32625696364,-102.395216025344,13.)); #55505=CARTESIAN_POINT('',(45.9922924965913,-101.815302294723,12.)); #55506=CARTESIAN_POINT('',(45.9922924965913,-101.815302294723,13.)); #55507=CARTESIAN_POINT('Ctrl Pts',(45.9922924965913,-101.815302294723,12.)); #55508=CARTESIAN_POINT('Ctrl Pts',(45.7155912417467,-101.868880661956,12.)); #55509=CARTESIAN_POINT('Ctrl Pts',(45.4791331094797,-102.075096878043,12.)); #55510=CARTESIAN_POINT('Ctrl Pts',(45.32625696364,-102.395216025344,12.)); #55511=CARTESIAN_POINT('Ctrl Pts',(46.134929441839,-101.801570695869,13.)); #55512=CARTESIAN_POINT('Ctrl Pts',(46.134929441839,-101.801570695869,12.)); #55513=CARTESIAN_POINT('Ctrl Pts',(46.08706626597,-101.801570695869,13.)); #55514=CARTESIAN_POINT('Ctrl Pts',(46.08706626597,-101.801570695869,12.)); #55515=CARTESIAN_POINT('Ctrl Pts',(46.0395207184846,-101.80601567649,13.)); #55516=CARTESIAN_POINT('Ctrl Pts',(46.0395207184846,-101.80601567649,12.)); #55517=CARTESIAN_POINT('Ctrl Pts',(45.9922924965913,-101.815302294723,13.)); #55518=CARTESIAN_POINT('Ctrl Pts',(45.9922924965913,-101.815302294723,12.)); #55519=CARTESIAN_POINT('',(46.134929441839,-101.801570695869,13.)); #55520=CARTESIAN_POINT('Ctrl Pts',(46.134929441839,-101.801570695869,13.)); #55521=CARTESIAN_POINT('Ctrl Pts',(46.08706626597,-101.801570695869,13.)); #55522=CARTESIAN_POINT('Ctrl Pts',(46.0395207184846,-101.80601567649,13.)); #55523=CARTESIAN_POINT('Ctrl Pts',(45.9922924965913,-101.815302294723,13.)); #55524=CARTESIAN_POINT('',(46.134929441839,-101.801570695869,12.)); #55525=CARTESIAN_POINT('',(46.134929441839,-101.801570695869,13.)); #55526=CARTESIAN_POINT('Ctrl Pts',(46.134929441839,-101.801570695869,12.)); #55527=CARTESIAN_POINT('Ctrl Pts',(46.08706626597,-101.801570695869,12.)); #55528=CARTESIAN_POINT('Ctrl Pts',(46.0395207184846,-101.80601567649,12.)); #55529=CARTESIAN_POINT('Ctrl Pts',(45.9922924965913,-101.815302294723,12.)); #55530=CARTESIAN_POINT('Ctrl Pts',(47.3306346792276,-102.907423132888,13.)); #55531=CARTESIAN_POINT('Ctrl Pts',(47.3306346792276,-102.907423132888,12.)); #55532=CARTESIAN_POINT('Ctrl Pts',(47.1092576879556,-102.24932497882,13.)); #55533=CARTESIAN_POINT('Ctrl Pts',(47.1092576879556,-102.24932497882,12.)); #55534=CARTESIAN_POINT('Ctrl Pts',(46.6134812635477,-101.801570695869,13.)); #55535=CARTESIAN_POINT('Ctrl Pts',(46.6134812635477,-101.801570695869,12.)); #55536=CARTESIAN_POINT('Ctrl Pts',(46.134929441839,-101.801570695869,13.)); #55537=CARTESIAN_POINT('Ctrl Pts',(46.134929441839,-101.801570695869,12.)); #55538=CARTESIAN_POINT('',(47.3306346792276,-102.907423132888,13.)); #55539=CARTESIAN_POINT('Ctrl Pts',(47.3306346792276,-102.907423132888,13.)); #55540=CARTESIAN_POINT('Ctrl Pts',(47.1092576879556,-102.24932497882,13.)); #55541=CARTESIAN_POINT('Ctrl Pts',(46.6134812635477,-101.801570695869,13.)); #55542=CARTESIAN_POINT('Ctrl Pts',(46.134929441839,-101.801570695869,13.)); #55543=CARTESIAN_POINT('',(47.3306346792276,-102.907423132888,12.)); #55544=CARTESIAN_POINT('',(47.3306346792276,-102.907423132888,13.)); #55545=CARTESIAN_POINT('Ctrl Pts',(47.3306346792276,-102.907423132888,12.)); #55546=CARTESIAN_POINT('Ctrl Pts',(47.1092576879556,-102.24932497882,12.)); #55547=CARTESIAN_POINT('Ctrl Pts',(46.6134812635477,-101.801570695869,12.)); #55548=CARTESIAN_POINT('Ctrl Pts',(46.134929441839,-101.801570695869,12.)); #55549=CARTESIAN_POINT('Origin',(47.4381880706842,-103.226907629005,13.)); #55550=CARTESIAN_POINT('',(47.4381880706842,-103.226907629005,13.)); #55551=CARTESIAN_POINT('',(44.6800250636163,-95.0338575857974,13.)); #55552=CARTESIAN_POINT('',(47.4381880706842,-103.226907629005,12.)); #55553=CARTESIAN_POINT('',(47.4381880706842,-103.226907629005,13.)); #55554=CARTESIAN_POINT('',(47.3306346792276,-102.907423132888,12.)); #55555=CARTESIAN_POINT('Origin',(47.7543388313348,-103.109432362548,13.)); #55556=CARTESIAN_POINT('',(47.7543388313348,-103.109432362548,13.)); #55557=CARTESIAN_POINT('',(60.3545298725406,-98.4274546980836,13.)); #55558=CARTESIAN_POINT('',(47.7543388313348,-103.109432362548,12.)); #55559=CARTESIAN_POINT('',(47.7543388313348,-103.109432362548,13.)); #55560=CARTESIAN_POINT('',(47.4381880706842,-103.226907629005,12.)); #55561=CARTESIAN_POINT('Ctrl Pts',(50.8209127945001,-102.491259702674,13.)); #55562=CARTESIAN_POINT('Ctrl Pts',(50.8209127945001,-102.491259702674,12.)); #55563=CARTESIAN_POINT('Ctrl Pts',(49.9022261375482,-102.491259702674,13.)); #55564=CARTESIAN_POINT('Ctrl Pts',(49.9022261375482,-102.491259702674,12.)); #55565=CARTESIAN_POINT('Ctrl Pts',(48.8418560260828,-102.705095972053,13.)); #55566=CARTESIAN_POINT('Ctrl Pts',(48.8418560260828,-102.705095972053,12.)); #55567=CARTESIAN_POINT('Ctrl Pts',(47.7543388313348,-103.109432362548,13.)); #55568=CARTESIAN_POINT('Ctrl Pts',(47.7543388313348,-103.109432362548,12.)); #55569=CARTESIAN_POINT('',(50.8209127945001,-102.491259702674,13.)); #55570=CARTESIAN_POINT('Ctrl Pts',(50.8209127945001,-102.491259702674,13.)); #55571=CARTESIAN_POINT('Ctrl Pts',(49.9022261375482,-102.491259702674,13.)); #55572=CARTESIAN_POINT('Ctrl Pts',(48.8418560260828,-102.705095972053,13.)); #55573=CARTESIAN_POINT('Ctrl Pts',(47.7543388313348,-103.109432362548,13.)); #55574=CARTESIAN_POINT('',(50.8209127945001,-102.491259702674,12.)); #55575=CARTESIAN_POINT('',(50.8209127945001,-102.491259702674,13.)); #55576=CARTESIAN_POINT('Ctrl Pts',(50.8209127945001,-102.491259702674,12.)); #55577=CARTESIAN_POINT('Ctrl Pts',(49.9022261375482,-102.491259702674,12.)); #55578=CARTESIAN_POINT('Ctrl Pts',(48.8418560260828,-102.705095972053,12.)); #55579=CARTESIAN_POINT('Ctrl Pts',(47.7543388313348,-103.109432362548,12.)); #55580=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-106.352059654228,13.)); #55581=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-106.352059654228,12.)); #55582=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-104.590728210441,13.)); #55583=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-104.590728210441,12.)); #55584=CARTESIAN_POINT('Ctrl Pts',(54.6209109825189,-102.491339034072,13.)); #55585=CARTESIAN_POINT('Ctrl Pts',(54.6209109825189,-102.491339034072,12.)); #55586=CARTESIAN_POINT('Ctrl Pts',(50.8209127945001,-102.491259702674,13.)); #55587=CARTESIAN_POINT('Ctrl Pts',(50.8209127945001,-102.491259702674,12.)); #55588=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-106.352059654228,13.)); #55589=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-104.590728210441,13.)); #55590=CARTESIAN_POINT('Ctrl Pts',(54.6209109825189,-102.491339034072,13.)); #55591=CARTESIAN_POINT('Ctrl Pts',(50.8209127945001,-102.491259702674,13.)); #55592=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-106.352059654228,12.)); #55593=CARTESIAN_POINT('Ctrl Pts',(55.4183925861414,-104.590728210441,12.)); #55594=CARTESIAN_POINT('Ctrl Pts',(54.6209109825189,-102.491339034072,12.)); #55595=CARTESIAN_POINT('Ctrl Pts',(50.8209127945001,-102.491259702674,12.)); #55596=CARTESIAN_POINT('Ctrl Pts',(54.4768451637323,-95.4221217908776,13.)); #55597=CARTESIAN_POINT('Ctrl Pts',(54.4768451637323,-95.4221217908776,12.)); #55598=CARTESIAN_POINT('Ctrl Pts',(54.0151994079645,-96.4472499885476,13.)); #55599=CARTESIAN_POINT('Ctrl Pts',(54.0151994079645,-96.4472499885476,12.)); #55600=CARTESIAN_POINT('Ctrl Pts',(54.5247080368097,-97.8400431837953,13.)); #55601=CARTESIAN_POINT('Ctrl Pts',(54.5247080368097,-97.8400431837953,12.)); #55602=CARTESIAN_POINT('Ctrl Pts',(55.9502036327417,-99.4501650466836,13.)); #55603=CARTESIAN_POINT('Ctrl Pts',(55.9502036327417,-99.4501650466836,12.)); #55604=CARTESIAN_POINT('',(54.4768451637323,-95.4221217908776,12.)); #55605=CARTESIAN_POINT('',(54.4768451637323,-95.4221217908776,13.)); #55606=CARTESIAN_POINT('',(55.9502036327417,-99.4501650466836,12.)); #55607=CARTESIAN_POINT('Ctrl Pts',(54.4768451637323,-95.4221217908776,12.)); #55608=CARTESIAN_POINT('Ctrl Pts',(54.0151994079645,-96.4472499885476,12.)); #55609=CARTESIAN_POINT('Ctrl Pts',(54.5247080368097,-97.8400431837953,12.)); #55610=CARTESIAN_POINT('Ctrl Pts',(55.9502036327417,-99.4501650466836,12.)); #55611=CARTESIAN_POINT('',(55.9502036327417,-99.4501650466836,13.)); #55612=CARTESIAN_POINT('Ctrl Pts',(56.7445894950922,-93.9923398771203,13.)); #55613=CARTESIAN_POINT('Ctrl Pts',(56.7445894950922,-93.9923398771203,12.)); #55614=CARTESIAN_POINT('Ctrl Pts',(56.1959492916162,-93.9923398771203,13.)); #55615=CARTESIAN_POINT('Ctrl Pts',(56.1959492916162,-93.9923398771203,12.)); #55616=CARTESIAN_POINT('Ctrl Pts',(54.926186680227,-94.4241399195111,13.)); #55617=CARTESIAN_POINT('Ctrl Pts',(54.926186680227,-94.4241399195111,12.)); #55618=CARTESIAN_POINT('Ctrl Pts',(54.4768451637323,-95.4221217908776,13.)); #55619=CARTESIAN_POINT('Ctrl Pts',(54.4768451637323,-95.4221217908776,12.)); #55620=CARTESIAN_POINT('',(56.7445894950922,-93.9923398771203,12.)); #55621=CARTESIAN_POINT('',(56.7445894950922,-93.9923398771203,13.)); #55622=CARTESIAN_POINT('Ctrl Pts',(56.7445894950922,-93.9923398771203,12.)); #55623=CARTESIAN_POINT('Ctrl Pts',(56.1959492916162,-93.9923398771203,12.)); #55624=CARTESIAN_POINT('Ctrl Pts',(54.926186680227,-94.4241399195111,12.)); #55625=CARTESIAN_POINT('Ctrl Pts',(54.4768451637323,-95.4221217908776,12.)); #55626=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.6655529939449,13.)); #55627=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.6655529939449,12.)); #55628=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.8461311265147,13.)); #55629=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.8461311265147,12.)); #55630=CARTESIAN_POINT('Ctrl Pts',(56.9250884098108,-93.9923398771203,13.)); #55631=CARTESIAN_POINT('Ctrl Pts',(56.9250884098108,-93.9923398771203,12.)); #55632=CARTESIAN_POINT('Ctrl Pts',(56.7445894950922,-93.9923398771203,13.)); #55633=CARTESIAN_POINT('Ctrl Pts',(56.7445894950922,-93.9923398771203,12.)); #55634=CARTESIAN_POINT('',(57.0713767189081,-93.6655529939449,12.)); #55635=CARTESIAN_POINT('',(57.0713767189081,-93.6655529939449,13.)); #55636=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.6655529939449,12.)); #55637=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.8461311265147,12.)); #55638=CARTESIAN_POINT('Ctrl Pts',(56.9250884098108,-93.9923398771203,12.)); #55639=CARTESIAN_POINT('Ctrl Pts',(56.7445894950922,-93.9923398771203,12.)); #55640=CARTESIAN_POINT('Ctrl Pts',(56.7445882839258,-93.3387660350717,13.)); #55641=CARTESIAN_POINT('Ctrl Pts',(56.7445882839258,-93.3387660350717,12.)); #55642=CARTESIAN_POINT('Ctrl Pts',(56.9250871986444,-93.3387660350717,13.)); #55643=CARTESIAN_POINT('Ctrl Pts',(56.9250871986444,-93.3387660350717,12.)); #55644=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.4849748613752,13.)); #55645=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.4849748613752,12.)); #55646=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.6655529939449,13.)); #55647=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.6655529939449,12.)); #55648=CARTESIAN_POINT('',(56.7445882839258,-93.3387660350717,12.)); #55649=CARTESIAN_POINT('',(56.7445882839258,-93.3387660350717,13.)); #55650=CARTESIAN_POINT('Ctrl Pts',(56.7445882839258,-93.3387660350717,12.)); #55651=CARTESIAN_POINT('Ctrl Pts',(56.9250871986444,-93.3387660350717,12.)); #55652=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.4849748613752,12.)); #55653=CARTESIAN_POINT('Ctrl Pts',(57.0713767189081,-93.6655529939449,12.)); #55654=CARTESIAN_POINT('Ctrl Pts',(53.880818075567,-95.1537547233022,13.)); #55655=CARTESIAN_POINT('Ctrl Pts',(53.880818075567,-95.1537547233022,12.)); #55656=CARTESIAN_POINT('Ctrl Pts',(54.4384269661005,-93.9154253994739,13.)); #55657=CARTESIAN_POINT('Ctrl Pts',(54.4384269661005,-93.9154253994739,12.)); #55658=CARTESIAN_POINT('Ctrl Pts',(55.9192474311884,-93.3387660350717,13.)); #55659=CARTESIAN_POINT('Ctrl Pts',(55.9192474311884,-93.3387660350717,12.)); #55660=CARTESIAN_POINT('Ctrl Pts',(56.7445882839258,-93.3387660350717,13.)); #55661=CARTESIAN_POINT('Ctrl Pts',(56.7445882839258,-93.3387660350717,12.)); #55662=CARTESIAN_POINT('',(53.880818075567,-95.1537547233022,12.)); #55663=CARTESIAN_POINT('',(53.880818075567,-95.1537547233022,13.)); #55664=CARTESIAN_POINT('Ctrl Pts',(53.880818075567,-95.1537547233022,12.)); #55665=CARTESIAN_POINT('Ctrl Pts',(54.4384269661005,-93.9154253994739,12.)); #55666=CARTESIAN_POINT('Ctrl Pts',(55.9192474311884,-93.3387660350717,12.)); #55667=CARTESIAN_POINT('Ctrl Pts',(56.7445882839258,-93.3387660350717,12.)); #55668=CARTESIAN_POINT('Ctrl Pts',(55.4609360164697,-99.8836318054116,13.)); #55669=CARTESIAN_POINT('Ctrl Pts',(55.4609360164697,-99.8836318054116,12.)); #55670=CARTESIAN_POINT('Ctrl Pts',(53.4283808178003,-97.5876303567804,13.)); #55671=CARTESIAN_POINT('Ctrl Pts',(53.4283808178003,-97.5876303567804,12.)); #55672=CARTESIAN_POINT('Ctrl Pts',(53.4798154205377,-96.0441835060037,13.)); #55673=CARTESIAN_POINT('Ctrl Pts',(53.4798154205377,-96.0441835060037,12.)); #55674=CARTESIAN_POINT('Ctrl Pts',(53.880818075567,-95.1537547233022,13.)); #55675=CARTESIAN_POINT('Ctrl Pts',(53.880818075567,-95.1537547233022,12.)); #55676=CARTESIAN_POINT('',(55.4609360164697,-99.8836318054116,12.)); #55677=CARTESIAN_POINT('',(55.4609360164697,-99.8836318054116,13.)); #55678=CARTESIAN_POINT('Ctrl Pts',(55.4609360164697,-99.8836318054116,12.)); #55679=CARTESIAN_POINT('Ctrl Pts',(53.4283808178003,-97.5876303567804,12.)); #55680=CARTESIAN_POINT('Ctrl Pts',(53.4798154205377,-96.0441835060037,12.)); #55681=CARTESIAN_POINT('Ctrl Pts',(53.880818075567,-95.1537547233022,12.)); #55682=CARTESIAN_POINT('Ctrl Pts',(57.0311320823724,-103.34866800212,13.)); #55683=CARTESIAN_POINT('Ctrl Pts',(57.0311320823724,-103.34866800212,12.)); #55684=CARTESIAN_POINT('Ctrl Pts',(57.3125163120325,-102.560077570907,13.)); #55685=CARTESIAN_POINT('Ctrl Pts',(57.3125163120325,-102.560077570907,12.)); #55686=CARTESIAN_POINT('Ctrl Pts',(56.7695916027124,-101.361911849014,13.)); #55687=CARTESIAN_POINT('Ctrl Pts',(56.7695916027124,-101.361911849014,12.)); #55688=CARTESIAN_POINT('Ctrl Pts',(55.4609360164697,-99.8836318054116,13.)); #55689=CARTESIAN_POINT('Ctrl Pts',(55.4609360164697,-99.8836318054116,12.)); #55690=CARTESIAN_POINT('',(57.0311320823724,-103.34866800212,12.)); #55691=CARTESIAN_POINT('',(57.0311320823724,-103.34866800212,13.)); #55692=CARTESIAN_POINT('Ctrl Pts',(57.0311320823724,-103.34866800212,12.)); #55693=CARTESIAN_POINT('Ctrl Pts',(57.3125163120325,-102.560077570907,12.)); #55694=CARTESIAN_POINT('Ctrl Pts',(56.7695916027124,-101.361911849014,12.)); #55695=CARTESIAN_POINT('Ctrl Pts',(55.4609360164697,-99.8836318054116,12.)); #55696=CARTESIAN_POINT('Ctrl Pts',(55.6808838314111,-104.32775855445,13.)); #55697=CARTESIAN_POINT('Ctrl Pts',(55.6808838314111,-104.32775855445,12.)); #55698=CARTESIAN_POINT('Ctrl Pts',(55.8432854980524,-104.29521451377,13.)); #55699=CARTESIAN_POINT('Ctrl Pts',(55.8432854980524,-104.29521451377,12.)); #55700=CARTESIAN_POINT('Ctrl Pts',(56.7699888652856,-104.080346330634,13.)); #55701=CARTESIAN_POINT('Ctrl Pts',(56.7699888652856,-104.080346330634,12.)); #55702=CARTESIAN_POINT('Ctrl Pts',(57.0311320823724,-103.34866800212,13.)); #55703=CARTESIAN_POINT('Ctrl Pts',(57.0311320823724,-103.34866800212,12.)); #55704=CARTESIAN_POINT('',(55.6808838314111,-104.32775855445,12.)); #55705=CARTESIAN_POINT('',(55.6808838314111,-104.32775855445,13.)); #55706=CARTESIAN_POINT('Ctrl Pts',(55.6808838314111,-104.32775855445,12.)); #55707=CARTESIAN_POINT('Ctrl Pts',(55.8432854980524,-104.29521451377,12.)); #55708=CARTESIAN_POINT('Ctrl Pts',(56.7699888652856,-104.080346330634,12.)); #55709=CARTESIAN_POINT('Ctrl Pts',(57.0311320823724,-103.34866800212,12.)); #55710=CARTESIAN_POINT('Ctrl Pts',(50.8207529205377,-101.83776458644,13.)); #55711=CARTESIAN_POINT('Ctrl Pts',(50.8207529205377,-101.83776458644,12.)); #55712=CARTESIAN_POINT('Ctrl Pts',(53.7870762199457,-101.83776458644,13.)); #55713=CARTESIAN_POINT('Ctrl Pts',(53.7870762199457,-101.83776458644,12.)); #55714=CARTESIAN_POINT('Ctrl Pts',(55.1141463798578,-103.030056756965,13.)); #55715=CARTESIAN_POINT('Ctrl Pts',(55.1141463798578,-103.030056756965,12.)); #55716=CARTESIAN_POINT('Ctrl Pts',(55.6808838314111,-104.32775855445,13.)); #55717=CARTESIAN_POINT('Ctrl Pts',(55.6808838314111,-104.32775855445,12.)); #55718=CARTESIAN_POINT('',(50.8207529205377,-101.83776458644,12.)); #55719=CARTESIAN_POINT('',(50.8207529205377,-101.83776458644,13.)); #55720=CARTESIAN_POINT('Ctrl Pts',(50.8207529205377,-101.83776458644,12.)); #55721=CARTESIAN_POINT('Ctrl Pts',(53.7870762199457,-101.83776458644,12.)); #55722=CARTESIAN_POINT('Ctrl Pts',(55.1141463798578,-103.030056756965,12.)); #55723=CARTESIAN_POINT('Ctrl Pts',(55.6808838314111,-104.32775855445,12.)); #55724=CARTESIAN_POINT('Ctrl Pts',(47.8256959098871,-102.389897188178,13.)); #55725=CARTESIAN_POINT('Ctrl Pts',(47.8256959098871,-102.389897188178,12.)); #55726=CARTESIAN_POINT('Ctrl Pts',(48.8812249893243,-102.027947381965,13.)); #55727=CARTESIAN_POINT('Ctrl Pts',(48.8812249893243,-102.027947381965,12.)); #55728=CARTESIAN_POINT('Ctrl Pts',(49.9110361618097,-101.83776458644,13.)); #55729=CARTESIAN_POINT('Ctrl Pts',(49.9110361618097,-101.83776458644,12.)); #55730=CARTESIAN_POINT('Ctrl Pts',(50.8207529205377,-101.83776458644,13.)); #55731=CARTESIAN_POINT('Ctrl Pts',(50.8207529205377,-101.83776458644,12.)); #55732=CARTESIAN_POINT('',(47.8256959098871,-102.389897188178,12.)); #55733=CARTESIAN_POINT('',(47.8256959098871,-102.389897188178,13.)); #55734=CARTESIAN_POINT('Ctrl Pts',(47.8256959098871,-102.389897188178,12.)); #55735=CARTESIAN_POINT('Ctrl Pts',(48.8812249893243,-102.027947381965,12.)); #55736=CARTESIAN_POINT('Ctrl Pts',(49.9110361618097,-101.83776458644,12.)); #55737=CARTESIAN_POINT('Ctrl Pts',(50.8207529205377,-101.83776458644,12.)); #55738=CARTESIAN_POINT('Ctrl Pts',(45.867514805227,-101.1739515438,13.)); #55739=CARTESIAN_POINT('Ctrl Pts',(45.867514805227,-101.1739515438,12.)); #55740=CARTESIAN_POINT('Ctrl Pts',(46.6328484195764,-101.024885424606,13.)); #55741=CARTESIAN_POINT('Ctrl Pts',(46.6328484195764,-101.024885424606,12.)); #55742=CARTESIAN_POINT('Ctrl Pts',(47.4177084583337,-101.526297406188,13.)); #55743=CARTESIAN_POINT('Ctrl Pts',(47.4177084583337,-101.526297406188,12.)); #55744=CARTESIAN_POINT('Ctrl Pts',(47.8256959098871,-102.389897188178,13.)); #55745=CARTESIAN_POINT('Ctrl Pts',(47.8256959098871,-102.389897188178,12.)); #55746=CARTESIAN_POINT('',(45.867514805227,-101.1739515438,12.)); #55747=CARTESIAN_POINT('',(45.867514805227,-101.1739515438,13.)); #55748=CARTESIAN_POINT('Ctrl Pts',(45.867514805227,-101.1739515438,12.)); #55749=CARTESIAN_POINT('Ctrl Pts',(46.6328484195764,-101.024885424606,12.)); #55750=CARTESIAN_POINT('Ctrl Pts',(47.4177084583337,-101.526297406188,12.)); #55751=CARTESIAN_POINT('Ctrl Pts',(47.8256959098871,-102.389897188178,12.)); #55752=CARTESIAN_POINT('Ctrl Pts',(44.736262392431,-102.113513258926,13.)); #55753=CARTESIAN_POINT('Ctrl Pts',(44.736262392431,-102.113513258926,12.)); #55754=CARTESIAN_POINT('Ctrl Pts',(44.9805785721834,-101.601624082557,13.)); #55755=CARTESIAN_POINT('Ctrl Pts',(44.9805785721834,-101.601624082557,12.)); #55756=CARTESIAN_POINT('Ctrl Pts',(45.3823748439844,-101.268090056411,13.)); #55757=CARTESIAN_POINT('Ctrl Pts',(45.3823748439844,-101.268090056411,12.)); #55758=CARTESIAN_POINT('Ctrl Pts',(45.867514805227,-101.1739515438,13.)); #55759=CARTESIAN_POINT('Ctrl Pts',(45.867514805227,-101.1739515438,12.)); #55760=CARTESIAN_POINT('',(44.736262392431,-102.113513258926,12.)); #55761=CARTESIAN_POINT('',(44.736262392431,-102.113513258926,13.)); #55762=CARTESIAN_POINT('Ctrl Pts',(44.736262392431,-102.113513258926,12.)); #55763=CARTESIAN_POINT('Ctrl Pts',(44.9805785721834,-101.601624082557,12.)); #55764=CARTESIAN_POINT('Ctrl Pts',(45.3823748439844,-101.268090056411,12.)); #55765=CARTESIAN_POINT('Ctrl Pts',(45.867514805227,-101.1739515438,12.)); #55766=CARTESIAN_POINT('Ctrl Pts',(44.5571923512514,-103.758718675605,13.)); #55767=CARTESIAN_POINT('Ctrl Pts',(44.5571923512514,-103.758718675605,12.)); #55768=CARTESIAN_POINT('Ctrl Pts',(44.4440830368097,-103.176582454673,13.)); #55769=CARTESIAN_POINT('Ctrl Pts',(44.4440830368097,-103.176582454673,12.)); #55770=CARTESIAN_POINT('Ctrl Pts',(44.5075829762514,-102.59222374343,13.)); #55771=CARTESIAN_POINT('Ctrl Pts',(44.5075829762514,-102.59222374343,12.)); #55772=CARTESIAN_POINT('Ctrl Pts',(44.736262392431,-102.113513258926,13.)); #55773=CARTESIAN_POINT('Ctrl Pts',(44.736262392431,-102.113513258926,12.)); #55774=CARTESIAN_POINT('',(44.5571923512514,-103.758718675605,12.)); #55775=CARTESIAN_POINT('',(44.5571923512514,-103.758718675605,13.)); #55776=CARTESIAN_POINT('Ctrl Pts',(44.5571923512514,-103.758718675605,12.)); #55777=CARTESIAN_POINT('Ctrl Pts',(44.4440830368097,-103.176582454673,12.)); #55778=CARTESIAN_POINT('Ctrl Pts',(44.5075829762514,-102.59222374343,12.)); #55779=CARTESIAN_POINT('Ctrl Pts',(44.736262392431,-102.113513258926,12.)); #55780=CARTESIAN_POINT('Ctrl Pts',(44.6168824154432,-104.00827345275,13.)); #55781=CARTESIAN_POINT('Ctrl Pts',(44.6168824154432,-104.00827345275,12.)); #55782=CARTESIAN_POINT('Ctrl Pts',(44.5933873015936,-103.926278699867,13.)); #55783=CARTESIAN_POINT('Ctrl Pts',(44.5933873015936,-103.926278699867,12.)); #55784=CARTESIAN_POINT('Ctrl Pts',(44.5734642201955,-103.842618593208,13.)); #55785=CARTESIAN_POINT('Ctrl Pts',(44.5734642201955,-103.842618593208,12.)); #55786=CARTESIAN_POINT('Ctrl Pts',(44.5571923512514,-103.758718675605,13.)); #55787=CARTESIAN_POINT('Ctrl Pts',(44.5571923512514,-103.758718675605,12.)); #55788=CARTESIAN_POINT('',(44.6168824154432,-104.00827345275,12.)); #55789=CARTESIAN_POINT('',(44.6168824154432,-104.00827345275,13.)); #55790=CARTESIAN_POINT('Ctrl Pts',(44.6168824154432,-104.00827345275,12.)); #55791=CARTESIAN_POINT('Ctrl Pts',(44.5933873015936,-103.926278699867,12.)); #55792=CARTESIAN_POINT('Ctrl Pts',(44.5734642201955,-103.842618593208,12.)); #55793=CARTESIAN_POINT('Ctrl Pts',(44.5571923512514,-103.758718675605,12.)); #55794=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.82862697982,13.)); #55795=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.82862697982,12.)); #55796=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.038368772498,13.)); #55797=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.038368772498,12.)); #55798=CARTESIAN_POINT('Ctrl Pts',(43.1901169872577,-104.993794692985,13.)); #55799=CARTESIAN_POINT('Ctrl Pts',(43.1901169872577,-104.993794692985,12.)); #55800=CARTESIAN_POINT('Ctrl Pts',(44.6168824154432,-104.00827345275,13.)); #55801=CARTESIAN_POINT('Ctrl Pts',(44.6168824154432,-104.00827345275,12.)); #55802=CARTESIAN_POINT('',(42.3458051055963,-106.82862697982,12.)); #55803=CARTESIAN_POINT('',(42.3458051055963,-106.82862697982,13.)); #55804=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.82862697982,12.)); #55805=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.038368772498,12.)); #55806=CARTESIAN_POINT('Ctrl Pts',(43.1901169872577,-104.993794692985,12.)); #55807=CARTESIAN_POINT('Ctrl Pts',(44.6168824154432,-104.00827345275,12.)); #55808=CARTESIAN_POINT('Ctrl Pts',(49.4475657838876,-109.027552837364,13.)); #55809=CARTESIAN_POINT('Ctrl Pts',(49.4475657838876,-109.027552837364,12.)); #55810=CARTESIAN_POINT('Ctrl Pts',(45.7590887683923,-109.027552837364,13.)); #55811=CARTESIAN_POINT('Ctrl Pts',(45.7590887683923,-109.027552837364,12.)); #55812=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-108.761090177528,13.)); #55813=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-108.761090177528,12.)); #55814=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.82862697982,13.)); #55815=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.82862697982,12.)); #55816=CARTESIAN_POINT('',(49.4475657838876,-109.027552837364,12.)); #55817=CARTESIAN_POINT('',(49.4475657838876,-109.027552837364,13.)); #55818=CARTESIAN_POINT('Ctrl Pts',(49.4475657838876,-109.027552837364,12.)); #55819=CARTESIAN_POINT('Ctrl Pts',(45.7590887683923,-109.027552837364,12.)); #55820=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-108.761090177528,12.)); #55821=CARTESIAN_POINT('Ctrl Pts',(42.3458051055963,-106.82862697982,12.)); #55822=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-106.352138380042,13.)); #55823=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-106.352138380042,12.)); #55824=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-109.027552837364,13.)); #55825=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-109.027552837364,12.)); #55826=CARTESIAN_POINT('Ctrl Pts',(53.0021374553735,-109.027552837364,13.)); #55827=CARTESIAN_POINT('Ctrl Pts',(53.0021374553735,-109.027552837364,12.)); #55828=CARTESIAN_POINT('Ctrl Pts',(49.4475657838876,-109.027552837364,13.)); #55829=CARTESIAN_POINT('Ctrl Pts',(49.4475657838876,-109.027552837364,12.)); #55830=CARTESIAN_POINT('',(56.0718858856256,-106.352138380042,12.)); #55831=CARTESIAN_POINT('',(56.0718858856256,-106.352138380042,13.)); #55832=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-106.352138380042,12.)); #55833=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-109.027552837364,12.)); #55834=CARTESIAN_POINT('Ctrl Pts',(53.0021374553735,-109.027552837364,12.)); #55835=CARTESIAN_POINT('Ctrl Pts',(49.4475657838876,-109.027552837364,12.)); #55836=CARTESIAN_POINT('Ctrl Pts',(55.8973398536737,-104.949343675605,13.)); #55837=CARTESIAN_POINT('Ctrl Pts',(55.8973398536737,-104.949343675605,12.)); #55838=CARTESIAN_POINT('Ctrl Pts',(56.0297372955377,-105.446786664954,13.)); #55839=CARTESIAN_POINT('Ctrl Pts',(56.0297372955377,-105.446786664954,12.)); #55840=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-105.934467653266,13.)); #55841=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-105.934467653266,12.)); #55842=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-106.352138380042,13.)); #55843=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-106.352138380042,12.)); #55844=CARTESIAN_POINT('',(55.8973398536737,-104.949343675605,12.)); #55845=CARTESIAN_POINT('',(55.8973398536737,-104.949343675605,13.)); #55846=CARTESIAN_POINT('Ctrl Pts',(55.8973398536737,-104.949343675605,12.)); #55847=CARTESIAN_POINT('Ctrl Pts',(56.0297372955377,-105.446786664954,12.)); #55848=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-105.934467653266,12.)); #55849=CARTESIAN_POINT('Ctrl Pts',(56.0718858856256,-106.352138380042,12.)); #55850=CARTESIAN_POINT('Ctrl Pts',(57.6450190300043,-103.572981466285,13.)); #55851=CARTESIAN_POINT('Ctrl Pts',(57.6450190300043,-103.572981466285,12.)); #55852=CARTESIAN_POINT('Ctrl Pts',(57.2983081192071,-104.535799392692,13.)); #55853=CARTESIAN_POINT('Ctrl Pts',(57.2983081192071,-104.535799392692,12.)); #55854=CARTESIAN_POINT('Ctrl Pts',(56.2746097034509,-104.860364126197,13.)); #55855=CARTESIAN_POINT('Ctrl Pts',(56.2746097034509,-104.860364126197,12.)); #55856=CARTESIAN_POINT('Ctrl Pts',(55.8973398536737,-104.949343675605,13.)); #55857=CARTESIAN_POINT('Ctrl Pts',(55.8973398536737,-104.949343675605,12.)); #55858=CARTESIAN_POINT('',(57.6450190300043,-103.572981466285,12.)); #55859=CARTESIAN_POINT('',(57.6450190300043,-103.572981466285,13.)); #55860=CARTESIAN_POINT('Ctrl Pts',(57.6450190300043,-103.572981466285,12.)); #55861=CARTESIAN_POINT('Ctrl Pts',(57.2983081192071,-104.535799392692,12.)); #55862=CARTESIAN_POINT('Ctrl Pts',(56.2746097034509,-104.860364126197,12.)); #55863=CARTESIAN_POINT('Ctrl Pts',(55.8973398536737,-104.949343675605,12.)); #55864=CARTESIAN_POINT('Ctrl Pts',(55.9502036327417,-99.4501650466836,13.)); #55865=CARTESIAN_POINT('Ctrl Pts',(55.9502036327417,-99.4501650466836,12.)); #55866=CARTESIAN_POINT('Ctrl Pts',(57.4499146598871,-101.144265250198,13.)); #55867=CARTESIAN_POINT('Ctrl Pts',(57.4499146598871,-101.144265250198,12.)); #55868=CARTESIAN_POINT('Ctrl Pts',(58.0202250522668,-102.531263922683,13.)); #55869=CARTESIAN_POINT('Ctrl Pts',(58.0202250522668,-102.531263922683,12.)); #55870=CARTESIAN_POINT('Ctrl Pts',(57.6450190300043,-103.572981466285,13.)); #55871=CARTESIAN_POINT('Ctrl Pts',(57.6450190300043,-103.572981466285,12.)); #55872=CARTESIAN_POINT('Ctrl Pts',(55.9502036327417,-99.4501650466836,12.)); #55873=CARTESIAN_POINT('Ctrl Pts',(57.4499146598871,-101.144265250198,12.)); #55874=CARTESIAN_POINT('Ctrl Pts',(58.0202250522668,-102.531263922683,12.)); #55875=CARTESIAN_POINT('Ctrl Pts',(57.6450190300043,-103.572981466285,12.)); #55876=CARTESIAN_POINT('Origin',(50.1830150789316,-101.183159436218,12.)); #55877=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-106.360790952674,13.)); #55878=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-106.360790952674,12.)); #55879=CARTESIAN_POINT('Ctrl Pts',(45.4673857039506,-106.360790952674,13.)); #55880=CARTESIAN_POINT('Ctrl Pts',(45.4673857039506,-106.360790952674,12.)); #55881=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.214343980781,13.)); #55882=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.214343980781,12.)); #55883=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.034003728858,13.)); #55884=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.034003728858,12.)); #55885=CARTESIAN_POINT('',(45.2872044176157,-106.360790952674,13.)); #55886=CARTESIAN_POINT('',(45.61399133864,-106.034003728858,13.)); #55887=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-106.360790952674,13.)); #55888=CARTESIAN_POINT('Ctrl Pts',(45.4673857039506,-106.360790952674,13.)); #55889=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.214343980781,13.)); #55890=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.034003728858,13.)); #55891=CARTESIAN_POINT('',(45.2872044176157,-106.360790952674,12.)); #55892=CARTESIAN_POINT('',(45.2872044176157,-106.360790952674,13.)); #55893=CARTESIAN_POINT('',(45.61399133864,-106.034003728858,12.)); #55894=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-106.360790952674,12.)); #55895=CARTESIAN_POINT('Ctrl Pts',(45.4673857039506,-106.360790952674,12.)); #55896=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.214343980781,12.)); #55897=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.034003728858,12.)); #55898=CARTESIAN_POINT('',(45.61399133864,-106.034003728858,13.)); #55899=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.034003728858,13.)); #55900=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.034003728858,12.)); #55901=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.214343980781,13.)); #55902=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.214343980781,12.)); #55903=CARTESIAN_POINT('Ctrl Pts',(45.1070231312807,-106.360790952674,13.)); #55904=CARTESIAN_POINT('Ctrl Pts',(45.1070231312807,-106.360790952674,12.)); #55905=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-106.360790952674,13.)); #55906=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-106.360790952674,12.)); #55907=CARTESIAN_POINT('',(44.9604174965913,-106.034003728858,13.)); #55908=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.034003728858,13.)); #55909=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.214343980781,13.)); #55910=CARTESIAN_POINT('Ctrl Pts',(45.1070231312807,-106.360790952674,13.)); #55911=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-106.360790952674,13.)); #55912=CARTESIAN_POINT('',(44.9604174965913,-106.034003728858,12.)); #55913=CARTESIAN_POINT('',(44.9604174965913,-106.034003728858,13.)); #55914=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.034003728858,12.)); #55915=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.214343980781,12.)); #55916=CARTESIAN_POINT('Ctrl Pts',(45.1070231312807,-106.360790952674,12.)); #55917=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-106.360790952674,12.)); #55918=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.707216505042,13.)); #55919=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.707216505042,12.)); #55920=CARTESIAN_POINT('Ctrl Pts',(45.1070231312807,-105.707216505042,13.)); #55921=CARTESIAN_POINT('Ctrl Pts',(45.1070231312807,-105.707216505042,12.)); #55922=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-105.853663476936,13.)); #55923=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-105.853663476936,12.)); #55924=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.034003728858,13.)); #55925=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.034003728858,12.)); #55926=CARTESIAN_POINT('',(45.2872044176157,-105.707216505042,13.)); #55927=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.707216505042,13.)); #55928=CARTESIAN_POINT('Ctrl Pts',(45.1070231312807,-105.707216505042,13.)); #55929=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-105.853663476936,13.)); #55930=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.034003728858,13.)); #55931=CARTESIAN_POINT('',(45.2872044176157,-105.707216505042,12.)); #55932=CARTESIAN_POINT('',(45.2872044176157,-105.707216505042,13.)); #55933=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.707216505042,12.)); #55934=CARTESIAN_POINT('Ctrl Pts',(45.1070231312807,-105.707216505042,12.)); #55935=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-105.853663476936,12.)); #55936=CARTESIAN_POINT('Ctrl Pts',(44.9604174965913,-106.034003728858,12.)); #55937=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.034003728858,13.)); #55938=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.034003728858,12.)); #55939=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-105.853663476936,13.)); #55940=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-105.853663476936,12.)); #55941=CARTESIAN_POINT('Ctrl Pts',(45.4673857039506,-105.707216505042,13.)); #55942=CARTESIAN_POINT('Ctrl Pts',(45.4673857039506,-105.707216505042,12.)); #55943=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.707216505042,13.)); #55944=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.707216505042,12.)); #55945=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.034003728858,13.)); #55946=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-105.853663476936,13.)); #55947=CARTESIAN_POINT('Ctrl Pts',(45.4673857039506,-105.707216505042,13.)); #55948=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.707216505042,13.)); #55949=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-106.034003728858,12.)); #55950=CARTESIAN_POINT('Ctrl Pts',(45.61399133864,-105.853663476936,12.)); #55951=CARTESIAN_POINT('Ctrl Pts',(45.4673857039506,-105.707216505042,12.)); #55952=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.707216505042,12.)); #55953=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.034003728858,13.)); #55954=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.034003728858,12.)); #55955=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-105.493380235664,13.)); #55956=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-105.493380235664,12.)); #55957=CARTESIAN_POINT('Ctrl Pts',(44.7465812272127,-105.053563331596,13.)); #55958=CARTESIAN_POINT('Ctrl Pts',(44.7465812272127,-105.053563331596,12.)); #55959=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.053563331596,13.)); #55960=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.053563331596,12.)); #55961=CARTESIAN_POINT('',(44.3067643231447,-106.034003728858,13.)); #55962=CARTESIAN_POINT('',(45.2872044176157,-105.053563331596,13.)); #55963=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.034003728858,13.)); #55964=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-105.493380235664,13.)); #55965=CARTESIAN_POINT('Ctrl Pts',(44.7465812272127,-105.053563331596,13.)); #55966=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.053563331596,13.)); #55967=CARTESIAN_POINT('',(44.3067643231447,-106.034003728858,12.)); #55968=CARTESIAN_POINT('',(44.3067643231447,-106.034003728858,13.)); #55969=CARTESIAN_POINT('',(45.2872044176157,-105.053563331596,12.)); #55970=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.034003728858,12.)); #55971=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-105.493380235664,12.)); #55972=CARTESIAN_POINT('Ctrl Pts',(44.7465812272127,-105.053563331596,12.)); #55973=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.053563331596,12.)); #55974=CARTESIAN_POINT('',(45.2872044176157,-105.053563331596,13.)); #55975=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-107.014444126121,13.)); #55976=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-107.014444126121,12.)); #55977=CARTESIAN_POINT('Ctrl Pts',(44.7465812272127,-107.014444126121,13.)); #55978=CARTESIAN_POINT('Ctrl Pts',(44.7465812272127,-107.014444126121,12.)); #55979=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.574627222053,13.)); #55980=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.574627222053,12.)); #55981=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.034003728858,13.)); #55982=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.034003728858,12.)); #55983=CARTESIAN_POINT('',(45.2872044176157,-107.014444126121,13.)); #55984=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-107.014444126121,13.)); #55985=CARTESIAN_POINT('Ctrl Pts',(44.7465812272127,-107.014444126121,13.)); #55986=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.574627222053,13.)); #55987=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.034003728858,13.)); #55988=CARTESIAN_POINT('',(45.2872044176157,-107.014444126121,12.)); #55989=CARTESIAN_POINT('',(45.2872044176157,-107.014444126121,13.)); #55990=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-107.014444126121,12.)); #55991=CARTESIAN_POINT('Ctrl Pts',(44.7465812272127,-107.014444126121,12.)); #55992=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.574627222053,12.)); #55993=CARTESIAN_POINT('Ctrl Pts',(44.3067643231447,-106.034003728858,12.)); #55994=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.034003728858,13.)); #55995=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.034003728858,12.)); #55996=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.574627222053,13.)); #55997=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.574627222053,12.)); #55998=CARTESIAN_POINT('Ctrl Pts',(45.8278276080186,-107.014444126121,13.)); #55999=CARTESIAN_POINT('Ctrl Pts',(45.8278276080186,-107.014444126121,12.)); #56000=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-107.014444126121,13.)); #56001=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-107.014444126121,12.)); #56002=CARTESIAN_POINT('',(46.2676445120866,-106.034003728858,13.)); #56003=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.034003728858,13.)); #56004=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.574627222053,13.)); #56005=CARTESIAN_POINT('Ctrl Pts',(45.8278276080186,-107.014444126121,13.)); #56006=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-107.014444126121,13.)); #56007=CARTESIAN_POINT('',(46.2676445120866,-106.034003728858,12.)); #56008=CARTESIAN_POINT('',(46.2676445120866,-106.034003728858,13.)); #56009=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.034003728858,12.)); #56010=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.574627222053,12.)); #56011=CARTESIAN_POINT('Ctrl Pts',(45.8278276080186,-107.014444126121,12.)); #56012=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-107.014444126121,12.)); #56013=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.053563331596,13.)); #56014=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.053563331596,12.)); #56015=CARTESIAN_POINT('Ctrl Pts',(45.8279069394166,-105.053563331596,13.)); #56016=CARTESIAN_POINT('Ctrl Pts',(45.8279069394166,-105.053563331596,12.)); #56017=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-105.493380235664,13.)); #56018=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-105.493380235664,12.)); #56019=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.034003728858,13.)); #56020=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.034003728858,12.)); #56021=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.053563331596,13.)); #56022=CARTESIAN_POINT('Ctrl Pts',(45.8279069394166,-105.053563331596,13.)); #56023=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-105.493380235664,13.)); #56024=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.034003728858,13.)); #56025=CARTESIAN_POINT('Ctrl Pts',(45.2872044176157,-105.053563331596,12.)); #56026=CARTESIAN_POINT('Ctrl Pts',(45.8279069394166,-105.053563331596,12.)); #56027=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-105.493380235664,12.)); #56028=CARTESIAN_POINT('Ctrl Pts',(46.2676445120866,-106.034003728858,12.)); #56029=CARTESIAN_POINT('Origin',(45.2872044176157,-106.034003728858,12.)); #56030=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-106.216193282898,13.)); #56031=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-106.216193282898,12.)); #56032=CARTESIAN_POINT('Ctrl Pts',(79.8756768466324,-106.216193282898,13.)); #56033=CARTESIAN_POINT('Ctrl Pts',(79.8756768466324,-106.216193282898,12.)); #56034=CARTESIAN_POINT('Ctrl Pts',(79.7609799201578,-106.332239615257,13.)); #56035=CARTESIAN_POINT('Ctrl Pts',(79.7609799201578,-106.332239615257,12.)); #56036=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-106.47527303582,13.)); #56037=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-106.47527303582,12.)); #56038=CARTESIAN_POINT('',(80.0173613760561,-106.216193282898,13.)); #56039=CARTESIAN_POINT('',(79.7609801775307,-106.47527303582,13.)); #56040=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-106.216193282898,13.)); #56041=CARTESIAN_POINT('Ctrl Pts',(79.8756768466324,-106.216193282898,13.)); #56042=CARTESIAN_POINT('Ctrl Pts',(79.7609799201578,-106.332239615257,13.)); #56043=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-106.47527303582,13.)); #56044=CARTESIAN_POINT('',(80.0173613760561,-106.216193282898,12.)); #56045=CARTESIAN_POINT('',(80.0173613760561,-106.216193282898,13.)); #56046=CARTESIAN_POINT('',(79.7609801775307,-106.47527303582,12.)); #56047=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-106.216193282898,12.)); #56048=CARTESIAN_POINT('Ctrl Pts',(79.8756768466324,-106.216193282898,12.)); #56049=CARTESIAN_POINT('Ctrl Pts',(79.7609799201578,-106.332239615257,12.)); #56050=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-106.47527303582,12.)); #56051=CARTESIAN_POINT('',(79.7609801775307,-106.47527303582,13.)); #56052=CARTESIAN_POINT('Origin',(85.2084071657747,-106.216193282898,13.)); #56053=CARTESIAN_POINT('',(85.2084071657747,-106.216193282898,13.)); #56054=CARTESIAN_POINT('',(76.2162086587537,-106.216193282898,13.)); #56055=CARTESIAN_POINT('',(85.2084071657747,-106.216193282898,12.)); #56056=CARTESIAN_POINT('',(85.2084071657747,-106.216193282898,13.)); #56057=CARTESIAN_POINT('',(80.0173613760561,-106.216193282898,12.)); #56058=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-106.47527303582,13.)); #56059=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-106.47527303582,12.)); #56060=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-106.332239615257,13.)); #56061=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-106.332239615257,12.)); #56062=CARTESIAN_POINT('Ctrl Pts',(85.3500919525713,-106.216193282898,13.)); #56063=CARTESIAN_POINT('Ctrl Pts',(85.3500919525713,-106.216193282898,12.)); #56064=CARTESIAN_POINT('Ctrl Pts',(85.2084071657747,-106.216193282898,13.)); #56065=CARTESIAN_POINT('Ctrl Pts',(85.2084071657747,-106.216193282898,12.)); #56066=CARTESIAN_POINT('',(85.464788621673,-106.47527303582,13.)); #56067=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-106.47527303582,13.)); #56068=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-106.332239615257,13.)); #56069=CARTESIAN_POINT('Ctrl Pts',(85.3500919525713,-106.216193282898,13.)); #56070=CARTESIAN_POINT('Ctrl Pts',(85.2084071657747,-106.216193282898,13.)); #56071=CARTESIAN_POINT('',(85.464788621673,-106.47527303582,12.)); #56072=CARTESIAN_POINT('',(85.464788621673,-106.47527303582,13.)); #56073=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-106.47527303582,12.)); #56074=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-106.332239615257,12.)); #56075=CARTESIAN_POINT('Ctrl Pts',(85.3500919525713,-106.216193282898,12.)); #56076=CARTESIAN_POINT('Ctrl Pts',(85.2084071657747,-106.216193282898,12.)); #56077=CARTESIAN_POINT('Origin',(85.464788621673,-107.357764409359,13.)); #56078=CARTESIAN_POINT('',(85.464788621673,-107.357764409359,13.)); #56079=CARTESIAN_POINT('',(85.464788621673,-92.840344036925,13.)); #56080=CARTESIAN_POINT('',(85.464788621673,-107.357764409359,12.)); #56081=CARTESIAN_POINT('',(85.464788621673,-107.357764409359,13.)); #56082=CARTESIAN_POINT('',(85.464788621673,-106.47527303582,12.)); #56083=CARTESIAN_POINT('Ctrl Pts',(85.2084071657747,-107.616844162281,13.)); #56084=CARTESIAN_POINT('Ctrl Pts',(85.2084071657747,-107.616844162281,12.)); #56085=CARTESIAN_POINT('Ctrl Pts',(85.3500919525713,-107.616844162281,13.)); #56086=CARTESIAN_POINT('Ctrl Pts',(85.3500919525713,-107.616844162281,12.)); #56087=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-107.500798344667,13.)); #56088=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-107.500798344667,12.)); #56089=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-107.357764409359,13.)); #56090=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-107.357764409359,12.)); #56091=CARTESIAN_POINT('',(85.2084071657747,-107.616844162281,13.)); #56092=CARTESIAN_POINT('Ctrl Pts',(85.2084071657747,-107.616844162281,13.)); #56093=CARTESIAN_POINT('Ctrl Pts',(85.3500919525713,-107.616844162281,13.)); #56094=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-107.500798344667,13.)); #56095=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-107.357764409359,13.)); #56096=CARTESIAN_POINT('',(85.2084071657747,-107.616844162281,12.)); #56097=CARTESIAN_POINT('',(85.2084071657747,-107.616844162281,13.)); #56098=CARTESIAN_POINT('Ctrl Pts',(85.2084071657747,-107.616844162281,12.)); #56099=CARTESIAN_POINT('Ctrl Pts',(85.3500919525713,-107.616844162281,12.)); #56100=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-107.500798344667,12.)); #56101=CARTESIAN_POINT('Ctrl Pts',(85.464788621673,-107.357764409359,12.)); #56102=CARTESIAN_POINT('Origin',(80.0173613760561,-107.616844162281,13.)); #56103=CARTESIAN_POINT('',(80.0173613760561,-107.616844162281,13.)); #56104=CARTESIAN_POINT('',(73.6206857638944,-107.616844162281,13.)); #56105=CARTESIAN_POINT('',(80.0173613760561,-107.616844162281,12.)); #56106=CARTESIAN_POINT('',(80.0173613760561,-107.616844162281,13.)); #56107=CARTESIAN_POINT('',(85.2084071657747,-107.616844162281,12.)); #56108=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-107.357764409359,13.)); #56109=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-107.357764409359,12.)); #56110=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-107.500797829921,13.)); #56111=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-107.500797829921,12.)); #56112=CARTESIAN_POINT('Ctrl Pts',(79.8756771040053,-107.616844162281,13.)); #56113=CARTESIAN_POINT('Ctrl Pts',(79.8756771040053,-107.616844162281,12.)); #56114=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-107.616844162281,13.)); #56115=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-107.616844162281,12.)); #56116=CARTESIAN_POINT('',(79.7609801775307,-107.357764409359,13.)); #56117=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-107.357764409359,13.)); #56118=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-107.500797829921,13.)); #56119=CARTESIAN_POINT('Ctrl Pts',(79.8756771040053,-107.616844162281,13.)); #56120=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-107.616844162281,13.)); #56121=CARTESIAN_POINT('',(79.7609801775307,-107.357764409359,12.)); #56122=CARTESIAN_POINT('',(79.7609801775307,-107.357764409359,13.)); #56123=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-107.357764409359,12.)); #56124=CARTESIAN_POINT('Ctrl Pts',(79.7609801775307,-107.500797829921,12.)); #56125=CARTESIAN_POINT('Ctrl Pts',(79.8756771040053,-107.616844162281,12.)); #56126=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-107.616844162281,12.)); #56127=CARTESIAN_POINT('Origin',(79.7609801775307,-106.47527303582,13.)); #56128=CARTESIAN_POINT('',(79.7609801775307,-92.3990983501555,13.)); #56129=CARTESIAN_POINT('',(79.7609801775307,-107.357764409359,12.)); #56130=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-104.308177115257,13.)); #56131=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-104.308177115257,12.)); #56132=CARTESIAN_POINT('Ctrl Pts',(79.8743274407477,-104.308177115257,13.)); #56133=CARTESIAN_POINT('Ctrl Pts',(79.8743274407477,-104.308177115257,12.)); #56134=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-104.424223190243,13.)); #56135=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-104.424223190243,12.)); #56136=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-104.567256868179,13.)); #56137=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-104.567256868179,12.)); #56138=CARTESIAN_POINT('',(80.0173613760561,-104.308177115257,13.)); #56139=CARTESIAN_POINT('',(79.7582813657612,-104.567256868179,13.)); #56140=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-104.308177115257,13.)); #56141=CARTESIAN_POINT('Ctrl Pts',(79.8743274407477,-104.308177115257,13.)); #56142=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-104.424223190243,13.)); #56143=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-104.567256868179,13.)); #56144=CARTESIAN_POINT('',(80.0173613760561,-104.308177115257,12.)); #56145=CARTESIAN_POINT('',(80.0173613760561,-104.308177115257,13.)); #56146=CARTESIAN_POINT('',(79.7582813657612,-104.567256868179,12.)); #56147=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-104.308177115257,12.)); #56148=CARTESIAN_POINT('Ctrl Pts',(79.8743274407477,-104.308177115257,12.)); #56149=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-104.424223190243,12.)); #56150=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-104.567256868179,12.)); #56151=CARTESIAN_POINT('',(79.7582813657612,-104.567256868179,13.)); #56152=CARTESIAN_POINT('Origin',(81.0631270010561,-104.308177115257,13.)); #56153=CARTESIAN_POINT('',(81.0631270010561,-104.308177115257,13.)); #56154=CARTESIAN_POINT('',(74.1435685763944,-104.308177115257,13.)); #56155=CARTESIAN_POINT('',(81.0631270010561,-104.308177115257,12.)); #56156=CARTESIAN_POINT('',(81.0631270010561,-104.308177115257,13.)); #56157=CARTESIAN_POINT('',(80.0173613760561,-104.308177115257,12.)); #56158=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-104.567257125552,13.)); #56159=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-104.567257125552,12.)); #56160=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-104.424223447616,13.)); #56161=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-104.424223447616,12.)); #56162=CARTESIAN_POINT('Ctrl Pts',(81.2061609363646,-104.308177115257,13.)); #56163=CARTESIAN_POINT('Ctrl Pts',(81.2061609363646,-104.308177115257,12.)); #56164=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-104.308177115257,13.)); #56165=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-104.308177115257,12.)); #56166=CARTESIAN_POINT('',(81.3222067539782,-104.567257125552,13.)); #56167=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-104.567257125552,13.)); #56168=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-104.424223447616,13.)); #56169=CARTESIAN_POINT('Ctrl Pts',(81.2061609363646,-104.308177115257,13.)); #56170=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-104.308177115257,13.)); #56171=CARTESIAN_POINT('',(81.3222067539782,-104.567257125552,12.)); #56172=CARTESIAN_POINT('',(81.3222067539782,-104.567257125552,13.)); #56173=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-104.567257125552,12.)); #56174=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-104.424223447616,12.)); #56175=CARTESIAN_POINT('Ctrl Pts',(81.2061609363646,-104.308177115257,12.)); #56176=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-104.308177115257,12.)); #56177=CARTESIAN_POINT('Origin',(81.3222067539782,-105.449748241718,13.)); #56178=CARTESIAN_POINT('',(81.3222067539782,-105.449748241718,13.)); #56179=CARTESIAN_POINT('',(81.3222067539782,-91.8863359531046,13.)); #56180=CARTESIAN_POINT('',(81.3222067539782,-105.449748241718,12.)); #56181=CARTESIAN_POINT('',(81.3222067539782,-105.449748241718,13.)); #56182=CARTESIAN_POINT('',(81.3222067539782,-104.567257125552,12.)); #56183=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-105.70882799464,13.)); #56184=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-105.70882799464,12.)); #56185=CARTESIAN_POINT('Ctrl Pts',(81.2061604216189,-105.70882799464,13.)); #56186=CARTESIAN_POINT('Ctrl Pts',(81.2061604216189,-105.70882799464,12.)); #56187=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-105.592782177026,13.)); #56188=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-105.592782177026,12.)); #56189=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-105.449748241718,13.)); #56190=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-105.449748241718,12.)); #56191=CARTESIAN_POINT('',(81.0631270010561,-105.70882799464,13.)); #56192=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-105.70882799464,13.)); #56193=CARTESIAN_POINT('Ctrl Pts',(81.2061604216189,-105.70882799464,13.)); #56194=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-105.592782177026,13.)); #56195=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-105.449748241718,13.)); #56196=CARTESIAN_POINT('',(81.0631270010561,-105.70882799464,12.)); #56197=CARTESIAN_POINT('',(81.0631270010561,-105.70882799464,13.)); #56198=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-105.70882799464,12.)); #56199=CARTESIAN_POINT('Ctrl Pts',(81.2061604216189,-105.70882799464,12.)); #56200=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-105.592782177026,12.)); #56201=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-105.449748241718,12.)); #56202=CARTESIAN_POINT('Origin',(80.0173613760561,-105.70882799464,13.)); #56203=CARTESIAN_POINT('',(80.0173613760561,-105.70882799464,13.)); #56204=CARTESIAN_POINT('',(73.6206857638944,-105.70882799464,13.)); #56205=CARTESIAN_POINT('',(80.0173613760561,-105.70882799464,12.)); #56206=CARTESIAN_POINT('',(80.0173613760561,-105.70882799464,13.)); #56207=CARTESIAN_POINT('',(81.0631270010561,-105.70882799464,12.)); #56208=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-105.449748241718,13.)); #56209=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-105.449748241718,12.)); #56210=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-105.592781662281,13.)); #56211=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-105.592781662281,12.)); #56212=CARTESIAN_POINT('Ctrl Pts',(79.8743276981205,-105.70882799464,13.)); #56213=CARTESIAN_POINT('Ctrl Pts',(79.8743276981205,-105.70882799464,12.)); #56214=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-105.70882799464,13.)); #56215=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-105.70882799464,12.)); #56216=CARTESIAN_POINT('',(79.7582813657612,-105.449748241718,13.)); #56217=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-105.449748241718,13.)); #56218=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-105.592781662281,13.)); #56219=CARTESIAN_POINT('Ctrl Pts',(79.8743276981205,-105.70882799464,13.)); #56220=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-105.70882799464,13.)); #56221=CARTESIAN_POINT('',(79.7582813657612,-105.449748241718,12.)); #56222=CARTESIAN_POINT('',(79.7582813657612,-105.449748241718,13.)); #56223=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-105.449748241718,12.)); #56224=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-105.592781662281,12.)); #56225=CARTESIAN_POINT('Ctrl Pts',(79.8743276981205,-105.70882799464,12.)); #56226=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-105.70882799464,12.)); #56227=CARTESIAN_POINT('Origin',(79.7582813657612,-104.567256868179,13.)); #56228=CARTESIAN_POINT('',(79.7582813657612,-91.4450902663351,13.)); #56229=CARTESIAN_POINT('',(79.7582813657612,-105.449748241718,12.)); #56230=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-104.308177115257,13.)); #56231=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-104.308177115257,12.)); #56232=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-104.308177115257,13.)); #56233=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-104.308177115257,12.)); #56234=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-104.424223190243,13.)); #56235=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-104.424223190243,12.)); #56236=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-104.567256868179,13.)); #56237=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-104.567256868179,12.)); #56238=CARTESIAN_POINT('',(88.3065720422358,-104.308177115257,13.)); #56239=CARTESIAN_POINT('',(88.0474922893137,-104.567256868179,13.)); #56240=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-104.308177115257,13.)); #56241=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-104.308177115257,13.)); #56242=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-104.424223190243,13.)); #56243=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-104.567256868179,13.)); #56244=CARTESIAN_POINT('',(88.3065720422358,-104.308177115257,12.)); #56245=CARTESIAN_POINT('',(88.3065720422358,-104.308177115257,13.)); #56246=CARTESIAN_POINT('',(88.0474922893137,-104.567256868179,12.)); #56247=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-104.308177115257,12.)); #56248=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-104.308177115257,12.)); #56249=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-104.424223190243,12.)); #56250=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-104.567256868179,12.)); #56251=CARTESIAN_POINT('',(88.0474922893137,-104.567256868179,13.)); #56252=CARTESIAN_POINT('Origin',(89.3523376672358,-104.308177115257,13.)); #56253=CARTESIAN_POINT('',(89.3523376672358,-104.308177115257,13.)); #56254=CARTESIAN_POINT('',(78.2881739094842,-104.308177115257,13.)); #56255=CARTESIAN_POINT('',(89.3523376672358,-104.308177115257,12.)); #56256=CARTESIAN_POINT('',(89.3523376672358,-104.308177115257,13.)); #56257=CARTESIAN_POINT('',(88.3065720422358,-104.308177115257,12.)); #56258=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-104.567257125552,13.)); #56259=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-104.567257125552,12.)); #56260=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-104.424223447616,13.)); #56261=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-104.424223447616,12.)); #56262=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-104.308177115257,13.)); #56263=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-104.308177115257,12.)); #56264=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-104.308177115257,13.)); #56265=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-104.308177115257,12.)); #56266=CARTESIAN_POINT('',(89.6114174201578,-104.567257125552,13.)); #56267=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-104.567257125552,13.)); #56268=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-104.424223447616,13.)); #56269=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-104.308177115257,13.)); #56270=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-104.308177115257,13.)); #56271=CARTESIAN_POINT('',(89.6114174201578,-104.567257125552,12.)); #56272=CARTESIAN_POINT('',(89.6114174201578,-104.567257125552,13.)); #56273=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-104.567257125552,12.)); #56274=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-104.424223447616,12.)); #56275=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-104.308177115257,12.)); #56276=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-104.308177115257,12.)); #56277=CARTESIAN_POINT('Origin',(89.6114174201578,-105.449748241718,13.)); #56278=CARTESIAN_POINT('',(89.6114174201578,-105.449748241718,13.)); #56279=CARTESIAN_POINT('',(89.6114174201578,-91.8863359531046,13.)); #56280=CARTESIAN_POINT('',(89.6114174201578,-105.449748241718,12.)); #56281=CARTESIAN_POINT('',(89.6114174201578,-105.449748241718,13.)); #56282=CARTESIAN_POINT('',(89.6114174201578,-104.567257125552,12.)); #56283=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-105.70882799464,13.)); #56284=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-105.70882799464,12.)); #56285=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-105.70882799464,13.)); #56286=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-105.70882799464,12.)); #56287=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-105.592782177026,13.)); #56288=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-105.592782177026,12.)); #56289=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-105.449748241718,13.)); #56290=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-105.449748241718,12.)); #56291=CARTESIAN_POINT('',(89.3523376672358,-105.70882799464,13.)); #56292=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-105.70882799464,13.)); #56293=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-105.70882799464,13.)); #56294=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-105.592782177026,13.)); #56295=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-105.449748241718,13.)); #56296=CARTESIAN_POINT('',(89.3523376672358,-105.70882799464,12.)); #56297=CARTESIAN_POINT('',(89.3523376672358,-105.70882799464,13.)); #56298=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-105.70882799464,12.)); #56299=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-105.70882799464,12.)); #56300=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-105.592782177026,12.)); #56301=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-105.449748241718,12.)); #56302=CARTESIAN_POINT('Origin',(88.3065720422358,-105.70882799464,13.)); #56303=CARTESIAN_POINT('',(88.3065720422358,-105.70882799464,13.)); #56304=CARTESIAN_POINT('',(77.7652910969842,-105.70882799464,13.)); #56305=CARTESIAN_POINT('',(88.3065720422358,-105.70882799464,12.)); #56306=CARTESIAN_POINT('',(88.3065720422358,-105.70882799464,13.)); #56307=CARTESIAN_POINT('',(89.3523376672358,-105.70882799464,12.)); #56308=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-105.449748241718,13.)); #56309=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-105.449748241718,12.)); #56310=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-105.592781662281,13.)); #56311=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-105.592781662281,12.)); #56312=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-105.70882799464,13.)); #56313=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-105.70882799464,12.)); #56314=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-105.70882799464,13.)); #56315=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-105.70882799464,12.)); #56316=CARTESIAN_POINT('',(88.0474922893137,-105.449748241718,13.)); #56317=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-105.449748241718,13.)); #56318=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-105.592781662281,13.)); #56319=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-105.70882799464,13.)); #56320=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-105.70882799464,13.)); #56321=CARTESIAN_POINT('',(88.0474922893137,-105.449748241718,12.)); #56322=CARTESIAN_POINT('',(88.0474922893137,-105.449748241718,13.)); #56323=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-105.449748241718,12.)); #56324=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-105.592781662281,12.)); #56325=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-105.70882799464,12.)); #56326=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-105.70882799464,12.)); #56327=CARTESIAN_POINT('Origin',(88.0474922893137,-104.567256868179,13.)); #56328=CARTESIAN_POINT('',(88.0474922893137,-91.4450902663351,13.)); #56329=CARTESIAN_POINT('',(88.0474922893137,-105.449748241718,12.)); #56330=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-102.379920116718,13.)); #56331=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-102.379920116718,12.)); #56332=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-102.379920116718,13.)); #56333=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-102.379920116718,12.)); #56334=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-102.495966449077,13.)); #56335=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-102.495966449077,12.)); #56336=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-102.638999998326,13.)); #56337=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-102.638999998326,12.)); #56338=CARTESIAN_POINT('',(90.3778624613375,-102.379920116718,13.)); #56339=CARTESIAN_POINT('',(90.1187827084154,-102.638999998326,13.)); #56340=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-102.379920116718,13.)); #56341=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-102.379920116718,13.)); #56342=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-102.495966449077,13.)); #56343=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-102.638999998326,13.)); #56344=CARTESIAN_POINT('',(90.3778624613375,-102.379920116718,12.)); #56345=CARTESIAN_POINT('',(90.3778624613375,-102.379920116718,13.)); #56346=CARTESIAN_POINT('',(90.1187827084154,-102.638999998326,12.)); #56347=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-102.379920116718,12.)); #56348=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-102.379920116718,12.)); #56349=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-102.495966449077,12.)); #56350=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-102.638999998326,12.)); #56351=CARTESIAN_POINT('',(90.1187827084154,-102.638999998326,13.)); #56352=CARTESIAN_POINT('Origin',(91.4236280863375,-102.379920116718,13.)); #56353=CARTESIAN_POINT('',(91.4236280863375,-102.379920116718,13.)); #56354=CARTESIAN_POINT('',(79.323819119035,-102.379920116718,13.)); #56355=CARTESIAN_POINT('',(91.4236280863375,-102.379920116718,12.)); #56356=CARTESIAN_POINT('',(91.4236280863375,-102.379920116718,13.)); #56357=CARTESIAN_POINT('',(90.3778624613375,-102.379920116718,12.)); #56358=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-102.639000127013,13.)); #56359=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-102.639000127013,12.)); #56360=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-102.495966320391,13.)); #56361=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-102.495966320391,12.)); #56362=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-102.379920116718,13.)); #56363=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-102.379920116718,12.)); #56364=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-102.379920116718,13.)); #56365=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-102.379920116718,12.)); #56366=CARTESIAN_POINT('',(91.6827078392595,-102.639000127013,13.)); #56367=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-102.639000127013,13.)); #56368=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-102.495966320391,13.)); #56369=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-102.379920116718,13.)); #56370=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-102.379920116718,13.)); #56371=CARTESIAN_POINT('',(91.6827078392595,-102.639000127013,12.)); #56372=CARTESIAN_POINT('',(91.6827078392595,-102.639000127013,13.)); #56373=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-102.639000127013,12.)); #56374=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-102.495966320391,12.)); #56375=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-102.379920116718,12.)); #56376=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-102.379920116718,12.)); #56377=CARTESIAN_POINT('Origin',(91.6827078392595,-103.521491243179,13.)); #56378=CARTESIAN_POINT('',(91.6827078392595,-103.521491243179,13.)); #56379=CARTESIAN_POINT('',(91.6827078392595,-90.9222074538351,13.)); #56380=CARTESIAN_POINT('',(91.6827078392595,-103.521491243179,12.)); #56381=CARTESIAN_POINT('',(91.6827078392595,-103.521491243179,13.)); #56382=CARTESIAN_POINT('',(91.6827078392595,-102.639000127013,12.)); #56383=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-103.780571253474,13.)); #56384=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-103.780571253474,12.)); #56385=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-103.780571253474,13.)); #56386=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-103.780571253474,12.)); #56387=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-103.664524921115,13.)); #56388=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-103.664524921115,12.)); #56389=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-103.521491243179,13.)); #56390=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-103.521491243179,12.)); #56391=CARTESIAN_POINT('',(91.4236280863375,-103.780571253474,13.)); #56392=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-103.780571253474,13.)); #56393=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-103.780571253474,13.)); #56394=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-103.664524921115,13.)); #56395=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-103.521491243179,13.)); #56396=CARTESIAN_POINT('',(91.4236280863375,-103.780571253474,12.)); #56397=CARTESIAN_POINT('',(91.4236280863375,-103.780571253474,13.)); #56398=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-103.780571253474,12.)); #56399=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-103.780571253474,12.)); #56400=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-103.664524921115,12.)); #56401=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-103.521491243179,12.)); #56402=CARTESIAN_POINT('Origin',(90.3778624613375,-103.780571253474,13.)); #56403=CARTESIAN_POINT('',(90.3778624613375,-103.780571253474,13.)); #56404=CARTESIAN_POINT('',(78.8009363065348,-103.780571253474,13.)); #56405=CARTESIAN_POINT('',(90.3778624613375,-103.780571253474,12.)); #56406=CARTESIAN_POINT('',(90.3778624613375,-103.780571253474,13.)); #56407=CARTESIAN_POINT('',(91.4236280863375,-103.780571253474,12.)); #56408=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-103.521491243179,13.)); #56409=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-103.521491243179,12.)); #56410=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-103.664524921115,13.)); #56411=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-103.664524921115,12.)); #56412=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-103.780571253474,13.)); #56413=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-103.780571253474,12.)); #56414=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-103.780571253474,13.)); #56415=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-103.780571253474,12.)); #56416=CARTESIAN_POINT('',(90.1187827084154,-103.521491243179,13.)); #56417=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-103.521491243179,13.)); #56418=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-103.664524921115,13.)); #56419=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-103.780571253474,13.)); #56420=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-103.780571253474,13.)); #56421=CARTESIAN_POINT('',(90.1187827084154,-103.521491243179,12.)); #56422=CARTESIAN_POINT('',(90.1187827084154,-103.521491243179,13.)); #56423=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-103.521491243179,12.)); #56424=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-103.664524921115,12.)); #56425=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-103.780571253474,12.)); #56426=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-103.780571253474,12.)); #56427=CARTESIAN_POINT('Origin',(90.1187827084154,-102.638999998326,13.)); #56428=CARTESIAN_POINT('',(90.1187827084154,-90.4809618314089,13.)); #56429=CARTESIAN_POINT('',(90.1187827084154,-103.521491243179,12.)); #56430=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-102.379920116718,13.)); #56431=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-102.379920116718,12.)); #56432=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-102.379920116718,13.)); #56433=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-102.379920116718,12.)); #56434=CARTESIAN_POINT('Ctrl Pts',(81.8309211907477,-102.495966449077,13.)); #56435=CARTESIAN_POINT('Ctrl Pts',(81.8309211907477,-102.495966449077,12.)); #56436=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-102.638999998326,13.)); #56437=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-102.638999998326,12.)); #56438=CARTESIAN_POINT('',(82.0900014584154,-102.379920116718,13.)); #56439=CARTESIAN_POINT('',(81.8309217054934,-102.638999998326,13.)); #56440=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-102.379920116718,13.)); #56441=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-102.379920116718,13.)); #56442=CARTESIAN_POINT('Ctrl Pts',(81.8309211907477,-102.495966449077,13.)); #56443=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-102.638999998326,13.)); #56444=CARTESIAN_POINT('',(82.0900014584154,-102.379920116718,12.)); #56445=CARTESIAN_POINT('',(82.0900014584154,-102.379920116718,13.)); #56446=CARTESIAN_POINT('',(81.8309217054934,-102.638999998326,12.)); #56447=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-102.379920116718,12.)); #56448=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-102.379920116718,12.)); #56449=CARTESIAN_POINT('Ctrl Pts',(81.8309211907477,-102.495966449077,12.)); #56450=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-102.638999998326,12.)); #56451=CARTESIAN_POINT('',(81.8309217054934,-102.638999998326,13.)); #56452=CARTESIAN_POINT('Origin',(83.1357670834154,-102.379920116718,13.)); #56453=CARTESIAN_POINT('',(83.1357670834154,-102.379920116718,13.)); #56454=CARTESIAN_POINT('',(75.179888617574,-102.379920116718,13.)); #56455=CARTESIAN_POINT('',(83.1357670834154,-102.379920116718,12.)); #56456=CARTESIAN_POINT('',(83.1357670834154,-102.379920116718,13.)); #56457=CARTESIAN_POINT('',(82.0900014584154,-102.379920116718,12.)); #56458=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-102.639000127013,13.)); #56459=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-102.639000127013,12.)); #56460=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-102.495966320391,13.)); #56461=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-102.495966320391,12.)); #56462=CARTESIAN_POINT('Ctrl Pts',(83.2788010187239,-102.379920116718,13.)); #56463=CARTESIAN_POINT('Ctrl Pts',(83.2788010187239,-102.379920116718,12.)); #56464=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-102.379920116718,13.)); #56465=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-102.379920116718,12.)); #56466=CARTESIAN_POINT('',(83.3948468363375,-102.639000127013,13.)); #56467=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-102.639000127013,13.)); #56468=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-102.495966320391,13.)); #56469=CARTESIAN_POINT('Ctrl Pts',(83.2788010187239,-102.379920116718,13.)); #56470=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-102.379920116718,13.)); #56471=CARTESIAN_POINT('',(83.3948468363375,-102.639000127013,12.)); #56472=CARTESIAN_POINT('',(83.3948468363375,-102.639000127013,13.)); #56473=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-102.639000127013,12.)); #56474=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-102.495966320391,12.)); #56475=CARTESIAN_POINT('Ctrl Pts',(83.2788010187239,-102.379920116718,12.)); #56476=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-102.379920116718,12.)); #56477=CARTESIAN_POINT('Origin',(83.3948468363375,-103.521491243179,13.)); #56478=CARTESIAN_POINT('',(83.3948468363375,-103.521491243179,13.)); #56479=CARTESIAN_POINT('',(83.3948468363375,-90.9222074538351,13.)); #56480=CARTESIAN_POINT('',(83.3948468363375,-103.521491243179,12.)); #56481=CARTESIAN_POINT('',(83.3948468363375,-103.521491243179,13.)); #56482=CARTESIAN_POINT('',(83.3948468363375,-102.639000127013,12.)); #56483=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-103.780571253474,13.)); #56484=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-103.780571253474,12.)); #56485=CARTESIAN_POINT('Ctrl Pts',(83.2788005039782,-103.780571253474,13.)); #56486=CARTESIAN_POINT('Ctrl Pts',(83.2788005039782,-103.780571253474,12.)); #56487=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-103.664524921115,13.)); #56488=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-103.664524921115,12.)); #56489=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-103.521491243179,13.)); #56490=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-103.521491243179,12.)); #56491=CARTESIAN_POINT('',(83.1357670834154,-103.780571253474,13.)); #56492=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-103.780571253474,13.)); #56493=CARTESIAN_POINT('Ctrl Pts',(83.2788005039782,-103.780571253474,13.)); #56494=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-103.664524921115,13.)); #56495=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-103.521491243179,13.)); #56496=CARTESIAN_POINT('',(83.1357670834154,-103.780571253474,12.)); #56497=CARTESIAN_POINT('',(83.1357670834154,-103.780571253474,13.)); #56498=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-103.780571253474,12.)); #56499=CARTESIAN_POINT('Ctrl Pts',(83.2788005039782,-103.780571253474,12.)); #56500=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-103.664524921115,12.)); #56501=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-103.521491243179,12.)); #56502=CARTESIAN_POINT('Origin',(82.0900014584154,-103.780571253474,13.)); #56503=CARTESIAN_POINT('',(82.0900014584154,-103.780571253474,13.)); #56504=CARTESIAN_POINT('',(74.6570058050738,-103.780571253474,13.)); #56505=CARTESIAN_POINT('',(82.0900014584154,-103.780571253474,12.)); #56506=CARTESIAN_POINT('',(82.0900014584154,-103.780571253474,13.)); #56507=CARTESIAN_POINT('',(83.1357670834154,-103.780571253474,12.)); #56508=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-103.521491243179,13.)); #56509=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-103.521491243179,12.)); #56510=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-103.664524921115,13.)); #56511=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-103.664524921115,12.)); #56512=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-103.780571253474,13.)); #56513=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-103.780571253474,12.)); #56514=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-103.780571253474,13.)); #56515=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-103.780571253474,12.)); #56516=CARTESIAN_POINT('',(81.8309217054934,-103.521491243179,13.)); #56517=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-103.521491243179,13.)); #56518=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-103.664524921115,13.)); #56519=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-103.780571253474,13.)); #56520=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-103.780571253474,13.)); #56521=CARTESIAN_POINT('',(81.8309217054934,-103.521491243179,12.)); #56522=CARTESIAN_POINT('',(81.8309217054934,-103.521491243179,13.)); #56523=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-103.521491243179,12.)); #56524=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-103.664524921115,12.)); #56525=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-103.780571253474,12.)); #56526=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-103.780571253474,12.)); #56527=CARTESIAN_POINT('Origin',(81.8309217054934,-102.638999998326,13.)); #56528=CARTESIAN_POINT('',(81.8309217054934,-90.4809618314089,13.)); #56529=CARTESIAN_POINT('',(81.8309217054934,-103.521491243179,12.)); #56530=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-102.379920116718,13.)); #56531=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-102.379920116718,12.)); #56532=CARTESIAN_POINT('Ctrl Pts',(79.8743274407477,-102.379920116718,13.)); #56533=CARTESIAN_POINT('Ctrl Pts',(79.8743274407477,-102.379920116718,12.)); #56534=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-102.495966449077,13.)); #56535=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-102.495966449077,12.)); #56536=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-102.638999998326,13.)); #56537=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-102.638999998326,12.)); #56538=CARTESIAN_POINT('',(80.0173613760561,-102.379920116718,13.)); #56539=CARTESIAN_POINT('',(79.7582813657612,-102.638999998326,13.)); #56540=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-102.379920116718,13.)); #56541=CARTESIAN_POINT('Ctrl Pts',(79.8743274407477,-102.379920116718,13.)); #56542=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-102.495966449077,13.)); #56543=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-102.638999998326,13.)); #56544=CARTESIAN_POINT('',(80.0173613760561,-102.379920116718,12.)); #56545=CARTESIAN_POINT('',(80.0173613760561,-102.379920116718,13.)); #56546=CARTESIAN_POINT('',(79.7582813657612,-102.638999998326,12.)); #56547=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-102.379920116718,12.)); #56548=CARTESIAN_POINT('Ctrl Pts',(79.8743274407477,-102.379920116718,12.)); #56549=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-102.495966449077,12.)); #56550=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-102.638999998326,12.)); #56551=CARTESIAN_POINT('',(79.7582813657612,-102.638999998326,13.)); #56552=CARTESIAN_POINT('Origin',(81.0631270010561,-102.379920116718,13.)); #56553=CARTESIAN_POINT('',(81.0631270010561,-102.379920116718,13.)); #56554=CARTESIAN_POINT('',(74.1435685763944,-102.379920116718,13.)); #56555=CARTESIAN_POINT('',(81.0631270010561,-102.379920116718,12.)); #56556=CARTESIAN_POINT('',(81.0631270010561,-102.379920116718,13.)); #56557=CARTESIAN_POINT('',(80.0173613760561,-102.379920116718,12.)); #56558=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-102.639000127013,13.)); #56559=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-102.639000127013,12.)); #56560=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-102.495966320391,13.)); #56561=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-102.495966320391,12.)); #56562=CARTESIAN_POINT('Ctrl Pts',(81.2061609363646,-102.379920116718,13.)); #56563=CARTESIAN_POINT('Ctrl Pts',(81.2061609363646,-102.379920116718,12.)); #56564=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-102.379920116718,13.)); #56565=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-102.379920116718,12.)); #56566=CARTESIAN_POINT('',(81.3222067539782,-102.639000127013,13.)); #56567=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-102.639000127013,13.)); #56568=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-102.495966320391,13.)); #56569=CARTESIAN_POINT('Ctrl Pts',(81.2061609363646,-102.379920116718,13.)); #56570=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-102.379920116718,13.)); #56571=CARTESIAN_POINT('',(81.3222067539782,-102.639000127013,12.)); #56572=CARTESIAN_POINT('',(81.3222067539782,-102.639000127013,13.)); #56573=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-102.639000127013,12.)); #56574=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-102.495966320391,12.)); #56575=CARTESIAN_POINT('Ctrl Pts',(81.2061609363646,-102.379920116718,12.)); #56576=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-102.379920116718,12.)); #56577=CARTESIAN_POINT('Origin',(81.3222067539782,-103.521491243179,13.)); #56578=CARTESIAN_POINT('',(81.3222067539782,-103.521491243179,13.)); #56579=CARTESIAN_POINT('',(81.3222067539782,-90.9222074538351,13.)); #56580=CARTESIAN_POINT('',(81.3222067539782,-103.521491243179,12.)); #56581=CARTESIAN_POINT('',(81.3222067539782,-103.521491243179,13.)); #56582=CARTESIAN_POINT('',(81.3222067539782,-102.639000127013,12.)); #56583=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-103.780571253474,13.)); #56584=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-103.780571253474,12.)); #56585=CARTESIAN_POINT('Ctrl Pts',(81.2061604216189,-103.780571253474,13.)); #56586=CARTESIAN_POINT('Ctrl Pts',(81.2061604216189,-103.780571253474,12.)); #56587=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-103.664524921115,13.)); #56588=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-103.664524921115,12.)); #56589=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-103.521491243179,13.)); #56590=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-103.521491243179,12.)); #56591=CARTESIAN_POINT('',(81.0631270010561,-103.780571253474,13.)); #56592=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-103.780571253474,13.)); #56593=CARTESIAN_POINT('Ctrl Pts',(81.2061604216189,-103.780571253474,13.)); #56594=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-103.664524921115,13.)); #56595=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-103.521491243179,13.)); #56596=CARTESIAN_POINT('',(81.0631270010561,-103.780571253474,12.)); #56597=CARTESIAN_POINT('',(81.0631270010561,-103.780571253474,13.)); #56598=CARTESIAN_POINT('Ctrl Pts',(81.0631270010561,-103.780571253474,12.)); #56599=CARTESIAN_POINT('Ctrl Pts',(81.2061604216189,-103.780571253474,12.)); #56600=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-103.664524921115,12.)); #56601=CARTESIAN_POINT('Ctrl Pts',(81.3222067539782,-103.521491243179,12.)); #56602=CARTESIAN_POINT('Origin',(80.0173613760561,-103.780571253474,13.)); #56603=CARTESIAN_POINT('',(80.0173613760561,-103.780571253474,13.)); #56604=CARTESIAN_POINT('',(73.6206857638941,-103.780571253474,13.)); #56605=CARTESIAN_POINT('',(80.0173613760561,-103.780571253474,12.)); #56606=CARTESIAN_POINT('',(80.0173613760561,-103.780571253474,13.)); #56607=CARTESIAN_POINT('',(81.0631270010561,-103.780571253474,12.)); #56608=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-103.521491243179,13.)); #56609=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-103.521491243179,12.)); #56610=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-103.664524921115,13.)); #56611=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-103.664524921115,12.)); #56612=CARTESIAN_POINT('Ctrl Pts',(79.8743276981205,-103.780571253474,13.)); #56613=CARTESIAN_POINT('Ctrl Pts',(79.8743276981205,-103.780571253474,12.)); #56614=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-103.780571253474,13.)); #56615=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-103.780571253474,12.)); #56616=CARTESIAN_POINT('',(79.7582813657612,-103.521491243179,13.)); #56617=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-103.521491243179,13.)); #56618=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-103.664524921115,13.)); #56619=CARTESIAN_POINT('Ctrl Pts',(79.8743276981205,-103.780571253474,13.)); #56620=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-103.780571253474,13.)); #56621=CARTESIAN_POINT('',(79.7582813657612,-103.521491243179,12.)); #56622=CARTESIAN_POINT('',(79.7582813657612,-103.521491243179,13.)); #56623=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-103.521491243179,12.)); #56624=CARTESIAN_POINT('Ctrl Pts',(79.7582813657612,-103.664524921115,12.)); #56625=CARTESIAN_POINT('Ctrl Pts',(79.8743276981205,-103.780571253474,12.)); #56626=CARTESIAN_POINT('Ctrl Pts',(80.0173613760561,-103.780571253474,12.)); #56627=CARTESIAN_POINT('Origin',(79.7582813657612,-102.638999998326,13.)); #56628=CARTESIAN_POINT('',(79.7582813657612,-90.4809618314089,13.)); #56629=CARTESIAN_POINT('',(79.7582813657612,-103.521491243179,12.)); #56630=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-102.379920116718,13.)); #56631=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-102.379920116718,12.)); #56632=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-102.379920116718,13.)); #56633=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-102.379920116718,12.)); #56634=CARTESIAN_POINT('Ctrl Pts',(83.903561273107,-102.495966449077,13.)); #56635=CARTESIAN_POINT('Ctrl Pts',(83.903561273107,-102.495966449077,12.)); #56636=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-102.638999998326,13.)); #56637=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-102.638999998326,12.)); #56638=CARTESIAN_POINT('',(84.1612918775171,-102.379920116718,13.)); #56639=CARTESIAN_POINT('',(83.9022121245951,-102.638999998326,13.)); #56640=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-102.379920116718,13.)); #56641=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-102.379920116718,13.)); #56642=CARTESIAN_POINT('Ctrl Pts',(83.903561273107,-102.495966449077,13.)); #56643=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-102.638999998326,13.)); #56644=CARTESIAN_POINT('',(84.1612918775171,-102.379920116718,12.)); #56645=CARTESIAN_POINT('',(84.1612918775171,-102.379920116718,13.)); #56646=CARTESIAN_POINT('',(83.9022121245951,-102.638999998326,12.)); #56647=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-102.379920116718,12.)); #56648=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-102.379920116718,12.)); #56649=CARTESIAN_POINT('Ctrl Pts',(83.903561273107,-102.495966449077,12.)); #56650=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-102.638999998326,12.)); #56651=CARTESIAN_POINT('',(83.9022121245951,-102.638999998326,13.)); #56652=CARTESIAN_POINT('Origin',(85.2070575025171,-102.379920116718,13.)); #56653=CARTESIAN_POINT('',(85.2070575025171,-102.379920116718,13.)); #56654=CARTESIAN_POINT('',(76.2155338271249,-102.379920116718,13.)); #56655=CARTESIAN_POINT('',(85.2070575025171,-102.379920116718,12.)); #56656=CARTESIAN_POINT('',(85.2070575025171,-102.379920116718,13.)); #56657=CARTESIAN_POINT('',(84.1612918775171,-102.379920116718,12.)); #56658=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-102.639000127013,13.)); #56659=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-102.639000127013,12.)); #56660=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-102.495966320391,13.)); #56661=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-102.495966320391,12.)); #56662=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-102.379920116718,13.)); #56663=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-102.379920116718,12.)); #56664=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-102.379920116718,13.)); #56665=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-102.379920116718,12.)); #56666=CARTESIAN_POINT('',(85.4661372554392,-102.639000127013,13.)); #56667=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-102.639000127013,13.)); #56668=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-102.495966320391,13.)); #56669=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-102.379920116718,13.)); #56670=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-102.379920116718,13.)); #56671=CARTESIAN_POINT('',(85.4661372554392,-102.639000127013,12.)); #56672=CARTESIAN_POINT('',(85.4661372554392,-102.639000127013,13.)); #56673=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-102.639000127013,12.)); #56674=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-102.495966320391,12.)); #56675=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-102.379920116718,12.)); #56676=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-102.379920116718,12.)); #56677=CARTESIAN_POINT('Origin',(85.4661372554392,-103.521491243179,13.)); #56678=CARTESIAN_POINT('',(85.4661372554392,-103.521491243179,13.)); #56679=CARTESIAN_POINT('',(85.4661372554392,-90.9222074538351,13.)); #56680=CARTESIAN_POINT('',(85.4661372554392,-103.521491243179,12.)); #56681=CARTESIAN_POINT('',(85.4661372554392,-103.521491243179,13.)); #56682=CARTESIAN_POINT('',(85.4661372554392,-102.639000127013,12.)); #56683=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-103.780571253474,13.)); #56684=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-103.780571253474,12.)); #56685=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-103.780571253474,13.)); #56686=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-103.780571253474,12.)); #56687=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-103.664524921115,13.)); #56688=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-103.664524921115,12.)); #56689=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-103.521491243179,13.)); #56690=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-103.521491243179,12.)); #56691=CARTESIAN_POINT('',(85.2070575025171,-103.780571253474,13.)); #56692=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-103.780571253474,13.)); #56693=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-103.780571253474,13.)); #56694=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-103.664524921115,13.)); #56695=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-103.521491243179,13.)); #56696=CARTESIAN_POINT('',(85.2070575025171,-103.780571253474,12.)); #56697=CARTESIAN_POINT('',(85.2070575025171,-103.780571253474,13.)); #56698=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-103.780571253474,12.)); #56699=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-103.780571253474,12.)); #56700=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-103.664524921115,12.)); #56701=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-103.521491243179,12.)); #56702=CARTESIAN_POINT('Origin',(84.1612918775171,-103.780571253474,13.)); #56703=CARTESIAN_POINT('',(84.1612918775171,-103.780571253474,13.)); #56704=CARTESIAN_POINT('',(75.6926510146247,-103.780571253474,13.)); #56705=CARTESIAN_POINT('',(84.1612918775171,-103.780571253474,12.)); #56706=CARTESIAN_POINT('',(84.1612918775171,-103.780571253474,13.)); #56707=CARTESIAN_POINT('',(85.2070575025171,-103.780571253474,12.)); #56708=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-103.521491243179,13.)); #56709=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-103.521491243179,12.)); #56710=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-103.664524921115,13.)); #56711=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-103.664524921115,12.)); #56712=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-103.780571253474,13.)); #56713=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-103.780571253474,12.)); #56714=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-103.780571253474,13.)); #56715=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-103.780571253474,12.)); #56716=CARTESIAN_POINT('',(83.9022121245951,-103.521491243179,13.)); #56717=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-103.521491243179,13.)); #56718=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-103.664524921115,13.)); #56719=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-103.780571253474,13.)); #56720=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-103.780571253474,13.)); #56721=CARTESIAN_POINT('',(83.9022121245951,-103.521491243179,12.)); #56722=CARTESIAN_POINT('',(83.9022121245951,-103.521491243179,13.)); #56723=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-103.521491243179,12.)); #56724=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-103.664524921115,12.)); #56725=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-103.780571253474,12.)); #56726=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-103.780571253474,12.)); #56727=CARTESIAN_POINT('Origin',(83.9022121245951,-102.638999998326,13.)); #56728=CARTESIAN_POINT('',(83.9022121245951,-90.4809618314089,13.)); #56729=CARTESIAN_POINT('',(83.9022121245951,-103.521491243179,12.)); #56730=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-102.379920116718,13.)); #56731=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-102.379920116718,12.)); #56732=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-102.379920116718,13.)); #56733=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-102.379920116718,12.)); #56734=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-102.495966449077,13.)); #56735=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-102.495966449077,12.)); #56736=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-102.638999998326,13.)); #56737=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-102.638999998326,12.)); #56738=CARTESIAN_POINT('',(88.3065720422358,-102.379920116718,13.)); #56739=CARTESIAN_POINT('',(88.0474922893137,-102.638999998326,13.)); #56740=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-102.379920116718,13.)); #56741=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-102.379920116718,13.)); #56742=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-102.495966449077,13.)); #56743=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-102.638999998326,13.)); #56744=CARTESIAN_POINT('',(88.3065720422358,-102.379920116718,12.)); #56745=CARTESIAN_POINT('',(88.3065720422358,-102.379920116718,13.)); #56746=CARTESIAN_POINT('',(88.0474922893137,-102.638999998326,12.)); #56747=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-102.379920116718,12.)); #56748=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-102.379920116718,12.)); #56749=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-102.495966449077,12.)); #56750=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-102.638999998326,12.)); #56751=CARTESIAN_POINT('',(88.0474922893137,-102.638999998326,13.)); #56752=CARTESIAN_POINT('Origin',(89.3523376672358,-102.379920116718,13.)); #56753=CARTESIAN_POINT('',(89.3523376672358,-102.379920116718,13.)); #56754=CARTESIAN_POINT('',(78.2881739094842,-102.379920116718,13.)); #56755=CARTESIAN_POINT('',(89.3523376672358,-102.379920116718,12.)); #56756=CARTESIAN_POINT('',(89.3523376672358,-102.379920116718,13.)); #56757=CARTESIAN_POINT('',(88.3065720422358,-102.379920116718,12.)); #56758=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-102.639000127013,13.)); #56759=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-102.639000127013,12.)); #56760=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-102.495966320391,13.)); #56761=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-102.495966320391,12.)); #56762=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-102.379920116718,13.)); #56763=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-102.379920116718,12.)); #56764=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-102.379920116718,13.)); #56765=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-102.379920116718,12.)); #56766=CARTESIAN_POINT('',(89.6114174201578,-102.639000127013,13.)); #56767=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-102.639000127013,13.)); #56768=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-102.495966320391,13.)); #56769=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-102.379920116718,13.)); #56770=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-102.379920116718,13.)); #56771=CARTESIAN_POINT('',(89.6114174201578,-102.639000127013,12.)); #56772=CARTESIAN_POINT('',(89.6114174201578,-102.639000127013,13.)); #56773=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-102.639000127013,12.)); #56774=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-102.495966320391,12.)); #56775=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-102.379920116718,12.)); #56776=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-102.379920116718,12.)); #56777=CARTESIAN_POINT('Origin',(89.6114174201578,-103.521491243179,13.)); #56778=CARTESIAN_POINT('',(89.6114174201578,-103.521491243179,13.)); #56779=CARTESIAN_POINT('',(89.6114174201578,-90.9222074538351,13.)); #56780=CARTESIAN_POINT('',(89.6114174201578,-103.521491243179,12.)); #56781=CARTESIAN_POINT('',(89.6114174201578,-103.521491243179,13.)); #56782=CARTESIAN_POINT('',(89.6114174201578,-102.639000127013,12.)); #56783=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-103.780571253474,13.)); #56784=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-103.780571253474,12.)); #56785=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-103.780571253474,13.)); #56786=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-103.780571253474,12.)); #56787=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-103.664524921115,13.)); #56788=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-103.664524921115,12.)); #56789=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-103.521491243179,13.)); #56790=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-103.521491243179,12.)); #56791=CARTESIAN_POINT('',(89.3523376672358,-103.780571253474,13.)); #56792=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-103.780571253474,13.)); #56793=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-103.780571253474,13.)); #56794=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-103.664524921115,13.)); #56795=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-103.521491243179,13.)); #56796=CARTESIAN_POINT('',(89.3523376672358,-103.780571253474,12.)); #56797=CARTESIAN_POINT('',(89.3523376672358,-103.780571253474,13.)); #56798=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-103.780571253474,12.)); #56799=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-103.780571253474,12.)); #56800=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-103.664524921115,12.)); #56801=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-103.521491243179,12.)); #56802=CARTESIAN_POINT('Origin',(88.3065720422358,-103.780571253474,13.)); #56803=CARTESIAN_POINT('',(88.3065720422358,-103.780571253474,13.)); #56804=CARTESIAN_POINT('',(77.765291096984,-103.780571253474,13.)); #56805=CARTESIAN_POINT('',(88.3065720422358,-103.780571253474,12.)); #56806=CARTESIAN_POINT('',(88.3065720422358,-103.780571253474,13.)); #56807=CARTESIAN_POINT('',(89.3523376672358,-103.780571253474,12.)); #56808=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-103.521491243179,13.)); #56809=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-103.521491243179,12.)); #56810=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-103.664524921115,13.)); #56811=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-103.664524921115,12.)); #56812=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-103.780571253474,13.)); #56813=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-103.780571253474,12.)); #56814=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-103.780571253474,13.)); #56815=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-103.780571253474,12.)); #56816=CARTESIAN_POINT('',(88.0474922893137,-103.521491243179,13.)); #56817=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-103.521491243179,13.)); #56818=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-103.664524921115,13.)); #56819=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-103.780571253474,13.)); #56820=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-103.780571253474,13.)); #56821=CARTESIAN_POINT('',(88.0474922893137,-103.521491243179,12.)); #56822=CARTESIAN_POINT('',(88.0474922893137,-103.521491243179,13.)); #56823=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-103.521491243179,12.)); #56824=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-103.664524921115,12.)); #56825=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-103.780571253474,12.)); #56826=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-103.780571253474,12.)); #56827=CARTESIAN_POINT('Origin',(88.0474922893137,-102.638999998326,13.)); #56828=CARTESIAN_POINT('',(88.0474922893137,-90.4809618314089,13.)); #56829=CARTESIAN_POINT('',(88.0474922893137,-103.521491243179,12.)); #56830=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-102.379920116718,13.)); #56831=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-102.379920116718,12.)); #56832=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-102.379920116718,13.)); #56833=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-102.379920116718,12.)); #56834=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-102.495966449077,13.)); #56835=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-102.495966449077,12.)); #56836=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-102.638999998326,13.)); #56837=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-102.638999998326,12.)); #56838=CARTESIAN_POINT('',(77.9460706995816,-102.379920116718,13.)); #56839=CARTESIAN_POINT('',(77.6869906892866,-102.638999998326,13.)); #56840=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-102.379920116718,13.)); #56841=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-102.379920116718,13.)); #56842=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-102.495966449077,13.)); #56843=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-102.638999998326,13.)); #56844=CARTESIAN_POINT('',(77.9460706995816,-102.379920116718,12.)); #56845=CARTESIAN_POINT('',(77.9460706995816,-102.379920116718,13.)); #56846=CARTESIAN_POINT('',(77.6869906892866,-102.638999998326,12.)); #56847=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-102.379920116718,12.)); #56848=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-102.379920116718,12.)); #56849=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-102.495966449077,12.)); #56850=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-102.638999998326,12.)); #56851=CARTESIAN_POINT('',(77.6869906892866,-102.638999998326,13.)); #56852=CARTESIAN_POINT('Origin',(78.9918363245816,-102.379920116718,13.)); #56853=CARTESIAN_POINT('',(78.9918363245816,-102.379920116718,13.)); #56854=CARTESIAN_POINT('',(73.1079232381571,-102.379920116718,13.)); #56855=CARTESIAN_POINT('',(78.9918363245816,-102.379920116718,12.)); #56856=CARTESIAN_POINT('',(78.9918363245816,-102.379920116718,13.)); #56857=CARTESIAN_POINT('',(77.9460706995816,-102.379920116718,12.)); #56858=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-102.639000127013,13.)); #56859=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-102.639000127013,12.)); #56860=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-102.495966320391,13.)); #56861=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-102.495966320391,12.)); #56862=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-102.379920116718,13.)); #56863=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-102.379920116718,12.)); #56864=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-102.379920116718,13.)); #56865=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-102.379920116718,12.)); #56866=CARTESIAN_POINT('',(79.2509163348765,-102.639000127013,13.)); #56867=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-102.639000127013,13.)); #56868=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-102.495966320391,13.)); #56869=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-102.379920116718,13.)); #56870=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-102.379920116718,13.)); #56871=CARTESIAN_POINT('',(79.2509163348765,-102.639000127013,12.)); #56872=CARTESIAN_POINT('',(79.2509163348765,-102.639000127013,13.)); #56873=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-102.639000127013,12.)); #56874=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-102.495966320391,12.)); #56875=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-102.379920116718,12.)); #56876=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-102.379920116718,12.)); #56877=CARTESIAN_POINT('Origin',(79.2509163348765,-103.521491243179,13.)); #56878=CARTESIAN_POINT('',(79.2509163348765,-103.521491243179,13.)); #56879=CARTESIAN_POINT('',(79.2509163348765,-90.9222074538351,13.)); #56880=CARTESIAN_POINT('',(79.2509163348765,-103.521491243179,12.)); #56881=CARTESIAN_POINT('',(79.2509163348765,-103.521491243179,13.)); #56882=CARTESIAN_POINT('',(79.2509163348765,-102.639000127013,12.)); #56883=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-103.780571253474,13.)); #56884=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-103.780571253474,12.)); #56885=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-103.780571253474,13.)); #56886=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-103.780571253474,12.)); #56887=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-103.664524921115,13.)); #56888=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-103.664524921115,12.)); #56889=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-103.521491243179,13.)); #56890=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-103.521491243179,12.)); #56891=CARTESIAN_POINT('',(78.9918363245816,-103.780571253474,13.)); #56892=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-103.780571253474,13.)); #56893=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-103.780571253474,13.)); #56894=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-103.664524921115,13.)); #56895=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-103.521491243179,13.)); #56896=CARTESIAN_POINT('',(78.9918363245816,-103.780571253474,12.)); #56897=CARTESIAN_POINT('',(78.9918363245816,-103.780571253474,13.)); #56898=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-103.780571253474,12.)); #56899=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-103.780571253474,12.)); #56900=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-103.664524921115,12.)); #56901=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-103.521491243179,12.)); #56902=CARTESIAN_POINT('Origin',(77.9460706995816,-103.780571253474,13.)); #56903=CARTESIAN_POINT('',(77.9460706995816,-103.780571253474,13.)); #56904=CARTESIAN_POINT('',(72.5850404256569,-103.780571253474,13.)); #56905=CARTESIAN_POINT('',(77.9460706995816,-103.780571253474,12.)); #56906=CARTESIAN_POINT('',(77.9460706995816,-103.780571253474,13.)); #56907=CARTESIAN_POINT('',(78.9918363245816,-103.780571253474,12.)); #56908=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-103.521491243179,13.)); #56909=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-103.521491243179,12.)); #56910=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-103.664524921115,13.)); #56911=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-103.664524921115,12.)); #56912=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-103.780571253474,13.)); #56913=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-103.780571253474,12.)); #56914=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-103.780571253474,13.)); #56915=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-103.780571253474,12.)); #56916=CARTESIAN_POINT('',(77.6869906892866,-103.521491243179,13.)); #56917=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-103.521491243179,13.)); #56918=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-103.664524921115,13.)); #56919=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-103.780571253474,13.)); #56920=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-103.780571253474,13.)); #56921=CARTESIAN_POINT('',(77.6869906892866,-103.521491243179,12.)); #56922=CARTESIAN_POINT('',(77.6869906892866,-103.521491243179,13.)); #56923=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-103.521491243179,12.)); #56924=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-103.664524921115,12.)); #56925=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-103.780571253474,12.)); #56926=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-103.780571253474,12.)); #56927=CARTESIAN_POINT('Origin',(77.6869906892866,-102.638999998326,13.)); #56928=CARTESIAN_POINT('',(77.6869906892866,-90.4809618314089,13.)); #56929=CARTESIAN_POINT('',(77.6869906892866,-103.521491243179,12.)); #56930=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-104.285237729962,13.)); #56931=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-104.285237729962,12.)); #56932=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-104.285237729962,13.)); #56933=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-104.285237729962,12.)); #56934=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-104.402633210833,13.)); #56935=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-104.402633210833,12.)); #56936=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-104.547016552026,13.)); #56937=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-104.547016552026,12.)); #56938=CARTESIAN_POINT('',(90.3778624613375,-104.285237729962,13.)); #56939=CARTESIAN_POINT('',(90.1187827084154,-104.547016552026,13.)); #56940=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-104.285237729962,13.)); #56941=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-104.285237729962,13.)); #56942=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-104.402633210833,13.)); #56943=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-104.547016552026,13.)); #56944=CARTESIAN_POINT('',(90.3778624613375,-104.285237729962,12.)); #56945=CARTESIAN_POINT('',(90.3778624613375,-104.285237729962,13.)); #56946=CARTESIAN_POINT('',(90.1187827084154,-104.547016552026,12.)); #56947=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-104.285237729962,12.)); #56948=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-104.285237729962,12.)); #56949=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-104.402633210833,12.)); #56950=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-104.547016552026,12.)); #56951=CARTESIAN_POINT('',(90.1187827084154,-104.547016552026,13.)); #56952=CARTESIAN_POINT('Origin',(91.4236280863375,-104.285237729962,13.)); #56953=CARTESIAN_POINT('',(91.4236280863375,-104.285237729962,13.)); #56954=CARTESIAN_POINT('',(79.323819119035,-104.285237729962,13.)); #56955=CARTESIAN_POINT('',(91.4236280863375,-104.285237729962,12.)); #56956=CARTESIAN_POINT('',(91.4236280863375,-104.285237729962,13.)); #56957=CARTESIAN_POINT('',(90.3778624613375,-104.285237729962,12.)); #56958=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-104.547016552026,13.)); #56959=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-104.547016552026,12.)); #56960=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-104.402633468206,13.)); #56961=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-104.402633468206,12.)); #56962=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-104.285237729962,13.)); #56963=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-104.285237729962,12.)); #56964=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-104.285237729962,13.)); #56965=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-104.285237729962,12.)); #56966=CARTESIAN_POINT('',(91.6827078392595,-104.547016552026,13.)); #56967=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-104.547016552026,13.)); #56968=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-104.402633468206,13.)); #56969=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-104.285237729962,13.)); #56970=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-104.285237729962,13.)); #56971=CARTESIAN_POINT('',(91.6827078392595,-104.547016552026,12.)); #56972=CARTESIAN_POINT('',(91.6827078392595,-104.547016552026,13.)); #56973=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-104.547016552026,12.)); #56974=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-104.402633468206,12.)); #56975=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-104.285237729962,12.)); #56976=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-104.285237729962,12.)); #56977=CARTESIAN_POINT('Origin',(91.6827078392595,-107.337524093206,13.)); #56978=CARTESIAN_POINT('',(91.6827078392595,-107.337524093206,13.)); #56979=CARTESIAN_POINT('',(91.6827078392595,-92.8302238788487,13.)); #56980=CARTESIAN_POINT('',(91.6827078392595,-107.337524093206,12.)); #56981=CARTESIAN_POINT('',(91.6827078392595,-107.337524093206,13.)); #56982=CARTESIAN_POINT('',(91.6827078392595,-104.547016552026,12.)); #56983=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-107.599302657898,13.)); #56984=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-107.599302657898,12.)); #56985=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-107.599302657898,13.)); #56986=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-107.599302657898,12.)); #56987=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-107.481907177026,13.)); #56988=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-107.481907177026,12.)); #56989=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-107.337524093206,13.)); #56990=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-107.337524093206,12.)); #56991=CARTESIAN_POINT('',(91.4236280863375,-107.599302657898,13.)); #56992=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-107.599302657898,13.)); #56993=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-107.599302657898,13.)); #56994=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-107.481907177026,13.)); #56995=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-107.337524093206,13.)); #56996=CARTESIAN_POINT('',(91.4236280863375,-107.599302657898,12.)); #56997=CARTESIAN_POINT('',(91.4236280863375,-107.599302657898,13.)); #56998=CARTESIAN_POINT('Ctrl Pts',(91.4236280863375,-107.599302657898,12.)); #56999=CARTESIAN_POINT('Ctrl Pts',(91.5666615069002,-107.599302657898,12.)); #57000=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-107.481907177026,12.)); #57001=CARTESIAN_POINT('Ctrl Pts',(91.6827078392595,-107.337524093206,12.)); #57002=CARTESIAN_POINT('Origin',(90.3778624613375,-107.599302657898,13.)); #57003=CARTESIAN_POINT('',(90.3778624613375,-107.599302657898,13.)); #57004=CARTESIAN_POINT('',(78.800936306535,-107.599302657898,13.)); #57005=CARTESIAN_POINT('',(90.3778624613375,-107.599302657898,12.)); #57006=CARTESIAN_POINT('',(90.3778624613375,-107.599302657898,13.)); #57007=CARTESIAN_POINT('',(91.4236280863375,-107.599302657898,12.)); #57008=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-107.337524093206,13.)); #57009=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-107.337524093206,12.)); #57010=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-107.481907177026,13.)); #57011=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-107.481907177026,12.)); #57012=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-107.599302657898,13.)); #57013=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-107.599302657898,12.)); #57014=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-107.599302657898,13.)); #57015=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-107.599302657898,12.)); #57016=CARTESIAN_POINT('',(90.1187827084154,-107.337524093206,13.)); #57017=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-107.337524093206,13.)); #57018=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-107.481907177026,13.)); #57019=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-107.599302657898,13.)); #57020=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-107.599302657898,13.)); #57021=CARTESIAN_POINT('',(90.1187827084154,-107.337524093206,12.)); #57022=CARTESIAN_POINT('',(90.1187827084154,-107.337524093206,13.)); #57023=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-107.337524093206,12.)); #57024=CARTESIAN_POINT('Ctrl Pts',(90.1187827084154,-107.481907177026,12.)); #57025=CARTESIAN_POINT('Ctrl Pts',(90.2348290407748,-107.599302657898,12.)); #57026=CARTESIAN_POINT('Ctrl Pts',(90.3778624613375,-107.599302657898,12.)); #57027=CARTESIAN_POINT('Origin',(90.1187827084154,-104.547016552026,13.)); #57028=CARTESIAN_POINT('',(90.1187827084154,-91.4349701082589,13.)); #57029=CARTESIAN_POINT('',(90.1187827084154,-107.337524093206,12.)); #57030=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-104.308177115257,13.)); #57031=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-104.308177115257,12.)); #57032=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-104.308177115257,13.)); #57033=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-104.308177115257,12.)); #57034=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-104.424223190243,13.)); #57035=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-104.424223190243,12.)); #57036=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-104.567256868179,13.)); #57037=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-104.567256868179,12.)); #57038=CARTESIAN_POINT('',(77.9460706995816,-104.308177115257,13.)); #57039=CARTESIAN_POINT('',(77.6869906892866,-104.567256868179,13.)); #57040=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-104.308177115257,13.)); #57041=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-104.308177115257,13.)); #57042=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-104.424223190243,13.)); #57043=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-104.567256868179,13.)); #57044=CARTESIAN_POINT('',(77.9460706995816,-104.308177115257,12.)); #57045=CARTESIAN_POINT('',(77.9460706995816,-104.308177115257,13.)); #57046=CARTESIAN_POINT('',(77.6869906892866,-104.567256868179,12.)); #57047=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-104.308177115257,12.)); #57048=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-104.308177115257,12.)); #57049=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-104.424223190243,12.)); #57050=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-104.567256868179,12.)); #57051=CARTESIAN_POINT('',(77.6869906892866,-104.567256868179,13.)); #57052=CARTESIAN_POINT('Origin',(78.9918363245816,-104.308177115257,13.)); #57053=CARTESIAN_POINT('',(78.9918363245816,-104.308177115257,13.)); #57054=CARTESIAN_POINT('',(73.1079232381571,-104.308177115257,13.)); #57055=CARTESIAN_POINT('',(78.9918363245816,-104.308177115257,12.)); #57056=CARTESIAN_POINT('',(78.9918363245816,-104.308177115257,13.)); #57057=CARTESIAN_POINT('',(77.9460706995816,-104.308177115257,12.)); #57058=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-104.567257125552,13.)); #57059=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-104.567257125552,12.)); #57060=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-104.424223447616,13.)); #57061=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-104.424223447616,12.)); #57062=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-104.308177115257,13.)); #57063=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-104.308177115257,12.)); #57064=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-104.308177115257,13.)); #57065=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-104.308177115257,12.)); #57066=CARTESIAN_POINT('',(79.2509163348765,-104.567257125552,13.)); #57067=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-104.567257125552,13.)); #57068=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-104.424223447616,13.)); #57069=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-104.308177115257,13.)); #57070=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-104.308177115257,13.)); #57071=CARTESIAN_POINT('',(79.2509163348765,-104.567257125552,12.)); #57072=CARTESIAN_POINT('',(79.2509163348765,-104.567257125552,13.)); #57073=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-104.567257125552,12.)); #57074=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-104.424223447616,12.)); #57075=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-104.308177115257,12.)); #57076=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-104.308177115257,12.)); #57077=CARTESIAN_POINT('Origin',(79.2509163348765,-105.449748241718,13.)); #57078=CARTESIAN_POINT('',(79.2509163348765,-105.449748241718,13.)); #57079=CARTESIAN_POINT('',(79.2509163348765,-91.8863359531046,13.)); #57080=CARTESIAN_POINT('',(79.2509163348765,-105.449748241718,12.)); #57081=CARTESIAN_POINT('',(79.2509163348765,-105.449748241718,13.)); #57082=CARTESIAN_POINT('',(79.2509163348765,-104.567257125552,12.)); #57083=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-105.70882799464,13.)); #57084=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-105.70882799464,12.)); #57085=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-105.70882799464,13.)); #57086=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-105.70882799464,12.)); #57087=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-105.592782177026,13.)); #57088=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-105.592782177026,12.)); #57089=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-105.449748241718,13.)); #57090=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-105.449748241718,12.)); #57091=CARTESIAN_POINT('',(78.9918363245816,-105.70882799464,13.)); #57092=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-105.70882799464,13.)); #57093=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-105.70882799464,13.)); #57094=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-105.592782177026,13.)); #57095=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-105.449748241718,13.)); #57096=CARTESIAN_POINT('',(78.9918363245816,-105.70882799464,12.)); #57097=CARTESIAN_POINT('',(78.9918363245816,-105.70882799464,13.)); #57098=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-105.70882799464,12.)); #57099=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-105.70882799464,12.)); #57100=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-105.592782177026,12.)); #57101=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-105.449748241718,12.)); #57102=CARTESIAN_POINT('Origin',(77.9460706995816,-105.70882799464,13.)); #57103=CARTESIAN_POINT('',(77.9460706995816,-105.70882799464,13.)); #57104=CARTESIAN_POINT('',(72.5850404256571,-105.70882799464,13.)); #57105=CARTESIAN_POINT('',(77.9460706995816,-105.70882799464,12.)); #57106=CARTESIAN_POINT('',(77.9460706995816,-105.70882799464,13.)); #57107=CARTESIAN_POINT('',(78.9918363245816,-105.70882799464,12.)); #57108=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-105.449748241718,13.)); #57109=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-105.449748241718,12.)); #57110=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-105.592781662281,13.)); #57111=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-105.592781662281,12.)); #57112=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-105.70882799464,13.)); #57113=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-105.70882799464,12.)); #57114=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-105.70882799464,13.)); #57115=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-105.70882799464,12.)); #57116=CARTESIAN_POINT('',(77.6869906892866,-105.449748241718,13.)); #57117=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-105.449748241718,13.)); #57118=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-105.592781662281,13.)); #57119=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-105.70882799464,13.)); #57120=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-105.70882799464,13.)); #57121=CARTESIAN_POINT('',(77.6869906892866,-105.449748241718,12.)); #57122=CARTESIAN_POINT('',(77.6869906892866,-105.449748241718,13.)); #57123=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-105.449748241718,12.)); #57124=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-105.592781662281,12.)); #57125=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-105.70882799464,12.)); #57126=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-105.70882799464,12.)); #57127=CARTESIAN_POINT('Origin',(77.6869906892866,-104.567256868179,13.)); #57128=CARTESIAN_POINT('',(77.6869906892866,-91.4450902663351,13.)); #57129=CARTESIAN_POINT('',(77.6869906892866,-105.449748241718,12.)); #57130=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-102.379920116718,13.)); #57131=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-102.379920116718,12.)); #57132=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-102.379920116718,13.)); #57133=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-102.379920116718,12.)); #57134=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-102.495966449077,13.)); #57135=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-102.495966449077,12.)); #57136=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-102.638999998326,13.)); #57137=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-102.638999998326,12.)); #57138=CARTESIAN_POINT('',(86.2339319598765,-102.379920116718,13.)); #57139=CARTESIAN_POINT('',(85.9748522069544,-102.638999998326,13.)); #57140=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-102.379920116718,13.)); #57141=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-102.379920116718,13.)); #57142=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-102.495966449077,13.)); #57143=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-102.638999998326,13.)); #57144=CARTESIAN_POINT('',(86.2339319598765,-102.379920116718,12.)); #57145=CARTESIAN_POINT('',(86.2339319598765,-102.379920116718,13.)); #57146=CARTESIAN_POINT('',(85.9748522069544,-102.638999998326,12.)); #57147=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-102.379920116718,12.)); #57148=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-102.379920116718,12.)); #57149=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-102.495966449077,12.)); #57150=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-102.638999998326,12.)); #57151=CARTESIAN_POINT('',(85.9748522069544,-102.638999998326,13.)); #57152=CARTESIAN_POINT('Origin',(87.2796975848765,-102.379920116718,13.)); #57153=CARTESIAN_POINT('',(87.2796975848765,-102.379920116718,13.)); #57154=CARTESIAN_POINT('',(77.2518538683045,-102.379920116718,13.)); #57155=CARTESIAN_POINT('',(87.2796975848765,-102.379920116718,12.)); #57156=CARTESIAN_POINT('',(87.2796975848765,-102.379920116718,13.)); #57157=CARTESIAN_POINT('',(86.2339319598765,-102.379920116718,12.)); #57158=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-102.639000127013,13.)); #57159=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-102.639000127013,12.)); #57160=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-102.495966320391,13.)); #57161=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-102.495966320391,12.)); #57162=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-102.379920116718,13.)); #57163=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-102.379920116718,12.)); #57164=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-102.379920116718,13.)); #57165=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-102.379920116718,12.)); #57166=CARTESIAN_POINT('',(87.5387773377985,-102.639000127013,13.)); #57167=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-102.639000127013,13.)); #57168=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-102.495966320391,13.)); #57169=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-102.379920116718,13.)); #57170=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-102.379920116718,13.)); #57171=CARTESIAN_POINT('',(87.5387773377985,-102.639000127013,12.)); #57172=CARTESIAN_POINT('',(87.5387773377985,-102.639000127013,13.)); #57173=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-102.639000127013,12.)); #57174=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-102.495966320391,12.)); #57175=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-102.379920116718,12.)); #57176=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-102.379920116718,12.)); #57177=CARTESIAN_POINT('Origin',(87.5387773377985,-103.521491243179,13.)); #57178=CARTESIAN_POINT('',(87.5387773377985,-103.521491243179,13.)); #57179=CARTESIAN_POINT('',(87.5387773377985,-90.9222074538351,13.)); #57180=CARTESIAN_POINT('',(87.5387773377985,-103.521491243179,12.)); #57181=CARTESIAN_POINT('',(87.5387773377985,-103.521491243179,13.)); #57182=CARTESIAN_POINT('',(87.5387773377985,-102.639000127013,12.)); #57183=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-103.780571253474,13.)); #57184=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-103.780571253474,12.)); #57185=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-103.780571253474,13.)); #57186=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-103.780571253474,12.)); #57187=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-103.664524921115,13.)); #57188=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-103.664524921115,12.)); #57189=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-103.521491243179,13.)); #57190=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-103.521491243179,12.)); #57191=CARTESIAN_POINT('',(87.2796975848765,-103.780571253474,13.)); #57192=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-103.780571253474,13.)); #57193=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-103.780571253474,13.)); #57194=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-103.664524921115,13.)); #57195=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-103.521491243179,13.)); #57196=CARTESIAN_POINT('',(87.2796975848765,-103.780571253474,12.)); #57197=CARTESIAN_POINT('',(87.2796975848765,-103.780571253474,13.)); #57198=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-103.780571253474,12.)); #57199=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-103.780571253474,12.)); #57200=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-103.664524921115,12.)); #57201=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-103.521491243179,12.)); #57202=CARTESIAN_POINT('Origin',(86.2339319598765,-103.780571253474,13.)); #57203=CARTESIAN_POINT('',(86.2339319598765,-103.780571253474,13.)); #57204=CARTESIAN_POINT('',(76.7289710558043,-103.780571253474,13.)); #57205=CARTESIAN_POINT('',(86.2339319598765,-103.780571253474,12.)); #57206=CARTESIAN_POINT('',(86.2339319598765,-103.780571253474,13.)); #57207=CARTESIAN_POINT('',(87.2796975848765,-103.780571253474,12.)); #57208=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-103.521491243179,13.)); #57209=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-103.521491243179,12.)); #57210=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-103.664524921115,13.)); #57211=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-103.664524921115,12.)); #57212=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-103.780571253474,13.)); #57213=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-103.780571253474,12.)); #57214=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-103.780571253474,13.)); #57215=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-103.780571253474,12.)); #57216=CARTESIAN_POINT('',(85.9748522069544,-103.521491243179,13.)); #57217=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-103.521491243179,13.)); #57218=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-103.664524921115,13.)); #57219=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-103.780571253474,13.)); #57220=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-103.780571253474,13.)); #57221=CARTESIAN_POINT('',(85.9748522069544,-103.521491243179,12.)); #57222=CARTESIAN_POINT('',(85.9748522069544,-103.521491243179,13.)); #57223=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-103.521491243179,12.)); #57224=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-103.664524921115,12.)); #57225=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-103.780571253474,12.)); #57226=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-103.780571253474,12.)); #57227=CARTESIAN_POINT('Origin',(85.9748522069544,-102.638999998326,13.)); #57228=CARTESIAN_POINT('',(85.9748522069544,-90.4809618314089,13.)); #57229=CARTESIAN_POINT('',(85.9748522069544,-103.521491243179,12.)); #57230=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-106.216193282898,13.)); #57231=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-106.216193282898,12.)); #57232=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-106.216193282898,13.)); #57233=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-106.216193282898,12.)); #57234=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-106.332239615257,13.)); #57235=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-106.332239615257,12.)); #57236=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-106.47527303582,13.)); #57237=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-106.47527303582,12.)); #57238=CARTESIAN_POINT('',(88.3065720422358,-106.216193282898,13.)); #57239=CARTESIAN_POINT('',(88.0474922893137,-106.47527303582,13.)); #57240=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-106.216193282898,13.)); #57241=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-106.216193282898,13.)); #57242=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-106.332239615257,13.)); #57243=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-106.47527303582,13.)); #57244=CARTESIAN_POINT('',(88.3065720422358,-106.216193282898,12.)); #57245=CARTESIAN_POINT('',(88.3065720422358,-106.216193282898,13.)); #57246=CARTESIAN_POINT('',(88.0474922893137,-106.47527303582,12.)); #57247=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-106.216193282898,12.)); #57248=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-106.216193282898,12.)); #57249=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-106.332239615257,12.)); #57250=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-106.47527303582,12.)); #57251=CARTESIAN_POINT('',(88.0474922893137,-106.47527303582,13.)); #57252=CARTESIAN_POINT('Origin',(89.3523376672358,-106.216193282898,13.)); #57253=CARTESIAN_POINT('',(89.3523376672358,-106.216193282898,13.)); #57254=CARTESIAN_POINT('',(78.2881739094842,-106.216193282898,13.)); #57255=CARTESIAN_POINT('',(89.3523376672358,-106.216193282898,12.)); #57256=CARTESIAN_POINT('',(89.3523376672358,-106.216193282898,13.)); #57257=CARTESIAN_POINT('',(88.3065720422358,-106.216193282898,12.)); #57258=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-106.47527303582,13.)); #57259=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-106.47527303582,12.)); #57260=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-106.332239615257,13.)); #57261=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-106.332239615257,12.)); #57262=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-106.216193282898,13.)); #57263=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-106.216193282898,12.)); #57264=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-106.216193282898,13.)); #57265=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-106.216193282898,12.)); #57266=CARTESIAN_POINT('',(89.6114174201578,-106.47527303582,13.)); #57267=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-106.47527303582,13.)); #57268=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-106.332239615257,13.)); #57269=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-106.216193282898,13.)); #57270=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-106.216193282898,13.)); #57271=CARTESIAN_POINT('',(89.6114174201578,-106.47527303582,12.)); #57272=CARTESIAN_POINT('',(89.6114174201578,-106.47527303582,13.)); #57273=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-106.47527303582,12.)); #57274=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-106.332239615257,12.)); #57275=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-106.216193282898,12.)); #57276=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-106.216193282898,12.)); #57277=CARTESIAN_POINT('Origin',(89.6114174201578,-107.357764409359,13.)); #57278=CARTESIAN_POINT('',(89.6114174201578,-107.357764409359,13.)); #57279=CARTESIAN_POINT('',(89.6114174201578,-92.840344036925,13.)); #57280=CARTESIAN_POINT('',(89.6114174201578,-107.357764409359,12.)); #57281=CARTESIAN_POINT('',(89.6114174201578,-107.357764409359,13.)); #57282=CARTESIAN_POINT('',(89.6114174201578,-106.47527303582,12.)); #57283=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-107.616844162281,13.)); #57284=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-107.616844162281,12.)); #57285=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-107.616844162281,13.)); #57286=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-107.616844162281,12.)); #57287=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-107.500798344667,13.)); #57288=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-107.500798344667,12.)); #57289=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-107.357764409359,13.)); #57290=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-107.357764409359,12.)); #57291=CARTESIAN_POINT('',(89.3523376672358,-107.616844162281,13.)); #57292=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-107.616844162281,13.)); #57293=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-107.616844162281,13.)); #57294=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-107.500798344667,13.)); #57295=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-107.357764409359,13.)); #57296=CARTESIAN_POINT('',(89.3523376672358,-107.616844162281,12.)); #57297=CARTESIAN_POINT('',(89.3523376672358,-107.616844162281,13.)); #57298=CARTESIAN_POINT('Ctrl Pts',(89.3523376672358,-107.616844162281,12.)); #57299=CARTESIAN_POINT('Ctrl Pts',(89.4953710877985,-107.616844162281,12.)); #57300=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-107.500798344667,12.)); #57301=CARTESIAN_POINT('Ctrl Pts',(89.6114174201578,-107.357764409359,12.)); #57302=CARTESIAN_POINT('Origin',(88.3065720422358,-107.616844162281,13.)); #57303=CARTESIAN_POINT('',(88.3065720422358,-107.616844162281,13.)); #57304=CARTESIAN_POINT('',(77.7652910969842,-107.616844162281,13.)); #57305=CARTESIAN_POINT('',(88.3065720422358,-107.616844162281,12.)); #57306=CARTESIAN_POINT('',(88.3065720422358,-107.616844162281,13.)); #57307=CARTESIAN_POINT('',(89.3523376672358,-107.616844162281,12.)); #57308=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-107.357764409359,13.)); #57309=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-107.357764409359,12.)); #57310=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-107.500797829921,13.)); #57311=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-107.500797829921,12.)); #57312=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-107.616844162281,13.)); #57313=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-107.616844162281,12.)); #57314=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-107.616844162281,13.)); #57315=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-107.616844162281,12.)); #57316=CARTESIAN_POINT('',(88.0474922893137,-107.357764409359,13.)); #57317=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-107.357764409359,13.)); #57318=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-107.500797829921,13.)); #57319=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-107.616844162281,13.)); #57320=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-107.616844162281,13.)); #57321=CARTESIAN_POINT('',(88.0474922893137,-107.357764409359,12.)); #57322=CARTESIAN_POINT('',(88.0474922893137,-107.357764409359,13.)); #57323=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-107.357764409359,12.)); #57324=CARTESIAN_POINT('Ctrl Pts',(88.0474922893137,-107.500797829921,12.)); #57325=CARTESIAN_POINT('Ctrl Pts',(88.163538621673,-107.616844162281,12.)); #57326=CARTESIAN_POINT('Ctrl Pts',(88.3065720422358,-107.616844162281,12.)); #57327=CARTESIAN_POINT('Origin',(88.0474922893137,-106.47527303582,13.)); #57328=CARTESIAN_POINT('',(88.0474922893137,-92.3990983501555,13.)); #57329=CARTESIAN_POINT('',(88.0474922893137,-107.357764409359,12.)); #57330=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-106.216193282898,13.)); #57331=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-106.216193282898,12.)); #57332=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-106.216193282898,13.)); #57333=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-106.216193282898,12.)); #57334=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-106.332239615257,13.)); #57335=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-106.332239615257,12.)); #57336=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-106.47527303582,13.)); #57337=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-106.47527303582,12.)); #57338=CARTESIAN_POINT('',(86.2339319598765,-106.216193282898,13.)); #57339=CARTESIAN_POINT('',(85.9748522069544,-106.47527303582,13.)); #57340=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-106.216193282898,13.)); #57341=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-106.216193282898,13.)); #57342=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-106.332239615257,13.)); #57343=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-106.47527303582,13.)); #57344=CARTESIAN_POINT('',(86.2339319598765,-106.216193282898,12.)); #57345=CARTESIAN_POINT('',(86.2339319598765,-106.216193282898,13.)); #57346=CARTESIAN_POINT('',(85.9748522069544,-106.47527303582,12.)); #57347=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-106.216193282898,12.)); #57348=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-106.216193282898,12.)); #57349=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-106.332239615257,12.)); #57350=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-106.47527303582,12.)); #57351=CARTESIAN_POINT('',(85.9748522069544,-106.47527303582,13.)); #57352=CARTESIAN_POINT('Origin',(87.2796975848765,-106.216193282898,13.)); #57353=CARTESIAN_POINT('',(87.2796975848765,-106.216193282898,13.)); #57354=CARTESIAN_POINT('',(77.2518538683045,-106.216193282898,13.)); #57355=CARTESIAN_POINT('',(87.2796975848765,-106.216193282898,12.)); #57356=CARTESIAN_POINT('',(87.2796975848765,-106.216193282898,13.)); #57357=CARTESIAN_POINT('',(86.2339319598765,-106.216193282898,12.)); #57358=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-106.47527303582,13.)); #57359=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-106.47527303582,12.)); #57360=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-106.332239615257,13.)); #57361=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-106.332239615257,12.)); #57362=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-106.216193282898,13.)); #57363=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-106.216193282898,12.)); #57364=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-106.216193282898,13.)); #57365=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-106.216193282898,12.)); #57366=CARTESIAN_POINT('',(87.5387773377985,-106.47527303582,13.)); #57367=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-106.47527303582,13.)); #57368=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-106.332239615257,13.)); #57369=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-106.216193282898,13.)); #57370=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-106.216193282898,13.)); #57371=CARTESIAN_POINT('',(87.5387773377985,-106.47527303582,12.)); #57372=CARTESIAN_POINT('',(87.5387773377985,-106.47527303582,13.)); #57373=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-106.47527303582,12.)); #57374=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-106.332239615257,12.)); #57375=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-106.216193282898,12.)); #57376=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-106.216193282898,12.)); #57377=CARTESIAN_POINT('Origin',(87.5387773377985,-107.357764409359,13.)); #57378=CARTESIAN_POINT('',(87.5387773377985,-107.357764409359,13.)); #57379=CARTESIAN_POINT('',(87.5387773377985,-92.840344036925,13.)); #57380=CARTESIAN_POINT('',(87.5387773377985,-107.357764409359,12.)); #57381=CARTESIAN_POINT('',(87.5387773377985,-107.357764409359,13.)); #57382=CARTESIAN_POINT('',(87.5387773377985,-106.47527303582,12.)); #57383=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-107.616844162281,13.)); #57384=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-107.616844162281,12.)); #57385=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-107.616844162281,13.)); #57386=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-107.616844162281,12.)); #57387=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-107.500798344667,13.)); #57388=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-107.500798344667,12.)); #57389=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-107.357764409359,13.)); #57390=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-107.357764409359,12.)); #57391=CARTESIAN_POINT('',(87.2796975848765,-107.616844162281,13.)); #57392=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-107.616844162281,13.)); #57393=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-107.616844162281,13.)); #57394=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-107.500798344667,13.)); #57395=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-107.357764409359,13.)); #57396=CARTESIAN_POINT('',(87.2796975848765,-107.616844162281,12.)); #57397=CARTESIAN_POINT('',(87.2796975848765,-107.616844162281,13.)); #57398=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-107.616844162281,12.)); #57399=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-107.616844162281,12.)); #57400=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-107.500798344667,12.)); #57401=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-107.357764409359,12.)); #57402=CARTESIAN_POINT('Origin',(86.2339319598765,-107.616844162281,13.)); #57403=CARTESIAN_POINT('',(86.2339319598765,-107.616844162281,13.)); #57404=CARTESIAN_POINT('',(76.7289710558045,-107.616844162281,13.)); #57405=CARTESIAN_POINT('',(86.2339319598765,-107.616844162281,12.)); #57406=CARTESIAN_POINT('',(86.2339319598765,-107.616844162281,13.)); #57407=CARTESIAN_POINT('',(87.2796975848765,-107.616844162281,12.)); #57408=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-107.357764409359,13.)); #57409=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-107.357764409359,12.)); #57410=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-107.500797829921,13.)); #57411=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-107.500797829921,12.)); #57412=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-107.616844162281,13.)); #57413=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-107.616844162281,12.)); #57414=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-107.616844162281,13.)); #57415=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-107.616844162281,12.)); #57416=CARTESIAN_POINT('',(85.9748522069544,-107.357764409359,13.)); #57417=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-107.357764409359,13.)); #57418=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-107.500797829921,13.)); #57419=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-107.616844162281,13.)); #57420=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-107.616844162281,13.)); #57421=CARTESIAN_POINT('',(85.9748522069544,-107.357764409359,12.)); #57422=CARTESIAN_POINT('',(85.9748522069544,-107.357764409359,13.)); #57423=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-107.357764409359,12.)); #57424=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-107.500797829921,12.)); #57425=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-107.616844162281,12.)); #57426=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-107.616844162281,12.)); #57427=CARTESIAN_POINT('Origin',(85.9748522069544,-106.47527303582,13.)); #57428=CARTESIAN_POINT('',(85.9748522069544,-92.3990983501555,13.)); #57429=CARTESIAN_POINT('',(85.9748522069544,-107.357764409359,12.)); #57430=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-106.216193282898,13.)); #57431=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-106.216193282898,12.)); #57432=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-106.216193282898,13.)); #57433=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-106.216193282898,12.)); #57434=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-106.332239615257,13.)); #57435=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-106.332239615257,12.)); #57436=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-106.47527303582,13.)); #57437=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-106.47527303582,12.)); #57438=CARTESIAN_POINT('',(77.9460706995816,-106.216193282898,13.)); #57439=CARTESIAN_POINT('',(77.6869906892866,-106.47527303582,13.)); #57440=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-106.216193282898,13.)); #57441=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-106.216193282898,13.)); #57442=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-106.332239615257,13.)); #57443=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-106.47527303582,13.)); #57444=CARTESIAN_POINT('',(77.9460706995816,-106.216193282898,12.)); #57445=CARTESIAN_POINT('',(77.9460706995816,-106.216193282898,13.)); #57446=CARTESIAN_POINT('',(77.6869906892866,-106.47527303582,12.)); #57447=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-106.216193282898,12.)); #57448=CARTESIAN_POINT('Ctrl Pts',(77.8030368929595,-106.216193282898,12.)); #57449=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-106.332239615257,12.)); #57450=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-106.47527303582,12.)); #57451=CARTESIAN_POINT('',(77.6869906892866,-106.47527303582,13.)); #57452=CARTESIAN_POINT('Origin',(78.9918363245816,-106.216193282898,13.)); #57453=CARTESIAN_POINT('',(78.9918363245816,-106.216193282898,13.)); #57454=CARTESIAN_POINT('',(73.1079232381571,-106.216193282898,13.)); #57455=CARTESIAN_POINT('',(78.9918363245816,-106.216193282898,12.)); #57456=CARTESIAN_POINT('',(78.9918363245816,-106.216193282898,13.)); #57457=CARTESIAN_POINT('',(77.9460706995816,-106.216193282898,12.)); #57458=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-106.47527303582,13.)); #57459=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-106.47527303582,12.)); #57460=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-106.332239615257,13.)); #57461=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-106.332239615257,12.)); #57462=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-106.216193282898,13.)); #57463=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-106.216193282898,12.)); #57464=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-106.216193282898,13.)); #57465=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-106.216193282898,12.)); #57466=CARTESIAN_POINT('',(79.2509163348765,-106.47527303582,13.)); #57467=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-106.47527303582,13.)); #57468=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-106.332239615257,13.)); #57469=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-106.216193282898,13.)); #57470=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-106.216193282898,13.)); #57471=CARTESIAN_POINT('',(79.2509163348765,-106.47527303582,12.)); #57472=CARTESIAN_POINT('',(79.2509163348765,-106.47527303582,13.)); #57473=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-106.47527303582,12.)); #57474=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-106.332239615257,12.)); #57475=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-106.216193282898,12.)); #57476=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-106.216193282898,12.)); #57477=CARTESIAN_POINT('Origin',(79.2509163348765,-107.357764409359,13.)); #57478=CARTESIAN_POINT('',(79.2509163348765,-107.357764409359,13.)); #57479=CARTESIAN_POINT('',(79.2509163348765,-92.840344036925,13.)); #57480=CARTESIAN_POINT('',(79.2509163348765,-107.357764409359,12.)); #57481=CARTESIAN_POINT('',(79.2509163348765,-107.357764409359,13.)); #57482=CARTESIAN_POINT('',(79.2509163348765,-106.47527303582,12.)); #57483=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-107.616844162281,13.)); #57484=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-107.616844162281,12.)); #57485=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-107.616844162281,13.)); #57486=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-107.616844162281,12.)); #57487=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-107.500798344667,13.)); #57488=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-107.500798344667,12.)); #57489=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-107.357764409359,13.)); #57490=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-107.357764409359,12.)); #57491=CARTESIAN_POINT('',(78.9918363245816,-107.616844162281,13.)); #57492=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-107.616844162281,13.)); #57493=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-107.616844162281,13.)); #57494=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-107.500798344667,13.)); #57495=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-107.357764409359,13.)); #57496=CARTESIAN_POINT('',(78.9918363245816,-107.616844162281,12.)); #57497=CARTESIAN_POINT('',(78.9918363245816,-107.616844162281,13.)); #57498=CARTESIAN_POINT('Ctrl Pts',(78.9918363245816,-107.616844162281,12.)); #57499=CARTESIAN_POINT('Ctrl Pts',(79.1348700025171,-107.616844162281,12.)); #57500=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-107.500798344667,12.)); #57501=CARTESIAN_POINT('Ctrl Pts',(79.2509163348765,-107.357764409359,12.)); #57502=CARTESIAN_POINT('Origin',(77.9460706995816,-107.616844162281,13.)); #57503=CARTESIAN_POINT('',(77.9460706995816,-107.616844162281,13.)); #57504=CARTESIAN_POINT('',(72.5850404256571,-107.616844162281,13.)); #57505=CARTESIAN_POINT('',(77.9460706995816,-107.616844162281,12.)); #57506=CARTESIAN_POINT('',(77.9460706995816,-107.616844162281,13.)); #57507=CARTESIAN_POINT('',(78.9918363245816,-107.616844162281,12.)); #57508=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-107.357764409359,13.)); #57509=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-107.357764409359,12.)); #57510=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-107.500797829921,13.)); #57511=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-107.500797829921,12.)); #57512=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-107.616844162281,13.)); #57513=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-107.616844162281,12.)); #57514=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-107.616844162281,13.)); #57515=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-107.616844162281,12.)); #57516=CARTESIAN_POINT('',(77.6869906892866,-107.357764409359,13.)); #57517=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-107.357764409359,13.)); #57518=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-107.500797829921,13.)); #57519=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-107.616844162281,13.)); #57520=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-107.616844162281,13.)); #57521=CARTESIAN_POINT('',(77.6869906892866,-107.357764409359,12.)); #57522=CARTESIAN_POINT('',(77.6869906892866,-107.357764409359,13.)); #57523=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-107.357764409359,12.)); #57524=CARTESIAN_POINT('Ctrl Pts',(77.6869906892866,-107.500797829921,12.)); #57525=CARTESIAN_POINT('Ctrl Pts',(77.8030370216459,-107.616844162281,12.)); #57526=CARTESIAN_POINT('Ctrl Pts',(77.9460706995816,-107.616844162281,12.)); #57527=CARTESIAN_POINT('Origin',(77.6869906892866,-106.47527303582,13.)); #57528=CARTESIAN_POINT('',(77.6869906892866,-92.3990983501555,13.)); #57529=CARTESIAN_POINT('',(77.6869906892866,-107.357764409359,12.)); #57530=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-104.308177115257,13.)); #57531=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-104.308177115257,12.)); #57532=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-104.308177115257,13.)); #57533=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-104.308177115257,12.)); #57534=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-104.424223190243,13.)); #57535=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-104.424223190243,12.)); #57536=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-104.567256868179,13.)); #57537=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-104.567256868179,12.)); #57538=CARTESIAN_POINT('',(86.2339319598765,-104.308177115257,13.)); #57539=CARTESIAN_POINT('',(85.9748522069544,-104.567256868179,13.)); #57540=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-104.308177115257,13.)); #57541=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-104.308177115257,13.)); #57542=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-104.424223190243,13.)); #57543=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-104.567256868179,13.)); #57544=CARTESIAN_POINT('',(86.2339319598765,-104.308177115257,12.)); #57545=CARTESIAN_POINT('',(86.2339319598765,-104.308177115257,13.)); #57546=CARTESIAN_POINT('',(85.9748522069544,-104.567256868179,12.)); #57547=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-104.308177115257,12.)); #57548=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-104.308177115257,12.)); #57549=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-104.424223190243,12.)); #57550=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-104.567256868179,12.)); #57551=CARTESIAN_POINT('',(85.9748522069544,-104.567256868179,13.)); #57552=CARTESIAN_POINT('Origin',(87.2796975848765,-104.308177115257,13.)); #57553=CARTESIAN_POINT('',(87.2796975848765,-104.308177115257,13.)); #57554=CARTESIAN_POINT('',(77.2518538683045,-104.308177115257,13.)); #57555=CARTESIAN_POINT('',(87.2796975848765,-104.308177115257,12.)); #57556=CARTESIAN_POINT('',(87.2796975848765,-104.308177115257,13.)); #57557=CARTESIAN_POINT('',(86.2339319598765,-104.308177115257,12.)); #57558=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-104.567257125552,13.)); #57559=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-104.567257125552,12.)); #57560=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-104.424223447616,13.)); #57561=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-104.424223447616,12.)); #57562=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-104.308177115257,13.)); #57563=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-104.308177115257,12.)); #57564=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-104.308177115257,13.)); #57565=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-104.308177115257,12.)); #57566=CARTESIAN_POINT('',(87.5387773377985,-104.567257125552,13.)); #57567=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-104.567257125552,13.)); #57568=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-104.424223447616,13.)); #57569=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-104.308177115257,13.)); #57570=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-104.308177115257,13.)); #57571=CARTESIAN_POINT('',(87.5387773377985,-104.567257125552,12.)); #57572=CARTESIAN_POINT('',(87.5387773377985,-104.567257125552,13.)); #57573=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-104.567257125552,12.)); #57574=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-104.424223447616,12.)); #57575=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-104.308177115257,12.)); #57576=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-104.308177115257,12.)); #57577=CARTESIAN_POINT('Origin',(87.5387773377985,-105.449748241718,13.)); #57578=CARTESIAN_POINT('',(87.5387773377985,-105.449748241718,13.)); #57579=CARTESIAN_POINT('',(87.5387773377985,-91.8863359531046,13.)); #57580=CARTESIAN_POINT('',(87.5387773377985,-105.449748241718,12.)); #57581=CARTESIAN_POINT('',(87.5387773377985,-105.449748241718,13.)); #57582=CARTESIAN_POINT('',(87.5387773377985,-104.567257125552,12.)); #57583=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-105.70882799464,13.)); #57584=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-105.70882799464,12.)); #57585=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-105.70882799464,13.)); #57586=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-105.70882799464,12.)); #57587=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-105.592782177026,13.)); #57588=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-105.592782177026,12.)); #57589=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-105.449748241718,13.)); #57590=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-105.449748241718,12.)); #57591=CARTESIAN_POINT('',(87.2796975848765,-105.70882799464,13.)); #57592=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-105.70882799464,13.)); #57593=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-105.70882799464,13.)); #57594=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-105.592782177026,13.)); #57595=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-105.449748241718,13.)); #57596=CARTESIAN_POINT('',(87.2796975848765,-105.70882799464,12.)); #57597=CARTESIAN_POINT('',(87.2796975848765,-105.70882799464,13.)); #57598=CARTESIAN_POINT('Ctrl Pts',(87.2796975848765,-105.70882799464,12.)); #57599=CARTESIAN_POINT('Ctrl Pts',(87.4227310054392,-105.70882799464,12.)); #57600=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-105.592782177026,12.)); #57601=CARTESIAN_POINT('Ctrl Pts',(87.5387773377985,-105.449748241718,12.)); #57602=CARTESIAN_POINT('Origin',(86.2339319598765,-105.70882799464,13.)); #57603=CARTESIAN_POINT('',(86.2339319598765,-105.70882799464,13.)); #57604=CARTESIAN_POINT('',(76.7289710558045,-105.70882799464,13.)); #57605=CARTESIAN_POINT('',(86.2339319598765,-105.70882799464,12.)); #57606=CARTESIAN_POINT('',(86.2339319598765,-105.70882799464,13.)); #57607=CARTESIAN_POINT('',(87.2796975848765,-105.70882799464,12.)); #57608=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-105.449748241718,13.)); #57609=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-105.449748241718,12.)); #57610=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-105.592781662281,13.)); #57611=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-105.592781662281,12.)); #57612=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-105.70882799464,13.)); #57613=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-105.70882799464,12.)); #57614=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-105.70882799464,13.)); #57615=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-105.70882799464,12.)); #57616=CARTESIAN_POINT('',(85.9748522069544,-105.449748241718,13.)); #57617=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-105.449748241718,13.)); #57618=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-105.592781662281,13.)); #57619=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-105.70882799464,13.)); #57620=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-105.70882799464,13.)); #57621=CARTESIAN_POINT('',(85.9748522069544,-105.449748241718,12.)); #57622=CARTESIAN_POINT('',(85.9748522069544,-105.449748241718,13.)); #57623=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-105.449748241718,12.)); #57624=CARTESIAN_POINT('Ctrl Pts',(85.9748522069544,-105.592781662281,12.)); #57625=CARTESIAN_POINT('Ctrl Pts',(86.0908985393137,-105.70882799464,12.)); #57626=CARTESIAN_POINT('Ctrl Pts',(86.2339319598765,-105.70882799464,12.)); #57627=CARTESIAN_POINT('Origin',(85.9748522069544,-104.567256868179,13.)); #57628=CARTESIAN_POINT('',(85.9748522069544,-91.4450902663351,13.)); #57629=CARTESIAN_POINT('',(85.9748522069544,-105.449748241718,12.)); #57630=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-104.308177115257,13.)); #57631=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-104.308177115257,12.)); #57632=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-104.308177115257,13.)); #57633=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-104.308177115257,12.)); #57634=CARTESIAN_POINT('Ctrl Pts',(81.8309211907477,-104.424223190243,13.)); #57635=CARTESIAN_POINT('Ctrl Pts',(81.8309211907477,-104.424223190243,12.)); #57636=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-104.567256868179,13.)); #57637=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-104.567256868179,12.)); #57638=CARTESIAN_POINT('',(82.0900014584154,-104.308177115257,13.)); #57639=CARTESIAN_POINT('',(81.8309217054934,-104.567256868179,13.)); #57640=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-104.308177115257,13.)); #57641=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-104.308177115257,13.)); #57642=CARTESIAN_POINT('Ctrl Pts',(81.8309211907477,-104.424223190243,13.)); #57643=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-104.567256868179,13.)); #57644=CARTESIAN_POINT('',(82.0900014584154,-104.308177115257,12.)); #57645=CARTESIAN_POINT('',(82.0900014584154,-104.308177115257,13.)); #57646=CARTESIAN_POINT('',(81.8309217054934,-104.567256868179,12.)); #57647=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-104.308177115257,12.)); #57648=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-104.308177115257,12.)); #57649=CARTESIAN_POINT('Ctrl Pts',(81.8309211907477,-104.424223190243,12.)); #57650=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-104.567256868179,12.)); #57651=CARTESIAN_POINT('',(81.8309217054934,-104.567256868179,13.)); #57652=CARTESIAN_POINT('Origin',(83.1357670834154,-104.308177115257,13.)); #57653=CARTESIAN_POINT('',(83.1357670834154,-104.308177115257,13.)); #57654=CARTESIAN_POINT('',(75.179888617574,-104.308177115257,13.)); #57655=CARTESIAN_POINT('',(83.1357670834154,-104.308177115257,12.)); #57656=CARTESIAN_POINT('',(83.1357670834154,-104.308177115257,13.)); #57657=CARTESIAN_POINT('',(82.0900014584154,-104.308177115257,12.)); #57658=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-104.567257125552,13.)); #57659=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-104.567257125552,12.)); #57660=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-104.424223447616,13.)); #57661=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-104.424223447616,12.)); #57662=CARTESIAN_POINT('Ctrl Pts',(83.2788010187239,-104.308177115257,13.)); #57663=CARTESIAN_POINT('Ctrl Pts',(83.2788010187239,-104.308177115257,12.)); #57664=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-104.308177115257,13.)); #57665=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-104.308177115257,12.)); #57666=CARTESIAN_POINT('',(83.3948468363375,-104.567257125552,13.)); #57667=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-104.567257125552,13.)); #57668=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-104.424223447616,13.)); #57669=CARTESIAN_POINT('Ctrl Pts',(83.2788010187239,-104.308177115257,13.)); #57670=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-104.308177115257,13.)); #57671=CARTESIAN_POINT('',(83.3948468363375,-104.567257125552,12.)); #57672=CARTESIAN_POINT('',(83.3948468363375,-104.567257125552,13.)); #57673=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-104.567257125552,12.)); #57674=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-104.424223447616,12.)); #57675=CARTESIAN_POINT('Ctrl Pts',(83.2788010187239,-104.308177115257,12.)); #57676=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-104.308177115257,12.)); #57677=CARTESIAN_POINT('Origin',(83.3948468363375,-105.449748241718,13.)); #57678=CARTESIAN_POINT('',(83.3948468363375,-105.449748241718,13.)); #57679=CARTESIAN_POINT('',(83.3948468363375,-91.8863359531046,13.)); #57680=CARTESIAN_POINT('',(83.3948468363375,-105.449748241718,12.)); #57681=CARTESIAN_POINT('',(83.3948468363375,-105.449748241718,13.)); #57682=CARTESIAN_POINT('',(83.3948468363375,-104.567257125552,12.)); #57683=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-105.70882799464,13.)); #57684=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-105.70882799464,12.)); #57685=CARTESIAN_POINT('Ctrl Pts',(83.2788005039782,-105.70882799464,13.)); #57686=CARTESIAN_POINT('Ctrl Pts',(83.2788005039782,-105.70882799464,12.)); #57687=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-105.592782177026,13.)); #57688=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-105.592782177026,12.)); #57689=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-105.449748241718,13.)); #57690=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-105.449748241718,12.)); #57691=CARTESIAN_POINT('',(83.1357670834154,-105.70882799464,13.)); #57692=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-105.70882799464,13.)); #57693=CARTESIAN_POINT('Ctrl Pts',(83.2788005039782,-105.70882799464,13.)); #57694=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-105.592782177026,13.)); #57695=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-105.449748241718,13.)); #57696=CARTESIAN_POINT('',(83.1357670834154,-105.70882799464,12.)); #57697=CARTESIAN_POINT('',(83.1357670834154,-105.70882799464,13.)); #57698=CARTESIAN_POINT('Ctrl Pts',(83.1357670834154,-105.70882799464,12.)); #57699=CARTESIAN_POINT('Ctrl Pts',(83.2788005039782,-105.70882799464,12.)); #57700=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-105.592782177026,12.)); #57701=CARTESIAN_POINT('Ctrl Pts',(83.3948468363375,-105.449748241718,12.)); #57702=CARTESIAN_POINT('Origin',(82.0900014584154,-105.70882799464,13.)); #57703=CARTESIAN_POINT('',(82.0900014584154,-105.70882799464,13.)); #57704=CARTESIAN_POINT('',(74.657005805074,-105.70882799464,13.)); #57705=CARTESIAN_POINT('',(82.0900014584154,-105.70882799464,12.)); #57706=CARTESIAN_POINT('',(82.0900014584154,-105.70882799464,13.)); #57707=CARTESIAN_POINT('',(83.1357670834154,-105.70882799464,12.)); #57708=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-105.449748241718,13.)); #57709=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-105.449748241718,12.)); #57710=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-105.592781662281,13.)); #57711=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-105.592781662281,12.)); #57712=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-105.70882799464,13.)); #57713=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-105.70882799464,12.)); #57714=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-105.70882799464,13.)); #57715=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-105.70882799464,12.)); #57716=CARTESIAN_POINT('',(81.8309217054934,-105.449748241718,13.)); #57717=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-105.449748241718,13.)); #57718=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-105.592781662281,13.)); #57719=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-105.70882799464,13.)); #57720=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-105.70882799464,13.)); #57721=CARTESIAN_POINT('',(81.8309217054934,-105.449748241718,12.)); #57722=CARTESIAN_POINT('',(81.8309217054934,-105.449748241718,13.)); #57723=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-105.449748241718,12.)); #57724=CARTESIAN_POINT('Ctrl Pts',(81.8309217054934,-105.592781662281,12.)); #57725=CARTESIAN_POINT('Ctrl Pts',(81.946967523107,-105.70882799464,12.)); #57726=CARTESIAN_POINT('Ctrl Pts',(82.0900014584154,-105.70882799464,12.)); #57727=CARTESIAN_POINT('Origin',(81.8309217054934,-104.567256868179,13.)); #57728=CARTESIAN_POINT('',(81.8309217054934,-91.4450902663351,13.)); #57729=CARTESIAN_POINT('',(81.8309217054934,-105.449748241718,12.)); #57730=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-104.308177115257,13.)); #57731=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-104.308177115257,12.)); #57732=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-104.308177115257,13.)); #57733=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-104.308177115257,12.)); #57734=CARTESIAN_POINT('Ctrl Pts',(83.903561273107,-104.424223190243,13.)); #57735=CARTESIAN_POINT('Ctrl Pts',(83.903561273107,-104.424223190243,12.)); #57736=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-104.567256868179,13.)); #57737=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-104.567256868179,12.)); #57738=CARTESIAN_POINT('',(84.1612918775171,-104.308177115257,13.)); #57739=CARTESIAN_POINT('',(83.9022121245951,-104.567256868179,13.)); #57740=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-104.308177115257,13.)); #57741=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-104.308177115257,13.)); #57742=CARTESIAN_POINT('Ctrl Pts',(83.903561273107,-104.424223190243,13.)); #57743=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-104.567256868179,13.)); #57744=CARTESIAN_POINT('',(84.1612918775171,-104.308177115257,12.)); #57745=CARTESIAN_POINT('',(84.1612918775171,-104.308177115257,13.)); #57746=CARTESIAN_POINT('',(83.9022121245951,-104.567256868179,12.)); #57747=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-104.308177115257,12.)); #57748=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-104.308177115257,12.)); #57749=CARTESIAN_POINT('Ctrl Pts',(83.903561273107,-104.424223190243,12.)); #57750=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-104.567256868179,12.)); #57751=CARTESIAN_POINT('',(83.9022121245951,-104.567256868179,13.)); #57752=CARTESIAN_POINT('Origin',(85.2070575025171,-104.308177115257,13.)); #57753=CARTESIAN_POINT('',(85.2070575025171,-104.308177115257,13.)); #57754=CARTESIAN_POINT('',(76.2155338271249,-104.308177115257,13.)); #57755=CARTESIAN_POINT('',(85.2070575025171,-104.308177115257,12.)); #57756=CARTESIAN_POINT('',(85.2070575025171,-104.308177115257,13.)); #57757=CARTESIAN_POINT('',(84.1612918775171,-104.308177115257,12.)); #57758=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-104.567257125552,13.)); #57759=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-104.567257125552,12.)); #57760=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-104.424223447616,13.)); #57761=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-104.424223447616,12.)); #57762=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-104.308177115257,13.)); #57763=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-104.308177115257,12.)); #57764=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-104.308177115257,13.)); #57765=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-104.308177115257,12.)); #57766=CARTESIAN_POINT('',(85.4661372554392,-104.567257125552,13.)); #57767=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-104.567257125552,13.)); #57768=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-104.424223447616,13.)); #57769=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-104.308177115257,13.)); #57770=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-104.308177115257,13.)); #57771=CARTESIAN_POINT('',(85.4661372554392,-104.567257125552,12.)); #57772=CARTESIAN_POINT('',(85.4661372554392,-104.567257125552,13.)); #57773=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-104.567257125552,12.)); #57774=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-104.424223447616,12.)); #57775=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-104.308177115257,12.)); #57776=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-104.308177115257,12.)); #57777=CARTESIAN_POINT('Origin',(85.4661372554392,-105.449748241718,13.)); #57778=CARTESIAN_POINT('',(85.4661372554392,-105.449748241718,13.)); #57779=CARTESIAN_POINT('',(85.4661372554392,-91.8863359531046,13.)); #57780=CARTESIAN_POINT('',(85.4661372554392,-105.449748241718,12.)); #57781=CARTESIAN_POINT('',(85.4661372554392,-105.449748241718,13.)); #57782=CARTESIAN_POINT('',(85.4661372554392,-104.567257125552,12.)); #57783=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-105.70882799464,13.)); #57784=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-105.70882799464,12.)); #57785=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-105.70882799464,13.)); #57786=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-105.70882799464,12.)); #57787=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-105.592782177026,13.)); #57788=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-105.592782177026,12.)); #57789=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-105.449748241718,13.)); #57790=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-105.449748241718,12.)); #57791=CARTESIAN_POINT('',(85.2070575025171,-105.70882799464,13.)); #57792=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-105.70882799464,13.)); #57793=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-105.70882799464,13.)); #57794=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-105.592782177026,13.)); #57795=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-105.449748241718,13.)); #57796=CARTESIAN_POINT('',(85.2070575025171,-105.70882799464,12.)); #57797=CARTESIAN_POINT('',(85.2070575025171,-105.70882799464,13.)); #57798=CARTESIAN_POINT('Ctrl Pts',(85.2070575025171,-105.70882799464,12.)); #57799=CARTESIAN_POINT('Ctrl Pts',(85.3500909230799,-105.70882799464,12.)); #57800=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-105.592782177026,12.)); #57801=CARTESIAN_POINT('Ctrl Pts',(85.4661372554392,-105.449748241718,12.)); #57802=CARTESIAN_POINT('Origin',(84.1612918775171,-105.70882799464,13.)); #57803=CARTESIAN_POINT('',(84.1612918775171,-105.70882799464,13.)); #57804=CARTESIAN_POINT('',(75.6926510146249,-105.70882799464,13.)); #57805=CARTESIAN_POINT('',(84.1612918775171,-105.70882799464,12.)); #57806=CARTESIAN_POINT('',(84.1612918775171,-105.70882799464,13.)); #57807=CARTESIAN_POINT('',(85.2070575025171,-105.70882799464,12.)); #57808=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-105.449748241718,13.)); #57809=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-105.449748241718,12.)); #57810=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-105.592781662281,13.)); #57811=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-105.592781662281,12.)); #57812=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-105.70882799464,13.)); #57813=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-105.70882799464,12.)); #57814=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-105.70882799464,13.)); #57815=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-105.70882799464,12.)); #57816=CARTESIAN_POINT('',(83.9022121245951,-105.449748241718,13.)); #57817=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-105.449748241718,13.)); #57818=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-105.592781662281,13.)); #57819=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-105.70882799464,13.)); #57820=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-105.70882799464,13.)); #57821=CARTESIAN_POINT('',(83.9022121245951,-105.449748241718,12.)); #57822=CARTESIAN_POINT('',(83.9022121245951,-105.449748241718,13.)); #57823=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-105.449748241718,12.)); #57824=CARTESIAN_POINT('Ctrl Pts',(83.9022121245951,-105.592781662281,12.)); #57825=CARTESIAN_POINT('Ctrl Pts',(84.0182579422087,-105.70882799464,12.)); #57826=CARTESIAN_POINT('Ctrl Pts',(84.1612918775171,-105.70882799464,12.)); #57827=CARTESIAN_POINT('Origin',(83.9022121245951,-104.567256868179,13.)); #57828=CARTESIAN_POINT('',(83.9022121245951,-91.4450902663351,13.)); #57829=CARTESIAN_POINT('',(83.9022121245951,-105.449748241718,12.)); #57830=CARTESIAN_POINT('Origin',(77.5142707253188,-101.585138291906,13.)); #57831=CARTESIAN_POINT('',(77.5142707253188,-101.585138291906,12.)); #57832=CARTESIAN_POINT('',(77.5142707253188,-101.585138291906,13.)); #57833=CARTESIAN_POINT('',(88.7383716304392,-101.585138291906,12.)); #57834=CARTESIAN_POINT('',(88.7383716304392,-101.585138291906,12.)); #57835=CARTESIAN_POINT('',(88.7383716304392,-101.585138291906,13.)); #57836=CARTESIAN_POINT('Ctrl Pts',(77.0163513425976,-101.79294206893,13.)); #57837=CARTESIAN_POINT('Ctrl Pts',(77.0163513425976,-101.79294206893,12.)); #57838=CARTESIAN_POINT('Ctrl Pts',(77.1445420062036,-101.664751405324,13.)); #57839=CARTESIAN_POINT('Ctrl Pts',(77.1445420062036,-101.664751405324,12.)); #57840=CARTESIAN_POINT('Ctrl Pts',(77.3199607175977,-101.585138291906,13.)); #57841=CARTESIAN_POINT('Ctrl Pts',(77.3199607175977,-101.585138291906,12.)); #57842=CARTESIAN_POINT('Ctrl Pts',(77.5142707253188,-101.585138291906,13.)); #57843=CARTESIAN_POINT('Ctrl Pts',(77.5142707253188,-101.585138291906,12.)); #57844=CARTESIAN_POINT('',(77.0163513425976,-101.79294206893,12.)); #57845=CARTESIAN_POINT('',(77.0163513425976,-101.79294206893,13.)); #57846=CARTESIAN_POINT('Ctrl Pts',(77.0163513425976,-101.79294206893,12.)); #57847=CARTESIAN_POINT('Ctrl Pts',(77.1445420062036,-101.664751405324,12.)); #57848=CARTESIAN_POINT('Ctrl Pts',(77.3199607175977,-101.585138291906,12.)); #57849=CARTESIAN_POINT('Ctrl Pts',(77.5142707253188,-101.585138291906,12.)); #57850=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-102.289512110109,13.)); #57851=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-102.289512110109,12.)); #57852=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-102.09655144393,13.)); #57853=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-102.09655144393,12.)); #57854=CARTESIAN_POINT('Ctrl Pts',(76.8881606789917,-101.919783326651,13.)); #57855=CARTESIAN_POINT('Ctrl Pts',(76.8881606789917,-101.919783326651,12.)); #57856=CARTESIAN_POINT('Ctrl Pts',(77.0163513425976,-101.79294206893,13.)); #57857=CARTESIAN_POINT('Ctrl Pts',(77.0163513425976,-101.79294206893,12.)); #57858=CARTESIAN_POINT('',(76.809896907115,-102.289512110109,12.)); #57859=CARTESIAN_POINT('',(76.809896907115,-102.289512110109,13.)); #57860=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-102.289512110109,12.)); #57861=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-102.09655144393,12.)); #57862=CARTESIAN_POINT('Ctrl Pts',(76.8881606789917,-101.919783326651,12.)); #57863=CARTESIAN_POINT('Ctrl Pts',(77.0163513425976,-101.79294206893,12.)); #57864=CARTESIAN_POINT('Origin',(76.809896907115,-107.869177657898,13.)); #57865=CARTESIAN_POINT('',(76.809896907115,-107.869177657898,12.)); #57866=CARTESIAN_POINT('',(76.809896907115,-107.869177657898,13.)); #57867=CARTESIAN_POINT('',(76.809896907115,-102.289512110109,12.)); #57868=CARTESIAN_POINT('Ctrl Pts',(77.0177006841392,-108.367096847589,13.)); #57869=CARTESIAN_POINT('Ctrl Pts',(77.0177006841392,-108.367096847589,12.)); #57870=CARTESIAN_POINT('Ctrl Pts',(76.8895100205333,-108.238906634386,13.)); #57871=CARTESIAN_POINT('Ctrl Pts',(76.8895100205333,-108.238906634386,12.)); #57872=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-108.063487472589,13.)); #57873=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-108.063487472589,12.)); #57874=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-107.869177657898,13.)); #57875=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-107.869177657898,12.)); #57876=CARTESIAN_POINT('',(77.0177006841392,-108.367096847589,12.)); #57877=CARTESIAN_POINT('',(77.0177006841392,-108.367096847589,13.)); #57878=CARTESIAN_POINT('Ctrl Pts',(77.0177006841392,-108.367096847589,12.)); #57879=CARTESIAN_POINT('Ctrl Pts',(76.8895100205333,-108.238906634386,12.)); #57880=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-108.063487472589,12.)); #57881=CARTESIAN_POINT('Ctrl Pts',(76.809896907115,-107.869177657898,12.)); #57882=CARTESIAN_POINT('Ctrl Pts',(77.5156200025171,-108.574900721128,13.)); #57883=CARTESIAN_POINT('Ctrl Pts',(77.5156200025171,-108.574900721128,12.)); #57884=CARTESIAN_POINT('Ctrl Pts',(77.3213100591392,-108.574900721128,13.)); #57885=CARTESIAN_POINT('Ctrl Pts',(77.3213100591392,-108.574900721128,12.)); #57886=CARTESIAN_POINT('Ctrl Pts',(77.1458912834019,-108.495287575538,13.)); #57887=CARTESIAN_POINT('Ctrl Pts',(77.1458912834019,-108.495287575538,12.)); #57888=CARTESIAN_POINT('Ctrl Pts',(77.0177006841392,-108.367096847589,13.)); #57889=CARTESIAN_POINT('Ctrl Pts',(77.0177006841392,-108.367096847589,12.)); #57890=CARTESIAN_POINT('',(77.5156200025171,-108.574900721128,12.)); #57891=CARTESIAN_POINT('',(77.5156200025171,-108.574900721128,13.)); #57892=CARTESIAN_POINT('Ctrl Pts',(77.5156200025171,-108.574900721128,12.)); #57893=CARTESIAN_POINT('Ctrl Pts',(77.3213100591392,-108.574900721128,12.)); #57894=CARTESIAN_POINT('Ctrl Pts',(77.1458912834019,-108.495287575538,12.)); #57895=CARTESIAN_POINT('Ctrl Pts',(77.0177006841392,-108.367096847589,12.)); #57896=CARTESIAN_POINT('Origin',(91.6503231275172,-108.574900721128,13.)); #57897=CARTESIAN_POINT('',(91.6503231275172,-108.574900721128,12.)); #57898=CARTESIAN_POINT('',(91.6503231275172,-108.574900721128,13.)); #57899=CARTESIAN_POINT('',(77.5156200025171,-108.574900721128,12.)); #57900=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-108.367096847589,13.)); #57901=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-108.367096847589,12.)); #57902=CARTESIAN_POINT('Ctrl Pts',(92.0200515892596,-108.495287575538,13.)); #57903=CARTESIAN_POINT('Ctrl Pts',(92.0200515892596,-108.495287575538,12.)); #57904=CARTESIAN_POINT('Ctrl Pts',(91.8446334569544,-108.574900721128,13.)); #57905=CARTESIAN_POINT('Ctrl Pts',(91.8446334569544,-108.574900721128,12.)); #57906=CARTESIAN_POINT('Ctrl Pts',(91.6503231275172,-108.574900721128,13.)); #57907=CARTESIAN_POINT('Ctrl Pts',(91.6503231275172,-108.574900721128,12.)); #57908=CARTESIAN_POINT('',(92.1482428319544,-108.367096847589,12.)); #57909=CARTESIAN_POINT('',(92.1482428319544,-108.367096847589,13.)); #57910=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-108.367096847589,12.)); #57911=CARTESIAN_POINT('Ctrl Pts',(92.0200515892596,-108.495287575538,12.)); #57912=CARTESIAN_POINT('Ctrl Pts',(91.8446334569544,-108.574900721128,12.)); #57913=CARTESIAN_POINT('Ctrl Pts',(91.6503231275172,-108.574900721128,12.)); #57914=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-107.869177657898,13.)); #57915=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-107.869177657898,12.)); #57916=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-108.063487472589,13.)); #57917=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-108.063487472589,12.)); #57918=CARTESIAN_POINT('Ctrl Pts',(92.2764330451578,-108.23890611964,13.)); #57919=CARTESIAN_POINT('Ctrl Pts',(92.2764330451578,-108.23890611964,12.)); #57920=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-108.367096847589,13.)); #57921=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-108.367096847589,12.)); #57922=CARTESIAN_POINT('',(92.3560467054934,-107.869177657898,12.)); #57923=CARTESIAN_POINT('',(92.3560467054934,-107.869177657898,13.)); #57924=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-107.869177657898,12.)); #57925=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-108.063487472589,12.)); #57926=CARTESIAN_POINT('Ctrl Pts',(92.2764330451578,-108.23890611964,12.)); #57927=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-108.367096847589,12.)); #57928=CARTESIAN_POINT('Origin',(92.3560467054934,-102.289512110109,13.)); #57929=CARTESIAN_POINT('',(92.3560467054934,-102.289512110109,12.)); #57930=CARTESIAN_POINT('',(92.3560467054934,-102.289512110109,13.)); #57931=CARTESIAN_POINT('',(92.3560467054934,-107.869177657898,12.)); #57932=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-101.791592727388,13.)); #57933=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-101.791592727388,12.)); #57934=CARTESIAN_POINT('Ctrl Pts',(92.2764340746492,-101.919783390994,13.)); #57935=CARTESIAN_POINT('Ctrl Pts',(92.2764340746492,-101.919783390994,12.)); #57936=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-102.095202102388,13.)); #57937=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-102.095202102388,12.)); #57938=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-102.289512110109,13.)); #57939=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-102.289512110109,12.)); #57940=CARTESIAN_POINT('',(92.1482428319544,-101.791592727388,12.)); #57941=CARTESIAN_POINT('',(92.1482428319544,-101.791592727388,13.)); #57942=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-101.791592727388,12.)); #57943=CARTESIAN_POINT('Ctrl Pts',(92.2764340746492,-101.919783390994,12.)); #57944=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-102.095202102388,12.)); #57945=CARTESIAN_POINT('Ctrl Pts',(92.3560467054934,-102.289512110109,12.)); #57946=CARTESIAN_POINT('Ctrl Pts',(91.6503231275172,-101.583788982536,13.)); #57947=CARTESIAN_POINT('Ctrl Pts',(91.6503231275172,-101.583788982536,12.)); #57948=CARTESIAN_POINT('Ctrl Pts',(91.8446334569544,-101.583788982536,13.)); #57949=CARTESIAN_POINT('Ctrl Pts',(91.8446334569544,-101.583788982536,12.)); #57950=CARTESIAN_POINT('Ctrl Pts',(92.020052618751,-101.663402128126,13.)); #57951=CARTESIAN_POINT('Ctrl Pts',(92.020052618751,-101.663402128126,12.)); #57952=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-101.791592727388,13.)); #57953=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-101.791592727388,12.)); #57954=CARTESIAN_POINT('',(91.6503231275172,-101.583788982536,12.)); #57955=CARTESIAN_POINT('',(91.6503231275172,-101.583788982536,13.)); #57956=CARTESIAN_POINT('Ctrl Pts',(91.6503231275172,-101.583788982536,12.)); #57957=CARTESIAN_POINT('Ctrl Pts',(91.8446334569544,-101.583788982536,12.)); #57958=CARTESIAN_POINT('Ctrl Pts',(92.020052618751,-101.663402128126,12.)); #57959=CARTESIAN_POINT('Ctrl Pts',(92.1482428319544,-101.791592727388,12.)); #57960=CARTESIAN_POINT('Origin',(89.8637509157747,-101.583788982536,13.)); #57961=CARTESIAN_POINT('',(89.8637509157747,-101.583788982536,12.)); #57962=CARTESIAN_POINT('',(89.8637509157747,-101.583788982536,13.)); #57963=CARTESIAN_POINT('',(91.6503231275172,-101.583788982536,12.)); #57964=CARTESIAN_POINT('Ctrl Pts',(88.7383716304392,-101.585138291906,13.)); #57965=CARTESIAN_POINT('Ctrl Pts',(88.7383716304392,-101.585138291906,12.)); #57966=CARTESIAN_POINT('Ctrl Pts',(89.0514265892595,-101.585138291906,13.)); #57967=CARTESIAN_POINT('Ctrl Pts',(89.0514265892595,-101.585138291906,12.)); #57968=CARTESIAN_POINT('Ctrl Pts',(89.5506959569544,-101.585138291906,13.)); #57969=CARTESIAN_POINT('Ctrl Pts',(89.5506959569544,-101.585138291906,12.)); #57970=CARTESIAN_POINT('Ctrl Pts',(89.8637509157747,-101.583788982536,13.)); #57971=CARTESIAN_POINT('Ctrl Pts',(89.8637509157747,-101.583788982536,12.)); #57972=CARTESIAN_POINT('Ctrl Pts',(88.7383716304392,-101.585138291906,12.)); #57973=CARTESIAN_POINT('Ctrl Pts',(89.0514265892595,-101.585138291906,12.)); #57974=CARTESIAN_POINT('Ctrl Pts',(89.5506959569544,-101.585138291906,12.)); #57975=CARTESIAN_POINT('Ctrl Pts',(89.8637509157747,-101.583788982536,12.)); #57976=CARTESIAN_POINT('Origin',(84.5829718063042,-105.079344851832,12.)); #57977=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57978=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57979=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57980=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57981=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57982=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57983=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57984=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57985=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57986=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57987=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57988=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57989=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57990=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57991=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57992=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57993=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57994=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57995=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57996=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #57997=CARTESIAN_POINT('Origin',(101.309796589359,-94.9794594777285,10.)); #57998=CARTESIAN_POINT('',(102.016903370546,-90.2723526965419,9.29289321881346)); #57999=CARTESIAN_POINT('',(102.016903370546,-90.2723526965419,10.7071067811865)); #58000=CARTESIAN_POINT('Origin',(101.309796589359,-89.5652459153553,10.)); #58001=CARTESIAN_POINT('',(102.016903370546,-99.686566258915,10.7071067811865)); #58002=CARTESIAN_POINT('',(102.016903370546,-94.9794594777285,10.7071067811865)); #58003=CARTESIAN_POINT('',(102.016903370546,-99.686566258915,9.29289321881346)); #58004=CARTESIAN_POINT('Origin',(101.309796589359,-100.393673040102,10.)); #58005=CARTESIAN_POINT('',(102.016903370546,-94.9794594777285,9.29289321881346)); #58006=CARTESIAN_POINT('Origin',(101.724010151733,-89.9794594777285,9.)); #58007=CARTESIAN_POINT('',(103.390676818399,-98.3127928110618,10.6666666666667)); #58008=CARTESIAN_POINT('',(102.057343485066,-90.3127928110618,9.33333333333333)); #58009=CARTESIAN_POINT('Origin',(101.724010151733,-99.9794594777285,9.)); #58010=CARTESIAN_POINT('',(102.057343485066,-99.6461261443951,10.6666666666667)); #58011=CARTESIAN_POINT('',(101.724010151733,-99.9794594777285,10.)); #58012=CARTESIAN_POINT('Origin',(101.30979658936,-50.0655512937422,10.)); #58013=CARTESIAN_POINT('',(102.016903370546,-45.3584445125557,9.29289321881345)); #58014=CARTESIAN_POINT('',(102.016903370546,-45.3584445125557,10.7071067811865)); #58015=CARTESIAN_POINT('Origin',(101.30979658936,-44.6513377313691,10.)); #58016=CARTESIAN_POINT('',(102.016903370546,-54.7726580749288,10.7071067811865)); #58017=CARTESIAN_POINT('',(102.016903370546,-50.0655512937422,10.7071067811865)); #58018=CARTESIAN_POINT('',(102.016903370546,-54.7726580749288,9.29289321881346)); #58019=CARTESIAN_POINT('Origin',(101.30979658936,-55.4797648561153,10.)); #58020=CARTESIAN_POINT('',(102.016903370546,-50.0655512937422,9.29289321881345)); #58021=CARTESIAN_POINT('Origin',(101.724010151733,-45.0655512937422,9.)); #58022=CARTESIAN_POINT('',(103.390676818399,-53.3988846270756,10.6666666666667)); #58023=CARTESIAN_POINT('',(102.057343485066,-45.3988846270756,9.33333333333333)); #58024=CARTESIAN_POINT('Origin',(101.724010151733,-55.0655512937422,9.)); #58025=CARTESIAN_POINT('',(102.057343485066,-54.7322179604089,10.6666666666667)); #58026=CARTESIAN_POINT('',(101.724010151733,-55.0655512937422,10.)); #58027=CARTESIAN_POINT('Origin',(101.724010151733,-55.0655512937422,11.)); #58028=CARTESIAN_POINT('',(103.390676818399,-46.7322179604089,9.33333333333333)); #58029=CARTESIAN_POINT('Origin',(101.724010151733,-45.0655512937422,11.)); #58030=CARTESIAN_POINT('Origin',(101.724010151733,-42.4229236644913,11.)); #58031=CARTESIAN_POINT('',(101.724010151733,-89.9794594777285,11.)); #58032=CARTESIAN_POINT('Origin',(101.724010151733,-99.9794594777285,11.)); #58033=CARTESIAN_POINT('',(103.390676818399,-91.6461261443951,9.33333333333333)); #58034=CARTESIAN_POINT('Origin',(101.724010151733,-89.9794594777285,11.)); #58035=CARTESIAN_POINT('Origin',(101.724010151733,-42.4229236644913,11.)); #58036=CARTESIAN_POINT('',(101.724010151733,-114.222923664491,11.)); #58037=CARTESIAN_POINT('Origin',(33.1382237141057,-94.9169081409833,10.)); #58038=CARTESIAN_POINT('',(32.4311169329191,-99.6240149221699,9.29289321881345)); #58039=CARTESIAN_POINT('',(32.4311169329191,-99.6240149221699,10.7071067811865)); #58040=CARTESIAN_POINT('Origin',(33.1382237141057,-100.331121703356,10.)); #58041=CARTESIAN_POINT('',(32.4311169329191,-90.2098013597968,10.7071067811865)); #58042=CARTESIAN_POINT('',(32.4311169329191,-94.9169081409833,10.7071067811865)); #58043=CARTESIAN_POINT('',(32.4311169329191,-90.2098013597968,9.29289321881345)); #58044=CARTESIAN_POINT('Origin',(33.1382237141057,-89.5026945786102,10.)); #58045=CARTESIAN_POINT('',(32.4311169329191,-94.9169081409833,9.29289321881345)); #58046=CARTESIAN_POINT('Origin',(32.7240101517326,-99.9169081409833,9.)); #58047=CARTESIAN_POINT('',(31.0573434850659,-91.58357480765,10.6666666666667)); #58048=CARTESIAN_POINT('',(32.3906768183992,-99.58357480765,9.33333333333333)); #58049=CARTESIAN_POINT('Origin',(32.7240101517326,-89.9169081409833,9.)); #58050=CARTESIAN_POINT('',(32.3906768183992,-90.2502414743167,10.6666666666667)); #58051=CARTESIAN_POINT('',(32.7240101517326,-89.9169081409833,10.)); #58052=CARTESIAN_POINT('Origin',(33.1382237141057,-50.0493333077436,10.)); #58053=CARTESIAN_POINT('',(32.4311169329191,-54.7564400889302,9.29289321881345)); #58054=CARTESIAN_POINT('',(32.4311169329191,-54.7564400889302,10.7071067811865)); #58055=CARTESIAN_POINT('Origin',(33.1382237141057,-55.4635468701167,10.)); #58056=CARTESIAN_POINT('',(32.4311169329191,-45.3422265265571,10.7071067811865)); #58057=CARTESIAN_POINT('',(32.4311169329191,-50.0493333077436,10.7071067811865)); #58058=CARTESIAN_POINT('',(32.4311169329191,-45.3422265265571,9.29289321881345)); #58059=CARTESIAN_POINT('Origin',(33.1382237141057,-44.6351197453705,10.)); #58060=CARTESIAN_POINT('',(32.4311169329191,-50.0493333077436,9.29289321881345)); #58061=CARTESIAN_POINT('Origin',(32.7240101517326,-55.0493333077436,9.)); #58062=CARTESIAN_POINT('',(31.0573434850659,-46.7159999744103,10.6666666666667)); #58063=CARTESIAN_POINT('',(32.3906768183992,-54.7159999744103,9.33333333333333)); #58064=CARTESIAN_POINT('Origin',(32.7240101517326,-45.0493333077436,9.)); #58065=CARTESIAN_POINT('',(32.3906768183992,-45.382666641077,10.6666666666667)); #58066=CARTESIAN_POINT('Origin',(32.7240101517326,-89.9169081409833,11.)); #58067=CARTESIAN_POINT('',(31.0573434850659,-98.2502414743167,9.33333333333334)); #58068=CARTESIAN_POINT('Origin',(32.7240101517326,-99.9169081409833,11.)); #58069=CARTESIAN_POINT('',(32.7240101517326,-99.9169081409833,11.)); #58070=CARTESIAN_POINT('Origin',(32.7240101517326,-114.222923664491,11.)); #58071=CARTESIAN_POINT('',(32.7240101517326,-55.0493333077436,11.)); #58072=CARTESIAN_POINT('Origin',(32.7240101517326,-114.222923664491,11.)); #58073=CARTESIAN_POINT('',(32.7240101517326,-114.222923664491,11.)); #58074=CARTESIAN_POINT('Origin',(32.7240101517326,-45.0493333077436,11.)); #58075=CARTESIAN_POINT('',(31.0573434850659,-53.382666641077,9.33333333333334)); #58076=CARTESIAN_POINT('Origin',(32.7240101517326,-55.0493333077436,11.)); #58077=CARTESIAN_POINT('Origin',(99.7240101517326,-114.222923664491,11.)); #58078=CARTESIAN_POINT('Origin',(34.7240101517325,-114.222923664491,11.)); #58079=CARTESIAN_POINT('Origin',(34.7240101517325,-114.222923664491,11.)); #58080=CARTESIAN_POINT('',(34.7240101517326,-116.222923664491,11.)); #58081=CARTESIAN_POINT('Origin',(99.7240101517326,-116.222923664491,11.)); #58082=CARTESIAN_POINT('',(99.7240101517326,-116.222923664491,11.)); #58083=CARTESIAN_POINT('Origin',(99.7240101517326,-114.222923664491,11.)); #58084=CARTESIAN_POINT('Origin',(30.7240101517326,-38.4229236644913,-4.)); #58085=CARTESIAN_POINT('',(30.7240101517326,-116.222923664491,11.8)); #58086=CARTESIAN_POINT('',(30.7240101517326,-116.222923664491,-4.)); #58087=CARTESIAN_POINT('',(30.7240101517326,-40.4229236644913,11.8)); #58088=CARTESIAN_POINT('',(30.7240101517326,-58.3729236644913,11.8)); #58089=CARTESIAN_POINT('',(30.7240101517326,-40.4229236644913,-4.)); #58090=CARTESIAN_POINT('Origin',(32.7240101517326,-116.222923664491,-4.)); #58091=CARTESIAN_POINT('',(32.7240101517326,-118.222923664491,11.8)); #58092=CARTESIAN_POINT('',(32.7240101517326,-118.222923664491,-4.)); #58093=CARTESIAN_POINT('Origin',(32.7240101517326,-116.222923664491,11.8)); #58094=CARTESIAN_POINT('Origin',(30.7240101517326,-118.222923664491,-4.)); #58095=CARTESIAN_POINT('',(101.724010151733,-118.222923664491,11.8)); #58096=CARTESIAN_POINT('',(101.724010151733,-118.222923664491,-4.)); #58097=CARTESIAN_POINT('',(48.9740101517326,-118.222923664491,11.8)); #58098=CARTESIAN_POINT('Origin',(101.724010151733,-116.222923664491,-4.)); #58099=CARTESIAN_POINT('',(103.724010151733,-116.222923664491,11.8)); #58100=CARTESIAN_POINT('',(103.724010151733,-116.222923664491,-4.)); #58101=CARTESIAN_POINT('Origin',(101.724010151733,-116.222923664491,11.8)); #58102=CARTESIAN_POINT('Origin',(103.724010151733,-38.4229236644913,-4.)); #58103=CARTESIAN_POINT('',(32.7240101517326,-38.4229236644913,11.8)); #58104=CARTESIAN_POINT('',(32.7240101517326,-38.4229236644913,-4.)); #58105=CARTESIAN_POINT('',(101.724010151733,-38.4229236644913,11.8)); #58106=CARTESIAN_POINT('',(85.4740101517326,-38.4229236644913,11.8)); #58107=CARTESIAN_POINT('',(101.724010151733,-38.4229236644913,-4.)); #58108=CARTESIAN_POINT('Origin',(32.7240101517326,-40.4229236644913,-4.)); #58109=CARTESIAN_POINT('Origin',(32.7240101517326,-40.4229236644913,11.8)); #58110=CARTESIAN_POINT('Origin',(32.7240101517326,-116.222923664491,12.4)); #58111=CARTESIAN_POINT('',(31.9240101517326,-116.222923664491,13.)); #58112=CARTESIAN_POINT('',(32.7240101517326,-118.222923664491,11.8)); #58113=CARTESIAN_POINT('Origin',(31.3240101517326,-58.3729236644913,12.4)); #58114=CARTESIAN_POINT('',(31.9240101517326,-40.4229236644913,13.)); #58115=CARTESIAN_POINT('Origin',(32.7240101517326,-40.4229236644913,12.4)); #58116=CARTESIAN_POINT('',(32.7240101517326,-39.6229236644913,13.)); #58117=CARTESIAN_POINT('Origin',(85.4740101517326,-39.0229236644913,12.4)); #58118=CARTESIAN_POINT('',(101.724010151733,-39.6229236644913,13.)); #58119=CARTESIAN_POINT('Origin',(101.724010151733,-40.4229236644913,12.4)); #58120=CARTESIAN_POINT('',(103.724010151733,-40.4229236644913,11.8)); #58121=CARTESIAN_POINT('',(102.524010151733,-40.4229236644913,13.)); #58122=CARTESIAN_POINT('Origin',(101.724010151733,-40.4229236644913,11.8)); #58123=CARTESIAN_POINT('Origin',(103.124010151733,-98.2729236644914,12.4)); #58124=CARTESIAN_POINT('',(102.524010151733,-116.222923664491,13.)); #58125=CARTESIAN_POINT('',(103.724010151733,-98.2729236644914,11.8)); #58126=CARTESIAN_POINT('Origin',(101.724010151733,-116.222923664491,12.4)); #58127=CARTESIAN_POINT('',(101.724010151733,-117.022923664491,13.)); #58128=CARTESIAN_POINT('Origin',(48.9740101517326,-117.622923664491,12.4)); #58129=CARTESIAN_POINT('Origin',(103.724010151733,-118.222923664491,-4.)); #58130=CARTESIAN_POINT('',(103.724010151733,-40.4229236644913,-4.)); #58131=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,13.)); #58132=CARTESIAN_POINT('Origin',(101.724010151733,-40.4229236644913,-4.)); #58133=CARTESIAN_POINT('',(0.,0.,0.)); #58134=CARTESIAN_POINT('Origin',(101.109177587524,-83.0000012367964,2.34396461288969)); #58135=CARTESIAN_POINT('',(100.684177587524,-82.3996536259387,3.08008620610647)); #58136=CARTESIAN_POINT('',(100.889181399187,-82.5180126317871,1.52292766054398)); #58137=CARTESIAN_POINT('Origin',(101.109177587524,-82.6450274903443,2.34396461288969)); #58138=CARTESIAN_POINT('',(100.684177587524,-74.3140563737654,3.08008620610647)); #58139=CARTESIAN_POINT('',(100.684177587524,-83.0000012367964,3.08008620610647)); #58140=CARTESIAN_POINT('',(100.889181399187,-74.1956973679169,1.52292766054398)); #58141=CARTESIAN_POINT('Origin',(101.109177587524,-74.0686825093598,2.34396461288969)); #58142=CARTESIAN_POINT('',(100.889181399187,-83.0000012367964,1.52292766054398)); #58143=CARTESIAN_POINT('Origin',(101.724010151733,-83.0000012367964,3.68043381696418)); #58144=CARTESIAN_POINT('',(101.724010151733,-83.0000012367964,3.68043381696418)); #58145=CARTESIAN_POINT('',(101.204394909462,-82.7000012367964,3.38043381696418)); #58146=CARTESIAN_POINT('',(101.724010151733,-73.7137087629077,3.68043381696418)); #58147=CARTESIAN_POINT('',(101.724010151733,-100.611462450644,3.68043381696417)); #58148=CARTESIAN_POINT('',(100.115577113861,-74.6423380102965,2.75180456957531)); #58149=CARTESIAN_POINT('Origin',(101.724010151733,-73.7137087629077,3.68043381696418)); #58150=CARTESIAN_POINT('',(101.724010151733,-73.7137087629077,1.29923597048119)); #58151=CARTESIAN_POINT('',(101.724010151733,-73.7137087629077,-0.159783091517908)); #58152=CARTESIAN_POINT('',(101.584960517538,-73.7939891066405,1.33649420767141)); #58153=CARTESIAN_POINT('Origin',(101.954720295033,-73.7137087629077,1.23741737389807)); #58154=CARTESIAN_POINT('',(101.724010151733,-83.0000012367964,1.29923597048119)); #58155=CARTESIAN_POINT('',(101.724010151733,-95.9683162136995,1.2992359704812)); #58156=CARTESIAN_POINT('',(99.9631904507089,-81.983391508416,1.77104618738729)); #58157=CARTESIAN_POINT('Origin',(101.724010151733,-83.0000012367964,0.680433816964183)); #58158=CARTESIAN_POINT('',(101.724010151733,-83.0000012367964,-1.65978309151791)); #58159=CARTESIAN_POINT('Origin',(33.3388427159407,-83.0000012367964,2.34396461288969)); #58160=CARTESIAN_POINT('',(33.7638427159407,-82.3996536259387,3.08008620610647)); #58161=CARTESIAN_POINT('',(33.5588389042779,-82.5180126317871,1.52292766054398)); #58162=CARTESIAN_POINT('Origin',(33.3388427159407,-82.6450274903443,2.34396461288969)); #58163=CARTESIAN_POINT('',(33.5588389042779,-74.1956973679169,1.52292766054398)); #58164=CARTESIAN_POINT('',(33.5588389042779,-83.0000012367964,1.52292766054398)); #58165=CARTESIAN_POINT('',(33.7638427159407,-74.3140563737654,3.08008620610647)); #58166=CARTESIAN_POINT('Origin',(33.3388427159407,-74.0686825093598,2.34396461288969)); #58167=CARTESIAN_POINT('',(33.7638427159407,-83.0000012367964,3.08008620610647)); #58168=CARTESIAN_POINT('Origin',(32.7240101517326,-83.0000012367964,3.68043381696418)); #58169=CARTESIAN_POINT('',(32.7240101517326,-73.7137087629077,3.68043381696418)); #58170=CARTESIAN_POINT('',(34.3324431896045,-74.6423380102965,2.75180456957531)); #58171=CARTESIAN_POINT('',(32.7240101517326,-83.0000012367964,3.68043381696418)); #58172=CARTESIAN_POINT('',(32.7240101517326,-60.7114624506439,3.68043381696418)); #58173=CARTESIAN_POINT('',(33.2436253940032,-82.7000012367964,3.38043381696418)); #58174=CARTESIAN_POINT('Origin',(32.7240101517326,-73.7137087629077,3.68043381696418)); #58175=CARTESIAN_POINT('',(32.7240101517326,-73.7137087629077,1.29923597048119)); #58176=CARTESIAN_POINT('',(32.8630597859269,-73.7939891066405,1.33649420767141)); #58177=CARTESIAN_POINT('',(32.7240101517326,-73.7137087629077,-0.159783091517908)); #58178=CARTESIAN_POINT('Origin',(32.4933000084317,-73.7137087629077,1.23741737389807)); #58179=CARTESIAN_POINT('',(32.7240101517326,-83.0000012367964,1.29923597048119)); #58180=CARTESIAN_POINT('',(34.4848298527562,-81.983391508416,1.77104618738729)); #58181=CARTESIAN_POINT('',(32.7240101517326,-56.0683162136995,1.29923597048119)); #58182=CARTESIAN_POINT('Origin',(32.7240101517326,-83.0000012367964,0.680433816964183)); #58183=CARTESIAN_POINT('',(32.7240101517326,-83.0000012367964,-1.65978309151791)); #58184=CARTESIAN_POINT('Origin',(37.8512706290915,-111.520961567567,1.7)); #58185=CARTESIAN_POINT('',(36.9512706290915,-111.520961567567,2.)); #58186=CARTESIAN_POINT('Origin',(37.8512706290915,-111.520961567567,2.)); #58187=CARTESIAN_POINT('',(36.6512706290915,-111.520961567567,1.7)); #58188=CARTESIAN_POINT('Origin',(36.9512706290915,-111.520961567567,1.7)); #58189=CARTESIAN_POINT('Origin',(37.8512706290915,-111.520961567567,1.7)); #58190=CARTESIAN_POINT('Origin',(37.8512706290915,-111.520961567567,0.)); #58191=CARTESIAN_POINT('',(36.6512706290915,-111.520961567567,0.)); #58192=CARTESIAN_POINT('',(36.6512706290915,-111.520961567567,0.)); #58193=CARTESIAN_POINT('Origin',(37.8512706290915,-111.520961567567,0.)); #58194=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,2.)); #58195=CARTESIAN_POINT('Origin',(96.7725146091896,-111.50761392645,1.7)); #58196=CARTESIAN_POINT('',(95.8725146091896,-111.50761392645,2.)); #58197=CARTESIAN_POINT('Origin',(96.7725146091896,-111.50761392645,2.)); #58198=CARTESIAN_POINT('',(95.5725146091896,-111.50761392645,1.7)); #58199=CARTESIAN_POINT('Origin',(95.8725146091896,-111.50761392645,1.7)); #58200=CARTESIAN_POINT('Origin',(96.7725146091896,-111.50761392645,1.7)); #58201=CARTESIAN_POINT('Origin',(96.7725146091896,-111.50761392645,0.)); #58202=CARTESIAN_POINT('',(95.5725146091896,-111.50761392645,0.)); #58203=CARTESIAN_POINT('',(95.5725146091896,-111.50761392645,0.)); #58204=CARTESIAN_POINT('Origin',(96.7725146091896,-111.50761392645,0.)); #58205=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,2.)); #58206=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,1.7)); #58207=CARTESIAN_POINT('',(66.3999984957278,-45.1999989897013,2.)); #58208=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,2.)); #58209=CARTESIAN_POINT('',(66.0999984957278,-45.1999989897013,1.7)); #58210=CARTESIAN_POINT('Origin',(66.3999984957278,-45.1999989897013,1.7)); #58211=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,1.7)); #58212=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,0.)); #58213=CARTESIAN_POINT('',(66.0999984957278,-45.1999989897013,0.)); #58214=CARTESIAN_POINT('',(66.0999984957278,-45.1999989897013,0.)); #58215=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,0.)); #58216=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,2.)); #58217=CARTESIAN_POINT('Origin',(101.724010151733,-78.3229236644914,10.5)); #58218=CARTESIAN_POINT('',(101.724010151733,-81.8229236644913,10.9715728752538)); #58219=CARTESIAN_POINT('',(101.724010151733,-74.8229236644913,10.9715728752538)); #58220=CARTESIAN_POINT('',(101.724010151733,-108.247923664491,10.9715728752538)); #58221=CARTESIAN_POINT('',(101.724010151733,-74.8229236644913,11.)); #58222=CARTESIAN_POINT('',(101.724010151733,-74.8229236644913,11.)); #58223=CARTESIAN_POINT('',(101.724010151733,-81.8229236644913,11.)); #58224=CARTESIAN_POINT('',(101.724010151733,-78.3229236644913,11.)); #58225=CARTESIAN_POINT('',(101.724010151733,-81.8229236644913,10.)); #58226=CARTESIAN_POINT('Origin',(103.724010151733,-74.8229236644913,11.)); #58227=CARTESIAN_POINT('',(103.724010151733,-74.8229236644913,11.)); #58228=CARTESIAN_POINT('',(103.724010151733,-74.8229236644913,10.)); #58229=CARTESIAN_POINT('',(103.724010151733,-74.8229236644914,3.5)); #58230=CARTESIAN_POINT('',(85.4740101517326,-74.8229236644914,11.)); #58231=CARTESIAN_POINT('',(101.724010151733,-74.8229236644913,10.)); #58232=CARTESIAN_POINT('',(101.724010151733,-74.8229236644914,3.5)); #58233=CARTESIAN_POINT('',(103.724010151733,-74.8229236644913,10.)); #58234=CARTESIAN_POINT('Origin',(103.724010151733,-81.8229236644913,10.)); #58235=CARTESIAN_POINT('',(103.724010151733,-81.8229236644913,10.)); #58236=CARTESIAN_POINT('',(103.724010151733,-81.8229236644913,11.)); #58237=CARTESIAN_POINT('',(103.724010151733,-81.8229236644913,3.)); #58238=CARTESIAN_POINT('',(101.724010151733,-81.8229236644913,10.)); #58239=CARTESIAN_POINT('',(103.724010151733,-81.8229236644913,10.)); #58240=CARTESIAN_POINT('',(101.724010151733,-81.8229236644913,3.)); #58241=CARTESIAN_POINT('',(85.4740101517326,-81.8229236644913,11.)); #58242=CARTESIAN_POINT('Origin',(103.724010151733,-74.8229236644913,10.)); #58243=CARTESIAN_POINT('',(103.724010151733,-96.5229236644913,10.)); #58244=CARTESIAN_POINT('',(101.724010151733,-96.5229236644913,10.)); #58245=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,11.)); #58246=CARTESIAN_POINT('',(103.724010151733,-40.4229236644913,11.)); #58247=CARTESIAN_POINT('',(103.724010151733,-98.2729236644914,11.)); #58248=CARTESIAN_POINT('',(101.724010151733,-38.4229236644913,11.)); #58249=CARTESIAN_POINT('Origin',(101.724010151733,-40.4229236644913,11.)); #58250=CARTESIAN_POINT('',(32.7240101517326,-38.4229236644913,11.)); #58251=CARTESIAN_POINT('',(85.4740101517326,-38.4229236644913,11.)); #58252=CARTESIAN_POINT('',(30.7240101517326,-40.4229236644913,11.)); #58253=CARTESIAN_POINT('Origin',(32.7240101517326,-40.4229236644913,11.)); #58254=CARTESIAN_POINT('',(30.7240101517326,-116.222923664491,11.)); #58255=CARTESIAN_POINT('',(30.7240101517326,-58.3729236644913,11.)); #58256=CARTESIAN_POINT('',(32.7240101517326,-118.222923664491,11.)); #58257=CARTESIAN_POINT('Origin',(32.7240101517326,-116.222923664491,11.)); #58258=CARTESIAN_POINT('',(101.724010151733,-118.222923664491,11.)); #58259=CARTESIAN_POINT('',(48.9740101517326,-118.222923664491,11.)); #58260=CARTESIAN_POINT('',(103.724010151733,-116.222923664491,11.)); #58261=CARTESIAN_POINT('Origin',(101.724010151733,-116.222923664491,11.)); #58262=CARTESIAN_POINT('',(103.724010151733,-98.2729236644914,11.)); #58263=CARTESIAN_POINT('',(32.7524372764788,-40.4513507892375,11.)); #58264=CARTESIAN_POINT('',(101.695583026986,-40.4513507892375,11.)); #58265=CARTESIAN_POINT('',(76.3490101517326,-40.4513507892375,11.)); #58266=CARTESIAN_POINT('',(101.695583026986,-116.194496539745,11.)); #58267=CARTESIAN_POINT('',(101.695583026986,-88.2979236644913,11.)); #58268=CARTESIAN_POINT('',(32.7524372764788,-116.194496539745,11.)); #58269=CARTESIAN_POINT('',(58.0990101517326,-116.194496539745,11.)); #58270=CARTESIAN_POINT('',(32.7524372764788,-68.3479236644913,11.)); #58271=CARTESIAN_POINT('Origin',(75.0989689457197,-39.2229236644913,-0.811507102023735)); #58272=CARTESIAN_POINT('',(46.4739277397068,-38.4229236644913,-0.811507102023735)); #58273=CARTESIAN_POINT('',(46.4739277397068,-39.2229236644913,-0.0115071020237345)); #58274=CARTESIAN_POINT('Origin',(46.4739277397068,-39.2229236644913,-0.811507102023735)); #58275=CARTESIAN_POINT('',(51.2739277397068,-39.2229236644913,-0.0115071020237345)); #58276=CARTESIAN_POINT('',(75.0989689457197,-39.2229236644913,-0.0115071020237345)); #58277=CARTESIAN_POINT('',(51.2739277397068,-38.4229236644913,-0.811507102023735)); #58278=CARTESIAN_POINT('Origin',(51.2739277397068,-39.2229236644913,-0.811507102023735)); #58279=CARTESIAN_POINT('',(75.0989689457197,-38.4229236644913,-0.811507102023735)); #58280=CARTESIAN_POINT('Origin',(51.2739277397068,-39.2229236644913,3.98849289797627)); #58281=CARTESIAN_POINT('',(51.2739277397068,-39.2229236644913,7.98849289797627)); #58282=CARTESIAN_POINT('',(51.2739277397068,-38.4229236644913,8.78849289797627)); #58283=CARTESIAN_POINT('Origin',(51.2739277397068,-39.2229236644913,8.78849289797627)); #58284=CARTESIAN_POINT('Origin',(51.2739277397068,-38.4229236644913,3.98849289797627)); #58285=CARTESIAN_POINT('Origin',(51.2739277397068,-39.2229236644913,3.98849289797627)); #58286=CARTESIAN_POINT('Origin',(77.4989689457197,-39.2229236644913,8.78849289797627)); #58287=CARTESIAN_POINT('',(46.4739277397068,-39.2229236644913,7.98849289797627)); #58288=CARTESIAN_POINT('',(46.4739277397068,-38.4229236644913,8.78849289797627)); #58289=CARTESIAN_POINT('Origin',(46.4739277397068,-39.2229236644913,8.78849289797627)); #58290=CARTESIAN_POINT('',(77.4989689457197,-38.4229236644913,8.78849289797627)); #58291=CARTESIAN_POINT('',(77.4989689457197,-39.2229236644913,7.98849289797627)); #58292=CARTESIAN_POINT('Origin',(46.4739277397068,-39.2229236644913,3.98849289797627)); #58293=CARTESIAN_POINT('Origin',(46.4739277397068,-38.4229236644913,3.98849289797627)); #58294=CARTESIAN_POINT('Origin',(46.4739277397068,-39.2229236644913,3.98849289797627)); #58295=CARTESIAN_POINT('Origin',(51.2739277397068,-38.4229236644913,3.98849289797627)); #58296=CARTESIAN_POINT('',(51.2739277397068,-40.4229236644913,-0.0115071020237345)); #58297=CARTESIAN_POINT('',(51.2739277397068,-38.4229236644913,-0.0115071020237345)); #58298=CARTESIAN_POINT('',(51.5771181135528,-40.4229236644913,0.)); #58299=CARTESIAN_POINT('Origin',(51.2739277397068,-40.4229236644913,3.98849289797627)); #58300=CARTESIAN_POINT('',(51.2739277397068,-40.4229236644913,7.98849289797627)); #58301=CARTESIAN_POINT('Origin',(51.2739277397068,-40.4229236644913,3.98849289797627)); #58302=CARTESIAN_POINT('',(51.2739277397068,-38.4229236644913,7.98849289797627)); #58303=CARTESIAN_POINT('Origin',(46.4739277397068,-38.4229236644913,-0.0115071020237345)); #58304=CARTESIAN_POINT('',(46.4739277397068,-40.4229236644913,-0.0115071020237345)); #58305=CARTESIAN_POINT('',(46.4739277397068,-38.4229236644913,-0.0115071020237345)); #58306=CARTESIAN_POINT('',(51.2739277397068,-40.4229236644913,-0.0115071020237345)); #58307=CARTESIAN_POINT('Origin',(103.724010151733,-38.4229236644913,-4.)); #58308=CARTESIAN_POINT('',(101.724010151733,-38.4229236644913,-2.8)); #58309=CARTESIAN_POINT('',(101.724010151733,-38.4229236644913,-4.)); #58310=CARTESIAN_POINT('',(32.7240101517326,-38.4229236644913,-2.8)); #58311=CARTESIAN_POINT('',(85.4740101517326,-38.4229236644913,-2.8)); #58312=CARTESIAN_POINT('',(32.7240101517326,-38.4229236644913,-4.)); #58313=CARTESIAN_POINT('',(87.7462416798332,-38.4229236644913,8.80318459850526)); #58314=CARTESIAN_POINT('',(87.7462416798332,-38.4229236644913,-0.796815401494735)); #58315=CARTESIAN_POINT('Origin',(87.7462416798332,-38.4229236644913,4.00318459850526)); #58316=CARTESIAN_POINT('',(82.9462416798332,-38.4229236644913,8.80318459850526)); #58317=CARTESIAN_POINT('',(95.7351259157829,-38.4229236644913,8.80318459850526)); #58318=CARTESIAN_POINT('',(82.9462416798332,-38.4229236644913,-0.796815401494735)); #58319=CARTESIAN_POINT('Origin',(82.9462416798332,-38.4229236644913,4.00318459850526)); #58320=CARTESIAN_POINT('',(93.3351259157829,-38.4229236644913,-0.796815401494736)); #58321=CARTESIAN_POINT('Origin',(87.7462416798332,-39.2229236644913,4.00318459850526)); #58322=CARTESIAN_POINT('',(87.7462416798332,-39.2229236644913,0.00318459850526456)); #58323=CARTESIAN_POINT('Origin',(87.7462416798332,-39.2229236644913,-0.796815401494735)); #58324=CARTESIAN_POINT('',(87.7462416798332,-39.2229236644913,8.00318459850526)); #58325=CARTESIAN_POINT('Origin',(87.7462416798332,-39.2229236644913,4.00318459850526)); #58326=CARTESIAN_POINT('Origin',(87.7462416798332,-39.2229236644913,8.80318459850526)); #58327=CARTESIAN_POINT('Origin',(95.7351259157829,-39.2229236644913,8.80318459850526)); #58328=CARTESIAN_POINT('',(82.9462416798332,-39.2229236644913,8.00318459850526)); #58329=CARTESIAN_POINT('Origin',(82.9462416798332,-39.2229236644913,8.80318459850526)); #58330=CARTESIAN_POINT('',(95.7351259157829,-39.2229236644913,8.00318459850526)); #58331=CARTESIAN_POINT('Origin',(82.9462416798332,-39.2229236644913,4.00318459850526)); #58332=CARTESIAN_POINT('',(82.9462416798332,-39.2229236644913,0.00318459850526476)); #58333=CARTESIAN_POINT('Origin',(82.9462416798332,-39.2229236644913,-0.796815401494735)); #58334=CARTESIAN_POINT('Origin',(82.9462416798332,-39.2229236644913,4.00318459850526)); #58335=CARTESIAN_POINT('Origin',(93.3351259157829,-39.2229236644913,-0.796815401494736)); #58336=CARTESIAN_POINT('',(93.3351259157829,-39.2229236644913,0.00318459850526434)); #58337=CARTESIAN_POINT('Origin',(87.7462416798332,-38.4229236644913,8.00318459850526)); #58338=CARTESIAN_POINT('',(87.7462416798332,-40.4229236644913,8.00318459850526)); #58339=CARTESIAN_POINT('',(87.7462416798332,-38.4229236644913,8.00318459850526)); #58340=CARTESIAN_POINT('',(82.9462416798332,-40.4229236644913,8.00318459850526)); #58341=CARTESIAN_POINT('',(95.7351259157829,-40.4229236644913,8.00318459850526)); #58342=CARTESIAN_POINT('',(82.9462416798332,-38.4229236644913,8.00318459850526)); #58343=CARTESIAN_POINT('Origin',(87.7462416798332,-38.4229236644913,4.00318459850526)); #58344=CARTESIAN_POINT('',(87.7462416798332,-40.4229236644913,0.00318459850526456)); #58345=CARTESIAN_POINT('',(87.7462416798332,-38.4229236644913,0.00318459850526456)); #58346=CARTESIAN_POINT('Origin',(87.7462416798332,-40.4229236644913,4.00318459850526)); #58347=CARTESIAN_POINT('Origin',(91.7486074551267,-117.822923664491,2.3220530065369)); #58348=CARTESIAN_POINT('',(92.1486074551267,-118.222923664491,2.2041060130738)); #58349=CARTESIAN_POINT('',(92.1486074551267,-118.222923664491,9.4441060130738)); #58350=CARTESIAN_POINT('',(92.1486074551267,-118.222923664491,2.3220530065369)); #58351=CARTESIAN_POINT('',(91.3486074551267,-117.422923664491,8.6441060130738)); #58352=CARTESIAN_POINT('',(92.1486074551267,-118.222923664491,9.4441060130738)); #58353=CARTESIAN_POINT('',(91.3486074551267,-117.422923664491,3.0041060130738)); #58354=CARTESIAN_POINT('',(91.3486074551267,-117.422923664491,2.3220530065369)); #58355=CARTESIAN_POINT('',(91.3486074551267,-117.422923664491,3.0041060130738)); #58356=CARTESIAN_POINT('Origin',(54.3363088034296,-117.822923664491,9.0441060130738)); #58357=CARTESIAN_POINT('',(77.1486074551267,-118.222923664491,9.4441060130738)); #58358=CARTESIAN_POINT('',(54.3363088034296,-118.222923664491,9.4441060130738)); #58359=CARTESIAN_POINT('',(77.9486074551267,-117.422923664491,8.6441060130738)); #58360=CARTESIAN_POINT('',(77.1486074551267,-118.222923664491,9.4441060130738)); #58361=CARTESIAN_POINT('',(54.3363088034296,-117.422923664491,8.6441060130738)); #58362=CARTESIAN_POINT('Origin',(77.5486074551267,-117.822923664491,-0.4979469934631)); #58363=CARTESIAN_POINT('',(77.1486074551267,-118.222923664491,2.2041060130738)); #58364=CARTESIAN_POINT('',(77.1486074551267,-118.222923664491,-0.4979469934631)); #58365=CARTESIAN_POINT('',(77.9486074551267,-117.422923664491,3.0041060130738)); #58366=CARTESIAN_POINT('',(77.1486074551267,-118.222923664491,2.2041060130738)); #58367=CARTESIAN_POINT('',(77.9486074551267,-117.422923664491,-0.4979469934631)); #58368=CARTESIAN_POINT('Origin',(61.0363088034296,-117.822923664491,2.6041060130738)); #58369=CARTESIAN_POINT('',(61.0363088034296,-117.422923664491,3.0041060130738)); #58370=CARTESIAN_POINT('',(61.0363088034296,-118.222923664491,2.2041060130738)); #58371=CARTESIAN_POINT('Origin',(91.3486074551267,-118.222923664491,3.0041060130738)); #58372=CARTESIAN_POINT('',(91.3486074551267,-116.222923664491,3.0041060130738)); #58373=CARTESIAN_POINT('',(91.3486074551267,-118.222923664491,3.0041060130738)); #58374=CARTESIAN_POINT('',(77.9486074551267,-116.222923664491,3.0041060130738)); #58375=CARTESIAN_POINT('',(61.0363088034296,-116.222923664491,3.0041060130738)); #58376=CARTESIAN_POINT('',(77.9486074551267,-118.222923664491,3.0041060130738)); #58377=CARTESIAN_POINT('Origin',(91.3486074551267,-118.222923664491,8.6441060130738)); #58378=CARTESIAN_POINT('',(91.3486074551267,-116.222923664491,8.6441060130738)); #58379=CARTESIAN_POINT('',(91.3486074551267,-118.222923664491,8.6441060130738)); #58380=CARTESIAN_POINT('',(91.3486074551267,-116.222923664491,2.3220530065369)); #58381=CARTESIAN_POINT('Origin',(30.7240101517326,-118.222923664491,-4.)); #58382=CARTESIAN_POINT('',(32.7240101517326,-118.222923664491,-2.8)); #58383=CARTESIAN_POINT('',(32.7240101517326,-118.222923664491,-4.)); #58384=CARTESIAN_POINT('',(101.724010151733,-118.222923664491,-2.8)); #58385=CARTESIAN_POINT('',(48.9740101517326,-118.222923664491,-2.8)); #58386=CARTESIAN_POINT('',(101.724010151733,-118.222923664491,-4.)); #58387=CARTESIAN_POINT('',(56.800000834465,-118.222923664491,9.4441060130738)); #58388=CARTESIAN_POINT('',(41.7999960645805,-118.222923664491,9.4441060130738)); #58389=CARTESIAN_POINT('',(36.6620031081565,-118.222923664491,9.4441060130738)); #58390=CARTESIAN_POINT('',(56.800000834465,-118.222923664491,2.20000004470348)); #58391=CARTESIAN_POINT('',(56.800000834465,-118.222923664491,2.3220530065369)); #58392=CARTESIAN_POINT('',(41.7999960645805,-118.222923664491,2.20000004470348)); #58393=CARTESIAN_POINT('',(43.3620054930988,-118.222923664491,2.20000004470348)); #58394=CARTESIAN_POINT('',(41.7999960645805,-118.222923664491,-0.499999977648258)); #58395=CARTESIAN_POINT('Origin',(36.6620031081565,-117.822923664491,9.0441060130738)); #58396=CARTESIAN_POINT('',(42.5999960645805,-117.422923664491,8.6441060130738)); #58397=CARTESIAN_POINT('',(41.7999960645805,-118.222923664491,9.4441060130738)); #58398=CARTESIAN_POINT('',(56.000000834465,-117.422923664491,8.6441060130738)); #58399=CARTESIAN_POINT('',(36.6620031081565,-117.422923664491,8.6441060130738)); #58400=CARTESIAN_POINT('',(56.800000834465,-118.222923664491,9.4441060130738)); #58401=CARTESIAN_POINT('Origin',(42.1999960645805,-117.822923664491,-0.499999977648258)); #58402=CARTESIAN_POINT('',(42.5999960645805,-117.422923664491,3.00000004470348)); #58403=CARTESIAN_POINT('',(41.7999960645805,-118.222923664491,2.20000004470348)); #58404=CARTESIAN_POINT('',(42.5999960645805,-117.422923664491,-0.499999977648258)); #58405=CARTESIAN_POINT('Origin',(56.400000834465,-117.822923664491,2.3220530065369)); #58406=CARTESIAN_POINT('',(56.000000834465,-117.422923664491,3.00000004470348)); #58407=CARTESIAN_POINT('',(56.000000834465,-117.422923664491,2.3220530065369)); #58408=CARTESIAN_POINT('',(56.000000834465,-117.422923664491,3.00000004470348)); #58409=CARTESIAN_POINT('Origin',(43.3620054930988,-117.822923664491,2.60000004470348)); #58410=CARTESIAN_POINT('',(43.3620054930988,-117.422923664491,3.00000004470348)); #58411=CARTESIAN_POINT('Origin',(56.000000834465,-118.222923664491,8.6441060130738)); #58412=CARTESIAN_POINT('',(56.000000834465,-116.222923664491,8.6441060130738)); #58413=CARTESIAN_POINT('',(56.000000834465,-118.222923664491,8.6441060130738)); #58414=CARTESIAN_POINT('',(56.000000834465,-116.222923664491,3.00000004470348)); #58415=CARTESIAN_POINT('',(56.000000834465,-116.222923664491,2.3220530065369)); #58416=CARTESIAN_POINT('',(56.000000834465,-118.222923664491,3.00000004470348)); #58417=CARTESIAN_POINT('Origin',(42.5999960645805,-118.222923664491,8.6441060130738)); #58418=CARTESIAN_POINT('',(42.5999960645805,-116.222923664491,8.6441060130738)); #58419=CARTESIAN_POINT('',(42.5999960645805,-118.222923664491,8.6441060130738)); #58420=CARTESIAN_POINT('',(36.6620031081565,-116.222923664491,8.6441060130738)); #58421=CARTESIAN_POINT('Origin',(48.8739277397068,-40.4229236644913,3.98849289797627)); #58422=CARTESIAN_POINT('',(46.1707373658608,-40.4229236644913,0.)); #58423=CARTESIAN_POINT('',(85.4740101517326,-40.4229236644913,0.)); #58424=CARTESIAN_POINT('Origin',(46.4739277397068,-40.4229236644913,3.98849289797627)); #58425=CARTESIAN_POINT('Origin',(51.2739277397068,-38.4229236644913,7.98849289797627)); #58426=CARTESIAN_POINT('',(46.4739277397068,-40.4229236644913,7.98849289797627)); #58427=CARTESIAN_POINT('',(77.4989689457197,-40.4229236644913,7.98849289797627)); #58428=CARTESIAN_POINT('',(46.4739277397068,-38.4229236644913,7.98849289797627)); #58429=CARTESIAN_POINT('Origin',(46.4739277397068,-38.4229236644913,3.98849289797627)); #58430=CARTESIAN_POINT('Origin',(46.4739277397068,-40.4229236644913,3.98849289797627)); #58431=CARTESIAN_POINT('Origin',(82.9462416798332,-38.4229236644913,0.00318459850526467)); #58432=CARTESIAN_POINT('',(82.9462416798332,-40.4229236644913,0.00318459850526476)); #58433=CARTESIAN_POINT('',(82.9462416798332,-38.4229236644913,0.00318459850526476)); #58434=CARTESIAN_POINT('',(93.3351259157829,-40.4229236644913,0.00318459850526448)); #58435=CARTESIAN_POINT('Origin',(82.9462416798332,-38.4229236644913,4.00318459850526)); #58436=CARTESIAN_POINT('Origin',(82.9462416798332,-40.4229236644913,4.00318459850526)); #58437=CARTESIAN_POINT('Origin',(42.5999960645805,-118.222923664491,3.00000004470348)); #58438=CARTESIAN_POINT('',(42.5999960645805,-116.222923664491,3.00000004470348)); #58439=CARTESIAN_POINT('',(42.5999960645805,-118.222923664491,3.00000004470348)); #58440=CARTESIAN_POINT('',(42.5999960645805,-116.222923664491,-0.499999977648258)); #58441=CARTESIAN_POINT('Origin',(56.000000834465,-118.222923664491,3.00000004470348)); #58442=CARTESIAN_POINT('',(43.3620054930988,-116.222923664491,3.00000004470348)); #58443=CARTESIAN_POINT('Origin',(77.9486074551267,-118.222923664491,8.6441060130738)); #58444=CARTESIAN_POINT('',(77.9486074551267,-116.222923664491,8.6441060130738)); #58445=CARTESIAN_POINT('',(77.9486074551267,-118.222923664491,8.6441060130738)); #58446=CARTESIAN_POINT('',(54.3363088034296,-116.222923664491,8.6441060130738)); #58447=CARTESIAN_POINT('Origin',(77.9486074551267,-118.222923664491,3.0041060130738)); #58448=CARTESIAN_POINT('',(77.9486074551267,-116.222923664491,-0.4979469934631)); #58449=CARTESIAN_POINT('Origin',(32.7240101517326,-45.091501952873,8.97157287525381)); #58450=CARTESIAN_POINT('',(32.7240101517326,-45.091501952873,8.97157287525381)); #58451=CARTESIAN_POINT('',(31.7240101517326,-46.091501952873,9.97157287525382)); #58452=CARTESIAN_POINT('',(31.0573434850659,-46.7581686195397,10.6382395419205)); #58453=CARTESIAN_POINT('',(32.7240101517326,-45.091501952873,10.9715728752538)); #58454=CARTESIAN_POINT('',(32.7240101517326,-45.091501952873,2.48578643762691)); #58455=CARTESIAN_POINT('',(32.3906768183992,-45.4248352862063,10.6382395419205)); #58456=CARTESIAN_POINT('Origin',(32.7240101517326,-55.091501952873,10.9715728752538)); #58457=CARTESIAN_POINT('',(32.7240101517326,-55.091501952873,10.9715728752538)); #58458=CARTESIAN_POINT('',(31.7240101517326,-54.091501952873,9.97157287525382)); #58459=CARTESIAN_POINT('',(31.0573434850659,-53.4248352862063,9.30490620858715)); #58460=CARTESIAN_POINT('',(32.7240101517326,-55.091501952873,8.97157287525381)); #58461=CARTESIAN_POINT('',(32.7240101517326,-55.091501952873,3.48578643762691)); #58462=CARTESIAN_POINT('',(32.3906768183992,-54.7581686195397,9.30490620858715)); #58463=CARTESIAN_POINT('Origin',(32.7240101517326,-55.091501952873,8.97157287525381)); #58464=CARTESIAN_POINT('',(31.7240101517326,-50.091501952873,9.97157287525382)); #58465=CARTESIAN_POINT('',(32.7240101517326,-46.7572128086822,8.97157287525381)); #58466=CARTESIAN_POINT('Origin',(32.7240101517326,-89.9829470203261,8.97157287525381)); #58467=CARTESIAN_POINT('',(32.7240101517326,-89.9829470203261,8.97157287525381)); #58468=CARTESIAN_POINT('',(31.7240101517326,-90.9829470203261,9.97157287525382)); #58469=CARTESIAN_POINT('',(31.0573434850659,-91.6496136869927,10.6382395419205)); #58470=CARTESIAN_POINT('',(32.7240101517326,-89.9829470203261,10.9715728752538)); #58471=CARTESIAN_POINT('',(32.7240101517326,-89.9829470203261,2.48578643762691)); #58472=CARTESIAN_POINT('',(32.3906768183992,-90.3162803536594,10.6382395419205)); #58473=CARTESIAN_POINT('Origin',(32.7240101517326,-99.9829470203261,10.9715728752538)); #58474=CARTESIAN_POINT('',(32.7240101517326,-99.9829470203261,10.9715728752538)); #58475=CARTESIAN_POINT('',(31.7240101517326,-98.9829470203261,9.97157287525382)); #58476=CARTESIAN_POINT('',(31.0573434850659,-98.3162803536594,9.30490620858715)); #58477=CARTESIAN_POINT('',(32.7240101517326,-99.9829470203261,8.97157287525381)); #58478=CARTESIAN_POINT('',(32.7240101517326,-99.9829470203261,3.48578643762691)); #58479=CARTESIAN_POINT('',(32.3906768183992,-99.6496136869927,9.30490620858715)); #58480=CARTESIAN_POINT('Origin',(32.7240101517326,-99.9829470203261,8.97157287525381)); #58481=CARTESIAN_POINT('',(31.7240101517326,-94.9829470203261,9.97157287525382)); #58482=CARTESIAN_POINT('',(32.7240101517326,-69.2029353424087,8.97157287525381)); #58483=CARTESIAN_POINT('Origin',(101.724010151733,-55.0994886608669,8.97157287525381)); #58484=CARTESIAN_POINT('',(101.724010151733,-55.0994886608669,8.97157287525381)); #58485=CARTESIAN_POINT('',(102.724010151733,-54.0994886608669,9.97157287525381)); #58486=CARTESIAN_POINT('',(103.390676818399,-53.4328219942002,10.6382395419205)); #58487=CARTESIAN_POINT('',(101.724010151733,-55.0994886608669,10.9715728752538)); #58488=CARTESIAN_POINT('',(101.724010151733,-55.0994886608669,2.4857864376269)); #58489=CARTESIAN_POINT('',(102.057343485066,-54.7661553275336,10.6382395419205)); #58490=CARTESIAN_POINT('Origin',(101.724010151733,-45.0994886608669,10.9715728752538)); #58491=CARTESIAN_POINT('',(101.724010151733,-45.0994886608669,10.9715728752538)); #58492=CARTESIAN_POINT('',(102.724010151733,-46.0994886608669,9.97157287525381)); #58493=CARTESIAN_POINT('',(103.390676818399,-46.7661553275336,9.30490620858714)); #58494=CARTESIAN_POINT('',(101.724010151733,-45.0994886608669,8.97157287525381)); #58495=CARTESIAN_POINT('',(101.724010151733,-45.0994886608669,3.4857864376269)); #58496=CARTESIAN_POINT('',(102.057343485066,-45.4328219942002,9.30490620858714)); #58497=CARTESIAN_POINT('Origin',(101.724010151733,-45.0994886608669,8.97157287525381)); #58498=CARTESIAN_POINT('',(102.724010151733,-50.0994886608669,9.97157287525381)); #58499=CARTESIAN_POINT('',(101.724010151733,-81.6612061626791,8.97157287525382)); #58500=CARTESIAN_POINT('Origin',(101.724010151733,-99.9012522047028,8.97157287525381)); #58501=CARTESIAN_POINT('',(101.724010151733,-99.9012522047028,8.97157287525381)); #58502=CARTESIAN_POINT('',(102.724010151733,-98.9012522047028,9.97157287525381)); #58503=CARTESIAN_POINT('',(103.390676818399,-98.2345855380362,10.6382395419205)); #58504=CARTESIAN_POINT('',(101.724010151733,-99.9012522047028,10.9715728752538)); #58505=CARTESIAN_POINT('',(101.724010151733,-99.9012522047028,2.4857864376269)); #58506=CARTESIAN_POINT('',(102.057343485066,-99.5679188713695,10.6382395419205)); #58507=CARTESIAN_POINT('Origin',(101.724010151733,-89.9012522047028,10.9715728752538)); #58508=CARTESIAN_POINT('',(101.724010151733,-89.9012522047028,10.9715728752538)); #58509=CARTESIAN_POINT('',(102.724010151733,-90.9012522047028,9.97157287525381)); #58510=CARTESIAN_POINT('',(103.390676818399,-91.5679188713695,9.30490620858714)); #58511=CARTESIAN_POINT('',(101.724010151733,-89.9012522047028,8.97157287525381)); #58512=CARTESIAN_POINT('',(101.724010151733,-89.9012522047028,3.4857864376269)); #58513=CARTESIAN_POINT('',(102.057343485066,-90.2345855380361,9.30490620858715)); #58514=CARTESIAN_POINT('Origin',(101.724010151733,-89.9012522047028,8.97157287525381)); #58515=CARTESIAN_POINT('',(102.724010151733,-94.9012522047028,9.97157287525381)); #58516=CARTESIAN_POINT('',(101.724010151733,-104.062087934597,8.97157287525382)); #58517=CARTESIAN_POINT('Origin',(73.2999260729384,-45.2294789528437,-4.)); #58518=CARTESIAN_POINT('',(73.2999260729384,-43.2294789528437,-2.)); #58519=CARTESIAN_POINT('',(71.2999502138682,-45.2196522984629,-2.)); #58520=CARTESIAN_POINT('Origin',(73.2999260729384,-45.2294789528437,-2.)); #58521=CARTESIAN_POINT('',(73.2999260729384,-43.2294789528437,0.)); #58522=CARTESIAN_POINT('',(73.2999260729384,-43.2294789528437,-4.)); #58523=CARTESIAN_POINT('',(71.2999502138682,-45.2196522984629,0.)); #58524=CARTESIAN_POINT('Origin',(73.2999260729384,-45.2294789528437,0.)); #58525=CARTESIAN_POINT('',(71.2999502138682,-45.2196522984629,-4.)); #58526=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,-2.)); #58527=CARTESIAN_POINT('',(63.3000467775873,-45.2196522984629,-2.)); #58528=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,-2.)); #58529=CARTESIAN_POINT('',(61.3000709185171,-43.2294789528437,-2.)); #58530=CARTESIAN_POINT('Origin',(61.3000709185171,-45.2294789528437,-2.)); #58531=CARTESIAN_POINT('',(35.5311339066026,-43.2294789528437,-2.)); #58532=CARTESIAN_POINT('',(51.3775720291676,-43.2294789528437,-2.)); #58533=CARTESIAN_POINT('',(35.5311339066026,-106.69408756202,-2.)); #58534=CARTESIAN_POINT('',(35.5311339066026,-93.2896482874111,-2.)); #58535=CARTESIAN_POINT('',(36.7942831654046,-107.658842695508,-2.)); #58536=CARTESIAN_POINT('Origin',(36.5311339066026,-106.69408756202,-2.)); #58537=CARTESIAN_POINT('',(41.7657249184492,-112.319521559102,-2.)); #58538=CARTESIAN_POINT('Origin',(37.8468802006125,-111.517863229461,-2.)); #58539=CARTESIAN_POINT('',(42.7454360979084,-113.519936141513,-2.)); #58540=CARTESIAN_POINT('Origin',(42.7454360979084,-112.519936141513,-2.)); #58541=CARTESIAN_POINT('',(91.8761425631077,-113.519936141513,-2.)); #58542=CARTESIAN_POINT('',(80.2699560498881,-113.519936141513,-2.)); #58543=CARTESIAN_POINT('',(92.8554024937635,-112.31732817471,-2.)); #58544=CARTESIAN_POINT('Origin',(91.8761425631077,-112.519936141513,-2.)); #58545=CARTESIAN_POINT('',(97.6690740848987,-107.608685013539,-2.)); #58546=CARTESIAN_POINT('Origin',(96.7724422163871,-111.506896307501,-2.)); #58547=CARTESIAN_POINT('',(98.8932320520266,-106.634132190049,-2.)); #58548=CARTESIAN_POINT('Origin',(97.8932320520266,-106.634132190049,-2.)); #58549=CARTESIAN_POINT('',(98.8932320520266,-43.2294789528437,-2.)); #58550=CARTESIAN_POINT('',(98.8932320520266,-60.7762013086675,-2.)); #58551=CARTESIAN_POINT('',(69.0024820443821,-43.2294789528437,-2.)); #58552=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,-4.)); #58553=CARTESIAN_POINT('',(63.3000467775873,-45.2196522984629,0.)); #58554=CARTESIAN_POINT('Origin',(67.2999984957278,-45.1999989897013,0.)); #58555=CARTESIAN_POINT('',(63.3000467775873,-45.2196522984629,-4.)); #58556=CARTESIAN_POINT('Origin',(61.3000709185171,-45.2294789528437,-4.)); #58557=CARTESIAN_POINT('',(61.3000709185171,-43.2294789528437,0.)); #58558=CARTESIAN_POINT('Origin',(61.3000709185171,-45.2294789528437,0.)); #58559=CARTESIAN_POINT('',(61.3000709185171,-43.2294789528437,-4.)); #58560=CARTESIAN_POINT('Origin',(97.8932320520266,-106.634132190049,-4.)); #58561=CARTESIAN_POINT('',(97.6690740848987,-107.608685013539,0.)); #58562=CARTESIAN_POINT('',(97.6690740848987,-107.608685013539,-4.)); #58563=CARTESIAN_POINT('',(98.8932320520266,-106.634132190049,0.)); #58564=CARTESIAN_POINT('Origin',(97.8932320520266,-106.634132190049,0.)); #58565=CARTESIAN_POINT('',(98.8932320520266,-106.634132190049,-4.)); #58566=CARTESIAN_POINT('Origin',(96.7724422163871,-111.506896307501,-4.)); #58567=CARTESIAN_POINT('',(92.8554024937635,-112.31732817471,0.)); #58568=CARTESIAN_POINT('',(92.8554024937635,-112.31732817471,-4.)); #58569=CARTESIAN_POINT('Origin',(96.7724422163871,-111.506896307501,0.)); #58570=CARTESIAN_POINT('Origin',(91.8761425631077,-112.519936141513,-4.)); #58571=CARTESIAN_POINT('',(91.8761425631077,-113.519936141513,0.)); #58572=CARTESIAN_POINT('',(91.8761425631077,-113.519936141513,-4.)); #58573=CARTESIAN_POINT('Origin',(91.8761425631077,-112.519936141513,0.)); #58574=CARTESIAN_POINT('Origin',(93.3159019480436,-113.519936141513,-4.)); #58575=CARTESIAN_POINT('',(42.7454360979084,-113.519936141513,0.)); #58576=CARTESIAN_POINT('',(42.7454360979084,-113.519936141513,-4.)); #58577=CARTESIAN_POINT('',(35.5311339066026,-113.519936141513,0.)); #58578=CARTESIAN_POINT('Origin',(42.7454360979084,-112.519936141513,-4.)); #58579=CARTESIAN_POINT('',(41.7657249184492,-112.319521559102,0.)); #58580=CARTESIAN_POINT('',(41.7657249184492,-112.319521559102,-4.)); #58581=CARTESIAN_POINT('Origin',(42.7454360979084,-112.519936141513,0.)); #58582=CARTESIAN_POINT('Origin',(37.8468802006125,-111.517863229461,-4.)); #58583=CARTESIAN_POINT('',(36.7942831654046,-107.658842695508,0.)); #58584=CARTESIAN_POINT('',(36.7942831654046,-107.658842695508,-4.)); #58585=CARTESIAN_POINT('Origin',(37.8468802006125,-111.517863229461,0.)); #58586=CARTESIAN_POINT('Origin',(36.5311339066026,-106.69408756202,-4.)); #58587=CARTESIAN_POINT('',(35.5311339066026,-106.69408756202,0.)); #58588=CARTESIAN_POINT('',(35.5311339066026,-106.69408756202,-4.)); #58589=CARTESIAN_POINT('Origin',(36.5311339066026,-106.69408756202,0.)); #58590=CARTESIAN_POINT('Origin',(35.5311339066026,-108.256372910331,-4.)); #58591=CARTESIAN_POINT('',(35.5311339066026,-43.2294789528437,0.)); #58592=CARTESIAN_POINT('',(35.5311339066026,-43.2294789528437,-4.)); #58593=CARTESIAN_POINT('',(35.5311339066026,-43.2294789528437,0.)); #58594=CARTESIAN_POINT('Origin',(35.5311339066026,-43.2294789528437,-4.)); #58595=CARTESIAN_POINT('',(98.8932320520266,-43.2294789528437,0.)); #58596=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644914,0.)); #58597=CARTESIAN_POINT('',(32.7240101517326,-116.222923664491,0.)); #58598=CARTESIAN_POINT('',(32.7240101517326,-40.4229236644913,0.)); #58599=CARTESIAN_POINT('',(32.7240101517326,-58.3729236644913,0.)); #58600=CARTESIAN_POINT('',(101.724010151733,-116.222923664491,0.)); #58601=CARTESIAN_POINT('',(48.9740101517326,-116.222923664491,0.)); #58602=CARTESIAN_POINT('',(101.724010151733,-40.4229236644913,0.)); #58603=CARTESIAN_POINT('',(101.724010151733,-98.2729236644914,0.)); #58604=CARTESIAN_POINT('',(85.4740101517326,-40.4229236644913,0.)); #58605=CARTESIAN_POINT('',(85.4740101517326,-40.4229236644913,0.)); #58606=CARTESIAN_POINT('',(98.8932320520266,-43.2294789528437,0.)); #58607=CARTESIAN_POINT('',(98.8932320520266,-43.2294789528437,0.)); #58608=CARTESIAN_POINT('',(98.8932320520266,-113.519936141513,0.)); #58609=CARTESIAN_POINT('Origin',(98.8932320520266,-43.2294789528437,-4.)); #58610=CARTESIAN_POINT('',(98.8932320520266,-43.2294789528437,-4.)); #58611=CARTESIAN_POINT('Origin',(70.7809539370316,-43.2294789528437,-4.)); #58612=CARTESIAN_POINT('Origin',(101.724010151733,-118.222923664491,-4.)); #58613=CARTESIAN_POINT('',(101.724010151733,-108.247923664491,10.9715728752538)); #58614=CARTESIAN_POINT('',(101.724010151733,-40.4229236644913,10.9715728752538)); #58615=CARTESIAN_POINT('',(101.724010151733,-108.247923664491,10.9715728752538)); #58616=CARTESIAN_POINT('',(101.724010151733,-40.4229236644913,-4.)); #58617=CARTESIAN_POINT('',(101.724010151733,-116.222923664491,10.9715728752538)); #58618=CARTESIAN_POINT('',(101.724010151733,-116.222923664491,-4.)); #58619=CARTESIAN_POINT('',(101.724010151733,-108.247923664491,10.9715728752538)); #58620=CARTESIAN_POINT('',(101.724010151733,-108.247923664491,10.9715728752538)); #58621=CARTESIAN_POINT('Origin',(30.7240101517326,-116.222923664491,-4.)); #58622=CARTESIAN_POINT('',(32.7240101517326,-116.222923664491,10.9715728752538)); #58623=CARTESIAN_POINT('',(32.7240101517326,-116.222923664491,-4.)); #58624=CARTESIAN_POINT('',(39.8490101517326,-116.222923664491,10.9715728752538)); #58625=CARTESIAN_POINT('Origin',(32.7240101517326,-38.4229236644913,-4.)); #58626=CARTESIAN_POINT('',(32.7240101517326,-48.3979236644913,10.9715728752538)); #58627=CARTESIAN_POINT('',(32.7240101517326,-48.3979236644913,10.9715728752538)); #58628=CARTESIAN_POINT('',(32.7240101517326,-40.4229236644913,10.9715728752538)); #58629=CARTESIAN_POINT('',(32.7240101517326,-40.4229236644913,-4.)); #58630=CARTESIAN_POINT('',(32.7240101517326,-48.3979236644913,10.9715728752538)); #58631=CARTESIAN_POINT('Origin',(103.724010151733,-40.4229236644913,-4.)); #58632=CARTESIAN_POINT('',(94.5990101517326,-40.4229236644913,10.9715728752538)); #58633=CARTESIAN_POINT('Origin',(32.7382237141057,-58.3729236644913,10.9857864376269)); #58634=CARTESIAN_POINT('',(44.5168191933146,-52.2157327060734,22.7643819168359)); #58635=CARTESIAN_POINT('',(45.0834858599813,-103.863447956242,23.3310485835025)); #58636=CARTESIAN_POINT('Origin',(48.9740101517326,-116.208710102118,10.9857864376269)); #58637=CARTESIAN_POINT('',(89.9312011101506,-104.430114622909,22.7643819168358)); #58638=CARTESIAN_POINT('Origin',(101.709796589359,-98.2729236644914,10.9857864376269)); #58639=CARTESIAN_POINT('',(89.3645344434839,-52.7823993727401,23.3310485835026)); #58640=CARTESIAN_POINT('Origin',(85.4740101517326,-40.4371372268644,10.9857864376269)); #58641=CARTESIAN_POINT('Origin',(101.724010151733,-116.222923664491,-4.)); #58642=CARTESIAN_POINT('',(103.724010151733,-116.222923664491,-2.8)); #58643=CARTESIAN_POINT('Origin',(101.724010151733,-116.222923664491,-2.8)); #58644=CARTESIAN_POINT('',(103.724010151733,-116.222923664491,-4.)); #58645=CARTESIAN_POINT('Origin',(67.2240101517326,-78.3229236644913,-4.)); #58646=CARTESIAN_POINT('',(31.9240101517326,-116.222923664491,-4.)); #58647=CARTESIAN_POINT('',(32.7240101517326,-117.022923664491,-4.)); #58648=CARTESIAN_POINT('Origin',(32.7240101517326,-116.222923664491,-4.)); #58649=CARTESIAN_POINT('',(31.9240101517326,-40.4229236644913,-4.)); #58650=CARTESIAN_POINT('',(31.9240101517326,-58.3729236644913,-4.)); #58651=CARTESIAN_POINT('',(32.7240101517326,-39.6229236644913,-4.)); #58652=CARTESIAN_POINT('Origin',(32.7240101517326,-40.4229236644913,-4.)); #58653=CARTESIAN_POINT('',(101.724010151733,-39.6229236644913,-4.)); #58654=CARTESIAN_POINT('',(85.4740101517326,-39.6229236644913,-4.)); #58655=CARTESIAN_POINT('',(102.524010151733,-40.4229236644913,-4.)); #58656=CARTESIAN_POINT('Origin',(101.724010151733,-40.4229236644913,-4.)); #58657=CARTESIAN_POINT('',(102.524010151733,-116.222923664491,-4.)); #58658=CARTESIAN_POINT('',(102.524010151733,-98.2729236644914,-4.)); #58659=CARTESIAN_POINT('',(101.724010151733,-117.022923664491,-4.)); #58660=CARTESIAN_POINT('Origin',(101.724010151733,-116.222923664491,-4.)); #58661=CARTESIAN_POINT('',(48.9740101517326,-117.022923664491,-4.)); #58662=CARTESIAN_POINT('Origin',(32.7240101517326,-116.222923664491,-4.)); #58663=CARTESIAN_POINT('',(30.7240101517326,-116.222923664491,-2.8)); #58664=CARTESIAN_POINT('',(30.7240101517326,-116.222923664491,-4.)); #58665=CARTESIAN_POINT('Origin',(32.7240101517326,-116.222923664491,-2.8)); #58666=CARTESIAN_POINT('Origin',(30.7240101517326,-38.4229236644913,-4.)); #58667=CARTESIAN_POINT('',(30.7240101517326,-40.4229236644913,-2.8)); #58668=CARTESIAN_POINT('',(30.7240101517326,-40.4229236644913,-4.)); #58669=CARTESIAN_POINT('',(30.7240101517326,-58.3729236644913,-2.8)); #58670=CARTESIAN_POINT('Origin',(31.3240101517326,-58.3729236644913,-3.4)); #58671=CARTESIAN_POINT('',(31.9240101517326,-40.4229236644913,-4.)); #58672=CARTESIAN_POINT('',(30.7240101517326,-116.222923664491,-2.8)); #58673=CARTESIAN_POINT('Origin',(32.7240101517326,-40.4229236644913,-3.4)); #58674=CARTESIAN_POINT('Origin',(32.7240101517326,-40.4229236644913,-2.8)); #58675=CARTESIAN_POINT('',(32.7240101517326,-39.6229236644913,-4.)); #58676=CARTESIAN_POINT('Origin',(85.4740101517326,-39.0229236644913,-3.4)); #58677=CARTESIAN_POINT('',(101.724010151733,-39.6229236644913,-4.)); #58678=CARTESIAN_POINT('Origin',(101.724010151733,-40.4229236644913,-3.4)); #58679=CARTESIAN_POINT('',(103.724010151733,-40.4229236644913,-2.8)); #58680=CARTESIAN_POINT('Origin',(101.724010151733,-40.4229236644913,-2.8)); #58681=CARTESIAN_POINT('',(102.524010151733,-40.4229236644913,-4.)); #58682=CARTESIAN_POINT('Origin',(103.124010151733,-98.2729236644914,-3.4)); #58683=CARTESIAN_POINT('',(102.524010151733,-116.222923664491,-4.)); #58684=CARTESIAN_POINT('',(103.724010151733,-98.2729236644914,-2.8)); #58685=CARTESIAN_POINT('Origin',(101.724010151733,-116.222923664491,-3.4)); #58686=CARTESIAN_POINT('',(101.724010151733,-117.022923664491,-4.)); #58687=CARTESIAN_POINT('Origin',(48.9740101517326,-117.622923664491,-3.4)); #58688=CARTESIAN_POINT('',(32.7240101517326,-117.022923664491,-4.)); #58689=CARTESIAN_POINT('Origin',(32.7240101517326,-116.222923664491,-3.4)); #58690=CARTESIAN_POINT('Origin',(103.724010151733,-118.222923664491,-4.)); #58691=CARTESIAN_POINT('',(103.724010151733,-40.4229236644913,-4.)); #58692=CARTESIAN_POINT('Origin',(101.724010151733,-40.4229236644913,-4.)); #58693=CARTESIAN_POINT('Origin',(32.7240101517326,-40.4229236644913,-4.)); #58694=CARTESIAN_POINT('',(74.8439999999999,-94.334,1.65)); #58695=CARTESIAN_POINT('',(70.604191,-74.877665,1.65)); #58696=CARTESIAN_POINT('',(49.2759999999999,-99.374,1.65)); #58697=CARTESIAN_POINT('',(95.667537,-99.795757,1.65)); #58698=CARTESIAN_POINT('',(67.2280699999999,-84.47611,1.65)); #58699=CARTESIAN_POINT('',(0.,0.,0.)); #58700=CARTESIAN_POINT('',(38.385523,-94.318249,1.65)); #58701=CARTESIAN_POINT('',(84.582,-99.374,1.65)); #58702=CARTESIAN_POINT('',(60.7310419999999,-99.717876,1.65)); #58703=CARTESIAN_POINT('',(64.010036,-74.929999,1.65)); #58704=CARTESIAN_POINT('',(0.,0.,0.)); #58705=CARTESIAN_POINT('',(0.,0.,0.)); #58706=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58707=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58708=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58709=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58710=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58711=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58712=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58713=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58714=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58715=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58716=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58717=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58718=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58719=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58720=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58721=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58722=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58723=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58724=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#58744, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #58725=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58706)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58726=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58707)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58727=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58708)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58728=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58709)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58729=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58710)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58730=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58711)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58731=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58712)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58732=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58713)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58733=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58714)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58734=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58715)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58735=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58716)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58736=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58717)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58737=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58718)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58738=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58719)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58739=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58720)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58740=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58721)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58741=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58722)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58742=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58723)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58743=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58724)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#58744,#58746,#58747)) REPRESENTATION_CONTEXT('','3D') ); #58744=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); #58745=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT($,.METRE.) ); #58746=( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); #58747=( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); #58748=SHAPE_DEFINITION_REPRESENTATION(#58766,#58805); #58749=SHAPE_DEFINITION_REPRESENTATION(#58767,#58806); #58750=SHAPE_DEFINITION_REPRESENTATION(#58768,#58807); #58751=SHAPE_DEFINITION_REPRESENTATION(#58769,#58808); #58752=SHAPE_DEFINITION_REPRESENTATION(#58770,#58809); #58753=SHAPE_DEFINITION_REPRESENTATION(#58771,#58810); #58754=SHAPE_DEFINITION_REPRESENTATION(#58772,#58811); #58755=SHAPE_DEFINITION_REPRESENTATION(#58774,#58812); #58756=SHAPE_DEFINITION_REPRESENTATION(#58775,#58813); #58757=SHAPE_DEFINITION_REPRESENTATION(#58776,#58814); #58758=SHAPE_DEFINITION_REPRESENTATION(#58779,#58815); #58759=SHAPE_DEFINITION_REPRESENTATION(#58780,#58816); #58760=SHAPE_DEFINITION_REPRESENTATION(#58783,#58817); #58761=SHAPE_DEFINITION_REPRESENTATION(#58784,#58818); #58762=SHAPE_DEFINITION_REPRESENTATION(#58787,#58819); #58763=SHAPE_DEFINITION_REPRESENTATION(#58788,#58820); #58764=SHAPE_DEFINITION_REPRESENTATION(#58791,#58821); #58765=SHAPE_DEFINITION_REPRESENTATION(#58792,#58822); #58766=PRODUCT_DEFINITION_SHAPE('',$,#58824); #58767=PRODUCT_DEFINITION_SHAPE('',$,#58825); #58768=PRODUCT_DEFINITION_SHAPE('',$,#58826); #58769=PRODUCT_DEFINITION_SHAPE('',$,#58827); #58770=PRODUCT_DEFINITION_SHAPE('',$,#58828); #58771=PRODUCT_DEFINITION_SHAPE('',$,#58829); #58772=PRODUCT_DEFINITION_SHAPE('',$,#58830); #58773=PRODUCT_DEFINITION_SHAPE($,$,#680); #58774=PRODUCT_DEFINITION_SHAPE('',$,#58831); #58775=PRODUCT_DEFINITION_SHAPE('',$,#58832); #58776=PRODUCT_DEFINITION_SHAPE('',$,#58833); #58777=PRODUCT_DEFINITION_SHAPE($,$,#681); #58778=PRODUCT_DEFINITION_SHAPE($,$,#682); #58779=PRODUCT_DEFINITION_SHAPE('',$,#58834); #58780=PRODUCT_DEFINITION_SHAPE('',$,#58835); #58781=PRODUCT_DEFINITION_SHAPE($,$,#683); #58782=PRODUCT_DEFINITION_SHAPE($,$,#684); #58783=PRODUCT_DEFINITION_SHAPE('',$,#58836); #58784=PRODUCT_DEFINITION_SHAPE('',$,#58837); #58785=PRODUCT_DEFINITION_SHAPE($,$,#685); #58786=PRODUCT_DEFINITION_SHAPE($,$,#686); #58787=PRODUCT_DEFINITION_SHAPE('',$,#58838); #58788=PRODUCT_DEFINITION_SHAPE('',$,#58839); #58789=PRODUCT_DEFINITION_SHAPE($,$,#687); #58790=PRODUCT_DEFINITION_SHAPE($,$,#688); #58791=PRODUCT_DEFINITION_SHAPE('',$,#58840); #58792=PRODUCT_DEFINITION_SHAPE('',$,#58841); #58793=PRODUCT_DEFINITION_SHAPE($,$,#689); #58794=PRODUCT_DEFINITION_SHAPE($,$,#690); #58795=PRODUCT_DEFINITION_SHAPE($,$,#691); #58796=PRODUCT_DEFINITION_SHAPE($,$,#692); #58797=PRODUCT_DEFINITION_SHAPE($,$,#693); #58798=PRODUCT_DEFINITION_SHAPE($,$,#694); #58799=PRODUCT_DEFINITION_SHAPE($,$,#695); #58800=PRODUCT_DEFINITION_SHAPE($,$,#696); #58801=PRODUCT_DEFINITION_SHAPE($,$,#697); #58802=PRODUCT_DEFINITION_SHAPE($,$,#698); #58803=PRODUCT_DEFINITION_SHAPE($,$,#699); #58804=PRODUCT_DEFINITION_SHAPE($,$,#700); #58805=SHAPE_REPRESENTATION('',(#33889,#36416,#36417,#36418,#36419,#36420, #36421,#36422,#36423,#36424,#36425,#36426,#36427),#58725); #58806=SHAPE_REPRESENTATION('',(#33890,#35106),#58726); #58807=SHAPE_REPRESENTATION('',(#33891,#36021),#58727); #58808=SHAPE_REPRESENTATION('',(#33892,#35885),#58728); #58809=SHAPE_REPRESENTATION('',(#33893,#35965),#58729); #58810=SHAPE_REPRESENTATION('',(#33894,#34118),#58730); #58811=SHAPE_REPRESENTATION('',(#33895),#58731); #58812=SHAPE_REPRESENTATION('',(#34119),#58732); #58813=SHAPE_REPRESENTATION('',(#34213,#35107),#58733); #58814=SHAPE_REPRESENTATION('',(#34214),#58734); #58815=SHAPE_REPRESENTATION('',(#35108,#35886),#58735); #58816=SHAPE_REPRESENTATION('',(#35109),#58736); #58817=SHAPE_REPRESENTATION('',(#35887,#35966),#58737); #58818=SHAPE_REPRESENTATION('',(#35888),#58738); #58819=SHAPE_REPRESENTATION('',(#35967,#36022),#58739); #58820=SHAPE_REPRESENTATION('',(#35968),#58740); #58821=SHAPE_REPRESENTATION('',(#36023),#58741); #58822=SHAPE_REPRESENTATION('',(#36237),#58742); #58823=PRODUCT_DEFINITION_CONTEXT('part definition',#58879,'design'); #58824=PRODUCT_DEFINITION('DeskHop','DeskHop v10',#58842,#58823); #58825=PRODUCT_DEFINITION('Raspberry Pi Pico-R3','Raspberry Pi Pico-R3', #58843,#58823); #58826=PRODUCT_DEFINITION('Power Filter CAP','Power Filter CAP',#58844, #58823); #58827=PRODUCT_DEFINITION('Molex 676432911 USB-A', 'Molex 676432911 USB-A',#58845,#58823); #58828=PRODUCT_DEFINITION('Header Pin 1x03 2.54 mm', 'Header Pin 1x03 2.54 mm',#58846,#58823); #58829=PRODUCT_DEFINITION('ADuM 1201 BRZ digital isolator', 'ADuM 1201 BRZ digital isolator',#58847,#58823); #58830=PRODUCT_DEFINITION('SOLID (2)','SOLID (2)',#58848,#58823); #58831=PRODUCT_DEFINITION('PCB','PCB',#58849,#58823); #58832=PRODUCT_DEFINITION('Raspberry Pi Pico-R3_1', 'Raspberry Pi Pico-R3',#58850,#58823); #58833=PRODUCT_DEFINITION('COMPOUND','COMPOUND',#58851,#58823); #58834=PRODUCT_DEFINITION('Molex 676432911 USB-A_1', 'Molex 676432911 USB-A',#58852,#58823); #58835=PRODUCT_DEFINITION('COMPOUND (1)','COMPOUND (1)',#58853,#58823); #58836=PRODUCT_DEFINITION('Header Pin 1x03 2.54 mm_1', 'Header Pin 1x03 2.54 mm',#58854,#58823); #58837=PRODUCT_DEFINITION('SOLID (1)','SOLID (1)',#58855,#58823); #58838=PRODUCT_DEFINITION('Power Filter CAP_1','Power Filter CAP',#58856, #58823); #58839=PRODUCT_DEFINITION('SOLID','SOLID',#58857,#58823); #58840=PRODUCT_DEFINITION('Box Top ','Box Top ',#58858,#58823); #58841=PRODUCT_DEFINITION('Box Bottom','Box Bottom',#58859,#58823); #58842=PRODUCT_DEFINITION_FORMATION('',$,#58881); #58843=PRODUCT_DEFINITION_FORMATION('',$,#58882); #58844=PRODUCT_DEFINITION_FORMATION('',$,#58883); #58845=PRODUCT_DEFINITION_FORMATION('',$,#58884); #58846=PRODUCT_DEFINITION_FORMATION('',$,#58885); #58847=PRODUCT_DEFINITION_FORMATION('',$,#58886); #58848=PRODUCT_DEFINITION_FORMATION('',$,#58887); #58849=PRODUCT_DEFINITION_FORMATION('',$,#58888); #58850=PRODUCT_DEFINITION_FORMATION('',$,#58889); #58851=PRODUCT_DEFINITION_FORMATION('',$,#58890); #58852=PRODUCT_DEFINITION_FORMATION('',$,#58891); #58853=PRODUCT_DEFINITION_FORMATION('',$,#58892); #58854=PRODUCT_DEFINITION_FORMATION('',$,#58893); #58855=PRODUCT_DEFINITION_FORMATION('',$,#58894); #58856=PRODUCT_DEFINITION_FORMATION('',$,#58895); #58857=PRODUCT_DEFINITION_FORMATION('',$,#58896); #58858=PRODUCT_DEFINITION_FORMATION('',$,#58897); #58859=PRODUCT_DEFINITION_FORMATION('',$,#58898); #58860=PRODUCT_RELATED_PRODUCT_CATEGORY('DeskHop v10','DeskHop v10',(#58881)); #58861=PRODUCT_RELATED_PRODUCT_CATEGORY('Raspberry Pi Pico-R3', 'Raspberry Pi Pico-R3',(#58882)); #58862=PRODUCT_RELATED_PRODUCT_CATEGORY('Power Filter CAP', 'Power Filter CAP',(#58883)); #58863=PRODUCT_RELATED_PRODUCT_CATEGORY('Molex 676432911 USB-A', 'Molex 676432911 USB-A',(#58884)); #58864=PRODUCT_RELATED_PRODUCT_CATEGORY('Header Pin 1x03 2.54 mm', 'Header Pin 1x03 2.54 mm',(#58885)); #58865=PRODUCT_RELATED_PRODUCT_CATEGORY( 'ADuM 1201 BRZ digital isolator','ADuM 1201 BRZ digital isolator',(#58886)); #58866=PRODUCT_RELATED_PRODUCT_CATEGORY('SOLID (2)','SOLID (2)',(#58887)); #58867=PRODUCT_RELATED_PRODUCT_CATEGORY('PCB','PCB',(#58888)); #58868=PRODUCT_RELATED_PRODUCT_CATEGORY('Raspberry Pi Pico-R3', 'Raspberry Pi Pico-R3',(#58889)); #58869=PRODUCT_RELATED_PRODUCT_CATEGORY('COMPOUND','COMPOUND',(#58890)); #58870=PRODUCT_RELATED_PRODUCT_CATEGORY('Molex 676432911 USB-A', 'Molex 676432911 USB-A',(#58891)); #58871=PRODUCT_RELATED_PRODUCT_CATEGORY('COMPOUND (1)','COMPOUND (1)',(#58892)); #58872=PRODUCT_RELATED_PRODUCT_CATEGORY('Header Pin 1x03 2.54 mm', 'Header Pin 1x03 2.54 mm',(#58893)); #58873=PRODUCT_RELATED_PRODUCT_CATEGORY('SOLID (1)','SOLID (1)',(#58894)); #58874=PRODUCT_RELATED_PRODUCT_CATEGORY('Power Filter CAP', 'Power Filter CAP',(#58895)); #58875=PRODUCT_RELATED_PRODUCT_CATEGORY('SOLID','SOLID',(#58896)); #58876=PRODUCT_RELATED_PRODUCT_CATEGORY('Box Top ','Box Top ',(#58897)); #58877=PRODUCT_RELATED_PRODUCT_CATEGORY('Box Bottom','Box Bottom',(#58898)); #58878=APPLICATION_PROTOCOL_DEFINITION('international standard', 'automotive_design',2009,#58879); #58879=APPLICATION_CONTEXT( 'Core Data for Automotive Mechanical Design Process'); #58880=PRODUCT_CONTEXT('part definition',#58879,'mechanical'); #58881=PRODUCT('DeskHop','DeskHop v10',$,(#58880)); #58882=PRODUCT('Raspberry Pi Pico-R3','Raspberry Pi Pico-R3',$,(#58880)); #58883=PRODUCT('Power Filter CAP','Power Filter CAP',$,(#58880)); #58884=PRODUCT('Molex 676432911 USB-A','Molex 676432911 USB-A',$,(#58880)); #58885=PRODUCT('Header Pin 1x03 2.54 mm','Header Pin 1x03 2.54 mm',$,(#58880)); #58886=PRODUCT('ADuM 1201 BRZ digital isolator', 'ADuM 1201 BRZ digital isolator',$,(#58880)); #58887=PRODUCT('SOLID (2)','SOLID (2)',$,(#58880)); #58888=PRODUCT('PCB','PCB',$,(#58880)); #58889=PRODUCT('Raspberry Pi Pico-R3_1','Raspberry Pi Pico-R3',$,(#58880)); #58890=PRODUCT('COMPOUND','COMPOUND',$,(#58880)); #58891=PRODUCT('Molex 676432911 USB-A_1','Molex 676432911 USB-A',$,(#58880)); #58892=PRODUCT('COMPOUND (1)','COMPOUND (1)',$,(#58880)); #58893=PRODUCT('Header Pin 1x03 2.54 mm_1','Header Pin 1x03 2.54 mm',$, (#58880)); #58894=PRODUCT('SOLID (1)','SOLID (1)',$,(#58880)); #58895=PRODUCT('Power Filter CAP_1','Power Filter CAP',$,(#58880)); #58896=PRODUCT('SOLID','SOLID',$,(#58880)); #58897=PRODUCT('Box Top ','Box Top ',$,(#58880)); #58898=PRODUCT('Box Bottom','Box Bottom',$,(#58880)); #58899=PRESENTATION_STYLE_ASSIGNMENT((#58903)); #58900=PRESENTATION_STYLE_ASSIGNMENT((#58904)); #58901=PRESENTATION_STYLE_ASSIGNMENT((#58905)); #58902=PRESENTATION_STYLE_ASSIGNMENT((#58906)); #58903=SURFACE_STYLE_USAGE(.BOTH.,#58907); #58904=SURFACE_STYLE_USAGE(.BOTH.,#58908); #58905=SURFACE_STYLE_USAGE(.BOTH.,#58909); #58906=SURFACE_STYLE_USAGE(.BOTH.,#58910); #58907=SURFACE_SIDE_STYLE('',(#58911)); #58908=SURFACE_SIDE_STYLE('',(#58912)); #58909=SURFACE_SIDE_STYLE('',(#58913)); #58910=SURFACE_SIDE_STYLE('',(#58914)); #58911=SURFACE_STYLE_FILL_AREA(#58915); #58912=SURFACE_STYLE_FILL_AREA(#58916); #58913=SURFACE_STYLE_FILL_AREA(#58917); #58914=SURFACE_STYLE_FILL_AREA(#58918); #58915=FILL_AREA_STYLE('Steel - Satin',(#58919)); #58916=FILL_AREA_STYLE('Opaque(80,124,105)',(#58920)); #58917=FILL_AREA_STYLE('Opaque(219,188,126)',(#58921)); #58918=FILL_AREA_STYLE('Plastic - Matte (Red)',(#58922)); #58919=FILL_AREA_STYLE_COLOUR('Steel - Satin',#58923); #58920=FILL_AREA_STYLE_COLOUR('Opaque(80,124,105)',#58924); #58921=FILL_AREA_STYLE_COLOUR('Opaque(219,188,126)',#58925); #58922=FILL_AREA_STYLE_COLOUR('Plastic - Matte (Red)',#58926); #58923=COLOUR_RGB('Steel - Satin',0.627450980392157,0.627450980392157,0.627450980392157); #58924=COLOUR_RGB('Opaque(80,124,105)',0.313725490196078,0.486274509803922, 0.411764705882353); #58925=COLOUR_RGB('Opaque(219,188,126)',0.858823529411765,0.737254901960784, 0.494117647058824); #58926=COLOUR_RGB('Plastic - Matte (Red)',0.768627450980392,0.207843137254902, 0.152941176470588); ENDSEC; END-ISO-10303-21; ================================================ FILE: disk/create.sh ================================================ #!/bin/bash dd if=/dev/zero of=fat.img bs=2M count=1 mkdosfs -F12 -n DESKHOP -i 0 fat.img sudo mount -o loop,x-mount.mkdir -t vfat fat.img /mnt/disk/ sudo cp ../webconfig/config.htm /mnt/disk/config.htm sudo umount /mnt/disk dd if=fat.img of=disk.img bs=512 count=128 rm fat.img ================================================ FILE: disk/disk.S ================================================ .section .section_disk,"a" .global _disk_start _disk_start: .incbin __disk_file_path__ .global _disk_end _disk_end: ================================================ FILE: misc/.clang-format ================================================ BasedOnStyle: LLVM BinPackParameters: 'false' BinPackArguments: 'false' AlignAfterOpenBracket: Align AlignConsecutiveMacros: 'true' AlignConsecutiveAssignments: 'true' AlignConsecutiveDeclarations: 'false' AlignEscapedNewlines: Left AlignOperands: 'true' AlignTrailingComments: 'true' AllowAllArgumentsOnNextLine: 'true' AllowShortFunctionsOnASingleLine: 'false' BreakBeforeBinaryOperators: 'All' ColumnLimit: '110' IndentWidth: '4' IndentCaseLabels: 'true' IndentWrappedFunctionNames: 'false' KeepEmptyLinesAtTheStartOfBlocks: 'true' MaxEmptyLinesToKeep: '2' PointerAlignment: Right ReflowComments: 'true' Standard: Cpp11 UseTab: Never ================================================ FILE: misc/.editorconfig ================================================ [*] indent_style = space indent_size = 4 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true ================================================ FILE: misc/.markdownlint.yaml ================================================ # Ignore line length MD013: false # Allow inline HTML MD033: false ================================================ FILE: misc/Dockerfile ================================================ FROM alpine:3.21.2 RUN apk add --no-cache gcc-arm-none-eabi g++-arm-none-eabi build-base cmake python3 py3-jinja2 WORKDIR /deskhop CMD ["sh", "-c", "cmake -S . -B build && cmake --build build"] ================================================ FILE: misc/crc32.py ================================================ import sys import struct import binascii FLASH_SECTOR_SIZE = 4096 MAGIC_VALUE = 0xf00d elf_filename = sys.argv[1] output_filename = sys.argv[2] version = sys.argv[3] with open(elf_filename, 'r+b') as f: data = f.read() data = data[:-FLASH_SECTOR_SIZE] crc32_value = binascii.crc32(data) & 0xFFFFFFFF with open(output_filename, 'wb') as f: f.write(struct.pack(' FLASH .boot2 : { __boot2_start__ = .; KEEP (*(.boot2)) __boot2_end__ = .; } > FLASH ASSERT(__boot2_end__ - __boot2_start__ == 256, "ERROR: Pico second stage bootloader must be 256 bytes in size") /* The second stage will always enter the image at the start of .text. The debugger will use the ELF entry point, which is the _entry_point symbol if present, otherwise defaults to start of .text. This can be used to transfer control back to the bootrom on debugger launches only, to perform proper flash setup. */ .flashtext : { __logical_binary_start = .; KEEP (*(.vectors)) KEEP (*(.binary_info_header)) __binary_info_header_end = .; KEEP (*(.reset)) } .rodata : { /* segments not marked as .flashdata are instead pulled into .data (in RAM) to avoid accidental flash accesses */ *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.flashdata*))) . = ALIGN(4); } > FLASH .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > FLASH __exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } > FLASH __exidx_end = .; /* Machine inspectable binary information */ . = ALIGN(4); __binary_info_start = .; .binary_info : { KEEP(*(.binary_info.keep.*)) *(.binary_info.*) } > FLASH __binary_info_end = .; . = ALIGN(4); /* Vector table goes first in RAM, to avoid large alignment hole */ .ram_vector_table (NOLOAD): { *(.ram_vector_table) } > RAM .text : { __ram_text_start__ = .; *(.init) *(.text*) *(.fini) /* Pull all c'tors into .text */ *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) *(SORT(.ctors.*)) *(.ctors) /* Followed by destructors */ *crtbegin.o(.dtors) *crtbegin?.o(.dtors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) *(SORT(.dtors.*)) *(.dtors) *(.eh_frame*) . = ALIGN(4); __ram_text_end__ = .; } > RAM AT> FLASH __ram_text_source__ = LOADADDR(.text); . = ALIGN(4); .data : { __data_start__ = .; *(vtable) *(.time_critical*) . = ALIGN(4); *(.rodata*) . = ALIGN(4); *(.data*) . = ALIGN(4); *(.after_data.*) . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__mutex_array_start = .); KEEP(*(SORT(.mutex_array.*))) KEEP(*(.mutex_array)) PROVIDE_HIDDEN (__mutex_array_end = .); . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__preinit_array_start = .); KEEP(*(SORT(.preinit_array.*))) KEEP(*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); . = ALIGN(4); /* init data */ PROVIDE_HIDDEN (__init_array_start = .); KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array)) PROVIDE_HIDDEN (__init_array_end = .); . = ALIGN(4); /* finit data */ PROVIDE_HIDDEN (__fini_array_start = .); *(SORT(.fini_array.*)) *(.fini_array) PROVIDE_HIDDEN (__fini_array_end = .); *(.jcr) . = ALIGN(4); /* All data end */ __data_end__ = .; } > RAM AT> FLASH /* __etext is (for backwards compatibility) the name of the .data init source pointer (...) */ __etext = LOADADDR(.data); .uninitialized_data (NOLOAD): { . = ALIGN(4); __udata_end__ = .; *(.uninitialized_data*) } > RAM /* Start and end symbols must be word-aligned */ .scratch_x : { __scratch_x_start__ = .; *(.scratch_x.*) . = ALIGN(4); __scratch_x_end__ = .; } > SCRATCH_X AT > FLASH __scratch_x_source__ = LOADADDR(.scratch_x); .scratch_y : { __scratch_y_start__ = .; *(.scratch_y.*) . = ALIGN(4); __scratch_y_end__ = .; } > SCRATCH_Y AT > FLASH __scratch_y_source__ = LOADADDR(.scratch_y); .bss : { . = ALIGN(4); __bss_start__ = .; *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*))) *(COMMON) . = ALIGN(4); __bss_end__ = .; } > RAM .heap (NOLOAD): { __end__ = .; end = __end__; KEEP(*(.heap*)) __HeapLimit = .; } > RAM /* Store web configuration utility HTML */ .section_disk : { ADDR_DISK_IMAGE = .; KEEP(*(.section_disk)) } > DISK_IMAGE /* Firmware metadata section (4k in size, contains version, checksum etc.) */ .section_metadata : { ADDR_FW_METADATA = .; KEEP(*(.section_metadata)); } > FW_METADATA /* Firmware staging section (256k in size, near the end of flash) */ .section_staging : { ADDR_FW_STAGING = .; KEEP(*(.section_staging)) } > FW_STAGING /* Just padding so we can have a nice, consistently-sized .bin file */ .fill : { FILL(0x00); . = ORIGIN(FW_METADATA) + LENGTH(FW_METADATA) - 1; BYTE(0x00) ___ROM_AT = .; } > FW_METADATA /* Configuration flash section (4k in size, end of flash) */ .section_config (NOLOAD) : { ADDR_CONFIG = .; } > FLASH_CONFIG /* .stack*_dummy section doesn't contains any symbols. It is only * used for linker to calculate size of stack sections, and assign * values to stack symbols later * * stack1 section may be empty/missing if platform_launch_core1 is not used */ /* by default we put core 0 stack at the end of scratch Y, so that if core 1 * stack is not used then all of SCRATCH_X is free. */ .stack1_dummy (NOLOAD): { *(.stack1*) } > SCRATCH_X .stack_dummy (NOLOAD): { KEEP(*(.stack*)) } > SCRATCH_Y .flash_end : { __flash_binary_end = .; } > FLASH .pad : { /* This section will be filled with zeroes */ FILL(0x00) . = ADDR_DISK_IMAGE - __flash_binary_end - 1; BYTE(0x00) KEEP(*(.pad)) } > FLASH /* stack limit is poorly named, but historically is maximum heap ptr */ __StackLimit = ORIGIN(RAM) + LENGTH(RAM); __StackOneTop = ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X); __StackTop = ORIGIN(SCRATCH_Y) + LENGTH(SCRATCH_Y); __StackOneBottom = __StackOneTop - SIZEOF(.stack1_dummy); __StackBottom = __StackTop - SIZEOF(.stack_dummy); PROVIDE(__stack = __StackTop); /* Check if data + heap + stack exceeds RAM limit */ ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed") ASSERT( __binary_info_header_end - __logical_binary_start <= 256, "Binary info must be in first 256 bytes of the binary") /* todo assert on extra code */ } ================================================ FILE: pcb/v1.0/DeskHop.kicad_pcb ================================================ (kicad_pcb (version 20221018) (generator pcbnew) (general (thickness 1.6) ) (paper "A4") (layers (0 "F.Cu" signal) (31 "B.Cu" signal) (32 "B.Adhes" user "B.Adhesive") (33 "F.Adhes" user "F.Adhesive") (34 "B.Paste" user) (35 "F.Paste" user) (36 "B.SilkS" user "B.Silkscreen") (37 "F.SilkS" user "F.Silkscreen") (38 "B.Mask" user) (39 "F.Mask" user) (40 "Dwgs.User" user "User.Drawings") (41 "Cmts.User" user "User.Comments") (42 "Eco1.User" user "User.Eco1") (43 "Eco2.User" user "User.Eco2") (44 "Edge.Cuts" user) (45 "Margin" user) (46 "B.CrtYd" user "B.Courtyard") (47 "F.CrtYd" user "F.Courtyard") (48 "B.Fab" user) (49 "F.Fab" user) ) (setup (stackup (layer "F.SilkS" (type "Top Silk Screen")) (layer "F.Paste" (type "Top Solder Paste")) (layer "F.Mask" (type "Top Solder Mask") (thickness 0.01)) (layer "F.Cu" (type "copper") (thickness 0.035)) (layer "dielectric 1" (type "core") (thickness 1.51) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02)) (layer "B.Cu" (type "copper") (thickness 0.035)) (layer "B.Mask" (type "Bottom Solder Mask") (thickness 0.01)) (layer "B.Paste" (type "Bottom Solder Paste")) (layer "B.SilkS" (type "Bottom Silk Screen")) (copper_finish "None") (dielectric_constraints no) ) (pad_to_mask_clearance 0) (pcbplotparams (layerselection 0x00010fc_ffffffff) (plot_on_all_layers_selection 0x0000000_00000000) (disableapertmacros false) (usegerberextensions false) (usegerberattributes true) (usegerberadvancedattributes true) (creategerberjobfile true) (dashed_line_dash_ratio 12.000000) (dashed_line_gap_ratio 3.000000) (svgprecision 6) (plotframeref false) (viasonmask false) (mode 1) (useauxorigin false) (hpglpennumber 1) (hpglpenspeed 20) (hpglpendiameter 15.000000) (dxfpolygonmode true) (dxfimperialunits true) (dxfusepcbnewfont true) (psnegative false) (psa4output false) (plotreference true) (plotvalue true) (plotinvisibletext false) (sketchpadsonfab false) (subtractmaskfromsilk false) (outputformat 1) (mirror false) (drillshape 0) (scaleselection 1) (outputdirectory "Gerber/") ) ) (net 0 "") (net 1 "GND") (net 2 "Net-(J2-Pin_1)") (net 3 "Net-(J2-Pin_3)") (net 4 "Net-(J3-Pin_1)") (net 5 "Net-(J3-Pin_3)") (net 6 "Net-(U1-3V3)") (net 7 "unconnected-(U1-GPIO2-Pad4)") (net 8 "unconnected-(U1-GPIO3-Pad5)") (net 9 "unconnected-(U1-GPIO4-Pad6)") (net 10 "unconnected-(U1-GPIO5-Pad7)") (net 11 "unconnected-(U2-GPIO1-Pad2)") (net 12 "unconnected-(U1-GPIO6-Pad9)") (net 13 "unconnected-(U1-GPIO7-Pad10)") (net 14 "unconnected-(U1-GPIO10-Pad14)") (net 15 "unconnected-(U1-GPIO11-Pad15)") (net 16 "unconnected-(U1-GPIO0-Pad1)") (net 17 "unconnected-(U1-GPIO1-Pad2)") (net 18 "unconnected-(U1-GPIO20-Pad26)") (net 19 "unconnected-(U1-GPIO21-Pad27)") (net 20 "unconnected-(U1-GPIO16-Pad21)") (net 21 "unconnected-(U1-GPIO17-Pad22)") (net 22 "unconnected-(U1-GPIO18-Pad24)") (net 23 "unconnected-(U1-GPIO19-Pad25)") (net 24 "Net-(J1-D+)") (net 25 "Net-(J1-D-)") (net 26 "unconnected-(U1-GPIO8-Pad11)") (net 27 "unconnected-(U1-GPIO22-Pad29)") (net 28 "unconnected-(U1-RUN-Pad30)") (net 29 "unconnected-(U1-AGND-Pad33)") (net 30 "unconnected-(U1-GPIO28_ADC2-Pad34)") (net 31 "unconnected-(U1-ADC_VREF-Pad35)") (net 32 "unconnected-(U1-3V3_EN-Pad37)") (net 33 "unconnected-(U1-VSYS-Pad39)") (net 34 "Net-(J1-VBUS)") (net 35 "unconnected-(U1-GPIO26_ADC0-Pad31)") (net 36 "unconnected-(U2-GPIO0-Pad1)") (net 37 "unconnected-(U2-GPIO2-Pad4)") (net 38 "unconnected-(U2-GPIO3-Pad5)") (net 39 "unconnected-(U2-GPIO4-Pad6)") (net 40 "unconnected-(U2-GPIO5-Pad7)") (net 41 "unconnected-(U1-GPIO27_ADC1-Pad32)") (net 42 "unconnected-(U2-GPIO6-Pad9)") (net 43 "unconnected-(U2-GPIO7-Pad10)") (net 44 "unconnected-(U2-GPIO8-Pad11)") (net 45 "unconnected-(U2-GPIO10-Pad14)") (net 46 "unconnected-(U2-GPIO11-Pad15)") (net 47 "unconnected-(U2-GPIO12-Pad16)") (net 48 "unconnected-(U2-GPIO13-Pad17)") (net 49 "unconnected-(U1-GPIO13-Pad17)") (net 50 "unconnected-(U2-GPIO18-Pad24)") (net 51 "unconnected-(U2-GPIO19-Pad25)") (net 52 "unconnected-(U2-GPIO20-Pad26)") (net 53 "unconnected-(U2-GPIO21-Pad27)") (net 54 "unconnected-(U2-GPIO22-Pad29)") (net 55 "unconnected-(U2-RUN-Pad30)") (net 56 "unconnected-(U2-GPIO26_ADC0-Pad31)") (net 57 "unconnected-(U2-GPIO27_ADC1-Pad32)") (net 58 "unconnected-(U2-AGND-Pad33)") (net 59 "unconnected-(U2-GPIO28_ADC2-Pad34)") (net 60 "unconnected-(U2-ADC_VREF-Pad35)") (net 61 "unconnected-(U2-3V3_EN-Pad37)") (net 62 "unconnected-(U2-VSYS-Pad39)") (net 63 "Net-(U2-3V3)") (net 64 "unconnected-(U2-GPIO9-Pad12)") (net 65 "GND2") (net 66 "/UART A TX") (net 67 "unconnected-(U1-GPIO9-Pad12)") (net 68 "/UART B RX") (net 69 "Net-(J4-VBUS)") (net 70 "Net-(J4-D-)") (net 71 "Net-(J4-D+)") (net 72 "/UART B TX") (footprint "MCU_RaspberryPi_and_Boards:RPi_Pico_SMD_Nohole" (layer "F.Cu") (tstamp 00000000-0000-0000-0000-0000602a2a11) (at 85.344 68.834) (descr "Through hole straight pin header, 2x20, 2.54mm pitch, double rows") (tags "Through hole pin header THT 2x20 2.54mm double row") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (path "/00000000-0000-0000-0000-00006029bf78") (attr through_hole) (fp_text reference "U1" (at 0 0) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp cb878934-997a-4d43-98bc-5ffd45786cca) ) (fp_text value "Pico Primary" (at 0 2.159) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 47593122-6483-4fc6-9c4b-d8841c209581) ) (fp_text user "GP21" (at 13.054 8.9 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 0015fcb2-3078-422a-b965-d640cbfb81d6) ) (fp_text user "GP8" (at -12.8 1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 029309d7-43f4-4f7b-957a-0543c8b10965) ) (fp_text user "GP11" (at -13.2 11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 03671eda-3d26-4b92-bc04-d4bf84b5030b) ) (fp_text user "GP5" (at -12.8 -8.89 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 18863a19-d250-4bc1-bbea-58b8c9a4da4d) ) (fp_text user "GP7" (at -12.7 -1.3 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 1c1d6251-7204-4388-9d49-6008b6697046) ) (fp_text user "DATA" (at 12.4968 30.3784 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 2368db0c-3b42-49c1-95b7-36431c6cf929) ) (fp_text user "GP10" (at -13.054 8.89 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 252c659d-d1be-467c-a337-20d4aa3c725b) ) (fp_text user "GP17" (at 13.054 21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 2fa9193a-574a-4a00-9eaa-2720d04b5938) ) (fp_text user "GP6" (at -12.8 -3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 5c5106b5-c66f-4243-bf61-4882f79a22b9) ) (fp_text user "GP20" (at 13.054 11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 5fd3f62a-d98c-4462-b185-53ee62a95831) ) (fp_text user " GP12*" (at -13.2 13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 654bded7-dc3d-4110-b5c8-9933d7968d40) ) (fp_text user " GND*" (at -12.8 19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 7a76e090-db64-49ef-9c3a-8fddc8374f01) ) (fp_text user "GP0" (at -12.8 -24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 7fcde800-7f56-4380-98ca-fd8a2567a602) ) (fp_text user "GP3" (at -12.8 -13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 80cc5404-d9ee-4372-bb37-2bee8b6cd13d) ) (fp_text user "GP26" (at 13.054 -1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 8dd4deb1-591e-45a0-a4d3-1e05273980d4) ) (fp_text user "GP9" (at -12.8 3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 9af6d6e3-843a-4bca-90bd-2c3b9f316a84) ) (fp_text user " GP15*" (at -13.054 24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 9da49d49-7de1-42a4-91fb-7720c8535bf6) ) (fp_text user " GND*" (at 12.8 19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 9ec3ebbf-2742-4ec9-9764-07554be8b7fa) ) (fp_text user " GND*" (at -12.8 -6.35 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp a268ddcc-2c85-484d-bb30-2c57a598aa04) ) (fp_text user " GP13*" (at -13.054 16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp a57e760a-aacf-4400-923a-ac969c8333f6) ) (fp_text user "GP27" (at 13.054 -3.8 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp a94c7450-e0bb-461a-86a8-0d88956a06d9) ) (fp_text user "VSYS" (at 13.2 -21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp ab3a9ef5-2285-4618-a219-2c6e874ff742) ) (fp_text user "GP28" (at 13.054 -9.144 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp b57f0bc2-1781-4da5-86b1-56116280dfab) ) (fp_text user "ADC" (at 12.954 -11.684 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp bada0bd0-e9a6-4657-8000-b25c1022e2a0) ) (fp_text user "GND" (at 12.8 6.35 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp bb59d635-c068-4123-9c1f-84a74d490713) ) (fp_text user "GP22" (at 13.054 3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp bd60f0d5-a094-49ad-8ab3-b12ebeabb838) ) (fp_text user "3V3E" (at 13.208 -16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp bfb97d45-c62a-427e-9978-a0ca1d8265eb) ) (fp_text user "GP18" (at 13.054 16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp c0f05c04-4cfe-4a44-be38-68d5a4687b7b) ) (fp_text user "GP4" (at -12.8 -11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp c5d36558-3396-4928-b429-c319485ac106) ) (fp_text user " VBUS*" (at 13.3 -24.2 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp c5dbf120-2592-4aa5-ba0e-17d002b6126a) ) (fp_text user " GND*" (at -12.8 -19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp ced39d21-201b-4efd-a857-444103e82d38) ) (fp_text user "GP1" (at -12.9 -21.6 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp de476e6a-0d53-4460-958c-0eac6373ad5b) ) (fp_text user "GP2" (at -12.9 -16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp e21dfe27-35f2-4211-86ef-7bf85e03dc41) ) (fp_text user "GP19" (at 13.054 13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp e7db89ba-8097-461c-922f-efe95c69b626) ) (fp_text user " 3V3*" (at 12.9 -13.9 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp eba83c67-b501-49f2-b261-9eabd4774e8b) ) (fp_text user " GND*" (at 12.8 -19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp ebec5c26-3696-4fb8-bce4-7240f2a1628b) ) (fp_text user "RUN" (at 13 1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp ee08acb9-4187-403c-977d-30480b9f54e8) ) (fp_text user " GP14*" (at -13.1 21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp f416675b-3513-4287-a967-d510ec90166f) ) (fp_text user "GP16" (at 13.054 24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp f4178a28-0b4c-4eaa-880a-66246c31169e) ) (fp_text user "AGND" (at 13.054 -6.35 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp fd5fa443-182c-46a6-8072-dfb8d853d2ae) ) (fp_text user "${REFERENCE}" (at 0 0 180) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 68798075-699c-4810-82f3-ec362098135a) ) (fp_line (start -10.5 -25.5) (end -10.5 -25.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 66952641-6cab-4948-82b4-5c8509453f73)) (fp_line (start -10.5 -25.5) (end 10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp dfc415bc-5165-426a-ba2e-3fcc03dbb6c0)) (fp_line (start -10.5 -23.1) (end -10.5 -22.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 31085e3c-05e3-4f41-b2d8-98f9f33d4a3f)) (fp_line (start -10.5 -22.833) (end -7.493 -22.833) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 45abfabb-2a5a-4f4f-81e7-0accf03c4c54)) (fp_line (start -10.5 -20.5) (end -10.5 -20.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 48a5f2f9-0599-458f-92f1-a528e3701eeb)) (fp_line (start -10.5 -18) (end -10.5 -17.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a2e9943e-7194-4a0e-9ca3-668f571f3ce9)) (fp_line (start -10.5 -15.4) (end -10.5 -15) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a0d615f5-a4ac-4302-b72a-a5f2a9e2b816)) (fp_line (start -10.5 -12.9) (end -10.5 -12.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c80050cf-c673-41d0-a53e-ecaa0bd63bf0)) (fp_line (start -10.5 -10.4) (end -10.5 -10) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6bc5f6a8-9320-4518-a288-244ae84f0124)) (fp_line (start -10.5 -7.8) (end -10.5 -7.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5a1675a0-dc6a-4970-bba4-700d3a07bf49)) (fp_line (start -10.5 -5.3) (end -10.5 -4.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 904d0388-d346-4239-ac4f-c2b5a1bdc6f8)) (fp_line (start -10.5 -2.7) (end -10.5 -2.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3a296e66-73ca-45ef-ac86-a260946272e2)) (fp_line (start -10.5 -0.2) (end -10.5 0.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6f9bb37d-8957-4c0b-b106-98999475d4d0)) (fp_line (start -10.5 2.3) (end -10.5 2.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 780b1e12-d3ab-418f-b99d-81e0c31e99b2)) (fp_line (start -10.5 4.9) (end -10.5 5.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 783d3e5a-7b50-4fbc-accf-e042a443542a)) (fp_line (start -10.5 7.4) (end -10.5 7.8) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 42bed8c3-7b80-4dba-949d-26bb96cd042e)) (fp_line (start -10.5 10) (end -10.5 10.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 249b3926-4b36-42b2-b464-8cb563846494)) (fp_line (start -10.5 12.5) (end -10.5 12.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d50c7777-d5e1-4952-8c5e-4b8d6611e2cc)) (fp_line (start -10.5 15.1) (end -10.5 15.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ab53e809-5083-47c5-ad24-10bdaef44a35)) (fp_line (start -10.5 17.6) (end -10.5 18) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 74b14050-4916-4149-843c-9e35e11521d3)) (fp_line (start -10.5 20.1) (end -10.5 20.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4c1a9ff2-5342-4a7e-92a9-b23be6284cfa)) (fp_line (start -10.5 22.7) (end -10.5 23.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b8667785-4b75-46b7-8891-2cd7e50869eb)) (fp_line (start -7.493 -22.833) (end -7.493 -25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp fa7e258a-8e3a-4780-a15e-7e8fe4bca57c)) (fp_line (start -3.7 25.5) (end -10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 58baaae8-e6ac-4de6-91cd-8e1424aed1c1)) (fp_line (start -1.5 25.5) (end -1.1 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 45e3d4aa-c424-464a-8b51-eb5f320f8e2d)) (fp_line (start 1.1 25.5) (end 1.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 040f69fa-db1e-490c-8e80-8258e70c8e84)) (fp_line (start 10.5 -25.5) (end 10.5 -25.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 296aec6b-d9d9-48d9-b93e-f92cba2de1c8)) (fp_line (start 10.5 -23.1) (end 10.5 -22.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp cb9a6fff-9909-4b29-83df-62bb3c231f85)) (fp_line (start 10.5 -20.5) (end 10.5 -20.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b4a1d16b-6642-474a-b5c9-19f0a448418f)) (fp_line (start 10.5 -18) (end 10.5 -17.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3c1ae873-edaf-4ca9-b845-6b33b9103441)) (fp_line (start 10.5 -15.4) (end 10.5 -15) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp f8060ab4-8a5d-4f6c-a482-861f79672770)) (fp_line (start 10.5 -12.9) (end 10.5 -12.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 0cd8f376-5c61-44c0-8162-46b55a877546)) (fp_line (start 10.5 -10.4) (end 10.5 -10) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 72ce9188-91fd-4333-9102-51b666df13d0)) (fp_line (start 10.5 -7.8) (end 10.5 -7.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 72a64152-9a5f-414d-8661-e60e5e7291d5)) (fp_line (start 10.5 -5.3) (end 10.5 -4.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 29d067d5-1e43-42bd-9bb7-641c2cc13631)) (fp_line (start 10.5 -2.7) (end 10.5 -2.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 463d54e7-df20-40fc-b1a7-61eb294c16c2)) (fp_line (start 10.5 -0.2) (end 10.5 0.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 005cb3c8-2818-4548-bf2a-033123912f8b)) (fp_line (start 10.5 2.3) (end 10.5 2.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 18c355b8-7356-4a36-8c58-461ae56290c2)) (fp_line (start 10.5 4.9) (end 10.5 5.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 24d26caa-4737-41e2-b9bd-de6d17e2a163)) (fp_line (start 10.5 7.4) (end 10.5 7.8) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5da30896-deed-43f2-8211-4f6e60722386)) (fp_line (start 10.5 10) (end 10.5 10.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 98c6882d-2345-4120-9003-0279ec40fe34)) (fp_line (start 10.5 12.5) (end 10.5 12.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 82b2a2b7-61e3-4f81-ab43-afb4c64f8ace)) (fp_line (start 10.5 15.1) (end 10.5 15.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 79d0fd8b-111c-4d0e-827b-d520af7e0486)) (fp_line (start 10.5 17.6) (end 10.5 18) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c1887904-b673-4403-9b4e-ca7c76e875c9)) (fp_line (start 10.5 20.1) (end 10.5 20.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 0eead6e3-e0e3-4f8c-b5c0-17401ae32446)) (fp_line (start 10.5 22.7) (end 10.5 23.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp dd8acd31-b140-4313-905d-60c17749b101)) (fp_line (start 10.5 25.5) (end 3.7 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3d9122d8-e4c7-4d98-bb57-f525517a1dfe)) (fp_poly (pts (xy -1.5 -16.5) (xy -3.5 -16.5) (xy -3.5 -18.5) (xy -1.5 -18.5) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp 1e4fdb9e-6158-4380-8536-350c411f012e)) (fp_poly (pts (xy -1.5 -14) (xy -3.5 -14) (xy -3.5 -16) (xy -1.5 -16) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp ec87567f-5be0-45f6-9b1d-6da197e6a0fa)) (fp_poly (pts (xy -1.5 -11.5) (xy -3.5 -11.5) (xy -3.5 -13.5) (xy -1.5 -13.5) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp 7b32c344-bebe-4408-930e-92783d287468)) (fp_poly (pts (xy 3.7 -20.2) (xy -3.7 -20.2) (xy -3.7 -24.9) (xy 3.7 -24.9) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp fe82ae0a-050f-4b9e-b0c8-7702d1604f78)) (fp_line (start -11 -26) (end 11 -26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp fb172ff4-6f3a-4838-b1d9-46aaa99646d3)) (fp_line (start -11 26) (end -11 -26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp e7788c4f-5ed8-4010-a58a-b4731669d665)) (fp_line (start 11 -26) (end 11 26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp 3bbc8ca2-456e-4249-a629-2a9f411d7781)) (fp_line (start 11 26) (end -11 26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp 2566e262-7d82-4e35-acc5-8b47ba911648)) (fp_line (start -10.5 -25.5) (end 10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 91003610-d371-47f6-8577-b2b41ec6d9d5)) (fp_line (start -10.5 -24.2) (end -9.2 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp a1c5839e-534e-4df1-b759-7089ef18b2e6)) (fp_line (start -10.5 25.5) (end -10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 3c45e110-ae62-48a9-90f7-124913d5c199)) (fp_line (start 10.5 -25.5) (end 10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp ba83a40e-a07e-4bff-8b06-11e92449215d)) (fp_line (start 10.5 25.5) (end -10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 22017282-8144-48a5-a36a-a832052f075f)) (pad "" np_thru_hole oval (at -2.725 -24) (size 1.8 1.8) (drill 1.8) (layers "*.Cu" "*.Mask") (tstamp a21d54d0-4f0e-48ab-850d-717a3cc576c3)) (pad "" np_thru_hole oval (at -2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers "*.Cu" "*.Mask") (tstamp fcfff811-12a6-4899-85cb-712b72b85121)) (pad "" np_thru_hole oval (at 2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers "*.Cu" "*.Mask") (tstamp 2cc7e33a-c0f9-46c5-b881-34a906f0e7af)) (pad "" np_thru_hole oval (at 2.725 -24) (size 1.8 1.8) (drill 1.8) (layers "*.Cu" "*.Mask") (tstamp 4677240e-4e56-4a95-a7ec-c7c80fbe595a)) (pad "1" smd rect (at -8.89 -24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 16 "unconnected-(U1-GPIO0-Pad1)") (pinfunction "GPIO0") (pintype "bidirectional") (tstamp e4210aeb-258d-42b4-9dab-1b0a5406b9f0)) (pad "2" smd rect (at -8.89 -21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 17 "unconnected-(U1-GPIO1-Pad2)") (pinfunction "GPIO1") (pintype "bidirectional") (tstamp f6499ce4-4985-4571-b6a3-e2c58483bd5b)) (pad "3" smd rect (at -8.89 -19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 65 "GND2") (pinfunction "GND") (pintype "power_in") (tstamp b5d1671d-52d8-4839-b713-a44d15b09289)) (pad "4" smd rect (at -8.89 -16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 7 "unconnected-(U1-GPIO2-Pad4)") (pinfunction "GPIO2") (pintype "bidirectional") (tstamp 622b67d4-573b-4fcf-8e98-90d87898d7e7)) (pad "5" smd rect (at -8.89 -13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 8 "unconnected-(U1-GPIO3-Pad5)") (pinfunction "GPIO3") (pintype "bidirectional") (tstamp 4f593693-27dd-4b0e-8402-4c5c7dcbb4db)) (pad "6" smd rect (at -8.89 -11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 9 "unconnected-(U1-GPIO4-Pad6)") (pinfunction "GPIO4") (pintype "bidirectional") (tstamp a353ec2a-c80b-4ff0-881e-f1a8994e0284)) (pad "7" smd rect (at -8.89 -8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 10 "unconnected-(U1-GPIO5-Pad7)") (pinfunction "GPIO5") (pintype "bidirectional") (tstamp 7bc644aa-8f0e-4193-b2d8-4ad5feef6e25)) (pad "8" smd rect (at -8.89 -6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 65 "GND2") (pinfunction "GND") (pintype "power_in") (tstamp 65cc8175-8183-442e-9e4c-500dc1730133)) (pad "9" smd rect (at -8.89 -3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 12 "unconnected-(U1-GPIO6-Pad9)") (pinfunction "GPIO6") (pintype "bidirectional") (tstamp 94cd629d-05da-42d3-ae19-b32a39cf6063)) (pad "10" smd rect (at -8.89 -1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 13 "unconnected-(U1-GPIO7-Pad10)") (pinfunction "GPIO7") (pintype "bidirectional") (tstamp 95fc8607-c93d-41d0-b49c-276d37f88be6)) (pad "11" smd rect (at -8.89 1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 26 "unconnected-(U1-GPIO8-Pad11)") (pinfunction "GPIO8") (pintype "bidirectional") (tstamp 5b1a3c7e-7167-4725-a4f6-df6c4859ca7f)) (pad "12" smd rect (at -8.89 3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 67 "unconnected-(U1-GPIO9-Pad12)") (pinfunction "GPIO9") (pintype "bidirectional") (tstamp 9f114e71-a07f-4f2f-8217-8b6888eda33b)) (pad "13" smd rect (at -8.89 6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 65 "GND2") (pinfunction "GND") (pintype "power_in") (tstamp 79a2eb0c-a346-4c4b-9f20-2911c5f8d707)) (pad "14" smd rect (at -8.89 8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 14 "unconnected-(U1-GPIO10-Pad14)") (pinfunction "GPIO10") (pintype "bidirectional") (tstamp 39b7f174-759d-43a7-a77a-656bee7183fd)) (pad "15" smd rect (at -8.89 11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 15 "unconnected-(U1-GPIO11-Pad15)") (pinfunction "GPIO11") (pintype "bidirectional") (tstamp e47d9dd1-c1b7-486d-973d-ed1e257d7e50)) (pad "16" smd rect (at -8.89 13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 66 "/UART A TX") (pinfunction "GPIO12") (pintype "bidirectional") (tstamp 2b37e199-ba98-4b2e-ad78-123e43044976)) (pad "17" smd rect (at -8.89 16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 49 "unconnected-(U1-GPIO13-Pad17)") (pinfunction "GPIO13") (pintype "bidirectional") (tstamp 30b33413-34a7-41cd-9999-f9741d75211f)) (pad "18" smd rect (at -8.89 19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 65 "GND2") (pinfunction "GND") (pintype "power_in") (tstamp 6511718e-2a33-41b4-a255-a39c4432265e)) (pad "19" smd rect (at -8.89 21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 24 "Net-(J1-D+)") (pinfunction "GPIO14") (pintype "bidirectional") (tstamp d2d318a5-4545-4335-bdda-41a35dc619a1)) (pad "20" smd rect (at -8.89 24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 25 "Net-(J1-D-)") (pinfunction "GPIO15") (pintype "bidirectional") (tstamp ecd19bf0-77f4-4ca9-b079-21969387d079)) (pad "21" smd rect (at 8.89 24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 20 "unconnected-(U1-GPIO16-Pad21)") (pinfunction "GPIO16") (pintype "bidirectional") (tstamp d0ec737f-5052-4ce7-859c-028459e4f413)) (pad "22" smd rect (at 8.89 21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 21 "unconnected-(U1-GPIO17-Pad22)") (pinfunction "GPIO17") (pintype "bidirectional") (tstamp 486027d2-ca6e-4682-a274-f4929445fd89)) (pad "23" smd rect (at 8.89 19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 65 "GND2") (pinfunction "GND") (pintype "power_in") (tstamp b5887a01-534c-472b-92f4-741f639051d4)) (pad "24" smd rect (at 8.89 16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 22 "unconnected-(U1-GPIO18-Pad24)") (pinfunction "GPIO18") (pintype "bidirectional") (tstamp 1a6bf9bc-b26d-410c-af8e-b06f6a9853d9)) (pad "25" smd rect (at 8.89 13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 23 "unconnected-(U1-GPIO19-Pad25)") (pinfunction "GPIO19") (pintype "bidirectional") (tstamp dc2b8701-051e-4051-affb-fb65f9e2bc15)) (pad "26" smd rect (at 8.89 11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 18 "unconnected-(U1-GPIO20-Pad26)") (pinfunction "GPIO20") (pintype "bidirectional") (tstamp 5a969980-1fa2-40a3-be86-075e247d24aa)) (pad "27" smd rect (at 8.89 8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 19 "unconnected-(U1-GPIO21-Pad27)") (pinfunction "GPIO21") (pintype "bidirectional") (tstamp 69a01366-85eb-4069-bc3d-92bb0404c428)) (pad "28" smd rect (at 8.89 6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 65 "GND2") (pinfunction "GND") (pintype "power_in") (tstamp 4cce54b7-d3a9-4e98-9a08-3bced02b0403)) (pad "29" smd rect (at 8.89 3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 27 "unconnected-(U1-GPIO22-Pad29)") (pinfunction "GPIO22") (pintype "bidirectional") (tstamp aece97e4-1d01-491e-a953-9de4da0b1c6e)) (pad "30" smd rect (at 8.89 1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 28 "unconnected-(U1-RUN-Pad30)") (pinfunction "RUN") (pintype "input") (tstamp 45eae202-bba3-4df1-b9fd-7c793ee7c829)) (pad "31" smd rect (at 8.89 -1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 35 "unconnected-(U1-GPIO26_ADC0-Pad31)") (pinfunction "GPIO26_ADC0") (pintype "bidirectional") (tstamp 216a2363-3a76-41d5-821c-2a50b760382f)) (pad "32" smd rect (at 8.89 -3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 41 "unconnected-(U1-GPIO27_ADC1-Pad32)") (pinfunction "GPIO27_ADC1") (pintype "bidirectional") (tstamp 940526aa-a74c-4ae5-bfce-8e865f0ccc5f)) (pad "33" smd rect (at 8.89 -6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 29 "unconnected-(U1-AGND-Pad33)") (pinfunction "AGND") (pintype "power_in") (tstamp 4df980ff-9a40-47c3-a443-8eb913d32064)) (pad "34" smd rect (at 8.89 -8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 30 "unconnected-(U1-GPIO28_ADC2-Pad34)") (pinfunction "GPIO28_ADC2") (pintype "bidirectional") (tstamp 98a403aa-5e43-41ac-8bee-eac51864da5f)) (pad "35" smd rect (at 8.89 -11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 31 "unconnected-(U1-ADC_VREF-Pad35)") (pinfunction "ADC_VREF") (pintype "power_in") (tstamp 851bc281-d43c-43f4-a2c5-4e4157373660)) (pad "36" smd rect (at 8.89 -13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 6 "Net-(U1-3V3)") (pinfunction "3V3") (pintype "power_in") (tstamp 07e9af29-081c-4e7a-a272-31b4c8dc15a5)) (pad "37" smd rect (at 8.89 -16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 32 "unconnected-(U1-3V3_EN-Pad37)") (pinfunction "3V3_EN") (pintype "input") (tstamp e691748a-07c2-421a-b817-7a0b8c85c743)) (pad "38" smd rect (at 8.89 -19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 65 "GND2") (pinfunction "GND") (pintype "bidirectional") (tstamp 7cbd9f5d-1f4c-45d1-8997-031a121f2cc2)) (pad "39" smd rect (at 8.89 -21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 33 "unconnected-(U1-VSYS-Pad39)") (pinfunction "VSYS") (pintype "power_in") (tstamp ca14966a-75e5-4522-8536-94f3fbd52817)) (pad "40" smd rect (at 8.89 -24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 34 "Net-(J1-VBUS)") (pinfunction "VBUS") (pintype "power_in") (tstamp 3b312582-583c-4617-a842-d76fd5fc6ad3)) (pad "41" smd rect (at -2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 5 "Net-(J3-Pin_3)") (pinfunction "SWCLK") (pintype "input") (tstamp 35e69fa5-599c-4caf-82a2-2b5166a9f19f)) (pad "42" smd rect (at 0 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 65 "GND2") (pinfunction "GND") (pintype "power_in") (tstamp 99d248e7-1840-4f91-8131-45943baea420)) (pad "43" smd rect (at 2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 4 "Net-(J3-Pin_1)") (pinfunction "SWDIO") (pintype "bidirectional") (tstamp 574af512-0476-4508-b8da-da8976cd6d64)) (model "${KIPRJMOD}/RaspBerryPi Pico.step" (offset (xyz 0 25.5 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "MCU_RaspberryPi_and_Boards:RPi_Pico_SMD_Nohole" (layer "F.Cu") (tstamp 19a1c803-61f3-45d9-8a9c-86d3c151ef97) (at 48.885523 68.818249) (descr "Through hole straight pin header, 2x20, 2.54mm pitch, double rows") (tags "Through hole pin header THT 2x20 2.54mm double row") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (path "/cc3abbed-10c1-4aac-a096-50d15dfb6222") (attr through_hole) (fp_text reference "U2" (at 0 0) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp ddabe264-8ab9-4832-a9f8-6227a266cc3d) ) (fp_text value "Pico Secondary" (at 0 2.159) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 3cb8d314-8f50-434f-8e4a-9450ac958a56) ) (fp_text user "GP5" (at -12.8 -8.89 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 04258d86-db8d-4f2f-83cf-9be5258ae56e) ) (fp_text user " GND*" (at 12.8 -19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 06d9de45-f0bc-4bab-bbd3-4d7fd75dc0de) ) (fp_text user "CLK" (at -5.08 27.432) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 080eb970-3605-4dea-8a86-d0f5e211360c) ) (fp_text user " GP15*" (at -13.054 24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 0eb03dac-5681-444f-b662-bd902e4a78d6) ) (fp_text user "GP18" (at 13.054 16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 244993d6-b401-400c-9c81-52250a283542) ) (fp_text user " VBUS*" (at 13.3 -24.2 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 29420bbe-3d5e-48c4-8f10-f791ece49ffd) ) (fp_text user "RUN" (at 13 1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 2c09dabb-4d2f-49e2-9550-1422a633234a) ) (fp_text user "GP21" (at 13.054 8.9 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 32fbdee8-7c08-4dee-b3e5-2f2856c8943b) ) (fp_text user "VSYS" (at 13.2 -21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 3cd439a1-4545-4f75-aefa-df090a843f9b) ) (fp_text user "GP10" (at -13.054 8.89 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 407f5829-5b5e-41c8-a588-d004ae8758bb) ) (fp_text user "GP9" (at -12.8 3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 42ae899d-cb96-4cf6-b779-72e6029879ca) ) (fp_text user " GND*" (at -12.8 19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 4dba1d28-fd16-4cfc-a36d-02e78edede5b) ) (fp_text user "GP6" (at -12.8 -3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 56914d1a-7da9-4693-af1d-97c6489ec202) ) (fp_text user "GP20" (at 13.054 11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 5ae03de5-12f1-445f-a4d7-0534f3b50b2c) ) (fp_text user " GND*" (at -12.8 -19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 5e0af269-21d7-4b63-b85d-a427da8e3c7e) ) (fp_text user " GP17*" (at 13.054 21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 60192e7d-24f9-415f-972e-4eab77a5b5e7) ) (fp_text user "GP4" (at -12.8 -11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 69e44965-b51f-4579-a420-34c32d41c682) ) (fp_text user " GND*" (at -12.8 6.35 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 6a08809b-e049-49ec-a689-fecdb644c04e) ) (fp_text user "GP8" (at -12.8 1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 6eac192f-b906-44eb-85a6-d39b2e567c1d) ) (fp_text user " GP14*" (at -13.1 21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 704211ed-8e53-4fc9-8c55-04f6d1e97075) ) (fp_text user "ADC" (at 12.954 -11.684 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 7d6f187e-b6e5-4cf5-b849-48e37401213c) ) (fp_text user "GP27" (at 13.054 -3.8 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 7f9aa4ef-eac6-4c2f-96cf-e19b765125cc) ) (fp_text user "GP12" (at -13.2 13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 84aa3d4e-bd0a-489d-ac83-c4b65f19df5d) ) (fp_text user "3V3E" (at 13.208 -16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 8510f59a-a178-49a2-bdb6-3ce6e1047f02) ) (fp_text user "GP7" (at -12.7 -1.3 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 855dfaf7-6edc-4b88-8c7b-f35d25a81778) ) (fp_text user "GP0" (at -12.8 -24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 924973f6-cb24-4d5e-9b4f-944cd7b8d3c2) ) (fp_text user " 3V3*" (at 12.9 -13.9 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 9916d5ae-1ea5-4b41-aa70-6a7f9b6c33e5) ) (fp_text user " GP16*" (at 13.054 24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 99bb43bd-b729-4948-9bb2-e8ae89878b0c) ) (fp_text user " GND*" (at -12.8 -6.35 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp bae5cebf-f67e-458f-bc62-d2ede84b1ad3) ) (fp_text user "GP22" (at 13.054 3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp c6399839-b98e-4dad-88e5-e346e83d4a2f) ) (fp_text user "GP13" (at -13.054 16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp cbbe588c-8d42-4b24-a41a-459696375d11) ) (fp_text user "DATA" (at 5.842 27.432) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp cfa98284-f7e9-46ee-847f-bb04e497f0d8) ) (fp_text user "GP2" (at -12.9 -16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp d46ada76-8c72-420c-ba5f-7537be52ccb1) ) (fp_text user "GP11" (at -13.2 11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp dcfd0f66-777c-43b2-b1d9-87dd102c9f3f) ) (fp_text user " GND*" (at 12.8 19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp e1a37e64-c2ff-4550-aad7-7eee1cfd9296) ) (fp_text user "GP3" (at -12.8 -13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp e9a31474-1bf3-4127-beeb-f41c90f465bd) ) (fp_text user "AGND" (at 13.054 -6.35 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp ecb042c4-d3ea-41ca-ae78-35daf7a8ce5c) ) (fp_text user "GP19" (at 13.054 13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp f30a08aa-6dd7-4e0a-ae27-772d897f90bc) ) (fp_text user "GP26" (at 13.054 -1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp f54d0bae-92f3-4f49-b265-528dec03e8f2) ) (fp_text user "GP1" (at -12.9 -21.6 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp fabf4c16-15e9-4298-8210-f8d6be881594) ) (fp_text user "GP28" (at 13.054 -9.144 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp fdbc4915-9ace-4b52-833f-6fe1e27e2e57) ) (fp_text user "${REFERENCE}" (at 0 0 180) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp ff2c77e9-c471-461e-a1db-ee6b8f8979e0) ) (fp_line (start -10.5 -25.5) (end -10.5 -25.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2d74511d-baae-4241-b0b7-e34a28a19a31)) (fp_line (start -10.5 -25.5) (end 10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4a2d774e-316d-403b-84ed-47ea5f687d7d)) (fp_line (start -10.5 -23.1) (end -10.5 -22.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 70c7649e-ac4a-4d16-bd07-3728d7790398)) (fp_line (start -10.5 -22.833) (end -7.493 -22.833) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp be1a6617-6947-4aa1-8828-85e1c49b47fc)) (fp_line (start -10.5 -20.5) (end -10.5 -20.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 426dfae8-0c41-4a49-9f9c-05b115277fac)) (fp_line (start -10.5 -18) (end -10.5 -17.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d42206c9-0a1b-45f1-9ced-6f74d1213f80)) (fp_line (start -10.5 -15.4) (end -10.5 -15) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 165bec20-901d-4a67-8118-ab1a31a5b32c)) (fp_line (start -10.5 -12.9) (end -10.5 -12.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c1ef6c29-ba3f-4c02-af76-32a4cbca0ee9)) (fp_line (start -10.5 -10.4) (end -10.5 -10) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a97e575d-fe8e-4d3e-b88f-4f763e1d875a)) (fp_line (start -10.5 -7.8) (end -10.5 -7.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e107731f-84c8-4c7b-9126-73280c58f8cd)) (fp_line (start -10.5 -5.3) (end -10.5 -4.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 348fc391-7644-4029-89ea-3999a3448843)) (fp_line (start -10.5 -2.7) (end -10.5 -2.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 09eec7fd-56b6-4801-8010-b9d337b28c6e)) (fp_line (start -10.5 -0.2) (end -10.5 0.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 515758af-2fb4-4796-865a-dd89d2565c1a)) (fp_line (start -10.5 2.3) (end -10.5 2.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2862169f-62dd-4d40-b89e-d97589b0ae12)) (fp_line (start -10.5 4.9) (end -10.5 5.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5f86cb95-1402-44f4-ae0c-47e434a85e73)) (fp_line (start -10.5 7.4) (end -10.5 7.8) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 298e5162-948a-4f26-b67f-51a1b520300b)) (fp_line (start -10.5 10) (end -10.5 10.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a5652770-00b4-40c1-b451-bde3949a685a)) (fp_line (start -10.5 12.5) (end -10.5 12.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4da53cb4-936f-4d6e-a198-346d47215610)) (fp_line (start -10.5 15.1) (end -10.5 15.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7dc1d685-eb1f-48e7-97f4-dd7646aef2d6)) (fp_line (start -10.5 17.6) (end -10.5 18) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ec9f46dc-ec6e-4181-ad23-0e89a1b9ad76)) (fp_line (start -10.5 20.1) (end -10.5 20.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7f9333c6-99a3-4520-86a6-a43892cc19da)) (fp_line (start -10.5 22.7) (end -10.5 23.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d19e6460-9caa-4d6f-ba7c-dd09983b20df)) (fp_line (start -7.493 -22.833) (end -7.493 -25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3559ec28-42a9-4de6-bdf2-fa67dc68d3c8)) (fp_line (start -3.7 25.5) (end -10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5f8849a2-22de-42a2-b402-b02e29df3737)) (fp_line (start -1.5 25.5) (end -1.1 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a109bfd0-62f6-4d6b-8d5d-71aef4d1f1dd)) (fp_line (start 1.1 25.5) (end 1.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b6a7ff1e-bf4e-4e28-8019-450cb3ea8577)) (fp_line (start 10.5 -25.5) (end 10.5 -25.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3c5ba224-6080-470e-9709-a2f91dfb8351)) (fp_line (start 10.5 -23.1) (end 10.5 -22.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 156a6eca-efd3-4a38-a7a3-7aa7114d05ce)) (fp_line (start 10.5 -20.5) (end 10.5 -20.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 30c7c5b4-f37f-4292-9740-cf7c37eb3d31)) (fp_line (start 10.5 -18) (end 10.5 -17.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c92d7faf-fde6-4540-8fdb-135c0cc55579)) (fp_line (start 10.5 -15.4) (end 10.5 -15) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 837f2ac2-6095-4d83-bc33-bb7cc2a094b0)) (fp_line (start 10.5 -12.9) (end 10.5 -12.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 451c0769-df0f-4a73-b223-9c93e67f2d79)) (fp_line (start 10.5 -10.4) (end 10.5 -10) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ba1f06aa-000d-496f-9776-e49f173e4399)) (fp_line (start 10.5 -7.8) (end 10.5 -7.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e390c99c-6c0d-446b-827f-4e57eae14f16)) (fp_line (start 10.5 -5.3) (end 10.5 -4.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b15c98dc-5e30-4fac-b2a0-939ada889da6)) (fp_line (start 10.5 -2.7) (end 10.5 -2.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 24596ef8-9061-4bb9-a2be-af590ddc4084)) (fp_line (start 10.5 -0.2) (end 10.5 0.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1612dc6d-85b1-4c60-8ce9-affc259026d2)) (fp_line (start 10.5 2.3) (end 10.5 2.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1633a180-99be-43ce-87a0-c5b17a6cf437)) (fp_line (start 10.5 4.9) (end 10.5 5.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 93bd865a-d550-46ab-a851-5666d9d65dfa)) (fp_line (start 10.5 7.4) (end 10.5 7.8) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 88d1564e-4535-4c77-afea-957b3a2aab21)) (fp_line (start 10.5 10) (end 10.5 10.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e9017a6c-c66d-4c79-afe2-9cb7f71fcbba)) (fp_line (start 10.5 12.5) (end 10.5 12.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 263aa818-03b1-4904-912e-4005e425817b)) (fp_line (start 10.5 15.1) (end 10.5 15.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 0ce70116-7d5e-4973-b3e0-43d1c66df413)) (fp_line (start 10.5 17.6) (end 10.5 18) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a6a56047-287c-4943-932c-936a238a75ec)) (fp_line (start 10.5 20.1) (end 10.5 20.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 08ba28d6-708f-4a58-b5fd-7b8e46686874)) (fp_line (start 10.5 22.7) (end 10.5 23.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 411f6ce7-0f8d-4a09-924b-0593b4ecbdc9)) (fp_line (start 10.5 25.5) (end 3.7 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5c3b2eb3-2073-4663-b4ce-4f4603b08a31)) (fp_poly (pts (xy -1.5 -16.5) (xy -3.5 -16.5) (xy -3.5 -18.5) (xy -1.5 -18.5) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp 948b618b-1518-4344-add5-d4c13459f76e)) (fp_poly (pts (xy -1.5 -14) (xy -3.5 -14) (xy -3.5 -16) (xy -1.5 -16) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp 4874cad6-a63d-448e-b82a-add538574c84)) (fp_poly (pts (xy -1.5 -11.5) (xy -3.5 -11.5) (xy -3.5 -13.5) (xy -1.5 -13.5) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp e88985e8-3563-4c80-98f2-9dc7ce20a293)) (fp_poly (pts (xy 3.7 -20.2) (xy -3.7 -20.2) (xy -3.7 -24.9) (xy 3.7 -24.9) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp d57dd800-bcda-45ca-9dd9-4a8ab5283814)) (fp_line (start -11 -26) (end 11 -26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp ea31f58e-fc53-475b-b54d-1135be091da4)) (fp_line (start -11 26) (end -11 -26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp 35348d40-c4d6-446d-8239-2e00b363f2b3)) (fp_line (start 11 -26) (end 11 26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp 286d2b65-5a74-4f5c-a260-f6c4da7d857e)) (fp_line (start 11 26) (end -11 26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp 2009b9c0-53a3-481a-a3ba-31454217aac9)) (fp_line (start -10.5 -25.5) (end 10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 1b9d9ab0-2289-4bfc-b229-eeda81a5b48b)) (fp_line (start -10.5 -24.2) (end -9.2 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp bc113166-8799-4cd8-ada4-7979cf7dc481)) (fp_line (start -10.5 25.5) (end -10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp e4355922-9f73-4869-8f5f-0f177c19f239)) (fp_line (start 10.5 -25.5) (end 10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 5b859e28-70da-497d-b421-0c2790a1ca96)) (fp_line (start 10.5 25.5) (end -10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 5302a4db-112f-4812-aa77-bcc118f63cf5)) (pad "" np_thru_hole oval (at -2.725 -24) (size 1.8 1.8) (drill 1.8) (layers "*.Cu" "*.Mask") (tstamp 676ca96e-174f-48f3-b496-28f582da806d)) (pad "" np_thru_hole oval (at -2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers "*.Cu" "*.Mask") (tstamp c873dd5d-7780-449e-8a11-3ea1d721133b)) (pad "" np_thru_hole oval (at 2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers "*.Cu" "*.Mask") (tstamp 65182827-21fe-40c0-a8ff-82503913d837)) (pad "" np_thru_hole oval (at 2.725 -24) (size 1.8 1.8) (drill 1.8) (layers "*.Cu" "*.Mask") (tstamp 20aba79a-56e4-4154-982e-50ec4172bcef)) (pad "1" smd rect (at -8.89 -24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 36 "unconnected-(U2-GPIO0-Pad1)") (pinfunction "GPIO0") (pintype "bidirectional") (tstamp ad40065b-7c8f-4811-807e-80531b5c1130)) (pad "2" smd rect (at -8.89 -21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 11 "unconnected-(U2-GPIO1-Pad2)") (pinfunction "GPIO1") (pintype "bidirectional") (tstamp 69a36b07-c478-4f5f-8762-69df93d9144e)) (pad "3" smd rect (at -8.89 -19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 718f1a88-96e8-4954-b80d-ffaa85149085)) (pad "4" smd rect (at -8.89 -16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 37 "unconnected-(U2-GPIO2-Pad4)") (pinfunction "GPIO2") (pintype "bidirectional") (tstamp 9b806d70-e3a8-4c3d-b664-2a16cdc08fac)) (pad "5" smd rect (at -8.89 -13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 38 "unconnected-(U2-GPIO3-Pad5)") (pinfunction "GPIO3") (pintype "bidirectional") (tstamp c0e338fe-9538-4bb1-9626-cefddb09ffb8)) (pad "6" smd rect (at -8.89 -11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 39 "unconnected-(U2-GPIO4-Pad6)") (pinfunction "GPIO4") (pintype "bidirectional") (tstamp 7e0bacd6-eaa1-4706-bc14-cac730942b0b)) (pad "7" smd rect (at -8.89 -8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 40 "unconnected-(U2-GPIO5-Pad7)") (pinfunction "GPIO5") (pintype "bidirectional") (tstamp aa1d66a9-29e1-4d39-bd24-1312ddb4fd74)) (pad "8" smd rect (at -8.89 -6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (tstamp f3325d74-9c00-4ff9-a222-144593dec305)) (pad "9" smd rect (at -8.89 -3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 42 "unconnected-(U2-GPIO6-Pad9)") (pinfunction "GPIO6") (pintype "bidirectional") (tstamp d419e27b-c3d6-42ba-8f4a-afe5098f651f)) (pad "10" smd rect (at -8.89 -1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 43 "unconnected-(U2-GPIO7-Pad10)") (pinfunction "GPIO7") (pintype "bidirectional") (tstamp 929c5ed7-ba83-4d39-b011-374dd190b446)) (pad "11" smd rect (at -8.89 1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 44 "unconnected-(U2-GPIO8-Pad11)") (pinfunction "GPIO8") (pintype "bidirectional") (tstamp 6f4bb367-5902-4b37-9264-07358037d41d)) (pad "12" smd rect (at -8.89 3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 64 "unconnected-(U2-GPIO9-Pad12)") (pinfunction "GPIO9") (pintype "bidirectional") (tstamp bd1c51e2-dc05-4ef2-a16b-07d40987518f)) (pad "13" smd rect (at -8.89 6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 325b1f11-6cb9-4604-abdd-e783568bb382)) (pad "14" smd rect (at -8.89 8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 45 "unconnected-(U2-GPIO10-Pad14)") (pinfunction "GPIO10") (pintype "bidirectional") (tstamp 87564654-0382-40d3-9837-3422a4c82a3c)) (pad "15" smd rect (at -8.89 11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 46 "unconnected-(U2-GPIO11-Pad15)") (pinfunction "GPIO11") (pintype "bidirectional") (tstamp fb7ebf34-bfff-452a-a242-fb4697e23117)) (pad "16" smd rect (at -8.89 13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 47 "unconnected-(U2-GPIO12-Pad16)") (pinfunction "GPIO12") (pintype "bidirectional") (tstamp 6334b9fd-17b7-4e97-b6f2-7d12faf7cc84)) (pad "17" smd rect (at -8.89 16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 48 "unconnected-(U2-GPIO13-Pad17)") (pinfunction "GPIO13") (pintype "bidirectional") (tstamp 332092e8-b34e-48cd-b180-83d1124548f7)) (pad "18" smd rect (at -8.89 19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 966e1883-8849-47fc-8c99-b42c5b806c86)) (pad "19" smd rect (at -8.89 21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 71 "Net-(J4-D+)") (pinfunction "GPIO14") (pintype "bidirectional") (tstamp 62d75497-4e66-4a85-b511-ad5dfc272431)) (pad "20" smd rect (at -8.89 24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 70 "Net-(J4-D-)") (pinfunction "GPIO15") (pintype "bidirectional") (tstamp 455b0e4c-0f35-4e58-8bd2-980582dc1fb5)) (pad "21" smd rect (at 8.89 24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 72 "/UART B TX") (pinfunction "GPIO16") (pintype "bidirectional") (tstamp 8cac31d4-aea7-4899-9043-aa764a7b95de)) (pad "22" smd rect (at 8.89 21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 68 "/UART B RX") (pinfunction "GPIO17") (pintype "bidirectional") (tstamp 3d985066-7da6-4274-8f8c-f33bea15de3e)) (pad "23" smd rect (at 8.89 19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 0087f747-7ce2-4141-8835-9c6322daa889)) (pad "24" smd rect (at 8.89 16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 50 "unconnected-(U2-GPIO18-Pad24)") (pinfunction "GPIO18") (pintype "bidirectional") (tstamp 68ef47d2-473f-429f-bbee-c968aa2750a1)) (pad "25" smd rect (at 8.89 13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 51 "unconnected-(U2-GPIO19-Pad25)") (pinfunction "GPIO19") (pintype "bidirectional") (tstamp 836be37c-0acf-4335-b1e4-485cac0d73b1)) (pad "26" smd rect (at 8.89 11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 52 "unconnected-(U2-GPIO20-Pad26)") (pinfunction "GPIO20") (pintype "bidirectional") (tstamp d72fc457-7afb-4cde-b9c6-feab0972c06b)) (pad "27" smd rect (at 8.89 8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 53 "unconnected-(U2-GPIO21-Pad27)") (pinfunction "GPIO21") (pintype "bidirectional") (tstamp 19eccb04-bbf2-44fb-a4bf-c542f8810c05)) (pad "28" smd rect (at 8.89 6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 942d54cc-2572-449b-908e-368dafc3949f)) (pad "29" smd rect (at 8.89 3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 54 "unconnected-(U2-GPIO22-Pad29)") (pinfunction "GPIO22") (pintype "bidirectional") (tstamp 72dd74c6-52fc-4962-ac94-2264b905747e)) (pad "30" smd rect (at 8.89 1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 55 "unconnected-(U2-RUN-Pad30)") (pinfunction "RUN") (pintype "input") (tstamp de0f2e23-6402-4702-a111-10c80aaf265d)) (pad "31" smd rect (at 8.89 -1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 56 "unconnected-(U2-GPIO26_ADC0-Pad31)") (pinfunction "GPIO26_ADC0") (pintype "bidirectional") (tstamp 166be843-aa00-4f84-9c11-a688774c7db4)) (pad "32" smd rect (at 8.89 -3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 57 "unconnected-(U2-GPIO27_ADC1-Pad32)") (pinfunction "GPIO27_ADC1") (pintype "bidirectional") (tstamp 6d28a7bb-3cc1-4cd4-83be-509a38748353)) (pad "33" smd rect (at 8.89 -6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 58 "unconnected-(U2-AGND-Pad33)") (pinfunction "AGND") (pintype "power_in") (tstamp f8993eab-3f74-4a1a-a8ed-ceed1c9f4fd3)) (pad "34" smd rect (at 8.89 -8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 59 "unconnected-(U2-GPIO28_ADC2-Pad34)") (pinfunction "GPIO28_ADC2") (pintype "bidirectional") (tstamp 5e9f5125-18e1-4642-997e-c2fac8c8098d)) (pad "35" smd rect (at 8.89 -11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 60 "unconnected-(U2-ADC_VREF-Pad35)") (pinfunction "ADC_VREF") (pintype "power_in") (tstamp 7c1118b4-d51f-4623-927f-0191e5eb8b79)) (pad "36" smd rect (at 8.89 -13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 63 "Net-(U2-3V3)") (pinfunction "3V3") (pintype "power_in") (tstamp 03ac9d21-94ca-409f-83e5-81a1afb2a43b)) (pad "37" smd rect (at 8.89 -16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 61 "unconnected-(U2-3V3_EN-Pad37)") (pinfunction "3V3_EN") (pintype "input") (tstamp d1dff179-2f53-409e-84f8-9290da103878)) (pad "38" smd rect (at 8.89 -19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "bidirectional") (tstamp ca31d2df-6dd6-4a59-89e9-9b3e38449f78)) (pad "39" smd rect (at 8.89 -21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 62 "unconnected-(U2-VSYS-Pad39)") (pinfunction "VSYS") (pintype "power_in") (tstamp 80587ee6-7901-437b-9281-4323e976330d)) (pad "40" smd rect (at 8.89 -24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 69 "Net-(J4-VBUS)") (pinfunction "VBUS") (pintype "power_in") (tstamp 1bcdc7bd-a7f5-40a4-8752-c70796d95041)) (pad "41" smd rect (at -2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 3 "Net-(J2-Pin_3)") (pinfunction "SWCLK") (pintype "input") (tstamp 7a643629-7d2b-4a9b-bb61-aa278d1f8526)) (pad "42" smd rect (at 0 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 88f96918-da50-4fb8-a5c0-65470f798954)) (pad "43" smd rect (at 2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 2 "Net-(J2-Pin_1)") (pinfunction "SWDIO") (pintype "bidirectional") (tstamp 741774cf-a7a6-47eb-888d-c429262c188d)) (model "${KIPRJMOD}/RaspBerryPi Pico.step" (offset (xyz 0 25.5 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopOnly" (layer "F.Cu") (tstamp 1b9f2e0f-cd91-4586-ae15-ea415d3feafa) (at 67.31 45.212) (descr "Mounting Hole 2.7mm, M2.5") (tags "mounting hole 2.7mm m2.5") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (property "ki_description" "Mounting Hole with connection") (property "ki_keywords" "mounting hole") (path "/4a3d9b92-86b8-4f01-8c19-8709e0c6cbda") (zone_connect 2) (attr exclude_from_pos_files) (fp_text reference "H3" (at 0 -3.7) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp e6898c7f-c22f-40e6-8ff1-6ccf41410d58) ) (fp_text value "MountingHole_Pad" (at 0 3.7) (layer "F.Fab") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp cbdbd7c3-1e79-434f-a961-f4d176097f98) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 50619a5f-f1b3-4b20-a08d-301aff5cdeb6) ) (fp_circle (center 0 0) (end 2.7 0) (stroke (width 0.15) (type solid)) (fill none) (layer "Cmts.User") (tstamp 913a74b9-878a-4ee4-8cbb-7d8977d027a3)) (fp_circle (center 0 0) (end 2.95 0) (stroke (width 0.05) (type solid)) (fill none) (layer "F.CrtYd") (tstamp 57924753-bf94-4ca3-b25e-af97d0931879)) (pad "1" thru_hole circle (at 0 0) (size 3.1 3.1) (drill 2.7) (layers "*.Cu" "*.Mask") (net 65 "GND2") (pinfunction "1") (pintype "input") (tstamp d2e2e3b2-e54b-41c4-a92e-15a75d8d1dff)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "F.Cu" "F.Mask") (net 65 "GND2") (pinfunction "1") (pintype "input") (clearance 1.5) (zone_connect 2) (tstamp a9f40ecd-bd2b-4ed0-89d1-b92d048b57b8)) ) (footprint "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" (layer "F.Cu") (tstamp 25cfbf74-2d77-4d4f-b5b6-edb0e48bc6fb) (at 70.604191 74.877665) (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags "capacitor handsolder") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (property "ki_description" "Unpolarized capacitor") (property "ki_keywords" "cap capacitor") (path "/3c58f69e-1b44-4a9e-8696-820df6d6d00b") (attr smd) (fp_text reference "C2" (at 0.134809 1.830335) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 06cb8b2c-1271-446d-a93d-130a270fe442) ) (fp_text value "100n" (at 0 1.85) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 45f145a1-cfac-4ae2-b12e-cd2317668e99) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") (effects (font (size 0.8 0.8) (thickness 0.12))) (tstamp 1d1c1c04-8687-42a3-b30b-3975b45e55b1) ) (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp efd58e32-c226-4eac-9345-ec6de9d00d73)) (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2b13d5eb-4cb5-4924-940d-e27a4f6847e2)) (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 4ae4f263-7119-469c-81bf-e50b6dfdee03)) (fp_line (start -2.48 1.15) (end -2.48 -1.15) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp e9e03ea7-dead-41a1-87e9-325a612c0868)) (fp_line (start 2.48 -1.15) (end 2.48 1.15) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp f8efecbd-ac29-4733-8df2-d6ce5cdde2dd)) (fp_line (start 2.48 1.15) (end -2.48 1.15) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp fe15c09c-21ee-4a90-b17d-e9afec0f8d01)) (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 6fc13062-b859-4f21-898c-10f2829fecf5)) (fp_line (start -1.6 0.8) (end -1.6 -0.8) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp dee16421-5bcd-4525-96e9-b39af8801ae6)) (fp_line (start 1.6 -0.8) (end 1.6 0.8) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 755c7f54-03bb-4c37-80dd-b17d295c46dc)) (fp_line (start 1.6 0.8) (end -1.6 0.8) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b3068732-12de-414d-b549-83fd276650e4)) (pad "1" smd roundrect (at -1.5625 0) (size 1.325 1.8) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1886792453) (net 6 "Net-(U1-3V3)") (pintype "passive") (tstamp 9bd72c46-e1eb-4840-9ee6-31ecb5dba4fa)) (pad "2" smd roundrect (at 1.5625 0) (size 1.325 1.8) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1886792453) (net 65 "GND2") (pintype "passive") (tstamp 17e3b13b-815f-419b-a3dc-b10134a0bf76)) (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Connector_USB:USB_A_Molex_67643_Horizontal" (layer "F.Cu") (tstamp 2cfc9fc7-3505-4960-be5a-5e1f064ea836) (at 45.776 101.574) (descr "USB type A, Horizontal, https://www.molex.com/pdm_docs/sd/676433910_sd.pdf") (tags "USB_A Female Connector receptacle") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (property "ki_description" "USB Type A connector") (property "ki_keywords" "connector USB") (path "/e72b3351-45d9-41aa-8df7-943302db5ce3") (attr through_hole) (fp_text reference "J4" (at 3.6016 -3.53) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 18dfc54e-b5d3-4f59-ab98-35bd445b0f8b) ) (fp_text value "Mouse In" (at 3.5 14.5) (layer "F.Fab") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 406d1a2b-e2fb-4293-8533-431de2c10764) ) (fp_text user "${REFERENCE}" (at 3.5 3.7) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 65d1aae9-29b4-4503-89c4-0b9986809c9c) ) (fp_line (start -3.81 12.58) (end -3.81 13.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4d9f73f3-a180-4185-b614-db89044fe05c)) (fp_line (start -3.81 13.1) (end 10.81 13.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c6f5ffa8-3aad-408a-bb53-a645fb00dfc6)) (fp_line (start -3.16 -2.38) (end -3.16 0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e3b766c9-8a71-41b3-b613-c468088c9733)) (fp_line (start -3.16 -2.38) (end 10.16 -2.38) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b8153ea8-05a1-4cee-b2a1-8d53530e834f)) (fp_line (start -3.16 12.58) (end -3.81 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2e966f92-394d-4f4b-9e2a-af2eb0e4d997)) (fp_line (start -3.16 12.58) (end -3.16 4.47) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp caa91de3-9d0b-42ef-96a1-f6a77c8458e5)) (fp_line (start -0.9 -2.6) (end 0.9 -2.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b9e50008-355d-4bde-866b-70fe6acc9068)) (fp_line (start 10.16 -2.38) (end 10.16 0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c5d62167-6095-446c-a946-9120100a6a1b)) (fp_line (start 10.16 4.47) (end 10.16 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b0948b23-ae83-4713-885c-72a4e14c7b73)) (fp_line (start 10.81 12.58) (end 10.16 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d5c230e3-40e7-4145-a327-350301e38560)) (fp_line (start 10.81 13.1) (end 10.81 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a7493b8f-ed0b-43bd-a6c0-40ee83327a51)) (fp_line (start -4.2 12.19) (end -3.55 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 46ecb198-4698-4974-8d13-97d4f8c42d50)) (fp_line (start -4.2 13.49) (end -4.2 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 513c9e29-fedc-402f-9241-c891019896eb)) (fp_line (start -4.2 13.49) (end 11.2 13.49) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 599cc9dd-c44f-43b9-ac37-2b6e427bc683)) (fp_line (start -3.55 -2.77) (end -3.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp e676aa78-9a1c-4e03-ac50-5c36883046c0)) (fp_line (start -3.55 -2.77) (end 10.55 -2.77) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 98ba33bb-405f-40a7-9077-7c4991c4646b)) (fp_line (start -3.55 12.19) (end -3.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp c660e596-f187-4706-87e0-c6cfde6d2a8e)) (fp_line (start 10.55 -2.77) (end 10.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp e50675b5-f419-4a41-a87e-d4978441d0ff)) (fp_line (start 10.55 12.19) (end 10.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 87e6736f-24ed-4914-8406-68f82e64f991)) (fp_line (start 11.2 12.19) (end 10.55 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 77063c2b-cc3e-42e2-8626-9e927b33e8d1)) (fp_line (start 11.2 13.49) (end 11.2 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 198214a3-c962-4f1c-b391-255ae62f0f71)) (fp_arc (start -3.55 4.66) (mid -5.078208 2.71) (end -3.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp d7e91c72-6933-4270-85ea-ce43578869a8)) (fp_arc (start 10.55 0.76) (mid 12.078208 2.71) (end 10.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 99a2b3e5-ecc6-48e2-8a9f-b873fdd25b55)) (fp_line (start -3.7 12.69) (end -3.7 12.99) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 8daebb05-9f00-4ce5-8f6e-795192422aa1)) (fp_line (start -3.7 12.99) (end 10.7 12.99) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 1d2358ae-58aa-4926-b2fe-41f9c24b4d39)) (fp_line (start -3.05 -2.27) (end 10.05 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 0208bd60-6f8e-4c9c-b7ed-8f439c11b1d4)) (fp_line (start -3.05 9.27) (end 10.05 9.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp d313ba07-d107-44f6-9f3c-52c044ab5226)) (fp_line (start -3.05 12.69) (end -3.7 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b87612c1-e58e-49cd-a020-8bb71003745c)) (fp_line (start -3.05 12.69) (end -3.05 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b8618599-82c5-45c6-ab94-86eb49ec1e78)) (fp_line (start -1 -2.27) (end 0 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 4f5546dd-b568-4e0f-9e03-d84fbb151925)) (fp_line (start 0 -1.27) (end 1 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 77c8b922-f341-41dc-adfd-5be66d985e0e)) (fp_line (start 10.05 -2.27) (end 10.05 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 30256a3f-26b3-4819-a96a-1068f78261f2)) (fp_line (start 10.7 12.69) (end 10.05 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 49240dd6-d222-4f04-b424-14d562753db7)) (fp_line (start 10.7 12.99) (end 10.7 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp af84d01f-d41c-41aa-b893-71ea4a8e9052)) (pad "1" thru_hole rect (at 0 0) (size 1.6 1.5) (drill 0.95) (layers "*.Cu" "*.Mask") (net 69 "Net-(J4-VBUS)") (pinfunction "VBUS") (pintype "power_in") (tstamp f1ac86ee-d2ca-49ca-8170-cb9ddc730178)) (pad "2" thru_hole circle (at 2.5 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 70 "Net-(J4-D-)") (pinfunction "D-") (pintype "bidirectional") (tstamp 34d6fc0e-ce44-48ec-8a72-d38143b40300)) (pad "3" thru_hole circle (at 4.5 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 71 "Net-(J4-D+)") (pinfunction "D+") (pintype "bidirectional") (tstamp c8797a4b-dc75-451a-8b91-5c5d526dbe54)) (pad "4" thru_hole circle (at 7 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 435b2837-fd47-430d-9c96-84b3a6043326)) (pad "5" thru_hole circle (at -3.07 2.71) (size 3 3) (drill 2.3) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "Shield") (pintype "passive") (tstamp fc4de2cc-dc60-425d-80b7-83f90197aa43)) (pad "5" thru_hole circle (at 10.07 2.71) (size 3 3) (drill 2.3) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "Shield") (pintype "passive") (tstamp 5851ba89-91a5-4146-ad41-1446461c8383)) (model "/Users/hrvoje/Misc/Electronics/STP/Molex 676432911.stp" (offset (xyz 3.5 2.2 0)) (scale (xyz 1 1 1)) (rotate (xyz -90 0 0)) ) ) (footprint "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (layer "F.Cu") (tstamp 2ea228c0-45b8-4d36-ad1f-d021577af8d2) (at 95.667537 99.795757) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (property "ki_description" "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)") (property "ki_keywords" "connector") (path "/00000000-0000-0000-0000-0000602c32a2") (attr through_hole) (fp_text reference "J3" (at 0 -2.33) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 8ad1cb78-ec97-42d7-bea2-8f4007871550) ) (fp_text value "Debug1" (at 0 7.41) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 7d619b0e-26ec-412b-94b3-c1a1bf945f8c) ) (fp_text user "${REFERENCE}" (at 0 2.54 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp b4fdaf2f-5a07-49a2-a76b-91dbe95ff256) ) (fp_line (start -1.33 -1.33) (end 0 -1.33) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7780fea2-b9a0-43a6-83a8-beccfb99694c)) (fp_line (start -1.33 0) (end -1.33 -1.33) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 62749358-1031-4256-b873-eb2488b519a6)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5bb9a329-70a9-4d77-a8a1-00dcf9d7a555)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d55db37c-51d0-475d-a8a1-8cdea38c9307)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 58fcb94d-1b24-4f75-b688-bfba88eb11f3)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d1dbe7a2-dc1d-48cf-ae9f-a418b5f3a88f)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 2fe7b897-f351-432d-8598-dc30971012bc)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 4d56d7ed-69aa-47ee-81d1-b9ad15795c13)) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1bc8a487-ade2-4d04-a5a2-241e7c6375be)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp fc4bbb61-8343-42b0-84a3-c03e284b06cd)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp bb421ffe-0112-435a-838b-f2fce1c1b26a)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 97ccb9a2-4b02-45f9-9036-eac6036a4baf)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 497c38ec-5277-43e7-8a13-d52ae6db5cfb)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 0cf694bf-37e0-4ceb-a6bd-b335ff12f8af)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 9096b13a-93d9-4f4d-9717-7a5f7502d0dd)) (pad "1" thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 4 "Net-(J3-Pin_1)") (pinfunction "Pin_1") (pintype "passive") (tstamp 733016d8-a96f-482c-a633-a0ca47baa77b)) (pad "2" thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 65 "GND2") (pinfunction "Pin_2") (pintype "passive") (tstamp ac9d8d47-9aff-46f3-8408-676619123da9)) (pad "3" thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 5 "Net-(J3-Pin_3)") (pinfunction "Pin_3") (pintype "passive") (tstamp c02fc6db-5138-4cfd-94e5-5ebaa55401a1)) (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopBottom" (layer "F.Cu") (tstamp 6ce853db-9930-415c-909c-edc609471e10) (at 96.774 111.506) (descr "Mounting Hole 2.7mm, M2.5") (tags "mounting hole 2.7mm m2.5") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (property "ki_description" "Mounting Hole with connection") (property "ki_keywords" "mounting hole") (path "/1c8614e8-4d82-4d74-b1f8-1b1a1ec90a13") (attr exclude_from_pos_files) (fp_text reference "H2" (at 0 -3.7) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 0e0f60d6-13b4-40da-b7ee-3433df1fce43) ) (fp_text value "MountingHole_Pad" (at 0 3.7) (layer "F.Fab") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp dd88ba04-246c-49f1-9f18-3b1ce040b8a0) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp a3113c03-654d-4676-87b9-bbfba4d9ee26) ) (fp_circle (center 0 0) (end 2.7 0) (stroke (width 0.15) (type solid)) (fill none) (layer "Cmts.User") (tstamp 273851b9-d155-4899-ba89-701a993fa274)) (fp_circle (center 0 0) (end 2.95 0) (stroke (width 0.05) (type solid)) (fill none) (layer "F.CrtYd") (tstamp 89bce21c-c0da-479b-985f-e4d4dbb899dc)) (pad "1" thru_hole circle (at 0 0) (size 3.1 3.1) (drill 2.7) (layers "*.Cu" "*.Mask") (net 65 "GND2") (pinfunction "1") (pintype "input") (tstamp b6dff91c-3eae-44aa-a875-1f014aaa08cb)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "F.Cu" "F.Mask") (net 65 "GND2") (pinfunction "1") (pintype "input") (zone_connect 2) (tstamp 28a650b0-b302-4440-9944-5b2652c82335)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "B.Cu" "B.Mask") (net 65 "GND2") (pinfunction "1") (pintype "input") (tstamp a60bbf74-fc03-4611-9f13-75d7e055df20)) ) (footprint "Connector_USB:USB_A_Molex_67643_Horizontal" (layer "F.Cu") (tstamp 90b4ab32-d9f6-4d15-b605-01b0b687c666) (at 81.082 101.574) (descr "USB type A, Horizontal, https://www.molex.com/pdm_docs/sd/676433910_sd.pdf") (tags "USB_A Female Connector receptacle") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (property "ki_description" "USB Type A connector") (property "ki_keywords" "connector USB") (path "/06ca7a46-083a-44e4-bd6d-8226f9b9eca9") (attr through_hole) (fp_text reference "J1" (at 6.006 -3.53) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 970ea3ff-72b1-457d-b4bd-1dd0112e732d) ) (fp_text value "Keyboard In" (at 3.5 14.5) (layer "F.Fab") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp ad7067bd-852b-42f1-b9d1-c285a33262aa) ) (fp_text user "${REFERENCE}" (at 3.212 11.456) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 10203c1c-7cd9-4e37-a1e4-a53345e68560) ) (fp_line (start -3.81 12.58) (end -3.81 13.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp bc555d36-9c31-4983-af71-5b479ff47aa5)) (fp_line (start -3.81 13.1) (end 10.81 13.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 81fb9dc2-389f-4ebe-a0de-c2853dd946f1)) (fp_line (start -3.16 -2.38) (end -3.16 0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6e06c575-388e-423f-82c8-12d9697e326b)) (fp_line (start -3.16 -2.38) (end 10.16 -2.38) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 67d737c0-79e4-4aa7-962f-a2bc3bd19eeb)) (fp_line (start -3.16 12.58) (end -3.81 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 45901407-1731-45cd-a58b-1d71c8e97abb)) (fp_line (start -3.16 12.58) (end -3.16 4.47) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 06065b41-399d-4a0b-bd5a-4fe0cd72e599)) (fp_line (start -0.9 -2.6) (end 0.9 -2.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ee28fd2e-07df-4854-85fa-ce39c27d4887)) (fp_line (start 10.16 -2.38) (end 10.16 0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ee5b1c25-cf98-4c56-ae61-4f713ff22b1f)) (fp_line (start 10.16 4.47) (end 10.16 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 29c61737-83e4-47ea-bb82-f8689c20ab05)) (fp_line (start 10.81 12.58) (end 10.16 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp cf71e222-7377-4a67-b875-774ebcc0a195)) (fp_line (start 10.81 13.1) (end 10.81 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3ecfe47a-7cba-42d5-99c2-103860aaabdf)) (fp_line (start -4.2 12.19) (end -3.55 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 50058a12-1774-4945-82a1-286438d09205)) (fp_line (start -4.2 13.49) (end -4.2 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 66487a45-0947-4fcf-aa48-36ed366293b5)) (fp_line (start -4.2 13.49) (end 11.2 13.49) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 54604a26-15fd-485e-be63-c160d75fd193)) (fp_line (start -3.55 -2.77) (end -3.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 54462c45-ddb5-42b7-ad1d-f03e4fc5353d)) (fp_line (start -3.55 -2.77) (end 10.55 -2.77) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp c3c6e059-12a4-41d6-9a24-85b86a743326)) (fp_line (start -3.55 12.19) (end -3.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 5b635db7-701e-426e-87e3-89d3af7d536f)) (fp_line (start 10.55 -2.77) (end 10.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 035f5879-f97e-41d7-8441-15a96a42be85)) (fp_line (start 10.55 12.19) (end 10.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 8ba988f4-5b5e-40fc-afc3-6e37d993ee5d)) (fp_line (start 11.2 12.19) (end 10.55 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1274211b-c7ca-4195-b216-4659387ecc2d)) (fp_line (start 11.2 13.49) (end 11.2 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp aa6cacd6-a10f-42b9-bd9d-52e922193e9c)) (fp_arc (start -3.55 4.66) (mid -5.078208 2.71) (end -3.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 04b304ca-1625-4d3f-81de-620a0166d469)) (fp_arc (start 10.55 0.76) (mid 12.078208 2.71) (end 10.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 6dcd9bd1-e6a4-4899-9172-54e1597bff11)) (fp_line (start -3.7 12.69) (end -3.7 12.99) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 27f1dc6f-b57b-41cf-a2dc-d3eaf44fc75b)) (fp_line (start -3.7 12.99) (end 10.7 12.99) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b89f3404-444a-4a20-bd61-f3a1441c9e88)) (fp_line (start -3.05 -2.27) (end 10.05 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp e6a39088-8980-4b71-973b-51210ab3fdd6)) (fp_line (start -3.05 9.27) (end 10.05 9.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7f4f5b9f-34ff-4e16-825b-a2594d9babf4)) (fp_line (start -3.05 12.69) (end -3.7 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 3979d1fb-7017-40e0-8fa6-476be951a3a8)) (fp_line (start -3.05 12.69) (end -3.05 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2eb849bc-f30a-43ae-967d-dc154d813217)) (fp_line (start -1 -2.27) (end 0 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2040845f-ecd1-4504-a642-b150c0f9e6e0)) (fp_line (start 0 -1.27) (end 1 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a195412a-986c-4ea4-879b-c565e67240bb)) (fp_line (start 10.05 -2.27) (end 10.05 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 67581ebe-6386-4283-9b90-009cf4b82103)) (fp_line (start 10.7 12.69) (end 10.05 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 3576dd78-9e0c-4a14-8eaa-6d32513df844)) (fp_line (start 10.7 12.99) (end 10.7 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2dc084d1-5244-43f8-b2c7-6848ea3e9e8f)) (pad "1" thru_hole rect (at 0 0) (size 1.6 1.5) (drill 0.95) (layers "*.Cu" "*.Mask") (net 34 "Net-(J1-VBUS)") (pinfunction "VBUS") (pintype "power_in") (tstamp 15441569-5fff-4e55-ba43-c5219f735cb7)) (pad "2" thru_hole circle (at 2.5 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 25 "Net-(J1-D-)") (pinfunction "D-") (pintype "bidirectional") (tstamp edc311f3-ced0-4643-abef-819ae0817167)) (pad "3" thru_hole circle (at 4.5 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 24 "Net-(J1-D+)") (pinfunction "D+") (pintype "bidirectional") (tstamp da8ec577-c260-4681-aca9-c2ee0d61a9d8)) (pad "4" thru_hole circle (at 7 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 65 "GND2") (pinfunction "GND") (pintype "power_in") (tstamp 5797bf27-fbee-4ecf-a050-b4c274738b70)) (pad "5" thru_hole circle (at -3.07 2.71) (size 3 3) (drill 2.3) (layers "*.Cu" "*.Mask") (net 65 "GND2") (pinfunction "Shield") (pintype "passive") (tstamp 33d0ba86-10e0-44c9-b651-b415592b8a1b)) (pad "5" thru_hole circle (at 10.07 2.71) (size 3 3) (drill 2.3) (layers "*.Cu" "*.Mask") (net 65 "GND2") (pinfunction "Shield") (pintype "passive") (tstamp 2476fced-aabc-4aac-9c8e-b5c4741258e4)) (model "/Users/hrvoje/Misc/Electronics/STP/Molex 676432911.stp" (offset (xyz 3.5 2.2 0)) (scale (xyz 1 1 1)) (rotate (xyz -90 0 0)) ) ) (footprint "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopBottom" (layer "F.Cu") (tstamp 9b928342-d61c-40f1-955d-678f9170bfe5) (at 37.846 111.506) (descr "Mounting Hole 2.7mm, M2.5") (tags "mounting hole 2.7mm m2.5") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (property "ki_description" "Mounting Hole with connection") (property "ki_keywords" "mounting hole") (path "/018789e2-c44c-4899-984c-f44a168bc676") (attr exclude_from_pos_files) (fp_text reference "H1" (at 0 -3.7) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 43e815f0-7399-4c87-bf8d-d66a9b68d419) ) (fp_text value "MountingHole_Pad" (at 0 3.7) (layer "F.Fab") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 6d959634-a6f0-4607-9f82-901fd532a073) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 733b1602-fc13-461b-8689-ead46e4d7e53) ) (fp_circle (center 0 0) (end 2.7 0) (stroke (width 0.15) (type solid)) (fill none) (layer "Cmts.User") (tstamp 77435779-6bdc-4a4b-af0f-3ff29e94f17d)) (fp_circle (center 0 0) (end 2.95 0) (stroke (width 0.05) (type solid)) (fill none) (layer "F.CrtYd") (tstamp d029b0af-0c0b-46a7-8d23-9c8383e4cc4d)) (pad "1" thru_hole circle (at 0 0) (size 3.1 3.1) (drill 2.7) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "1") (pintype "input") (tstamp 38aba840-4f9b-4684-9cc4-f2da29563266)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "1") (pintype "input") (zone_connect 2) (tstamp 5fcc61f5-7af5-44f5-b8ed-1def20eb8ee9)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "B.Cu" "B.Mask") (net 1 "GND") (pinfunction "1") (pintype "input") (tstamp 62e3d600-dfc4-4873-8667-e3b500a24b5d)) ) (footprint "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (layer "F.Cu") (tstamp 9ddef31a-9e6a-4cc3-860c-9bd9e31b90e6) (at 67.22807 84.47611) (descr "SOIC, 8 Pin (JEDEC MS-012AA, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_8.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (property "ki_description" "Dual-Channel Digital Isolator, 10Mbps 50ns, bidirectional communication, 3V/5V level translation, SOIC-8") (property "ki_keywords" "2Ch Dual Digital Isolator 10Mbps") (path "/24926d99-a33a-49d8-9b11-27c6c1201b83") (attr smd) (fp_text reference "U4" (at 1.3716 3.7084) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 2b9758dc-b500-4336-b257-21114f76caf0) ) (fp_text value "ADuM1201BR" (at 0 3.4) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp e3010dce-4994-41f6-a82b-72256756da18) ) (fp_text user "${REFERENCE}" (at 1.524 4.318) (layer "F.Fab") (effects (font (size 0.98 0.98) (thickness 0.15))) (tstamp b2d88a1d-0d7f-4123-86e7-7c1d7185aefb) ) (fp_line (start 0 -2.56) (end -3.45 -2.56) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d3fc6fb5-c738-4b5e-b653-5a605b1681d2)) (fp_line (start 0 -2.56) (end 1.95 -2.56) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 8ab12221-6791-44ec-9243-31867ef8fa68)) (fp_line (start 0 2.56) (end -1.95 2.56) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp aad4d62b-bd71-4f35-8812-4f855a2b65fa)) (fp_line (start 0 2.56) (end 1.95 2.56) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 25370b97-4325-4685-8d98-e4e16dcf82e6)) (fp_line (start -3.7 -2.7) (end -3.7 2.7) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 5da30f2c-1f3d-4de2-affc-5063ea790649)) (fp_line (start -3.7 2.7) (end 3.7 2.7) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 326958fe-a545-40da-8e1a-aa1b121c0bd3)) (fp_line (start 3.7 -2.7) (end -3.7 -2.7) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 137f68dd-acd4-4cf6-9443-c3743fdf89d1)) (fp_line (start 3.7 2.7) (end 3.7 -2.7) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 7c928ec4-d8a3-4b53-b6cf-e641e61b3b2a)) (fp_line (start -1.95 -1.475) (end -0.975 -2.45) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 66002b72-14ca-4a7b-b6ad-4d893a4b889d)) (fp_line (start -1.95 2.45) (end -1.95 -1.475) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 69191b0f-3fb5-4699-a801-bef782404dd7)) (fp_line (start -0.975 -2.45) (end 1.95 -2.45) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b3d7ea26-abe6-40c7-8e70-8c821680b648)) (fp_line (start 1.95 -2.45) (end 1.95 2.45) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2b0e0fbb-fd60-4b74-916d-71c9fe0c1747)) (fp_line (start 1.95 2.45) (end -1.95 2.45) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 192098ef-348c-42fc-aa85-5bc5d37e8254)) (pad "1" smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 63 "Net-(U2-3V3)") (pinfunction "VDD1") (pintype "power_in") (tstamp f9e42380-0b99-49a8-9cf3-8555d08de650)) (pad "2" smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 68 "/UART B RX") (pinfunction "VOA") (pintype "output") (tstamp 5539636d-f8e0-49b1-ad39-a0101820d9a7)) (pad "3" smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 72 "/UART B TX") (pinfunction "VIB") (pintype "input") (tstamp d0ed79a1-d6e4-4077-a609-8f2e75ea858e)) (pad "4" smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 1 "GND") (pinfunction "GND1") (pintype "power_in") (tstamp ab7209e6-68cb-42a7-9987-8996a6625b36)) (pad "5" smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 65 "GND2") (pinfunction "GND2") (pintype "power_in") (tstamp 0bccb03a-07af-4ec4-91a2-4390ca61efec)) (pad "6" smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (pinfunction "VOB") (pintype "output") (tstamp 19522420-5c78-43d2-be12-f9b2fbd26e04)) (pad "7" smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 66 "/UART A TX") (pinfunction "VIA") (pintype "input") (tstamp acf1e9fa-2e6c-49b7-ae34-aed41e29fd23)) (pad "8" smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 6 "Net-(U1-3V3)") (pinfunction "VDD2") (pintype "power_in") (tstamp 4fc80276-30fc-4f1d-8159-0c9399c3da5f)) (model "${KICAD6_3DMODEL_DIR}/Package_SO.3dshapes/SOIC-8_3.9x4.9mm_P1.27mm.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (layer "F.Cu") (tstamp b850c441-574b-451d-bb4d-17d12aa369c9) (at 60.731042 99.717876) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (property "ki_description" "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)") (property "ki_keywords" "connector") (path "/a1fae2a3-1469-4814-90b8-03b3f1461146") (attr through_hole) (fp_text reference "J2" (at 0 -2.33) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp e1a10acf-2291-4a9c-9f3e-49ea28d621a8) ) (fp_text value "Debug2" (at 0 7.41) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp f8558506-c50f-4f72-bb8b-0a60569604dc) ) (fp_text user "${REFERENCE}" (at 0 2.54 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 0adfea68-022b-460f-a0c7-f512f00b55d6) ) (fp_line (start -1.33 -1.33) (end 0 -1.33) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 41aee375-8bf6-477a-b882-26080f36e634)) (fp_line (start -1.33 0) (end -1.33 -1.33) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp f2c889d5-c5ba-44ee-8050-afe023cc5802)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1a659f1d-aa46-4cdb-b473-789a46ca7582)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 44dcaf47-6ac6-49af-80a0-2666945d7e79)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 616c63e6-d096-49e4-8bbe-1f500af09277)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 91468eed-02fb-4908-a3e2-0f380e678340)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1c4ea6f9-ead1-498d-81df-7c493bcc0f36)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 598bd9c9-054d-49b3-aa48-8870319b1bac)) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 19eccdca-616b-4743-b6a1-20d9bc644665)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 43f938ca-8875-4752-a835-976d845a0c26)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7dbdc97c-3642-43f6-9119-1e7e777800f6)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7dad61fc-f27f-4bfc-adc4-affbe5232cad)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 3b0fe11c-ab0c-4535-bbe0-b42becdfc9d7)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp ecb42f36-5bae-4058-8c64-e09ea8eb6aa6)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a5797031-a720-4380-96a5-cc23840646c9)) (pad "1" thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 2 "Net-(J2-Pin_1)") (pinfunction "Pin_1") (pintype "passive") (tstamp beaddb3a-0cc5-4e99-b139-57826c3e0fa6)) (pad "2" thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "Pin_2") (pintype "passive") (tstamp 87bf79bd-97cf-4c26-b0bd-2417f19d85b9)) (pad "3" thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 3 "Net-(J2-Pin_3)") (pinfunction "Pin_3") (pintype "passive") (tstamp 667232b1-a5a3-4181-b5d8-2a1860467edd)) (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" (layer "F.Cu") (tstamp e878bfdf-f621-4966-ab5f-5a588380668b) (at 64.010036 74.929999 180) (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags "capacitor handsolder") (property "Sheetfile" "DeskHop.kicad_sch") (property "Sheetname" "") (property "ki_description" "Unpolarized capacitor") (property "ki_keywords" "cap capacitor") (path "/fb534856-14b0-4379-bd15-7952c4f76624") (attr smd) (fp_text reference "C1" (at -0.099564 -1.727201) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 2a770326-88ad-4947-9ace-cdc0b6ff3bb8) ) (fp_text value "100n" (at 0 1.85) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 934813f5-c1b0-4758-b804-d8639418cb0f) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") (effects (font (size 0.8 0.8) (thickness 0.12))) (tstamp 7c9036a0-f537-41f1-a3c4-fb005e57a61b) ) (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e3222405-a6fb-48a5-abb3-398b959b041a)) (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 21043b87-f8c1-4295-a7d6-14176dff7cf1)) (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 61ddbaa1-2f80-495a-911f-683df00ece02)) (fp_line (start -2.48 1.15) (end -2.48 -1.15) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 75eb23fb-3e96-47f5-845a-4b09a006deed)) (fp_line (start 2.48 -1.15) (end 2.48 1.15) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp ff218174-da33-486b-8f50-5ca600d32248)) (fp_line (start 2.48 1.15) (end -2.48 1.15) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 647eebb2-0194-408e-a80c-12e0e67dbc69)) (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b9fe3996-0ec3-4d7a-98dd-58dc9805e305)) (fp_line (start -1.6 0.8) (end -1.6 -0.8) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a3be5824-6a70-4a6f-b55e-deb2853dad92)) (fp_line (start 1.6 -0.8) (end 1.6 0.8) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 386e2994-017a-410f-851b-7f366c467da3)) (fp_line (start 1.6 0.8) (end -1.6 0.8) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp dd248560-0ec9-4e77-97c6-52f06acd7b25)) (pad "1" smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1886792453) (net 63 "Net-(U2-3V3)") (pintype "passive") (tstamp 3cd2c8ee-8d37-4a4b-aa03-26fece1427a1)) (pad "2" smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1886792453) (net 1 "GND") (pintype "passive") (tstamp 18a6ee82-faf1-4d19-ab4c-5c9bf77a9f30)) (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (gr_arc (start 66.360432 49.447208) (mid 62.980006 45.511702) (end 65.786 41.148001) (stroke (width 0.2) (type default)) (layer "B.Cu") (tstamp 614953a2-42d5-45bb-9407-49ec74741ef0)) (gr_poly (pts (xy 57.015381 82.044061) (xy 60.317381 82.044061) (xy 60.317381 83.568061) (xy 57.015381 83.568061) (xy 57.015381 82.044061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 015ed977-e1e7-494d-8650-65dd406030ab)) (gr_poly (pts (xy 93.472 79.502) (xy 96.774 79.502) (xy 96.774 81.026) (xy 93.472 81.026) (xy 93.472 79.502) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 016be97c-6dce-4e90-9e73-395e27c2f50a)) (gr_poly (pts (xy 57.013734 69.301047) (xy 60.315734 69.301047) (xy 60.315734 70.825047) (xy 57.013734 70.825047) (xy 57.013734 69.301047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 01d761c3-593e-444b-9e42-603af00635af)) (gr_poly (pts (xy 37.419244 66.758544) (xy 40.721244 66.758544) (xy 40.721244 68.282544) (xy 37.419244 68.282544) (xy 37.419244 66.758544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 05a40193-8a46-43ab-b47a-4ac67ca804f7)) (gr_poly (pts (xy 73.914 87.122) (xy 77.216 87.122) (xy 77.216 88.646) (xy 73.914 88.646) (xy 73.914 87.122) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 06c2c13d-75b1-40d7-a5a1-9d937a0907d1)) (gr_poly (pts (xy 37.419244 76.918544) (xy 40.721244 76.918544) (xy 40.721244 78.442544) (xy 37.419244 78.442544) (xy 37.419244 76.918544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 08a0ad21-db6e-4c93-8a66-3e2efd7d3f3d)) (gr_poly (pts (xy 37.419244 59.138544) (xy 40.721244 59.138544) (xy 40.721244 60.662544) (xy 37.419244 60.662544) (xy 37.419244 59.138544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 09d69073-116f-477c-9c70-5eddde233f8d)) (gr_poly (pts (xy 93.472 49.022) (xy 96.774 49.022) (xy 96.774 50.546) (xy 93.472 50.546) (xy 93.472 49.022) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 104d1c41-6c6c-414d-8c93-31da40f16397)) (gr_poly (pts (xy 93.472 69.342) (xy 96.774 69.342) (xy 96.774 70.866) (xy 93.472 70.866) (xy 93.472 69.342) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 109e1cce-ff94-4dbf-9a69-05cc8698164d)) (gr_poly (pts (xy 73.914 79.502) (xy 77.216 79.502) (xy 77.216 81.026) (xy 73.914 81.026) (xy 73.914 79.502) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 14cea217-0d2b-4fde-a46a-b6bbe2940d1d)) (gr_poly (pts (xy 93.472 87.122) (xy 96.774 87.122) (xy 96.774 88.646) (xy 93.472 88.646) (xy 93.472 87.122) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 18ff6fb1-1db7-485f-bae2-7c94133dfe3b)) (gr_poly (pts (xy 57.013734 71.841047) (xy 60.315734 71.841047) (xy 60.315734 73.365047) (xy 57.013734 73.365047) (xy 57.013734 71.841047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 1c7391db-bd0c-4cc5-bf6c-30a52bacaeeb)) (gr_poly (pts (xy 93.472 66.802) (xy 96.774 66.802) (xy 96.774 68.326) (xy 93.472 68.326) (xy 93.472 66.802) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 1ed2d56d-b2b4-46c7-b7fb-3fa884bc0c17)) (gr_poly (pts (xy 57.013734 74.381047) (xy 60.315734 74.381047) (xy 60.315734 75.905047) (xy 57.013734 75.905047) (xy 57.013734 74.381047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 1f3a81e0-23ca-4943-88f6-1a2de6d5ca81)) (gr_poly (pts (xy 93.472 89.662) (xy 96.774 89.662) (xy 96.774 91.186) (xy 93.472 91.186) (xy 93.472 89.662) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 250fd01a-86ff-488b-b0af-5beb3bea7c16)) (gr_poly (pts (xy 48.130297 95.249999) (xy 48.130297 91.947999) (xy 49.654297 91.947999) (xy 49.654297 95.249999) (xy 48.130297 95.249999) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 25e0a0e8-6741-4d2b-a0c7-601e90992ba3)) (gr_poly (pts (xy 37.419244 71.838544) (xy 40.721244 71.838544) (xy 40.721244 73.362544) (xy 37.419244 73.362544) (xy 37.419244 71.838544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 25f3a720-c8f3-40c0-a594-6f2445bfd780)) (gr_poly (pts (xy 73.914 66.802) (xy 77.216 66.802) (xy 77.216 68.326) (xy 73.914 68.326) (xy 73.914 66.802) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 26e0ec4d-5374-4061-9e84-0e8ddbe45535)) (gr_poly (pts (xy 93.472 64.262) (xy 96.774 64.262) (xy 96.774 65.786) (xy 93.472 65.786) (xy 93.472 64.262) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 2b19a0ce-b707-495d-970e-6402009d2466)) (gr_poly (pts (xy 93.472 84.582) (xy 96.774 84.582) (xy 96.774 86.106) (xy 93.472 86.106) (xy 93.472 84.582) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 32f5a0a1-9636-4e34-8cd3-153a501432d3)) (gr_poly (pts (xy 57.015381 92.204061) (xy 60.317381 92.204061) (xy 60.317381 93.728061) (xy 57.015381 93.728061) (xy 57.015381 92.204061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 35a3f57a-6a8a-41aa-bddb-b619c3fc7f49)) (gr_poly (pts (xy 73.914 49.022) (xy 77.216 49.022) (xy 77.216 50.546) (xy 73.914 50.546) (xy 73.914 49.022) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 36bae6fb-b92f-4631-bcc8-ee429f75327a)) (gr_poly (pts (xy 93.472 56.642) (xy 96.774 56.642) (xy 96.774 58.166) (xy 93.472 58.166) (xy 93.472 56.642) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 3b056f94-6ca3-4a8a-9414-6aff35991135)) (gr_poly (pts (xy 37.415563 46.446959) (xy 40.717563 46.446959) (xy 40.717563 47.970959) (xy 37.415563 47.970959) (xy 37.415563 46.446959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 45603b89-8dfc-407f-88a6-599cc611ab36)) (gr_poly (pts (xy 73.914 59.182) (xy 77.216 59.182) (xy 77.216 60.706) (xy 73.914 60.706) (xy 73.914 59.182) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 4605af8b-d550-4e27-bbdb-c6785f6d1d77)) (gr_poly (pts (xy 73.914 61.722) (xy 77.216 61.722) (xy 77.216 63.246) (xy 73.914 63.246) (xy 73.914 61.722) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 4700bc38-ea9a-453c-8987-d486637ff21f)) (gr_poly (pts (xy 56.973563 51.526959) (xy 60.275563 51.526959) (xy 60.275563 53.050959) (xy 56.973563 53.050959) (xy 56.973563 51.526959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 4a81af59-7452-4bf6-8d80-9ad4453085d3)) (gr_poly (pts (xy 73.914 89.662) (xy 77.216 89.662) (xy 77.216 91.186) (xy 73.914 91.186) (xy 73.914 89.662) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 51016732-ac01-4788-8ce6-813f9cc56b02)) (gr_poly (pts (xy 82.042 95.25) (xy 82.042 91.948) (xy 83.566 91.948) (xy 83.566 95.25) (xy 82.042 95.25) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 5bc36f4d-2b2e-448a-a39e-5a8dce27cef1)) (gr_poly (pts (xy 93.472 46.482) (xy 96.774 46.482) (xy 96.774 48.006) (xy 93.472 48.006) (xy 93.472 46.482) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 610aaf23-28f6-4026-8014-06e0d61fe2cd)) (gr_poly (pts (xy 37.419244 79.458544) (xy 40.721244 79.458544) (xy 40.721244 80.982544) (xy 37.419244 80.982544) (xy 37.419244 79.458544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 662f567a-67be-44ea-a42e-3a2af8d08d96)) (gr_poly (pts (xy 37.419244 54.058544) (xy 40.721244 54.058544) (xy 40.721244 55.582544) (xy 37.419244 55.582544) (xy 37.419244 54.058544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 67bed801-3554-4f2c-bb90-7865bb90bfff)) (gr_poly (pts (xy 37.415563 48.986959) (xy 40.717563 48.986959) (xy 40.717563 50.510959) (xy 37.415563 50.510959) (xy 37.415563 48.986959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 6b02d11b-1bd1-477a-b79c-07a1ce4a8c29)) (gr_poly (pts (xy 37.419244 84.538544) (xy 40.721244 84.538544) (xy 40.721244 86.062544) (xy 37.419244 86.062544) (xy 37.419244 84.538544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 6fab9d4d-c12e-428d-ab2f-0f4428549d42)) (gr_poly (pts (xy 37.419244 74.378544) (xy 40.721244 74.378544) (xy 40.721244 75.902544) (xy 37.419244 75.902544) (xy 37.419244 74.378544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 7353ed41-af50-413e-b4b8-308913c2ee6b)) (gr_poly (pts (xy 37.419244 56.598544) (xy 40.721244 56.598544) (xy 40.721244 58.122544) (xy 37.419244 58.122544) (xy 37.419244 56.598544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 739dbdb8-6d2f-4814-9e6c-3c80f37ccb46)) (gr_poly (pts (xy 37.415563 43.906959) (xy 40.717563 43.906959) (xy 40.717563 45.430959) (xy 37.415563 45.430959) (xy 37.415563 43.906959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 790236d5-b585-48da-8204-19f50332d06a)) (gr_poly (pts (xy 57.015381 87.124061) (xy 60.317381 87.124061) (xy 60.317381 88.648061) (xy 57.015381 88.648061) (xy 57.015381 87.124061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 795c3c38-82bd-40bc-bcd1-dfd2774e6ce1)) (gr_poly (pts (xy 73.914 54.102) (xy 77.216 54.102) (xy 77.216 55.626) (xy 73.914 55.626) (xy 73.914 54.102) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 7971ffe0-63e5-4ef3-b3f7-df44e0519630)) (gr_poly (pts (xy 84.582 95.25) (xy 84.582 91.948) (xy 86.106 91.948) (xy 86.106 95.25) (xy 84.582 95.25) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 830c4d92-eda5-41ba-9303-b0b8c5d80713)) (gr_poly (pts (xy 73.914 43.942) (xy 77.216 43.942) (xy 77.216 45.466) (xy 73.914 45.466) (xy 73.914 43.942) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 83f10166-d8e2-4ee2-bc01-f73d948a229f)) (gr_poly (pts (xy 93.472 74.422) (xy 96.774 74.422) (xy 96.774 75.946) (xy 93.472 75.946) (xy 93.472 74.422) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 87b87eab-db06-4d56-bf4c-1ffa6d00fc53)) (gr_poly (pts (xy 37.419244 89.618544) (xy 40.721244 89.618544) (xy 40.721244 91.142544) (xy 37.419244 91.142544) (xy 37.419244 89.618544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 8b073c69-13c6-40b1-b489-b0e4d45e34cb)) (gr_poly (pts (xy 45.590297 95.249999) (xy 45.590297 91.947999) (xy 47.114297 91.947999) (xy 47.114297 95.249999) (xy 45.590297 95.249999) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 94b89016-0593-48c7-93d2-042451f59c7a)) (gr_poly (pts (xy 56.973563 46.446959) (xy 60.275563 46.446959) (xy 60.275563 47.970959) (xy 56.973563 47.970959) (xy 56.973563 46.446959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 973d228b-8735-4f35-b842-ed68a1c4250a)) (gr_poly (pts (xy 93.472 43.942) (xy 96.774 43.942) (xy 96.774 45.466) (xy 93.472 45.466) (xy 93.472 43.942) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 983381ae-fc5f-44f8-a983-e13d3709f5f1)) (gr_poly (pts (xy 73.914 74.422) (xy 77.216 74.422) (xy 77.216 75.946) (xy 73.914 75.946) (xy 73.914 74.422) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 98c52f08-0ca4-44ad-8716-086131c59748)) (gr_poly (pts (xy 93.472 61.722) (xy 96.774 61.722) (xy 96.774 63.246) (xy 93.472 63.246) (xy 93.472 61.722) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 9a933ff5-604a-44a7-98a0-07b6b717c0fe)) (gr_poly (pts (xy 56.973563 48.986959) (xy 60.275563 48.986959) (xy 60.275563 50.510959) (xy 56.973563 50.510959) (xy 56.973563 48.986959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 9cfcc10d-95e3-40f8-9ea9-965daf9805ce)) (gr_poly (pts (xy 57.013734 61.681047) (xy 60.315734 61.681047) (xy 60.315734 63.205047) (xy 57.013734 63.205047) (xy 57.013734 61.681047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp a01eea2b-1a38-44a6-8473-571f007c0ff7)) (gr_poly (pts (xy 93.472 54.102) (xy 96.774 54.102) (xy 96.774 55.626) (xy 93.472 55.626) (xy 93.472 54.102) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp a3dce0f4-ba57-40ad-8a59-265b76d11ada)) (gr_poly (pts (xy 57.015381 89.664061) (xy 60.317381 89.664061) (xy 60.317381 91.188061) (xy 57.015381 91.188061) (xy 57.015381 89.664061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp a60eca9c-251c-4d94-b6c1-eec3c36501a5)) (gr_poly (pts (xy 73.914 82.042) (xy 77.216 82.042) (xy 77.216 83.566) (xy 73.914 83.566) (xy 73.914 82.042) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp a84ced9b-7f0f-49ee-a4fd-80645cc40399)) (gr_poly (pts (xy 56.973563 43.906959) (xy 60.275563 43.906959) (xy 60.275563 45.430959) (xy 56.973563 45.430959) (xy 56.973563 43.906959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp b36b1f4f-5410-4375-b583-e89186ea0c28)) (gr_poly (pts (xy 93.472 92.202) (xy 96.774 92.202) (xy 96.774 93.726) (xy 93.472 93.726) (xy 93.472 92.202) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp b37c7e68-11a5-41cd-a4a9-47459a62584b)) (gr_poly (pts (xy 57.015381 76.964061) (xy 60.317381 76.964061) (xy 60.317381 78.488061) (xy 57.015381 78.488061) (xy 57.015381 76.964061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp b51e6fcb-f696-479c-81d8-1fb773c7b9bb)) (gr_poly (pts (xy 37.419244 87.078544) (xy 40.721244 87.078544) (xy 40.721244 88.602544) (xy 37.419244 88.602544) (xy 37.419244 87.078544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp b6f581b9-f1ce-4bea-8d09-b22766a0c26f)) (gr_poly (pts (xy 50.670297 95.249999) (xy 50.670297 91.947999) (xy 52.194297 91.947999) (xy 52.194297 95.249999) (xy 50.670297 95.249999) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp bc9a5957-a971-46dc-aeb6-05fccfdd189a)) (gr_poly (pts (xy 57.013734 64.221047) (xy 60.315734 64.221047) (xy 60.315734 65.745047) (xy 57.013734 65.745047) (xy 57.013734 64.221047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp bed20542-69f4-4a47-801c-29fc6a85dba2)) (gr_poly (pts (xy 73.914 51.562) (xy 77.216 51.562) (xy 77.216 53.086) (xy 73.914 53.086) (xy 73.914 51.562) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp bfcba5f3-7f47-4f04-927d-f4077590b030)) (gr_poly (pts (xy 93.472 51.562) (xy 96.774 51.562) (xy 96.774 53.086) (xy 93.472 53.086) (xy 93.472 51.562) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c01f993d-0268-4a0e-a77e-9f13fba196a5)) (gr_poly (pts (xy 37.419244 69.298544) (xy 40.721244 69.298544) (xy 40.721244 70.822544) (xy 37.419244 70.822544) (xy 37.419244 69.298544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c5829e30-8e2b-40c1-b79e-9c30c8addf55)) (gr_poly (pts (xy 37.419244 92.158544) (xy 40.721244 92.158544) (xy 40.721244 93.682544) (xy 37.419244 93.682544) (xy 37.419244 92.158544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c5b47e99-98ff-4fbd-873a-107c4d315caa)) (gr_poly (pts (xy 93.472 82.042) (xy 96.774 82.042) (xy 96.774 83.566) (xy 93.472 83.566) (xy 93.472 82.042) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c6d3ab47-419f-4617-918b-1dc8d11d57f4)) (gr_poly (pts (xy 73.914 56.642) (xy 77.216 56.642) (xy 77.216 58.166) (xy 73.914 58.166) (xy 73.914 56.642) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c71c5ca0-39d1-4f2c-ba56-94226b4ad212)) (gr_poly (pts (xy 73.914 46.482) (xy 77.216 46.482) (xy 77.216 48.006) (xy 73.914 48.006) (xy 73.914 46.482) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c7533b54-108e-4535-b867-dccb2dce5be5)) (gr_poly (pts (xy 57.013734 59.141047) (xy 60.315734 59.141047) (xy 60.315734 60.665047) (xy 57.013734 60.665047) (xy 57.013734 59.141047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c8c8e82b-b01c-43ac-911f-8962c7ae612f)) (gr_poly (pts (xy 93.472 76.962) (xy 96.774 76.962) (xy 96.774 78.486) (xy 93.472 78.486) (xy 93.472 76.962) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp cb495243-2016-4dce-b57a-87d58e637c8c)) (gr_poly (pts (xy 57.013734 66.761047) (xy 60.315734 66.761047) (xy 60.315734 68.285047) (xy 57.013734 68.285047) (xy 57.013734 66.761047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp cb55488d-4f2c-40d4-adc6-35f33baab834)) (gr_poly (pts (xy 57.015381 79.504061) (xy 60.317381 79.504061) (xy 60.317381 81.028061) (xy 57.015381 81.028061) (xy 57.015381 79.504061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp cd3f0449-d497-407b-ae8d-ed6eed0cd4e9)) (gr_poly (pts (xy 73.914 84.582) (xy 77.216 84.582) (xy 77.216 86.106) (xy 73.914 86.106) (xy 73.914 84.582) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp d265748f-656e-4819-95ee-930b97eeddce)) (gr_poly (pts (xy 73.914 64.262) (xy 77.216 64.262) (xy 77.216 65.786) (xy 73.914 65.786) (xy 73.914 64.262) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp d2867638-cc61-40ae-b20d-48bb6d8a03a0)) (gr_poly (pts (xy 37.419244 64.218544) (xy 40.721244 64.218544) (xy 40.721244 65.742544) (xy 37.419244 65.742544) (xy 37.419244 64.218544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp d2ae693a-0664-43d8-bb6d-a8c6ab8283ef)) (gr_poly (pts (xy 93.472 59.182) (xy 96.774 59.182) (xy 96.774 60.706) (xy 93.472 60.706) (xy 93.472 59.182) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp d5cce93f-8110-444d-86e7-1561ee5c56ba)) (gr_poly (pts (xy 73.914 71.882) (xy 77.216 71.882) (xy 77.216 73.406) (xy 73.914 73.406) (xy 73.914 71.882) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp d7160c7c-2aa8-478c-a788-603eab0130f4)) (gr_poly (pts (xy 73.914 76.962) (xy 77.216 76.962) (xy 77.216 78.486) (xy 73.914 78.486) (xy 73.914 76.962) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp da2c0329-af77-4c27-90e9-44b3d17bc99e)) (gr_poly (pts (xy 37.415563 51.526959) (xy 40.717563 51.526959) (xy 40.717563 53.050959) (xy 37.415563 53.050959) (xy 37.415563 51.526959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp ddad339f-42a0-45a8-b19a-0521e4172bb8)) (gr_poly (pts (xy 57.013734 54.061047) (xy 60.315734 54.061047) (xy 60.315734 55.585047) (xy 57.013734 55.585047) (xy 57.013734 54.061047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp e969ee8e-4876-4efc-bdd4-fdaeabbc524d)) (gr_poly (pts (xy 37.419244 81.998544) (xy 40.721244 81.998544) (xy 40.721244 83.522544) (xy 37.419244 83.522544) (xy 37.419244 81.998544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp ea2e9c1d-cc75-4e27-b8b6-80ae93b5afe0)) (gr_poly (pts (xy 93.472 71.882) (xy 96.774 71.882) (xy 96.774 73.406) (xy 93.472 73.406) (xy 93.472 71.882) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp ec3be00a-1da7-47c1-ab04-2246b70c7e31)) (gr_poly (pts (xy 73.914 69.342) (xy 77.216 69.342) (xy 77.216 70.866) (xy 73.914 70.866) (xy 73.914 69.342) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp edfbeb41-9d6e-4e32-a9bd-e510061cee1a)) (gr_poly (pts (xy 87.122 95.25) (xy 87.122 91.948) (xy 88.646 91.948) (xy 88.646 95.25) (xy 87.122 95.25) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp ee9b9431-449d-4653-8786-e667697fcc44)) (gr_poly (pts (xy 37.419244 61.678544) (xy 40.721244 61.678544) (xy 40.721244 63.202544) (xy 37.419244 63.202544) (xy 37.419244 61.678544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp f48636b2-c240-4563-95d3-ed061191ace3)) (gr_poly (pts (xy 73.914 92.202) (xy 77.216 92.202) (xy 77.216 93.726) (xy 73.914 93.726) (xy 73.914 92.202) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp f9e14c9a-83a5-4c44-afac-964ffcacd59b)) (gr_poly (pts (xy 57.013734 56.601047) (xy 60.315734 56.601047) (xy 60.315734 58.125047) (xy 57.013734 58.125047) (xy 57.013734 56.601047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp fdb0e725-6cd7-4fe0-a2fa-62c1f250bf49)) (gr_poly (pts (xy 57.015381 84.584061) (xy 60.317381 84.584061) (xy 60.317381 86.108061) (xy 57.015381 86.108061) (xy 57.015381 84.584061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp fe2d1f84-f4b3-4630-b080-926aad5228ff)) (gr_line (start 67.31 48.738426) (end 67.281783 115.407659) (stroke (width 0.12) (type dash)) (layer "B.SilkS") (tstamp 06a87f3a-9b0a-4a3d-8a21-e2d4c24627dc)) (gr_arc (start 66.937741 48.748461) (mid 63.758888 45.025614) (end 67.31 41.656) (stroke (width 0.12) (type dash)) (layer "B.SilkS") (tstamp 63bdb262-bb0a-4980-978a-80866fe0e1f2)) (gr_line (start 67.31 41.656) (end 67.31 41.148) (stroke (width 0.12) (type default)) (layer "B.SilkS") (tstamp 8d34fe5d-31d0-4923-abb1-1f669a699173)) (gr_poly (pts (xy 58.798165 110.543306) (xy 58.798165 110.962168) (xy 58.603088 110.962168) (xy 58.603088 110.543306) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 0116bd43-032b-4701-b712-3da25ab65618)) (gr_poly (pts (xy 57.482433 111.378334) (xy 57.486179 111.323025) (xy 57.493468 111.269362) (xy 57.504299 111.217356) (xy 57.518673 111.167021) (xy 57.536591 111.118367) (xy 57.558054 111.071408) (xy 57.583061 111.026155) (xy 57.611615 110.98262) (xy 57.640028 110.945385) (xy 57.670484 110.910564) (xy 57.702794 110.878076) (xy 57.736771 110.847839) (xy 57.772228 110.819775) (xy 57.808977 110.793802) (xy 57.846831 110.76984) (xy 57.885601 110.747807) (xy 57.925102 110.727625) (xy 57.965144 110.709211) (xy 58.00554 110.692486) (xy 58.046103 110.677369) (xy 58.126981 110.651638) (xy 58.206276 110.631371) (xy 58.282487 110.615926) (xy 58.354116 110.604658) (xy 58.419661 110.596922) (xy 58.477623 110.592075) (xy 58.564795 110.588468) (xy 58.60363 110.588683) (xy 58.603617 110.588683) (xy 58.595362 110.859483) (xy 58.563375 110.859196) (xy 58.52556 110.860214) (xy 58.482716 110.862766) (xy 58.435645 110.867081) (xy 58.385147 110.873387) (xy 58.332022 110.881913) (xy 58.277071 110.892888) (xy 58.221094 110.906541) (xy 58.164892 110.923101) (xy 58.109265 110.942796) (xy 58.055014 110.965855) (xy 58.002938 110.992508) (xy 57.977967 111.007253) (xy 57.95384 111.022982) (xy 57.930657 111.039724) (xy 57.908519 111.057507) (xy 57.887525 111.07636) (xy 57.867775 111.096311) (xy 57.84937 111.11739) (xy 57.832409 111.139624) (xy 57.813791 111.168348) (xy 57.797659 111.198636) (xy 57.784012 111.230476) (xy 57.772851 111.263862) (xy 57.764176 111.298784) (xy 57.757987 111.335233) (xy 57.754283 111.3732) (xy 57.753066 111.412676) (xy 57.754334 111.453652) (xy 57.758088 111.496119) (xy 57.764329 111.540069) (xy 57.773055 111.585493) (xy 57.784267 111.63238) (xy 57.797965 111.680724) (xy 57.814149 111.730514) (xy 57.832819 111.781741) (xy 57.84911 111.820656) (xy 57.867573 111.858229) (xy 57.888127 111.8945) (xy 57.910689 111.929509) (xy 57.935177 111.963293) (xy 57.961509 111.995892) (xy 58.019376 112.057693) (xy 58.083632 112.115223) (xy 58.153618 112.168796) (xy 58.228678 112.218724) (xy 58.308153 112.26532) (xy 58.391386 112.308897) (xy 58.477719 112.349767) (xy 58.566493 112.388243) (xy 58.657052 112.424638) (xy 58.840891 112.492435) (xy 59.023974 112.555661) (xy 59.187753 112.612183) (xy 59.266552 112.640444) (xy 59.342782 112.669096) (xy 59.41606 112.69843) (xy 59.486004 112.728738) (xy 59.552231 112.760313) (xy 59.614358 112.793447) (xy 59.643765 112.810689) (xy 59.672004 112.828431) (xy 59.699027 112.846709) (xy 59.724786 112.865559) (xy 59.749234 112.885017) (xy 59.772322 112.905121) (xy 59.794003 112.925907) (xy 59.814229 112.947412) (xy 59.832952 112.969671) (xy 59.850124 112.992721) (xy 59.865699 113.0166) (xy 59.879627 113.041343) (xy 59.891861 113.066987) (xy 59.902353 113.093568) (xy 59.911056 113.121124) (xy 59.917921 113.14969) (xy 59.924621 113.194423) (xy 59.926498 113.239887) (xy 59.923498 113.286177) (xy 59.915567 113.333386) (xy 59.90265 113.381606) (xy 59.884694 113.430933) (xy 59.861643 113.481458) (xy 59.833445 113.533276) (xy 59.800044 113.58648) (xy 59.761387 113.641164) (xy 59.717418 113.69742) (xy 59.668085 113.755342) (xy 59.613333 113.815025) (xy 59.553108 113.87656) (xy 59.487355 113.940042) (xy 59.41602 114.005564) (xy 59.235045 113.803991) (xy 59.271218 113.771101) (xy 59.305325 113.739273) (xy 59.337424 113.708494) (xy 59.367573 113.678746) (xy 59.395829 113.650017) (xy 59.422249 113.622289) (xy 59.44689 113.595549) (xy 59.469809 113.569781) (xy 59.491065 113.544971) (xy 59.510715 113.521102) (xy 59.528814 113.49816) (xy 59.545422 113.47613) (xy 59.560596 113.454996) (xy 59.574392 113.434744) (xy 59.586868 113.415358) (xy 59.598081 113.396824) (xy 59.608089 113.379126) (xy 59.61695 113.362249) (xy 59.624719 113.346178) (xy 59.631455 113.330898) (xy 59.637215 113.316394) (xy 59.642057 113.302651) (xy 59.646037 113.289653) (xy 59.649213 113.277385) (xy 59.651642 113.265833) (xy 59.653383 113.254982) (xy 59.654491 113.244815) (xy 59.655024 113.235319) (xy 59.654596 113.218275) (xy 59.652557 113.203731) (xy 59.648621 113.189025) (xy 59.642895 113.174543) (xy 59.635441 113.160279) (xy 59.626317 113.146226) (xy 59.603303 113.118728) (xy 59.574333 113.091998) (xy 59.539884 113.065981) (xy 59.500437 113.040627) (xy 59.456471 113.015882) (xy 59.408464 112.991694) (xy 59.356897 112.968011) (xy 59.302248 112.944781) (xy 59.185622 112.899467) (xy 59.06242 112.855334) (xy 58.936476 112.811963) (xy 58.739717 112.743829) (xy 58.638965 112.707231) (xy 58.537716 112.668397) (xy 58.436782 112.626917) (xy 58.336977 112.582381) (xy 58.239114 112.534379) (xy 58.144006 112.482498) (xy 58.052467 112.42633) (xy 58.008289 112.39651) (xy 57.965309 112.365464) (xy 57.923627 112.33314) (xy 57.883346 112.299488) (xy 57.844567 112.264456) (xy 57.807391 112.227993) (xy 57.771921 112.190047) (xy 57.738258 112.150567) (xy 57.706503 112.109503) (xy 57.676759 112.066801) (xy 57.649127 112.022412) (xy 57.623708 111.976284) (xy 57.600604 111.928366) (xy 57.579918 111.878605) (xy 57.555346 111.810565) (xy 57.534312 111.744074) (xy 57.516817 111.679144) (xy 57.50286 111.615787) (xy 57.492443 111.554016) (xy 57.485566 111.493842) (xy 57.482229 111.435277) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 111c673b-406a-490b-addf-2c0831eea407)) (gr_line (start 67.31 48.738426) (end 67.281783 115.407659) (stroke (width 0.12) (type dash)) (layer "F.SilkS") (tstamp 1afaf95e-be52-4cc9-bcaa-9d22317656f5)) (gr_poly (pts (xy 58.773281 110.65812) (xy 58.7743 110.590897) (xy 58.77605 110.524421) (xy 58.778571 110.458727) (xy 58.781905 110.393853) (xy 58.786094 110.329834) (xy 58.791178 110.266707) (xy 58.797199 110.204507) (xy 60.221226 110.204507) (xy 60.221226 111.247336) (xy 58.797199 111.247336) (xy 58.791178 111.185136) (xy 58.786094 111.122011) (xy 58.781905 111.058001) (xy 58.778571 110.993144) (xy 58.77605 110.927482) (xy 58.7743 110.861053) (xy 58.77295 110.726054) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 1c4eb65c-dcae-4529-b2dd-486f401c814b)) (gr_poly (pts (xy 75.409953 109.711596) (xy 75.414084 109.711996) (xy 75.418717 109.712651) (xy 75.423798 109.713553) (xy 75.429272 109.714694) (xy 75.435082 109.716066) (xy 75.447491 109.719465) (xy 75.453979 109.721476) (xy 75.460582 109.723683) (xy 75.467245 109.726077) (xy 75.473912 109.728651) (xy 75.480528 109.731395) (xy 75.487037 109.734301) (xy 75.493385 109.737361) (xy 75.499515 109.740565) (xy 75.511406 109.747709) (xy 75.523025 109.75597) (xy 75.534303 109.765237) (xy 75.545172 109.775399) (xy 75.555563 109.786346) (xy 75.565408 109.797967) (xy 75.57464 109.81015) (xy 75.583189 109.822785) (xy 75.590988 109.835761) (xy 75.597969 109.848967) (xy 75.604062 109.862293) (xy 75.609201 109.875627) (xy 75.613317 109.888859) (xy 75.616341 109.901877) (xy 75.618205 109.914572) (xy 75.618681 109.920763) (xy 75.618842 109.926832) (xy 75.618681 109.9329) (xy 75.618205 109.939091) (xy 75.617422 109.945389) (xy 75.616341 109.951781) (xy 75.614969 109.958251) (xy 75.613317 109.964786) (xy 75.611391 109.971371) (xy 75.609201 109.977991) (xy 75.604062 109.991282) (xy 75.597969 110.004543) (xy 75.590988 110.017659) (xy 75.583189 110.030515) (xy 75.57464 110.042996) (xy 75.565408 110.054987) (xy 75.555563 110.066372) (xy 75.545172 110.077037) (xy 75.539793 110.082063) (xy 75.534303 110.086866) (xy 75.528711 110.091431) (xy 75.523025 110.095744) (xy 75.517254 110.099791) (xy 75.511406 110.103557) (xy 75.50549 110.107027) (xy 75.499515 110.110189) (xy 75.493385 110.113426) (xy 75.487038 110.116578) (xy 75.480528 110.119627) (xy 75.473912 110.122558) (xy 75.467245 110.125352) (xy 75.460582 110.127992) (xy 75.453979 110.130462) (xy 75.447491 110.132744) (xy 75.441174 110.134822) (xy 75.435082 110.136678) (xy 75.429272 110.138295) (xy 75.423799 110.139657) (xy 75.418717 110.140745) (xy 75.414084 110.141544) (xy 75.409954 110.142035) (xy 75.406382 110.142203) (xy 75.40281 110.142035) (xy 75.398679 110.141544) (xy 75.394046 110.140745) (xy 75.388965 110.139657) (xy 75.383491 110.138295) (xy 75.377681 110.136678) (xy 75.365272 110.132744) (xy 75.352181 110.127992) (xy 75.338851 110.122558) (xy 75.332235 110.119627) (xy 75.325725 110.116578) (xy 75.319378 110.113426) (xy 75.313248 110.110189) (xy 75.301356 110.103589) (xy 75.289737 110.095864) (xy 75.278459 110.087115) (xy 75.267591 110.077446) (xy 75.2572 110.066958) (xy 75.247354 110.055754) (xy 75.238123 110.043936) (xy 75.229573 110.031607) (xy 75.221774 110.018868) (xy 75.214794 110.005823) (xy 75.2087 109.992572) (xy 75.203562 109.97922) (xy 75.199446 109.965867) (xy 75.196422 109.952616) (xy 75.194558 109.939571) (xy 75.194081 109.933157) (xy 75.193921 109.926832) (xy 75.194081 109.920507) (xy 75.194558 109.914093) (xy 75.195341 109.9076) (xy 75.196422 109.901042) (xy 75.197793 109.89443) (xy 75.199446 109.887778) (xy 75.201372 109.881097) (xy 75.203562 109.874399) (xy 75.2087 109.861003) (xy 75.214794 109.847688) (xy 75.221775 109.834552) (xy 75.229574 109.821693) (xy 75.238123 109.80921) (xy 75.247355 109.797199) (xy 75.2572 109.78576) (xy 75.267591 109.77499) (xy 75.27846 109.764988) (xy 75.289737 109.755851) (xy 75.295509 109.751637) (xy 75.301356 109.747677) (xy 75.307272 109.743982) (xy 75.313248 109.740565) (xy 75.319858 109.737361) (xy 75.326561 109.734301) (xy 75.333316 109.731395) (xy 75.340079 109.728651) (xy 75.346808 109.726077) (xy 75.35346 109.723683) (xy 75.359993 109.721476) (xy 75.366364 109.719465) (xy 75.37253 109.717659) (xy 75.378449 109.716066) (xy 75.384078 109.714694) (xy 75.389374 109.713553) (xy 75.394295 109.712651) (xy 75.398799 109.711996) (xy 75.402842 109.711596) (xy 75.406382 109.711461) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 2682b2e2-ca4f-43bb-a888-1c2cdc98cd58)) (gr_poly (pts (xy 60.221226 111.456608) (xy 60.221226 112.444972) (xy 59.941893 112.444972) (xy 59.875793 112.443793) (xy 59.812158 112.440281) (xy 59.750944 112.43448) (xy 59.692105 112.426429) (xy 59.635597 112.416172) (xy 59.581376 112.403748) (xy 59.529396 112.389201) (xy 59.479613 112.372571) (xy 59.431983 112.3539) (xy 59.386459 112.333229) (xy 59.342999 112.3106) (xy 59.301557 112.286055) (xy 59.262088 112.259634) (xy 59.224548 112.23138) (xy 59.188891 112.201334) (xy 59.155075 112.169538) (xy 59.123052 112.136032) (xy 59.09278 112.10086) (xy 59.064213 112.064061) (xy 59.037306 112.025678) (xy 59.012016 111.985751) (xy 58.988296 111.944324) (xy 58.945392 111.857131) (xy 58.908235 111.764431) (xy 58.876469 111.666556) (xy 58.849737 111.563837) (xy 58.827679 111.456608) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 2f047f4d-25eb-4e3e-acc2-d87a91261673)) (gr_poly (pts (xy 62.135116 109.006435) (xy 62.227485 109.008671) (xy 62.318639 109.015309) (xy 62.408466 109.026241) (xy 62.496854 109.041358) (xy 62.583689 109.060552) (xy 62.668859 109.083717) (xy 62.752251 109.110743) (xy 62.833753 109.141524) (xy 62.913252 109.17595) (xy 62.990635 109.213914) (xy 63.06579 109.255309) (xy 63.138604 109.300027) (xy 63.208965 109.347958) (xy 63.276759 109.398996) (xy 63.341873 109.453033) (xy 63.404197 109.509961) (xy 63.463616 109.569672) (xy 63.520018 109.632058) (xy 63.57329 109.69701) (xy 63.62332 109.764422) (xy 63.669995 109.834185) (xy 63.713203 109.906192) (xy 63.75283 109.980334) (xy 63.788764 110.056504) (xy 63.820893 110.134593) (xy 63.849103 110.214495) (xy 63.873282 110.2961) (xy 63.893318 110.379301) (xy 63.909098 110.463991) (xy 63.920508 110.55006) (xy 63.927437 110.637402) (xy 63.929772 110.725908) (xy 63.927437 110.814365) (xy 63.920508 110.90166) (xy 63.909097 110.987688) (xy 63.893318 111.072338) (xy 63.873281 111.155504) (xy 63.849102 111.237078) (xy 63.820891 111.31695) (xy 63.788762 111.395014) (xy 63.752827 111.471161) (xy 63.7132 111.545283) (xy 63.669992 111.617273) (xy 63.623316 111.687021) (xy 63.573285 111.75442) (xy 63.520012 111.819362) (xy 63.46361 111.881739) (xy 63.40419 111.941442) (xy 63.341866 111.998365) (xy 63.276751 112.052398) (xy 63.208956 112.103433) (xy 63.138595 112.151364) (xy 63.065781 112.19608) (xy 62.990625 112.237476) (xy 62.913241 112.275441) (xy 62.833742 112.309869) (xy 62.752239 112.340652) (xy 62.668847 112.36768) (xy 62.583676 112.390847) (xy 62.496841 112.410044) (xy 62.408453 112.425163) (xy 62.318626 112.436096) (xy 62.227471 112.442735) (xy 62.135103 112.444972) (xy 62.135106 112.444976) (xy 62.13511 112.444979) (xy 62.135113 112.444982) (xy 62.135116 112.444986) (xy 60.430684 112.444986) (xy 60.430684 109.006435) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 39c6b5c3-f1d4-4c3e-beb0-4c06be0973c1)) (gr_poly (pts (xy 71.971429 111.002828) (xy 71.973288 111.003199) (xy 71.975 111.003686) (xy 71.981325 111.003846) (xy 71.98774 111.004323) (xy 71.994233 111.005106) (xy 72.000791 111.006187) (xy 72.007402 111.007558) (xy 72.014055 111.009211) (xy 72.020736 111.011137) (xy 72.027434 111.013327) (xy 72.04083 111.018465) (xy 72.054145 111.024559) (xy 72.067281 111.03154) (xy 72.080139 111.039339) (xy 72.092623 111.047888) (xy 72.104634 111.05712) (xy 72.116073 111.066965) (xy 72.126843 111.077356) (xy 72.136845 111.088225) (xy 72.145982 111.099502) (xy 72.150195 111.105274) (xy 72.154155 111.111121) (xy 72.15785 111.117037) (xy 72.161267 111.123013) (xy 72.166696 111.13549) (xy 72.171954 111.148616) (xy 72.176871 111.161946) (xy 72.181276 111.175037) (xy 72.185 111.187446) (xy 72.186552 111.193256) (xy 72.18787 111.19873) (xy 72.188933 111.203811) (xy 72.189718 111.208444) (xy 72.190204 111.212575) (xy 72.190371 111.216147) (xy 72.190236 111.219719) (xy 72.189837 111.223849) (xy 72.189182 111.228482) (xy 72.18828 111.233564) (xy 72.187138 111.239037) (xy 72.185767 111.244847) (xy 72.182368 111.257256) (xy 72.180357 111.263744) (xy 72.17815 111.270347) (xy 72.175755 111.27701) (xy 72.173182 111.283677) (xy 72.170438 111.290293) (xy 72.167531 111.296802) (xy 72.164472 111.30315) (xy 72.161267 111.30928) (xy 72.154155 111.321172) (xy 72.145982 111.332791) (xy 72.136845 111.344069) (xy 72.126842 111.354937) (xy 72.116073 111.365328) (xy 72.104633 111.375174) (xy 72.092623 111.384405) (xy 72.080139 111.392954) (xy 72.067281 111.400753) (xy 72.054145 111.407734) (xy 72.04083 111.413828) (xy 72.027434 111.418966) (xy 72.014055 111.423082) (xy 72.000791 111.426106) (xy 71.98774 111.42797) (xy 71.981325 111.428446) (xy 71.975 111.428607) (xy 71.971429 111.428439) (xy 71.967298 111.427948) (xy 71.962665 111.427149) (xy 71.957584 111.42606) (xy 71.95211 111.424699) (xy 71.9463 111.423082) (xy 71.933891 111.419148) (xy 71.9208 111.414396) (xy 71.90747 111.408962) (xy 71.900854 111.406031) (xy 71.894345 111.402982) (xy 71.887997 111.39983) (xy 71.881867 111.396592) (xy 71.869976 111.389993) (xy 71.858357 111.382268) (xy 71.847079 111.373519) (xy 71.83621 111.36385) (xy 71.825819 111.353362) (xy 71.815974 111.342158) (xy 71.806742 111.33034) (xy 71.798193 111.318011) (xy 71.790394 111.305272) (xy 71.783413 111.292226) (xy 71.77732 111.278976) (xy 71.772181 111.265623) (xy 71.768066 111.252271) (xy 71.765041 111.23902) (xy 71.763177 111.225975) (xy 71.762701 111.219561) (xy 71.76254 111.213236) (xy 71.762701 111.206911) (xy 71.763177 111.200497) (xy 71.76396 111.194004) (xy 71.765041 111.187446) (xy 71.766413 111.180835) (xy 71.768066 111.174182) (xy 71.769991 111.167501) (xy 71.772181 111.160803) (xy 71.77732 111.147407) (xy 71.783413 111.134092) (xy 71.790394 111.120956) (xy 71.798193 111.108097) (xy 71.806742 111.095614) (xy 71.815974 111.083603) (xy 71.825819 111.072164) (xy 71.83621 111.061394) (xy 71.847079 111.051392) (xy 71.858357 111.042255) (xy 71.864128 111.038042) (xy 71.869976 111.034081) (xy 71.875892 111.030387) (xy 71.881867 111.02697) (xy 71.894345 111.021552) (xy 71.900854 111.018918) (xy 71.90747 111.016374) (xy 71.914137 111.013949) (xy 71.9208 111.011673) (xy 71.927403 111.009576) (xy 71.933891 111.007688) (xy 71.940208 111.006039) (xy 71.9463 111.004658) (xy 71.95211 111.003576) (xy 71.957584 111.002822) (xy 71.962665 111.002426) (xy 71.967298 111.002418) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 3f1ed5f7-07f3-4928-8134-2f6f2b4b0a93)) (gr_arc (start 66.93774 48.748461) (mid 63.758888 45.025614) (end 67.31 41.656) (stroke (width 0.12) (type dash)) (layer "F.SilkS") (tstamp 4135603c-95cd-4256-a81f-ea27762e0ab8)) (gr_poly (pts (xy 58.849712 109.887864) (xy 58.876427 109.78505) (xy 58.90818 109.687098) (xy 58.945328 109.594337) (xy 58.988229 109.507099) (xy 59.011948 109.465654) (xy 59.037239 109.425713) (xy 59.064147 109.387318) (xy 59.092715 109.35051) (xy 59.12299 109.315331) (xy 59.155015 109.281821) (xy 59.188835 109.250022) (xy 59.224495 109.219976) (xy 59.262039 109.191722) (xy 59.301513 109.165304) (xy 59.342959 109.140762) (xy 59.386424 109.118137) (xy 59.431952 109.097471) (xy 59.479587 109.078805) (xy 59.529375 109.062181) (xy 59.581359 109.047639) (xy 59.635584 109.035221) (xy 59.692095 109.024968) (xy 59.750937 109.016922) (xy 59.812154 109.011123) (xy 59.875791 109.007614) (xy 59.941893 109.006435) (xy 60.221226 109.006435) (xy 60.221226 109.995209) (xy 58.827679 109.995209) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 4aad693d-9c51-45de-9a9a-f61318a4631f)) (gr_poly (pts (xy 74.396618 106.991515) (xy 74.402288 106.992041) (xy 74.407276 106.993018) (xy 74.411632 106.994453) (xy 74.415406 106.996352) (xy 74.418648 106.99872) (xy 74.421408 107.001564) (xy 74.423737 107.004888) (xy 74.425684 107.0087) (xy 74.427299 107.013005) (xy 74.428634 107.017809) (xy 74.429737 107.023117) (xy 74.430658 107.028936) (xy 74.431449 107.035271) (xy 74.434303 107.065893) (xy 74.437784 107.092363) (xy 74.440601 107.12131) (xy 74.444307 107.185083) (xy 74.445558 107.254109) (xy 74.444489 107.325284) (xy 74.441237 107.395503) (xy 74.435939 107.461664) (xy 74.428732 107.520662) (xy 74.424454 107.546506) (xy 74.41975 107.569395) (xy 74.414104 107.593448) (xy 74.407046 107.618576) (xy 74.398666 107.644625) (xy 74.389055 107.671441) (xy 74.378301 107.698871) (xy 74.366493 107.726762) (xy 74.353723 107.75496) (xy 74.340078 107.783311) (xy 74.325649 107.811662) (xy 74.310525 107.839859) (xy 74.294795 107.86775) (xy 74.27855 107.89518) (xy 74.261878 107.921996) (xy 74.24487 107.948045) (xy 74.227614 107.973173) (xy 74.2102 107.997226) (xy 74.193699 108.017684) (xy 74.173138 108.041383) (xy 74.149371 108.067468) (xy 74.123252 108.095089) (xy 74.095631 108.123392) (xy 74.067362 108.151524) (xy 74.039299 108.178633) (xy 74.012292 108.203866) (xy 73.972019 108.239667) (xy 73.932125 108.27595) (xy 73.854448 108.348886) (xy 73.781204 108.420527) (xy 73.714339 108.488723) (xy 73.655795 108.551325) (xy 73.630251 108.579857) (xy 73.607517 108.606185) (xy 73.587836 108.630041) (xy 73.57145 108.651155) (xy 73.558602 108.669259) (xy 73.549536 108.684084) (xy 73.542419 108.697383) (xy 73.535297 108.712029) (xy 73.528235 108.7278) (xy 73.521296 108.744475) (xy 73.514545 108.761833) (xy 73.508046 108.779651) (xy 73.496057 108.815781) (xy 73.490696 108.83365) (xy 73.485842 108.851092) (xy 73.48156 108.867887) (xy 73.477913 108.883812) (xy 73.474965 108.898645) (xy 73.47278 108.912165) (xy 73.471422 108.924151) (xy 73.470955 108.93438) (xy 73.471948 108.938479) (xy 73.476037 108.942065) (xy 73.50015 108.947841) (xy 73.556596 108.951979) (xy 73.658677 108.954753) (xy 74.052947 108.9573) (xy 74.789374 108.957664) (xy 75.469002 108.958391) (xy 75.704671 108.959505) (xy 75.882599 108.961302) (xy 76.01155 108.963916) (xy 76.060398 108.965573) (xy 76.100289 108.967486) (xy 76.132319 108.969672) (xy 76.157582 108.972147) (xy 76.177176 108.97493) (xy 76.192194 108.978036) (xy 76.236309 108.989888) (xy 76.279081 109.004634) (xy 76.320394 109.022168) (xy 76.360134 109.042384) (xy 76.398187 109.065175) (xy 76.434435 109.090434) (xy 76.468766 109.118055) (xy 76.501062 109.147932) (xy 76.53121 109.179957) (xy 76.559094 109.214025) (xy 76.5846 109.250028) (xy 76.607611 109.287859) (xy 76.628013 109.327414) (xy 76.645691 109.368584) (xy 76.660529 109.411263) (xy 76.672413 109.455345) (xy 76.682918 109.610643) (xy 76.690421 109.939747) (xy 76.696424 110.887997) (xy 76.690421 111.837339) (xy 76.682918 112.167807) (xy 76.672413 112.325015) (xy 76.661557 112.366122) (xy 76.64764 112.406393) (xy 76.630807 112.445675) (xy 76.611203 112.483815) (xy 76.588973 112.520658) (xy 76.564261 112.556052) (xy 76.537214 112.589843) (xy 76.507974 112.621878) (xy 76.476689 112.652002) (xy 76.443502 112.680063) (xy 76.408558 112.705908) (xy 76.372003 112.729381) (xy 76.333982 112.750331) (xy 76.294639 112.768604) (xy 76.254119 112.784045) (xy 76.212567 112.796503) (xy 76.17148 112.804188) (xy 76.091239 112.809963) (xy 75.704699 112.816876) (xy 73.267226 112.819786) (xy 72.246516 112.820719) (xy 71.838534 112.820886) (xy 71.491735 112.820696) (xy 71.200819 112.820028) (xy 70.960488 112.818763) (xy 70.765441 112.816782) (xy 70.683243 112.815486) (xy 70.610379 112.813966) (xy 70.546187 112.812207) (xy 70.490004 112.810194) (xy 70.441168 112.807913) (xy 70.399016 112.805348) (xy 70.362886 112.802485) (xy 70.332115 112.799308) (xy 70.306042 112.795803) (xy 70.284003 112.791955) (xy 70.265337 112.787749) (xy 70.24938 112.78317) (xy 70.235471 112.778203) (xy 70.222947 112.772833) (xy 70.211146 112.767045) (xy 70.199404 112.760825) (xy 70.173453 112.747026) (xy 70.156057 112.737303) (xy 70.137829 112.725726) (xy 70.118961 112.712487) (xy 70.099647 112.697776) (xy 70.080076 112.681787) (xy 70.060441 112.66471) (xy 70.040934 112.646738) (xy 70.021747 112.628063) (xy 70.003072 112.608876) (xy 69.9851 112.589369) (xy 69.968023 112.569734) (xy 69.952034 112.550163) (xy 69.937323 112.530849) (xy 69.924084 112.511981) (xy 69.912507 112.493754) (xy 69.902784 112.476357) (xy 69.877932 112.424902) (xy 69.859492 112.370854) (xy 69.846509 112.294433) (xy 69.842451 112.237703) (xy 70.257855 112.237703) (xy 70.289869 112.284269) (xy 70.293341 112.288764) (xy 70.29718 112.293489) (xy 70.301342 112.298402) (xy 70.305786 112.30346) (xy 70.315347 112.31384) (xy 70.325522 112.324288) (xy 70.33597 112.334463) (xy 70.34635 112.344024) (xy 70.351407 112.348468) (xy 70.35632 112.35263) (xy 70.361045 112.356469) (xy 70.36554 112.35994) (xy 70.412107 112.391955) (xy 73.273047 112.389045) (xy 76.133986 112.386134) (xy 76.168911 112.35703) (xy 76.172827 112.354136) (xy 76.176914 112.350936) (xy 76.181138 112.347463) (xy 76.185464 112.343751) (xy 76.189858 112.339834) (xy 76.194286 112.335747) (xy 76.203108 112.327198) (xy 76.211657 112.318376) (xy 76.215745 112.313948) (xy 76.219661 112.309554) (xy 76.223373 112.305228) (xy 76.226846 112.301004) (xy 76.230047 112.296917) (xy 76.23294 112.293001) (xy 76.242547 112.278443) (xy 76.249766 112.250209) (xy 76.254939 112.192165) (xy 76.258406 112.08818) (xy 76.261589 111.677857) (xy 76.262044 110.89018) (xy 76.261987 110.438594) (xy 76.261852 110.255743) (xy 76.261589 110.098774) (xy 76.261156 109.965629) (xy 76.260862 109.907347) (xy 76.260509 109.854248) (xy 76.260093 109.806076) (xy 76.259607 109.762572) (xy 76.259047 109.72348) (xy 76.258406 109.688542) (xy 76.257681 109.6575) (xy 76.256864 109.630098) (xy 76.255952 109.606078) (xy 76.254939 109.585182) (xy 76.253819 109.567154) (xy 76.253217 109.559134) (xy 76.252587 109.551734) (xy 76.251927 109.544923) (xy 76.251238 109.538668) (xy 76.250517 109.532936) (xy 76.249766 109.527696) (xy 76.248982 109.522915) (xy 76.248166 109.518561) (xy 76.247317 109.514603) (xy 76.246433 109.511007) (xy 76.245515 109.507742) (xy 76.244562 109.504775) (xy 76.243573 109.502075) (xy 76.242547 109.499609) (xy 76.241483 109.497345) (xy 76.240382 109.495251) (xy 76.239242 109.493294) (xy 76.238063 109.491443) (xy 76.235584 109.487928) (xy 76.23294 109.484449) (xy 76.229981 109.481011) (xy 76.226591 109.477275) (xy 76.218706 109.469078) (xy 76.209662 109.460199) (xy 76.199834 109.450979) (xy 76.189596 109.441759) (xy 76.179325 109.43288) (xy 76.169394 109.424683) (xy 76.16018 109.417509) (xy 76.113613 109.385494) (xy 70.409197 109.385494) (xy 70.36554 109.414599) (xy 70.361046 109.417525) (xy 70.356326 109.420817) (xy 70.351427 109.424434) (xy 70.346395 109.428332) (xy 70.341279 109.432469) (xy 70.336123 109.436802) (xy 70.330977 109.441288) (xy 70.325886 109.445886) (xy 70.320897 109.450551) (xy 70.316058 109.455242) (xy 70.311414 109.459916) (xy 70.307014 109.46453) (xy 70.302903 109.469042) (xy 70.299129 109.473409) (xy 70.295739 109.477589) (xy 70.29278 109.481538) (xy 70.283168 109.49692) (xy 70.275909 109.525467) (xy 70.270628 109.583346) (xy 70.26695 109.686723) (xy 70.262903 110.094636) (xy 70.260765 110.878538) (xy 70.257855 112.237703) (xy 69.842451 112.237703) (xy 69.838027 112.175857) (xy 69.833093 111.995343) (xy 69.830751 111.733109) (xy 69.830024 110.884359) (xy 69.830189 110.47054) (xy 69.830797 110.148433) (xy 69.832019 109.905521) (xy 69.834026 109.729288) (xy 69.835376 109.662263) (xy 69.836987 109.607215) (xy 69.838879 109.562577) (xy 69.841074 109.526786) (xy 69.843593 109.498277) (xy 69.846457 109.475484) (xy 69.849688 109.456845) (xy 69.853307 109.440792) (xy 69.862206 109.410544) (xy 69.87252 109.380936) (xy 69.884233 109.351992) (xy 69.897327 109.323739) (xy 69.911785 109.296202) (xy 69.927591 109.269408) (xy 69.944727 109.24338) (xy 69.963175 109.218146) (xy 69.98292 109.19373) (xy 70.003944 109.170158) (xy 70.02623 109.147456) (xy 70.04976 109.125649) (xy 70.074519 109.104763) (xy 70.100488 109.084824) (xy 70.127651 109.065856) (xy 70.15599 109.047886) (xy 70.207292 109.019066) (xy 70.260811 108.997409) (xy 70.294551 108.988946) (xy 70.336226 108.98189) (xy 70.453217 108.971488) (xy 70.631463 108.965178) (xy 70.890643 108.961938) (xy 71.730526 108.960574) (xy 73.046034 108.960574) (xy 73.060586 108.855799) (xy 73.064775 108.829996) (xy 73.069675 108.803951) (xy 73.07525 108.777761) (xy 73.081459 108.751524) (xy 73.088265 108.725338) (xy 73.09563 108.699301) (xy 73.103515 108.673512) (xy 73.111882 108.648068) (xy 73.120692 108.623067) (xy 73.129907 108.598608) (xy 73.139489 108.574788) (xy 73.149399 108.551706) (xy 73.159599 108.529459) (xy 73.170051 108.508146) (xy 73.180715 108.487865) (xy 73.191555 108.468713) (xy 73.227196 108.41258) (xy 73.246053 108.385266) (xy 73.266043 108.357981) (xy 73.2875 108.330373) (xy 73.310757 108.302086) (xy 73.336145 108.272768) (xy 73.363997 108.242065) (xy 73.428424 108.175085) (xy 73.506698 108.098317) (xy 73.60148 108.00893) (xy 73.71543 107.904093) (xy 73.741621 107.879605) (xy 73.766709 107.855258) (xy 73.790679 107.831056) (xy 73.81352 107.807003) (xy 73.835218 107.783103) (xy 73.855761 107.759362) (xy 73.875135 107.735782) (xy 73.893329 107.712369) (xy 73.910329 107.689126) (xy 73.926122 107.666058) (xy 73.940697 107.643169) (xy 73.954039 107.620463) (xy 73.966136 107.597945) (xy 73.976975 107.575619) (xy 73.986544 107.553489) (xy 73.99483 107.531559) (xy 74.001805 107.51159) (xy 74.007518 107.490222) (xy 74.012071 107.466331) (xy 74.015567 107.43879) (xy 74.018107 107.406474) (xy 74.019796 107.368258) (xy 74.020733 107.323015) (xy 74.021023 107.269622) (xy 74.021023 107.074624) (xy 74.195649 107.033878) (xy 74.274901 107.013886) (xy 74.306627 107.006156) (xy 74.33362 106.999999) (xy 74.345468 106.997525) (xy 74.356283 106.995462) (xy 74.366115 106.993816) (xy 74.375014 106.992592) (xy 74.383031 106.991797) (xy 74.390216 106.991436) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 4caa43a9-fa63-4b26-ba91-f748a16378d2)) (gr_poly (pts (xy 71.12 110.998) (xy 71.12413 110.9984) (xy 71.128764 110.999055) (xy 71.133845 110.999957) (xy 71.139318 111.001098) (xy 71.145128 111.00247) (xy 71.157537 111.005869) (xy 71.164026 111.00788) (xy 71.170629 111.010087) (xy 71.177291 111.012481) (xy 71.183959 111.015055) (xy 71.190575 111.017799) (xy 71.197084 111.020705) (xy 71.203431 111.023765) (xy 71.209561 111.02697) (xy 71.221453 111.034113) (xy 71.233072 111.042374) (xy 71.24435 111.051641) (xy 71.255218 111.061803) (xy 71.265609 111.07275) (xy 71.275455 111.084371) (xy 71.284686 111.096554) (xy 71.293235 111.109189) (xy 71.301034 111.122165) (xy 71.308015 111.135371) (xy 71.314109 111.148697) (xy 71.319247 111.162031) (xy 71.323363 111.175263) (xy 71.326387 111.188282) (xy 71.328251 111.200976) (xy 71.328727 111.207168) (xy 71.328888 111.213236) (xy 71.328727 111.219305) (xy 71.328251 111.225495) (xy 71.327468 111.231793) (xy 71.326387 111.238185) (xy 71.325016 111.244655) (xy 71.323363 111.25119) (xy 71.321437 111.257775) (xy 71.319247 111.264396) (xy 71.314109 111.277687) (xy 71.308015 111.290948) (xy 71.301035 111.304064) (xy 71.293236 111.31692) (xy 71.284686 111.3294) (xy 71.275455 111.341391) (xy 71.265609 111.352776) (xy 71.255218 111.363441) (xy 71.249839 111.368467) (xy 71.24435 111.37327) (xy 71.238758 111.377835) (xy 71.233072 111.382148) (xy 71.227301 111.386195) (xy 71.221453 111.389961) (xy 71.215537 111.393431) (xy 71.209561 111.396592) (xy 71.203431 111.39983) (xy 71.197084 111.402982) (xy 71.190574 111.406031) (xy 71.183959 111.408962) (xy 71.177291 111.411756) (xy 71.170629 111.414396) (xy 71.164025 111.416866) (xy 71.157537 111.419148) (xy 71.15122 111.421226) (xy 71.145128 111.423082) (xy 71.139318 111.424699) (xy 71.133845 111.42606) (xy 71.128764 111.427149) (xy 71.12413 111.427948) (xy 71.12 111.428439) (xy 71.116428 111.428607) (xy 71.112856 111.428439) (xy 71.108725 111.427948) (xy 71.104092 111.427149) (xy 71.099011 111.42606) (xy 71.093537 111.424699) (xy 71.087727 111.423082) (xy 71.075318 111.419148) (xy 71.062227 111.414396) (xy 71.048897 111.408962) (xy 71.042281 111.406031) (xy 71.035772 111.402982) (xy 71.029424 111.39983) (xy 71.023294 111.396592) (xy 71.011403 111.389993) (xy 70.999784 111.382268) (xy 70.988506 111.373519) (xy 70.977637 111.36385) (xy 70.967246 111.353362) (xy 70.957401 111.342158) (xy 70.948169 111.33034) (xy 70.93962 111.318011) (xy 70.931821 111.305272) (xy 70.924841 111.292226) (xy 70.918747 111.278976) (xy 70.913608 111.265623) (xy 70.909493 111.252271) (xy 70.906469 111.23902) (xy 70.904604 111.225975) (xy 70.904128 111.219561) (xy 70.903967 111.213236) (xy 70.904128 111.206911) (xy 70.904604 111.200497) (xy 70.905387 111.194004) (xy 70.906469 111.187446) (xy 70.90784 111.180835) (xy 70.909493 111.174182) (xy 70.911418 111.167501) (xy 70.913608 111.160803) (xy 70.918747 111.147407) (xy 70.924841 111.134092) (xy 70.931821 111.120956) (xy 70.93962 111.108097) (xy 70.948169 111.095614) (xy 70.957401 111.083603) (xy 70.967246 111.072164) (xy 70.977637 111.061394) (xy 70.988506 111.051392) (xy 70.999784 111.042255) (xy 71.005555 111.038042) (xy 71.011403 111.034081) (xy 71.017319 111.030387) (xy 71.023294 111.02697) (xy 71.035772 111.021541) (xy 71.048897 111.016283) (xy 71.062227 111.011366) (xy 71.075318 111.00696) (xy 71.087727 111.003237) (xy 71.093537 111.001685) (xy 71.099011 111.000366) (xy 71.104092 110.999304) (xy 71.108725 110.998519) (xy 71.112856 110.998032) (xy 71.116428 110.997865) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 56949209-1f1c-4689-a3e7-d6e4d07987ba)) (gr_poly (pts (xy 72.836484 111.000776) (xy 72.840056 111.000911) (xy 72.844186 111.00131) (xy 72.84882 111.001965) (xy 72.853901 111.002868) (xy 72.859374 111.004009) (xy 72.865184 111.00538) (xy 72.877594 111.008779) (xy 72.884082 111.01079) (xy 72.890685 111.012997) (xy 72.897348 111.015392) (xy 72.904015 111.017965) (xy 72.910631 111.02071) (xy 72.91714 111.023616) (xy 72.923487 111.026675) (xy 72.929617 111.02988) (xy 72.941509 111.036992) (xy 72.953128 111.045165) (xy 72.964406 111.054302) (xy 72.975274 111.064305) (xy 72.985665 111.075075) (xy 72.995511 111.086514) (xy 73.004742 111.098524) (xy 73.013292 111.111008) (xy 73.021091 111.123867) (xy 73.028071 111.137003) (xy 73.034165 111.150318) (xy 73.039304 111.163714) (xy 73.043419 111.177093) (xy 73.046443 111.190356) (xy 73.048308 111.203407) (xy 73.048784 111.209822) (xy 73.048944 111.216147) (xy 73.048809 111.219719) (xy 73.04841 111.223849) (xy 73.047755 111.228482) (xy 73.046852 111.233564) (xy 73.045711 111.239037) (xy 73.04434 111.244847) (xy 73.040941 111.257256) (xy 73.03893 111.263744) (xy 73.036723 111.270347) (xy 73.034328 111.27701) (xy 73.031755 111.283677) (xy 73.02901 111.290293) (xy 73.026104 111.296802) (xy 73.023045 111.30315) (xy 73.01984 111.30928) (xy 73.012728 111.321172) (xy 73.004555 111.332791) (xy 72.995418 111.344069) (xy 72.985415 111.354937) (xy 72.974646 111.365328) (xy 72.963206 111.375174) (xy 72.951196 111.384405) (xy 72.938712 111.392954) (xy 72.925853 111.400753) (xy 72.912717 111.407734) (xy 72.899402 111.413828) (xy 72.886006 111.418966) (xy 72.872627 111.423082) (xy 72.859364 111.426106) (xy 72.846313 111.42797) (xy 72.839898 111.428446) (xy 72.833573 111.428607) (xy 72.830001 111.428439) (xy 72.825871 111.427948) (xy 72.821238 111.427149) (xy 72.816156 111.42606) (xy 72.810683 111.424699) (xy 72.804873 111.423082) (xy 72.792464 111.419148) (xy 72.779373 111.414396) (xy 72.766043 111.408962) (xy 72.759427 111.406031) (xy 72.752917 111.402982) (xy 72.74657 111.39983) (xy 72.74044 111.396592) (xy 72.728548 111.389993) (xy 72.71693 111.382268) (xy 72.705652 111.373519) (xy 72.694783 111.36385) (xy 72.684392 111.353362) (xy 72.674547 111.342158) (xy 72.665315 111.33034) (xy 72.656766 111.318011) (xy 72.648967 111.305272) (xy 72.641986 111.292226) (xy 72.635893 111.278976) (xy 72.630754 111.265623) (xy 72.626638 111.252271) (xy 72.623614 111.23902) (xy 72.62175 111.225975) (xy 72.621274 111.219561) (xy 72.621113 111.213236) (xy 72.621274 111.206911) (xy 72.62175 111.200497) (xy 72.622533 111.194004) (xy 72.623614 111.187446) (xy 72.624986 111.180835) (xy 72.626638 111.174182) (xy 72.628564 111.167501) (xy 72.630754 111.160803) (xy 72.635893 111.147407) (xy 72.641986 111.134092) (xy 72.648967 111.120956) (xy 72.656766 111.108097) (xy 72.665315 111.095614) (xy 72.674547 111.083603) (xy 72.684392 111.072164) (xy 72.694783 111.061394) (xy 72.705652 111.051392) (xy 72.71693 111.042255) (xy 72.722701 111.038042) (xy 72.728548 111.034081) (xy 72.734465 111.030387) (xy 72.74044 111.02697) (xy 72.752804 111.021547) (xy 72.765679 111.016328) (xy 72.778759 111.011519) (xy 72.785279 111.009332) (xy 72.791736 111.007324) (xy 72.798091 111.005521) (xy 72.804304 111.003948) (xy 72.810339 111.00263) (xy 72.816156 111.001594) (xy 72.821718 111.000865) (xy 72.826985 111.000469) (xy 72.83192 111.000431) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 62c5e98b-3356-465e-9104-078d73320fef)) (gr_poly (pts (xy 73.255435 110.357196) (xy 73.258494 110.357573) (xy 73.264819 110.357734) (xy 73.271234 110.35821) (xy 73.277726 110.358993) (xy 73.284284 110.360074) (xy 73.290896 110.361446) (xy 73.297548 110.363098) (xy 73.304229 110.365024) (xy 73.310927 110.367214) (xy 73.324323 110.372353) (xy 73.337638 110.378446) (xy 73.350774 110.385427) (xy 73.363633 110.393226) (xy 73.376117 110.401775) (xy 73.388127 110.411007) (xy 73.399566 110.420852) (xy 73.410336 110.431243) (xy 73.420339 110.442112) (xy 73.429476 110.45339) (xy 73.433689 110.459161) (xy 73.437649 110.465009) (xy 73.441344 110.470925) (xy 73.444761 110.4769) (xy 73.450189 110.489378) (xy 73.455448 110.502503) (xy 73.460365 110.515833) (xy 73.46477 110.528924) (xy 73.468493 110.541333) (xy 73.470046 110.547143) (xy 73.471364 110.552617) (xy 73.472426 110.557698) (xy 73.473211 110.562331) (xy 73.473698 110.566462) (xy 73.473865 110.570034) (xy 73.473704 110.576102) (xy 73.473228 110.582293) (xy 73.472445 110.588591) (xy 73.471364 110.594983) (xy 73.469992 110.601453) (xy 73.46834 110.607988) (xy 73.466414 110.614573) (xy 73.464224 110.621193) (xy 73.459085 110.634484) (xy 73.452992 110.647745) (xy 73.446011 110.660861) (xy 73.438212 110.673717) (xy 73.429663 110.686198) (xy 73.420431 110.698189) (xy 73.410586 110.709574) (xy 73.400195 110.720238) (xy 73.394816 110.725265) (xy 73.389326 110.730068) (xy 73.383734 110.734633) (xy 73.378048 110.738946) (xy 73.372277 110.742993) (xy 73.36643 110.746758) (xy 73.360513 110.750229) (xy 73.354538 110.75339) (xy 73.348408 110.756627) (xy 73.342061 110.759779) (xy 73.335551 110.762829) (xy 73.328935 110.765759) (xy 73.322268 110.768553) (xy 73.315605 110.771194) (xy 73.309002 110.773664) (xy 73.302514 110.775946) (xy 73.296197 110.778023) (xy 73.290105 110.779879) (xy 73.284295 110.781497) (xy 73.278822 110.782858) (xy 73.273741 110.783947) (xy 73.269107 110.784745) (xy 73.264977 110.785237) (xy 73.261405 110.785405) (xy 73.257833 110.785237) (xy 73.253702 110.784745) (xy 73.249069 110.783947) (xy 73.243988 110.782858) (xy 73.238514 110.781497) (xy 73.232704 110.779879) (xy 73.220295 110.775946) (xy 73.207204 110.771194) (xy 73.193874 110.765759) (xy 73.187258 110.762829) (xy 73.180748 110.759779) (xy 73.174401 110.756627) (xy 73.168271 110.75339) (xy 73.156379 110.74679) (xy 73.144761 110.739065) (xy 73.133483 110.730317) (xy 73.122614 110.720648) (xy 73.112223 110.71016) (xy 73.102378 110.698956) (xy 73.093146 110.687138) (xy 73.084597 110.674809) (xy 73.076798 110.66207) (xy 73.069817 110.649024) (xy 73.063724 110.635774) (xy 73.058585 110.622421) (xy 73.05447 110.609068) (xy 73.051445 110.595818) (xy 73.049581 110.582773) (xy 73.049105 110.576358) (xy 73.048944 110.570034) (xy 73.049105 110.563709) (xy 73.049581 110.557294) (xy 73.050364 110.550802) (xy 73.051445 110.544244) (xy 73.052817 110.537632) (xy 73.05447 110.53098) (xy 73.056395 110.524299) (xy 73.058585 110.517601) (xy 73.063724 110.504205) (xy 73.069817 110.49089) (xy 73.076798 110.477754) (xy 73.084597 110.464895) (xy 73.093146 110.452412) (xy 73.102378 110.440401) (xy 73.112223 110.428962) (xy 73.122614 110.418192) (xy 73.133483 110.40819) (xy 73.144761 110.399053) (xy 73.150532 110.394839) (xy 73.156379 110.390879) (xy 73.162295 110.387184) (xy 73.168271 110.383767) (xy 73.1744 110.380563) (xy 73.180743 110.377509) (xy 73.187239 110.374616) (xy 73.193829 110.371898) (xy 73.200452 110.369368) (xy 73.207051 110.367038) (xy 73.213563 110.364921) (xy 73.219931 110.363031) (xy 73.226095 110.361378) (xy 73.231994 110.359978) (xy 73.237569 110.358842) (xy 73.24276 110.357983) (xy 73.247508 110.357413) (xy 73.251753 110.357147) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 812153b4-a661-4671-b49d-76ef5744952d)) (gr_poly (pts (xy 73.695718 109.711596) (xy 73.699849 109.711996) (xy 73.704482 109.712651) (xy 73.709563 109.713553) (xy 73.715037 109.714694) (xy 73.720847 109.716066) (xy 73.733256 109.719465) (xy 73.739744 109.721476) (xy 73.746347 109.723683) (xy 73.75301 109.726077) (xy 73.759677 109.728651) (xy 73.766293 109.731395) (xy 73.772802 109.734301) (xy 73.779149 109.737361) (xy 73.785279 109.740565) (xy 73.797171 109.747709) (xy 73.80879 109.75597) (xy 73.820068 109.765237) (xy 73.830937 109.775399) (xy 73.841328 109.786346) (xy 73.851173 109.797967) (xy 73.860405 109.81015) (xy 73.868954 109.822785) (xy 73.876753 109.835761) (xy 73.883734 109.848967) (xy 73.889827 109.862293) (xy 73.894966 109.875627) (xy 73.899081 109.888859) (xy 73.902105 109.901877) (xy 73.90397 109.914572) (xy 73.904446 109.920763) (xy 73.904607 109.926832) (xy 73.904446 109.9329) (xy 73.90397 109.939091) (xy 73.903187 109.945389) (xy 73.902105 109.951781) (xy 73.900734 109.958251) (xy 73.899081 109.964786) (xy 73.897156 109.971371) (xy 73.894966 109.977991) (xy 73.889827 109.991282) (xy 73.883733 110.004543) (xy 73.876753 110.017659) (xy 73.868954 110.030515) (xy 73.860405 110.042996) (xy 73.851173 110.054987) (xy 73.841328 110.066372) (xy 73.830937 110.077037) (xy 73.825558 110.082063) (xy 73.820068 110.086866) (xy 73.814476 110.091431) (xy 73.80879 110.095744) (xy 73.803019 110.099791) (xy 73.797171 110.103557) (xy 73.791255 110.107027) (xy 73.785279 110.110189) (xy 73.779149 110.113426) (xy 73.772802 110.116578) (xy 73.766293 110.119627) (xy 73.759677 110.122558) (xy 73.75301 110.125352) (xy 73.746347 110.127992) (xy 73.739744 110.130462) (xy 73.733256 110.132744) (xy 73.726938 110.134822) (xy 73.720847 110.136678) (xy 73.715037 110.138295) (xy 73.709563 110.139657) (xy 73.704482 110.140745) (xy 73.699849 110.141544) (xy 73.695718 110.142035) (xy 73.692146 110.142203) (xy 73.688574 110.142035) (xy 73.684444 110.141544) (xy 73.67981 110.140745) (xy 73.674729 110.139657) (xy 73.669256 110.138295) (xy 73.663446 110.136678) (xy 73.651037 110.132744) (xy 73.637946 110.127992) (xy 73.624616 110.122558) (xy 73.618 110.119627) (xy 73.61149 110.116578) (xy 73.605143 110.113426) (xy 73.599013 110.110189) (xy 73.587121 110.103589) (xy 73.575502 110.095864) (xy 73.564224 110.087115) (xy 73.553356 110.077446) (xy 73.542965 110.066958) (xy 73.533119 110.055754) (xy 73.523888 110.043936) (xy 73.515338 110.031607) (xy 73.507539 110.018868) (xy 73.500559 110.005823) (xy 73.494465 109.992572) (xy 73.489327 109.97922) (xy 73.485211 109.965867) (xy 73.482187 109.952616) (xy 73.480323 109.939571) (xy 73.479847 109.933157) (xy 73.479686 109.926832) (xy 73.479847 109.920507) (xy 73.480323 109.914093) (xy 73.481106 109.9076) (xy 73.482187 109.901042) (xy 73.483558 109.89443) (xy 73.485211 109.887778) (xy 73.487137 109.881097) (xy 73.489327 109.874399) (xy 73.494465 109.861003) (xy 73.500559 109.847688) (xy 73.50754 109.834552) (xy 73.515339 109.821693) (xy 73.523888 109.80921) (xy 73.533119 109.797199) (xy 73.542965 109.78576) (xy 73.553356 109.77499) (xy 73.564225 109.764988) (xy 73.575502 109.755851) (xy 73.581274 109.751637) (xy 73.587121 109.747677) (xy 73.593037 109.743982) (xy 73.599013 109.740565) (xy 73.605143 109.737361) (xy 73.61149 109.734301) (xy 73.618 109.731395) (xy 73.624616 109.728651) (xy 73.631283 109.726077) (xy 73.637946 109.723683) (xy 73.644549 109.721476) (xy 73.651037 109.719465) (xy 73.657354 109.717659) (xy 73.663446 109.716066) (xy 73.669256 109.714694) (xy 73.674729 109.713553) (xy 73.67981 109.712651) (xy 73.684444 109.711996) (xy 73.688574 109.711596) (xy 73.692146 109.711461) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 8db8e59c-d177-4a47-853c-6445c5a2ee8b)) (gr_line (start 67.31 41.656) (end 67.31 41.148) (stroke (width 0.12) (type default)) (layer "F.SilkS") (tstamp 90f023c7-5a4b-4067-9bec-07afef8bd9d0)) (gr_poly (pts (xy 71.547169 111.643978) (xy 71.550741 111.644113) (xy 71.554872 111.644512) (xy 71.559505 111.645168) (xy 71.564586 111.64607) (xy 71.57006 111.647211) (xy 71.57587 111.648582) (xy 71.588279 111.651982) (xy 71.594767 111.653993) (xy 71.60137 111.6562) (xy 71.608033 111.658594) (xy 71.6147 111.661168) (xy 71.621316 111.663912) (xy 71.627825 111.666818) (xy 71.634173 111.669878) (xy 71.640303 111.673082) (xy 71.652194 111.680194) (xy 71.663813 111.688368) (xy 71.675091 111.697505) (xy 71.68596 111.707507) (xy 71.696351 111.718277) (xy 71.706196 111.729716) (xy 71.715428 111.741726) (xy 71.723977 111.75421) (xy 71.731776 111.767069) (xy 71.738757 111.780205) (xy 71.74485 111.79352) (xy 71.749989 111.806916) (xy 71.754104 111.820295) (xy 71.757129 111.833559) (xy 71.758993 111.846609) (xy 71.759469 111.853024) (xy 71.75963 111.859349) (xy 71.759495 111.862921) (xy 71.759095 111.867051) (xy 71.75844 111.871685) (xy 71.757538 111.876766) (xy 71.756397 111.882239) (xy 71.755025 111.888049) (xy 71.751626 111.900458) (xy 71.749615 111.906946) (xy 71.747408 111.913549) (xy 71.745014 111.920212) (xy 71.74244 111.926879) (xy 71.739696 111.933495) (xy 71.73679 111.940005) (xy 71.73373 111.946352) (xy 71.730525 111.952482) (xy 71.723414 111.964374) (xy 71.71524 111.975993) (xy 71.706103 111.987271) (xy 71.696101 111.998139) (xy 71.685331 112.00853) (xy 71.673892 112.018376) (xy 71.661881 112.027607) (xy 71.649398 112.036157) (xy 71.636539 112.043956) (xy 71.623403 112.050936) (xy 71.610088 112.05703) (xy 71.596692 112.062169) (xy 71.583313 112.066284) (xy 71.570049 112.069308) (xy 71.556998 112.071173) (xy 71.550584 112.071649) (xy 71.544259 112.071809) (xy 71.540687 112.071642) (xy 71.536556 112.07115) (xy 71.531923 112.070351) (xy 71.526842 112.069263) (xy 71.521368 112.067901) (xy 71.515558 112.066284) (xy 71.503149 112.06235) (xy 71.490058 112.057598) (xy 71.476728 112.052164) (xy 71.470112 112.049234) (xy 71.463603 112.046184) (xy 71.457255 112.043032) (xy 71.451126 112.039795) (xy 71.439234 112.033195) (xy 71.427615 112.02547) (xy 71.416337 112.016722) (xy 71.405468 112.007052) (xy 71.395077 111.996565) (xy 71.385232 111.985361) (xy 71.376 111.973543) (xy 71.367451 111.961213) (xy 71.359652 111.948474) (xy 71.352672 111.935429) (xy 71.346578 111.922178) (xy 71.341439 111.908826) (xy 71.337324 111.895473) (xy 71.3343 111.882222) (xy 71.332435 111.869177) (xy 71.331959 111.862763) (xy 71.331799 111.856438) (xy 71.331959 111.850113) (xy 71.332435 111.843699) (xy 71.333218 111.837206) (xy 71.3343 111.830648) (xy 71.335671 111.824037) (xy 71.337324 111.817384) (xy 71.339249 111.810703) (xy 71.341439 111.804005) (xy 71.346578 111.790609) (xy 71.352672 111.777294) (xy 71.359652 111.764158) (xy 71.367451 111.7513) (xy 71.376 111.738816) (xy 71.385232 111.726806) (xy 71.395077 111.715366) (xy 71.405468 111.704597) (xy 71.416337 111.694594) (xy 71.427615 111.685457) (xy 71.433386 111.681244) (xy 71.439234 111.677284) (xy 71.44515 111.673589) (xy 71.451126 111.670172) (xy 71.463609 111.664749) (xy 71.476774 111.659531) (xy 71.490212 111.654722) (xy 71.496905 111.652535) (xy 71.503513 111.650527) (xy 71.509985 111.648723) (xy 71.516269 111.64715) (xy 71.522314 111.645833) (xy 71.52807 111.644797) (xy 71.533484 111.644068) (xy 71.538506 111.643671) (xy 71.543085 111.643633) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 9fe78667-e9db-480a-a2ef-4e2a68cb72ea)) (gr_poly (pts (xy 74.557201 109.714507) (xy 74.561332 109.714906) (xy 74.565965 109.715561) (xy 74.571046 109.716464) (xy 74.576519 109.717605) (xy 74.58233 109.718976) (xy 74.594739 109.722375) (xy 74.601227 109.724386) (xy 74.60783 109.726593) (xy 74.614493 109.728988) (xy 74.62116 109.731561) (xy 74.627776 109.734305) (xy 74.634285 109.737212) (xy 74.640633 109.740271) (xy 74.646762 109.743476) (xy 74.658654 109.750588) (xy 74.670273 109.758761) (xy 74.681551 109.767898) (xy 74.69242 109.777901) (xy 74.702811 109.78867) (xy 74.712656 109.80011) (xy 74.721888 109.81212) (xy 74.730437 109.824604) (xy 74.738236 109.837463) (xy 74.745217 109.850599) (xy 74.75131 109.863914) (xy 74.756449 109.87731) (xy 74.760565 109.890688) (xy 74.763589 109.903952) (xy 74.765453 109.917003) (xy 74.765929 109.923418) (xy 74.76609 109.929742) (xy 74.765955 109.933314) (xy 74.765555 109.937445) (xy 74.7649 109.942078) (xy 74.763998 109.947159) (xy 74.762857 109.952633) (xy 74.761485 109.958443) (xy 74.758086 109.970852) (xy 74.756075 109.97734) (xy 74.753868 109.983943) (xy 74.751474 109.990606) (xy 74.7489 109.997273) (xy 74.746156 110.003889) (xy 74.74325 110.010398) (xy 74.74019 110.016746) (xy 74.736986 110.022876) (xy 74.729874 110.034768) (xy 74.7217 110.046387) (xy 74.712563 110.057665) (xy 74.702561 110.068533) (xy 74.691791 110.078924) (xy 74.680352 110.08877) (xy 74.668342 110.098001) (xy 74.655858 110.106551) (xy 74.642999 110.11435) (xy 74.629863 110.12133) (xy 74.616548 110.127424) (xy 74.603152 110.132562) (xy 74.589773 110.136678) (xy 74.576509 110.139702) (xy 74.563458 110.141567) (xy 74.557044 110.142043) (xy 74.550719 110.142203) (xy 74.547147 110.142035) (xy 74.543017 110.141544) (xy 74.538383 110.140745) (xy 74.533302 110.139657) (xy 74.527829 110.138295) (xy 74.522019 110.136678) (xy 74.50961 110.132744) (xy 74.496518 110.127992) (xy 74.483189 110.122558) (xy 74.476573 110.119627) (xy 74.470063 110.116578) (xy 74.463716 110.113426) (xy 74.457586 110.110189) (xy 74.445694 110.103589) (xy 74.434075 110.095864) (xy 74.422797 110.087115) (xy 74.411929 110.077446) (xy 74.401537 110.066958) (xy 74.391692 110.055754) (xy 74.382461 110.043936) (xy 74.373911 110.031607) (xy 74.366112 110.018868) (xy 74.359132 110.005823) (xy 74.353038 109.992572) (xy 74.347899 109.97922) (xy 74.343784 109.965867) (xy 74.34076 109.952616) (xy 74.338895 109.939571) (xy 74.338419 109.933157) (xy 74.338259 109.926832) (xy 74.338419 109.920507) (xy 74.338895 109.914093) (xy 74.339678 109.9076) (xy 74.34076 109.901042) (xy 74.342131 109.89443) (xy 74.343784 109.887778) (xy 74.34571 109.881097) (xy 74.347899 109.874399) (xy 74.353038 109.861003) (xy 74.359132 109.847688) (xy 74.366112 109.834552) (xy 74.373911 109.821693) (xy 74.382461 109.80921) (xy 74.391692 109.797199) (xy 74.401538 109.78576) (xy 74.411929 109.77499) (xy 74.422797 109.764988) (xy 74.434075 109.755851) (xy 74.439846 109.751637) (xy 74.445694 109.747677) (xy 74.45161 109.743982) (xy 74.457586 109.740565) (xy 74.463748 109.737393) (xy 74.470188 109.734426) (xy 74.476841 109.731664) (xy 74.483643 109.729106) (xy 74.490531 109.726752) (xy 74.497439 109.724604) (xy 74.504305 109.72266) (xy 74.511065 109.72092) (xy 74.517654 109.719385) (xy 74.524008 109.718055) (xy 74.530064 109.71693) (xy 74.535758 109.716009) (xy 74.541025 109.715293) (xy 74.545802 109.714781) (xy 74.550025 109.714474) (xy 74.553629 109.714372) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp abac7c28-8233-4786-9bd6-68988937551b)) (gr_poly (pts (xy 75.208474 110.357573) (xy 75.262347 110.35814) (xy 75.309724 110.358835) (xy 75.351132 110.359786) (xy 75.3871 110.36112) (xy 75.403209 110.361971) (xy 75.418157 110.362966) (xy 75.432009 110.364121) (xy 75.444831 110.365452) (xy 75.45669 110.366974) (xy 75.467651 110.368705) (xy 75.477781 110.370659) (xy 75.487146 110.372853) (xy 75.495811 110.375303) (xy 75.503844 110.378024) (xy 75.511309 110.381034) (xy 75.518274 110.384347) (xy 75.524803 110.38798) (xy 75.530964 110.391948) (xy 75.536822 110.396269) (xy 75.542444 110.400957) (xy 75.547895 110.406028) (xy 75.553241 110.4115) (xy 75.558549 110.417387) (xy 75.563885 110.423706) (xy 75.574905 110.437702) (xy 75.586828 110.453617) (xy 75.596434 110.466646) (xy 75.600321 110.473953) (xy 75.603654 110.482539) (xy 75.606474 110.492967) (xy 75.608826 110.5058) (xy 75.612294 110.54093) (xy 75.614397 110.59243) (xy 75.615477 110.664804) (xy 75.615932 110.89018) (xy 75.615893 110.958009) (xy 75.615756 111.017806) (xy 75.615491 111.070134) (xy 75.615068 111.115555) (xy 75.614457 111.154632) (xy 75.61363 111.187929) (xy 75.613125 111.202585) (xy 75.612554 111.216007) (xy 75.611915 111.228265) (xy 75.611202 111.23943) (xy 75.610413 111.249571) (xy 75.609543 111.258759) (xy 75.608589 111.267065) (xy 75.607547 111.274559) (xy 75.606414 111.281311) (xy 75.605185 111.287392) (xy 75.603856 111.292871) (xy 75.602426 111.29782) (xy 75.600888 111.302308) (xy 75.59924 111.306406) (xy 75.597478 111.310184) (xy 75.595599 111.313713) (xy 75.593597 111.317063) (xy 75.591471 111.320304) (xy 75.586828 111.326742) (xy 75.577095 111.339779) (xy 75.567495 111.351634) (xy 75.557954 111.362356) (xy 75.548401 111.37199) (xy 75.538762 111.380584) (xy 75.528966 111.388185) (xy 75.518939 111.394839) (xy 75.50861 111.400594) (xy 75.497906 111.405496) (xy 75.486754 111.409592) (xy 75.475081 111.41293) (xy 75.462817 111.415555) (xy 75.449887 111.417515) (xy 75.436219 111.418858) (xy 75.421742 111.419629) (xy 75.406382 111.419875) (xy 75.391022 111.419597) (xy 75.376545 111.418738) (xy 75.362877 111.417266) (xy 75.356324 111.416289) (xy 75.349947 111.415146) (xy 75.343736 111.413832) (xy 75.337682 111.412343) (xy 75.331777 111.410676) (xy 75.32601 111.408825) (xy 75.320374 111.406786) (xy 75.314858 111.404556) (xy 75.309454 111.402129) (xy 75.304154 111.399502) (xy 75.298947 111.396671) (xy 75.293824 111.39363) (xy 75.288778 111.390377) (xy 75.283798 111.386906) (xy 75.278875 111.383213) (xy 75.274001 111.379294) (xy 75.269167 111.375145) (xy 75.264363 111.370762) (xy 75.254809 111.361275) (xy 75.245269 111.350798) (xy 75.235668 111.339299) (xy 75.225936 111.326742) (xy 75.217159 111.313759) (xy 75.213504 111.306866) (xy 75.210292 111.299275) (xy 75.20749 111.29066) (xy 75.205063 111.280698) (xy 75.202977 111.269065) (xy 75.201198 111.255437) (xy 75.198424 111.220898) (xy 75.196468 111.174491) (xy 75.195058 111.113622) (xy 75.193921 111.035701) (xy 75.191011 110.782494) (xy 75.062953 110.782494) (xy 75.036736 110.782315) (xy 75.012566 110.781744) (xy 74.990306 110.780729) (xy 74.969819 110.77922) (xy 74.95097 110.777165) (xy 74.933621 110.774513) (xy 74.925467 110.772948) (xy 74.917636 110.771214) (xy 74.910113 110.769305) (xy 74.90288 110.767215) (xy 74.895919 110.764937) (xy 74.889214 110.762465) (xy 74.882748 110.759793) (xy 74.876504 110.756914) (xy 74.870464 110.753822) (xy 74.864612 110.750511) (xy 74.858931 110.746973) (xy 74.853403 110.743204) (xy 74.848011 110.739195) (xy 74.842739 110.734941) (xy 74.837569 110.730436) (xy 74.832484 110.725673) (xy 74.827467 110.720645) (xy 74.822502 110.715347) (xy 74.812657 110.703913) (xy 74.804845 110.6939) (xy 74.797776 110.683528) (xy 74.791441 110.672831) (xy 74.785832 110.661843) (xy 74.780942 110.650597) (xy 74.776762 110.639126) (xy 74.773284 110.627464) (xy 74.770501 110.615646) (xy 74.768404 110.603703) (xy 74.766986 110.591671) (xy 74.766238 110.579582) (xy 74.766152 110.56747) (xy 74.766721 110.555369) (xy 74.767937 110.543312) (xy 74.76979 110.531333) (xy 74.772275 110.519466) (xy 74.775381 110.507743) (xy 74.779102 110.496199) (xy 74.78343 110.484866) (xy 74.788356 110.47378) (xy 74.793872 110.462973) (xy 74.799971 110.452478) (xy 74.806644 110.44233) (xy 74.813884 110.432562) (xy 74.821683 110.423208) (xy 74.830032 110.4143) (xy 74.838923 110.405874) (xy 74.848349 110.397961) (xy 74.858301 110.390597) (xy 74.868772 110.383814) (xy 74.879754 110.377645) (xy 74.891238 110.372126) (xy 74.897774 110.369532) (xy 74.905466 110.367203) (xy 74.924844 110.363303) (xy 74.95043 110.360359) (xy 74.98328 110.358301) (xy 75.024452 110.357062) (xy 75.075004 110.356573) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp ad6c83fc-f082-4e82-98ea-487f9818463d)) (gr_poly (pts (xy 73.578452 111.644995) (xy 73.700352 111.645519) (xy 73.805425 111.646115) (xy 73.894996 111.646831) (xy 73.970392 111.647712) (xy 74.003189 111.64823) (xy 74.032939 111.648807) (xy 74.059807 111.649449) (xy 74.083961 111.650162) (xy 74.105565 111.650952) (xy 74.124786 111.651824) (xy 74.141788 111.652785) (xy 74.156738 111.65384) (xy 74.169802 111.654996) (xy 74.181145 111.656257) (xy 74.190933 111.65763) (xy 74.199332 111.659121) (xy 74.206507 111.660736) (xy 74.212624 111.66248) (xy 74.217849 111.664359) (xy 74.222348 111.66638) (xy 74.226286 111.668548) (xy 74.229829 111.670869) (xy 74.233143 111.673348) (xy 74.236394 111.675992) (xy 74.249431 111.685725) (xy 74.261286 111.695325) (xy 74.272008 111.704866) (xy 74.281642 111.714419) (xy 74.290236 111.724058) (xy 74.297837 111.733854) (xy 74.304491 111.743881) (xy 74.310246 111.75421) (xy 74.315148 111.764914) (xy 74.319244 111.776066) (xy 74.322582 111.787739) (xy 74.325207 111.800003) (xy 74.327168 111.812933) (xy 74.32851 111.826601) (xy 74.329281 111.841078) (xy 74.329527 111.856438) (xy 74.329249 111.871798) (xy 74.32839 111.886276) (xy 74.326918 111.899943) (xy 74.325941 111.906496) (xy 74.324798 111.912873) (xy 74.323484 111.919084) (xy 74.321995 111.925138) (xy 74.320328 111.931043) (xy 74.318477 111.93681) (xy 74.316438 111.942446) (xy 74.314208 111.947962) (xy 74.311781 111.953366) (xy 74.309154 111.958666) (xy 74.306323 111.963873) (xy 74.303282 111.968996) (xy 74.300029 111.974042) (xy 74.296558 111.979022) (xy 74.292865 111.983945) (xy 74.288946 111.988819) (xy 74.284797 111.993653) (xy 74.280414 111.998457) (xy 74.270927 112.008011) (xy 74.26045 112.017551) (xy 74.248951 112.027151) (xy 74.236394 112.036884) (xy 74.222376 112.046496) (xy 74.199559 112.053755) (xy 74.157506 112.059036) (xy 74.08578 112.062714) (xy 73.811565 112.066761) (xy 73.293419 112.068899) (xy 72.889645 112.069945) (xy 72.729793 112.069564) (xy 72.597466 112.068535) (xy 72.492287 112.066824) (xy 72.413882 112.064397) (xy 72.361876 112.061219) (xy 72.345655 112.059339) (xy 72.335892 112.057257) (xy 72.330147 112.05546) (xy 72.324379 112.053351) (xy 72.312819 112.048242) (xy 72.301302 112.042024) (xy 72.289917 112.034792) (xy 72.278753 112.02664) (xy 72.267901 112.01766) (xy 72.25745 112.007946) (xy 72.247488 111.997594) (xy 72.238107 111.986695) (xy 72.229395 111.975345) (xy 72.221442 111.963636) (xy 72.214337 111.951663) (xy 72.20817 111.93952) (xy 72.203031 111.9273) (xy 72.199008 111.915097) (xy 72.197444 111.909031) (xy 72.196192 111.903005) (xy 72.194751 111.893713) (xy 72.193696 111.884401) (xy 72.193024 111.875081) (xy 72.19273 111.865766) (xy 72.19281 111.856471) (xy 72.193257 111.847209) (xy 72.194068 111.837992) (xy 72.195237 111.828835) (xy 72.196761 111.81975) (xy 72.198633 111.810751) (xy 72.20085 111.80185) (xy 72.203406 111.793063) (xy 72.206297 111.784401) (xy 72.209517 111.775878) (xy 72.213063 111.767508) (xy 72.216929 111.759303) (xy 72.22111 111.751277) (xy 72.225603 111.743444) (xy 72.230401 111.735817) (xy 72.2355 111.728408) (xy 72.240895 111.721232) (xy 72.246582 111.714302) (xy 72.252556 111.70763) (xy 72.258812 111.701231) (xy 72.265344 111.695118) (xy 72.272149 111.689303) (xy 72.279222 111.683801) (xy 72.286557 111.678624) (xy 72.294151 111.673787) (xy 72.301997 111.669301) (xy 72.310092 111.665181) (xy 72.31843 111.661441) (xy 72.338331 111.656512) (xy 72.377229 111.652573) (xy 72.531254 111.647252) (xy 72.818976 111.64466) (xy 73.278867 111.643978) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp aea5593b-3dc0-45a6-ace0-c57b0e44e695)) (gr_poly (pts (xy 71.122752 109.711622) (xy 71.129167 109.712098) (xy 71.13566 109.712881) (xy 71.142218 109.713962) (xy 71.148829 109.715334) (xy 71.155482 109.716986) (xy 71.162163 109.718912) (xy 71.168861 109.721102) (xy 71.182257 109.726241) (xy 71.195572 109.732334) (xy 71.208708 109.739315) (xy 71.221566 109.747114) (xy 71.23405 109.755663) (xy 71.246061 109.764895) (xy 71.2575 109.77474) (xy 71.26827 109.785131) (xy 71.278272 109.796) (xy 71.287409 109.807277) (xy 71.291622 109.813048) (xy 71.295582 109.818896) (xy 71.299277 109.824812) (xy 71.302694 109.830788) (xy 71.308123 109.843265) (xy 71.313381 109.856391) (xy 71.318298 109.869721) (xy 71.322703 109.882812) (xy 71.326427 109.895221) (xy 71.327979 109.901031) (xy 71.329297 109.906504) (xy 71.33036 109.911586) (xy 71.331145 109.916219) (xy 71.331632 109.92035) (xy 71.331799 109.923921) (xy 71.331638 109.92999) (xy 71.331162 109.936181) (xy 71.330379 109.942479) (xy 71.329297 109.94887) (xy 71.327926 109.955341) (xy 71.326273 109.961875) (xy 71.324348 109.96846) (xy 71.322158 109.975081) (xy 71.317019 109.988372) (xy 71.310925 110.001633) (xy 71.303945 110.014749) (xy 71.296146 110.027605) (xy 71.287597 110.040086) (xy 71.278365 110.052076) (xy 71.26852 110.063461) (xy 71.258129 110.074126) (xy 71.25275 110.079152) (xy 71.24726 110.083955) (xy 71.241668 110.08852) (xy 71.235982 110.092834) (xy 71.230211 110.09688) (xy 71.224363 110.100646) (xy 71.218447 110.104117) (xy 71.212472 110.107278) (xy 71.206342 110.110515) (xy 71.199994 110.113667) (xy 71.193485 110.116717) (xy 71.186869 110.119647) (xy 71.180202 110.122441) (xy 71.173539 110.125081) (xy 71.166936 110.127551) (xy 71.160448 110.129833) (xy 71.15413 110.131911) (xy 71.148039 110.133767) (xy 71.142228 110.135384) (xy 71.136755 110.136746) (xy 71.131674 110.137834) (xy 71.12704 110.138633) (xy 71.12291 110.139125) (xy 71.119338 110.139292) (xy 71.11327 110.139132) (xy 71.107079 110.138656) (xy 71.100781 110.137873) (xy 71.094389 110.136791) (xy 71.087919 110.13542) (xy 71.081384 110.133767) (xy 71.074799 110.131841) (xy 71.068178 110.129652) (xy 71.054888 110.124513) (xy 71.041627 110.118419) (xy 71.028511 110.111439) (xy 71.015655 110.10364) (xy 71.003174 110.09509) (xy 70.991183 110.085859) (xy 70.979798 110.076013) (xy 70.969133 110.065622) (xy 70.964107 110.060243) (xy 70.959304 110.054754) (xy 70.954739 110.049162) (xy 70.950426 110.043476) (xy 70.946379 110.037705) (xy 70.942613 110.031857) (xy 70.939143 110.025941) (xy 70.935982 110.019965) (xy 70.932745 110.013835) (xy 70.929593 110.007488) (xy 70.926543 110.000979) (xy 70.923613 109.994363) (xy 70.920819 109.987696) (xy 70.918178 109.981033) (xy 70.915709 109.97443) (xy 70.913426 109.967942) (xy 70.911349 109.961624) (xy 70.909493 109.955533) (xy 70.907875 109.949722) (xy 70.906514 109.944249) (xy 70.905425 109.939168) (xy 70.904627 109.934534) (xy 70.904135 109.930404) (xy 70.903967 109.926832) (xy 70.904128 109.920507) (xy 70.904604 109.914093) (xy 70.905387 109.9076) (xy 70.906469 109.901042) (xy 70.90784 109.89443) (xy 70.909493 109.887778) (xy 70.911418 109.881097) (xy 70.913608 109.874399) (xy 70.918747 109.861003) (xy 70.924841 109.847688) (xy 70.931821 109.834552) (xy 70.93962 109.821693) (xy 70.948169 109.80921) (xy 70.957401 109.797199) (xy 70.967246 109.78576) (xy 70.977637 109.77499) (xy 70.988506 109.764988) (xy 70.999784 109.755851) (xy 71.005555 109.751637) (xy 71.011403 109.747677) (xy 71.017319 109.743982) (xy 71.023294 109.740565) (xy 71.029424 109.737361) (xy 71.035772 109.734301) (xy 71.042281 109.731395) (xy 71.048897 109.728651) (xy 71.055564 109.726077) (xy 71.062227 109.723683) (xy 71.06883 109.721476) (xy 71.075318 109.719465) (xy 71.081636 109.717659) (xy 71.087727 109.716066) (xy 71.093537 109.714694) (xy 71.099011 109.713553) (xy 71.104092 109.712651) (xy 71.108725 109.711996) (xy 71.112856 109.711596) (xy 71.116428 109.711461) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp be70c03c-c94e-40d2-b997-6ca7207bba74)) (gr_poly (pts (xy 74.55363 111.000775) (xy 74.559954 111.000936) (xy 74.566369 111.001412) (xy 74.572862 111.002195) (xy 74.57942 111.003277) (xy 74.586031 111.004648) (xy 74.592684 111.006301) (xy 74.599365 111.008226) (xy 74.606063 111.010416) (xy 74.619458 111.015555) (xy 74.632773 111.021649) (xy 74.645909 111.028629) (xy 74.658768 111.036428) (xy 74.671252 111.044978) (xy 74.683262 111.054209) (xy 74.694702 111.064054) (xy 74.705472 111.074446) (xy 74.715474 111.085314) (xy 74.724611 111.096592) (xy 74.728824 111.102363) (xy 74.732784 111.108211) (xy 74.736479 111.114127) (xy 74.739896 111.120103) (xy 74.745325 111.13258) (xy 74.750583 111.145705) (xy 74.7555 111.159035) (xy 74.759905 111.172126) (xy 74.763629 111.184536) (xy 74.765181 111.190346) (xy 74.766499 111.195819) (xy 74.767561 111.2009) (xy 74.768346 111.205534) (xy 74.768833 111.209664) (xy 74.769 111.213236) (xy 74.768865 111.216808) (xy 74.768466 111.220938) (xy 74.767811 111.225572) (xy 74.766908 111.230653) (xy 74.765767 111.236126) (xy 74.764396 111.241936) (xy 74.760997 111.254345) (xy 74.758986 111.260833) (xy 74.756779 111.267437) (xy 74.754384 111.2741) (xy 74.751811 111.280767) (xy 74.749067 111.287383) (xy 74.746161 111.293892) (xy 74.743101 111.300239) (xy 74.739896 111.306369) (xy 74.732753 111.318261) (xy 74.724492 111.32988) (xy 74.715225 111.341158) (xy 74.705062 111.352027) (xy 74.694116 111.362418) (xy 74.682495 111.372263) (xy 74.670312 111.381495) (xy 74.657677 111.390044) (xy 74.644701 111.397843) (xy 74.631495 111.404823) (xy 74.618169 111.410917) (xy 74.604835 111.416056) (xy 74.591603 111.420171) (xy 74.578584 111.423195) (xy 74.56589 111.42506) (xy 74.559698 111.425536) (xy 74.55363 111.425697) (xy 74.547561 111.425536) (xy 74.541371 111.42506) (xy 74.535072 111.424277) (xy 74.528681 111.423195) (xy 74.522211 111.421824) (xy 74.515676 111.420171) (xy 74.509091 111.418246) (xy 74.50247 111.416056) (xy 74.489179 111.410917) (xy 74.475918 111.404823) (xy 74.462802 111.397843) (xy 74.449946 111.390044) (xy 74.437465 111.381494) (xy 74.425475 111.372263) (xy 74.41409 111.362417) (xy 74.403425 111.352026) (xy 74.398399 111.346647) (xy 74.393596 111.341158) (xy 74.389031 111.335566) (xy 74.384718 111.32988) (xy 74.380671 111.324109) (xy 74.376905 111.318261) (xy 74.373434 111.312345) (xy 74.370273 111.306369) (xy 74.367036 111.300239) (xy 74.363884 111.293892) (xy 74.360834 111.287383) (xy 74.357904 111.280767) (xy 74.35511 111.2741) (xy 74.35247 111.267437) (xy 74.35 111.260834) (xy 74.347718 111.254346) (xy 74.34564 111.248028) (xy 74.343784 111.241937) (xy 74.342167 111.236127) (xy 74.340805 111.230653) (xy 74.339717 111.225572) (xy 74.338918 111.220939) (xy 74.338426 111.216808) (xy 74.338259 111.213236) (xy 74.338419 111.206911) (xy 74.338895 111.200497) (xy 74.339678 111.194004) (xy 74.34076 111.187446) (xy 74.342131 111.180835) (xy 74.343784 111.174182) (xy 74.34571 111.167501) (xy 74.347899 111.160803) (xy 74.353038 111.147407) (xy 74.359132 111.134092) (xy 74.366112 111.120956) (xy 74.373911 111.108097) (xy 74.382461 111.095614) (xy 74.391692 111.083603) (xy 74.401538 111.072164) (xy 74.411929 111.061394) (xy 74.422797 111.051392) (xy 74.434075 111.042255) (xy 74.439846 111.038042) (xy 74.445694 111.034081) (xy 74.45161 111.030387) (xy 74.457586 111.02697) (xy 74.469949 111.021547) (xy 74.482825 111.016328) (xy 74.495904 111.011519) (xy 74.502425 111.009332) (xy 74.508882 111.007324) (xy 74.515236 111.005521) (xy 74.52145 111.003948) (xy 74.527485 111.00263) (xy 74.533302 111.001594) (xy 74.538864 111.000865) (xy 74.544131 111.000469) (xy 74.549066 111.00043) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp c0c36be9-56aa-45db-bbac-b7c6ee634728)) (gr_poly (pts (xy 74.126302 110.354823) (xy 74.132717 110.355299) (xy 74.13921 110.356082) (xy 74.145768 110.357164) (xy 74.152379 110.358535) (xy 74.159032 110.360188) (xy 74.165713 110.362114) (xy 74.172411 110.364303) (xy 74.185807 110.369442) (xy 74.199122 110.375536) (xy 74.212258 110.382516) (xy 74.225116 110.390315) (xy 74.2376 110.398865) (xy 74.249611 110.408096) (xy 74.26105 110.417942) (xy 74.27182 110.428333) (xy 74.281822 110.439201) (xy 74.290959 110.450479) (xy 74.295172 110.45625) (xy 74.299132 110.462098) (xy 74.302827 110.468014) (xy 74.306244 110.47399) (xy 74.311673 110.486467) (xy 74.316931 110.499592) (xy 74.321848 110.512922) (xy 74.326253 110.526013) (xy 74.329977 110.538422) (xy 74.331529 110.544233) (xy 74.332847 110.549706) (xy 74.33391 110.554787) (xy 74.334695 110.559421) (xy 74.335182 110.563551) (xy 74.335349 110.567123) (xy 74.335188 110.573192) (xy 74.334712 110.579382) (xy 74.333929 110.58568) (xy 74.332847 110.592072) (xy 74.331476 110.598542) (xy 74.329823 110.605077) (xy 74.327898 110.611662) (xy 74.325708 110.618283) (xy 74.320569 110.631574) (xy 74.314475 110.644835) (xy 74.307495 110.657951) (xy 74.299696 110.670807) (xy 74.291146 110.683288) (xy 74.281915 110.695278) (xy 74.27207 110.706663) (xy 74.261678 110.717328) (xy 74.2563 110.722354) (xy 74.25081 110.727157) (xy 74.245218 110.731722) (xy 74.239532 110.736035) (xy 74.233761 110.740082) (xy 74.227913 110.743848) (xy 74.221997 110.747319) (xy 74.216021 110.75048) (xy 74.209891 110.753717) (xy 74.203544 110.756869) (xy 74.197035 110.759919) (xy 74.190419 110.762849) (xy 74.183752 110.765643) (xy 74.177089 110.768283) (xy 74.170486 110.770753) (xy 74.163998 110.773035) (xy 74.15768 110.775113) (xy 74.151589 110.776969) (xy 74.145778 110.778586) (xy 74.140305 110.779948) (xy 74.135224 110.781036) (xy 74.13059 110.781835) (xy 74.12646 110.782326) (xy 74.122888 110.782494) (xy 74.116819 110.782334) (xy 74.110629 110.781858) (xy 74.104331 110.781074) (xy 74.097939 110.779993) (xy 74.091469 110.778622) (xy 74.084934 110.776969) (xy 74.078349 110.775043) (xy 74.071728 110.772853) (xy 74.058437 110.767715) (xy 74.045176 110.761621) (xy 74.03206 110.754641) (xy 74.019204 110.746842) (xy 74.006724 110.738292) (xy 73.994733 110.729061) (xy 73.983348 110.719215) (xy 73.972683 110.708824) (xy 73.967657 110.703445) (xy 73.962854 110.697956) (xy 73.958289 110.692364) (xy 73.953976 110.686678) (xy 73.949929 110.680907) (xy 73.946163 110.675059) (xy 73.942693 110.669143) (xy 73.939532 110.663167) (xy 73.936294 110.657037) (xy 73.933142 110.65069) (xy 73.930093 110.64418) (xy 73.927162 110.637565) (xy 73.924368 110.630898) (xy 73.921728 110.624235) (xy 73.919258 110.617632) (xy 73.916976 110.611144) (xy 73.914898 110.604826) (xy 73.913042 110.598735) (xy 73.911425 110.592924) (xy 73.910064 110.587451) (xy 73.908975 110.58237) (xy 73.908176 110.577736) (xy 73.907685 110.573606) (xy 73.907517 110.570034) (xy 73.907678 110.563709) (xy 73.908154 110.557294) (xy 73.908937 110.550802) (xy 73.910018 110.544244) (xy 73.91139 110.537632) (xy 73.913042 110.53098) (xy 73.914968 110.524299) (xy 73.917158 110.517601) (xy 73.922297 110.504205) (xy 73.92839 110.49089) (xy 73.935371 110.477754) (xy 73.94317 110.464895) (xy 73.951719 110.452412) (xy 73.960951 110.440401) (xy 73.970796 110.428962) (xy 73.981187 110.418192) (xy 73.992056 110.40819) (xy 74.003334 110.399053) (xy 74.009105 110.394839) (xy 74.014952 110.390879) (xy 74.020869 110.387184) (xy 74.026844 110.383767) (xy 74.032974 110.380563) (xy 74.039322 110.377503) (xy 74.045831 110.374597) (xy 74.052447 110.371853) (xy 74.059114 110.369279) (xy 74.065777 110.366885) (xy 74.07238 110.364678) (xy 74.078868 110.362667) (xy 74.085186 110.36086) (xy 74.091277 110.359267) (xy 74.097087 110.357896) (xy 74.102561 110.356755) (xy 74.107642 110.355852) (xy 74.112275 110.355197) (xy 74.116406 110.354798) (xy 74.119978 110.354663) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp c11c9a35-614a-42b8-8119-93ad30e65e43)) (gr_poly (pts (xy 72.839898 109.711622) (xy 72.846313 109.712098) (xy 72.852805 109.712881) (xy 72.859364 109.713962) (xy 72.865975 109.715334) (xy 72.872627 109.716986) (xy 72.879309 109.718912) (xy 72.886006 109.721102) (xy 72.899402 109.726241) (xy 72.912718 109.732334) (xy 72.925853 109.739315) (xy 72.938712 109.747114) (xy 72.951196 109.755663) (xy 72.963206 109.764895) (xy 72.974646 109.77474) (xy 72.985415 109.785131) (xy 72.995418 109.796) (xy 73.004555 109.807277) (xy 73.008768 109.813048) (xy 73.012728 109.818896) (xy 73.016423 109.824812) (xy 73.01984 109.830788) (xy 73.025269 109.843265) (xy 73.030527 109.856391) (xy 73.035444 109.869721) (xy 73.039849 109.882812) (xy 73.043573 109.895221) (xy 73.045125 109.901031) (xy 73.046443 109.906504) (xy 73.047505 109.911586) (xy 73.048291 109.916219) (xy 73.048777 109.92035) (xy 73.048944 109.923921) (xy 73.048784 109.92999) (xy 73.048308 109.936181) (xy 73.047525 109.942479) (xy 73.046443 109.94887) (xy 73.045072 109.955341) (xy 73.043419 109.961875) (xy 73.041493 109.96846) (xy 73.039304 109.975081) (xy 73.034165 109.988372) (xy 73.028071 110.001633) (xy 73.021091 110.014749) (xy 73.013292 110.027605) (xy 73.004742 110.040086) (xy 72.995511 110.052076) (xy 72.985665 110.063461) (xy 72.975274 110.074126) (xy 72.969895 110.079152) (xy 72.964406 110.083955) (xy 72.958814 110.08852) (xy 72.953128 110.092834) (xy 72.947357 110.09688) (xy 72.941509 110.100646) (xy 72.935593 110.104117) (xy 72.929617 110.107278) (xy 72.923487 110.110515) (xy 72.91714 110.113667) (xy 72.910631 110.116717) (xy 72.904015 110.119647) (xy 72.897348 110.122441) (xy 72.890685 110.125081) (xy 72.884082 110.127551) (xy 72.877594 110.129833) (xy 72.871276 110.131911) (xy 72.865184 110.133767) (xy 72.859374 110.135384) (xy 72.853901 110.136746) (xy 72.84882 110.137834) (xy 72.844186 110.138633) (xy 72.840056 110.139125) (xy 72.836484 110.139292) (xy 72.830415 110.139132) (xy 72.824225 110.138656) (xy 72.817927 110.137873) (xy 72.811535 110.136791) (xy 72.805065 110.13542) (xy 72.79853 110.133767) (xy 72.791945 110.131841) (xy 72.785324 110.129652) (xy 72.772033 110.124513) (xy 72.758772 110.118419) (xy 72.745656 110.111439) (xy 72.7328 110.10364) (xy 72.720319 110.09509) (xy 72.708329 110.085859) (xy 72.696944 110.076013) (xy 72.686279 110.065622) (xy 72.681253 110.060243) (xy 72.67645 110.054754) (xy 72.671885 110.049162) (xy 72.667572 110.043476) (xy 72.663525 110.037705) (xy 72.659759 110.031857) (xy 72.656289 110.025941) (xy 72.653128 110.019965) (xy 72.64989 110.013835) (xy 72.646738 110.007488) (xy 72.643689 110.000979) (xy 72.640758 109.994363) (xy 72.637965 109.987696) (xy 72.635324 109.981033) (xy 72.632854 109.97443) (xy 72.630572 109.967942) (xy 72.628494 109.961624) (xy 72.626638 109.955533) (xy 72.625021 109.949722) (xy 72.62366 109.944249) (xy 72.622571 109.939168) (xy 72.621773 109.934534) (xy 72.621281 109.930404) (xy 72.621113 109.926832) (xy 72.621274 109.920507) (xy 72.62175 109.914093) (xy 72.622533 109.9076) (xy 72.623614 109.901042) (xy 72.624986 109.89443) (xy 72.626638 109.887778) (xy 72.628564 109.881097) (xy 72.630754 109.874399) (xy 72.635893 109.861003) (xy 72.641986 109.847688) (xy 72.648967 109.834552) (xy 72.656766 109.821693) (xy 72.665315 109.80921) (xy 72.674547 109.797199) (xy 72.684392 109.78576) (xy 72.694783 109.77499) (xy 72.705652 109.764988) (xy 72.71693 109.755851) (xy 72.722701 109.751637) (xy 72.728548 109.747677) (xy 72.734465 109.743982) (xy 72.74044 109.740565) (xy 72.746538 109.737361) (xy 72.752798 109.734301) (xy 72.759177 109.731395) (xy 72.765633 109.728651) (xy 72.772124 109.726077) (xy 72.778605 109.723683) (xy 72.785036 109.721476) (xy 72.791372 109.719465) (xy 72.797573 109.717659) (xy 72.803594 109.716066) (xy 72.809393 109.714694) (xy 72.814929 109.713553) (xy 72.820157 109.712651) (xy 72.825035 109.711996) (xy 72.829522 109.711596) (xy 72.833573 109.711461) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp c5383451-e798-427e-8631-6dd983e845c0)) (gr_circle (center 64.048728 81.041328) (end 64.455128 81.041328) (stroke (width 0.12) (type solid)) (fill solid) (layer "F.SilkS") (tstamp d88e0c1e-780a-4330-9e02-0d8f43cbcef0)) (gr_poly (pts (xy 71.346351 110.357574) (xy 71.400225 110.358141) (xy 71.447601 110.358836) (xy 71.489009 110.359786) (xy 71.524977 110.361121) (xy 71.541087 110.361972) (xy 71.556034 110.362967) (xy 71.569886 110.364122) (xy 71.582708 110.365452) (xy 71.594567 110.366975) (xy 71.605528 110.368705) (xy 71.615658 110.370659) (xy 71.625023 110.372853) (xy 71.633688 110.375303) (xy 71.641721 110.378025) (xy 71.649186 110.381034) (xy 71.656151 110.384347) (xy 71.66268 110.38798) (xy 71.668841 110.391949) (xy 71.674699 110.396269) (xy 71.680321 110.400957) (xy 71.685772 110.406029) (xy 71.691118 110.4115) (xy 71.696427 110.417387) (xy 71.701762 110.423706) (xy 71.712782 110.437703) (xy 71.724705 110.453617) (xy 71.728141 110.458738) (xy 71.731356 110.464257) (xy 71.73712 110.476389) (xy 71.741997 110.4898) (xy 71.745987 110.504277) (xy 71.749091 110.519606) (xy 71.751308 110.535575) (xy 71.752638 110.55197) (xy 71.753081 110.568579) (xy 71.752638 110.585187) (xy 71.751308 110.601582) (xy 71.749091 110.617551) (xy 71.745987 110.632881) (xy 71.741997 110.647357) (xy 71.73712 110.660768) (xy 71.731356 110.6729) (xy 71.728141 110.67842) (xy 71.724705 110.68354) (xy 71.702507 110.713452) (xy 71.692046 110.725657) (xy 71.681367 110.736201) (xy 71.669989 110.745209) (xy 71.65743 110.75281) (xy 71.643208 110.759133) (xy 71.626842 110.764304) (xy 71.60785 110.768453) (xy 71.585749 110.771705) (xy 71.56006 110.774191) (xy 71.530298 110.776037) (xy 71.456634 110.778322) (xy 71.360903 110.779584) (xy 71.30763 110.780494) (xy 71.259959 110.781) (xy 71.217489 110.781036) (xy 71.17982 110.780539) (xy 71.146551 110.779446) (xy 71.131441 110.778655) (xy 71.11728 110.777692) (xy 71.10402 110.776547) (xy 71.091608 110.775212) (xy 71.079996 110.773681) (xy 71.069133 110.771945) (xy 71.05897 110.769995) (xy 71.049455 110.767824) (xy 71.04054 110.765424) (xy 71.032173 110.762787) (xy 71.024306 110.759905) (xy 71.016887 110.756769) (xy 71.009866 110.753373) (xy 71.003194 110.749707) (xy 70.996821 110.745764) (xy 70.990696 110.741537) (xy 70.984769 110.737016) (xy 70.97899 110.732193) (xy 70.97331 110.727062) (xy 70.967677 110.721614) (xy 70.956355 110.709734) (xy 70.947998 110.699457) (xy 70.940385 110.688836) (xy 70.933511 110.677906) (xy 70.92737 110.666698) (xy 70.921956 110.655244) (xy 70.917262 110.643578) (xy 70.913284 110.631732) (xy 70.910016 110.619739) (xy 70.90745 110.60763) (xy 70.905582 110.595438) (xy 70.904406 110.583197) (xy 70.903916 110.570938) (xy 70.904106 110.558694) (xy 70.90497 110.546497) (xy 70.906502 110.53438) (xy 70.908697 110.522376) (xy 70.911548 110.510517) (xy 70.91505 110.498835) (xy 70.919196 110.487363) (xy 70.923982 110.476133) (xy 70.929401 110.465179) (xy 70.935447 110.454532) (xy 70.942114 110.444225) (xy 70.949397 110.434291) (xy 70.95729 110.424761) (xy 70.965786 110.415669) (xy 70.97488 110.407047) (xy 70.984567 110.398928) (xy 70.994839 110.391343) (xy 71.005692 110.384327) (xy 71.017119 110.37791) (xy 71.029115 110.372126) (xy 71.035652 110.369532) (xy 71.043343 110.367203) (xy 71.062721 110.363303) (xy 71.088307 110.360359) (xy 71.121157 110.358301) (xy 71.162329 110.357062) (xy 71.212881 110.356573) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp ecce7498-9f7b-43a0-b5e8-06db7e6d3727)) (gr_poly (pts (xy 71.973827 109.713994) (xy 71.977911 109.714372) (xy 71.984236 109.714532) (xy 71.990651 109.715008) (xy 71.997143 109.715791) (xy 72.003701 109.716873) (xy 72.010313 109.718244) (xy 72.016965 109.719897) (xy 72.023646 109.721822) (xy 72.030344 109.724012) (xy 72.04374 109.729151) (xy 72.057055 109.735245) (xy 72.070191 109.742225) (xy 72.08305 109.750024) (xy 72.095534 109.758574) (xy 72.107544 109.767805) (xy 72.118983 109.777651) (xy 72.129753 109.788042) (xy 72.139756 109.79891) (xy 72.148893 109.810188) (xy 72.153106 109.815959) (xy 72.157066 109.821807) (xy 72.160761 109.827723) (xy 72.164178 109.833699) (xy 72.169606 109.846176) (xy 72.174864 109.859301) (xy 72.179781 109.872631) (xy 72.184187 109.885722) (xy 72.18791 109.898131) (xy 72.189463 109.903942) (xy 72.190781 109.909415) (xy 72.191843 109.914496) (xy 72.192628 109.91913) (xy 72.193115 109.92326) (xy 72.193282 109.926832) (xy 72.193147 109.930404) (xy 72.192748 109.934534) (xy 72.192092 109.939168) (xy 72.19119 109.944249) (xy 72.190049 109.949722) (xy 72.188678 109.955532) (xy 72.185278 109.967941) (xy 72.183267 109.974429) (xy 72.18106 109.981033) (xy 72.178666 109.987695) (xy 72.176092 109.994362) (xy 72.173348 110.000978) (xy 72.170442 110.007488) (xy 72.167382 110.013835) (xy 72.164178 110.019965) (xy 72.157034 110.031857) (xy 72.148773 110.043476) (xy 72.139506 110.054754) (xy 72.129344 110.065622) (xy 72.118397 110.076014) (xy 72.106777 110.085859) (xy 72.094594 110.09509) (xy 72.081959 110.10364) (xy 72.068982 110.111439) (xy 72.055776 110.118419) (xy 72.04245 110.124513) (xy 72.029116 110.129652) (xy 72.015884 110.133767) (xy 72.002866 110.136791) (xy 71.990171 110.138656) (xy 71.98398 110.139132) (xy 71.977911 110.139292) (xy 71.971843 110.139132) (xy 71.965652 110.138656) (xy 71.959354 110.137873) (xy 71.952962 110.136791) (xy 71.946492 110.13542) (xy 71.939957 110.133767) (xy 71.933372 110.131841) (xy 71.926751 110.129652) (xy 71.913461 110.124513) (xy 71.9002 110.118419) (xy 71.887083 110.111439) (xy 71.874227 110.10364) (xy 71.861747 110.09509) (xy 71.849756 110.085859) (xy 71.838371 110.076013) (xy 71.827706 110.065622) (xy 71.82268 110.060243) (xy 71.817877 110.054754) (xy 71.813312 110.049162) (xy 71.808999 110.043476) (xy 71.804952 110.037705) (xy 71.801186 110.031857) (xy 71.797716 110.025941) (xy 71.794555 110.019965) (xy 71.791318 110.013835) (xy 71.788166 110.007488) (xy 71.785116 110.000979) (xy 71.782186 109.994363) (xy 71.779392 109.987696) (xy 71.776751 109.981033) (xy 71.774281 109.97443) (xy 71.771999 109.967942) (xy 71.769922 109.961624) (xy 71.768066 109.955533) (xy 71.766448 109.949722) (xy 71.765087 109.944249) (xy 71.763998 109.939168) (xy 71.7632 109.934534) (xy 71.762708 109.930404) (xy 71.76254 109.926832) (xy 71.762701 109.920507) (xy 71.763177 109.914093) (xy 71.76396 109.9076) (xy 71.765041 109.901042) (xy 71.766413 109.89443) (xy 71.768066 109.887778) (xy 71.769991 109.881097) (xy 71.772181 109.874399) (xy 71.77732 109.861003) (xy 71.783413 109.847688) (xy 71.790394 109.834552) (xy 71.798193 109.821693) (xy 71.806742 109.80921) (xy 71.815974 109.797199) (xy 71.825819 109.78576) (xy 71.83621 109.77499) (xy 71.847079 109.764988) (xy 71.858357 109.755851) (xy 71.864128 109.751637) (xy 71.869976 109.747677) (xy 71.875892 109.743982) (xy 71.881867 109.740565) (xy 71.887998 109.737362) (xy 71.89435 109.734307) (xy 71.900873 109.731414) (xy 71.907515 109.728696) (xy 71.914226 109.726166) (xy 71.920953 109.723836) (xy 71.927647 109.721719) (xy 71.934255 109.719829) (xy 71.940726 109.718177) (xy 71.947011 109.716776) (xy 71.953056 109.71564) (xy 71.958811 109.714781) (xy 71.964226 109.714212) (xy 71.969248 109.713945) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp efcdac77-c6f4-44d0-acb1-2052247934dc)) (gr_poly (pts (xy 72.395129 110.359097) (xy 72.39926 110.359594) (xy 72.401119 110.359989) (xy 72.402832 110.360484) (xy 72.409156 110.360645) (xy 72.415571 110.361121) (xy 72.422064 110.361904) (xy 72.428622 110.362985) (xy 72.435233 110.364356) (xy 72.441886 110.366009) (xy 72.448567 110.367935) (xy 72.455265 110.370125) (xy 72.468661 110.375263) (xy 72.481976 110.381357) (xy 72.495112 110.388338) (xy 72.507971 110.396137) (xy 72.520454 110.404686) (xy 72.532465 110.413917) (xy 72.543904 110.423763) (xy 72.554674 110.434154) (xy 72.564676 110.445023) (xy 72.573813 110.4563) (xy 72.578026 110.462072) (xy 72.581986 110.467919) (xy 72.585681 110.473835) (xy 72.589098 110.479811) (xy 72.594527 110.492288) (xy 72.599785 110.505414) (xy 72.604702 110.518744) (xy 72.609108 110.531835) (xy 72.612831 110.544244) (xy 72.614383 110.550054) (xy 72.615701 110.555527) (xy 72.616764 110.560608) (xy 72.617549 110.565242) (xy 72.618036 110.569372) (xy 72.618203 110.572944) (xy 72.618068 110.576516) (xy 72.617668 110.580647) (xy 72.617013 110.58528) (xy 72.616111 110.590361) (xy 72.61497 110.595835) (xy 72.613598 110.601645) (xy 72.610199 110.614054) (xy 72.608188 110.620542) (xy 72.605981 110.627145) (xy 72.603587 110.633808) (xy 72.601013 110.640475) (xy 72.598269 110.647091) (xy 72.595363 110.6536) (xy 72.592303 110.659947) (xy 72.589098 110.666077) (xy 72.581986 110.677969) (xy 72.573813 110.689588) (xy 72.564676 110.700866) (xy 72.554674 110.711735) (xy 72.543904 110.722126) (xy 72.532465 110.731971) (xy 72.520454 110.741203) (xy 72.50797 110.749752) (xy 72.495112 110.757551) (xy 72.481976 110.764532) (xy 72.468661 110.770625) (xy 72.455265 110.775764) (xy 72.441886 110.779879) (xy 72.428622 110.782904) (xy 72.415571 110.784768) (xy 72.409156 110.785244) (xy 72.402832 110.785405) (xy 72.39926 110.785237) (xy 72.395129 110.784745) (xy 72.390496 110.783947) (xy 72.385415 110.782858) (xy 72.379941 110.781497) (xy 72.374131 110.779879) (xy 72.361722 110.775946) (xy 72.348631 110.771194) (xy 72.335301 110.765759) (xy 72.328685 110.762829) (xy 72.322176 110.759779) (xy 72.315828 110.756627) (xy 72.309698 110.75339) (xy 72.297807 110.74679) (xy 72.286188 110.739065) (xy 72.27491 110.730317) (xy 72.264041 110.720648) (xy 72.25365 110.71016) (xy 72.243805 110.698956) (xy 72.234573 110.687138) (xy 72.226024 110.674809) (xy 72.218225 110.66207) (xy 72.211245 110.649024) (xy 72.205151 110.635774) (xy 72.200012 110.622421) (xy 72.195897 110.609068) (xy 72.192873 110.595818) (xy 72.191008 110.582773) (xy 72.190532 110.576358) (xy 72.190371 110.570034) (xy 72.190532 110.563709) (xy 72.191008 110.557294) (xy 72.191791 110.550802) (xy 72.192873 110.544244) (xy 72.194244 110.537632) (xy 72.195897 110.53098) (xy 72.197822 110.524299) (xy 72.200012 110.517601) (xy 72.205151 110.504205) (xy 72.211245 110.49089) (xy 72.218225 110.477754) (xy 72.226024 110.464895) (xy 72.234573 110.452412) (xy 72.243805 110.440401) (xy 72.25365 110.428962) (xy 72.264041 110.418192) (xy 72.27491 110.40819) (xy 72.286188 110.399053) (xy 72.291959 110.394839) (xy 72.297807 110.390879) (xy 72.303723 110.387184) (xy 72.309698 110.383767) (xy 72.315828 110.380564) (xy 72.322176 110.377514) (xy 72.328685 110.374635) (xy 72.335301 110.371944) (xy 72.341968 110.369457) (xy 72.348631 110.367192) (xy 72.355234 110.365165) (xy 72.361722 110.363394) (xy 72.36804 110.361897) (xy 72.374131 110.360689) (xy 72.379941 110.359788) (xy 72.385415 110.359211) (xy 72.390496 110.358975) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp f08b7850-dde5-4b6f-b90c-a2b259f3263a)) (gr_poly (pts (xy 74.981461 111.643978) (xy 74.987786 111.644138) (xy 74.9942 111.644614) (xy 75.000693 111.645397) (xy 75.007251 111.646479) (xy 75.013862 111.64785) (xy 75.020515 111.649503) (xy 75.027196 111.651429) (xy 75.033894 111.653619) (xy 75.04729 111.658757) (xy 75.060605 111.664851) (xy 75.073741 111.671831) (xy 75.0866 111.67963) (xy 75.099083 111.68818) (xy 75.111094 111.697411) (xy 75.122533 111.707257) (xy 75.133303 111.717648) (xy 75.143305 111.728516) (xy 75.152442 111.739794) (xy 75.156655 111.745565) (xy 75.160616 111.751413) (xy 75.16431 111.757329) (xy 75.167728 111.763305) (xy 75.173156 111.775782) (xy 75.178414 111.788907) (xy 75.183331 111.802237) (xy 75.187737 111.815329) (xy 75.19146 111.827738) (xy 75.193012 111.833548) (xy 75.194331 111.839021) (xy 75.195393 111.844102) (xy 75.196178 111.848736) (xy 75.196665 111.852866) (xy 75.196832 111.856438) (xy 75.196697 111.86001) (xy 75.196297 111.86414) (xy 75.195642 111.868774) (xy 75.19474 111.873855) (xy 75.193599 111.879328) (xy 75.192227 111.885139) (xy 75.188828 111.897548) (xy 75.186817 111.904036) (xy 75.18461 111.910639) (xy 75.182216 111.917302) (xy 75.179642 111.923969) (xy 75.176898 111.930585) (xy 75.173992 111.937094) (xy 75.170932 111.943442) (xy 75.167728 111.949572) (xy 75.160616 111.961463) (xy 75.152442 111.973082) (xy 75.143305 111.98436) (xy 75.133303 111.995229) (xy 75.122533 112.00562) (xy 75.111094 112.015465) (xy 75.099083 112.024697) (xy 75.0866 112.033246) (xy 75.073741 112.041045) (xy 75.060605 112.048026) (xy 75.04729 112.054119) (xy 75.033894 112.059258) (xy 75.020515 112.063374) (xy 75.007251 112.066398) (xy 74.9942 112.068262) (xy 74.987786 112.068738) (xy 74.981461 112.068899) (xy 74.975392 112.068738) (xy 74.969202 112.068262) (xy 74.962904 112.067479) (xy 74.956512 112.066398) (xy 74.950042 112.065026) (xy 74.943507 112.063374) (xy 74.936922 112.061448) (xy 74.930301 112.059258) (xy 74.91701 112.054119) (xy 74.903749 112.048026) (xy 74.890633 112.041045) (xy 74.877777 112.033246) (xy 74.865297 112.024697) (xy 74.853306 112.015465) (xy 74.841921 112.00562) (xy 74.831256 111.995229) (xy 74.82623 111.98985) (xy 74.821427 111.98436) (xy 74.816862 111.978768) (xy 74.812549 111.973082) (xy 74.808502 111.967311) (xy 74.804736 111.961463) (xy 74.801265 111.955547) (xy 74.798104 111.949572) (xy 74.794867 111.943442) (xy 74.791715 111.937094) (xy 74.788665 111.930585) (xy 74.785735 111.923969) (xy 74.782941 111.917302) (xy 74.780301 111.910639) (xy 74.777831 111.904036) (xy 74.775549 111.897548) (xy 74.773471 111.89123) (xy 74.771615 111.885139) (xy 74.769998 111.879329) (xy 74.768636 111.873855) (xy 74.767548 111.868774) (xy 74.766749 111.864141) (xy 74.766257 111.86001) (xy 74.76609 111.856438) (xy 74.76625 111.850113) (xy 74.766726 111.843699) (xy 74.767509 111.837206) (xy 74.768591 111.830648) (xy 74.769962 111.824037) (xy 74.771615 111.817384) (xy 74.773541 111.810703) (xy 74.775731 111.804005) (xy 74.780869 111.790609) (xy 74.786963 111.777294) (xy 74.793943 111.764158) (xy 74.801743 111.7513) (xy 74.810292 111.738816) (xy 74.819523 111.726806) (xy 74.829369 111.715366) (xy 74.83976 111.704597) (xy 74.850628 111.694594) (xy 74.861906 111.685457) (xy 74.867677 111.681244) (xy 74.873525 111.677284) (xy 74.879441 111.673589) (xy 74.885417 111.670172) (xy 74.8979 111.664749) (xy 74.911065 111.659531) (xy 74.924503 111.654722) (xy 74.931197 111.652534) (xy 74.937805 111.650526) (xy 74.944276 111.648723) (xy 74.950561 111.64715) (xy 74.956606 111.645833) (xy 74.962361 111.644796) (xy 74.967776 111.644067) (xy 74.972798 111.643671) (xy 74.977377 111.643632) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp f67d9a93-d170-4f1b-9559-d4a8eb51cf50)) (gr_poly (pts (xy 73.698471 110.998026) (xy 73.704886 110.998502) (xy 73.711379 110.999285) (xy 73.717937 111.000366) (xy 73.724548 111.001737) (xy 73.731201 111.00339) (xy 73.737882 111.005316) (xy 73.74458 111.007506) (xy 73.757976 111.012644) (xy 73.771291 111.018738) (xy 73.784426 111.025719) (xy 73.797285 111.033518) (xy 73.809769 111.042067) (xy 73.821779 111.051298) (xy 73.833219 111.061144) (xy 73.843988 111.071535) (xy 73.853991 111.082404) (xy 73.863128 111.093681) (xy 73.867341 111.099453) (xy 73.871301 111.1053) (xy 73.874996 111.111216) (xy 73.878413 111.117192) (xy 73.883842 111.129669) (xy 73.8891 111.142795) (xy 73.894017 111.156124) (xy 73.898422 111.169216) (xy 73.902146 111.181625) (xy 73.903698 111.187435) (xy 73.905016 111.192908) (xy 73.906079 111.197989) (xy 73.906864 111.202623) (xy 73.90735 111.206753) (xy 73.907517 111.210325) (xy 73.907357 111.216394) (xy 73.906881 111.222584) (xy 73.906098 111.228883) (xy 73.905016 111.235274) (xy 73.903645 111.241745) (xy 73.901992 111.248279) (xy 73.900067 111.254864) (xy 73.897877 111.261485) (xy 73.892738 111.274776) (xy 73.886644 111.288037) (xy 73.879664 111.301153) (xy 73.871865 111.314009) (xy 73.863315 111.32649) (xy 73.854084 111.33848) (xy 73.844238 111.349865) (xy 73.833847 111.36053) (xy 73.828468 111.365556) (xy 73.822979 111.370359) (xy 73.817387 111.374924) (xy 73.811701 111.379238) (xy 73.80593 111.383284) (xy 73.800082 111.38705) (xy 73.794166 111.390521) (xy 73.78819 111.393682) (xy 73.78206 111.396919) (xy 73.775713 111.400071) (xy 73.769204 111.403121) (xy 73.762588 111.406051) (xy 73.755921 111.408845) (xy 73.749258 111.411485) (xy 73.742655 111.413955) (xy 73.736167 111.416238) (xy 73.729849 111.418315) (xy 73.723758 111.420171) (xy 73.717947 111.421788) (xy 73.712474 111.42315) (xy 73.707393 111.424238) (xy 73.702759 111.425037) (xy 73.698629 111.425529) (xy 73.695057 111.425697) (xy 73.688988 111.425536) (xy 73.682798 111.42506) (xy 73.676499 111.424277) (xy 73.670108 111.423195) (xy 73.663638 111.421824) (xy 73.657103 111.420171) (xy 73.650518 111.418246) (xy 73.643897 111.416056) (xy 73.630606 111.410917) (xy 73.617345 111.404823) (xy 73.604229 111.397843) (xy 73.591373 111.390044) (xy 73.578892 111.381494) (xy 73.566902 111.372263) (xy 73.555517 111.362417) (xy 73.544852 111.352026) (xy 73.539826 111.346647) (xy 73.535023 111.341158) (xy 73.530458 111.335566) (xy 73.526145 111.32988) (xy 73.522098 111.324109) (xy 73.518332 111.318261) (xy 73.514862 111.312345) (xy 73.511701 111.306369) (xy 73.508463 111.300239) (xy 73.505311 111.293892) (xy 73.502262 111.287383) (xy 73.499331 111.280767) (xy 73.496537 111.2741) (xy 73.493897 111.267437) (xy 73.491427 111.260834) (xy 73.489145 111.254346) (xy 73.487067 111.248028) (xy 73.485211 111.241937) (xy 73.483594 111.236127) (xy 73.482233 111.230653) (xy 73.481144 111.225572) (xy 73.480345 111.220939) (xy 73.479854 111.216808) (xy 73.479686 111.213236) (xy 73.479847 111.206911) (xy 73.480323 111.200497) (xy 73.481106 111.194004) (xy 73.482187 111.187446) (xy 73.483558 111.180835) (xy 73.485211 111.174182) (xy 73.487137 111.167501) (xy 73.489327 111.160803) (xy 73.494465 111.147407) (xy 73.500559 111.134092) (xy 73.50754 111.120956) (xy 73.515339 111.108097) (xy 73.523888 111.095614) (xy 73.533119 111.083603) (xy 73.542965 111.072164) (xy 73.553356 111.061394) (xy 73.564225 111.051392) (xy 73.575502 111.042255) (xy 73.581274 111.038042) (xy 73.587121 111.034081) (xy 73.593037 111.030387) (xy 73.599013 111.02697) (xy 73.611371 111.021541) (xy 73.624206 111.016283) (xy 73.637178 111.011366) (xy 73.649945 111.00696) (xy 73.656146 111.005003) (xy 73.662167 111.003237) (xy 73.667966 111.001684) (xy 73.673502 111.000366) (xy 73.67873 110.999304) (xy 73.683609 110.998519) (xy 73.688095 110.998032) (xy 73.692147 110.997865) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp fb9d3d90-3689-43f5-ac73-8e6978234606)) (gr_rect (start 33.773403 41.085124) (end 100.689573 115.566375) (stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts") (tstamp 43a14a74-0ebc-491c-9ec5-840db3cca5d2)) (gr_text "DeskHop - Keyboard/Mouse Switch\n\nby Hrvoje Cavrak, 12/2023\n\nhttps://github.com/hrvach" (at 64.9732 96.266) (layer "B.SilkS") (tstamp e86cc18b-e914-42f8-adc9-6ea2bbb55ee5) (effects (font (size 1.1 1.1) (thickness 0.15)) (justify left bottom mirror)) ) (gr_text "*" (at 60.4774 76.708) (layer "F.SilkS") (tstamp 0c6253e3-41c8-4ad8-a815-57aa39b7d021) (effects (font (size 1 1) (thickness 0.15)) (justify left bottom)) ) (gr_text "PC 1" (at 83.9216 46.7868) (layer "F.SilkS") (tstamp 179b2c6b-34d3-4f8d-9920-6b082e4f9180) (effects (font (size 0.8 0.8) (thickness 0.15)) (justify left bottom)) ) (gr_text "B" (at 63.5 53.34) (layer "F.SilkS") (tstamp 32ef2d41-2428-44d6-9af8-864a946249b2) (effects (font (size 2 2) (thickness 0.15)) (justify left bottom)) ) (gr_text "GND" (at 97.8408 101.346 45) (layer "F.SilkS") (tstamp 45fbd897-93d2-49e2-adc9-c24dc74802c8) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "CLK" (at 97.6376 103.5812 45) (layer "F.SilkS") (tstamp 5b53353b-f9fc-4f93-8b11-5fce95aa151b) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "DATA" (at 63.0428 99.9744 45) (layer "F.SilkS") (tstamp 6a8636ed-7847-4f79-be68-902fb28046b3) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "*" (at 72.9488 76.708) (layer "F.SilkS") (tstamp 7bf68895-0aeb-4dda-aa66-265c186f64a3) (effects (font (size 1 1) (thickness 0.15)) (justify left bottom)) ) (gr_text "A" (at 68.834 53.34) (layer "F.SilkS") (tstamp cb5b8470-d35e-410c-b050-6e152f7e6a4c) (effects (font (size 2 2) (thickness 0.15)) (justify left bottom)) ) (gr_text "CLK" (at 62.8396 104.3432 45) (layer "F.SilkS") (tstamp cf3b2d7d-0191-4dd5-b820-e6aa612b764f) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "GND" (at 63.0428 102.108 45) (layer "F.SilkS") (tstamp da75c436-48c4-4bb1-a6fd-90baa2c5c2a2) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "PC 2" (at 47.3964 46.7868) (layer "F.SilkS") (tstamp fbdd5ab1-b7d1-4016-9e79-55335bd769e4) (effects (font (size 0.8 0.8) (thickness 0.15)) (justify left bottom)) ) (segment (start 58.013772 74.93) (end 57.775523 75.168249) (width 0.5) (layer "F.Cu") (net 1) (tstamp 8007a76d-8d41-4fb2-90e3-e66c0005a3c5)) (segment (start 61.9375 74.93) (end 58.013772 74.93) (width 0.5) (layer "F.Cu") (net 1) (tstamp 8ba778a0-98c8-4842-b67e-521e1589d6dd)) (segment (start 58.42 99.314) (end 54.61 99.314) (width 0.5) (layer "F.Cu") (net 2) (tstamp 281dfb42-ed18-4e3c-a239-6523ec17ad9c)) (segment (start 60.452 99.822) (end 58.928 99.822) (width 0.5) (layer "F.Cu") (net 2) (tstamp 29e389da-012c-4edb-85cc-33a0c641139a)) (segment (start 58.928 99.822) (end 58.42 99.314) (width 0.5) (layer "F.Cu") (net 2) (tstamp 38a80906-0bb0-4157-9ea9-f09123feb783)) (segment (start 51.425523 96.129523) (end 51.425523 92.718249) (width 0.5) (layer "F.Cu") (net 2) (tstamp 581ea471-e9a2-4c1e-81ce-e575d801c6aa)) (segment (start 54.61 99.314) (end 51.425523 96.129523) (width 0.5) (layer "F.Cu") (net 2) (tstamp 6750045c-5cb4-4e61-a49e-7d5ac1eced2e)) (segment (start 46.345523 94.578249) (end 48.541274 96.774) (width 0.5) (layer "F.Cu") (net 3) (tstamp 31887e19-8c5c-4e43-81e8-95c95f9c2607)) (segment (start 58.674 101.092) (end 58.674 103.124) (width 0.5) (layer "F.Cu") (net 3) (tstamp 684d89ef-8514-4309-9042-75a24d5b6224)) (segment (start 57.906 100.324) (end 58.674 101.092) (width 0.5) (layer "F.Cu") (net 3) (tstamp 70ca0067-c97f-43be-8dbc-b3f6c39de6b9)) (segment (start 58.674 103.124) (end 60.452 104.902) (width 0.5) (layer "F.Cu") (net 3) (tstamp 7396d88c-a32b-4f66-bcd9-41ce5873de8f)) (segment (start 54.096 100.324) (end 57.906 100.324) (width 0.5) (layer "F.Cu") (net 3) (tstamp 784536fe-daed-4ff4-b37c-0eba68af3500)) (segment (start 48.541274 96.774) (end 50.546 96.774) (width 0.5) (layer "F.Cu") (net 3) (tstamp aadf7147-578f-4173-a614-a90f79d6e6ff)) (segment (start 46.345523 92.718249) (end 46.345523 94.578249) (width 0.5) (layer "F.Cu") (net 3) (tstamp c8e951b7-7f5b-4baf-a5b1-e36d3a9a5481)) (segment (start 50.546 96.774) (end 54.096 100.324) (width 0.5) (layer "F.Cu") (net 3) (tstamp e0d3e8e5-3c4b-43d8-8dda-7c37612908af)) (segment (start 91.963 99.837) (end 91.186 99.06) (width 0.5) (layer "F.Cu") (net 4) (tstamp 02feb236-184f-4606-aac3-bdc8e08efb3d)) (segment (start 87.869 93.511) (end 87.884 93.496) (width 0.5) (layer "F.Cu") (net 4) (tstamp 3a4dc258-2775-4403-aaed-f58a46f04240)) (segment (start 91.186 99.06) (end 89.662 99.06) (width 0.5) (layer "F.Cu") (net 4) (tstamp 64bd1bc7-f3e1-49b5-955f-9feb46b3ff84)) (segment (start 87.884 97.282) (end 89.662 99.06) (width 0.5) (layer "F.Cu") (net 4) (tstamp 87dc3920-1076-480e-9b70-bf01b23bacc5)) (segment (start 87.884 93.496) (end 87.884 97.282) (width 0.5) (layer "F.Cu") (net 4) (tstamp a711d539-35bd-4cb8-960e-eece942f54d8)) (segment (start 95.25 99.837) (end 91.963 99.837) (width 0.5) (layer "F.Cu") (net 4) (tstamp b2ace439-fc59-4d37-8fd0-2a5c450c8b9e)) (segment (start 82.789 93.511) (end 82.804 93.496) (width 0.5) (layer "F.Cu") (net 5) (tstamp 0c688ab8-4bee-4d4d-b8d8-42f679335449)) (segment (start 83.841 96.393) (end 85.471 96.393) (width 0.5) (layer "F.Cu") (net 5) (tstamp 0e67e8d6-00cd-40a2-b6ea-ddf7aae4d87f)) (segment (start 85.471 96.393) (end 89.916 100.838) (width 0.5) (layer "F.Cu") (net 5) (tstamp 191fded0-5139-42af-b49c-962b9326b74e)) (segment (start 93.472 100.838) (end 94.118941 101.484941) (width 0.5) (layer "F.Cu") (net 5) (tstamp 33bb0091-105c-41ab-a710-1fe04ee5e289)) (segment (start 94.118941 101.484941) (end 94.118941 103.770941) (width 0.5) (layer "F.Cu") (net 5) (tstamp 3b8149d9-5358-47c0-aec6-6a4729e44624)) (segment (start 94.118941 103.770941) (end 95.25 104.902) (width 0.5) (layer "F.Cu") (net 5) (tstamp 40a9a1c2-3bea-4fec-8fc2-a2fc86bbe287)) (segment (start 82.804 93.496) (end 82.804 95.356) (width 0.5) (layer "F.Cu") (net 5) (tstamp 5e2b4aad-726e-4517-ac97-e65b4ae9164d)) (segment (start 82.804 95.356) (end 83.841 96.393) (width 0.5) (layer "F.Cu") (net 5) (tstamp 7130caff-c9ba-43e8-bb2c-a964b218a1d7)) (segment (start 89.916 100.838) (end 93.472 100.838) (width 0.5) (layer "F.Cu") (net 5) (tstamp 745d0c74-69f1-48df-909d-cb191483ff59)) (segment (start 70.58342 55.882998) (end 71.76 54.706418) (width 0.5) (layer "F.Cu") (net 6) (tstamp 0cd0f828-ad96-4b44-b182-f8bccc6696ea)) (segment (start 96.850223 43.002223) (end 98.806 44.958) (width 0.5) (layer "F.Cu") (net 6) (tstamp 11c48833-e6cb-42b5-af9d-16b5a1f5eb94)) (segment (start 70.58342 71.65658) (end 70.58342 55.882998) (width 0.5) (layer "F.Cu") (net 6) (tstamp 1696ca99-6a46-47df-88aa-234e8d1722d7)) (segment (start 69.041691 74.877665) (end 69.041691 73.198309) (width 0.5) (layer "F.Cu") (net 6) (tstamp 2b611abb-c666-421d-a3b7-f3e6342d3cd0)) (segment (start 69.041691 81.741691) (end 69.85 82.55) (width 0.5) (layer "F.Cu") (net 6) (tstamp 41140228-6878-441c-8918-38b28f0f3668)) (segment (start 98.806 54.102) (end 98.044 54.864) (width 0.5) (layer "F.Cu") (net 6) (tstamp 649e6d5c-2801-4ad1-b72f-0f03670edfa4)) (segment (start 69.041691 73.198309) (end 70.58342 71.65658) (width 0.5) (layer "F.Cu") (net 6) (tstamp 69bd31ed-5b94-4e49-9f51-c06000d90a9e)) (segment (start 71.76 54.706418) (end 71.76 44.404) (width 0.5) (layer "F.Cu") (net 6) (tstamp 6acbc526-347f-4931-9f01-8ed1b302be3a)) (segment (start 69.041691 74.877665) (end 69.041691 81.741691) (width 0.5) (layer "F.Cu") (net 6) (tstamp 7abbb9e0-94e0-428e-b393-f208c8dcbc57)) (segment (start 71.76 44.404) (end 73.161777 43.002223) (width 0.5) (layer "F.Cu") (net 6) (tstamp c4835599-2cce-47d0-954b-a6c228b24c54)) (segment (start 98.806 44.958) (end 98.806 54.102) (width 0.5) (layer "F.Cu") (net 6) (tstamp c4ed4d1a-99e6-4aef-87fe-ba7be24729c9)) (segment (start 98.044 54.864) (end 94.234 54.864) (width 0.5) (layer "F.Cu") (net 6) (tstamp e19eaf6a-270a-4352-8dfb-cfe096d9e50d)) (segment (start 73.161777 43.002223) (end 96.850223 43.002223) (width 0.5) (layer "F.Cu") (net 6) (tstamp f66ef6a2-b093-4fab-a16b-a7916eff442a)) (segment (start 84.084 100.076) (end 83.385744 100.076) (width 0.5) (layer "F.Cu") (net 24) (tstamp 3a777d5c-141d-4352-99c4-7818da10e633)) (segment (start 77.795094 91.511094) (end 76.708 90.424) (width 0.5) (layer "F.Cu") (net 24) (tstamp 3b174716-5609-4c8a-a17c-6f8545f7f1da)) (segment (start 85.582 101.574) (end 84.084 100.076) (width 0.5) (layer "F.Cu") (net 24) (tstamp 616c6cc3-3271-4ade-924b-abc0ae2f5bb7)) (segment (start 76.708 90.424) (end 76.454 90.424) (width 0.5) (layer "F.Cu") (net 24) (tstamp 877dfea5-c1b0-4bab-95a1-d4fc43736b1e)) (segment (start 77.795094 94.48535) (end 77.795094 91.511094) (width 0.5) (layer "F.Cu") (net 24) (tstamp a4df3944-ac6e-45d5-b8d6-8bb4fe761e03)) (segment (start 85.5185 101.203) (end 85.582 101.203) (width 0.5) (layer "F.Cu") (net 24) (tstamp b32384b4-2c0a-4144-b631-542703898acd)) (segment (start 83.385744 100.076) (end 77.795094 94.48535) (width 0.5) (layer "F.Cu") (net 24) (tstamp d42485f7-efde-4f48-9992-723ca32c4dbd)) (segment (start 76.454 92.964) (end 76.454 94.234) (width 0.5) (layer "F.Cu") (net 25) (tstamp 27b53057-7f78-4822-8055-d298cc3b2d0d)) (segment (start 83.286 101.066) (end 83.582 101.066) (width 0.5) (layer "F.Cu") (net 25) (tstamp 976e60f6-8295-43a5-beba-2df6873ac33b)) (segment (start 76.454 94.234) (end 83.286 101.066) (width 0.5) (layer "F.Cu") (net 25) (tstamp e0df9539-7106-4d40-9d5d-3b43eb967558)) (segment (start 92.456 44.704) (end 91.44 45.72) (width 0.5) (layer "F.Cu") (net 34) (tstamp 235c7e72-eb63-417b-9fad-7bfe4b21c1b8)) (segment (start 97.282 107.442) (end 82.296 107.442) (width 0.5) (layer "F.Cu") (net 34) (tstamp 29c62286-5bc1-4af9-82ef-32cf5111376e)) (segment (start 94.234 44.704) (end 92.456 44.704) (width 0.5) (layer "F.Cu") (net 34) (tstamp 2e1826df-3d65-4e87-ad49-c78830b9b608)) (segment (start 91.44 45.72) (end 91.44 95.758) (width 0.5) (layer "F.Cu") (net 34) (tstamp 412ecf29-78b5-43dd-bfde-f73bd728d119)) (segment (start 81.026 106.172) (end 81.082 106.116) (width 0.5) (layer "F.Cu") (net 34) (tstamp 5e69cc21-b513-43e0-af61-3bc415f550ec)) (segment (start 97.028 97.028) (end 98.298 98.298) (width 0.5) (layer "F.Cu") (net 34) (tstamp 6a17621c-f120-4a7d-9f63-92ae5b8672a9)) (segment (start 98.298 98.298) (end 98.298 106.426) (width 0.5) (layer "F.Cu") (net 34) (tstamp 78930bde-40ff-44d4-b0a3-39d7ac105033)) (segment (start 98.298 106.426) (end 97.282 107.442) (width 0.5) (layer "F.Cu") (net 34) (tstamp 8d722518-0ab5-4d5e-a626-7161b5c28a46)) (segment (start 91.44 95.758) (end 92.71 97.028) (width 0.5) (layer "F.Cu") (net 34) (tstamp a09164b9-5ce8-448c-ad39-3ac251b15d53)) (segment (start 92.71 97.028) (end 97.028 97.028) (width 0.5) (layer "F.Cu") (net 34) (tstamp b960dcb3-bd60-4c62-b0c4-8c0cd95b2934)) (segment (start 81.082 106.116) (end 81.082 101.828) (width 0.5) (layer "F.Cu") (net 34) (tstamp d1084801-a74c-41a4-9796-ae8d89b1a230)) (segment (start 82.296 107.442) (end 81.026 106.172) (width 0.5) (layer "F.Cu") (net 34) (tstamp e97acec3-fde5-49b6-afb1-dae71232fe06)) (segment (start 69.85 85.09) (end 76.2 85.09) (width 0.5) (layer "F.Cu") (net 49) (tstamp 2f903b88-a574-4e80-b3cd-9504ea86dba9)) (segment (start 76.2 85.09) (end 76.454 85.344) (width 0.5) (layer "F.Cu") (net 49) (tstamp 438df6c1-6297-42c8-8fd5-3e468a937cc1)) (segment (start 65.572536 74.929999) (end 65.572536 81.877464) (width 0.5) (layer "F.Cu") (net 63) (tstamp 51751eae-ec10-412f-9772-327669e42c80)) (segment (start 65.572536 73.192536) (end 65.572536 74.929999) (width 0.5) (layer "F.Cu") (net 63) (tstamp 57679d8e-bd9f-4b57-829f-cf04d699a9f3)) (segment (start 64.026291 71.646291) (end 65.572536 73.192536) (width 0.5) (layer "F.Cu") (net 63) (tstamp 7f7fbd8b-8218-4e76-9fb1-cc9c8ec68862)) (segment (start 65.572536 81.877464) (end 64.9 82.55) (width 0.5) (layer "F.Cu") (net 63) (tstamp 96f609ba-5d5f-4d57-876c-3a1bd5ea9ddc)) (segment (start 64.026291 55.662582) (end 64.026291 71.646291) (width 0.5) (layer "F.Cu") (net 63) (tstamp aced7e15-933a-4030-93ca-fb3cf638d282)) (segment (start 63.211958 54.848249) (end 64.026291 55.662582) (width 0.5) (layer "F.Cu") (net 63) (tstamp b3172337-a0d2-49a1-a853-c2f4fd6f664c)) (segment (start 57.775523 54.848249) (end 63.211958 54.848249) (width 0.5) (layer "F.Cu") (net 63) (tstamp dd206b88-aab8-449a-9ff2-d97283c5421a)) (segment (start 72.166691 74.877665) (end 76.147665 74.877665) (width 0.5) (layer "F.Cu") (net 65) (tstamp 8f3fd6fc-7587-4595-8ce2-cf5367d8b036)) (segment (start 76.147665 74.877665) (end 76.454 75.184) (width 0.5) (layer "F.Cu") (net 65) (tstamp ecc932c2-2fb0-49b4-8d43-50a66dccfa0f)) (segment (start 69.85 83.82) (end 71.949721 83.82) (width 0.5) (layer "F.Cu") (net 66) (tstamp 6f9b24c1-6cd3-489f-b832-1fe9d16d047c)) (segment (start 71.949721 83.82) (end 72.965721 82.804) (width 0.5) (layer "F.Cu") (net 66) (tstamp c3f493c8-7838-48f2-94df-1b5748e68b89)) (segment (start 72.965721 82.804) (end 76.454 82.804) (width 0.5) (layer "F.Cu") (net 66) (tstamp ce266132-c39d-45b4-8a98-d5af2663bc77)) (segment (start 58.013772 90.17) (end 60.96 90.17) (width 0.5) (layer "F.Cu") (net 68) (tstamp 02754ec3-81b0-4899-97ed-5363d7bec1eb)) (segment (start 60.96 90.17) (end 61.681215 89.448785) (width 0.5) (layer "F.Cu") (net 68) (tstamp 588d9205-ccd7-4f13-b0f2-47d09aa7264f)) (segment (start 62.23 83.82) (end 64.9 83.82) (width 0.5) (layer "F.Cu") (net 68) (tstamp 6607fd20-d916-4861-88c4-e9e7a0d5645c)) (segment (start 61.681215 84.368785) (end 62.23 83.82) (width 0.5) (layer "F.Cu") (net 68) (tstamp 68f625a7-de23-49c6-8bcf-3c54e607f7e8)) (segment (start 57.775523 90.408249) (end 58.013772 90.17) (width 0.5) (layer "F.Cu") (net 68) (tstamp cddc29fc-7191-4a52-b701-84aad4b1dd97)) (segment (start 61.681215 89.448785) (end 61.681215 84.368785) (width 0.5) (layer "F.Cu") (net 68) (tstamp cff61864-9174-4f9e-adb7-7d4b50636635)) (segment (start 56.149751 44.688249) (end 57.775523 44.688249) (width 0.5) (layer "F.Cu") (net 69) (tstamp 0a0e7eb1-acc5-4f4b-8459-e02ba334bdeb)) (segment (start 45.776 106.228) (end 46.99 107.442) (width 0.5) (layer "F.Cu") (net 69) (tstamp 3ebbbacc-4e5b-40d9-b565-8477578e0260)) (segment (start 46.99 107.442) (end 62.738 107.442) (width 0.5) (layer "F.Cu") (net 69) (tstamp 4b98a029-e22b-4765-a727-1efc2076a1aa)) (segment (start 63.754 106.426) (end 63.754 97.79) (width 0.5) (layer "F.Cu") (net 69) (tstamp 73aa5853-eecc-434f-a843-b5d7ef3f4fce)) (segment (start 54.864 94.742) (end 54.864 45.974) (width 0.5) (layer "F.Cu") (net 69) (tstamp 85257b07-806e-4c56-9399-956f34f2006e)) (segment (start 62.738 107.442) (end 63.754 106.426) (width 0.5) (layer "F.Cu") (net 69) (tstamp 951111ca-a09f-4276-a433-c37923c98f88)) (segment (start 56.388 96.266) (end 54.864 94.742) (width 0.5) (layer "F.Cu") (net 69) (tstamp b3b9bdf8-5399-4071-a9eb-3a34a13fd891)) (segment (start 54.864 45.974) (end 56.149751 44.688249) (width 0.5) (layer "F.Cu") (net 69) (tstamp bfebf151-335a-4aa0-8ebc-1b53a01e22ce)) (segment (start 63.754 97.79) (end 62.23 96.266) (width 0.5) (layer "F.Cu") (net 69) (tstamp d808850f-6d15-4a71-8ea6-51b0844abc21)) (segment (start 45.776 101.574) (end 45.776 106.228) (width 0.5) (layer "F.Cu") (net 69) (tstamp f2536e08-c54d-4f9a-89ca-b9b08632b67d)) (segment (start 62.23 96.266) (end 56.388 96.266) (width 0.5) (layer "F.Cu") (net 69) (tstamp fe22ed46-61f2-40c9-a63e-faf177b11364)) (segment (start 48.276 101.574) (end 48.276 101.362) (width 0.5) (layer "F.Cu") (net 70) (tstamp 0d975138-ed7f-4a53-97c6-f3dd99692363)) (segment (start 39.995523 93.843523) (end 39.995523 92.948249) (width 0.5) (layer "F.Cu") (net 70) (tstamp 54b5315f-7eef-49d9-8ef7-547c776da1d7)) (segment (start 45.974 99.822) (end 39.995523 93.843523) (width 0.5) (layer "F.Cu") (net 70) (tstamp 8e0722cf-242c-47f8-9382-f31de0995bcf)) (segment (start 48.276 101.362) (end 46.736 99.822) (width 0.5) (layer "F.Cu") (net 70) (tstamp ab3bd669-73fd-4374-9669-fa82cb78d29a)) (segment (start 47.726 101.574) (end 48.276 101.574) (width 0.5) (layer "F.Cu") (net 70) (tstamp f611e8ef-48c9-40ce-83b4-6f9b56e5e865)) (segment (start 46.736 99.822) (end 45.974 99.822) (width 0.5) (layer "F.Cu") (net 70) (tstamp f62e0b25-e38b-48e9-96b1-86f4bd0b664f)) (segment (start 46.25417 99.080626) (end 47.067614 99.080626) (width 0.5) (layer "F.Cu") (net 71) (tstamp 0cc940ee-d9c7-42c8-a815-9c9087ec2662)) (segment (start 41.402 90.678) (end 41.402 94.228456) (width 0.5) (layer "F.Cu") (net 71) (tstamp 27811938-89b0-454c-b06d-abe0e696d928)) (segment (start 40.894 90.424) (end 41.148 90.424) (width 0.5) (layer "F.Cu") (net 71) (tstamp 2fa83199-a36d-4069-ba9c-7ca263f97c9b)) (segment (start 47.067614 99.080626) (end 48.062988 100.076) (width 0.5) (layer "F.Cu") (net 71) (tstamp 50fe5c68-bbf1-4517-84b9-d50516100af9)) (segment (start 48.062988 100.076) (end 49.022 100.076) (width 0.5) (layer "F.Cu") (net 71) (tstamp 808ce5b4-9947-4d4d-846f-c69399615aac)) (segment (start 41.402 94.228456) (end 46.25417 99.080626) (width 0.5) (layer "F.Cu") (net 71) (tstamp 89bd75f9-f44e-44ea-8afc-96f06e88d94c)) (segment (start 41.148 90.424) (end 41.402 90.678) (width 0.5) (layer "F.Cu") (net 71) (tstamp a01533c7-8bd4-43de-9cc9-dda55bde681c)) (segment (start 50.022 101.076) (end 50.022 101.203) (width 0.5) (layer "F.Cu") (net 71) (tstamp a5d70dad-11bc-40ae-b0b6-cb03907abae0)) (segment (start 49.022 100.076) (end 50.022 101.076) (width 0.5) (layer "F.Cu") (net 71) (tstamp d03d7de2-6603-4461-90e9-2a1689e13b0c)) (segment (start 57.775523 92.948249) (end 60.531206 92.948249) (width 0.5) (layer "F.Cu") (net 72) (tstamp 3cdaebbd-3f15-43d3-a168-df1211a66cbc)) (segment (start 60.531206 92.948249) (end 62.962639 90.516816) (width 0.5) (layer "F.Cu") (net 72) (tstamp 5244a26e-818d-4562-badf-0426799cd06f)) (segment (start 63.5 85.09) (end 64.9 85.09) (width 0.5) (layer "F.Cu") (net 72) (tstamp 58613c8b-82b4-4e1b-9cb0-cec809c61c45)) (segment (start 62.962639 90.516816) (end 62.962639 85.627361) (width 0.5) (layer "F.Cu") (net 72) (tstamp 86091557-fc6d-40c1-824e-c9d5695f8d05)) (segment (start 62.962639 85.627361) (end 63.5 85.09) (width 0.5) (layer "F.Cu") (net 72) (tstamp bb93267b-7597-48a7-bf47-fb24f7dce351)) (zone (net 65) (net_name "GND2") (layer "F.Cu") (tstamp 0f14265c-0a60-40da-96d6-c7806dfe209e) (hatch edge 0.5) (priority 1) (connect_pads (clearance 0.508)) (min_thickness 0.25) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5)) (polygon (pts (xy 68.072684 41.148) (xy 100.723078 41.000403) (xy 100.710038 115.566942) (xy 68.031208 115.57905) ) ) (filled_polygon (layer "F.Cu") (pts (xy 100.607112 41.130309) (xy 100.652867 41.183113) (xy 100.664073 41.234624) (xy 100.664073 115.416875) (xy 100.644388 115.483914) (xy 100.591584 115.529669) (xy 100.540073 115.540875) (xy 68.155298 115.540875) (xy 68.088259 115.52119) (xy 68.042504 115.468386) (xy 68.031298 115.416806) (xy 68.032335 113.556) (xy 68.033477 111.506) (xy 94.71921 111.506) (xy 94.738347 111.785794) (xy 94.738348 111.785796) (xy 94.795403 112.060364) (xy 94.795408 112.060381) (xy 94.889319 112.324622) (xy 94.88932 112.324624) (xy 95.018348 112.573637) (xy 95.018352 112.573643) (xy 95.156744 112.769699) (xy 95.156745 112.7697) (xy 95.659073 112.267372) (xy 95.73589 112.377078) (xy 95.902922 112.54411) (xy 96.012626 112.620925) (xy 95.51174 113.121811) (xy 95.589046 113.184704) (xy 95.828664 113.330419) (xy 95.828668 113.330421) (xy 96.085888 113.442146) (xy 96.355935 113.51781) (xy 96.355941 113.517811) (xy 96.633775 113.556) (xy 96.914225 113.556) (xy 97.192058 113.517811) (xy 97.192064 113.51781) (xy 97.462111 113.442146) (xy 97.719331 113.330421) (xy 97.719335 113.330419) (xy 97.95895 113.184706) (xy 97.958965 113.184696) (xy 98.036258 113.121811) (xy 97.535373 112.620925) (xy 97.645078 112.54411) (xy 97.81211 112.377078) (xy 97.888926 112.267372) (xy 98.391253 112.769699) (xy 98.529651 112.573636) (xy 98.658679 112.324624) (xy 98.65868 112.324622) (xy 98.752591 112.060381) (xy 98.752596 112.060364) (xy 98.809651 111.785796) (xy 98.809652 111.785794) (xy 98.828789 111.506) (xy 98.809652 111.226205) (xy 98.809651 111.226203) (xy 98.752596 110.951635) (xy 98.752591 110.951618) (xy 98.65868 110.687377) (xy 98.658679 110.687375) (xy 98.529651 110.438363) (xy 98.391253 110.242299) (xy 97.888925 110.744626) (xy 97.81211 110.634922) (xy 97.645078 110.46789) (xy 97.535372 110.391073) (xy 98.036258 109.890187) (xy 97.958953 109.827295) (xy 97.719335 109.68158) (xy 97.719331 109.681578) (xy 97.462111 109.569853) (xy 97.192064 109.494189) (xy 97.192058 109.494188) (xy 96.914225 109.456) (xy 96.633775 109.456) (xy 96.355941 109.494188) (xy 96.355935 109.494189) (xy 96.085888 109.569853) (xy 95.82867 109.681577) (xy 95.589038 109.827301) (xy 95.589034 109.827304) (xy 95.51174 109.890187) (xy 96.012627 110.391073) (xy 95.902922 110.46789) (xy 95.73589 110.634922) (xy 95.659073 110.744626) (xy 95.156745 110.242298) (xy 95.018352 110.438356) (xy 95.018348 110.438362) (xy 94.88932 110.687375) (xy 94.889319 110.687377) (xy 94.795408 110.951618) (xy 94.795403 110.951635) (xy 94.738348 111.226203) (xy 94.738347 111.226205) (xy 94.71921 111.506) (xy 68.033477 111.506) (xy 68.037502 104.284001) (xy 76.006891 104.284001) (xy 76.0273 104.569362) (xy 76.088109 104.848895) (xy 76.188091 105.116958) (xy 76.325191 105.368038) (xy 76.325196 105.368046) (xy 76.431882 105.510561) (xy 76.431883 105.510562) (xy 77.041438 104.901006) (xy 77.090348 104.979999) (xy 77.233931 105.137501) (xy 77.392388 105.257163) (xy 76.785436 105.864115) (xy 76.92796 105.970807) (xy 76.927961 105.970808) (xy 77.179042 106.107908) (xy 77.179041 106.107908) (xy 77.447104 106.20789) (xy 77.726637 106.268699) (xy 78.011999 106.289109) (xy 78.012001 106.289109) (xy 78.297362 106.268699) (xy 78.576895 106.20789) (xy 78.844958 106.107908) (xy 79.096047 105.970803) (xy 79.238561 105.864116) (xy 79.238562 105.864115) (xy 78.631611 105.257163) (xy 78.790069 105.137501) (xy 78.933652 104.979999) (xy 78.98256 104.901007) (xy 79.592115 105.510562) (xy 79.592116 105.510561) (xy 79.698803 105.368047) (xy 79.835908 105.116958) (xy 79.93589 104.848895) (xy 79.996699 104.569362) (xy 80.017109 104.284001) (xy 80.017109 104.283998) (xy 79.996699 103.998637) (xy 79.93589 103.719104) (xy 79.835908 103.451041) (xy 79.698808 103.199961) (xy 79.698807 103.19996) (xy 79.592115 103.057436) (xy 78.98256 103.666991) (xy 78.933652 103.588001) (xy 78.790069 103.430499) (xy 78.63161 103.310835) (xy 79.238562 102.703883) (xy 79.238561 102.703882) (xy 79.096046 102.597196) (xy 79.096038 102.597191) (xy 78.844957 102.460091) (xy 78.844958 102.460091) (xy 78.576895 102.360109) (xy 78.297362 102.2993) (xy 78.012001 102.278891) (xy 78.011999 102.278891) (xy 77.726637 102.2993) (xy 77.447104 102.360109) (xy 77.179041 102.460091) (xy 76.927961 102.597191) (xy 76.927953 102.597196) (xy 76.785437 102.703882) (xy 76.785436 102.703883) (xy 77.392389 103.310835) (xy 77.233931 103.430499) (xy 77.090348 103.588001) (xy 77.041439 103.666992) (xy 76.431883 103.057436) (xy 76.431882 103.057437) (xy 76.325196 103.199953) (xy 76.325191 103.199961) (xy 76.188091 103.451041) (xy 76.088109 103.719104) (xy 76.0273 103.998637) (xy 76.006891 104.283998) (xy 76.006891 104.284001) (xy 68.037502 104.284001) (xy 68.047213 86.856314) (xy 68.066935 86.789287) (xy 68.119764 86.743562) (xy 68.188928 86.733657) (xy 68.252468 86.762717) (xy 68.277945 86.793264) (xy 68.360384 86.932662) (xy 68.360391 86.932671) (xy 68.476508 87.048788) (xy 68.476517 87.048795) (xy 68.617873 87.132392) (xy 68.617876 87.132393) (xy 68.775574 87.178209) (xy 68.77558 87.17821) (xy 68.812426 87.18111) (xy 69.45307 87.18111) (xy 69.45307 86.63111) (xy 69.95307 86.63111) (xy 69.95307 87.18111) (xy 70.593714 87.18111) (xy 70.630559 87.17821) (xy 70.630565 87.178209) (xy 70.788263 87.132393) (xy 70.788266 87.132392) (xy 70.929622 87.048795) (xy 70.929631 87.048788) (xy 71.045748 86.932671) (xy 71.045755 86.932662) (xy 71.129351 86.791308) (xy 71.17517 86.633596) (xy 71.175365 86.631111) (xy 71.175365 86.63111) (xy 69.95307 86.63111) (xy 69.45307 86.63111) (xy 69.45307 86.25511) (xy 69.472755 86.188071) (xy 69.525559 86.142316) (xy 69.57707 86.13111) (xy 71.175365 86.13111) (xy 71.175365 86.131108) (xy 71.17517 86.128621) (xy 71.175169 86.128615) (xy 71.139864 86.007095) (xy 71.140063 85.937226) (xy 71.178005 85.878556) (xy 71.241643 85.849712) (xy 71.25894 85.8485) (xy 73.1715 85.8485) (xy 73.238539 85.868185) (xy 73.284294 85.920989) (xy 73.2955 85.9725) (xy 73.2955 86.242654) (xy 73.302011 86.303202) (xy 73.302011 86.303204) (xy 73.353111 86.440204) (xy 73.432893 86.54678) (xy 73.45731 86.612245) (xy 73.442458 86.680518) (xy 73.432893 86.695402) (xy 73.360647 86.79191) (xy 73.360645 86.791913) (xy 73.310403 86.92662) (xy 73.310401 86.926627) (xy 73.304 86.986155) (xy 73.304 87.634) (xy 77.804 87.634) (xy 77.804 86.986172) (xy 77.803999 86.986155) (xy 77.797598 86.926627) (xy 77.797596 86.92662) (xy 77.747354 86.791913) (xy 77.747353 86.791911) (xy 77.675106 86.695402) (xy 77.650689 86.629938) (xy 77.66554 86.561665) (xy 77.675099 86.546789) (xy 77.754889 86.440204) (xy 77.805989 86.303201) (xy 77.809591 86.269692) (xy 77.812499 86.242654) (xy 77.8125 86.242637) (xy 77.8125 84.445362) (xy 77.812499 84.445345) (xy 77.809157 84.41427) (xy 77.805989 84.384799) (xy 77.787558 84.335385) (xy 77.754888 84.247793) (xy 77.754887 84.247792) (xy 77.680415 84.148311) (xy 77.655997 84.082847) (xy 77.670848 84.014574) (xy 77.680415 83.999689) (xy 77.754887 83.900207) (xy 77.754888 83.900206) (xy 77.805988 83.763204) (xy 77.805988 83.763203) (xy 77.805989 83.763201) (xy 77.809591 83.729692) (xy 77.812499 83.702654) (xy 77.8125 83.702637) (xy 77.8125 81.905362) (xy 77.812499 81.905345) (xy 77.809157 81.87427) (xy 77.805989 81.844799) (xy 77.802332 81.834995) (xy 77.754888 81.707793) (xy 77.754887 81.707792) (xy 77.680415 81.608311) (xy 77.655997 81.542847) (xy 77.670848 81.474574) (xy 77.680415 81.459689) (xy 77.754887 81.360207) (xy 77.754888 81.360206) (xy 77.805988 81.223204) (xy 77.805988 81.223203) (xy 77.805989 81.223201) (xy 77.809591 81.189692) (xy 77.812499 81.162654) (xy 77.8125 81.162637) (xy 77.8125 79.365362) (xy 77.812499 79.365345) (xy 77.809157 79.33427) (xy 77.805989 79.304799) (xy 77.754889 79.167796) (xy 77.754888 79.167793) (xy 77.754887 79.167792) (xy 77.680415 79.068311) (xy 77.655997 79.002847) (xy 77.670848 78.934574) (xy 77.680415 78.919689) (xy 77.754887 78.820207) (xy 77.754888 78.820206) (xy 77.805988 78.683204) (xy 77.805988 78.683203) (xy 77.805989 78.683201) (xy 77.809591 78.649692) (xy 77.812499 78.622654) (xy 77.8125 78.622637) (xy 77.8125 76.825362) (xy 77.812499 76.825345) (xy 77.809157 76.79427) (xy 77.805989 76.764799) (xy 77.754889 76.627796) (xy 77.675105 76.521218) (xy 77.650689 76.455754) (xy 77.665541 76.387481) (xy 77.675107 76.372596) (xy 77.747352 76.276089) (xy 77.747354 76.276086) (xy 77.797596 76.141379) (xy 77.797598 76.141372) (xy 77.803999 76.081844) (xy 77.804 76.081827) (xy 77.804 75.434) (xy 75.428 75.434) (xy 75.360961 75.414315) (xy 75.315206 75.361511) (xy 75.304 75.31) (xy 75.304 75.058) (xy 75.323685 74.990961) (xy 75.376489 74.945206) (xy 75.428 74.934) (xy 77.804 74.934) (xy 77.804 74.286172) (xy 77.803999 74.286155) (xy 77.797598 74.226627) (xy 77.797596 74.22662) (xy 77.747354 74.091913) (xy 77.747353 74.091911) (xy 77.675106 73.995402) (xy 77.650689 73.929938) (xy 77.66554 73.861665) (xy 77.675099 73.846789) (xy 77.754889 73.740204) (xy 77.805989 73.603201) (xy 77.809591 73.569692) (xy 77.812499 73.542654) (xy 77.8125 73.542637) (xy 77.8125 71.745362) (xy 77.812499 71.745345) (xy 77.809157 71.71427) (xy 77.805989 71.684799) (xy 77.791338 71.645519) (xy 77.754888 71.547793) (xy 77.754887 71.547792) (xy 77.680415 71.448311) (xy 77.655997 71.382847) (xy 77.670848 71.314574) (xy 77.680415 71.299689) (xy 77.754887 71.200207) (xy 77.754888 71.200206) (xy 77.805988 71.063204) (xy 77.805988 71.063203) (xy 77.805989 71.063201) (xy 77.809591 71.029692) (xy 77.812499 71.002654) (xy 77.8125 71.002637) (xy 77.8125 69.205362) (xy 77.812499 69.205345) (xy 77.809157 69.17427) (xy 77.805989 69.144799) (xy 77.754889 69.007796) (xy 77.754888 69.007793) (xy 77.754887 69.007792) (xy 77.680415 68.908311) (xy 77.655997 68.842847) (xy 77.670848 68.774574) (xy 77.680415 68.759689) (xy 77.754887 68.660207) (xy 77.754888 68.660206) (xy 77.805988 68.523204) (xy 77.805988 68.523203) (xy 77.805989 68.523201) (xy 77.809591 68.489692) (xy 77.812499 68.462654) (xy 77.8125 68.462637) (xy 77.8125 66.665362) (xy 77.812499 66.665345) (xy 77.809157 66.63427) (xy 77.805989 66.604799) (xy 77.754889 66.467796) (xy 77.754888 66.467793) (xy 77.754887 66.467792) (xy 77.680415 66.368311) (xy 77.655997 66.302847) (xy 77.670848 66.234574) (xy 77.680415 66.219689) (xy 77.754887 66.120207) (xy 77.754888 66.120206) (xy 77.805988 65.983204) (xy 77.805988 65.983203) (xy 77.805989 65.983201) (xy 77.809591 65.949692) (xy 77.812499 65.922654) (xy 77.8125 65.922637) (xy 77.8125 64.125362) (xy 77.812499 64.125345) (xy 77.809157 64.09427) (xy 77.805989 64.064799) (xy 77.754889 63.927796) (xy 77.675105 63.821218) (xy 77.650689 63.755754) (xy 77.665541 63.687481) (xy 77.675107 63.672596) (xy 77.747352 63.576089) (xy 77.747354 63.576086) (xy 77.797596 63.441379) (xy 77.797598 63.441372) (xy 77.803999 63.381844) (xy 77.804 63.381827) (xy 77.804 62.734) (xy 73.304 62.734) (xy 73.304 63.381844) (xy 73.310401 63.441372) (xy 73.310403 63.441379) (xy 73.360645 63.576086) (xy 73.360646 63.576088) (xy 73.432893 63.672597) (xy 73.45731 63.738061) (xy 73.442459 63.806334) (xy 73.432893 63.821218) (xy 73.353112 63.927793) (xy 73.353111 63.927793) (xy 73.302011 64.064795) (xy 73.302011 64.064797) (xy 73.2955 64.125345) (xy 73.2955 65.922654) (xy 73.302011 65.983202) (xy 73.302011 65.983204) (xy 73.353111 66.120204) (xy 73.427585 66.219689) (xy 73.452002 66.285154) (xy 73.43715 66.353427) (xy 73.427585 66.368311) (xy 73.353111 66.467795) (xy 73.302011 66.604795) (xy 73.302011 66.604797) (xy 73.2955 66.665345) (xy 73.2955 68.462654) (xy 73.302011 68.523202) (xy 73.302011 68.523204) (xy 73.353111 68.660204) (xy 73.427585 68.759689) (xy 73.452002 68.825154) (xy 73.43715 68.893427) (xy 73.427585 68.908311) (xy 73.353111 69.007795) (xy 73.302011 69.144795) (xy 73.302011 69.144797) (xy 73.2955 69.205345) (xy 73.2955 71.002654) (xy 73.302011 71.063202) (xy 73.302011 71.063204) (xy 73.353111 71.200204) (xy 73.427585 71.299689) (xy 73.452002 71.365154) (xy 73.43715 71.433427) (xy 73.427585 71.448311) (xy 73.353111 71.547795) (xy 73.302011 71.684795) (xy 73.302011 71.684797) (xy 73.2955 71.745345) (xy 73.2955 73.54264) (xy 73.298965 73.574872) (xy 73.286558 73.643632) (xy 73.238947 73.694768) (xy 73.171248 73.712047) (xy 73.104954 73.689981) (xy 73.087994 73.675807) (xy 73.047536 73.635349) (xy 72.898315 73.543308) (xy 72.89831 73.543306) (xy 72.731888 73.488159) (xy 72.731881 73.488158) (xy 72.629177 73.477665) (xy 72.416691 73.477665) (xy 72.416691 76.277664) (xy 72.629163 76.277664) (xy 72.629177 76.277663) (xy 72.731888 76.26717) (xy 72.89831 76.212023) (xy 72.898315 76.212021) (xy 73.047536 76.11998) (xy 73.09954 76.067976) (xy 73.160863 76.03449) (xy 73.230555 76.039474) (xy 73.286488 76.081345) (xy 73.30727 76.13415) (xy 73.30862 76.133832) (xy 73.310403 76.141379) (xy 73.360645 76.276086) (xy 73.360646 76.276088) (xy 73.432893 76.372597) (xy 73.45731 76.438061) (xy 73.442459 76.506334) (xy 73.432893 76.521218) (xy 73.353112 76.627793) (xy 73.353111 76.627793) (xy 73.302011 76.764795) (xy 73.302011 76.764797) (xy 73.2955 76.825345) (xy 73.2955 78.622654) (xy 73.302011 78.683202) (xy 73.302011 78.683204) (xy 73.353111 78.820204) (xy 73.427585 78.919689) (xy 73.452002 78.985154) (xy 73.43715 79.053427) (xy 73.427585 79.068311) (xy 73.353111 79.167795) (xy 73.302011 79.304795) (xy 73.302011 79.304797) (xy 73.2955 79.365345) (xy 73.2955 81.162654) (xy 73.302011 81.223202) (xy 73.302011 81.223204) (xy 73.353111 81.360204) (xy 73.427585 81.459689) (xy 73.452002 81.525154) (xy 73.43715 81.593427) (xy 73.427585 81.608311) (xy 73.353111 81.707795) (xy 73.302011 81.844795) (xy 73.302011 81.844797) (xy 73.2955 81.905345) (xy 73.2955 81.9215) (xy 73.275815 81.988539) (xy 73.223011 82.034294) (xy 73.1715 82.0455) (xy 73.030015 82.0455) (xy 73.012045 82.044191) (xy 72.987927 82.040658) (xy 72.942372 82.044645) (xy 72.935294 82.045264) (xy 72.929893 82.0455) (xy 72.92154 82.0455) (xy 72.888624 82.049347) (xy 72.811295 82.056112) (xy 72.804227 82.057572) (xy 72.804217 82.057528) (xy 72.796627 82.05921) (xy 72.796638 82.059254) (xy 72.789614 82.060919) (xy 72.789608 82.06092) (xy 72.789608 82.060921) (xy 72.765135 82.069827) (xy 72.716654 82.087473) (xy 72.642978 82.111887) (xy 72.636441 82.114936) (xy 72.636421 82.114894) (xy 72.629417 82.118285) (xy 72.629438 82.118326) (xy 72.62299 82.121564) (xy 72.558115 82.164233) (xy 72.492073 82.204967) (xy 72.486404 82.20945) (xy 72.486374 82.209413) (xy 72.480348 82.214322) (xy 72.480378 82.214357) (xy 72.474853 82.218993) (xy 72.421557 82.275482) (xy 71.671859 83.025181) (xy 71.610536 83.058666) (xy 71.584178 83.0615) (xy 71.280058 83.0615) (xy 71.213019 83.041815) (xy 71.167264 82.989011) (xy 71.15732 82.919853) (xy 71.160982 82.902905) (xy 71.183631 82.824945) (xy 71.183632 82.824939) (xy 71.18657 82.787615) (xy 71.18657 82.354605) (xy 71.183632 82.31728) (xy 71.183631 82.317274) (xy 71.145328 82.185434) (xy 71.137215 82.157509) (xy 71.052523 82.014303) (xy 71.052521 82.014301) (xy 71.052518 82.014297) (xy 70.934882 81.896661) (xy 70.934873 81.896654) (xy 70.791671 81.811965) (xy 70.791666 81.811963) (xy 70.631905 81.765548) (xy 70.631899 81.765547) (xy 70.594575 81.76261) (xy 70.594572 81.76261) (xy 70.186653 81.76261) (xy 70.119614 81.742925) (xy 70.098972 81.726291) (xy 69.83651 81.463829) (xy 69.803025 81.402506) (xy 69.800191 81.376148) (xy 69.800191 76.274638) (xy 69.819876 76.207599) (xy 69.859092 76.1691) (xy 69.927843 76.126695) (xy 70.053221 76.001317) (xy 70.146306 75.850403) (xy 70.202078 75.682091) (xy 70.212691 75.57821) (xy 70.212691 75.127665) (xy 71.004192 75.127665) (xy 71.004192 75.577651) (xy 71.014685 75.680362) (xy 71.069832 75.846784) (xy 71.069834 75.846789) (xy 71.161875 75.99601) (xy 71.285845 76.11998) (xy 71.435066 76.212021) (xy 71.435071 76.212023) (xy 71.601493 76.26717) (xy 71.6015 76.267171) (xy 71.70421 76.277664) (xy 71.91669 76.277664) (xy 71.916691 76.277663) (xy 71.916691 75.127665) (xy 71.004192 75.127665) (xy 70.212691 75.127665) (xy 70.21269 74.627665) (xy 71.004191 74.627665) (xy 71.916691 74.627665) (xy 71.916691 73.477665) (xy 71.70422 73.477665) (xy 71.704203 73.477666) (xy 71.601493 73.488159) (xy 71.435071 73.543306) (xy 71.435066 73.543308) (xy 71.285845 73.635349) (xy 71.161875 73.759319) (xy 71.069834 73.90854) (xy 71.069832 73.908545) (xy 71.014685 74.074967) (xy 71.014684 74.074974) (xy 71.004191 74.177678) (xy 71.004191 74.627665) (xy 70.21269 74.627665) (xy 70.21269 74.177121) (xy 70.202078 74.073239) (xy 70.146306 73.904927) (xy 70.053221 73.754013) (xy 69.927843 73.628635) (xy 69.910528 73.617955) (xy 69.863804 73.566009) (xy 69.852581 73.497047) (xy 69.880424 73.432965) (xy 69.887934 73.424746) (xy 71.0743 72.238379) (xy 71.087926 72.226603) (xy 71.107478 72.212049) (xy 71.141435 72.17158) (xy 71.145095 72.167585) (xy 71.151 72.161681) (xy 71.171556 72.135683) (xy 71.221452 72.07622) (xy 71.221453 72.076219) (xy 71.225423 72.070183) (xy 71.225463 72.070209) (xy 71.229632 72.063666) (xy 71.229591 72.063641) (xy 71.233384 72.057491) (xy 71.233385 72.057488) (xy 71.233387 72.057486) (xy 71.266193 71.987132) (xy 71.301029 71.917768) (xy 71.30103 71.91776) (xy 71.303499 71.91098) (xy 71.303546 71.910997) (xy 71.306098 71.903655) (xy 71.306051 71.90364) (xy 71.30832 71.896791) (xy 71.30832 71.896789) (xy 71.308322 71.896786) (xy 71.324019 71.820761) (xy 71.34192 71.745236) (xy 71.34192 71.745234) (xy 71.341921 71.74523) (xy 71.342759 71.738063) (xy 71.342806 71.738068) (xy 71.343596 71.730337) (xy 71.343549 71.730333) (xy 71.344178 71.723142) (xy 71.343062 71.684795) (xy 71.34192 71.645519) (xy 71.34192 60.842654) (xy 73.2955 60.842654) (xy 73.302011 60.903202) (xy 73.302011 60.903204) (xy 73.353111 61.040204) (xy 73.432893 61.14678) (xy 73.45731 61.212245) (xy 73.442458 61.280518) (xy 73.432893 61.295402) (xy 73.360647 61.39191) (xy 73.360645 61.391913) (xy 73.310403 61.52662) (xy 73.310401 61.526627) (xy 73.304 61.586155) (xy 73.304 62.234) (xy 77.804 62.234) (xy 77.804 61.586172) (xy 77.803999 61.586155) (xy 77.797598 61.526627) (xy 77.797596 61.52662) (xy 77.747354 61.391913) (xy 77.747353 61.391911) (xy 77.675106 61.295402) (xy 77.650689 61.229938) (xy 77.66554 61.161665) (xy 77.675099 61.146789) (xy 77.754889 61.040204) (xy 77.805989 60.903201) (xy 77.809591 60.869692) (xy 77.812499 60.842654) (xy 77.8125 60.842637) (xy 77.8125 59.045362) (xy 77.812499 59.045345) (xy 77.809157 59.01427) (xy 77.805989 58.984799) (xy 77.754889 58.847796) (xy 77.754888 58.847793) (xy 77.754887 58.847792) (xy 77.680415 58.748311) (xy 77.655997 58.682847) (xy 77.670848 58.614574) (xy 77.680415 58.599689) (xy 77.754887 58.500207) (xy 77.754888 58.500206) (xy 77.805988 58.363204) (xy 77.805988 58.363203) (xy 77.805989 58.363201) (xy 77.809591 58.329692) (xy 77.812499 58.302654) (xy 77.8125 58.302637) (xy 77.8125 56.505362) (xy 77.812499 56.505345) (xy 77.809157 56.47427) (xy 77.805989 56.444799) (xy 77.754889 56.307796) (xy 77.754888 56.307793) (xy 77.754887 56.307792) (xy 77.680415 56.208311) (xy 77.655997 56.142847) (xy 77.670848 56.074574) (xy 77.680415 56.059689) (xy 77.754887 55.960207) (xy 77.754888 55.960206) (xy 77.805988 55.823204) (xy 77.805988 55.823203) (xy 77.805989 55.823201) (xy 77.809591 55.789692) (xy 77.812499 55.762654) (xy 77.8125 55.762637) (xy 77.8125 53.965362) (xy 77.812499 53.965345) (xy 77.809157 53.93427) (xy 77.805989 53.904799) (xy 77.754889 53.767796) (xy 77.754888 53.767793) (xy 77.754887 53.767792) (xy 77.680415 53.668311) (xy 77.655997 53.602847) (xy 77.670848 53.534574) (xy 77.680415 53.519689) (xy 77.754887 53.420207) (xy 77.754888 53.420206) (xy 77.805988 53.283204) (xy 77.805988 53.283203) (xy 77.805989 53.283201) (xy 77.809591 53.249692) (xy 77.812499 53.222654) (xy 77.8125 53.222637) (xy 77.8125 51.425362) (xy 77.812499 51.425345) (xy 77.809157 51.39427) (xy 77.805989 51.364799) (xy 77.754889 51.227796) (xy 77.675105 51.121218) (xy 77.650689 51.055754) (xy 77.665541 50.987481) (xy 77.675107 50.972596) (xy 77.747352 50.876089) (xy 77.747354 50.876086) (xy 77.797596 50.741379) (xy 77.797598 50.741372) (xy 77.803999 50.681844) (xy 77.804 50.681827) (xy 77.804 50.034) (xy 73.304 50.034) (xy 73.304 50.681844) (xy 73.310401 50.741372) (xy 73.310403 50.741379) (xy 73.360645 50.876086) (xy 73.360646 50.876088) (xy 73.432893 50.972597) (xy 73.45731 51.038061) (xy 73.442459 51.106334) (xy 73.432893 51.121218) (xy 73.353112 51.227793) (xy 73.353111 51.227793) (xy 73.302011 51.364795) (xy 73.302011 51.364797) (xy 73.2955 51.425345) (xy 73.2955 53.222654) (xy 73.302011 53.283202) (xy 73.302011 53.283204) (xy 73.353111 53.420204) (xy 73.427585 53.519689) (xy 73.452002 53.585154) (xy 73.43715 53.653427) (xy 73.427585 53.668311) (xy 73.353111 53.767795) (xy 73.302011 53.904795) (xy 73.302011 53.904797) (xy 73.2955 53.965345) (xy 73.2955 55.762654) (xy 73.302011 55.823202) (xy 73.302011 55.823204) (xy 73.353111 55.960204) (xy 73.427585 56.059689) (xy 73.452002 56.125154) (xy 73.43715 56.193427) (xy 73.427585 56.208311) (xy 73.353111 56.307795) (xy 73.302011 56.444795) (xy 73.302011 56.444797) (xy 73.2955 56.505345) (xy 73.2955 58.302654) (xy 73.302011 58.363202) (xy 73.302011 58.363204) (xy 73.353111 58.500204) (xy 73.427585 58.599689) (xy 73.452002 58.665154) (xy 73.43715 58.733427) (xy 73.427585 58.748311) (xy 73.353111 58.847795) (xy 73.302011 58.984795) (xy 73.302011 58.984797) (xy 73.2955 59.045345) (xy 73.2955 60.842654) (xy 71.34192 60.842654) (xy 71.34192 56.24854) (xy 71.361605 56.181501) (xy 71.378235 56.160863) (xy 72.25088 55.288217) (xy 72.264506 55.276441) (xy 72.284058 55.261887) (xy 72.318015 55.221418) (xy 72.321675 55.217423) (xy 72.32758 55.211519) (xy 72.348136 55.185521) (xy 72.398032 55.126058) (xy 72.398033 55.126057) (xy 72.402003 55.120021) (xy 72.402044 55.120048) (xy 72.406219 55.113494) (xy 72.406177 55.113468) (xy 72.409963 55.107328) (xy 72.409967 55.107324) (xy 72.442775 55.036964) (xy 72.477609 54.967606) (xy 72.477611 54.967597) (xy 72.48008 54.960817) (xy 72.480126 54.960834) (xy 72.482678 54.953493) (xy 72.482631 54.953478) (xy 72.484901 54.946628) (xy 72.484902 54.946625) (xy 72.5006 54.870595) (xy 72.5185 54.795074) (xy 72.5185 54.795072) (xy 72.518501 54.795068) (xy 72.519339 54.787901) (xy 72.519386 54.787906) (xy 72.520176 54.780175) (xy 72.520129 54.780171) (xy 72.520758 54.77298) (xy 72.5185 54.695372) (xy 72.5185 44.769543) (xy 72.538185 44.702504) (xy 72.554819 44.681862) (xy 73.083819 44.152862) (xy 73.145142 44.119377) (xy 73.214834 44.124361) (xy 73.270767 44.166233) (xy 73.295184 44.231697) (xy 73.2955 44.240543) (xy 73.2955 45.602654) (xy 73.302011 45.663202) (xy 73.302011 45.663204) (xy 73.34107 45.767922) (xy 73.353111 45.800204) (xy 73.427097 45.899038) (xy 73.427585 45.899689) (xy 73.452002 45.965154) (xy 73.43715 46.033427) (xy 73.427585 46.048311) (xy 73.353111 46.147795) (xy 73.302011 46.284795) (xy 73.302011 46.284797) (xy 73.2955 46.345345) (xy 73.2955 48.142654) (xy 73.302011 48.203202) (xy 73.302011 48.203204) (xy 73.353111 48.340204) (xy 73.432893 48.44678) (xy 73.45731 48.512245) (xy 73.442458 48.580518) (xy 73.432893 48.595402) (xy 73.360647 48.69191) (xy 73.360645 48.691913) (xy 73.310403 48.82662) (xy 73.310401 48.826627) (xy 73.304 48.886155) (xy 73.304 49.534) (xy 77.804 49.534) (xy 77.804 48.886172) (xy 77.803999 48.886155) (xy 77.797598 48.826627) (xy 77.797596 48.82662) (xy 77.747354 48.691913) (xy 77.747353 48.691911) (xy 77.675106 48.595402) (xy 77.650689 48.529938) (xy 77.66554 48.461665) (xy 77.675099 48.446789) (xy 77.754889 48.340204) (xy 77.805989 48.203201) (xy 77.809883 48.166978) (xy 77.812499 48.142654) (xy 77.8125 48.142637) (xy 77.8125 47.863998) (xy 81.655693 47.863998) (xy 81.657672 47.886639) (xy 81.657846 47.894829) (xy 81.656684 47.920688) (xy 81.656685 47.92069) (xy 81.667691 48.001946) (xy 81.668016 48.004864) (xy 81.670532 48.033615) (xy 81.674885 48.083371) (xy 81.681624 48.108523) (xy 81.683174 48.116243) (xy 81.687093 48.145173) (xy 81.687096 48.145183) (xy 81.711413 48.220023) (xy 81.712334 48.223134) (xy 81.731877 48.296066) (xy 81.731881 48.296078) (xy 81.744275 48.322659) (xy 81.747051 48.329705) (xy 81.757095 48.360616) (xy 81.757097 48.360621) (xy 81.766105 48.37736) (xy 81.792822 48.42701) (xy 81.794416 48.430187) (xy 81.824942 48.495651) (xy 81.824943 48.495653) (xy 81.824944 48.495654) (xy 81.843668 48.522396) (xy 81.847475 48.528574) (xy 81.864443 48.560105) (xy 81.864445 48.560108) (xy 81.909397 48.616475) (xy 81.911709 48.619567) (xy 81.951251 48.676038) (xy 81.951254 48.676041) (xy 81.976659 48.701446) (xy 81.981295 48.706633) (xy 82.005686 48.737218) (xy 82.057514 48.782499) (xy 82.060557 48.785344) (xy 82.106955 48.831743) (xy 82.106956 48.831744) (xy 82.106959 48.831746) (xy 82.106962 48.831749) (xy 82.138487 48.853822) (xy 82.139109 48.854258) (xy 82.144341 48.858357) (xy 82.176282 48.886263) (xy 82.232535 48.919872) (xy 82.236258 48.922283) (xy 82.27275 48.947835) (xy 82.287338 48.958051) (xy 82.287341 48.958052) (xy 82.287346 48.958056) (xy 82.32591 48.976038) (xy 82.331493 48.978997) (xy 82.37075 49.002453) (xy 82.42901 49.024317) (xy 82.433422 49.026171) (xy 82.486924 49.05112) (xy 82.531204 49.062984) (xy 82.536939 49.064824) (xy 82.566356 49.075864) (xy 82.582839 49.082051) (xy 82.640813 49.092571) (xy 82.645778 49.093685) (xy 82.699629 49.108115) (xy 82.748602 49.112399) (xy 82.75425 49.113157) (xy 82.793352 49.120253) (xy 82.805732 49.1225) (xy 82.805733 49.1225) (xy 82.861348 49.1225) (xy 82.866749 49.122735) (xy 82.89537 49.125239) (xy 82.918998 49.127307) (xy 82.918999 49.127307) (xy 82.918999 49.127306) (xy 82.919 49.127307) (xy 82.97231 49.122643) (xy 82.975504 49.1225) (xy 82.975522 49.1225) (xy 83.023625 49.118169) (xy 83.030391 49.117561) (xy 83.138353 49.108117) (xy 83.138357 49.108116) (xy 83.138371 49.108115) (xy 83.138383 49.108111) (xy 83.138902 49.10802) (xy 83.144136 49.107324) (xy 83.144622 49.107281) (xy 83.249335 49.078381) (xy 83.351076 49.05112) (xy 83.351089 49.051113) (xy 83.358029 49.048588) (xy 83.36272 49.047089) (xy 83.362993 49.047014) (xy 83.458019 49.001251) (xy 83.550654 48.958056) (xy 83.550663 48.958049) (xy 83.55535 48.955345) (xy 83.555421 48.955468) (xy 83.566206 48.949152) (xy 83.567093 48.948725) (xy 83.649868 48.888585) (xy 83.731038 48.831749) (xy 83.731951 48.830835) (xy 83.746752 48.818193) (xy 83.750363 48.815571) (xy 83.78199 48.782492) (xy 83.818902 48.743884) (xy 83.886746 48.676041) (xy 83.886746 48.67604) (xy 83.886749 48.676038) (xy 83.889476 48.672142) (xy 83.901428 48.657568) (xy 83.906912 48.651834) (xy 83.959809 48.571697) (xy 84.013056 48.495654) (xy 84.016538 48.488185) (xy 84.025436 48.472276) (xy 84.031709 48.462774) (xy 84.068216 48.37736) (xy 84.10612 48.296076) (xy 84.109145 48.284782) (xy 84.114896 48.268147) (xy 84.120743 48.25447) (xy 84.140711 48.166978) (xy 84.163115 48.083371) (xy 84.164807 48.064024) (xy 84.166126 48.055626) (xy 84.171151 48.033615) (xy 84.175036 47.947105) (xy 84.182307 47.864) (xy 84.182307 47.863998) (xy 86.505693 47.863998) (xy 86.507672 47.886639) (xy 86.507846 47.894829) (xy 86.506684 47.920688) (xy 86.506685 47.92069) (xy 86.517691 48.001946) (xy 86.518016 48.004864) (xy 86.520532 48.033615) (xy 86.524885 48.083371) (xy 86.531624 48.108523) (xy 86.533174 48.116243) (xy 86.537093 48.145173) (xy 86.537096 48.145183) (xy 86.561413 48.220023) (xy 86.562334 48.223134) (xy 86.581877 48.296066) (xy 86.581881 48.296078) (xy 86.594275 48.322659) (xy 86.597051 48.329705) (xy 86.607095 48.360616) (xy 86.607097 48.360621) (xy 86.616105 48.37736) (xy 86.642822 48.42701) (xy 86.644416 48.430187) (xy 86.674942 48.495651) (xy 86.674943 48.495653) (xy 86.674944 48.495654) (xy 86.693668 48.522396) (xy 86.697475 48.528574) (xy 86.714443 48.560105) (xy 86.714445 48.560108) (xy 86.759397 48.616475) (xy 86.761709 48.619567) (xy 86.801251 48.676038) (xy 86.801254 48.676041) (xy 86.826659 48.701446) (xy 86.831295 48.706633) (xy 86.855686 48.737218) (xy 86.907514 48.782499) (xy 86.910557 48.785344) (xy 86.956955 48.831743) (xy 86.956956 48.831744) (xy 86.956959 48.831746) (xy 86.956962 48.831749) (xy 86.988487 48.853822) (xy 86.989109 48.854258) (xy 86.994341 48.858357) (xy 87.026282 48.886263) (xy 87.082535 48.919872) (xy 87.086258 48.922283) (xy 87.12275 48.947835) (xy 87.137338 48.958051) (xy 87.137341 48.958052) (xy 87.137346 48.958056) (xy 87.17591 48.976038) (xy 87.181493 48.978997) (xy 87.22075 49.002453) (xy 87.27901 49.024317) (xy 87.283422 49.026171) (xy 87.336924 49.05112) (xy 87.381204 49.062984) (xy 87.386939 49.064824) (xy 87.416356 49.075864) (xy 87.432839 49.082051) (xy 87.490813 49.092571) (xy 87.495778 49.093685) (xy 87.549629 49.108115) (xy 87.598602 49.112399) (xy 87.60425 49.113157) (xy 87.643352 49.120253) (xy 87.655732 49.1225) (xy 87.655733 49.1225) (xy 87.711348 49.1225) (xy 87.716749 49.122735) (xy 87.74537 49.125239) (xy 87.768998 49.127307) (xy 87.768999 49.127307) (xy 87.768999 49.127306) (xy 87.769 49.127307) (xy 87.82231 49.122643) (xy 87.825504 49.1225) (xy 87.825522 49.1225) (xy 87.873625 49.118169) (xy 87.880391 49.117561) (xy 87.988353 49.108117) (xy 87.988357 49.108116) (xy 87.988371 49.108115) (xy 87.988383 49.108111) (xy 87.988902 49.10802) (xy 87.994136 49.107324) (xy 87.994622 49.107281) (xy 88.099335 49.078381) (xy 88.201076 49.05112) (xy 88.201089 49.051113) (xy 88.208029 49.048588) (xy 88.21272 49.047089) (xy 88.212993 49.047014) (xy 88.308019 49.001251) (xy 88.400654 48.958056) (xy 88.400663 48.958049) (xy 88.40535 48.955345) (xy 88.405421 48.955468) (xy 88.416206 48.949152) (xy 88.417093 48.948725) (xy 88.499868 48.888585) (xy 88.581038 48.831749) (xy 88.581951 48.830835) (xy 88.596752 48.818193) (xy 88.600363 48.815571) (xy 88.63199 48.782492) (xy 88.668902 48.743884) (xy 88.736746 48.676041) (xy 88.736746 48.67604) (xy 88.736749 48.676038) (xy 88.739476 48.672142) (xy 88.751428 48.657568) (xy 88.756912 48.651834) (xy 88.809809 48.571697) (xy 88.863056 48.495654) (xy 88.866538 48.488185) (xy 88.875436 48.472276) (xy 88.881709 48.462774) (xy 88.918216 48.37736) (xy 88.95612 48.296076) (xy 88.959145 48.284782) (xy 88.964896 48.268147) (xy 88.970743 48.25447) (xy 88.990711 48.166978) (xy 89.013115 48.083371) (xy 89.014807 48.064024) (xy 89.016126 48.055626) (xy 89.021151 48.033615) (xy 89.025036 47.947105) (xy 89.032307 47.864) (xy 89.030327 47.841368) (xy 89.030153 47.833173) (xy 89.031315 47.807309) (xy 89.020305 47.726042) (xy 89.019981 47.723125) (xy 89.013115 47.644631) (xy 89.013115 47.644629) (xy 89.006377 47.619483) (xy 89.004825 47.611753) (xy 89.003122 47.59919) (xy 89.000906 47.582825) (xy 88.976587 47.507982) (xy 88.975671 47.504889) (xy 88.96143 47.451741) (xy 88.956123 47.431933) (xy 88.956119 47.431923) (xy 88.943722 47.405336) (xy 88.940948 47.398296) (xy 88.930903 47.367379) (xy 88.930902 47.367377) (xy 88.930899 47.36737) (xy 88.895167 47.30097) (xy 88.893582 47.297811) (xy 88.863056 47.232347) (xy 88.863052 47.232341) (xy 88.844337 47.205613) (xy 88.840523 47.199424) (xy 88.823555 47.167892) (xy 88.778594 47.111513) (xy 88.776279 47.108417) (xy 88.73675 47.051963) (xy 88.71134 47.026553) (xy 88.706702 47.021364) (xy 88.682312 46.99078) (xy 88.630491 46.945505) (xy 88.627442 46.942655) (xy 88.581039 46.896251) (xy 88.548891 46.873741) (xy 88.543656 46.869641) (xy 88.511718 46.841737) (xy 88.455486 46.808139) (xy 88.451725 46.805704) (xy 88.41398 46.779275) (xy 88.400654 46.769944) (xy 88.38694 46.763549) (xy 88.3621 46.751965) (xy 88.356501 46.748997) (xy 88.325701 46.730596) (xy 88.31725 46.725547) (xy 88.258988 46.703681) (xy 88.254588 46.701833) (xy 88.222893 46.687053) (xy 88.201077 46.67688) (xy 88.201065 46.676876) (xy 88.156793 46.665013) (xy 88.151053 46.663172) (xy 88.10516 46.645948) (xy 88.054115 46.636684) (xy 88.047191 46.635428) (xy 88.042217 46.634312) (xy 87.988372 46.619885) (xy 87.97637 46.618834) (xy 87.939403 46.6156) (xy 87.933741 46.61484) (xy 87.898998 46.608536) (xy 87.882267 46.6055) (xy 87.882266 46.6055) (xy 87.826652 46.6055) (xy 87.82125 46.605264) (xy 87.792629 46.60276) (xy 87.769002 46.600693) (xy 87.768997 46.600693) (xy 87.715728 46.605353) (xy 87.712489 46.605499) (xy 87.657608 46.610438) (xy 87.549618 46.619885) (xy 87.549041 46.619987) (xy 87.543889 46.620672) (xy 87.543386 46.620717) (xy 87.543369 46.62072) (xy 87.438664 46.649618) (xy 87.336918 46.676881) (xy 87.329944 46.679418) (xy 87.325268 46.680912) (xy 87.325022 46.680979) (xy 87.325011 46.680984) (xy 87.229964 46.726755) (xy 87.137352 46.769941) (xy 87.132658 46.772651) (xy 87.132587 46.772529) (xy 87.121824 46.778833) (xy 87.120908 46.779274) (xy 87.120902 46.779277) (xy 87.038119 46.839423) (xy 86.956958 46.896254) (xy 86.956027 46.897185) (xy 86.941264 46.909793) (xy 86.937641 46.912425) (xy 86.937631 46.912434) (xy 86.869097 46.984115) (xy 86.801247 47.051966) (xy 86.801246 47.051967) (xy 86.798506 47.05588) (xy 86.786581 47.070419) (xy 86.781089 47.076163) (xy 86.781085 47.076169) (xy 86.728183 47.156313) (xy 86.674943 47.232347) (xy 86.674941 47.232352) (xy 86.671462 47.239812) (xy 86.662576 47.255702) (xy 86.656292 47.265222) (xy 86.656291 47.265224) (xy 86.61978 47.350644) (xy 86.581882 47.431917) (xy 86.58188 47.431923) (xy 86.578852 47.443222) (xy 86.573102 47.459854) (xy 86.567259 47.473525) (xy 86.567256 47.473533) (xy 86.547288 47.561021) (xy 86.524885 47.644626) (xy 86.524884 47.644632) (xy 86.523192 47.66397) (xy 86.521873 47.672366) (xy 86.516849 47.694385) (xy 86.512963 47.780894) (xy 86.505693 47.863996) (xy 86.505693 47.863998) (xy 84.182307 47.863998) (xy 84.180327 47.841368) (xy 84.180153 47.833173) (xy 84.181315 47.807309) (xy 84.170305 47.726042) (xy 84.169981 47.723125) (xy 84.163115 47.644631) (xy 84.163115 47.644629) (xy 84.156377 47.619483) (xy 84.154825 47.611753) (xy 84.153122 47.59919) (xy 84.150906 47.582825) (xy 84.126587 47.507982) (xy 84.125671 47.504889) (xy 84.11143 47.451741) (xy 84.106123 47.431933) (xy 84.106119 47.431923) (xy 84.093722 47.405336) (xy 84.090948 47.398296) (xy 84.080903 47.367379) (xy 84.080902 47.367377) (xy 84.080899 47.36737) (xy 84.045167 47.30097) (xy 84.043582 47.297811) (xy 84.013056 47.232347) (xy 84.013052 47.232341) (xy 83.994337 47.205613) (xy 83.990523 47.199424) (xy 83.973555 47.167892) (xy 83.928594 47.111513) (xy 83.926279 47.108417) (xy 83.88675 47.051963) (xy 83.86134 47.026553) (xy 83.856702 47.021364) (xy 83.832312 46.99078) (xy 83.780491 46.945505) (xy 83.777442 46.942655) (xy 83.731039 46.896251) (xy 83.698891 46.873741) (xy 83.693656 46.869641) (xy 83.661718 46.841737) (xy 83.605486 46.808139) (xy 83.601725 46.805704) (xy 83.56398 46.779275) (xy 83.550654 46.769944) (xy 83.53694 46.763549) (xy 83.5121 46.751965) (xy 83.506501 46.748997) (xy 83.475701 46.730596) (xy 83.46725 46.725547) (xy 83.408988 46.703681) (xy 83.404588 46.701833) (xy 83.372893 46.687053) (xy 83.351077 46.67688) (xy 83.351065 46.676876) (xy 83.306793 46.665013) (xy 83.301053 46.663172) (xy 83.25516 46.645948) (xy 83.204115 46.636684) (xy 83.197191 46.635428) (xy 83.192217 46.634312) (xy 83.138372 46.619885) (xy 83.12637 46.618834) (xy 83.089403 46.6156) (xy 83.083741 46.61484) (xy 83.048998 46.608536) (xy 83.032267 46.6055) (xy 83.032266 46.6055) (xy 82.976652 46.6055) (xy 82.97125 46.605264) (xy 82.942629 46.60276) (xy 82.919002 46.600693) (xy 82.918997 46.600693) (xy 82.865728 46.605353) (xy 82.862489 46.605499) (xy 82.807608 46.610438) (xy 82.699618 46.619885) (xy 82.699041 46.619987) (xy 82.693889 46.620672) (xy 82.693386 46.620717) (xy 82.693369 46.62072) (xy 82.588664 46.649618) (xy 82.486918 46.676881) (xy 82.479944 46.679418) (xy 82.475268 46.680912) (xy 82.475022 46.680979) (xy 82.475011 46.680984) (xy 82.379964 46.726755) (xy 82.287352 46.769941) (xy 82.282658 46.772651) (xy 82.282587 46.772529) (xy 82.271824 46.778833) (xy 82.270908 46.779274) (xy 82.270902 46.779277) (xy 82.188119 46.839423) (xy 82.106958 46.896254) (xy 82.106027 46.897185) (xy 82.091264 46.909793) (xy 82.087641 46.912425) (xy 82.087631 46.912434) (xy 82.019097 46.984115) (xy 81.951247 47.051966) (xy 81.951246 47.051967) (xy 81.948506 47.05588) (xy 81.936581 47.070419) (xy 81.931089 47.076163) (xy 81.931085 47.076169) (xy 81.878183 47.156313) (xy 81.824943 47.232347) (xy 81.824941 47.232352) (xy 81.821462 47.239812) (xy 81.812576 47.255702) (xy 81.806292 47.265222) (xy 81.806291 47.265224) (xy 81.76978 47.350644) (xy 81.731882 47.431917) (xy 81.73188 47.431923) (xy 81.728852 47.443222) (xy 81.723102 47.459854) (xy 81.717259 47.473525) (xy 81.717256 47.473533) (xy 81.697288 47.561021) (xy 81.674885 47.644626) (xy 81.674884 47.644632) (xy 81.673192 47.66397) (xy 81.671873 47.672366) (xy 81.666849 47.694385) (xy 81.662963 47.780894) (xy 81.655693 47.863996) (xy 81.655693 47.863998) (xy 77.8125 47.863998) (xy 77.8125 46.345362) (xy 77.812499 46.345345) (xy 77.809157 46.31427) (xy 77.805989 46.284799) (xy 77.790212 46.2425) (xy 77.754888 46.147793) (xy 77.754887 46.147792) (xy 77.680415 46.048311) (xy 77.655997 45.982847) (xy 77.670848 45.914574) (xy 77.680415 45.899689) (xy 77.680903 45.899038) (xy 77.738719 45.821805) (xy 77.754887 45.800207) (xy 77.754888 45.800206) (xy 77.766929 45.767925) (xy 77.805989 45.663201) (xy 77.809591 45.629692) (xy 77.812499 45.602654) (xy 77.8125 45.602637) (xy 77.8125 43.884723) (xy 77.832185 43.817684) (xy 77.884989 43.771929) (xy 77.9365 43.760723) (xy 81.409889 43.760723) (xy 81.476928 43.780408) (xy 81.522683 43.833212) (xy 81.532627 43.90237) (xy 81.505816 43.961077) (xy 81.506835 43.961871) (xy 81.503681 43.965922) (xy 81.463222 44.02785) (xy 81.461166 44.030806) (xy 81.415287 44.092839) (xy 81.415286 44.09284) (xy 81.398333 44.126463) (xy 81.394875 44.132463) (xy 81.376015 44.161332) (xy 81.344978 44.232089) (xy 81.343564 44.23509) (xy 81.341165 44.23985) (xy 81.307342 44.306933) (xy 81.307341 44.306934) (xy 81.29728 44.339786) (xy 81.294775 44.346537) (xy 81.282249 44.375094) (xy 81.282249 44.375095) (xy 81.262469 44.453203) (xy 81.261649 44.456137) (xy 81.237137 44.536178) (xy 81.237135 44.53619) (xy 81.233191 44.566986) (xy 81.231795 44.574335) (xy 81.22495 44.601367) (xy 81.224948 44.601379) (xy 81.217909 44.686327) (xy 81.206682 44.774003) (xy 81.206681 44.774004) (xy 81.207859 44.801731) (xy 81.207703 44.809485) (xy 81.205673 44.833995) (xy 81.205673 44.834) (xy 81.209559 44.880904) (xy 81.212971 44.922083) (xy 81.216856 45.013543) (xy 81.216857 45.013552) (xy 81.22201 45.037461) (xy 81.22319 45.04541) (xy 81.224947 45.066617) (xy 81.224949 45.066629) (xy 81.247417 45.155353) (xy 81.26737 45.247935) (xy 81.275257 45.267561) (xy 81.277834 45.275466) (xy 81.282251 45.292907) (xy 81.320285 45.379616) (xy 81.356767 45.470404) (xy 81.366129 45.485608) (xy 81.370117 45.49322) (xy 81.376015 45.506668) (xy 81.429524 45.58857) (xy 81.482473 45.674565) (xy 81.48248 45.674574) (xy 81.489158 45.682161) (xy 81.499886 45.696267) (xy 81.503686 45.702083) (xy 81.572079 45.776377) (xy 81.593049 45.800204) (xy 81.640882 45.854552) (xy 81.640883 45.854553) (xy 81.64607 45.858741) (xy 81.659407 45.87124) (xy 81.661783 45.873822) (xy 81.713116 45.913775) (xy 81.743948 45.937772) (xy 81.791031 45.975789) (xy 81.827421 46.005173) (xy 81.827422 46.005173) (xy 81.827424 46.005175) (xy 81.830165 46.006706) (xy 81.83024 46.006748) (xy 81.845934 46.017152) (xy 81.845979 46.017187) (xy 81.845991 46.017195) (xy 81.90349 46.048311) (xy 81.940346 46.068256) (xy 82.03674 46.122105) (xy 82.036745 46.122106) (xy 82.036749 46.122109) (xy 82.03914 46.12319) (xy 82.046477 46.126448) (xy 82.046575 46.126226) (xy 82.051262 46.128281) (xy 82.051273 46.128287) (xy 82.15574 46.164151) (xy 82.262806 46.20198) (xy 82.263367 46.202076) (xy 82.268109 46.203081) (xy 82.272043 46.204078) (xy 82.272049 46.20408) (xy 82.384095 46.222777) (xy 82.49911 46.242499) (xy 82.499119 46.2425) (xy 82.735707 46.2425) (xy 82.735712 46.2425) (xy 82.768648 46.237003) (xy 82.792475 46.233028) (xy 82.797413 46.232406) (xy 82.850941 46.227851) (xy 82.857887 46.22726) (xy 82.857888 46.227259) (xy 82.857898 46.227259) (xy 82.910297 46.213614) (xy 82.915668 46.212469) (xy 82.965951 46.20408) (xy 83.023502 46.184322) (xy 83.027975 46.182973) (xy 83.089924 46.166844) (xy 83.136259 46.145898) (xy 83.141633 46.143767) (xy 83.186727 46.128287) (xy 83.243132 46.097761) (xy 83.247054 46.095816) (xy 83.308402 46.068086) (xy 83.347795 46.041459) (xy 83.352979 46.038314) (xy 83.392008 46.017195) (xy 83.392012 46.017193) (xy 83.392013 46.017192) (xy 83.392017 46.01719) (xy 83.445228 45.975772) (xy 83.448561 45.973353) (xy 83.507047 45.933825) (xy 83.539001 45.903198) (xy 83.543789 45.899058) (xy 83.57622 45.873818) (xy 83.624119 45.821784) (xy 83.626794 45.819056) (xy 83.680144 45.767925) (xy 83.704497 45.734996) (xy 83.708727 45.729877) (xy 83.734309 45.702088) (xy 83.734314 45.702083) (xy 83.774785 45.640135) (xy 83.776835 45.637189) (xy 83.781158 45.631344) (xy 83.822715 45.575157) (xy 83.839676 45.541514) (xy 83.843114 45.535549) (xy 83.861984 45.506669) (xy 83.893042 45.435861) (xy 83.894413 45.43295) (xy 83.930657 45.361067) (xy 83.940721 45.3282) (xy 83.943221 45.321466) (xy 83.955749 45.292907) (xy 83.975535 45.21477) (xy 83.976334 45.211909) (xy 84.000864 45.131815) (xy 84.00481 45.100994) (xy 84.006198 45.093684) (xy 84.013051 45.066626) (xy 84.02009 44.981672) (xy 84.031318 44.893995) (xy 84.030139 44.866249) (xy 84.030294 44.858525) (xy 84.032327 44.834) (xy 84.031901 44.828862) (xy 84.025028 44.745916) (xy 84.021144 44.65446) (xy 84.021143 44.654457) (xy 84.021143 44.654449) (xy 84.015987 44.63053) (xy 84.014808 44.622586) (xy 84.014734 44.621694) (xy 84.013051 44.601374) (xy 83.990582 44.512646) (xy 83.97063 44.420068) (xy 83.962735 44.400424) (xy 83.960167 44.392544) (xy 83.955749 44.375093) (xy 83.917714 44.288383) (xy 83.881234 44.197598) (xy 83.881233 44.197596) (xy 83.871867 44.182386) (xy 83.867882 44.174778) (xy 83.867102 44.173) (xy 83.861984 44.161331) (xy 83.808475 44.079429) (xy 83.755524 43.993431) (xy 83.755518 43.993424) (xy 83.755515 43.99342) (xy 83.748839 43.985834) (xy 83.738118 43.971739) (xy 83.734315 43.965919) (xy 83.734314 43.965917) (xy 83.73431 43.965913) (xy 83.73116 43.961865) (xy 83.732856 43.960544) (xy 83.705961 43.906062) (xy 83.713815 43.836636) (xy 83.757957 43.782476) (xy 83.824373 43.760779) (xy 83.828111 43.760723) (xy 86.859889 43.760723) (xy 86.926928 43.780408) (xy 86.972683 43.833212) (xy 86.982627 43.90237) (xy 86.955816 43.961077) (xy 86.956835 43.961871) (xy 86.953681 43.965922) (xy 86.913222 44.02785) (xy 86.911166 44.030806) (xy 86.865287 44.092839) (xy 86.865286 44.09284) (xy 86.848333 44.126463) (xy 86.844875 44.132463) (xy 86.826015 44.161332) (xy 86.794978 44.232089) (xy 86.793564 44.23509) (xy 86.791165 44.23985) (xy 86.757342 44.306933) (xy 86.757341 44.306934) (xy 86.74728 44.339786) (xy 86.744775 44.346537) (xy 86.732249 44.375094) (xy 86.732249 44.375095) (xy 86.712469 44.453203) (xy 86.711649 44.456137) (xy 86.687137 44.536178) (xy 86.687135 44.53619) (xy 86.683191 44.566986) (xy 86.681795 44.574335) (xy 86.67495 44.601367) (xy 86.674948 44.601379) (xy 86.667909 44.686327) (xy 86.656682 44.774003) (xy 86.656681 44.774004) (xy 86.657859 44.801731) (xy 86.657703 44.809485) (xy 86.655673 44.833995) (xy 86.655673 44.834) (xy 86.659559 44.880904) (xy 86.662971 44.922083) (xy 86.666856 45.013543) (xy 86.666857 45.013552) (xy 86.67201 45.037461) (xy 86.67319 45.04541) (xy 86.674947 45.066617) (xy 86.674949 45.066629) (xy 86.697417 45.155353) (xy 86.71737 45.247935) (xy 86.725257 45.267561) (xy 86.727834 45.275466) (xy 86.732251 45.292907) (xy 86.770285 45.379616) (xy 86.806767 45.470404) (xy 86.816129 45.485608) (xy 86.820117 45.49322) (xy 86.826015 45.506668) (xy 86.879524 45.58857) (xy 86.932473 45.674565) (xy 86.93248 45.674574) (xy 86.939158 45.682161) (xy 86.949886 45.696267) (xy 86.953686 45.702083) (xy 87.022079 45.776377) (xy 87.043049 45.800204) (xy 87.090882 45.854552) (xy 87.090883 45.854553) (xy 87.09607 45.858741) (xy 87.109407 45.87124) (xy 87.111783 45.873822) (xy 87.163116 45.913775) (xy 87.193948 45.937772) (xy 87.241031 45.975789) (xy 87.277421 46.005173) (xy 87.277422 46.005173) (xy 87.277424 46.005175) (xy 87.280165 46.006706) (xy 87.28024 46.006748) (xy 87.295934 46.017152) (xy 87.295979 46.017187) (xy 87.295991 46.017195) (xy 87.35349 46.048311) (xy 87.390346 46.068256) (xy 87.48674 46.122105) (xy 87.486745 46.122106) (xy 87.486749 46.122109) (xy 87.48914 46.12319) (xy 87.496477 46.126448) (xy 87.496575 46.126226) (xy 87.501262 46.128281) (xy 87.501273 46.128287) (xy 87.60574 46.164151) (xy 87.712806 46.20198) (xy 87.713367 46.202076) (xy 87.718109 46.203081) (xy 87.722043 46.204078) (xy 87.722049 46.20408) (xy 87.834095 46.222777) (xy 87.94911 46.242499) (xy 87.949119 46.2425) (xy 88.185707 46.2425) (xy 88.185712 46.2425) (xy 88.218648 46.237003) (xy 88.242475 46.233028) (xy 88.247413 46.232406) (xy 88.300941 46.227851) (xy 88.307887 46.22726) (xy 88.307888 46.227259) (xy 88.307898 46.227259) (xy 88.360297 46.213614) (xy 88.365668 46.212469) (xy 88.415951 46.20408) (xy 88.473502 46.184322) (xy 88.477975 46.182973) (xy 88.539924 46.166844) (xy 88.586259 46.145898) (xy 88.591633 46.143767) (xy 88.636727 46.128287) (xy 88.693132 46.097761) (xy 88.697054 46.095816) (xy 88.758402 46.068086) (xy 88.797795 46.041459) (xy 88.802979 46.038314) (xy 88.842008 46.017195) (xy 88.842012 46.017193) (xy 88.842013 46.017192) (xy 88.842017 46.01719) (xy 88.895228 45.975772) (xy 88.898561 45.973353) (xy 88.957047 45.933825) (xy 88.989001 45.903198) (xy 88.993789 45.899058) (xy 89.02622 45.873818) (xy 89.074119 45.821784) (xy 89.076794 45.819056) (xy 89.130144 45.767925) (xy 89.154497 45.734996) (xy 89.158727 45.729877) (xy 89.184309 45.702088) (xy 89.184314 45.702083) (xy 89.224785 45.640135) (xy 89.226835 45.637189) (xy 89.231158 45.631344) (xy 89.272715 45.575157) (xy 89.289676 45.541514) (xy 89.293114 45.535549) (xy 89.311984 45.506669) (xy 89.343042 45.435861) (xy 89.344413 45.43295) (xy 89.380657 45.361067) (xy 89.390721 45.3282) (xy 89.393221 45.321466) (xy 89.405749 45.292907) (xy 89.425535 45.21477) (xy 89.426334 45.211909) (xy 89.450864 45.131815) (xy 89.45481 45.100994) (xy 89.456198 45.093684) (xy 89.463051 45.066626) (xy 89.47009 44.981672) (xy 89.481318 44.893995) (xy 89.480139 44.866249) (xy 89.480294 44.858525) (xy 89.482327 44.834) (xy 89.481901 44.828862) (xy 89.475028 44.745916) (xy 89.471144 44.65446) (xy 89.471143 44.654457) (xy 89.471143 44.654449) (xy 89.465987 44.63053) (xy 89.464808 44.622586) (xy 89.464734 44.621694) (xy 89.463051 44.601374) (xy 89.440582 44.512646) (xy 89.42063 44.420068) (xy 89.412735 44.400424) (xy 89.410167 44.392544) (xy 89.405749 44.375093) (xy 89.367714 44.288383) (xy 89.331234 44.197598) (xy 89.331233 44.197596) (xy 89.321867 44.182386) (xy 89.317882 44.174778) (xy 89.317102 44.173) (xy 89.311984 44.161331) (xy 89.258475 44.079429) (xy 89.205524 43.993431) (xy 89.205518 43.993424) (xy 89.205515 43.99342) (xy 89.198839 43.985834) (xy 89.188118 43.971739) (xy 89.184315 43.965919) (xy 89.184314 43.965917) (xy 89.18431 43.965913) (xy 89.18116 43.961865) (xy 89.182856 43.960544) (xy 89.155961 43.906062) (xy 89.163815 43.836636) (xy 89.207957 43.782476) (xy 89.274373 43.760779) (xy 89.278111 43.760723) (xy 92.122796 43.760723) (xy 92.189835 43.780408) (xy 92.23559 43.833212) (xy 92.245534 43.90237) (xy 92.216509 43.965926) (xy 92.161801 44.002429) (xy 92.133257 44.011887) (xy 92.12672 44.014936) (xy 92.1267 44.014894) (xy 92.119696 44.018285) (xy 92.119717 44.018326) (xy 92.113269 44.021564) (xy 92.048394 44.064233) (xy 91.982352 44.104967) (xy 91.976683 44.10945) (xy 91.976653 44.109413) (xy 91.970627 44.114322) (xy 91.970657 44.114357) (xy 91.965132 44.118993) (xy 91.965126 44.118998) (xy 91.965126 44.118999) (xy 91.933177 44.152862) (xy 91.911836 44.175482) (xy 90.949122 45.138195) (xy 90.935495 45.149973) (xy 90.915941 45.164531) (xy 90.881977 45.205006) (xy 90.87833 45.208987) (xy 90.872418 45.2149) (xy 90.851863 45.240896) (xy 90.801967 45.30036) (xy 90.798001 45.306391) (xy 90.797963 45.306366) (xy 90.793782 45.312928) (xy 90.793821 45.312952) (xy 90.790032 45.319094) (xy 90.75722 45.389459) (xy 90.722391 45.45881) (xy 90.719923 45.465593) (xy 90.719878 45.465576) (xy 90.717322 45.472932) (xy 90.717366 45.472947) (xy 90.715096 45.479795) (xy 90.707244 45.517822) (xy 90.699392 45.55585) (xy 90.688304 45.602637) (xy 90.681498 45.631351) (xy 90.680661 45.638519) (xy 90.680613 45.638513) (xy 90.679823 45.646244) (xy 90.67987 45.646249) (xy 90.67924 45.653438) (xy 90.6815 45.731079) (xy 90.6815 95.693706) (xy 90.680191 95.711676) (xy 90.676658 95.735791) (xy 90.681264 95.78842) (xy 90.6815 95.793827) (xy 90.6815 95.802178) (xy 90.685347 95.835096) (xy 90.692112 95.912427) (xy 90.693572 95.919494) (xy 90.693526 95.919503) (xy 90.695209 95.927094) (xy 90.695254 95.927084) (xy 90.696919 95.93411) (xy 90.723473 96.007065) (xy 90.726599 96.0165) (xy 90.747886 96.080737) (xy 90.75094 96.087286) (xy 90.750896 96.087306) (xy 90.754284 96.094304) (xy 90.754327 96.094283) (xy 90.757563 96.100728) (xy 90.757565 96.100732) (xy 90.800233 96.165605) (xy 90.84097 96.231651) (xy 90.840972 96.231653) (xy 90.845451 96.237318) (xy 90.845413 96.237347) (xy 90.85032 96.243372) (xy 90.850357 96.243342) (xy 90.855002 96.248878) (xy 90.911482 96.302163) (xy 92.128196 97.518877) (xy 92.139977 97.532509) (xy 92.154531 97.552058) (xy 92.184807 97.577463) (xy 92.195005 97.58602) (xy 92.198995 97.589676) (xy 92.204899 97.59558) (xy 92.230896 97.616136) (xy 92.29036 97.666032) (xy 92.290362 97.666033) (xy 92.296396 97.670002) (xy 92.296369 97.670042) (xy 92.302921 97.674216) (xy 92.302947 97.674175) (xy 92.309099 97.67797) (xy 92.379447 97.710773) (xy 92.448812 97.745609) (xy 92.448813 97.745609) (xy 92.448815 97.74561) (xy 92.455594 97.748077) (xy 92.455577 97.748122) (xy 92.462925 97.750676) (xy 92.462941 97.750631) (xy 92.46979 97.752901) (xy 92.469793 97.752901) (xy 92.469794 97.752902) (xy 92.545818 97.768599) (xy 92.621344 97.7865) (xy 92.621345 97.7865) (xy 92.621349 97.786501) (xy 92.628517 97.787339) (xy 92.628511 97.787386) (xy 92.636242 97.788176) (xy 92.636247 97.788129) (xy 92.643437 97.788758) (xy 92.643441 97.788757) (xy 92.643442 97.788758) (xy 92.721045 97.7865) (xy 96.662457 97.7865) (xy 96.729496 97.806185) (xy 96.750138 97.822819) (xy 97.503181 98.575862) (xy 97.536666 98.637185) (xy 97.5395 98.663543) (xy 97.5395 106.060457) (xy 97.519815 106.127496) (xy 97.503181 106.148138) (xy 97.004138 106.647181) (xy 96.942815 106.680666) (xy 96.916457 106.6835) (xy 82.661543 106.6835) (xy 82.594504 106.663815) (xy 82.573862 106.647181) (xy 81.876819 105.950138) (xy 81.843334 105.888815) (xy 81.8405 105.862457) (xy 81.8405 104.284001) (xy 89.146891 104.284001) (xy 89.1673 104.569362) (xy 89.228109 104.848895) (xy 89.328091 105.116958) (xy 89.465191 105.368038) (xy 89.465196 105.368046) (xy 89.571882 105.510561) (xy 89.571883 105.510562) (xy 90.181438 104.901006) (xy 90.230348 104.979999) (xy 90.373931 105.137501) (xy 90.532388 105.257163) (xy 89.925436 105.864115) (xy 90.06796 105.970807) (xy 90.067961 105.970808) (xy 90.319042 106.107908) (xy 90.319041 106.107908) (xy 90.587104 106.20789) (xy 90.866637 106.268699) (xy 91.151999 106.289109) (xy 91.152001 106.289109) (xy 91.437362 106.268699) (xy 91.716895 106.20789) (xy 91.984958 106.107908) (xy 92.236047 105.970803) (xy 92.378561 105.864116) (xy 92.378562 105.864115) (xy 91.771611 105.257163) (xy 91.930069 105.137501) (xy 92.073652 104.979999) (xy 92.12256 104.901007) (xy 92.732115 105.510562) (xy 92.732116 105.510561) (xy 92.838803 105.368047) (xy 92.975908 105.116958) (xy 93.07589 104.848895) (xy 93.136699 104.569362) (xy 93.157109 104.284001) (xy 93.157109 104.283998) (xy 93.136925 104.001797) (xy 93.142204 103.977525) (xy 93.130373 103.962232) (xy 93.124687 103.943419) (xy 93.07589 103.719104) (xy 92.975908 103.451041) (xy 92.838808 103.199961) (xy 92.838807 103.19996) (xy 92.732115 103.057436) (xy 92.12256 103.666991) (xy 92.073652 103.588001) (xy 91.930069 103.430499) (xy 91.77161 103.310835) (xy 92.378562 102.703883) (xy 92.378561 102.703882) (xy 92.236046 102.597196) (xy 92.236038 102.597191) (xy 91.984957 102.460091) (xy 91.984958 102.460091) (xy 91.716895 102.360109) (xy 91.437362 102.2993) (xy 91.152001 102.278891) (xy 91.151999 102.278891) (xy 90.866637 102.2993) (xy 90.587104 102.360109) (xy 90.319041 102.460091) (xy 90.067961 102.597191) (xy 90.067953 102.597196) (xy 89.925437 102.703882) (xy 89.925436 102.703883) (xy 90.532389 103.310835) (xy 90.373931 103.430499) (xy 90.230348 103.588001) (xy 90.181439 103.666992) (xy 89.571883 103.057436) (xy 89.571882 103.057437) (xy 89.465196 103.199953) (xy 89.465191 103.199961) (xy 89.328091 103.451041) (xy 89.228109 103.719104) (xy 89.1673 103.998637) (xy 89.146891 104.283998) (xy 89.146891 104.284001) (xy 81.8405 104.284001) (xy 81.8405 102.953574) (xy 81.860185 102.886535) (xy 81.912989 102.84078) (xy 81.951245 102.830285) (xy 81.991201 102.825989) (xy 81.991204 102.825988) (xy 82.006086 102.820437) (xy 82.128204 102.774889) (xy 82.245261 102.687261) (xy 82.332889 102.570204) (xy 82.354125 102.513268) (xy 82.372717 102.463424) (xy 82.414588 102.40749) (xy 82.480053 102.383074) (xy 82.548326 102.397926) (xy 82.576579 102.419077) (xy 82.7377 102.580198) (xy 82.925251 102.711523) (xy 83.050091 102.769736) (xy 83.13275 102.808281) (xy 83.132752 102.808281) (xy 83.132757 102.808284) (xy 83.353913 102.867543) (xy 83.516832 102.881796) (xy 83.581998 102.887498) (xy 83.582 102.887498) (xy 83.582002 102.887498) (xy 83.639021 102.882509) (xy 83.810087 102.867543) (xy 84.031243 102.808284) (xy 84.238749 102.711523) (xy 84.4263 102.580198) (xy 84.494319 102.512179) (xy 84.555642 102.478694) (xy 84.625334 102.483678) (xy 84.669681 102.512179) (xy 84.7377 102.580198) (xy 84.925251 102.711523) (xy 85.050091 102.769736) (xy 85.13275 102.808281) (xy 85.132752 102.808281) (xy 85.132757 102.808284) (xy 85.353913 102.867543) (xy 85.516832 102.881796) (xy 85.581998 102.887498) (xy 85.582 102.887498) (xy 85.582002 102.887498) (xy 85.639021 102.882509) (xy 85.810087 102.867543) (xy 86.031243 102.808284) (xy 86.238749 102.711523) (xy 86.4263 102.580198) (xy 86.588198 102.4183) (xy 86.719523 102.230749) (xy 86.724307 102.220487) (xy 86.770476 102.168051) (xy 86.837669 102.148897) (xy 86.904551 102.169111) (xy 86.949072 102.22049) (xy 86.951866 102.226483) (xy 87.002973 102.299471) (xy 87.002974 102.299472) (xy 87.619064 101.683381) (xy 87.645481 101.773351) (xy 87.719327 101.888258) (xy 87.822555 101.977705) (xy 87.946801 102.034446) (xy 87.971548 102.038004) (xy 87.356526 102.653025) (xy 87.356526 102.653026) (xy 87.429512 102.704131) (xy 87.429516 102.704133) (xy 87.635673 102.800265) (xy 87.635682 102.800269) (xy 87.855389 102.859139) (xy 87.8554 102.859141) (xy 88.081998 102.878966) (xy 88.082002 102.878966) (xy 88.308599 102.859141) (xy 88.30861 102.859139) (xy 88.528317 102.800269) (xy 88.528331 102.800264) (xy 88.734478 102.704136) (xy 88.807472 102.653025) (xy 88.192451 102.038004) (xy 88.217199 102.034446) (xy 88.341445 101.977705) (xy 88.444673 101.888258) (xy 88.518519 101.773351) (xy 88.544935 101.683382) (xy 89.161025 102.299472) (xy 89.212136 102.226478) (xy 89.308264 102.020331) (xy 89.308269 102.020317) (xy 89.367139 101.80061) (xy 89.367141 101.8006) (xy 89.383785 101.61035) (xy 89.409237 101.545281) (xy 89.465828 101.504303) (xy 89.53559 101.500424) (xy 89.559711 101.508772) (xy 89.585447 101.520773) (xy 89.654812 101.555609) (xy 89.654813 101.555609) (xy 89.654815 101.55561) (xy 89.661594 101.558077) (xy 89.661577 101.558122) (xy 89.668925 101.560676) (xy 89.668941 101.560631) (xy 89.67579 101.562901) (xy 89.675793 101.562901) (xy 89.675794 101.562902) (xy 89.751818 101.578599) (xy 89.827344 101.5965) (xy 89.827345 101.5965) (xy 89.827349 101.596501) (xy 89.834517 101.597339) (xy 89.834511 101.597386) (xy 89.842242 101.598176) (xy 89.842247 101.598129) (xy 89.849437 101.598758) (xy 89.849441 101.598757) (xy 89.849442 101.598758) (xy 89.927045 101.5965) (xy 93.106457 101.5965) (xy 93.173496 101.616185) (xy 93.194138 101.632819) (xy 93.324122 101.762803) (xy 93.357607 101.824126) (xy 93.360441 101.850484) (xy 93.360441 103.706647) (xy 93.359132 103.724617) (xy 93.355599 103.748732) (xy 93.360205 103.801361) (xy 93.360441 103.806768) (xy 93.360441 103.815119) (xy 93.364288 103.848038) (xy 93.369381 103.906254) (xy 93.364078 103.932635) (xy 93.376791 103.949617) (xy 93.377131 103.950541) (xy 93.402414 104.020006) (xy 93.426827 104.093678) (xy 93.429881 104.100227) (xy 93.429837 104.100247) (xy 93.433225 104.107245) (xy 93.433268 104.107224) (xy 93.436509 104.113678) (xy 93.478444 104.177437) (xy 93.479174 104.178546) (xy 93.519911 104.244592) (xy 93.519913 104.244594) (xy 93.524392 104.250259) (xy 93.524354 104.250288) (xy 93.529261 104.256313) (xy 93.529298 104.256283) (xy 93.533943 104.261819) (xy 93.590423 104.315104) (xy 94.28609 105.010771) (xy 94.319575 105.072094) (xy 94.321985 105.08821) (xy 94.322971 105.100117) (xy 94.322973 105.100128) (xy 94.37824 105.318371) (xy 94.468677 105.524549) (xy 94.591813 105.713022) (xy 94.591821 105.713033) (xy 94.744293 105.878659) (xy 94.744298 105.878664) (xy 94.75734 105.888815) (xy 94.921961 106.016946) (xy 94.921962 106.016946) (xy 94.921964 106.016948) (xy 95.048672 106.085518) (xy 95.119963 106.124099) (xy 95.332902 106.197201) (xy 95.554968 106.234257) (xy 95.780106 106.234257) (xy 96.002172 106.197201) (xy 96.215111 106.124099) (xy 96.413113 106.016946) (xy 96.590777 105.878663) (xy 96.743259 105.713025) (xy 96.866397 105.524548) (xy 96.956833 105.318373) (xy 97.012101 105.100125) (xy 97.012102 105.100116) (xy 97.030693 104.875762) (xy 97.030693 104.875751) (xy 97.012102 104.651397) (xy 97.0121 104.651385) (xy 96.956833 104.433142) (xy 96.938156 104.390563) (xy 96.866397 104.226966) (xy 96.743259 104.038489) (xy 96.743256 104.038486) (xy 96.743252 104.03848) (xy 96.59078 103.872854) (xy 96.590775 103.872849) (xy 96.413114 103.734569) (xy 96.413114 103.734568) (xy 96.36984 103.71115) (xy 96.32025 103.66193) (xy 96.305142 103.593714) (xy 96.329312 103.528158) (xy 96.357735 103.50052) (xy 96.538616 103.373865) (xy 96.705642 103.206839) (xy 96.841137 103.013335) (xy 96.940966 102.799249) (xy 96.940969 102.799243) (xy 96.998173 102.585757) (xy 96.101223 102.585757) (xy 96.12703 102.545601) (xy 96.167537 102.407646) (xy 96.167537 102.263868) (xy 96.12703 102.125913) (xy 96.101223 102.085757) (xy 96.998173 102.085757) (xy 96.998172 102.085756) (xy 96.940969 101.87227) (xy 96.940966 101.872264) (xy 96.841137 101.658179) (xy 96.841136 101.658177) (xy 96.70565 101.464683) (xy 96.705645 101.464677) (xy 96.589809 101.348841) (xy 96.556324 101.287518) (xy 96.561308 101.217826) (xy 96.60318 101.161893) (xy 96.634149 101.144981) (xy 96.763741 101.096646) (xy 96.880798 101.009018) (xy 96.968426 100.891961) (xy 97.019526 100.754958) (xy 97.023128 100.721449) (xy 97.026036 100.694411) (xy 97.026037 100.694394) (xy 97.026037 98.897119) (xy 97.026036 98.897102) (xy 97.022694 98.866027) (xy 97.019526 98.836556) (xy 96.968426 98.699553) (xy 96.880798 98.582496) (xy 96.763741 98.494868) (xy 96.62674 98.443768) (xy 96.566191 98.437257) (xy 96.566175 98.437257) (xy 94.768899 98.437257) (xy 94.768882 98.437257) (xy 94.708334 98.443768) (xy 94.708332 98.443768) (xy 94.571332 98.494868) (xy 94.454276 98.582496) (xy 94.366648 98.699552) (xy 94.315548 98.836552) (xy 94.315548 98.836554) (xy 94.309037 98.897102) (xy 94.309037 98.9545) (xy 94.289352 99.021539) (xy 94.236548 99.067294) (xy 94.185037 99.0785) (xy 92.328543 99.0785) (xy 92.261504 99.058815) (xy 92.240862 99.042181) (xy 91.767804 98.569123) (xy 91.756022 98.55549) (xy 91.741472 98.535946) (xy 91.741471 98.535945) (xy 91.741469 98.535942) (xy 91.740595 98.535208) (xy 91.700987 98.501972) (xy 91.696998 98.498317) (xy 91.691102 98.492421) (xy 91.691101 98.49242) (xy 91.665103 98.471863) (xy 91.60564 98.421968) (xy 91.605635 98.421965) (xy 91.599605 98.417999) (xy 91.59963 98.417959) (xy 91.593069 98.413779) (xy 91.593045 98.41382) (xy 91.586904 98.410031) (xy 91.51654 98.37722) (xy 91.447185 98.342389) (xy 91.440401 98.33992) (xy 91.440416 98.339876) (xy 91.433071 98.337322) (xy 91.433057 98.337367) (xy 91.426205 98.335096) (xy 91.388177 98.327244) (xy 91.350149 98.319392) (xy 91.274656 98.3015) (xy 91.274654 98.3015) (xy 91.274646 98.301498) (xy 91.267482 98.300661) (xy 91.267487 98.300612) (xy 91.259757 98.299822) (xy 91.259753 98.29987) (xy 91.252562 98.29924) (xy 91.17492 98.3015) (xy 90.027543 98.3015) (xy 89.960504 98.281815) (xy 89.939862 98.265181) (xy 88.678819 97.004138) (xy 88.645334 96.942815) (xy 88.6425 96.916457) (xy 88.6425 96.0165) (xy 88.662185 95.949461) (xy 88.714989 95.903706) (xy 88.7665 95.8925) (xy 88.782638 95.8925) (xy 88.782654 95.892499) (xy 88.809692 95.889591) (xy 88.843201 95.885989) (xy 88.980204 95.834889) (xy 89.097261 95.747261) (xy 89.184889 95.630204) (xy 89.235989 95.493201) (xy 89.241298 95.443819) (xy 89.242499 95.432654) (xy 89.2425 95.432637) (xy 89.2425 91.835362) (xy 89.242499 91.835345) (xy 89.239157 91.80427) (xy 89.235989 91.774799) (xy 89.233569 91.768311) (xy 89.202553 91.685154) (xy 89.184889 91.637796) (xy 89.097261 91.520739) (xy 88.980204 91.433111) (xy 88.843203 91.382011) (xy 88.782654 91.3755) (xy 88.782638 91.3755) (xy 86.985362 91.3755) (xy 86.985345 91.3755) (xy 86.924797 91.382011) (xy 86.924795 91.382011) (xy 86.787793 91.433111) (xy 86.787793 91.433112) (xy 86.681218 91.512893) (xy 86.615754 91.53731) (xy 86.547481 91.522458) (xy 86.532597 91.512893) (xy 86.436088 91.440646) (xy 86.436086 91.440645) (xy 86.301379 91.390403) (xy 86.301372 91.390401) (xy 86.241844 91.384) (xy 85.594 91.384) (xy 85.594 93.76) (xy 85.574315 93.827039) (xy 85.521511 93.872794) (xy 85.47 93.884) (xy 85.218 93.884) (xy 85.150961 93.864315) (xy 85.105206 93.811511) (xy 85.094 93.76) (xy 85.094 91.384) (xy 84.446155 91.384) (xy 84.386627 91.390401) (xy 84.38662 91.390403) (xy 84.251913 91.440645) (xy 84.25191 91.440647) (xy 84.155402 91.512893) (xy 84.089937 91.53731) (xy 84.021664 91.522458) (xy 84.00678 91.512893) (xy 83.900204 91.433111) (xy 83.763203 91.382011) (xy 83.702654 91.3755) (xy 83.702638 91.3755) (xy 81.905362 91.3755) (xy 81.905345 91.3755) (xy 81.844797 91.382011) (xy 81.844795 91.382011) (xy 81.707795 91.433111) (xy 81.590739 91.520739) (xy 81.503111 91.637795) (xy 81.452011 91.774795) (xy 81.452011 91.774797) (xy 81.4455 91.835345) (xy 81.4455 95.432654) (xy 81.452011 95.493202) (xy 81.452011 95.493204) (xy 81.503111 95.630204) (xy 81.590739 95.747261) (xy 81.707796 95.834889) (xy 81.844799 95.885989) (xy 81.87205 95.888918) (xy 81.905345 95.892499) (xy 81.905362 95.8925) (xy 82.216456 95.8925) (xy 82.283495 95.912185) (xy 82.304137 95.928819) (xy 83.259196 96.883877) (xy 83.270977 96.897509) (xy 83.285531 96.917058) (xy 83.315807 96.942463) (xy 83.326005 96.95102) (xy 83.329995 96.954676) (xy 83.335899 96.96058) (xy 83.361896 96.981136) (xy 83.42136 97.031032) (xy 83.421362 97.031033) (xy 83.427396 97.035002) (xy 83.427369 97.035042) (xy 83.433917 97.039214) (xy 83.433943 97.039173) (xy 83.44009 97.042964) (xy 83.440094 97.042967) (xy 83.510453 97.075775) (xy 83.579812 97.110609) (xy 83.579814 97.11061) (xy 83.586595 97.113078) (xy 83.586578 97.113123) (xy 83.593916 97.115674) (xy 83.593932 97.115629) (xy 83.600788 97.1179) (xy 83.600789 97.1179) (xy 83.600793 97.117902) (xy 83.676822 97.1336) (xy 83.752344 97.1515) (xy 83.752346 97.1515) (xy 83.759517 97.152339) (xy 83.759511 97.152386) (xy 83.767242 97.153176) (xy 83.767247 97.153129) (xy 83.774437 97.153758) (xy 83.774441 97.153757) (xy 83.774442 97.153758) (xy 83.852045 97.1515) (xy 85.105457 97.1515) (xy 85.172496 97.171185) (xy 85.193138 97.187819) (xy 88.070845 100.065526) (xy 88.10433 100.126849) (xy 88.099346 100.196541) (xy 88.057474 100.252474) (xy 87.993972 100.276735) (xy 87.855399 100.288858) (xy 87.855389 100.28886) (xy 87.635682 100.34773) (xy 87.635673 100.347734) (xy 87.429513 100.443868) (xy 87.356526 100.494973) (xy 87.971548 101.109995) (xy 87.946801 101.113554) (xy 87.822555 101.170295) (xy 87.719327 101.259742) (xy 87.645481 101.374649) (xy 87.619064 101.464617) (xy 87.002973 100.848526) (xy 87.002972 100.848527) (xy 86.951867 100.921513) (xy 86.94907 100.927513) (xy 86.902897 100.979951) (xy 86.835703 100.999102) (xy 86.768822 100.978885) (xy 86.724307 100.927511) (xy 86.72151 100.921513) (xy 86.719523 100.917251) (xy 86.588198 100.7297) (xy 86.4263 100.567802) (xy 86.238749 100.436477) (xy 86.238745 100.436475) (xy 86.031249 100.339718) (xy 86.031238 100.339714) (xy 85.810089 100.280457) (xy 85.810081 100.280456) (xy 85.582002 100.260502) (xy 85.581997 100.260502) (xy 85.418156 100.274835) (xy 85.349657 100.261068) (xy 85.319669 100.238988) (xy 84.665804 99.585123) (xy 84.654022 99.57149) (xy 84.639472 99.551946) (xy 84.639471 99.551945) (xy 84.639469 99.551942) (xy 84.638595 99.551208) (xy 84.598987 99.517972) (xy 84.594998 99.514317) (xy 84.589102 99.508421) (xy 84.589101 99.50842) (xy 84.563103 99.487863) (xy 84.50364 99.437968) (xy 84.503635 99.437965) (xy 84.497605 99.433999) (xy 84.49763 99.433959) (xy 84.491069 99.429779) (xy 84.491045 99.42982) (xy 84.484904 99.426031) (xy 84.41454 99.39322) (xy 84.345185 99.358389) (xy 84.338401 99.35592) (xy 84.338416 99.355876) (xy 84.331071 99.353322) (xy 84.331057 99.353367) (xy 84.324205 99.351096) (xy 84.286177 99.343244) (xy 84.248149 99.335392) (xy 84.172656 99.3175) (xy 84.172654 99.3175) (xy 84.172646 99.317498) (xy 84.165482 99.316661) (xy 84.165487 99.316612) (xy 84.157757 99.315822) (xy 84.157753 99.31587) (xy 84.150562 99.31524) (xy 84.07292 99.3175) (xy 83.751287 99.3175) (xy 83.684248 99.297815) (xy 83.663606 99.281181) (xy 78.589913 94.207488) (xy 78.556428 94.146165) (xy 78.553594 94.119807) (xy 78.553594 91.575387) (xy 78.554903 91.557416) (xy 78.557848 91.53731) (xy 78.558435 91.533305) (xy 78.553829 91.480667) (xy 78.553594 91.475265) (xy 78.553594 91.466918) (xy 78.553593 91.466907) (xy 78.549746 91.433998) (xy 78.545198 91.382011) (xy 78.542981 91.356667) (xy 78.542979 91.356662) (xy 78.541521 91.349598) (xy 78.541569 91.349587) (xy 78.539888 91.342003) (xy 78.53984 91.342015) (xy 78.538173 91.334987) (xy 78.538173 91.334981) (xy 78.511622 91.262032) (xy 78.487208 91.188356) (xy 78.487205 91.188352) (xy 78.484155 91.181809) (xy 78.484199 91.181788) (xy 78.480811 91.174789) (xy 78.480768 91.174811) (xy 78.47753 91.168363) (xy 78.43486 91.103488) (xy 78.394124 91.037443) (xy 78.389647 91.031781) (xy 78.389684 91.03175) (xy 78.384775 91.025723) (xy 78.384739 91.025754) (xy 78.380099 91.020225) (xy 78.380097 91.020223) (xy 78.380095 91.02022) (xy 78.348985 90.990869) (xy 78.323611 90.966929) (xy 77.848819 90.492137) (xy 77.815334 90.430814) (xy 77.8125 90.404456) (xy 77.8125 89.525362) (xy 77.812499 89.525345) (xy 77.809157 89.49427) (xy 77.805989 89.464799) (xy 77.754889 89.327796) (xy 77.675105 89.221218) (xy 77.650689 89.155754) (xy 77.665541 89.087481) (xy 77.675107 89.072596) (xy 77.747352 88.976089) (xy 77.747354 88.976086) (xy 77.797596 88.841379) (xy 77.797598 88.841372) (xy 77.803999 88.781844) (xy 77.804 88.781827) (xy 77.804 88.134) (xy 73.304 88.134) (xy 73.304 88.781844) (xy 73.310401 88.841372) (xy 73.310403 88.841379) (xy 73.360645 88.976086) (xy 73.360646 88.976088) (xy 73.432893 89.072597) (xy 73.45731 89.138061) (xy 73.442459 89.206334) (xy 73.432893 89.221218) (xy 73.353112 89.327793) (xy 73.353111 89.327793) (xy 73.302011 89.464795) (xy 73.302011 89.464797) (xy 73.2955 89.525345) (xy 73.2955 91.322654) (xy 73.302011 91.383202) (xy 73.302011 91.383204) (xy 73.353111 91.520204) (xy 73.427585 91.619689) (xy 73.452002 91.685154) (xy 73.43715 91.753427) (xy 73.427586 91.768308) (xy 73.422728 91.774799) (xy 73.353111 91.867795) (xy 73.302011 92.004795) (xy 73.302011 92.004797) (xy 73.2955 92.065345) (xy 73.2955 93.862654) (xy 73.302011 93.923202) (xy 73.302011 93.923204) (xy 73.353111 94.060204) (xy 73.440739 94.177261) (xy 73.557796 94.264889) (xy 73.694799 94.315989) (xy 73.72205 94.318918) (xy 73.755345 94.322499) (xy 73.755362 94.3225) (xy 75.592207 94.3225) (xy 75.659246 94.342185) (xy 75.705001 94.394989) (xy 75.708729 94.404091) (xy 75.737473 94.483065) (xy 75.761886 94.556737) (xy 75.76494 94.563286) (xy 75.764896 94.563306) (xy 75.768284 94.570304) (xy 75.768327 94.570283) (xy 75.771563 94.576728) (xy 75.771565 94.576732) (xy 75.814233 94.641605) (xy 75.85497 94.707651) (xy 75.854972 94.707653) (xy 75.859451 94.713318) (xy 75.859413 94.713347) (xy 75.86432 94.719372) (xy 75.864357 94.719342) (xy 75.869002 94.724878) (xy 75.925482 94.778163) (xy 81.251138 100.103819) (xy 81.284623 100.165142) (xy 81.279639 100.234834) (xy 81.237767 100.290767) (xy 81.172303 100.315184) (xy 81.163457 100.3155) (xy 80.233345 100.3155) (xy 80.172797 100.322011) (xy 80.172795 100.322011) (xy 80.035795 100.373111) (xy 79.918739 100.460739) (xy 79.831111 100.577795) (xy 79.780011 100.714795) (xy 79.780011 100.714797) (xy 79.7735 100.775345) (xy 79.7735 102.372654) (xy 79.780011 102.433202) (xy 79.780011 102.433204) (xy 79.821934 102.545601) (xy 79.831111 102.570204) (xy 79.918739 102.687261) (xy 80.035796 102.774889) (xy 80.103831 102.800265) (xy 80.172795 102.825988) (xy 80.172798 102.825989) (xy 80.212755 102.830285) (xy 80.277306 102.857023) (xy 80.317155 102.914415) (xy 80.3235 102.953574) (xy 80.3235 105.85626) (xy 80.311882 105.908664) (xy 80.301096 105.931793) (xy 80.301095 105.931797) (xy 80.298777 105.943021) (xy 80.292584 105.96371) (xy 80.288357 105.97435) (xy 80.288357 105.974351) (xy 80.278971 106.038425) (xy 80.278345 106.041976) (xy 80.265242 106.105432) (xy 80.265241 106.105441) (xy 80.265574 106.116898) (xy 80.264317 106.138466) (xy 80.262659 106.149785) (xy 80.262658 106.149793) (xy 80.268303 106.214309) (xy 80.268512 106.217896) (xy 80.269972 106.268049) (xy 80.270398 106.282683) (xy 80.273363 106.293747) (xy 80.277114 106.31502) (xy 80.278112 106.326426) (xy 80.278112 106.326427) (xy 80.29848 106.387893) (xy 80.299514 106.391347) (xy 80.31629 106.453952) (xy 80.321727 106.464035) (xy 80.330285 106.483873) (xy 80.333885 106.494735) (xy 80.333888 106.494743) (xy 80.367881 106.549852) (xy 80.369684 106.552975) (xy 80.400444 106.610021) (xy 80.408058 106.618577) (xy 80.420958 106.635905) (xy 80.42697 106.645651) (xy 80.426972 106.645654) (xy 80.472775 106.691456) (xy 80.475239 106.694067) (xy 80.518319 106.742476) (xy 80.527698 106.749043) (xy 80.544257 106.762938) (xy 81.714196 107.932877) (xy 81.725977 107.946509) (xy 81.740531 107.966058) (xy 81.770807 107.991463) (xy 81.781005 108.00002) (xy 81.784995 108.003676) (xy 81.790899 108.00958) (xy 81.811456 108.025834) (xy 81.816897 108.030137) (xy 81.846628 108.055084) (xy 81.87636 108.080032) (xy 81.876362 108.080033) (xy 81.882396 108.084002) (xy 81.882369 108.084042) (xy 81.888921 108.088216) (xy 81.888947 108.088175) (xy 81.895099 108.09197) (xy 81.964722 108.124435) (xy 81.965447 108.124773) (xy 82.034812 108.159609) (xy 82.034813 108.159609) (xy 82.034815 108.15961) (xy 82.041594 108.162077) (xy 82.041577 108.162122) (xy 82.048925 108.164676) (xy 82.048941 108.164631) (xy 82.05579 108.166901) (xy 82.055793 108.166901) (xy 82.055794 108.166902) (xy 82.131818 108.182599) (xy 82.207344 108.2005) (xy 82.207345 108.2005) (xy 82.207349 108.200501) (xy 82.214517 108.201339) (xy 82.214511 108.201386) (xy 82.222242 108.202176) (xy 82.222247 108.202129) (xy 82.229437 108.202758) (xy 82.229441 108.202757) (xy 82.229442 108.202758) (xy 82.307045 108.2005) (xy 97.217706 108.2005) (xy 97.235676 108.201809) (xy 97.237862 108.202129) (xy 97.259789 108.205341) (xy 97.312426 108.200735) (xy 97.317828 108.2005) (xy 97.326175 108.2005) (xy 97.32618 108.2005) (xy 97.349835 108.197734) (xy 97.359096 108.196652) (xy 97.436419 108.189888) (xy 97.436422 108.189887) (xy 97.436426 108.189887) (xy 97.436429 108.189885) (xy 97.443493 108.188427) (xy 97.443502 108.188474) (xy 97.451097 108.18679) (xy 97.451087 108.186744) (xy 97.458107 108.185079) (xy 97.458113 108.185079) (xy 97.531065 108.158526) (xy 97.604738 108.134114) (xy 97.604746 108.134108) (xy 97.611284 108.131061) (xy 97.611305 108.131106) (xy 97.618302 108.127719) (xy 97.61828 108.127675) (xy 97.624729 108.124436) (xy 97.624728 108.124436) (xy 97.624732 108.124435) (xy 97.689605 108.081766) (xy 97.755651 108.04103) (xy 97.755655 108.041025) (xy 97.761319 108.036548) (xy 97.76135 108.036587) (xy 97.767374 108.03168) (xy 97.767342 108.031642) (xy 97.772864 108.027007) (xy 97.772874 108.027001) (xy 97.798329 108.00002) (xy 97.826163 107.970518) (xy 98.307518 107.489162) (xy 98.78888 107.007799) (xy 98.802506 106.996023) (xy 98.822058 106.981469) (xy 98.856015 106.941) (xy 98.859675 106.937005) (xy 98.86558 106.931101) (xy 98.871153 106.924051) (xy 98.886133 106.905107) (xy 98.903708 106.884161) (xy 98.936032 106.84564) (xy 98.936037 106.845629) (xy 98.939999 106.839607) (xy 98.94004 106.839634) (xy 98.944218 106.833076) (xy 98.944176 106.83305) (xy 98.947962 106.826911) (xy 98.947967 106.826905) (xy 98.980775 106.756547) (xy 99.015609 106.687188) (xy 99.01561 106.687182) (xy 99.018077 106.680405) (xy 99.018124 106.680422) (xy 99.020675 106.673083) (xy 99.020629 106.673068) (xy 99.0229 106.66621) (xy 99.022903 106.666206) (xy 99.038607 106.590149) (xy 99.0565 106.514656) (xy 99.0565 106.514653) (xy 99.057339 106.507483) (xy 99.057386 106.507488) (xy 99.058177 106.499757) (xy 99.05813 106.499753) (xy 99.058759 106.492562) (xy 99.0565 106.41492) (xy 99.0565 98.362293) (xy 99.057809 98.344322) (xy 99.05916 98.335097) (xy 99.061341 98.320211) (xy 99.061269 98.319393) (xy 99.056736 98.267578) (xy 99.0565 98.262171) (xy 99.0565 98.253824) (xy 99.056499 98.253813) (xy 99.052652 98.220904) (xy 99.045887 98.143576) (xy 99.045887 98.143573) (xy 99.045885 98.143568) (xy 99.044427 98.136504) (xy 99.044475 98.136493) (xy 99.042794 98.128909) (xy 99.042746 98.128921) (xy 99.041079 98.121893) (xy 99.041079 98.121887) (xy 99.01453 98.048944) (xy 98.990114 97.975261) (xy 98.990112 97.975257) (xy 98.98706 97.968712) (xy 98.987104 97.968691) (xy 98.98372 97.961701) (xy 98.983676 97.961724) (xy 98.980438 97.955278) (xy 98.980435 97.955268) (xy 98.937771 97.8904) (xy 98.89703 97.824349) (xy 98.897025 97.824344) (xy 98.892552 97.818686) (xy 98.89259 97.818655) (xy 98.887681 97.812629) (xy 98.887645 97.81266) (xy 98.883005 97.807131) (xy 98.883003 97.807129) (xy 98.883001 97.807126) (xy 98.842164 97.768598) (xy 98.826517 97.753835) (xy 97.609804 96.537123) (xy 97.598022 96.52349) (xy 97.583472 96.503946) (xy 97.583471 96.503945) (xy 97.583469 96.503942) (xy 97.582595 96.503208) (xy 97.542987 96.469972) (xy 97.538998 96.466317) (xy 97.533102 96.460421) (xy 97.533101 96.46042) (xy 97.507103 96.439863) (xy 97.44764 96.389968) (xy 97.447635 96.389965) (xy 97.441605 96.385999) (xy 97.44163 96.385959) (xy 97.435069 96.381779) (xy 97.435045 96.38182) (xy 97.428904 96.378031) (xy 97.35854 96.34522) (xy 97.289185 96.310389) (xy 97.282401 96.30792) (xy 97.282416 96.307876) (xy 97.275071 96.305322) (xy 97.275057 96.305367) (xy 97.268205 96.303096) (xy 97.230177 96.295244) (xy 97.192149 96.287392) (xy 97.116656 96.2695) (xy 97.116654 96.2695) (xy 97.116646 96.269498) (xy 97.109482 96.268661) (xy 97.109487 96.268612) (xy 97.101757 96.267822) (xy 97.101753 96.26787) (xy 97.094562 96.26724) (xy 97.01692 96.2695) (xy 93.075543 96.2695) (xy 93.008504 96.249815) (xy 92.987862 96.233181) (xy 92.234819 95.480138) (xy 92.201334 95.418815) (xy 92.1985 95.392457) (xy 92.1985 93.862654) (xy 92.8755 93.862654) (xy 92.882011 93.923202) (xy 92.882011 93.923204) (xy 92.933111 94.060204) (xy 93.020739 94.177261) (xy 93.137796 94.264889) (xy 93.274799 94.315989) (xy 93.30205 94.318918) (xy 93.335345 94.322499) (xy 93.335362 94.3225) (xy 96.932638 94.3225) (xy 96.932654 94.322499) (xy 96.959692 94.319591) (xy 96.993201 94.315989) (xy 97.130204 94.264889) (xy 97.247261 94.177261) (xy 97.334889 94.060204) (xy 97.385989 93.923201) (xy 97.389591 93.889692) (xy 97.392499 93.862654) (xy 97.3925 93.862637) (xy 97.3925 92.065362) (xy 97.392499 92.065345) (xy 97.389157 92.03427) (xy 97.385989 92.004799) (xy 97.334889 91.867796) (xy 97.334888 91.867793) (xy 97.334887 91.867792) (xy 97.265272 91.774799) (xy 97.260414 91.76831) (xy 97.235997 91.702847) (xy 97.250848 91.634574) (xy 97.260415 91.619689) (xy 97.334887 91.520207) (xy 97.334888 91.520206) (xy 97.351651 91.475265) (xy 97.385989 91.383201) (xy 97.391173 91.334981) (xy 97.392499 91.322654) (xy 97.3925 91.322637) (xy 97.3925 89.525362) (xy 97.392499 89.525345) (xy 97.389157 89.49427) (xy 97.385989 89.464799) (xy 97.334889 89.327796) (xy 97.255105 89.221218) (xy 97.230689 89.155754) (xy 97.245541 89.087481) (xy 97.255107 89.072596) (xy 97.327352 88.976089) (xy 97.327354 88.976086) (xy 97.377596 88.841379) (xy 97.377598 88.841372) (xy 97.383999 88.781844) (xy 97.384 88.781827) (xy 97.384 88.134) (xy 92.884 88.134) (xy 92.884 88.781844) (xy 92.890401 88.841372) (xy 92.890403 88.841379) (xy 92.940645 88.976086) (xy 92.940646 88.976088) (xy 93.012893 89.072597) (xy 93.03731 89.138061) (xy 93.022459 89.206334) (xy 93.012893 89.221218) (xy 92.933112 89.327793) (xy 92.933111 89.327793) (xy 92.882011 89.464795) (xy 92.882011 89.464797) (xy 92.8755 89.525345) (xy 92.8755 91.322654) (xy 92.882011 91.383202) (xy 92.882011 91.383204) (xy 92.933111 91.520204) (xy 93.007585 91.619689) (xy 93.032002 91.685154) (xy 93.01715 91.753427) (xy 93.007586 91.768308) (xy 93.002728 91.774799) (xy 92.933111 91.867795) (xy 92.882011 92.004795) (xy 92.882011 92.004797) (xy 92.8755 92.065345) (xy 92.8755 93.862654) (xy 92.1985 93.862654) (xy 92.1985 86.242654) (xy 92.8755 86.242654) (xy 92.882011 86.303202) (xy 92.882011 86.303204) (xy 92.933111 86.440204) (xy 93.012893 86.54678) (xy 93.03731 86.612245) (xy 93.022458 86.680518) (xy 93.012893 86.695402) (xy 92.940647 86.79191) (xy 92.940645 86.791913) (xy 92.890403 86.92662) (xy 92.890401 86.926627) (xy 92.884 86.986155) (xy 92.884 87.634) (xy 97.384 87.634) (xy 97.384 86.986172) (xy 97.383999 86.986155) (xy 97.377598 86.926627) (xy 97.377596 86.92662) (xy 97.327354 86.791913) (xy 97.327353 86.791911) (xy 97.255106 86.695402) (xy 97.230689 86.629938) (xy 97.24554 86.561665) (xy 97.255099 86.546789) (xy 97.334889 86.440204) (xy 97.385989 86.303201) (xy 97.389591 86.269692) (xy 97.392499 86.242654) (xy 97.3925 86.242637) (xy 97.3925 84.445362) (xy 97.392499 84.445345) (xy 97.389157 84.41427) (xy 97.385989 84.384799) (xy 97.367558 84.335385) (xy 97.334888 84.247793) (xy 97.334887 84.247792) (xy 97.260415 84.148311) (xy 97.235997 84.082847) (xy 97.250848 84.014574) (xy 97.260415 83.999689) (xy 97.334887 83.900207) (xy 97.334888 83.900206) (xy 97.385988 83.763204) (xy 97.385988 83.763203) (xy 97.385989 83.763201) (xy 97.389591 83.729692) (xy 97.392499 83.702654) (xy 97.3925 83.702637) (xy 97.3925 81.905362) (xy 97.392499 81.905345) (xy 97.389157 81.87427) (xy 97.385989 81.844799) (xy 97.382332 81.834995) (xy 97.334888 81.707793) (xy 97.334887 81.707792) (xy 97.260415 81.608311) (xy 97.235997 81.542847) (xy 97.250848 81.474574) (xy 97.260415 81.459689) (xy 97.334887 81.360207) (xy 97.334888 81.360206) (xy 97.385988 81.223204) (xy 97.385988 81.223203) (xy 97.385989 81.223201) (xy 97.389591 81.189692) (xy 97.392499 81.162654) (xy 97.3925 81.162637) (xy 97.3925 79.365362) (xy 97.392499 79.365345) (xy 97.389157 79.33427) (xy 97.385989 79.304799) (xy 97.334889 79.167796) (xy 97.334888 79.167793) (xy 97.334887 79.167792) (xy 97.260415 79.068311) (xy 97.235997 79.002847) (xy 97.250848 78.934574) (xy 97.260415 78.919689) (xy 97.334887 78.820207) (xy 97.334888 78.820206) (xy 97.385988 78.683204) (xy 97.385988 78.683203) (xy 97.385989 78.683201) (xy 97.389591 78.649692) (xy 97.392499 78.622654) (xy 97.3925 78.622637) (xy 97.3925 76.825362) (xy 97.392499 76.825345) (xy 97.389157 76.79427) (xy 97.385989 76.764799) (xy 97.334889 76.627796) (xy 97.255105 76.521218) (xy 97.230689 76.455754) (xy 97.245541 76.387481) (xy 97.255107 76.372596) (xy 97.327352 76.276089) (xy 97.327354 76.276086) (xy 97.377596 76.141379) (xy 97.377598 76.141372) (xy 97.383999 76.081844) (xy 97.384 76.081827) (xy 97.384 75.434) (xy 92.884 75.434) (xy 92.884 76.081844) (xy 92.890401 76.141372) (xy 92.890403 76.141379) (xy 92.940645 76.276086) (xy 92.940646 76.276088) (xy 93.012893 76.372597) (xy 93.03731 76.438061) (xy 93.022459 76.506334) (xy 93.012893 76.521218) (xy 92.933112 76.627793) (xy 92.933111 76.627793) (xy 92.882011 76.764795) (xy 92.882011 76.764797) (xy 92.8755 76.825345) (xy 92.8755 78.622654) (xy 92.882011 78.683202) (xy 92.882011 78.683204) (xy 92.933111 78.820204) (xy 93.007585 78.919689) (xy 93.032002 78.985154) (xy 93.01715 79.053427) (xy 93.007585 79.068311) (xy 92.933111 79.167795) (xy 92.882011 79.304795) (xy 92.882011 79.304797) (xy 92.8755 79.365345) (xy 92.8755 81.162654) (xy 92.882011 81.223202) (xy 92.882011 81.223204) (xy 92.933111 81.360204) (xy 93.007585 81.459689) (xy 93.032002 81.525154) (xy 93.01715 81.593427) (xy 93.007585 81.608311) (xy 92.933111 81.707795) (xy 92.882011 81.844795) (xy 92.882011 81.844797) (xy 92.8755 81.905345) (xy 92.8755 83.702654) (xy 92.882011 83.763202) (xy 92.882011 83.763204) (xy 92.933111 83.900204) (xy 93.007585 83.999689) (xy 93.032002 84.065154) (xy 93.01715 84.133427) (xy 93.007585 84.148311) (xy 92.933111 84.247795) (xy 92.882011 84.384795) (xy 92.882011 84.384797) (xy 92.8755 84.445345) (xy 92.8755 86.242654) (xy 92.1985 86.242654) (xy 92.1985 46.085543) (xy 92.218185 46.018504) (xy 92.234819 45.997862) (xy 92.432477 45.800204) (xy 92.668408 45.564272) (xy 92.729729 45.530789) (xy 92.79942 45.535773) (xy 92.855354 45.577644) (xy 92.879376 45.638697) (xy 92.882011 45.663203) (xy 92.882011 45.663204) (xy 92.92107 45.767922) (xy 92.933111 45.800204) (xy 93.007097 45.899038) (xy 93.007585 45.899689) (xy 93.032002 45.965154) (xy 93.01715 46.033427) (xy 93.007585 46.048311) (xy 92.933111 46.147795) (xy 92.882011 46.284795) (xy 92.882011 46.284797) (xy 92.8755 46.345345) (xy 92.8755 48.142654) (xy 92.882011 48.203202) (xy 92.882011 48.203204) (xy 92.933111 48.340204) (xy 93.012893 48.44678) (xy 93.03731 48.512245) (xy 93.022458 48.580518) (xy 93.012893 48.595402) (xy 92.940647 48.69191) (xy 92.940645 48.691913) (xy 92.890403 48.82662) (xy 92.890401 48.826627) (xy 92.884 48.886155) (xy 92.884 49.534) (xy 97.384 49.534) (xy 97.384 48.886172) (xy 97.383999 48.886155) (xy 97.377598 48.826627) (xy 97.377596 48.82662) (xy 97.327354 48.691913) (xy 97.327353 48.691911) (xy 97.255106 48.595402) (xy 97.230689 48.529938) (xy 97.24554 48.461665) (xy 97.255099 48.446789) (xy 97.334889 48.340204) (xy 97.385989 48.203201) (xy 97.389883 48.166978) (xy 97.392499 48.142654) (xy 97.3925 48.142637) (xy 97.3925 46.345362) (xy 97.392499 46.345345) (xy 97.389157 46.31427) (xy 97.385989 46.284799) (xy 97.370212 46.2425) (xy 97.334888 46.147793) (xy 97.334887 46.147792) (xy 97.260415 46.048311) (xy 97.235997 45.982847) (xy 97.250848 45.914574) (xy 97.260415 45.899689) (xy 97.260903 45.899038) (xy 97.318719 45.821805) (xy 97.334887 45.800207) (xy 97.334888 45.800206) (xy 97.346929 45.767925) (xy 97.385989 45.663201) (xy 97.389591 45.629692) (xy 97.392499 45.602654) (xy 97.3925 45.602637) (xy 97.3925 44.916543) (xy 97.412185 44.849504) (xy 97.464989 44.803749) (xy 97.534147 44.793805) (xy 97.597703 44.82283) (xy 97.604181 44.828862) (xy 98.011181 45.235862) (xy 98.044666 45.297185) (xy 98.0475 45.323543) (xy 98.0475 53.736457) (xy 98.027815 53.803496) (xy 98.011181 53.824138) (xy 97.766138 54.069181) (xy 97.704815 54.102666) (xy 97.678457 54.1055) (xy 97.5165 54.1055) (xy 97.449461 54.085815) (xy 97.403706 54.033011) (xy 97.3925 53.9815) (xy 97.3925 53.965362) (xy 97.392499 53.965345) (xy 97.389157 53.93427) (xy 97.385989 53.904799) (xy 97.334889 53.767796) (xy 97.334888 53.767793) (xy 97.334887 53.767792) (xy 97.260415 53.668311) (xy 97.235997 53.602847) (xy 97.250848 53.534574) (xy 97.260415 53.519689) (xy 97.334887 53.420207) (xy 97.334888 53.420206) (xy 97.385988 53.283204) (xy 97.385988 53.283203) (xy 97.385989 53.283201) (xy 97.389591 53.249692) (xy 97.392499 53.222654) (xy 97.3925 53.222637) (xy 97.3925 51.425362) (xy 97.392499 51.425345) (xy 97.389157 51.39427) (xy 97.385989 51.364799) (xy 97.334889 51.227796) (xy 97.255105 51.121218) (xy 97.230689 51.055754) (xy 97.245541 50.987481) (xy 97.255107 50.972596) (xy 97.327352 50.876089) (xy 97.327354 50.876086) (xy 97.377596 50.741379) (xy 97.377598 50.741372) (xy 97.383999 50.681844) (xy 97.384 50.681827) (xy 97.384 50.034) (xy 92.884 50.034) (xy 92.884 50.681844) (xy 92.890401 50.741372) (xy 92.890403 50.741379) (xy 92.940645 50.876086) (xy 92.940646 50.876088) (xy 93.012893 50.972597) (xy 93.03731 51.038061) (xy 93.022459 51.106334) (xy 93.012893 51.121218) (xy 92.933112 51.227793) (xy 92.933111 51.227793) (xy 92.882011 51.364795) (xy 92.882011 51.364797) (xy 92.8755 51.425345) (xy 92.8755 53.222654) (xy 92.882011 53.283202) (xy 92.882011 53.283204) (xy 92.933111 53.420204) (xy 93.007585 53.519689) (xy 93.032002 53.585154) (xy 93.01715 53.653427) (xy 93.007585 53.668311) (xy 92.933111 53.767795) (xy 92.882011 53.904795) (xy 92.882011 53.904797) (xy 92.8755 53.965345) (xy 92.8755 55.762654) (xy 92.882011 55.823202) (xy 92.882011 55.823204) (xy 92.933111 55.960204) (xy 93.007585 56.059689) (xy 93.032002 56.125154) (xy 93.01715 56.193427) (xy 93.007585 56.208311) (xy 92.933111 56.307795) (xy 92.882011 56.444795) (xy 92.882011 56.444797) (xy 92.8755 56.505345) (xy 92.8755 58.302654) (xy 92.882011 58.363202) (xy 92.882011 58.363204) (xy 92.933111 58.500204) (xy 93.007585 58.599689) (xy 93.032002 58.665154) (xy 93.01715 58.733427) (xy 93.007585 58.748311) (xy 92.933111 58.847795) (xy 92.882011 58.984795) (xy 92.882011 58.984797) (xy 92.8755 59.045345) (xy 92.8755 60.842654) (xy 92.882011 60.903202) (xy 92.882011 60.903204) (xy 92.933111 61.040204) (xy 93.007585 61.139689) (xy 93.032002 61.205154) (xy 93.01715 61.273427) (xy 93.007586 61.288308) (xy 93.001837 61.295989) (xy 92.933111 61.387795) (xy 92.882011 61.524795) (xy 92.882011 61.524797) (xy 92.8755 61.585345) (xy 92.8755 63.382654) (xy 92.882011 63.443202) (xy 92.882011 63.443204) (xy 92.933111 63.580204) (xy 93.007585 63.679689) (xy 93.032002 63.745154) (xy 93.01715 63.813427) (xy 93.007585 63.828311) (xy 92.933111 63.927795) (xy 92.882011 64.064795) (xy 92.882011 64.064797) (xy 92.8755 64.125345) (xy 92.8755 65.922654) (xy 92.882011 65.983202) (xy 92.882011 65.983204) (xy 92.933111 66.120204) (xy 93.007585 66.219689) (xy 93.032002 66.285154) (xy 93.01715 66.353427) (xy 93.007585 66.368311) (xy 92.933111 66.467795) (xy 92.882011 66.604795) (xy 92.882011 66.604797) (xy 92.8755 66.665345) (xy 92.8755 68.462654) (xy 92.882011 68.523202) (xy 92.882011 68.523204) (xy 92.933111 68.660204) (xy 93.007585 68.759689) (xy 93.032002 68.825154) (xy 93.01715 68.893427) (xy 93.007585 68.908311) (xy 92.933111 69.007795) (xy 92.882011 69.144795) (xy 92.882011 69.144797) (xy 92.8755 69.205345) (xy 92.8755 71.002654) (xy 92.882011 71.063202) (xy 92.882011 71.063204) (xy 92.933111 71.200204) (xy 93.007585 71.299689) (xy 93.032002 71.365154) (xy 93.01715 71.433427) (xy 93.007585 71.448311) (xy 92.933111 71.547795) (xy 92.882011 71.684795) (xy 92.882011 71.684797) (xy 92.8755 71.745345) (xy 92.8755 73.542654) (xy 92.882011 73.603202) (xy 92.882011 73.603204) (xy 92.933111 73.740204) (xy 93.012893 73.84678) (xy 93.03731 73.912245) (xy 93.022458 73.980518) (xy 93.012893 73.995402) (xy 92.940647 74.09191) (xy 92.940645 74.091913) (xy 92.890403 74.22662) (xy 92.890401 74.226627) (xy 92.884 74.286155) (xy 92.884 74.934) (xy 97.384 74.934) (xy 97.384 74.286172) (xy 97.383999 74.286155) (xy 97.377598 74.226627) (xy 97.377596 74.22662) (xy 97.327354 74.091913) (xy 97.327353 74.091911) (xy 97.255106 73.995402) (xy 97.230689 73.929938) (xy 97.24554 73.861665) (xy 97.255099 73.846789) (xy 97.334889 73.740204) (xy 97.385989 73.603201) (xy 97.389591 73.569692) (xy 97.392499 73.542654) (xy 97.3925 73.542637) (xy 97.3925 71.745362) (xy 97.392499 71.745345) (xy 97.389157 71.71427) (xy 97.385989 71.684799) (xy 97.371338 71.645519) (xy 97.334888 71.547793) (xy 97.334887 71.547792) (xy 97.260415 71.448311) (xy 97.235997 71.382847) (xy 97.250848 71.314574) (xy 97.260415 71.299689) (xy 97.334887 71.200207) (xy 97.334888 71.200206) (xy 97.385988 71.063204) (xy 97.385988 71.063203) (xy 97.385989 71.063201) (xy 97.389591 71.029692) (xy 97.392499 71.002654) (xy 97.3925 71.002637) (xy 97.3925 69.205362) (xy 97.392499 69.205345) (xy 97.389157 69.17427) (xy 97.385989 69.144799) (xy 97.334889 69.007796) (xy 97.334888 69.007793) (xy 97.334887 69.007792) (xy 97.260415 68.908311) (xy 97.235997 68.842847) (xy 97.250848 68.774574) (xy 97.260415 68.759689) (xy 97.334887 68.660207) (xy 97.334888 68.660206) (xy 97.385988 68.523204) (xy 97.385988 68.523203) (xy 97.385989 68.523201) (xy 97.389591 68.489692) (xy 97.392499 68.462654) (xy 97.3925 68.462637) (xy 97.3925 66.665362) (xy 97.392499 66.665345) (xy 97.389157 66.63427) (xy 97.385989 66.604799) (xy 97.334889 66.467796) (xy 97.334888 66.467793) (xy 97.334887 66.467792) (xy 97.260415 66.368311) (xy 97.235997 66.302847) (xy 97.250848 66.234574) (xy 97.260415 66.219689) (xy 97.334887 66.120207) (xy 97.334888 66.120206) (xy 97.385988 65.983204) (xy 97.385988 65.983203) (xy 97.385989 65.983201) (xy 97.389591 65.949692) (xy 97.392499 65.922654) (xy 97.3925 65.922637) (xy 97.3925 64.125362) (xy 97.392499 64.125345) (xy 97.389157 64.09427) (xy 97.385989 64.064799) (xy 97.334889 63.927796) (xy 97.334888 63.927793) (xy 97.334887 63.927792) (xy 97.260415 63.828311) (xy 97.235997 63.762847) (xy 97.250848 63.694574) (xy 97.260415 63.679689) (xy 97.334887 63.580207) (xy 97.334888 63.580206) (xy 97.385988 63.443204) (xy 97.385988 63.443203) (xy 97.385989 63.443201) (xy 97.389591 63.409692) (xy 97.392499 63.382654) (xy 97.3925 63.382637) (xy 97.3925 61.585362) (xy 97.392499 61.585345) (xy 97.389157 61.55427) (xy 97.385989 61.524799) (xy 97.336423 61.39191) (xy 97.334888 61.387793) (xy 97.334887 61.387792) (xy 97.266163 61.295989) (xy 97.260414 61.28831) (xy 97.235997 61.222847) (xy 97.250848 61.154574) (xy 97.260415 61.139689) (xy 97.334887 61.040207) (xy 97.334888 61.040206) (xy 97.385988 60.903204) (xy 97.385988 60.903203) (xy 97.385989 60.903201) (xy 97.389591 60.869692) (xy 97.392499 60.842654) (xy 97.3925 60.842637) (xy 97.3925 59.045362) (xy 97.392499 59.045345) (xy 97.389157 59.01427) (xy 97.385989 58.984799) (xy 97.334889 58.847796) (xy 97.334888 58.847793) (xy 97.334887 58.847792) (xy 97.260415 58.748311) (xy 97.235997 58.682847) (xy 97.250848 58.614574) (xy 97.260415 58.599689) (xy 97.334887 58.500207) (xy 97.334888 58.500206) (xy 97.385988 58.363204) (xy 97.385988 58.363203) (xy 97.385989 58.363201) (xy 97.389591 58.329692) (xy 97.392499 58.302654) (xy 97.3925 58.302637) (xy 97.3925 56.505362) (xy 97.392499 56.505345) (xy 97.389157 56.47427) (xy 97.385989 56.444799) (xy 97.334889 56.307796) (xy 97.334888 56.307793) (xy 97.334887 56.307792) (xy 97.260415 56.208311) (xy 97.235997 56.142847) (xy 97.250848 56.074574) (xy 97.260415 56.059689) (xy 97.334887 55.960207) (xy 97.334888 55.960206) (xy 97.385988 55.823204) (xy 97.385988 55.823203) (xy 97.385989 55.823201) (xy 97.389591 55.789692) (xy 97.392499 55.762654) (xy 97.3925 55.762637) (xy 97.3925 55.7465) (xy 97.412185 55.679461) (xy 97.464989 55.633706) (xy 97.5165 55.6225) (xy 97.979706 55.6225) (xy 97.997676 55.623809) (xy 98.000174 55.624174) (xy 98.021789 55.627341) (xy 98.074426 55.622735) (xy 98.079828 55.6225) (xy 98.088175 55.6225) (xy 98.08818 55.6225) (xy 98.111835 55.619734) (xy 98.121096 55.618652) (xy 98.198419 55.611888) (xy 98.198422 55.611887) (xy 98.198426 55.611887) (xy 98.198429 55.611885) (xy 98.205493 55.610427) (xy 98.205502 55.610474) (xy 98.213097 55.60879) (xy 98.213087 55.608744) (xy 98.220107 55.607079) (xy 98.220113 55.607079) (xy 98.293065 55.580526) (xy 98.366738 55.556114) (xy 98.366746 55.556108) (xy 98.373284 55.553061) (xy 98.373305 55.553106) (xy 98.380302 55.549719) (xy 98.38028 55.549675) (xy 98.386729 55.546436) (xy 98.386728 55.546436) (xy 98.386732 55.546435) (xy 98.451605 55.503766) (xy 98.517651 55.46303) (xy 98.517655 55.463025) (xy 98.523319 55.458548) (xy 98.52335 55.458587) (xy 98.529374 55.45368) (xy 98.529342 55.453642) (xy 98.534864 55.449007) (xy 98.534874 55.449001) (xy 98.57743 55.403894) (xy 98.588163 55.392518) (xy 99.110085 54.870595) (xy 99.29688 54.683799) (xy 99.310506 54.672023) (xy 99.330058 54.657469) (xy 99.364015 54.617) (xy 99.367675 54.613005) (xy 99.373581 54.6071) (xy 99.394135 54.581104) (xy 99.444032 54.52164) (xy 99.444033 54.521637) (xy 99.448004 54.515601) (xy 99.448045 54.515628) (xy 99.452219 54.509076) (xy 99.452176 54.50905) (xy 99.455962 54.502911) (xy 99.455967 54.502905) (xy 99.488775 54.432547) (xy 99.523609 54.363188) (xy 99.52361 54.363182) (xy 99.526077 54.356405) (xy 99.526124 54.356422) (xy 99.528675 54.349083) (xy 99.528629 54.349068) (xy 99.5309 54.34221) (xy 99.530903 54.342206) (xy 99.546607 54.266149) (xy 99.5645 54.190656) (xy 99.5645 54.190653) (xy 99.565339 54.183483) (xy 99.565386 54.183488) (xy 99.566177 54.175757) (xy 99.56613 54.175753) (xy 99.566759 54.168562) (xy 99.5645 54.09092) (xy 99.5645 45.022293) (xy 99.565809 45.004322) (xy 99.569341 44.980211) (xy 99.564735 44.927573) (xy 99.5645 44.922171) (xy 99.5645 44.913824) (xy 99.564499 44.913813) (xy 99.560652 44.880904) (xy 99.556099 44.828862) (xy 99.553887 44.803573) (xy 99.553885 44.803568) (xy 99.552427 44.796504) (xy 99.552475 44.796493) (xy 99.550794 44.788909) (xy 99.550746 44.788921) (xy 99.549079 44.781893) (xy 99.549079 44.781887) (xy 99.52253 44.708944) (xy 99.498114 44.635261) (xy 99.498112 44.635257) (xy 99.49506 44.628712) (xy 99.495104 44.628691) (xy 99.491717 44.621694) (xy 99.491673 44.621717) (xy 99.488434 44.615267) (xy 99.479295 44.601372) (xy 99.445762 44.550386) (xy 99.405029 44.484349) (xy 99.405028 44.484348) (xy 99.400551 44.478685) (xy 99.400589 44.478654) (xy 99.39568 44.47263) (xy 99.395645 44.47266) (xy 99.391005 44.467131) (xy 99.391003 44.467129) (xy 99.391001 44.467126) (xy 99.341126 44.420071) (xy 99.3345 44.413819) (xy 97.432027 42.511346) (xy 97.420245 42.497713) (xy 97.405695 42.478169) (xy 97.405694 42.478168) (xy 97.405692 42.478165) (xy 97.400377 42.473705) (xy 97.36521 42.444195) (xy 97.361221 42.44054) (xy 97.355325 42.434644) (xy 97.355324 42.434643) (xy 97.333292 42.417222) (xy 97.329325 42.414085) (xy 97.269865 42.364193) (xy 97.269863 42.364191) (xy 97.269858 42.364188) (xy 97.263828 42.360222) (xy 97.263853 42.360182) (xy 97.257292 42.356002) (xy 97.257268 42.356043) (xy 97.251127 42.352254) (xy 97.180763 42.319443) (xy 97.111408 42.284612) (xy 97.104624 42.282143) (xy 97.104639 42.282099) (xy 97.097294 42.279545) (xy 97.09728 42.27959) (xy 97.090428 42.277319) (xy 97.0524 42.269467) (xy 97.014372 42.261615) (xy 96.938879 42.243723) (xy 96.938877 42.243723) (xy 96.938869 42.243721) (xy 96.931705 42.242884) (xy 96.93171 42.242835) (xy 96.92398 42.242045) (xy 96.923976 42.242093) (xy 96.916785 42.241463) (xy 96.839143 42.243723) (xy 73.226071 42.243723) (xy 73.208101 42.242414) (xy 73.183983 42.238881) (xy 73.138806 42.242835) (xy 73.13135 42.243487) (xy 73.125949 42.243723) (xy 73.117596 42.243723) (xy 73.08468 42.24757) (xy 73.007351 42.254335) (xy 73.000283 42.255795) (xy 73.000273 42.255751) (xy 72.992683 42.257433) (xy 72.992694 42.257477) (xy 72.98567 42.259142) (xy 72.985664 42.259143) (xy 72.985664 42.259144) (xy 72.978875 42.261615) (xy 72.91271 42.285696) (xy 72.839034 42.31011) (xy 72.832497 42.313159) (xy 72.832477 42.313117) (xy 72.825473 42.316508) (xy 72.825494 42.316549) (xy 72.819046 42.319787) (xy 72.754171 42.362456) (xy 72.688129 42.40319) (xy 72.68246 42.407673) (xy 72.68243 42.407636) (xy 72.676404 42.412545) (xy 72.676434 42.41258) (xy 72.670909 42.417216) (xy 72.617613 42.473705) (xy 71.269122 43.822195) (xy 71.255495 43.833973) (xy 71.235941 43.848531) (xy 71.201977 43.889006) (xy 71.19833 43.892987) (xy 71.192418 43.8989) (xy 71.171863 43.924896) (xy 71.121967 43.98436) (xy 71.118001 43.990391) (xy 71.117963 43.990366) (xy 71.113782 43.996928) (xy 71.113821 43.996952) (xy 71.110032 44.003094) (xy 71.07722 44.073459) (xy 71.042391 44.14281) (xy 71.039923 44.149593) (xy 71.039878 44.149576) (xy 71.037322 44.156932) (xy 71.037366 44.156947) (xy 71.035096 44.163795) (xy 71.031256 44.182393) (xy 71.019392 44.23985) (xy 71.00789 44.288383) (xy 71.001498 44.315351) (xy 71.000661 44.322519) (xy 71.000613 44.322513) (xy 70.999823 44.330244) (xy 70.99987 44.330249) (xy 70.99924 44.337438) (xy 71.0015 44.415079) (xy 71.0015 54.340874) (xy 70.981815 54.407913) (xy 70.965181 54.428555) (xy 70.092542 55.301193) (xy 70.078915 55.312971) (xy 70.059361 55.327529) (xy 70.025397 55.368004) (xy 70.02175 55.371985) (xy 70.015838 55.377898) (xy 69.995283 55.403894) (xy 69.945387 55.463358) (xy 69.941421 55.469389) (xy 69.941383 55.469364) (xy 69.937202 55.475926) (xy 69.937241 55.47595) (xy 69.933452 55.482092) (xy 69.90064 55.552457) (xy 69.865811 55.621808) (xy 69.863343 55.628591) (xy 69.863298 55.628574) (xy 69.860742 55.63593) (xy 69.860786 55.635945) (xy 69.858516 55.642793) (xy 69.850945 55.679461) (xy 69.842812 55.718848) (xy 69.836259 55.7465) (xy 69.824918 55.794349) (xy 69.824081 55.801517) (xy 69.824033 55.801511) (xy 69.823243 55.809242) (xy 69.82329 55.809247) (xy 69.82266 55.816436) (xy 69.82492 55.894077) (xy 69.82492 71.291036) (xy 69.805235 71.358075) (xy 69.788601 71.378717) (xy 68.550813 72.616504) (xy 68.537186 72.628282) (xy 68.517632 72.64284) (xy 68.483668 72.683315) (xy 68.480021 72.687296) (xy 68.474109 72.693209) (xy 68.453554 72.719205) (xy 68.403658 72.778669) (xy 68.399692 72.7847) (xy 68.399654 72.784675) (xy 68.395473 72.791237) (xy 68.395512 72.791261) (xy 68.391723 72.797403) (xy 68.358911 72.867768) (xy 68.324082 72.937119) (xy 68.321614 72.943902) (xy 68.321569 72.943885) (xy 68.319013 72.951241) (xy 68.319057 72.951256) (xy 68.316787 72.958105) (xy 68.301083 73.034159) (xy 68.299585 73.04048) (xy 68.26497 73.101173) (xy 68.203037 73.133516) (xy 68.13345 73.127241) (xy 68.078301 73.084341) (xy 68.055101 73.018435) (xy 68.054928 73.011813) (xy 68.055008 72.867768) (xy 68.072615 41.271371) (xy 68.092337 41.204343) (xy 68.145166 41.158618) (xy 68.196052 41.147442) (xy 76.340746 41.110624) (xy 100.540073 41.110624) ) ) ) (zone (net 1) (net_name "GND") (layer "F.Cu") (tstamp c34a63c2-2a86-401a-b01c-63be73f1a6dd) (hatch edge 0.5) (priority 1) (connect_pads (clearance 0.508)) (min_thickness 0.25) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5)) (polygon (pts (xy 33.774491 41.089783) (xy 66.424885 41.092948) (xy 66.421145 115.506428) (xy 33.742315 115.518536) ) ) (filled_polygon (layer "F.Cu") (pts (xy 65.672009 41.130309) (xy 65.717764 41.183113) (xy 65.727708 41.252271) (xy 65.698683 41.315827) (xy 65.657989 41.346717) (xy 65.32751 41.503022) (xy 65.327506 41.503024) (xy 64.973515 41.715198) (xy 64.642011 41.961058) (xy 64.336215 42.238215) (xy 64.059058 42.544011) (xy 63.813198 42.875515) (xy 63.601024 43.229506) (xy 63.424562 43.602604) (xy 63.424555 43.60262) (xy 63.285527 43.991178) (xy 63.285524 43.991186) (xy 63.285524 43.991189) (xy 63.279908 44.013611) (xy 63.185244 44.391528) (xy 63.126156 44.789867) (xy 63.124685 44.799782) (xy 63.104434 45.212) (xy 63.124685 45.624218) (xy 63.124685 45.624223) (xy 63.124686 45.624227) (xy 63.168275 45.918074) (xy 63.180641 46.001444) (xy 63.185244 46.032471) (xy 63.285527 46.432821) (xy 63.424555 46.821379) (xy 63.424562 46.821395) (xy 63.424564 46.8214) (xy 63.601022 47.19449) (xy 63.695202 47.351619) (xy 63.777615 47.489118) (xy 63.8132 47.548487) (xy 64.035518 47.848249) (xy 64.059058 47.879988) (xy 64.336215 48.185784) (xy 64.642011 48.462941) (xy 64.642017 48.462946) (xy 64.973513 48.7088) (xy 65.32751 48.920978) (xy 65.7006 49.097436) (xy 65.700609 49.097439) (xy 65.70062 49.097444) (xy 66.089179 49.236473) (xy 66.089182 49.236474) (xy 66.089186 49.236475) (xy 66.089189 49.236476) (xy 66.330597 49.296945) (xy 66.390843 49.332328) (xy 66.422396 49.394667) (xy 66.424466 49.417234) (xy 66.423296 72.689773) (xy 66.403608 72.756812) (xy 66.350802 72.802564) (xy 66.281643 72.812504) (xy 66.218089 72.783476) (xy 66.193756 72.754862) (xy 66.171565 72.718883) (xy 66.167089 72.713223) (xy 66.167126 72.713192) (xy 66.162217 72.707165) (xy 66.162181 72.707196) (xy 66.157541 72.701667) (xy 66.157539 72.701665) (xy 66.157537 72.701662) (xy 66.126427 72.672311) (xy 66.101053 72.648371) (xy 64.82111 71.368428) (xy 64.787625 71.307105) (xy 64.784791 71.280747) (xy 64.784791 55.726876) (xy 64.7861 55.708906) (xy 64.789632 55.68479) (xy 64.785027 55.632161) (xy 64.784791 55.626754) (xy 64.784791 55.618406) (xy 64.78479 55.618395) (xy 64.780943 55.585485) (xy 64.774178 55.508158) (xy 64.772718 55.501085) (xy 64.772764 55.501075) (xy 64.771081 55.493484) (xy 64.771035 55.493496) (xy 64.769371 55.486477) (xy 64.76937 55.486469) (xy 64.742817 55.413516) (xy 64.718405 55.339844) (xy 64.718404 55.339842) (xy 64.715352 55.333297) (xy 64.715396 55.333276) (xy 64.712008 55.326277) (xy 64.711965 55.326299) (xy 64.708727 55.319851) (xy 64.666057 55.254976) (xy 64.625321 55.188931) (xy 64.620844 55.183269) (xy 64.620881 55.183238) (xy 64.615972 55.177211) (xy 64.615936 55.177242) (xy 64.611296 55.171713) (xy 64.611294 55.171711) (xy 64.611292 55.171708) (xy 64.580182 55.142357) (xy 64.554808 55.118417) (xy 63.793762 54.357372) (xy 63.78198 54.343739) (xy 63.76743 54.324195) (xy 63.767429 54.324194) (xy 63.767427 54.324191) (xy 63.766553 54.323457) (xy 63.726945 54.290221) (xy 63.722956 54.286566) (xy 63.71706 54.28067) (xy 63.717059 54.280669) (xy 63.691061 54.260112) (xy 63.631598 54.210217) (xy 63.631593 54.210214) (xy 63.625563 54.206248) (xy 63.625588 54.206208) (xy 63.619027 54.202028) (xy 63.619003 54.202069) (xy 63.612862 54.19828) (xy 63.542498 54.165469) (xy 63.473143 54.130638) (xy 63.466359 54.128169) (xy 63.466374 54.128125) (xy 63.459029 54.125571) (xy 63.459015 54.125616) (xy 63.452163 54.123345) (xy 63.414135 54.115493) (xy 63.376107 54.107641) (xy 63.300614 54.089749) (xy 63.300612 54.089749) (xy 63.300604 54.089747) (xy 63.29344 54.08891) (xy 63.293445 54.088861) (xy 63.285715 54.088071) (xy 63.285711 54.088119) (xy 63.27852 54.087489) (xy 63.200878 54.089749) (xy 61.058023 54.089749) (xy 60.990984 54.070064) (xy 60.945229 54.01726) (xy 60.934023 53.965749) (xy 60.934023 53.949611) (xy 60.934022 53.949594) (xy 60.93068 53.918519) (xy 60.927512 53.889048) (xy 60.876412 53.752045) (xy 60.876411 53.752042) (xy 60.87641 53.752041) (xy 60.801938 53.65256) (xy 60.77752 53.587096) (xy 60.792371 53.518823) (xy 60.801938 53.503938) (xy 60.87641 53.404456) (xy 60.876411 53.404455) (xy 60.927511 53.267453) (xy 60.927511 53.267452) (xy 60.927512 53.26745) (xy 60.931114 53.233941) (xy 60.934022 53.206903) (xy 60.934023 53.206886) (xy 60.934023 51.409611) (xy 60.934022 51.409594) (xy 60.93068 51.378519) (xy 60.927512 51.349048) (xy 60.876412 51.212045) (xy 60.796628 51.105467) (xy 60.772212 51.040003) (xy 60.787064 50.97173) (xy 60.79663 50.956845) (xy 60.868875 50.860338) (xy 60.868877 50.860335) (xy 60.919119 50.725628) (xy 60.919121 50.725621) (xy 60.925522 50.666093) (xy 60.925523 50.666076) (xy 60.925523 50.018249) (xy 56.425523 50.018249) (xy 56.425523 50.666093) (xy 56.431924 50.725621) (xy 56.431926 50.725628) (xy 56.482168 50.860335) (xy 56.482169 50.860337) (xy 56.554416 50.956846) (xy 56.578833 51.02231) (xy 56.563982 51.090583) (xy 56.554416 51.105467) (xy 56.474635 51.212042) (xy 56.474634 51.212042) (xy 56.423534 51.349044) (xy 56.423534 51.349046) (xy 56.417023 51.409594) (xy 56.417023 53.206903) (xy 56.423534 53.267451) (xy 56.423534 53.267453) (xy 56.474634 53.404453) (xy 56.549108 53.503938) (xy 56.573525 53.569403) (xy 56.558673 53.637676) (xy 56.549108 53.65256) (xy 56.474634 53.752044) (xy 56.423534 53.889044) (xy 56.423534 53.889046) (xy 56.417023 53.949594) (xy 56.417023 55.746903) (xy 56.423534 55.807451) (xy 56.423534 55.807453) (xy 56.474634 55.944453) (xy 56.549108 56.043938) (xy 56.573525 56.109403) (xy 56.558673 56.177676) (xy 56.549108 56.19256) (xy 56.474634 56.292044) (xy 56.423534 56.429044) (xy 56.423534 56.429046) (xy 56.417023 56.489594) (xy 56.417023 58.286903) (xy 56.423534 58.347451) (xy 56.423534 58.347453) (xy 56.474634 58.484453) (xy 56.549108 58.583938) (xy 56.573525 58.649403) (xy 56.558673 58.717676) (xy 56.549108 58.73256) (xy 56.474634 58.832044) (xy 56.423534 58.969044) (xy 56.423534 58.969046) (xy 56.417023 59.029594) (xy 56.417023 60.826903) (xy 56.423534 60.887451) (xy 56.423534 60.887453) (xy 56.474634 61.024453) (xy 56.549108 61.123938) (xy 56.573525 61.189403) (xy 56.558673 61.257676) (xy 56.549109 61.272557) (xy 56.54336 61.280238) (xy 56.474634 61.372044) (xy 56.423534 61.509044) (xy 56.423534 61.509046) (xy 56.417023 61.569594) (xy 56.417023 63.366903) (xy 56.423534 63.427451) (xy 56.423534 63.427453) (xy 56.474634 63.564453) (xy 56.549108 63.663938) (xy 56.573525 63.729403) (xy 56.558673 63.797676) (xy 56.549108 63.81256) (xy 56.474634 63.912044) (xy 56.423534 64.049044) (xy 56.423534 64.049046) (xy 56.417023 64.109594) (xy 56.417023 65.906903) (xy 56.423534 65.967451) (xy 56.423534 65.967453) (xy 56.474634 66.104453) (xy 56.549108 66.203938) (xy 56.573525 66.269403) (xy 56.558673 66.337676) (xy 56.549108 66.35256) (xy 56.474634 66.452044) (xy 56.423534 66.589044) (xy 56.423534 66.589046) (xy 56.417023 66.649594) (xy 56.417023 68.446903) (xy 56.423534 68.507451) (xy 56.423534 68.507453) (xy 56.474634 68.644453) (xy 56.549108 68.743938) (xy 56.573525 68.809403) (xy 56.558673 68.877676) (xy 56.549108 68.89256) (xy 56.474634 68.992044) (xy 56.423534 69.129044) (xy 56.423534 69.129046) (xy 56.417023 69.189594) (xy 56.417023 70.986903) (xy 56.423534 71.047451) (xy 56.423534 71.047453) (xy 56.474634 71.184453) (xy 56.549108 71.283938) (xy 56.573525 71.349403) (xy 56.558673 71.417676) (xy 56.549108 71.43256) (xy 56.474634 71.532044) (xy 56.423534 71.669044) (xy 56.423534 71.669046) (xy 56.417023 71.729594) (xy 56.417023 73.526903) (xy 56.423534 73.587451) (xy 56.423534 73.587453) (xy 56.474634 73.724453) (xy 56.554416 73.831029) (xy 56.578833 73.896494) (xy 56.563981 73.964767) (xy 56.554416 73.979651) (xy 56.48217 74.076159) (xy 56.482168 74.076162) (xy 56.431926 74.210869) (xy 56.431924 74.210876) (xy 56.425523 74.270404) (xy 56.425523 74.918249) (xy 60.925523 74.918249) (xy 60.925523 74.679999) (xy 61.285036 74.679999) (xy 62.197536 74.679999) (xy 62.197536 73.529999) (xy 62.697536 73.529999) (xy 62.697536 74.679999) (xy 63.610035 74.679999) (xy 63.610035 74.230027) (xy 63.610034 74.230012) (xy 63.599541 74.127301) (xy 63.544394 73.960879) (xy 63.544392 73.960874) (xy 63.452351 73.811653) (xy 63.328381 73.687683) (xy 63.17916 73.595642) (xy 63.179155 73.59564) (xy 63.012733 73.540493) (xy 63.012726 73.540492) (xy 62.910022 73.529999) (xy 62.697536 73.529999) (xy 62.197536 73.529999) (xy 61.985065 73.529999) (xy 61.985048 73.53) (xy 61.882338 73.540493) (xy 61.715916 73.59564) (xy 61.715911 73.595642) (xy 61.56669 73.687683) (xy 61.44272 73.811653) (xy 61.350679 73.960874) (xy 61.350677 73.960879) (xy 61.29553 74.127301) (xy 61.295529 74.127308) (xy 61.285036 74.230012) (xy 61.285036 74.679999) (xy 60.925523 74.679999) (xy 60.925523 74.270421) (xy 60.925522 74.270404) (xy 60.919121 74.210876) (xy 60.919119 74.210869) (xy 60.868877 74.076162) (xy 60.868876 74.07616) (xy 60.796629 73.979651) (xy 60.772212 73.914187) (xy 60.787063 73.845914) (xy 60.796622 73.831038) (xy 60.876412 73.724453) (xy 60.927512 73.58745) (xy 60.931114 73.553941) (xy 60.934022 73.526903) (xy 60.934023 73.526886) (xy 60.934023 71.729611) (xy 60.934022 71.729594) (xy 60.928626 71.679411) (xy 60.927512 71.669048) (xy 60.91074 71.624082) (xy 60.876411 71.532042) (xy 60.87641 71.532041) (xy 60.801938 71.43256) (xy 60.77752 71.367096) (xy 60.792371 71.298823) (xy 60.801938 71.283938) (xy 60.87641 71.184456) (xy 60.876411 71.184455) (xy 60.927511 71.047453) (xy 60.927511 71.047452) (xy 60.927512 71.04745) (xy 60.931114 71.013941) (xy 60.934022 70.986903) (xy 60.934023 70.986886) (xy 60.934023 69.189611) (xy 60.934022 69.189594) (xy 60.93068 69.158519) (xy 60.927512 69.129048) (xy 60.876412 68.992045) (xy 60.876411 68.992042) (xy 60.87641 68.992041) (xy 60.801938 68.89256) (xy 60.77752 68.827096) (xy 60.792371 68.758823) (xy 60.801938 68.743938) (xy 60.87641 68.644456) (xy 60.876411 68.644455) (xy 60.927511 68.507453) (xy 60.927511 68.507452) (xy 60.927512 68.50745) (xy 60.931114 68.473941) (xy 60.934022 68.446903) (xy 60.934023 68.446886) (xy 60.934023 66.649611) (xy 60.934022 66.649594) (xy 60.93068 66.618519) (xy 60.927512 66.589048) (xy 60.876412 66.452045) (xy 60.876411 66.452042) (xy 60.87641 66.452041) (xy 60.801938 66.35256) (xy 60.77752 66.287096) (xy 60.792371 66.218823) (xy 60.801938 66.203938) (xy 60.87641 66.104456) (xy 60.876411 66.104455) (xy 60.927511 65.967453) (xy 60.927511 65.967452) (xy 60.927512 65.96745) (xy 60.931114 65.933941) (xy 60.934022 65.906903) (xy 60.934023 65.906886) (xy 60.934023 64.109611) (xy 60.934022 64.109594) (xy 60.93068 64.078519) (xy 60.927512 64.049048) (xy 60.876412 63.912045) (xy 60.876411 63.912042) (xy 60.87641 63.912041) (xy 60.801938 63.81256) (xy 60.77752 63.747096) (xy 60.792371 63.678823) (xy 60.801938 63.663938) (xy 60.87641 63.564456) (xy 60.876411 63.564455) (xy 60.927511 63.427453) (xy 60.927511 63.427452) (xy 60.927512 63.42745) (xy 60.931114 63.393941) (xy 60.934022 63.366903) (xy 60.934023 63.366886) (xy 60.934023 61.569611) (xy 60.934022 61.569594) (xy 60.93068 61.538519) (xy 60.927512 61.509048) (xy 60.877946 61.376159) (xy 60.876411 61.372042) (xy 60.87641 61.372041) (xy 60.807686 61.280238) (xy 60.801937 61.272559) (xy 60.77752 61.207096) (xy 60.792371 61.138823) (xy 60.801938 61.123938) (xy 60.87641 61.024456) (xy 60.876411 61.024455) (xy 60.927511 60.887453) (xy 60.927511 60.887452) (xy 60.927512 60.88745) (xy 60.931114 60.853941) (xy 60.934022 60.826903) (xy 60.934023 60.826886) (xy 60.934023 59.029611) (xy 60.934022 59.029594) (xy 60.93068 58.998519) (xy 60.927512 58.969048) (xy 60.876412 58.832045) (xy 60.876411 58.832042) (xy 60.87641 58.832041) (xy 60.801938 58.73256) (xy 60.77752 58.667096) (xy 60.792371 58.598823) (xy 60.801938 58.583938) (xy 60.87641 58.484456) (xy 60.876411 58.484455) (xy 60.927511 58.347453) (xy 60.927511 58.347452) (xy 60.927512 58.34745) (xy 60.931114 58.313941) (xy 60.934022 58.286903) (xy 60.934023 58.286886) (xy 60.934023 56.489611) (xy 60.934022 56.489594) (xy 60.93068 56.458519) (xy 60.927512 56.429048) (xy 60.876412 56.292045) (xy 60.876411 56.292042) (xy 60.87641 56.292041) (xy 60.801938 56.19256) (xy 60.77752 56.127096) (xy 60.792371 56.058823) (xy 60.801938 56.043938) (xy 60.87641 55.944456) (xy 60.876411 55.944455) (xy 60.927511 55.807453) (xy 60.927511 55.807452) (xy 60.927512 55.80745) (xy 60.931114 55.773941) (xy 60.934022 55.746903) (xy 60.934023 55.746886) (xy 60.934023 55.730749) (xy 60.953708 55.66371) (xy 61.006512 55.617955) (xy 61.058023 55.606749) (xy 62.846415 55.606749) (xy 62.913454 55.626434) (xy 62.934096 55.643068) (xy 63.231472 55.940444) (xy 63.264957 56.001767) (xy 63.267791 56.028125) (xy 63.267791 71.581997) (xy 63.266482 71.599967) (xy 63.262949 71.624082) (xy 63.267555 71.676711) (xy 63.267791 71.682118) (xy 63.267791 71.690469) (xy 63.271638 71.723387) (xy 63.278403 71.800718) (xy 63.279863 71.807785) (xy 63.279817 71.807794) (xy 63.2815 71.815385) (xy 63.281545 71.815375) (xy 63.28321 71.822401) (xy 63.309764 71.895356) (xy 63.334177 71.969028) (xy 63.337231 71.975577) (xy 63.337187 71.975597) (xy 63.340575 71.982595) (xy 63.340618 71.982574) (xy 63.343854 71.989019) (xy 63.343856 71.989023) (xy 63.386524 72.053896) (xy 63.427261 72.119942) (xy 63.427263 72.119944) (xy 63.431742 72.125609) (xy 63.431704 72.125638) (xy 63.436611 72.131663) (xy 63.436648 72.131633) (xy 63.441293 72.137169) (xy 63.497773 72.190454) (xy 64.762221 73.454902) (xy 64.795706 73.516225) (xy 64.790722 73.585917) (xy 64.74885 73.64185) (xy 64.739638 73.648121) (xy 64.686384 73.680968) (xy 64.561007 73.806345) (xy 64.467922 73.957258) (xy 64.46792 73.957263) (xy 64.412149 74.125571) (xy 64.401536 74.229446) (xy 64.401536 75.630536) (xy 64.401537 75.630552) (xy 64.411972 75.732689) (xy 64.412149 75.734425) (xy 64.467921 75.902737) (xy 64.561006 76.053651) (xy 64.686384 76.179029) (xy 64.755134 76.221434) (xy 64.801857 76.273381) (xy 64.814036 76.326972) (xy 64.814036 81.511921) (xy 64.794351 81.57896) (xy 64.777717 81.599602) (xy 64.651028 81.726291) (xy 64.589705 81.759776) (xy 64.563347 81.76261) (xy 63.861565 81.76261) (xy 63.82424 81.765547) (xy 63.824234 81.765548) (xy 63.664473 81.811963) (xy 63.664468 81.811965) (xy 63.521266 81.896654) (xy 63.521257 81.896661) (xy 63.403621 82.014297) (xy 63.403614 82.014306) (xy 63.318925 82.157508) (xy 63.318923 82.157513) (xy 63.272508 82.317274) (xy 63.272507 82.31728) (xy 63.26957 82.354605) (xy 63.26957 82.787615) (xy 63.272507 82.824939) (xy 63.272508 82.824945) (xy 63.295158 82.902905) (xy 63.294959 82.972775) (xy 63.257017 83.031445) (xy 63.193378 83.060288) (xy 63.176082 83.0615) (xy 62.294294 83.0615) (xy 62.276324 83.060191) (xy 62.252206 83.056658) (xy 62.206651 83.060645) (xy 62.199573 83.061264) (xy 62.194172 83.0615) (xy 62.18582 83.0615) (xy 62.169362 83.063423) (xy 62.152904 83.065347) (xy 62.075577 83.072112) (xy 62.068503 83.073573) (xy 62.068493 83.073526) (xy 62.060905 83.075209) (xy 62.060916 83.075255) (xy 62.05389 83.07692) (xy 61.980944 83.103469) (xy 61.907261 83.127885) (xy 61.900713 83.130939) (xy 61.900693 83.130896) (xy 61.893702 83.13428) (xy 61.893724 83.134323) (xy 61.887269 83.137564) (xy 61.8224 83.180228) (xy 61.756352 83.220968) (xy 61.750682 83.225451) (xy 61.750652 83.225413) (xy 61.744627 83.230322) (xy 61.744657 83.230357) (xy 61.739132 83.234993) (xy 61.739126 83.234998) (xy 61.739126 83.234999) (xy 61.692609 83.284303) (xy 61.685836 83.291482) (xy 61.190337 83.78698) (xy 61.17671 83.798758) (xy 61.157154 83.813318) (xy 61.157153 83.813319) (xy 61.147458 83.824873) (xy 61.089285 83.863573) (xy 61.019425 83.864679) (xy 60.960056 83.82784) (xy 60.930029 83.764751) (xy 60.929183 83.731907) (xy 60.934022 83.686901) (xy 60.934023 83.686886) (xy 60.934023 81.889611) (xy 60.934022 81.889594) (xy 60.93068 81.858519) (xy 60.927512 81.829048) (xy 60.92114 81.811965) (xy 60.876411 81.692042) (xy 60.87641 81.692041) (xy 60.801938 81.59256) (xy 60.77752 81.527096) (xy 60.792371 81.458823) (xy 60.801938 81.443938) (xy 60.87641 81.344456) (xy 60.876411 81.344455) (xy 60.927511 81.207453) (xy 60.927511 81.207452) (xy 60.927512 81.20745) (xy 60.931114 81.173941) (xy 60.934022 81.146903) (xy 60.934023 81.146886) (xy 60.934023 79.349611) (xy 60.934022 79.349594) (xy 60.93068 79.318519) (xy 60.927512 79.289048) (xy 60.876412 79.152045) (xy 60.876411 79.152042) (xy 60.87641 79.152041) (xy 60.801938 79.05256) (xy 60.77752 78.987096) (xy 60.792371 78.918823) (xy 60.801938 78.903938) (xy 60.87641 78.804456) (xy 60.876411 78.804455) (xy 60.927511 78.667453) (xy 60.927511 78.667452) (xy 60.927512 78.66745) (xy 60.931114 78.633941) (xy 60.934022 78.606903) (xy 60.934023 78.606886) (xy 60.934023 76.809611) (xy 60.934022 76.809594) (xy 60.93068 76.778519) (xy 60.927512 76.749048) (xy 60.876412 76.612045) (xy 60.796628 76.505467) (xy 60.772212 76.440003) (xy 60.787064 76.37173) (xy 60.79663 76.356845) (xy 60.868875 76.260338) (xy 60.868877 76.260335) (xy 60.919119 76.125628) (xy 60.919121 76.125621) (xy 60.925522 76.066093) (xy 60.925523 76.066076) (xy 60.925523 75.418249) (xy 56.425523 75.418249) (xy 56.425523 76.066093) (xy 56.431924 76.125621) (xy 56.431926 76.125628) (xy 56.482168 76.260335) (xy 56.482169 76.260337) (xy 56.554416 76.356846) (xy 56.578833 76.42231) (xy 56.563982 76.490583) (xy 56.554416 76.505467) (xy 56.474635 76.612042) (xy 56.474634 76.612042) (xy 56.423534 76.749044) (xy 56.423534 76.749046) (xy 56.417023 76.809594) (xy 56.417023 78.606903) (xy 56.423534 78.667451) (xy 56.423534 78.667453) (xy 56.474634 78.804453) (xy 56.549108 78.903938) (xy 56.573525 78.969403) (xy 56.558673 79.037676) (xy 56.549108 79.05256) (xy 56.474634 79.152044) (xy 56.423534 79.289044) (xy 56.423534 79.289046) (xy 56.417023 79.349594) (xy 56.417023 81.146903) (xy 56.423534 81.207451) (xy 56.423534 81.207453) (xy 56.474634 81.344453) (xy 56.549108 81.443938) (xy 56.573525 81.509403) (xy 56.558673 81.577676) (xy 56.549108 81.59256) (xy 56.474634 81.692044) (xy 56.423534 81.829044) (xy 56.423534 81.829046) (xy 56.417023 81.889594) (xy 56.417023 83.686903) (xy 56.423534 83.747451) (xy 56.423534 83.747453) (xy 56.474634 83.884453) (xy 56.549108 83.983938) (xy 56.573525 84.049403) (xy 56.558673 84.117676) (xy 56.549108 84.13256) (xy 56.474634 84.232044) (xy 56.423534 84.369044) (xy 56.423534 84.369046) (xy 56.417023 84.429594) (xy 56.417023 86.226903) (xy 56.423534 86.287451) (xy 56.423534 86.287453) (xy 56.474634 86.424453) (xy 56.554416 86.531029) (xy 56.578833 86.596494) (xy 56.563981 86.664767) (xy 56.554416 86.679651) (xy 56.48217 86.776159) (xy 56.482168 86.776162) (xy 56.431926 86.910869) (xy 56.431924 86.910876) (xy 56.425523 86.970404) (xy 56.425523 87.618249) (xy 58.801523 87.618249) (xy 58.868562 87.637934) (xy 58.914317 87.690738) (xy 58.925523 87.742249) (xy 58.925523 87.994249) (xy 58.905838 88.061288) (xy 58.853034 88.107043) (xy 58.801523 88.118249) (xy 56.425523 88.118249) (xy 56.425523 88.766093) (xy 56.431924 88.825621) (xy 56.431926 88.825628) (xy 56.482168 88.960335) (xy 56.482169 88.960337) (xy 56.554416 89.056846) (xy 56.578833 89.12231) (xy 56.563982 89.190583) (xy 56.554416 89.205467) (xy 56.474635 89.312042) (xy 56.474634 89.312042) (xy 56.423534 89.449044) (xy 56.423534 89.449046) (xy 56.417023 89.509594) (xy 56.417023 91.306903) (xy 56.423534 91.367451) (xy 56.423534 91.367453) (xy 56.474634 91.504453) (xy 56.549108 91.603938) (xy 56.573525 91.669403) (xy 56.558673 91.737676) (xy 56.549109 91.752557) (xy 56.544251 91.759048) (xy 56.474634 91.852044) (xy 56.423534 91.989044) (xy 56.423534 91.989046) (xy 56.417023 92.049594) (xy 56.417023 93.846903) (xy 56.423534 93.907451) (xy 56.423534 93.907453) (xy 56.474634 94.044453) (xy 56.562262 94.16151) (xy 56.679319 94.249138) (xy 56.816322 94.300238) (xy 56.843573 94.303167) (xy 56.876868 94.306748) (xy 56.876885 94.306749) (xy 60.474161 94.306749) (xy 60.474177 94.306748) (xy 60.501215 94.30384) (xy 60.534724 94.300238) (xy 60.671727 94.249138) (xy 60.788784 94.16151) (xy 60.876412 94.044453) (xy 60.927512 93.90745) (xy 60.931114 93.873941) (xy 60.934022 93.846903) (xy 60.934023 93.846886) (xy 60.934023 93.660176) (xy 60.953708 93.593137) (xy 60.992929 93.554636) (xy 60.993221 93.554455) (xy 61.004857 93.547279) (xy 61.004863 93.547272) (xy 61.010525 93.542797) (xy 61.010556 93.542836) (xy 61.01658 93.537929) (xy 61.016548 93.537891) (xy 61.02207 93.533256) (xy 61.02208 93.53325) (xy 61.044029 93.509984) (xy 61.075369 93.476767) (xy 62.817147 91.734988) (xy 63.453519 91.098615) (xy 63.467145 91.086839) (xy 63.486697 91.072285) (xy 63.496565 91.060525) (xy 63.520654 91.031816) (xy 63.524314 91.027821) (xy 63.53022 91.021916) (xy 63.550774 90.99592) (xy 63.600671 90.936456) (xy 63.600672 90.936453) (xy 63.604643 90.930417) (xy 63.604684 90.930444) (xy 63.608858 90.923892) (xy 63.608815 90.923866) (xy 63.612601 90.917727) (xy 63.612606 90.917721) (xy 63.645414 90.847363) (xy 63.680248 90.778004) (xy 63.680249 90.777998) (xy 63.682716 90.771221) (xy 63.682763 90.771238) (xy 63.685314 90.763899) (xy 63.685268 90.763884) (xy 63.687539 90.757026) (xy 63.687542 90.757022) (xy 63.703246 90.680965) (xy 63.721139 90.605472) (xy 63.721139 90.605469) (xy 63.721978 90.598299) (xy 63.722025 90.598304) (xy 63.722816 90.590573) (xy 63.722769 90.590569) (xy 63.723398 90.583378) (xy 63.721139 90.505735) (xy 63.721139 87.304132) (xy 63.740824 87.237093) (xy 63.793628 87.191338) (xy 63.854879 87.180515) (xy 63.862432 87.18111) (xy 64.50307 87.18111) (xy 64.50307 86.25511) (xy 64.522755 86.188071) (xy 64.575559 86.142316) (xy 64.62707 86.13111) (xy 64.87907 86.13111) (xy 64.946109 86.150795) (xy 64.991864 86.203599) (xy 65.00307 86.25511) (xy 65.00307 87.18111) (xy 65.643714 87.18111) (xy 65.680559 87.17821) (xy 65.680565 87.178209) (xy 65.838263 87.132393) (xy 65.838266 87.132392) (xy 65.979622 87.048795) (xy 65.979631 87.048788) (xy 66.095748 86.932671) (xy 66.095755 86.932662) (xy 66.179351 86.791308) (xy 66.179508 86.79077) (xy 66.179746 86.790396) (xy 66.182452 86.784145) (xy 66.18346 86.784581) (xy 66.217112 86.731883) (xy 66.280583 86.702674) (xy 66.34977 86.712417) (xy 66.402707 86.758018) (xy 66.422585 86.825) (xy 66.422586 86.825366) (xy 66.421151 115.382479) (xy 66.401463 115.449518) (xy 66.348657 115.49527) (xy 66.297197 115.506473) (xy 33.922949 115.518468) (xy 33.855902 115.498808) (xy 33.810128 115.446021) (xy 33.798903 115.394468) (xy 33.798903 111.506) (xy 35.79121 111.506) (xy 35.810347 111.785794) (xy 35.810348 111.785796) (xy 35.867403 112.060364) (xy 35.867408 112.060381) (xy 35.961319 112.324622) (xy 35.96132 112.324624) (xy 36.090348 112.573637) (xy 36.090352 112.573643) (xy 36.228744 112.769699) (xy 36.228745 112.7697) (xy 36.731073 112.267372) (xy 36.80789 112.377078) (xy 36.974922 112.54411) (xy 37.084626 112.620925) (xy 36.58374 113.121811) (xy 36.661046 113.184704) (xy 36.900664 113.330419) (xy 36.900668 113.330421) (xy 37.157888 113.442146) (xy 37.427935 113.51781) (xy 37.427941 113.517811) (xy 37.705775 113.556) (xy 37.986225 113.556) (xy 38.264058 113.517811) (xy 38.264064 113.51781) (xy 38.534111 113.442146) (xy 38.791331 113.330421) (xy 38.791335 113.330419) (xy 39.03095 113.184706) (xy 39.030965 113.184696) (xy 39.108258 113.121811) (xy 38.607373 112.620925) (xy 38.717078 112.54411) (xy 38.88411 112.377078) (xy 38.960926 112.267372) (xy 39.463253 112.769699) (xy 39.601651 112.573636) (xy 39.730679 112.324624) (xy 39.73068 112.324622) (xy 39.824591 112.060381) (xy 39.824596 112.060364) (xy 39.881651 111.785796) (xy 39.881652 111.785794) (xy 39.900789 111.506) (xy 39.881652 111.226205) (xy 39.881651 111.226203) (xy 39.824596 110.951635) (xy 39.824591 110.951618) (xy 39.73068 110.687377) (xy 39.730679 110.687375) (xy 39.601651 110.438363) (xy 39.463253 110.242299) (xy 38.960925 110.744626) (xy 38.88411 110.634922) (xy 38.717078 110.46789) (xy 38.607372 110.391073) (xy 39.108258 109.890187) (xy 39.030953 109.827295) (xy 38.791335 109.68158) (xy 38.791331 109.681578) (xy 38.534111 109.569853) (xy 38.264064 109.494189) (xy 38.264058 109.494188) (xy 37.986225 109.456) (xy 37.705775 109.456) (xy 37.427941 109.494188) (xy 37.427935 109.494189) (xy 37.157888 109.569853) (xy 36.90067 109.681577) (xy 36.661038 109.827301) (xy 36.661034 109.827304) (xy 36.58374 109.890187) (xy 37.084627 110.391073) (xy 36.974922 110.46789) (xy 36.80789 110.634922) (xy 36.731073 110.744626) (xy 36.228745 110.242298) (xy 36.090352 110.438356) (xy 36.090348 110.438362) (xy 35.96132 110.687375) (xy 35.961319 110.687377) (xy 35.867408 110.951618) (xy 35.867403 110.951635) (xy 35.810348 111.226203) (xy 35.810347 111.226205) (xy 35.79121 111.506) (xy 33.798903 111.506) (xy 33.798903 104.284001) (xy 40.700891 104.284001) (xy 40.7213 104.569362) (xy 40.782109 104.848895) (xy 40.882091 105.116958) (xy 41.019191 105.368038) (xy 41.019196 105.368046) (xy 41.125882 105.510561) (xy 41.125883 105.510562) (xy 41.735438 104.901006) (xy 41.784348 104.979999) (xy 41.927931 105.137501) (xy 42.086388 105.257163) (xy 41.479436 105.864115) (xy 41.62196 105.970807) (xy 41.621961 105.970808) (xy 41.873042 106.107908) (xy 41.873041 106.107908) (xy 42.141104 106.20789) (xy 42.420637 106.268699) (xy 42.705999 106.289109) (xy 42.706001 106.289109) (xy 42.991362 106.268699) (xy 43.270895 106.20789) (xy 43.538958 106.107908) (xy 43.790047 105.970803) (xy 43.932561 105.864116) (xy 43.932562 105.864115) (xy 43.325611 105.257163) (xy 43.484069 105.137501) (xy 43.627652 104.979999) (xy 43.67656 104.901007) (xy 44.286115 105.510562) (xy 44.286116 105.510561) (xy 44.392803 105.368047) (xy 44.529908 105.116958) (xy 44.62989 104.848895) (xy 44.690699 104.569362) (xy 44.711109 104.284001) (xy 44.711109 104.283998) (xy 44.690699 103.998637) (xy 44.62989 103.719104) (xy 44.529908 103.451041) (xy 44.392808 103.199961) (xy 44.392807 103.19996) (xy 44.286115 103.057436) (xy 43.67656 103.666991) (xy 43.627652 103.588001) (xy 43.484069 103.430499) (xy 43.32561 103.310835) (xy 43.932562 102.703883) (xy 43.932561 102.703882) (xy 43.790046 102.597196) (xy 43.790038 102.597191) (xy 43.538957 102.460091) (xy 43.538958 102.460091) (xy 43.270895 102.360109) (xy 42.991362 102.2993) (xy 42.706001 102.278891) (xy 42.705999 102.278891) (xy 42.420637 102.2993) (xy 42.141104 102.360109) (xy 41.873041 102.460091) (xy 41.621961 102.597191) (xy 41.621953 102.597196) (xy 41.479437 102.703882) (xy 41.479436 102.703883) (xy 42.086389 103.310835) (xy 41.927931 103.430499) (xy 41.784348 103.588001) (xy 41.735439 103.666992) (xy 41.125883 103.057436) (xy 41.125882 103.057437) (xy 41.019196 103.199953) (xy 41.019191 103.199961) (xy 40.882091 103.451041) (xy 40.782109 103.719104) (xy 40.7213 103.998637) (xy 40.700891 104.283998) (xy 40.700891 104.284001) (xy 33.798903 104.284001) (xy 33.798903 93.846903) (xy 36.837023 93.846903) (xy 36.843534 93.907451) (xy 36.843534 93.907453) (xy 36.894634 94.044453) (xy 36.982262 94.16151) (xy 37.099319 94.249138) (xy 37.236322 94.300238) (xy 37.263573 94.303167) (xy 37.296868 94.306748) (xy 37.296885 94.306749) (xy 39.331954 94.306749) (xy 39.398993 94.326434) (xy 39.417048 94.340554) (xy 39.467005 94.387686) (xy 45.183138 100.103819) (xy 45.216623 100.165142) (xy 45.211639 100.234834) (xy 45.169767 100.290767) (xy 45.104303 100.315184) (xy 45.095457 100.3155) (xy 44.927345 100.3155) (xy 44.866797 100.322011) (xy 44.866795 100.322011) (xy 44.729795 100.373111) (xy 44.612739 100.460739) (xy 44.525111 100.577795) (xy 44.474011 100.714795) (xy 44.474011 100.714797) (xy 44.4675 100.775345) (xy 44.4675 102.372654) (xy 44.474011 102.433202) (xy 44.474011 102.433204) (xy 44.525111 102.570203) (xy 44.525111 102.570204) (xy 44.612739 102.687261) (xy 44.729796 102.774889) (xy 44.797831 102.800265) (xy 44.866795 102.825988) (xy 44.866798 102.825989) (xy 44.906755 102.830285) (xy 44.971306 102.857023) (xy 45.011155 102.914415) (xy 45.0175 102.953574) (xy 45.0175 106.163706) (xy 45.016191 106.181676) (xy 45.012658 106.205791) (xy 45.017264 106.25842) (xy 45.0175 106.263827) (xy 45.0175 106.272178) (xy 45.021347 106.305096) (xy 45.028112 106.382427) (xy 45.029572 106.389494) (xy 45.029526 106.389503) (xy 45.031209 106.397094) (xy 45.031254 106.397084) (xy 45.032919 106.40411) (xy 45.036854 106.41492) (xy 45.059473 106.477065) (xy 45.066992 106.499757) (xy 45.083886 106.550737) (xy 45.08694 106.557286) (xy 45.086896 106.557306) (xy 45.090284 106.564304) (xy 45.090327 106.564283) (xy 45.093563 106.570728) (xy 45.093565 106.570732) (xy 45.136233 106.635605) (xy 45.17697 106.701651) (xy 45.176972 106.701653) (xy 45.181451 106.707318) (xy 45.181413 106.707347) (xy 45.18632 106.713372) (xy 45.186357 106.713342) (xy 45.191002 106.718878) (xy 45.247482 106.772163) (xy 46.408196 107.932877) (xy 46.419977 107.946509) (xy 46.434531 107.966058) (xy 46.464807 107.991463) (xy 46.475005 108.00002) (xy 46.478995 108.003676) (xy 46.484899 108.00958) (xy 46.505456 108.025834) (xy 46.510897 108.030137) (xy 46.540628 108.055084) (xy 46.57036 108.080032) (xy 46.570362 108.080033) (xy 46.576396 108.084002) (xy 46.576369 108.084042) (xy 46.582921 108.088216) (xy 46.582947 108.088175) (xy 46.589099 108.09197) (xy 46.658722 108.124435) (xy 46.659447 108.124773) (xy 46.728812 108.159609) (xy 46.728813 108.159609) (xy 46.728815 108.15961) (xy 46.735594 108.162077) (xy 46.735577 108.162122) (xy 46.742925 108.164676) (xy 46.742941 108.164631) (xy 46.74979 108.166901) (xy 46.749793 108.166901) (xy 46.749794 108.166902) (xy 46.825818 108.182599) (xy 46.901344 108.2005) (xy 46.901345 108.2005) (xy 46.901349 108.200501) (xy 46.908517 108.201339) (xy 46.908511 108.201386) (xy 46.916242 108.202176) (xy 46.916247 108.202129) (xy 46.923437 108.202758) (xy 46.923441 108.202757) (xy 46.923442 108.202758) (xy 47.001045 108.2005) (xy 62.673706 108.2005) (xy 62.691676 108.201809) (xy 62.693862 108.202129) (xy 62.715789 108.205341) (xy 62.768426 108.200735) (xy 62.773828 108.2005) (xy 62.782175 108.2005) (xy 62.78218 108.2005) (xy 62.805835 108.197734) (xy 62.815096 108.196652) (xy 62.892419 108.189888) (xy 62.892422 108.189887) (xy 62.892426 108.189887) (xy 62.892429 108.189885) (xy 62.899493 108.188427) (xy 62.899502 108.188474) (xy 62.907097 108.18679) (xy 62.907087 108.186744) (xy 62.914107 108.185079) (xy 62.914113 108.185079) (xy 62.987065 108.158526) (xy 63.060738 108.134114) (xy 63.060746 108.134108) (xy 63.067284 108.131061) (xy 63.067305 108.131106) (xy 63.074302 108.127719) (xy 63.07428 108.127675) (xy 63.080729 108.124436) (xy 63.080728 108.124436) (xy 63.080732 108.124435) (xy 63.145605 108.081766) (xy 63.211651 108.04103) (xy 63.211655 108.041025) (xy 63.217319 108.036548) (xy 63.21735 108.036587) (xy 63.223374 108.03168) (xy 63.223342 108.031642) (xy 63.228864 108.027007) (xy 63.228874 108.027001) (xy 63.254329 108.00002) (xy 63.282163 107.970518) (xy 63.763518 107.489162) (xy 64.24488 107.007799) (xy 64.258506 106.996023) (xy 64.278058 106.981469) (xy 64.312015 106.941) (xy 64.315675 106.937005) (xy 64.32158 106.931101) (xy 64.327153 106.924051) (xy 64.342133 106.905107) (xy 64.359708 106.884161) (xy 64.392032 106.84564) (xy 64.392037 106.845629) (xy 64.395999 106.839607) (xy 64.39604 106.839634) (xy 64.400218 106.833076) (xy 64.400176 106.83305) (xy 64.403962 106.826911) (xy 64.403967 106.826905) (xy 64.436775 106.756547) (xy 64.471609 106.687188) (xy 64.47161 106.687182) (xy 64.474077 106.680405) (xy 64.474124 106.680422) (xy 64.476675 106.673083) (xy 64.476629 106.673068) (xy 64.4789 106.66621) (xy 64.478903 106.666206) (xy 64.494607 106.590149) (xy 64.5125 106.514656) (xy 64.5125 106.514653) (xy 64.513339 106.507483) (xy 64.513386 106.507488) (xy 64.514177 106.499757) (xy 64.51413 106.499753) (xy 64.514759 106.492562) (xy 64.5125 106.41492) (xy 64.5125 97.854293) (xy 64.513809 97.836322) (xy 64.517341 97.812211) (xy 64.512735 97.759573) (xy 64.5125 97.754171) (xy 64.5125 97.745824) (xy 64.512499 97.745813) (xy 64.508652 97.712904) (xy 64.501887 97.635576) (xy 64.501887 97.635573) (xy 64.501885 97.635568) (xy 64.500427 97.628504) (xy 64.500475 97.628493) (xy 64.498794 97.620909) (xy 64.498746 97.620921) (xy 64.497079 97.613893) (xy 64.497079 97.613887) (xy 64.480192 97.567492) (xy 64.47053 97.540943) (xy 64.455861 97.496677) (xy 64.446114 97.467261) (xy 64.446112 97.467257) (xy 64.44306 97.460712) (xy 64.443104 97.460691) (xy 64.43972 97.4537) (xy 64.439676 97.453723) (xy 64.436437 97.447275) (xy 64.436435 97.447268) (xy 64.418617 97.420178) (xy 64.393767 97.382395) (xy 64.353027 97.316345) (xy 64.348551 97.310685) (xy 64.348589 97.310654) (xy 64.343681 97.304629) (xy 64.343645 97.30466) (xy 64.339005 97.299131) (xy 64.339003 97.299129) (xy 64.339001 97.299126) (xy 64.302699 97.264877) (xy 64.282517 97.245835) (xy 62.811804 95.775123) (xy 62.800022 95.76149) (xy 62.785472 95.741946) (xy 62.785471 95.741945) (xy 62.785469 95.741942) (xy 62.773037 95.73151) (xy 62.744987 95.707972) (xy 62.740998 95.704317) (xy 62.735102 95.698421) (xy 62.735101 95.69842) (xy 62.709103 95.677863) (xy 62.64964 95.627968) (xy 62.649635 95.627965) (xy 62.643605 95.623999) (xy 62.64363 95.623959) (xy 62.637069 95.619779) (xy 62.637045 95.61982) (xy 62.630904 95.616031) (xy 62.56054 95.58322) (xy 62.491185 95.548389) (xy 62.484401 95.54592) (xy 62.484416 95.545876) (xy 62.477071 95.543322) (xy 62.477057 95.543367) (xy 62.470205 95.541096) (xy 62.432177 95.533244) (xy 62.394149 95.525392) (xy 62.318656 95.5075) (xy 62.318654 95.5075) (xy 62.318646 95.507498) (xy 62.311482 95.506661) (xy 62.311487 95.506612) (xy 62.303757 95.505822) (xy 62.303753 95.50587) (xy 62.296562 95.50524) (xy 62.21892 95.5075) (xy 56.753543 95.5075) (xy 56.686504 95.487815) (xy 56.665862 95.471181) (xy 55.658819 94.464138) (xy 55.625334 94.402815) (xy 55.6225 94.376457) (xy 55.6225 75.179999) (xy 61.285037 75.179999) (xy 61.285037 75.629985) (xy 61.29553 75.732696) (xy 61.350677 75.899118) (xy 61.350679 75.899123) (xy 61.44272 76.048344) (xy 61.56669 76.172314) (xy 61.715911 76.264355) (xy 61.715916 76.264357) (xy 61.882338 76.319504) (xy 61.882345 76.319505) (xy 61.985055 76.329998) (xy 62.197535 76.329998) (xy 62.197536 76.329997) (xy 62.197536 75.179999) (xy 62.697536 75.179999) (xy 62.697536 76.329998) (xy 62.910008 76.329998) (xy 62.910022 76.329997) (xy 63.012733 76.319504) (xy 63.179155 76.264357) (xy 63.17916 76.264355) (xy 63.328381 76.172314) (xy 63.452351 76.048344) (xy 63.544392 75.899123) (xy 63.544394 75.899118) (xy 63.599541 75.732696) (xy 63.599542 75.732689) (xy 63.610035 75.629985) (xy 63.610036 75.629972) (xy 63.610036 75.179999) (xy 62.697536 75.179999) (xy 62.197536 75.179999) (xy 61.285037 75.179999) (xy 55.6225 75.179999) (xy 55.6225 46.339543) (xy 55.642185 46.272504) (xy 55.658819 46.251862) (xy 55.950643 45.960038) (xy 56.243554 45.667126) (xy 56.304875 45.633643) (xy 56.374566 45.638627) (xy 56.4305 45.680498) (xy 56.447412 45.711471) (xy 56.465747 45.760626) (xy 56.474635 45.784455) (xy 56.515319 45.838802) (xy 56.54862 45.883287) (xy 56.549108 45.883938) (xy 56.573525 45.949403) (xy 56.558673 46.017676) (xy 56.549108 46.03256) (xy 56.474634 46.132044) (xy 56.423534 46.269044) (xy 56.423534 46.269046) (xy 56.417023 46.329594) (xy 56.417023 48.126903) (xy 56.423534 48.187451) (xy 56.423534 48.187453) (xy 56.474634 48.324453) (xy 56.554416 48.431029) (xy 56.578833 48.496494) (xy 56.563981 48.564767) (xy 56.554416 48.579651) (xy 56.48217 48.676159) (xy 56.482168 48.676162) (xy 56.431926 48.810869) (xy 56.431924 48.810876) (xy 56.425523 48.870404) (xy 56.425523 49.518249) (xy 60.925523 49.518249) (xy 60.925523 48.870421) (xy 60.925522 48.870404) (xy 60.919121 48.810876) (xy 60.919119 48.810869) (xy 60.868877 48.676162) (xy 60.868876 48.67616) (xy 60.796629 48.579651) (xy 60.772212 48.514187) (xy 60.787063 48.445914) (xy 60.796622 48.431038) (xy 60.876412 48.324453) (xy 60.927512 48.18745) (xy 60.931406 48.151227) (xy 60.934022 48.126903) (xy 60.934023 48.126886) (xy 60.934023 46.329611) (xy 60.934022 46.329594) (xy 60.929569 46.288181) (xy 60.927512 46.269048) (xy 60.911735 46.226749) (xy 60.876411 46.132042) (xy 60.87641 46.132041) (xy 60.801938 46.03256) (xy 60.77752 45.967096) (xy 60.792371 45.898823) (xy 60.801938 45.883938) (xy 60.802426 45.883287) (xy 60.860242 45.806054) (xy 60.87641 45.784456) (xy 60.876411 45.784455) (xy 60.888452 45.752174) (xy 60.927512 45.64745) (xy 60.931114 45.613941) (xy 60.934022 45.586903) (xy 60.934023 45.586886) (xy 60.934023 43.789611) (xy 60.934022 43.789594) (xy 60.93068 43.758519) (xy 60.927512 43.729048) (xy 60.923549 43.718424) (xy 60.896935 43.647068) (xy 60.876412 43.592045) (xy 60.788784 43.474988) (xy 60.671727 43.38736) (xy 60.534726 43.33626) (xy 60.474177 43.329749) (xy 60.474161 43.329749) (xy 56.876885 43.329749) (xy 56.876868 43.329749) (xy 56.81632 43.33626) (xy 56.816318 43.33626) (xy 56.679318 43.38736) (xy 56.562262 43.474988) (xy 56.474634 43.592044) (xy 56.423534 43.729044) (xy 56.423534 43.729046) (xy 56.417023 43.789594) (xy 56.417023 43.805749) (xy 56.397338 43.872788) (xy 56.344534 43.918543) (xy 56.293023 43.929749) (xy 56.214045 43.929749) (xy 56.196075 43.92844) (xy 56.171957 43.924907) (xy 56.126402 43.928894) (xy 56.119324 43.929513) (xy 56.113923 43.929749) (xy 56.10557 43.929749) (xy 56.072654 43.933596) (xy 55.995325 43.940361) (xy 55.988257 43.941821) (xy 55.988247 43.941777) (xy 55.980657 43.943459) (xy 55.980668 43.943503) (xy 55.973644 43.945168) (xy 55.973638 43.945169) (xy 55.973638 43.94517) (xy 55.949165 43.954076) (xy 55.900684 43.971722) (xy 55.827008 43.996136) (xy 55.820471 43.999185) (xy 55.820451 43.999143) (xy 55.813447 44.002534) (xy 55.813468 44.002575) (xy 55.80702 44.005813) (xy 55.742145 44.048482) (xy 55.676103 44.089216) (xy 55.670434 44.093699) (xy 55.670404 44.093662) (xy 55.664378 44.098571) (xy 55.664408 44.098606) (xy 55.658883 44.103242) (xy 55.605587 44.159731) (xy 54.373122 45.392195) (xy 54.359495 45.403973) (xy 54.339941 45.418531) (xy 54.305977 45.459006) (xy 54.30233 45.462987) (xy 54.296418 45.4689) (xy 54.275863 45.494896) (xy 54.225967 45.55436) (xy 54.222001 45.560391) (xy 54.221963 45.560366) (xy 54.217782 45.566928) (xy 54.217821 45.566952) (xy 54.214032 45.573094) (xy 54.18122 45.643459) (xy 54.146391 45.71281) (xy 54.143923 45.719593) (xy 54.143878 45.719576) (xy 54.141322 45.726932) (xy 54.141366 45.726947) (xy 54.139096 45.733795) (xy 54.133556 45.760626) (xy 54.123392 45.80985) (xy 54.112576 45.855489) (xy 54.105498 45.885351) (xy 54.104661 45.892519) (xy 54.104613 45.892513) (xy 54.103823 45.900244) (xy 54.10387 45.900249) (xy 54.10324 45.907438) (xy 54.1055 45.985079) (xy 54.1055 94.677706) (xy 54.104191 94.695676) (xy 54.100658 94.719791) (xy 54.105264 94.77242) (xy 54.1055 94.777827) (xy 54.1055 94.786178) (xy 54.109347 94.819096) (xy 54.116112 94.896427) (xy 54.117572 94.903494) (xy 54.117526 94.903503) (xy 54.119209 94.911094) (xy 54.119254 94.911084) (xy 54.120919 94.91811) (xy 54.147473 94.991065) (xy 54.171886 95.064737) (xy 54.17494 95.071286) (xy 54.174896 95.071306) (xy 54.178284 95.078304) (xy 54.178327 95.078283) (xy 54.181563 95.084728) (xy 54.181565 95.084732) (xy 54.224233 95.149605) (xy 54.26497 95.215651) (xy 54.264972 95.215653) (xy 54.269451 95.221318) (xy 54.269413 95.221347) (xy 54.27432 95.227372) (xy 54.274357 95.227342) (xy 54.279002 95.232878) (xy 54.335482 95.286163) (xy 55.806196 96.756877) (xy 55.817977 96.770509) (xy 55.832531 96.790058) (xy 55.862807 96.815463) (xy 55.873005 96.82402) (xy 55.876995 96.827676) (xy 55.882899 96.83358) (xy 55.908896 96.854136) (xy 55.96836 96.904032) (xy 55.968362 96.904033) (xy 55.974396 96.908002) (xy 55.974369 96.908042) (xy 55.980917 96.912214) (xy 55.980943 96.912173) (xy 55.98709 96.915964) (xy 55.987094 96.915967) (xy 56.057453 96.948775) (xy 56.126812 96.983609) (xy 56.126814 96.98361) (xy 56.133595 96.986078) (xy 56.133578 96.986123) (xy 56.140916 96.988674) (xy 56.140932 96.988629) (xy 56.147788 96.9909) (xy 56.147789 96.9909) (xy 56.147793 96.990902) (xy 56.223822 97.0066) (xy 56.299344 97.0245) (xy 56.299346 97.0245) (xy 56.306517 97.025339) (xy 56.306511 97.025386) (xy 56.314242 97.026176) (xy 56.314247 97.026129) (xy 56.321437 97.026758) (xy 56.321441 97.026757) (xy 56.321442 97.026758) (xy 56.399045 97.0245) (xy 61.864457 97.0245) (xy 61.931496 97.044185) (xy 61.952138 97.060819) (xy 62.959181 98.067862) (xy 62.992666 98.129185) (xy 62.9955 98.155543) (xy 62.9955 106.060457) (xy 62.975815 106.127496) (xy 62.959181 106.148138) (xy 62.460138 106.647181) (xy 62.398815 106.680666) (xy 62.372457 106.6835) (xy 47.355543 106.6835) (xy 47.288504 106.663815) (xy 47.267862 106.647181) (xy 46.570819 105.950138) (xy 46.537334 105.888815) (xy 46.5345 105.862457) (xy 46.5345 104.284001) (xy 53.840891 104.284001) (xy 53.8613 104.569362) (xy 53.922109 104.848895) (xy 54.022091 105.116958) (xy 54.159191 105.368038) (xy 54.159196 105.368046) (xy 54.265882 105.510561) (xy 54.265883 105.510562) (xy 54.875438 104.901006) (xy 54.924348 104.979999) (xy 55.067931 105.137501) (xy 55.226388 105.257163) (xy 54.619436 105.864115) (xy 54.76196 105.970807) (xy 54.761961 105.970808) (xy 55.013042 106.107908) (xy 55.013041 106.107908) (xy 55.281104 106.20789) (xy 55.560637 106.268699) (xy 55.845999 106.289109) (xy 55.846001 106.289109) (xy 56.131362 106.268699) (xy 56.410895 106.20789) (xy 56.678958 106.107908) (xy 56.930047 105.970803) (xy 57.072561 105.864116) (xy 57.072562 105.864115) (xy 56.465611 105.257163) (xy 56.624069 105.137501) (xy 56.767652 104.979999) (xy 56.81656 104.901007) (xy 57.426115 105.510562) (xy 57.426116 105.510561) (xy 57.532803 105.368047) (xy 57.669908 105.116958) (xy 57.76989 104.848895) (xy 57.830699 104.569362) (xy 57.851109 104.284001) (xy 57.851109 104.283998) (xy 57.830699 103.998637) (xy 57.76989 103.719104) (xy 57.669908 103.451041) (xy 57.532808 103.199961) (xy 57.532807 103.19996) (xy 57.426115 103.057436) (xy 56.81656 103.666991) (xy 56.767652 103.588001) (xy 56.624069 103.430499) (xy 56.46561 103.310835) (xy 57.072562 102.703883) (xy 57.072561 102.703882) (xy 56.930046 102.597196) (xy 56.930038 102.597191) (xy 56.678957 102.460091) (xy 56.678958 102.460091) (xy 56.410895 102.360109) (xy 56.131362 102.2993) (xy 55.846001 102.278891) (xy 55.845999 102.278891) (xy 55.560637 102.2993) (xy 55.281104 102.360109) (xy 55.013041 102.460091) (xy 54.761961 102.597191) (xy 54.761953 102.597196) (xy 54.619437 102.703882) (xy 54.619436 102.703883) (xy 55.226389 103.310835) (xy 55.067931 103.430499) (xy 54.924348 103.588001) (xy 54.875439 103.666992) (xy 54.265883 103.057436) (xy 54.265882 103.057437) (xy 54.159196 103.199953) (xy 54.159191 103.199961) (xy 54.022091 103.451041) (xy 53.922109 103.719104) (xy 53.8613 103.998637) (xy 53.840891 104.283998) (xy 53.840891 104.284001) (xy 46.5345 104.284001) (xy 46.5345 102.953574) (xy 46.554185 102.886535) (xy 46.606989 102.84078) (xy 46.645245 102.830285) (xy 46.685201 102.825989) (xy 46.685204 102.825988) (xy 46.699768 102.820555) (xy 46.822204 102.774889) (xy 46.939261 102.687261) (xy 47.026889 102.570204) (xy 47.040586 102.53348) (xy 47.066717 102.463424) (xy 47.108588 102.40749) (xy 47.174053 102.383074) (xy 47.242326 102.397926) (xy 47.270579 102.419077) (xy 47.4317 102.580198) (xy 47.619251 102.711523) (xy 47.685802 102.742556) (xy 47.82675 102.808281) (xy 47.826752 102.808281) (xy 47.826757 102.808284) (xy 48.047913 102.867543) (xy 48.210832 102.881796) (xy 48.275998 102.887498) (xy 48.276 102.887498) (xy 48.276002 102.887498) (xy 48.333021 102.882509) (xy 48.504087 102.867543) (xy 48.725243 102.808284) (xy 48.932749 102.711523) (xy 49.1203 102.580198) (xy 49.188319 102.512179) (xy 49.249642 102.478694) (xy 49.319334 102.483678) (xy 49.363681 102.512179) (xy 49.4317 102.580198) (xy 49.619251 102.711523) (xy 49.685802 102.742556) (xy 49.82675 102.808281) (xy 49.826752 102.808281) (xy 49.826757 102.808284) (xy 50.047913 102.867543) (xy 50.210832 102.881796) (xy 50.275998 102.887498) (xy 50.276 102.887498) (xy 50.276002 102.887498) (xy 50.333021 102.882509) (xy 50.504087 102.867543) (xy 50.725243 102.808284) (xy 50.932749 102.711523) (xy 51.1203 102.580198) (xy 51.282198 102.4183) (xy 51.413523 102.230749) (xy 51.418307 102.220487) (xy 51.464476 102.168051) (xy 51.531669 102.148897) (xy 51.598551 102.169111) (xy 51.643072 102.22049) (xy 51.645866 102.226483) (xy 51.696973 102.299471) (xy 51.696974 102.299472) (xy 52.313064 101.683381) (xy 52.339481 101.773351) (xy 52.413327 101.888258) (xy 52.516555 101.977705) (xy 52.640801 102.034446) (xy 52.665548 102.038004) (xy 52.050526 102.653025) (xy 52.050526 102.653026) (xy 52.123512 102.704131) (xy 52.123516 102.704133) (xy 52.329673 102.800265) (xy 52.329682 102.800269) (xy 52.549389 102.859139) (xy 52.5494 102.859141) (xy 52.775998 102.878966) (xy 52.776002 102.878966) (xy 53.002599 102.859141) (xy 53.00261 102.859139) (xy 53.222317 102.800269) (xy 53.222331 102.800264) (xy 53.428478 102.704136) (xy 53.501472 102.653025) (xy 52.886451 102.038004) (xy 52.911199 102.034446) (xy 53.035445 101.977705) (xy 53.138673 101.888258) (xy 53.212519 101.773351) (xy 53.238935 101.683382) (xy 53.855025 102.299472) (xy 53.906136 102.226478) (xy 54.002264 102.020331) (xy 54.002269 102.020317) (xy 54.061139 101.80061) (xy 54.061141 101.800599) (xy 54.080966 101.574002) (xy 54.080966 101.573997) (xy 54.061141 101.3474) (xy 54.061139 101.347389) (xy 54.031988 101.238593) (xy 54.033651 101.168743) (xy 54.072814 101.110881) (xy 54.137042 101.083377) (xy 54.151763 101.0825) (xy 57.540457 101.0825) (xy 57.607496 101.102185) (xy 57.628138 101.118819) (xy 57.879181 101.369862) (xy 57.912666 101.431185) (xy 57.9155 101.457543) (xy 57.9155 103.059706) (xy 57.914191 103.077676) (xy 57.910658 103.101791) (xy 57.915264 103.15442) (xy 57.9155 103.159827) (xy 57.9155 103.168178) (xy 57.919347 103.201096) (xy 57.926112 103.278427) (xy 57.927572 103.285494) (xy 57.927526 103.285503) (xy 57.929209 103.293094) (xy 57.929254 103.293084) (xy 57.930919 103.30011) (xy 57.957473 103.373065) (xy 57.979446 103.439376) (xy 57.981886 103.446737) (xy 57.98494 103.453286) (xy 57.984896 103.453306) (xy 57.988284 103.460304) (xy 57.988327 103.460283) (xy 57.991568 103.466737) (xy 58.034232 103.531604) (xy 58.059541 103.572636) (xy 58.07497 103.597651) (xy 58.074972 103.597653) (xy 58.079451 103.603318) (xy 58.079413 103.603347) (xy 58.08432 103.609372) (xy 58.084357 103.609342) (xy 58.089002 103.614878) (xy 58.145482 103.668163) (xy 59.344118 104.866799) (xy 59.377603 104.928122) (xy 59.380013 104.944239) (xy 59.386477 105.022241) (xy 59.441745 105.24049) (xy 59.532182 105.446668) (xy 59.655318 105.635141) (xy 59.655326 105.635152) (xy 59.807798 105.800778) (xy 59.807802 105.800782) (xy 59.985466 105.939065) (xy 59.985467 105.939065) (xy 59.985469 105.939067) (xy 60.04412 105.970807) (xy 60.183468 106.046218) (xy 60.396407 106.11932) (xy 60.618473 106.156376) (xy 60.843611 106.156376) (xy 61.065677 106.11932) (xy 61.278616 106.046218) (xy 61.476618 105.939065) (xy 61.654282 105.800782) (xy 61.806764 105.635144) (xy 61.929902 105.446667) (xy 62.020338 105.240492) (xy 62.075606 105.022244) (xy 62.08207 104.944239) (xy 62.094198 104.797881) (xy 62.094198 104.79787) (xy 62.075607 104.573516) (xy 62.075605 104.573504) (xy 62.020338 104.355261) (xy 61.98908 104.284) (xy 61.929902 104.149085) (xy 61.806764 103.960608) (xy 61.806761 103.960605) (xy 61.806757 103.960599) (xy 61.654285 103.794973) (xy 61.65428 103.794968) (xy 61.476619 103.656688) (xy 61.476619 103.656687) (xy 61.433345 103.633269) (xy 61.383755 103.584049) (xy 61.368647 103.515833) (xy 61.392817 103.450277) (xy 61.42124 103.422639) (xy 61.602121 103.295984) (xy 61.769147 103.128958) (xy 61.904642 102.935454) (xy 62.004471 102.721368) (xy 62.004474 102.721362) (xy 62.061678 102.507876) (xy 61.164728 102.507876) (xy 61.190535 102.46772) (xy 61.231042 102.329765) (xy 61.231042 102.185987) (xy 61.190535 102.048032) (xy 61.164728 102.007876) (xy 62.061678 102.007876) (xy 62.061677 102.007875) (xy 62.004474 101.794389) (xy 62.004471 101.794383) (xy 61.904642 101.580298) (xy 61.904641 101.580296) (xy 61.769155 101.386802) (xy 61.76915 101.386796) (xy 61.653314 101.27096) (xy 61.619829 101.209637) (xy 61.624813 101.139945) (xy 61.666685 101.084012) (xy 61.697654 101.0671) (xy 61.827246 101.018765) (xy 61.944303 100.931137) (xy 62.031931 100.81408) (xy 62.083031 100.677077) (xy 62.089345 100.618349) (xy 62.089541 100.61653) (xy 62.089542 100.616513) (xy 62.089542 98.819238) (xy 62.089541 98.819221) (xy 62.086199 98.788146) (xy 62.083031 98.758675) (xy 62.07846 98.746421) (xy 62.052183 98.67597) (xy 62.031931 98.621672) (xy 61.944303 98.504615) (xy 61.827246 98.416987) (xy 61.775928 98.397846) (xy 61.690245 98.365887) (xy 61.629696 98.359376) (xy 61.62968 98.359376) (xy 59.832404 98.359376) (xy 59.832387 98.359376) (xy 59.771839 98.365887) (xy 59.771837 98.365887) (xy 59.634837 98.416987) (xy 59.517781 98.504615) (xy 59.430153 98.621671) (xy 59.379053 98.758671) (xy 59.379053 98.758673) (xy 59.372542 98.819221) (xy 59.372542 98.894499) (xy 59.352857 98.961538) (xy 59.300053 99.007293) (xy 59.230895 99.017237) (xy 59.167339 98.988212) (xy 59.160861 98.98218) (xy 59.001804 98.823123) (xy 58.990022 98.80949) (xy 58.975472 98.789946) (xy 58.975471 98.789945) (xy 58.975469 98.789942) (xy 58.974595 98.789208) (xy 58.934987 98.755972) (xy 58.930998 98.752317) (xy 58.925102 98.746421) (xy 58.925101 98.74642) (xy 58.899103 98.725863) (xy 58.83964 98.675968) (xy 58.839635 98.675965) (xy 58.833605 98.671999) (xy 58.83363 98.671959) (xy 58.827069 98.667779) (xy 58.827045 98.66782) (xy 58.820904 98.664031) (xy 58.75054 98.63122) (xy 58.681185 98.596389) (xy 58.674401 98.59392) (xy 58.674416 98.593876) (xy 58.667071 98.591322) (xy 58.667057 98.591367) (xy 58.660205 98.589096) (xy 58.622177 98.581244) (xy 58.584149 98.573392) (xy 58.508656 98.5555) (xy 58.508654 98.5555) (xy 58.508646 98.555498) (xy 58.501482 98.554661) (xy 58.501487 98.554612) (xy 58.493757 98.553822) (xy 58.493753 98.55387) (xy 58.486562 98.55324) (xy 58.40892 98.5555) (xy 54.975543 98.5555) (xy 54.908504 98.535815) (xy 54.887862 98.519181) (xy 52.414962 96.046281) (xy 52.381477 95.984958) (xy 52.386461 95.915266) (xy 52.428333 95.859333) (xy 52.459303 95.84242) (xy 52.521727 95.819138) (xy 52.638784 95.73151) (xy 52.726412 95.614453) (xy 52.777512 95.47745) (xy 52.781114 95.443941) (xy 52.784022 95.416903) (xy 52.784023 95.416886) (xy 52.784023 91.819611) (xy 52.784022 91.819594) (xy 52.78068 91.788519) (xy 52.777512 91.759048) (xy 52.775092 91.75256) (xy 52.755045 91.698813) (xy 52.726412 91.622045) (xy 52.638784 91.504988) (xy 52.521727 91.41736) (xy 52.384726 91.36626) (xy 52.324177 91.359749) (xy 52.324161 91.359749) (xy 50.526885 91.359749) (xy 50.526868 91.359749) (xy 50.46632 91.36626) (xy 50.466318 91.36626) (xy 50.329316 91.41736) (xy 50.329316 91.417361) (xy 50.222741 91.497142) (xy 50.157277 91.521559) (xy 50.089004 91.506707) (xy 50.07412 91.497142) (xy 49.977611 91.424895) (xy 49.977609 91.424894) (xy 49.842902 91.374652) (xy 49.842895 91.37465) (xy 49.783367 91.368249) (xy 49.135523 91.368249) (xy 49.135523 93.744249) (xy 49.115838 93.811288) (xy 49.063034 93.857043) (xy 49.011523 93.868249) (xy 48.759523 93.868249) (xy 48.692484 93.848564) (xy 48.646729 93.79576) (xy 48.635523 93.744249) (xy 48.635523 91.368249) (xy 47.987678 91.368249) (xy 47.92815 91.37465) (xy 47.928143 91.374652) (xy 47.793436 91.424894) (xy 47.793433 91.424896) (xy 47.696925 91.497142) (xy 47.63146 91.521559) (xy 47.563187 91.506707) (xy 47.548303 91.497142) (xy 47.441727 91.41736) (xy 47.304726 91.36626) (xy 47.244177 91.359749) (xy 47.244161 91.359749) (xy 45.446885 91.359749) (xy 45.446868 91.359749) (xy 45.38632 91.36626) (xy 45.386318 91.36626) (xy 45.249318 91.41736) (xy 45.132262 91.504988) (xy 45.044634 91.622044) (xy 44.993534 91.759044) (xy 44.993534 91.759046) (xy 44.987023 91.819594) (xy 44.987023 95.416903) (xy 44.993534 95.477451) (xy 44.993534 95.477453) (xy 45.044634 95.614453) (xy 45.132262 95.73151) (xy 45.249319 95.819138) (xy 45.386322 95.870238) (xy 45.413573 95.873167) (xy 45.446868 95.876748) (xy 45.446885 95.876749) (xy 46.51998 95.876749) (xy 46.587019 95.896434) (xy 46.607661 95.913068) (xy 47.95947 97.264877) (xy 47.971251 97.278509) (xy 47.985805 97.298058) (xy 48.026286 97.332025) (xy 48.03026 97.335667) (xy 48.036174 97.341581) (xy 48.062169 97.362135) (xy 48.121634 97.412032) (xy 48.121635 97.412032) (xy 48.121637 97.412034) (xy 48.12767 97.416002) (xy 48.127644 97.416041) (xy 48.134201 97.420218) (xy 48.134227 97.420178) (xy 48.140365 97.423964) (xy 48.140369 97.423967) (xy 48.210726 97.456775) (xy 48.280086 97.491609) (xy 48.280092 97.49161) (xy 48.28688 97.494082) (xy 48.286863 97.494128) (xy 48.294198 97.496677) (xy 48.294214 97.496632) (xy 48.301063 97.498902) (xy 48.301068 97.498903) (xy 48.377124 97.514607) (xy 48.437877 97.529006) (xy 48.452613 97.532499) (xy 48.452614 97.532499) (xy 48.452618 97.5325) (xy 48.452622 97.5325) (xy 48.459791 97.533338) (xy 48.459785 97.533386) (xy 48.467516 97.534177) (xy 48.467521 97.53413) (xy 48.474711 97.534759) (xy 48.474715 97.534758) (xy 48.474716 97.534759) (xy 48.552354 97.5325) (xy 50.180457 97.5325) (xy 50.247496 97.552185) (xy 50.268138 97.568819) (xy 52.764845 100.065526) (xy 52.79833 100.126849) (xy 52.793346 100.196541) (xy 52.751474 100.252474) (xy 52.687972 100.276735) (xy 52.549399 100.288858) (xy 52.549389 100.28886) (xy 52.329682 100.34773) (xy 52.329673 100.347734) (xy 52.123513 100.443868) (xy 52.050526 100.494973) (xy 52.665548 101.109995) (xy 52.640801 101.113554) (xy 52.516555 101.170295) (xy 52.413327 101.259742) (xy 52.339481 101.374649) (xy 52.313064 101.464617) (xy 51.696973 100.848526) (xy 51.696972 100.848527) (xy 51.645867 100.921513) (xy 51.64307 100.927513) (xy 51.596897 100.979951) (xy 51.529703 100.999102) (xy 51.462822 100.978885) (xy 51.418307 100.927511) (xy 51.41551 100.921513) (xy 51.413523 100.917251) (xy 51.282198 100.7297) (xy 51.1203 100.567802) (xy 50.932749 100.436477) (xy 50.932745 100.436475) (xy 50.725249 100.339718) (xy 50.725238 100.339714) (xy 50.504089 100.280457) (xy 50.504082 100.280456) (xy 50.324447 100.26474) (xy 50.259379 100.239287) (xy 50.247574 100.228893) (xy 49.603804 99.585123) (xy 49.592022 99.57149) (xy 49.577472 99.551946) (xy 49.577471 99.551945) (xy 49.577469 99.551942) (xy 49.576595 99.551208) (xy 49.536987 99.517972) (xy 49.532998 99.514317) (xy 49.527102 99.508421) (xy 49.527101 99.50842) (xy 49.501103 99.487863) (xy 49.44164 99.437968) (xy 49.441635 99.437965) (xy 49.435605 99.433999) (xy 49.43563 99.433959) (xy 49.429069 99.429779) (xy 49.429045 99.42982) (xy 49.422904 99.426031) (xy 49.35254 99.39322) (xy 49.283185 99.358389) (xy 49.276401 99.35592) (xy 49.276416 99.355876) (xy 49.269071 99.353322) (xy 49.269057 99.353367) (xy 49.262205 99.351096) (xy 49.224177 99.343244) (xy 49.186149 99.335392) (xy 49.110656 99.3175) (xy 49.110654 99.3175) (xy 49.110646 99.317498) (xy 49.103482 99.316661) (xy 49.103487 99.316612) (xy 49.095757 99.315822) (xy 49.095753 99.31587) (xy 49.088562 99.31524) (xy 49.01092 99.3175) (xy 48.428531 99.3175) (xy 48.361492 99.297815) (xy 48.34085 99.281181) (xy 47.649418 98.589749) (xy 47.637636 98.576116) (xy 47.623086 98.556572) (xy 47.623085 98.556571) (xy 47.623083 98.556568) (xy 47.619868 98.55387) (xy 47.582601 98.522598) (xy 47.578612 98.518943) (xy 47.572716 98.513047) (xy 47.572715 98.513046) (xy 47.546717 98.492489) (xy 47.487254 98.442594) (xy 47.487249 98.442591) (xy 47.481219 98.438625) (xy 47.481244 98.438585) (xy 47.474683 98.434405) (xy 47.474659 98.434446) (xy 47.468518 98.430657) (xy 47.398154 98.397846) (xy 47.328799 98.363015) (xy 47.322015 98.360546) (xy 47.32203 98.360502) (xy 47.314685 98.357948) (xy 47.314671 98.357993) (xy 47.307819 98.355722) (xy 47.269791 98.34787) (xy 47.231763 98.340018) (xy 47.15627 98.322126) (xy 47.156268 98.322126) (xy 47.15626 98.322124) (xy 47.149096 98.321287) (xy 47.149101 98.321238) (xy 47.141371 98.320448) (xy 47.141367 98.320496) (xy 47.134176 98.319866) (xy 47.056534 98.322126) (xy 46.619713 98.322126) (xy 46.552674 98.302441) (xy 46.532032 98.285807) (xy 42.196819 93.950594) (xy 42.163334 93.889271) (xy 42.1605 93.862913) (xy 42.1605 90.742293) (xy 42.161809 90.724322) (xy 42.165341 90.700211) (xy 42.160735 90.647573) (xy 42.1605 90.642171) (xy 42.1605 90.633824) (xy 42.160499 90.633813) (xy 42.156652 90.600904) (xy 42.149887 90.523576) (xy 42.149887 90.523573) (xy 42.149885 90.523568) (xy 42.148427 90.516504) (xy 42.148475 90.516493) (xy 42.146794 90.508909) (xy 42.146746 90.508921) (xy 42.145079 90.501893) (xy 42.145079 90.501887) (xy 42.11853 90.428944) (xy 42.094114 90.355261) (xy 42.094112 90.355257) (xy 42.09106 90.348712) (xy 42.091104 90.348691) (xy 42.08772 90.341701) (xy 42.087676 90.341724) (xy 42.084438 90.335278) (xy 42.084435 90.335268) (xy 42.041771 90.2704) (xy 42.00103 90.204349) (xy 42.001025 90.204344) (xy 41.996552 90.198686) (xy 41.99659 90.198655) (xy 41.991681 90.192629) (xy 41.991645 90.19266) (xy 41.987005 90.187131) (xy 41.987003 90.187129) (xy 41.987001 90.187126) (xy 41.955891 90.157775) (xy 41.930517 90.133835) (xy 41.729803 89.933122) (xy 41.71802 89.919488) (xy 41.703469 89.899942) (xy 41.702595 89.899208) (xy 41.662987 89.865972) (xy 41.658998 89.862317) (xy 41.653102 89.856421) (xy 41.653101 89.85642) (xy 41.627103 89.835863) (xy 41.56764 89.785968) (xy 41.567635 89.785965) (xy 41.561605 89.781999) (xy 41.56163 89.781959) (xy 41.555069 89.777779) (xy 41.555045 89.77782) (xy 41.548904 89.774031) (xy 41.47854 89.74122) (xy 41.422372 89.713011) (xy 41.371298 89.665334) (xy 41.354023 89.602201) (xy 41.354023 89.509611) (xy 41.354022 89.509594) (xy 41.35068 89.478519) (xy 41.347512 89.449048) (xy 41.296412 89.312045) (xy 41.216628 89.205467) (xy 41.192212 89.140003) (xy 41.207064 89.07173) (xy 41.21663 89.056845) (xy 41.288875 88.960338) (xy 41.288877 88.960335) (xy 41.339119 88.825628) (xy 41.339121 88.825621) (xy 41.345522 88.766093) (xy 41.345523 88.766076) (xy 41.345523 88.118249) (xy 36.845523 88.118249) (xy 36.845523 88.766093) (xy 36.851924 88.825621) (xy 36.851926 88.825628) (xy 36.902168 88.960335) (xy 36.902169 88.960337) (xy 36.974416 89.056846) (xy 36.998833 89.12231) (xy 36.983982 89.190583) (xy 36.974416 89.205467) (xy 36.894635 89.312042) (xy 36.894634 89.312042) (xy 36.843534 89.449044) (xy 36.843534 89.449046) (xy 36.837023 89.509594) (xy 36.837023 91.306903) (xy 36.843534 91.367451) (xy 36.843534 91.367453) (xy 36.894634 91.504453) (xy 36.969108 91.603938) (xy 36.993525 91.669403) (xy 36.978673 91.737676) (xy 36.969109 91.752557) (xy 36.964251 91.759048) (xy 36.894634 91.852044) (xy 36.843534 91.989044) (xy 36.843534 91.989046) (xy 36.837023 92.049594) (xy 36.837023 93.846903) (xy 33.798903 93.846903) (xy 33.798903 86.226903) (xy 36.837023 86.226903) (xy 36.843534 86.287451) (xy 36.843534 86.287453) (xy 36.894634 86.424453) (xy 36.974416 86.531029) (xy 36.998833 86.596494) (xy 36.983981 86.664767) (xy 36.974416 86.679651) (xy 36.90217 86.776159) (xy 36.902168 86.776162) (xy 36.851926 86.910869) (xy 36.851924 86.910876) (xy 36.845523 86.970404) (xy 36.845523 87.618249) (xy 41.345523 87.618249) (xy 41.345523 86.970421) (xy 41.345522 86.970404) (xy 41.339121 86.910876) (xy 41.339119 86.910869) (xy 41.288877 86.776162) (xy 41.288876 86.77616) (xy 41.216629 86.679651) (xy 41.192212 86.614187) (xy 41.207063 86.545914) (xy 41.216622 86.531038) (xy 41.296412 86.424453) (xy 41.347512 86.28745) (xy 41.351114 86.253941) (xy 41.354022 86.226903) (xy 41.354023 86.226886) (xy 41.354023 84.429611) (xy 41.354022 84.429594) (xy 41.350615 84.397912) (xy 41.347512 84.369048) (xy 41.305151 84.255476) (xy 41.296411 84.232042) (xy 41.29641 84.232041) (xy 41.221938 84.13256) (xy 41.19752 84.067096) (xy 41.212371 83.998823) (xy 41.221938 83.983938) (xy 41.29641 83.884456) (xy 41.296411 83.884455) (xy 41.304159 83.863684) (xy 41.347512 83.74745) (xy 41.351114 83.713941) (xy 41.354022 83.686903) (xy 41.354023 83.686886) (xy 41.354023 81.889611) (xy 41.354022 81.889594) (xy 41.35068 81.858519) (xy 41.347512 81.829048) (xy 41.34114 81.811965) (xy 41.296411 81.692042) (xy 41.29641 81.692041) (xy 41.221938 81.59256) (xy 41.19752 81.527096) (xy 41.212371 81.458823) (xy 41.221938 81.443938) (xy 41.29641 81.344456) (xy 41.296411 81.344455) (xy 41.347511 81.207453) (xy 41.347511 81.207452) (xy 41.347512 81.20745) (xy 41.351114 81.173941) (xy 41.354022 81.146903) (xy 41.354023 81.146886) (xy 41.354023 79.349611) (xy 41.354022 79.349594) (xy 41.35068 79.318519) (xy 41.347512 79.289048) (xy 41.296412 79.152045) (xy 41.296411 79.152042) (xy 41.29641 79.152041) (xy 41.221938 79.05256) (xy 41.19752 78.987096) (xy 41.212371 78.918823) (xy 41.221938 78.903938) (xy 41.29641 78.804456) (xy 41.296411 78.804455) (xy 41.347511 78.667453) (xy 41.347511 78.667452) (xy 41.347512 78.66745) (xy 41.351114 78.633941) (xy 41.354022 78.606903) (xy 41.354023 78.606886) (xy 41.354023 76.809611) (xy 41.354022 76.809594) (xy 41.35068 76.778519) (xy 41.347512 76.749048) (xy 41.296412 76.612045) (xy 41.216628 76.505467) (xy 41.192212 76.440003) (xy 41.207064 76.37173) (xy 41.21663 76.356845) (xy 41.288875 76.260338) (xy 41.288877 76.260335) (xy 41.339119 76.125628) (xy 41.339121 76.125621) (xy 41.345522 76.066093) (xy 41.345523 76.066076) (xy 41.345523 75.418249) (xy 36.845523 75.418249) (xy 36.845523 76.066093) (xy 36.851924 76.125621) (xy 36.851926 76.125628) (xy 36.902168 76.260335) (xy 36.902169 76.260337) (xy 36.974416 76.356846) (xy 36.998833 76.42231) (xy 36.983982 76.490583) (xy 36.974416 76.505467) (xy 36.894635 76.612042) (xy 36.894634 76.612042) (xy 36.843534 76.749044) (xy 36.843534 76.749046) (xy 36.837023 76.809594) (xy 36.837023 78.606903) (xy 36.843534 78.667451) (xy 36.843534 78.667453) (xy 36.894634 78.804453) (xy 36.969108 78.903938) (xy 36.993525 78.969403) (xy 36.978673 79.037676) (xy 36.969108 79.05256) (xy 36.894634 79.152044) (xy 36.843534 79.289044) (xy 36.843534 79.289046) (xy 36.837023 79.349594) (xy 36.837023 81.146903) (xy 36.843534 81.207451) (xy 36.843534 81.207453) (xy 36.894634 81.344453) (xy 36.969108 81.443938) (xy 36.993525 81.509403) (xy 36.978673 81.577676) (xy 36.969108 81.59256) (xy 36.894634 81.692044) (xy 36.843534 81.829044) (xy 36.843534 81.829046) (xy 36.837023 81.889594) (xy 36.837023 83.686903) (xy 36.843534 83.747451) (xy 36.843534 83.747453) (xy 36.894634 83.884453) (xy 36.969108 83.983938) (xy 36.993525 84.049403) (xy 36.978673 84.117676) (xy 36.969108 84.13256) (xy 36.894634 84.232044) (xy 36.843534 84.369044) (xy 36.843534 84.369046) (xy 36.837023 84.429594) (xy 36.837023 86.226903) (xy 33.798903 86.226903) (xy 33.798903 73.526903) (xy 36.837023 73.526903) (xy 36.843534 73.587451) (xy 36.843534 73.587453) (xy 36.894634 73.724453) (xy 36.974416 73.831029) (xy 36.998833 73.896494) (xy 36.983981 73.964767) (xy 36.974416 73.979651) (xy 36.90217 74.076159) (xy 36.902168 74.076162) (xy 36.851926 74.210869) (xy 36.851924 74.210876) (xy 36.845523 74.270404) (xy 36.845523 74.918249) (xy 41.345523 74.918249) (xy 41.345523 74.270421) (xy 41.345522 74.270404) (xy 41.339121 74.210876) (xy 41.339119 74.210869) (xy 41.288877 74.076162) (xy 41.288876 74.07616) (xy 41.216629 73.979651) (xy 41.192212 73.914187) (xy 41.207063 73.845914) (xy 41.216622 73.831038) (xy 41.296412 73.724453) (xy 41.347512 73.58745) (xy 41.351114 73.553941) (xy 41.354022 73.526903) (xy 41.354023 73.526886) (xy 41.354023 71.729611) (xy 41.354022 71.729594) (xy 41.348626 71.679411) (xy 41.347512 71.669048) (xy 41.33074 71.624082) (xy 41.296411 71.532042) (xy 41.29641 71.532041) (xy 41.221938 71.43256) (xy 41.19752 71.367096) (xy 41.212371 71.298823) (xy 41.221938 71.283938) (xy 41.29641 71.184456) (xy 41.296411 71.184455) (xy 41.347511 71.047453) (xy 41.347511 71.047452) (xy 41.347512 71.04745) (xy 41.351114 71.013941) (xy 41.354022 70.986903) (xy 41.354023 70.986886) (xy 41.354023 69.189611) (xy 41.354022 69.189594) (xy 41.35068 69.158519) (xy 41.347512 69.129048) (xy 41.296412 68.992045) (xy 41.296411 68.992042) (xy 41.29641 68.992041) (xy 41.221938 68.89256) (xy 41.19752 68.827096) (xy 41.212371 68.758823) (xy 41.221938 68.743938) (xy 41.29641 68.644456) (xy 41.296411 68.644455) (xy 41.347511 68.507453) (xy 41.347511 68.507452) (xy 41.347512 68.50745) (xy 41.351114 68.473941) (xy 41.354022 68.446903) (xy 41.354023 68.446886) (xy 41.354023 66.649611) (xy 41.354022 66.649594) (xy 41.35068 66.618519) (xy 41.347512 66.589048) (xy 41.296412 66.452045) (xy 41.296411 66.452042) (xy 41.29641 66.452041) (xy 41.221938 66.35256) (xy 41.19752 66.287096) (xy 41.212371 66.218823) (xy 41.221938 66.203938) (xy 41.29641 66.104456) (xy 41.296411 66.104455) (xy 41.347511 65.967453) (xy 41.347511 65.967452) (xy 41.347512 65.96745) (xy 41.351114 65.933941) (xy 41.354022 65.906903) (xy 41.354023 65.906886) (xy 41.354023 64.109611) (xy 41.354022 64.109594) (xy 41.35068 64.078519) (xy 41.347512 64.049048) (xy 41.296412 63.912045) (xy 41.216628 63.805467) (xy 41.192212 63.740003) (xy 41.207064 63.67173) (xy 41.21663 63.656845) (xy 41.288875 63.560338) (xy 41.288877 63.560335) (xy 41.339119 63.425628) (xy 41.339121 63.425621) (xy 41.345522 63.366093) (xy 41.345523 63.366076) (xy 41.345523 62.718249) (xy 36.845523 62.718249) (xy 36.845523 63.366093) (xy 36.851924 63.425621) (xy 36.851926 63.425628) (xy 36.902168 63.560335) (xy 36.902169 63.560337) (xy 36.974416 63.656846) (xy 36.998833 63.72231) (xy 36.983982 63.790583) (xy 36.974416 63.805467) (xy 36.894635 63.912042) (xy 36.894634 63.912042) (xy 36.843534 64.049044) (xy 36.843534 64.049046) (xy 36.837023 64.109594) (xy 36.837023 65.906903) (xy 36.843534 65.967451) (xy 36.843534 65.967453) (xy 36.894634 66.104453) (xy 36.969108 66.203938) (xy 36.993525 66.269403) (xy 36.978673 66.337676) (xy 36.969108 66.35256) (xy 36.894634 66.452044) (xy 36.843534 66.589044) (xy 36.843534 66.589046) (xy 36.837023 66.649594) (xy 36.837023 68.446903) (xy 36.843534 68.507451) (xy 36.843534 68.507453) (xy 36.894634 68.644453) (xy 36.969108 68.743938) (xy 36.993525 68.809403) (xy 36.978673 68.877676) (xy 36.969108 68.89256) (xy 36.894634 68.992044) (xy 36.843534 69.129044) (xy 36.843534 69.129046) (xy 36.837023 69.189594) (xy 36.837023 70.986903) (xy 36.843534 71.047451) (xy 36.843534 71.047453) (xy 36.894634 71.184453) (xy 36.969108 71.283938) (xy 36.993525 71.349403) (xy 36.978673 71.417676) (xy 36.969108 71.43256) (xy 36.894634 71.532044) (xy 36.843534 71.669044) (xy 36.843534 71.669046) (xy 36.837023 71.729594) (xy 36.837023 73.526903) (xy 33.798903 73.526903) (xy 33.798903 60.826903) (xy 36.837023 60.826903) (xy 36.843534 60.887451) (xy 36.843534 60.887453) (xy 36.894634 61.024453) (xy 36.974416 61.131029) (xy 36.998833 61.196494) (xy 36.983981 61.264767) (xy 36.974416 61.279651) (xy 36.90217 61.376159) (xy 36.902168 61.376162) (xy 36.851926 61.510869) (xy 36.851924 61.510876) (xy 36.845523 61.570404) (xy 36.845523 62.218249) (xy 41.345523 62.218249) (xy 41.345523 61.570421) (xy 41.345522 61.570404) (xy 41.339121 61.510876) (xy 41.339119 61.510869) (xy 41.288877 61.376162) (xy 41.288876 61.37616) (xy 41.216629 61.279651) (xy 41.192212 61.214187) (xy 41.207063 61.145914) (xy 41.216622 61.131038) (xy 41.296412 61.024453) (xy 41.347512 60.88745) (xy 41.351114 60.853941) (xy 41.354022 60.826903) (xy 41.354023 60.826886) (xy 41.354023 59.029611) (xy 41.354022 59.029594) (xy 41.35068 58.998519) (xy 41.347512 58.969048) (xy 41.296412 58.832045) (xy 41.296411 58.832042) (xy 41.29641 58.832041) (xy 41.221938 58.73256) (xy 41.19752 58.667096) (xy 41.212371 58.598823) (xy 41.221938 58.583938) (xy 41.29641 58.484456) (xy 41.296411 58.484455) (xy 41.347511 58.347453) (xy 41.347511 58.347452) (xy 41.347512 58.34745) (xy 41.351114 58.313941) (xy 41.354022 58.286903) (xy 41.354023 58.286886) (xy 41.354023 56.489611) (xy 41.354022 56.489594) (xy 41.35068 56.458519) (xy 41.347512 56.429048) (xy 41.296412 56.292045) (xy 41.296411 56.292042) (xy 41.29641 56.292041) (xy 41.221938 56.19256) (xy 41.19752 56.127096) (xy 41.212371 56.058823) (xy 41.221938 56.043938) (xy 41.29641 55.944456) (xy 41.296411 55.944455) (xy 41.347511 55.807453) (xy 41.347511 55.807452) (xy 41.347512 55.80745) (xy 41.351114 55.773941) (xy 41.354022 55.746903) (xy 41.354023 55.746886) (xy 41.354023 53.949611) (xy 41.354022 53.949594) (xy 41.35068 53.918519) (xy 41.347512 53.889048) (xy 41.296412 53.752045) (xy 41.296411 53.752042) (xy 41.29641 53.752041) (xy 41.221938 53.65256) (xy 41.19752 53.587096) (xy 41.212371 53.518823) (xy 41.221938 53.503938) (xy 41.29641 53.404456) (xy 41.296411 53.404455) (xy 41.347511 53.267453) (xy 41.347511 53.267452) (xy 41.347512 53.26745) (xy 41.351114 53.233941) (xy 41.354022 53.206903) (xy 41.354023 53.206886) (xy 41.354023 51.409611) (xy 41.354022 51.409594) (xy 41.35068 51.378519) (xy 41.347512 51.349048) (xy 41.296412 51.212045) (xy 41.216628 51.105467) (xy 41.192212 51.040003) (xy 41.207064 50.97173) (xy 41.21663 50.956845) (xy 41.288875 50.860338) (xy 41.288877 50.860335) (xy 41.339119 50.725628) (xy 41.339121 50.725621) (xy 41.345522 50.666093) (xy 41.345523 50.666076) (xy 41.345523 50.018249) (xy 36.845523 50.018249) (xy 36.845523 50.666093) (xy 36.851924 50.725621) (xy 36.851926 50.725628) (xy 36.902168 50.860335) (xy 36.902169 50.860337) (xy 36.974416 50.956846) (xy 36.998833 51.02231) (xy 36.983982 51.090583) (xy 36.974416 51.105467) (xy 36.894635 51.212042) (xy 36.894634 51.212042) (xy 36.843534 51.349044) (xy 36.843534 51.349046) (xy 36.837023 51.409594) (xy 36.837023 53.206903) (xy 36.843534 53.267451) (xy 36.843534 53.267453) (xy 36.894634 53.404453) (xy 36.969108 53.503938) (xy 36.993525 53.569403) (xy 36.978673 53.637676) (xy 36.969108 53.65256) (xy 36.894634 53.752044) (xy 36.843534 53.889044) (xy 36.843534 53.889046) (xy 36.837023 53.949594) (xy 36.837023 55.746903) (xy 36.843534 55.807451) (xy 36.843534 55.807453) (xy 36.894634 55.944453) (xy 36.969108 56.043938) (xy 36.993525 56.109403) (xy 36.978673 56.177676) (xy 36.969108 56.19256) (xy 36.894634 56.292044) (xy 36.843534 56.429044) (xy 36.843534 56.429046) (xy 36.837023 56.489594) (xy 36.837023 58.286903) (xy 36.843534 58.347451) (xy 36.843534 58.347453) (xy 36.894634 58.484453) (xy 36.969108 58.583938) (xy 36.993525 58.649403) (xy 36.978673 58.717676) (xy 36.969108 58.73256) (xy 36.894634 58.832044) (xy 36.843534 58.969044) (xy 36.843534 58.969046) (xy 36.837023 59.029594) (xy 36.837023 60.826903) (xy 33.798903 60.826903) (xy 33.798903 48.126903) (xy 36.837023 48.126903) (xy 36.843534 48.187451) (xy 36.843534 48.187453) (xy 36.894634 48.324453) (xy 36.974416 48.431029) (xy 36.998833 48.496494) (xy 36.983981 48.564767) (xy 36.974416 48.579651) (xy 36.90217 48.676159) (xy 36.902168 48.676162) (xy 36.851926 48.810869) (xy 36.851924 48.810876) (xy 36.845523 48.870404) (xy 36.845523 49.518249) (xy 41.345523 49.518249) (xy 41.345523 48.870421) (xy 41.345522 48.870404) (xy 41.339121 48.810876) (xy 41.339119 48.810869) (xy 41.288877 48.676162) (xy 41.288876 48.67616) (xy 41.216629 48.579651) (xy 41.192212 48.514187) (xy 41.207063 48.445914) (xy 41.216622 48.431038) (xy 41.296412 48.324453) (xy 41.347512 48.18745) (xy 41.351406 48.151227) (xy 41.354022 48.126903) (xy 41.354023 48.126886) (xy 41.354023 47.848247) (xy 45.197216 47.848247) (xy 45.199195 47.870888) (xy 45.199369 47.879078) (xy 45.198207 47.904937) (xy 45.198208 47.904939) (xy 45.209214 47.986195) (xy 45.209539 47.989113) (xy 45.212055 48.017864) (xy 45.216408 48.06762) (xy 45.223147 48.092772) (xy 45.224697 48.100492) (xy 45.228616 48.129422) (xy 45.228619 48.129432) (xy 45.252936 48.204272) (xy 45.253857 48.207383) (xy 45.2734 48.280315) (xy 45.273404 48.280327) (xy 45.285798 48.306908) (xy 45.288574 48.313954) (xy 45.298618 48.344865) (xy 45.29862 48.34487) (xy 45.307628 48.361609) (xy 45.334345 48.411259) (xy 45.335939 48.414436) (xy 45.366465 48.4799) (xy 45.366466 48.479902) (xy 45.366467 48.479903) (xy 45.385191 48.506645) (xy 45.388998 48.512823) (xy 45.405966 48.544354) (xy 45.405968 48.544357) (xy 45.45092 48.600724) (xy 45.453232 48.603816) (xy 45.492774 48.660287) (xy 45.492777 48.66029) (xy 45.518182 48.685695) (xy 45.522818 48.690882) (xy 45.547209 48.721467) (xy 45.599037 48.766748) (xy 45.60208 48.769593) (xy 45.648478 48.815992) (xy 45.648479 48.815993) (xy 45.648482 48.815995) (xy 45.648485 48.815998) (xy 45.68001 48.838071) (xy 45.680632 48.838507) (xy 45.685864 48.842606) (xy 45.717805 48.870512) (xy 45.774058 48.904121) (xy 45.777781 48.906532) (xy 45.814273 48.932084) (xy 45.828861 48.9423) (xy 45.828864 48.942301) (xy 45.828869 48.942305) (xy 45.867433 48.960287) (xy 45.873016 48.963246) (xy 45.912273 48.986702) (xy 45.970533 49.008566) (xy 45.974945 49.01042) (xy 46.028447 49.035369) (xy 46.072727 49.047233) (xy 46.078462 49.049073) (xy 46.107879 49.060113) (xy 46.124362 49.0663) (xy 46.182336 49.07682) (xy 46.187301 49.077934) (xy 46.241152 49.092364) (xy 46.290125 49.096648) (xy 46.295773 49.097406) (xy 46.334875 49.104502) (xy 46.347255 49.106749) (xy 46.347256 49.106749) (xy 46.402871 49.106749) (xy 46.408272 49.106984) (xy 46.436893 49.109488) (xy 46.460521 49.111556) (xy 46.460522 49.111556) (xy 46.460522 49.111555) (xy 46.460523 49.111556) (xy 46.513833 49.106892) (xy 46.517027 49.106749) (xy 46.517045 49.106749) (xy 46.565148 49.102418) (xy 46.571914 49.10181) (xy 46.679876 49.092366) (xy 46.67988 49.092365) (xy 46.679894 49.092364) (xy 46.679906 49.09236) (xy 46.680425 49.092269) (xy 46.685659 49.091573) (xy 46.686145 49.09153) (xy 46.790858 49.06263) (xy 46.892599 49.035369) (xy 46.892612 49.035362) (xy 46.899552 49.032837) (xy 46.904243 49.031338) (xy 46.904516 49.031263) (xy 46.999542 48.9855) (xy 47.092177 48.942305) (xy 47.092186 48.942298) (xy 47.096873 48.939594) (xy 47.096944 48.939717) (xy 47.107729 48.933401) (xy 47.108616 48.932974) (xy 47.191391 48.872834) (xy 47.272561 48.815998) (xy 47.273474 48.815084) (xy 47.288275 48.802442) (xy 47.291886 48.79982) (xy 47.323513 48.766741) (xy 47.360425 48.728133) (xy 47.428269 48.66029) (xy 47.428269 48.660289) (xy 47.428272 48.660287) (xy 47.430999 48.656391) (xy 47.442951 48.641817) (xy 47.448435 48.636083) (xy 47.501332 48.555946) (xy 47.554579 48.479903) (xy 47.558061 48.472434) (xy 47.566959 48.456525) (xy 47.573232 48.447023) (xy 47.609739 48.361609) (xy 47.647643 48.280325) (xy 47.650668 48.269031) (xy 47.656419 48.252396) (xy 47.662266 48.238719) (xy 47.682234 48.151227) (xy 47.704638 48.06762) (xy 47.70633 48.048273) (xy 47.707649 48.039875) (xy 47.712674 48.017864) (xy 47.716559 47.931354) (xy 47.72383 47.848249) (xy 47.72383 47.848247) (xy 50.047216 47.848247) (xy 50.049195 47.870888) (xy 50.049369 47.879078) (xy 50.048207 47.904937) (xy 50.048208 47.904939) (xy 50.059214 47.986195) (xy 50.059539 47.989113) (xy 50.062055 48.017864) (xy 50.066408 48.06762) (xy 50.073147 48.092772) (xy 50.074697 48.100492) (xy 50.078616 48.129422) (xy 50.078619 48.129432) (xy 50.102936 48.204272) (xy 50.103857 48.207383) (xy 50.1234 48.280315) (xy 50.123404 48.280327) (xy 50.135798 48.306908) (xy 50.138574 48.313954) (xy 50.148618 48.344865) (xy 50.14862 48.34487) (xy 50.157628 48.361609) (xy 50.184345 48.411259) (xy 50.185939 48.414436) (xy 50.216465 48.4799) (xy 50.216466 48.479902) (xy 50.216467 48.479903) (xy 50.235191 48.506645) (xy 50.238998 48.512823) (xy 50.255966 48.544354) (xy 50.255968 48.544357) (xy 50.30092 48.600724) (xy 50.303232 48.603816) (xy 50.342774 48.660287) (xy 50.342777 48.66029) (xy 50.368182 48.685695) (xy 50.372818 48.690882) (xy 50.397209 48.721467) (xy 50.449037 48.766748) (xy 50.45208 48.769593) (xy 50.498478 48.815992) (xy 50.498479 48.815993) (xy 50.498482 48.815995) (xy 50.498485 48.815998) (xy 50.53001 48.838071) (xy 50.530632 48.838507) (xy 50.535864 48.842606) (xy 50.567805 48.870512) (xy 50.624058 48.904121) (xy 50.627781 48.906532) (xy 50.664273 48.932084) (xy 50.678861 48.9423) (xy 50.678864 48.942301) (xy 50.678869 48.942305) (xy 50.717433 48.960287) (xy 50.723016 48.963246) (xy 50.762273 48.986702) (xy 50.820533 49.008566) (xy 50.824945 49.01042) (xy 50.878447 49.035369) (xy 50.922727 49.047233) (xy 50.928462 49.049073) (xy 50.957879 49.060113) (xy 50.974362 49.0663) (xy 51.032336 49.07682) (xy 51.037301 49.077934) (xy 51.091152 49.092364) (xy 51.140125 49.096648) (xy 51.145773 49.097406) (xy 51.184875 49.104502) (xy 51.197255 49.106749) (xy 51.197256 49.106749) (xy 51.252871 49.106749) (xy 51.258272 49.106984) (xy 51.286893 49.109488) (xy 51.310521 49.111556) (xy 51.310522 49.111556) (xy 51.310522 49.111555) (xy 51.310523 49.111556) (xy 51.363833 49.106892) (xy 51.367027 49.106749) (xy 51.367045 49.106749) (xy 51.415148 49.102418) (xy 51.421914 49.10181) (xy 51.529876 49.092366) (xy 51.52988 49.092365) (xy 51.529894 49.092364) (xy 51.529906 49.09236) (xy 51.530425 49.092269) (xy 51.535659 49.091573) (xy 51.536145 49.09153) (xy 51.640858 49.06263) (xy 51.742599 49.035369) (xy 51.742612 49.035362) (xy 51.749552 49.032837) (xy 51.754243 49.031338) (xy 51.754516 49.031263) (xy 51.849542 48.9855) (xy 51.942177 48.942305) (xy 51.942186 48.942298) (xy 51.946873 48.939594) (xy 51.946944 48.939717) (xy 51.957729 48.933401) (xy 51.958616 48.932974) (xy 52.041391 48.872834) (xy 52.122561 48.815998) (xy 52.123474 48.815084) (xy 52.138275 48.802442) (xy 52.141886 48.79982) (xy 52.173513 48.766741) (xy 52.210425 48.728133) (xy 52.278269 48.66029) (xy 52.278269 48.660289) (xy 52.278272 48.660287) (xy 52.280999 48.656391) (xy 52.292951 48.641817) (xy 52.298435 48.636083) (xy 52.351332 48.555946) (xy 52.404579 48.479903) (xy 52.408061 48.472434) (xy 52.416959 48.456525) (xy 52.423232 48.447023) (xy 52.459739 48.361609) (xy 52.497643 48.280325) (xy 52.500668 48.269031) (xy 52.506419 48.252396) (xy 52.512266 48.238719) (xy 52.532234 48.151227) (xy 52.554638 48.06762) (xy 52.55633 48.048273) (xy 52.557649 48.039875) (xy 52.562674 48.017864) (xy 52.566559 47.931354) (xy 52.57383 47.848249) (xy 52.57185 47.825617) (xy 52.571676 47.817422) (xy 52.572838 47.791558) (xy 52.561828 47.710291) (xy 52.561504 47.707374) (xy 52.554638 47.62888) (xy 52.554638 47.628878) (xy 52.5479 47.603732) (xy 52.546348 47.596002) (xy 52.544645 47.583439) (xy 52.542429 47.567074) (xy 52.51811 47.492231) (xy 52.517194 47.489138) (xy 52.502953 47.43599) (xy 52.497646 47.416182) (xy 52.497642 47.416172) (xy 52.485245 47.389585) (xy 52.482471 47.382545) (xy 52.472426 47.351628) (xy 52.472425 47.351626) (xy 52.472422 47.351619) (xy 52.43669 47.285219) (xy 52.435105 47.28206) (xy 52.404579 47.216596) (xy 52.404575 47.21659) (xy 52.38586 47.189862) (xy 52.382046 47.183673) (xy 52.365078 47.152141) (xy 52.320117 47.095762) (xy 52.317802 47.092666) (xy 52.278273 47.036212) (xy 52.252863 47.010802) (xy 52.248225 47.005613) (xy 52.223835 46.975029) (xy 52.172014 46.929754) (xy 52.168965 46.926904) (xy 52.122562 46.8805) (xy 52.090414 46.85799) (xy 52.085179 46.85389) (xy 52.053241 46.825986) (xy 51.997009 46.792388) (xy 51.993248 46.789953) (xy 51.955503 46.763524) (xy 51.942177 46.754193) (xy 51.928463 46.747798) (xy 51.903623 46.736214) (xy 51.898024 46.733246) (xy 51.867224 46.714845) (xy 51.858773 46.709796) (xy 51.800511 46.68793) (xy 51.796111 46.686082) (xy 51.764416 46.671302) (xy 51.7426 46.661129) (xy 51.742588 46.661125) (xy 51.698316 46.649262) (xy 51.692576 46.647421) (xy 51.646683 46.630197) (xy 51.595638 46.620933) (xy 51.588714 46.619677) (xy 51.58374 46.618561) (xy 51.529895 46.604134) (xy 51.517893 46.603083) (xy 51.480926 46.599849) (xy 51.475264 46.599089) (xy 51.440521 46.592785) (xy 51.42379 46.589749) (xy 51.423789 46.589749) (xy 51.368175 46.589749) (xy 51.362773 46.589513) (xy 51.334152 46.587009) (xy 51.310525 46.584942) (xy 51.31052 46.584942) (xy 51.257251 46.589602) (xy 51.254012 46.589748) (xy 51.199131 46.594687) (xy 51.091141 46.604134) (xy 51.090564 46.604236) (xy 51.085412 46.604921) (xy 51.084909 46.604966) (xy 51.084892 46.604969) (xy 50.980187 46.633867) (xy 50.878441 46.66113) (xy 50.871467 46.663667) (xy 50.866791 46.665161) (xy 50.866545 46.665228) (xy 50.866534 46.665233) (xy 50.771487 46.711004) (xy 50.678875 46.75419) (xy 50.674181 46.7569) (xy 50.67411 46.756778) (xy 50.663347 46.763082) (xy 50.662431 46.763523) (xy 50.662425 46.763526) (xy 50.579642 46.823672) (xy 50.498481 46.880503) (xy 50.49755 46.881434) (xy 50.482787 46.894042) (xy 50.479164 46.896674) (xy 50.479154 46.896683) (xy 50.41062 46.968364) (xy 50.34277 47.036215) (xy 50.342769 47.036216) (xy 50.340029 47.040129) (xy 50.328104 47.054668) (xy 50.322612 47.060412) (xy 50.322608 47.060418) (xy 50.269706 47.140562) (xy 50.216466 47.216596) (xy 50.216464 47.216601) (xy 50.212985 47.224061) (xy 50.204099 47.239951) (xy 50.197815 47.249471) (xy 50.197814 47.249473) (xy 50.161303 47.334893) (xy 50.123405 47.416166) (xy 50.123403 47.416172) (xy 50.120375 47.427471) (xy 50.114625 47.444103) (xy 50.108782 47.457774) (xy 50.108779 47.457782) (xy 50.088811 47.54527) (xy 50.066408 47.628875) (xy 50.066407 47.628881) (xy 50.064715 47.648219) (xy 50.063396 47.656615) (xy 50.058372 47.678634) (xy 50.054486 47.765143) (xy 50.047216 47.848245) (xy 50.047216 47.848247) (xy 47.72383 47.848247) (xy 47.72185 47.825617) (xy 47.721676 47.817422) (xy 47.722838 47.791558) (xy 47.711828 47.710291) (xy 47.711504 47.707374) (xy 47.704638 47.62888) (xy 47.704638 47.628878) (xy 47.6979 47.603732) (xy 47.696348 47.596002) (xy 47.694645 47.583439) (xy 47.692429 47.567074) (xy 47.66811 47.492231) (xy 47.667194 47.489138) (xy 47.652953 47.43599) (xy 47.647646 47.416182) (xy 47.647642 47.416172) (xy 47.635245 47.389585) (xy 47.632471 47.382545) (xy 47.622426 47.351628) (xy 47.622425 47.351626) (xy 47.622422 47.351619) (xy 47.58669 47.285219) (xy 47.585105 47.28206) (xy 47.554579 47.216596) (xy 47.554575 47.21659) (xy 47.53586 47.189862) (xy 47.532046 47.183673) (xy 47.515078 47.152141) (xy 47.470117 47.095762) (xy 47.467802 47.092666) (xy 47.428273 47.036212) (xy 47.402863 47.010802) (xy 47.398225 47.005613) (xy 47.373835 46.975029) (xy 47.322014 46.929754) (xy 47.318965 46.926904) (xy 47.272562 46.8805) (xy 47.240414 46.85799) (xy 47.235179 46.85389) (xy 47.203241 46.825986) (xy 47.147009 46.792388) (xy 47.143248 46.789953) (xy 47.105503 46.763524) (xy 47.092177 46.754193) (xy 47.078463 46.747798) (xy 47.053623 46.736214) (xy 47.048024 46.733246) (xy 47.017224 46.714845) (xy 47.008773 46.709796) (xy 46.950511 46.68793) (xy 46.946111 46.686082) (xy 46.914416 46.671302) (xy 46.8926 46.661129) (xy 46.892588 46.661125) (xy 46.848316 46.649262) (xy 46.842576 46.647421) (xy 46.796683 46.630197) (xy 46.745638 46.620933) (xy 46.738714 46.619677) (xy 46.73374 46.618561) (xy 46.679895 46.604134) (xy 46.667893 46.603083) (xy 46.630926 46.599849) (xy 46.625264 46.599089) (xy 46.590521 46.592785) (xy 46.57379 46.589749) (xy 46.573789 46.589749) (xy 46.518175 46.589749) (xy 46.512773 46.589513) (xy 46.484152 46.587009) (xy 46.460525 46.584942) (xy 46.46052 46.584942) (xy 46.407251 46.589602) (xy 46.404012 46.589748) (xy 46.349131 46.594687) (xy 46.241141 46.604134) (xy 46.240564 46.604236) (xy 46.235412 46.604921) (xy 46.234909 46.604966) (xy 46.234892 46.604969) (xy 46.130187 46.633867) (xy 46.028441 46.66113) (xy 46.021467 46.663667) (xy 46.016791 46.665161) (xy 46.016545 46.665228) (xy 46.016534 46.665233) (xy 45.921487 46.711004) (xy 45.828875 46.75419) (xy 45.824181 46.7569) (xy 45.82411 46.756778) (xy 45.813347 46.763082) (xy 45.812431 46.763523) (xy 45.812425 46.763526) (xy 45.729642 46.823672) (xy 45.648481 46.880503) (xy 45.64755 46.881434) (xy 45.632787 46.894042) (xy 45.629164 46.896674) (xy 45.629154 46.896683) (xy 45.56062 46.968364) (xy 45.49277 47.036215) (xy 45.492769 47.036216) (xy 45.490029 47.040129) (xy 45.478104 47.054668) (xy 45.472612 47.060412) (xy 45.472608 47.060418) (xy 45.419706 47.140562) (xy 45.366466 47.216596) (xy 45.366464 47.216601) (xy 45.362985 47.224061) (xy 45.354099 47.239951) (xy 45.347815 47.249471) (xy 45.347814 47.249473) (xy 45.311303 47.334893) (xy 45.273405 47.416166) (xy 45.273403 47.416172) (xy 45.270375 47.427471) (xy 45.264625 47.444103) (xy 45.258782 47.457774) (xy 45.258779 47.457782) (xy 45.238811 47.54527) (xy 45.216408 47.628875) (xy 45.216407 47.628881) (xy 45.214715 47.648219) (xy 45.213396 47.656615) (xy 45.208372 47.678634) (xy 45.204486 47.765143) (xy 45.197216 47.848245) (xy 45.197216 47.848247) (xy 41.354023 47.848247) (xy 41.354023 46.329611) (xy 41.354022 46.329594) (xy 41.349569 46.288181) (xy 41.347512 46.269048) (xy 41.331735 46.226749) (xy 41.296411 46.132042) (xy 41.29641 46.132041) (xy 41.221938 46.03256) (xy 41.19752 45.967096) (xy 41.212371 45.898823) (xy 41.221938 45.883938) (xy 41.222426 45.883287) (xy 41.280242 45.806054) (xy 41.29641 45.784456) (xy 41.296411 45.784455) (xy 41.308452 45.752174) (xy 41.347512 45.64745) (xy 41.351114 45.613941) (xy 41.354022 45.586903) (xy 41.354023 45.586886) (xy 41.354023 44.818249) (xy 44.747196 44.818249) (xy 44.752167 44.878243) (xy 44.754494 44.906332) (xy 44.758379 44.997792) (xy 44.75838 44.997801) (xy 44.763533 45.02171) (xy 44.764713 45.029659) (xy 44.76647 45.050866) (xy 44.766472 45.050878) (xy 44.78894 45.139602) (xy 44.808893 45.232184) (xy 44.81678 45.25181) (xy 44.819357 45.259715) (xy 44.823774 45.277156) (xy 44.861808 45.363865) (xy 44.89829 45.454653) (xy 44.907652 45.469857) (xy 44.91164 45.477469) (xy 44.917538 45.490917) (xy 44.971047 45.572819) (xy 45.023996 45.658814) (xy 45.024003 45.658823) (xy 45.030681 45.66641) (xy 45.041409 45.680516) (xy 45.045209 45.686332) (xy 45.113602 45.760626) (xy 45.134572 45.784453) (xy 45.182405 45.838801) (xy 45.182406 45.838802) (xy 45.187593 45.84299) (xy 45.20093 45.855489) (xy 45.203306 45.858071) (xy 45.247559 45.892513) (xy 45.285471 45.922021) (xy 45.332554 45.960038) (xy 45.368944 45.989422) (xy 45.368945 45.989422) (xy 45.368947 45.989424) (xy 45.371688 45.990955) (xy 45.371763 45.990997) (xy 45.387457 46.001401) (xy 45.387502 46.001436) (xy 45.387514 46.001444) (xy 45.445013 46.03256) (xy 45.481869 46.052505) (xy 45.578263 46.106354) (xy 45.578268 46.106355) (xy 45.578272 46.106358) (xy 45.580663 46.107439) (xy 45.588 46.110697) (xy 45.588098 46.110475) (xy 45.592785 46.11253) (xy 45.592796 46.112536) (xy 45.697263 46.1484) (xy 45.804329 46.186229) (xy 45.80489 46.186325) (xy 45.809632 46.18733) (xy 45.813566 46.188327) (xy 45.813572 46.188329) (xy 45.925618 46.207026) (xy 46.040633 46.226748) (xy 46.040642 46.226749) (xy 46.27723 46.226749) (xy 46.277235 46.226749) (xy 46.310171 46.221252) (xy 46.333998 46.217277) (xy 46.338936 46.216655) (xy 46.392464 46.2121) (xy 46.39941 46.211509) (xy 46.399411 46.211508) (xy 46.399421 46.211508) (xy 46.45182 46.197863) (xy 46.457191 46.196718) (xy 46.507474 46.188329) (xy 46.565025 46.168571) (xy 46.569498 46.167222) (xy 46.631447 46.151093) (xy 46.677782 46.130147) (xy 46.683156 46.128016) (xy 46.72825 46.112536) (xy 46.784655 46.08201) (xy 46.788577 46.080065) (xy 46.849925 46.052335) (xy 46.889318 46.025708) (xy 46.894502 46.022563) (xy 46.933531 46.001444) (xy 46.933535 46.001442) (xy 46.933536 46.001441) (xy 46.93354 46.001439) (xy 46.986751 45.960021) (xy 46.990084 45.957602) (xy 47.04857 45.918074) (xy 47.080524 45.887447) (xy 47.085312 45.883307) (xy 47.117743 45.858067) (xy 47.165642 45.806033) (xy 47.168317 45.803305) (xy 47.221667 45.752174) (xy 47.24602 45.719245) (xy 47.25025 45.714126) (xy 47.251462 45.71281) (xy 47.275837 45.686332) (xy 47.316308 45.624384) (xy 47.318358 45.621438) (xy 47.319357 45.620086) (xy 47.364238 45.559406) (xy 47.381199 45.525763) (xy 47.384637 45.519798) (xy 47.403507 45.490918) (xy 47.434565 45.42011) (xy 47.435936 45.417199) (xy 47.47218 45.345316) (xy 47.482244 45.312449) (xy 47.484744 45.305715) (xy 47.497272 45.277156) (xy 47.517058 45.199019) (xy 47.517857 45.196158) (xy 47.542387 45.116064) (xy 47.546333 45.085243) (xy 47.547721 45.077933) (xy 47.554574 45.050875) (xy 47.561613 44.965921) (xy 47.572841 44.878244) (xy 47.571662 44.850498) (xy 47.571817 44.842774) (xy 47.57385 44.818249) (xy 50.197196 44.818249) (xy 50.202167 44.878243) (xy 50.204494 44.906332) (xy 50.208379 44.997792) (xy 50.20838 44.997801) (xy 50.213533 45.02171) (xy 50.214713 45.029659) (xy 50.21647 45.050866) (xy 50.216472 45.050878) (xy 50.23894 45.139602) (xy 50.258893 45.232184) (xy 50.26678 45.25181) (xy 50.269357 45.259715) (xy 50.273774 45.277156) (xy 50.311808 45.363865) (xy 50.34829 45.454653) (xy 50.357652 45.469857) (xy 50.36164 45.477469) (xy 50.367538 45.490917) (xy 50.421047 45.572819) (xy 50.473996 45.658814) (xy 50.474003 45.658823) (xy 50.480681 45.66641) (xy 50.491409 45.680516) (xy 50.495209 45.686332) (xy 50.563602 45.760626) (xy 50.584572 45.784453) (xy 50.632405 45.838801) (xy 50.632406 45.838802) (xy 50.637593 45.84299) (xy 50.65093 45.855489) (xy 50.653306 45.858071) (xy 50.697559 45.892513) (xy 50.735471 45.922021) (xy 50.782554 45.960038) (xy 50.818944 45.989422) (xy 50.818945 45.989422) (xy 50.818947 45.989424) (xy 50.821688 45.990955) (xy 50.821763 45.990997) (xy 50.837457 46.001401) (xy 50.837502 46.001436) (xy 50.837514 46.001444) (xy 50.895013 46.03256) (xy 50.931869 46.052505) (xy 51.028263 46.106354) (xy 51.028268 46.106355) (xy 51.028272 46.106358) (xy 51.030663 46.107439) (xy 51.038 46.110697) (xy 51.038098 46.110475) (xy 51.042785 46.11253) (xy 51.042796 46.112536) (xy 51.147263 46.1484) (xy 51.254329 46.186229) (xy 51.25489 46.186325) (xy 51.259632 46.18733) (xy 51.263566 46.188327) (xy 51.263572 46.188329) (xy 51.375618 46.207026) (xy 51.490633 46.226748) (xy 51.490642 46.226749) (xy 51.72723 46.226749) (xy 51.727235 46.226749) (xy 51.760171 46.221252) (xy 51.783998 46.217277) (xy 51.788936 46.216655) (xy 51.842464 46.2121) (xy 51.84941 46.211509) (xy 51.849411 46.211508) (xy 51.849421 46.211508) (xy 51.90182 46.197863) (xy 51.907191 46.196718) (xy 51.957474 46.188329) (xy 52.015025 46.168571) (xy 52.019498 46.167222) (xy 52.081447 46.151093) (xy 52.127782 46.130147) (xy 52.133156 46.128016) (xy 52.17825 46.112536) (xy 52.234655 46.08201) (xy 52.238577 46.080065) (xy 52.299925 46.052335) (xy 52.339318 46.025708) (xy 52.344502 46.022563) (xy 52.383531 46.001444) (xy 52.383535 46.001442) (xy 52.383536 46.001441) (xy 52.38354 46.001439) (xy 52.436751 45.960021) (xy 52.440084 45.957602) (xy 52.49857 45.918074) (xy 52.530524 45.887447) (xy 52.535312 45.883307) (xy 52.567743 45.858067) (xy 52.615642 45.806033) (xy 52.618317 45.803305) (xy 52.671667 45.752174) (xy 52.69602 45.719245) (xy 52.70025 45.714126) (xy 52.701462 45.71281) (xy 52.725837 45.686332) (xy 52.766308 45.624384) (xy 52.768358 45.621438) (xy 52.769357 45.620086) (xy 52.814238 45.559406) (xy 52.831199 45.525763) (xy 52.834637 45.519798) (xy 52.853507 45.490918) (xy 52.884565 45.42011) (xy 52.885936 45.417199) (xy 52.92218 45.345316) (xy 52.932244 45.312449) (xy 52.934744 45.305715) (xy 52.947272 45.277156) (xy 52.967058 45.199019) (xy 52.967857 45.196158) (xy 52.992387 45.116064) (xy 52.996333 45.085243) (xy 52.997721 45.077933) (xy 53.004574 45.050875) (xy 53.011613 44.965921) (xy 53.022841 44.878244) (xy 53.021662 44.850498) (xy 53.021817 44.842774) (xy 53.02385 44.818249) (xy 53.018878 44.758253) (xy 53.016551 44.730165) (xy 53.012667 44.638709) (xy 53.012666 44.638706) (xy 53.012666 44.638698) (xy 53.00751 44.614779) (xy 53.006331 44.606835) (xy 53.004574 44.585628) (xy 53.004574 44.585623) (xy 52.982105 44.496895) (xy 52.962153 44.404317) (xy 52.954258 44.384673) (xy 52.95169 44.376793) (xy 52.947272 44.359342) (xy 52.909237 44.272632) (xy 52.872756 44.181845) (xy 52.86339 44.166635) (xy 52.859405 44.159027) (xy 52.858625 44.157249) (xy 52.853507 44.14558) (xy 52.799998 44.063678) (xy 52.747047 43.97768) (xy 52.747041 43.977673) (xy 52.747038 43.977669) (xy 52.740362 43.970083) (xy 52.729641 43.955988) (xy 52.725838 43.950168) (xy 52.725837 43.950166) (xy 52.657443 43.875871) (xy 52.588642 43.797698) (xy 52.588641 43.797697) (xy 52.588637 43.797693) (xy 52.583452 43.793507) (xy 52.57012 43.781014) (xy 52.567743 43.778431) (xy 52.485574 43.714476) (xy 52.402099 43.647074) (xy 52.402097 43.647072) (xy 52.402091 43.647068) (xy 52.399273 43.645494) (xy 52.383593 43.6351) (xy 52.383543 43.635061) (xy 52.383541 43.63506) (xy 52.38354 43.635059) (xy 52.289176 43.583992) (xy 52.236345 43.554479) (xy 52.192782 43.530143) (xy 52.190522 43.529122) (xy 52.183042 43.5258) (xy 52.182945 43.526022) (xy 52.178248 43.523961) (xy 52.073782 43.488097) (xy 51.96672 43.45027) (xy 51.966719 43.450269) (xy 51.966717 43.450269) (xy 51.966715 43.450268) (xy 51.966706 43.450266) (xy 51.966156 43.450172) (xy 51.961436 43.449171) (xy 51.957489 43.448172) (xy 51.957476 43.448169) (xy 51.957474 43.448169) (xy 51.845427 43.429471) (xy 51.730413 43.409749) (xy 51.730404 43.409749) (xy 51.727235 43.409749) (xy 51.493811 43.409749) (xy 51.49381 43.409749) (xy 51.437052 43.419219) (xy 51.43211 43.419841) (xy 51.398353 43.422714) (xy 51.371623 43.42499) (xy 51.37162 43.42499) (xy 51.319256 43.438625) (xy 51.313836 43.439781) (xy 51.263572 43.448168) (xy 51.206035 43.46792) (xy 51.201528 43.469278) (xy 51.156418 43.481025) (xy 51.139599 43.485405) (xy 51.139596 43.485406) (xy 51.139593 43.485407) (xy 51.093281 43.506341) (xy 51.087882 43.508482) (xy 51.073286 43.513493) (xy 51.042796 43.523961) (xy 50.986402 43.554479) (xy 50.982433 43.556447) (xy 50.92112 43.584163) (xy 50.921118 43.584164) (xy 50.881732 43.610784) (xy 50.876525 43.613942) (xy 50.864961 43.6202) (xy 50.837501 43.635061) (xy 50.784303 43.676467) (xy 50.780948 43.678902) (xy 50.750872 43.69923) (xy 50.722474 43.718425) (xy 50.722471 43.718428) (xy 50.690535 43.749035) (xy 50.685716 43.753201) (xy 50.653304 43.77843) (xy 50.653303 43.778431) (xy 50.605421 43.830442) (xy 50.602707 43.833211) (xy 50.54938 43.884322) (xy 50.525026 43.917248) (xy 50.520793 43.922372) (xy 50.495207 43.950167) (xy 50.495204 43.950171) (xy 50.454745 44.012099) (xy 50.452689 44.015055) (xy 50.40681 44.077088) (xy 50.406809 44.077089) (xy 50.389856 44.110712) (xy 50.386398 44.116712) (xy 50.367538 44.145581) (xy 50.336501 44.216338) (xy 50.335085 44.219345) (xy 50.298865 44.291182) (xy 50.298864 44.291183) (xy 50.288803 44.324035) (xy 50.286298 44.330786) (xy 50.273772 44.359343) (xy 50.273772 44.359344) (xy 50.253992 44.437452) (xy 50.253172 44.440386) (xy 50.22866 44.520427) (xy 50.228658 44.520439) (xy 50.224714 44.551235) (xy 50.223318 44.558584) (xy 50.216473 44.585616) (xy 50.216471 44.585628) (xy 50.209432 44.670576) (xy 50.198205 44.758252) (xy 50.198204 44.758253) (xy 50.199382 44.78598) (xy 50.199226 44.793734) (xy 50.197196 44.818244) (xy 50.197196 44.818249) (xy 47.57385 44.818249) (xy 47.568878 44.758253) (xy 47.566551 44.730165) (xy 47.562667 44.638709) (xy 47.562666 44.638706) (xy 47.562666 44.638698) (xy 47.55751 44.614779) (xy 47.556331 44.606835) (xy 47.554574 44.585628) (xy 47.554574 44.585623) (xy 47.532105 44.496895) (xy 47.512153 44.404317) (xy 47.504258 44.384673) (xy 47.50169 44.376793) (xy 47.497272 44.359342) (xy 47.459237 44.272632) (xy 47.422756 44.181845) (xy 47.41339 44.166635) (xy 47.409405 44.159027) (xy 47.408625 44.157249) (xy 47.403507 44.14558) (xy 47.349998 44.063678) (xy 47.297047 43.97768) (xy 47.297041 43.977673) (xy 47.297038 43.977669) (xy 47.290362 43.970083) (xy 47.279641 43.955988) (xy 47.275838 43.950168) (xy 47.275837 43.950166) (xy 47.207443 43.875871) (xy 47.138642 43.797698) (xy 47.138641 43.797697) (xy 47.138637 43.797693) (xy 47.133452 43.793507) (xy 47.12012 43.781014) (xy 47.117743 43.778431) (xy 47.035574 43.714476) (xy 46.952099 43.647074) (xy 46.952097 43.647072) (xy 46.952091 43.647068) (xy 46.949273 43.645494) (xy 46.933593 43.6351) (xy 46.933543 43.635061) (xy 46.933541 43.63506) (xy 46.93354 43.635059) (xy 46.839176 43.583992) (xy 46.786345 43.554479) (xy 46.742782 43.530143) (xy 46.740522 43.529122) (xy 46.733042 43.5258) (xy 46.732945 43.526022) (xy 46.728248 43.523961) (xy 46.623782 43.488097) (xy 46.51672 43.45027) (xy 46.516719 43.450269) (xy 46.516717 43.450269) (xy 46.516715 43.450268) (xy 46.516706 43.450266) (xy 46.516156 43.450172) (xy 46.511436 43.449171) (xy 46.507489 43.448172) (xy 46.507476 43.448169) (xy 46.507474 43.448169) (xy 46.395427 43.429471) (xy 46.280413 43.409749) (xy 46.280404 43.409749) (xy 46.277235 43.409749) (xy 46.043811 43.409749) (xy 46.04381 43.409749) (xy 45.987052 43.419219) (xy 45.98211 43.419841) (xy 45.948353 43.422714) (xy 45.921623 43.42499) (xy 45.92162 43.42499) (xy 45.869256 43.438625) (xy 45.863836 43.439781) (xy 45.813572 43.448168) (xy 45.756035 43.46792) (xy 45.751528 43.469278) (xy 45.706418 43.481025) (xy 45.689599 43.485405) (xy 45.689596 43.485406) (xy 45.689593 43.485407) (xy 45.643281 43.506341) (xy 45.637882 43.508482) (xy 45.623286 43.513493) (xy 45.592796 43.523961) (xy 45.536402 43.554479) (xy 45.532433 43.556447) (xy 45.47112 43.584163) (xy 45.471118 43.584164) (xy 45.431732 43.610784) (xy 45.426525 43.613942) (xy 45.414961 43.6202) (xy 45.387501 43.635061) (xy 45.334303 43.676467) (xy 45.330948 43.678902) (xy 45.300872 43.69923) (xy 45.272474 43.718425) (xy 45.272471 43.718428) (xy 45.240535 43.749035) (xy 45.235716 43.753201) (xy 45.203304 43.77843) (xy 45.203303 43.778431) (xy 45.155421 43.830442) (xy 45.152707 43.833211) (xy 45.09938 43.884322) (xy 45.075026 43.917248) (xy 45.070793 43.922372) (xy 45.045207 43.950167) (xy 45.045204 43.950171) (xy 45.004745 44.012099) (xy 45.002689 44.015055) (xy 44.95681 44.077088) (xy 44.956809 44.077089) (xy 44.939856 44.110712) (xy 44.936398 44.116712) (xy 44.917538 44.145581) (xy 44.886501 44.216338) (xy 44.885085 44.219345) (xy 44.848865 44.291182) (xy 44.848864 44.291183) (xy 44.838803 44.324035) (xy 44.836298 44.330786) (xy 44.823772 44.359343) (xy 44.823772 44.359344) (xy 44.803992 44.437452) (xy 44.803172 44.440386) (xy 44.77866 44.520427) (xy 44.778658 44.520439) (xy 44.774714 44.551235) (xy 44.773318 44.558584) (xy 44.766473 44.585616) (xy 44.766471 44.585628) (xy 44.759432 44.670576) (xy 44.748205 44.758252) (xy 44.748204 44.758253) (xy 44.749382 44.78598) (xy 44.749226 44.793734) (xy 44.747196 44.818244) (xy 44.747196 44.818249) (xy 41.354023 44.818249) (xy 41.354023 43.789611) (xy 41.354022 43.789594) (xy 41.35068 43.758519) (xy 41.347512 43.729048) (xy 41.343549 43.718424) (xy 41.316935 43.647068) (xy 41.296412 43.592045) (xy 41.208784 43.474988) (xy 41.091727 43.38736) (xy 40.954726 43.33626) (xy 40.894177 43.329749) (xy 40.894161 43.329749) (xy 37.296885 43.329749) (xy 37.296868 43.329749) (xy 37.23632 43.33626) (xy 37.236318 43.33626) (xy 37.099318 43.38736) (xy 36.982262 43.474988) (xy 36.894634 43.592044) (xy 36.843534 43.729044) (xy 36.843534 43.729046) (xy 36.837023 43.789594) (xy 36.837023 45.586903) (xy 36.843534 45.647451) (xy 36.843534 45.647453) (xy 36.873185 45.726947) (xy 36.894634 45.784453) (xy 36.96862 45.883287) (xy 36.969108 45.883938) (xy 36.993525 45.949403) (xy 36.978673 46.017676) (xy 36.969108 46.03256) (xy 36.894634 46.132044) (xy 36.843534 46.269044) (xy 36.843534 46.269046) (xy 36.837023 46.329594) (xy 36.837023 48.126903) (xy 33.798903 48.126903) (xy 33.798903 41.234624) (xy 33.818588 41.167585) (xy 33.871392 41.12183) (xy 33.922903 41.110624) (xy 65.60497 41.110624) ) ) ) (zone (net 1) (net_name "GND") (layer "B.Cu") (tstamp 18ff41ab-4ea5-4b26-a420-7450b73bdce9) (hatch edge 0.5) (priority 2) (connect_pads (clearance 0.508)) (min_thickness 0.25) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5)) (polygon (pts (xy 33.75922 41.091402) (xy 66.394075 41.029054) (xy 66.416855 115.57) (xy 33.782 115.57) ) ) (filled_polygon (layer "B.Cu") (pts (xy 64.221287 41.130309) (xy 64.267042 41.183113) (xy 64.276986 41.252271) (xy 64.247961 41.315827) (xy 64.235286 41.328478) (xy 64.038835 41.498082) (xy 63.91037 41.60899) (xy 63.884437 41.635721) (xy 63.605705 41.923024) (xy 63.329939 42.262716) (xy 63.085222 42.625417) (xy 62.873464 43.008296) (xy 62.696317 43.408367) (xy 62.555163 43.822509) (xy 62.492827 44.077088) (xy 62.451102 44.247491) (xy 62.451102 44.247492) (xy 62.384948 44.679993) (xy 62.376168 44.818244) (xy 62.357254 45.116064) (xy 62.357216 45.116659) (xy 62.368122 45.554057) (xy 62.368122 45.554058) (xy 62.417579 45.988775) (xy 62.417579 45.988776) (xy 62.420168 46.001442) (xy 62.505207 46.417457) (xy 62.574145 46.648483) (xy 62.60704 46.758721) (xy 62.630317 46.836725) (xy 62.682643 46.968364) (xy 62.791933 47.243315) (xy 62.986189 47.62888) (xy 62.9888 47.634063) (xy 63.219376 48.005914) (xy 63.219379 48.005918) (xy 63.219379 48.005919) (xy 63.481865 48.35597) (xy 63.751676 48.656397) (xy 63.774216 48.681495) (xy 64.094153 48.979956) (xy 64.439177 49.249021) (xy 64.806598 49.486592) (xy 64.806604 49.486595) (xy 64.806603 49.486595) (xy 64.946333 49.560341) (xy 65.193548 49.690816) (xy 65.193553 49.690818) (xy 65.193552 49.690818) (xy 65.597012 49.860101) (xy 66.01383 49.99312) (xy 66.227305 50.040967) (xy 66.238949 50.043577) (xy 66.299402 50.057131) (xy 66.299406 50.05713) (xy 66.299996 50.057263) (xy 66.361106 50.091137) (xy 66.394201 50.152671) (xy 66.39687 50.178222) (xy 66.416808 115.416837) (xy 66.397144 115.483883) (xy 66.344354 115.529654) (xy 66.292808 115.540875) (xy 33.922903 115.540875) (xy 33.855864 115.52119) (xy 33.810109 115.468386) (xy 33.798903 115.416875) (xy 33.798903 111.506) (xy 34.640958 111.506) (xy 34.66111 111.864846) (xy 34.661112 111.864858) (xy 34.721314 112.219185) (xy 34.721316 112.219194) (xy 34.820812 112.564552) (xy 34.958353 112.896609) (xy 34.958355 112.896613) (xy 35.132215 113.211189) (xy 35.132218 113.211194) (xy 35.340193 113.504306) (xy 35.412843 113.585601) (xy 36.731073 112.267372) (xy 36.80789 112.377078) (xy 36.974922 112.54411) (xy 37.084626 112.620925) (xy 35.766397 113.939155) (xy 35.847693 114.011806) (xy 36.140805 114.219781) (xy 36.14081 114.219784) (xy 36.455386 114.393644) (xy 36.45539 114.393646) (xy 36.787447 114.531187) (xy 37.132805 114.630683) (xy 37.132814 114.630685) (xy 37.487141 114.690887) (xy 37.487153 114.690889) (xy 37.846 114.711041) (xy 38.204846 114.690889) (xy 38.204858 114.690887) (xy 38.559185 114.630685) (xy 38.559194 114.630683) (xy 38.904552 114.531187) (xy 39.236609 114.393646) (xy 39.236613 114.393644) (xy 39.551189 114.219784) (xy 39.551194 114.219781) (xy 39.844306 114.011806) (xy 39.925601 113.939155) (xy 38.607373 112.620925) (xy 38.717078 112.54411) (xy 38.88411 112.377078) (xy 38.960926 112.267373) (xy 40.279155 113.585601) (xy 40.351806 113.504306) (xy 40.559781 113.211194) (xy 40.559784 113.211189) (xy 40.733644 112.896613) (xy 40.733646 112.896609) (xy 40.871187 112.564552) (xy 40.970683 112.219194) (xy 40.970685 112.219185) (xy 41.030887 111.864858) (xy 41.030889 111.864846) (xy 41.051041 111.506) (xy 41.030889 111.147153) (xy 41.030887 111.147141) (xy 40.970685 110.792814) (xy 40.970683 110.792805) (xy 40.871187 110.447447) (xy 40.733646 110.11539) (xy 40.733644 110.115386) (xy 40.559784 109.80081) (xy 40.559781 109.800805) (xy 40.351806 109.507693) (xy 40.279155 109.426397) (xy 38.960925 110.744626) (xy 38.88411 110.634922) (xy 38.717078 110.46789) (xy 38.607372 110.391073) (xy 39.925602 109.072843) (xy 39.844306 109.000193) (xy 39.551194 108.792218) (xy 39.551189 108.792215) (xy 39.236613 108.618355) (xy 39.236609 108.618353) (xy 38.904552 108.480812) (xy 38.559194 108.381316) (xy 38.559185 108.381314) (xy 38.204858 108.321112) (xy 38.204846 108.32111) (xy 37.846 108.300958) (xy 37.487153 108.32111) (xy 37.487141 108.321112) (xy 37.132814 108.381314) (xy 37.132805 108.381316) (xy 36.787447 108.480812) (xy 36.45539 108.618353) (xy 36.455386 108.618355) (xy 36.14081 108.792215) (xy 36.140805 108.792218) (xy 35.847693 109.000194) (xy 35.847685 109.000199) (xy 35.766397 109.072842) (xy 35.766397 109.072843) (xy 37.084627 110.391073) (xy 36.974922 110.46789) (xy 36.80789 110.634922) (xy 36.731073 110.744627) (xy 35.412843 109.426397) (xy 35.412842 109.426397) (xy 35.340199 109.507685) (xy 35.340194 109.507693) (xy 35.132218 109.800805) (xy 35.132215 109.80081) (xy 34.958355 110.115386) (xy 34.958353 110.11539) (xy 34.820812 110.447447) (xy 34.721316 110.792805) (xy 34.721314 110.792814) (xy 34.661112 111.147141) (xy 34.66111 111.147153) (xy 34.640958 111.506) (xy 33.798903 111.506) (xy 33.798903 104.284001) (xy 40.700891 104.284001) (xy 40.7213 104.569362) (xy 40.782109 104.848895) (xy 40.882091 105.116958) (xy 41.019191 105.368038) (xy 41.019196 105.368046) (xy 41.125882 105.510561) (xy 41.125883 105.510562) (xy 41.735438 104.901006) (xy 41.784348 104.979999) (xy 41.927931 105.137501) (xy 42.086388 105.257163) (xy 41.479436 105.864115) (xy 41.62196 105.970807) (xy 41.621961 105.970808) (xy 41.873042 106.107908) (xy 41.873041 106.107908) (xy 42.141104 106.20789) (xy 42.420637 106.268699) (xy 42.705999 106.289109) (xy 42.706001 106.289109) (xy 42.991362 106.268699) (xy 43.270895 106.20789) (xy 43.538958 106.107908) (xy 43.790047 105.970803) (xy 43.932561 105.864116) (xy 43.932562 105.864115) (xy 43.325611 105.257163) (xy 43.484069 105.137501) (xy 43.627652 104.979999) (xy 43.67656 104.901007) (xy 44.286115 105.510562) (xy 44.286116 105.510561) (xy 44.392803 105.368047) (xy 44.529908 105.116958) (xy 44.62989 104.848895) (xy 44.690699 104.569362) (xy 44.711109 104.284001) (xy 53.840891 104.284001) (xy 53.8613 104.569362) (xy 53.922109 104.848895) (xy 54.022091 105.116958) (xy 54.159191 105.368038) (xy 54.159196 105.368046) (xy 54.265882 105.510561) (xy 54.265883 105.510562) (xy 54.875438 104.901006) (xy 54.924348 104.979999) (xy 55.067931 105.137501) (xy 55.226388 105.257163) (xy 54.619436 105.864115) (xy 54.76196 105.970807) (xy 54.761961 105.970808) (xy 55.013042 106.107908) (xy 55.013041 106.107908) (xy 55.281104 106.20789) (xy 55.560637 106.268699) (xy 55.845999 106.289109) (xy 55.846001 106.289109) (xy 56.131362 106.268699) (xy 56.410895 106.20789) (xy 56.678958 106.107908) (xy 56.930047 105.970803) (xy 57.072561 105.864116) (xy 57.072562 105.864115) (xy 56.465611 105.257163) (xy 56.624069 105.137501) (xy 56.767652 104.979999) (xy 56.81656 104.901007) (xy 57.426115 105.510562) (xy 57.426116 105.510561) (xy 57.532803 105.368047) (xy 57.669908 105.116958) (xy 57.76989 104.848895) (xy 57.780987 104.797881) (xy 59.367886 104.797881) (xy 59.386476 105.022235) (xy 59.386478 105.022247) (xy 59.441745 105.24049) (xy 59.532182 105.446668) (xy 59.655318 105.635141) (xy 59.655326 105.635152) (xy 59.807798 105.800778) (xy 59.807802 105.800782) (xy 59.985466 105.939065) (xy 59.985467 105.939065) (xy 59.985469 105.939067) (xy 60.04412 105.970807) (xy 60.183468 106.046218) (xy 60.396407 106.11932) (xy 60.618473 106.156376) (xy 60.843611 106.156376) (xy 61.065677 106.11932) (xy 61.278616 106.046218) (xy 61.476618 105.939065) (xy 61.654282 105.800782) (xy 61.806764 105.635144) (xy 61.929902 105.446667) (xy 62.020338 105.240492) (xy 62.075606 105.022244) (xy 62.079107 104.979999) (xy 62.094198 104.797881) (xy 62.094198 104.79787) (xy 62.075607 104.573516) (xy 62.075605 104.573504) (xy 62.020338 104.355261) (xy 61.98908 104.284) (xy 61.929902 104.149085) (xy 61.806764 103.960608) (xy 61.806761 103.960605) (xy 61.806757 103.960599) (xy 61.654285 103.794973) (xy 61.65428 103.794968) (xy 61.476619 103.656688) (xy 61.476619 103.656687) (xy 61.433345 103.633269) (xy 61.383755 103.584049) (xy 61.368647 103.515833) (xy 61.392817 103.450277) (xy 61.42124 103.422639) (xy 61.602121 103.295984) (xy 61.769147 103.128958) (xy 61.904642 102.935454) (xy 62.004471 102.721368) (xy 62.004474 102.721362) (xy 62.061678 102.507876) (xy 61.164728 102.507876) (xy 61.190535 102.46772) (xy 61.231042 102.329765) (xy 61.231042 102.185987) (xy 61.190535 102.048032) (xy 61.164728 102.007876) (xy 62.061678 102.007876) (xy 62.061677 102.007875) (xy 62.004474 101.794389) (xy 62.004471 101.794383) (xy 61.904642 101.580298) (xy 61.904641 101.580296) (xy 61.769155 101.386802) (xy 61.76915 101.386796) (xy 61.653314 101.27096) (xy 61.619829 101.209637) (xy 61.624813 101.139945) (xy 61.666685 101.084012) (xy 61.697654 101.0671) (xy 61.827246 101.018765) (xy 61.944303 100.931137) (xy 62.031931 100.81408) (xy 62.083031 100.677077) (xy 62.086633 100.643568) (xy 62.089541 100.61653) (xy 62.089542 100.616513) (xy 62.089542 98.819238) (xy 62.089541 98.819221) (xy 62.086199 98.788146) (xy 62.083031 98.758675) (xy 62.031931 98.621672) (xy 61.944303 98.504615) (xy 61.827246 98.416987) (xy 61.690245 98.365887) (xy 61.629696 98.359376) (xy 61.62968 98.359376) (xy 59.832404 98.359376) (xy 59.832387 98.359376) (xy 59.771839 98.365887) (xy 59.771837 98.365887) (xy 59.634837 98.416987) (xy 59.517781 98.504615) (xy 59.430153 98.621671) (xy 59.379053 98.758671) (xy 59.379053 98.758673) (xy 59.372542 98.819221) (xy 59.372542 100.61653) (xy 59.379053 100.677078) (xy 59.379053 100.67708) (xy 59.430153 100.81408) (xy 59.517781 100.931137) (xy 59.634838 101.018765) (xy 59.764424 101.067098) (xy 59.820355 101.108969) (xy 59.844772 101.174433) (xy 59.82992 101.242706) (xy 59.80877 101.27096) (xy 59.692928 101.386802) (xy 59.557442 101.580296) (xy 59.557441 101.580298) (xy 59.457612 101.794383) (xy 59.457609 101.794389) (xy 59.400406 102.007875) (xy 59.400406 102.007876) (xy 60.297356 102.007876) (xy 60.271549 102.048032) (xy 60.231042 102.185987) (xy 60.231042 102.329765) (xy 60.271549 102.46772) (xy 60.297356 102.507876) (xy 59.400406 102.507876) (xy 59.457609 102.721362) (xy 59.457612 102.721368) (xy 59.557441 102.935454) (xy 59.692936 103.128958) (xy 59.859959 103.295981) (xy 60.040844 103.422639) (xy 60.084469 103.477216) (xy 60.091661 103.546715) (xy 60.060139 103.609069) (xy 60.028739 103.633268) (xy 59.985469 103.656685) (xy 59.985464 103.656688) (xy 59.807803 103.794968) (xy 59.807798 103.794973) (xy 59.655326 103.960599) (xy 59.655318 103.96061) (xy 59.532182 104.149083) (xy 59.441745 104.355261) (xy 59.386478 104.573504) (xy 59.386476 104.573516) (xy 59.367886 104.79787) (xy 59.367886 104.797881) (xy 57.780987 104.797881) (xy 57.830699 104.569362) (xy 57.851109 104.284001) (xy 57.851109 104.283998) (xy 57.830699 103.998637) (xy 57.76989 103.719104) (xy 57.669908 103.451041) (xy 57.532808 103.199961) (xy 57.532807 103.19996) (xy 57.426115 103.057436) (xy 56.81656 103.666991) (xy 56.767652 103.588001) (xy 56.624069 103.430499) (xy 56.46561 103.310835) (xy 57.072562 102.703883) (xy 57.072561 102.703882) (xy 56.930046 102.597196) (xy 56.930038 102.597191) (xy 56.678957 102.460091) (xy 56.678958 102.460091) (xy 56.410895 102.360109) (xy 56.131362 102.2993) (xy 55.846001 102.278891) (xy 55.845999 102.278891) (xy 55.560637 102.2993) (xy 55.281104 102.360109) (xy 55.013041 102.460091) (xy 54.761961 102.597191) (xy 54.761953 102.597196) (xy 54.619437 102.703882) (xy 54.619436 102.703883) (xy 55.226389 103.310835) (xy 55.067931 103.430499) (xy 54.924348 103.588001) (xy 54.875439 103.666992) (xy 54.265883 103.057436) (xy 54.265882 103.057437) (xy 54.159196 103.199953) (xy 54.159191 103.199961) (xy 54.022091 103.451041) (xy 53.922109 103.719104) (xy 53.8613 103.998637) (xy 53.840891 104.283998) (xy 53.840891 104.284001) (xy 44.711109 104.284001) (xy 44.711109 104.283998) (xy 44.690699 103.998637) (xy 44.62989 103.719104) (xy 44.529908 103.451041) (xy 44.392808 103.199961) (xy 44.392807 103.19996) (xy 44.286115 103.057436) (xy 43.67656 103.666991) (xy 43.627652 103.588001) (xy 43.484069 103.430499) (xy 43.32561 103.310835) (xy 43.932562 102.703883) (xy 43.932561 102.703882) (xy 43.790046 102.597196) (xy 43.790038 102.597191) (xy 43.538957 102.460091) (xy 43.538958 102.460091) (xy 43.30453 102.372654) (xy 44.4675 102.372654) (xy 44.474011 102.433202) (xy 44.474011 102.433204) (xy 44.525111 102.570203) (xy 44.525111 102.570204) (xy 44.612739 102.687261) (xy 44.729796 102.774889) (xy 44.866799 102.825989) (xy 44.89405 102.828918) (xy 44.927345 102.832499) (xy 44.927362 102.8325) (xy 46.624638 102.8325) (xy 46.624654 102.832499) (xy 46.651692 102.829591) (xy 46.685201 102.825989) (xy 46.822204 102.774889) (xy 46.939261 102.687261) (xy 47.026889 102.570204) (xy 47.040586 102.53348) (xy 47.066717 102.463424) (xy 47.108588 102.40749) (xy 47.174053 102.383074) (xy 47.242326 102.397926) (xy 47.270579 102.419077) (xy 47.4317 102.580198) (xy 47.619251 102.711523) (xy 47.685802 102.742556) (xy 47.82675 102.808281) (xy 47.826752 102.808281) (xy 47.826757 102.808284) (xy 48.047913 102.867543) (xy 48.210832 102.881796) (xy 48.275998 102.887498) (xy 48.276 102.887498) (xy 48.276002 102.887498) (xy 48.333021 102.882509) (xy 48.504087 102.867543) (xy 48.725243 102.808284) (xy 48.932749 102.711523) (xy 49.1203 102.580198) (xy 49.188319 102.512179) (xy 49.249642 102.478694) (xy 49.319334 102.483678) (xy 49.363681 102.512179) (xy 49.4317 102.580198) (xy 49.619251 102.711523) (xy 49.685802 102.742556) (xy 49.82675 102.808281) (xy 49.826752 102.808281) (xy 49.826757 102.808284) (xy 50.047913 102.867543) (xy 50.210832 102.881796) (xy 50.275998 102.887498) (xy 50.276 102.887498) (xy 50.276002 102.887498) (xy 50.333021 102.882509) (xy 50.504087 102.867543) (xy 50.725243 102.808284) (xy 50.932749 102.711523) (xy 51.1203 102.580198) (xy 51.282198 102.4183) (xy 51.413523 102.230749) (xy 51.418307 102.220487) (xy 51.464476 102.168051) (xy 51.531669 102.148897) (xy 51.598551 102.169111) (xy 51.643072 102.22049) (xy 51.645866 102.226483) (xy 51.696973 102.299471) (xy 51.696974 102.299472) (xy 52.313064 101.683381) (xy 52.339481 101.773351) (xy 52.413327 101.888258) (xy 52.516555 101.977705) (xy 52.640801 102.034446) (xy 52.665548 102.038004) (xy 52.050526 102.653025) (xy 52.050526 102.653026) (xy 52.123512 102.704131) (xy 52.123516 102.704133) (xy 52.329673 102.800265) (xy 52.329682 102.800269) (xy 52.549389 102.859139) (xy 52.5494 102.859141) (xy 52.775998 102.878966) (xy 52.776002 102.878966) (xy 53.002599 102.859141) (xy 53.00261 102.859139) (xy 53.222317 102.800269) (xy 53.222331 102.800264) (xy 53.428478 102.704136) (xy 53.501472 102.653025) (xy 52.886451 102.038004) (xy 52.911199 102.034446) (xy 53.035445 101.977705) (xy 53.138673 101.888258) (xy 53.212519 101.773351) (xy 53.238935 101.683382) (xy 53.855025 102.299472) (xy 53.906136 102.226478) (xy 54.002264 102.020331) (xy 54.002269 102.020317) (xy 54.061139 101.80061) (xy 54.061141 101.800599) (xy 54.080966 101.574002) (xy 54.080966 101.573997) (xy 54.061141 101.3474) (xy 54.061139 101.347389) (xy 54.002269 101.127682) (xy 54.002265 101.127673) (xy 53.906133 100.921516) (xy 53.906131 100.921512) (xy 53.855026 100.848526) (xy 53.855025 100.848526) (xy 53.238935 101.464616) (xy 53.212519 101.374649) (xy 53.138673 101.259742) (xy 53.035445 101.170295) (xy 52.911199 101.113554) (xy 52.886451 101.109995) (xy 53.501472 100.494974) (xy 53.501471 100.494973) (xy 53.428483 100.443866) (xy 53.428481 100.443865) (xy 53.222326 100.347734) (xy 53.222317 100.34773) (xy 53.00261 100.28886) (xy 53.002599 100.288858) (xy 52.776002 100.269034) (xy 52.775998 100.269034) (xy 52.5494 100.288858) (xy 52.549389 100.28886) (xy 52.329682 100.34773) (xy 52.329673 100.347734) (xy 52.123513 100.443868) (xy 52.050527 100.494972) (xy 52.050526 100.494973) (xy 52.665549 101.109995) (xy 52.640801 101.113554) (xy 52.516555 101.170295) (xy 52.413327 101.259742) (xy 52.339481 101.374649) (xy 52.313064 101.464617) (xy 51.696973 100.848526) (xy 51.696972 100.848527) (xy 51.645867 100.921513) (xy 51.64307 100.927513) (xy 51.596897 100.979951) (xy 51.529703 100.999102) (xy 51.462822 100.978885) (xy 51.418307 100.927511) (xy 51.413523 100.917251) (xy 51.282198 100.7297) (xy 51.1203 100.567802) (xy 50.932749 100.436477) (xy 50.932745 100.436475) (xy 50.725249 100.339718) (xy 50.725238 100.339714) (xy 50.504089 100.280457) (xy 50.504081 100.280456) (xy 50.276002 100.260502) (xy 50.275998 100.260502) (xy 50.047918 100.280456) (xy 50.04791 100.280457) (xy 49.826761 100.339714) (xy 49.82675 100.339718) (xy 49.619254 100.436475) (xy 49.619252 100.436476) (xy 49.584601 100.460739) (xy 49.4317 100.567802) (xy 49.431698 100.567803) (xy 49.431695 100.567806) (xy 49.363681 100.635821) (xy 49.302358 100.669306) (xy 49.232666 100.664322) (xy 49.188319 100.635821) (xy 49.120304 100.567806) (xy 49.1203 100.567802) (xy 48.932749 100.436477) (xy 48.932745 100.436475) (xy 48.725249 100.339718) (xy 48.725238 100.339714) (xy 48.504089 100.280457) (xy 48.504081 100.280456) (xy 48.276002 100.260502) (xy 48.275998 100.260502) (xy 48.047918 100.280456) (xy 48.04791 100.280457) (xy 47.826761 100.339714) (xy 47.82675 100.339718) (xy 47.619254 100.436475) (xy 47.619252 100.436476) (xy 47.431699 100.567803) (xy 47.270579 100.728923) (xy 47.209256 100.762407) (xy 47.139564 100.757423) (xy 47.083631 100.715551) (xy 47.066717 100.684576) (xy 47.04133 100.616513) (xy 47.026889 100.577796) (xy 46.939261 100.460739) (xy 46.822204 100.373111) (xy 46.685203 100.322011) (xy 46.624654 100.3155) (xy 46.624638 100.3155) (xy 44.927362 100.3155) (xy 44.927345 100.3155) (xy 44.866797 100.322011) (xy 44.866795 100.322011) (xy 44.729795 100.373111) (xy 44.612739 100.460739) (xy 44.525111 100.577795) (xy 44.474011 100.714795) (xy 44.474011 100.714797) (xy 44.4675 100.775345) (xy 44.4675 102.372654) (xy 43.30453 102.372654) (xy 43.270895 102.360109) (xy 42.991362 102.2993) (xy 42.706001 102.278891) (xy 42.705999 102.278891) (xy 42.420637 102.2993) (xy 42.141104 102.360109) (xy 41.873041 102.460091) (xy 41.621961 102.597191) (xy 41.621953 102.597196) (xy 41.479437 102.703882) (xy 41.479436 102.703883) (xy 42.086389 103.310835) (xy 41.927931 103.430499) (xy 41.784348 103.588001) (xy 41.735439 103.666992) (xy 41.125883 103.057436) (xy 41.125882 103.057437) (xy 41.019196 103.199953) (xy 41.019191 103.199961) (xy 40.882091 103.451041) (xy 40.782109 103.719104) (xy 40.7213 103.998637) (xy 40.700891 104.283998) (xy 40.700891 104.284001) (xy 33.798903 104.284001) (xy 33.798903 47.848247) (xy 45.197216 47.848247) (xy 45.199195 47.870888) (xy 45.199369 47.879078) (xy 45.198207 47.904937) (xy 45.198208 47.904939) (xy 45.209214 47.986195) (xy 45.209539 47.989113) (xy 45.213636 48.035933) (xy 45.216408 48.06762) (xy 45.223147 48.092772) (xy 45.224697 48.100492) (xy 45.228616 48.129422) (xy 45.228619 48.129432) (xy 45.252936 48.204272) (xy 45.253857 48.207383) (xy 45.2734 48.280315) (xy 45.273404 48.280327) (xy 45.285798 48.306908) (xy 45.288574 48.313954) (xy 45.29862 48.34487) (xy 45.307628 48.361609) (xy 45.334345 48.411259) (xy 45.335939 48.414436) (xy 45.366465 48.4799) (xy 45.366466 48.479902) (xy 45.366467 48.479903) (xy 45.385191 48.506645) (xy 45.388998 48.512823) (xy 45.405966 48.544354) (xy 45.405968 48.544357) (xy 45.45092 48.600724) (xy 45.453232 48.603816) (xy 45.492774 48.660287) (xy 45.492777 48.66029) (xy 45.518182 48.685695) (xy 45.522818 48.690882) (xy 45.547209 48.721467) (xy 45.599037 48.766748) (xy 45.60208 48.769593) (xy 45.648478 48.815992) (xy 45.648479 48.815993) (xy 45.648482 48.815995) (xy 45.648485 48.815998) (xy 45.67331 48.83338) (xy 45.680632 48.838507) (xy 45.685864 48.842606) (xy 45.717805 48.870512) (xy 45.774058 48.904121) (xy 45.777781 48.906532) (xy 45.814273 48.932084) (xy 45.828861 48.9423) (xy 45.828864 48.942301) (xy 45.828869 48.942305) (xy 45.867433 48.960287) (xy 45.873016 48.963246) (xy 45.912273 48.986702) (xy 45.970533 49.008566) (xy 45.974945 49.01042) (xy 46.028447 49.035369) (xy 46.072727 49.047233) (xy 46.078462 49.049073) (xy 46.107879 49.060113) (xy 46.124362 49.0663) (xy 46.182336 49.07682) (xy 46.187301 49.077934) (xy 46.241152 49.092364) (xy 46.290125 49.096648) (xy 46.295773 49.097406) (xy 46.334875 49.104502) (xy 46.347255 49.106749) (xy 46.347256 49.106749) (xy 46.402871 49.106749) (xy 46.408272 49.106984) (xy 46.436893 49.109488) (xy 46.460521 49.111556) (xy 46.460522 49.111556) (xy 46.460522 49.111555) (xy 46.460523 49.111556) (xy 46.513833 49.106892) (xy 46.517027 49.106749) (xy 46.517045 49.106749) (xy 46.565148 49.102418) (xy 46.571914 49.10181) (xy 46.679876 49.092366) (xy 46.67988 49.092365) (xy 46.679894 49.092364) (xy 46.679906 49.09236) (xy 46.680425 49.092269) (xy 46.685659 49.091573) (xy 46.686145 49.09153) (xy 46.790858 49.06263) (xy 46.892599 49.035369) (xy 46.892612 49.035362) (xy 46.899552 49.032837) (xy 46.904243 49.031338) (xy 46.904516 49.031263) (xy 46.999542 48.9855) (xy 47.092177 48.942305) (xy 47.092186 48.942298) (xy 47.096873 48.939594) (xy 47.096944 48.939717) (xy 47.107729 48.933401) (xy 47.108616 48.932974) (xy 47.191391 48.872834) (xy 47.272561 48.815998) (xy 47.273474 48.815084) (xy 47.288275 48.802442) (xy 47.291886 48.79982) (xy 47.304746 48.78637) (xy 47.360425 48.728133) (xy 47.428269 48.66029) (xy 47.428269 48.660289) (xy 47.428272 48.660287) (xy 47.430999 48.656391) (xy 47.442951 48.641817) (xy 47.448435 48.636083) (xy 47.501332 48.555946) (xy 47.554579 48.479903) (xy 47.558061 48.472434) (xy 47.566959 48.456525) (xy 47.567341 48.455947) (xy 47.573232 48.447023) (xy 47.609739 48.361609) (xy 47.647643 48.280325) (xy 47.650668 48.269031) (xy 47.656419 48.252396) (xy 47.662266 48.238719) (xy 47.682234 48.151227) (xy 47.704638 48.06762) (xy 47.70633 48.048273) (xy 47.707649 48.039875) (xy 47.712674 48.017864) (xy 47.716559 47.931354) (xy 47.72383 47.848249) (xy 47.72383 47.848247) (xy 50.047216 47.848247) (xy 50.049195 47.870888) (xy 50.049369 47.879078) (xy 50.048207 47.904937) (xy 50.048208 47.904939) (xy 50.059214 47.986195) (xy 50.059539 47.989113) (xy 50.063636 48.035933) (xy 50.066408 48.06762) (xy 50.073147 48.092772) (xy 50.074697 48.100492) (xy 50.078616 48.129422) (xy 50.078619 48.129432) (xy 50.102936 48.204272) (xy 50.103857 48.207383) (xy 50.1234 48.280315) (xy 50.123404 48.280327) (xy 50.135798 48.306908) (xy 50.138574 48.313954) (xy 50.14862 48.34487) (xy 50.157628 48.361609) (xy 50.184345 48.411259) (xy 50.185939 48.414436) (xy 50.216465 48.4799) (xy 50.216466 48.479902) (xy 50.216467 48.479903) (xy 50.235191 48.506645) (xy 50.238998 48.512823) (xy 50.255966 48.544354) (xy 50.255968 48.544357) (xy 50.30092 48.600724) (xy 50.303232 48.603816) (xy 50.342774 48.660287) (xy 50.342777 48.66029) (xy 50.368182 48.685695) (xy 50.372818 48.690882) (xy 50.397209 48.721467) (xy 50.449037 48.766748) (xy 50.45208 48.769593) (xy 50.498478 48.815992) (xy 50.498479 48.815993) (xy 50.498482 48.815995) (xy 50.498485 48.815998) (xy 50.52331 48.83338) (xy 50.530632 48.838507) (xy 50.535864 48.842606) (xy 50.567805 48.870512) (xy 50.624058 48.904121) (xy 50.627781 48.906532) (xy 50.664273 48.932084) (xy 50.678861 48.9423) (xy 50.678864 48.942301) (xy 50.678869 48.942305) (xy 50.717433 48.960287) (xy 50.723016 48.963246) (xy 50.762273 48.986702) (xy 50.820533 49.008566) (xy 50.824945 49.01042) (xy 50.878447 49.035369) (xy 50.922727 49.047233) (xy 50.928462 49.049073) (xy 50.957879 49.060113) (xy 50.974362 49.0663) (xy 51.032336 49.07682) (xy 51.037301 49.077934) (xy 51.091152 49.092364) (xy 51.140125 49.096648) (xy 51.145773 49.097406) (xy 51.184875 49.104502) (xy 51.197255 49.106749) (xy 51.197256 49.106749) (xy 51.252871 49.106749) (xy 51.258272 49.106984) (xy 51.286893 49.109488) (xy 51.310521 49.111556) (xy 51.310522 49.111556) (xy 51.310522 49.111555) (xy 51.310523 49.111556) (xy 51.363833 49.106892) (xy 51.367027 49.106749) (xy 51.367045 49.106749) (xy 51.415148 49.102418) (xy 51.421914 49.10181) (xy 51.529876 49.092366) (xy 51.52988 49.092365) (xy 51.529894 49.092364) (xy 51.529906 49.09236) (xy 51.530425 49.092269) (xy 51.535659 49.091573) (xy 51.536145 49.09153) (xy 51.640858 49.06263) (xy 51.742599 49.035369) (xy 51.742612 49.035362) (xy 51.749552 49.032837) (xy 51.754243 49.031338) (xy 51.754516 49.031263) (xy 51.849542 48.9855) (xy 51.942177 48.942305) (xy 51.942186 48.942298) (xy 51.946873 48.939594) (xy 51.946944 48.939717) (xy 51.957729 48.933401) (xy 51.958616 48.932974) (xy 52.041391 48.872834) (xy 52.122561 48.815998) (xy 52.123474 48.815084) (xy 52.138275 48.802442) (xy 52.141886 48.79982) (xy 52.154746 48.78637) (xy 52.210425 48.728133) (xy 52.278269 48.66029) (xy 52.278269 48.660289) (xy 52.278272 48.660287) (xy 52.280999 48.656391) (xy 52.292951 48.641817) (xy 52.298435 48.636083) (xy 52.351332 48.555946) (xy 52.404579 48.479903) (xy 52.408061 48.472434) (xy 52.416959 48.456525) (xy 52.417341 48.455947) (xy 52.423232 48.447023) (xy 52.459739 48.361609) (xy 52.497643 48.280325) (xy 52.500668 48.269031) (xy 52.506419 48.252396) (xy 52.512266 48.238719) (xy 52.532234 48.151227) (xy 52.554638 48.06762) (xy 52.55633 48.048273) (xy 52.557649 48.039875) (xy 52.562674 48.017864) (xy 52.566559 47.931354) (xy 52.57383 47.848249) (xy 52.57185 47.825617) (xy 52.571676 47.817422) (xy 52.572838 47.791558) (xy 52.561828 47.710291) (xy 52.561504 47.707374) (xy 52.555091 47.634063) (xy 52.554638 47.628878) (xy 52.5479 47.603732) (xy 52.546348 47.596002) (xy 52.544645 47.583439) (xy 52.542429 47.567074) (xy 52.51811 47.492231) (xy 52.517194 47.489138) (xy 52.502953 47.43599) (xy 52.497646 47.416182) (xy 52.497642 47.416172) (xy 52.485245 47.389585) (xy 52.482471 47.382545) (xy 52.472426 47.351628) (xy 52.472425 47.351626) (xy 52.472422 47.351619) (xy 52.43669 47.285219) (xy 52.435105 47.28206) (xy 52.404579 47.216596) (xy 52.404575 47.21659) (xy 52.38586 47.189862) (xy 52.382046 47.183673) (xy 52.365078 47.152141) (xy 52.320117 47.095762) (xy 52.317802 47.092666) (xy 52.278273 47.036212) (xy 52.252863 47.010802) (xy 52.248225 47.005613) (xy 52.223835 46.975029) (xy 52.172014 46.929754) (xy 52.168965 46.926904) (xy 52.122562 46.8805) (xy 52.090414 46.85799) (xy 52.085179 46.85389) (xy 52.053241 46.825986) (xy 51.997009 46.792388) (xy 51.993248 46.789953) (xy 51.955503 46.763524) (xy 51.942177 46.754193) (xy 51.928463 46.747798) (xy 51.903623 46.736214) (xy 51.898024 46.733246) (xy 51.867224 46.714845) (xy 51.858773 46.709796) (xy 51.800511 46.68793) (xy 51.796111 46.686082) (xy 51.764416 46.671302) (xy 51.7426 46.661129) (xy 51.742588 46.661125) (xy 51.698316 46.649262) (xy 51.692576 46.647421) (xy 51.646683 46.630197) (xy 51.595638 46.620933) (xy 51.588714 46.619677) (xy 51.58374 46.618561) (xy 51.529895 46.604134) (xy 51.517893 46.603083) (xy 51.480926 46.599849) (xy 51.475264 46.599089) (xy 51.440521 46.592785) (xy 51.42379 46.589749) (xy 51.423789 46.589749) (xy 51.368175 46.589749) (xy 51.362773 46.589513) (xy 51.334152 46.587009) (xy 51.310525 46.584942) (xy 51.31052 46.584942) (xy 51.257251 46.589602) (xy 51.254012 46.589748) (xy 51.199131 46.594687) (xy 51.091141 46.604134) (xy 51.090564 46.604236) (xy 51.085412 46.604921) (xy 51.084909 46.604966) (xy 51.084892 46.604969) (xy 50.980187 46.633867) (xy 50.878441 46.66113) (xy 50.871467 46.663667) (xy 50.866791 46.665161) (xy 50.866545 46.665228) (xy 50.866534 46.665233) (xy 50.771487 46.711004) (xy 50.678875 46.75419) (xy 50.674181 46.7569) (xy 50.67411 46.756778) (xy 50.663347 46.763082) (xy 50.662431 46.763523) (xy 50.662425 46.763526) (xy 50.579642 46.823672) (xy 50.503524 46.876972) (xy 50.498481 46.880503) (xy 50.49755 46.881434) (xy 50.482787 46.894042) (xy 50.479164 46.896674) (xy 50.479154 46.896683) (xy 50.41062 46.968364) (xy 50.34277 47.036215) (xy 50.342769 47.036216) (xy 50.340029 47.040129) (xy 50.328104 47.054668) (xy 50.322612 47.060412) (xy 50.322608 47.060418) (xy 50.269706 47.140562) (xy 50.216466 47.216596) (xy 50.216464 47.216601) (xy 50.212985 47.224061) (xy 50.204099 47.239951) (xy 50.197815 47.249471) (xy 50.197814 47.249473) (xy 50.161303 47.334893) (xy 50.123405 47.416166) (xy 50.123403 47.416172) (xy 50.120375 47.427471) (xy 50.114625 47.444103) (xy 50.108782 47.457774) (xy 50.108779 47.457782) (xy 50.088811 47.54527) (xy 50.066408 47.628875) (xy 50.066407 47.628881) (xy 50.064715 47.648219) (xy 50.063396 47.656615) (xy 50.058372 47.678634) (xy 50.054486 47.765143) (xy 50.047216 47.848245) (xy 50.047216 47.848247) (xy 47.72383 47.848247) (xy 47.72185 47.825617) (xy 47.721676 47.817422) (xy 47.722838 47.791558) (xy 47.711828 47.710291) (xy 47.711504 47.707374) (xy 47.705091 47.634063) (xy 47.704638 47.628878) (xy 47.6979 47.603732) (xy 47.696348 47.596002) (xy 47.694645 47.583439) (xy 47.692429 47.567074) (xy 47.66811 47.492231) (xy 47.667194 47.489138) (xy 47.652953 47.43599) (xy 47.647646 47.416182) (xy 47.647642 47.416172) (xy 47.635245 47.389585) (xy 47.632471 47.382545) (xy 47.622426 47.351628) (xy 47.622425 47.351626) (xy 47.622422 47.351619) (xy 47.58669 47.285219) (xy 47.585105 47.28206) (xy 47.554579 47.216596) (xy 47.554575 47.21659) (xy 47.53586 47.189862) (xy 47.532046 47.183673) (xy 47.515078 47.152141) (xy 47.470117 47.095762) (xy 47.467802 47.092666) (xy 47.428273 47.036212) (xy 47.402863 47.010802) (xy 47.398225 47.005613) (xy 47.373835 46.975029) (xy 47.322014 46.929754) (xy 47.318965 46.926904) (xy 47.272562 46.8805) (xy 47.240414 46.85799) (xy 47.235179 46.85389) (xy 47.203241 46.825986) (xy 47.147009 46.792388) (xy 47.143248 46.789953) (xy 47.105503 46.763524) (xy 47.092177 46.754193) (xy 47.078463 46.747798) (xy 47.053623 46.736214) (xy 47.048024 46.733246) (xy 47.017224 46.714845) (xy 47.008773 46.709796) (xy 46.950511 46.68793) (xy 46.946111 46.686082) (xy 46.914416 46.671302) (xy 46.8926 46.661129) (xy 46.892588 46.661125) (xy 46.848316 46.649262) (xy 46.842576 46.647421) (xy 46.796683 46.630197) (xy 46.745638 46.620933) (xy 46.738714 46.619677) (xy 46.73374 46.618561) (xy 46.679895 46.604134) (xy 46.667893 46.603083) (xy 46.630926 46.599849) (xy 46.625264 46.599089) (xy 46.590521 46.592785) (xy 46.57379 46.589749) (xy 46.573789 46.589749) (xy 46.518175 46.589749) (xy 46.512773 46.589513) (xy 46.484152 46.587009) (xy 46.460525 46.584942) (xy 46.46052 46.584942) (xy 46.407251 46.589602) (xy 46.404012 46.589748) (xy 46.349131 46.594687) (xy 46.241141 46.604134) (xy 46.240564 46.604236) (xy 46.235412 46.604921) (xy 46.234909 46.604966) (xy 46.234892 46.604969) (xy 46.130187 46.633867) (xy 46.028441 46.66113) (xy 46.021467 46.663667) (xy 46.016791 46.665161) (xy 46.016545 46.665228) (xy 46.016534 46.665233) (xy 45.921487 46.711004) (xy 45.828875 46.75419) (xy 45.824181 46.7569) (xy 45.82411 46.756778) (xy 45.813347 46.763082) (xy 45.812431 46.763523) (xy 45.812425 46.763526) (xy 45.729642 46.823672) (xy 45.653524 46.876972) (xy 45.648481 46.880503) (xy 45.64755 46.881434) (xy 45.632787 46.894042) (xy 45.629164 46.896674) (xy 45.629154 46.896683) (xy 45.56062 46.968364) (xy 45.49277 47.036215) (xy 45.492769 47.036216) (xy 45.490029 47.040129) (xy 45.478104 47.054668) (xy 45.472612 47.060412) (xy 45.472608 47.060418) (xy 45.419706 47.140562) (xy 45.366466 47.216596) (xy 45.366464 47.216601) (xy 45.362985 47.224061) (xy 45.354099 47.239951) (xy 45.347815 47.249471) (xy 45.347814 47.249473) (xy 45.311303 47.334893) (xy 45.273405 47.416166) (xy 45.273403 47.416172) (xy 45.270375 47.427471) (xy 45.264625 47.444103) (xy 45.258782 47.457774) (xy 45.258779 47.457782) (xy 45.238811 47.54527) (xy 45.216408 47.628875) (xy 45.216407 47.628881) (xy 45.214715 47.648219) (xy 45.213396 47.656615) (xy 45.208372 47.678634) (xy 45.204486 47.765143) (xy 45.197216 47.848245) (xy 45.197216 47.848247) (xy 33.798903 47.848247) (xy 33.798903 44.818249) (xy 44.747196 44.818249) (xy 44.752167 44.878243) (xy 44.754494 44.906332) (xy 44.758379 44.997792) (xy 44.75838 44.997801) (xy 44.763533 45.02171) (xy 44.764713 45.029659) (xy 44.76647 45.050866) (xy 44.766472 45.050878) (xy 44.78894 45.139602) (xy 44.808893 45.232184) (xy 44.81678 45.25181) (xy 44.819357 45.259715) (xy 44.823774 45.277156) (xy 44.861808 45.363865) (xy 44.89829 45.454653) (xy 44.907546 45.469685) (xy 44.907652 45.469857) (xy 44.91164 45.477469) (xy 44.917538 45.490917) (xy 44.971047 45.572819) (xy 45.023996 45.658814) (xy 45.024003 45.658823) (xy 45.030681 45.66641) (xy 45.041409 45.680516) (xy 45.045209 45.686332) (xy 45.113602 45.760626) (xy 45.176146 45.83169) (xy 45.182405 45.838801) (xy 45.182406 45.838802) (xy 45.187593 45.84299) (xy 45.20093 45.855489) (xy 45.203306 45.858071) (xy 45.254639 45.898024) (xy 45.285471 45.922021) (xy 45.332554 45.960038) (xy 45.368944 45.989422) (xy 45.368945 45.989422) (xy 45.368947 45.989424) (xy 45.371688 45.990955) (xy 45.371763 45.990997) (xy 45.387457 46.001401) (xy 45.387502 46.001436) (xy 45.387514 46.001444) (xy 45.447713 46.034021) (xy 45.481869 46.052505) (xy 45.578263 46.106354) (xy 45.578268 46.106355) (xy 45.578272 46.106358) (xy 45.580663 46.107439) (xy 45.588 46.110697) (xy 45.588098 46.110475) (xy 45.592785 46.11253) (xy 45.592796 46.112536) (xy 45.697263 46.1484) (xy 45.804329 46.186229) (xy 45.80489 46.186325) (xy 45.809632 46.18733) (xy 45.813566 46.188327) (xy 45.813572 46.188329) (xy 45.925618 46.207026) (xy 46.040633 46.226748) (xy 46.040642 46.226749) (xy 46.27723 46.226749) (xy 46.277235 46.226749) (xy 46.310171 46.221252) (xy 46.333998 46.217277) (xy 46.338936 46.216655) (xy 46.392464 46.2121) (xy 46.39941 46.211509) (xy 46.399411 46.211508) (xy 46.399421 46.211508) (xy 46.45182 46.197863) (xy 46.457191 46.196718) (xy 46.507474 46.188329) (xy 46.565025 46.168571) (xy 46.569498 46.167222) (xy 46.631447 46.151093) (xy 46.677782 46.130147) (xy 46.683156 46.128016) (xy 46.72825 46.112536) (xy 46.784655 46.08201) (xy 46.788577 46.080065) (xy 46.849925 46.052335) (xy 46.889318 46.025708) (xy 46.894502 46.022563) (xy 46.933531 46.001444) (xy 46.933535 46.001442) (xy 46.933536 46.001441) (xy 46.93354 46.001439) (xy 46.986751 45.960021) (xy 46.990084 45.957602) (xy 47.04857 45.918074) (xy 47.080524 45.887447) (xy 47.085312 45.883307) (xy 47.117743 45.858067) (xy 47.165642 45.806033) (xy 47.168317 45.803305) (xy 47.221667 45.752174) (xy 47.24602 45.719245) (xy 47.25025 45.714126) (xy 47.275832 45.686337) (xy 47.275837 45.686332) (xy 47.316308 45.624384) (xy 47.318358 45.621438) (xy 47.319357 45.620086) (xy 47.364238 45.559406) (xy 47.381199 45.525763) (xy 47.384637 45.519798) (xy 47.403507 45.490918) (xy 47.434565 45.42011) (xy 47.435936 45.417199) (xy 47.47218 45.345316) (xy 47.482244 45.312449) (xy 47.484744 45.305715) (xy 47.497272 45.277156) (xy 47.517058 45.199019) (xy 47.517857 45.196158) (xy 47.542387 45.116064) (xy 47.546333 45.085243) (xy 47.547721 45.077933) (xy 47.554574 45.050875) (xy 47.561613 44.965921) (xy 47.572841 44.878244) (xy 47.571662 44.850498) (xy 47.571817 44.842774) (xy 47.57385 44.818249) (xy 50.197196 44.818249) (xy 50.202167 44.878243) (xy 50.204494 44.906332) (xy 50.208379 44.997792) (xy 50.20838 44.997801) (xy 50.213533 45.02171) (xy 50.214713 45.029659) (xy 50.21647 45.050866) (xy 50.216472 45.050878) (xy 50.23894 45.139602) (xy 50.258893 45.232184) (xy 50.26678 45.25181) (xy 50.269357 45.259715) (xy 50.273774 45.277156) (xy 50.311808 45.363865) (xy 50.34829 45.454653) (xy 50.357546 45.469685) (xy 50.357652 45.469857) (xy 50.36164 45.477469) (xy 50.367538 45.490917) (xy 50.421047 45.572819) (xy 50.473996 45.658814) (xy 50.474003 45.658823) (xy 50.480681 45.66641) (xy 50.491409 45.680516) (xy 50.495209 45.686332) (xy 50.563602 45.760626) (xy 50.626146 45.83169) (xy 50.632405 45.838801) (xy 50.632406 45.838802) (xy 50.637593 45.84299) (xy 50.65093 45.855489) (xy 50.653306 45.858071) (xy 50.704639 45.898024) (xy 50.735471 45.922021) (xy 50.782554 45.960038) (xy 50.818944 45.989422) (xy 50.818945 45.989422) (xy 50.818947 45.989424) (xy 50.821688 45.990955) (xy 50.821763 45.990997) (xy 50.837457 46.001401) (xy 50.837502 46.001436) (xy 50.837514 46.001444) (xy 50.897713 46.034021) (xy 50.931869 46.052505) (xy 51.028263 46.106354) (xy 51.028268 46.106355) (xy 51.028272 46.106358) (xy 51.030663 46.107439) (xy 51.038 46.110697) (xy 51.038098 46.110475) (xy 51.042785 46.11253) (xy 51.042796 46.112536) (xy 51.147263 46.1484) (xy 51.254329 46.186229) (xy 51.25489 46.186325) (xy 51.259632 46.18733) (xy 51.263566 46.188327) (xy 51.263572 46.188329) (xy 51.375618 46.207026) (xy 51.490633 46.226748) (xy 51.490642 46.226749) (xy 51.72723 46.226749) (xy 51.727235 46.226749) (xy 51.760171 46.221252) (xy 51.783998 46.217277) (xy 51.788936 46.216655) (xy 51.842464 46.2121) (xy 51.84941 46.211509) (xy 51.849411 46.211508) (xy 51.849421 46.211508) (xy 51.90182 46.197863) (xy 51.907191 46.196718) (xy 51.957474 46.188329) (xy 52.015025 46.168571) (xy 52.019498 46.167222) (xy 52.081447 46.151093) (xy 52.127782 46.130147) (xy 52.133156 46.128016) (xy 52.17825 46.112536) (xy 52.234655 46.08201) (xy 52.238577 46.080065) (xy 52.299925 46.052335) (xy 52.339318 46.025708) (xy 52.344502 46.022563) (xy 52.383531 46.001444) (xy 52.383535 46.001442) (xy 52.383536 46.001441) (xy 52.38354 46.001439) (xy 52.436751 45.960021) (xy 52.440084 45.957602) (xy 52.49857 45.918074) (xy 52.530524 45.887447) (xy 52.535312 45.883307) (xy 52.567743 45.858067) (xy 52.615642 45.806033) (xy 52.618317 45.803305) (xy 52.671667 45.752174) (xy 52.69602 45.719245) (xy 52.70025 45.714126) (xy 52.725832 45.686337) (xy 52.725837 45.686332) (xy 52.766308 45.624384) (xy 52.768358 45.621438) (xy 52.769357 45.620086) (xy 52.814238 45.559406) (xy 52.831199 45.525763) (xy 52.834637 45.519798) (xy 52.853507 45.490918) (xy 52.884565 45.42011) (xy 52.885936 45.417199) (xy 52.92218 45.345316) (xy 52.932244 45.312449) (xy 52.934744 45.305715) (xy 52.947272 45.277156) (xy 52.967058 45.199019) (xy 52.967857 45.196158) (xy 52.992387 45.116064) (xy 52.996333 45.085243) (xy 52.997721 45.077933) (xy 53.004574 45.050875) (xy 53.011613 44.965921) (xy 53.022841 44.878244) (xy 53.021662 44.850498) (xy 53.021817 44.842774) (xy 53.02385 44.818249) (xy 53.018878 44.758253) (xy 53.016551 44.730165) (xy 53.012667 44.638709) (xy 53.012666 44.638706) (xy 53.012666 44.638698) (xy 53.00751 44.614779) (xy 53.006331 44.606835) (xy 53.004574 44.585628) (xy 53.004574 44.585623) (xy 52.982105 44.496895) (xy 52.962153 44.404317) (xy 52.954258 44.384673) (xy 52.95169 44.376793) (xy 52.947272 44.359342) (xy 52.909237 44.272632) (xy 52.872756 44.181845) (xy 52.86339 44.166635) (xy 52.859405 44.159027) (xy 52.858625 44.157249) (xy 52.853507 44.14558) (xy 52.799998 44.063678) (xy 52.747047 43.97768) (xy 52.747041 43.977673) (xy 52.747038 43.977669) (xy 52.740362 43.970083) (xy 52.729641 43.955988) (xy 52.725838 43.950168) (xy 52.725837 43.950166) (xy 52.657443 43.875871) (xy 52.588642 43.797698) (xy 52.588641 43.797697) (xy 52.588637 43.797693) (xy 52.583452 43.793507) (xy 52.57012 43.781014) (xy 52.567743 43.778431) (xy 52.485574 43.714476) (xy 52.402099 43.647074) (xy 52.402097 43.647072) (xy 52.402091 43.647068) (xy 52.399273 43.645494) (xy 52.383593 43.6351) (xy 52.383543 43.635061) (xy 52.383541 43.63506) (xy 52.38354 43.635059) (xy 52.289176 43.583992) (xy 52.236345 43.554479) (xy 52.192782 43.530143) (xy 52.190522 43.529122) (xy 52.183042 43.5258) (xy 52.182945 43.526022) (xy 52.178248 43.523961) (xy 52.073782 43.488097) (xy 51.96672 43.45027) (xy 51.966719 43.450269) (xy 51.966717 43.450269) (xy 51.966715 43.450268) (xy 51.966706 43.450266) (xy 51.966156 43.450172) (xy 51.961436 43.449171) (xy 51.957489 43.448172) (xy 51.957476 43.448169) (xy 51.957474 43.448169) (xy 51.845427 43.429471) (xy 51.730413 43.409749) (xy 51.730404 43.409749) (xy 51.727235 43.409749) (xy 51.493811 43.409749) (xy 51.49381 43.409749) (xy 51.437052 43.419219) (xy 51.43211 43.419841) (xy 51.398353 43.422714) (xy 51.371623 43.42499) (xy 51.37162 43.42499) (xy 51.319256 43.438625) (xy 51.313836 43.439781) (xy 51.263572 43.448168) (xy 51.206035 43.46792) (xy 51.201528 43.469278) (xy 51.156418 43.481025) (xy 51.139599 43.485405) (xy 51.139596 43.485406) (xy 51.139593 43.485407) (xy 51.093281 43.506341) (xy 51.087882 43.508482) (xy 51.073286 43.513493) (xy 51.042796 43.523961) (xy 50.986402 43.554479) (xy 50.982433 43.556447) (xy 50.92112 43.584163) (xy 50.921118 43.584164) (xy 50.881732 43.610784) (xy 50.876525 43.613942) (xy 50.864961 43.6202) (xy 50.837501 43.635061) (xy 50.784303 43.676467) (xy 50.780948 43.678902) (xy 50.750872 43.69923) (xy 50.722474 43.718425) (xy 50.722471 43.718428) (xy 50.690535 43.749035) (xy 50.685716 43.753201) (xy 50.653304 43.77843) (xy 50.653303 43.778431) (xy 50.605421 43.830442) (xy 50.602707 43.833211) (xy 50.54938 43.884322) (xy 50.525026 43.917248) (xy 50.520793 43.922372) (xy 50.495207 43.950167) (xy 50.495204 43.950171) (xy 50.454745 44.012099) (xy 50.452689 44.015055) (xy 50.40681 44.077088) (xy 50.406809 44.077089) (xy 50.389856 44.110712) (xy 50.386398 44.116712) (xy 50.367538 44.145581) (xy 50.336501 44.216338) (xy 50.335085 44.219345) (xy 50.298865 44.291182) (xy 50.298864 44.291183) (xy 50.288803 44.324035) (xy 50.286298 44.330786) (xy 50.273772 44.359343) (xy 50.273772 44.359344) (xy 50.253992 44.437452) (xy 50.253172 44.440386) (xy 50.22866 44.520427) (xy 50.228658 44.520439) (xy 50.224714 44.551235) (xy 50.223318 44.558584) (xy 50.216473 44.585616) (xy 50.216471 44.585628) (xy 50.209432 44.670576) (xy 50.198205 44.758252) (xy 50.198204 44.758253) (xy 50.199382 44.78598) (xy 50.199226 44.793734) (xy 50.197196 44.818244) (xy 50.197196 44.818249) (xy 47.57385 44.818249) (xy 47.568878 44.758253) (xy 47.566551 44.730165) (xy 47.562667 44.638709) (xy 47.562666 44.638706) (xy 47.562666 44.638698) (xy 47.55751 44.614779) (xy 47.556331 44.606835) (xy 47.554574 44.585628) (xy 47.554574 44.585623) (xy 47.532105 44.496895) (xy 47.512153 44.404317) (xy 47.504258 44.384673) (xy 47.50169 44.376793) (xy 47.497272 44.359342) (xy 47.459237 44.272632) (xy 47.422756 44.181845) (xy 47.41339 44.166635) (xy 47.409405 44.159027) (xy 47.408625 44.157249) (xy 47.403507 44.14558) (xy 47.349998 44.063678) (xy 47.297047 43.97768) (xy 47.297041 43.977673) (xy 47.297038 43.977669) (xy 47.290362 43.970083) (xy 47.279641 43.955988) (xy 47.275838 43.950168) (xy 47.275837 43.950166) (xy 47.207443 43.875871) (xy 47.138642 43.797698) (xy 47.138641 43.797697) (xy 47.138637 43.797693) (xy 47.133452 43.793507) (xy 47.12012 43.781014) (xy 47.117743 43.778431) (xy 47.035574 43.714476) (xy 46.952099 43.647074) (xy 46.952097 43.647072) (xy 46.952091 43.647068) (xy 46.949273 43.645494) (xy 46.933593 43.6351) (xy 46.933543 43.635061) (xy 46.933541 43.63506) (xy 46.93354 43.635059) (xy 46.839176 43.583992) (xy 46.786345 43.554479) (xy 46.742782 43.530143) (xy 46.740522 43.529122) (xy 46.733042 43.5258) (xy 46.732945 43.526022) (xy 46.728248 43.523961) (xy 46.623782 43.488097) (xy 46.51672 43.45027) (xy 46.516719 43.450269) (xy 46.516717 43.450269) (xy 46.516715 43.450268) (xy 46.516706 43.450266) (xy 46.516156 43.450172) (xy 46.511436 43.449171) (xy 46.507489 43.448172) (xy 46.507476 43.448169) (xy 46.507474 43.448169) (xy 46.395427 43.429471) (xy 46.280413 43.409749) (xy 46.280404 43.409749) (xy 46.277235 43.409749) (xy 46.043811 43.409749) (xy 46.04381 43.409749) (xy 45.987052 43.419219) (xy 45.98211 43.419841) (xy 45.948353 43.422714) (xy 45.921623 43.42499) (xy 45.92162 43.42499) (xy 45.869256 43.438625) (xy 45.863836 43.439781) (xy 45.813572 43.448168) (xy 45.756035 43.46792) (xy 45.751528 43.469278) (xy 45.706418 43.481025) (xy 45.689599 43.485405) (xy 45.689596 43.485406) (xy 45.689593 43.485407) (xy 45.643281 43.506341) (xy 45.637882 43.508482) (xy 45.623286 43.513493) (xy 45.592796 43.523961) (xy 45.536402 43.554479) (xy 45.532433 43.556447) (xy 45.47112 43.584163) (xy 45.471118 43.584164) (xy 45.431732 43.610784) (xy 45.426525 43.613942) (xy 45.414961 43.6202) (xy 45.387501 43.635061) (xy 45.334303 43.676467) (xy 45.330948 43.678902) (xy 45.300872 43.69923) (xy 45.272474 43.718425) (xy 45.272471 43.718428) (xy 45.240535 43.749035) (xy 45.235716 43.753201) (xy 45.203304 43.77843) (xy 45.203303 43.778431) (xy 45.155421 43.830442) (xy 45.152707 43.833211) (xy 45.09938 43.884322) (xy 45.075026 43.917248) (xy 45.070793 43.922372) (xy 45.045207 43.950167) (xy 45.045204 43.950171) (xy 45.004745 44.012099) (xy 45.002689 44.015055) (xy 44.95681 44.077088) (xy 44.956809 44.077089) (xy 44.939856 44.110712) (xy 44.936398 44.116712) (xy 44.917538 44.145581) (xy 44.886501 44.216338) (xy 44.885085 44.219345) (xy 44.848865 44.291182) (xy 44.848864 44.291183) (xy 44.838803 44.324035) (xy 44.836298 44.330786) (xy 44.823772 44.359343) (xy 44.823772 44.359344) (xy 44.803992 44.437452) (xy 44.803172 44.440386) (xy 44.77866 44.520427) (xy 44.778658 44.520439) (xy 44.774714 44.551235) (xy 44.773318 44.558584) (xy 44.766473 44.585616) (xy 44.766471 44.585628) (xy 44.759432 44.670576) (xy 44.748205 44.758252) (xy 44.748204 44.758253) (xy 44.749382 44.78598) (xy 44.749226 44.793734) (xy 44.747196 44.818244) (xy 44.747196 44.818249) (xy 33.798903 44.818249) (xy 33.798903 41.234624) (xy 33.818588 41.167585) (xy 33.871392 41.12183) (xy 33.922903 41.110624) (xy 64.154248 41.110624) ) ) ) (zone (net 65) (net_name "GND2") (layer "B.Cu") (tstamp 769796d0-bf36-436c-8f82-b45a68daa42e) (hatch edge 0.5) (priority 2) (connect_pads (clearance 0.508)) (min_thickness 0.25) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5)) (polygon (pts (xy 68.072 41.072913) (xy 100.706855 41.010565) (xy 100.706855 115.57) (xy 68.072 115.57) ) ) (filled_polygon (layer "B.Cu") (pts (xy 100.607112 41.130309) (xy 100.652867 41.183113) (xy 100.664073 41.234624) (xy 100.664073 115.416875) (xy 100.644388 115.483914) (xy 100.591584 115.529669) (xy 100.540073 115.540875) (xy 68.196 115.540875) (xy 68.128961 115.52119) (xy 68.083206 115.468386) (xy 68.072 115.416875) (xy 68.072 111.506) (xy 93.568958 111.506) (xy 93.58911 111.864846) (xy 93.589112 111.864858) (xy 93.649314 112.219185) (xy 93.649316 112.219194) (xy 93.748812 112.564552) (xy 93.886353 112.896609) (xy 93.886355 112.896613) (xy 94.060215 113.211189) (xy 94.060218 113.211194) (xy 94.268193 113.504306) (xy 94.340843 113.585601) (xy 95.659073 112.267372) (xy 95.73589 112.377078) (xy 95.902922 112.54411) (xy 96.012626 112.620925) (xy 94.694397 113.939155) (xy 94.775693 114.011806) (xy 95.068805 114.219781) (xy 95.06881 114.219784) (xy 95.383386 114.393644) (xy 95.38339 114.393646) (xy 95.715447 114.531187) (xy 96.060805 114.630683) (xy 96.060814 114.630685) (xy 96.415141 114.690887) (xy 96.415153 114.690889) (xy 96.774 114.711041) (xy 97.132846 114.690889) (xy 97.132858 114.690887) (xy 97.487185 114.630685) (xy 97.487194 114.630683) (xy 97.832552 114.531187) (xy 98.164609 114.393646) (xy 98.164613 114.393644) (xy 98.479189 114.219784) (xy 98.479194 114.219781) (xy 98.772306 114.011806) (xy 98.853601 113.939155) (xy 97.535373 112.620925) (xy 97.645078 112.54411) (xy 97.81211 112.377078) (xy 97.888926 112.267373) (xy 99.207155 113.585601) (xy 99.279806 113.504306) (xy 99.487781 113.211194) (xy 99.487784 113.211189) (xy 99.661644 112.896613) (xy 99.661646 112.896609) (xy 99.799187 112.564552) (xy 99.898683 112.219194) (xy 99.898685 112.219185) (xy 99.958887 111.864858) (xy 99.958889 111.864846) (xy 99.979041 111.506) (xy 99.958889 111.147153) (xy 99.958887 111.147141) (xy 99.898685 110.792814) (xy 99.898683 110.792805) (xy 99.799187 110.447447) (xy 99.661646 110.11539) (xy 99.661644 110.115386) (xy 99.487784 109.80081) (xy 99.487781 109.800805) (xy 99.279806 109.507693) (xy 99.207155 109.426397) (xy 97.888925 110.744626) (xy 97.81211 110.634922) (xy 97.645078 110.46789) (xy 97.535372 110.391073) (xy 98.853602 109.072843) (xy 98.772306 109.000193) (xy 98.479194 108.792218) (xy 98.479189 108.792215) (xy 98.164613 108.618355) (xy 98.164609 108.618353) (xy 97.832552 108.480812) (xy 97.487194 108.381316) (xy 97.487185 108.381314) (xy 97.132858 108.321112) (xy 97.132846 108.32111) (xy 96.774 108.300958) (xy 96.415153 108.32111) (xy 96.415141 108.321112) (xy 96.060814 108.381314) (xy 96.060805 108.381316) (xy 95.715447 108.480812) (xy 95.38339 108.618353) (xy 95.383386 108.618355) (xy 95.06881 108.792215) (xy 95.068805 108.792218) (xy 94.775693 109.000194) (xy 94.775685 109.000199) (xy 94.694397 109.072842) (xy 94.694397 109.072843) (xy 96.012627 110.391073) (xy 95.902922 110.46789) (xy 95.73589 110.634922) (xy 95.659073 110.744626) (xy 94.340843 109.426396) (xy 94.340842 109.426397) (xy 94.268199 109.507685) (xy 94.268194 109.507693) (xy 94.060218 109.800805) (xy 94.060215 109.80081) (xy 93.886355 110.115386) (xy 93.886353 110.11539) (xy 93.748812 110.447447) (xy 93.649316 110.792805) (xy 93.649314 110.792814) (xy 93.589112 111.147141) (xy 93.58911 111.147153) (xy 93.568958 111.506) (xy 68.072 111.506) (xy 68.072 104.284001) (xy 76.006891 104.284001) (xy 76.0273 104.569362) (xy 76.088109 104.848895) (xy 76.188091 105.116958) (xy 76.325191 105.368038) (xy 76.325196 105.368046) (xy 76.431882 105.510561) (xy 76.431883 105.510562) (xy 77.041438 104.901006) (xy 77.090348 104.979999) (xy 77.233931 105.137501) (xy 77.392388 105.257163) (xy 76.785436 105.864115) (xy 76.92796 105.970807) (xy 76.927961 105.970808) (xy 77.179042 106.107908) (xy 77.179041 106.107908) (xy 77.447104 106.20789) (xy 77.726637 106.268699) (xy 78.011999 106.289109) (xy 78.012001 106.289109) (xy 78.297362 106.268699) (xy 78.576895 106.20789) (xy 78.844958 106.107908) (xy 79.096047 105.970803) (xy 79.238561 105.864116) (xy 79.238562 105.864115) (xy 78.631611 105.257163) (xy 78.790069 105.137501) (xy 78.933652 104.979999) (xy 78.98256 104.901007) (xy 79.592115 105.510562) (xy 79.592116 105.510561) (xy 79.698803 105.368047) (xy 79.835908 105.116958) (xy 79.93589 104.848895) (xy 79.996699 104.569362) (xy 80.017109 104.284001) (xy 89.146891 104.284001) (xy 89.1673 104.569362) (xy 89.228109 104.848895) (xy 89.328091 105.116958) (xy 89.465191 105.368038) (xy 89.465196 105.368046) (xy 89.571882 105.510561) (xy 89.571883 105.510562) (xy 90.181438 104.901006) (xy 90.230348 104.979999) (xy 90.373931 105.137501) (xy 90.532388 105.257163) (xy 89.925436 105.864115) (xy 90.06796 105.970807) (xy 90.067961 105.970808) (xy 90.319042 106.107908) (xy 90.319041 106.107908) (xy 90.587104 106.20789) (xy 90.866637 106.268699) (xy 91.151999 106.289109) (xy 91.152001 106.289109) (xy 91.437362 106.268699) (xy 91.716895 106.20789) (xy 91.984958 106.107908) (xy 92.236047 105.970803) (xy 92.378561 105.864116) (xy 92.378562 105.864115) (xy 91.771611 105.257163) (xy 91.930069 105.137501) (xy 92.073652 104.979999) (xy 92.12256 104.901007) (xy 92.732115 105.510562) (xy 92.732116 105.510561) (xy 92.838803 105.368047) (xy 92.975908 105.116958) (xy 93.065869 104.875762) (xy 94.304381 104.875762) (xy 94.322971 105.100116) (xy 94.322973 105.100128) (xy 94.37824 105.318371) (xy 94.468677 105.524549) (xy 94.591813 105.713022) (xy 94.591821 105.713033) (xy 94.730904 105.864115) (xy 94.744297 105.878663) (xy 94.921961 106.016946) (xy 94.921962 106.016946) (xy 94.921964 106.016948) (xy 95.048672 106.085518) (xy 95.119963 106.124099) (xy 95.332902 106.197201) (xy 95.554968 106.234257) (xy 95.780106 106.234257) (xy 96.002172 106.197201) (xy 96.215111 106.124099) (xy 96.413113 106.016946) (xy 96.590777 105.878663) (xy 96.743259 105.713025) (xy 96.866397 105.524548) (xy 96.956833 105.318373) (xy 97.012101 105.100125) (xy 97.030693 104.875757) (xy 97.028467 104.848895) (xy 97.012102 104.651397) (xy 97.0121 104.651385) (xy 96.956833 104.433142) (xy 96.938156 104.390563) (xy 96.866397 104.226966) (xy 96.743259 104.038489) (xy 96.743256 104.038486) (xy 96.743252 104.03848) (xy 96.59078 103.872854) (xy 96.590775 103.872849) (xy 96.413114 103.734569) (xy 96.413114 103.734568) (xy 96.36984 103.71115) (xy 96.32025 103.66193) (xy 96.305142 103.593714) (xy 96.329312 103.528158) (xy 96.357735 103.50052) (xy 96.538616 103.373865) (xy 96.705642 103.206839) (xy 96.841137 103.013335) (xy 96.940966 102.799249) (xy 96.940969 102.799243) (xy 96.998173 102.585757) (xy 96.101223 102.585757) (xy 96.12703 102.545601) (xy 96.167537 102.407646) (xy 96.167537 102.263868) (xy 96.12703 102.125913) (xy 96.101223 102.085757) (xy 96.998173 102.085757) (xy 96.998172 102.085756) (xy 96.940969 101.87227) (xy 96.940966 101.872264) (xy 96.841137 101.658179) (xy 96.841136 101.658177) (xy 96.70565 101.464683) (xy 96.705645 101.464677) (xy 96.589809 101.348841) (xy 96.556324 101.287518) (xy 96.561308 101.217826) (xy 96.60318 101.161893) (xy 96.634149 101.144981) (xy 96.763741 101.096646) (xy 96.880798 101.009018) (xy 96.968426 100.891961) (xy 97.019526 100.754958) (xy 97.023763 100.715551) (xy 97.026036 100.694411) (xy 97.026037 100.694394) (xy 97.026037 98.897119) (xy 97.026036 98.897102) (xy 97.022694 98.866027) (xy 97.019526 98.836556) (xy 96.968426 98.699553) (xy 96.880798 98.582496) (xy 96.763741 98.494868) (xy 96.62674 98.443768) (xy 96.566191 98.437257) (xy 96.566175 98.437257) (xy 94.768899 98.437257) (xy 94.768882 98.437257) (xy 94.708334 98.443768) (xy 94.708332 98.443768) (xy 94.571332 98.494868) (xy 94.454276 98.582496) (xy 94.366648 98.699552) (xy 94.315548 98.836552) (xy 94.315548 98.836554) (xy 94.309037 98.897102) (xy 94.309037 100.694411) (xy 94.315548 100.754959) (xy 94.315548 100.754961) (xy 94.366648 100.891961) (xy 94.454276 101.009018) (xy 94.571333 101.096646) (xy 94.700919 101.144979) (xy 94.75685 101.18685) (xy 94.781267 101.252314) (xy 94.766415 101.320587) (xy 94.745265 101.348841) (xy 94.629423 101.464683) (xy 94.493937 101.658177) (xy 94.493936 101.658179) (xy 94.394107 101.872264) (xy 94.394104 101.87227) (xy 94.336901 102.085756) (xy 94.336901 102.085757) (xy 95.233851 102.085757) (xy 95.208044 102.125913) (xy 95.167537 102.263868) (xy 95.167537 102.407646) (xy 95.208044 102.545601) (xy 95.233851 102.585757) (xy 94.336901 102.585757) (xy 94.394104 102.799243) (xy 94.394107 102.799249) (xy 94.493936 103.013335) (xy 94.629431 103.206839) (xy 94.796454 103.373862) (xy 94.977339 103.50052) (xy 95.020964 103.555097) (xy 95.028156 103.624596) (xy 94.996634 103.68695) (xy 94.965234 103.711149) (xy 94.921964 103.734566) (xy 94.921959 103.734569) (xy 94.744298 103.872849) (xy 94.744293 103.872854) (xy 94.591821 104.03848) (xy 94.591813 104.038491) (xy 94.468677 104.226964) (xy 94.37824 104.433142) (xy 94.322973 104.651385) (xy 94.322971 104.651397) (xy 94.304381 104.875751) (xy 94.304381 104.875762) (xy 93.065869 104.875762) (xy 93.07589 104.848895) (xy 93.136699 104.569362) (xy 93.157109 104.284001) (xy 93.157109 104.283998) (xy 93.136699 103.998637) (xy 93.07589 103.719104) (xy 92.975908 103.451041) (xy 92.838808 103.199961) (xy 92.838807 103.19996) (xy 92.732115 103.057436) (xy 92.12256 103.666991) (xy 92.073652 103.588001) (xy 91.930069 103.430499) (xy 91.77161 103.310835) (xy 92.378562 102.703883) (xy 92.378561 102.703882) (xy 92.236046 102.597196) (xy 92.236038 102.597191) (xy 91.984957 102.460091) (xy 91.984958 102.460091) (xy 91.716895 102.360109) (xy 91.437362 102.2993) (xy 91.152001 102.278891) (xy 91.151999 102.278891) (xy 90.866637 102.2993) (xy 90.587104 102.360109) (xy 90.319041 102.460091) (xy 90.067961 102.597191) (xy 90.067953 102.597196) (xy 89.925437 102.703882) (xy 89.925436 102.703883) (xy 90.532389 103.310835) (xy 90.373931 103.430499) (xy 90.230348 103.588001) (xy 90.181439 103.666992) (xy 89.571883 103.057436) (xy 89.571882 103.057437) (xy 89.465196 103.199953) (xy 89.465191 103.199961) (xy 89.328091 103.451041) (xy 89.228109 103.719104) (xy 89.1673 103.998637) (xy 89.146891 104.283998) (xy 89.146891 104.284001) (xy 80.017109 104.284001) (xy 80.017109 104.283998) (xy 79.996699 103.998637) (xy 79.93589 103.719104) (xy 79.835908 103.451041) (xy 79.698808 103.199961) (xy 79.698807 103.19996) (xy 79.592115 103.057436) (xy 78.98256 103.666991) (xy 78.933652 103.588001) (xy 78.790069 103.430499) (xy 78.63161 103.310835) (xy 79.238562 102.703883) (xy 79.238561 102.703882) (xy 79.096046 102.597196) (xy 79.096038 102.597191) (xy 78.844957 102.460091) (xy 78.844958 102.460091) (xy 78.61053 102.372654) (xy 79.7735 102.372654) (xy 79.780011 102.433202) (xy 79.780011 102.433204) (xy 79.821934 102.545601) (xy 79.831111 102.570204) (xy 79.918739 102.687261) (xy 80.035796 102.774889) (xy 80.172799 102.825989) (xy 80.20005 102.828918) (xy 80.233345 102.832499) (xy 80.233362 102.8325) (xy 81.930638 102.8325) (xy 81.930654 102.832499) (xy 81.957692 102.829591) (xy 81.991201 102.825989) (xy 82.128204 102.774889) (xy 82.245261 102.687261) (xy 82.332889 102.570204) (xy 82.346586 102.53348) (xy 82.372717 102.463424) (xy 82.414588 102.40749) (xy 82.480053 102.383074) (xy 82.548326 102.397926) (xy 82.576579 102.419077) (xy 82.7377 102.580198) (xy 82.925251 102.711523) (xy 83.050091 102.769736) (xy 83.13275 102.808281) (xy 83.132752 102.808281) (xy 83.132757 102.808284) (xy 83.353913 102.867543) (xy 83.516832 102.881796) (xy 83.581998 102.887498) (xy 83.582 102.887498) (xy 83.582002 102.887498) (xy 83.639021 102.882509) (xy 83.810087 102.867543) (xy 84.031243 102.808284) (xy 84.238749 102.711523) (xy 84.4263 102.580198) (xy 84.494319 102.512179) (xy 84.555642 102.478694) (xy 84.625334 102.483678) (xy 84.669681 102.512179) (xy 84.7377 102.580198) (xy 84.925251 102.711523) (xy 85.050091 102.769736) (xy 85.13275 102.808281) (xy 85.132752 102.808281) (xy 85.132757 102.808284) (xy 85.353913 102.867543) (xy 85.516832 102.881796) (xy 85.581998 102.887498) (xy 85.582 102.887498) (xy 85.582002 102.887498) (xy 85.639021 102.882509) (xy 85.810087 102.867543) (xy 86.031243 102.808284) (xy 86.238749 102.711523) (xy 86.4263 102.580198) (xy 86.588198 102.4183) (xy 86.719523 102.230749) (xy 86.724307 102.220487) (xy 86.770476 102.168051) (xy 86.837669 102.148897) (xy 86.904551 102.169111) (xy 86.949072 102.22049) (xy 86.951866 102.226483) (xy 87.002973 102.299471) (xy 87.002974 102.299472) (xy 87.619064 101.683381) (xy 87.645481 101.773351) (xy 87.719327 101.888258) (xy 87.822555 101.977705) (xy 87.946801 102.034446) (xy 87.971548 102.038004) (xy 87.356526 102.653025) (xy 87.356526 102.653026) (xy 87.429512 102.704131) (xy 87.429516 102.704133) (xy 87.635673 102.800265) (xy 87.635682 102.800269) (xy 87.855389 102.859139) (xy 87.8554 102.859141) (xy 88.081998 102.878966) (xy 88.082002 102.878966) (xy 88.308599 102.859141) (xy 88.30861 102.859139) (xy 88.528317 102.800269) (xy 88.528331 102.800264) (xy 88.734478 102.704136) (xy 88.807472 102.653025) (xy 88.192451 102.038004) (xy 88.217199 102.034446) (xy 88.341445 101.977705) (xy 88.444673 101.888258) (xy 88.518519 101.773351) (xy 88.544935 101.683382) (xy 89.161025 102.299472) (xy 89.212136 102.226478) (xy 89.308264 102.020331) (xy 89.308269 102.020317) (xy 89.367139 101.80061) (xy 89.367141 101.800599) (xy 89.386966 101.574002) (xy 89.386966 101.573997) (xy 89.367141 101.3474) (xy 89.367139 101.347389) (xy 89.308269 101.127682) (xy 89.308265 101.127673) (xy 89.212133 100.921516) (xy 89.212131 100.921512) (xy 89.161026 100.848526) (xy 89.161025 100.848526) (xy 88.544935 101.464616) (xy 88.518519 101.374649) (xy 88.444673 101.259742) (xy 88.341445 101.170295) (xy 88.217199 101.113554) (xy 88.192451 101.109995) (xy 88.807472 100.494974) (xy 88.807471 100.494973) (xy 88.734483 100.443866) (xy 88.734481 100.443865) (xy 88.528326 100.347734) (xy 88.528317 100.34773) (xy 88.30861 100.28886) (xy 88.308599 100.288858) (xy 88.082002 100.269034) (xy 88.081998 100.269034) (xy 87.8554 100.288858) (xy 87.855389 100.28886) (xy 87.635682 100.34773) (xy 87.635673 100.347734) (xy 87.429513 100.443868) (xy 87.356527 100.494972) (xy 87.356526 100.494973) (xy 87.971549 101.109995) (xy 87.946801 101.113554) (xy 87.822555 101.170295) (xy 87.719327 101.259742) (xy 87.645481 101.374649) (xy 87.619064 101.464617) (xy 87.002973 100.848526) (xy 87.002972 100.848527) (xy 86.951867 100.921513) (xy 86.94907 100.927513) (xy 86.902897 100.979951) (xy 86.835703 100.999102) (xy 86.768822 100.978885) (xy 86.724307 100.927511) (xy 86.719523 100.917251) (xy 86.588198 100.7297) (xy 86.4263 100.567802) (xy 86.238749 100.436477) (xy 86.238745 100.436475) (xy 86.031249 100.339718) (xy 86.031238 100.339714) (xy 85.810089 100.280457) (xy 85.810081 100.280456) (xy 85.582002 100.260502) (xy 85.581998 100.260502) (xy 85.353918 100.280456) (xy 85.35391 100.280457) (xy 85.132761 100.339714) (xy 85.13275 100.339718) (xy 84.925254 100.436475) (xy 84.925252 100.436476) (xy 84.890601 100.460739) (xy 84.7377 100.567802) (xy 84.737698 100.567803) (xy 84.737695 100.567806) (xy 84.669681 100.635821) (xy 84.608358 100.669306) (xy 84.538666 100.664322) (xy 84.494319 100.635821) (xy 84.426304 100.567806) (xy 84.4263 100.567802) (xy 84.238749 100.436477) (xy 84.238745 100.436475) (xy 84.031249 100.339718) (xy 84.031238 100.339714) (xy 83.810089 100.280457) (xy 83.810081 100.280456) (xy 83.582002 100.260502) (xy 83.581998 100.260502) (xy 83.353918 100.280456) (xy 83.35391 100.280457) (xy 83.132761 100.339714) (xy 83.13275 100.339718) (xy 82.925254 100.436475) (xy 82.925252 100.436476) (xy 82.737699 100.567803) (xy 82.576579 100.728923) (xy 82.515256 100.762407) (xy 82.445564 100.757423) (xy 82.389631 100.715551) (xy 82.372717 100.684576) (xy 82.351544 100.627813) (xy 82.332889 100.577796) (xy 82.245261 100.460739) (xy 82.128204 100.373111) (xy 81.991203 100.322011) (xy 81.930654 100.3155) (xy 81.930638 100.3155) (xy 80.233362 100.3155) (xy 80.233345 100.3155) (xy 80.172797 100.322011) (xy 80.172795 100.322011) (xy 80.035795 100.373111) (xy 79.918739 100.460739) (xy 79.831111 100.577795) (xy 79.780011 100.714795) (xy 79.780011 100.714797) (xy 79.7735 100.775345) (xy 79.7735 102.372654) (xy 78.61053 102.372654) (xy 78.576895 102.360109) (xy 78.297362 102.2993) (xy 78.012001 102.278891) (xy 78.011999 102.278891) (xy 77.726637 102.2993) (xy 77.447104 102.360109) (xy 77.179041 102.460091) (xy 76.927961 102.597191) (xy 76.927953 102.597196) (xy 76.785437 102.703882) (xy 76.785436 102.703883) (xy 77.392389 103.310835) (xy 77.233931 103.430499) (xy 77.090348 103.588001) (xy 77.041439 103.666992) (xy 76.431883 103.057436) (xy 76.431882 103.057437) (xy 76.325196 103.199953) (xy 76.325191 103.199961) (xy 76.188091 103.451041) (xy 76.088109 103.719104) (xy 76.0273 103.998637) (xy 76.006891 104.283998) (xy 76.006891 104.284001) (xy 68.072 104.284001) (xy 68.072 47.863998) (xy 81.655693 47.863998) (xy 81.657672 47.886639) (xy 81.657846 47.894829) (xy 81.656684 47.920688) (xy 81.656685 47.92069) (xy 81.667691 48.001946) (xy 81.668016 48.004864) (xy 81.670532 48.033615) (xy 81.674885 48.083371) (xy 81.681624 48.108523) (xy 81.683174 48.116243) (xy 81.687093 48.145173) (xy 81.687096 48.145183) (xy 81.711413 48.220023) (xy 81.712334 48.223134) (xy 81.731877 48.296066) (xy 81.731881 48.296078) (xy 81.744275 48.322659) (xy 81.747051 48.329705) (xy 81.757097 48.360621) (xy 81.766105 48.37736) (xy 81.792822 48.42701) (xy 81.794416 48.430187) (xy 81.824942 48.495651) (xy 81.824943 48.495653) (xy 81.824944 48.495654) (xy 81.843668 48.522396) (xy 81.847475 48.528574) (xy 81.864443 48.560105) (xy 81.864445 48.560108) (xy 81.909397 48.616475) (xy 81.911709 48.619567) (xy 81.951251 48.676038) (xy 81.951254 48.676041) (xy 81.976659 48.701446) (xy 81.981295 48.706633) (xy 82.005686 48.737218) (xy 82.057514 48.782499) (xy 82.060557 48.785344) (xy 82.106955 48.831743) (xy 82.106956 48.831744) (xy 82.106959 48.831746) (xy 82.106962 48.831749) (xy 82.138487 48.853822) (xy 82.139109 48.854258) (xy 82.144341 48.858357) (xy 82.176282 48.886263) (xy 82.232535 48.919872) (xy 82.236258 48.922283) (xy 82.27275 48.947835) (xy 82.287338 48.958051) (xy 82.287341 48.958052) (xy 82.287346 48.958056) (xy 82.32591 48.976038) (xy 82.331493 48.978997) (xy 82.37075 49.002453) (xy 82.42901 49.024317) (xy 82.433422 49.026171) (xy 82.486924 49.05112) (xy 82.531204 49.062984) (xy 82.536939 49.064824) (xy 82.566356 49.075864) (xy 82.582839 49.082051) (xy 82.640813 49.092571) (xy 82.645778 49.093685) (xy 82.699629 49.108115) (xy 82.748602 49.112399) (xy 82.75425 49.113157) (xy 82.793352 49.120253) (xy 82.805732 49.1225) (xy 82.805733 49.1225) (xy 82.861348 49.1225) (xy 82.866749 49.122735) (xy 82.89537 49.125239) (xy 82.918998 49.127307) (xy 82.918999 49.127307) (xy 82.918999 49.127306) (xy 82.919 49.127307) (xy 82.97231 49.122643) (xy 82.975504 49.1225) (xy 82.975522 49.1225) (xy 83.023625 49.118169) (xy 83.030391 49.117561) (xy 83.138353 49.108117) (xy 83.138357 49.108116) (xy 83.138371 49.108115) (xy 83.138383 49.108111) (xy 83.138902 49.10802) (xy 83.144136 49.107324) (xy 83.144622 49.107281) (xy 83.249335 49.078381) (xy 83.351076 49.05112) (xy 83.351089 49.051113) (xy 83.358029 49.048588) (xy 83.36272 49.047089) (xy 83.362993 49.047014) (xy 83.458019 49.001251) (xy 83.550654 48.958056) (xy 83.550663 48.958049) (xy 83.55535 48.955345) (xy 83.555421 48.955468) (xy 83.566206 48.949152) (xy 83.567093 48.948725) (xy 83.649868 48.888585) (xy 83.731038 48.831749) (xy 83.731951 48.830835) (xy 83.746752 48.818193) (xy 83.750363 48.815571) (xy 83.78199 48.782492) (xy 83.818902 48.743884) (xy 83.886746 48.676041) (xy 83.886746 48.67604) (xy 83.886749 48.676038) (xy 83.889476 48.672142) (xy 83.901428 48.657568) (xy 83.906912 48.651834) (xy 83.959809 48.571697) (xy 84.013056 48.495654) (xy 84.016538 48.488185) (xy 84.025436 48.472276) (xy 84.031709 48.462774) (xy 84.068216 48.37736) (xy 84.10612 48.296076) (xy 84.109145 48.284782) (xy 84.114896 48.268147) (xy 84.120743 48.25447) (xy 84.140711 48.166978) (xy 84.163115 48.083371) (xy 84.164807 48.064024) (xy 84.166126 48.055626) (xy 84.171151 48.033615) (xy 84.175036 47.947105) (xy 84.182307 47.864) (xy 84.182307 47.863998) (xy 86.505693 47.863998) (xy 86.507672 47.886639) (xy 86.507846 47.894829) (xy 86.506684 47.920688) (xy 86.506685 47.92069) (xy 86.517691 48.001946) (xy 86.518016 48.004864) (xy 86.520532 48.033615) (xy 86.524885 48.083371) (xy 86.531624 48.108523) (xy 86.533174 48.116243) (xy 86.537093 48.145173) (xy 86.537096 48.145183) (xy 86.561413 48.220023) (xy 86.562334 48.223134) (xy 86.581877 48.296066) (xy 86.581881 48.296078) (xy 86.594275 48.322659) (xy 86.597051 48.329705) (xy 86.607097 48.360621) (xy 86.616105 48.37736) (xy 86.642822 48.42701) (xy 86.644416 48.430187) (xy 86.674942 48.495651) (xy 86.674943 48.495653) (xy 86.674944 48.495654) (xy 86.693668 48.522396) (xy 86.697475 48.528574) (xy 86.714443 48.560105) (xy 86.714445 48.560108) (xy 86.759397 48.616475) (xy 86.761709 48.619567) (xy 86.801251 48.676038) (xy 86.801254 48.676041) (xy 86.826659 48.701446) (xy 86.831295 48.706633) (xy 86.855686 48.737218) (xy 86.907514 48.782499) (xy 86.910557 48.785344) (xy 86.956955 48.831743) (xy 86.956956 48.831744) (xy 86.956959 48.831746) (xy 86.956962 48.831749) (xy 86.988487 48.853822) (xy 86.989109 48.854258) (xy 86.994341 48.858357) (xy 87.026282 48.886263) (xy 87.082535 48.919872) (xy 87.086258 48.922283) (xy 87.12275 48.947835) (xy 87.137338 48.958051) (xy 87.137341 48.958052) (xy 87.137346 48.958056) (xy 87.17591 48.976038) (xy 87.181493 48.978997) (xy 87.22075 49.002453) (xy 87.27901 49.024317) (xy 87.283422 49.026171) (xy 87.336924 49.05112) (xy 87.381204 49.062984) (xy 87.386939 49.064824) (xy 87.416356 49.075864) (xy 87.432839 49.082051) (xy 87.490813 49.092571) (xy 87.495778 49.093685) (xy 87.549629 49.108115) (xy 87.598602 49.112399) (xy 87.60425 49.113157) (xy 87.643352 49.120253) (xy 87.655732 49.1225) (xy 87.655733 49.1225) (xy 87.711348 49.1225) (xy 87.716749 49.122735) (xy 87.74537 49.125239) (xy 87.768998 49.127307) (xy 87.768999 49.127307) (xy 87.768999 49.127306) (xy 87.769 49.127307) (xy 87.82231 49.122643) (xy 87.825504 49.1225) (xy 87.825522 49.1225) (xy 87.873625 49.118169) (xy 87.880391 49.117561) (xy 87.988353 49.108117) (xy 87.988357 49.108116) (xy 87.988371 49.108115) (xy 87.988383 49.108111) (xy 87.988902 49.10802) (xy 87.994136 49.107324) (xy 87.994622 49.107281) (xy 88.099335 49.078381) (xy 88.201076 49.05112) (xy 88.201089 49.051113) (xy 88.208029 49.048588) (xy 88.21272 49.047089) (xy 88.212993 49.047014) (xy 88.308019 49.001251) (xy 88.400654 48.958056) (xy 88.400663 48.958049) (xy 88.40535 48.955345) (xy 88.405421 48.955468) (xy 88.416206 48.949152) (xy 88.417093 48.948725) (xy 88.499868 48.888585) (xy 88.581038 48.831749) (xy 88.581951 48.830835) (xy 88.596752 48.818193) (xy 88.600363 48.815571) (xy 88.63199 48.782492) (xy 88.668902 48.743884) (xy 88.736746 48.676041) (xy 88.736746 48.67604) (xy 88.736749 48.676038) (xy 88.739476 48.672142) (xy 88.751428 48.657568) (xy 88.756912 48.651834) (xy 88.809809 48.571697) (xy 88.863056 48.495654) (xy 88.866538 48.488185) (xy 88.875436 48.472276) (xy 88.881709 48.462774) (xy 88.918216 48.37736) (xy 88.95612 48.296076) (xy 88.959145 48.284782) (xy 88.964896 48.268147) (xy 88.970743 48.25447) (xy 88.990711 48.166978) (xy 89.013115 48.083371) (xy 89.014807 48.064024) (xy 89.016126 48.055626) (xy 89.021151 48.033615) (xy 89.025036 47.947105) (xy 89.032307 47.864) (xy 89.030327 47.841368) (xy 89.030153 47.833173) (xy 89.031315 47.807309) (xy 89.020305 47.726042) (xy 89.019981 47.723125) (xy 89.013115 47.644631) (xy 89.013115 47.644629) (xy 89.006377 47.619483) (xy 89.004825 47.611753) (xy 89.003122 47.59919) (xy 89.000906 47.582825) (xy 88.976587 47.507982) (xy 88.975671 47.504889) (xy 88.96143 47.451741) (xy 88.956123 47.431933) (xy 88.956119 47.431923) (xy 88.943722 47.405336) (xy 88.940948 47.398296) (xy 88.930903 47.367379) (xy 88.930902 47.367377) (xy 88.930899 47.36737) (xy 88.895167 47.30097) (xy 88.893582 47.297811) (xy 88.863056 47.232347) (xy 88.863052 47.232341) (xy 88.844337 47.205613) (xy 88.840523 47.199424) (xy 88.823555 47.167892) (xy 88.778594 47.111513) (xy 88.776279 47.108417) (xy 88.73675 47.051963) (xy 88.71134 47.026553) (xy 88.706702 47.021364) (xy 88.682312 46.99078) (xy 88.630491 46.945505) (xy 88.627442 46.942655) (xy 88.581039 46.896251) (xy 88.548891 46.873741) (xy 88.543656 46.869641) (xy 88.511718 46.841737) (xy 88.455486 46.808139) (xy 88.451725 46.805704) (xy 88.41398 46.779275) (xy 88.400654 46.769944) (xy 88.38694 46.763549) (xy 88.3621 46.751965) (xy 88.356501 46.748997) (xy 88.325701 46.730596) (xy 88.31725 46.725547) (xy 88.258988 46.703681) (xy 88.254588 46.701833) (xy 88.222893 46.687053) (xy 88.201077 46.67688) (xy 88.201065 46.676876) (xy 88.156793 46.665013) (xy 88.151053 46.663172) (xy 88.10516 46.645948) (xy 88.054115 46.636684) (xy 88.047191 46.635428) (xy 88.042217 46.634312) (xy 87.988372 46.619885) (xy 87.97637 46.618834) (xy 87.939403 46.6156) (xy 87.933741 46.61484) (xy 87.898998 46.608536) (xy 87.882267 46.6055) (xy 87.882266 46.6055) (xy 87.826652 46.6055) (xy 87.82125 46.605264) (xy 87.792629 46.60276) (xy 87.769002 46.600693) (xy 87.768997 46.600693) (xy 87.715728 46.605353) (xy 87.712489 46.605499) (xy 87.657608 46.610438) (xy 87.549618 46.619885) (xy 87.549041 46.619987) (xy 87.543889 46.620672) (xy 87.543386 46.620717) (xy 87.543369 46.62072) (xy 87.438664 46.649618) (xy 87.336918 46.676881) (xy 87.329944 46.679418) (xy 87.325268 46.680912) (xy 87.325022 46.680979) (xy 87.325011 46.680984) (xy 87.229964 46.726755) (xy 87.137352 46.769941) (xy 87.132658 46.772651) (xy 87.132587 46.772529) (xy 87.121824 46.778833) (xy 87.120908 46.779274) (xy 87.120902 46.779277) (xy 87.038119 46.839423) (xy 86.956958 46.896254) (xy 86.956027 46.897185) (xy 86.941264 46.909793) (xy 86.937641 46.912425) (xy 86.937631 46.912434) (xy 86.869097 46.984115) (xy 86.801247 47.051966) (xy 86.801246 47.051967) (xy 86.798506 47.05588) (xy 86.786581 47.070419) (xy 86.781089 47.076163) (xy 86.781085 47.076169) (xy 86.728183 47.156313) (xy 86.674943 47.232347) (xy 86.674941 47.232352) (xy 86.671462 47.239812) (xy 86.662576 47.255702) (xy 86.656292 47.265222) (xy 86.656291 47.265224) (xy 86.61978 47.350644) (xy 86.581882 47.431917) (xy 86.58188 47.431923) (xy 86.578852 47.443222) (xy 86.573102 47.459854) (xy 86.567259 47.473525) (xy 86.567256 47.473533) (xy 86.547288 47.561021) (xy 86.524885 47.644626) (xy 86.524884 47.644632) (xy 86.523192 47.66397) (xy 86.521873 47.672366) (xy 86.516849 47.694385) (xy 86.512963 47.780894) (xy 86.505693 47.863996) (xy 86.505693 47.863998) (xy 84.182307 47.863998) (xy 84.180327 47.841368) (xy 84.180153 47.833173) (xy 84.181315 47.807309) (xy 84.170305 47.726042) (xy 84.169981 47.723125) (xy 84.163115 47.644631) (xy 84.163115 47.644629) (xy 84.156377 47.619483) (xy 84.154825 47.611753) (xy 84.153122 47.59919) (xy 84.150906 47.582825) (xy 84.126587 47.507982) (xy 84.125671 47.504889) (xy 84.11143 47.451741) (xy 84.106123 47.431933) (xy 84.106119 47.431923) (xy 84.093722 47.405336) (xy 84.090948 47.398296) (xy 84.080903 47.367379) (xy 84.080902 47.367377) (xy 84.080899 47.36737) (xy 84.045167 47.30097) (xy 84.043582 47.297811) (xy 84.013056 47.232347) (xy 84.013052 47.232341) (xy 83.994337 47.205613) (xy 83.990523 47.199424) (xy 83.973555 47.167892) (xy 83.928594 47.111513) (xy 83.926279 47.108417) (xy 83.88675 47.051963) (xy 83.86134 47.026553) (xy 83.856702 47.021364) (xy 83.832312 46.99078) (xy 83.780491 46.945505) (xy 83.777442 46.942655) (xy 83.731039 46.896251) (xy 83.698891 46.873741) (xy 83.693656 46.869641) (xy 83.661718 46.841737) (xy 83.605486 46.808139) (xy 83.601725 46.805704) (xy 83.56398 46.779275) (xy 83.550654 46.769944) (xy 83.53694 46.763549) (xy 83.5121 46.751965) (xy 83.506501 46.748997) (xy 83.475701 46.730596) (xy 83.46725 46.725547) (xy 83.408988 46.703681) (xy 83.404588 46.701833) (xy 83.372893 46.687053) (xy 83.351077 46.67688) (xy 83.351065 46.676876) (xy 83.306793 46.665013) (xy 83.301053 46.663172) (xy 83.25516 46.645948) (xy 83.204115 46.636684) (xy 83.197191 46.635428) (xy 83.192217 46.634312) (xy 83.138372 46.619885) (xy 83.12637 46.618834) (xy 83.089403 46.6156) (xy 83.083741 46.61484) (xy 83.048998 46.608536) (xy 83.032267 46.6055) (xy 83.032266 46.6055) (xy 82.976652 46.6055) (xy 82.97125 46.605264) (xy 82.942629 46.60276) (xy 82.919002 46.600693) (xy 82.918997 46.600693) (xy 82.865728 46.605353) (xy 82.862489 46.605499) (xy 82.807608 46.610438) (xy 82.699618 46.619885) (xy 82.699041 46.619987) (xy 82.693889 46.620672) (xy 82.693386 46.620717) (xy 82.693369 46.62072) (xy 82.588664 46.649618) (xy 82.486918 46.676881) (xy 82.479944 46.679418) (xy 82.475268 46.680912) (xy 82.475022 46.680979) (xy 82.475011 46.680984) (xy 82.379964 46.726755) (xy 82.287352 46.769941) (xy 82.282658 46.772651) (xy 82.282587 46.772529) (xy 82.271824 46.778833) (xy 82.270908 46.779274) (xy 82.270902 46.779277) (xy 82.188119 46.839423) (xy 82.106958 46.896254) (xy 82.106027 46.897185) (xy 82.091264 46.909793) (xy 82.087641 46.912425) (xy 82.087631 46.912434) (xy 82.019097 46.984115) (xy 81.951247 47.051966) (xy 81.951246 47.051967) (xy 81.948506 47.05588) (xy 81.936581 47.070419) (xy 81.931089 47.076163) (xy 81.931085 47.076169) (xy 81.878183 47.156313) (xy 81.824943 47.232347) (xy 81.824941 47.232352) (xy 81.821462 47.239812) (xy 81.812576 47.255702) (xy 81.806292 47.265222) (xy 81.806291 47.265224) (xy 81.76978 47.350644) (xy 81.731882 47.431917) (xy 81.73188 47.431923) (xy 81.728852 47.443222) (xy 81.723102 47.459854) (xy 81.717259 47.473525) (xy 81.717256 47.473533) (xy 81.697288 47.561021) (xy 81.674885 47.644626) (xy 81.674884 47.644632) (xy 81.673192 47.66397) (xy 81.671873 47.672366) (xy 81.666849 47.694385) (xy 81.662963 47.780894) (xy 81.655693 47.863996) (xy 81.655693 47.863998) (xy 68.072 47.863998) (xy 68.072 44.834) (xy 81.205673 44.834) (xy 81.210644 44.893994) (xy 81.212971 44.922083) (xy 81.216856 45.013543) (xy 81.216857 45.013552) (xy 81.22201 45.037461) (xy 81.22319 45.04541) (xy 81.224947 45.066617) (xy 81.224949 45.066629) (xy 81.247417 45.155353) (xy 81.26737 45.247935) (xy 81.275257 45.267561) (xy 81.277834 45.275466) (xy 81.282251 45.292907) (xy 81.320285 45.379616) (xy 81.356767 45.470404) (xy 81.366129 45.485608) (xy 81.370117 45.49322) (xy 81.376015 45.506668) (xy 81.429524 45.58857) (xy 81.482473 45.674565) (xy 81.48248 45.674574) (xy 81.489158 45.682161) (xy 81.499886 45.696267) (xy 81.503682 45.702077) (xy 81.503686 45.702083) (xy 81.572079 45.776377) (xy 81.640882 45.854552) (xy 81.640883 45.854553) (xy 81.64607 45.858741) (xy 81.659407 45.87124) (xy 81.661783 45.873822) (xy 81.713116 45.913775) (xy 81.743948 45.937772) (xy 81.791031 45.975789) (xy 81.827421 46.005173) (xy 81.827422 46.005173) (xy 81.827424 46.005175) (xy 81.830165 46.006706) (xy 81.83024 46.006748) (xy 81.845934 46.017152) (xy 81.845979 46.017187) (xy 81.845991 46.017195) (xy 81.940032 46.068086) (xy 81.940346 46.068256) (xy 82.03674 46.122105) (xy 82.036745 46.122106) (xy 82.036749 46.122109) (xy 82.03914 46.12319) (xy 82.046477 46.126448) (xy 82.046575 46.126226) (xy 82.051262 46.128281) (xy 82.051273 46.128287) (xy 82.15574 46.164151) (xy 82.262806 46.20198) (xy 82.263367 46.202076) (xy 82.268109 46.203081) (xy 82.272043 46.204078) (xy 82.272049 46.20408) (xy 82.384095 46.222777) (xy 82.49911 46.242499) (xy 82.499119 46.2425) (xy 82.735707 46.2425) (xy 82.735712 46.2425) (xy 82.768648 46.237003) (xy 82.792475 46.233028) (xy 82.797413 46.232406) (xy 82.850941 46.227851) (xy 82.857887 46.22726) (xy 82.857888 46.227259) (xy 82.857898 46.227259) (xy 82.910297 46.213614) (xy 82.915668 46.212469) (xy 82.965951 46.20408) (xy 83.023502 46.184322) (xy 83.027975 46.182973) (xy 83.089924 46.166844) (xy 83.136259 46.145898) (xy 83.141633 46.143767) (xy 83.186727 46.128287) (xy 83.243132 46.097761) (xy 83.247054 46.095816) (xy 83.308402 46.068086) (xy 83.347795 46.041459) (xy 83.352979 46.038314) (xy 83.392008 46.017195) (xy 83.392012 46.017193) (xy 83.392013 46.017192) (xy 83.392017 46.01719) (xy 83.445228 45.975772) (xy 83.448561 45.973353) (xy 83.507047 45.933825) (xy 83.539001 45.903198) (xy 83.543789 45.899058) (xy 83.57622 45.873818) (xy 83.624119 45.821784) (xy 83.626794 45.819056) (xy 83.680144 45.767925) (xy 83.704497 45.734996) (xy 83.708727 45.729877) (xy 83.734309 45.702088) (xy 83.734314 45.702083) (xy 83.774785 45.640135) (xy 83.776835 45.637189) (xy 83.777834 45.635837) (xy 83.822715 45.575157) (xy 83.839676 45.541514) (xy 83.843114 45.535549) (xy 83.861984 45.506669) (xy 83.893042 45.435861) (xy 83.894413 45.43295) (xy 83.930657 45.361067) (xy 83.940721 45.3282) (xy 83.943221 45.321466) (xy 83.955749 45.292907) (xy 83.975535 45.21477) (xy 83.976334 45.211909) (xy 84.000864 45.131815) (xy 84.00481 45.100994) (xy 84.006198 45.093684) (xy 84.013051 45.066626) (xy 84.02009 44.981672) (xy 84.031318 44.893995) (xy 84.030139 44.866249) (xy 84.030294 44.858525) (xy 84.032327 44.834) (xy 86.655673 44.834) (xy 86.660644 44.893994) (xy 86.662971 44.922083) (xy 86.666856 45.013543) (xy 86.666857 45.013552) (xy 86.67201 45.037461) (xy 86.67319 45.04541) (xy 86.674947 45.066617) (xy 86.674949 45.066629) (xy 86.697417 45.155353) (xy 86.71737 45.247935) (xy 86.725257 45.267561) (xy 86.727834 45.275466) (xy 86.732251 45.292907) (xy 86.770285 45.379616) (xy 86.806767 45.470404) (xy 86.816129 45.485608) (xy 86.820117 45.49322) (xy 86.826015 45.506668) (xy 86.879524 45.58857) (xy 86.932473 45.674565) (xy 86.93248 45.674574) (xy 86.939158 45.682161) (xy 86.949886 45.696267) (xy 86.953682 45.702077) (xy 86.953686 45.702083) (xy 87.022079 45.776377) (xy 87.090882 45.854552) (xy 87.090883 45.854553) (xy 87.09607 45.858741) (xy 87.109407 45.87124) (xy 87.111783 45.873822) (xy 87.163116 45.913775) (xy 87.193948 45.937772) (xy 87.241031 45.975789) (xy 87.277421 46.005173) (xy 87.277422 46.005173) (xy 87.277424 46.005175) (xy 87.280165 46.006706) (xy 87.28024 46.006748) (xy 87.295934 46.017152) (xy 87.295979 46.017187) (xy 87.295991 46.017195) (xy 87.390032 46.068086) (xy 87.390346 46.068256) (xy 87.48674 46.122105) (xy 87.486745 46.122106) (xy 87.486749 46.122109) (xy 87.48914 46.12319) (xy 87.496477 46.126448) (xy 87.496575 46.126226) (xy 87.501262 46.128281) (xy 87.501273 46.128287) (xy 87.60574 46.164151) (xy 87.712806 46.20198) (xy 87.713367 46.202076) (xy 87.718109 46.203081) (xy 87.722043 46.204078) (xy 87.722049 46.20408) (xy 87.834095 46.222777) (xy 87.94911 46.242499) (xy 87.949119 46.2425) (xy 88.185707 46.2425) (xy 88.185712 46.2425) (xy 88.218648 46.237003) (xy 88.242475 46.233028) (xy 88.247413 46.232406) (xy 88.300941 46.227851) (xy 88.307887 46.22726) (xy 88.307888 46.227259) (xy 88.307898 46.227259) (xy 88.360297 46.213614) (xy 88.365668 46.212469) (xy 88.415951 46.20408) (xy 88.473502 46.184322) (xy 88.477975 46.182973) (xy 88.539924 46.166844) (xy 88.586259 46.145898) (xy 88.591633 46.143767) (xy 88.636727 46.128287) (xy 88.693132 46.097761) (xy 88.697054 46.095816) (xy 88.758402 46.068086) (xy 88.797795 46.041459) (xy 88.802979 46.038314) (xy 88.842008 46.017195) (xy 88.842012 46.017193) (xy 88.842013 46.017192) (xy 88.842017 46.01719) (xy 88.895228 45.975772) (xy 88.898561 45.973353) (xy 88.957047 45.933825) (xy 88.989001 45.903198) (xy 88.993789 45.899058) (xy 89.02622 45.873818) (xy 89.074119 45.821784) (xy 89.076794 45.819056) (xy 89.130144 45.767925) (xy 89.154497 45.734996) (xy 89.158727 45.729877) (xy 89.184309 45.702088) (xy 89.184314 45.702083) (xy 89.224785 45.640135) (xy 89.226835 45.637189) (xy 89.227834 45.635837) (xy 89.272715 45.575157) (xy 89.289676 45.541514) (xy 89.293114 45.535549) (xy 89.311984 45.506669) (xy 89.343042 45.435861) (xy 89.344413 45.43295) (xy 89.380657 45.361067) (xy 89.390721 45.3282) (xy 89.393221 45.321466) (xy 89.405749 45.292907) (xy 89.425535 45.21477) (xy 89.426334 45.211909) (xy 89.450864 45.131815) (xy 89.45481 45.100994) (xy 89.456198 45.093684) (xy 89.463051 45.066626) (xy 89.47009 44.981672) (xy 89.481318 44.893995) (xy 89.480139 44.866249) (xy 89.480294 44.858525) (xy 89.482327 44.834) (xy 89.477355 44.774004) (xy 89.475028 44.745916) (xy 89.471144 44.65446) (xy 89.471143 44.654457) (xy 89.471143 44.654449) (xy 89.465987 44.63053) (xy 89.464808 44.622586) (xy 89.463051 44.601379) (xy 89.463051 44.601374) (xy 89.440582 44.512646) (xy 89.42063 44.420068) (xy 89.412735 44.400424) (xy 89.410167 44.392544) (xy 89.405749 44.375093) (xy 89.367714 44.288383) (xy 89.331233 44.197596) (xy 89.321867 44.182386) (xy 89.317882 44.174778) (xy 89.317102 44.173) (xy 89.311984 44.161331) (xy 89.258475 44.079429) (xy 89.205524 43.993431) (xy 89.205518 43.993424) (xy 89.205515 43.99342) (xy 89.198839 43.985834) (xy 89.188118 43.971739) (xy 89.184315 43.965919) (xy 89.184314 43.965917) (xy 89.11592 43.891622) (xy 89.047119 43.813449) (xy 89.047118 43.813448) (xy 89.047114 43.813444) (xy 89.041929 43.809258) (xy 89.028597 43.796765) (xy 89.02622 43.794182) (xy 88.944051 43.730227) (xy 88.860576 43.662825) (xy 88.860574 43.662823) (xy 88.860568 43.662819) (xy 88.85775 43.661245) (xy 88.84207 43.650851) (xy 88.84202 43.650812) (xy 88.842018 43.650811) (xy 88.842017 43.65081) (xy 88.747653 43.599743) (xy 88.694822 43.57023) (xy 88.651259 43.545894) (xy 88.648999 43.544873) (xy 88.641519 43.541551) (xy 88.641422 43.541773) (xy 88.636725 43.539712) (xy 88.532259 43.503848) (xy 88.425197 43.466021) (xy 88.425196 43.46602) (xy 88.425194 43.46602) (xy 88.425192 43.466019) (xy 88.425183 43.466017) (xy 88.424633 43.465923) (xy 88.419913 43.464922) (xy 88.415966 43.463923) (xy 88.415953 43.46392) (xy 88.415951 43.46392) (xy 88.303904 43.445222) (xy 88.18889 43.4255) (xy 88.188881 43.4255) (xy 88.185712 43.4255) (xy 87.952288 43.4255) (xy 87.952287 43.4255) (xy 87.895529 43.43497) (xy 87.890587 43.435592) (xy 87.85683 43.438465) (xy 87.8301 43.440741) (xy 87.830097 43.440741) (xy 87.777733 43.454376) (xy 87.772313 43.455532) (xy 87.722049 43.463919) (xy 87.664512 43.483671) (xy 87.660005 43.485029) (xy 87.614895 43.496776) (xy 87.598076 43.501156) (xy 87.598073 43.501157) (xy 87.59807 43.501158) (xy 87.551758 43.522092) (xy 87.546359 43.524233) (xy 87.531763 43.529244) (xy 87.501273 43.539712) (xy 87.444879 43.57023) (xy 87.44091 43.572198) (xy 87.379597 43.599914) (xy 87.379595 43.599915) (xy 87.340209 43.626535) (xy 87.335002 43.629693) (xy 87.323438 43.635951) (xy 87.295978 43.650812) (xy 87.24278 43.692218) (xy 87.239425 43.694653) (xy 87.209349 43.714981) (xy 87.180951 43.734176) (xy 87.180948 43.734179) (xy 87.149012 43.764786) (xy 87.144193 43.768952) (xy 87.111781 43.794181) (xy 87.11178 43.794182) (xy 87.063898 43.846193) (xy 87.061184 43.848962) (xy 87.007857 43.900073) (xy 86.983503 43.932999) (xy 86.97927 43.938123) (xy 86.953684 43.965918) (xy 86.953681 43.965922) (xy 86.913222 44.02785) (xy 86.911166 44.030806) (xy 86.865287 44.092839) (xy 86.865286 44.09284) (xy 86.848333 44.126463) (xy 86.844875 44.132463) (xy 86.826015 44.161332) (xy 86.794978 44.232089) (xy 86.793562 44.235096) (xy 86.757342 44.306933) (xy 86.757341 44.306934) (xy 86.74728 44.339786) (xy 86.744775 44.346537) (xy 86.732249 44.375094) (xy 86.732249 44.375095) (xy 86.712469 44.453203) (xy 86.711649 44.456137) (xy 86.687137 44.536178) (xy 86.687135 44.53619) (xy 86.683191 44.566986) (xy 86.681795 44.574335) (xy 86.67495 44.601367) (xy 86.674948 44.601379) (xy 86.667909 44.686327) (xy 86.656682 44.774003) (xy 86.656681 44.774004) (xy 86.657859 44.801731) (xy 86.657703 44.809485) (xy 86.655673 44.833995) (xy 86.655673 44.834) (xy 84.032327 44.834) (xy 84.027355 44.774004) (xy 84.025028 44.745916) (xy 84.021144 44.65446) (xy 84.021143 44.654457) (xy 84.021143 44.654449) (xy 84.015987 44.63053) (xy 84.014808 44.622586) (xy 84.013051 44.601379) (xy 84.013051 44.601374) (xy 83.990582 44.512646) (xy 83.97063 44.420068) (xy 83.962735 44.400424) (xy 83.960167 44.392544) (xy 83.955749 44.375093) (xy 83.917714 44.288383) (xy 83.881233 44.197596) (xy 83.871867 44.182386) (xy 83.867882 44.174778) (xy 83.867102 44.173) (xy 83.861984 44.161331) (xy 83.808475 44.079429) (xy 83.755524 43.993431) (xy 83.755518 43.993424) (xy 83.755515 43.99342) (xy 83.748839 43.985834) (xy 83.738118 43.971739) (xy 83.734315 43.965919) (xy 83.734314 43.965917) (xy 83.66592 43.891622) (xy 83.597119 43.813449) (xy 83.597118 43.813448) (xy 83.597114 43.813444) (xy 83.591929 43.809258) (xy 83.578597 43.796765) (xy 83.57622 43.794182) (xy 83.494051 43.730227) (xy 83.410576 43.662825) (xy 83.410574 43.662823) (xy 83.410568 43.662819) (xy 83.40775 43.661245) (xy 83.39207 43.650851) (xy 83.39202 43.650812) (xy 83.392018 43.650811) (xy 83.392017 43.65081) (xy 83.297653 43.599743) (xy 83.244822 43.57023) (xy 83.201259 43.545894) (xy 83.198999 43.544873) (xy 83.191519 43.541551) (xy 83.191422 43.541773) (xy 83.186725 43.539712) (xy 83.082259 43.503848) (xy 82.975197 43.466021) (xy 82.975196 43.46602) (xy 82.975194 43.46602) (xy 82.975192 43.466019) (xy 82.975183 43.466017) (xy 82.974633 43.465923) (xy 82.969913 43.464922) (xy 82.965966 43.463923) (xy 82.965953 43.46392) (xy 82.965951 43.46392) (xy 82.853904 43.445222) (xy 82.73889 43.4255) (xy 82.738881 43.4255) (xy 82.735712 43.4255) (xy 82.502288 43.4255) (xy 82.502287 43.4255) (xy 82.445529 43.43497) (xy 82.440587 43.435592) (xy 82.40683 43.438465) (xy 82.3801 43.440741) (xy 82.380097 43.440741) (xy 82.327733 43.454376) (xy 82.322313 43.455532) (xy 82.272049 43.463919) (xy 82.214512 43.483671) (xy 82.210005 43.485029) (xy 82.164895 43.496776) (xy 82.148076 43.501156) (xy 82.148073 43.501157) (xy 82.14807 43.501158) (xy 82.101758 43.522092) (xy 82.096359 43.524233) (xy 82.081763 43.529244) (xy 82.051273 43.539712) (xy 81.994879 43.57023) (xy 81.99091 43.572198) (xy 81.929597 43.599914) (xy 81.929595 43.599915) (xy 81.890209 43.626535) (xy 81.885002 43.629693) (xy 81.873438 43.635951) (xy 81.845978 43.650812) (xy 81.79278 43.692218) (xy 81.789425 43.694653) (xy 81.759349 43.714981) (xy 81.730951 43.734176) (xy 81.730948 43.734179) (xy 81.699012 43.764786) (xy 81.694193 43.768952) (xy 81.661781 43.794181) (xy 81.66178 43.794182) (xy 81.613898 43.846193) (xy 81.611184 43.848962) (xy 81.557857 43.900073) (xy 81.533503 43.932999) (xy 81.52927 43.938123) (xy 81.503684 43.965918) (xy 81.503681 43.965922) (xy 81.463222 44.02785) (xy 81.461166 44.030806) (xy 81.415287 44.092839) (xy 81.415286 44.09284) (xy 81.398333 44.126463) (xy 81.394875 44.132463) (xy 81.376015 44.161332) (xy 81.344978 44.232089) (xy 81.343562 44.235096) (xy 81.307342 44.306933) (xy 81.307341 44.306934) (xy 81.29728 44.339786) (xy 81.294775 44.346537) (xy 81.282249 44.375094) (xy 81.282249 44.375095) (xy 81.262469 44.453203) (xy 81.261649 44.456137) (xy 81.237137 44.536178) (xy 81.237135 44.53619) (xy 81.233191 44.566986) (xy 81.231795 44.574335) (xy 81.22495 44.601367) (xy 81.224948 44.601379) (xy 81.217909 44.686327) (xy 81.206682 44.774003) (xy 81.206681 44.774004) (xy 81.207859 44.801731) (xy 81.207703 44.809485) (xy 81.205673 44.833995) (xy 81.205673 44.834) (xy 68.072 44.834) (xy 68.072 41.234624) (xy 68.091685 41.167585) (xy 68.144489 41.12183) (xy 68.196 41.110624) (xy 100.540073 41.110624) ) ) ) (zone (net 0) (net_name "") (layer "B.Cu") (tstamp b05f7075-6f9f-49ec-8f30-b3487b51fc9a) (name "Isolation") (hatch edge 0.5) (connect_pads (clearance 0)) (min_thickness 0.25) (filled_areas_thickness no) (keepout (tracks not_allowed) (vias not_allowed) (pads not_allowed) (copperpour not_allowed) (footprints allowed)) (fill (thermal_gap 0.5) (thermal_bridge_width 0.5)) (polygon (pts (xy 68.072 41.834913) (xy 66.496087 41.834913) (xy 66.421 41.91) (xy 66.421 115.57) (xy 68.072 115.57) ) ) ) (group "" (id 19e93318-d0f0-441b-bc75-f39d275aed68) (members 0116bd43-032b-4701-b712-3da25ab65618 111c673b-406a-490b-addf-2c0831eea407 1c4eb65c-dcae-4529-b2dd-486f401c814b 2f047f4d-25eb-4e3e-acc2-d87a91261673 39c6b5c3-f1d4-4c3e-beb0-4c06be0973c1 4aad693d-9c51-45de-9a9a-f61318a4631f ) ) (group "" (id 3a2abb4d-584b-4f61-a4e2-9cc70fca45cb) (members 2682b2e2-ca4f-43bb-a888-1c2cdc98cd58 3f1ed5f7-07f3-4928-8134-2f6f2b4b0a93 4caa43a9-fa63-4b26-ba91-f748a16378d2 56949209-1f1c-4689-a3e7-d6e4d07987ba 62c5e98b-3356-465e-9104-078d73320fef 812153b4-a661-4671-b49d-76ef5744952d 8db8e59c-d177-4a47-853c-6445c5a2ee8b 9fe78667-e9db-480a-a2ef-4e2a68cb72ea abac7c28-8233-4786-9bd6-68988937551b ad6c83fc-f082-4e82-98ea-487f9818463d aea5593b-3dc0-45a6-ace0-c57b0e44e695 be70c03c-c94e-40d2-b997-6ca7207bba74 c0c36be9-56aa-45db-bbac-b7c6ee634728 c11c9a35-614a-42b8-8119-93ad30e65e43 c5383451-e798-427e-8631-6dd983e845c0 ecce7498-9f7b-43a0-b5e8-06db7e6d3727 efcdac77-c6f4-44d0-acb1-2052247934dc f08b7850-dde5-4b6f-b90c-a2b259f3263a f67d9a93-d170-4f1b-9559-d4a8eb51cf50 fb9d3d90-3689-43f5-ac73-8e6978234606 ) ) ) ================================================ FILE: pcb/v1.0/DeskHop.kicad_prl ================================================ { "board": { "active_layer": 37, "active_layer_preset": "All Layers", "auto_track_width": true, "hidden_netclasses": [], "hidden_nets": [], "high_contrast_mode": 0, "net_color_mode": 1, "opacity": { "images": 0.6, "pads": 1.0, "tracks": 1.0, "vias": 1.0, "zones": 0.6 }, "selection_filter": { "dimensions": true, "footprints": true, "graphics": true, "keepouts": true, "lockedItems": false, "otherItems": true, "pads": true, "text": true, "tracks": true, "vias": true, "zones": true }, "visible_items": [ 0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 39, 40 ], "visible_layers": "fffffff_ffffffff", "zone_display_mode": 0 }, "meta": { "filename": "DeskHop.kicad_prl", "version": 3 }, "project": { "files": [] } } ================================================ FILE: pcb/v1.0/DeskHop.kicad_pro ================================================ { "board": { "3dviewports": [], "design_settings": { "defaults": { "board_outline_line_width": 0.049999999999999996, "copper_line_width": 0.19999999999999998, "copper_text_italic": false, "copper_text_size_h": 1.5, "copper_text_size_v": 1.5, "copper_text_thickness": 0.3, "copper_text_upright": false, "courtyard_line_width": 0.049999999999999996, "dimension_precision": 4, "dimension_units": 3, "dimensions": { "arrow_length": 1270000, "extension_offset": 500000, "keep_text_aligned": true, "suppress_zeroes": false, "text_position": 0, "units_format": 1 }, "fab_line_width": 0.09999999999999999, "fab_text_italic": false, "fab_text_size_h": 1.0, "fab_text_size_v": 1.0, "fab_text_thickness": 0.15, "fab_text_upright": false, "other_line_width": 0.09999999999999999, "other_text_italic": false, "other_text_size_h": 1.0, "other_text_size_v": 1.0, "other_text_thickness": 0.15, "other_text_upright": false, "pads": { "drill": 0.0, "height": 5.4, "width": 5.4 }, "silk_line_width": 0.12, "silk_text_italic": false, "silk_text_size_h": 1.0, "silk_text_size_v": 1.0, "silk_text_thickness": 0.15, "silk_text_upright": false, "zones": { "45_degree_only": false, "min_clearance": 0.508 } }, "diff_pair_dimensions": [ { "gap": 0.0, "via_gap": 0.0, "width": 0.0 } ], "drc_exclusions": [], "meta": { "filename": "board_design_settings.json", "version": 2 }, "rule_severities": { "annular_width": "error", "clearance": "error", "connection_width": "warning", "copper_edge_clearance": "error", "copper_sliver": "warning", "courtyards_overlap": "error", "diff_pair_gap_out_of_range": "error", "diff_pair_uncoupled_length_too_long": "error", "drill_out_of_range": "error", "duplicate_footprints": "warning", "extra_footprint": "warning", "footprint": "error", "footprint_type_mismatch": "error", "hole_clearance": "error", "hole_near_hole": "error", "invalid_outline": "error", "isolated_copper": "warning", "item_on_disabled_layer": "error", "items_not_allowed": "error", "length_out_of_range": "error", "lib_footprint_issues": "warning", "lib_footprint_mismatch": "warning", "malformed_courtyard": "error", "microvia_drill_out_of_range": "error", "missing_courtyard": "ignore", "missing_footprint": "warning", "net_conflict": "warning", "npth_inside_courtyard": "ignore", "padstack": "error", "pth_inside_courtyard": "ignore", "shorting_items": "error", "silk_edge_clearance": "warning", "silk_over_copper": "warning", "silk_overlap": "warning", "skew_out_of_range": "error", "solder_mask_bridge": "error", "starved_thermal": "error", "text_height": "warning", "text_thickness": "warning", "through_hole_pad_without_hole": "error", "too_many_vias": "error", "track_dangling": "warning", "track_width": "error", "tracks_crossing": "error", "unconnected_items": "error", "unresolved_variable": "error", "via_dangling": "warning", "zones_intersect": "error" }, "rule_severitieslegacy_courtyards_overlap": true, "rule_severitieslegacy_no_courtyard_defined": false, "rules": { "allow_blind_buried_vias": false, "allow_microvias": false, "max_error": 0.005, "min_clearance": 0.0, "min_connection": 0.0, "min_copper_edge_clearance": 0.024999999999999998, "min_hole_clearance": 0.25, "min_hole_to_hole": 0.25, "min_microvia_diameter": 0.19999999999999998, "min_microvia_drill": 0.09999999999999999, "min_resolved_spokes": 2, "min_silk_clearance": 0.0, "min_text_height": 0.7999999999999999, "min_text_thickness": 0.08, "min_through_hole_diameter": 0.3, "min_track_width": 0.19999999999999998, "min_via_annular_width": 0.049999999999999996, "min_via_diameter": 0.39999999999999997, "solder_mask_to_copper_clearance": 0.0, "use_height_for_length_calcs": true }, "teardrop_options": [ { "td_allow_use_two_tracks": true, "td_curve_segcount": 5, "td_on_pad_in_zone": false, "td_onpadsmd": true, "td_onroundshapesonly": false, "td_ontrackend": false, "td_onviapad": true } ], "teardrop_parameters": [ { "td_curve_segcount": 0, "td_height_ratio": 1.0, "td_length_ratio": 0.5, "td_maxheight": 2.0, "td_maxlen": 1.0, "td_target_name": "td_round_shape", "td_width_to_size_filter_ratio": 0.9 }, { "td_curve_segcount": 0, "td_height_ratio": 1.0, "td_length_ratio": 0.5, "td_maxheight": 2.0, "td_maxlen": 1.0, "td_target_name": "td_rect_shape", "td_width_to_size_filter_ratio": 0.9 }, { "td_curve_segcount": 0, "td_height_ratio": 1.0, "td_length_ratio": 0.5, "td_maxheight": 2.0, "td_maxlen": 1.0, "td_target_name": "td_track_end", "td_width_to_size_filter_ratio": 0.9 } ], "track_widths": [ 0.0, 1.0 ], "via_dimensions": [ { "diameter": 0.0, "drill": 0.0 } ], "zones_allow_external_fillets": false, "zones_use_no_outline": true }, "layer_presets": [], "viewports": [] }, "boards": [], "cvpcb": { "equivalence_files": [] }, "erc": { "erc_exclusions": [], "meta": { "version": 0 }, "pin_map": [ [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2 ], [ 0, 2, 0, 1, 0, 0, 1, 0, 2, 2, 2, 2 ], [ 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 2 ], [ 0, 1, 0, 0, 0, 0, 1, 1, 2, 1, 1, 2 ], [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 ], [ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2 ], [ 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 2 ], [ 0, 2, 1, 2, 0, 0, 1, 0, 2, 2, 2, 2 ], [ 0, 2, 0, 1, 0, 0, 1, 0, 2, 0, 0, 2 ], [ 0, 2, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ] ], "rule_severities": { "bus_definition_conflict": "error", "bus_entry_needed": "error", "bus_to_bus_conflict": "error", "bus_to_net_conflict": "error", "conflicting_netclasses": "error", "different_unit_footprint": "error", "different_unit_net": "error", "duplicate_reference": "error", "duplicate_sheet_names": "error", "endpoint_off_grid": "warning", "extra_units": "error", "global_label_dangling": "warning", "hier_label_mismatch": "error", "label_dangling": "error", "lib_symbol_issues": "warning", "missing_bidi_pin": "warning", "missing_input_pin": "warning", "missing_power_pin": "error", "missing_unit": "warning", "multiple_net_names": "warning", "net_not_bus_member": "warning", "no_connect_connected": "warning", "no_connect_dangling": "warning", "pin_not_connected": "error", "pin_not_driven": "error", "pin_to_pin": "warning", "power_pin_not_driven": "error", "similar_labels": "warning", "simulation_model_issue": "error", "unannotated": "error", "unit_value_mismatch": "error", "unresolved_variable": "error", "wire_dangling": "error" } }, "libraries": { "pinned_footprint_libs": [], "pinned_symbol_libs": [] }, "meta": { "filename": "DeskHop.kicad_pro", "version": 1 }, "net_settings": { "classes": [ { "bus_width": 12, "clearance": 0.2, "diff_pair_gap": 0.25, "diff_pair_via_gap": 0.25, "diff_pair_width": 0.2, "line_style": 0, "microvia_diameter": 0.3, "microvia_drill": 0.1, "name": "Default", "pcb_color": "rgba(0, 0, 0, 0.000)", "schematic_color": "rgba(0, 0, 0, 0.000)", "track_width": 0.5, "via_diameter": 0.8, "via_drill": 0.4, "wire_width": 6 } ], "meta": { "version": 3 }, "net_colors": null, "netclass_assignments": null, "netclass_patterns": [] }, "pcbnew": { "last_paths": { "gencad": "", "idf": "", "netlist": "DeskHop.net", "specctra_dsn": "", "step": "DeskHop_v3_fusion.step", "vrml": "" }, "page_layout_descr_file": "" }, "schematic": { "annotate_start_num": 0, "drawing": { "dashed_lines_dash_length_ratio": 12.0, "dashed_lines_gap_length_ratio": 3.0, "default_line_thickness": 6.0, "default_text_size": 50.0, "field_names": [], "intersheets_ref_own_page": false, "intersheets_ref_prefix": "", "intersheets_ref_short": false, "intersheets_ref_show": false, "intersheets_ref_suffix": "", "junction_size_choice": 3, "label_size_ratio": 0.25, "pin_symbol_size": 0.0, "text_offset_ratio": 0.08 }, "legacy_lib_dir": "", "legacy_lib_list": [], "meta": { "version": 1 }, "net_format_name": "Pcbnew", "ngspice": { "fix_include_paths": true, "fix_passive_vals": false, "meta": { "version": 0 }, "model_mode": 0, "workbook_filename": "" }, "page_layout_descr_file": "", "plot_directory": "", "spice_adjust_passive_values": false, "spice_current_sheet_as_root": false, "spice_external_command": "spice \"%I\"", "spice_model_current_sheet_as_root": true, "spice_save_all_currents": false, "spice_save_all_voltages": false, "subpart_first_id": 65, "subpart_id_separator": 0 }, "sheets": [ [ "fa1c3e0e-91b1-4532-8b22-6d396d71c75b", "" ] ], "text_variables": {} } ================================================ FILE: pcb/v1.0/DeskHop.kicad_sch ================================================ (kicad_sch (version 20230121) (generator eeschema) (uuid fa1c3e0e-91b1-4532-8b22-6d396d71c75b) (paper "A4") (title_block (title "DeskHop - Fast Keyboard/Mouse Switching Device") (date "2023-12-24") (rev "v1") (company "Hrvoje Čavrak") ) (lib_symbols (symbol "Connector:USB_A" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) (property "Reference" "J" (at -5.08 11.43 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "USB_A" (at -5.08 8.89 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "" (at 3.81 -1.27 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" " ~" (at 3.81 -1.27 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "connector USB" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "USB Type A connector" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "USB*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "USB_A_0_1" (rectangle (start -5.08 -7.62) (end 5.08 7.62) (stroke (width 0.254) (type default)) (fill (type background)) ) (circle (center -3.81 2.159) (radius 0.635) (stroke (width 0.254) (type default)) (fill (type outline)) ) (rectangle (start -1.524 4.826) (end -4.318 5.334) (stroke (width 0) (type default)) (fill (type outline)) ) (rectangle (start -1.27 4.572) (end -4.572 5.842) (stroke (width 0) (type default)) (fill (type none)) ) (circle (center -0.635 3.429) (radius 0.381) (stroke (width 0.254) (type default)) (fill (type outline)) ) (rectangle (start -0.127 -7.62) (end 0.127 -6.858) (stroke (width 0) (type default)) (fill (type none)) ) (polyline (pts (xy -3.175 2.159) (xy -2.54 2.159) (xy -1.27 3.429) (xy -0.635 3.429) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy -2.54 2.159) (xy -1.905 2.159) (xy -1.27 0.889) (xy 0 0.889) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 0.635 2.794) (xy 0.635 1.524) (xy 1.905 2.159) (xy 0.635 2.794) ) (stroke (width 0.254) (type default)) (fill (type outline)) ) (rectangle (start 0.254 1.27) (end -0.508 0.508) (stroke (width 0.254) (type default)) (fill (type outline)) ) (rectangle (start 5.08 -2.667) (end 4.318 -2.413) (stroke (width 0) (type default)) (fill (type none)) ) (rectangle (start 5.08 -0.127) (end 4.318 0.127) (stroke (width 0) (type default)) (fill (type none)) ) (rectangle (start 5.08 4.953) (end 4.318 5.207) (stroke (width 0) (type default)) (fill (type none)) ) ) (symbol "USB_A_1_1" (polyline (pts (xy -1.905 2.159) (xy 0.635 2.159) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (pin power_in line (at 7.62 5.08 180) (length 2.54) (name "VBUS" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 7.62 -2.54 180) (length 2.54) (name "D-" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 7.62 0 180) (length 2.54) (name "D+" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 0 -10.16 90) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "4" (effects (font (size 1.27 1.27)))) ) (pin passive line (at -2.54 -10.16 90) (length 2.54) (name "Shield" (effects (font (size 1.27 1.27)))) (number "5" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Connector_Generic:Conn_01x03" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) (property "Reference" "J" (at 0 5.08 0) (effects (font (size 1.27 1.27))) ) (property "Value" "Conn_01x03" (at 0 -5.08 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "connector" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "Connector*:*_1x??_*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "Conn_01x03_1_1" (rectangle (start -1.27 -2.413) (end 0 -2.667) (stroke (width 0.1524) (type default)) (fill (type none)) ) (rectangle (start -1.27 0.127) (end 0 -0.127) (stroke (width 0.1524) (type default)) (fill (type none)) ) (rectangle (start -1.27 2.667) (end 0 2.413) (stroke (width 0.1524) (type default)) (fill (type none)) ) (rectangle (start -1.27 3.81) (end 1.27 -3.81) (stroke (width 0.254) (type default)) (fill (type background)) ) (pin passive line (at -5.08 2.54 0) (length 3.81) (name "Pin_1" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin passive line (at -5.08 0 0) (length 3.81) (name "Pin_2" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) (pin passive line (at -5.08 -2.54 0) (length 3.81) (name "Pin_3" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Device:C" (pin_numbers hide) (pin_names (offset 0.254)) (in_bom yes) (on_board yes) (property "Reference" "C" (at 0.635 2.54 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "C" (at 0.635 -2.54 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "" (at 0.9652 -3.81 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "cap capacitor" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Unpolarized capacitor" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "C_*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "C_0_1" (polyline (pts (xy -2.032 -0.762) (xy 2.032 -0.762) ) (stroke (width 0.508) (type default)) (fill (type none)) ) (polyline (pts (xy -2.032 0.762) (xy 2.032 0.762) ) (stroke (width 0.508) (type default)) (fill (type none)) ) ) (symbol "C_1_1" (pin passive line (at 0 3.81 270) (length 2.794) (name "~" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin passive line (at 0 -3.81 90) (length 2.794) (name "~" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Isolator:ADuM1201BR" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) (property "Reference" "U" (at -10.16 8.89 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "ADuM1201BR" (at -2.032 8.89 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 0 -10.16 0) (effects (font (size 1.27 1.27) italic) hide) ) (property "Datasheet" "https://www.analog.com/static/imported-files/data_sheets/ADuM1200_1201.pdf" (at 0 -2.54 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "2Ch Dual Digital Isolator 10Mbps" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Dual-Channel Digital Isolator, 10Mbps 50ns, bidirectional communication, 3V/5V level translation, SOIC-8" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "SOIC*3.9x4.9mm*P1.27mm*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "ADuM1201BR_0_1" (rectangle (start -10.16 7.62) (end 10.16 -7.62) (stroke (width 0.254) (type default)) (fill (type background)) ) (polyline (pts (xy -1.27 -4.445) (xy -1.27 -6.985) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy -1.27 -0.635) (xy -1.27 -3.175) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy -1.27 3.175) (xy -1.27 0.635) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy -1.27 6.985) (xy -1.27 4.445) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 1.27 -4.445) (xy 1.27 -6.985) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 1.27 -0.635) (xy 1.27 -3.175) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 1.27 3.175) (xy 1.27 0.635) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 1.27 6.985) (xy 1.27 4.445) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy -0.635 -1.27) (xy -0.635 -2.54) (xy 0.635 -1.905) (xy -0.635 -1.27) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 0.635 2.54) (xy 0.635 1.27) (xy -0.635 1.905) (xy 0.635 2.54) ) (stroke (width 0.254) (type default)) (fill (type none)) ) ) (symbol "ADuM1201BR_1_1" (pin power_in line (at -12.7 5.08 0) (length 2.54) (name "VDD1" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin output line (at -12.7 2.54 0) (length 2.54) (name "VOA" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) (pin input line (at -12.7 -2.54 0) (length 2.54) (name "VIB" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -12.7 -5.08 0) (length 2.54) (name "GND1" (effects (font (size 1.27 1.27)))) (number "4" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 12.7 -5.08 180) (length 2.54) (name "GND2" (effects (font (size 1.27 1.27)))) (number "5" (effects (font (size 1.27 1.27)))) ) (pin output line (at 12.7 -2.54 180) (length 2.54) (name "VOB" (effects (font (size 1.27 1.27)))) (number "6" (effects (font (size 1.27 1.27)))) ) (pin input line (at 12.7 2.54 180) (length 2.54) (name "VIA" (effects (font (size 1.27 1.27)))) (number "7" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 12.7 5.08 180) (length 2.54) (name "VDD2" (effects (font (size 1.27 1.27)))) (number "8" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "MCU_RaspberryPi_and_Boards:Pico" (in_bom yes) (on_board yes) (property "Reference" "U" (at -13.97 27.94 0) (effects (font (size 1.27 1.27))) ) (property "Value" "Pico" (at 0 19.05 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "RPi_Pico:RPi_Pico_SMD_TH" (at 0 0 90) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "Pico_0_0" (text "Raspberry Pi Pico" (at 0 21.59 0) (effects (font (size 1.27 1.27))) ) ) (symbol "Pico_0_1" (rectangle (start -15.24 26.67) (end 15.24 -26.67) (stroke (width 0) (type default)) (fill (type background)) ) ) (symbol "Pico_1_1" (pin bidirectional line (at -17.78 24.13 0) (length 2.54) (name "GPIO0" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 1.27 0) (length 2.54) (name "GPIO7" (effects (font (size 1.27 1.27)))) (number "10" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -1.27 0) (length 2.54) (name "GPIO8" (effects (font (size 1.27 1.27)))) (number "11" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -3.81 0) (length 2.54) (name "GPIO9" (effects (font (size 1.27 1.27)))) (number "12" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -17.78 -6.35 0) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "13" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -8.89 0) (length 2.54) (name "GPIO10" (effects (font (size 1.27 1.27)))) (number "14" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -11.43 0) (length 2.54) (name "GPIO11" (effects (font (size 1.27 1.27)))) (number "15" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -13.97 0) (length 2.54) (name "GPIO12" (effects (font (size 1.27 1.27)))) (number "16" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -16.51 0) (length 2.54) (name "GPIO13" (effects (font (size 1.27 1.27)))) (number "17" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -17.78 -19.05 0) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "18" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -21.59 0) (length 2.54) (name "GPIO14" (effects (font (size 1.27 1.27)))) (number "19" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 21.59 0) (length 2.54) (name "GPIO1" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -24.13 0) (length 2.54) (name "GPIO15" (effects (font (size 1.27 1.27)))) (number "20" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -24.13 180) (length 2.54) (name "GPIO16" (effects (font (size 1.27 1.27)))) (number "21" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -21.59 180) (length 2.54) (name "GPIO17" (effects (font (size 1.27 1.27)))) (number "22" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 -19.05 180) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "23" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -16.51 180) (length 2.54) (name "GPIO18" (effects (font (size 1.27 1.27)))) (number "24" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -13.97 180) (length 2.54) (name "GPIO19" (effects (font (size 1.27 1.27)))) (number "25" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -11.43 180) (length 2.54) (name "GPIO20" (effects (font (size 1.27 1.27)))) (number "26" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -8.89 180) (length 2.54) (name "GPIO21" (effects (font (size 1.27 1.27)))) (number "27" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 -6.35 180) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "28" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -3.81 180) (length 2.54) (name "GPIO22" (effects (font (size 1.27 1.27)))) (number "29" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -17.78 19.05 0) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))) ) (pin input line (at 17.78 -1.27 180) (length 2.54) (name "RUN" (effects (font (size 1.27 1.27)))) (number "30" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 1.27 180) (length 2.54) (name "GPIO26_ADC0" (effects (font (size 1.27 1.27)))) (number "31" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 3.81 180) (length 2.54) (name "GPIO27_ADC1" (effects (font (size 1.27 1.27)))) (number "32" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 6.35 180) (length 2.54) (name "AGND" (effects (font (size 1.27 1.27)))) (number "33" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 8.89 180) (length 2.54) (name "GPIO28_ADC2" (effects (font (size 1.27 1.27)))) (number "34" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 11.43 180) (length 2.54) (name "ADC_VREF" (effects (font (size 1.27 1.27)))) (number "35" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 13.97 180) (length 2.54) (name "3V3" (effects (font (size 1.27 1.27)))) (number "36" (effects (font (size 1.27 1.27)))) ) (pin input line (at 17.78 16.51 180) (length 2.54) (name "3V3_EN" (effects (font (size 1.27 1.27)))) (number "37" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 19.05 180) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "38" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 21.59 180) (length 2.54) (name "VSYS" (effects (font (size 1.27 1.27)))) (number "39" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 16.51 0) (length 2.54) (name "GPIO2" (effects (font (size 1.27 1.27)))) (number "4" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 24.13 180) (length 2.54) (name "VBUS" (effects (font (size 1.27 1.27)))) (number "40" (effects (font (size 1.27 1.27)))) ) (pin input line (at -2.54 -29.21 90) (length 2.54) (name "SWCLK" (effects (font (size 1.27 1.27)))) (number "41" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 0 -29.21 90) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "42" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 2.54 -29.21 90) (length 2.54) (name "SWDIO" (effects (font (size 1.27 1.27)))) (number "43" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 13.97 0) (length 2.54) (name "GPIO3" (effects (font (size 1.27 1.27)))) (number "5" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 11.43 0) (length 2.54) (name "GPIO4" (effects (font (size 1.27 1.27)))) (number "6" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 8.89 0) (length 2.54) (name "GPIO5" (effects (font (size 1.27 1.27)))) (number "7" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -17.78 6.35 0) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "8" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 3.81 0) (length 2.54) (name "GPIO6" (effects (font (size 1.27 1.27)))) (number "9" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Mechanical:MountingHole_Pad" (pin_numbers hide) (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) (property "Reference" "H" (at 0 6.35 0) (effects (font (size 1.27 1.27))) ) (property "Value" "MountingHole_Pad" (at 0 4.445 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "mounting hole" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Mounting Hole with connection" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "MountingHole*Pad*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "MountingHole_Pad_0_1" (circle (center 0 1.27) (radius 1.27) (stroke (width 1.27) (type default)) (fill (type none)) ) ) (symbol "MountingHole_Pad_1_1" (pin input line (at 0 -2.54 90) (length 2.54) (name "1" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "power:GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) (property "Reference" "#PWR" (at 0 -6.35 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (at 0 -3.81 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "power-flag" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Power symbol creates a global label with name \"GND\" , ground" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "GND_0_1" (polyline (pts (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) ) (stroke (width 0) (type default)) (fill (type none)) ) ) (symbol "GND_1_1" (pin power_in line (at 0 0 270) (length 0) hide (name "GND" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "power:GND2" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) (property "Reference" "#PWR" (at 0 -6.35 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 0 -3.81 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "global power" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Power symbol creates a global label with name \"GND2\" , ground" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "GND2_0_1" (polyline (pts (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) ) (stroke (width 0) (type default)) (fill (type none)) ) ) (symbol "GND2_1_1" (pin power_in line (at 0 0 270) (length 0) hide (name "GND2" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) ) ) ) (junction (at 121.92 73.66) (diameter 0) (color 0 0 0 0) (uuid 10d8fecd-dad0-43c4-9bcd-cd474bd58e14) ) (junction (at 81.28 132.08) (diameter 0) (color 0 0 0 0) (uuid 46dccade-23fb-44bc-ab91-3885bd707f3b) ) (junction (at 81.28 129.54) (diameter 0) (color 0 0 0 0) (uuid 5302de89-d1d7-42d2-be0c-855a1fb46f8c) ) (junction (at 190.5 95.25) (diameter 0) (color 0 0 0 0) (uuid 5fa727de-198a-4eb6-bff3-eb70d532c861) ) (junction (at 92.71 109.22) (diameter 0) (color 0 0 0 0) (uuid 6166faf4-2432-4e70-a3e0-2d32ae72b55e) ) (junction (at 190.5 82.55) (diameter 0) (color 0 0 0 0) (uuid 64132fcf-d05d-4cfe-a6ba-a6a30fe0dd19) ) (junction (at 121.92 63.5) (diameter 0) (color 0 0 0 0) (uuid 69c7070b-8ae3-40f4-a673-7566031439b0) ) (junction (at 115.57 83.82) (diameter 0) (color 0 0 0 0) (uuid 6e19b04d-c5b3-4d79-9f6f-24afe88a0741) ) (junction (at 232.41 82.55) (diameter 0) (color 0 0 0 0) (uuid 723477e5-6197-497c-b5a8-baae39a46101) ) (junction (at 88.9 135.89) (diameter 0) (color 0 0 0 0) (uuid 7fc73b0a-282d-4061-b5d6-82c859e1c0cb) ) (junction (at 74.93 93.98) (diameter 0) (color 0 0 0 0) (uuid 884b6228-d012-4987-9d8c-a002db4144de) ) (junction (at 190.5 128.27) (diameter 0) (color 0 0 0 0) (uuid 8d905057-b3da-4725-b2e9-b737ea2e3027) ) (junction (at 175.26 95.25) (diameter 0) (color 0 0 0 0) (uuid 8fe823d4-0e0b-4ee5-8284-d5e2096b9da8) ) (junction (at 115.57 73.66) (diameter 0) (color 0 0 0 0) (uuid 91e56d15-b2cb-4144-b60a-2bdd441299e6) ) (junction (at 190.5 57.15) (diameter 0) (color 0 0 0 0) (uuid a00519da-8cab-45c6-91f5-7b6ace5dd705) ) (junction (at 175.26 57.15) (diameter 0) (color 0 0 0 0) (uuid ad52a94c-9d2a-4249-b5c3-0cc42b6c1171) ) (junction (at 190.5 69.85) (diameter 0) (color 0 0 0 0) (uuid b29c390a-431c-40bc-9568-10f1ba4d309a) ) (junction (at 71.12 71.12) (diameter 0) (color 0 0 0 0) (uuid cb79e699-4b8d-48b2-9db9-fc643af1abb8) ) (junction (at 190.5 130.81) (diameter 0) (color 0 0 0 0) (uuid fd7b96a2-ef0a-456b-a3c9-5917c02bc6e3) ) (junction (at 71.12 83.82) (diameter 0) (color 0 0 0 0) (uuid fdb21035-5f4b-40bf-a121-1471903777a6) ) (junction (at 212.09 109.22) (diameter 0) (color 0 0 0 0) (uuid ff01ce4b-0e85-4aa7-b286-29ad24af8ec1) ) (wire (pts (xy 92.71 109.22) (xy 92.71 111.76)) (stroke (width 0) (type default)) (uuid 003c4263-d139-4032-86c7-c64c8c3282a4) ) (wire (pts (xy 190.5 109.22) (xy 212.09 109.22)) (stroke (width 0) (type default)) (uuid 0229df9c-5caf-41fc-b530-acc95ae39ed2) ) (wire (pts (xy 175.26 95.25) (xy 175.26 99.06)) (stroke (width 0) (type default)) (uuid 04c6952c-b0b1-475d-9913-6b71d5232485) ) (wire (pts (xy 190.5 82.55) (xy 190.5 95.25)) (stroke (width 0) (type default)) (uuid 0a9fc099-9ba9-4aef-bc83-10ad2d31f577) ) (wire (pts (xy 71.12 83.82) (xy 71.12 71.12)) (stroke (width 0) (type default)) (uuid 0bc8f8b9-d62a-461b-aed0-1600b27a7220) ) (wire (pts (xy 194.31 100.33) (xy 182.88 100.33)) (stroke (width 0) (type default)) (uuid 1cecae9d-0169-4aff-b9af-d9b198bda8d9) ) (wire (pts (xy 190.5 109.22) (xy 190.5 128.27)) (stroke (width 0) (type default)) (uuid 1e19cdda-887b-49c6-b41d-3d8cb80b6ba2) ) (wire (pts (xy 68.58 93.98) (xy 74.93 93.98)) (stroke (width 0) (type default)) (uuid 1f40adbb-177b-44e1-8581-578ed8a162fd) ) (wire (pts (xy 177.8 46.99) (xy 175.26 46.99)) (stroke (width 0) (type default)) (uuid 1ff0df39-d211-48ff-be11-adfac92f2a28) ) (wire (pts (xy 190.5 95.25) (xy 194.31 95.25)) (stroke (width 0) (type default)) (uuid 21b9b7d6-341b-40ee-a1a8-79e2db91b0fd) ) (wire (pts (xy 121.92 73.66) (xy 144.78 73.66)) (stroke (width 0) (type default)) (uuid 228302f7-7d41-4551-b5a8-6b4653e3fc04) ) (wire (pts (xy 170.18 73.66) (xy 175.26 73.66)) (stroke (width 0) (type default)) (uuid 25e1f94a-cf09-4f40-92d3-b677b1945511) ) (wire (pts (xy 115.57 73.66) (xy 115.57 58.42)) (stroke (width 0) (type default)) (uuid 28aa4469-53ad-40d9-8e2d-bef636d34826) ) (wire (pts (xy 194.31 97.79) (xy 180.34 97.79)) (stroke (width 0) (type default)) (uuid 2912c152-3777-4fa4-a681-52fb69dade3d) ) (wire (pts (xy 81.28 129.54) (xy 81.28 132.08)) (stroke (width 0) (type default)) (uuid 2a8ae914-cecd-41fc-aabc-4a9d649772bc) ) (wire (pts (xy 232.41 57.15) (xy 232.41 82.55)) (stroke (width 0) (type default)) (uuid 2c0b843f-54bf-4be5-8d5c-01c4e8a54a0c) ) (wire (pts (xy 71.12 99.06) (xy 71.12 121.92)) (stroke (width 0) (type default)) (uuid 2f289456-20f2-4f52-b25b-e579e3deb88f) ) (wire (pts (xy 214.63 105.41) (xy 214.63 111.76)) (stroke (width 0) (type default)) (uuid 2f5d8d65-858b-42ba-bc5a-ecf3eb6d24dc) ) (wire (pts (xy 209.55 105.41) (xy 209.55 111.76)) (stroke (width 0) (type default)) (uuid 3371dc0b-b387-4333-a056-0796832d11d0) ) (wire (pts (xy 198.12 132.08) (xy 198.12 135.89)) (stroke (width 0) (type default)) (uuid 3e4d56dc-09c9-466c-ba9a-40edb73df696) ) (wire (pts (xy 81.28 129.54) (xy 81.28 109.22)) (stroke (width 0) (type default)) (uuid 3f9bbe38-7aa8-405b-a4b5-00af47c54453) ) (wire (pts (xy 71.12 71.12) (xy 74.93 71.12)) (stroke (width 0) (type default)) (uuid 3fbeab58-dd08-4687-85b8-0b107f5270d9) ) (wire (pts (xy 229.87 62.23) (xy 237.49 62.23)) (stroke (width 0) (type default)) (uuid 40f9df01-3517-4f09-8474-93a3c0dbc63b) ) (wire (pts (xy 190.5 128.27) (xy 190.5 130.81)) (stroke (width 0) (type default)) (uuid 44bdc859-b3f9-49e6-b739-7e33be200e6d) ) (wire (pts (xy 71.12 71.12) (xy 71.12 58.42)) (stroke (width 0) (type default)) (uuid 4a8e9f02-a0ed-4103-9baa-be038e9f7493) ) (wire (pts (xy 190.5 69.85) (xy 190.5 82.55)) (stroke (width 0) (type default)) (uuid 51c45477-55a9-48c2-9165-09d38c1429da) ) (wire (pts (xy 212.09 105.41) (xy 212.09 109.22)) (stroke (width 0) (type default)) (uuid 533ca684-aeea-4ede-8d08-5da9f79c857f) ) (wire (pts (xy 88.9 135.89) (xy 88.9 139.7)) (stroke (width 0) (type default)) (uuid 53949c80-1d52-4015-b0d1-be36407da35c) ) (wire (pts (xy 194.31 82.55) (xy 190.5 82.55)) (stroke (width 0) (type default)) (uuid 5466620a-a63f-4035-8049-2f4ca0c6e62d) ) (wire (pts (xy 115.57 73.66) (xy 121.92 73.66)) (stroke (width 0) (type default)) (uuid 5b1d1b47-eb41-4f1c-b571-fc92f0ee9d52) ) (wire (pts (xy 176.53 71.12) (xy 170.18 71.12)) (stroke (width 0) (type default)) (uuid 5bc484b6-f645-4d88-909a-1e1fc14008fe) ) (wire (pts (xy 121.92 63.5) (xy 144.78 63.5)) (stroke (width 0) (type default)) (uuid 5d1ded84-f8a4-460a-b5f8-4b7b524dd3b2) ) (wire (pts (xy 74.93 83.82) (xy 71.12 83.82)) (stroke (width 0) (type default)) (uuid 5dcb82c2-b7f7-4aed-8a2d-0b65055e1f32) ) (wire (pts (xy 185.42 57.15) (xy 190.5 57.15)) (stroke (width 0) (type default)) (uuid 5f050328-edbd-4ce4-9510-acdf96f8e673) ) (wire (pts (xy 190.5 57.15) (xy 194.31 57.15)) (stroke (width 0) (type default)) (uuid 5f9862a9-f39a-498b-ad78-cad9ea0f5f33) ) (wire (pts (xy 58.42 96.52) (xy 74.93 96.52)) (stroke (width 0) (type default)) (uuid 624de526-9a45-4f61-bd0a-46e21935fe0f) ) (wire (pts (xy 121.92 64.77) (xy 121.92 63.5)) (stroke (width 0) (type default)) (uuid 69bd9aba-940c-4b80-bfbf-dec1f040812d) ) (wire (pts (xy 81.28 132.08) (xy 81.28 139.7)) (stroke (width 0) (type default)) (uuid 6e92617d-8a9d-4fb1-a920-996966596cf5) ) (wire (pts (xy 115.57 96.52) (xy 115.57 83.82)) (stroke (width 0) (type default)) (uuid 74f6a635-3252-4b72-9ceb-64771e0f86c1) ) (wire (pts (xy 73.66 101.6) (xy 73.66 121.92)) (stroke (width 0) (type default)) (uuid 79f3992d-aff1-441e-9889-9c554612f1bc) ) (wire (pts (xy 115.57 96.52) (xy 110.49 96.52)) (stroke (width 0) (type default)) (uuid 7f66fa7a-bff1-4ab8-8a65-0a72b65fea95) ) (wire (pts (xy 170.18 66.04) (xy 176.53 66.04)) (stroke (width 0) (type default)) (uuid 7f970666-2fda-42f2-b12a-210f0bce078a) ) (wire (pts (xy 110.49 58.42) (xy 115.57 58.42)) (stroke (width 0) (type default)) (uuid 7fefefd3-5bc3-4096-a07f-09c127329dcb) ) (wire (pts (xy 182.88 100.33) (xy 182.88 120.65)) (stroke (width 0) (type default)) (uuid 829319bf-8d90-436e-a860-e80fe8e7fd8d) ) (wire (pts (xy 175.26 95.25) (xy 190.5 95.25)) (stroke (width 0) (type default)) (uuid 8923824f-3344-42fc-ba17-5cf88f2dc3ec) ) (wire (pts (xy 88.9 133.35) (xy 88.9 135.89)) (stroke (width 0) (type default)) (uuid 8a764314-c781-42e7-b569-43a9d8257125) ) (wire (pts (xy 175.26 46.99) (xy 175.26 57.15)) (stroke (width 0) (type default)) (uuid 8af487e2-a40c-4103-8278-21e7587589f9) ) (wire (pts (xy 81.28 109.22) (xy 92.71 109.22)) (stroke (width 0) (type default)) (uuid 8fcb7095-3f02-44a0-99ed-2578d54d496c) ) (wire (pts (xy 68.58 91.44) (xy 74.93 91.44)) (stroke (width 0) (type default)) (uuid 91cb6da3-e659-467a-a19f-a1edeaccd169) ) (wire (pts (xy 95.25 111.76) (xy 95.25 106.68)) (stroke (width 0) (type default)) (uuid 93e0e130-52cf-4c16-88ec-51efd8794af3) ) (wire (pts (xy 229.87 100.33) (xy 231.14 100.33)) (stroke (width 0) (type default)) (uuid 94a90e97-3bf0-4bf9-8c52-327577d6eb47) ) (wire (pts (xy 74.93 99.06) (xy 71.12 99.06)) (stroke (width 0) (type default)) (uuid 95f156ce-f7aa-423b-b737-aeb976150fc6) ) (wire (pts (xy 73.66 101.6) (xy 74.93 101.6)) (stroke (width 0) (type default)) (uuid 974ae66f-7eca-4b2e-bbf4-410f8b56b30a) ) (wire (pts (xy 175.26 73.66) (xy 175.26 95.25)) (stroke (width 0) (type default)) (uuid 9a9b4cc7-f731-4602-8382-e74dc2326088) ) (wire (pts (xy 190.5 130.81) (xy 190.5 135.89)) (stroke (width 0) (type default)) (uuid 9bd22c9d-3130-4fe1-b607-d71f4dbf841b) ) (wire (pts (xy 110.49 63.5) (xy 121.92 63.5)) (stroke (width 0) (type default)) (uuid 9ceed721-5ae3-41bf-9a85-05ff0b43e216) ) (wire (pts (xy 143.51 66.04) (xy 144.78 66.04)) (stroke (width 0) (type default)) (uuid 9e9e9b60-83a8-4637-bab5-cadf05d70ff6) ) (wire (pts (xy 232.41 95.25) (xy 229.87 95.25)) (stroke (width 0) (type default)) (uuid a0c52005-8a8e-4558-9f8d-889208103a33) ) (wire (pts (xy 66.04 118.11) (xy 66.04 121.92)) (stroke (width 0) (type default)) (uuid a7bbbf0d-1ad0-46dd-9253-bfff2cd05e40) ) (wire (pts (xy 229.87 57.15) (xy 232.41 57.15)) (stroke (width 0) (type default)) (uuid a8e57268-b492-475a-ac82-71e42f943c95) ) (wire (pts (xy 175.26 118.11) (xy 175.26 120.65)) (stroke (width 0) (type default)) (uuid ad4abe3c-69b8-4bb9-a580-7fac897ca56d) ) (wire (pts (xy 88.9 135.89) (xy 97.79 135.89)) (stroke (width 0) (type default)) (uuid b250b45a-838e-4850-a8b8-8055516d9fc8) ) (wire (pts (xy 194.31 69.85) (xy 190.5 69.85)) (stroke (width 0) (type default)) (uuid b2e071d4-967c-4b7a-a892-19379055613c) ) (wire (pts (xy 212.09 109.22) (xy 212.09 111.76)) (stroke (width 0) (type default)) (uuid b55e84e1-bef9-49b4-a978-00a898029d53) ) (wire (pts (xy 175.26 57.15) (xy 177.8 57.15)) (stroke (width 0) (type default)) (uuid b7161936-49ee-4ba3-a467-7475ebce424e) ) (wire (pts (xy 110.49 83.82) (xy 115.57 83.82)) (stroke (width 0) (type default)) (uuid b847cc93-9d7e-46d4-82f2-542a74444843) ) (wire (pts (xy 170.18 57.15) (xy 175.26 57.15)) (stroke (width 0) (type default)) (uuid bd51e8de-9320-45d5-92ab-44d82ecfe219) ) (wire (pts (xy 110.49 53.34) (xy 114.3 53.34)) (stroke (width 0) (type default)) (uuid bf907065-956c-4c81-9aae-798df7f69b76) ) (wire (pts (xy 236.22 82.55) (xy 232.41 82.55)) (stroke (width 0) (type default)) (uuid c0207329-bb58-49bb-9867-e9a3a5540281) ) (wire (pts (xy 229.87 52.07) (xy 241.3 52.07)) (stroke (width 0) (type default)) (uuid c178f86d-a172-46e2-bb2d-942c50822b8f) ) (wire (pts (xy 121.92 72.39) (xy 121.92 73.66)) (stroke (width 0) (type default)) (uuid c36e71ff-c1a6-4f82-ba76-bce489cf49ba) ) (wire (pts (xy 71.12 58.42) (xy 74.93 58.42)) (stroke (width 0) (type default)) (uuid c7c9b217-a5e4-4fc9-95e8-437464007e59) ) (wire (pts (xy 190.5 57.15) (xy 190.5 69.85)) (stroke (width 0) (type default)) (uuid cfb4168d-218f-41e7-8ec3-d5ced7ac2d3e) ) (wire (pts (xy 170.18 57.15) (xy 170.18 63.5)) (stroke (width 0) (type default)) (uuid d21a035d-f7f8-4893-8bf1-db7d91b8494a) ) (wire (pts (xy 236.22 90.17) (xy 236.22 82.55)) (stroke (width 0) (type default)) (uuid d245b027-b484-4442-bfcd-f1b37eaf9f3f) ) (wire (pts (xy 229.87 97.79) (xy 231.14 97.79)) (stroke (width 0) (type default)) (uuid d9a6840e-9e3a-4697-971e-914c4fa2f93b) ) (wire (pts (xy 90.17 111.76) (xy 90.17 106.68)) (stroke (width 0) (type default)) (uuid e317daf8-ec6e-4966-89a7-79e65f6427b4) ) (wire (pts (xy 74.93 93.98) (xy 77.47 93.98)) (stroke (width 0) (type default)) (uuid e3e22f39-dc96-4dae-8725-a47eb25744ac) ) (wire (pts (xy 232.41 82.55) (xy 232.41 95.25)) (stroke (width 0) (type default)) (uuid e62fa27e-1629-49f5-9d73-1841d4017995) ) (wire (pts (xy 121.92 73.66) (xy 121.92 77.47)) (stroke (width 0) (type default)) (uuid e8764195-77bf-43cb-9fb5-ba372b721335) ) (wire (pts (xy 92.71 106.68) (xy 92.71 109.22)) (stroke (width 0) (type default)) (uuid e95bfc9b-00a4-4eaa-9a8a-ff5e4747aea6) ) (wire (pts (xy 97.79 133.35) (xy 97.79 135.89)) (stroke (width 0) (type default)) (uuid ec5ca959-1933-4c89-b9ff-3929d4019f8f) ) (wire (pts (xy 229.87 82.55) (xy 232.41 82.55)) (stroke (width 0) (type default)) (uuid ed0a97df-ceb7-47ae-b9c7-c458caedb78b) ) (wire (pts (xy 115.57 83.82) (xy 115.57 73.66)) (stroke (width 0) (type default)) (uuid eed8fe17-92f0-4bf8-abe0-db562b9cd8eb) ) (wire (pts (xy 143.51 71.12) (xy 144.78 71.12)) (stroke (width 0) (type default)) (uuid f1e553aa-f4fe-496c-b8d2-0adc2b447f03) ) (wire (pts (xy 58.42 96.52) (xy 58.42 105.41)) (stroke (width 0) (type default)) (uuid f5d1004c-16bb-4495-9e0d-c7e7ea9a784b) ) (wire (pts (xy 180.34 97.79) (xy 180.34 120.65)) (stroke (width 0) (type default)) (uuid fdcb419d-10e2-4ef6-8a57-00da65e0726d) ) (global_label "3V3_BUS2" (shape input) (at 177.8 46.99 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 1f20dca3-1889-4c09-abd3-5c9aac48feed) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 189.6257 46.99 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART B RX" (shape input) (at 231.14 97.79 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 434d1c1d-e8a0-4dfe-8adc-38036bac230a) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 243.8124 97.79 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "VBUS2" (shape input) (at 241.3 52.07 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 54512599-9867-4e5f-a929-5a345f91a53c) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 249.7391 52.07 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART B RX" (shape input) (at 176.53 66.04 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 5710d9e7-0274-4ffc-b0f1-fa8a415e3ae3) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 189.2024 66.04 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART A RX" (shape input) (at 68.58 93.98 180) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify right)) (uuid 768861f9-136d-4fe1-ae92-372566e27050) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 56.089 93.98 0) (effects (font (size 1.27 1.27)) (justify right) hide) ) ) (global_label "UART A TX" (shape input) (at 143.51 66.04 180) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify right)) (uuid 77c1c6d7-6da5-466d-97f7-fba403ef6175) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 131.3214 66.04 0) (effects (font (size 1.27 1.27)) (justify right) hide) ) ) (global_label "UART B TX" (shape input) (at 176.53 71.12 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 7fc434fe-8e3b-465e-b976-bcf3ccfa983a) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 188.9 71.12 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART A RX" (shape input) (at 143.51 71.12 180) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify right)) (uuid 823b10f1-98bb-4e90-9e0c-1064208f423d) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 131.019 71.12 0) (effects (font (size 1.27 1.27)) (justify right) hide) ) ) (global_label "3V3_BUS2" (shape input) (at 237.49 62.23 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 8796789a-9b40-4203-83b0-3d28bbb3ce43) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 249.3157 62.23 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "VBUS2" (shape input) (at 175.26 118.11 90) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 8ce7f362-f4f2-4b75-8007-707fb2892c91) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 175.26 109.6709 90) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "VBUS1" (shape input) (at 114.3 53.34 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 8e8693c5-20c1-4ac4-8ac3-465ef26657e1) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 122.7391 53.34 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART B TX" (shape input) (at 231.14 100.33 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid b8004e71-d620-4419-8f6d-7bf8466b6c13) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 243.51 100.33 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "VBUS1" (shape input) (at 66.04 118.11 90) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid ccf54633-d9ed-4d52-9429-73b4fd184d67) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 66.04 109.6709 90) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART A TX" (shape input) (at 68.58 91.44 180) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify right)) (uuid f5043c9e-1d93-4a5a-806e-6f8a296e9544) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 56.3914 91.44 0) (effects (font (size 1.27 1.27)) (justify right) hide) ) ) (symbol (lib_id "MCU_RaspberryPi_and_Boards:Pico") (at 92.71 77.47 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 00000000-0000-0000-0000-00006029bf78) (property "Reference" "U1" (at 92.71 46.609 0) (effects (font (size 1.27 1.27))) ) (property "Value" "Pico Primary" (at 92.71 48.9204 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "MCU_RaspberryPi_and_Boards:RPi_Pico_SMD_Nohole" (at 92.71 77.47 90) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 92.71 77.47 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 2faad433-0f2e-46dd-9b4a-2d603b67961b)) (pin "10" (uuid 98327c9f-462a-4b1c-add3-716c84c1ea34)) (pin "11" (uuid 72b15bed-91a9-4d4a-916b-df9fd750a6d8)) (pin "12" (uuid 3816d71e-d0cc-4e01-af1d-2c77b8f7ae6d)) (pin "13" (uuid 28548c6f-4e8a-40b6-88e1-e5219cfc46c4)) (pin "14" (uuid da9e98ed-e8d8-4708-ae59-b9b12abbebac)) (pin "15" (uuid 9bedbf44-a93a-48fc-aa08-0aee8aec4289)) (pin "16" (uuid 9a2c1b79-0318-46b2-9a93-2d4b7236737e)) (pin "17" (uuid 5209f977-7ae2-42c0-ac87-afd5299e0c6f)) (pin "18" (uuid 4979b3e4-1ef7-4c43-afb1-104e16f652e4)) (pin "19" (uuid bdfff1bc-e1e7-43de-be7e-40027a2c9d1b)) (pin "2" (uuid 06e256dc-b959-478c-af6e-9209fa3ad0a5)) (pin "20" (uuid 019014c5-9f2a-4d51-b6d3-e1decd14bd8c)) (pin "21" (uuid 462da927-6447-4c8b-89d4-e9e6935d0a38)) (pin "22" (uuid cafa53f7-3969-40eb-a587-834481e30299)) (pin "23" (uuid b363623e-b7c8-42ad-85a2-b53499e0bc2f)) (pin "24" (uuid 6ac28f08-6b6d-4f02-a405-1bceeeae7339)) (pin "25" (uuid c47ce474-f65f-47a9-8f7e-934d07176d78)) (pin "26" (uuid a6af9abb-35ca-400f-bc1d-1d5ba3649689)) (pin "27" (uuid fa6351cf-df0f-4255-9b14-78d91cb22446)) (pin "28" (uuid cc6834b8-e887-4938-9916-54fde5f8603a)) (pin "29" (uuid 2327d2dc-71e7-4251-8a95-893dee828bb1)) (pin "3" (uuid 8de46cfc-e2a0-4d69-b02e-6a9ae74d843a)) (pin "30" (uuid 621c399a-2d14-4e9d-9e89-2c3278c53e32)) (pin "31" (uuid 4bde6ec6-8493-4919-8d38-e484dc092216)) (pin "32" (uuid 8d4da508-1bde-4611-a498-f03c8a17be81)) (pin "33" (uuid f893187c-5a24-4779-b08e-a990b6af9166)) (pin "34" (uuid 4adfc371-f749-49a9-aa83-b50a965432a6)) (pin "35" (uuid b3cf395a-0317-4a09-91ab-5efe691d004d)) (pin "36" (uuid 1a79306d-8791-4f38-b46b-a695dfc33b62)) (pin "37" (uuid 5c286853-efa9-4653-93b2-f6089e6c7c3c)) (pin "38" (uuid e93f6760-94de-4374-9fd5-1e91236ea92f)) (pin "39" (uuid 33c37c73-e057-4dac-a606-49a4aac51f8b)) (pin "4" (uuid 40a65fe0-4394-45e2-8662-88b8f1b87054)) (pin "40" (uuid a124d4d2-dad9-46cd-8668-447fa9d6058b)) (pin "41" (uuid 8f1bd6b7-13c9-4ef4-aa08-52164545ec6f)) (pin "42" (uuid fc229e70-dcc4-4156-8722-15c2584e31e4)) (pin "43" (uuid eaa4c448-d952-4822-b497-c3583a39404c)) (pin "5" (uuid 2523225a-0b82-4513-ba8f-73d5d45d80d4)) (pin "6" (uuid 27dd2c61-6d11-4d0d-8e20-169f9799061e)) (pin "7" (uuid 2987fa57-b836-4dfd-9aac-a4cf7c01024d)) (pin "8" (uuid 973ffcfb-2235-405a-9bfe-5f7767e92c08)) (pin "9" (uuid 03a020e9-b628-4bf2-8110-740fd4b25332)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "U1") (unit 1) ) ) ) ) (symbol (lib_id "Connector_Generic:Conn_01x03") (at 92.71 116.84 270) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 00000000-0000-0000-0000-0000602c32a2) (property "Reference" "J3" (at 97.282 113.5888 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "Debug1" (at 97.282 115.9002 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (at 92.71 116.84 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 92.71 116.84 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 03b69d1a-6775-47aa-9c92-e0394b6cb366)) (pin "2" (uuid bafae5d7-4593-467f-9a28-75683fe5f31e)) (pin "3" (uuid cf9488a0-9ce3-40c3-8532-d81fd1096d80)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "J3") (unit 1) ) ) ) ) (symbol (lib_id "Mechanical:MountingHole_Pad") (at 198.12 129.54 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 018789e2-c44c-4899-984c-f44a168bc676) (property "Reference" "H1" (at 200.66 127.635 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "MountingHole_Pad" (at 200.66 130.175 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) (property "Footprint" "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopBottom" (at 198.12 129.54 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 198.12 129.54 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid e3828d64-c50c-497f-a64c-c788acf22cb5)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "H1") (unit 1) ) ) ) ) (symbol (lib_id "Connector:USB_A") (at 71.12 129.54 90) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 06ca7a46-083a-44e4-bd6d-8226f9b9eca9) (property "Reference" "J1" (at 62.738 128.905 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "Keyboard In" (at 62.738 131.445 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Connector_USB:USB_A_Molex_67643_Horizontal" (at 72.39 125.73 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" " ~" (at 72.39 125.73 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid b1ba8458-9353-4da8-8b9e-836d52bf1d7a)) (pin "2" (uuid 96de4e18-fe5e-4035-bc67-7ecb3ebf6abe)) (pin "3" (uuid ab17f95b-8f95-4af8-86c9-d810731a1c25)) (pin "4" (uuid 72f3ec16-779f-48dd-8e50-3907d6a7cfd9)) (pin "5" (uuid 4f78bb98-f14d-4682-81a5-17a334366cda)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "J1") (unit 1) ) ) ) ) (symbol (lib_id "power:GND2") (at 71.12 83.82 0) (mirror y) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 19b5b16a-132e-4c28-b184-c5182e5208ef) (property "Reference" "#PWR07" (at 71.12 90.17 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 71.12 88.9 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 71.12 83.82 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 71.12 83.82 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 77affa42-946f-4c89-8f63-6d1290245c37)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR07") (unit 1) ) ) ) ) (symbol (lib_id "Mechanical:MountingHole_Pad") (at 88.9 130.81 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 1c8614e8-4d82-4d74-b1f8-1b1a1ec90a13) (property "Reference" "H2" (at 91.44 128.905 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "MountingHole_Pad" (at 91.44 131.445 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) (property "Footprint" "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopBottom" (at 88.9 130.81 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 88.9 130.81 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid ecfbea2f-a352-4623-98c6-d73d79530070)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "H2") (unit 1) ) ) ) ) (symbol (lib_id "Isolator:ADuM1201BR") (at 157.48 68.58 0) (mirror y) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 24926d99-a33a-49d8-9b11-27c6c1201b83) (property "Reference" "U4" (at 157.48 55.88 0) (effects (font (size 1.27 1.27))) ) (property "Value" "ADuM1201BR" (at 157.48 58.42 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 157.48 78.74 0) (effects (font (size 1.27 1.27) italic) hide) ) (property "Datasheet" "https://www.analog.com/static/imported-files/data_sheets/ADuM1200_1201.pdf" (at 157.48 71.12 0) (effects (font (size 1.27 1.27)) hide) ) (pin "2" (uuid 1128d54a-ff72-4754-8fc1-3ad07b73ac5e)) (pin "3" (uuid 3b0dcb5a-d05e-4f13-97e9-b1b583dc5f50)) (pin "4" (uuid 33d30e64-0ac6-42b8-8de1-a351459d4701)) (pin "5" (uuid a91cb16e-a8d8-41cb-82e2-7182abb5b134)) (pin "7" (uuid 799a1350-353f-4110-9dd5-9e1542cae662)) (pin "6" (uuid b5ffb6a0-b32d-404c-ae05-0d82e84b17e1)) (pin "8" (uuid 49a16743-ea47-4362-84a5-05c0e0fd8f7e)) (pin "1" (uuid 385a9c1a-8e16-4136-9715-3b5fad170421)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "U4") (unit 1) ) ) ) ) (symbol (lib_id "Device:C") (at 121.92 68.58 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 3c58f69e-1b44-4a9e-8696-820df6d6d00b) (property "Reference" "C2" (at 125.73 67.31 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "100n" (at 125.73 69.85 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" (at 122.8852 72.39 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 121.92 68.58 0) (effects (font (size 1.27 1.27)) hide) ) (pin "2" (uuid 45852fe0-f033-4fa1-9155-f4f595867456)) (pin "1" (uuid 6d078a59-02c8-4547-b7bf-3add5671b2b5)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "C2") (unit 1) ) ) ) ) (symbol (lib_id "Mechanical:MountingHole_Pad") (at 97.79 130.81 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 4a3d9b92-86b8-4f01-8c19-8709e0c6cbda) (property "Reference" "H3" (at 100.33 128.905 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "MountingHole_Pad" (at 100.33 131.445 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) (property "Footprint" "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopOnly" (at 97.79 130.81 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 97.79 130.81 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid c91af228-a1b6-49f1-9a99-6ad4ca88ca0f)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "H3") (unit 1) ) ) ) ) (symbol (lib_id "power:GND2") (at 58.42 105.41 0) (mirror y) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 59e1abf1-fd3e-4571-a627-a61ae53aceb2) (property "Reference" "#PWR01" (at 58.42 111.76 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 58.42 110.49 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 58.42 105.41 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 58.42 105.41 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid c0197a26-6b50-4281-9e3e-3b5af7f5ee5f)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR01") (unit 1) ) ) ) ) (symbol (lib_id "power:GND") (at 175.26 99.06 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 8664ba9b-bb14-4c63-a14a-17f02ae3e989) (property "Reference" "#PWR010" (at 175.26 105.41 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (at 175.387 103.4542 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 175.26 99.06 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 175.26 99.06 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid be3e6d56-6440-42d4-b9b2-125f469995d4)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR010") (unit 1) ) ) ) ) (symbol (lib_id "Connector_Generic:Conn_01x03") (at 212.09 116.84 270) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid a1fae2a3-1469-4814-90b8-03b3f1461146) (property "Reference" "J2" (at 216.662 113.5888 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "Debug2" (at 216.662 115.9002 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (at 212.09 116.84 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 212.09 116.84 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid e09c40ca-f671-4628-a4f6-22f1bea7d28e)) (pin "2" (uuid 0483b611-f2a7-452a-a4c3-630d77a3bab3)) (pin "3" (uuid 9ece0423-fe5f-4e0c-bc0b-985de782c222)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "J2") (unit 1) ) ) ) ) (symbol (lib_id "power:GND2") (at 81.28 139.7 0) (mirror y) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid aaca2b73-3a07-4bd9-ac25-4eed391e0358) (property "Reference" "#PWR08" (at 81.28 146.05 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 81.28 144.78 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 81.28 139.7 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 81.28 139.7 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 098f4ba5-0d6d-4a2b-a9f6-751e0f3e22b7)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR08") (unit 1) ) ) ) ) (symbol (lib_id "power:GND") (at 198.12 135.89 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid b94b2b52-1a3c-4ca6-864f-5333d48b1f73) (property "Reference" "#PWR02" (at 198.12 142.24 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (at 198.247 140.2842 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 198.12 135.89 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 198.12 135.89 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid fc4bfe70-6228-4e0e-aee0-b6fd399502d2)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR02") (unit 1) ) ) ) ) (symbol (lib_id "power:GND2") (at 121.92 77.47 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid c62951ce-67f1-46e0-b5a1-41f969d7cbf0) (property "Reference" "#PWR05" (at 121.92 83.82 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 121.92 82.55 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 121.92 77.47 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 121.92 77.47 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid c49fc880-2fca-4b6a-b360-80f25e957334)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR05") (unit 1) ) ) ) ) (symbol (lib_id "MCU_RaspberryPi_and_Boards:Pico") (at 212.09 76.2 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid cc3abbed-10c1-4aac-a096-50d15dfb6222) (property "Reference" "U2" (at 212.09 45.72 0) (effects (font (size 1.27 1.27))) ) (property "Value" "Pico Secondary" (at 212.09 48.26 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "MCU_RaspberryPi_and_Boards:RPi_Pico_SMD_Nohole" (at 212.09 76.2 90) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 212.09 76.2 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid cee276b1-6717-49ef-964a-71fe75e1e6bb)) (pin "10" (uuid d7103014-3d74-4920-966d-1029b2b93c9e)) (pin "11" (uuid 10c2fb1b-e234-43b8-9f5b-2305387f4fa4)) (pin "12" (uuid 1b8ff87c-1062-4e49-adba-f2b733b92d45)) (pin "13" (uuid f396f0a5-f03f-42c1-8bd1-9871530a2664)) (pin "14" (uuid 7e4819fa-0aee-4c89-b363-eecd981fc772)) (pin "15" (uuid c34c858e-b7a9-4b45-91a4-9ee6aa4834c6)) (pin "16" (uuid 02568be7-f7bf-43f4-9c1c-7e7c27201448)) (pin "17" (uuid 933f6e93-c4b7-4e8c-a893-3c1fe85328ff)) (pin "18" (uuid eb7d8a34-2760-4653-816e-40f5dad588ce)) (pin "19" (uuid ae717bf5-3dae-4d7b-bf2d-44e9e68686dc)) (pin "2" (uuid 8be63fc7-4721-46f9-89eb-a9ad021276df)) (pin "20" (uuid ff6bc733-bb53-4b73-9f82-a3f295366e76)) (pin "21" (uuid 15ba7c4b-8913-46bd-8b78-822816ec9a20)) (pin "22" (uuid 8a29f46f-90d1-4ea1-a0ff-962a70e24619)) (pin "23" (uuid 9e7027d2-cbcd-4f97-ac4e-1a4b28b925dc)) (pin "24" (uuid a57ea5de-7f52-40b0-88d1-8dfb1d6a0aec)) (pin "25" (uuid cdcc8887-cd45-41e9-a519-576d6692ca19)) (pin "26" (uuid 4e119fe1-0cba-40fe-a669-9c831e885c71)) (pin "27" (uuid 5da5b042-026d-4a2c-9f2f-3eeba008fa22)) (pin "28" (uuid 3898bdc7-a929-4327-933e-43a066629057)) (pin "29" (uuid f34f1779-c9d1-45b0-8c70-88e790359463)) (pin "3" (uuid c0a097c6-ef0e-4048-a041-11a5e38e041a)) (pin "30" (uuid d9adcf94-ccb9-4413-a684-717c4cc4e9c8)) (pin "31" (uuid f4391d66-d8d2-4604-90f7-c0458d038e45)) (pin "32" (uuid 39313f53-d41c-4ad4-9f80-ce1e67a26c92)) (pin "33" (uuid bbe3cbe5-d47d-447c-b021-b6b1bd01d68d)) (pin "34" (uuid 690ff88c-5bda-4f54-9885-d1623da7bbbf)) (pin "35" (uuid 02f8ab5b-8f03-420f-a78d-93fd7dc9e722)) (pin "36" (uuid 5509bd8f-4494-410e-b3ee-e4759a7cab4d)) (pin "37" (uuid 2a41989e-bd6e-4103-a9ee-529e49bef6ea)) (pin "38" (uuid 9fa51e14-b17a-4415-900b-0070fa8ee433)) (pin "39" (uuid e8586a87-8ece-48ab-ba8e-55b07b267229)) (pin "4" (uuid c835bd18-8b4c-4949-a19b-a1983b6646d0)) (pin "40" (uuid db6107b7-69e2-4915-b334-a71d5642bbdd)) (pin "41" (uuid e4c07034-245a-4f3a-a4b9-7436c6fccd81)) (pin "42" (uuid 5130ad9c-661c-410f-95d7-75af0a94b4cf)) (pin "43" (uuid 572d9a12-f857-4042-9787-cbaa4d45ecd2)) (pin "5" (uuid 3c11b8de-f15d-44a9-925f-446f96576f36)) (pin "6" (uuid 361ffedb-2b25-452f-93f4-bef8dfeecab1)) (pin "7" (uuid b1cba198-5e76-4b4f-83a9-9c004a97644c)) (pin "8" (uuid 1db7a24b-9de8-463b-98d5-34e0ef574474)) (pin "9" (uuid 87d7f07b-f443-4adf-aaac-7e926569f26d)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "U2") (unit 1) ) ) ) ) (symbol (lib_id "power:GND") (at 236.22 90.17 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid dc0f6b09-d44a-4cf1-bf6f-8e49a08f4c11) (property "Reference" "#PWR09" (at 236.22 96.52 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (at 236.347 94.5642 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 236.22 90.17 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 236.22 90.17 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid f8543e4a-4ca8-4264-b680-df4619e37ff4)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR09") (unit 1) ) ) ) ) (symbol (lib_id "power:GND2") (at 88.9 139.7 0) (mirror y) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid e563d0c0-fea7-4553-862e-c15e8c2a5c36) (property "Reference" "#PWR03" (at 88.9 146.05 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 88.9 144.78 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 88.9 139.7 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 88.9 139.7 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid acd58da1-2150-407c-84cc-e6044098db45)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR03") (unit 1) ) ) ) ) (symbol (lib_id "power:GND") (at 190.5 135.89 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid e56bbfb1-09e6-417d-9f37-b7600be903c1) (property "Reference" "#PWR04" (at 190.5 142.24 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (at 190.627 140.2842 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 190.5 135.89 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 190.5 135.89 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 4e4d33b1-8a67-4c36-b99e-50e060ac3bd0)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR04") (unit 1) ) ) ) ) (symbol (lib_id "Connector:USB_A") (at 180.34 128.27 90) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid e72b3351-45d9-41aa-8df7-943302db5ce3) (property "Reference" "J4" (at 171.45 127 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "Mouse In" (at 171.45 129.54 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Connector_USB:USB_A_Molex_67643_Horizontal" (at 181.61 124.46 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" " ~" (at 181.61 124.46 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid cbfaf725-d8f4-4213-9b9e-af1090d99e8c)) (pin "2" (uuid ef7afb39-4a73-41fb-97ba-19cc060913c0)) (pin "3" (uuid 27412821-1996-47d7-8391-176857432b8f)) (pin "4" (uuid 55a01385-2eed-4429-984c-4473280f693b)) (pin "5" (uuid fb201432-9068-4d13-9e50-4a081bdb5ecc)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "J4") (unit 1) ) ) ) ) (symbol (lib_id "Device:C") (at 181.61 57.15 90) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid fb534856-14b0-4379-bd15-7952c4f76624) (property "Reference" "C1" (at 186.69 55.88 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "100n" (at 186.69 53.34 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" (at 185.42 56.1848 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 181.61 57.15 0) (effects (font (size 1.27 1.27)) hide) ) (pin "2" (uuid 8e699897-70d5-4d70-80de-23bf721f11d8)) (pin "1" (uuid 606d42c5-e2d5-4b61-9257-760962ef0773)) (instances (project "DeskHop" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "C1") (unit 1) ) ) ) ) (sheet_instances (path "/" (page "1")) ) ) ================================================ FILE: pcb/v1.0/Gerber/DeskHop-B_Cu.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-01-21T01:35:16+01:00*% %TF.ProjectId,DeskHop,4465736b-486f-4702-9e6b-696361645f70,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Copper,L2,Bot*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-01-21 01:35:16* %MOMM*% %LPD*% G01* G04 APERTURE LIST* %TA.AperFunction,NonConductor*% %ADD10C,0.200000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD11C,3.100000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD12R,1.600000X1.500000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD13C,1.600000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD14C,3.000000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD15R,1.700000X1.700000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD16O,1.700000X1.700000*% %TD*% %TA.AperFunction,ConnectorPad*% %ADD17C,5.400000*% %TD*% G04 APERTURE END LIST* D10* X65786000Y-41148001D02* G75* G03* X66360432Y-49447208I1524000J-4063999D01* G01* D11* %TO.P,H3,1,1*% %TO.N,GND2*% X67310000Y-45212000D03* %TD*% D12* %TO.P,J4,1,VBUS*% %TO.N,Net-(J4-VBUS)*% X45776000Y-101574000D03* D13* %TO.P,J4,2,D-*% %TO.N,Net-(J4-D-)*% X48276000Y-101574000D03* %TO.P,J4,3,D+*% %TO.N,Net-(J4-D+)*% X50276000Y-101574000D03* %TO.P,J4,4,GND*% %TO.N,GND*% X52776000Y-101574000D03* D14* %TO.P,J4,5,Shield*% X42706000Y-104284000D03* X55846000Y-104284000D03* %TD*% D15* %TO.P,J3,1,Pin_1*% %TO.N,Net-(J3-Pin_1)*% X95667537Y-99795757D03* D16* %TO.P,J3,2,Pin_2*% %TO.N,GND2*% X95667537Y-102335757D03* %TO.P,J3,3,Pin_3*% %TO.N,Net-(J3-Pin_3)*% X95667537Y-104875757D03* %TD*% D11* %TO.P,H2,1,1*% %TO.N,GND2*% X96774000Y-111506000D03* D17* X96774000Y-111506000D03* %TD*% D12* %TO.P,J1,1,VBUS*% %TO.N,Net-(J1-VBUS)*% X81082000Y-101574000D03* D13* %TO.P,J1,2,D-*% %TO.N,Net-(J1-D-)*% X83582000Y-101574000D03* %TO.P,J1,3,D+*% %TO.N,Net-(J1-D+)*% X85582000Y-101574000D03* %TO.P,J1,4,GND*% %TO.N,GND2*% X88082000Y-101574000D03* D14* %TO.P,J1,5,Shield*% X78012000Y-104284000D03* X91152000Y-104284000D03* %TD*% D11* %TO.P,H1,1,1*% %TO.N,GND*% X37846000Y-111506000D03* D17* X37846000Y-111506000D03* %TD*% D15* %TO.P,J2,1,Pin_1*% %TO.N,Net-(J2-Pin_1)*% X60731042Y-99717876D03* D16* %TO.P,J2,2,Pin_2*% %TO.N,GND*% X60731042Y-102257876D03* %TO.P,J2,3,Pin_3*% %TO.N,Net-(J2-Pin_3)*% X60731042Y-104797876D03* %TD*% %TA.AperFunction,Conductor*% %TO.N,GND*% G36* X64221287Y-41130309D02* G01* X64267042Y-41183113D01* X64276986Y-41252271D01* X64247961Y-41315827D01* X64235286Y-41328478D01* X64038835Y-41498082D01* X63910370Y-41608990D01* X63884437Y-41635721D01* X63605705Y-41923024D01* X63329939Y-42262716D01* X63085222Y-42625417D01* X62873464Y-43008296D01* X62696317Y-43408367D01* X62555163Y-43822509D01* X62492827Y-44077088D01* X62451102Y-44247491D01* X62451102Y-44247492D01* X62384948Y-44679993D01* X62376168Y-44818244D01* X62357254Y-45116064D01* X62357216Y-45116659D01* X62368122Y-45554057D01* X62368122Y-45554058D01* X62417579Y-45988775D01* X62417579Y-45988776D01* X62420168Y-46001442D01* X62505207Y-46417457D01* X62574145Y-46648483D01* X62607040Y-46758721D01* X62630317Y-46836725D01* X62682643Y-46968364D01* X62791933Y-47243315D01* X62986189Y-47628880D01* X62988800Y-47634063D01* X63219376Y-48005914D01* X63219379Y-48005918D01* X63219379Y-48005919D01* X63481865Y-48355970D01* X63751676Y-48656397D01* X63774216Y-48681495D01* X64094153Y-48979956D01* X64439177Y-49249021D01* X64806598Y-49486592D01* X64806604Y-49486595D01* X64806603Y-49486595D01* X64946333Y-49560341D01* X65193548Y-49690816D01* X65193553Y-49690818D01* X65193552Y-49690818D01* X65597012Y-49860101D01* X66013830Y-49993120D01* X66227305Y-50040967D01* X66238949Y-50043577D01* X66299402Y-50057131D01* X66299406Y-50057130D01* X66299996Y-50057263D01* X66361106Y-50091137D01* X66394201Y-50152671D01* X66396870Y-50178222D01* X66416808Y-115416837D01* X66397144Y-115483883D01* X66344354Y-115529654D01* X66292808Y-115540875D01* X33922903Y-115540875D01* X33855864Y-115521190D01* X33810109Y-115468386D01* X33798903Y-115416875D01* X33798903Y-111506000D01* X34640958Y-111506000D01* X34661110Y-111864846D01* X34661112Y-111864858D01* X34721314Y-112219185D01* X34721316Y-112219194D01* X34820812Y-112564552D01* X34958353Y-112896609D01* X34958355Y-112896613D01* X35132215Y-113211189D01* X35132218Y-113211194D01* X35340193Y-113504306D01* X35412843Y-113585601D01* X36731073Y-112267372D01* X36807890Y-112377078D01* X36974922Y-112544110D01* X37084626Y-112620925D01* X35766397Y-113939155D01* X35847693Y-114011806D01* X36140805Y-114219781D01* X36140810Y-114219784D01* X36455386Y-114393644D01* X36455390Y-114393646D01* X36787447Y-114531187D01* X37132805Y-114630683D01* X37132814Y-114630685D01* X37487141Y-114690887D01* X37487153Y-114690889D01* X37846000Y-114711041D01* X38204846Y-114690889D01* X38204858Y-114690887D01* X38559185Y-114630685D01* X38559194Y-114630683D01* X38904552Y-114531187D01* X39236609Y-114393646D01* X39236613Y-114393644D01* X39551189Y-114219784D01* X39551194Y-114219781D01* X39844306Y-114011806D01* X39925601Y-113939155D01* X38607373Y-112620925D01* X38717078Y-112544110D01* X38884110Y-112377078D01* X38960926Y-112267373D01* X40279155Y-113585601D01* X40351806Y-113504306D01* X40559781Y-113211194D01* X40559784Y-113211189D01* X40733644Y-112896613D01* X40733646Y-112896609D01* X40871187Y-112564552D01* X40970683Y-112219194D01* X40970685Y-112219185D01* X41030887Y-111864858D01* X41030889Y-111864846D01* X41051041Y-111506000D01* X41030889Y-111147153D01* X41030887Y-111147141D01* X40970685Y-110792814D01* X40970683Y-110792805D01* X40871187Y-110447447D01* X40733646Y-110115390D01* X40733644Y-110115386D01* X40559784Y-109800810D01* X40559781Y-109800805D01* X40351806Y-109507693D01* X40279155Y-109426397D01* X38960925Y-110744626D01* X38884110Y-110634922D01* X38717078Y-110467890D01* X38607372Y-110391073D01* X39925602Y-109072843D01* X39844306Y-109000193D01* X39551194Y-108792218D01* X39551189Y-108792215D01* X39236613Y-108618355D01* X39236609Y-108618353D01* X38904552Y-108480812D01* X38559194Y-108381316D01* X38559185Y-108381314D01* X38204858Y-108321112D01* X38204846Y-108321110D01* X37846000Y-108300958D01* X37487153Y-108321110D01* X37487141Y-108321112D01* X37132814Y-108381314D01* X37132805Y-108381316D01* X36787447Y-108480812D01* X36455390Y-108618353D01* X36455386Y-108618355D01* X36140810Y-108792215D01* X36140805Y-108792218D01* X35847693Y-109000194D01* X35847685Y-109000199D01* X35766397Y-109072842D01* X35766397Y-109072843D01* X37084627Y-110391073D01* X36974922Y-110467890D01* X36807890Y-110634922D01* X36731073Y-110744627D01* X35412843Y-109426397D01* X35412842Y-109426397D01* X35340199Y-109507685D01* X35340194Y-109507693D01* X35132218Y-109800805D01* X35132215Y-109800810D01* X34958355Y-110115386D01* X34958353Y-110115390D01* X34820812Y-110447447D01* X34721316Y-110792805D01* X34721314Y-110792814D01* X34661112Y-111147141D01* X34661110Y-111147153D01* X34640958Y-111506000D01* X33798903Y-111506000D01* X33798903Y-104284001D01* X40700891Y-104284001D01* X40721300Y-104569362D01* X40782109Y-104848895D01* X40882091Y-105116958D01* X41019191Y-105368038D01* X41019196Y-105368046D01* X41125882Y-105510561D01* X41125883Y-105510562D01* X41735438Y-104901006D01* X41784348Y-104979999D01* X41927931Y-105137501D01* X42086388Y-105257163D01* X41479436Y-105864115D01* X41621960Y-105970807D01* X41621961Y-105970808D01* X41873042Y-106107908D01* X41873041Y-106107908D01* X42141104Y-106207890D01* X42420637Y-106268699D01* X42705999Y-106289109D01* X42706001Y-106289109D01* X42991362Y-106268699D01* X43270895Y-106207890D01* X43538958Y-106107908D01* X43790047Y-105970803D01* X43932561Y-105864116D01* X43932562Y-105864115D01* X43325611Y-105257163D01* X43484069Y-105137501D01* X43627652Y-104979999D01* X43676560Y-104901007D01* X44286115Y-105510562D01* X44286116Y-105510561D01* X44392803Y-105368047D01* X44529908Y-105116958D01* X44629890Y-104848895D01* X44690699Y-104569362D01* X44711109Y-104284001D01* X53840891Y-104284001D01* X53861300Y-104569362D01* X53922109Y-104848895D01* X54022091Y-105116958D01* X54159191Y-105368038D01* X54159196Y-105368046D01* X54265882Y-105510561D01* X54265883Y-105510562D01* X54875438Y-104901006D01* X54924348Y-104979999D01* X55067931Y-105137501D01* X55226388Y-105257163D01* X54619436Y-105864115D01* X54761960Y-105970807D01* X54761961Y-105970808D01* X55013042Y-106107908D01* X55013041Y-106107908D01* X55281104Y-106207890D01* X55560637Y-106268699D01* X55845999Y-106289109D01* X55846001Y-106289109D01* X56131362Y-106268699D01* X56410895Y-106207890D01* X56678958Y-106107908D01* X56930047Y-105970803D01* X57072561Y-105864116D01* X57072562Y-105864115D01* X56465611Y-105257163D01* X56624069Y-105137501D01* X56767652Y-104979999D01* X56816560Y-104901007D01* X57426115Y-105510562D01* X57426116Y-105510561D01* X57532803Y-105368047D01* X57669908Y-105116958D01* X57769890Y-104848895D01* X57780987Y-104797881D01* X59367886Y-104797881D01* X59386476Y-105022235D01* X59386478Y-105022247D01* X59441745Y-105240490D01* X59532182Y-105446668D01* X59655318Y-105635141D01* X59655326Y-105635152D01* X59807798Y-105800778D01* X59807802Y-105800782D01* X59985466Y-105939065D01* X59985467Y-105939065D01* X59985469Y-105939067D01* X60044120Y-105970807D01* X60183468Y-106046218D01* X60396407Y-106119320D01* X60618473Y-106156376D01* X60843611Y-106156376D01* X61065677Y-106119320D01* X61278616Y-106046218D01* X61476618Y-105939065D01* X61654282Y-105800782D01* X61806764Y-105635144D01* X61929902Y-105446667D01* X62020338Y-105240492D01* X62075606Y-105022244D01* X62079107Y-104979999D01* X62094198Y-104797881D01* X62094198Y-104797870D01* X62075607Y-104573516D01* X62075605Y-104573504D01* X62020338Y-104355261D01* X61989080Y-104284000D01* X61929902Y-104149085D01* X61806764Y-103960608D01* X61806761Y-103960605D01* X61806757Y-103960599D01* X61654285Y-103794973D01* X61654280Y-103794968D01* X61476619Y-103656688D01* X61476619Y-103656687D01* X61433345Y-103633269D01* X61383755Y-103584049D01* X61368647Y-103515833D01* X61392817Y-103450277D01* X61421240Y-103422639D01* X61602121Y-103295984D01* X61769147Y-103128958D01* X61904642Y-102935454D01* X62004471Y-102721368D01* X62004474Y-102721362D01* X62061678Y-102507876D01* X61164728Y-102507876D01* X61190535Y-102467720D01* X61231042Y-102329765D01* X61231042Y-102185987D01* X61190535Y-102048032D01* X61164728Y-102007876D01* X62061678Y-102007876D01* X62061677Y-102007875D01* X62004474Y-101794389D01* X62004471Y-101794383D01* X61904642Y-101580298D01* X61904641Y-101580296D01* X61769155Y-101386802D01* X61769150Y-101386796D01* X61653314Y-101270960D01* X61619829Y-101209637D01* X61624813Y-101139945D01* X61666685Y-101084012D01* X61697654Y-101067100D01* X61827246Y-101018765D01* X61944303Y-100931137D01* X62031931Y-100814080D01* X62083031Y-100677077D01* X62086633Y-100643568D01* X62089541Y-100616530D01* X62089542Y-100616513D01* X62089542Y-98819238D01* X62089541Y-98819221D01* X62086199Y-98788146D01* X62083031Y-98758675D01* X62031931Y-98621672D01* X61944303Y-98504615D01* X61827246Y-98416987D01* X61690245Y-98365887D01* X61629696Y-98359376D01* X61629680Y-98359376D01* X59832404Y-98359376D01* X59832387Y-98359376D01* X59771839Y-98365887D01* X59771837Y-98365887D01* X59634837Y-98416987D01* X59517781Y-98504615D01* X59430153Y-98621671D01* X59379053Y-98758671D01* X59379053Y-98758673D01* X59372542Y-98819221D01* X59372542Y-100616530D01* X59379053Y-100677078D01* X59379053Y-100677080D01* X59430153Y-100814080D01* X59517781Y-100931137D01* X59634838Y-101018765D01* X59764424Y-101067098D01* X59820355Y-101108969D01* X59844772Y-101174433D01* X59829920Y-101242706D01* X59808770Y-101270960D01* X59692928Y-101386802D01* X59557442Y-101580296D01* X59557441Y-101580298D01* X59457612Y-101794383D01* X59457609Y-101794389D01* X59400406Y-102007875D01* X59400406Y-102007876D01* X60297356Y-102007876D01* X60271549Y-102048032D01* X60231042Y-102185987D01* X60231042Y-102329765D01* X60271549Y-102467720D01* X60297356Y-102507876D01* X59400406Y-102507876D01* X59457609Y-102721362D01* X59457612Y-102721368D01* X59557441Y-102935454D01* X59692936Y-103128958D01* X59859959Y-103295981D01* X60040844Y-103422639D01* X60084469Y-103477216D01* X60091661Y-103546715D01* X60060139Y-103609069D01* X60028739Y-103633268D01* X59985469Y-103656685D01* X59985464Y-103656688D01* X59807803Y-103794968D01* X59807798Y-103794973D01* X59655326Y-103960599D01* X59655318Y-103960610D01* X59532182Y-104149083D01* X59441745Y-104355261D01* X59386478Y-104573504D01* X59386476Y-104573516D01* X59367886Y-104797870D01* X59367886Y-104797881D01* X57780987Y-104797881D01* X57830699Y-104569362D01* X57851109Y-104284001D01* X57851109Y-104283998D01* X57830699Y-103998637D01* X57769890Y-103719104D01* X57669908Y-103451041D01* X57532808Y-103199961D01* X57532807Y-103199960D01* X57426115Y-103057436D01* X56816560Y-103666991D01* X56767652Y-103588001D01* X56624069Y-103430499D01* X56465610Y-103310835D01* X57072562Y-102703883D01* X57072561Y-102703882D01* X56930046Y-102597196D01* X56930038Y-102597191D01* X56678957Y-102460091D01* X56678958Y-102460091D01* X56410895Y-102360109D01* X56131362Y-102299300D01* X55846001Y-102278891D01* X55845999Y-102278891D01* X55560637Y-102299300D01* X55281104Y-102360109D01* X55013041Y-102460091D01* X54761961Y-102597191D01* X54761953Y-102597196D01* X54619437Y-102703882D01* X54619436Y-102703883D01* X55226389Y-103310835D01* X55067931Y-103430499D01* X54924348Y-103588001D01* X54875439Y-103666992D01* X54265883Y-103057436D01* X54265882Y-103057437D01* X54159196Y-103199953D01* X54159191Y-103199961D01* X54022091Y-103451041D01* X53922109Y-103719104D01* X53861300Y-103998637D01* X53840891Y-104283998D01* X53840891Y-104284001D01* X44711109Y-104284001D01* X44711109Y-104283998D01* X44690699Y-103998637D01* X44629890Y-103719104D01* X44529908Y-103451041D01* X44392808Y-103199961D01* X44392807Y-103199960D01* X44286115Y-103057436D01* X43676560Y-103666991D01* X43627652Y-103588001D01* X43484069Y-103430499D01* X43325610Y-103310835D01* X43932562Y-102703883D01* X43932561Y-102703882D01* X43790046Y-102597196D01* X43790038Y-102597191D01* X43538957Y-102460091D01* X43538958Y-102460091D01* X43304530Y-102372654D01* X44467500Y-102372654D01* X44474011Y-102433202D01* X44474011Y-102433204D01* X44525111Y-102570203D01* X44525111Y-102570204D01* X44612739Y-102687261D01* X44729796Y-102774889D01* X44866799Y-102825989D01* X44894050Y-102828918D01* X44927345Y-102832499D01* X44927362Y-102832500D01* X46624638Y-102832500D01* X46624654Y-102832499D01* X46651692Y-102829591D01* X46685201Y-102825989D01* X46822204Y-102774889D01* X46939261Y-102687261D01* X47026889Y-102570204D01* X47040586Y-102533480D01* X47066717Y-102463424D01* X47108588Y-102407490D01* X47174053Y-102383074D01* X47242326Y-102397926D01* X47270579Y-102419077D01* X47431700Y-102580198D01* X47619251Y-102711523D01* X47685802Y-102742556D01* X47826750Y-102808281D01* X47826752Y-102808281D01* X47826757Y-102808284D01* X48047913Y-102867543D01* X48210832Y-102881796D01* X48275998Y-102887498D01* X48276000Y-102887498D01* X48276002Y-102887498D01* X48333021Y-102882509D01* X48504087Y-102867543D01* X48725243Y-102808284D01* X48932749Y-102711523D01* X49120300Y-102580198D01* X49188319Y-102512179D01* X49249642Y-102478694D01* X49319334Y-102483678D01* X49363681Y-102512179D01* X49431700Y-102580198D01* X49619251Y-102711523D01* X49685802Y-102742556D01* X49826750Y-102808281D01* X49826752Y-102808281D01* X49826757Y-102808284D01* X50047913Y-102867543D01* X50210832Y-102881796D01* X50275998Y-102887498D01* X50276000Y-102887498D01* X50276002Y-102887498D01* X50333021Y-102882509D01* X50504087Y-102867543D01* X50725243Y-102808284D01* X50932749Y-102711523D01* X51120300Y-102580198D01* X51282198Y-102418300D01* X51413523Y-102230749D01* X51418307Y-102220487D01* X51464476Y-102168051D01* X51531669Y-102148897D01* X51598551Y-102169111D01* X51643072Y-102220490D01* X51645866Y-102226483D01* X51696973Y-102299471D01* X51696974Y-102299472D01* X52313064Y-101683381D01* X52339481Y-101773351D01* X52413327Y-101888258D01* X52516555Y-101977705D01* X52640801Y-102034446D01* X52665548Y-102038004D01* X52050526Y-102653025D01* X52050526Y-102653026D01* X52123512Y-102704131D01* X52123516Y-102704133D01* X52329673Y-102800265D01* X52329682Y-102800269D01* X52549389Y-102859139D01* X52549400Y-102859141D01* X52775998Y-102878966D01* X52776002Y-102878966D01* X53002599Y-102859141D01* X53002610Y-102859139D01* X53222317Y-102800269D01* X53222331Y-102800264D01* X53428478Y-102704136D01* X53501472Y-102653025D01* X52886451Y-102038004D01* X52911199Y-102034446D01* X53035445Y-101977705D01* X53138673Y-101888258D01* X53212519Y-101773351D01* X53238935Y-101683382D01* X53855025Y-102299472D01* X53906136Y-102226478D01* X54002264Y-102020331D01* X54002269Y-102020317D01* X54061139Y-101800610D01* X54061141Y-101800599D01* X54080966Y-101574002D01* X54080966Y-101573997D01* X54061141Y-101347400D01* X54061139Y-101347389D01* X54002269Y-101127682D01* X54002265Y-101127673D01* X53906133Y-100921516D01* X53906131Y-100921512D01* X53855026Y-100848526D01* X53855025Y-100848526D01* X53238935Y-101464616D01* X53212519Y-101374649D01* X53138673Y-101259742D01* X53035445Y-101170295D01* X52911199Y-101113554D01* X52886451Y-101109995D01* X53501472Y-100494974D01* X53501471Y-100494973D01* X53428483Y-100443866D01* X53428481Y-100443865D01* X53222326Y-100347734D01* X53222317Y-100347730D01* X53002610Y-100288860D01* X53002599Y-100288858D01* X52776002Y-100269034D01* X52775998Y-100269034D01* X52549400Y-100288858D01* X52549389Y-100288860D01* X52329682Y-100347730D01* X52329673Y-100347734D01* X52123513Y-100443868D01* X52050527Y-100494972D01* X52050526Y-100494973D01* X52665549Y-101109995D01* X52640801Y-101113554D01* X52516555Y-101170295D01* X52413327Y-101259742D01* X52339481Y-101374649D01* X52313064Y-101464617D01* X51696973Y-100848526D01* X51696972Y-100848527D01* X51645867Y-100921513D01* X51643070Y-100927513D01* X51596897Y-100979951D01* X51529703Y-100999102D01* X51462822Y-100978885D01* X51418307Y-100927511D01* X51413523Y-100917251D01* X51282198Y-100729700D01* X51120300Y-100567802D01* X50932749Y-100436477D01* X50932745Y-100436475D01* X50725249Y-100339718D01* X50725238Y-100339714D01* X50504089Y-100280457D01* X50504081Y-100280456D01* X50276002Y-100260502D01* X50275998Y-100260502D01* X50047918Y-100280456D01* X50047910Y-100280457D01* X49826761Y-100339714D01* X49826750Y-100339718D01* X49619254Y-100436475D01* X49619252Y-100436476D01* X49584601Y-100460739D01* X49431700Y-100567802D01* X49431698Y-100567803D01* X49431695Y-100567806D01* X49363681Y-100635821D01* X49302358Y-100669306D01* X49232666Y-100664322D01* X49188319Y-100635821D01* X49120304Y-100567806D01* X49120300Y-100567802D01* X48932749Y-100436477D01* X48932745Y-100436475D01* X48725249Y-100339718D01* X48725238Y-100339714D01* X48504089Y-100280457D01* X48504081Y-100280456D01* X48276002Y-100260502D01* X48275998Y-100260502D01* X48047918Y-100280456D01* X48047910Y-100280457D01* X47826761Y-100339714D01* X47826750Y-100339718D01* X47619254Y-100436475D01* X47619252Y-100436476D01* X47431699Y-100567803D01* X47270579Y-100728923D01* X47209256Y-100762407D01* X47139564Y-100757423D01* X47083631Y-100715551D01* X47066717Y-100684576D01* X47041330Y-100616513D01* X47026889Y-100577796D01* X46939261Y-100460739D01* X46822204Y-100373111D01* X46685203Y-100322011D01* X46624654Y-100315500D01* X46624638Y-100315500D01* X44927362Y-100315500D01* X44927345Y-100315500D01* X44866797Y-100322011D01* X44866795Y-100322011D01* X44729795Y-100373111D01* X44612739Y-100460739D01* X44525111Y-100577795D01* X44474011Y-100714795D01* X44474011Y-100714797D01* X44467500Y-100775345D01* X44467500Y-102372654D01* X43304530Y-102372654D01* X43270895Y-102360109D01* X42991362Y-102299300D01* X42706001Y-102278891D01* X42705999Y-102278891D01* X42420637Y-102299300D01* X42141104Y-102360109D01* X41873041Y-102460091D01* X41621961Y-102597191D01* X41621953Y-102597196D01* X41479437Y-102703882D01* X41479436Y-102703883D01* X42086389Y-103310835D01* X41927931Y-103430499D01* X41784348Y-103588001D01* X41735439Y-103666992D01* X41125883Y-103057436D01* X41125882Y-103057437D01* X41019196Y-103199953D01* X41019191Y-103199961D01* X40882091Y-103451041D01* X40782109Y-103719104D01* X40721300Y-103998637D01* X40700891Y-104283998D01* X40700891Y-104284001D01* X33798903Y-104284001D01* X33798903Y-47848247D01* X45197216Y-47848247D01* X45199195Y-47870888D01* X45199369Y-47879078D01* X45198207Y-47904937D01* X45198208Y-47904939D01* X45209214Y-47986195D01* X45209539Y-47989113D01* X45213636Y-48035933D01* X45216408Y-48067620D01* X45223147Y-48092772D01* X45224697Y-48100492D01* X45228616Y-48129422D01* X45228619Y-48129432D01* X45252936Y-48204272D01* X45253857Y-48207383D01* X45273400Y-48280315D01* X45273404Y-48280327D01* X45285798Y-48306908D01* X45288574Y-48313954D01* X45298620Y-48344870D01* X45307628Y-48361609D01* X45334345Y-48411259D01* X45335939Y-48414436D01* X45366465Y-48479900D01* X45366466Y-48479902D01* X45366467Y-48479903D01* X45385191Y-48506645D01* X45388998Y-48512823D01* X45405966Y-48544354D01* X45405968Y-48544357D01* X45450920Y-48600724D01* X45453232Y-48603816D01* X45492774Y-48660287D01* X45492777Y-48660290D01* X45518182Y-48685695D01* X45522818Y-48690882D01* X45547209Y-48721467D01* X45599037Y-48766748D01* X45602080Y-48769593D01* X45648478Y-48815992D01* X45648479Y-48815993D01* X45648482Y-48815995D01* X45648485Y-48815998D01* X45673310Y-48833380D01* X45680632Y-48838507D01* X45685864Y-48842606D01* X45717805Y-48870512D01* X45774058Y-48904121D01* X45777781Y-48906532D01* X45814273Y-48932084D01* X45828861Y-48942300D01* X45828864Y-48942301D01* X45828869Y-48942305D01* X45867433Y-48960287D01* X45873016Y-48963246D01* X45912273Y-48986702D01* X45970533Y-49008566D01* X45974945Y-49010420D01* X46028447Y-49035369D01* X46072727Y-49047233D01* X46078462Y-49049073D01* X46107879Y-49060113D01* X46124362Y-49066300D01* X46182336Y-49076820D01* X46187301Y-49077934D01* X46241152Y-49092364D01* X46290125Y-49096648D01* X46295773Y-49097406D01* X46334875Y-49104502D01* X46347255Y-49106749D01* X46347256Y-49106749D01* X46402871Y-49106749D01* X46408272Y-49106984D01* X46436893Y-49109488D01* X46460521Y-49111556D01* X46460522Y-49111556D01* X46460522Y-49111555D01* X46460523Y-49111556D01* X46513833Y-49106892D01* X46517027Y-49106749D01* X46517045Y-49106749D01* X46565148Y-49102418D01* X46571914Y-49101810D01* X46679876Y-49092366D01* X46679880Y-49092365D01* X46679894Y-49092364D01* X46679906Y-49092360D01* X46680425Y-49092269D01* X46685659Y-49091573D01* X46686145Y-49091530D01* X46790858Y-49062630D01* X46892599Y-49035369D01* X46892612Y-49035362D01* X46899552Y-49032837D01* X46904243Y-49031338D01* X46904516Y-49031263D01* X46999542Y-48985500D01* X47092177Y-48942305D01* X47092186Y-48942298D01* X47096873Y-48939594D01* X47096944Y-48939717D01* X47107729Y-48933401D01* X47108616Y-48932974D01* X47191391Y-48872834D01* X47272561Y-48815998D01* X47273474Y-48815084D01* X47288275Y-48802442D01* X47291886Y-48799820D01* X47304746Y-48786370D01* X47360425Y-48728133D01* X47428269Y-48660290D01* X47428269Y-48660289D01* X47428272Y-48660287D01* X47430999Y-48656391D01* X47442951Y-48641817D01* X47448435Y-48636083D01* X47501332Y-48555946D01* X47554579Y-48479903D01* X47558061Y-48472434D01* X47566959Y-48456525D01* X47567341Y-48455947D01* X47573232Y-48447023D01* X47609739Y-48361609D01* X47647643Y-48280325D01* X47650668Y-48269031D01* X47656419Y-48252396D01* X47662266Y-48238719D01* X47682234Y-48151227D01* X47704638Y-48067620D01* X47706330Y-48048273D01* X47707649Y-48039875D01* X47712674Y-48017864D01* X47716559Y-47931354D01* X47723830Y-47848249D01* X47723830Y-47848247D01* X50047216Y-47848247D01* X50049195Y-47870888D01* X50049369Y-47879078D01* X50048207Y-47904937D01* X50048208Y-47904939D01* X50059214Y-47986195D01* X50059539Y-47989113D01* X50063636Y-48035933D01* X50066408Y-48067620D01* X50073147Y-48092772D01* X50074697Y-48100492D01* X50078616Y-48129422D01* X50078619Y-48129432D01* X50102936Y-48204272D01* X50103857Y-48207383D01* X50123400Y-48280315D01* X50123404Y-48280327D01* X50135798Y-48306908D01* X50138574Y-48313954D01* X50148620Y-48344870D01* X50157628Y-48361609D01* X50184345Y-48411259D01* X50185939Y-48414436D01* X50216465Y-48479900D01* X50216466Y-48479902D01* X50216467Y-48479903D01* X50235191Y-48506645D01* X50238998Y-48512823D01* X50255966Y-48544354D01* X50255968Y-48544357D01* X50300920Y-48600724D01* X50303232Y-48603816D01* X50342774Y-48660287D01* X50342777Y-48660290D01* X50368182Y-48685695D01* X50372818Y-48690882D01* X50397209Y-48721467D01* X50449037Y-48766748D01* X50452080Y-48769593D01* X50498478Y-48815992D01* X50498479Y-48815993D01* X50498482Y-48815995D01* X50498485Y-48815998D01* X50523310Y-48833380D01* X50530632Y-48838507D01* X50535864Y-48842606D01* X50567805Y-48870512D01* X50624058Y-48904121D01* X50627781Y-48906532D01* X50664273Y-48932084D01* X50678861Y-48942300D01* X50678864Y-48942301D01* X50678869Y-48942305D01* X50717433Y-48960287D01* X50723016Y-48963246D01* X50762273Y-48986702D01* X50820533Y-49008566D01* X50824945Y-49010420D01* X50878447Y-49035369D01* X50922727Y-49047233D01* X50928462Y-49049073D01* X50957879Y-49060113D01* X50974362Y-49066300D01* X51032336Y-49076820D01* X51037301Y-49077934D01* X51091152Y-49092364D01* X51140125Y-49096648D01* X51145773Y-49097406D01* X51184875Y-49104502D01* X51197255Y-49106749D01* X51197256Y-49106749D01* X51252871Y-49106749D01* X51258272Y-49106984D01* X51286893Y-49109488D01* X51310521Y-49111556D01* X51310522Y-49111556D01* X51310522Y-49111555D01* X51310523Y-49111556D01* X51363833Y-49106892D01* X51367027Y-49106749D01* X51367045Y-49106749D01* X51415148Y-49102418D01* X51421914Y-49101810D01* X51529876Y-49092366D01* X51529880Y-49092365D01* X51529894Y-49092364D01* X51529906Y-49092360D01* X51530425Y-49092269D01* X51535659Y-49091573D01* X51536145Y-49091530D01* X51640858Y-49062630D01* X51742599Y-49035369D01* X51742612Y-49035362D01* X51749552Y-49032837D01* X51754243Y-49031338D01* X51754516Y-49031263D01* X51849542Y-48985500D01* X51942177Y-48942305D01* X51942186Y-48942298D01* X51946873Y-48939594D01* X51946944Y-48939717D01* X51957729Y-48933401D01* X51958616Y-48932974D01* X52041391Y-48872834D01* X52122561Y-48815998D01* X52123474Y-48815084D01* X52138275Y-48802442D01* X52141886Y-48799820D01* X52154746Y-48786370D01* X52210425Y-48728133D01* X52278269Y-48660290D01* X52278269Y-48660289D01* X52278272Y-48660287D01* X52280999Y-48656391D01* X52292951Y-48641817D01* X52298435Y-48636083D01* X52351332Y-48555946D01* X52404579Y-48479903D01* X52408061Y-48472434D01* X52416959Y-48456525D01* X52417341Y-48455947D01* X52423232Y-48447023D01* X52459739Y-48361609D01* X52497643Y-48280325D01* X52500668Y-48269031D01* X52506419Y-48252396D01* X52512266Y-48238719D01* X52532234Y-48151227D01* X52554638Y-48067620D01* X52556330Y-48048273D01* X52557649Y-48039875D01* X52562674Y-48017864D01* X52566559Y-47931354D01* X52573830Y-47848249D01* X52571850Y-47825617D01* X52571676Y-47817422D01* X52572838Y-47791558D01* X52561828Y-47710291D01* X52561504Y-47707374D01* X52555091Y-47634063D01* X52554638Y-47628878D01* X52547900Y-47603732D01* X52546348Y-47596002D01* X52544645Y-47583439D01* X52542429Y-47567074D01* X52518110Y-47492231D01* X52517194Y-47489138D01* X52502953Y-47435990D01* X52497646Y-47416182D01* X52497642Y-47416172D01* X52485245Y-47389585D01* X52482471Y-47382545D01* X52472426Y-47351628D01* X52472425Y-47351626D01* X52472422Y-47351619D01* X52436690Y-47285219D01* X52435105Y-47282060D01* X52404579Y-47216596D01* X52404575Y-47216590D01* X52385860Y-47189862D01* X52382046Y-47183673D01* X52365078Y-47152141D01* X52320117Y-47095762D01* X52317802Y-47092666D01* X52278273Y-47036212D01* X52252863Y-47010802D01* X52248225Y-47005613D01* X52223835Y-46975029D01* X52172014Y-46929754D01* X52168965Y-46926904D01* X52122562Y-46880500D01* X52090414Y-46857990D01* X52085179Y-46853890D01* X52053241Y-46825986D01* X51997009Y-46792388D01* X51993248Y-46789953D01* X51955503Y-46763524D01* X51942177Y-46754193D01* X51928463Y-46747798D01* X51903623Y-46736214D01* X51898024Y-46733246D01* X51867224Y-46714845D01* X51858773Y-46709796D01* X51800511Y-46687930D01* X51796111Y-46686082D01* X51764416Y-46671302D01* X51742600Y-46661129D01* X51742588Y-46661125D01* X51698316Y-46649262D01* X51692576Y-46647421D01* X51646683Y-46630197D01* X51595638Y-46620933D01* X51588714Y-46619677D01* X51583740Y-46618561D01* X51529895Y-46604134D01* X51517893Y-46603083D01* X51480926Y-46599849D01* X51475264Y-46599089D01* X51440521Y-46592785D01* X51423790Y-46589749D01* X51423789Y-46589749D01* X51368175Y-46589749D01* X51362773Y-46589513D01* X51334152Y-46587009D01* X51310525Y-46584942D01* X51310520Y-46584942D01* X51257251Y-46589602D01* X51254012Y-46589748D01* X51199131Y-46594687D01* X51091141Y-46604134D01* X51090564Y-46604236D01* X51085412Y-46604921D01* X51084909Y-46604966D01* X51084892Y-46604969D01* X50980187Y-46633867D01* X50878441Y-46661130D01* X50871467Y-46663667D01* X50866791Y-46665161D01* X50866545Y-46665228D01* X50866534Y-46665233D01* X50771487Y-46711004D01* X50678875Y-46754190D01* X50674181Y-46756900D01* X50674110Y-46756778D01* X50663347Y-46763082D01* X50662431Y-46763523D01* X50662425Y-46763526D01* X50579642Y-46823672D01* X50503524Y-46876972D01* X50498481Y-46880503D01* X50497550Y-46881434D01* X50482787Y-46894042D01* X50479164Y-46896674D01* X50479154Y-46896683D01* X50410620Y-46968364D01* X50342770Y-47036215D01* X50342769Y-47036216D01* X50340029Y-47040129D01* X50328104Y-47054668D01* X50322612Y-47060412D01* X50322608Y-47060418D01* X50269706Y-47140562D01* X50216466Y-47216596D01* X50216464Y-47216601D01* X50212985Y-47224061D01* X50204099Y-47239951D01* X50197815Y-47249471D01* X50197814Y-47249473D01* X50161303Y-47334893D01* X50123405Y-47416166D01* X50123403Y-47416172D01* X50120375Y-47427471D01* X50114625Y-47444103D01* X50108782Y-47457774D01* X50108779Y-47457782D01* X50088811Y-47545270D01* X50066408Y-47628875D01* X50066407Y-47628881D01* X50064715Y-47648219D01* X50063396Y-47656615D01* X50058372Y-47678634D01* X50054486Y-47765143D01* X50047216Y-47848245D01* X50047216Y-47848247D01* X47723830Y-47848247D01* X47721850Y-47825617D01* X47721676Y-47817422D01* X47722838Y-47791558D01* X47711828Y-47710291D01* X47711504Y-47707374D01* X47705091Y-47634063D01* X47704638Y-47628878D01* X47697900Y-47603732D01* X47696348Y-47596002D01* X47694645Y-47583439D01* X47692429Y-47567074D01* X47668110Y-47492231D01* X47667194Y-47489138D01* X47652953Y-47435990D01* X47647646Y-47416182D01* X47647642Y-47416172D01* X47635245Y-47389585D01* X47632471Y-47382545D01* X47622426Y-47351628D01* X47622425Y-47351626D01* X47622422Y-47351619D01* X47586690Y-47285219D01* X47585105Y-47282060D01* X47554579Y-47216596D01* X47554575Y-47216590D01* X47535860Y-47189862D01* X47532046Y-47183673D01* X47515078Y-47152141D01* X47470117Y-47095762D01* X47467802Y-47092666D01* X47428273Y-47036212D01* X47402863Y-47010802D01* X47398225Y-47005613D01* X47373835Y-46975029D01* X47322014Y-46929754D01* X47318965Y-46926904D01* X47272562Y-46880500D01* X47240414Y-46857990D01* X47235179Y-46853890D01* X47203241Y-46825986D01* X47147009Y-46792388D01* X47143248Y-46789953D01* X47105503Y-46763524D01* X47092177Y-46754193D01* X47078463Y-46747798D01* X47053623Y-46736214D01* X47048024Y-46733246D01* X47017224Y-46714845D01* X47008773Y-46709796D01* X46950511Y-46687930D01* X46946111Y-46686082D01* X46914416Y-46671302D01* X46892600Y-46661129D01* X46892588Y-46661125D01* X46848316Y-46649262D01* X46842576Y-46647421D01* X46796683Y-46630197D01* X46745638Y-46620933D01* X46738714Y-46619677D01* X46733740Y-46618561D01* X46679895Y-46604134D01* X46667893Y-46603083D01* X46630926Y-46599849D01* X46625264Y-46599089D01* X46590521Y-46592785D01* X46573790Y-46589749D01* X46573789Y-46589749D01* X46518175Y-46589749D01* X46512773Y-46589513D01* X46484152Y-46587009D01* X46460525Y-46584942D01* X46460520Y-46584942D01* X46407251Y-46589602D01* X46404012Y-46589748D01* X46349131Y-46594687D01* X46241141Y-46604134D01* X46240564Y-46604236D01* X46235412Y-46604921D01* X46234909Y-46604966D01* X46234892Y-46604969D01* X46130187Y-46633867D01* X46028441Y-46661130D01* X46021467Y-46663667D01* X46016791Y-46665161D01* X46016545Y-46665228D01* X46016534Y-46665233D01* X45921487Y-46711004D01* X45828875Y-46754190D01* X45824181Y-46756900D01* X45824110Y-46756778D01* X45813347Y-46763082D01* X45812431Y-46763523D01* X45812425Y-46763526D01* X45729642Y-46823672D01* X45653524Y-46876972D01* X45648481Y-46880503D01* X45647550Y-46881434D01* X45632787Y-46894042D01* X45629164Y-46896674D01* X45629154Y-46896683D01* X45560620Y-46968364D01* X45492770Y-47036215D01* X45492769Y-47036216D01* X45490029Y-47040129D01* X45478104Y-47054668D01* X45472612Y-47060412D01* X45472608Y-47060418D01* X45419706Y-47140562D01* X45366466Y-47216596D01* X45366464Y-47216601D01* X45362985Y-47224061D01* X45354099Y-47239951D01* X45347815Y-47249471D01* X45347814Y-47249473D01* X45311303Y-47334893D01* X45273405Y-47416166D01* X45273403Y-47416172D01* X45270375Y-47427471D01* X45264625Y-47444103D01* X45258782Y-47457774D01* X45258779Y-47457782D01* X45238811Y-47545270D01* X45216408Y-47628875D01* X45216407Y-47628881D01* X45214715Y-47648219D01* X45213396Y-47656615D01* X45208372Y-47678634D01* X45204486Y-47765143D01* X45197216Y-47848245D01* X45197216Y-47848247D01* X33798903Y-47848247D01* X33798903Y-44818249D01* X44747196Y-44818249D01* X44752167Y-44878243D01* X44754494Y-44906332D01* X44758379Y-44997792D01* X44758380Y-44997801D01* X44763533Y-45021710D01* X44764713Y-45029659D01* X44766470Y-45050866D01* X44766472Y-45050878D01* X44788940Y-45139602D01* X44808893Y-45232184D01* X44816780Y-45251810D01* X44819357Y-45259715D01* X44823774Y-45277156D01* X44861808Y-45363865D01* X44898290Y-45454653D01* X44907546Y-45469685D01* X44907652Y-45469857D01* X44911640Y-45477469D01* X44917538Y-45490917D01* X44971047Y-45572819D01* X45023996Y-45658814D01* X45024003Y-45658823D01* X45030681Y-45666410D01* X45041409Y-45680516D01* X45045209Y-45686332D01* X45113602Y-45760626D01* X45176146Y-45831690D01* X45182405Y-45838801D01* X45182406Y-45838802D01* X45187593Y-45842990D01* X45200930Y-45855489D01* X45203306Y-45858071D01* X45254639Y-45898024D01* X45285471Y-45922021D01* X45332554Y-45960038D01* X45368944Y-45989422D01* X45368945Y-45989422D01* X45368947Y-45989424D01* X45371688Y-45990955D01* X45371763Y-45990997D01* X45387457Y-46001401D01* X45387502Y-46001436D01* X45387514Y-46001444D01* X45447713Y-46034021D01* X45481869Y-46052505D01* X45578263Y-46106354D01* X45578268Y-46106355D01* X45578272Y-46106358D01* X45580663Y-46107439D01* X45588000Y-46110697D01* X45588098Y-46110475D01* X45592785Y-46112530D01* X45592796Y-46112536D01* X45697263Y-46148400D01* X45804329Y-46186229D01* X45804890Y-46186325D01* X45809632Y-46187330D01* X45813566Y-46188327D01* X45813572Y-46188329D01* X45925618Y-46207026D01* X46040633Y-46226748D01* X46040642Y-46226749D01* X46277230Y-46226749D01* X46277235Y-46226749D01* X46310171Y-46221252D01* X46333998Y-46217277D01* X46338936Y-46216655D01* X46392464Y-46212100D01* X46399410Y-46211509D01* X46399411Y-46211508D01* X46399421Y-46211508D01* X46451820Y-46197863D01* X46457191Y-46196718D01* X46507474Y-46188329D01* X46565025Y-46168571D01* X46569498Y-46167222D01* X46631447Y-46151093D01* X46677782Y-46130147D01* X46683156Y-46128016D01* X46728250Y-46112536D01* X46784655Y-46082010D01* X46788577Y-46080065D01* X46849925Y-46052335D01* X46889318Y-46025708D01* X46894502Y-46022563D01* X46933531Y-46001444D01* X46933535Y-46001442D01* X46933536Y-46001441D01* X46933540Y-46001439D01* X46986751Y-45960021D01* X46990084Y-45957602D01* X47048570Y-45918074D01* X47080524Y-45887447D01* X47085312Y-45883307D01* X47117743Y-45858067D01* X47165642Y-45806033D01* X47168317Y-45803305D01* X47221667Y-45752174D01* X47246020Y-45719245D01* X47250250Y-45714126D01* X47275832Y-45686337D01* X47275837Y-45686332D01* X47316308Y-45624384D01* X47318358Y-45621438D01* X47319357Y-45620086D01* X47364238Y-45559406D01* X47381199Y-45525763D01* X47384637Y-45519798D01* X47403507Y-45490918D01* X47434565Y-45420110D01* X47435936Y-45417199D01* X47472180Y-45345316D01* X47482244Y-45312449D01* X47484744Y-45305715D01* X47497272Y-45277156D01* X47517058Y-45199019D01* X47517857Y-45196158D01* X47542387Y-45116064D01* X47546333Y-45085243D01* X47547721Y-45077933D01* X47554574Y-45050875D01* X47561613Y-44965921D01* X47572841Y-44878244D01* X47571662Y-44850498D01* X47571817Y-44842774D01* X47573850Y-44818249D01* X50197196Y-44818249D01* X50202167Y-44878243D01* X50204494Y-44906332D01* X50208379Y-44997792D01* X50208380Y-44997801D01* X50213533Y-45021710D01* X50214713Y-45029659D01* X50216470Y-45050866D01* X50216472Y-45050878D01* X50238940Y-45139602D01* X50258893Y-45232184D01* X50266780Y-45251810D01* X50269357Y-45259715D01* X50273774Y-45277156D01* X50311808Y-45363865D01* X50348290Y-45454653D01* X50357546Y-45469685D01* X50357652Y-45469857D01* X50361640Y-45477469D01* X50367538Y-45490917D01* X50421047Y-45572819D01* X50473996Y-45658814D01* X50474003Y-45658823D01* X50480681Y-45666410D01* X50491409Y-45680516D01* X50495209Y-45686332D01* X50563602Y-45760626D01* X50626146Y-45831690D01* X50632405Y-45838801D01* X50632406Y-45838802D01* X50637593Y-45842990D01* X50650930Y-45855489D01* X50653306Y-45858071D01* X50704639Y-45898024D01* X50735471Y-45922021D01* X50782554Y-45960038D01* X50818944Y-45989422D01* X50818945Y-45989422D01* X50818947Y-45989424D01* X50821688Y-45990955D01* X50821763Y-45990997D01* X50837457Y-46001401D01* X50837502Y-46001436D01* X50837514Y-46001444D01* X50897713Y-46034021D01* X50931869Y-46052505D01* X51028263Y-46106354D01* X51028268Y-46106355D01* X51028272Y-46106358D01* X51030663Y-46107439D01* X51038000Y-46110697D01* X51038098Y-46110475D01* X51042785Y-46112530D01* X51042796Y-46112536D01* X51147263Y-46148400D01* X51254329Y-46186229D01* X51254890Y-46186325D01* X51259632Y-46187330D01* X51263566Y-46188327D01* X51263572Y-46188329D01* X51375618Y-46207026D01* X51490633Y-46226748D01* X51490642Y-46226749D01* X51727230Y-46226749D01* X51727235Y-46226749D01* X51760171Y-46221252D01* X51783998Y-46217277D01* X51788936Y-46216655D01* X51842464Y-46212100D01* X51849410Y-46211509D01* X51849411Y-46211508D01* X51849421Y-46211508D01* X51901820Y-46197863D01* X51907191Y-46196718D01* X51957474Y-46188329D01* X52015025Y-46168571D01* X52019498Y-46167222D01* X52081447Y-46151093D01* X52127782Y-46130147D01* X52133156Y-46128016D01* X52178250Y-46112536D01* X52234655Y-46082010D01* X52238577Y-46080065D01* X52299925Y-46052335D01* X52339318Y-46025708D01* X52344502Y-46022563D01* X52383531Y-46001444D01* X52383535Y-46001442D01* X52383536Y-46001441D01* X52383540Y-46001439D01* X52436751Y-45960021D01* X52440084Y-45957602D01* X52498570Y-45918074D01* X52530524Y-45887447D01* X52535312Y-45883307D01* X52567743Y-45858067D01* X52615642Y-45806033D01* X52618317Y-45803305D01* X52671667Y-45752174D01* X52696020Y-45719245D01* X52700250Y-45714126D01* X52725832Y-45686337D01* X52725837Y-45686332D01* X52766308Y-45624384D01* X52768358Y-45621438D01* X52769357Y-45620086D01* X52814238Y-45559406D01* X52831199Y-45525763D01* X52834637Y-45519798D01* X52853507Y-45490918D01* X52884565Y-45420110D01* X52885936Y-45417199D01* X52922180Y-45345316D01* X52932244Y-45312449D01* X52934744Y-45305715D01* X52947272Y-45277156D01* X52967058Y-45199019D01* X52967857Y-45196158D01* X52992387Y-45116064D01* X52996333Y-45085243D01* X52997721Y-45077933D01* X53004574Y-45050875D01* X53011613Y-44965921D01* X53022841Y-44878244D01* X53021662Y-44850498D01* X53021817Y-44842774D01* X53023850Y-44818249D01* X53018878Y-44758253D01* X53016551Y-44730165D01* X53012667Y-44638709D01* X53012666Y-44638706D01* X53012666Y-44638698D01* X53007510Y-44614779D01* X53006331Y-44606835D01* X53004574Y-44585628D01* X53004574Y-44585623D01* X52982105Y-44496895D01* X52962153Y-44404317D01* X52954258Y-44384673D01* X52951690Y-44376793D01* X52947272Y-44359342D01* X52909237Y-44272632D01* X52872756Y-44181845D01* X52863390Y-44166635D01* X52859405Y-44159027D01* X52858625Y-44157249D01* X52853507Y-44145580D01* X52799998Y-44063678D01* X52747047Y-43977680D01* X52747041Y-43977673D01* X52747038Y-43977669D01* X52740362Y-43970083D01* X52729641Y-43955988D01* X52725838Y-43950168D01* X52725837Y-43950166D01* X52657443Y-43875871D01* X52588642Y-43797698D01* X52588641Y-43797697D01* X52588637Y-43797693D01* X52583452Y-43793507D01* X52570120Y-43781014D01* X52567743Y-43778431D01* X52485574Y-43714476D01* X52402099Y-43647074D01* X52402097Y-43647072D01* X52402091Y-43647068D01* X52399273Y-43645494D01* X52383593Y-43635100D01* X52383543Y-43635061D01* X52383541Y-43635060D01* X52383540Y-43635059D01* X52289176Y-43583992D01* X52236345Y-43554479D01* X52192782Y-43530143D01* X52190522Y-43529122D01* X52183042Y-43525800D01* X52182945Y-43526022D01* X52178248Y-43523961D01* X52073782Y-43488097D01* X51966720Y-43450270D01* X51966719Y-43450269D01* X51966717Y-43450269D01* X51966715Y-43450268D01* X51966706Y-43450266D01* X51966156Y-43450172D01* X51961436Y-43449171D01* X51957489Y-43448172D01* X51957476Y-43448169D01* X51957474Y-43448169D01* X51845427Y-43429471D01* X51730413Y-43409749D01* X51730404Y-43409749D01* X51727235Y-43409749D01* X51493811Y-43409749D01* X51493810Y-43409749D01* X51437052Y-43419219D01* X51432110Y-43419841D01* X51398353Y-43422714D01* X51371623Y-43424990D01* X51371620Y-43424990D01* X51319256Y-43438625D01* X51313836Y-43439781D01* X51263572Y-43448168D01* X51206035Y-43467920D01* X51201528Y-43469278D01* X51156418Y-43481025D01* X51139599Y-43485405D01* X51139596Y-43485406D01* X51139593Y-43485407D01* X51093281Y-43506341D01* X51087882Y-43508482D01* X51073286Y-43513493D01* X51042796Y-43523961D01* X50986402Y-43554479D01* X50982433Y-43556447D01* X50921120Y-43584163D01* X50921118Y-43584164D01* X50881732Y-43610784D01* X50876525Y-43613942D01* X50864961Y-43620200D01* X50837501Y-43635061D01* X50784303Y-43676467D01* X50780948Y-43678902D01* X50750872Y-43699230D01* X50722474Y-43718425D01* X50722471Y-43718428D01* X50690535Y-43749035D01* X50685716Y-43753201D01* X50653304Y-43778430D01* X50653303Y-43778431D01* X50605421Y-43830442D01* X50602707Y-43833211D01* X50549380Y-43884322D01* X50525026Y-43917248D01* X50520793Y-43922372D01* X50495207Y-43950167D01* X50495204Y-43950171D01* X50454745Y-44012099D01* X50452689Y-44015055D01* X50406810Y-44077088D01* X50406809Y-44077089D01* X50389856Y-44110712D01* X50386398Y-44116712D01* X50367538Y-44145581D01* X50336501Y-44216338D01* X50335085Y-44219345D01* X50298865Y-44291182D01* X50298864Y-44291183D01* X50288803Y-44324035D01* X50286298Y-44330786D01* X50273772Y-44359343D01* X50273772Y-44359344D01* X50253992Y-44437452D01* X50253172Y-44440386D01* X50228660Y-44520427D01* X50228658Y-44520439D01* X50224714Y-44551235D01* X50223318Y-44558584D01* X50216473Y-44585616D01* X50216471Y-44585628D01* X50209432Y-44670576D01* X50198205Y-44758252D01* X50198204Y-44758253D01* X50199382Y-44785980D01* X50199226Y-44793734D01* X50197196Y-44818244D01* X50197196Y-44818249D01* X47573850Y-44818249D01* X47568878Y-44758253D01* X47566551Y-44730165D01* X47562667Y-44638709D01* X47562666Y-44638706D01* X47562666Y-44638698D01* X47557510Y-44614779D01* X47556331Y-44606835D01* X47554574Y-44585628D01* X47554574Y-44585623D01* X47532105Y-44496895D01* X47512153Y-44404317D01* X47504258Y-44384673D01* X47501690Y-44376793D01* X47497272Y-44359342D01* X47459237Y-44272632D01* X47422756Y-44181845D01* X47413390Y-44166635D01* X47409405Y-44159027D01* X47408625Y-44157249D01* X47403507Y-44145580D01* X47349998Y-44063678D01* X47297047Y-43977680D01* X47297041Y-43977673D01* X47297038Y-43977669D01* X47290362Y-43970083D01* X47279641Y-43955988D01* X47275838Y-43950168D01* X47275837Y-43950166D01* X47207443Y-43875871D01* X47138642Y-43797698D01* X47138641Y-43797697D01* X47138637Y-43797693D01* X47133452Y-43793507D01* X47120120Y-43781014D01* X47117743Y-43778431D01* X47035574Y-43714476D01* X46952099Y-43647074D01* X46952097Y-43647072D01* X46952091Y-43647068D01* X46949273Y-43645494D01* X46933593Y-43635100D01* X46933543Y-43635061D01* X46933541Y-43635060D01* X46933540Y-43635059D01* X46839176Y-43583992D01* X46786345Y-43554479D01* X46742782Y-43530143D01* X46740522Y-43529122D01* X46733042Y-43525800D01* X46732945Y-43526022D01* X46728248Y-43523961D01* X46623782Y-43488097D01* X46516720Y-43450270D01* X46516719Y-43450269D01* X46516717Y-43450269D01* X46516715Y-43450268D01* X46516706Y-43450266D01* X46516156Y-43450172D01* X46511436Y-43449171D01* X46507489Y-43448172D01* X46507476Y-43448169D01* X46507474Y-43448169D01* X46395427Y-43429471D01* X46280413Y-43409749D01* X46280404Y-43409749D01* X46277235Y-43409749D01* X46043811Y-43409749D01* X46043810Y-43409749D01* X45987052Y-43419219D01* X45982110Y-43419841D01* X45948353Y-43422714D01* X45921623Y-43424990D01* X45921620Y-43424990D01* X45869256Y-43438625D01* X45863836Y-43439781D01* X45813572Y-43448168D01* X45756035Y-43467920D01* X45751528Y-43469278D01* X45706418Y-43481025D01* X45689599Y-43485405D01* X45689596Y-43485406D01* X45689593Y-43485407D01* X45643281Y-43506341D01* X45637882Y-43508482D01* X45623286Y-43513493D01* X45592796Y-43523961D01* X45536402Y-43554479D01* X45532433Y-43556447D01* X45471120Y-43584163D01* X45471118Y-43584164D01* X45431732Y-43610784D01* X45426525Y-43613942D01* X45414961Y-43620200D01* X45387501Y-43635061D01* X45334303Y-43676467D01* X45330948Y-43678902D01* X45300872Y-43699230D01* X45272474Y-43718425D01* X45272471Y-43718428D01* X45240535Y-43749035D01* X45235716Y-43753201D01* X45203304Y-43778430D01* X45203303Y-43778431D01* X45155421Y-43830442D01* X45152707Y-43833211D01* X45099380Y-43884322D01* X45075026Y-43917248D01* X45070793Y-43922372D01* X45045207Y-43950167D01* X45045204Y-43950171D01* X45004745Y-44012099D01* X45002689Y-44015055D01* X44956810Y-44077088D01* X44956809Y-44077089D01* X44939856Y-44110712D01* X44936398Y-44116712D01* X44917538Y-44145581D01* X44886501Y-44216338D01* X44885085Y-44219345D01* X44848865Y-44291182D01* X44848864Y-44291183D01* X44838803Y-44324035D01* X44836298Y-44330786D01* X44823772Y-44359343D01* X44823772Y-44359344D01* X44803992Y-44437452D01* X44803172Y-44440386D01* X44778660Y-44520427D01* X44778658Y-44520439D01* X44774714Y-44551235D01* X44773318Y-44558584D01* X44766473Y-44585616D01* X44766471Y-44585628D01* X44759432Y-44670576D01* X44748205Y-44758252D01* X44748204Y-44758253D01* X44749382Y-44785980D01* X44749226Y-44793734D01* X44747196Y-44818244D01* X44747196Y-44818249D01* X33798903Y-44818249D01* X33798903Y-41234624D01* X33818588Y-41167585D01* X33871392Y-41121830D01* X33922903Y-41110624D01* X64154248Y-41110624D01* X64221287Y-41130309D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,GND2*% G36* X100607112Y-41130309D02* G01* X100652867Y-41183113D01* X100664073Y-41234624D01* X100664073Y-115416875D01* X100644388Y-115483914D01* X100591584Y-115529669D01* X100540073Y-115540875D01* X68196000Y-115540875D01* X68128961Y-115521190D01* X68083206Y-115468386D01* X68072000Y-115416875D01* X68072000Y-111506000D01* X93568958Y-111506000D01* X93589110Y-111864846D01* X93589112Y-111864858D01* X93649314Y-112219185D01* X93649316Y-112219194D01* X93748812Y-112564552D01* X93886353Y-112896609D01* X93886355Y-112896613D01* X94060215Y-113211189D01* X94060218Y-113211194D01* X94268193Y-113504306D01* X94340843Y-113585601D01* X95659073Y-112267372D01* X95735890Y-112377078D01* X95902922Y-112544110D01* X96012626Y-112620925D01* X94694397Y-113939155D01* X94775693Y-114011806D01* X95068805Y-114219781D01* X95068810Y-114219784D01* X95383386Y-114393644D01* X95383390Y-114393646D01* X95715447Y-114531187D01* X96060805Y-114630683D01* X96060814Y-114630685D01* X96415141Y-114690887D01* X96415153Y-114690889D01* X96774000Y-114711041D01* X97132846Y-114690889D01* X97132858Y-114690887D01* X97487185Y-114630685D01* X97487194Y-114630683D01* X97832552Y-114531187D01* X98164609Y-114393646D01* X98164613Y-114393644D01* X98479189Y-114219784D01* X98479194Y-114219781D01* X98772306Y-114011806D01* X98853601Y-113939155D01* X97535373Y-112620925D01* X97645078Y-112544110D01* X97812110Y-112377078D01* X97888926Y-112267373D01* X99207155Y-113585601D01* X99279806Y-113504306D01* X99487781Y-113211194D01* X99487784Y-113211189D01* X99661644Y-112896613D01* X99661646Y-112896609D01* X99799187Y-112564552D01* X99898683Y-112219194D01* X99898685Y-112219185D01* X99958887Y-111864858D01* X99958889Y-111864846D01* X99979041Y-111506000D01* X99958889Y-111147153D01* X99958887Y-111147141D01* X99898685Y-110792814D01* X99898683Y-110792805D01* X99799187Y-110447447D01* X99661646Y-110115390D01* X99661644Y-110115386D01* X99487784Y-109800810D01* X99487781Y-109800805D01* X99279806Y-109507693D01* X99207155Y-109426397D01* X97888925Y-110744626D01* X97812110Y-110634922D01* X97645078Y-110467890D01* X97535372Y-110391073D01* X98853602Y-109072843D01* X98772306Y-109000193D01* X98479194Y-108792218D01* X98479189Y-108792215D01* X98164613Y-108618355D01* X98164609Y-108618353D01* X97832552Y-108480812D01* X97487194Y-108381316D01* X97487185Y-108381314D01* X97132858Y-108321112D01* X97132846Y-108321110D01* X96774000Y-108300958D01* X96415153Y-108321110D01* X96415141Y-108321112D01* X96060814Y-108381314D01* X96060805Y-108381316D01* X95715447Y-108480812D01* X95383390Y-108618353D01* X95383386Y-108618355D01* X95068810Y-108792215D01* X95068805Y-108792218D01* X94775693Y-109000194D01* X94775685Y-109000199D01* X94694397Y-109072842D01* X94694397Y-109072843D01* X96012627Y-110391073D01* X95902922Y-110467890D01* X95735890Y-110634922D01* X95659073Y-110744626D01* X94340843Y-109426396D01* X94340842Y-109426397D01* X94268199Y-109507685D01* X94268194Y-109507693D01* X94060218Y-109800805D01* X94060215Y-109800810D01* X93886355Y-110115386D01* X93886353Y-110115390D01* X93748812Y-110447447D01* X93649316Y-110792805D01* X93649314Y-110792814D01* X93589112Y-111147141D01* X93589110Y-111147153D01* X93568958Y-111506000D01* X68072000Y-111506000D01* X68072000Y-104284001D01* X76006891Y-104284001D01* X76027300Y-104569362D01* X76088109Y-104848895D01* X76188091Y-105116958D01* X76325191Y-105368038D01* X76325196Y-105368046D01* X76431882Y-105510561D01* X76431883Y-105510562D01* X77041438Y-104901006D01* X77090348Y-104979999D01* X77233931Y-105137501D01* X77392388Y-105257163D01* X76785436Y-105864115D01* X76927960Y-105970807D01* X76927961Y-105970808D01* X77179042Y-106107908D01* X77179041Y-106107908D01* X77447104Y-106207890D01* X77726637Y-106268699D01* X78011999Y-106289109D01* X78012001Y-106289109D01* X78297362Y-106268699D01* X78576895Y-106207890D01* X78844958Y-106107908D01* X79096047Y-105970803D01* X79238561Y-105864116D01* X79238562Y-105864115D01* X78631611Y-105257163D01* X78790069Y-105137501D01* X78933652Y-104979999D01* X78982560Y-104901007D01* X79592115Y-105510562D01* X79592116Y-105510561D01* X79698803Y-105368047D01* X79835908Y-105116958D01* X79935890Y-104848895D01* X79996699Y-104569362D01* X80017109Y-104284001D01* X89146891Y-104284001D01* X89167300Y-104569362D01* X89228109Y-104848895D01* X89328091Y-105116958D01* X89465191Y-105368038D01* X89465196Y-105368046D01* X89571882Y-105510561D01* X89571883Y-105510562D01* X90181438Y-104901006D01* X90230348Y-104979999D01* X90373931Y-105137501D01* X90532388Y-105257163D01* X89925436Y-105864115D01* X90067960Y-105970807D01* X90067961Y-105970808D01* X90319042Y-106107908D01* X90319041Y-106107908D01* X90587104Y-106207890D01* X90866637Y-106268699D01* X91151999Y-106289109D01* X91152001Y-106289109D01* X91437362Y-106268699D01* X91716895Y-106207890D01* X91984958Y-106107908D01* X92236047Y-105970803D01* X92378561Y-105864116D01* X92378562Y-105864115D01* X91771611Y-105257163D01* X91930069Y-105137501D01* X92073652Y-104979999D01* X92122560Y-104901007D01* X92732115Y-105510562D01* X92732116Y-105510561D01* X92838803Y-105368047D01* X92975908Y-105116958D01* X93065869Y-104875762D01* X94304381Y-104875762D01* X94322971Y-105100116D01* X94322973Y-105100128D01* X94378240Y-105318371D01* X94468677Y-105524549D01* X94591813Y-105713022D01* X94591821Y-105713033D01* X94730904Y-105864115D01* X94744297Y-105878663D01* X94921961Y-106016946D01* X94921962Y-106016946D01* X94921964Y-106016948D01* X95048672Y-106085518D01* X95119963Y-106124099D01* X95332902Y-106197201D01* X95554968Y-106234257D01* X95780106Y-106234257D01* X96002172Y-106197201D01* X96215111Y-106124099D01* X96413113Y-106016946D01* X96590777Y-105878663D01* X96743259Y-105713025D01* X96866397Y-105524548D01* X96956833Y-105318373D01* X97012101Y-105100125D01* X97030693Y-104875757D01* X97028467Y-104848895D01* X97012102Y-104651397D01* X97012100Y-104651385D01* X96956833Y-104433142D01* X96938156Y-104390563D01* X96866397Y-104226966D01* X96743259Y-104038489D01* X96743256Y-104038486D01* X96743252Y-104038480D01* X96590780Y-103872854D01* X96590775Y-103872849D01* X96413114Y-103734569D01* X96413114Y-103734568D01* X96369840Y-103711150D01* X96320250Y-103661930D01* X96305142Y-103593714D01* X96329312Y-103528158D01* X96357735Y-103500520D01* X96538616Y-103373865D01* X96705642Y-103206839D01* X96841137Y-103013335D01* X96940966Y-102799249D01* X96940969Y-102799243D01* X96998173Y-102585757D01* X96101223Y-102585757D01* X96127030Y-102545601D01* X96167537Y-102407646D01* X96167537Y-102263868D01* X96127030Y-102125913D01* X96101223Y-102085757D01* X96998173Y-102085757D01* X96998172Y-102085756D01* X96940969Y-101872270D01* X96940966Y-101872264D01* X96841137Y-101658179D01* X96841136Y-101658177D01* X96705650Y-101464683D01* X96705645Y-101464677D01* X96589809Y-101348841D01* X96556324Y-101287518D01* X96561308Y-101217826D01* X96603180Y-101161893D01* X96634149Y-101144981D01* X96763741Y-101096646D01* X96880798Y-101009018D01* X96968426Y-100891961D01* X97019526Y-100754958D01* X97023763Y-100715551D01* X97026036Y-100694411D01* X97026037Y-100694394D01* X97026037Y-98897119D01* X97026036Y-98897102D01* X97022694Y-98866027D01* X97019526Y-98836556D01* X96968426Y-98699553D01* X96880798Y-98582496D01* X96763741Y-98494868D01* X96626740Y-98443768D01* X96566191Y-98437257D01* X96566175Y-98437257D01* X94768899Y-98437257D01* X94768882Y-98437257D01* X94708334Y-98443768D01* X94708332Y-98443768D01* X94571332Y-98494868D01* X94454276Y-98582496D01* X94366648Y-98699552D01* X94315548Y-98836552D01* X94315548Y-98836554D01* X94309037Y-98897102D01* X94309037Y-100694411D01* X94315548Y-100754959D01* X94315548Y-100754961D01* X94366648Y-100891961D01* X94454276Y-101009018D01* X94571333Y-101096646D01* X94700919Y-101144979D01* X94756850Y-101186850D01* X94781267Y-101252314D01* X94766415Y-101320587D01* X94745265Y-101348841D01* X94629423Y-101464683D01* X94493937Y-101658177D01* X94493936Y-101658179D01* X94394107Y-101872264D01* X94394104Y-101872270D01* X94336901Y-102085756D01* X94336901Y-102085757D01* X95233851Y-102085757D01* X95208044Y-102125913D01* X95167537Y-102263868D01* X95167537Y-102407646D01* X95208044Y-102545601D01* X95233851Y-102585757D01* X94336901Y-102585757D01* X94394104Y-102799243D01* X94394107Y-102799249D01* X94493936Y-103013335D01* X94629431Y-103206839D01* X94796454Y-103373862D01* X94977339Y-103500520D01* X95020964Y-103555097D01* X95028156Y-103624596D01* X94996634Y-103686950D01* X94965234Y-103711149D01* X94921964Y-103734566D01* X94921959Y-103734569D01* X94744298Y-103872849D01* X94744293Y-103872854D01* X94591821Y-104038480D01* X94591813Y-104038491D01* X94468677Y-104226964D01* X94378240Y-104433142D01* X94322973Y-104651385D01* X94322971Y-104651397D01* X94304381Y-104875751D01* X94304381Y-104875762D01* X93065869Y-104875762D01* X93075890Y-104848895D01* X93136699Y-104569362D01* X93157109Y-104284001D01* X93157109Y-104283998D01* X93136699Y-103998637D01* X93075890Y-103719104D01* X92975908Y-103451041D01* X92838808Y-103199961D01* X92838807Y-103199960D01* X92732115Y-103057436D01* X92122560Y-103666991D01* X92073652Y-103588001D01* X91930069Y-103430499D01* X91771610Y-103310835D01* X92378562Y-102703883D01* X92378561Y-102703882D01* X92236046Y-102597196D01* X92236038Y-102597191D01* X91984957Y-102460091D01* X91984958Y-102460091D01* X91716895Y-102360109D01* X91437362Y-102299300D01* X91152001Y-102278891D01* X91151999Y-102278891D01* X90866637Y-102299300D01* X90587104Y-102360109D01* X90319041Y-102460091D01* X90067961Y-102597191D01* X90067953Y-102597196D01* X89925437Y-102703882D01* X89925436Y-102703883D01* X90532389Y-103310835D01* X90373931Y-103430499D01* X90230348Y-103588001D01* X90181439Y-103666992D01* X89571883Y-103057436D01* X89571882Y-103057437D01* X89465196Y-103199953D01* X89465191Y-103199961D01* X89328091Y-103451041D01* X89228109Y-103719104D01* X89167300Y-103998637D01* X89146891Y-104283998D01* X89146891Y-104284001D01* X80017109Y-104284001D01* X80017109Y-104283998D01* X79996699Y-103998637D01* X79935890Y-103719104D01* X79835908Y-103451041D01* X79698808Y-103199961D01* X79698807Y-103199960D01* X79592115Y-103057436D01* X78982560Y-103666991D01* X78933652Y-103588001D01* X78790069Y-103430499D01* X78631610Y-103310835D01* X79238562Y-102703883D01* X79238561Y-102703882D01* X79096046Y-102597196D01* X79096038Y-102597191D01* X78844957Y-102460091D01* X78844958Y-102460091D01* X78610530Y-102372654D01* X79773500Y-102372654D01* X79780011Y-102433202D01* X79780011Y-102433204D01* X79821934Y-102545601D01* X79831111Y-102570204D01* X79918739Y-102687261D01* X80035796Y-102774889D01* X80172799Y-102825989D01* X80200050Y-102828918D01* X80233345Y-102832499D01* X80233362Y-102832500D01* X81930638Y-102832500D01* X81930654Y-102832499D01* X81957692Y-102829591D01* X81991201Y-102825989D01* X82128204Y-102774889D01* X82245261Y-102687261D01* X82332889Y-102570204D01* X82346586Y-102533480D01* X82372717Y-102463424D01* X82414588Y-102407490D01* X82480053Y-102383074D01* X82548326Y-102397926D01* X82576579Y-102419077D01* X82737700Y-102580198D01* X82925251Y-102711523D01* X83050091Y-102769736D01* X83132750Y-102808281D01* X83132752Y-102808281D01* X83132757Y-102808284D01* X83353913Y-102867543D01* X83516832Y-102881796D01* X83581998Y-102887498D01* X83582000Y-102887498D01* X83582002Y-102887498D01* X83639021Y-102882509D01* X83810087Y-102867543D01* X84031243Y-102808284D01* X84238749Y-102711523D01* X84426300Y-102580198D01* X84494319Y-102512179D01* X84555642Y-102478694D01* X84625334Y-102483678D01* X84669681Y-102512179D01* X84737700Y-102580198D01* X84925251Y-102711523D01* X85050091Y-102769736D01* X85132750Y-102808281D01* X85132752Y-102808281D01* X85132757Y-102808284D01* X85353913Y-102867543D01* X85516832Y-102881796D01* X85581998Y-102887498D01* X85582000Y-102887498D01* X85582002Y-102887498D01* X85639021Y-102882509D01* X85810087Y-102867543D01* X86031243Y-102808284D01* X86238749Y-102711523D01* X86426300Y-102580198D01* X86588198Y-102418300D01* X86719523Y-102230749D01* X86724307Y-102220487D01* X86770476Y-102168051D01* X86837669Y-102148897D01* X86904551Y-102169111D01* X86949072Y-102220490D01* X86951866Y-102226483D01* X87002973Y-102299471D01* X87002974Y-102299472D01* X87619064Y-101683381D01* X87645481Y-101773351D01* X87719327Y-101888258D01* X87822555Y-101977705D01* X87946801Y-102034446D01* X87971548Y-102038004D01* X87356526Y-102653025D01* X87356526Y-102653026D01* X87429512Y-102704131D01* X87429516Y-102704133D01* X87635673Y-102800265D01* X87635682Y-102800269D01* X87855389Y-102859139D01* X87855400Y-102859141D01* X88081998Y-102878966D01* X88082002Y-102878966D01* X88308599Y-102859141D01* X88308610Y-102859139D01* X88528317Y-102800269D01* X88528331Y-102800264D01* X88734478Y-102704136D01* X88807472Y-102653025D01* X88192451Y-102038004D01* X88217199Y-102034446D01* X88341445Y-101977705D01* X88444673Y-101888258D01* X88518519Y-101773351D01* X88544935Y-101683382D01* X89161025Y-102299472D01* X89212136Y-102226478D01* X89308264Y-102020331D01* X89308269Y-102020317D01* X89367139Y-101800610D01* X89367141Y-101800599D01* X89386966Y-101574002D01* X89386966Y-101573997D01* X89367141Y-101347400D01* X89367139Y-101347389D01* X89308269Y-101127682D01* X89308265Y-101127673D01* X89212133Y-100921516D01* X89212131Y-100921512D01* X89161026Y-100848526D01* X89161025Y-100848526D01* X88544935Y-101464616D01* X88518519Y-101374649D01* X88444673Y-101259742D01* X88341445Y-101170295D01* X88217199Y-101113554D01* X88192451Y-101109995D01* X88807472Y-100494974D01* X88807471Y-100494973D01* X88734483Y-100443866D01* X88734481Y-100443865D01* X88528326Y-100347734D01* X88528317Y-100347730D01* X88308610Y-100288860D01* X88308599Y-100288858D01* X88082002Y-100269034D01* X88081998Y-100269034D01* X87855400Y-100288858D01* X87855389Y-100288860D01* X87635682Y-100347730D01* X87635673Y-100347734D01* X87429513Y-100443868D01* X87356527Y-100494972D01* X87356526Y-100494973D01* X87971549Y-101109995D01* X87946801Y-101113554D01* X87822555Y-101170295D01* X87719327Y-101259742D01* X87645481Y-101374649D01* X87619064Y-101464617D01* X87002973Y-100848526D01* X87002972Y-100848527D01* X86951867Y-100921513D01* X86949070Y-100927513D01* X86902897Y-100979951D01* X86835703Y-100999102D01* X86768822Y-100978885D01* X86724307Y-100927511D01* X86719523Y-100917251D01* X86588198Y-100729700D01* X86426300Y-100567802D01* X86238749Y-100436477D01* X86238745Y-100436475D01* X86031249Y-100339718D01* X86031238Y-100339714D01* X85810089Y-100280457D01* X85810081Y-100280456D01* X85582002Y-100260502D01* X85581998Y-100260502D01* X85353918Y-100280456D01* X85353910Y-100280457D01* X85132761Y-100339714D01* X85132750Y-100339718D01* X84925254Y-100436475D01* X84925252Y-100436476D01* X84890601Y-100460739D01* X84737700Y-100567802D01* X84737698Y-100567803D01* X84737695Y-100567806D01* X84669681Y-100635821D01* X84608358Y-100669306D01* X84538666Y-100664322D01* X84494319Y-100635821D01* X84426304Y-100567806D01* X84426300Y-100567802D01* X84238749Y-100436477D01* X84238745Y-100436475D01* X84031249Y-100339718D01* X84031238Y-100339714D01* X83810089Y-100280457D01* X83810081Y-100280456D01* X83582002Y-100260502D01* X83581998Y-100260502D01* X83353918Y-100280456D01* X83353910Y-100280457D01* X83132761Y-100339714D01* X83132750Y-100339718D01* X82925254Y-100436475D01* X82925252Y-100436476D01* X82737699Y-100567803D01* X82576579Y-100728923D01* X82515256Y-100762407D01* X82445564Y-100757423D01* X82389631Y-100715551D01* X82372717Y-100684576D01* X82351544Y-100627813D01* X82332889Y-100577796D01* X82245261Y-100460739D01* X82128204Y-100373111D01* X81991203Y-100322011D01* X81930654Y-100315500D01* X81930638Y-100315500D01* X80233362Y-100315500D01* X80233345Y-100315500D01* X80172797Y-100322011D01* X80172795Y-100322011D01* X80035795Y-100373111D01* X79918739Y-100460739D01* X79831111Y-100577795D01* X79780011Y-100714795D01* X79780011Y-100714797D01* X79773500Y-100775345D01* X79773500Y-102372654D01* X78610530Y-102372654D01* X78576895Y-102360109D01* X78297362Y-102299300D01* X78012001Y-102278891D01* X78011999Y-102278891D01* X77726637Y-102299300D01* X77447104Y-102360109D01* X77179041Y-102460091D01* X76927961Y-102597191D01* X76927953Y-102597196D01* X76785437Y-102703882D01* X76785436Y-102703883D01* X77392389Y-103310835D01* X77233931Y-103430499D01* X77090348Y-103588001D01* X77041439Y-103666992D01* X76431883Y-103057436D01* X76431882Y-103057437D01* X76325196Y-103199953D01* X76325191Y-103199961D01* X76188091Y-103451041D01* X76088109Y-103719104D01* X76027300Y-103998637D01* X76006891Y-104283998D01* X76006891Y-104284001D01* X68072000Y-104284001D01* X68072000Y-47863998D01* X81655693Y-47863998D01* X81657672Y-47886639D01* X81657846Y-47894829D01* X81656684Y-47920688D01* X81656685Y-47920690D01* X81667691Y-48001946D01* X81668016Y-48004864D01* X81670532Y-48033615D01* X81674885Y-48083371D01* X81681624Y-48108523D01* X81683174Y-48116243D01* X81687093Y-48145173D01* X81687096Y-48145183D01* X81711413Y-48220023D01* X81712334Y-48223134D01* X81731877Y-48296066D01* X81731881Y-48296078D01* X81744275Y-48322659D01* X81747051Y-48329705D01* X81757097Y-48360621D01* X81766105Y-48377360D01* X81792822Y-48427010D01* X81794416Y-48430187D01* X81824942Y-48495651D01* X81824943Y-48495653D01* X81824944Y-48495654D01* X81843668Y-48522396D01* X81847475Y-48528574D01* X81864443Y-48560105D01* X81864445Y-48560108D01* X81909397Y-48616475D01* X81911709Y-48619567D01* X81951251Y-48676038D01* X81951254Y-48676041D01* X81976659Y-48701446D01* X81981295Y-48706633D01* X82005686Y-48737218D01* X82057514Y-48782499D01* X82060557Y-48785344D01* X82106955Y-48831743D01* X82106956Y-48831744D01* X82106959Y-48831746D01* X82106962Y-48831749D01* X82138487Y-48853822D01* X82139109Y-48854258D01* X82144341Y-48858357D01* X82176282Y-48886263D01* X82232535Y-48919872D01* X82236258Y-48922283D01* X82272750Y-48947835D01* X82287338Y-48958051D01* X82287341Y-48958052D01* X82287346Y-48958056D01* X82325910Y-48976038D01* X82331493Y-48978997D01* X82370750Y-49002453D01* X82429010Y-49024317D01* X82433422Y-49026171D01* X82486924Y-49051120D01* X82531204Y-49062984D01* X82536939Y-49064824D01* X82566356Y-49075864D01* X82582839Y-49082051D01* X82640813Y-49092571D01* X82645778Y-49093685D01* X82699629Y-49108115D01* X82748602Y-49112399D01* X82754250Y-49113157D01* X82793352Y-49120253D01* X82805732Y-49122500D01* X82805733Y-49122500D01* X82861348Y-49122500D01* X82866749Y-49122735D01* X82895370Y-49125239D01* X82918998Y-49127307D01* X82918999Y-49127307D01* X82918999Y-49127306D01* X82919000Y-49127307D01* X82972310Y-49122643D01* X82975504Y-49122500D01* X82975522Y-49122500D01* X83023625Y-49118169D01* X83030391Y-49117561D01* X83138353Y-49108117D01* X83138357Y-49108116D01* X83138371Y-49108115D01* X83138383Y-49108111D01* X83138902Y-49108020D01* X83144136Y-49107324D01* X83144622Y-49107281D01* X83249335Y-49078381D01* X83351076Y-49051120D01* X83351089Y-49051113D01* X83358029Y-49048588D01* X83362720Y-49047089D01* X83362993Y-49047014D01* X83458019Y-49001251D01* X83550654Y-48958056D01* X83550663Y-48958049D01* X83555350Y-48955345D01* X83555421Y-48955468D01* X83566206Y-48949152D01* X83567093Y-48948725D01* X83649868Y-48888585D01* X83731038Y-48831749D01* X83731951Y-48830835D01* X83746752Y-48818193D01* X83750363Y-48815571D01* X83781990Y-48782492D01* X83818902Y-48743884D01* X83886746Y-48676041D01* X83886746Y-48676040D01* X83886749Y-48676038D01* X83889476Y-48672142D01* X83901428Y-48657568D01* X83906912Y-48651834D01* X83959809Y-48571697D01* X84013056Y-48495654D01* X84016538Y-48488185D01* X84025436Y-48472276D01* X84031709Y-48462774D01* X84068216Y-48377360D01* X84106120Y-48296076D01* X84109145Y-48284782D01* X84114896Y-48268147D01* X84120743Y-48254470D01* X84140711Y-48166978D01* X84163115Y-48083371D01* X84164807Y-48064024D01* X84166126Y-48055626D01* X84171151Y-48033615D01* X84175036Y-47947105D01* X84182307Y-47864000D01* X84182307Y-47863998D01* X86505693Y-47863998D01* X86507672Y-47886639D01* X86507846Y-47894829D01* X86506684Y-47920688D01* X86506685Y-47920690D01* X86517691Y-48001946D01* X86518016Y-48004864D01* X86520532Y-48033615D01* X86524885Y-48083371D01* X86531624Y-48108523D01* X86533174Y-48116243D01* X86537093Y-48145173D01* X86537096Y-48145183D01* X86561413Y-48220023D01* X86562334Y-48223134D01* X86581877Y-48296066D01* X86581881Y-48296078D01* X86594275Y-48322659D01* X86597051Y-48329705D01* X86607097Y-48360621D01* X86616105Y-48377360D01* X86642822Y-48427010D01* X86644416Y-48430187D01* X86674942Y-48495651D01* X86674943Y-48495653D01* X86674944Y-48495654D01* X86693668Y-48522396D01* X86697475Y-48528574D01* X86714443Y-48560105D01* X86714445Y-48560108D01* X86759397Y-48616475D01* X86761709Y-48619567D01* X86801251Y-48676038D01* X86801254Y-48676041D01* X86826659Y-48701446D01* X86831295Y-48706633D01* X86855686Y-48737218D01* X86907514Y-48782499D01* X86910557Y-48785344D01* X86956955Y-48831743D01* X86956956Y-48831744D01* X86956959Y-48831746D01* X86956962Y-48831749D01* X86988487Y-48853822D01* X86989109Y-48854258D01* X86994341Y-48858357D01* X87026282Y-48886263D01* X87082535Y-48919872D01* X87086258Y-48922283D01* X87122750Y-48947835D01* X87137338Y-48958051D01* X87137341Y-48958052D01* X87137346Y-48958056D01* X87175910Y-48976038D01* X87181493Y-48978997D01* X87220750Y-49002453D01* X87279010Y-49024317D01* X87283422Y-49026171D01* X87336924Y-49051120D01* X87381204Y-49062984D01* X87386939Y-49064824D01* X87416356Y-49075864D01* X87432839Y-49082051D01* X87490813Y-49092571D01* X87495778Y-49093685D01* X87549629Y-49108115D01* X87598602Y-49112399D01* X87604250Y-49113157D01* X87643352Y-49120253D01* X87655732Y-49122500D01* X87655733Y-49122500D01* X87711348Y-49122500D01* X87716749Y-49122735D01* X87745370Y-49125239D01* X87768998Y-49127307D01* X87768999Y-49127307D01* X87768999Y-49127306D01* X87769000Y-49127307D01* X87822310Y-49122643D01* X87825504Y-49122500D01* X87825522Y-49122500D01* X87873625Y-49118169D01* X87880391Y-49117561D01* X87988353Y-49108117D01* X87988357Y-49108116D01* X87988371Y-49108115D01* X87988383Y-49108111D01* X87988902Y-49108020D01* X87994136Y-49107324D01* X87994622Y-49107281D01* X88099335Y-49078381D01* X88201076Y-49051120D01* X88201089Y-49051113D01* X88208029Y-49048588D01* X88212720Y-49047089D01* X88212993Y-49047014D01* X88308019Y-49001251D01* X88400654Y-48958056D01* X88400663Y-48958049D01* X88405350Y-48955345D01* X88405421Y-48955468D01* X88416206Y-48949152D01* X88417093Y-48948725D01* X88499868Y-48888585D01* X88581038Y-48831749D01* X88581951Y-48830835D01* X88596752Y-48818193D01* X88600363Y-48815571D01* X88631990Y-48782492D01* X88668902Y-48743884D01* X88736746Y-48676041D01* X88736746Y-48676040D01* X88736749Y-48676038D01* X88739476Y-48672142D01* X88751428Y-48657568D01* X88756912Y-48651834D01* X88809809Y-48571697D01* X88863056Y-48495654D01* X88866538Y-48488185D01* X88875436Y-48472276D01* X88881709Y-48462774D01* X88918216Y-48377360D01* X88956120Y-48296076D01* X88959145Y-48284782D01* X88964896Y-48268147D01* X88970743Y-48254470D01* X88990711Y-48166978D01* X89013115Y-48083371D01* X89014807Y-48064024D01* X89016126Y-48055626D01* X89021151Y-48033615D01* X89025036Y-47947105D01* X89032307Y-47864000D01* X89030327Y-47841368D01* X89030153Y-47833173D01* X89031315Y-47807309D01* X89020305Y-47726042D01* X89019981Y-47723125D01* X89013115Y-47644631D01* X89013115Y-47644629D01* X89006377Y-47619483D01* X89004825Y-47611753D01* X89003122Y-47599190D01* X89000906Y-47582825D01* X88976587Y-47507982D01* X88975671Y-47504889D01* X88961430Y-47451741D01* X88956123Y-47431933D01* X88956119Y-47431923D01* X88943722Y-47405336D01* X88940948Y-47398296D01* X88930903Y-47367379D01* X88930902Y-47367377D01* X88930899Y-47367370D01* X88895167Y-47300970D01* X88893582Y-47297811D01* X88863056Y-47232347D01* X88863052Y-47232341D01* X88844337Y-47205613D01* X88840523Y-47199424D01* X88823555Y-47167892D01* X88778594Y-47111513D01* X88776279Y-47108417D01* X88736750Y-47051963D01* X88711340Y-47026553D01* X88706702Y-47021364D01* X88682312Y-46990780D01* X88630491Y-46945505D01* X88627442Y-46942655D01* X88581039Y-46896251D01* X88548891Y-46873741D01* X88543656Y-46869641D01* X88511718Y-46841737D01* X88455486Y-46808139D01* X88451725Y-46805704D01* X88413980Y-46779275D01* X88400654Y-46769944D01* X88386940Y-46763549D01* X88362100Y-46751965D01* X88356501Y-46748997D01* X88325701Y-46730596D01* X88317250Y-46725547D01* X88258988Y-46703681D01* X88254588Y-46701833D01* X88222893Y-46687053D01* X88201077Y-46676880D01* X88201065Y-46676876D01* X88156793Y-46665013D01* X88151053Y-46663172D01* X88105160Y-46645948D01* X88054115Y-46636684D01* X88047191Y-46635428D01* X88042217Y-46634312D01* X87988372Y-46619885D01* X87976370Y-46618834D01* X87939403Y-46615600D01* X87933741Y-46614840D01* X87898998Y-46608536D01* X87882267Y-46605500D01* X87882266Y-46605500D01* X87826652Y-46605500D01* X87821250Y-46605264D01* X87792629Y-46602760D01* X87769002Y-46600693D01* X87768997Y-46600693D01* X87715728Y-46605353D01* X87712489Y-46605499D01* X87657608Y-46610438D01* X87549618Y-46619885D01* X87549041Y-46619987D01* X87543889Y-46620672D01* X87543386Y-46620717D01* X87543369Y-46620720D01* X87438664Y-46649618D01* X87336918Y-46676881D01* X87329944Y-46679418D01* X87325268Y-46680912D01* X87325022Y-46680979D01* X87325011Y-46680984D01* X87229964Y-46726755D01* X87137352Y-46769941D01* X87132658Y-46772651D01* X87132587Y-46772529D01* X87121824Y-46778833D01* X87120908Y-46779274D01* X87120902Y-46779277D01* X87038119Y-46839423D01* X86956958Y-46896254D01* X86956027Y-46897185D01* X86941264Y-46909793D01* X86937641Y-46912425D01* X86937631Y-46912434D01* X86869097Y-46984115D01* X86801247Y-47051966D01* X86801246Y-47051967D01* X86798506Y-47055880D01* X86786581Y-47070419D01* X86781089Y-47076163D01* X86781085Y-47076169D01* X86728183Y-47156313D01* X86674943Y-47232347D01* X86674941Y-47232352D01* X86671462Y-47239812D01* X86662576Y-47255702D01* X86656292Y-47265222D01* X86656291Y-47265224D01* X86619780Y-47350644D01* X86581882Y-47431917D01* X86581880Y-47431923D01* X86578852Y-47443222D01* X86573102Y-47459854D01* X86567259Y-47473525D01* X86567256Y-47473533D01* X86547288Y-47561021D01* X86524885Y-47644626D01* X86524884Y-47644632D01* X86523192Y-47663970D01* X86521873Y-47672366D01* X86516849Y-47694385D01* X86512963Y-47780894D01* X86505693Y-47863996D01* X86505693Y-47863998D01* X84182307Y-47863998D01* X84180327Y-47841368D01* X84180153Y-47833173D01* X84181315Y-47807309D01* X84170305Y-47726042D01* X84169981Y-47723125D01* X84163115Y-47644631D01* X84163115Y-47644629D01* X84156377Y-47619483D01* X84154825Y-47611753D01* X84153122Y-47599190D01* X84150906Y-47582825D01* X84126587Y-47507982D01* X84125671Y-47504889D01* X84111430Y-47451741D01* X84106123Y-47431933D01* X84106119Y-47431923D01* X84093722Y-47405336D01* X84090948Y-47398296D01* X84080903Y-47367379D01* X84080902Y-47367377D01* X84080899Y-47367370D01* X84045167Y-47300970D01* X84043582Y-47297811D01* X84013056Y-47232347D01* X84013052Y-47232341D01* X83994337Y-47205613D01* X83990523Y-47199424D01* X83973555Y-47167892D01* X83928594Y-47111513D01* X83926279Y-47108417D01* X83886750Y-47051963D01* X83861340Y-47026553D01* X83856702Y-47021364D01* X83832312Y-46990780D01* X83780491Y-46945505D01* X83777442Y-46942655D01* X83731039Y-46896251D01* X83698891Y-46873741D01* X83693656Y-46869641D01* X83661718Y-46841737D01* X83605486Y-46808139D01* X83601725Y-46805704D01* X83563980Y-46779275D01* X83550654Y-46769944D01* X83536940Y-46763549D01* X83512100Y-46751965D01* X83506501Y-46748997D01* X83475701Y-46730596D01* X83467250Y-46725547D01* X83408988Y-46703681D01* X83404588Y-46701833D01* X83372893Y-46687053D01* X83351077Y-46676880D01* X83351065Y-46676876D01* X83306793Y-46665013D01* X83301053Y-46663172D01* X83255160Y-46645948D01* X83204115Y-46636684D01* X83197191Y-46635428D01* X83192217Y-46634312D01* X83138372Y-46619885D01* X83126370Y-46618834D01* X83089403Y-46615600D01* X83083741Y-46614840D01* X83048998Y-46608536D01* X83032267Y-46605500D01* X83032266Y-46605500D01* X82976652Y-46605500D01* X82971250Y-46605264D01* X82942629Y-46602760D01* X82919002Y-46600693D01* X82918997Y-46600693D01* X82865728Y-46605353D01* X82862489Y-46605499D01* X82807608Y-46610438D01* X82699618Y-46619885D01* X82699041Y-46619987D01* X82693889Y-46620672D01* X82693386Y-46620717D01* X82693369Y-46620720D01* X82588664Y-46649618D01* X82486918Y-46676881D01* X82479944Y-46679418D01* X82475268Y-46680912D01* X82475022Y-46680979D01* X82475011Y-46680984D01* X82379964Y-46726755D01* X82287352Y-46769941D01* X82282658Y-46772651D01* X82282587Y-46772529D01* X82271824Y-46778833D01* X82270908Y-46779274D01* X82270902Y-46779277D01* X82188119Y-46839423D01* X82106958Y-46896254D01* X82106027Y-46897185D01* X82091264Y-46909793D01* X82087641Y-46912425D01* X82087631Y-46912434D01* X82019097Y-46984115D01* X81951247Y-47051966D01* X81951246Y-47051967D01* X81948506Y-47055880D01* X81936581Y-47070419D01* X81931089Y-47076163D01* X81931085Y-47076169D01* X81878183Y-47156313D01* X81824943Y-47232347D01* X81824941Y-47232352D01* X81821462Y-47239812D01* X81812576Y-47255702D01* X81806292Y-47265222D01* X81806291Y-47265224D01* X81769780Y-47350644D01* X81731882Y-47431917D01* X81731880Y-47431923D01* X81728852Y-47443222D01* X81723102Y-47459854D01* X81717259Y-47473525D01* X81717256Y-47473533D01* X81697288Y-47561021D01* X81674885Y-47644626D01* X81674884Y-47644632D01* X81673192Y-47663970D01* X81671873Y-47672366D01* X81666849Y-47694385D01* X81662963Y-47780894D01* X81655693Y-47863996D01* X81655693Y-47863998D01* X68072000Y-47863998D01* X68072000Y-44834000D01* X81205673Y-44834000D01* X81210644Y-44893994D01* X81212971Y-44922083D01* X81216856Y-45013543D01* X81216857Y-45013552D01* X81222010Y-45037461D01* X81223190Y-45045410D01* X81224947Y-45066617D01* X81224949Y-45066629D01* X81247417Y-45155353D01* X81267370Y-45247935D01* X81275257Y-45267561D01* X81277834Y-45275466D01* X81282251Y-45292907D01* X81320285Y-45379616D01* X81356767Y-45470404D01* X81366129Y-45485608D01* X81370117Y-45493220D01* X81376015Y-45506668D01* X81429524Y-45588570D01* X81482473Y-45674565D01* X81482480Y-45674574D01* X81489158Y-45682161D01* X81499886Y-45696267D01* X81503682Y-45702077D01* X81503686Y-45702083D01* X81572079Y-45776377D01* X81640882Y-45854552D01* X81640883Y-45854553D01* X81646070Y-45858741D01* X81659407Y-45871240D01* X81661783Y-45873822D01* X81713116Y-45913775D01* X81743948Y-45937772D01* X81791031Y-45975789D01* X81827421Y-46005173D01* X81827422Y-46005173D01* X81827424Y-46005175D01* X81830165Y-46006706D01* X81830240Y-46006748D01* X81845934Y-46017152D01* X81845979Y-46017187D01* X81845991Y-46017195D01* X81940032Y-46068086D01* X81940346Y-46068256D01* X82036740Y-46122105D01* X82036745Y-46122106D01* X82036749Y-46122109D01* X82039140Y-46123190D01* X82046477Y-46126448D01* X82046575Y-46126226D01* X82051262Y-46128281D01* X82051273Y-46128287D01* X82155740Y-46164151D01* X82262806Y-46201980D01* X82263367Y-46202076D01* X82268109Y-46203081D01* X82272043Y-46204078D01* X82272049Y-46204080D01* X82384095Y-46222777D01* X82499110Y-46242499D01* X82499119Y-46242500D01* X82735707Y-46242500D01* X82735712Y-46242500D01* X82768648Y-46237003D01* X82792475Y-46233028D01* X82797413Y-46232406D01* X82850941Y-46227851D01* X82857887Y-46227260D01* X82857888Y-46227259D01* X82857898Y-46227259D01* X82910297Y-46213614D01* X82915668Y-46212469D01* X82965951Y-46204080D01* X83023502Y-46184322D01* X83027975Y-46182973D01* X83089924Y-46166844D01* X83136259Y-46145898D01* X83141633Y-46143767D01* X83186727Y-46128287D01* X83243132Y-46097761D01* X83247054Y-46095816D01* X83308402Y-46068086D01* X83347795Y-46041459D01* X83352979Y-46038314D01* X83392008Y-46017195D01* X83392012Y-46017193D01* X83392013Y-46017192D01* X83392017Y-46017190D01* X83445228Y-45975772D01* X83448561Y-45973353D01* X83507047Y-45933825D01* X83539001Y-45903198D01* X83543789Y-45899058D01* X83576220Y-45873818D01* X83624119Y-45821784D01* X83626794Y-45819056D01* X83680144Y-45767925D01* X83704497Y-45734996D01* X83708727Y-45729877D01* X83734309Y-45702088D01* X83734314Y-45702083D01* X83774785Y-45640135D01* X83776835Y-45637189D01* X83777834Y-45635837D01* X83822715Y-45575157D01* X83839676Y-45541514D01* X83843114Y-45535549D01* X83861984Y-45506669D01* X83893042Y-45435861D01* X83894413Y-45432950D01* X83930657Y-45361067D01* X83940721Y-45328200D01* X83943221Y-45321466D01* X83955749Y-45292907D01* X83975535Y-45214770D01* X83976334Y-45211909D01* X84000864Y-45131815D01* X84004810Y-45100994D01* X84006198Y-45093684D01* X84013051Y-45066626D01* X84020090Y-44981672D01* X84031318Y-44893995D01* X84030139Y-44866249D01* X84030294Y-44858525D01* X84032327Y-44834000D01* X86655673Y-44834000D01* X86660644Y-44893994D01* X86662971Y-44922083D01* X86666856Y-45013543D01* X86666857Y-45013552D01* X86672010Y-45037461D01* X86673190Y-45045410D01* X86674947Y-45066617D01* X86674949Y-45066629D01* X86697417Y-45155353D01* X86717370Y-45247935D01* X86725257Y-45267561D01* X86727834Y-45275466D01* X86732251Y-45292907D01* X86770285Y-45379616D01* X86806767Y-45470404D01* X86816129Y-45485608D01* X86820117Y-45493220D01* X86826015Y-45506668D01* X86879524Y-45588570D01* X86932473Y-45674565D01* X86932480Y-45674574D01* X86939158Y-45682161D01* X86949886Y-45696267D01* X86953682Y-45702077D01* X86953686Y-45702083D01* X87022079Y-45776377D01* X87090882Y-45854552D01* X87090883Y-45854553D01* X87096070Y-45858741D01* X87109407Y-45871240D01* X87111783Y-45873822D01* X87163116Y-45913775D01* X87193948Y-45937772D01* X87241031Y-45975789D01* X87277421Y-46005173D01* X87277422Y-46005173D01* X87277424Y-46005175D01* X87280165Y-46006706D01* X87280240Y-46006748D01* X87295934Y-46017152D01* X87295979Y-46017187D01* X87295991Y-46017195D01* X87390032Y-46068086D01* X87390346Y-46068256D01* X87486740Y-46122105D01* X87486745Y-46122106D01* X87486749Y-46122109D01* X87489140Y-46123190D01* X87496477Y-46126448D01* X87496575Y-46126226D01* X87501262Y-46128281D01* X87501273Y-46128287D01* X87605740Y-46164151D01* X87712806Y-46201980D01* X87713367Y-46202076D01* X87718109Y-46203081D01* X87722043Y-46204078D01* X87722049Y-46204080D01* X87834095Y-46222777D01* X87949110Y-46242499D01* X87949119Y-46242500D01* X88185707Y-46242500D01* X88185712Y-46242500D01* X88218648Y-46237003D01* X88242475Y-46233028D01* X88247413Y-46232406D01* X88300941Y-46227851D01* X88307887Y-46227260D01* X88307888Y-46227259D01* X88307898Y-46227259D01* X88360297Y-46213614D01* X88365668Y-46212469D01* X88415951Y-46204080D01* X88473502Y-46184322D01* X88477975Y-46182973D01* X88539924Y-46166844D01* X88586259Y-46145898D01* X88591633Y-46143767D01* X88636727Y-46128287D01* X88693132Y-46097761D01* X88697054Y-46095816D01* X88758402Y-46068086D01* X88797795Y-46041459D01* X88802979Y-46038314D01* X88842008Y-46017195D01* X88842012Y-46017193D01* X88842013Y-46017192D01* X88842017Y-46017190D01* X88895228Y-45975772D01* X88898561Y-45973353D01* X88957047Y-45933825D01* X88989001Y-45903198D01* X88993789Y-45899058D01* X89026220Y-45873818D01* X89074119Y-45821784D01* X89076794Y-45819056D01* X89130144Y-45767925D01* X89154497Y-45734996D01* X89158727Y-45729877D01* X89184309Y-45702088D01* X89184314Y-45702083D01* X89224785Y-45640135D01* X89226835Y-45637189D01* X89227834Y-45635837D01* X89272715Y-45575157D01* X89289676Y-45541514D01* X89293114Y-45535549D01* X89311984Y-45506669D01* X89343042Y-45435861D01* X89344413Y-45432950D01* X89380657Y-45361067D01* X89390721Y-45328200D01* X89393221Y-45321466D01* X89405749Y-45292907D01* X89425535Y-45214770D01* X89426334Y-45211909D01* X89450864Y-45131815D01* X89454810Y-45100994D01* X89456198Y-45093684D01* X89463051Y-45066626D01* X89470090Y-44981672D01* X89481318Y-44893995D01* X89480139Y-44866249D01* X89480294Y-44858525D01* X89482327Y-44834000D01* X89477355Y-44774004D01* X89475028Y-44745916D01* X89471144Y-44654460D01* X89471143Y-44654457D01* X89471143Y-44654449D01* X89465987Y-44630530D01* X89464808Y-44622586D01* X89463051Y-44601379D01* X89463051Y-44601374D01* X89440582Y-44512646D01* X89420630Y-44420068D01* X89412735Y-44400424D01* X89410167Y-44392544D01* X89405749Y-44375093D01* X89367714Y-44288383D01* X89331233Y-44197596D01* X89321867Y-44182386D01* X89317882Y-44174778D01* X89317102Y-44173000D01* X89311984Y-44161331D01* X89258475Y-44079429D01* X89205524Y-43993431D01* X89205518Y-43993424D01* X89205515Y-43993420D01* X89198839Y-43985834D01* X89188118Y-43971739D01* X89184315Y-43965919D01* X89184314Y-43965917D01* X89115920Y-43891622D01* X89047119Y-43813449D01* X89047118Y-43813448D01* X89047114Y-43813444D01* X89041929Y-43809258D01* X89028597Y-43796765D01* X89026220Y-43794182D01* X88944051Y-43730227D01* X88860576Y-43662825D01* X88860574Y-43662823D01* X88860568Y-43662819D01* X88857750Y-43661245D01* X88842070Y-43650851D01* X88842020Y-43650812D01* X88842018Y-43650811D01* X88842017Y-43650810D01* X88747653Y-43599743D01* X88694822Y-43570230D01* X88651259Y-43545894D01* X88648999Y-43544873D01* X88641519Y-43541551D01* X88641422Y-43541773D01* X88636725Y-43539712D01* X88532259Y-43503848D01* X88425197Y-43466021D01* X88425196Y-43466020D01* X88425194Y-43466020D01* X88425192Y-43466019D01* X88425183Y-43466017D01* X88424633Y-43465923D01* X88419913Y-43464922D01* X88415966Y-43463923D01* X88415953Y-43463920D01* X88415951Y-43463920D01* X88303904Y-43445222D01* X88188890Y-43425500D01* X88188881Y-43425500D01* X88185712Y-43425500D01* X87952288Y-43425500D01* X87952287Y-43425500D01* X87895529Y-43434970D01* X87890587Y-43435592D01* X87856830Y-43438465D01* X87830100Y-43440741D01* X87830097Y-43440741D01* X87777733Y-43454376D01* X87772313Y-43455532D01* X87722049Y-43463919D01* X87664512Y-43483671D01* X87660005Y-43485029D01* X87614895Y-43496776D01* X87598076Y-43501156D01* X87598073Y-43501157D01* X87598070Y-43501158D01* X87551758Y-43522092D01* X87546359Y-43524233D01* X87531763Y-43529244D01* X87501273Y-43539712D01* X87444879Y-43570230D01* X87440910Y-43572198D01* X87379597Y-43599914D01* X87379595Y-43599915D01* X87340209Y-43626535D01* X87335002Y-43629693D01* X87323438Y-43635951D01* X87295978Y-43650812D01* X87242780Y-43692218D01* X87239425Y-43694653D01* X87209349Y-43714981D01* X87180951Y-43734176D01* X87180948Y-43734179D01* X87149012Y-43764786D01* X87144193Y-43768952D01* X87111781Y-43794181D01* X87111780Y-43794182D01* X87063898Y-43846193D01* X87061184Y-43848962D01* X87007857Y-43900073D01* X86983503Y-43932999D01* X86979270Y-43938123D01* X86953684Y-43965918D01* X86953681Y-43965922D01* X86913222Y-44027850D01* X86911166Y-44030806D01* X86865287Y-44092839D01* X86865286Y-44092840D01* X86848333Y-44126463D01* X86844875Y-44132463D01* X86826015Y-44161332D01* X86794978Y-44232089D01* X86793562Y-44235096D01* X86757342Y-44306933D01* X86757341Y-44306934D01* X86747280Y-44339786D01* X86744775Y-44346537D01* X86732249Y-44375094D01* X86732249Y-44375095D01* X86712469Y-44453203D01* X86711649Y-44456137D01* X86687137Y-44536178D01* X86687135Y-44536190D01* X86683191Y-44566986D01* X86681795Y-44574335D01* X86674950Y-44601367D01* X86674948Y-44601379D01* X86667909Y-44686327D01* X86656682Y-44774003D01* X86656681Y-44774004D01* X86657859Y-44801731D01* X86657703Y-44809485D01* X86655673Y-44833995D01* X86655673Y-44834000D01* X84032327Y-44834000D01* X84027355Y-44774004D01* X84025028Y-44745916D01* X84021144Y-44654460D01* X84021143Y-44654457D01* X84021143Y-44654449D01* X84015987Y-44630530D01* X84014808Y-44622586D01* X84013051Y-44601379D01* X84013051Y-44601374D01* X83990582Y-44512646D01* X83970630Y-44420068D01* X83962735Y-44400424D01* X83960167Y-44392544D01* X83955749Y-44375093D01* X83917714Y-44288383D01* X83881233Y-44197596D01* X83871867Y-44182386D01* X83867882Y-44174778D01* X83867102Y-44173000D01* X83861984Y-44161331D01* X83808475Y-44079429D01* X83755524Y-43993431D01* X83755518Y-43993424D01* X83755515Y-43993420D01* X83748839Y-43985834D01* X83738118Y-43971739D01* X83734315Y-43965919D01* X83734314Y-43965917D01* X83665920Y-43891622D01* X83597119Y-43813449D01* X83597118Y-43813448D01* X83597114Y-43813444D01* X83591929Y-43809258D01* X83578597Y-43796765D01* X83576220Y-43794182D01* X83494051Y-43730227D01* X83410576Y-43662825D01* X83410574Y-43662823D01* X83410568Y-43662819D01* X83407750Y-43661245D01* X83392070Y-43650851D01* X83392020Y-43650812D01* X83392018Y-43650811D01* X83392017Y-43650810D01* X83297653Y-43599743D01* X83244822Y-43570230D01* X83201259Y-43545894D01* X83198999Y-43544873D01* X83191519Y-43541551D01* X83191422Y-43541773D01* X83186725Y-43539712D01* X83082259Y-43503848D01* X82975197Y-43466021D01* X82975196Y-43466020D01* X82975194Y-43466020D01* X82975192Y-43466019D01* X82975183Y-43466017D01* X82974633Y-43465923D01* X82969913Y-43464922D01* X82965966Y-43463923D01* X82965953Y-43463920D01* X82965951Y-43463920D01* X82853904Y-43445222D01* X82738890Y-43425500D01* X82738881Y-43425500D01* X82735712Y-43425500D01* X82502288Y-43425500D01* X82502287Y-43425500D01* X82445529Y-43434970D01* X82440587Y-43435592D01* X82406830Y-43438465D01* X82380100Y-43440741D01* X82380097Y-43440741D01* X82327733Y-43454376D01* X82322313Y-43455532D01* X82272049Y-43463919D01* X82214512Y-43483671D01* X82210005Y-43485029D01* X82164895Y-43496776D01* X82148076Y-43501156D01* X82148073Y-43501157D01* X82148070Y-43501158D01* X82101758Y-43522092D01* X82096359Y-43524233D01* X82081763Y-43529244D01* X82051273Y-43539712D01* X81994879Y-43570230D01* X81990910Y-43572198D01* X81929597Y-43599914D01* X81929595Y-43599915D01* X81890209Y-43626535D01* X81885002Y-43629693D01* X81873438Y-43635951D01* X81845978Y-43650812D01* X81792780Y-43692218D01* X81789425Y-43694653D01* X81759349Y-43714981D01* X81730951Y-43734176D01* X81730948Y-43734179D01* X81699012Y-43764786D01* X81694193Y-43768952D01* X81661781Y-43794181D01* X81661780Y-43794182D01* X81613898Y-43846193D01* X81611184Y-43848962D01* X81557857Y-43900073D01* X81533503Y-43932999D01* X81529270Y-43938123D01* X81503684Y-43965918D01* X81503681Y-43965922D01* X81463222Y-44027850D01* X81461166Y-44030806D01* X81415287Y-44092839D01* X81415286Y-44092840D01* X81398333Y-44126463D01* X81394875Y-44132463D01* X81376015Y-44161332D01* X81344978Y-44232089D01* X81343562Y-44235096D01* X81307342Y-44306933D01* X81307341Y-44306934D01* X81297280Y-44339786D01* X81294775Y-44346537D01* X81282249Y-44375094D01* X81282249Y-44375095D01* X81262469Y-44453203D01* X81261649Y-44456137D01* X81237137Y-44536178D01* X81237135Y-44536190D01* X81233191Y-44566986D01* X81231795Y-44574335D01* X81224950Y-44601367D01* X81224948Y-44601379D01* X81217909Y-44686327D01* X81206682Y-44774003D01* X81206681Y-44774004D01* X81207859Y-44801731D01* X81207703Y-44809485D01* X81205673Y-44833995D01* X81205673Y-44834000D01* X68072000Y-44834000D01* X68072000Y-41234624D01* X68091685Y-41167585D01* X68144489Y-41121830D01* X68196000Y-41110624D01* X100540073Y-41110624D01* X100607112Y-41130309D01* G37* %TD.AperFunction*% %TD*% M02* ================================================ FILE: pcb/v1.0/Gerber/DeskHop-B_Mask.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-01-21T01:35:17+01:00*% %TF.ProjectId,DeskHop,4465736b-486f-4702-9e6b-696361645f70,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Soldermask,Bot*% %TF.FilePolarity,Negative*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-01-21 01:35:17* %MOMM*% %LPD*% G01* G04 APERTURE LIST* %ADD10O,1.800000X1.800000*% %ADD11O,1.500000X1.500000*% %ADD12C,3.100000*% %ADD13R,1.600000X1.500000*% %ADD14C,1.600000*% %ADD15C,3.000000*% %ADD16R,1.700000X1.700000*% %ADD17O,1.700000X1.700000*% %ADD18C,5.400000*% G04 APERTURE END LIST* D10* %TO.C,U1*% X82619000Y-44834000D03* D11* X82919000Y-47864000D03* X87769000Y-47864000D03* D10* X88069000Y-44834000D03* %TD*% %TO.C,U2*% X46160523Y-44818249D03* D11* X46460523Y-47848249D03* X51310523Y-47848249D03* D10* X51610523Y-44818249D03* %TD*% D12* %TO.C,H3*% X67310000Y-45212000D03* %TD*% D13* %TO.C,J4*% X45776000Y-101574000D03* D14* X48276000Y-101574000D03* X50276000Y-101574000D03* X52776000Y-101574000D03* D15* X42706000Y-104284000D03* X55846000Y-104284000D03* %TD*% D16* %TO.C,J3*% X95667537Y-99795757D03* D17* X95667537Y-102335757D03* X95667537Y-104875757D03* %TD*% D12* %TO.C,H2*% X96774000Y-111506000D03* D18* X96774000Y-111506000D03* %TD*% D13* %TO.C,J1*% X81082000Y-101574000D03* D14* X83582000Y-101574000D03* X85582000Y-101574000D03* X88082000Y-101574000D03* D15* X78012000Y-104284000D03* X91152000Y-104284000D03* %TD*% D12* %TO.C,H1*% X37846000Y-111506000D03* D18* X37846000Y-111506000D03* %TD*% D16* %TO.C,J2*% X60731042Y-99717876D03* D17* X60731042Y-102257876D03* X60731042Y-104797876D03* %TD*% M02* ================================================ FILE: pcb/v1.0/Gerber/DeskHop-B_Paste.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-01-21T01:35:17+01:00*% %TF.ProjectId,DeskHop,4465736b-486f-4702-9e6b-696361645f70,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Paste,Bot*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-01-21 01:35:17* %MOMM*% %LPD*% G01* G04 APERTURE LIST* G04 APERTURE END LIST* M02* ================================================ FILE: pcb/v1.0/Gerber/DeskHop-B_Silkscreen.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-01-21T01:35:17+01:00*% %TF.ProjectId,DeskHop,4465736b-486f-4702-9e6b-696361645f70,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Legend,Bot*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-01-21 01:35:17* %MOMM*% %LPD*% G01* G04 APERTURE LIST* %ADD10C,0.120000*% %ADD11C,0.150000*% G04 APERTURE END LIST* D10* X67310000Y-48738426D02* X67309441Y-50058426D01* X67309238Y-50538426D02* X67308679Y-51858426D01* X67308476Y-52338426D02* X67307918Y-53658426D01* X67307715Y-54138426D02* X67307156Y-55458425D01* X67306953Y-55938425D02* X67306394Y-57258425D01* X67306191Y-57738425D02* X67305632Y-59058425D01* X67305429Y-59538425D02* X67304870Y-60858425D01* X67304667Y-61338425D02* X67304109Y-62658425D01* X67303905Y-63138425D02* X67303347Y-64458425D01* X67303144Y-64938425D02* X67302585Y-66258424D01* X67302382Y-66738424D02* X67301823Y-68058424D01* X67301620Y-68538424D02* X67301061Y-69858424D01* X67300858Y-70338424D02* X67300299Y-71658424D01* X67300096Y-72138424D02* X67299538Y-73458424D01* X67299334Y-73938424D02* X67298776Y-75258424D01* X67298573Y-75738424D02* X67298014Y-77058423D01* X67297811Y-77538423D02* X67297252Y-78858423D01* X67297049Y-79338423D02* X67296490Y-80658423D01* X67296287Y-81138423D02* X67295728Y-82458423D01* X67295525Y-82938423D02* X67294967Y-84258423D01* X67294763Y-84738423D02* X67294205Y-86058423D01* X67294002Y-86538423D02* X67293443Y-87858422D01* X67293240Y-88338422D02* X67292681Y-89658422D01* X67292478Y-90138422D02* X67291919Y-91458422D01* X67291716Y-91938422D02* X67291157Y-93258422D01* X67290954Y-93738422D02* X67290396Y-95058422D01* X67290192Y-95538422D02* X67289634Y-96858422D01* X67289431Y-97338422D02* X67288872Y-98658422D01* X67288669Y-99138421D02* X67288110Y-100458421D01* X67287907Y-100938421D02* X67287348Y-102258421D01* X67287145Y-102738421D02* X67286586Y-104058421D01* X67286383Y-104538421D02* X67285825Y-105858421D01* X67285621Y-106338421D02* X67285063Y-107658421D01* X67284860Y-108138421D02* X67284301Y-109458421D01* X67284098Y-109938421D02* X67283539Y-111258420D01* X67283336Y-111738420D02* X67282777Y-113058420D01* X67282574Y-113538420D02* X67282015Y-114858420D01* X67281812Y-115338420D02* X67281783Y-115407659D01* X66937741Y-48748460D02* X65680288Y-48372564D01* X65269784Y-48124498D02* X64352268Y-47186070D01* X64113515Y-46770080D02* X63766049Y-45504477D01* X63758926Y-45024894D02* X64068655Y-43749530D01* X64294950Y-43326634D02* X65184193Y-42361372D01* X65587149Y-42101225D02* X66832885Y-41688154D01* X67310000Y-41656000D02* X67310000Y-41148000D01* D11* X64612611Y-89039580D02* X64612611Y-87939580D01* X64612611Y-87939580D02* X64350706Y-87939580D01* X64350706Y-87939580D02* X64193563Y-87991961D01* X64193563Y-87991961D02* X64088801Y-88096723D01* X64088801Y-88096723D02* X64036420Y-88201485D01* X64036420Y-88201485D02* X63984039Y-88411009D01* X63984039Y-88411009D02* X63984039Y-88568152D01* X63984039Y-88568152D02* X64036420Y-88777676D01* X64036420Y-88777676D02* X64088801Y-88882438D01* X64088801Y-88882438D02* X64193563Y-88987200D01* X64193563Y-88987200D02* X64350706Y-89039580D01* X64350706Y-89039580D02* X64612611Y-89039580D01* X63093563Y-88987200D02* X63198325Y-89039580D01* X63198325Y-89039580D02* X63407849Y-89039580D01* X63407849Y-89039580D02* X63512611Y-88987200D01* X63512611Y-88987200D02* X63564992Y-88882438D01* X63564992Y-88882438D02* X63564992Y-88463390D01* X63564992Y-88463390D02* X63512611Y-88358628D01* X63512611Y-88358628D02* X63407849Y-88306247D01* X63407849Y-88306247D02* X63198325Y-88306247D01* X63198325Y-88306247D02* X63093563Y-88358628D01* X63093563Y-88358628D02* X63041182Y-88463390D01* X63041182Y-88463390D02* X63041182Y-88568152D01* X63041182Y-88568152D02* X63564992Y-88672914D01* X62622135Y-88987200D02* X62517373Y-89039580D01* X62517373Y-89039580D02* X62307849Y-89039580D01* X62307849Y-89039580D02* X62203087Y-88987200D01* X62203087Y-88987200D02* X62150706Y-88882438D01* X62150706Y-88882438D02* X62150706Y-88830057D01* X62150706Y-88830057D02* X62203087Y-88725295D01* X62203087Y-88725295D02* X62307849Y-88672914D01* X62307849Y-88672914D02* X62464992Y-88672914D01* X62464992Y-88672914D02* X62569754Y-88620533D01* X62569754Y-88620533D02* X62622135Y-88515771D01* X62622135Y-88515771D02* X62622135Y-88463390D01* X62622135Y-88463390D02* X62569754Y-88358628D01* X62569754Y-88358628D02* X62464992Y-88306247D01* X62464992Y-88306247D02* X62307849Y-88306247D01* X62307849Y-88306247D02* X62203087Y-88358628D01* X61679278Y-89039580D02* X61679278Y-87939580D01* X61574516Y-88620533D02* X61260230Y-89039580D01* X61260230Y-88306247D02* X61679278Y-88725295D01* X60788802Y-89039580D02* X60788802Y-87939580D01* X60788802Y-88463390D02* X60160230Y-88463390D01* X60160230Y-89039580D02* X60160230Y-87939580D01* X59479278Y-89039580D02* X59584040Y-88987200D01* X59584040Y-88987200D02* X59636421Y-88934819D01* X59636421Y-88934819D02* X59688802Y-88830057D01* X59688802Y-88830057D02* X59688802Y-88515771D01* X59688802Y-88515771D02* X59636421Y-88411009D01* X59636421Y-88411009D02* X59584040Y-88358628D01* X59584040Y-88358628D02* X59479278Y-88306247D01* X59479278Y-88306247D02* X59322135Y-88306247D01* X59322135Y-88306247D02* X59217373Y-88358628D01* X59217373Y-88358628D02* X59164992Y-88411009D01* X59164992Y-88411009D02* X59112611Y-88515771D01* X59112611Y-88515771D02* X59112611Y-88830057D01* X59112611Y-88830057D02* X59164992Y-88934819D01* X59164992Y-88934819D02* X59217373Y-88987200D01* X59217373Y-88987200D02* X59322135Y-89039580D01* X59322135Y-89039580D02* X59479278Y-89039580D01* X58641183Y-88306247D02* X58641183Y-89406247D01* X58641183Y-88358628D02* X58536421Y-88306247D01* X58536421Y-88306247D02* X58326897Y-88306247D01* X58326897Y-88306247D02* X58222135Y-88358628D01* X58222135Y-88358628D02* X58169754Y-88411009D01* X58169754Y-88411009D02* X58117373Y-88515771D01* X58117373Y-88515771D02* X58117373Y-88830057D01* X58117373Y-88830057D02* X58169754Y-88934819D01* X58169754Y-88934819D02* X58222135Y-88987200D01* X58222135Y-88987200D02* X58326897Y-89039580D01* X58326897Y-89039580D02* X58536421Y-89039580D01* X58536421Y-89039580D02* X58641183Y-88987200D01* X56807850Y-88620533D02* X55969755Y-88620533D01* X54607850Y-89039580D02* X54607850Y-87939580D01* X53979278Y-89039580D02* X54450707Y-88411009D01* X53979278Y-87939580D02* X54607850Y-88568152D01* X53088802Y-88987200D02* X53193564Y-89039580D01* X53193564Y-89039580D02* X53403088Y-89039580D01* X53403088Y-89039580D02* X53507850Y-88987200D01* X53507850Y-88987200D02* X53560231Y-88882438D01* X53560231Y-88882438D02* X53560231Y-88463390D01* X53560231Y-88463390D02* X53507850Y-88358628D01* X53507850Y-88358628D02* X53403088Y-88306247D01* X53403088Y-88306247D02* X53193564Y-88306247D01* X53193564Y-88306247D02* X53088802Y-88358628D01* X53088802Y-88358628D02* X53036421Y-88463390D01* X53036421Y-88463390D02* X53036421Y-88568152D01* X53036421Y-88568152D02* X53560231Y-88672914D01* X52669755Y-88306247D02* X52407850Y-89039580D01* X52145945Y-88306247D02* X52407850Y-89039580D01* X52407850Y-89039580D02* X52512612Y-89301485D01* X52512612Y-89301485D02* X52564993Y-89353866D01* X52564993Y-89353866D02* X52669755Y-89406247D01* X51726898Y-89039580D02* X51726898Y-87939580D01* X51726898Y-88358628D02* X51622136Y-88306247D01* X51622136Y-88306247D02* X51412612Y-88306247D01* X51412612Y-88306247D02* X51307850Y-88358628D01* X51307850Y-88358628D02* X51255469Y-88411009D01* X51255469Y-88411009D02* X51203088Y-88515771D01* X51203088Y-88515771D02* X51203088Y-88830057D01* X51203088Y-88830057D02* X51255469Y-88934819D01* X51255469Y-88934819D02* X51307850Y-88987200D01* X51307850Y-88987200D02* X51412612Y-89039580D01* X51412612Y-89039580D02* X51622136Y-89039580D01* X51622136Y-89039580D02* X51726898Y-88987200D01* X50574517Y-89039580D02* X50679279Y-88987200D01* X50679279Y-88987200D02* X50731660Y-88934819D01* X50731660Y-88934819D02* X50784041Y-88830057D01* X50784041Y-88830057D02* X50784041Y-88515771D01* X50784041Y-88515771D02* X50731660Y-88411009D01* X50731660Y-88411009D02* X50679279Y-88358628D01* X50679279Y-88358628D02* X50574517Y-88306247D01* X50574517Y-88306247D02* X50417374Y-88306247D01* X50417374Y-88306247D02* X50312612Y-88358628D01* X50312612Y-88358628D02* X50260231Y-88411009D01* X50260231Y-88411009D02* X50207850Y-88515771D01* X50207850Y-88515771D02* X50207850Y-88830057D01* X50207850Y-88830057D02* X50260231Y-88934819D01* X50260231Y-88934819D02* X50312612Y-88987200D01* X50312612Y-88987200D02* X50417374Y-89039580D01* X50417374Y-89039580D02* X50574517Y-89039580D01* X49264993Y-89039580D02* X49264993Y-88463390D01* X49264993Y-88463390D02* X49317374Y-88358628D01* X49317374Y-88358628D02* X49422136Y-88306247D01* X49422136Y-88306247D02* X49631660Y-88306247D01* X49631660Y-88306247D02* X49736422Y-88358628D01* X49264993Y-88987200D02* X49369755Y-89039580D01* X49369755Y-89039580D02* X49631660Y-89039580D01* X49631660Y-89039580D02* X49736422Y-88987200D01* X49736422Y-88987200D02* X49788803Y-88882438D01* X49788803Y-88882438D02* X49788803Y-88777676D01* X49788803Y-88777676D02* X49736422Y-88672914D01* X49736422Y-88672914D02* X49631660Y-88620533D01* X49631660Y-88620533D02* X49369755Y-88620533D01* X49369755Y-88620533D02* X49264993Y-88568152D01* X48741184Y-89039580D02* X48741184Y-88306247D01* X48741184Y-88515771D02* X48688803Y-88411009D01* X48688803Y-88411009D02* X48636422Y-88358628D01* X48636422Y-88358628D02* X48531660Y-88306247D01* X48531660Y-88306247D02* X48426898Y-88306247D01* X47588803Y-89039580D02* X47588803Y-87939580D01* X47588803Y-88987200D02* X47693565Y-89039580D01* X47693565Y-89039580D02* X47903089Y-89039580D01* X47903089Y-89039580D02* X48007851Y-88987200D01* X48007851Y-88987200D02* X48060232Y-88934819D01* X48060232Y-88934819D02* X48112613Y-88830057D01* X48112613Y-88830057D02* X48112613Y-88515771D01* X48112613Y-88515771D02* X48060232Y-88411009D01* X48060232Y-88411009D02* X48007851Y-88358628D01* X48007851Y-88358628D02* X47903089Y-88306247D01* X47903089Y-88306247D02* X47693565Y-88306247D01* X47693565Y-88306247D02* X47588803Y-88358628D01* X46279279Y-87887200D02* X47222137Y-89301485D01* X45912613Y-89039580D02* X45912613Y-87939580D01* X45912613Y-87939580D02* X45545946Y-88725295D01* X45545946Y-88725295D02* X45179279Y-87939580D01* X45179279Y-87939580D02* X45179279Y-89039580D01* X44498327Y-89039580D02* X44603089Y-88987200D01* X44603089Y-88987200D02* X44655470Y-88934819D01* X44655470Y-88934819D02* X44707851Y-88830057D01* X44707851Y-88830057D02* X44707851Y-88515771D01* X44707851Y-88515771D02* X44655470Y-88411009D01* X44655470Y-88411009D02* X44603089Y-88358628D01* X44603089Y-88358628D02* X44498327Y-88306247D01* X44498327Y-88306247D02* X44341184Y-88306247D01* X44341184Y-88306247D02* X44236422Y-88358628D01* X44236422Y-88358628D02* X44184041Y-88411009D01* X44184041Y-88411009D02* X44131660Y-88515771D01* X44131660Y-88515771D02* X44131660Y-88830057D01* X44131660Y-88830057D02* X44184041Y-88934819D01* X44184041Y-88934819D02* X44236422Y-88987200D01* X44236422Y-88987200D02* X44341184Y-89039580D01* X44341184Y-89039580D02* X44498327Y-89039580D01* X43188803Y-88306247D02* X43188803Y-89039580D01* X43660232Y-88306247D02* X43660232Y-88882438D01* X43660232Y-88882438D02* X43607851Y-88987200D01* X43607851Y-88987200D02* X43503089Y-89039580D01* X43503089Y-89039580D02* X43345946Y-89039580D01* X43345946Y-89039580D02* X43241184Y-88987200D01* X43241184Y-88987200D02* X43188803Y-88934819D01* X42717375Y-88987200D02* X42612613Y-89039580D01* X42612613Y-89039580D02* X42403089Y-89039580D01* X42403089Y-89039580D02* X42298327Y-88987200D01* X42298327Y-88987200D02* X42245946Y-88882438D01* X42245946Y-88882438D02* X42245946Y-88830057D01* X42245946Y-88830057D02* X42298327Y-88725295D01* X42298327Y-88725295D02* X42403089Y-88672914D01* X42403089Y-88672914D02* X42560232Y-88672914D01* X42560232Y-88672914D02* X42664994Y-88620533D01* X42664994Y-88620533D02* X42717375Y-88515771D01* X42717375Y-88515771D02* X42717375Y-88463390D01* X42717375Y-88463390D02* X42664994Y-88358628D01* X42664994Y-88358628D02* X42560232Y-88306247D01* X42560232Y-88306247D02* X42403089Y-88306247D01* X42403089Y-88306247D02* X42298327Y-88358628D01* X41355470Y-88987200D02* X41460232Y-89039580D01* X41460232Y-89039580D02* X41669756Y-89039580D01* X41669756Y-89039580D02* X41774518Y-88987200D01* X41774518Y-88987200D02* X41826899Y-88882438D01* X41826899Y-88882438D02* X41826899Y-88463390D01* X41826899Y-88463390D02* X41774518Y-88358628D01* X41774518Y-88358628D02* X41669756Y-88306247D01* X41669756Y-88306247D02* X41460232Y-88306247D01* X41460232Y-88306247D02* X41355470Y-88358628D01* X41355470Y-88358628D02* X41303089Y-88463390D01* X41303089Y-88463390D02* X41303089Y-88568152D01* X41303089Y-88568152D02* X41826899Y-88672914D01* X40045947Y-88987200D02* X39888804Y-89039580D01* X39888804Y-89039580D02* X39626899Y-89039580D01* X39626899Y-89039580D02* X39522137Y-88987200D01* X39522137Y-88987200D02* X39469756Y-88934819D01* X39469756Y-88934819D02* X39417375Y-88830057D01* X39417375Y-88830057D02* X39417375Y-88725295D01* X39417375Y-88725295D02* X39469756Y-88620533D01* X39469756Y-88620533D02* X39522137Y-88568152D01* X39522137Y-88568152D02* X39626899Y-88515771D01* X39626899Y-88515771D02* X39836423Y-88463390D01* X39836423Y-88463390D02* X39941185Y-88411009D01* X39941185Y-88411009D02* X39993566Y-88358628D01* X39993566Y-88358628D02* X40045947Y-88253866D01* X40045947Y-88253866D02* X40045947Y-88149104D01* X40045947Y-88149104D02* X39993566Y-88044342D01* X39993566Y-88044342D02* X39941185Y-87991961D01* X39941185Y-87991961D02* X39836423Y-87939580D01* X39836423Y-87939580D02* X39574518Y-87939580D01* X39574518Y-87939580D02* X39417375Y-87991961D01* X39050709Y-88306247D02* X38841185Y-89039580D01* X38841185Y-89039580D02* X38631661Y-88515771D01* X38631661Y-88515771D02* X38422137Y-89039580D01* X38422137Y-89039580D02* X38212613Y-88306247D01* X37793566Y-89039580D02* X37793566Y-88306247D01* X37793566Y-87939580D02* X37845947Y-87991961D01* X37845947Y-87991961D02* X37793566Y-88044342D01* X37793566Y-88044342D02* X37741185Y-87991961D01* X37741185Y-87991961D02* X37793566Y-87939580D01* X37793566Y-87939580D02* X37793566Y-88044342D01* X37426899Y-88306247D02* X37007851Y-88306247D01* X37269756Y-87939580D02* X37269756Y-88882438D01* X37269756Y-88882438D02* X37217375Y-88987200D01* X37217375Y-88987200D02* X37112613Y-89039580D01* X37112613Y-89039580D02* X37007851Y-89039580D01* X36169756Y-88987200D02* X36274518Y-89039580D01* X36274518Y-89039580D02* X36484042Y-89039580D01* X36484042Y-89039580D02* X36588804Y-88987200D01* X36588804Y-88987200D02* X36641185Y-88934819D01* X36641185Y-88934819D02* X36693566Y-88830057D01* X36693566Y-88830057D02* X36693566Y-88515771D01* X36693566Y-88515771D02* X36641185Y-88411009D01* X36641185Y-88411009D02* X36588804Y-88358628D01* X36588804Y-88358628D02* X36484042Y-88306247D01* X36484042Y-88306247D02* X36274518Y-88306247D01* X36274518Y-88306247D02* X36169756Y-88358628D01* X35698328Y-89039580D02* X35698328Y-87939580D01* X35226899Y-89039580D02* X35226899Y-88463390D01* X35226899Y-88463390D02* X35279280Y-88358628D01* X35279280Y-88358628D02* X35384042Y-88306247D01* X35384042Y-88306247D02* X35541185Y-88306247D01* X35541185Y-88306247D02* X35645947Y-88358628D01* X35645947Y-88358628D02* X35698328Y-88411009D01* X64612611Y-92581580D02* X64612611Y-91481580D01* X64612611Y-91900628D02* X64507849Y-91848247D01* X64507849Y-91848247D02* X64298325Y-91848247D01* X64298325Y-91848247D02* X64193563Y-91900628D01* X64193563Y-91900628D02* X64141182Y-91953009D01* X64141182Y-91953009D02* X64088801Y-92057771D01* X64088801Y-92057771D02* X64088801Y-92372057D01* X64088801Y-92372057D02* X64141182Y-92476819D01* X64141182Y-92476819D02* X64193563Y-92529200D01* X64193563Y-92529200D02* X64298325Y-92581580D01* X64298325Y-92581580D02* X64507849Y-92581580D01* X64507849Y-92581580D02* X64612611Y-92529200D01* X63722135Y-91848247D02* X63460230Y-92581580D01* X63198325Y-91848247D02* X63460230Y-92581580D01* X63460230Y-92581580D02* X63564992Y-92843485D01* X63564992Y-92843485D02* X63617373Y-92895866D01* X63617373Y-92895866D02* X63722135Y-92948247D01* X61941183Y-92581580D02* X61941183Y-91481580D01* X61941183Y-92005390D02* X61312611Y-92005390D01* X61312611Y-92581580D02* X61312611Y-91481580D01* X60788802Y-92581580D02* X60788802Y-91848247D01* X60788802Y-92057771D02* X60736421Y-91953009D01* X60736421Y-91953009D02* X60684040Y-91900628D01* X60684040Y-91900628D02* X60579278Y-91848247D01* X60579278Y-91848247D02* X60474516Y-91848247D01* X60212612Y-91848247D02* X59950707Y-92581580D01* X59950707Y-92581580D02* X59688802Y-91848247D01* X59112612Y-92581580D02* X59217374Y-92529200D01* X59217374Y-92529200D02* X59269755Y-92476819D01* X59269755Y-92476819D02* X59322136Y-92372057D01* X59322136Y-92372057D02* X59322136Y-92057771D01* X59322136Y-92057771D02* X59269755Y-91953009D01* X59269755Y-91953009D02* X59217374Y-91900628D01* X59217374Y-91900628D02* X59112612Y-91848247D01* X59112612Y-91848247D02* X58955469Y-91848247D01* X58955469Y-91848247D02* X58850707Y-91900628D01* X58850707Y-91900628D02* X58798326Y-91953009D01* X58798326Y-91953009D02* X58745945Y-92057771D01* X58745945Y-92057771D02* X58745945Y-92372057D01* X58745945Y-92372057D02* X58798326Y-92476819D01* X58798326Y-92476819D02* X58850707Y-92529200D01* X58850707Y-92529200D02* X58955469Y-92581580D01* X58955469Y-92581580D02* X59112612Y-92581580D01* X58274517Y-91848247D02* X58274517Y-92791104D01* X58274517Y-92791104D02* X58326898Y-92895866D01* X58326898Y-92895866D02* X58431660Y-92948247D01* X58431660Y-92948247D02* X58484041Y-92948247D01* X58274517Y-91481580D02* X58326898Y-91533961D01* X58326898Y-91533961D02* X58274517Y-91586342D01* X58274517Y-91586342D02* X58222136Y-91533961D01* X58222136Y-91533961D02* X58274517Y-91481580D01* X58274517Y-91481580D02* X58274517Y-91586342D01* X57331659Y-92529200D02* X57436421Y-92581580D01* X57436421Y-92581580D02* X57645945Y-92581580D01* X57645945Y-92581580D02* X57750707Y-92529200D01* X57750707Y-92529200D02* X57803088Y-92424438D01* X57803088Y-92424438D02* X57803088Y-92005390D01* X57803088Y-92005390D02* X57750707Y-91900628D01* X57750707Y-91900628D02* X57645945Y-91848247D01* X57645945Y-91848247D02* X57436421Y-91848247D01* X57436421Y-91848247D02* X57331659Y-91900628D01* X57331659Y-91900628D02* X57279278Y-92005390D01* X57279278Y-92005390D02* X57279278Y-92110152D01* X57279278Y-92110152D02* X57803088Y-92214914D01* X55341183Y-92476819D02* X55393564Y-92529200D01* X55393564Y-92529200D02* X55550707Y-92581580D01* X55550707Y-92581580D02* X55655469Y-92581580D01* X55655469Y-92581580D02* X55812612Y-92529200D01* X55812612Y-92529200D02* X55917374Y-92424438D01* X55917374Y-92424438D02* X55969755Y-92319676D01* X55969755Y-92319676D02* X56022136Y-92110152D01* X56022136Y-92110152D02* X56022136Y-91953009D01* X56022136Y-91953009D02* X55969755Y-91743485D01* X55969755Y-91743485D02* X55917374Y-91638723D01* X55917374Y-91638723D02* X55812612Y-91533961D01* X55812612Y-91533961D02* X55655469Y-91481580D01* X55655469Y-91481580D02* X55550707Y-91481580D01* X55550707Y-91481580D02* X55393564Y-91533961D01* X55393564Y-91533961D02* X55341183Y-91586342D01* X54398326Y-92581580D02* X54398326Y-92005390D01* X54398326Y-92005390D02* X54450707Y-91900628D01* X54450707Y-91900628D02* X54555469Y-91848247D01* X54555469Y-91848247D02* X54764993Y-91848247D01* X54764993Y-91848247D02* X54869755Y-91900628D01* X54398326Y-92529200D02* X54503088Y-92581580D01* X54503088Y-92581580D02* X54764993Y-92581580D01* X54764993Y-92581580D02* X54869755Y-92529200D01* X54869755Y-92529200D02* X54922136Y-92424438D01* X54922136Y-92424438D02* X54922136Y-92319676D01* X54922136Y-92319676D02* X54869755Y-92214914D01* X54869755Y-92214914D02* X54764993Y-92162533D01* X54764993Y-92162533D02* X54503088Y-92162533D01* X54503088Y-92162533D02* X54398326Y-92110152D01* X53979279Y-91848247D02* X53717374Y-92581580D01* X53717374Y-92581580D02* X53455469Y-91848247D01* X53036422Y-92581580D02* X53036422Y-91848247D01* X53036422Y-92057771D02* X52984041Y-91953009D01* X52984041Y-91953009D02* X52931660Y-91900628D01* X52931660Y-91900628D02* X52826898Y-91848247D01* X52826898Y-91848247D02* X52722136Y-91848247D01* X51884041Y-92581580D02* X51884041Y-92005390D01* X51884041Y-92005390D02* X51936422Y-91900628D01* X51936422Y-91900628D02* X52041184Y-91848247D01* X52041184Y-91848247D02* X52250708Y-91848247D01* X52250708Y-91848247D02* X52355470Y-91900628D01* X51884041Y-92529200D02* X51988803Y-92581580D01* X51988803Y-92581580D02* X52250708Y-92581580D01* X52250708Y-92581580D02* X52355470Y-92529200D01* X52355470Y-92529200D02* X52407851Y-92424438D01* X52407851Y-92424438D02* X52407851Y-92319676D01* X52407851Y-92319676D02* X52355470Y-92214914D01* X52355470Y-92214914D02* X52250708Y-92162533D01* X52250708Y-92162533D02* X51988803Y-92162533D01* X51988803Y-92162533D02* X51884041Y-92110152D01* X51360232Y-92581580D02* X51360232Y-91481580D01* X51255470Y-92162533D02* X50941184Y-92581580D01* X50941184Y-91848247D02* X51360232Y-92267295D01* X50417375Y-92529200D02* X50417375Y-92581580D01* X50417375Y-92581580D02* X50469756Y-92686342D01* X50469756Y-92686342D02* X50522137Y-92738723D01* X48531660Y-92581580D02* X49160232Y-92581580D01* X48845946Y-92581580D02* X48845946Y-91481580D01* X48845946Y-91481580D02* X48950708Y-91638723D01* X48950708Y-91638723D02* X49055470Y-91743485D01* X49055470Y-91743485D02* X49160232Y-91795866D01* X48112613Y-91586342D02* X48060232Y-91533961D01* X48060232Y-91533961D02* X47955470Y-91481580D01* X47955470Y-91481580D02* X47693565Y-91481580D01* X47693565Y-91481580D02* X47588803Y-91533961D01* X47588803Y-91533961D02* X47536422Y-91586342D01* X47536422Y-91586342D02* X47484041Y-91691104D01* X47484041Y-91691104D02* X47484041Y-91795866D01* X47484041Y-91795866D02* X47536422Y-91953009D01* X47536422Y-91953009D02* X48164994Y-92581580D01* X48164994Y-92581580D02* X47484041Y-92581580D01* X46226898Y-91429200D02* X47169756Y-92843485D01* X45912613Y-91586342D02* X45860232Y-91533961D01* X45860232Y-91533961D02* X45755470Y-91481580D01* X45755470Y-91481580D02* X45493565Y-91481580D01* X45493565Y-91481580D02* X45388803Y-91533961D01* X45388803Y-91533961D02* X45336422Y-91586342D01* X45336422Y-91586342D02* X45284041Y-91691104D01* X45284041Y-91691104D02* X45284041Y-91795866D01* X45284041Y-91795866D02* X45336422Y-91953009D01* X45336422Y-91953009D02* X45964994Y-92581580D01* X45964994Y-92581580D02* X45284041Y-92581580D01* X44603089Y-91481580D02* X44498327Y-91481580D01* X44498327Y-91481580D02* X44393565Y-91533961D01* X44393565Y-91533961D02* X44341184Y-91586342D01* X44341184Y-91586342D02* X44288803Y-91691104D01* X44288803Y-91691104D02* X44236422Y-91900628D01* X44236422Y-91900628D02* X44236422Y-92162533D01* X44236422Y-92162533D02* X44288803Y-92372057D01* X44288803Y-92372057D02* X44341184Y-92476819D01* X44341184Y-92476819D02* X44393565Y-92529200D01* X44393565Y-92529200D02* X44498327Y-92581580D01* X44498327Y-92581580D02* X44603089Y-92581580D01* X44603089Y-92581580D02* X44707851Y-92529200D01* X44707851Y-92529200D02* X44760232Y-92476819D01* X44760232Y-92476819D02* X44812613Y-92372057D01* X44812613Y-92372057D02* X44864994Y-92162533D01* X44864994Y-92162533D02* X44864994Y-91900628D01* X44864994Y-91900628D02* X44812613Y-91691104D01* X44812613Y-91691104D02* X44760232Y-91586342D01* X44760232Y-91586342D02* X44707851Y-91533961D01* X44707851Y-91533961D02* X44603089Y-91481580D01* X43817375Y-91586342D02* X43764994Y-91533961D01* X43764994Y-91533961D02* X43660232Y-91481580D01* X43660232Y-91481580D02* X43398327Y-91481580D01* X43398327Y-91481580D02* X43293565Y-91533961D01* X43293565Y-91533961D02* X43241184Y-91586342D01* X43241184Y-91586342D02* X43188803Y-91691104D01* X43188803Y-91691104D02* X43188803Y-91795866D01* X43188803Y-91795866D02* X43241184Y-91953009D01* X43241184Y-91953009D02* X43869756Y-92581580D01* X43869756Y-92581580D02* X43188803Y-92581580D01* X42822137Y-91481580D02* X42141184Y-91481580D01* X42141184Y-91481580D02* X42507851Y-91900628D01* X42507851Y-91900628D02* X42350708Y-91900628D01* X42350708Y-91900628D02* X42245946Y-91953009D01* X42245946Y-91953009D02* X42193565Y-92005390D01* X42193565Y-92005390D02* X42141184Y-92110152D01* X42141184Y-92110152D02* X42141184Y-92372057D01* X42141184Y-92372057D02* X42193565Y-92476819D01* X42193565Y-92476819D02* X42245946Y-92529200D01* X42245946Y-92529200D02* X42350708Y-92581580D01* X42350708Y-92581580D02* X42664994Y-92581580D01* X42664994Y-92581580D02* X42769756Y-92529200D01* X42769756Y-92529200D02* X42822137Y-92476819D01* X64612611Y-96123580D02* X64612611Y-95023580D01* X64141182Y-96123580D02* X64141182Y-95547390D01* X64141182Y-95547390D02* X64193563Y-95442628D01* X64193563Y-95442628D02* X64298325Y-95390247D01* X64298325Y-95390247D02* X64455468Y-95390247D01* X64455468Y-95390247D02* X64560230Y-95442628D01* X64560230Y-95442628D02* X64612611Y-95495009D01* X63774516Y-95390247D02* X63355468Y-95390247D01* X63617373Y-95023580D02* X63617373Y-95966438D01* X63617373Y-95966438D02* X63564992Y-96071200D01* X63564992Y-96071200D02* X63460230Y-96123580D01* X63460230Y-96123580D02* X63355468Y-96123580D01* X63145945Y-95390247D02* X62726897Y-95390247D01* X62988802Y-95023580D02* X62988802Y-95966438D01* X62988802Y-95966438D02* X62936421Y-96071200D01* X62936421Y-96071200D02* X62831659Y-96123580D01* X62831659Y-96123580D02* X62726897Y-96123580D01* X62360231Y-95390247D02* X62360231Y-96490247D01* X62360231Y-95442628D02* X62255469Y-95390247D01* X62255469Y-95390247D02* X62045945Y-95390247D01* X62045945Y-95390247D02* X61941183Y-95442628D01* X61941183Y-95442628D02* X61888802Y-95495009D01* X61888802Y-95495009D02* X61836421Y-95599771D01* X61836421Y-95599771D02* X61836421Y-95914057D01* X61836421Y-95914057D02* X61888802Y-96018819D01* X61888802Y-96018819D02* X61941183Y-96071200D01* X61941183Y-96071200D02* X62045945Y-96123580D01* X62045945Y-96123580D02* X62255469Y-96123580D01* X62255469Y-96123580D02* X62360231Y-96071200D01* X61417374Y-96071200D02* X61312612Y-96123580D01* X61312612Y-96123580D02* X61103088Y-96123580D01* X61103088Y-96123580D02* X60998326Y-96071200D01* X60998326Y-96071200D02* X60945945Y-95966438D01* X60945945Y-95966438D02* X60945945Y-95914057D01* X60945945Y-95914057D02* X60998326Y-95809295D01* X60998326Y-95809295D02* X61103088Y-95756914D01* X61103088Y-95756914D02* X61260231Y-95756914D01* X61260231Y-95756914D02* X61364993Y-95704533D01* X61364993Y-95704533D02* X61417374Y-95599771D01* X61417374Y-95599771D02* X61417374Y-95547390D01* X61417374Y-95547390D02* X61364993Y-95442628D01* X61364993Y-95442628D02* X61260231Y-95390247D01* X61260231Y-95390247D02* X61103088Y-95390247D01* X61103088Y-95390247D02* X60998326Y-95442628D01* X60474517Y-96018819D02* X60422136Y-96071200D01* X60422136Y-96071200D02* X60474517Y-96123580D01* X60474517Y-96123580D02* X60526898Y-96071200D01* X60526898Y-96071200D02* X60474517Y-96018819D01* X60474517Y-96018819D02* X60474517Y-96123580D01* X60474517Y-95442628D02* X60422136Y-95495009D01* X60422136Y-95495009D02* X60474517Y-95547390D01* X60474517Y-95547390D02* X60526898Y-95495009D01* X60526898Y-95495009D02* X60474517Y-95442628D01* X60474517Y-95442628D02* X60474517Y-95547390D01* X59164992Y-94971200D02* X60107850Y-96385485D01* X58012611Y-94971200D02* X58955469Y-96385485D01* X57174516Y-95390247D02* X57174516Y-96280723D01* X57174516Y-96280723D02* X57226897Y-96385485D01* X57226897Y-96385485D02* X57279278Y-96437866D01* X57279278Y-96437866D02* X57384040Y-96490247D01* X57384040Y-96490247D02* X57541183Y-96490247D01* X57541183Y-96490247D02* X57645945Y-96437866D01* X57174516Y-96071200D02* X57279278Y-96123580D01* X57279278Y-96123580D02* X57488802Y-96123580D01* X57488802Y-96123580D02* X57593564Y-96071200D01* X57593564Y-96071200D02* X57645945Y-96018819D01* X57645945Y-96018819D02* X57698326Y-95914057D01* X57698326Y-95914057D02* X57698326Y-95599771D01* X57698326Y-95599771D02* X57645945Y-95495009D01* X57645945Y-95495009D02* X57593564Y-95442628D01* X57593564Y-95442628D02* X57488802Y-95390247D01* X57488802Y-95390247D02* X57279278Y-95390247D01* X57279278Y-95390247D02* X57174516Y-95442628D01* X56650707Y-96123580D02* X56650707Y-95390247D01* X56650707Y-95023580D02* X56703088Y-95075961D01* X56703088Y-95075961D02* X56650707Y-95128342D01* X56650707Y-95128342D02* X56598326Y-95075961D01* X56598326Y-95075961D02* X56650707Y-95023580D01* X56650707Y-95023580D02* X56650707Y-95128342D01* X56284040Y-95390247D02* X55864992Y-95390247D01* X56126897Y-95023580D02* X56126897Y-95966438D01* X56126897Y-95966438D02* X56074516Y-96071200D01* X56074516Y-96071200D02* X55969754Y-96123580D01* X55969754Y-96123580D02* X55864992Y-96123580D01* X55498326Y-96123580D02* X55498326Y-95023580D01* X55026897Y-96123580D02* X55026897Y-95547390D01* X55026897Y-95547390D02* X55079278Y-95442628D01* X55079278Y-95442628D02* X55184040Y-95390247D01* X55184040Y-95390247D02* X55341183Y-95390247D01* X55341183Y-95390247D02* X55445945Y-95442628D01* X55445945Y-95442628D02* X55498326Y-95495009D01* X54031659Y-95390247D02* X54031659Y-96123580D01* X54503088Y-95390247D02* X54503088Y-95966438D01* X54503088Y-95966438D02* X54450707Y-96071200D01* X54450707Y-96071200D02* X54345945Y-96123580D01* X54345945Y-96123580D02* X54188802Y-96123580D01* X54188802Y-96123580D02* X54084040Y-96071200D01* X54084040Y-96071200D02* X54031659Y-96018819D01* X53507850Y-96123580D02* X53507850Y-95023580D01* X53507850Y-95442628D02* X53403088Y-95390247D01* X53403088Y-95390247D02* X53193564Y-95390247D01* X53193564Y-95390247D02* X53088802Y-95442628D01* X53088802Y-95442628D02* X53036421Y-95495009D01* X53036421Y-95495009D02* X52984040Y-95599771D01* X52984040Y-95599771D02* X52984040Y-95914057D01* X52984040Y-95914057D02* X53036421Y-96018819D01* X53036421Y-96018819D02* X53088802Y-96071200D01* X53088802Y-96071200D02* X53193564Y-96123580D01* X53193564Y-96123580D02* X53403088Y-96123580D01* X53403088Y-96123580D02* X53507850Y-96071200D01* X52512612Y-96018819D02* X52460231Y-96071200D01* X52460231Y-96071200D02* X52512612Y-96123580D01* X52512612Y-96123580D02* X52564993Y-96071200D01* X52564993Y-96071200D02* X52512612Y-96018819D01* X52512612Y-96018819D02* X52512612Y-96123580D01* X51517373Y-96071200D02* X51622135Y-96123580D01* X51622135Y-96123580D02* X51831659Y-96123580D01* X51831659Y-96123580D02* X51936421Y-96071200D01* X51936421Y-96071200D02* X51988802Y-96018819D01* X51988802Y-96018819D02* X52041183Y-95914057D01* X52041183Y-95914057D02* X52041183Y-95599771D01* X52041183Y-95599771D02* X51988802Y-95495009D01* X51988802Y-95495009D02* X51936421Y-95442628D01* X51936421Y-95442628D02* X51831659Y-95390247D01* X51831659Y-95390247D02* X51622135Y-95390247D01* X51622135Y-95390247D02* X51517373Y-95442628D01* X50888802Y-96123580D02* X50993564Y-96071200D01* X50993564Y-96071200D02* X51045945Y-96018819D01* X51045945Y-96018819D02* X51098326Y-95914057D01* X51098326Y-95914057D02* X51098326Y-95599771D01* X51098326Y-95599771D02* X51045945Y-95495009D01* X51045945Y-95495009D02* X50993564Y-95442628D01* X50993564Y-95442628D02* X50888802Y-95390247D01* X50888802Y-95390247D02* X50731659Y-95390247D01* X50731659Y-95390247D02* X50626897Y-95442628D01* X50626897Y-95442628D02* X50574516Y-95495009D01* X50574516Y-95495009D02* X50522135Y-95599771D01* X50522135Y-95599771D02* X50522135Y-95914057D01* X50522135Y-95914057D02* X50574516Y-96018819D01* X50574516Y-96018819D02* X50626897Y-96071200D01* X50626897Y-96071200D02* X50731659Y-96123580D01* X50731659Y-96123580D02* X50888802Y-96123580D01* X50050707Y-96123580D02* X50050707Y-95390247D01* X50050707Y-95495009D02* X49998326Y-95442628D01* X49998326Y-95442628D02* X49893564Y-95390247D01* X49893564Y-95390247D02* X49736421Y-95390247D01* X49736421Y-95390247D02* X49631659Y-95442628D01* X49631659Y-95442628D02* X49579278Y-95547390D01* X49579278Y-95547390D02* X49579278Y-96123580D01* X49579278Y-95547390D02* X49526897Y-95442628D01* X49526897Y-95442628D02* X49422135Y-95390247D01* X49422135Y-95390247D02* X49264992Y-95390247D01* X49264992Y-95390247D02* X49160231Y-95442628D01* X49160231Y-95442628D02* X49107850Y-95547390D01* X49107850Y-95547390D02* X49107850Y-96123580D01* X47798325Y-94971200D02* X48741183Y-96385485D01* X47431659Y-96123580D02* X47431659Y-95023580D01* X46960230Y-96123580D02* X46960230Y-95547390D01* X46960230Y-95547390D02* X47012611Y-95442628D01* X47012611Y-95442628D02* X47117373Y-95390247D01* X47117373Y-95390247D02* X47274516Y-95390247D01* X47274516Y-95390247D02* X47379278Y-95442628D01* X47379278Y-95442628D02* X47431659Y-95495009D01* X46436421Y-96123580D02* X46436421Y-95390247D01* X46436421Y-95599771D02* X46384040Y-95495009D01* X46384040Y-95495009D02* X46331659Y-95442628D01* X46331659Y-95442628D02* X46226897Y-95390247D01* X46226897Y-95390247D02* X46122135Y-95390247D01* X45860231Y-95390247D02* X45598326Y-96123580D01* X45598326Y-96123580D02* X45336421Y-95390247D01* X44445945Y-96123580D02* X44445945Y-95547390D01* X44445945Y-95547390D02* X44498326Y-95442628D01* X44498326Y-95442628D02* X44603088Y-95390247D01* X44603088Y-95390247D02* X44812612Y-95390247D01* X44812612Y-95390247D02* X44917374Y-95442628D01* X44445945Y-96071200D02* X44550707Y-96123580D01* X44550707Y-96123580D02* X44812612Y-96123580D01* X44812612Y-96123580D02* X44917374Y-96071200D01* X44917374Y-96071200D02* X44969755Y-95966438D01* X44969755Y-95966438D02* X44969755Y-95861676D01* X44969755Y-95861676D02* X44917374Y-95756914D01* X44917374Y-95756914D02* X44812612Y-95704533D01* X44812612Y-95704533D02* X44550707Y-95704533D01* X44550707Y-95704533D02* X44445945Y-95652152D01* X43450707Y-96071200D02* X43555469Y-96123580D01* X43555469Y-96123580D02* X43764993Y-96123580D01* X43764993Y-96123580D02* X43869755Y-96071200D01* X43869755Y-96071200D02* X43922136Y-96018819D01* X43922136Y-96018819D02* X43974517Y-95914057D01* X43974517Y-95914057D02* X43974517Y-95599771D01* X43974517Y-95599771D02* X43922136Y-95495009D01* X43922136Y-95495009D02* X43869755Y-95442628D01* X43869755Y-95442628D02* X43764993Y-95390247D01* X43764993Y-95390247D02* X43555469Y-95390247D01* X43555469Y-95390247D02* X43450707Y-95442628D01* X42979279Y-96123580D02* X42979279Y-95023580D01* X42507850Y-96123580D02* X42507850Y-95547390D01* X42507850Y-95547390D02* X42560231Y-95442628D01* X42560231Y-95442628D02* X42664993Y-95390247D01* X42664993Y-95390247D02* X42822136Y-95390247D01* X42822136Y-95390247D02* X42926898Y-95442628D01* X42926898Y-95442628D02* X42979279Y-95495009D01* M02* ================================================ FILE: pcb/v1.0/Gerber/DeskHop-Edge_Cuts.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-01-21T01:35:17+01:00*% %TF.ProjectId,DeskHop,4465736b-486f-4702-9e6b-696361645f70,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Profile,NP*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-01-21 01:35:17* %MOMM*% %LPD*% G01* G04 APERTURE LIST* %TA.AperFunction,Profile*% %ADD10C,0.050000*% %TD*% G04 APERTURE END LIST* D10* X33773403Y-41085124D02* X100689573Y-41085124D01* X100689573Y-115566375D01* X33773403Y-115566375D01* X33773403Y-41085124D01* M02* ================================================ FILE: pcb/v1.0/Gerber/DeskHop-F_Cu.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-01-21T01:35:16+01:00*% %TF.ProjectId,DeskHop,4465736b-486f-4702-9e6b-696361645f70,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Copper,L1,Top*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-01-21 01:35:16* %MOMM*% %LPD*% G01* G04 APERTURE LIST* G04 Aperture macros list* %AMRoundRect* 0 Rectangle with rounded corners* 0 $1 Rounding radius* 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners* 0 Add a 4 corners polygon primitive as box body* 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0* 0 Add four circle primitives for the rounded corners* 1,1,$1+$1,$2,$3* 1,1,$1+$1,$4,$5* 1,1,$1+$1,$6,$7* 1,1,$1+$1,$8,$9* 0 Add four rect primitives between the rounded corners* 20,1,$1+$1,$2,$3,$4,$5,0* 20,1,$1+$1,$4,$5,$6,$7,0* 20,1,$1+$1,$6,$7,$8,$9,0* 20,1,$1+$1,$8,$9,$2,$3,0*% G04 Aperture macros list end* %TA.AperFunction,SMDPad,CuDef*% %ADD10R,3.500000X1.700000*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD11R,1.700000X3.500000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD12C,3.100000*% %TD*% %TA.AperFunction,ConnectorPad*% %ADD13C,5.400000*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD14RoundRect,0.250000X-0.412500X-0.650000X0.412500X-0.650000X0.412500X0.650000X-0.412500X0.650000X0*% %TD*% %TA.AperFunction,ComponentPad*% %ADD15R,1.600000X1.500000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD16C,1.600000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD17C,3.000000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD18R,1.700000X1.700000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD19O,1.700000X1.700000*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD20RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD21RoundRect,0.250000X0.412500X0.650000X-0.412500X0.650000X-0.412500X-0.650000X0.412500X-0.650000X0*% %TD*% %TA.AperFunction,Conductor*% %ADD22C,0.500000*% %TD*% G04 APERTURE END LIST* D10* %TO.P,U1,1,GPIO0*% %TO.N,unconnected-(U1-GPIO0-Pad1)*% X75554000Y-44704000D03* %TO.P,U1,2,GPIO1*% %TO.N,unconnected-(U1-GPIO1-Pad2)*% X75554000Y-47244000D03* %TO.P,U1,3,GND*% %TO.N,GND2*% X75554000Y-49784000D03* %TO.P,U1,4,GPIO2*% %TO.N,unconnected-(U1-GPIO2-Pad4)*% X75554000Y-52324000D03* %TO.P,U1,5,GPIO3*% %TO.N,unconnected-(U1-GPIO3-Pad5)*% X75554000Y-54864000D03* %TO.P,U1,6,GPIO4*% %TO.N,unconnected-(U1-GPIO4-Pad6)*% X75554000Y-57404000D03* %TO.P,U1,7,GPIO5*% %TO.N,unconnected-(U1-GPIO5-Pad7)*% X75554000Y-59944000D03* %TO.P,U1,8,GND*% %TO.N,GND2*% X75554000Y-62484000D03* %TO.P,U1,9,GPIO6*% %TO.N,unconnected-(U1-GPIO6-Pad9)*% X75554000Y-65024000D03* %TO.P,U1,10,GPIO7*% %TO.N,unconnected-(U1-GPIO7-Pad10)*% X75554000Y-67564000D03* %TO.P,U1,11,GPIO8*% %TO.N,unconnected-(U1-GPIO8-Pad11)*% X75554000Y-70104000D03* %TO.P,U1,12,GPIO9*% %TO.N,unconnected-(U1-GPIO9-Pad12)*% X75554000Y-72644000D03* %TO.P,U1,13,GND*% %TO.N,GND2*% X75554000Y-75184000D03* %TO.P,U1,14,GPIO10*% %TO.N,unconnected-(U1-GPIO10-Pad14)*% X75554000Y-77724000D03* %TO.P,U1,15,GPIO11*% %TO.N,unconnected-(U1-GPIO11-Pad15)*% X75554000Y-80264000D03* %TO.P,U1,16,GPIO12*% %TO.N,/UART A TX*% X75554000Y-82804000D03* %TO.P,U1,17,GPIO13*% %TO.N,unconnected-(U1-GPIO13-Pad17)*% X75554000Y-85344000D03* %TO.P,U1,18,GND*% %TO.N,GND2*% X75554000Y-87884000D03* %TO.P,U1,19,GPIO14*% %TO.N,Net-(J1-D+)*% X75554000Y-90424000D03* %TO.P,U1,20,GPIO15*% %TO.N,Net-(J1-D-)*% X75554000Y-92964000D03* %TO.P,U1,21,GPIO16*% %TO.N,unconnected-(U1-GPIO16-Pad21)*% X95134000Y-92964000D03* %TO.P,U1,22,GPIO17*% %TO.N,unconnected-(U1-GPIO17-Pad22)*% X95134000Y-90424000D03* %TO.P,U1,23,GND*% %TO.N,GND2*% X95134000Y-87884000D03* %TO.P,U1,24,GPIO18*% %TO.N,unconnected-(U1-GPIO18-Pad24)*% X95134000Y-85344000D03* %TO.P,U1,25,GPIO19*% %TO.N,unconnected-(U1-GPIO19-Pad25)*% X95134000Y-82804000D03* %TO.P,U1,26,GPIO20*% %TO.N,unconnected-(U1-GPIO20-Pad26)*% X95134000Y-80264000D03* %TO.P,U1,27,GPIO21*% %TO.N,unconnected-(U1-GPIO21-Pad27)*% X95134000Y-77724000D03* %TO.P,U1,28,GND*% %TO.N,GND2*% X95134000Y-75184000D03* %TO.P,U1,29,GPIO22*% %TO.N,unconnected-(U1-GPIO22-Pad29)*% X95134000Y-72644000D03* %TO.P,U1,30,RUN*% %TO.N,unconnected-(U1-RUN-Pad30)*% X95134000Y-70104000D03* %TO.P,U1,31,GPIO26_ADC0*% %TO.N,unconnected-(U1-GPIO26_ADC0-Pad31)*% X95134000Y-67564000D03* %TO.P,U1,32,GPIO27_ADC1*% %TO.N,unconnected-(U1-GPIO27_ADC1-Pad32)*% X95134000Y-65024000D03* %TO.P,U1,33,AGND*% %TO.N,unconnected-(U1-AGND-Pad33)*% X95134000Y-62484000D03* %TO.P,U1,34,GPIO28_ADC2*% %TO.N,unconnected-(U1-GPIO28_ADC2-Pad34)*% X95134000Y-59944000D03* %TO.P,U1,35,ADC_VREF*% %TO.N,unconnected-(U1-ADC_VREF-Pad35)*% X95134000Y-57404000D03* %TO.P,U1,36,3V3*% %TO.N,Net-(U1-3V3)*% X95134000Y-54864000D03* %TO.P,U1,37,3V3_EN*% %TO.N,unconnected-(U1-3V3_EN-Pad37)*% X95134000Y-52324000D03* %TO.P,U1,38,GND*% %TO.N,GND2*% X95134000Y-49784000D03* %TO.P,U1,39,VSYS*% %TO.N,unconnected-(U1-VSYS-Pad39)*% X95134000Y-47244000D03* %TO.P,U1,40,VBUS*% %TO.N,Net-(J1-VBUS)*% X95134000Y-44704000D03* D11* %TO.P,U1,41,SWCLK*% %TO.N,Net-(J3-Pin_3)*% X82804000Y-93634000D03* %TO.P,U1,42,GND*% %TO.N,GND2*% X85344000Y-93634000D03* %TO.P,U1,43,SWDIO*% %TO.N,Net-(J3-Pin_1)*% X87884000Y-93634000D03* %TD*% D10* %TO.P,U2,1,GPIO0*% %TO.N,unconnected-(U2-GPIO0-Pad1)*% X39095523Y-44688249D03* %TO.P,U2,2,GPIO1*% %TO.N,unconnected-(U2-GPIO1-Pad2)*% X39095523Y-47228249D03* %TO.P,U2,3,GND*% %TO.N,GND*% X39095523Y-49768249D03* %TO.P,U2,4,GPIO2*% %TO.N,unconnected-(U2-GPIO2-Pad4)*% X39095523Y-52308249D03* %TO.P,U2,5,GPIO3*% %TO.N,unconnected-(U2-GPIO3-Pad5)*% X39095523Y-54848249D03* %TO.P,U2,6,GPIO4*% %TO.N,unconnected-(U2-GPIO4-Pad6)*% X39095523Y-57388249D03* %TO.P,U2,7,GPIO5*% %TO.N,unconnected-(U2-GPIO5-Pad7)*% X39095523Y-59928249D03* %TO.P,U2,8,GND*% %TO.N,GND*% X39095523Y-62468249D03* %TO.P,U2,9,GPIO6*% %TO.N,unconnected-(U2-GPIO6-Pad9)*% X39095523Y-65008249D03* %TO.P,U2,10,GPIO7*% %TO.N,unconnected-(U2-GPIO7-Pad10)*% X39095523Y-67548249D03* %TO.P,U2,11,GPIO8*% %TO.N,unconnected-(U2-GPIO8-Pad11)*% X39095523Y-70088249D03* %TO.P,U2,12,GPIO9*% %TO.N,unconnected-(U2-GPIO9-Pad12)*% X39095523Y-72628249D03* %TO.P,U2,13,GND*% %TO.N,GND*% X39095523Y-75168249D03* %TO.P,U2,14,GPIO10*% %TO.N,unconnected-(U2-GPIO10-Pad14)*% X39095523Y-77708249D03* %TO.P,U2,15,GPIO11*% %TO.N,unconnected-(U2-GPIO11-Pad15)*% X39095523Y-80248249D03* %TO.P,U2,16,GPIO12*% %TO.N,unconnected-(U2-GPIO12-Pad16)*% X39095523Y-82788249D03* %TO.P,U2,17,GPIO13*% %TO.N,unconnected-(U2-GPIO13-Pad17)*% X39095523Y-85328249D03* %TO.P,U2,18,GND*% %TO.N,GND*% X39095523Y-87868249D03* %TO.P,U2,19,GPIO14*% %TO.N,Net-(J4-D+)*% X39095523Y-90408249D03* %TO.P,U2,20,GPIO15*% %TO.N,Net-(J4-D-)*% X39095523Y-92948249D03* %TO.P,U2,21,GPIO16*% %TO.N,/UART B TX*% X58675523Y-92948249D03* %TO.P,U2,22,GPIO17*% %TO.N,/UART B RX*% X58675523Y-90408249D03* %TO.P,U2,23,GND*% %TO.N,GND*% X58675523Y-87868249D03* %TO.P,U2,24,GPIO18*% %TO.N,unconnected-(U2-GPIO18-Pad24)*% X58675523Y-85328249D03* %TO.P,U2,25,GPIO19*% %TO.N,unconnected-(U2-GPIO19-Pad25)*% X58675523Y-82788249D03* %TO.P,U2,26,GPIO20*% %TO.N,unconnected-(U2-GPIO20-Pad26)*% X58675523Y-80248249D03* %TO.P,U2,27,GPIO21*% %TO.N,unconnected-(U2-GPIO21-Pad27)*% X58675523Y-77708249D03* %TO.P,U2,28,GND*% %TO.N,GND*% X58675523Y-75168249D03* %TO.P,U2,29,GPIO22*% %TO.N,unconnected-(U2-GPIO22-Pad29)*% X58675523Y-72628249D03* %TO.P,U2,30,RUN*% %TO.N,unconnected-(U2-RUN-Pad30)*% X58675523Y-70088249D03* %TO.P,U2,31,GPIO26_ADC0*% %TO.N,unconnected-(U2-GPIO26_ADC0-Pad31)*% X58675523Y-67548249D03* %TO.P,U2,32,GPIO27_ADC1*% %TO.N,unconnected-(U2-GPIO27_ADC1-Pad32)*% X58675523Y-65008249D03* %TO.P,U2,33,AGND*% %TO.N,unconnected-(U2-AGND-Pad33)*% X58675523Y-62468249D03* %TO.P,U2,34,GPIO28_ADC2*% %TO.N,unconnected-(U2-GPIO28_ADC2-Pad34)*% X58675523Y-59928249D03* %TO.P,U2,35,ADC_VREF*% %TO.N,unconnected-(U2-ADC_VREF-Pad35)*% X58675523Y-57388249D03* %TO.P,U2,36,3V3*% %TO.N,Net-(U2-3V3)*% X58675523Y-54848249D03* %TO.P,U2,37,3V3_EN*% %TO.N,unconnected-(U2-3V3_EN-Pad37)*% X58675523Y-52308249D03* %TO.P,U2,38,GND*% %TO.N,GND*% X58675523Y-49768249D03* %TO.P,U2,39,VSYS*% %TO.N,unconnected-(U2-VSYS-Pad39)*% X58675523Y-47228249D03* %TO.P,U2,40,VBUS*% %TO.N,Net-(J4-VBUS)*% X58675523Y-44688249D03* D11* %TO.P,U2,41,SWCLK*% %TO.N,Net-(J2-Pin_3)*% X46345523Y-93618249D03* %TO.P,U2,42,GND*% %TO.N,GND*% X48885523Y-93618249D03* %TO.P,U2,43,SWDIO*% %TO.N,Net-(J2-Pin_1)*% X51425523Y-93618249D03* %TD*% D12* %TO.P,H3,1,1*% %TO.N,GND2*% X67310000Y-45212000D03* D13* X67310000Y-45212000D03* %TD*% D14* %TO.P,C2,1*% %TO.N,Net-(U1-3V3)*% X69041691Y-74877665D03* %TO.P,C2,2*% %TO.N,GND2*% X72166691Y-74877665D03* %TD*% D15* %TO.P,J4,1,VBUS*% %TO.N,Net-(J4-VBUS)*% X45776000Y-101574000D03* D16* %TO.P,J4,2,D-*% %TO.N,Net-(J4-D-)*% X48276000Y-101574000D03* %TO.P,J4,3,D+*% %TO.N,Net-(J4-D+)*% X50276000Y-101574000D03* %TO.P,J4,4,GND*% %TO.N,GND*% X52776000Y-101574000D03* D17* %TO.P,J4,5,Shield*% X42706000Y-104284000D03* X55846000Y-104284000D03* %TD*% D18* %TO.P,J3,1,Pin_1*% %TO.N,Net-(J3-Pin_1)*% X95667537Y-99795757D03* D19* %TO.P,J3,2,Pin_2*% %TO.N,GND2*% X95667537Y-102335757D03* %TO.P,J3,3,Pin_3*% %TO.N,Net-(J3-Pin_3)*% X95667537Y-104875757D03* %TD*% D12* %TO.P,H2,1,1*% %TO.N,GND2*% X96774000Y-111506000D03* D13* X96774000Y-111506000D03* %TD*% D15* %TO.P,J1,1,VBUS*% %TO.N,Net-(J1-VBUS)*% X81082000Y-101574000D03* D16* %TO.P,J1,2,D-*% %TO.N,Net-(J1-D-)*% X83582000Y-101574000D03* %TO.P,J1,3,D+*% %TO.N,Net-(J1-D+)*% X85582000Y-101574000D03* %TO.P,J1,4,GND*% %TO.N,GND2*% X88082000Y-101574000D03* D17* %TO.P,J1,5,Shield*% X78012000Y-104284000D03* X91152000Y-104284000D03* %TD*% D12* %TO.P,H1,1,1*% %TO.N,GND*% X37846000Y-111506000D03* D13* X37846000Y-111506000D03* %TD*% D20* %TO.P,U4,1,VDD1*% %TO.N,Net-(U2-3V3)*% X64753070Y-82571110D03* %TO.P,U4,2,VOA*% %TO.N,/UART B RX*% X64753070Y-83841110D03* %TO.P,U4,3,VIB*% %TO.N,/UART B TX*% X64753070Y-85111110D03* %TO.P,U4,4,GND1*% %TO.N,GND*% X64753070Y-86381110D03* %TO.P,U4,5,GND2*% %TO.N,GND2*% X69703070Y-86381110D03* %TO.P,U4,6,VOB*% %TO.N,N/C*% X69703070Y-85111110D03* %TO.P,U4,7,VIA*% %TO.N,/UART A TX*% X69703070Y-83841110D03* %TO.P,U4,8,VDD2*% %TO.N,Net-(U1-3V3)*% X69703070Y-82571110D03* %TD*% D18* %TO.P,J2,1,Pin_1*% %TO.N,Net-(J2-Pin_1)*% X60731042Y-99717876D03* D19* %TO.P,J2,2,Pin_2*% %TO.N,GND*% X60731042Y-102257876D03* %TO.P,J2,3,Pin_3*% %TO.N,Net-(J2-Pin_3)*% X60731042Y-104797876D03* %TD*% D21* %TO.P,C1,1*% %TO.N,Net-(U2-3V3)*% X65572536Y-74929999D03* %TO.P,C1,2*% %TO.N,GND*% X62447536Y-74929999D03* %TD*% D22* %TO.N,GND*% X58013772Y-74930000D02* X57775523Y-75168249D01* X61937500Y-74930000D02* X58013772Y-74930000D01* %TO.N,Net-(J2-Pin_1)*% X58420000Y-99314000D02* X54610000Y-99314000D01* X60452000Y-99822000D02* X58928000Y-99822000D01* X58928000Y-99822000D02* X58420000Y-99314000D01* X51425523Y-96129523D02* X51425523Y-92718249D01* X54610000Y-99314000D02* X51425523Y-96129523D01* %TO.N,Net-(J2-Pin_3)*% X46345523Y-94578249D02* X48541274Y-96774000D01* X58674000Y-101092000D02* X58674000Y-103124000D01* X57906000Y-100324000D02* X58674000Y-101092000D01* X58674000Y-103124000D02* X60452000Y-104902000D01* X54096000Y-100324000D02* X57906000Y-100324000D01* X48541274Y-96774000D02* X50546000Y-96774000D01* X46345523Y-92718249D02* X46345523Y-94578249D01* X50546000Y-96774000D02* X54096000Y-100324000D01* %TO.N,Net-(J3-Pin_1)*% X91963000Y-99837000D02* X91186000Y-99060000D01* X87869000Y-93511000D02* X87884000Y-93496000D01* X91186000Y-99060000D02* X89662000Y-99060000D01* X87884000Y-97282000D02* X89662000Y-99060000D01* X87884000Y-93496000D02* X87884000Y-97282000D01* X95250000Y-99837000D02* X91963000Y-99837000D01* %TO.N,Net-(J3-Pin_3)*% X82789000Y-93511000D02* X82804000Y-93496000D01* X83841000Y-96393000D02* X85471000Y-96393000D01* X85471000Y-96393000D02* X89916000Y-100838000D01* X93472000Y-100838000D02* X94118941Y-101484941D01* X94118941Y-101484941D02* X94118941Y-103770941D01* X94118941Y-103770941D02* X95250000Y-104902000D01* X82804000Y-93496000D02* X82804000Y-95356000D01* X82804000Y-95356000D02* X83841000Y-96393000D01* X89916000Y-100838000D02* X93472000Y-100838000D01* %TO.N,Net-(U1-3V3)*% X70583420Y-55882998D02* X71760000Y-54706418D01* X96850223Y-43002223D02* X98806000Y-44958000D01* X70583420Y-71656580D02* X70583420Y-55882998D01* X69041691Y-74877665D02* X69041691Y-73198309D01* X69041691Y-81741691D02* X69850000Y-82550000D01* X98806000Y-54102000D02* X98044000Y-54864000D01* X69041691Y-73198309D02* X70583420Y-71656580D01* X71760000Y-54706418D02* X71760000Y-44404000D01* X69041691Y-74877665D02* X69041691Y-81741691D01* X71760000Y-44404000D02* X73161777Y-43002223D01* X98806000Y-44958000D02* X98806000Y-54102000D01* X98044000Y-54864000D02* X94234000Y-54864000D01* X73161777Y-43002223D02* X96850223Y-43002223D01* %TO.N,Net-(J1-D+)*% X84084000Y-100076000D02* X83385744Y-100076000D01* X77795094Y-91511094D02* X76708000Y-90424000D01* X85582000Y-101574000D02* X84084000Y-100076000D01* X76708000Y-90424000D02* X76454000Y-90424000D01* X77795094Y-94485350D02* X77795094Y-91511094D01* X85518500Y-101203000D02* X85582000Y-101203000D01* X83385744Y-100076000D02* X77795094Y-94485350D01* %TO.N,Net-(J1-D-)*% X76454000Y-92964000D02* X76454000Y-94234000D01* X83286000Y-101066000D02* X83582000Y-101066000D01* X76454000Y-94234000D02* X83286000Y-101066000D01* %TO.N,Net-(J1-VBUS)*% X92456000Y-44704000D02* X91440000Y-45720000D01* X97282000Y-107442000D02* X82296000Y-107442000D01* X94234000Y-44704000D02* X92456000Y-44704000D01* X91440000Y-45720000D02* X91440000Y-95758000D01* X81026000Y-106172000D02* X81082000Y-106116000D01* X97028000Y-97028000D02* X98298000Y-98298000D01* X98298000Y-98298000D02* X98298000Y-106426000D01* X98298000Y-106426000D02* X97282000Y-107442000D01* X91440000Y-95758000D02* X92710000Y-97028000D01* X92710000Y-97028000D02* X97028000Y-97028000D01* X81082000Y-106116000D02* X81082000Y-101828000D01* X82296000Y-107442000D02* X81026000Y-106172000D01* %TO.N,unconnected-(U1-GPIO13-Pad17)*% X69850000Y-85090000D02* X76200000Y-85090000D01* X76200000Y-85090000D02* X76454000Y-85344000D01* %TO.N,Net-(U2-3V3)*% X65572536Y-74929999D02* X65572536Y-81877464D01* X65572536Y-73192536D02* X65572536Y-74929999D01* X64026291Y-71646291D02* X65572536Y-73192536D01* X65572536Y-81877464D02* X64900000Y-82550000D01* X64026291Y-55662582D02* X64026291Y-71646291D01* X63211958Y-54848249D02* X64026291Y-55662582D01* X57775523Y-54848249D02* X63211958Y-54848249D01* %TO.N,GND2*% X72166691Y-74877665D02* X76147665Y-74877665D01* X76147665Y-74877665D02* X76454000Y-75184000D01* %TO.N,/UART A TX*% X69850000Y-83820000D02* X71949721Y-83820000D01* X71949721Y-83820000D02* X72965721Y-82804000D01* X72965721Y-82804000D02* X76454000Y-82804000D01* %TO.N,/UART B RX*% X58013772Y-90170000D02* X60960000Y-90170000D01* X60960000Y-90170000D02* X61681215Y-89448785D01* X62230000Y-83820000D02* X64900000Y-83820000D01* X61681215Y-84368785D02* X62230000Y-83820000D01* X57775523Y-90408249D02* X58013772Y-90170000D01* X61681215Y-89448785D02* X61681215Y-84368785D01* %TO.N,Net-(J4-VBUS)*% X56149751Y-44688249D02* X57775523Y-44688249D01* X45776000Y-106228000D02* X46990000Y-107442000D01* X46990000Y-107442000D02* X62738000Y-107442000D01* X63754000Y-106426000D02* X63754000Y-97790000D01* X54864000Y-94742000D02* X54864000Y-45974000D01* X62738000Y-107442000D02* X63754000Y-106426000D01* X56388000Y-96266000D02* X54864000Y-94742000D01* X54864000Y-45974000D02* X56149751Y-44688249D01* X63754000Y-97790000D02* X62230000Y-96266000D01* X45776000Y-101574000D02* X45776000Y-106228000D01* X62230000Y-96266000D02* X56388000Y-96266000D01* %TO.N,Net-(J4-D-)*% X48276000Y-101574000D02* X48276000Y-101362000D01* X39995523Y-93843523D02* X39995523Y-92948249D01* X45974000Y-99822000D02* X39995523Y-93843523D01* X48276000Y-101362000D02* X46736000Y-99822000D01* X47726000Y-101574000D02* X48276000Y-101574000D01* X46736000Y-99822000D02* X45974000Y-99822000D01* %TO.N,Net-(J4-D+)*% X46254170Y-99080626D02* X47067614Y-99080626D01* X41402000Y-90678000D02* X41402000Y-94228456D01* X40894000Y-90424000D02* X41148000Y-90424000D01* X47067614Y-99080626D02* X48062988Y-100076000D01* X48062988Y-100076000D02* X49022000Y-100076000D01* X41402000Y-94228456D02* X46254170Y-99080626D01* X41148000Y-90424000D02* X41402000Y-90678000D01* X50022000Y-101076000D02* X50022000Y-101203000D01* X49022000Y-100076000D02* X50022000Y-101076000D01* %TO.N,/UART B TX*% X57775523Y-92948249D02* X60531206Y-92948249D01* X60531206Y-92948249D02* X62962639Y-90516816D01* X63500000Y-85090000D02* X64900000Y-85090000D01* X62962639Y-90516816D02* X62962639Y-85627361D01* X62962639Y-85627361D02* X63500000Y-85090000D01* %TD*% %TA.AperFunction,Conductor*% %TO.N,GND2*% G36* X100607112Y-41130309D02* G01* X100652867Y-41183113D01* X100664073Y-41234624D01* X100664073Y-115416875D01* X100644388Y-115483914D01* X100591584Y-115529669D01* X100540073Y-115540875D01* X68155298Y-115540875D01* X68088259Y-115521190D01* X68042504Y-115468386D01* X68031298Y-115416806D01* X68032335Y-113556000D01* X68033477Y-111506000D01* X94719210Y-111506000D01* X94738347Y-111785794D01* X94738348Y-111785796D01* X94795403Y-112060364D01* X94795408Y-112060381D01* X94889319Y-112324622D01* X94889320Y-112324624D01* X95018348Y-112573637D01* X95018352Y-112573643D01* X95156744Y-112769699D01* X95156745Y-112769700D01* X95659073Y-112267372D01* X95735890Y-112377078D01* X95902922Y-112544110D01* X96012626Y-112620925D01* X95511740Y-113121811D01* X95589046Y-113184704D01* X95828664Y-113330419D01* X95828668Y-113330421D01* X96085888Y-113442146D01* X96355935Y-113517810D01* X96355941Y-113517811D01* X96633775Y-113556000D01* X96914225Y-113556000D01* X97192058Y-113517811D01* X97192064Y-113517810D01* X97462111Y-113442146D01* X97719331Y-113330421D01* X97719335Y-113330419D01* X97958950Y-113184706D01* X97958965Y-113184696D01* X98036258Y-113121811D01* X97535373Y-112620925D01* X97645078Y-112544110D01* X97812110Y-112377078D01* X97888926Y-112267372D01* X98391253Y-112769699D01* X98529651Y-112573636D01* X98658679Y-112324624D01* X98658680Y-112324622D01* X98752591Y-112060381D01* X98752596Y-112060364D01* X98809651Y-111785796D01* X98809652Y-111785794D01* X98828789Y-111506000D01* X98809652Y-111226205D01* X98809651Y-111226203D01* X98752596Y-110951635D01* X98752591Y-110951618D01* X98658680Y-110687377D01* X98658679Y-110687375D01* X98529651Y-110438363D01* X98391253Y-110242299D01* X97888925Y-110744626D01* X97812110Y-110634922D01* X97645078Y-110467890D01* X97535372Y-110391073D01* X98036258Y-109890187D01* X97958953Y-109827295D01* X97719335Y-109681580D01* X97719331Y-109681578D01* X97462111Y-109569853D01* X97192064Y-109494189D01* X97192058Y-109494188D01* X96914225Y-109456000D01* X96633775Y-109456000D01* X96355941Y-109494188D01* X96355935Y-109494189D01* X96085888Y-109569853D01* X95828670Y-109681577D01* X95589038Y-109827301D01* X95589034Y-109827304D01* X95511740Y-109890187D01* X96012627Y-110391073D01* X95902922Y-110467890D01* X95735890Y-110634922D01* X95659073Y-110744626D01* X95156745Y-110242298D01* X95018352Y-110438356D01* X95018348Y-110438362D01* X94889320Y-110687375D01* X94889319Y-110687377D01* X94795408Y-110951618D01* X94795403Y-110951635D01* X94738348Y-111226203D01* X94738347Y-111226205D01* X94719210Y-111506000D01* X68033477Y-111506000D01* X68037502Y-104284001D01* X76006891Y-104284001D01* X76027300Y-104569362D01* X76088109Y-104848895D01* X76188091Y-105116958D01* X76325191Y-105368038D01* X76325196Y-105368046D01* X76431882Y-105510561D01* X76431883Y-105510562D01* X77041438Y-104901006D01* X77090348Y-104979999D01* X77233931Y-105137501D01* X77392388Y-105257163D01* X76785436Y-105864115D01* X76927960Y-105970807D01* X76927961Y-105970808D01* X77179042Y-106107908D01* X77179041Y-106107908D01* X77447104Y-106207890D01* X77726637Y-106268699D01* X78011999Y-106289109D01* X78012001Y-106289109D01* X78297362Y-106268699D01* X78576895Y-106207890D01* X78844958Y-106107908D01* X79096047Y-105970803D01* X79238561Y-105864116D01* X79238562Y-105864115D01* X78631611Y-105257163D01* X78790069Y-105137501D01* X78933652Y-104979999D01* X78982560Y-104901007D01* X79592115Y-105510562D01* X79592116Y-105510561D01* X79698803Y-105368047D01* X79835908Y-105116958D01* X79935890Y-104848895D01* X79996699Y-104569362D01* X80017109Y-104284001D01* X80017109Y-104283998D01* X79996699Y-103998637D01* X79935890Y-103719104D01* X79835908Y-103451041D01* X79698808Y-103199961D01* X79698807Y-103199960D01* X79592115Y-103057436D01* X78982560Y-103666991D01* X78933652Y-103588001D01* X78790069Y-103430499D01* X78631610Y-103310835D01* X79238562Y-102703883D01* X79238561Y-102703882D01* X79096046Y-102597196D01* X79096038Y-102597191D01* X78844957Y-102460091D01* X78844958Y-102460091D01* X78576895Y-102360109D01* X78297362Y-102299300D01* X78012001Y-102278891D01* X78011999Y-102278891D01* X77726637Y-102299300D01* X77447104Y-102360109D01* X77179041Y-102460091D01* X76927961Y-102597191D01* X76927953Y-102597196D01* X76785437Y-102703882D01* X76785436Y-102703883D01* X77392389Y-103310835D01* X77233931Y-103430499D01* X77090348Y-103588001D01* X77041439Y-103666992D01* X76431883Y-103057436D01* X76431882Y-103057437D01* X76325196Y-103199953D01* X76325191Y-103199961D01* X76188091Y-103451041D01* X76088109Y-103719104D01* X76027300Y-103998637D01* X76006891Y-104283998D01* X76006891Y-104284001D01* X68037502Y-104284001D01* X68047213Y-86856314D01* X68066935Y-86789287D01* X68119764Y-86743562D01* X68188928Y-86733657D01* X68252468Y-86762717D01* X68277945Y-86793264D01* X68360384Y-86932662D01* X68360391Y-86932671D01* X68476508Y-87048788D01* X68476517Y-87048795D01* X68617873Y-87132392D01* X68617876Y-87132393D01* X68775574Y-87178209D01* X68775580Y-87178210D01* X68812426Y-87181110D01* X69453070Y-87181110D01* X69453070Y-86631110D01* X69953070Y-86631110D01* X69953070Y-87181110D01* X70593714Y-87181110D01* X70630559Y-87178210D01* X70630565Y-87178209D01* X70788263Y-87132393D01* X70788266Y-87132392D01* X70929622Y-87048795D01* X70929631Y-87048788D01* X71045748Y-86932671D01* X71045755Y-86932662D01* X71129351Y-86791308D01* X71175170Y-86633596D01* X71175365Y-86631111D01* X71175365Y-86631110D01* X69953070Y-86631110D01* X69453070Y-86631110D01* X69453070Y-86255110D01* X69472755Y-86188071D01* X69525559Y-86142316D01* X69577070Y-86131110D01* X71175365Y-86131110D01* X71175365Y-86131108D01* X71175170Y-86128621D01* X71175169Y-86128615D01* X71139864Y-86007095D01* X71140063Y-85937226D01* X71178005Y-85878556D01* X71241643Y-85849712D01* X71258940Y-85848500D01* X73171500Y-85848500D01* X73238539Y-85868185D01* X73284294Y-85920989D01* X73295500Y-85972500D01* X73295500Y-86242654D01* X73302011Y-86303202D01* X73302011Y-86303204D01* X73353111Y-86440204D01* X73432893Y-86546780D01* X73457310Y-86612245D01* X73442458Y-86680518D01* X73432893Y-86695402D01* X73360647Y-86791910D01* X73360645Y-86791913D01* X73310403Y-86926620D01* X73310401Y-86926627D01* X73304000Y-86986155D01* X73304000Y-87634000D01* X77804000Y-87634000D01* X77804000Y-86986172D01* X77803999Y-86986155D01* X77797598Y-86926627D01* X77797596Y-86926620D01* X77747354Y-86791913D01* X77747353Y-86791911D01* X77675106Y-86695402D01* X77650689Y-86629938D01* X77665540Y-86561665D01* X77675099Y-86546789D01* X77754889Y-86440204D01* X77805989Y-86303201D01* X77809591Y-86269692D01* X77812499Y-86242654D01* X77812500Y-86242637D01* X77812500Y-84445362D01* X77812499Y-84445345D01* X77809157Y-84414270D01* X77805989Y-84384799D01* X77787558Y-84335385D01* X77754888Y-84247793D01* X77754887Y-84247792D01* X77680415Y-84148311D01* X77655997Y-84082847D01* X77670848Y-84014574D01* X77680415Y-83999689D01* X77754887Y-83900207D01* X77754888Y-83900206D01* X77805988Y-83763204D01* X77805988Y-83763203D01* X77805989Y-83763201D01* X77809591Y-83729692D01* X77812499Y-83702654D01* X77812500Y-83702637D01* X77812500Y-81905362D01* X77812499Y-81905345D01* X77809157Y-81874270D01* X77805989Y-81844799D01* X77802332Y-81834995D01* X77754888Y-81707793D01* X77754887Y-81707792D01* X77680415Y-81608311D01* X77655997Y-81542847D01* X77670848Y-81474574D01* X77680415Y-81459689D01* X77754887Y-81360207D01* X77754888Y-81360206D01* X77805988Y-81223204D01* X77805988Y-81223203D01* X77805989Y-81223201D01* X77809591Y-81189692D01* X77812499Y-81162654D01* X77812500Y-81162637D01* X77812500Y-79365362D01* X77812499Y-79365345D01* X77809157Y-79334270D01* X77805989Y-79304799D01* X77754889Y-79167796D01* X77754888Y-79167793D01* X77754887Y-79167792D01* X77680415Y-79068311D01* X77655997Y-79002847D01* X77670848Y-78934574D01* X77680415Y-78919689D01* X77754887Y-78820207D01* X77754888Y-78820206D01* X77805988Y-78683204D01* X77805988Y-78683203D01* X77805989Y-78683201D01* X77809591Y-78649692D01* X77812499Y-78622654D01* X77812500Y-78622637D01* X77812500Y-76825362D01* X77812499Y-76825345D01* X77809157Y-76794270D01* X77805989Y-76764799D01* X77754889Y-76627796D01* X77675105Y-76521218D01* X77650689Y-76455754D01* X77665541Y-76387481D01* X77675107Y-76372596D01* X77747352Y-76276089D01* X77747354Y-76276086D01* X77797596Y-76141379D01* X77797598Y-76141372D01* X77803999Y-76081844D01* X77804000Y-76081827D01* X77804000Y-75434000D01* X75428000Y-75434000D01* X75360961Y-75414315D01* X75315206Y-75361511D01* X75304000Y-75310000D01* X75304000Y-75058000D01* X75323685Y-74990961D01* X75376489Y-74945206D01* X75428000Y-74934000D01* X77804000Y-74934000D01* X77804000Y-74286172D01* X77803999Y-74286155D01* X77797598Y-74226627D01* X77797596Y-74226620D01* X77747354Y-74091913D01* X77747353Y-74091911D01* X77675106Y-73995402D01* X77650689Y-73929938D01* X77665540Y-73861665D01* X77675099Y-73846789D01* X77754889Y-73740204D01* X77805989Y-73603201D01* X77809591Y-73569692D01* X77812499Y-73542654D01* X77812500Y-73542637D01* X77812500Y-71745362D01* X77812499Y-71745345D01* X77809157Y-71714270D01* X77805989Y-71684799D01* X77791338Y-71645519D01* X77754888Y-71547793D01* X77754887Y-71547792D01* X77680415Y-71448311D01* X77655997Y-71382847D01* X77670848Y-71314574D01* X77680415Y-71299689D01* X77754887Y-71200207D01* X77754888Y-71200206D01* X77805988Y-71063204D01* X77805988Y-71063203D01* X77805989Y-71063201D01* X77809591Y-71029692D01* X77812499Y-71002654D01* X77812500Y-71002637D01* X77812500Y-69205362D01* X77812499Y-69205345D01* X77809157Y-69174270D01* X77805989Y-69144799D01* X77754889Y-69007796D01* X77754888Y-69007793D01* X77754887Y-69007792D01* X77680415Y-68908311D01* X77655997Y-68842847D01* X77670848Y-68774574D01* X77680415Y-68759689D01* X77754887Y-68660207D01* X77754888Y-68660206D01* X77805988Y-68523204D01* X77805988Y-68523203D01* X77805989Y-68523201D01* X77809591Y-68489692D01* X77812499Y-68462654D01* X77812500Y-68462637D01* X77812500Y-66665362D01* X77812499Y-66665345D01* X77809157Y-66634270D01* X77805989Y-66604799D01* X77754889Y-66467796D01* X77754888Y-66467793D01* X77754887Y-66467792D01* X77680415Y-66368311D01* X77655997Y-66302847D01* X77670848Y-66234574D01* X77680415Y-66219689D01* X77754887Y-66120207D01* X77754888Y-66120206D01* X77805988Y-65983204D01* X77805988Y-65983203D01* X77805989Y-65983201D01* X77809591Y-65949692D01* X77812499Y-65922654D01* X77812500Y-65922637D01* X77812500Y-64125362D01* X77812499Y-64125345D01* X77809157Y-64094270D01* X77805989Y-64064799D01* X77754889Y-63927796D01* X77675105Y-63821218D01* X77650689Y-63755754D01* X77665541Y-63687481D01* X77675107Y-63672596D01* X77747352Y-63576089D01* X77747354Y-63576086D01* X77797596Y-63441379D01* X77797598Y-63441372D01* X77803999Y-63381844D01* X77804000Y-63381827D01* X77804000Y-62734000D01* X73304000Y-62734000D01* X73304000Y-63381844D01* X73310401Y-63441372D01* X73310403Y-63441379D01* X73360645Y-63576086D01* X73360646Y-63576088D01* X73432893Y-63672597D01* X73457310Y-63738061D01* X73442459Y-63806334D01* X73432893Y-63821218D01* X73353112Y-63927793D01* X73353111Y-63927793D01* X73302011Y-64064795D01* X73302011Y-64064797D01* X73295500Y-64125345D01* X73295500Y-65922654D01* X73302011Y-65983202D01* X73302011Y-65983204D01* X73353111Y-66120204D01* X73427585Y-66219689D01* X73452002Y-66285154D01* X73437150Y-66353427D01* X73427585Y-66368311D01* X73353111Y-66467795D01* X73302011Y-66604795D01* X73302011Y-66604797D01* X73295500Y-66665345D01* X73295500Y-68462654D01* X73302011Y-68523202D01* X73302011Y-68523204D01* X73353111Y-68660204D01* X73427585Y-68759689D01* X73452002Y-68825154D01* X73437150Y-68893427D01* X73427585Y-68908311D01* X73353111Y-69007795D01* X73302011Y-69144795D01* X73302011Y-69144797D01* X73295500Y-69205345D01* X73295500Y-71002654D01* X73302011Y-71063202D01* X73302011Y-71063204D01* X73353111Y-71200204D01* X73427585Y-71299689D01* X73452002Y-71365154D01* X73437150Y-71433427D01* X73427585Y-71448311D01* X73353111Y-71547795D01* X73302011Y-71684795D01* X73302011Y-71684797D01* X73295500Y-71745345D01* X73295500Y-73542640D01* X73298965Y-73574872D01* X73286558Y-73643632D01* X73238947Y-73694768D01* X73171248Y-73712047D01* X73104954Y-73689981D01* X73087994Y-73675807D01* X73047536Y-73635349D01* X72898315Y-73543308D01* X72898310Y-73543306D01* X72731888Y-73488159D01* X72731881Y-73488158D01* X72629177Y-73477665D01* X72416691Y-73477665D01* X72416691Y-76277664D01* X72629163Y-76277664D01* X72629177Y-76277663D01* X72731888Y-76267170D01* X72898310Y-76212023D01* X72898315Y-76212021D01* X73047536Y-76119980D01* X73099540Y-76067976D01* X73160863Y-76034490D01* X73230555Y-76039474D01* X73286488Y-76081345D01* X73307270Y-76134150D01* X73308620Y-76133832D01* X73310403Y-76141379D01* X73360645Y-76276086D01* X73360646Y-76276088D01* X73432893Y-76372597D01* X73457310Y-76438061D01* X73442459Y-76506334D01* X73432893Y-76521218D01* X73353112Y-76627793D01* X73353111Y-76627793D01* X73302011Y-76764795D01* X73302011Y-76764797D01* X73295500Y-76825345D01* X73295500Y-78622654D01* X73302011Y-78683202D01* X73302011Y-78683204D01* X73353111Y-78820204D01* X73427585Y-78919689D01* X73452002Y-78985154D01* X73437150Y-79053427D01* X73427585Y-79068311D01* X73353111Y-79167795D01* X73302011Y-79304795D01* X73302011Y-79304797D01* X73295500Y-79365345D01* X73295500Y-81162654D01* X73302011Y-81223202D01* X73302011Y-81223204D01* X73353111Y-81360204D01* X73427585Y-81459689D01* X73452002Y-81525154D01* X73437150Y-81593427D01* X73427585Y-81608311D01* X73353111Y-81707795D01* X73302011Y-81844795D01* X73302011Y-81844797D01* X73295500Y-81905345D01* X73295500Y-81921500D01* X73275815Y-81988539D01* X73223011Y-82034294D01* X73171500Y-82045500D01* X73030015Y-82045500D01* X73012045Y-82044191D01* X72987927Y-82040658D01* X72942372Y-82044645D01* X72935294Y-82045264D01* X72929893Y-82045500D01* X72921540Y-82045500D01* X72888624Y-82049347D01* X72811295Y-82056112D01* X72804227Y-82057572D01* X72804217Y-82057528D01* X72796627Y-82059210D01* X72796638Y-82059254D01* X72789614Y-82060919D01* X72789608Y-82060920D01* X72789608Y-82060921D01* X72765135Y-82069827D01* X72716654Y-82087473D01* X72642978Y-82111887D01* X72636441Y-82114936D01* X72636421Y-82114894D01* X72629417Y-82118285D01* X72629438Y-82118326D01* X72622990Y-82121564D01* X72558115Y-82164233D01* X72492073Y-82204967D01* X72486404Y-82209450D01* X72486374Y-82209413D01* X72480348Y-82214322D01* X72480378Y-82214357D01* X72474853Y-82218993D01* X72421557Y-82275482D01* X71671859Y-83025181D01* X71610536Y-83058666D01* X71584178Y-83061500D01* X71280058Y-83061500D01* X71213019Y-83041815D01* X71167264Y-82989011D01* X71157320Y-82919853D01* X71160982Y-82902905D01* X71183631Y-82824945D01* X71183632Y-82824939D01* X71186570Y-82787615D01* X71186570Y-82354605D01* X71183632Y-82317280D01* X71183631Y-82317274D01* X71145328Y-82185434D01* X71137215Y-82157509D01* X71052523Y-82014303D01* X71052521Y-82014301D01* X71052518Y-82014297D01* X70934882Y-81896661D01* X70934873Y-81896654D01* X70791671Y-81811965D01* X70791666Y-81811963D01* X70631905Y-81765548D01* X70631899Y-81765547D01* X70594575Y-81762610D01* X70594572Y-81762610D01* X70186653Y-81762610D01* X70119614Y-81742925D01* X70098972Y-81726291D01* X69836510Y-81463829D01* X69803025Y-81402506D01* X69800191Y-81376148D01* X69800191Y-76274638D01* X69819876Y-76207599D01* X69859092Y-76169100D01* X69927843Y-76126695D01* X70053221Y-76001317D01* X70146306Y-75850403D01* X70202078Y-75682091D01* X70212691Y-75578210D01* X70212691Y-75127665D01* X71004192Y-75127665D01* X71004192Y-75577651D01* X71014685Y-75680362D01* X71069832Y-75846784D01* X71069834Y-75846789D01* X71161875Y-75996010D01* X71285845Y-76119980D01* X71435066Y-76212021D01* X71435071Y-76212023D01* X71601493Y-76267170D01* X71601500Y-76267171D01* X71704210Y-76277664D01* X71916690Y-76277664D01* X71916691Y-76277663D01* X71916691Y-75127665D01* X71004192Y-75127665D01* X70212691Y-75127665D01* X70212690Y-74627665D01* X71004191Y-74627665D01* X71916691Y-74627665D01* X71916691Y-73477665D01* X71704220Y-73477665D01* X71704203Y-73477666D01* X71601493Y-73488159D01* X71435071Y-73543306D01* X71435066Y-73543308D01* X71285845Y-73635349D01* X71161875Y-73759319D01* X71069834Y-73908540D01* X71069832Y-73908545D01* X71014685Y-74074967D01* X71014684Y-74074974D01* X71004191Y-74177678D01* X71004191Y-74627665D01* X70212690Y-74627665D01* X70212690Y-74177121D01* X70202078Y-74073239D01* X70146306Y-73904927D01* X70053221Y-73754013D01* X69927843Y-73628635D01* X69910528Y-73617955D01* X69863804Y-73566009D01* X69852581Y-73497047D01* X69880424Y-73432965D01* X69887934Y-73424746D01* X71074300Y-72238379D01* X71087926Y-72226603D01* X71107478Y-72212049D01* X71141435Y-72171580D01* X71145095Y-72167585D01* X71151000Y-72161681D01* X71171556Y-72135683D01* X71221452Y-72076220D01* X71221453Y-72076219D01* X71225423Y-72070183D01* X71225463Y-72070209D01* X71229632Y-72063666D01* X71229591Y-72063641D01* X71233384Y-72057491D01* X71233385Y-72057488D01* X71233387Y-72057486D01* X71266193Y-71987132D01* X71301029Y-71917768D01* X71301030Y-71917760D01* X71303499Y-71910980D01* X71303546Y-71910997D01* X71306098Y-71903655D01* X71306051Y-71903640D01* X71308320Y-71896791D01* X71308320Y-71896789D01* X71308322Y-71896786D01* X71324019Y-71820761D01* X71341920Y-71745236D01* X71341920Y-71745234D01* X71341921Y-71745230D01* X71342759Y-71738063D01* X71342806Y-71738068D01* X71343596Y-71730337D01* X71343549Y-71730333D01* X71344178Y-71723142D01* X71343062Y-71684795D01* X71341920Y-71645519D01* X71341920Y-60842654D01* X73295500Y-60842654D01* X73302011Y-60903202D01* X73302011Y-60903204D01* X73353111Y-61040204D01* X73432893Y-61146780D01* X73457310Y-61212245D01* X73442458Y-61280518D01* X73432893Y-61295402D01* X73360647Y-61391910D01* X73360645Y-61391913D01* X73310403Y-61526620D01* X73310401Y-61526627D01* X73304000Y-61586155D01* X73304000Y-62234000D01* X77804000Y-62234000D01* X77804000Y-61586172D01* X77803999Y-61586155D01* X77797598Y-61526627D01* X77797596Y-61526620D01* X77747354Y-61391913D01* X77747353Y-61391911D01* X77675106Y-61295402D01* X77650689Y-61229938D01* X77665540Y-61161665D01* X77675099Y-61146789D01* X77754889Y-61040204D01* X77805989Y-60903201D01* X77809591Y-60869692D01* X77812499Y-60842654D01* X77812500Y-60842637D01* X77812500Y-59045362D01* X77812499Y-59045345D01* X77809157Y-59014270D01* X77805989Y-58984799D01* X77754889Y-58847796D01* X77754888Y-58847793D01* X77754887Y-58847792D01* X77680415Y-58748311D01* X77655997Y-58682847D01* X77670848Y-58614574D01* X77680415Y-58599689D01* X77754887Y-58500207D01* X77754888Y-58500206D01* X77805988Y-58363204D01* X77805988Y-58363203D01* X77805989Y-58363201D01* X77809591Y-58329692D01* X77812499Y-58302654D01* X77812500Y-58302637D01* X77812500Y-56505362D01* X77812499Y-56505345D01* X77809157Y-56474270D01* X77805989Y-56444799D01* X77754889Y-56307796D01* X77754888Y-56307793D01* X77754887Y-56307792D01* X77680415Y-56208311D01* X77655997Y-56142847D01* X77670848Y-56074574D01* X77680415Y-56059689D01* X77754887Y-55960207D01* X77754888Y-55960206D01* X77805988Y-55823204D01* X77805988Y-55823203D01* X77805989Y-55823201D01* X77809591Y-55789692D01* X77812499Y-55762654D01* X77812500Y-55762637D01* X77812500Y-53965362D01* X77812499Y-53965345D01* X77809157Y-53934270D01* X77805989Y-53904799D01* X77754889Y-53767796D01* X77754888Y-53767793D01* X77754887Y-53767792D01* X77680415Y-53668311D01* X77655997Y-53602847D01* X77670848Y-53534574D01* X77680415Y-53519689D01* X77754887Y-53420207D01* X77754888Y-53420206D01* X77805988Y-53283204D01* X77805988Y-53283203D01* X77805989Y-53283201D01* X77809591Y-53249692D01* X77812499Y-53222654D01* X77812500Y-53222637D01* X77812500Y-51425362D01* X77812499Y-51425345D01* X77809157Y-51394270D01* X77805989Y-51364799D01* X77754889Y-51227796D01* X77675105Y-51121218D01* X77650689Y-51055754D01* X77665541Y-50987481D01* X77675107Y-50972596D01* X77747352Y-50876089D01* X77747354Y-50876086D01* X77797596Y-50741379D01* X77797598Y-50741372D01* X77803999Y-50681844D01* X77804000Y-50681827D01* X77804000Y-50034000D01* X73304000Y-50034000D01* X73304000Y-50681844D01* X73310401Y-50741372D01* X73310403Y-50741379D01* X73360645Y-50876086D01* X73360646Y-50876088D01* X73432893Y-50972597D01* X73457310Y-51038061D01* X73442459Y-51106334D01* X73432893Y-51121218D01* X73353112Y-51227793D01* X73353111Y-51227793D01* X73302011Y-51364795D01* X73302011Y-51364797D01* X73295500Y-51425345D01* X73295500Y-53222654D01* X73302011Y-53283202D01* X73302011Y-53283204D01* X73353111Y-53420204D01* X73427585Y-53519689D01* X73452002Y-53585154D01* X73437150Y-53653427D01* X73427585Y-53668311D01* X73353111Y-53767795D01* X73302011Y-53904795D01* X73302011Y-53904797D01* X73295500Y-53965345D01* X73295500Y-55762654D01* X73302011Y-55823202D01* X73302011Y-55823204D01* X73353111Y-55960204D01* X73427585Y-56059689D01* X73452002Y-56125154D01* X73437150Y-56193427D01* X73427585Y-56208311D01* X73353111Y-56307795D01* X73302011Y-56444795D01* X73302011Y-56444797D01* X73295500Y-56505345D01* X73295500Y-58302654D01* X73302011Y-58363202D01* X73302011Y-58363204D01* X73353111Y-58500204D01* X73427585Y-58599689D01* X73452002Y-58665154D01* X73437150Y-58733427D01* X73427585Y-58748311D01* X73353111Y-58847795D01* X73302011Y-58984795D01* X73302011Y-58984797D01* X73295500Y-59045345D01* X73295500Y-60842654D01* X71341920Y-60842654D01* X71341920Y-56248540D01* X71361605Y-56181501D01* X71378235Y-56160863D01* X72250880Y-55288217D01* X72264506Y-55276441D01* X72284058Y-55261887D01* X72318015Y-55221418D01* X72321675Y-55217423D01* X72327580Y-55211519D01* X72348136Y-55185521D01* X72398032Y-55126058D01* X72398033Y-55126057D01* X72402003Y-55120021D01* X72402044Y-55120048D01* X72406219Y-55113494D01* X72406177Y-55113468D01* X72409963Y-55107328D01* X72409967Y-55107324D01* X72442775Y-55036964D01* X72477609Y-54967606D01* X72477611Y-54967597D01* X72480080Y-54960817D01* X72480126Y-54960834D01* X72482678Y-54953493D01* X72482631Y-54953478D01* X72484901Y-54946628D01* X72484902Y-54946625D01* X72500600Y-54870595D01* X72518500Y-54795074D01* X72518500Y-54795072D01* X72518501Y-54795068D01* X72519339Y-54787901D01* X72519386Y-54787906D01* X72520176Y-54780175D01* X72520129Y-54780171D01* X72520758Y-54772980D01* X72518500Y-54695372D01* X72518500Y-44769543D01* X72538185Y-44702504D01* X72554819Y-44681862D01* X73083819Y-44152862D01* X73145142Y-44119377D01* X73214834Y-44124361D01* X73270767Y-44166233D01* X73295184Y-44231697D01* X73295500Y-44240543D01* X73295500Y-45602654D01* X73302011Y-45663202D01* X73302011Y-45663204D01* X73341070Y-45767922D01* X73353111Y-45800204D01* X73427097Y-45899038D01* X73427585Y-45899689D01* X73452002Y-45965154D01* X73437150Y-46033427D01* X73427585Y-46048311D01* X73353111Y-46147795D01* X73302011Y-46284795D01* X73302011Y-46284797D01* X73295500Y-46345345D01* X73295500Y-48142654D01* X73302011Y-48203202D01* X73302011Y-48203204D01* X73353111Y-48340204D01* X73432893Y-48446780D01* X73457310Y-48512245D01* X73442458Y-48580518D01* X73432893Y-48595402D01* X73360647Y-48691910D01* X73360645Y-48691913D01* X73310403Y-48826620D01* X73310401Y-48826627D01* X73304000Y-48886155D01* X73304000Y-49534000D01* X77804000Y-49534000D01* X77804000Y-48886172D01* X77803999Y-48886155D01* X77797598Y-48826627D01* X77797596Y-48826620D01* X77747354Y-48691913D01* X77747353Y-48691911D01* X77675106Y-48595402D01* X77650689Y-48529938D01* X77665540Y-48461665D01* X77675099Y-48446789D01* X77754889Y-48340204D01* X77805989Y-48203201D01* X77809883Y-48166978D01* X77812499Y-48142654D01* X77812500Y-48142637D01* X77812500Y-47863998D01* X81655693Y-47863998D01* X81657672Y-47886639D01* X81657846Y-47894829D01* X81656684Y-47920688D01* X81656685Y-47920690D01* X81667691Y-48001946D01* X81668016Y-48004864D01* X81670532Y-48033615D01* X81674885Y-48083371D01* X81681624Y-48108523D01* X81683174Y-48116243D01* X81687093Y-48145173D01* X81687096Y-48145183D01* X81711413Y-48220023D01* X81712334Y-48223134D01* X81731877Y-48296066D01* X81731881Y-48296078D01* X81744275Y-48322659D01* X81747051Y-48329705D01* X81757095Y-48360616D01* X81757097Y-48360621D01* X81766105Y-48377360D01* X81792822Y-48427010D01* X81794416Y-48430187D01* X81824942Y-48495651D01* X81824943Y-48495653D01* X81824944Y-48495654D01* X81843668Y-48522396D01* X81847475Y-48528574D01* X81864443Y-48560105D01* X81864445Y-48560108D01* X81909397Y-48616475D01* X81911709Y-48619567D01* X81951251Y-48676038D01* X81951254Y-48676041D01* X81976659Y-48701446D01* X81981295Y-48706633D01* X82005686Y-48737218D01* X82057514Y-48782499D01* X82060557Y-48785344D01* X82106955Y-48831743D01* X82106956Y-48831744D01* X82106959Y-48831746D01* X82106962Y-48831749D01* X82138487Y-48853822D01* X82139109Y-48854258D01* X82144341Y-48858357D01* X82176282Y-48886263D01* X82232535Y-48919872D01* X82236258Y-48922283D01* X82272750Y-48947835D01* X82287338Y-48958051D01* X82287341Y-48958052D01* X82287346Y-48958056D01* X82325910Y-48976038D01* X82331493Y-48978997D01* X82370750Y-49002453D01* X82429010Y-49024317D01* X82433422Y-49026171D01* X82486924Y-49051120D01* X82531204Y-49062984D01* X82536939Y-49064824D01* X82566356Y-49075864D01* X82582839Y-49082051D01* X82640813Y-49092571D01* X82645778Y-49093685D01* X82699629Y-49108115D01* X82748602Y-49112399D01* X82754250Y-49113157D01* X82793352Y-49120253D01* X82805732Y-49122500D01* X82805733Y-49122500D01* X82861348Y-49122500D01* X82866749Y-49122735D01* X82895370Y-49125239D01* X82918998Y-49127307D01* X82918999Y-49127307D01* X82918999Y-49127306D01* X82919000Y-49127307D01* X82972310Y-49122643D01* X82975504Y-49122500D01* X82975522Y-49122500D01* X83023625Y-49118169D01* X83030391Y-49117561D01* X83138353Y-49108117D01* X83138357Y-49108116D01* X83138371Y-49108115D01* X83138383Y-49108111D01* X83138902Y-49108020D01* X83144136Y-49107324D01* X83144622Y-49107281D01* X83249335Y-49078381D01* X83351076Y-49051120D01* X83351089Y-49051113D01* X83358029Y-49048588D01* X83362720Y-49047089D01* X83362993Y-49047014D01* X83458019Y-49001251D01* X83550654Y-48958056D01* X83550663Y-48958049D01* X83555350Y-48955345D01* X83555421Y-48955468D01* X83566206Y-48949152D01* X83567093Y-48948725D01* X83649868Y-48888585D01* X83731038Y-48831749D01* X83731951Y-48830835D01* X83746752Y-48818193D01* X83750363Y-48815571D01* X83781990Y-48782492D01* X83818902Y-48743884D01* X83886746Y-48676041D01* X83886746Y-48676040D01* X83886749Y-48676038D01* X83889476Y-48672142D01* X83901428Y-48657568D01* X83906912Y-48651834D01* X83959809Y-48571697D01* X84013056Y-48495654D01* X84016538Y-48488185D01* X84025436Y-48472276D01* X84031709Y-48462774D01* X84068216Y-48377360D01* X84106120Y-48296076D01* X84109145Y-48284782D01* X84114896Y-48268147D01* X84120743Y-48254470D01* X84140711Y-48166978D01* X84163115Y-48083371D01* X84164807Y-48064024D01* X84166126Y-48055626D01* X84171151Y-48033615D01* X84175036Y-47947105D01* X84182307Y-47864000D01* X84182307Y-47863998D01* X86505693Y-47863998D01* X86507672Y-47886639D01* X86507846Y-47894829D01* X86506684Y-47920688D01* X86506685Y-47920690D01* X86517691Y-48001946D01* X86518016Y-48004864D01* X86520532Y-48033615D01* X86524885Y-48083371D01* X86531624Y-48108523D01* X86533174Y-48116243D01* X86537093Y-48145173D01* X86537096Y-48145183D01* X86561413Y-48220023D01* X86562334Y-48223134D01* X86581877Y-48296066D01* X86581881Y-48296078D01* X86594275Y-48322659D01* X86597051Y-48329705D01* X86607095Y-48360616D01* X86607097Y-48360621D01* X86616105Y-48377360D01* X86642822Y-48427010D01* X86644416Y-48430187D01* X86674942Y-48495651D01* X86674943Y-48495653D01* X86674944Y-48495654D01* X86693668Y-48522396D01* X86697475Y-48528574D01* X86714443Y-48560105D01* X86714445Y-48560108D01* X86759397Y-48616475D01* X86761709Y-48619567D01* X86801251Y-48676038D01* X86801254Y-48676041D01* X86826659Y-48701446D01* X86831295Y-48706633D01* X86855686Y-48737218D01* X86907514Y-48782499D01* X86910557Y-48785344D01* X86956955Y-48831743D01* X86956956Y-48831744D01* X86956959Y-48831746D01* X86956962Y-48831749D01* X86988487Y-48853822D01* X86989109Y-48854258D01* X86994341Y-48858357D01* X87026282Y-48886263D01* X87082535Y-48919872D01* X87086258Y-48922283D01* X87122750Y-48947835D01* X87137338Y-48958051D01* X87137341Y-48958052D01* X87137346Y-48958056D01* X87175910Y-48976038D01* X87181493Y-48978997D01* X87220750Y-49002453D01* X87279010Y-49024317D01* X87283422Y-49026171D01* X87336924Y-49051120D01* X87381204Y-49062984D01* X87386939Y-49064824D01* X87416356Y-49075864D01* X87432839Y-49082051D01* X87490813Y-49092571D01* X87495778Y-49093685D01* X87549629Y-49108115D01* X87598602Y-49112399D01* X87604250Y-49113157D01* X87643352Y-49120253D01* X87655732Y-49122500D01* X87655733Y-49122500D01* X87711348Y-49122500D01* X87716749Y-49122735D01* X87745370Y-49125239D01* X87768998Y-49127307D01* X87768999Y-49127307D01* X87768999Y-49127306D01* X87769000Y-49127307D01* X87822310Y-49122643D01* X87825504Y-49122500D01* X87825522Y-49122500D01* X87873625Y-49118169D01* X87880391Y-49117561D01* X87988353Y-49108117D01* X87988357Y-49108116D01* X87988371Y-49108115D01* X87988383Y-49108111D01* X87988902Y-49108020D01* X87994136Y-49107324D01* X87994622Y-49107281D01* X88099335Y-49078381D01* X88201076Y-49051120D01* X88201089Y-49051113D01* X88208029Y-49048588D01* X88212720Y-49047089D01* X88212993Y-49047014D01* X88308019Y-49001251D01* X88400654Y-48958056D01* X88400663Y-48958049D01* X88405350Y-48955345D01* X88405421Y-48955468D01* X88416206Y-48949152D01* X88417093Y-48948725D01* X88499868Y-48888585D01* X88581038Y-48831749D01* X88581951Y-48830835D01* X88596752Y-48818193D01* X88600363Y-48815571D01* X88631990Y-48782492D01* X88668902Y-48743884D01* X88736746Y-48676041D01* X88736746Y-48676040D01* X88736749Y-48676038D01* X88739476Y-48672142D01* X88751428Y-48657568D01* X88756912Y-48651834D01* X88809809Y-48571697D01* X88863056Y-48495654D01* X88866538Y-48488185D01* X88875436Y-48472276D01* X88881709Y-48462774D01* X88918216Y-48377360D01* X88956120Y-48296076D01* X88959145Y-48284782D01* X88964896Y-48268147D01* X88970743Y-48254470D01* X88990711Y-48166978D01* X89013115Y-48083371D01* X89014807Y-48064024D01* X89016126Y-48055626D01* X89021151Y-48033615D01* X89025036Y-47947105D01* X89032307Y-47864000D01* X89030327Y-47841368D01* X89030153Y-47833173D01* X89031315Y-47807309D01* X89020305Y-47726042D01* X89019981Y-47723125D01* X89013115Y-47644631D01* X89013115Y-47644629D01* X89006377Y-47619483D01* X89004825Y-47611753D01* X89003122Y-47599190D01* X89000906Y-47582825D01* X88976587Y-47507982D01* X88975671Y-47504889D01* X88961430Y-47451741D01* X88956123Y-47431933D01* X88956119Y-47431923D01* X88943722Y-47405336D01* X88940948Y-47398296D01* X88930903Y-47367379D01* X88930902Y-47367377D01* X88930899Y-47367370D01* X88895167Y-47300970D01* X88893582Y-47297811D01* X88863056Y-47232347D01* X88863052Y-47232341D01* X88844337Y-47205613D01* X88840523Y-47199424D01* X88823555Y-47167892D01* X88778594Y-47111513D01* X88776279Y-47108417D01* X88736750Y-47051963D01* X88711340Y-47026553D01* X88706702Y-47021364D01* X88682312Y-46990780D01* X88630491Y-46945505D01* X88627442Y-46942655D01* X88581039Y-46896251D01* X88548891Y-46873741D01* X88543656Y-46869641D01* X88511718Y-46841737D01* X88455486Y-46808139D01* X88451725Y-46805704D01* X88413980Y-46779275D01* X88400654Y-46769944D01* X88386940Y-46763549D01* X88362100Y-46751965D01* X88356501Y-46748997D01* X88325701Y-46730596D01* X88317250Y-46725547D01* X88258988Y-46703681D01* X88254588Y-46701833D01* X88222893Y-46687053D01* X88201077Y-46676880D01* X88201065Y-46676876D01* X88156793Y-46665013D01* X88151053Y-46663172D01* X88105160Y-46645948D01* X88054115Y-46636684D01* X88047191Y-46635428D01* X88042217Y-46634312D01* X87988372Y-46619885D01* X87976370Y-46618834D01* X87939403Y-46615600D01* X87933741Y-46614840D01* X87898998Y-46608536D01* X87882267Y-46605500D01* X87882266Y-46605500D01* X87826652Y-46605500D01* X87821250Y-46605264D01* X87792629Y-46602760D01* X87769002Y-46600693D01* X87768997Y-46600693D01* X87715728Y-46605353D01* X87712489Y-46605499D01* X87657608Y-46610438D01* X87549618Y-46619885D01* X87549041Y-46619987D01* X87543889Y-46620672D01* X87543386Y-46620717D01* X87543369Y-46620720D01* X87438664Y-46649618D01* X87336918Y-46676881D01* X87329944Y-46679418D01* X87325268Y-46680912D01* X87325022Y-46680979D01* X87325011Y-46680984D01* X87229964Y-46726755D01* X87137352Y-46769941D01* X87132658Y-46772651D01* X87132587Y-46772529D01* X87121824Y-46778833D01* X87120908Y-46779274D01* X87120902Y-46779277D01* X87038119Y-46839423D01* X86956958Y-46896254D01* X86956027Y-46897185D01* X86941264Y-46909793D01* X86937641Y-46912425D01* X86937631Y-46912434D01* X86869097Y-46984115D01* X86801247Y-47051966D01* X86801246Y-47051967D01* X86798506Y-47055880D01* X86786581Y-47070419D01* X86781089Y-47076163D01* X86781085Y-47076169D01* X86728183Y-47156313D01* X86674943Y-47232347D01* X86674941Y-47232352D01* X86671462Y-47239812D01* X86662576Y-47255702D01* X86656292Y-47265222D01* X86656291Y-47265224D01* X86619780Y-47350644D01* X86581882Y-47431917D01* X86581880Y-47431923D01* X86578852Y-47443222D01* X86573102Y-47459854D01* X86567259Y-47473525D01* X86567256Y-47473533D01* X86547288Y-47561021D01* X86524885Y-47644626D01* X86524884Y-47644632D01* X86523192Y-47663970D01* X86521873Y-47672366D01* X86516849Y-47694385D01* X86512963Y-47780894D01* X86505693Y-47863996D01* X86505693Y-47863998D01* X84182307Y-47863998D01* X84180327Y-47841368D01* X84180153Y-47833173D01* X84181315Y-47807309D01* X84170305Y-47726042D01* X84169981Y-47723125D01* X84163115Y-47644631D01* X84163115Y-47644629D01* X84156377Y-47619483D01* X84154825Y-47611753D01* X84153122Y-47599190D01* X84150906Y-47582825D01* X84126587Y-47507982D01* X84125671Y-47504889D01* X84111430Y-47451741D01* X84106123Y-47431933D01* X84106119Y-47431923D01* X84093722Y-47405336D01* X84090948Y-47398296D01* X84080903Y-47367379D01* X84080902Y-47367377D01* X84080899Y-47367370D01* X84045167Y-47300970D01* X84043582Y-47297811D01* X84013056Y-47232347D01* X84013052Y-47232341D01* X83994337Y-47205613D01* X83990523Y-47199424D01* X83973555Y-47167892D01* X83928594Y-47111513D01* X83926279Y-47108417D01* X83886750Y-47051963D01* X83861340Y-47026553D01* X83856702Y-47021364D01* X83832312Y-46990780D01* X83780491Y-46945505D01* X83777442Y-46942655D01* X83731039Y-46896251D01* X83698891Y-46873741D01* X83693656Y-46869641D01* X83661718Y-46841737D01* X83605486Y-46808139D01* X83601725Y-46805704D01* X83563980Y-46779275D01* X83550654Y-46769944D01* X83536940Y-46763549D01* X83512100Y-46751965D01* X83506501Y-46748997D01* X83475701Y-46730596D01* X83467250Y-46725547D01* X83408988Y-46703681D01* X83404588Y-46701833D01* X83372893Y-46687053D01* X83351077Y-46676880D01* X83351065Y-46676876D01* X83306793Y-46665013D01* X83301053Y-46663172D01* X83255160Y-46645948D01* X83204115Y-46636684D01* X83197191Y-46635428D01* X83192217Y-46634312D01* X83138372Y-46619885D01* X83126370Y-46618834D01* X83089403Y-46615600D01* X83083741Y-46614840D01* X83048998Y-46608536D01* X83032267Y-46605500D01* X83032266Y-46605500D01* X82976652Y-46605500D01* X82971250Y-46605264D01* X82942629Y-46602760D01* X82919002Y-46600693D01* X82918997Y-46600693D01* X82865728Y-46605353D01* X82862489Y-46605499D01* X82807608Y-46610438D01* X82699618Y-46619885D01* X82699041Y-46619987D01* X82693889Y-46620672D01* X82693386Y-46620717D01* X82693369Y-46620720D01* X82588664Y-46649618D01* X82486918Y-46676881D01* X82479944Y-46679418D01* X82475268Y-46680912D01* X82475022Y-46680979D01* X82475011Y-46680984D01* X82379964Y-46726755D01* X82287352Y-46769941D01* X82282658Y-46772651D01* X82282587Y-46772529D01* X82271824Y-46778833D01* X82270908Y-46779274D01* X82270902Y-46779277D01* X82188119Y-46839423D01* X82106958Y-46896254D01* X82106027Y-46897185D01* X82091264Y-46909793D01* X82087641Y-46912425D01* X82087631Y-46912434D01* X82019097Y-46984115D01* X81951247Y-47051966D01* X81951246Y-47051967D01* X81948506Y-47055880D01* X81936581Y-47070419D01* X81931089Y-47076163D01* X81931085Y-47076169D01* X81878183Y-47156313D01* X81824943Y-47232347D01* X81824941Y-47232352D01* X81821462Y-47239812D01* X81812576Y-47255702D01* X81806292Y-47265222D01* X81806291Y-47265224D01* X81769780Y-47350644D01* X81731882Y-47431917D01* X81731880Y-47431923D01* X81728852Y-47443222D01* X81723102Y-47459854D01* X81717259Y-47473525D01* X81717256Y-47473533D01* X81697288Y-47561021D01* X81674885Y-47644626D01* X81674884Y-47644632D01* X81673192Y-47663970D01* X81671873Y-47672366D01* X81666849Y-47694385D01* X81662963Y-47780894D01* X81655693Y-47863996D01* X81655693Y-47863998D01* X77812500Y-47863998D01* X77812500Y-46345362D01* X77812499Y-46345345D01* X77809157Y-46314270D01* X77805989Y-46284799D01* X77790212Y-46242500D01* X77754888Y-46147793D01* X77754887Y-46147792D01* X77680415Y-46048311D01* X77655997Y-45982847D01* X77670848Y-45914574D01* X77680415Y-45899689D01* X77680903Y-45899038D01* X77738719Y-45821805D01* X77754887Y-45800207D01* X77754888Y-45800206D01* X77766929Y-45767925D01* X77805989Y-45663201D01* X77809591Y-45629692D01* X77812499Y-45602654D01* X77812500Y-45602637D01* X77812500Y-43884723D01* X77832185Y-43817684D01* X77884989Y-43771929D01* X77936500Y-43760723D01* X81409889Y-43760723D01* X81476928Y-43780408D01* X81522683Y-43833212D01* X81532627Y-43902370D01* X81505816Y-43961077D01* X81506835Y-43961871D01* X81503681Y-43965922D01* X81463222Y-44027850D01* X81461166Y-44030806D01* X81415287Y-44092839D01* X81415286Y-44092840D01* X81398333Y-44126463D01* X81394875Y-44132463D01* X81376015Y-44161332D01* X81344978Y-44232089D01* X81343564Y-44235090D01* X81341165Y-44239850D01* X81307342Y-44306933D01* X81307341Y-44306934D01* X81297280Y-44339786D01* X81294775Y-44346537D01* X81282249Y-44375094D01* X81282249Y-44375095D01* X81262469Y-44453203D01* X81261649Y-44456137D01* X81237137Y-44536178D01* X81237135Y-44536190D01* X81233191Y-44566986D01* X81231795Y-44574335D01* X81224950Y-44601367D01* X81224948Y-44601379D01* X81217909Y-44686327D01* X81206682Y-44774003D01* X81206681Y-44774004D01* X81207859Y-44801731D01* X81207703Y-44809485D01* X81205673Y-44833995D01* X81205673Y-44834000D01* X81209559Y-44880904D01* X81212971Y-44922083D01* X81216856Y-45013543D01* X81216857Y-45013552D01* X81222010Y-45037461D01* X81223190Y-45045410D01* X81224947Y-45066617D01* X81224949Y-45066629D01* X81247417Y-45155353D01* X81267370Y-45247935D01* X81275257Y-45267561D01* X81277834Y-45275466D01* X81282251Y-45292907D01* X81320285Y-45379616D01* X81356767Y-45470404D01* X81366129Y-45485608D01* X81370117Y-45493220D01* X81376015Y-45506668D01* X81429524Y-45588570D01* X81482473Y-45674565D01* X81482480Y-45674574D01* X81489158Y-45682161D01* X81499886Y-45696267D01* X81503686Y-45702083D01* X81572079Y-45776377D01* X81593049Y-45800204D01* X81640882Y-45854552D01* X81640883Y-45854553D01* X81646070Y-45858741D01* X81659407Y-45871240D01* X81661783Y-45873822D01* X81713116Y-45913775D01* X81743948Y-45937772D01* X81791031Y-45975789D01* X81827421Y-46005173D01* X81827422Y-46005173D01* X81827424Y-46005175D01* X81830165Y-46006706D01* X81830240Y-46006748D01* X81845934Y-46017152D01* X81845979Y-46017187D01* X81845991Y-46017195D01* X81903490Y-46048311D01* X81940346Y-46068256D01* X82036740Y-46122105D01* X82036745Y-46122106D01* X82036749Y-46122109D01* X82039140Y-46123190D01* X82046477Y-46126448D01* X82046575Y-46126226D01* X82051262Y-46128281D01* X82051273Y-46128287D01* X82155740Y-46164151D01* X82262806Y-46201980D01* X82263367Y-46202076D01* X82268109Y-46203081D01* X82272043Y-46204078D01* X82272049Y-46204080D01* X82384095Y-46222777D01* X82499110Y-46242499D01* X82499119Y-46242500D01* X82735707Y-46242500D01* X82735712Y-46242500D01* X82768648Y-46237003D01* X82792475Y-46233028D01* X82797413Y-46232406D01* X82850941Y-46227851D01* X82857887Y-46227260D01* X82857888Y-46227259D01* X82857898Y-46227259D01* X82910297Y-46213614D01* X82915668Y-46212469D01* X82965951Y-46204080D01* X83023502Y-46184322D01* X83027975Y-46182973D01* X83089924Y-46166844D01* X83136259Y-46145898D01* X83141633Y-46143767D01* X83186727Y-46128287D01* X83243132Y-46097761D01* X83247054Y-46095816D01* X83308402Y-46068086D01* X83347795Y-46041459D01* X83352979Y-46038314D01* X83392008Y-46017195D01* X83392012Y-46017193D01* X83392013Y-46017192D01* X83392017Y-46017190D01* X83445228Y-45975772D01* X83448561Y-45973353D01* X83507047Y-45933825D01* X83539001Y-45903198D01* X83543789Y-45899058D01* X83576220Y-45873818D01* X83624119Y-45821784D01* X83626794Y-45819056D01* X83680144Y-45767925D01* X83704497Y-45734996D01* X83708727Y-45729877D01* X83734309Y-45702088D01* X83734314Y-45702083D01* X83774785Y-45640135D01* X83776835Y-45637189D01* X83781158Y-45631344D01* X83822715Y-45575157D01* X83839676Y-45541514D01* X83843114Y-45535549D01* X83861984Y-45506669D01* X83893042Y-45435861D01* X83894413Y-45432950D01* X83930657Y-45361067D01* X83940721Y-45328200D01* X83943221Y-45321466D01* X83955749Y-45292907D01* X83975535Y-45214770D01* X83976334Y-45211909D01* X84000864Y-45131815D01* X84004810Y-45100994D01* X84006198Y-45093684D01* X84013051Y-45066626D01* X84020090Y-44981672D01* X84031318Y-44893995D01* X84030139Y-44866249D01* X84030294Y-44858525D01* X84032327Y-44834000D01* X84031901Y-44828862D01* X84025028Y-44745916D01* X84021144Y-44654460D01* X84021143Y-44654457D01* X84021143Y-44654449D01* X84015987Y-44630530D01* X84014808Y-44622586D01* X84014734Y-44621694D01* X84013051Y-44601374D01* X83990582Y-44512646D01* X83970630Y-44420068D01* X83962735Y-44400424D01* X83960167Y-44392544D01* X83955749Y-44375093D01* X83917714Y-44288383D01* X83881234Y-44197598D01* X83881233Y-44197596D01* X83871867Y-44182386D01* X83867882Y-44174778D01* X83867102Y-44173000D01* X83861984Y-44161331D01* X83808475Y-44079429D01* X83755524Y-43993431D01* X83755518Y-43993424D01* X83755515Y-43993420D01* X83748839Y-43985834D01* X83738118Y-43971739D01* X83734315Y-43965919D01* X83734314Y-43965917D01* X83734310Y-43965913D01* X83731160Y-43961865D01* X83732856Y-43960544D01* X83705961Y-43906062D01* X83713815Y-43836636D01* X83757957Y-43782476D01* X83824373Y-43760779D01* X83828111Y-43760723D01* X86859889Y-43760723D01* X86926928Y-43780408D01* X86972683Y-43833212D01* X86982627Y-43902370D01* X86955816Y-43961077D01* X86956835Y-43961871D01* X86953681Y-43965922D01* X86913222Y-44027850D01* X86911166Y-44030806D01* X86865287Y-44092839D01* X86865286Y-44092840D01* X86848333Y-44126463D01* X86844875Y-44132463D01* X86826015Y-44161332D01* X86794978Y-44232089D01* X86793564Y-44235090D01* X86791165Y-44239850D01* X86757342Y-44306933D01* X86757341Y-44306934D01* X86747280Y-44339786D01* X86744775Y-44346537D01* X86732249Y-44375094D01* X86732249Y-44375095D01* X86712469Y-44453203D01* X86711649Y-44456137D01* X86687137Y-44536178D01* X86687135Y-44536190D01* X86683191Y-44566986D01* X86681795Y-44574335D01* X86674950Y-44601367D01* X86674948Y-44601379D01* X86667909Y-44686327D01* X86656682Y-44774003D01* X86656681Y-44774004D01* X86657859Y-44801731D01* X86657703Y-44809485D01* X86655673Y-44833995D01* X86655673Y-44834000D01* X86659559Y-44880904D01* X86662971Y-44922083D01* X86666856Y-45013543D01* X86666857Y-45013552D01* X86672010Y-45037461D01* X86673190Y-45045410D01* X86674947Y-45066617D01* X86674949Y-45066629D01* X86697417Y-45155353D01* X86717370Y-45247935D01* X86725257Y-45267561D01* X86727834Y-45275466D01* X86732251Y-45292907D01* X86770285Y-45379616D01* X86806767Y-45470404D01* X86816129Y-45485608D01* X86820117Y-45493220D01* X86826015Y-45506668D01* X86879524Y-45588570D01* X86932473Y-45674565D01* X86932480Y-45674574D01* X86939158Y-45682161D01* X86949886Y-45696267D01* X86953686Y-45702083D01* X87022079Y-45776377D01* X87043049Y-45800204D01* X87090882Y-45854552D01* X87090883Y-45854553D01* X87096070Y-45858741D01* X87109407Y-45871240D01* X87111783Y-45873822D01* X87163116Y-45913775D01* X87193948Y-45937772D01* X87241031Y-45975789D01* X87277421Y-46005173D01* X87277422Y-46005173D01* X87277424Y-46005175D01* X87280165Y-46006706D01* X87280240Y-46006748D01* X87295934Y-46017152D01* X87295979Y-46017187D01* X87295991Y-46017195D01* X87353490Y-46048311D01* X87390346Y-46068256D01* X87486740Y-46122105D01* X87486745Y-46122106D01* X87486749Y-46122109D01* X87489140Y-46123190D01* X87496477Y-46126448D01* X87496575Y-46126226D01* X87501262Y-46128281D01* X87501273Y-46128287D01* X87605740Y-46164151D01* X87712806Y-46201980D01* X87713367Y-46202076D01* X87718109Y-46203081D01* X87722043Y-46204078D01* X87722049Y-46204080D01* X87834095Y-46222777D01* X87949110Y-46242499D01* X87949119Y-46242500D01* X88185707Y-46242500D01* X88185712Y-46242500D01* X88218648Y-46237003D01* X88242475Y-46233028D01* X88247413Y-46232406D01* X88300941Y-46227851D01* X88307887Y-46227260D01* X88307888Y-46227259D01* X88307898Y-46227259D01* X88360297Y-46213614D01* X88365668Y-46212469D01* X88415951Y-46204080D01* X88473502Y-46184322D01* X88477975Y-46182973D01* X88539924Y-46166844D01* X88586259Y-46145898D01* X88591633Y-46143767D01* X88636727Y-46128287D01* X88693132Y-46097761D01* X88697054Y-46095816D01* X88758402Y-46068086D01* X88797795Y-46041459D01* X88802979Y-46038314D01* X88842008Y-46017195D01* X88842012Y-46017193D01* X88842013Y-46017192D01* X88842017Y-46017190D01* X88895228Y-45975772D01* X88898561Y-45973353D01* X88957047Y-45933825D01* X88989001Y-45903198D01* X88993789Y-45899058D01* X89026220Y-45873818D01* X89074119Y-45821784D01* X89076794Y-45819056D01* X89130144Y-45767925D01* X89154497Y-45734996D01* X89158727Y-45729877D01* X89184309Y-45702088D01* X89184314Y-45702083D01* X89224785Y-45640135D01* X89226835Y-45637189D01* X89231158Y-45631344D01* X89272715Y-45575157D01* X89289676Y-45541514D01* X89293114Y-45535549D01* X89311984Y-45506669D01* X89343042Y-45435861D01* X89344413Y-45432950D01* X89380657Y-45361067D01* X89390721Y-45328200D01* X89393221Y-45321466D01* X89405749Y-45292907D01* X89425535Y-45214770D01* X89426334Y-45211909D01* X89450864Y-45131815D01* X89454810Y-45100994D01* X89456198Y-45093684D01* X89463051Y-45066626D01* X89470090Y-44981672D01* X89481318Y-44893995D01* X89480139Y-44866249D01* X89480294Y-44858525D01* X89482327Y-44834000D01* X89481901Y-44828862D01* X89475028Y-44745916D01* X89471144Y-44654460D01* X89471143Y-44654457D01* X89471143Y-44654449D01* X89465987Y-44630530D01* X89464808Y-44622586D01* X89464734Y-44621694D01* X89463051Y-44601374D01* X89440582Y-44512646D01* X89420630Y-44420068D01* X89412735Y-44400424D01* X89410167Y-44392544D01* X89405749Y-44375093D01* X89367714Y-44288383D01* X89331234Y-44197598D01* X89331233Y-44197596D01* X89321867Y-44182386D01* X89317882Y-44174778D01* X89317102Y-44173000D01* X89311984Y-44161331D01* X89258475Y-44079429D01* X89205524Y-43993431D01* X89205518Y-43993424D01* X89205515Y-43993420D01* X89198839Y-43985834D01* X89188118Y-43971739D01* X89184315Y-43965919D01* X89184314Y-43965917D01* X89184310Y-43965913D01* X89181160Y-43961865D01* X89182856Y-43960544D01* X89155961Y-43906062D01* X89163815Y-43836636D01* X89207957Y-43782476D01* X89274373Y-43760779D01* X89278111Y-43760723D01* X92122796Y-43760723D01* X92189835Y-43780408D01* X92235590Y-43833212D01* X92245534Y-43902370D01* X92216509Y-43965926D01* X92161801Y-44002429D01* X92133257Y-44011887D01* X92126720Y-44014936D01* X92126700Y-44014894D01* X92119696Y-44018285D01* X92119717Y-44018326D01* X92113269Y-44021564D01* X92048394Y-44064233D01* X91982352Y-44104967D01* X91976683Y-44109450D01* X91976653Y-44109413D01* X91970627Y-44114322D01* X91970657Y-44114357D01* X91965132Y-44118993D01* X91965126Y-44118998D01* X91965126Y-44118999D01* X91933177Y-44152862D01* X91911836Y-44175482D01* X90949122Y-45138195D01* X90935495Y-45149973D01* X90915941Y-45164531D01* X90881977Y-45205006D01* X90878330Y-45208987D01* X90872418Y-45214900D01* X90851863Y-45240896D01* X90801967Y-45300360D01* X90798001Y-45306391D01* X90797963Y-45306366D01* X90793782Y-45312928D01* X90793821Y-45312952D01* X90790032Y-45319094D01* X90757220Y-45389459D01* X90722391Y-45458810D01* X90719923Y-45465593D01* X90719878Y-45465576D01* X90717322Y-45472932D01* X90717366Y-45472947D01* X90715096Y-45479795D01* X90707244Y-45517822D01* X90699392Y-45555850D01* X90688304Y-45602637D01* X90681498Y-45631351D01* X90680661Y-45638519D01* X90680613Y-45638513D01* X90679823Y-45646244D01* X90679870Y-45646249D01* X90679240Y-45653438D01* X90681500Y-45731079D01* X90681500Y-95693706D01* X90680191Y-95711676D01* X90676658Y-95735791D01* X90681264Y-95788420D01* X90681500Y-95793827D01* X90681500Y-95802178D01* X90685347Y-95835096D01* X90692112Y-95912427D01* X90693572Y-95919494D01* X90693526Y-95919503D01* X90695209Y-95927094D01* X90695254Y-95927084D01* X90696919Y-95934110D01* X90723473Y-96007065D01* X90726599Y-96016500D01* X90747886Y-96080737D01* X90750940Y-96087286D01* X90750896Y-96087306D01* X90754284Y-96094304D01* X90754327Y-96094283D01* X90757563Y-96100728D01* X90757565Y-96100732D01* X90800233Y-96165605D01* X90840970Y-96231651D01* X90840972Y-96231653D01* X90845451Y-96237318D01* X90845413Y-96237347D01* X90850320Y-96243372D01* X90850357Y-96243342D01* X90855002Y-96248878D01* X90911482Y-96302163D01* X92128196Y-97518877D01* X92139977Y-97532509D01* X92154531Y-97552058D01* X92184807Y-97577463D01* X92195005Y-97586020D01* X92198995Y-97589676D01* X92204899Y-97595580D01* X92230896Y-97616136D01* X92290360Y-97666032D01* X92290362Y-97666033D01* X92296396Y-97670002D01* X92296369Y-97670042D01* X92302921Y-97674216D01* X92302947Y-97674175D01* X92309099Y-97677970D01* X92379447Y-97710773D01* X92448812Y-97745609D01* X92448813Y-97745609D01* X92448815Y-97745610D01* X92455594Y-97748077D01* X92455577Y-97748122D01* X92462925Y-97750676D01* X92462941Y-97750631D01* X92469790Y-97752901D01* X92469793Y-97752901D01* X92469794Y-97752902D01* X92545818Y-97768599D01* X92621344Y-97786500D01* X92621345Y-97786500D01* X92621349Y-97786501D01* X92628517Y-97787339D01* X92628511Y-97787386D01* X92636242Y-97788176D01* X92636247Y-97788129D01* X92643437Y-97788758D01* X92643441Y-97788757D01* X92643442Y-97788758D01* X92721045Y-97786500D01* X96662457Y-97786500D01* X96729496Y-97806185D01* X96750138Y-97822819D01* X97503181Y-98575862D01* X97536666Y-98637185D01* X97539500Y-98663543D01* X97539500Y-106060457D01* X97519815Y-106127496D01* X97503181Y-106148138D01* X97004138Y-106647181D01* X96942815Y-106680666D01* X96916457Y-106683500D01* X82661543Y-106683500D01* X82594504Y-106663815D01* X82573862Y-106647181D01* X81876819Y-105950138D01* X81843334Y-105888815D01* X81840500Y-105862457D01* X81840500Y-104284001D01* X89146891Y-104284001D01* X89167300Y-104569362D01* X89228109Y-104848895D01* X89328091Y-105116958D01* X89465191Y-105368038D01* X89465196Y-105368046D01* X89571882Y-105510561D01* X89571883Y-105510562D01* X90181438Y-104901006D01* X90230348Y-104979999D01* X90373931Y-105137501D01* X90532388Y-105257163D01* X89925436Y-105864115D01* X90067960Y-105970807D01* X90067961Y-105970808D01* X90319042Y-106107908D01* X90319041Y-106107908D01* X90587104Y-106207890D01* X90866637Y-106268699D01* X91151999Y-106289109D01* X91152001Y-106289109D01* X91437362Y-106268699D01* X91716895Y-106207890D01* X91984958Y-106107908D01* X92236047Y-105970803D01* X92378561Y-105864116D01* X92378562Y-105864115D01* X91771611Y-105257163D01* X91930069Y-105137501D01* X92073652Y-104979999D01* X92122560Y-104901007D01* X92732115Y-105510562D01* X92732116Y-105510561D01* X92838803Y-105368047D01* X92975908Y-105116958D01* X93075890Y-104848895D01* X93136699Y-104569362D01* X93157109Y-104284001D01* X93157109Y-104283998D01* X93136925Y-104001797D01* X93142204Y-103977525D01* X93130373Y-103962232D01* X93124687Y-103943419D01* X93075890Y-103719104D01* X92975908Y-103451041D01* X92838808Y-103199961D01* X92838807Y-103199960D01* X92732115Y-103057436D01* X92122560Y-103666991D01* X92073652Y-103588001D01* X91930069Y-103430499D01* X91771610Y-103310835D01* X92378562Y-102703883D01* X92378561Y-102703882D01* X92236046Y-102597196D01* X92236038Y-102597191D01* X91984957Y-102460091D01* X91984958Y-102460091D01* X91716895Y-102360109D01* X91437362Y-102299300D01* X91152001Y-102278891D01* X91151999Y-102278891D01* X90866637Y-102299300D01* X90587104Y-102360109D01* X90319041Y-102460091D01* X90067961Y-102597191D01* X90067953Y-102597196D01* X89925437Y-102703882D01* X89925436Y-102703883D01* X90532389Y-103310835D01* X90373931Y-103430499D01* X90230348Y-103588001D01* X90181439Y-103666992D01* X89571883Y-103057436D01* X89571882Y-103057437D01* X89465196Y-103199953D01* X89465191Y-103199961D01* X89328091Y-103451041D01* X89228109Y-103719104D01* X89167300Y-103998637D01* X89146891Y-104283998D01* X89146891Y-104284001D01* X81840500Y-104284001D01* X81840500Y-102953574D01* X81860185Y-102886535D01* X81912989Y-102840780D01* X81951245Y-102830285D01* X81991201Y-102825989D01* X81991204Y-102825988D01* X82006086Y-102820437D01* X82128204Y-102774889D01* X82245261Y-102687261D01* X82332889Y-102570204D01* X82354125Y-102513268D01* X82372717Y-102463424D01* X82414588Y-102407490D01* X82480053Y-102383074D01* X82548326Y-102397926D01* X82576579Y-102419077D01* X82737700Y-102580198D01* X82925251Y-102711523D01* X83050091Y-102769736D01* X83132750Y-102808281D01* X83132752Y-102808281D01* X83132757Y-102808284D01* X83353913Y-102867543D01* X83516832Y-102881796D01* X83581998Y-102887498D01* X83582000Y-102887498D01* X83582002Y-102887498D01* X83639021Y-102882509D01* X83810087Y-102867543D01* X84031243Y-102808284D01* X84238749Y-102711523D01* X84426300Y-102580198D01* X84494319Y-102512179D01* X84555642Y-102478694D01* X84625334Y-102483678D01* X84669681Y-102512179D01* X84737700Y-102580198D01* X84925251Y-102711523D01* X85050091Y-102769736D01* X85132750Y-102808281D01* X85132752Y-102808281D01* X85132757Y-102808284D01* X85353913Y-102867543D01* X85516832Y-102881796D01* X85581998Y-102887498D01* X85582000Y-102887498D01* X85582002Y-102887498D01* X85639021Y-102882509D01* X85810087Y-102867543D01* X86031243Y-102808284D01* X86238749Y-102711523D01* X86426300Y-102580198D01* X86588198Y-102418300D01* X86719523Y-102230749D01* X86724307Y-102220487D01* X86770476Y-102168051D01* X86837669Y-102148897D01* X86904551Y-102169111D01* X86949072Y-102220490D01* X86951866Y-102226483D01* X87002973Y-102299471D01* X87002974Y-102299472D01* X87619064Y-101683381D01* X87645481Y-101773351D01* X87719327Y-101888258D01* X87822555Y-101977705D01* X87946801Y-102034446D01* X87971548Y-102038004D01* X87356526Y-102653025D01* X87356526Y-102653026D01* X87429512Y-102704131D01* X87429516Y-102704133D01* X87635673Y-102800265D01* X87635682Y-102800269D01* X87855389Y-102859139D01* X87855400Y-102859141D01* X88081998Y-102878966D01* X88082002Y-102878966D01* X88308599Y-102859141D01* X88308610Y-102859139D01* X88528317Y-102800269D01* X88528331Y-102800264D01* X88734478Y-102704136D01* X88807472Y-102653025D01* X88192451Y-102038004D01* X88217199Y-102034446D01* X88341445Y-101977705D01* X88444673Y-101888258D01* X88518519Y-101773351D01* X88544935Y-101683382D01* X89161025Y-102299472D01* X89212136Y-102226478D01* X89308264Y-102020331D01* X89308269Y-102020317D01* X89367139Y-101800610D01* X89367141Y-101800600D01* X89383785Y-101610350D01* X89409237Y-101545281D01* X89465828Y-101504303D01* X89535590Y-101500424D01* X89559711Y-101508772D01* X89585447Y-101520773D01* X89654812Y-101555609D01* X89654813Y-101555609D01* X89654815Y-101555610D01* X89661594Y-101558077D01* X89661577Y-101558122D01* X89668925Y-101560676D01* X89668941Y-101560631D01* X89675790Y-101562901D01* X89675793Y-101562901D01* X89675794Y-101562902D01* X89751818Y-101578599D01* X89827344Y-101596500D01* X89827345Y-101596500D01* X89827349Y-101596501D01* X89834517Y-101597339D01* X89834511Y-101597386D01* X89842242Y-101598176D01* X89842247Y-101598129D01* X89849437Y-101598758D01* X89849441Y-101598757D01* X89849442Y-101598758D01* X89927045Y-101596500D01* X93106457Y-101596500D01* X93173496Y-101616185D01* X93194138Y-101632819D01* X93324122Y-101762803D01* X93357607Y-101824126D01* X93360441Y-101850484D01* X93360441Y-103706647D01* X93359132Y-103724617D01* X93355599Y-103748732D01* X93360205Y-103801361D01* X93360441Y-103806768D01* X93360441Y-103815119D01* X93364288Y-103848038D01* X93369381Y-103906254D01* X93364078Y-103932635D01* X93376791Y-103949617D01* X93377131Y-103950541D01* X93402414Y-104020006D01* X93426827Y-104093678D01* X93429881Y-104100227D01* X93429837Y-104100247D01* X93433225Y-104107245D01* X93433268Y-104107224D01* X93436509Y-104113678D01* X93478444Y-104177437D01* X93479174Y-104178546D01* X93519911Y-104244592D01* X93519913Y-104244594D01* X93524392Y-104250259D01* X93524354Y-104250288D01* X93529261Y-104256313D01* X93529298Y-104256283D01* X93533943Y-104261819D01* X93590423Y-104315104D01* X94286090Y-105010771D01* X94319575Y-105072094D01* X94321985Y-105088210D01* X94322971Y-105100117D01* X94322973Y-105100128D01* X94378240Y-105318371D01* X94468677Y-105524549D01* X94591813Y-105713022D01* X94591821Y-105713033D01* X94744293Y-105878659D01* X94744298Y-105878664D01* X94757340Y-105888815D01* X94921961Y-106016946D01* X94921962Y-106016946D01* X94921964Y-106016948D01* X95048672Y-106085518D01* X95119963Y-106124099D01* X95332902Y-106197201D01* X95554968Y-106234257D01* X95780106Y-106234257D01* X96002172Y-106197201D01* X96215111Y-106124099D01* X96413113Y-106016946D01* X96590777Y-105878663D01* X96743259Y-105713025D01* X96866397Y-105524548D01* X96956833Y-105318373D01* X97012101Y-105100125D01* X97012102Y-105100116D01* X97030693Y-104875762D01* X97030693Y-104875751D01* X97012102Y-104651397D01* X97012100Y-104651385D01* X96956833Y-104433142D01* X96938156Y-104390563D01* X96866397Y-104226966D01* X96743259Y-104038489D01* X96743256Y-104038486D01* X96743252Y-104038480D01* X96590780Y-103872854D01* X96590775Y-103872849D01* X96413114Y-103734569D01* X96413114Y-103734568D01* X96369840Y-103711150D01* X96320250Y-103661930D01* X96305142Y-103593714D01* X96329312Y-103528158D01* X96357735Y-103500520D01* X96538616Y-103373865D01* X96705642Y-103206839D01* X96841137Y-103013335D01* X96940966Y-102799249D01* X96940969Y-102799243D01* X96998173Y-102585757D01* X96101223Y-102585757D01* X96127030Y-102545601D01* X96167537Y-102407646D01* X96167537Y-102263868D01* X96127030Y-102125913D01* X96101223Y-102085757D01* X96998173Y-102085757D01* X96998172Y-102085756D01* X96940969Y-101872270D01* X96940966Y-101872264D01* X96841137Y-101658179D01* X96841136Y-101658177D01* X96705650Y-101464683D01* X96705645Y-101464677D01* X96589809Y-101348841D01* X96556324Y-101287518D01* X96561308Y-101217826D01* X96603180Y-101161893D01* X96634149Y-101144981D01* X96763741Y-101096646D01* X96880798Y-101009018D01* X96968426Y-100891961D01* X97019526Y-100754958D01* X97023128Y-100721449D01* X97026036Y-100694411D01* X97026037Y-100694394D01* X97026037Y-98897119D01* X97026036Y-98897102D01* X97022694Y-98866027D01* X97019526Y-98836556D01* X96968426Y-98699553D01* X96880798Y-98582496D01* X96763741Y-98494868D01* X96626740Y-98443768D01* X96566191Y-98437257D01* X96566175Y-98437257D01* X94768899Y-98437257D01* X94768882Y-98437257D01* X94708334Y-98443768D01* X94708332Y-98443768D01* X94571332Y-98494868D01* X94454276Y-98582496D01* X94366648Y-98699552D01* X94315548Y-98836552D01* X94315548Y-98836554D01* X94309037Y-98897102D01* X94309037Y-98954500D01* X94289352Y-99021539D01* X94236548Y-99067294D01* X94185037Y-99078500D01* X92328543Y-99078500D01* X92261504Y-99058815D01* X92240862Y-99042181D01* X91767804Y-98569123D01* X91756022Y-98555490D01* X91741472Y-98535946D01* X91741471Y-98535945D01* X91741469Y-98535942D01* X91740595Y-98535208D01* X91700987Y-98501972D01* X91696998Y-98498317D01* X91691102Y-98492421D01* X91691101Y-98492420D01* X91665103Y-98471863D01* X91605640Y-98421968D01* X91605635Y-98421965D01* X91599605Y-98417999D01* X91599630Y-98417959D01* X91593069Y-98413779D01* X91593045Y-98413820D01* X91586904Y-98410031D01* X91516540Y-98377220D01* X91447185Y-98342389D01* X91440401Y-98339920D01* X91440416Y-98339876D01* X91433071Y-98337322D01* X91433057Y-98337367D01* X91426205Y-98335096D01* X91388177Y-98327244D01* X91350149Y-98319392D01* X91274656Y-98301500D01* X91274654Y-98301500D01* X91274646Y-98301498D01* X91267482Y-98300661D01* X91267487Y-98300612D01* X91259757Y-98299822D01* X91259753Y-98299870D01* X91252562Y-98299240D01* X91174920Y-98301500D01* X90027543Y-98301500D01* X89960504Y-98281815D01* X89939862Y-98265181D01* X88678819Y-97004138D01* X88645334Y-96942815D01* X88642500Y-96916457D01* X88642500Y-96016500D01* X88662185Y-95949461D01* X88714989Y-95903706D01* X88766500Y-95892500D01* X88782638Y-95892500D01* X88782654Y-95892499D01* X88809692Y-95889591D01* X88843201Y-95885989D01* X88980204Y-95834889D01* X89097261Y-95747261D01* X89184889Y-95630204D01* X89235989Y-95493201D01* X89241298Y-95443819D01* X89242499Y-95432654D01* X89242500Y-95432637D01* X89242500Y-91835362D01* X89242499Y-91835345D01* X89239157Y-91804270D01* X89235989Y-91774799D01* X89233569Y-91768311D01* X89202553Y-91685154D01* X89184889Y-91637796D01* X89097261Y-91520739D01* X88980204Y-91433111D01* X88843203Y-91382011D01* X88782654Y-91375500D01* X88782638Y-91375500D01* X86985362Y-91375500D01* X86985345Y-91375500D01* X86924797Y-91382011D01* X86924795Y-91382011D01* X86787793Y-91433111D01* X86787793Y-91433112D01* X86681218Y-91512893D01* X86615754Y-91537310D01* X86547481Y-91522458D01* X86532597Y-91512893D01* X86436088Y-91440646D01* X86436086Y-91440645D01* X86301379Y-91390403D01* X86301372Y-91390401D01* X86241844Y-91384000D01* X85594000Y-91384000D01* X85594000Y-93760000D01* X85574315Y-93827039D01* X85521511Y-93872794D01* X85470000Y-93884000D01* X85218000Y-93884000D01* X85150961Y-93864315D01* X85105206Y-93811511D01* X85094000Y-93760000D01* X85094000Y-91384000D01* X84446155Y-91384000D01* X84386627Y-91390401D01* X84386620Y-91390403D01* X84251913Y-91440645D01* X84251910Y-91440647D01* X84155402Y-91512893D01* X84089937Y-91537310D01* X84021664Y-91522458D01* X84006780Y-91512893D01* X83900204Y-91433111D01* X83763203Y-91382011D01* X83702654Y-91375500D01* X83702638Y-91375500D01* X81905362Y-91375500D01* X81905345Y-91375500D01* X81844797Y-91382011D01* X81844795Y-91382011D01* X81707795Y-91433111D01* X81590739Y-91520739D01* X81503111Y-91637795D01* X81452011Y-91774795D01* X81452011Y-91774797D01* X81445500Y-91835345D01* X81445500Y-95432654D01* X81452011Y-95493202D01* X81452011Y-95493204D01* X81503111Y-95630204D01* X81590739Y-95747261D01* X81707796Y-95834889D01* X81844799Y-95885989D01* X81872050Y-95888918D01* X81905345Y-95892499D01* X81905362Y-95892500D01* X82216456Y-95892500D01* X82283495Y-95912185D01* X82304137Y-95928819D01* X83259196Y-96883877D01* X83270977Y-96897509D01* X83285531Y-96917058D01* X83315807Y-96942463D01* X83326005Y-96951020D01* X83329995Y-96954676D01* X83335899Y-96960580D01* X83361896Y-96981136D01* X83421360Y-97031032D01* X83421362Y-97031033D01* X83427396Y-97035002D01* X83427369Y-97035042D01* X83433917Y-97039214D01* X83433943Y-97039173D01* X83440090Y-97042964D01* X83440094Y-97042967D01* X83510453Y-97075775D01* X83579812Y-97110609D01* X83579814Y-97110610D01* X83586595Y-97113078D01* X83586578Y-97113123D01* X83593916Y-97115674D01* X83593932Y-97115629D01* X83600788Y-97117900D01* X83600789Y-97117900D01* X83600793Y-97117902D01* X83676822Y-97133600D01* X83752344Y-97151500D01* X83752346Y-97151500D01* X83759517Y-97152339D01* X83759511Y-97152386D01* X83767242Y-97153176D01* X83767247Y-97153129D01* X83774437Y-97153758D01* X83774441Y-97153757D01* X83774442Y-97153758D01* X83852045Y-97151500D01* X85105457Y-97151500D01* X85172496Y-97171185D01* X85193138Y-97187819D01* X88070845Y-100065526D01* X88104330Y-100126849D01* X88099346Y-100196541D01* X88057474Y-100252474D01* X87993972Y-100276735D01* X87855399Y-100288858D01* X87855389Y-100288860D01* X87635682Y-100347730D01* X87635673Y-100347734D01* X87429513Y-100443868D01* X87356526Y-100494973D01* X87971548Y-101109995D01* X87946801Y-101113554D01* X87822555Y-101170295D01* X87719327Y-101259742D01* X87645481Y-101374649D01* X87619064Y-101464617D01* X87002973Y-100848526D01* X87002972Y-100848527D01* X86951867Y-100921513D01* X86949070Y-100927513D01* X86902897Y-100979951D01* X86835703Y-100999102D01* X86768822Y-100978885D01* X86724307Y-100927511D01* X86721510Y-100921513D01* X86719523Y-100917251D01* X86588198Y-100729700D01* X86426300Y-100567802D01* X86238749Y-100436477D01* X86238745Y-100436475D01* X86031249Y-100339718D01* X86031238Y-100339714D01* X85810089Y-100280457D01* X85810081Y-100280456D01* X85582002Y-100260502D01* X85581997Y-100260502D01* X85418156Y-100274835D01* X85349657Y-100261068D01* X85319669Y-100238988D01* X84665804Y-99585123D01* X84654022Y-99571490D01* X84639472Y-99551946D01* X84639471Y-99551945D01* X84639469Y-99551942D01* X84638595Y-99551208D01* X84598987Y-99517972D01* X84594998Y-99514317D01* X84589102Y-99508421D01* X84589101Y-99508420D01* X84563103Y-99487863D01* X84503640Y-99437968D01* X84503635Y-99437965D01* X84497605Y-99433999D01* X84497630Y-99433959D01* X84491069Y-99429779D01* X84491045Y-99429820D01* X84484904Y-99426031D01* X84414540Y-99393220D01* X84345185Y-99358389D01* X84338401Y-99355920D01* X84338416Y-99355876D01* X84331071Y-99353322D01* X84331057Y-99353367D01* X84324205Y-99351096D01* X84286177Y-99343244D01* X84248149Y-99335392D01* X84172656Y-99317500D01* X84172654Y-99317500D01* X84172646Y-99317498D01* X84165482Y-99316661D01* X84165487Y-99316612D01* X84157757Y-99315822D01* X84157753Y-99315870D01* X84150562Y-99315240D01* X84072920Y-99317500D01* X83751287Y-99317500D01* X83684248Y-99297815D01* X83663606Y-99281181D01* X78589913Y-94207488D01* X78556428Y-94146165D01* X78553594Y-94119807D01* X78553594Y-91575387D01* X78554903Y-91557416D01* X78557848Y-91537310D01* X78558435Y-91533305D01* X78553829Y-91480667D01* X78553594Y-91475265D01* X78553594Y-91466918D01* X78553593Y-91466907D01* X78549746Y-91433998D01* X78545198Y-91382011D01* X78542981Y-91356667D01* X78542979Y-91356662D01* X78541521Y-91349598D01* X78541569Y-91349587D01* X78539888Y-91342003D01* X78539840Y-91342015D01* X78538173Y-91334987D01* X78538173Y-91334981D01* X78511622Y-91262032D01* X78487208Y-91188356D01* X78487205Y-91188352D01* X78484155Y-91181809D01* X78484199Y-91181788D01* X78480811Y-91174789D01* X78480768Y-91174811D01* X78477530Y-91168363D01* X78434860Y-91103488D01* X78394124Y-91037443D01* X78389647Y-91031781D01* X78389684Y-91031750D01* X78384775Y-91025723D01* X78384739Y-91025754D01* X78380099Y-91020225D01* X78380097Y-91020223D01* X78380095Y-91020220D01* X78348985Y-90990869D01* X78323611Y-90966929D01* X77848819Y-90492137D01* X77815334Y-90430814D01* X77812500Y-90404456D01* X77812500Y-89525362D01* X77812499Y-89525345D01* X77809157Y-89494270D01* X77805989Y-89464799D01* X77754889Y-89327796D01* X77675105Y-89221218D01* X77650689Y-89155754D01* X77665541Y-89087481D01* X77675107Y-89072596D01* X77747352Y-88976089D01* X77747354Y-88976086D01* X77797596Y-88841379D01* X77797598Y-88841372D01* X77803999Y-88781844D01* X77804000Y-88781827D01* X77804000Y-88134000D01* X73304000Y-88134000D01* X73304000Y-88781844D01* X73310401Y-88841372D01* X73310403Y-88841379D01* X73360645Y-88976086D01* X73360646Y-88976088D01* X73432893Y-89072597D01* X73457310Y-89138061D01* X73442459Y-89206334D01* X73432893Y-89221218D01* X73353112Y-89327793D01* X73353111Y-89327793D01* X73302011Y-89464795D01* X73302011Y-89464797D01* X73295500Y-89525345D01* X73295500Y-91322654D01* X73302011Y-91383202D01* X73302011Y-91383204D01* X73353111Y-91520204D01* X73427585Y-91619689D01* X73452002Y-91685154D01* X73437150Y-91753427D01* X73427586Y-91768308D01* X73422728Y-91774799D01* X73353111Y-91867795D01* X73302011Y-92004795D01* X73302011Y-92004797D01* X73295500Y-92065345D01* X73295500Y-93862654D01* X73302011Y-93923202D01* X73302011Y-93923204D01* X73353111Y-94060204D01* X73440739Y-94177261D01* X73557796Y-94264889D01* X73694799Y-94315989D01* X73722050Y-94318918D01* X73755345Y-94322499D01* X73755362Y-94322500D01* X75592207Y-94322500D01* X75659246Y-94342185D01* X75705001Y-94394989D01* X75708729Y-94404091D01* X75737473Y-94483065D01* X75761886Y-94556737D01* X75764940Y-94563286D01* X75764896Y-94563306D01* X75768284Y-94570304D01* X75768327Y-94570283D01* X75771563Y-94576728D01* X75771565Y-94576732D01* X75814233Y-94641605D01* X75854970Y-94707651D01* X75854972Y-94707653D01* X75859451Y-94713318D01* X75859413Y-94713347D01* X75864320Y-94719372D01* X75864357Y-94719342D01* X75869002Y-94724878D01* X75925482Y-94778163D01* X81251138Y-100103819D01* X81284623Y-100165142D01* X81279639Y-100234834D01* X81237767Y-100290767D01* X81172303Y-100315184D01* X81163457Y-100315500D01* X80233345Y-100315500D01* X80172797Y-100322011D01* X80172795Y-100322011D01* X80035795Y-100373111D01* X79918739Y-100460739D01* X79831111Y-100577795D01* X79780011Y-100714795D01* X79780011Y-100714797D01* X79773500Y-100775345D01* X79773500Y-102372654D01* X79780011Y-102433202D01* X79780011Y-102433204D01* X79821934Y-102545601D01* X79831111Y-102570204D01* X79918739Y-102687261D01* X80035796Y-102774889D01* X80103831Y-102800265D01* X80172795Y-102825988D01* X80172798Y-102825989D01* X80212755Y-102830285D01* X80277306Y-102857023D01* X80317155Y-102914415D01* X80323500Y-102953574D01* X80323500Y-105856260D01* X80311882Y-105908664D01* X80301096Y-105931793D01* X80301095Y-105931797D01* X80298777Y-105943021D01* X80292584Y-105963710D01* X80288357Y-105974350D01* X80288357Y-105974351D01* X80278971Y-106038425D01* X80278345Y-106041976D01* X80265242Y-106105432D01* X80265241Y-106105441D01* X80265574Y-106116898D01* X80264317Y-106138466D01* X80262659Y-106149785D01* X80262658Y-106149793D01* X80268303Y-106214309D01* X80268512Y-106217896D01* X80269972Y-106268049D01* X80270398Y-106282683D01* X80273363Y-106293747D01* X80277114Y-106315020D01* X80278112Y-106326426D01* X80278112Y-106326427D01* X80298480Y-106387893D01* X80299514Y-106391347D01* X80316290Y-106453952D01* X80321727Y-106464035D01* X80330285Y-106483873D01* X80333885Y-106494735D01* X80333888Y-106494743D01* X80367881Y-106549852D01* X80369684Y-106552975D01* X80400444Y-106610021D01* X80408058Y-106618577D01* X80420958Y-106635905D01* X80426970Y-106645651D01* X80426972Y-106645654D01* X80472775Y-106691456D01* X80475239Y-106694067D01* X80518319Y-106742476D01* X80527698Y-106749043D01* X80544257Y-106762938D01* X81714196Y-107932877D01* X81725977Y-107946509D01* X81740531Y-107966058D01* X81770807Y-107991463D01* X81781005Y-108000020D01* X81784995Y-108003676D01* X81790899Y-108009580D01* X81811456Y-108025834D01* X81816897Y-108030137D01* X81846628Y-108055084D01* X81876360Y-108080032D01* X81876362Y-108080033D01* X81882396Y-108084002D01* X81882369Y-108084042D01* X81888921Y-108088216D01* X81888947Y-108088175D01* X81895099Y-108091970D01* X81964722Y-108124435D01* X81965447Y-108124773D01* X82034812Y-108159609D01* X82034813Y-108159609D01* X82034815Y-108159610D01* X82041594Y-108162077D01* X82041577Y-108162122D01* X82048925Y-108164676D01* X82048941Y-108164631D01* X82055790Y-108166901D01* X82055793Y-108166901D01* X82055794Y-108166902D01* X82131818Y-108182599D01* X82207344Y-108200500D01* X82207345Y-108200500D01* X82207349Y-108200501D01* X82214517Y-108201339D01* X82214511Y-108201386D01* X82222242Y-108202176D01* X82222247Y-108202129D01* X82229437Y-108202758D01* X82229441Y-108202757D01* X82229442Y-108202758D01* X82307045Y-108200500D01* X97217706Y-108200500D01* X97235676Y-108201809D01* X97237862Y-108202129D01* X97259789Y-108205341D01* X97312426Y-108200735D01* X97317828Y-108200500D01* X97326175Y-108200500D01* X97326180Y-108200500D01* X97349835Y-108197734D01* X97359096Y-108196652D01* X97436419Y-108189888D01* X97436422Y-108189887D01* X97436426Y-108189887D01* X97436429Y-108189885D01* X97443493Y-108188427D01* X97443502Y-108188474D01* X97451097Y-108186790D01* X97451087Y-108186744D01* X97458107Y-108185079D01* X97458113Y-108185079D01* X97531065Y-108158526D01* X97604738Y-108134114D01* X97604746Y-108134108D01* X97611284Y-108131061D01* X97611305Y-108131106D01* X97618302Y-108127719D01* X97618280Y-108127675D01* X97624729Y-108124436D01* X97624728Y-108124436D01* X97624732Y-108124435D01* X97689605Y-108081766D01* X97755651Y-108041030D01* X97755655Y-108041025D01* X97761319Y-108036548D01* X97761350Y-108036587D01* X97767374Y-108031680D01* X97767342Y-108031642D01* X97772864Y-108027007D01* X97772874Y-108027001D01* X97798329Y-108000020D01* X97826163Y-107970518D01* X98307518Y-107489162D01* X98788880Y-107007799D01* X98802506Y-106996023D01* X98822058Y-106981469D01* X98856015Y-106941000D01* X98859675Y-106937005D01* X98865580Y-106931101D01* X98871153Y-106924051D01* X98886133Y-106905107D01* X98903708Y-106884161D01* X98936032Y-106845640D01* X98936037Y-106845629D01* X98939999Y-106839607D01* X98940040Y-106839634D01* X98944218Y-106833076D01* X98944176Y-106833050D01* X98947962Y-106826911D01* X98947967Y-106826905D01* X98980775Y-106756547D01* X99015609Y-106687188D01* X99015610Y-106687182D01* X99018077Y-106680405D01* X99018124Y-106680422D01* X99020675Y-106673083D01* X99020629Y-106673068D01* X99022900Y-106666210D01* X99022903Y-106666206D01* X99038607Y-106590149D01* X99056500Y-106514656D01* X99056500Y-106514653D01* X99057339Y-106507483D01* X99057386Y-106507488D01* X99058177Y-106499757D01* X99058130Y-106499753D01* X99058759Y-106492562D01* X99056500Y-106414920D01* X99056500Y-98362293D01* X99057809Y-98344322D01* X99059160Y-98335097D01* X99061341Y-98320211D01* X99061269Y-98319393D01* X99056736Y-98267578D01* X99056500Y-98262171D01* X99056500Y-98253824D01* X99056499Y-98253813D01* X99052652Y-98220904D01* X99045887Y-98143576D01* X99045887Y-98143573D01* X99045885Y-98143568D01* X99044427Y-98136504D01* X99044475Y-98136493D01* X99042794Y-98128909D01* X99042746Y-98128921D01* X99041079Y-98121893D01* X99041079Y-98121887D01* X99014530Y-98048944D01* X98990114Y-97975261D01* X98990112Y-97975257D01* X98987060Y-97968712D01* X98987104Y-97968691D01* X98983720Y-97961701D01* X98983676Y-97961724D01* X98980438Y-97955278D01* X98980435Y-97955268D01* X98937771Y-97890400D01* X98897030Y-97824349D01* X98897025Y-97824344D01* X98892552Y-97818686D01* X98892590Y-97818655D01* X98887681Y-97812629D01* X98887645Y-97812660D01* X98883005Y-97807131D01* X98883003Y-97807129D01* X98883001Y-97807126D01* X98842164Y-97768598D01* X98826517Y-97753835D01* X97609804Y-96537123D01* X97598022Y-96523490D01* X97583472Y-96503946D01* X97583471Y-96503945D01* X97583469Y-96503942D01* X97582595Y-96503208D01* X97542987Y-96469972D01* X97538998Y-96466317D01* X97533102Y-96460421D01* X97533101Y-96460420D01* X97507103Y-96439863D01* X97447640Y-96389968D01* X97447635Y-96389965D01* X97441605Y-96385999D01* X97441630Y-96385959D01* X97435069Y-96381779D01* X97435045Y-96381820D01* X97428904Y-96378031D01* X97358540Y-96345220D01* X97289185Y-96310389D01* X97282401Y-96307920D01* X97282416Y-96307876D01* X97275071Y-96305322D01* X97275057Y-96305367D01* X97268205Y-96303096D01* X97230177Y-96295244D01* X97192149Y-96287392D01* X97116656Y-96269500D01* X97116654Y-96269500D01* X97116646Y-96269498D01* X97109482Y-96268661D01* X97109487Y-96268612D01* X97101757Y-96267822D01* X97101753Y-96267870D01* X97094562Y-96267240D01* X97016920Y-96269500D01* X93075543Y-96269500D01* X93008504Y-96249815D01* X92987862Y-96233181D01* X92234819Y-95480138D01* X92201334Y-95418815D01* X92198500Y-95392457D01* X92198500Y-93862654D01* X92875500Y-93862654D01* X92882011Y-93923202D01* X92882011Y-93923204D01* X92933111Y-94060204D01* X93020739Y-94177261D01* X93137796Y-94264889D01* X93274799Y-94315989D01* X93302050Y-94318918D01* X93335345Y-94322499D01* X93335362Y-94322500D01* X96932638Y-94322500D01* X96932654Y-94322499D01* X96959692Y-94319591D01* X96993201Y-94315989D01* X97130204Y-94264889D01* X97247261Y-94177261D01* X97334889Y-94060204D01* X97385989Y-93923201D01* X97389591Y-93889692D01* X97392499Y-93862654D01* X97392500Y-93862637D01* X97392500Y-92065362D01* X97392499Y-92065345D01* X97389157Y-92034270D01* X97385989Y-92004799D01* X97334889Y-91867796D01* X97334888Y-91867793D01* X97334887Y-91867792D01* X97265272Y-91774799D01* X97260414Y-91768310D01* X97235997Y-91702847D01* X97250848Y-91634574D01* X97260415Y-91619689D01* X97334887Y-91520207D01* X97334888Y-91520206D01* X97351651Y-91475265D01* X97385989Y-91383201D01* X97391173Y-91334981D01* X97392499Y-91322654D01* X97392500Y-91322637D01* X97392500Y-89525362D01* X97392499Y-89525345D01* X97389157Y-89494270D01* X97385989Y-89464799D01* X97334889Y-89327796D01* X97255105Y-89221218D01* X97230689Y-89155754D01* X97245541Y-89087481D01* X97255107Y-89072596D01* X97327352Y-88976089D01* X97327354Y-88976086D01* X97377596Y-88841379D01* X97377598Y-88841372D01* X97383999Y-88781844D01* X97384000Y-88781827D01* X97384000Y-88134000D01* X92884000Y-88134000D01* X92884000Y-88781844D01* X92890401Y-88841372D01* X92890403Y-88841379D01* X92940645Y-88976086D01* X92940646Y-88976088D01* X93012893Y-89072597D01* X93037310Y-89138061D01* X93022459Y-89206334D01* X93012893Y-89221218D01* X92933112Y-89327793D01* X92933111Y-89327793D01* X92882011Y-89464795D01* X92882011Y-89464797D01* X92875500Y-89525345D01* X92875500Y-91322654D01* X92882011Y-91383202D01* X92882011Y-91383204D01* X92933111Y-91520204D01* X93007585Y-91619689D01* X93032002Y-91685154D01* X93017150Y-91753427D01* X93007586Y-91768308D01* X93002728Y-91774799D01* X92933111Y-91867795D01* X92882011Y-92004795D01* X92882011Y-92004797D01* X92875500Y-92065345D01* X92875500Y-93862654D01* X92198500Y-93862654D01* X92198500Y-86242654D01* X92875500Y-86242654D01* X92882011Y-86303202D01* X92882011Y-86303204D01* X92933111Y-86440204D01* X93012893Y-86546780D01* X93037310Y-86612245D01* X93022458Y-86680518D01* X93012893Y-86695402D01* X92940647Y-86791910D01* X92940645Y-86791913D01* X92890403Y-86926620D01* X92890401Y-86926627D01* X92884000Y-86986155D01* X92884000Y-87634000D01* X97384000Y-87634000D01* X97384000Y-86986172D01* X97383999Y-86986155D01* X97377598Y-86926627D01* X97377596Y-86926620D01* X97327354Y-86791913D01* X97327353Y-86791911D01* X97255106Y-86695402D01* X97230689Y-86629938D01* X97245540Y-86561665D01* X97255099Y-86546789D01* X97334889Y-86440204D01* X97385989Y-86303201D01* X97389591Y-86269692D01* X97392499Y-86242654D01* X97392500Y-86242637D01* X97392500Y-84445362D01* X97392499Y-84445345D01* X97389157Y-84414270D01* X97385989Y-84384799D01* X97367558Y-84335385D01* X97334888Y-84247793D01* X97334887Y-84247792D01* X97260415Y-84148311D01* X97235997Y-84082847D01* X97250848Y-84014574D01* X97260415Y-83999689D01* X97334887Y-83900207D01* X97334888Y-83900206D01* X97385988Y-83763204D01* X97385988Y-83763203D01* X97385989Y-83763201D01* X97389591Y-83729692D01* X97392499Y-83702654D01* X97392500Y-83702637D01* X97392500Y-81905362D01* X97392499Y-81905345D01* X97389157Y-81874270D01* X97385989Y-81844799D01* X97382332Y-81834995D01* X97334888Y-81707793D01* X97334887Y-81707792D01* X97260415Y-81608311D01* X97235997Y-81542847D01* X97250848Y-81474574D01* X97260415Y-81459689D01* X97334887Y-81360207D01* X97334888Y-81360206D01* X97385988Y-81223204D01* X97385988Y-81223203D01* X97385989Y-81223201D01* X97389591Y-81189692D01* X97392499Y-81162654D01* X97392500Y-81162637D01* X97392500Y-79365362D01* X97392499Y-79365345D01* X97389157Y-79334270D01* X97385989Y-79304799D01* X97334889Y-79167796D01* X97334888Y-79167793D01* X97334887Y-79167792D01* X97260415Y-79068311D01* X97235997Y-79002847D01* X97250848Y-78934574D01* X97260415Y-78919689D01* X97334887Y-78820207D01* X97334888Y-78820206D01* X97385988Y-78683204D01* X97385988Y-78683203D01* X97385989Y-78683201D01* X97389591Y-78649692D01* X97392499Y-78622654D01* X97392500Y-78622637D01* X97392500Y-76825362D01* X97392499Y-76825345D01* X97389157Y-76794270D01* X97385989Y-76764799D01* X97334889Y-76627796D01* X97255105Y-76521218D01* X97230689Y-76455754D01* X97245541Y-76387481D01* X97255107Y-76372596D01* X97327352Y-76276089D01* X97327354Y-76276086D01* X97377596Y-76141379D01* X97377598Y-76141372D01* X97383999Y-76081844D01* X97384000Y-76081827D01* X97384000Y-75434000D01* X92884000Y-75434000D01* X92884000Y-76081844D01* X92890401Y-76141372D01* X92890403Y-76141379D01* X92940645Y-76276086D01* X92940646Y-76276088D01* X93012893Y-76372597D01* X93037310Y-76438061D01* X93022459Y-76506334D01* X93012893Y-76521218D01* X92933112Y-76627793D01* X92933111Y-76627793D01* X92882011Y-76764795D01* X92882011Y-76764797D01* X92875500Y-76825345D01* X92875500Y-78622654D01* X92882011Y-78683202D01* X92882011Y-78683204D01* X92933111Y-78820204D01* X93007585Y-78919689D01* X93032002Y-78985154D01* X93017150Y-79053427D01* X93007585Y-79068311D01* X92933111Y-79167795D01* X92882011Y-79304795D01* X92882011Y-79304797D01* X92875500Y-79365345D01* X92875500Y-81162654D01* X92882011Y-81223202D01* X92882011Y-81223204D01* X92933111Y-81360204D01* X93007585Y-81459689D01* X93032002Y-81525154D01* X93017150Y-81593427D01* X93007585Y-81608311D01* X92933111Y-81707795D01* X92882011Y-81844795D01* X92882011Y-81844797D01* X92875500Y-81905345D01* X92875500Y-83702654D01* X92882011Y-83763202D01* X92882011Y-83763204D01* X92933111Y-83900204D01* X93007585Y-83999689D01* X93032002Y-84065154D01* X93017150Y-84133427D01* X93007585Y-84148311D01* X92933111Y-84247795D01* X92882011Y-84384795D01* X92882011Y-84384797D01* X92875500Y-84445345D01* X92875500Y-86242654D01* X92198500Y-86242654D01* X92198500Y-46085543D01* X92218185Y-46018504D01* X92234819Y-45997862D01* X92432477Y-45800204D01* X92668408Y-45564272D01* X92729729Y-45530789D01* X92799420Y-45535773D01* X92855354Y-45577644D01* X92879376Y-45638697D01* X92882011Y-45663203D01* X92882011Y-45663204D01* X92921070Y-45767922D01* X92933111Y-45800204D01* X93007097Y-45899038D01* X93007585Y-45899689D01* X93032002Y-45965154D01* X93017150Y-46033427D01* X93007585Y-46048311D01* X92933111Y-46147795D01* X92882011Y-46284795D01* X92882011Y-46284797D01* X92875500Y-46345345D01* X92875500Y-48142654D01* X92882011Y-48203202D01* X92882011Y-48203204D01* X92933111Y-48340204D01* X93012893Y-48446780D01* X93037310Y-48512245D01* X93022458Y-48580518D01* X93012893Y-48595402D01* X92940647Y-48691910D01* X92940645Y-48691913D01* X92890403Y-48826620D01* X92890401Y-48826627D01* X92884000Y-48886155D01* X92884000Y-49534000D01* X97384000Y-49534000D01* X97384000Y-48886172D01* X97383999Y-48886155D01* X97377598Y-48826627D01* X97377596Y-48826620D01* X97327354Y-48691913D01* X97327353Y-48691911D01* X97255106Y-48595402D01* X97230689Y-48529938D01* X97245540Y-48461665D01* X97255099Y-48446789D01* X97334889Y-48340204D01* X97385989Y-48203201D01* X97389883Y-48166978D01* X97392499Y-48142654D01* X97392500Y-48142637D01* X97392500Y-46345362D01* X97392499Y-46345345D01* X97389157Y-46314270D01* X97385989Y-46284799D01* X97370212Y-46242500D01* X97334888Y-46147793D01* X97334887Y-46147792D01* X97260415Y-46048311D01* X97235997Y-45982847D01* X97250848Y-45914574D01* X97260415Y-45899689D01* X97260903Y-45899038D01* X97318719Y-45821805D01* X97334887Y-45800207D01* X97334888Y-45800206D01* X97346929Y-45767925D01* X97385989Y-45663201D01* X97389591Y-45629692D01* X97392499Y-45602654D01* X97392500Y-45602637D01* X97392500Y-44916543D01* X97412185Y-44849504D01* X97464989Y-44803749D01* X97534147Y-44793805D01* X97597703Y-44822830D01* X97604181Y-44828862D01* X98011181Y-45235862D01* X98044666Y-45297185D01* X98047500Y-45323543D01* X98047500Y-53736457D01* X98027815Y-53803496D01* X98011181Y-53824138D01* X97766138Y-54069181D01* X97704815Y-54102666D01* X97678457Y-54105500D01* X97516500Y-54105500D01* X97449461Y-54085815D01* X97403706Y-54033011D01* X97392500Y-53981500D01* X97392500Y-53965362D01* X97392499Y-53965345D01* X97389157Y-53934270D01* X97385989Y-53904799D01* X97334889Y-53767796D01* X97334888Y-53767793D01* X97334887Y-53767792D01* X97260415Y-53668311D01* X97235997Y-53602847D01* X97250848Y-53534574D01* X97260415Y-53519689D01* X97334887Y-53420207D01* X97334888Y-53420206D01* X97385988Y-53283204D01* X97385988Y-53283203D01* X97385989Y-53283201D01* X97389591Y-53249692D01* X97392499Y-53222654D01* X97392500Y-53222637D01* X97392500Y-51425362D01* X97392499Y-51425345D01* X97389157Y-51394270D01* X97385989Y-51364799D01* X97334889Y-51227796D01* X97255105Y-51121218D01* X97230689Y-51055754D01* X97245541Y-50987481D01* X97255107Y-50972596D01* X97327352Y-50876089D01* X97327354Y-50876086D01* X97377596Y-50741379D01* X97377598Y-50741372D01* X97383999Y-50681844D01* X97384000Y-50681827D01* X97384000Y-50034000D01* X92884000Y-50034000D01* X92884000Y-50681844D01* X92890401Y-50741372D01* X92890403Y-50741379D01* X92940645Y-50876086D01* X92940646Y-50876088D01* X93012893Y-50972597D01* X93037310Y-51038061D01* X93022459Y-51106334D01* X93012893Y-51121218D01* X92933112Y-51227793D01* X92933111Y-51227793D01* X92882011Y-51364795D01* X92882011Y-51364797D01* X92875500Y-51425345D01* X92875500Y-53222654D01* X92882011Y-53283202D01* X92882011Y-53283204D01* X92933111Y-53420204D01* X93007585Y-53519689D01* X93032002Y-53585154D01* X93017150Y-53653427D01* X93007585Y-53668311D01* X92933111Y-53767795D01* X92882011Y-53904795D01* X92882011Y-53904797D01* X92875500Y-53965345D01* X92875500Y-55762654D01* X92882011Y-55823202D01* X92882011Y-55823204D01* X92933111Y-55960204D01* X93007585Y-56059689D01* X93032002Y-56125154D01* X93017150Y-56193427D01* X93007585Y-56208311D01* X92933111Y-56307795D01* X92882011Y-56444795D01* X92882011Y-56444797D01* X92875500Y-56505345D01* X92875500Y-58302654D01* X92882011Y-58363202D01* X92882011Y-58363204D01* X92933111Y-58500204D01* X93007585Y-58599689D01* X93032002Y-58665154D01* X93017150Y-58733427D01* X93007585Y-58748311D01* X92933111Y-58847795D01* X92882011Y-58984795D01* X92882011Y-58984797D01* X92875500Y-59045345D01* X92875500Y-60842654D01* X92882011Y-60903202D01* X92882011Y-60903204D01* X92933111Y-61040204D01* X93007585Y-61139689D01* X93032002Y-61205154D01* X93017150Y-61273427D01* X93007586Y-61288308D01* X93001837Y-61295989D01* X92933111Y-61387795D01* X92882011Y-61524795D01* X92882011Y-61524797D01* X92875500Y-61585345D01* X92875500Y-63382654D01* X92882011Y-63443202D01* X92882011Y-63443204D01* X92933111Y-63580204D01* X93007585Y-63679689D01* X93032002Y-63745154D01* X93017150Y-63813427D01* X93007585Y-63828311D01* X92933111Y-63927795D01* X92882011Y-64064795D01* X92882011Y-64064797D01* X92875500Y-64125345D01* X92875500Y-65922654D01* X92882011Y-65983202D01* X92882011Y-65983204D01* X92933111Y-66120204D01* X93007585Y-66219689D01* X93032002Y-66285154D01* X93017150Y-66353427D01* X93007585Y-66368311D01* X92933111Y-66467795D01* X92882011Y-66604795D01* X92882011Y-66604797D01* X92875500Y-66665345D01* X92875500Y-68462654D01* X92882011Y-68523202D01* X92882011Y-68523204D01* X92933111Y-68660204D01* X93007585Y-68759689D01* X93032002Y-68825154D01* X93017150Y-68893427D01* X93007585Y-68908311D01* X92933111Y-69007795D01* X92882011Y-69144795D01* X92882011Y-69144797D01* X92875500Y-69205345D01* X92875500Y-71002654D01* X92882011Y-71063202D01* X92882011Y-71063204D01* X92933111Y-71200204D01* X93007585Y-71299689D01* X93032002Y-71365154D01* X93017150Y-71433427D01* X93007585Y-71448311D01* X92933111Y-71547795D01* X92882011Y-71684795D01* X92882011Y-71684797D01* X92875500Y-71745345D01* X92875500Y-73542654D01* X92882011Y-73603202D01* X92882011Y-73603204D01* X92933111Y-73740204D01* X93012893Y-73846780D01* X93037310Y-73912245D01* X93022458Y-73980518D01* X93012893Y-73995402D01* X92940647Y-74091910D01* X92940645Y-74091913D01* X92890403Y-74226620D01* X92890401Y-74226627D01* X92884000Y-74286155D01* X92884000Y-74934000D01* X97384000Y-74934000D01* X97384000Y-74286172D01* X97383999Y-74286155D01* X97377598Y-74226627D01* X97377596Y-74226620D01* X97327354Y-74091913D01* X97327353Y-74091911D01* X97255106Y-73995402D01* X97230689Y-73929938D01* X97245540Y-73861665D01* X97255099Y-73846789D01* X97334889Y-73740204D01* X97385989Y-73603201D01* X97389591Y-73569692D01* X97392499Y-73542654D01* X97392500Y-73542637D01* X97392500Y-71745362D01* X97392499Y-71745345D01* X97389157Y-71714270D01* X97385989Y-71684799D01* X97371338Y-71645519D01* X97334888Y-71547793D01* X97334887Y-71547792D01* X97260415Y-71448311D01* X97235997Y-71382847D01* X97250848Y-71314574D01* X97260415Y-71299689D01* X97334887Y-71200207D01* X97334888Y-71200206D01* X97385988Y-71063204D01* X97385988Y-71063203D01* X97385989Y-71063201D01* X97389591Y-71029692D01* X97392499Y-71002654D01* X97392500Y-71002637D01* X97392500Y-69205362D01* X97392499Y-69205345D01* X97389157Y-69174270D01* X97385989Y-69144799D01* X97334889Y-69007796D01* X97334888Y-69007793D01* X97334887Y-69007792D01* X97260415Y-68908311D01* X97235997Y-68842847D01* X97250848Y-68774574D01* X97260415Y-68759689D01* X97334887Y-68660207D01* X97334888Y-68660206D01* X97385988Y-68523204D01* X97385988Y-68523203D01* X97385989Y-68523201D01* X97389591Y-68489692D01* X97392499Y-68462654D01* X97392500Y-68462637D01* X97392500Y-66665362D01* X97392499Y-66665345D01* X97389157Y-66634270D01* X97385989Y-66604799D01* X97334889Y-66467796D01* X97334888Y-66467793D01* X97334887Y-66467792D01* X97260415Y-66368311D01* X97235997Y-66302847D01* X97250848Y-66234574D01* X97260415Y-66219689D01* X97334887Y-66120207D01* X97334888Y-66120206D01* X97385988Y-65983204D01* X97385988Y-65983203D01* X97385989Y-65983201D01* X97389591Y-65949692D01* X97392499Y-65922654D01* X97392500Y-65922637D01* X97392500Y-64125362D01* X97392499Y-64125345D01* X97389157Y-64094270D01* X97385989Y-64064799D01* X97334889Y-63927796D01* X97334888Y-63927793D01* X97334887Y-63927792D01* X97260415Y-63828311D01* X97235997Y-63762847D01* X97250848Y-63694574D01* X97260415Y-63679689D01* X97334887Y-63580207D01* X97334888Y-63580206D01* X97385988Y-63443204D01* X97385988Y-63443203D01* X97385989Y-63443201D01* X97389591Y-63409692D01* X97392499Y-63382654D01* X97392500Y-63382637D01* X97392500Y-61585362D01* X97392499Y-61585345D01* X97389157Y-61554270D01* X97385989Y-61524799D01* X97336423Y-61391910D01* X97334888Y-61387793D01* X97334887Y-61387792D01* X97266163Y-61295989D01* X97260414Y-61288310D01* X97235997Y-61222847D01* X97250848Y-61154574D01* X97260415Y-61139689D01* X97334887Y-61040207D01* X97334888Y-61040206D01* X97385988Y-60903204D01* X97385988Y-60903203D01* X97385989Y-60903201D01* X97389591Y-60869692D01* X97392499Y-60842654D01* X97392500Y-60842637D01* X97392500Y-59045362D01* X97392499Y-59045345D01* X97389157Y-59014270D01* X97385989Y-58984799D01* X97334889Y-58847796D01* X97334888Y-58847793D01* X97334887Y-58847792D01* X97260415Y-58748311D01* X97235997Y-58682847D01* X97250848Y-58614574D01* X97260415Y-58599689D01* X97334887Y-58500207D01* X97334888Y-58500206D01* X97385988Y-58363204D01* X97385988Y-58363203D01* X97385989Y-58363201D01* X97389591Y-58329692D01* X97392499Y-58302654D01* X97392500Y-58302637D01* X97392500Y-56505362D01* X97392499Y-56505345D01* X97389157Y-56474270D01* X97385989Y-56444799D01* X97334889Y-56307796D01* X97334888Y-56307793D01* X97334887Y-56307792D01* X97260415Y-56208311D01* X97235997Y-56142847D01* X97250848Y-56074574D01* X97260415Y-56059689D01* X97334887Y-55960207D01* X97334888Y-55960206D01* X97385988Y-55823204D01* X97385988Y-55823203D01* X97385989Y-55823201D01* X97389591Y-55789692D01* X97392499Y-55762654D01* X97392500Y-55762637D01* X97392500Y-55746500D01* X97412185Y-55679461D01* X97464989Y-55633706D01* X97516500Y-55622500D01* X97979706Y-55622500D01* X97997676Y-55623809D01* X98000174Y-55624174D01* X98021789Y-55627341D01* X98074426Y-55622735D01* X98079828Y-55622500D01* X98088175Y-55622500D01* X98088180Y-55622500D01* X98111835Y-55619734D01* X98121096Y-55618652D01* X98198419Y-55611888D01* X98198422Y-55611887D01* X98198426Y-55611887D01* X98198429Y-55611885D01* X98205493Y-55610427D01* X98205502Y-55610474D01* X98213097Y-55608790D01* X98213087Y-55608744D01* X98220107Y-55607079D01* X98220113Y-55607079D01* X98293065Y-55580526D01* X98366738Y-55556114D01* X98366746Y-55556108D01* X98373284Y-55553061D01* X98373305Y-55553106D01* X98380302Y-55549719D01* X98380280Y-55549675D01* X98386729Y-55546436D01* X98386728Y-55546436D01* X98386732Y-55546435D01* X98451605Y-55503766D01* X98517651Y-55463030D01* X98517655Y-55463025D01* X98523319Y-55458548D01* X98523350Y-55458587D01* X98529374Y-55453680D01* X98529342Y-55453642D01* X98534864Y-55449007D01* X98534874Y-55449001D01* X98577430Y-55403894D01* X98588163Y-55392518D01* X99110085Y-54870595D01* X99296880Y-54683799D01* X99310506Y-54672023D01* X99330058Y-54657469D01* X99364015Y-54617000D01* X99367675Y-54613005D01* X99373581Y-54607100D01* X99394135Y-54581104D01* X99444032Y-54521640D01* X99444033Y-54521637D01* X99448004Y-54515601D01* X99448045Y-54515628D01* X99452219Y-54509076D01* X99452176Y-54509050D01* X99455962Y-54502911D01* X99455967Y-54502905D01* X99488775Y-54432547D01* X99523609Y-54363188D01* X99523610Y-54363182D01* X99526077Y-54356405D01* X99526124Y-54356422D01* X99528675Y-54349083D01* X99528629Y-54349068D01* X99530900Y-54342210D01* X99530903Y-54342206D01* X99546607Y-54266149D01* X99564500Y-54190656D01* X99564500Y-54190653D01* X99565339Y-54183483D01* X99565386Y-54183488D01* X99566177Y-54175757D01* X99566130Y-54175753D01* X99566759Y-54168562D01* X99564500Y-54090920D01* X99564500Y-45022293D01* X99565809Y-45004322D01* X99569341Y-44980211D01* X99564735Y-44927573D01* X99564500Y-44922171D01* X99564500Y-44913824D01* X99564499Y-44913813D01* X99560652Y-44880904D01* X99556099Y-44828862D01* X99553887Y-44803573D01* X99553885Y-44803568D01* X99552427Y-44796504D01* X99552475Y-44796493D01* X99550794Y-44788909D01* X99550746Y-44788921D01* X99549079Y-44781893D01* X99549079Y-44781887D01* X99522530Y-44708944D01* X99498114Y-44635261D01* X99498112Y-44635257D01* X99495060Y-44628712D01* X99495104Y-44628691D01* X99491717Y-44621694D01* X99491673Y-44621717D01* X99488434Y-44615267D01* X99479295Y-44601372D01* X99445762Y-44550386D01* X99405029Y-44484349D01* X99405028Y-44484348D01* X99400551Y-44478685D01* X99400589Y-44478654D01* X99395680Y-44472630D01* X99395645Y-44472660D01* X99391005Y-44467131D01* X99391003Y-44467129D01* X99391001Y-44467126D01* X99341126Y-44420071D01* X99334500Y-44413819D01* X97432027Y-42511346D01* X97420245Y-42497713D01* X97405695Y-42478169D01* X97405694Y-42478168D01* X97405692Y-42478165D01* X97400377Y-42473705D01* X97365210Y-42444195D01* X97361221Y-42440540D01* X97355325Y-42434644D01* X97355324Y-42434643D01* X97333292Y-42417222D01* X97329325Y-42414085D01* X97269865Y-42364193D01* X97269863Y-42364191D01* X97269858Y-42364188D01* X97263828Y-42360222D01* X97263853Y-42360182D01* X97257292Y-42356002D01* X97257268Y-42356043D01* X97251127Y-42352254D01* X97180763Y-42319443D01* X97111408Y-42284612D01* X97104624Y-42282143D01* X97104639Y-42282099D01* X97097294Y-42279545D01* X97097280Y-42279590D01* X97090428Y-42277319D01* X97052400Y-42269467D01* X97014372Y-42261615D01* X96938879Y-42243723D01* X96938877Y-42243723D01* X96938869Y-42243721D01* X96931705Y-42242884D01* X96931710Y-42242835D01* X96923980Y-42242045D01* X96923976Y-42242093D01* X96916785Y-42241463D01* X96839143Y-42243723D01* X73226071Y-42243723D01* X73208101Y-42242414D01* X73183983Y-42238881D01* X73138806Y-42242835D01* X73131350Y-42243487D01* X73125949Y-42243723D01* X73117596Y-42243723D01* X73084680Y-42247570D01* X73007351Y-42254335D01* X73000283Y-42255795D01* X73000273Y-42255751D01* X72992683Y-42257433D01* X72992694Y-42257477D01* X72985670Y-42259142D01* X72985664Y-42259143D01* X72985664Y-42259144D01* X72978875Y-42261615D01* X72912710Y-42285696D01* X72839034Y-42310110D01* X72832497Y-42313159D01* X72832477Y-42313117D01* X72825473Y-42316508D01* X72825494Y-42316549D01* X72819046Y-42319787D01* X72754171Y-42362456D01* X72688129Y-42403190D01* X72682460Y-42407673D01* X72682430Y-42407636D01* X72676404Y-42412545D01* X72676434Y-42412580D01* X72670909Y-42417216D01* X72617613Y-42473705D01* X71269122Y-43822195D01* X71255495Y-43833973D01* X71235941Y-43848531D01* X71201977Y-43889006D01* X71198330Y-43892987D01* X71192418Y-43898900D01* X71171863Y-43924896D01* X71121967Y-43984360D01* X71118001Y-43990391D01* X71117963Y-43990366D01* X71113782Y-43996928D01* X71113821Y-43996952D01* X71110032Y-44003094D01* X71077220Y-44073459D01* X71042391Y-44142810D01* X71039923Y-44149593D01* X71039878Y-44149576D01* X71037322Y-44156932D01* X71037366Y-44156947D01* X71035096Y-44163795D01* X71031256Y-44182393D01* X71019392Y-44239850D01* X71007890Y-44288383D01* X71001498Y-44315351D01* X71000661Y-44322519D01* X71000613Y-44322513D01* X70999823Y-44330244D01* X70999870Y-44330249D01* X70999240Y-44337438D01* X71001500Y-44415079D01* X71001500Y-54340874D01* X70981815Y-54407913D01* X70965181Y-54428555D01* X70092542Y-55301193D01* X70078915Y-55312971D01* X70059361Y-55327529D01* X70025397Y-55368004D01* X70021750Y-55371985D01* X70015838Y-55377898D01* X69995283Y-55403894D01* X69945387Y-55463358D01* X69941421Y-55469389D01* X69941383Y-55469364D01* X69937202Y-55475926D01* X69937241Y-55475950D01* X69933452Y-55482092D01* X69900640Y-55552457D01* X69865811Y-55621808D01* X69863343Y-55628591D01* X69863298Y-55628574D01* X69860742Y-55635930D01* X69860786Y-55635945D01* X69858516Y-55642793D01* X69850945Y-55679461D01* X69842812Y-55718848D01* X69836259Y-55746500D01* X69824918Y-55794349D01* X69824081Y-55801517D01* X69824033Y-55801511D01* X69823243Y-55809242D01* X69823290Y-55809247D01* X69822660Y-55816436D01* X69824920Y-55894077D01* X69824920Y-71291036D01* X69805235Y-71358075D01* X69788601Y-71378717D01* X68550813Y-72616504D01* X68537186Y-72628282D01* X68517632Y-72642840D01* X68483668Y-72683315D01* X68480021Y-72687296D01* X68474109Y-72693209D01* X68453554Y-72719205D01* X68403658Y-72778669D01* X68399692Y-72784700D01* X68399654Y-72784675D01* X68395473Y-72791237D01* X68395512Y-72791261D01* X68391723Y-72797403D01* X68358911Y-72867768D01* X68324082Y-72937119D01* X68321614Y-72943902D01* X68321569Y-72943885D01* X68319013Y-72951241D01* X68319057Y-72951256D01* X68316787Y-72958105D01* X68301083Y-73034159D01* X68299585Y-73040480D01* X68264970Y-73101173D01* X68203037Y-73133516D01* X68133450Y-73127241D01* X68078301Y-73084341D01* X68055101Y-73018435D01* X68054928Y-73011813D01* X68055008Y-72867768D01* X68072615Y-41271371D01* X68092337Y-41204343D01* X68145166Y-41158618D01* X68196052Y-41147442D01* X76340746Y-41110624D01* X100540073Y-41110624D01* X100607112Y-41130309D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,GND*% G36* X65672009Y-41130309D02* G01* X65717764Y-41183113D01* X65727708Y-41252271D01* X65698683Y-41315827D01* X65657989Y-41346717D01* X65327510Y-41503022D01* X65327506Y-41503024D01* X64973515Y-41715198D01* X64642011Y-41961058D01* X64336215Y-42238215D01* X64059058Y-42544011D01* X63813198Y-42875515D01* X63601024Y-43229506D01* X63424562Y-43602604D01* X63424555Y-43602620D01* X63285527Y-43991178D01* X63285524Y-43991186D01* X63285524Y-43991189D01* X63279908Y-44013611D01* X63185244Y-44391528D01* X63126156Y-44789867D01* X63124685Y-44799782D01* X63104434Y-45212000D01* X63124685Y-45624218D01* X63124685Y-45624223D01* X63124686Y-45624227D01* X63168275Y-45918074D01* X63180641Y-46001444D01* X63185244Y-46032471D01* X63285527Y-46432821D01* X63424555Y-46821379D01* X63424562Y-46821395D01* X63424564Y-46821400D01* X63601022Y-47194490D01* X63695202Y-47351619D01* X63777615Y-47489118D01* X63813200Y-47548487D01* X64035518Y-47848249D01* X64059058Y-47879988D01* X64336215Y-48185784D01* X64642011Y-48462941D01* X64642017Y-48462946D01* X64973513Y-48708800D01* X65327510Y-48920978D01* X65700600Y-49097436D01* X65700609Y-49097439D01* X65700620Y-49097444D01* X66089179Y-49236473D01* X66089182Y-49236474D01* X66089186Y-49236475D01* X66089189Y-49236476D01* X66330597Y-49296945D01* X66390843Y-49332328D01* X66422396Y-49394667D01* X66424466Y-49417234D01* X66423296Y-72689773D01* X66403608Y-72756812D01* X66350802Y-72802564D01* X66281643Y-72812504D01* X66218089Y-72783476D01* X66193756Y-72754862D01* X66171565Y-72718883D01* X66167089Y-72713223D01* X66167126Y-72713192D01* X66162217Y-72707165D01* X66162181Y-72707196D01* X66157541Y-72701667D01* X66157539Y-72701665D01* X66157537Y-72701662D01* X66126427Y-72672311D01* X66101053Y-72648371D01* X64821110Y-71368428D01* X64787625Y-71307105D01* X64784791Y-71280747D01* X64784791Y-55726876D01* X64786100Y-55708906D01* X64789632Y-55684790D01* X64785027Y-55632161D01* X64784791Y-55626754D01* X64784791Y-55618406D01* X64784790Y-55618395D01* X64780943Y-55585485D01* X64774178Y-55508158D01* X64772718Y-55501085D01* X64772764Y-55501075D01* X64771081Y-55493484D01* X64771035Y-55493496D01* X64769371Y-55486477D01* X64769370Y-55486469D01* X64742817Y-55413516D01* X64718405Y-55339844D01* X64718404Y-55339842D01* X64715352Y-55333297D01* X64715396Y-55333276D01* X64712008Y-55326277D01* X64711965Y-55326299D01* X64708727Y-55319851D01* X64666057Y-55254976D01* X64625321Y-55188931D01* X64620844Y-55183269D01* X64620881Y-55183238D01* X64615972Y-55177211D01* X64615936Y-55177242D01* X64611296Y-55171713D01* X64611294Y-55171711D01* X64611292Y-55171708D01* X64580182Y-55142357D01* X64554808Y-55118417D01* X63793762Y-54357372D01* X63781980Y-54343739D01* X63767430Y-54324195D01* X63767429Y-54324194D01* X63767427Y-54324191D01* X63766553Y-54323457D01* X63726945Y-54290221D01* X63722956Y-54286566D01* X63717060Y-54280670D01* X63717059Y-54280669D01* X63691061Y-54260112D01* X63631598Y-54210217D01* X63631593Y-54210214D01* X63625563Y-54206248D01* X63625588Y-54206208D01* X63619027Y-54202028D01* X63619003Y-54202069D01* X63612862Y-54198280D01* X63542498Y-54165469D01* X63473143Y-54130638D01* X63466359Y-54128169D01* X63466374Y-54128125D01* X63459029Y-54125571D01* X63459015Y-54125616D01* X63452163Y-54123345D01* X63414135Y-54115493D01* X63376107Y-54107641D01* X63300614Y-54089749D01* X63300612Y-54089749D01* X63300604Y-54089747D01* X63293440Y-54088910D01* X63293445Y-54088861D01* X63285715Y-54088071D01* X63285711Y-54088119D01* X63278520Y-54087489D01* X63200878Y-54089749D01* X61058023Y-54089749D01* X60990984Y-54070064D01* X60945229Y-54017260D01* X60934023Y-53965749D01* X60934023Y-53949611D01* X60934022Y-53949594D01* X60930680Y-53918519D01* X60927512Y-53889048D01* X60876412Y-53752045D01* X60876411Y-53752042D01* X60876410Y-53752041D01* X60801938Y-53652560D01* X60777520Y-53587096D01* X60792371Y-53518823D01* X60801938Y-53503938D01* X60876410Y-53404456D01* X60876411Y-53404455D01* X60927511Y-53267453D01* X60927511Y-53267452D01* X60927512Y-53267450D01* X60931114Y-53233941D01* X60934022Y-53206903D01* X60934023Y-53206886D01* X60934023Y-51409611D01* X60934022Y-51409594D01* X60930680Y-51378519D01* X60927512Y-51349048D01* X60876412Y-51212045D01* X60796628Y-51105467D01* X60772212Y-51040003D01* X60787064Y-50971730D01* X60796630Y-50956845D01* X60868875Y-50860338D01* X60868877Y-50860335D01* X60919119Y-50725628D01* X60919121Y-50725621D01* X60925522Y-50666093D01* X60925523Y-50666076D01* X60925523Y-50018249D01* X56425523Y-50018249D01* X56425523Y-50666093D01* X56431924Y-50725621D01* X56431926Y-50725628D01* X56482168Y-50860335D01* X56482169Y-50860337D01* X56554416Y-50956846D01* X56578833Y-51022310D01* X56563982Y-51090583D01* X56554416Y-51105467D01* X56474635Y-51212042D01* X56474634Y-51212042D01* X56423534Y-51349044D01* X56423534Y-51349046D01* X56417023Y-51409594D01* X56417023Y-53206903D01* X56423534Y-53267451D01* X56423534Y-53267453D01* X56474634Y-53404453D01* X56549108Y-53503938D01* X56573525Y-53569403D01* X56558673Y-53637676D01* X56549108Y-53652560D01* X56474634Y-53752044D01* X56423534Y-53889044D01* X56423534Y-53889046D01* X56417023Y-53949594D01* X56417023Y-55746903D01* X56423534Y-55807451D01* X56423534Y-55807453D01* X56474634Y-55944453D01* X56549108Y-56043938D01* X56573525Y-56109403D01* X56558673Y-56177676D01* X56549108Y-56192560D01* X56474634Y-56292044D01* X56423534Y-56429044D01* X56423534Y-56429046D01* X56417023Y-56489594D01* X56417023Y-58286903D01* X56423534Y-58347451D01* X56423534Y-58347453D01* X56474634Y-58484453D01* X56549108Y-58583938D01* X56573525Y-58649403D01* X56558673Y-58717676D01* X56549108Y-58732560D01* X56474634Y-58832044D01* X56423534Y-58969044D01* X56423534Y-58969046D01* X56417023Y-59029594D01* X56417023Y-60826903D01* X56423534Y-60887451D01* X56423534Y-60887453D01* X56474634Y-61024453D01* X56549108Y-61123938D01* X56573525Y-61189403D01* X56558673Y-61257676D01* X56549109Y-61272557D01* X56543360Y-61280238D01* X56474634Y-61372044D01* X56423534Y-61509044D01* X56423534Y-61509046D01* X56417023Y-61569594D01* X56417023Y-63366903D01* X56423534Y-63427451D01* X56423534Y-63427453D01* X56474634Y-63564453D01* X56549108Y-63663938D01* X56573525Y-63729403D01* X56558673Y-63797676D01* X56549108Y-63812560D01* X56474634Y-63912044D01* X56423534Y-64049044D01* X56423534Y-64049046D01* X56417023Y-64109594D01* X56417023Y-65906903D01* X56423534Y-65967451D01* X56423534Y-65967453D01* X56474634Y-66104453D01* X56549108Y-66203938D01* X56573525Y-66269403D01* X56558673Y-66337676D01* X56549108Y-66352560D01* X56474634Y-66452044D01* X56423534Y-66589044D01* X56423534Y-66589046D01* X56417023Y-66649594D01* X56417023Y-68446903D01* X56423534Y-68507451D01* X56423534Y-68507453D01* X56474634Y-68644453D01* X56549108Y-68743938D01* X56573525Y-68809403D01* X56558673Y-68877676D01* X56549108Y-68892560D01* X56474634Y-68992044D01* X56423534Y-69129044D01* X56423534Y-69129046D01* X56417023Y-69189594D01* X56417023Y-70986903D01* X56423534Y-71047451D01* X56423534Y-71047453D01* X56474634Y-71184453D01* X56549108Y-71283938D01* X56573525Y-71349403D01* X56558673Y-71417676D01* X56549108Y-71432560D01* X56474634Y-71532044D01* X56423534Y-71669044D01* X56423534Y-71669046D01* X56417023Y-71729594D01* X56417023Y-73526903D01* X56423534Y-73587451D01* X56423534Y-73587453D01* X56474634Y-73724453D01* X56554416Y-73831029D01* X56578833Y-73896494D01* X56563981Y-73964767D01* X56554416Y-73979651D01* X56482170Y-74076159D01* X56482168Y-74076162D01* X56431926Y-74210869D01* X56431924Y-74210876D01* X56425523Y-74270404D01* X56425523Y-74918249D01* X60925523Y-74918249D01* X60925523Y-74679999D01* X61285036Y-74679999D01* X62197536Y-74679999D01* X62197536Y-73529999D01* X62697536Y-73529999D01* X62697536Y-74679999D01* X63610035Y-74679999D01* X63610035Y-74230027D01* X63610034Y-74230012D01* X63599541Y-74127301D01* X63544394Y-73960879D01* X63544392Y-73960874D01* X63452351Y-73811653D01* X63328381Y-73687683D01* X63179160Y-73595642D01* X63179155Y-73595640D01* X63012733Y-73540493D01* X63012726Y-73540492D01* X62910022Y-73529999D01* X62697536Y-73529999D01* X62197536Y-73529999D01* X61985065Y-73529999D01* X61985048Y-73530000D01* X61882338Y-73540493D01* X61715916Y-73595640D01* X61715911Y-73595642D01* X61566690Y-73687683D01* X61442720Y-73811653D01* X61350679Y-73960874D01* X61350677Y-73960879D01* X61295530Y-74127301D01* X61295529Y-74127308D01* X61285036Y-74230012D01* X61285036Y-74679999D01* X60925523Y-74679999D01* X60925523Y-74270421D01* X60925522Y-74270404D01* X60919121Y-74210876D01* X60919119Y-74210869D01* X60868877Y-74076162D01* X60868876Y-74076160D01* X60796629Y-73979651D01* X60772212Y-73914187D01* X60787063Y-73845914D01* X60796622Y-73831038D01* X60876412Y-73724453D01* X60927512Y-73587450D01* X60931114Y-73553941D01* X60934022Y-73526903D01* X60934023Y-73526886D01* X60934023Y-71729611D01* X60934022Y-71729594D01* X60928626Y-71679411D01* X60927512Y-71669048D01* X60910740Y-71624082D01* X60876411Y-71532042D01* X60876410Y-71532041D01* X60801938Y-71432560D01* X60777520Y-71367096D01* X60792371Y-71298823D01* X60801938Y-71283938D01* X60876410Y-71184456D01* X60876411Y-71184455D01* X60927511Y-71047453D01* X60927511Y-71047452D01* X60927512Y-71047450D01* X60931114Y-71013941D01* X60934022Y-70986903D01* X60934023Y-70986886D01* X60934023Y-69189611D01* X60934022Y-69189594D01* X60930680Y-69158519D01* X60927512Y-69129048D01* X60876412Y-68992045D01* X60876411Y-68992042D01* X60876410Y-68992041D01* X60801938Y-68892560D01* X60777520Y-68827096D01* X60792371Y-68758823D01* X60801938Y-68743938D01* X60876410Y-68644456D01* X60876411Y-68644455D01* X60927511Y-68507453D01* X60927511Y-68507452D01* X60927512Y-68507450D01* X60931114Y-68473941D01* X60934022Y-68446903D01* X60934023Y-68446886D01* X60934023Y-66649611D01* X60934022Y-66649594D01* X60930680Y-66618519D01* X60927512Y-66589048D01* X60876412Y-66452045D01* X60876411Y-66452042D01* X60876410Y-66452041D01* X60801938Y-66352560D01* X60777520Y-66287096D01* X60792371Y-66218823D01* X60801938Y-66203938D01* X60876410Y-66104456D01* X60876411Y-66104455D01* X60927511Y-65967453D01* X60927511Y-65967452D01* X60927512Y-65967450D01* X60931114Y-65933941D01* X60934022Y-65906903D01* X60934023Y-65906886D01* X60934023Y-64109611D01* X60934022Y-64109594D01* X60930680Y-64078519D01* X60927512Y-64049048D01* X60876412Y-63912045D01* X60876411Y-63912042D01* X60876410Y-63912041D01* X60801938Y-63812560D01* X60777520Y-63747096D01* X60792371Y-63678823D01* X60801938Y-63663938D01* X60876410Y-63564456D01* X60876411Y-63564455D01* X60927511Y-63427453D01* X60927511Y-63427452D01* X60927512Y-63427450D01* X60931114Y-63393941D01* X60934022Y-63366903D01* X60934023Y-63366886D01* X60934023Y-61569611D01* X60934022Y-61569594D01* X60930680Y-61538519D01* X60927512Y-61509048D01* X60877946Y-61376159D01* X60876411Y-61372042D01* X60876410Y-61372041D01* X60807686Y-61280238D01* X60801937Y-61272559D01* X60777520Y-61207096D01* X60792371Y-61138823D01* X60801938Y-61123938D01* X60876410Y-61024456D01* X60876411Y-61024455D01* X60927511Y-60887453D01* X60927511Y-60887452D01* X60927512Y-60887450D01* X60931114Y-60853941D01* X60934022Y-60826903D01* X60934023Y-60826886D01* X60934023Y-59029611D01* X60934022Y-59029594D01* X60930680Y-58998519D01* X60927512Y-58969048D01* X60876412Y-58832045D01* X60876411Y-58832042D01* X60876410Y-58832041D01* X60801938Y-58732560D01* X60777520Y-58667096D01* X60792371Y-58598823D01* X60801938Y-58583938D01* X60876410Y-58484456D01* X60876411Y-58484455D01* X60927511Y-58347453D01* X60927511Y-58347452D01* X60927512Y-58347450D01* X60931114Y-58313941D01* X60934022Y-58286903D01* X60934023Y-58286886D01* X60934023Y-56489611D01* X60934022Y-56489594D01* X60930680Y-56458519D01* X60927512Y-56429048D01* X60876412Y-56292045D01* X60876411Y-56292042D01* X60876410Y-56292041D01* X60801938Y-56192560D01* X60777520Y-56127096D01* X60792371Y-56058823D01* X60801938Y-56043938D01* X60876410Y-55944456D01* X60876411Y-55944455D01* X60927511Y-55807453D01* X60927511Y-55807452D01* X60927512Y-55807450D01* X60931114Y-55773941D01* X60934022Y-55746903D01* X60934023Y-55746886D01* X60934023Y-55730749D01* X60953708Y-55663710D01* X61006512Y-55617955D01* X61058023Y-55606749D01* X62846415Y-55606749D01* X62913454Y-55626434D01* X62934096Y-55643068D01* X63231472Y-55940444D01* X63264957Y-56001767D01* X63267791Y-56028125D01* X63267791Y-71581997D01* X63266482Y-71599967D01* X63262949Y-71624082D01* X63267555Y-71676711D01* X63267791Y-71682118D01* X63267791Y-71690469D01* X63271638Y-71723387D01* X63278403Y-71800718D01* X63279863Y-71807785D01* X63279817Y-71807794D01* X63281500Y-71815385D01* X63281545Y-71815375D01* X63283210Y-71822401D01* X63309764Y-71895356D01* X63334177Y-71969028D01* X63337231Y-71975577D01* X63337187Y-71975597D01* X63340575Y-71982595D01* X63340618Y-71982574D01* X63343854Y-71989019D01* X63343856Y-71989023D01* X63386524Y-72053896D01* X63427261Y-72119942D01* X63427263Y-72119944D01* X63431742Y-72125609D01* X63431704Y-72125638D01* X63436611Y-72131663D01* X63436648Y-72131633D01* X63441293Y-72137169D01* X63497773Y-72190454D01* X64762221Y-73454902D01* X64795706Y-73516225D01* X64790722Y-73585917D01* X64748850Y-73641850D01* X64739638Y-73648121D01* X64686384Y-73680968D01* X64561007Y-73806345D01* X64467922Y-73957258D01* X64467920Y-73957263D01* X64412149Y-74125571D01* X64401536Y-74229446D01* X64401536Y-75630536D01* X64401537Y-75630552D01* X64411972Y-75732689D01* X64412149Y-75734425D01* X64467921Y-75902737D01* X64561006Y-76053651D01* X64686384Y-76179029D01* X64755134Y-76221434D01* X64801857Y-76273381D01* X64814036Y-76326972D01* X64814036Y-81511921D01* X64794351Y-81578960D01* X64777717Y-81599602D01* X64651028Y-81726291D01* X64589705Y-81759776D01* X64563347Y-81762610D01* X63861565Y-81762610D01* X63824240Y-81765547D01* X63824234Y-81765548D01* X63664473Y-81811963D01* X63664468Y-81811965D01* X63521266Y-81896654D01* X63521257Y-81896661D01* X63403621Y-82014297D01* X63403614Y-82014306D01* X63318925Y-82157508D01* X63318923Y-82157513D01* X63272508Y-82317274D01* X63272507Y-82317280D01* X63269570Y-82354605D01* X63269570Y-82787615D01* X63272507Y-82824939D01* X63272508Y-82824945D01* X63295158Y-82902905D01* X63294959Y-82972775D01* X63257017Y-83031445D01* X63193378Y-83060288D01* X63176082Y-83061500D01* X62294294Y-83061500D01* X62276324Y-83060191D01* X62252206Y-83056658D01* X62206651Y-83060645D01* X62199573Y-83061264D01* X62194172Y-83061500D01* X62185820Y-83061500D01* X62169362Y-83063423D01* X62152904Y-83065347D01* X62075577Y-83072112D01* X62068503Y-83073573D01* X62068493Y-83073526D01* X62060905Y-83075209D01* X62060916Y-83075255D01* X62053890Y-83076920D01* X61980944Y-83103469D01* X61907261Y-83127885D01* X61900713Y-83130939D01* X61900693Y-83130896D01* X61893702Y-83134280D01* X61893724Y-83134323D01* X61887269Y-83137564D01* X61822400Y-83180228D01* X61756352Y-83220968D01* X61750682Y-83225451D01* X61750652Y-83225413D01* X61744627Y-83230322D01* X61744657Y-83230357D01* X61739132Y-83234993D01* X61739126Y-83234998D01* X61739126Y-83234999D01* X61692609Y-83284303D01* X61685836Y-83291482D01* X61190337Y-83786980D01* X61176710Y-83798758D01* X61157154Y-83813318D01* X61157153Y-83813319D01* X61147458Y-83824873D01* X61089285Y-83863573D01* X61019425Y-83864679D01* X60960056Y-83827840D01* X60930029Y-83764751D01* X60929183Y-83731907D01* X60934022Y-83686901D01* X60934023Y-83686886D01* X60934023Y-81889611D01* X60934022Y-81889594D01* X60930680Y-81858519D01* X60927512Y-81829048D01* X60921140Y-81811965D01* X60876411Y-81692042D01* X60876410Y-81692041D01* X60801938Y-81592560D01* X60777520Y-81527096D01* X60792371Y-81458823D01* X60801938Y-81443938D01* X60876410Y-81344456D01* X60876411Y-81344455D01* X60927511Y-81207453D01* X60927511Y-81207452D01* X60927512Y-81207450D01* X60931114Y-81173941D01* X60934022Y-81146903D01* X60934023Y-81146886D01* X60934023Y-79349611D01* X60934022Y-79349594D01* X60930680Y-79318519D01* X60927512Y-79289048D01* X60876412Y-79152045D01* X60876411Y-79152042D01* X60876410Y-79152041D01* X60801938Y-79052560D01* X60777520Y-78987096D01* X60792371Y-78918823D01* X60801938Y-78903938D01* X60876410Y-78804456D01* X60876411Y-78804455D01* X60927511Y-78667453D01* X60927511Y-78667452D01* X60927512Y-78667450D01* X60931114Y-78633941D01* X60934022Y-78606903D01* X60934023Y-78606886D01* X60934023Y-76809611D01* X60934022Y-76809594D01* X60930680Y-76778519D01* X60927512Y-76749048D01* X60876412Y-76612045D01* X60796628Y-76505467D01* X60772212Y-76440003D01* X60787064Y-76371730D01* X60796630Y-76356845D01* X60868875Y-76260338D01* X60868877Y-76260335D01* X60919119Y-76125628D01* X60919121Y-76125621D01* X60925522Y-76066093D01* X60925523Y-76066076D01* X60925523Y-75418249D01* X56425523Y-75418249D01* X56425523Y-76066093D01* X56431924Y-76125621D01* X56431926Y-76125628D01* X56482168Y-76260335D01* X56482169Y-76260337D01* X56554416Y-76356846D01* X56578833Y-76422310D01* X56563982Y-76490583D01* X56554416Y-76505467D01* X56474635Y-76612042D01* X56474634Y-76612042D01* X56423534Y-76749044D01* X56423534Y-76749046D01* X56417023Y-76809594D01* X56417023Y-78606903D01* X56423534Y-78667451D01* X56423534Y-78667453D01* X56474634Y-78804453D01* X56549108Y-78903938D01* X56573525Y-78969403D01* X56558673Y-79037676D01* X56549108Y-79052560D01* X56474634Y-79152044D01* X56423534Y-79289044D01* X56423534Y-79289046D01* X56417023Y-79349594D01* X56417023Y-81146903D01* X56423534Y-81207451D01* X56423534Y-81207453D01* X56474634Y-81344453D01* X56549108Y-81443938D01* X56573525Y-81509403D01* X56558673Y-81577676D01* X56549108Y-81592560D01* X56474634Y-81692044D01* X56423534Y-81829044D01* X56423534Y-81829046D01* X56417023Y-81889594D01* X56417023Y-83686903D01* X56423534Y-83747451D01* X56423534Y-83747453D01* X56474634Y-83884453D01* X56549108Y-83983938D01* X56573525Y-84049403D01* X56558673Y-84117676D01* X56549108Y-84132560D01* X56474634Y-84232044D01* X56423534Y-84369044D01* X56423534Y-84369046D01* X56417023Y-84429594D01* X56417023Y-86226903D01* X56423534Y-86287451D01* X56423534Y-86287453D01* X56474634Y-86424453D01* X56554416Y-86531029D01* X56578833Y-86596494D01* X56563981Y-86664767D01* X56554416Y-86679651D01* X56482170Y-86776159D01* X56482168Y-86776162D01* X56431926Y-86910869D01* X56431924Y-86910876D01* X56425523Y-86970404D01* X56425523Y-87618249D01* X58801523Y-87618249D01* X58868562Y-87637934D01* X58914317Y-87690738D01* X58925523Y-87742249D01* X58925523Y-87994249D01* X58905838Y-88061288D01* X58853034Y-88107043D01* X58801523Y-88118249D01* X56425523Y-88118249D01* X56425523Y-88766093D01* X56431924Y-88825621D01* X56431926Y-88825628D01* X56482168Y-88960335D01* X56482169Y-88960337D01* X56554416Y-89056846D01* X56578833Y-89122310D01* X56563982Y-89190583D01* X56554416Y-89205467D01* X56474635Y-89312042D01* X56474634Y-89312042D01* X56423534Y-89449044D01* X56423534Y-89449046D01* X56417023Y-89509594D01* X56417023Y-91306903D01* X56423534Y-91367451D01* X56423534Y-91367453D01* X56474634Y-91504453D01* X56549108Y-91603938D01* X56573525Y-91669403D01* X56558673Y-91737676D01* X56549109Y-91752557D01* X56544251Y-91759048D01* X56474634Y-91852044D01* X56423534Y-91989044D01* X56423534Y-91989046D01* X56417023Y-92049594D01* X56417023Y-93846903D01* X56423534Y-93907451D01* X56423534Y-93907453D01* X56474634Y-94044453D01* X56562262Y-94161510D01* X56679319Y-94249138D01* X56816322Y-94300238D01* X56843573Y-94303167D01* X56876868Y-94306748D01* X56876885Y-94306749D01* X60474161Y-94306749D01* X60474177Y-94306748D01* X60501215Y-94303840D01* X60534724Y-94300238D01* X60671727Y-94249138D01* X60788784Y-94161510D01* X60876412Y-94044453D01* X60927512Y-93907450D01* X60931114Y-93873941D01* X60934022Y-93846903D01* X60934023Y-93846886D01* X60934023Y-93660176D01* X60953708Y-93593137D01* X60992929Y-93554636D01* X60993221Y-93554455D01* X61004857Y-93547279D01* X61004863Y-93547272D01* X61010525Y-93542797D01* X61010556Y-93542836D01* X61016580Y-93537929D01* X61016548Y-93537891D01* X61022070Y-93533256D01* X61022080Y-93533250D01* X61044029Y-93509984D01* X61075369Y-93476767D01* X62817147Y-91734988D01* X63453519Y-91098615D01* X63467145Y-91086839D01* X63486697Y-91072285D01* X63496565Y-91060525D01* X63520654Y-91031816D01* X63524314Y-91027821D01* X63530220Y-91021916D01* X63550774Y-90995920D01* X63600671Y-90936456D01* X63600672Y-90936453D01* X63604643Y-90930417D01* X63604684Y-90930444D01* X63608858Y-90923892D01* X63608815Y-90923866D01* X63612601Y-90917727D01* X63612606Y-90917721D01* X63645414Y-90847363D01* X63680248Y-90778004D01* X63680249Y-90777998D01* X63682716Y-90771221D01* X63682763Y-90771238D01* X63685314Y-90763899D01* X63685268Y-90763884D01* X63687539Y-90757026D01* X63687542Y-90757022D01* X63703246Y-90680965D01* X63721139Y-90605472D01* X63721139Y-90605469D01* X63721978Y-90598299D01* X63722025Y-90598304D01* X63722816Y-90590573D01* X63722769Y-90590569D01* X63723398Y-90583378D01* X63721139Y-90505735D01* X63721139Y-87304132D01* X63740824Y-87237093D01* X63793628Y-87191338D01* X63854879Y-87180515D01* X63862432Y-87181110D01* X64503070Y-87181110D01* X64503070Y-86255110D01* X64522755Y-86188071D01* X64575559Y-86142316D01* X64627070Y-86131110D01* X64879070Y-86131110D01* X64946109Y-86150795D01* X64991864Y-86203599D01* X65003070Y-86255110D01* X65003070Y-87181110D01* X65643714Y-87181110D01* X65680559Y-87178210D01* X65680565Y-87178209D01* X65838263Y-87132393D01* X65838266Y-87132392D01* X65979622Y-87048795D01* X65979631Y-87048788D01* X66095748Y-86932671D01* X66095755Y-86932662D01* X66179351Y-86791308D01* X66179508Y-86790770D01* X66179746Y-86790396D01* X66182452Y-86784145D01* X66183460Y-86784581D01* X66217112Y-86731883D01* X66280583Y-86702674D01* X66349770Y-86712417D01* X66402707Y-86758018D01* X66422585Y-86825000D01* X66422586Y-86825366D01* X66421151Y-115382479D01* X66401463Y-115449518D01* X66348657Y-115495270D01* X66297197Y-115506473D01* X33922949Y-115518468D01* X33855902Y-115498808D01* X33810128Y-115446021D01* X33798903Y-115394468D01* X33798903Y-111506000D01* X35791210Y-111506000D01* X35810347Y-111785794D01* X35810348Y-111785796D01* X35867403Y-112060364D01* X35867408Y-112060381D01* X35961319Y-112324622D01* X35961320Y-112324624D01* X36090348Y-112573637D01* X36090352Y-112573643D01* X36228744Y-112769699D01* X36228745Y-112769700D01* X36731073Y-112267372D01* X36807890Y-112377078D01* X36974922Y-112544110D01* X37084626Y-112620925D01* X36583740Y-113121811D01* X36661046Y-113184704D01* X36900664Y-113330419D01* X36900668Y-113330421D01* X37157888Y-113442146D01* X37427935Y-113517810D01* X37427941Y-113517811D01* X37705775Y-113556000D01* X37986225Y-113556000D01* X38264058Y-113517811D01* X38264064Y-113517810D01* X38534111Y-113442146D01* X38791331Y-113330421D01* X38791335Y-113330419D01* X39030950Y-113184706D01* X39030965Y-113184696D01* X39108258Y-113121811D01* X38607373Y-112620925D01* X38717078Y-112544110D01* X38884110Y-112377078D01* X38960926Y-112267372D01* X39463253Y-112769699D01* X39601651Y-112573636D01* X39730679Y-112324624D01* X39730680Y-112324622D01* X39824591Y-112060381D01* X39824596Y-112060364D01* X39881651Y-111785796D01* X39881652Y-111785794D01* X39900789Y-111506000D01* X39881652Y-111226205D01* X39881651Y-111226203D01* X39824596Y-110951635D01* X39824591Y-110951618D01* X39730680Y-110687377D01* X39730679Y-110687375D01* X39601651Y-110438363D01* X39463253Y-110242299D01* X38960925Y-110744626D01* X38884110Y-110634922D01* X38717078Y-110467890D01* X38607372Y-110391073D01* X39108258Y-109890187D01* X39030953Y-109827295D01* X38791335Y-109681580D01* X38791331Y-109681578D01* X38534111Y-109569853D01* X38264064Y-109494189D01* X38264058Y-109494188D01* X37986225Y-109456000D01* X37705775Y-109456000D01* X37427941Y-109494188D01* X37427935Y-109494189D01* X37157888Y-109569853D01* X36900670Y-109681577D01* X36661038Y-109827301D01* X36661034Y-109827304D01* X36583740Y-109890187D01* X37084627Y-110391073D01* X36974922Y-110467890D01* X36807890Y-110634922D01* X36731073Y-110744626D01* X36228745Y-110242298D01* X36090352Y-110438356D01* X36090348Y-110438362D01* X35961320Y-110687375D01* X35961319Y-110687377D01* X35867408Y-110951618D01* X35867403Y-110951635D01* X35810348Y-111226203D01* X35810347Y-111226205D01* X35791210Y-111506000D01* X33798903Y-111506000D01* X33798903Y-104284001D01* X40700891Y-104284001D01* X40721300Y-104569362D01* X40782109Y-104848895D01* X40882091Y-105116958D01* X41019191Y-105368038D01* X41019196Y-105368046D01* X41125882Y-105510561D01* X41125883Y-105510562D01* X41735438Y-104901006D01* X41784348Y-104979999D01* X41927931Y-105137501D01* X42086388Y-105257163D01* X41479436Y-105864115D01* X41621960Y-105970807D01* X41621961Y-105970808D01* X41873042Y-106107908D01* X41873041Y-106107908D01* X42141104Y-106207890D01* X42420637Y-106268699D01* X42705999Y-106289109D01* X42706001Y-106289109D01* X42991362Y-106268699D01* X43270895Y-106207890D01* X43538958Y-106107908D01* X43790047Y-105970803D01* X43932561Y-105864116D01* X43932562Y-105864115D01* X43325611Y-105257163D01* X43484069Y-105137501D01* X43627652Y-104979999D01* X43676560Y-104901007D01* X44286115Y-105510562D01* X44286116Y-105510561D01* X44392803Y-105368047D01* X44529908Y-105116958D01* X44629890Y-104848895D01* X44690699Y-104569362D01* X44711109Y-104284001D01* X44711109Y-104283998D01* X44690699Y-103998637D01* X44629890Y-103719104D01* X44529908Y-103451041D01* X44392808Y-103199961D01* X44392807Y-103199960D01* X44286115Y-103057436D01* X43676560Y-103666991D01* X43627652Y-103588001D01* X43484069Y-103430499D01* X43325610Y-103310835D01* X43932562Y-102703883D01* X43932561Y-102703882D01* X43790046Y-102597196D01* X43790038Y-102597191D01* X43538957Y-102460091D01* X43538958Y-102460091D01* X43270895Y-102360109D01* X42991362Y-102299300D01* X42706001Y-102278891D01* X42705999Y-102278891D01* X42420637Y-102299300D01* X42141104Y-102360109D01* X41873041Y-102460091D01* X41621961Y-102597191D01* X41621953Y-102597196D01* X41479437Y-102703882D01* X41479436Y-102703883D01* X42086389Y-103310835D01* X41927931Y-103430499D01* X41784348Y-103588001D01* X41735439Y-103666992D01* X41125883Y-103057436D01* X41125882Y-103057437D01* X41019196Y-103199953D01* X41019191Y-103199961D01* X40882091Y-103451041D01* X40782109Y-103719104D01* X40721300Y-103998637D01* X40700891Y-104283998D01* X40700891Y-104284001D01* X33798903Y-104284001D01* X33798903Y-93846903D01* X36837023Y-93846903D01* X36843534Y-93907451D01* X36843534Y-93907453D01* X36894634Y-94044453D01* X36982262Y-94161510D01* X37099319Y-94249138D01* X37236322Y-94300238D01* X37263573Y-94303167D01* X37296868Y-94306748D01* X37296885Y-94306749D01* X39331954Y-94306749D01* X39398993Y-94326434D01* X39417048Y-94340554D01* X39467005Y-94387686D01* X45183138Y-100103819D01* X45216623Y-100165142D01* X45211639Y-100234834D01* X45169767Y-100290767D01* X45104303Y-100315184D01* X45095457Y-100315500D01* X44927345Y-100315500D01* X44866797Y-100322011D01* X44866795Y-100322011D01* X44729795Y-100373111D01* X44612739Y-100460739D01* X44525111Y-100577795D01* X44474011Y-100714795D01* X44474011Y-100714797D01* X44467500Y-100775345D01* X44467500Y-102372654D01* X44474011Y-102433202D01* X44474011Y-102433204D01* X44525111Y-102570203D01* X44525111Y-102570204D01* X44612739Y-102687261D01* X44729796Y-102774889D01* X44797831Y-102800265D01* X44866795Y-102825988D01* X44866798Y-102825989D01* X44906755Y-102830285D01* X44971306Y-102857023D01* X45011155Y-102914415D01* X45017500Y-102953574D01* X45017500Y-106163706D01* X45016191Y-106181676D01* X45012658Y-106205791D01* X45017264Y-106258420D01* X45017500Y-106263827D01* X45017500Y-106272178D01* X45021347Y-106305096D01* X45028112Y-106382427D01* X45029572Y-106389494D01* X45029526Y-106389503D01* X45031209Y-106397094D01* X45031254Y-106397084D01* X45032919Y-106404110D01* X45036854Y-106414920D01* X45059473Y-106477065D01* X45066992Y-106499757D01* X45083886Y-106550737D01* X45086940Y-106557286D01* X45086896Y-106557306D01* X45090284Y-106564304D01* X45090327Y-106564283D01* X45093563Y-106570728D01* X45093565Y-106570732D01* X45136233Y-106635605D01* X45176970Y-106701651D01* X45176972Y-106701653D01* X45181451Y-106707318D01* X45181413Y-106707347D01* X45186320Y-106713372D01* X45186357Y-106713342D01* X45191002Y-106718878D01* X45247482Y-106772163D01* X46408196Y-107932877D01* X46419977Y-107946509D01* X46434531Y-107966058D01* X46464807Y-107991463D01* X46475005Y-108000020D01* X46478995Y-108003676D01* X46484899Y-108009580D01* X46505456Y-108025834D01* X46510897Y-108030137D01* X46540628Y-108055084D01* X46570360Y-108080032D01* X46570362Y-108080033D01* X46576396Y-108084002D01* X46576369Y-108084042D01* X46582921Y-108088216D01* X46582947Y-108088175D01* X46589099Y-108091970D01* X46658722Y-108124435D01* X46659447Y-108124773D01* X46728812Y-108159609D01* X46728813Y-108159609D01* X46728815Y-108159610D01* X46735594Y-108162077D01* X46735577Y-108162122D01* X46742925Y-108164676D01* X46742941Y-108164631D01* X46749790Y-108166901D01* X46749793Y-108166901D01* X46749794Y-108166902D01* X46825818Y-108182599D01* X46901344Y-108200500D01* X46901345Y-108200500D01* X46901349Y-108200501D01* X46908517Y-108201339D01* X46908511Y-108201386D01* X46916242Y-108202176D01* X46916247Y-108202129D01* X46923437Y-108202758D01* X46923441Y-108202757D01* X46923442Y-108202758D01* X47001045Y-108200500D01* X62673706Y-108200500D01* X62691676Y-108201809D01* X62693862Y-108202129D01* X62715789Y-108205341D01* X62768426Y-108200735D01* X62773828Y-108200500D01* X62782175Y-108200500D01* X62782180Y-108200500D01* X62805835Y-108197734D01* X62815096Y-108196652D01* X62892419Y-108189888D01* X62892422Y-108189887D01* X62892426Y-108189887D01* X62892429Y-108189885D01* X62899493Y-108188427D01* X62899502Y-108188474D01* X62907097Y-108186790D01* X62907087Y-108186744D01* X62914107Y-108185079D01* X62914113Y-108185079D01* X62987065Y-108158526D01* X63060738Y-108134114D01* X63060746Y-108134108D01* X63067284Y-108131061D01* X63067305Y-108131106D01* X63074302Y-108127719D01* X63074280Y-108127675D01* X63080729Y-108124436D01* X63080728Y-108124436D01* X63080732Y-108124435D01* X63145605Y-108081766D01* X63211651Y-108041030D01* X63211655Y-108041025D01* X63217319Y-108036548D01* X63217350Y-108036587D01* X63223374Y-108031680D01* X63223342Y-108031642D01* X63228864Y-108027007D01* X63228874Y-108027001D01* X63254329Y-108000020D01* X63282163Y-107970518D01* X63763518Y-107489162D01* X64244880Y-107007799D01* X64258506Y-106996023D01* X64278058Y-106981469D01* X64312015Y-106941000D01* X64315675Y-106937005D01* X64321580Y-106931101D01* X64327153Y-106924051D01* X64342133Y-106905107D01* X64359708Y-106884161D01* X64392032Y-106845640D01* X64392037Y-106845629D01* X64395999Y-106839607D01* X64396040Y-106839634D01* X64400218Y-106833076D01* X64400176Y-106833050D01* X64403962Y-106826911D01* X64403967Y-106826905D01* X64436775Y-106756547D01* X64471609Y-106687188D01* X64471610Y-106687182D01* X64474077Y-106680405D01* X64474124Y-106680422D01* X64476675Y-106673083D01* X64476629Y-106673068D01* X64478900Y-106666210D01* X64478903Y-106666206D01* X64494607Y-106590149D01* X64512500Y-106514656D01* X64512500Y-106514653D01* X64513339Y-106507483D01* X64513386Y-106507488D01* X64514177Y-106499757D01* X64514130Y-106499753D01* X64514759Y-106492562D01* X64512500Y-106414920D01* X64512500Y-97854293D01* X64513809Y-97836322D01* X64517341Y-97812211D01* X64512735Y-97759573D01* X64512500Y-97754171D01* X64512500Y-97745824D01* X64512499Y-97745813D01* X64508652Y-97712904D01* X64501887Y-97635576D01* X64501887Y-97635573D01* X64501885Y-97635568D01* X64500427Y-97628504D01* X64500475Y-97628493D01* X64498794Y-97620909D01* X64498746Y-97620921D01* X64497079Y-97613893D01* X64497079Y-97613887D01* X64480192Y-97567492D01* X64470530Y-97540943D01* X64455861Y-97496677D01* X64446114Y-97467261D01* X64446112Y-97467257D01* X64443060Y-97460712D01* X64443104Y-97460691D01* X64439720Y-97453700D01* X64439676Y-97453723D01* X64436437Y-97447275D01* X64436435Y-97447268D01* X64418617Y-97420178D01* X64393767Y-97382395D01* X64353027Y-97316345D01* X64348551Y-97310685D01* X64348589Y-97310654D01* X64343681Y-97304629D01* X64343645Y-97304660D01* X64339005Y-97299131D01* X64339003Y-97299129D01* X64339001Y-97299126D01* X64302699Y-97264877D01* X64282517Y-97245835D01* X62811804Y-95775123D01* X62800022Y-95761490D01* X62785472Y-95741946D01* X62785471Y-95741945D01* X62785469Y-95741942D01* X62773037Y-95731510D01* X62744987Y-95707972D01* X62740998Y-95704317D01* X62735102Y-95698421D01* X62735101Y-95698420D01* X62709103Y-95677863D01* X62649640Y-95627968D01* X62649635Y-95627965D01* X62643605Y-95623999D01* X62643630Y-95623959D01* X62637069Y-95619779D01* X62637045Y-95619820D01* X62630904Y-95616031D01* X62560540Y-95583220D01* X62491185Y-95548389D01* X62484401Y-95545920D01* X62484416Y-95545876D01* X62477071Y-95543322D01* X62477057Y-95543367D01* X62470205Y-95541096D01* X62432177Y-95533244D01* X62394149Y-95525392D01* X62318656Y-95507500D01* X62318654Y-95507500D01* X62318646Y-95507498D01* X62311482Y-95506661D01* X62311487Y-95506612D01* X62303757Y-95505822D01* X62303753Y-95505870D01* X62296562Y-95505240D01* X62218920Y-95507500D01* X56753543Y-95507500D01* X56686504Y-95487815D01* X56665862Y-95471181D01* X55658819Y-94464138D01* X55625334Y-94402815D01* X55622500Y-94376457D01* X55622500Y-75179999D01* X61285037Y-75179999D01* X61285037Y-75629985D01* X61295530Y-75732696D01* X61350677Y-75899118D01* X61350679Y-75899123D01* X61442720Y-76048344D01* X61566690Y-76172314D01* X61715911Y-76264355D01* X61715916Y-76264357D01* X61882338Y-76319504D01* X61882345Y-76319505D01* X61985055Y-76329998D01* X62197535Y-76329998D01* X62197536Y-76329997D01* X62197536Y-75179999D01* X62697536Y-75179999D01* X62697536Y-76329998D01* X62910008Y-76329998D01* X62910022Y-76329997D01* X63012733Y-76319504D01* X63179155Y-76264357D01* X63179160Y-76264355D01* X63328381Y-76172314D01* X63452351Y-76048344D01* X63544392Y-75899123D01* X63544394Y-75899118D01* X63599541Y-75732696D01* X63599542Y-75732689D01* X63610035Y-75629985D01* X63610036Y-75629972D01* X63610036Y-75179999D01* X62697536Y-75179999D01* X62197536Y-75179999D01* X61285037Y-75179999D01* X55622500Y-75179999D01* X55622500Y-46339543D01* X55642185Y-46272504D01* X55658819Y-46251862D01* X55950643Y-45960038D01* X56243554Y-45667126D01* X56304875Y-45633643D01* X56374566Y-45638627D01* X56430500Y-45680498D01* X56447412Y-45711471D01* X56465747Y-45760626D01* X56474635Y-45784455D01* X56515319Y-45838802D01* X56548620Y-45883287D01* X56549108Y-45883938D01* X56573525Y-45949403D01* X56558673Y-46017676D01* X56549108Y-46032560D01* X56474634Y-46132044D01* X56423534Y-46269044D01* X56423534Y-46269046D01* X56417023Y-46329594D01* X56417023Y-48126903D01* X56423534Y-48187451D01* X56423534Y-48187453D01* X56474634Y-48324453D01* X56554416Y-48431029D01* X56578833Y-48496494D01* X56563981Y-48564767D01* X56554416Y-48579651D01* X56482170Y-48676159D01* X56482168Y-48676162D01* X56431926Y-48810869D01* X56431924Y-48810876D01* X56425523Y-48870404D01* X56425523Y-49518249D01* X60925523Y-49518249D01* X60925523Y-48870421D01* X60925522Y-48870404D01* X60919121Y-48810876D01* X60919119Y-48810869D01* X60868877Y-48676162D01* X60868876Y-48676160D01* X60796629Y-48579651D01* X60772212Y-48514187D01* X60787063Y-48445914D01* X60796622Y-48431038D01* X60876412Y-48324453D01* X60927512Y-48187450D01* X60931406Y-48151227D01* X60934022Y-48126903D01* X60934023Y-48126886D01* X60934023Y-46329611D01* X60934022Y-46329594D01* X60929569Y-46288181D01* X60927512Y-46269048D01* X60911735Y-46226749D01* X60876411Y-46132042D01* X60876410Y-46132041D01* X60801938Y-46032560D01* X60777520Y-45967096D01* X60792371Y-45898823D01* X60801938Y-45883938D01* X60802426Y-45883287D01* X60860242Y-45806054D01* X60876410Y-45784456D01* X60876411Y-45784455D01* X60888452Y-45752174D01* X60927512Y-45647450D01* X60931114Y-45613941D01* X60934022Y-45586903D01* X60934023Y-45586886D01* X60934023Y-43789611D01* X60934022Y-43789594D01* X60930680Y-43758519D01* X60927512Y-43729048D01* X60923549Y-43718424D01* X60896935Y-43647068D01* X60876412Y-43592045D01* X60788784Y-43474988D01* X60671727Y-43387360D01* X60534726Y-43336260D01* X60474177Y-43329749D01* X60474161Y-43329749D01* X56876885Y-43329749D01* X56876868Y-43329749D01* X56816320Y-43336260D01* X56816318Y-43336260D01* X56679318Y-43387360D01* X56562262Y-43474988D01* X56474634Y-43592044D01* X56423534Y-43729044D01* X56423534Y-43729046D01* X56417023Y-43789594D01* X56417023Y-43805749D01* X56397338Y-43872788D01* X56344534Y-43918543D01* X56293023Y-43929749D01* X56214045Y-43929749D01* X56196075Y-43928440D01* X56171957Y-43924907D01* X56126402Y-43928894D01* X56119324Y-43929513D01* X56113923Y-43929749D01* X56105570Y-43929749D01* X56072654Y-43933596D01* X55995325Y-43940361D01* X55988257Y-43941821D01* X55988247Y-43941777D01* X55980657Y-43943459D01* X55980668Y-43943503D01* X55973644Y-43945168D01* X55973638Y-43945169D01* X55973638Y-43945170D01* X55949165Y-43954076D01* X55900684Y-43971722D01* X55827008Y-43996136D01* X55820471Y-43999185D01* X55820451Y-43999143D01* X55813447Y-44002534D01* X55813468Y-44002575D01* X55807020Y-44005813D01* X55742145Y-44048482D01* X55676103Y-44089216D01* X55670434Y-44093699D01* X55670404Y-44093662D01* X55664378Y-44098571D01* X55664408Y-44098606D01* X55658883Y-44103242D01* X55605587Y-44159731D01* X54373122Y-45392195D01* X54359495Y-45403973D01* X54339941Y-45418531D01* X54305977Y-45459006D01* X54302330Y-45462987D01* X54296418Y-45468900D01* X54275863Y-45494896D01* X54225967Y-45554360D01* X54222001Y-45560391D01* X54221963Y-45560366D01* X54217782Y-45566928D01* X54217821Y-45566952D01* X54214032Y-45573094D01* X54181220Y-45643459D01* X54146391Y-45712810D01* X54143923Y-45719593D01* X54143878Y-45719576D01* X54141322Y-45726932D01* X54141366Y-45726947D01* X54139096Y-45733795D01* X54133556Y-45760626D01* X54123392Y-45809850D01* X54112576Y-45855489D01* X54105498Y-45885351D01* X54104661Y-45892519D01* X54104613Y-45892513D01* X54103823Y-45900244D01* X54103870Y-45900249D01* X54103240Y-45907438D01* X54105500Y-45985079D01* X54105500Y-94677706D01* X54104191Y-94695676D01* X54100658Y-94719791D01* X54105264Y-94772420D01* X54105500Y-94777827D01* X54105500Y-94786178D01* X54109347Y-94819096D01* X54116112Y-94896427D01* X54117572Y-94903494D01* X54117526Y-94903503D01* X54119209Y-94911094D01* X54119254Y-94911084D01* X54120919Y-94918110D01* X54147473Y-94991065D01* X54171886Y-95064737D01* X54174940Y-95071286D01* X54174896Y-95071306D01* X54178284Y-95078304D01* X54178327Y-95078283D01* X54181563Y-95084728D01* X54181565Y-95084732D01* X54224233Y-95149605D01* X54264970Y-95215651D01* X54264972Y-95215653D01* X54269451Y-95221318D01* X54269413Y-95221347D01* X54274320Y-95227372D01* X54274357Y-95227342D01* X54279002Y-95232878D01* X54335482Y-95286163D01* X55806196Y-96756877D01* X55817977Y-96770509D01* X55832531Y-96790058D01* X55862807Y-96815463D01* X55873005Y-96824020D01* X55876995Y-96827676D01* X55882899Y-96833580D01* X55908896Y-96854136D01* X55968360Y-96904032D01* X55968362Y-96904033D01* X55974396Y-96908002D01* X55974369Y-96908042D01* X55980917Y-96912214D01* X55980943Y-96912173D01* X55987090Y-96915964D01* X55987094Y-96915967D01* X56057453Y-96948775D01* X56126812Y-96983609D01* X56126814Y-96983610D01* X56133595Y-96986078D01* X56133578Y-96986123D01* X56140916Y-96988674D01* X56140932Y-96988629D01* X56147788Y-96990900D01* X56147789Y-96990900D01* X56147793Y-96990902D01* X56223822Y-97006600D01* X56299344Y-97024500D01* X56299346Y-97024500D01* X56306517Y-97025339D01* X56306511Y-97025386D01* X56314242Y-97026176D01* X56314247Y-97026129D01* X56321437Y-97026758D01* X56321441Y-97026757D01* X56321442Y-97026758D01* X56399045Y-97024500D01* X61864457Y-97024500D01* X61931496Y-97044185D01* X61952138Y-97060819D01* X62959181Y-98067862D01* X62992666Y-98129185D01* X62995500Y-98155543D01* X62995500Y-106060457D01* X62975815Y-106127496D01* X62959181Y-106148138D01* X62460138Y-106647181D01* X62398815Y-106680666D01* X62372457Y-106683500D01* X47355543Y-106683500D01* X47288504Y-106663815D01* X47267862Y-106647181D01* X46570819Y-105950138D01* X46537334Y-105888815D01* X46534500Y-105862457D01* X46534500Y-104284001D01* X53840891Y-104284001D01* X53861300Y-104569362D01* X53922109Y-104848895D01* X54022091Y-105116958D01* X54159191Y-105368038D01* X54159196Y-105368046D01* X54265882Y-105510561D01* X54265883Y-105510562D01* X54875438Y-104901006D01* X54924348Y-104979999D01* X55067931Y-105137501D01* X55226388Y-105257163D01* X54619436Y-105864115D01* X54761960Y-105970807D01* X54761961Y-105970808D01* X55013042Y-106107908D01* X55013041Y-106107908D01* X55281104Y-106207890D01* X55560637Y-106268699D01* X55845999Y-106289109D01* X55846001Y-106289109D01* X56131362Y-106268699D01* X56410895Y-106207890D01* X56678958Y-106107908D01* X56930047Y-105970803D01* X57072561Y-105864116D01* X57072562Y-105864115D01* X56465611Y-105257163D01* X56624069Y-105137501D01* X56767652Y-104979999D01* X56816560Y-104901007D01* X57426115Y-105510562D01* X57426116Y-105510561D01* X57532803Y-105368047D01* X57669908Y-105116958D01* X57769890Y-104848895D01* X57830699Y-104569362D01* X57851109Y-104284001D01* X57851109Y-104283998D01* X57830699Y-103998637D01* X57769890Y-103719104D01* X57669908Y-103451041D01* X57532808Y-103199961D01* X57532807Y-103199960D01* X57426115Y-103057436D01* X56816560Y-103666991D01* X56767652Y-103588001D01* X56624069Y-103430499D01* X56465610Y-103310835D01* X57072562Y-102703883D01* X57072561Y-102703882D01* X56930046Y-102597196D01* X56930038Y-102597191D01* X56678957Y-102460091D01* X56678958Y-102460091D01* X56410895Y-102360109D01* X56131362Y-102299300D01* X55846001Y-102278891D01* X55845999Y-102278891D01* X55560637Y-102299300D01* X55281104Y-102360109D01* X55013041Y-102460091D01* X54761961Y-102597191D01* X54761953Y-102597196D01* X54619437Y-102703882D01* X54619436Y-102703883D01* X55226389Y-103310835D01* X55067931Y-103430499D01* X54924348Y-103588001D01* X54875439Y-103666992D01* X54265883Y-103057436D01* X54265882Y-103057437D01* X54159196Y-103199953D01* X54159191Y-103199961D01* X54022091Y-103451041D01* X53922109Y-103719104D01* X53861300Y-103998637D01* X53840891Y-104283998D01* X53840891Y-104284001D01* X46534500Y-104284001D01* X46534500Y-102953574D01* X46554185Y-102886535D01* X46606989Y-102840780D01* X46645245Y-102830285D01* X46685201Y-102825989D01* X46685204Y-102825988D01* X46699768Y-102820555D01* X46822204Y-102774889D01* X46939261Y-102687261D01* X47026889Y-102570204D01* X47040586Y-102533480D01* X47066717Y-102463424D01* X47108588Y-102407490D01* X47174053Y-102383074D01* X47242326Y-102397926D01* X47270579Y-102419077D01* X47431700Y-102580198D01* X47619251Y-102711523D01* X47685802Y-102742556D01* X47826750Y-102808281D01* X47826752Y-102808281D01* X47826757Y-102808284D01* X48047913Y-102867543D01* X48210832Y-102881796D01* X48275998Y-102887498D01* X48276000Y-102887498D01* X48276002Y-102887498D01* X48333021Y-102882509D01* X48504087Y-102867543D01* X48725243Y-102808284D01* X48932749Y-102711523D01* X49120300Y-102580198D01* X49188319Y-102512179D01* X49249642Y-102478694D01* X49319334Y-102483678D01* X49363681Y-102512179D01* X49431700Y-102580198D01* X49619251Y-102711523D01* X49685802Y-102742556D01* X49826750Y-102808281D01* X49826752Y-102808281D01* X49826757Y-102808284D01* X50047913Y-102867543D01* X50210832Y-102881796D01* X50275998Y-102887498D01* X50276000Y-102887498D01* X50276002Y-102887498D01* X50333021Y-102882509D01* X50504087Y-102867543D01* X50725243Y-102808284D01* X50932749Y-102711523D01* X51120300Y-102580198D01* X51282198Y-102418300D01* X51413523Y-102230749D01* X51418307Y-102220487D01* X51464476Y-102168051D01* X51531669Y-102148897D01* X51598551Y-102169111D01* X51643072Y-102220490D01* X51645866Y-102226483D01* X51696973Y-102299471D01* X51696974Y-102299472D01* X52313064Y-101683381D01* X52339481Y-101773351D01* X52413327Y-101888258D01* X52516555Y-101977705D01* X52640801Y-102034446D01* X52665548Y-102038004D01* X52050526Y-102653025D01* X52050526Y-102653026D01* X52123512Y-102704131D01* X52123516Y-102704133D01* X52329673Y-102800265D01* X52329682Y-102800269D01* X52549389Y-102859139D01* X52549400Y-102859141D01* X52775998Y-102878966D01* X52776002Y-102878966D01* X53002599Y-102859141D01* X53002610Y-102859139D01* X53222317Y-102800269D01* X53222331Y-102800264D01* X53428478Y-102704136D01* X53501472Y-102653025D01* X52886451Y-102038004D01* X52911199Y-102034446D01* X53035445Y-101977705D01* X53138673Y-101888258D01* X53212519Y-101773351D01* X53238935Y-101683382D01* X53855025Y-102299472D01* X53906136Y-102226478D01* X54002264Y-102020331D01* X54002269Y-102020317D01* X54061139Y-101800610D01* X54061141Y-101800599D01* X54080966Y-101574002D01* X54080966Y-101573997D01* X54061141Y-101347400D01* X54061139Y-101347389D01* X54031988Y-101238593D01* X54033651Y-101168743D01* X54072814Y-101110881D01* X54137042Y-101083377D01* X54151763Y-101082500D01* X57540457Y-101082500D01* X57607496Y-101102185D01* X57628138Y-101118819D01* X57879181Y-101369862D01* X57912666Y-101431185D01* X57915500Y-101457543D01* X57915500Y-103059706D01* X57914191Y-103077676D01* X57910658Y-103101791D01* X57915264Y-103154420D01* X57915500Y-103159827D01* X57915500Y-103168178D01* X57919347Y-103201096D01* X57926112Y-103278427D01* X57927572Y-103285494D01* X57927526Y-103285503D01* X57929209Y-103293094D01* X57929254Y-103293084D01* X57930919Y-103300110D01* X57957473Y-103373065D01* X57979446Y-103439376D01* X57981886Y-103446737D01* X57984940Y-103453286D01* X57984896Y-103453306D01* X57988284Y-103460304D01* X57988327Y-103460283D01* X57991568Y-103466737D01* X58034232Y-103531604D01* X58059541Y-103572636D01* X58074970Y-103597651D01* X58074972Y-103597653D01* X58079451Y-103603318D01* X58079413Y-103603347D01* X58084320Y-103609372D01* X58084357Y-103609342D01* X58089002Y-103614878D01* X58145482Y-103668163D01* X59344118Y-104866799D01* X59377603Y-104928122D01* X59380013Y-104944239D01* X59386477Y-105022241D01* X59441745Y-105240490D01* X59532182Y-105446668D01* X59655318Y-105635141D01* X59655326Y-105635152D01* X59807798Y-105800778D01* X59807802Y-105800782D01* X59985466Y-105939065D01* X59985467Y-105939065D01* X59985469Y-105939067D01* X60044120Y-105970807D01* X60183468Y-106046218D01* X60396407Y-106119320D01* X60618473Y-106156376D01* X60843611Y-106156376D01* X61065677Y-106119320D01* X61278616Y-106046218D01* X61476618Y-105939065D01* X61654282Y-105800782D01* X61806764Y-105635144D01* X61929902Y-105446667D01* X62020338Y-105240492D01* X62075606Y-105022244D01* X62082070Y-104944239D01* X62094198Y-104797881D01* X62094198Y-104797870D01* X62075607Y-104573516D01* X62075605Y-104573504D01* X62020338Y-104355261D01* X61989080Y-104284000D01* X61929902Y-104149085D01* X61806764Y-103960608D01* X61806761Y-103960605D01* X61806757Y-103960599D01* X61654285Y-103794973D01* X61654280Y-103794968D01* X61476619Y-103656688D01* X61476619Y-103656687D01* X61433345Y-103633269D01* X61383755Y-103584049D01* X61368647Y-103515833D01* X61392817Y-103450277D01* X61421240Y-103422639D01* X61602121Y-103295984D01* X61769147Y-103128958D01* X61904642Y-102935454D01* X62004471Y-102721368D01* X62004474Y-102721362D01* X62061678Y-102507876D01* X61164728Y-102507876D01* X61190535Y-102467720D01* X61231042Y-102329765D01* X61231042Y-102185987D01* X61190535Y-102048032D01* X61164728Y-102007876D01* X62061678Y-102007876D01* X62061677Y-102007875D01* X62004474Y-101794389D01* X62004471Y-101794383D01* X61904642Y-101580298D01* X61904641Y-101580296D01* X61769155Y-101386802D01* X61769150Y-101386796D01* X61653314Y-101270960D01* X61619829Y-101209637D01* X61624813Y-101139945D01* X61666685Y-101084012D01* X61697654Y-101067100D01* X61827246Y-101018765D01* X61944303Y-100931137D01* X62031931Y-100814080D01* X62083031Y-100677077D01* X62089345Y-100618349D01* X62089541Y-100616530D01* X62089542Y-100616513D01* X62089542Y-98819238D01* X62089541Y-98819221D01* X62086199Y-98788146D01* X62083031Y-98758675D01* X62078460Y-98746421D01* X62052183Y-98675970D01* X62031931Y-98621672D01* X61944303Y-98504615D01* X61827246Y-98416987D01* X61775928Y-98397846D01* X61690245Y-98365887D01* X61629696Y-98359376D01* X61629680Y-98359376D01* X59832404Y-98359376D01* X59832387Y-98359376D01* X59771839Y-98365887D01* X59771837Y-98365887D01* X59634837Y-98416987D01* X59517781Y-98504615D01* X59430153Y-98621671D01* X59379053Y-98758671D01* X59379053Y-98758673D01* X59372542Y-98819221D01* X59372542Y-98894499D01* X59352857Y-98961538D01* X59300053Y-99007293D01* X59230895Y-99017237D01* X59167339Y-98988212D01* X59160861Y-98982180D01* X59001804Y-98823123D01* X58990022Y-98809490D01* X58975472Y-98789946D01* X58975471Y-98789945D01* X58975469Y-98789942D01* X58974595Y-98789208D01* X58934987Y-98755972D01* X58930998Y-98752317D01* X58925102Y-98746421D01* X58925101Y-98746420D01* X58899103Y-98725863D01* X58839640Y-98675968D01* X58839635Y-98675965D01* X58833605Y-98671999D01* X58833630Y-98671959D01* X58827069Y-98667779D01* X58827045Y-98667820D01* X58820904Y-98664031D01* X58750540Y-98631220D01* X58681185Y-98596389D01* X58674401Y-98593920D01* X58674416Y-98593876D01* X58667071Y-98591322D01* X58667057Y-98591367D01* X58660205Y-98589096D01* X58622177Y-98581244D01* X58584149Y-98573392D01* X58508656Y-98555500D01* X58508654Y-98555500D01* X58508646Y-98555498D01* X58501482Y-98554661D01* X58501487Y-98554612D01* X58493757Y-98553822D01* X58493753Y-98553870D01* X58486562Y-98553240D01* X58408920Y-98555500D01* X54975543Y-98555500D01* X54908504Y-98535815D01* X54887862Y-98519181D01* X52414962Y-96046281D01* X52381477Y-95984958D01* X52386461Y-95915266D01* X52428333Y-95859333D01* X52459303Y-95842420D01* X52521727Y-95819138D01* X52638784Y-95731510D01* X52726412Y-95614453D01* X52777512Y-95477450D01* X52781114Y-95443941D01* X52784022Y-95416903D01* X52784023Y-95416886D01* X52784023Y-91819611D01* X52784022Y-91819594D01* X52780680Y-91788519D01* X52777512Y-91759048D01* X52775092Y-91752560D01* X52755045Y-91698813D01* X52726412Y-91622045D01* X52638784Y-91504988D01* X52521727Y-91417360D01* X52384726Y-91366260D01* X52324177Y-91359749D01* X52324161Y-91359749D01* X50526885Y-91359749D01* X50526868Y-91359749D01* X50466320Y-91366260D01* X50466318Y-91366260D01* X50329316Y-91417360D01* X50329316Y-91417361D01* X50222741Y-91497142D01* X50157277Y-91521559D01* X50089004Y-91506707D01* X50074120Y-91497142D01* X49977611Y-91424895D01* X49977609Y-91424894D01* X49842902Y-91374652D01* X49842895Y-91374650D01* X49783367Y-91368249D01* X49135523Y-91368249D01* X49135523Y-93744249D01* X49115838Y-93811288D01* X49063034Y-93857043D01* X49011523Y-93868249D01* X48759523Y-93868249D01* X48692484Y-93848564D01* X48646729Y-93795760D01* X48635523Y-93744249D01* X48635523Y-91368249D01* X47987678Y-91368249D01* X47928150Y-91374650D01* X47928143Y-91374652D01* X47793436Y-91424894D01* X47793433Y-91424896D01* X47696925Y-91497142D01* X47631460Y-91521559D01* X47563187Y-91506707D01* X47548303Y-91497142D01* X47441727Y-91417360D01* X47304726Y-91366260D01* X47244177Y-91359749D01* X47244161Y-91359749D01* X45446885Y-91359749D01* X45446868Y-91359749D01* X45386320Y-91366260D01* X45386318Y-91366260D01* X45249318Y-91417360D01* X45132262Y-91504988D01* X45044634Y-91622044D01* X44993534Y-91759044D01* X44993534Y-91759046D01* X44987023Y-91819594D01* X44987023Y-95416903D01* X44993534Y-95477451D01* X44993534Y-95477453D01* X45044634Y-95614453D01* X45132262Y-95731510D01* X45249319Y-95819138D01* X45386322Y-95870238D01* X45413573Y-95873167D01* X45446868Y-95876748D01* X45446885Y-95876749D01* X46519980Y-95876749D01* X46587019Y-95896434D01* X46607661Y-95913068D01* X47959470Y-97264877D01* X47971251Y-97278509D01* X47985805Y-97298058D01* X48026286Y-97332025D01* X48030260Y-97335667D01* X48036174Y-97341581D01* X48062169Y-97362135D01* X48121634Y-97412032D01* X48121635Y-97412032D01* X48121637Y-97412034D01* X48127670Y-97416002D01* X48127644Y-97416041D01* X48134201Y-97420218D01* X48134227Y-97420178D01* X48140365Y-97423964D01* X48140369Y-97423967D01* X48210726Y-97456775D01* X48280086Y-97491609D01* X48280092Y-97491610D01* X48286880Y-97494082D01* X48286863Y-97494128D01* X48294198Y-97496677D01* X48294214Y-97496632D01* X48301063Y-97498902D01* X48301068Y-97498903D01* X48377124Y-97514607D01* X48437877Y-97529006D01* X48452613Y-97532499D01* X48452614Y-97532499D01* X48452618Y-97532500D01* X48452622Y-97532500D01* X48459791Y-97533338D01* X48459785Y-97533386D01* X48467516Y-97534177D01* X48467521Y-97534130D01* X48474711Y-97534759D01* X48474715Y-97534758D01* X48474716Y-97534759D01* X48552354Y-97532500D01* X50180457Y-97532500D01* X50247496Y-97552185D01* X50268138Y-97568819D01* X52764845Y-100065526D01* X52798330Y-100126849D01* X52793346Y-100196541D01* X52751474Y-100252474D01* X52687972Y-100276735D01* X52549399Y-100288858D01* X52549389Y-100288860D01* X52329682Y-100347730D01* X52329673Y-100347734D01* X52123513Y-100443868D01* X52050526Y-100494973D01* X52665548Y-101109995D01* X52640801Y-101113554D01* X52516555Y-101170295D01* X52413327Y-101259742D01* X52339481Y-101374649D01* X52313064Y-101464617D01* X51696973Y-100848526D01* X51696972Y-100848527D01* X51645867Y-100921513D01* X51643070Y-100927513D01* X51596897Y-100979951D01* X51529703Y-100999102D01* X51462822Y-100978885D01* X51418307Y-100927511D01* X51415510Y-100921513D01* X51413523Y-100917251D01* X51282198Y-100729700D01* X51120300Y-100567802D01* X50932749Y-100436477D01* X50932745Y-100436475D01* X50725249Y-100339718D01* X50725238Y-100339714D01* X50504089Y-100280457D01* X50504082Y-100280456D01* X50324447Y-100264740D01* X50259379Y-100239287D01* X50247574Y-100228893D01* X49603804Y-99585123D01* X49592022Y-99571490D01* X49577472Y-99551946D01* X49577471Y-99551945D01* X49577469Y-99551942D01* X49576595Y-99551208D01* X49536987Y-99517972D01* X49532998Y-99514317D01* X49527102Y-99508421D01* X49527101Y-99508420D01* X49501103Y-99487863D01* X49441640Y-99437968D01* X49441635Y-99437965D01* X49435605Y-99433999D01* X49435630Y-99433959D01* X49429069Y-99429779D01* X49429045Y-99429820D01* X49422904Y-99426031D01* X49352540Y-99393220D01* X49283185Y-99358389D01* X49276401Y-99355920D01* X49276416Y-99355876D01* X49269071Y-99353322D01* X49269057Y-99353367D01* X49262205Y-99351096D01* X49224177Y-99343244D01* X49186149Y-99335392D01* X49110656Y-99317500D01* X49110654Y-99317500D01* X49110646Y-99317498D01* X49103482Y-99316661D01* X49103487Y-99316612D01* X49095757Y-99315822D01* X49095753Y-99315870D01* X49088562Y-99315240D01* X49010920Y-99317500D01* X48428531Y-99317500D01* X48361492Y-99297815D01* X48340850Y-99281181D01* X47649418Y-98589749D01* X47637636Y-98576116D01* X47623086Y-98556572D01* X47623085Y-98556571D01* X47623083Y-98556568D01* X47619868Y-98553870D01* X47582601Y-98522598D01* X47578612Y-98518943D01* X47572716Y-98513047D01* X47572715Y-98513046D01* X47546717Y-98492489D01* X47487254Y-98442594D01* X47487249Y-98442591D01* X47481219Y-98438625D01* X47481244Y-98438585D01* X47474683Y-98434405D01* X47474659Y-98434446D01* X47468518Y-98430657D01* X47398154Y-98397846D01* X47328799Y-98363015D01* X47322015Y-98360546D01* X47322030Y-98360502D01* X47314685Y-98357948D01* X47314671Y-98357993D01* X47307819Y-98355722D01* X47269791Y-98347870D01* X47231763Y-98340018D01* X47156270Y-98322126D01* X47156268Y-98322126D01* X47156260Y-98322124D01* X47149096Y-98321287D01* X47149101Y-98321238D01* X47141371Y-98320448D01* X47141367Y-98320496D01* X47134176Y-98319866D01* X47056534Y-98322126D01* X46619713Y-98322126D01* X46552674Y-98302441D01* X46532032Y-98285807D01* X42196819Y-93950594D01* X42163334Y-93889271D01* X42160500Y-93862913D01* X42160500Y-90742293D01* X42161809Y-90724322D01* X42165341Y-90700211D01* X42160735Y-90647573D01* X42160500Y-90642171D01* X42160500Y-90633824D01* X42160499Y-90633813D01* X42156652Y-90600904D01* X42149887Y-90523576D01* X42149887Y-90523573D01* X42149885Y-90523568D01* X42148427Y-90516504D01* X42148475Y-90516493D01* X42146794Y-90508909D01* X42146746Y-90508921D01* X42145079Y-90501893D01* X42145079Y-90501887D01* X42118530Y-90428944D01* X42094114Y-90355261D01* X42094112Y-90355257D01* X42091060Y-90348712D01* X42091104Y-90348691D01* X42087720Y-90341701D01* X42087676Y-90341724D01* X42084438Y-90335278D01* X42084435Y-90335268D01* X42041771Y-90270400D01* X42001030Y-90204349D01* X42001025Y-90204344D01* X41996552Y-90198686D01* X41996590Y-90198655D01* X41991681Y-90192629D01* X41991645Y-90192660D01* X41987005Y-90187131D01* X41987003Y-90187129D01* X41987001Y-90187126D01* X41955891Y-90157775D01* X41930517Y-90133835D01* X41729803Y-89933122D01* X41718020Y-89919488D01* X41703469Y-89899942D01* X41702595Y-89899208D01* X41662987Y-89865972D01* X41658998Y-89862317D01* X41653102Y-89856421D01* X41653101Y-89856420D01* X41627103Y-89835863D01* X41567640Y-89785968D01* X41567635Y-89785965D01* X41561605Y-89781999D01* X41561630Y-89781959D01* X41555069Y-89777779D01* X41555045Y-89777820D01* X41548904Y-89774031D01* X41478540Y-89741220D01* X41422372Y-89713011D01* X41371298Y-89665334D01* X41354023Y-89602201D01* X41354023Y-89509611D01* X41354022Y-89509594D01* X41350680Y-89478519D01* X41347512Y-89449048D01* X41296412Y-89312045D01* X41216628Y-89205467D01* X41192212Y-89140003D01* X41207064Y-89071730D01* X41216630Y-89056845D01* X41288875Y-88960338D01* X41288877Y-88960335D01* X41339119Y-88825628D01* X41339121Y-88825621D01* X41345522Y-88766093D01* X41345523Y-88766076D01* X41345523Y-88118249D01* X36845523Y-88118249D01* X36845523Y-88766093D01* X36851924Y-88825621D01* X36851926Y-88825628D01* X36902168Y-88960335D01* X36902169Y-88960337D01* X36974416Y-89056846D01* X36998833Y-89122310D01* X36983982Y-89190583D01* X36974416Y-89205467D01* X36894635Y-89312042D01* X36894634Y-89312042D01* X36843534Y-89449044D01* X36843534Y-89449046D01* X36837023Y-89509594D01* X36837023Y-91306903D01* X36843534Y-91367451D01* X36843534Y-91367453D01* X36894634Y-91504453D01* X36969108Y-91603938D01* X36993525Y-91669403D01* X36978673Y-91737676D01* X36969109Y-91752557D01* X36964251Y-91759048D01* X36894634Y-91852044D01* X36843534Y-91989044D01* X36843534Y-91989046D01* X36837023Y-92049594D01* X36837023Y-93846903D01* X33798903Y-93846903D01* X33798903Y-86226903D01* X36837023Y-86226903D01* X36843534Y-86287451D01* X36843534Y-86287453D01* X36894634Y-86424453D01* X36974416Y-86531029D01* X36998833Y-86596494D01* X36983981Y-86664767D01* X36974416Y-86679651D01* X36902170Y-86776159D01* X36902168Y-86776162D01* X36851926Y-86910869D01* X36851924Y-86910876D01* X36845523Y-86970404D01* X36845523Y-87618249D01* X41345523Y-87618249D01* X41345523Y-86970421D01* X41345522Y-86970404D01* X41339121Y-86910876D01* X41339119Y-86910869D01* X41288877Y-86776162D01* X41288876Y-86776160D01* X41216629Y-86679651D01* X41192212Y-86614187D01* X41207063Y-86545914D01* X41216622Y-86531038D01* X41296412Y-86424453D01* X41347512Y-86287450D01* X41351114Y-86253941D01* X41354022Y-86226903D01* X41354023Y-86226886D01* X41354023Y-84429611D01* X41354022Y-84429594D01* X41350615Y-84397912D01* X41347512Y-84369048D01* X41305151Y-84255476D01* X41296411Y-84232042D01* X41296410Y-84232041D01* X41221938Y-84132560D01* X41197520Y-84067096D01* X41212371Y-83998823D01* X41221938Y-83983938D01* X41296410Y-83884456D01* X41296411Y-83884455D01* X41304159Y-83863684D01* X41347512Y-83747450D01* X41351114Y-83713941D01* X41354022Y-83686903D01* X41354023Y-83686886D01* X41354023Y-81889611D01* X41354022Y-81889594D01* X41350680Y-81858519D01* X41347512Y-81829048D01* X41341140Y-81811965D01* X41296411Y-81692042D01* X41296410Y-81692041D01* X41221938Y-81592560D01* X41197520Y-81527096D01* X41212371Y-81458823D01* X41221938Y-81443938D01* X41296410Y-81344456D01* X41296411Y-81344455D01* X41347511Y-81207453D01* X41347511Y-81207452D01* X41347512Y-81207450D01* X41351114Y-81173941D01* X41354022Y-81146903D01* X41354023Y-81146886D01* X41354023Y-79349611D01* X41354022Y-79349594D01* X41350680Y-79318519D01* X41347512Y-79289048D01* X41296412Y-79152045D01* X41296411Y-79152042D01* X41296410Y-79152041D01* X41221938Y-79052560D01* X41197520Y-78987096D01* X41212371Y-78918823D01* X41221938Y-78903938D01* X41296410Y-78804456D01* X41296411Y-78804455D01* X41347511Y-78667453D01* X41347511Y-78667452D01* X41347512Y-78667450D01* X41351114Y-78633941D01* X41354022Y-78606903D01* X41354023Y-78606886D01* X41354023Y-76809611D01* X41354022Y-76809594D01* X41350680Y-76778519D01* X41347512Y-76749048D01* X41296412Y-76612045D01* X41216628Y-76505467D01* X41192212Y-76440003D01* X41207064Y-76371730D01* X41216630Y-76356845D01* X41288875Y-76260338D01* X41288877Y-76260335D01* X41339119Y-76125628D01* X41339121Y-76125621D01* X41345522Y-76066093D01* X41345523Y-76066076D01* X41345523Y-75418249D01* X36845523Y-75418249D01* X36845523Y-76066093D01* X36851924Y-76125621D01* X36851926Y-76125628D01* X36902168Y-76260335D01* X36902169Y-76260337D01* X36974416Y-76356846D01* X36998833Y-76422310D01* X36983982Y-76490583D01* X36974416Y-76505467D01* X36894635Y-76612042D01* X36894634Y-76612042D01* X36843534Y-76749044D01* X36843534Y-76749046D01* X36837023Y-76809594D01* X36837023Y-78606903D01* X36843534Y-78667451D01* X36843534Y-78667453D01* X36894634Y-78804453D01* X36969108Y-78903938D01* X36993525Y-78969403D01* X36978673Y-79037676D01* X36969108Y-79052560D01* X36894634Y-79152044D01* X36843534Y-79289044D01* X36843534Y-79289046D01* X36837023Y-79349594D01* X36837023Y-81146903D01* X36843534Y-81207451D01* X36843534Y-81207453D01* X36894634Y-81344453D01* X36969108Y-81443938D01* X36993525Y-81509403D01* X36978673Y-81577676D01* X36969108Y-81592560D01* X36894634Y-81692044D01* X36843534Y-81829044D01* X36843534Y-81829046D01* X36837023Y-81889594D01* X36837023Y-83686903D01* X36843534Y-83747451D01* X36843534Y-83747453D01* X36894634Y-83884453D01* X36969108Y-83983938D01* X36993525Y-84049403D01* X36978673Y-84117676D01* X36969108Y-84132560D01* X36894634Y-84232044D01* X36843534Y-84369044D01* X36843534Y-84369046D01* X36837023Y-84429594D01* X36837023Y-86226903D01* X33798903Y-86226903D01* X33798903Y-73526903D01* X36837023Y-73526903D01* X36843534Y-73587451D01* X36843534Y-73587453D01* X36894634Y-73724453D01* X36974416Y-73831029D01* X36998833Y-73896494D01* X36983981Y-73964767D01* X36974416Y-73979651D01* X36902170Y-74076159D01* X36902168Y-74076162D01* X36851926Y-74210869D01* X36851924Y-74210876D01* X36845523Y-74270404D01* X36845523Y-74918249D01* X41345523Y-74918249D01* X41345523Y-74270421D01* X41345522Y-74270404D01* X41339121Y-74210876D01* X41339119Y-74210869D01* X41288877Y-74076162D01* X41288876Y-74076160D01* X41216629Y-73979651D01* X41192212Y-73914187D01* X41207063Y-73845914D01* X41216622Y-73831038D01* X41296412Y-73724453D01* X41347512Y-73587450D01* X41351114Y-73553941D01* X41354022Y-73526903D01* X41354023Y-73526886D01* X41354023Y-71729611D01* X41354022Y-71729594D01* X41348626Y-71679411D01* X41347512Y-71669048D01* X41330740Y-71624082D01* X41296411Y-71532042D01* X41296410Y-71532041D01* X41221938Y-71432560D01* X41197520Y-71367096D01* X41212371Y-71298823D01* X41221938Y-71283938D01* X41296410Y-71184456D01* X41296411Y-71184455D01* X41347511Y-71047453D01* X41347511Y-71047452D01* X41347512Y-71047450D01* X41351114Y-71013941D01* X41354022Y-70986903D01* X41354023Y-70986886D01* X41354023Y-69189611D01* X41354022Y-69189594D01* X41350680Y-69158519D01* X41347512Y-69129048D01* X41296412Y-68992045D01* X41296411Y-68992042D01* X41296410Y-68992041D01* X41221938Y-68892560D01* X41197520Y-68827096D01* X41212371Y-68758823D01* X41221938Y-68743938D01* X41296410Y-68644456D01* X41296411Y-68644455D01* X41347511Y-68507453D01* X41347511Y-68507452D01* X41347512Y-68507450D01* X41351114Y-68473941D01* X41354022Y-68446903D01* X41354023Y-68446886D01* X41354023Y-66649611D01* X41354022Y-66649594D01* X41350680Y-66618519D01* X41347512Y-66589048D01* X41296412Y-66452045D01* X41296411Y-66452042D01* X41296410Y-66452041D01* X41221938Y-66352560D01* X41197520Y-66287096D01* X41212371Y-66218823D01* X41221938Y-66203938D01* X41296410Y-66104456D01* X41296411Y-66104455D01* X41347511Y-65967453D01* X41347511Y-65967452D01* X41347512Y-65967450D01* X41351114Y-65933941D01* X41354022Y-65906903D01* X41354023Y-65906886D01* X41354023Y-64109611D01* X41354022Y-64109594D01* X41350680Y-64078519D01* X41347512Y-64049048D01* X41296412Y-63912045D01* X41216628Y-63805467D01* X41192212Y-63740003D01* X41207064Y-63671730D01* X41216630Y-63656845D01* X41288875Y-63560338D01* X41288877Y-63560335D01* X41339119Y-63425628D01* X41339121Y-63425621D01* X41345522Y-63366093D01* X41345523Y-63366076D01* X41345523Y-62718249D01* X36845523Y-62718249D01* X36845523Y-63366093D01* X36851924Y-63425621D01* X36851926Y-63425628D01* X36902168Y-63560335D01* X36902169Y-63560337D01* X36974416Y-63656846D01* X36998833Y-63722310D01* X36983982Y-63790583D01* X36974416Y-63805467D01* X36894635Y-63912042D01* X36894634Y-63912042D01* X36843534Y-64049044D01* X36843534Y-64049046D01* X36837023Y-64109594D01* X36837023Y-65906903D01* X36843534Y-65967451D01* X36843534Y-65967453D01* X36894634Y-66104453D01* X36969108Y-66203938D01* X36993525Y-66269403D01* X36978673Y-66337676D01* X36969108Y-66352560D01* X36894634Y-66452044D01* X36843534Y-66589044D01* X36843534Y-66589046D01* X36837023Y-66649594D01* X36837023Y-68446903D01* X36843534Y-68507451D01* X36843534Y-68507453D01* X36894634Y-68644453D01* X36969108Y-68743938D01* X36993525Y-68809403D01* X36978673Y-68877676D01* X36969108Y-68892560D01* X36894634Y-68992044D01* X36843534Y-69129044D01* X36843534Y-69129046D01* X36837023Y-69189594D01* X36837023Y-70986903D01* X36843534Y-71047451D01* X36843534Y-71047453D01* X36894634Y-71184453D01* X36969108Y-71283938D01* X36993525Y-71349403D01* X36978673Y-71417676D01* X36969108Y-71432560D01* X36894634Y-71532044D01* X36843534Y-71669044D01* X36843534Y-71669046D01* X36837023Y-71729594D01* X36837023Y-73526903D01* X33798903Y-73526903D01* X33798903Y-60826903D01* X36837023Y-60826903D01* X36843534Y-60887451D01* X36843534Y-60887453D01* X36894634Y-61024453D01* X36974416Y-61131029D01* X36998833Y-61196494D01* X36983981Y-61264767D01* X36974416Y-61279651D01* X36902170Y-61376159D01* X36902168Y-61376162D01* X36851926Y-61510869D01* X36851924Y-61510876D01* X36845523Y-61570404D01* X36845523Y-62218249D01* X41345523Y-62218249D01* X41345523Y-61570421D01* X41345522Y-61570404D01* X41339121Y-61510876D01* X41339119Y-61510869D01* X41288877Y-61376162D01* X41288876Y-61376160D01* X41216629Y-61279651D01* X41192212Y-61214187D01* X41207063Y-61145914D01* X41216622Y-61131038D01* X41296412Y-61024453D01* X41347512Y-60887450D01* X41351114Y-60853941D01* X41354022Y-60826903D01* X41354023Y-60826886D01* X41354023Y-59029611D01* X41354022Y-59029594D01* X41350680Y-58998519D01* X41347512Y-58969048D01* X41296412Y-58832045D01* X41296411Y-58832042D01* X41296410Y-58832041D01* X41221938Y-58732560D01* X41197520Y-58667096D01* X41212371Y-58598823D01* X41221938Y-58583938D01* X41296410Y-58484456D01* X41296411Y-58484455D01* X41347511Y-58347453D01* X41347511Y-58347452D01* X41347512Y-58347450D01* X41351114Y-58313941D01* X41354022Y-58286903D01* X41354023Y-58286886D01* X41354023Y-56489611D01* X41354022Y-56489594D01* X41350680Y-56458519D01* X41347512Y-56429048D01* X41296412Y-56292045D01* X41296411Y-56292042D01* X41296410Y-56292041D01* X41221938Y-56192560D01* X41197520Y-56127096D01* X41212371Y-56058823D01* X41221938Y-56043938D01* X41296410Y-55944456D01* X41296411Y-55944455D01* X41347511Y-55807453D01* X41347511Y-55807452D01* X41347512Y-55807450D01* X41351114Y-55773941D01* X41354022Y-55746903D01* X41354023Y-55746886D01* X41354023Y-53949611D01* X41354022Y-53949594D01* X41350680Y-53918519D01* X41347512Y-53889048D01* X41296412Y-53752045D01* X41296411Y-53752042D01* X41296410Y-53752041D01* X41221938Y-53652560D01* X41197520Y-53587096D01* X41212371Y-53518823D01* X41221938Y-53503938D01* X41296410Y-53404456D01* X41296411Y-53404455D01* X41347511Y-53267453D01* X41347511Y-53267452D01* X41347512Y-53267450D01* X41351114Y-53233941D01* X41354022Y-53206903D01* X41354023Y-53206886D01* X41354023Y-51409611D01* X41354022Y-51409594D01* X41350680Y-51378519D01* X41347512Y-51349048D01* X41296412Y-51212045D01* X41216628Y-51105467D01* X41192212Y-51040003D01* X41207064Y-50971730D01* X41216630Y-50956845D01* X41288875Y-50860338D01* X41288877Y-50860335D01* X41339119Y-50725628D01* X41339121Y-50725621D01* X41345522Y-50666093D01* X41345523Y-50666076D01* X41345523Y-50018249D01* X36845523Y-50018249D01* X36845523Y-50666093D01* X36851924Y-50725621D01* X36851926Y-50725628D01* X36902168Y-50860335D01* X36902169Y-50860337D01* X36974416Y-50956846D01* X36998833Y-51022310D01* X36983982Y-51090583D01* X36974416Y-51105467D01* X36894635Y-51212042D01* X36894634Y-51212042D01* X36843534Y-51349044D01* X36843534Y-51349046D01* X36837023Y-51409594D01* X36837023Y-53206903D01* X36843534Y-53267451D01* X36843534Y-53267453D01* X36894634Y-53404453D01* X36969108Y-53503938D01* X36993525Y-53569403D01* X36978673Y-53637676D01* X36969108Y-53652560D01* X36894634Y-53752044D01* X36843534Y-53889044D01* X36843534Y-53889046D01* X36837023Y-53949594D01* X36837023Y-55746903D01* X36843534Y-55807451D01* X36843534Y-55807453D01* X36894634Y-55944453D01* X36969108Y-56043938D01* X36993525Y-56109403D01* X36978673Y-56177676D01* X36969108Y-56192560D01* X36894634Y-56292044D01* X36843534Y-56429044D01* X36843534Y-56429046D01* X36837023Y-56489594D01* X36837023Y-58286903D01* X36843534Y-58347451D01* X36843534Y-58347453D01* X36894634Y-58484453D01* X36969108Y-58583938D01* X36993525Y-58649403D01* X36978673Y-58717676D01* X36969108Y-58732560D01* X36894634Y-58832044D01* X36843534Y-58969044D01* X36843534Y-58969046D01* X36837023Y-59029594D01* X36837023Y-60826903D01* X33798903Y-60826903D01* X33798903Y-48126903D01* X36837023Y-48126903D01* X36843534Y-48187451D01* X36843534Y-48187453D01* X36894634Y-48324453D01* X36974416Y-48431029D01* X36998833Y-48496494D01* X36983981Y-48564767D01* X36974416Y-48579651D01* X36902170Y-48676159D01* X36902168Y-48676162D01* X36851926Y-48810869D01* X36851924Y-48810876D01* X36845523Y-48870404D01* X36845523Y-49518249D01* X41345523Y-49518249D01* X41345523Y-48870421D01* X41345522Y-48870404D01* X41339121Y-48810876D01* X41339119Y-48810869D01* X41288877Y-48676162D01* X41288876Y-48676160D01* X41216629Y-48579651D01* X41192212Y-48514187D01* X41207063Y-48445914D01* X41216622Y-48431038D01* X41296412Y-48324453D01* X41347512Y-48187450D01* X41351406Y-48151227D01* X41354022Y-48126903D01* X41354023Y-48126886D01* X41354023Y-47848247D01* X45197216Y-47848247D01* X45199195Y-47870888D01* X45199369Y-47879078D01* X45198207Y-47904937D01* X45198208Y-47904939D01* X45209214Y-47986195D01* X45209539Y-47989113D01* X45212055Y-48017864D01* X45216408Y-48067620D01* X45223147Y-48092772D01* X45224697Y-48100492D01* X45228616Y-48129422D01* X45228619Y-48129432D01* X45252936Y-48204272D01* X45253857Y-48207383D01* X45273400Y-48280315D01* X45273404Y-48280327D01* X45285798Y-48306908D01* X45288574Y-48313954D01* X45298618Y-48344865D01* X45298620Y-48344870D01* X45307628Y-48361609D01* X45334345Y-48411259D01* X45335939Y-48414436D01* X45366465Y-48479900D01* X45366466Y-48479902D01* X45366467Y-48479903D01* X45385191Y-48506645D01* X45388998Y-48512823D01* X45405966Y-48544354D01* X45405968Y-48544357D01* X45450920Y-48600724D01* X45453232Y-48603816D01* X45492774Y-48660287D01* X45492777Y-48660290D01* X45518182Y-48685695D01* X45522818Y-48690882D01* X45547209Y-48721467D01* X45599037Y-48766748D01* X45602080Y-48769593D01* X45648478Y-48815992D01* X45648479Y-48815993D01* X45648482Y-48815995D01* X45648485Y-48815998D01* X45680010Y-48838071D01* X45680632Y-48838507D01* X45685864Y-48842606D01* X45717805Y-48870512D01* X45774058Y-48904121D01* X45777781Y-48906532D01* X45814273Y-48932084D01* X45828861Y-48942300D01* X45828864Y-48942301D01* X45828869Y-48942305D01* X45867433Y-48960287D01* X45873016Y-48963246D01* X45912273Y-48986702D01* X45970533Y-49008566D01* X45974945Y-49010420D01* X46028447Y-49035369D01* X46072727Y-49047233D01* X46078462Y-49049073D01* X46107879Y-49060113D01* X46124362Y-49066300D01* X46182336Y-49076820D01* X46187301Y-49077934D01* X46241152Y-49092364D01* X46290125Y-49096648D01* X46295773Y-49097406D01* X46334875Y-49104502D01* X46347255Y-49106749D01* X46347256Y-49106749D01* X46402871Y-49106749D01* X46408272Y-49106984D01* X46436893Y-49109488D01* X46460521Y-49111556D01* X46460522Y-49111556D01* X46460522Y-49111555D01* X46460523Y-49111556D01* X46513833Y-49106892D01* X46517027Y-49106749D01* X46517045Y-49106749D01* X46565148Y-49102418D01* X46571914Y-49101810D01* X46679876Y-49092366D01* X46679880Y-49092365D01* X46679894Y-49092364D01* X46679906Y-49092360D01* X46680425Y-49092269D01* X46685659Y-49091573D01* X46686145Y-49091530D01* X46790858Y-49062630D01* X46892599Y-49035369D01* X46892612Y-49035362D01* X46899552Y-49032837D01* X46904243Y-49031338D01* X46904516Y-49031263D01* X46999542Y-48985500D01* X47092177Y-48942305D01* X47092186Y-48942298D01* X47096873Y-48939594D01* X47096944Y-48939717D01* X47107729Y-48933401D01* X47108616Y-48932974D01* X47191391Y-48872834D01* X47272561Y-48815998D01* X47273474Y-48815084D01* X47288275Y-48802442D01* X47291886Y-48799820D01* X47323513Y-48766741D01* X47360425Y-48728133D01* X47428269Y-48660290D01* X47428269Y-48660289D01* X47428272Y-48660287D01* X47430999Y-48656391D01* X47442951Y-48641817D01* X47448435Y-48636083D01* X47501332Y-48555946D01* X47554579Y-48479903D01* X47558061Y-48472434D01* X47566959Y-48456525D01* X47573232Y-48447023D01* X47609739Y-48361609D01* X47647643Y-48280325D01* X47650668Y-48269031D01* X47656419Y-48252396D01* X47662266Y-48238719D01* X47682234Y-48151227D01* X47704638Y-48067620D01* X47706330Y-48048273D01* X47707649Y-48039875D01* X47712674Y-48017864D01* X47716559Y-47931354D01* X47723830Y-47848249D01* X47723830Y-47848247D01* X50047216Y-47848247D01* X50049195Y-47870888D01* X50049369Y-47879078D01* X50048207Y-47904937D01* X50048208Y-47904939D01* X50059214Y-47986195D01* X50059539Y-47989113D01* X50062055Y-48017864D01* X50066408Y-48067620D01* X50073147Y-48092772D01* X50074697Y-48100492D01* X50078616Y-48129422D01* X50078619Y-48129432D01* X50102936Y-48204272D01* X50103857Y-48207383D01* X50123400Y-48280315D01* X50123404Y-48280327D01* X50135798Y-48306908D01* X50138574Y-48313954D01* X50148618Y-48344865D01* X50148620Y-48344870D01* X50157628Y-48361609D01* X50184345Y-48411259D01* X50185939Y-48414436D01* X50216465Y-48479900D01* X50216466Y-48479902D01* X50216467Y-48479903D01* X50235191Y-48506645D01* X50238998Y-48512823D01* X50255966Y-48544354D01* X50255968Y-48544357D01* X50300920Y-48600724D01* X50303232Y-48603816D01* X50342774Y-48660287D01* X50342777Y-48660290D01* X50368182Y-48685695D01* X50372818Y-48690882D01* X50397209Y-48721467D01* X50449037Y-48766748D01* X50452080Y-48769593D01* X50498478Y-48815992D01* X50498479Y-48815993D01* X50498482Y-48815995D01* X50498485Y-48815998D01* X50530010Y-48838071D01* X50530632Y-48838507D01* X50535864Y-48842606D01* X50567805Y-48870512D01* X50624058Y-48904121D01* X50627781Y-48906532D01* X50664273Y-48932084D01* X50678861Y-48942300D01* X50678864Y-48942301D01* X50678869Y-48942305D01* X50717433Y-48960287D01* X50723016Y-48963246D01* X50762273Y-48986702D01* X50820533Y-49008566D01* X50824945Y-49010420D01* X50878447Y-49035369D01* X50922727Y-49047233D01* X50928462Y-49049073D01* X50957879Y-49060113D01* X50974362Y-49066300D01* X51032336Y-49076820D01* X51037301Y-49077934D01* X51091152Y-49092364D01* X51140125Y-49096648D01* X51145773Y-49097406D01* X51184875Y-49104502D01* X51197255Y-49106749D01* X51197256Y-49106749D01* X51252871Y-49106749D01* X51258272Y-49106984D01* X51286893Y-49109488D01* X51310521Y-49111556D01* X51310522Y-49111556D01* X51310522Y-49111555D01* X51310523Y-49111556D01* X51363833Y-49106892D01* X51367027Y-49106749D01* X51367045Y-49106749D01* X51415148Y-49102418D01* X51421914Y-49101810D01* X51529876Y-49092366D01* X51529880Y-49092365D01* X51529894Y-49092364D01* X51529906Y-49092360D01* X51530425Y-49092269D01* X51535659Y-49091573D01* X51536145Y-49091530D01* X51640858Y-49062630D01* X51742599Y-49035369D01* X51742612Y-49035362D01* X51749552Y-49032837D01* X51754243Y-49031338D01* X51754516Y-49031263D01* X51849542Y-48985500D01* X51942177Y-48942305D01* X51942186Y-48942298D01* X51946873Y-48939594D01* X51946944Y-48939717D01* X51957729Y-48933401D01* X51958616Y-48932974D01* X52041391Y-48872834D01* X52122561Y-48815998D01* X52123474Y-48815084D01* X52138275Y-48802442D01* X52141886Y-48799820D01* X52173513Y-48766741D01* X52210425Y-48728133D01* X52278269Y-48660290D01* X52278269Y-48660289D01* X52278272Y-48660287D01* X52280999Y-48656391D01* X52292951Y-48641817D01* X52298435Y-48636083D01* X52351332Y-48555946D01* X52404579Y-48479903D01* X52408061Y-48472434D01* X52416959Y-48456525D01* X52423232Y-48447023D01* X52459739Y-48361609D01* X52497643Y-48280325D01* X52500668Y-48269031D01* X52506419Y-48252396D01* X52512266Y-48238719D01* X52532234Y-48151227D01* X52554638Y-48067620D01* X52556330Y-48048273D01* X52557649Y-48039875D01* X52562674Y-48017864D01* X52566559Y-47931354D01* X52573830Y-47848249D01* X52571850Y-47825617D01* X52571676Y-47817422D01* X52572838Y-47791558D01* X52561828Y-47710291D01* X52561504Y-47707374D01* X52554638Y-47628880D01* X52554638Y-47628878D01* X52547900Y-47603732D01* X52546348Y-47596002D01* X52544645Y-47583439D01* X52542429Y-47567074D01* X52518110Y-47492231D01* X52517194Y-47489138D01* X52502953Y-47435990D01* X52497646Y-47416182D01* X52497642Y-47416172D01* X52485245Y-47389585D01* X52482471Y-47382545D01* X52472426Y-47351628D01* X52472425Y-47351626D01* X52472422Y-47351619D01* X52436690Y-47285219D01* X52435105Y-47282060D01* X52404579Y-47216596D01* X52404575Y-47216590D01* X52385860Y-47189862D01* X52382046Y-47183673D01* X52365078Y-47152141D01* X52320117Y-47095762D01* X52317802Y-47092666D01* X52278273Y-47036212D01* X52252863Y-47010802D01* X52248225Y-47005613D01* X52223835Y-46975029D01* X52172014Y-46929754D01* X52168965Y-46926904D01* X52122562Y-46880500D01* X52090414Y-46857990D01* X52085179Y-46853890D01* X52053241Y-46825986D01* X51997009Y-46792388D01* X51993248Y-46789953D01* X51955503Y-46763524D01* X51942177Y-46754193D01* X51928463Y-46747798D01* X51903623Y-46736214D01* X51898024Y-46733246D01* X51867224Y-46714845D01* X51858773Y-46709796D01* X51800511Y-46687930D01* X51796111Y-46686082D01* X51764416Y-46671302D01* X51742600Y-46661129D01* X51742588Y-46661125D01* X51698316Y-46649262D01* X51692576Y-46647421D01* X51646683Y-46630197D01* X51595638Y-46620933D01* X51588714Y-46619677D01* X51583740Y-46618561D01* X51529895Y-46604134D01* X51517893Y-46603083D01* X51480926Y-46599849D01* X51475264Y-46599089D01* X51440521Y-46592785D01* X51423790Y-46589749D01* X51423789Y-46589749D01* X51368175Y-46589749D01* X51362773Y-46589513D01* X51334152Y-46587009D01* X51310525Y-46584942D01* X51310520Y-46584942D01* X51257251Y-46589602D01* X51254012Y-46589748D01* X51199131Y-46594687D01* X51091141Y-46604134D01* X51090564Y-46604236D01* X51085412Y-46604921D01* X51084909Y-46604966D01* X51084892Y-46604969D01* X50980187Y-46633867D01* X50878441Y-46661130D01* X50871467Y-46663667D01* X50866791Y-46665161D01* X50866545Y-46665228D01* X50866534Y-46665233D01* X50771487Y-46711004D01* X50678875Y-46754190D01* X50674181Y-46756900D01* X50674110Y-46756778D01* X50663347Y-46763082D01* X50662431Y-46763523D01* X50662425Y-46763526D01* X50579642Y-46823672D01* X50498481Y-46880503D01* X50497550Y-46881434D01* X50482787Y-46894042D01* X50479164Y-46896674D01* X50479154Y-46896683D01* X50410620Y-46968364D01* X50342770Y-47036215D01* X50342769Y-47036216D01* X50340029Y-47040129D01* X50328104Y-47054668D01* X50322612Y-47060412D01* X50322608Y-47060418D01* X50269706Y-47140562D01* X50216466Y-47216596D01* X50216464Y-47216601D01* X50212985Y-47224061D01* X50204099Y-47239951D01* X50197815Y-47249471D01* X50197814Y-47249473D01* X50161303Y-47334893D01* X50123405Y-47416166D01* X50123403Y-47416172D01* X50120375Y-47427471D01* X50114625Y-47444103D01* X50108782Y-47457774D01* X50108779Y-47457782D01* X50088811Y-47545270D01* X50066408Y-47628875D01* X50066407Y-47628881D01* X50064715Y-47648219D01* X50063396Y-47656615D01* X50058372Y-47678634D01* X50054486Y-47765143D01* X50047216Y-47848245D01* X50047216Y-47848247D01* X47723830Y-47848247D01* X47721850Y-47825617D01* X47721676Y-47817422D01* X47722838Y-47791558D01* X47711828Y-47710291D01* X47711504Y-47707374D01* X47704638Y-47628880D01* X47704638Y-47628878D01* X47697900Y-47603732D01* X47696348Y-47596002D01* X47694645Y-47583439D01* X47692429Y-47567074D01* X47668110Y-47492231D01* X47667194Y-47489138D01* X47652953Y-47435990D01* X47647646Y-47416182D01* X47647642Y-47416172D01* X47635245Y-47389585D01* X47632471Y-47382545D01* X47622426Y-47351628D01* X47622425Y-47351626D01* X47622422Y-47351619D01* X47586690Y-47285219D01* X47585105Y-47282060D01* X47554579Y-47216596D01* X47554575Y-47216590D01* X47535860Y-47189862D01* X47532046Y-47183673D01* X47515078Y-47152141D01* X47470117Y-47095762D01* X47467802Y-47092666D01* X47428273Y-47036212D01* X47402863Y-47010802D01* X47398225Y-47005613D01* X47373835Y-46975029D01* X47322014Y-46929754D01* X47318965Y-46926904D01* X47272562Y-46880500D01* X47240414Y-46857990D01* X47235179Y-46853890D01* X47203241Y-46825986D01* X47147009Y-46792388D01* X47143248Y-46789953D01* X47105503Y-46763524D01* X47092177Y-46754193D01* X47078463Y-46747798D01* X47053623Y-46736214D01* X47048024Y-46733246D01* X47017224Y-46714845D01* X47008773Y-46709796D01* X46950511Y-46687930D01* X46946111Y-46686082D01* X46914416Y-46671302D01* X46892600Y-46661129D01* X46892588Y-46661125D01* X46848316Y-46649262D01* X46842576Y-46647421D01* X46796683Y-46630197D01* X46745638Y-46620933D01* X46738714Y-46619677D01* X46733740Y-46618561D01* X46679895Y-46604134D01* X46667893Y-46603083D01* X46630926Y-46599849D01* X46625264Y-46599089D01* X46590521Y-46592785D01* X46573790Y-46589749D01* X46573789Y-46589749D01* X46518175Y-46589749D01* X46512773Y-46589513D01* X46484152Y-46587009D01* X46460525Y-46584942D01* X46460520Y-46584942D01* X46407251Y-46589602D01* X46404012Y-46589748D01* X46349131Y-46594687D01* X46241141Y-46604134D01* X46240564Y-46604236D01* X46235412Y-46604921D01* X46234909Y-46604966D01* X46234892Y-46604969D01* X46130187Y-46633867D01* X46028441Y-46661130D01* X46021467Y-46663667D01* X46016791Y-46665161D01* X46016545Y-46665228D01* X46016534Y-46665233D01* X45921487Y-46711004D01* X45828875Y-46754190D01* X45824181Y-46756900D01* X45824110Y-46756778D01* X45813347Y-46763082D01* X45812431Y-46763523D01* X45812425Y-46763526D01* X45729642Y-46823672D01* X45648481Y-46880503D01* X45647550Y-46881434D01* X45632787Y-46894042D01* X45629164Y-46896674D01* X45629154Y-46896683D01* X45560620Y-46968364D01* X45492770Y-47036215D01* X45492769Y-47036216D01* X45490029Y-47040129D01* X45478104Y-47054668D01* X45472612Y-47060412D01* X45472608Y-47060418D01* X45419706Y-47140562D01* X45366466Y-47216596D01* X45366464Y-47216601D01* X45362985Y-47224061D01* X45354099Y-47239951D01* X45347815Y-47249471D01* X45347814Y-47249473D01* X45311303Y-47334893D01* X45273405Y-47416166D01* X45273403Y-47416172D01* X45270375Y-47427471D01* X45264625Y-47444103D01* X45258782Y-47457774D01* X45258779Y-47457782D01* X45238811Y-47545270D01* X45216408Y-47628875D01* X45216407Y-47628881D01* X45214715Y-47648219D01* X45213396Y-47656615D01* X45208372Y-47678634D01* X45204486Y-47765143D01* X45197216Y-47848245D01* X45197216Y-47848247D01* X41354023Y-47848247D01* X41354023Y-46329611D01* X41354022Y-46329594D01* X41349569Y-46288181D01* X41347512Y-46269048D01* X41331735Y-46226749D01* X41296411Y-46132042D01* X41296410Y-46132041D01* X41221938Y-46032560D01* X41197520Y-45967096D01* X41212371Y-45898823D01* X41221938Y-45883938D01* X41222426Y-45883287D01* X41280242Y-45806054D01* X41296410Y-45784456D01* X41296411Y-45784455D01* X41308452Y-45752174D01* X41347512Y-45647450D01* X41351114Y-45613941D01* X41354022Y-45586903D01* X41354023Y-45586886D01* X41354023Y-44818249D01* X44747196Y-44818249D01* X44752167Y-44878243D01* X44754494Y-44906332D01* X44758379Y-44997792D01* X44758380Y-44997801D01* X44763533Y-45021710D01* X44764713Y-45029659D01* X44766470Y-45050866D01* X44766472Y-45050878D01* X44788940Y-45139602D01* X44808893Y-45232184D01* X44816780Y-45251810D01* X44819357Y-45259715D01* X44823774Y-45277156D01* X44861808Y-45363865D01* X44898290Y-45454653D01* X44907652Y-45469857D01* X44911640Y-45477469D01* X44917538Y-45490917D01* X44971047Y-45572819D01* X45023996Y-45658814D01* X45024003Y-45658823D01* X45030681Y-45666410D01* X45041409Y-45680516D01* X45045209Y-45686332D01* X45113602Y-45760626D01* X45134572Y-45784453D01* X45182405Y-45838801D01* X45182406Y-45838802D01* X45187593Y-45842990D01* X45200930Y-45855489D01* X45203306Y-45858071D01* X45247559Y-45892513D01* X45285471Y-45922021D01* X45332554Y-45960038D01* X45368944Y-45989422D01* X45368945Y-45989422D01* X45368947Y-45989424D01* X45371688Y-45990955D01* X45371763Y-45990997D01* X45387457Y-46001401D01* X45387502Y-46001436D01* X45387514Y-46001444D01* X45445013Y-46032560D01* X45481869Y-46052505D01* X45578263Y-46106354D01* X45578268Y-46106355D01* X45578272Y-46106358D01* X45580663Y-46107439D01* X45588000Y-46110697D01* X45588098Y-46110475D01* X45592785Y-46112530D01* X45592796Y-46112536D01* X45697263Y-46148400D01* X45804329Y-46186229D01* X45804890Y-46186325D01* X45809632Y-46187330D01* X45813566Y-46188327D01* X45813572Y-46188329D01* X45925618Y-46207026D01* X46040633Y-46226748D01* X46040642Y-46226749D01* X46277230Y-46226749D01* X46277235Y-46226749D01* X46310171Y-46221252D01* X46333998Y-46217277D01* X46338936Y-46216655D01* X46392464Y-46212100D01* X46399410Y-46211509D01* X46399411Y-46211508D01* X46399421Y-46211508D01* X46451820Y-46197863D01* X46457191Y-46196718D01* X46507474Y-46188329D01* X46565025Y-46168571D01* X46569498Y-46167222D01* X46631447Y-46151093D01* X46677782Y-46130147D01* X46683156Y-46128016D01* X46728250Y-46112536D01* X46784655Y-46082010D01* X46788577Y-46080065D01* X46849925Y-46052335D01* X46889318Y-46025708D01* X46894502Y-46022563D01* X46933531Y-46001444D01* X46933535Y-46001442D01* X46933536Y-46001441D01* X46933540Y-46001439D01* X46986751Y-45960021D01* X46990084Y-45957602D01* X47048570Y-45918074D01* X47080524Y-45887447D01* X47085312Y-45883307D01* X47117743Y-45858067D01* X47165642Y-45806033D01* X47168317Y-45803305D01* X47221667Y-45752174D01* X47246020Y-45719245D01* X47250250Y-45714126D01* X47251462Y-45712810D01* X47275837Y-45686332D01* X47316308Y-45624384D01* X47318358Y-45621438D01* X47319357Y-45620086D01* X47364238Y-45559406D01* X47381199Y-45525763D01* X47384637Y-45519798D01* X47403507Y-45490918D01* X47434565Y-45420110D01* X47435936Y-45417199D01* X47472180Y-45345316D01* X47482244Y-45312449D01* X47484744Y-45305715D01* X47497272Y-45277156D01* X47517058Y-45199019D01* X47517857Y-45196158D01* X47542387Y-45116064D01* X47546333Y-45085243D01* X47547721Y-45077933D01* X47554574Y-45050875D01* X47561613Y-44965921D01* X47572841Y-44878244D01* X47571662Y-44850498D01* X47571817Y-44842774D01* X47573850Y-44818249D01* X50197196Y-44818249D01* X50202167Y-44878243D01* X50204494Y-44906332D01* X50208379Y-44997792D01* X50208380Y-44997801D01* X50213533Y-45021710D01* X50214713Y-45029659D01* X50216470Y-45050866D01* X50216472Y-45050878D01* X50238940Y-45139602D01* X50258893Y-45232184D01* X50266780Y-45251810D01* X50269357Y-45259715D01* X50273774Y-45277156D01* X50311808Y-45363865D01* X50348290Y-45454653D01* X50357652Y-45469857D01* X50361640Y-45477469D01* X50367538Y-45490917D01* X50421047Y-45572819D01* X50473996Y-45658814D01* X50474003Y-45658823D01* X50480681Y-45666410D01* X50491409Y-45680516D01* X50495209Y-45686332D01* X50563602Y-45760626D01* X50584572Y-45784453D01* X50632405Y-45838801D01* X50632406Y-45838802D01* X50637593Y-45842990D01* X50650930Y-45855489D01* X50653306Y-45858071D01* X50697559Y-45892513D01* X50735471Y-45922021D01* X50782554Y-45960038D01* X50818944Y-45989422D01* X50818945Y-45989422D01* X50818947Y-45989424D01* X50821688Y-45990955D01* X50821763Y-45990997D01* X50837457Y-46001401D01* X50837502Y-46001436D01* X50837514Y-46001444D01* X50895013Y-46032560D01* X50931869Y-46052505D01* X51028263Y-46106354D01* X51028268Y-46106355D01* X51028272Y-46106358D01* X51030663Y-46107439D01* X51038000Y-46110697D01* X51038098Y-46110475D01* X51042785Y-46112530D01* X51042796Y-46112536D01* X51147263Y-46148400D01* X51254329Y-46186229D01* X51254890Y-46186325D01* X51259632Y-46187330D01* X51263566Y-46188327D01* X51263572Y-46188329D01* X51375618Y-46207026D01* X51490633Y-46226748D01* X51490642Y-46226749D01* X51727230Y-46226749D01* X51727235Y-46226749D01* X51760171Y-46221252D01* X51783998Y-46217277D01* X51788936Y-46216655D01* X51842464Y-46212100D01* X51849410Y-46211509D01* X51849411Y-46211508D01* X51849421Y-46211508D01* X51901820Y-46197863D01* X51907191Y-46196718D01* X51957474Y-46188329D01* X52015025Y-46168571D01* X52019498Y-46167222D01* X52081447Y-46151093D01* X52127782Y-46130147D01* X52133156Y-46128016D01* X52178250Y-46112536D01* X52234655Y-46082010D01* X52238577Y-46080065D01* X52299925Y-46052335D01* X52339318Y-46025708D01* X52344502Y-46022563D01* X52383531Y-46001444D01* X52383535Y-46001442D01* X52383536Y-46001441D01* X52383540Y-46001439D01* X52436751Y-45960021D01* X52440084Y-45957602D01* X52498570Y-45918074D01* X52530524Y-45887447D01* X52535312Y-45883307D01* X52567743Y-45858067D01* X52615642Y-45806033D01* X52618317Y-45803305D01* X52671667Y-45752174D01* X52696020Y-45719245D01* X52700250Y-45714126D01* X52701462Y-45712810D01* X52725837Y-45686332D01* X52766308Y-45624384D01* X52768358Y-45621438D01* X52769357Y-45620086D01* X52814238Y-45559406D01* X52831199Y-45525763D01* X52834637Y-45519798D01* X52853507Y-45490918D01* X52884565Y-45420110D01* X52885936Y-45417199D01* X52922180Y-45345316D01* X52932244Y-45312449D01* X52934744Y-45305715D01* X52947272Y-45277156D01* X52967058Y-45199019D01* X52967857Y-45196158D01* X52992387Y-45116064D01* X52996333Y-45085243D01* X52997721Y-45077933D01* X53004574Y-45050875D01* X53011613Y-44965921D01* X53022841Y-44878244D01* X53021662Y-44850498D01* X53021817Y-44842774D01* X53023850Y-44818249D01* X53018878Y-44758253D01* X53016551Y-44730165D01* X53012667Y-44638709D01* X53012666Y-44638706D01* X53012666Y-44638698D01* X53007510Y-44614779D01* X53006331Y-44606835D01* X53004574Y-44585628D01* X53004574Y-44585623D01* X52982105Y-44496895D01* X52962153Y-44404317D01* X52954258Y-44384673D01* X52951690Y-44376793D01* X52947272Y-44359342D01* X52909237Y-44272632D01* X52872756Y-44181845D01* X52863390Y-44166635D01* X52859405Y-44159027D01* X52858625Y-44157249D01* X52853507Y-44145580D01* X52799998Y-44063678D01* X52747047Y-43977680D01* X52747041Y-43977673D01* X52747038Y-43977669D01* X52740362Y-43970083D01* X52729641Y-43955988D01* X52725838Y-43950168D01* X52725837Y-43950166D01* X52657443Y-43875871D01* X52588642Y-43797698D01* X52588641Y-43797697D01* X52588637Y-43797693D01* X52583452Y-43793507D01* X52570120Y-43781014D01* X52567743Y-43778431D01* X52485574Y-43714476D01* X52402099Y-43647074D01* X52402097Y-43647072D01* X52402091Y-43647068D01* X52399273Y-43645494D01* X52383593Y-43635100D01* X52383543Y-43635061D01* X52383541Y-43635060D01* X52383540Y-43635059D01* X52289176Y-43583992D01* X52236345Y-43554479D01* X52192782Y-43530143D01* X52190522Y-43529122D01* X52183042Y-43525800D01* X52182945Y-43526022D01* X52178248Y-43523961D01* X52073782Y-43488097D01* X51966720Y-43450270D01* X51966719Y-43450269D01* X51966717Y-43450269D01* X51966715Y-43450268D01* X51966706Y-43450266D01* X51966156Y-43450172D01* X51961436Y-43449171D01* X51957489Y-43448172D01* X51957476Y-43448169D01* X51957474Y-43448169D01* X51845427Y-43429471D01* X51730413Y-43409749D01* X51730404Y-43409749D01* X51727235Y-43409749D01* X51493811Y-43409749D01* X51493810Y-43409749D01* X51437052Y-43419219D01* X51432110Y-43419841D01* X51398353Y-43422714D01* X51371623Y-43424990D01* X51371620Y-43424990D01* X51319256Y-43438625D01* X51313836Y-43439781D01* X51263572Y-43448168D01* X51206035Y-43467920D01* X51201528Y-43469278D01* X51156418Y-43481025D01* X51139599Y-43485405D01* X51139596Y-43485406D01* X51139593Y-43485407D01* X51093281Y-43506341D01* X51087882Y-43508482D01* X51073286Y-43513493D01* X51042796Y-43523961D01* X50986402Y-43554479D01* X50982433Y-43556447D01* X50921120Y-43584163D01* X50921118Y-43584164D01* X50881732Y-43610784D01* X50876525Y-43613942D01* X50864961Y-43620200D01* X50837501Y-43635061D01* X50784303Y-43676467D01* X50780948Y-43678902D01* X50750872Y-43699230D01* X50722474Y-43718425D01* X50722471Y-43718428D01* X50690535Y-43749035D01* X50685716Y-43753201D01* X50653304Y-43778430D01* X50653303Y-43778431D01* X50605421Y-43830442D01* X50602707Y-43833211D01* X50549380Y-43884322D01* X50525026Y-43917248D01* X50520793Y-43922372D01* X50495207Y-43950167D01* X50495204Y-43950171D01* X50454745Y-44012099D01* X50452689Y-44015055D01* X50406810Y-44077088D01* X50406809Y-44077089D01* X50389856Y-44110712D01* X50386398Y-44116712D01* X50367538Y-44145581D01* X50336501Y-44216338D01* X50335085Y-44219345D01* X50298865Y-44291182D01* X50298864Y-44291183D01* X50288803Y-44324035D01* X50286298Y-44330786D01* X50273772Y-44359343D01* X50273772Y-44359344D01* X50253992Y-44437452D01* X50253172Y-44440386D01* X50228660Y-44520427D01* X50228658Y-44520439D01* X50224714Y-44551235D01* X50223318Y-44558584D01* X50216473Y-44585616D01* X50216471Y-44585628D01* X50209432Y-44670576D01* X50198205Y-44758252D01* X50198204Y-44758253D01* X50199382Y-44785980D01* X50199226Y-44793734D01* X50197196Y-44818244D01* X50197196Y-44818249D01* X47573850Y-44818249D01* X47568878Y-44758253D01* X47566551Y-44730165D01* X47562667Y-44638709D01* X47562666Y-44638706D01* X47562666Y-44638698D01* X47557510Y-44614779D01* X47556331Y-44606835D01* X47554574Y-44585628D01* X47554574Y-44585623D01* X47532105Y-44496895D01* X47512153Y-44404317D01* X47504258Y-44384673D01* X47501690Y-44376793D01* X47497272Y-44359342D01* X47459237Y-44272632D01* X47422756Y-44181845D01* X47413390Y-44166635D01* X47409405Y-44159027D01* X47408625Y-44157249D01* X47403507Y-44145580D01* X47349998Y-44063678D01* X47297047Y-43977680D01* X47297041Y-43977673D01* X47297038Y-43977669D01* X47290362Y-43970083D01* X47279641Y-43955988D01* X47275838Y-43950168D01* X47275837Y-43950166D01* X47207443Y-43875871D01* X47138642Y-43797698D01* X47138641Y-43797697D01* X47138637Y-43797693D01* X47133452Y-43793507D01* X47120120Y-43781014D01* X47117743Y-43778431D01* X47035574Y-43714476D01* X46952099Y-43647074D01* X46952097Y-43647072D01* X46952091Y-43647068D01* X46949273Y-43645494D01* X46933593Y-43635100D01* X46933543Y-43635061D01* X46933541Y-43635060D01* X46933540Y-43635059D01* X46839176Y-43583992D01* X46786345Y-43554479D01* X46742782Y-43530143D01* X46740522Y-43529122D01* X46733042Y-43525800D01* X46732945Y-43526022D01* X46728248Y-43523961D01* X46623782Y-43488097D01* X46516720Y-43450270D01* X46516719Y-43450269D01* X46516717Y-43450269D01* X46516715Y-43450268D01* X46516706Y-43450266D01* X46516156Y-43450172D01* X46511436Y-43449171D01* X46507489Y-43448172D01* X46507476Y-43448169D01* X46507474Y-43448169D01* X46395427Y-43429471D01* X46280413Y-43409749D01* X46280404Y-43409749D01* X46277235Y-43409749D01* X46043811Y-43409749D01* X46043810Y-43409749D01* X45987052Y-43419219D01* X45982110Y-43419841D01* X45948353Y-43422714D01* X45921623Y-43424990D01* X45921620Y-43424990D01* X45869256Y-43438625D01* X45863836Y-43439781D01* X45813572Y-43448168D01* X45756035Y-43467920D01* X45751528Y-43469278D01* X45706418Y-43481025D01* X45689599Y-43485405D01* X45689596Y-43485406D01* X45689593Y-43485407D01* X45643281Y-43506341D01* X45637882Y-43508482D01* X45623286Y-43513493D01* X45592796Y-43523961D01* X45536402Y-43554479D01* X45532433Y-43556447D01* X45471120Y-43584163D01* X45471118Y-43584164D01* X45431732Y-43610784D01* X45426525Y-43613942D01* X45414961Y-43620200D01* X45387501Y-43635061D01* X45334303Y-43676467D01* X45330948Y-43678902D01* X45300872Y-43699230D01* X45272474Y-43718425D01* X45272471Y-43718428D01* X45240535Y-43749035D01* X45235716Y-43753201D01* X45203304Y-43778430D01* X45203303Y-43778431D01* X45155421Y-43830442D01* X45152707Y-43833211D01* X45099380Y-43884322D01* X45075026Y-43917248D01* X45070793Y-43922372D01* X45045207Y-43950167D01* X45045204Y-43950171D01* X45004745Y-44012099D01* X45002689Y-44015055D01* X44956810Y-44077088D01* X44956809Y-44077089D01* X44939856Y-44110712D01* X44936398Y-44116712D01* X44917538Y-44145581D01* X44886501Y-44216338D01* X44885085Y-44219345D01* X44848865Y-44291182D01* X44848864Y-44291183D01* X44838803Y-44324035D01* X44836298Y-44330786D01* X44823772Y-44359343D01* X44823772Y-44359344D01* X44803992Y-44437452D01* X44803172Y-44440386D01* X44778660Y-44520427D01* X44778658Y-44520439D01* X44774714Y-44551235D01* X44773318Y-44558584D01* X44766473Y-44585616D01* X44766471Y-44585628D01* X44759432Y-44670576D01* X44748205Y-44758252D01* X44748204Y-44758253D01* X44749382Y-44785980D01* X44749226Y-44793734D01* X44747196Y-44818244D01* X44747196Y-44818249D01* X41354023Y-44818249D01* X41354023Y-43789611D01* X41354022Y-43789594D01* X41350680Y-43758519D01* X41347512Y-43729048D01* X41343549Y-43718424D01* X41316935Y-43647068D01* X41296412Y-43592045D01* X41208784Y-43474988D01* X41091727Y-43387360D01* X40954726Y-43336260D01* X40894177Y-43329749D01* X40894161Y-43329749D01* X37296885Y-43329749D01* X37296868Y-43329749D01* X37236320Y-43336260D01* X37236318Y-43336260D01* X37099318Y-43387360D01* X36982262Y-43474988D01* X36894634Y-43592044D01* X36843534Y-43729044D01* X36843534Y-43729046D01* X36837023Y-43789594D01* X36837023Y-45586903D01* X36843534Y-45647451D01* X36843534Y-45647453D01* X36873185Y-45726947D01* X36894634Y-45784453D01* X36968620Y-45883287D01* X36969108Y-45883938D01* X36993525Y-45949403D01* X36978673Y-46017676D01* X36969108Y-46032560D01* X36894634Y-46132044D01* X36843534Y-46269044D01* X36843534Y-46269046D01* X36837023Y-46329594D01* X36837023Y-48126903D01* X33798903Y-48126903D01* X33798903Y-41234624D01* X33818588Y-41167585D01* X33871392Y-41121830D01* X33922903Y-41110624D01* X65604970Y-41110624D01* X65672009Y-41130309D01* G37* %TD.AperFunction*% %TD*% M02* ================================================ FILE: pcb/v1.0/Gerber/DeskHop-F_Mask.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-01-21T01:35:17+01:00*% %TF.ProjectId,DeskHop,4465736b-486f-4702-9e6b-696361645f70,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Soldermask,Top*% %TF.FilePolarity,Negative*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-01-21 01:35:17* %MOMM*% %LPD*% G01* G04 APERTURE LIST* G04 Aperture macros list* %AMRoundRect* 0 Rectangle with rounded corners* 0 $1 Rounding radius* 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners* 0 Add a 4 corners polygon primitive as box body* 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0* 0 Add four circle primitives for the rounded corners* 1,1,$1+$1,$2,$3* 1,1,$1+$1,$4,$5* 1,1,$1+$1,$6,$7* 1,1,$1+$1,$8,$9* 0 Add four rect primitives between the rounded corners* 20,1,$1+$1,$2,$3,$4,$5,0* 20,1,$1+$1,$4,$5,$6,$7,0* 20,1,$1+$1,$6,$7,$8,$9,0* 20,1,$1+$1,$8,$9,$2,$3,0*% G04 Aperture macros list end* %ADD10O,1.800000X1.800000*% %ADD11O,1.500000X1.500000*% %ADD12R,3.500000X1.700000*% %ADD13R,1.700000X3.500000*% %ADD14C,3.100000*% %ADD15C,5.400000*% %ADD16RoundRect,0.250000X-0.412500X-0.650000X0.412500X-0.650000X0.412500X0.650000X-0.412500X0.650000X0*% %ADD17R,1.600000X1.500000*% %ADD18C,1.600000*% %ADD19C,3.000000*% %ADD20R,1.700000X1.700000*% %ADD21O,1.700000X1.700000*% %ADD22RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*% %ADD23RoundRect,0.250000X0.412500X0.650000X-0.412500X0.650000X-0.412500X-0.650000X0.412500X-0.650000X0*% G04 APERTURE END LIST* D10* %TO.C,U1*% X82619000Y-44834000D03* D11* X82919000Y-47864000D03* X87769000Y-47864000D03* D10* X88069000Y-44834000D03* D12* X75554000Y-44704000D03* X75554000Y-47244000D03* X75554000Y-49784000D03* X75554000Y-52324000D03* X75554000Y-54864000D03* X75554000Y-57404000D03* X75554000Y-59944000D03* X75554000Y-62484000D03* X75554000Y-65024000D03* X75554000Y-67564000D03* X75554000Y-70104000D03* X75554000Y-72644000D03* X75554000Y-75184000D03* X75554000Y-77724000D03* X75554000Y-80264000D03* X75554000Y-82804000D03* X75554000Y-85344000D03* X75554000Y-87884000D03* X75554000Y-90424000D03* X75554000Y-92964000D03* X95134000Y-92964000D03* X95134000Y-90424000D03* X95134000Y-87884000D03* X95134000Y-85344000D03* X95134000Y-82804000D03* X95134000Y-80264000D03* X95134000Y-77724000D03* X95134000Y-75184000D03* X95134000Y-72644000D03* X95134000Y-70104000D03* X95134000Y-67564000D03* X95134000Y-65024000D03* X95134000Y-62484000D03* X95134000Y-59944000D03* X95134000Y-57404000D03* X95134000Y-54864000D03* X95134000Y-52324000D03* X95134000Y-49784000D03* X95134000Y-47244000D03* X95134000Y-44704000D03* D13* X82804000Y-93634000D03* X85344000Y-93634000D03* X87884000Y-93634000D03* %TD*% D10* %TO.C,U2*% X46160523Y-44818249D03* D11* X46460523Y-47848249D03* X51310523Y-47848249D03* D10* X51610523Y-44818249D03* D12* X39095523Y-44688249D03* X39095523Y-47228249D03* X39095523Y-49768249D03* X39095523Y-52308249D03* X39095523Y-54848249D03* X39095523Y-57388249D03* X39095523Y-59928249D03* X39095523Y-62468249D03* X39095523Y-65008249D03* X39095523Y-67548249D03* X39095523Y-70088249D03* X39095523Y-72628249D03* X39095523Y-75168249D03* X39095523Y-77708249D03* X39095523Y-80248249D03* X39095523Y-82788249D03* X39095523Y-85328249D03* X39095523Y-87868249D03* X39095523Y-90408249D03* X39095523Y-92948249D03* X58675523Y-92948249D03* X58675523Y-90408249D03* X58675523Y-87868249D03* X58675523Y-85328249D03* X58675523Y-82788249D03* X58675523Y-80248249D03* X58675523Y-77708249D03* X58675523Y-75168249D03* X58675523Y-72628249D03* X58675523Y-70088249D03* X58675523Y-67548249D03* X58675523Y-65008249D03* X58675523Y-62468249D03* X58675523Y-59928249D03* X58675523Y-57388249D03* X58675523Y-54848249D03* X58675523Y-52308249D03* X58675523Y-49768249D03* X58675523Y-47228249D03* X58675523Y-44688249D03* D13* X46345523Y-93618249D03* X48885523Y-93618249D03* X51425523Y-93618249D03* %TD*% D14* %TO.C,H3*% X67310000Y-45212000D03* D15* X67310000Y-45212000D03* %TD*% D16* %TO.C,C2*% X69041691Y-74877665D03* X72166691Y-74877665D03* %TD*% D17* %TO.C,J4*% X45776000Y-101574000D03* D18* X48276000Y-101574000D03* X50276000Y-101574000D03* X52776000Y-101574000D03* D19* X42706000Y-104284000D03* X55846000Y-104284000D03* %TD*% D20* %TO.C,J3*% X95667537Y-99795757D03* D21* X95667537Y-102335757D03* X95667537Y-104875757D03* %TD*% D14* %TO.C,H2*% X96774000Y-111506000D03* D15* X96774000Y-111506000D03* %TD*% D17* %TO.C,J1*% X81082000Y-101574000D03* D18* X83582000Y-101574000D03* X85582000Y-101574000D03* X88082000Y-101574000D03* D19* X78012000Y-104284000D03* X91152000Y-104284000D03* %TD*% D14* %TO.C,H1*% X37846000Y-111506000D03* D15* X37846000Y-111506000D03* %TD*% D22* %TO.C,U4*% X64753070Y-82571110D03* X64753070Y-83841110D03* X64753070Y-85111110D03* X64753070Y-86381110D03* X69703070Y-86381110D03* X69703070Y-85111110D03* X69703070Y-83841110D03* X69703070Y-82571110D03* %TD*% D20* %TO.C,J2*% X60731042Y-99717876D03* D21* X60731042Y-102257876D03* X60731042Y-104797876D03* %TD*% D23* %TO.C,C1*% X65572536Y-74929999D03* X62447536Y-74929999D03* %TD*% M02* ================================================ FILE: pcb/v1.0/Gerber/DeskHop-F_Paste.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-01-21T01:35:17+01:00*% %TF.ProjectId,DeskHop,4465736b-486f-4702-9e6b-696361645f70,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Paste,Top*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-01-21 01:35:17* %MOMM*% %LPD*% G01* G04 APERTURE LIST* G04 Aperture macros list* %AMRoundRect* 0 Rectangle with rounded corners* 0 $1 Rounding radius* 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners* 0 Add a 4 corners polygon primitive as box body* 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0* 0 Add four circle primitives for the rounded corners* 1,1,$1+$1,$2,$3* 1,1,$1+$1,$4,$5* 1,1,$1+$1,$6,$7* 1,1,$1+$1,$8,$9* 0 Add four rect primitives between the rounded corners* 20,1,$1+$1,$2,$3,$4,$5,0* 20,1,$1+$1,$4,$5,$6,$7,0* 20,1,$1+$1,$6,$7,$8,$9,0* 20,1,$1+$1,$8,$9,$2,$3,0*% G04 Aperture macros list end* %ADD10C,0.100000*% %ADD11RoundRect,0.250000X-0.412500X-0.650000X0.412500X-0.650000X0.412500X0.650000X-0.412500X0.650000X0*% %ADD12RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*% %ADD13RoundRect,0.250000X0.412500X0.650000X-0.412500X0.650000X-0.412500X-0.650000X0.412500X-0.650000X0*% G04 APERTURE END LIST* D10* X60317381Y-83568061D02* X57015381Y-83568061D01* X57015381Y-82044061D01* X60317381Y-82044061D01* X60317381Y-83568061D01* G36* X60317381Y-83568061D02* G01* X57015381Y-83568061D01* X57015381Y-82044061D01* X60317381Y-82044061D01* X60317381Y-83568061D01* G37* X96774000Y-81026000D02* X93472000Y-81026000D01* X93472000Y-79502000D01* X96774000Y-79502000D01* X96774000Y-81026000D01* G36* X96774000Y-81026000D02* G01* X93472000Y-81026000D01* X93472000Y-79502000D01* X96774000Y-79502000D01* X96774000Y-81026000D01* G37* X60315734Y-70825047D02* X57013734Y-70825047D01* X57013734Y-69301047D01* X60315734Y-69301047D01* X60315734Y-70825047D01* G36* X60315734Y-70825047D02* G01* X57013734Y-70825047D01* X57013734Y-69301047D01* X60315734Y-69301047D01* X60315734Y-70825047D01* G37* X40721244Y-68282544D02* X37419244Y-68282544D01* X37419244Y-66758544D01* X40721244Y-66758544D01* X40721244Y-68282544D01* G36* X40721244Y-68282544D02* G01* X37419244Y-68282544D01* X37419244Y-66758544D01* X40721244Y-66758544D01* X40721244Y-68282544D01* G37* X77216000Y-88646000D02* X73914000Y-88646000D01* X73914000Y-87122000D01* X77216000Y-87122000D01* X77216000Y-88646000D01* G36* X77216000Y-88646000D02* G01* X73914000Y-88646000D01* X73914000Y-87122000D01* X77216000Y-87122000D01* X77216000Y-88646000D01* G37* X40721244Y-78442544D02* X37419244Y-78442544D01* X37419244Y-76918544D01* X40721244Y-76918544D01* X40721244Y-78442544D01* G36* X40721244Y-78442544D02* G01* X37419244Y-78442544D01* X37419244Y-76918544D01* X40721244Y-76918544D01* X40721244Y-78442544D01* G37* X40721244Y-60662544D02* X37419244Y-60662544D01* X37419244Y-59138544D01* X40721244Y-59138544D01* X40721244Y-60662544D01* G36* X40721244Y-60662544D02* G01* X37419244Y-60662544D01* X37419244Y-59138544D01* X40721244Y-59138544D01* X40721244Y-60662544D01* G37* X96774000Y-50546000D02* X93472000Y-50546000D01* X93472000Y-49022000D01* X96774000Y-49022000D01* X96774000Y-50546000D01* G36* X96774000Y-50546000D02* G01* X93472000Y-50546000D01* X93472000Y-49022000D01* X96774000Y-49022000D01* X96774000Y-50546000D01* G37* X96774000Y-70866000D02* X93472000Y-70866000D01* X93472000Y-69342000D01* X96774000Y-69342000D01* X96774000Y-70866000D01* G36* X96774000Y-70866000D02* G01* X93472000Y-70866000D01* X93472000Y-69342000D01* X96774000Y-69342000D01* X96774000Y-70866000D01* G37* X77216000Y-81026000D02* X73914000Y-81026000D01* X73914000Y-79502000D01* X77216000Y-79502000D01* X77216000Y-81026000D01* G36* X77216000Y-81026000D02* G01* X73914000Y-81026000D01* X73914000Y-79502000D01* X77216000Y-79502000D01* X77216000Y-81026000D01* G37* X96774000Y-88646000D02* X93472000Y-88646000D01* X93472000Y-87122000D01* X96774000Y-87122000D01* X96774000Y-88646000D01* G36* X96774000Y-88646000D02* G01* X93472000Y-88646000D01* X93472000Y-87122000D01* X96774000Y-87122000D01* X96774000Y-88646000D01* G37* X60315734Y-73365047D02* X57013734Y-73365047D01* X57013734Y-71841047D01* X60315734Y-71841047D01* X60315734Y-73365047D01* G36* X60315734Y-73365047D02* G01* X57013734Y-73365047D01* X57013734Y-71841047D01* X60315734Y-71841047D01* X60315734Y-73365047D01* G37* X96774000Y-68326000D02* X93472000Y-68326000D01* X93472000Y-66802000D01* X96774000Y-66802000D01* X96774000Y-68326000D01* G36* X96774000Y-68326000D02* G01* X93472000Y-68326000D01* X93472000Y-66802000D01* X96774000Y-66802000D01* X96774000Y-68326000D01* G37* X60315734Y-75905047D02* X57013734Y-75905047D01* X57013734Y-74381047D01* X60315734Y-74381047D01* X60315734Y-75905047D01* G36* X60315734Y-75905047D02* G01* X57013734Y-75905047D01* X57013734Y-74381047D01* X60315734Y-74381047D01* X60315734Y-75905047D01* G37* X96774000Y-91186000D02* X93472000Y-91186000D01* X93472000Y-89662000D01* X96774000Y-89662000D01* X96774000Y-91186000D01* G36* X96774000Y-91186000D02* G01* X93472000Y-91186000D01* X93472000Y-89662000D01* X96774000Y-89662000D01* X96774000Y-91186000D01* G37* X49654297Y-95249999D02* X48130297Y-95249999D01* X48130297Y-91947999D01* X49654297Y-91947999D01* X49654297Y-95249999D01* G36* X49654297Y-95249999D02* G01* X48130297Y-95249999D01* X48130297Y-91947999D01* X49654297Y-91947999D01* X49654297Y-95249999D01* G37* X40721244Y-73362544D02* X37419244Y-73362544D01* X37419244Y-71838544D01* X40721244Y-71838544D01* X40721244Y-73362544D01* G36* X40721244Y-73362544D02* G01* X37419244Y-73362544D01* X37419244Y-71838544D01* X40721244Y-71838544D01* X40721244Y-73362544D01* G37* X77216000Y-68326000D02* X73914000Y-68326000D01* X73914000Y-66802000D01* X77216000Y-66802000D01* X77216000Y-68326000D01* G36* X77216000Y-68326000D02* G01* X73914000Y-68326000D01* X73914000Y-66802000D01* X77216000Y-66802000D01* X77216000Y-68326000D01* G37* X96774000Y-65786000D02* X93472000Y-65786000D01* X93472000Y-64262000D01* X96774000Y-64262000D01* X96774000Y-65786000D01* G36* X96774000Y-65786000D02* G01* X93472000Y-65786000D01* X93472000Y-64262000D01* X96774000Y-64262000D01* X96774000Y-65786000D01* G37* X96774000Y-86106000D02* X93472000Y-86106000D01* X93472000Y-84582000D01* X96774000Y-84582000D01* X96774000Y-86106000D01* G36* X96774000Y-86106000D02* G01* X93472000Y-86106000D01* X93472000Y-84582000D01* X96774000Y-84582000D01* X96774000Y-86106000D01* G37* X60317381Y-93728061D02* X57015381Y-93728061D01* X57015381Y-92204061D01* X60317381Y-92204061D01* X60317381Y-93728061D01* G36* X60317381Y-93728061D02* G01* X57015381Y-93728061D01* X57015381Y-92204061D01* X60317381Y-92204061D01* X60317381Y-93728061D01* G37* X77216000Y-50546000D02* X73914000Y-50546000D01* X73914000Y-49022000D01* X77216000Y-49022000D01* X77216000Y-50546000D01* G36* X77216000Y-50546000D02* G01* X73914000Y-50546000D01* X73914000Y-49022000D01* X77216000Y-49022000D01* X77216000Y-50546000D01* G37* X96774000Y-58166000D02* X93472000Y-58166000D01* X93472000Y-56642000D01* X96774000Y-56642000D01* X96774000Y-58166000D01* G36* X96774000Y-58166000D02* G01* X93472000Y-58166000D01* X93472000Y-56642000D01* X96774000Y-56642000D01* X96774000Y-58166000D01* G37* X40717563Y-47970959D02* X37415563Y-47970959D01* X37415563Y-46446959D01* X40717563Y-46446959D01* X40717563Y-47970959D01* G36* X40717563Y-47970959D02* G01* X37415563Y-47970959D01* X37415563Y-46446959D01* X40717563Y-46446959D01* X40717563Y-47970959D01* G37* X77216000Y-60706000D02* X73914000Y-60706000D01* X73914000Y-59182000D01* X77216000Y-59182000D01* X77216000Y-60706000D01* G36* X77216000Y-60706000D02* G01* X73914000Y-60706000D01* X73914000Y-59182000D01* X77216000Y-59182000D01* X77216000Y-60706000D01* G37* X77216000Y-63246000D02* X73914000Y-63246000D01* X73914000Y-61722000D01* X77216000Y-61722000D01* X77216000Y-63246000D01* G36* X77216000Y-63246000D02* G01* X73914000Y-63246000D01* X73914000Y-61722000D01* X77216000Y-61722000D01* X77216000Y-63246000D01* G37* X60275563Y-53050959D02* X56973563Y-53050959D01* X56973563Y-51526959D01* X60275563Y-51526959D01* X60275563Y-53050959D01* G36* X60275563Y-53050959D02* G01* X56973563Y-53050959D01* X56973563Y-51526959D01* X60275563Y-51526959D01* X60275563Y-53050959D01* G37* X77216000Y-91186000D02* X73914000Y-91186000D01* X73914000Y-89662000D01* X77216000Y-89662000D01* X77216000Y-91186000D01* G36* X77216000Y-91186000D02* G01* X73914000Y-91186000D01* X73914000Y-89662000D01* X77216000Y-89662000D01* X77216000Y-91186000D01* G37* X83566000Y-95250000D02* X82042000Y-95250000D01* X82042000Y-91948000D01* X83566000Y-91948000D01* X83566000Y-95250000D01* G36* X83566000Y-95250000D02* G01* X82042000Y-95250000D01* X82042000Y-91948000D01* X83566000Y-91948000D01* X83566000Y-95250000D01* G37* X96774000Y-48006000D02* X93472000Y-48006000D01* X93472000Y-46482000D01* X96774000Y-46482000D01* X96774000Y-48006000D01* G36* X96774000Y-48006000D02* G01* X93472000Y-48006000D01* X93472000Y-46482000D01* X96774000Y-46482000D01* X96774000Y-48006000D01* G37* X40721244Y-80982544D02* X37419244Y-80982544D01* X37419244Y-79458544D01* X40721244Y-79458544D01* X40721244Y-80982544D01* G36* X40721244Y-80982544D02* G01* X37419244Y-80982544D01* X37419244Y-79458544D01* X40721244Y-79458544D01* X40721244Y-80982544D01* G37* X40721244Y-55582544D02* X37419244Y-55582544D01* X37419244Y-54058544D01* X40721244Y-54058544D01* X40721244Y-55582544D01* G36* X40721244Y-55582544D02* G01* X37419244Y-55582544D01* X37419244Y-54058544D01* X40721244Y-54058544D01* X40721244Y-55582544D01* G37* X40717563Y-50510959D02* X37415563Y-50510959D01* X37415563Y-48986959D01* X40717563Y-48986959D01* X40717563Y-50510959D01* G36* X40717563Y-50510959D02* G01* X37415563Y-50510959D01* X37415563Y-48986959D01* X40717563Y-48986959D01* X40717563Y-50510959D01* G37* X40721244Y-86062544D02* X37419244Y-86062544D01* X37419244Y-84538544D01* X40721244Y-84538544D01* X40721244Y-86062544D01* G36* X40721244Y-86062544D02* G01* X37419244Y-86062544D01* X37419244Y-84538544D01* X40721244Y-84538544D01* X40721244Y-86062544D01* G37* X40721244Y-75902544D02* X37419244Y-75902544D01* X37419244Y-74378544D01* X40721244Y-74378544D01* X40721244Y-75902544D01* G36* X40721244Y-75902544D02* G01* X37419244Y-75902544D01* X37419244Y-74378544D01* X40721244Y-74378544D01* X40721244Y-75902544D01* G37* X40721244Y-58122544D02* X37419244Y-58122544D01* X37419244Y-56598544D01* X40721244Y-56598544D01* X40721244Y-58122544D01* G36* X40721244Y-58122544D02* G01* X37419244Y-58122544D01* X37419244Y-56598544D01* X40721244Y-56598544D01* X40721244Y-58122544D01* G37* X40717563Y-45430959D02* X37415563Y-45430959D01* X37415563Y-43906959D01* X40717563Y-43906959D01* X40717563Y-45430959D01* G36* X40717563Y-45430959D02* G01* X37415563Y-45430959D01* X37415563Y-43906959D01* X40717563Y-43906959D01* X40717563Y-45430959D01* G37* X60317381Y-88648061D02* X57015381Y-88648061D01* X57015381Y-87124061D01* X60317381Y-87124061D01* X60317381Y-88648061D01* G36* X60317381Y-88648061D02* G01* X57015381Y-88648061D01* X57015381Y-87124061D01* X60317381Y-87124061D01* X60317381Y-88648061D01* G37* X77216000Y-55626000D02* X73914000Y-55626000D01* X73914000Y-54102000D01* X77216000Y-54102000D01* X77216000Y-55626000D01* G36* X77216000Y-55626000D02* G01* X73914000Y-55626000D01* X73914000Y-54102000D01* X77216000Y-54102000D01* X77216000Y-55626000D01* G37* X86106000Y-95250000D02* X84582000Y-95250000D01* X84582000Y-91948000D01* X86106000Y-91948000D01* X86106000Y-95250000D01* G36* X86106000Y-95250000D02* G01* X84582000Y-95250000D01* X84582000Y-91948000D01* X86106000Y-91948000D01* X86106000Y-95250000D01* G37* X77216000Y-45466000D02* X73914000Y-45466000D01* X73914000Y-43942000D01* X77216000Y-43942000D01* X77216000Y-45466000D01* G36* X77216000Y-45466000D02* G01* X73914000Y-45466000D01* X73914000Y-43942000D01* X77216000Y-43942000D01* X77216000Y-45466000D01* G37* X96774000Y-75946000D02* X93472000Y-75946000D01* X93472000Y-74422000D01* X96774000Y-74422000D01* X96774000Y-75946000D01* G36* X96774000Y-75946000D02* G01* X93472000Y-75946000D01* X93472000Y-74422000D01* X96774000Y-74422000D01* X96774000Y-75946000D01* G37* X40721244Y-91142544D02* X37419244Y-91142544D01* X37419244Y-89618544D01* X40721244Y-89618544D01* X40721244Y-91142544D01* G36* X40721244Y-91142544D02* G01* X37419244Y-91142544D01* X37419244Y-89618544D01* X40721244Y-89618544D01* X40721244Y-91142544D01* G37* X47114297Y-95249999D02* X45590297Y-95249999D01* X45590297Y-91947999D01* X47114297Y-91947999D01* X47114297Y-95249999D01* G36* X47114297Y-95249999D02* G01* X45590297Y-95249999D01* X45590297Y-91947999D01* X47114297Y-91947999D01* X47114297Y-95249999D01* G37* X60275563Y-47970959D02* X56973563Y-47970959D01* X56973563Y-46446959D01* X60275563Y-46446959D01* X60275563Y-47970959D01* G36* X60275563Y-47970959D02* G01* X56973563Y-47970959D01* X56973563Y-46446959D01* X60275563Y-46446959D01* X60275563Y-47970959D01* G37* X96774000Y-45466000D02* X93472000Y-45466000D01* X93472000Y-43942000D01* X96774000Y-43942000D01* X96774000Y-45466000D01* G36* X96774000Y-45466000D02* G01* X93472000Y-45466000D01* X93472000Y-43942000D01* X96774000Y-43942000D01* X96774000Y-45466000D01* G37* X77216000Y-75946000D02* X73914000Y-75946000D01* X73914000Y-74422000D01* X77216000Y-74422000D01* X77216000Y-75946000D01* G36* X77216000Y-75946000D02* G01* X73914000Y-75946000D01* X73914000Y-74422000D01* X77216000Y-74422000D01* X77216000Y-75946000D01* G37* X96774000Y-63246000D02* X93472000Y-63246000D01* X93472000Y-61722000D01* X96774000Y-61722000D01* X96774000Y-63246000D01* G36* X96774000Y-63246000D02* G01* X93472000Y-63246000D01* X93472000Y-61722000D01* X96774000Y-61722000D01* X96774000Y-63246000D01* G37* X60275563Y-50510959D02* X56973563Y-50510959D01* X56973563Y-48986959D01* X60275563Y-48986959D01* X60275563Y-50510959D01* G36* X60275563Y-50510959D02* G01* X56973563Y-50510959D01* X56973563Y-48986959D01* X60275563Y-48986959D01* X60275563Y-50510959D01* G37* X60315734Y-63205047D02* X57013734Y-63205047D01* X57013734Y-61681047D01* X60315734Y-61681047D01* X60315734Y-63205047D01* G36* X60315734Y-63205047D02* G01* X57013734Y-63205047D01* X57013734Y-61681047D01* X60315734Y-61681047D01* X60315734Y-63205047D01* G37* X96774000Y-55626000D02* X93472000Y-55626000D01* X93472000Y-54102000D01* X96774000Y-54102000D01* X96774000Y-55626000D01* G36* X96774000Y-55626000D02* G01* X93472000Y-55626000D01* X93472000Y-54102000D01* X96774000Y-54102000D01* X96774000Y-55626000D01* G37* X60317381Y-91188061D02* X57015381Y-91188061D01* X57015381Y-89664061D01* X60317381Y-89664061D01* X60317381Y-91188061D01* G36* X60317381Y-91188061D02* G01* X57015381Y-91188061D01* X57015381Y-89664061D01* X60317381Y-89664061D01* X60317381Y-91188061D01* G37* X77216000Y-83566000D02* X73914000Y-83566000D01* X73914000Y-82042000D01* X77216000Y-82042000D01* X77216000Y-83566000D01* G36* X77216000Y-83566000D02* G01* X73914000Y-83566000D01* X73914000Y-82042000D01* X77216000Y-82042000D01* X77216000Y-83566000D01* G37* X60275563Y-45430959D02* X56973563Y-45430959D01* X56973563Y-43906959D01* X60275563Y-43906959D01* X60275563Y-45430959D01* G36* X60275563Y-45430959D02* G01* X56973563Y-45430959D01* X56973563Y-43906959D01* X60275563Y-43906959D01* X60275563Y-45430959D01* G37* X96774000Y-93726000D02* X93472000Y-93726000D01* X93472000Y-92202000D01* X96774000Y-92202000D01* X96774000Y-93726000D01* G36* X96774000Y-93726000D02* G01* X93472000Y-93726000D01* X93472000Y-92202000D01* X96774000Y-92202000D01* X96774000Y-93726000D01* G37* X60317381Y-78488061D02* X57015381Y-78488061D01* X57015381Y-76964061D01* X60317381Y-76964061D01* X60317381Y-78488061D01* G36* X60317381Y-78488061D02* G01* X57015381Y-78488061D01* X57015381Y-76964061D01* X60317381Y-76964061D01* X60317381Y-78488061D01* G37* X40721244Y-88602544D02* X37419244Y-88602544D01* X37419244Y-87078544D01* X40721244Y-87078544D01* X40721244Y-88602544D01* G36* X40721244Y-88602544D02* G01* X37419244Y-88602544D01* X37419244Y-87078544D01* X40721244Y-87078544D01* X40721244Y-88602544D01* G37* X52194297Y-95249999D02* X50670297Y-95249999D01* X50670297Y-91947999D01* X52194297Y-91947999D01* X52194297Y-95249999D01* G36* X52194297Y-95249999D02* G01* X50670297Y-95249999D01* X50670297Y-91947999D01* X52194297Y-91947999D01* X52194297Y-95249999D01* G37* X60315734Y-65745047D02* X57013734Y-65745047D01* X57013734Y-64221047D01* X60315734Y-64221047D01* X60315734Y-65745047D01* G36* X60315734Y-65745047D02* G01* X57013734Y-65745047D01* X57013734Y-64221047D01* X60315734Y-64221047D01* X60315734Y-65745047D01* G37* X77216000Y-53086000D02* X73914000Y-53086000D01* X73914000Y-51562000D01* X77216000Y-51562000D01* X77216000Y-53086000D01* G36* X77216000Y-53086000D02* G01* X73914000Y-53086000D01* X73914000Y-51562000D01* X77216000Y-51562000D01* X77216000Y-53086000D01* G37* X96774000Y-53086000D02* X93472000Y-53086000D01* X93472000Y-51562000D01* X96774000Y-51562000D01* X96774000Y-53086000D01* G36* X96774000Y-53086000D02* G01* X93472000Y-53086000D01* X93472000Y-51562000D01* X96774000Y-51562000D01* X96774000Y-53086000D01* G37* X40721244Y-70822544D02* X37419244Y-70822544D01* X37419244Y-69298544D01* X40721244Y-69298544D01* X40721244Y-70822544D01* G36* X40721244Y-70822544D02* G01* X37419244Y-70822544D01* X37419244Y-69298544D01* X40721244Y-69298544D01* X40721244Y-70822544D01* G37* X40721244Y-93682544D02* X37419244Y-93682544D01* X37419244Y-92158544D01* X40721244Y-92158544D01* X40721244Y-93682544D01* G36* X40721244Y-93682544D02* G01* X37419244Y-93682544D01* X37419244Y-92158544D01* X40721244Y-92158544D01* X40721244Y-93682544D01* G37* X96774000Y-83566000D02* X93472000Y-83566000D01* X93472000Y-82042000D01* X96774000Y-82042000D01* X96774000Y-83566000D01* G36* X96774000Y-83566000D02* G01* X93472000Y-83566000D01* X93472000Y-82042000D01* X96774000Y-82042000D01* X96774000Y-83566000D01* G37* X77216000Y-58166000D02* X73914000Y-58166000D01* X73914000Y-56642000D01* X77216000Y-56642000D01* X77216000Y-58166000D01* G36* X77216000Y-58166000D02* G01* X73914000Y-58166000D01* X73914000Y-56642000D01* X77216000Y-56642000D01* X77216000Y-58166000D01* G37* X77216000Y-48006000D02* X73914000Y-48006000D01* X73914000Y-46482000D01* X77216000Y-46482000D01* X77216000Y-48006000D01* G36* X77216000Y-48006000D02* G01* X73914000Y-48006000D01* X73914000Y-46482000D01* X77216000Y-46482000D01* X77216000Y-48006000D01* G37* X60315734Y-60665047D02* X57013734Y-60665047D01* X57013734Y-59141047D01* X60315734Y-59141047D01* X60315734Y-60665047D01* G36* X60315734Y-60665047D02* G01* X57013734Y-60665047D01* X57013734Y-59141047D01* X60315734Y-59141047D01* X60315734Y-60665047D01* G37* X96774000Y-78486000D02* X93472000Y-78486000D01* X93472000Y-76962000D01* X96774000Y-76962000D01* X96774000Y-78486000D01* G36* X96774000Y-78486000D02* G01* X93472000Y-78486000D01* X93472000Y-76962000D01* X96774000Y-76962000D01* X96774000Y-78486000D01* G37* X60315734Y-68285047D02* X57013734Y-68285047D01* X57013734Y-66761047D01* X60315734Y-66761047D01* X60315734Y-68285047D01* G36* X60315734Y-68285047D02* G01* X57013734Y-68285047D01* X57013734Y-66761047D01* X60315734Y-66761047D01* X60315734Y-68285047D01* G37* X60317381Y-81028061D02* X57015381Y-81028061D01* X57015381Y-79504061D01* X60317381Y-79504061D01* X60317381Y-81028061D01* G36* X60317381Y-81028061D02* G01* X57015381Y-81028061D01* X57015381Y-79504061D01* X60317381Y-79504061D01* X60317381Y-81028061D01* G37* X77216000Y-86106000D02* X73914000Y-86106000D01* X73914000Y-84582000D01* X77216000Y-84582000D01* X77216000Y-86106000D01* G36* X77216000Y-86106000D02* G01* X73914000Y-86106000D01* X73914000Y-84582000D01* X77216000Y-84582000D01* X77216000Y-86106000D01* G37* X77216000Y-65786000D02* X73914000Y-65786000D01* X73914000Y-64262000D01* X77216000Y-64262000D01* X77216000Y-65786000D01* G36* X77216000Y-65786000D02* G01* X73914000Y-65786000D01* X73914000Y-64262000D01* X77216000Y-64262000D01* X77216000Y-65786000D01* G37* X40721244Y-65742544D02* X37419244Y-65742544D01* X37419244Y-64218544D01* X40721244Y-64218544D01* X40721244Y-65742544D01* G36* X40721244Y-65742544D02* G01* X37419244Y-65742544D01* X37419244Y-64218544D01* X40721244Y-64218544D01* X40721244Y-65742544D01* G37* X96774000Y-60706000D02* X93472000Y-60706000D01* X93472000Y-59182000D01* X96774000Y-59182000D01* X96774000Y-60706000D01* G36* X96774000Y-60706000D02* G01* X93472000Y-60706000D01* X93472000Y-59182000D01* X96774000Y-59182000D01* X96774000Y-60706000D01* G37* X77216000Y-73406000D02* X73914000Y-73406000D01* X73914000Y-71882000D01* X77216000Y-71882000D01* X77216000Y-73406000D01* G36* X77216000Y-73406000D02* G01* X73914000Y-73406000D01* X73914000Y-71882000D01* X77216000Y-71882000D01* X77216000Y-73406000D01* G37* X77216000Y-78486000D02* X73914000Y-78486000D01* X73914000Y-76962000D01* X77216000Y-76962000D01* X77216000Y-78486000D01* G36* X77216000Y-78486000D02* G01* X73914000Y-78486000D01* X73914000Y-76962000D01* X77216000Y-76962000D01* X77216000Y-78486000D01* G37* X40717563Y-53050959D02* X37415563Y-53050959D01* X37415563Y-51526959D01* X40717563Y-51526959D01* X40717563Y-53050959D01* G36* X40717563Y-53050959D02* G01* X37415563Y-53050959D01* X37415563Y-51526959D01* X40717563Y-51526959D01* X40717563Y-53050959D01* G37* X60315734Y-55585047D02* X57013734Y-55585047D01* X57013734Y-54061047D01* X60315734Y-54061047D01* X60315734Y-55585047D01* G36* X60315734Y-55585047D02* G01* X57013734Y-55585047D01* X57013734Y-54061047D01* X60315734Y-54061047D01* X60315734Y-55585047D01* G37* X40721244Y-83522544D02* X37419244Y-83522544D01* X37419244Y-81998544D01* X40721244Y-81998544D01* X40721244Y-83522544D01* G36* X40721244Y-83522544D02* G01* X37419244Y-83522544D01* X37419244Y-81998544D01* X40721244Y-81998544D01* X40721244Y-83522544D01* G37* X96774000Y-73406000D02* X93472000Y-73406000D01* X93472000Y-71882000D01* X96774000Y-71882000D01* X96774000Y-73406000D01* G36* X96774000Y-73406000D02* G01* X93472000Y-73406000D01* X93472000Y-71882000D01* X96774000Y-71882000D01* X96774000Y-73406000D01* G37* X77216000Y-70866000D02* X73914000Y-70866000D01* X73914000Y-69342000D01* X77216000Y-69342000D01* X77216000Y-70866000D01* G36* X77216000Y-70866000D02* G01* X73914000Y-70866000D01* X73914000Y-69342000D01* X77216000Y-69342000D01* X77216000Y-70866000D01* G37* X88646000Y-95250000D02* X87122000Y-95250000D01* X87122000Y-91948000D01* X88646000Y-91948000D01* X88646000Y-95250000D01* G36* X88646000Y-95250000D02* G01* X87122000Y-95250000D01* X87122000Y-91948000D01* X88646000Y-91948000D01* X88646000Y-95250000D01* G37* X40721244Y-63202544D02* X37419244Y-63202544D01* X37419244Y-61678544D01* X40721244Y-61678544D01* X40721244Y-63202544D01* G36* X40721244Y-63202544D02* G01* X37419244Y-63202544D01* X37419244Y-61678544D01* X40721244Y-61678544D01* X40721244Y-63202544D01* G37* X77216000Y-93726000D02* X73914000Y-93726000D01* X73914000Y-92202000D01* X77216000Y-92202000D01* X77216000Y-93726000D01* G36* X77216000Y-93726000D02* G01* X73914000Y-93726000D01* X73914000Y-92202000D01* X77216000Y-92202000D01* X77216000Y-93726000D01* G37* X60315734Y-58125047D02* X57013734Y-58125047D01* X57013734Y-56601047D01* X60315734Y-56601047D01* X60315734Y-58125047D01* G36* X60315734Y-58125047D02* G01* X57013734Y-58125047D01* X57013734Y-56601047D01* X60315734Y-56601047D01* X60315734Y-58125047D01* G37* X60317381Y-86108061D02* X57015381Y-86108061D01* X57015381Y-84584061D01* X60317381Y-84584061D01* X60317381Y-86108061D01* G36* X60317381Y-86108061D02* G01* X57015381Y-86108061D01* X57015381Y-84584061D01* X60317381Y-84584061D01* X60317381Y-86108061D01* G37* D11* %TO.C,C2*% X69041691Y-74877665D03* X72166691Y-74877665D03* %TD*% D12* %TO.C,U4*% X64753070Y-82571110D03* X64753070Y-83841110D03* X64753070Y-85111110D03* X64753070Y-86381110D03* X69703070Y-86381110D03* X69703070Y-85111110D03* X69703070Y-83841110D03* X69703070Y-82571110D03* %TD*% D13* %TO.C,C1*% X65572536Y-74929999D03* X62447536Y-74929999D03* %TD*% M02* ================================================ FILE: pcb/v1.0/Gerber/DeskHop-F_Silkscreen.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-01-21T01:35:17+01:00*% %TF.ProjectId,DeskHop,4465736b-486f-4702-9e6b-696361645f70,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Legend,Top*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-01-21 01:35:17* %MOMM*% %LPD*% G01* G04 APERTURE LIST* %ADD10C,0.000000*% %ADD11C,0.120000*% %ADD12C,0.466400*% %ADD13C,0.150000*% G04 APERTURE END LIST* D10* G36* X58798165Y-110962168D02* G01* X58603088Y-110962168D01* X58603088Y-110543306D01* X58798165Y-110543306D01* X58798165Y-110962168D01* G37* G36* X58603630Y-110588683D02* G01* X58603617Y-110588683D01* X58595362Y-110859483D01* X58563375Y-110859196D01* X58525560Y-110860214D01* X58482716Y-110862766D01* X58435645Y-110867081D01* X58385147Y-110873387D01* X58332022Y-110881913D01* X58277071Y-110892888D01* X58221094Y-110906541D01* X58164892Y-110923101D01* X58109265Y-110942796D01* X58055014Y-110965855D01* X58002938Y-110992508D01* X57977967Y-111007253D01* X57953840Y-111022982D01* X57930657Y-111039724D01* X57908519Y-111057507D01* X57887525Y-111076360D01* X57867775Y-111096311D01* X57849370Y-111117390D01* X57832409Y-111139624D01* X57813791Y-111168348D01* X57797659Y-111198636D01* X57784012Y-111230476D01* X57772851Y-111263862D01* X57764176Y-111298784D01* X57757987Y-111335233D01* X57754283Y-111373200D01* X57753066Y-111412676D01* X57754334Y-111453652D01* X57758088Y-111496119D01* X57764329Y-111540069D01* X57773055Y-111585493D01* X57784267Y-111632380D01* X57797965Y-111680724D01* X57814149Y-111730514D01* X57832819Y-111781741D01* X57849110Y-111820656D01* X57867573Y-111858229D01* X57888127Y-111894500D01* X57910689Y-111929509D01* X57935177Y-111963293D01* X57961509Y-111995892D01* X58019376Y-112057693D01* X58083632Y-112115223D01* X58153618Y-112168796D01* X58228678Y-112218724D01* X58308153Y-112265320D01* X58391386Y-112308897D01* X58477719Y-112349767D01* X58566493Y-112388243D01* X58657052Y-112424638D01* X58840891Y-112492435D01* X59023974Y-112555661D01* X59187753Y-112612183D01* X59266552Y-112640444D01* X59342782Y-112669096D01* X59416060Y-112698430D01* X59486004Y-112728738D01* X59552231Y-112760313D01* X59614358Y-112793447D01* X59643765Y-112810689D01* X59672004Y-112828431D01* X59699027Y-112846709D01* X59724786Y-112865559D01* X59749234Y-112885017D01* X59772322Y-112905121D01* X59794003Y-112925907D01* X59814229Y-112947412D01* X59832952Y-112969671D01* X59850124Y-112992721D01* X59865699Y-113016600D01* X59879627Y-113041343D01* X59891861Y-113066987D01* X59902353Y-113093568D01* X59911056Y-113121124D01* X59917921Y-113149690D01* X59924621Y-113194423D01* X59926498Y-113239887D01* X59923498Y-113286177D01* X59915567Y-113333386D01* X59902650Y-113381606D01* X59884694Y-113430933D01* X59861643Y-113481458D01* X59833445Y-113533276D01* X59800044Y-113586480D01* X59761387Y-113641164D01* X59717418Y-113697420D01* X59668085Y-113755342D01* X59613333Y-113815025D01* X59553108Y-113876560D01* X59487355Y-113940042D01* X59416020Y-114005564D01* X59235045Y-113803991D01* X59271218Y-113771101D01* X59305325Y-113739273D01* X59337424Y-113708494D01* X59367573Y-113678746D01* X59395829Y-113650017D01* X59422249Y-113622289D01* X59446890Y-113595549D01* X59469809Y-113569781D01* X59491065Y-113544971D01* X59510715Y-113521102D01* X59528814Y-113498160D01* X59545422Y-113476130D01* X59560596Y-113454996D01* X59574392Y-113434744D01* X59586868Y-113415358D01* X59598081Y-113396824D01* X59608089Y-113379126D01* X59616950Y-113362249D01* X59624719Y-113346178D01* X59631455Y-113330898D01* X59637215Y-113316394D01* X59642057Y-113302651D01* X59646037Y-113289653D01* X59649213Y-113277385D01* X59651642Y-113265833D01* X59653383Y-113254982D01* X59654491Y-113244815D01* X59655024Y-113235319D01* X59654596Y-113218275D01* X59652557Y-113203731D01* X59648621Y-113189025D01* X59642895Y-113174543D01* X59635441Y-113160279D01* X59626317Y-113146226D01* X59603303Y-113118728D01* X59574333Y-113091998D01* X59539884Y-113065981D01* X59500437Y-113040627D01* X59456471Y-113015882D01* X59408464Y-112991694D01* X59356897Y-112968011D01* X59302248Y-112944781D01* X59185622Y-112899467D01* X59062420Y-112855334D01* X58936476Y-112811963D01* X58739717Y-112743829D01* X58638965Y-112707231D01* X58537716Y-112668397D01* X58436782Y-112626917D01* X58336977Y-112582381D01* X58239114Y-112534379D01* X58144006Y-112482498D01* X58052467Y-112426330D01* X58008289Y-112396510D01* X57965309Y-112365464D01* X57923627Y-112333140D01* X57883346Y-112299488D01* X57844567Y-112264456D01* X57807391Y-112227993D01* X57771921Y-112190047D01* X57738258Y-112150567D01* X57706503Y-112109503D01* X57676759Y-112066801D01* X57649127Y-112022412D01* X57623708Y-111976284D01* X57600604Y-111928366D01* X57579918Y-111878605D01* X57555346Y-111810565D01* X57534312Y-111744074D01* X57516817Y-111679144D01* X57502860Y-111615787D01* X57492443Y-111554016D01* X57485566Y-111493842D01* X57482229Y-111435277D01* X57482433Y-111378334D01* X57486179Y-111323025D01* X57493468Y-111269362D01* X57504299Y-111217356D01* X57518673Y-111167021D01* X57536591Y-111118367D01* X57558054Y-111071408D01* X57583061Y-111026155D01* X57611615Y-110982620D01* X57640028Y-110945385D01* X57670484Y-110910564D01* X57702794Y-110878076D01* X57736771Y-110847839D01* X57772228Y-110819775D01* X57808977Y-110793802D01* X57846831Y-110769840D01* X57885601Y-110747807D01* X57925102Y-110727625D01* X57965144Y-110709211D01* X58005540Y-110692486D01* X58046103Y-110677369D01* X58126981Y-110651638D01* X58206276Y-110631371D01* X58282487Y-110615926D01* X58354116Y-110604658D01* X58419661Y-110596922D01* X58477623Y-110592075D01* X58564795Y-110588468D01* X58603630Y-110588683D01* G37* D11* X67310000Y-48738426D02* X67309441Y-50058426D01* X67309238Y-50538426D02* X67308679Y-51858426D01* X67308476Y-52338426D02* X67307918Y-53658426D01* X67307715Y-54138426D02* X67307156Y-55458425D01* X67306953Y-55938425D02* X67306394Y-57258425D01* X67306191Y-57738425D02* X67305632Y-59058425D01* X67305429Y-59538425D02* X67304870Y-60858425D01* X67304667Y-61338425D02* X67304109Y-62658425D01* X67303905Y-63138425D02* X67303347Y-64458425D01* X67303144Y-64938425D02* X67302585Y-66258424D01* X67302382Y-66738424D02* X67301823Y-68058424D01* X67301620Y-68538424D02* X67301061Y-69858424D01* X67300858Y-70338424D02* X67300299Y-71658424D01* X67300096Y-72138424D02* X67299538Y-73458424D01* X67299334Y-73938424D02* X67298776Y-75258424D01* X67298573Y-75738424D02* X67298014Y-77058423D01* X67297811Y-77538423D02* X67297252Y-78858423D01* X67297049Y-79338423D02* X67296490Y-80658423D01* X67296287Y-81138423D02* X67295728Y-82458423D01* X67295525Y-82938423D02* X67294967Y-84258423D01* X67294763Y-84738423D02* X67294205Y-86058423D01* X67294002Y-86538423D02* X67293443Y-87858422D01* X67293240Y-88338422D02* X67292681Y-89658422D01* X67292478Y-90138422D02* X67291919Y-91458422D01* X67291716Y-91938422D02* X67291157Y-93258422D01* X67290954Y-93738422D02* X67290396Y-95058422D01* X67290192Y-95538422D02* X67289634Y-96858422D01* X67289431Y-97338422D02* X67288872Y-98658422D01* X67288669Y-99138421D02* X67288110Y-100458421D01* X67287907Y-100938421D02* X67287348Y-102258421D01* X67287145Y-102738421D02* X67286586Y-104058421D01* X67286383Y-104538421D02* X67285825Y-105858421D01* X67285621Y-106338421D02* X67285063Y-107658421D01* X67284860Y-108138421D02* X67284301Y-109458421D01* X67284098Y-109938421D02* X67283539Y-111258420D01* X67283336Y-111738420D02* X67282777Y-113058420D01* X67282574Y-113538420D02* X67282015Y-114858420D01* X67281812Y-115338420D02* X67281783Y-115407659D01* D10* G36* X60221226Y-111247336D02* G01* X58797199Y-111247336D01* X58791178Y-111185136D01* X58786094Y-111122011D01* X58781905Y-111058001D01* X58778571Y-110993144D01* X58776050Y-110927482D01* X58774300Y-110861053D01* X58772950Y-110726054D01* X58773281Y-110658120D01* X58774300Y-110590897D01* X58776050Y-110524421D01* X58778571Y-110458727D01* X58781905Y-110393853D01* X58786094Y-110329834D01* X58791178Y-110266707D01* X58797199Y-110204507D01* X60221226Y-110204507D01* X60221226Y-111247336D01* G37* G36* X75409953Y-109711596D02* G01* X75414084Y-109711996D01* X75418717Y-109712651D01* X75423798Y-109713553D01* X75429272Y-109714694D01* X75435082Y-109716066D01* X75447491Y-109719465D01* X75453979Y-109721476D01* X75460582Y-109723683D01* X75467245Y-109726077D01* X75473912Y-109728651D01* X75480528Y-109731395D01* X75487037Y-109734301D01* X75493385Y-109737361D01* X75499515Y-109740565D01* X75511406Y-109747709D01* X75523025Y-109755970D01* X75534303Y-109765237D01* X75545172Y-109775399D01* X75555563Y-109786346D01* X75565408Y-109797967D01* X75574640Y-109810150D01* X75583189Y-109822785D01* X75590988Y-109835761D01* X75597969Y-109848967D01* X75604062Y-109862293D01* X75609201Y-109875627D01* X75613317Y-109888859D01* X75616341Y-109901877D01* X75618205Y-109914572D01* X75618681Y-109920763D01* X75618842Y-109926832D01* X75618681Y-109932900D01* X75618205Y-109939091D01* X75617422Y-109945389D01* X75616341Y-109951781D01* X75614969Y-109958251D01* X75613317Y-109964786D01* X75611391Y-109971371D01* X75609201Y-109977991D01* X75604062Y-109991282D01* X75597969Y-110004543D01* X75590988Y-110017659D01* X75583189Y-110030515D01* X75574640Y-110042996D01* X75565408Y-110054987D01* X75555563Y-110066372D01* X75545172Y-110077037D01* X75539793Y-110082063D01* X75534303Y-110086866D01* X75528711Y-110091431D01* X75523025Y-110095744D01* X75517254Y-110099791D01* X75511406Y-110103557D01* X75505490Y-110107027D01* X75499515Y-110110189D01* X75493385Y-110113426D01* X75487038Y-110116578D01* X75480528Y-110119627D01* X75473912Y-110122558D01* X75467245Y-110125352D01* X75460582Y-110127992D01* X75453979Y-110130462D01* X75447491Y-110132744D01* X75441174Y-110134822D01* X75435082Y-110136678D01* X75429272Y-110138295D01* X75423799Y-110139657D01* X75418717Y-110140745D01* X75414084Y-110141544D01* X75409954Y-110142035D01* X75406382Y-110142203D01* X75402810Y-110142035D01* X75398679Y-110141544D01* X75394046Y-110140745D01* X75388965Y-110139657D01* X75383491Y-110138295D01* X75377681Y-110136678D01* X75365272Y-110132744D01* X75352181Y-110127992D01* X75338851Y-110122558D01* X75332235Y-110119627D01* X75325725Y-110116578D01* X75319378Y-110113426D01* X75313248Y-110110189D01* X75301356Y-110103589D01* X75289737Y-110095864D01* X75278459Y-110087115D01* X75267591Y-110077446D01* X75257200Y-110066958D01* X75247354Y-110055754D01* X75238123Y-110043936D01* X75229573Y-110031607D01* X75221774Y-110018868D01* X75214794Y-110005823D01* X75208700Y-109992572D01* X75203562Y-109979220D01* X75199446Y-109965867D01* X75196422Y-109952616D01* X75194558Y-109939571D01* X75194081Y-109933157D01* X75193921Y-109926832D01* X75194081Y-109920507D01* X75194558Y-109914093D01* X75195341Y-109907600D01* X75196422Y-109901042D01* X75197793Y-109894430D01* X75199446Y-109887778D01* X75201372Y-109881097D01* X75203562Y-109874399D01* X75208700Y-109861003D01* X75214794Y-109847688D01* X75221775Y-109834552D01* X75229574Y-109821693D01* X75238123Y-109809210D01* X75247355Y-109797199D01* X75257200Y-109785760D01* X75267591Y-109774990D01* X75278460Y-109764988D01* X75289737Y-109755851D01* X75295509Y-109751637D01* X75301356Y-109747677D01* X75307272Y-109743982D01* X75313248Y-109740565D01* X75319858Y-109737361D01* X75326561Y-109734301D01* X75333316Y-109731395D01* X75340079Y-109728651D01* X75346808Y-109726077D01* X75353460Y-109723683D01* X75359993Y-109721476D01* X75366364Y-109719465D01* X75372530Y-109717659D01* X75378449Y-109716066D01* X75384078Y-109714694D01* X75389374Y-109713553D01* X75394295Y-109712651D01* X75398799Y-109711996D01* X75402842Y-109711596D01* X75406382Y-109711461D01* X75409953Y-109711596D01* G37* G36* X60221226Y-112444972D02* G01* X59941893Y-112444972D01* X59875793Y-112443793D01* X59812158Y-112440281D01* X59750944Y-112434480D01* X59692105Y-112426429D01* X59635597Y-112416172D01* X59581376Y-112403748D01* X59529396Y-112389201D01* X59479613Y-112372571D01* X59431983Y-112353900D01* X59386459Y-112333229D01* X59342999Y-112310600D01* X59301557Y-112286055D01* X59262088Y-112259634D01* X59224548Y-112231380D01* X59188891Y-112201334D01* X59155075Y-112169538D01* X59123052Y-112136032D01* X59092780Y-112100860D01* X59064213Y-112064061D01* X59037306Y-112025678D01* X59012016Y-111985751D01* X58988296Y-111944324D01* X58945392Y-111857131D01* X58908235Y-111764431D01* X58876469Y-111666556D01* X58849737Y-111563837D01* X58827679Y-111456608D01* X60221226Y-111456608D01* X60221226Y-112444972D01* G37* G36* X62227485Y-109008671D02* G01* X62318639Y-109015309D01* X62408466Y-109026241D01* X62496854Y-109041358D01* X62583689Y-109060552D01* X62668859Y-109083717D01* X62752251Y-109110743D01* X62833753Y-109141524D01* X62913252Y-109175950D01* X62990635Y-109213914D01* X63065790Y-109255309D01* X63138604Y-109300027D01* X63208965Y-109347958D01* X63276759Y-109398996D01* X63341873Y-109453033D01* X63404197Y-109509961D01* X63463616Y-109569672D01* X63520018Y-109632058D01* X63573290Y-109697010D01* X63623320Y-109764422D01* X63669995Y-109834185D01* X63713203Y-109906192D01* X63752830Y-109980334D01* X63788764Y-110056504D01* X63820893Y-110134593D01* X63849103Y-110214495D01* X63873282Y-110296100D01* X63893318Y-110379301D01* X63909098Y-110463991D01* X63920508Y-110550060D01* X63927437Y-110637402D01* X63929772Y-110725908D01* X63927437Y-110814365D01* X63920508Y-110901660D01* X63909097Y-110987688D01* X63893318Y-111072338D01* X63873281Y-111155504D01* X63849102Y-111237078D01* X63820891Y-111316950D01* X63788762Y-111395014D01* X63752827Y-111471161D01* X63713200Y-111545283D01* X63669992Y-111617273D01* X63623316Y-111687021D01* X63573285Y-111754420D01* X63520012Y-111819362D01* X63463610Y-111881739D01* X63404190Y-111941442D01* X63341866Y-111998365D01* X63276751Y-112052398D01* X63208956Y-112103433D01* X63138595Y-112151364D01* X63065781Y-112196080D01* X62990625Y-112237476D01* X62913241Y-112275441D01* X62833742Y-112309869D01* X62752239Y-112340652D01* X62668847Y-112367680D01* X62583676Y-112390847D01* X62496841Y-112410044D01* X62408453Y-112425163D01* X62318626Y-112436096D01* X62227471Y-112442735D01* X62135103Y-112444972D01* X62135106Y-112444976D01* X62135110Y-112444979D01* X62135113Y-112444982D01* X62135116Y-112444986D01* X60430684Y-112444986D01* X60430684Y-109006435D01* X62135116Y-109006435D01* X62227485Y-109008671D01* G37* G36* X71971429Y-111002828D02* G01* X71973288Y-111003199D01* X71975000Y-111003686D01* X71981325Y-111003846D01* X71987740Y-111004323D01* X71994233Y-111005106D01* X72000791Y-111006187D01* X72007402Y-111007558D01* X72014055Y-111009211D01* X72020736Y-111011137D01* X72027434Y-111013327D01* X72040830Y-111018465D01* X72054145Y-111024559D01* X72067281Y-111031540D01* X72080139Y-111039339D01* X72092623Y-111047888D01* X72104634Y-111057120D01* X72116073Y-111066965D01* X72126843Y-111077356D01* X72136845Y-111088225D01* X72145982Y-111099502D01* X72150195Y-111105274D01* X72154155Y-111111121D01* X72157850Y-111117037D01* X72161267Y-111123013D01* X72166696Y-111135490D01* X72171954Y-111148616D01* X72176871Y-111161946D01* X72181276Y-111175037D01* X72185000Y-111187446D01* X72186552Y-111193256D01* X72187870Y-111198730D01* X72188933Y-111203811D01* X72189718Y-111208444D01* X72190204Y-111212575D01* X72190371Y-111216147D01* X72190236Y-111219719D01* X72189837Y-111223849D01* X72189182Y-111228482D01* X72188280Y-111233564D01* X72187138Y-111239037D01* X72185767Y-111244847D01* X72182368Y-111257256D01* X72180357Y-111263744D01* X72178150Y-111270347D01* X72175755Y-111277010D01* X72173182Y-111283677D01* X72170438Y-111290293D01* X72167531Y-111296802D01* X72164472Y-111303150D01* X72161267Y-111309280D01* X72154155Y-111321172D01* X72145982Y-111332791D01* X72136845Y-111344069D01* X72126842Y-111354937D01* X72116073Y-111365328D01* X72104633Y-111375174D01* X72092623Y-111384405D01* X72080139Y-111392954D01* X72067281Y-111400753D01* X72054145Y-111407734D01* X72040830Y-111413828D01* X72027434Y-111418966D01* X72014055Y-111423082D01* X72000791Y-111426106D01* X71987740Y-111427970D01* X71981325Y-111428446D01* X71975000Y-111428607D01* X71971429Y-111428439D01* X71967298Y-111427948D01* X71962665Y-111427149D01* X71957584Y-111426060D01* X71952110Y-111424699D01* X71946300Y-111423082D01* X71933891Y-111419148D01* X71920800Y-111414396D01* X71907470Y-111408962D01* X71900854Y-111406031D01* X71894345Y-111402982D01* X71887997Y-111399830D01* X71881867Y-111396592D01* X71869976Y-111389993D01* X71858357Y-111382268D01* X71847079Y-111373519D01* X71836210Y-111363850D01* X71825819Y-111353362D01* X71815974Y-111342158D01* X71806742Y-111330340D01* X71798193Y-111318011D01* X71790394Y-111305272D01* X71783413Y-111292226D01* X71777320Y-111278976D01* X71772181Y-111265623D01* X71768066Y-111252271D01* X71765041Y-111239020D01* X71763177Y-111225975D01* X71762701Y-111219561D01* X71762540Y-111213236D01* X71762701Y-111206911D01* X71763177Y-111200497D01* X71763960Y-111194004D01* X71765041Y-111187446D01* X71766413Y-111180835D01* X71768066Y-111174182D01* X71769991Y-111167501D01* X71772181Y-111160803D01* X71777320Y-111147407D01* X71783413Y-111134092D01* X71790394Y-111120956D01* X71798193Y-111108097D01* X71806742Y-111095614D01* X71815974Y-111083603D01* X71825819Y-111072164D01* X71836210Y-111061394D01* X71847079Y-111051392D01* X71858357Y-111042255D01* X71864128Y-111038042D01* X71869976Y-111034081D01* X71875892Y-111030387D01* X71881867Y-111026970D01* X71894345Y-111021552D01* X71900854Y-111018918D01* X71907470Y-111016374D01* X71914137Y-111013949D01* X71920800Y-111011673D01* X71927403Y-111009576D01* X71933891Y-111007688D01* X71940208Y-111006039D01* X71946300Y-111004658D01* X71952110Y-111003576D01* X71957584Y-111002822D01* X71962665Y-111002426D01* X71967298Y-111002418D01* X71971429Y-111002828D01* G37* D11* X66937740Y-48748460D02* X65680287Y-48372564D01* X65269783Y-48124498D02* X64352267Y-47186069D01* X64113514Y-46770079D02* X63766049Y-45504476D01* X63758926Y-45024893D02* X64068656Y-43749529D01* X64294950Y-43326633D02* X65184194Y-42361372D01* X65587150Y-42101225D02* X66832886Y-41688153D01* D10* G36* X60221226Y-109995209D02* G01* X58827679Y-109995209D01* X58849712Y-109887864D01* X58876427Y-109785050D01* X58908180Y-109687098D01* X58945328Y-109594337D01* X58988229Y-109507099D01* X59011948Y-109465654D01* X59037239Y-109425713D01* X59064147Y-109387318D01* X59092715Y-109350510D01* X59122990Y-109315331D01* X59155015Y-109281821D01* X59188835Y-109250022D01* X59224495Y-109219976D01* X59262039Y-109191722D01* X59301513Y-109165304D01* X59342959Y-109140762D01* X59386424Y-109118137D01* X59431952Y-109097471D01* X59479587Y-109078805D01* X59529375Y-109062181D01* X59581359Y-109047639D01* X59635584Y-109035221D01* X59692095Y-109024968D01* X59750937Y-109016922D01* X59812154Y-109011123D01* X59875791Y-109007614D01* X59941893Y-109006435D01* X60221226Y-109006435D01* X60221226Y-109995209D01* G37* G36* X74396618Y-106991515D02* G01* X74402288Y-106992041D01* X74407276Y-106993018D01* X74411632Y-106994453D01* X74415406Y-106996352D01* X74418648Y-106998720D01* X74421408Y-107001564D01* X74423737Y-107004888D01* X74425684Y-107008700D01* X74427299Y-107013005D01* X74428634Y-107017809D01* X74429737Y-107023117D01* X74430658Y-107028936D01* X74431449Y-107035271D01* X74434303Y-107065893D01* X74437784Y-107092363D01* X74440601Y-107121310D01* X74444307Y-107185083D01* X74445558Y-107254109D01* X74444489Y-107325284D01* X74441237Y-107395503D01* X74435939Y-107461664D01* X74428732Y-107520662D01* X74424454Y-107546506D01* X74419750Y-107569395D01* X74414104Y-107593448D01* X74407046Y-107618576D01* X74398666Y-107644625D01* X74389055Y-107671441D01* X74378301Y-107698871D01* X74366493Y-107726762D01* X74353723Y-107754960D01* X74340078Y-107783311D01* X74325649Y-107811662D01* X74310525Y-107839859D01* X74294795Y-107867750D01* X74278550Y-107895180D01* X74261878Y-107921996D01* X74244870Y-107948045D01* X74227614Y-107973173D01* X74210200Y-107997226D01* X74193699Y-108017684D01* X74173138Y-108041383D01* X74149371Y-108067468D01* X74123252Y-108095089D01* X74095631Y-108123392D01* X74067362Y-108151524D01* X74039299Y-108178633D01* X74012292Y-108203866D01* X73972019Y-108239667D01* X73932125Y-108275950D01* X73854448Y-108348886D01* X73781204Y-108420527D01* X73714339Y-108488723D01* X73655795Y-108551325D01* X73630251Y-108579857D01* X73607517Y-108606185D01* X73587836Y-108630041D01* X73571450Y-108651155D01* X73558602Y-108669259D01* X73549536Y-108684084D01* X73542419Y-108697383D01* X73535297Y-108712029D01* X73528235Y-108727800D01* X73521296Y-108744475D01* X73514545Y-108761833D01* X73508046Y-108779651D01* X73496057Y-108815781D01* X73490696Y-108833650D01* X73485842Y-108851092D01* X73481560Y-108867887D01* X73477913Y-108883812D01* X73474965Y-108898645D01* X73472780Y-108912165D01* X73471422Y-108924151D01* X73470955Y-108934380D01* X73471948Y-108938479D01* X73476037Y-108942065D01* X73500150Y-108947841D01* X73556596Y-108951979D01* X73658677Y-108954753D01* X74052947Y-108957300D01* X74789374Y-108957664D01* X75469002Y-108958391D01* X75704671Y-108959505D01* X75882599Y-108961302D01* X76011550Y-108963916D01* X76060398Y-108965573D01* X76100289Y-108967486D01* X76132319Y-108969672D01* X76157582Y-108972147D01* X76177176Y-108974930D01* X76192194Y-108978036D01* X76236309Y-108989888D01* X76279081Y-109004634D01* X76320394Y-109022168D01* X76360134Y-109042384D01* X76398187Y-109065175D01* X76434435Y-109090434D01* X76468766Y-109118055D01* X76501062Y-109147932D01* X76531210Y-109179957D01* X76559094Y-109214025D01* X76584600Y-109250028D01* X76607611Y-109287859D01* X76628013Y-109327414D01* X76645691Y-109368584D01* X76660529Y-109411263D01* X76672413Y-109455345D01* X76682918Y-109610643D01* X76690421Y-109939747D01* X76696424Y-110887997D01* X76690421Y-111837339D01* X76682918Y-112167807D01* X76672413Y-112325015D01* X76661557Y-112366122D01* X76647640Y-112406393D01* X76630807Y-112445675D01* X76611203Y-112483815D01* X76588973Y-112520658D01* X76564261Y-112556052D01* X76537214Y-112589843D01* X76507974Y-112621878D01* X76476689Y-112652002D01* X76443502Y-112680063D01* X76408558Y-112705908D01* X76372003Y-112729381D01* X76333982Y-112750331D01* X76294639Y-112768604D01* X76254119Y-112784045D01* X76212567Y-112796503D01* X76171480Y-112804188D01* X76091239Y-112809963D01* X75704699Y-112816876D01* X73267226Y-112819786D01* X72246516Y-112820719D01* X71838534Y-112820886D01* X71491735Y-112820696D01* X71200819Y-112820028D01* X70960488Y-112818763D01* X70765441Y-112816782D01* X70683243Y-112815486D01* X70610379Y-112813966D01* X70546187Y-112812207D01* X70490004Y-112810194D01* X70441168Y-112807913D01* X70399016Y-112805348D01* X70362886Y-112802485D01* X70332115Y-112799308D01* X70306042Y-112795803D01* X70284003Y-112791955D01* X70265337Y-112787749D01* X70249380Y-112783170D01* X70235471Y-112778203D01* X70222947Y-112772833D01* X70211146Y-112767045D01* X70199404Y-112760825D01* X70173453Y-112747026D01* X70156057Y-112737303D01* X70137829Y-112725726D01* X70118961Y-112712487D01* X70099647Y-112697776D01* X70080076Y-112681787D01* X70060441Y-112664710D01* X70040934Y-112646738D01* X70021747Y-112628063D01* X70003072Y-112608876D01* X69985100Y-112589369D01* X69968023Y-112569734D01* X69952034Y-112550163D01* X69937323Y-112530849D01* X69924084Y-112511981D01* X69912507Y-112493754D01* X69902784Y-112476357D01* X69877932Y-112424902D01* X69859492Y-112370854D01* X69846509Y-112294433D01* X69842451Y-112237703D01* X70257855Y-112237703D01* X70289869Y-112284269D01* X70293341Y-112288764D01* X70297180Y-112293489D01* X70301342Y-112298402D01* X70305786Y-112303460D01* X70315347Y-112313840D01* X70325522Y-112324288D01* X70335970Y-112334463D01* X70346350Y-112344024D01* X70351407Y-112348468D01* X70356320Y-112352630D01* X70361045Y-112356469D01* X70365540Y-112359940D01* X70412107Y-112391955D01* X73273047Y-112389045D01* X76133986Y-112386134D01* X76168911Y-112357030D01* X76172827Y-112354136D01* X76176914Y-112350936D01* X76181138Y-112347463D01* X76185464Y-112343751D01* X76189858Y-112339834D01* X76194286Y-112335747D01* X76203108Y-112327198D01* X76211657Y-112318376D01* X76215745Y-112313948D01* X76219661Y-112309554D01* X76223373Y-112305228D01* X76226846Y-112301004D01* X76230047Y-112296917D01* X76232940Y-112293001D01* X76242547Y-112278443D01* X76249766Y-112250209D01* X76254939Y-112192165D01* X76258406Y-112088180D01* X76261589Y-111677857D01* X76262044Y-110890180D01* X76261987Y-110438594D01* X76261852Y-110255743D01* X76261589Y-110098774D01* X76261156Y-109965629D01* X76260862Y-109907347D01* X76260509Y-109854248D01* X76260093Y-109806076D01* X76259607Y-109762572D01* X76259047Y-109723480D01* X76258406Y-109688542D01* X76257681Y-109657500D01* X76256864Y-109630098D01* X76255952Y-109606078D01* X76254939Y-109585182D01* X76253819Y-109567154D01* X76253217Y-109559134D01* X76252587Y-109551734D01* X76251927Y-109544923D01* X76251238Y-109538668D01* X76250517Y-109532936D01* X76249766Y-109527696D01* X76248982Y-109522915D01* X76248166Y-109518561D01* X76247317Y-109514603D01* X76246433Y-109511007D01* X76245515Y-109507742D01* X76244562Y-109504775D01* X76243573Y-109502075D01* X76242547Y-109499609D01* X76241483Y-109497345D01* X76240382Y-109495251D01* X76239242Y-109493294D01* X76238063Y-109491443D01* X76235584Y-109487928D01* X76232940Y-109484449D01* X76229981Y-109481011D01* X76226591Y-109477275D01* X76218706Y-109469078D01* X76209662Y-109460199D01* X76199834Y-109450979D01* X76189596Y-109441759D01* X76179325Y-109432880D01* X76169394Y-109424683D01* X76160180Y-109417509D01* X76113613Y-109385494D01* X70409197Y-109385494D01* X70365540Y-109414599D01* X70361046Y-109417525D01* X70356326Y-109420817D01* X70351427Y-109424434D01* X70346395Y-109428332D01* X70341279Y-109432469D01* X70336123Y-109436802D01* X70330977Y-109441288D01* X70325886Y-109445886D01* X70320897Y-109450551D01* X70316058Y-109455242D01* X70311414Y-109459916D01* X70307014Y-109464530D01* X70302903Y-109469042D01* X70299129Y-109473409D01* X70295739Y-109477589D01* X70292780Y-109481538D01* X70283168Y-109496920D01* X70275909Y-109525467D01* X70270628Y-109583346D01* X70266950Y-109686723D01* X70262903Y-110094636D01* X70260765Y-110878538D01* X70257855Y-112237703D01* X69842451Y-112237703D01* X69838027Y-112175857D01* X69833093Y-111995343D01* X69830751Y-111733109D01* X69830024Y-110884359D01* X69830189Y-110470540D01* X69830797Y-110148433D01* X69832019Y-109905521D01* X69834026Y-109729288D01* X69835376Y-109662263D01* X69836987Y-109607215D01* X69838879Y-109562577D01* X69841074Y-109526786D01* X69843593Y-109498277D01* X69846457Y-109475484D01* X69849688Y-109456845D01* X69853307Y-109440792D01* X69862206Y-109410544D01* X69872520Y-109380936D01* X69884233Y-109351992D01* X69897327Y-109323739D01* X69911785Y-109296202D01* X69927591Y-109269408D01* X69944727Y-109243380D01* X69963175Y-109218146D01* X69982920Y-109193730D01* X70003944Y-109170158D01* X70026230Y-109147456D01* X70049760Y-109125649D01* X70074519Y-109104763D01* X70100488Y-109084824D01* X70127651Y-109065856D01* X70155990Y-109047886D01* X70207292Y-109019066D01* X70260811Y-108997409D01* X70294551Y-108988946D01* X70336226Y-108981890D01* X70453217Y-108971488D01* X70631463Y-108965178D01* X70890643Y-108961938D01* X71730526Y-108960574D01* X73046034Y-108960574D01* X73060586Y-108855799D01* X73064775Y-108829996D01* X73069675Y-108803951D01* X73075250Y-108777761D01* X73081459Y-108751524D01* X73088265Y-108725338D01* X73095630Y-108699301D01* X73103515Y-108673512D01* X73111882Y-108648068D01* X73120692Y-108623067D01* X73129907Y-108598608D01* X73139489Y-108574788D01* X73149399Y-108551706D01* X73159599Y-108529459D01* X73170051Y-108508146D01* X73180715Y-108487865D01* X73191555Y-108468713D01* X73227196Y-108412580D01* X73246053Y-108385266D01* X73266043Y-108357981D01* X73287500Y-108330373D01* X73310757Y-108302086D01* X73336145Y-108272768D01* X73363997Y-108242065D01* X73428424Y-108175085D01* X73506698Y-108098317D01* X73601480Y-108008930D01* X73715430Y-107904093D01* X73741621Y-107879605D01* X73766709Y-107855258D01* X73790679Y-107831056D01* X73813520Y-107807003D01* X73835218Y-107783103D01* X73855761Y-107759362D01* X73875135Y-107735782D01* X73893329Y-107712369D01* X73910329Y-107689126D01* X73926122Y-107666058D01* X73940697Y-107643169D01* X73954039Y-107620463D01* X73966136Y-107597945D01* X73976975Y-107575619D01* X73986544Y-107553489D01* X73994830Y-107531559D01* X74001805Y-107511590D01* X74007518Y-107490222D01* X74012071Y-107466331D01* X74015567Y-107438790D01* X74018107Y-107406474D01* X74019796Y-107368258D01* X74020733Y-107323015D01* X74021023Y-107269622D01* X74021023Y-107074624D01* X74195649Y-107033878D01* X74274901Y-107013886D01* X74306627Y-107006156D01* X74333620Y-106999999D01* X74345468Y-106997525D01* X74356283Y-106995462D01* X74366115Y-106993816D01* X74375014Y-106992592D01* X74383031Y-106991797D01* X74390216Y-106991436D01* X74396618Y-106991515D01* G37* G36* X71120000Y-110998000D02* G01* X71124130Y-110998400D01* X71128764Y-110999055D01* X71133845Y-110999957D01* X71139318Y-111001098D01* X71145128Y-111002470D01* X71157537Y-111005869D01* X71164026Y-111007880D01* X71170629Y-111010087D01* X71177291Y-111012481D01* X71183959Y-111015055D01* X71190575Y-111017799D01* X71197084Y-111020705D01* X71203431Y-111023765D01* X71209561Y-111026970D01* X71221453Y-111034113D01* X71233072Y-111042374D01* X71244350Y-111051641D01* X71255218Y-111061803D01* X71265609Y-111072750D01* X71275455Y-111084371D01* X71284686Y-111096554D01* X71293235Y-111109189D01* X71301034Y-111122165D01* X71308015Y-111135371D01* X71314109Y-111148697D01* X71319247Y-111162031D01* X71323363Y-111175263D01* X71326387Y-111188282D01* X71328251Y-111200976D01* X71328727Y-111207168D01* X71328888Y-111213236D01* X71328727Y-111219305D01* X71328251Y-111225495D01* X71327468Y-111231793D01* X71326387Y-111238185D01* X71325016Y-111244655D01* X71323363Y-111251190D01* X71321437Y-111257775D01* X71319247Y-111264396D01* X71314109Y-111277687D01* X71308015Y-111290948D01* X71301035Y-111304064D01* X71293236Y-111316920D01* X71284686Y-111329400D01* X71275455Y-111341391D01* X71265609Y-111352776D01* X71255218Y-111363441D01* X71249839Y-111368467D01* X71244350Y-111373270D01* X71238758Y-111377835D01* X71233072Y-111382148D01* X71227301Y-111386195D01* X71221453Y-111389961D01* X71215537Y-111393431D01* X71209561Y-111396592D01* X71203431Y-111399830D01* X71197084Y-111402982D01* X71190574Y-111406031D01* X71183959Y-111408962D01* X71177291Y-111411756D01* X71170629Y-111414396D01* X71164025Y-111416866D01* X71157537Y-111419148D01* X71151220Y-111421226D01* X71145128Y-111423082D01* X71139318Y-111424699D01* X71133845Y-111426060D01* X71128764Y-111427149D01* X71124130Y-111427948D01* X71120000Y-111428439D01* X71116428Y-111428607D01* X71112856Y-111428439D01* X71108725Y-111427948D01* X71104092Y-111427149D01* X71099011Y-111426060D01* X71093537Y-111424699D01* X71087727Y-111423082D01* X71075318Y-111419148D01* X71062227Y-111414396D01* X71048897Y-111408962D01* X71042281Y-111406031D01* X71035772Y-111402982D01* X71029424Y-111399830D01* X71023294Y-111396592D01* X71011403Y-111389993D01* X70999784Y-111382268D01* X70988506Y-111373519D01* X70977637Y-111363850D01* X70967246Y-111353362D01* X70957401Y-111342158D01* X70948169Y-111330340D01* X70939620Y-111318011D01* X70931821Y-111305272D01* X70924841Y-111292226D01* X70918747Y-111278976D01* X70913608Y-111265623D01* X70909493Y-111252271D01* X70906469Y-111239020D01* X70904604Y-111225975D01* X70904128Y-111219561D01* X70903967Y-111213236D01* X70904128Y-111206911D01* X70904604Y-111200497D01* X70905387Y-111194004D01* X70906469Y-111187446D01* X70907840Y-111180835D01* X70909493Y-111174182D01* X70911418Y-111167501D01* X70913608Y-111160803D01* X70918747Y-111147407D01* X70924841Y-111134092D01* X70931821Y-111120956D01* X70939620Y-111108097D01* X70948169Y-111095614D01* X70957401Y-111083603D01* X70967246Y-111072164D01* X70977637Y-111061394D01* X70988506Y-111051392D01* X70999784Y-111042255D01* X71005555Y-111038042D01* X71011403Y-111034081D01* X71017319Y-111030387D01* X71023294Y-111026970D01* X71035772Y-111021541D01* X71048897Y-111016283D01* X71062227Y-111011366D01* X71075318Y-111006960D01* X71087727Y-111003237D01* X71093537Y-111001685D01* X71099011Y-111000366D01* X71104092Y-110999304D01* X71108725Y-110998519D01* X71112856Y-110998032D01* X71116428Y-110997865D01* X71120000Y-110998000D01* G37* G36* X72836484Y-111000776D02* G01* X72840056Y-111000911D01* X72844186Y-111001310D01* X72848820Y-111001965D01* X72853901Y-111002868D01* X72859374Y-111004009D01* X72865184Y-111005380D01* X72877594Y-111008779D01* X72884082Y-111010790D01* X72890685Y-111012997D01* X72897348Y-111015392D01* X72904015Y-111017965D01* X72910631Y-111020710D01* X72917140Y-111023616D01* X72923487Y-111026675D01* X72929617Y-111029880D01* X72941509Y-111036992D01* X72953128Y-111045165D01* X72964406Y-111054302D01* X72975274Y-111064305D01* X72985665Y-111075075D01* X72995511Y-111086514D01* X73004742Y-111098524D01* X73013292Y-111111008D01* X73021091Y-111123867D01* X73028071Y-111137003D01* X73034165Y-111150318D01* X73039304Y-111163714D01* X73043419Y-111177093D01* X73046443Y-111190356D01* X73048308Y-111203407D01* X73048784Y-111209822D01* X73048944Y-111216147D01* X73048809Y-111219719D01* X73048410Y-111223849D01* X73047755Y-111228482D01* X73046852Y-111233564D01* X73045711Y-111239037D01* X73044340Y-111244847D01* X73040941Y-111257256D01* X73038930Y-111263744D01* X73036723Y-111270347D01* X73034328Y-111277010D01* X73031755Y-111283677D01* X73029010Y-111290293D01* X73026104Y-111296802D01* X73023045Y-111303150D01* X73019840Y-111309280D01* X73012728Y-111321172D01* X73004555Y-111332791D01* X72995418Y-111344069D01* X72985415Y-111354937D01* X72974646Y-111365328D01* X72963206Y-111375174D01* X72951196Y-111384405D01* X72938712Y-111392954D01* X72925853Y-111400753D01* X72912717Y-111407734D01* X72899402Y-111413828D01* X72886006Y-111418966D01* X72872627Y-111423082D01* X72859364Y-111426106D01* X72846313Y-111427970D01* X72839898Y-111428446D01* X72833573Y-111428607D01* X72830001Y-111428439D01* X72825871Y-111427948D01* X72821238Y-111427149D01* X72816156Y-111426060D01* X72810683Y-111424699D01* X72804873Y-111423082D01* X72792464Y-111419148D01* X72779373Y-111414396D01* X72766043Y-111408962D01* X72759427Y-111406031D01* X72752917Y-111402982D01* X72746570Y-111399830D01* X72740440Y-111396592D01* X72728548Y-111389993D01* X72716930Y-111382268D01* X72705652Y-111373519D01* X72694783Y-111363850D01* X72684392Y-111353362D01* X72674547Y-111342158D01* X72665315Y-111330340D01* X72656766Y-111318011D01* X72648967Y-111305272D01* X72641986Y-111292226D01* X72635893Y-111278976D01* X72630754Y-111265623D01* X72626638Y-111252271D01* X72623614Y-111239020D01* X72621750Y-111225975D01* X72621274Y-111219561D01* X72621113Y-111213236D01* X72621274Y-111206911D01* X72621750Y-111200497D01* X72622533Y-111194004D01* X72623614Y-111187446D01* X72624986Y-111180835D01* X72626638Y-111174182D01* X72628564Y-111167501D01* X72630754Y-111160803D01* X72635893Y-111147407D01* X72641986Y-111134092D01* X72648967Y-111120956D01* X72656766Y-111108097D01* X72665315Y-111095614D01* X72674547Y-111083603D01* X72684392Y-111072164D01* X72694783Y-111061394D01* X72705652Y-111051392D01* X72716930Y-111042255D01* X72722701Y-111038042D01* X72728548Y-111034081D01* X72734465Y-111030387D01* X72740440Y-111026970D01* X72752804Y-111021547D01* X72765679Y-111016328D01* X72778759Y-111011519D01* X72785279Y-111009332D01* X72791736Y-111007324D01* X72798091Y-111005521D01* X72804304Y-111003948D01* X72810339Y-111002630D01* X72816156Y-111001594D01* X72821718Y-111000865D01* X72826985Y-111000469D01* X72831920Y-111000431D01* X72836484Y-111000776D01* G37* G36* X73255435Y-110357196D02* G01* X73258494Y-110357573D01* X73264819Y-110357734D01* X73271234Y-110358210D01* X73277726Y-110358993D01* X73284284Y-110360074D01* X73290896Y-110361446D01* X73297548Y-110363098D01* X73304229Y-110365024D01* X73310927Y-110367214D01* X73324323Y-110372353D01* X73337638Y-110378446D01* X73350774Y-110385427D01* X73363633Y-110393226D01* X73376117Y-110401775D01* X73388127Y-110411007D01* X73399566Y-110420852D01* X73410336Y-110431243D01* X73420339Y-110442112D01* X73429476Y-110453390D01* X73433689Y-110459161D01* X73437649Y-110465009D01* X73441344Y-110470925D01* X73444761Y-110476900D01* X73450189Y-110489378D01* X73455448Y-110502503D01* X73460365Y-110515833D01* X73464770Y-110528924D01* X73468493Y-110541333D01* X73470046Y-110547143D01* X73471364Y-110552617D01* X73472426Y-110557698D01* X73473211Y-110562331D01* X73473698Y-110566462D01* X73473865Y-110570034D01* X73473704Y-110576102D01* X73473228Y-110582293D01* X73472445Y-110588591D01* X73471364Y-110594983D01* X73469992Y-110601453D01* X73468340Y-110607988D01* X73466414Y-110614573D01* X73464224Y-110621193D01* X73459085Y-110634484D01* X73452992Y-110647745D01* X73446011Y-110660861D01* X73438212Y-110673717D01* X73429663Y-110686198D01* X73420431Y-110698189D01* X73410586Y-110709574D01* X73400195Y-110720238D01* X73394816Y-110725265D01* X73389326Y-110730068D01* X73383734Y-110734633D01* X73378048Y-110738946D01* X73372277Y-110742993D01* X73366430Y-110746758D01* X73360513Y-110750229D01* X73354538Y-110753390D01* X73348408Y-110756627D01* X73342061Y-110759779D01* X73335551Y-110762829D01* X73328935Y-110765759D01* X73322268Y-110768553D01* X73315605Y-110771194D01* X73309002Y-110773664D01* X73302514Y-110775946D01* X73296197Y-110778023D01* X73290105Y-110779879D01* X73284295Y-110781497D01* X73278822Y-110782858D01* X73273741Y-110783947D01* X73269107Y-110784745D01* X73264977Y-110785237D01* X73261405Y-110785405D01* X73257833Y-110785237D01* X73253702Y-110784745D01* X73249069Y-110783947D01* X73243988Y-110782858D01* X73238514Y-110781497D01* X73232704Y-110779879D01* X73220295Y-110775946D01* X73207204Y-110771194D01* X73193874Y-110765759D01* X73187258Y-110762829D01* X73180748Y-110759779D01* X73174401Y-110756627D01* X73168271Y-110753390D01* X73156379Y-110746790D01* X73144761Y-110739065D01* X73133483Y-110730317D01* X73122614Y-110720648D01* X73112223Y-110710160D01* X73102378Y-110698956D01* X73093146Y-110687138D01* X73084597Y-110674809D01* X73076798Y-110662070D01* X73069817Y-110649024D01* X73063724Y-110635774D01* X73058585Y-110622421D01* X73054470Y-110609068D01* X73051445Y-110595818D01* X73049581Y-110582773D01* X73049105Y-110576358D01* X73048944Y-110570034D01* X73049105Y-110563709D01* X73049581Y-110557294D01* X73050364Y-110550802D01* X73051445Y-110544244D01* X73052817Y-110537632D01* X73054470Y-110530980D01* X73056395Y-110524299D01* X73058585Y-110517601D01* X73063724Y-110504205D01* X73069817Y-110490890D01* X73076798Y-110477754D01* X73084597Y-110464895D01* X73093146Y-110452412D01* X73102378Y-110440401D01* X73112223Y-110428962D01* X73122614Y-110418192D01* X73133483Y-110408190D01* X73144761Y-110399053D01* X73150532Y-110394839D01* X73156379Y-110390879D01* X73162295Y-110387184D01* X73168271Y-110383767D01* X73174400Y-110380563D01* X73180743Y-110377509D01* X73187239Y-110374616D01* X73193829Y-110371898D01* X73200452Y-110369368D01* X73207051Y-110367038D01* X73213563Y-110364921D01* X73219931Y-110363031D01* X73226095Y-110361378D01* X73231994Y-110359978D01* X73237569Y-110358842D01* X73242760Y-110357983D01* X73247508Y-110357413D01* X73251753Y-110357147D01* X73255435Y-110357196D01* G37* G36* X73695718Y-109711596D02* G01* X73699849Y-109711996D01* X73704482Y-109712651D01* X73709563Y-109713553D01* X73715037Y-109714694D01* X73720847Y-109716066D01* X73733256Y-109719465D01* X73739744Y-109721476D01* X73746347Y-109723683D01* X73753010Y-109726077D01* X73759677Y-109728651D01* X73766293Y-109731395D01* X73772802Y-109734301D01* X73779149Y-109737361D01* X73785279Y-109740565D01* X73797171Y-109747709D01* X73808790Y-109755970D01* X73820068Y-109765237D01* X73830937Y-109775399D01* X73841328Y-109786346D01* X73851173Y-109797967D01* X73860405Y-109810150D01* X73868954Y-109822785D01* X73876753Y-109835761D01* X73883734Y-109848967D01* X73889827Y-109862293D01* X73894966Y-109875627D01* X73899081Y-109888859D01* X73902105Y-109901877D01* X73903970Y-109914572D01* X73904446Y-109920763D01* X73904607Y-109926832D01* X73904446Y-109932900D01* X73903970Y-109939091D01* X73903187Y-109945389D01* X73902105Y-109951781D01* X73900734Y-109958251D01* X73899081Y-109964786D01* X73897156Y-109971371D01* X73894966Y-109977991D01* X73889827Y-109991282D01* X73883733Y-110004543D01* X73876753Y-110017659D01* X73868954Y-110030515D01* X73860405Y-110042996D01* X73851173Y-110054987D01* X73841328Y-110066372D01* X73830937Y-110077037D01* X73825558Y-110082063D01* X73820068Y-110086866D01* X73814476Y-110091431D01* X73808790Y-110095744D01* X73803019Y-110099791D01* X73797171Y-110103557D01* X73791255Y-110107027D01* X73785279Y-110110189D01* X73779149Y-110113426D01* X73772802Y-110116578D01* X73766293Y-110119627D01* X73759677Y-110122558D01* X73753010Y-110125352D01* X73746347Y-110127992D01* X73739744Y-110130462D01* X73733256Y-110132744D01* X73726938Y-110134822D01* X73720847Y-110136678D01* X73715037Y-110138295D01* X73709563Y-110139657D01* X73704482Y-110140745D01* X73699849Y-110141544D01* X73695718Y-110142035D01* X73692146Y-110142203D01* X73688574Y-110142035D01* X73684444Y-110141544D01* X73679810Y-110140745D01* X73674729Y-110139657D01* X73669256Y-110138295D01* X73663446Y-110136678D01* X73651037Y-110132744D01* X73637946Y-110127992D01* X73624616Y-110122558D01* X73618000Y-110119627D01* X73611490Y-110116578D01* X73605143Y-110113426D01* X73599013Y-110110189D01* X73587121Y-110103589D01* X73575502Y-110095864D01* X73564224Y-110087115D01* X73553356Y-110077446D01* X73542965Y-110066958D01* X73533119Y-110055754D01* X73523888Y-110043936D01* X73515338Y-110031607D01* X73507539Y-110018868D01* X73500559Y-110005823D01* X73494465Y-109992572D01* X73489327Y-109979220D01* X73485211Y-109965867D01* X73482187Y-109952616D01* X73480323Y-109939571D01* X73479847Y-109933157D01* X73479686Y-109926832D01* X73479847Y-109920507D01* X73480323Y-109914093D01* X73481106Y-109907600D01* X73482187Y-109901042D01* X73483558Y-109894430D01* X73485211Y-109887778D01* X73487137Y-109881097D01* X73489327Y-109874399D01* X73494465Y-109861003D01* X73500559Y-109847688D01* X73507540Y-109834552D01* X73515339Y-109821693D01* X73523888Y-109809210D01* X73533119Y-109797199D01* X73542965Y-109785760D01* X73553356Y-109774990D01* X73564225Y-109764988D01* X73575502Y-109755851D01* X73581274Y-109751637D01* X73587121Y-109747677D01* X73593037Y-109743982D01* X73599013Y-109740565D01* X73605143Y-109737361D01* X73611490Y-109734301D01* X73618000Y-109731395D01* X73624616Y-109728651D01* X73631283Y-109726077D01* X73637946Y-109723683D01* X73644549Y-109721476D01* X73651037Y-109719465D01* X73657354Y-109717659D01* X73663446Y-109716066D01* X73669256Y-109714694D01* X73674729Y-109713553D01* X73679810Y-109712651D01* X73684444Y-109711996D01* X73688574Y-109711596D01* X73692146Y-109711461D01* X73695718Y-109711596D01* G37* D11* X67310000Y-41656000D02* X67310000Y-41148000D01* D10* G36* X71547169Y-111643978D02* G01* X71550741Y-111644113D01* X71554872Y-111644512D01* X71559505Y-111645168D01* X71564586Y-111646070D01* X71570060Y-111647211D01* X71575870Y-111648582D01* X71588279Y-111651982D01* X71594767Y-111653993D01* X71601370Y-111656200D01* X71608033Y-111658594D01* X71614700Y-111661168D01* X71621316Y-111663912D01* X71627825Y-111666818D01* X71634173Y-111669878D01* X71640303Y-111673082D01* X71652194Y-111680194D01* X71663813Y-111688368D01* X71675091Y-111697505D01* X71685960Y-111707507D01* X71696351Y-111718277D01* X71706196Y-111729716D01* X71715428Y-111741726D01* X71723977Y-111754210D01* X71731776Y-111767069D01* X71738757Y-111780205D01* X71744850Y-111793520D01* X71749989Y-111806916D01* X71754104Y-111820295D01* X71757129Y-111833559D01* X71758993Y-111846609D01* X71759469Y-111853024D01* X71759630Y-111859349D01* X71759495Y-111862921D01* X71759095Y-111867051D01* X71758440Y-111871685D01* X71757538Y-111876766D01* X71756397Y-111882239D01* X71755025Y-111888049D01* X71751626Y-111900458D01* X71749615Y-111906946D01* X71747408Y-111913549D01* X71745014Y-111920212D01* X71742440Y-111926879D01* X71739696Y-111933495D01* X71736790Y-111940005D01* X71733730Y-111946352D01* X71730525Y-111952482D01* X71723414Y-111964374D01* X71715240Y-111975993D01* X71706103Y-111987271D01* X71696101Y-111998139D01* X71685331Y-112008530D01* X71673892Y-112018376D01* X71661881Y-112027607D01* X71649398Y-112036157D01* X71636539Y-112043956D01* X71623403Y-112050936D01* X71610088Y-112057030D01* X71596692Y-112062169D01* X71583313Y-112066284D01* X71570049Y-112069308D01* X71556998Y-112071173D01* X71550584Y-112071649D01* X71544259Y-112071809D01* X71540687Y-112071642D01* X71536556Y-112071150D01* X71531923Y-112070351D01* X71526842Y-112069263D01* X71521368Y-112067901D01* X71515558Y-112066284D01* X71503149Y-112062350D01* X71490058Y-112057598D01* X71476728Y-112052164D01* X71470112Y-112049234D01* X71463603Y-112046184D01* X71457255Y-112043032D01* X71451126Y-112039795D01* X71439234Y-112033195D01* X71427615Y-112025470D01* X71416337Y-112016722D01* X71405468Y-112007052D01* X71395077Y-111996565D01* X71385232Y-111985361D01* X71376000Y-111973543D01* X71367451Y-111961213D01* X71359652Y-111948474D01* X71352672Y-111935429D01* X71346578Y-111922178D01* X71341439Y-111908826D01* X71337324Y-111895473D01* X71334300Y-111882222D01* X71332435Y-111869177D01* X71331959Y-111862763D01* X71331799Y-111856438D01* X71331959Y-111850113D01* X71332435Y-111843699D01* X71333218Y-111837206D01* X71334300Y-111830648D01* X71335671Y-111824037D01* X71337324Y-111817384D01* X71339249Y-111810703D01* X71341439Y-111804005D01* X71346578Y-111790609D01* X71352672Y-111777294D01* X71359652Y-111764158D01* X71367451Y-111751300D01* X71376000Y-111738816D01* X71385232Y-111726806D01* X71395077Y-111715366D01* X71405468Y-111704597D01* X71416337Y-111694594D01* X71427615Y-111685457D01* X71433386Y-111681244D01* X71439234Y-111677284D01* X71445150Y-111673589D01* X71451126Y-111670172D01* X71463609Y-111664749D01* X71476774Y-111659531D01* X71490212Y-111654722D01* X71496905Y-111652535D01* X71503513Y-111650527D01* X71509985Y-111648723D01* X71516269Y-111647150D01* X71522314Y-111645833D01* X71528070Y-111644797D01* X71533484Y-111644068D01* X71538506Y-111643671D01* X71543085Y-111643633D01* X71547169Y-111643978D01* G37* G36* X74557201Y-109714507D02* G01* X74561332Y-109714906D01* X74565965Y-109715561D01* X74571046Y-109716464D01* X74576519Y-109717605D01* X74582330Y-109718976D01* X74594739Y-109722375D01* X74601227Y-109724386D01* X74607830Y-109726593D01* X74614493Y-109728988D01* X74621160Y-109731561D01* X74627776Y-109734305D01* X74634285Y-109737212D01* X74640633Y-109740271D01* X74646762Y-109743476D01* X74658654Y-109750588D01* X74670273Y-109758761D01* X74681551Y-109767898D01* X74692420Y-109777901D01* X74702811Y-109788670D01* X74712656Y-109800110D01* X74721888Y-109812120D01* X74730437Y-109824604D01* X74738236Y-109837463D01* X74745217Y-109850599D01* X74751310Y-109863914D01* X74756449Y-109877310D01* X74760565Y-109890688D01* X74763589Y-109903952D01* X74765453Y-109917003D01* X74765929Y-109923418D01* X74766090Y-109929742D01* X74765955Y-109933314D01* X74765555Y-109937445D01* X74764900Y-109942078D01* X74763998Y-109947159D01* X74762857Y-109952633D01* X74761485Y-109958443D01* X74758086Y-109970852D01* X74756075Y-109977340D01* X74753868Y-109983943D01* X74751474Y-109990606D01* X74748900Y-109997273D01* X74746156Y-110003889D01* X74743250Y-110010398D01* X74740190Y-110016746D01* X74736986Y-110022876D01* X74729874Y-110034768D01* X74721700Y-110046387D01* X74712563Y-110057665D01* X74702561Y-110068533D01* X74691791Y-110078924D01* X74680352Y-110088770D01* X74668342Y-110098001D01* X74655858Y-110106551D01* X74642999Y-110114350D01* X74629863Y-110121330D01* X74616548Y-110127424D01* X74603152Y-110132562D01* X74589773Y-110136678D01* X74576509Y-110139702D01* X74563458Y-110141567D01* X74557044Y-110142043D01* X74550719Y-110142203D01* X74547147Y-110142035D01* X74543017Y-110141544D01* X74538383Y-110140745D01* X74533302Y-110139657D01* X74527829Y-110138295D01* X74522019Y-110136678D01* X74509610Y-110132744D01* X74496518Y-110127992D01* X74483189Y-110122558D01* X74476573Y-110119627D01* X74470063Y-110116578D01* X74463716Y-110113426D01* X74457586Y-110110189D01* X74445694Y-110103589D01* X74434075Y-110095864D01* X74422797Y-110087115D01* X74411929Y-110077446D01* X74401537Y-110066958D01* X74391692Y-110055754D01* X74382461Y-110043936D01* X74373911Y-110031607D01* X74366112Y-110018868D01* X74359132Y-110005823D01* X74353038Y-109992572D01* X74347899Y-109979220D01* X74343784Y-109965867D01* X74340760Y-109952616D01* X74338895Y-109939571D01* X74338419Y-109933157D01* X74338259Y-109926832D01* X74338419Y-109920507D01* X74338895Y-109914093D01* X74339678Y-109907600D01* X74340760Y-109901042D01* X74342131Y-109894430D01* X74343784Y-109887778D01* X74345710Y-109881097D01* X74347899Y-109874399D01* X74353038Y-109861003D01* X74359132Y-109847688D01* X74366112Y-109834552D01* X74373911Y-109821693D01* X74382461Y-109809210D01* X74391692Y-109797199D01* X74401538Y-109785760D01* X74411929Y-109774990D01* X74422797Y-109764988D01* X74434075Y-109755851D01* X74439846Y-109751637D01* X74445694Y-109747677D01* X74451610Y-109743982D01* X74457586Y-109740565D01* X74463748Y-109737393D01* X74470188Y-109734426D01* X74476841Y-109731664D01* X74483643Y-109729106D01* X74490531Y-109726752D01* X74497439Y-109724604D01* X74504305Y-109722660D01* X74511065Y-109720920D01* X74517654Y-109719385D01* X74524008Y-109718055D01* X74530064Y-109716930D01* X74535758Y-109716009D01* X74541025Y-109715293D01* X74545802Y-109714781D01* X74550025Y-109714474D01* X74553629Y-109714372D01* X74557201Y-109714507D01* G37* G36* X75208474Y-110357573D02* G01* X75262347Y-110358140D01* X75309724Y-110358835D01* X75351132Y-110359786D01* X75387100Y-110361120D01* X75403209Y-110361971D01* X75418157Y-110362966D01* X75432009Y-110364121D01* X75444831Y-110365452D01* X75456690Y-110366974D01* X75467651Y-110368705D01* X75477781Y-110370659D01* X75487146Y-110372853D01* X75495811Y-110375303D01* X75503844Y-110378024D01* X75511309Y-110381034D01* X75518274Y-110384347D01* X75524803Y-110387980D01* X75530964Y-110391948D01* X75536822Y-110396269D01* X75542444Y-110400957D01* X75547895Y-110406028D01* X75553241Y-110411500D01* X75558549Y-110417387D01* X75563885Y-110423706D01* X75574905Y-110437702D01* X75586828Y-110453617D01* X75596434Y-110466646D01* X75600321Y-110473953D01* X75603654Y-110482539D01* X75606474Y-110492967D01* X75608826Y-110505800D01* X75612294Y-110540930D01* X75614397Y-110592430D01* X75615477Y-110664804D01* X75615932Y-110890180D01* X75615893Y-110958009D01* X75615756Y-111017806D01* X75615491Y-111070134D01* X75615068Y-111115555D01* X75614457Y-111154632D01* X75613630Y-111187929D01* X75613125Y-111202585D01* X75612554Y-111216007D01* X75611915Y-111228265D01* X75611202Y-111239430D01* X75610413Y-111249571D01* X75609543Y-111258759D01* X75608589Y-111267065D01* X75607547Y-111274559D01* X75606414Y-111281311D01* X75605185Y-111287392D01* X75603856Y-111292871D01* X75602426Y-111297820D01* X75600888Y-111302308D01* X75599240Y-111306406D01* X75597478Y-111310184D01* X75595599Y-111313713D01* X75593597Y-111317063D01* X75591471Y-111320304D01* X75586828Y-111326742D01* X75577095Y-111339779D01* X75567495Y-111351634D01* X75557954Y-111362356D01* X75548401Y-111371990D01* X75538762Y-111380584D01* X75528966Y-111388185D01* X75518939Y-111394839D01* X75508610Y-111400594D01* X75497906Y-111405496D01* X75486754Y-111409592D01* X75475081Y-111412930D01* X75462817Y-111415555D01* X75449887Y-111417515D01* X75436219Y-111418858D01* X75421742Y-111419629D01* X75406382Y-111419875D01* X75391022Y-111419597D01* X75376545Y-111418738D01* X75362877Y-111417266D01* X75356324Y-111416289D01* X75349947Y-111415146D01* X75343736Y-111413832D01* X75337682Y-111412343D01* X75331777Y-111410676D01* X75326010Y-111408825D01* X75320374Y-111406786D01* X75314858Y-111404556D01* X75309454Y-111402129D01* X75304154Y-111399502D01* X75298947Y-111396671D01* X75293824Y-111393630D01* X75288778Y-111390377D01* X75283798Y-111386906D01* X75278875Y-111383213D01* X75274001Y-111379294D01* X75269167Y-111375145D01* X75264363Y-111370762D01* X75254809Y-111361275D01* X75245269Y-111350798D01* X75235668Y-111339299D01* X75225936Y-111326742D01* X75217159Y-111313759D01* X75213504Y-111306866D01* X75210292Y-111299275D01* X75207490Y-111290660D01* X75205063Y-111280698D01* X75202977Y-111269065D01* X75201198Y-111255437D01* X75198424Y-111220898D01* X75196468Y-111174491D01* X75195058Y-111113622D01* X75193921Y-111035701D01* X75191011Y-110782494D01* X75062953Y-110782494D01* X75036736Y-110782315D01* X75012566Y-110781744D01* X74990306Y-110780729D01* X74969819Y-110779220D01* X74950970Y-110777165D01* X74933621Y-110774513D01* X74925467Y-110772948D01* X74917636Y-110771214D01* X74910113Y-110769305D01* X74902880Y-110767215D01* X74895919Y-110764937D01* X74889214Y-110762465D01* X74882748Y-110759793D01* X74876504Y-110756914D01* X74870464Y-110753822D01* X74864612Y-110750511D01* X74858931Y-110746973D01* X74853403Y-110743204D01* X74848011Y-110739195D01* X74842739Y-110734941D01* X74837569Y-110730436D01* X74832484Y-110725673D01* X74827467Y-110720645D01* X74822502Y-110715347D01* X74812657Y-110703913D01* X74804845Y-110693900D01* X74797776Y-110683528D01* X74791441Y-110672831D01* X74785832Y-110661843D01* X74780942Y-110650597D01* X74776762Y-110639126D01* X74773284Y-110627464D01* X74770501Y-110615646D01* X74768404Y-110603703D01* X74766986Y-110591671D01* X74766238Y-110579582D01* X74766152Y-110567470D01* X74766721Y-110555369D01* X74767937Y-110543312D01* X74769790Y-110531333D01* X74772275Y-110519466D01* X74775381Y-110507743D01* X74779102Y-110496199D01* X74783430Y-110484866D01* X74788356Y-110473780D01* X74793872Y-110462973D01* X74799971Y-110452478D01* X74806644Y-110442330D01* X74813884Y-110432562D01* X74821683Y-110423208D01* X74830032Y-110414300D01* X74838923Y-110405874D01* X74848349Y-110397961D01* X74858301Y-110390597D01* X74868772Y-110383814D01* X74879754Y-110377645D01* X74891238Y-110372126D01* X74897774Y-110369532D01* X74905466Y-110367203D01* X74924844Y-110363303D01* X74950430Y-110360359D01* X74983280Y-110358301D01* X75024452Y-110357062D01* X75075004Y-110356573D01* X75208474Y-110357573D01* G37* G36* X73578452Y-111644995D02* G01* X73700352Y-111645519D01* X73805425Y-111646115D01* X73894996Y-111646831D01* X73970392Y-111647712D01* X74003189Y-111648230D01* X74032939Y-111648807D01* X74059807Y-111649449D01* X74083961Y-111650162D01* X74105565Y-111650952D01* X74124786Y-111651824D01* X74141788Y-111652785D01* X74156738Y-111653840D01* X74169802Y-111654996D01* X74181145Y-111656257D01* X74190933Y-111657630D01* X74199332Y-111659121D01* X74206507Y-111660736D01* X74212624Y-111662480D01* X74217849Y-111664359D01* X74222348Y-111666380D01* X74226286Y-111668548D01* X74229829Y-111670869D01* X74233143Y-111673348D01* X74236394Y-111675992D01* X74249431Y-111685725D01* X74261286Y-111695325D01* X74272008Y-111704866D01* X74281642Y-111714419D01* X74290236Y-111724058D01* X74297837Y-111733854D01* X74304491Y-111743881D01* X74310246Y-111754210D01* X74315148Y-111764914D01* X74319244Y-111776066D01* X74322582Y-111787739D01* X74325207Y-111800003D01* X74327168Y-111812933D01* X74328510Y-111826601D01* X74329281Y-111841078D01* X74329527Y-111856438D01* X74329249Y-111871798D01* X74328390Y-111886276D01* X74326918Y-111899943D01* X74325941Y-111906496D01* X74324798Y-111912873D01* X74323484Y-111919084D01* X74321995Y-111925138D01* X74320328Y-111931043D01* X74318477Y-111936810D01* X74316438Y-111942446D01* X74314208Y-111947962D01* X74311781Y-111953366D01* X74309154Y-111958666D01* X74306323Y-111963873D01* X74303282Y-111968996D01* X74300029Y-111974042D01* X74296558Y-111979022D01* X74292865Y-111983945D01* X74288946Y-111988819D01* X74284797Y-111993653D01* X74280414Y-111998457D01* X74270927Y-112008011D01* X74260450Y-112017551D01* X74248951Y-112027151D01* X74236394Y-112036884D01* X74222376Y-112046496D01* X74199559Y-112053755D01* X74157506Y-112059036D01* X74085780Y-112062714D01* X73811565Y-112066761D01* X73293419Y-112068899D01* X72889645Y-112069945D01* X72729793Y-112069564D01* X72597466Y-112068535D01* X72492287Y-112066824D01* X72413882Y-112064397D01* X72361876Y-112061219D01* X72345655Y-112059339D01* X72335892Y-112057257D01* X72330147Y-112055460D01* X72324379Y-112053351D01* X72312819Y-112048242D01* X72301302Y-112042024D01* X72289917Y-112034792D01* X72278753Y-112026640D01* X72267901Y-112017660D01* X72257450Y-112007946D01* X72247488Y-111997594D01* X72238107Y-111986695D01* X72229395Y-111975345D01* X72221442Y-111963636D01* X72214337Y-111951663D01* X72208170Y-111939520D01* X72203031Y-111927300D01* X72199008Y-111915097D01* X72197444Y-111909031D01* X72196192Y-111903005D01* X72194751Y-111893713D01* X72193696Y-111884401D01* X72193024Y-111875081D01* X72192730Y-111865766D01* X72192810Y-111856471D01* X72193257Y-111847209D01* X72194068Y-111837992D01* X72195237Y-111828835D01* X72196761Y-111819750D01* X72198633Y-111810751D01* X72200850Y-111801850D01* X72203406Y-111793063D01* X72206297Y-111784401D01* X72209517Y-111775878D01* X72213063Y-111767508D01* X72216929Y-111759303D01* X72221110Y-111751277D01* X72225603Y-111743444D01* X72230401Y-111735817D01* X72235500Y-111728408D01* X72240895Y-111721232D01* X72246582Y-111714302D01* X72252556Y-111707630D01* X72258812Y-111701231D01* X72265344Y-111695118D01* X72272149Y-111689303D01* X72279222Y-111683801D01* X72286557Y-111678624D01* X72294151Y-111673787D01* X72301997Y-111669301D01* X72310092Y-111665181D01* X72318430Y-111661441D01* X72338331Y-111656512D01* X72377229Y-111652573D01* X72531254Y-111647252D01* X72818976Y-111644660D01* X73278867Y-111643978D01* X73578452Y-111644995D01* G37* G36* X71122752Y-109711622D02* G01* X71129167Y-109712098D01* X71135660Y-109712881D01* X71142218Y-109713962D01* X71148829Y-109715334D01* X71155482Y-109716986D01* X71162163Y-109718912D01* X71168861Y-109721102D01* X71182257Y-109726241D01* X71195572Y-109732334D01* X71208708Y-109739315D01* X71221566Y-109747114D01* X71234050Y-109755663D01* X71246061Y-109764895D01* X71257500Y-109774740D01* X71268270Y-109785131D01* X71278272Y-109796000D01* X71287409Y-109807277D01* X71291622Y-109813048D01* X71295582Y-109818896D01* X71299277Y-109824812D01* X71302694Y-109830788D01* X71308123Y-109843265D01* X71313381Y-109856391D01* X71318298Y-109869721D01* X71322703Y-109882812D01* X71326427Y-109895221D01* X71327979Y-109901031D01* X71329297Y-109906504D01* X71330360Y-109911586D01* X71331145Y-109916219D01* X71331632Y-109920350D01* X71331799Y-109923921D01* X71331638Y-109929990D01* X71331162Y-109936181D01* X71330379Y-109942479D01* X71329297Y-109948870D01* X71327926Y-109955341D01* X71326273Y-109961875D01* X71324348Y-109968460D01* X71322158Y-109975081D01* X71317019Y-109988372D01* X71310925Y-110001633D01* X71303945Y-110014749D01* X71296146Y-110027605D01* X71287597Y-110040086D01* X71278365Y-110052076D01* X71268520Y-110063461D01* X71258129Y-110074126D01* X71252750Y-110079152D01* X71247260Y-110083955D01* X71241668Y-110088520D01* X71235982Y-110092834D01* X71230211Y-110096880D01* X71224363Y-110100646D01* X71218447Y-110104117D01* X71212472Y-110107278D01* X71206342Y-110110515D01* X71199994Y-110113667D01* X71193485Y-110116717D01* X71186869Y-110119647D01* X71180202Y-110122441D01* X71173539Y-110125081D01* X71166936Y-110127551D01* X71160448Y-110129833D01* X71154130Y-110131911D01* X71148039Y-110133767D01* X71142228Y-110135384D01* X71136755Y-110136746D01* X71131674Y-110137834D01* X71127040Y-110138633D01* X71122910Y-110139125D01* X71119338Y-110139292D01* X71113270Y-110139132D01* X71107079Y-110138656D01* X71100781Y-110137873D01* X71094389Y-110136791D01* X71087919Y-110135420D01* X71081384Y-110133767D01* X71074799Y-110131841D01* X71068178Y-110129652D01* X71054888Y-110124513D01* X71041627Y-110118419D01* X71028511Y-110111439D01* X71015655Y-110103640D01* X71003174Y-110095090D01* X70991183Y-110085859D01* X70979798Y-110076013D01* X70969133Y-110065622D01* X70964107Y-110060243D01* X70959304Y-110054754D01* X70954739Y-110049162D01* X70950426Y-110043476D01* X70946379Y-110037705D01* X70942613Y-110031857D01* X70939143Y-110025941D01* X70935982Y-110019965D01* X70932745Y-110013835D01* X70929593Y-110007488D01* X70926543Y-110000979D01* X70923613Y-109994363D01* X70920819Y-109987696D01* X70918178Y-109981033D01* X70915709Y-109974430D01* X70913426Y-109967942D01* X70911349Y-109961624D01* X70909493Y-109955533D01* X70907875Y-109949722D01* X70906514Y-109944249D01* X70905425Y-109939168D01* X70904627Y-109934534D01* X70904135Y-109930404D01* X70903967Y-109926832D01* X70904128Y-109920507D01* X70904604Y-109914093D01* X70905387Y-109907600D01* X70906469Y-109901042D01* X70907840Y-109894430D01* X70909493Y-109887778D01* X70911418Y-109881097D01* X70913608Y-109874399D01* X70918747Y-109861003D01* X70924841Y-109847688D01* X70931821Y-109834552D01* X70939620Y-109821693D01* X70948169Y-109809210D01* X70957401Y-109797199D01* X70967246Y-109785760D01* X70977637Y-109774990D01* X70988506Y-109764988D01* X70999784Y-109755851D01* X71005555Y-109751637D01* X71011403Y-109747677D01* X71017319Y-109743982D01* X71023294Y-109740565D01* X71029424Y-109737361D01* X71035772Y-109734301D01* X71042281Y-109731395D01* X71048897Y-109728651D01* X71055564Y-109726077D01* X71062227Y-109723683D01* X71068830Y-109721476D01* X71075318Y-109719465D01* X71081636Y-109717659D01* X71087727Y-109716066D01* X71093537Y-109714694D01* X71099011Y-109713553D01* X71104092Y-109712651D01* X71108725Y-109711996D01* X71112856Y-109711596D01* X71116428Y-109711461D01* X71122752Y-109711622D01* G37* G36* X74553630Y-111000775D02* G01* X74559954Y-111000936D01* X74566369Y-111001412D01* X74572862Y-111002195D01* X74579420Y-111003277D01* X74586031Y-111004648D01* X74592684Y-111006301D01* X74599365Y-111008226D01* X74606063Y-111010416D01* X74619458Y-111015555D01* X74632773Y-111021649D01* X74645909Y-111028629D01* X74658768Y-111036428D01* X74671252Y-111044978D01* X74683262Y-111054209D01* X74694702Y-111064054D01* X74705472Y-111074446D01* X74715474Y-111085314D01* X74724611Y-111096592D01* X74728824Y-111102363D01* X74732784Y-111108211D01* X74736479Y-111114127D01* X74739896Y-111120103D01* X74745325Y-111132580D01* X74750583Y-111145705D01* X74755500Y-111159035D01* X74759905Y-111172126D01* X74763629Y-111184536D01* X74765181Y-111190346D01* X74766499Y-111195819D01* X74767561Y-111200900D01* X74768346Y-111205534D01* X74768833Y-111209664D01* X74769000Y-111213236D01* X74768865Y-111216808D01* X74768466Y-111220938D01* X74767811Y-111225572D01* X74766908Y-111230653D01* X74765767Y-111236126D01* X74764396Y-111241936D01* X74760997Y-111254345D01* X74758986Y-111260833D01* X74756779Y-111267437D01* X74754384Y-111274100D01* X74751811Y-111280767D01* X74749067Y-111287383D01* X74746161Y-111293892D01* X74743101Y-111300239D01* X74739896Y-111306369D01* X74732753Y-111318261D01* X74724492Y-111329880D01* X74715225Y-111341158D01* X74705062Y-111352027D01* X74694116Y-111362418D01* X74682495Y-111372263D01* X74670312Y-111381495D01* X74657677Y-111390044D01* X74644701Y-111397843D01* X74631495Y-111404823D01* X74618169Y-111410917D01* X74604835Y-111416056D01* X74591603Y-111420171D01* X74578584Y-111423195D01* X74565890Y-111425060D01* X74559698Y-111425536D01* X74553630Y-111425697D01* X74547561Y-111425536D01* X74541371Y-111425060D01* X74535072Y-111424277D01* X74528681Y-111423195D01* X74522211Y-111421824D01* X74515676Y-111420171D01* X74509091Y-111418246D01* X74502470Y-111416056D01* X74489179Y-111410917D01* X74475918Y-111404823D01* X74462802Y-111397843D01* X74449946Y-111390044D01* X74437465Y-111381494D01* X74425475Y-111372263D01* X74414090Y-111362417D01* X74403425Y-111352026D01* X74398399Y-111346647D01* X74393596Y-111341158D01* X74389031Y-111335566D01* X74384718Y-111329880D01* X74380671Y-111324109D01* X74376905Y-111318261D01* X74373434Y-111312345D01* X74370273Y-111306369D01* X74367036Y-111300239D01* X74363884Y-111293892D01* X74360834Y-111287383D01* X74357904Y-111280767D01* X74355110Y-111274100D01* X74352470Y-111267437D01* X74350000Y-111260834D01* X74347718Y-111254346D01* X74345640Y-111248028D01* X74343784Y-111241937D01* X74342167Y-111236127D01* X74340805Y-111230653D01* X74339717Y-111225572D01* X74338918Y-111220939D01* X74338426Y-111216808D01* X74338259Y-111213236D01* X74338419Y-111206911D01* X74338895Y-111200497D01* X74339678Y-111194004D01* X74340760Y-111187446D01* X74342131Y-111180835D01* X74343784Y-111174182D01* X74345710Y-111167501D01* X74347899Y-111160803D01* X74353038Y-111147407D01* X74359132Y-111134092D01* X74366112Y-111120956D01* X74373911Y-111108097D01* X74382461Y-111095614D01* X74391692Y-111083603D01* X74401538Y-111072164D01* X74411929Y-111061394D01* X74422797Y-111051392D01* X74434075Y-111042255D01* X74439846Y-111038042D01* X74445694Y-111034081D01* X74451610Y-111030387D01* X74457586Y-111026970D01* X74469949Y-111021547D01* X74482825Y-111016328D01* X74495904Y-111011519D01* X74502425Y-111009332D01* X74508882Y-111007324D01* X74515236Y-111005521D01* X74521450Y-111003948D01* X74527485Y-111002630D01* X74533302Y-111001594D01* X74538864Y-111000865D01* X74544131Y-111000469D01* X74549066Y-111000430D01* X74553630Y-111000775D01* G37* G36* X74126302Y-110354823D02* G01* X74132717Y-110355299D01* X74139210Y-110356082D01* X74145768Y-110357164D01* X74152379Y-110358535D01* X74159032Y-110360188D01* X74165713Y-110362114D01* X74172411Y-110364303D01* X74185807Y-110369442D01* X74199122Y-110375536D01* X74212258Y-110382516D01* X74225116Y-110390315D01* X74237600Y-110398865D01* X74249611Y-110408096D01* X74261050Y-110417942D01* X74271820Y-110428333D01* X74281822Y-110439201D01* X74290959Y-110450479D01* X74295172Y-110456250D01* X74299132Y-110462098D01* X74302827Y-110468014D01* X74306244Y-110473990D01* X74311673Y-110486467D01* X74316931Y-110499592D01* X74321848Y-110512922D01* X74326253Y-110526013D01* X74329977Y-110538422D01* X74331529Y-110544233D01* X74332847Y-110549706D01* X74333910Y-110554787D01* X74334695Y-110559421D01* X74335182Y-110563551D01* X74335349Y-110567123D01* X74335188Y-110573192D01* X74334712Y-110579382D01* X74333929Y-110585680D01* X74332847Y-110592072D01* X74331476Y-110598542D01* X74329823Y-110605077D01* X74327898Y-110611662D01* X74325708Y-110618283D01* X74320569Y-110631574D01* X74314475Y-110644835D01* X74307495Y-110657951D01* X74299696Y-110670807D01* X74291146Y-110683288D01* X74281915Y-110695278D01* X74272070Y-110706663D01* X74261678Y-110717328D01* X74256300Y-110722354D01* X74250810Y-110727157D01* X74245218Y-110731722D01* X74239532Y-110736035D01* X74233761Y-110740082D01* X74227913Y-110743848D01* X74221997Y-110747319D01* X74216021Y-110750480D01* X74209891Y-110753717D01* X74203544Y-110756869D01* X74197035Y-110759919D01* X74190419Y-110762849D01* X74183752Y-110765643D01* X74177089Y-110768283D01* X74170486Y-110770753D01* X74163998Y-110773035D01* X74157680Y-110775113D01* X74151589Y-110776969D01* X74145778Y-110778586D01* X74140305Y-110779948D01* X74135224Y-110781036D01* X74130590Y-110781835D01* X74126460Y-110782326D01* X74122888Y-110782494D01* X74116819Y-110782334D01* X74110629Y-110781858D01* X74104331Y-110781074D01* X74097939Y-110779993D01* X74091469Y-110778622D01* X74084934Y-110776969D01* X74078349Y-110775043D01* X74071728Y-110772853D01* X74058437Y-110767715D01* X74045176Y-110761621D01* X74032060Y-110754641D01* X74019204Y-110746842D01* X74006724Y-110738292D01* X73994733Y-110729061D01* X73983348Y-110719215D01* X73972683Y-110708824D01* X73967657Y-110703445D01* X73962854Y-110697956D01* X73958289Y-110692364D01* X73953976Y-110686678D01* X73949929Y-110680907D01* X73946163Y-110675059D01* X73942693Y-110669143D01* X73939532Y-110663167D01* X73936294Y-110657037D01* X73933142Y-110650690D01* X73930093Y-110644180D01* X73927162Y-110637565D01* X73924368Y-110630898D01* X73921728Y-110624235D01* X73919258Y-110617632D01* X73916976Y-110611144D01* X73914898Y-110604826D01* X73913042Y-110598735D01* X73911425Y-110592924D01* X73910064Y-110587451D01* X73908975Y-110582370D01* X73908176Y-110577736D01* X73907685Y-110573606D01* X73907517Y-110570034D01* X73907678Y-110563709D01* X73908154Y-110557294D01* X73908937Y-110550802D01* X73910018Y-110544244D01* X73911390Y-110537632D01* X73913042Y-110530980D01* X73914968Y-110524299D01* X73917158Y-110517601D01* X73922297Y-110504205D01* X73928390Y-110490890D01* X73935371Y-110477754D01* X73943170Y-110464895D01* X73951719Y-110452412D01* X73960951Y-110440401D01* X73970796Y-110428962D01* X73981187Y-110418192D01* X73992056Y-110408190D01* X74003334Y-110399053D01* X74009105Y-110394839D01* X74014952Y-110390879D01* X74020869Y-110387184D01* X74026844Y-110383767D01* X74032974Y-110380563D01* X74039322Y-110377503D01* X74045831Y-110374597D01* X74052447Y-110371853D01* X74059114Y-110369279D01* X74065777Y-110366885D01* X74072380Y-110364678D01* X74078868Y-110362667D01* X74085186Y-110360860D01* X74091277Y-110359267D01* X74097087Y-110357896D01* X74102561Y-110356755D01* X74107642Y-110355852D01* X74112275Y-110355197D01* X74116406Y-110354798D01* X74119978Y-110354663D01* X74126302Y-110354823D01* G37* G36* X72839898Y-109711622D02* G01* X72846313Y-109712098D01* X72852805Y-109712881D01* X72859364Y-109713962D01* X72865975Y-109715334D01* X72872627Y-109716986D01* X72879309Y-109718912D01* X72886006Y-109721102D01* X72899402Y-109726241D01* X72912718Y-109732334D01* X72925853Y-109739315D01* X72938712Y-109747114D01* X72951196Y-109755663D01* X72963206Y-109764895D01* X72974646Y-109774740D01* X72985415Y-109785131D01* X72995418Y-109796000D01* X73004555Y-109807277D01* X73008768Y-109813048D01* X73012728Y-109818896D01* X73016423Y-109824812D01* X73019840Y-109830788D01* X73025269Y-109843265D01* X73030527Y-109856391D01* X73035444Y-109869721D01* X73039849Y-109882812D01* X73043573Y-109895221D01* X73045125Y-109901031D01* X73046443Y-109906504D01* X73047505Y-109911586D01* X73048291Y-109916219D01* X73048777Y-109920350D01* X73048944Y-109923921D01* X73048784Y-109929990D01* X73048308Y-109936181D01* X73047525Y-109942479D01* X73046443Y-109948870D01* X73045072Y-109955341D01* X73043419Y-109961875D01* X73041493Y-109968460D01* X73039304Y-109975081D01* X73034165Y-109988372D01* X73028071Y-110001633D01* X73021091Y-110014749D01* X73013292Y-110027605D01* X73004742Y-110040086D01* X72995511Y-110052076D01* X72985665Y-110063461D01* X72975274Y-110074126D01* X72969895Y-110079152D01* X72964406Y-110083955D01* X72958814Y-110088520D01* X72953128Y-110092834D01* X72947357Y-110096880D01* X72941509Y-110100646D01* X72935593Y-110104117D01* X72929617Y-110107278D01* X72923487Y-110110515D01* X72917140Y-110113667D01* X72910631Y-110116717D01* X72904015Y-110119647D01* X72897348Y-110122441D01* X72890685Y-110125081D01* X72884082Y-110127551D01* X72877594Y-110129833D01* X72871276Y-110131911D01* X72865184Y-110133767D01* X72859374Y-110135384D01* X72853901Y-110136746D01* X72848820Y-110137834D01* X72844186Y-110138633D01* X72840056Y-110139125D01* X72836484Y-110139292D01* X72830415Y-110139132D01* X72824225Y-110138656D01* X72817927Y-110137873D01* X72811535Y-110136791D01* X72805065Y-110135420D01* X72798530Y-110133767D01* X72791945Y-110131841D01* X72785324Y-110129652D01* X72772033Y-110124513D01* X72758772Y-110118419D01* X72745656Y-110111439D01* X72732800Y-110103640D01* X72720319Y-110095090D01* X72708329Y-110085859D01* X72696944Y-110076013D01* X72686279Y-110065622D01* X72681253Y-110060243D01* X72676450Y-110054754D01* X72671885Y-110049162D01* X72667572Y-110043476D01* X72663525Y-110037705D01* X72659759Y-110031857D01* X72656289Y-110025941D01* X72653128Y-110019965D01* X72649890Y-110013835D01* X72646738Y-110007488D01* X72643689Y-110000979D01* X72640758Y-109994363D01* X72637965Y-109987696D01* X72635324Y-109981033D01* X72632854Y-109974430D01* X72630572Y-109967942D01* X72628494Y-109961624D01* X72626638Y-109955533D01* X72625021Y-109949722D01* X72623660Y-109944249D01* X72622571Y-109939168D01* X72621773Y-109934534D01* X72621281Y-109930404D01* X72621113Y-109926832D01* X72621274Y-109920507D01* X72621750Y-109914093D01* X72622533Y-109907600D01* X72623614Y-109901042D01* X72624986Y-109894430D01* X72626638Y-109887778D01* X72628564Y-109881097D01* X72630754Y-109874399D01* X72635893Y-109861003D01* X72641986Y-109847688D01* X72648967Y-109834552D01* X72656766Y-109821693D01* X72665315Y-109809210D01* X72674547Y-109797199D01* X72684392Y-109785760D01* X72694783Y-109774990D01* X72705652Y-109764988D01* X72716930Y-109755851D01* X72722701Y-109751637D01* X72728548Y-109747677D01* X72734465Y-109743982D01* X72740440Y-109740565D01* X72746538Y-109737361D01* X72752798Y-109734301D01* X72759177Y-109731395D01* X72765633Y-109728651D01* X72772124Y-109726077D01* X72778605Y-109723683D01* X72785036Y-109721476D01* X72791372Y-109719465D01* X72797573Y-109717659D01* X72803594Y-109716066D01* X72809393Y-109714694D01* X72814929Y-109713553D01* X72820157Y-109712651D01* X72825035Y-109711996D01* X72829522Y-109711596D01* X72833573Y-109711461D01* X72839898Y-109711622D01* G37* D12* X64281928Y-81041328D02* G75* G03* X64281928Y-81041328I-233200J0D01* G01* D10* G36* X71346351Y-110357574D02* G01* X71400225Y-110358141D01* X71447601Y-110358836D01* X71489009Y-110359786D01* X71524977Y-110361121D01* X71541087Y-110361972D01* X71556034Y-110362967D01* X71569886Y-110364122D01* X71582708Y-110365452D01* X71594567Y-110366975D01* X71605528Y-110368705D01* X71615658Y-110370659D01* X71625023Y-110372853D01* X71633688Y-110375303D01* X71641721Y-110378025D01* X71649186Y-110381034D01* X71656151Y-110384347D01* X71662680Y-110387980D01* X71668841Y-110391949D01* X71674699Y-110396269D01* X71680321Y-110400957D01* X71685772Y-110406029D01* X71691118Y-110411500D01* X71696427Y-110417387D01* X71701762Y-110423706D01* X71712782Y-110437703D01* X71724705Y-110453617D01* X71728141Y-110458738D01* X71731356Y-110464257D01* X71737120Y-110476389D01* X71741997Y-110489800D01* X71745987Y-110504277D01* X71749091Y-110519606D01* X71751308Y-110535575D01* X71752638Y-110551970D01* X71753081Y-110568579D01* X71752638Y-110585187D01* X71751308Y-110601582D01* X71749091Y-110617551D01* X71745987Y-110632881D01* X71741997Y-110647357D01* X71737120Y-110660768D01* X71731356Y-110672900D01* X71728141Y-110678420D01* X71724705Y-110683540D01* X71702507Y-110713452D01* X71692046Y-110725657D01* X71681367Y-110736201D01* X71669989Y-110745209D01* X71657430Y-110752810D01* X71643208Y-110759133D01* X71626842Y-110764304D01* X71607850Y-110768453D01* X71585749Y-110771705D01* X71560060Y-110774191D01* X71530298Y-110776037D01* X71456634Y-110778322D01* X71360903Y-110779584D01* X71307630Y-110780494D01* X71259959Y-110781000D01* X71217489Y-110781036D01* X71179820Y-110780539D01* X71146551Y-110779446D01* X71131441Y-110778655D01* X71117280Y-110777692D01* X71104020Y-110776547D01* X71091608Y-110775212D01* X71079996Y-110773681D01* X71069133Y-110771945D01* X71058970Y-110769995D01* X71049455Y-110767824D01* X71040540Y-110765424D01* X71032173Y-110762787D01* X71024306Y-110759905D01* X71016887Y-110756769D01* X71009866Y-110753373D01* X71003194Y-110749707D01* X70996821Y-110745764D01* X70990696Y-110741537D01* X70984769Y-110737016D01* X70978990Y-110732193D01* X70973310Y-110727062D01* X70967677Y-110721614D01* X70956355Y-110709734D01* X70947998Y-110699457D01* X70940385Y-110688836D01* X70933511Y-110677906D01* X70927370Y-110666698D01* X70921956Y-110655244D01* X70917262Y-110643578D01* X70913284Y-110631732D01* X70910016Y-110619739D01* X70907450Y-110607630D01* X70905582Y-110595438D01* X70904406Y-110583197D01* X70903916Y-110570938D01* X70904106Y-110558694D01* X70904970Y-110546497D01* X70906502Y-110534380D01* X70908697Y-110522376D01* X70911548Y-110510517D01* X70915050Y-110498835D01* X70919196Y-110487363D01* X70923982Y-110476133D01* X70929401Y-110465179D01* X70935447Y-110454532D01* X70942114Y-110444225D01* X70949397Y-110434291D01* X70957290Y-110424761D01* X70965786Y-110415669D01* X70974880Y-110407047D01* X70984567Y-110398928D01* X70994839Y-110391343D01* X71005692Y-110384327D01* X71017119Y-110377910D01* X71029115Y-110372126D01* X71035652Y-110369532D01* X71043343Y-110367203D01* X71062721Y-110363303D01* X71088307Y-110360359D01* X71121157Y-110358301D01* X71162329Y-110357062D01* X71212881Y-110356573D01* X71346351Y-110357574D01* G37* G36* X71973827Y-109713994D02* G01* X71977911Y-109714372D01* X71984236Y-109714532D01* X71990651Y-109715008D01* X71997143Y-109715791D01* X72003701Y-109716873D01* X72010313Y-109718244D01* X72016965Y-109719897D01* X72023646Y-109721822D01* X72030344Y-109724012D01* X72043740Y-109729151D01* X72057055Y-109735245D01* X72070191Y-109742225D01* X72083050Y-109750024D01* X72095534Y-109758574D01* X72107544Y-109767805D01* X72118983Y-109777651D01* X72129753Y-109788042D01* X72139756Y-109798910D01* X72148893Y-109810188D01* X72153106Y-109815959D01* X72157066Y-109821807D01* X72160761Y-109827723D01* X72164178Y-109833699D01* X72169606Y-109846176D01* X72174864Y-109859301D01* X72179781Y-109872631D01* X72184187Y-109885722D01* X72187910Y-109898131D01* X72189463Y-109903942D01* X72190781Y-109909415D01* X72191843Y-109914496D01* X72192628Y-109919130D01* X72193115Y-109923260D01* X72193282Y-109926832D01* X72193147Y-109930404D01* X72192748Y-109934534D01* X72192092Y-109939168D01* X72191190Y-109944249D01* X72190049Y-109949722D01* X72188678Y-109955532D01* X72185278Y-109967941D01* X72183267Y-109974429D01* X72181060Y-109981033D01* X72178666Y-109987695D01* X72176092Y-109994362D01* X72173348Y-110000978D01* X72170442Y-110007488D01* X72167382Y-110013835D01* X72164178Y-110019965D01* X72157034Y-110031857D01* X72148773Y-110043476D01* X72139506Y-110054754D01* X72129344Y-110065622D01* X72118397Y-110076014D01* X72106777Y-110085859D01* X72094594Y-110095090D01* X72081959Y-110103640D01* X72068982Y-110111439D01* X72055776Y-110118419D01* X72042450Y-110124513D01* X72029116Y-110129652D01* X72015884Y-110133767D01* X72002866Y-110136791D01* X71990171Y-110138656D01* X71983980Y-110139132D01* X71977911Y-110139292D01* X71971843Y-110139132D01* X71965652Y-110138656D01* X71959354Y-110137873D01* X71952962Y-110136791D01* X71946492Y-110135420D01* X71939957Y-110133767D01* X71933372Y-110131841D01* X71926751Y-110129652D01* X71913461Y-110124513D01* X71900200Y-110118419D01* X71887083Y-110111439D01* X71874227Y-110103640D01* X71861747Y-110095090D01* X71849756Y-110085859D01* X71838371Y-110076013D01* X71827706Y-110065622D01* X71822680Y-110060243D01* X71817877Y-110054754D01* X71813312Y-110049162D01* X71808999Y-110043476D01* X71804952Y-110037705D01* X71801186Y-110031857D01* X71797716Y-110025941D01* X71794555Y-110019965D01* X71791318Y-110013835D01* X71788166Y-110007488D01* X71785116Y-110000979D01* X71782186Y-109994363D01* X71779392Y-109987696D01* X71776751Y-109981033D01* X71774281Y-109974430D01* X71771999Y-109967942D01* X71769922Y-109961624D01* X71768066Y-109955533D01* X71766448Y-109949722D01* X71765087Y-109944249D01* X71763998Y-109939168D01* X71763200Y-109934534D01* X71762708Y-109930404D01* X71762540Y-109926832D01* X71762701Y-109920507D01* X71763177Y-109914093D01* X71763960Y-109907600D01* X71765041Y-109901042D01* X71766413Y-109894430D01* X71768066Y-109887778D01* X71769991Y-109881097D01* X71772181Y-109874399D01* X71777320Y-109861003D01* X71783413Y-109847688D01* X71790394Y-109834552D01* X71798193Y-109821693D01* X71806742Y-109809210D01* X71815974Y-109797199D01* X71825819Y-109785760D01* X71836210Y-109774990D01* X71847079Y-109764988D01* X71858357Y-109755851D01* X71864128Y-109751637D01* X71869976Y-109747677D01* X71875892Y-109743982D01* X71881867Y-109740565D01* X71887998Y-109737362D01* X71894350Y-109734307D01* X71900873Y-109731414D01* X71907515Y-109728696D01* X71914226Y-109726166D01* X71920953Y-109723836D01* X71927647Y-109721719D01* X71934255Y-109719829D01* X71940726Y-109718177D01* X71947011Y-109716776D01* X71953056Y-109715640D01* X71958811Y-109714781D01* X71964226Y-109714212D01* X71969248Y-109713945D01* X71973827Y-109713994D01* G37* G36* X72395129Y-110359097D02* G01* X72399260Y-110359594D01* X72401119Y-110359989D01* X72402832Y-110360484D01* X72409156Y-110360645D01* X72415571Y-110361121D01* X72422064Y-110361904D01* X72428622Y-110362985D01* X72435233Y-110364356D01* X72441886Y-110366009D01* X72448567Y-110367935D01* X72455265Y-110370125D01* X72468661Y-110375263D01* X72481976Y-110381357D01* X72495112Y-110388338D01* X72507971Y-110396137D01* X72520454Y-110404686D01* X72532465Y-110413917D01* X72543904Y-110423763D01* X72554674Y-110434154D01* X72564676Y-110445023D01* X72573813Y-110456300D01* X72578026Y-110462072D01* X72581986Y-110467919D01* X72585681Y-110473835D01* X72589098Y-110479811D01* X72594527Y-110492288D01* X72599785Y-110505414D01* X72604702Y-110518744D01* X72609108Y-110531835D01* X72612831Y-110544244D01* X72614383Y-110550054D01* X72615701Y-110555527D01* X72616764Y-110560608D01* X72617549Y-110565242D01* X72618036Y-110569372D01* X72618203Y-110572944D01* X72618068Y-110576516D01* X72617668Y-110580647D01* X72617013Y-110585280D01* X72616111Y-110590361D01* X72614970Y-110595835D01* X72613598Y-110601645D01* X72610199Y-110614054D01* X72608188Y-110620542D01* X72605981Y-110627145D01* X72603587Y-110633808D01* X72601013Y-110640475D01* X72598269Y-110647091D01* X72595363Y-110653600D01* X72592303Y-110659947D01* X72589098Y-110666077D01* X72581986Y-110677969D01* X72573813Y-110689588D01* X72564676Y-110700866D01* X72554674Y-110711735D01* X72543904Y-110722126D01* X72532465Y-110731971D01* X72520454Y-110741203D01* X72507970Y-110749752D01* X72495112Y-110757551D01* X72481976Y-110764532D01* X72468661Y-110770625D01* X72455265Y-110775764D01* X72441886Y-110779879D01* X72428622Y-110782904D01* X72415571Y-110784768D01* X72409156Y-110785244D01* X72402832Y-110785405D01* X72399260Y-110785237D01* X72395129Y-110784745D01* X72390496Y-110783947D01* X72385415Y-110782858D01* X72379941Y-110781497D01* X72374131Y-110779879D01* X72361722Y-110775946D01* X72348631Y-110771194D01* X72335301Y-110765759D01* X72328685Y-110762829D01* X72322176Y-110759779D01* X72315828Y-110756627D01* X72309698Y-110753390D01* X72297807Y-110746790D01* X72286188Y-110739065D01* X72274910Y-110730317D01* X72264041Y-110720648D01* X72253650Y-110710160D01* X72243805Y-110698956D01* X72234573Y-110687138D01* X72226024Y-110674809D01* X72218225Y-110662070D01* X72211245Y-110649024D01* X72205151Y-110635774D01* X72200012Y-110622421D01* X72195897Y-110609068D01* X72192873Y-110595818D01* X72191008Y-110582773D01* X72190532Y-110576358D01* X72190371Y-110570034D01* X72190532Y-110563709D01* X72191008Y-110557294D01* X72191791Y-110550802D01* X72192873Y-110544244D01* X72194244Y-110537632D01* X72195897Y-110530980D01* X72197822Y-110524299D01* X72200012Y-110517601D01* X72205151Y-110504205D01* X72211245Y-110490890D01* X72218225Y-110477754D01* X72226024Y-110464895D01* X72234573Y-110452412D01* X72243805Y-110440401D01* X72253650Y-110428962D01* X72264041Y-110418192D01* X72274910Y-110408190D01* X72286188Y-110399053D01* X72291959Y-110394839D01* X72297807Y-110390879D01* X72303723Y-110387184D01* X72309698Y-110383767D01* X72315828Y-110380564D01* X72322176Y-110377514D01* X72328685Y-110374635D01* X72335301Y-110371944D01* X72341968Y-110369457D01* X72348631Y-110367192D01* X72355234Y-110365165D01* X72361722Y-110363394D01* X72368040Y-110361897D01* X72374131Y-110360689D01* X72379941Y-110359788D01* X72385415Y-110359211D01* X72390496Y-110358975D01* X72395129Y-110359097D01* G37* G36* X74981461Y-111643978D02* G01* X74987786Y-111644138D01* X74994200Y-111644614D01* X75000693Y-111645397D01* X75007251Y-111646479D01* X75013862Y-111647850D01* X75020515Y-111649503D01* X75027196Y-111651429D01* X75033894Y-111653619D01* X75047290Y-111658757D01* X75060605Y-111664851D01* X75073741Y-111671831D01* X75086600Y-111679630D01* X75099083Y-111688180D01* X75111094Y-111697411D01* X75122533Y-111707257D01* X75133303Y-111717648D01* X75143305Y-111728516D01* X75152442Y-111739794D01* X75156655Y-111745565D01* X75160616Y-111751413D01* X75164310Y-111757329D01* X75167728Y-111763305D01* X75173156Y-111775782D01* X75178414Y-111788907D01* X75183331Y-111802237D01* X75187737Y-111815329D01* X75191460Y-111827738D01* X75193012Y-111833548D01* X75194331Y-111839021D01* X75195393Y-111844102D01* X75196178Y-111848736D01* X75196665Y-111852866D01* X75196832Y-111856438D01* X75196697Y-111860010D01* X75196297Y-111864140D01* X75195642Y-111868774D01* X75194740Y-111873855D01* X75193599Y-111879328D01* X75192227Y-111885139D01* X75188828Y-111897548D01* X75186817Y-111904036D01* X75184610Y-111910639D01* X75182216Y-111917302D01* X75179642Y-111923969D01* X75176898Y-111930585D01* X75173992Y-111937094D01* X75170932Y-111943442D01* X75167728Y-111949572D01* X75160616Y-111961463D01* X75152442Y-111973082D01* X75143305Y-111984360D01* X75133303Y-111995229D01* X75122533Y-112005620D01* X75111094Y-112015465D01* X75099083Y-112024697D01* X75086600Y-112033246D01* X75073741Y-112041045D01* X75060605Y-112048026D01* X75047290Y-112054119D01* X75033894Y-112059258D01* X75020515Y-112063374D01* X75007251Y-112066398D01* X74994200Y-112068262D01* X74987786Y-112068738D01* X74981461Y-112068899D01* X74975392Y-112068738D01* X74969202Y-112068262D01* X74962904Y-112067479D01* X74956512Y-112066398D01* X74950042Y-112065026D01* X74943507Y-112063374D01* X74936922Y-112061448D01* X74930301Y-112059258D01* X74917010Y-112054119D01* X74903749Y-112048026D01* X74890633Y-112041045D01* X74877777Y-112033246D01* X74865297Y-112024697D01* X74853306Y-112015465D01* X74841921Y-112005620D01* X74831256Y-111995229D01* X74826230Y-111989850D01* X74821427Y-111984360D01* X74816862Y-111978768D01* X74812549Y-111973082D01* X74808502Y-111967311D01* X74804736Y-111961463D01* X74801265Y-111955547D01* X74798104Y-111949572D01* X74794867Y-111943442D01* X74791715Y-111937094D01* X74788665Y-111930585D01* X74785735Y-111923969D01* X74782941Y-111917302D01* X74780301Y-111910639D01* X74777831Y-111904036D01* X74775549Y-111897548D01* X74773471Y-111891230D01* X74771615Y-111885139D01* X74769998Y-111879329D01* X74768636Y-111873855D01* X74767548Y-111868774D01* X74766749Y-111864141D01* X74766257Y-111860010D01* X74766090Y-111856438D01* X74766250Y-111850113D01* X74766726Y-111843699D01* X74767509Y-111837206D01* X74768591Y-111830648D01* X74769962Y-111824037D01* X74771615Y-111817384D01* X74773541Y-111810703D01* X74775731Y-111804005D01* X74780869Y-111790609D01* X74786963Y-111777294D01* X74793943Y-111764158D01* X74801743Y-111751300D01* X74810292Y-111738816D01* X74819523Y-111726806D01* X74829369Y-111715366D01* X74839760Y-111704597D01* X74850628Y-111694594D01* X74861906Y-111685457D01* X74867677Y-111681244D01* X74873525Y-111677284D01* X74879441Y-111673589D01* X74885417Y-111670172D01* X74897900Y-111664749D01* X74911065Y-111659531D01* X74924503Y-111654722D01* X74931197Y-111652534D01* X74937805Y-111650526D01* X74944276Y-111648723D01* X74950561Y-111647150D01* X74956606Y-111645833D01* X74962361Y-111644796D01* X74967776Y-111644067D01* X74972798Y-111643671D01* X74977377Y-111643632D01* X74981461Y-111643978D01* G37* G36* X73698471Y-110998026D02* G01* X73704886Y-110998502D01* X73711379Y-110999285D01* X73717937Y-111000366D01* X73724548Y-111001737D01* X73731201Y-111003390D01* X73737882Y-111005316D01* X73744580Y-111007506D01* X73757976Y-111012644D01* X73771291Y-111018738D01* X73784426Y-111025719D01* X73797285Y-111033518D01* X73809769Y-111042067D01* X73821779Y-111051298D01* X73833219Y-111061144D01* X73843988Y-111071535D01* X73853991Y-111082404D01* X73863128Y-111093681D01* X73867341Y-111099453D01* X73871301Y-111105300D01* X73874996Y-111111216D01* X73878413Y-111117192D01* X73883842Y-111129669D01* X73889100Y-111142795D01* X73894017Y-111156124D01* X73898422Y-111169216D01* X73902146Y-111181625D01* X73903698Y-111187435D01* X73905016Y-111192908D01* X73906079Y-111197989D01* X73906864Y-111202623D01* X73907350Y-111206753D01* X73907517Y-111210325D01* X73907357Y-111216394D01* X73906881Y-111222584D01* X73906098Y-111228883D01* X73905016Y-111235274D01* X73903645Y-111241745D01* X73901992Y-111248279D01* X73900067Y-111254864D01* X73897877Y-111261485D01* X73892738Y-111274776D01* X73886644Y-111288037D01* X73879664Y-111301153D01* X73871865Y-111314009D01* X73863315Y-111326490D01* X73854084Y-111338480D01* X73844238Y-111349865D01* X73833847Y-111360530D01* X73828468Y-111365556D01* X73822979Y-111370359D01* X73817387Y-111374924D01* X73811701Y-111379238D01* X73805930Y-111383284D01* X73800082Y-111387050D01* X73794166Y-111390521D01* X73788190Y-111393682D01* X73782060Y-111396919D01* X73775713Y-111400071D01* X73769204Y-111403121D01* X73762588Y-111406051D01* X73755921Y-111408845D01* X73749258Y-111411485D01* X73742655Y-111413955D01* X73736167Y-111416238D01* X73729849Y-111418315D01* X73723758Y-111420171D01* X73717947Y-111421788D01* X73712474Y-111423150D01* X73707393Y-111424238D01* X73702759Y-111425037D01* X73698629Y-111425529D01* X73695057Y-111425697D01* X73688988Y-111425536D01* X73682798Y-111425060D01* X73676499Y-111424277D01* X73670108Y-111423195D01* X73663638Y-111421824D01* X73657103Y-111420171D01* X73650518Y-111418246D01* X73643897Y-111416056D01* X73630606Y-111410917D01* X73617345Y-111404823D01* X73604229Y-111397843D01* X73591373Y-111390044D01* X73578892Y-111381494D01* X73566902Y-111372263D01* X73555517Y-111362417D01* X73544852Y-111352026D01* X73539826Y-111346647D01* X73535023Y-111341158D01* X73530458Y-111335566D01* X73526145Y-111329880D01* X73522098Y-111324109D01* X73518332Y-111318261D01* X73514862Y-111312345D01* X73511701Y-111306369D01* X73508463Y-111300239D01* X73505311Y-111293892D01* X73502262Y-111287383D01* X73499331Y-111280767D01* X73496537Y-111274100D01* X73493897Y-111267437D01* X73491427Y-111260834D01* X73489145Y-111254346D01* X73487067Y-111248028D01* X73485211Y-111241937D01* X73483594Y-111236127D01* X73482233Y-111230653D01* X73481144Y-111225572D01* X73480345Y-111220939D01* X73479854Y-111216808D01* X73479686Y-111213236D01* X73479847Y-111206911D01* X73480323Y-111200497D01* X73481106Y-111194004D01* X73482187Y-111187446D01* X73483558Y-111180835D01* X73485211Y-111174182D01* X73487137Y-111167501D01* X73489327Y-111160803D01* X73494465Y-111147407D01* X73500559Y-111134092D01* X73507540Y-111120956D01* X73515339Y-111108097D01* X73523888Y-111095614D01* X73533119Y-111083603D01* X73542965Y-111072164D01* X73553356Y-111061394D01* X73564225Y-111051392D01* X73575502Y-111042255D01* X73581274Y-111038042D01* X73587121Y-111034081D01* X73593037Y-111030387D01* X73599013Y-111026970D01* X73611371Y-111021541D01* X73624206Y-111016283D01* X73637178Y-111011366D01* X73649945Y-111006960D01* X73656146Y-111005003D01* X73662167Y-111003237D01* X73667966Y-111001684D01* X73673502Y-111000366D01* X73678730Y-110999304D01* X73683609Y-110998519D01* X73688095Y-110998032D01* X73692147Y-110997865D01* X73698471Y-110998026D01* G37* D13* X60957036Y-75577819D02* X60957036Y-75815914D01* X60718941Y-75720676D02* X60957036Y-75815914D01* X60957036Y-75815914D02* X61195131Y-75720676D01* X60814179Y-76006390D02* X60957036Y-75815914D01* X60957036Y-75815914D02* X61099893Y-76006390D01* X84210760Y-46681095D02* X84210760Y-45881095D01* X84210760Y-45881095D02* X84515522Y-45881095D01* X84515522Y-45881095D02* X84591712Y-45919190D01* X84591712Y-45919190D02* X84629807Y-45957285D01* X84629807Y-45957285D02* X84667903Y-46033476D01* X84667903Y-46033476D02* X84667903Y-46147761D01* X84667903Y-46147761D02* X84629807Y-46223952D01* X84629807Y-46223952D02* X84591712Y-46262047D01* X84591712Y-46262047D02* X84515522Y-46300142D01* X84515522Y-46300142D02* X84210760Y-46300142D01* X85467903Y-46604904D02* X85429807Y-46643000D01* X85429807Y-46643000D02* X85315522Y-46681095D01* X85315522Y-46681095D02* X85239331Y-46681095D01* X85239331Y-46681095D02* X85125045Y-46643000D01* X85125045Y-46643000D02* X85048855Y-46566809D01* X85048855Y-46566809D02* X85010760Y-46490619D01* X85010760Y-46490619D02* X84972664Y-46338238D01* X84972664Y-46338238D02* X84972664Y-46223952D01* X84972664Y-46223952D02* X85010760Y-46071571D01* X85010760Y-46071571D02* X85048855Y-45995380D01* X85048855Y-45995380D02* X85125045Y-45919190D01* X85125045Y-45919190D02* X85239331Y-45881095D01* X85239331Y-45881095D02* X85315522Y-45881095D01* X85315522Y-45881095D02* X85429807Y-45919190D01* X85429807Y-45919190D02* X85467903Y-45957285D01* X86839331Y-46681095D02* X86382188Y-46681095D01* X86610760Y-46681095D02* X86610760Y-45881095D01* X86610760Y-45881095D02* X86534569Y-45995380D01* X86534569Y-45995380D02* X86458379Y-46071571D01* X86458379Y-46071571D02* X86382188Y-46109666D01* X64741541Y-52039819D02* X65027255Y-52135057D01* X65027255Y-52135057D02* X65122493Y-52230295D01* X65122493Y-52230295D02* X65217731Y-52420771D01* X65217731Y-52420771D02* X65217731Y-52706485D01* X65217731Y-52706485D02* X65122493Y-52896961D01* X65122493Y-52896961D02* X65027255Y-52992200D01* X65027255Y-52992200D02* X64836779Y-53087438D01* X64836779Y-53087438D02* X64074874Y-53087438D01* X64074874Y-53087438D02* X64074874Y-51087438D01* X64074874Y-51087438D02* X64741541Y-51087438D01* X64741541Y-51087438D02* X64932017Y-51182676D01* X64932017Y-51182676D02* X65027255Y-51277914D01* X65027255Y-51277914D02* X65122493Y-51468390D01* X65122493Y-51468390D02* X65122493Y-51658866D01* X65122493Y-51658866D02* X65027255Y-51849342D01* X65027255Y-51849342D02* X64932017Y-51944580D01* X64932017Y-51944580D02* X64741541Y-52039819D01* X64741541Y-52039819D02* X64074874Y-52039819D01* X97127235Y-101494431D02* X97046423Y-101521368D01* X97046423Y-101521368D02* X96965611Y-101602180D01* X96965611Y-101602180D02* X96911736Y-101709930D01* X96911736Y-101709930D02* X96911736Y-101817680D01* X96911736Y-101817680D02* X96938673Y-101898492D01* X96938673Y-101898492D02* X97019485Y-102033179D01* X97019485Y-102033179D02* X97100298Y-102113991D01* X97100298Y-102113991D02* X97234985Y-102194803D01* X97234985Y-102194803D02* X97315797Y-102221741D01* X97315797Y-102221741D02* X97423546Y-102221741D01* X97423546Y-102221741D02* X97531296Y-102167866D01* X97531296Y-102167866D02* X97585171Y-102113991D01* X97585171Y-102113991D02* X97639046Y-102006241D01* X97639046Y-102006241D02* X97639046Y-101952367D01* X97639046Y-101952367D02* X97450484Y-101763805D01* X97450484Y-101763805D02* X97342734Y-101871554D01* X97935357Y-101763805D02* X97369672Y-101198119D01* X97369672Y-101198119D02* X98258606Y-101440556D01* X98258606Y-101440556D02* X97692920Y-100874871D01* X98527980Y-101171182D02* X97962294Y-100605497D01* X97962294Y-100605497D02* X98096981Y-100470810D01* X98096981Y-100470810D02* X98204731Y-100416935D01* X98204731Y-100416935D02* X98312480Y-100416935D01* X98312480Y-100416935D02* X98393293Y-100443872D01* X98393293Y-100443872D02* X98527980Y-100524685D01* X98527980Y-100524685D02* X98608792Y-100605497D01* X98608792Y-100605497D02* X98689604Y-100740184D01* X98689604Y-100740184D02* X98716541Y-100820996D01* X98716541Y-100820996D02* X98716541Y-100928746D01* X98716541Y-100928746D02* X98662667Y-101036495D01* X98662667Y-101036495D02* X98527980Y-101171182D01* X97503189Y-104120223D02* X97503189Y-104174098D01* X97503189Y-104174098D02* X97449314Y-104281848D01* X97449314Y-104281848D02* X97395439Y-104335722D01* X97395439Y-104335722D02* X97287690Y-104389597D01* X97287690Y-104389597D02* X97179940Y-104389597D01* X97179940Y-104389597D02* X97099128Y-104362660D01* X97099128Y-104362660D02* X96964441Y-104281848D01* X96964441Y-104281848D02* X96883629Y-104201035D01* X96883629Y-104201035D02* X96802817Y-104066348D01* X96802817Y-104066348D02* X96775879Y-103985536D01* X96775879Y-103985536D02* X96775879Y-103877787D01* X96775879Y-103877787D02* X96829754Y-103770037D01* X96829754Y-103770037D02* X96883629Y-103716162D01* X96883629Y-103716162D02* X96991378Y-103662287D01* X96991378Y-103662287D02* X97045253Y-103662287D01* X98068874Y-103662287D02* X97799500Y-103931661D01* X97799500Y-103931661D02* X97233815Y-103365976D01* X98257436Y-103473726D02* X97691751Y-102908040D01* X98580685Y-103150477D02* X98015000Y-103069665D01* X98015000Y-102584791D02* X98015000Y-103231289D01* X62450453Y-101079109D02* X61884767Y-100513423D01* X61884767Y-100513423D02* X62019454Y-100378736D01* X62019454Y-100378736D02* X62127204Y-100324862D01* X62127204Y-100324862D02* X62234954Y-100324862D01* X62234954Y-100324862D02* X62315766Y-100351799D01* X62315766Y-100351799D02* X62450453Y-100432611D01* X62450453Y-100432611D02* X62531265Y-100513423D01* X62531265Y-100513423D02* X62612077Y-100648111D01* X62612077Y-100648111D02* X62639015Y-100728923D01* X62639015Y-100728923D02* X62639015Y-100836672D01* X62639015Y-100836672D02* X62585140Y-100944422D01* X62585140Y-100944422D02* X62450453Y-101079109D01* X62827577Y-100378736D02* X63096951Y-100109362D01* X62935326Y-100594236D02* X62558203Y-99839988D01* X62558203Y-99839988D02* X63312450Y-100217112D01* X62854514Y-99543677D02* X63177763Y-99220428D01* X63581824Y-99947738D02* X63016138Y-99382053D01* X63743448Y-99462865D02* X64012822Y-99193491D01* X63851198Y-99678364D02* X63474074Y-98924117D01* X63474074Y-98924117D02* X64228321Y-99301241D01* X73428436Y-75577819D02* X73428436Y-75815914D01* X73190341Y-75720676D02* X73428436Y-75815914D01* X73428436Y-75815914D02* X73666531Y-75720676D01* X73285579Y-76006390D02* X73428436Y-75815914D01* X73428436Y-75815914D02* X73571293Y-76006390D01* X69313636Y-52516009D02* X70266017Y-52516009D01* X69123160Y-53087438D02* X69789826Y-51087438D01* X69789826Y-51087438D02* X70456493Y-53087438D01* X62705189Y-104882223D02* X62705189Y-104936098D01* X62705189Y-104936098D02* X62651314Y-105043848D01* X62651314Y-105043848D02* X62597439Y-105097722D01* X62597439Y-105097722D02* X62489690Y-105151597D01* X62489690Y-105151597D02* X62381940Y-105151597D01* X62381940Y-105151597D02* X62301128Y-105124660D01* X62301128Y-105124660D02* X62166441Y-105043848D01* X62166441Y-105043848D02* X62085629Y-104963035D01* X62085629Y-104963035D02* X62004817Y-104828348D01* X62004817Y-104828348D02* X61977879Y-104747536D01* X61977879Y-104747536D02* X61977879Y-104639787D01* X61977879Y-104639787D02* X62031754Y-104532037D01* X62031754Y-104532037D02* X62085629Y-104478162D01* X62085629Y-104478162D02* X62193378Y-104424287D01* X62193378Y-104424287D02* X62247253Y-104424287D01* X63270874Y-104424287D02* X63001500Y-104693661D01* X63001500Y-104693661D02* X62435815Y-104127976D01* X63459436Y-104235726D02* X62893751Y-103670040D01* X63782685Y-103912477D02* X63217000Y-103831665D01* X63217000Y-103346791D02* X63217000Y-103993289D01* X62329235Y-102256431D02* X62248423Y-102283368D01* X62248423Y-102283368D02* X62167611Y-102364180D01* X62167611Y-102364180D02* X62113736Y-102471930D01* X62113736Y-102471930D02* X62113736Y-102579680D01* X62113736Y-102579680D02* X62140673Y-102660492D01* X62140673Y-102660492D02* X62221485Y-102795179D01* X62221485Y-102795179D02* X62302298Y-102875991D01* X62302298Y-102875991D02* X62436985Y-102956803D01* X62436985Y-102956803D02* X62517797Y-102983741D01* X62517797Y-102983741D02* X62625546Y-102983741D01* X62625546Y-102983741D02* X62733296Y-102929866D01* X62733296Y-102929866D02* X62787171Y-102875991D01* X62787171Y-102875991D02* X62841046Y-102768241D01* X62841046Y-102768241D02* X62841046Y-102714367D01* X62841046Y-102714367D02* X62652484Y-102525805D01* X62652484Y-102525805D02* X62544734Y-102633554D01* X63137357Y-102525805D02* X62571672Y-101960119D01* X62571672Y-101960119D02* X63460606Y-102202556D01* X63460606Y-102202556D02* X62894920Y-101636871D01* X63729980Y-101933182D02* X63164294Y-101367497D01* X63164294Y-101367497D02* X63298981Y-101232810D01* X63298981Y-101232810D02* X63406731Y-101178935D01* X63406731Y-101178935D02* X63514480Y-101178935D01* X63514480Y-101178935D02* X63595293Y-101205872D01* X63595293Y-101205872D02* X63729980Y-101286685D01* X63729980Y-101286685D02* X63810792Y-101367497D01* X63810792Y-101367497D02* X63891604Y-101502184D01* X63891604Y-101502184D02* X63918541Y-101582996D01* X63918541Y-101582996D02* X63918541Y-101690746D01* X63918541Y-101690746D02* X63864667Y-101798495D01* X63864667Y-101798495D02* X63729980Y-101933182D01* X47685560Y-46681095D02* X47685560Y-45881095D01* X47685560Y-45881095D02* X47990322Y-45881095D01* X47990322Y-45881095D02* X48066512Y-45919190D01* X48066512Y-45919190D02* X48104607Y-45957285D01* X48104607Y-45957285D02* X48142703Y-46033476D01* X48142703Y-46033476D02* X48142703Y-46147761D01* X48142703Y-46147761D02* X48104607Y-46223952D01* X48104607Y-46223952D02* X48066512Y-46262047D01* X48066512Y-46262047D02* X47990322Y-46300142D01* X47990322Y-46300142D02* X47685560Y-46300142D01* X48942703Y-46604904D02* X48904607Y-46643000D01* X48904607Y-46643000D02* X48790322Y-46681095D01* X48790322Y-46681095D02* X48714131Y-46681095D01* X48714131Y-46681095D02* X48599845Y-46643000D01* X48599845Y-46643000D02* X48523655Y-46566809D01* X48523655Y-46566809D02* X48485560Y-46490619D01* X48485560Y-46490619D02* X48447464Y-46338238D01* X48447464Y-46338238D02* X48447464Y-46223952D01* X48447464Y-46223952D02* X48485560Y-46071571D01* X48485560Y-46071571D02* X48523655Y-45995380D01* X48523655Y-45995380D02* X48599845Y-45919190D01* X48599845Y-45919190D02* X48714131Y-45881095D01* X48714131Y-45881095D02* X48790322Y-45881095D01* X48790322Y-45881095D02* X48904607Y-45919190D01* X48904607Y-45919190D02* X48942703Y-45957285D01* X49856988Y-45957285D02* X49895084Y-45919190D01* X49895084Y-45919190D02* X49971274Y-45881095D01* X49971274Y-45881095D02* X50161750Y-45881095D01* X50161750Y-45881095D02* X50237941Y-45919190D01* X50237941Y-45919190D02* X50276036Y-45957285D01* X50276036Y-45957285D02* X50314131Y-46033476D01* X50314131Y-46033476D02* X50314131Y-46109666D01* X50314131Y-46109666D02* X50276036Y-46223952D01* X50276036Y-46223952D02* X49818893Y-46681095D01* X49818893Y-46681095D02* X50314131Y-46681095D01* X84582095Y-68288819D02* X84582095Y-69098342D01* X84582095Y-69098342D02* X84629714Y-69193580D01* X84629714Y-69193580D02* X84677333Y-69241200D01* X84677333Y-69241200D02* X84772571Y-69288819D01* X84772571Y-69288819D02* X84963047Y-69288819D01* X84963047Y-69288819D02* X85058285Y-69241200D01* X85058285Y-69241200D02* X85105904Y-69193580D01* X85105904Y-69193580D02* X85153523Y-69098342D01* X85153523Y-69098342D02* X85153523Y-68288819D01* X86153523Y-69288819D02* X85582095Y-69288819D01* X85867809Y-69288819D02* X85867809Y-68288819D01* X85867809Y-68288819D02* X85772571Y-68431676D01* X85772571Y-68431676D02* X85677333Y-68526914D01* X85677333Y-68526914D02* X85582095Y-68574533D01* X97441998Y-78124868D02* X97361185Y-78151805D01* X97361185Y-78151805D02* X97280373Y-78232618D01* X97280373Y-78232618D02* X97226498Y-78340367D01* X97226498Y-78340367D02* X97226498Y-78448117D01* X97226498Y-78448117D02* X97253436Y-78528929D01* X97253436Y-78528929D02* X97334248Y-78663616D01* X97334248Y-78663616D02* X97415060Y-78744428D01* X97415060Y-78744428D02* X97549747Y-78825241D01* X97549747Y-78825241D02* X97630560Y-78852178D01* X97630560Y-78852178D02* X97738309Y-78852178D01* X97738309Y-78852178D02* X97846059Y-78798303D01* X97846059Y-78798303D02* X97899934Y-78744428D01* X97899934Y-78744428D02* X97953808Y-78636679D01* X97953808Y-78636679D02* X97953808Y-78582804D01* X97953808Y-78582804D02* X97765247Y-78394242D01* X97765247Y-78394242D02* X97657497Y-78501992D01* X98250120Y-78394242D02* X97684434Y-77828557D01* X97684434Y-77828557D02* X97899934Y-77613057D01* X97899934Y-77613057D02* X97980746Y-77586120D01* X97980746Y-77586120D02* X98034621Y-77586120D01* X98034621Y-77586120D02* X98115433Y-77613057D01* X98115433Y-77613057D02* X98196245Y-77693870D01* X98196245Y-77693870D02* X98223182Y-77774682D01* X98223182Y-77774682D02* X98223182Y-77828557D01* X98223182Y-77828557D02* X98196245Y-77909369D01* X98196245Y-77909369D02* X97980746Y-78124868D01* X98277057Y-77343683D02* X98277057Y-77289809D01* X98277057Y-77289809D02* X98303995Y-77208996D01* X98303995Y-77208996D02* X98438682Y-77074309D01* X98438682Y-77074309D02* X98519494Y-77047372D01* X98519494Y-77047372D02* X98573369Y-77047372D01* X98573369Y-77047372D02* X98654181Y-77074309D01* X98654181Y-77074309D02* X98708056Y-77128184D01* X98708056Y-77128184D02* X98761930Y-77235934D01* X98761930Y-77235934D02* X98761930Y-77882431D01* X98761930Y-77882431D02* X99112117Y-77532245D01* X99650865Y-76993497D02* X99327616Y-77316746D01* X99489240Y-77155121D02* X98923555Y-76589436D01* X98923555Y-76589436D02* X98950492Y-76724123D01* X98950492Y-76724123D02* X98950492Y-76831873D01* X98950492Y-76831873D02* X98923555Y-76912685D01* X71857372Y-70225494D02* X71776560Y-70252431D01* X71776560Y-70252431D02* X71695748Y-70333243D01* X71695748Y-70333243D02* X71641873Y-70440993D01* X71641873Y-70440993D02* X71641873Y-70548742D01* X71641873Y-70548742D02* X71668810Y-70629555D01* X71668810Y-70629555D02* X71749623Y-70764242D01* X71749623Y-70764242D02* X71830435Y-70845054D01* X71830435Y-70845054D02* X71965122Y-70925866D01* X71965122Y-70925866D02* X72045934Y-70952803D01* X72045934Y-70952803D02* X72153684Y-70952803D01* X72153684Y-70952803D02* X72261433Y-70898929D01* X72261433Y-70898929D02* X72315308Y-70845054D01* X72315308Y-70845054D02* X72369183Y-70737304D01* X72369183Y-70737304D02* X72369183Y-70683429D01* X72369183Y-70683429D02* X72180621Y-70494868D01* X72180621Y-70494868D02* X72072871Y-70602617D01* X72665494Y-70494868D02* X72099809Y-69929182D01* X72099809Y-69929182D02* X72315308Y-69713683D01* X72315308Y-69713683D02* X72396120Y-69686746D01* X72396120Y-69686746D02* X72449995Y-69686746D01* X72449995Y-69686746D02* X72530807Y-69713683D01* X72530807Y-69713683D02* X72611619Y-69794495D01* X72611619Y-69794495D02* X72638557Y-69875307D01* X72638557Y-69875307D02* X72638557Y-69929182D01* X72638557Y-69929182D02* X72611619Y-70009994D01* X72611619Y-70009994D02* X72396120Y-70225494D01* X72988743Y-69525121D02* X72907931Y-69552059D01* X72907931Y-69552059D02* X72854056Y-69552059D01* X72854056Y-69552059D02* X72773244Y-69525121D01* X72773244Y-69525121D02* X72746306Y-69498184D01* X72746306Y-69498184D02* X72719369Y-69417372D01* X72719369Y-69417372D02* X72719369Y-69363497D01* X72719369Y-69363497D02* X72746306Y-69282685D01* X72746306Y-69282685D02* X72854056Y-69174935D01* X72854056Y-69174935D02* X72934868Y-69147998D01* X72934868Y-69147998D02* X72988743Y-69147998D01* X72988743Y-69147998D02* X73069555Y-69174935D01* X73069555Y-69174935D02* X73096493Y-69201872D01* X73096493Y-69201872D02* X73123430Y-69282685D01* X73123430Y-69282685D02* X73123430Y-69336559D01* X73123430Y-69336559D02* X73096493Y-69417372D01* X73096493Y-69417372D02* X72988743Y-69525121D01* X72988743Y-69525121D02* X72961806Y-69605933D01* X72961806Y-69605933D02* X72961806Y-69659808D01* X72961806Y-69659808D02* X72988743Y-69740620D01* X72988743Y-69740620D02* X73096493Y-69848370D01* X73096493Y-69848370D02* X73177305Y-69875307D01* X73177305Y-69875307D02* X73231180Y-69875307D01* X73231180Y-69875307D02* X73311992Y-69848370D01* X73311992Y-69848370D02* X73419741Y-69740620D01* X73419741Y-69740620D02* X73446679Y-69659808D01* X73446679Y-69659808D02* X73446679Y-69605933D01* X73446679Y-69605933D02* X73419741Y-69525121D01* X73419741Y-69525121D02* X73311992Y-69417372D01* X73311992Y-69417372D02* X73231180Y-69390434D01* X73231180Y-69390434D02* X73177305Y-69390434D01* X73177305Y-69390434D02* X73096493Y-69417372D01* X71187998Y-80654868D02* X71107185Y-80681805D01* X71107185Y-80681805D02* X71026373Y-80762618D01* X71026373Y-80762618D02* X70972498Y-80870367D01* X70972498Y-80870367D02* X70972498Y-80978117D01* X70972498Y-80978117D02* X70999436Y-81058929D01* X70999436Y-81058929D02* X71080248Y-81193616D01* X71080248Y-81193616D02* X71161060Y-81274428D01* X71161060Y-81274428D02* X71295747Y-81355241D01* X71295747Y-81355241D02* X71376560Y-81382178D01* X71376560Y-81382178D02* X71484309Y-81382178D01* X71484309Y-81382178D02* X71592059Y-81328303D01* X71592059Y-81328303D02* X71645934Y-81274428D01* X71645934Y-81274428D02* X71699808Y-81166679D01* X71699808Y-81166679D02* X71699808Y-81112804D01* X71699808Y-81112804D02* X71511247Y-80924242D01* X71511247Y-80924242D02* X71403497Y-81031992D01* X71996120Y-80924242D02* X71430434Y-80358557D01* X71430434Y-80358557D02* X71645934Y-80143057D01* X71645934Y-80143057D02* X71726746Y-80116120D01* X71726746Y-80116120D02* X71780621Y-80116120D01* X71780621Y-80116120D02* X71861433Y-80143057D01* X71861433Y-80143057D02* X71942245Y-80223870D01* X71942245Y-80223870D02* X71969182Y-80304682D01* X71969182Y-80304682D02* X71969182Y-80358557D01* X71969182Y-80358557D02* X71942245Y-80439369D01* X71942245Y-80439369D02* X71726746Y-80654868D01* X72858117Y-80062245D02* X72534868Y-80385494D01* X72696492Y-80223870D02* X72130807Y-79658184D01* X72130807Y-79658184D02* X72157744Y-79792871D01* X72157744Y-79792871D02* X72157744Y-79900621D01* X72157744Y-79900621D02* X72130807Y-79981433D01* X73396865Y-79523497D02* X73073616Y-79846746D01* X73235240Y-79685121D02* X72669555Y-79119436D01* X72669555Y-79119436D02* X72696492Y-79254123D01* X72696492Y-79254123D02* X72696492Y-79361873D01* X72696492Y-79361873D02* X72669555Y-79442685D01* X71857372Y-60065494D02* X71776560Y-60092431D01* X71776560Y-60092431D02* X71695748Y-60173243D01* X71695748Y-60173243D02* X71641873Y-60280993D01* X71641873Y-60280993D02* X71641873Y-60388742D01* X71641873Y-60388742D02* X71668810Y-60469555D01* X71668810Y-60469555D02* X71749623Y-60604242D01* X71749623Y-60604242D02* X71830435Y-60685054D01* X71830435Y-60685054D02* X71965122Y-60765866D01* X71965122Y-60765866D02* X72045934Y-60792803D01* X72045934Y-60792803D02* X72153684Y-60792803D01* X72153684Y-60792803D02* X72261433Y-60738929D01* X72261433Y-60738929D02* X72315308Y-60685054D01* X72315308Y-60685054D02* X72369183Y-60577304D01* X72369183Y-60577304D02* X72369183Y-60523429D01* X72369183Y-60523429D02* X72180621Y-60334868D01* X72180621Y-60334868D02* X72072871Y-60442617D01* X72665494Y-60334868D02* X72099809Y-59769182D01* X72099809Y-59769182D02* X72315308Y-59553683D01* X72315308Y-59553683D02* X72396120Y-59526746D01* X72396120Y-59526746D02* X72449995Y-59526746D01* X72449995Y-59526746D02* X72530807Y-59553683D01* X72530807Y-59553683D02* X72611619Y-59634495D01* X72611619Y-59634495D02* X72638557Y-59715307D01* X72638557Y-59715307D02* X72638557Y-59769182D01* X72638557Y-59769182D02* X72611619Y-59849994D01* X72611619Y-59849994D02* X72396120Y-60065494D01* X72934868Y-58934123D02* X72665494Y-59203497D01* X72665494Y-59203497D02* X72907931Y-59499808D01* X72907931Y-59499808D02* X72907931Y-59445933D01* X72907931Y-59445933D02* X72934868Y-59365121D01* X72934868Y-59365121D02* X73069555Y-59230434D01* X73069555Y-59230434D02* X73150367Y-59203497D01* X73150367Y-59203497D02* X73204242Y-59203497D01* X73204242Y-59203497D02* X73285054Y-59230434D01* X73285054Y-59230434D02* X73419741Y-59365121D01* X73419741Y-59365121D02* X73446679Y-59445933D01* X73446679Y-59445933D02* X73446679Y-59499808D01* X73446679Y-59499808D02* X73419741Y-59580620D01* X73419741Y-59580620D02* X73285054Y-59715307D01* X73285054Y-59715307D02* X73204242Y-59742245D01* X73204242Y-59742245D02* X73150367Y-59742245D01* X71957372Y-67655494D02* X71876560Y-67682431D01* X71876560Y-67682431D02* X71795748Y-67763243D01* X71795748Y-67763243D02* X71741873Y-67870993D01* X71741873Y-67870993D02* X71741873Y-67978742D01* X71741873Y-67978742D02* X71768810Y-68059555D01* X71768810Y-68059555D02* X71849623Y-68194242D01* X71849623Y-68194242D02* X71930435Y-68275054D01* X71930435Y-68275054D02* X72065122Y-68355866D01* X72065122Y-68355866D02* X72145934Y-68382803D01* X72145934Y-68382803D02* X72253684Y-68382803D01* X72253684Y-68382803D02* X72361433Y-68328929D01* X72361433Y-68328929D02* X72415308Y-68275054D01* X72415308Y-68275054D02* X72469183Y-68167304D01* X72469183Y-68167304D02* X72469183Y-68113429D01* X72469183Y-68113429D02* X72280621Y-67924868D01* X72280621Y-67924868D02* X72172871Y-68032617D01* X72765494Y-67924868D02* X72199809Y-67359182D01* X72199809Y-67359182D02* X72415308Y-67143683D01* X72415308Y-67143683D02* X72496120Y-67116746D01* X72496120Y-67116746D02* X72549995Y-67116746D01* X72549995Y-67116746D02* X72630807Y-67143683D01* X72630807Y-67143683D02* X72711619Y-67224495D01* X72711619Y-67224495D02* X72738557Y-67305307D01* X72738557Y-67305307D02* X72738557Y-67359182D01* X72738557Y-67359182D02* X72711619Y-67439994D01* X72711619Y-67439994D02* X72496120Y-67655494D01* X72711619Y-66847372D02* X73088743Y-66470248D01* X73088743Y-66470248D02* X73411992Y-67278370D01* X97248453Y-100317109D02* X96682767Y-99751423D01* X96682767Y-99751423D02* X96817454Y-99616736D01* X96817454Y-99616736D02* X96925204Y-99562862D01* X96925204Y-99562862D02* X97032954Y-99562862D01* X97032954Y-99562862D02* X97113766Y-99589799D01* X97113766Y-99589799D02* X97248453Y-99670611D01* X97248453Y-99670611D02* X97329265Y-99751423D01* X97329265Y-99751423D02* X97410077Y-99886111D01* X97410077Y-99886111D02* X97437015Y-99966923D01* X97437015Y-99966923D02* X97437015Y-100074672D01* X97437015Y-100074672D02* X97383140Y-100182422D01* X97383140Y-100182422D02* X97248453Y-100317109D01* X97625577Y-99616736D02* X97894951Y-99347362D01* X97733326Y-99832236D02* X97356203Y-99077988D01* X97356203Y-99077988D02* X98110450Y-99455112D01* X97652514Y-98781677D02* X97975763Y-98458428D01* X98379824Y-99185738D02* X97814138Y-98620053D01* X98541448Y-98700865D02* X98810822Y-98431491D01* X98649198Y-98916364D02* X98272074Y-98162117D01* X98272074Y-98162117D02* X99026321Y-98539241D01* X71333998Y-78114868D02* X71253185Y-78141805D01* X71253185Y-78141805D02* X71172373Y-78222618D01* X71172373Y-78222618D02* X71118498Y-78330367D01* X71118498Y-78330367D02* X71118498Y-78438117D01* X71118498Y-78438117D02* X71145436Y-78518929D01* X71145436Y-78518929D02* X71226248Y-78653616D01* X71226248Y-78653616D02* X71307060Y-78734428D01* X71307060Y-78734428D02* X71441747Y-78815241D01* X71441747Y-78815241D02* X71522560Y-78842178D01* X71522560Y-78842178D02* X71630309Y-78842178D01* X71630309Y-78842178D02* X71738059Y-78788303D01* X71738059Y-78788303D02* X71791934Y-78734428D01* X71791934Y-78734428D02* X71845808Y-78626679D01* X71845808Y-78626679D02* X71845808Y-78572804D01* X71845808Y-78572804D02* X71657247Y-78384242D01* X71657247Y-78384242D02* X71549497Y-78491992D01* X72142120Y-78384242D02* X71576434Y-77818557D01* X71576434Y-77818557D02* X71791934Y-77603057D01* X71791934Y-77603057D02* X71872746Y-77576120D01* X71872746Y-77576120D02* X71926621Y-77576120D01* X71926621Y-77576120D02* X72007433Y-77603057D01* X72007433Y-77603057D02* X72088245Y-77683870D01* X72088245Y-77683870D02* X72115182Y-77764682D01* X72115182Y-77764682D02* X72115182Y-77818557D01* X72115182Y-77818557D02* X72088245Y-77899369D01* X72088245Y-77899369D02* X71872746Y-78114868D01* X73004117Y-77522245D02* X72680868Y-77845494D01* X72842492Y-77683870D02* X72276807Y-77118184D01* X72276807Y-77118184D02* X72303744Y-77252871D01* X72303744Y-77252871D02* X72303744Y-77360621D01* X72303744Y-77360621D02* X72276807Y-77441433D01* X72788618Y-76606373D02* X72842492Y-76552499D01* X72842492Y-76552499D02* X72923305Y-76525561D01* X72923305Y-76525561D02* X72977179Y-76525561D01* X72977179Y-76525561D02* X73057992Y-76552499D01* X73057992Y-76552499D02* X73192679Y-76633311D01* X73192679Y-76633311D02* X73327366Y-76767998D01* X73327366Y-76767998D02* X73408178Y-76902685D01* X73408178Y-76902685D02* X73435115Y-76983497D01* X73435115Y-76983497D02* X73435115Y-77037372D01* X73435115Y-77037372D02* X73408178Y-77118184D01* X73408178Y-77118184D02* X73354303Y-77172059D01* X73354303Y-77172059D02* X73273491Y-77198996D01* X73273491Y-77198996D02* X73219616Y-77198996D01* X73219616Y-77198996D02* X73138804Y-77172059D01* X73138804Y-77172059D02* X73004117Y-77091247D01* X73004117Y-77091247D02* X72869430Y-76956560D01* X72869430Y-76956560D02* X72788618Y-76821873D01* X72788618Y-76821873D02* X72761680Y-76741060D01* X72761680Y-76741060D02* X72761680Y-76687186D01* X72761680Y-76687186D02* X72788618Y-76606373D01* X97441998Y-90814868D02* X97361185Y-90841805D01* X97361185Y-90841805D02* X97280373Y-90922618D01* X97280373Y-90922618D02* X97226498Y-91030367D01* X97226498Y-91030367D02* X97226498Y-91138117D01* X97226498Y-91138117D02* X97253436Y-91218929D01* X97253436Y-91218929D02* X97334248Y-91353616D01* X97334248Y-91353616D02* X97415060Y-91434428D01* X97415060Y-91434428D02* X97549747Y-91515241D01* X97549747Y-91515241D02* X97630560Y-91542178D01* X97630560Y-91542178D02* X97738309Y-91542178D01* X97738309Y-91542178D02* X97846059Y-91488303D01* X97846059Y-91488303D02* X97899934Y-91434428D01* X97899934Y-91434428D02* X97953808Y-91326679D01* X97953808Y-91326679D02* X97953808Y-91272804D01* X97953808Y-91272804D02* X97765247Y-91084242D01* X97765247Y-91084242D02* X97657497Y-91191992D01* X98250120Y-91084242D02* X97684434Y-90518557D01* X97684434Y-90518557D02* X97899934Y-90303057D01* X97899934Y-90303057D02* X97980746Y-90276120D01* X97980746Y-90276120D02* X98034621Y-90276120D01* X98034621Y-90276120D02* X98115433Y-90303057D01* X98115433Y-90303057D02* X98196245Y-90383870D01* X98196245Y-90383870D02* X98223182Y-90464682D01* X98223182Y-90464682D02* X98223182Y-90518557D01* X98223182Y-90518557D02* X98196245Y-90599369D01* X98196245Y-90599369D02* X97980746Y-90814868D01* X99112117Y-90222245D02* X98788868Y-90545494D01* X98950492Y-90383870D02* X98384807Y-89818184D01* X98384807Y-89818184D02* X98411744Y-89952871D01* X98411744Y-89952871D02* X98411744Y-90060621D01* X98411744Y-90060621D02* X98384807Y-90141433D01* X98734993Y-89467998D02* X99112117Y-89090874D01* X99112117Y-89090874D02* X99435366Y-89898996D01* X71857372Y-65145494D02* X71776560Y-65172431D01* X71776560Y-65172431D02* X71695748Y-65253243D01* X71695748Y-65253243D02* X71641873Y-65360993D01* X71641873Y-65360993D02* X71641873Y-65468742D01* X71641873Y-65468742D02* X71668810Y-65549555D01* X71668810Y-65549555D02* X71749623Y-65684242D01* X71749623Y-65684242D02* X71830435Y-65765054D01* X71830435Y-65765054D02* X71965122Y-65845866D01* X71965122Y-65845866D02* X72045934Y-65872803D01* X72045934Y-65872803D02* X72153684Y-65872803D01* X72153684Y-65872803D02* X72261433Y-65818929D01* X72261433Y-65818929D02* X72315308Y-65765054D01* X72315308Y-65765054D02* X72369183Y-65657304D01* X72369183Y-65657304D02* X72369183Y-65603429D01* X72369183Y-65603429D02* X72180621Y-65414868D01* X72180621Y-65414868D02* X72072871Y-65522617D01* X72665494Y-65414868D02* X72099809Y-64849182D01* X72099809Y-64849182D02* X72315308Y-64633683D01* X72315308Y-64633683D02* X72396120Y-64606746D01* X72396120Y-64606746D02* X72449995Y-64606746D01* X72449995Y-64606746D02* X72530807Y-64633683D01* X72530807Y-64633683D02* X72611619Y-64714495D01* X72611619Y-64714495D02* X72638557Y-64795307D01* X72638557Y-64795307D02* X72638557Y-64849182D01* X72638557Y-64849182D02* X72611619Y-64929994D01* X72611619Y-64929994D02* X72396120Y-65145494D01* X72907931Y-64041060D02* X72800181Y-64148810D01* X72800181Y-64148810D02* X72773244Y-64229622D01* X72773244Y-64229622D02* X72773244Y-64283497D01* X72773244Y-64283497D02* X72800181Y-64418184D01* X72800181Y-64418184D02* X72880993Y-64552871D01* X72880993Y-64552871D02* X73096493Y-64768370D01* X73096493Y-64768370D02* X73177305Y-64795307D01* X73177305Y-64795307D02* X73231180Y-64795307D01* X73231180Y-64795307D02* X73311992Y-64768370D01* X73311992Y-64768370D02* X73419741Y-64660620D01* X73419741Y-64660620D02* X73446679Y-64579808D01* X73446679Y-64579808D02* X73446679Y-64525933D01* X73446679Y-64525933D02* X73419741Y-64445121D01* X73419741Y-64445121D02* X73285054Y-64310434D01* X73285054Y-64310434D02* X73204242Y-64283497D01* X73204242Y-64283497D02* X73150367Y-64283497D01* X73150367Y-64283497D02* X73069555Y-64310434D01* X73069555Y-64310434D02* X72961806Y-64418184D01* X72961806Y-64418184D02* X72934868Y-64498996D01* X72934868Y-64498996D02* X72934868Y-64552871D01* X72934868Y-64552871D02* X72961806Y-64633683D01* X97441998Y-80654868D02* X97361185Y-80681805D01* X97361185Y-80681805D02* X97280373Y-80762618D01* X97280373Y-80762618D02* X97226498Y-80870367D01* X97226498Y-80870367D02* X97226498Y-80978117D01* X97226498Y-80978117D02* X97253436Y-81058929D01* X97253436Y-81058929D02* X97334248Y-81193616D01* X97334248Y-81193616D02* X97415060Y-81274428D01* X97415060Y-81274428D02* X97549747Y-81355241D01* X97549747Y-81355241D02* X97630560Y-81382178D01* X97630560Y-81382178D02* X97738309Y-81382178D01* X97738309Y-81382178D02* X97846059Y-81328303D01* X97846059Y-81328303D02* X97899934Y-81274428D01* X97899934Y-81274428D02* X97953808Y-81166679D01* X97953808Y-81166679D02* X97953808Y-81112804D01* X97953808Y-81112804D02* X97765247Y-80924242D01* X97765247Y-80924242D02* X97657497Y-81031992D01* X98250120Y-80924242D02* X97684434Y-80358557D01* X97684434Y-80358557D02* X97899934Y-80143057D01* X97899934Y-80143057D02* X97980746Y-80116120D01* X97980746Y-80116120D02* X98034621Y-80116120D01* X98034621Y-80116120D02* X98115433Y-80143057D01* X98115433Y-80143057D02* X98196245Y-80223870D01* X98196245Y-80223870D02* X98223182Y-80304682D01* X98223182Y-80304682D02* X98223182Y-80358557D01* X98223182Y-80358557D02* X98196245Y-80439369D01* X98196245Y-80439369D02* X97980746Y-80654868D01* X98277057Y-79873683D02* X98277057Y-79819809D01* X98277057Y-79819809D02* X98303995Y-79738996D01* X98303995Y-79738996D02* X98438682Y-79604309D01* X98438682Y-79604309D02* X98519494Y-79577372D01* X98519494Y-79577372D02* X98573369Y-79577372D01* X98573369Y-79577372D02* X98654181Y-79604309D01* X98654181Y-79604309D02* X98708056Y-79658184D01* X98708056Y-79658184D02* X98761930Y-79765934D01* X98761930Y-79765934D02* X98761930Y-80412431D01* X98761930Y-80412431D02* X99112117Y-80062245D01* X98896618Y-79146373D02* X98950492Y-79092499D01* X98950492Y-79092499D02* X99031305Y-79065561D01* X99031305Y-79065561D02* X99085179Y-79065561D01* X99085179Y-79065561D02* X99165992Y-79092499D01* X99165992Y-79092499D02* X99300679Y-79173311D01* X99300679Y-79173311D02* X99435366Y-79307998D01* X99435366Y-79307998D02* X99516178Y-79442685D01* X99516178Y-79442685D02* X99543115Y-79523497D01* X99543115Y-79523497D02* X99543115Y-79577372D01* X99543115Y-79577372D02* X99516178Y-79658184D01* X99516178Y-79658184D02* X99462303Y-79712059D01* X99462303Y-79712059D02* X99381491Y-79738996D01* X99381491Y-79738996D02* X99327616Y-79738996D01* X99327616Y-79738996D02* X99246804Y-79712059D01* X99246804Y-79712059D02* X99112117Y-79631247D01* X99112117Y-79631247D02* X98977430Y-79496560D01* X98977430Y-79496560D02* X98896618Y-79361873D01* X98896618Y-79361873D02* X98869680Y-79281060D01* X98869680Y-79281060D02* X98869680Y-79227186D01* X98869680Y-79227186D02* X98896618Y-79146373D01* X71187998Y-83194868D02* X71107185Y-83221805D01* X71107185Y-83221805D02* X71026373Y-83302618D01* X71026373Y-83302618D02* X70972498Y-83410367D01* X70972498Y-83410367D02* X70972498Y-83518117D01* X70972498Y-83518117D02* X70999436Y-83598929D01* X70999436Y-83598929D02* X71080248Y-83733616D01* X71080248Y-83733616D02* X71161060Y-83814428D01* X71161060Y-83814428D02* X71295747Y-83895241D01* X71295747Y-83895241D02* X71376560Y-83922178D01* X71376560Y-83922178D02* X71484309Y-83922178D01* X71484309Y-83922178D02* X71592059Y-83868303D01* X71592059Y-83868303D02* X71645934Y-83814428D01* X71645934Y-83814428D02* X71699808Y-83706679D01* X71699808Y-83706679D02* X71699808Y-83652804D01* X71699808Y-83652804D02* X71511247Y-83464242D01* X71511247Y-83464242D02* X71403497Y-83571992D01* X71996120Y-83464242D02* X71430434Y-82898557D01* X71430434Y-82898557D02* X71645934Y-82683057D01* X71645934Y-82683057D02* X71726746Y-82656120D01* X71726746Y-82656120D02* X71780621Y-82656120D01* X71780621Y-82656120D02* X71861433Y-82683057D01* X71861433Y-82683057D02* X71942245Y-82763870D01* X71942245Y-82763870D02* X71969182Y-82844682D01* X71969182Y-82844682D02* X71969182Y-82898557D01* X71969182Y-82898557D02* X71942245Y-82979369D01* X71942245Y-82979369D02* X71726746Y-83194868D01* X72858117Y-82602245D02* X72534868Y-82925494D01* X72696492Y-82763870D02* X72130807Y-82198184D01* X72130807Y-82198184D02* X72157744Y-82332871D01* X72157744Y-82332871D02* X72157744Y-82440621D01* X72157744Y-82440621D02* X72130807Y-82521433D01* X72561805Y-81874935D02* X72561805Y-81821060D01* X72561805Y-81821060D02* X72588743Y-81740248D01* X72588743Y-81740248D02* X72723430Y-81605561D01* X72723430Y-81605561D02* X72804242Y-81578624D01* X72804242Y-81578624D02* X72858117Y-81578624D01* X72858117Y-81578624D02* X72938929Y-81605561D01* X72938929Y-81605561D02* X72992804Y-81659436D01* X72992804Y-81659436D02* X73046679Y-81767186D01* X73046679Y-81767186D02* X73046679Y-82413683D01* X73046679Y-82413683D02* X73396865Y-82063497D01* X73154428Y-81174563D02* X73289115Y-81309250D01* X73100554Y-81390062D02* X73289115Y-81309250D01* X73289115Y-81309250D02* X73369928Y-81120688D01* X73316053Y-81497811D02* X73289115Y-81309250D01* X73289115Y-81309250D02* X73477677Y-81336187D01* X71830435Y-88032431D02* X71749623Y-88059368D01* X71749623Y-88059368D02* X71668811Y-88140180D01* X71668811Y-88140180D02* X71614936Y-88247930D01* X71614936Y-88247930D02* X71614936Y-88355680D01* X71614936Y-88355680D02* X71641873Y-88436492D01* X71641873Y-88436492D02* X71722685Y-88571179D01* X71722685Y-88571179D02* X71803498Y-88651991D01* X71803498Y-88651991D02* X71938185Y-88732803D01* X71938185Y-88732803D02* X72018997Y-88759741D01* X72018997Y-88759741D02* X72126746Y-88759741D01* X72126746Y-88759741D02* X72234496Y-88705866D01* X72234496Y-88705866D02* X72288371Y-88651991D01* X72288371Y-88651991D02* X72342246Y-88544241D01* X72342246Y-88544241D02* X72342246Y-88490367D01* X72342246Y-88490367D02* X72153684Y-88301805D01* X72153684Y-88301805D02* X72045934Y-88409554D01* X72638557Y-88301805D02* X72072872Y-87736119D01* X72072872Y-87736119D02* X72961806Y-87978556D01* X72961806Y-87978556D02* X72396120Y-87412871D01* X73231180Y-87709182D02* X72665494Y-87143497D01* X72665494Y-87143497D02* X72800181Y-87008810D01* X72800181Y-87008810D02* X72907931Y-86954935D01* X72907931Y-86954935D02* X73015680Y-86954935D01* X73015680Y-86954935D02* X73096493Y-86981872D01* X73096493Y-86981872D02* X73231180Y-87062685D01* X73231180Y-87062685D02* X73311992Y-87143497D01* X73311992Y-87143497D02* X73392804Y-87278184D01* X73392804Y-87278184D02* X73419741Y-87358996D01* X73419741Y-87358996D02* X73419741Y-87466746D01* X73419741Y-87466746D02* X73365867Y-87574495D01* X73365867Y-87574495D02* X73231180Y-87709182D01* X73311992Y-86496999D02* X73446679Y-86631686D01* X73258117Y-86712498D02* X73446679Y-86631686D01* X73446679Y-86631686D02* X73527491Y-86443124D01* X73473616Y-86820248D02* X73446679Y-86631686D01* X73446679Y-86631686D02* X73635241Y-86658624D01* X71857372Y-44825494D02* X71776560Y-44852431D01* X71776560Y-44852431D02* X71695748Y-44933243D01* X71695748Y-44933243D02* X71641873Y-45040993D01* X71641873Y-45040993D02* X71641873Y-45148742D01* X71641873Y-45148742D02* X71668810Y-45229555D01* X71668810Y-45229555D02* X71749623Y-45364242D01* X71749623Y-45364242D02* X71830435Y-45445054D01* X71830435Y-45445054D02* X71965122Y-45525866D01* X71965122Y-45525866D02* X72045934Y-45552803D01* X72045934Y-45552803D02* X72153684Y-45552803D01* X72153684Y-45552803D02* X72261433Y-45498929D01* X72261433Y-45498929D02* X72315308Y-45445054D01* X72315308Y-45445054D02* X72369183Y-45337304D01* X72369183Y-45337304D02* X72369183Y-45283429D01* X72369183Y-45283429D02* X72180621Y-45094868D01* X72180621Y-45094868D02* X72072871Y-45202617D01* X72665494Y-45094868D02* X72099809Y-44529182D01* X72099809Y-44529182D02* X72315308Y-44313683D01* X72315308Y-44313683D02* X72396120Y-44286746D01* X72396120Y-44286746D02* X72449995Y-44286746D01* X72449995Y-44286746D02* X72530807Y-44313683D01* X72530807Y-44313683D02* X72611619Y-44394495D01* X72611619Y-44394495D02* X72638557Y-44475307D01* X72638557Y-44475307D02* X72638557Y-44529182D01* X72638557Y-44529182D02* X72611619Y-44609994D01* X72611619Y-44609994D02* X72396120Y-44825494D01* X72773244Y-43855747D02* X72827119Y-43801872D01* X72827119Y-43801872D02* X72907931Y-43774935D01* X72907931Y-43774935D02* X72961806Y-43774935D01* X72961806Y-43774935D02* X73042618Y-43801872D01* X73042618Y-43801872D02* X73177305Y-43882685D01* X73177305Y-43882685D02* X73311992Y-44017372D01* X73311992Y-44017372D02* X73392804Y-44152059D01* X73392804Y-44152059D02* X73419741Y-44232871D01* X73419741Y-44232871D02* X73419741Y-44286746D01* X73419741Y-44286746D02* X73392804Y-44367558D01* X73392804Y-44367558D02* X73338929Y-44421433D01* X73338929Y-44421433D02* X73258117Y-44448370D01* X73258117Y-44448370D02* X73204242Y-44448370D01* X73204242Y-44448370D02* X73123430Y-44421433D01* X73123430Y-44421433D02* X72988743Y-44340620D01* X72988743Y-44340620D02* X72854056Y-44205933D01* X72854056Y-44205933D02* X72773244Y-44071246D01* X72773244Y-44071246D02* X72746306Y-43990434D01* X72746306Y-43990434D02* X72746306Y-43936559D01* X72746306Y-43936559D02* X72773244Y-43855747D01* X71857372Y-54985494D02* X71776560Y-55012431D01* X71776560Y-55012431D02* X71695748Y-55093243D01* X71695748Y-55093243D02* X71641873Y-55200993D01* X71641873Y-55200993D02* X71641873Y-55308742D01* X71641873Y-55308742D02* X71668810Y-55389555D01* X71668810Y-55389555D02* X71749623Y-55524242D01* X71749623Y-55524242D02* X71830435Y-55605054D01* X71830435Y-55605054D02* X71965122Y-55685866D01* X71965122Y-55685866D02* X72045934Y-55712803D01* X72045934Y-55712803D02* X72153684Y-55712803D01* X72153684Y-55712803D02* X72261433Y-55658929D01* X72261433Y-55658929D02* X72315308Y-55605054D01* X72315308Y-55605054D02* X72369183Y-55497304D01* X72369183Y-55497304D02* X72369183Y-55443429D01* X72369183Y-55443429D02* X72180621Y-55254868D01* X72180621Y-55254868D02* X72072871Y-55362617D01* X72665494Y-55254868D02* X72099809Y-54689182D01* X72099809Y-54689182D02* X72315308Y-54473683D01* X72315308Y-54473683D02* X72396120Y-54446746D01* X72396120Y-54446746D02* X72449995Y-54446746D01* X72449995Y-54446746D02* X72530807Y-54473683D01* X72530807Y-54473683D02* X72611619Y-54554495D01* X72611619Y-54554495D02* X72638557Y-54635307D01* X72638557Y-54635307D02* X72638557Y-54689182D01* X72638557Y-54689182D02* X72611619Y-54769994D01* X72611619Y-54769994D02* X72396120Y-54985494D01* X72611619Y-54177372D02* X72961806Y-53827185D01* X72961806Y-53827185D02* X72988743Y-54231246D01* X72988743Y-54231246D02* X73069555Y-54150434D01* X73069555Y-54150434D02* X73150367Y-54123497D01* X73150367Y-54123497D02* X73204242Y-54123497D01* X73204242Y-54123497D02* X73285054Y-54150434D01* X73285054Y-54150434D02* X73419741Y-54285121D01* X73419741Y-54285121D02* X73446679Y-54365933D01* X73446679Y-54365933D02* X73446679Y-54419808D01* X73446679Y-54419808D02* X73419741Y-54500620D01* X73419741Y-54500620D02* X73258117Y-54662245D01* X73258117Y-54662245D02* X73177305Y-54689182D01* X73177305Y-54689182D02* X73123430Y-54689182D01* X97441998Y-67954868D02* X97361185Y-67981805D01* X97361185Y-67981805D02* X97280373Y-68062618D01* X97280373Y-68062618D02* X97226498Y-68170367D01* X97226498Y-68170367D02* X97226498Y-68278117D01* X97226498Y-68278117D02* X97253436Y-68358929D01* X97253436Y-68358929D02* X97334248Y-68493616D01* X97334248Y-68493616D02* X97415060Y-68574428D01* X97415060Y-68574428D02* X97549747Y-68655241D01* X97549747Y-68655241D02* X97630560Y-68682178D01* X97630560Y-68682178D02* X97738309Y-68682178D01* X97738309Y-68682178D02* X97846059Y-68628303D01* X97846059Y-68628303D02* X97899934Y-68574428D01* X97899934Y-68574428D02* X97953808Y-68466679D01* X97953808Y-68466679D02* X97953808Y-68412804D01* X97953808Y-68412804D02* X97765247Y-68224242D01* X97765247Y-68224242D02* X97657497Y-68331992D01* X98250120Y-68224242D02* X97684434Y-67658557D01* X97684434Y-67658557D02* X97899934Y-67443057D01* X97899934Y-67443057D02* X97980746Y-67416120D01* X97980746Y-67416120D02* X98034621Y-67416120D01* X98034621Y-67416120D02* X98115433Y-67443057D01* X98115433Y-67443057D02* X98196245Y-67523870D01* X98196245Y-67523870D02* X98223182Y-67604682D01* X98223182Y-67604682D02* X98223182Y-67658557D01* X98223182Y-67658557D02* X98196245Y-67739369D01* X98196245Y-67739369D02* X97980746Y-67954868D01* X98277057Y-67173683D02* X98277057Y-67119809D01* X98277057Y-67119809D02* X98303995Y-67038996D01* X98303995Y-67038996D02* X98438682Y-66904309D01* X98438682Y-66904309D02* X98519494Y-66877372D01* X98519494Y-66877372D02* X98573369Y-66877372D01* X98573369Y-66877372D02* X98654181Y-66904309D01* X98654181Y-66904309D02* X98708056Y-66958184D01* X98708056Y-66958184D02* X98761930Y-67065934D01* X98761930Y-67065934D02* X98761930Y-67712431D01* X98761930Y-67712431D02* X99112117Y-67362245D01* X99031305Y-66311686D02* X98923555Y-66419436D01* X98923555Y-66419436D02* X98896618Y-66500248D01* X98896618Y-66500248D02* X98896618Y-66554123D01* X98896618Y-66554123D02* X98923555Y-66688810D01* X98923555Y-66688810D02* X99004367Y-66823497D01* X99004367Y-66823497D02* X99219866Y-67038996D01* X99219866Y-67038996D02* X99300679Y-67065934D01* X99300679Y-67065934D02* X99354553Y-67065934D01* X99354553Y-67065934D02* X99435366Y-67038996D01* X99435366Y-67038996D02* X99543115Y-66931247D01* X99543115Y-66931247D02* X99570053Y-66850434D01* X99570053Y-66850434D02* X99570053Y-66796560D01* X99570053Y-66796560D02* X99543115Y-66715747D01* X99543115Y-66715747D02* X99408428Y-66581060D01* X99408428Y-66581060D02* X99327616Y-66554123D01* X99327616Y-66554123D02* X99273741Y-66554123D01* X99273741Y-66554123D02* X99192929Y-66581060D01* X99192929Y-66581060D02* X99085179Y-66688810D01* X99085179Y-66688810D02* X99058242Y-66769622D01* X99058242Y-66769622D02* X99058242Y-66823497D01* X99058242Y-66823497D02* X99085179Y-66904309D01* X71857372Y-72765494D02* X71776560Y-72792431D01* X71776560Y-72792431D02* X71695748Y-72873243D01* X71695748Y-72873243D02* X71641873Y-72980993D01* X71641873Y-72980993D02* X71641873Y-73088742D01* X71641873Y-73088742D02* X71668810Y-73169555D01* X71668810Y-73169555D02* X71749623Y-73304242D01* X71749623Y-73304242D02* X71830435Y-73385054D01* X71830435Y-73385054D02* X71965122Y-73465866D01* X71965122Y-73465866D02* X72045934Y-73492803D01* X72045934Y-73492803D02* X72153684Y-73492803D01* X72153684Y-73492803D02* X72261433Y-73438929D01* X72261433Y-73438929D02* X72315308Y-73385054D01* X72315308Y-73385054D02* X72369183Y-73277304D01* X72369183Y-73277304D02* X72369183Y-73223429D01* X72369183Y-73223429D02* X72180621Y-73034868D01* X72180621Y-73034868D02* X72072871Y-73142617D01* X72665494Y-73034868D02* X72099809Y-72469182D01* X72099809Y-72469182D02* X72315308Y-72253683D01* X72315308Y-72253683D02* X72396120Y-72226746D01* X72396120Y-72226746D02* X72449995Y-72226746D01* X72449995Y-72226746D02* X72530807Y-72253683D01* X72530807Y-72253683D02* X72611619Y-72334495D01* X72611619Y-72334495D02* X72638557Y-72415307D01* X72638557Y-72415307D02* X72638557Y-72469182D01* X72638557Y-72469182D02* X72611619Y-72549994D01* X72611619Y-72549994D02* X72396120Y-72765494D01* X73258117Y-72442245D02* X73365867Y-72334495D01* X73365867Y-72334495D02* X73392804Y-72253683D01* X73392804Y-72253683D02* X73392804Y-72199808D01* X73392804Y-72199808D02* X73365867Y-72065121D01* X73365867Y-72065121D02* X73285054Y-71930434D01* X73285054Y-71930434D02* X73069555Y-71714935D01* X73069555Y-71714935D02* X72988743Y-71687998D01* X72988743Y-71687998D02* X72934868Y-71687998D01* X72934868Y-71687998D02* X72854056Y-71714935D01* X72854056Y-71714935D02* X72746306Y-71822685D01* X72746306Y-71822685D02* X72719369Y-71903497D01* X72719369Y-71903497D02* X72719369Y-71957372D01* X72719369Y-71957372D02* X72746306Y-72038184D01* X72746306Y-72038184D02* X72880993Y-72172871D01* X72880993Y-72172871D02* X72961806Y-72199808D01* X72961806Y-72199808D02* X73015680Y-72199808D01* X73015680Y-72199808D02* X73096493Y-72172871D01* X73096493Y-72172871D02* X73204242Y-72065121D01* X73204242Y-72065121D02* X73231180Y-71984309D01* X73231180Y-71984309D02* X73231180Y-71930434D01* X73231180Y-71930434D02* X73204242Y-71849622D01* X71333998Y-93354868D02* X71253185Y-93381805D01* X71253185Y-93381805D02* X71172373Y-93462618D01* X71172373Y-93462618D02* X71118498Y-93570367D01* X71118498Y-93570367D02* X71118498Y-93678117D01* X71118498Y-93678117D02* X71145436Y-93758929D01* X71145436Y-93758929D02* X71226248Y-93893616D01* X71226248Y-93893616D02* X71307060Y-93974428D01* X71307060Y-93974428D02* X71441747Y-94055241D01* X71441747Y-94055241D02* X71522560Y-94082178D01* X71522560Y-94082178D02* X71630309Y-94082178D01* X71630309Y-94082178D02* X71738059Y-94028303D01* X71738059Y-94028303D02* X71791934Y-93974428D01* X71791934Y-93974428D02* X71845808Y-93866679D01* X71845808Y-93866679D02* X71845808Y-93812804D01* X71845808Y-93812804D02* X71657247Y-93624242D01* X71657247Y-93624242D02* X71549497Y-93731992D01* X72142120Y-93624242D02* X71576434Y-93058557D01* X71576434Y-93058557D02* X71791934Y-92843057D01* X71791934Y-92843057D02* X71872746Y-92816120D01* X71872746Y-92816120D02* X71926621Y-92816120D01* X71926621Y-92816120D02* X72007433Y-92843057D01* X72007433Y-92843057D02* X72088245Y-92923870D01* X72088245Y-92923870D02* X72115182Y-93004682D01* X72115182Y-93004682D02* X72115182Y-93058557D01* X72115182Y-93058557D02* X72088245Y-93139369D01* X72088245Y-93139369D02* X71872746Y-93354868D01* X73004117Y-92762245D02* X72680868Y-93085494D01* X72842492Y-92923870D02* X72276807Y-92358184D01* X72276807Y-92358184D02* X72303744Y-92492871D01* X72303744Y-92492871D02* X72303744Y-92600621D01* X72303744Y-92600621D02* X72276807Y-92681433D01* X72950242Y-91684749D02* X72680868Y-91954123D01* X72680868Y-91954123D02* X72923305Y-92250434D01* X72923305Y-92250434D02* X72923305Y-92196560D01* X72923305Y-92196560D02* X72950242Y-92115747D01* X72950242Y-92115747D02* X73084929Y-91981060D01* X73084929Y-91981060D02* X73165741Y-91954123D01* X73165741Y-91954123D02* X73219616Y-91954123D01* X73219616Y-91954123D02* X73300428Y-91981060D01* X73300428Y-91981060D02* X73435115Y-92115747D01* X73435115Y-92115747D02* X73462053Y-92196560D01* X73462053Y-92196560D02* X73462053Y-92250434D01* X73462053Y-92250434D02* X73435115Y-92331247D01* X73435115Y-92331247D02* X73300428Y-92465934D01* X73300428Y-92465934D02* X73219616Y-92492871D01* X73219616Y-92492871D02* X73165741Y-92492871D01* X73300428Y-91334563D02* X73435115Y-91469250D01* X73246554Y-91550062D02* X73435115Y-91469250D01* X73435115Y-91469250D02* X73515928Y-91280688D01* X73462053Y-91657811D02* X73435115Y-91469250D01* X73435115Y-91469250D02* X73623677Y-91496187D01* X97430435Y-88032431D02* X97349623Y-88059368D01* X97349623Y-88059368D02* X97268811Y-88140180D01* X97268811Y-88140180D02* X97214936Y-88247930D01* X97214936Y-88247930D02* X97214936Y-88355680D01* X97214936Y-88355680D02* X97241873Y-88436492D01* X97241873Y-88436492D02* X97322685Y-88571179D01* X97322685Y-88571179D02* X97403498Y-88651991D01* X97403498Y-88651991D02* X97538185Y-88732803D01* X97538185Y-88732803D02* X97618997Y-88759741D01* X97618997Y-88759741D02* X97726746Y-88759741D01* X97726746Y-88759741D02* X97834496Y-88705866D01* X97834496Y-88705866D02* X97888371Y-88651991D01* X97888371Y-88651991D02* X97942246Y-88544241D01* X97942246Y-88544241D02* X97942246Y-88490367D01* X97942246Y-88490367D02* X97753684Y-88301805D01* X97753684Y-88301805D02* X97645934Y-88409554D01* X98238557Y-88301805D02* X97672872Y-87736119D01* X97672872Y-87736119D02* X98561806Y-87978556D01* X98561806Y-87978556D02* X97996120Y-87412871D01* X98831180Y-87709182D02* X98265494Y-87143497D01* X98265494Y-87143497D02* X98400181Y-87008810D01* X98400181Y-87008810D02* X98507931Y-86954935D01* X98507931Y-86954935D02* X98615680Y-86954935D01* X98615680Y-86954935D02* X98696493Y-86981872D01* X98696493Y-86981872D02* X98831180Y-87062685D01* X98831180Y-87062685D02* X98911992Y-87143497D01* X98911992Y-87143497D02* X98992804Y-87278184D01* X98992804Y-87278184D02* X99019741Y-87358996D01* X99019741Y-87358996D02* X99019741Y-87466746D01* X99019741Y-87466746D02* X98965867Y-87574495D01* X98965867Y-87574495D02* X98831180Y-87709182D01* X98911992Y-86496999D02* X99046679Y-86631686D01* X98858117Y-86712498D02* X99046679Y-86631686D01* X99046679Y-86631686D02* X99127491Y-86443124D01* X99073616Y-86820248D02* X99046679Y-86631686D01* X99046679Y-86631686D02* X99235241Y-86658624D01* X71830435Y-62632431D02* X71749623Y-62659368D01* X71749623Y-62659368D02* X71668811Y-62740180D01* X71668811Y-62740180D02* X71614936Y-62847930D01* X71614936Y-62847930D02* X71614936Y-62955680D01* X71614936Y-62955680D02* X71641873Y-63036492D01* X71641873Y-63036492D02* X71722685Y-63171179D01* X71722685Y-63171179D02* X71803498Y-63251991D01* X71803498Y-63251991D02* X71938185Y-63332803D01* X71938185Y-63332803D02* X72018997Y-63359741D01* X72018997Y-63359741D02* X72126746Y-63359741D01* X72126746Y-63359741D02* X72234496Y-63305866D01* X72234496Y-63305866D02* X72288371Y-63251991D01* X72288371Y-63251991D02* X72342246Y-63144241D01* X72342246Y-63144241D02* X72342246Y-63090367D01* X72342246Y-63090367D02* X72153684Y-62901805D01* X72153684Y-62901805D02* X72045934Y-63009554D01* X72638557Y-62901805D02* X72072872Y-62336119D01* X72072872Y-62336119D02* X72961806Y-62578556D01* X72961806Y-62578556D02* X72396120Y-62012871D01* X73231180Y-62309182D02* X72665494Y-61743497D01* X72665494Y-61743497D02* X72800181Y-61608810D01* X72800181Y-61608810D02* X72907931Y-61554935D01* X72907931Y-61554935D02* X73015680Y-61554935D01* X73015680Y-61554935D02* X73096493Y-61581872D01* X73096493Y-61581872D02* X73231180Y-61662685D01* X73231180Y-61662685D02* X73311992Y-61743497D01* X73311992Y-61743497D02* X73392804Y-61878184D01* X73392804Y-61878184D02* X73419741Y-61958996D01* X73419741Y-61958996D02* X73419741Y-62066746D01* X73419741Y-62066746D02* X73365867Y-62174495D01* X73365867Y-62174495D02* X73231180Y-62309182D01* X73311992Y-61096999D02* X73446679Y-61231686D01* X73258117Y-61312498D02* X73446679Y-61231686D01* X73446679Y-61231686D02* X73527491Y-61043124D01* X73473616Y-61420248D02* X73446679Y-61231686D01* X73446679Y-61231686D02* X73635241Y-61258624D01* X71333998Y-85734868D02* X71253185Y-85761805D01* X71253185Y-85761805D02* X71172373Y-85842618D01* X71172373Y-85842618D02* X71118498Y-85950367D01* X71118498Y-85950367D02* X71118498Y-86058117D01* X71118498Y-86058117D02* X71145436Y-86138929D01* X71145436Y-86138929D02* X71226248Y-86273616D01* X71226248Y-86273616D02* X71307060Y-86354428D01* X71307060Y-86354428D02* X71441747Y-86435241D01* X71441747Y-86435241D02* X71522560Y-86462178D01* X71522560Y-86462178D02* X71630309Y-86462178D01* X71630309Y-86462178D02* X71738059Y-86408303D01* X71738059Y-86408303D02* X71791934Y-86354428D01* X71791934Y-86354428D02* X71845808Y-86246679D01* X71845808Y-86246679D02* X71845808Y-86192804D01* X71845808Y-86192804D02* X71657247Y-86004242D01* X71657247Y-86004242D02* X71549497Y-86111992D01* X72142120Y-86004242D02* X71576434Y-85438557D01* X71576434Y-85438557D02* X71791934Y-85223057D01* X71791934Y-85223057D02* X71872746Y-85196120D01* X71872746Y-85196120D02* X71926621Y-85196120D01* X71926621Y-85196120D02* X72007433Y-85223057D01* X72007433Y-85223057D02* X72088245Y-85303870D01* X72088245Y-85303870D02* X72115182Y-85384682D01* X72115182Y-85384682D02* X72115182Y-85438557D01* X72115182Y-85438557D02* X72088245Y-85519369D01* X72088245Y-85519369D02* X71872746Y-85734868D01* X73004117Y-85142245D02* X72680868Y-85465494D01* X72842492Y-85303870D02* X72276807Y-84738184D01* X72276807Y-84738184D02* X72303744Y-84872871D01* X72303744Y-84872871D02* X72303744Y-84980621D01* X72303744Y-84980621D02* X72276807Y-85061433D01* X72626993Y-84387998D02* X72977179Y-84037812D01* X72977179Y-84037812D02* X73004117Y-84441873D01* X73004117Y-84441873D02* X73084929Y-84361060D01* X73084929Y-84361060D02* X73165741Y-84334123D01* X73165741Y-84334123D02* X73219616Y-84334123D01* X73219616Y-84334123D02* X73300428Y-84361060D01* X73300428Y-84361060D02* X73435115Y-84495747D01* X73435115Y-84495747D02* X73462053Y-84576560D01* X73462053Y-84576560D02* X73462053Y-84630434D01* X73462053Y-84630434D02* X73435115Y-84711247D01* X73435115Y-84711247D02* X73273491Y-84872871D01* X73273491Y-84872871D02* X73192679Y-84899808D01* X73192679Y-84899808D02* X73138804Y-84899808D01* X73300428Y-83714563D02* X73435115Y-83849250D01* X73246554Y-83930062D02* X73435115Y-83849250D01* X73435115Y-83849250D02* X73515928Y-83660688D01* X73462053Y-84037811D02* X73435115Y-83849250D01* X73435115Y-83849250D02* X73623677Y-83876187D01* X97441998Y-65424868D02* X97361185Y-65451805D01* X97361185Y-65451805D02* X97280373Y-65532618D01* X97280373Y-65532618D02* X97226498Y-65640367D01* X97226498Y-65640367D02* X97226498Y-65748117D01* X97226498Y-65748117D02* X97253436Y-65828929D01* X97253436Y-65828929D02* X97334248Y-65963616D01* X97334248Y-65963616D02* X97415060Y-66044428D01* X97415060Y-66044428D02* X97549747Y-66125241D01* X97549747Y-66125241D02* X97630560Y-66152178D01* X97630560Y-66152178D02* X97738309Y-66152178D01* X97738309Y-66152178D02* X97846059Y-66098303D01* X97846059Y-66098303D02* X97899934Y-66044428D01* X97899934Y-66044428D02* X97953808Y-65936679D01* X97953808Y-65936679D02* X97953808Y-65882804D01* X97953808Y-65882804D02* X97765247Y-65694242D01* X97765247Y-65694242D02* X97657497Y-65801992D01* X98250120Y-65694242D02* X97684434Y-65128557D01* X97684434Y-65128557D02* X97899934Y-64913057D01* X97899934Y-64913057D02* X97980746Y-64886120D01* X97980746Y-64886120D02* X98034621Y-64886120D01* X98034621Y-64886120D02* X98115433Y-64913057D01* X98115433Y-64913057D02* X98196245Y-64993870D01* X98196245Y-64993870D02* X98223182Y-65074682D01* X98223182Y-65074682D02* X98223182Y-65128557D01* X98223182Y-65128557D02* X98196245Y-65209369D01* X98196245Y-65209369D02* X97980746Y-65424868D01* X98277057Y-64643683D02* X98277057Y-64589809D01* X98277057Y-64589809D02* X98303995Y-64508996D01* X98303995Y-64508996D02* X98438682Y-64374309D01* X98438682Y-64374309D02* X98519494Y-64347372D01* X98519494Y-64347372D02* X98573369Y-64347372D01* X98573369Y-64347372D02* X98654181Y-64374309D01* X98654181Y-64374309D02* X98708056Y-64428184D01* X98708056Y-64428184D02* X98761930Y-64535934D01* X98761930Y-64535934D02* X98761930Y-65182431D01* X98761930Y-65182431D02* X99112117Y-64832245D01* X98734993Y-64077998D02* X99112117Y-63700874D01* X99112117Y-63700874D02* X99435366Y-64508996D01* X97264749Y-47904242D02* X98018996Y-48281366D01* X98018996Y-48281366D02* X97641873Y-47527118D01* X98342245Y-47904242D02* X98449995Y-47850367D01* X98449995Y-47850367D02* X98584682Y-47715680D01* X98584682Y-47715680D02* X98611619Y-47634868D01* X98611619Y-47634868D02* X98611619Y-47580993D01* X98611619Y-47580993D02* X98584682Y-47500181D01* X98584682Y-47500181D02* X98530807Y-47446306D01* X98530807Y-47446306D02* X98449995Y-47419369D01* X98449995Y-47419369D02* X98396120Y-47419369D01* X98396120Y-47419369D02* X98315308Y-47446306D01* X98315308Y-47446306D02* X98180621Y-47527118D01* X98180621Y-47527118D02* X98099808Y-47554056D01* X98099808Y-47554056D02* X98045934Y-47554056D01* X98045934Y-47554056D02* X97965121Y-47527118D01* X97965121Y-47527118D02* X97911247Y-47473244D01* X97911247Y-47473244D02* X97884309Y-47392431D01* X97884309Y-47392431D02* X97884309Y-47338557D01* X97884309Y-47338557D02* X97911247Y-47257744D01* X97911247Y-47257744D02* X98045934Y-47123057D01* X98045934Y-47123057D02* X98153683Y-47069183D01* X98773244Y-46988370D02* X99042618Y-47257744D01* X98288370Y-46880621D02* X98773244Y-46988370D01* X98773244Y-46988370D02* X98665494Y-46503497D01* X99365866Y-46880621D02* X99473616Y-46826746D01* X99473616Y-46826746D02* X99608303Y-46692059D01* X99608303Y-46692059D02* X99635240Y-46611247D01* X99635240Y-46611247D02* X99635240Y-46557372D01* X99635240Y-46557372D02* X99608303Y-46476560D01* X99608303Y-46476560D02* X99554428Y-46422685D01* X99554428Y-46422685D02* X99473616Y-46395748D01* X99473616Y-46395748D02* X99419741Y-46395748D01* X99419741Y-46395748D02* X99338929Y-46422685D01* X99338929Y-46422685D02* X99204242Y-46503497D01* X99204242Y-46503497D02* X99123430Y-46530435D01* X99123430Y-46530435D02* X99069555Y-46530435D01* X99069555Y-46530435D02* X98988743Y-46503497D01* X98988743Y-46503497D02* X98934868Y-46449622D01* X98934868Y-46449622D02* X98907930Y-46368810D01* X98907930Y-46368810D02* X98907930Y-46314935D01* X98907930Y-46314935D02* X98934868Y-46234123D01* X98934868Y-46234123D02* X99069555Y-46099436D01* X99069555Y-46099436D02* X99177304Y-46045561D01* X97441998Y-60080868D02* X97361185Y-60107805D01* X97361185Y-60107805D02* X97280373Y-60188618D01* X97280373Y-60188618D02* X97226498Y-60296367D01* X97226498Y-60296367D02* X97226498Y-60404117D01* X97226498Y-60404117D02* X97253436Y-60484929D01* X97253436Y-60484929D02* X97334248Y-60619616D01* X97334248Y-60619616D02* X97415060Y-60700428D01* X97415060Y-60700428D02* X97549747Y-60781241D01* X97549747Y-60781241D02* X97630560Y-60808178D01* X97630560Y-60808178D02* X97738309Y-60808178D01* X97738309Y-60808178D02* X97846059Y-60754303D01* X97846059Y-60754303D02* X97899934Y-60700428D01* X97899934Y-60700428D02* X97953808Y-60592679D01* X97953808Y-60592679D02* X97953808Y-60538804D01* X97953808Y-60538804D02* X97765247Y-60350242D01* X97765247Y-60350242D02* X97657497Y-60457992D01* X98250120Y-60350242D02* X97684434Y-59784557D01* X97684434Y-59784557D02* X97899934Y-59569057D01* X97899934Y-59569057D02* X97980746Y-59542120D01* X97980746Y-59542120D02* X98034621Y-59542120D01* X98034621Y-59542120D02* X98115433Y-59569057D01* X98115433Y-59569057D02* X98196245Y-59649870D01* X98196245Y-59649870D02* X98223182Y-59730682D01* X98223182Y-59730682D02* X98223182Y-59784557D01* X98223182Y-59784557D02* X98196245Y-59865369D01* X98196245Y-59865369D02* X97980746Y-60080868D01* X98277057Y-59299683D02* X98277057Y-59245809D01* X98277057Y-59245809D02* X98303995Y-59164996D01* X98303995Y-59164996D02* X98438682Y-59030309D01* X98438682Y-59030309D02* X98519494Y-59003372D01* X98519494Y-59003372D02* X98573369Y-59003372D01* X98573369Y-59003372D02* X98654181Y-59030309D01* X98654181Y-59030309D02* X98708056Y-59084184D01* X98708056Y-59084184D02* X98761930Y-59191934D01* X98761930Y-59191934D02* X98761930Y-59838431D01* X98761930Y-59838431D02* X99112117Y-59488245D01* X99112117Y-58841747D02* X99031305Y-58868685D01* X99031305Y-58868685D02* X98977430Y-58868685D01* X98977430Y-58868685D02* X98896618Y-58841747D01* X98896618Y-58841747D02* X98869680Y-58814810D01* X98869680Y-58814810D02* X98842743Y-58733998D01* X98842743Y-58733998D02* X98842743Y-58680123D01* X98842743Y-58680123D02* X98869680Y-58599311D01* X98869680Y-58599311D02* X98977430Y-58491561D01* X98977430Y-58491561D02* X99058242Y-58464624D01* X99058242Y-58464624D02* X99112117Y-58464624D01* X99112117Y-58464624D02* X99192929Y-58491561D01* X99192929Y-58491561D02* X99219866Y-58518499D01* X99219866Y-58518499D02* X99246804Y-58599311D01* X99246804Y-58599311D02* X99246804Y-58653186D01* X99246804Y-58653186D02* X99219866Y-58733998D01* X99219866Y-58733998D02* X99112117Y-58841747D01* X99112117Y-58841747D02* X99085179Y-58922560D01* X99085179Y-58922560D02* X99085179Y-58976434D01* X99085179Y-58976434D02* X99112117Y-59057247D01* X99112117Y-59057247D02* X99219866Y-59164996D01* X99219866Y-59164996D02* X99300679Y-59191934D01* X99300679Y-59191934D02* X99354553Y-59191934D01* X99354553Y-59191934D02* X99435366Y-59164996D01* X99435366Y-59164996D02* X99543115Y-59057247D01* X99543115Y-59057247D02* X99570053Y-58976434D01* X99570053Y-58976434D02* X99570053Y-58922560D01* X99570053Y-58922560D02* X99543115Y-58841747D01* X99543115Y-58841747D02* X99435366Y-58733998D01* X99435366Y-58733998D02* X99354553Y-58707060D01* X99354553Y-58707060D02* X99300679Y-58707060D01* X99300679Y-58707060D02* X99219866Y-58733998D01* X97692184Y-57944929D02* X97961558Y-57675555D01* X97799934Y-58160428D02* X97422810Y-57406181D01* X97422810Y-57406181D02* X98177057Y-57783304D01* X98365619Y-57594743D02* X97799934Y-57029057D01* X97799934Y-57029057D02* X97934621Y-56894370D01* X97934621Y-56894370D02* X98042370Y-56840496D01* X98042370Y-56840496D02* X98150120Y-56840496D01* X98150120Y-56840496D02* X98230932Y-56867433D01* X98230932Y-56867433D02* X98365619Y-56948245D01* X98365619Y-56948245D02* X98446431Y-57029057D01* X98446431Y-57029057D02* X98527243Y-57163744D01* X98527243Y-57163744D02* X98554181Y-57244557D01* X98554181Y-57244557D02* X98554181Y-57352306D01* X98554181Y-57352306D02* X98500306Y-57460056D01* X98500306Y-57460056D02* X98365619Y-57594743D01* X99200678Y-56651934D02* X99200678Y-56705809D01* X99200678Y-56705809D02* X99146804Y-56813558D01* X99146804Y-56813558D02* X99092929Y-56867433D01* X99092929Y-56867433D02* X98985179Y-56921308D01* X98985179Y-56921308D02* X98877430Y-56921308D01* X98877430Y-56921308D02* X98796617Y-56894370D01* X98796617Y-56894370D02* X98661930Y-56813558D01* X98661930Y-56813558D02* X98581118Y-56732746D01* X98581118Y-56732746D02* X98500306Y-56598059D01* X98500306Y-56598059D02* X98473369Y-56517247D01* X98473369Y-56517247D02* X98473369Y-56409497D01* X98473369Y-56409497D02* X98527243Y-56301748D01* X98527243Y-56301748D02* X98581118Y-56247873D01* X98581118Y-56247873D02* X98688868Y-56193998D01* X98688868Y-56193998D02* X98742743Y-56193998D01* X97430435Y-75332431D02* X97349623Y-75359368D01* X97349623Y-75359368D02* X97268811Y-75440180D01* X97268811Y-75440180D02* X97214936Y-75547930D01* X97214936Y-75547930D02* X97214936Y-75655680D01* X97214936Y-75655680D02* X97241873Y-75736492D01* X97241873Y-75736492D02* X97322685Y-75871179D01* X97322685Y-75871179D02* X97403498Y-75951991D01* X97403498Y-75951991D02* X97538185Y-76032803D01* X97538185Y-76032803D02* X97618997Y-76059741D01* X97618997Y-76059741D02* X97726746Y-76059741D01* X97726746Y-76059741D02* X97834496Y-76005866D01* X97834496Y-76005866D02* X97888371Y-75951991D01* X97888371Y-75951991D02* X97942246Y-75844241D01* X97942246Y-75844241D02* X97942246Y-75790367D01* X97942246Y-75790367D02* X97753684Y-75601805D01* X97753684Y-75601805D02* X97645934Y-75709554D01* X98238557Y-75601805D02* X97672872Y-75036119D01* X97672872Y-75036119D02* X98561806Y-75278556D01* X98561806Y-75278556D02* X97996120Y-74712871D01* X98831180Y-75009182D02* X98265494Y-74443497D01* X98265494Y-74443497D02* X98400181Y-74308810D01* X98400181Y-74308810D02* X98507931Y-74254935D01* X98507931Y-74254935D02* X98615680Y-74254935D01* X98615680Y-74254935D02* X98696493Y-74281872D01* X98696493Y-74281872D02* X98831180Y-74362685D01* X98831180Y-74362685D02* X98911992Y-74443497D01* X98911992Y-74443497D02* X98992804Y-74578184D01* X98992804Y-74578184D02* X99019741Y-74658996D01* X99019741Y-74658996D02* X99019741Y-74766746D01* X99019741Y-74766746D02* X98965867Y-74874495D01* X98965867Y-74874495D02* X98831180Y-75009182D01* X97441998Y-73034868D02* X97361185Y-73061805D01* X97361185Y-73061805D02* X97280373Y-73142618D01* X97280373Y-73142618D02* X97226498Y-73250367D01* X97226498Y-73250367D02* X97226498Y-73358117D01* X97226498Y-73358117D02* X97253436Y-73438929D01* X97253436Y-73438929D02* X97334248Y-73573616D01* X97334248Y-73573616D02* X97415060Y-73654428D01* X97415060Y-73654428D02* X97549747Y-73735241D01* X97549747Y-73735241D02* X97630560Y-73762178D01* X97630560Y-73762178D02* X97738309Y-73762178D01* X97738309Y-73762178D02* X97846059Y-73708303D01* X97846059Y-73708303D02* X97899934Y-73654428D01* X97899934Y-73654428D02* X97953808Y-73546679D01* X97953808Y-73546679D02* X97953808Y-73492804D01* X97953808Y-73492804D02* X97765247Y-73304242D01* X97765247Y-73304242D02* X97657497Y-73411992D01* X98250120Y-73304242D02* X97684434Y-72738557D01* X97684434Y-72738557D02* X97899934Y-72523057D01* X97899934Y-72523057D02* X97980746Y-72496120D01* X97980746Y-72496120D02* X98034621Y-72496120D01* X98034621Y-72496120D02* X98115433Y-72523057D01* X98115433Y-72523057D02* X98196245Y-72603870D01* X98196245Y-72603870D02* X98223182Y-72684682D01* X98223182Y-72684682D02* X98223182Y-72738557D01* X98223182Y-72738557D02* X98196245Y-72819369D01* X98196245Y-72819369D02* X97980746Y-73034868D01* X98277057Y-72253683D02* X98277057Y-72199809D01* X98277057Y-72199809D02* X98303995Y-72118996D01* X98303995Y-72118996D02* X98438682Y-71984309D01* X98438682Y-71984309D02* X98519494Y-71957372D01* X98519494Y-71957372D02* X98573369Y-71957372D01* X98573369Y-71957372D02* X98654181Y-71984309D01* X98654181Y-71984309D02* X98708056Y-72038184D01* X98708056Y-72038184D02* X98761930Y-72145934D01* X98761930Y-72145934D02* X98761930Y-72792431D01* X98761930Y-72792431D02* X99112117Y-72442245D01* X98815805Y-71714935D02* X98815805Y-71661060D01* X98815805Y-71661060D02* X98842743Y-71580248D01* X98842743Y-71580248D02* X98977430Y-71445561D01* X98977430Y-71445561D02* X99058242Y-71418624D01* X99058242Y-71418624D02* X99112117Y-71418624D01* X99112117Y-71418624D02* X99192929Y-71445561D01* X99192929Y-71445561D02* X99246804Y-71499436D01* X99246804Y-71499436D02* X99300679Y-71607186D01* X99300679Y-71607186D02* X99300679Y-72253683D01* X99300679Y-72253683D02* X99650865Y-71903497D01* X97286218Y-52970773D02* X97636404Y-52620587D01* X97636404Y-52620587D02* X97663341Y-53024648D01* X97663341Y-53024648D02* X97744153Y-52943836D01* X97744153Y-52943836D02* X97824966Y-52916899D01* X97824966Y-52916899D02* X97878840Y-52916899D01* X97878840Y-52916899D02* X97959653Y-52943836D01* X97959653Y-52943836D02* X98094340Y-53078523D01* X98094340Y-53078523D02* X98121277Y-53159335D01* X98121277Y-53159335D02* X98121277Y-53213210D01* X98121277Y-53213210D02* X98094340Y-53294022D01* X98094340Y-53294022D02* X97932715Y-53455647D01* X97932715Y-53455647D02* X97851903Y-53482584D01* X97851903Y-53482584D02* X97798028Y-53482584D01* X97798028Y-52458963D02* X98552276Y-52836086D01* X98552276Y-52836086D02* X98175152Y-52081839D01* X98309839Y-51947152D02* X98660025Y-51596966D01* X98660025Y-51596966D02* X98686962Y-52001027D01* X98686962Y-52001027D02* X98767775Y-51920215D01* X98767775Y-51920215D02* X98848587Y-51893277D01* X98848587Y-51893277D02* X98902462Y-51893277D01* X98902462Y-51893277D02* X98983274Y-51920215D01* X98983274Y-51920215D02* X99117961Y-52054902D01* X99117961Y-52054902D02* X99144898Y-52135714D01* X99144898Y-52135714D02* X99144898Y-52189589D01* X99144898Y-52189589D02* X99117961Y-52270401D01* X99117961Y-52270401D02* X98956336Y-52432025D01* X98956336Y-52432025D02* X98875524Y-52458963D01* X98875524Y-52458963D02* X98821649Y-52458963D01* X99171836Y-51623903D02* X99360398Y-51435341D01* X99737521Y-51650841D02* X99468147Y-51920215D01* X99468147Y-51920215D02* X98902462Y-51354529D01* X98902462Y-51354529D02* X99171836Y-51085155D01* X97441998Y-85734868D02* X97361185Y-85761805D01* X97361185Y-85761805D02* X97280373Y-85842618D01* X97280373Y-85842618D02* X97226498Y-85950367D01* X97226498Y-85950367D02* X97226498Y-86058117D01* X97226498Y-86058117D02* X97253436Y-86138929D01* X97253436Y-86138929D02* X97334248Y-86273616D01* X97334248Y-86273616D02* X97415060Y-86354428D01* X97415060Y-86354428D02* X97549747Y-86435241D01* X97549747Y-86435241D02* X97630560Y-86462178D01* X97630560Y-86462178D02* X97738309Y-86462178D01* X97738309Y-86462178D02* X97846059Y-86408303D01* X97846059Y-86408303D02* X97899934Y-86354428D01* X97899934Y-86354428D02* X97953808Y-86246679D01* X97953808Y-86246679D02* X97953808Y-86192804D01* X97953808Y-86192804D02* X97765247Y-86004242D01* X97765247Y-86004242D02* X97657497Y-86111992D01* X98250120Y-86004242D02* X97684434Y-85438557D01* X97684434Y-85438557D02* X97899934Y-85223057D01* X97899934Y-85223057D02* X97980746Y-85196120D01* X97980746Y-85196120D02* X98034621Y-85196120D01* X98034621Y-85196120D02* X98115433Y-85223057D01* X98115433Y-85223057D02* X98196245Y-85303870D01* X98196245Y-85303870D02* X98223182Y-85384682D01* X98223182Y-85384682D02* X98223182Y-85438557D01* X98223182Y-85438557D02* X98196245Y-85519369D01* X98196245Y-85519369D02* X97980746Y-85734868D01* X99112117Y-85142245D02* X98788868Y-85465494D01* X98950492Y-85303870D02* X98384807Y-84738184D01* X98384807Y-84738184D02* X98411744Y-84872871D01* X98411744Y-84872871D02* X98411744Y-84980621D01* X98411744Y-84980621D02* X98384807Y-85061433D01* X99112117Y-84495747D02* X99031305Y-84522685D01* X99031305Y-84522685D02* X98977430Y-84522685D01* X98977430Y-84522685D02* X98896618Y-84495747D01* X98896618Y-84495747D02* X98869680Y-84468810D01* X98869680Y-84468810D02* X98842743Y-84387998D01* X98842743Y-84387998D02* X98842743Y-84334123D01* X98842743Y-84334123D02* X98869680Y-84253311D01* X98869680Y-84253311D02* X98977430Y-84145561D01* X98977430Y-84145561D02* X99058242Y-84118624D01* X99058242Y-84118624D02* X99112117Y-84118624D01* X99112117Y-84118624D02* X99192929Y-84145561D01* X99192929Y-84145561D02* X99219866Y-84172499D01* X99219866Y-84172499D02* X99246804Y-84253311D01* X99246804Y-84253311D02* X99246804Y-84307186D01* X99246804Y-84307186D02* X99219866Y-84387998D01* X99219866Y-84387998D02* X99112117Y-84495747D01* X99112117Y-84495747D02* X99085179Y-84576560D01* X99085179Y-84576560D02* X99085179Y-84630434D01* X99085179Y-84630434D02* X99112117Y-84711247D01* X99112117Y-84711247D02* X99219866Y-84818996D01* X99219866Y-84818996D02* X99300679Y-84845934D01* X99300679Y-84845934D02* X99354553Y-84845934D01* X99354553Y-84845934D02* X99435366Y-84818996D01* X99435366Y-84818996D02* X99543115Y-84711247D01* X99543115Y-84711247D02* X99570053Y-84630434D01* X99570053Y-84630434D02* X99570053Y-84576560D01* X99570053Y-84576560D02* X99543115Y-84495747D01* X99543115Y-84495747D02* X99435366Y-84387998D01* X99435366Y-84387998D02* X99354553Y-84361060D01* X99354553Y-84361060D02* X99300679Y-84361060D01* X99300679Y-84361060D02* X99219866Y-84387998D01* X71857372Y-57525494D02* X71776560Y-57552431D01* X71776560Y-57552431D02* X71695748Y-57633243D01* X71695748Y-57633243D02* X71641873Y-57740993D01* X71641873Y-57740993D02* X71641873Y-57848742D01* X71641873Y-57848742D02* X71668810Y-57929555D01* X71668810Y-57929555D02* X71749623Y-58064242D01* X71749623Y-58064242D02* X71830435Y-58145054D01* X71830435Y-58145054D02* X71965122Y-58225866D01* X71965122Y-58225866D02* X72045934Y-58252803D01* X72045934Y-58252803D02* X72153684Y-58252803D01* X72153684Y-58252803D02* X72261433Y-58198929D01* X72261433Y-58198929D02* X72315308Y-58145054D01* X72315308Y-58145054D02* X72369183Y-58037304D01* X72369183Y-58037304D02* X72369183Y-57983429D01* X72369183Y-57983429D02* X72180621Y-57794868D01* X72180621Y-57794868D02* X72072871Y-57902617D01* X72665494Y-57794868D02* X72099809Y-57229182D01* X72099809Y-57229182D02* X72315308Y-57013683D01* X72315308Y-57013683D02* X72396120Y-56986746D01* X72396120Y-56986746D02* X72449995Y-56986746D01* X72449995Y-56986746D02* X72530807Y-57013683D01* X72530807Y-57013683D02* X72611619Y-57094495D01* X72611619Y-57094495D02* X72638557Y-57175307D01* X72638557Y-57175307D02* X72638557Y-57229182D01* X72638557Y-57229182D02* X72611619Y-57309994D01* X72611619Y-57309994D02* X72396120Y-57525494D01* X73096493Y-56609622D02* X73473616Y-56986746D01* X72746306Y-56528810D02* X73015680Y-57067558D01* X73015680Y-57067558D02* X73365867Y-56717372D01* X97297406Y-45361585D02* X98051653Y-45738709D01* X98051653Y-45738709D02* X97674529Y-44984462D01* X98321027Y-44876712D02* X98428776Y-44822838D01* X98428776Y-44822838D02* X98482651Y-44822838D01* X98482651Y-44822838D02* X98563463Y-44849775D01* X98563463Y-44849775D02* X98644276Y-44930587D01* X98644276Y-44930587D02* X98671213Y-45011399D01* X98671213Y-45011399D02* X98671213Y-45065274D01* X98671213Y-45065274D02* X98644276Y-45146086D01* X98644276Y-45146086D02* X98428776Y-45361586D01* X98428776Y-45361586D02* X97863091Y-44795900D01* X97863091Y-44795900D02* X98051653Y-44607338D01* X98051653Y-44607338D02* X98132465Y-44580401D01* X98132465Y-44580401D02* X98186340Y-44580401D01* X98186340Y-44580401D02* X98267152Y-44607338D01* X98267152Y-44607338D02* X98321027Y-44661213D01* X98321027Y-44661213D02* X98347964Y-44742025D01* X98347964Y-44742025D02* X98347964Y-44795900D01* X98347964Y-44795900D02* X98321027Y-44876712D01* X98321027Y-44876712D02* X98132465Y-45065274D01* X98428776Y-44230215D02* X98886712Y-44688151D01* X98886712Y-44688151D02* X98967524Y-44715088D01* X98967524Y-44715088D02* X99021399Y-44715088D01* X99021399Y-44715088D02* X99102211Y-44688151D01* X99102211Y-44688151D02* X99209961Y-44580401D01* X99209961Y-44580401D02* X99236898Y-44499589D01* X99236898Y-44499589D02* X99236898Y-44445714D01* X99236898Y-44445714D02* X99209961Y-44364902D01* X99209961Y-44364902D02* X98752025Y-43906966D01* X99533210Y-44203277D02* X99640959Y-44149403D01* X99640959Y-44149403D02* X99775646Y-44014716D01* X99775646Y-44014716D02* X99802584Y-43933903D01* X99802584Y-43933903D02* X99802584Y-43880029D01* X99802584Y-43880029D02* X99775646Y-43799216D01* X99775646Y-43799216D02* X99721771Y-43745342D01* X99721771Y-43745342D02* X99640959Y-43718404D01* X99640959Y-43718404D02* X99587084Y-43718404D01* X99587084Y-43718404D02* X99506272Y-43745342D01* X99506272Y-43745342D02* X99371585Y-43826154D01* X99371585Y-43826154D02* X99290773Y-43853091D01* X99290773Y-43853091D02* X99236898Y-43853091D01* X99236898Y-43853091D02* X99156086Y-43826154D01* X99156086Y-43826154D02* X99102211Y-43772279D01* X99102211Y-43772279D02* X99075274Y-43691467D01* X99075274Y-43691467D02* X99075274Y-43637592D01* X99075274Y-43637592D02* X99102211Y-43556780D01* X99102211Y-43556780D02* X99236898Y-43422093D01* X99236898Y-43422093D02* X99344648Y-43368218D01* X99640959Y-43018032D02* X99775646Y-43152719D01* X99587085Y-43233531D02* X99775646Y-43152719D01* X99775646Y-43152719D02* X99856459Y-42964157D01* X99802584Y-43341280D02* X99775646Y-43152719D01* X99775646Y-43152719D02* X99964208Y-43179656D01* X71830435Y-49932431D02* X71749623Y-49959368D01* X71749623Y-49959368D02* X71668811Y-50040180D01* X71668811Y-50040180D02* X71614936Y-50147930D01* X71614936Y-50147930D02* X71614936Y-50255680D01* X71614936Y-50255680D02* X71641873Y-50336492D01* X71641873Y-50336492D02* X71722685Y-50471179D01* X71722685Y-50471179D02* X71803498Y-50551991D01* X71803498Y-50551991D02* X71938185Y-50632803D01* X71938185Y-50632803D02* X72018997Y-50659741D01* X72018997Y-50659741D02* X72126746Y-50659741D01* X72126746Y-50659741D02* X72234496Y-50605866D01* X72234496Y-50605866D02* X72288371Y-50551991D01* X72288371Y-50551991D02* X72342246Y-50444241D01* X72342246Y-50444241D02* X72342246Y-50390367D01* X72342246Y-50390367D02* X72153684Y-50201805D01* X72153684Y-50201805D02* X72045934Y-50309554D01* X72638557Y-50201805D02* X72072872Y-49636119D01* X72072872Y-49636119D02* X72961806Y-49878556D01* X72961806Y-49878556D02* X72396120Y-49312871D01* X73231180Y-49609182D02* X72665494Y-49043497D01* X72665494Y-49043497D02* X72800181Y-48908810D01* X72800181Y-48908810D02* X72907931Y-48854935D01* X72907931Y-48854935D02* X73015680Y-48854935D01* X73015680Y-48854935D02* X73096493Y-48881872D01* X73096493Y-48881872D02* X73231180Y-48962685D01* X73231180Y-48962685D02* X73311992Y-49043497D01* X73311992Y-49043497D02* X73392804Y-49178184D01* X73392804Y-49178184D02* X73419741Y-49258996D01* X73419741Y-49258996D02* X73419741Y-49366746D01* X73419741Y-49366746D02* X73365867Y-49474495D01* X73365867Y-49474495D02* X73231180Y-49609182D01* X73311992Y-48396999D02* X73446679Y-48531686D01* X73258117Y-48612498D02* X73446679Y-48531686D01* X73446679Y-48531686D02* X73527491Y-48343124D01* X73473616Y-48720248D02* X73446679Y-48531686D01* X73446679Y-48531686D02* X73635241Y-48558624D01* X71757372Y-47355494D02* X71676560Y-47382431D01* X71676560Y-47382431D02* X71595748Y-47463243D01* X71595748Y-47463243D02* X71541873Y-47570993D01* X71541873Y-47570993D02* X71541873Y-47678742D01* X71541873Y-47678742D02* X71568810Y-47759555D01* X71568810Y-47759555D02* X71649623Y-47894242D01* X71649623Y-47894242D02* X71730435Y-47975054D01* X71730435Y-47975054D02* X71865122Y-48055866D01* X71865122Y-48055866D02* X71945934Y-48082803D01* X71945934Y-48082803D02* X72053684Y-48082803D01* X72053684Y-48082803D02* X72161433Y-48028929D01* X72161433Y-48028929D02* X72215308Y-47975054D01* X72215308Y-47975054D02* X72269183Y-47867304D01* X72269183Y-47867304D02* X72269183Y-47813429D01* X72269183Y-47813429D02* X72080621Y-47624868D01* X72080621Y-47624868D02* X71972871Y-47732617D01* X72565494Y-47624868D02* X71999809Y-47059182D01* X71999809Y-47059182D02* X72215308Y-46843683D01* X72215308Y-46843683D02* X72296120Y-46816746D01* X72296120Y-46816746D02* X72349995Y-46816746D01* X72349995Y-46816746D02* X72430807Y-46843683D01* X72430807Y-46843683D02* X72511619Y-46924495D01* X72511619Y-46924495D02* X72538557Y-47005307D01* X72538557Y-47005307D02* X72538557Y-47059182D01* X72538557Y-47059182D02* X72511619Y-47139994D01* X72511619Y-47139994D02* X72296120Y-47355494D01* X73427491Y-46762871D02* X73104242Y-47086120D01* X73265867Y-46924495D02* X72700181Y-46358810D01* X72700181Y-46358810D02* X72727119Y-46493497D01* X72727119Y-46493497D02* X72727119Y-46601246D01* X72727119Y-46601246D02* X72700181Y-46682059D01* X71757372Y-52445494D02* X71676560Y-52472431D01* X71676560Y-52472431D02* X71595748Y-52553243D01* X71595748Y-52553243D02* X71541873Y-52660993D01* X71541873Y-52660993D02* X71541873Y-52768742D01* X71541873Y-52768742D02* X71568810Y-52849555D01* X71568810Y-52849555D02* X71649623Y-52984242D01* X71649623Y-52984242D02* X71730435Y-53065054D01* X71730435Y-53065054D02* X71865122Y-53145866D01* X71865122Y-53145866D02* X71945934Y-53172803D01* X71945934Y-53172803D02* X72053684Y-53172803D01* X72053684Y-53172803D02* X72161433Y-53118929D01* X72161433Y-53118929D02* X72215308Y-53065054D01* X72215308Y-53065054D02* X72269183Y-52957304D01* X72269183Y-52957304D02* X72269183Y-52903429D01* X72269183Y-52903429D02* X72080621Y-52714868D01* X72080621Y-52714868D02* X71972871Y-52822617D01* X72565494Y-52714868D02* X71999809Y-52149182D01* X71999809Y-52149182D02* X72215308Y-51933683D01* X72215308Y-51933683D02* X72296120Y-51906746D01* X72296120Y-51906746D02* X72349995Y-51906746D01* X72349995Y-51906746D02* X72430807Y-51933683D01* X72430807Y-51933683D02* X72511619Y-52014495D01* X72511619Y-52014495D02* X72538557Y-52095307D01* X72538557Y-52095307D02* X72538557Y-52149182D01* X72538557Y-52149182D02* X72511619Y-52229994D01* X72511619Y-52229994D02* X72296120Y-52445494D01* X72592432Y-51664309D02* X72592432Y-51610434D01* X72592432Y-51610434D02* X72619369Y-51529622D01* X72619369Y-51529622D02* X72754056Y-51394935D01* X72754056Y-51394935D02* X72834868Y-51367998D01* X72834868Y-51367998D02* X72888743Y-51367998D01* X72888743Y-51367998D02* X72969555Y-51394935D01* X72969555Y-51394935D02* X73023430Y-51448810D01* X73023430Y-51448810D02* X73077305Y-51556559D01* X73077305Y-51556559D02* X73077305Y-52203057D01* X73077305Y-52203057D02* X73427491Y-51852871D01* X97441998Y-83194868D02* X97361185Y-83221805D01* X97361185Y-83221805D02* X97280373Y-83302618D01* X97280373Y-83302618D02* X97226498Y-83410367D01* X97226498Y-83410367D02* X97226498Y-83518117D01* X97226498Y-83518117D02* X97253436Y-83598929D01* X97253436Y-83598929D02* X97334248Y-83733616D01* X97334248Y-83733616D02* X97415060Y-83814428D01* X97415060Y-83814428D02* X97549747Y-83895241D01* X97549747Y-83895241D02* X97630560Y-83922178D01* X97630560Y-83922178D02* X97738309Y-83922178D01* X97738309Y-83922178D02* X97846059Y-83868303D01* X97846059Y-83868303D02* X97899934Y-83814428D01* X97899934Y-83814428D02* X97953808Y-83706679D01* X97953808Y-83706679D02* X97953808Y-83652804D01* X97953808Y-83652804D02* X97765247Y-83464242D01* X97765247Y-83464242D02* X97657497Y-83571992D01* X98250120Y-83464242D02* X97684434Y-82898557D01* X97684434Y-82898557D02* X97899934Y-82683057D01* X97899934Y-82683057D02* X97980746Y-82656120D01* X97980746Y-82656120D02* X98034621Y-82656120D01* X98034621Y-82656120D02* X98115433Y-82683057D01* X98115433Y-82683057D02* X98196245Y-82763870D01* X98196245Y-82763870D02* X98223182Y-82844682D01* X98223182Y-82844682D02* X98223182Y-82898557D01* X98223182Y-82898557D02* X98196245Y-82979369D01* X98196245Y-82979369D02* X97980746Y-83194868D01* X99112117Y-82602245D02* X98788868Y-82925494D01* X98950492Y-82763870D02* X98384807Y-82198184D01* X98384807Y-82198184D02* X98411744Y-82332871D01* X98411744Y-82332871D02* X98411744Y-82440621D01* X98411744Y-82440621D02* X98384807Y-82521433D01* X99381491Y-82332871D02* X99489240Y-82225121D01* X99489240Y-82225121D02* X99516178Y-82144309D01* X99516178Y-82144309D02* X99516178Y-82090434D01* X99516178Y-82090434D02* X99489240Y-81955747D01* X99489240Y-81955747D02* X99408428Y-81821060D01* X99408428Y-81821060D02* X99192929Y-81605561D01* X99192929Y-81605561D02* X99112117Y-81578624D01* X99112117Y-81578624D02* X99058242Y-81578624D01* X99058242Y-81578624D02* X98977430Y-81605561D01* X98977430Y-81605561D02* X98869680Y-81713311D01* X98869680Y-81713311D02* X98842743Y-81794123D01* X98842743Y-81794123D02* X98842743Y-81847998D01* X98842743Y-81847998D02* X98869680Y-81928810D01* X98869680Y-81928810D02* X99004367Y-82063497D01* X99004367Y-82063497D02* X99085179Y-82090434D01* X99085179Y-82090434D02* X99139054Y-82090434D01* X99139054Y-82090434D02* X99219866Y-82063497D01* X99219866Y-82063497D02* X99327616Y-81955747D01* X99327616Y-81955747D02* X99354553Y-81874935D01* X99354553Y-81874935D02* X99354553Y-81821060D01* X99354553Y-81821060D02* X99327616Y-81740248D01* X97234123Y-55324868D02* X97584309Y-54974682D01* X97584309Y-54974682D02* X97611247Y-55378743D01* X97611247Y-55378743D02* X97692059Y-55297931D01* X97692059Y-55297931D02* X97772871Y-55270993D01* X97772871Y-55270993D02* X97826746Y-55270993D01* X97826746Y-55270993D02* X97907558Y-55297931D01* X97907558Y-55297931D02* X98042245Y-55432618D01* X98042245Y-55432618D02* X98069182Y-55513430D01* X98069182Y-55513430D02* X98069182Y-55567305D01* X98069182Y-55567305D02* X98042245Y-55648117D01* X98042245Y-55648117D02* X97880621Y-55809741D01* X97880621Y-55809741D02* X97799808Y-55836679D01* X97799808Y-55836679D02* X97745934Y-55836679D01* X97745934Y-54813057D02* X98500181Y-55190181D01* X98500181Y-55190181D02* X98123057Y-54435934D01* X98257744Y-54301247D02* X98607930Y-53951061D01* X98607930Y-53951061D02* X98634868Y-54355122D01* X98634868Y-54355122D02* X98715680Y-54274309D01* X98715680Y-54274309D02* X98796492Y-54247372D01* X98796492Y-54247372D02* X98850367Y-54247372D01* X98850367Y-54247372D02* X98931179Y-54274309D01* X98931179Y-54274309D02* X99065866Y-54408996D01* X99065866Y-54408996D02* X99092804Y-54489809D01* X99092804Y-54489809D02* X99092804Y-54543683D01* X99092804Y-54543683D02* X99065866Y-54624496D01* X99065866Y-54624496D02* X98904242Y-54786120D01* X98904242Y-54786120D02* X98823430Y-54813057D01* X98823430Y-54813057D02* X98769555Y-54813057D01* X98931179Y-53627812D02* X99065866Y-53762499D01* X98877305Y-53843311D02* X99065866Y-53762499D01* X99065866Y-53762499D02* X99146679Y-53573937D01* X99092804Y-53951060D02* X99065866Y-53762499D01* X99065866Y-53762499D02* X99254428Y-53789436D01* X97430435Y-49932431D02* X97349623Y-49959368D01* X97349623Y-49959368D02* X97268811Y-50040180D01* X97268811Y-50040180D02* X97214936Y-50147930D01* X97214936Y-50147930D02* X97214936Y-50255680D01* X97214936Y-50255680D02* X97241873Y-50336492D01* X97241873Y-50336492D02* X97322685Y-50471179D01* X97322685Y-50471179D02* X97403498Y-50551991D01* X97403498Y-50551991D02* X97538185Y-50632803D01* X97538185Y-50632803D02* X97618997Y-50659741D01* X97618997Y-50659741D02* X97726746Y-50659741D01* X97726746Y-50659741D02* X97834496Y-50605866D01* X97834496Y-50605866D02* X97888371Y-50551991D01* X97888371Y-50551991D02* X97942246Y-50444241D01* X97942246Y-50444241D02* X97942246Y-50390367D01* X97942246Y-50390367D02* X97753684Y-50201805D01* X97753684Y-50201805D02* X97645934Y-50309554D01* X98238557Y-50201805D02* X97672872Y-49636119D01* X97672872Y-49636119D02* X98561806Y-49878556D01* X98561806Y-49878556D02* X97996120Y-49312871D01* X98831180Y-49609182D02* X98265494Y-49043497D01* X98265494Y-49043497D02* X98400181Y-48908810D01* X98400181Y-48908810D02* X98507931Y-48854935D01* X98507931Y-48854935D02* X98615680Y-48854935D01* X98615680Y-48854935D02* X98696493Y-48881872D01* X98696493Y-48881872D02* X98831180Y-48962685D01* X98831180Y-48962685D02* X98911992Y-49043497D01* X98911992Y-49043497D02* X98992804Y-49178184D01* X98992804Y-49178184D02* X99019741Y-49258996D01* X99019741Y-49258996D02* X99019741Y-49366746D01* X99019741Y-49366746D02* X98965867Y-49474495D01* X98965867Y-49474495D02* X98831180Y-49609182D01* X98911992Y-48396999D02* X99046679Y-48531686D01* X98858117Y-48612498D02* X99046679Y-48531686D01* X99046679Y-48531686D02* X99127491Y-48343124D01* X99073616Y-48720248D02* X99046679Y-48531686D01* X99046679Y-48531686D02* X99235241Y-48558624D01* X98182651Y-70777710D02* X97724716Y-70696898D01* X97859403Y-71100959D02* X97293717Y-70535274D01* X97293717Y-70535274D02* X97509216Y-70319775D01* X97509216Y-70319775D02* X97590029Y-70292837D01* X97590029Y-70292837D02* X97643903Y-70292837D01* X97643903Y-70292837D02* X97724716Y-70319775D01* X97724716Y-70319775D02* X97805528Y-70400587D01* X97805528Y-70400587D02* X97832465Y-70481399D01* X97832465Y-70481399D02* X97832465Y-70535274D01* X97832465Y-70535274D02* X97805528Y-70616086D01* X97805528Y-70616086D02* X97590029Y-70831585D01* X97859403Y-69969588D02* X98317338Y-70427524D01* X98317338Y-70427524D02* X98398151Y-70454462D01* X98398151Y-70454462D02* X98452025Y-70454462D01* X98452025Y-70454462D02* X98532838Y-70427524D01* X98532838Y-70427524D02* X98640587Y-70319775D01* X98640587Y-70319775D02* X98667525Y-70238962D01* X98667525Y-70238962D02* X98667525Y-70185088D01* X98667525Y-70185088D02* X98640587Y-70104275D01* X98640587Y-70104275D02* X98182651Y-69646340D01* X99017711Y-69942651D02* X98452025Y-69376966D01* X98452025Y-69376966D02* X99340959Y-69619402D01* X99340959Y-69619402D02* X98775274Y-69053717D01* X71287998Y-90814868D02* X71207185Y-90841805D01* X71207185Y-90841805D02* X71126373Y-90922618D01* X71126373Y-90922618D02* X71072498Y-91030367D01* X71072498Y-91030367D02* X71072498Y-91138117D01* X71072498Y-91138117D02* X71099436Y-91218929D01* X71099436Y-91218929D02* X71180248Y-91353616D01* X71180248Y-91353616D02* X71261060Y-91434428D01* X71261060Y-91434428D02* X71395747Y-91515241D01* X71395747Y-91515241D02* X71476560Y-91542178D01* X71476560Y-91542178D02* X71584309Y-91542178D01* X71584309Y-91542178D02* X71692059Y-91488303D01* X71692059Y-91488303D02* X71745934Y-91434428D01* X71745934Y-91434428D02* X71799808Y-91326679D01* X71799808Y-91326679D02* X71799808Y-91272804D01* X71799808Y-91272804D02* X71611247Y-91084242D01* X71611247Y-91084242D02* X71503497Y-91191992D01* X72096120Y-91084242D02* X71530434Y-90518557D01* X71530434Y-90518557D02* X71745934Y-90303057D01* X71745934Y-90303057D02* X71826746Y-90276120D01* X71826746Y-90276120D02* X71880621Y-90276120D01* X71880621Y-90276120D02* X71961433Y-90303057D01* X71961433Y-90303057D02* X72042245Y-90383870D01* X72042245Y-90383870D02* X72069182Y-90464682D01* X72069182Y-90464682D02* X72069182Y-90518557D01* X72069182Y-90518557D02* X72042245Y-90599369D01* X72042245Y-90599369D02* X71826746Y-90814868D01* X72958117Y-90222245D02* X72634868Y-90545494D01* X72796492Y-90383870D02* X72230807Y-89818184D01* X72230807Y-89818184D02* X72257744Y-89952871D01* X72257744Y-89952871D02* X72257744Y-90060621D01* X72257744Y-90060621D02* X72230807Y-90141433D01* X73065866Y-89360248D02* X73442990Y-89737372D01* X72715680Y-89279436D02* X72985054Y-89818184D01* X72985054Y-89818184D02* X73335240Y-89467998D01* X73254428Y-88794563D02* X73389115Y-88929250D01* X73200554Y-89010062D02* X73389115Y-88929250D01* X73389115Y-88929250D02* X73469928Y-88740688D01* X73416053Y-89117811D02* X73389115Y-88929250D01* X73389115Y-88929250D02* X73577677Y-88956187D01* X97441998Y-93354868D02* X97361185Y-93381805D01* X97361185Y-93381805D02* X97280373Y-93462618D01* X97280373Y-93462618D02* X97226498Y-93570367D01* X97226498Y-93570367D02* X97226498Y-93678117D01* X97226498Y-93678117D02* X97253436Y-93758929D01* X97253436Y-93758929D02* X97334248Y-93893616D01* X97334248Y-93893616D02* X97415060Y-93974428D01* X97415060Y-93974428D02* X97549747Y-94055241D01* X97549747Y-94055241D02* X97630560Y-94082178D01* X97630560Y-94082178D02* X97738309Y-94082178D01* X97738309Y-94082178D02* X97846059Y-94028303D01* X97846059Y-94028303D02* X97899934Y-93974428D01* X97899934Y-93974428D02* X97953808Y-93866679D01* X97953808Y-93866679D02* X97953808Y-93812804D01* X97953808Y-93812804D02* X97765247Y-93624242D01* X97765247Y-93624242D02* X97657497Y-93731992D01* X98250120Y-93624242D02* X97684434Y-93058557D01* X97684434Y-93058557D02* X97899934Y-92843057D01* X97899934Y-92843057D02* X97980746Y-92816120D01* X97980746Y-92816120D02* X98034621Y-92816120D01* X98034621Y-92816120D02* X98115433Y-92843057D01* X98115433Y-92843057D02* X98196245Y-92923870D01* X98196245Y-92923870D02* X98223182Y-93004682D01* X98223182Y-93004682D02* X98223182Y-93058557D01* X98223182Y-93058557D02* X98196245Y-93139369D01* X98196245Y-93139369D02* X97980746Y-93354868D01* X99112117Y-92762245D02* X98788868Y-93085494D01* X98950492Y-92923870D02* X98384807Y-92358184D01* X98384807Y-92358184D02* X98411744Y-92492871D01* X98411744Y-92492871D02* X98411744Y-92600621D01* X98411744Y-92600621D02* X98384807Y-92681433D01* X99031305Y-91711686D02* X98923555Y-91819436D01* X98923555Y-91819436D02* X98896618Y-91900248D01* X98896618Y-91900248D02* X98896618Y-91954123D01* X98896618Y-91954123D02* X98923555Y-92088810D01* X98923555Y-92088810D02* X99004367Y-92223497D01* X99004367Y-92223497D02* X99219866Y-92438996D01* X99219866Y-92438996D02* X99300679Y-92465934D01* X99300679Y-92465934D02* X99354553Y-92465934D01* X99354553Y-92465934D02* X99435366Y-92438996D01* X99435366Y-92438996D02* X99543115Y-92331247D01* X99543115Y-92331247D02* X99570053Y-92250434D01* X99570053Y-92250434D02* X99570053Y-92196560D01* X99570053Y-92196560D02* X99543115Y-92115747D01* X99543115Y-92115747D02* X99408428Y-91981060D01* X99408428Y-91981060D02* X99327616Y-91954123D01* X99327616Y-91954123D02* X99273741Y-91954123D01* X99273741Y-91954123D02* X99192929Y-91981060D01* X99192929Y-91981060D02* X99085179Y-92088810D01* X99085179Y-92088810D02* X99058242Y-92169622D01* X99058242Y-92169622D02* X99058242Y-92223497D01* X99058242Y-92223497D02* X99085179Y-92304309D01* X97495873Y-63575240D02* X97765247Y-63305866D01* X97603623Y-63790739D02* X97226499Y-63036492D01* X97226499Y-63036492D02* X97980746Y-63413615D01* X97926871Y-62389994D02* X97846059Y-62416932D01* X97846059Y-62416932D02* X97765247Y-62497744D01* X97765247Y-62497744D02* X97711372Y-62605494D01* X97711372Y-62605494D02* X97711372Y-62713243D01* X97711372Y-62713243D02* X97738310Y-62794055D01* X97738310Y-62794055D02* X97819122Y-62928742D01* X97819122Y-62928742D02* X97899934Y-63009555D01* X97899934Y-63009555D02* X98034621Y-63090367D01* X98034621Y-63090367D02* X98115433Y-63117304D01* X98115433Y-63117304D02* X98223183Y-63117304D01* X98223183Y-63117304D02* X98330932Y-63063429D01* X98330932Y-63063429D02* X98384807Y-63009555D01* X98384807Y-63009555D02* X98438682Y-62901805D01* X98438682Y-62901805D02* X98438682Y-62847930D01* X98438682Y-62847930D02* X98250120Y-62659368D01* X98250120Y-62659368D02* X98142371Y-62767118D01* X98734993Y-62659368D02* X98169308Y-62093683D01* X98169308Y-62093683D02* X99058242Y-62336120D01* X99058242Y-62336120D02* X98492557Y-61770434D01* X99327616Y-62066746D02* X98761931Y-61501060D01* X98761931Y-61501060D02* X98896618Y-61366373D01* X98896618Y-61366373D02* X99004367Y-61312498D01* X99004367Y-61312498D02* X99112117Y-61312498D01* X99112117Y-61312498D02* X99192929Y-61339436D01* X99192929Y-61339436D02* X99327616Y-61420248D01* X99327616Y-61420248D02* X99408428Y-61501060D01* X99408428Y-61501060D02* X99489241Y-61635747D01* X99489241Y-61635747D02* X99516178Y-61716560D01* X99516178Y-61716560D02* X99516178Y-61824309D01* X99516178Y-61824309D02* X99462303Y-61932059D01* X99462303Y-61932059D02* X99327616Y-62066746D01* X48123618Y-68273068D02* X48123618Y-69082591D01* X48123618Y-69082591D02* X48171237Y-69177829D01* X48171237Y-69177829D02* X48218856Y-69225449D01* X48218856Y-69225449D02* X48314094Y-69273068D01* X48314094Y-69273068D02* X48504570Y-69273068D01* X48504570Y-69273068D02* X48599808Y-69225449D01* X48599808Y-69225449D02* X48647427Y-69177829D01* X48647427Y-69177829D02* X48695046Y-69082591D01* X48695046Y-69082591D02* X48695046Y-68273068D01* X49123618Y-68368306D02* X49171237Y-68320687D01* X49171237Y-68320687D02* X49266475Y-68273068D01* X49266475Y-68273068D02* X49504570Y-68273068D01* X49504570Y-68273068D02* X49599808Y-68320687D01* X49599808Y-68320687D02* X49647427Y-68368306D01* X49647427Y-68368306D02* X49695046Y-68463544D01* X49695046Y-68463544D02* X49695046Y-68558782D01* X49695046Y-68558782D02* X49647427Y-68701639D01* X49647427Y-68701639D02* X49075999Y-69273068D01* X49075999Y-69273068D02* X49695046Y-69273068D01* X35398895Y-60049743D02* X35318083Y-60076680D01* X35318083Y-60076680D02* X35237271Y-60157492D01* X35237271Y-60157492D02* X35183396Y-60265242D01* X35183396Y-60265242D02* X35183396Y-60372991D01* X35183396Y-60372991D02* X35210333Y-60453804D01* X35210333Y-60453804D02* X35291146Y-60588491D01* X35291146Y-60588491D02* X35371958Y-60669303D01* X35371958Y-60669303D02* X35506645Y-60750115D01* X35506645Y-60750115D02* X35587457Y-60777052D01* X35587457Y-60777052D02* X35695207Y-60777052D01* X35695207Y-60777052D02* X35802956Y-60723178D01* X35802956Y-60723178D02* X35856831Y-60669303D01* X35856831Y-60669303D02* X35910706Y-60561553D01* X35910706Y-60561553D02* X35910706Y-60507678D01* X35910706Y-60507678D02* X35722144Y-60319117D01* X35722144Y-60319117D02* X35614394Y-60426866D01* X36207017Y-60319117D02* X35641332Y-59753431D01* X35641332Y-59753431D02* X35856831Y-59537932D01* X35856831Y-59537932D02* X35937643Y-59510995D01* X35937643Y-59510995D02* X35991518Y-59510995D01* X35991518Y-59510995D02* X36072330Y-59537932D01* X36072330Y-59537932D02* X36153142Y-59618744D01* X36153142Y-59618744D02* X36180080Y-59699556D01* X36180080Y-59699556D02* X36180080Y-59753431D01* X36180080Y-59753431D02* X36153142Y-59834243D01* X36153142Y-59834243D02* X35937643Y-60049743D01* X36476391Y-58918372D02* X36207017Y-59187746D01* X36207017Y-59187746D02* X36449454Y-59484057D01* X36449454Y-59484057D02* X36449454Y-59430182D01* X36449454Y-59430182D02* X36476391Y-59349370D01* X36476391Y-59349370D02* X36611078Y-59214683D01* X36611078Y-59214683D02* X36691890Y-59187746D01* X36691890Y-59187746D02* X36745765Y-59187746D01* X36745765Y-59187746D02* X36826577Y-59214683D01* X36826577Y-59214683D02* X36961264Y-59349370D01* X36961264Y-59349370D02* X36988202Y-59430182D01* X36988202Y-59430182D02* X36988202Y-59484057D01* X36988202Y-59484057D02* X36961264Y-59564869D01* X36961264Y-59564869D02* X36826577Y-59699556D01* X36826577Y-59699556D02* X36745765Y-59726494D01* X36745765Y-59726494D02* X36691890Y-59726494D01* X60971958Y-49916680D02* X60891146Y-49943617D01* X60891146Y-49943617D02* X60810334Y-50024429D01* X60810334Y-50024429D02* X60756459Y-50132179D01* X60756459Y-50132179D02* X60756459Y-50239929D01* X60756459Y-50239929D02* X60783396Y-50320741D01* X60783396Y-50320741D02* X60864208Y-50455428D01* X60864208Y-50455428D02* X60945021Y-50536240D01* X60945021Y-50536240D02* X61079708Y-50617052D01* X61079708Y-50617052D02* X61160520Y-50643990D01* X61160520Y-50643990D02* X61268269Y-50643990D01* X61268269Y-50643990D02* X61376019Y-50590115D01* X61376019Y-50590115D02* X61429894Y-50536240D01* X61429894Y-50536240D02* X61483769Y-50428490D01* X61483769Y-50428490D02* X61483769Y-50374616D01* X61483769Y-50374616D02* X61295207Y-50186054D01* X61295207Y-50186054D02* X61187457Y-50293803D01* X61780080Y-50186054D02* X61214395Y-49620368D01* X61214395Y-49620368D02* X62103329Y-49862805D01* X62103329Y-49862805D02* X61537643Y-49297120D01* X62372703Y-49593431D02* X61807017Y-49027746D01* X61807017Y-49027746D02* X61941704Y-48893059D01* X61941704Y-48893059D02* X62049454Y-48839184D01* X62049454Y-48839184D02* X62157203Y-48839184D01* X62157203Y-48839184D02* X62238016Y-48866121D01* X62238016Y-48866121D02* X62372703Y-48946934D01* X62372703Y-48946934D02* X62453515Y-49027746D01* X62453515Y-49027746D02* X62534327Y-49162433D01* X62534327Y-49162433D02* X62561264Y-49243245D01* X62561264Y-49243245D02* X62561264Y-49350995D01* X62561264Y-49350995D02* X62507390Y-49458744D01* X62507390Y-49458744D02* X62372703Y-49593431D01* X62453515Y-48381248D02* X62588202Y-48515935D01* X62399640Y-48596747D02* X62588202Y-48515935D01* X62588202Y-48515935D02* X62669014Y-48327373D01* X62615139Y-48704497D02* X62588202Y-48515935D01* X62588202Y-48515935D02* X62776764Y-48542873D01* X43329333Y-96536353D02* X43291237Y-96574449D01* X43291237Y-96574449D02* X43176952Y-96612544D01* X43176952Y-96612544D02* X43100761Y-96612544D01* X43100761Y-96612544D02* X42986475Y-96574449D01* X42986475Y-96574449D02* X42910285Y-96498258D01* X42910285Y-96498258D02* X42872190Y-96422068D01* X42872190Y-96422068D02* X42834094Y-96269687D01* X42834094Y-96269687D02* X42834094Y-96155401D01* X42834094Y-96155401D02* X42872190Y-96003020D01* X42872190Y-96003020D02* X42910285Y-95926829D01* X42910285Y-95926829D02* X42986475Y-95850639D01* X42986475Y-95850639D02* X43100761Y-95812544D01* X43100761Y-95812544D02* X43176952Y-95812544D01* X43176952Y-95812544D02* X43291237Y-95850639D01* X43291237Y-95850639D02* X43329333Y-95888734D01* X44053142Y-96612544D02* X43672190Y-96612544D01* X43672190Y-96612544D02* X43672190Y-95812544D01* X44319809Y-96612544D02* X44319809Y-95812544D01* X44776952Y-96612544D02* X44434094Y-96155401D01* X44776952Y-95812544D02* X44319809Y-96269687D01* X34875521Y-93339117D02* X34794708Y-93366054D01* X34794708Y-93366054D02* X34713896Y-93446867D01* X34713896Y-93446867D02* X34660021Y-93554616D01* X34660021Y-93554616D02* X34660021Y-93662366D01* X34660021Y-93662366D02* X34686959Y-93743178D01* X34686959Y-93743178D02* X34767771Y-93877865D01* X34767771Y-93877865D02* X34848583Y-93958677D01* X34848583Y-93958677D02* X34983270Y-94039490D01* X34983270Y-94039490D02* X35064083Y-94066427D01* X35064083Y-94066427D02* X35171832Y-94066427D01* X35171832Y-94066427D02* X35279582Y-94012552D01* X35279582Y-94012552D02* X35333457Y-93958677D01* X35333457Y-93958677D02* X35387331Y-93850928D01* X35387331Y-93850928D02* X35387331Y-93797053D01* X35387331Y-93797053D02* X35198770Y-93608491D01* X35198770Y-93608491D02* X35091020Y-93716241D01* X35683643Y-93608491D02* X35117957Y-93042806D01* X35117957Y-93042806D02* X35333457Y-92827306D01* X35333457Y-92827306D02* X35414269Y-92800369D01* X35414269Y-92800369D02* X35468144Y-92800369D01* X35468144Y-92800369D02* X35548956Y-92827306D01* X35548956Y-92827306D02* X35629768Y-92908119D01* X35629768Y-92908119D02* X35656705Y-92988931D01* X35656705Y-92988931D02* X35656705Y-93042806D01* X35656705Y-93042806D02* X35629768Y-93123618D01* X35629768Y-93123618D02* X35414269Y-93339117D01* X36545640Y-92746494D02* X36222391Y-93069743D01* X36384015Y-92908119D02* X35818330Y-92342433D01* X35818330Y-92342433D02* X35845267Y-92477120D01* X35845267Y-92477120D02* X35845267Y-92584870D01* X35845267Y-92584870D02* X35818330Y-92665682D01* X36491765Y-91668998D02* X36222391Y-91938372D01* X36222391Y-91938372D02* X36464828Y-92234683D01* X36464828Y-92234683D02* X36464828Y-92180809D01* X36464828Y-92180809D02* X36491765Y-92099996D01* X36491765Y-92099996D02* X36626452Y-91965309D01* X36626452Y-91965309D02* X36707264Y-91938372D01* X36707264Y-91938372D02* X36761139Y-91938372D01* X36761139Y-91938372D02* X36841951Y-91965309D01* X36841951Y-91965309D02* X36976638Y-92099996D01* X36976638Y-92099996D02* X37003576Y-92180809D01* X37003576Y-92180809D02* X37003576Y-92234683D01* X37003576Y-92234683D02* X36976638Y-92315496D01* X36976638Y-92315496D02* X36841951Y-92450183D01* X36841951Y-92450183D02* X36761139Y-92477120D01* X36761139Y-92477120D02* X36707264Y-92477120D01* X36841951Y-91318812D02* X36976638Y-91453499D01* X36788077Y-91534311D02* X36976638Y-91453499D01* X36976638Y-91453499D02* X37057451Y-91264937D01* X37003576Y-91642060D02* X36976638Y-91453499D01* X36976638Y-91453499D02* X37165200Y-91480436D01* X60983521Y-85719117D02* X60902708Y-85746054D01* X60902708Y-85746054D02* X60821896Y-85826867D01* X60821896Y-85826867D02* X60768021Y-85934616D01* X60768021Y-85934616D02* X60768021Y-86042366D01* X60768021Y-86042366D02* X60794959Y-86123178D01* X60794959Y-86123178D02* X60875771Y-86257865D01* X60875771Y-86257865D02* X60956583Y-86338677D01* X60956583Y-86338677D02* X61091270Y-86419490D01* X61091270Y-86419490D02* X61172083Y-86446427D01* X61172083Y-86446427D02* X61279832Y-86446427D01* X61279832Y-86446427D02* X61387582Y-86392552D01* X61387582Y-86392552D02* X61441457Y-86338677D01* X61441457Y-86338677D02* X61495331Y-86230928D01* X61495331Y-86230928D02* X61495331Y-86177053D01* X61495331Y-86177053D02* X61306770Y-85988491D01* X61306770Y-85988491D02* X61199020Y-86096241D01* X61791643Y-85988491D02* X61225957Y-85422806D01* X61225957Y-85422806D02* X61441457Y-85207306D01* X61441457Y-85207306D02* X61522269Y-85180369D01* X61522269Y-85180369D02* X61576144Y-85180369D01* X61576144Y-85180369D02* X61656956Y-85207306D01* X61656956Y-85207306D02* X61737768Y-85288119D01* X61737768Y-85288119D02* X61764705Y-85368931D01* X61764705Y-85368931D02* X61764705Y-85422806D01* X61764705Y-85422806D02* X61737768Y-85503618D01* X61737768Y-85503618D02* X61522269Y-85719117D01* X62653640Y-85126494D02* X62330391Y-85449743D01* X62492015Y-85288119D02* X61926330Y-84722433D01* X61926330Y-84722433D02* X61953267Y-84857120D01* X61953267Y-84857120D02* X61953267Y-84964870D01* X61953267Y-84964870D02* X61926330Y-85045682D01* X62653640Y-84479996D02* X62572828Y-84506934D01* X62572828Y-84506934D02* X62518953Y-84506934D01* X62518953Y-84506934D02* X62438141Y-84479996D01* X62438141Y-84479996D02* X62411203Y-84453059D01* X62411203Y-84453059D02* X62384266Y-84372247D01* X62384266Y-84372247D02* X62384266Y-84318372D01* X62384266Y-84318372D02* X62411203Y-84237560D01* X62411203Y-84237560D02* X62518953Y-84129810D01* X62518953Y-84129810D02* X62599765Y-84102873D01* X62599765Y-84102873D02* X62653640Y-84102873D01* X62653640Y-84102873D02* X62734452Y-84129810D01* X62734452Y-84129810D02* X62761389Y-84156748D01* X62761389Y-84156748D02* X62788327Y-84237560D01* X62788327Y-84237560D02* X62788327Y-84291435D01* X62788327Y-84291435D02* X62761389Y-84372247D01* X62761389Y-84372247D02* X62653640Y-84479996D01* X62653640Y-84479996D02* X62626702Y-84560809D01* X62626702Y-84560809D02* X62626702Y-84614683D01* X62626702Y-84614683D02* X62653640Y-84695496D01* X62653640Y-84695496D02* X62761389Y-84803245D01* X62761389Y-84803245D02* X62842202Y-84830183D01* X62842202Y-84830183D02* X62896076Y-84830183D01* X62896076Y-84830183D02* X62976889Y-84803245D01* X62976889Y-84803245D02* X63084638Y-84695496D01* X63084638Y-84695496D02* X63111576Y-84614683D01* X63111576Y-84614683D02* X63111576Y-84560809D01* X63111576Y-84560809D02* X63084638Y-84479996D01* X63084638Y-84479996D02* X62976889Y-84372247D01* X62976889Y-84372247D02* X62896076Y-84345309D01* X62896076Y-84345309D02* X62842202Y-84345309D01* X62842202Y-84345309D02* X62761389Y-84372247D01* X60838929Y-45345834D02* X61593176Y-45722958D01* X61593176Y-45722958D02* X61216052Y-44968711D01* X61862550Y-44860961D02* X61970299Y-44807087D01* X61970299Y-44807087D02* X62024174Y-44807087D01* X62024174Y-44807087D02* X62104986Y-44834024D01* X62104986Y-44834024D02* X62185799Y-44914836D01* X62185799Y-44914836D02* X62212736Y-44995648D01* X62212736Y-44995648D02* X62212736Y-45049523D01* X62212736Y-45049523D02* X62185799Y-45130335D01* X62185799Y-45130335D02* X61970299Y-45345835D01* X61970299Y-45345835D02* X61404614Y-44780149D01* X61404614Y-44780149D02* X61593176Y-44591587D01* X61593176Y-44591587D02* X61673988Y-44564650D01* X61673988Y-44564650D02* X61727863Y-44564650D01* X61727863Y-44564650D02* X61808675Y-44591587D01* X61808675Y-44591587D02* X61862550Y-44645462D01* X61862550Y-44645462D02* X61889487Y-44726274D01* X61889487Y-44726274D02* X61889487Y-44780149D01* X61889487Y-44780149D02* X61862550Y-44860961D01* X61862550Y-44860961D02* X61673988Y-45049523D01* X61970299Y-44214464D02* X62428235Y-44672400D01* X62428235Y-44672400D02* X62509047Y-44699337D01* X62509047Y-44699337D02* X62562922Y-44699337D01* X62562922Y-44699337D02* X62643734Y-44672400D01* X62643734Y-44672400D02* X62751484Y-44564650D01* X62751484Y-44564650D02* X62778421Y-44483838D01* X62778421Y-44483838D02* X62778421Y-44429963D01* X62778421Y-44429963D02* X62751484Y-44349151D01* X62751484Y-44349151D02* X62293548Y-43891215D01* X63074733Y-44187526D02* X63182482Y-44133652D01* X63182482Y-44133652D02* X63317169Y-43998965D01* X63317169Y-43998965D02* X63344107Y-43918152D01* X63344107Y-43918152D02* X63344107Y-43864278D01* X63344107Y-43864278D02* X63317169Y-43783465D01* X63317169Y-43783465D02* X63263294Y-43729591D01* X63263294Y-43729591D02* X63182482Y-43702653D01* X63182482Y-43702653D02* X63128607Y-43702653D01* X63128607Y-43702653D02* X63047795Y-43729591D01* X63047795Y-43729591D02* X62913108Y-43810403D01* X62913108Y-43810403D02* X62832296Y-43837340D01* X62832296Y-43837340D02* X62778421Y-43837340D01* X62778421Y-43837340D02* X62697609Y-43810403D01* X62697609Y-43810403D02* X62643734Y-43756528D01* X62643734Y-43756528D02* X62616797Y-43675716D01* X62616797Y-43675716D02* X62616797Y-43621841D01* X62616797Y-43621841D02* X62643734Y-43541029D01* X62643734Y-43541029D02* X62778421Y-43406342D01* X62778421Y-43406342D02* X62886171Y-43352467D01* X63182482Y-43002281D02* X63317169Y-43136968D01* X63128608Y-43217780D02* X63317169Y-43136968D01* X63317169Y-43136968D02* X63397982Y-42948406D01* X63344107Y-43325529D02* X63317169Y-43136968D01* X63317169Y-43136968D02* X63505731Y-43163905D01* X61724174Y-70761959D02* X61266239Y-70681147D01* X61400926Y-71085208D02* X60835240Y-70519523D01* X60835240Y-70519523D02* X61050739Y-70304024D01* X61050739Y-70304024D02* X61131552Y-70277086D01* X61131552Y-70277086D02* X61185426Y-70277086D01* X61185426Y-70277086D02* X61266239Y-70304024D01* X61266239Y-70304024D02* X61347051Y-70384836D01* X61347051Y-70384836D02* X61373988Y-70465648D01* X61373988Y-70465648D02* X61373988Y-70519523D01* X61373988Y-70519523D02* X61347051Y-70600335D01* X61347051Y-70600335D02* X61131552Y-70815834D01* X61400926Y-69953837D02* X61858861Y-70411773D01* X61858861Y-70411773D02* X61939674Y-70438711D01* X61939674Y-70438711D02* X61993548Y-70438711D01* X61993548Y-70438711D02* X62074361Y-70411773D01* X62074361Y-70411773D02* X62182110Y-70304024D01* X62182110Y-70304024D02* X62209048Y-70223211D01* X62209048Y-70223211D02* X62209048Y-70169337D01* X62209048Y-70169337D02* X62182110Y-70088524D01* X62182110Y-70088524D02* X61724174Y-69630589D01* X62559234Y-69926900D02* X61993548Y-69361215D01* X61993548Y-69361215D02* X62882482Y-69603651D01* X62882482Y-69603651D02* X62316797Y-69037966D01* X60983521Y-78109117D02* X60902708Y-78136054D01* X60902708Y-78136054D02* X60821896Y-78216867D01* X60821896Y-78216867D02* X60768021Y-78324616D01* X60768021Y-78324616D02* X60768021Y-78432366D01* X60768021Y-78432366D02* X60794959Y-78513178D01* X60794959Y-78513178D02* X60875771Y-78647865D01* X60875771Y-78647865D02* X60956583Y-78728677D01* X60956583Y-78728677D02* X61091270Y-78809490D01* X61091270Y-78809490D02* X61172083Y-78836427D01* X61172083Y-78836427D02* X61279832Y-78836427D01* X61279832Y-78836427D02* X61387582Y-78782552D01* X61387582Y-78782552D02* X61441457Y-78728677D01* X61441457Y-78728677D02* X61495331Y-78620928D01* X61495331Y-78620928D02* X61495331Y-78567053D01* X61495331Y-78567053D02* X61306770Y-78378491D01* X61306770Y-78378491D02* X61199020Y-78486241D01* X61791643Y-78378491D02* X61225957Y-77812806D01* X61225957Y-77812806D02* X61441457Y-77597306D01* X61441457Y-77597306D02* X61522269Y-77570369D01* X61522269Y-77570369D02* X61576144Y-77570369D01* X61576144Y-77570369D02* X61656956Y-77597306D01* X61656956Y-77597306D02* X61737768Y-77678119D01* X61737768Y-77678119D02* X61764705Y-77758931D01* X61764705Y-77758931D02* X61764705Y-77812806D01* X61764705Y-77812806D02* X61737768Y-77893618D01* X61737768Y-77893618D02* X61522269Y-78109117D01* X61818580Y-77327932D02* X61818580Y-77274058D01* X61818580Y-77274058D02* X61845518Y-77193245D01* X61845518Y-77193245D02* X61980205Y-77058558D01* X61980205Y-77058558D02* X62061017Y-77031621D01* X62061017Y-77031621D02* X62114892Y-77031621D01* X62114892Y-77031621D02* X62195704Y-77058558D01* X62195704Y-77058558D02* X62249579Y-77112433D01* X62249579Y-77112433D02* X62303453Y-77220183D01* X62303453Y-77220183D02* X62303453Y-77866680D01* X62303453Y-77866680D02* X62653640Y-77516494D01* X63192388Y-76977746D02* X62869139Y-77300995D01* X63030763Y-77139370D02* X62465078Y-76573685D01* X62465078Y-76573685D02* X62492015Y-76708372D01* X62492015Y-76708372D02* X62492015Y-76816122D01* X62492015Y-76816122D02* X62465078Y-76896934D01* X60806272Y-47888491D02* X61560519Y-48265615D01* X61560519Y-48265615D02* X61183396Y-47511367D01* X61883768Y-47888491D02* X61991518Y-47834616D01* X61991518Y-47834616D02* X62126205Y-47699929D01* X62126205Y-47699929D02* X62153142Y-47619117D01* X62153142Y-47619117D02* X62153142Y-47565242D01* X62153142Y-47565242D02* X62126205Y-47484430D01* X62126205Y-47484430D02* X62072330Y-47430555D01* X62072330Y-47430555D02* X61991518Y-47403618D01* X61991518Y-47403618D02* X61937643Y-47403618D01* X61937643Y-47403618D02* X61856831Y-47430555D01* X61856831Y-47430555D02* X61722144Y-47511367D01* X61722144Y-47511367D02* X61641331Y-47538305D01* X61641331Y-47538305D02* X61587457Y-47538305D01* X61587457Y-47538305D02* X61506644Y-47511367D01* X61506644Y-47511367D02* X61452770Y-47457493D01* X61452770Y-47457493D02* X61425832Y-47376680D01* X61425832Y-47376680D02* X61425832Y-47322806D01* X61425832Y-47322806D02* X61452770Y-47241993D01* X61452770Y-47241993D02* X61587457Y-47107306D01* X61587457Y-47107306D02* X61695206Y-47053432D01* X62314767Y-46972619D02* X62584141Y-47241993D01* X61829893Y-46864870D02* X62314767Y-46972619D01* X62314767Y-46972619D02* X62207017Y-46487746D01* X62907389Y-46864870D02* X63015139Y-46810995D01* X63015139Y-46810995D02* X63149826Y-46676308D01* X63149826Y-46676308D02* X63176763Y-46595496D01* X63176763Y-46595496D02* X63176763Y-46541621D01* X63176763Y-46541621D02* X63149826Y-46460809D01* X63149826Y-46460809D02* X63095951Y-46406934D01* X63095951Y-46406934D02* X63015139Y-46379997D01* X63015139Y-46379997D02* X62961264Y-46379997D01* X62961264Y-46379997D02* X62880452Y-46406934D01* X62880452Y-46406934D02* X62745765Y-46487746D01* X62745765Y-46487746D02* X62664953Y-46514684D01* X62664953Y-46514684D02* X62611078Y-46514684D01* X62611078Y-46514684D02* X62530266Y-46487746D01* X62530266Y-46487746D02* X62476391Y-46433871D01* X62476391Y-46433871D02* X62449453Y-46353059D01* X62449453Y-46353059D02* X62449453Y-46299184D01* X62449453Y-46299184D02* X62476391Y-46218372D01* X62476391Y-46218372D02* X62611078Y-46083685D01* X62611078Y-46083685D02* X62718827Y-46029810D01* X34875521Y-78099117D02* X34794708Y-78126054D01* X34794708Y-78126054D02* X34713896Y-78206867D01* X34713896Y-78206867D02* X34660021Y-78314616D01* X34660021Y-78314616D02* X34660021Y-78422366D01* X34660021Y-78422366D02* X34686959Y-78503178D01* X34686959Y-78503178D02* X34767771Y-78637865D01* X34767771Y-78637865D02* X34848583Y-78718677D01* X34848583Y-78718677D02* X34983270Y-78799490D01* X34983270Y-78799490D02* X35064083Y-78826427D01* X35064083Y-78826427D02* X35171832Y-78826427D01* X35171832Y-78826427D02* X35279582Y-78772552D01* X35279582Y-78772552D02* X35333457Y-78718677D01* X35333457Y-78718677D02* X35387331Y-78610928D01* X35387331Y-78610928D02* X35387331Y-78557053D01* X35387331Y-78557053D02* X35198770Y-78368491D01* X35198770Y-78368491D02* X35091020Y-78476241D01* X35683643Y-78368491D02* X35117957Y-77802806D01* X35117957Y-77802806D02* X35333457Y-77587306D01* X35333457Y-77587306D02* X35414269Y-77560369D01* X35414269Y-77560369D02* X35468144Y-77560369D01* X35468144Y-77560369D02* X35548956Y-77587306D01* X35548956Y-77587306D02* X35629768Y-77668119D01* X35629768Y-77668119D02* X35656705Y-77748931D01* X35656705Y-77748931D02* X35656705Y-77802806D01* X35656705Y-77802806D02* X35629768Y-77883618D01* X35629768Y-77883618D02* X35414269Y-78099117D01* X36545640Y-77506494D02* X36222391Y-77829743D01* X36384015Y-77668119D02* X35818330Y-77102433D01* X35818330Y-77102433D02* X35845267Y-77237120D01* X35845267Y-77237120D02* X35845267Y-77344870D01* X35845267Y-77344870D02* X35818330Y-77425682D01* X36330141Y-76590622D02* X36384015Y-76536748D01* X36384015Y-76536748D02* X36464828Y-76509810D01* X36464828Y-76509810D02* X36518702Y-76509810D01* X36518702Y-76509810D02* X36599515Y-76536748D01* X36599515Y-76536748D02* X36734202Y-76617560D01* X36734202Y-76617560D02* X36868889Y-76752247D01* X36868889Y-76752247D02* X36949701Y-76886934D01* X36949701Y-76886934D02* X36976638Y-76967746D01* X36976638Y-76967746D02* X36976638Y-77021621D01* X36976638Y-77021621D02* X36949701Y-77102433D01* X36949701Y-77102433D02* X36895826Y-77156308D01* X36895826Y-77156308D02* X36815014Y-77183245D01* X36815014Y-77183245D02* X36761139Y-77183245D01* X36761139Y-77183245D02* X36680327Y-77156308D01* X36680327Y-77156308D02* X36545640Y-77075496D01* X36545640Y-77075496D02* X36410953Y-76940809D01* X36410953Y-76940809D02* X36330141Y-76806122D01* X36330141Y-76806122D02* X36303203Y-76725309D01* X36303203Y-76725309D02* X36303203Y-76671435D01* X36303203Y-76671435D02* X36330141Y-76590622D01* X35398895Y-72749743D02* X35318083Y-72776680D01* X35318083Y-72776680D02* X35237271Y-72857492D01* X35237271Y-72857492D02* X35183396Y-72965242D01* X35183396Y-72965242D02* X35183396Y-73072991D01* X35183396Y-73072991D02* X35210333Y-73153804D01* X35210333Y-73153804D02* X35291146Y-73288491D01* X35291146Y-73288491D02* X35371958Y-73369303D01* X35371958Y-73369303D02* X35506645Y-73450115D01* X35506645Y-73450115D02* X35587457Y-73477052D01* X35587457Y-73477052D02* X35695207Y-73477052D01* X35695207Y-73477052D02* X35802956Y-73423178D01* X35802956Y-73423178D02* X35856831Y-73369303D01* X35856831Y-73369303D02* X35910706Y-73261553D01* X35910706Y-73261553D02* X35910706Y-73207678D01* X35910706Y-73207678D02* X35722144Y-73019117D01* X35722144Y-73019117D02* X35614394Y-73126866D01* X36207017Y-73019117D02* X35641332Y-72453431D01* X35641332Y-72453431D02* X35856831Y-72237932D01* X35856831Y-72237932D02* X35937643Y-72210995D01* X35937643Y-72210995D02* X35991518Y-72210995D01* X35991518Y-72210995D02* X36072330Y-72237932D01* X36072330Y-72237932D02* X36153142Y-72318744D01* X36153142Y-72318744D02* X36180080Y-72399556D01* X36180080Y-72399556D02* X36180080Y-72453431D01* X36180080Y-72453431D02* X36153142Y-72534243D01* X36153142Y-72534243D02* X35937643Y-72749743D01* X36799640Y-72426494D02* X36907390Y-72318744D01* X36907390Y-72318744D02* X36934327Y-72237932D01* X36934327Y-72237932D02* X36934327Y-72184057D01* X36934327Y-72184057D02* X36907390Y-72049370D01* X36907390Y-72049370D02* X36826577Y-71914683D01* X36826577Y-71914683D02* X36611078Y-71699184D01* X36611078Y-71699184D02* X36530266Y-71672247D01* X36530266Y-71672247D02* X36476391Y-71672247D01* X36476391Y-71672247D02* X36395579Y-71699184D01* X36395579Y-71699184D02* X36287829Y-71806934D01* X36287829Y-71806934D02* X36260892Y-71887746D01* X36260892Y-71887746D02* X36260892Y-71941621D01* X36260892Y-71941621D02* X36287829Y-72022433D01* X36287829Y-72022433D02* X36422516Y-72157120D01* X36422516Y-72157120D02* X36503329Y-72184057D01* X36503329Y-72184057D02* X36557203Y-72184057D01* X36557203Y-72184057D02* X36638016Y-72157120D01* X36638016Y-72157120D02* X36745765Y-72049370D01* X36745765Y-72049370D02* X36772703Y-71968558D01* X36772703Y-71968558D02* X36772703Y-71914683D01* X36772703Y-71914683D02* X36745765Y-71833871D01* X35371958Y-88016680D02* X35291146Y-88043617D01* X35291146Y-88043617D02* X35210334Y-88124429D01* X35210334Y-88124429D02* X35156459Y-88232179D01* X35156459Y-88232179D02* X35156459Y-88339929D01* X35156459Y-88339929D02* X35183396Y-88420741D01* X35183396Y-88420741D02* X35264208Y-88555428D01* X35264208Y-88555428D02* X35345021Y-88636240D01* X35345021Y-88636240D02* X35479708Y-88717052D01* X35479708Y-88717052D02* X35560520Y-88743990D01* X35560520Y-88743990D02* X35668269Y-88743990D01* X35668269Y-88743990D02* X35776019Y-88690115D01* X35776019Y-88690115D02* X35829894Y-88636240D01* X35829894Y-88636240D02* X35883769Y-88528490D01* X35883769Y-88528490D02* X35883769Y-88474616D01* X35883769Y-88474616D02* X35695207Y-88286054D01* X35695207Y-88286054D02* X35587457Y-88393803D01* X36180080Y-88286054D02* X35614395Y-87720368D01* X35614395Y-87720368D02* X36503329Y-87962805D01* X36503329Y-87962805D02* X35937643Y-87397120D01* X36772703Y-87693431D02* X36207017Y-87127746D01* X36207017Y-87127746D02* X36341704Y-86993059D01* X36341704Y-86993059D02* X36449454Y-86939184D01* X36449454Y-86939184D02* X36557203Y-86939184D01* X36557203Y-86939184D02* X36638016Y-86966121D01* X36638016Y-86966121D02* X36772703Y-87046934D01* X36772703Y-87046934D02* X36853515Y-87127746D01* X36853515Y-87127746D02* X36934327Y-87262433D01* X36934327Y-87262433D02* X36961264Y-87343245D01* X36961264Y-87343245D02* X36961264Y-87450995D01* X36961264Y-87450995D02* X36907390Y-87558744D01* X36907390Y-87558744D02* X36772703Y-87693431D01* X36853515Y-86481248D02* X36988202Y-86615935D01* X36799640Y-86696747D02* X36988202Y-86615935D01* X36988202Y-86615935D02* X37069014Y-86427373D01* X37015139Y-86804497D02* X36988202Y-86615935D01* X36988202Y-86615935D02* X37176764Y-86642873D01* X35398895Y-65129743D02* X35318083Y-65156680D01* X35318083Y-65156680D02* X35237271Y-65237492D01* X35237271Y-65237492D02* X35183396Y-65345242D01* X35183396Y-65345242D02* X35183396Y-65452991D01* X35183396Y-65452991D02* X35210333Y-65533804D01* X35210333Y-65533804D02* X35291146Y-65668491D01* X35291146Y-65668491D02* X35371958Y-65749303D01* X35371958Y-65749303D02* X35506645Y-65830115D01* X35506645Y-65830115D02* X35587457Y-65857052D01* X35587457Y-65857052D02* X35695207Y-65857052D01* X35695207Y-65857052D02* X35802956Y-65803178D01* X35802956Y-65803178D02* X35856831Y-65749303D01* X35856831Y-65749303D02* X35910706Y-65641553D01* X35910706Y-65641553D02* X35910706Y-65587678D01* X35910706Y-65587678D02* X35722144Y-65399117D01* X35722144Y-65399117D02* X35614394Y-65506866D01* X36207017Y-65399117D02* X35641332Y-64833431D01* X35641332Y-64833431D02* X35856831Y-64617932D01* X35856831Y-64617932D02* X35937643Y-64590995D01* X35937643Y-64590995D02* X35991518Y-64590995D01* X35991518Y-64590995D02* X36072330Y-64617932D01* X36072330Y-64617932D02* X36153142Y-64698744D01* X36153142Y-64698744D02* X36180080Y-64779556D01* X36180080Y-64779556D02* X36180080Y-64833431D01* X36180080Y-64833431D02* X36153142Y-64914243D01* X36153142Y-64914243D02* X35937643Y-65129743D01* X36449454Y-64025309D02* X36341704Y-64133059D01* X36341704Y-64133059D02* X36314767Y-64213871D01* X36314767Y-64213871D02* X36314767Y-64267746D01* X36314767Y-64267746D02* X36341704Y-64402433D01* X36341704Y-64402433D02* X36422516Y-64537120D01* X36422516Y-64537120D02* X36638016Y-64752619D01* X36638016Y-64752619D02* X36718828Y-64779556D01* X36718828Y-64779556D02* X36772703Y-64779556D01* X36772703Y-64779556D02* X36853515Y-64752619D01* X36853515Y-64752619D02* X36961264Y-64644869D01* X36961264Y-64644869D02* X36988202Y-64564057D01* X36988202Y-64564057D02* X36988202Y-64510182D01* X36988202Y-64510182D02* X36961264Y-64429370D01* X36961264Y-64429370D02* X36826577Y-64294683D01* X36826577Y-64294683D02* X36745765Y-64267746D01* X36745765Y-64267746D02* X36691890Y-64267746D01* X36691890Y-64267746D02* X36611078Y-64294683D01* X36611078Y-64294683D02* X36503329Y-64402433D01* X36503329Y-64402433D02* X36476391Y-64483245D01* X36476391Y-64483245D02* X36476391Y-64537120D01* X36476391Y-64537120D02* X36503329Y-64617932D01* X60983521Y-80639117D02* X60902708Y-80666054D01* X60902708Y-80666054D02* X60821896Y-80746867D01* X60821896Y-80746867D02* X60768021Y-80854616D01* X60768021Y-80854616D02* X60768021Y-80962366D01* X60768021Y-80962366D02* X60794959Y-81043178D01* X60794959Y-81043178D02* X60875771Y-81177865D01* X60875771Y-81177865D02* X60956583Y-81258677D01* X60956583Y-81258677D02* X61091270Y-81339490D01* X61091270Y-81339490D02* X61172083Y-81366427D01* X61172083Y-81366427D02* X61279832Y-81366427D01* X61279832Y-81366427D02* X61387582Y-81312552D01* X61387582Y-81312552D02* X61441457Y-81258677D01* X61441457Y-81258677D02* X61495331Y-81150928D01* X61495331Y-81150928D02* X61495331Y-81097053D01* X61495331Y-81097053D02* X61306770Y-80908491D01* X61306770Y-80908491D02* X61199020Y-81016241D01* X61791643Y-80908491D02* X61225957Y-80342806D01* X61225957Y-80342806D02* X61441457Y-80127306D01* X61441457Y-80127306D02* X61522269Y-80100369D01* X61522269Y-80100369D02* X61576144Y-80100369D01* X61576144Y-80100369D02* X61656956Y-80127306D01* X61656956Y-80127306D02* X61737768Y-80208119D01* X61737768Y-80208119D02* X61764705Y-80288931D01* X61764705Y-80288931D02* X61764705Y-80342806D01* X61764705Y-80342806D02* X61737768Y-80423618D01* X61737768Y-80423618D02* X61522269Y-80639117D01* X61818580Y-79857932D02* X61818580Y-79804058D01* X61818580Y-79804058D02* X61845518Y-79723245D01* X61845518Y-79723245D02* X61980205Y-79588558D01* X61980205Y-79588558D02* X62061017Y-79561621D01* X62061017Y-79561621D02* X62114892Y-79561621D01* X62114892Y-79561621D02* X62195704Y-79588558D01* X62195704Y-79588558D02* X62249579Y-79642433D01* X62249579Y-79642433D02* X62303453Y-79750183D01* X62303453Y-79750183D02* X62303453Y-80396680D01* X62303453Y-80396680D02* X62653640Y-80046494D01* X62438141Y-79130622D02* X62492015Y-79076748D01* X62492015Y-79076748D02* X62572828Y-79049810D01* X62572828Y-79049810D02* X62626702Y-79049810D01* X62626702Y-79049810D02* X62707515Y-79076748D01* X62707515Y-79076748D02* X62842202Y-79157560D01* X62842202Y-79157560D02* X62976889Y-79292247D01* X62976889Y-79292247D02* X63057701Y-79426934D01* X63057701Y-79426934D02* X63084638Y-79507746D01* X63084638Y-79507746D02* X63084638Y-79561621D01* X63084638Y-79561621D02* X63057701Y-79642433D01* X63057701Y-79642433D02* X63003826Y-79696308D01* X63003826Y-79696308D02* X62923014Y-79723245D01* X62923014Y-79723245D02* X62869139Y-79723245D01* X62869139Y-79723245D02* X62788327Y-79696308D01* X62788327Y-79696308D02* X62653640Y-79615496D01* X62653640Y-79615496D02* X62518953Y-79480809D01* X62518953Y-79480809D02* X62438141Y-79346122D01* X62438141Y-79346122D02* X62411203Y-79265309D01* X62411203Y-79265309D02* X62411203Y-79211435D01* X62411203Y-79211435D02* X62438141Y-79130622D01* X35371958Y-49916680D02* X35291146Y-49943617D01* X35291146Y-49943617D02* X35210334Y-50024429D01* X35210334Y-50024429D02* X35156459Y-50132179D01* X35156459Y-50132179D02* X35156459Y-50239929D01* X35156459Y-50239929D02* X35183396Y-50320741D01* X35183396Y-50320741D02* X35264208Y-50455428D01* X35264208Y-50455428D02* X35345021Y-50536240D01* X35345021Y-50536240D02* X35479708Y-50617052D01* X35479708Y-50617052D02* X35560520Y-50643990D01* X35560520Y-50643990D02* X35668269Y-50643990D01* X35668269Y-50643990D02* X35776019Y-50590115D01* X35776019Y-50590115D02* X35829894Y-50536240D01* X35829894Y-50536240D02* X35883769Y-50428490D01* X35883769Y-50428490D02* X35883769Y-50374616D01* X35883769Y-50374616D02* X35695207Y-50186054D01* X35695207Y-50186054D02* X35587457Y-50293803D01* X36180080Y-50186054D02* X35614395Y-49620368D01* X35614395Y-49620368D02* X36503329Y-49862805D01* X36503329Y-49862805D02* X35937643Y-49297120D01* X36772703Y-49593431D02* X36207017Y-49027746D01* X36207017Y-49027746D02* X36341704Y-48893059D01* X36341704Y-48893059D02* X36449454Y-48839184D01* X36449454Y-48839184D02* X36557203Y-48839184D01* X36557203Y-48839184D02* X36638016Y-48866121D01* X36638016Y-48866121D02* X36772703Y-48946934D01* X36772703Y-48946934D02* X36853515Y-49027746D01* X36853515Y-49027746D02* X36934327Y-49162433D01* X36934327Y-49162433D02* X36961264Y-49243245D01* X36961264Y-49243245D02* X36961264Y-49350995D01* X36961264Y-49350995D02* X36907390Y-49458744D01* X36907390Y-49458744D02* X36772703Y-49593431D01* X36853515Y-48381248D02* X36988202Y-48515935D01* X36799640Y-48596747D02* X36988202Y-48515935D01* X36988202Y-48515935D02* X37069014Y-48327373D01* X37015139Y-48704497D02* X36988202Y-48515935D01* X36988202Y-48515935D02* X37176764Y-48542873D01* X60983521Y-90799117D02* X60902708Y-90826054D01* X60902708Y-90826054D02* X60821896Y-90906867D01* X60821896Y-90906867D02* X60768021Y-91014616D01* X60768021Y-91014616D02* X60768021Y-91122366D01* X60768021Y-91122366D02* X60794959Y-91203178D01* X60794959Y-91203178D02* X60875771Y-91337865D01* X60875771Y-91337865D02* X60956583Y-91418677D01* X60956583Y-91418677D02* X61091270Y-91499490D01* X61091270Y-91499490D02* X61172083Y-91526427D01* X61172083Y-91526427D02* X61279832Y-91526427D01* X61279832Y-91526427D02* X61387582Y-91472552D01* X61387582Y-91472552D02* X61441457Y-91418677D01* X61441457Y-91418677D02* X61495331Y-91310928D01* X61495331Y-91310928D02* X61495331Y-91257053D01* X61495331Y-91257053D02* X61306770Y-91068491D01* X61306770Y-91068491D02* X61199020Y-91176241D01* X61791643Y-91068491D02* X61225957Y-90502806D01* X61225957Y-90502806D02* X61441457Y-90287306D01* X61441457Y-90287306D02* X61522269Y-90260369D01* X61522269Y-90260369D02* X61576144Y-90260369D01* X61576144Y-90260369D02* X61656956Y-90287306D01* X61656956Y-90287306D02* X61737768Y-90368119D01* X61737768Y-90368119D02* X61764705Y-90448931D01* X61764705Y-90448931D02* X61764705Y-90502806D01* X61764705Y-90502806D02* X61737768Y-90583618D01* X61737768Y-90583618D02* X61522269Y-90799117D01* X62653640Y-90206494D02* X62330391Y-90529743D01* X62492015Y-90368119D02* X61926330Y-89802433D01* X61926330Y-89802433D02* X61953267Y-89937120D01* X61953267Y-89937120D02* X61953267Y-90044870D01* X61953267Y-90044870D02* X61926330Y-90125682D01* X62276516Y-89452247D02* X62653640Y-89075123D01* X62653640Y-89075123D02* X62976889Y-89883245D01* X62949951Y-88778812D02* X63084638Y-88913499D01* X62896077Y-88994311D02* X63084638Y-88913499D01* X63084638Y-88913499D02* X63165451Y-88724937D01* X63111576Y-89102060D02* X63084638Y-88913499D01* X63084638Y-88913499D02* X63273200Y-88940436D01* X35398895Y-57509743D02* X35318083Y-57536680D01* X35318083Y-57536680D02* X35237271Y-57617492D01* X35237271Y-57617492D02* X35183396Y-57725242D01* X35183396Y-57725242D02* X35183396Y-57832991D01* X35183396Y-57832991D02* X35210333Y-57913804D01* X35210333Y-57913804D02* X35291146Y-58048491D01* X35291146Y-58048491D02* X35371958Y-58129303D01* X35371958Y-58129303D02* X35506645Y-58210115D01* X35506645Y-58210115D02* X35587457Y-58237052D01* X35587457Y-58237052D02* X35695207Y-58237052D01* X35695207Y-58237052D02* X35802956Y-58183178D01* X35802956Y-58183178D02* X35856831Y-58129303D01* X35856831Y-58129303D02* X35910706Y-58021553D01* X35910706Y-58021553D02* X35910706Y-57967678D01* X35910706Y-57967678D02* X35722144Y-57779117D01* X35722144Y-57779117D02* X35614394Y-57886866D01* X36207017Y-57779117D02* X35641332Y-57213431D01* X35641332Y-57213431D02* X35856831Y-56997932D01* X35856831Y-56997932D02* X35937643Y-56970995D01* X35937643Y-56970995D02* X35991518Y-56970995D01* X35991518Y-56970995D02* X36072330Y-56997932D01* X36072330Y-56997932D02* X36153142Y-57078744D01* X36153142Y-57078744D02* X36180080Y-57159556D01* X36180080Y-57159556D02* X36180080Y-57213431D01* X36180080Y-57213431D02* X36153142Y-57294243D01* X36153142Y-57294243D02* X35937643Y-57509743D01* X36638016Y-56593871D02* X37015139Y-56970995D01* X36287829Y-56513059D02* X36557203Y-57051807D01* X36557203Y-57051807D02* X36907390Y-56701621D01* X35371958Y-75316680D02* X35291146Y-75343617D01* X35291146Y-75343617D02* X35210334Y-75424429D01* X35210334Y-75424429D02* X35156459Y-75532179D01* X35156459Y-75532179D02* X35156459Y-75639929D01* X35156459Y-75639929D02* X35183396Y-75720741D01* X35183396Y-75720741D02* X35264208Y-75855428D01* X35264208Y-75855428D02* X35345021Y-75936240D01* X35345021Y-75936240D02* X35479708Y-76017052D01* X35479708Y-76017052D02* X35560520Y-76043990D01* X35560520Y-76043990D02* X35668269Y-76043990D01* X35668269Y-76043990D02* X35776019Y-75990115D01* X35776019Y-75990115D02* X35829894Y-75936240D01* X35829894Y-75936240D02* X35883769Y-75828490D01* X35883769Y-75828490D02* X35883769Y-75774616D01* X35883769Y-75774616D02* X35695207Y-75586054D01* X35695207Y-75586054D02* X35587457Y-75693803D01* X36180080Y-75586054D02* X35614395Y-75020368D01* X35614395Y-75020368D02* X36503329Y-75262805D01* X36503329Y-75262805D02* X35937643Y-74697120D01* X36772703Y-74993431D02* X36207017Y-74427746D01* X36207017Y-74427746D02* X36341704Y-74293059D01* X36341704Y-74293059D02* X36449454Y-74239184D01* X36449454Y-74239184D02* X36557203Y-74239184D01* X36557203Y-74239184D02* X36638016Y-74266121D01* X36638016Y-74266121D02* X36772703Y-74346934D01* X36772703Y-74346934D02* X36853515Y-74427746D01* X36853515Y-74427746D02* X36934327Y-74562433D01* X36934327Y-74562433D02* X36961264Y-74643245D01* X36961264Y-74643245D02* X36961264Y-74750995D01* X36961264Y-74750995D02* X36907390Y-74858744D01* X36907390Y-74858744D02* X36772703Y-74993431D01* X36853515Y-73781248D02* X36988202Y-73915935D01* X36799640Y-73996747D02* X36988202Y-73915935D01* X36988202Y-73915935D02* X37069014Y-73727373D01* X37015139Y-74104497D02* X36988202Y-73915935D01* X36988202Y-73915935D02* X37176764Y-73942873D01* X35398895Y-70209743D02* X35318083Y-70236680D01* X35318083Y-70236680D02* X35237271Y-70317492D01* X35237271Y-70317492D02* X35183396Y-70425242D01* X35183396Y-70425242D02* X35183396Y-70532991D01* X35183396Y-70532991D02* X35210333Y-70613804D01* X35210333Y-70613804D02* X35291146Y-70748491D01* X35291146Y-70748491D02* X35371958Y-70829303D01* X35371958Y-70829303D02* X35506645Y-70910115D01* X35506645Y-70910115D02* X35587457Y-70937052D01* X35587457Y-70937052D02* X35695207Y-70937052D01* X35695207Y-70937052D02* X35802956Y-70883178D01* X35802956Y-70883178D02* X35856831Y-70829303D01* X35856831Y-70829303D02* X35910706Y-70721553D01* X35910706Y-70721553D02* X35910706Y-70667678D01* X35910706Y-70667678D02* X35722144Y-70479117D01* X35722144Y-70479117D02* X35614394Y-70586866D01* X36207017Y-70479117D02* X35641332Y-69913431D01* X35641332Y-69913431D02* X35856831Y-69697932D01* X35856831Y-69697932D02* X35937643Y-69670995D01* X35937643Y-69670995D02* X35991518Y-69670995D01* X35991518Y-69670995D02* X36072330Y-69697932D01* X36072330Y-69697932D02* X36153142Y-69778744D01* X36153142Y-69778744D02* X36180080Y-69859556D01* X36180080Y-69859556D02* X36180080Y-69913431D01* X36180080Y-69913431D02* X36153142Y-69994243D01* X36153142Y-69994243D02* X35937643Y-70209743D01* X36530266Y-69509370D02* X36449454Y-69536308D01* X36449454Y-69536308D02* X36395579Y-69536308D01* X36395579Y-69536308D02* X36314767Y-69509370D01* X36314767Y-69509370D02* X36287829Y-69482433D01* X36287829Y-69482433D02* X36260892Y-69401621D01* X36260892Y-69401621D02* X36260892Y-69347746D01* X36260892Y-69347746D02* X36287829Y-69266934D01* X36287829Y-69266934D02* X36395579Y-69159184D01* X36395579Y-69159184D02* X36476391Y-69132247D01* X36476391Y-69132247D02* X36530266Y-69132247D01* X36530266Y-69132247D02* X36611078Y-69159184D01* X36611078Y-69159184D02* X36638016Y-69186121D01* X36638016Y-69186121D02* X36664953Y-69266934D01* X36664953Y-69266934D02* X36664953Y-69320808D01* X36664953Y-69320808D02* X36638016Y-69401621D01* X36638016Y-69401621D02* X36530266Y-69509370D01* X36530266Y-69509370D02* X36503329Y-69590182D01* X36503329Y-69590182D02* X36503329Y-69644057D01* X36503329Y-69644057D02* X36530266Y-69724869D01* X36530266Y-69724869D02* X36638016Y-69832619D01* X36638016Y-69832619D02* X36718828Y-69859556D01* X36718828Y-69859556D02* X36772703Y-69859556D01* X36772703Y-69859556D02* X36853515Y-69832619D01* X36853515Y-69832619D02* X36961264Y-69724869D01* X36961264Y-69724869D02* X36988202Y-69644057D01* X36988202Y-69644057D02* X36988202Y-69590182D01* X36988202Y-69590182D02* X36961264Y-69509370D01* X36961264Y-69509370D02* X36853515Y-69401621D01* X36853515Y-69401621D02* X36772703Y-69374683D01* X36772703Y-69374683D02* X36718828Y-69374683D01* X36718828Y-69374683D02* X36638016Y-69401621D01* X34829521Y-90799117D02* X34748708Y-90826054D01* X34748708Y-90826054D02* X34667896Y-90906867D01* X34667896Y-90906867D02* X34614021Y-91014616D01* X34614021Y-91014616D02* X34614021Y-91122366D01* X34614021Y-91122366D02* X34640959Y-91203178D01* X34640959Y-91203178D02* X34721771Y-91337865D01* X34721771Y-91337865D02* X34802583Y-91418677D01* X34802583Y-91418677D02* X34937270Y-91499490D01* X34937270Y-91499490D02* X35018083Y-91526427D01* X35018083Y-91526427D02* X35125832Y-91526427D01* X35125832Y-91526427D02* X35233582Y-91472552D01* X35233582Y-91472552D02* X35287457Y-91418677D01* X35287457Y-91418677D02* X35341331Y-91310928D01* X35341331Y-91310928D02* X35341331Y-91257053D01* X35341331Y-91257053D02* X35152770Y-91068491D01* X35152770Y-91068491D02* X35045020Y-91176241D01* X35637643Y-91068491D02* X35071957Y-90502806D01* X35071957Y-90502806D02* X35287457Y-90287306D01* X35287457Y-90287306D02* X35368269Y-90260369D01* X35368269Y-90260369D02* X35422144Y-90260369D01* X35422144Y-90260369D02* X35502956Y-90287306D01* X35502956Y-90287306D02* X35583768Y-90368119D01* X35583768Y-90368119D02* X35610705Y-90448931D01* X35610705Y-90448931D02* X35610705Y-90502806D01* X35610705Y-90502806D02* X35583768Y-90583618D01* X35583768Y-90583618D02* X35368269Y-90799117D01* X36499640Y-90206494D02* X36176391Y-90529743D01* X36338015Y-90368119D02* X35772330Y-89802433D01* X35772330Y-89802433D02* X35799267Y-89937120D01* X35799267Y-89937120D02* X35799267Y-90044870D01* X35799267Y-90044870D02* X35772330Y-90125682D01* X36607389Y-89344497D02* X36984513Y-89721621D01* X36257203Y-89263685D02* X36526577Y-89802433D01* X36526577Y-89802433D02* X36876763Y-89452247D01* X36795951Y-88778812D02* X36930638Y-88913499D01* X36742077Y-88994311D02* X36930638Y-88913499D01* X36930638Y-88913499D02* X37011451Y-88724937D01* X36957576Y-89102060D02* X36930638Y-88913499D01* X36930638Y-88913499D02* X37119200Y-88940436D01* X61233707Y-57929178D02* X61503081Y-57659804D01* X61341457Y-58144677D02* X60964333Y-57390430D01* X60964333Y-57390430D02* X61718580Y-57767553D01* X61907142Y-57578992D02* X61341457Y-57013306D01* X61341457Y-57013306D02* X61476144Y-56878619D01* X61476144Y-56878619D02* X61583893Y-56824745D01* X61583893Y-56824745D02* X61691643Y-56824745D01* X61691643Y-56824745D02* X61772455Y-56851682D01* X61772455Y-56851682D02* X61907142Y-56932494D01* X61907142Y-56932494D02* X61987954Y-57013306D01* X61987954Y-57013306D02* X62068766Y-57147993D01* X62068766Y-57147993D02* X62095704Y-57228806D01* X62095704Y-57228806D02* X62095704Y-57336555D01* X62095704Y-57336555D02* X62041829Y-57444305D01* X62041829Y-57444305D02* X61907142Y-57578992D01* X62742201Y-56636183D02* X62742201Y-56690058D01* X62742201Y-56690058D02* X62688327Y-56797807D01* X62688327Y-56797807D02* X62634452Y-56851682D01* X62634452Y-56851682D02* X62526702Y-56905557D01* X62526702Y-56905557D02* X62418953Y-56905557D01* X62418953Y-56905557D02* X62338140Y-56878619D01* X62338140Y-56878619D02* X62203453Y-56797807D01* X62203453Y-56797807D02* X62122641Y-56716995D01* X62122641Y-56716995D02* X62041829Y-56582308D01* X62041829Y-56582308D02* X62014892Y-56501496D01* X62014892Y-56501496D02* X62014892Y-56393746D01* X62014892Y-56393746D02* X62068766Y-56285997D01* X62068766Y-56285997D02* X62122641Y-56232122D01* X62122641Y-56232122D02* X62230391Y-56178247D01* X62230391Y-56178247D02* X62284266Y-56178247D01* X60983521Y-65409117D02* X60902708Y-65436054D01* X60902708Y-65436054D02* X60821896Y-65516867D01* X60821896Y-65516867D02* X60768021Y-65624616D01* X60768021Y-65624616D02* X60768021Y-65732366D01* X60768021Y-65732366D02* X60794959Y-65813178D01* X60794959Y-65813178D02* X60875771Y-65947865D01* X60875771Y-65947865D02* X60956583Y-66028677D01* X60956583Y-66028677D02* X61091270Y-66109490D01* X61091270Y-66109490D02* X61172083Y-66136427D01* X61172083Y-66136427D02* X61279832Y-66136427D01* X61279832Y-66136427D02* X61387582Y-66082552D01* X61387582Y-66082552D02* X61441457Y-66028677D01* X61441457Y-66028677D02* X61495331Y-65920928D01* X61495331Y-65920928D02* X61495331Y-65867053D01* X61495331Y-65867053D02* X61306770Y-65678491D01* X61306770Y-65678491D02* X61199020Y-65786241D01* X61791643Y-65678491D02* X61225957Y-65112806D01* X61225957Y-65112806D02* X61441457Y-64897306D01* X61441457Y-64897306D02* X61522269Y-64870369D01* X61522269Y-64870369D02* X61576144Y-64870369D01* X61576144Y-64870369D02* X61656956Y-64897306D01* X61656956Y-64897306D02* X61737768Y-64978119D01* X61737768Y-64978119D02* X61764705Y-65058931D01* X61764705Y-65058931D02* X61764705Y-65112806D01* X61764705Y-65112806D02* X61737768Y-65193618D01* X61737768Y-65193618D02* X61522269Y-65409117D01* X61818580Y-64627932D02* X61818580Y-64574058D01* X61818580Y-64574058D02* X61845518Y-64493245D01* X61845518Y-64493245D02* X61980205Y-64358558D01* X61980205Y-64358558D02* X62061017Y-64331621D01* X62061017Y-64331621D02* X62114892Y-64331621D01* X62114892Y-64331621D02* X62195704Y-64358558D01* X62195704Y-64358558D02* X62249579Y-64412433D01* X62249579Y-64412433D02* X62303453Y-64520183D01* X62303453Y-64520183D02* X62303453Y-65166680D01* X62303453Y-65166680D02* X62653640Y-64816494D01* X62276516Y-64062247D02* X62653640Y-63685123D01* X62653640Y-63685123D02* X62976889Y-64493245D01* X34729521Y-83179117D02* X34648708Y-83206054D01* X34648708Y-83206054D02* X34567896Y-83286867D01* X34567896Y-83286867D02* X34514021Y-83394616D01* X34514021Y-83394616D02* X34514021Y-83502366D01* X34514021Y-83502366D02* X34540959Y-83583178D01* X34540959Y-83583178D02* X34621771Y-83717865D01* X34621771Y-83717865D02* X34702583Y-83798677D01* X34702583Y-83798677D02* X34837270Y-83879490D01* X34837270Y-83879490D02* X34918083Y-83906427D01* X34918083Y-83906427D02* X35025832Y-83906427D01* X35025832Y-83906427D02* X35133582Y-83852552D01* X35133582Y-83852552D02* X35187457Y-83798677D01* X35187457Y-83798677D02* X35241331Y-83690928D01* X35241331Y-83690928D02* X35241331Y-83637053D01* X35241331Y-83637053D02* X35052770Y-83448491D01* X35052770Y-83448491D02* X34945020Y-83556241D01* X35537643Y-83448491D02* X34971957Y-82882806D01* X34971957Y-82882806D02* X35187457Y-82667306D01* X35187457Y-82667306D02* X35268269Y-82640369D01* X35268269Y-82640369D02* X35322144Y-82640369D01* X35322144Y-82640369D02* X35402956Y-82667306D01* X35402956Y-82667306D02* X35483768Y-82748119D01* X35483768Y-82748119D02* X35510705Y-82828931D01* X35510705Y-82828931D02* X35510705Y-82882806D01* X35510705Y-82882806D02* X35483768Y-82963618D01* X35483768Y-82963618D02* X35268269Y-83179117D01* X36399640Y-82586494D02* X36076391Y-82909743D01* X36238015Y-82748119D02* X35672330Y-82182433D01* X35672330Y-82182433D02* X35699267Y-82317120D01* X35699267Y-82317120D02* X35699267Y-82424870D01* X35699267Y-82424870D02* X35672330Y-82505682D01* X36103328Y-81859184D02* X36103328Y-81805309D01* X36103328Y-81805309D02* X36130266Y-81724497D01* X36130266Y-81724497D02* X36264953Y-81589810D01* X36264953Y-81589810D02* X36345765Y-81562873D01* X36345765Y-81562873D02* X36399640Y-81562873D01* X36399640Y-81562873D02* X36480452Y-81589810D01* X36480452Y-81589810D02* X36534327Y-81643685D01* X36534327Y-81643685D02* X36588202Y-81751435D01* X36588202Y-81751435D02* X36588202Y-82397932D01* X36588202Y-82397932D02* X36938388Y-82047746D01* X60827741Y-52955022D02* X61177927Y-52604836D01* X61177927Y-52604836D02* X61204864Y-53008897D01* X61204864Y-53008897D02* X61285676Y-52928085D01* X61285676Y-52928085D02* X61366489Y-52901148D01* X61366489Y-52901148D02* X61420363Y-52901148D01* X61420363Y-52901148D02* X61501176Y-52928085D01* X61501176Y-52928085D02* X61635863Y-53062772D01* X61635863Y-53062772D02* X61662800Y-53143584D01* X61662800Y-53143584D02* X61662800Y-53197459D01* X61662800Y-53197459D02* X61635863Y-53278271D01* X61635863Y-53278271D02* X61474238Y-53439896D01* X61474238Y-53439896D02* X61393426Y-53466833D01* X61393426Y-53466833D02* X61339551Y-53466833D01* X61339551Y-52443212D02* X62093799Y-52820335D01* X62093799Y-52820335D02* X61716675Y-52066088D01* X61851362Y-51931401D02* X62201548Y-51581215D01* X62201548Y-51581215D02* X62228485Y-51985276D01* X62228485Y-51985276D02* X62309298Y-51904464D01* X62309298Y-51904464D02* X62390110Y-51877526D01* X62390110Y-51877526D02* X62443985Y-51877526D01* X62443985Y-51877526D02* X62524797Y-51904464D01* X62524797Y-51904464D02* X62659484Y-52039151D01* X62659484Y-52039151D02* X62686421Y-52119963D01* X62686421Y-52119963D02* X62686421Y-52173838D01* X62686421Y-52173838D02* X62659484Y-52254650D01* X62659484Y-52254650D02* X62497859Y-52416274D01* X62497859Y-52416274D02* X62417047Y-52443212D01* X62417047Y-52443212D02* X62363172Y-52443212D01* X62713359Y-51608152D02* X62901921Y-51419590D01* X63279044Y-51635090D02* X63009670Y-51904464D01* X63009670Y-51904464D02* X62443985Y-51338778D01* X62443985Y-51338778D02* X62713359Y-51069404D01* X35498895Y-67639743D02* X35418083Y-67666680D01* X35418083Y-67666680D02* X35337271Y-67747492D01* X35337271Y-67747492D02* X35283396Y-67855242D01* X35283396Y-67855242D02* X35283396Y-67962991D01* X35283396Y-67962991D02* X35310333Y-68043804D01* X35310333Y-68043804D02* X35391146Y-68178491D01* X35391146Y-68178491D02* X35471958Y-68259303D01* X35471958Y-68259303D02* X35606645Y-68340115D01* X35606645Y-68340115D02* X35687457Y-68367052D01* X35687457Y-68367052D02* X35795207Y-68367052D01* X35795207Y-68367052D02* X35902956Y-68313178D01* X35902956Y-68313178D02* X35956831Y-68259303D01* X35956831Y-68259303D02* X36010706Y-68151553D01* X36010706Y-68151553D02* X36010706Y-68097678D01* X36010706Y-68097678D02* X35822144Y-67909117D01* X35822144Y-67909117D02* X35714394Y-68016866D01* X36307017Y-67909117D02* X35741332Y-67343431D01* X35741332Y-67343431D02* X35956831Y-67127932D01* X35956831Y-67127932D02* X36037643Y-67100995D01* X36037643Y-67100995D02* X36091518Y-67100995D01* X36091518Y-67100995D02* X36172330Y-67127932D01* X36172330Y-67127932D02* X36253142Y-67208744D01* X36253142Y-67208744D02* X36280080Y-67289556D01* X36280080Y-67289556D02* X36280080Y-67343431D01* X36280080Y-67343431D02* X36253142Y-67424243D01* X36253142Y-67424243D02* X36037643Y-67639743D01* X36253142Y-66831621D02* X36630266Y-66454497D01* X36630266Y-66454497D02* X36953515Y-67262619D01* X35398895Y-44809743D02* X35318083Y-44836680D01* X35318083Y-44836680D02* X35237271Y-44917492D01* X35237271Y-44917492D02* X35183396Y-45025242D01* X35183396Y-45025242D02* X35183396Y-45132991D01* X35183396Y-45132991D02* X35210333Y-45213804D01* X35210333Y-45213804D02* X35291146Y-45348491D01* X35291146Y-45348491D02* X35371958Y-45429303D01* X35371958Y-45429303D02* X35506645Y-45510115D01* X35506645Y-45510115D02* X35587457Y-45537052D01* X35587457Y-45537052D02* X35695207Y-45537052D01* X35695207Y-45537052D02* X35802956Y-45483178D01* X35802956Y-45483178D02* X35856831Y-45429303D01* X35856831Y-45429303D02* X35910706Y-45321553D01* X35910706Y-45321553D02* X35910706Y-45267678D01* X35910706Y-45267678D02* X35722144Y-45079117D01* X35722144Y-45079117D02* X35614394Y-45186866D01* X36207017Y-45079117D02* X35641332Y-44513431D01* X35641332Y-44513431D02* X35856831Y-44297932D01* X35856831Y-44297932D02* X35937643Y-44270995D01* X35937643Y-44270995D02* X35991518Y-44270995D01* X35991518Y-44270995D02* X36072330Y-44297932D01* X36072330Y-44297932D02* X36153142Y-44378744D01* X36153142Y-44378744D02* X36180080Y-44459556D01* X36180080Y-44459556D02* X36180080Y-44513431D01* X36180080Y-44513431D02* X36153142Y-44594243D01* X36153142Y-44594243D02* X35937643Y-44809743D01* X36314767Y-43839996D02* X36368642Y-43786121D01* X36368642Y-43786121D02* X36449454Y-43759184D01* X36449454Y-43759184D02* X36503329Y-43759184D01* X36503329Y-43759184D02* X36584141Y-43786121D01* X36584141Y-43786121D02* X36718828Y-43866934D01* X36718828Y-43866934D02* X36853515Y-44001621D01* X36853515Y-44001621D02* X36934327Y-44136308D01* X36934327Y-44136308D02* X36961264Y-44217120D01* X36961264Y-44217120D02* X36961264Y-44270995D01* X36961264Y-44270995D02* X36934327Y-44351807D01* X36934327Y-44351807D02* X36880452Y-44405682D01* X36880452Y-44405682D02* X36799640Y-44432619D01* X36799640Y-44432619D02* X36745765Y-44432619D01* X36745765Y-44432619D02* X36664953Y-44405682D01* X36664953Y-44405682D02* X36530266Y-44324869D01* X36530266Y-44324869D02* X36395579Y-44190182D01* X36395579Y-44190182D02* X36314767Y-44055495D01* X36314767Y-44055495D02* X36287829Y-43974683D01* X36287829Y-43974683D02* X36287829Y-43920808D01* X36287829Y-43920808D02* X36314767Y-43839996D01* X60775646Y-55309117D02* X61125832Y-54958931D01* X61125832Y-54958931D02* X61152770Y-55362992D01* X61152770Y-55362992D02* X61233582Y-55282180D01* X61233582Y-55282180D02* X61314394Y-55255242D01* X61314394Y-55255242D02* X61368269Y-55255242D01* X61368269Y-55255242D02* X61449081Y-55282180D01* X61449081Y-55282180D02* X61583768Y-55416867D01* X61583768Y-55416867D02* X61610705Y-55497679D01* X61610705Y-55497679D02* X61610705Y-55551554D01* X61610705Y-55551554D02* X61583768Y-55632366D01* X61583768Y-55632366D02* X61422144Y-55793990D01* X61422144Y-55793990D02* X61341331Y-55820928D01* X61341331Y-55820928D02* X61287457Y-55820928D01* X61287457Y-54797306D02* X62041704Y-55174430D01* X62041704Y-55174430D02* X61664580Y-54420183D01* X61799267Y-54285496D02* X62149453Y-53935310D01* X62149453Y-53935310D02* X62176391Y-54339371D01* X62176391Y-54339371D02* X62257203Y-54258558D01* X62257203Y-54258558D02* X62338015Y-54231621D01* X62338015Y-54231621D02* X62391890Y-54231621D01* X62391890Y-54231621D02* X62472702Y-54258558D01* X62472702Y-54258558D02* X62607389Y-54393245D01* X62607389Y-54393245D02* X62634327Y-54474058D01* X62634327Y-54474058D02* X62634327Y-54527932D01* X62634327Y-54527932D02* X62607389Y-54608745D01* X62607389Y-54608745D02* X62445765Y-54770369D01* X62445765Y-54770369D02* X62364953Y-54797306D01* X62364953Y-54797306D02* X62311078Y-54797306D01* X62472702Y-53612061D02* X62607389Y-53746748D01* X62418828Y-53827560D02* X62607389Y-53746748D01* X62607389Y-53746748D02* X62688202Y-53558186D01* X62634327Y-53935309D02* X62607389Y-53746748D01* X62607389Y-53746748D02* X62795951Y-53773685D01* X60983521Y-93339117D02* X60902708Y-93366054D01* X60902708Y-93366054D02* X60821896Y-93446867D01* X60821896Y-93446867D02* X60768021Y-93554616D01* X60768021Y-93554616D02* X60768021Y-93662366D01* X60768021Y-93662366D02* X60794959Y-93743178D01* X60794959Y-93743178D02* X60875771Y-93877865D01* X60875771Y-93877865D02* X60956583Y-93958677D01* X60956583Y-93958677D02* X61091270Y-94039490D01* X61091270Y-94039490D02* X61172083Y-94066427D01* X61172083Y-94066427D02* X61279832Y-94066427D01* X61279832Y-94066427D02* X61387582Y-94012552D01* X61387582Y-94012552D02* X61441457Y-93958677D01* X61441457Y-93958677D02* X61495331Y-93850928D01* X61495331Y-93850928D02* X61495331Y-93797053D01* X61495331Y-93797053D02* X61306770Y-93608491D01* X61306770Y-93608491D02* X61199020Y-93716241D01* X61791643Y-93608491D02* X61225957Y-93042806D01* X61225957Y-93042806D02* X61441457Y-92827306D01* X61441457Y-92827306D02* X61522269Y-92800369D01* X61522269Y-92800369D02* X61576144Y-92800369D01* X61576144Y-92800369D02* X61656956Y-92827306D01* X61656956Y-92827306D02* X61737768Y-92908119D01* X61737768Y-92908119D02* X61764705Y-92988931D01* X61764705Y-92988931D02* X61764705Y-93042806D01* X61764705Y-93042806D02* X61737768Y-93123618D01* X61737768Y-93123618D02* X61522269Y-93339117D01* X62653640Y-92746494D02* X62330391Y-93069743D01* X62492015Y-92908119D02* X61926330Y-92342433D01* X61926330Y-92342433D02* X61953267Y-92477120D01* X61953267Y-92477120D02* X61953267Y-92584870D01* X61953267Y-92584870D02* X61926330Y-92665682D01* X62572828Y-91695935D02* X62465078Y-91803685D01* X62465078Y-91803685D02* X62438141Y-91884497D01* X62438141Y-91884497D02* X62438141Y-91938372D01* X62438141Y-91938372D02* X62465078Y-92073059D01* X62465078Y-92073059D02* X62545890Y-92207746D01* X62545890Y-92207746D02* X62761389Y-92423245D01* X62761389Y-92423245D02* X62842202Y-92450183D01* X62842202Y-92450183D02* X62896076Y-92450183D01* X62896076Y-92450183D02* X62976889Y-92423245D01* X62976889Y-92423245D02* X63084638Y-92315496D01* X63084638Y-92315496D02* X63111576Y-92234683D01* X63111576Y-92234683D02* X63111576Y-92180809D01* X63111576Y-92180809D02* X63084638Y-92099996D01* X63084638Y-92099996D02* X62949951Y-91965309D01* X62949951Y-91965309D02* X62869139Y-91938372D01* X62869139Y-91938372D02* X62815264Y-91938372D01* X62815264Y-91938372D02* X62734452Y-91965309D01* X62734452Y-91965309D02* X62626702Y-92073059D01* X62626702Y-92073059D02* X62599765Y-92153871D01* X62599765Y-92153871D02* X62599765Y-92207746D01* X62599765Y-92207746D02* X62626702Y-92288558D01* X62949951Y-91318812D02* X63084638Y-91453499D01* X62896077Y-91534311D02* X63084638Y-91453499D01* X63084638Y-91453499D02* X63165451Y-91264937D01* X63111576Y-91642060D02* X63084638Y-91453499D01* X63084638Y-91453499D02* X63273200Y-91480436D01* X35371958Y-62616680D02* X35291146Y-62643617D01* X35291146Y-62643617D02* X35210334Y-62724429D01* X35210334Y-62724429D02* X35156459Y-62832179D01* X35156459Y-62832179D02* X35156459Y-62939929D01* X35156459Y-62939929D02* X35183396Y-63020741D01* X35183396Y-63020741D02* X35264208Y-63155428D01* X35264208Y-63155428D02* X35345021Y-63236240D01* X35345021Y-63236240D02* X35479708Y-63317052D01* X35479708Y-63317052D02* X35560520Y-63343990D01* X35560520Y-63343990D02* X35668269Y-63343990D01* X35668269Y-63343990D02* X35776019Y-63290115D01* X35776019Y-63290115D02* X35829894Y-63236240D01* X35829894Y-63236240D02* X35883769Y-63128490D01* X35883769Y-63128490D02* X35883769Y-63074616D01* X35883769Y-63074616D02* X35695207Y-62886054D01* X35695207Y-62886054D02* X35587457Y-62993803D01* X36180080Y-62886054D02* X35614395Y-62320368D01* X35614395Y-62320368D02* X36503329Y-62562805D01* X36503329Y-62562805D02* X35937643Y-61997120D01* X36772703Y-62293431D02* X36207017Y-61727746D01* X36207017Y-61727746D02* X36341704Y-61593059D01* X36341704Y-61593059D02* X36449454Y-61539184D01* X36449454Y-61539184D02* X36557203Y-61539184D01* X36557203Y-61539184D02* X36638016Y-61566121D01* X36638016Y-61566121D02* X36772703Y-61646934D01* X36772703Y-61646934D02* X36853515Y-61727746D01* X36853515Y-61727746D02* X36934327Y-61862433D01* X36934327Y-61862433D02* X36961264Y-61943245D01* X36961264Y-61943245D02* X36961264Y-62050995D01* X36961264Y-62050995D02* X36907390Y-62158744D01* X36907390Y-62158744D02* X36772703Y-62293431D01* X36853515Y-61081248D02* X36988202Y-61215935D01* X36799640Y-61296747D02* X36988202Y-61215935D01* X36988202Y-61215935D02* X37069014Y-61027373D01* X37015139Y-61404497D02* X36988202Y-61215935D01* X36988202Y-61215935D02* X37176764Y-61242873D01* X60983521Y-73019117D02* X60902708Y-73046054D01* X60902708Y-73046054D02* X60821896Y-73126867D01* X60821896Y-73126867D02* X60768021Y-73234616D01* X60768021Y-73234616D02* X60768021Y-73342366D01* X60768021Y-73342366D02* X60794959Y-73423178D01* X60794959Y-73423178D02* X60875771Y-73557865D01* X60875771Y-73557865D02* X60956583Y-73638677D01* X60956583Y-73638677D02* X61091270Y-73719490D01* X61091270Y-73719490D02* X61172083Y-73746427D01* X61172083Y-73746427D02* X61279832Y-73746427D01* X61279832Y-73746427D02* X61387582Y-73692552D01* X61387582Y-73692552D02* X61441457Y-73638677D01* X61441457Y-73638677D02* X61495331Y-73530928D01* X61495331Y-73530928D02* X61495331Y-73477053D01* X61495331Y-73477053D02* X61306770Y-73288491D01* X61306770Y-73288491D02* X61199020Y-73396241D01* X61791643Y-73288491D02* X61225957Y-72722806D01* X61225957Y-72722806D02* X61441457Y-72507306D01* X61441457Y-72507306D02* X61522269Y-72480369D01* X61522269Y-72480369D02* X61576144Y-72480369D01* X61576144Y-72480369D02* X61656956Y-72507306D01* X61656956Y-72507306D02* X61737768Y-72588119D01* X61737768Y-72588119D02* X61764705Y-72668931D01* X61764705Y-72668931D02* X61764705Y-72722806D01* X61764705Y-72722806D02* X61737768Y-72803618D01* X61737768Y-72803618D02* X61522269Y-73019117D01* X61818580Y-72237932D02* X61818580Y-72184058D01* X61818580Y-72184058D02* X61845518Y-72103245D01* X61845518Y-72103245D02* X61980205Y-71968558D01* X61980205Y-71968558D02* X62061017Y-71941621D01* X62061017Y-71941621D02* X62114892Y-71941621D01* X62114892Y-71941621D02* X62195704Y-71968558D01* X62195704Y-71968558D02* X62249579Y-72022433D01* X62249579Y-72022433D02* X62303453Y-72130183D01* X62303453Y-72130183D02* X62303453Y-72776680D01* X62303453Y-72776680D02* X62653640Y-72426494D01* X62357328Y-71699184D02* X62357328Y-71645309D01* X62357328Y-71645309D02* X62384266Y-71564497D01* X62384266Y-71564497D02* X62518953Y-71429810D01* X62518953Y-71429810D02* X62599765Y-71402873D01* X62599765Y-71402873D02* X62653640Y-71402873D01* X62653640Y-71402873D02* X62734452Y-71429810D01* X62734452Y-71429810D02* X62788327Y-71483685D01* X62788327Y-71483685D02* X62842202Y-71591435D01* X62842202Y-71591435D02* X62842202Y-72237932D01* X62842202Y-72237932D02* X63192388Y-71887746D01* X34875521Y-85719117D02* X34794708Y-85746054D01* X34794708Y-85746054D02* X34713896Y-85826867D01* X34713896Y-85826867D02* X34660021Y-85934616D01* X34660021Y-85934616D02* X34660021Y-86042366D01* X34660021Y-86042366D02* X34686959Y-86123178D01* X34686959Y-86123178D02* X34767771Y-86257865D01* X34767771Y-86257865D02* X34848583Y-86338677D01* X34848583Y-86338677D02* X34983270Y-86419490D01* X34983270Y-86419490D02* X35064083Y-86446427D01* X35064083Y-86446427D02* X35171832Y-86446427D01* X35171832Y-86446427D02* X35279582Y-86392552D01* X35279582Y-86392552D02* X35333457Y-86338677D01* X35333457Y-86338677D02* X35387331Y-86230928D01* X35387331Y-86230928D02* X35387331Y-86177053D01* X35387331Y-86177053D02* X35198770Y-85988491D01* X35198770Y-85988491D02* X35091020Y-86096241D01* X35683643Y-85988491D02* X35117957Y-85422806D01* X35117957Y-85422806D02* X35333457Y-85207306D01* X35333457Y-85207306D02* X35414269Y-85180369D01* X35414269Y-85180369D02* X35468144Y-85180369D01* X35468144Y-85180369D02* X35548956Y-85207306D01* X35548956Y-85207306D02* X35629768Y-85288119D01* X35629768Y-85288119D02* X35656705Y-85368931D01* X35656705Y-85368931D02* X35656705Y-85422806D01* X35656705Y-85422806D02* X35629768Y-85503618D01* X35629768Y-85503618D02* X35414269Y-85719117D01* X36545640Y-85126494D02* X36222391Y-85449743D01* X36384015Y-85288119D02* X35818330Y-84722433D01* X35818330Y-84722433D02* X35845267Y-84857120D01* X35845267Y-84857120D02* X35845267Y-84964870D01* X35845267Y-84964870D02* X35818330Y-85045682D01* X36168516Y-84372247D02* X36518702Y-84022061D01* X36518702Y-84022061D02* X36545640Y-84426122D01* X36545640Y-84426122D02* X36626452Y-84345309D01* X36626452Y-84345309D02* X36707264Y-84318372D01* X36707264Y-84318372D02* X36761139Y-84318372D01* X36761139Y-84318372D02* X36841951Y-84345309D01* X36841951Y-84345309D02* X36976638Y-84479996D01* X36976638Y-84479996D02* X37003576Y-84560809D01* X37003576Y-84560809D02* X37003576Y-84614683D01* X37003576Y-84614683D02* X36976638Y-84695496D01* X36976638Y-84695496D02* X36815014Y-84857120D01* X36815014Y-84857120D02* X36734202Y-84884057D01* X36734202Y-84884057D02* X36680327Y-84884057D01* X53527523Y-96612544D02* X53527523Y-95812544D01* X53527523Y-95812544D02* X53717999Y-95812544D01* X53717999Y-95812544D02* X53832285Y-95850639D01* X53832285Y-95850639D02* X53908475Y-95926829D01* X53908475Y-95926829D02* X53946570Y-96003020D01* X53946570Y-96003020D02* X53984666Y-96155401D01* X53984666Y-96155401D02* X53984666Y-96269687D01* X53984666Y-96269687D02* X53946570Y-96422068D01* X53946570Y-96422068D02* X53908475Y-96498258D01* X53908475Y-96498258D02* X53832285Y-96574449D01* X53832285Y-96574449D02* X53717999Y-96612544D01* X53717999Y-96612544D02* X53527523Y-96612544D01* X54289427Y-96383972D02* X54670380Y-96383972D01* X54213237Y-96612544D02* X54479904Y-95812544D01* X54479904Y-95812544D02* X54746570Y-96612544D01* X54898951Y-95812544D02* X55356094Y-95812544D01* X55127522Y-96612544D02* X55127522Y-95812544D01* X55584665Y-96383972D02* X55965618Y-96383972D01* X55508475Y-96612544D02* X55775142Y-95812544D01* X55775142Y-95812544D02* X56041808Y-96612544D01* X35298895Y-52429743D02* X35218083Y-52456680D01* X35218083Y-52456680D02* X35137271Y-52537492D01* X35137271Y-52537492D02* X35083396Y-52645242D01* X35083396Y-52645242D02* X35083396Y-52752991D01* X35083396Y-52752991D02* X35110333Y-52833804D01* X35110333Y-52833804D02* X35191146Y-52968491D01* X35191146Y-52968491D02* X35271958Y-53049303D01* X35271958Y-53049303D02* X35406645Y-53130115D01* X35406645Y-53130115D02* X35487457Y-53157052D01* X35487457Y-53157052D02* X35595207Y-53157052D01* X35595207Y-53157052D02* X35702956Y-53103178D01* X35702956Y-53103178D02* X35756831Y-53049303D01* X35756831Y-53049303D02* X35810706Y-52941553D01* X35810706Y-52941553D02* X35810706Y-52887678D01* X35810706Y-52887678D02* X35622144Y-52699117D01* X35622144Y-52699117D02* X35514394Y-52806866D01* X36107017Y-52699117D02* X35541332Y-52133431D01* X35541332Y-52133431D02* X35756831Y-51917932D01* X35756831Y-51917932D02* X35837643Y-51890995D01* X35837643Y-51890995D02* X35891518Y-51890995D01* X35891518Y-51890995D02* X35972330Y-51917932D01* X35972330Y-51917932D02* X36053142Y-51998744D01* X36053142Y-51998744D02* X36080080Y-52079556D01* X36080080Y-52079556D02* X36080080Y-52133431D01* X36080080Y-52133431D02* X36053142Y-52214243D01* X36053142Y-52214243D02* X35837643Y-52429743D01* X36133955Y-51648558D02* X36133955Y-51594683D01* X36133955Y-51594683D02* X36160892Y-51513871D01* X36160892Y-51513871D02* X36295579Y-51379184D01* X36295579Y-51379184D02* X36376391Y-51352247D01* X36376391Y-51352247D02* X36430266Y-51352247D01* X36430266Y-51352247D02* X36511078Y-51379184D01* X36511078Y-51379184D02* X36564953Y-51433059D01* X36564953Y-51433059D02* X36618828Y-51540808D01* X36618828Y-51540808D02* X36618828Y-52187306D01* X36618828Y-52187306D02* X36969014Y-51837120D01* X34729521Y-80639117D02* X34648708Y-80666054D01* X34648708Y-80666054D02* X34567896Y-80746867D01* X34567896Y-80746867D02* X34514021Y-80854616D01* X34514021Y-80854616D02* X34514021Y-80962366D01* X34514021Y-80962366D02* X34540959Y-81043178D01* X34540959Y-81043178D02* X34621771Y-81177865D01* X34621771Y-81177865D02* X34702583Y-81258677D01* X34702583Y-81258677D02* X34837270Y-81339490D01* X34837270Y-81339490D02* X34918083Y-81366427D01* X34918083Y-81366427D02* X35025832Y-81366427D01* X35025832Y-81366427D02* X35133582Y-81312552D01* X35133582Y-81312552D02* X35187457Y-81258677D01* X35187457Y-81258677D02* X35241331Y-81150928D01* X35241331Y-81150928D02* X35241331Y-81097053D01* X35241331Y-81097053D02* X35052770Y-80908491D01* X35052770Y-80908491D02* X34945020Y-81016241D01* X35537643Y-80908491D02* X34971957Y-80342806D01* X34971957Y-80342806D02* X35187457Y-80127306D01* X35187457Y-80127306D02* X35268269Y-80100369D01* X35268269Y-80100369D02* X35322144Y-80100369D01* X35322144Y-80100369D02* X35402956Y-80127306D01* X35402956Y-80127306D02* X35483768Y-80208119D01* X35483768Y-80208119D02* X35510705Y-80288931D01* X35510705Y-80288931D02* X35510705Y-80342806D01* X35510705Y-80342806D02* X35483768Y-80423618D01* X35483768Y-80423618D02* X35268269Y-80639117D01* X36399640Y-80046494D02* X36076391Y-80369743D01* X36238015Y-80208119D02* X35672330Y-79642433D01* X35672330Y-79642433D02* X35699267Y-79777120D01* X35699267Y-79777120D02* X35699267Y-79884870D01* X35699267Y-79884870D02* X35672330Y-79965682D01* X36938388Y-79507746D02* X36615139Y-79830995D01* X36776763Y-79669370D02* X36211078Y-79103685D01* X36211078Y-79103685D02* X36238015Y-79238372D01* X36238015Y-79238372D02* X36238015Y-79346122D01* X36238015Y-79346122D02* X36211078Y-79426934D01* X60971958Y-88016680D02* X60891146Y-88043617D01* X60891146Y-88043617D02* X60810334Y-88124429D01* X60810334Y-88124429D02* X60756459Y-88232179D01* X60756459Y-88232179D02* X60756459Y-88339929D01* X60756459Y-88339929D02* X60783396Y-88420741D01* X60783396Y-88420741D02* X60864208Y-88555428D01* X60864208Y-88555428D02* X60945021Y-88636240D01* X60945021Y-88636240D02* X61079708Y-88717052D01* X61079708Y-88717052D02* X61160520Y-88743990D01* X61160520Y-88743990D02* X61268269Y-88743990D01* X61268269Y-88743990D02* X61376019Y-88690115D01* X61376019Y-88690115D02* X61429894Y-88636240D01* X61429894Y-88636240D02* X61483769Y-88528490D01* X61483769Y-88528490D02* X61483769Y-88474616D01* X61483769Y-88474616D02* X61295207Y-88286054D01* X61295207Y-88286054D02* X61187457Y-88393803D01* X61780080Y-88286054D02* X61214395Y-87720368D01* X61214395Y-87720368D02* X62103329Y-87962805D01* X62103329Y-87962805D02* X61537643Y-87397120D01* X62372703Y-87693431D02* X61807017Y-87127746D01* X61807017Y-87127746D02* X61941704Y-86993059D01* X61941704Y-86993059D02* X62049454Y-86939184D01* X62049454Y-86939184D02* X62157203Y-86939184D01* X62157203Y-86939184D02* X62238016Y-86966121D01* X62238016Y-86966121D02* X62372703Y-87046934D01* X62372703Y-87046934D02* X62453515Y-87127746D01* X62453515Y-87127746D02* X62534327Y-87262433D01* X62534327Y-87262433D02* X62561264Y-87343245D01* X62561264Y-87343245D02* X62561264Y-87450995D01* X62561264Y-87450995D02* X62507390Y-87558744D01* X62507390Y-87558744D02* X62372703Y-87693431D01* X62453515Y-86481248D02* X62588202Y-86615935D01* X62399640Y-86696747D02* X62588202Y-86615935D01* X62588202Y-86615935D02* X62669014Y-86427373D01* X62615139Y-86804497D02* X62588202Y-86615935D01* X62588202Y-86615935D02* X62776764Y-86642873D01* X35398895Y-54969743D02* X35318083Y-54996680D01* X35318083Y-54996680D02* X35237271Y-55077492D01* X35237271Y-55077492D02* X35183396Y-55185242D01* X35183396Y-55185242D02* X35183396Y-55292991D01* X35183396Y-55292991D02* X35210333Y-55373804D01* X35210333Y-55373804D02* X35291146Y-55508491D01* X35291146Y-55508491D02* X35371958Y-55589303D01* X35371958Y-55589303D02* X35506645Y-55670115D01* X35506645Y-55670115D02* X35587457Y-55697052D01* X35587457Y-55697052D02* X35695207Y-55697052D01* X35695207Y-55697052D02* X35802956Y-55643178D01* X35802956Y-55643178D02* X35856831Y-55589303D01* X35856831Y-55589303D02* X35910706Y-55481553D01* X35910706Y-55481553D02* X35910706Y-55427678D01* X35910706Y-55427678D02* X35722144Y-55239117D01* X35722144Y-55239117D02* X35614394Y-55346866D01* X36207017Y-55239117D02* X35641332Y-54673431D01* X35641332Y-54673431D02* X35856831Y-54457932D01* X35856831Y-54457932D02* X35937643Y-54430995D01* X35937643Y-54430995D02* X35991518Y-54430995D01* X35991518Y-54430995D02* X36072330Y-54457932D01* X36072330Y-54457932D02* X36153142Y-54538744D01* X36153142Y-54538744D02* X36180080Y-54619556D01* X36180080Y-54619556D02* X36180080Y-54673431D01* X36180080Y-54673431D02* X36153142Y-54754243D01* X36153142Y-54754243D02* X35937643Y-54969743D01* X36153142Y-54161621D02* X36503329Y-53811434D01* X36503329Y-53811434D02* X36530266Y-54215495D01* X36530266Y-54215495D02* X36611078Y-54134683D01* X36611078Y-54134683D02* X36691890Y-54107746D01* X36691890Y-54107746D02* X36745765Y-54107746D01* X36745765Y-54107746D02* X36826577Y-54134683D01* X36826577Y-54134683D02* X36961264Y-54269370D01* X36961264Y-54269370D02* X36988202Y-54350182D01* X36988202Y-54350182D02* X36988202Y-54404057D01* X36988202Y-54404057D02* X36961264Y-54484869D01* X36961264Y-54484869D02* X36799640Y-54646494D01* X36799640Y-54646494D02* X36718828Y-54673431D01* X36718828Y-54673431D02* X36664953Y-54673431D01* X61037396Y-63559489D02* X61306770Y-63290115D01* X61145146Y-63774988D02* X60768022Y-63020741D01* X60768022Y-63020741D02* X61522269Y-63397864D01* X61468394Y-62374243D02* X61387582Y-62401181D01* X61387582Y-62401181D02* X61306770Y-62481993D01* X61306770Y-62481993D02* X61252895Y-62589743D01* X61252895Y-62589743D02* X61252895Y-62697492D01* X61252895Y-62697492D02* X61279833Y-62778304D01* X61279833Y-62778304D02* X61360645Y-62912991D01* X61360645Y-62912991D02* X61441457Y-62993804D01* X61441457Y-62993804D02* X61576144Y-63074616D01* X61576144Y-63074616D02* X61656956Y-63101553D01* X61656956Y-63101553D02* X61764706Y-63101553D01* X61764706Y-63101553D02* X61872455Y-63047678D01* X61872455Y-63047678D02* X61926330Y-62993804D01* X61926330Y-62993804D02* X61980205Y-62886054D01* X61980205Y-62886054D02* X61980205Y-62832179D01* X61980205Y-62832179D02* X61791643Y-62643617D01* X61791643Y-62643617D02* X61683894Y-62751367D01* X62276516Y-62643617D02* X61710831Y-62077932D01* X61710831Y-62077932D02* X62599765Y-62320369D01* X62599765Y-62320369D02* X62034080Y-61754683D01* X62869139Y-62050995D02* X62303454Y-61485309D01* X62303454Y-61485309D02* X62438141Y-61350622D01* X62438141Y-61350622D02* X62545890Y-61296747D01* X62545890Y-61296747D02* X62653640Y-61296747D01* X62653640Y-61296747D02* X62734452Y-61323685D01* X62734452Y-61323685D02* X62869139Y-61404497D01* X62869139Y-61404497D02* X62949951Y-61485309D01* X62949951Y-61485309D02* X63030764Y-61619996D01* X63030764Y-61619996D02* X63057701Y-61700809D01* X63057701Y-61700809D02* X63057701Y-61808558D01* X63057701Y-61808558D02* X63003826Y-61916308D01* X63003826Y-61916308D02* X62869139Y-62050995D01* X60983521Y-83179117D02* X60902708Y-83206054D01* X60902708Y-83206054D02* X60821896Y-83286867D01* X60821896Y-83286867D02* X60768021Y-83394616D01* X60768021Y-83394616D02* X60768021Y-83502366D01* X60768021Y-83502366D02* X60794959Y-83583178D01* X60794959Y-83583178D02* X60875771Y-83717865D01* X60875771Y-83717865D02* X60956583Y-83798677D01* X60956583Y-83798677D02* X61091270Y-83879490D01* X61091270Y-83879490D02* X61172083Y-83906427D01* X61172083Y-83906427D02* X61279832Y-83906427D01* X61279832Y-83906427D02* X61387582Y-83852552D01* X61387582Y-83852552D02* X61441457Y-83798677D01* X61441457Y-83798677D02* X61495331Y-83690928D01* X61495331Y-83690928D02* X61495331Y-83637053D01* X61495331Y-83637053D02* X61306770Y-83448491D01* X61306770Y-83448491D02* X61199020Y-83556241D01* X61791643Y-83448491D02* X61225957Y-82882806D01* X61225957Y-82882806D02* X61441457Y-82667306D01* X61441457Y-82667306D02* X61522269Y-82640369D01* X61522269Y-82640369D02* X61576144Y-82640369D01* X61576144Y-82640369D02* X61656956Y-82667306D01* X61656956Y-82667306D02* X61737768Y-82748119D01* X61737768Y-82748119D02* X61764705Y-82828931D01* X61764705Y-82828931D02* X61764705Y-82882806D01* X61764705Y-82882806D02* X61737768Y-82963618D01* X61737768Y-82963618D02* X61522269Y-83179117D01* X62653640Y-82586494D02* X62330391Y-82909743D01* X62492015Y-82748119D02* X61926330Y-82182433D01* X61926330Y-82182433D02* X61953267Y-82317120D01* X61953267Y-82317120D02* X61953267Y-82424870D01* X61953267Y-82424870D02* X61926330Y-82505682D01* X62923014Y-82317120D02* X63030763Y-82209370D01* X63030763Y-82209370D02* X63057701Y-82128558D01* X63057701Y-82128558D02* X63057701Y-82074683D01* X63057701Y-82074683D02* X63030763Y-81939996D01* X63030763Y-81939996D02* X62949951Y-81805309D01* X62949951Y-81805309D02* X62734452Y-81589810D01* X62734452Y-81589810D02* X62653640Y-81562873D01* X62653640Y-81562873D02* X62599765Y-81562873D01* X62599765Y-81562873D02* X62518953Y-81589810D01* X62518953Y-81589810D02* X62411203Y-81697560D01* X62411203Y-81697560D02* X62384266Y-81778372D01* X62384266Y-81778372D02* X62384266Y-81832247D01* X62384266Y-81832247D02* X62411203Y-81913059D01* X62411203Y-81913059D02* X62545890Y-82047746D01* X62545890Y-82047746D02* X62626702Y-82074683D01* X62626702Y-82074683D02* X62680577Y-82074683D01* X62680577Y-82074683D02* X62761389Y-82047746D01* X62761389Y-82047746D02* X62869139Y-81939996D01* X62869139Y-81939996D02* X62896076Y-81859184D01* X62896076Y-81859184D02* X62896076Y-81805309D01* X62896076Y-81805309D02* X62869139Y-81724497D01* X60983521Y-67939117D02* X60902708Y-67966054D01* X60902708Y-67966054D02* X60821896Y-68046867D01* X60821896Y-68046867D02* X60768021Y-68154616D01* X60768021Y-68154616D02* X60768021Y-68262366D01* X60768021Y-68262366D02* X60794959Y-68343178D01* X60794959Y-68343178D02* X60875771Y-68477865D01* X60875771Y-68477865D02* X60956583Y-68558677D01* X60956583Y-68558677D02* X61091270Y-68639490D01* X61091270Y-68639490D02* X61172083Y-68666427D01* X61172083Y-68666427D02* X61279832Y-68666427D01* X61279832Y-68666427D02* X61387582Y-68612552D01* X61387582Y-68612552D02* X61441457Y-68558677D01* X61441457Y-68558677D02* X61495331Y-68450928D01* X61495331Y-68450928D02* X61495331Y-68397053D01* X61495331Y-68397053D02* X61306770Y-68208491D01* X61306770Y-68208491D02* X61199020Y-68316241D01* X61791643Y-68208491D02* X61225957Y-67642806D01* X61225957Y-67642806D02* X61441457Y-67427306D01* X61441457Y-67427306D02* X61522269Y-67400369D01* X61522269Y-67400369D02* X61576144Y-67400369D01* X61576144Y-67400369D02* X61656956Y-67427306D01* X61656956Y-67427306D02* X61737768Y-67508119D01* X61737768Y-67508119D02* X61764705Y-67588931D01* X61764705Y-67588931D02* X61764705Y-67642806D01* X61764705Y-67642806D02* X61737768Y-67723618D01* X61737768Y-67723618D02* X61522269Y-67939117D01* X61818580Y-67157932D02* X61818580Y-67104058D01* X61818580Y-67104058D02* X61845518Y-67023245D01* X61845518Y-67023245D02* X61980205Y-66888558D01* X61980205Y-66888558D02* X62061017Y-66861621D01* X62061017Y-66861621D02* X62114892Y-66861621D01* X62114892Y-66861621D02* X62195704Y-66888558D01* X62195704Y-66888558D02* X62249579Y-66942433D01* X62249579Y-66942433D02* X62303453Y-67050183D01* X62303453Y-67050183D02* X62303453Y-67696680D01* X62303453Y-67696680D02* X62653640Y-67346494D01* X62572828Y-66295935D02* X62465078Y-66403685D01* X62465078Y-66403685D02* X62438141Y-66484497D01* X62438141Y-66484497D02* X62438141Y-66538372D01* X62438141Y-66538372D02* X62465078Y-66673059D01* X62465078Y-66673059D02* X62545890Y-66807746D01* X62545890Y-66807746D02* X62761389Y-67023245D01* X62761389Y-67023245D02* X62842202Y-67050183D01* X62842202Y-67050183D02* X62896076Y-67050183D01* X62896076Y-67050183D02* X62976889Y-67023245D01* X62976889Y-67023245D02* X63084638Y-66915496D01* X63084638Y-66915496D02* X63111576Y-66834683D01* X63111576Y-66834683D02* X63111576Y-66780809D01* X63111576Y-66780809D02* X63084638Y-66699996D01* X63084638Y-66699996D02* X62949951Y-66565309D01* X62949951Y-66565309D02* X62869139Y-66538372D01* X62869139Y-66538372D02* X62815264Y-66538372D01* X62815264Y-66538372D02* X62734452Y-66565309D01* X62734452Y-66565309D02* X62626702Y-66673059D01* X62626702Y-66673059D02* X62599765Y-66753871D01* X62599765Y-66753871D02* X62599765Y-66807746D01* X62599765Y-66807746D02* X62626702Y-66888558D01* X35298895Y-47339743D02* X35218083Y-47366680D01* X35218083Y-47366680D02* X35137271Y-47447492D01* X35137271Y-47447492D02* X35083396Y-47555242D01* X35083396Y-47555242D02* X35083396Y-47662991D01* X35083396Y-47662991D02* X35110333Y-47743804D01* X35110333Y-47743804D02* X35191146Y-47878491D01* X35191146Y-47878491D02* X35271958Y-47959303D01* X35271958Y-47959303D02* X35406645Y-48040115D01* X35406645Y-48040115D02* X35487457Y-48067052D01* X35487457Y-48067052D02* X35595207Y-48067052D01* X35595207Y-48067052D02* X35702956Y-48013178D01* X35702956Y-48013178D02* X35756831Y-47959303D01* X35756831Y-47959303D02* X35810706Y-47851553D01* X35810706Y-47851553D02* X35810706Y-47797678D01* X35810706Y-47797678D02* X35622144Y-47609117D01* X35622144Y-47609117D02* X35514394Y-47716866D01* X36107017Y-47609117D02* X35541332Y-47043431D01* X35541332Y-47043431D02* X35756831Y-46827932D01* X35756831Y-46827932D02* X35837643Y-46800995D01* X35837643Y-46800995D02* X35891518Y-46800995D01* X35891518Y-46800995D02* X35972330Y-46827932D01* X35972330Y-46827932D02* X36053142Y-46908744D01* X36053142Y-46908744D02* X36080080Y-46989556D01* X36080080Y-46989556D02* X36080080Y-47043431D01* X36080080Y-47043431D02* X36053142Y-47124243D01* X36053142Y-47124243D02* X35837643Y-47339743D01* X36969014Y-46747120D02* X36645765Y-47070369D01* X36807390Y-46908744D02* X36241704Y-46343059D01* X36241704Y-46343059D02* X36268642Y-46477746D01* X36268642Y-46477746D02* X36268642Y-46585495D01* X36268642Y-46585495D02* X36241704Y-46666308D01* X60983521Y-60065117D02* X60902708Y-60092054D01* X60902708Y-60092054D02* X60821896Y-60172867D01* X60821896Y-60172867D02* X60768021Y-60280616D01* X60768021Y-60280616D02* X60768021Y-60388366D01* X60768021Y-60388366D02* X60794959Y-60469178D01* X60794959Y-60469178D02* X60875771Y-60603865D01* X60875771Y-60603865D02* X60956583Y-60684677D01* X60956583Y-60684677D02* X61091270Y-60765490D01* X61091270Y-60765490D02* X61172083Y-60792427D01* X61172083Y-60792427D02* X61279832Y-60792427D01* X61279832Y-60792427D02* X61387582Y-60738552D01* X61387582Y-60738552D02* X61441457Y-60684677D01* X61441457Y-60684677D02* X61495331Y-60576928D01* X61495331Y-60576928D02* X61495331Y-60523053D01* X61495331Y-60523053D02* X61306770Y-60334491D01* X61306770Y-60334491D02* X61199020Y-60442241D01* X61791643Y-60334491D02* X61225957Y-59768806D01* X61225957Y-59768806D02* X61441457Y-59553306D01* X61441457Y-59553306D02* X61522269Y-59526369D01* X61522269Y-59526369D02* X61576144Y-59526369D01* X61576144Y-59526369D02* X61656956Y-59553306D01* X61656956Y-59553306D02* X61737768Y-59634119D01* X61737768Y-59634119D02* X61764705Y-59714931D01* X61764705Y-59714931D02* X61764705Y-59768806D01* X61764705Y-59768806D02* X61737768Y-59849618D01* X61737768Y-59849618D02* X61522269Y-60065117D01* X61818580Y-59283932D02* X61818580Y-59230058D01* X61818580Y-59230058D02* X61845518Y-59149245D01* X61845518Y-59149245D02* X61980205Y-59014558D01* X61980205Y-59014558D02* X62061017Y-58987621D01* X62061017Y-58987621D02* X62114892Y-58987621D01* X62114892Y-58987621D02* X62195704Y-59014558D01* X62195704Y-59014558D02* X62249579Y-59068433D01* X62249579Y-59068433D02* X62303453Y-59176183D01* X62303453Y-59176183D02* X62303453Y-59822680D01* X62303453Y-59822680D02* X62653640Y-59472494D01* X62653640Y-58825996D02* X62572828Y-58852934D01* X62572828Y-58852934D02* X62518953Y-58852934D01* X62518953Y-58852934D02* X62438141Y-58825996D01* X62438141Y-58825996D02* X62411203Y-58799059D01* X62411203Y-58799059D02* X62384266Y-58718247D01* X62384266Y-58718247D02* X62384266Y-58664372D01* X62384266Y-58664372D02* X62411203Y-58583560D01* X62411203Y-58583560D02* X62518953Y-58475810D01* X62518953Y-58475810D02* X62599765Y-58448873D01* X62599765Y-58448873D02* X62653640Y-58448873D01* X62653640Y-58448873D02* X62734452Y-58475810D01* X62734452Y-58475810D02* X62761389Y-58502748D01* X62761389Y-58502748D02* X62788327Y-58583560D01* X62788327Y-58583560D02* X62788327Y-58637435D01* X62788327Y-58637435D02* X62761389Y-58718247D01* X62761389Y-58718247D02* X62653640Y-58825996D01* X62653640Y-58825996D02* X62626702Y-58906809D01* X62626702Y-58906809D02* X62626702Y-58960683D01* X62626702Y-58960683D02* X62653640Y-59041496D01* X62653640Y-59041496D02* X62761389Y-59149245D01* X62761389Y-59149245D02* X62842202Y-59176183D01* X62842202Y-59176183D02* X62896076Y-59176183D01* X62896076Y-59176183D02* X62976889Y-59149245D01* X62976889Y-59149245D02* X63084638Y-59041496D01* X63084638Y-59041496D02* X63111576Y-58960683D01* X63111576Y-58960683D02* X63111576Y-58906809D01* X63111576Y-58906809D02* X63084638Y-58825996D01* X63084638Y-58825996D02* X62976889Y-58718247D01* X62976889Y-58718247D02* X62896076Y-58691309D01* X62896076Y-58691309D02* X62842202Y-58691309D01* X62842202Y-58691309D02* X62761389Y-58718247D01* X70572333Y-77067580D02* X70524714Y-77115200D01* X70524714Y-77115200D02* X70381857Y-77162819D01* X70381857Y-77162819D02* X70286619Y-77162819D01* X70286619Y-77162819D02* X70143762Y-77115200D01* X70143762Y-77115200D02* X70048524Y-77019961D01* X70048524Y-77019961D02* X70000905Y-76924723D01* X70000905Y-76924723D02* X69953286Y-76734247D01* X69953286Y-76734247D02* X69953286Y-76591390D01* X69953286Y-76591390D02* X70000905Y-76400914D01* X70000905Y-76400914D02* X70048524Y-76305676D01* X70048524Y-76305676D02* X70143762Y-76210438D01* X70143762Y-76210438D02* X70286619Y-76162819D01* X70286619Y-76162819D02* X70381857Y-76162819D01* X70381857Y-76162819D02* X70524714Y-76210438D01* X70524714Y-76210438D02* X70572333Y-76258057D01* X70953286Y-76258057D02* X71000905Y-76210438D01* X71000905Y-76210438D02* X71096143Y-76162819D01* X71096143Y-76162819D02* X71334238Y-76162819D01* X71334238Y-76162819D02* X71429476Y-76210438D01* X71429476Y-76210438D02* X71477095Y-76258057D01* X71477095Y-76258057D02* X71524714Y-76353295D01* X71524714Y-76353295D02* X71524714Y-76448533D01* X71524714Y-76448533D02* X71477095Y-76591390D01* X71477095Y-76591390D02* X70905667Y-77162819D01* X70905667Y-77162819D02* X71524714Y-77162819D01* X49044266Y-97498819D02* X49044266Y-98213104D01* X49044266Y-98213104D02* X48996647Y-98355961D01* X48996647Y-98355961D02* X48901409Y-98451200D01* X48901409Y-98451200D02* X48758552Y-98498819D01* X48758552Y-98498819D02* X48663314Y-98498819D01* X49949028Y-97832152D02* X49949028Y-98498819D01* X49710933Y-97451200D02* X49472838Y-98165485D01* X49472838Y-98165485D02* X50091885Y-98165485D01* X95334203Y-96920576D02* X95334203Y-97634861D01* X95334203Y-97634861D02* X95286584Y-97777718D01* X95286584Y-97777718D02* X95191346Y-97872957D01* X95191346Y-97872957D02* X95048489Y-97920576D01* X95048489Y-97920576D02* X94953251Y-97920576D01* X95715156Y-96920576D02* X96334203Y-96920576D01* X96334203Y-96920576D02* X96000870Y-97301528D01* X96000870Y-97301528D02* X96143727Y-97301528D01* X96143727Y-97301528D02* X96238965Y-97349147D01* X96238965Y-97349147D02* X96286584Y-97396766D01* X96286584Y-97396766D02* X96334203Y-97492004D01* X96334203Y-97492004D02* X96334203Y-97730099D01* X96334203Y-97730099D02* X96286584Y-97825337D01* X96286584Y-97825337D02* X96238965Y-97872957D01* X96238965Y-97872957D02* X96143727Y-97920576D01* X96143727Y-97920576D02* X95858013Y-97920576D01* X95858013Y-97920576D02* X95762775Y-97872957D01* X95762775Y-97872957D02* X95715156Y-97825337D01* X86754666Y-97498819D02* X86754666Y-98213104D01* X86754666Y-98213104D02* X86707047Y-98355961D01* X86707047Y-98355961D02* X86611809Y-98451200D01* X86611809Y-98451200D02* X86468952Y-98498819D01* X86468952Y-98498819D02* X86373714Y-98498819D01* X87754666Y-98498819D02* X87183238Y-98498819D01* X87468952Y-98498819D02* X87468952Y-97498819D01* X87468952Y-97498819D02* X87373714Y-97641676D01* X87373714Y-97641676D02* X87278476Y-97736914D01* X87278476Y-97736914D02* X87183238Y-97784533D01* X67837765Y-87639329D02* X67837765Y-88448852D01* X67837765Y-88448852D02* X67885384Y-88544090D01* X67885384Y-88544090D02* X67933003Y-88591710D01* X67933003Y-88591710D02* X68028241Y-88639329D01* X68028241Y-88639329D02* X68218717Y-88639329D01* X68218717Y-88639329D02* X68313955Y-88591710D01* X68313955Y-88591710D02* X68361574Y-88544090D01* X68361574Y-88544090D02* X68409193Y-88448852D01* X68409193Y-88448852D02* X68409193Y-87639329D01* X69313955Y-87972662D02* X69313955Y-88639329D01* X69075860Y-87591710D02* X68837765Y-88305995D01* X68837765Y-88305995D02* X69456812Y-88305995D01* X60397708Y-96842695D02* X60397708Y-97556980D01* X60397708Y-97556980D02* X60350089Y-97699837D01* X60350089Y-97699837D02* X60254851Y-97795076D01* X60254851Y-97795076D02* X60111994Y-97842695D01* X60111994Y-97842695D02* X60016756Y-97842695D01* X60826280Y-96937933D02* X60873899Y-96890314D01* X60873899Y-96890314D02* X60969137Y-96842695D01* X60969137Y-96842695D02* X61207232Y-96842695D01* X61207232Y-96842695D02* X61302470Y-96890314D01* X61302470Y-96890314D02* X61350089Y-96937933D01* X61350089Y-96937933D02* X61397708Y-97033171D01* X61397708Y-97033171D02* X61397708Y-97128409D01* X61397708Y-97128409D02* X61350089Y-97271266D01* X61350089Y-97271266D02* X60778661Y-97842695D01* X60778661Y-97842695D02* X61397708Y-97842695D01* X63942933Y-77016780D02* X63895314Y-77064400D01* X63895314Y-77064400D02* X63752457Y-77112019D01* X63752457Y-77112019D02* X63657219Y-77112019D01* X63657219Y-77112019D02* X63514362Y-77064400D01* X63514362Y-77064400D02* X63419124Y-76969161D01* X63419124Y-76969161D02* X63371505Y-76873923D01* X63371505Y-76873923D02* X63323886Y-76683447D01* X63323886Y-76683447D02* X63323886Y-76540590D01* X63323886Y-76540590D02* X63371505Y-76350114D01* X63371505Y-76350114D02* X63419124Y-76254876D01* X63419124Y-76254876D02* X63514362Y-76159638D01* X63514362Y-76159638D02* X63657219Y-76112019D01* X63657219Y-76112019D02* X63752457Y-76112019D01* X63752457Y-76112019D02* X63895314Y-76159638D01* X63895314Y-76159638D02* X63942933Y-76207257D01* X64895314Y-77112019D02* X64323886Y-77112019D01* X64609600Y-77112019D02* X64609600Y-76112019D01* X64609600Y-76112019D02* X64514362Y-76254876D01* X64514362Y-76254876D02* X64419124Y-76350114D01* X64419124Y-76350114D02* X64323886Y-76397733D01* D11* %TO.C,U1*% X74844000Y-43334000D02* X74844000Y-43634000D01* X74844000Y-43334000D02* X95844000Y-43334000D01* X74844000Y-45734000D02* X74844000Y-46134000D01* X74844000Y-46001000D02* X77851000Y-46001000D01* X74844000Y-48334000D02* X74844000Y-48734000D01* X74844000Y-50834000D02* X74844000Y-51234000D01* X74844000Y-53434000D02* X74844000Y-53834000D01* X74844000Y-55934000D02* X74844000Y-56334000D01* X74844000Y-58434000D02* X74844000Y-58834000D01* X74844000Y-61034000D02* X74844000Y-61434000D01* X74844000Y-63534000D02* X74844000Y-63934000D01* X74844000Y-66134000D02* X74844000Y-66534000D01* X74844000Y-68634000D02* X74844000Y-69034000D01* X74844000Y-71134000D02* X74844000Y-71534000D01* X74844000Y-73734000D02* X74844000Y-74134000D01* X74844000Y-76234000D02* X74844000Y-76634000D01* X74844000Y-78834000D02* X74844000Y-79234000D01* X74844000Y-81334000D02* X74844000Y-81734000D01* X74844000Y-83934000D02* X74844000Y-84334000D01* X74844000Y-86434000D02* X74844000Y-86834000D01* X74844000Y-88934000D02* X74844000Y-89334000D01* X74844000Y-91534000D02* X74844000Y-91934000D01* X77851000Y-46001000D02* X77851000Y-43334000D01* X81644000Y-94334000D02* X74844000Y-94334000D01* X83844000Y-94334000D02* X84244000Y-94334000D01* X86444000Y-94334000D02* X86844000Y-94334000D01* X95844000Y-43334000D02* X95844000Y-43634000D01* X95844000Y-45734000D02* X95844000Y-46134000D01* X95844000Y-48334000D02* X95844000Y-48734000D01* X95844000Y-50834000D02* X95844000Y-51234000D01* X95844000Y-53434000D02* X95844000Y-53834000D01* X95844000Y-55934000D02* X95844000Y-56334000D01* X95844000Y-58434000D02* X95844000Y-58834000D01* X95844000Y-61034000D02* X95844000Y-61434000D01* X95844000Y-63534000D02* X95844000Y-63934000D01* X95844000Y-66134000D02* X95844000Y-66534000D01* X95844000Y-68634000D02* X95844000Y-69034000D01* X95844000Y-71134000D02* X95844000Y-71534000D01* X95844000Y-73734000D02* X95844000Y-74134000D01* X95844000Y-76234000D02* X95844000Y-76634000D01* X95844000Y-78834000D02* X95844000Y-79234000D01* X95844000Y-81334000D02* X95844000Y-81734000D01* X95844000Y-83934000D02* X95844000Y-84334000D01* X95844000Y-86434000D02* X95844000Y-86834000D01* X95844000Y-88934000D02* X95844000Y-89334000D01* X95844000Y-91534000D02* X95844000Y-91934000D01* X95844000Y-94334000D02* X89044000Y-94334000D01* %TO.C,U2*% X38385523Y-43318249D02* X38385523Y-43618249D01* X38385523Y-43318249D02* X59385523Y-43318249D01* X38385523Y-45718249D02* X38385523Y-46118249D01* X38385523Y-45985249D02* X41392523Y-45985249D01* X38385523Y-48318249D02* X38385523Y-48718249D01* X38385523Y-50818249D02* X38385523Y-51218249D01* X38385523Y-53418249D02* X38385523Y-53818249D01* X38385523Y-55918249D02* X38385523Y-56318249D01* X38385523Y-58418249D02* X38385523Y-58818249D01* X38385523Y-61018249D02* X38385523Y-61418249D01* X38385523Y-63518249D02* X38385523Y-63918249D01* X38385523Y-66118249D02* X38385523Y-66518249D01* X38385523Y-68618249D02* X38385523Y-69018249D01* X38385523Y-71118249D02* X38385523Y-71518249D01* X38385523Y-73718249D02* X38385523Y-74118249D01* X38385523Y-76218249D02* X38385523Y-76618249D01* X38385523Y-78818249D02* X38385523Y-79218249D01* X38385523Y-81318249D02* X38385523Y-81718249D01* X38385523Y-83918249D02* X38385523Y-84318249D01* X38385523Y-86418249D02* X38385523Y-86818249D01* X38385523Y-88918249D02* X38385523Y-89318249D01* X38385523Y-91518249D02* X38385523Y-91918249D01* X41392523Y-45985249D02* X41392523Y-43318249D01* X45185523Y-94318249D02* X38385523Y-94318249D01* X47385523Y-94318249D02* X47785523Y-94318249D01* X49985523Y-94318249D02* X50385523Y-94318249D01* X59385523Y-43318249D02* X59385523Y-43618249D01* X59385523Y-45718249D02* X59385523Y-46118249D01* X59385523Y-48318249D02* X59385523Y-48718249D01* X59385523Y-50818249D02* X59385523Y-51218249D01* X59385523Y-53418249D02* X59385523Y-53818249D01* X59385523Y-55918249D02* X59385523Y-56318249D01* X59385523Y-58418249D02* X59385523Y-58818249D01* X59385523Y-61018249D02* X59385523Y-61418249D01* X59385523Y-63518249D02* X59385523Y-63918249D01* X59385523Y-66118249D02* X59385523Y-66518249D01* X59385523Y-68618249D02* X59385523Y-69018249D01* X59385523Y-71118249D02* X59385523Y-71518249D01* X59385523Y-73718249D02* X59385523Y-74118249D01* X59385523Y-76218249D02* X59385523Y-76618249D01* X59385523Y-78818249D02* X59385523Y-79218249D01* X59385523Y-81318249D02* X59385523Y-81718249D01* X59385523Y-83918249D02* X59385523Y-84318249D01* X59385523Y-86418249D02* X59385523Y-86818249D01* X59385523Y-88918249D02* X59385523Y-89318249D01* X59385523Y-91518249D02* X59385523Y-91918249D01* X59385523Y-94318249D02* X52585523Y-94318249D01* %TO.C,C2*% X69892939Y-73967665D02* X71315443Y-73967665D01* X69892939Y-75787665D02* X71315443Y-75787665D01* %TO.C,J4*% X41966000Y-114154000D02* X41966000Y-114674000D01* X41966000Y-114674000D02* X56586000Y-114674000D01* X42616000Y-99194000D02* X42616000Y-102524000D01* X42616000Y-99194000D02* X55936000Y-99194000D01* X42616000Y-114154000D02* X41966000Y-114154000D01* X42616000Y-114154000D02* X42616000Y-106044000D01* X44876000Y-98974000D02* X46676000Y-98974000D01* X55936000Y-99194000D02* X55936000Y-102524000D01* X55936000Y-106044000D02* X55936000Y-114154000D01* X56586000Y-114154000D02* X55936000Y-114154000D01* X56586000Y-114674000D02* X56586000Y-114154000D01* %TO.C,J3*% X94337537Y-98465757D02* X95667537Y-98465757D01* X94337537Y-99795757D02* X94337537Y-98465757D01* X94337537Y-101065757D02* X94337537Y-106205757D01* X94337537Y-101065757D02* X96997537Y-101065757D01* X94337537Y-106205757D02* X96997537Y-106205757D01* X96997537Y-101065757D02* X96997537Y-106205757D01* %TO.C,J1*% X77272000Y-114154000D02* X77272000Y-114674000D01* X77272000Y-114674000D02* X91892000Y-114674000D01* X77922000Y-99194000D02* X77922000Y-102524000D01* X77922000Y-99194000D02* X91242000Y-99194000D01* X77922000Y-114154000D02* X77272000Y-114154000D01* X77922000Y-114154000D02* X77922000Y-106044000D01* X80182000Y-98974000D02* X81982000Y-98974000D01* X91242000Y-99194000D02* X91242000Y-102524000D01* X91242000Y-106044000D02* X91242000Y-114154000D01* X91892000Y-114154000D02* X91242000Y-114154000D01* X91892000Y-114674000D02* X91892000Y-114154000D01* %TO.C,U4*% X67228070Y-81916110D02* X63778070Y-81916110D01* X67228070Y-81916110D02* X69178070Y-81916110D01* X67228070Y-87036110D02* X65278070Y-87036110D01* X67228070Y-87036110D02* X69178070Y-87036110D01* %TO.C,J2*% X59401042Y-98387876D02* X60731042Y-98387876D01* X59401042Y-99717876D02* X59401042Y-98387876D01* X59401042Y-100987876D02* X59401042Y-106127876D01* X59401042Y-100987876D02* X62061042Y-100987876D01* X59401042Y-106127876D02* X62061042Y-106127876D01* X62061042Y-100987876D02* X62061042Y-106127876D01* %TO.C,C1*% X64721288Y-75839999D02* X63298784Y-75839999D01* X64721288Y-74019999D02* X63298784Y-74019999D01* %TD*% M02* ================================================ FILE: pcb/v1.0/Gerber/DeskHop-NPTH.drl ================================================ M48 ; DRILL file {KiCad 7.0.9} date Sunday, January 21, 2024 at 01:35:19 AM ; FORMAT={-:-/ absolute / inch / decimal} ; #@! TF.CreationDate,2024-01-21T01:35:19+01:00 ; #@! TF.GenerationSoftware,Kicad,Pcbnew,7.0.9 ; #@! TF.FileFunction,NonPlated,1,2,NPTH FMAT,2 INCH ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill T1C0.0591 ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill T2C0.0709 % G90 G05 T1 X1.8292Y-1.8838 X2.0201Y-1.8838 X3.2645Y-1.8844 X3.4555Y-1.8844 T2 X1.8173Y-1.7645 X2.0319Y-1.7645 X3.2527Y-1.7651 X3.4673Y-1.7651 T0 M30 ================================================ FILE: pcb/v1.0/Gerber/DeskHop-PTH.drl ================================================ M48 ; DRILL file {KiCad 7.0.9} date Sunday, January 21, 2024 at 01:35:19 AM ; FORMAT={-:-/ absolute / inch / decimal} ; #@! TF.CreationDate,2024-01-21T01:35:19+01:00 ; #@! TF.GenerationSoftware,Kicad,Pcbnew,7.0.9 ; #@! TF.FileFunction,Plated,1,2,PTH FMAT,2 INCH ; #@! TA.AperFunction,Plated,PTH,ComponentDrill T1C0.0374 ; #@! TA.AperFunction,Plated,PTH,ComponentDrill T2C0.0394 ; #@! TA.AperFunction,Plated,PTH,ComponentDrill T3C0.0906 ; #@! TA.AperFunction,Plated,PTH,ComponentDrill T4C0.1063 % G90 G05 T1 X1.8022Y-3.999 X1.9006Y-3.999 X1.9794Y-3.999 X2.0778Y-3.999 X3.1922Y-3.999 X3.2906Y-3.999 X3.3694Y-3.999 X3.4678Y-3.999 T2 X2.391Y-3.9259 X2.391Y-4.0259 X2.391Y-4.1259 X3.7664Y-3.929 X3.7664Y-4.029 X3.7664Y-4.129 T3 X1.6813Y-4.1057 X2.1987Y-4.1057 X3.0713Y-4.1057 X3.5887Y-4.1057 T4 X1.49Y-4.39 X2.65Y-1.78 X3.81Y-4.39 T0 M30 ================================================ FILE: pcb/v1.0/Gerber/DeskHop-job.gbrjob ================================================ { "Header": { "GenerationSoftware": { "Vendor": "KiCad", "Application": "Pcbnew", "Version": "7.0.9" }, "CreationDate": "2024-01-21T01:35:17+01:00" }, "GeneralSpecs": { "ProjectId": { "Name": "DeskHop", "GUID": "4465736b-486f-4702-9e6b-696361645f70", "Revision": "rev?" }, "Size": { "X": 66.9662, "Y": 74.5313 }, "LayerNumber": 2, "BoardThickness": 1.6, "Finish": "None" }, "DesignRules": [ { "Layers": "Outer", "PadToPad": 0.0, "PadToTrack": 0.0, "TrackToTrack": 0.2, "MinLineWidth": 0.5, "TrackToRegion": 0.508, "RegionToRegion": 0.508 } ], "FilesAttributes": [ { "Path": "DeskHop-F_Cu.gbr", "FileFunction": "Copper,L1,Top", "FilePolarity": "Positive" }, { "Path": "DeskHop-B_Cu.gbr", "FileFunction": "Copper,L2,Bot", "FilePolarity": "Positive" }, { "Path": "DeskHop-F_Paste.gbr", "FileFunction": "SolderPaste,Top", "FilePolarity": "Positive" }, { "Path": "DeskHop-B_Paste.gbr", "FileFunction": "SolderPaste,Bot", "FilePolarity": "Positive" }, { "Path": "DeskHop-F_Silkscreen.gbr", "FileFunction": "Legend,Top", "FilePolarity": "Positive" }, { "Path": "DeskHop-B_Silkscreen.gbr", "FileFunction": "Legend,Bot", "FilePolarity": "Positive" }, { "Path": "DeskHop-F_Mask.gbr", "FileFunction": "SolderMask,Top", "FilePolarity": "Negative" }, { "Path": "DeskHop-B_Mask.gbr", "FileFunction": "SolderMask,Bot", "FilePolarity": "Negative" }, { "Path": "DeskHop-Edge_Cuts.gbr", "FileFunction": "Profile", "FilePolarity": "Positive" } ], "MaterialStackup": [ { "Type": "Legend", "Name": "Top Silk Screen" }, { "Type": "SolderPaste", "Name": "Top Solder Paste" }, { "Type": "SolderMask", "Thickness": 0.01, "Name": "Top Solder Mask" }, { "Type": "Copper", "Thickness": 0.035, "Name": "F.Cu" }, { "Type": "Dielectric", "Thickness": 1.51, "Material": "FR4", "Name": "F.Cu/B.Cu", "Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)" }, { "Type": "Copper", "Thickness": 0.035, "Name": "B.Cu" }, { "Type": "SolderMask", "Thickness": 0.01, "Name": "Bottom Solder Mask" }, { "Type": "SolderPaste", "Name": "Bottom Solder Paste" }, { "Type": "Legend", "Name": "Bottom Silk Screen" } ] } ================================================ FILE: pcb/v1.1/DeskHop_Rev1.kicad_pcb ================================================ (kicad_pcb (version 20221018) (generator pcbnew) (general (thickness 1.6) ) (paper "A4") (layers (0 "F.Cu" signal) (31 "B.Cu" signal) (32 "B.Adhes" user "B.Adhesive") (33 "F.Adhes" user "F.Adhesive") (34 "B.Paste" user) (35 "F.Paste" user) (36 "B.SilkS" user "B.Silkscreen") (37 "F.SilkS" user "F.Silkscreen") (38 "B.Mask" user) (39 "F.Mask" user) (40 "Dwgs.User" user "User.Drawings") (41 "Cmts.User" user "User.Comments") (42 "Eco1.User" user "User.Eco1") (43 "Eco2.User" user "User.Eco2") (44 "Edge.Cuts" user) (45 "Margin" user) (46 "B.CrtYd" user "B.Courtyard") (47 "F.CrtYd" user "F.Courtyard") (48 "B.Fab" user) (49 "F.Fab" user) ) (setup (stackup (layer "F.SilkS" (type "Top Silk Screen")) (layer "F.Paste" (type "Top Solder Paste")) (layer "F.Mask" (type "Top Solder Mask") (thickness 0.01)) (layer "F.Cu" (type "copper") (thickness 0.035)) (layer "dielectric 1" (type "core") (thickness 1.51) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02)) (layer "B.Cu" (type "copper") (thickness 0.035)) (layer "B.Mask" (type "Bottom Solder Mask") (thickness 0.01)) (layer "B.Paste" (type "Bottom Solder Paste")) (layer "B.SilkS" (type "Bottom Silk Screen")) (copper_finish "None") (dielectric_constraints no) ) (pad_to_mask_clearance 0) (pcbplotparams (layerselection 0x00010f8_ffffffff) (plot_on_all_layers_selection 0x0000000_00000000) (disableapertmacros false) (usegerberextensions false) (usegerberattributes true) (usegerberadvancedattributes true) (creategerberjobfile true) (dashed_line_dash_ratio 12.000000) (dashed_line_gap_ratio 3.000000) (svgprecision 6) (plotframeref false) (viasonmask false) (mode 1) (useauxorigin false) (hpglpennumber 1) (hpglpenspeed 20) (hpglpendiameter 15.000000) (dxfpolygonmode true) (dxfimperialunits true) (dxfusepcbnewfont true) (psnegative false) (psa4output false) (plotreference true) (plotvalue true) (plotinvisibletext false) (sketchpadsonfab false) (subtractmaskfromsilk false) (outputformat 1) (mirror false) (drillshape 0) (scaleselection 1) (outputdirectory "Gerber_DeskHop/") ) ) (net 0 "") (net 1 "GND") (net 2 "Net-(J2-Pin_1)") (net 3 "Net-(J2-Pin_3)") (net 4 "Net-(J3-Pin_1)") (net 5 "Net-(J3-Pin_3)") (net 6 "Net-(U1-3V3)") (net 7 "unconnected-(U1-GPIO3-Pad5)") (net 8 "unconnected-(U1-GPIO4-Pad6)") (net 9 "unconnected-(U1-GPIO5-Pad7)") (net 10 "unconnected-(U2-GPIO1-Pad2)") (net 11 "unconnected-(U1-GPIO6-Pad9)") (net 12 "unconnected-(U1-GPIO7-Pad10)") (net 13 "unconnected-(U1-GPIO10-Pad14)") (net 14 "unconnected-(U1-GPIO11-Pad15)") (net 15 "unconnected-(U1-GPIO0-Pad1)") (net 16 "unconnected-(U1-GPIO1-Pad2)") (net 17 "unconnected-(U1-GPIO20-Pad26)") (net 18 "3V3_BUS2") (net 19 "unconnected-(U1-GPIO16-Pad21)") (net 20 "unconnected-(U1-GPIO17-Pad22)") (net 21 "unconnected-(U1-GPIO18-Pad24)") (net 22 "unconnected-(U1-GPIO19-Pad25)") (net 23 "unconnected-(U1-GPIO8-Pad11)") (net 24 "unconnected-(U1-GPIO22-Pad29)") (net 25 "unconnected-(U1-RUN-Pad30)") (net 26 "unconnected-(U1-AGND-Pad33)") (net 27 "unconnected-(U1-GPIO28_ADC2-Pad34)") (net 28 "unconnected-(U1-ADC_VREF-Pad35)") (net 29 "unconnected-(U1-3V3_EN-Pad37)") (net 30 "unconnected-(U1-VSYS-Pad39)") (net 31 "VBUS2") (net 32 "unconnected-(U1-GPIO26_ADC0-Pad31)") (net 33 "unconnected-(U2-GPIO0-Pad1)") (net 34 "VBUS1") (net 35 "unconnected-(U2-GPIO3-Pad5)") (net 36 "unconnected-(U2-GPIO4-Pad6)") (net 37 "unconnected-(U2-GPIO5-Pad7)") (net 38 "unconnected-(U1-GPIO27_ADC1-Pad32)") (net 39 "unconnected-(U2-GPIO6-Pad9)") (net 40 "unconnected-(U2-GPIO7-Pad10)") (net 41 "unconnected-(U2-GPIO8-Pad11)") (net 42 "unconnected-(U2-GPIO10-Pad14)") (net 43 "unconnected-(U2-GPIO11-Pad15)") (net 44 "unconnected-(U2-GPIO12-Pad16)") (net 45 "unconnected-(U2-GPIO13-Pad17)") (net 46 "unconnected-(U2-GPIO18-Pad24)") (net 47 "unconnected-(U2-GPIO19-Pad25)") (net 48 "unconnected-(U2-GPIO20-Pad26)") (net 49 "unconnected-(U2-GPIO21-Pad27)") (net 50 "unconnected-(U2-GPIO22-Pad29)") (net 51 "unconnected-(U2-RUN-Pad30)") (net 52 "unconnected-(U2-GPIO26_ADC0-Pad31)") (net 53 "unconnected-(U2-GPIO27_ADC1-Pad32)") (net 54 "unconnected-(U2-AGND-Pad33)") (net 55 "unconnected-(U2-GPIO28_ADC2-Pad34)") (net 56 "unconnected-(U2-ADC_VREF-Pad35)") (net 57 "unconnected-(U2-3V3_EN-Pad37)") (net 58 "unconnected-(U2-VSYS-Pad39)") (net 59 "/AD+") (net 60 "unconnected-(U2-GPIO9-Pad12)") (net 61 "GND2") (net 62 "Net-(U2-GPIO15)") (net 63 "unconnected-(U1-GPIO9-Pad12)") (net 64 "Net-(U2-GPIO14)") (net 65 "UART A TX") (net 66 "UART A RX") (net 67 "UART B TX") (net 68 "UART B RX") (net 69 "unconnected-(U3-NC-Pad5)") (net 70 "unconnected-(U5-NC-Pad5)") (net 71 "unconnected-(U1-GPIO21-Pad27)") (net 72 "unconnected-(U2-GPIO2-Pad4)") (net 73 "/AD-") (net 74 "OA-") (net 75 "OA+") (net 76 "OB-") (net 77 "OB+") (footprint "MCU_RaspberryPi_and_Boards:RPi_Pico_SMD_TH" (layer "F.Cu") (tstamp 00000000-0000-0000-0000-0000602a2a11) (at 85.344 68.834) (descr "Through hole straight pin header, 2x20, 2.54mm pitch, double rows") (tags "Through hole pin header THT 2x20 2.54mm double row") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (path "/00000000-0000-0000-0000-00006029bf78") (attr through_hole) (fp_text reference "U1" (at 6.136 26.466) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp f1c6eb53-f2a4-4d75-963e-5ff380577852) ) (fp_text value "Pico Primary" (at 0 2.159) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp a66c147a-1927-411d-901e-a3b9fce165cc) ) (fp_text user "GP28" (at 13.054 -9.144 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 00222832-4406-4860-b9f1-a2d8c6a62d19) ) (fp_text user "GP17" (at 13.054 21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 00fb850e-5795-457e-b1ef-2115b0a433cb) ) (fp_text user "GP20" (at 13.054 11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 02577679-fc69-4e35-b6ca-b90c460c448f) ) (fp_text user "GP0" (at -12.8 -24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 08060c79-97a7-4817-9c44-11e07ad48462) ) (fp_text user " 3V3*" (at 12.9 -13.9 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 0c175795-7199-4cb6-aad5-21595813c3be) ) (fp_text user "GP4" (at -12.8 -11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 0f119a0e-70c3-49b5-8b75-e137896e0190) ) (fp_text user "AGND" (at 13.054 -6.35 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 2001ae85-1c73-4797-ae52-b36653296a0d) ) (fp_text user "DP*" (at -13.044 21.796 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 2bd89aa7-4c35-48e9-895c-c1751be95128) ) (fp_text user "GND*" (at -12.8 -6.35 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 2bdf0a62-e09b-41cf-8946-38e0792b5bbc) ) (fp_text user "GP5" (at -12.8 -8.89 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 3c111893-7e67-477a-8074-a5f07a2f4c55) ) (fp_text user "VSYS" (at 13.2 -21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 3e367c8e-e0b8-48d3-a9a9-72c933c1d144) ) (fp_text user "TX*" (at -13.2 13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 4a2b0d56-fe12-4497-88f9-92d91350612c) ) (fp_text user "GP26" (at 13.054 -1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 4b1e3f37-e747-4c9b-96bd-5b9a90d3450e) ) (fp_text user "GP11" (at -13.2 11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 5650aa60-79f6-4e12-9066-9e036a6c4e34) ) (fp_text user "GP2*" (at -12.9 -16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 5f6beaf6-aba7-4575-a229-c834ca4cf942) ) (fp_text user "3V3e" (at 13.226 -16.824 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 64ed8504-f74a-4870-8a28-433bf24db806) ) (fp_text user "GND*" (at 13.046 18.916 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 78d395a5-0f05-4977-aa9d-71d389e639e9) ) (fp_text user "RUN" (at 13 1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 7dd92d99-f47c-4d2d-823b-0cb5e349be46) ) (fp_text user "GP6" (at -12.8 -3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 84a6972e-a4c3-4e5f-ad83-cddb241eb710) ) (fp_text user "GP1" (at -12.9 -21.6 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 89405725-fcce-4a6f-a9e9-f3249a9e19ca) ) (fp_text user "GP10" (at -13.054 8.89 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 9ae0c2a1-5506-418a-808a-e88fd7aa3318) ) (fp_text user "DATA" (at 5.316 26.806) (layer "F.SilkS") hide (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 9b6fff9b-1b4a-4bcc-8c9b-a92c63c28b31) ) (fp_text user "RX*" (at -13.054 16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp a058a5c0-8424-4b01-9d57-418111eaf3c7) ) (fp_text user "GP21" (at 13.054 8.9 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp a2436102-6de7-4d17-a4b5-cc285a503b70) ) (fp_text user " GND*" (at 12.8 6.35 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp a518207e-c098-45fe-8209-d81594365bb7) ) (fp_text user "AVRF" (at 13.076 -11.844 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp ad6841f3-907b-418c-80e0-5f591a8fda4f) ) (fp_text user "GP9" (at -12.8 3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp afdf7cb7-ffa7-453c-b92b-e74629075600) ) (fp_text user "GP18" (at 13.054 16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp b0e8b640-73d3-45c4-9d04-5ed921849064) ) (fp_text user " VBUS*" (at 13.3 -24.2 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp b2c8a29d-fef8-4ab4-9875-bcd83794e180) ) (fp_text user "GP27" (at 13.054 -3.8 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp b69c85fd-dc8b-4371-86d5-8ab42eb3c0d3) ) (fp_text user "GP22" (at 13.054 3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp bafaffc3-bde6-425d-9646-5a5efc886b5b) ) (fp_text user "GP8" (at -12.8 1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp bed4a287-a0a4-4de1-acd6-2d76f3ba94a7) ) (fp_text user "GND*" (at -13.314 19.296 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp c74eccf8-4af8-4342-bba8-5011625bba1e) ) (fp_text user "GP16" (at 13.054 24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp cff908f4-1933-4ce9-a553-9eead79b4f80) ) (fp_text user "GP19" (at 13.054 13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp e028d549-a3ca-4da9-a10b-e43a2b830cf2) ) (fp_text user "DM*" (at -12.904 24.196 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp e0324ead-7991-4387-8f6b-6a66d5789458) ) (fp_text user "GP7" (at -12.7 -1.3 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp e295287a-c973-4fbf-b43e-6ed77a79515a) ) (fp_text user "CLK" (at -5.7 26.2) (layer "F.SilkS") hide (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp efe4cc21-91d4-4141-bdbc-819b16b60d3b) ) (fp_text user "GND*" (at -12.8 -19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp f9c12586-c90d-4668-9648-bb99d12d54a6) ) (fp_text user "GP3" (at -12.8 -13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp fa0af3e1-c5c1-495a-b6a8-c19fa04d0223) ) (fp_text user " GND*" (at 12.8 -19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp fd827914-9d6a-42ea-af76-919f0f7a8441) ) (fp_text user "${REFERENCE}" (at 0 0 180) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 3308ccc7-5a85-4be4-a68b-9d08862341a1) ) (fp_line (start -10.5 -25.5) (end -10.5 -25.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b9b7a475-7725-409f-bac9-05d8f3cf5bca)) (fp_line (start -10.5 -25.5) (end 10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 08a70c36-2b83-4a54-a37e-6d99558960ea)) (fp_line (start -10.5 -23.1) (end -10.5 -22.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 19ef171c-51b6-4356-8c78-8a7f80349201)) (fp_line (start -10.5 -22.833) (end -7.493 -22.833) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 345e010a-1900-44df-8532-d694f1459592)) (fp_line (start -10.5 -20.5) (end -10.5 -20.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 0bf38d37-91cd-454f-801d-65a7f407ee6d)) (fp_line (start -10.5 -18) (end -10.5 -17.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 810211f3-c799-490e-98d0-cc4eefe5dd22)) (fp_line (start -10.5 -15.4) (end -10.5 -15) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 79c78827-44ad-4ec4-ae1f-e6e56949655c)) (fp_line (start -10.5 -12.9) (end -10.5 -12.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c9321fa0-8394-4c3c-948a-d2fc282aae31)) (fp_line (start -10.5 -10.4) (end -10.5 -10) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp dc7cc15d-1939-44b6-9450-e0662fd26902)) (fp_line (start -10.5 -7.8) (end -10.5 -7.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2809f253-96b5-4eff-8437-0d567960befc)) (fp_line (start -10.5 -5.3) (end -10.5 -4.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 797fb8eb-8b3a-4be1-8331-1640c9647191)) (fp_line (start -10.5 -2.7) (end -10.5 -2.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 59a74783-9d7c-4672-a109-c49fe60993c2)) (fp_line (start -10.5 -0.2) (end -10.5 0.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b14bc6f3-9150-457a-85fc-f7c400f7c87f)) (fp_line (start -10.5 2.3) (end -10.5 2.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 88927f19-aec9-4b79-aaf7-c5bd0b7cab43)) (fp_line (start -10.5 4.9) (end -10.5 5.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b40c51d9-16c6-41e8-af63-65608b87480e)) (fp_line (start -10.5 7.4) (end -10.5 7.8) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 87ee30ce-8f68-425f-8234-030733129312)) (fp_line (start -10.5 10) (end -10.5 10.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 655aedcf-3141-42cb-a409-81b2d217b39d)) (fp_line (start -10.5 12.5) (end -10.5 12.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a84794d8-17e8-4231-87a1-d4336e862547)) (fp_line (start -10.5 15.1) (end -10.5 15.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 8708f637-1747-4b96-8743-842b6d1b21e7)) (fp_line (start -10.5 17.6) (end -10.5 18) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 121440a2-32a9-4dd5-91e7-47792fe09303)) (fp_line (start -10.5 20.1) (end -10.5 20.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 74ba9149-fb61-46d9-9f86-0c4f65727695)) (fp_line (start -10.5 22.7) (end -10.5 23.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 581daccb-c8f2-4ded-9218-279c0e5d33a6)) (fp_line (start -7.493 -22.833) (end -7.493 -25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 9c74ba40-c4bc-4638-be68-bb354eb38453)) (fp_line (start -3.7 25.5) (end -10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 33627efe-e089-4d79-8104-1109930009dc)) (fp_line (start -1.5 25.5) (end -1.1 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 06adca54-fc3c-40d9-b870-2f53e22d411c)) (fp_line (start 1.1 25.5) (end 1.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 59d701bd-0c7e-48c2-ad6c-e59881e06e12)) (fp_line (start 10.5 -25.5) (end 10.5 -25.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 8b844fb0-713e-481e-bc51-63a069ba7349)) (fp_line (start 10.5 -23.1) (end 10.5 -22.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 9b8456e9-5064-40f1-8018-103f65a0de99)) (fp_line (start 10.5 -20.5) (end 10.5 -20.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d465ccf4-ff9c-4364-b02b-9c2d53da8abf)) (fp_line (start 10.5 -18) (end 10.5 -17.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 579e073b-7165-499a-a95a-2c8400031dfa)) (fp_line (start 10.5 -15.4) (end 10.5 -15) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 0161293c-b025-4495-9329-3d9248acf388)) (fp_line (start 10.5 -12.9) (end 10.5 -12.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a35d9cd9-8b51-420a-a01a-eb2f5b3c2809)) (fp_line (start 10.5 -10.4) (end 10.5 -10) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6bb38538-7fd8-46dd-9693-e767e9d0a662)) (fp_line (start 10.5 -7.8) (end 10.5 -7.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 492dc5c4-aff8-46cb-86d3-0db75e64c6ca)) (fp_line (start 10.5 -5.3) (end 10.5 -4.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c3511858-40ef-4f0e-a8ea-ce2dd02bc509)) (fp_line (start 10.5 -2.7) (end 10.5 -2.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ba4b0176-77bf-4d9c-a5b1-397b022d09b5)) (fp_line (start 10.5 -0.2) (end 10.5 0.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp f35d0601-655d-4842-baba-493066c54117)) (fp_line (start 10.5 2.3) (end 10.5 2.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp fe181f06-8402-4cf8-ac45-c0c772c225fb)) (fp_line (start 10.5 4.9) (end 10.5 5.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ab72b048-ffbd-4a94-bf80-c38217cedc26)) (fp_line (start 10.5 7.4) (end 10.5 7.8) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a8a9b9fa-6dfb-4890-99a8-1b5ed1ce7f62)) (fp_line (start 10.5 10) (end 10.5 10.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4b3de117-604a-40d6-bd32-5111d5ad70dc)) (fp_line (start 10.5 12.5) (end 10.5 12.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp f22a0d77-45ed-4cfb-90d5-02fc5bf4d30d)) (fp_line (start 10.5 15.1) (end 10.5 15.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ff6bb6c3-ffe9-47b5-90af-962c0e470e7b)) (fp_line (start 10.5 17.6) (end 10.5 18) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp eae0806e-24e2-4de8-a55f-ab04e115b016)) (fp_line (start 10.5 20.1) (end 10.5 20.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 87e7b73a-a75d-4047-8ef7-b200f15af5f1)) (fp_line (start 10.5 22.7) (end 10.5 23.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5f236ba3-1f8c-48a4-b299-df0bce308cc3)) (fp_line (start 10.5 25.5) (end 3.7 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 593e19d3-f975-4630-b19d-5f7271a913a7)) (fp_poly (pts (xy -1.5 -16.5) (xy -3.5 -16.5) (xy -3.5 -18.5) (xy -1.5 -18.5) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp b137abe9-70c2-47c0-b06a-04fae12268a1)) (fp_poly (pts (xy -1.5 -14) (xy -3.5 -14) (xy -3.5 -16) (xy -1.5 -16) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp d70da166-992b-48e1-bf01-780f74c4f121)) (fp_poly (pts (xy -1.5 -11.5) (xy -3.5 -11.5) (xy -3.5 -13.5) (xy -1.5 -13.5) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp 0ddf20e7-4f9a-4dc0-b806-644c98c39619)) (fp_poly (pts (xy 3.7 -20.2) (xy -3.7 -20.2) (xy -3.7 -24.9) (xy 3.7 -24.9) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp 14b6c171-10d4-4572-af99-369a1f947cdd)) (fp_line (start -11 -26) (end 11 -26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp b5a3fa2f-63c1-4034-84f0-7f4329085336)) (fp_line (start -11 26) (end -11 -26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp d0f3689c-6029-4556-8968-37a23f48f14f)) (fp_line (start 11 -26) (end 11 26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp ab4a5a41-01be-47e2-b8ca-a182c7b678b8)) (fp_line (start 11 26) (end -11 26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp 88b42d65-ddc3-413d-bf9b-9d602f8b7b74)) (fp_line (start -10.5 -25.5) (end 10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 2a16e2d8-2e9b-4309-bf6a-d53eed7ee1cb)) (fp_line (start -10.5 -24.2) (end -9.2 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp bea0421c-e9e6-4153-a843-27b6d76ebdfc)) (fp_line (start -10.5 25.5) (end -10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp ceae46d4-2b67-48e5-be0d-93dd77d6b1ca)) (fp_line (start 10.5 -25.5) (end 10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 89a91bee-8bd0-4029-bf3e-b24e73553018)) (fp_line (start 10.5 25.5) (end -10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 19a9e1e1-3142-4551-b4fd-b6d0fa95d785)) (pad "" np_thru_hole oval (at -2.725 -24) (size 1.8 1.8) (drill 1.8) (layers "*.Cu" "*.Mask") (tstamp e23e0572-03ee-4788-b684-d31144552065)) (pad "" np_thru_hole oval (at -2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers "*.Cu" "*.Mask") (tstamp 247a6965-5435-4480-ada9-d2814a936d68)) (pad "" np_thru_hole oval (at 2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers "*.Cu" "*.Mask") (tstamp c38cbc87-a065-4af0-826e-5e69e3aed6fb)) (pad "" np_thru_hole oval (at 2.725 -24) (size 1.8 1.8) (drill 1.8) (layers "*.Cu" "*.Mask") (tstamp bc8f9303-0192-42d2-80e3-5d53e0e9b403)) (pad "1" thru_hole oval (at -8.89 -24.13) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 15 "unconnected-(U1-GPIO0-Pad1)") (pinfunction "GPIO0") (pintype "bidirectional") (tstamp 048bf9ad-03a8-4212-8ec6-a6f2876e85f5)) (pad "1" smd rect (at -8.89 -24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 15 "unconnected-(U1-GPIO0-Pad1)") (pinfunction "GPIO0") (pintype "bidirectional") (tstamp 55ddb010-de86-4b3e-9b34-0b98cf8993fa)) (pad "2" thru_hole oval (at -8.89 -21.59) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 16 "unconnected-(U1-GPIO1-Pad2)") (pinfunction "GPIO1") (pintype "bidirectional") (tstamp c20e231f-842e-4201-a501-f8cb5ffb5457)) (pad "2" smd rect (at -8.89 -21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 16 "unconnected-(U1-GPIO1-Pad2)") (pinfunction "GPIO1") (pintype "bidirectional") (tstamp b70c3d84-8f79-452e-9dc3-ea12e34989d7)) (pad "3" thru_hole rect (at -8.89 -19.05) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 142d8baa-ee16-4de4-8f76-c666446c4759)) (pad "3" smd rect (at -8.89 -19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 692077ff-4e14-46ec-990a-d1ceef0c4c25)) (pad "4" thru_hole oval (at -8.89 -16.51) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "GPIO2") (pintype "bidirectional") (tstamp f0663996-22fb-4e2f-b751-33ed3b5e40d7)) (pad "4" smd rect (at -8.89 -16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "GPIO2") (pintype "bidirectional") (tstamp 0aa73a40-b511-48a9-81bf-66c53e441b05)) (pad "5" thru_hole oval (at -8.89 -13.97) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 7 "unconnected-(U1-GPIO3-Pad5)") (pinfunction "GPIO3") (pintype "bidirectional") (tstamp 8376773b-1be2-4562-a420-55ebcb46fb40)) (pad "5" smd rect (at -8.89 -13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 7 "unconnected-(U1-GPIO3-Pad5)") (pinfunction "GPIO3") (pintype "bidirectional") (tstamp da86876f-83a4-4580-9aaa-7d1d531ef99a)) (pad "6" thru_hole oval (at -8.89 -11.43) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 8 "unconnected-(U1-GPIO4-Pad6)") (pinfunction "GPIO4") (pintype "bidirectional") (tstamp 686ac451-e5dd-472d-b8c5-9a0d26467561)) (pad "6" smd rect (at -8.89 -11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 8 "unconnected-(U1-GPIO4-Pad6)") (pinfunction "GPIO4") (pintype "bidirectional") (tstamp 00417e56-35ca-4aaf-bd18-57b3acb9cc91)) (pad "7" thru_hole oval (at -8.89 -8.89) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 9 "unconnected-(U1-GPIO5-Pad7)") (pinfunction "GPIO5") (pintype "bidirectional") (tstamp f4542d89-c31a-468c-967a-eb6bc7ffaa40)) (pad "7" smd rect (at -8.89 -8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 9 "unconnected-(U1-GPIO5-Pad7)") (pinfunction "GPIO5") (pintype "bidirectional") (tstamp 5c85f37a-5f75-4bfa-956b-f859981a64d6)) (pad "8" thru_hole rect (at -8.89 -6.35) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp c70d86f0-9036-4b92-af6e-8eb7b4527d4f)) (pad "8" smd rect (at -8.89 -6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 2b632f86-baa4-4e84-8af8-dbb9cafba328)) (pad "9" thru_hole oval (at -8.89 -3.81) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 11 "unconnected-(U1-GPIO6-Pad9)") (pinfunction "GPIO6") (pintype "bidirectional") (tstamp 4dceaaf5-e6af-4ba1-ae1a-2d0d8064f0d4)) (pad "9" smd rect (at -8.89 -3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 11 "unconnected-(U1-GPIO6-Pad9)") (pinfunction "GPIO6") (pintype "bidirectional") (tstamp 28e7ba34-cd79-4f9a-b75b-4fb6ce3c8c83)) (pad "10" thru_hole oval (at -8.89 -1.27) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 12 "unconnected-(U1-GPIO7-Pad10)") (pinfunction "GPIO7") (pintype "bidirectional") (tstamp 2527de1c-6598-48e9-a2ea-c8c031b6e3ed)) (pad "10" smd rect (at -8.89 -1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 12 "unconnected-(U1-GPIO7-Pad10)") (pinfunction "GPIO7") (pintype "bidirectional") (tstamp 6d41cb73-ace4-4f7a-a423-4b63a3e07515)) (pad "11" thru_hole oval (at -8.89 1.27) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 23 "unconnected-(U1-GPIO8-Pad11)") (pinfunction "GPIO8") (pintype "bidirectional") (tstamp 757a6b3d-3cd2-43da-8699-5e12f18da6e5)) (pad "11" smd rect (at -8.89 1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 23 "unconnected-(U1-GPIO8-Pad11)") (pinfunction "GPIO8") (pintype "bidirectional") (tstamp 2f9c1ba0-c268-4cb4-82f1-bd214f50ef55)) (pad "12" thru_hole oval (at -8.89 3.81) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 63 "unconnected-(U1-GPIO9-Pad12)") (pinfunction "GPIO9") (pintype "bidirectional") (tstamp 63c1709a-46ed-4819-b686-b5e1669aa6fc)) (pad "12" smd rect (at -8.89 3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 63 "unconnected-(U1-GPIO9-Pad12)") (pinfunction "GPIO9") (pintype "bidirectional") (tstamp dfff991f-de6c-4347-8987-e9cb7a498d56)) (pad "13" thru_hole rect (at -8.89 6.35) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp e35b8c29-9f25-4a4f-9402-af044e1f6c1a)) (pad "13" smd rect (at -8.89 6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 6bc20965-f731-4cda-b94d-6c41c37368db)) (pad "14" thru_hole oval (at -8.89 8.89) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 13 "unconnected-(U1-GPIO10-Pad14)") (pinfunction "GPIO10") (pintype "bidirectional") (tstamp cd5f0e3b-7a03-405d-8503-67f0d82c96b7)) (pad "14" smd rect (at -8.89 8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 13 "unconnected-(U1-GPIO10-Pad14)") (pinfunction "GPIO10") (pintype "bidirectional") (tstamp ca21b6c8-6f0f-4bfe-9350-d4a5b860faf2)) (pad "15" thru_hole oval (at -8.89 11.43) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 14 "unconnected-(U1-GPIO11-Pad15)") (pinfunction "GPIO11") (pintype "bidirectional") (tstamp e500c798-19ea-447b-acca-1b48cde7e5cd)) (pad "15" smd rect (at -8.89 11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 14 "unconnected-(U1-GPIO11-Pad15)") (pinfunction "GPIO11") (pintype "bidirectional") (tstamp eec84e96-149c-416b-bb74-3d4e5b21bed5)) (pad "16" thru_hole oval (at -8.89 13.97) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 65 "UART A TX") (pinfunction "GPIO12") (pintype "bidirectional") (tstamp 05e89b53-31d3-4d2f-b6e8-8739dba6eb80)) (pad "16" smd rect (at -8.89 13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 65 "UART A TX") (pinfunction "GPIO12") (pintype "bidirectional") (tstamp 06fede5b-75d0-4172-b659-431d8b8a021e)) (pad "17" thru_hole oval (at -8.89 16.51) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 66 "UART A RX") (pinfunction "GPIO13") (pintype "bidirectional") (tstamp c96c824c-a2c6-4b15-b3ac-618d7cde5e0f)) (pad "17" smd rect (at -8.89 16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 66 "UART A RX") (pinfunction "GPIO13") (pintype "bidirectional") (tstamp b7ab4606-e932-4696-9ef0-bbd17cf280ea)) (pad "18" thru_hole rect (at -8.89 19.05) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 0ce4ed21-6d11-4cc7-b976-442b9a376bcb)) (pad "18" smd rect (at -8.89 19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp efd9f926-3558-460d-b3a4-46837bd9e40f)) (pad "19" thru_hole oval (at -8.89 21.59) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 59 "/AD+") (pinfunction "GPIO14") (pintype "bidirectional") (tstamp afd00176-8418-4379-91ad-8605ce06decb)) (pad "19" smd rect (at -8.89 21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 59 "/AD+") (pinfunction "GPIO14") (pintype "bidirectional") (tstamp aeaa1355-ed42-432a-879f-89c6895ddda8)) (pad "20" thru_hole oval (at -8.89 24.13) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 73 "/AD-") (pinfunction "GPIO15") (pintype "bidirectional") (tstamp 97fd7538-ccaf-4d73-97fb-9878c2e8dca0)) (pad "20" smd rect (at -8.89 24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 73 "/AD-") (pinfunction "GPIO15") (pintype "bidirectional") (tstamp ceb13549-619e-4c67-87e9-8c82f39c2cbd)) (pad "21" thru_hole oval (at 8.89 24.13) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 19 "unconnected-(U1-GPIO16-Pad21)") (pinfunction "GPIO16") (pintype "bidirectional") (tstamp b7df0427-b0f3-4dce-aa9e-417906913686)) (pad "21" smd rect (at 8.89 24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 19 "unconnected-(U1-GPIO16-Pad21)") (pinfunction "GPIO16") (pintype "bidirectional") (tstamp 34dd2e79-7596-4d1a-af33-c4f17aa5a932)) (pad "22" thru_hole oval (at 8.89 21.59) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 20 "unconnected-(U1-GPIO17-Pad22)") (pinfunction "GPIO17") (pintype "bidirectional") (tstamp bb8b1c57-4708-4bed-a115-bf39c29c4b28)) (pad "22" smd rect (at 8.89 21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 20 "unconnected-(U1-GPIO17-Pad22)") (pinfunction "GPIO17") (pintype "bidirectional") (tstamp 1a83a139-6d07-4cd1-af7b-1bc42758e1ab)) (pad "23" thru_hole rect (at 8.89 19.05) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp ae97a339-b807-4be3-a870-f85f4a03f0d4)) (pad "23" smd rect (at 8.89 19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 88807669-4930-4416-a5f6-d9c5edba71e6)) (pad "24" thru_hole oval (at 8.89 16.51) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 21 "unconnected-(U1-GPIO18-Pad24)") (pinfunction "GPIO18") (pintype "bidirectional") (tstamp 322c60d1-3815-4b75-86e8-ba87b342c813)) (pad "24" smd rect (at 8.89 16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 21 "unconnected-(U1-GPIO18-Pad24)") (pinfunction "GPIO18") (pintype "bidirectional") (tstamp b6723b5a-72c7-4b17-868c-d8851501bf3f)) (pad "25" thru_hole oval (at 8.89 13.97) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 22 "unconnected-(U1-GPIO19-Pad25)") (pinfunction "GPIO19") (pintype "bidirectional") (tstamp f787dd3e-3efd-4b9d-ab72-8ef04db48c68)) (pad "25" smd rect (at 8.89 13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 22 "unconnected-(U1-GPIO19-Pad25)") (pinfunction "GPIO19") (pintype "bidirectional") (tstamp 53d72b9c-7fca-441a-a658-01a41385f58c)) (pad "26" thru_hole oval (at 8.89 11.43) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 17 "unconnected-(U1-GPIO20-Pad26)") (pinfunction "GPIO20") (pintype "bidirectional") (tstamp cf035f3d-29ec-4daf-89c3-349484fe0e6e)) (pad "26" smd rect (at 8.89 11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 17 "unconnected-(U1-GPIO20-Pad26)") (pinfunction "GPIO20") (pintype "bidirectional") (tstamp a6f73578-f524-42b3-ad5a-689764be87f1)) (pad "27" thru_hole oval (at 8.89 8.89) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 71 "unconnected-(U1-GPIO21-Pad27)") (pinfunction "GPIO21") (pintype "bidirectional") (tstamp 34704818-d0be-4260-b603-0df3a6b7d05d)) (pad "27" smd rect (at 8.89 8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 71 "unconnected-(U1-GPIO21-Pad27)") (pinfunction "GPIO21") (pintype "bidirectional") (tstamp f20937b5-d39d-49cf-b58a-adfc25bcbe93)) (pad "28" thru_hole rect (at 8.89 6.35) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 9ece6197-ba04-40bb-a252-ffd403a25f14)) (pad "28" smd rect (at 8.89 6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp e8bd0f1d-b865-457d-82a7-5a3bdc4eeed4)) (pad "29" thru_hole oval (at 8.89 3.81) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 24 "unconnected-(U1-GPIO22-Pad29)") (pinfunction "GPIO22") (pintype "bidirectional") (tstamp cc59b84c-dada-419c-90db-8c4f492ce6b4)) (pad "29" smd rect (at 8.89 3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 24 "unconnected-(U1-GPIO22-Pad29)") (pinfunction "GPIO22") (pintype "bidirectional") (tstamp 8a65d420-27e6-4a6a-b91a-92f636918bd6)) (pad "30" thru_hole oval (at 8.89 1.27) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 25 "unconnected-(U1-RUN-Pad30)") (pinfunction "RUN") (pintype "input") (tstamp e8b8ad1d-f492-42f2-9760-fbabcba54620)) (pad "30" smd rect (at 8.89 1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 25 "unconnected-(U1-RUN-Pad30)") (pinfunction "RUN") (pintype "input") (tstamp 5dcc1c40-45a4-489f-8aa6-8f5956366e17)) (pad "31" thru_hole oval (at 8.89 -1.27) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 32 "unconnected-(U1-GPIO26_ADC0-Pad31)") (pinfunction "GPIO26_ADC0") (pintype "bidirectional") (tstamp b067b145-57cb-4e4b-8ccd-62d80a955c39)) (pad "31" smd rect (at 8.89 -1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 32 "unconnected-(U1-GPIO26_ADC0-Pad31)") (pinfunction "GPIO26_ADC0") (pintype "bidirectional") (tstamp f674c147-9c6a-49b0-85f7-c907e975a268)) (pad "32" thru_hole oval (at 8.89 -3.81) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 38 "unconnected-(U1-GPIO27_ADC1-Pad32)") (pinfunction "GPIO27_ADC1") (pintype "bidirectional") (tstamp 1dce636f-8878-41ef-aad9-690398391f07)) (pad "32" smd rect (at 8.89 -3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 38 "unconnected-(U1-GPIO27_ADC1-Pad32)") (pinfunction "GPIO27_ADC1") (pintype "bidirectional") (tstamp 542b0a5c-5b1d-4759-bdef-56f72c9bd60e)) (pad "33" thru_hole rect (at 8.89 -6.35) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 26 "unconnected-(U1-AGND-Pad33)") (pinfunction "AGND") (pintype "power_in") (tstamp 1f4711f2-8b30-4ca7-a748-e50266363f2e)) (pad "33" smd rect (at 8.89 -6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 26 "unconnected-(U1-AGND-Pad33)") (pinfunction "AGND") (pintype "power_in") (tstamp 8e15b368-7046-4dca-8adf-331e853ee550)) (pad "34" thru_hole oval (at 8.89 -8.89) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 27 "unconnected-(U1-GPIO28_ADC2-Pad34)") (pinfunction "GPIO28_ADC2") (pintype "bidirectional") (tstamp 9e8a5c41-7892-409f-81b6-a0fb07f8cc2c)) (pad "34" smd rect (at 8.89 -8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 27 "unconnected-(U1-GPIO28_ADC2-Pad34)") (pinfunction "GPIO28_ADC2") (pintype "bidirectional") (tstamp 58b47447-9348-4d68-aae3-6ffe9ac12d90)) (pad "35" thru_hole oval (at 8.89 -11.43) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 28 "unconnected-(U1-ADC_VREF-Pad35)") (pinfunction "ADC_VREF") (pintype "power_in") (tstamp 8e66bd8f-c078-4b39-9826-f40ab0d81050)) (pad "35" smd rect (at 8.89 -11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 28 "unconnected-(U1-ADC_VREF-Pad35)") (pinfunction "ADC_VREF") (pintype "power_in") (tstamp c90eeac9-c0a5-46c9-8cfa-72e9e80839bc)) (pad "36" thru_hole oval (at 8.89 -13.97) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 6 "Net-(U1-3V3)") (pinfunction "3V3") (pintype "power_in") (tstamp 2dedb0fa-33af-4599-bcf7-c4dbc34f9185)) (pad "36" smd rect (at 8.89 -13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 6 "Net-(U1-3V3)") (pinfunction "3V3") (pintype "power_in") (tstamp 3da2809a-c6bc-4f4e-8305-3ffe2ce51544)) (pad "37" thru_hole oval (at 8.89 -16.51) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 29 "unconnected-(U1-3V3_EN-Pad37)") (pinfunction "3V3_EN") (pintype "input") (tstamp b64b25b5-c89e-4ec0-bcbe-37e44490ae83)) (pad "37" smd rect (at 8.89 -16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 29 "unconnected-(U1-3V3_EN-Pad37)") (pinfunction "3V3_EN") (pintype "input") (tstamp b2bd0d62-ea8f-4a86-b712-d1b31fc983d8)) (pad "38" thru_hole rect (at 8.89 -19.05) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "bidirectional") (zone_connect 2) (tstamp 3655c867-d1d2-4eb1-8275-23347a5da489)) (pad "38" smd rect (at 8.89 -19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "bidirectional") (zone_connect 2) (tstamp a28d44ae-c09d-49fd-b071-5fc20b170c2c)) (pad "39" thru_hole oval (at 8.89 -21.59) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 30 "unconnected-(U1-VSYS-Pad39)") (pinfunction "VSYS") (pintype "power_in") (tstamp d918812f-71a4-4ea0-9fa7-2bb5f2f9201e)) (pad "39" smd rect (at 8.89 -21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 30 "unconnected-(U1-VSYS-Pad39)") (pinfunction "VSYS") (pintype "power_in") (tstamp deccbc34-0276-4692-961d-9c9b970dcbf6)) (pad "40" thru_hole oval (at 8.89 -24.13) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 34 "VBUS1") (pinfunction "VBUS") (pintype "power_in") (tstamp 61b9b12c-f8d7-4147-ba41-8031f0123dc7)) (pad "40" smd rect (at 8.89 -24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 34 "VBUS1") (pinfunction "VBUS") (pintype "power_in") (tstamp a10187d8-04f7-4d40-b5ce-7adc0415b343)) (pad "41" thru_hole oval (at -2.54 23.9) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 5 "Net-(J3-Pin_3)") (pinfunction "SWCLK") (pintype "input") (tstamp 73a3af5d-138b-47e7-adfb-43039ae9c190)) (pad "41" smd rect (at -2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 5 "Net-(J3-Pin_3)") (pinfunction "SWCLK") (pintype "input") (tstamp e61e24f3-da23-4eb5-9438-7ad6483005c3)) (pad "42" thru_hole rect (at 0 23.9) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp c0deb61e-4f68-407f-96e1-118ab7263646)) (pad "42" smd rect (at 0 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 1e02b19f-f789-42d4-8836-3488e1580d57)) (pad "43" thru_hole oval (at 2.54 23.9) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 4 "Net-(J3-Pin_1)") (pinfunction "SWDIO") (pintype "bidirectional") (tstamp cb3d1539-748b-4eda-8e45-8caa1265df33)) (pad "43" smd rect (at 2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 4 "Net-(J3-Pin_1)") (pinfunction "SWDIO") (pintype "bidirectional") (tstamp 9eb12973-e352-49a0-a847-6abc95d7cfa0)) (model "/Users/hrvoje/Misc/Electronics/Library/RaspBerryPi Pico.step" (offset (xyz 0 25.5 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "MCU_RaspberryPi_and_Boards:RPi_Pico_SMD_TH" (layer "F.Cu") (tstamp 19a1c803-61f3-45d9-8a9c-86d3c151ef97) (at 48.885523 68.818249) (descr "Through hole straight pin header, 2x20, 2.54mm pitch, double rows") (tags "Through hole pin header THT 2x20 2.54mm double row") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (path "/cc3abbed-10c1-4aac-a096-50d15dfb6222") (attr through_hole) (fp_text reference "U2" (at 5.944477 26.531751) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 1cfda693-e98c-4e99-af0f-54a3f44f54b7) ) (fp_text value "Pico Secondary" (at 0 2.159) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp c7fa6c83-233f-44e6-b2bb-7da263d87b84) ) (fp_text user "3V3e" (at 13.204477 -16.898249 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 05430239-a11b-4164-88b1-6f144280e792) ) (fp_text user "GP12" (at -13.2 13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 063b206e-c564-4644-bace-c765ffd65445) ) (fp_text user "GP7" (at -12.7 -1.3 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 0f0832d6-e21e-4915-b96a-a3be7d568711) ) (fp_text user "GP2" (at -12.9 -16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 14c650b1-cdbf-4763-a0a4-fb067bee179c) ) (fp_text user "DP*" (at -13.1 21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 20d40fe2-8fb1-4968-9871-db6239324593) ) (fp_text user "RUN" (at 13 1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 24a46944-f079-4086-b4c4-bd9b1b79ae11) ) (fp_text user "GP21" (at 13.054 8.9 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 29284f2b-f43d-4b23-939a-e46a015ea927) ) (fp_text user "GP9" (at -12.8 3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 29d9a511-4e64-4ba7-bc9d-6aa638ab2048) ) (fp_text user " GND*" (at -13.135523 -6.098249 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 352be6c5-705f-4148-8733-203c86d8112c) ) (fp_text user "GP5" (at -12.8 -8.89 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 4270096d-5c3a-43da-805d-c81a06c9f689) ) (fp_text user "GP0" (at -12.8 -24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 50391ce4-d5e0-48b6-a7f1-fac900762eef) ) (fp_text user "GP1" (at -12.9 -21.6 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 51f2b22b-2587-49dc-a699-61ea273a4a86) ) (fp_text user "VSYS" (at 13.2 -21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 57d85cab-bf14-42f0-a4af-b222e243f8cf) ) (fp_text user "RX*" (at 13.054 21.59 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 5b8daede-d6fd-4c93-9590-de47f87fcb76) ) (fp_text user "GP18" (at 13.054 16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 5ee46aec-7caa-4602-a29c-be53ee3471ae) ) (fp_text user "GP19" (at 13.054 13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 602454cf-ab33-4d62-b40f-5de9fbb14475) ) (fp_text user "GP11" (at -13.2 11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 68008124-e624-47f4-8e95-e590e2f08b2f) ) (fp_text user "GP8" (at -12.8 1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 6a7dccf5-97d3-482d-ab38-fa659b661f6d) ) (fp_text user "TX*" (at 13.054 24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 6e75973a-946b-4f83-b39e-406cea0bb422) ) (fp_text user "GP20" (at 13.054 11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 7a59cb62-f827-4fae-8b4f-1c9deae248fa) ) (fp_text user "GP4" (at -12.8 -11.43 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 7df1c0f4-f5db-44b4-9f90-bc1bcb36dc15) ) (fp_text user " GND*" (at -13.305523 6.601751 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 7ea3566a-53ed-4d33-917c-724c21e82b3f) ) (fp_text user "GP6" (at -12.8 -3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 872106de-a17d-4b21-b6de-30316895ba9a) ) (fp_text user "GP27" (at 13.054 -3.8 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 8780d84a-a165-4c68-abc6-6d5d191f6cdd) ) (fp_text user " GND*" (at -13.135523 -18.788249 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 8ec32547-972a-4234-bb60-5442de88d1d5) ) (fp_text user "GP13" (at -13.054 16.51 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 945ba2d6-586a-4f96-b23d-d5dc92c3b114) ) (fp_text user "GP22" (at 13.054 3.81 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp 9eb847af-4c6b-490d-9c32-beb5bb7cc7e7) ) (fp_text user "DM*" (at -13.054 24.13 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp a59884b8-2998-4ca8-9cf5-2c0fe4f86cff) ) (fp_text user "GP10" (at -13.054 8.89 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp b40abe14-0a42-43ff-ab6b-66118f84b2dd) ) (fp_text user "VBUS*" (at 13.3 -24.2 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp cc10df8a-4fb5-4fa8-96d2-3271810d240d) ) (fp_text user "AVRF" (at 13.004477 -11.758249 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp d1b07eaf-6a63-42e8-8d40-a3f0a76a329a) ) (fp_text user " GND*" (at -13.285523 19.321751 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp d247c26d-9885-4be1-8c9b-72adf25eefef) ) (fp_text user "GP26" (at 13.054 -1.27 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp d441cdfc-b021-42b2-a9d6-bc4697a08058) ) (fp_text user "3V3*" (at 13.124477 -14.248249 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp e01aa3d4-2209-46f1-bc40-c257f9dbc28b) ) (fp_text user "GP28" (at 13.054 -9.144 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp e07911a4-593e-412a-8f80-306ae587db1e) ) (fp_text user "GP3" (at -12.8 -13.97 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp ecddc774-0e48-40a8-928c-2fe424af8cf5) ) (fp_text user "GND*" (at 13.094477 -19.158249 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp fd8fbfbd-c9a2-4f25-9021-5aca27c47541) ) (fp_text user "AGND" (at 13.054 -6.35 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp fef59293-29c5-46b2-b054-eed3abea7de5) ) (fp_text user " GND*" (at 12.8 19.05 45) (layer "F.SilkS") (effects (font (size 0.8 0.8) (thickness 0.15))) (tstamp ff4f0d67-f9e0-4670-b4d0-1b6634c834fd) ) (fp_text user "${REFERENCE}" (at 0 0 180) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 9986462c-1cd9-4fa7-9d07-4a8e0840e865) ) (fp_line (start -10.5 -25.5) (end -10.5 -25.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 53bf7f9b-b27c-4df6-97a8-82bff7c1aea4)) (fp_line (start -10.5 -25.5) (end 10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 769ecf19-67fe-4f62-92ab-22a5f7da81ec)) (fp_line (start -10.5 -23.1) (end -10.5 -22.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 8cc55652-4c01-4ee8-a043-734f8d124fec)) (fp_line (start -10.5 -22.833) (end -7.493 -22.833) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp f78b41b9-6773-40f5-a238-a34c68d60e68)) (fp_line (start -10.5 -20.5) (end -10.5 -20.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 43c2844a-578c-4022-99d1-6b05d82c4e54)) (fp_line (start -10.5 -18) (end -10.5 -17.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c7b50407-9bf4-4384-971e-ec5284dc7f41)) (fp_line (start -10.5 -15.4) (end -10.5 -15) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 8bb3fe9b-54ad-4863-960e-7471eb3a9070)) (fp_line (start -10.5 -12.9) (end -10.5 -12.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 713bdbde-5d01-420c-befc-0442fafe41a4)) (fp_line (start -10.5 -10.4) (end -10.5 -10) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp fd6f1eca-4a2a-41da-8403-5685e11e0f0c)) (fp_line (start -10.5 -7.8) (end -10.5 -7.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 52c264bb-c46e-4508-b8c2-7e66cd58d734)) (fp_line (start -10.5 -5.3) (end -10.5 -4.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1d76d097-24e6-46a2-9df4-b00f7a27ff82)) (fp_line (start -10.5 -2.7) (end -10.5 -2.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e361a23a-3e19-417a-b77c-00de4d352f18)) (fp_line (start -10.5 -0.2) (end -10.5 0.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 821ae1bb-4366-494f-bd6c-f95912404a3c)) (fp_line (start -10.5 2.3) (end -10.5 2.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4b4d1e98-c6d7-4c96-9668-9fe24aacc9f8)) (fp_line (start -10.5 4.9) (end -10.5 5.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 943cf82f-a610-4c8c-832c-1f6d9c921a54)) (fp_line (start -10.5 7.4) (end -10.5 7.8) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4f8a012b-c173-4891-9f30-75831b9d8311)) (fp_line (start -10.5 10) (end -10.5 10.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 98563b99-545f-4174-bbed-433b5b7e91b4)) (fp_line (start -10.5 12.5) (end -10.5 12.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 74ebf991-169a-4cca-ae9f-f0f2fade8975)) (fp_line (start -10.5 15.1) (end -10.5 15.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a7f60b7a-2e7b-4257-9705-271221018a83)) (fp_line (start -10.5 17.6) (end -10.5 18) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d1c164ec-c869-4857-8efe-3dafaba23756)) (fp_line (start -10.5 20.1) (end -10.5 20.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d8fcb26b-aa30-4e32-9210-6f28666789e8)) (fp_line (start -10.5 22.7) (end -10.5 23.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a8fd0a0f-a2bd-4209-b047-9ea9cebee3ae)) (fp_line (start -7.493 -22.833) (end -7.493 -25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 9f4938e8-2cca-4d23-990a-074519db12b7)) (fp_line (start -3.7 25.5) (end -10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 63aa9e14-d660-4e0e-adc1-96952f4980e6)) (fp_line (start -1.5 25.5) (end -1.1 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d184c711-51e9-4817-a595-54d9cda3c7d8)) (fp_line (start 1.1 25.5) (end 1.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3d6f22b4-023f-4ab2-ab25-56b4a5f795cd)) (fp_line (start 10.5 -25.5) (end 10.5 -25.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 19825619-75c7-434f-9ca2-e7cd20e1af05)) (fp_line (start 10.5 -23.1) (end 10.5 -22.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5c44bb6c-4d16-48aa-91e9-ccd6b003928c)) (fp_line (start 10.5 -20.5) (end 10.5 -20.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d89a06d6-3c96-4449-b818-2e55a01bd098)) (fp_line (start 10.5 -18) (end 10.5 -17.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2d5bdf80-a487-4044-8e37-1b95cf95d5d4)) (fp_line (start 10.5 -15.4) (end 10.5 -15) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp de9ed587-1d86-417a-8661-4ccee9d670a0)) (fp_line (start 10.5 -12.9) (end 10.5 -12.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 993216ab-95b1-4beb-adc2-99741b3a5f31)) (fp_line (start 10.5 -10.4) (end 10.5 -10) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2b07f204-937b-4b77-a0e3-4142d5c752d3)) (fp_line (start 10.5 -7.8) (end 10.5 -7.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 05feb80b-9bcd-4195-8c32-578d1277c8ce)) (fp_line (start 10.5 -5.3) (end 10.5 -4.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 12ee2c4f-4992-47b5-99f3-c923839caed2)) (fp_line (start 10.5 -2.7) (end 10.5 -2.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 12b99c05-7660-48db-8a5d-ab438827df2c)) (fp_line (start 10.5 -0.2) (end 10.5 0.2) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 48319146-ffe6-438d-9498-3b7c1e0d0fb1)) (fp_line (start 10.5 2.3) (end 10.5 2.7) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 55858689-98dd-4eb5-933b-bfacc1d45c41)) (fp_line (start 10.5 4.9) (end 10.5 5.3) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp da87b5d8-d2e9-480f-b5af-63b78f38e44e)) (fp_line (start 10.5 7.4) (end 10.5 7.8) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4f10cdbc-af44-4fea-97d4-81559e3bcf81)) (fp_line (start 10.5 10) (end 10.5 10.4) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7d188a20-0c02-4c9c-96d8-16344b25ae05)) (fp_line (start 10.5 12.5) (end 10.5 12.9) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d9634b56-91ea-4580-aa40-fbf5e83f5c8b)) (fp_line (start 10.5 15.1) (end 10.5 15.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 90de0043-4232-4d51-8cce-6738615ff6e4)) (fp_line (start 10.5 17.6) (end 10.5 18) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7bb71558-c2e2-4cfa-ab97-f70298c7aaf3)) (fp_line (start 10.5 20.1) (end 10.5 20.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1ec4bc62-52b6-45f5-8100-014185ef144c)) (fp_line (start 10.5 22.7) (end 10.5 23.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e6a07c58-401f-47f8-805f-f88291edd782)) (fp_line (start 10.5 25.5) (end 3.7 25.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3ff531e3-876f-4261-8cda-ab5cad159311)) (fp_poly (pts (xy -1.5 -16.5) (xy -3.5 -16.5) (xy -3.5 -18.5) (xy -1.5 -18.5) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp 14e97d84-943e-446a-a9a1-76cf73645ef4)) (fp_poly (pts (xy -1.5 -14) (xy -3.5 -14) (xy -3.5 -16) (xy -1.5 -16) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp bbdcc9da-118a-47f2-84e8-447f0478091b)) (fp_poly (pts (xy -1.5 -11.5) (xy -3.5 -11.5) (xy -3.5 -13.5) (xy -1.5 -13.5) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp bf43fe18-1d8d-465d-b304-b773c0db6d16)) (fp_poly (pts (xy 3.7 -20.2) (xy -3.7 -20.2) (xy -3.7 -24.9) (xy 3.7 -24.9) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "Dwgs.User") (tstamp 6dbcae30-e9f3-4b5f-8860-1c0f581b9728)) (fp_line (start -11 -26) (end 11 -26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp fd3726f5-d4ce-4be2-96fa-de4b74c875b9)) (fp_line (start -11 26) (end -11 -26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp 64728ba2-aceb-4562-8668-0db56421f8f7)) (fp_line (start 11 -26) (end 11 26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp 9bc88f66-cf88-4a0a-a042-e38c1e3716f1)) (fp_line (start 11 26) (end -11 26) (stroke (width 0.12) (type solid)) (layer "F.CrtYd") (tstamp e9816734-251b-4c93-9ebc-393400892b2e)) (fp_line (start -10.5 -25.5) (end 10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 04663c78-d009-4195-b5d6-54679a724d6d)) (fp_line (start -10.5 -24.2) (end -9.2 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 7517498e-aaad-4008-b8f4-83cbbe3872ac)) (fp_line (start -10.5 25.5) (end -10.5 -25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp 66834a5f-ff09-46a6-9c34-98e778aef440)) (fp_line (start 10.5 -25.5) (end 10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp b2036041-e616-4368-aeb1-81044914fda7)) (fp_line (start 10.5 25.5) (end -10.5 25.5) (stroke (width 0.12) (type solid)) (layer "F.Fab") (tstamp fac388ea-9c36-4773-86ff-6c6972fd9575)) (pad "" np_thru_hole oval (at -2.725 -24) (size 1.8 1.8) (drill 1.8) (layers "*.Cu" "*.Mask") (tstamp fb58f5ae-d0fd-41b1-a103-a860ad3d6111)) (pad "" np_thru_hole oval (at -2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers "*.Cu" "*.Mask") (tstamp 4964fba7-316e-4c5b-8fec-4731fbdce30f)) (pad "" np_thru_hole oval (at 2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers "*.Cu" "*.Mask") (tstamp c47d5582-90c4-4c64-b4be-f088026b0f78)) (pad "" np_thru_hole oval (at 2.725 -24) (size 1.8 1.8) (drill 1.8) (layers "*.Cu" "*.Mask") (tstamp 20d32c3b-5509-4a83-a658-cb664ff6ae3c)) (pad "1" thru_hole oval (at -8.89 -24.13) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 33 "unconnected-(U2-GPIO0-Pad1)") (pinfunction "GPIO0") (pintype "bidirectional") (tstamp ccedf3fb-8261-49f2-ab10-4775862a3503)) (pad "1" smd rect (at -8.89 -24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 33 "unconnected-(U2-GPIO0-Pad1)") (pinfunction "GPIO0") (pintype "bidirectional") (tstamp 0eec2f60-d8f8-491e-901c-cfa9cdc88b60)) (pad "2" thru_hole oval (at -8.89 -21.59) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 10 "unconnected-(U2-GPIO1-Pad2)") (pinfunction "GPIO1") (pintype "bidirectional") (tstamp 5207ccd3-ae82-412a-a3fb-7d528153bf16)) (pad "2" smd rect (at -8.89 -21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 10 "unconnected-(U2-GPIO1-Pad2)") (pinfunction "GPIO1") (pintype "bidirectional") (tstamp 1b945630-1b2e-4f2f-bd11-a9517c1c93d6)) (pad "3" thru_hole rect (at -8.89 -19.05) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 1431c8d4-b35f-4799-a061-4ee5bd306d04)) (pad "3" smd rect (at -8.89 -19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp d5cb60d4-c140-4c98-90a2-d567804cb6e6)) (pad "4" thru_hole oval (at -8.89 -16.51) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 72 "unconnected-(U2-GPIO2-Pad4)") (pinfunction "GPIO2") (pintype "bidirectional") (tstamp ece5cd7b-7d73-450b-965c-292497ab92b2)) (pad "4" smd rect (at -8.89 -16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 72 "unconnected-(U2-GPIO2-Pad4)") (pinfunction "GPIO2") (pintype "bidirectional") (tstamp 3675df44-e234-4b29-9469-de8eae01792d)) (pad "5" thru_hole oval (at -8.89 -13.97) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 35 "unconnected-(U2-GPIO3-Pad5)") (pinfunction "GPIO3") (pintype "bidirectional") (tstamp 8b10996e-d3e6-4f3a-a67f-309fd93f9f86)) (pad "5" smd rect (at -8.89 -13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 35 "unconnected-(U2-GPIO3-Pad5)") (pinfunction "GPIO3") (pintype "bidirectional") (tstamp 6bf66dfd-2ae1-4c1a-812b-f46cd6337533)) (pad "6" thru_hole oval (at -8.89 -11.43) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 36 "unconnected-(U2-GPIO4-Pad6)") (pinfunction "GPIO4") (pintype "bidirectional") (tstamp 0ea0e8b5-fac6-49e0-b34f-0b7451e4d202)) (pad "6" smd rect (at -8.89 -11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 36 "unconnected-(U2-GPIO4-Pad6)") (pinfunction "GPIO4") (pintype "bidirectional") (tstamp 03f2a1ba-bfff-4b67-9014-edf36fda3205)) (pad "7" thru_hole oval (at -8.89 -8.89) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 37 "unconnected-(U2-GPIO5-Pad7)") (pinfunction "GPIO5") (pintype "bidirectional") (tstamp 372eaa0f-b5cc-4d0f-8567-e7d0793c0a41)) (pad "7" smd rect (at -8.89 -8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 37 "unconnected-(U2-GPIO5-Pad7)") (pinfunction "GPIO5") (pintype "bidirectional") (tstamp 0ca2b5f4-f07f-413d-9dc9-28ce717e441d)) (pad "8" thru_hole rect (at -8.89 -6.35) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp fd021c8d-e42a-4ec9-8f63-21989e26fc91)) (pad "8" smd rect (at -8.89 -6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 627f2160-066d-46b1-987f-1007b04e315d)) (pad "9" thru_hole oval (at -8.89 -3.81) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 39 "unconnected-(U2-GPIO6-Pad9)") (pinfunction "GPIO6") (pintype "bidirectional") (tstamp bc6d04a1-4895-4dbe-856a-147d006b1ada)) (pad "9" smd rect (at -8.89 -3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 39 "unconnected-(U2-GPIO6-Pad9)") (pinfunction "GPIO6") (pintype "bidirectional") (tstamp 061de323-a8c5-4cd3-bc3a-6f158185fc8b)) (pad "10" thru_hole oval (at -8.89 -1.27) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 40 "unconnected-(U2-GPIO7-Pad10)") (pinfunction "GPIO7") (pintype "bidirectional") (tstamp 330b726b-f5a2-4266-8ce9-6795fb9cbf60)) (pad "10" smd rect (at -8.89 -1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 40 "unconnected-(U2-GPIO7-Pad10)") (pinfunction "GPIO7") (pintype "bidirectional") (tstamp 98c0a65f-9d42-484f-9ba3-ade92676ebb2)) (pad "11" thru_hole oval (at -8.89 1.27) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 41 "unconnected-(U2-GPIO8-Pad11)") (pinfunction "GPIO8") (pintype "bidirectional") (tstamp e4ef6000-dc23-45c2-a494-7b4781aeb7f4)) (pad "11" smd rect (at -8.89 1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 41 "unconnected-(U2-GPIO8-Pad11)") (pinfunction "GPIO8") (pintype "bidirectional") (tstamp 0b44c320-a603-4914-b294-b835a6cf2cf6)) (pad "12" thru_hole oval (at -8.89 3.81) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 60 "unconnected-(U2-GPIO9-Pad12)") (pinfunction "GPIO9") (pintype "bidirectional") (tstamp 8e250536-a02c-4028-bf06-e2a1d58ee284)) (pad "12" smd rect (at -8.89 3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 60 "unconnected-(U2-GPIO9-Pad12)") (pinfunction "GPIO9") (pintype "bidirectional") (tstamp 3b567fdc-293f-4292-860a-0b9020821adc)) (pad "13" thru_hole rect (at -8.89 6.35) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 943cccb3-0845-4b2f-ab48-32e72662296d)) (pad "13" smd rect (at -8.89 6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp b7b64a89-006f-4eba-9010-93cd4edf1980)) (pad "14" thru_hole oval (at -8.89 8.89) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 42 "unconnected-(U2-GPIO10-Pad14)") (pinfunction "GPIO10") (pintype "bidirectional") (tstamp ee9d5786-a308-471a-a55b-984cba8265e4)) (pad "14" smd rect (at -8.89 8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 42 "unconnected-(U2-GPIO10-Pad14)") (pinfunction "GPIO10") (pintype "bidirectional") (tstamp c0e104a3-3593-4c02-a105-2f7e38f833b3)) (pad "15" thru_hole oval (at -8.89 11.43) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 43 "unconnected-(U2-GPIO11-Pad15)") (pinfunction "GPIO11") (pintype "bidirectional") (tstamp 06a795d0-432c-4a18-b0a0-8cb6937e749e)) (pad "15" smd rect (at -8.89 11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 43 "unconnected-(U2-GPIO11-Pad15)") (pinfunction "GPIO11") (pintype "bidirectional") (tstamp 2eb33141-51de-482e-b703-82997a02723d)) (pad "16" thru_hole oval (at -8.89 13.97) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 44 "unconnected-(U2-GPIO12-Pad16)") (pinfunction "GPIO12") (pintype "bidirectional") (tstamp bd94b2b8-5172-4051-b7a8-d2caf0379b02)) (pad "16" smd rect (at -8.89 13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 44 "unconnected-(U2-GPIO12-Pad16)") (pinfunction "GPIO12") (pintype "bidirectional") (tstamp 993833b9-1e14-4882-8af9-22a0bd295887)) (pad "17" thru_hole oval (at -8.89 16.51) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 45 "unconnected-(U2-GPIO13-Pad17)") (pinfunction "GPIO13") (pintype "bidirectional") (tstamp 89df7d1b-2ca8-4121-9d2e-70111efebf13)) (pad "17" smd rect (at -8.89 16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 45 "unconnected-(U2-GPIO13-Pad17)") (pinfunction "GPIO13") (pintype "bidirectional") (tstamp 6377f87f-91c4-4489-b97b-60ca6f204d5e)) (pad "18" thru_hole rect (at -8.89 19.05) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 8b730123-a3eb-4e4f-81f7-3746371ec9ed)) (pad "18" smd rect (at -8.89 19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 54568743-6919-43c9-8734-34ac30665d64)) (pad "19" thru_hole oval (at -8.89 21.59) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 64 "Net-(U2-GPIO14)") (pinfunction "GPIO14") (pintype "bidirectional") (tstamp e384059b-f1da-4e47-9d34-8f06ce447d49)) (pad "19" smd rect (at -8.89 21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 64 "Net-(U2-GPIO14)") (pinfunction "GPIO14") (pintype "bidirectional") (tstamp d5310f94-8ad1-4dd2-8d05-ac379c0e7d57)) (pad "20" thru_hole oval (at -8.89 24.13) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 62 "Net-(U2-GPIO15)") (pinfunction "GPIO15") (pintype "bidirectional") (tstamp 1c9c30fd-bc22-454f-abfb-ed65947faf71)) (pad "20" smd rect (at -8.89 24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 62 "Net-(U2-GPIO15)") (pinfunction "GPIO15") (pintype "bidirectional") (tstamp 2e04c098-1cf1-482d-aa0e-177470f0de01)) (pad "21" thru_hole oval (at 8.89 24.13) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 67 "UART B TX") (pinfunction "GPIO16") (pintype "bidirectional") (tstamp 61a9d3cd-c4f5-4840-909d-4ba9057e37b6)) (pad "21" smd rect (at 8.89 24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 67 "UART B TX") (pinfunction "GPIO16") (pintype "bidirectional") (tstamp b84f24d1-271d-47bf-9373-aa65ba85c88d)) (pad "22" thru_hole oval (at 8.89 21.59) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 68 "UART B RX") (pinfunction "GPIO17") (pintype "bidirectional") (tstamp a86de882-e867-4536-ba49-d71e1e9347c9)) (pad "22" smd rect (at 8.89 21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 68 "UART B RX") (pinfunction "GPIO17") (pintype "bidirectional") (tstamp b8d5e2ce-1188-456b-a042-e8c43bf57c22)) (pad "23" thru_hole rect (at 8.89 19.05) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 4d69ab8d-d219-4bae-8f36-f89653e95964)) (pad "23" smd rect (at 8.89 19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 17d29a58-4b37-435d-91ab-46f4d78de125)) (pad "24" thru_hole oval (at 8.89 16.51) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 46 "unconnected-(U2-GPIO18-Pad24)") (pinfunction "GPIO18") (pintype "bidirectional") (tstamp 65631b5d-1998-4edd-812d-f5e7ca4c5eca)) (pad "24" smd rect (at 8.89 16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 46 "unconnected-(U2-GPIO18-Pad24)") (pinfunction "GPIO18") (pintype "bidirectional") (tstamp 226f007b-0a54-4279-86ec-b4d3f29a34a8)) (pad "25" thru_hole oval (at 8.89 13.97) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 47 "unconnected-(U2-GPIO19-Pad25)") (pinfunction "GPIO19") (pintype "bidirectional") (tstamp 1c2c1c4b-620a-4992-b8d6-0b37f6d1a5cb)) (pad "25" smd rect (at 8.89 13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 47 "unconnected-(U2-GPIO19-Pad25)") (pinfunction "GPIO19") (pintype "bidirectional") (tstamp e830c74f-8a1d-47e6-9ddb-cdd18cf42ba7)) (pad "26" thru_hole oval (at 8.89 11.43) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 48 "unconnected-(U2-GPIO20-Pad26)") (pinfunction "GPIO20") (pintype "bidirectional") (tstamp e5495c62-8b42-4361-82db-e70a5307d6d5)) (pad "26" smd rect (at 8.89 11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 48 "unconnected-(U2-GPIO20-Pad26)") (pinfunction "GPIO20") (pintype "bidirectional") (tstamp 9433cd5f-a2be-4ebc-81df-60292c79ffcf)) (pad "27" thru_hole oval (at 8.89 8.89) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 49 "unconnected-(U2-GPIO21-Pad27)") (pinfunction "GPIO21") (pintype "bidirectional") (tstamp 1a9f1aaf-58df-424c-a8f1-ff9309d1d4da)) (pad "27" smd rect (at 8.89 8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 49 "unconnected-(U2-GPIO21-Pad27)") (pinfunction "GPIO21") (pintype "bidirectional") (tstamp 68dce7a6-30e4-42ab-81dc-43906d6696a2)) (pad "28" thru_hole rect (at 8.89 6.35) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 4296fff9-eb9d-4006-abbe-a3188bc633ef)) (pad "28" smd rect (at 8.89 6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 03375882-3c16-4d4c-9ade-5e3d0cbf778e)) (pad "29" thru_hole oval (at 8.89 3.81) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 50 "unconnected-(U2-GPIO22-Pad29)") (pinfunction "GPIO22") (pintype "bidirectional") (tstamp fe423a19-3374-4aeb-9b2a-67241af517f8)) (pad "29" smd rect (at 8.89 3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 50 "unconnected-(U2-GPIO22-Pad29)") (pinfunction "GPIO22") (pintype "bidirectional") (tstamp 977cd6df-6995-4887-a8c4-3921ce3f3a08)) (pad "30" thru_hole oval (at 8.89 1.27) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 51 "unconnected-(U2-RUN-Pad30)") (pinfunction "RUN") (pintype "input") (tstamp 8bc7a2da-0849-4089-9777-0b134b5d2bf7)) (pad "30" smd rect (at 8.89 1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 51 "unconnected-(U2-RUN-Pad30)") (pinfunction "RUN") (pintype "input") (tstamp 8e9ac6a0-3db4-48cf-b655-7dd27dd51189)) (pad "31" thru_hole oval (at 8.89 -1.27) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 52 "unconnected-(U2-GPIO26_ADC0-Pad31)") (pinfunction "GPIO26_ADC0") (pintype "bidirectional") (tstamp 46ef68a9-518c-4b7d-a745-1d1bd86550ac)) (pad "31" smd rect (at 8.89 -1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 52 "unconnected-(U2-GPIO26_ADC0-Pad31)") (pinfunction "GPIO26_ADC0") (pintype "bidirectional") (tstamp 8668c99b-a766-4eab-80fa-0c733ebff5c3)) (pad "32" thru_hole oval (at 8.89 -3.81) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 53 "unconnected-(U2-GPIO27_ADC1-Pad32)") (pinfunction "GPIO27_ADC1") (pintype "bidirectional") (tstamp 8445f539-0a06-4de5-8922-52c2e13e68eb)) (pad "32" smd rect (at 8.89 -3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 53 "unconnected-(U2-GPIO27_ADC1-Pad32)") (pinfunction "GPIO27_ADC1") (pintype "bidirectional") (tstamp a146c1fe-56fb-4527-a246-a26ad36fed33)) (pad "33" thru_hole rect (at 8.89 -6.35) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 54 "unconnected-(U2-AGND-Pad33)") (pinfunction "AGND") (pintype "power_in") (tstamp f0f0ddfa-7632-4468-b101-ffd302493749)) (pad "33" smd rect (at 8.89 -6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 54 "unconnected-(U2-AGND-Pad33)") (pinfunction "AGND") (pintype "power_in") (tstamp b4ffcfa9-eefa-4711-86dc-bad1d71a391a)) (pad "34" thru_hole oval (at 8.89 -8.89) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 55 "unconnected-(U2-GPIO28_ADC2-Pad34)") (pinfunction "GPIO28_ADC2") (pintype "bidirectional") (tstamp f759371b-5e3a-4a0d-a187-227001bf3956)) (pad "34" smd rect (at 8.89 -8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 55 "unconnected-(U2-GPIO28_ADC2-Pad34)") (pinfunction "GPIO28_ADC2") (pintype "bidirectional") (tstamp 61bb7456-73c7-4600-b145-33cb19a4863d)) (pad "35" thru_hole oval (at 8.89 -11.43) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 56 "unconnected-(U2-ADC_VREF-Pad35)") (pinfunction "ADC_VREF") (pintype "power_in") (tstamp ae9af7a3-deb7-46fb-90ee-a28abe9e18a1)) (pad "35" smd rect (at 8.89 -11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 56 "unconnected-(U2-ADC_VREF-Pad35)") (pinfunction "ADC_VREF") (pintype "power_in") (tstamp 96d7fdb0-d875-4fc2-864d-401abfbdf06a)) (pad "36" thru_hole oval (at 8.89 -13.97) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 18 "3V3_BUS2") (pinfunction "3V3") (pintype "power_in") (tstamp 97d004a3-2182-4c96-888c-a622e03dcda0)) (pad "36" smd rect (at 8.89 -13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 18 "3V3_BUS2") (pinfunction "3V3") (pintype "power_in") (tstamp 9a3c40e3-d8b9-41e6-970b-88e52c2f18e6)) (pad "37" thru_hole oval (at 8.89 -16.51) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 57 "unconnected-(U2-3V3_EN-Pad37)") (pinfunction "3V3_EN") (pintype "input") (tstamp 9dc47ad3-cfd9-4733-a872-f6eb08ed7ef9)) (pad "37" smd rect (at 8.89 -16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 57 "unconnected-(U2-3V3_EN-Pad37)") (pinfunction "3V3_EN") (pintype "input") (tstamp d286fb1e-20c2-450c-ba49-6ac2fcbbab57)) (pad "38" thru_hole rect (at 8.89 -19.05) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "GND") (pintype "bidirectional") (zone_connect 2) (tstamp 4f28b80b-c80d-4f4b-ad09-df9193351ebb)) (pad "38" smd rect (at 8.89 -19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "bidirectional") (zone_connect 2) (tstamp dcfe2d4f-8a06-421d-af52-e00f7ffae8cc)) (pad "39" thru_hole oval (at 8.89 -21.59) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 58 "unconnected-(U2-VSYS-Pad39)") (pinfunction "VSYS") (pintype "power_in") (tstamp 8e022e57-2ba1-42b3-b85b-7b08ba872b2e)) (pad "39" smd rect (at 8.89 -21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 58 "unconnected-(U2-VSYS-Pad39)") (pinfunction "VSYS") (pintype "power_in") (tstamp d4254726-9005-4867-ae21-12075dbb7de4)) (pad "40" thru_hole oval (at 8.89 -24.13) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 31 "VBUS2") (pinfunction "VBUS") (pintype "power_in") (tstamp 26267190-b837-4cfd-a303-1b67e81bed02)) (pad "40" smd rect (at 8.89 -24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers "F.Cu" "F.Mask") (net 31 "VBUS2") (pinfunction "VBUS") (pintype "power_in") (tstamp 5dfaf372-8701-434b-ba11-553339068252)) (pad "41" thru_hole oval (at -2.54 23.9) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 3 "Net-(J2-Pin_3)") (pinfunction "SWCLK") (pintype "input") (tstamp 70d6bee8-c94d-4457-84de-7c13374797c1)) (pad "41" smd rect (at -2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 3 "Net-(J2-Pin_3)") (pinfunction "SWCLK") (pintype "input") (tstamp c65bb728-9e11-4846-81fc-736a30003d04)) (pad "42" thru_hole rect (at 0 23.9) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 045bb9a1-2add-437c-bbd1-f02adbd6a5c6)) (pad "42" smd rect (at 0 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp a59545d9-74ee-46a3-9f68-dca60297b2ea)) (pad "43" thru_hole oval (at 2.54 23.9) (size 1.7 1.7) (drill 1.02) (layers "*.Cu" "*.Mask") (net 2 "Net-(J2-Pin_1)") (pinfunction "SWDIO") (pintype "bidirectional") (tstamp 9e783c8d-f6e5-449d-9065-abb6752746df)) (pad "43" smd rect (at 2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers "F.Cu" "F.Mask") (net 2 "Net-(J2-Pin_1)") (pinfunction "SWDIO") (pintype "bidirectional") (tstamp 61ba1bfd-4723-4677-880f-96940c90a917)) (model "/Users/hrvoje/Misc/Electronics/Library/RaspBerryPi Pico.step" (offset (xyz 0 25.5 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Capacitor_SMD:C_0805_2012Metric" (layer "F.Cu") (tstamp 25cfbf74-2d77-4d4f-b5b6-edb0e48bc6fb) (at 71.374 74.93) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags "capacitor") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Unpolarized capacitor") (property "ki_keywords" "cap capacitor") (path "/3c58f69e-1b44-4a9e-8696-820df6d6d00b") (attr smd) (fp_text reference "C2" (at -1.778 -1.905) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 10694a26-ae70-4cb5-ae48-f77aab101c57) ) (fp_text value "100n" (at 0 1.68) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 6ac6e8f7-4971-4c92-bcf7-6e94fdc8285e) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") (effects (font (size 0.5 0.5) (thickness 0.08))) (tstamp ce35a258-821c-413d-8fc3-5350ce2a7c93) ) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ea35e297-7185-4ca8-94c2-5185283ee2d0)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1a75661d-f5a3-45f5-be03-d72eb7825187)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp ef3c6c4c-8a00-408d-84de-9c220650d7bb)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 647b4ce0-e742-4d8c-84b6-5bceb7fdbb88)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 0629d5dc-f991-4f94-9acf-90ee5e36dcd3)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 425997c9-d48a-445a-9cbd-db7e38508422)) (fp_line (start -1 -0.625) (end 1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp ab619d81-d1b9-4efa-8770-e250d8b9bbb6)) (fp_line (start -1 0.625) (end -1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 11952932-122b-41c1-9a27-83bf0b5d073e)) (fp_line (start 1 -0.625) (end 1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp c695f97e-509b-45b3-9562-ce4edc081067)) (fp_line (start 1 0.625) (end -1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 67498e28-10c4-4df0-942b-388c8abe4980)) (pad "1" smd roundrect (at -0.95 0) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 6 "Net-(U1-3V3)") (pintype "passive") (tstamp ab4c00b4-ecf5-4534-b459-a863bba5ab6a)) (pad "2" smd roundrect (at 0.95 0) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 61 "GND2") (pintype "passive") (tstamp 81ea4961-0416-4d3b-b806-45dc6f78dfea)) (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Connector_USB:USB_A_Molex_67643_Horizontal" (layer "F.Cu") (tstamp 2cfc9fc7-3505-4960-be5a-5e1f064ea836) (at 45.776 101.574) (descr "USB type A, Horizontal, https://www.molex.com/pdm_docs/sd/676433910_sd.pdf") (tags "USB_A Female Connector receptacle") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "USB Type A connector") (property "ki_keywords" "connector USB") (path "/e72b3351-45d9-41aa-8df7-943302db5ce3") (attr through_hole) (fp_text reference "J4" (at 3.6016 -3.53) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 18dfc54e-b5d3-4f59-ab98-35bd445b0f8b) ) (fp_text value "Mouse In" (at 3.5 14.5) (layer "F.Fab") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 406d1a2b-e2fb-4293-8533-431de2c10764) ) (fp_text user "${REFERENCE}" (at 3.5 3.7) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 65d1aae9-29b4-4503-89c4-0b9986809c9c) ) (fp_line (start -3.81 12.58) (end -3.81 13.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4d9f73f3-a180-4185-b614-db89044fe05c)) (fp_line (start -3.81 13.1) (end 10.81 13.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c6f5ffa8-3aad-408a-bb53-a645fb00dfc6)) (fp_line (start -3.16 -2.38) (end -3.16 0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e3b766c9-8a71-41b3-b613-c468088c9733)) (fp_line (start -3.16 -2.38) (end 10.16 -2.38) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b8153ea8-05a1-4cee-b2a1-8d53530e834f)) (fp_line (start -3.16 12.58) (end -3.81 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2e966f92-394d-4f4b-9e2a-af2eb0e4d997)) (fp_line (start -3.16 12.58) (end -3.16 4.47) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp caa91de3-9d0b-42ef-96a1-f6a77c8458e5)) (fp_line (start -0.9 -2.6) (end 0.9 -2.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b9e50008-355d-4bde-866b-70fe6acc9068)) (fp_line (start 10.16 -2.38) (end 10.16 0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c5d62167-6095-446c-a946-9120100a6a1b)) (fp_line (start 10.16 4.47) (end 10.16 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b0948b23-ae83-4713-885c-72a4e14c7b73)) (fp_line (start 10.81 12.58) (end 10.16 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d5c230e3-40e7-4145-a327-350301e38560)) (fp_line (start 10.81 13.1) (end 10.81 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a7493b8f-ed0b-43bd-a6c0-40ee83327a51)) (fp_line (start -4.2 12.19) (end -3.55 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 46ecb198-4698-4974-8d13-97d4f8c42d50)) (fp_line (start -4.2 13.49) (end -4.2 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 513c9e29-fedc-402f-9241-c891019896eb)) (fp_line (start -4.2 13.49) (end 11.2 13.49) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 599cc9dd-c44f-43b9-ac37-2b6e427bc683)) (fp_line (start -3.55 -2.77) (end -3.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp e676aa78-9a1c-4e03-ac50-5c36883046c0)) (fp_line (start -3.55 -2.77) (end 10.55 -2.77) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 98ba33bb-405f-40a7-9077-7c4991c4646b)) (fp_line (start -3.55 12.19) (end -3.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp c660e596-f187-4706-87e0-c6cfde6d2a8e)) (fp_line (start 10.55 -2.77) (end 10.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp e50675b5-f419-4a41-a87e-d4978441d0ff)) (fp_line (start 10.55 12.19) (end 10.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 87e6736f-24ed-4914-8406-68f82e64f991)) (fp_line (start 11.2 12.19) (end 10.55 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 77063c2b-cc3e-42e2-8626-9e927b33e8d1)) (fp_line (start 11.2 13.49) (end 11.2 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 198214a3-c962-4f1c-b391-255ae62f0f71)) (fp_arc (start -3.55 4.66) (mid -5.078208 2.71) (end -3.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp d7e91c72-6933-4270-85ea-ce43578869a8)) (fp_arc (start 10.55 0.76) (mid 12.078208 2.71) (end 10.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 99a2b3e5-ecc6-48e2-8a9f-b873fdd25b55)) (fp_line (start -3.7 12.69) (end -3.7 12.99) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 8daebb05-9f00-4ce5-8f6e-795192422aa1)) (fp_line (start -3.7 12.99) (end 10.7 12.99) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 1d2358ae-58aa-4926-b2fe-41f9c24b4d39)) (fp_line (start -3.05 -2.27) (end 10.05 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 0208bd60-6f8e-4c9c-b7ed-8f439c11b1d4)) (fp_line (start -3.05 9.27) (end 10.05 9.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp d313ba07-d107-44f6-9f3c-52c044ab5226)) (fp_line (start -3.05 12.69) (end -3.7 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b87612c1-e58e-49cd-a020-8bb71003745c)) (fp_line (start -3.05 12.69) (end -3.05 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b8618599-82c5-45c6-ab94-86eb49ec1e78)) (fp_line (start -1 -2.27) (end 0 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 4f5546dd-b568-4e0f-9e03-d84fbb151925)) (fp_line (start 0 -1.27) (end 1 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 77c8b922-f341-41dc-adfd-5be66d985e0e)) (fp_line (start 10.05 -2.27) (end 10.05 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 30256a3f-26b3-4819-a96a-1068f78261f2)) (fp_line (start 10.7 12.69) (end 10.05 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 49240dd6-d222-4f04-b424-14d562753db7)) (fp_line (start 10.7 12.99) (end 10.7 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp af84d01f-d41c-41aa-b893-71ea4a8e9052)) (pad "1" thru_hole rect (at 0 0) (size 1.6 1.5) (drill 0.95) (layers "*.Cu" "*.Mask") (net 31 "VBUS2") (pinfunction "VBUS") (pintype "power_in") (tstamp f1ac86ee-d2ca-49ca-8170-cb9ddc730178)) (pad "2" thru_hole circle (at 2.5 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 76 "OB-") (pinfunction "D-") (pintype "bidirectional") (tstamp 34d6fc0e-ce44-48ec-8a72-d38143b40300)) (pad "3" thru_hole circle (at 4.5 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 77 "OB+") (pinfunction "D+") (pintype "bidirectional") (tstamp c8797a4b-dc75-451a-8b91-5c5d526dbe54)) (pad "4" thru_hole circle (at 7 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 435b2837-fd47-430d-9c96-84b3a6043326)) (pad "5" thru_hole circle (at -3.07 2.71) (size 3 3) (drill 2.3) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "Shield") (pintype "passive") (tstamp fc4de2cc-dc60-425d-80b7-83f90197aa43)) (pad "5" thru_hole circle (at 10.07 2.71) (size 3 3) (drill 2.3) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "Shield") (pintype "passive") (tstamp 5851ba89-91a5-4146-ad41-1446461c8383)) (model "/Users/hrvoje/Misc/Electronics/Molex 676432911.stp" (offset (xyz 3.5 2.2 0)) (scale (xyz 1 1 1)) (rotate (xyz -90 0 0)) ) ) (footprint "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (layer "F.Cu") (tstamp 2ea228c0-45b8-4d36-ad1f-d021577af8d2) (at 95.667537 99.795757) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)") (property "ki_keywords" "connector") (path "/519499fb-6bca-4c43-b4dd-759210adcf79") (attr through_hole) (fp_text reference "J3" (at 0 -2.33) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 8ad1cb78-ec97-42d7-bea2-8f4007871550) ) (fp_text value "Debug1" (at 0 7.41) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 7d619b0e-26ec-412b-94b3-c1a1bf945f8c) ) (fp_text user "${REFERENCE}" (at 0 2.54 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp b4fdaf2f-5a07-49a2-a76b-91dbe95ff256) ) (fp_line (start -1.33 -1.33) (end 0 -1.33) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7780fea2-b9a0-43a6-83a8-beccfb99694c)) (fp_line (start -1.33 0) (end -1.33 -1.33) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 62749358-1031-4256-b873-eb2488b519a6)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5bb9a329-70a9-4d77-a8a1-00dcf9d7a555)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d55db37c-51d0-475d-a8a1-8cdea38c9307)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 58fcb94d-1b24-4f75-b688-bfba88eb11f3)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d1dbe7a2-dc1d-48cf-ae9f-a418b5f3a88f)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 2fe7b897-f351-432d-8598-dc30971012bc)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 4d56d7ed-69aa-47ee-81d1-b9ad15795c13)) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1bc8a487-ade2-4d04-a5a2-241e7c6375be)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp fc4bbb61-8343-42b0-84a3-c03e284b06cd)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp bb421ffe-0112-435a-838b-f2fce1c1b26a)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 97ccb9a2-4b02-45f9-9036-eac6036a4baf)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 497c38ec-5277-43e7-8a13-d52ae6db5cfb)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 0cf694bf-37e0-4ceb-a6bd-b335ff12f8af)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 9096b13a-93d9-4f4d-9717-7a5f7502d0dd)) (pad "1" thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 4 "Net-(J3-Pin_1)") (pinfunction "Pin_1") (pintype "passive") (tstamp 733016d8-a96f-482c-a633-a0ca47baa77b)) (pad "2" thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "Pin_2") (pintype "passive") (zone_connect 2) (tstamp ac9d8d47-9aff-46f3-8408-676619123da9)) (pad "3" thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 5 "Net-(J3-Pin_3)") (pinfunction "Pin_3") (pintype "passive") (tstamp c02fc6db-5138-4cfd-94e5-5ebaa55401a1)) (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Capacitor_SMD:C_0805_2012Metric" (layer "F.Cu") (tstamp 37f1ecb4-23f0-4fa1-8ba0-e16fb9efe2d9) (at 74.168 102.87 -90) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags "capacitor") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Unpolarized capacitor, small symbol") (property "ki_keywords" "capacitor cap") (path "/68c87fd8-9084-4121-8c05-2543bb307f35") (attr smd) (fp_text reference "C4" (at 0.127 2.032 -180) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 7dd8355d-bea2-4491-a34d-f59bade14181) ) (fp_text value "4.7uF" (at 0 1.68 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 21d7551e-003a-477d-aec0-28cf14f5d9ae) ) (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab") (effects (font (size 0.5 0.5) (thickness 0.08))) (tstamp adf364ad-ceae-478b-96a4-cb0771e87eb5) ) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4d08d9a0-8124-4670-a3b7-c3deb3eb7120)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 0963603a-bdc8-4dc7-b9a3-08618e099a03)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 5f85fafe-8af3-4a80-8e15-4dcd0282ad44)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 5ec761fe-f6f7-4024-a05a-9e299050b382)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 6ba258f5-eb98-462e-9ed7-fcb8918154b0)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 0d6490c6-b0bd-4569-8ea6-ec6e6c287bea)) (fp_line (start -1 -0.625) (end 1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp d2736842-6fb4-4bf1-aa14-3f8b4a7862b9)) (fp_line (start -1 0.625) (end -1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp e96f0e4e-cd23-4220-9347-2e96ee89e1b9)) (fp_line (start 1 -0.625) (end 1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 95fdeb2c-c45e-4286-a744-a55fa4f46715)) (fp_line (start 1 0.625) (end -1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 5cd3c7db-dfb1-440f-8ec7-b6c8e054ed04)) (pad "1" smd roundrect (at -0.95 0 270) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 34 "VBUS1") (pintype "passive") (tstamp f0261a71-71b1-48a7-9de8-872fae55a541)) (pad "2" smd roundrect (at 0.95 0 270) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 61 "GND2") (pintype "passive") (tstamp 8c4afa3f-d24e-4ac1-bdf2-c75ebb622d22)) (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Library:TPD4E1U06DBVR" (layer "F.Cu") (tstamp 38c68c5f-5977-448e-8ed0-d70962d9710a) (at 79.806536 96.76 90) (descr "TPD4E1U06DBVR, 15V (Typ) 3A (8/20us) 5.5V (Max) 6.5V Unidirectional SOT-23-6 ESD Protection Devices ROHS") (tags "15V (Typ) 3A (8/20us) 5.5V (Max) 6.5V Unidirectional SOT-23-6 ESD Protection Devices ROHS, Circuit Protection, ESD Protection Devices") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (path "/48b9125f-6a3b-441e-8c3e-7a147ebd5b49") (attr through_hole) (fp_text reference "U3" (at -0.262252 2.824372 180) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 46b1daa8-09a2-4b33-88e9-ea9112c56280) ) (fp_text value "TPD4E1U06DBVR" (at 0 3.550013 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 94f06326-e4a0-4df9-83f3-df4447ed7a00) ) (fp_text user "REF**" (at 0 5.550013 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 97ef643e-d704-4014-9332-e54d1e86a8b3) ) (fp_line (start -0.9 -1.550013) (end 0.900025 -1.550013) (stroke (width 0.254) (type solid)) (layer "F.SilkS") (tstamp bc6d2460-7c8d-4624-bb55-c11cb07e769d)) (fp_line (start -0.9 1.550013) (end 0.900025 1.550013) (stroke (width 0.254) (type solid)) (layer "F.SilkS") (tstamp 2fdd357c-83cb-41e9-8c8f-2987055fb5c7)) (fp_circle (center 1.397003 1.650902) (end 1.524003 1.650902) (stroke (width 0.254) (type solid)) (fill none) (layer "F.SilkS") (tstamp b3751df3-a272-49f8-a361-115c9b6b3abf)) (fp_circle (center 1.400025 1.434976) (end 1.430023 1.434976) (stroke (width 0.059995) (type solid)) (fill none) (layer "F.SilkS") (tstamp 489a9d12-f8e2-4aa2-9e6e-8c33e58fcce2)) (fp_circle (center 1.400051 0.94986) (end 1.500127 0.94986) (stroke (width 0.2) (type solid)) (fill none) (layer "F.Fab") (tstamp 7009ee48-0f1a-4d54-ac6b-a0d3d6c509f7)) (pad "1" smd rect (at 1.400051 0.94986 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 75 "OA+") (pinfunction "D1+") (pintype "bidirectional") (tstamp fe09f575-c65f-4669-a70a-9487f1519ee9)) (pad "2" smd rect (at 1.400051 -0.000102 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp cde8c416-b19d-4850-878a-7c3d13dbd562)) (pad "3" smd rect (at 1.400051 -0.950064 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 75 "OA+") (pinfunction "D2+") (pintype "bidirectional") (tstamp 0e14e6a2-ec12-434a-ae5e-473983946b54)) (pad "4" smd rect (at -1.400051 -0.950064 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 74 "OA-") (pinfunction "D2-") (pintype "bidirectional") (tstamp 69e9121b-1be8-4487-aed0-c1ef220e3328)) (pad "5" smd rect (at -1.400051 -0.000102 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 69 "unconnected-(U3-NC-Pad5)") (pinfunction "NC") (pintype "no_connect") (tstamp f860daaf-98c4-4064-b301-3c5b1cf6b18d)) (pad "6" smd rect (at -1.400051 0.94986 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 74 "OA-") (pinfunction "D1-") (pintype "bidirectional") (tstamp a311aa80-d947-494b-a1e7-1bd257a5ecf2)) (model "/Users/hrvoje/Misc/Electronics/Library/TPD4E1U06DBVR.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 -180)) ) ) (footprint "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopBottom" (layer "F.Cu") (tstamp 6ce853db-9930-415c-909c-edc609471e10) (at 96.774 111.506) (descr "Mounting Hole 2.7mm, M2.5") (tags "mounting hole 2.7mm m2.5") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Mounting Hole with connection") (property "ki_keywords" "mounting hole") (path "/1c8614e8-4d82-4d74-b1f8-1b1a1ec90a13") (zone_connect 2) (attr exclude_from_pos_files) (fp_text reference "H2" (at 0 -3.7) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 0e0f60d6-13b4-40da-b7ee-3433df1fce43) ) (fp_text value "MountingHole_Pad" (at 0 3.7) (layer "F.Fab") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp dd88ba04-246c-49f1-9f18-3b1ce040b8a0) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp a3113c03-654d-4676-87b9-bbfba4d9ee26) ) (fp_circle (center 0 0) (end 2.7 0) (stroke (width 0.15) (type solid)) (fill none) (layer "Cmts.User") (tstamp 273851b9-d155-4899-ba89-701a993fa274)) (fp_circle (center 0 0) (end 2.95 0) (stroke (width 0.05) (type solid)) (fill none) (layer "F.CrtYd") (tstamp 89bce21c-c0da-479b-985f-e4d4dbb899dc)) (pad "1" thru_hole circle (at 0 0) (size 3.1 3.1) (drill 2.7) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "1") (pintype "input") (tstamp b6dff91c-3eae-44aa-a875-1f014aaa08cb)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "1") (pintype "input") (zone_connect 2) (tstamp 28a650b0-b302-4440-9944-5b2652c82335)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "B.Cu" "B.Mask") (net 61 "GND2") (pinfunction "1") (pintype "input") (tstamp a60bbf74-fc03-4611-9f13-75d7e055df20)) ) (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") (tstamp 7425ddf6-e944-458b-8735-f0f744ac8a93) (at 37.846 97.028 -90) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags "resistor") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Resistor, small symbol") (property "ki_keywords" "R resistor") (path "/3865e1e3-42fd-4f0e-a588-f3a96ebd4314") (attr smd) (fp_text reference "R3" (at 2.560146 0.020147) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 342cb9ec-a5dc-4311-9de5-0281f4075e2a) ) (fp_text value "27" (at 0 1.65 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 32b6738d-5009-485d-8bb7-ddb1c1e2b7ca) ) (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab") (effects (font (size 0.5 0.5) (thickness 0.08))) (tstamp 4f037264-d360-49a0-842c-8e147b9176fe) ) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d35f0bfd-6fa2-4402-a585-5354e530f1bd)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c755d988-7657-445a-88b5-4d2c33fee247)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp df5259d7-4e86-465f-a9db-9614f709ab7c)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 839b83f8-3d18-4459-a12c-e2af2b8fe2b7)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp e70f053e-bd46-4b18-be4f-82a965a7af84)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp ae08a46b-2c3b-4320-94f8-aad7cceb129a)) (fp_line (start -1 -0.625) (end 1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 4188d22a-0926-4f30-80c7-aacee91b574e)) (fp_line (start -1 0.625) (end -1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a8718ce5-6fc0-4592-8db6-604d10f68b0f)) (fp_line (start 1 -0.625) (end 1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 104aa38e-d712-4f26-8b37-828174d91f19)) (fp_line (start 1 0.625) (end -1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 8f8188e4-4c72-470e-8315-f641904b7b14)) (pad "1" smd roundrect (at -0.9125 0 270) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902439) (net 62 "Net-(U2-GPIO15)") (pintype "passive") (tstamp 0ee88245-f6d7-4f39-9a17-057a95c8dd41)) (pad "2" smd roundrect (at 0.9125 0 270) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902439) (net 76 "OB-") (pintype "passive") (tstamp 9dc53f82-1c9d-4d9b-a1ad-7e946da7d4a3)) (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") (tstamp 8dc93492-d371-41c9-9a05-92343f3dbd88) (at 76.4032 96.774 -90) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags "resistor") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Resistor, small symbol") (property "ki_keywords" "R resistor") (path "/6cf27072-01e7-4eae-9cf7-3e057b9c44eb") (attr smd) (fp_text reference "R2" (at 2.580293 -0.00319 -180) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 96e94f22-767d-4849-a2c6-b13e499cc24d) ) (fp_text value "27" (at 0 1.65 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 14095e00-4243-455b-a8a0-4d5d316bd12c) ) (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab") (effects (font (size 0.5 0.5) (thickness 0.08))) (tstamp 5e51ef67-1961-4dbc-84df-174ea4c274fd) ) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 81c3bdab-035b-4817-ac4f-efa9c1c62394)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e40a3e18-27c3-4354-8b40-05d70635f150)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 80234d4a-87f6-4e0a-a8fb-aad188926923)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 7f87d0ce-f372-41a0-9bcd-93beac8022a9)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 32122b7d-d842-471d-8058-655ff4e95d64)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp a3029458-4f1f-4a61-98a7-d2ae0f6712c7)) (fp_line (start -1 -0.625) (end 1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7f2c6943-f0b6-4d25-b9b6-d2061476316f)) (fp_line (start -1 0.625) (end -1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 118136b0-5a85-4985-8b9b-539a627b9f4d)) (fp_line (start 1 -0.625) (end 1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 424d872c-2754-4cb4-be77-afb3e3a3c773)) (fp_line (start 1 0.625) (end -1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 6b02cfe8-3289-48d7-86a7-3d351f267e3e)) (pad "1" smd roundrect (at -0.9125 0 270) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902439) (net 59 "/AD+") (pintype "passive") (tstamp d5ba1e63-04e9-40fa-928a-f7e83efbd21b)) (pad "2" smd roundrect (at 0.9125 0 270) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902439) (net 75 "OA+") (pintype "passive") (tstamp d271445f-0c42-4ba1-b350-928a28b79afb)) (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Connector_USB:USB_A_Molex_67643_Horizontal" (layer "F.Cu") (tstamp 90b4ab32-d9f6-4d15-b605-01b0b687c666) (at 81.082 101.574) (descr "USB type A, Horizontal, https://www.molex.com/pdm_docs/sd/676433910_sd.pdf") (tags "USB_A Female Connector receptacle") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "USB Type A connector") (property "ki_keywords" "connector USB") (path "/06ca7a46-083a-44e4-bd6d-8226f9b9eca9") (attr through_hole) (fp_text reference "J1" (at 3.627 -3.276) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 970ea3ff-72b1-457d-b4bd-1dd0112e732d) ) (fp_text value "Keyboard In" (at 3.5 14.5) (layer "F.Fab") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp ad7067bd-852b-42f1-b9d1-c285a33262aa) ) (fp_text user "${REFERENCE}" (at 3.212 11.456) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 10203c1c-7cd9-4e37-a1e4-a53345e68560) ) (fp_line (start -3.81 12.58) (end -3.81 13.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp bc555d36-9c31-4983-af71-5b479ff47aa5)) (fp_line (start -3.81 13.1) (end 10.81 13.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 81fb9dc2-389f-4ebe-a0de-c2853dd946f1)) (fp_line (start -3.16 -2.38) (end -3.16 0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6e06c575-388e-423f-82c8-12d9697e326b)) (fp_line (start -3.16 -2.38) (end 10.16 -2.38) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 67d737c0-79e4-4aa7-962f-a2bc3bd19eeb)) (fp_line (start -3.16 12.58) (end -3.81 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 45901407-1731-45cd-a58b-1d71c8e97abb)) (fp_line (start -3.16 12.58) (end -3.16 4.47) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 06065b41-399d-4a0b-bd5a-4fe0cd72e599)) (fp_line (start -0.9 -2.6) (end 0.9 -2.6) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ee28fd2e-07df-4854-85fa-ce39c27d4887)) (fp_line (start 10.16 -2.38) (end 10.16 0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ee5b1c25-cf98-4c56-ae61-4f713ff22b1f)) (fp_line (start 10.16 4.47) (end 10.16 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 29c61737-83e4-47ea-bb82-f8689c20ab05)) (fp_line (start 10.81 12.58) (end 10.16 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp cf71e222-7377-4a67-b875-774ebcc0a195)) (fp_line (start 10.81 13.1) (end 10.81 12.58) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3ecfe47a-7cba-42d5-99c2-103860aaabdf)) (fp_line (start -4.2 12.19) (end -3.55 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 50058a12-1774-4945-82a1-286438d09205)) (fp_line (start -4.2 13.49) (end -4.2 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 66487a45-0947-4fcf-aa48-36ed366293b5)) (fp_line (start -4.2 13.49) (end 11.2 13.49) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 54604a26-15fd-485e-be63-c160d75fd193)) (fp_line (start -3.55 -2.77) (end -3.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 54462c45-ddb5-42b7-ad1d-f03e4fc5353d)) (fp_line (start -3.55 -2.77) (end 10.55 -2.77) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp c3c6e059-12a4-41d6-9a24-85b86a743326)) (fp_line (start -3.55 12.19) (end -3.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 5b635db7-701e-426e-87e3-89d3af7d536f)) (fp_line (start 10.55 -2.77) (end 10.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 035f5879-f97e-41d7-8441-15a96a42be85)) (fp_line (start 10.55 12.19) (end 10.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 8ba988f4-5b5e-40fc-afc3-6e37d993ee5d)) (fp_line (start 11.2 12.19) (end 10.55 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1274211b-c7ca-4195-b216-4659387ecc2d)) (fp_line (start 11.2 13.49) (end 11.2 12.19) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp aa6cacd6-a10f-42b9-bd9d-52e922193e9c)) (fp_arc (start -3.55 4.66) (mid -5.078208 2.71) (end -3.55 0.76) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 04b304ca-1625-4d3f-81de-620a0166d469)) (fp_arc (start 10.55 0.76) (mid 12.078208 2.71) (end 10.55 4.66) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 6dcd9bd1-e6a4-4899-9172-54e1597bff11)) (fp_line (start -3.7 12.69) (end -3.7 12.99) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 27f1dc6f-b57b-41cf-a2dc-d3eaf44fc75b)) (fp_line (start -3.7 12.99) (end 10.7 12.99) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b89f3404-444a-4a20-bd61-f3a1441c9e88)) (fp_line (start -3.05 -2.27) (end 10.05 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp e6a39088-8980-4b71-973b-51210ab3fdd6)) (fp_line (start -3.05 9.27) (end 10.05 9.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7f4f5b9f-34ff-4e16-825b-a2594d9babf4)) (fp_line (start -3.05 12.69) (end -3.7 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 3979d1fb-7017-40e0-8fa6-476be951a3a8)) (fp_line (start -3.05 12.69) (end -3.05 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2eb849bc-f30a-43ae-967d-dc154d813217)) (fp_line (start -1 -2.27) (end 0 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2040845f-ecd1-4504-a642-b150c0f9e6e0)) (fp_line (start 0 -1.27) (end 1 -2.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a195412a-986c-4ea4-879b-c565e67240bb)) (fp_line (start 10.05 -2.27) (end 10.05 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 67581ebe-6386-4283-9b90-009cf4b82103)) (fp_line (start 10.7 12.69) (end 10.05 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 3576dd78-9e0c-4a14-8eaa-6d32513df844)) (fp_line (start 10.7 12.99) (end 10.7 12.69) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2dc084d1-5244-43f8-b2c7-6848ea3e9e8f)) (pad "1" thru_hole rect (at 0 0) (size 1.6 1.5) (drill 0.95) (layers "*.Cu" "*.Mask") (net 34 "VBUS1") (pinfunction "VBUS") (pintype "power_in") (tstamp 15441569-5fff-4e55-ba43-c5219f735cb7)) (pad "2" thru_hole circle (at 2.5 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 74 "OA-") (pinfunction "D-") (pintype "bidirectional") (tstamp edc311f3-ced0-4643-abef-819ae0817167)) (pad "3" thru_hole circle (at 4.5 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 75 "OA+") (pinfunction "D+") (pintype "bidirectional") (tstamp da8ec577-c260-4681-aca9-c2ee0d61a9d8)) (pad "4" thru_hole circle (at 7 0) (size 1.6 1.6) (drill 0.95) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "GND") (pintype "power_in") (tstamp 5797bf27-fbee-4ecf-a050-b4c274738b70)) (pad "5" thru_hole circle (at -3.07 2.71) (size 3 3) (drill 2.3) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "Shield") (pintype "passive") (tstamp 33d0ba86-10e0-44c9-b651-b415592b8a1b)) (pad "5" thru_hole circle (at 10.07 2.71) (size 3 3) (drill 2.3) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "Shield") (pintype "passive") (tstamp 2476fced-aabc-4aac-9c8e-b5c4741258e4)) (model "/Users/hrvoje/Misc/Electronics/Molex 676432911.stp" (offset (xyz 3.5 2.2 0)) (scale (xyz 1 1 1)) (rotate (xyz -90 0 0)) ) ) (footprint "Library:TPD4E1U06DBVR" (layer "F.Cu") (tstamp 923600a8-420a-44ac-aaf2-10c0b26db2ed) (at 43.47 96.77 90) (descr "TPD4E1U06DBVR, 15V (Typ) 3A (8/20us) 5.5V (Max) 6.5V Unidirectional SOT-23-6 ESD Protection Devices ROHS") (tags "15V (Typ) 3A (8/20us) 5.5V (Max) 6.5V Unidirectional SOT-23-6 ESD Protection Devices ROHS, Circuit Protection, ESD Protection Devices") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (path "/2ff281c6-8c0c-4213-b04a-ae8a6bbc1264") (attr through_hole) (fp_text reference "U5" (at -0.162766 2.900038 180) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 88d59a85-5bdc-4c83-bba8-f8fdb095b9a5) ) (fp_text value "TPD4E1U06DBVR" (at 0 3.550013 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp ea284cbe-8d9e-40b9-a69d-83ec109311c9) ) (fp_text user "REF**" (at 0 5.550013 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 3cb393d1-25cb-4da8-b014-07ddbf9c80ac) ) (fp_line (start -0.9 -1.550013) (end 0.900025 -1.550013) (stroke (width 0.254) (type solid)) (layer "F.SilkS") (tstamp e35b1ea7-7502-4925-bca3-6d3c47fef7b4)) (fp_line (start -0.9 1.550013) (end 0.900025 1.550013) (stroke (width 0.254) (type solid)) (layer "F.SilkS") (tstamp 23cf43a3-a7c4-4214-bfd1-1b9bd22c06f2)) (fp_circle (center 1.397003 1.650902) (end 1.524003 1.650902) (stroke (width 0.254) (type solid)) (fill none) (layer "F.SilkS") (tstamp b6451e2e-2cf0-4507-b1f5-454d36172189)) (fp_circle (center 1.400025 1.434976) (end 1.430023 1.434976) (stroke (width 0.059995) (type solid)) (fill none) (layer "F.SilkS") (tstamp 8f983793-a73e-4f5b-87e4-2b77b2464d28)) (fp_circle (center 1.400051 0.94986) (end 1.500127 0.94986) (stroke (width 0.2) (type solid)) (fill none) (layer "F.Fab") (tstamp 8922acd3-100f-4b79-81b4-6cf67943ab6e)) (pad "1" smd rect (at 1.400051 0.94986 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 77 "OB+") (pinfunction "D1+") (pintype "bidirectional") (tstamp 671cd267-2178-48de-a768-2a99445f8fa3)) (pad "2" smd rect (at 1.400051 -0.000102 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (pinfunction "GND") (pintype "power_in") (zone_connect 2) (tstamp 7e649e0a-1d0a-4801-a615-da38b5e220c5)) (pad "3" smd rect (at 1.400051 -0.950064 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 77 "OB+") (pinfunction "D2+") (pintype "bidirectional") (tstamp c35382a7-c2b7-43e9-bb16-f88dfac8f1bd)) (pad "4" smd rect (at -1.400051 -0.950064 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 76 "OB-") (pinfunction "D2-") (pintype "bidirectional") (tstamp 21d967ac-6d88-4da8-9d2d-393d2eb73623)) (pad "5" smd rect (at -1.400051 -0.000102 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 70 "unconnected-(U5-NC-Pad5)") (pinfunction "NC") (pintype "no_connect") (tstamp c7d94b3e-fd7f-4889-9e4c-a93895e93cd4)) (pad "6" smd rect (at -1.400051 0.94986 90) (size 1 0.550013) (layers "F.Cu" "F.Paste" "F.Mask") (net 76 "OB-") (pinfunction "D1-") (pintype "bidirectional") (tstamp d6509022-4ecc-47ac-86e9-81f5d4821739)) (model "/Users/hrvoje/Misc/Electronics/Library/TPD4E1U06DBVR.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 -180)) ) ) (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") (tstamp 95b6692a-60ab-4756-9b81-01dcacc5bc3e) (at 74.0156 96.774 -90) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags "resistor") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Resistor, small symbol") (property "ki_keywords" "R resistor") (path "/4d307e4a-4e5d-4351-822e-9ce1c1b8ff0c") (attr smd) (fp_text reference "R1" (at 2.561796 -0.120336 -180) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 3f395c9f-1288-42b0-80a0-072b044dff2d) ) (fp_text value "27" (at 0 1.65 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 7e1a59c2-b8be-4ad9-b335-4679de850ef5) ) (fp_text user "${REFERENCE}" (at -8.7395 7.326 90) (layer "F.Fab") (effects (font (size 0.5 0.5) (thickness 0.08))) (tstamp ee4bc156-fe38-4dc3-bfd4-3ae737bdc9a9) ) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 07f21728-fe39-4edf-a612-938f5774cc0c)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4d1e4c53-ea9c-45df-8ae6-c705ef2079f1)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 924b6751-238d-4ce2-b27b-994bb968e551)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 0018ce6a-4988-44d1-b501-9051797533f2)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp c6f51464-54d8-4cb8-a650-f8440d61a0c8)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp a34f1e68-44d9-43c8-89f7-a31335d104e4)) (fp_line (start -1 -0.625) (end 1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 32f6628f-7781-49d4-bc6a-faccb100ea7e)) (fp_line (start -1 0.625) (end -1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 8bd41065-b568-4d2d-bd13-02977dc0c749)) (fp_line (start 1 -0.625) (end 1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 076afa4a-efe8-45aa-b155-07604e51dbc6)) (fp_line (start 1 0.625) (end -1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 21011a0a-6fac-4ff1-be88-94155d3f40fc)) (pad "1" smd roundrect (at -0.9125 0 270) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902439) (net 73 "/AD-") (pintype "passive") (tstamp 8d09f483-dea7-4199-9c42-08aff1211173)) (pad "2" smd roundrect (at 0.9125 0 270) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902439) (net 74 "OA-") (pintype "passive") (tstamp 6e861c41-c141-437c-95bf-38f76b92a5a1)) (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopBottom" (layer "F.Cu") (tstamp 9b928342-d61c-40f1-955d-678f9170bfe5) (at 37.846 111.506) (descr "Mounting Hole 2.7mm, M2.5") (tags "mounting hole 2.7mm m2.5") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Mounting Hole with connection") (property "ki_keywords" "mounting hole") (path "/018789e2-c44c-4899-984c-f44a168bc676") (zone_connect 2) (attr exclude_from_pos_files) (fp_text reference "H1" (at 0 -3.7) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 43e815f0-7399-4c87-bf8d-d66a9b68d419) ) (fp_text value "MountingHole_Pad" (at 0 3.7) (layer "F.Fab") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 6d959634-a6f0-4607-9f82-901fd532a073) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 733b1602-fc13-461b-8689-ead46e4d7e53) ) (fp_circle (center 0 0) (end 2.7 0) (stroke (width 0.15) (type solid)) (fill none) (layer "Cmts.User") (tstamp 77435779-6bdc-4a4b-af0f-3ff29e94f17d)) (fp_circle (center 0 0) (end 2.95 0) (stroke (width 0.05) (type solid)) (fill none) (layer "F.CrtYd") (tstamp d029b0af-0c0b-46a7-8d23-9c8383e4cc4d)) (pad "1" thru_hole circle (at 0 0) (size 3.1 3.1) (drill 2.7) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "1") (pintype "input") (tstamp 38aba840-4f9b-4684-9cc4-f2da29563266)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "F.Cu" "F.Mask") (net 1 "GND") (pinfunction "1") (pintype "input") (zone_connect 2) (tstamp 5fcc61f5-7af5-44f5-b8ed-1def20eb8ee9)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "B.Cu" "B.Mask") (net 1 "GND") (pinfunction "1") (pintype "input") (tstamp 62e3d600-dfc4-4873-8667-e3b500a24b5d)) ) (footprint "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (layer "F.Cu") (tstamp 9ddef31a-9e6a-4cc3-860c-9bd9e31b90e6) (at 67.31 84.47611) (descr "SOIC, 8 Pin (JEDEC MS-012AA, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_8.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Dual-Channel Digital Isolator, 10Mbps 50ns, bidirectional communication, 3V/5V level translation, SOIC-8") (property "ki_keywords" "2Ch Dual Digital Isolator 10Mbps") (path "/24926d99-a33a-49d8-9b11-27c6c1201b83") (attr smd) (fp_text reference "U4" (at 1.90193 3.65389) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 2b9758dc-b500-4336-b257-21114f76caf0) ) (fp_text value "ADuM1201BR" (at 0 3.4) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp e3010dce-4994-41f6-a82b-72256756da18) ) (fp_text user "${REFERENCE}" (at 1.524 4.318) (layer "F.Fab") (effects (font (size 0.98 0.98) (thickness 0.15))) (tstamp b2d88a1d-0d7f-4123-86e7-7c1d7185aefb) ) (fp_line (start 0 -2.56) (end -3.45 -2.56) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d3fc6fb5-c738-4b5e-b653-5a605b1681d2)) (fp_line (start 0 -2.56) (end 1.95 -2.56) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 8ab12221-6791-44ec-9243-31867ef8fa68)) (fp_line (start 0 2.56) (end -1.95 2.56) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp aad4d62b-bd71-4f35-8812-4f855a2b65fa)) (fp_line (start 0 2.56) (end 1.95 2.56) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 25370b97-4325-4685-8d98-e4e16dcf82e6)) (fp_line (start -3.7 -2.7) (end -3.7 2.7) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 5da30f2c-1f3d-4de2-affc-5063ea790649)) (fp_line (start -3.7 2.7) (end 3.7 2.7) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 326958fe-a545-40da-8e1a-aa1b121c0bd3)) (fp_line (start 3.7 -2.7) (end -3.7 -2.7) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 137f68dd-acd4-4cf6-9443-c3743fdf89d1)) (fp_line (start 3.7 2.7) (end 3.7 -2.7) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 7c928ec4-d8a3-4b53-b6cf-e641e61b3b2a)) (fp_line (start -1.95 -1.475) (end -0.975 -2.45) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 66002b72-14ca-4a7b-b6ad-4d893a4b889d)) (fp_line (start -1.95 2.45) (end -1.95 -1.475) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 69191b0f-3fb5-4699-a801-bef782404dd7)) (fp_line (start -0.975 -2.45) (end 1.95 -2.45) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b3d7ea26-abe6-40c7-8e70-8c821680b648)) (fp_line (start 1.95 -2.45) (end 1.95 2.45) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2b0e0fbb-fd60-4b74-916d-71c9fe0c1747)) (fp_line (start 1.95 2.45) (end -1.95 2.45) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 192098ef-348c-42fc-aa85-5bc5d37e8254)) (pad "1" smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 18 "3V3_BUS2") (pinfunction "VDD1") (pintype "power_in") (tstamp f9e42380-0b99-49a8-9cf3-8555d08de650)) (pad "2" smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 68 "UART B RX") (pinfunction "VOA") (pintype "output") (tstamp 5539636d-f8e0-49b1-ad39-a0101820d9a7)) (pad "3" smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 67 "UART B TX") (pinfunction "VIB") (pintype "input") (tstamp d0ed79a1-d6e4-4077-a609-8f2e75ea858e)) (pad "4" smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 1 "GND") (pinfunction "GND1") (pintype "power_in") (tstamp ab7209e6-68cb-42a7-9987-8996a6625b36)) (pad "5" smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 61 "GND2") (pinfunction "GND2") (pintype "power_in") (tstamp 0bccb03a-07af-4ec4-91a2-4390ca61efec)) (pad "6" smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 66 "UART A RX") (pinfunction "VOB") (pintype "output") (tstamp 19522420-5c78-43d2-be12-f9b2fbd26e04)) (pad "7" smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 65 "UART A TX") (pinfunction "VIA") (pintype "input") (tstamp acf1e9fa-2e6c-49b7-ae34-aed41e29fd23)) (pad "8" smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 6 "Net-(U1-3V3)") (pinfunction "VDD2") (pintype "power_in") (tstamp 4fc80276-30fc-4f1d-8159-0c9399c3da5f)) (model "${KICAD6_3DMODEL_DIR}/Package_SO.3dshapes/SOIC-8_3.9x4.9mm_P1.27mm.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") (tstamp a059d331-e549-451a-8454-d3f4a86ce184) (at 40.005 97.028 -90) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags "resistor") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Resistor, small symbol") (property "ki_keywords" "R resistor") (path "/b470f47f-3fd1-4773-8c99-d7803ec222e7") (attr smd) (fp_text reference "R4" (at 2.527263 -0.168336 -180) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 6e58ff20-6b3f-41cf-b854-4097b34e3eb7) ) (fp_text value "27" (at 0 1.65 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp f78eec3f-e9f0-4922-b474-8f14fc616b84) ) (fp_text user "${REFERENCE}" (at -0.9125 -2.54 90) (layer "F.Fab") (effects (font (size 0.5 0.5) (thickness 0.08))) (tstamp 102fe50a-c325-4ad9-9d6b-d938d1b95522) ) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 45dbe091-1311-428f-8a75-b7a62aa09b8a)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1098d6cd-2e88-4648-ac6f-c9b0d5d4bd3f)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1c93abf7-10b4-4c9e-93f6-300ae7b0be62)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 205ac7c9-29cc-4949-bf1f-171825b00815)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp ea992cd5-ccc6-4e6c-885c-36c33a1a32fa)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp fa565014-357c-4407-b5f8-c282e59f2794)) (fp_line (start -1 -0.625) (end 1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp e589aba9-dba6-4d76-8510-acb525601d8a)) (fp_line (start -1 0.625) (end -1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 248cda60-6acf-445c-8909-89a9ba1126fe)) (fp_line (start 1 -0.625) (end 1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 5565a39a-0fa3-4c6e-aaf4-99800fdea23f)) (fp_line (start 1 0.625) (end -1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 570a27ce-2335-41cc-8fbc-5c24e3b3efc9)) (pad "1" smd roundrect (at -0.9125 0 270) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902439) (net 64 "Net-(U2-GPIO14)") (pintype "passive") (tstamp 8761fc7f-7d9b-4e88-ada2-8a7eb379d827)) (pad "2" smd roundrect (at 0.9125 0 270) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902439) (net 77 "OB+") (pintype "passive") (tstamp 330fe5da-6b57-41c7-8377-ae4343905af3)) (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Capacitor_SMD:C_0805_2012Metric" (layer "F.Cu") (tstamp a7453a30-b6cd-4e05-868e-f9a33d870808) (at 38.1 103.251 -90) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags "capacitor") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Unpolarized capacitor, small symbol") (property "ki_keywords" "capacitor cap") (path "/bcead397-8a0f-4e0b-8168-e2f526311d78") (attr smd) (fp_text reference "C3" (at 0.127 2.032 -180) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 9f9444b2-f14e-46d8-9006-9a6d24f1cf3c) ) (fp_text value "4.7uF" (at 0 1.68 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 5dd1c224-84ed-4ceb-a7fb-2bdbd9c53aea) ) (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab") (effects (font (size 0.5 0.5) (thickness 0.08))) (tstamp 004c63bd-ef56-4884-a337-e0aa5c5376a5) ) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6bd770aa-71d1-4c57-8846-79c0dfc9a88e)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ead513b8-2770-4514-bf2b-48c007752d6e)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 9e7c9de4-a0fb-43bb-a943-aeb19bc05cb7)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 4eb90df5-adbc-4d25-800a-8d18233e791a)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 29645251-53c9-452d-8817-bc99b1dee3cd)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp c8b55228-bb1c-4f9d-bf83-4c28c2eea5ff)) (fp_line (start -1 -0.625) (end 1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp f699e89e-89df-4857-8ae2-433edac7c12e)) (fp_line (start -1 0.625) (end -1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 17d2cbae-e77c-4f9b-b471-9726977c030f)) (fp_line (start 1 -0.625) (end 1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b8a81552-baeb-4805-b0a9-213b154141e9)) (fp_line (start 1 0.625) (end -1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2dfb21da-395b-46b3-8022-41a3234a4296)) (pad "1" smd roundrect (at -0.95 0 270) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 31 "VBUS2") (pintype "passive") (tstamp 5d783862-b9bc-4822-92a3-f7a3cfeb550b)) (pad "2" smd roundrect (at 0.95 0 270) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 1 "GND") (pintype "passive") (tstamp 37803712-c351-4061-babf-a7b3d893e5b3)) (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (layer "F.Cu") (tstamp b850c441-574b-451d-bb4d-17d12aa369c9) (at 60.731042 99.717876) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)") (property "ki_keywords" "connector") (path "/6f0720d9-03ca-464d-8f40-cac693806bc9") (attr through_hole) (fp_text reference "J2" (at 0.228958 -2.435876) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp e1a10acf-2291-4a9c-9f3e-49ea28d621a8) ) (fp_text value "Debug2" (at 0 7.41) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp f8558506-c50f-4f72-bb8b-0a60569604dc) ) (fp_text user "${REFERENCE}" (at 0 2.54 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 0adfea68-022b-460f-a0c7-f512f00b55d6) ) (fp_line (start -1.33 -1.33) (end 0 -1.33) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 41aee375-8bf6-477a-b882-26080f36e634)) (fp_line (start -1.33 0) (end -1.33 -1.33) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp f2c889d5-c5ba-44ee-8050-afe023cc5802)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1a659f1d-aa46-4cdb-b473-789a46ca7582)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 44dcaf47-6ac6-49af-80a0-2666945d7e79)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 616c63e6-d096-49e4-8bbe-1f500af09277)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 91468eed-02fb-4908-a3e2-0f380e678340)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1c4ea6f9-ead1-498d-81df-7c493bcc0f36)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 598bd9c9-054d-49b3-aa48-8870319b1bac)) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 19eccdca-616b-4743-b6a1-20d9bc644665)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 43f938ca-8875-4752-a835-976d845a0c26)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7dbdc97c-3642-43f6-9119-1e7e777800f6)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7dad61fc-f27f-4bfc-adc4-affbe5232cad)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 3b0fe11c-ab0c-4535-bbe0-b42becdfc9d7)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp ecb42f36-5bae-4058-8c64-e09ea8eb6aa6)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a5797031-a720-4380-96a5-cc23840646c9)) (pad "1" thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 2 "Net-(J2-Pin_1)") (pinfunction "Pin_1") (pintype "passive") (tstamp beaddb3a-0cc5-4e99-b139-57826c3e0fa6)) (pad "2" thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 1 "GND") (pinfunction "Pin_2") (pintype "passive") (zone_connect 2) (tstamp 87bf79bd-97cf-4c26-b0bd-2417f19d85b9)) (pad "3" thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 3 "Net-(J2-Pin_3)") (pinfunction "Pin_3") (pintype "passive") (tstamp 667232b1-a5a3-4181-b5d8-2a1860467edd)) (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "Capacitor_SMD:C_0805_2012Metric" (layer "F.Cu") (tstamp e878bfdf-f621-4966-ab5f-5a588380668b) (at 63.119 74.93 180) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags "capacitor") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Unpolarized capacitor") (property "ki_keywords" "cap capacitor") (path "/fb534856-14b0-4379-bd15-7952c4f76624") (attr smd) (fp_text reference "C1" (at -1.778 1.905 180) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 41a7ff98-d31c-449e-9d87-c3566428b491) ) (fp_text value "100n" (at 0 1.68 180) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp a0540869-47c6-410f-93f6-f002b38a1166) ) (fp_text user "${REFERENCE}" (at 0 0 180) (layer "F.Fab") (effects (font (size 0.5 0.5) (thickness 0.08))) (tstamp f519fad8-68db-44f9-b5f4-9610548bfa8b) ) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 69cd85ca-db21-4f87-9369-92771b93bb6b)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 9a50264c-e333-4253-b7c4-28f7166b2a28)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp e3b62ceb-d14a-4584-ad3d-530645dc6bcb)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 3ab1c27a-24ba-4154-ae4e-34594786c49f)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 2a595503-058c-4603-a48a-065a523f07ea)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp b7dca6c7-ce4b-471d-8db8-615d7e18d470)) (fp_line (start -1 -0.625) (end 1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b7f6a3e5-d480-4a7a-9406-5e4dece8b5e8)) (fp_line (start -1 0.625) (end -1 -0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 32219403-070d-4be6-8b51-e4ab98be2890)) (fp_line (start 1 -0.625) (end 1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 94d38d40-f8e4-4854-9028-862b687be95b)) (fp_line (start 1 0.625) (end -1 0.625) (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 6ad69f37-6591-4123-b79b-bdfba1c73a81)) (pad "1" smd roundrect (at -0.95 0 180) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 18 "3V3_BUS2") (pintype "passive") (tstamp 73bb05ad-4e48-4953-8021-3024ec3d4190)) (pad "2" smd roundrect (at 0.95 0 180) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 1 "GND") (pintype "passive") (tstamp d9c9ac23-1ecc-4d55-a11c-1931020d129d)) (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopBottom" (layer "F.Cu") (tstamp fb8a905f-c1e6-4321-ba31-244d69cec1f2) (at 67.31552 45.17899) (descr "Mounting Hole 2.7mm, M2.5") (tags "mounting hole 2.7mm m2.5") (property "Sheetfile" "DeskHop_Rev1.kicad_sch") (property "Sheetname" "") (property "ki_description" "Mounting Hole with connection") (property "ki_keywords" "mounting hole") (path "/4a3d9b92-86b8-4f01-8c19-8709e0c6cbda") (zone_connect 2) (attr exclude_from_pos_files) (fp_text reference "H3" (at 0 -3.7) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 05698820-d50b-4a77-98d8-824590fea092) ) (fp_text value "MountingHole_Pad" (at 0 3.7) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 4ac8a319-5847-4427-bb33-7b4bd48823c1) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp ce548ef2-01f3-4598-af7c-a8e1c3dce57d) ) (fp_circle (center 0 0) (end 2.7 0) (stroke (width 0.15) (type solid)) (fill none) (layer "Cmts.User") (tstamp 924d8883-a11f-4de7-a20b-e637d2d6d0de)) (fp_circle (center 0 0) (end 2.95 0) (stroke (width 0.05) (type solid)) (fill none) (layer "F.CrtYd") (tstamp cf8fae50-286c-4561-9efb-442fafd4e44b)) (pad "1" thru_hole circle (at 0 0) (size 3.1 3.1) (drill 2.7) (layers "*.Cu" "*.Mask") (net 61 "GND2") (pinfunction "1") (pintype "input") (tstamp 66aa93c9-52ed-4c16-b909-0a437fb42a55)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "F.Cu" "F.Mask") (net 61 "GND2") (pinfunction "1") (pintype "input") (clearance 1.7) (zone_connect 2) (tstamp 35509d77-df89-4d10-b010-108091672f7e)) (pad "1" connect circle (at 0 0) (size 5.4 5.4) (layers "B.Cu" "B.Mask") (net 61 "GND2") (pinfunction "1") (pintype "input") (clearance 1.7) (zone_connect 2) (tstamp e23f1ad3-e9fd-4475-a954-1ceba659afec)) ) (gr_poly (pts (xy 57.015381 82.044061) (xy 60.317381 82.044061) (xy 60.317381 83.568061) (xy 57.015381 83.568061) (xy 57.015381 82.044061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 015ed977-e1e7-494d-8650-65dd406030ab)) (gr_poly (pts (xy 93.472 79.502) (xy 96.774 79.502) (xy 96.774 81.026) (xy 93.472 81.026) (xy 93.472 79.502) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 016be97c-6dce-4e90-9e73-395e27c2f50a)) (gr_poly (pts (xy 57.013734 69.301047) (xy 60.315734 69.301047) (xy 60.315734 70.825047) (xy 57.013734 70.825047) (xy 57.013734 69.301047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 01d761c3-593e-444b-9e42-603af00635af)) (gr_poly (pts (xy 37.419244 66.758544) (xy 40.721244 66.758544) (xy 40.721244 68.282544) (xy 37.419244 68.282544) (xy 37.419244 66.758544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 05a40193-8a46-43ab-b47a-4ac67ca804f7)) (gr_poly (pts (xy 73.914 87.122) (xy 77.216 87.122) (xy 77.216 88.646) (xy 73.914 88.646) (xy 73.914 87.122) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 06c2c13d-75b1-40d7-a5a1-9d937a0907d1)) (gr_poly (pts (xy 37.419244 76.918544) (xy 40.721244 76.918544) (xy 40.721244 78.442544) (xy 37.419244 78.442544) (xy 37.419244 76.918544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 08a0ad21-db6e-4c93-8a66-3e2efd7d3f3d)) (gr_poly (pts (xy 37.419244 59.138544) (xy 40.721244 59.138544) (xy 40.721244 60.662544) (xy 37.419244 60.662544) (xy 37.419244 59.138544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 09d69073-116f-477c-9c70-5eddde233f8d)) (gr_poly (pts (xy 93.472 49.022) (xy 96.774 49.022) (xy 96.774 50.546) (xy 93.472 50.546) (xy 93.472 49.022) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 104d1c41-6c6c-414d-8c93-31da40f16397)) (gr_poly (pts (xy 93.472 69.342) (xy 96.774 69.342) (xy 96.774 70.866) (xy 93.472 70.866) (xy 93.472 69.342) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 109e1cce-ff94-4dbf-9a69-05cc8698164d)) (gr_poly (pts (xy 73.914 79.502) (xy 77.216 79.502) (xy 77.216 81.026) (xy 73.914 81.026) (xy 73.914 79.502) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 14cea217-0d2b-4fde-a46a-b6bbe2940d1d)) (gr_poly (pts (xy 93.472 87.122) (xy 96.774 87.122) (xy 96.774 88.646) (xy 93.472 88.646) (xy 93.472 87.122) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 18ff6fb1-1db7-485f-bae2-7c94133dfe3b)) (gr_poly (pts (xy 57.013734 71.841047) (xy 60.315734 71.841047) (xy 60.315734 73.365047) (xy 57.013734 73.365047) (xy 57.013734 71.841047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 1c7391db-bd0c-4cc5-bf6c-30a52bacaeeb)) (gr_poly (pts (xy 93.472 66.802) (xy 96.774 66.802) (xy 96.774 68.326) (xy 93.472 68.326) (xy 93.472 66.802) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 1ed2d56d-b2b4-46c7-b7fb-3fa884bc0c17)) (gr_poly (pts (xy 57.013734 74.381047) (xy 60.315734 74.381047) (xy 60.315734 75.905047) (xy 57.013734 75.905047) (xy 57.013734 74.381047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 1f3a81e0-23ca-4943-88f6-1a2de6d5ca81)) (gr_poly (pts (xy 93.472 89.662) (xy 96.774 89.662) (xy 96.774 91.186) (xy 93.472 91.186) (xy 93.472 89.662) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 250fd01a-86ff-488b-b0af-5beb3bea7c16)) (gr_poly (pts (xy 48.130297 95.249999) (xy 48.130297 91.947999) (xy 49.654297 91.947999) (xy 49.654297 95.249999) (xy 48.130297 95.249999) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 25e0a0e8-6741-4d2b-a0c7-601e90992ba3)) (gr_poly (pts (xy 37.419244 71.838544) (xy 40.721244 71.838544) (xy 40.721244 73.362544) (xy 37.419244 73.362544) (xy 37.419244 71.838544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 25f3a720-c8f3-40c0-a594-6f2445bfd780)) (gr_poly (pts (xy 73.914 66.802) (xy 77.216 66.802) (xy 77.216 68.326) (xy 73.914 68.326) (xy 73.914 66.802) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 26e0ec4d-5374-4061-9e84-0e8ddbe45535)) (gr_poly (pts (xy 93.472 64.262) (xy 96.774 64.262) (xy 96.774 65.786) (xy 93.472 65.786) (xy 93.472 64.262) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 2b19a0ce-b707-495d-970e-6402009d2466)) (gr_poly (pts (xy 93.472 84.582) (xy 96.774 84.582) (xy 96.774 86.106) (xy 93.472 86.106) (xy 93.472 84.582) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 32f5a0a1-9636-4e34-8cd3-153a501432d3)) (gr_poly (pts (xy 57.015381 92.204061) (xy 60.317381 92.204061) (xy 60.317381 93.728061) (xy 57.015381 93.728061) (xy 57.015381 92.204061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 35a3f57a-6a8a-41aa-bddb-b619c3fc7f49)) (gr_poly (pts (xy 73.914 49.022) (xy 77.216 49.022) (xy 77.216 50.546) (xy 73.914 50.546) (xy 73.914 49.022) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 36bae6fb-b92f-4631-bcc8-ee429f75327a)) (gr_poly (pts (xy 93.472 56.642) (xy 96.774 56.642) (xy 96.774 58.166) (xy 93.472 58.166) (xy 93.472 56.642) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 3b056f94-6ca3-4a8a-9414-6aff35991135)) (gr_poly (pts (xy 37.415563 46.446959) (xy 40.717563 46.446959) (xy 40.717563 47.970959) (xy 37.415563 47.970959) (xy 37.415563 46.446959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 45603b89-8dfc-407f-88a6-599cc611ab36)) (gr_poly (pts (xy 73.914 59.182) (xy 77.216 59.182) (xy 77.216 60.706) (xy 73.914 60.706) (xy 73.914 59.182) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 4605af8b-d550-4e27-bbdb-c6785f6d1d77)) (gr_poly (pts (xy 73.914 61.722) (xy 77.216 61.722) (xy 77.216 63.246) (xy 73.914 63.246) (xy 73.914 61.722) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 4700bc38-ea9a-453c-8987-d486637ff21f)) (gr_poly (pts (xy 56.973563 51.526959) (xy 60.275563 51.526959) (xy 60.275563 53.050959) (xy 56.973563 53.050959) (xy 56.973563 51.526959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 4a81af59-7452-4bf6-8d80-9ad4453085d3)) (gr_poly (pts (xy 73.914 89.662) (xy 77.216 89.662) (xy 77.216 91.186) (xy 73.914 91.186) (xy 73.914 89.662) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 51016732-ac01-4788-8ce6-813f9cc56b02)) (gr_poly (pts (xy 82.042 95.25) (xy 82.042 91.948) (xy 83.566 91.948) (xy 83.566 95.25) (xy 82.042 95.25) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 5bc36f4d-2b2e-448a-a39e-5a8dce27cef1)) (gr_poly (pts (xy 93.472 46.482) (xy 96.774 46.482) (xy 96.774 48.006) (xy 93.472 48.006) (xy 93.472 46.482) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 610aaf23-28f6-4026-8014-06e0d61fe2cd)) (gr_poly (pts (xy 37.419244 79.458544) (xy 40.721244 79.458544) (xy 40.721244 80.982544) (xy 37.419244 80.982544) (xy 37.419244 79.458544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 662f567a-67be-44ea-a42e-3a2af8d08d96)) (gr_poly (pts (xy 37.419244 54.058544) (xy 40.721244 54.058544) (xy 40.721244 55.582544) (xy 37.419244 55.582544) (xy 37.419244 54.058544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 67bed801-3554-4f2c-bb90-7865bb90bfff)) (gr_poly (pts (xy 37.415563 48.986959) (xy 40.717563 48.986959) (xy 40.717563 50.510959) (xy 37.415563 50.510959) (xy 37.415563 48.986959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 6b02d11b-1bd1-477a-b79c-07a1ce4a8c29)) (gr_poly (pts (xy 37.419244 84.538544) (xy 40.721244 84.538544) (xy 40.721244 86.062544) (xy 37.419244 86.062544) (xy 37.419244 84.538544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 6fab9d4d-c12e-428d-ab2f-0f4428549d42)) (gr_poly (pts (xy 37.419244 74.378544) (xy 40.721244 74.378544) (xy 40.721244 75.902544) (xy 37.419244 75.902544) (xy 37.419244 74.378544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 7353ed41-af50-413e-b4b8-308913c2ee6b)) (gr_poly (pts (xy 37.419244 56.598544) (xy 40.721244 56.598544) (xy 40.721244 58.122544) (xy 37.419244 58.122544) (xy 37.419244 56.598544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 739dbdb8-6d2f-4814-9e6c-3c80f37ccb46)) (gr_poly (pts (xy 37.415563 43.906959) (xy 40.717563 43.906959) (xy 40.717563 45.430959) (xy 37.415563 45.430959) (xy 37.415563 43.906959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 790236d5-b585-48da-8204-19f50332d06a)) (gr_poly (pts (xy 57.015381 87.124061) (xy 60.317381 87.124061) (xy 60.317381 88.648061) (xy 57.015381 88.648061) (xy 57.015381 87.124061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 795c3c38-82bd-40bc-bcd1-dfd2774e6ce1)) (gr_poly (pts (xy 73.914 54.102) (xy 77.216 54.102) (xy 77.216 55.626) (xy 73.914 55.626) (xy 73.914 54.102) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 7971ffe0-63e5-4ef3-b3f7-df44e0519630)) (gr_poly (pts (xy 84.582 95.25) (xy 84.582 91.948) (xy 86.106 91.948) (xy 86.106 95.25) (xy 84.582 95.25) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 830c4d92-eda5-41ba-9303-b0b8c5d80713)) (gr_poly (pts (xy 73.914 43.942) (xy 77.216 43.942) (xy 77.216 45.466) (xy 73.914 45.466) (xy 73.914 43.942) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 83f10166-d8e2-4ee2-bc01-f73d948a229f)) (gr_poly (pts (xy 93.472 74.422) (xy 96.774 74.422) (xy 96.774 75.946) (xy 93.472 75.946) (xy 93.472 74.422) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 87b87eab-db06-4d56-bf4c-1ffa6d00fc53)) (gr_poly (pts (xy 37.419244 89.618544) (xy 40.721244 89.618544) (xy 40.721244 91.142544) (xy 37.419244 91.142544) (xy 37.419244 89.618544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 8b073c69-13c6-40b1-b489-b0e4d45e34cb)) (gr_poly (pts (xy 45.590297 95.249999) (xy 45.590297 91.947999) (xy 47.114297 91.947999) (xy 47.114297 95.249999) (xy 45.590297 95.249999) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 94b89016-0593-48c7-93d2-042451f59c7a)) (gr_poly (pts (xy 56.973563 46.446959) (xy 60.275563 46.446959) (xy 60.275563 47.970959) (xy 56.973563 47.970959) (xy 56.973563 46.446959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 973d228b-8735-4f35-b842-ed68a1c4250a)) (gr_poly (pts (xy 93.472 43.942) (xy 96.774 43.942) (xy 96.774 45.466) (xy 93.472 45.466) (xy 93.472 43.942) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 983381ae-fc5f-44f8-a983-e13d3709f5f1)) (gr_poly (pts (xy 73.914 74.422) (xy 77.216 74.422) (xy 77.216 75.946) (xy 73.914 75.946) (xy 73.914 74.422) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 98c52f08-0ca4-44ad-8716-086131c59748)) (gr_poly (pts (xy 93.472 61.722) (xy 96.774 61.722) (xy 96.774 63.246) (xy 93.472 63.246) (xy 93.472 61.722) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 9a933ff5-604a-44a7-98a0-07b6b717c0fe)) (gr_poly (pts (xy 56.973563 48.986959) (xy 60.275563 48.986959) (xy 60.275563 50.510959) (xy 56.973563 50.510959) (xy 56.973563 48.986959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp 9cfcc10d-95e3-40f8-9ea9-965daf9805ce)) (gr_poly (pts (xy 57.013734 61.681047) (xy 60.315734 61.681047) (xy 60.315734 63.205047) (xy 57.013734 63.205047) (xy 57.013734 61.681047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp a01eea2b-1a38-44a6-8473-571f007c0ff7)) (gr_poly (pts (xy 93.472 54.102) (xy 96.774 54.102) (xy 96.774 55.626) (xy 93.472 55.626) (xy 93.472 54.102) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp a3dce0f4-ba57-40ad-8a59-265b76d11ada)) (gr_poly (pts (xy 57.015381 89.664061) (xy 60.317381 89.664061) (xy 60.317381 91.188061) (xy 57.015381 91.188061) (xy 57.015381 89.664061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp a60eca9c-251c-4d94-b6c1-eec3c36501a5)) (gr_poly (pts (xy 73.914 82.042) (xy 77.216 82.042) (xy 77.216 83.566) (xy 73.914 83.566) (xy 73.914 82.042) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp a84ced9b-7f0f-49ee-a4fd-80645cc40399)) (gr_poly (pts (xy 56.973563 43.906959) (xy 60.275563 43.906959) (xy 60.275563 45.430959) (xy 56.973563 45.430959) (xy 56.973563 43.906959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp b36b1f4f-5410-4375-b583-e89186ea0c28)) (gr_poly (pts (xy 93.472 92.202) (xy 96.774 92.202) (xy 96.774 93.726) (xy 93.472 93.726) (xy 93.472 92.202) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp b37c7e68-11a5-41cd-a4a9-47459a62584b)) (gr_poly (pts (xy 57.015381 76.964061) (xy 60.317381 76.964061) (xy 60.317381 78.488061) (xy 57.015381 78.488061) (xy 57.015381 76.964061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp b51e6fcb-f696-479c-81d8-1fb773c7b9bb)) (gr_poly (pts (xy 37.419244 87.078544) (xy 40.721244 87.078544) (xy 40.721244 88.602544) (xy 37.419244 88.602544) (xy 37.419244 87.078544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp b6f581b9-f1ce-4bea-8d09-b22766a0c26f)) (gr_poly (pts (xy 50.670297 95.249999) (xy 50.670297 91.947999) (xy 52.194297 91.947999) (xy 52.194297 95.249999) (xy 50.670297 95.249999) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp bc9a5957-a971-46dc-aeb6-05fccfdd189a)) (gr_poly (pts (xy 57.013734 64.221047) (xy 60.315734 64.221047) (xy 60.315734 65.745047) (xy 57.013734 65.745047) (xy 57.013734 64.221047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp bed20542-69f4-4a47-801c-29fc6a85dba2)) (gr_poly (pts (xy 73.914 51.562) (xy 77.216 51.562) (xy 77.216 53.086) (xy 73.914 53.086) (xy 73.914 51.562) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp bfcba5f3-7f47-4f04-927d-f4077590b030)) (gr_poly (pts (xy 93.472 51.562) (xy 96.774 51.562) (xy 96.774 53.086) (xy 93.472 53.086) (xy 93.472 51.562) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c01f993d-0268-4a0e-a77e-9f13fba196a5)) (gr_poly (pts (xy 37.419244 69.298544) (xy 40.721244 69.298544) (xy 40.721244 70.822544) (xy 37.419244 70.822544) (xy 37.419244 69.298544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c5829e30-8e2b-40c1-b79e-9c30c8addf55)) (gr_poly (pts (xy 37.419244 92.158544) (xy 40.721244 92.158544) (xy 40.721244 93.682544) (xy 37.419244 93.682544) (xy 37.419244 92.158544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c5b47e99-98ff-4fbd-873a-107c4d315caa)) (gr_poly (pts (xy 93.472 82.042) (xy 96.774 82.042) (xy 96.774 83.566) (xy 93.472 83.566) (xy 93.472 82.042) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c6d3ab47-419f-4617-918b-1dc8d11d57f4)) (gr_poly (pts (xy 73.914 56.642) (xy 77.216 56.642) (xy 77.216 58.166) (xy 73.914 58.166) (xy 73.914 56.642) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c71c5ca0-39d1-4f2c-ba56-94226b4ad212)) (gr_poly (pts (xy 73.914 46.482) (xy 77.216 46.482) (xy 77.216 48.006) (xy 73.914 48.006) (xy 73.914 46.482) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c7533b54-108e-4535-b867-dccb2dce5be5)) (gr_poly (pts (xy 57.013734 59.141047) (xy 60.315734 59.141047) (xy 60.315734 60.665047) (xy 57.013734 60.665047) (xy 57.013734 59.141047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp c8c8e82b-b01c-43ac-911f-8962c7ae612f)) (gr_poly (pts (xy 93.472 76.962) (xy 96.774 76.962) (xy 96.774 78.486) (xy 93.472 78.486) (xy 93.472 76.962) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp cb495243-2016-4dce-b57a-87d58e637c8c)) (gr_poly (pts (xy 57.013734 66.761047) (xy 60.315734 66.761047) (xy 60.315734 68.285047) (xy 57.013734 68.285047) (xy 57.013734 66.761047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp cb55488d-4f2c-40d4-adc6-35f33baab834)) (gr_poly (pts (xy 57.015381 79.504061) (xy 60.317381 79.504061) (xy 60.317381 81.028061) (xy 57.015381 81.028061) (xy 57.015381 79.504061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp cd3f0449-d497-407b-ae8d-ed6eed0cd4e9)) (gr_poly (pts (xy 73.914 84.582) (xy 77.216 84.582) (xy 77.216 86.106) (xy 73.914 86.106) (xy 73.914 84.582) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp d265748f-656e-4819-95ee-930b97eeddce)) (gr_poly (pts (xy 73.914 64.262) (xy 77.216 64.262) (xy 77.216 65.786) (xy 73.914 65.786) (xy 73.914 64.262) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp d2867638-cc61-40ae-b20d-48bb6d8a03a0)) (gr_poly (pts (xy 37.419244 64.218544) (xy 40.721244 64.218544) (xy 40.721244 65.742544) (xy 37.419244 65.742544) (xy 37.419244 64.218544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp d2ae693a-0664-43d8-bb6d-a8c6ab8283ef)) (gr_poly (pts (xy 93.472 59.182) (xy 96.774 59.182) (xy 96.774 60.706) (xy 93.472 60.706) (xy 93.472 59.182) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp d5cce93f-8110-444d-86e7-1561ee5c56ba)) (gr_poly (pts (xy 73.914 71.882) (xy 77.216 71.882) (xy 77.216 73.406) (xy 73.914 73.406) (xy 73.914 71.882) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp d7160c7c-2aa8-478c-a788-603eab0130f4)) (gr_poly (pts (xy 73.914 76.962) (xy 77.216 76.962) (xy 77.216 78.486) (xy 73.914 78.486) (xy 73.914 76.962) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp da2c0329-af77-4c27-90e9-44b3d17bc99e)) (gr_poly (pts (xy 37.415563 51.526959) (xy 40.717563 51.526959) (xy 40.717563 53.050959) (xy 37.415563 53.050959) (xy 37.415563 51.526959) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp ddad339f-42a0-45a8-b19a-0521e4172bb8)) (gr_poly (pts (xy 57.013734 54.061047) (xy 60.315734 54.061047) (xy 60.315734 55.585047) (xy 57.013734 55.585047) (xy 57.013734 54.061047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp e969ee8e-4876-4efc-bdd4-fdaeabbc524d)) (gr_poly (pts (xy 37.419244 81.998544) (xy 40.721244 81.998544) (xy 40.721244 83.522544) (xy 37.419244 83.522544) (xy 37.419244 81.998544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp ea2e9c1d-cc75-4e27-b8b6-80ae93b5afe0)) (gr_poly (pts (xy 93.472 71.882) (xy 96.774 71.882) (xy 96.774 73.406) (xy 93.472 73.406) (xy 93.472 71.882) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp ec3be00a-1da7-47c1-ab04-2246b70c7e31)) (gr_poly (pts (xy 73.914 69.342) (xy 77.216 69.342) (xy 77.216 70.866) (xy 73.914 70.866) (xy 73.914 69.342) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp edfbeb41-9d6e-4e32-a9bd-e510061cee1a)) (gr_poly (pts (xy 87.122 95.25) (xy 87.122 91.948) (xy 88.646 91.948) (xy 88.646 95.25) (xy 87.122 95.25) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp ee9b9431-449d-4653-8786-e667697fcc44)) (gr_poly (pts (xy 37.419244 61.678544) (xy 40.721244 61.678544) (xy 40.721244 63.202544) (xy 37.419244 63.202544) (xy 37.419244 61.678544) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp f48636b2-c240-4563-95d3-ed061191ace3)) (gr_poly (pts (xy 73.914 92.202) (xy 77.216 92.202) (xy 77.216 93.726) (xy 73.914 93.726) (xy 73.914 92.202) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp f9e14c9a-83a5-4c44-afac-964ffcacd59b)) (gr_poly (pts (xy 57.013734 56.601047) (xy 60.315734 56.601047) (xy 60.315734 58.125047) (xy 57.013734 58.125047) (xy 57.013734 56.601047) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp fdb0e725-6cd7-4fe0-a2fa-62c1f250bf49)) (gr_poly (pts (xy 57.015381 84.584061) (xy 60.317381 84.584061) (xy 60.317381 86.108061) (xy 57.015381 86.108061) (xy 57.015381 84.584061) ) (stroke (width 0.1) (type solid)) (fill solid) (layer "F.Paste") (tstamp fe2d1f84-f4b3-4630-b080-926aad5228ff)) (gr_line (start 67.31 48.738426) (end 67.281783 115.407659) (stroke (width 0.12) (type dash)) (layer "B.SilkS") (tstamp 06a87f3a-9b0a-4a3d-8a21-e2d4c24627dc)) (gr_poly (pts (xy 86.557888 85.472926) (xy 86.555873 85.500493) (xy 86.552512 85.527828) (xy 86.547825 85.554884) (xy 86.54183 85.581615) (xy 86.534547 85.607975) (xy 86.525995 85.633919) (xy 86.516191 85.6594) (xy 86.505156 85.684372) (xy 86.492909 85.708789) (xy 86.479468 85.732606) (xy 86.464852 85.755777) (xy 86.449081 85.778255) (xy 86.432173 85.799994) (xy 86.414148 85.820949) (xy 86.395023 85.841073) (xy 86.374925 85.860225) (xy 86.353995 85.878279) (xy 86.33228 85.895216) (xy 86.309825 85.911018) (xy 86.286678 85.925665) (xy 86.262884 85.939138) (xy 86.23849 85.951419) (xy 86.213541 85.962488) (xy 86.188085 85.972326) (xy 86.162167 85.980914) (xy 86.135833 85.988233) (xy 86.109131 85.994264) (xy 86.082106 85.998988) (xy 86.054804 86.002386) (xy 86.027271 86.004438) (xy 85.999555 86.005127) (xy 85.971802 86.004428) (xy 85.944238 86.002365) (xy 85.916909 85.998957) (xy 85.889861 85.994223) (xy 85.863141 85.988182) (xy 85.836793 85.980853) (xy 85.810864 85.972255) (xy 85.7854 85.962408) (xy 85.760447 85.951329) (xy 85.736051 85.93904) (xy 85.712257 85.925558) (xy 85.689112 85.910902) (xy 85.666661 85.895092) (xy 85.644951 85.878147) (xy 85.624028 85.860085) (xy 85.603937 85.840927) (xy 85.584821 85.820796) (xy 85.566803 85.799835) (xy 85.549904 85.778089) (xy 85.534141 85.755606) (xy 85.519534 85.73243) (xy 85.506102 85.708608) (xy 85.493864 85.684186) (xy 85.482838 85.65921) (xy 85.473045 85.633725) (xy 85.464502 85.607778) (xy 85.457228 85.581415) (xy 85.451243 85.554682) (xy 85.446566 85.527624) (xy 85.443216 85.500289) (xy 85.441211 85.47272) (xy 85.44057 85.444966) (xy 85.44057 84.629332) (xy 85.441309 84.600571) (xy 85.443478 84.572188) (xy 85.447042 84.544218) (xy 85.451966 84.516696) (xy 85.458215 84.489656) (xy 85.465754 84.463135) (xy 85.474547 84.437167) (xy 85.48456 84.411787) (xy 85.495758 84.387031) (xy 85.508106 84.362932) (xy 85.521568 84.339528) (xy 85.536109 84.316852) (xy 85.551694 84.294939) (xy 85.568289 84.273825) (xy 85.585858 84.253546) (xy 85.604365 84.234135) (xy 85.623777 84.215628) (xy 85.644057 84.19806) (xy 85.665171 84.181466) (xy 85.687084 84.165882) (xy 85.70976 84.151341) (xy 85.733164 84.137881) (xy 85.757262 84.125535) (xy 85.782019 84.114338) (xy 85.807398 84.104326) (xy 85.833365 84.095534) (xy 85.859886 84.087997) (xy 85.886924 84.081749) (xy 85.914445 84.076827) (xy 85.942414 84.073265) (xy 85.970796 84.071098) (xy 85.999555 84.070361) (xy 86.028315 84.071099) (xy 86.056698 84.073266) (xy 86.084668 84.076829) (xy 86.112191 84.081752) (xy 86.13923 84.088001) (xy 86.165751 84.095539) (xy 86.19172 84.104331) (xy 86.2171 84.114344) (xy 86.241856 84.125541) (xy 86.265955 84.137888) (xy 86.28936 84.151349) (xy 86.312036 84.16589) (xy 86.333949 84.181475) (xy 86.355063 84.198069) (xy 86.375343 84.215637) (xy 86.394754 84.234145) (xy 86.413262 84.253556) (xy 86.43083 84.273837) (xy 86.447424 84.294951) (xy 86.463009 84.316863) (xy 86.47755 84.33954) (xy 86.491011 84.362945) (xy 86.503358 84.387043) (xy 86.514555 84.4118) (xy 86.524568 84.43718) (xy 86.533361 84.463148) (xy 86.540899 84.48967) (xy 86.547147 84.516709) (xy 86.55207 84.544232) (xy 86.555633 84.572202) (xy 86.557801 84.600585) (xy 86.558539 84.629345) (xy 86.558539 85.445172) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp 1da1a168-bd0a-4369-96b1-ff2c97ba2547)) (gr_poly (pts (xy 43.680338 68.319893) (xy 43.681913 68.306453) (xy 43.6845 68.293012) (xy 43.688092 68.279572) (xy 43.692683 68.266132) (xy 43.698267 68.252691) (xy 43.704837 68.239251) (xy 43.865379 68.034812) (xy 44.285772 67.517686) (xy 45.651752 65.856875) (xy 47.176311 64.006844) (xy 48.138775 62.833577) (xy 48.261585 62.683427) (xy 48.374681 62.547112) (xy 48.47659 62.426215) (xy 48.565841 62.322316) (xy 48.64096 62.236996) (xy 48.700477 62.171837) (xy 48.723924 62.147311) (xy 48.742918 62.128418) (xy 48.757276 62.115356) (xy 48.766813 62.108321) (xy 48.773279 62.105162) (xy 48.780075 62.102028) (xy 48.794416 62.095932) (xy 48.809346 62.090233) (xy 48.816878 62.087594) (xy 48.824374 62.085128) (xy 48.831772 62.082859) (xy 48.839011 62.080813) (xy 48.846029 62.079014) (xy 48.852766 62.077487) (xy 48.85916 62.076256) (xy 48.865149 62.075346) (xy 48.870674 62.074782) (xy 48.875671 62.074589) (xy 48.882416 62.074785) (xy 48.889291 62.075364) (xy 48.896282 62.076316) (xy 48.903371 62.077628) (xy 48.910543 62.079289) (xy 48.917782 62.081288) (xy 48.925072 62.083612) (xy 48.932396 62.086251) (xy 48.947082 62.092424) (xy 48.961714 62.099716) (xy 48.976161 62.108033) (xy 48.990295 62.117283) (xy 49.003987 62.127372) (xy 49.017109 62.138209) (xy 49.029531 62.149701) (xy 49.041125 62.161755) (xy 49.051762 62.174278) (xy 49.056681 62.180687) (xy 49.061313 62.187178) (xy 49.065641 62.19374) (xy 49.069649 62.200362) (xy 49.073321 62.207032) (xy 49.076641 62.213738) (xy 49.083986 62.246795) (xy 49.09614 62.317703) (xy 49.132124 62.555281) (xy 49.179096 62.890895) (xy 49.231562 63.288967) (xy 49.282657 63.683352) (xy 49.326301 64.008953) (xy 49.358164 64.231773) (xy 49.368325 64.294017) (xy 49.371726 64.310987) (xy 49.373917 64.317816) (xy 49.407813 64.305686) (xy 49.499066 64.265044) (xy 49.828719 64.110677) (xy 50.902141 63.596779) (xy 51.29747 63.405451) (xy 51.626414 63.247329) (xy 51.894026 63.120041) (xy 52.105359 63.021215) (xy 52.265468 62.948479) (xy 52.379405 62.899461) (xy 52.420638 62.883106) (xy 52.452224 62.87179) (xy 52.474793 62.865218) (xy 52.488979 62.863094) (xy 52.496447 62.863241) (xy 52.503932 62.86368) (xy 52.511424 62.864407) (xy 52.518915 62.865416) (xy 52.526397 62.866703) (xy 52.533862 62.868263) (xy 52.5413 62.870093) (xy 52.548704 62.872186) (xy 52.556065 62.874538) (xy 52.563375 62.877145) (xy 52.577807 62.883106) (xy 52.591932 62.89003) (xy 52.605683 62.897881) (xy 52.618992 62.90662) (xy 52.631793 62.916213) (xy 52.644018 62.926621) (xy 52.649893 62.932119) (xy 52.655599 62.937807) (xy 52.661127 62.94368) (xy 52.666468 62.949734) (xy 52.671616 62.955964) (xy 52.67656 62.962365) (xy 52.681292 62.968933) (xy 52.685805 62.975664) (xy 52.690089 62.982551) (xy 52.694137 62.989592) (xy 52.770874 63.142658) (xy 52.887256 63.383975) (xy 53.17772 64.000519) (xy 53.443066 64.577533) (xy 53.52805 64.769438) (xy 53.56083 64.853326) (xy 53.561467 64.862624) (xy 53.561791 64.871575) (xy 53.561782 64.880231) (xy 53.561424 64.888639) (xy 53.560697 64.896849) (xy 53.559583 64.904911) (xy 53.558064 64.912875) (xy 53.556122 64.920789) (xy 53.553738 64.928703) (xy 53.550894 64.936667) (xy 53.547573 64.94473) (xy 53.543754 64.952941) (xy 53.539421 64.96135) (xy 53.534555 64.970006) (xy 53.529138 64.978958) (xy 53.523151 64.988257) (xy 53.500923 65.012708) (xy 53.455241 65.04551) (xy 53.375214 65.092246) (xy 53.24995 65.158501) (xy 52.820137 65.3719) (xy 52.078662 65.730376) (xy 50.550439 66.472498) (xy 50.420647 66.535748) (xy 50.889582 67.037523) (xy 51.231244 67.394312) (xy 51.368672 67.538212) (xy 51.485959 67.661514) (xy 51.584699 67.766013) (xy 51.627612 67.811774) (xy 51.666486 67.853509) (xy 51.701521 67.891442) (xy 51.732916 67.925797) (xy 51.760869 67.956801) (xy 51.785582 67.984676) (xy 51.807252 68.009649) (xy 51.82608 68.031943) (xy 51.842264 68.051784) (xy 51.856005 68.069395) (xy 51.8675 68.085003) (xy 51.87695 68.09883) (xy 51.884554 68.111103) (xy 51.887726 68.116726) (xy 51.890511 68.122045) (xy 51.892935 68.127088) (xy 51.895021 68.131882) (xy 51.896796 68.136456) (xy 51.898283 68.140838) (xy 51.899508 68.145055) (xy 51.900496 68.149137) (xy 51.90186 68.157005) (xy 51.902573 68.164666) (xy 51.902836 68.172345) (xy 51.902808 68.188654) (xy 51.902661 68.197744) (xy 51.902225 68.206822) (xy 51.901503 68.215874) (xy 51.900501 68.22489) (xy 51.899223 68.233856) (xy 51.897674 68.242761) (xy 51.895858 68.251591) (xy 51.893779 68.260335) (xy 51.891443 68.26898) (xy 51.888854 68.277514) (xy 51.886017 68.285924) (xy 51.882936 68.294199) (xy 51.879616 68.302325) (xy 51.876061 68.310291) (xy 51.872276 68.318084) (xy 51.868266 68.325691) (xy 51.864035 68.333101) (xy 51.859587 68.340301) (xy 51.854928 68.347278) (xy 51.850063 68.354021) (xy 51.844995 68.360517) (xy 51.839729 68.366753) (xy 51.83427 68.372718) (xy 51.828622 68.378398) (xy 51.82279 68.383782) (xy 51.816779 68.388858) (xy 51.810593 68.393612) (xy 51.804237 68.398032) (xy 51.797716 68.402107) (xy 51.791034 68.405823) (xy 51.784195 68.409169) (xy 51.777204 68.412132) (xy 50.505889 68.451597) (xy 47.789696 68.503317) (xy 45.077428 68.543177) (xy 43.817886 68.547063) (xy 43.812251 68.543658) (xy 43.806364 68.539791) (xy 43.80027 68.53549) (xy 43.79401 68.530789) (xy 43.787627 68.525717) (xy 43.781165 68.520305) (xy 43.774667 68.514584) (xy 43.768174 68.508585) (xy 43.76173 68.502339) (xy 43.755378 68.495878) (xy 43.74916 68.489231) (xy 43.74312 68.482429) (xy 43.7373 68.475505) (xy 43.731742 68.468487) (xy 43.726491 68.461409) (xy 43.721589 68.454299) (xy 43.721577 68.454297) (xy 43.712698 68.440857) (xy 43.704891 68.427416) (xy 43.698152 68.413976) (xy 43.692473 68.400536) (xy 43.68785 68.387095) (xy 43.684275 68.373655) (xy 43.681743 68.360214) (xy 43.680246 68.346774) (xy 43.67978 68.333334) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp 5fa1a16d-d491-44f1-9e28-3603334a9eee)) (gr_poly (pts (xy 47.417283 53.33854) (xy 47.419298 53.310973) (xy 47.422659 53.283638) (xy 47.427346 53.256582) (xy 47.433341 53.229851) (xy 47.440624 53.203491) (xy 47.449176 53.177547) (xy 47.45898 53.152066) (xy 47.470015 53.127094) (xy 47.482262 53.102677) (xy 47.495703 53.07886) (xy 47.510319 53.055689) (xy 47.52609 53.033211) (xy 47.542998 53.011472) (xy 47.561023 52.990517) (xy 47.580148 52.970393) (xy 47.600246 52.951241) (xy 47.621176 52.933187) (xy 47.642891 52.91625) (xy 47.665346 52.900448) (xy 47.688493 52.885801) (xy 47.712287 52.872328) (xy 47.736681 52.860047) (xy 47.76163 52.848978) (xy 47.787086 52.83914) (xy 47.813004 52.830552) (xy 47.839338 52.823233) (xy 47.86604 52.817202) (xy 47.893065 52.812478) (xy 47.920367 52.80908) (xy 47.9479 52.807028) (xy 47.975616 52.806339) (xy 48.003369 52.807038) (xy 48.030933 52.809101) (xy 48.058262 52.812509) (xy 48.08531 52.817243) (xy 48.11203 52.823284) (xy 48.138378 52.830613) (xy 48.164307 52.839211) (xy 48.189771 52.849058) (xy 48.214724 52.860137) (xy 48.23912 52.872426) (xy 48.262914 52.885908) (xy 48.286059 52.900564) (xy 48.30851 52.916374) (xy 48.33022 52.933319) (xy 48.351143 52.951381) (xy 48.371234 52.970539) (xy 48.39035 52.99067) (xy 48.408368 53.011631) (xy 48.425267 53.033377) (xy 48.44103 53.05586) (xy 48.455637 53.079036) (xy 48.469069 53.102858) (xy 48.481307 53.12728) (xy 48.492333 53.152256) (xy 48.502126 53.177741) (xy 48.510669 53.203688) (xy 48.517943 53.230051) (xy 48.523928 53.256784) (xy 48.528605 53.283842) (xy 48.531955 53.311177) (xy 48.53396 53.338746) (xy 48.534601 53.3665) (xy 48.534601 54.182134) (xy 48.533862 54.210895) (xy 48.531693 54.239278) (xy 48.528129 54.267248) (xy 48.523205 54.29477) (xy 48.516956 54.32181) (xy 48.509417 54.348331) (xy 48.500624 54.374299) (xy 48.490611 54.399679) (xy 48.479413 54.424435) (xy 48.467065 54.448534) (xy 48.453603 54.471938) (xy 48.439062 54.494614) (xy 48.423477 54.516527) (xy 48.406882 54.537641) (xy 48.389313 54.55792) (xy 48.370806 54.577331) (xy 48.351394 54.595838) (xy 48.331114 54.613406) (xy 48.31 54.63) (xy 48.288087 54.645584) (xy 48.265411 54.660125) (xy 48.242007 54.673585) (xy 48.217909 54.685931) (xy 48.193152 54.697128) (xy 48.167773 54.70714) (xy 48.141806 54.715932) (xy 48.115285 54.723469) (xy 48.088247 54.729717) (xy 48.060726 54.734639) (xy 48.032757 54.738201) (xy 48.004375 54.740368) (xy 47.975616 54.741105) (xy 47.946856 54.740367) (xy 47.918473 54.7382) (xy 47.890503 54.734637) (xy 47.86298 54.729714) (xy 47.835941 54.723465) (xy 47.80942 54.715927) (xy 47.783451 54.707135) (xy 47.758071 54.697122) (xy 47.733315 54.685925) (xy 47.709216 54.673578) (xy 47.685811 54.660117) (xy 47.663135 54.645576) (xy 47.641222 54.629991) (xy 47.620108 54.613397) (xy 47.599828 54.595829) (xy 47.580417 54.577321) (xy 47.561909 54.55791) (xy 47.544341 54.537629) (xy 47.527747 54.516515) (xy 47.512162 54.494603) (xy 47.497621 54.471926) (xy 47.48416 54.448521) (xy 47.471813 54.424423) (xy 47.460616 54.399666) (xy 47.450603 54.374286) (xy 47.44181 54.348318) (xy 47.434272 54.321796) (xy 47.428024 54.294757) (xy 47.423101 54.267234) (xy 47.419538 54.239264) (xy 47.41737 54.210881) (xy 47.416632 54.182121) (xy 47.416632 53.366294) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp 61211557-9c80-40cb-8200-e7257e2e0bf5)) (gr_arc (start 66.937741 48.748461) (mid 63.758888 45.025614) (end 67.31 41.656) (stroke (width 0.12) (type dash)) (layer "B.SilkS") (tstamp 63bdb262-bb0a-4980-978a-80866fe0e1f2)) (gr_poly (pts (xy 83.074992 85.835854) (xy 83.072824 85.864237) (xy 83.06926 85.892207) (xy 83.064336 85.91973) (xy 83.058087 85.946769) (xy 83.050548 85.97329) (xy 83.041754 85.999258) (xy 83.031741 86.024638) (xy 83.020543 86.049395) (xy 83.008195 86.073493) (xy 82.994734 86.096897) (xy 82.980192 86.119574) (xy 82.964607 86.141486) (xy 82.948012 86.1626) (xy 82.930444 86.18288) (xy 82.911936 86.202291) (xy 82.892525 86.220798) (xy 82.872244 86.238366) (xy 82.85113 86.254959) (xy 82.829218 86.270544) (xy 82.806541 86.285084) (xy 82.783137 86.298545) (xy 82.759039 86.310891) (xy 82.734283 86.322087) (xy 82.708903 86.332099) (xy 82.682936 86.340891) (xy 82.656416 86.348429) (xy 82.629377 86.354676) (xy 82.601856 86.359598) (xy 82.573887 86.36316) (xy 82.545506 86.365327) (xy 82.516747 86.366064) (xy 82.487986 86.365327) (xy 82.459603 86.363159) (xy 82.431632 86.359596) (xy 82.40411 86.354673) (xy 82.37707 86.348425) (xy 82.350549 86.340887) (xy 82.32458 86.332094) (xy 82.2992 86.322082) (xy 82.274443 86.310885) (xy 82.250344 86.298538) (xy 82.226939 86.285077) (xy 82.204263 86.270537) (xy 82.18235 86.254952) (xy 82.161236 86.238358) (xy 82.140955 86.220789) (xy 82.121544 86.202282) (xy 82.103036 86.182871) (xy 82.085468 86.162591) (xy 82.068874 86.141477) (xy 82.053288 86.119564) (xy 82.038748 86.096887) (xy 82.025286 86.073482) (xy 82.012939 86.049384) (xy 82.001742 86.024627) (xy 81.991729 85.999247) (xy 81.982936 85.973279) (xy 81.975398 85.946757) (xy 81.96915 85.919717) (xy 81.964227 85.892195) (xy 81.960663 85.864224) (xy 81.958495 85.835841) (xy 81.957758 85.80708) (xy 81.957758 82.601993) (xy 81.958496 82.573231) (xy 81.960664 82.544848) (xy 81.964228 82.516878) (xy 81.969152 82.489355) (xy 81.975401 82.462316) (xy 81.982939 82.435794) (xy 81.991733 82.409826) (xy 82.001746 82.384446) (xy 82.012944 82.359689) (xy 82.025291 82.335591) (xy 82.038753 82.312186) (xy 82.053294 82.28951) (xy 82.06888 82.267597) (xy 82.085474 82.246483) (xy 82.103043 82.226203) (xy 82.121551 82.206792) (xy 82.140962 82.188285) (xy 82.161243 82.170717) (xy 82.182357 82.154124) (xy 82.20427 82.138539) (xy 82.226947 82.123999) (xy 82.250351 82.110538) (xy 82.27445 82.098192) (xy 82.299206 82.086995) (xy 82.324586 82.076983) (xy 82.350554 82.068191) (xy 82.377075 82.060654) (xy 82.404114 82.054406) (xy 82.431635 82.049484) (xy 82.459605 82.045921) (xy 82.487987 82.043754) (xy 82.516747 82.043017) (xy 82.545507 82.043755) (xy 82.57389 82.045923) (xy 82.60186 82.049486) (xy 82.629383 82.054409) (xy 82.656422 82.060658) (xy 82.682944 82.068196) (xy 82.708912 82.076989) (xy 82.734292 82.087001) (xy 82.759048 82.098198) (xy 82.783147 82.110545) (xy 82.806552 82.124006) (xy 82.829228 82.138547) (xy 82.851141 82.154132) (xy 82.872255 82.170726) (xy 82.892535 82.188295) (xy 82.911946 82.206802) (xy 82.930454 82.226213) (xy 82.948022 82.246494) (xy 82.964616 82.267608) (xy 82.980201 82.28952) (xy 82.994742 82.312197) (xy 83.008203 82.335602) (xy 83.02055 82.3597) (xy 83.031747 82.384457) (xy 83.04176 82.409837) (xy 83.050553 82.435805) (xy 83.058091 82.462326) (xy 83.064339 82.489366) (xy 83.069262 82.516888) (xy 83.072825 82.544858) (xy 83.074993 82.573241) (xy 83.075731 82.602002) (xy 83.075731 85.807094) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp 6cb80317-d51c-493a-8fe1-1682bbaf86d9)) (gr_poly (pts (xy 52.641587 57.765058) (xy 52.643756 57.736675) (xy 52.647319 57.708705) (xy 52.652243 57.681183) (xy 52.658492 57.654144) (xy 52.666031 57.627623) (xy 52.674825 57.601655) (xy 52.684838 57.576275) (xy 52.696036 57.551518) (xy 52.708383 57.52742) (xy 52.721845 57.504016) (xy 52.736386 57.48134) (xy 52.751972 57.459428) (xy 52.768566 57.438314) (xy 52.786135 57.418034) (xy 52.804643 57.398624) (xy 52.824054 57.380117) (xy 52.844335 57.362549) (xy 52.865449 57.345955) (xy 52.887361 57.330371) (xy 52.910038 57.315831) (xy 52.933442 57.30237) (xy 52.95754 57.290024) (xy 52.982296 57.278828) (xy 53.007676 57.268816) (xy 53.033643 57.260024) (xy 53.060164 57.252487) (xy 53.087202 57.246239) (xy 53.114723 57.241317) (xy 53.142692 57.237754) (xy 53.171074 57.235587) (xy 53.199833 57.23485) (xy 53.228594 57.235588) (xy 53.256977 57.237756) (xy 53.284947 57.241319) (xy 53.312469 57.246242) (xy 53.339509 57.252491) (xy 53.36603 57.260029) (xy 53.391998 57.268822) (xy 53.417378 57.278834) (xy 53.442135 57.290031) (xy 53.466233 57.302378) (xy 53.489638 57.31584) (xy 53.512315 57.33038) (xy 53.534228 57.345965) (xy 53.555342 57.362559) (xy 53.575622 57.380128) (xy 53.595033 57.398635) (xy 53.613541 57.418046) (xy 53.631109 57.438327) (xy 53.647703 57.459441) (xy 53.663288 57.481353) (xy 53.677829 57.50403) (xy 53.69129 57.527435) (xy 53.703637 57.551533) (xy 53.714834 57.57629) (xy 53.724847 57.60167) (xy 53.73364 57.627638) (xy 53.741178 57.654159) (xy 53.747426 57.681199) (xy 53.752349 57.708721) (xy 53.755912 57.736691) (xy 53.75808 57.765074) (xy 53.758817 57.793835) (xy 53.758817 58.61065) (xy 53.758079 58.639411) (xy 53.75591 58.667793) (xy 53.752346 58.695764) (xy 53.747422 58.723286) (xy 53.741174 58.750325) (xy 53.733635 58.776846) (xy 53.724841 58.802814) (xy 53.714828 58.828194) (xy 53.70363 58.85295) (xy 53.691283 58.877048) (xy 53.677821 58.900453) (xy 53.66328 58.923129) (xy 53.647694 58.945041) (xy 53.631099 58.966154) (xy 53.613531 58.986434) (xy 53.595023 59.005845) (xy 53.575612 59.024352) (xy 53.555331 59.04192) (xy 53.534217 59.058513) (xy 53.512304 59.074098) (xy 53.489628 59.088638) (xy 53.466224 59.102098) (xy 53.442126 59.114444) (xy 53.417369 59.125641) (xy 53.39199 59.135653) (xy 53.366022 59.144445) (xy 53.339502 59.151982) (xy 53.312463 59.15823) (xy 53.284942 59.163152) (xy 53.256973 59.166714) (xy 53.228592 59.168881) (xy 53.199833 59.169618) (xy 53.171072 59.168881) (xy 53.142689 59.166713) (xy 53.114719 59.163149) (xy 53.087197 59.158226) (xy 53.060157 59.151978) (xy 53.033636 59.14444) (xy 53.007668 59.135647) (xy 52.982287 59.125634) (xy 52.957531 59.114437) (xy 52.933432 59.10209) (xy 52.910027 59.088629) (xy 52.887351 59.074088) (xy 52.865438 59.058503) (xy 52.844324 59.041909) (xy 52.824044 59.024341) (xy 52.804632 59.005834) (xy 52.786125 58.986422) (xy 52.768557 58.966142) (xy 52.751962 58.945028) (xy 52.736377 58.923115) (xy 52.721837 58.900439) (xy 52.708375 58.877034) (xy 52.696029 58.852936) (xy 52.684831 58.828179) (xy 52.674819 58.802799) (xy 52.666026 58.776831) (xy 52.658488 58.750309) (xy 52.65224 58.72327) (xy 52.647317 58.695748) (xy 52.643754 58.667778) (xy 52.641586 58.639395) (xy 52.640848 58.610634) (xy 52.640848 57.793819) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp 6d238049-4184-465b-bb3e-c61bbbb9458e)) (gr_poly (pts (xy 81.333584 81.046408) (xy 81.331415 81.074791) (xy 81.327852 81.102761) (xy 81.322928 81.130283) (xy 81.316679 81.157322) (xy 81.30914 81.183843) (xy 81.300346 81.209811) (xy 81.290333 81.235191) (xy 81.279135 81.259948) (xy 81.266788 81.284046) (xy 81.253326 81.30745) (xy 81.238785 81.330126) (xy 81.223199 81.352038) (xy 81.206605 81.373152) (xy 81.189036 81.393432) (xy 81.170528 81.412842) (xy 81.151117 81.431349) (xy 81.130836 81.448917) (xy 81.109722 81.465511) (xy 81.08781 81.481095) (xy 81.065133 81.495635) (xy 81.041729 81.509096) (xy 81.017631 81.521442) (xy 80.992875 81.532638) (xy 80.967495 81.54265) (xy 80.941528 81.551442) (xy 80.915007 81.558979) (xy 80.887969 81.565227) (xy 80.860448 81.570149) (xy 80.832479 81.573712) (xy 80.804097 81.575879) (xy 80.775338 81.576616) (xy 80.746577 81.575878) (xy 80.718194 81.57371) (xy 80.690224 81.570147) (xy 80.662702 81.565224) (xy 80.635662 81.558975) (xy 80.609141 81.551437) (xy 80.583173 81.542644) (xy 80.557793 81.532632) (xy 80.533036 81.521435) (xy 80.508938 81.509088) (xy 80.485533 81.495626) (xy 80.462856 81.481086) (xy 80.440943 81.465501) (xy 80.419829 81.448907) (xy 80.399549 81.431338) (xy 80.380138 81.412831) (xy 80.36163 81.39342) (xy 80.344062 81.373139) (xy 80.327468 81.352025) (xy 80.311883 81.330113) (xy 80.297342 81.307436) (xy 80.283881 81.284031) (xy 80.271534 81.259933) (xy 80.260337 81.235176) (xy 80.250324 81.209796) (xy 80.241531 81.183828) (xy 80.233993 81.157307) (xy 80.227745 81.130267) (xy 80.222822 81.102745) (xy 80.219259 81.074775) (xy 80.217091 81.046392) (xy 80.216354 81.017631) (xy 80.216354 80.200816) (xy 80.217092 80.172055) (xy 80.219261 80.143673) (xy 80.222825 80.115702) (xy 80.227749 80.08818) (xy 80.233997 80.061141) (xy 80.241536 80.03462) (xy 80.25033 80.008652) (xy 80.260343 79.983272) (xy 80.271541 79.958516) (xy 80.283888 79.934418) (xy 80.29735 79.911013) (xy 80.311891 79.888337) (xy 80.327477 79.866425) (xy 80.344072 79.845312) (xy 80.36164 79.825032) (xy 80.380148 79.805621) (xy 80.399559 79.787114) (xy 80.41984 79.769546) (xy 80.440954 79.752953) (xy 80.462867 79.737368) (xy 80.485543 79.722828) (xy 80.508947 79.709368) (xy 80.533045 79.697022) (xy 80.557802 79.685825) (xy 80.583181 79.675813) (xy 80.609149 79.667021) (xy 80.635669 79.659484) (xy 80.662708 79.653236) (xy 80.690229 79.648314) (xy 80.718198 79.644752) (xy 80.746579 79.642585) (xy 80.775338 79.641848) (xy 80.804099 79.642585) (xy 80.832482 79.644753) (xy 80.860452 79.648317) (xy 80.887974 79.65324) (xy 80.915014 79.659488) (xy 80.941535 79.667026) (xy 80.967503 79.675819) (xy 80.992884 79.685832) (xy 81.01764 79.697029) (xy 81.041739 79.709376) (xy 81.065144 79.722837) (xy 81.08782 79.737378) (xy 81.109733 79.752963) (xy 81.130847 79.769557) (xy 81.151127 79.787125) (xy 81.170539 79.805632) (xy 81.189046 79.825044) (xy 81.206614 79.845324) (xy 81.223209 79.866438) (xy 81.238794 79.888351) (xy 81.253334 79.911027) (xy 81.266796 79.934432) (xy 81.279142 79.95853) (xy 81.29034 79.983287) (xy 81.300352 80.008667) (xy 81.309145 80.034635) (xy 81.316683 80.061157) (xy 81.322931 80.088196) (xy 81.327854 80.115718) (xy 81.331417 80.143688) (xy 81.333585 80.172071) (xy 81.334323 80.200832) (xy 81.334323 81.017647) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp 70e73454-a612-45d2-9718-2ed416b07583)) (gr_poly (pts (xy 45.67596 55.96506) (xy 45.678129 55.936677) (xy 45.681693 55.908707) (xy 45.686617 55.881185) (xy 45.692866 55.854146) (xy 45.700405 55.827624) (xy 45.709198 55.801656) (xy 45.719211 55.776276) (xy 45.730409 55.75152) (xy 45.742757 55.727422) (xy 45.756219 55.704017) (xy 45.77076 55.681341) (xy 45.786345 55.659428) (xy 45.80294 55.638315) (xy 45.820509 55.618035) (xy 45.839016 55.598624) (xy 45.858428 55.580117) (xy 45.878708 55.562549) (xy 45.899822 55.545955) (xy 45.921735 55.530371) (xy 45.944411 55.515831) (xy 45.967815 55.50237) (xy 45.991913 55.490024) (xy 46.01667 55.478827) (xy 46.042049 55.468815) (xy 46.068016 55.460023) (xy 46.094537 55.452486) (xy 46.121575 55.446239) (xy 46.149096 55.441316) (xy 46.177065 55.437754) (xy 46.205447 55.435587) (xy 46.234206 55.43485) (xy 46.262966 55.435588) (xy 46.291349 55.437756) (xy 46.319319 55.441319) (xy 46.346842 55.446242) (xy 46.373881 55.45249) (xy 46.400402 55.460028) (xy 46.426371 55.468821) (xy 46.451751 55.478833) (xy 46.476507 55.49003) (xy 46.500606 55.502377) (xy 46.524011 55.515839) (xy 46.546687 55.530379) (xy 46.5686 55.545964) (xy 46.589714 55.562558) (xy 46.609994 55.580127) (xy 46.629405 55.598634) (xy 46.647913 55.618046) (xy 46.665481 55.638326) (xy 46.682075 55.65944) (xy 46.69766 55.681353) (xy 46.712201 55.704029) (xy 46.725662 55.727434) (xy 46.738009 55.751533) (xy 46.749206 55.776289) (xy 46.759219 55.801669) (xy 46.768012 55.827638) (xy 46.77555 55.854159) (xy 46.781798 55.881199) (xy 46.786721 55.908721) (xy 46.790284 55.936691) (xy 46.792452 55.965074) (xy 46.79319 55.993835) (xy 46.79319 61.268465) (xy 46.792451 61.297225) (xy 46.790282 61.325608) (xy 46.786719 61.353578) (xy 46.781794 61.381101) (xy 46.775546 61.40814) (xy 46.768007 61.434661) (xy 46.759213 61.460629) (xy 46.7492 61.486009) (xy 46.738002 61.510765) (xy 46.725654 61.534863) (xy 46.712192 61.558268) (xy 46.697651 61.580943) (xy 46.682066 61.602856) (xy 46.665471 61.623969) (xy 46.647903 61.644249) (xy 46.629395 61.66366) (xy 46.609983 61.682167) (xy 46.589703 61.699734) (xy 46.568589 61.716328) (xy 46.546677 61.731912) (xy 46.524 61.746452) (xy 46.500596 61.759913) (xy 46.476498 61.772259) (xy 46.451742 61.783456) (xy 46.426362 61.793467) (xy 46.400395 61.80226) (xy 46.373874 61.809797) (xy 46.346836 61.816044) (xy 46.319315 61.820967) (xy 46.291346 61.824529) (xy 46.262965 61.826696) (xy 46.234206 61.827433) (xy 46.205445 61.826695) (xy 46.177062 61.824527) (xy 46.149092 61.820964) (xy 46.121569 61.816041) (xy 46.09453 61.809793) (xy 46.068009 61.802255) (xy 46.042041 61.793462) (xy 46.016661 61.783449) (xy 45.991904 61.772252) (xy 45.967805 61.759905) (xy 45.944401 61.746444) (xy 45.921724 61.731903) (xy 45.899811 61.716318) (xy 45.878697 61.699724) (xy 45.858417 61.682156) (xy 45.839006 61.663648) (xy 45.820499 61.644237) (xy 45.80293 61.623957) (xy 45.786336 61.602843) (xy 45.770751 61.58093) (xy 45.75621 61.558254) (xy 45.742749 61.534849) (xy 45.730402 61.51075) (xy 45.719205 61.485994) (xy 45.709192 61.460614) (xy 45.7004 61.434646) (xy 45.692861 61.408124) (xy 45.686613 61.381085) (xy 45.68169 61.353563) (xy 45.678127 61.325592) (xy 45.675959 61.297209) (xy 45.675221 61.268449) (xy 45.675221 55.993821) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp 7e0259d6-7738-4fe1-a7a9-733fcec259bb)) (gr_line (start 67.31 41.656) (end 67.31 41.148) (stroke (width 0.12) (type default)) (layer "B.SilkS") (tstamp 8d34fe5d-31d0-4923-abb1-1f669a699173)) (gr_poly (pts (xy 90.040712 83.198134) (xy 90.038707 83.225702) (xy 90.035355 83.253037) (xy 90.030677 83.280095) (xy 90.024691 83.306828) (xy 90.017417 83.33319) (xy 90.008873 83.359137) (xy 89.999079 83.384621) (xy 89.988052 83.409597) (xy 89.975813 83.434018) (xy 89.96238 83.45784) (xy 89.947773 83.481015) (xy 89.932009 83.503498) (xy 89.915109 83.525244) (xy 89.897091 83.546205) (xy 89.877973 83.566336) (xy 89.857882 83.585494) (xy 89.836957 83.603555) (xy 89.815247 83.6205) (xy 89.792796 83.636309) (xy 89.769651 83.650964) (xy 89.745858 83.664446) (xy 89.721462 83.676734) (xy 89.696509 83.687811) (xy 89.671046 83.697658) (xy 89.645118 83.706254) (xy 89.618772 83.713582) (xy 89.592053 83.719622) (xy 89.565007 83.724355) (xy 89.537681 83.727762) (xy 89.51012 83.729824) (xy 89.482369 83.730522) (xy 89.454616 83.729823) (xy 89.427053 83.72776) (xy 89.399724 83.724352) (xy 89.372676 83.719618) (xy 89.345956 83.713577) (xy 89.319608 83.706248) (xy 89.29368 83.69765) (xy 89.268216 83.687803) (xy 89.243263 83.676725) (xy 89.218867 83.664435) (xy 89.195073 83.650953) (xy 89.171929 83.636297) (xy 89.149478 83.620487) (xy 89.127768 83.603542) (xy 89.106845 83.585481) (xy 89.086754 83.566322) (xy 89.067638 83.546191) (xy 89.04962 83.52523) (xy 89.03272 83.503485) (xy 89.016958 83.481001) (xy 89.002351 83.457826) (xy 88.988918 83.434005) (xy 88.97668 83.409583) (xy 88.965654 83.384607) (xy 88.95586 83.359123) (xy 88.947317 83.333177) (xy 88.940044 83.306814) (xy 88.934059 83.280081) (xy 88.929381 83.253024) (xy 88.926031 83.225688) (xy 88.924026 83.19812) (xy 88.923385 83.170366) (xy 88.923385 74.938903) (xy 88.924133 74.910142) (xy 88.926312 74.88176) (xy 88.929885 74.853791) (xy 88.934818 74.82627) (xy 88.941076 74.799233) (xy 88.948624 74.772714) (xy 88.957425 74.746749) (xy 88.967446 74.721373) (xy 88.978652 74.69662) (xy 88.991006 74.672526) (xy 89.004473 74.649126) (xy 89.01902 74.626455) (xy 89.03461 74.604548) (xy 89.051209 74.58344) (xy 89.068781 74.563166) (xy 89.087291 74.543761) (xy 89.106704 74.525261) (xy 89.126985 74.5077) (xy 89.148098 74.491114) (xy 89.17001 74.475537) (xy 89.192683 74.461005) (xy 89.216085 74.447552) (xy 89.240178 74.435214) (xy 89.264928 74.424026) (xy 89.290301 74.414023) (xy 89.31626 74.40524) (xy 89.34277 74.397712) (xy 89.369798 74.391474) (xy 89.397306 74.386561) (xy 89.425261 74.383009) (xy 89.453627 74.380851) (xy 89.482369 74.380124) (xy 89.51113 74.380862) (xy 89.539513 74.38303) (xy 89.567484 74.386593) (xy 89.595006 74.391516) (xy 89.622046 74.397765) (xy 89.648567 74.405303) (xy 89.674536 74.414096) (xy 89.699916 74.424108) (xy 89.724673 74.435306) (xy 89.748771 74.447652) (xy 89.772176 74.461114) (xy 89.794852 74.475654) (xy 89.816765 74.49124) (xy 89.837879 74.507834) (xy 89.858159 74.525402) (xy 89.877571 74.54391) (xy 89.896078 74.563321) (xy 89.913646 74.583601) (xy 89.930241 74.604716) (xy 89.945826 74.626629) (xy 89.960366 74.649305) (xy 89.973827 74.67271) (xy 89.986174 74.696809) (xy 89.997371 74.721566) (xy 90.007384 74.746946) (xy 90.016176 74.772914) (xy 90.023714 74.799436) (xy 90.029962 74.826476) (xy 90.034885 74.853998) (xy 90.038448 74.881969) (xy 90.040616 74.910352) (xy 90.041354 74.939113) (xy 90.041354 83.170379) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp 936d413b-cd00-4547-a6fb-8972dcde761d)) (gr_poly (pts (xy 84.816494 86.767665) (xy 84.814488 86.795233) (xy 84.811136 86.822569) (xy 84.806458 86.849626) (xy 84.800473 86.876359) (xy 84.793198 86.902722) (xy 84.784655 86.928668) (xy 84.77486 86.954152) (xy 84.763834 86.979128) (xy 84.751595 87.00355) (xy 84.738162 87.027371) (xy 84.723554 87.050546) (xy 84.707791 87.07303) (xy 84.69089 87.094775) (xy 84.672872 87.115736) (xy 84.653755 87.135867) (xy 84.633663 87.155025) (xy 84.612739 87.173087) (xy 84.591028 87.190031) (xy 84.568578 87.205841) (xy 84.545433 87.220496) (xy 84.521639 87.233977) (xy 84.497243 87.246266) (xy 84.47229 87.257343) (xy 84.446827 87.267189) (xy 84.4209 87.275786) (xy 84.394553 87.283113) (xy 84.367834 87.289153) (xy 84.340789 87.293886) (xy 84.313462 87.297293) (xy 84.285901 87.299355) (xy 84.258151 87.300053) (xy 84.230398 87.299354) (xy 84.202834 87.297291) (xy 84.175505 87.293883) (xy 84.148458 87.289149) (xy 84.121737 87.283108) (xy 84.09539 87.275779) (xy 84.069461 87.267182) (xy 84.043997 87.257334) (xy 84.019044 87.246256) (xy 83.994648 87.233966) (xy 83.970855 87.220484) (xy 83.94771 87.205828) (xy 83.92526 87.190018) (xy 83.90355 87.173073) (xy 83.882626 87.155012) (xy 83.862535 87.135853) (xy 83.843419 87.115722) (xy 83.825401 87.094761) (xy 83.808502 87.073016) (xy 83.792739 87.050533) (xy 83.778132 87.027357) (xy 83.7647 87.003536) (xy 83.752461 86.979114) (xy 83.741436 86.954138) (xy 83.731642 86.928654) (xy 83.723098 86.902708) (xy 83.715825 86.876345) (xy 83.70984 86.849612) (xy 83.705163 86.822555) (xy 83.701812 86.795219) (xy 83.699807 86.767651) (xy 83.699166 86.739897) (xy 83.699166 79.327767) (xy 83.699905 79.299006) (xy 83.702074 79.270623) (xy 83.705638 79.242653) (xy 83.710562 79.215131) (xy 83.716811 79.188092) (xy 83.72435 79.161571) (xy 83.733143 79.135603) (xy 83.743157 79.110223) (xy 83.754354 79.085467) (xy 83.766702 79.061369) (xy 83.780164 79.037964) (xy 83.794705 79.015288) (xy 83.81029 78.993376) (xy 83.826885 78.972262) (xy 83.844454 78.951983) (xy 83.862961 78.932572) (xy 83.882373 78.914065) (xy 83.902653 78.896497) (xy 83.923767 78.879904) (xy 83.94568 78.864319) (xy 83.968356 78.849779) (xy 83.99176 78.836319) (xy 84.015858 78.823973) (xy 84.040615 78.812776) (xy 84.065994 78.802764) (xy 84.091961 78.793972) (xy 84.118482 78.786435) (xy 84.14552 78.780187) (xy 84.173041 78.775265) (xy 84.20101 78.771703) (xy 84.229392 78.769535) (xy 84.258151 78.768799) (xy 84.286911 78.769536) (xy 84.315294 78.771704) (xy 84.343264 78.775267) (xy 84.370787 78.780191) (xy 84.397826 78.786439) (xy 84.424347 78.793977) (xy 84.450316 78.80277) (xy 84.475696 78.812782) (xy 84.500452 78.82398) (xy 84.524551 78.836326) (xy 84.547956 78.849788) (xy 84.570632 78.864328) (xy 84.592545 78.879913) (xy 84.613659 78.896508) (xy 84.633939 78.914076) (xy 84.65335 78.932583) (xy 84.671858 78.951995) (xy 84.689426 78.972275) (xy 84.70602 78.993389) (xy 84.721605 79.015302) (xy 84.736146 79.037978) (xy 84.749607 79.061383) (xy 84.761954 79.085481) (xy 84.773151 79.110238) (xy 84.783164 79.135618) (xy 84.791957 79.161586) (xy 84.799495 79.188107) (xy 84.805743 79.215147) (xy 84.810666 79.242669) (xy 84.814229 79.270639) (xy 84.816397 79.299022) (xy 84.817135 79.327783) (xy 84.817135 86.739911) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp 9d0d1a3b-daa8-4bd2-888d-1269bdcc8376)) (gr_poly (pts (xy 47.38217 57.334834) (xy 47.384233 57.30727) (xy 47.387641 57.279942) (xy 47.392375 57.252894) (xy 47.398416 57.226174) (xy 47.405744 57.199827) (xy 47.414342 57.173898) (xy 47.424189 57.148435) (xy 47.435267 57.123482) (xy 47.447557 57.099086) (xy 47.461039 57.075292) (xy 47.475695 57.052147) (xy 47.491505 57.029697) (xy 47.50845 57.007987) (xy 47.526512 56.987063) (xy 47.545671 56.966972) (xy 47.565803 56.947855) (xy 47.586764 56.929837) (xy 47.60851 56.912937) (xy 47.630993 56.897174) (xy 47.654169 56.882567) (xy 47.677991 56.869135) (xy 47.702413 56.856897) (xy 47.727389 56.845871) (xy 47.752874 56.836077) (xy 47.77882 56.827534) (xy 47.805183 56.820261) (xy 47.831916 56.814276) (xy 47.858974 56.809599) (xy 47.886309 56.806248) (xy 47.913878 56.804243) (xy 47.941632 56.803603) (xy 47.970393 56.80434) (xy 47.998776 56.806508) (xy 48.026746 56.810072) (xy 48.054268 56.814995) (xy 48.081308 56.821243) (xy 48.107829 56.828781) (xy 48.133797 56.837574) (xy 48.159177 56.847586) (xy 48.183934 56.858784) (xy 48.208032 56.871131) (xy 48.231437 56.884592) (xy 48.254113 56.899132) (xy 48.276026 56.914717) (xy 48.29714 56.931312) (xy 48.31742 56.94888) (xy 48.336832 56.967387) (xy 48.355339 56.986799) (xy 48.372907 57.007079) (xy 48.389502 57.028193) (xy 48.405087 57.050106) (xy 48.419627 57.072782) (xy 48.433089 57.096187) (xy 48.445435 57.120285) (xy 48.456633 57.145042) (xy 48.466645 57.170422) (xy 48.475438 57.19639) (xy 48.482976 57.222912) (xy 48.489224 57.249951) (xy 48.494148 57.277473) (xy 48.497711 57.305443) (xy 48.499879 57.333826) (xy 48.500616 57.362587) (xy 48.500616 58.60948) (xy 48.499878 58.638241) (xy 48.497709 58.666624) (xy 48.494145 58.694594) (xy 48.489221 58.722116) (xy 48.482972 58.749155) (xy 48.475433 58.775676) (xy 48.466639 58.801644) (xy 48.456626 58.827024) (xy 48.445428 58.851781) (xy 48.433081 58.875879) (xy 48.419619 58.899283) (xy 48.405078 58.921959) (xy 48.389492 58.943871) (xy 48.372898 58.964985) (xy 48.355329 58.985265) (xy 48.336821 59.004675) (xy 48.31741 59.023182) (xy 48.29713 59.04075) (xy 48.276016 59.057344) (xy 48.254103 59.072928) (xy 48.231427 59.087468) (xy 48.208022 59.100929) (xy 48.183924 59.113275) (xy 48.159168 59.124471) (xy 48.133789 59.134483) (xy 48.107821 59.143275) (xy 48.081301 59.150813) (xy 48.054263 59.15706) (xy 48.026741 59.161982) (xy 47.998773 59.165545) (xy 47.970391 59.167712) (xy 47.941632 59.168449) (xy 47.913878 59.167808) (xy 47.886309 59.165803) (xy 47.858974 59.162453) (xy 47.831916 59.157775) (xy 47.805183 59.151791) (xy 47.77882 59.144517) (xy 47.752874 59.135974) (xy 47.727389 59.126181) (xy 47.702413 59.115155) (xy 47.677991 59.102917) (xy 47.654169 59.089485) (xy 47.630993 59.074878) (xy 47.60851 59.059115) (xy 47.586764 59.042216) (xy 47.565803 59.024198) (xy 47.545671 59.005082) (xy 47.526512 58.984991) (xy 47.50845 58.964067) (xy 47.491505 58.942358) (xy 47.475695 58.919907) (xy 47.461039 58.896762) (xy 47.447557 58.872968) (xy 47.435267 58.848572) (xy 47.424189 58.823619) (xy 47.414342 58.798155) (xy 47.405744 58.772226) (xy 47.398416 58.745878) (xy 47.392375 58.719158) (xy 47.387641 58.69211) (xy 47.384233 58.664781) (xy 47.38217 58.637217) (xy 47.381471 58.609464) (xy 47.381471 57.362587) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp a8b71b2a-44cb-44ab-b18a-5a8632420d8a)) (gr_poly (pts (xy 88.299211 82.846406) (xy 88.297042 82.874789) (xy 88.293478 82.902759) (xy 88.288554 82.930281) (xy 88.282305 82.95732) (xy 88.274766 82.983842) (xy 88.265973 83.00981) (xy 88.25596 83.03519) (xy 88.244762 83.059946) (xy 88.232414 83.084044) (xy 88.218952 83.107449) (xy 88.204411 83.130125) (xy 88.188826 83.152038) (xy 88.172231 83.173151) (xy 88.154662 83.193431) (xy 88.136155 83.212842) (xy 88.116743 83.231349) (xy 88.096463 83.248917) (xy 88.075349 83.265511) (xy 88.053436 83.281095) (xy 88.03076 83.295635) (xy 88.007356 83.309096) (xy 87.983258 83.321442) (xy 87.958501 83.332639) (xy 87.933122 83.342651) (xy 87.907155 83.351443) (xy 87.880634 83.35898) (xy 87.853596 83.365227) (xy 87.826075 83.37015) (xy 87.798106 83.373712) (xy 87.769724 83.375879) (xy 87.740965 83.376616) (xy 87.712205 83.375878) (xy 87.683822 83.37371) (xy 87.655852 83.370147) (xy 87.628329 83.365224) (xy 87.60129 83.358976) (xy 87.574769 83.351438) (xy 87.5488 83.342645) (xy 87.52342 83.332633) (xy 87.498664 83.321436) (xy 87.474565 83.309089) (xy 87.45116 83.295627) (xy 87.428484 83.281087) (xy 87.406571 83.265502) (xy 87.385457 83.248908) (xy 87.365177 83.231339) (xy 87.345766 83.212832) (xy 87.327258 83.19342) (xy 87.30969 83.17314) (xy 87.293096 83.152026) (xy 87.277511 83.130113) (xy 87.26297 83.107437) (xy 87.249509 83.084032) (xy 87.237162 83.059933) (xy 87.225965 83.035177) (xy 87.215952 83.009797) (xy 87.207159 82.983828) (xy 87.199621 82.957307) (xy 87.193373 82.930267) (xy 87.18845 82.902745) (xy 87.184887 82.874775) (xy 87.182719 82.846392) (xy 87.181981 82.817631) (xy 87.181981 77.543001) (xy 87.18272 77.514241) (xy 87.184889 77.485858) (xy 87.188452 77.457888) (xy 87.193377 77.430365) (xy 87.199625 77.403326) (xy 87.207164 77.376805) (xy 87.215958 77.350837) (xy 87.225971 77.325457) (xy 87.237169 77.300701) (xy 87.249517 77.276603) (xy 87.262979 77.253198) (xy 87.27752 77.230523) (xy 87.293105 77.20861) (xy 87.3097 77.187497) (xy 87.327268 77.167217) (xy 87.345776 77.147806) (xy 87.365188 77.129299) (xy 87.385468 77.111732) (xy 87.406582 77.095138) (xy 87.428494 77.079554) (xy 87.451171 77.065014) (xy 87.474575 77.051553) (xy 87.498673 77.039207) (xy 87.523429 77.02801) (xy 87.548809 77.017999) (xy 87.574776 77.009206) (xy 87.601297 77.001669) (xy 87.628335 76.995422) (xy 87.655856 76.990499) (xy 87.683825 76.986937) (xy 87.712206 76.98477) (xy 87.740965 76.984033) (xy 87.769726 76.984771) (xy 87.798109 76.986939) (xy 87.826079 76.990502) (xy 87.853602 76.995425) (xy 87.880641 77.001673) (xy 87.907162 77.009211) (xy 87.93313 77.018004) (xy 87.95851 77.028017) (xy 87.983267 77.039214) (xy 88.007366 77.051561) (xy 88.03077 77.065022) (xy 88.053447 77.079563) (xy 88.07536 77.095148) (xy 88.096474 77.111742) (xy 88.116754 77.12931) (xy 88.136165 77.147818) (xy 88.154672 77.167229) (xy 88.172241 77.187509) (xy 88.188835 77.208623) (xy 88.20442 77.230536) (xy 88.218961 77.253212) (xy 88.232422 77.276617) (xy 88.244769 77.300716) (xy 88.255966 77.325472) (xy 88.265979 77.350852) (xy 88.274771 77.37682) (xy 88.28231 77.403342) (xy 88.288558 77.430381) (xy 88.293481 77.457903) (xy 88.297044 77.485874) (xy 88.299212 77.514257) (xy 88.29995 77.543017) (xy 88.29995 82.817645) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp b2065ef3-7d36-4942-9375-a2c4398d7c7e)) (gr_poly (pts (xy 49.158677 52.043801) (xy 49.160683 52.016233) (xy 49.164035 51.988897) (xy 49.168713 51.96184) (xy 49.174698 51.935107) (xy 49.181973 51.908744) (xy 49.190516 51.882798) (xy 49.200311 51.857314) (xy 49.211337 51.832338) (xy 49.223576 51.807916) (xy 49.237009 51.784095) (xy 49.251617 51.76092) (xy 49.26738 51.738436) (xy 49.284281 51.716691) (xy 49.302299 51.69573) (xy 49.321416 51.675599) (xy 49.341508 51.656441) (xy 49.362432 51.638379) (xy 49.384143 51.621435) (xy 49.406593 51.605625) (xy 49.429738 51.59097) (xy 49.453532 51.577489) (xy 49.477928 51.5652) (xy 49.502881 51.554123) (xy 49.528344 51.544277) (xy 49.554271 51.53568) (xy 49.580618 51.528353) (xy 49.607337 51.522313) (xy 49.634382 51.51758) (xy 49.661709 51.514173) (xy 49.68927 51.512111) (xy 49.71702 51.511413) (xy 49.744773 51.512112) (xy 49.772337 51.514175) (xy 49.799666 51.517583) (xy 49.826713 51.522317) (xy 49.853434 51.528358) (xy 49.879781 51.535687) (xy 49.90571 51.544284) (xy 49.931174 51.554132) (xy 49.956127 51.56521) (xy 49.980523 51.5775) (xy 50.004316 51.590982) (xy 50.027461 51.605638) (xy 50.049911 51.621448) (xy 50.071621 51.638393) (xy 50.092545 51.656454) (xy 50.112636 51.675613) (xy 50.131752 51.695744) (xy 50.14977 51.716705) (xy 50.166669 51.73845) (xy 50.182432 51.760933) (xy 50.197039 51.784109) (xy 50.210471 51.80793) (xy 50.22271 51.832352) (xy 50.233735 51.857328) (xy 50.243529 51.882812) (xy 50.252073 51.908758) (xy 50.259346 51.935121) (xy 50.265331 51.961854) (xy 50.270008 51.988911) (xy 50.273359 52.016247) (xy 50.275364 52.043815) (xy 50.276005 52.071569) (xy 50.276005 59.483699) (xy 50.275266 59.51246) (xy 50.273097 59.540843) (xy 50.269533 59.568813) (xy 50.264609 59.596335) (xy 50.25836 59.623374) (xy 50.250821 59.649895) (xy 50.242028 59.675863) (xy 50.232014 59.701243) (xy 50.220817 59.725999) (xy 50.208469 59.750097) (xy 50.195007 59.773502) (xy 50.180466 59.796178) (xy 50.164881 59.81809) (xy 50.148286 59.839204) (xy 50.130717 59.859483) (xy 50.11221 59.878894) (xy 50.092798 59.897401) (xy 50.072518 59.914969) (xy 50.051404 59.931562) (xy 50.029491 59.947147) (xy 50.006815 59.961687) (xy 49.983411 59.975147) (xy 49.959313 59.987493) (xy 49.934556 59.99869) (xy 49.909177 60.008702) (xy 49.88321 60.017494) (xy 49.856689 60.025031) (xy 49.829651 60.031279) (xy 49.80213 60.036201) (xy 49.774161 60.039763) (xy 49.745779 60.041931) (xy 49.71702 60.042667) (xy 49.68826 60.04193) (xy 49.659877 60.039762) (xy 49.631907 60.036199) (xy 49.604384 60.031275) (xy 49.577345 60.025027) (xy 49.550824 60.017489) (xy 49.524855 60.008696) (xy 49.499475 59.998684) (xy 49.474719 59.987486) (xy 49.45062 59.97514) (xy 49.427215 59.961678) (xy 49.404539 59.947138) (xy 49.382626 59.931553) (xy 49.361512 59.914958) (xy 49.341232 59.89739) (xy 49.321821 59.878883) (xy 49.303313 59.859471) (xy 49.285745 59.839191) (xy 49.269151 59.818077) (xy 49.253566 59.796164) (xy 49.239025 59.773488) (xy 49.225564 59.750083) (xy 49.213217 59.725985) (xy 49.20202 59.701228) (xy 49.192007 59.675848) (xy 49.183214 59.64988) (xy 49.175676 59.623359) (xy 49.169428 59.596319) (xy 49.164505 59.568797) (xy 49.160942 59.540827) (xy 49.158774 59.512444) (xy 49.158036 59.483683) (xy 49.158036 52.071555) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp c708a42f-c186-4f73-8afe-1abba9c6e1f5)) (gr_poly (pts (xy 90.294833 70.491573) (xy 90.293258 70.505013) (xy 90.290671 70.518454) (xy 90.287079 70.531894) (xy 90.282488 70.545334) (xy 90.276904 70.558775) (xy 90.270334 70.572215) (xy 90.109792 70.776654) (xy 89.689399 71.29378) (xy 88.323419 72.954591) (xy 86.79886 74.804622) (xy 85.836396 75.977889) (xy 85.713586 76.128039) (xy 85.60049 76.264354) (xy 85.498581 76.385251) (xy 85.40933 76.48915) (xy 85.334211 76.57447) (xy 85.274694 76.639629) (xy 85.251247 76.664155) (xy 85.232253 76.683048) (xy 85.217895 76.69611) (xy 85.208358 76.703145) (xy 85.201892 76.706304) (xy 85.195096 76.709438) (xy 85.180755 76.715534) (xy 85.165825 76.721233) (xy 85.158293 76.723872) (xy 85.150797 76.726338) (xy 85.143399 76.728607) (xy 85.13616 76.730653) (xy 85.129142 76.732452) (xy 85.122405 76.733979) (xy 85.116011 76.73521) (xy 85.110022 76.73612) (xy 85.104497 76.736684) (xy 85.0995 76.736877) (xy 85.092755 76.736681) (xy 85.08588 76.736102) (xy 85.078889 76.73515) (xy 85.0718 76.733838) (xy 85.064628 76.732177) (xy 85.057389 76.730178) (xy 85.050099 76.727854) (xy 85.042775 76.725215) (xy 85.028089 76.719042) (xy 85.013457 76.71175) (xy 84.99901 76.703433) (xy 84.984876 76.694183) (xy 84.971184 76.684094) (xy 84.958062 76.673257) (xy 84.94564 76.661765) (xy 84.934046 76.649711) (xy 84.923409 76.637188) (xy 84.91849 76.630779) (xy 84.913858 76.624288) (xy 84.90953 76.617726) (xy 84.905522 76.611104) (xy 84.90185 76.604434) (xy 84.89853 76.597728) (xy 84.891185 76.564671) (xy 84.879031 76.493763) (xy 84.843047 76.256185) (xy 84.796075 75.920571) (xy 84.743609 75.522499) (xy 84.692514 75.128114) (xy 84.64887 74.802513) (xy 84.617007 74.579693) (xy 84.606846 74.517449) (xy 84.603445 74.500479) (xy 84.601254 74.49365) (xy 84.567358 74.50578) (xy 84.476105 74.546422) (xy 84.146452 74.700789) (xy 83.07303 75.214687) (xy 82.677701 75.406015) (xy 82.348757 75.564137) (xy 82.081145 75.691425) (xy 81.869812 75.790251) (xy 81.709703 75.862987) (xy 81.595766 75.912005) (xy 81.554533 75.92836) (xy 81.522947 75.939676) (xy 81.500378 75.946248) (xy 81.486192 75.948372) (xy 81.478724 75.948225) (xy 81.471239 75.947786) (xy 81.463747 75.947059) (xy 81.456256 75.94605) (xy 81.448774 75.944763) (xy 81.441309 75.943203) (xy 81.433871 75.941373) (xy 81.426467 75.93928) (xy 81.419106 75.936928) (xy 81.411796 75.934321) (xy 81.397364 75.92836) (xy 81.383239 75.921436) (xy 81.369488 75.913585) (xy 81.356179 75.904846) (xy 81.343378 75.895253) (xy 81.331153 75.884845) (xy 81.325278 75.879347) (xy 81.319572 75.873659) (xy 81.314044 75.867786) (xy 81.308703 75.861732) (xy 81.303555 75.855502) (xy 81.298611 75.849101) (xy 81.293879 75.842533) (xy 81.289366 75.835802) (xy 81.285082 75.828915) (xy 81.281034 75.821874) (xy 81.204297 75.668808) (xy 81.087915 75.427491) (xy 80.797451 74.810947) (xy 80.532105 74.233933) (xy 80.447121 74.042028) (xy 80.414341 73.95814) (xy 80.413704 73.948842) (xy 80.41338 73.939891) (xy 80.413389 73.931235) (xy 80.413747 73.922827) (xy 80.414474 73.914617) (xy 80.415588 73.906555) (xy 80.417107 73.898591) (xy 80.419049 73.890677) (xy 80.421433 73.882763) (xy 80.424277 73.874799) (xy 80.427598 73.866736) (xy 80.431417 73.858525) (xy 80.43575 73.850116) (xy 80.440616 73.84146) (xy 80.446033 73.832508) (xy 80.45202 73.823209) (xy 80.474248 73.798758) (xy 80.51993 73.765956) (xy 80.599957 73.71922) (xy 80.725221 73.652965) (xy 81.155034 73.439566) (xy 81.896509 73.08109) (xy 83.424732 72.338968) (xy 83.554524 72.275718) (xy 83.085589 71.773943) (xy 82.743927 71.417154) (xy 82.606499 71.273254) (xy 82.489212 71.149952) (xy 82.390472 71.045453) (xy 82.347559 70.999692) (xy 82.308685 70.957957) (xy 82.27365 70.920024) (xy 82.242255 70.885669) (xy 82.214302 70.854665) (xy 82.189589 70.82679) (xy 82.167919 70.801817) (xy 82.149091 70.779523) (xy 82.132907 70.759682) (xy 82.119166 70.742071) (xy 82.107671 70.726463) (xy 82.098221 70.712636) (xy 82.090617 70.700363) (xy 82.087445 70.69474) (xy 82.08466 70.689421) (xy 82.082236 70.684378) (xy 82.08015 70.679584) (xy 82.078375 70.67501) (xy 82.076888 70.670628) (xy 82.075663 70.666411) (xy 82.074675 70.662329) (xy 82.073311 70.654461) (xy 82.072598 70.6468) (xy 82.072335 70.639121) (xy 82.072363 70.622812) (xy 82.07251 70.613722) (xy 82.072946 70.604644) (xy 82.073668 70.595592) (xy 82.07467 70.586576) (xy 82.075948 70.57761) (xy 82.077497 70.568705) (xy 82.079313 70.559875) (xy 82.081392 70.551131) (xy 82.083728 70.542486) (xy 82.086317 70.533952) (xy 82.089154 70.525542) (xy 82.092235 70.517267) (xy 82.095555 70.509141) (xy 82.09911 70.501175) (xy 82.102895 70.493382) (xy 82.106905 70.485775) (xy 82.111136 70.478365) (xy 82.115584 70.471165) (xy 82.120243 70.464188) (xy 82.125108 70.457445) (xy 82.130176 70.450949) (xy 82.135442 70.444713) (xy 82.140901 70.438748) (xy 82.146549 70.433068) (xy 82.152381 70.427684) (xy 82.158392 70.422608) (xy 82.164578 70.417854) (xy 82.170934 70.413434) (xy 82.177455 70.409359) (xy 82.184137 70.405643) (xy 82.190976 70.402297) (xy 82.197967 70.399334) (xy 83.469282 70.359869) (xy 86.185475 70.308149) (xy 88.897743 70.268289) (xy 90.157285 70.264403) (xy 90.16292 70.267808) (xy 90.168807 70.271675) (xy 90.174901 70.275976) (xy 90.181161 70.280677) (xy 90.187544 70.285749) (xy 90.194006 70.291161) (xy 90.200504 70.296882) (xy 90.206997 70.302881) (xy 90.213441 70.309127) (xy 90.219793 70.315588) (xy 90.226011 70.322235) (xy 90.232051 70.329037) (xy 90.237871 70.335961) (xy 90.243429 70.342979) (xy 90.24868 70.350057) (xy 90.253582 70.357167) (xy 90.253594 70.357169) (xy 90.262473 70.370609) (xy 90.27028 70.38405) (xy 90.277019 70.39749) (xy 90.282698 70.41093) (xy 90.287321 70.424371) (xy 90.290896 70.437811) (xy 90.293428 70.451252) (xy 90.294925 70.464692) (xy 90.295391 70.478132) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp c80acafb-ba79-421c-b4dc-8fc151df3854)) (gr_poly (pts (xy 50.900179 52.975612) (xy 50.902347 52.947229) (xy 50.905911 52.919259) (xy 50.910835 52.891736) (xy 50.917084 52.864697) (xy 50.924623 52.838176) (xy 50.933417 52.812208) (xy 50.94343 52.786828) (xy 50.954628 52.762071) (xy 50.966976 52.737973) (xy 50.980437 52.714569) (xy 50.994979 52.691892) (xy 51.010564 52.66998) (xy 51.027159 52.648866) (xy 51.044727 52.628586) (xy 51.063235 52.609175) (xy 51.082646 52.590668) (xy 51.102927 52.5731) (xy 51.124041 52.556507) (xy 51.145953 52.540922) (xy 51.16863 52.526382) (xy 51.192034 52.512921) (xy 51.216132 52.500575) (xy 51.240888 52.489379) (xy 51.266268 52.479367) (xy 51.292235 52.470575) (xy 51.318755 52.463037) (xy 51.345794 52.45679) (xy 51.373315 52.451868) (xy 51.401284 52.448306) (xy 51.429665 52.446139) (xy 51.458424 52.445402) (xy 51.487185 52.446139) (xy 51.515568 52.448307) (xy 51.543539 52.45187) (xy 51.571061 52.456793) (xy 51.598101 52.463041) (xy 51.624622 52.470579) (xy 51.650591 52.479372) (xy 51.675971 52.489384) (xy 51.700728 52.500581) (xy 51.724827 52.512928) (xy 51.748232 52.526389) (xy 51.770908 52.540929) (xy 51.792821 52.556514) (xy 51.813935 52.573108) (xy 51.834216 52.590677) (xy 51.853627 52.609184) (xy 51.872135 52.628595) (xy 51.889703 52.648875) (xy 51.906297 52.669989) (xy 51.921883 52.691902) (xy 51.936423 52.714579) (xy 51.949885 52.737984) (xy 51.962232 52.762082) (xy 51.973429 52.786839) (xy 51.983442 52.812219) (xy 51.992235 52.838187) (xy 51.999773 52.864709) (xy 52.006021 52.891749) (xy 52.010944 52.919271) (xy 52.014508 52.947242) (xy 52.016676 52.975625) (xy 52.017413 53.004386) (xy 52.017413 56.209473) (xy 52.016675 56.238235) (xy 52.014507 56.266618) (xy 52.010943 56.294588) (xy 52.006019 56.322111) (xy 51.99977 56.34915) (xy 51.992232 56.375672) (xy 51.983438 56.40164) (xy 51.973425 56.42702) (xy 51.962227 56.451777) (xy 51.94988 56.475875) (xy 51.936418 56.49928) (xy 51.921877 56.521956) (xy 51.906291 56.543869) (xy 51.889697 56.564983) (xy 51.872128 56.585263) (xy 51.85362 56.604674) (xy 51.834209 56.623181) (xy 51.813928 56.640749) (xy 51.792814 56.657342) (xy 51.770901 56.672927) (xy 51.748224 56.687467) (xy 51.72482 56.700928) (xy 51.700721 56.713274) (xy 51.675965 56.724471) (xy 51.650585 56.734483) (xy 51.624617 56.743275) (xy 51.598096 56.750812) (xy 51.571057 56.75706) (xy 51.543536 56.761982) (xy 51.515566 56.765545) (xy 51.487184 56.767712) (xy 51.458424 56.768449) (xy 51.429664 56.767711) (xy 51.401281 56.765543) (xy 51.373311 56.76198) (xy 51.345788 56.757057) (xy 51.318749 56.750808) (xy 51.292227 56.74327) (xy 51.266259 56.734477) (xy 51.240879 56.724465) (xy 51.216123 56.713268) (xy 51.192024 56.700921) (xy 51.168619 56.68746) (xy 51.145943 56.672919) (xy 51.12403 56.657334) (xy 51.102916 56.64074) (xy 51.082636 56.623171) (xy 51.063225 56.604664) (xy 51.044717 56.585253) (xy 51.027149 56.564972) (xy 51.010555 56.543858) (xy 50.99497 56.521946) (xy 50.980429 56.499269) (xy 50.966968 56.475864) (xy 50.954621 56.451766) (xy 50.943424 56.427009) (xy 50.933411 56.401629) (xy 50.924618 56.375661) (xy 50.91708 56.34914) (xy 50.910832 56.3221) (xy 50.905909 56.294578) (xy 50.902346 56.266608) (xy 50.900178 56.238225) (xy 50.89944 56.209464) (xy 50.89944 53.004372) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp d9063032-5c3d-4fe3-90ea-9eed2451e774)) (gr_poly (pts (xy 43.934459 55.613332) (xy 43.936464 55.585764) (xy 43.939816 55.558429) (xy 43.944494 55.531371) (xy 43.95048 55.504638) (xy 43.957754 55.478276) (xy 43.966298 55.452329) (xy 43.976092 55.426845) (xy 43.987119 55.401869) (xy 43.999358 55.377448) (xy 44.012791 55.353626) (xy 44.027398 55.330451) (xy 44.043162 55.307968) (xy 44.060062 55.286222) (xy 44.07808 55.265261) (xy 44.097198 55.24513) (xy 44.117289 55.225972) (xy 44.138214 55.207911) (xy 44.159924 55.190966) (xy 44.182375 55.175157) (xy 44.20552 55.160502) (xy 44.229313 55.14702) (xy 44.253709 55.134732) (xy 44.278662 55.123655) (xy 44.304125 55.113808) (xy 44.330053 55.105212) (xy 44.356399 55.097884) (xy 44.383118 55.091844) (xy 44.410164 55.087111) (xy 44.43749 55.083704) (xy 44.465051 55.081642) (xy 44.492802 55.080944) (xy 44.520555 55.081643) (xy 44.548118 55.083706) (xy 44.575447 55.087114) (xy 44.602495 55.091848) (xy 44.629215 55.097889) (xy 44.655563 55.105218) (xy 44.681491 55.113816) (xy 44.706955 55.123663) (xy 44.731908 55.134741) (xy 44.756304 55.147031) (xy 44.780098 55.160513) (xy 44.803242 55.175169) (xy 44.825693 55.190979) (xy 44.847403 55.207924) (xy 44.868326 55.225985) (xy 44.888417 55.245144) (xy 44.907533 55.265275) (xy 44.925551 55.286236) (xy 44.942451 55.307981) (xy 44.958213 55.330465) (xy 44.97282 55.35364) (xy 44.986253 55.377461) (xy 44.998491 55.401883) (xy 45.009517 55.426859) (xy 45.019311 55.452343) (xy 45.027854 55.478289) (xy 45.035127 55.504652) (xy 45.041112 55.531385) (xy 45.04579 55.558442) (xy 45.04914 55.585778) (xy 45.051145 55.613346) (xy 45.051786 55.6411) (xy 45.051786 63.872563) (xy 45.051038 63.901324) (xy 45.048859 63.929706) (xy 45.045286 63.957675) (xy 45.040353 63.985196) (xy 45.034095 64.012233) (xy 45.026547 64.038752) (xy 45.017746 64.064717) (xy 45.007725 64.090093) (xy 44.996519 64.114846) (xy 44.984165 64.13894) (xy 44.970698 64.16234) (xy 44.956151 64.185011) (xy 44.940561 64.206918) (xy 44.923962 64.228026) (xy 44.90639 64.2483) (xy 44.88788 64.267705) (xy 44.868467 64.286205) (xy 44.848186 64.303766) (xy 44.827073 64.320352) (xy 44.805161 64.335929) (xy 44.782488 64.350461) (xy 44.759086 64.363914) (xy 44.734993 64.376252) (xy 44.710243 64.38744) (xy 44.68487 64.397443) (xy 44.658911 64.406226) (xy 44.632401 64.413754) (xy 44.605373 64.419992) (xy 44.577865 64.424905) (xy 44.54991 64.428457) (xy 44.521544 64.430615) (xy 44.492802 64.431342) (xy 44.464041 64.430604) (xy 44.435658 64.428436) (xy 44.407687 64.424873) (xy 44.380165 64.41995) (xy 44.353125 64.413701) (xy 44.326604 64.406163) (xy 44.300635 64.39737) (xy 44.275255 64.387358) (xy 44.250498 64.37616) (xy 44.2264 64.363814) (xy 44.202995 64.350352) (xy 44.180319 64.335812) (xy 44.158406 64.320226) (xy 44.137292 64.303632) (xy 44.117012 64.286064) (xy 44.0976 64.267556) (xy 44.079093 64.248145) (xy 44.061525 64.227865) (xy 44.04493 64.20675) (xy 44.029345 64.184837) (xy 44.014805 64.162161) (xy 44.001344 64.138756) (xy 43.988997 64.114657) (xy 43.9778 64.0899) (xy 43.967787 64.06452) (xy 43.958995 64.038552) (xy 43.951457 64.01203) (xy 43.945209 63.98499) (xy 43.940286 63.957468) (xy 43.936723 63.929497) (xy 43.934555 63.901114) (xy 43.933817 63.872353) (xy 43.933817 55.641087) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp e57a97ad-f511-4856-adde-f7f4096812b1)) (gr_poly (pts (xy 86.593001 81.476632) (xy 86.590938 81.504196) (xy 86.58753 81.531524) (xy 86.582796 81.558572) (xy 86.576755 81.585292) (xy 86.569427 81.611639) (xy 86.560829 81.637568) (xy 86.550982 81.663031) (xy 86.539904 81.687984) (xy 86.527614 81.71238) (xy 86.514132 81.736174) (xy 86.499476 81.759319) (xy 86.483666 81.781769) (xy 86.466721 81.803479) (xy 86.448659 81.824403) (xy 86.4295 81.844494) (xy 86.409368 81.863611) (xy 86.388407 81.881629) (xy 86.366661 81.898529) (xy 86.344178 81.914292) (xy 86.321002 81.928899) (xy 86.29718 81.942331) (xy 86.272758 81.954569) (xy 86.247782 81.965595) (xy 86.222297 81.975389) (xy 86.196351 81.983932) (xy 86.169988 81.991205) (xy 86.143255 81.99719) (xy 86.116197 82.001867) (xy 86.088862 82.005218) (xy 86.061293 82.007223) (xy 86.033539 82.007863) (xy 86.004778 82.007126) (xy 85.976395 82.004958) (xy 85.948425 82.001394) (xy 85.920903 81.996471) (xy 85.893863 81.990223) (xy 85.867342 81.982685) (xy 85.841374 81.973892) (xy 85.815994 81.96388) (xy 85.791237 81.952682) (xy 85.767139 81.940335) (xy 85.743734 81.926874) (xy 85.721058 81.912334) (xy 85.699145 81.896749) (xy 85.678031 81.880154) (xy 85.657751 81.862586) (xy 85.638339 81.844079) (xy 85.619832 81.824667) (xy 85.602264 81.804387) (xy 85.585669 81.783273) (xy 85.570084 81.76136) (xy 85.555544 81.738684) (xy 85.542082 81.715279) (xy 85.529736 81.691181) (xy 85.518538 81.666424) (xy 85.508526 81.641044) (xy 85.499733 81.615076) (xy 85.492195 81.588554) (xy 85.485947 81.561515) (xy 85.481023 81.533993) (xy 85.47746 81.506023) (xy 85.475292 81.47764) (xy 85.474555 81.448879) (xy 85.474555 80.201986) (xy 85.475293 80.173225) (xy 85.477462 80.144842) (xy 85.481026 80.116872) (xy 85.48595 80.08935) (xy 85.492199 80.062311) (xy 85.499738 80.03579) (xy 85.508532 80.009822) (xy 85.518545 79.984442) (xy 85.529743 79.959685) (xy 85.54209 79.935587) (xy 85.555552 79.912183) (xy 85.570093 79.889507) (xy 85.585679 79.867595) (xy 85.602273 79.846481) (xy 85.619842 79.826201) (xy 85.63835 79.806791) (xy 85.657761 79.788284) (xy 85.678041 79.770716) (xy 85.699155 79.754122) (xy 85.721068 79.738538) (xy 85.743744 79.723998) (xy 85.767149 79.710537) (xy 85.791247 79.698191) (xy 85.816003 79.686995) (xy 85.841382 79.676983) (xy 85.86735 79.668191) (xy 85.89387 79.660653) (xy 85.920908 79.654406) (xy 85.94843 79.649484) (xy 85.976398 79.645921) (xy 86.00478 79.643754) (xy 86.033539 79.643017) (xy 86.061293 79.643658) (xy 86.088862 79.645663) (xy 86.116197 79.649013) (xy 86.143255 79.653691) (xy 86.169988 79.659675) (xy 86.196351 79.666949) (xy 86.222297 79.675492) (xy 86.247782 79.685285) (xy 86.272758 79.696311) (xy 86.29718 79.708549) (xy 86.321002 79.721981) (xy 86.344178 79.736588) (xy 86.366661 79.752351) (xy 86.388407 79.76925) (xy 86.409368 79.787268) (xy 86.4295 79.806384) (xy 86.448659 79.826475) (xy 86.466721 79.847399) (xy 86.483666 79.869108) (xy 86.499476 79.891559) (xy 86.514132 79.914704) (xy 86.527614 79.938498) (xy 86.539904 79.962894) (xy 86.550982 79.987847) (xy 86.560829 80.013311) (xy 86.569427 80.03924) (xy 86.576755 80.065588) (xy 86.582796 80.092308) (xy 86.58753 80.119356) (xy 86.590938 80.146685) (xy 86.593001 80.174249) (xy 86.5937 80.202002) (xy 86.5937 81.448879) ) (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp f69f4f8c-8340-4574-84ec-6106eaab5c3f)) (gr_line (start 67.31 48.738426) (end 67.281783 115.407659) (stroke (width 0.12) (type dash)) (layer "F.SilkS") (tstamp 1afaf95e-be52-4cc9-bcaa-9d22317656f5)) (gr_poly (pts (xy 75.409953 109.711596) (xy 75.414084 109.711996) (xy 75.418717 109.712651) (xy 75.423798 109.713553) (xy 75.429272 109.714694) (xy 75.435082 109.716066) (xy 75.447491 109.719465) (xy 75.453979 109.721476) (xy 75.460582 109.723683) (xy 75.467245 109.726077) (xy 75.473912 109.728651) (xy 75.480528 109.731395) (xy 75.487037 109.734301) (xy 75.493385 109.737361) (xy 75.499515 109.740565) (xy 75.511406 109.747709) (xy 75.523025 109.75597) (xy 75.534303 109.765237) (xy 75.545172 109.775399) (xy 75.555563 109.786346) (xy 75.565408 109.797967) (xy 75.57464 109.81015) (xy 75.583189 109.822785) (xy 75.590988 109.835761) (xy 75.597969 109.848967) (xy 75.604062 109.862293) (xy 75.609201 109.875627) (xy 75.613317 109.888859) (xy 75.616341 109.901877) (xy 75.618205 109.914572) (xy 75.618681 109.920763) (xy 75.618842 109.926832) (xy 75.618681 109.9329) (xy 75.618205 109.939091) (xy 75.617422 109.945389) (xy 75.616341 109.951781) (xy 75.614969 109.958251) (xy 75.613317 109.964786) (xy 75.611391 109.971371) (xy 75.609201 109.977991) (xy 75.604062 109.991282) (xy 75.597969 110.004543) (xy 75.590988 110.017659) (xy 75.583189 110.030515) (xy 75.57464 110.042996) (xy 75.565408 110.054987) (xy 75.555563 110.066372) (xy 75.545172 110.077037) (xy 75.539793 110.082063) (xy 75.534303 110.086866) (xy 75.528711 110.091431) (xy 75.523025 110.095744) (xy 75.517254 110.099791) (xy 75.511406 110.103557) (xy 75.50549 110.107027) (xy 75.499515 110.110189) (xy 75.493385 110.113426) (xy 75.487038 110.116578) (xy 75.480528 110.119627) (xy 75.473912 110.122558) (xy 75.467245 110.125352) (xy 75.460582 110.127992) (xy 75.453979 110.130462) (xy 75.447491 110.132744) (xy 75.441174 110.134822) (xy 75.435082 110.136678) (xy 75.429272 110.138295) (xy 75.423799 110.139657) (xy 75.418717 110.140745) (xy 75.414084 110.141544) (xy 75.409954 110.142035) (xy 75.406382 110.142203) (xy 75.40281 110.142035) (xy 75.398679 110.141544) (xy 75.394046 110.140745) (xy 75.388965 110.139657) (xy 75.383491 110.138295) (xy 75.377681 110.136678) (xy 75.365272 110.132744) (xy 75.352181 110.127992) (xy 75.338851 110.122558) (xy 75.332235 110.119627) (xy 75.325725 110.116578) (xy 75.319378 110.113426) (xy 75.313248 110.110189) (xy 75.301356 110.103589) (xy 75.289737 110.095864) (xy 75.278459 110.087115) (xy 75.267591 110.077446) (xy 75.2572 110.066958) (xy 75.247354 110.055754) (xy 75.238123 110.043936) (xy 75.229573 110.031607) (xy 75.221774 110.018868) (xy 75.214794 110.005823) (xy 75.2087 109.992572) (xy 75.203562 109.97922) (xy 75.199446 109.965867) (xy 75.196422 109.952616) (xy 75.194558 109.939571) (xy 75.194081 109.933157) (xy 75.193921 109.926832) (xy 75.194081 109.920507) (xy 75.194558 109.914093) (xy 75.195341 109.9076) (xy 75.196422 109.901042) (xy 75.197793 109.89443) (xy 75.199446 109.887778) (xy 75.201372 109.881097) (xy 75.203562 109.874399) (xy 75.2087 109.861003) (xy 75.214794 109.847688) (xy 75.221775 109.834552) (xy 75.229574 109.821693) (xy 75.238123 109.80921) (xy 75.247355 109.797199) (xy 75.2572 109.78576) (xy 75.267591 109.77499) (xy 75.27846 109.764988) (xy 75.289737 109.755851) (xy 75.295509 109.751637) (xy 75.301356 109.747677) (xy 75.307272 109.743982) (xy 75.313248 109.740565) (xy 75.319858 109.737361) (xy 75.326561 109.734301) (xy 75.333316 109.731395) (xy 75.340079 109.728651) (xy 75.346808 109.726077) (xy 75.35346 109.723683) (xy 75.359993 109.721476) (xy 75.366364 109.719465) (xy 75.37253 109.717659) (xy 75.378449 109.716066) (xy 75.384078 109.714694) (xy 75.389374 109.713553) (xy 75.394295 109.712651) (xy 75.398799 109.711996) (xy 75.402842 109.711596) (xy 75.406382 109.711461) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 2682b2e2-ca4f-43bb-a888-1c2cdc98cd58)) (gr_poly (pts (xy 59.309 110.998) (xy 59.332483 110.999792) (xy 59.355628 111.002741) (xy 59.378406 111.006819) (xy 59.400788 111.011997) (xy 59.422744 111.018246) (xy 59.444244 111.025535) (xy 59.465261 111.033836) (xy 59.485763 111.04312) (xy 59.505723 111.053356) (xy 59.52511 111.064517) (xy 59.543896 111.076572) (xy 59.562051 111.089492) (xy 59.579546 111.103247) (xy 59.596351 111.11781) (xy 59.612438 111.133149) (xy 59.627777 111.149237) (xy 59.642338 111.166043) (xy 59.656093 111.183538) (xy 59.669012 111.201694) (xy 59.681066 111.22048) (xy 59.692225 111.239867) (xy 59.70246 111.259826) (xy 59.711743 111.280329) (xy 59.720043 111.301344) (xy 59.727331 111.322844) (xy 59.733579 111.344798) (xy 59.738756 111.367178) (xy 59.742834 111.389954) (xy 59.745782 111.413097) (xy 59.747573 111.436577) (xy 59.748177 111.460366) (xy 59.747573 111.484155) (xy 59.745782 111.507635) (xy 59.742833 111.530778) (xy 59.738754 111.553554) (xy 59.733576 111.575934) (xy 59.727328 111.597889) (xy 59.720038 111.619388) (xy 59.711737 111.640404) (xy 59.702454 111.660906) (xy 59.692217 111.680865) (xy 59.681057 111.700253) (xy 59.669002 111.719039) (xy 59.656082 111.737194) (xy 59.642326 111.75469) (xy 59.627764 111.771496) (xy 59.612424 111.787583) (xy 59.596337 111.802923) (xy 59.579531 111.817485) (xy 59.562035 111.831241) (xy 59.54388 111.844161) (xy 59.525094 111.856216) (xy 59.505706 111.867376) (xy 59.485747 111.877613) (xy 59.465245 111.886896) (xy 59.444229 111.895197) (xy 59.42273 111.902487) (xy 59.400775 111.908735) (xy 59.378396 111.913913) (xy 59.35562 111.917992) (xy 59.332477 111.920941) (xy 59.308996 111.922732) (xy 59.285208 111.923336) (xy 59.261419 111.922732) (xy 59.237938 111.920941) (xy 59.214796 111.917992) (xy 59.19202 111.913913) (xy 59.16964 111.908735) (xy 59.147685 111.902487) (xy 59.126186 111.895197) (xy 59.10517 111.886896) (xy 59.084668 111.877613) (xy 59.064709 111.867376) (xy 59.045321 111.856216) (xy 59.026535 111.844161) (xy 59.00838 111.831241) (xy 58.990885 111.817485) (xy 58.974078 111.802923) (xy 58.957991 111.787583) (xy 58.942651 111.771496) (xy 58.928089 111.75469) (xy 58.914333 111.737194) (xy 58.901413 111.719039) (xy 58.889358 111.700253) (xy 58.878198 111.680865) (xy 58.867961 111.660906) (xy 58.858678 111.640404) (xy 58.850377 111.619388) (xy 58.843087 111.597889) (xy 58.836839 111.575934) (xy 58.831661 111.553554) (xy 58.827582 111.530778) (xy 58.824633 111.507635) (xy 58.822842 111.484155) (xy 58.822238 111.460366) (xy 59.130897 111.460366) (xy 59.131098 111.468301) (xy 59.131695 111.476133) (xy 59.132678 111.483851) (xy 59.134038 111.491446) (xy 59.135764 111.498909) (xy 59.137847 111.506229) (xy 59.140276 111.513397) (xy 59.143043 111.520403) (xy 59.146138 111.527238) (xy 59.14955 111.533891) (xy 59.15327 111.540353) (xy 59.157288 111.546614) (xy 59.161594 111.552665) (xy 59.166179 111.558495) (xy 59.171033 111.564095) (xy 59.176146 111.569456) (xy 59.181508 111.574567) (xy 59.18711 111.579419) (xy 59.192942 111.584002) (xy 59.198993 111.588306) (xy 59.205254 111.592322) (xy 59.211716 111.596039) (xy 59.218369 111.599449) (xy 59.225202 111.602541) (xy 59.232207 111.605306) (xy 59.239373 111.607734) (xy 59.24669 111.609815) (xy 59.254149 111.611539) (xy 59.26174 111.612898) (xy 59.269453 111.61388) (xy 59.277279 111.614476) (xy 59.285208 111.614677) (xy 59.293136 111.614476) (xy 59.300962 111.61388) (xy 59.308675 111.612898) (xy 59.316266 111.611539) (xy 59.323725 111.609815) (xy 59.331043 111.607734) (xy 59.338208 111.605306) (xy 59.345213 111.602541) (xy 59.352046 111.599449) (xy 59.358699 111.596039) (xy 59.365161 111.592322) (xy 59.371422 111.588306) (xy 59.377474 111.584002) (xy 59.383305 111.579419) (xy 59.388907 111.574567) (xy 59.394269 111.569456) (xy 59.399382 111.564095) (xy 59.404236 111.558495) (xy 59.408821 111.552665) (xy 59.413127 111.546614) (xy 59.417145 111.540353) (xy 59.420865 111.533891) (xy 59.424277 111.527238) (xy 59.427372 111.520403) (xy 59.430139 111.513397) (xy 59.432569 111.506229) (xy 59.434651 111.498909) (xy 59.436377 111.491446) (xy 59.437737 111.483851) (xy 59.43872 111.476133) (xy 59.439317 111.468301) (xy 59.439518 111.460366) (xy 59.439317 111.452431) (xy 59.43872 111.4446) (xy 59.437737 111.436881) (xy 59.436377 111.429286) (xy 59.434651 111.421823) (xy 59.432569 111.414503) (xy 59.430139 111.407335) (xy 59.427372 111.400329) (xy 59.424277 111.393495) (xy 59.420865 111.386842) (xy 59.417145 111.38038) (xy 59.413127 111.374118) (xy 59.408821 111.368068) (xy 59.404236 111.362237) (xy 59.399382 111.356637) (xy 59.394269 111.351277) (xy 59.388907 111.346166) (xy 59.383305 111.341314) (xy 59.377474 111.336731) (xy 59.371422 111.332427) (xy 59.365161 111.328411) (xy 59.358699 111.324693) (xy 59.352046 111.321283) (xy 59.345213 111.318191) (xy 59.338208 111.315426) (xy 59.331043 111.312999) (xy 59.323725 111.310918) (xy 59.316266 111.309193) (xy 59.308675 111.307835) (xy 59.300962 111.306853) (xy 59.293136 111.306256) (xy 59.285208 111.306055) (xy 59.277279 111.306256) (xy 59.269453 111.306853) (xy 59.26174 111.307835) (xy 59.254149 111.309193) (xy 59.24669 111.310918) (xy 59.239373 111.312999) (xy 59.232207 111.315426) (xy 59.225202 111.318191) (xy 59.218369 111.321283) (xy 59.211716 111.324693) (xy 59.205254 111.328411) (xy 59.198993 111.332427) (xy 59.192942 111.336731) (xy 59.18711 111.341314) (xy 59.181508 111.346166) (xy 59.176146 111.351277) (xy 59.171033 111.356637) (xy 59.166179 111.362237) (xy 59.161594 111.368068) (xy 59.157288 111.374118) (xy 59.15327 111.38038) (xy 59.14955 111.386842) (xy 59.146138 111.393495) (xy 59.143043 111.400329) (xy 59.140276 111.407335) (xy 59.137847 111.414503) (xy 59.135764 111.421823) (xy 59.134038 111.429286) (xy 59.132678 111.436881) (xy 59.131695 111.4446) (xy 59.131098 111.452431) (xy 59.130897 111.460366) (xy 58.822238 111.460366) (xy 58.822842 111.436577) (xy 58.824633 111.413097) (xy 58.827582 111.389954) (xy 58.831661 111.367178) (xy 58.836839 111.344798) (xy 58.843087 111.322844) (xy 58.850377 111.301344) (xy 58.858678 111.280329) (xy 58.867961 111.259826) (xy 58.878198 111.239867) (xy 58.889358 111.22048) (xy 58.901413 111.201694) (xy 58.914333 111.183538) (xy 58.928089 111.166043) (xy 58.942651 111.149237) (xy 58.957991 111.133149) (xy 58.974078 111.11781) (xy 58.990885 111.103247) (xy 59.00838 111.089492) (xy 59.026535 111.076572) (xy 59.045321 111.064517) (xy 59.064709 111.053356) (xy 59.084668 111.04312) (xy 59.10517 111.033836) (xy 59.126186 111.025535) (xy 59.147685 111.018246) (xy 59.16964 111.011997) (xy 59.19202 111.006819) (xy 59.214796 111.002741) (xy 59.237938 110.999792) (xy 59.261419 110.998) (xy 59.285208 110.997397) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 31ca6c7f-a9ed-4d47-90c2-f2e9d1815901)) (gr_poly (pts (xy 71.971429 111.002828) (xy 71.973288 111.003199) (xy 71.975 111.003686) (xy 71.981325 111.003846) (xy 71.98774 111.004323) (xy 71.994233 111.005106) (xy 72.000791 111.006187) (xy 72.007402 111.007558) (xy 72.014055 111.009211) (xy 72.020736 111.011137) (xy 72.027434 111.013327) (xy 72.04083 111.018465) (xy 72.054145 111.024559) (xy 72.067281 111.03154) (xy 72.080139 111.039339) (xy 72.092623 111.047888) (xy 72.104634 111.05712) (xy 72.116073 111.066965) (xy 72.126843 111.077356) (xy 72.136845 111.088225) (xy 72.145982 111.099502) (xy 72.150195 111.105274) (xy 72.154155 111.111121) (xy 72.15785 111.117037) (xy 72.161267 111.123013) (xy 72.166696 111.13549) (xy 72.171954 111.148616) (xy 72.176871 111.161946) (xy 72.181276 111.175037) (xy 72.185 111.187446) (xy 72.186552 111.193256) (xy 72.18787 111.19873) (xy 72.188933 111.203811) (xy 72.189718 111.208444) (xy 72.190204 111.212575) (xy 72.190371 111.216147) (xy 72.190236 111.219719) (xy 72.189837 111.223849) (xy 72.189182 111.228482) (xy 72.18828 111.233564) (xy 72.187138 111.239037) (xy 72.185767 111.244847) (xy 72.182368 111.257256) (xy 72.180357 111.263744) (xy 72.17815 111.270347) (xy 72.175755 111.27701) (xy 72.173182 111.283677) (xy 72.170438 111.290293) (xy 72.167531 111.296802) (xy 72.164472 111.30315) (xy 72.161267 111.30928) (xy 72.154155 111.321172) (xy 72.145982 111.332791) (xy 72.136845 111.344069) (xy 72.126842 111.354937) (xy 72.116073 111.365328) (xy 72.104633 111.375174) (xy 72.092623 111.384405) (xy 72.080139 111.392954) (xy 72.067281 111.400753) (xy 72.054145 111.407734) (xy 72.04083 111.413828) (xy 72.027434 111.418966) (xy 72.014055 111.423082) (xy 72.000791 111.426106) (xy 71.98774 111.42797) (xy 71.981325 111.428446) (xy 71.975 111.428607) (xy 71.971429 111.428439) (xy 71.967298 111.427948) (xy 71.962665 111.427149) (xy 71.957584 111.42606) (xy 71.95211 111.424699) (xy 71.9463 111.423082) (xy 71.933891 111.419148) (xy 71.9208 111.414396) (xy 71.90747 111.408962) (xy 71.900854 111.406031) (xy 71.894345 111.402982) (xy 71.887997 111.39983) (xy 71.881867 111.396592) (xy 71.869976 111.389993) (xy 71.858357 111.382268) (xy 71.847079 111.373519) (xy 71.83621 111.36385) (xy 71.825819 111.353362) (xy 71.815974 111.342158) (xy 71.806742 111.33034) (xy 71.798193 111.318011) (xy 71.790394 111.305272) (xy 71.783413 111.292226) (xy 71.77732 111.278976) (xy 71.772181 111.265623) (xy 71.768066 111.252271) (xy 71.765041 111.23902) (xy 71.763177 111.225975) (xy 71.762701 111.219561) (xy 71.76254 111.213236) (xy 71.762701 111.206911) (xy 71.763177 111.200497) (xy 71.76396 111.194004) (xy 71.765041 111.187446) (xy 71.766413 111.180835) (xy 71.768066 111.174182) (xy 71.769991 111.167501) (xy 71.772181 111.160803) (xy 71.77732 111.147407) (xy 71.783413 111.134092) (xy 71.790394 111.120956) (xy 71.798193 111.108097) (xy 71.806742 111.095614) (xy 71.815974 111.083603) (xy 71.825819 111.072164) (xy 71.83621 111.061394) (xy 71.847079 111.051392) (xy 71.858357 111.042255) (xy 71.864128 111.038042) (xy 71.869976 111.034081) (xy 71.875892 111.030387) (xy 71.881867 111.02697) (xy 71.894345 111.021552) (xy 71.900854 111.018918) (xy 71.90747 111.016374) (xy 71.914137 111.013949) (xy 71.9208 111.011673) (xy 71.927403 111.009576) (xy 71.933891 111.007688) (xy 71.940208 111.006039) (xy 71.9463 111.004658) (xy 71.95211 111.003576) (xy 71.957584 111.002822) (xy 71.962665 111.002426) (xy 71.967298 111.002418) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 3f1ed5f7-07f3-4928-8134-2f6f2b4b0a93)) (gr_arc (start 66.93774 48.748461) (mid 63.758888 45.025614) (end 67.31 41.656) (stroke (width 0.12) (type dash)) (layer "F.SilkS") (tstamp 4135603c-95cd-4256-a81f-ea27762e0ab8)) (gr_poly (pts (xy 74.396618 106.991515) (xy 74.402288 106.992041) (xy 74.407276 106.993018) (xy 74.411632 106.994453) (xy 74.415406 106.996352) (xy 74.418648 106.99872) (xy 74.421408 107.001564) (xy 74.423737 107.004888) (xy 74.425684 107.0087) (xy 74.427299 107.013005) (xy 74.428634 107.017809) (xy 74.429737 107.023117) (xy 74.430658 107.028936) (xy 74.431449 107.035271) (xy 74.434303 107.065893) (xy 74.437784 107.092363) (xy 74.440601 107.12131) (xy 74.444307 107.185083) (xy 74.445558 107.254109) (xy 74.444489 107.325284) (xy 74.441237 107.395503) (xy 74.435939 107.461664) (xy 74.428732 107.520662) (xy 74.424454 107.546506) (xy 74.41975 107.569395) (xy 74.414104 107.593448) (xy 74.407046 107.618576) (xy 74.398666 107.644625) (xy 74.389055 107.671441) (xy 74.378301 107.698871) (xy 74.366493 107.726762) (xy 74.353723 107.75496) (xy 74.340078 107.783311) (xy 74.325649 107.811662) (xy 74.310525 107.839859) (xy 74.294795 107.86775) (xy 74.27855 107.89518) (xy 74.261878 107.921996) (xy 74.24487 107.948045) (xy 74.227614 107.973173) (xy 74.2102 107.997226) (xy 74.193699 108.017684) (xy 74.173138 108.041383) (xy 74.149371 108.067468) (xy 74.123252 108.095089) (xy 74.095631 108.123392) (xy 74.067362 108.151524) (xy 74.039299 108.178633) (xy 74.012292 108.203866) (xy 73.972019 108.239667) (xy 73.932125 108.27595) (xy 73.854448 108.348886) (xy 73.781204 108.420527) (xy 73.714339 108.488723) (xy 73.655795 108.551325) (xy 73.630251 108.579857) (xy 73.607517 108.606185) (xy 73.587836 108.630041) (xy 73.57145 108.651155) (xy 73.558602 108.669259) (xy 73.549536 108.684084) (xy 73.542419 108.697383) (xy 73.535297 108.712029) (xy 73.528235 108.7278) (xy 73.521296 108.744475) (xy 73.514545 108.761833) (xy 73.508046 108.779651) (xy 73.496057 108.815781) (xy 73.490696 108.83365) (xy 73.485842 108.851092) (xy 73.48156 108.867887) (xy 73.477913 108.883812) (xy 73.474965 108.898645) (xy 73.47278 108.912165) (xy 73.471422 108.924151) (xy 73.470955 108.93438) (xy 73.471948 108.938479) (xy 73.476037 108.942065) (xy 73.50015 108.947841) (xy 73.556596 108.951979) (xy 73.658677 108.954753) (xy 74.052947 108.9573) (xy 74.789374 108.957664) (xy 75.469002 108.958391) (xy 75.704671 108.959505) (xy 75.882599 108.961302) (xy 76.01155 108.963916) (xy 76.060398 108.965573) (xy 76.100289 108.967486) (xy 76.132319 108.969672) (xy 76.157582 108.972147) (xy 76.177176 108.97493) (xy 76.192194 108.978036) (xy 76.236309 108.989888) (xy 76.279081 109.004634) (xy 76.320394 109.022168) (xy 76.360134 109.042384) (xy 76.398187 109.065175) (xy 76.434435 109.090434) (xy 76.468766 109.118055) (xy 76.501062 109.147932) (xy 76.53121 109.179957) (xy 76.559094 109.214025) (xy 76.5846 109.250028) (xy 76.607611 109.287859) (xy 76.628013 109.327414) (xy 76.645691 109.368584) (xy 76.660529 109.411263) (xy 76.672413 109.455345) (xy 76.682918 109.610643) (xy 76.690421 109.939747) (xy 76.696424 110.887997) (xy 76.690421 111.837339) (xy 76.682918 112.167807) (xy 76.672413 112.325015) (xy 76.661557 112.366122) (xy 76.64764 112.406393) (xy 76.630807 112.445675) (xy 76.611203 112.483815) (xy 76.588973 112.520658) (xy 76.564261 112.556052) (xy 76.537214 112.589843) (xy 76.507974 112.621878) (xy 76.476689 112.652002) (xy 76.443502 112.680063) (xy 76.408558 112.705908) (xy 76.372003 112.729381) (xy 76.333982 112.750331) (xy 76.294639 112.768604) (xy 76.254119 112.784045) (xy 76.212567 112.796503) (xy 76.17148 112.804188) (xy 76.091239 112.809963) (xy 75.704699 112.816876) (xy 73.267226 112.819786) (xy 72.246516 112.820719) (xy 71.838534 112.820886) (xy 71.491735 112.820696) (xy 71.200819 112.820028) (xy 70.960488 112.818763) (xy 70.765441 112.816782) (xy 70.683243 112.815486) (xy 70.610379 112.813966) (xy 70.546187 112.812207) (xy 70.490004 112.810194) (xy 70.441168 112.807913) (xy 70.399016 112.805348) (xy 70.362886 112.802485) (xy 70.332115 112.799308) (xy 70.306042 112.795803) (xy 70.284003 112.791955) (xy 70.265337 112.787749) (xy 70.24938 112.78317) (xy 70.235471 112.778203) (xy 70.222947 112.772833) (xy 70.211146 112.767045) (xy 70.199404 112.760825) (xy 70.173453 112.747026) (xy 70.156057 112.737303) (xy 70.137829 112.725726) (xy 70.118961 112.712487) (xy 70.099647 112.697776) (xy 70.080076 112.681787) (xy 70.060441 112.66471) (xy 70.040934 112.646738) (xy 70.021747 112.628063) (xy 70.003072 112.608876) (xy 69.9851 112.589369) (xy 69.968023 112.569734) (xy 69.952034 112.550163) (xy 69.937323 112.530849) (xy 69.924084 112.511981) (xy 69.912507 112.493754) (xy 69.902784 112.476357) (xy 69.877932 112.424902) (xy 69.859492 112.370854) (xy 69.846509 112.294433) (xy 69.842451 112.237703) (xy 70.257855 112.237703) (xy 70.289869 112.284269) (xy 70.293341 112.288764) (xy 70.29718 112.293489) (xy 70.301342 112.298402) (xy 70.305786 112.30346) (xy 70.315347 112.31384) (xy 70.325522 112.324288) (xy 70.33597 112.334463) (xy 70.34635 112.344024) (xy 70.351407 112.348468) (xy 70.35632 112.35263) (xy 70.361045 112.356469) (xy 70.36554 112.35994) (xy 70.412107 112.391955) (xy 73.273047 112.389045) (xy 76.133986 112.386134) (xy 76.168911 112.35703) (xy 76.172827 112.354136) (xy 76.176914 112.350936) (xy 76.181138 112.347463) (xy 76.185464 112.343751) (xy 76.189858 112.339834) (xy 76.194286 112.335747) (xy 76.203108 112.327198) (xy 76.211657 112.318376) (xy 76.215745 112.313948) (xy 76.219661 112.309554) (xy 76.223373 112.305228) (xy 76.226846 112.301004) (xy 76.230047 112.296917) (xy 76.23294 112.293001) (xy 76.242547 112.278443) (xy 76.249766 112.250209) (xy 76.254939 112.192165) (xy 76.258406 112.08818) (xy 76.261589 111.677857) (xy 76.262044 110.89018) (xy 76.261987 110.438594) (xy 76.261852 110.255743) (xy 76.261589 110.098774) (xy 76.261156 109.965629) (xy 76.260862 109.907347) (xy 76.260509 109.854248) (xy 76.260093 109.806076) (xy 76.259607 109.762572) (xy 76.259047 109.72348) (xy 76.258406 109.688542) (xy 76.257681 109.6575) (xy 76.256864 109.630098) (xy 76.255952 109.606078) (xy 76.254939 109.585182) (xy 76.253819 109.567154) (xy 76.253217 109.559134) (xy 76.252587 109.551734) (xy 76.251927 109.544923) (xy 76.251238 109.538668) (xy 76.250517 109.532936) (xy 76.249766 109.527696) (xy 76.248982 109.522915) (xy 76.248166 109.518561) (xy 76.247317 109.514603) (xy 76.246433 109.511007) (xy 76.245515 109.507742) (xy 76.244562 109.504775) (xy 76.243573 109.502075) (xy 76.242547 109.499609) (xy 76.241483 109.497345) (xy 76.240382 109.495251) (xy 76.239242 109.493294) (xy 76.238063 109.491443) (xy 76.235584 109.487928) (xy 76.23294 109.484449) (xy 76.229981 109.481011) (xy 76.226591 109.477275) (xy 76.218706 109.469078) (xy 76.209662 109.460199) (xy 76.199834 109.450979) (xy 76.189596 109.441759) (xy 76.179325 109.43288) (xy 76.169394 109.424683) (xy 76.16018 109.417509) (xy 76.113613 109.385494) (xy 70.409197 109.385494) (xy 70.36554 109.414599) (xy 70.361046 109.417525) (xy 70.356326 109.420817) (xy 70.351427 109.424434) (xy 70.346395 109.428332) (xy 70.341279 109.432469) (xy 70.336123 109.436802) (xy 70.330977 109.441288) (xy 70.325886 109.445886) (xy 70.320897 109.450551) (xy 70.316058 109.455242) (xy 70.311414 109.459916) (xy 70.307014 109.46453) (xy 70.302903 109.469042) (xy 70.299129 109.473409) (xy 70.295739 109.477589) (xy 70.29278 109.481538) (xy 70.283168 109.49692) (xy 70.275909 109.525467) (xy 70.270628 109.583346) (xy 70.26695 109.686723) (xy 70.262903 110.094636) (xy 70.260765 110.878538) (xy 70.257855 112.237703) (xy 69.842451 112.237703) (xy 69.838027 112.175857) (xy 69.833093 111.995343) (xy 69.830751 111.733109) (xy 69.830024 110.884359) (xy 69.830189 110.47054) (xy 69.830797 110.148433) (xy 69.832019 109.905521) (xy 69.834026 109.729288) (xy 69.835376 109.662263) (xy 69.836987 109.607215) (xy 69.838879 109.562577) (xy 69.841074 109.526786) (xy 69.843593 109.498277) (xy 69.846457 109.475484) (xy 69.849688 109.456845) (xy 69.853307 109.440792) (xy 69.862206 109.410544) (xy 69.87252 109.380936) (xy 69.884233 109.351992) (xy 69.897327 109.323739) (xy 69.911785 109.296202) (xy 69.927591 109.269408) (xy 69.944727 109.24338) (xy 69.963175 109.218146) (xy 69.98292 109.19373) (xy 70.003944 109.170158) (xy 70.02623 109.147456) (xy 70.04976 109.125649) (xy 70.074519 109.104763) (xy 70.100488 109.084824) (xy 70.127651 109.065856) (xy 70.15599 109.047886) (xy 70.207292 109.019066) (xy 70.260811 108.997409) (xy 70.294551 108.988946) (xy 70.336226 108.98189) (xy 70.453217 108.971488) (xy 70.631463 108.965178) (xy 70.890643 108.961938) (xy 71.730526 108.960574) (xy 73.046034 108.960574) (xy 73.060586 108.855799) (xy 73.064775 108.829996) (xy 73.069675 108.803951) (xy 73.07525 108.777761) (xy 73.081459 108.751524) (xy 73.088265 108.725338) (xy 73.09563 108.699301) (xy 73.103515 108.673512) (xy 73.111882 108.648068) (xy 73.120692 108.623067) (xy 73.129907 108.598608) (xy 73.139489 108.574788) (xy 73.149399 108.551706) (xy 73.159599 108.529459) (xy 73.170051 108.508146) (xy 73.180715 108.487865) (xy 73.191555 108.468713) (xy 73.227196 108.41258) (xy 73.246053 108.385266) (xy 73.266043 108.357981) (xy 73.2875 108.330373) (xy 73.310757 108.302086) (xy 73.336145 108.272768) (xy 73.363997 108.242065) (xy 73.428424 108.175085) (xy 73.506698 108.098317) (xy 73.60148 108.00893) (xy 73.71543 107.904093) (xy 73.741621 107.879605) (xy 73.766709 107.855258) (xy 73.790679 107.831056) (xy 73.81352 107.807003) (xy 73.835218 107.783103) (xy 73.855761 107.759362) (xy 73.875135 107.735782) (xy 73.893329 107.712369) (xy 73.910329 107.689126) (xy 73.926122 107.666058) (xy 73.940697 107.643169) (xy 73.954039 107.620463) (xy 73.966136 107.597945) (xy 73.976975 107.575619) (xy 73.986544 107.553489) (xy 73.99483 107.531559) (xy 74.001805 107.51159) (xy 74.007518 107.490222) (xy 74.012071 107.466331) (xy 74.015567 107.43879) (xy 74.018107 107.406474) (xy 74.019796 107.368258) (xy 74.020733 107.323015) (xy 74.021023 107.269622) (xy 74.021023 107.074624) (xy 74.195649 107.033878) (xy 74.274901 107.013886) (xy 74.306627 107.006156) (xy 74.33362 106.999999) (xy 74.345468 106.997525) (xy 74.356283 106.995462) (xy 74.366115 106.993816) (xy 74.375014 106.992592) (xy 74.383031 106.991797) (xy 74.390216 106.991436) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 4caa43a9-fa63-4b26-ba91-f748a16378d2)) (gr_poly (pts (xy 71.12 110.998) (xy 71.12413 110.9984) (xy 71.128764 110.999055) (xy 71.133845 110.999957) (xy 71.139318 111.001098) (xy 71.145128 111.00247) (xy 71.157537 111.005869) (xy 71.164026 111.00788) (xy 71.170629 111.010087) (xy 71.177291 111.012481) (xy 71.183959 111.015055) (xy 71.190575 111.017799) (xy 71.197084 111.020705) (xy 71.203431 111.023765) (xy 71.209561 111.02697) (xy 71.221453 111.034113) (xy 71.233072 111.042374) (xy 71.24435 111.051641) (xy 71.255218 111.061803) (xy 71.265609 111.07275) (xy 71.275455 111.084371) (xy 71.284686 111.096554) (xy 71.293235 111.109189) (xy 71.301034 111.122165) (xy 71.308015 111.135371) (xy 71.314109 111.148697) (xy 71.319247 111.162031) (xy 71.323363 111.175263) (xy 71.326387 111.188282) (xy 71.328251 111.200976) (xy 71.328727 111.207168) (xy 71.328888 111.213236) (xy 71.328727 111.219305) (xy 71.328251 111.225495) (xy 71.327468 111.231793) (xy 71.326387 111.238185) (xy 71.325016 111.244655) (xy 71.323363 111.25119) (xy 71.321437 111.257775) (xy 71.319247 111.264396) (xy 71.314109 111.277687) (xy 71.308015 111.290948) (xy 71.301035 111.304064) (xy 71.293236 111.31692) (xy 71.284686 111.3294) (xy 71.275455 111.341391) (xy 71.265609 111.352776) (xy 71.255218 111.363441) (xy 71.249839 111.368467) (xy 71.24435 111.37327) (xy 71.238758 111.377835) (xy 71.233072 111.382148) (xy 71.227301 111.386195) (xy 71.221453 111.389961) (xy 71.215537 111.393431) (xy 71.209561 111.396592) (xy 71.203431 111.39983) (xy 71.197084 111.402982) (xy 71.190574 111.406031) (xy 71.183959 111.408962) (xy 71.177291 111.411756) (xy 71.170629 111.414396) (xy 71.164025 111.416866) (xy 71.157537 111.419148) (xy 71.15122 111.421226) (xy 71.145128 111.423082) (xy 71.139318 111.424699) (xy 71.133845 111.42606) (xy 71.128764 111.427149) (xy 71.12413 111.427948) (xy 71.12 111.428439) (xy 71.116428 111.428607) (xy 71.112856 111.428439) (xy 71.108725 111.427948) (xy 71.104092 111.427149) (xy 71.099011 111.42606) (xy 71.093537 111.424699) (xy 71.087727 111.423082) (xy 71.075318 111.419148) (xy 71.062227 111.414396) (xy 71.048897 111.408962) (xy 71.042281 111.406031) (xy 71.035772 111.402982) (xy 71.029424 111.39983) (xy 71.023294 111.396592) (xy 71.011403 111.389993) (xy 70.999784 111.382268) (xy 70.988506 111.373519) (xy 70.977637 111.36385) (xy 70.967246 111.353362) (xy 70.957401 111.342158) (xy 70.948169 111.33034) (xy 70.93962 111.318011) (xy 70.931821 111.305272) (xy 70.924841 111.292226) (xy 70.918747 111.278976) (xy 70.913608 111.265623) (xy 70.909493 111.252271) (xy 70.906469 111.23902) (xy 70.904604 111.225975) (xy 70.904128 111.219561) (xy 70.903967 111.213236) (xy 70.904128 111.206911) (xy 70.904604 111.200497) (xy 70.905387 111.194004) (xy 70.906469 111.187446) (xy 70.90784 111.180835) (xy 70.909493 111.174182) (xy 70.911418 111.167501) (xy 70.913608 111.160803) (xy 70.918747 111.147407) (xy 70.924841 111.134092) (xy 70.931821 111.120956) (xy 70.93962 111.108097) (xy 70.948169 111.095614) (xy 70.957401 111.083603) (xy 70.967246 111.072164) (xy 70.977637 111.061394) (xy 70.988506 111.051392) (xy 70.999784 111.042255) (xy 71.005555 111.038042) (xy 71.011403 111.034081) (xy 71.017319 111.030387) (xy 71.023294 111.02697) (xy 71.035772 111.021541) (xy 71.048897 111.016283) (xy 71.062227 111.011366) (xy 71.075318 111.00696) (xy 71.087727 111.003237) (xy 71.093537 111.001685) (xy 71.099011 111.000366) (xy 71.104092 110.999304) (xy 71.108725 110.998519) (xy 71.112856 110.998032) (xy 71.116428 110.997865) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 56949209-1f1c-4689-a3e7-d6e4d07987ba)) (gr_poly (pts (xy 72.836484 111.000776) (xy 72.840056 111.000911) (xy 72.844186 111.00131) (xy 72.84882 111.001965) (xy 72.853901 111.002868) (xy 72.859374 111.004009) (xy 72.865184 111.00538) (xy 72.877594 111.008779) (xy 72.884082 111.01079) (xy 72.890685 111.012997) (xy 72.897348 111.015392) (xy 72.904015 111.017965) (xy 72.910631 111.02071) (xy 72.91714 111.023616) (xy 72.923487 111.026675) (xy 72.929617 111.02988) (xy 72.941509 111.036992) (xy 72.953128 111.045165) (xy 72.964406 111.054302) (xy 72.975274 111.064305) (xy 72.985665 111.075075) (xy 72.995511 111.086514) (xy 73.004742 111.098524) (xy 73.013292 111.111008) (xy 73.021091 111.123867) (xy 73.028071 111.137003) (xy 73.034165 111.150318) (xy 73.039304 111.163714) (xy 73.043419 111.177093) (xy 73.046443 111.190356) (xy 73.048308 111.203407) (xy 73.048784 111.209822) (xy 73.048944 111.216147) (xy 73.048809 111.219719) (xy 73.04841 111.223849) (xy 73.047755 111.228482) (xy 73.046852 111.233564) (xy 73.045711 111.239037) (xy 73.04434 111.244847) (xy 73.040941 111.257256) (xy 73.03893 111.263744) (xy 73.036723 111.270347) (xy 73.034328 111.27701) (xy 73.031755 111.283677) (xy 73.02901 111.290293) (xy 73.026104 111.296802) (xy 73.023045 111.30315) (xy 73.01984 111.30928) (xy 73.012728 111.321172) (xy 73.004555 111.332791) (xy 72.995418 111.344069) (xy 72.985415 111.354937) (xy 72.974646 111.365328) (xy 72.963206 111.375174) (xy 72.951196 111.384405) (xy 72.938712 111.392954) (xy 72.925853 111.400753) (xy 72.912717 111.407734) (xy 72.899402 111.413828) (xy 72.886006 111.418966) (xy 72.872627 111.423082) (xy 72.859364 111.426106) (xy 72.846313 111.42797) (xy 72.839898 111.428446) (xy 72.833573 111.428607) (xy 72.830001 111.428439) (xy 72.825871 111.427948) (xy 72.821238 111.427149) (xy 72.816156 111.42606) (xy 72.810683 111.424699) (xy 72.804873 111.423082) (xy 72.792464 111.419148) (xy 72.779373 111.414396) (xy 72.766043 111.408962) (xy 72.759427 111.406031) (xy 72.752917 111.402982) (xy 72.74657 111.39983) (xy 72.74044 111.396592) (xy 72.728548 111.389993) (xy 72.71693 111.382268) (xy 72.705652 111.373519) (xy 72.694783 111.36385) (xy 72.684392 111.353362) (xy 72.674547 111.342158) (xy 72.665315 111.33034) (xy 72.656766 111.318011) (xy 72.648967 111.305272) (xy 72.641986 111.292226) (xy 72.635893 111.278976) (xy 72.630754 111.265623) (xy 72.626638 111.252271) (xy 72.623614 111.23902) (xy 72.62175 111.225975) (xy 72.621274 111.219561) (xy 72.621113 111.213236) (xy 72.621274 111.206911) (xy 72.62175 111.200497) (xy 72.622533 111.194004) (xy 72.623614 111.187446) (xy 72.624986 111.180835) (xy 72.626638 111.174182) (xy 72.628564 111.167501) (xy 72.630754 111.160803) (xy 72.635893 111.147407) (xy 72.641986 111.134092) (xy 72.648967 111.120956) (xy 72.656766 111.108097) (xy 72.665315 111.095614) (xy 72.674547 111.083603) (xy 72.684392 111.072164) (xy 72.694783 111.061394) (xy 72.705652 111.051392) (xy 72.71693 111.042255) (xy 72.722701 111.038042) (xy 72.728548 111.034081) (xy 72.734465 111.030387) (xy 72.74044 111.02697) (xy 72.752804 111.021547) (xy 72.765679 111.016328) (xy 72.778759 111.011519) (xy 72.785279 111.009332) (xy 72.791736 111.007324) (xy 72.798091 111.005521) (xy 72.804304 111.003948) (xy 72.810339 111.00263) (xy 72.816156 111.001594) (xy 72.821718 111.000865) (xy 72.826985 111.000469) (xy 72.83192 111.000431) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 62c5e98b-3356-465e-9104-078d73320fef)) (gr_poly (pts (xy 73.255435 110.357196) (xy 73.258494 110.357573) (xy 73.264819 110.357734) (xy 73.271234 110.35821) (xy 73.277726 110.358993) (xy 73.284284 110.360074) (xy 73.290896 110.361446) (xy 73.297548 110.363098) (xy 73.304229 110.365024) (xy 73.310927 110.367214) (xy 73.324323 110.372353) (xy 73.337638 110.378446) (xy 73.350774 110.385427) (xy 73.363633 110.393226) (xy 73.376117 110.401775) (xy 73.388127 110.411007) (xy 73.399566 110.420852) (xy 73.410336 110.431243) (xy 73.420339 110.442112) (xy 73.429476 110.45339) (xy 73.433689 110.459161) (xy 73.437649 110.465009) (xy 73.441344 110.470925) (xy 73.444761 110.4769) (xy 73.450189 110.489378) (xy 73.455448 110.502503) (xy 73.460365 110.515833) (xy 73.46477 110.528924) (xy 73.468493 110.541333) (xy 73.470046 110.547143) (xy 73.471364 110.552617) (xy 73.472426 110.557698) (xy 73.473211 110.562331) (xy 73.473698 110.566462) (xy 73.473865 110.570034) (xy 73.473704 110.576102) (xy 73.473228 110.582293) (xy 73.472445 110.588591) (xy 73.471364 110.594983) (xy 73.469992 110.601453) (xy 73.46834 110.607988) (xy 73.466414 110.614573) (xy 73.464224 110.621193) (xy 73.459085 110.634484) (xy 73.452992 110.647745) (xy 73.446011 110.660861) (xy 73.438212 110.673717) (xy 73.429663 110.686198) (xy 73.420431 110.698189) (xy 73.410586 110.709574) (xy 73.400195 110.720238) (xy 73.394816 110.725265) (xy 73.389326 110.730068) (xy 73.383734 110.734633) (xy 73.378048 110.738946) (xy 73.372277 110.742993) (xy 73.36643 110.746758) (xy 73.360513 110.750229) (xy 73.354538 110.75339) (xy 73.348408 110.756627) (xy 73.342061 110.759779) (xy 73.335551 110.762829) (xy 73.328935 110.765759) (xy 73.322268 110.768553) (xy 73.315605 110.771194) (xy 73.309002 110.773664) (xy 73.302514 110.775946) (xy 73.296197 110.778023) (xy 73.290105 110.779879) (xy 73.284295 110.781497) (xy 73.278822 110.782858) (xy 73.273741 110.783947) (xy 73.269107 110.784745) (xy 73.264977 110.785237) (xy 73.261405 110.785405) (xy 73.257833 110.785237) (xy 73.253702 110.784745) (xy 73.249069 110.783947) (xy 73.243988 110.782858) (xy 73.238514 110.781497) (xy 73.232704 110.779879) (xy 73.220295 110.775946) (xy 73.207204 110.771194) (xy 73.193874 110.765759) (xy 73.187258 110.762829) (xy 73.180748 110.759779) (xy 73.174401 110.756627) (xy 73.168271 110.75339) (xy 73.156379 110.74679) (xy 73.144761 110.739065) (xy 73.133483 110.730317) (xy 73.122614 110.720648) (xy 73.112223 110.71016) (xy 73.102378 110.698956) (xy 73.093146 110.687138) (xy 73.084597 110.674809) (xy 73.076798 110.66207) (xy 73.069817 110.649024) (xy 73.063724 110.635774) (xy 73.058585 110.622421) (xy 73.05447 110.609068) (xy 73.051445 110.595818) (xy 73.049581 110.582773) (xy 73.049105 110.576358) (xy 73.048944 110.570034) (xy 73.049105 110.563709) (xy 73.049581 110.557294) (xy 73.050364 110.550802) (xy 73.051445 110.544244) (xy 73.052817 110.537632) (xy 73.05447 110.53098) (xy 73.056395 110.524299) (xy 73.058585 110.517601) (xy 73.063724 110.504205) (xy 73.069817 110.49089) (xy 73.076798 110.477754) (xy 73.084597 110.464895) (xy 73.093146 110.452412) (xy 73.102378 110.440401) (xy 73.112223 110.428962) (xy 73.122614 110.418192) (xy 73.133483 110.40819) (xy 73.144761 110.399053) (xy 73.150532 110.394839) (xy 73.156379 110.390879) (xy 73.162295 110.387184) (xy 73.168271 110.383767) (xy 73.1744 110.380563) (xy 73.180743 110.377509) (xy 73.187239 110.374616) (xy 73.193829 110.371898) (xy 73.200452 110.369368) (xy 73.207051 110.367038) (xy 73.213563 110.364921) (xy 73.219931 110.363031) (xy 73.226095 110.361378) (xy 73.231994 110.359978) (xy 73.237569 110.358842) (xy 73.24276 110.357983) (xy 73.247508 110.357413) (xy 73.251753 110.357147) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 812153b4-a661-4671-b49d-76ef5744952d)) (gr_poly (pts (xy 73.695718 109.711596) (xy 73.699849 109.711996) (xy 73.704482 109.712651) (xy 73.709563 109.713553) (xy 73.715037 109.714694) (xy 73.720847 109.716066) (xy 73.733256 109.719465) (xy 73.739744 109.721476) (xy 73.746347 109.723683) (xy 73.75301 109.726077) (xy 73.759677 109.728651) (xy 73.766293 109.731395) (xy 73.772802 109.734301) (xy 73.779149 109.737361) (xy 73.785279 109.740565) (xy 73.797171 109.747709) (xy 73.80879 109.75597) (xy 73.820068 109.765237) (xy 73.830937 109.775399) (xy 73.841328 109.786346) (xy 73.851173 109.797967) (xy 73.860405 109.81015) (xy 73.868954 109.822785) (xy 73.876753 109.835761) (xy 73.883734 109.848967) (xy 73.889827 109.862293) (xy 73.894966 109.875627) (xy 73.899081 109.888859) (xy 73.902105 109.901877) (xy 73.90397 109.914572) (xy 73.904446 109.920763) (xy 73.904607 109.926832) (xy 73.904446 109.9329) (xy 73.90397 109.939091) (xy 73.903187 109.945389) (xy 73.902105 109.951781) (xy 73.900734 109.958251) (xy 73.899081 109.964786) (xy 73.897156 109.971371) (xy 73.894966 109.977991) (xy 73.889827 109.991282) (xy 73.883733 110.004543) (xy 73.876753 110.017659) (xy 73.868954 110.030515) (xy 73.860405 110.042996) (xy 73.851173 110.054987) (xy 73.841328 110.066372) (xy 73.830937 110.077037) (xy 73.825558 110.082063) (xy 73.820068 110.086866) (xy 73.814476 110.091431) (xy 73.80879 110.095744) (xy 73.803019 110.099791) (xy 73.797171 110.103557) (xy 73.791255 110.107027) (xy 73.785279 110.110189) (xy 73.779149 110.113426) (xy 73.772802 110.116578) (xy 73.766293 110.119627) (xy 73.759677 110.122558) (xy 73.75301 110.125352) (xy 73.746347 110.127992) (xy 73.739744 110.130462) (xy 73.733256 110.132744) (xy 73.726938 110.134822) (xy 73.720847 110.136678) (xy 73.715037 110.138295) (xy 73.709563 110.139657) (xy 73.704482 110.140745) (xy 73.699849 110.141544) (xy 73.695718 110.142035) (xy 73.692146 110.142203) (xy 73.688574 110.142035) (xy 73.684444 110.141544) (xy 73.67981 110.140745) (xy 73.674729 110.139657) (xy 73.669256 110.138295) (xy 73.663446 110.136678) (xy 73.651037 110.132744) (xy 73.637946 110.127992) (xy 73.624616 110.122558) (xy 73.618 110.119627) (xy 73.61149 110.116578) (xy 73.605143 110.113426) (xy 73.599013 110.110189) (xy 73.587121 110.103589) (xy 73.575502 110.095864) (xy 73.564224 110.087115) (xy 73.553356 110.077446) (xy 73.542965 110.066958) (xy 73.533119 110.055754) (xy 73.523888 110.043936) (xy 73.515338 110.031607) (xy 73.507539 110.018868) (xy 73.500559 110.005823) (xy 73.494465 109.992572) (xy 73.489327 109.97922) (xy 73.485211 109.965867) (xy 73.482187 109.952616) (xy 73.480323 109.939571) (xy 73.479847 109.933157) (xy 73.479686 109.926832) (xy 73.479847 109.920507) (xy 73.480323 109.914093) (xy 73.481106 109.9076) (xy 73.482187 109.901042) (xy 73.483558 109.89443) (xy 73.485211 109.887778) (xy 73.487137 109.881097) (xy 73.489327 109.874399) (xy 73.494465 109.861003) (xy 73.500559 109.847688) (xy 73.50754 109.834552) (xy 73.515339 109.821693) (xy 73.523888 109.80921) (xy 73.533119 109.797199) (xy 73.542965 109.78576) (xy 73.553356 109.77499) (xy 73.564225 109.764988) (xy 73.575502 109.755851) (xy 73.581274 109.751637) (xy 73.587121 109.747677) (xy 73.593037 109.743982) (xy 73.599013 109.740565) (xy 73.605143 109.737361) (xy 73.61149 109.734301) (xy 73.618 109.731395) (xy 73.624616 109.728651) (xy 73.631283 109.726077) (xy 73.637946 109.723683) (xy 73.644549 109.721476) (xy 73.651037 109.719465) (xy 73.657354 109.717659) (xy 73.663446 109.716066) (xy 73.669256 109.714694) (xy 73.674729 109.713553) (xy 73.67981 109.712651) (xy 73.684444 109.711996) (xy 73.688574 109.711596) (xy 73.692146 109.711461) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 8db8e59c-d177-4a47-853c-6445c5a2ee8b)) (gr_line (start 67.31 41.656) (end 67.31 41.148) (stroke (width 0.12) (type default)) (layer "F.SilkS") (tstamp 90f023c7-5a4b-4067-9bec-07afef8bd9d0)) (gr_poly (pts (xy 71.547169 111.643978) (xy 71.550741 111.644113) (xy 71.554872 111.644512) (xy 71.559505 111.645168) (xy 71.564586 111.64607) (xy 71.57006 111.647211) (xy 71.57587 111.648582) (xy 71.588279 111.651982) (xy 71.594767 111.653993) (xy 71.60137 111.6562) (xy 71.608033 111.658594) (xy 71.6147 111.661168) (xy 71.621316 111.663912) (xy 71.627825 111.666818) (xy 71.634173 111.669878) (xy 71.640303 111.673082) (xy 71.652194 111.680194) (xy 71.663813 111.688368) (xy 71.675091 111.697505) (xy 71.68596 111.707507) (xy 71.696351 111.718277) (xy 71.706196 111.729716) (xy 71.715428 111.741726) (xy 71.723977 111.75421) (xy 71.731776 111.767069) (xy 71.738757 111.780205) (xy 71.74485 111.79352) (xy 71.749989 111.806916) (xy 71.754104 111.820295) (xy 71.757129 111.833559) (xy 71.758993 111.846609) (xy 71.759469 111.853024) (xy 71.75963 111.859349) (xy 71.759495 111.862921) (xy 71.759095 111.867051) (xy 71.75844 111.871685) (xy 71.757538 111.876766) (xy 71.756397 111.882239) (xy 71.755025 111.888049) (xy 71.751626 111.900458) (xy 71.749615 111.906946) (xy 71.747408 111.913549) (xy 71.745014 111.920212) (xy 71.74244 111.926879) (xy 71.739696 111.933495) (xy 71.73679 111.940005) (xy 71.73373 111.946352) (xy 71.730525 111.952482) (xy 71.723414 111.964374) (xy 71.71524 111.975993) (xy 71.706103 111.987271) (xy 71.696101 111.998139) (xy 71.685331 112.00853) (xy 71.673892 112.018376) (xy 71.661881 112.027607) (xy 71.649398 112.036157) (xy 71.636539 112.043956) (xy 71.623403 112.050936) (xy 71.610088 112.05703) (xy 71.596692 112.062169) (xy 71.583313 112.066284) (xy 71.570049 112.069308) (xy 71.556998 112.071173) (xy 71.550584 112.071649) (xy 71.544259 112.071809) (xy 71.540687 112.071642) (xy 71.536556 112.07115) (xy 71.531923 112.070351) (xy 71.526842 112.069263) (xy 71.521368 112.067901) (xy 71.515558 112.066284) (xy 71.503149 112.06235) (xy 71.490058 112.057598) (xy 71.476728 112.052164) (xy 71.470112 112.049234) (xy 71.463603 112.046184) (xy 71.457255 112.043032) (xy 71.451126 112.039795) (xy 71.439234 112.033195) (xy 71.427615 112.02547) (xy 71.416337 112.016722) (xy 71.405468 112.007052) (xy 71.395077 111.996565) (xy 71.385232 111.985361) (xy 71.376 111.973543) (xy 71.367451 111.961213) (xy 71.359652 111.948474) (xy 71.352672 111.935429) (xy 71.346578 111.922178) (xy 71.341439 111.908826) (xy 71.337324 111.895473) (xy 71.3343 111.882222) (xy 71.332435 111.869177) (xy 71.331959 111.862763) (xy 71.331799 111.856438) (xy 71.331959 111.850113) (xy 71.332435 111.843699) (xy 71.333218 111.837206) (xy 71.3343 111.830648) (xy 71.335671 111.824037) (xy 71.337324 111.817384) (xy 71.339249 111.810703) (xy 71.341439 111.804005) (xy 71.346578 111.790609) (xy 71.352672 111.777294) (xy 71.359652 111.764158) (xy 71.367451 111.7513) (xy 71.376 111.738816) (xy 71.385232 111.726806) (xy 71.395077 111.715366) (xy 71.405468 111.704597) (xy 71.416337 111.694594) (xy 71.427615 111.685457) (xy 71.433386 111.681244) (xy 71.439234 111.677284) (xy 71.44515 111.673589) (xy 71.451126 111.670172) (xy 71.463609 111.664749) (xy 71.476774 111.659531) (xy 71.490212 111.654722) (xy 71.496905 111.652535) (xy 71.503513 111.650527) (xy 71.509985 111.648723) (xy 71.516269 111.64715) (xy 71.522314 111.645833) (xy 71.52807 111.644797) (xy 71.533484 111.644068) (xy 71.538506 111.643671) (xy 71.543085 111.643633) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 9fe78667-e9db-480a-a2ef-4e2a68cb72ea)) (gr_circle (center 63.881 81.407) (end 64.135 81.407) (stroke (width 0.12) (type solid)) (fill solid) (layer "F.SilkS") (tstamp a33c67b4-1db6-49b5-b3fd-6f2f29f88425)) (gr_poly (pts (xy 74.557201 109.714507) (xy 74.561332 109.714906) (xy 74.565965 109.715561) (xy 74.571046 109.716464) (xy 74.576519 109.717605) (xy 74.58233 109.718976) (xy 74.594739 109.722375) (xy 74.601227 109.724386) (xy 74.60783 109.726593) (xy 74.614493 109.728988) (xy 74.62116 109.731561) (xy 74.627776 109.734305) (xy 74.634285 109.737212) (xy 74.640633 109.740271) (xy 74.646762 109.743476) (xy 74.658654 109.750588) (xy 74.670273 109.758761) (xy 74.681551 109.767898) (xy 74.69242 109.777901) (xy 74.702811 109.78867) (xy 74.712656 109.80011) (xy 74.721888 109.81212) (xy 74.730437 109.824604) (xy 74.738236 109.837463) (xy 74.745217 109.850599) (xy 74.75131 109.863914) (xy 74.756449 109.87731) (xy 74.760565 109.890688) (xy 74.763589 109.903952) (xy 74.765453 109.917003) (xy 74.765929 109.923418) (xy 74.76609 109.929742) (xy 74.765955 109.933314) (xy 74.765555 109.937445) (xy 74.7649 109.942078) (xy 74.763998 109.947159) (xy 74.762857 109.952633) (xy 74.761485 109.958443) (xy 74.758086 109.970852) (xy 74.756075 109.97734) (xy 74.753868 109.983943) (xy 74.751474 109.990606) (xy 74.7489 109.997273) (xy 74.746156 110.003889) (xy 74.74325 110.010398) (xy 74.74019 110.016746) (xy 74.736986 110.022876) (xy 74.729874 110.034768) (xy 74.7217 110.046387) (xy 74.712563 110.057665) (xy 74.702561 110.068533) (xy 74.691791 110.078924) (xy 74.680352 110.08877) (xy 74.668342 110.098001) (xy 74.655858 110.106551) (xy 74.642999 110.11435) (xy 74.629863 110.12133) (xy 74.616548 110.127424) (xy 74.603152 110.132562) (xy 74.589773 110.136678) (xy 74.576509 110.139702) (xy 74.563458 110.141567) (xy 74.557044 110.142043) (xy 74.550719 110.142203) (xy 74.547147 110.142035) (xy 74.543017 110.141544) (xy 74.538383 110.140745) (xy 74.533302 110.139657) (xy 74.527829 110.138295) (xy 74.522019 110.136678) (xy 74.50961 110.132744) (xy 74.496518 110.127992) (xy 74.483189 110.122558) (xy 74.476573 110.119627) (xy 74.470063 110.116578) (xy 74.463716 110.113426) (xy 74.457586 110.110189) (xy 74.445694 110.103589) (xy 74.434075 110.095864) (xy 74.422797 110.087115) (xy 74.411929 110.077446) (xy 74.401537 110.066958) (xy 74.391692 110.055754) (xy 74.382461 110.043936) (xy 74.373911 110.031607) (xy 74.366112 110.018868) (xy 74.359132 110.005823) (xy 74.353038 109.992572) (xy 74.347899 109.97922) (xy 74.343784 109.965867) (xy 74.34076 109.952616) (xy 74.338895 109.939571) (xy 74.338419 109.933157) (xy 74.338259 109.926832) (xy 74.338419 109.920507) (xy 74.338895 109.914093) (xy 74.339678 109.9076) (xy 74.34076 109.901042) (xy 74.342131 109.89443) (xy 74.343784 109.887778) (xy 74.34571 109.881097) (xy 74.347899 109.874399) (xy 74.353038 109.861003) (xy 74.359132 109.847688) (xy 74.366112 109.834552) (xy 74.373911 109.821693) (xy 74.382461 109.80921) (xy 74.391692 109.797199) (xy 74.401538 109.78576) (xy 74.411929 109.77499) (xy 74.422797 109.764988) (xy 74.434075 109.755851) (xy 74.439846 109.751637) (xy 74.445694 109.747677) (xy 74.45161 109.743982) (xy 74.457586 109.740565) (xy 74.463748 109.737393) (xy 74.470188 109.734426) (xy 74.476841 109.731664) (xy 74.483643 109.729106) (xy 74.490531 109.726752) (xy 74.497439 109.724604) (xy 74.504305 109.72266) (xy 74.511065 109.72092) (xy 74.517654 109.719385) (xy 74.524008 109.718055) (xy 74.530064 109.71693) (xy 74.535758 109.716009) (xy 74.541025 109.715293) (xy 74.545802 109.714781) (xy 74.550025 109.714474) (xy 74.553629 109.714372) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp abac7c28-8233-4786-9bd6-68988937551b)) (gr_poly (pts (xy 75.208474 110.357573) (xy 75.262347 110.35814) (xy 75.309724 110.358835) (xy 75.351132 110.359786) (xy 75.3871 110.36112) (xy 75.403209 110.361971) (xy 75.418157 110.362966) (xy 75.432009 110.364121) (xy 75.444831 110.365452) (xy 75.45669 110.366974) (xy 75.467651 110.368705) (xy 75.477781 110.370659) (xy 75.487146 110.372853) (xy 75.495811 110.375303) (xy 75.503844 110.378024) (xy 75.511309 110.381034) (xy 75.518274 110.384347) (xy 75.524803 110.38798) (xy 75.530964 110.391948) (xy 75.536822 110.396269) (xy 75.542444 110.400957) (xy 75.547895 110.406028) (xy 75.553241 110.4115) (xy 75.558549 110.417387) (xy 75.563885 110.423706) (xy 75.574905 110.437702) (xy 75.586828 110.453617) (xy 75.596434 110.466646) (xy 75.600321 110.473953) (xy 75.603654 110.482539) (xy 75.606474 110.492967) (xy 75.608826 110.5058) (xy 75.612294 110.54093) (xy 75.614397 110.59243) (xy 75.615477 110.664804) (xy 75.615932 110.89018) (xy 75.615893 110.958009) (xy 75.615756 111.017806) (xy 75.615491 111.070134) (xy 75.615068 111.115555) (xy 75.614457 111.154632) (xy 75.61363 111.187929) (xy 75.613125 111.202585) (xy 75.612554 111.216007) (xy 75.611915 111.228265) (xy 75.611202 111.23943) (xy 75.610413 111.249571) (xy 75.609543 111.258759) (xy 75.608589 111.267065) (xy 75.607547 111.274559) (xy 75.606414 111.281311) (xy 75.605185 111.287392) (xy 75.603856 111.292871) (xy 75.602426 111.29782) (xy 75.600888 111.302308) (xy 75.59924 111.306406) (xy 75.597478 111.310184) (xy 75.595599 111.313713) (xy 75.593597 111.317063) (xy 75.591471 111.320304) (xy 75.586828 111.326742) (xy 75.577095 111.339779) (xy 75.567495 111.351634) (xy 75.557954 111.362356) (xy 75.548401 111.37199) (xy 75.538762 111.380584) (xy 75.528966 111.388185) (xy 75.518939 111.394839) (xy 75.50861 111.400594) (xy 75.497906 111.405496) (xy 75.486754 111.409592) (xy 75.475081 111.41293) (xy 75.462817 111.415555) (xy 75.449887 111.417515) (xy 75.436219 111.418858) (xy 75.421742 111.419629) (xy 75.406382 111.419875) (xy 75.391022 111.419597) (xy 75.376545 111.418738) (xy 75.362877 111.417266) (xy 75.356324 111.416289) (xy 75.349947 111.415146) (xy 75.343736 111.413832) (xy 75.337682 111.412343) (xy 75.331777 111.410676) (xy 75.32601 111.408825) (xy 75.320374 111.406786) (xy 75.314858 111.404556) (xy 75.309454 111.402129) (xy 75.304154 111.399502) (xy 75.298947 111.396671) (xy 75.293824 111.39363) (xy 75.288778 111.390377) (xy 75.283798 111.386906) (xy 75.278875 111.383213) (xy 75.274001 111.379294) (xy 75.269167 111.375145) (xy 75.264363 111.370762) (xy 75.254809 111.361275) (xy 75.245269 111.350798) (xy 75.235668 111.339299) (xy 75.225936 111.326742) (xy 75.217159 111.313759) (xy 75.213504 111.306866) (xy 75.210292 111.299275) (xy 75.20749 111.29066) (xy 75.205063 111.280698) (xy 75.202977 111.269065) (xy 75.201198 111.255437) (xy 75.198424 111.220898) (xy 75.196468 111.174491) (xy 75.195058 111.113622) (xy 75.193921 111.035701) (xy 75.191011 110.782494) (xy 75.062953 110.782494) (xy 75.036736 110.782315) (xy 75.012566 110.781744) (xy 74.990306 110.780729) (xy 74.969819 110.77922) (xy 74.95097 110.777165) (xy 74.933621 110.774513) (xy 74.925467 110.772948) (xy 74.917636 110.771214) (xy 74.910113 110.769305) (xy 74.90288 110.767215) (xy 74.895919 110.764937) (xy 74.889214 110.762465) (xy 74.882748 110.759793) (xy 74.876504 110.756914) (xy 74.870464 110.753822) (xy 74.864612 110.750511) (xy 74.858931 110.746973) (xy 74.853403 110.743204) (xy 74.848011 110.739195) (xy 74.842739 110.734941) (xy 74.837569 110.730436) (xy 74.832484 110.725673) (xy 74.827467 110.720645) (xy 74.822502 110.715347) (xy 74.812657 110.703913) (xy 74.804845 110.6939) (xy 74.797776 110.683528) (xy 74.791441 110.672831) (xy 74.785832 110.661843) (xy 74.780942 110.650597) (xy 74.776762 110.639126) (xy 74.773284 110.627464) (xy 74.770501 110.615646) (xy 74.768404 110.603703) (xy 74.766986 110.591671) (xy 74.766238 110.579582) (xy 74.766152 110.56747) (xy 74.766721 110.555369) (xy 74.767937 110.543312) (xy 74.76979 110.531333) (xy 74.772275 110.519466) (xy 74.775381 110.507743) (xy 74.779102 110.496199) (xy 74.78343 110.484866) (xy 74.788356 110.47378) (xy 74.793872 110.462973) (xy 74.799971 110.452478) (xy 74.806644 110.44233) (xy 74.813884 110.432562) (xy 74.821683 110.423208) (xy 74.830032 110.4143) (xy 74.838923 110.405874) (xy 74.848349 110.397961) (xy 74.858301 110.390597) (xy 74.868772 110.383814) (xy 74.879754 110.377645) (xy 74.891238 110.372126) (xy 74.897774 110.369532) (xy 74.905466 110.367203) (xy 74.924844 110.363303) (xy 74.95043 110.360359) (xy 74.98328 110.358301) (xy 75.024452 110.357062) (xy 75.075004 110.356573) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp ad6c83fc-f082-4e82-98ea-487f9818463d)) (gr_poly (pts (xy 73.578452 111.644995) (xy 73.700352 111.645519) (xy 73.805425 111.646115) (xy 73.894996 111.646831) (xy 73.970392 111.647712) (xy 74.003189 111.64823) (xy 74.032939 111.648807) (xy 74.059807 111.649449) (xy 74.083961 111.650162) (xy 74.105565 111.650952) (xy 74.124786 111.651824) (xy 74.141788 111.652785) (xy 74.156738 111.65384) (xy 74.169802 111.654996) (xy 74.181145 111.656257) (xy 74.190933 111.65763) (xy 74.199332 111.659121) (xy 74.206507 111.660736) (xy 74.212624 111.66248) (xy 74.217849 111.664359) (xy 74.222348 111.66638) (xy 74.226286 111.668548) (xy 74.229829 111.670869) (xy 74.233143 111.673348) (xy 74.236394 111.675992) (xy 74.249431 111.685725) (xy 74.261286 111.695325) (xy 74.272008 111.704866) (xy 74.281642 111.714419) (xy 74.290236 111.724058) (xy 74.297837 111.733854) (xy 74.304491 111.743881) (xy 74.310246 111.75421) (xy 74.315148 111.764914) (xy 74.319244 111.776066) (xy 74.322582 111.787739) (xy 74.325207 111.800003) (xy 74.327168 111.812933) (xy 74.32851 111.826601) (xy 74.329281 111.841078) (xy 74.329527 111.856438) (xy 74.329249 111.871798) (xy 74.32839 111.886276) (xy 74.326918 111.899943) (xy 74.325941 111.906496) (xy 74.324798 111.912873) (xy 74.323484 111.919084) (xy 74.321995 111.925138) (xy 74.320328 111.931043) (xy 74.318477 111.93681) (xy 74.316438 111.942446) (xy 74.314208 111.947962) (xy 74.311781 111.953366) (xy 74.309154 111.958666) (xy 74.306323 111.963873) (xy 74.303282 111.968996) (xy 74.300029 111.974042) (xy 74.296558 111.979022) (xy 74.292865 111.983945) (xy 74.288946 111.988819) (xy 74.284797 111.993653) (xy 74.280414 111.998457) (xy 74.270927 112.008011) (xy 74.26045 112.017551) (xy 74.248951 112.027151) (xy 74.236394 112.036884) (xy 74.222376 112.046496) (xy 74.199559 112.053755) (xy 74.157506 112.059036) (xy 74.08578 112.062714) (xy 73.811565 112.066761) (xy 73.293419 112.068899) (xy 72.889645 112.069945) (xy 72.729793 112.069564) (xy 72.597466 112.068535) (xy 72.492287 112.066824) (xy 72.413882 112.064397) (xy 72.361876 112.061219) (xy 72.345655 112.059339) (xy 72.335892 112.057257) (xy 72.330147 112.05546) (xy 72.324379 112.053351) (xy 72.312819 112.048242) (xy 72.301302 112.042024) (xy 72.289917 112.034792) (xy 72.278753 112.02664) (xy 72.267901 112.01766) (xy 72.25745 112.007946) (xy 72.247488 111.997594) (xy 72.238107 111.986695) (xy 72.229395 111.975345) (xy 72.221442 111.963636) (xy 72.214337 111.951663) (xy 72.20817 111.93952) (xy 72.203031 111.9273) (xy 72.199008 111.915097) (xy 72.197444 111.909031) (xy 72.196192 111.903005) (xy 72.194751 111.893713) (xy 72.193696 111.884401) (xy 72.193024 111.875081) (xy 72.19273 111.865766) (xy 72.19281 111.856471) (xy 72.193257 111.847209) (xy 72.194068 111.837992) (xy 72.195237 111.828835) (xy 72.196761 111.81975) (xy 72.198633 111.810751) (xy 72.20085 111.80185) (xy 72.203406 111.793063) (xy 72.206297 111.784401) (xy 72.209517 111.775878) (xy 72.213063 111.767508) (xy 72.216929 111.759303) (xy 72.22111 111.751277) (xy 72.225603 111.743444) (xy 72.230401 111.735817) (xy 72.2355 111.728408) (xy 72.240895 111.721232) (xy 72.246582 111.714302) (xy 72.252556 111.70763) (xy 72.258812 111.701231) (xy 72.265344 111.695118) (xy 72.272149 111.689303) (xy 72.279222 111.683801) (xy 72.286557 111.678624) (xy 72.294151 111.673787) (xy 72.301997 111.669301) (xy 72.310092 111.665181) (xy 72.31843 111.661441) (xy 72.338331 111.656512) (xy 72.377229 111.652573) (xy 72.531254 111.647252) (xy 72.818976 111.64466) (xy 73.278867 111.643978) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp aea5593b-3dc0-45a6-ace0-c57b0e44e695)) (gr_poly (pts (xy 71.122752 109.711622) (xy 71.129167 109.712098) (xy 71.13566 109.712881) (xy 71.142218 109.713962) (xy 71.148829 109.715334) (xy 71.155482 109.716986) (xy 71.162163 109.718912) (xy 71.168861 109.721102) (xy 71.182257 109.726241) (xy 71.195572 109.732334) (xy 71.208708 109.739315) (xy 71.221566 109.747114) (xy 71.23405 109.755663) (xy 71.246061 109.764895) (xy 71.2575 109.77474) (xy 71.26827 109.785131) (xy 71.278272 109.796) (xy 71.287409 109.807277) (xy 71.291622 109.813048) (xy 71.295582 109.818896) (xy 71.299277 109.824812) (xy 71.302694 109.830788) (xy 71.308123 109.843265) (xy 71.313381 109.856391) (xy 71.318298 109.869721) (xy 71.322703 109.882812) (xy 71.326427 109.895221) (xy 71.327979 109.901031) (xy 71.329297 109.906504) (xy 71.33036 109.911586) (xy 71.331145 109.916219) (xy 71.331632 109.92035) (xy 71.331799 109.923921) (xy 71.331638 109.92999) (xy 71.331162 109.936181) (xy 71.330379 109.942479) (xy 71.329297 109.94887) (xy 71.327926 109.955341) (xy 71.326273 109.961875) (xy 71.324348 109.96846) (xy 71.322158 109.975081) (xy 71.317019 109.988372) (xy 71.310925 110.001633) (xy 71.303945 110.014749) (xy 71.296146 110.027605) (xy 71.287597 110.040086) (xy 71.278365 110.052076) (xy 71.26852 110.063461) (xy 71.258129 110.074126) (xy 71.25275 110.079152) (xy 71.24726 110.083955) (xy 71.241668 110.08852) (xy 71.235982 110.092834) (xy 71.230211 110.09688) (xy 71.224363 110.100646) (xy 71.218447 110.104117) (xy 71.212472 110.107278) (xy 71.206342 110.110515) (xy 71.199994 110.113667) (xy 71.193485 110.116717) (xy 71.186869 110.119647) (xy 71.180202 110.122441) (xy 71.173539 110.125081) (xy 71.166936 110.127551) (xy 71.160448 110.129833) (xy 71.15413 110.131911) (xy 71.148039 110.133767) (xy 71.142228 110.135384) (xy 71.136755 110.136746) (xy 71.131674 110.137834) (xy 71.12704 110.138633) (xy 71.12291 110.139125) (xy 71.119338 110.139292) (xy 71.11327 110.139132) (xy 71.107079 110.138656) (xy 71.100781 110.137873) (xy 71.094389 110.136791) (xy 71.087919 110.13542) (xy 71.081384 110.133767) (xy 71.074799 110.131841) (xy 71.068178 110.129652) (xy 71.054888 110.124513) (xy 71.041627 110.118419) (xy 71.028511 110.111439) (xy 71.015655 110.10364) (xy 71.003174 110.09509) (xy 70.991183 110.085859) (xy 70.979798 110.076013) (xy 70.969133 110.065622) (xy 70.964107 110.060243) (xy 70.959304 110.054754) (xy 70.954739 110.049162) (xy 70.950426 110.043476) (xy 70.946379 110.037705) (xy 70.942613 110.031857) (xy 70.939143 110.025941) (xy 70.935982 110.019965) (xy 70.932745 110.013835) (xy 70.929593 110.007488) (xy 70.926543 110.000979) (xy 70.923613 109.994363) (xy 70.920819 109.987696) (xy 70.918178 109.981033) (xy 70.915709 109.97443) (xy 70.913426 109.967942) (xy 70.911349 109.961624) (xy 70.909493 109.955533) (xy 70.907875 109.949722) (xy 70.906514 109.944249) (xy 70.905425 109.939168) (xy 70.904627 109.934534) (xy 70.904135 109.930404) (xy 70.903967 109.926832) (xy 70.904128 109.920507) (xy 70.904604 109.914093) (xy 70.905387 109.9076) (xy 70.906469 109.901042) (xy 70.90784 109.89443) (xy 70.909493 109.887778) (xy 70.911418 109.881097) (xy 70.913608 109.874399) (xy 70.918747 109.861003) (xy 70.924841 109.847688) (xy 70.931821 109.834552) (xy 70.93962 109.821693) (xy 70.948169 109.80921) (xy 70.957401 109.797199) (xy 70.967246 109.78576) (xy 70.977637 109.77499) (xy 70.988506 109.764988) (xy 70.999784 109.755851) (xy 71.005555 109.751637) (xy 71.011403 109.747677) (xy 71.017319 109.743982) (xy 71.023294 109.740565) (xy 71.029424 109.737361) (xy 71.035772 109.734301) (xy 71.042281 109.731395) (xy 71.048897 109.728651) (xy 71.055564 109.726077) (xy 71.062227 109.723683) (xy 71.06883 109.721476) (xy 71.075318 109.719465) (xy 71.081636 109.717659) (xy 71.087727 109.716066) (xy 71.093537 109.714694) (xy 71.099011 109.713553) (xy 71.104092 109.712651) (xy 71.108725 109.711996) (xy 71.112856 109.711596) (xy 71.116428 109.711461) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp be70c03c-c94e-40d2-b997-6ca7207bba74)) (gr_poly (pts (xy 74.55363 111.000775) (xy 74.559954 111.000936) (xy 74.566369 111.001412) (xy 74.572862 111.002195) (xy 74.57942 111.003277) (xy 74.586031 111.004648) (xy 74.592684 111.006301) (xy 74.599365 111.008226) (xy 74.606063 111.010416) (xy 74.619458 111.015555) (xy 74.632773 111.021649) (xy 74.645909 111.028629) (xy 74.658768 111.036428) (xy 74.671252 111.044978) (xy 74.683262 111.054209) (xy 74.694702 111.064054) (xy 74.705472 111.074446) (xy 74.715474 111.085314) (xy 74.724611 111.096592) (xy 74.728824 111.102363) (xy 74.732784 111.108211) (xy 74.736479 111.114127) (xy 74.739896 111.120103) (xy 74.745325 111.13258) (xy 74.750583 111.145705) (xy 74.7555 111.159035) (xy 74.759905 111.172126) (xy 74.763629 111.184536) (xy 74.765181 111.190346) (xy 74.766499 111.195819) (xy 74.767561 111.2009) (xy 74.768346 111.205534) (xy 74.768833 111.209664) (xy 74.769 111.213236) (xy 74.768865 111.216808) (xy 74.768466 111.220938) (xy 74.767811 111.225572) (xy 74.766908 111.230653) (xy 74.765767 111.236126) (xy 74.764396 111.241936) (xy 74.760997 111.254345) (xy 74.758986 111.260833) (xy 74.756779 111.267437) (xy 74.754384 111.2741) (xy 74.751811 111.280767) (xy 74.749067 111.287383) (xy 74.746161 111.293892) (xy 74.743101 111.300239) (xy 74.739896 111.306369) (xy 74.732753 111.318261) (xy 74.724492 111.32988) (xy 74.715225 111.341158) (xy 74.705062 111.352027) (xy 74.694116 111.362418) (xy 74.682495 111.372263) (xy 74.670312 111.381495) (xy 74.657677 111.390044) (xy 74.644701 111.397843) (xy 74.631495 111.404823) (xy 74.618169 111.410917) (xy 74.604835 111.416056) (xy 74.591603 111.420171) (xy 74.578584 111.423195) (xy 74.56589 111.42506) (xy 74.559698 111.425536) (xy 74.55363 111.425697) (xy 74.547561 111.425536) (xy 74.541371 111.42506) (xy 74.535072 111.424277) (xy 74.528681 111.423195) (xy 74.522211 111.421824) (xy 74.515676 111.420171) (xy 74.509091 111.418246) (xy 74.50247 111.416056) (xy 74.489179 111.410917) (xy 74.475918 111.404823) (xy 74.462802 111.397843) (xy 74.449946 111.390044) (xy 74.437465 111.381494) (xy 74.425475 111.372263) (xy 74.41409 111.362417) (xy 74.403425 111.352026) (xy 74.398399 111.346647) (xy 74.393596 111.341158) (xy 74.389031 111.335566) (xy 74.384718 111.32988) (xy 74.380671 111.324109) (xy 74.376905 111.318261) (xy 74.373434 111.312345) (xy 74.370273 111.306369) (xy 74.367036 111.300239) (xy 74.363884 111.293892) (xy 74.360834 111.287383) (xy 74.357904 111.280767) (xy 74.35511 111.2741) (xy 74.35247 111.267437) (xy 74.35 111.260834) (xy 74.347718 111.254346) (xy 74.34564 111.248028) (xy 74.343784 111.241937) (xy 74.342167 111.236127) (xy 74.340805 111.230653) (xy 74.339717 111.225572) (xy 74.338918 111.220939) (xy 74.338426 111.216808) (xy 74.338259 111.213236) (xy 74.338419 111.206911) (xy 74.338895 111.200497) (xy 74.339678 111.194004) (xy 74.34076 111.187446) (xy 74.342131 111.180835) (xy 74.343784 111.174182) (xy 74.34571 111.167501) (xy 74.347899 111.160803) (xy 74.353038 111.147407) (xy 74.359132 111.134092) (xy 74.366112 111.120956) (xy 74.373911 111.108097) (xy 74.382461 111.095614) (xy 74.391692 111.083603) (xy 74.401538 111.072164) (xy 74.411929 111.061394) (xy 74.422797 111.051392) (xy 74.434075 111.042255) (xy 74.439846 111.038042) (xy 74.445694 111.034081) (xy 74.45161 111.030387) (xy 74.457586 111.02697) (xy 74.469949 111.021547) (xy 74.482825 111.016328) (xy 74.495904 111.011519) (xy 74.502425 111.009332) (xy 74.508882 111.007324) (xy 74.515236 111.005521) (xy 74.52145 111.003948) (xy 74.527485 111.00263) (xy 74.533302 111.001594) (xy 74.538864 111.000865) (xy 74.544131 111.000469) (xy 74.549066 111.00043) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp c0c36be9-56aa-45db-bbac-b7c6ee634728)) (gr_poly (pts (xy 74.126302 110.354823) (xy 74.132717 110.355299) (xy 74.13921 110.356082) (xy 74.145768 110.357164) (xy 74.152379 110.358535) (xy 74.159032 110.360188) (xy 74.165713 110.362114) (xy 74.172411 110.364303) (xy 74.185807 110.369442) (xy 74.199122 110.375536) (xy 74.212258 110.382516) (xy 74.225116 110.390315) (xy 74.2376 110.398865) (xy 74.249611 110.408096) (xy 74.26105 110.417942) (xy 74.27182 110.428333) (xy 74.281822 110.439201) (xy 74.290959 110.450479) (xy 74.295172 110.45625) (xy 74.299132 110.462098) (xy 74.302827 110.468014) (xy 74.306244 110.47399) (xy 74.311673 110.486467) (xy 74.316931 110.499592) (xy 74.321848 110.512922) (xy 74.326253 110.526013) (xy 74.329977 110.538422) (xy 74.331529 110.544233) (xy 74.332847 110.549706) (xy 74.33391 110.554787) (xy 74.334695 110.559421) (xy 74.335182 110.563551) (xy 74.335349 110.567123) (xy 74.335188 110.573192) (xy 74.334712 110.579382) (xy 74.333929 110.58568) (xy 74.332847 110.592072) (xy 74.331476 110.598542) (xy 74.329823 110.605077) (xy 74.327898 110.611662) (xy 74.325708 110.618283) (xy 74.320569 110.631574) (xy 74.314475 110.644835) (xy 74.307495 110.657951) (xy 74.299696 110.670807) (xy 74.291146 110.683288) (xy 74.281915 110.695278) (xy 74.27207 110.706663) (xy 74.261678 110.717328) (xy 74.2563 110.722354) (xy 74.25081 110.727157) (xy 74.245218 110.731722) (xy 74.239532 110.736035) (xy 74.233761 110.740082) (xy 74.227913 110.743848) (xy 74.221997 110.747319) (xy 74.216021 110.75048) (xy 74.209891 110.753717) (xy 74.203544 110.756869) (xy 74.197035 110.759919) (xy 74.190419 110.762849) (xy 74.183752 110.765643) (xy 74.177089 110.768283) (xy 74.170486 110.770753) (xy 74.163998 110.773035) (xy 74.15768 110.775113) (xy 74.151589 110.776969) (xy 74.145778 110.778586) (xy 74.140305 110.779948) (xy 74.135224 110.781036) (xy 74.13059 110.781835) (xy 74.12646 110.782326) (xy 74.122888 110.782494) (xy 74.116819 110.782334) (xy 74.110629 110.781858) (xy 74.104331 110.781074) (xy 74.097939 110.779993) (xy 74.091469 110.778622) (xy 74.084934 110.776969) (xy 74.078349 110.775043) (xy 74.071728 110.772853) (xy 74.058437 110.767715) (xy 74.045176 110.761621) (xy 74.03206 110.754641) (xy 74.019204 110.746842) (xy 74.006724 110.738292) (xy 73.994733 110.729061) (xy 73.983348 110.719215) (xy 73.972683 110.708824) (xy 73.967657 110.703445) (xy 73.962854 110.697956) (xy 73.958289 110.692364) (xy 73.953976 110.686678) (xy 73.949929 110.680907) (xy 73.946163 110.675059) (xy 73.942693 110.669143) (xy 73.939532 110.663167) (xy 73.936294 110.657037) (xy 73.933142 110.65069) (xy 73.930093 110.64418) (xy 73.927162 110.637565) (xy 73.924368 110.630898) (xy 73.921728 110.624235) (xy 73.919258 110.617632) (xy 73.916976 110.611144) (xy 73.914898 110.604826) (xy 73.913042 110.598735) (xy 73.911425 110.592924) (xy 73.910064 110.587451) (xy 73.908975 110.58237) (xy 73.908176 110.577736) (xy 73.907685 110.573606) (xy 73.907517 110.570034) (xy 73.907678 110.563709) (xy 73.908154 110.557294) (xy 73.908937 110.550802) (xy 73.910018 110.544244) (xy 73.91139 110.537632) (xy 73.913042 110.53098) (xy 73.914968 110.524299) (xy 73.917158 110.517601) (xy 73.922297 110.504205) (xy 73.92839 110.49089) (xy 73.935371 110.477754) (xy 73.94317 110.464895) (xy 73.951719 110.452412) (xy 73.960951 110.440401) (xy 73.970796 110.428962) (xy 73.981187 110.418192) (xy 73.992056 110.40819) (xy 74.003334 110.399053) (xy 74.009105 110.394839) (xy 74.014952 110.390879) (xy 74.020869 110.387184) (xy 74.026844 110.383767) (xy 74.032974 110.380563) (xy 74.039322 110.377503) (xy 74.045831 110.374597) (xy 74.052447 110.371853) (xy 74.059114 110.369279) (xy 74.065777 110.366885) (xy 74.07238 110.364678) (xy 74.078868 110.362667) (xy 74.085186 110.36086) (xy 74.091277 110.359267) (xy 74.097087 110.357896) (xy 74.102561 110.356755) (xy 74.107642 110.355852) (xy 74.112275 110.355197) (xy 74.116406 110.354798) (xy 74.119978 110.354663) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp c11c9a35-614a-42b8-8119-93ad30e65e43)) (gr_poly (pts (xy 72.839898 109.711622) (xy 72.846313 109.712098) (xy 72.852805 109.712881) (xy 72.859364 109.713962) (xy 72.865975 109.715334) (xy 72.872627 109.716986) (xy 72.879309 109.718912) (xy 72.886006 109.721102) (xy 72.899402 109.726241) (xy 72.912718 109.732334) (xy 72.925853 109.739315) (xy 72.938712 109.747114) (xy 72.951196 109.755663) (xy 72.963206 109.764895) (xy 72.974646 109.77474) (xy 72.985415 109.785131) (xy 72.995418 109.796) (xy 73.004555 109.807277) (xy 73.008768 109.813048) (xy 73.012728 109.818896) (xy 73.016423 109.824812) (xy 73.01984 109.830788) (xy 73.025269 109.843265) (xy 73.030527 109.856391) (xy 73.035444 109.869721) (xy 73.039849 109.882812) (xy 73.043573 109.895221) (xy 73.045125 109.901031) (xy 73.046443 109.906504) (xy 73.047505 109.911586) (xy 73.048291 109.916219) (xy 73.048777 109.92035) (xy 73.048944 109.923921) (xy 73.048784 109.92999) (xy 73.048308 109.936181) (xy 73.047525 109.942479) (xy 73.046443 109.94887) (xy 73.045072 109.955341) (xy 73.043419 109.961875) (xy 73.041493 109.96846) (xy 73.039304 109.975081) (xy 73.034165 109.988372) (xy 73.028071 110.001633) (xy 73.021091 110.014749) (xy 73.013292 110.027605) (xy 73.004742 110.040086) (xy 72.995511 110.052076) (xy 72.985665 110.063461) (xy 72.975274 110.074126) (xy 72.969895 110.079152) (xy 72.964406 110.083955) (xy 72.958814 110.08852) (xy 72.953128 110.092834) (xy 72.947357 110.09688) (xy 72.941509 110.100646) (xy 72.935593 110.104117) (xy 72.929617 110.107278) (xy 72.923487 110.110515) (xy 72.91714 110.113667) (xy 72.910631 110.116717) (xy 72.904015 110.119647) (xy 72.897348 110.122441) (xy 72.890685 110.125081) (xy 72.884082 110.127551) (xy 72.877594 110.129833) (xy 72.871276 110.131911) (xy 72.865184 110.133767) (xy 72.859374 110.135384) (xy 72.853901 110.136746) (xy 72.84882 110.137834) (xy 72.844186 110.138633) (xy 72.840056 110.139125) (xy 72.836484 110.139292) (xy 72.830415 110.139132) (xy 72.824225 110.138656) (xy 72.817927 110.137873) (xy 72.811535 110.136791) (xy 72.805065 110.13542) (xy 72.79853 110.133767) (xy 72.791945 110.131841) (xy 72.785324 110.129652) (xy 72.772033 110.124513) (xy 72.758772 110.118419) (xy 72.745656 110.111439) (xy 72.7328 110.10364) (xy 72.720319 110.09509) (xy 72.708329 110.085859) (xy 72.696944 110.076013) (xy 72.686279 110.065622) (xy 72.681253 110.060243) (xy 72.67645 110.054754) (xy 72.671885 110.049162) (xy 72.667572 110.043476) (xy 72.663525 110.037705) (xy 72.659759 110.031857) (xy 72.656289 110.025941) (xy 72.653128 110.019965) (xy 72.64989 110.013835) (xy 72.646738 110.007488) (xy 72.643689 110.000979) (xy 72.640758 109.994363) (xy 72.637965 109.987696) (xy 72.635324 109.981033) (xy 72.632854 109.97443) (xy 72.630572 109.967942) (xy 72.628494 109.961624) (xy 72.626638 109.955533) (xy 72.625021 109.949722) (xy 72.62366 109.944249) (xy 72.622571 109.939168) (xy 72.621773 109.934534) (xy 72.621281 109.930404) (xy 72.621113 109.926832) (xy 72.621274 109.920507) (xy 72.62175 109.914093) (xy 72.622533 109.9076) (xy 72.623614 109.901042) (xy 72.624986 109.89443) (xy 72.626638 109.887778) (xy 72.628564 109.881097) (xy 72.630754 109.874399) (xy 72.635893 109.861003) (xy 72.641986 109.847688) (xy 72.648967 109.834552) (xy 72.656766 109.821693) (xy 72.665315 109.80921) (xy 72.674547 109.797199) (xy 72.684392 109.78576) (xy 72.694783 109.77499) (xy 72.705652 109.764988) (xy 72.71693 109.755851) (xy 72.722701 109.751637) (xy 72.728548 109.747677) (xy 72.734465 109.743982) (xy 72.74044 109.740565) (xy 72.746538 109.737361) (xy 72.752798 109.734301) (xy 72.759177 109.731395) (xy 72.765633 109.728651) (xy 72.772124 109.726077) (xy 72.778605 109.723683) (xy 72.785036 109.721476) (xy 72.791372 109.719465) (xy 72.797573 109.717659) (xy 72.803594 109.716066) (xy 72.809393 109.714694) (xy 72.814929 109.713553) (xy 72.820157 109.712651) (xy 72.825035 109.711996) (xy 72.829522 109.711596) (xy 72.833573 109.711461) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp c5383451-e798-427e-8631-6dd983e845c0)) (gr_poly (pts (xy 71.346351 110.357574) (xy 71.400225 110.358141) (xy 71.447601 110.358836) (xy 71.489009 110.359786) (xy 71.524977 110.361121) (xy 71.541087 110.361972) (xy 71.556034 110.362967) (xy 71.569886 110.364122) (xy 71.582708 110.365452) (xy 71.594567 110.366975) (xy 71.605528 110.368705) (xy 71.615658 110.370659) (xy 71.625023 110.372853) (xy 71.633688 110.375303) (xy 71.641721 110.378025) (xy 71.649186 110.381034) (xy 71.656151 110.384347) (xy 71.66268 110.38798) (xy 71.668841 110.391949) (xy 71.674699 110.396269) (xy 71.680321 110.400957) (xy 71.685772 110.406029) (xy 71.691118 110.4115) (xy 71.696427 110.417387) (xy 71.701762 110.423706) (xy 71.712782 110.437703) (xy 71.724705 110.453617) (xy 71.728141 110.458738) (xy 71.731356 110.464257) (xy 71.73712 110.476389) (xy 71.741997 110.4898) (xy 71.745987 110.504277) (xy 71.749091 110.519606) (xy 71.751308 110.535575) (xy 71.752638 110.55197) (xy 71.753081 110.568579) (xy 71.752638 110.585187) (xy 71.751308 110.601582) (xy 71.749091 110.617551) (xy 71.745987 110.632881) (xy 71.741997 110.647357) (xy 71.73712 110.660768) (xy 71.731356 110.6729) (xy 71.728141 110.67842) (xy 71.724705 110.68354) (xy 71.702507 110.713452) (xy 71.692046 110.725657) (xy 71.681367 110.736201) (xy 71.669989 110.745209) (xy 71.65743 110.75281) (xy 71.643208 110.759133) (xy 71.626842 110.764304) (xy 71.60785 110.768453) (xy 71.585749 110.771705) (xy 71.56006 110.774191) (xy 71.530298 110.776037) (xy 71.456634 110.778322) (xy 71.360903 110.779584) (xy 71.30763 110.780494) (xy 71.259959 110.781) (xy 71.217489 110.781036) (xy 71.17982 110.780539) (xy 71.146551 110.779446) (xy 71.131441 110.778655) (xy 71.11728 110.777692) (xy 71.10402 110.776547) (xy 71.091608 110.775212) (xy 71.079996 110.773681) (xy 71.069133 110.771945) (xy 71.05897 110.769995) (xy 71.049455 110.767824) (xy 71.04054 110.765424) (xy 71.032173 110.762787) (xy 71.024306 110.759905) (xy 71.016887 110.756769) (xy 71.009866 110.753373) (xy 71.003194 110.749707) (xy 70.996821 110.745764) (xy 70.990696 110.741537) (xy 70.984769 110.737016) (xy 70.97899 110.732193) (xy 70.97331 110.727062) (xy 70.967677 110.721614) (xy 70.956355 110.709734) (xy 70.947998 110.699457) (xy 70.940385 110.688836) (xy 70.933511 110.677906) (xy 70.92737 110.666698) (xy 70.921956 110.655244) (xy 70.917262 110.643578) (xy 70.913284 110.631732) (xy 70.910016 110.619739) (xy 70.90745 110.60763) (xy 70.905582 110.595438) (xy 70.904406 110.583197) (xy 70.903916 110.570938) (xy 70.904106 110.558694) (xy 70.90497 110.546497) (xy 70.906502 110.53438) (xy 70.908697 110.522376) (xy 70.911548 110.510517) (xy 70.91505 110.498835) (xy 70.919196 110.487363) (xy 70.923982 110.476133) (xy 70.929401 110.465179) (xy 70.935447 110.454532) (xy 70.942114 110.444225) (xy 70.949397 110.434291) (xy 70.95729 110.424761) (xy 70.965786 110.415669) (xy 70.97488 110.407047) (xy 70.984567 110.398928) (xy 70.994839 110.391343) (xy 71.005692 110.384327) (xy 71.017119 110.37791) (xy 71.029115 110.372126) (xy 71.035652 110.369532) (xy 71.043343 110.367203) (xy 71.062721 110.363303) (xy 71.088307 110.360359) (xy 71.121157 110.358301) (xy 71.162329 110.357062) (xy 71.212881 110.356573) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp ecce7498-9f7b-43a0-b5e8-06db7e6d3727)) (gr_poly (pts (xy 71.973827 109.713994) (xy 71.977911 109.714372) (xy 71.984236 109.714532) (xy 71.990651 109.715008) (xy 71.997143 109.715791) (xy 72.003701 109.716873) (xy 72.010313 109.718244) (xy 72.016965 109.719897) (xy 72.023646 109.721822) (xy 72.030344 109.724012) (xy 72.04374 109.729151) (xy 72.057055 109.735245) (xy 72.070191 109.742225) (xy 72.08305 109.750024) (xy 72.095534 109.758574) (xy 72.107544 109.767805) (xy 72.118983 109.777651) (xy 72.129753 109.788042) (xy 72.139756 109.79891) (xy 72.148893 109.810188) (xy 72.153106 109.815959) (xy 72.157066 109.821807) (xy 72.160761 109.827723) (xy 72.164178 109.833699) (xy 72.169606 109.846176) (xy 72.174864 109.859301) (xy 72.179781 109.872631) (xy 72.184187 109.885722) (xy 72.18791 109.898131) (xy 72.189463 109.903942) (xy 72.190781 109.909415) (xy 72.191843 109.914496) (xy 72.192628 109.91913) (xy 72.193115 109.92326) (xy 72.193282 109.926832) (xy 72.193147 109.930404) (xy 72.192748 109.934534) (xy 72.192092 109.939168) (xy 72.19119 109.944249) (xy 72.190049 109.949722) (xy 72.188678 109.955532) (xy 72.185278 109.967941) (xy 72.183267 109.974429) (xy 72.18106 109.981033) (xy 72.178666 109.987695) (xy 72.176092 109.994362) (xy 72.173348 110.000978) (xy 72.170442 110.007488) (xy 72.167382 110.013835) (xy 72.164178 110.019965) (xy 72.157034 110.031857) (xy 72.148773 110.043476) (xy 72.139506 110.054754) (xy 72.129344 110.065622) (xy 72.118397 110.076014) (xy 72.106777 110.085859) (xy 72.094594 110.09509) (xy 72.081959 110.10364) (xy 72.068982 110.111439) (xy 72.055776 110.118419) (xy 72.04245 110.124513) (xy 72.029116 110.129652) (xy 72.015884 110.133767) (xy 72.002866 110.136791) (xy 71.990171 110.138656) (xy 71.98398 110.139132) (xy 71.977911 110.139292) (xy 71.971843 110.139132) (xy 71.965652 110.138656) (xy 71.959354 110.137873) (xy 71.952962 110.136791) (xy 71.946492 110.13542) (xy 71.939957 110.133767) (xy 71.933372 110.131841) (xy 71.926751 110.129652) (xy 71.913461 110.124513) (xy 71.9002 110.118419) (xy 71.887083 110.111439) (xy 71.874227 110.10364) (xy 71.861747 110.09509) (xy 71.849756 110.085859) (xy 71.838371 110.076013) (xy 71.827706 110.065622) (xy 71.82268 110.060243) (xy 71.817877 110.054754) (xy 71.813312 110.049162) (xy 71.808999 110.043476) (xy 71.804952 110.037705) (xy 71.801186 110.031857) (xy 71.797716 110.025941) (xy 71.794555 110.019965) (xy 71.791318 110.013835) (xy 71.788166 110.007488) (xy 71.785116 110.000979) (xy 71.782186 109.994363) (xy 71.779392 109.987696) (xy 71.776751 109.981033) (xy 71.774281 109.97443) (xy 71.771999 109.967942) (xy 71.769922 109.961624) (xy 71.768066 109.955533) (xy 71.766448 109.949722) (xy 71.765087 109.944249) (xy 71.763998 109.939168) (xy 71.7632 109.934534) (xy 71.762708 109.930404) (xy 71.76254 109.926832) (xy 71.762701 109.920507) (xy 71.763177 109.914093) (xy 71.76396 109.9076) (xy 71.765041 109.901042) (xy 71.766413 109.89443) (xy 71.768066 109.887778) (xy 71.769991 109.881097) (xy 71.772181 109.874399) (xy 71.77732 109.861003) (xy 71.783413 109.847688) (xy 71.790394 109.834552) (xy 71.798193 109.821693) (xy 71.806742 109.80921) (xy 71.815974 109.797199) (xy 71.825819 109.78576) (xy 71.83621 109.77499) (xy 71.847079 109.764988) (xy 71.858357 109.755851) (xy 71.864128 109.751637) (xy 71.869976 109.747677) (xy 71.875892 109.743982) (xy 71.881867 109.740565) (xy 71.887998 109.737362) (xy 71.89435 109.734307) (xy 71.900873 109.731414) (xy 71.907515 109.728696) (xy 71.914226 109.726166) (xy 71.920953 109.723836) (xy 71.927647 109.721719) (xy 71.934255 109.719829) (xy 71.940726 109.718177) (xy 71.947011 109.716776) (xy 71.953056 109.71564) (xy 71.958811 109.714781) (xy 71.964226 109.714212) (xy 71.969248 109.713945) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp efcdac77-c6f4-44d0-acb1-2052247934dc)) (gr_poly (pts (xy 72.395129 110.359097) (xy 72.39926 110.359594) (xy 72.401119 110.359989) (xy 72.402832 110.360484) (xy 72.409156 110.360645) (xy 72.415571 110.361121) (xy 72.422064 110.361904) (xy 72.428622 110.362985) (xy 72.435233 110.364356) (xy 72.441886 110.366009) (xy 72.448567 110.367935) (xy 72.455265 110.370125) (xy 72.468661 110.375263) (xy 72.481976 110.381357) (xy 72.495112 110.388338) (xy 72.507971 110.396137) (xy 72.520454 110.404686) (xy 72.532465 110.413917) (xy 72.543904 110.423763) (xy 72.554674 110.434154) (xy 72.564676 110.445023) (xy 72.573813 110.4563) (xy 72.578026 110.462072) (xy 72.581986 110.467919) (xy 72.585681 110.473835) (xy 72.589098 110.479811) (xy 72.594527 110.492288) (xy 72.599785 110.505414) (xy 72.604702 110.518744) (xy 72.609108 110.531835) (xy 72.612831 110.544244) (xy 72.614383 110.550054) (xy 72.615701 110.555527) (xy 72.616764 110.560608) (xy 72.617549 110.565242) (xy 72.618036 110.569372) (xy 72.618203 110.572944) (xy 72.618068 110.576516) (xy 72.617668 110.580647) (xy 72.617013 110.58528) (xy 72.616111 110.590361) (xy 72.61497 110.595835) (xy 72.613598 110.601645) (xy 72.610199 110.614054) (xy 72.608188 110.620542) (xy 72.605981 110.627145) (xy 72.603587 110.633808) (xy 72.601013 110.640475) (xy 72.598269 110.647091) (xy 72.595363 110.6536) (xy 72.592303 110.659947) (xy 72.589098 110.666077) (xy 72.581986 110.677969) (xy 72.573813 110.689588) (xy 72.564676 110.700866) (xy 72.554674 110.711735) (xy 72.543904 110.722126) (xy 72.532465 110.731971) (xy 72.520454 110.741203) (xy 72.50797 110.749752) (xy 72.495112 110.757551) (xy 72.481976 110.764532) (xy 72.468661 110.770625) (xy 72.455265 110.775764) (xy 72.441886 110.779879) (xy 72.428622 110.782904) (xy 72.415571 110.784768) (xy 72.409156 110.785244) (xy 72.402832 110.785405) (xy 72.39926 110.785237) (xy 72.395129 110.784745) (xy 72.390496 110.783947) (xy 72.385415 110.782858) (xy 72.379941 110.781497) (xy 72.374131 110.779879) (xy 72.361722 110.775946) (xy 72.348631 110.771194) (xy 72.335301 110.765759) (xy 72.328685 110.762829) (xy 72.322176 110.759779) (xy 72.315828 110.756627) (xy 72.309698 110.75339) (xy 72.297807 110.74679) (xy 72.286188 110.739065) (xy 72.27491 110.730317) (xy 72.264041 110.720648) (xy 72.25365 110.71016) (xy 72.243805 110.698956) (xy 72.234573 110.687138) (xy 72.226024 110.674809) (xy 72.218225 110.66207) (xy 72.211245 110.649024) (xy 72.205151 110.635774) (xy 72.200012 110.622421) (xy 72.195897 110.609068) (xy 72.192873 110.595818) (xy 72.191008 110.582773) (xy 72.190532 110.576358) (xy 72.190371 110.570034) (xy 72.190532 110.563709) (xy 72.191008 110.557294) (xy 72.191791 110.550802) (xy 72.192873 110.544244) (xy 72.194244 110.537632) (xy 72.195897 110.53098) (xy 72.197822 110.524299) (xy 72.200012 110.517601) (xy 72.205151 110.504205) (xy 72.211245 110.49089) (xy 72.218225 110.477754) (xy 72.226024 110.464895) (xy 72.234573 110.452412) (xy 72.243805 110.440401) (xy 72.25365 110.428962) (xy 72.264041 110.418192) (xy 72.27491 110.40819) (xy 72.286188 110.399053) (xy 72.291959 110.394839) (xy 72.297807 110.390879) (xy 72.303723 110.387184) (xy 72.309698 110.383767) (xy 72.315828 110.380564) (xy 72.322176 110.377514) (xy 72.328685 110.374635) (xy 72.335301 110.371944) (xy 72.341968 110.369457) (xy 72.348631 110.367192) (xy 72.355234 110.365165) (xy 72.361722 110.363394) (xy 72.36804 110.361897) (xy 72.374131 110.360689) (xy 72.379941 110.359788) (xy 72.385415 110.359211) (xy 72.390496 110.358975) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp f08b7850-dde5-4b6f-b90c-a2b259f3263a)) (gr_poly (pts (xy 64.70339 105.465805) (xy 64.711227 105.4664) (xy 64.71895 105.467381) (xy 64.72655 105.468737) (xy 64.734016 105.470459) (xy 64.741339 105.472538) (xy 64.748509 105.474962) (xy 64.755517 105.477724) (xy 64.762353 105.480813) (xy 64.769006 105.484219) (xy 64.775468 105.487933) (xy 64.781729 105.491946) (xy 64.787779 105.496246) (xy 64.793608 105.500826) (xy 64.799207 105.505675) (xy 64.804566 105.510783) (xy 64.809676 105.516141) (xy 64.814525 105.521739) (xy 64.819106 105.527568) (xy 64.823408 105.533618) (xy 64.827422 105.539878) (xy 64.831137 105.54634) (xy 64.834545 105.552994) (xy 64.837635 105.55983) (xy 64.840397 105.566839) (xy 64.842823 105.57401) (xy 64.844902 105.581334) (xy 64.846625 105.588802) (xy 64.847982 105.596404) (xy 64.848963 105.60413) (xy 64.849559 105.61197) (xy 64.84976 105.619915) (xy 64.849559 105.62786) (xy 64.848963 105.6357) (xy 64.847982 105.643425) (xy 64.846625 105.651027) (xy 64.844902 105.658495) (xy 64.842823 105.665819) (xy 64.840397 105.67299) (xy 64.837635 105.679999) (xy 64.834545 105.686835) (xy 64.831137 105.693489) (xy 64.827422 105.699951) (xy 64.823408 105.706212) (xy 64.819106 105.712261) (xy 64.814526 105.71809) (xy 64.809676 105.723688) (xy 64.804567 105.729046) (xy 64.799208 105.734154) (xy 64.793609 105.739003) (xy 64.78778 105.743583) (xy 64.78173 105.747884) (xy 64.775469 105.751896) (xy 64.769007 105.75561) (xy 64.762353 105.759016) (xy 64.755518 105.762105) (xy 64.74851 105.764867) (xy 64.74134 105.767292) (xy 64.734017 105.76937) (xy 64.72655 105.771092) (xy 64.718951 105.772448) (xy 64.711228 105.773429) (xy 64.70339 105.774025) (xy 64.695449 105.774225) (xy 64.64306 105.77663) (xy 64.583757 105.783907) (xy 64.518606 105.796148) (xy 64.448672 105.813448) (xy 64.375023 105.835898) (xy 64.298725 105.863591) (xy 64.220843 105.896621) (xy 64.142444 105.935081) (xy 64.064596 105.979063) (xy 63.988362 106.028661) (xy 63.951185 106.055594) (xy 63.914811 106.083967) (xy 63.879375 106.11379) (xy 63.845008 106.145074) (xy 63.811846 106.177832) (xy 63.78002 106.212076) (xy 63.749665 106.247816) (xy 63.720913 106.285065) (xy 63.693898 106.323834) (xy 63.668753 106.364134) (xy 63.645612 106.405978) (xy 63.624607 106.449376) (xy 63.605513 106.495264) (xy 63.589101 106.542157) (xy 63.564306 106.638902) (xy 63.550181 106.739509) (xy 63.546691 106.843873) (xy 63.553796 106.95189) (xy 63.571458 107.063456) (xy 63.599639 107.178467) (xy 63.638302 107.29682) (xy 63.687407 107.418409) (xy 63.746917 107.543132) (xy 63.816793 107.670884) (xy 63.896997 107.801561) (xy 63.987492 107.935059) (xy 64.088239 108.071274) (xy 64.199199 108.210103) (xy 64.320335 108.351441) (xy 64.447973 108.49973) (xy 64.565313 108.644594) (xy 64.672345 108.786007) (xy 64.769058 108.923942) (xy 64.85544 109.058372) (xy 64.93148 109.189271) (xy 64.997168 109.316613) (xy 65.052491 109.440371) (xy 65.097439 109.56052) (xy 65.132001 109.677032) (xy 65.145384 109.733916) (xy 65.156166 109.789881) (xy 65.164346 109.844923) (xy 65.169922 109.89904) (xy 65.172893 109.952228) (xy 65.173258 110.004484) (xy 65.171015 110.055804) (xy 65.166163 110.106186) (xy 65.158701 110.155625) (xy 65.148627 110.204119) (xy 65.135939 110.251665) (xy 65.120637 110.298258) (xy 65.10437 110.340004) (xy 65.086346 110.380019) (xy 65.066677 110.418337) (xy 65.045478 110.454995) (xy 65.022864 110.490025) (xy 64.998948 110.523464) (xy 64.973846 110.555345) (xy 64.947673 110.585705) (xy 64.920541 110.614577) (xy 64.892566 110.641996) (xy 64.863862 110.667998) (xy 64.834544 110.692616) (xy 64.774522 110.737844) (xy 64.713416 110.777957) (xy 64.652141 110.813236) (xy 64.591612 110.843957) (xy 64.532744 110.870399) (xy 64.476454 110.892842) (xy 64.423656 110.911563) (xy 64.375267 110.926842) (xy 64.295373 110.948184) (xy 64.306601 110.992166) (xy 64.316864 111.035998) (xy 64.334626 111.123046) (xy 64.348926 111.208996) (xy 64.360028 111.293513) (xy 64.3682 111.376265) (xy 64.373708 111.456917) (xy 64.376817 111.535137) (xy 64.377794 111.610591) (xy 64.373585 111.725367) (xy 64.361106 111.832972) (xy 64.34058 111.933637) (xy 64.312231 112.027594) (xy 64.276282 112.115074) (xy 64.232958 112.196307) (xy 64.182481 112.271527) (xy 64.125076 112.340963) (xy 64.060964 112.404847) (xy 63.990371 112.463411) (xy 63.91352 112.516886) (xy 63.830633 112.565503) (xy 63.741935 112.609493) (xy 63.647649 112.649089) (xy 63.443207 112.716019) (xy 63.219096 112.768144) (xy 62.977102 112.807315) (xy 62.719015 112.835383) (xy 62.446622 112.854197) (xy 61.866071 112.87147) (xy 61.249753 112.873937) (xy 60.925066 112.872301) (xy 60.605594 112.866748) (xy 60.29351 112.85631) (xy 59.990983 112.840019) (xy 59.700184 112.816906) (xy 59.423284 112.786004) (xy 59.162453 112.746344) (xy 59.038743 112.722928) (xy 58.919863 112.696959) (xy 58.806086 112.668317) (xy 58.697684 112.636881) (xy 58.594926 112.602529) (xy 58.498085 112.565141) (xy 58.407433 112.524595) (xy 58.323239 112.48077) (xy 58.245777 112.433547) (xy 58.175316 112.382803) (xy 58.112129 112.328417) (xy 58.056486 112.270269) (xy 58.008659 112.208237) (xy 57.96892 112.142201) (xy 57.937539 112.07204) (xy 57.914788 111.997632) (xy 57.900939 111.918856) (xy 57.896262 111.835592) (xy 58.204996 111.835592) (xy 58.210021 111.89523) (xy 58.22483 111.951571) (xy 58.249028 112.004707) (xy 58.282216 112.054731) (xy 58.323998 112.101733) (xy 58.373977 112.145808) (xy 58.431756 112.187045) (xy 58.496937 112.225538) (xy 58.647919 112.294658) (xy 58.823748 112.353905) (xy 59.021247 112.404014) (xy 59.237241 112.445722) (xy 59.468552 112.479765) (xy 59.712005 112.506881) (xy 60.222631 112.543272) (xy 60.743708 112.560786) (xy 61.249828 112.565315) (xy 61.578222 112.564595) (xy 61.887944 112.561633) (xy 62.178648 112.555225) (xy 62.449986 112.544167) (xy 62.701612 112.527255) (xy 62.819925 112.516228) (xy 62.933179 112.503285) (xy 63.041332 112.488277) (xy 63.144339 112.471054) (xy 63.242158 112.451464) (xy 63.334746 112.429357) (xy 63.422058 112.404582) (xy 63.504051 112.37699) (xy 63.580683 112.34643) (xy 63.651909 112.312751) (xy 63.717686 112.275802) (xy 63.777972 112.235434) (xy 63.832721 112.191495) (xy 63.881892 112.143835) (xy 63.925441 112.092305) (xy 63.963323 112.036752) (xy 63.995497 111.977028) (xy 64.021919 111.91298) (xy 64.042544 111.84446) (xy 64.05733 111.771316) (xy 64.066234 111.693397) (xy 64.069211 111.610554) (xy 64.064544 111.453019) (xy 64.049526 111.293428) (xy 64.022631 111.133467) (xy 63.982334 110.974823) (xy 63.927111 110.819182) (xy 63.893425 110.743014) (xy 63.855435 110.668229) (xy 63.812951 110.595037) (xy 63.765782 110.52365) (xy 63.713737 110.454277) (xy 63.656626 110.387131) (xy 63.594258 110.322421) (xy 63.526442 110.260358) (xy 63.452988 110.201154) (xy 63.373706 110.145018) (xy 63.288403 110.092162) (xy 63.19689 110.042796) (xy 63.098977 109.997131) (xy 62.994472 109.955377) (xy 62.883184 109.917747) (xy 62.764924 109.884449) (xy 62.6395 109.855695) (xy 62.506722 109.831696) (xy 62.366399 109.812663) (xy 62.218341 109.798806) (xy 62.062357 109.790335) (xy 61.898255 109.787463) (xy 61.816146 109.788643) (xy 61.732547 109.792175) (xy 61.647538 109.79804) (xy 61.561199 109.806223) (xy 61.473609 109.816709) (xy 61.384848 109.82948) (xy 61.294993 109.844522) (xy 61.204125 109.861816) (xy 61.019665 109.903102) (xy 60.832102 109.953209) (xy 60.64207 110.012007) (xy 60.450202 110.079367) (xy 60.300914 110.13484) (xy 60.250127 109.983978) (xy 60.229042 109.926902) (xy 60.205121 109.872318) (xy 60.178567 109.820391) (xy 60.149582 109.771285) (xy 60.118366 109.725163) (xy 60.085123 109.68219) (xy 60.050052 109.642531) (xy 60.013357 109.606349) (xy 59.994463 109.589613) (xy 59.975239 109.573808) (xy 59.955709 109.558955) (xy 59.935899 109.545074) (xy 59.915834 109.532185) (xy 59.89554 109.52031) (xy 59.875041 109.509468) (xy 59.854363 109.49968) (xy 59.83353 109.490966) (xy 59.812569 109.483348) (xy 59.791504 109.476846) (xy 59.770361 109.47148) (xy 59.749164 109.46727) (xy 59.72794 109.464238) (xy 59.706713 109.462404) (xy 59.685508 109.461788) (xy 59.67704 109.461887) (xy 59.668585 109.462184) (xy 59.660145 109.462683) (xy 59.651719 109.463385) (xy 59.643306 109.464293) (xy 59.634908 109.465409) (xy 59.626524 109.466734) (xy 59.618154 109.468272) (xy 59.593883 109.473856) (xy 59.570087 109.481102) (xy 59.546797 109.489984) (xy 59.524042 109.500475) (xy 59.501852 109.512549) (xy 59.480258 109.526177) (xy 59.459289 109.541334) (xy 59.438975 109.557993) (xy 59.419346 109.576127) (xy 59.400432 109.595708) (xy 59.382264 109.616712) (xy 59.364871 109.639109) (xy 59.348282 109.662875) (xy 59.332529 109.687982) (xy 59.317641 109.714402) (xy 59.303648 109.74211) (xy 59.289399 109.773836) (xy 59.276523 109.806469) (xy 59.265027 109.839955) (xy 59.254914 109.874236) (xy 59.246192 109.909256) (xy 59.238866 109.944959) (xy 59.232941 109.981288) (xy 59.228423 110.018188) (xy 59.225318 110.055602) (xy 59.223631 110.093474) (xy 59.223367 110.131746) (xy 59.224533 110.170364) (xy 59.227134 110.20927) (xy 59.231176 110.248408) (xy 59.236664 110.287722) (xy 59.243603 110.327156) (xy 59.248441 110.350734) (xy 59.253785 110.374173) (xy 59.259628 110.397452) (xy 59.265966 110.42055) (xy 59.272789 110.443449) (xy 59.280093 110.466126) (xy 59.28787 110.488563) (xy 59.296115 110.510739) (xy 59.340642 110.626482) (xy 59.237194 110.694923) (xy 59.108102 110.782887) (xy 58.988131 110.86988) (xy 58.877171 110.955633) (xy 58.775113 111.039879) (xy 58.681848 111.122349) (xy 58.597267 111.202775) (xy 58.52126 111.280888) (xy 58.453717 111.356421) (xy 58.39453 111.429105) (xy 58.34359 111.498672) (xy 58.300786 111.564854) (xy 58.26601 111.627382) (xy 58.251598 111.657192) (xy 58.239153 111.685988) (xy 58.228659 111.713736) (xy 58.220104 111.740404) (xy 58.213474 111.765956) (xy 58.208755 111.790361) (xy 58.205933 111.813584) (xy 58.204996 111.835592) (xy 57.896262 111.835592) (xy 57.897427 111.80026) (xy 57.900904 111.764252) (xy 57.914709 111.690315) (xy 57.937496 111.613997) (xy 57.969084 111.535514) (xy 58.009292 111.455084) (xy 58.057938 111.372923) (xy 58.114842 111.289248) (xy 58.179823 111.204275) (xy 58.252698 111.118222) (xy 58.333288 111.031306) (xy 58.42141 110.943742) (xy 58.516884 110.855748) (xy 58.61953 110.767541) (xy 58.729164 110.679337) (xy 58.845607 110.591353) (xy 58.968678 110.503805) (xy 58.964596 110.48925) (xy 58.960674 110.474629) (xy 58.95691 110.459951) (xy 58.953306 110.445222) (xy 58.949861 110.430451) (xy 58.946577 110.415646) (xy 58.943454 110.400814) (xy 58.940492 110.385964) (xy 58.931453 110.334423) (xy 58.924361 110.282931) (xy 58.919208 110.231564) (xy 58.915986 110.180397) (xy 58.914687 110.129503) (xy 58.915303 110.078958) (xy 58.917826 110.028836) (xy 58.922248 109.979212) (xy 58.928561 109.93016) (xy 58.936758 109.881755) (xy 58.946831 109.834071) (xy 58.958771 109.787184) (xy 58.972571 109.741168) (xy 58.988222 109.696096) (xy 59.005718 109.652045) (xy 59.02505 109.609089) (xy 59.047544 109.564761) (xy 59.07173 109.522449) (xy 59.097556 109.482196) (xy 59.124971 109.444043) (xy 59.153924 109.408033) (xy 59.184364 109.374208) (xy 59.216239 109.34261) (xy 59.249497 109.313282) (xy 59.284088 109.286265) (xy 59.319961 109.261602) (xy 59.357064 109.239336) (xy 59.395345 109.219507) (xy 59.434754 109.20216) (xy 59.475239 109.187335) (xy 59.516749 109.175075) (xy 59.559233 109.165422) (xy 59.593135 109.159719) (xy 59.627057 109.155791) (xy 59.660965 109.153612) (xy 59.694823 109.153158) (xy 59.728598 109.154405) (xy 59.762257 109.157327) (xy 59.795763 109.161898) (xy 59.829084 109.168095) (xy 59.862184 109.175893) (xy 59.89503 109.185266) (xy 59.927587 109.196189) (xy 59.959821 109.208638) (xy 59.991698 109.222587) (xy 60.023184 109.238013) (xy 60.054244 109.254889) (xy 60.084843 109.273191) (xy 60.114948 109.292894) (xy 60.144525 109.313972) (xy 60.173539 109.336402) (xy 60.201955 109.360159) (xy 60.22974 109.385216) (xy 60.25686 109.411549) (xy 60.283279 109.439135) (xy 60.308964 109.467946) (xy 60.33388 109.497959) (xy 60.357994 109.529149) (xy 60.381271 109.56149) (xy 60.403676 109.594958) (xy 60.425175 109.629528) (xy 60.445735 109.665174) (xy 60.46532 109.701873) (xy 60.483897 109.739599) (xy 60.670151 109.679325) (xy 60.854744 109.626757) (xy 61.037154 109.581996) (xy 61.216859 109.545146) (xy 61.305533 109.529718) (xy 61.393336 109.516307) (xy 61.480201 109.504924) (xy 61.566063 109.495581) (xy 61.650858 109.488293) (xy 61.734519 109.483071) (xy 61.816981 109.479929) (xy 61.89818 109.478879) (xy 62.027242 109.480513) (xy 62.151844 109.485351) (xy 62.272063 109.493301) (xy 62.387974 109.504267) (xy 62.499654 109.518157) (xy 62.607178 109.534875) (xy 62.710623 109.554329) (xy 62.810064 109.576423) (xy 62.905577 109.601065) (xy 62.997239 109.62816) (xy 63.085125 109.657613) (xy 63.169312 109.689332) (xy 63.249875 109.723222) (xy 63.32689 109.75919) (xy 63.400434 109.79714) (xy 63.470582 109.83698) (xy 63.537411 109.878615) (xy 63.600996 109.921951) (xy 63.661413 109.966895) (xy 63.718739 110.013352) (xy 63.773049 110.061228) (xy 63.824419 110.11043) (xy 63.872926 110.160863) (xy 63.918645 110.212433) (xy 63.961652 110.265047) (xy 64.002024 110.318611) (xy 64.039836 110.37303) (xy 64.075165 110.42821) (xy 64.138674 110.54048) (xy 64.193161 110.654668) (xy 64.237518 110.644561) (xy 64.307797 110.624532) (xy 64.350185 110.610218) (xy 64.396086 110.592729) (xy 64.444512 110.571835) (xy 64.494474 110.547302) (xy 64.544982 110.518902) (xy 64.595047 110.486401) (xy 64.619604 110.46854) (xy 64.64368 110.449568) (xy 64.667151 110.429455) (xy 64.689893 110.408173) (xy 64.711783 110.385692) (xy 64.732696 110.361983) (xy 64.75251 110.337019) (xy 64.7711 110.310768) (xy 64.788344 110.283204) (xy 64.804117 110.254296) (xy 64.818295 110.224017) (xy 64.830756 110.192336) (xy 64.851115 110.120264) (xy 64.862391 110.043748) (xy 64.864625 109.962879) (xy 64.857859 109.877745) (xy 64.842131 109.788437) (xy 64.817483 109.695043) (xy 64.783955 109.597654) (xy 64.741588 109.496359) (xy 64.690422 109.391248) (xy 64.630498 109.282409) (xy 64.561856 109.169933) (xy 64.484537 109.053909) (xy 64.398582 108.934427) (xy 64.30403 108.811576) (xy 64.200923 108.685446) (xy 64.0893 108.556126) (xy 64.002179 108.455524) (xy 63.920673 108.356995) (xy 63.844633 108.26053) (xy 63.77391 108.166123) (xy 63.708353 108.073763) (xy 63.647812 107.983442) (xy 63.592137 107.895152) (xy 63.541179 107.808883) (xy 63.494787 107.724628) (xy 63.452811 107.642378) (xy 63.415102 107.562124) (xy 63.381509 107.483858) (xy 63.351883 107.40757) (xy 63.326073 107.333252) (xy 63.30393 107.260897) (xy 63.285303 107.190494) (xy 63.270043 107.122036) (xy 63.257999 107.055514) (xy 63.249023 106.990919) (xy 63.242963 106.928243) (xy 63.239669 106.867477) (xy 63.238993 106.808612) (xy 63.240783 106.75164) (xy 63.24489 106.696553) (xy 63.259456 106.591996) (xy 63.281489 106.494872) (xy 63.30979 106.405114) (xy 63.34316 106.322652) (xy 63.369099 106.268746) (xy 63.397457 106.216664) (xy 63.428095 106.166397) (xy 63.460879 106.117939) (xy 63.495671 106.071283) (xy 63.532334 106.026421) (xy 63.570733 105.983345) (xy 63.610731 105.942048) (xy 63.652192 105.902524) (xy 63.694978 105.864764) (xy 63.783982 105.794508) (xy 63.876652 105.731222) (xy 63.971895 105.674848) (xy 64.06862 105.625326) (xy 64.165734 105.582598) (xy 64.262146 105.546605) (xy 64.356763 105.517288) (xy 64.448494 105.494588) (xy 64.536246 105.478447) (xy 64.618929 105.468805) (xy 64.695448 105.465604) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp f6220d85-02d7-46f9-ab19-dfbea523b9ec)) (gr_poly (pts (xy 74.981461 111.643978) (xy 74.987786 111.644138) (xy 74.9942 111.644614) (xy 75.000693 111.645397) (xy 75.007251 111.646479) (xy 75.013862 111.64785) (xy 75.020515 111.649503) (xy 75.027196 111.651429) (xy 75.033894 111.653619) (xy 75.04729 111.658757) (xy 75.060605 111.664851) (xy 75.073741 111.671831) (xy 75.0866 111.67963) (xy 75.099083 111.68818) (xy 75.111094 111.697411) (xy 75.122533 111.707257) (xy 75.133303 111.717648) (xy 75.143305 111.728516) (xy 75.152442 111.739794) (xy 75.156655 111.745565) (xy 75.160616 111.751413) (xy 75.16431 111.757329) (xy 75.167728 111.763305) (xy 75.173156 111.775782) (xy 75.178414 111.788907) (xy 75.183331 111.802237) (xy 75.187737 111.815329) (xy 75.19146 111.827738) (xy 75.193012 111.833548) (xy 75.194331 111.839021) (xy 75.195393 111.844102) (xy 75.196178 111.848736) (xy 75.196665 111.852866) (xy 75.196832 111.856438) (xy 75.196697 111.86001) (xy 75.196297 111.86414) (xy 75.195642 111.868774) (xy 75.19474 111.873855) (xy 75.193599 111.879328) (xy 75.192227 111.885139) (xy 75.188828 111.897548) (xy 75.186817 111.904036) (xy 75.18461 111.910639) (xy 75.182216 111.917302) (xy 75.179642 111.923969) (xy 75.176898 111.930585) (xy 75.173992 111.937094) (xy 75.170932 111.943442) (xy 75.167728 111.949572) (xy 75.160616 111.961463) (xy 75.152442 111.973082) (xy 75.143305 111.98436) (xy 75.133303 111.995229) (xy 75.122533 112.00562) (xy 75.111094 112.015465) (xy 75.099083 112.024697) (xy 75.0866 112.033246) (xy 75.073741 112.041045) (xy 75.060605 112.048026) (xy 75.04729 112.054119) (xy 75.033894 112.059258) (xy 75.020515 112.063374) (xy 75.007251 112.066398) (xy 74.9942 112.068262) (xy 74.987786 112.068738) (xy 74.981461 112.068899) (xy 74.975392 112.068738) (xy 74.969202 112.068262) (xy 74.962904 112.067479) (xy 74.956512 112.066398) (xy 74.950042 112.065026) (xy 74.943507 112.063374) (xy 74.936922 112.061448) (xy 74.930301 112.059258) (xy 74.91701 112.054119) (xy 74.903749 112.048026) (xy 74.890633 112.041045) (xy 74.877777 112.033246) (xy 74.865297 112.024697) (xy 74.853306 112.015465) (xy 74.841921 112.00562) (xy 74.831256 111.995229) (xy 74.82623 111.98985) (xy 74.821427 111.98436) (xy 74.816862 111.978768) (xy 74.812549 111.973082) (xy 74.808502 111.967311) (xy 74.804736 111.961463) (xy 74.801265 111.955547) (xy 74.798104 111.949572) (xy 74.794867 111.943442) (xy 74.791715 111.937094) (xy 74.788665 111.930585) (xy 74.785735 111.923969) (xy 74.782941 111.917302) (xy 74.780301 111.910639) (xy 74.777831 111.904036) (xy 74.775549 111.897548) (xy 74.773471 111.89123) (xy 74.771615 111.885139) (xy 74.769998 111.879329) (xy 74.768636 111.873855) (xy 74.767548 111.868774) (xy 74.766749 111.864141) (xy 74.766257 111.86001) (xy 74.76609 111.856438) (xy 74.76625 111.850113) (xy 74.766726 111.843699) (xy 74.767509 111.837206) (xy 74.768591 111.830648) (xy 74.769962 111.824037) (xy 74.771615 111.817384) (xy 74.773541 111.810703) (xy 74.775731 111.804005) (xy 74.780869 111.790609) (xy 74.786963 111.777294) (xy 74.793943 111.764158) (xy 74.801743 111.7513) (xy 74.810292 111.738816) (xy 74.819523 111.726806) (xy 74.829369 111.715366) (xy 74.83976 111.704597) (xy 74.850628 111.694594) (xy 74.861906 111.685457) (xy 74.867677 111.681244) (xy 74.873525 111.677284) (xy 74.879441 111.673589) (xy 74.885417 111.670172) (xy 74.8979 111.664749) (xy 74.911065 111.659531) (xy 74.924503 111.654722) (xy 74.931197 111.652534) (xy 74.937805 111.650526) (xy 74.944276 111.648723) (xy 74.950561 111.64715) (xy 74.956606 111.645833) (xy 74.962361 111.644796) (xy 74.967776 111.644067) (xy 74.972798 111.643671) (xy 74.977377 111.643632) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp f67d9a93-d170-4f1b-9559-d4a8eb51cf50)) (gr_poly (pts (xy 73.698471 110.998026) (xy 73.704886 110.998502) (xy 73.711379 110.999285) (xy 73.717937 111.000366) (xy 73.724548 111.001737) (xy 73.731201 111.00339) (xy 73.737882 111.005316) (xy 73.74458 111.007506) (xy 73.757976 111.012644) (xy 73.771291 111.018738) (xy 73.784426 111.025719) (xy 73.797285 111.033518) (xy 73.809769 111.042067) (xy 73.821779 111.051298) (xy 73.833219 111.061144) (xy 73.843988 111.071535) (xy 73.853991 111.082404) (xy 73.863128 111.093681) (xy 73.867341 111.099453) (xy 73.871301 111.1053) (xy 73.874996 111.111216) (xy 73.878413 111.117192) (xy 73.883842 111.129669) (xy 73.8891 111.142795) (xy 73.894017 111.156124) (xy 73.898422 111.169216) (xy 73.902146 111.181625) (xy 73.903698 111.187435) (xy 73.905016 111.192908) (xy 73.906079 111.197989) (xy 73.906864 111.202623) (xy 73.90735 111.206753) (xy 73.907517 111.210325) (xy 73.907357 111.216394) (xy 73.906881 111.222584) (xy 73.906098 111.228883) (xy 73.905016 111.235274) (xy 73.903645 111.241745) (xy 73.901992 111.248279) (xy 73.900067 111.254864) (xy 73.897877 111.261485) (xy 73.892738 111.274776) (xy 73.886644 111.288037) (xy 73.879664 111.301153) (xy 73.871865 111.314009) (xy 73.863315 111.32649) (xy 73.854084 111.33848) (xy 73.844238 111.349865) (xy 73.833847 111.36053) (xy 73.828468 111.365556) (xy 73.822979 111.370359) (xy 73.817387 111.374924) (xy 73.811701 111.379238) (xy 73.80593 111.383284) (xy 73.800082 111.38705) (xy 73.794166 111.390521) (xy 73.78819 111.393682) (xy 73.78206 111.396919) (xy 73.775713 111.400071) (xy 73.769204 111.403121) (xy 73.762588 111.406051) (xy 73.755921 111.408845) (xy 73.749258 111.411485) (xy 73.742655 111.413955) (xy 73.736167 111.416238) (xy 73.729849 111.418315) (xy 73.723758 111.420171) (xy 73.717947 111.421788) (xy 73.712474 111.42315) (xy 73.707393 111.424238) (xy 73.702759 111.425037) (xy 73.698629 111.425529) (xy 73.695057 111.425697) (xy 73.688988 111.425536) (xy 73.682798 111.42506) (xy 73.676499 111.424277) (xy 73.670108 111.423195) (xy 73.663638 111.421824) (xy 73.657103 111.420171) (xy 73.650518 111.418246) (xy 73.643897 111.416056) (xy 73.630606 111.410917) (xy 73.617345 111.404823) (xy 73.604229 111.397843) (xy 73.591373 111.390044) (xy 73.578892 111.381494) (xy 73.566902 111.372263) (xy 73.555517 111.362417) (xy 73.544852 111.352026) (xy 73.539826 111.346647) (xy 73.535023 111.341158) (xy 73.530458 111.335566) (xy 73.526145 111.32988) (xy 73.522098 111.324109) (xy 73.518332 111.318261) (xy 73.514862 111.312345) (xy 73.511701 111.306369) (xy 73.508463 111.300239) (xy 73.505311 111.293892) (xy 73.502262 111.287383) (xy 73.499331 111.280767) (xy 73.496537 111.2741) (xy 73.493897 111.267437) (xy 73.491427 111.260834) (xy 73.489145 111.254346) (xy 73.487067 111.248028) (xy 73.485211 111.241937) (xy 73.483594 111.236127) (xy 73.482233 111.230653) (xy 73.481144 111.225572) (xy 73.480345 111.220939) (xy 73.479854 111.216808) (xy 73.479686 111.213236) (xy 73.479847 111.206911) (xy 73.480323 111.200497) (xy 73.481106 111.194004) (xy 73.482187 111.187446) (xy 73.483558 111.180835) (xy 73.485211 111.174182) (xy 73.487137 111.167501) (xy 73.489327 111.160803) (xy 73.494465 111.147407) (xy 73.500559 111.134092) (xy 73.50754 111.120956) (xy 73.515339 111.108097) (xy 73.523888 111.095614) (xy 73.533119 111.083603) (xy 73.542965 111.072164) (xy 73.553356 111.061394) (xy 73.564225 111.051392) (xy 73.575502 111.042255) (xy 73.581274 111.038042) (xy 73.587121 111.034081) (xy 73.593037 111.030387) (xy 73.599013 111.02697) (xy 73.611371 111.021541) (xy 73.624206 111.016283) (xy 73.637178 111.011366) (xy 73.649945 111.00696) (xy 73.656146 111.005003) (xy 73.662167 111.003237) (xy 73.667966 111.001684) (xy 73.673502 111.000366) (xy 73.67873 110.999304) (xy 73.683609 110.998519) (xy 73.688095 110.998032) (xy 73.692147 110.997865) ) (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp fb9d3d90-3689-43f5-ac73-8e6978234606)) (gr_arc (start 35.773403 115.566375) (mid 34.359189 114.980589) (end 33.773403 113.566375) (stroke (width 0.05) (type default)) (layer "Edge.Cuts") (tstamp 032ed41d-7c77-4d7c-9c1e-1fe0452f438a)) (gr_arc (start 33.773403 43.085124) (mid 34.359189 41.67091) (end 35.773403 41.085124) (stroke (width 0.05) (type default)) (layer "Edge.Cuts") (tstamp 04927693-a47a-43a6-83fd-155b755e2b60)) (gr_arc (start 100.689573 113.566375) (mid 100.103794 114.980595) (end 98.689573 115.566375) (stroke (width 0.05) (type default)) (layer "Edge.Cuts") (tstamp 4aec68af-c9e3-4a50-bafd-9df95ac7aa15)) (gr_line (start 98.689573 115.566375) (end 35.773403 115.566375) (stroke (width 0.05) (type default)) (layer "Edge.Cuts") (tstamp 52be8bf6-07bb-4390-b563-0576f6c4485d)) (gr_arc (start 98.689573 41.085124) (mid 100.103787 41.67091) (end 100.689573 43.085124) (stroke (width 0.05) (type default)) (layer "Edge.Cuts") (tstamp 541adf0a-2bbb-4003-8d3b-48c479be112f)) (gr_line (start 33.773403 113.566375) (end 33.773403 43.085124) (stroke (width 0.05) (type default)) (layer "Edge.Cuts") (tstamp 8a728c1f-ee1b-47d1-ac44-b5eccf83b433)) (gr_line (start 35.773403 41.085124) (end 98.689573 41.085124) (stroke (width 0.05) (type default)) (layer "Edge.Cuts") (tstamp c0264cba-84b5-42a7-a9d7-7b9e088c1943)) (gr_line (start 100.689573 43.085124) (end 100.689573 113.566375) (stroke (width 0.05) (type default)) (layer "Edge.Cuts") (tstamp ca2aecb3-d326-4ae0-9333-bc62d17d2f95)) (gr_text "Keyboard/Mouse\nSwitch" (at 53.7 80 90) (layer "B.SilkS") (tstamp 09ff2ce6-08b2-4526-b869-6dcc017cb1c1) (effects (font (size 1.5 1.2) (thickness 0.2)) (justify bottom mirror)) ) (gr_text "by Hrvoje Cavrak, 01/24" (at 93.56 114.51) (layer "B.SilkS") (tstamp 10eec7cb-2b61-4a3a-a71f-3d5c8375bf35) (effects (font (size 1.1 1.1) (thickness 0.2) bold) (justify left bottom mirror)) ) (gr_text "DeskHop" (at 86.5 67.47 -90) (layer "B.SilkS") (tstamp 3b51a69f-97fd-4261-84dc-a098b8b6299f) (effects (font (size 3 2.5) (thickness 0.4)) (justify left bottom mirror)) ) (gr_text "https://github.com/hrvach" (at 63.17 114.51) (layer "B.SilkS") (tstamp 3fc10984-bb1d-43e0-9a49-d217ad307f02) (effects (font (size 1.1 1.1) (thickness 0.2) bold) (justify left bottom mirror)) ) (gr_text "rev 1.1" (at 99.19 43.26 90) (layer "B.SilkS") (tstamp 4e3bd4ab-65ef-43cd-bcc6-9e03568ebbf2) (effects (font (size 1.1 1.1) (thickness 0.2) bold) (justify left bottom mirror)) ) (gr_text "Keyboard/Mouse\nSwitch" (at 80.96 59.53 270) (layer "B.SilkS") (tstamp b491158b-d9b2-4ae5-8e1b-107589143d4c) (effects (font (size 1.5 1.2) (thickness 0.2)) (justify bottom mirror)) ) (gr_text "DeskHop" (at 47.84 71.85 90) (layer "B.SilkS") (tstamp d042a925-4265-4383-8496-64e6ffc763d3) (effects (font (size 3 2.5) (thickness 0.4)) (justify left bottom mirror)) ) (gr_text "OUT A" (at 83.51 42.61) (layer "F.SilkS") (tstamp 179b2c6b-34d3-4f8d-9920-6b082e4f9180) (effects (font (size 0.8 0.8) (thickness 0.15)) (justify left bottom)) ) (gr_text "B" (at 63.5 53.34) (layer "F.SilkS") (tstamp 32ef2d41-2428-44d6-9af8-864a946249b2) (effects (font (size 2 2) (thickness 0.15)) (justify left bottom)) ) (gr_text "GND" (at 98.171 101.346 45) (layer "F.SilkS") (tstamp 45fbd897-93d2-49e2-adc9-c24dc74802c8) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "CLK" (at 98.044 103.886 45) (layer "F.SilkS") (tstamp 5b53353b-f9fc-4f93-8b11-5fce95aa151b) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "DATA" (at 63.373 99.187 45) (layer "F.SilkS") (tstamp 6a8636ed-7847-4f79-be68-902fb28046b3) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "*" (at 73.488426 75.704564 45) (layer "F.SilkS") (tstamp 6c41b1ff-ef53-4bee-9860-899a9c37a500) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "DATA" (at 98.02 98.92 45) (layer "F.SilkS") (tstamp 7d63a786-461b-45c7-aeab-3237c696cac2) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "*" (at 61.036961 75.762028 45) (layer "F.SilkS") (tstamp 7e25a455-4988-4b03-95f0-3dac00d885b9) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "A" (at 68.834 53.34) (layer "F.SilkS") (tstamp cb5b8470-d35e-410c-b050-6e152f7e6a4c) (effects (font (size 2 2) (thickness 0.15)) (justify left bottom)) ) (gr_text "CLK" (at 63.246 104.267 45) (layer "F.SilkS") (tstamp cf3b2d7d-0191-4dd5-b820-e6aa612b764f) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "GND" (at 63.246 101.727 45) (layer "F.SilkS") (tstamp da75c436-48c4-4bb1-a6fd-90baa2c5c2a2) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (gr_text "OUT B" (at 47 42.67) (layer "F.SilkS") (tstamp fbdd5ab1-b7d1-4016-9e79-55335bd769e4) (effects (font (size 0.8 0.8) (thickness 0.15)) (justify left bottom)) ) (segment (start 43.475845 95.436448) (end 43.475845 93.9) (width 0.55) (layer "F.Cu") (net 1) (tstamp 7c2bf67f-26ee-408d-874b-74283e7eb56a)) (segment (start 58.013772 74.93) (end 57.775523 75.168249) (width 0.5) (layer "F.Cu") (net 1) (tstamp 8007a76d-8d41-4fb2-90e3-e66c0005a3c5)) (segment (start 61.9375 74.93) (end 58.013772 74.93) (width 0.5) (layer "F.Cu") (net 1) (tstamp 8ba778a0-98c8-4842-b67e-521e1589d6dd)) (segment (start 58.42 99.314) (end 54.61 99.314) (width 0.5) (layer "F.Cu") (net 2) (tstamp 281dfb42-ed18-4e3c-a239-6523ec17ad9c)) (segment (start 60.452 99.822) (end 58.928 99.822) (width 0.5) (layer "F.Cu") (net 2) (tstamp 29e389da-012c-4edb-85cc-33a0c641139a)) (segment (start 58.928 99.822) (end 58.42 99.314) (width 0.5) (layer "F.Cu") (net 2) (tstamp 38a80906-0bb0-4157-9ea9-f09123feb783)) (segment (start 51.425523 96.129523) (end 51.425523 92.718249) (width 0.5) (layer "F.Cu") (net 2) (tstamp 581ea471-e9a2-4c1e-81ce-e575d801c6aa)) (segment (start 54.61 99.314) (end 51.425523 96.129523) (width 0.5) (layer "F.Cu") (net 2) (tstamp 6750045c-5cb4-4e61-a49e-7d5ac1eced2e)) (segment (start 58.674 101.092) (end 58.674 103.124) (width 0.5) (layer "F.Cu") (net 3) (tstamp 1db8c944-a2b2-435e-b2ab-d0cba1290d99)) (segment (start 46.345523 92.718249) (end 46.345523 94.725704) (width 0.5) (layer "F.Cu") (net 3) (tstamp 322130f3-2b3e-4c71-921c-efd5b939eede)) (segment (start 54.096 100.324) (end 57.906 100.324) (width 0.5) (layer "F.Cu") (net 3) (tstamp 618cedb6-d2de-4ce6-b076-c7d8fe58d776)) (segment (start 46.345523 94.725704) (end 48.393819 96.774) (width 0.5) (layer "F.Cu") (net 3) (tstamp 98dcd0c9-e428-4b1a-8335-bb26f7efd843)) (segment (start 48.393819 96.774) (end 50.546 96.774) (width 0.5) (layer "F.Cu") (net 3) (tstamp cb35357d-e607-4d6b-a4b8-ca80905e5ef7)) (segment (start 58.674 103.124) (end 60.452 104.902) (width 0.5) (layer "F.Cu") (net 3) (tstamp d23927c8-beee-4764-a100-84145e7f8479)) (segment (start 50.546 96.774) (end 54.096 100.324) (width 0.5) (layer "F.Cu") (net 3) (tstamp e2eb45a4-3411-4696-b6ee-fb4adbeef46c)) (segment (start 57.906 100.324) (end 58.674 101.092) (width 0.5) (layer "F.Cu") (net 3) (tstamp f10ecb8a-09c9-4f01-a8de-30581eaac5f4)) (segment (start 90.637377 99.309705) (end 87.884 96.556328) (width 0.5) (layer "F.Cu") (net 4) (tstamp 286d8ee0-6b33-4488-b7b9-dbec9318b07e)) (segment (start 87.884 93.496) (end 87.869 93.511) (width 0.5) (layer "F.Cu") (net 4) (tstamp 367a9829-1b6f-4631-ad75-00332c4179d7)) (segment (start 95.25 99.837) (end 93.761955 99.837) (width 0.5) (layer "F.Cu") (net 4) (tstamp 6aa08f15-306a-49ae-9a2a-e232096e6b36)) (segment (start 87.884 96.556328) (end 87.884 93.496) (width 0.5) (layer "F.Cu") (net 4) (tstamp 7b5dbf10-1e32-4bc1-a6df-e372a8d79c1c)) (segment (start 93.761955 99.837) (end 93.23466 99.309705) (width 0.5) (layer "F.Cu") (net 4) (tstamp 83814711-10fc-4436-9da7-878aaf89869b)) (segment (start 93.23466 99.309705) (end 90.637377 99.309705) (width 0.5) (layer "F.Cu") (net 4) (tstamp bed2b09e-3b36-42f3-b98c-4acb95bcff4f)) (segment (start 84.096249 96.796249) (end 86.530911 96.796249) (width 0.5) (layer "F.Cu") (net 5) (tstamp 215101f7-76f5-425b-b2f5-6305f0108478)) (segment (start 92.912787 100.33) (end 93.653332 101.070545) (width 0.5) (layer "F.Cu") (net 5) (tstamp 29f33fa2-70dd-4ba9-bdc0-87ac3c1f40f4)) (segment (start 82.804 95.504) (end 84.096249 96.796249) (width 0.5) (layer "F.Cu") (net 5) (tstamp 36328f45-2f74-4685-9598-ca4d884190c3)) (segment (start 90.064662 100.33) (end 92.912787 100.33) (width 0.5) (layer "F.Cu") (net 5) (tstamp 38cfc14d-81c6-44a4-ac7f-857511118a72)) (segment (start 93.653332 101.070545) (end 93.653332 103.305332) (width 0.5) (layer "F.Cu") (net 5) (tstamp 65d954ba-b763-4168-9faf-746d0283716f)) (segment (start 82.804 93.496) (end 82.804 95.504) (width 0.5) (layer "F.Cu") (net 5) (tstamp 6de585f3-d3de-4bd0-a80b-009f83aba92b)) (segment (start 86.530911 96.796249) (end 90.064662 100.33) (width 0.5) (layer "F.Cu") (net 5) (tstamp 96a22aec-2bfc-4e21-993d-3651cd10260d)) (segment (start 93.653332 103.305332) (end 95.25 104.902) (width 0.5) (layer "F.Cu") (net 5) (tstamp 9c33d408-3772-4b8b-a70f-09e1fb7e33b4)) (segment (start 82.789 93.511) (end 82.804 93.496) (width 0.5) (layer "F.Cu") (net 5) (tstamp b03f865d-4945-4f70-9208-0b7dc30ebeae)) (segment (start 94.234 54.864) (end 80.899 54.864) (width 0.5) (layer "F.Cu") (net 6) (tstamp 0d432ae7-4fa9-4949-b353-7b81481d22e9)) (segment (start 70.58342 55.59108) (end 70.58342 71.65658) (width 0.5) (layer "F.Cu") (net 6) (tstamp 0eabc568-2b2e-45bb-83c2-905a92405b69)) (segment (start 69.094026 74.93) (end 70.424 74.93) (width 0.5) (layer "F.Cu") (net 6) (tstamp 32022af7-2612-40a1-acf7-c841470fe071)) (segment (start 69.041691 73.198309) (end 69.041691 74.877665) (width 0.5) (layer "F.Cu") (net 6) (tstamp 3e40c801-7a2e-49e0-8c9e-b78c64f810fc)) (segment (start 79.465248 42.986085) (end 72.47165 42.986085) (width 0.5) (layer "F.Cu") (net 6) (tstamp 40d44fb7-c224-43f3-af59-310d47c76a3b)) (segment (start 71.96552 54.20898) (end 70.58342 55.59108) (width 0.5) (layer "F.Cu") (net 6) (tstamp 445a1c12-4d83-4a5c-bd2d-335b82da24fc)) (segment (start 80.01 43.530837) (end 79.465248 42.986085) (width 0.5) (layer "F.Cu") (net 6) (tstamp 903bb7d9-4df2-4de8-9439-041b8d04ab5b)) (segment (start 80.899 54.864) (end 80.01 53.975) (width 0.5) (layer "F.Cu") (net 6) (tstamp a7e36111-85fc-4d38-af69-74af254764f4)) (segment (start 80.01 53.975) (end 80.01 43.530837) (width 0.5) (layer "F.Cu") (net 6) (tstamp affefa3c-6cdf-43d5-81f3-5da68deaa938)) (segment (start 71.96552 43.492215) (end 71.96552 54.20898) (width 0.5) (layer "F.Cu") (net 6) (tstamp bba3d5fb-6aef-4046-96b9-05c72867cda7)) (segment (start 70.58342 71.65658) (end 69.041691 73.198309) (width 0.5) (layer "F.Cu") (net 6) (tstamp d6371ef9-30af-4f2e-aefb-809bb0c52ae5)) (segment (start 69.041691 74.877665) (end 69.094026 74.93) (width 0.5) (layer "F.Cu") (net 6) (tstamp da1e7778-e80e-41b5-a1e2-6356db715c83)) (segment (start 69.041691 81.909731) (end 69.70307 82.57111) (width 0.5) (layer "F.Cu") (net 6) (tstamp dc4c5721-15df-4484-946f-514fb74c27f0)) (segment (start 72.47165 42.986085) (end 71.96552 43.492215) (width 0.5) (layer "F.Cu") (net 6) (tstamp edc50682-bc10-4e1a-a284-fd8663398241)) (segment (start 69.041691 74.877665) (end 69.041691 81.909731) (width 0.5) (layer "F.Cu") (net 6) (tstamp f0a92696-0115-4b7a-9ace-0c3f14f76eaf)) (segment (start 65.572536 74.929999) (end 65.572536 81.877464) (width 0.5) (layer "F.Cu") (net 18) (tstamp 51751eae-ec10-412f-9772-327669e42c80)) (segment (start 64.069 74.93) (end 65.572536 74.929999) (width 0.5) (layer "F.Cu") (net 18) (tstamp 537273c0-9aae-4f89-a20b-21e420c1f46b)) (segment (start 65.572536 73.192536) (end 65.572536 74.929999) (width 0.5) (layer "F.Cu") (net 18) (tstamp 57679d8e-bd9f-4b57-829f-cf04d699a9f3)) (segment (start 64.026291 71.646291) (end 65.572536 73.192536) (width 0.5) (layer "F.Cu") (net 18) (tstamp 7f7fbd8b-8218-4e76-9fb1-cc9c8ec68862)) (segment (start 65.572536 81.877464) (end 64.9 82.55) (width 0.5) (layer "F.Cu") (net 18) (tstamp 96f609ba-5d5f-4d57-876c-3a1bd5ea9ddc)) (segment (start 64.026291 55.662582) (end 64.026291 71.646291) (width 0.5) (layer "F.Cu") (net 18) (tstamp aced7e15-933a-4030-93ca-fb3cf638d282)) (segment (start 63.211958 54.848249) (end 64.026291 55.662582) (width 0.5) (layer "F.Cu") (net 18) (tstamp b3172337-a0d2-49a1-a853-c2f4fd6f664c)) (segment (start 57.775523 54.848249) (end 63.211958 54.848249) (width 0.5) (layer "F.Cu") (net 18) (tstamp dd206b88-aab8-449a-9ff2-d97283c5421a)) (segment (start 62.367055 96.52) (end 63.5 97.652945) (width 0.5) (layer "F.Cu") (net 31) (tstamp 027ed4d6-8bd5-4fd4-9b5b-e3bf9fd48be0)) (segment (start 63.5 105.774948) (end 61.95752 107.317428) (width 0.5) (layer "F.Cu") (net 31) (tstamp 0e964497-f9c4-43c5-933e-2f439b8185bf)) (segment (start 57.775523 44.688249) (end 56.149751 44.688249) (width 0.5) (layer "F.Cu") (net 31) (tstamp 3313d2c6-ddc2-4092-8591-4be09ea31228)) (segment (start 45.776 105.668629) (end 45.776 101.574) (width 0.5) (layer "F.Cu") (net 31) (tstamp 34b075c5-9d1b-41d1-b6b7-be2a2a359a80)) (segment (start 61.95752 107.317428) (end 47.424799 107.317428) (width 0.5) (layer "F.Cu") (net 31) (tstamp 471f66ee-3238-4c79-a887-ba7a17e42a10)) (segment (start 45.776 101.574) (end 45.496 101.854) (width 0.5) (layer "F.Cu") (net 31) (tstamp 53df0c2d-8d73-4334-9d2e-5228b6ed9373)) (segment (start 63.5 97.652945) (end 63.5 105.774948) (width 0.5) (layer "F.Cu") (net 31) (tstamp 58f5d3c3-9060-4036-9484-9b443631c516)) (segment (start 45.496 101.854) (end 40.08 101.854) (width 0.5) (layer "F.Cu") (net 31) (tstamp 73b5de82-2853-4cb1-8f12-8a0c1952e101)) (segment (start 54.61 46.228) (end 54.61 95.25) (width 0.5) (layer "F.Cu") (net 31) (tstamp 7d7f4fe8-9588-493a-9966-d836a8a27a3e)) (segment (start 47.424799 107.317428) (end 45.776 105.668629) (width 0.5) (layer "F.Cu") (net 31) (tstamp 879821cb-4c27-4535-8362-a9a1025ccd59)) (segment (start 54.61 95.25) (end 55.88 96.52) (width 0.5) (layer "F.Cu") (net 31) (tstamp be5ac97a-9fcb-4ad5-b83a-5906f9350be4)) (segment (start 39.699 102.235) (end 38.1 102.235) (width 0.5) (layer "F.Cu") (net 31) (tstamp c1764baa-ec67-44fd-b88d-93bf494fd4b8)) (segment (start 55.88 96.52) (end 62.367055 96.52) (width 0.5) (layer "F.Cu") (net 31) (tstamp e73e80b6-d230-49cd-b0f2-38837de54771)) (segment (start 56.149751 44.688249) (end 54.61 46.228) (width 0.5) (layer "F.Cu") (net 31) (tstamp f7e5157e-ba9c-460d-b9e8-f9090183a576)) (segment (start 40.08 101.854) (end 39.699 102.235) (width 0.5) (layer "F.Cu") (net 31) (tstamp fbc24256-eaee-48be-97ef-9e6a817f2903)) (segment (start 81.082 105.600583) (end 81.082 101.574) (width 0.5) (layer "F.Cu") (net 34) (tstamp 046d70c0-c892-4e8a-a2dd-5c0b304cb502)) (segment (start 99.2124 45.72) (end 99.2124 106.1212) (width 0.5) (layer "F.Cu") (net 34) (tstamp 078b7f6b-4663-4959-8097-a0f6b64495fe)) (segment (start 94.234 44.704) (end 98.1964 44.704) (width 0.5) (layer "F.Cu") (net 34) (tstamp 0f9c150a-d2e5-49e7-9816-c31ef99a0969)) (segment (start 76.428 101.574) (end 81.082 101.574) (width 0.5) (layer "F.Cu") (net 34) (tstamp 23598205-57b8-45d1-9ad0-8783da51361e)) (segment (start 98.1964 44.704) (end 99.2124 45.72) (width 0.5) (layer "F.Cu") (net 34) (tstamp 2d812dcd-b9dc-4929-8827-7327152a1bef)) (segment (start 97.997903 107.335697) (end 82.817114 107.335697) (width 0.5) (layer "F.Cu") (net 34) (tstamp 36fa179e-e7f4-4d08-87b1-5a088e3b8a82)) (segment (start 74.168 101.92) (end 76.082 101.92) (width 0.5) (layer "F.Cu") (net 34) (tstamp 394fa4f2-938e-4d40-bc33-af321ee04045)) (segment (start 99.2124 106.1212) (end 97.997903 107.335697) (width 0.5) (layer "F.Cu") (net 34) (tstamp 488b40cd-82c1-4927-a1f7-d659fa0497a1)) (segment (start 82.817114 107.335697) (end 81.082 105.600583) (width 0.5) (layer "F.Cu") (net 34) (tstamp 6ee8cc82-ba72-43d0-bbc7-afa5bdc3aecd)) (segment (start 76.082 101.92) (end 76.428 101.574) (width 0.5) (layer "F.Cu") (net 34) (tstamp a25372f4-4fa5-4ac2-a67e-dd69652d64cd)) (segment (start 74.168 101.92) (end 73.726 101.92) (width 0.5) (layer "F.Cu") (net 34) (tstamp b2829d3a-32b6-4311-9db8-6527ee38a76d)) (segment (start 78.655 91.889183) (end 78.078818 91.313) (width 0.3) (layer "F.Cu") (net 59) (tstamp 14fd8992-5fdd-4c9c-8518-98e7ed59997e)) (segment (start 78.078818 91.313) (end 77.343 91.313) (width 0.3) (layer "F.Cu") (net 59) (tstamp 2658a0f7-7fe9-4612-9c28-5ee654d040e9)) (segment (start 75.48 95.6056) (end 75.7359 95.8615) (width 0.3) (layer "F.Cu") (net 59) (tstamp 29cf9b27-838e-4aee-9e31-3b819ad9d6b1)) (segment (start 77.343 91.313) (end 76.454 90.424) (width 0.3) (layer "F.Cu") (net 59) (tstamp 2c026c8f-cdb6-4967-afb0-a0bc40969fa3)) (segment (start 75.777 94.911) (end 77.697817 94.911) (width 0.3) (layer "F.Cu") (net 59) (tstamp 3bd0da80-3932-487f-80d7-a3dcb00cc7e4)) (segment (start 75.48 95.208) (end 75.48 95.6056) (width 0.3) (layer "F.Cu") (net 59) (tstamp 4f2e004f-d9c9-43b3-8f53-790b80f9973e)) (segment (start 78.655 93.953818) (end 78.655 91.889183) (width 0.3) (layer "F.Cu") (net 59) (tstamp 524ca10a-88a7-489f-bd1a-831e498b888f)) (segment (start 77.697817 94.911) (end 78.655 93.953818) (width 0.3) (layer "F.Cu") (net 59) (tstamp 606e80d5-6593-4ccf-96fb-96cf44dd877a)) (segment (start 75.7359 95.8615) (end 76.4032 95.8615) (width 0.3) (layer "F.Cu") (net 59) (tstamp 73ee8184-fd07-4417-97a9-23e81b9157a3)) (segment (start 75.48 95.208) (end 75.777 94.911) (width 0.3) (layer "F.Cu") (net 59) (tstamp ddb7e9b7-8ac5-4fd1-8296-9226a7fcf0ce)) (segment (start 79.806434 94.186434) (end 79.8 94.18) (width 0.5) (layer "F.Cu") (net 61) (tstamp 0e8f551f-4a72-4ce8-bdf7-c69785347319)) (segment (start 79.806434 95.449591) (end 79.806434 94.186434) (width 0.55) (layer "F.Cu") (net 61) (tstamp 47fff93d-3fd1-4ce9-ad41-f5c0f1d8548a)) (segment (start 72.166691 74.877665) (end 76.147665 74.877665) (width 0.5) (layer "F.Cu") (net 61) (tstamp 8f3fd6fc-7587-4595-8ce2-cf5367d8b036)) (segment (start 38.608 95.377) (end 37.8695 96.1155) (width 0.3) (layer "F.Cu") (net 62) (tstamp 06048e7e-fff9-4e7c-91f7-67edf1104f5a)) (segment (start 37.8695 96.1155) (end 37.846 96.1155) (width 0.3) (layer "F.Cu") (net 62) (tstamp 2f9ca5b0-3826-4555-bd4a-0b0542143332)) (segment (start 39.995523 92.948249) (end 40.995772 91.948) (width 0.3) (layer "F.Cu") (net 62) (tstamp 4b6ded3d-395b-4aba-8b63-19be1fde694e)) (segment (start 38.608 94.869) (end 38.608 95.377) (width 0.3) (layer "F.Cu") (net 62) (tstamp 549903f2-df37-4705-aeb1-29533050ef6c)) (segment (start 41.783 93.599) (end 41.021 94.361) (width 0.3) (layer "F.Cu") (net 62) (tstamp 5cc56b98-ba30-4cb1-89a3-4e72d850a76a)) (segment (start 41.021 94.361) (end 39.116 94.361) (width 0.3) (layer "F.Cu") (net 62) (tstamp 729e2146-aa0f-4ef5-ae7d-c13bca4defa1)) (segment (start 41.783 92.329) (end 41.783 93.599) (width 0.3) (layer "F.Cu") (net 62) (tstamp 96a41e23-3124-4140-9920-d4bfb3121b77)) (segment (start 40.995772 91.948) (end 41.402 91.948) (width 0.3) (layer "F.Cu") (net 62) (tstamp bf432add-e5e0-4c5f-8ec8-962fcb8754e3)) (segment (start 39.116 94.361) (end 38.608 94.869) (width 0.3) (layer "F.Cu") (net 62) (tstamp cf793866-c238-4a45-85ba-69d5d8e4b112)) (segment (start 41.402 91.948) (end 41.783 92.329) (width 0.3) (layer "F.Cu") (net 62) (tstamp ef868975-4338-431e-9055-42ffefb91aa2)) (segment (start 42.333 92.101183) (end 42.333 93.826818) (width 0.3) (layer "F.Cu") (net 64) (tstamp 1d8fdfad-8ba9-49c1-ace2-d4138ec753a6)) (segment (start 40.773274 91.186) (end 41.417818 91.186) (width 0.3) (layer "F.Cu") (net 64) (tstamp 4178873f-1d48-4f30-95a7-6257641cecd1)) (segment (start 39.243 95.488534) (end 39.869966 96.1155) (width 0.3) (layer "F.Cu") (net 64) (tstamp 6f5ac55f-c428-4a4f-aa8c-19cf3f74cb30)) (segment (start 42.333 93.826818) (end 41.248817 94.911) (width 0.3) (layer "F.Cu") (net 64) (tstamp 7c9ed92b-dc0c-4090-9c01-4a086869bfca)) (segment (start 39.343818 94.911) (end 39.243 95.011818) (width 0.3) (layer "F.Cu") (net 64) (tstamp 9128d088-d09e-478d-9f5d-e44424cae4ee)) (segment (start 41.417818 91.186) (end 42.333 92.101183) (width 0.3) (layer "F.Cu") (net 64) (tstamp 9f05992a-d2f6-4443-b8cc-f9bac58896f4)) (segment (start 39.995523 90.408249) (end 40.773274 91.186) (width 0.3) (layer "F.Cu") (net 64) (tstamp ba8a66f2-c1c8-4677-a353-a2d7c9edd8b9)) (segment (start 39.243 95.011818) (end 39.243 95.488534) (width 0.3) (layer "F.Cu") (net 64) (tstamp dad013c4-6ff6-4b0d-ae2d-414f85f03244)) (segment (start 41.248817 94.911) (end 39.343818 94.911) (width 0.3) (layer "F.Cu") (net 64) (tstamp e4682d94-ec4a-4372-852d-5274af1b9ca3)) (segment (start 39.869966 96.1155) (end 40.005 96.1155) (width 0.3) (layer "F.Cu") (net 64) (tstamp e8512997-a88d-433e-ad3a-03cfca0d0351)) (segment (start 69.85 83.82) (end 71.949721 83.82) (width 0.5) (layer "F.Cu") (net 65) (tstamp 6f9b24c1-6cd3-489f-b832-1fe9d16d047c)) (segment (start 71.949721 83.82) (end 72.965721 82.804) (width 0.5) (layer "F.Cu") (net 65) (tstamp c3f493c8-7838-48f2-94df-1b5748e68b89)) (segment (start 72.965721 82.804) (end 76.454 82.804) (width 0.5) (layer "F.Cu") (net 65) (tstamp ce266132-c39d-45b4-8a98-d5af2663bc77)) (segment (start 69.85 85.09) (end 76.2 85.09) (width 0.5) (layer "F.Cu") (net 66) (tstamp 2f903b88-a574-4e80-b3cd-9504ea86dba9)) (segment (start 76.18 85.27) (end 76.434 85.524) (width 0.5) (layer "F.Cu") (net 66) (tstamp 438df6c1-6297-42c8-8fd5-3e468a937cc1)) (segment (start 62.2808 85.598) (end 62.7888 85.09) (width 0.5) (layer "F.Cu") (net 67) (tstamp 1a6e7a59-c839-41d9-b67b-f17031766952)) (segment (start 62.2808 91.5416) (end 62.2808 85.598) (width 0.5) (layer "F.Cu") (net 67) (tstamp 310a2cf9-4cd5-4232-8564-b79ef7e40141)) (segment (start 62.7888 85.09) (end 64.9 85.09) (width 0.5) (layer "F.Cu") (net 67) (tstamp 8d6dab66-bb2b-4648-bce7-2e4d8ee9c259)) (segment (start 60.874151 92.948249) (end 62.2808 91.5416) (width 0.5) (layer "F.Cu") (net 67) (tstamp b2743b72-fe9a-473b-9d59-020a50778172)) (segment (start 57.775523 92.948249) (end 60.874151 92.948249) (width 0.5) (layer "F.Cu") (net 67) (tstamp e39b6acc-0e06-4f34-b6a8-65839334dd52)) (segment (start 61.3156 84.7344) (end 62.23 83.82) (width 0.5) (layer "F.Cu") (net 68) (tstamp 0ab6e73b-c128-47ab-a129-c18d09cfa0f3)) (segment (start 61.3156 89.8144) (end 61.3156 84.7344) (width 0.5) (layer "F.Cu") (net 68) (tstamp 1725a7c8-65f3-4957-acde-2d6e6f470d6c)) (segment (start 62.23 83.82) (end 64.9 83.82) (width 0.5) (layer "F.Cu") (net 68) (tstamp 23ae5d46-2e65-4060-8430-774931db68b5)) (segment (start 60.96 90.17) (end 61.3156 89.8144) (width 0.5) (layer "F.Cu") (net 68) (tstamp c270a540-4650-4c3d-8fd9-c4068aede791)) (segment (start 57.775523 90.408249) (end 58.013772 90.17) (width 0.5) (layer "F.Cu") (net 68) (tstamp c785548f-03dd-4747-a5a7-639d9574f2c8)) (segment (start 58.013772 90.17) (end 60.96 90.17) (width 0.5) (layer "F.Cu") (net 68) (tstamp d2358d42-28aa-4579-bf2d-49584078ecf7)) (segment (start 74.93 95.631) (end 74.6995 95.8615) (width 0.3) (layer "F.Cu") (net 73) (tstamp 40ec2ff3-2070-440a-8fc9-551f0b543c91)) (segment (start 74.93 94.869) (end 74.93 95.631) (width 0.3) (layer "F.Cu") (net 73) (tstamp 6c8391eb-bcef-476f-9502-fb21b3efe8dd)) (segment (start 77.47 94.361) (end 75.438 94.361) (width 0.3) (layer "F.Cu") (net 73) (tstamp 739f2c4b-f317-47e5-83b2-1d4f3d507fc2)) (segment (start 76.454 92.964) (end 76.454 92.71) (width 0.3) (layer "F.Cu") (net 73) (tstamp 7e656d32-bbd6-48e6-b11b-9d4ff32a4eb6)) (segment (start 78.105 92.117) (end 78.105 93.726) (width 0.3) (layer "F.Cu") (net 73) (tstamp 82c3dc4e-a3c7-487e-85d5-b7ac20102b6a)) (segment (start 77.851 91.863) (end 78.105 92.117) (width 0.3) (layer "F.Cu") (net 73) (tstamp 8b008d54-f0d7-416e-8e60-a7dd4308cfd1)) (segment (start 78.105 93.726) (end 77.47 94.361) (width 0.3) (layer "F.Cu") (net 73) (tstamp 8e9101f3-4eb4-4fb7-898b-bafd031ab8f5)) (segment (start 75.438 94.361) (end 74.93 94.869) (width 0.3) (layer "F.Cu") (net 73) (tstamp ab7678a5-db9e-4f65-b0e3-d9bb1984afa9)) (segment (start 77.301 91.863) (end 77.851 91.863) (width 0.3) (layer "F.Cu") (net 73) (tstamp cf17e6c7-c307-4477-9c85-7b8f760fc6d3)) (segment (start 74.6995 95.8615) (end 74.0156 95.8615) (width 0.3) (layer "F.Cu") (net 73) (tstamp dca0df6d-d00f-44fe-92a4-49f4919a05ea)) (segment (start 76.454 92.71) (end 77.301 91.863) (width 0.3) (layer "F.Cu") (net 73) (tstamp e818ad8c-f60a-47a2-bcdb-1ffabb98f0cf)) (segment (start 78.8924 96.9684) (end 80.7632 96.9684) (width 0.3) (layer "F.Cu") (net 74) (tstamp 09852b2b-1826-44ae-9991-a8cf2c2e78f6)) (segment (start 76.962 99.229) (end 77.089 99.229) (width 0.3) (layer "F.Cu") (net 74) (tstamp 180e3427-8648-4278-9abf-6d6d7e467085)) (segment (start 80.7632 96.9684) (end 80.772 96.9772) (width 0.3) (layer "F.Cu") (net 74) (tstamp 1cdb23f2-e70b-4229-9da4-417e2a074795)) (segment (start 78.856472 98.160051) (end 78.856472 97.004328) (width 0.3) (layer "F.Cu") (net 74) (tstamp 26091e89-4fed-44a1-b890-8135038a88e4)) (segment (start 78.105 97.3582) (end 78.4948 96.9684) (width 0.3) (layer "F.Cu") (net 74) (tstamp 3aba3cfc-5e3d-4d0c-bd8d-88d5fbf8c2b3)) (segment (start 78.856472 97.004328) (end 78.8924 96.9684) (width 0.3) (layer "F.Cu") (net 74) (tstamp 5303274f-3da1-4bb9-914c-2407e8a02aec)) (segment (start 80.756396 98.160051) (end 80.756396 96.992804) (width 0.3) (layer "F.Cu") (net 74) (tstamp 6c7a03bd-64b8-465d-9353-10825a131160)) (segment (start 75.387982 99.229) (end 76.962 99.229) (width 0.3) (layer "F.Cu") (net 74) (tstamp 6df9e625-64d2-4ef0-b68e-25dab53e517d)) (segment (start 80.756396 96.992804) (end 80.772 96.9772) (width 0.3) (layer "F.Cu") (net 74) (tstamp 75354b5e-d3a2-4cbb-bad7-35f93b2c2c2c)) (segment (start 76.962 99.229) (end 77.6058 99.229) (width 0.3) (layer "F.Cu") (net 74) (tstamp 8e556f74-9a20-4b3f-88f8-561275a88303)) (segment (start 74.6233 97.6865) (end 74.888 97.9512) (width 0.3) (layer "F.Cu") (net 74) (tstamp 8e9b6393-6fce-4499-bf3c-c2419a566abd)) (segment (start 84.328 100.828) (end 83.582 101.574) (width 0.3) (layer "F.Cu") (net 74) (tstamp 92fd023a-3f15-4a6a-8f87-6d17ed9b1f75)) (segment (start 77.6058 99.229) (end 78.105 98.7298) (width 0.3) (layer "F.Cu") (net 74) (tstamp b1d6fe9a-17a9-4e9e-961e-931095313935)) (segment (start 74.888 97.9512) (end 74.888 98.729018) (width 0.3) (layer "F.Cu") (net 74) (tstamp b89cdb73-6b81-4568-99f2-97711d1bb5f5)) (segment (start 80.772 96.9772) (end 81.772182 96.9772) (width 0.3) (layer "F.Cu") (net 74) (tstamp ba0581c4-e324-402e-8f48-5d2f74818481)) (segment (start 78.4948 96.9684) (end 78.8924 96.9684) (width 0.3) (layer "F.Cu") (net 74) (tstamp c16d645e-122d-4070-b673-67f981dd029c)) (segment (start 81.772182 96.9772) (end 84.328 99.533018) (width 0.3) (layer "F.Cu") (net 74) (tstamp cc10b5ea-825c-4dd7-9f0b-b3e932d1a5ea)) (segment (start 78.105 98.7298) (end 78.105 97.3582) (width 0.3) (layer "F.Cu") (net 74) (tstamp e04306f2-050f-4378-bfd7-96ca6a55dd3b)) (segment (start 74.888 98.729018) (end 75.387982 99.229) (width 0.3) (layer "F.Cu") (net 74) (tstamp e4bc31ef-a959-4102-9d67-83e6a2b3aade)) (segment (start 84.328 99.533018) (end 84.328 100.828) (width 0.3) (layer "F.Cu") (net 74) (tstamp e9cbe720-abd0-4ce7-820d-afe5976d636f)) (segment (start 74.0156 97.6865) (end 74.6233 97.6865) (width 0.3) (layer "F.Cu") (net 74) (tstamp ff9e4456-e11f-4569-8a8a-6a3a68f1b0d5)) (segment (start 80.756396 95.359949) (end 80.756396 96.351996) (width 0.3) (layer "F.Cu") (net 75) (tstamp 09dbe889-3822-42cf-b462-c8193ab47bf1)) (segment (start 76.4032 97.7138) (end 76.4032 97.6865) (width 0.3) (layer "F.Cu") (net 75) (tstamp 13612254-e1ac-4a59-add1-1963f80c584a)) (segment (start 84.878 100.87) (end 85.582 101.574) (width 0.3) (layer "F.Cu") (net 75) (tstamp 3a6b9407-3ce1-4ab9-b335-68e3caeab14e)) (segment (start 80.756396 96.351996) (end 80.8228 96.4184) (width 0.3) (layer "F.Cu") (net 75) (tstamp 46fde01a-26c1-4ce8-80ad-7b8596a968a2)) (segment (start 77.555 98.4162) (end 77.555 97.0954) (width 0.3) (layer "F.Cu") (net 75) (tstamp 54dc71c1-205f-4391-87dc-1966a385b750)) (segment (start 78.8416 96.4184) (end 80.8228 96.4184) (width 0.3) (layer "F.Cu") (net 75) (tstamp 575b16c5-e5fa-49b4-bd0c-3b5cd92c295e)) (segment (start 76.2 97.917) (end 76.4032 97.7138) (width 0.3) (layer "F.Cu") (net 75) (tstamp 5a74c1f5-84ca-40c5-b3c9-d751e0b37c90)) (segment (start 77.555 97.0954) (end 78.232 96.4184) (width 0.3) (layer "F.Cu") (net 75) (tstamp 611fc84c-1ff9-4667-b801-f4e32c957c34)) (segment (start 78.856472 96.403528) (end 78.8416 96.4184) (width 0.3) (layer "F.Cu") (net 75) (tstamp 76db0df6-2077-4d0d-9c2f-f67415fe8c0a)) (segment (start 78.232 96.4184) (end 78.8416 96.4184) (width 0.3) (layer "F.Cu") (net 75) (tstamp 8469e180-673d-47b2-965d-a0f9d01260ed)) (segment (start 80.8228 96.4184) (end 81.9912 96.4184) (width 0.3) (layer "F.Cu") (net 75) (tstamp 9ddc4c49-5c35-4e5f-9e74-317254e49f62)) (segment (start 81.9912 96.4184) (end 84.878 99.3052) (width 0.3) (layer "F.Cu") (net 75) (tstamp b31ec79b-b068-449a-80fe-18738c69e66f)) (segment (start 75.732 97.6865) (end 75.438 97.9805) (width 0.3) (layer "F.Cu") (net 75) (tstamp bc1aef81-2a5e-4d9d-a3cd-5c755ac43611)) (segment (start 77.2922 98.679) (end 77.555 98.4162) (width 0.3) (layer "F.Cu") (net 75) (tstamp c019b261-b962-4dc3-862e-0c3e900a3b20)) (segment (start 84.878 99.3052) (end 84.878 100.87) (width 0.3) (layer "F.Cu") (net 75) (tstamp c864f619-97d6-4115-96a2-29b6328ff93e)) (segment (start 78.856472 95.359949) (end 78.856472 96.403528) (width 0.3) (layer "F.Cu") (net 75) (tstamp d0b9753f-3d57-43a4-a3c4-a303ccfe8e55)) (segment (start 75.438 98.5012) (end 75.6158 98.679) (width 0.3) (layer "F.Cu") (net 75) (tstamp de9e2413-c956-4795-9249-b8f713367fb1)) (segment (start 75.438 97.9805) (end 75.438 98.5012) (width 0.3) (layer "F.Cu") (net 75) (tstamp ee571bee-371f-4df6-a816-dbda8bb76433)) (segment (start 76.4032 97.6865) (end 75.732 97.6865) (width 0.3) (layer "F.Cu") (net 75) (tstamp f2aeeea3-41d3-41eb-badd-dbfe5cbb6f5a)) (segment (start 75.6158 98.679) (end 77.2922 98.679) (width 0.3) (layer "F.Cu") (net 75) (tstamp feba85b0-f09d-406a-ac93-1e875c03dd8e)) (segment (start 39.243 99.949) (end 40.513 99.949) (width 0.3) (layer "F.Cu") (net 76) (tstamp 1cbc5245-743a-4e9d-ba1b-0a241d899829)) (segment (start 46.635182 97.07) (end 48.9712 99.406018) (width 0.3) (layer "F.Cu") (net 76) (tstamp 2601da96-b848-4dcd-9466-2d56ae35b8f1)) (segment (start 38.608 99.314) (end 38.862 99.568) (width 0.3) (layer "F.Cu") (net 76) (tstamp 31c8c2e3-79e4-40af-8608-36d7acfd2893)) (segment (start 38.862 99.568) (end 39.243 99.949) (width 0.3) (layer "F.Cu") (net 76) (tstamp 3ebd1d2b-d85a-475f-8b40-139852a271ac)) (segment (start 42.291 97.07) (end 42.5196 97.07) (width 0.3) (layer "F.Cu") (net 76) (tstamp 4ae7694b-cf28-4692-af6c-139e49d39868)) (segment (start 44.41986 97.10014) (end 44.41986 98.170051) (width 0.3) (layer "F.Cu") (net 76) (tstamp 55f9a3aa-1214-4a00-8346-4efafdc6ce3e)) (segment (start 48.276 101.33) (end 48.276 101.574) (width 0.3) (layer "F.Cu") (net 76) (tstamp 57761a1f-3a8e-4785-bc3b-8ae86ea9122c)) (segment (start 48.9712 99.406018) (end 48.9712 100.6348) (width 0.3) (layer "F.Cu") (net 76) (tstamp 6e9f1504-1d08-4c16-b271-0950fb65c8d6)) (segment (start 42.519936 98.170051) (end 42.519936 97.070336) (width 0.3) (layer "F.Cu") (net 76) (tstamp 755d4e8c-9b6d-467a-8d08-e9d4ae78ebfe)) (segment (start 38.3775 97.9405) (end 38.608 98.171) (width 0.3) (layer "F.Cu") (net 76) (tstamp 831174c8-964a-4195-8d91-46c5b580ec90)) (segment (start 37.846 97.9405) (end 38.3775 97.9405) (width 0.3) (layer "F.Cu") (net 76) (tstamp 93e5afa3-51c6-4d44-8196-9cbc78810980)) (segment (start 40.894 99.949) (end 41.783 99.06) (width 0.3) (layer "F.Cu") (net 76) (tstamp a01faefc-f945-4150-a9ca-1ce3f79eba62)) (segment (start 41.84493 97.417782) (end 42.192712 97.07) (width 0.3) (layer "F.Cu") (net 76) (tstamp a26ecf44-5df9-4cf8-9bb3-d6ed2a641d78)) (segment (start 48.9712 100.6348) (end 48.276 101.33) (width 0.3) (layer "F.Cu") (net 76) (tstamp a3c67fc2-3aca-4fef-a94a-c1ed95f8f832)) (segment (start 40.513 99.949) (end 40.894 99.949) (width 0.3) (layer "F.Cu") (net 76) (tstamp a9eafb45-2189-481b-8400-de5ae84f7b5b)) (segment (start 42.5196 97.07) (end 44.238 97.07) (width 0.3) (layer "F.Cu") (net 76) (tstamp ae331bad-dec0-4c73-ba8d-5e0756f8331f)) (segment (start 41.783 99.06) (end 41.84493 98.99807) (width 0.3) (layer "F.Cu") (net 76) (tstamp b04f3da0-b8a6-4188-983f-84129fee7459)) (segment (start 44.45 97.07) (end 44.41986 97.10014) (width 0.3) (layer "F.Cu") (net 76) (tstamp b8b85e97-86f8-409a-b477-d56c10cd2fe1)) (segment (start 44.238 97.07) (end 44.45 97.07) (width 0.3) (layer "F.Cu") (net 76) (tstamp bb010a3d-7ecd-4464-87b8-f6ab0e756c98)) (segment (start 42.519936 97.070336) (end 42.5196 97.07) (width 0.3) (layer "F.Cu") (net 76) (tstamp da169aa2-52aa-4856-b29d-55a187d94d5f)) (segment (start 38.608 98.171) (end 38.608 99.314) (width 0.3) (layer "F.Cu") (net 76) (tstamp edc0a5bf-7fea-4b39-8ed5-ede9990aa188)) (segment (start 41.84493 98.99807) (end 41.84493 97.417782) (width 0.3) (layer "F.Cu") (net 76) (tstamp f15f313f-a612-4834-8442-dabf4e2a8996)) (segment (start 42.192712 97.07) (end 42.291 97.07) (width 0.3) (layer "F.Cu") (net 76) (tstamp f36e9d14-5951-4f45-bce3-ced055343b09)) (segment (start 44.45 97.07) (end 46.635182 97.07) (width 0.3) (layer "F.Cu") (net 76) (tstamp f466b684-04b3-4a7a-8bf8-b629fde73389)) (segment (start 39.6005 97.9405) (end 39.243 98.298) (width 0.3) (layer "F.Cu") (net 77) (tstamp 004820f3-235b-4570-838d-2a110a37dfed)) (segment (start 46.863 96.52) (end 49.5212 99.1782) (width 0.3) (layer "F.Cu") (net 77) (tstamp 0bc13746-713b-4676-885d-d22f7c562ad8)) (segment (start 42.5196 96.52) (end 44.45 96.52) (width 0.3) (layer "F.Cu") (net 77) (tstamp 0d18df63-41d3-4120-a71d-4a0c9ce6edf8)) (segment (start 41.964895 96.52) (end 42.5196 96.52) (width 0.3) (layer "F.Cu") (net 77) (tstamp 2bd31a72-b827-4041-8ac4-94ac03ef31e8)) (segment (start 39.243 98.298) (end 39.243 99.171182) (width 0.3) (layer "F.Cu") (net 77) (tstamp 4b993fc7-0347-4f39-a0b6-04054da639f8)) (segment (start 44.41986 95.369949) (end 44.41986 96.48986) (width 0.3) (layer "F.Cu") (net 77) (tstamp 51211a50-d1d4-488b-a426-97d57a002831)) (segment (start 39.470818 99.399) (end 40.666182 99.399) (width 0.3) (layer "F.Cu") (net 77) (tstamp 5571db61-5565-4848-b81d-33b15d92e9a5)) (segment (start 49.5212 99.1782) (end 49.5212 100.626) (width 0.3) (layer "F.Cu") (net 77) (tstamp 57fa8f2e-9aeb-4f13-b92c-b0b34bd36479)) (segment (start 44.45 96.52) (end 46.863 96.52) (width 0.3) (layer "F.Cu") (net 77) (tstamp 685d8355-a3e4-4dfe-a052-2a2a7f3295ce)) (segment (start 42.519936 96.519664) (end 42.5196 96.52) (width 0.3) (layer "F.Cu") (net 77) (tstamp 752ce59f-b335-4cd2-8fec-bf1a272699dc)) (segment (start 49.5212 100.626) (end 50.276 101.3808) (width 0.3) (layer "F.Cu") (net 77) (tstamp 756927aa-89d9-441d-b7f9-6cc93bc403a1)) (segment (start 40.666182 99.399) (end 41.29493 98.770252) (width 0.3) (layer "F.Cu") (net 77) (tstamp 7bd0ad43-6e3e-4589-bc85-8cd3b78812db)) (segment (start 40.005 97.9405) (end 39.6005 97.9405) (width 0.3) (layer "F.Cu") (net 77) (tstamp 81563b44-c0b6-473d-89c6-3df0f76a798a)) (segment (start 39.243 99.171182) (end 39.470818 99.399) (width 0.3) (layer "F.Cu") (net 77) (tstamp 991b0057-53ad-479d-b300-084e4e826e34)) (segment (start 50.276 101.3808) (end 50.276 101.574) (width 0.3) (layer "F.Cu") (net 77) (tstamp c0565cb3-d027-4bcb-9c3b-050c2b7a8563)) (segment (start 41.29493 98.770252) (end 41.29493 97.189964) (width 0.3) (layer "F.Cu") (net 77) (tstamp c1282e46-b5ef-4bec-ba6f-13f3999591b8)) (segment (start 41.29493 97.189964) (end 41.964895 96.52) (width 0.3) (layer "F.Cu") (net 77) (tstamp d47254fe-2b0d-43ca-88ce-f994d746f483)) (segment (start 44.41986 96.48986) (end 44.45 96.52) (width 0.3) (layer "F.Cu") (net 77) (tstamp e09ed277-97ac-481c-8acd-2464aef42353)) (segment (start 42.519936 95.369949) (end 42.519936 96.519664) (width 0.3) (layer "F.Cu") (net 77) (tstamp fe9e534e-51b6-4600-8b37-1581144cbe07)) (zone (net 4) (net_name "Net-(J3-Pin_1)") (layer "F.Cu") (tstamp 04251889-526e-4a8a-9d03-d7d9130f421c) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30029) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 88.134 93.784) (xy 88.151164 93.647229) (xy 88.199536 93.560896) (xy 88.274429 93.498052) (xy 88.371159 93.43175) (xy 88.485041 93.335041) (xy 87.884 92.733) (xy 87.282959 93.335041) (xy 87.39684 93.43175) (xy 87.493569 93.498052) (xy 87.568463 93.560896) (xy 87.616834 93.647229) (xy 87.634 93.784) ) ) (filled_polygon (layer "F.Cu") (pts (xy 87.892264 92.741278) (xy 88.476081 93.326066) (xy 88.479501 93.334342) (xy 88.476067 93.342612) (xy 88.475374 93.34325) (xy 88.371395 93.43155) (xy 88.370916 93.431916) (xy 88.274429 93.498051) (xy 88.199535 93.560897) (xy 88.151163 93.64723) (xy 88.135285 93.773757) (xy 88.130855 93.781539) (xy 88.123676 93.784) (xy 87.644323 93.784) (xy 87.63605 93.780573) (xy 87.632714 93.773757) (xy 87.616834 93.64723) (xy 87.616834 93.647229) (xy 87.568463 93.560896) (xy 87.493569 93.498052) (xy 87.39708 93.431914) (xy 87.396617 93.431561) (xy 87.292624 93.343249) (xy 87.288537 93.335283) (xy 87.29128 93.326759) (xy 87.291905 93.32608) (xy 87.875721 92.741292) (xy 87.88399 92.737859) ) ) ) (zone (net 75) (net_name "OA+") (layer "F.Cu") (tstamp 05359be3-1d98-48a1-aeb1-d9f3c6c80fd5) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30063) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 79.006472 96.059949) (xy 79.031473 96.005798) (xy 79.056474 95.958722) (xy 79.081475 95.918722) (xy 79.106476 95.885798) (xy 79.131478 95.859949) (xy 78.856472 95.358949) (xy 78.581466 95.859949) (xy 78.606467 95.885798) (xy 78.631468 95.918722) (xy 78.656469 95.958722) (xy 78.68147 96.005798) (xy 78.706472 96.059949) ) ) (filled_polygon (layer "F.Cu") (pts (xy 78.862102 95.373007) (xy 78.866728 95.377633) (xy 79.127326 95.852385) (xy 79.128303 95.861286) (xy 79.12548 95.866149) (xy 79.106472 95.885802) (xy 79.081473 95.918723) (xy 79.05647 95.958728) (xy 79.031479 96.005786) (xy 79.009609 96.053153) (xy 79.00303 96.059228) (xy 78.998987 96.059949) (xy 78.713956 96.059949) (xy 78.705683 96.056522) (xy 78.703334 96.053153) (xy 78.681464 96.005786) (xy 78.656473 95.958728) (xy 78.631469 95.918723) (xy 78.60647 95.885801) (xy 78.606462 95.885793) (xy 78.587463 95.866149) (xy 78.584175 95.85782) (xy 78.585616 95.852388) (xy 78.846216 95.377632) (xy 78.853201 95.37203) ) ) ) (zone (net 66) (net_name "UART A RX") (layer "F.Cu") (tstamp 063de67b-324b-44eb-b640-9893035a31bb) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30033) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 75.454523 85.34) (xy 75.545001 85.356825) (xy 75.593114 85.403648) (xy 75.617405 85.474985) (xy 75.63642 85.565357) (xy 75.668702 85.669281) (xy 76.455 85.344) (xy 76.128719 84.558702) (xy 75.964083 84.641632) (xy 75.850815 84.718103) (xy 75.752445 84.781239) (xy 75.632504 84.824163) (xy 75.454523 84.84) ) ) (filled_polygon (layer "F.Cu") (pts (xy 76.133191 84.569549) (xy 76.133547 84.570323) (xy 76.450504 85.333179) (xy 76.450513 85.342134) (xy 76.444188 85.348472) (xy 76.444182 85.348475) (xy 76.444172 85.348479) (xy 75.680545 85.664381) (xy 75.67159 85.664377) (xy 75.665261 85.658043) (xy 75.664905 85.657058) (xy 75.636492 85.565591) (xy 75.636368 85.565111) (xy 75.624336 85.507928) (xy 75.617408 85.474996) (xy 75.617406 85.47499) (xy 75.617405 85.474985) (xy 75.593114 85.403648) (xy 75.545001 85.356825) (xy 75.464084 85.341777) (xy 75.456577 85.336895) (xy 75.454523 85.330274) (xy 75.454523 84.850705) (xy 75.45795 84.842432) (xy 75.465185 84.839051) (xy 75.632504 84.824163) (xy 75.752445 84.781239) (xy 75.850815 84.718103) (xy 75.963778 84.641838) (xy 75.964405 84.641469) (xy 76.11748 84.564362) (xy 76.126409 84.563701) ) ) ) (zone (net 62) (net_name "Net-(U2-GPIO15)") (layer "F.Cu") (tstamp 0758ecd9-d7ab-4a95-8e0d-d6ace2ca7068) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30035) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 40.631919 92.099721) (xy 40.50988 92.185967) (xy 40.402348 92.196402) (xy 40.292195 92.163567) (xy 40.162296 92.120002) (xy 39.995523 92.098249) (xy 39.994816 92.948956) (xy 40.845523 92.948249) (xy 40.823769 92.781475) (xy 40.780204 92.651575) (xy 40.747368 92.541423) (xy 40.757803 92.433891) (xy 40.844051 92.311853) ) ) (filled_polygon (layer "F.Cu") (pts (xy 40.00871 92.099969) (xy 40.161174 92.119855) (xy 40.163368 92.120361) (xy 40.292195 92.163567) (xy 40.402348 92.196402) (xy 40.402349 92.196402) (xy 40.429231 92.193793) (xy 40.50988 92.185967) (xy 40.623868 92.10541) (xy 40.632599 92.103435) (xy 40.638891 92.106693) (xy 40.837077 92.304879) (xy 40.840504 92.313152) (xy 40.838359 92.319904) (xy 40.757803 92.433889) (xy 40.757802 92.433893) (xy 40.747367 92.541422) (xy 40.747367 92.541423) (xy 40.780204 92.651575) (xy 40.823407 92.780396) (xy 40.823916 92.782603) (xy 40.8438 92.935047) (xy 40.841472 92.943694) (xy 40.833711 92.948162) (xy 40.832208 92.94826) (xy 40.006535 92.948946) (xy 39.998259 92.945526) (xy 39.994825 92.937257) (xy 39.995511 92.111559) (xy 39.998945 92.103292) (xy 40.007221 92.099872) ) ) ) (zone (net 31) (net_name "VBUS2") (layer "F.Cu") (tstamp 0d204d7d-d029-472b-b3d4-9b31154595d6) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30020) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 44.776 102.104) (xy 44.816 102.13016) (xy 44.856 102.165241) (xy 44.895999 102.209241) (xy 44.935999 102.26216) (xy 44.976 102.324) (xy 45.777 101.574) (xy 44.976 101.019267) (xy 44.935999 101.173292) (xy 44.895999 101.308778) (xy 44.856 101.425725) (xy 44.816 101.524132) (xy 44.776 101.604) ) ) (filled_polygon (layer "F.Cu") (pts (xy 44.98977 101.028804) (xy 45.198403 101.173292) (xy 45.765083 101.565747) (xy 45.769934 101.573275) (xy 45.768041 101.582027) (xy 45.766419 101.583907) (xy 44.986218 102.314432) (xy 44.977836 102.317585) (xy 44.96968 102.313888) (xy 44.968397 102.312246) (xy 44.935999 102.26216) (xy 44.936 102.262161) (xy 44.895997 102.209238) (xy 44.895995 102.209236) (xy 44.856005 102.165246) (xy 44.856002 102.165244) (xy 44.856 102.165241) (xy 44.838036 102.149486) (xy 44.816002 102.130161) (xy 44.781296 102.107463) (xy 44.776248 102.100066) (xy 44.776 102.097671) (xy 44.776 101.606765) (xy 44.777239 101.601526) (xy 44.816001 101.52413) (xy 44.856 101.425724) (xy 44.856001 101.425724) (xy 44.895999 101.308778) (xy 44.935999 101.173292) (xy 44.971788 101.035481) (xy 44.977184 101.028337) (xy 44.986053 101.0271) ) ) ) (zone (net 61) (net_name "GND2") (layer "F.Cu") (tstamp 0f14265c-0a60-40da-96d6-c7806dfe209e) (hatch edge 0.5) (priority 1) (connect_pads (clearance 0.508)) (min_thickness 0.25) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5)) (polygon (pts (xy 68.072684 41.148) (xy 100.723078 41.000403) (xy 100.710038 115.566942) (xy 68.031208 115.57905) ) ) (filled_polygon (layer "F.Cu") (pts (xy 86.232407 97.574434) (xy 86.253049 97.591068) (xy 88.971021 100.30904) (xy 89.004506 100.370363) (xy 88.999522 100.440055) (xy 88.95765 100.495988) (xy 88.892186 100.520405) (xy 88.823913 100.505553) (xy 88.812216 100.498296) (xy 88.734482 100.443866) (xy 88.528326 100.347734) (xy 88.528317 100.34773) (xy 88.30861 100.28886) (xy 88.308599 100.288858) (xy 88.082002 100.269034) (xy 88.081998 100.269034) (xy 87.8554 100.288858) (xy 87.855389 100.28886) (xy 87.635682 100.34773) (xy 87.635673 100.347734) (xy 87.429513 100.443868) (xy 87.356526 100.494973) (xy 87.971548 101.109995) (xy 87.946801 101.113554) (xy 87.822555 101.170295) (xy 87.719327 101.259742) (xy 87.645481 101.374649) (xy 87.619064 101.464617) (xy 87.002973 100.848526) (xy 87.002972 100.848527) (xy 86.951867 100.921513) (xy 86.94907 100.927513) (xy 86.902897 100.979951) (xy 86.835703 100.999102) (xy 86.768822 100.978885) (xy 86.724307 100.927511) (xy 86.72179 100.922113) (xy 86.719523 100.917251) (xy 86.588198 100.7297) (xy 86.4263 100.567802) (xy 86.238749 100.436477) (xy 86.238745 100.436475) (xy 86.031249 100.339718) (xy 86.031238 100.339714) (xy 85.810089 100.280457) (xy 85.810082 100.280456) (xy 85.649692 100.266424) (xy 85.584624 100.240971) (xy 85.543645 100.18438) (xy 85.5365 100.142896) (xy 85.5365 99.391591) (xy 85.538282 99.375448) (xy 85.538055 99.375427) (xy 85.538787 99.367669) (xy 85.538789 99.367663) (xy 85.5365 99.294839) (xy 85.5365 99.263768) (xy 85.535564 99.256366) (xy 85.535107 99.250553) (xy 85.53499 99.246837) (xy 85.533562 99.201369) (xy 85.527535 99.180626) (xy 85.52359 99.161577) (xy 85.520882 99.140136) (xy 85.502763 99.094372) (xy 85.500872 99.088848) (xy 85.49847 99.080582) (xy 85.487145 99.0416) (xy 85.476149 99.023008) (xy 85.467589 99.005535) (xy 85.460252 98.987003) (xy 85.459635 98.985444) (xy 85.459631 98.985438) (xy 85.430711 98.945634) (xy 85.427502 98.940749) (xy 85.407102 98.906255) (xy 85.402453 98.898393) (xy 85.402449 98.898389) (xy 85.402446 98.898385) (xy 85.387175 98.883114) (xy 85.374537 98.868318) (xy 85.361839 98.85084) (xy 85.323921 98.819472) (xy 85.319598 98.815538) (xy 84.27049 97.76643) (xy 84.237005 97.705107) (xy 84.241989 97.635415) (xy 84.283861 97.579482) (xy 84.349325 97.555065) (xy 84.358171 97.554749) (xy 86.165368 97.554749) ) ) (filled_polygon (layer "F.Cu") (pts (xy 98.691593 41.110757) (xy 98.943239 41.127247) (xy 98.951279 41.128304) (xy 99.196625 41.177104) (xy 99.204464 41.179205) (xy 99.441333 41.259609) (xy 99.448834 41.262716) (xy 99.673181 41.37335) (xy 99.680207 41.377406) (xy 99.854674 41.493979) (xy 99.888199 41.51638) (xy 99.894634 41.521318) (xy 99.962233 41.5806) (xy 100.082705 41.686251) (xy 100.088445 41.691992) (xy 100.253379 41.880061) (xy 100.258321 41.886502) (xy 100.397286 42.094479) (xy 100.401345 42.10151) (xy 100.511982 42.325861) (xy 100.515089 42.333362) (xy 100.595492 42.57023) (xy 100.597594 42.578072) (xy 100.646392 42.823409) (xy 100.647452 42.831459) (xy 100.66394 43.083058) (xy 100.664073 43.087113) (xy 100.664073 113.564339) (xy 100.66394 113.568394) (xy 100.647449 113.82004) (xy 100.64639 113.82809) (xy 100.597592 114.073424) (xy 100.59549 114.081267) (xy 100.515087 114.318135) (xy 100.51198 114.325636) (xy 100.401345 114.549983) (xy 100.397286 114.557014) (xy 100.258317 114.764997) (xy 100.253375 114.771438) (xy 100.088445 114.959505) (xy 100.082704 114.965246) (xy 99.894634 115.130178) (xy 99.888193 115.13512) (xy 99.680216 115.274085) (xy 99.673185 115.278144) (xy 99.448834 115.38878) (xy 99.441333 115.391887) (xy 99.204464 115.472291) (xy 99.196622 115.474392) (xy 98.951288 115.523189) (xy 98.943239 115.524249) (xy 98.691572 115.540742) (xy 98.687517 115.540875) (xy 68.155298 115.540875) (xy 68.088259 115.52119) (xy 68.042504 115.468386) (xy 68.031298 115.416806) (xy 68.031314 115.38878) (xy 68.032016 114.129843) (xy 68.037621 104.07) (xy 72.943001 104.07) (xy 72.943001 104.119986) (xy 72.953494 104.222697) (xy 73.008641 104.389119) (xy 73.008643 104.389124) (xy 73.100684 104.538345) (xy 73.224654 104.662315) (xy 73.373875 104.754356) (xy 73.37388 104.754358) (xy 73.540302 104.809505) (xy 73.540309 104.809506) (xy 73.643019 104.819999) (xy 73.917999 104.819999) (xy 73.918 104.819998) (xy 73.918 104.07) (xy 74.418 104.07) (xy 74.418 104.819999) (xy 74.692972 104.819999) (xy 74.692986 104.819998) (xy 74.795697 104.809505) (xy 74.962119 104.754358) (xy 74.962124 104.754356) (xy 75.111345 104.662315) (xy 75.235315 104.538345) (xy 75.327356 104.389124) (xy 75.327358 104.389119) (xy 75.382505 104.222697) (xy 75.382506 104.22269) (xy 75.392999 104.119986) (xy 75.393 104.119973) (xy 75.393 104.07) (xy 74.418 104.07) (xy 73.918 104.07) (xy 72.943001 104.07) (xy 68.037621 104.07) (xy 68.041004 97.999537) (xy 72.8071 97.999537) (xy 72.807101 97.999553) (xy 72.817713 98.103426) (xy 72.873485 98.271738) (xy 72.96657 98.422652) (xy 73.091948 98.54803) (xy 73.242862 98.641115) (xy 73.411174 98.696887) (xy 73.515055 98.7075) (xy 74.108333 98.707499) (xy 74.175372 98.727183) (xy 74.221127 98.779987) (xy 74.232271 98.827594) (xy 74.232436 98.832837) (xy 74.232438 98.83285) (xy 74.238464 98.853595) (xy 74.242407 98.872636) (xy 74.245116 98.894071) (xy 74.245117 98.894075) (xy 74.245118 98.894082) (xy 74.261284 98.934915) (xy 74.263234 98.93984) (xy 74.265125 98.945366) (xy 74.278854 98.992616) (xy 74.28985 99.011209) (xy 74.29841 99.028683) (xy 74.306363 99.048772) (xy 74.31366 99.058815) (xy 74.329475 99.080582) (xy 74.335289 99.088583) (xy 74.33849 99.093455) (xy 74.363547 99.135825) (xy 74.363551 99.135829) (xy 74.378821 99.151099) (xy 74.391459 99.165895) (xy 74.404159 99.183375) (xy 74.404163 99.183379) (xy 74.442078 99.214745) (xy 74.446389 99.218667) (xy 74.660198 99.432475) (xy 74.861262 99.633539) (xy 74.871418 99.646215) (xy 74.871594 99.64607) (xy 74.876566 99.65208) (xy 74.929683 99.70196) (xy 74.951649 99.723926) (xy 74.956904 99.728002) (xy 74.957529 99.728487) (xy 74.961972 99.732282) (xy 74.997847 99.765971) (xy 74.997849 99.765972) (xy 75.016776 99.776377) (xy 75.033036 99.787057) (xy 75.050113 99.800304) (xy 75.095283 99.819851) (xy 75.100519 99.822415) (xy 75.143645 99.846124) (xy 75.163649 99.85126) (xy 75.164568 99.851496) (xy 75.182973 99.857797) (xy 75.202805 99.866379) (xy 75.251435 99.874081) (xy 75.257104 99.875255) (xy 75.304794 99.8875) (xy 75.3264 99.8875) (xy 75.345798 99.889026) (xy 75.367133 99.892406) (xy 75.412246 99.888141) (xy 75.416123 99.887775) (xy 75.421961 99.8875) (xy 76.878812 99.8875) (xy 77.519409 99.8875) (xy 77.535546 99.889281) (xy 77.535568 99.889054) (xy 77.543334 99.889788) (xy 77.543336 99.889787) (xy 77.543337 99.889788) (xy 77.616142 99.8875) (xy 77.647232 99.8875) (xy 77.654623 99.886566) (xy 77.660451 99.886107) (xy 77.709631 99.884562) (xy 77.730383 99.878532) (xy 77.749421 99.87459) (xy 77.770864 99.871882) (xy 77.816634 99.85376) (xy 77.822148 99.851873) (xy 77.848675 99.844165) (xy 77.8694 99.838145) (xy 77.887996 99.827146) (xy 77.905464 99.818589) (xy 77.925556 99.810635) (xy 77.965382 99.781698) (xy 77.970241 99.778506) (xy 78.012607 99.753453) (xy 78.02789 99.738168) (xy 78.042673 99.725542) (xy 78.060157 99.712841) (xy 78.091532 99.674913) (xy 78.095446 99.670612) (xy 78.509541 99.256516) (xy 78.522215 99.246364) (xy 78.522069 99.246188) (xy 78.528074 99.241219) (xy 78.52808 99.241216) (xy 78.559583 99.207668) (xy 78.619823 99.172273) (xy 78.649976 99.168551) (xy 79.180117 99.168551) (xy 79.180133 99.16855) (xy 79.218039 99.164474) (xy 79.24068 99.16204) (xy 79.288122 99.144344) (xy 79.35781 99.139361) (xy 79.374775 99.144341) (xy 79.422226 99.16204) (xy 79.439206 99.163865) (xy 79.482772 99.16855) (xy 79.482789 99.168551) (xy 80.130079 99.168551) (xy 80.130095 99.16855) (xy 80.168001 99.164474) (xy 80.190642 99.16204) (xy 80.238084 99.144344) (xy 80.307772 99.139361) (xy 80.324737 99.144341) (xy 80.372188 99.16204) (xy 80.389168 99.163865) (xy 80.432734 99.16855) (xy 80.432751 99.168551) (xy 81.080041 99.168551) (xy 81.080057 99.16855) (xy 81.107095 99.165642) (xy 81.140604 99.16204) (xy 81.277607 99.11094) (xy 81.394664 99.023312) (xy 81.482292 98.906255) (xy 81.533392 98.769252) (xy 81.537915 98.727183) (xy 81.539902 98.708705) (xy 81.539903 98.708688) (xy 81.539903 97.975542) (xy 81.559588 97.908503) (xy 81.612392 97.862748) (xy 81.68155 97.852804) (xy 81.745106 97.881829) (xy 81.751584 97.887861) (xy 83.633181 99.769458) (xy 83.666666 99.830781) (xy 83.6695 99.857139) (xy 83.6695 100.139221) (xy 83.649815 100.20626) (xy 83.597011 100.252015) (xy 83.556308 100.262749) (xy 83.353917 100.280456) (xy 83.35391 100.280457) (xy 83.132761 100.339714) (xy 83.13275 100.339718) (xy 82.925254 100.436475) (xy 82.925252 100.436476) (xy 82.890601 100.460739) (xy 82.744737 100.562875) (xy 82.737699 100.567803) (xy 82.576579 100.728923) (xy 82.515256 100.762407) (xy 82.445564 100.757423) (xy 82.389631 100.715551) (xy 82.372717 100.684576) (xy 82.344709 100.609486) (xy 82.332889 100.577796) (xy 82.245261 100.460739) (xy 82.128204 100.373111) (xy 81.991203 100.322011) (xy 81.930654 100.3155) (xy 81.930638 100.3155) (xy 80.233362 100.3155) (xy 80.233345 100.3155) (xy 80.172797 100.322011) (xy 80.172795 100.322011) (xy 80.035795 100.373111) (xy 79.918739 100.460739) (xy 79.831111 100.577795) (xy 79.83111 100.577796) (xy 79.800671 100.659403) (xy 79.798771 100.663941) (xy 79.785023 100.693419) (xy 79.785022 100.693423) (xy 79.774754 100.727386) (xy 79.73651 100.78586) (xy 79.672724 100.814375) (xy 79.65606 100.8155) (xy 76.492294 100.8155) (xy 76.474324 100.814191) (xy 76.450206 100.810658) (xy 76.404651 100.814645) (xy 76.397573 100.815264) (xy 76.392172 100.8155) (xy 76.383819 100.8155) (xy 76.350903 100.819347) (xy 76.273574 100.826112) (xy 76.266506 100.827572) (xy 76.266496 100.827528) (xy 76.258906 100.82921) (xy 76.258917 100.829254) (xy 76.251893 100.830919) (xy 76.251887 100.83092) (xy 76.251887 100.830921) (xy 76.242026 100.83451) (xy 76.178933 100.857473) (xy 76.105257 100.881887) (xy 76.09872 100.884936) (xy 76.0987 100.884894) (xy 76.091696 100.888285) (xy 76.091717 100.888326) (xy 76.085269 100.891564) (xy 76.020394 100.934233) (xy 75.954352 100.974967) (xy 75.948683 100.97945) (xy 75.948653 100.979413) (xy 75.942627 100.984322) (xy 75.942657 100.984357) (xy 75.937132 100.988993) (xy 75.937126 100.988998) (xy 75.937126 100.988999) (xy 75.883836 101.045482) (xy 75.804137 101.125181) (xy 75.742814 101.158666) (xy 75.716456 101.1615) (xy 75.258544 101.1615) (xy 75.191505 101.141815) (xy 75.170863 101.125181) (xy 75.116653 101.070971) (xy 75.116652 101.07097) (xy 75.016211 101.009017) (xy 74.96574 100.977886) (xy 74.965735 100.977884) (xy 74.797427 100.922113) (xy 74.693546 100.9115) (xy 73.642462 100.9115) (xy 73.642446 100.911501) (xy 73.538572 100.922113) (xy 73.370264 100.977884) (xy 73.370259 100.977886) (xy 73.219346 101.070971) (xy 73.093971 101.196346) (xy 73.000886 101.347259) (xy 73.000884 101.347264) (xy 72.945113 101.515572) (xy 72.9345 101.619447) (xy 72.9345 102.220537) (xy 72.934501 102.220553) (xy 72.945113 102.324427) (xy 73.000884 102.492735) (xy 73.000886 102.49274) (xy 73.015188 102.515927) (xy 73.09397 102.643652) (xy 73.219348 102.76903) (xy 73.220031 102.769451) (xy 73.220401 102.769863) (xy 73.225015 102.773511) (xy 73.224391 102.774298) (xy 73.266759 102.821397) (xy 73.277984 102.890359) (xy 73.250144 102.954442) (xy 73.229582 102.972264) (xy 73.230323 102.973202) (xy 73.224655 102.977683) (xy 73.100684 103.101654) (xy 73.008643 103.250875) (xy 73.008641 103.25088) (xy 72.953494 103.417302) (xy 72.953493 103.417309) (xy 72.943 103.520013) (xy 72.943 103.57) (xy 75.392999 103.57) (xy 75.392999 103.520028) (xy 75.392998 103.520013) (xy 75.382505 103.417302) (xy 75.327358 103.25088) (xy 75.327356 103.250875) (xy 75.235315 103.101654) (xy 75.111344 102.977683) (xy 75.105677 102.973202) (xy 75.107404 102.971016) (xy 75.06924 102.928589) (xy 75.058015 102.859627) (xy 75.085855 102.795543) (xy 75.111106 102.773664) (xy 75.110985 102.773511) (xy 75.114401 102.770809) (xy 75.115969 102.769451) (xy 75.116652 102.76903) (xy 75.170863 102.714819) (xy 75.232186 102.681334) (xy 75.258544 102.6785) (xy 76.017706 102.6785) (xy 76.035676 102.679809) (xy 76.038174 102.680174) (xy 76.059789 102.683341) (xy 76.112426 102.678735) (xy 76.117828 102.6785) (xy 76.126175 102.6785) (xy 76.12618 102.6785) (xy 76.149835 102.675734) (xy 76.159096 102.674652) (xy 76.236419 102.667888) (xy 76.236422 102.667887) (xy 76.236426 102.667887) (xy 76.236429 102.667885) (xy 76.243493 102.666427) (xy 76.243502 102.666474) (xy 76.251097 102.66479) (xy 76.251087 102.664744) (xy 76.258107 102.663079) (xy 76.258113 102.663079) (xy 76.331065 102.636526) (xy 76.404738 102.612114) (xy 76.404746 102.612108) (xy 76.411284 102.609061) (xy 76.411305 102.609106) (xy 76.418302 102.605719) (xy 76.41828 102.605675) (xy 76.424729 102.602436) (xy 76.424728 102.602436) (xy 76.424732 102.602435) (xy 76.489605 102.559766) (xy 76.555651 102.51903) (xy 76.555655 102.519025) (xy 76.561319 102.514548) (xy 76.56135 102.514587) (xy 76.567374 102.50968) (xy 76.567342 102.509642) (xy 76.572869 102.505003) (xy 76.572874 102.505001) (xy 76.573554 102.504281) (xy 76.626163 102.448517) (xy 76.705863 102.368818) (xy 76.767187 102.335334) (xy 76.793544 102.3325) (xy 76.926881 102.3325) (xy 76.99392 102.352185) (xy 77.039675 102.404989) (xy 77.049619 102.474147) (xy 77.020594 102.537703) (xy 76.986308 102.565332) (xy 76.927961 102.597191) (xy 76.927953 102.597196) (xy 76.785437 102.703882) (xy 76.785436 102.703883) (xy 77.392389 103.310835) (xy 77.233931 103.430499) (xy 77.090348 103.588001) (xy 77.041439 103.666992) (xy 76.431883 103.057436) (xy 76.431882 103.057437) (xy 76.325196 103.199953) (xy 76.325191 103.199961) (xy 76.188091 103.451041) (xy 76.088109 103.719104) (xy 76.0273 103.998637) (xy 76.006891 104.283998) (xy 76.006891 104.284001) (xy 76.0273 104.569362) (xy 76.088109 104.848895) (xy 76.188091 105.116958) (xy 76.325191 105.368038) (xy 76.325196 105.368046) (xy 76.431882 105.510561) (xy 76.431883 105.510562) (xy 77.041438 104.901006) (xy 77.090348 104.979999) (xy 77.233931 105.137501) (xy 77.392388 105.257163) (xy 76.785436 105.864115) (xy 76.92796 105.970807) (xy 76.927961 105.970808) (xy 77.179042 106.107908) (xy 77.179041 106.107908) (xy 77.447104 106.20789) (xy 77.726637 106.268699) (xy 78.011999 106.289109) (xy 78.012001 106.289109) (xy 78.297362 106.268699) (xy 78.576895 106.20789) (xy 78.844958 106.107908) (xy 79.096047 105.970803) (xy 79.238561 105.864116) (xy 79.238562 105.864115) (xy 78.631611 105.257163) (xy 78.790069 105.137501) (xy 78.933652 104.979999) (xy 78.98256 104.901007) (xy 79.592115 105.510562) (xy 79.592116 105.510561) (xy 79.698803 105.368047) (xy 79.835908 105.116958) (xy 79.93589 104.848895) (xy 79.996699 104.569362) (xy 80.017109 104.284001) (xy 80.017109 104.283998) (xy 79.996699 103.998637) (xy 79.93589 103.719104) (xy 79.835908 103.451041) (xy 79.698808 103.199961) (xy 79.698807 103.19996) (xy 79.592115 103.057436) (xy 78.98256 103.666991) (xy 78.933652 103.588001) (xy 78.790069 103.430499) (xy 78.63161 103.310835) (xy 79.238562 102.703883) (xy 79.238561 102.703882) (xy 79.096046 102.597196) (xy 79.096038 102.597191) (xy 79.037692 102.565332) (xy 78.988287 102.515927) (xy 78.973435 102.447654) (xy 78.997852 102.38219) (xy 79.053785 102.340318) (xy 79.097119 102.3325) (xy 79.656061 102.3325) (xy 79.7231 102.352185) (xy 79.768855 102.404989) (xy 79.774755 102.420615) (xy 79.785021 102.454572) (xy 79.785027 102.454588) (xy 79.805891 102.502821) (xy 79.807077 102.505768) (xy 79.821951 102.545646) (xy 79.831111 102.570204) (xy 79.918739 102.687261) (xy 80.035796 102.774889) (xy 80.103831 102.800265) (xy 80.172795 102.825988) (xy 80.172798 102.825989) (xy 80.212755 102.830285) (xy 80.277306 102.857023) (xy 80.317155 102.914415) (xy 80.3235 102.953574) (xy 80.3235 105.536289) (xy 80.322191 105.554259) (xy 80.318658 105.578374) (xy 80.323264 105.631003) (xy 80.3235 105.63641) (xy 80.3235 105.644761) (xy 80.327347 105.677679) (xy 80.334112 105.75501) (xy 80.335572 105.762077) (xy 80.335526 105.762086) (xy 80.337209 105.769677) (xy 80.337254 105.769667) (xy 80.338919 105.776693) (xy 80.365473 105.849648) (xy 80.389886 105.92332) (xy 80.39294 105.929869) (xy 80.392896 105.929889) (xy 80.396284 105.936887) (xy 80.396327 105.936866) (xy 80.399568 105.94332) (xy 80.442232 106.008187) (xy 80.447635 106.016946) (xy 80.48297 106.074234) (xy 80.482972 106.074236) (xy 80.487451 106.079901) (xy 80.487413 106.07993) (xy 80.49232 106.085955) (xy 80.492357 106.085925) (xy 80.497002 106.091461) (xy 80.553482 106.144746) (xy 82.23531 107.826574) (xy 82.247091 107.840206) (xy 82.261645 107.859755) (xy 82.302126 107.893722) (xy 82.3061 107.897364) (xy 82.312014 107.903278) (xy 82.338009 107.923832) (xy 82.397474 107.973729) (xy 82.397475 107.973729) (xy 82.397477 107.973731) (xy 82.40351 107.977699) (xy 82.403484 107.977738) (xy 82.410041 107.981915) (xy 82.410067 107.981875) (xy 82.416205 107.985661) (xy 82.416209 107.985664) (xy 82.486566 108.018472) (xy 82.555926 108.053306) (xy 82.555932 108.053307) (xy 82.56272 108.055779) (xy 82.562703 108.055825) (xy 82.570038 108.058374) (xy 82.570054 108.058329) (xy 82.576903 108.060599) (xy 82.576908 108.0606) (xy 82.652964 108.076304) (xy 82.712223 108.090349) (xy 82.728453 108.094196) (xy 82.728454 108.094196) (xy 82.728458 108.094197) (xy 82.728462 108.094197) (xy 82.735631 108.095035) (xy 82.735625 108.095083) (xy 82.743356 108.095874) (xy 82.743361 108.095827) (xy 82.750551 108.096456) (xy 82.750555 108.096455) (xy 82.750556 108.096456) (xy 82.828194 108.094197) (xy 97.933609 108.094197) (xy 97.951579 108.095506) (xy 97.954077 108.095871) (xy 97.975692 108.099038) (xy 98.028329 108.094432) (xy 98.033731 108.094197) (xy 98.042078 108.094197) (xy 98.042083 108.094197) (xy 98.065738 108.091431) (xy 98.074999 108.090349) (xy 98.152322 108.083585) (xy 98.152325 108.083584) (xy 98.152329 108.083584) (xy 98.152332 108.083582) (xy 98.159396 108.082124) (xy 98.159405 108.082171) (xy 98.167 108.080487) (xy 98.16699 108.080441) (xy 98.17401 108.078776) (xy 98.174016 108.078776) (xy 98.246968 108.052223) (xy 98.320641 108.027811) (xy 98.320649 108.027805) (xy 98.327187 108.024758) (xy 98.327208 108.024803) (xy 98.334205 108.021416) (xy 98.334183 108.021372) (xy 98.340632 108.018133) (xy 98.340631 108.018133) (xy 98.340635 108.018132) (xy 98.405508 107.975463) (xy 98.471554 107.934727) (xy 98.471558 107.934722) (xy 98.477222 107.930245) (xy 98.477253 107.930284) (xy 98.483277 107.925377) (xy 98.483245 107.925339) (xy 98.488767 107.920704) (xy 98.488777 107.920698) (xy 98.514233 107.893716) (xy 98.542066 107.864215) (xy 99.399498 107.006782) (xy 99.70328 106.702999) (xy 99.716906 106.691223) (xy 99.736458 106.676669) (xy 99.770415 106.6362) (xy 99.774075 106.632205) (xy 99.77998 106.626301) (xy 99.800536 106.600303) (xy 99.850433 106.540839) (xy 99.854403 106.534803) (xy 99.854443 106.534829) (xy 99.858612 106.528286) (xy 99.858571 106.528261) (xy 99.862364 106.522111) (xy 99.862365 106.522108) (xy 99.862367 106.522106) (xy 99.895173 106.451752) (xy 99.930009 106.382388) (xy 99.93001 106.38238) (xy 99.932479 106.3756) (xy 99.932526 106.375617) (xy 99.935078 106.368275) (xy 99.935031 106.36826) (xy 99.9373 106.361411) (xy 99.9373 106.361409) (xy 99.937302 106.361406) (xy 99.952999 106.285381) (xy 99.9709 106.209856) (xy 99.9709 106.209854) (xy 99.970901 106.20985) (xy 99.971739 106.202683) (xy 99.971786 106.202688) (xy 99.972576 106.194957) (xy 99.972529 106.194953) (xy 99.973158 106.187762) (xy 99.971906 106.144746) (xy 99.9709 106.110154) (xy 99.9709 45.784293) (xy 99.972209 45.766323) (xy 99.972324 45.765532) (xy 99.975741 45.742211) (xy 99.971135 45.689573) (xy 99.9709 45.684172) (xy 99.9709 45.675824) (xy 99.970899 45.675813) (xy 99.969655 45.665175) (xy 99.967052 45.642904) (xy 99.960287 45.565574) (xy 99.960285 45.56557) (xy 99.958827 45.558503) (xy 99.958873 45.558493) (xy 99.95719 45.550902) (xy 99.957144 45.550914) (xy 99.95548 45.543895) (xy 99.955479 45.543887) (xy 99.928926 45.470934) (xy 99.904514 45.397262) (xy 99.904513 45.39726) (xy 99.901461 45.390715) (xy 99.901505 45.390694) (xy 99.898117 45.383695) (xy 99.898074 45.383717) (xy 99.894836 45.377269) (xy 99.852166 45.312394) (xy 99.81143 45.246349) (xy 99.806953 45.240687) (xy 99.80699 45.240656) (xy 99.802081 45.234629) (xy 99.802045 45.23466) (xy 99.797405 45.229131) (xy 99.797403 45.229129) (xy 99.797401 45.229126) (xy 99.74846 45.182952) (xy 99.740917 45.175835) (xy 98.778204 44.213123) (xy 98.766422 44.19949) (xy 98.751872 44.179946) (xy 98.751871 44.179945) (xy 98.751869 44.179942) (xy 98.745715 44.174778) (xy 98.711387 44.145972) (xy 98.707398 44.142317) (xy 98.701502 44.136421) (xy 98.701501 44.13642) (xy 98.675503 44.115863) (xy 98.61604 44.065968) (xy 98.616035 44.065965) (xy 98.610005 44.061999) (xy 98.61003 44.061959) (xy 98.603469 44.057779) (xy 98.603445 44.05782) (xy 98.597304 44.054031) (xy 98.52694 44.02122) (xy 98.457585 43.986389) (xy 98.450801 43.98392) (xy 98.450816 43.983876) (xy 98.443471 43.981322) (xy 98.443457 43.981367) (xy 98.436605 43.979096) (xy 98.398577 43.971244) (xy 98.360549 43.963392) (xy 98.285056 43.9455) (xy 98.285054 43.9455) (xy 98.285046 43.945498) (xy 98.277882 43.944661) (xy 98.277887 43.944612) (xy 98.270157 43.943822) (xy 98.270153 43.94387) (xy 98.262962 43.94324) (xy 98.18532 43.9455) (xy 97.533395 43.9455) (xy 97.466356 43.925815) (xy 97.420601 43.873011) (xy 97.41319 43.851943) (xy 97.400427 43.801546) (xy 97.38285 43.732143) (xy 97.380411 43.723649) (xy 97.35628 43.65723) (xy 97.355705 43.656314) (xy 97.344574 43.633765) (xy 97.343056 43.629696) (xy 97.334889 43.607796) (xy 97.247261 43.490739) (xy 97.130204 43.403111) (xy 96.993203 43.352011) (xy 96.932654 43.3455) (xy 96.932638 43.3455) (xy 96.895584 43.3455) (xy 96.859475 43.344456) (xy 96.853397 43.344879) (xy 96.853379 43.34462) (xy 96.842897 43.3455) (xy 93.335345 43.3455) (xy 93.274797 43.352011) (xy 93.274795 43.352011) (xy 93.137795 43.403111) (xy 93.020739 43.490739) (xy 92.933111 43.607795) (xy 92.882011 43.744795) (xy 92.882011 43.744797) (xy 92.8755 43.805345) (xy 92.8755 44.64525) (xy 92.875288 44.650373) (xy 92.871307 44.698415) (xy 92.870844 44.704) (xy 92.874317 44.745916) (xy 92.875288 44.757625) (xy 92.8755 44.762747) (xy 92.8755 45.602654) (xy 92.882011 45.663202) (xy 92.882011 45.663204) (xy 92.920474 45.766323) (xy 92.933111 45.800204) (xy 93.007097 45.899038) (xy 93.007585 45.899689) (xy 93.032002 45.965154) (xy 93.01715 46.033427) (xy 93.007586 46.048308) (xy 92.999445 46.059185) (xy 92.933111 46.147795) (xy 92.882011 46.284795) (xy 92.882011 46.284797) (xy 92.8755 46.345345) (xy 92.8755 47.18525) (xy 92.875288 47.190373) (xy 92.870844 47.243995) (xy 92.870844 47.244003) (xy 92.871665 47.25391) (xy 92.875163 47.296124) (xy 92.875288 47.297625) (xy 92.8755 47.302747) (xy 92.8755 48.142654) (xy 92.882011 48.203202) (xy 92.882011 48.203204) (xy 92.926195 48.321662) (xy 92.933111 48.340204) (xy 93.020739 48.457261) (xy 93.137796 48.544889) (xy 93.274799 48.595989) (xy 93.30205 48.598918) (xy 93.335345 48.602499) (xy 93.335362 48.6025) (xy 96.932638 48.6025) (xy 96.932654 48.602499) (xy 96.959692 48.599591) (xy 96.993201 48.595989) (xy 97.130204 48.544889) (xy 97.247261 48.457261) (xy 97.334889 48.340204) (xy 97.385989 48.203201) (xy 97.391479 48.152138) (xy 97.392499 48.142654) (xy 97.3925 48.142637) (xy 97.3925 46.345362) (xy 97.392499 46.345345) (xy 97.389157 46.31427) (xy 97.385989 46.284799) (xy 97.382458 46.275333) (xy 97.348007 46.182966) (xy 97.334889 46.147796) (xy 97.260413 46.048308) (xy 97.235997 45.982846) (xy 97.250849 45.914573) (xy 97.260405 45.8997) (xy 97.289933 45.860255) (xy 97.292638 45.856895) (xy 97.293337 45.856084) (xy 97.293362 45.85606) (xy 97.298715 45.848881) (xy 97.299899 45.8471) (xy 97.301853 45.844333) (xy 97.334889 45.800204) (xy 97.368873 45.709088) (xy 97.378092 45.684373) (xy 97.382133 45.674565) (xy 97.38484 45.667996) (xy 97.41319 45.556056) (xy 97.448732 45.495901) (xy 97.511153 45.464511) (xy 97.533395 45.4625) (xy 97.830857 45.4625) (xy 97.897896 45.482185) (xy 97.918538 45.498819) (xy 98.417581 45.997862) (xy 98.451066 46.059185) (xy 98.4539 46.085543) (xy 98.4539 105.755657) (xy 98.434215 105.822696) (xy 98.417581 105.843338) (xy 97.720041 106.540878) (xy 97.658718 106.574363) (xy 97.63236 106.577197) (xy 83.182657 106.577197) (xy 83.115618 106.557512) (xy 83.094976 106.540878) (xy 81.876819 105.322721) (xy 81.843334 105.261398) (xy 81.8405 105.23504) (xy 81.8405 102.953574) (xy 81.860185 102.886535) (xy 81.912989 102.84078) (xy 81.951245 102.830285) (xy 81.991201 102.825989) (xy 81.991204 102.825988) (xy 82.005768 102.820555) (xy 82.128204 102.774889) (xy 82.245261 102.687261) (xy 82.332889 102.570204) (xy 82.351976 102.51903) (xy 82.372717 102.463424) (xy 82.414588 102.40749) (xy 82.480053 102.383074) (xy 82.548326 102.397926) (xy 82.576579 102.419077) (xy 82.7377 102.580198) (xy 82.925251 102.711523) (xy 83.02098 102.756162) (xy 83.13275 102.808281) (xy 83.132752 102.808281) (xy 83.132757 102.808284) (xy 83.353913 102.867543) (xy 83.516832 102.881796) (xy 83.581998 102.887498) (xy 83.582 102.887498) (xy 83.582002 102.887498) (xy 83.639021 102.882509) (xy 83.810087 102.867543) (xy 84.031243 102.808284) (xy 84.238749 102.711523) (xy 84.4263 102.580198) (xy 84.494319 102.512179) (xy 84.555642 102.478694) (xy 84.625334 102.483678) (xy 84.669681 102.512179) (xy 84.7377 102.580198) (xy 84.925251 102.711523) (xy 85.02098 102.756162) (xy 85.13275 102.808281) (xy 85.132752 102.808281) (xy 85.132757 102.808284) (xy 85.353913 102.867543) (xy 85.516832 102.881796) (xy 85.581998 102.887498) (xy 85.582 102.887498) (xy 85.582002 102.887498) (xy 85.639021 102.882509) (xy 85.810087 102.867543) (xy 86.031243 102.808284) (xy 86.238749 102.711523) (xy 86.4263 102.580198) (xy 86.588198 102.4183) (xy 86.719523 102.230749) (xy 86.724307 102.220487) (xy 86.770476 102.168051) (xy 86.837669 102.148897) (xy 86.904551 102.169111) (xy 86.949072 102.22049) (xy 86.951866 102.226483) (xy 87.002973 102.299471) (xy 87.002974 102.299472) (xy 87.619064 101.683381) (xy 87.645481 101.773351) (xy 87.719327 101.888258) (xy 87.822555 101.977705) (xy 87.946801 102.034446) (xy 87.971548 102.038004) (xy 87.356526 102.653025) (xy 87.356526 102.653026) (xy 87.429512 102.704131) (xy 87.429516 102.704133) (xy 87.635673 102.800265) (xy 87.635682 102.800269) (xy 87.855389 102.859139) (xy 87.8554 102.859141) (xy 88.081998 102.878966) (xy 88.082002 102.878966) (xy 88.308599 102.859141) (xy 88.30861 102.859139) (xy 88.528317 102.800269) (xy 88.528331 102.800264) (xy 88.734478 102.704136) (xy 88.807472 102.653025) (xy 88.192451 102.038004) (xy 88.217199 102.034446) (xy 88.341445 101.977705) (xy 88.444673 101.888258) (xy 88.518519 101.773351) (xy 88.544935 101.683382) (xy 89.161025 102.299472) (xy 89.212136 102.226478) (xy 89.308264 102.020331) (xy 89.308269 102.020317) (xy 89.367139 101.80061) (xy 89.367141 101.800599) (xy 89.386966 101.574002) (xy 89.386966 101.573997) (xy 89.367141 101.3474) (xy 89.367139 101.347389) (xy 89.308269 101.127682) (xy 89.308265 101.127673) (xy 89.212133 100.921516) (xy 89.212129 100.92151) (xy 89.157704 100.843783) (xy 89.135376 100.777577) (xy 89.152386 100.70981) (xy 89.203333 100.661996) (xy 89.272043 100.649318) (xy 89.3367 100.675799) (xy 89.346959 100.684978) (xy 89.482858 100.820877) (xy 89.49464 100.83451) (xy 89.505074 100.848526) (xy 89.509193 100.854058) (xy 89.549674 100.888025) (xy 89.553648 100.891667) (xy 89.559562 100.897581) (xy 89.585557 100.918135) (xy 89.645022 100.968032) (xy 89.645023 100.968032) (xy 89.645025 100.968034) (xy 89.651058 100.972002) (xy 89.651032 100.972041) (xy 89.657589 100.976218) (xy 89.657615 100.976178) (xy 89.663753 100.979964) (xy 89.663757 100.979967) (xy 89.734114 101.012775) (xy 89.803474 101.047609) (xy 89.80348 101.04761) (xy 89.810268 101.050082) (xy 89.810251 101.050128) (xy 89.817586 101.052677) (xy 89.817602 101.052632) (xy 89.824451 101.054902) (xy 89.824456 101.054903) (xy 89.900512 101.070607) (xy 89.961265 101.085006) (xy 89.976001 101.088499) (xy 89.976002 101.088499) (xy 89.976006 101.0885) (xy 89.97601 101.0885) (xy 89.983179 101.089338) (xy 89.983173 101.089386) (xy 89.990904 101.090177) (xy 89.990909 101.09013) (xy 89.998099 101.090759) (xy 89.998103 101.090758) (xy 89.998104 101.090759) (xy 90.075742 101.0885) (xy 92.547244 101.0885) (xy 92.614283 101.108185) (xy 92.634925 101.124819) (xy 92.858513 101.348407) (xy 92.891998 101.40973) (xy 92.894832 101.436088) (xy 92.894832 102.935889) (xy 92.875147 103.002928) (xy 92.822343 103.048683) (xy 92.761986 103.059573) (xy 92.732115 103.057436) (xy 92.12256 103.666991) (xy 92.073652 103.588001) (xy 91.930069 103.430499) (xy 91.77161 103.310835) (xy 92.378562 102.703883) (xy 92.378561 102.703882) (xy 92.236046 102.597196) (xy 92.236038 102.597191) (xy 91.984957 102.460091) (xy 91.984958 102.460091) (xy 91.716895 102.360109) (xy 91.437362 102.2993) (xy 91.152001 102.278891) (xy 91.151999 102.278891) (xy 90.866637 102.2993) (xy 90.587104 102.360109) (xy 90.319041 102.460091) (xy 90.067961 102.597191) (xy 90.067953 102.597196) (xy 89.925437 102.703882) (xy 89.925436 102.703883) (xy 90.532389 103.310835) (xy 90.373931 103.430499) (xy 90.230348 103.588001) (xy 90.181439 103.666992) (xy 89.571883 103.057436) (xy 89.571882 103.057437) (xy 89.465196 103.199953) (xy 89.465191 103.199961) (xy 89.328091 103.451041) (xy 89.228109 103.719104) (xy 89.1673 103.998637) (xy 89.146891 104.283998) (xy 89.146891 104.284001) (xy 89.1673 104.569362) (xy 89.228109 104.848895) (xy 89.328091 105.116958) (xy 89.465191 105.368038) (xy 89.465196 105.368046) (xy 89.571882 105.510561) (xy 89.571883 105.510562) (xy 90.181438 104.901006) (xy 90.230348 104.979999) (xy 90.373931 105.137501) (xy 90.532388 105.257163) (xy 89.925436 105.864115) (xy 90.06796 105.970807) (xy 90.067961 105.970808) (xy 90.319042 106.107908) (xy 90.319041 106.107908) (xy 90.587104 106.20789) (xy 90.866637 106.268699) (xy 91.151999 106.289109) (xy 91.152001 106.289109) (xy 91.437362 106.268699) (xy 91.716895 106.20789) (xy 91.984958 106.107908) (xy 92.236047 105.970803) (xy 92.378561 105.864116) (xy 92.378562 105.864115) (xy 91.771611 105.257163) (xy 91.930069 105.137501) (xy 92.073652 104.979999) (xy 92.12256 104.901007) (xy 92.732115 105.510562) (xy 92.732116 105.510561) (xy 92.838803 105.368047) (xy 92.975908 105.116958) (xy 93.07589 104.848895) (xy 93.136699 104.569362) (xy 93.157109 104.284001) (xy 93.157109 104.284) (xy 93.149843 104.182418) (xy 93.164694 104.114145) (xy 93.214099 104.064739) (xy 93.282372 104.049887) (xy 93.347837 104.074303) (xy 93.361208 104.08589) (xy 94.171961 104.896642) (xy 94.187775 104.916024) (xy 94.193882 104.925279) (xy 94.193886 104.925283) (xy 94.19389 104.925289) (xy 94.262391 105.002435) (xy 94.275766 105.020587) (xy 94.276822 105.022333) (xy 94.287245 105.044105) (xy 94.297241 105.071576) (xy 94.298444 105.075233) (xy 94.331788 105.188249) (xy 94.336823 105.203634) (xy 94.376527 105.31289) (xy 94.377987 105.317632) (xy 94.378243 105.31838) (xy 94.379074 105.320274) (xy 94.380564 105.323995) (xy 94.397338 105.370149) (xy 94.399503 105.375729) (xy 94.399507 105.375738) (xy 94.399506 105.375737) (xy 94.427285 105.435619) (xy 94.430576 105.441134) (xy 94.430072 105.441434) (xy 94.438765 105.456356) (xy 94.468678 105.524551) (xy 94.591813 105.713022) (xy 94.591821 105.713033) (xy 94.730904 105.864115) (xy 94.744297 105.878663) (xy 94.921961 106.016946) (xy 94.921962 106.016946) (xy 94.921964 106.016948) (xy 95.02782 106.074234) (xy 95.119963 106.124099) (xy 95.332902 106.197201) (xy 95.554968 106.234257) (xy 95.780106 106.234257) (xy 96.002172 106.197201) (xy 96.215111 106.124099) (xy 96.413113 106.016946) (xy 96.590777 105.878663) (xy 96.743259 105.713025) (xy 96.866397 105.524548) (xy 96.956833 105.318373) (xy 97.012101 105.100125) (xy 97.013494 105.083318) (xy 97.030693 104.875762) (xy 97.030693 104.875751) (xy 97.012102 104.651397) (xy 97.0121 104.651385) (xy 96.97562 104.50733) (xy 96.956833 104.433141) (xy 96.866397 104.226966) (xy 96.863603 104.22269) (xy 96.775634 104.088043) (xy 96.743259 104.038489) (xy 96.743256 104.038486) (xy 96.743252 104.03848) (xy 96.59078 103.872854) (xy 96.590775 103.872849) (xy 96.413114 103.734569) (xy 96.413109 103.734565) (xy 96.215117 103.627418) (xy 96.215114 103.627416) (xy 96.215111 103.627415) (xy 96.215108 103.627414) (xy 96.215106 103.627413) (xy 96.002174 103.554313) (xy 95.780106 103.517257) (xy 95.554968 103.517257) (xy 95.332899 103.554313) (xy 95.139673 103.620648) (xy 95.069874 103.623798) (xy 95.011729 103.591048) (xy 94.448151 103.02747) (xy 94.414666 102.966147) (xy 94.411832 102.939789) (xy 94.411832 101.215748) (xy 94.431517 101.148709) (xy 94.484321 101.102954) (xy 94.553479 101.09301) (xy 94.579158 101.099564) (xy 94.665415 101.131737) (xy 94.70622 101.146957) (xy 94.708336 101.147746) (xy 94.735587 101.150675) (xy 94.768882 101.154256) (xy 94.768899 101.154257) (xy 96.566175 101.154257) (xy 96.566191 101.154256) (xy 96.593229 101.151348) (xy 96.626738 101.147746) (xy 96.628854 101.146957) (xy 96.669659 101.131737) (xy 96.763741 101.096646) (xy 96.880798 101.009018) (xy 96.968426 100.891961) (xy 97.019526 100.754958) (xy 97.023832 100.714908) (xy 97.026036 100.694411) (xy 97.026037 100.694394) (xy 97.026037 98.897119) (xy 97.026036 98.897102) (xy 97.022365 98.862962) (xy 97.019526 98.836556) (xy 97.018143 98.832849) (xy 96.984305 98.742126) (xy 96.968426 98.699553) (xy 96.880798 98.582496) (xy 96.763741 98.494868) (xy 96.62674 98.443768) (xy 96.566191 98.437257) (xy 96.566175 98.437257) (xy 94.768899 98.437257) (xy 94.768882 98.437257) (xy 94.708334 98.443768) (xy 94.708332 98.443768) (xy 94.571332 98.494868) (xy 94.454276 98.582496) (xy 94.366649 98.69955) (xy 94.366648 98.699553) (xy 94.31555 98.836552) (xy 94.315548 98.836557) (xy 94.315547 98.836562) (xy 94.309835 98.889689) (xy 94.30834 98.898096) (xy 94.286746 98.98455) (xy 94.251402 99.044821) (xy 94.189084 99.076415) (xy 94.166442 99.0785) (xy 94.127498 99.0785) (xy 94.060459 99.058815) (xy 94.039817 99.042181) (xy 93.816464 98.818828) (xy 93.804682 98.805195) (xy 93.790132 98.785651) (xy 93.790131 98.78565) (xy 93.790129 98.785647) (xy 93.783384 98.779987) (xy 93.749647 98.751677) (xy 93.745658 98.748022) (xy 93.739762 98.742126) (xy 93.739761 98.742125) (xy 93.713763 98.721568) (xy 93.6543 98.671673) (xy 93.654295 98.67167) (xy 93.648265 98.667704) (xy 93.64829 98.667664) (xy 93.641729 98.663484) (xy 93.641705 98.663525) (xy 93.635564 98.659736) (xy 93.5652 98.626925) (xy 93.495845 98.592094) (xy 93.489061 98.589625) (xy 93.489076 98.589581) (xy 93.481731 98.587027) (xy 93.481717 98.587072) (xy 93.474865 98.584801) (xy 93.436837 98.576949) (xy 93.398809 98.569097) (xy 93.323316 98.551205) (xy 93.323314 98.551205) (xy 93.323306 98.551203) (xy 93.316142 98.550366) (xy 93.316147 98.550317) (xy 93.308417 98.549527) (xy 93.308413 98.549575) (xy 93.301222 98.548945) (xy 93.22358 98.551205) (xy 91.00292 98.551205) (xy 90.935881 98.53152) (xy 90.915239 98.514886) (xy 88.678819 96.278466) (xy 88.645334 96.217143) (xy 88.6425 96.190785) (xy 88.6425 96.018624) (xy 88.662185 95.951585) (xy 88.714989 95.90583) (xy 88.755299 95.895131) (xy 88.801937 95.890904) (xy 88.801946 95.890902) (xy 88.801951 95.890902) (xy 88.801941 95.890904) (xy 88.804747 95.890439) (xy 88.805309 95.890347) (xy 88.805309 95.890346) (xy 88.808488 95.889821) (xy 88.811976 95.889346) (xy 88.815607 95.888955) (xy 88.843201 95.885989) (xy 88.980204 95.834889) (xy 89.097261 95.747261) (xy 89.184889 95.630204) (xy 89.235989 95.493201) (xy 89.240185 95.454175) (xy 89.242499 95.432654) (xy 89.2425 95.432637) (xy 89.2425 95.3575) (xy 89.242534 95.356328) (xy 89.242533 95.356325) (xy 89.242559 95.355433) (xy 89.2425 95.353693) (xy 89.2425 92.964003) (xy 92.870844 92.964003) (xy 92.875288 93.017625) (xy 92.8755 93.022747) (xy 92.8755 93.862654) (xy 92.882011 93.923202) (xy 92.882011 93.923204) (xy 92.926682 94.042967) (xy 92.933111 94.060204) (xy 93.020739 94.177261) (xy 93.137796 94.264889) (xy 93.274799 94.315989) (xy 93.30205 94.318918) (xy 93.335345 94.322499) (xy 93.335362 94.3225) (xy 96.932638 94.3225) (xy 96.932654 94.322499) (xy 96.959692 94.319591) (xy 96.993201 94.315989) (xy 97.130204 94.264889) (xy 97.247261 94.177261) (xy 97.334889 94.060204) (xy 97.385989 93.923201) (xy 97.392223 93.865219) (xy 97.392499 93.862654) (xy 97.3925 93.862637) (xy 97.3925 92.065362) (xy 97.392499 92.065345) (xy 97.388539 92.028522) (xy 97.385989 92.004799) (xy 97.383931 91.999282) (xy 97.334888 91.867793) (xy 97.334887 91.867792) (xy 97.273173 91.785353) (xy 97.260414 91.76831) (xy 97.235997 91.702847) (xy 97.250848 91.634574) (xy 97.260415 91.619689) (xy 97.269919 91.606994) (xy 97.301133 91.565296) (xy 97.334887 91.520207) (xy 97.334888 91.520206) (xy 97.385988 91.383204) (xy 97.385988 91.383203) (xy 97.385989 91.383201) (xy 97.389591 91.349692) (xy 97.392499 91.322654) (xy 97.3925 91.322637) (xy 97.3925 89.525362) (xy 97.392499 89.525345) (xy 97.389157 89.49427) (xy 97.385989 89.464799) (xy 97.334889 89.327796) (xy 97.247261 89.210739) (xy 97.130204 89.123111) (xy 96.993203 89.072011) (xy 96.932654 89.0655) (xy 96.932638 89.0655) (xy 93.335362 89.0655) (xy 93.335345 89.0655) (xy 93.274797 89.072011) (xy 93.274795 89.072011) (xy 93.137795 89.123111) (xy 93.020739 89.210739) (xy 92.933111 89.327795) (xy 92.882011 89.464795) (xy 92.882011 89.464797) (xy 92.8755 89.525345) (xy 92.8755 90.36525) (xy 92.875288 90.370373) (xy 92.870844 90.423995) (xy 92.870844 90.424003) (xy 92.875288 90.477625) (xy 92.8755 90.482747) (xy 92.8755 91.322654) (xy 92.882011 91.383202) (xy 92.882011 91.383204) (xy 92.921828 91.489954) (xy 92.933111 91.520204) (xy 92.998081 91.606994) (xy 93.007585 91.619689) (xy 93.032002 91.685154) (xy 93.01715 91.753427) (xy 93.007586 91.768308) (xy 92.994827 91.785353) (xy 92.933111 91.867795) (xy 92.882011 92.004795) (xy 92.882011 92.004797) (xy 92.8755 92.065345) (xy 92.8755 92.90525) (xy 92.875288 92.910373) (xy 92.870844 92.963995) (xy 92.870844 92.964003) (xy 89.2425 92.964003) (xy 89.2425 92.792747) (xy 89.242712 92.787625) (xy 89.247156 92.734003) (xy 89.247156 92.733995) (xy 89.242712 92.680373) (xy 89.2425 92.67525) (xy 89.2425 91.835362) (xy 89.242499 91.835345) (xy 89.239157 91.80427) (xy 89.235989 91.774799) (xy 89.233569 91.768311) (xy 89.199004 91.675639) (xy 89.184889 91.637796) (xy 89.097261 91.520739) (xy 88.980204 91.433111) (xy 88.957088 91.424489) (xy 88.843203 91.382011) (xy 88.782654 91.3755) (xy 88.782638 91.3755) (xy 86.985362 91.3755) (xy 86.985345 91.3755) (xy 86.924797 91.382011) (xy 86.924795 91.382011) (xy 86.787795 91.433111) (xy 86.670739 91.520739) (xy 86.583111 91.637795) (xy 86.532011 91.774795) (xy 86.532011 91.774797) (xy 86.5255 91.835345) (xy 86.5255 92.67525) (xy 86.525288 92.680373) (xy 86.520844 92.733995) (xy 86.520844 92.734003) (xy 86.525288 92.787625) (xy 86.5255 92.792747) (xy 86.5255 95.432654) (xy 86.532011 95.493202) (xy 86.532011 95.493204) (xy 86.575664 95.610238) (xy 86.583111 95.630204) (xy 86.670738 95.74726) (xy 86.67074 95.747262) (xy 86.784701 95.832572) (xy 86.826573 95.888506) (xy 86.831557 95.958197) (xy 86.798072 96.01952) (xy 86.736749 96.053005) (xy 86.681796 96.052497) (xy 86.639107 96.04238) (xy 86.619567 96.037749) (xy 86.619566 96.037749) (xy 86.619562 96.037748) (xy 86.612393 96.03691) (xy 86.612398 96.036861) (xy 86.604668 96.036071) (xy 86.604664 96.036119) (xy 86.597473 96.035489) (xy 86.519831 96.037749) (xy 84.461792 96.037749) (xy 84.394753 96.018064) (xy 84.374111 96.00143) (xy 84.133528 95.760847) (xy 84.100043 95.699524) (xy 84.105026 95.629834) (xy 84.155989 95.493201) (xy 84.160185 95.454175) (xy 84.162499 95.432654) (xy 84.1625 95.432637) (xy 84.1625 92.792747) (xy 84.162712 92.787625) (xy 84.167156 92.734003) (xy 84.167156 92.733995) (xy 84.162712 92.680373) (xy 84.1625 92.67525) (xy 84.1625 91.835362) (xy 84.162499 91.835345) (xy 84.159157 91.80427) (xy 84.155989 91.774799) (xy 84.153569 91.768311) (xy 84.119004 91.675639) (xy 84.104889 91.637796) (xy 84.017261 91.520739) (xy 83.900204 91.433111) (xy 83.877088 91.424489) (xy 83.763203 91.382011) (xy 83.702654 91.3755) (xy 83.702638 91.3755) (xy 81.905362 91.3755) (xy 81.905345 91.3755) (xy 81.844797 91.382011) (xy 81.844795 91.382011) (xy 81.707795 91.433111) (xy 81.590739 91.520739) (xy 81.503111 91.637795) (xy 81.452011 91.774795) (xy 81.452011 91.774797) (xy 81.4455 91.835345) (xy 81.4455 92.67525) (xy 81.445288 92.680373) (xy 81.440844 92.733995) (xy 81.440844 92.734003) (xy 81.445288 92.787625) (xy 81.4455 92.792747) (xy 81.4455 94.293087) (xy 81.425815 94.360126) (xy 81.373011 94.405881) (xy 81.303853 94.415825) (xy 81.278166 94.409268) (xy 81.14061 94.357961) (xy 81.140605 94.35796) (xy 81.080057 94.351449) (xy 81.080041 94.351449) (xy 80.432751 94.351449) (xy 80.432734 94.351449) (xy 80.372186 94.35796) (xy 80.372184 94.35796) (xy 80.235184 94.40906) (xy 80.118128 94.496688) (xy 80.0305 94.613744) (xy 79.9794 94.750744) (xy 79.9794 94.750746) (xy 79.972889 94.811294) (xy 79.972889 95.6359) (xy 79.953204 95.702939) (xy 79.9004 95.748694) (xy 79.848889 95.7599) (xy 79.763979 95.7599) (xy 79.69694 95.740215) (xy 79.651185 95.687411) (xy 79.639979 95.6359) (xy 79.639979 94.811311) (xy 79.639978 94.811294) (xy 79.635677 94.771297) (xy 79.633468 94.750748) (xy 79.627713 94.735319) (xy 79.586439 94.624661) (xy 79.582368 94.613745) (xy 79.49474 94.496688) (xy 79.377683 94.40906) (xy 79.377681 94.409059) (xy 79.377683 94.409059) (xy 79.328336 94.390654) (xy 79.272402 94.348783) (xy 79.247986 94.283318) (xy 79.262837 94.215046) (xy 79.272124 94.198155) (xy 79.277496 94.177227) (xy 79.283796 94.158827) (xy 79.292379 94.138995) (xy 79.300077 94.090389) (xy 79.301257 94.084683) (xy 79.3135 94.037006) (xy 79.3135 94.015399) (xy 79.315027 93.995998) (xy 79.318406 93.974667) (xy 79.313775 93.925676) (xy 79.3135 93.919838) (xy 79.3135 91.97557) (xy 79.315282 91.959432) (xy 79.315054 91.959411) (xy 79.315788 91.951648) (xy 79.3135 91.878841) (xy 79.3135 91.847757) (xy 79.3135 91.847751) (xy 79.312566 91.840358) (xy 79.312107 91.83453) (xy 79.310562 91.785353) (xy 79.304536 91.764612) (xy 79.30059 91.745561) (xy 79.297882 91.724119) (xy 79.279761 91.678353) (xy 79.277872 91.672833) (xy 79.267693 91.637795) (xy 79.264145 91.625583) (xy 79.253149 91.606991) (xy 79.244589 91.589518) (xy 79.236635 91.569427) (xy 79.228091 91.557667) (xy 79.207711 91.529617) (xy 79.204502 91.524732) (xy 79.183602 91.489392) (xy 79.179453 91.482376) (xy 79.179449 91.482372) (xy 79.179446 91.482368) (xy 79.164175 91.467097) (xy 79.151537 91.452301) (xy 79.138839 91.434823) (xy 79.100921 91.403455) (xy 79.096598 91.399521) (xy 78.605537 90.90846) (xy 78.595382 90.895784) (xy 78.595206 90.89593) (xy 78.590233 90.889919) (xy 78.537116 90.840039) (xy 78.515154 90.818076) (xy 78.509266 90.813509) (xy 78.504824 90.809715) (xy 78.468954 90.776031) (xy 78.468951 90.776028) (xy 78.46386 90.773229) (xy 78.450017 90.765618) (xy 78.433761 90.75494) (xy 78.416684 90.741694) (xy 78.371515 90.722148) (xy 78.366268 90.719577) (xy 78.347171 90.709079) (xy 78.323155 90.695876) (xy 78.323152 90.695875) (xy 78.302227 90.690501) (xy 78.283833 90.684204) (xy 78.27956 90.682355) (xy 78.263995 90.67562) (xy 78.263992 90.675619) (xy 78.263991 90.675619) (xy 78.215389 90.667921) (xy 78.209667 90.666736) (xy 78.162008 90.6545) (xy 78.162006 90.6545) (xy 78.1404 90.6545) (xy 78.121002 90.652973) (xy 78.112422 90.651614) (xy 78.099668 90.649594) (xy 78.099667 90.649594) (xy 78.050674 90.654225) (xy 78.044838 90.6545) (xy 78.013945 90.6545) (xy 77.946906 90.634815) (xy 77.901151 90.582011) (xy 77.891558 90.550437) (xy 77.890659 90.544919) (xy 77.885224 90.511553) (xy 77.849792 90.261005) (xy 77.84918 90.256109) (xy 77.815518 89.986662) (xy 77.815517 89.98666) (xy 77.815516 89.986651) (xy 77.814982 89.984024) (xy 77.8125 89.959339) (xy 77.8125 89.525362) (xy 77.812499 89.525345) (xy 77.809157 89.49427) (xy 77.805989 89.464799) (xy 77.754889 89.327796) (xy 77.667261 89.210739) (xy 77.550204 89.123111) (xy 77.413203 89.072011) (xy 77.352654 89.0655) (xy 77.352638 89.0655) (xy 73.755362 89.0655) (xy 73.755345 89.0655) (xy 73.694797 89.072011) (xy 73.694795 89.072011) (xy 73.557795 89.123111) (xy 73.440739 89.210739) (xy 73.353111 89.327795) (xy 73.302011 89.464795) (xy 73.302011 89.464797) (xy 73.2955 89.525345) (xy 73.2955 91.322654) (xy 73.302011 91.383202) (xy 73.302011 91.383204) (xy 73.341828 91.489954) (xy 73.353111 91.520204) (xy 73.418081 91.606994) (xy 73.427585 91.619689) (xy 73.452002 91.685154) (xy 73.43715 91.753427) (xy 73.427586 91.768308) (xy 73.414827 91.785353) (xy 73.353111 91.867795) (xy 73.302011 92.004795) (xy 73.302011 92.004797) (xy 73.2955 92.065345) (xy 73.2955 93.862654) (xy 73.302011 93.923202) (xy 73.302011 93.923204) (xy 73.346682 94.042967) (xy 73.353111 94.060204) (xy 73.440739 94.177261) (xy 73.557796 94.264889) (xy 73.694799 94.315989) (xy 73.72205 94.318918) (xy 73.755345 94.322499) (xy 73.755362 94.3225) (xy 74.267412 94.3225) (xy 74.334451 94.342185) (xy 74.380206 94.394989) (xy 74.39015 94.464147) (xy 74.365393 94.522498) (xy 74.358695 94.531132) (xy 74.358695 94.531133) (xy 74.33915 94.576297) (xy 74.33658 94.581543) (xy 74.312876 94.624661) (xy 74.307502 94.645589) (xy 74.301203 94.663987) (xy 74.292619 94.683824) (xy 74.284923 94.732422) (xy 74.283737 94.738147) (xy 74.281376 94.747342) (xy 74.245636 94.807379) (xy 74.183111 94.838562) (xy 74.161273 94.8405) (xy 73.515062 94.8405) (xy 73.515046 94.840501) (xy 73.411172 94.851113) (xy 73.242864 94.906884) (xy 73.242859 94.906886) (xy 73.091946 94.999971) (xy 72.966571 95.125346) (xy 72.873486 95.276259) (xy 72.873484 95.276264) (xy 72.817713 95.444572) (xy 72.8071 95.548447) (xy 72.8071 96.174537) (xy 72.807101 96.174553) (xy 72.817713 96.278427) (xy 72.865558 96.422816) (xy 72.873485 96.446738) (xy 72.966569 96.597651) (xy 72.966571 96.597653) (xy 73.055237 96.686319) (xy 73.088722 96.747642) (xy 73.083738 96.817334) (xy 73.055237 96.861681) (xy 72.966571 96.950346) (xy 72.873486 97.101259) (xy 72.873484 97.101264) (xy 72.817713 97.269572) (xy 72.8071 97.373447) (xy 72.8071 97.999537) (xy 68.041004 97.999537) (xy 68.047339 86.631111) (xy 68.312704 86.631111) (xy 68.312899 86.633596) (xy 68.358718 86.791308) (xy 68.442314 86.932662) (xy 68.442321 86.932671) (xy 68.558438 87.048788) (xy 68.558447 87.048795) (xy 68.699803 87.132392) (xy 68.699806 87.132393) (xy 68.857504 87.178209) (xy 68.85751 87.17821) (xy 68.894356 87.18111) (xy 69.535 87.18111) (xy 69.535 86.63111) (xy 70.035 86.63111) (xy 70.035 87.18111) (xy 70.675644 87.18111) (xy 70.712489 87.17821) (xy 70.712495 87.178209) (xy 70.870193 87.132393) (xy 70.870196 87.132392) (xy 71.011552 87.048795) (xy 71.011561 87.048788) (xy 71.127678 86.932671) (xy 71.127685 86.932662) (xy 71.211281 86.791308) (xy 71.2571 86.633596) (xy 71.257295 86.631111) (xy 71.257295 86.63111) (xy 70.035 86.63111) (xy 69.535 86.63111) (xy 68.312705 86.63111) (xy 68.312704 86.631111) (xy 68.047339 86.631111) (xy 68.049866 82.096349) (xy 68.069587 82.029324) (xy 68.122416 81.983599) (xy 68.19158 81.973694) (xy 68.25512 82.002754) (xy 68.29157 82.057416) (xy 68.29333 82.062727) (xy 68.296899 82.078825) (xy 68.296945 82.078815) (xy 68.29861 82.085841) (xy 68.325163 82.158795) (xy 68.326529 82.162916) (xy 68.328933 82.232744) (xy 68.327901 82.236517) (xy 68.304438 82.317278) (xy 68.304437 82.317285) (xy 68.3015 82.354605) (xy 68.3015 82.787615) (xy 68.304437 82.824939) (xy 68.304438 82.824945) (xy 68.350853 82.984706) (xy 68.350855 82.984711) (xy 68.435547 83.127918) (xy 68.437249 83.130112) (xy 68.438047 83.132144) (xy 68.439518 83.134632) (xy 68.439116 83.134869) (xy 68.462783 83.195149) (xy 68.449101 83.263666) (xy 68.437249 83.282108) (xy 68.435547 83.284301) (xy 68.350855 83.427508) (xy 68.350853 83.427513) (xy 68.304438 83.587274) (xy 68.304437 83.58728) (xy 68.3015 83.624605) (xy 68.3015 84.057615) (xy 68.304437 84.094939) (xy 68.304438 84.094945) (xy 68.350853 84.254706) (xy 68.350855 84.254711) (xy 68.435547 84.397918) (xy 68.437249 84.400112) (xy 68.438047 84.402144) (xy 68.439518 84.404632) (xy 68.439116 84.404869) (xy 68.462783 84.465149) (xy 68.449101 84.533666) (xy 68.437249 84.552108) (xy 68.435547 84.554301) (xy 68.350855 84.697508) (xy 68.350853 84.697513) (xy 68.304438 84.857274) (xy 68.304437 84.85728) (xy 68.3015 84.894605) (xy 68.3015 85.327615) (xy 68.304437 85.364939) (xy 68.304438 85.364945) (xy 68.350853 85.524706) (xy 68.350855 85.524711) (xy 68.435544 85.667913) (xy 68.44033 85.674083) (xy 68.438416 85.675567) (xy 68.466151 85.72636) (xy 68.461167 85.796052) (xy 68.446252 85.822818) (xy 68.446288 85.822839) (xy 68.445482 85.824201) (xy 68.442969 85.828712) (xy 68.442319 85.829549) (xy 68.358718 85.970911) (xy 68.312899 86.128623) (xy 68.312704 86.131108) (xy 68.312705 86.13111) (xy 71.257295 86.13111) (xy 71.257295 86.131108) (xy 71.2571 86.128621) (xy 71.257099 86.128615) (xy 71.221794 86.007095) (xy 71.221993 85.937226) (xy 71.259935 85.878556) (xy 71.323573 85.849712) (xy 71.34087 85.8485) (xy 73.150444 85.8485) (xy 73.217483 85.868185) (xy 73.263238 85.920989) (xy 73.270886 85.94301) (xy 73.282459 85.990283) (xy 73.291943 86.02902) (xy 73.2955 86.058507) (xy 73.2955 86.242654) (xy 73.302011 86.303202) (xy 73.302011 86.303204) (xy 73.338294 86.400479) (xy 73.353111 86.440204) (xy 73.440739 86.557261) (xy 73.557796 86.644889) (xy 73.694799 86.695989) (xy 73.72205 86.698918) (xy 73.755345 86.702499) (xy 73.755362 86.7025) (xy 77.352638 86.7025) (xy 77.352654 86.702499) (xy 77.379692 86.699591) (xy 77.413201 86.695989) (xy 77.550204 86.644889) (xy 77.667261 86.557261) (xy 77.754889 86.440204) (xy 77.805989 86.303201) (xy 77.809591 86.269692) (xy 77.812499 86.242654) (xy 77.8125 86.242637) (xy 77.8125 85.402747) (xy 77.812712 85.397625) (xy 77.817156 85.344003) (xy 92.870844 85.344003) (xy 92.875288 85.397625) (xy 92.8755 85.402747) (xy 92.8755 86.242654) (xy 92.882011 86.303202) (xy 92.882011 86.303204) (xy 92.918294 86.400479) (xy 92.933111 86.440204) (xy 93.020739 86.557261) (xy 93.137796 86.644889) (xy 93.274799 86.695989) (xy 93.30205 86.698918) (xy 93.335345 86.702499) (xy 93.335362 86.7025) (xy 96.932638 86.7025) (xy 96.932654 86.702499) (xy 96.959692 86.699591) (xy 96.993201 86.695989) (xy 97.130204 86.644889) (xy 97.247261 86.557261) (xy 97.334889 86.440204) (xy 97.385989 86.303201) (xy 97.389591 86.269692) (xy 97.392499 86.242654) (xy 97.3925 86.242637) (xy 97.3925 84.445362) (xy 97.392499 84.445345) (xy 97.389157 84.41427) (xy 97.385989 84.384799) (xy 97.385453 84.383362) (xy 97.334888 84.247793) (xy 97.334887 84.247792) (xy 97.269338 84.160231) (xy 97.260414 84.148309) (xy 97.235997 84.082847) (xy 97.250848 84.014574) (xy 97.260415 83.999689) (xy 97.334887 83.900207) (xy 97.334888 83.900206) (xy 97.33489 83.900202) (xy 97.385989 83.763201) (xy 97.391049 83.716137) (xy 97.392499 83.702654) (xy 97.3925 83.702637) (xy 97.3925 81.905362) (xy 97.392499 81.905345) (xy 97.389157 81.87427) (xy 97.385989 81.844799) (xy 97.3842 81.840003) (xy 97.334888 81.707793) (xy 97.334887 81.707792) (xy 97.276251 81.629466) (xy 97.260414 81.60831) (xy 97.235997 81.542847) (xy 97.250848 81.474574) (xy 97.260415 81.459689) (xy 97.334887 81.360207) (xy 97.334888 81.360206) (xy 97.385988 81.223204) (xy 97.385988 81.223203) (xy 97.385989 81.223201) (xy 97.390506 81.181184) (xy 97.392499 81.162654) (xy 97.3925 81.162637) (xy 97.3925 79.365362) (xy 97.392499 79.365345) (xy 97.389157 79.33427) (xy 97.385989 79.304799) (xy 97.334889 79.167796) (xy 97.334888 79.167793) (xy 97.334887 79.167792) (xy 97.276251 79.089466) (xy 97.260414 79.06831) (xy 97.235997 79.002847) (xy 97.250848 78.934574) (xy 97.260415 78.919689) (xy 97.334887 78.820207) (xy 97.334888 78.820206) (xy 97.385988 78.683204) (xy 97.385988 78.683203) (xy 97.385989 78.683201) (xy 97.390506 78.641184) (xy 97.392499 78.622654) (xy 97.3925 78.622637) (xy 97.3925 76.825362) (xy 97.392499 76.825345) (xy 97.389157 76.79427) (xy 97.385989 76.764799) (xy 97.334889 76.627796) (xy 97.247261 76.510739) (xy 97.130204 76.423111) (xy 96.993203 76.372011) (xy 96.932654 76.3655) (xy 96.932638 76.3655) (xy 93.335362 76.3655) (xy 93.335345 76.3655) (xy 93.274797 76.372011) (xy 93.274795 76.372011) (xy 93.137795 76.423111) (xy 93.020739 76.510739) (xy 92.933111 76.627795) (xy 92.882011 76.764795) (xy 92.882011 76.764797) (xy 92.8755 76.825345) (xy 92.8755 77.66525) (xy 92.875288 77.670373) (xy 92.870844 77.723995) (xy 92.870844 77.724003) (xy 92.875288 77.777625) (xy 92.8755 77.782747) (xy 92.8755 78.622654) (xy 92.882011 78.683202) (xy 92.882011 78.683204) (xy 92.933111 78.820204) (xy 93.007585 78.919689) (xy 93.032002 78.985154) (xy 93.01715 79.053427) (xy 93.007586 79.068308) (xy 92.987921 79.094578) (xy 92.933111 79.167795) (xy 92.882011 79.304795) (xy 92.882011 79.304797) (xy 92.8755 79.365345) (xy 92.8755 80.20525) (xy 92.875288 80.210373) (xy 92.870844 80.263995) (xy 92.870844 80.264003) (xy 92.875288 80.317625) (xy 92.8755 80.322747) (xy 92.8755 81.162654) (xy 92.882011 81.223202) (xy 92.882011 81.223204) (xy 92.933111 81.360204) (xy 93.007585 81.459689) (xy 93.032002 81.525154) (xy 93.01715 81.593427) (xy 93.007586 81.608308) (xy 92.989949 81.631869) (xy 92.933111 81.707795) (xy 92.882011 81.844795) (xy 92.882011 81.844797) (xy 92.8755 81.905345) (xy 92.8755 82.74525) (xy 92.875288 82.750373) (xy 92.870844 82.803995) (xy 92.870844 82.804003) (xy 92.875288 82.857625) (xy 92.8755 82.862747) (xy 92.8755 83.702654) (xy 92.882011 83.763202) (xy 92.882011 83.763204) (xy 92.933111 83.900204) (xy 93.007585 83.999689) (xy 93.032002 84.065154) (xy 93.01715 84.133427) (xy 93.007586 84.148308) (xy 92.998662 84.160231) (xy 92.933111 84.247795) (xy 92.882011 84.384795) (xy 92.882011 84.384797) (xy 92.8755 84.445345) (xy 92.8755 85.28525) (xy 92.875288 85.290373) (xy 92.870844 85.343995) (xy 92.870844 85.344003) (xy 77.817156 85.344003) (xy 77.817156 85.343995) (xy 77.812712 85.290373) (xy 77.8125 85.28525) (xy 77.8125 84.445362) (xy 77.812499 84.445345) (xy 77.809157 84.41427) (xy 77.805989 84.384799) (xy 77.805453 84.383362) (xy 77.754888 84.247793) (xy 77.754887 84.247792) (xy 77.689338 84.160231) (xy 77.680414 84.148309) (xy 77.655997 84.082847) (xy 77.670848 84.014574) (xy 77.680415 83.999689) (xy 77.754887 83.900207) (xy 77.754888 83.900206) (xy 77.75489 83.900202) (xy 77.805989 83.763201) (xy 77.811049 83.716137) (xy 77.812499 83.702654) (xy 77.8125 83.702637) (xy 77.8125 82.862747) (xy 77.812712 82.857625) (xy 77.817156 82.804003) (xy 77.817156 82.803995) (xy 77.812712 82.750373) (xy 77.8125 82.74525) (xy 77.8125 81.905362) (xy 77.812499 81.905345) (xy 77.809157 81.87427) (xy 77.805989 81.844799) (xy 77.8042 81.840003) (xy 77.754888 81.707793) (xy 77.754887 81.707792) (xy 77.696251 81.629466) (xy 77.680414 81.60831) (xy 77.655997 81.542847) (xy 77.670848 81.474574) (xy 77.680415 81.459689) (xy 77.754887 81.360207) (xy 77.754888 81.360206) (xy 77.805988 81.223204) (xy 77.805988 81.223203) (xy 77.805989 81.223201) (xy 77.810506 81.181184) (xy 77.812499 81.162654) (xy 77.8125 81.162637) (xy 77.8125 80.322747) (xy 77.812712 80.317625) (xy 77.817156 80.264003) (xy 77.817156 80.263995) (xy 77.812712 80.210373) (xy 77.8125 80.20525) (xy 77.8125 79.365362) (xy 77.812499 79.365345) (xy 77.809157 79.33427) (xy 77.805989 79.304799) (xy 77.754889 79.167796) (xy 77.754888 79.167793) (xy 77.754887 79.167792) (xy 77.696251 79.089466) (xy 77.680414 79.06831) (xy 77.655997 79.002847) (xy 77.670848 78.934574) (xy 77.680415 78.919689) (xy 77.754887 78.820207) (xy 77.754888 78.820206) (xy 77.805988 78.683204) (xy 77.805988 78.683203) (xy 77.805989 78.683201) (xy 77.810506 78.641184) (xy 77.812499 78.622654) (xy 77.8125 78.622637) (xy 77.8125 77.782747) (xy 77.812712 77.777625) (xy 77.817156 77.724003) (xy 77.817156 77.723995) (xy 77.812712 77.670373) (xy 77.8125 77.66525) (xy 77.8125 76.825362) (xy 77.812499 76.825345) (xy 77.809157 76.79427) (xy 77.805989 76.764799) (xy 77.754889 76.627796) (xy 77.667261 76.510739) (xy 77.550204 76.423111) (xy 77.413203 76.372011) (xy 77.352654 76.3655) (xy 77.352638 76.3655) (xy 73.755362 76.3655) (xy 73.755345 76.3655) (xy 73.694797 76.372011) (xy 73.694795 76.372011) (xy 73.557795 76.423111) (xy 73.440739 76.510739) (xy 73.353111 76.627795) (xy 73.302011 76.764795) (xy 73.302011 76.764797) (xy 73.2955 76.825345) (xy 73.2955 78.622654) (xy 73.302011 78.683202) (xy 73.302011 78.683204) (xy 73.353111 78.820204) (xy 73.427585 78.919689) (xy 73.452002 78.985154) (xy 73.43715 79.053427) (xy 73.427586 79.068308) (xy 73.407921 79.094578) (xy 73.353111 79.167795) (xy 73.302011 79.304795) (xy 73.302011 79.304797) (xy 73.2955 79.365345) (xy 73.2955 81.162654) (xy 73.302011 81.223202) (xy 73.302011 81.223204) (xy 73.353111 81.360204) (xy 73.427584 81.459688) (xy 73.452001 81.525153) (xy 73.437149 81.593426) (xy 73.427584 81.60831) (xy 73.398101 81.647694) (xy 73.395415 81.651035) (xy 73.394648 81.651923) (xy 73.389294 81.659104) (xy 73.389283 81.659119) (xy 73.38808 81.660925) (xy 73.386117 81.663703) (xy 73.353113 81.707791) (xy 73.353111 81.707794) (xy 73.309921 81.82359) (xy 73.303158 81.840004) (xy 73.274809 81.951943) (xy 73.239268 82.012098) (xy 73.176847 82.043489) (xy 73.154604 82.0455) (xy 73.030015 82.0455) (xy 73.012045 82.044191) (xy 72.987927 82.040658) (xy 72.942372 82.044645) (xy 72.935294 82.045264) (xy 72.929893 82.0455) (xy 72.92154 82.0455) (xy 72.888624 82.049347) (xy 72.811295 82.056112) (xy 72.804227 82.057572) (xy 72.804217 82.057528) (xy 72.796627 82.05921) (xy 72.796638 82.059254) (xy 72.789614 82.060919) (xy 72.789608 82.06092) (xy 72.789608 82.060921) (xy 72.784646 82.062727) (xy 72.716654 82.087473) (xy 72.642978 82.111887) (xy 72.636441 82.114936) (xy 72.636421 82.114894) (xy 72.629417 82.118285) (xy 72.629438 82.118326) (xy 72.62299 82.121564) (xy 72.558115 82.164233) (xy 72.492073 82.204967) (xy 72.486404 82.20945) (xy 72.486374 82.209413) (xy 72.480348 82.214322) (xy 72.480378 82.214357) (xy 72.474853 82.218993) (xy 72.474847 82.218998) (xy 72.474847 82.218999) (xy 72.43471 82.261541) (xy 72.421557 82.275482) (xy 71.671859 83.025181) (xy 71.610536 83.058666) (xy 71.584178 83.0615) (xy 71.361988 83.0615) (xy 71.294949 83.041815) (xy 71.249194 82.989011) (xy 71.23925 82.919853) (xy 71.242912 82.902905) (xy 71.265561 82.824945) (xy 71.265562 82.824939) (xy 71.2685 82.787615) (xy 71.2685 82.354605) (xy 71.265562 82.31728) (xy 71.265561 82.317274) (xy 71.219519 82.158796) (xy 71.219145 82.157509) (xy 71.150039 82.040658) (xy 71.134455 82.014306) (xy 71.134448 82.014297) (xy 71.016812 81.896661) (xy 71.016803 81.896654) (xy 70.873601 81.811965) (xy 70.873596 81.811963) (xy 70.713835 81.765548) (xy 70.713829 81.765547) (xy 70.676505 81.76261) (xy 70.676502 81.76261) (xy 70.018613 81.76261) (xy 69.951574 81.742925) (xy 69.930932 81.726291) (xy 69.83651 81.631869) (xy 69.803025 81.570546) (xy 69.800191 81.544188) (xy 69.800191 76.251911) (xy 69.819876 76.184872) (xy 69.87268 76.139117) (xy 69.941838 76.129173) (xy 69.963192 76.134204) (xy 70.019574 76.152887) (xy 70.123455 76.1635) (xy 70.724544 76.163499) (xy 70.828426 76.152887) (xy 70.996738 76.097115) (xy 71.147652 76.00403) (xy 71.27303 75.878652) (xy 71.273449 75.877971) (xy 71.273859 75.877602) (xy 71.277511 75.872985) (xy 71.278299 75.873608) (xy 71.325389 75.831244) (xy 71.39435 75.820014) (xy 71.458436 75.84785) (xy 71.476261 75.86842) (xy 71.477202 75.867677) (xy 71.481683 75.873344) (xy 71.605654 75.997315) (xy 71.754875 76.089356) (xy 71.75488 76.089358) (xy 71.921302 76.144505) (xy 71.921309 76.144506) (xy 72.024019 76.154999) (xy 72.073999 76.154998) (xy 72.074 76.154998) (xy 72.074 75.18) (xy 72.574 75.18) (xy 72.574 76.154999) (xy 72.623972 76.154999) (xy 72.623986 76.154998) (xy 72.726697 76.144505) (xy 72.893119 76.089358) (xy 72.893124 76.089356) (xy 73.042345 75.997315) (xy 73.166315 75.873345) (xy 73.258356 75.724124) (xy 73.258358 75.724119) (xy 73.313505 75.557697) (xy 73.313506 75.55769) (xy 73.323999 75.454986) (xy 73.324 75.454973) (xy 73.324 75.18) (xy 72.574 75.18) (xy 72.074 75.18) (xy 72.074 73.705) (xy 72.574 73.705) (xy 72.574 74.68) (xy 73.323999 74.68) (xy 73.323999 74.405028) (xy 73.323998 74.405013) (xy 73.313505 74.302302) (xy 73.258358 74.13588) (xy 73.258356 74.135875) (xy 73.166315 73.986654) (xy 73.042345 73.862684) (xy 72.893124 73.770643) (xy 72.893119 73.770641) (xy 72.726697 73.715494) (xy 72.72669 73.715493) (xy 72.623986 73.705) (xy 72.574 73.705) (xy 72.074 73.705) (xy 72.073999 73.704999) (xy 72.024029 73.705) (xy 72.024011 73.705001) (xy 71.921302 73.715494) (xy 71.75488 73.770641) (xy 71.754875 73.770643) (xy 71.605654 73.862684) (xy 71.481683 73.986655) (xy 71.477202 73.992323) (xy 71.475021 73.990598) (xy 71.432556 74.028775) (xy 71.363591 74.03998) (xy 71.299516 74.012121) (xy 71.277663 73.986894) (xy 71.277511 73.987015) (xy 71.274816 73.983606) (xy 71.273451 73.982031) (xy 71.273029 73.981347) (xy 71.147653 73.855971) (xy 71.147652 73.85597) (xy 71.009316 73.770643) (xy 70.99674 73.762886) (xy 70.996735 73.762884) (xy 70.828427 73.707113) (xy 70.724546 73.6965) (xy 70.123462 73.6965) (xy 70.123446 73.696501) (xy 70.019569 73.707113) (xy 69.963193 73.725794) (xy 69.893365 73.728195) (xy 69.833324 73.692463) (xy 69.802132 73.629942) (xy 69.800191 73.608088) (xy 69.800191 73.563851) (xy 69.806415 73.542654) (xy 73.2955 73.542654) (xy 73.302011 73.603202) (xy 73.302011 73.603204) (xy 73.347736 73.725794) (xy 73.353111 73.740204) (xy 73.440739 73.857261) (xy 73.557796 73.944889) (xy 73.694799 73.995989) (xy 73.72205 73.998918) (xy 73.755345 74.002499) (xy 73.755362 74.0025) (xy 77.352638 74.0025) (xy 77.352654 74.002499) (xy 77.379692 73.999591) (xy 77.413201 73.995989) (xy 77.550204 73.944889) (xy 77.667261 73.857261) (xy 77.754889 73.740204) (xy 77.805989 73.603201) (xy 77.809591 73.569692) (xy 77.812499 73.542654) (xy 77.8125 73.542637) (xy 77.8125 72.702747) (xy 77.812712 72.697625) (xy 77.817156 72.644003) (xy 77.817156 72.643995) (xy 77.812712 72.590373) (xy 77.8125 72.58525) (xy 77.8125 71.745362) (xy 77.812499 71.745345) (xy 77.807599 71.699776) (xy 77.805989 71.684799) (xy 77.791338 71.645519) (xy 77.754888 71.547793) (xy 77.754887 71.547792) (xy 77.696251 71.469466) (xy 77.680414 71.44831) (xy 77.655997 71.382847) (xy 77.670848 71.314574) (xy 77.680415 71.299689) (xy 77.6843 71.2945) (xy 77.754889 71.200204) (xy 77.805989 71.063201) (xy 77.810506 71.021184) (xy 77.812499 71.002654) (xy 77.8125 71.002637) (xy 77.8125 70.162747) (xy 77.812712 70.157625) (xy 77.817156 70.104003) (xy 77.817156 70.103995) (xy 77.812712 70.050373) (xy 77.8125 70.04525) (xy 77.8125 69.205362) (xy 77.812499 69.205345) (xy 77.809157 69.17427) (xy 77.805989 69.144799) (xy 77.754889 69.007796) (xy 77.754888 69.007793) (xy 77.754887 69.007792) (xy 77.696251 68.929466) (xy 77.680414 68.90831) (xy 77.655997 68.842847) (xy 77.670848 68.774574) (xy 77.680415 68.759689) (xy 77.754887 68.660207) (xy 77.754888 68.660206) (xy 77.805988 68.523204) (xy 77.805988 68.523203) (xy 77.805989 68.523201) (xy 77.810506 68.481184) (xy 77.812499 68.462654) (xy 77.8125 68.462637) (xy 77.8125 67.622747) (xy 77.812712 67.617625) (xy 77.817156 67.564003) (xy 77.817156 67.563995) (xy 77.812712 67.510373) (xy 77.8125 67.50525) (xy 77.8125 66.665362) (xy 77.812499 66.665345) (xy 77.809157 66.63427) (xy 77.805989 66.604799) (xy 77.754889 66.467796) (xy 77.754888 66.467793) (xy 77.754887 66.467792) (xy 77.696251 66.389466) (xy 77.680414 66.36831) (xy 77.655997 66.302847) (xy 77.670848 66.234574) (xy 77.680415 66.219689) (xy 77.754887 66.120207) (xy 77.754888 66.120206) (xy 77.805988 65.983204) (xy 77.805988 65.983203) (xy 77.805989 65.983201) (xy 77.810506 65.941184) (xy 77.812499 65.922654) (xy 77.8125 65.922637) (xy 77.8125 65.082747) (xy 77.812712 65.077625) (xy 77.817156 65.024003) (xy 77.817156 65.023995) (xy 77.812712 64.970373) (xy 77.8125 64.96525) (xy 77.8125 64.125362) (xy 77.812499 64.125345) (xy 77.809157 64.09427) (xy 77.805989 64.064799) (xy 77.754889 63.927796) (xy 77.667261 63.810739) (xy 77.550204 63.723111) (xy 77.413203 63.672011) (xy 77.352654 63.6655) (xy 77.352638 63.6655) (xy 73.755362 63.6655) (xy 73.755345 63.6655) (xy 73.694797 63.672011) (xy 73.694795 63.672011) (xy 73.557795 63.723111) (xy 73.440739 63.810739) (xy 73.353111 63.927795) (xy 73.302011 64.064795) (xy 73.302011 64.064797) (xy 73.2955 64.125345) (xy 73.2955 65.922654) (xy 73.302011 65.983202) (xy 73.302011 65.983204) (xy 73.353111 66.120204) (xy 73.427585 66.219689) (xy 73.452002 66.285154) (xy 73.43715 66.353427) (xy 73.427586 66.368308) (xy 73.407921 66.394578) (xy 73.353111 66.467795) (xy 73.302011 66.604795) (xy 73.302011 66.604797) (xy 73.2955 66.665345) (xy 73.2955 68.462654) (xy 73.302011 68.523202) (xy 73.302011 68.523204) (xy 73.353111 68.660204) (xy 73.427585 68.759689) (xy 73.452002 68.825154) (xy 73.43715 68.893427) (xy 73.427586 68.908308) (xy 73.407921 68.934578) (xy 73.353111 69.007795) (xy 73.302011 69.144795) (xy 73.302011 69.144797) (xy 73.2955 69.205345) (xy 73.2955 71.002654) (xy 73.302011 71.063202) (xy 73.302011 71.063204) (xy 73.341828 71.169954) (xy 73.353111 71.200204) (xy 73.4237 71.2945) (xy 73.427585 71.299689) (xy 73.452002 71.365154) (xy 73.43715 71.433427) (xy 73.427586 71.448308) (xy 73.407921 71.474578) (xy 73.353111 71.547795) (xy 73.302011 71.684795) (xy 73.302011 71.684797) (xy 73.2955 71.745345) (xy 73.2955 73.542654) (xy 69.806415 73.542654) (xy 69.819876 73.496812) (xy 69.836505 73.476175) (xy 71.0743 72.238379) (xy 71.087926 72.226603) (xy 71.107478 72.212049) (xy 71.141435 72.17158) (xy 71.145095 72.167585) (xy 71.151 72.161681) (xy 71.171556 72.135683) (xy 71.221452 72.07622) (xy 71.221453 72.076219) (xy 71.225423 72.070183) (xy 71.225463 72.070209) (xy 71.229632 72.063666) (xy 71.229591 72.063641) (xy 71.233384 72.057491) (xy 71.233385 72.057488) (xy 71.233387 72.057486) (xy 71.266193 71.987132) (xy 71.301029 71.917768) (xy 71.30103 71.91776) (xy 71.303499 71.91098) (xy 71.303546 71.910997) (xy 71.306098 71.903655) (xy 71.306051 71.90364) (xy 71.30832 71.896791) (xy 71.30832 71.896789) (xy 71.308322 71.896786) (xy 71.324019 71.820761) (xy 71.34192 71.745236) (xy 71.34192 71.745234) (xy 71.341921 71.74523) (xy 71.342759 71.738063) (xy 71.342806 71.738068) (xy 71.343596 71.730337) (xy 71.343549 71.730333) (xy 71.344178 71.723142) (xy 71.343062 71.684795) (xy 71.34192 71.645519) (xy 71.34192 60.842654) (xy 73.2955 60.842654) (xy 73.302011 60.903202) (xy 73.302011 60.903204) (xy 73.341828 61.009954) (xy 73.353111 61.040204) (xy 73.440739 61.157261) (xy 73.557796 61.244889) (xy 73.694799 61.295989) (xy 73.72205 61.298918) (xy 73.755345 61.302499) (xy 73.755362 61.3025) (xy 77.352638 61.3025) (xy 77.352654 61.302499) (xy 77.379692 61.299591) (xy 77.413201 61.295989) (xy 77.550204 61.244889) (xy 77.667261 61.157261) (xy 77.754889 61.040204) (xy 77.805989 60.903201) (xy 77.810506 60.861184) (xy 77.812499 60.842654) (xy 77.8125 60.842637) (xy 77.8125 60.002747) (xy 77.812712 59.997625) (xy 77.817156 59.944003) (xy 77.817156 59.943995) (xy 77.812712 59.890373) (xy 77.8125 59.88525) (xy 77.8125 59.045362) (xy 77.812499 59.045345) (xy 77.809157 59.01427) (xy 77.805989 58.984799) (xy 77.754889 58.847796) (xy 77.754888 58.847793) (xy 77.754887 58.847792) (xy 77.696251 58.769466) (xy 77.680414 58.74831) (xy 77.655997 58.682847) (xy 77.670848 58.614574) (xy 77.680415 58.599689) (xy 77.754887 58.500207) (xy 77.754888 58.500206) (xy 77.805988 58.363204) (xy 77.805988 58.363203) (xy 77.805989 58.363201) (xy 77.810506 58.321184) (xy 77.812499 58.302654) (xy 77.8125 58.302637) (xy 77.8125 57.462747) (xy 77.812712 57.457625) (xy 77.817156 57.404003) (xy 77.817156 57.403995) (xy 77.812712 57.350373) (xy 77.8125 57.34525) (xy 77.8125 56.505362) (xy 77.812499 56.505345) (xy 77.809157 56.47427) (xy 77.805989 56.444799) (xy 77.778838 56.372006) (xy 77.754888 56.307793) (xy 77.754887 56.307792) (xy 77.696251 56.229466) (xy 77.680414 56.20831) (xy 77.655997 56.142847) (xy 77.670848 56.074574) (xy 77.680415 56.059689) (xy 77.754887 55.960207) (xy 77.754888 55.960206) (xy 77.759862 55.946872) (xy 77.805989 55.823201) (xy 77.810505 55.781198) (xy 77.812499 55.762654) (xy 77.8125 55.762637) (xy 77.8125 54.922747) (xy 77.812712 54.917625) (xy 77.817156 54.864003) (xy 77.817156 54.863995) (xy 77.812712 54.810373) (xy 77.8125 54.80525) (xy 77.8125 53.965362) (xy 77.812499 53.965345) (xy 77.807595 53.919741) (xy 77.805989 53.904799) (xy 77.802259 53.894799) (xy 77.778839 53.832007) (xy 77.754889 53.767796) (xy 77.675105 53.661218) (xy 77.650689 53.595754) (xy 77.665541 53.527481) (xy 77.675107 53.512596) (xy 77.747352 53.416089) (xy 77.747354 53.416086) (xy 77.797596 53.281379) (xy 77.797598 53.281372) (xy 77.803999 53.221844) (xy 77.804 53.221827) (xy 77.804 52.574) (xy 76.899572 52.574) (xy 76.922682 52.53804) (xy 76.964 52.397327) (xy 76.964 52.250673) (xy 76.922682 52.10996) (xy 76.899572 52.074) (xy 77.804 52.074) (xy 77.804 51.426172) (xy 77.803999 51.426155) (xy 77.797598 51.366627) (xy 77.797596 51.36662) (xy 77.747354 51.231913) (xy 77.74735 51.231906) (xy 77.66119 51.116812) (xy 77.661187 51.116809) (xy 77.546093 51.030649) (xy 77.546086 51.030645) (xy 77.411379 50.980403) (xy 77.411372 50.980401) (xy 77.351844 50.974) (xy 76.704 50.974) (xy 76.704 51.877505) (xy 76.599161 51.829627) (xy 76.490473 51.814) (xy 76.417527 51.814) (xy 76.308839 51.829627) (xy 76.204 51.877505) (xy 76.204 50.974) (xy 75.804 50.974) (xy 75.804 52.074) (xy 76.008428 52.074) (xy 75.985318 52.10996) (xy 75.944 52.250673) (xy 75.944 52.397327) (xy 75.985318 52.53804) (xy 76.008428 52.574) (xy 73.304 52.574) (xy 73.304 53.221844) (xy 73.310401 53.281372) (xy 73.310403 53.281379) (xy 73.360645 53.416086) (xy 73.360646 53.416088) (xy 73.432893 53.512597) (xy 73.45731 53.578061) (xy 73.442459 53.646334) (xy 73.432893 53.661218) (xy 73.353112 53.767793) (xy 73.353111 53.767793) (xy 73.302011 53.904795) (xy 73.302011 53.904797) (xy 73.2955 53.965345) (xy 73.2955 55.762654) (xy 73.302011 55.823202) (xy 73.302011 55.823204) (xy 73.353111 55.960204) (xy 73.427585 56.059689) (xy 73.452002 56.125154) (xy 73.43715 56.193427) (xy 73.427586 56.208308) (xy 73.407921 56.234578) (xy 73.353111 56.307795) (xy 73.302011 56.444795) (xy 73.302011 56.444797) (xy 73.2955 56.505345) (xy 73.2955 58.302654) (xy 73.302011 58.363202) (xy 73.302011 58.363204) (xy 73.353111 58.500204) (xy 73.427585 58.599689) (xy 73.452002 58.665154) (xy 73.43715 58.733427) (xy 73.427586 58.748308) (xy 73.407921 58.774578) (xy 73.353111 58.847795) (xy 73.302011 58.984795) (xy 73.302011 58.984797) (xy 73.2955 59.045345) (xy 73.2955 60.842654) (xy 71.34192 60.842654) (xy 71.34192 55.956622) (xy 71.361605 55.889583) (xy 71.378234 55.868945) (xy 72.4564 54.790779) (xy 72.470026 54.779003) (xy 72.489578 54.764449) (xy 72.523535 54.72398) (xy 72.527195 54.719985) (xy 72.533101 54.71408) (xy 72.553655 54.688084) (xy 72.603552 54.62862) (xy 72.603553 54.628617) (xy 72.607524 54.622581) (xy 72.607565 54.622608) (xy 72.611739 54.616056) (xy 72.611696 54.61603) (xy 72.615482 54.609891) (xy 72.615487 54.609885) (xy 72.648295 54.539527) (xy 72.683129 54.470168) (xy 72.68313 54.470162) (xy 72.685597 54.463385) (xy 72.685644 54.463402) (xy 72.688195 54.456063) (xy 72.688149 54.456048) (xy 72.69042 54.44919) (xy 72.690423 54.449186) (xy 72.706127 54.373129) (xy 72.72402 54.297636) (xy 72.72402 54.297633) (xy 72.724859 54.290463) (xy 72.724906 54.290468) (xy 72.725697 54.282737) (xy 72.72565 54.282733) (xy 72.726279 54.275542) (xy 72.72402 54.1979) (xy 72.72402 52.074) (xy 73.304 52.074) (xy 75.304 52.074) (xy 75.304 50.974) (xy 73.756155 50.974) (xy 73.696627 50.980401) (xy 73.69662 50.980403) (xy 73.561913 51.030645) (xy 73.561906 51.030649) (xy 73.446812 51.116809) (xy 73.446809 51.116812) (xy 73.360649 51.231906) (xy 73.360645 51.231913) (xy 73.310403 51.36662) (xy 73.310401 51.366627) (xy 73.304 51.426155) (xy 73.304 52.074) (xy 72.72402 52.074) (xy 72.72402 43.868585) (xy 72.743705 43.801546) (xy 72.796509 43.755791) (xy 72.84802 43.744585) (xy 73.1715 43.744585) (xy 73.238539 43.76427) (xy 73.284294 43.817074) (xy 73.2955 43.868585) (xy 73.2955 45.602654) (xy 73.302011 45.663202) (xy 73.302011 45.663204) (xy 73.340474 45.766323) (xy 73.353111 45.800204) (xy 73.427097 45.899038) (xy 73.427585 45.899689) (xy 73.452002 45.965154) (xy 73.43715 46.033427) (xy 73.427586 46.048308) (xy 73.419445 46.059185) (xy 73.353111 46.147795) (xy 73.302011 46.284795) (xy 73.302011 46.284797) (xy 73.2955 46.345345) (xy 73.2955 48.142654) (xy 73.302011 48.203202) (xy 73.302011 48.203204) (xy 73.346195 48.321662) (xy 73.353111 48.340204) (xy 73.440739 48.457261) (xy 73.557796 48.544889) (xy 73.694799 48.595989) (xy 73.72205 48.598918) (xy 73.755345 48.602499) (xy 73.755362 48.6025) (xy 77.352638 48.6025) (xy 77.352654 48.602499) (xy 77.379692 48.599591) (xy 77.413201 48.595989) (xy 77.550204 48.544889) (xy 77.667261 48.457261) (xy 77.754889 48.340204) (xy 77.805989 48.203201) (xy 77.811479 48.152138) (xy 77.812499 48.142654) (xy 77.8125 48.142637) (xy 77.8125 47.302747) (xy 77.812712 47.297625) (xy 77.812837 47.296124) (xy 77.816335 47.25391) (xy 77.817156 47.244003) (xy 77.817156 47.243995) (xy 77.812712 47.190373) (xy 77.8125 47.18525) (xy 77.8125 46.345362) (xy 77.812499 46.345345) (xy 77.809157 46.31427) (xy 77.805989 46.284799) (xy 77.802458 46.275333) (xy 77.754888 46.147793) (xy 77.754887 46.147792) (xy 77.688555 46.059185) (xy 77.680414 46.04831) (xy 77.655997 45.982847) (xy 77.670848 45.914574) (xy 77.680413 45.899691) (xy 77.738719 45.821805) (xy 77.754887 45.800207) (xy 77.754888 45.800206) (xy 77.760824 45.784293) (xy 77.796675 45.688172) (xy 77.805988 45.663204) (xy 77.805988 45.663203) (xy 77.805989 45.663201) (xy 77.810506 45.621184) (xy 77.812499 45.602654) (xy 77.8125 45.602637) (xy 77.8125 44.762747) (xy 77.812712 44.757625) (xy 77.813683 44.745916) (xy 77.817156 44.704) (xy 77.816693 44.698415) (xy 77.812712 44.650373) (xy 77.8125 44.64525) (xy 77.8125 43.868585) (xy 77.832185 43.801546) (xy 77.884989 43.755791) (xy 77.9365 43.744585) (xy 79.099705 43.744585) (xy 79.166744 43.76427) (xy 79.187386 43.780904) (xy 79.215181 43.808699) (xy 79.248666 43.870022) (xy 79.2515 43.89638) (xy 79.2515 53.910706) (xy 79.250191 53.928676) (xy 79.246658 53.952791) (xy 79.251264 54.00542) (xy 79.2515 54.010827) (xy 79.2515 54.01918) (xy 79.254064 54.041123) (xy 79.255347 54.052096) (xy 79.262112 54.129427) (xy 79.263572 54.136494) (xy 79.263526 54.136503) (xy 79.265209 54.144094) (xy 79.265254 54.144084) (xy 79.266919 54.15111) (xy 79.28395 54.1979) (xy 79.293473 54.224065) (xy 79.317852 54.297636) (xy 79.317886 54.297737) (xy 79.32094 54.304286) (xy 79.320896 54.304306) (xy 79.324284 54.311304) (xy 79.324327 54.311283) (xy 79.327568 54.317737) (xy 79.370232 54.382604) (xy 79.395541 54.423636) (xy 79.41097 54.448651) (xy 79.410972 54.448653) (xy 79.415451 54.454318) (xy 79.415413 54.454347) (xy 79.42032 54.460372) (xy 79.420357 54.460342) (xy 79.425002 54.465878) (xy 79.481482 54.519163) (xy 80.317196 55.354877) (xy 80.328977 55.368509) (xy 80.343531 55.388058) (xy 80.384012 55.422025) (xy 80.387986 55.425667) (xy 80.3939 55.431581) (xy 80.419895 55.452135) (xy 80.47936 55.502032) (xy 80.479361 55.502032) (xy 80.479363 55.502034) (xy 80.485396 55.506002) (xy 80.48537 55.506041) (xy 80.491927 55.510218) (xy 80.491953 55.510178) (xy 80.498091 55.513964) (xy 80.498095 55.513967) (xy 80.568452 55.546775) (xy 80.637812 55.581609) (xy 80.637818 55.58161) (xy 80.644606 55.584082) (xy 80.644589 55.584128) (xy 80.651924 55.586677) (xy 80.65194 55.586632) (xy 80.658789 55.588902) (xy 80.658794 55.588903) (xy 80.73485 55.604607) (xy 80.795603 55.619006) (xy 80.810339 55.622499) (xy 80.81034 55.622499) (xy 80.810344 55.6225) (xy 80.810348 55.6225) (xy 80.817517 55.623338) (xy 80.817511 55.623386) (xy 80.825242 55.624177) (xy 80.825247 55.62413) (xy 80.832437 55.624759) (xy 80.832441 55.624758) (xy 80.832442 55.624759) (xy 80.91008 55.6225) (xy 92.734604 55.6225) (xy 92.801643 55.642185) (xy 92.847398 55.694989) (xy 92.854809 55.716058) (xy 92.881633 55.82198) (xy 92.881872 55.822831) (xy 92.933111 55.960204) (xy 93.007585 56.059689) (xy 93.032002 56.125154) (xy 93.01715 56.193427) (xy 93.007586 56.208308) (xy 92.987921 56.234578) (xy 92.933111 56.307795) (xy 92.882011 56.444795) (xy 92.882011 56.444797) (xy 92.8755 56.505345) (xy 92.8755 57.34525) (xy 92.875288 57.350373) (xy 92.870844 57.403995) (xy 92.870844 57.404003) (xy 92.875288 57.457625) (xy 92.8755 57.462747) (xy 92.8755 58.302654) (xy 92.882011 58.363202) (xy 92.882011 58.363204) (xy 92.933111 58.500204) (xy 93.007585 58.599689) (xy 93.032002 58.665154) (xy 93.01715 58.733427) (xy 93.007586 58.748308) (xy 92.987921 58.774578) (xy 92.933111 58.847795) (xy 92.882011 58.984795) (xy 92.882011 58.984797) (xy 92.8755 59.045345) (xy 92.8755 59.88525) (xy 92.875288 59.890373) (xy 92.870844 59.943995) (xy 92.870844 59.944003) (xy 92.875288 59.997625) (xy 92.8755 60.002747) (xy 92.8755 60.842654) (xy 92.882011 60.903202) (xy 92.882011 60.903204) (xy 92.933111 61.040204) (xy 93.007585 61.139689) (xy 93.032002 61.205154) (xy 93.01715 61.273427) (xy 93.007586 61.288308) (xy 92.996964 61.302499) (xy 92.933111 61.387795) (xy 92.882011 61.524795) (xy 92.882011 61.524797) (xy 92.8755 61.585345) (xy 92.8755 63.382654) (xy 92.882011 63.443202) (xy 92.882011 63.443204) (xy 92.933111 63.580204) (xy 93.007585 63.679689) (xy 93.032002 63.745154) (xy 93.01715 63.813427) (xy 93.007586 63.828308) (xy 92.987921 63.854578) (xy 92.933111 63.927795) (xy 92.882011 64.064795) (xy 92.882011 64.064797) (xy 92.8755 64.125345) (xy 92.8755 64.96525) (xy 92.875288 64.970373) (xy 92.870844 65.023995) (xy 92.870844 65.024003) (xy 92.875288 65.077625) (xy 92.8755 65.082747) (xy 92.8755 65.922654) (xy 92.882011 65.983202) (xy 92.882011 65.983204) (xy 92.933111 66.120204) (xy 93.007585 66.219689) (xy 93.032002 66.285154) (xy 93.01715 66.353427) (xy 93.007586 66.368308) (xy 92.987921 66.394578) (xy 92.933111 66.467795) (xy 92.882011 66.604795) (xy 92.882011 66.604797) (xy 92.8755 66.665345) (xy 92.8755 67.50525) (xy 92.875288 67.510373) (xy 92.870844 67.563995) (xy 92.870844 67.564003) (xy 92.875288 67.617625) (xy 92.8755 67.622747) (xy 92.8755 68.462654) (xy 92.882011 68.523202) (xy 92.882011 68.523204) (xy 92.933111 68.660204) (xy 93.007585 68.759689) (xy 93.032002 68.825154) (xy 93.01715 68.893427) (xy 93.007586 68.908308) (xy 92.987921 68.934578) (xy 92.933111 69.007795) (xy 92.882011 69.144795) (xy 92.882011 69.144797) (xy 92.8755 69.205345) (xy 92.8755 70.04525) (xy 92.875288 70.050373) (xy 92.870844 70.103995) (xy 92.870844 70.104003) (xy 92.875288 70.157625) (xy 92.8755 70.162747) (xy 92.8755 71.002654) (xy 92.882011 71.063202) (xy 92.882011 71.063204) (xy 92.921828 71.169954) (xy 92.933111 71.200204) (xy 93.0037 71.2945) (xy 93.007585 71.299689) (xy 93.032002 71.365154) (xy 93.01715 71.433427) (xy 93.007586 71.448308) (xy 92.987921 71.474578) (xy 92.933111 71.547795) (xy 92.882011 71.684795) (xy 92.882011 71.684797) (xy 92.8755 71.745345) (xy 92.8755 72.58525) (xy 92.875288 72.590373) (xy 92.870844 72.643995) (xy 92.870844 72.644003) (xy 92.875288 72.697625) (xy 92.8755 72.702747) (xy 92.8755 73.542654) (xy 92.882011 73.603202) (xy 92.882011 73.603204) (xy 92.927736 73.725794) (xy 92.933111 73.740204) (xy 93.020739 73.857261) (xy 93.137796 73.944889) (xy 93.274799 73.995989) (xy 93.30205 73.998918) (xy 93.335345 74.002499) (xy 93.335362 74.0025) (xy 96.932638 74.0025) (xy 96.932654 74.002499) (xy 96.959692 73.999591) (xy 96.993201 73.995989) (xy 97.130204 73.944889) (xy 97.247261 73.857261) (xy 97.334889 73.740204) (xy 97.385989 73.603201) (xy 97.389591 73.569692) (xy 97.392499 73.542654) (xy 97.3925 73.542637) (xy 97.3925 71.745362) (xy 97.392499 71.745345) (xy 97.387599 71.699776) (xy 97.385989 71.684799) (xy 97.371338 71.645519) (xy 97.334888 71.547793) (xy 97.334887 71.547792) (xy 97.276251 71.469466) (xy 97.260414 71.44831) (xy 97.235997 71.382847) (xy 97.250848 71.314574) (xy 97.260415 71.299689) (xy 97.2643 71.2945) (xy 97.334889 71.200204) (xy 97.385989 71.063201) (xy 97.390506 71.021184) (xy 97.392499 71.002654) (xy 97.3925 71.002637) (xy 97.3925 69.205362) (xy 97.392499 69.205345) (xy 97.389157 69.17427) (xy 97.385989 69.144799) (xy 97.334889 69.007796) (xy 97.334888 69.007793) (xy 97.334887 69.007792) (xy 97.276251 68.929466) (xy 97.260414 68.90831) (xy 97.235997 68.842847) (xy 97.250848 68.774574) (xy 97.260415 68.759689) (xy 97.334887 68.660207) (xy 97.334888 68.660206) (xy 97.385988 68.523204) (xy 97.385988 68.523203) (xy 97.385989 68.523201) (xy 97.390506 68.481184) (xy 97.392499 68.462654) (xy 97.3925 68.462637) (xy 97.3925 66.665362) (xy 97.392499 66.665345) (xy 97.389157 66.63427) (xy 97.385989 66.604799) (xy 97.334889 66.467796) (xy 97.334888 66.467793) (xy 97.334887 66.467792) (xy 97.276251 66.389466) (xy 97.260414 66.36831) (xy 97.235997 66.302847) (xy 97.250848 66.234574) (xy 97.260415 66.219689) (xy 97.334887 66.120207) (xy 97.334888 66.120206) (xy 97.385988 65.983204) (xy 97.385988 65.983203) (xy 97.385989 65.983201) (xy 97.390506 65.941184) (xy 97.392499 65.922654) (xy 97.3925 65.922637) (xy 97.3925 64.125362) (xy 97.392499 64.125345) (xy 97.389157 64.09427) (xy 97.385989 64.064799) (xy 97.334889 63.927796) (xy 97.334888 63.927793) (xy 97.334887 63.927792) (xy 97.276251 63.849466) (xy 97.260414 63.82831) (xy 97.235997 63.762847) (xy 97.250848 63.694574) (xy 97.260415 63.679689) (xy 97.334887 63.580207) (xy 97.334888 63.580206) (xy 97.385988 63.443204) (xy 97.385988 63.443203) (xy 97.385989 63.443201) (xy 97.390506 63.401184) (xy 97.392499 63.382654) (xy 97.3925 63.382637) (xy 97.3925 61.585362) (xy 97.392499 61.585345) (xy 97.389157 61.55427) (xy 97.385989 61.524799) (xy 97.334889 61.387796) (xy 97.334888 61.387793) (xy 97.334887 61.387792) (xy 97.271036 61.302499) (xy 97.260414 61.28831) (xy 97.235997 61.222847) (xy 97.250848 61.154574) (xy 97.260415 61.139689) (xy 97.334887 61.040207) (xy 97.334888 61.040206) (xy 97.385988 60.903204) (xy 97.385988 60.903203) (xy 97.385989 60.903201) (xy 97.390506 60.861184) (xy 97.392499 60.842654) (xy 97.3925 60.842637) (xy 97.3925 59.045362) (xy 97.392499 59.045345) (xy 97.389157 59.01427) (xy 97.385989 58.984799) (xy 97.334889 58.847796) (xy 97.334888 58.847793) (xy 97.334887 58.847792) (xy 97.276251 58.769466) (xy 97.260414 58.74831) (xy 97.235997 58.682847) (xy 97.250848 58.614574) (xy 97.260415 58.599689) (xy 97.334887 58.500207) (xy 97.334888 58.500206) (xy 97.385988 58.363204) (xy 97.385988 58.363203) (xy 97.385989 58.363201) (xy 97.390506 58.321184) (xy 97.392499 58.302654) (xy 97.3925 58.302637) (xy 97.3925 56.505362) (xy 97.392499 56.505345) (xy 97.389157 56.47427) (xy 97.385989 56.444799) (xy 97.358838 56.372006) (xy 97.334888 56.307793) (xy 97.334887 56.307792) (xy 97.276251 56.229466) (xy 97.260414 56.20831) (xy 97.235997 56.142847) (xy 97.250848 56.074574) (xy 97.260415 56.059689) (xy 97.334887 55.960207) (xy 97.334888 55.960206) (xy 97.339862 55.946872) (xy 97.385989 55.823201) (xy 97.390505 55.781198) (xy 97.392499 55.762654) (xy 97.3925 55.762637) (xy 97.3925 53.965362) (xy 97.392499 53.965345) (xy 97.387595 53.919741) (xy 97.385989 53.904799) (xy 97.382259 53.894799) (xy 97.334888 53.767793) (xy 97.334887 53.767792) (xy 97.276251 53.689466) (xy 97.260414 53.66831) (xy 97.235997 53.602847) (xy 97.250848 53.534574) (xy 97.260415 53.519689) (xy 97.334887 53.420207) (xy 97.334888 53.420206) (xy 97.385988 53.283204) (xy 97.385988 53.283203) (xy 97.385989 53.283201) (xy 97.390506 53.241184) (xy 97.392499 53.222654) (xy 97.3925 53.222637) (xy 97.3925 51.425362) (xy 97.392499 51.425345) (xy 97.389157 51.39427) (xy 97.385989 51.364799) (xy 97.334889 51.227796) (xy 97.247261 51.110739) (xy 97.130204 51.023111) (xy 96.993203 50.972011) (xy 96.932654 50.9655) (xy 96.932638 50.9655) (xy 93.335362 50.9655) (xy 93.335345 50.9655) (xy 93.274797 50.972011) (xy 93.274795 50.972011) (xy 93.137795 51.023111) (xy 93.020739 51.110739) (xy 92.933111 51.227795) (xy 92.882011 51.364795) (xy 92.882011 51.364797) (xy 92.8755 51.425345) (xy 92.8755 52.26525) (xy 92.875288 52.270373) (xy 92.870844 52.323995) (xy 92.870844 52.324003) (xy 92.875288 52.377625) (xy 92.8755 52.382747) (xy 92.8755 53.222654) (xy 92.882011 53.283202) (xy 92.882011 53.283204) (xy 92.933111 53.420204) (xy 93.007585 53.519689) (xy 93.032002 53.585154) (xy 93.01715 53.653427) (xy 93.007586 53.668308) (xy 92.991817 53.689373) (xy 92.93311 53.767796) (xy 92.881839 53.905256) (xy 92.881712 53.905709) (xy 92.854809 54.011942) (xy 92.819269 54.072097) (xy 92.756848 54.103489) (xy 92.734604 54.1055) (xy 81.264543 54.1055) (xy 81.197504 54.085815) (xy 81.176862 54.069181) (xy 80.804819 53.697138) (xy 80.771334 53.635815) (xy 80.7685 53.609457) (xy 80.7685 47.863998) (xy 81.655693 47.863998) (xy 81.657672 47.886639) (xy 81.657845 47.894824) (xy 81.657614 47.899979) (xy 81.656684 47.920688) (xy 81.656685 47.92069) (xy 81.667691 48.001946) (xy 81.668016 48.004864) (xy 81.670532 48.033615) (xy 81.674885 48.083371) (xy 81.681624 48.108523) (xy 81.683174 48.116243) (xy 81.687093 48.145173) (xy 81.687096 48.145183) (xy 81.711413 48.220023) (xy 81.712334 48.223134) (xy 81.731877 48.296066) (xy 81.731881 48.296078) (xy 81.744275 48.322659) (xy 81.747051 48.329705) (xy 81.754966 48.354064) (xy 81.757097 48.360621) (xy 81.759544 48.365168) (xy 81.792822 48.42701) (xy 81.794416 48.430187) (xy 81.824942 48.495651) (xy 81.824943 48.495653) (xy 81.824944 48.495654) (xy 81.843668 48.522396) (xy 81.847475 48.528574) (xy 81.864443 48.560105) (xy 81.864445 48.560108) (xy 81.909397 48.616475) (xy 81.911709 48.619567) (xy 81.951251 48.676038) (xy 81.951254 48.676041) (xy 81.976659 48.701446) (xy 81.981295 48.706633) (xy 82.005686 48.737218) (xy 82.057514 48.782499) (xy 82.060557 48.785344) (xy 82.106955 48.831743) (xy 82.106956 48.831744) (xy 82.106959 48.831746) (xy 82.106962 48.831749) (xy 82.138487 48.853822) (xy 82.139109 48.854258) (xy 82.144341 48.858357) (xy 82.176282 48.886263) (xy 82.232535 48.919872) (xy 82.236258 48.922283) (xy 82.27275 48.947835) (xy 82.287338 48.958051) (xy 82.287341 48.958052) (xy 82.287346 48.958056) (xy 82.32591 48.976038) (xy 82.331493 48.978997) (xy 82.37075 49.002453) (xy 82.42901 49.024317) (xy 82.433422 49.026171) (xy 82.486924 49.05112) (xy 82.531204 49.062984) (xy 82.536939 49.064824) (xy 82.566356 49.075864) (xy 82.582839 49.082051) (xy 82.640813 49.092571) (xy 82.645778 49.093685) (xy 82.699629 49.108115) (xy 82.748602 49.112399) (xy 82.75425 49.113157) (xy 82.793352 49.120253) (xy 82.805732 49.1225) (xy 82.805733 49.1225) (xy 82.861348 49.1225) (xy 82.866749 49.122735) (xy 82.89537 49.125239) (xy 82.918998 49.127307) (xy 82.918999 49.127307) (xy 82.918999 49.127306) (xy 82.919 49.127307) (xy 82.97231 49.122643) (xy 82.975504 49.1225) (xy 82.975522 49.1225) (xy 83.023625 49.118169) (xy 83.030391 49.117561) (xy 83.138353 49.108117) (xy 83.138357 49.108116) (xy 83.138371 49.108115) (xy 83.138383 49.108111) (xy 83.138902 49.10802) (xy 83.144136 49.107324) (xy 83.144622 49.107281) (xy 83.249335 49.078381) (xy 83.351076 49.05112) (xy 83.351089 49.051113) (xy 83.358029 49.048588) (xy 83.36272 49.047089) (xy 83.362993 49.047014) (xy 83.458019 49.001251) (xy 83.550654 48.958056) (xy 83.550663 48.958049) (xy 83.55535 48.955345) (xy 83.555421 48.955468) (xy 83.566206 48.949152) (xy 83.567093 48.948725) (xy 83.649868 48.888585) (xy 83.731038 48.831749) (xy 83.731951 48.830835) (xy 83.746752 48.818193) (xy 83.750363 48.815571) (xy 83.78199 48.782492) (xy 83.818902 48.743884) (xy 83.886746 48.676041) (xy 83.886746 48.67604) (xy 83.886749 48.676038) (xy 83.889476 48.672142) (xy 83.901428 48.657568) (xy 83.906912 48.651834) (xy 83.959809 48.571697) (xy 84.013056 48.495654) (xy 84.016538 48.488185) (xy 84.025436 48.472276) (xy 84.031709 48.462774) (xy 84.068216 48.37736) (xy 84.10612 48.296076) (xy 84.109145 48.284782) (xy 84.114896 48.268147) (xy 84.120743 48.25447) (xy 84.140711 48.166978) (xy 84.163115 48.083371) (xy 84.164807 48.064024) (xy 84.166126 48.055626) (xy 84.171151 48.033615) (xy 84.175036 47.947105) (xy 84.182307 47.864) (xy 84.182307 47.863998) (xy 86.505693 47.863998) (xy 86.507672 47.886639) (xy 86.507845 47.894824) (xy 86.507614 47.899979) (xy 86.506684 47.920688) (xy 86.506685 47.92069) (xy 86.517691 48.001946) (xy 86.518016 48.004864) (xy 86.520532 48.033615) (xy 86.524885 48.083371) (xy 86.531624 48.108523) (xy 86.533174 48.116243) (xy 86.537093 48.145173) (xy 86.537096 48.145183) (xy 86.561413 48.220023) (xy 86.562334 48.223134) (xy 86.581877 48.296066) (xy 86.581881 48.296078) (xy 86.594275 48.322659) (xy 86.597051 48.329705) (xy 86.604966 48.354064) (xy 86.607097 48.360621) (xy 86.609544 48.365168) (xy 86.642822 48.42701) (xy 86.644416 48.430187) (xy 86.674942 48.495651) (xy 86.674943 48.495653) (xy 86.674944 48.495654) (xy 86.693668 48.522396) (xy 86.697475 48.528574) (xy 86.714443 48.560105) (xy 86.714445 48.560108) (xy 86.759397 48.616475) (xy 86.761709 48.619567) (xy 86.801251 48.676038) (xy 86.801254 48.676041) (xy 86.826659 48.701446) (xy 86.831295 48.706633) (xy 86.855686 48.737218) (xy 86.907514 48.782499) (xy 86.910557 48.785344) (xy 86.956955 48.831743) (xy 86.956956 48.831744) (xy 86.956959 48.831746) (xy 86.956962 48.831749) (xy 86.988487 48.853822) (xy 86.989109 48.854258) (xy 86.994341 48.858357) (xy 87.026282 48.886263) (xy 87.082535 48.919872) (xy 87.086258 48.922283) (xy 87.12275 48.947835) (xy 87.137338 48.958051) (xy 87.137341 48.958052) (xy 87.137346 48.958056) (xy 87.17591 48.976038) (xy 87.181493 48.978997) (xy 87.22075 49.002453) (xy 87.27901 49.024317) (xy 87.283422 49.026171) (xy 87.336924 49.05112) (xy 87.381204 49.062984) (xy 87.386939 49.064824) (xy 87.416356 49.075864) (xy 87.432839 49.082051) (xy 87.490813 49.092571) (xy 87.495778 49.093685) (xy 87.549629 49.108115) (xy 87.598602 49.112399) (xy 87.60425 49.113157) (xy 87.643352 49.120253) (xy 87.655732 49.1225) (xy 87.655733 49.1225) (xy 87.711348 49.1225) (xy 87.716749 49.122735) (xy 87.74537 49.125239) (xy 87.768998 49.127307) (xy 87.768999 49.127307) (xy 87.768999 49.127306) (xy 87.769 49.127307) (xy 87.82231 49.122643) (xy 87.825504 49.1225) (xy 87.825522 49.1225) (xy 87.873625 49.118169) (xy 87.880391 49.117561) (xy 87.988353 49.108117) (xy 87.988357 49.108116) (xy 87.988371 49.108115) (xy 87.988383 49.108111) (xy 87.988902 49.10802) (xy 87.994136 49.107324) (xy 87.994622 49.107281) (xy 88.099335 49.078381) (xy 88.201076 49.05112) (xy 88.201089 49.051113) (xy 88.208029 49.048588) (xy 88.21272 49.047089) (xy 88.212993 49.047014) (xy 88.308019 49.001251) (xy 88.400654 48.958056) (xy 88.400663 48.958049) (xy 88.40535 48.955345) (xy 88.405421 48.955468) (xy 88.416206 48.949152) (xy 88.417093 48.948725) (xy 88.499868 48.888585) (xy 88.581038 48.831749) (xy 88.581951 48.830835) (xy 88.596752 48.818193) (xy 88.600363 48.815571) (xy 88.63199 48.782492) (xy 88.668902 48.743884) (xy 88.736746 48.676041) (xy 88.736746 48.67604) (xy 88.736749 48.676038) (xy 88.739476 48.672142) (xy 88.751428 48.657568) (xy 88.756912 48.651834) (xy 88.809809 48.571697) (xy 88.863056 48.495654) (xy 88.866538 48.488185) (xy 88.875436 48.472276) (xy 88.881709 48.462774) (xy 88.918216 48.37736) (xy 88.95612 48.296076) (xy 88.959145 48.284782) (xy 88.964896 48.268147) (xy 88.970743 48.25447) (xy 88.990711 48.166978) (xy 89.013115 48.083371) (xy 89.014807 48.064024) (xy 89.016126 48.055626) (xy 89.021151 48.033615) (xy 89.025036 47.947105) (xy 89.032307 47.864) (xy 89.030327 47.841368) (xy 89.030153 47.833173) (xy 89.030864 47.817343) (xy 89.031315 47.807309) (xy 89.020305 47.726042) (xy 89.019981 47.723125) (xy 89.01908 47.712827) (xy 89.013115 47.644629) (xy 89.006377 47.619483) (xy 89.004825 47.611753) (xy 89.001216 47.585116) (xy 89.000906 47.582825) (xy 88.976587 47.507982) (xy 88.975671 47.504889) (xy 88.96143 47.451741) (xy 88.956123 47.431933) (xy 88.956119 47.431923) (xy 88.943722 47.405336) (xy 88.940948 47.398296) (xy 88.930903 47.367379) (xy 88.930902 47.367377) (xy 88.930899 47.36737) (xy 88.895167 47.30097) (xy 88.893582 47.297811) (xy 88.863056 47.232347) (xy 88.860183 47.228244) (xy 88.844337 47.205613) (xy 88.840523 47.199424) (xy 88.823555 47.167892) (xy 88.778594 47.111513) (xy 88.776279 47.108417) (xy 88.775453 47.107238) (xy 88.744899 47.063601) (xy 88.73675 47.051963) (xy 88.71134 47.026553) (xy 88.706702 47.021364) (xy 88.682312 46.99078) (xy 88.630491 46.945505) (xy 88.627442 46.942655) (xy 88.581039 46.896251) (xy 88.548891 46.873741) (xy 88.543656 46.869641) (xy 88.511718 46.841737) (xy 88.455486 46.808139) (xy 88.451725 46.805704) (xy 88.41398 46.779275) (xy 88.400654 46.769944) (xy 88.38694 46.763549) (xy 88.3621 46.751965) (xy 88.356501 46.748997) (xy 88.325701 46.730596) (xy 88.31725 46.725547) (xy 88.258988 46.703681) (xy 88.254588 46.701833) (xy 88.222893 46.687053) (xy 88.201077 46.67688) (xy 88.201065 46.676876) (xy 88.156793 46.665013) (xy 88.151053 46.663172) (xy 88.10516 46.645948) (xy 88.054115 46.636684) (xy 88.047191 46.635428) (xy 88.042217 46.634312) (xy 87.988372 46.619885) (xy 87.97637 46.618834) (xy 87.939403 46.6156) (xy 87.933741 46.61484) (xy 87.898998 46.608536) (xy 87.882267 46.6055) (xy 87.882266 46.6055) (xy 87.826652 46.6055) (xy 87.82125 46.605264) (xy 87.792629 46.60276) (xy 87.769002 46.600693) (xy 87.768997 46.600693) (xy 87.715728 46.605353) (xy 87.712489 46.605499) (xy 87.657608 46.610438) (xy 87.549618 46.619885) (xy 87.549041 46.619987) (xy 87.543889 46.620672) (xy 87.543386 46.620717) (xy 87.543369 46.62072) (xy 87.438664 46.649618) (xy 87.336918 46.676881) (xy 87.329944 46.679418) (xy 87.325268 46.680912) (xy 87.325022 46.680979) (xy 87.325011 46.680984) (xy 87.229964 46.726755) (xy 87.137352 46.769941) (xy 87.132658 46.772651) (xy 87.132587 46.772529) (xy 87.121824 46.778833) (xy 87.120908 46.779274) (xy 87.120902 46.779277) (xy 87.038119 46.839423) (xy 86.956958 46.896254) (xy 86.956027 46.897185) (xy 86.941264 46.909793) (xy 86.937641 46.912425) (xy 86.937631 46.912434) (xy 86.869097 46.984115) (xy 86.801247 47.051966) (xy 86.801246 47.051967) (xy 86.798506 47.05588) (xy 86.786581 47.070419) (xy 86.781089 47.076163) (xy 86.781085 47.076169) (xy 86.728183 47.156313) (xy 86.674943 47.232347) (xy 86.674941 47.232352) (xy 86.671462 47.239812) (xy 86.662576 47.255702) (xy 86.656292 47.265222) (xy 86.656291 47.265224) (xy 86.61978 47.350644) (xy 86.581882 47.431917) (xy 86.58188 47.431923) (xy 86.578852 47.443222) (xy 86.573102 47.459854) (xy 86.567259 47.473525) (xy 86.567256 47.473533) (xy 86.547288 47.561021) (xy 86.524885 47.644626) (xy 86.524884 47.644632) (xy 86.523192 47.66397) (xy 86.521873 47.672366) (xy 86.516849 47.694385) (xy 86.512963 47.780894) (xy 86.505693 47.863996) (xy 86.505693 47.863998) (xy 84.182307 47.863998) (xy 84.180327 47.841368) (xy 84.180153 47.833173) (xy 84.180864 47.817343) (xy 84.181315 47.807309) (xy 84.170305 47.726042) (xy 84.169981 47.723125) (xy 84.16908 47.712827) (xy 84.163115 47.644629) (xy 84.156377 47.619483) (xy 84.154825 47.611753) (xy 84.151216 47.585116) (xy 84.150906 47.582825) (xy 84.126587 47.507982) (xy 84.125671 47.504889) (xy 84.11143 47.451741) (xy 84.106123 47.431933) (xy 84.106119 47.431923) (xy 84.093722 47.405336) (xy 84.090948 47.398296) (xy 84.080903 47.367379) (xy 84.080902 47.367377) (xy 84.080899 47.36737) (xy 84.045167 47.30097) (xy 84.043582 47.297811) (xy 84.013056 47.232347) (xy 84.010183 47.228244) (xy 83.994337 47.205613) (xy 83.990523 47.199424) (xy 83.973555 47.167892) (xy 83.928594 47.111513) (xy 83.926279 47.108417) (xy 83.925453 47.107238) (xy 83.894899 47.063601) (xy 83.88675 47.051963) (xy 83.86134 47.026553) (xy 83.856702 47.021364) (xy 83.832312 46.99078) (xy 83.780491 46.945505) (xy 83.777442 46.942655) (xy 83.731039 46.896251) (xy 83.698891 46.873741) (xy 83.693656 46.869641) (xy 83.661718 46.841737) (xy 83.605486 46.808139) (xy 83.601725 46.805704) (xy 83.56398 46.779275) (xy 83.550654 46.769944) (xy 83.53694 46.763549) (xy 83.5121 46.751965) (xy 83.506501 46.748997) (xy 83.475701 46.730596) (xy 83.46725 46.725547) (xy 83.408988 46.703681) (xy 83.404588 46.701833) (xy 83.372893 46.687053) (xy 83.351077 46.67688) (xy 83.351065 46.676876) (xy 83.306793 46.665013) (xy 83.301053 46.663172) (xy 83.25516 46.645948) (xy 83.204115 46.636684) (xy 83.197191 46.635428) (xy 83.192217 46.634312) (xy 83.138372 46.619885) (xy 83.12637 46.618834) (xy 83.089403 46.6156) (xy 83.083741 46.61484) (xy 83.048998 46.608536) (xy 83.032267 46.6055) (xy 83.032266 46.6055) (xy 82.976652 46.6055) (xy 82.97125 46.605264) (xy 82.942629 46.60276) (xy 82.919002 46.600693) (xy 82.918997 46.600693) (xy 82.865728 46.605353) (xy 82.862489 46.605499) (xy 82.807608 46.610438) (xy 82.699618 46.619885) (xy 82.699041 46.619987) (xy 82.693889 46.620672) (xy 82.693386 46.620717) (xy 82.693369 46.62072) (xy 82.588664 46.649618) (xy 82.486918 46.676881) (xy 82.479944 46.679418) (xy 82.475268 46.680912) (xy 82.475022 46.680979) (xy 82.475011 46.680984) (xy 82.379964 46.726755) (xy 82.287352 46.769941) (xy 82.282658 46.772651) (xy 82.282587 46.772529) (xy 82.271824 46.778833) (xy 82.270908 46.779274) (xy 82.270902 46.779277) (xy 82.188119 46.839423) (xy 82.106958 46.896254) (xy 82.106027 46.897185) (xy 82.091264 46.909793) (xy 82.087641 46.912425) (xy 82.087631 46.912434) (xy 82.019097 46.984115) (xy 81.951247 47.051966) (xy 81.951246 47.051967) (xy 81.948506 47.05588) (xy 81.936581 47.070419) (xy 81.931089 47.076163) (xy 81.931085 47.076169) (xy 81.878183 47.156313) (xy 81.824943 47.232347) (xy 81.824941 47.232352) (xy 81.821462 47.239812) (xy 81.812576 47.255702) (xy 81.806292 47.265222) (xy 81.806291 47.265224) (xy 81.76978 47.350644) (xy 81.731882 47.431917) (xy 81.73188 47.431923) (xy 81.728852 47.443222) (xy 81.723102 47.459854) (xy 81.717259 47.473525) (xy 81.717256 47.473533) (xy 81.697288 47.561021) (xy 81.674885 47.644626) (xy 81.674884 47.644632) (xy 81.673192 47.66397) (xy 81.671873 47.672366) (xy 81.666849 47.694385) (xy 81.662963 47.780894) (xy 81.655693 47.863996) (xy 81.655693 47.863998) (xy 80.7685 47.863998) (xy 80.7685 44.834) (xy 81.205673 44.834) (xy 81.210644 44.893994) (xy 81.212971 44.922083) (xy 81.216856 45.013543) (xy 81.216857 45.013552) (xy 81.22201 45.037461) (xy 81.22319 45.04541) (xy 81.224947 45.066617) (xy 81.224949 45.066629) (xy 81.247417 45.155353) (xy 81.26737 45.247935) (xy 81.275257 45.267561) (xy 81.277834 45.275466) (xy 81.282249 45.2929) (xy 81.282251 45.292907) (xy 81.320285 45.379616) (xy 81.356767 45.470404) (xy 81.358239 45.472794) (xy 81.366129 45.485608) (xy 81.370117 45.49322) (xy 81.376015 45.506668) (xy 81.429524 45.58857) (xy 81.482473 45.674565) (xy 81.48248 45.674574) (xy 81.489158 45.682161) (xy 81.499886 45.696267) (xy 81.503686 45.702083) (xy 81.572079 45.776377) (xy 81.634344 45.847124) (xy 81.640882 45.854552) (xy 81.640883 45.854553) (xy 81.64607 45.858741) (xy 81.659407 45.87124) (xy 81.661783 45.873822) (xy 81.711828 45.912772) (xy 81.743948 45.937772) (xy 81.791031 45.975789) (xy 81.827421 46.005173) (xy 81.827422 46.005173) (xy 81.827424 46.005175) (xy 81.830165 46.006706) (xy 81.83024 46.006748) (xy 81.845934 46.017152) (xy 81.845979 46.017187) (xy 81.845991 46.017195) (xy 81.923584 46.059185) (xy 81.940346 46.068256) (xy 82.03674 46.122105) (xy 82.036745 46.122106) (xy 82.036749 46.122109) (xy 82.03914 46.12319) (xy 82.046477 46.126448) (xy 82.046575 46.126226) (xy 82.051262 46.128281) (xy 82.051273 46.128287) (xy 82.15574 46.164151) (xy 82.262806 46.20198) (xy 82.263367 46.202076) (xy 82.268109 46.203081) (xy 82.272043 46.204078) (xy 82.272049 46.20408) (xy 82.384095 46.222777) (xy 82.49911 46.242499) (xy 82.499119 46.2425) (xy 82.735707 46.2425) (xy 82.735712 46.2425) (xy 82.768648 46.237003) (xy 82.792475 46.233028) (xy 82.797413 46.232406) (xy 82.850941 46.227851) (xy 82.857887 46.22726) (xy 82.857888 46.227259) (xy 82.857898 46.227259) (xy 82.910297 46.213614) (xy 82.915668 46.212469) (xy 82.965951 46.20408) (xy 83.023502 46.184322) (xy 83.027975 46.182973) (xy 83.089924 46.166844) (xy 83.136259 46.145898) (xy 83.141633 46.143767) (xy 83.186727 46.128287) (xy 83.243132 46.097761) (xy 83.247054 46.095816) (xy 83.308402 46.068086) (xy 83.347795 46.041459) (xy 83.352979 46.038314) (xy 83.392008 46.017195) (xy 83.392012 46.017193) (xy 83.392013 46.017192) (xy 83.392017 46.01719) (xy 83.445228 45.975772) (xy 83.448561 45.973353) (xy 83.507047 45.933825) (xy 83.539001 45.903198) (xy 83.543789 45.899058) (xy 83.57622 45.873818) (xy 83.624119 45.821784) (xy 83.626794 45.819056) (xy 83.680144 45.767925) (xy 83.704497 45.734996) (xy 83.708727 45.729877) (xy 83.724035 45.713249) (xy 83.734314 45.702083) (xy 83.774785 45.640135) (xy 83.776835 45.637189) (xy 83.785078 45.626044) (xy 83.822715 45.575157) (xy 83.839676 45.541514) (xy 83.843114 45.535549) (xy 83.861984 45.506669) (xy 83.893042 45.435861) (xy 83.894413 45.43295) (xy 83.930657 45.361067) (xy 83.940721 45.3282) (xy 83.943221 45.321466) (xy 83.955749 45.292907) (xy 83.975535 45.21477) (xy 83.976334 45.211909) (xy 84.000864 45.131815) (xy 84.00481 45.100994) (xy 84.006198 45.093684) (xy 84.013051 45.066626) (xy 84.02009 44.981672) (xy 84.031318 44.893995) (xy 84.030139 44.866249) (xy 84.030294 44.858525) (xy 84.032327 44.834) (xy 86.655673 44.834) (xy 86.660644 44.893994) (xy 86.662971 44.922083) (xy 86.666856 45.013543) (xy 86.666857 45.013552) (xy 86.67201 45.037461) (xy 86.67319 45.04541) (xy 86.674947 45.066617) (xy 86.674949 45.066629) (xy 86.697417 45.155353) (xy 86.71737 45.247935) (xy 86.725257 45.267561) (xy 86.727834 45.275466) (xy 86.732249 45.2929) (xy 86.732251 45.292907) (xy 86.770285 45.379616) (xy 86.806767 45.470404) (xy 86.808239 45.472794) (xy 86.816129 45.485608) (xy 86.820117 45.49322) (xy 86.826015 45.506668) (xy 86.879524 45.58857) (xy 86.932473 45.674565) (xy 86.93248 45.674574) (xy 86.939158 45.682161) (xy 86.949886 45.696267) (xy 86.953686 45.702083) (xy 87.022079 45.776377) (xy 87.084344 45.847124) (xy 87.090882 45.854552) (xy 87.090883 45.854553) (xy 87.09607 45.858741) (xy 87.109407 45.87124) (xy 87.111783 45.873822) (xy 87.161828 45.912772) (xy 87.193948 45.937772) (xy 87.241031 45.975789) (xy 87.277421 46.005173) (xy 87.277422 46.005173) (xy 87.277424 46.005175) (xy 87.280165 46.006706) (xy 87.28024 46.006748) (xy 87.295934 46.017152) (xy 87.295979 46.017187) (xy 87.295991 46.017195) (xy 87.373584 46.059185) (xy 87.390346 46.068256) (xy 87.48674 46.122105) (xy 87.486745 46.122106) (xy 87.486749 46.122109) (xy 87.48914 46.12319) (xy 87.496477 46.126448) (xy 87.496575 46.126226) (xy 87.501262 46.128281) (xy 87.501273 46.128287) (xy 87.60574 46.164151) (xy 87.712806 46.20198) (xy 87.713367 46.202076) (xy 87.718109 46.203081) (xy 87.722043 46.204078) (xy 87.722049 46.20408) (xy 87.834095 46.222777) (xy 87.94911 46.242499) (xy 87.949119 46.2425) (xy 88.185707 46.2425) (xy 88.185712 46.2425) (xy 88.218648 46.237003) (xy 88.242475 46.233028) (xy 88.247413 46.232406) (xy 88.300941 46.227851) (xy 88.307887 46.22726) (xy 88.307888 46.227259) (xy 88.307898 46.227259) (xy 88.360297 46.213614) (xy 88.365668 46.212469) (xy 88.415951 46.20408) (xy 88.473502 46.184322) (xy 88.477975 46.182973) (xy 88.539924 46.166844) (xy 88.586259 46.145898) (xy 88.591633 46.143767) (xy 88.636727 46.128287) (xy 88.693132 46.097761) (xy 88.697054 46.095816) (xy 88.758402 46.068086) (xy 88.797795 46.041459) (xy 88.802979 46.038314) (xy 88.842008 46.017195) (xy 88.842012 46.017193) (xy 88.842013 46.017192) (xy 88.842017 46.01719) (xy 88.895228 45.975772) (xy 88.898561 45.973353) (xy 88.957047 45.933825) (xy 88.989001 45.903198) (xy 88.993789 45.899058) (xy 89.02622 45.873818) (xy 89.074119 45.821784) (xy 89.076794 45.819056) (xy 89.130144 45.767925) (xy 89.154497 45.734996) (xy 89.158727 45.729877) (xy 89.174035 45.713249) (xy 89.184314 45.702083) (xy 89.224785 45.640135) (xy 89.226835 45.637189) (xy 89.235078 45.626044) (xy 89.272715 45.575157) (xy 89.289676 45.541514) (xy 89.293114 45.535549) (xy 89.311984 45.506669) (xy 89.343042 45.435861) (xy 89.344413 45.43295) (xy 89.380657 45.361067) (xy 89.390721 45.3282) (xy 89.393221 45.321466) (xy 89.405749 45.292907) (xy 89.425535 45.21477) (xy 89.426334 45.211909) (xy 89.450864 45.131815) (xy 89.45481 45.100994) (xy 89.456198 45.093684) (xy 89.463051 45.066626) (xy 89.47009 44.981672) (xy 89.481318 44.893995) (xy 89.480139 44.866249) (xy 89.480294 44.858525) (xy 89.482327 44.834) (xy 89.480829 44.815927) (xy 89.475028 44.745916) (xy 89.471144 44.65446) (xy 89.471143 44.654457) (xy 89.471143 44.654449) (xy 89.465987 44.63053) (xy 89.464808 44.622586) (xy 89.463051 44.601379) (xy 89.463051 44.601374) (xy 89.440582 44.512646) (xy 89.42063 44.420068) (xy 89.412735 44.400424) (xy 89.410167 44.392544) (xy 89.405749 44.375093) (xy 89.367714 44.288383) (xy 89.331233 44.197596) (xy 89.321867 44.182386) (xy 89.317882 44.174778) (xy 89.317102 44.173) (xy 89.311984 44.161331) (xy 89.258475 44.079429) (xy 89.23405 44.03976) (xy 89.205529 43.993439) (xy 89.205528 43.993438) (xy 89.205524 43.993431) (xy 89.205518 43.993424) (xy 89.205515 43.99342) (xy 89.198839 43.985834) (xy 89.188118 43.971739) (xy 89.184315 43.965919) (xy 89.184314 43.965917) (xy 89.11592 43.891622) (xy 89.047119 43.813449) (xy 89.047118 43.813448) (xy 89.047114 43.813444) (xy 89.041929 43.809258) (xy 89.028597 43.796765) (xy 89.02622 43.794182) (xy 88.944051 43.730227) (xy 88.860576 43.662825) (xy 88.860574 43.662823) (xy 88.860568 43.662819) (xy 88.85775 43.661245) (xy 88.84207 43.650851) (xy 88.84202 43.650812) (xy 88.842018 43.650811) (xy 88.842017 43.65081) (xy 88.747653 43.599743) (xy 88.739397 43.595131) (xy 88.651259 43.545894) (xy 88.648999 43.544873) (xy 88.641519 43.541551) (xy 88.641422 43.541773) (xy 88.636725 43.539712) (xy 88.532259 43.503848) (xy 88.425197 43.466021) (xy 88.425196 43.46602) (xy 88.425194 43.46602) (xy 88.425192 43.466019) (xy 88.425183 43.466017) (xy 88.424633 43.465923) (xy 88.419913 43.464922) (xy 88.415966 43.463923) (xy 88.415953 43.46392) (xy 88.415951 43.46392) (xy 88.303904 43.445222) (xy 88.18889 43.4255) (xy 88.188881 43.4255) (xy 88.185712 43.4255) (xy 87.952288 43.4255) (xy 87.952287 43.4255) (xy 87.895529 43.43497) (xy 87.890587 43.435592) (xy 87.85683 43.438465) (xy 87.8301 43.440741) (xy 87.830097 43.440741) (xy 87.777733 43.454376) (xy 87.772313 43.455532) (xy 87.722049 43.463919) (xy 87.664512 43.483671) (xy 87.660005 43.485029) (xy 87.614895 43.496776) (xy 87.598076 43.501156) (xy 87.598073 43.501157) (xy 87.59807 43.501158) (xy 87.551758 43.522092) (xy 87.546359 43.524233) (xy 87.531763 43.529244) (xy 87.501273 43.539712) (xy 87.444879 43.57023) (xy 87.44091 43.572198) (xy 87.379597 43.599914) (xy 87.379595 43.599915) (xy 87.340209 43.626535) (xy 87.335002 43.629693) (xy 87.327479 43.633765) (xy 87.295978 43.650812) (xy 87.24278 43.692218) (xy 87.239425 43.694653) (xy 87.209349 43.714981) (xy 87.180951 43.734176) (xy 87.180948 43.734179) (xy 87.149012 43.764786) (xy 87.144193 43.768952) (xy 87.111781 43.794181) (xy 87.11178 43.794182) (xy 87.063898 43.846193) (xy 87.061184 43.848962) (xy 87.007857 43.900073) (xy 86.983503 43.932999) (xy 86.97927 43.938123) (xy 86.953684 43.965918) (xy 86.953681 43.965922) (xy 86.913222 44.02785) (xy 86.911166 44.030806) (xy 86.865287 44.092839) (xy 86.865286 44.09284) (xy 86.848333 44.126463) (xy 86.844875 44.132463) (xy 86.826015 44.161332) (xy 86.794978 44.232089) (xy 86.793562 44.235096) (xy 86.757342 44.306933) (xy 86.757341 44.306934) (xy 86.74728 44.339786) (xy 86.744775 44.346537) (xy 86.732249 44.375094) (xy 86.732249 44.375095) (xy 86.712469 44.453203) (xy 86.711649 44.456137) (xy 86.687137 44.536178) (xy 86.687135 44.53619) (xy 86.683191 44.566986) (xy 86.681795 44.574335) (xy 86.67495 44.601367) (xy 86.674948 44.601379) (xy 86.667909 44.686327) (xy 86.656682 44.774003) (xy 86.656681 44.774004) (xy 86.657859 44.801731) (xy 86.657703 44.809485) (xy 86.655673 44.833995) (xy 86.655673 44.834) (xy 84.032327 44.834) (xy 84.030829 44.815927) (xy 84.025028 44.745916) (xy 84.021144 44.65446) (xy 84.021143 44.654457) (xy 84.021143 44.654449) (xy 84.015987 44.63053) (xy 84.014808 44.622586) (xy 84.013051 44.601379) (xy 84.013051 44.601374) (xy 83.990582 44.512646) (xy 83.97063 44.420068) (xy 83.962735 44.400424) (xy 83.960167 44.392544) (xy 83.955749 44.375093) (xy 83.917714 44.288383) (xy 83.881233 44.197596) (xy 83.871867 44.182386) (xy 83.867882 44.174778) (xy 83.867102 44.173) (xy 83.861984 44.161331) (xy 83.808475 44.079429) (xy 83.78405 44.03976) (xy 83.755529 43.993439) (xy 83.755528 43.993438) (xy 83.755524 43.993431) (xy 83.755518 43.993424) (xy 83.755515 43.99342) (xy 83.748839 43.985834) (xy 83.738118 43.971739) (xy 83.734315 43.965919) (xy 83.734314 43.965917) (xy 83.66592 43.891622) (xy 83.597119 43.813449) (xy 83.597118 43.813448) (xy 83.597114 43.813444) (xy 83.591929 43.809258) (xy 83.578597 43.796765) (xy 83.57622 43.794182) (xy 83.494051 43.730227) (xy 83.410576 43.662825) (xy 83.410574 43.662823) (xy 83.410568 43.662819) (xy 83.40775 43.661245) (xy 83.39207 43.650851) (xy 83.39202 43.650812) (xy 83.392018 43.650811) (xy 83.392017 43.65081) (xy 83.297653 43.599743) (xy 83.289397 43.595131) (xy 83.201259 43.545894) (xy 83.198999 43.544873) (xy 83.191519 43.541551) (xy 83.191422 43.541773) (xy 83.186725 43.539712) (xy 83.082259 43.503848) (xy 82.975197 43.466021) (xy 82.975196 43.46602) (xy 82.975194 43.46602) (xy 82.975192 43.466019) (xy 82.975183 43.466017) (xy 82.974633 43.465923) (xy 82.969913 43.464922) (xy 82.965966 43.463923) (xy 82.965953 43.46392) (xy 82.965951 43.46392) (xy 82.853904 43.445222) (xy 82.73889 43.4255) (xy 82.738881 43.4255) (xy 82.735712 43.4255) (xy 82.502288 43.4255) (xy 82.502287 43.4255) (xy 82.445529 43.43497) (xy 82.440587 43.435592) (xy 82.40683 43.438465) (xy 82.3801 43.440741) (xy 82.380097 43.440741) (xy 82.327733 43.454376) (xy 82.322313 43.455532) (xy 82.272049 43.463919) (xy 82.214512 43.483671) (xy 82.210005 43.485029) (xy 82.164895 43.496776) (xy 82.148076 43.501156) (xy 82.148073 43.501157) (xy 82.14807 43.501158) (xy 82.101758 43.522092) (xy 82.096359 43.524233) (xy 82.081763 43.529244) (xy 82.051273 43.539712) (xy 81.994879 43.57023) (xy 81.99091 43.572198) (xy 81.929597 43.599914) (xy 81.929595 43.599915) (xy 81.890209 43.626535) (xy 81.885002 43.629693) (xy 81.877479 43.633765) (xy 81.845978 43.650812) (xy 81.79278 43.692218) (xy 81.789425 43.694653) (xy 81.759349 43.714981) (xy 81.730951 43.734176) (xy 81.730948 43.734179) (xy 81.699012 43.764786) (xy 81.694193 43.768952) (xy 81.661781 43.794181) (xy 81.66178 43.794182) (xy 81.613898 43.846193) (xy 81.611184 43.848962) (xy 81.557857 43.900073) (xy 81.533503 43.932999) (xy 81.52927 43.938123) (xy 81.503684 43.965918) (xy 81.503681 43.965922) (xy 81.463222 44.02785) (xy 81.461166 44.030806) (xy 81.415287 44.092839) (xy 81.415286 44.09284) (xy 81.398333 44.126463) (xy 81.394875 44.132463) (xy 81.376015 44.161332) (xy 81.344978 44.232089) (xy 81.343562 44.235096) (xy 81.307342 44.306933) (xy 81.307341 44.306934) (xy 81.29728 44.339786) (xy 81.294775 44.346537) (xy 81.282249 44.375094) (xy 81.282249 44.375095) (xy 81.262469 44.453203) (xy 81.261649 44.456137) (xy 81.237137 44.536178) (xy 81.237135 44.53619) (xy 81.233191 44.566986) (xy 81.231795 44.574335) (xy 81.22495 44.601367) (xy 81.224948 44.601379) (xy 81.217909 44.686327) (xy 81.206682 44.774003) (xy 81.206681 44.774004) (xy 81.207859 44.801731) (xy 81.207703 44.809485) (xy 81.205673 44.833995) (xy 81.205673 44.834) (xy 80.7685 44.834) (xy 80.7685 43.595131) (xy 80.769809 43.577161) (xy 80.773341 43.553045) (xy 80.768736 43.500416) (xy 80.7685 43.495009) (xy 80.7685 43.486661) (xy 80.768499 43.48665) (xy 80.764652 43.45374) (xy 80.760889 43.410728) (xy 80.757887 43.376411) (xy 80.757885 43.376407) (xy 80.756427 43.36934) (xy 80.756473 43.36933) (xy 80.75479 43.361739) (xy 80.754744 43.361751) (xy 80.75308 43.354732) (xy 80.753079 43.354724) (xy 80.726526 43.281771) (xy 80.702114 43.208099) (xy 80.702113 43.208097) (xy 80.699061 43.201552) (xy 80.699105 43.201531) (xy 80.695717 43.194532) (xy 80.695674 43.194554) (xy 80.692436 43.188106) (xy 80.649766 43.123231) (xy 80.60903 43.057186) (xy 80.604553 43.051524) (xy 80.60459 43.051493) (xy 80.599681 43.045466) (xy 80.599645 43.045497) (xy 80.595005 43.039968) (xy 80.595003 43.039966) (xy 80.595001 43.039963) (xy 80.563891 43.010612) (xy 80.538517 42.986672) (xy 80.047052 42.495208) (xy 80.03527 42.481575) (xy 80.02072 42.462031) (xy 80.020719 42.46203) (xy 80.020717 42.462027) (xy 80.015402 42.457567) (xy 79.980235 42.428057) (xy 79.976246 42.424402) (xy 79.97035 42.418506) (xy 79.970349 42.418505) (xy 79.948317 42.401084) (xy 79.94435 42.397947) (xy 79.88489 42.348055) (xy 79.884888 42.348053) (xy 79.884883 42.34805) (xy 79.878853 42.344084) (xy 79.878878 42.344044) (xy 79.872317 42.339864) (xy 79.872293 42.339905) (xy 79.866152 42.336116) (xy 79.795788 42.303305) (xy 79.726433 42.268474) (xy 79.719649 42.266005) (xy 79.719664 42.265961) (xy 79.712319 42.263407) (xy 79.712305 42.263452) (xy 79.705453 42.261181) (xy 79.667425 42.253329) (xy 79.629397 42.245477) (xy 79.553904 42.227585) (xy 79.553902 42.227585) (xy 79.553894 42.227583) (xy 79.54673 42.226746) (xy 79.546735 42.226697) (xy 79.539005 42.225907) (xy 79.539001 42.225955) (xy 79.53181 42.225325) (xy 79.454168 42.227585) (xy 72.535944 42.227585) (xy 72.517974 42.226276) (xy 72.493856 42.222743) (xy 72.448679 42.226697) (xy 72.441223 42.227349) (xy 72.435822 42.227585) (xy 72.427469 42.227585) (xy 72.394553 42.231432) (xy 72.317224 42.238197) (xy 72.310156 42.239657) (xy 72.310146 42.239613) (xy 72.302556 42.241295) (xy 72.302567 42.241339) (xy 72.295543 42.243004) (xy 72.295537 42.243005) (xy 72.295537 42.243006) (xy 72.288748 42.245477) (xy 72.222583 42.269558) (xy 72.148907 42.293972) (xy 72.14237 42.297021) (xy 72.14235 42.296979) (xy 72.135346 42.30037) (xy 72.135367 42.300411) (xy 72.128919 42.303649) (xy 72.064044 42.346318) (xy 71.998002 42.387052) (xy 71.992333 42.391535) (xy 71.992303 42.391498) (xy 71.986277 42.396407) (xy 71.986307 42.396442) (xy 71.980782 42.401078) (xy 71.927486 42.457567) (xy 71.474642 42.91041) (xy 71.461015 42.922188) (xy 71.441461 42.936746) (xy 71.407497 42.977221) (xy 71.40385 42.981202) (xy 71.397938 42.987115) (xy 71.377383 43.013111) (xy 71.327487 43.072575) (xy 71.323521 43.078606) (xy 71.323483 43.078581) (xy 71.319302 43.085143) (xy 71.319341 43.085167) (xy 71.315552 43.091309) (xy 71.28274 43.161674) (xy 71.247911 43.231025) (xy 71.245443 43.237808) (xy 71.245398 43.237791) (xy 71.242842 43.245147) (xy 71.242886 43.245162) (xy 71.240616 43.25201) (xy 71.234471 43.281771) (xy 71.224912 43.328065) (xy 71.215966 43.365812) (xy 71.207018 43.403566) (xy 71.206181 43.410734) (xy 71.206133 43.410728) (xy 71.205343 43.418459) (xy 71.20539 43.418464) (xy 71.20476 43.425653) (xy 71.20702 43.503294) (xy 71.20702 53.843436) (xy 71.187335 53.910475) (xy 71.170701 53.931117) (xy 70.092542 55.009275) (xy 70.078915 55.021053) (xy 70.059361 55.035611) (xy 70.025397 55.076086) (xy 70.02175 55.080067) (xy 70.015838 55.08598) (xy 69.995283 55.111976) (xy 69.945387 55.17144) (xy 69.941421 55.177471) (xy 69.941383 55.177446) (xy 69.937202 55.184008) (xy 69.937241 55.184032) (xy 69.933452 55.190174) (xy 69.90064 55.260539) (xy 69.865811 55.32989) (xy 69.863343 55.336673) (xy 69.863298 55.336656) (xy 69.860742 55.344012) (xy 69.860786 55.344027) (xy 69.858516 55.350875) (xy 69.850839 55.388057) (xy 69.842812 55.42693) (xy 69.830445 55.479109) (xy 69.824918 55.502431) (xy 69.824081 55.509599) (xy 69.824033 55.509593) (xy 69.823243 55.517324) (xy 69.82329 55.517329) (xy 69.82266 55.524518) (xy 69.82492 55.602159) (xy 69.82492 71.291036) (xy 69.805235 71.358075) (xy 69.788601 71.378717) (xy 68.550813 72.616504) (xy 68.537186 72.628282) (xy 68.517632 72.64284) (xy 68.483668 72.683315) (xy 68.480021 72.687296) (xy 68.474109 72.693209) (xy 68.453554 72.719205) (xy 68.403658 72.778669) (xy 68.399692 72.7847) (xy 68.399654 72.784675) (xy 68.395473 72.791237) (xy 68.395512 72.791261) (xy 68.391723 72.797403) (xy 68.358911 72.867768) (xy 68.324082 72.937119) (xy 68.321614 72.943902) (xy 68.321569 72.943885) (xy 68.319013 72.951241) (xy 68.319057 72.951256) (xy 68.316787 72.958105) (xy 68.301083 73.034159) (xy 68.299585 73.04048) (xy 68.26497 73.101173) (xy 68.203037 73.133516) (xy 68.13345 73.127241) (xy 68.078301 73.084341) (xy 68.055101 73.018435) (xy 68.054928 73.011813) (xy 68.055009 72.867768) (xy 68.072615 41.271371) (xy 68.092337 41.204343) (xy 68.145166 41.158618) (xy 68.196052 41.147442) (xy 76.340746 41.110624) (xy 98.681288 41.110624) (xy 98.687538 41.110624) ) ) ) (zone (net 74) (net_name "OA-") (layer "F.Cu") (tstamp 11066023-347f-4c71-83fc-0a5c7b4a3fa2) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30059) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 78.706472 97.460051) (xy 78.68147 97.514201) (xy 78.656469 97.561277) (xy 78.631468 97.601277) (xy 78.606467 97.634201) (xy 78.581466 97.660051) (xy 78.856472 98.161051) (xy 79.131478 97.660051) (xy 79.106476 97.634201) (xy 79.081475 97.601277) (xy 79.056474 97.561277) (xy 79.031473 97.514201) (xy 79.006472 97.460051) ) ) (filled_polygon (layer "F.Cu") (pts (xy 79.007261 97.463478) (xy 79.009607 97.466841) (xy 79.031473 97.514201) (xy 79.031479 97.514213) (xy 79.05647 97.561271) (xy 79.081473 97.601275) (xy 79.106472 97.634197) (xy 79.10648 97.634205) (xy 79.12548 97.65385) (xy 79.128768 97.662179) (xy 79.127326 97.667614) (xy 78.866728 98.142366) (xy 78.859743 98.147969) (xy 78.850842 98.146992) (xy 78.846216 98.142366) (xy 78.585617 97.667613) (xy 78.58464 97.658712) (xy 78.587461 97.653852) (xy 78.606467 97.634201) (xy 78.631468 97.601277) (xy 78.656469 97.561277) (xy 78.656473 97.561271) (xy 78.681464 97.514213) (xy 78.681464 97.514212) (xy 78.68147 97.514201) (xy 78.697066 97.480422) (xy 78.703335 97.466846) (xy 78.709914 97.460772) (xy 78.713957 97.460051) (xy 78.998988 97.460051) ) ) ) (zone (net 18) (net_name "3V3_BUS2") (layer "F.Cu") (tstamp 12931118-8460-4463-b039-ed2b79b4ad31) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30052) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 64.768999 74.68) (xy 64.728004 74.649396) (xy 64.68701 74.609095) (xy 64.646015 74.559095) (xy 64.605021 74.499396) (xy 64.564027 74.43) (xy 64.068001 74.93) (xy 64.564027 75.43) (xy 64.605021 75.360602) (xy 64.646016 75.300904) (xy 64.68701 75.250904) (xy 64.728005 75.210602) (xy 64.769 75.179999) ) ) (filled_polygon (layer "F.Cu") (pts (xy 64.5699 74.440692) (xy 64.571734 74.443047) (xy 64.605021 74.499396) (xy 64.605025 74.499403) (xy 64.605027 74.499405) (xy 64.646015 74.559095) (xy 64.687007 74.609092) (xy 64.687021 74.609107) (xy 64.727998 74.649391) (xy 64.728001 74.649393) (xy 64.728004 74.649396) (xy 64.764298 74.676491) (xy 64.768878 74.684186) (xy 64.768999 74.685866) (xy 64.768999 75.174132) (xy 64.765572 75.182405) (xy 64.764298 75.183507) (xy 64.728004 75.210601) (xy 64.728002 75.210604) (xy 64.687021 75.250891) (xy 64.687007 75.250906) (xy 64.646016 75.300904) (xy 64.605021 75.360602) (xy 64.586823 75.391408) (xy 64.571734 75.416952) (xy 64.564575 75.422332) (xy 64.555709 75.421075) (xy 64.553354 75.419241) (xy 64.310193 75.174132) (xy 64.076174 74.938239) (xy 64.072781 74.929953) (xy 64.076174 74.92176) (xy 64.553354 74.440757) (xy 64.561613 74.437298) ) ) ) (zone (net 62) (net_name "Net-(U2-GPIO15)") (layer "F.Cu") (tstamp 1a2185b8-3f84-4296-b2e1-c19efab16c0f) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30009) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 40.880878 91.850762) (xy 40.63339 91.975975) (xy 40.385903 92.063331) (xy 40.138416 92.112828) (xy 39.890929 92.124467) (xy 39.643442 92.098249) (xy 39.994816 92.948956) (xy 40.845523 93.30033) (xy 40.89502 92.977126) (xy 40.944517 92.691781) (xy 40.994015 92.444294) (xy 41.043512 92.234665) (xy 41.09301 92.062894) ) ) (filled_polygon (layer "F.Cu") (pts (xy 40.88687 91.856754) (xy 41.088128 92.058012) (xy 41.091555 92.066285) (xy 41.091098 92.069525) (xy 41.052323 92.204087) (xy 41.043512 92.234665) (xy 40.994015 92.444294) (xy 40.944517 92.691781) (xy 40.89502 92.977126) (xy 40.847779 93.285597) (xy 40.843139 93.293256) (xy 40.834443 93.295391) (xy 40.831747 93.29464) (xy 39.999307 92.950811) (xy 39.992969 92.944485) (xy 39.650948 92.116421) (xy 39.650957 92.107467) (xy 39.657295 92.101141) (xy 39.662993 92.10032) (xy 39.890929 92.124467) (xy 40.138416 92.112828) (xy 40.385903 92.063331) (xy 40.63339 91.975975) (xy 40.873318 91.854586) (xy 40.882244 91.85391) ) ) ) (zone (net 74) (net_name "OA-") (layer "F.Cu") (tstamp 1ad33393-bf0b-4e05-b8e2-8b4cb830c312) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30053) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 74.963087 97.814155) (xy 74.910425 97.752523) (xy 74.857763 97.674739) (xy 74.805101 97.5808) (xy 74.752439 97.470707) (xy 74.699778 97.344461) (xy 74.014893 97.685793) (xy 74.642377 98.125777) (xy 74.664092 98.097043) (xy 74.685808 98.072727) (xy 74.707523 98.052829) (xy 74.729239 98.037349) (xy 74.750955 98.026287) ) ) (filled_polygon (layer "F.Cu") (pts (xy 74.704269 97.355295) (xy 74.704595 97.35601) (xy 74.752439 97.470707) (xy 74.805101 97.5808) (xy 74.857763 97.674739) (xy 74.885338 97.715468) (xy 74.91042 97.752517) (xy 74.956059 97.80593) (xy 74.958828 97.814446) (xy 74.955437 97.821804) (xy 74.752266 98.024975) (xy 74.749304 98.027127) (xy 74.72924 98.037347) (xy 74.707531 98.052822) (xy 74.707515 98.052835) (xy 74.685805 98.072729) (xy 74.685803 98.072731) (xy 74.664093 98.097042) (xy 74.649184 98.116769) (xy 74.641462 98.121303) (xy 74.633133 98.119295) (xy 74.030986 97.697077) (xy 74.026179 97.689521) (xy 74.028123 97.68078) (xy 74.032481 97.677027) (xy 74.688579 97.350041) (xy 74.697511 97.349419) ) ) ) (zone (net 5) (net_name "Net-(J3-Pin_3)") (layer "F.Cu") (tstamp 1d6e4c87-5778-4c6c-b9b3-97681fe7bc60) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30031) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 94.570545 104.576098) (xy 94.684945 104.704934) (xy 94.74844 104.809831) (xy 94.785905 104.912804) (xy 94.822213 105.035868) (xy 94.882239 105.201038) (xy 95.668244 104.876464) (xy 95.342256 104.090459) (xy 95.235863 104.1513) (xy 95.152205 104.217852) (xy 95.079926 104.267193) (xy 95.007675 104.276398) (xy 94.924098 104.222545) ) ) (filled_polygon (layer "F.Cu") (pts (xy 95.346693 104.101399) (xy 95.347343 104.102725) (xy 95.663754 104.86564) (xy 95.663758 104.874595) (xy 95.657429 104.880929) (xy 95.657413 104.880936) (xy 94.893528 105.196375) (xy 94.884573 105.196366) (xy 94.878248 105.190027) (xy 94.878075 105.189581) (xy 94.822273 105.036035) (xy 94.822165 105.035705) (xy 94.817672 105.020478) (xy 94.785905 104.912804) (xy 94.74844 104.809831) (xy 94.720883 104.764306) (xy 94.684947 104.704936) (xy 94.667514 104.685304) (xy 94.577864 104.58434) (xy 94.574935 104.575881) (xy 94.57834 104.568302) (xy 94.917424 104.229218) (xy 94.925696 104.225792) (xy 94.93203 104.227656) (xy 95.007675 104.276398) (xy 95.079926 104.267193) (xy 95.135554 104.229219) (xy 95.152203 104.217854) (xy 95.191321 104.186733) (xy 95.235164 104.151855) (xy 95.236633 104.150859) (xy 95.33073 104.097049) (xy 95.339611 104.095918) ) ) ) (zone (net 75) (net_name "OA+") (layer "F.Cu") (tstamp 1dec93bc-6ab0-48df-b92e-78316cde3828) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30061) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 80.906396 96.059949) (xy 80.931397 96.005798) (xy 80.956398 95.958722) (xy 80.981399 95.918722) (xy 81.0064 95.885798) (xy 81.031402 95.859949) (xy 80.756396 95.358949) (xy 80.48139 95.859949) (xy 80.506391 95.885798) (xy 80.531392 95.918722) (xy 80.556393 95.958722) (xy 80.581394 96.005798) (xy 80.606396 96.059949) ) ) (filled_polygon (layer "F.Cu") (pts (xy 80.762026 95.373007) (xy 80.766652 95.377633) (xy 81.02725 95.852385) (xy 81.028227 95.861286) (xy 81.025404 95.866149) (xy 81.006396 95.885802) (xy 80.981397 95.918723) (xy 80.956394 95.958728) (xy 80.931403 96.005786) (xy 80.909533 96.053153) (xy 80.902954 96.059228) (xy 80.898911 96.059949) (xy 80.61388 96.059949) (xy 80.605607 96.056522) (xy 80.603258 96.053153) (xy 80.581388 96.005786) (xy 80.556397 95.958728) (xy 80.531393 95.918723) (xy 80.506394 95.885801) (xy 80.506386 95.885793) (xy 80.487387 95.866149) (xy 80.484099 95.85782) (xy 80.48554 95.852388) (xy 80.74614 95.377632) (xy 80.753125 95.37203) ) ) ) (zone (net 31) (net_name "VBUS2") (layer "F.Cu") (tstamp 21c1d8ad-afc9-4779-8fae-d0cd5b0e1c2a) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30013) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 56.725523 44.938249) (xy 56.765523 45.020302) (xy 56.805523 45.121328) (xy 56.845522 45.241328) (xy 56.885522 45.380302) (xy 56.925523 45.538249) (xy 57.776523 44.688249) (xy 56.925523 43.838249) (xy 56.885522 43.996195) (xy 56.845522 44.135169) (xy 56.805523 44.255169) (xy 56.765523 44.356195) (xy 56.725523 44.438249) ) ) (filled_polygon (layer "F.Cu") (pts (xy 56.940081 43.85279) (xy 57.768235 44.679971) (xy 57.771667 44.688242) (xy 57.768245 44.696517) (xy 57.768235 44.696527) (xy 56.940081 45.523707) (xy 56.931806 45.527129) (xy 56.923535 45.523697) (xy 56.920471 45.518301) (xy 56.885522 45.380302) (xy 56.845522 45.241328) (xy 56.805525 45.121332) (xy 56.765524 45.020305) (xy 56.726706 44.940675) (xy 56.725523 44.935548) (xy 56.725523 44.440949) (xy 56.726706 44.435822) (xy 56.765524 44.356192) (xy 56.805525 44.255165) (xy 56.845522 44.135169) (xy 56.885522 43.996195) (xy 56.920471 43.858196) (xy 56.925824 43.851017) (xy 56.934685 43.849726) ) ) ) (zone (net 68) (net_name "UART B RX") (layer "F.Cu") (tstamp 22979021-5ea3-45f9-8f96-5f4bc05b014f) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30049) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 63.66 84.07) (xy 63.717168 84.075035) (xy 63.774337 84.083071) (xy 63.831506 84.094107) (xy 63.888675 84.108143) (xy 63.945844 84.125179) (xy 64.836 83.84111) (xy 64.01 83.54111) (xy 63.939999 83.552888) (xy 63.869999 83.561666) (xy 63.8 83.567444) (xy 63.73 83.570222) (xy 63.66 83.57) ) ) (filled_polygon (layer "F.Cu") (pts (xy 64.012896 83.542162) (xy 64.321126 83.65411) (xy 64.803751 83.829397) (xy 64.810357 83.835442) (xy 64.810754 83.844388) (xy 64.804709 83.850994) (xy 64.803314 83.85154) (xy 63.949283 84.124081) (xy 63.942385 84.124148) (xy 63.888688 84.108146) (xy 63.888689 84.108147) (xy 63.888685 84.108146) (xy 63.888675 84.108143) (xy 63.831506 84.094107) (xy 63.774337 84.083071) (xy 63.717168 84.075035) (xy 63.717162 84.075034) (xy 63.717159 84.075034) (xy 63.717158 84.075034) (xy 63.670674 84.07094) (xy 63.662733 84.0668) (xy 63.66 84.059285) (xy 63.66 83.581737) (xy 63.663427 83.573464) (xy 63.671699 83.570037) (xy 63.73 83.570222) (xy 63.73 83.570221) (xy 63.730001 83.570222) (xy 63.8 83.567444) (xy 63.869999 83.561666) (xy 63.939999 83.552888) (xy 64.006962 83.541621) ) ) ) (zone (net 2) (net_name "Net-(J2-Pin_1)") (layer "F.Cu") (tstamp 24ddc7af-169c-408a-940c-c9fa59c1422a) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30015) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 59.681042 100.072) (xy 59.721042 100.139093) (xy 59.761042 100.222228) (xy 59.801041 100.321403) (xy 59.841041 100.436619) (xy 59.881042 100.567876) (xy 60.732042 99.717876) (xy 59.881042 98.948024) (xy 59.841041 99.112133) (xy 59.801041 99.256586) (xy 59.761042 99.381381) (xy 59.721042 99.486519) (xy 59.681042 99.572) ) ) (filled_polygon (layer "F.Cu") (pts (xy 59.895606 98.961199) (xy 60.476298 99.486519) (xy 60.722915 99.709619) (xy 60.726751 99.71771) (xy 60.723742 99.726144) (xy 60.723334 99.726573) (xy 59.894823 100.55411) (xy 59.886548 100.557532) (xy 59.878277 100.5541) (xy 59.875364 100.549244) (xy 59.841041 100.436619) (xy 59.801041 100.321403) (xy 59.80104 100.321399) (xy 59.80104 100.321398) (xy 59.761044 100.222232) (xy 59.721043 100.139096) (xy 59.721042 100.139093) (xy 59.682692 100.074767) (xy 59.681042 100.068776) (xy 59.681042 99.574601) (xy 59.682145 99.569642) (xy 59.721042 99.486518) (xy 59.761042 99.381381) (xy 59.801041 99.256586) (xy 59.841041 99.112133) (xy 59.876391 98.967104) (xy 59.881679 98.959879) (xy 59.890529 98.958509) ) ) ) (zone (net 76) (net_name "OB-") (layer "F.Cu") (tstamp 255cd998-9bec-4086-8092-105a9915ec75) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30056) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 44.26986 97.470051) (xy 44.244858 97.524201) (xy 44.219857 97.571277) (xy 44.194856 97.611277) (xy 44.169855 97.644201) (xy 44.144854 97.670051) (xy 44.41986 98.171051) (xy 44.694866 97.670051) (xy 44.669864 97.644201) (xy 44.644863 97.611277) (xy 44.619862 97.571277) (xy 44.594861 97.524201) (xy 44.56986 97.470051) ) ) (filled_polygon (layer "F.Cu") (pts (xy 44.570649 97.473478) (xy 44.572995 97.476841) (xy 44.594861 97.524201) (xy 44.594867 97.524213) (xy 44.619858 97.571271) (xy 44.644861 97.611275) (xy 44.66986 97.644197) (xy 44.669868 97.644205) (xy 44.688868 97.66385) (xy 44.692156 97.672179) (xy 44.690714 97.677614) (xy 44.430116 98.152366) (xy 44.423131 98.157969) (xy 44.41423 98.156992) (xy 44.409604 98.152366) (xy 44.149005 97.677613) (xy 44.148028 97.668712) (xy 44.150849 97.663852) (xy 44.169855 97.644201) (xy 44.194856 97.611277) (xy 44.219857 97.571277) (xy 44.219861 97.571271) (xy 44.244852 97.524213) (xy 44.244852 97.524212) (xy 44.244858 97.524201) (xy 44.260454 97.490422) (xy 44.266723 97.476846) (xy 44.273302 97.470772) (xy 44.277345 97.470051) (xy 44.562376 97.470051) ) ) ) (zone (net 73) (net_name "/AD-") (layer "F.Cu") (tstamp 2566e522-8dab-498e-b0e6-919516e00873) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30039) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 76.938134 92.013734) (xy 76.778438 92.127865) (xy 76.636949 92.152449) (xy 76.494366 92.136463) (xy 76.33139 92.128887) (xy 76.128719 92.178702) (xy 76.453293 92.964707) (xy 77.239298 92.638719) (xy 77.184672 92.535199) (xy 77.130043 92.452116) (xy 77.093824 92.379508) (xy 77.094428 92.307412) (xy 77.150266 92.225866) ) ) (filled_polygon (layer "F.Cu") (pts (xy 76.945144 92.020744) (xy 77.143397 92.218997) (xy 77.146824 92.22727) (xy 77.144778 92.23388) (xy 77.094428 92.307411) (xy 77.094428 92.307412) (xy 77.093824 92.379508) (xy 77.130043 92.452116) (xy 77.184524 92.534974) (xy 77.184796 92.535435) (xy 77.22031 92.602736) (xy 77.233308 92.627368) (xy 77.234138 92.636284) (xy 77.22842 92.643176) (xy 77.227442 92.643635) (xy 76.464116 92.960217) (xy 76.455161 92.960221) (xy 76.448827 92.953892) (xy 76.44882 92.953876) (xy 76.320519 92.643176) (xy 76.133913 92.19128) (xy 76.133922 92.182326) (xy 76.140261 92.176001) (xy 76.141923 92.175456) (xy 76.329752 92.129289) (xy 76.333078 92.128965) (xy 76.494197 92.136455) (xy 76.494551 92.136484) (xy 76.636946 92.152449) (xy 76.636947 92.152448) (xy 76.636949 92.152449) (xy 76.778438 92.127865) (xy 76.930069 92.019497) (xy 76.938791 92.017476) ) ) ) (zone (net 34) (net_name "VBUS1") (layer "F.Cu") (tstamp 27c989c5-12ee-4562-afa9-c68d6855b37c) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30027) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 95.284 44.454) (xy 95.147229 44.436834) (xy 95.060896 44.388463) (xy 94.998052 44.313569) (xy 94.93175 44.21684) (xy 94.835041 44.102959) (xy 94.233 44.704) (xy 94.835041 45.305041) (xy 94.93175 45.191159) (xy 94.998052 45.094429) (xy 95.060896 45.019536) (xy 95.147229 44.971164) (xy 95.284 44.954) ) ) (filled_polygon (layer "F.Cu") (pts (xy 94.842612 44.111932) (xy 94.843243 44.112617) (xy 94.931561 44.216617) (xy 94.931914 44.21708) (xy 94.998052 44.313569) (xy 95.060896 44.388463) (xy 95.147229 44.436834) (xy 95.273757 44.452714) (xy 95.281539 44.457144) (xy 95.284 44.464323) (xy 95.284 44.943676) (xy 95.280573 44.951949) (xy 95.273757 44.955285) (xy 95.14723 44.971163) (xy 95.060897 45.019535) (xy 94.998051 45.094429) (xy 94.931916 45.190916) (xy 94.93155 45.191395) (xy 94.84325 45.295374) (xy 94.835283 45.299462) (xy 94.826759 45.296719) (xy 94.826066 45.296081) (xy 94.721206 45.191395) (xy 94.241292 44.712278) (xy 94.237859 44.70401) (xy 94.241278 44.695735) (xy 94.826067 44.111917) (xy 94.834342 44.108498) ) ) ) (zone (net 62) (net_name "Net-(U2-GPIO15)") (layer "F.Cu") (tstamp 2e3e775b-1606-4239-be85-a0b60730962d) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30044) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 38.403087 95.369781) (xy 38.250295 95.459924) (xy 38.097504 95.528318) (xy 37.944713 95.574962) (xy 37.791922 95.599856) (xy 37.639131 95.603) (xy 37.845293 96.116207) (xy 38.546 96.152376) (xy 38.559843 96.003805) (xy 38.573687 95.872473) (xy 38.587531 95.75838) (xy 38.601375 95.661527) (xy 38.615219 95.581913) ) ) (filled_polygon (layer "F.Cu") (pts (xy 38.409497 95.376191) (xy 38.610924 95.577618) (xy 38.614351 95.585891) (xy 38.614178 95.587895) (xy 38.601375 95.661527) (xy 38.587531 95.75838) (xy 38.573687 95.872473) (xy 38.559843 96.003805) (xy 38.547041 96.141199) (xy 38.542861 96.149118) (xy 38.534788 96.151797) (xy 37.85276 96.116592) (xy 37.844674 96.112744) (xy 37.842506 96.109269) (xy 37.645442 95.61871) (xy 37.645538 95.609756) (xy 37.651938 95.603492) (xy 37.656054 95.602651) (xy 37.791922 95.599856) (xy 37.944713 95.574962) (xy 38.097504 95.528318) (xy 38.250295 95.459924) (xy 38.39528 95.374386) (xy 38.404146 95.373135) ) ) ) (zone (net 4) (net_name "Net-(J3-Pin_1)") (layer "F.Cu") (tstamp 42e649df-f570-4263-a3b2-90a94226c216) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30006) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 88.134 95.584) (xy 88.254 95.506053) (xy 88.374 95.447079) (xy 88.494 95.407079) (xy 88.614 95.386053) (xy 88.734 95.384) (xy 87.884 92.733) (xy 87.034 95.384) (xy 87.154 95.386053) (xy 87.274 95.407079) (xy 87.394 95.447079) (xy 87.514 95.506053) (xy 87.634 95.584) ) ) (filled_polygon (layer "F.Cu") (pts (xy 87.894404 92.765966) (xy 87.895141 92.767746) (xy 88.72919 95.368999) (xy 88.728453 95.377923) (xy 88.721621 95.383712) (xy 88.718249 95.384269) (xy 88.621029 95.385932) (xy 88.614 95.386053) (xy 88.613993 95.386053) (xy 88.494011 95.407076) (xy 88.494005 95.407077) (xy 88.373994 95.44708) (xy 88.373992 95.447081) (xy 88.25401 95.506046) (xy 88.254002 95.506051) (xy 88.136907 95.582112) (xy 88.130534 95.584) (xy 87.637466 95.584) (xy 87.631093 95.582112) (xy 87.513997 95.506051) (xy 87.513989 95.506046) (xy 87.394007 95.447081) (xy 87.394005 95.44708) (xy 87.273994 95.407077) (xy 87.273988 95.407076) (xy 87.154002 95.386053) (xy 87.04975 95.384269) (xy 87.041536 95.380701) (xy 87.038252 95.372371) (xy 87.038808 95.369004) (xy 87.872859 92.767745) (xy 87.878648 92.760914) (xy 87.887572 92.760177) ) ) ) (zone (net 3) (net_name "Net-(J2-Pin_3)") (layer "F.Cu") (tstamp 4ab5ab7e-2b5f-47a0-997d-e0ea975b4286) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30026) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 46.595523 93.768249) (xy 46.612687 93.631478) (xy 46.661059 93.545145) (xy 46.735952 93.482301) (xy 46.832682 93.415999) (xy 46.946564 93.31929) (xy 46.345523 92.717249) (xy 45.744482 93.31929) (xy 45.858363 93.415999) (xy 45.955092 93.482301) (xy 46.029986 93.545145) (xy 46.078357 93.631478) (xy 46.095523 93.768249) ) ) (filled_polygon (layer "F.Cu") (pts (xy 46.353787 92.725527) (xy 46.937604 93.310315) (xy 46.941024 93.318591) (xy 46.93759 93.326861) (xy 46.936897 93.327499) (xy 46.832918 93.415799) (xy 46.832439 93.416165) (xy 46.735952 93.4823) (xy 46.661058 93.545146) (xy 46.612686 93.631479) (xy 46.596808 93.758006) (xy 46.592378 93.765788) (xy 46.585199 93.768249) (xy 46.105846 93.768249) (xy 46.097573 93.764822) (xy 46.094237 93.758006) (xy 46.078357 93.631479) (xy 46.078357 93.631478) (xy 46.029986 93.545145) (xy 45.955092 93.482301) (xy 45.858603 93.416163) (xy 45.85814 93.41581) (xy 45.754147 93.327498) (xy 45.75006 93.319532) (xy 45.752803 93.311008) (xy 45.753428 93.310329) (xy 46.337244 92.725541) (xy 46.345513 92.722108) ) ) ) (zone (net 67) (net_name "UART B TX") (layer "F.Cu") (tstamp 4abed347-dafc-491b-8ed2-2a49764e9038) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30050) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 63.66 85.34) (xy 63.717168 85.345035) (xy 63.774337 85.353071) (xy 63.831506 85.364107) (xy 63.888675 85.378143) (xy 63.945844 85.395179) (xy 64.836 85.11111) (xy 64.01 84.81111) (xy 63.939999 84.822888) (xy 63.869999 84.831666) (xy 63.8 84.837444) (xy 63.73 84.840222) (xy 63.66 84.84) ) ) (filled_polygon (layer "F.Cu") (pts (xy 64.012896 84.812162) (xy 64.321126 84.92411) (xy 64.803751 85.099397) (xy 64.810357 85.105442) (xy 64.810754 85.114388) (xy 64.804709 85.120994) (xy 64.803314 85.12154) (xy 63.949283 85.394081) (xy 63.942385 85.394148) (xy 63.888688 85.378146) (xy 63.888689 85.378147) (xy 63.888685 85.378146) (xy 63.888675 85.378143) (xy 63.831506 85.364107) (xy 63.774337 85.353071) (xy 63.717168 85.345035) (xy 63.717162 85.345034) (xy 63.717159 85.345034) (xy 63.717158 85.345034) (xy 63.670674 85.34094) (xy 63.662733 85.3368) (xy 63.66 85.329285) (xy 63.66 84.851737) (xy 63.663427 84.843464) (xy 63.671699 84.840037) (xy 63.73 84.840222) (xy 63.73 84.840221) (xy 63.730001 84.840222) (xy 63.8 84.837444) (xy 63.869999 84.831666) (xy 63.939999 84.822888) (xy 64.006962 84.811621) ) ) ) (zone (net 65) (net_name "UART A TX") (layer "F.Cu") (tstamp 4afb8839-800d-47fa-b722-8872f3c9ac65) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30048) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 70.96 83.57) (xy 70.889999 83.570222) (xy 70.819999 83.567444) (xy 70.75 83.561666) (xy 70.68 83.552888) (xy 70.61 83.54111) (xy 69.784 83.84111) (xy 70.674155 84.125179) (xy 70.731324 84.108143) (xy 70.788493 84.094107) (xy 70.845661 84.083071) (xy 70.90283 84.075035) (xy 70.96 84.07) ) ) (filled_polygon (layer "F.Cu") (pts (xy 70.68 83.552888) (xy 70.75 83.561666) (xy 70.819999 83.567444) (xy 70.889998 83.570222) (xy 70.889998 83.570221) (xy 70.889999 83.570222) (xy 70.948263 83.570037) (xy 70.956547 83.573438) (xy 70.96 83.5817) (xy 70.96 84.059285) (xy 70.956573 84.067558) (xy 70.949326 84.07094) (xy 70.90284 84.075034) (xy 70.902839 84.075034) (xy 70.902835 84.075034) (xy 70.90283 84.075035) (xy 70.845661 84.083071) (xy 70.788493 84.094107) (xy 70.731324 84.108143) (xy 70.731313 84.108146) (xy 70.73131 84.108147) (xy 70.731311 84.108146) (xy 70.677613 84.124148) (xy 70.670715 84.124081) (xy 69.816685 83.85154) (xy 69.809845 83.84576) (xy 69.809096 83.836837) (xy 69.814876 83.829997) (xy 69.816239 83.8294) (xy 70.607103 83.542161) (xy 70.613037 83.541621) ) ) ) (zone (net 59) (net_name "/AD+") (layer "F.Cu") (tstamp 50e74c98-9a5e-4b08-b7d6-27f5556455fc) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30036) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 77.302528 91.060396) (xy 77.21628 90.938357) (xy 77.205845 90.830825) (xy 77.238681 90.720672) (xy 77.282246 90.590773) (xy 77.304 90.424) (xy 76.453293 90.423293) (xy 76.454 91.274) (xy 76.620773 91.252246) (xy 76.750672 91.208681) (xy 76.860825 91.175845) (xy 76.968357 91.18628) (xy 77.090396 91.272528) ) ) (filled_polygon (layer "F.Cu") (pts (xy 77.290687 90.423988) (xy 77.298955 90.427422) (xy 77.302375 90.435698) (xy 77.302277 90.437201) (xy 77.282393 90.589644) (xy 77.281884 90.591851) (xy 77.238681 90.720672) (xy 77.205844 90.830824) (xy 77.205844 90.830825) (xy 77.216279 90.938354) (xy 77.21628 90.938358) (xy 77.296836 91.052344) (xy 77.298812 91.061078) (xy 77.295554 91.067369) (xy 77.097369 91.265554) (xy 77.089096 91.268981) (xy 77.082344 91.266836) (xy 76.968358 91.18628) (xy 76.968354 91.186279) (xy 76.860825 91.175844) (xy 76.860824 91.175844) (xy 76.750672 91.208681) (xy 76.621851 91.251884) (xy 76.619644 91.252393) (xy 76.467201 91.272277) (xy 76.458554 91.269949) (xy 76.454086 91.262188) (xy 76.453988 91.260699) (xy 76.453302 90.43501) (xy 76.456722 90.426736) (xy 76.46499 90.423302) ) ) ) (zone (net 2) (net_name "Net-(J2-Pin_1)") (layer "F.Cu") (tstamp 53b33efc-cd38-4c56-9a53-39ac823db28d) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30028) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 51.675523 93.768249) (xy 51.692687 93.631478) (xy 51.741059 93.545145) (xy 51.815952 93.482301) (xy 51.912682 93.415999) (xy 52.026564 93.31929) (xy 51.425523 92.717249) (xy 50.824482 93.31929) (xy 50.938363 93.415999) (xy 51.035092 93.482301) (xy 51.109986 93.545145) (xy 51.158357 93.631478) (xy 51.175523 93.768249) ) ) (filled_polygon (layer "F.Cu") (pts (xy 51.433787 92.725527) (xy 52.017604 93.310315) (xy 52.021024 93.318591) (xy 52.01759 93.326861) (xy 52.016897 93.327499) (xy 51.912918 93.415799) (xy 51.912439 93.416165) (xy 51.815952 93.4823) (xy 51.741058 93.545146) (xy 51.692686 93.631479) (xy 51.676808 93.758006) (xy 51.672378 93.765788) (xy 51.665199 93.768249) (xy 51.185846 93.768249) (xy 51.177573 93.764822) (xy 51.174237 93.758006) (xy 51.158357 93.631479) (xy 51.158357 93.631478) (xy 51.109986 93.545145) (xy 51.035092 93.482301) (xy 50.938603 93.416163) (xy 50.93814 93.41581) (xy 50.834147 93.327498) (xy 50.83006 93.319532) (xy 50.832803 93.311008) (xy 50.833428 93.310329) (xy 51.417244 92.725541) (xy 51.425513 92.722108) ) ) ) (zone (net 31) (net_name "VBUS2") (layer "F.Cu") (tstamp 5e209d35-dcb4-4880-84c2-179572bb2297) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30046) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 39.025 101.985) (xy 38.954134 101.975456) (xy 38.883268 101.954188) (xy 38.812402 101.921194) (xy 38.741536 101.876474) (xy 38.670671 101.82003) (xy 38.099 102.301) (xy 38.751777 102.727777) (xy 38.806421 102.657291) (xy 38.861066 102.597771) (xy 38.91571 102.549216) (xy 38.970355 102.511625) (xy 39.025 102.485) ) ) (filled_polygon (layer "F.Cu") (pts (xy 38.678162 101.825997) (xy 38.678412 101.826196) (xy 38.741536 101.876474) (xy 38.812402 101.921194) (xy 38.812406 101.921196) (xy 38.812408 101.921197) (xy 38.883268 101.954188) (xy 38.95413 101.975455) (xy 38.954131 101.975455) (xy 38.954134 101.975456) (xy 39.014862 101.983634) (xy 39.022603 101.988134) (xy 39.025 101.995229) (xy 39.025 102.477685) (xy 39.021573 102.485958) (xy 39.018425 102.488203) (xy 38.970353 102.511625) (xy 38.915714 102.549212) (xy 38.915701 102.549222) (xy 38.861073 102.597763) (xy 38.861069 102.597766) (xy 38.806415 102.657298) (xy 38.75839 102.719245) (xy 38.750612 102.723683) (xy 38.742741 102.721869) (xy 38.112173 102.309612) (xy 38.107123 102.302216) (xy 38.108782 102.293417) (xy 38.111036 102.290872) (xy 38.663342 101.826195) (xy 38.671877 101.823492) ) ) ) (zone (net 64) (net_name "Net-(U2-GPIO14)") (layer "F.Cu") (tstamp 62057277-6ebb-41d4-ac50-2f0ae6f7a7af) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30011) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 41.045523 91.036) (xy 41.005522 90.889366) (xy 40.965522 90.710506) (xy 40.925523 90.49942) (xy 40.885523 90.256108) (xy 40.845523 89.98057) (xy 39.994523 90.408249) (xy 39.714219 91.258249) (xy 39.980479 91.193785) (xy 40.24674 91.169328) (xy 40.513001 91.184878) (xy 40.779262 91.240435) (xy 41.045523 91.336) ) ) (filled_polygon (layer "F.Cu") (pts (xy 40.846729 89.993057) (xy 40.847854 89.99663) (xy 40.885523 90.256108) (xy 40.925523 90.49942) (xy 40.965522 90.710506) (xy 41.005522 90.889366) (xy 41.045111 91.034489) (xy 41.045523 91.037568) (xy 41.045523 91.31937) (xy 41.042096 91.327643) (xy 41.033823 91.33107) (xy 41.029871 91.330382) (xy 40.779265 91.240436) (xy 40.779256 91.240433) (xy 40.512996 91.184877) (xy 40.513002 91.184877) (xy 40.246743 91.169327) (xy 39.98048 91.193784) (xy 39.980471 91.193786) (xy 39.734674 91.253296) (xy 39.725827 91.251913) (xy 39.72055 91.244678) (xy 39.72081 91.238261) (xy 39.993003 90.412857) (xy 39.998845 90.406076) (xy 40.831023 89.987856) (xy 40.839952 89.987204) ) ) ) (zone (net 34) (net_name "VBUS1") (layer "F.Cu") (tstamp 73ab8bee-c7f6-4134-9338-2e3c534b879b) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30018) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 81.332 102.524) (xy 81.432 102.451689) (xy 81.532 102.395533) (xy 81.631999 102.355533) (xy 81.731999 102.331689) (xy 81.832 102.324) (xy 81.082 101.573) (xy 80.332 102.324) (xy 80.432 102.331689) (xy 80.532 102.355533) (xy 80.631999 102.395533) (xy 80.731999 102.451689) (xy 80.832 102.524) ) ) (filled_polygon (layer "F.Cu") (pts (xy 81.090268 101.581279) (xy 81.090279 101.58129) (xy 81.814038 102.306014) (xy 81.817459 102.31429) (xy 81.814027 102.322561) (xy 81.806656 102.325948) (xy 81.764976 102.329153) (xy 81.731999 102.331689) (xy 81.731995 102.331689) (xy 81.731993 102.33169) (xy 81.632006 102.35553) (xy 81.631999 102.355532) (xy 81.532012 102.395527) (xy 81.53201 102.395528) (xy 81.532003 102.395531) (xy 81.532 102.395533) (xy 81.479708 102.424897) (xy 81.431999 102.451689) (xy 81.335069 102.521781) (xy 81.328213 102.524) (xy 80.835787 102.524) (xy 80.828931 102.521781) (xy 80.731999 102.451689) (xy 80.631999 102.395533) (xy 80.631991 102.39553) (xy 80.631988 102.395528) (xy 80.631986 102.395527) (xy 80.531999 102.355532) (xy 80.531992 102.35553) (xy 80.432005 102.33169) (xy 80.432003 102.331689) (xy 80.432 102.331689) (xy 80.394906 102.328836) (xy 80.357343 102.325948) (xy 80.349357 102.321896) (xy 80.346574 102.313385) (xy 80.34996 102.306015) (xy 81.073721 101.581289) (xy 81.081992 101.577858) ) ) ) (zone (net 65) (net_name "UART A TX") (layer "F.Cu") (tstamp 73c4e53e-794b-4d76-8675-c3ef77bf49a3) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30001) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 73.604 83.054) (xy 73.644 83.136053) (xy 73.684 83.237079) (xy 73.723999 83.357079) (xy 73.763999 83.496053) (xy 73.804 83.654) (xy 76.455 82.804) (xy 73.804 81.954) (xy 73.763999 82.111946) (xy 73.723999 82.25092) (xy 73.684 82.37092) (xy 73.644 82.471946) (xy 73.604 82.554) ) ) (filled_polygon (layer "F.Cu") (pts (xy 73.815834 81.957794) (xy 75.683715 82.5567) (xy 76.420253 82.792859) (xy 76.427085 82.798648) (xy 76.427822 82.807572) (xy 76.422033 82.814404) (xy 76.420253 82.815141) (xy 73.815857 83.650198) (xy 73.806933 83.649461) (xy 73.801144 83.642629) (xy 73.800943 83.641929) (xy 73.763999 83.496053) (xy 73.723999 83.357079) (xy 73.684002 83.237083) (xy 73.644001 83.136056) (xy 73.605183 83.056426) (xy 73.604 83.051299) (xy 73.604 82.5567) (xy 73.605183 82.551573) (xy 73.644001 82.471943) (xy 73.684002 82.370916) (xy 73.723999 82.25092) (xy 73.763999 82.111946) (xy 73.800943 81.96607) (xy 73.806296 81.958891) (xy 73.815157 81.9576) ) ) ) (zone (net 2) (net_name "Net-(J2-Pin_1)") (layer "F.Cu") (tstamp 7b639ab2-6c2e-4aeb-be1c-6ec8a8eff069) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30005) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 51.675523 95.568249) (xy 51.795523 95.490302) (xy 51.915523 95.431328) (xy 52.035522 95.391328) (xy 52.155523 95.370302) (xy 52.275523 95.368249) (xy 51.425523 92.717249) (xy 50.575523 95.368249) (xy 50.695523 95.370302) (xy 50.815523 95.391328) (xy 50.935522 95.431328) (xy 51.055523 95.490302) (xy 51.175523 95.568249) ) ) (filled_polygon (layer "F.Cu") (pts (xy 51.435927 92.750215) (xy 51.436664 92.751995) (xy 52.270713 95.353248) (xy 52.269976 95.362172) (xy 52.263144 95.367961) (xy 52.259772 95.368518) (xy 52.162552 95.370181) (xy 52.155523 95.370302) (xy 52.155516 95.370302) (xy 52.035533 95.391325) (xy 52.035527 95.391326) (xy 51.915515 95.43133) (xy 51.795533 95.490295) (xy 51.795525 95.4903) (xy 51.67843 95.566361) (xy 51.672057 95.568249) (xy 51.178989 95.568249) (xy 51.172616 95.566361) (xy 51.05552 95.4903) (xy 51.055512 95.490295) (xy 50.935529 95.43133) (xy 50.815517 95.391326) (xy 50.815511 95.391325) (xy 50.695525 95.370302) (xy 50.591273 95.368518) (xy 50.583059 95.36495) (xy 50.579775 95.35662) (xy 50.580331 95.353253) (xy 51.414382 92.751994) (xy 51.420171 92.745163) (xy 51.429095 92.744426) ) ) ) (zone (net 4) (net_name "Net-(J3-Pin_1)") (layer "F.Cu") (tstamp 7ce493f4-a2e9-41a0-8a84-4bea04e79376) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30014) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 94.617537 100.087) (xy 94.657537 100.163142) (xy 94.697537 100.25709) (xy 94.737536 100.368841) (xy 94.777536 100.498397) (xy 94.817537 100.645757) (xy 95.668537 99.795757) (xy 94.817537 98.978497) (xy 94.777536 99.138628) (xy 94.737536 99.279544) (xy 94.697537 99.401245) (xy 94.657537 99.50373) (xy 94.617537 99.587) ) ) (filled_polygon (layer "F.Cu") (pts (xy 94.832098 98.992481) (xy 95.65992 99.787482) (xy 95.663514 99.795684) (xy 95.660255 99.804025) (xy 95.660084 99.804199) (xy 94.83181 100.631499) (xy 94.823535 100.634921) (xy 94.815264 100.631489) (xy 94.812252 100.626287) (xy 94.777536 100.498397) (xy 94.737536 100.368841) (xy 94.697537 100.25709) (xy 94.657537 100.163142) (xy 94.618879 100.089554) (xy 94.617537 100.084113) (xy 94.617537 99.589663) (xy 94.618691 99.584597) (xy 94.65754 99.503723) (xy 94.670463 99.470609) (xy 94.697537 99.401245) (xy 94.737536 99.279544) (xy 94.777536 99.138628) (xy 94.812644 98.998083) (xy 94.817972 98.990889) (xy 94.826829 98.989569) ) ) ) (zone (net 68) (net_name "UART B RX") (layer "F.Cu") (tstamp 8112772c-d687-412f-9072-ec09ad7814b1) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30016) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 58.778133 89.92) (xy 58.598485 89.902692) (xy 58.478354 89.856195) (xy 58.380314 89.788647) (xy 58.266939 89.708186) (xy 58.100804 89.622951) (xy 57.774523 90.408249) (xy 58.376564 91.00929) (xy 58.480912 90.851188) (xy 58.524145 90.692943) (xy 58.55536 90.554818) (xy 58.623657 90.457082) (xy 58.778133 90.42) ) ) (filled_polygon (layer "F.Cu") (pts (xy 58.111233 89.628343) (xy 58.112071 89.628731) (xy 58.2662 89.707807) (xy 58.267624 89.708672) (xy 58.380314 89.788647) (xy 58.478354 89.856195) (xy 58.598485 89.902692) (xy 58.767557 89.918981) (xy 58.775461 89.923184) (xy 58.778133 89.930626) (xy 58.778133 90.410776) (xy 58.774706 90.419049) (xy 58.769164 90.422153) (xy 58.623656 90.457082) (xy 58.55536 90.554817) (xy 58.524145 90.692943) (xy 58.481404 90.849383) (xy 58.479883 90.852745) (xy 58.384455 90.997332) (xy 58.377038 91.002349) (xy 58.368245 91.000652) (xy 58.366424 90.999167) (xy 58.364586 90.997332) (xy 57.780066 90.413783) (xy 57.776633 90.405514) (xy 57.777527 90.401017) (xy 58.095939 89.634658) (xy 58.102278 89.628334) ) ) ) (zone (net 6) (net_name "Net-(U1-3V3)") (layer "F.Cu") (tstamp 870e5e9a-d65b-4ad5-a32b-16e1ab28d9e4) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30051) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 69.724 75.18) (xy 69.764994 75.210603) (xy 69.805989 75.250904) (xy 69.846983 75.300904) (xy 69.887978 75.360603) (xy 69.928973 75.43) (xy 70.425 74.93) (xy 69.928973 74.43) (xy 69.887978 74.499396) (xy 69.846983 74.559095) (xy 69.805989 74.609095) (xy 69.764994 74.649396) (xy 69.724 74.68) ) ) (filled_polygon (layer "F.Cu") (pts (xy 69.93729 74.438924) (xy 69.939645 74.440758) (xy 70.416825 74.92176) (xy 70.420219 74.930047) (xy 70.416825 74.93824) (xy 69.939645 75.419241) (xy 69.931386 75.422701) (xy 69.923099 75.419307) (xy 69.921265 75.416952) (xy 69.887978 75.360603) (xy 69.846983 75.300904) (xy 69.805989 75.250904) (xy 69.764994 75.210603) (xy 69.764991 75.2106) (xy 69.728701 75.183508) (xy 69.724121 75.175813) (xy 69.724 75.174133) (xy 69.724 74.685866) (xy 69.727427 74.677593) (xy 69.728701 74.676491) (xy 69.764991 74.649398) (xy 69.764989 74.649398) (xy 69.764994 74.649396) (xy 69.805989 74.609095) (xy 69.846983 74.559095) (xy 69.887978 74.499396) (xy 69.921266 74.443046) (xy 69.928424 74.437667) ) ) ) (zone (net 67) (net_name "UART B TX") (layer "F.Cu") (tstamp 8905cbd9-528c-4e7e-8374-25b2ff2d798d) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30025) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 58.825523 92.698249) (xy 58.688752 92.681083) (xy 58.602419 92.632712) (xy 58.539575 92.557818) (xy 58.473273 92.461089) (xy 58.376564 92.347208) (xy 57.774523 92.948249) (xy 58.376564 93.54929) (xy 58.473273 93.435408) (xy 58.539575 93.338678) (xy 58.602419 93.263785) (xy 58.688752 93.215413) (xy 58.825523 93.198249) ) ) (filled_polygon (layer "F.Cu") (pts (xy 58.384135 92.356181) (xy 58.384766 92.356866) (xy 58.473084 92.460866) (xy 58.473437 92.461329) (xy 58.539575 92.557818) (xy 58.602419 92.632712) (xy 58.688752 92.681083) (xy 58.81528 92.696963) (xy 58.823062 92.701393) (xy 58.825523 92.708572) (xy 58.825523 93.187925) (xy 58.822096 93.196198) (xy 58.81528 93.199534) (xy 58.688753 93.215412) (xy 58.60242 93.263784) (xy 58.539574 93.338678) (xy 58.473439 93.435165) (xy 58.473073 93.435644) (xy 58.384773 93.539623) (xy 58.376806 93.543711) (xy 58.368282 93.540968) (xy 58.367589 93.54033) (xy 58.262729 93.435644) (xy 57.782815 92.956527) (xy 57.779382 92.948259) (xy 57.782801 92.939984) (xy 58.36759 92.356166) (xy 58.375865 92.352747) ) ) ) (zone (net 34) (net_name "VBUS1") (layer "F.Cu") (tstamp 8ac41cd8-12f4-41ab-a9e4-ae4151a95e9e) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30017) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 80.082 101.824) (xy 80.122 101.891689) (xy 80.162 101.975533) (xy 80.201999 102.075533) (xy 80.241999 102.191689) (xy 80.282 102.324) (xy 81.083 101.574) (xy 80.282 100.824) (xy 80.241999 100.95631) (xy 80.201999 101.072466) (xy 80.162 101.172466) (xy 80.122 101.25631) (xy 80.082 101.324) ) ) (filled_polygon (layer "F.Cu") (pts (xy 80.295746 100.836871) (xy 81.073878 101.565459) (xy 81.077575 101.573615) (xy 81.074422 101.581997) (xy 81.073878 101.582541) (xy 80.295746 102.311128) (xy 80.287364 102.314281) (xy 80.279208 102.310584) (xy 80.27655 102.305973) (xy 80.241999 102.191689) (xy 80.202003 102.075545) (xy 80.202004 102.075546) (xy 80.162002 101.975539) (xy 80.162003 101.975539) (xy 80.121998 101.891685) (xy 80.083627 101.826753) (xy 80.082 101.820801) (xy 80.082 101.327198) (xy 80.083627 101.321246) (xy 80.122 101.25631) (xy 80.162 101.172466) (xy 80.162003 101.17246) (xy 80.162002 101.17246) (xy 80.202004 101.072453) (xy 80.202003 101.072454) (xy 80.241999 100.95631) (xy 80.27655 100.842026) (xy 80.282224 100.835099) (xy 80.291135 100.834213) ) ) ) (zone (net 77) (net_name "OB+") (layer "F.Cu") (tstamp 8b598db2-4859-4883-a418-2cddb0905cd5) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30062) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 42.669936 96.069949) (xy 42.694937 96.015798) (xy 42.719938 95.968722) (xy 42.744939 95.928722) (xy 42.76994 95.895798) (xy 42.794942 95.869949) (xy 42.519936 95.368949) (xy 42.24493 95.869949) (xy 42.269931 95.895798) (xy 42.294932 95.928722) (xy 42.319933 95.968722) (xy 42.344934 96.015798) (xy 42.369936 96.069949) ) ) (filled_polygon (layer "F.Cu") (pts (xy 42.525566 95.383007) (xy 42.530192 95.387633) (xy 42.79079 95.862385) (xy 42.791767 95.871286) (xy 42.788944 95.876149) (xy 42.769936 95.895802) (xy 42.744937 95.928723) (xy 42.719934 95.968728) (xy 42.694943 96.015786) (xy 42.673073 96.063153) (xy 42.666494 96.069228) (xy 42.662451 96.069949) (xy 42.37742 96.069949) (xy 42.369147 96.066522) (xy 42.366798 96.063153) (xy 42.344928 96.015786) (xy 42.319937 95.968728) (xy 42.294933 95.928723) (xy 42.269934 95.895801) (xy 42.269926 95.895793) (xy 42.250927 95.876149) (xy 42.247639 95.86782) (xy 42.24908 95.862388) (xy 42.50968 95.387632) (xy 42.516665 95.38203) ) ) ) (zone (net 77) (net_name "OB+") (layer "F.Cu") (tstamp 8d0fb3ac-0b58-4145-83b2-5c97c536c10b) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30060) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 44.56986 96.069949) (xy 44.594861 96.015798) (xy 44.619862 95.968722) (xy 44.644863 95.928722) (xy 44.669864 95.895798) (xy 44.694866 95.869949) (xy 44.41986 95.368949) (xy 44.144854 95.869949) (xy 44.169855 95.895798) (xy 44.194856 95.928722) (xy 44.219857 95.968722) (xy 44.244858 96.015798) (xy 44.26986 96.069949) ) ) (filled_polygon (layer "F.Cu") (pts (xy 44.42549 95.383007) (xy 44.430116 95.387633) (xy 44.690714 95.862385) (xy 44.691691 95.871286) (xy 44.688868 95.876149) (xy 44.66986 95.895802) (xy 44.644861 95.928723) (xy 44.619858 95.968728) (xy 44.594867 96.015786) (xy 44.572997 96.063153) (xy 44.566418 96.069228) (xy 44.562375 96.069949) (xy 44.277344 96.069949) (xy 44.269071 96.066522) (xy 44.266722 96.063153) (xy 44.244852 96.015786) (xy 44.219861 95.968728) (xy 44.194857 95.928723) (xy 44.169858 95.895801) (xy 44.16985 95.895793) (xy 44.150851 95.876149) (xy 44.147563 95.86782) (xy 44.149004 95.862388) (xy 44.409604 95.387632) (xy 44.416589 95.38203) ) ) ) (zone (net 65) (net_name "UART A TX") (layer "F.Cu") (tstamp 9354d8c7-ec71-4faf-9038-2e5f69b83f72) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30022) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 75.404 83.054) (xy 75.54077 83.071164) (xy 75.627103 83.119536) (xy 75.689946 83.194429) (xy 75.756249 83.291159) (xy 75.852959 83.405041) (xy 76.455 82.804) (xy 75.852959 82.202959) (xy 75.756249 82.31684) (xy 75.689946 82.413569) (xy 75.627103 82.488463) (xy 75.54077 82.536834) (xy 75.404 82.554) ) ) (filled_polygon (layer "F.Cu") (pts (xy 75.86124 82.21128) (xy 75.861931 82.211916) (xy 75.967272 82.317082) (xy 76.446706 82.79572) (xy 76.45014 82.80399) (xy 76.44672 82.812266) (xy 76.446706 82.81228) (xy 75.861933 83.396081) (xy 75.853657 83.399501) (xy 75.845387 83.396067) (xy 75.844757 83.395383) (xy 75.756435 83.291378) (xy 75.756082 83.290916) (xy 75.689946 83.194429) (xy 75.627103 83.119536) (xy 75.54077 83.071164) (xy 75.540769 83.071163) (xy 75.540768 83.071163) (xy 75.414243 83.055285) (xy 75.406461 83.050855) (xy 75.404 83.043676) (xy 75.404 82.564323) (xy 75.407427 82.55605) (xy 75.414241 82.552714) (xy 75.54077 82.536834) (xy 75.627103 82.488463) (xy 75.689946 82.413569) (xy 75.756092 82.317068) (xy 75.756437 82.316618) (xy 75.844751 82.212623) (xy 75.852716 82.208537) ) ) ) (zone (net 66) (net_name "UART A RX") (layer "F.Cu") (tstamp 94c38030-be13-4e9a-8892-ec6715def3bb) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30047) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 70.96 84.84) (xy 70.889999 84.840222) (xy 70.819999 84.837444) (xy 70.75 84.831666) (xy 70.68 84.822888) (xy 70.61 84.81111) (xy 69.784 85.11111) (xy 70.674155 85.395179) (xy 70.731324 85.378143) (xy 70.788493 85.364107) (xy 70.845661 85.353071) (xy 70.90283 85.345035) (xy 70.96 85.34) ) ) (filled_polygon (layer "F.Cu") (pts (xy 70.68 84.822888) (xy 70.75 84.831666) (xy 70.819999 84.837444) (xy 70.889998 84.840222) (xy 70.889998 84.840221) (xy 70.889999 84.840222) (xy 70.948263 84.840037) (xy 70.956547 84.843438) (xy 70.96 84.8517) (xy 70.96 85.329285) (xy 70.956573 85.337558) (xy 70.949326 85.34094) (xy 70.90284 85.345034) (xy 70.902839 85.345034) (xy 70.902835 85.345034) (xy 70.90283 85.345035) (xy 70.845661 85.353071) (xy 70.788493 85.364107) (xy 70.731324 85.378143) (xy 70.731313 85.378146) (xy 70.73131 85.378147) (xy 70.731311 85.378146) (xy 70.677613 85.394148) (xy 70.670715 85.394081) (xy 69.816685 85.12154) (xy 69.809845 85.11576) (xy 69.809096 85.106837) (xy 69.814876 85.099997) (xy 69.816239 85.0994) (xy 70.607103 84.812161) (xy 70.613037 84.811621) ) ) ) (zone (net 67) (net_name "UART B TX") (layer "F.Cu") (tstamp 974c4e60-52b9-48bd-9678-bac244fc9860) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30004) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 60.625523 92.698249) (xy 60.585522 92.616195) (xy 60.545522 92.515169) (xy 60.505523 92.395169) (xy 60.465523 92.256195) (xy 60.425523 92.098249) (xy 57.774523 92.948249) (xy 60.425523 93.798249) (xy 60.465523 93.640302) (xy 60.505523 93.501328) (xy 60.545522 93.381328) (xy 60.585522 93.280302) (xy 60.625523 93.198249) ) ) (filled_polygon (layer "F.Cu") (pts (xy 60.422589 92.102787) (xy 60.428378 92.109619) (xy 60.428579 92.110319) (xy 60.465523 92.256195) (xy 60.505523 92.395169) (xy 60.54552 92.515165) (xy 60.585523 92.616197) (xy 60.585523 92.616198) (xy 60.62434 92.695822) (xy 60.625523 92.700949) (xy 60.625523 93.195548) (xy 60.62434 93.200675) (xy 60.585523 93.280299) (xy 60.585523 93.2803) (xy 60.54552 93.381332) (xy 60.505523 93.501328) (xy 60.465523 93.640302) (xy 60.428579 93.786178) (xy 60.423226 93.793357) (xy 60.414365 93.794648) (xy 60.413665 93.794447) (xy 57.809268 92.959389) (xy 57.802437 92.953601) (xy 57.8017 92.944677) (xy 57.807489 92.937845) (xy 57.809266 92.937109) (xy 60.413667 92.10205) ) ) ) (zone (net 68) (net_name "UART B RX") (layer "F.Cu") (tstamp 9c2330e7-8be8-45c7-99fa-a0cbc5f4c142) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30007) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 60.625523 89.92) (xy 60.585522 89.87245) (xy 60.545522 89.812501) (xy 60.505523 89.740151) (xy 60.465523 89.6554) (xy 60.425523 89.558249) (xy 57.774523 90.408249) (xy 60.425523 91.039676) (xy 60.465523 90.876672) (xy 60.505523 90.733202) (xy 60.545522 90.609267) (xy 60.585522 90.504866) (xy 60.625523 90.42) ) ) (filled_polygon (layer "F.Cu") (pts (xy 60.424166 89.562282) (xy 60.429633 89.568232) (xy 60.465521 89.655396) (xy 60.505522 89.74015) (xy 60.505523 89.74015) (xy 60.505523 89.740151) (xy 60.545522 89.812501) (xy 60.545526 89.812508) (xy 60.585511 89.872434) (xy 60.585522 89.87245) (xy 60.585528 89.872457) (xy 60.622776 89.916734) (xy 60.625523 89.924266) (xy 60.625523 90.417381) (xy 60.624406 90.422369) (xy 60.585522 90.504866) (xy 60.558577 90.575192) (xy 60.545524 90.609261) (xy 60.505523 90.733202) (xy 60.465523 90.876672) (xy 60.428292 91.028389) (xy 60.422992 91.035607) (xy 60.414218 91.036983) (xy 57.815321 90.417966) (xy 57.808067 90.412715) (xy 57.80665 90.403873) (xy 57.811901 90.396619) (xy 57.814453 90.395445) (xy 60.415243 89.561545) ) ) ) (zone (net 74) (net_name "OA-") (layer "F.Cu") (tstamp a4e4bb4b-91ff-408d-926e-ef08ce993328) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30041) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 84.18304 100.760828) (xy 84.067769 100.843817) (xy 83.966222 100.857286) (xy 83.862207 100.830577) (xy 83.73953 100.793034) (xy 83.582 100.774) (xy 83.581293 101.574707) (xy 84.382 101.574) (xy 84.362964 101.416469) (xy 84.325421 101.293792) (xy 84.298713 101.189777) (xy 84.312182 101.08823) (xy 84.395172 100.97296) ) ) (filled_polygon (layer "F.Cu") (pts (xy 84.190074 100.767862) (xy 84.388137 100.965925) (xy 84.391564 100.974198) (xy 84.389359 100.981034) (xy 84.312183 101.088228) (xy 84.312181 101.088233) (xy 84.298712 101.189776) (xy 84.298712 101.189778) (xy 84.325423 101.293798) (xy 84.325423 101.293797) (xy 84.36266 101.415475) (xy 84.363088 101.417495) (xy 84.380417 101.560907) (xy 84.378007 101.569532) (xy 84.370205 101.573927) (xy 84.368811 101.574011) (xy 83.593013 101.574696) (xy 83.584737 101.571276) (xy 83.581303 101.563006) (xy 83.581303 101.562986) (xy 83.581305 101.560907) (xy 83.581988 100.787186) (xy 83.585422 100.778917) (xy 83.593698 100.775497) (xy 83.595078 100.77558) (xy 83.738508 100.79291) (xy 83.740515 100.793335) (xy 83.862207 100.830577) (xy 83.913761 100.843815) (xy 83.966221 100.857286) (xy 83.966221 100.857285) (xy 83.966222 100.857286) (xy 84.067769 100.843817) (xy 84.174968 100.766639) (xy 84.183681 100.764587) ) ) ) (zone (net 76) (net_name "OB-") (layer "F.Cu") (tstamp a4efbd52-bd24-4cd0-b8bb-801b37810504) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30034) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 48.730773 100.663095) (xy 48.580324 100.772539) (xy 48.447564 100.799726) (xy 48.313936 100.78937) (xy 48.160884 100.786188) (xy 47.969853 100.834896) (xy 48.275293 101.574707) (xy 49.076 101.574) (xy 49.038014 101.388894) (xy 48.95672 101.246813) (xy 48.881108 101.127408) (xy 48.860172 101.010328) (xy 48.942905 100.875227) ) ) (filled_polygon (layer "F.Cu") (pts (xy 48.737843 100.670165) (xy 48.936384 100.868706) (xy 48.939811 100.876979) (xy 48.938089 100.883089) (xy 48.860172 101.010327) (xy 48.860172 101.010328) (xy 48.881107 101.127406) (xy 48.881108 101.127408) (xy 48.956654 101.246708) (xy 48.956789 101.246933) (xy 49.037084 101.387268) (xy 49.03839 101.390726) (xy 49.073118 101.55996) (xy 49.071424 101.568753) (xy 49.064009 101.573773) (xy 49.061667 101.574012) (xy 48.283128 101.5747) (xy 48.274852 101.57128) (xy 48.272303 101.567465) (xy 47.975 100.847362) (xy 47.975011 100.838409) (xy 47.98135 100.832084) (xy 47.982907 100.831567) (xy 48.159343 100.78658) (xy 48.162475 100.786221) (xy 48.313811 100.789367) (xy 48.314054 100.789379) (xy 48.447564 100.799726) (xy 48.580324 100.772539) (xy 48.722687 100.668976) (xy 48.731393 100.666881) ) ) ) (zone (net 74) (net_name "OA-") (layer "F.Cu") (tstamp a5488528-c2dc-40ef-a043-e8d49555f8a2) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30057) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 80.606396 97.460051) (xy 80.581394 97.514201) (xy 80.556393 97.561277) (xy 80.531392 97.601277) (xy 80.506391 97.634201) (xy 80.48139 97.660051) (xy 80.756396 98.161051) (xy 81.031402 97.660051) (xy 81.0064 97.634201) (xy 80.981399 97.601277) (xy 80.956398 97.561277) (xy 80.931397 97.514201) (xy 80.906396 97.460051) ) ) (filled_polygon (layer "F.Cu") (pts (xy 80.907185 97.463478) (xy 80.909531 97.466841) (xy 80.931397 97.514201) (xy 80.931403 97.514213) (xy 80.956394 97.561271) (xy 80.981397 97.601275) (xy 81.006396 97.634197) (xy 81.006404 97.634205) (xy 81.025404 97.65385) (xy 81.028692 97.662179) (xy 81.02725 97.667614) (xy 80.766652 98.142366) (xy 80.759667 98.147969) (xy 80.750766 98.146992) (xy 80.74614 98.142366) (xy 80.485541 97.667613) (xy 80.484564 97.658712) (xy 80.487385 97.653852) (xy 80.506391 97.634201) (xy 80.531392 97.601277) (xy 80.556393 97.561277) (xy 80.556397 97.561271) (xy 80.581388 97.514213) (xy 80.581388 97.514212) (xy 80.581394 97.514201) (xy 80.59699 97.480422) (xy 80.603259 97.466846) (xy 80.609838 97.460772) (xy 80.613881 97.460051) (xy 80.898912 97.460051) ) ) ) (zone (net 6) (net_name "Net-(U1-3V3)") (layer "F.Cu") (tstamp abe991c2-a5ff-43ef-b714-8ffceb40defd) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30012) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 93.184 55.114) (xy 93.224 55.196053) (xy 93.264 55.297079) (xy 93.303999 55.417079) (xy 93.343999 55.556053) (xy 93.384 55.714) (xy 94.235 54.864) (xy 93.384 54.014) (xy 93.343999 54.171946) (xy 93.303999 54.31092) (xy 93.264 54.43092) (xy 93.224 54.531946) (xy 93.184 54.614) ) ) (filled_polygon (layer "F.Cu") (pts (xy 93.398558 54.028541) (xy 94.226712 54.855722) (xy 94.230144 54.863993) (xy 94.226722 54.872268) (xy 94.226712 54.872278) (xy 93.398558 55.699458) (xy 93.390283 55.70288) (xy 93.382012 55.699448) (xy 93.378948 55.694052) (xy 93.343999 55.556053) (xy 93.303999 55.417079) (xy 93.264002 55.297083) (xy 93.224001 55.196056) (xy 93.185183 55.116426) (xy 93.184 55.111299) (xy 93.184 54.6167) (xy 93.185183 54.611573) (xy 93.224001 54.531943) (xy 93.264002 54.430916) (xy 93.303999 54.31092) (xy 93.343999 54.171946) (xy 93.378948 54.033947) (xy 93.384301 54.026768) (xy 93.393162 54.025477) ) ) ) (zone (net 31) (net_name "VBUS2") (layer "F.Cu") (tstamp ac032a04-d593-439b-8f8a-5ccb25f4c45d) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30023) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 56.725523 44.938249) (xy 56.862293 44.955413) (xy 56.948626 45.003785) (xy 57.011469 45.078678) (xy 57.077772 45.175408) (xy 57.174482 45.28929) (xy 57.776523 44.688249) (xy 57.174482 44.087208) (xy 57.077772 44.201089) (xy 57.011469 44.297818) (xy 56.948626 44.372712) (xy 56.862293 44.421083) (xy 56.725523 44.438249) ) ) (filled_polygon (layer "F.Cu") (pts (xy 57.182763 44.095529) (xy 57.183454 44.096165) (xy 57.288795 44.201331) (xy 57.768229 44.679969) (xy 57.771663 44.688239) (xy 57.768243 44.696515) (xy 57.768229 44.696529) (xy 57.183456 45.28033) (xy 57.17518 45.28375) (xy 57.16691 45.280316) (xy 57.16628 45.279632) (xy 57.077958 45.175627) (xy 57.077605 45.175165) (xy 57.011469 45.078678) (xy 56.948626 45.003785) (xy 56.862293 44.955413) (xy 56.862292 44.955412) (xy 56.862291 44.955412) (xy 56.735766 44.939534) (xy 56.727984 44.935104) (xy 56.725523 44.927925) (xy 56.725523 44.448572) (xy 56.72895 44.440299) (xy 56.735764 44.436963) (xy 56.862293 44.421083) (xy 56.948626 44.372712) (xy 57.011469 44.297818) (xy 57.077615 44.201317) (xy 57.07796 44.200867) (xy 57.166274 44.096872) (xy 57.174239 44.092786) ) ) ) (zone (net 3) (net_name "Net-(J2-Pin_3)") (layer "F.Cu") (tstamp acae00bc-8e33-4835-b818-5d2327a6be8f) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30032) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 59.658328 104.461881) (xy 59.772865 104.596569) (xy 59.829891 104.708851) (xy 59.85839 104.819917) (xy 59.887346 104.950955) (xy 59.945744 105.123157) (xy 60.731749 104.798583) (xy 60.405761 104.012578) (xy 60.306652 104.066077) (xy 60.227498 104.121062) (xy 60.15851 104.158872) (xy 60.0899 104.160847) (xy 60.011881 104.108328) ) ) (filled_polygon (layer "F.Cu") (pts (xy 60.410213 104.02347) (xy 60.410724 104.024546) (xy 60.727259 104.787759) (xy 60.727263 104.796714) (xy 60.720934 104.803048) (xy 60.720918 104.803055) (xy 59.957281 105.118392) (xy 59.948326 105.118383) (xy 59.942001 105.112044) (xy 59.941735 105.111336) (xy 59.887447 104.951254) (xy 59.887278 104.950649) (xy 59.85839 104.819917) (xy 59.829891 104.708851) (xy 59.772865 104.596569) (xy 59.734646 104.551626) (xy 59.665319 104.470101) (xy 59.66257 104.461579) (xy 59.665958 104.45425) (xy 60.005068 104.11514) (xy 60.01334 104.111714) (xy 60.019872 104.113707) (xy 60.0899 104.160847) (xy 60.15851 104.158872) (xy 60.227498 104.121062) (xy 60.306394 104.066255) (xy 60.306929 104.065927) (xy 60.39436 104.018731) (xy 60.403267 104.017818) ) ) ) (zone (net 64) (net_name "Net-(U2-GPIO14)") (layer "F.Cu") (tstamp ae0c56f3-3471-42bd-9a3d-8ae1481b0243) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30037) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 40.844051 91.044645) (xy 40.757803 90.922606) (xy 40.747368 90.815074) (xy 40.780204 90.704921) (xy 40.823769 90.575022) (xy 40.845523 90.408249) (xy 39.994816 90.407542) (xy 39.995523 91.258249) (xy 40.162296 91.236495) (xy 40.292195 91.19293) (xy 40.402348 91.160094) (xy 40.50988 91.170529) (xy 40.631919 91.256777) ) ) (filled_polygon (layer "F.Cu") (pts (xy 40.83221 90.408237) (xy 40.840478 90.411671) (xy 40.843898 90.419947) (xy 40.8438 90.42145) (xy 40.823916 90.573893) (xy 40.823407 90.5761) (xy 40.780204 90.704921) (xy 40.747367 90.815073) (xy 40.747367 90.815074) (xy 40.757802 90.922603) (xy 40.757803 90.922607) (xy 40.838359 91.036593) (xy 40.840335 91.045327) (xy 40.837077 91.051618) (xy 40.638892 91.249803) (xy 40.630619 91.25323) (xy 40.623867 91.251085) (xy 40.509881 91.170529) (xy 40.509877 91.170528) (xy 40.402348 91.160093) (xy 40.402347 91.160093) (xy 40.292195 91.19293) (xy 40.163374 91.236133) (xy 40.161167 91.236642) (xy 40.008724 91.256526) (xy 40.000077 91.254198) (xy 39.995609 91.246437) (xy 39.995511 91.244948) (xy 39.994825 90.419259) (xy 39.998245 90.410985) (xy 40.006513 90.407551) ) ) ) (zone (net 77) (net_name "OB+") (layer "F.Cu") (tstamp b27b6204-da19-4dc8-9580-b549a207d6bb) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30042) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 49.578643 100.895575) (xy 49.661121 101.026349) (xy 49.64731 101.140373) (xy 49.581995 101.256852) (xy 49.509963 101.394992) (xy 49.476 101.574) (xy 50.276707 101.574707) (xy 50.276 100.774) (xy 50.147518 100.781335) (xy 50.048842 100.792383) (xy 49.965885 100.790709) (xy 49.884558 100.759874) (xy 49.790775 100.683443) ) ) (filled_polygon (layer "F.Cu") (pts (xy 49.798964 100.690117) (xy 49.830593 100.715894) (xy 49.884557 100.759874) (xy 49.915392 100.771564) (xy 49.965882 100.790708) (xy 49.965885 100.790709) (xy 50.048842 100.792383) (xy 50.147373 100.781351) (xy 50.147658 100.781326) (xy 50.263644 100.774705) (xy 50.272098 100.777655) (xy 50.275991 100.785719) (xy 50.27601 100.786376) (xy 50.276696 101.562986) (xy 50.273276 101.571262) (xy 50.265006 101.574696) (xy 50.264986 101.574696) (xy 49.490116 101.574012) (xy 49.481846 101.570578) (xy 49.478426 101.562302) (xy 49.478631 101.560131) (xy 49.509641 101.396688) (xy 49.510762 101.393459) (xy 49.581995 101.256852) (xy 49.647308 101.140376) (xy 49.647309 101.140374) (xy 49.647308 101.140374) (xy 49.64731 101.140373) (xy 49.661121 101.026349) (xy 49.66112 101.026348) (xy 49.661121 101.026348) (xy 49.621831 100.964053) (xy 49.583627 100.903478) (xy 49.582113 100.894655) (xy 49.585249 100.888968) (xy 49.783303 100.690914) (xy 49.791575 100.687488) ) ) ) (zone (net 59) (net_name "/AD+") (layer "F.Cu") (tstamp b513c0bd-7a17-4419-85c6-4c011fd35419) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30010) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 77.487846 91.163) (xy 77.451076 91.0059) (xy 77.414307 90.814498) (xy 77.377538 90.588795) (xy 77.340769 90.32879) (xy 77.304 90.034484) (xy 76.453 90.424) (xy 76.13803 91.274) (xy 76.407993 91.230021) (xy 76.677956 91.226932) (xy 76.947919 91.264732) (xy 77.217882 91.343421) (xy 77.487846 91.463) ) ) (filled_polygon (layer "F.Cu") (pts (xy 77.305006 90.046891) (xy 77.305977 90.05031) (xy 77.340769 90.32879) (xy 77.377538 90.588795) (xy 77.414307 90.814498) (xy 77.451076 91.0059) (xy 77.487538 91.161684) (xy 77.487846 91.16435) (xy 77.487846 91.44502) (xy 77.484419 91.453293) (xy 77.476146 91.45672) (xy 77.471408 91.455718) (xy 77.217888 91.343423) (xy 77.217883 91.343421) (xy 77.217882 91.343421) (xy 76.947919 91.264732) (xy 76.677956 91.226932) (xy 76.677955 91.226932) (xy 76.407996 91.23002) (xy 76.157864 91.270768) (xy 76.149148 91.268716) (xy 76.144435 91.261101) (xy 76.145011 91.255158) (xy 76.451313 90.428551) (xy 76.4574 90.421986) (xy 76.457398 90.421986) (xy 77.289499 90.04112) (xy 77.298446 90.040794) ) ) ) (zone (net 18) (net_name "3V3_BUS2") (layer "F.Cu") (tstamp b6e84104-4ea7-48b4-a50f-cc3cc2202b1b) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30003) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 60.625523 54.598249) (xy 60.585522 54.516195) (xy 60.545522 54.415169) (xy 60.505523 54.295169) (xy 60.465523 54.156195) (xy 60.425523 53.998249) (xy 57.774523 54.848249) (xy 60.425523 55.698249) (xy 60.465523 55.540302) (xy 60.505523 55.401328) (xy 60.545522 55.281328) (xy 60.585522 55.180302) (xy 60.625523 55.098249) ) ) (filled_polygon (layer "F.Cu") (pts (xy 60.422589 54.002787) (xy 60.428378 54.009619) (xy 60.428579 54.010319) (xy 60.465523 54.156195) (xy 60.505523 54.295169) (xy 60.54552 54.415165) (xy 60.585523 54.516197) (xy 60.585523 54.516198) (xy 60.62434 54.595822) (xy 60.625523 54.600949) (xy 60.625523 55.095548) (xy 60.62434 55.100675) (xy 60.585523 55.180299) (xy 60.585523 55.1803) (xy 60.54552 55.281332) (xy 60.505523 55.401328) (xy 60.465523 55.540302) (xy 60.428579 55.686178) (xy 60.423226 55.693357) (xy 60.414365 55.694648) (xy 60.413665 55.694447) (xy 57.809268 54.859389) (xy 57.802437 54.853601) (xy 57.8017 54.844677) (xy 57.807489 54.837845) (xy 57.809266 54.837109) (xy 60.413667 54.00205) ) ) ) (zone (net 64) (net_name "Net-(U2-GPIO14)") (layer "F.Cu") (tstamp b986daa0-3b5c-4458-87eb-f4a12220b154) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30043) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 39.162187 95.619853) (xy 39.190749 95.700823) (xy 39.219312 95.79988) (xy 39.247874 95.917023) (xy 39.276437 96.052252) (xy 39.305 96.205568) (xy 40.005707 96.116207) (xy 40.187562 95.603) (xy 40.024913 95.607444) (xy 39.862264 95.590138) (xy 39.699616 95.551082) (xy 39.536967 95.490276) (xy 39.374319 95.407721) ) ) (filled_polygon (layer "F.Cu") (pts (xy 39.381882 95.411559) (xy 39.536967 95.490276) (xy 39.699616 95.551082) (xy 39.862264 95.590138) (xy 39.985446 95.603244) (xy 40.024902 95.607443) (xy 40.024903 95.607442) (xy 40.024913 95.607444) (xy 40.17052 95.603465) (xy 40.178883 95.606665) (xy 40.182535 95.614841) (xy 40.181867 95.619069) (xy 40.008111 96.109419) (xy 40.002118 96.116072) (xy 39.998563 96.117117) (xy 39.315958 96.20417) (xy 39.307318 96.201817) (xy 39.302976 96.194708) (xy 39.276437 96.052252) (xy 39.247874 95.917023) (xy 39.219312 95.79988) (xy 39.190753 95.700837) (xy 39.190754 95.700837) (xy 39.164639 95.626804) (xy 39.165119 95.617862) (xy 39.167397 95.614642) (xy 39.368319 95.41372) (xy 39.376591 95.410294) ) ) ) (zone (net 1) (net_name "GND") (layer "F.Cu") (tstamp c34a63c2-2a86-401a-b01c-63be73f1a6dd) (hatch edge 0.5) (priority 1) (connect_pads (clearance 0.508)) (min_thickness 0.25) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5)) (polygon (pts (xy 33.774491 41.089783) (xy 66.424885 41.092948) (xy 66.421145 115.506428) (xy 33.742315 115.518536) ) ) (filled_polygon (layer "F.Cu") (pts (xy 50.247496 97.552185) (xy 50.268138 97.568819) (xy 52.764845 100.065526) (xy 52.79833 100.126849) (xy 52.793346 100.196541) (xy 52.751474 100.252474) (xy 52.687972 100.276735) (xy 52.549399 100.288858) (xy 52.549389 100.28886) (xy 52.329682 100.34773) (xy 52.329673 100.347734) (xy 52.123513 100.443868) (xy 52.050526 100.494973) (xy 52.665548 101.109995) (xy 52.640801 101.113554) (xy 52.516555 101.170295) (xy 52.413327 101.259742) (xy 52.339481 101.374649) (xy 52.313064 101.464617) (xy 51.696973 100.848526) (xy 51.696972 100.848527) (xy 51.645867 100.921513) (xy 51.64307 100.927513) (xy 51.596897 100.979951) (xy 51.529703 100.999102) (xy 51.462822 100.978885) (xy 51.418307 100.927511) (xy 51.41551 100.921513) (xy 51.413523 100.917251) (xy 51.282198 100.7297) (xy 51.1203 100.567802) (xy 50.932749 100.436477) (xy 50.901615 100.421959) (xy 50.725249 100.339718) (xy 50.725238 100.339714) (xy 50.504089 100.280457) (xy 50.504082 100.280456) (xy 50.292892 100.261979) (xy 50.227824 100.236526) (xy 50.186845 100.179935) (xy 50.1797 100.138451) (xy 50.1797 99.264587) (xy 50.181482 99.248449) (xy 50.181254 99.248428) (xy 50.181988 99.240665) (xy 50.1797 99.167857) (xy 50.1797 99.136774) (xy 50.1797 99.136768) (xy 50.178766 99.129375) (xy 50.178307 99.123547) (xy 50.176762 99.074371) (xy 50.176762 99.074369) (xy 50.170732 99.053614) (xy 50.166789 99.034568) (xy 50.166716 99.033987) (xy 50.164082 99.013136) (xy 50.145964 98.967376) (xy 50.144071 98.961845) (xy 50.138402 98.942335) (xy 50.130345 98.914599) (xy 50.130343 98.914595) (xy 50.130342 98.914593) (xy 50.119349 98.896007) (xy 50.110788 98.878532) (xy 50.102835 98.858444) (xy 50.073903 98.818623) (xy 50.070698 98.813743) (xy 50.063771 98.80203) (xy 50.045652 98.771393) (xy 50.030378 98.756119) (xy 50.017739 98.741321) (xy 50.005041 98.723843) (xy 50.005039 98.723841) (xy 50.00504 98.723841) (xy 49.967114 98.692467) (xy 49.962792 98.688533) (xy 49.01844 97.744181) (xy 48.984955 97.682858) (xy 48.989939 97.613166) (xy 49.031811 97.557233) (xy 49.097275 97.532816) (xy 49.106121 97.5325) (xy 50.180457 97.5325) ) ) (filled_polygon (layer "F.Cu") (pts (xy 65.159624 41.130309) (xy 65.205379 41.183113) (xy 65.215323 41.252271) (xy 65.186298 41.315827) (xy 65.149405 41.344839) (xy 65.11279 41.363715) (xy 65.112783 41.363719) (xy 65.112776 41.363723) (xy 65.112775 41.363724) (xy 65.091498 41.377398) (xy 64.76009 41.590379) (xy 64.430539 41.849542) (xy 64.430537 41.849543) (xy 64.127114 42.138856) (xy 63.852572 42.455695) (xy 63.852561 42.455708) (xy 63.609395 42.797187) (xy 63.609389 42.797196) (xy 63.399766 43.160273) (xy 63.225608 43.541625) (xy 63.225598 43.54165) (xy 63.088486 43.937808) (xy 63.088483 43.937818) (xy 62.989642 44.345247) (xy 62.929978 44.760217) (xy 62.91003 45.17899) (xy 62.929978 45.597762) (xy 62.989642 46.012732) (xy 63.088483 46.420161) (xy 63.088486 46.420171) (xy 63.216913 46.791235) (xy 63.225604 46.816345) (xy 63.337068 47.060418) (xy 63.399766 47.197706) (xy 63.449394 47.283664) (xy 63.600432 47.54527) (xy 63.609389 47.560783) (xy 63.609395 47.560792) (xy 63.852561 47.902271) (xy 63.85257 47.902281) (xy 63.852571 47.902283) (xy 63.854873 47.90494) (xy 64.116941 48.207383) (xy 64.127117 48.219126) (xy 64.430538 48.508437) (xy 64.623631 48.660287) (xy 64.76009 48.7676) (xy 64.876804 48.842607) (xy 65.112775 48.994256) (xy 65.485413 49.186365) (xy 65.874625 49.342182) (xy 66.276886 49.460296) (xy 66.276895 49.460297) (xy 66.2769 49.460299) (xy 66.323923 49.469362) (xy 66.386026 49.501377) (xy 66.420961 49.561886) (xy 66.424457 49.591127) (xy 66.423296 72.689773) (xy 66.403608 72.756812) (xy 66.350802 72.802564) (xy 66.281643 72.812504) (xy 66.218089 72.783476) (xy 66.193756 72.754862) (xy 66.171565 72.718883) (xy 66.167089 72.713223) (xy 66.167126 72.713192) (xy 66.162217 72.707165) (xy 66.162181 72.707196) (xy 66.157541 72.701667) (xy 66.157539 72.701665) (xy 66.157537 72.701662) (xy 66.126427 72.672311) (xy 66.101053 72.648371) (xy 64.82111 71.368428) (xy 64.787625 71.307105) (xy 64.784791 71.280747) (xy 64.784791 55.726876) (xy 64.7861 55.708906) (xy 64.789632 55.68479) (xy 64.785027 55.632161) (xy 64.784791 55.626754) (xy 64.784791 55.618406) (xy 64.78479 55.618395) (xy 64.780943 55.585485) (xy 64.774178 55.508158) (xy 64.772718 55.501085) (xy 64.772764 55.501075) (xy 64.771081 55.493484) (xy 64.771035 55.493496) (xy 64.769371 55.486477) (xy 64.76937 55.486469) (xy 64.742817 55.413516) (xy 64.718405 55.339844) (xy 64.718404 55.339842) (xy 64.715352 55.333297) (xy 64.715396 55.333276) (xy 64.712008 55.326277) (xy 64.711965 55.326299) (xy 64.708727 55.319851) (xy 64.666057 55.254976) (xy 64.625321 55.188931) (xy 64.620844 55.183269) (xy 64.620881 55.183238) (xy 64.615972 55.177211) (xy 64.615936 55.177242) (xy 64.611296 55.171713) (xy 64.611294 55.171711) (xy 64.611292 55.171708) (xy 64.580182 55.142357) (xy 64.554808 55.118417) (xy 63.793762 54.357372) (xy 63.78198 54.343739) (xy 63.76743 54.324195) (xy 63.767429 54.324194) (xy 63.767427 54.324191) (xy 63.766553 54.323457) (xy 63.726945 54.290221) (xy 63.722956 54.286566) (xy 63.71706 54.28067) (xy 63.717059 54.280669) (xy 63.691061 54.260112) (xy 63.631598 54.210217) (xy 63.631593 54.210214) (xy 63.625563 54.206248) (xy 63.625588 54.206208) (xy 63.619027 54.202028) (xy 63.619003 54.202069) (xy 63.612862 54.19828) (xy 63.542498 54.165469) (xy 63.473143 54.130638) (xy 63.466359 54.128169) (xy 63.466374 54.128125) (xy 63.459029 54.125571) (xy 63.459015 54.125616) (xy 63.452163 54.123345) (xy 63.414135 54.115493) (xy 63.376107 54.107641) (xy 63.300614 54.089749) (xy 63.300612 54.089749) (xy 63.300604 54.089747) (xy 63.29344 54.08891) (xy 63.293445 54.088861) (xy 63.285715 54.088071) (xy 63.285711 54.088119) (xy 63.27852 54.087489) (xy 63.200878 54.089749) (xy 61.074918 54.089749) (xy 61.007879 54.070064) (xy 60.962124 54.01726) (xy 60.954713 53.996192) (xy 60.927578 53.889048) (xy 60.924373 53.876392) (xy 60.921934 53.867898) (xy 60.897803 53.801479) (xy 60.897228 53.800563) (xy 60.886097 53.778014) (xy 60.876413 53.752048) (xy 60.876412 53.752045) (xy 60.801935 53.652556) (xy 60.77752 53.587096) (xy 60.792372 53.518823) (xy 60.801938 53.503938) (xy 60.87641 53.404456) (xy 60.876411 53.404455) (xy 60.927511 53.267453) (xy 60.927511 53.267452) (xy 60.927512 53.26745) (xy 60.931114 53.233941) (xy 60.934022 53.206903) (xy 60.934023 53.206886) (xy 60.934023 51.409611) (xy 60.934022 51.409594) (xy 60.93068 51.378519) (xy 60.927512 51.349048) (xy 60.876412 51.212045) (xy 60.788784 51.094988) (xy 60.671727 51.00736) (xy 60.534726 50.95626) (xy 60.474177 50.949749) (xy 60.474161 50.949749) (xy 56.876885 50.949749) (xy 56.876868 50.949749) (xy 56.81632 50.95626) (xy 56.816318 50.95626) (xy 56.679318 51.00736) (xy 56.562262 51.094988) (xy 56.474634 51.212044) (xy 56.423534 51.349044) (xy 56.423534 51.349046) (xy 56.417023 51.409594) (xy 56.417023 52.249499) (xy 56.416811 52.254622) (xy 56.412367 52.308244) (xy 56.412367 52.308252) (xy 56.416811 52.361874) (xy 56.417023 52.366996) (xy 56.417023 53.206903) (xy 56.423534 53.267451) (xy 56.423534 53.267453) (xy 56.474634 53.404453) (xy 56.549108 53.503938) (xy 56.573525 53.569403) (xy 56.558673 53.637676) (xy 56.549108 53.65256) (xy 56.474634 53.752044) (xy 56.423534 53.889044) (xy 56.423534 53.889046) (xy 56.417023 53.949594) (xy 56.417023 54.789499) (xy 56.416811 54.794622) (xy 56.412367 54.848244) (xy 56.412367 54.848252) (xy 56.416811 54.901874) (xy 56.417023 54.906996) (xy 56.417023 55.746903) (xy 56.423534 55.807451) (xy 56.423534 55.807453) (xy 56.473139 55.940444) (xy 56.474634 55.944453) (xy 56.517072 56.001144) (xy 56.549108 56.043938) (xy 56.573525 56.109403) (xy 56.558673 56.177676) (xy 56.549109 56.192557) (xy 56.549109 56.192559) (xy 56.549108 56.19256) (xy 56.474634 56.292044) (xy 56.423534 56.429044) (xy 56.423534 56.429046) (xy 56.417023 56.489594) (xy 56.417023 57.329499) (xy 56.416811 57.334622) (xy 56.412367 57.388244) (xy 56.412367 57.388252) (xy 56.416811 57.441874) (xy 56.417023 57.446996) (xy 56.417023 58.286903) (xy 56.423534 58.347451) (xy 56.423534 58.347453) (xy 56.474634 58.484453) (xy 56.549108 58.583938) (xy 56.573525 58.649403) (xy 56.558673 58.717676) (xy 56.549108 58.73256) (xy 56.474634 58.832044) (xy 56.423534 58.969044) (xy 56.423534 58.969046) (xy 56.417023 59.029594) (xy 56.417023 59.869499) (xy 56.416811 59.874622) (xy 56.412367 59.928244) (xy 56.412367 59.928252) (xy 56.416811 59.981874) (xy 56.417023 59.986996) (xy 56.417023 60.826903) (xy 56.423534 60.887451) (xy 56.423534 60.887453) (xy 56.474634 61.024453) (xy 56.549108 61.123938) (xy 56.573525 61.189403) (xy 56.558673 61.257676) (xy 56.549108 61.27256) (xy 56.474634 61.372044) (xy 56.423534 61.509044) (xy 56.423534 61.509046) (xy 56.417023 61.569594) (xy 56.417023 63.366903) (xy 56.423534 63.427451) (xy 56.423534 63.427453) (xy 56.474634 63.564453) (xy 56.549108 63.663938) (xy 56.573525 63.729403) (xy 56.558673 63.797676) (xy 56.549108 63.81256) (xy 56.474634 63.912044) (xy 56.423534 64.049044) (xy 56.423534 64.049046) (xy 56.417023 64.109594) (xy 56.417023 64.949499) (xy 56.416811 64.954622) (xy 56.412367 65.008244) (xy 56.412367 65.008252) (xy 56.416811 65.061874) (xy 56.417023 65.066996) (xy 56.417023 65.906903) (xy 56.423534 65.967451) (xy 56.423534 65.967453) (xy 56.474634 66.104453) (xy 56.549108 66.203938) (xy 56.573525 66.269403) (xy 56.558673 66.337676) (xy 56.549108 66.35256) (xy 56.474634 66.452044) (xy 56.423534 66.589044) (xy 56.423534 66.589046) (xy 56.417023 66.649594) (xy 56.417023 67.489499) (xy 56.416811 67.494622) (xy 56.412367 67.548244) (xy 56.412367 67.548252) (xy 56.416811 67.601874) (xy 56.417023 67.606996) (xy 56.417023 68.446903) (xy 56.423534 68.507451) (xy 56.423534 68.507453) (xy 56.474634 68.644453) (xy 56.549108 68.743938) (xy 56.573525 68.809403) (xy 56.558673 68.877676) (xy 56.549108 68.89256) (xy 56.474634 68.992044) (xy 56.423534 69.129044) (xy 56.423534 69.129046) (xy 56.417023 69.189594) (xy 56.417023 70.029499) (xy 56.416811 70.034622) (xy 56.412367 70.088244) (xy 56.412367 70.088252) (xy 56.416811 70.141874) (xy 56.417023 70.146996) (xy 56.417023 70.986903) (xy 56.423534 71.047451) (xy 56.423534 71.047453) (xy 56.474634 71.184453) (xy 56.549108 71.283938) (xy 56.573525 71.349403) (xy 56.558673 71.417676) (xy 56.549108 71.43256) (xy 56.474634 71.532044) (xy 56.423534 71.669044) (xy 56.423534 71.669046) (xy 56.417023 71.729594) (xy 56.417023 72.569499) (xy 56.416811 72.574622) (xy 56.412367 72.628244) (xy 56.412367 72.628252) (xy 56.416811 72.681874) (xy 56.417023 72.686996) (xy 56.417023 73.526903) (xy 56.423534 73.587451) (xy 56.423534 73.587453) (xy 56.464208 73.6965) (xy 56.474634 73.724453) (xy 56.562262 73.84151) (xy 56.679319 73.929138) (xy 56.816322 73.980238) (xy 56.843573 73.983167) (xy 56.876868 73.986748) (xy 56.876885 73.986749) (xy 60.474161 73.986749) (xy 60.474177 73.986748) (xy 60.501215 73.98384) (xy 60.534724 73.980238) (xy 60.671727 73.929138) (xy 60.788784 73.84151) (xy 60.876412 73.724453) (xy 60.927512 73.58745) (xy 60.931114 73.553941) (xy 60.934022 73.526903) (xy 60.934023 73.526886) (xy 60.934023 71.729611) (xy 60.934022 71.729594) (xy 60.928626 71.679411) (xy 60.927512 71.669048) (xy 60.91074 71.624082) (xy 60.876411 71.532042) (xy 60.87641 71.532041) (xy 60.801938 71.43256) (xy 60.77752 71.367096) (xy 60.792371 71.298823) (xy 60.801938 71.283938) (xy 60.87641 71.184456) (xy 60.876411 71.184455) (xy 60.927511 71.047453) (xy 60.927511 71.047452) (xy 60.927512 71.04745) (xy 60.931114 71.013941) (xy 60.934022 70.986903) (xy 60.934023 70.986886) (xy 60.934023 69.189611) (xy 60.934022 69.189594) (xy 60.93068 69.158519) (xy 60.927512 69.129048) (xy 60.876412 68.992045) (xy 60.876411 68.992042) (xy 60.87641 68.992041) (xy 60.801938 68.89256) (xy 60.77752 68.827096) (xy 60.792371 68.758823) (xy 60.801938 68.743938) (xy 60.87641 68.644456) (xy 60.876411 68.644455) (xy 60.927511 68.507453) (xy 60.927511 68.507452) (xy 60.927512 68.50745) (xy 60.931114 68.473941) (xy 60.934022 68.446903) (xy 60.934023 68.446886) (xy 60.934023 66.649611) (xy 60.934022 66.649594) (xy 60.93068 66.618519) (xy 60.927512 66.589048) (xy 60.876412 66.452045) (xy 60.876411 66.452042) (xy 60.87641 66.452041) (xy 60.801938 66.35256) (xy 60.77752 66.287096) (xy 60.792371 66.218823) (xy 60.801938 66.203938) (xy 60.87641 66.104456) (xy 60.876411 66.104455) (xy 60.927511 65.967453) (xy 60.927511 65.967452) (xy 60.927512 65.96745) (xy 60.931114 65.933941) (xy 60.934022 65.906903) (xy 60.934023 65.906886) (xy 60.934023 64.109611) (xy 60.934022 64.109594) (xy 60.93068 64.078519) (xy 60.927512 64.049048) (xy 60.876412 63.912045) (xy 60.876411 63.912042) (xy 60.87641 63.912041) (xy 60.801938 63.81256) (xy 60.77752 63.747096) (xy 60.792371 63.678823) (xy 60.801938 63.663938) (xy 60.87641 63.564456) (xy 60.876411 63.564455) (xy 60.927511 63.427453) (xy 60.927511 63.427452) (xy 60.927512 63.42745) (xy 60.931114 63.393941) (xy 60.934022 63.366903) (xy 60.934023 63.366886) (xy 60.934023 61.569611) (xy 60.934022 61.569594) (xy 60.93068 61.538519) (xy 60.927512 61.509048) (xy 60.876412 61.372045) (xy 60.876411 61.372042) (xy 60.87641 61.372041) (xy 60.801938 61.27256) (xy 60.77752 61.207096) (xy 60.792371 61.138823) (xy 60.801938 61.123938) (xy 60.87641 61.024456) (xy 60.876411 61.024455) (xy 60.927511 60.887453) (xy 60.927511 60.887452) (xy 60.927512 60.88745) (xy 60.931114 60.853941) (xy 60.934022 60.826903) (xy 60.934023 60.826886) (xy 60.934023 59.029611) (xy 60.934022 59.029594) (xy 60.93068 58.998519) (xy 60.927512 58.969048) (xy 60.876412 58.832045) (xy 60.876411 58.832042) (xy 60.87641 58.832041) (xy 60.801938 58.73256) (xy 60.77752 58.667096) (xy 60.792371 58.598823) (xy 60.801938 58.583938) (xy 60.87641 58.484456) (xy 60.876411 58.484455) (xy 60.927511 58.347453) (xy 60.927511 58.347452) (xy 60.927512 58.34745) (xy 60.931114 58.313941) (xy 60.934022 58.286903) (xy 60.934023 58.286886) (xy 60.934023 56.489611) (xy 60.934022 56.489594) (xy 60.93068 56.458519) (xy 60.927512 56.429048) (xy 60.876412 56.292045) (xy 60.801936 56.192557) (xy 60.77752 56.127095) (xy 60.792372 56.058822) (xy 60.801928 56.043949) (xy 60.831456 56.004504) (xy 60.834161 56.001144) (xy 60.83486 56.000333) (xy 60.834885 56.000309) (xy 60.840238 55.99313) (xy 60.841422 55.991349) (xy 60.843376 55.988582) (xy 60.876412 55.944453) (xy 60.919615 55.828621) (xy 60.926363 55.812245) (xy 60.954713 55.700305) (xy 60.990255 55.64015) (xy 61.052676 55.60876) (xy 61.074918 55.606749) (xy 62.846415 55.606749) (xy 62.913454 55.626434) (xy 62.934096 55.643068) (xy 63.231472 55.940444) (xy 63.264957 56.001767) (xy 63.267791 56.028125) (xy 63.267791 71.581997) (xy 63.266482 71.599967) (xy 63.262949 71.624082) (xy 63.267555 71.676711) (xy 63.267791 71.682118) (xy 63.267791 71.690469) (xy 63.271638 71.723387) (xy 63.278403 71.800718) (xy 63.279863 71.807785) (xy 63.279817 71.807794) (xy 63.2815 71.815385) (xy 63.281545 71.815375) (xy 63.28321 71.822401) (xy 63.309764 71.895356) (xy 63.334177 71.969028) (xy 63.337231 71.975577) (xy 63.337187 71.975597) (xy 63.340575 71.982595) (xy 63.340618 71.982574) (xy 63.343854 71.989019) (xy 63.343856 71.989023) (xy 63.386524 72.053896) (xy 63.427261 72.119942) (xy 63.427263 72.119944) (xy 63.431742 72.125609) (xy 63.431704 72.125638) (xy 63.436611 72.131663) (xy 63.436648 72.131633) (xy 63.441293 72.137169) (xy 63.497773 72.190454) (xy 64.777717 73.470398) (xy 64.811202 73.531721) (xy 64.814036 73.558079) (xy 64.814036 73.648588) (xy 64.794351 73.715627) (xy 64.741547 73.761382) (xy 64.672389 73.771326) (xy 64.64887 73.76432) (xy 64.648593 73.765157) (xy 64.641739 73.762886) (xy 64.641738 73.762885) (xy 64.525756 73.724453) (xy 64.473427 73.707113) (xy 64.369546 73.6965) (xy 63.768462 73.6965) (xy 63.768446 73.696501) (xy 63.664572 73.707113) (xy 63.496264 73.762884) (xy 63.496259 73.762886) (xy 63.345346 73.855971) (xy 63.21997 73.981347) (xy 63.219968 73.98135) (xy 63.219541 73.982043) (xy 63.219123 73.982418) (xy 63.215489 73.987015) (xy 63.214703 73.986393) (xy 63.167591 74.028764) (xy 63.098627 74.039983) (xy 63.034547 74.012136) (xy 63.016739 73.991578) (xy 63.015798 73.992323) (xy 63.011316 73.986655) (xy 62.887345 73.862684) (xy 62.738124 73.770643) (xy 62.738119 73.770641) (xy 62.571697 73.715494) (xy 62.57169 73.715493) (xy 62.468986 73.705) (xy 62.419 73.705) (xy 62.419 76.154999) (xy 62.468972 76.154999) (xy 62.468986 76.154998) (xy 62.571697 76.144505) (xy 62.738119 76.089358) (xy 62.738124 76.089356) (xy 62.887345 75.997315) (xy 63.011316 75.873344) (xy 63.015798 75.867677) (xy 63.017991 75.869411) (xy 63.060357 75.831265) (xy 63.129314 75.820008) (xy 63.19341 75.847818) (xy 63.215334 75.873106) (xy 63.215489 75.872985) (xy 63.218183 75.876392) (xy 63.219545 75.877963) (xy 63.21997 75.878652) (xy 63.345348 76.00403) (xy 63.496262 76.097115) (xy 63.664574 76.152887) (xy 63.768455 76.1635) (xy 64.369544 76.163499) (xy 64.473426 76.152887) (xy 64.641738 76.097115) (xy 64.641739 76.097113) (xy 64.648593 76.094843) (xy 64.64939 76.097248) (xy 64.706681 76.088533) (xy 64.770471 76.117038) (xy 64.808724 76.175506) (xy 64.814036 76.211411) (xy 64.814036 81.511921) (xy 64.794351 81.57896) (xy 64.777717 81.599602) (xy 64.651028 81.726291) (xy 64.589705 81.759776) (xy 64.563347 81.76261) (xy 63.943495 81.76261) (xy 63.90617 81.765547) (xy 63.906164 81.765548) (xy 63.746403 81.811963) (xy 63.746398 81.811965) (xy 63.603196 81.896654) (xy 63.603187 81.896661) (xy 63.485551 82.014297) (xy 63.485544 82.014306) (xy 63.400855 82.157508) (xy 63.400853 82.157513) (xy 63.354438 82.317274) (xy 63.354437 82.31728) (xy 63.3515 82.354605) (xy 63.3515 82.787615) (xy 63.354437 82.824939) (xy 63.354438 82.824945) (xy 63.377088 82.902905) (xy 63.376889 82.972775) (xy 63.338947 83.031445) (xy 63.275308 83.060288) (xy 63.258012 83.0615) (xy 62.294294 83.0615) (xy 62.276324 83.060191) (xy 62.252206 83.056658) (xy 62.206651 83.060645) (xy 62.199573 83.061264) (xy 62.194172 83.0615) (xy 62.185819 83.0615) (xy 62.152903 83.065347) (xy 62.075574 83.072112) (xy 62.068506 83.073572) (xy 62.068496 83.073528) (xy 62.060906 83.07521) (xy 62.060917 83.075254) (xy 62.053893 83.076919) (xy 62.053887 83.07692) (xy 62.053887 83.076921) (xy 62.029414 83.085827) (xy 61.980933 83.103473) (xy 61.907257 83.127887) (xy 61.90072 83.130936) (xy 61.9007 83.130894) (xy 61.893696 83.134285) (xy 61.893717 83.134326) (xy 61.887269 83.137564) (xy 61.822394 83.180233) (xy 61.756352 83.220967) (xy 61.750683 83.22545) (xy 61.750653 83.225413) (xy 61.744627 83.230322) (xy 61.744657 83.230357) (xy 61.739132 83.234993) (xy 61.685836 83.291482) (xy 61.139632 83.837685) (xy 61.078309 83.87117) (xy 61.008617 83.866186) (xy 60.952684 83.824314) (xy 60.928267 83.75885) (xy 60.928661 83.736754) (xy 60.934023 83.686887) (xy 60.934023 81.889611) (xy 60.934022 81.889594) (xy 60.93068 81.858519) (xy 60.927512 81.829048) (xy 60.92114 81.811965) (xy 60.876411 81.692042) (xy 60.87641 81.692041) (xy 60.801938 81.59256) (xy 60.77752 81.527096) (xy 60.792371 81.458823) (xy 60.801938 81.443938) (xy 60.87641 81.344456) (xy 60.876411 81.344455) (xy 60.927511 81.207453) (xy 60.927511 81.207452) (xy 60.927512 81.20745) (xy 60.931114 81.173941) (xy 60.934022 81.146903) (xy 60.934023 81.146886) (xy 60.934023 79.349611) (xy 60.934022 79.349594) (xy 60.93068 79.318519) (xy 60.927512 79.289048) (xy 60.876412 79.152045) (xy 60.876411 79.152042) (xy 60.87641 79.152041) (xy 60.801938 79.05256) (xy 60.77752 78.987096) (xy 60.792371 78.918823) (xy 60.801938 78.903938) (xy 60.87641 78.804456) (xy 60.876411 78.804455) (xy 60.927511 78.667453) (xy 60.927511 78.667452) (xy 60.927512 78.66745) (xy 60.931114 78.633941) (xy 60.934022 78.606903) (xy 60.934023 78.606886) (xy 60.934023 76.809611) (xy 60.934022 76.809594) (xy 60.93068 76.778519) (xy 60.927512 76.749048) (xy 60.876412 76.612045) (xy 60.788784 76.494988) (xy 60.671727 76.40736) (xy 60.534726 76.35626) (xy 60.474177 76.349749) (xy 60.474161 76.349749) (xy 56.876885 76.349749) (xy 56.876868 76.349749) (xy 56.81632 76.35626) (xy 56.816318 76.35626) (xy 56.679318 76.40736) (xy 56.562262 76.494988) (xy 56.474634 76.612044) (xy 56.423534 76.749044) (xy 56.423534 76.749046) (xy 56.417023 76.809594) (xy 56.417023 77.649499) (xy 56.416811 77.654622) (xy 56.412367 77.708244) (xy 56.412367 77.708252) (xy 56.416811 77.761874) (xy 56.417023 77.766996) (xy 56.417023 78.606903) (xy 56.423534 78.667451) (xy 56.423534 78.667453) (xy 56.474634 78.804453) (xy 56.549108 78.903938) (xy 56.573525 78.969403) (xy 56.558673 79.037676) (xy 56.549108 79.05256) (xy 56.474634 79.152044) (xy 56.423534 79.289044) (xy 56.423534 79.289046) (xy 56.417023 79.349594) (xy 56.417023 80.189499) (xy 56.416811 80.194622) (xy 56.412367 80.248244) (xy 56.412367 80.248252) (xy 56.416811 80.301874) (xy 56.417023 80.306996) (xy 56.417023 81.146903) (xy 56.423534 81.207451) (xy 56.423534 81.207453) (xy 56.474634 81.344453) (xy 56.549108 81.443938) (xy 56.573525 81.509403) (xy 56.558673 81.577676) (xy 56.549108 81.59256) (xy 56.474634 81.692044) (xy 56.423534 81.829044) (xy 56.423534 81.829046) (xy 56.417023 81.889594) (xy 56.417023 82.729499) (xy 56.416811 82.734622) (xy 56.41242 82.787615) (xy 56.412367 82.788249) (xy 56.415407 82.824941) (xy 56.416811 82.841874) (xy 56.417023 82.846996) (xy 56.417023 83.686903) (xy 56.423534 83.747451) (xy 56.423534 83.747453) (xy 56.474634 83.884453) (xy 56.549108 83.983938) (xy 56.573525 84.049403) (xy 56.558673 84.117676) (xy 56.549108 84.13256) (xy 56.474634 84.232044) (xy 56.423534 84.369044) (xy 56.423534 84.369046) (xy 56.417023 84.429594) (xy 56.417023 85.269499) (xy 56.416811 85.274622) (xy 56.41242 85.327612) (xy 56.412367 85.328249) (xy 56.415407 85.364941) (xy 56.416811 85.381874) (xy 56.417023 85.386996) (xy 56.417023 86.226903) (xy 56.423534 86.287451) (xy 56.423534 86.287453) (xy 56.474634 86.424453) (xy 56.562262 86.54151) (xy 56.679319 86.629138) (xy 56.816322 86.680238) (xy 56.843573 86.683167) (xy 56.876868 86.686748) (xy 56.876885 86.686749) (xy 60.4331 86.686749) (xy 60.500139 86.706434) (xy 60.545894 86.759238) (xy 60.5571 86.810749) (xy 60.5571 88.925031) (xy 60.537415 88.99207) (xy 60.484611 89.037825) (xy 60.429521 89.048979) (xy 60.402575 89.0482) (xy 60.396497 89.048623) (xy 60.396496 89.048617) (xy 60.383009 89.049749) (xy 56.876868 89.049749) (xy 56.81632 89.05626) (xy 56.816318 89.05626) (xy 56.679318 89.10736) (xy 56.562262 89.194988) (xy 56.474634 89.312044) (xy 56.423534 89.449044) (xy 56.423534 89.449046) (xy 56.417023 89.509594) (xy 56.417023 90.349499) (xy 56.416811 90.354622) (xy 56.412367 90.408244) (xy 56.412367 90.408252) (xy 56.416811 90.461874) (xy 56.417023 90.466996) (xy 56.417023 91.306903) (xy 56.423534 91.367451) (xy 56.423534 91.367453) (xy 56.474634 91.504453) (xy 56.549108 91.603938) (xy 56.573525 91.669403) (xy 56.558673 91.737676) (xy 56.549109 91.752557) (xy 56.544251 91.759048) (xy 56.474634 91.852044) (xy 56.423534 91.989044) (xy 56.423534 91.989046) (xy 56.417023 92.049594) (xy 56.417023 92.889499) (xy 56.416811 92.894622) (xy 56.412367 92.948244) (xy 56.412367 92.948252) (xy 56.416811 93.001874) (xy 56.417023 93.006996) (xy 56.417023 93.846903) (xy 56.423534 93.907451) (xy 56.423534 93.907453) (xy 56.462527 94.011993) (xy 56.474634 94.044453) (xy 56.562262 94.16151) (xy 56.679319 94.249138) (xy 56.816322 94.300238) (xy 56.843573 94.303167) (xy 56.876868 94.306748) (xy 56.876885 94.306749) (xy 60.474161 94.306749) (xy 60.474177 94.306748) (xy 60.501215 94.30384) (xy 60.534724 94.300238) (xy 60.671727 94.249138) (xy 60.788784 94.16151) (xy 60.831456 94.104504) (xy 60.834161 94.101144) (xy 60.83486 94.100333) (xy 60.834885 94.100309) (xy 60.840238 94.09313) (xy 60.841422 94.091349) (xy 60.843376 94.088582) (xy 60.876412 94.044453) (xy 60.919615 93.928621) (xy 60.926363 93.912245) (xy 60.959516 93.781336) (xy 60.995057 93.721183) (xy 61.043912 93.694993) (xy 61.043477 93.693798) (xy 61.050262 93.691328) (xy 61.050264 93.691328) (xy 61.123216 93.664775) (xy 61.196889 93.640363) (xy 61.196897 93.640357) (xy 61.203435 93.63731) (xy 61.203456 93.637355) (xy 61.210453 93.633968) (xy 61.210431 93.633924) (xy 61.21688 93.630685) (xy 61.216879 93.630685) (xy 61.216883 93.630684) (xy 61.281756 93.588015) (xy 61.347802 93.547279) (xy 61.347806 93.547274) (xy 61.35347 93.542797) (xy 61.353501 93.542836) (xy 61.359525 93.537929) (xy 61.359493 93.537891) (xy 61.365015 93.533256) (xy 61.365025 93.53325) (xy 61.386974 93.509984) (xy 61.418314 93.476767) (xy 62.355419 92.539661) (xy 62.77168 92.123399) (xy 62.785306 92.111623) (xy 62.804858 92.097069) (xy 62.838815 92.0566) (xy 62.842475 92.052605) (xy 62.842702 92.052378) (xy 62.84838 92.046701) (xy 62.868936 92.020703) (xy 62.905934 91.976611) (xy 62.918833 91.961239) (xy 62.922803 91.955203) (xy 62.922843 91.955229) (xy 62.927012 91.948686) (xy 62.926971 91.948661) (xy 62.930764 91.942511) (xy 62.930765 91.942508) (xy 62.930767 91.942506) (xy 62.963573 91.872152) (xy 62.998409 91.802788) (xy 62.99841 91.80278) (xy 63.000879 91.796) (xy 63.000926 91.796017) (xy 63.003478 91.788675) (xy 63.003431 91.78866) (xy 63.0057 91.781811) (xy 63.0057 91.781809) (xy 63.005702 91.781806) (xy 63.021399 91.705781) (xy 63.0393 91.630256) (xy 63.0393 91.630254) (xy 63.039301 91.63025) (xy 63.040139 91.623083) (xy 63.040186 91.623088) (xy 63.040976 91.615357) (xy 63.040929 91.615353) (xy 63.041558 91.608162) (xy 63.0393 91.53054) (xy 63.0393 86.631111) (xy 63.362704 86.631111) (xy 63.362899 86.633596) (xy 63.408718 86.791308) (xy 63.492314 86.932662) (xy 63.492321 86.932671) (xy 63.608438 87.048788) (xy 63.608447 87.048795) (xy 63.749803 87.132392) (xy 63.749806 87.132393) (xy 63.907504 87.178209) (xy 63.90751 87.17821) (xy 63.944356 87.18111) (xy 64.585 87.18111) (xy 64.585 86.63111) (xy 63.362705 86.63111) (xy 63.362704 86.631111) (xy 63.0393 86.631111) (xy 63.0393 85.9725) (xy 63.058985 85.905461) (xy 63.111789 85.859706) (xy 63.1633 85.8485) (xy 63.27913 85.8485) (xy 63.346169 85.868185) (xy 63.391924 85.920989) (xy 63.401868 85.990147) (xy 63.398206 86.007095) (xy 63.3629 86.128615) (xy 63.362899 86.128621) (xy 63.362704 86.131108) (xy 63.362705 86.13111) (xy 64.961 86.13111) (xy 65.028039 86.150795) (xy 65.073794 86.203599) (xy 65.085 86.25511) (xy 65.085 87.18111) (xy 65.725644 87.18111) (xy 65.762489 87.17821) (xy 65.762495 87.178209) (xy 65.920193 87.132393) (xy 65.920196 87.132392) (xy 66.061552 87.048795) (xy 66.061561 87.048788) (xy 66.177678 86.932671) (xy 66.177684 86.932663) (xy 66.191847 86.908716) (xy 66.242916 86.861033) (xy 66.311657 86.848529) (xy 66.376247 86.875174) (xy 66.416177 86.932509) (xy 66.422579 86.971843) (xy 66.421151 115.382479) (xy 66.401463 115.449518) (xy 66.348657 115.49527) (xy 66.297197 115.506473) (xy 35.497278 115.517884) (xy 35.473041 115.515501) (xy 35.266356 115.474389) (xy 35.258516 115.472288) (xy 35.140082 115.432086) (xy 35.021651 115.391884) (xy 35.01415 115.388777) (xy 34.903587 115.334253) (xy 34.7898 115.278138) (xy 34.782775 115.274082) (xy 34.574791 115.135111) (xy 34.56835 115.130168) (xy 34.380287 114.965239) (xy 34.374546 114.959498) (xy 34.209619 114.771433) (xy 34.204677 114.764992) (xy 34.065707 114.557007) (xy 34.061648 114.549976) (xy 33.951014 114.325628) (xy 33.947907 114.318127) (xy 33.867501 114.081252) (xy 33.865406 114.073431) (xy 33.816606 113.828081) (xy 33.815548 113.820039) (xy 33.799036 113.568068) (xy 33.798903 113.564013) (xy 33.798903 104.451) (xy 36.875001 104.451) (xy 36.875001 104.500986) (xy 36.885494 104.603697) (xy 36.940641 104.770119) (xy 36.940643 104.770124) (xy 37.032684 104.919345) (xy 37.156654 105.043315) (xy 37.305875 105.135356) (xy 37.30588 105.135358) (xy 37.472302 105.190505) (xy 37.472309 105.190506) (xy 37.575019 105.200999) (xy 37.849999 105.200999) (xy 37.85 105.200998) (xy 37.85 104.451) (xy 38.35 104.451) (xy 38.35 105.200999) (xy 38.624972 105.200999) (xy 38.624986 105.200998) (xy 38.727697 105.190505) (xy 38.894119 105.135358) (xy 38.894124 105.135356) (xy 39.043345 105.043315) (xy 39.167315 104.919345) (xy 39.259356 104.770124) (xy 39.259358 104.770119) (xy 39.314505 104.603697) (xy 39.314506 104.60369) (xy 39.324999 104.500986) (xy 39.325 104.500973) (xy 39.325 104.451) (xy 38.35 104.451) (xy 37.85 104.451) (xy 36.875001 104.451) (xy 33.798903 104.451) (xy 33.798903 98.253537) (xy 36.6375 98.253537) (xy 36.637501 98.253553) (xy 36.648113 98.357427) (xy 36.703884 98.525735) (xy 36.703886 98.52574) (xy 36.720848 98.55324) (xy 36.79697 98.676652) (xy 36.922348 98.80203) (xy 37.073262 98.895115) (xy 37.241574 98.950887) (xy 37.345455 98.9615) (xy 37.8255 98.961499) (xy 37.892539 98.981183) (xy 37.938294 99.033987) (xy 37.9495 99.085499) (xy 37.9495 99.227609) (xy 37.947718 99.243746) (xy 37.947946 99.243768) (xy 37.947211 99.251534) (xy 37.9495 99.324342) (xy 37.9495 99.355434) (xy 37.950433 99.362829) (xy 37.950891 99.368647) (xy 37.952437 99.417829) (xy 37.952438 99.417832) (xy 37.958464 99.438577) (xy 37.962407 99.457618) (xy 37.965116 99.479053) (xy 37.965117 99.479057) (xy 37.965118 99.479064) (xy 37.981284 99.519897) (xy 37.983234 99.524822) (xy 37.985125 99.530348) (xy 37.998854 99.577598) (xy 38.00985 99.596191) (xy 38.01841 99.613665) (xy 38.026363 99.633754) (xy 38.055289 99.673565) (xy 38.05849 99.678437) (xy 38.083547 99.720807) (xy 38.083551 99.720811) (xy 38.09882 99.73608) (xy 38.111459 99.750877) (xy 38.124159 99.768358) (xy 38.162074 99.799723) (xy 38.166385 99.803645) (xy 38.337545 99.974805) (xy 38.337547 99.974807) (xy 38.71628 100.353539) (xy 38.726436 100.366215) (xy 38.726612 100.36607) (xy 38.731584 100.37208) (xy 38.7847 100.421959) (xy 38.806667 100.443926) (xy 38.811922 100.448002) (xy 38.812547 100.448487) (xy 38.81699 100.452282) (xy 38.852865 100.485971) (xy 38.852867 100.485972) (xy 38.871794 100.496377) (xy 38.888054 100.507057) (xy 38.905131 100.520304) (xy 38.950301 100.539851) (xy 38.955537 100.542415) (xy 38.998663 100.566124) (xy 39.018667 100.57126) (xy 39.019586 100.571496) (xy 39.037991 100.577797) (xy 39.057823 100.586379) (xy 39.106453 100.594081) (xy 39.112122 100.595255) (xy 39.159812 100.6075) (xy 39.181418 100.6075) (xy 39.200816 100.609026) (xy 39.222151 100.612406) (xy 39.267264 100.608141) (xy 39.271141 100.607775) (xy 39.276979 100.6075) (xy 40.429812 100.6075) (xy 40.807609 100.6075) (xy 40.823746 100.609281) (xy 40.823768 100.609054) (xy 40.831534 100.609788) (xy 40.831536 100.609787) (xy 40.831537 100.609788) (xy 40.904342 100.6075) (xy 40.935432 100.6075) (xy 40.942823 100.606566) (xy 40.948651 100.606107) (xy 40.997831 100.604562) (xy 41.018583 100.598532) (xy 41.037621 100.59459) (xy 41.059064 100.591882) (xy 41.104834 100.57376) (xy 41.110348 100.571873) (xy 41.136875 100.564165) (xy 41.1576 100.558145) (xy 41.176196 100.547146) (xy 41.193664 100.538589) (xy 41.213756 100.530635) (xy 41.253582 100.501698) (xy 41.258441 100.498506) (xy 41.300807 100.473453) (xy 41.31609 100.458168) (xy 41.330873 100.445542) (xy 41.348357 100.432841) (xy 41.379731 100.394914) (xy 41.383645 100.390613) (xy 42.249473 99.524785) (xy 42.262144 99.514636) (xy 42.261998 99.514459) (xy 42.268004 99.509489) (xy 42.26801 99.509486) (xy 42.317888 99.45637) (xy 42.339856 99.434403) (xy 42.344418 99.428521) (xy 42.34821 99.42408) (xy 42.381902 99.388203) (xy 42.392306 99.369275) (xy 42.402984 99.353019) (xy 42.416234 99.335939) (xy 42.435785 99.290757) (xy 42.438341 99.285538) (xy 42.457386 99.250898) (xy 42.461834 99.242808) (xy 42.511383 99.193547) (xy 42.570493 99.178551) (xy 42.843581 99.178551) (xy 42.843597 99.17855) (xy 42.881503 99.174474) (xy 42.904144 99.17204) (xy 42.951586 99.154344) (xy 43.021274 99.149361) (xy 43.038239 99.154341) (xy 43.08569 99.17204) (xy 43.10267 99.173865) (xy 43.146236 99.17855) (xy 43.146253 99.178551) (xy 43.793543 99.178551) (xy 43.793559 99.17855) (xy 43.831465 99.174474) (xy 43.854106 99.17204) (xy 43.901548 99.154344) (xy 43.971236 99.149361) (xy 43.988201 99.154341) (xy 44.035652 99.17204) (xy 44.052632 99.173865) (xy 44.096198 99.17855) (xy 44.096215 99.178551) (xy 44.743505 99.178551) (xy 44.743521 99.17855) (xy 44.770559 99.175642) (xy 44.804068 99.17204) (xy 44.941071 99.12094) (xy 45.058128 99.033312) (xy 45.145756 98.916255) (xy 45.196856 98.779252) (xy 45.202813 98.723843) (xy 45.203366 98.718705) (xy 45.203367 98.718688) (xy 45.203367 97.8525) (xy 45.223052 97.785461) (xy 45.275856 97.739706) (xy 45.327367 97.7285) (xy 46.31106 97.7285) (xy 46.378099 97.748185) (xy 46.398741 97.764819) (xy 48.276381 99.642458) (xy 48.309866 99.703781) (xy 48.3127 99.730139) (xy 48.3127 100.143666) (xy 48.293015 100.210705) (xy 48.240211 100.25646) (xy 48.199508 100.267194) (xy 48.047917 100.280456) (xy 48.04791 100.280457) (xy 47.826755 100.339716) (xy 47.767747 100.367231) (xy 47.735753 100.381124) (xy 47.729113 100.384975) (xy 47.724209 100.387534) (xy 47.619251 100.436476) (xy 47.518448 100.50706) (xy 47.434097 100.566124) (xy 47.431699 100.567803) (xy 47.270579 100.728923) (xy 47.209256 100.762407) (xy 47.139564 100.757423) (xy 47.083631 100.715551) (xy 47.066717 100.684576) (xy 47.039798 100.612406) (xy 47.026889 100.577796) (xy 46.939261 100.460739) (xy 46.822204 100.373111) (xy 46.806442 100.367232) (xy 46.685203 100.322011) (xy 46.624654 100.3155) (xy 46.624638 100.3155) (xy 44.927362 100.3155) (xy 44.927345 100.3155) (xy 44.866797 100.322011) (xy 44.866795 100.322011) (xy 44.729795 100.373111) (xy 44.612739 100.460739) (xy 44.525111 100.577795) (xy 44.474011 100.714795) (xy 44.474011 100.714797) (xy 44.4675 100.775345) (xy 44.4675 100.918579) (xy 44.463519 100.949747) (xy 44.449776 101.002668) (xy 44.413873 101.062607) (xy 44.351264 101.093621) (xy 44.329757 101.0955) (xy 40.144294 101.0955) (xy 40.126324 101.094191) (xy 40.102206 101.090658) (xy 40.056651 101.094645) (xy 40.049573 101.095264) (xy 40.044172 101.0955) (xy 40.03582 101.0955) (xy 40.019362 101.097423) (xy 40.002904 101.099347) (xy 39.925577 101.106112) (xy 39.918503 101.107573) (xy 39.918493 101.107526) (xy 39.910905 101.109209) (xy 39.910916 101.109255) (xy 39.90389 101.11092) (xy 39.903887 101.11092) (xy 39.903887 101.110921) (xy 39.882187 101.118819) (xy 39.830944 101.137469) (xy 39.757261 101.161885) (xy 39.750713 101.164939) (xy 39.750693 101.164896) (xy 39.743695 101.168284) (xy 39.743717 101.168327) (xy 39.737261 101.171568) (xy 39.672386 101.214237) (xy 39.606346 101.254972) (xy 39.600686 101.259448) (xy 39.600656 101.259411) (xy 39.594626 101.264323) (xy 39.594656 101.264358) (xy 39.589127 101.268997) (xy 39.566953 101.2925) (xy 39.535821 101.325497) (xy 39.430135 101.431185) (xy 39.421139 101.440181) (xy 39.359816 101.473666) (xy 39.333457 101.4765) (xy 39.122776 101.4765) (xy 39.055737 101.456815) (xy 39.050853 101.453328) (xy 39.048653 101.451971) (xy 39.048652 101.45197) (xy 38.897738 101.358885) (xy 38.897735 101.358884) (xy 38.872039 101.350368) (xy 38.868588 101.34911) (xy 38.862001 101.346485) (xy 38.861999 101.346484) (xy 38.806108 101.327846) (xy 38.802689 101.327075) (xy 38.796827 101.325447) (xy 38.729427 101.303113) (xy 38.625546 101.2925) (xy 37.574462 101.2925) (xy 37.574446 101.292501) (xy 37.470572 101.303113) (xy 37.302264 101.358884) (xy 37.302259 101.358886) (xy 37.151346 101.451971) (xy 37.025971 101.577346) (xy 36.932886 101.728259) (xy 36.932884 101.728264) (xy 36.877113 101.896572) (xy 36.8665 102.000447) (xy 36.8665 102.601537) (xy 36.866501 102.601553) (xy 36.877113 102.705427) (xy 36.932884 102.873735) (xy 36.932886 102.87374) (xy 36.940778 102.886535) (xy 37.02597 103.024652) (xy 37.151348 103.15003) (xy 37.152031 103.150451) (xy 37.152401 103.150863) (xy 37.157015 103.154511) (xy 37.156391 103.155298) (xy 37.198759 103.202397) (xy 37.209984 103.271359) (xy 37.182144 103.335442) (xy 37.161582 103.353264) (xy 37.162323 103.354202) (xy 37.156655 103.358683) (xy 37.032684 103.482654) (xy 36.940643 103.631875) (xy 36.940641 103.63188) (xy 36.885494 103.798302) (xy 36.885493 103.798309) (xy 36.875 103.901013) (xy 36.875 103.951) (xy 39.324999 103.951) (xy 39.324999 103.901028) (xy 39.324998 103.901013) (xy 39.314505 103.798302) (xy 39.259358 103.63188) (xy 39.259356 103.631875) (xy 39.167315 103.482654) (xy 39.043344 103.358683) (xy 39.037677 103.354202) (xy 39.039404 103.352016) (xy 39.00124 103.309589) (xy 38.990015 103.240627) (xy 39.017855 103.176543) (xy 39.043106 103.154664) (xy 39.042985 103.154511) (xy 39.046401 103.151809) (xy 39.047969 103.150451) (xy 39.048652 103.15003) (xy 39.168863 103.029819) (xy 39.230186 102.996334) (xy 39.256544 102.9935) (xy 39.634706 102.9935) (xy 39.652676 102.994809) (xy 39.655174 102.995174) (xy 39.676789 102.998341) (xy 39.729426 102.993735) (xy 39.734828 102.9935) (xy 39.743175 102.9935) (xy 39.74318 102.9935) (xy 39.766835 102.990734) (xy 39.776096 102.989652) (xy 39.853419 102.982888) (xy 39.853422 102.982887) (xy 39.853426 102.982887) (xy 39.853429 102.982885) (xy 39.860493 102.981427) (xy 39.860502 102.981474) (xy 39.868097 102.97979) (xy 39.868087 102.979744) (xy 39.875107 102.978079) (xy 39.875113 102.978079) (xy 39.948065 102.951526) (xy 40.021738 102.927114) (xy 40.021746 102.927108) (xy 40.028284 102.924061) (xy 40.028305 102.924106) (xy 40.035302 102.920719) (xy 40.03528 102.920675) (xy 40.041729 102.917436) (xy 40.041728 102.917436) (xy 40.041732 102.917435) (xy 40.106605 102.874766) (xy 40.172651 102.83403) (xy 40.172655 102.834025) (xy 40.178319 102.829548) (xy 40.17835 102.829587) (xy 40.184374 102.82468) (xy 40.184342 102.824642) (xy 40.189869 102.820003) (xy 40.189874 102.820001) (xy 40.200928 102.808285) (xy 40.243163 102.763517) (xy 40.357863 102.648818) (xy 40.419186 102.615334) (xy 40.445544 102.6125) (xy 41.352787 102.6125) (xy 41.419826 102.632185) (xy 41.465581 102.684989) (xy 41.46669 102.691136) (xy 42.086389 103.310835) (xy 41.927931 103.430499) (xy 41.784348 103.588001) (xy 41.735439 103.666992) (xy 41.125883 103.057436) (xy 41.125882 103.057437) (xy 41.019196 103.199953) (xy 41.019191 103.199961) (xy 40.882091 103.451041) (xy 40.782109 103.719104) (xy 40.7213 103.998637) (xy 40.700891 104.283998) (xy 40.700891 104.284001) (xy 40.7213 104.569362) (xy 40.782109 104.848895) (xy 40.882091 105.116958) (xy 41.019191 105.368038) (xy 41.019196 105.368046) (xy 41.125882 105.510561) (xy 41.125883 105.510562) (xy 41.735438 104.901006) (xy 41.784348 104.979999) (xy 41.927931 105.137501) (xy 42.086388 105.257163) (xy 41.479436 105.864115) (xy 41.62196 105.970807) (xy 41.621961 105.970808) (xy 41.873042 106.107908) (xy 41.873041 106.107908) (xy 42.141104 106.20789) (xy 42.420637 106.268699) (xy 42.705999 106.289109) (xy 42.706001 106.289109) (xy 42.991362 106.268699) (xy 43.270895 106.20789) (xy 43.538958 106.107908) (xy 43.790047 105.970803) (xy 43.932561 105.864116) (xy 43.932562 105.864115) (xy 43.325611 105.257163) (xy 43.484069 105.137501) (xy 43.627652 104.979999) (xy 43.67656 104.901007) (xy 44.286115 105.510562) (xy 44.286116 105.510561) (xy 44.392803 105.368047) (xy 44.529908 105.116958) (xy 44.62989 104.848895) (xy 44.690699 104.569362) (xy 44.711109 104.284001) (xy 44.711109 104.283998) (xy 44.690699 103.998637) (xy 44.62989 103.719104) (xy 44.529908 103.451041) (xy 44.392808 103.199961) (xy 44.392807 103.19996) (xy 44.286115 103.057436) (xy 43.67656 103.666991) (xy 43.627652 103.588001) (xy 43.484069 103.430499) (xy 43.32561 103.310835) (xy 43.94788 102.688566) (xy 43.950381 102.67707) (xy 43.999788 102.627666) (xy 44.059212 102.6125) (xy 44.494703 102.6125) (xy 44.561742 102.632185) (xy 44.593969 102.662188) (xy 44.612739 102.687261) (xy 44.729796 102.774889) (xy 44.797831 102.800265) (xy 44.866795 102.825988) (xy 44.866798 102.825989) (xy 44.906755 102.830285) (xy 44.971306 102.857023) (xy 45.011155 102.914415) (xy 45.0175 102.953574) (xy 45.0175 105.604335) (xy 45.016191 105.622305) (xy 45.012658 105.64642) (xy 45.017264 105.699049) (xy 45.0175 105.704456) (xy 45.0175 105.712807) (xy 45.021347 105.745725) (xy 45.028112 105.823056) (xy 45.029572 105.830123) (xy 45.029526 105.830132) (xy 45.031209 105.837723) (xy 45.031254 105.837713) (xy 45.032919 105.844739) (xy 45.039972 105.864116) (xy 45.059473 105.917694) (xy 45.077073 105.970808) (xy 45.083886 105.991366) (xy 45.08694 105.997915) (xy 45.086896 105.997935) (xy 45.090284 106.004933) (xy 45.090327 106.004912) (xy 45.093568 106.011366) (xy 45.116491 106.046219) (xy 45.136233 106.076234) (xy 45.17697 106.14228) (xy 45.176972 106.142282) (xy 45.181451 106.147947) (xy 45.181413 106.147976) (xy 45.18632 106.154001) (xy 45.186357 106.153971) (xy 45.191002 106.159507) (xy 45.247482 106.212792) (xy 46.842995 107.808305) (xy 46.854776 107.821937) (xy 46.86933 107.841486) (xy 46.909811 107.875453) (xy 46.913785 107.879095) (xy 46.919699 107.885009) (xy 46.945694 107.905563) (xy 47.005159 107.95546) (xy 47.00516 107.95546) (xy 47.005162 107.955462) (xy 47.011195 107.95943) (xy 47.011169 107.959469) (xy 47.017726 107.963646) (xy 47.017752 107.963606) (xy 47.02389 107.967392) (xy 47.023894 107.967395) (xy 47.094251 108.000203) (xy 47.163611 108.035037) (xy 47.163617 108.035038) (xy 47.170405 108.03751) (xy 47.170388 108.037556) (xy 47.177723 108.040105) (xy 47.177739 108.04006) (xy 47.184588 108.04233) (xy 47.184593 108.042331) (xy 47.260649 108.058035) (xy 47.319908 108.07208) (xy 47.336138 108.075927) (xy 47.336139 108.075927) (xy 47.336143 108.075928) (xy 47.336147 108.075928) (xy 47.343316 108.076766) (xy 47.34331 108.076814) (xy 47.351041 108.077605) (xy 47.351046 108.077558) (xy 47.358236 108.078187) (xy 47.35824 108.078186) (xy 47.358241 108.078187) (xy 47.435879 108.075928) (xy 61.893226 108.075928) (xy 61.911196 108.077237) (xy 61.913694 108.077602) (xy 61.935309 108.080769) (xy 61.987946 108.076163) (xy 61.993348 108.075928) (xy 62.001695 108.075928) (xy 62.0017 108.075928) (xy 62.025355 108.073162) (xy 62.034616 108.07208) (xy 62.111939 108.065316) (xy 62.111942 108.065315) (xy 62.111946 108.065315) (xy 62.111949 108.065313) (xy 62.119013 108.063855) (xy 62.119022 108.063902) (xy 62.126617 108.062218) (xy 62.126607 108.062172) (xy 62.133627 108.060507) (xy 62.133633 108.060507) (xy 62.206585 108.033954) (xy 62.280258 108.009542) (xy 62.280266 108.009536) (xy 62.286804 108.006489) (xy 62.286825 108.006534) (xy 62.293822 108.003147) (xy 62.2938 108.003103) (xy 62.300249 107.999864) (xy 62.300248 107.999864) (xy 62.300252 107.999863) (xy 62.365125 107.957194) (xy 62.431171 107.916458) (xy 62.431175 107.916453) (xy 62.436839 107.911976) (xy 62.43687 107.912015) (xy 62.442894 107.907108) (xy 62.442862 107.90707) (xy 62.448384 107.902435) (xy 62.448394 107.902429) (xy 62.47385 107.875447) (xy 62.501683 107.845946) (xy 63.246278 107.10135) (xy 63.99088 106.356747) (xy 64.004506 106.344971) (xy 64.024058 106.330417) (xy 64.058015 106.289948) (xy 64.061675 106.285953) (xy 64.06758 106.280049) (xy 64.088136 106.254051) (xy 64.138032 106.194588) (xy 64.138033 106.194587) (xy 64.142003 106.188551) (xy 64.142043 106.188577) (xy 64.146212 106.182034) (xy 64.146171 106.182009) (xy 64.149964 106.175859) (xy 64.149965 106.175856) (xy 64.149967 106.175854) (xy 64.182773 106.1055) (xy 64.217609 106.036136) (xy 64.21761 106.036128) (xy 64.220079 106.029348) (xy 64.220126 106.029365) (xy 64.222678 106.022023) (xy 64.222631 106.022008) (xy 64.2249 106.015159) (xy 64.2249 106.015157) (xy 64.224902 106.015154) (xy 64.240599 105.939129) (xy 64.2585 105.863604) (xy 64.2585 105.863602) (xy 64.258501 105.863598) (xy 64.259339 105.856431) (xy 64.259386 105.856436) (xy 64.260176 105.848705) (xy 64.260129 105.848701) (xy 64.260758 105.84151) (xy 64.260529 105.833653) (xy 64.2585 105.763902) (xy 64.2585 97.717238) (xy 64.259809 97.699267) (xy 64.263341 97.675156) (xy 64.258735 97.622518) (xy 64.2585 97.617116) (xy 64.2585 97.608769) (xy 64.258499 97.608758) (xy 64.254652 97.575849) (xy 64.247887 97.498521) (xy 64.247887 97.498518) (xy 64.247885 97.498513) (xy 64.246427 97.491449) (xy 64.246475 97.491438) (xy 64.244794 97.483854) (xy 64.244746 97.483866) (xy 64.243079 97.476838) (xy 64.243079 97.476832) (xy 64.21653 97.403889) (xy 64.192114 97.330206) (xy 64.192112 97.330202) (xy 64.18906 97.323657) (xy 64.189104 97.323636) (xy 64.18572 97.316646) (xy 64.185676 97.316669) (xy 64.182438 97.310223) (xy 64.182435 97.310213) (xy 64.139771 97.245345) (xy 64.09903 97.179294) (xy 64.099025 97.179289) (xy 64.094552 97.173631) (xy 64.09459 97.1736) (xy 64.089681 97.167574) (xy 64.089645 97.167605) (xy 64.085005 97.162076) (xy 64.085003 97.162074) (xy 64.085001 97.162071) (xy 64.035831 97.115681) (xy 64.028517 97.10878) (xy 62.948859 96.029123) (xy 62.937077 96.01549) (xy 62.922527 95.995946) (xy 62.922526 95.995945) (xy 62.922524 95.995942) (xy 62.909434 95.984958) (xy 62.882042 95.961972) (xy 62.878053 95.958317) (xy 62.872157 95.952421) (xy 62.872156 95.95242) (xy 62.846158 95.931863) (xy 62.786695 95.881968) (xy 62.78669 95.881965) (xy 62.78066 95.877999) (xy 62.780685 95.877959) (xy 62.774124 95.873779) (xy 62.7741 95.87382) (xy 62.767959 95.870031) (xy 62.697595 95.83722) (xy 62.62824 95.802389) (xy 62.621456 95.79992) (xy 62.621471 95.799876) (xy 62.614126 95.797322) (xy 62.614112 95.797367) (xy 62.60726 95.795096) (xy 62.569232 95.787244) (xy 62.531204 95.779392) (xy 62.455711 95.7615) (xy 62.455709 95.7615) (xy 62.455701 95.761498) (xy 62.448537 95.760661) (xy 62.448542 95.760612) (xy 62.440812 95.759822) (xy 62.440808 95.75987) (xy 62.433617 95.75924) (xy 62.355975 95.7615) (xy 56.245543 95.7615) (xy 56.178504 95.741815) (xy 56.157862 95.725181) (xy 55.404819 94.972138) (xy 55.371334 94.910815) (xy 55.3685 94.884457) (xy 55.3685 75.18) (xy 61.169001 75.18) (xy 61.169001 75.454986) (xy 61.179494 75.557697) (xy 61.234641 75.724119) (xy 61.234643 75.724124) (xy 61.326684 75.873345) (xy 61.450654 75.997315) (xy 61.599875 76.089356) (xy 61.59988 76.089358) (xy 61.766302 76.144505) (xy 61.766309 76.144506) (xy 61.869019 76.154999) (xy 61.918999 76.154998) (xy 61.919 76.154998) (xy 61.919 75.18) (xy 61.169001 75.18) (xy 55.3685 75.18) (xy 55.3685 74.68) (xy 61.169 74.68) (xy 61.919 74.68) (xy 61.919 73.705) (xy 61.918999 73.704999) (xy 61.869029 73.705) (xy 61.869011 73.705001) (xy 61.766302 73.715494) (xy 61.59988 73.770641) (xy 61.599875 73.770643) (xy 61.450654 73.862684) (xy 61.326684 73.986654) (xy 61.234643 74.135875) (xy 61.234641 74.13588) (xy 61.179494 74.302302) (xy 61.179493 74.302309) (xy 61.169 74.405013) (xy 61.169 74.68) (xy 55.3685 74.68) (xy 55.3685 46.593542) (xy 55.388185 46.526503) (xy 55.404814 46.505865) (xy 56.243553 45.667126) (xy 56.304874 45.633643) (xy 56.374565 45.638627) (xy 56.430499 45.680499) (xy 56.447413 45.711474) (xy 56.462593 45.752171) (xy 56.474634 45.784453) (xy 56.54862 45.883287) (xy 56.549108 45.883938) (xy 56.573525 45.949403) (xy 56.558673 46.017676) (xy 56.549108 46.03256) (xy 56.474634 46.132044) (xy 56.423534 46.269044) (xy 56.423534 46.269046) (xy 56.417023 46.329594) (xy 56.417023 47.169499) (xy 56.416811 47.174622) (xy 56.412367 47.228244) (xy 56.412367 47.228252) (xy 56.416811 47.281874) (xy 56.417023 47.286996) (xy 56.417023 48.126903) (xy 56.423534 48.187451) (xy 56.423534 48.187453) (xy 56.46809 48.306908) (xy 56.474634 48.324453) (xy 56.562262 48.44151) (xy 56.679319 48.529138) (xy 56.816322 48.580238) (xy 56.843573 48.583167) (xy 56.876868 48.586748) (xy 56.876885 48.586749) (xy 60.474161 48.586749) (xy 60.474177 48.586748) (xy 60.501215 48.58384) (xy 60.534724 48.580238) (xy 60.671727 48.529138) (xy 60.788784 48.44151) (xy 60.876412 48.324453) (xy 60.927512 48.18745) (xy 60.931406 48.151227) (xy 60.934022 48.126903) (xy 60.934023 48.126886) (xy 60.934023 46.329611) (xy 60.934022 46.329594) (xy 60.93068 46.298519) (xy 60.927512 46.269048) (xy 60.911735 46.226749) (xy 60.876411 46.132042) (xy 60.87641 46.132041) (xy 60.801938 46.03256) (xy 60.77752 45.967096) (xy 60.792371 45.898823) (xy 60.801938 45.883938) (xy 60.802426 45.883287) (xy 60.849107 45.820928) (xy 60.87641 45.784456) (xy 60.876411 45.784455) (xy 60.888452 45.752174) (xy 60.927512 45.64745) (xy 60.932854 45.597762) (xy 60.934022 45.586903) (xy 60.934023 45.586886) (xy 60.934023 43.789611) (xy 60.934022 43.789594) (xy 60.93068 43.758519) (xy 60.927512 43.729048) (xy 60.923549 43.718424) (xy 60.896935 43.647068) (xy 60.876412 43.592045) (xy 60.788784 43.474988) (xy 60.671727 43.38736) (xy 60.534726 43.33626) (xy 60.474177 43.329749) (xy 60.474161 43.329749) (xy 56.876885 43.329749) (xy 56.876868 43.329749) (xy 56.81632 43.33626) (xy 56.816318 43.33626) (xy 56.679318 43.38736) (xy 56.562262 43.474988) (xy 56.474633 43.592045) (xy 56.423362 43.729505) (xy 56.423235 43.729958) (xy 56.396332 43.836191) (xy 56.360792 43.896346) (xy 56.298371 43.927738) (xy 56.276127 43.929749) (xy 56.214045 43.929749) (xy 56.196075 43.92844) (xy 56.171957 43.924907) (xy 56.126402 43.928894) (xy 56.119324 43.929513) (xy 56.113923 43.929749) (xy 56.10557 43.929749) (xy 56.072654 43.933596) (xy 55.995325 43.940361) (xy 55.988257 43.941821) (xy 55.988247 43.941777) (xy 55.980657 43.943459) (xy 55.980668 43.943503) (xy 55.973644 43.945168) (xy 55.973638 43.945169) (xy 55.973638 43.94517) (xy 55.949165 43.954076) (xy 55.900684 43.971722) (xy 55.827008 43.996136) (xy 55.820471 43.999185) (xy 55.820451 43.999143) (xy 55.813447 44.002534) (xy 55.813468 44.002575) (xy 55.80702 44.005813) (xy 55.742145 44.048482) (xy 55.676103 44.089216) (xy 55.670434 44.093699) (xy 55.670404 44.093662) (xy 55.664378 44.098571) (xy 55.664408 44.098606) (xy 55.658883 44.103242) (xy 55.605587 44.159731) (xy 54.119122 45.646195) (xy 54.105495 45.657973) (xy 54.085941 45.672531) (xy 54.051977 45.713006) (xy 54.04833 45.716987) (xy 54.042418 45.7229) (xy 54.021863 45.748896) (xy 53.971967 45.80836) (xy 53.968001 45.814391) (xy 53.967963 45.814366) (xy 53.963782 45.820928) (xy 53.963821 45.820952) (xy 53.960032 45.827094) (xy 53.92722 45.897459) (xy 53.892391 45.96681) (xy 53.889923 45.973593) (xy 53.889878 45.973576) (xy 53.887322 45.980932) (xy 53.887366 45.980947) (xy 53.885096 45.987795) (xy 53.87792 46.022551) (xy 53.869392 46.06385) (xy 53.857853 46.112537) (xy 53.851498 46.139351) (xy 53.850661 46.146519) (xy 53.850613 46.146513) (xy 53.849823 46.154244) (xy 53.84987 46.154249) (xy 53.84924 46.161438) (xy 53.8515 46.239079) (xy 53.8515 95.185706) (xy 53.850191 95.203676) (xy 53.846658 95.227791) (xy 53.851264 95.28042) (xy 53.8515 95.285827) (xy 53.8515 95.294178) (xy 53.855347 95.327096) (xy 53.862112 95.404427) (xy 53.863572 95.411494) (xy 53.863526 95.411503) (xy 53.865209 95.419094) (xy 53.865254 95.419084) (xy 53.866919 95.42611) (xy 53.87032 95.435453) (xy 53.893473 95.499065) (xy 53.917571 95.571788) (xy 53.917886 95.572737) (xy 53.92094 95.579286) (xy 53.920896 95.579306) (xy 53.924284 95.586304) (xy 53.924327 95.586283) (xy 53.927568 95.592737) (xy 53.955591 95.635344) (xy 53.970233 95.657605) (xy 54.01097 95.723651) (xy 54.010972 95.723653) (xy 54.015451 95.729318) (xy 54.015413 95.729347) (xy 54.02032 95.735372) (xy 54.020357 95.735342) (xy 54.025002 95.740878) (xy 54.081482 95.794163) (xy 55.298196 97.010877) (xy 55.309977 97.024509) (xy 55.324531 97.044058) (xy 55.354807 97.069463) (xy 55.365005 97.07802) (xy 55.368995 97.081676) (xy 55.374899 97.08758) (xy 55.395456 97.103834) (xy 55.400897 97.108137) (xy 55.409888 97.115681) (xy 55.46036 97.158032) (xy 55.460362 97.158033) (xy 55.466396 97.162002) (xy 55.466369 97.162042) (xy 55.472921 97.166216) (xy 55.472947 97.166175) (xy 55.479099 97.16997) (xy 55.549447 97.202773) (xy 55.618812 97.237609) (xy 55.618813 97.237609) (xy 55.618815 97.23761) (xy 55.625594 97.240077) (xy 55.625577 97.240122) (xy 55.632925 97.242676) (xy 55.632941 97.242631) (xy 55.63979 97.244901) (xy 55.639793 97.244901) (xy 55.639794 97.244902) (xy 55.715818 97.260599) (xy 55.791344 97.2785) (xy 55.791345 97.2785) (xy 55.791349 97.278501) (xy 55.798517 97.279339) (xy 55.798511 97.279386) (xy 55.806242 97.280176) (xy 55.806247 97.280129) (xy 55.813437 97.280758) (xy 55.813441 97.280757) (xy 55.813442 97.280758) (xy 55.891045 97.2785) (xy 62.001512 97.2785) (xy 62.068551 97.298185) (xy 62.089193 97.314819) (xy 62.705181 97.930807) (xy 62.738666 97.99213) (xy 62.7415 98.018488) (xy 62.7415 105.409405) (xy 62.721815 105.476444) (xy 62.705181 105.497086) (xy 61.679658 106.522609) (xy 61.618335 106.556094) (xy 61.591977 106.558928) (xy 47.790342 106.558928) (xy 47.723303 106.539243) (xy 47.702661 106.522609) (xy 46.570819 105.390767) (xy 46.537334 105.329444) (xy 46.5345 105.303086) (xy 46.5345 104.284001) (xy 53.840891 104.284001) (xy 53.8613 104.569362) (xy 53.922109 104.848895) (xy 54.022091 105.116958) (xy 54.159191 105.368038) (xy 54.159196 105.368046) (xy 54.265882 105.510561) (xy 54.265883 105.510562) (xy 54.875438 104.901006) (xy 54.924348 104.979999) (xy 55.067931 105.137501) (xy 55.226388 105.257163) (xy 54.619436 105.864115) (xy 54.76196 105.970807) (xy 54.761961 105.970808) (xy 55.013042 106.107908) (xy 55.013041 106.107908) (xy 55.281104 106.20789) (xy 55.560637 106.268699) (xy 55.845999 106.289109) (xy 55.846001 106.289109) (xy 56.131362 106.268699) (xy 56.410895 106.20789) (xy 56.678958 106.107908) (xy 56.930047 105.970803) (xy 57.072561 105.864116) (xy 57.072562 105.864115) (xy 56.465611 105.257163) (xy 56.624069 105.137501) (xy 56.767652 104.979999) (xy 56.81656 104.901007) (xy 57.426115 105.510562) (xy 57.426116 105.510561) (xy 57.532803 105.368047) (xy 57.669908 105.116958) (xy 57.76989 104.848895) (xy 57.830699 104.569362) (xy 57.851109 104.284001) (xy 57.851109 104.283998) (xy 57.830699 103.998637) (xy 57.76989 103.719104) (xy 57.669908 103.451041) (xy 57.532808 103.199961) (xy 57.532807 103.19996) (xy 57.426115 103.057436) (xy 56.81656 103.666991) (xy 56.767652 103.588001) (xy 56.624069 103.430499) (xy 56.46561 103.310835) (xy 57.072562 102.703883) (xy 57.072561 102.703882) (xy 56.930046 102.597196) (xy 56.930038 102.597191) (xy 56.678957 102.460091) (xy 56.678958 102.460091) (xy 56.410895 102.360109) (xy 56.131362 102.2993) (xy 55.846001 102.278891) (xy 55.845999 102.278891) (xy 55.560637 102.2993) (xy 55.281104 102.360109) (xy 55.013041 102.460091) (xy 54.761961 102.597191) (xy 54.761953 102.597196) (xy 54.619437 102.703882) (xy 54.619436 102.703883) (xy 55.226389 103.310835) (xy 55.067931 103.430499) (xy 54.924348 103.588001) (xy 54.875439 103.666992) (xy 54.265883 103.057436) (xy 54.265882 103.057437) (xy 54.159196 103.199953) (xy 54.159191 103.199961) (xy 54.022091 103.451041) (xy 53.922109 103.719104) (xy 53.8613 103.998637) (xy 53.840891 104.283998) (xy 53.840891 104.284001) (xy 46.5345 104.284001) (xy 46.5345 102.953574) (xy 46.554185 102.886535) (xy 46.606989 102.84078) (xy 46.645245 102.830285) (xy 46.685201 102.825989) (xy 46.685204 102.825988) (xy 46.701269 102.819996) (xy 46.822204 102.774889) (xy 46.939261 102.687261) (xy 47.026889 102.570204) (xy 47.040586 102.53348) (xy 47.066717 102.463424) (xy 47.108588 102.40749) (xy 47.174053 102.383074) (xy 47.242326 102.397926) (xy 47.270579 102.419077) (xy 47.4317 102.580198) (xy 47.619251 102.711523) (xy 47.719902 102.758457) (xy 47.82675 102.808281) (xy 47.826752 102.808281) (xy 47.826757 102.808284) (xy 48.047913 102.867543) (xy 48.210832 102.881796) (xy 48.275998 102.887498) (xy 48.276 102.887498) (xy 48.276002 102.887498) (xy 48.333021 102.882509) (xy 48.504087 102.867543) (xy 48.725243 102.808284) (xy 48.932749 102.711523) (xy 49.1203 102.580198) (xy 49.188319 102.512179) (xy 49.249642 102.478694) (xy 49.319334 102.483678) (xy 49.363681 102.512179) (xy 49.4317 102.580198) (xy 49.619251 102.711523) (xy 49.719902 102.758457) (xy 49.82675 102.808281) (xy 49.826752 102.808281) (xy 49.826757 102.808284) (xy 50.047913 102.867543) (xy 50.210832 102.881796) (xy 50.275998 102.887498) (xy 50.276 102.887498) (xy 50.276002 102.887498) (xy 50.333021 102.882509) (xy 50.504087 102.867543) (xy 50.725243 102.808284) (xy 50.932749 102.711523) (xy 51.1203 102.580198) (xy 51.282198 102.4183) (xy 51.413523 102.230749) (xy 51.418307 102.220487) (xy 51.464476 102.168051) (xy 51.531669 102.148897) (xy 51.598551 102.169111) (xy 51.643072 102.22049) (xy 51.645866 102.226483) (xy 51.696973 102.299471) (xy 51.696974 102.299472) (xy 52.313064 101.683381) (xy 52.339481 101.773351) (xy 52.413327 101.888258) (xy 52.516555 101.977705) (xy 52.640801 102.034446) (xy 52.665548 102.038004) (xy 52.050526 102.653025) (xy 52.050526 102.653026) (xy 52.123512 102.704131) (xy 52.123516 102.704133) (xy 52.329673 102.800265) (xy 52.329682 102.800269) (xy 52.549389 102.859139) (xy 52.5494 102.859141) (xy 52.775998 102.878966) (xy 52.776002 102.878966) (xy 53.002599 102.859141) (xy 53.00261 102.859139) (xy 53.222317 102.800269) (xy 53.222331 102.800264) (xy 53.428478 102.704136) (xy 53.501472 102.653025) (xy 52.886451 102.038004) (xy 52.911199 102.034446) (xy 53.035445 101.977705) (xy 53.138673 101.888258) (xy 53.212519 101.773351) (xy 53.238935 101.683382) (xy 53.855025 102.299472) (xy 53.906136 102.226478) (xy 54.002264 102.020331) (xy 54.002269 102.020317) (xy 54.061139 101.80061) (xy 54.061141 101.800599) (xy 54.080966 101.574002) (xy 54.080966 101.573997) (xy 54.061141 101.3474) (xy 54.061139 101.347389) (xy 54.031988 101.238593) (xy 54.033651 101.168743) (xy 54.072814 101.110881) (xy 54.137042 101.083377) (xy 54.151763 101.0825) (xy 57.540457 101.0825) (xy 57.607496 101.102185) (xy 57.628138 101.118819) (xy 57.879181 101.369862) (xy 57.912666 101.431185) (xy 57.9155 101.457543) (xy 57.9155 103.059706) (xy 57.914191 103.077676) (xy 57.910658 103.101791) (xy 57.913477 103.134) (xy 57.914879 103.150027) (xy 57.915264 103.15442) (xy 57.9155 103.159827) (xy 57.9155 103.16818) (xy 57.918064 103.190123) (xy 57.919347 103.201096) (xy 57.926112 103.278427) (xy 57.927572 103.285494) (xy 57.927526 103.285503) (xy 57.929209 103.293094) (xy 57.929254 103.293084) (xy 57.930919 103.30011) (xy 57.952238 103.358683) (xy 57.957473 103.373065) (xy 57.979446 103.439376) (xy 57.981886 103.446737) (xy 57.98494 103.453286) (xy 57.984896 103.453306) (xy 57.988284 103.460304) (xy 57.988327 103.460283) (xy 57.991568 103.466737) (xy 58.034232 103.531604) (xy 58.059541 103.572636) (xy 58.07497 103.597651) (xy 58.074972 103.597653) (xy 58.079451 103.603318) (xy 58.079413 103.603347) (xy 58.08432 103.609372) (xy 58.084357 103.609342) (xy 58.089002 103.614878) (xy 58.145482 103.668163) (xy 59.254204 104.776885) (xy 59.271453 104.798493) (xy 59.274137 104.802755) (xy 59.313374 104.848895) (xy 59.326799 104.864682) (xy 59.352444 104.914187) (xy 59.358853 104.939162) (xy 59.387395 105.06833) (xy 59.390814 105.08201) (xy 59.394765 105.096152) (xy 59.3989 105.109537) (xy 59.436346 105.219955) (xy 59.437733 105.224647) (xy 59.441746 105.240493) (xy 59.447567 105.253763) (xy 59.449501 105.258747) (xy 59.458113 105.284139) (xy 59.461308 105.292643) (xy 59.491041 105.35764) (xy 59.491044 105.357645) (xy 59.494402 105.363307) (xy 59.493797 105.363665) (xy 59.501811 105.377429) (xy 59.532182 105.446668) (xy 59.655318 105.635141) (xy 59.655326 105.635152) (xy 59.773851 105.763902) (xy 59.807802 105.800782) (xy 59.985466 105.939065) (xy 59.985467 105.939065) (xy 59.985469 105.939067) (xy 60.099665 106.000866) (xy 60.183468 106.046218) (xy 60.396407 106.11932) (xy 60.618473 106.156376) (xy 60.843611 106.156376) (xy 61.065677 106.11932) (xy 61.278616 106.046218) (xy 61.476618 105.939065) (xy 61.654282 105.800782) (xy 61.796384 105.64642) (xy 61.806757 105.635152) (xy 61.806758 105.63515) (xy 61.806764 105.635144) (xy 61.929902 105.446667) (xy 62.020338 105.240492) (xy 62.075606 105.022244) (xy 62.079107 104.979999) (xy 62.094198 104.797881) (xy 62.094198 104.79787) (xy 62.075607 104.573516) (xy 62.075605 104.573504) (xy 62.020338 104.355261) (xy 61.98908 104.284) (xy 61.929902 104.149085) (xy 61.806764 103.960608) (xy 61.806761 103.960605) (xy 61.806757 103.960599) (xy 61.654285 103.794973) (xy 61.65428 103.794968) (xy 61.476619 103.656688) (xy 61.476614 103.656684) (xy 61.278622 103.549537) (xy 61.278619 103.549535) (xy 61.278616 103.549534) (xy 61.278613 103.549533) (xy 61.278611 103.549532) (xy 61.065679 103.476432) (xy 60.843611 103.439376) (xy 60.618473 103.439376) (xy 60.396404 103.476432) (xy 60.248301 103.527276) (xy 60.178502 103.530426) (xy 60.120357 103.497676) (xy 59.468819 102.846138) (xy 59.435334 102.784815) (xy 59.4325 102.758457) (xy 59.4325 101.156293) (xy 59.433809 101.138323) (xy 59.438387 101.107067) (xy 59.439824 101.107277) (xy 59.458947 101.048536) (xy 59.513062 101.004338) (xy 59.58248 100.996413) (xy 59.626552 101.015424) (xy 59.62705 101.014513) (xy 59.634835 101.018764) (xy 59.752382 101.062607) (xy 59.771841 101.069865) (xy 59.799092 101.072794) (xy 59.832387 101.076375) (xy 59.832404 101.076376) (xy 61.62968 101.076376) (xy 61.629696 101.076375) (xy 61.656734 101.073467) (xy 61.690243 101.069865) (xy 61.827246 101.018765) (xy 61.944303 100.931137) (xy 62.031931 100.81408) (xy 62.083031 100.677077) (xy 62.089345 100.618349) (xy 62.089541 100.61653) (xy 62.089542 100.616513) (xy 62.089542 98.819238) (xy 62.089541 98.819221) (xy 62.086199 98.788146) (xy 62.083031 98.758675) (xy 62.07846 98.746421) (xy 62.052183 98.67597) (xy 62.031931 98.621672) (xy 61.944303 98.504615) (xy 61.827246 98.416987) (xy 61.690245 98.365887) (xy 61.629696 98.359376) (xy 61.62968 98.359376) (xy 59.832404 98.359376) (xy 59.832387 98.359376) (xy 59.771839 98.365887) (xy 59.771837 98.365887) (xy 59.634837 98.416987) (xy 59.517781 98.504615) (xy 59.430153 98.621671) (xy 59.379053 98.758671) (xy 59.379053 98.758673) (xy 59.372542 98.819221) (xy 59.372542 98.850936) (xy 59.369014 98.880303) (xy 59.360476 98.915328) (xy 59.325474 98.975799) (xy 59.263336 99.007746) (xy 59.193791 99.001028) (xy 59.152323 98.973642) (xy 59.001804 98.823123) (xy 58.990022 98.80949) (xy 58.975472 98.789946) (xy 58.975471 98.789945) (xy 58.975469 98.789942) (xy 58.962733 98.779255) (xy 58.934987 98.755972) (xy 58.930998 98.752317) (xy 58.925102 98.746421) (xy 58.925101 98.74642) (xy 58.899103 98.725863) (xy 58.83964 98.675968) (xy 58.839635 98.675965) (xy 58.833605 98.671999) (xy 58.83363 98.671959) (xy 58.827069 98.667779) (xy 58.827045 98.66782) (xy 58.820904 98.664031) (xy 58.75054 98.63122) (xy 58.681185 98.596389) (xy 58.674401 98.59392) (xy 58.674416 98.593876) (xy 58.667071 98.591322) (xy 58.667057 98.591367) (xy 58.660205 98.589096) (xy 58.622177 98.581244) (xy 58.584149 98.573392) (xy 58.508656 98.5555) (xy 58.508654 98.5555) (xy 58.508646 98.555498) (xy 58.501482 98.554661) (xy 58.501487 98.554612) (xy 58.493757 98.553822) (xy 58.493753 98.55387) (xy 58.486562 98.55324) (xy 58.40892 98.5555) (xy 54.975543 98.5555) (xy 54.908504 98.535815) (xy 54.887862 98.519181) (xy 52.414962 96.046281) (xy 52.381477 95.984958) (xy 52.386461 95.915266) (xy 52.428333 95.859333) (xy 52.459303 95.84242) (xy 52.521727 95.819138) (xy 52.638784 95.73151) (xy 52.726412 95.614453) (xy 52.777512 95.47745) (xy 52.782027 95.435453) (xy 52.784022 95.416903) (xy 52.784023 95.416886) (xy 52.784023 95.341749) (xy 52.784057 95.340577) (xy 52.784056 95.340574) (xy 52.784082 95.339682) (xy 52.784023 95.337942) (xy 52.784023 92.776996) (xy 52.784235 92.771874) (xy 52.788679 92.718252) (xy 52.788679 92.718244) (xy 52.784235 92.664622) (xy 52.784023 92.659499) (xy 52.784023 91.819611) (xy 52.784022 91.819594) (xy 52.779959 91.781811) (xy 52.777512 91.759048) (xy 52.775092 91.75256) (xy 52.744076 91.669403) (xy 52.726412 91.622045) (xy 52.638784 91.504988) (xy 52.521727 91.41736) (xy 52.384726 91.36626) (xy 52.324177 91.359749) (xy 52.324161 91.359749) (xy 50.526885 91.359749) (xy 50.526868 91.359749) (xy 50.46632 91.36626) (xy 50.466318 91.36626) (xy 50.329318 91.41736) (xy 50.212262 91.504988) (xy 50.124634 91.622044) (xy 50.073534 91.759044) (xy 50.073534 91.759046) (xy 50.067023 91.819594) (xy 50.067023 92.659499) (xy 50.066811 92.664622) (xy 50.062367 92.718244) (xy 50.062367 92.718252) (xy 50.066811 92.771874) (xy 50.067023 92.776996) (xy 50.067023 95.416903) (xy 50.073534 95.477451) (xy 50.073534 95.477453) (xy 50.111733 95.579864) (xy 50.124634 95.614453) (xy 50.212262 95.73151) (xy 50.293379 95.792234) (xy 50.33525 95.848167) (xy 50.340234 95.917858) (xy 50.306749 95.979181) (xy 50.245426 96.012666) (xy 50.219068 96.0155) (xy 48.759362 96.0155) (xy 48.692323 95.995815) (xy 48.671681 95.979181) (xy 47.844216 95.151716) (xy 47.810731 95.090393) (xy 47.808032 95.069829) (xy 47.797097 94.835768) (xy 47.775016 94.327345) (xy 47.752924 93.782721) (xy 47.730821 93.20193) (xy 47.708931 92.591141) (xy 47.708178 92.578643) (xy 47.707553 92.571267) (xy 47.705663 92.559761) (xy 47.704023 92.539661) (xy 47.704023 91.819611) (xy 47.704022 91.819594) (xy 47.699959 91.781811) (xy 47.697512 91.759048) (xy 47.695092 91.75256) (xy 47.664076 91.669403) (xy 47.646412 91.622045) (xy 47.558784 91.504988) (xy 47.441727 91.41736) (xy 47.304726 91.36626) (xy 47.244177 91.359749) (xy 47.244161 91.359749) (xy 45.446885 91.359749) (xy 45.446868 91.359749) (xy 45.38632 91.36626) (xy 45.386318 91.36626) (xy 45.249318 91.41736) (xy 45.132262 91.504988) (xy 45.044634 91.622044) (xy 44.993534 91.759044) (xy 44.993534 91.759046) (xy 44.987023 91.819594) (xy 44.987023 92.659499) (xy 44.986811 92.664622) (xy 44.982367 92.718244) (xy 44.982367 92.718252) (xy 44.986811 92.771874) (xy 44.987023 92.776996) (xy 44.987023 94.257604) (xy 44.967338 94.324643) (xy 44.914534 94.370398) (xy 44.845376 94.380342) (xy 44.81969 94.373786) (xy 44.804069 94.36796) (xy 44.743521 94.361449) (xy 44.743505 94.361449) (xy 44.096215 94.361449) (xy 44.096198 94.361449) (xy 44.03565 94.36796) (xy 44.035648 94.36796) (xy 43.898648 94.41906) (xy 43.781592 94.506688) (xy 43.693964 94.623744) (xy 43.642864 94.760744) (xy 43.642864 94.760746) (xy 43.636353 94.821294) (xy 43.636353 95.7375) (xy 43.616668 95.804539) (xy 43.563864 95.850294) (xy 43.512353 95.8615) (xy 43.427443 95.8615) (xy 43.360404 95.841815) (xy 43.314649 95.789011) (xy 43.303443 95.7375) (xy 43.303443 94.821311) (xy 43.303442 94.821294) (xy 43.3001 94.790219) (xy 43.296932 94.760748) (xy 43.287447 94.735319) (xy 43.268241 94.683825) (xy 43.245832 94.623745) (xy 43.158204 94.506688) (xy 43.041147 94.41906) (xy 43.018693 94.410685) (xy 42.941361 94.381841) (xy 42.885428 94.33997) (xy 42.861012 94.274505) (xy 42.875863 94.206234) (xy 42.880384 94.198009) (xy 42.891059 94.18176) (xy 42.904304 94.164686) (xy 42.923852 94.119509) (xy 42.926409 94.11429) (xy 42.950124 94.071155) (xy 42.955495 94.050231) (xy 42.961796 94.031827) (xy 42.97038 94.011994) (xy 42.975733 93.97819) (xy 42.978078 93.963387) (xy 42.979263 93.957662) (xy 42.9915 93.910006) (xy 42.9915 93.888398) (xy 42.993027 93.868998) (xy 42.996406 93.847666) (xy 42.991775 93.798672) (xy 42.9915 93.792835) (xy 42.9915 92.187577) (xy 42.993282 92.171434) (xy 42.993055 92.171413) (xy 42.993789 92.16365) (xy 42.992323 92.117014) (xy 42.9915 92.090809) (xy 42.9915 92.059751) (xy 42.990565 92.052353) (xy 42.990108 92.046544) (xy 42.988563 91.997353) (xy 42.988562 91.997351) (xy 42.986149 91.989046) (xy 42.982534 91.976605) (xy 42.978589 91.957555) (xy 42.975882 91.936119) (xy 42.957765 91.890362) (xy 42.955872 91.884832) (xy 42.942144 91.837581) (xy 42.931151 91.818994) (xy 42.922589 91.801518) (xy 42.920411 91.796017) (xy 42.914635 91.781427) (xy 42.885699 91.741602) (xy 42.882504 91.736736) (xy 42.857453 91.694377) (xy 42.85745 91.694374) (xy 42.857448 91.694371) (xy 42.842178 91.679101) (xy 42.829541 91.664305) (xy 42.816843 91.646827) (xy 42.81684 91.646824) (xy 42.778914 91.61545) (xy 42.774592 91.611516) (xy 41.944537 90.78146) (xy 41.934382 90.768784) (xy 41.934206 90.76893) (xy 41.929233 90.762919) (xy 41.876115 90.713038) (xy 41.854154 90.691076) (xy 41.848266 90.686509) (xy 41.843824 90.682715) (xy 41.807954 90.649031) (xy 41.807951 90.649028) (xy 41.80286 90.646229) (xy 41.789017 90.638618) (xy 41.772761 90.62794) (xy 41.755684 90.614694) (xy 41.710515 90.595148) (xy 41.705268 90.592577) (xy 41.686171 90.582079) (xy 41.662155 90.568876) (xy 41.662152 90.568875) (xy 41.641227 90.563501) (xy 41.622833 90.557204) (xy 41.61856 90.555355) (xy 41.602995 90.54862) (xy 41.602992 90.548619) (xy 41.602991 90.548619) (xy 41.554388 90.540921) (xy 41.548666 90.539736) (xy 41.527374 90.534269) (xy 41.467336 90.498531) (xy 41.43638 90.437249) (xy 41.431208 90.409954) (xy 41.393003 90.177565) (xy 41.356027 89.922857) (xy 41.356025 89.922852) (xy 41.356025 89.922846) (xy 41.35612 89.923358) (xy 41.354023 89.900648) (xy 41.354023 89.509611) (xy 41.354022 89.509594) (xy 41.35068 89.478519) (xy 41.347512 89.449048) (xy 41.296412 89.312045) (xy 41.208784 89.194988) (xy 41.091727 89.10736) (xy 40.954726 89.05626) (xy 40.894177 89.049749) (xy 40.894161 89.049749) (xy 37.296885 89.049749) (xy 37.296868 89.049749) (xy 37.23632 89.05626) (xy 37.236318 89.05626) (xy 37.099318 89.10736) (xy 36.982262 89.194988) (xy 36.894634 89.312044) (xy 36.843534 89.449044) (xy 36.843534 89.449046) (xy 36.837023 89.509594) (xy 36.837023 91.306903) (xy 36.843534 91.367451) (xy 36.843534 91.367453) (xy 36.894634 91.504453) (xy 36.969108 91.603938) (xy 36.993525 91.669403) (xy 36.978673 91.737676) (xy 36.969109 91.752557) (xy 36.964251 91.759048) (xy 36.894634 91.852044) (xy 36.843534 91.989044) (xy 36.843534 91.989046) (xy 36.837023 92.049594) (xy 36.837023 93.846903) (xy 36.843534 93.907451) (xy 36.843534 93.907453) (xy 36.882527 94.011993) (xy 36.894634 94.044453) (xy 36.982262 94.16151) (xy 37.099319 94.249138) (xy 37.236322 94.300238) (xy 37.263573 94.303167) (xy 37.296868 94.306748) (xy 37.296885 94.306749) (xy 37.955978 94.306749) (xy 38.023017 94.326434) (xy 38.068772 94.379238) (xy 38.078716 94.448396) (xy 38.064635 94.490493) (xy 38.060616 94.497805) (xy 38.049942 94.514054) (xy 38.036695 94.531133) (xy 38.01715 94.576297) (xy 38.01458 94.581543) (xy 37.990876 94.624661) (xy 37.985502 94.645589) (xy 37.979203 94.663987) (xy 37.970619 94.683825) (xy 37.962923 94.73242) (xy 37.961738 94.738143) (xy 37.9495 94.785809) (xy 37.9495 94.807413) (xy 37.947974 94.826808) (xy 37.944594 94.848151) (xy 37.949225 94.897143) (xy 37.9495 94.902981) (xy 37.9495 94.94481) (xy 37.929815 95.011849) (xy 37.877011 95.057604) (xy 37.861704 95.063407) (xy 37.831936 95.072494) (xy 37.823795 95.074391) (xy 37.749447 95.086505) (xy 37.740741 95.0873) (xy 37.645488 95.08926) (xy 37.618359 95.092285) (xy 37.60192 95.094118) (xy 37.595052 95.0945) (xy 37.345461 95.0945) (xy 37.345446 95.094501) (xy 37.241572 95.105113) (xy 37.073264 95.160884) (xy 37.073259 95.160886) (xy 36.922346 95.253971) (xy 36.796971 95.379346) (xy 36.703886 95.530259) (xy 36.703884 95.530264) (xy 36.648113 95.698572) (xy 36.6375 95.802447) (xy 36.6375 96.428537) (xy 36.637501 96.428553) (xy 36.648113 96.532427) (xy 36.703884 96.700735) (xy 36.703886 96.70074) (xy 36.796971 96.851653) (xy 36.885637 96.940319) (xy 36.919122 97.001642) (xy 36.914138 97.071334) (xy 36.885637 97.115681) (xy 36.796971 97.204346) (xy 36.703886 97.355259) (xy 36.703884 97.355264) (xy 36.648113 97.523572) (xy 36.6375 97.627447) (xy 36.6375 98.253537) (xy 33.798903 98.253537) (xy 33.798903 86.226903) (xy 36.837023 86.226903) (xy 36.843534 86.287451) (xy 36.843534 86.287453) (xy 36.894634 86.424453) (xy 36.982262 86.54151) (xy 37.099319 86.629138) (xy 37.236322 86.680238) (xy 37.263573 86.683167) (xy 37.296868 86.686748) (xy 37.296885 86.686749) (xy 40.894161 86.686749) (xy 40.894177 86.686748) (xy 40.921215 86.68384) (xy 40.954724 86.680238) (xy 41.091727 86.629138) (xy 41.208784 86.54151) (xy 41.296412 86.424453) (xy 41.347512 86.28745) (xy 41.351114 86.253941) (xy 41.354022 86.226903) (xy 41.354023 86.226886) (xy 41.354023 85.386996) (xy 41.354235 85.381874) (xy 41.355639 85.364941) (xy 41.358679 85.328249) (xy 41.358626 85.327612) (xy 41.354235 85.274622) (xy 41.354023 85.269499) (xy 41.354023 84.429611) (xy 41.354022 84.429594) (xy 41.350616 84.397917) (xy 41.347512 84.369048) (xy 41.296412 84.232045) (xy 41.296411 84.232042) (xy 41.29641 84.232041) (xy 41.221938 84.13256) (xy 41.19752 84.067096) (xy 41.212371 83.998823) (xy 41.221938 83.983938) (xy 41.29641 83.884456) (xy 41.296411 83.884455) (xy 41.347511 83.747453) (xy 41.347511 83.747452) (xy 41.347512 83.74745) (xy 41.351114 83.713941) (xy 41.354022 83.686903) (xy 41.354023 83.686886) (xy 41.354023 82.846996) (xy 41.354235 82.841874) (xy 41.355639 82.824941) (xy 41.358679 82.788249) (xy 41.358626 82.787615) (xy 41.354235 82.734622) (xy 41.354023 82.729499) (xy 41.354023 81.889611) (xy 41.354022 81.889594) (xy 41.35068 81.858519) (xy 41.347512 81.829048) (xy 41.34114 81.811965) (xy 41.296411 81.692042) (xy 41.29641 81.692041) (xy 41.221938 81.59256) (xy 41.19752 81.527096) (xy 41.212371 81.458823) (xy 41.221938 81.443938) (xy 41.29641 81.344456) (xy 41.296411 81.344455) (xy 41.347511 81.207453) (xy 41.347511 81.207452) (xy 41.347512 81.20745) (xy 41.351114 81.173941) (xy 41.354022 81.146903) (xy 41.354023 81.146886) (xy 41.354023 80.306996) (xy 41.354235 80.301874) (xy 41.358679 80.248252) (xy 41.358679 80.248244) (xy 41.354235 80.194622) (xy 41.354023 80.189499) (xy 41.354023 79.349611) (xy 41.354022 79.349594) (xy 41.35068 79.318519) (xy 41.347512 79.289048) (xy 41.296412 79.152045) (xy 41.296411 79.152042) (xy 41.29641 79.152041) (xy 41.221938 79.05256) (xy 41.19752 78.987096) (xy 41.212371 78.918823) (xy 41.221938 78.903938) (xy 41.29641 78.804456) (xy 41.296411 78.804455) (xy 41.347511 78.667453) (xy 41.347511 78.667452) (xy 41.347512 78.66745) (xy 41.351114 78.633941) (xy 41.354022 78.606903) (xy 41.354023 78.606886) (xy 41.354023 77.766996) (xy 41.354235 77.761874) (xy 41.358679 77.708252) (xy 41.358679 77.708244) (xy 41.354235 77.654622) (xy 41.354023 77.649499) (xy 41.354023 76.809611) (xy 41.354022 76.809594) (xy 41.35068 76.778519) (xy 41.347512 76.749048) (xy 41.296412 76.612045) (xy 41.208784 76.494988) (xy 41.091727 76.40736) (xy 40.954726 76.35626) (xy 40.894177 76.349749) (xy 40.894161 76.349749) (xy 37.296885 76.349749) (xy 37.296868 76.349749) (xy 37.23632 76.35626) (xy 37.236318 76.35626) (xy 37.099318 76.40736) (xy 36.982262 76.494988) (xy 36.894634 76.612044) (xy 36.843534 76.749044) (xy 36.843534 76.749046) (xy 36.837023 76.809594) (xy 36.837023 78.606903) (xy 36.843534 78.667451) (xy 36.843534 78.667453) (xy 36.894634 78.804453) (xy 36.969108 78.903938) (xy 36.993525 78.969403) (xy 36.978673 79.037676) (xy 36.969108 79.05256) (xy 36.894634 79.152044) (xy 36.843534 79.289044) (xy 36.843534 79.289046) (xy 36.837023 79.349594) (xy 36.837023 81.146903) (xy 36.843534 81.207451) (xy 36.843534 81.207453) (xy 36.894634 81.344453) (xy 36.969108 81.443938) (xy 36.993525 81.509403) (xy 36.978673 81.577676) (xy 36.969108 81.59256) (xy 36.894634 81.692044) (xy 36.843534 81.829044) (xy 36.843534 81.829046) (xy 36.837023 81.889594) (xy 36.837023 83.686903) (xy 36.843534 83.747451) (xy 36.843534 83.747453) (xy 36.894634 83.884453) (xy 36.969108 83.983938) (xy 36.993525 84.049403) (xy 36.978673 84.117676) (xy 36.969108 84.13256) (xy 36.894634 84.232044) (xy 36.843534 84.369044) (xy 36.843534 84.369046) (xy 36.837023 84.429594) (xy 36.837023 86.226903) (xy 33.798903 86.226903) (xy 33.798903 73.526903) (xy 36.837023 73.526903) (xy 36.843534 73.587451) (xy 36.843534 73.587453) (xy 36.884208 73.6965) (xy 36.894634 73.724453) (xy 36.982262 73.84151) (xy 37.099319 73.929138) (xy 37.236322 73.980238) (xy 37.263573 73.983167) (xy 37.296868 73.986748) (xy 37.296885 73.986749) (xy 40.894161 73.986749) (xy 40.894177 73.986748) (xy 40.921215 73.98384) (xy 40.954724 73.980238) (xy 41.091727 73.929138) (xy 41.208784 73.84151) (xy 41.296412 73.724453) (xy 41.347512 73.58745) (xy 41.351114 73.553941) (xy 41.354022 73.526903) (xy 41.354023 73.526886) (xy 41.354023 72.686996) (xy 41.354235 72.681874) (xy 41.358679 72.628252) (xy 41.358679 72.628244) (xy 41.354235 72.574622) (xy 41.354023 72.569499) (xy 41.354023 71.729611) (xy 41.354022 71.729594) (xy 41.348626 71.679411) (xy 41.347512 71.669048) (xy 41.33074 71.624082) (xy 41.296411 71.532042) (xy 41.29641 71.532041) (xy 41.221938 71.43256) (xy 41.19752 71.367096) (xy 41.212371 71.298823) (xy 41.221938 71.283938) (xy 41.29641 71.184456) (xy 41.296411 71.184455) (xy 41.347511 71.047453) (xy 41.347511 71.047452) (xy 41.347512 71.04745) (xy 41.351114 71.013941) (xy 41.354022 70.986903) (xy 41.354023 70.986886) (xy 41.354023 70.146996) (xy 41.354235 70.141874) (xy 41.358679 70.088252) (xy 41.358679 70.088244) (xy 41.354235 70.034622) (xy 41.354023 70.029499) (xy 41.354023 69.189611) (xy 41.354022 69.189594) (xy 41.35068 69.158519) (xy 41.347512 69.129048) (xy 41.296412 68.992045) (xy 41.296411 68.992042) (xy 41.29641 68.992041) (xy 41.221938 68.89256) (xy 41.19752 68.827096) (xy 41.212371 68.758823) (xy 41.221938 68.743938) (xy 41.29641 68.644456) (xy 41.296411 68.644455) (xy 41.347511 68.507453) (xy 41.347511 68.507452) (xy 41.347512 68.50745) (xy 41.351114 68.473941) (xy 41.354022 68.446903) (xy 41.354023 68.446886) (xy 41.354023 67.606996) (xy 41.354235 67.601874) (xy 41.358679 67.548252) (xy 41.358679 67.548244) (xy 41.354235 67.494622) (xy 41.354023 67.489499) (xy 41.354023 66.649611) (xy 41.354022 66.649594) (xy 41.35068 66.618519) (xy 41.347512 66.589048) (xy 41.296412 66.452045) (xy 41.296411 66.452042) (xy 41.29641 66.452041) (xy 41.221938 66.35256) (xy 41.19752 66.287096) (xy 41.212371 66.218823) (xy 41.221938 66.203938) (xy 41.29641 66.104456) (xy 41.296411 66.104455) (xy 41.347511 65.967453) (xy 41.347511 65.967452) (xy 41.347512 65.96745) (xy 41.351114 65.933941) (xy 41.354022 65.906903) (xy 41.354023 65.906886) (xy 41.354023 65.066996) (xy 41.354235 65.061874) (xy 41.358679 65.008252) (xy 41.358679 65.008244) (xy 41.354235 64.954622) (xy 41.354023 64.949499) (xy 41.354023 64.109611) (xy 41.354022 64.109594) (xy 41.35068 64.078519) (xy 41.347512 64.049048) (xy 41.296412 63.912045) (xy 41.208784 63.794988) (xy 41.091727 63.70736) (xy 40.954726 63.65626) (xy 40.894177 63.649749) (xy 40.894161 63.649749) (xy 37.296885 63.649749) (xy 37.296868 63.649749) (xy 37.23632 63.65626) (xy 37.236318 63.65626) (xy 37.099318 63.70736) (xy 36.982262 63.794988) (xy 36.894634 63.912044) (xy 36.843534 64.049044) (xy 36.843534 64.049046) (xy 36.837023 64.109594) (xy 36.837023 65.906903) (xy 36.843534 65.967451) (xy 36.843534 65.967453) (xy 36.894634 66.104453) (xy 36.969108 66.203938) (xy 36.993525 66.269403) (xy 36.978673 66.337676) (xy 36.969108 66.35256) (xy 36.894634 66.452044) (xy 36.843534 66.589044) (xy 36.843534 66.589046) (xy 36.837023 66.649594) (xy 36.837023 68.446903) (xy 36.843534 68.507451) (xy 36.843534 68.507453) (xy 36.894634 68.644453) (xy 36.969108 68.743938) (xy 36.993525 68.809403) (xy 36.978673 68.877676) (xy 36.969108 68.89256) (xy 36.894634 68.992044) (xy 36.843534 69.129044) (xy 36.843534 69.129046) (xy 36.837023 69.189594) (xy 36.837023 70.986903) (xy 36.843534 71.047451) (xy 36.843534 71.047453) (xy 36.894634 71.184453) (xy 36.969108 71.283938) (xy 36.993525 71.349403) (xy 36.978673 71.417676) (xy 36.969108 71.43256) (xy 36.894634 71.532044) (xy 36.843534 71.669044) (xy 36.843534 71.669046) (xy 36.837023 71.729594) (xy 36.837023 73.526903) (xy 33.798903 73.526903) (xy 33.798903 60.826903) (xy 36.837023 60.826903) (xy 36.843534 60.887451) (xy 36.843534 60.887453) (xy 36.894634 61.024453) (xy 36.982262 61.14151) (xy 37.099319 61.229138) (xy 37.236322 61.280238) (xy 37.263573 61.283167) (xy 37.296868 61.286748) (xy 37.296885 61.286749) (xy 40.894161 61.286749) (xy 40.894177 61.286748) (xy 40.921215 61.28384) (xy 40.954724 61.280238) (xy 41.091727 61.229138) (xy 41.208784 61.14151) (xy 41.296412 61.024453) (xy 41.347512 60.88745) (xy 41.351114 60.853941) (xy 41.354022 60.826903) (xy 41.354023 60.826886) (xy 41.354023 59.986996) (xy 41.354235 59.981874) (xy 41.358679 59.928252) (xy 41.358679 59.928244) (xy 41.354235 59.874622) (xy 41.354023 59.869499) (xy 41.354023 59.029611) (xy 41.354022 59.029594) (xy 41.35068 58.998519) (xy 41.347512 58.969048) (xy 41.296412 58.832045) (xy 41.296411 58.832042) (xy 41.29641 58.832041) (xy 41.221938 58.73256) (xy 41.19752 58.667096) (xy 41.212371 58.598823) (xy 41.221938 58.583938) (xy 41.29641 58.484456) (xy 41.296411 58.484455) (xy 41.347511 58.347453) (xy 41.347511 58.347452) (xy 41.347512 58.34745) (xy 41.351114 58.313941) (xy 41.354022 58.286903) (xy 41.354023 58.286886) (xy 41.354023 57.446996) (xy 41.354235 57.441874) (xy 41.358679 57.388252) (xy 41.358679 57.388244) (xy 41.354235 57.334622) (xy 41.354023 57.329499) (xy 41.354023 56.489611) (xy 41.354022 56.489594) (xy 41.35068 56.458519) (xy 41.347512 56.429048) (xy 41.296412 56.292045) (xy 41.296411 56.292042) (xy 41.29641 56.292041) (xy 41.221938 56.19256) (xy 41.19752 56.127096) (xy 41.212371 56.058823) (xy 41.221936 56.04394) (xy 41.296412 55.944453) (xy 41.347512 55.80745) (xy 41.351114 55.773941) (xy 41.354022 55.746903) (xy 41.354023 55.746886) (xy 41.354023 54.906996) (xy 41.354235 54.901874) (xy 41.358679 54.848252) (xy 41.358679 54.848244) (xy 41.354235 54.794622) (xy 41.354023 54.789499) (xy 41.354023 53.949611) (xy 41.354022 53.949594) (xy 41.35068 53.918519) (xy 41.347512 53.889048) (xy 41.34279 53.876389) (xy 41.296411 53.752042) (xy 41.29641 53.752041) (xy 41.221938 53.65256) (xy 41.19752 53.587096) (xy 41.212371 53.518823) (xy 41.221938 53.503938) (xy 41.29641 53.404456) (xy 41.296411 53.404455) (xy 41.347511 53.267453) (xy 41.347511 53.267452) (xy 41.347512 53.26745) (xy 41.351114 53.233941) (xy 41.354022 53.206903) (xy 41.354023 53.206886) (xy 41.354023 52.366996) (xy 41.354235 52.361874) (xy 41.358679 52.308252) (xy 41.358679 52.308244) (xy 41.354235 52.254622) (xy 41.354023 52.249499) (xy 41.354023 51.409611) (xy 41.354022 51.409594) (xy 41.35068 51.378519) (xy 41.347512 51.349048) (xy 41.296412 51.212045) (xy 41.208784 51.094988) (xy 41.091727 51.00736) (xy 40.954726 50.95626) (xy 40.894177 50.949749) (xy 40.894161 50.949749) (xy 37.296885 50.949749) (xy 37.296868 50.949749) (xy 37.23632 50.95626) (xy 37.236318 50.95626) (xy 37.099318 51.00736) (xy 36.982262 51.094988) (xy 36.894634 51.212044) (xy 36.843534 51.349044) (xy 36.843534 51.349046) (xy 36.837023 51.409594) (xy 36.837023 53.206903) (xy 36.843534 53.267451) (xy 36.843534 53.267453) (xy 36.894634 53.404453) (xy 36.969108 53.503938) (xy 36.993525 53.569403) (xy 36.978673 53.637676) (xy 36.969108 53.65256) (xy 36.894634 53.752044) (xy 36.843534 53.889044) (xy 36.843534 53.889046) (xy 36.837023 53.949594) (xy 36.837023 55.746903) (xy 36.843534 55.807451) (xy 36.843534 55.807453) (xy 36.893139 55.940444) (xy 36.894634 55.944453) (xy 36.937072 56.001144) (xy 36.969108 56.043938) (xy 36.993525 56.109403) (xy 36.978673 56.177676) (xy 36.969109 56.192557) (xy 36.969109 56.192559) (xy 36.969108 56.19256) (xy 36.894634 56.292044) (xy 36.843534 56.429044) (xy 36.843534 56.429046) (xy 36.837023 56.489594) (xy 36.837023 58.286903) (xy 36.843534 58.347451) (xy 36.843534 58.347453) (xy 36.894634 58.484453) (xy 36.969108 58.583938) (xy 36.993525 58.649403) (xy 36.978673 58.717676) (xy 36.969108 58.73256) (xy 36.894634 58.832044) (xy 36.843534 58.969044) (xy 36.843534 58.969046) (xy 36.837023 59.029594) (xy 36.837023 60.826903) (xy 33.798903 60.826903) (xy 33.798903 48.126903) (xy 36.837023 48.126903) (xy 36.843534 48.187451) (xy 36.843534 48.187453) (xy 36.88809 48.306908) (xy 36.894634 48.324453) (xy 36.982262 48.44151) (xy 37.099319 48.529138) (xy 37.236322 48.580238) (xy 37.263573 48.583167) (xy 37.296868 48.586748) (xy 37.296885 48.586749) (xy 40.894161 48.586749) (xy 40.894177 48.586748) (xy 40.921215 48.58384) (xy 40.954724 48.580238) (xy 41.091727 48.529138) (xy 41.208784 48.44151) (xy 41.296412 48.324453) (xy 41.347512 48.18745) (xy 41.351406 48.151227) (xy 41.354022 48.126903) (xy 41.354023 48.126886) (xy 41.354023 47.848247) (xy 45.197216 47.848247) (xy 45.199195 47.870888) (xy 45.199369 47.879078) (xy 45.198207 47.904937) (xy 45.198208 47.904939) (xy 45.209214 47.986195) (xy 45.209539 47.989113) (xy 45.212055 48.017864) (xy 45.216408 48.06762) (xy 45.223147 48.092772) (xy 45.224697 48.100492) (xy 45.228616 48.129422) (xy 45.228619 48.129432) (xy 45.252936 48.204272) (xy 45.253857 48.207383) (xy 45.2734 48.280315) (xy 45.273404 48.280327) (xy 45.285798 48.306908) (xy 45.288574 48.313954) (xy 45.298618 48.344865) (xy 45.29862 48.34487) (xy 45.307628 48.361609) (xy 45.334345 48.411259) (xy 45.335939 48.414436) (xy 45.366465 48.4799) (xy 45.366466 48.479902) (xy 45.366467 48.479903) (xy 45.385191 48.506645) (xy 45.388998 48.512823) (xy 45.405966 48.544354) (xy 45.405968 48.544357) (xy 45.45092 48.600724) (xy 45.453232 48.603816) (xy 45.492774 48.660287) (xy 45.492777 48.66029) (xy 45.518182 48.685695) (xy 45.522818 48.690882) (xy 45.547209 48.721467) (xy 45.599037 48.766748) (xy 45.60208 48.769593) (xy 45.648478 48.815992) (xy 45.648479 48.815993) (xy 45.648482 48.815995) (xy 45.648485 48.815998) (xy 45.68001 48.838071) (xy 45.680632 48.838507) (xy 45.685864 48.842606) (xy 45.717805 48.870512) (xy 45.774058 48.904121) (xy 45.777781 48.906532) (xy 45.814273 48.932084) (xy 45.828861 48.9423) (xy 45.828864 48.942301) (xy 45.828869 48.942305) (xy 45.867433 48.960287) (xy 45.873016 48.963246) (xy 45.912273 48.986702) (xy 45.970533 49.008566) (xy 45.974945 49.01042) (xy 46.028447 49.035369) (xy 46.072727 49.047233) (xy 46.078462 49.049073) (xy 46.107879 49.060113) (xy 46.124362 49.0663) (xy 46.182336 49.07682) (xy 46.187301 49.077934) (xy 46.241152 49.092364) (xy 46.290125 49.096648) (xy 46.295773 49.097406) (xy 46.334875 49.104502) (xy 46.347255 49.106749) (xy 46.347256 49.106749) (xy 46.402871 49.106749) (xy 46.408272 49.106984) (xy 46.436893 49.109488) (xy 46.460521 49.111556) (xy 46.460522 49.111556) (xy 46.460522 49.111555) (xy 46.460523 49.111556) (xy 46.513833 49.106892) (xy 46.517027 49.106749) (xy 46.517045 49.106749) (xy 46.565148 49.102418) (xy 46.571914 49.10181) (xy 46.679876 49.092366) (xy 46.67988 49.092365) (xy 46.679894 49.092364) (xy 46.679906 49.09236) (xy 46.680425 49.092269) (xy 46.685659 49.091573) (xy 46.686145 49.09153) (xy 46.790858 49.06263) (xy 46.892599 49.035369) (xy 46.892612 49.035362) (xy 46.899552 49.032837) (xy 46.904243 49.031338) (xy 46.904516 49.031263) (xy 46.999542 48.9855) (xy 47.092177 48.942305) (xy 47.092186 48.942298) (xy 47.096873 48.939594) (xy 47.096944 48.939717) (xy 47.107729 48.933401) (xy 47.108616 48.932974) (xy 47.191391 48.872834) (xy 47.272561 48.815998) (xy 47.273474 48.815084) (xy 47.288275 48.802442) (xy 47.291886 48.79982) (xy 47.323513 48.766741) (xy 47.360425 48.728133) (xy 47.428269 48.66029) (xy 47.428269 48.660289) (xy 47.428272 48.660287) (xy 47.430999 48.656391) (xy 47.442951 48.641817) (xy 47.448435 48.636083) (xy 47.501332 48.555946) (xy 47.554579 48.479903) (xy 47.558061 48.472434) (xy 47.566959 48.456525) (xy 47.573232 48.447023) (xy 47.609739 48.361609) (xy 47.647643 48.280325) (xy 47.650668 48.269031) (xy 47.656419 48.252396) (xy 47.662266 48.238719) (xy 47.682234 48.151227) (xy 47.704638 48.06762) (xy 47.70633 48.048273) (xy 47.707649 48.039875) (xy 47.712674 48.017864) (xy 47.716559 47.931354) (xy 47.72383 47.848249) (xy 47.72383 47.848247) (xy 50.047216 47.848247) (xy 50.049195 47.870888) (xy 50.049369 47.879078) (xy 50.048207 47.904937) (xy 50.048208 47.904939) (xy 50.059214 47.986195) (xy 50.059539 47.989113) (xy 50.062055 48.017864) (xy 50.066408 48.06762) (xy 50.073147 48.092772) (xy 50.074697 48.100492) (xy 50.078616 48.129422) (xy 50.078619 48.129432) (xy 50.102936 48.204272) (xy 50.103857 48.207383) (xy 50.1234 48.280315) (xy 50.123404 48.280327) (xy 50.135798 48.306908) (xy 50.138574 48.313954) (xy 50.148618 48.344865) (xy 50.14862 48.34487) (xy 50.157628 48.361609) (xy 50.184345 48.411259) (xy 50.185939 48.414436) (xy 50.216465 48.4799) (xy 50.216466 48.479902) (xy 50.216467 48.479903) (xy 50.235191 48.506645) (xy 50.238998 48.512823) (xy 50.255966 48.544354) (xy 50.255968 48.544357) (xy 50.30092 48.600724) (xy 50.303232 48.603816) (xy 50.342774 48.660287) (xy 50.342777 48.66029) (xy 50.368182 48.685695) (xy 50.372818 48.690882) (xy 50.397209 48.721467) (xy 50.449037 48.766748) (xy 50.45208 48.769593) (xy 50.498478 48.815992) (xy 50.498479 48.815993) (xy 50.498482 48.815995) (xy 50.498485 48.815998) (xy 50.53001 48.838071) (xy 50.530632 48.838507) (xy 50.535864 48.842606) (xy 50.567805 48.870512) (xy 50.624058 48.904121) (xy 50.627781 48.906532) (xy 50.664273 48.932084) (xy 50.678861 48.9423) (xy 50.678864 48.942301) (xy 50.678869 48.942305) (xy 50.717433 48.960287) (xy 50.723016 48.963246) (xy 50.762273 48.986702) (xy 50.820533 49.008566) (xy 50.824945 49.01042) (xy 50.878447 49.035369) (xy 50.922727 49.047233) (xy 50.928462 49.049073) (xy 50.957879 49.060113) (xy 50.974362 49.0663) (xy 51.032336 49.07682) (xy 51.037301 49.077934) (xy 51.091152 49.092364) (xy 51.140125 49.096648) (xy 51.145773 49.097406) (xy 51.184875 49.104502) (xy 51.197255 49.106749) (xy 51.197256 49.106749) (xy 51.252871 49.106749) (xy 51.258272 49.106984) (xy 51.286893 49.109488) (xy 51.310521 49.111556) (xy 51.310522 49.111556) (xy 51.310522 49.111555) (xy 51.310523 49.111556) (xy 51.363833 49.106892) (xy 51.367027 49.106749) (xy 51.367045 49.106749) (xy 51.415148 49.102418) (xy 51.421914 49.10181) (xy 51.529876 49.092366) (xy 51.52988 49.092365) (xy 51.529894 49.092364) (xy 51.529906 49.09236) (xy 51.530425 49.092269) (xy 51.535659 49.091573) (xy 51.536145 49.09153) (xy 51.640858 49.06263) (xy 51.742599 49.035369) (xy 51.742612 49.035362) (xy 51.749552 49.032837) (xy 51.754243 49.031338) (xy 51.754516 49.031263) (xy 51.849542 48.9855) (xy 51.942177 48.942305) (xy 51.942186 48.942298) (xy 51.946873 48.939594) (xy 51.946944 48.939717) (xy 51.957729 48.933401) (xy 51.958616 48.932974) (xy 52.041391 48.872834) (xy 52.122561 48.815998) (xy 52.123474 48.815084) (xy 52.138275 48.802442) (xy 52.141886 48.79982) (xy 52.173513 48.766741) (xy 52.210425 48.728133) (xy 52.278269 48.66029) (xy 52.278269 48.660289) (xy 52.278272 48.660287) (xy 52.280999 48.656391) (xy 52.292951 48.641817) (xy 52.298435 48.636083) (xy 52.351332 48.555946) (xy 52.404579 48.479903) (xy 52.408061 48.472434) (xy 52.416959 48.456525) (xy 52.423232 48.447023) (xy 52.459739 48.361609) (xy 52.497643 48.280325) (xy 52.500668 48.269031) (xy 52.506419 48.252396) (xy 52.512266 48.238719) (xy 52.532234 48.151227) (xy 52.554638 48.06762) (xy 52.55633 48.048273) (xy 52.557649 48.039875) (xy 52.562674 48.017864) (xy 52.566559 47.931354) (xy 52.57383 47.848249) (xy 52.57185 47.825617) (xy 52.571676 47.817422) (xy 52.572838 47.791558) (xy 52.561828 47.710291) (xy 52.561504 47.707374) (xy 52.554638 47.62888) (xy 52.554638 47.628878) (xy 52.5479 47.603732) (xy 52.546348 47.596002) (xy 52.544645 47.583439) (xy 52.542429 47.567074) (xy 52.51811 47.492231) (xy 52.517194 47.489138) (xy 52.502953 47.43599) (xy 52.497646 47.416182) (xy 52.497642 47.416172) (xy 52.485245 47.389585) (xy 52.482471 47.382545) (xy 52.472426 47.351628) (xy 52.472425 47.351626) (xy 52.472422 47.351619) (xy 52.43669 47.285219) (xy 52.435105 47.28206) (xy 52.404579 47.216596) (xy 52.391352 47.197706) (xy 52.38586 47.189862) (xy 52.382046 47.183673) (xy 52.365078 47.152141) (xy 52.320117 47.095762) (xy 52.317802 47.092666) (xy 52.278273 47.036212) (xy 52.252863 47.010802) (xy 52.248225 47.005613) (xy 52.223835 46.975029) (xy 52.172014 46.929754) (xy 52.168965 46.926904) (xy 52.122562 46.8805) (xy 52.090414 46.85799) (xy 52.085179 46.85389) (xy 52.053241 46.825986) (xy 51.997009 46.792388) (xy 51.993248 46.789953) (xy 51.955503 46.763524) (xy 51.942177 46.754193) (xy 51.928463 46.747798) (xy 51.903623 46.736214) (xy 51.898024 46.733246) (xy 51.867224 46.714845) (xy 51.858773 46.709796) (xy 51.800511 46.68793) (xy 51.796111 46.686082) (xy 51.764416 46.671302) (xy 51.7426 46.661129) (xy 51.742588 46.661125) (xy 51.698316 46.649262) (xy 51.692576 46.647421) (xy 51.646683 46.630197) (xy 51.595638 46.620933) (xy 51.588714 46.619677) (xy 51.58374 46.618561) (xy 51.529895 46.604134) (xy 51.517893 46.603083) (xy 51.480926 46.599849) (xy 51.475264 46.599089) (xy 51.440521 46.592785) (xy 51.42379 46.589749) (xy 51.423789 46.589749) (xy 51.368175 46.589749) (xy 51.362773 46.589513) (xy 51.334152 46.587009) (xy 51.310525 46.584942) (xy 51.31052 46.584942) (xy 51.257251 46.589602) (xy 51.254012 46.589748) (xy 51.199131 46.594687) (xy 51.091141 46.604134) (xy 51.090564 46.604236) (xy 51.085412 46.604921) (xy 51.084909 46.604966) (xy 51.084892 46.604969) (xy 50.980187 46.633867) (xy 50.878441 46.66113) (xy 50.871467 46.663667) (xy 50.866791 46.665161) (xy 50.866545 46.665228) (xy 50.866534 46.665233) (xy 50.771487 46.711004) (xy 50.678875 46.75419) (xy 50.674181 46.7569) (xy 50.67411 46.756778) (xy 50.663347 46.763082) (xy 50.662431 46.763523) (xy 50.662425 46.763526) (xy 50.579642 46.823672) (xy 50.498481 46.880503) (xy 50.49755 46.881434) (xy 50.482787 46.894042) (xy 50.479164 46.896674) (xy 50.479154 46.896683) (xy 50.41062 46.968364) (xy 50.34277 47.036215) (xy 50.342769 47.036216) (xy 50.340029 47.040129) (xy 50.328104 47.054668) (xy 50.322612 47.060412) (xy 50.322608 47.060418) (xy 50.269706 47.140562) (xy 50.216466 47.216596) (xy 50.216464 47.216601) (xy 50.212985 47.224061) (xy 50.204099 47.239951) (xy 50.197815 47.249471) (xy 50.197814 47.249473) (xy 50.161303 47.334893) (xy 50.123405 47.416166) (xy 50.123403 47.416172) (xy 50.120375 47.427471) (xy 50.114625 47.444103) (xy 50.108782 47.457774) (xy 50.108779 47.457782) (xy 50.088811 47.54527) (xy 50.066408 47.628875) (xy 50.066407 47.628881) (xy 50.064715 47.648219) (xy 50.063396 47.656615) (xy 50.058372 47.678634) (xy 50.054486 47.765143) (xy 50.047216 47.848245) (xy 50.047216 47.848247) (xy 47.72383 47.848247) (xy 47.72185 47.825617) (xy 47.721676 47.817422) (xy 47.722838 47.791558) (xy 47.711828 47.710291) (xy 47.711504 47.707374) (xy 47.704638 47.62888) (xy 47.704638 47.628878) (xy 47.6979 47.603732) (xy 47.696348 47.596002) (xy 47.694645 47.583439) (xy 47.692429 47.567074) (xy 47.66811 47.492231) (xy 47.667194 47.489138) (xy 47.652953 47.43599) (xy 47.647646 47.416182) (xy 47.647642 47.416172) (xy 47.635245 47.389585) (xy 47.632471 47.382545) (xy 47.622426 47.351628) (xy 47.622425 47.351626) (xy 47.622422 47.351619) (xy 47.58669 47.285219) (xy 47.585105 47.28206) (xy 47.554579 47.216596) (xy 47.541352 47.197706) (xy 47.53586 47.189862) (xy 47.532046 47.183673) (xy 47.515078 47.152141) (xy 47.470117 47.095762) (xy 47.467802 47.092666) (xy 47.428273 47.036212) (xy 47.402863 47.010802) (xy 47.398225 47.005613) (xy 47.373835 46.975029) (xy 47.322014 46.929754) (xy 47.318965 46.926904) (xy 47.272562 46.8805) (xy 47.240414 46.85799) (xy 47.235179 46.85389) (xy 47.203241 46.825986) (xy 47.147009 46.792388) (xy 47.143248 46.789953) (xy 47.105503 46.763524) (xy 47.092177 46.754193) (xy 47.078463 46.747798) (xy 47.053623 46.736214) (xy 47.048024 46.733246) (xy 47.017224 46.714845) (xy 47.008773 46.709796) (xy 46.950511 46.68793) (xy 46.946111 46.686082) (xy 46.914416 46.671302) (xy 46.8926 46.661129) (xy 46.892588 46.661125) (xy 46.848316 46.649262) (xy 46.842576 46.647421) (xy 46.796683 46.630197) (xy 46.745638 46.620933) (xy 46.738714 46.619677) (xy 46.73374 46.618561) (xy 46.679895 46.604134) (xy 46.667893 46.603083) (xy 46.630926 46.599849) (xy 46.625264 46.599089) (xy 46.590521 46.592785) (xy 46.57379 46.589749) (xy 46.573789 46.589749) (xy 46.518175 46.589749) (xy 46.512773 46.589513) (xy 46.484152 46.587009) (xy 46.460525 46.584942) (xy 46.46052 46.584942) (xy 46.407251 46.589602) (xy 46.404012 46.589748) (xy 46.349131 46.594687) (xy 46.241141 46.604134) (xy 46.240564 46.604236) (xy 46.235412 46.604921) (xy 46.234909 46.604966) (xy 46.234892 46.604969) (xy 46.130187 46.633867) (xy 46.028441 46.66113) (xy 46.021467 46.663667) (xy 46.016791 46.665161) (xy 46.016545 46.665228) (xy 46.016534 46.665233) (xy 45.921487 46.711004) (xy 45.828875 46.75419) (xy 45.824181 46.7569) (xy 45.82411 46.756778) (xy 45.813347 46.763082) (xy 45.812431 46.763523) (xy 45.812425 46.763526) (xy 45.729642 46.823672) (xy 45.648481 46.880503) (xy 45.64755 46.881434) (xy 45.632787 46.894042) (xy 45.629164 46.896674) (xy 45.629154 46.896683) (xy 45.56062 46.968364) (xy 45.49277 47.036215) (xy 45.492769 47.036216) (xy 45.490029 47.040129) (xy 45.478104 47.054668) (xy 45.472612 47.060412) (xy 45.472608 47.060418) (xy 45.419706 47.140562) (xy 45.366466 47.216596) (xy 45.366464 47.216601) (xy 45.362985 47.224061) (xy 45.354099 47.239951) (xy 45.347815 47.249471) (xy 45.347814 47.249473) (xy 45.311303 47.334893) (xy 45.273405 47.416166) (xy 45.273403 47.416172) (xy 45.270375 47.427471) (xy 45.264625 47.444103) (xy 45.258782 47.457774) (xy 45.258779 47.457782) (xy 45.238811 47.54527) (xy 45.216408 47.628875) (xy 45.216407 47.628881) (xy 45.214715 47.648219) (xy 45.213396 47.656615) (xy 45.208372 47.678634) (xy 45.204486 47.765143) (xy 45.197216 47.848245) (xy 45.197216 47.848247) (xy 41.354023 47.848247) (xy 41.354023 47.286996) (xy 41.354235 47.281874) (xy 41.358679 47.228252) (xy 41.358679 47.228244) (xy 41.354235 47.174622) (xy 41.354023 47.169499) (xy 41.354023 46.329611) (xy 41.354022 46.329594) (xy 41.35068 46.298519) (xy 41.347512 46.269048) (xy 41.331735 46.226749) (xy 41.296411 46.132042) (xy 41.29641 46.132041) (xy 41.221938 46.03256) (xy 41.19752 45.967096) (xy 41.212371 45.898823) (xy 41.221938 45.883938) (xy 41.222426 45.883287) (xy 41.269107 45.820928) (xy 41.29641 45.784456) (xy 41.296411 45.784455) (xy 41.308452 45.752174) (xy 41.347512 45.64745) (xy 41.352854 45.597762) (xy 41.354022 45.586903) (xy 41.354023 45.586886) (xy 41.354023 44.818249) (xy 44.747196 44.818249) (xy 44.752167 44.878243) (xy 44.754494 44.906332) (xy 44.758379 44.997792) (xy 44.75838 44.997801) (xy 44.763533 45.02171) (xy 44.764713 45.029659) (xy 44.76647 45.050866) (xy 44.766472 45.050878) (xy 44.78894 45.139602) (xy 44.808893 45.232184) (xy 44.81678 45.25181) (xy 44.819357 45.259715) (xy 44.823774 45.277156) (xy 44.861808 45.363865) (xy 44.89829 45.454653) (xy 44.907652 45.469857) (xy 44.91164 45.477469) (xy 44.917538 45.490917) (xy 44.971047 45.572819) (xy 45.023996 45.658814) (xy 45.024003 45.658823) (xy 45.030681 45.66641) (xy 45.041409 45.680516) (xy 45.045209 45.686332) (xy 45.113602 45.760626) (xy 45.134572 45.784453) (xy 45.182405 45.838801) (xy 45.182406 45.838802) (xy 45.187593 45.84299) (xy 45.20093 45.855489) (xy 45.203306 45.858071) (xy 45.253914 45.897459) (xy 45.285471 45.922021) (xy 45.340943 45.966812) (xy 45.368944 45.989422) (xy 45.368945 45.989422) (xy 45.368947 45.989424) (xy 45.371688 45.990955) (xy 45.371763 45.990997) (xy 45.387457 46.001401) (xy 45.387502 46.001436) (xy 45.387514 46.001444) (xy 45.445013 46.03256) (xy 45.481869 46.052505) (xy 45.578263 46.106354) (xy 45.578268 46.106355) (xy 45.578272 46.106358) (xy 45.580663 46.107439) (xy 45.588 46.110697) (xy 45.588098 46.110475) (xy 45.592785 46.11253) (xy 45.592796 46.112536) (xy 45.697263 46.1484) (xy 45.804329 46.186229) (xy 45.80489 46.186325) (xy 45.809632 46.18733) (xy 45.813566 46.188327) (xy 45.813572 46.188329) (xy 45.925618 46.207026) (xy 46.040633 46.226748) (xy 46.040642 46.226749) (xy 46.27723 46.226749) (xy 46.277235 46.226749) (xy 46.310171 46.221252) (xy 46.333998 46.217277) (xy 46.338936 46.216655) (xy 46.392464 46.2121) (xy 46.39941 46.211509) (xy 46.399411 46.211508) (xy 46.399421 46.211508) (xy 46.45182 46.197863) (xy 46.457191 46.196718) (xy 46.507474 46.188329) (xy 46.565025 46.168571) (xy 46.569498 46.167222) (xy 46.631447 46.151093) (xy 46.677782 46.130147) (xy 46.683156 46.128016) (xy 46.72825 46.112536) (xy 46.784655 46.08201) (xy 46.788577 46.080065) (xy 46.849925 46.052335) (xy 46.889318 46.025708) (xy 46.894502 46.022563) (xy 46.933531 46.001444) (xy 46.933535 46.001442) (xy 46.933536 46.001441) (xy 46.93354 46.001439) (xy 46.986751 45.960021) (xy 46.990084 45.957602) (xy 47.04857 45.918074) (xy 47.080524 45.887447) (xy 47.085312 45.883307) (xy 47.117743 45.858067) (xy 47.165642 45.806033) (xy 47.168317 45.803305) (xy 47.221667 45.752174) (xy 47.24602 45.719245) (xy 47.25025 45.714126) (xy 47.252692 45.711474) (xy 47.275837 45.686332) (xy 47.316308 45.624384) (xy 47.318358 45.621438) (xy 47.335872 45.597758) (xy 47.364238 45.559406) (xy 47.381199 45.525763) (xy 47.384637 45.519798) (xy 47.403507 45.490918) (xy 47.434565 45.42011) (xy 47.435936 45.417199) (xy 47.47218 45.345316) (xy 47.482244 45.312449) (xy 47.484744 45.305715) (xy 47.497272 45.277156) (xy 47.517058 45.199019) (xy 47.517857 45.196158) (xy 47.542387 45.116064) (xy 47.546333 45.085243) (xy 47.547721 45.077933) (xy 47.554574 45.050875) (xy 47.561613 44.965921) (xy 47.572841 44.878244) (xy 47.571662 44.850498) (xy 47.571817 44.842774) (xy 47.57385 44.818249) (xy 50.197196 44.818249) (xy 50.202167 44.878243) (xy 50.204494 44.906332) (xy 50.208379 44.997792) (xy 50.20838 44.997801) (xy 50.213533 45.02171) (xy 50.214713 45.029659) (xy 50.21647 45.050866) (xy 50.216472 45.050878) (xy 50.23894 45.139602) (xy 50.258893 45.232184) (xy 50.26678 45.25181) (xy 50.269357 45.259715) (xy 50.273774 45.277156) (xy 50.311808 45.363865) (xy 50.34829 45.454653) (xy 50.357652 45.469857) (xy 50.36164 45.477469) (xy 50.367538 45.490917) (xy 50.421047 45.572819) (xy 50.473996 45.658814) (xy 50.474003 45.658823) (xy 50.480681 45.66641) (xy 50.491409 45.680516) (xy 50.495209 45.686332) (xy 50.563602 45.760626) (xy 50.584572 45.784453) (xy 50.632405 45.838801) (xy 50.632406 45.838802) (xy 50.637593 45.84299) (xy 50.65093 45.855489) (xy 50.653306 45.858071) (xy 50.703914 45.897459) (xy 50.735471 45.922021) (xy 50.790943 45.966812) (xy 50.818944 45.989422) (xy 50.818945 45.989422) (xy 50.818947 45.989424) (xy 50.821688 45.990955) (xy 50.821763 45.990997) (xy 50.837457 46.001401) (xy 50.837502 46.001436) (xy 50.837514 46.001444) (xy 50.895013 46.03256) (xy 50.931869 46.052505) (xy 51.028263 46.106354) (xy 51.028268 46.106355) (xy 51.028272 46.106358) (xy 51.030663 46.107439) (xy 51.038 46.110697) (xy 51.038098 46.110475) (xy 51.042785 46.11253) (xy 51.042796 46.112536) (xy 51.147263 46.1484) (xy 51.254329 46.186229) (xy 51.25489 46.186325) (xy 51.259632 46.18733) (xy 51.263566 46.188327) (xy 51.263572 46.188329) (xy 51.375618 46.207026) (xy 51.490633 46.226748) (xy 51.490642 46.226749) (xy 51.72723 46.226749) (xy 51.727235 46.226749) (xy 51.760171 46.221252) (xy 51.783998 46.217277) (xy 51.788936 46.216655) (xy 51.842464 46.2121) (xy 51.84941 46.211509) (xy 51.849411 46.211508) (xy 51.849421 46.211508) (xy 51.90182 46.197863) (xy 51.907191 46.196718) (xy 51.957474 46.188329) (xy 52.015025 46.168571) (xy 52.019498 46.167222) (xy 52.081447 46.151093) (xy 52.127782 46.130147) (xy 52.133156 46.128016) (xy 52.17825 46.112536) (xy 52.234655 46.08201) (xy 52.238577 46.080065) (xy 52.299925 46.052335) (xy 52.339318 46.025708) (xy 52.344502 46.022563) (xy 52.383531 46.001444) (xy 52.383535 46.001442) (xy 52.383536 46.001441) (xy 52.38354 46.001439) (xy 52.436751 45.960021) (xy 52.440084 45.957602) (xy 52.49857 45.918074) (xy 52.530524 45.887447) (xy 52.535312 45.883307) (xy 52.567743 45.858067) (xy 52.615642 45.806033) (xy 52.618317 45.803305) (xy 52.671667 45.752174) (xy 52.69602 45.719245) (xy 52.70025 45.714126) (xy 52.702692 45.711474) (xy 52.725837 45.686332) (xy 52.766308 45.624384) (xy 52.768358 45.621438) (xy 52.785872 45.597758) (xy 52.814238 45.559406) (xy 52.831199 45.525763) (xy 52.834637 45.519798) (xy 52.853507 45.490918) (xy 52.884565 45.42011) (xy 52.885936 45.417199) (xy 52.92218 45.345316) (xy 52.932244 45.312449) (xy 52.934744 45.305715) (xy 52.947272 45.277156) (xy 52.967058 45.199019) (xy 52.967857 45.196158) (xy 52.992387 45.116064) (xy 52.996333 45.085243) (xy 52.997721 45.077933) (xy 53.004574 45.050875) (xy 53.011613 44.965921) (xy 53.022841 44.878244) (xy 53.021662 44.850498) (xy 53.021817 44.842774) (xy 53.02385 44.818249) (xy 53.018878 44.758253) (xy 53.016551 44.730165) (xy 53.012667 44.638709) (xy 53.012666 44.638706) (xy 53.012666 44.638698) (xy 53.00751 44.614779) (xy 53.006331 44.606835) (xy 53.004574 44.585628) (xy 53.004574 44.585623) (xy 52.982105 44.496895) (xy 52.962153 44.404317) (xy 52.954258 44.384673) (xy 52.95169 44.376793) (xy 52.947272 44.359342) (xy 52.909237 44.272632) (xy 52.872756 44.181845) (xy 52.86339 44.166635) (xy 52.859405 44.159027) (xy 52.858625 44.157249) (xy 52.853507 44.14558) (xy 52.799998 44.063678) (xy 52.747047 43.97768) (xy 52.747041 43.977673) (xy 52.747038 43.977669) (xy 52.740362 43.970083) (xy 52.729641 43.955988) (xy 52.725838 43.950168) (xy 52.725837 43.950166) (xy 52.657443 43.875871) (xy 52.588642 43.797698) (xy 52.588641 43.797697) (xy 52.588637 43.797693) (xy 52.583452 43.793507) (xy 52.57012 43.781014) (xy 52.567743 43.778431) (xy 52.485574 43.714476) (xy 52.402099 43.647074) (xy 52.402097 43.647072) (xy 52.402091 43.647068) (xy 52.399273 43.645494) (xy 52.383593 43.6351) (xy 52.383543 43.635061) (xy 52.383541 43.63506) (xy 52.38354 43.635059) (xy 52.289176 43.583992) (xy 52.21338 43.54165) (xy 52.192782 43.530143) (xy 52.190522 43.529122) (xy 52.183042 43.5258) (xy 52.182945 43.526022) (xy 52.178248 43.523961) (xy 52.073782 43.488097) (xy 51.96672 43.45027) (xy 51.966719 43.450269) (xy 51.966717 43.450269) (xy 51.966715 43.450268) (xy 51.966706 43.450266) (xy 51.966156 43.450172) (xy 51.961436 43.449171) (xy 51.957489 43.448172) (xy 51.957476 43.448169) (xy 51.957474 43.448169) (xy 51.845427 43.429471) (xy 51.730413 43.409749) (xy 51.730404 43.409749) (xy 51.727235 43.409749) (xy 51.493811 43.409749) (xy 51.49381 43.409749) (xy 51.437052 43.419219) (xy 51.43211 43.419841) (xy 51.398353 43.422714) (xy 51.371623 43.42499) (xy 51.37162 43.42499) (xy 51.319256 43.438625) (xy 51.313836 43.439781) (xy 51.263572 43.448168) (xy 51.206035 43.46792) (xy 51.201528 43.469278) (xy 51.156418 43.481025) (xy 51.139599 43.485405) (xy 51.139596 43.485406) (xy 51.139593 43.485407) (xy 51.093281 43.506341) (xy 51.087882 43.508482) (xy 51.073286 43.513493) (xy 51.042796 43.523961) (xy 50.986402 43.554479) (xy 50.982433 43.556447) (xy 50.92112 43.584163) (xy 50.921118 43.584164) (xy 50.881732 43.610784) (xy 50.876525 43.613942) (xy 50.864961 43.6202) (xy 50.837501 43.635061) (xy 50.784303 43.676467) (xy 50.780948 43.678902) (xy 50.750872 43.69923) (xy 50.722474 43.718425) (xy 50.722471 43.718428) (xy 50.690535 43.749035) (xy 50.685716 43.753201) (xy 50.653304 43.77843) (xy 50.653303 43.778431) (xy 50.605421 43.830442) (xy 50.602707 43.833211) (xy 50.54938 43.884322) (xy 50.525026 43.917248) (xy 50.520793 43.922372) (xy 50.495207 43.950167) (xy 50.495204 43.950171) (xy 50.454745 44.012099) (xy 50.452689 44.015055) (xy 50.40681 44.077088) (xy 50.406809 44.077089) (xy 50.389856 44.110712) (xy 50.386398 44.116712) (xy 50.367538 44.145581) (xy 50.336501 44.216338) (xy 50.335085 44.219345) (xy 50.298865 44.291182) (xy 50.298864 44.291183) (xy 50.288803 44.324035) (xy 50.286298 44.330786) (xy 50.273772 44.359343) (xy 50.273772 44.359344) (xy 50.253992 44.437452) (xy 50.253172 44.440386) (xy 50.22866 44.520427) (xy 50.228658 44.520439) (xy 50.224714 44.551235) (xy 50.223318 44.558584) (xy 50.216473 44.585616) (xy 50.216471 44.585628) (xy 50.209432 44.670576) (xy 50.198205 44.758252) (xy 50.198204 44.758253) (xy 50.199382 44.78598) (xy 50.199226 44.793734) (xy 50.197196 44.818244) (xy 50.197196 44.818249) (xy 47.57385 44.818249) (xy 47.568878 44.758253) (xy 47.566551 44.730165) (xy 47.562667 44.638709) (xy 47.562666 44.638706) (xy 47.562666 44.638698) (xy 47.55751 44.614779) (xy 47.556331 44.606835) (xy 47.554574 44.585628) (xy 47.554574 44.585623) (xy 47.532105 44.496895) (xy 47.512153 44.404317) (xy 47.504258 44.384673) (xy 47.50169 44.376793) (xy 47.497272 44.359342) (xy 47.459237 44.272632) (xy 47.422756 44.181845) (xy 47.41339 44.166635) (xy 47.409405 44.159027) (xy 47.408625 44.157249) (xy 47.403507 44.14558) (xy 47.349998 44.063678) (xy 47.297047 43.97768) (xy 47.297041 43.977673) (xy 47.297038 43.977669) (xy 47.290362 43.970083) (xy 47.279641 43.955988) (xy 47.275838 43.950168) (xy 47.275837 43.950166) (xy 47.207443 43.875871) (xy 47.138642 43.797698) (xy 47.138641 43.797697) (xy 47.138637 43.797693) (xy 47.133452 43.793507) (xy 47.12012 43.781014) (xy 47.117743 43.778431) (xy 47.035574 43.714476) (xy 46.952099 43.647074) (xy 46.952097 43.647072) (xy 46.952091 43.647068) (xy 46.949273 43.645494) (xy 46.933593 43.6351) (xy 46.933543 43.635061) (xy 46.933541 43.63506) (xy 46.93354 43.635059) (xy 46.839176 43.583992) (xy 46.76338 43.54165) (xy 46.742782 43.530143) (xy 46.740522 43.529122) (xy 46.733042 43.5258) (xy 46.732945 43.526022) (xy 46.728248 43.523961) (xy 46.623782 43.488097) (xy 46.51672 43.45027) (xy 46.516719 43.450269) (xy 46.516717 43.450269) (xy 46.516715 43.450268) (xy 46.516706 43.450266) (xy 46.516156 43.450172) (xy 46.511436 43.449171) (xy 46.507489 43.448172) (xy 46.507476 43.448169) (xy 46.507474 43.448169) (xy 46.395427 43.429471) (xy 46.280413 43.409749) (xy 46.280404 43.409749) (xy 46.277235 43.409749) (xy 46.043811 43.409749) (xy 46.04381 43.409749) (xy 45.987052 43.419219) (xy 45.98211 43.419841) (xy 45.948353 43.422714) (xy 45.921623 43.42499) (xy 45.92162 43.42499) (xy 45.869256 43.438625) (xy 45.863836 43.439781) (xy 45.813572 43.448168) (xy 45.756035 43.46792) (xy 45.751528 43.469278) (xy 45.706418 43.481025) (xy 45.689599 43.485405) (xy 45.689596 43.485406) (xy 45.689593 43.485407) (xy 45.643281 43.506341) (xy 45.637882 43.508482) (xy 45.623286 43.513493) (xy 45.592796 43.523961) (xy 45.536402 43.554479) (xy 45.532433 43.556447) (xy 45.47112 43.584163) (xy 45.471118 43.584164) (xy 45.431732 43.610784) (xy 45.426525 43.613942) (xy 45.414961 43.6202) (xy 45.387501 43.635061) (xy 45.334303 43.676467) (xy 45.330948 43.678902) (xy 45.300872 43.69923) (xy 45.272474 43.718425) (xy 45.272471 43.718428) (xy 45.240535 43.749035) (xy 45.235716 43.753201) (xy 45.203304 43.77843) (xy 45.203303 43.778431) (xy 45.155421 43.830442) (xy 45.152707 43.833211) (xy 45.09938 43.884322) (xy 45.075026 43.917248) (xy 45.070793 43.922372) (xy 45.045207 43.950167) (xy 45.045204 43.950171) (xy 45.004745 44.012099) (xy 45.002689 44.015055) (xy 44.95681 44.077088) (xy 44.956809 44.077089) (xy 44.939856 44.110712) (xy 44.936398 44.116712) (xy 44.917538 44.145581) (xy 44.886501 44.216338) (xy 44.885085 44.219345) (xy 44.848865 44.291182) (xy 44.848864 44.291183) (xy 44.838803 44.324035) (xy 44.836298 44.330786) (xy 44.823772 44.359343) (xy 44.823772 44.359344) (xy 44.803992 44.437452) (xy 44.803172 44.440386) (xy 44.77866 44.520427) (xy 44.778658 44.520439) (xy 44.774714 44.551235) (xy 44.773318 44.558584) (xy 44.766473 44.585616) (xy 44.766471 44.585628) (xy 44.759432 44.670576) (xy 44.748205 44.758252) (xy 44.748204 44.758253) (xy 44.749382 44.78598) (xy 44.749226 44.793734) (xy 44.747196 44.818244) (xy 44.747196 44.818249) (xy 41.354023 44.818249) (xy 41.354023 44.746996) (xy 41.354235 44.741874) (xy 41.355206 44.730165) (xy 41.358679 44.688249) (xy 41.354234 44.634614) (xy 41.354023 44.629499) (xy 41.354023 43.789611) (xy 41.354022 43.789594) (xy 41.35068 43.758519) (xy 41.347512 43.729048) (xy 41.343549 43.718424) (xy 41.316935 43.647068) (xy 41.296412 43.592045) (xy 41.208784 43.474988) (xy 41.091727 43.38736) (xy 40.954726 43.33626) (xy 40.894177 43.329749) (xy 40.894161 43.329749) (xy 37.296885 43.329749) (xy 37.296868 43.329749) (xy 37.23632 43.33626) (xy 37.236318 43.33626) (xy 37.099318 43.38736) (xy 36.982262 43.474988) (xy 36.894634 43.592044) (xy 36.843534 43.729044) (xy 36.843534 43.729046) (xy 36.837023 43.789594) (xy 36.837023 45.586903) (xy 36.843534 45.647451) (xy 36.843534 45.647453) (xy 36.882593 45.752171) (xy 36.894634 45.784453) (xy 36.96862 45.883287) (xy 36.969108 45.883938) (xy 36.993525 45.949403) (xy 36.978673 46.017676) (xy 36.969108 46.03256) (xy 36.894634 46.132044) (xy 36.843534 46.269044) (xy 36.843534 46.269046) (xy 36.837023 46.329594) (xy 36.837023 48.126903) (xy 33.798903 48.126903) (xy 33.798903 43.087159) (xy 33.799036 43.083104) (xy 33.815526 42.831457) (xy 33.816583 42.823417) (xy 33.865386 42.578057) (xy 33.867479 42.570244) (xy 33.947891 42.333351) (xy 33.950994 42.325861) (xy 34.043214 42.138854) (xy 34.061632 42.101504) (xy 34.065681 42.094491) (xy 34.20466 41.886493) (xy 34.209598 41.880056) (xy 34.374532 41.691982) (xy 34.380271 41.686244) (xy 34.568343 41.521308) (xy 34.574765 41.516379) (xy 34.782768 41.377394) (xy 34.789782 41.373344) (xy 35.014155 41.262695) (xy 35.021633 41.259599) (xy 35.258524 41.179185) (xy 35.266338 41.177091) (xy 35.511695 41.128286) (xy 35.519724 41.127229) (xy 35.601823 41.121848) (xy 35.771065 41.110757) (xy 35.775121 41.110624) (xy 35.781688 41.110624) (xy 65.092585 41.110624) ) ) ) (zone (net 18) (net_name "3V3_BUS2") (layer "F.Cu") (tstamp c7662f2f-310e-4bdd-a44e-2b57c2ceb810) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30024) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 58.825523 54.598249) (xy 58.688752 54.581083) (xy 58.602419 54.532712) (xy 58.539575 54.457818) (xy 58.473273 54.361089) (xy 58.376564 54.247208) (xy 57.774523 54.848249) (xy 58.376564 55.44929) (xy 58.473273 55.335408) (xy 58.539575 55.238678) (xy 58.602419 55.163785) (xy 58.688752 55.115413) (xy 58.825523 55.098249) ) ) (filled_polygon (layer "F.Cu") (pts (xy 58.384135 54.256181) (xy 58.384766 54.256866) (xy 58.473084 54.360866) (xy 58.473437 54.361329) (xy 58.539575 54.457818) (xy 58.602419 54.532712) (xy 58.688752 54.581083) (xy 58.81528 54.596963) (xy 58.823062 54.601393) (xy 58.825523 54.608572) (xy 58.825523 55.087925) (xy 58.822096 55.096198) (xy 58.81528 55.099534) (xy 58.688753 55.115412) (xy 58.60242 55.163784) (xy 58.539574 55.238678) (xy 58.473439 55.335165) (xy 58.473073 55.335644) (xy 58.384773 55.439623) (xy 58.376806 55.443711) (xy 58.368282 55.440968) (xy 58.367589 55.44033) (xy 58.262729 55.335644) (xy 57.782815 54.856527) (xy 57.779382 54.848259) (xy 57.782801 54.839984) (xy 58.36759 54.256166) (xy 58.375865 54.252747) ) ) ) (zone (net 77) (net_name "OB+") (layer "F.Cu") (tstamp c793fed3-0bd3-4e76-88d5-756c0735533a) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30055) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 39.393 98.402576) (xy 39.4254 98.40248) (xy 39.4578 98.407475) (xy 39.4902 98.41756) (xy 39.5226 98.432735) (xy 39.555 98.453) (xy 40.005 97.9395) (xy 39.305 97.765182) (xy 39.262599 97.932964) (xy 39.220199 98.080594) (xy 39.1778 98.208073) (xy 39.1354 98.3154) (xy 39.093 98.402576) ) ) (filled_polygon (layer "F.Cu") (pts (xy 39.986384 97.934864) (xy 39.993584 97.940188) (xy 39.99491 97.949044) (xy 39.992356 97.953928) (xy 39.561562 98.445511) (xy 39.553532 98.449475) (xy 39.546559 98.44772) (xy 39.535006 98.440495) (xy 39.5226 98.432735) (xy 39.522596 98.432733) (xy 39.490203 98.417561) (xy 39.490194 98.417557) (xy 39.457801 98.407474) (xy 39.425405 98.40248) (xy 39.4254 98.40248) (xy 39.393 98.402576) (xy 39.111701 98.402576) (xy 39.103428 98.399149) (xy 39.100001 98.390876) (xy 39.101179 98.385759) (xy 39.1354 98.315399) (xy 39.177799 98.208075) (xy 39.1778 98.208073) (xy 39.220199 98.080594) (xy 39.262599 97.932964) (xy 39.302143 97.776483) (xy 39.307492 97.769304) (xy 39.316312 97.767999) ) ) ) (zone (net 75) (net_name "OA+") (layer "F.Cu") (tstamp d1b982a8-99c3-4216-a891-3c4ae15bfe79) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30054) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 75.667845 97.962787) (xy 75.68956 97.983634) (xy 75.711276 98.010357) (xy 75.732991 98.042955) (xy 75.754707 98.081428) (xy 75.776423 98.125777) (xy 76.403907 97.685793) (xy 75.72223 97.328329) (xy 75.668926 97.442757) (xy 75.615623 97.542203) (xy 75.562319 97.626669) (xy 75.509016 97.696152) (xy 75.455713 97.750655) ) ) (filled_polygon (layer "F.Cu") (pts (xy 75.732597 97.33378) (xy 75.733078 97.334017) (xy 76.291155 97.626667) (xy 76.386901 97.676875) (xy 76.392636 97.683752) (xy 76.391829 97.692671) (xy 76.388184 97.696817) (xy 75.787628 98.117919) (xy 75.778887 98.119863) (xy 75.771331 98.115056) (xy 75.770406 98.113489) (xy 75.754707 98.081428) (xy 75.732991 98.042955) (xy 75.711279 98.010361) (xy 75.711279 98.01036) (xy 75.689562 97.983637) (xy 75.68956 97.983634) (xy 75.689555 97.983629) (xy 75.667845 97.962786) (xy 75.463894 97.758836) (xy 75.460467 97.750563) (xy 75.4638 97.742385) (xy 75.509016 97.696152) (xy 75.562319 97.626669) (xy 75.615623 97.542203) (xy 75.6394 97.497842) (xy 75.668918 97.442773) (xy 75.668921 97.442764) (xy 75.668926 97.442757) (xy 75.717051 97.339445) (xy 75.723651 97.333393) ) ) ) (zone (net 76) (net_name "OB-") (layer "F.Cu") (tstamp d1c2cb70-3710-43da-b917-4943d796f127) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30058) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 42.369936 97.470051) (xy 42.344934 97.524201) (xy 42.319933 97.571277) (xy 42.294932 97.611277) (xy 42.269931 97.644201) (xy 42.24493 97.670051) (xy 42.519936 98.171051) (xy 42.794942 97.670051) (xy 42.76994 97.644201) (xy 42.744939 97.611277) (xy 42.719938 97.571277) (xy 42.694937 97.524201) (xy 42.669936 97.470051) ) ) (filled_polygon (layer "F.Cu") (pts (xy 42.670725 97.473478) (xy 42.673071 97.476841) (xy 42.694937 97.524201) (xy 42.694943 97.524213) (xy 42.719934 97.571271) (xy 42.744937 97.611275) (xy 42.769936 97.644197) (xy 42.769944 97.644205) (xy 42.788944 97.66385) (xy 42.792232 97.672179) (xy 42.79079 97.677614) (xy 42.530192 98.152366) (xy 42.523207 98.157969) (xy 42.514306 98.156992) (xy 42.50968 98.152366) (xy 42.249081 97.677613) (xy 42.248104 97.668712) (xy 42.250925 97.663852) (xy 42.269931 97.644201) (xy 42.294932 97.611277) (xy 42.319933 97.571277) (xy 42.319937 97.571271) (xy 42.344928 97.524213) (xy 42.344928 97.524212) (xy 42.344934 97.524201) (xy 42.36053 97.490422) (xy 42.366799 97.476846) (xy 42.373378 97.470772) (xy 42.377421 97.470051) (xy 42.662452 97.470051) ) ) ) (zone (net 5) (net_name "Net-(J3-Pin_3)") (layer "F.Cu") (tstamp d23837ba-f67c-4726-85a2-2ef80a243cc7) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30030) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 83.054 93.784) (xy 83.071164 93.647229) (xy 83.119536 93.560896) (xy 83.194429 93.498052) (xy 83.291159 93.43175) (xy 83.405041 93.335041) (xy 82.804 92.733) (xy 82.202959 93.335041) (xy 82.31684 93.43175) (xy 82.413569 93.498052) (xy 82.488463 93.560896) (xy 82.536834 93.647229) (xy 82.554 93.784) ) ) (filled_polygon (layer "F.Cu") (pts (xy 82.812264 92.741278) (xy 83.396081 93.326066) (xy 83.399501 93.334342) (xy 83.396067 93.342612) (xy 83.395374 93.34325) (xy 83.291395 93.43155) (xy 83.290916 93.431916) (xy 83.194429 93.498051) (xy 83.119535 93.560897) (xy 83.071163 93.64723) (xy 83.055285 93.773757) (xy 83.050855 93.781539) (xy 83.043676 93.784) (xy 82.564323 93.784) (xy 82.55605 93.780573) (xy 82.552714 93.773757) (xy 82.536834 93.64723) (xy 82.536834 93.647229) (xy 82.488463 93.560896) (xy 82.413569 93.498052) (xy 82.31708 93.431914) (xy 82.316617 93.431561) (xy 82.212624 93.343249) (xy 82.208537 93.335283) (xy 82.21128 93.326759) (xy 82.211905 93.32608) (xy 82.795721 92.741292) (xy 82.80399 92.737859) ) ) ) (zone (net 66) (net_name "UART A RX") (layer "F.Cu") (tstamp e0d1039e-ed05-4e54-a950-7f7a246e6f1d) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30008) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 73.604 85.34) (xy 73.644 85.425082) (xy 73.684 85.529741) (xy 73.723999 85.653978) (xy 73.763999 85.797792) (xy 73.804 85.961185) (xy 76.455 85.344) (xy 73.804 84.494) (xy 73.763999 84.587178) (xy 73.723999 84.668367) (xy 73.684 84.737567) (xy 73.644 84.794778) (xy 73.604 84.84) ) ) (filled_polygon (layer "F.Cu") (pts (xy 76.414668 85.331068) (xy 76.421499 85.336856) (xy 76.422236 85.34578) (xy 76.416447 85.352612) (xy 76.413748 85.353603) (xy 73.815266 85.958562) (xy 73.806431 85.957101) (xy 73.801249 85.949949) (xy 73.763999 85.797792) (xy 73.723999 85.653978) (xy 73.683999 85.529739) (xy 73.683999 85.529738) (xy 73.643997 85.425075) (xy 73.605112 85.342365) (xy 73.604 85.337387) (xy 73.604 84.844432) (xy 73.606935 84.836681) (xy 73.644 84.794778) (xy 73.644003 84.794774) (xy 73.684002 84.737565) (xy 73.684002 84.737564) (xy 73.724 84.668365) (xy 73.763999 84.587179) (xy 73.799804 84.503773) (xy 73.806216 84.497522) (xy 73.814127 84.497247) ) ) ) (zone (net 75) (net_name "OA+") (layer "F.Cu") (tstamp e3bf5afb-a716-44db-bbf9-9cb879e750a3) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30040) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 84.728 100.865606) (xy 84.733616 101.041583) (xy 84.747008 101.166112) (xy 84.762992 101.273492) (xy 84.776384 101.398022) (xy 84.782 101.574) (xy 85.582 101.575) (xy 85.582 100.774) (xy 85.416571 100.81048) (xy 85.265703 100.887104) (xy 85.142148 100.954649) (xy 85.058662 100.963891) (xy 85.028 100.865606) ) ) (filled_polygon (layer "F.Cu") (pts (xy 85.576597 100.778699) (xy 85.581725 100.78604) (xy 85.582 100.78856) (xy 85.582 101.563285) (xy 85.578573 101.571558) (xy 85.5703 101.574985) (xy 85.570285 101.574985) (xy 84.793317 101.574014) (xy 84.785049 101.570577) (xy 84.781639 101.562689) (xy 84.776384 101.398022) (xy 84.762992 101.273492) (xy 84.747009 101.166112) (xy 84.733639 101.0418) (xy 84.733609 101.041384) (xy 84.728499 100.881242) (xy 84.728499 100.877306) (xy 84.731926 100.869033) (xy 84.740199 100.865606) (xy 85.019394 100.865606) (xy 85.027667 100.869033) (xy 85.030563 100.873822) (xy 85.058661 100.963889) (xy 85.058662 100.96389) (xy 85.058662 100.963891) (xy 85.142148 100.954649) (xy 85.265703 100.887104) (xy 85.415249 100.81115) (xy 85.418022 100.810159) (xy 85.567781 100.777135) ) ) ) (zone (net 34) (net_name "VBUS1") (layer "F.Cu") (tstamp e63d415f-017c-4a0d-9724-4d294dbc0d96) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30045) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 75.093 101.67) (xy 75.022134 101.649183) (xy 74.951268 101.615678) (xy 74.880402 101.569484) (xy 74.809536 101.510601) (xy 74.738671 101.43903) (xy 74.167 101.92) (xy 74.738671 102.40097) (xy 74.809536 102.329398) (xy 74.880402 102.270515) (xy 74.951268 102.224321) (xy 75.022134 102.190816) (xy 75.093 102.17) ) ) (filled_polygon (layer "F.Cu") (pts (xy 74.746261 101.446696) (xy 74.809536 101.510601) (xy 74.880402 101.569484) (xy 74.951268 101.615678) (xy 75.022134 101.649183) (xy 75.084599 101.667532) (xy 75.091569 101.673151) (xy 75.093 101.678757) (xy 75.093 102.161242) (xy 75.089573 102.169515) (xy 75.084598 102.172468) (xy 75.022131 102.190817) (xy 74.951269 102.22432) (xy 74.880402 102.270514) (xy 74.809535 102.329398) (xy 74.746261 102.393303) (xy 74.738005 102.396771) (xy 74.730415 102.394024) (xy 74.583614 102.270514) (xy 74.17764 101.928952) (xy 74.173516 101.921004) (xy 74.17622 101.912468) (xy 74.177641 101.911047) (xy 74.453736 101.678757) (xy 74.730417 101.445974) (xy 74.738951 101.443271) ) ) ) (zone (net 6) (net_name "Net-(U1-3V3)") (layer "F.Cu") (tstamp eb4f50ad-cc3c-4665-9372-762ebedbde20) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30021) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 93.184 55.114) (xy 93.32077 55.131164) (xy 93.407103 55.179536) (xy 93.469946 55.254429) (xy 93.536249 55.351159) (xy 93.632959 55.465041) (xy 94.235 54.864) (xy 93.632959 54.262959) (xy 93.536249 54.37684) (xy 93.469946 54.473569) (xy 93.407103 54.548463) (xy 93.32077 54.596834) (xy 93.184 54.614) ) ) (filled_polygon (layer "F.Cu") (pts (xy 93.64124 54.27128) (xy 93.641931 54.271916) (xy 93.747272 54.377082) (xy 94.226706 54.85572) (xy 94.23014 54.86399) (xy 94.22672 54.872266) (xy 94.226706 54.87228) (xy 93.641933 55.456081) (xy 93.633657 55.459501) (xy 93.625387 55.456067) (xy 93.624757 55.455383) (xy 93.536435 55.351378) (xy 93.536082 55.350916) (xy 93.469946 55.254429) (xy 93.407103 55.179536) (xy 93.32077 55.131164) (xy 93.320769 55.131163) (xy 93.320768 55.131163) (xy 93.194243 55.115285) (xy 93.186461 55.110855) (xy 93.184 55.103676) (xy 93.184 54.624323) (xy 93.187427 54.61605) (xy 93.194241 54.612714) (xy 93.32077 54.596834) (xy 93.407103 54.548463) (xy 93.469946 54.473569) (xy 93.536092 54.377068) (xy 93.536437 54.376618) (xy 93.624751 54.272623) (xy 93.632716 54.268537) ) ) ) (zone (net 31) (net_name "VBUS2") (layer "F.Cu") (tstamp ec12ed17-5acd-4630-9b11-a9ac5c883a85) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30019) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 46.026 102.524) (xy 46.126 102.451689) (xy 46.226 102.395533) (xy 46.325999 102.355533) (xy 46.425999 102.331689) (xy 46.526 102.324) (xy 45.776 101.573) (xy 45.026 102.324) (xy 45.126 102.331689) (xy 45.226 102.355533) (xy 45.325999 102.395533) (xy 45.425999 102.451689) (xy 45.526 102.524) ) ) (filled_polygon (layer "F.Cu") (pts (xy 45.784268 101.581279) (xy 45.784279 101.58129) (xy 46.508038 102.306014) (xy 46.511459 102.31429) (xy 46.508027 102.322561) (xy 46.500656 102.325948) (xy 46.458976 102.329153) (xy 46.425999 102.331689) (xy 46.425995 102.331689) (xy 46.425993 102.33169) (xy 46.326006 102.35553) (xy 46.325999 102.355532) (xy 46.226012 102.395527) (xy 46.22601 102.395528) (xy 46.226003 102.395531) (xy 46.226 102.395533) (xy 46.173708 102.424897) (xy 46.125999 102.451689) (xy 46.029069 102.521781) (xy 46.022213 102.524) (xy 45.529787 102.524) (xy 45.522931 102.521781) (xy 45.425999 102.451689) (xy 45.325999 102.395533) (xy 45.325991 102.39553) (xy 45.325988 102.395528) (xy 45.325986 102.395527) (xy 45.225999 102.355532) (xy 45.225992 102.35553) (xy 45.126005 102.33169) (xy 45.126003 102.331689) (xy 45.126 102.331689) (xy 45.088906 102.328836) (xy 45.051343 102.325948) (xy 45.043357 102.321896) (xy 45.040574 102.313385) (xy 45.04396 102.306015) (xy 45.767721 101.581289) (xy 45.775992 101.577858) ) ) ) (zone (net 34) (net_name "VBUS1") (layer "F.Cu") (tstamp f13144bb-74a9-4e07-8cfd-6f5a17472b5c) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30002) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 97.084 44.454) (xy 97.043999 44.371946) (xy 97.003999 44.27092) (xy 96.964 44.15092) (xy 96.924 44.011946) (xy 96.884 43.854) (xy 94.233 44.704) (xy 96.884 45.554) (xy 96.924 45.396053) (xy 96.964 45.257079) (xy 97.003999 45.137079) (xy 97.043999 45.036053) (xy 97.084 44.954) ) ) (filled_polygon (layer "F.Cu") (pts (xy 96.881066 43.858538) (xy 96.886855 43.86537) (xy 96.887056 43.86607) (xy 96.924 44.011946) (xy 96.964 44.15092) (xy 97.003997 44.270916) (xy 97.044 44.371948) (xy 97.044 44.371949) (xy 97.082817 44.451573) (xy 97.084 44.4567) (xy 97.084 44.951299) (xy 97.082817 44.956426) (xy 97.044 45.03605) (xy 97.044 45.036051) (xy 97.003997 45.137083) (xy 96.964 45.257079) (xy 96.924 45.396053) (xy 96.887056 45.541929) (xy 96.881703 45.549108) (xy 96.872842 45.550399) (xy 96.872142 45.550198) (xy 94.267745 44.71514) (xy 94.260914 44.709352) (xy 94.260177 44.700428) (xy 94.265966 44.693596) (xy 94.267743 44.69286) (xy 96.872144 43.857801) ) ) ) (zone (net 3) (net_name "Net-(J2-Pin_3)") (layer "F.Cu") (tstamp f373e98e-ac9b-4995-a52f-afad040cb599) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30000) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 47.306266 95.332894) (xy 47.284117 94.858892) (xy 47.261968 94.348891) (xy 47.23982 93.802891) (xy 47.217671 93.22089) (xy 47.195523 92.602889) (xy 46.344816 92.717542) (xy 46.206818 95.368249) (xy 46.355997 95.383232) (xy 46.505176 95.422544) (xy 46.654354 95.486184) (xy 46.803533 95.574151) (xy 46.952713 95.686447) ) ) (filled_polygon (layer "F.Cu") (pts (xy 47.191387 92.606904) (xy 47.195888 92.614645) (xy 47.195985 92.615789) (xy 47.217671 93.22089) (xy 47.23982 93.802891) (xy 47.261968 94.348891) (xy 47.284117 94.858892) (xy 47.306024 95.32773) (xy 47.302987 95.336154) (xy 47.30261 95.336549) (xy 46.959901 95.679258) (xy 46.951628 95.682685) (xy 46.944592 95.680333) (xy 46.803543 95.574158) (xy 46.803532 95.57415) (xy 46.654356 95.486185) (xy 46.654355 95.486184) (xy 46.505177 95.422544) (xy 46.356001 95.383233) (xy 46.355999 95.383232) (xy 46.355997 95.383232) (xy 46.355995 95.383231) (xy 46.355987 95.38323) (xy 46.217912 95.369363) (xy 46.210022 95.365127) (xy 46.207397 95.357115) (xy 46.344311 92.72723) (xy 46.348163 92.719148) (xy 46.354428 92.716246) (xy 47.18273 92.604613) ) ) ) (zone (net 73) (net_name "/AD-") (layer "F.Cu") (tstamp f790946a-8936-45a7-b374-3edec3876802) (name "$teardrop_padvia$") (hatch edge 0.5) (priority 30038) (attr (teardrop (type padvia))) (connect_pads yes (clearance 0)) (min_thickness 0.0254) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5) (island_removal_mode 1) (island_area_min 10)) (polygon (pts (xy 77.085355 91.866513) (xy 76.873637 91.981238) (xy 76.661919 92.063349) (xy 76.450201 92.112846) (xy 76.238483 92.12973) (xy 76.026766 92.114) (xy 76.453293 92.964707) (xy 77.304 92.114) (xy 77.302697 92.109085) (xy 77.301394 92.103092) (xy 77.300092 92.096021) (xy 77.298789 92.087872) (xy 77.297487 92.078645) ) ) (filled_polygon (layer "F.Cu") (pts (xy 77.091527 91.872685) (xy 77.294721 92.075879) (xy 77.298033 92.082516) (xy 77.298789 92.087872) (xy 77.300092 92.096021) (xy 77.301191 92.101993) (xy 77.301394 92.103093) (xy 77.30245 92.10795) (xy 77.300859 92.116763) (xy 77.29929 92.118709) (xy 76.464758 92.953241) (xy 76.456485 92.956668) (xy 76.448212 92.953241) (xy 76.446026 92.950212) (xy 76.036011 92.13244) (xy 76.035366 92.123508) (xy 76.041226 92.116737) (xy 76.047335 92.115528) (xy 76.238483 92.12973) (xy 76.450201 92.112846) (xy 76.661919 92.063349) (xy 76.873637 91.981238) (xy 77.077682 91.87067) (xy 77.086586 91.869743) ) ) ) (zone (net 1) (net_name "GND") (layer "B.Cu") (tstamp 18ff41ab-4ea5-4b26-a420-7450b73bdce9) (hatch edge 0.5) (priority 2) (connect_pads (clearance 0.508)) (min_thickness 0.25) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5)) (polygon (pts (xy 33.75922 41.091402) (xy 66.394075 41.029054) (xy 66.416855 115.57) (xy 33.782 115.57) ) ) (filled_polygon (layer "B.Cu") (pts (xy 65.159624 41.130309) (xy 65.205379 41.183113) (xy 65.215323 41.252271) (xy 65.186298 41.315827) (xy 65.149405 41.344839) (xy 65.11279 41.363715) (xy 65.112783 41.363719) (xy 65.112776 41.363723) (xy 65.112775 41.363724) (xy 65.091498 41.377398) (xy 64.76009 41.590379) (xy 64.430539 41.849542) (xy 64.430537 41.849543) (xy 64.127114 42.138856) (xy 63.852572 42.455695) (xy 63.852561 42.455708) (xy 63.609395 42.797187) (xy 63.609389 42.797196) (xy 63.399766 43.160273) (xy 63.225608 43.541625) (xy 63.225598 43.54165) (xy 63.088486 43.937808) (xy 63.088483 43.937818) (xy 62.989642 44.345247) (xy 62.929978 44.760217) (xy 62.91003 45.17899) (xy 62.929978 45.597762) (xy 62.989642 46.012732) (xy 63.088483 46.420161) (xy 63.088486 46.420171) (xy 63.225598 46.816329) (xy 63.225608 46.816354) (xy 63.236611 46.840447) (xy 63.392116 47.180956) (xy 63.399766 47.197706) (xy 63.508563 47.386148) (xy 63.600432 47.54527) (xy 63.609389 47.560783) (xy 63.609395 47.560792) (xy 63.852561 47.902271) (xy 63.85257 47.902281) (xy 63.852571 47.902283) (xy 63.921207 47.981493) (xy 64.116941 48.207383) (xy 64.127117 48.219126) (xy 64.430538 48.508437) (xy 64.623631 48.660287) (xy 64.76009 48.7676) (xy 64.876804 48.842607) (xy 65.112775 48.994256) (xy 65.485413 49.186365) (xy 65.874625 49.342182) (xy 66.276886 49.460296) (xy 66.296153 49.464009) (xy 66.358257 49.496024) (xy 66.393193 49.556532) (xy 66.396689 49.585731) (xy 66.416808 115.416837) (xy 66.397144 115.483883) (xy 66.344354 115.529654) (xy 66.292808 115.540875) (xy 35.775441 115.540875) (xy 35.771385 115.540742) (xy 35.519732 115.524248) (xy 35.511683 115.523188) (xy 35.266355 115.474389) (xy 35.258516 115.472288) (xy 35.09516 115.416837) (xy 35.021651 115.391884) (xy 35.01415 115.388777) (xy 34.903587 115.334253) (xy 34.7898 115.278138) (xy 34.782775 115.274082) (xy 34.574791 115.135111) (xy 34.56835 115.130168) (xy 34.380287 114.965239) (xy 34.374546 114.959498) (xy 34.209619 114.771433) (xy 34.204677 114.764992) (xy 34.065707 114.557007) (xy 34.061648 114.549976) (xy 33.951014 114.325628) (xy 33.947907 114.318127) (xy 33.867501 114.081252) (xy 33.865406 114.073431) (xy 33.816606 113.828081) (xy 33.815548 113.820039) (xy 33.799036 113.568068) (xy 33.798903 113.564013) (xy 33.798903 104.284001) (xy 40.700891 104.284001) (xy 40.7213 104.569362) (xy 40.782109 104.848895) (xy 40.882091 105.116958) (xy 41.019191 105.368038) (xy 41.019196 105.368046) (xy 41.125882 105.510561) (xy 41.125883 105.510562) (xy 41.735438 104.901006) (xy 41.784348 104.979999) (xy 41.927931 105.137501) (xy 42.086388 105.257163) (xy 41.479436 105.864115) (xy 41.62196 105.970807) (xy 41.621961 105.970808) (xy 41.873042 106.107908) (xy 41.873041 106.107908) (xy 42.141104 106.20789) (xy 42.420637 106.268699) (xy 42.705999 106.289109) (xy 42.706001 106.289109) (xy 42.991362 106.268699) (xy 43.270895 106.20789) (xy 43.538958 106.107908) (xy 43.790047 105.970803) (xy 43.932561 105.864116) (xy 43.932562 105.864115) (xy 43.325611 105.257163) (xy 43.484069 105.137501) (xy 43.627652 104.979999) (xy 43.67656 104.901007) (xy 44.286115 105.510562) (xy 44.286116 105.510561) (xy 44.392803 105.368047) (xy 44.529908 105.116958) (xy 44.62989 104.848895) (xy 44.690699 104.569362) (xy 44.711109 104.284001) (xy 53.840891 104.284001) (xy 53.8613 104.569362) (xy 53.922109 104.848895) (xy 54.022091 105.116958) (xy 54.159191 105.368038) (xy 54.159196 105.368046) (xy 54.265882 105.510561) (xy 54.265883 105.510562) (xy 54.875438 104.901006) (xy 54.924348 104.979999) (xy 55.067931 105.137501) (xy 55.226388 105.257163) (xy 54.619436 105.864115) (xy 54.76196 105.970807) (xy 54.761961 105.970808) (xy 55.013042 106.107908) (xy 55.013041 106.107908) (xy 55.281104 106.20789) (xy 55.560637 106.268699) (xy 55.845999 106.289109) (xy 55.846001 106.289109) (xy 56.131362 106.268699) (xy 56.410895 106.20789) (xy 56.678958 106.107908) (xy 56.930047 105.970803) (xy 57.072561 105.864116) (xy 57.072562 105.864115) (xy 56.465611 105.257163) (xy 56.624069 105.137501) (xy 56.767652 104.979999) (xy 56.81656 104.901007) (xy 57.426115 105.510562) (xy 57.426116 105.510561) (xy 57.532803 105.368047) (xy 57.669908 105.116958) (xy 57.76989 104.848895) (xy 57.780987 104.797881) (xy 59.367886 104.797881) (xy 59.386476 105.022235) (xy 59.386478 105.022247) (xy 59.441745 105.24049) (xy 59.532182 105.446668) (xy 59.655318 105.635141) (xy 59.655326 105.635152) (xy 59.807798 105.800778) (xy 59.807802 105.800782) (xy 59.985466 105.939065) (xy 59.985467 105.939065) (xy 59.985469 105.939067) (xy 60.04412 105.970807) (xy 60.183468 106.046218) (xy 60.396407 106.11932) (xy 60.618473 106.156376) (xy 60.843611 106.156376) (xy 61.065677 106.11932) (xy 61.278616 106.046218) (xy 61.476618 105.939065) (xy 61.654282 105.800782) (xy 61.806764 105.635144) (xy 61.929902 105.446667) (xy 62.020338 105.240492) (xy 62.075606 105.022244) (xy 62.07618 105.015316) (xy 62.094198 104.797881) (xy 62.094198 104.79787) (xy 62.075607 104.573516) (xy 62.075605 104.573504) (xy 62.04118 104.437564) (xy 62.020338 104.35526) (xy 61.929902 104.149085) (xy 61.929268 104.148115) (xy 61.864752 104.049365) (xy 61.806764 103.960608) (xy 61.806761 103.960605) (xy 61.806757 103.960599) (xy 61.654285 103.794973) (xy 61.65428 103.794968) (xy 61.476619 103.656688) (xy 61.476614 103.656684) (xy 61.278622 103.549537) (xy 61.278619 103.549535) (xy 61.278616 103.549534) (xy 61.278613 103.549533) (xy 61.278611 103.549532) (xy 61.065679 103.476432) (xy 60.843611 103.439376) (xy 60.618473 103.439376) (xy 60.396404 103.476432) (xy 60.183472 103.549532) (xy 60.183461 103.549537) (xy 59.985469 103.656684) (xy 59.985464 103.656688) (xy 59.807803 103.794968) (xy 59.807798 103.794973) (xy 59.655326 103.960599) (xy 59.655318 103.96061) (xy 59.532182 104.149083) (xy 59.441745 104.355261) (xy 59.386478 104.573504) (xy 59.386476 104.573516) (xy 59.367886 104.79787) (xy 59.367886 104.797881) (xy 57.780987 104.797881) (xy 57.830699 104.569362) (xy 57.851109 104.284001) (xy 57.851109 104.283998) (xy 57.830699 103.998637) (xy 57.76989 103.719104) (xy 57.669908 103.451041) (xy 57.532808 103.199961) (xy 57.532807 103.19996) (xy 57.426115 103.057436) (xy 56.81656 103.666991) (xy 56.767652 103.588001) (xy 56.624069 103.430499) (xy 56.46561 103.310835) (xy 57.072562 102.703883) (xy 57.072561 102.703882) (xy 56.930046 102.597196) (xy 56.930038 102.597191) (xy 56.678957 102.460091) (xy 56.678958 102.460091) (xy 56.410895 102.360109) (xy 56.131362 102.2993) (xy 55.846001 102.278891) (xy 55.845999 102.278891) (xy 55.560637 102.2993) (xy 55.281104 102.360109) (xy 55.013041 102.460091) (xy 54.761961 102.597191) (xy 54.761953 102.597196) (xy 54.619437 102.703882) (xy 54.619436 102.703883) (xy 55.226389 103.310835) (xy 55.067931 103.430499) (xy 54.924348 103.588001) (xy 54.875439 103.666992) (xy 54.265883 103.057436) (xy 54.265882 103.057437) (xy 54.159196 103.199953) (xy 54.159191 103.199961) (xy 54.022091 103.451041) (xy 53.922109 103.719104) (xy 53.8613 103.998637) (xy 53.840891 104.283998) (xy 53.840891 104.284001) (xy 44.711109 104.284001) (xy 44.711109 104.283998) (xy 44.690699 103.998637) (xy 44.62989 103.719104) (xy 44.529908 103.451041) (xy 44.392808 103.199961) (xy 44.392807 103.19996) (xy 44.286115 103.057436) (xy 43.67656 103.666991) (xy 43.627652 103.588001) (xy 43.484069 103.430499) (xy 43.32561 103.310835) (xy 43.932562 102.703883) (xy 43.932561 102.703882) (xy 43.790046 102.597196) (xy 43.790038 102.597191) (xy 43.538957 102.460091) (xy 43.538958 102.460091) (xy 43.30453 102.372654) (xy 44.4675 102.372654) (xy 44.474011 102.433202) (xy 44.474011 102.433204) (xy 44.525111 102.570203) (xy 44.525111 102.570204) (xy 44.612739 102.687261) (xy 44.729796 102.774889) (xy 44.866799 102.825989) (xy 44.89405 102.828918) (xy 44.927345 102.832499) (xy 44.927362 102.8325) (xy 46.624638 102.8325) (xy 46.624654 102.832499) (xy 46.651692 102.829591) (xy 46.685201 102.825989) (xy 46.822204 102.774889) (xy 46.939261 102.687261) (xy 47.026889 102.570204) (xy 47.040586 102.53348) (xy 47.066717 102.463424) (xy 47.108588 102.40749) (xy 47.174053 102.383074) (xy 47.242326 102.397926) (xy 47.270579 102.419077) (xy 47.4317 102.580198) (xy 47.619251 102.711523) (xy 47.744091 102.769736) (xy 47.82675 102.808281) (xy 47.826752 102.808281) (xy 47.826757 102.808284) (xy 48.047913 102.867543) (xy 48.210832 102.881796) (xy 48.275998 102.887498) (xy 48.276 102.887498) (xy 48.276002 102.887498) (xy 48.333021 102.882509) (xy 48.504087 102.867543) (xy 48.725243 102.808284) (xy 48.932749 102.711523) (xy 49.1203 102.580198) (xy 49.188319 102.512179) (xy 49.249642 102.478694) (xy 49.319334 102.483678) (xy 49.363681 102.512179) (xy 49.4317 102.580198) (xy 49.619251 102.711523) (xy 49.744091 102.769736) (xy 49.82675 102.808281) (xy 49.826752 102.808281) (xy 49.826757 102.808284) (xy 50.047913 102.867543) (xy 50.210832 102.881796) (xy 50.275998 102.887498) (xy 50.276 102.887498) (xy 50.276002 102.887498) (xy 50.333021 102.882509) (xy 50.504087 102.867543) (xy 50.725243 102.808284) (xy 50.932749 102.711523) (xy 51.1203 102.580198) (xy 51.282198 102.4183) (xy 51.413523 102.230749) (xy 51.418307 102.220487) (xy 51.464476 102.168051) (xy 51.531669 102.148897) (xy 51.598551 102.169111) (xy 51.643072 102.22049) (xy 51.645866 102.226483) (xy 51.696973 102.299471) (xy 51.696974 102.299472) (xy 52.313064 101.683381) (xy 52.339481 101.773351) (xy 52.413327 101.888258) (xy 52.516555 101.977705) (xy 52.640801 102.034446) (xy 52.665548 102.038004) (xy 52.050526 102.653025) (xy 52.050526 102.653026) (xy 52.123512 102.704131) (xy 52.123516 102.704133) (xy 52.329673 102.800265) (xy 52.329682 102.800269) (xy 52.549389 102.859139) (xy 52.5494 102.859141) (xy 52.775998 102.878966) (xy 52.776002 102.878966) (xy 53.002599 102.859141) (xy 53.00261 102.859139) (xy 53.222317 102.800269) (xy 53.222331 102.800264) (xy 53.428478 102.704136) (xy 53.501472 102.653025) (xy 52.886451 102.038004) (xy 52.911199 102.034446) (xy 53.035445 101.977705) (xy 53.138673 101.888258) (xy 53.212519 101.773351) (xy 53.238935 101.683382) (xy 53.855025 102.299472) (xy 53.906136 102.226478) (xy 54.002264 102.020331) (xy 54.002269 102.020317) (xy 54.061139 101.80061) (xy 54.061141 101.800599) (xy 54.080966 101.574002) (xy 54.080966 101.573997) (xy 54.061141 101.3474) (xy 54.061139 101.347389) (xy 54.002269 101.127682) (xy 54.002265 101.127673) (xy 53.906133 100.921516) (xy 53.906131 100.921512) (xy 53.855026 100.848526) (xy 53.855025 100.848526) (xy 53.238935 101.464616) (xy 53.212519 101.374649) (xy 53.138673 101.259742) (xy 53.035445 101.170295) (xy 52.911199 101.113554) (xy 52.886451 101.109995) (xy 53.379916 100.61653) (xy 59.372542 100.61653) (xy 59.379053 100.677078) (xy 59.379053 100.67708) (xy 59.420458 100.788087) (xy 59.430153 100.81408) (xy 59.517781 100.931137) (xy 59.634838 101.018765) (xy 59.771841 101.069865) (xy 59.799092 101.072794) (xy 59.832387 101.076375) (xy 59.832404 101.076376) (xy 61.62968 101.076376) (xy 61.629696 101.076375) (xy 61.656734 101.073467) (xy 61.690243 101.069865) (xy 61.827246 101.018765) (xy 61.944303 100.931137) (xy 62.031931 100.81408) (xy 62.083031 100.677077) (xy 62.086936 100.640756) (xy 62.089541 100.61653) (xy 62.089542 100.616513) (xy 62.089542 98.819238) (xy 62.089541 98.819221) (xy 62.086199 98.788146) (xy 62.083031 98.758675) (xy 62.031931 98.621672) (xy 61.944303 98.504615) (xy 61.827246 98.416987) (xy 61.690245 98.365887) (xy 61.629696 98.359376) (xy 61.62968 98.359376) (xy 59.832404 98.359376) (xy 59.832387 98.359376) (xy 59.771839 98.365887) (xy 59.771837 98.365887) (xy 59.634837 98.416987) (xy 59.517781 98.504615) (xy 59.430153 98.621671) (xy 59.379053 98.758671) (xy 59.379053 98.758673) (xy 59.372542 98.819221) (xy 59.372542 100.61653) (xy 53.379916 100.61653) (xy 53.501472 100.494974) (xy 53.501471 100.494973) (xy 53.428483 100.443866) (xy 53.428481 100.443865) (xy 53.222326 100.347734) (xy 53.222317 100.34773) (xy 53.00261 100.28886) (xy 53.002599 100.288858) (xy 52.776002 100.269034) (xy 52.775998 100.269034) (xy 52.5494 100.288858) (xy 52.549389 100.28886) (xy 52.329682 100.34773) (xy 52.329673 100.347734) (xy 52.123513 100.443868) (xy 52.050527 100.494972) (xy 52.050526 100.494973) (xy 52.665549 101.109995) (xy 52.640801 101.113554) (xy 52.516555 101.170295) (xy 52.413327 101.259742) (xy 52.339481 101.374649) (xy 52.313064 101.464617) (xy 51.696973 100.848526) (xy 51.696972 100.848527) (xy 51.645867 100.921513) (xy 51.64307 100.927513) (xy 51.596897 100.979951) (xy 51.529703 100.999102) (xy 51.462822 100.978885) (xy 51.418307 100.927511) (xy 51.413523 100.917251) (xy 51.282198 100.7297) (xy 51.1203 100.567802) (xy 50.932749 100.436477) (xy 50.932745 100.436475) (xy 50.725249 100.339718) (xy 50.725238 100.339714) (xy 50.504089 100.280457) (xy 50.504081 100.280456) (xy 50.276002 100.260502) (xy 50.275998 100.260502) (xy 50.047918 100.280456) (xy 50.04791 100.280457) (xy 49.826761 100.339714) (xy 49.82675 100.339718) (xy 49.619254 100.436475) (xy 49.619252 100.436476) (xy 49.584601 100.460739) (xy 49.4317 100.567802) (xy 49.431698 100.567803) (xy 49.431695 100.567806) (xy 49.363681 100.635821) (xy 49.302358 100.669306) (xy 49.232666 100.664322) (xy 49.188319 100.635821) (xy 49.120304 100.567806) (xy 49.1203 100.567802) (xy 48.932749 100.436477) (xy 48.932745 100.436475) (xy 48.725249 100.339718) (xy 48.725238 100.339714) (xy 48.504089 100.280457) (xy 48.504081 100.280456) (xy 48.276002 100.260502) (xy 48.275998 100.260502) (xy 48.047918 100.280456) (xy 48.04791 100.280457) (xy 47.826761 100.339714) (xy 47.82675 100.339718) (xy 47.619254 100.436475) (xy 47.619252 100.436476) (xy 47.431699 100.567803) (xy 47.270579 100.728923) (xy 47.209256 100.762407) (xy 47.139564 100.757423) (xy 47.083631 100.715551) (xy 47.066717 100.684576) (xy 47.04133 100.616513) (xy 47.026889 100.577796) (xy 46.939261 100.460739) (xy 46.822204 100.373111) (xy 46.685203 100.322011) (xy 46.624654 100.3155) (xy 46.624638 100.3155) (xy 44.927362 100.3155) (xy 44.927345 100.3155) (xy 44.866797 100.322011) (xy 44.866795 100.322011) (xy 44.729795 100.373111) (xy 44.612739 100.460739) (xy 44.525111 100.577795) (xy 44.474011 100.714795) (xy 44.474011 100.714797) (xy 44.4675 100.775345) (xy 44.4675 102.372654) (xy 43.30453 102.372654) (xy 43.270895 102.360109) (xy 42.991362 102.2993) (xy 42.706001 102.278891) (xy 42.705999 102.278891) (xy 42.420637 102.2993) (xy 42.141104 102.360109) (xy 41.873041 102.460091) (xy 41.621961 102.597191) (xy 41.621953 102.597196) (xy 41.479437 102.703882) (xy 41.479436 102.703883) (xy 42.086389 103.310835) (xy 41.927931 103.430499) (xy 41.784348 103.588001) (xy 41.735439 103.666992) (xy 41.125883 103.057436) (xy 41.125882 103.057437) (xy 41.019196 103.199953) (xy 41.019191 103.199961) (xy 40.882091 103.451041) (xy 40.782109 103.719104) (xy 40.7213 103.998637) (xy 40.700891 104.283998) (xy 40.700891 104.284001) (xy 33.798903 104.284001) (xy 33.798903 92.948254) (xy 38.632367 92.948254) (xy 38.650957 93.172608) (xy 38.650959 93.17262) (xy 38.706226 93.390863) (xy 38.796663 93.597041) (xy 38.919799 93.785514) (xy 38.919807 93.785525) (xy 39.072279 93.951151) (xy 39.072283 93.951155) (xy 39.249947 94.089438) (xy 39.249948 94.089438) (xy 39.24995 94.08944) (xy 39.376658 94.15801) (xy 39.447949 94.196591) (xy 39.660888 94.269693) (xy 39.882954 94.306749) (xy 40.108092 94.306749) (xy 40.330158 94.269693) (xy 40.543097 94.196591) (xy 40.741099 94.089438) (xy 40.918763 93.951155) (xy 41.049627 93.809) (xy 41.071238 93.785525) (xy 41.071239 93.785523) (xy 41.071245 93.785517) (xy 41.194383 93.59704) (xy 41.284819 93.390865) (xy 41.340087 93.172617) (xy 41.342993 93.137551) (xy 41.358679 92.948254) (xy 41.358679 92.948243) (xy 41.340088 92.723889) (xy 41.340086 92.723877) (xy 41.338662 92.718254) (xy 44.982367 92.718254) (xy 45.000957 92.942608) (xy 45.000959 92.94262) (xy 45.056226 93.160863) (xy 45.146663 93.367041) (xy 45.269799 93.555514) (xy 45.269807 93.555525) (xy 45.422279 93.721151) (xy 45.422283 93.721155) (xy 45.599947 93.859438) (xy 45.599948 93.859438) (xy 45.59995 93.85944) (xy 45.726658 93.92801) (xy 45.797949 93.966591) (xy 46.010888 94.039693) (xy 46.232954 94.076749) (xy 46.458092 94.076749) (xy 46.680158 94.039693) (xy 46.893097 93.966591) (xy 47.091099 93.859438) (xy 47.268763 93.721155) (xy 47.399627 93.579) (xy 47.421238 93.555525) (xy 47.421239 93.555523) (xy 47.421245 93.555517) (xy 47.544383 93.36704) (xy 47.634819 93.160865) (xy 47.690087 92.942617) (xy 47.690088 92.942608) (xy 47.708679 92.718254) (xy 50.062367 92.718254) (xy 50.080957 92.942608) (xy 50.080959 92.94262) (xy 50.136226 93.160863) (xy 50.226663 93.367041) (xy 50.349799 93.555514) (xy 50.349807 93.555525) (xy 50.502279 93.721151) (xy 50.502283 93.721155) (xy 50.679947 93.859438) (xy 50.679948 93.859438) (xy 50.67995 93.85944) (xy 50.806658 93.92801) (xy 50.877949 93.966591) (xy 51.090888 94.039693) (xy 51.312954 94.076749) (xy 51.538092 94.076749) (xy 51.760158 94.039693) (xy 51.973097 93.966591) (xy 52.171099 93.859438) (xy 52.348763 93.721155) (xy 52.479627 93.579) (xy 52.501238 93.555525) (xy 52.501239 93.555523) (xy 52.501245 93.555517) (xy 52.624383 93.36704) (xy 52.714819 93.160865) (xy 52.76866 92.948254) (xy 56.412367 92.948254) (xy 56.430957 93.172608) (xy 56.430959 93.17262) (xy 56.486226 93.390863) (xy 56.576663 93.597041) (xy 56.699799 93.785514) (xy 56.699807 93.785525) (xy 56.852279 93.951151) (xy 56.852283 93.951155) (xy 57.029947 94.089438) (xy 57.029948 94.089438) (xy 57.02995 94.08944) (xy 57.156658 94.15801) (xy 57.227949 94.196591) (xy 57.440888 94.269693) (xy 57.662954 94.306749) (xy 57.888092 94.306749) (xy 58.110158 94.269693) (xy 58.323097 94.196591) (xy 58.521099 94.089438) (xy 58.698763 93.951155) (xy 58.829627 93.809) (xy 58.851238 93.785525) (xy 58.851239 93.785523) (xy 58.851245 93.785517) (xy 58.974383 93.59704) (xy 59.064819 93.390865) (xy 59.120087 93.172617) (xy 59.122993 93.137551) (xy 59.138679 92.948254) (xy 59.138679 92.948243) (xy 59.120088 92.723889) (xy 59.120086 92.723877) (xy 59.111175 92.688688) (xy 59.064819 92.505633) (xy 58.974383 92.299458) (xy 58.958817 92.275633) (xy 58.912814 92.205219) (xy 58.851245 92.110981) (xy 58.851242 92.110978) (xy 58.851238 92.110972) (xy 58.698766 91.945346) (xy 58.698761 91.945341) (xy 58.5211 91.807061) (xy 58.521101 91.807061) (xy 58.521099 91.80706) (xy 58.484593 91.787304) (xy 58.435002 91.738085) (xy 58.419894 91.669868) (xy 58.444064 91.604313) (xy 58.484593 91.569194) (xy 58.484607 91.569185) (xy 58.521099 91.549438) (xy 58.698763 91.411155) (xy 58.851245 91.245517) (xy 58.974383 91.05704) (xy 59.064819 90.850865) (xy 59.120087 90.632617) (xy 59.120088 90.632608) (xy 59.138679 90.408254) (xy 59.138679 90.408243) (xy 59.120088 90.183889) (xy 59.120086 90.183877) (xy 59.0787 90.020447) (xy 59.064819 89.965633) (xy 58.974383 89.759458) (xy 58.851245 89.570981) (xy 58.851242 89.570978) (xy 58.851238 89.570972) (xy 58.698766 89.405346) (xy 58.698761 89.405341) (xy 58.5211 89.267061) (xy 58.521095 89.267057) (xy 58.323103 89.15991) (xy 58.3231 89.159908) (xy 58.323097 89.159907) (xy 58.323094 89.159906) (xy 58.323092 89.159905) (xy 58.11016 89.086805) (xy 57.888092 89.049749) (xy 57.662954 89.049749) (xy 57.440885 89.086805) (xy 57.227953 89.159905) (xy 57.227942 89.15991) (xy 57.02995 89.267057) (xy 57.029945 89.267061) (xy 56.852284 89.405341) (xy 56.852279 89.405346) (xy 56.699807 89.570972) (xy 56.699799 89.570983) (xy 56.576663 89.759456) (xy 56.486226 89.965634) (xy 56.430959 90.183877) (xy 56.430957 90.183889) (xy 56.412367 90.408243) (xy 56.412367 90.408254) (xy 56.430957 90.632608) (xy 56.430959 90.63262) (xy 56.486226 90.850863) (xy 56.576663 91.057041) (xy 56.699799 91.245514) (xy 56.699807 91.245525) (xy 56.852279 91.411151) (xy 56.852283 91.411155) (xy 57.029947 91.549438) (xy 57.029952 91.54944) (xy 57.029954 91.549442) (xy 57.066453 91.569195) (xy 57.116043 91.618414) (xy 57.131151 91.686631) (xy 57.10698 91.752186) (xy 57.066453 91.787303) (xy 57.029954 91.807055) (xy 57.029945 91.807061) (xy 56.852284 91.945341) (xy 56.852279 91.945346) (xy 56.699807 92.110972) (xy 56.699799 92.110983) (xy 56.576663 92.299456) (xy 56.486226 92.505634) (xy 56.430959 92.723877) (xy 56.430957 92.723889) (xy 56.412367 92.948243) (xy 56.412367 92.948254) (xy 52.76866 92.948254) (xy 52.770087 92.942617) (xy 52.770088 92.942608) (xy 52.788679 92.718254) (xy 52.788679 92.718243) (xy 52.770088 92.493889) (xy 52.770086 92.493877) (xy 52.714819 92.275634) (xy 52.687436 92.213207) (xy 52.624383 92.069458) (xy 52.501245 91.880981) (xy 52.501242 91.880978) (xy 52.501238 91.880972) (xy 52.348766 91.715346) (xy 52.348761 91.715341) (xy 52.1711 91.577061) (xy 52.171095 91.577057) (xy 51.973103 91.46991) (xy 51.9731 91.469908) (xy 51.973097 91.469907) (xy 51.973094 91.469906) (xy 51.973092 91.469905) (xy 51.76016 91.396805) (xy 51.538092 91.359749) (xy 51.312954 91.359749) (xy 51.090885 91.396805) (xy 50.877953 91.469905) (xy 50.877942 91.46991) (xy 50.67995 91.577057) (xy 50.679945 91.577061) (xy 50.502284 91.715341) (xy 50.502279 91.715346) (xy 50.349807 91.880972) (xy 50.349799 91.880983) (xy 50.226663 92.069456) (xy 50.136226 92.275634) (xy 50.080959 92.493877) (xy 50.080957 92.493889) (xy 50.062367 92.718243) (xy 50.062367 92.718254) (xy 47.708679 92.718254) (xy 47.708679 92.718243) (xy 47.690088 92.493889) (xy 47.690086 92.493877) (xy 47.634819 92.275634) (xy 47.607436 92.213207) (xy 47.544383 92.069458) (xy 47.421245 91.880981) (xy 47.421242 91.880978) (xy 47.421238 91.880972) (xy 47.268766 91.715346) (xy 47.268761 91.715341) (xy 47.0911 91.577061) (xy 47.091095 91.577057) (xy 46.893103 91.46991) (xy 46.8931 91.469908) (xy 46.893097 91.469907) (xy 46.893094 91.469906) (xy 46.893092 91.469905) (xy 46.68016 91.396805) (xy 46.458092 91.359749) (xy 46.232954 91.359749) (xy 46.010885 91.396805) (xy 45.797953 91.469905) (xy 45.797942 91.46991) (xy 45.59995 91.577057) (xy 45.599945 91.577061) (xy 45.422284 91.715341) (xy 45.422279 91.715346) (xy 45.269807 91.880972) (xy 45.269799 91.880983) (xy 45.146663 92.069456) (xy 45.056226 92.275634) (xy 45.000959 92.493877) (xy 45.000957 92.493889) (xy 44.982367 92.718243) (xy 44.982367 92.718254) (xy 41.338662 92.718254) (xy 41.331175 92.688688) (xy 41.284819 92.505633) (xy 41.194383 92.299458) (xy 41.178817 92.275633) (xy 41.132814 92.205219) (xy 41.071245 92.110981) (xy 41.071242 92.110978) (xy 41.071238 92.110972) (xy 40.918766 91.945346) (xy 40.918761 91.945341) (xy 40.7411 91.807061) (xy 40.741101 91.807061) (xy 40.741099 91.80706) (xy 40.704593 91.787304) (xy 40.655002 91.738085) (xy 40.639894 91.669868) (xy 40.664064 91.604313) (xy 40.704593 91.569194) (xy 40.704607 91.569185) (xy 40.741099 91.549438) (xy 40.918763 91.411155) (xy 41.071245 91.245517) (xy 41.194383 91.05704) (xy 41.284819 90.850865) (xy 41.340087 90.632617) (xy 41.340088 90.632608) (xy 41.358679 90.408254) (xy 41.358679 90.408243) (xy 41.340088 90.183889) (xy 41.340086 90.183877) (xy 41.2987 90.020447) (xy 41.284819 89.965633) (xy 41.194383 89.759458) (xy 41.071245 89.570981) (xy 41.071242 89.570978) (xy 41.071238 89.570972) (xy 40.918766 89.405346) (xy 40.918761 89.405341) (xy 40.7411 89.267061) (xy 40.741095 89.267057) (xy 40.543103 89.15991) (xy 40.5431 89.159908) (xy 40.543097 89.159907) (xy 40.543094 89.159906) (xy 40.543092 89.159905) (xy 40.33016 89.086805) (xy 40.108092 89.049749) (xy 39.882954 89.049749) (xy 39.660885 89.086805) (xy 39.447953 89.159905) (xy 39.447942 89.15991) (xy 39.24995 89.267057) (xy 39.249945 89.267061) (xy 39.072284 89.405341) (xy 39.072279 89.405346) (xy 38.919807 89.570972) (xy 38.919799 89.570983) (xy 38.796663 89.759456) (xy 38.706226 89.965634) (xy 38.650959 90.183877) (xy 38.650957 90.183889) (xy 38.632367 90.408243) (xy 38.632367 90.408254) (xy 38.650957 90.632608) (xy 38.650959 90.63262) (xy 38.706226 90.850863) (xy 38.796663 91.057041) (xy 38.919799 91.245514) (xy 38.919807 91.245525) (xy 39.072279 91.411151) (xy 39.072283 91.411155) (xy 39.249947 91.549438) (xy 39.249952 91.54944) (xy 39.249954 91.549442) (xy 39.286453 91.569195) (xy 39.336043 91.618414) (xy 39.351151 91.686631) (xy 39.32698 91.752186) (xy 39.286453 91.787303) (xy 39.249954 91.807055) (xy 39.249945 91.807061) (xy 39.072284 91.945341) (xy 39.072279 91.945346) (xy 38.919807 92.110972) (xy 38.919799 92.110983) (xy 38.796663 92.299456) (xy 38.706226 92.505634) (xy 38.650959 92.723877) (xy 38.650957 92.723889) (xy 38.632367 92.948243) (xy 38.632367 92.948254) (xy 33.798903 92.948254) (xy 33.798903 85.328254) (xy 38.632367 85.328254) (xy 38.650957 85.552608) (xy 38.650959 85.55262) (xy 38.706226 85.770863) (xy 38.796663 85.977041) (xy 38.919799 86.165514) (xy 38.919807 86.165525) (xy 39.072279 86.331151) (xy 39.072283 86.331155) (xy 39.249947 86.469438) (xy 39.249948 86.469438) (xy 39.24995 86.46944) (xy 39.376658 86.53801) (xy 39.447949 86.576591) (xy 39.660888 86.649693) (xy 39.882954 86.686749) (xy 40.108092 86.686749) (xy 40.330158 86.649693) (xy 40.543097 86.576591) (xy 40.741099 86.469438) (xy 40.918763 86.331155) (xy 41.049627 86.189) (xy 41.071238 86.165525) (xy 41.071239 86.165523) (xy 41.071245 86.165517) (xy 41.194383 85.97704) (xy 41.284819 85.770865) (xy 41.340087 85.552617) (xy 41.340088 85.552608) (xy 41.358679 85.328254) (xy 56.412367 85.328254) (xy 56.430957 85.552608) (xy 56.430959 85.55262) (xy 56.486226 85.770863) (xy 56.576663 85.977041) (xy 56.699799 86.165514) (xy 56.699807 86.165525) (xy 56.852279 86.331151) (xy 56.852283 86.331155) (xy 57.029947 86.469438) (xy 57.029948 86.469438) (xy 57.02995 86.46944) (xy 57.156658 86.53801) (xy 57.227949 86.576591) (xy 57.440888 86.649693) (xy 57.662954 86.686749) (xy 57.888092 86.686749) (xy 58.110158 86.649693) (xy 58.323097 86.576591) (xy 58.521099 86.469438) (xy 58.698763 86.331155) (xy 58.829627 86.189) (xy 58.851238 86.165525) (xy 58.851239 86.165523) (xy 58.851245 86.165517) (xy 58.974383 85.97704) (xy 59.064819 85.770865) (xy 59.120087 85.552617) (xy 59.120088 85.552608) (xy 59.138679 85.328254) (xy 59.138679 85.328243) (xy 59.120088 85.103889) (xy 59.120086 85.103877) (xy 59.0787 84.940447) (xy 59.064819 84.885633) (xy 58.974383 84.679458) (xy 58.942153 84.630127) (xy 58.912814 84.585219) (xy 58.851245 84.490981) (xy 58.851242 84.490978) (xy 58.851238 84.490972) (xy 58.698766 84.325346) (xy 58.698761 84.325341) (xy 58.5211 84.187061) (xy 58.521101 84.187061) (xy 58.521099 84.18706) (xy 58.484593 84.167304) (xy 58.435002 84.118085) (xy 58.419894 84.049868) (xy 58.444064 83.984313) (xy 58.484593 83.949194) (xy 58.484607 83.949185) (xy 58.521099 83.929438) (xy 58.698763 83.791155) (xy 58.851245 83.625517) (xy 58.974383 83.43704) (xy 59.064819 83.230865) (xy 59.120087 83.012617) (xy 59.120088 83.012608) (xy 59.138679 82.788254) (xy 59.138679 82.788243) (xy 59.120088 82.563889) (xy 59.120086 82.563877) (xy 59.0787 82.400447) (xy 59.064819 82.345633) (xy 58.974383 82.139458) (xy 58.942153 82.090127) (xy 58.912814 82.045219) (xy 58.851245 81.950981) (xy 58.851242 81.950978) (xy 58.851238 81.950972) (xy 58.698766 81.785346) (xy 58.698761 81.785341) (xy 58.5211 81.647061) (xy 58.521101 81.647061) (xy 58.521099 81.64706) (xy 58.484593 81.627304) (xy 58.435002 81.578085) (xy 58.419894 81.509868) (xy 58.444064 81.444313) (xy 58.484593 81.409194) (xy 58.484607 81.409185) (xy 58.521099 81.389438) (xy 58.698763 81.251155) (xy 58.851245 81.085517) (xy 58.974383 80.89704) (xy 59.064819 80.690865) (xy 59.120087 80.472617) (xy 59.120088 80.472608) (xy 59.138679 80.248254) (xy 59.138679 80.248243) (xy 59.120088 80.023889) (xy 59.120086 80.023877) (xy 59.0787 79.860447) (xy 59.064819 79.805633) (xy 58.974383 79.599458) (xy 58.942153 79.550127) (xy 58.912814 79.505219) (xy 58.851245 79.410981) (xy 58.851242 79.410978) (xy 58.851238 79.410972) (xy 58.698766 79.245346) (xy 58.698761 79.245341) (xy 58.5211 79.107061) (xy 58.521101 79.107061) (xy 58.521099 79.10706) (xy 58.484593 79.087304) (xy 58.435002 79.038085) (xy 58.419894 78.969868) (xy 58.444064 78.904313) (xy 58.484593 78.869194) (xy 58.484607 78.869185) (xy 58.521099 78.849438) (xy 58.698763 78.711155) (xy 58.851245 78.545517) (xy 58.974383 78.35704) (xy 59.064819 78.150865) (xy 59.120087 77.932617) (xy 59.120088 77.932608) (xy 59.138679 77.708254) (xy 59.138679 77.708243) (xy 59.120088 77.483889) (xy 59.120086 77.483877) (xy 59.0787 77.320447) (xy 59.064819 77.265633) (xy 58.974383 77.059458) (xy 58.851245 76.870981) (xy 58.851242 76.870978) (xy 58.851238 76.870972) (xy 58.698766 76.705346) (xy 58.698761 76.705341) (xy 58.5211 76.567061) (xy 58.521095 76.567057) (xy 58.323103 76.45991) (xy 58.3231 76.459908) (xy 58.323097 76.459907) (xy 58.323094 76.459906) (xy 58.323092 76.459905) (xy 58.11016 76.386805) (xy 57.888092 76.349749) (xy 57.662954 76.349749) (xy 57.440885 76.386805) (xy 57.227953 76.459905) (xy 57.227942 76.45991) (xy 57.02995 76.567057) (xy 57.029945 76.567061) (xy 56.852284 76.705341) (xy 56.852279 76.705346) (xy 56.699807 76.870972) (xy 56.699799 76.870983) (xy 56.576663 77.059456) (xy 56.486226 77.265634) (xy 56.430959 77.483877) (xy 56.430957 77.483889) (xy 56.412367 77.708243) (xy 56.412367 77.708254) (xy 56.430957 77.932608) (xy 56.430959 77.93262) (xy 56.486226 78.150863) (xy 56.576663 78.357041) (xy 56.699799 78.545514) (xy 56.699807 78.545525) (xy 56.852279 78.711151) (xy 56.852283 78.711155) (xy 57.029947 78.849438) (xy 57.029952 78.84944) (xy 57.029954 78.849442) (xy 57.066453 78.869195) (xy 57.116043 78.918414) (xy 57.131151 78.986631) (xy 57.10698 79.052186) (xy 57.066453 79.087303) (xy 57.029954 79.107055) (xy 57.029945 79.107061) (xy 56.852284 79.245341) (xy 56.852279 79.245346) (xy 56.699807 79.410972) (xy 56.699799 79.410983) (xy 56.576663 79.599456) (xy 56.486226 79.805634) (xy 56.430959 80.023877) (xy 56.430957 80.023889) (xy 56.412367 80.248243) (xy 56.412367 80.248254) (xy 56.430957 80.472608) (xy 56.430959 80.47262) (xy 56.486226 80.690863) (xy 56.576663 80.897041) (xy 56.699799 81.085514) (xy 56.699807 81.085525) (xy 56.852279 81.251151) (xy 56.852283 81.251155) (xy 57.029947 81.389438) (xy 57.029952 81.38944) (xy 57.029954 81.389442) (xy 57.066453 81.409195) (xy 57.116043 81.458414) (xy 57.131151 81.526631) (xy 57.10698 81.592186) (xy 57.066453 81.627303) (xy 57.029954 81.647055) (xy 57.029945 81.647061) (xy 56.852284 81.785341) (xy 56.852279 81.785346) (xy 56.699807 81.950972) (xy 56.699799 81.950983) (xy 56.576663 82.139456) (xy 56.486226 82.345634) (xy 56.430959 82.563877) (xy 56.430957 82.563889) (xy 56.412367 82.788243) (xy 56.412367 82.788254) (xy 56.430957 83.012608) (xy 56.430959 83.01262) (xy 56.486226 83.230863) (xy 56.576663 83.437041) (xy 56.699799 83.625514) (xy 56.699807 83.625525) (xy 56.852279 83.791151) (xy 56.852283 83.791155) (xy 57.029947 83.929438) (xy 57.029952 83.92944) (xy 57.029954 83.929442) (xy 57.066453 83.949195) (xy 57.116043 83.998414) (xy 57.131151 84.066631) (xy 57.10698 84.132186) (xy 57.066453 84.167303) (xy 57.029954 84.187055) (xy 57.029945 84.187061) (xy 56.852284 84.325341) (xy 56.852279 84.325346) (xy 56.699807 84.490972) (xy 56.699799 84.490983) (xy 56.576663 84.679456) (xy 56.486226 84.885634) (xy 56.430959 85.103877) (xy 56.430957 85.103889) (xy 56.412367 85.328243) (xy 56.412367 85.328254) (xy 41.358679 85.328254) (xy 41.358679 85.328243) (xy 41.340088 85.103889) (xy 41.340086 85.103877) (xy 41.2987 84.940447) (xy 41.284819 84.885633) (xy 41.194383 84.679458) (xy 41.162153 84.630127) (xy 41.132814 84.585219) (xy 41.071245 84.490981) (xy 41.071242 84.490978) (xy 41.071238 84.490972) (xy 40.918766 84.325346) (xy 40.918761 84.325341) (xy 40.7411 84.187061) (xy 40.741101 84.187061) (xy 40.741099 84.18706) (xy 40.704593 84.167304) (xy 40.655002 84.118085) (xy 40.639894 84.049868) (xy 40.664064 83.984313) (xy 40.704593 83.949194) (xy 40.704607 83.949185) (xy 40.741099 83.929438) (xy 40.918763 83.791155) (xy 41.071245 83.625517) (xy 41.194383 83.43704) (xy 41.284819 83.230865) (xy 41.340087 83.012617) (xy 41.340088 83.012608) (xy 41.358679 82.788254) (xy 41.358679 82.788243) (xy 41.340088 82.563889) (xy 41.340086 82.563877) (xy 41.2987 82.400447) (xy 41.284819 82.345633) (xy 41.194383 82.139458) (xy 41.162153 82.090127) (xy 41.132814 82.045219) (xy 41.071245 81.950981) (xy 41.071242 81.950978) (xy 41.071238 81.950972) (xy 40.918766 81.785346) (xy 40.918761 81.785341) (xy 40.7411 81.647061) (xy 40.741101 81.647061) (xy 40.741099 81.64706) (xy 40.704593 81.627304) (xy 40.655002 81.578085) (xy 40.639894 81.509868) (xy 40.664064 81.444313) (xy 40.704593 81.409194) (xy 40.704607 81.409185) (xy 40.741099 81.389438) (xy 40.918763 81.251155) (xy 41.071245 81.085517) (xy 41.194383 80.89704) (xy 41.284819 80.690865) (xy 41.340087 80.472617) (xy 41.340088 80.472608) (xy 41.358679 80.248254) (xy 41.358679 80.248243) (xy 41.340088 80.023889) (xy 41.340086 80.023877) (xy 41.2987 79.860447) (xy 41.284819 79.805633) (xy 41.194383 79.599458) (xy 41.162153 79.550127) (xy 41.132814 79.505219) (xy 41.071245 79.410981) (xy 41.071242 79.410978) (xy 41.071238 79.410972) (xy 40.918766 79.245346) (xy 40.918761 79.245341) (xy 40.7411 79.107061) (xy 40.741101 79.107061) (xy 40.741099 79.10706) (xy 40.704593 79.087304) (xy 40.655002 79.038085) (xy 40.639894 78.969868) (xy 40.664064 78.904313) (xy 40.704593 78.869194) (xy 40.704607 78.869185) (xy 40.741099 78.849438) (xy 40.918763 78.711155) (xy 41.071245 78.545517) (xy 41.194383 78.35704) (xy 41.284819 78.150865) (xy 41.340087 77.932617) (xy 41.340088 77.932608) (xy 41.358679 77.708254) (xy 41.358679 77.708243) (xy 41.340088 77.483889) (xy 41.340086 77.483877) (xy 41.2987 77.320447) (xy 41.284819 77.265633) (xy 41.194383 77.059458) (xy 41.071245 76.870981) (xy 41.071242 76.870978) (xy 41.071238 76.870972) (xy 40.918766 76.705346) (xy 40.918761 76.705341) (xy 40.7411 76.567061) (xy 40.741095 76.567057) (xy 40.543103 76.45991) (xy 40.5431 76.459908) (xy 40.543097 76.459907) (xy 40.543094 76.459906) (xy 40.543092 76.459905) (xy 40.33016 76.386805) (xy 40.108092 76.349749) (xy 39.882954 76.349749) (xy 39.660885 76.386805) (xy 39.447953 76.459905) (xy 39.447942 76.45991) (xy 39.24995 76.567057) (xy 39.249945 76.567061) (xy 39.072284 76.705341) (xy 39.072279 76.705346) (xy 38.919807 76.870972) (xy 38.919799 76.870983) (xy 38.796663 77.059456) (xy 38.706226 77.265634) (xy 38.650959 77.483877) (xy 38.650957 77.483889) (xy 38.632367 77.708243) (xy 38.632367 77.708254) (xy 38.650957 77.932608) (xy 38.650959 77.93262) (xy 38.706226 78.150863) (xy 38.796663 78.357041) (xy 38.919799 78.545514) (xy 38.919807 78.545525) (xy 39.072279 78.711151) (xy 39.072283 78.711155) (xy 39.249947 78.849438) (xy 39.249952 78.84944) (xy 39.249954 78.849442) (xy 39.286453 78.869195) (xy 39.336043 78.918414) (xy 39.351151 78.986631) (xy 39.32698 79.052186) (xy 39.286453 79.087303) (xy 39.249954 79.107055) (xy 39.249945 79.107061) (xy 39.072284 79.245341) (xy 39.072279 79.245346) (xy 38.919807 79.410972) (xy 38.919799 79.410983) (xy 38.796663 79.599456) (xy 38.706226 79.805634) (xy 38.650959 80.023877) (xy 38.650957 80.023889) (xy 38.632367 80.248243) (xy 38.632367 80.248254) (xy 38.650957 80.472608) (xy 38.650959 80.47262) (xy 38.706226 80.690863) (xy 38.796663 80.897041) (xy 38.919799 81.085514) (xy 38.919807 81.085525) (xy 39.072279 81.251151) (xy 39.072283 81.251155) (xy 39.249947 81.389438) (xy 39.249952 81.38944) (xy 39.249954 81.389442) (xy 39.286453 81.409195) (xy 39.336043 81.458414) (xy 39.351151 81.526631) (xy 39.32698 81.592186) (xy 39.286453 81.627303) (xy 39.249954 81.647055) (xy 39.249945 81.647061) (xy 39.072284 81.785341) (xy 39.072279 81.785346) (xy 38.919807 81.950972) (xy 38.919799 81.950983) (xy 38.796663 82.139456) (xy 38.706226 82.345634) (xy 38.650959 82.563877) (xy 38.650957 82.563889) (xy 38.632367 82.788243) (xy 38.632367 82.788254) (xy 38.650957 83.012608) (xy 38.650959 83.01262) (xy 38.706226 83.230863) (xy 38.796663 83.437041) (xy 38.919799 83.625514) (xy 38.919807 83.625525) (xy 39.072279 83.791151) (xy 39.072283 83.791155) (xy 39.249947 83.929438) (xy 39.249952 83.92944) (xy 39.249954 83.929442) (xy 39.286453 83.949195) (xy 39.336043 83.998414) (xy 39.351151 84.066631) (xy 39.32698 84.132186) (xy 39.286453 84.167303) (xy 39.249954 84.187055) (xy 39.249945 84.187061) (xy 39.072284 84.325341) (xy 39.072279 84.325346) (xy 38.919807 84.490972) (xy 38.919799 84.490983) (xy 38.796663 84.679456) (xy 38.706226 84.885634) (xy 38.650959 85.103877) (xy 38.650957 85.103889) (xy 38.632367 85.328243) (xy 38.632367 85.328254) (xy 33.798903 85.328254) (xy 33.798903 72.628254) (xy 38.632367 72.628254) (xy 38.650957 72.852608) (xy 38.650959 72.85262) (xy 38.706226 73.070863) (xy 38.796663 73.277041) (xy 38.919799 73.465514) (xy 38.919807 73.465525) (xy 39.072279 73.631151) (xy 39.072283 73.631155) (xy 39.249947 73.769438) (xy 39.249948 73.769438) (xy 39.24995 73.76944) (xy 39.376658 73.83801) (xy 39.447949 73.876591) (xy 39.660888 73.949693) (xy 39.882954 73.986749) (xy 40.108092 73.986749) (xy 40.330158 73.949693) (xy 40.543097 73.876591) (xy 40.741099 73.769438) (xy 40.918763 73.631155) (xy 41.049627 73.489) (xy 41.071238 73.465525) (xy 41.071239 73.465523) (xy 41.071245 73.465517) (xy 41.194383 73.27704) (xy 41.284819 73.070865) (xy 41.340087 72.852617) (xy 41.340088 72.852608) (xy 41.358679 72.628254) (xy 56.412367 72.628254) (xy 56.430957 72.852608) (xy 56.430959 72.85262) (xy 56.486226 73.070863) (xy 56.576663 73.277041) (xy 56.699799 73.465514) (xy 56.699807 73.465525) (xy 56.852279 73.631151) (xy 56.852283 73.631155) (xy 57.029947 73.769438) (xy 57.029948 73.769438) (xy 57.02995 73.76944) (xy 57.156658 73.83801) (xy 57.227949 73.876591) (xy 57.440888 73.949693) (xy 57.662954 73.986749) (xy 57.888092 73.986749) (xy 58.110158 73.949693) (xy 58.323097 73.876591) (xy 58.521099 73.769438) (xy 58.698763 73.631155) (xy 58.829627 73.489) (xy 58.851238 73.465525) (xy 58.851239 73.465523) (xy 58.851245 73.465517) (xy 58.974383 73.27704) (xy 59.064819 73.070865) (xy 59.120087 72.852617) (xy 59.120088 72.852608) (xy 59.138679 72.628254) (xy 59.138679 72.628243) (xy 59.120088 72.403889) (xy 59.120086 72.403877) (xy 59.0787 72.240447) (xy 59.064819 72.185633) (xy 58.974383 71.979458) (xy 58.942153 71.930127) (xy 58.912814 71.885219) (xy 58.851245 71.790981) (xy 58.851242 71.790978) (xy 58.851238 71.790972) (xy 58.698766 71.625346) (xy 58.698761 71.625341) (xy 58.5211 71.487061) (xy 58.521101 71.487061) (xy 58.521099 71.48706) (xy 58.484593 71.467304) (xy 58.435002 71.418085) (xy 58.419894 71.349868) (xy 58.444064 71.284313) (xy 58.484593 71.249194) (xy 58.484607 71.249185) (xy 58.521099 71.229438) (xy 58.698763 71.091155) (xy 58.851245 70.925517) (xy 58.974383 70.73704) (xy 59.064819 70.530865) (xy 59.120087 70.312617) (xy 59.120088 70.312608) (xy 59.138679 70.088254) (xy 59.138679 70.088243) (xy 59.120088 69.863889) (xy 59.120086 69.863877) (xy 59.0787 69.700447) (xy 59.064819 69.645633) (xy 58.974383 69.439458) (xy 58.942153 69.390127) (xy 58.912814 69.345219) (xy 58.851245 69.250981) (xy 58.851242 69.250978) (xy 58.851238 69.250972) (xy 58.698766 69.085346) (xy 58.698761 69.085341) (xy 58.5211 68.947061) (xy 58.521101 68.947061) (xy 58.521099 68.94706) (xy 58.484593 68.927304) (xy 58.435002 68.878085) (xy 58.419894 68.809868) (xy 58.444064 68.744313) (xy 58.484593 68.709194) (xy 58.484607 68.709185) (xy 58.521099 68.689438) (xy 58.698763 68.551155) (xy 58.851245 68.385517) (xy 58.974383 68.19704) (xy 59.064819 67.990865) (xy 59.120087 67.772617) (xy 59.120088 67.772608) (xy 59.138679 67.548254) (xy 59.138679 67.548243) (xy 59.120088 67.323889) (xy 59.120086 67.323877) (xy 59.0787 67.160447) (xy 59.064819 67.105633) (xy 58.974383 66.899458) (xy 58.942153 66.850127) (xy 58.912814 66.805219) (xy 58.851245 66.710981) (xy 58.851242 66.710978) (xy 58.851238 66.710972) (xy 58.698766 66.545346) (xy 58.698761 66.545341) (xy 58.5211 66.407061) (xy 58.521101 66.407061) (xy 58.521099 66.40706) (xy 58.484593 66.387304) (xy 58.435002 66.338085) (xy 58.419894 66.269868) (xy 58.444064 66.204313) (xy 58.484593 66.169194) (xy 58.484607 66.169185) (xy 58.521099 66.149438) (xy 58.698763 66.011155) (xy 58.851245 65.845517) (xy 58.974383 65.65704) (xy 59.064819 65.450865) (xy 59.120087 65.232617) (xy 59.120088 65.232608) (xy 59.138679 65.008254) (xy 59.138679 65.008243) (xy 59.120088 64.783889) (xy 59.120086 64.783877) (xy 59.0787 64.620447) (xy 59.064819 64.565633) (xy 58.974383 64.359458) (xy 58.962264 64.340909) (xy 58.912814 64.265219) (xy 58.851245 64.170981) (xy 58.851242 64.170978) (xy 58.851238 64.170972) (xy 58.706033 64.01324) (xy 58.67511 63.950586) (xy 58.68297 63.88116) (xy 58.727117 63.827004) (xy 58.753928 63.813076) (xy 58.834107 63.783169) (xy 58.871727 63.769138) (xy 58.988784 63.68151) (xy 59.076412 63.564453) (xy 59.127512 63.42745) (xy 59.131853 63.387074) (xy 59.134022 63.366903) (xy 59.134023 63.366886) (xy 59.134023 61.569611) (xy 59.134022 61.569594) (xy 59.13068 61.538519) (xy 59.127512 61.509048) (xy 59.076412 61.372045) (xy 58.988784 61.254988) (xy 58.871727 61.16736) (xy 58.753927 61.123421) (xy 58.697994 61.081549) (xy 58.673578 61.016084) (xy 58.688431 60.947811) (xy 58.706027 60.923263) (xy 58.851245 60.765517) (xy 58.974383 60.57704) (xy 59.064819 60.370865) (xy 59.120087 60.152617) (xy 59.120088 60.152608) (xy 59.138679 59.928254) (xy 59.138679 59.928243) (xy 59.120088 59.703889) (xy 59.120086 59.703877) (xy 59.0787 59.540447) (xy 59.064819 59.485633) (xy 58.974383 59.279458) (xy 58.942153 59.230127) (xy 58.912814 59.185219) (xy 58.851245 59.090981) (xy 58.851242 59.090978) (xy 58.851238 59.090972) (xy 58.698766 58.925346) (xy 58.698761 58.925341) (xy 58.5211 58.787061) (xy 58.521101 58.787061) (xy 58.521099 58.78706) (xy 58.484593 58.767304) (xy 58.435002 58.718085) (xy 58.419894 58.649868) (xy 58.444064 58.584313) (xy 58.484593 58.549194) (xy 58.484607 58.549185) (xy 58.521099 58.529438) (xy 58.698763 58.391155) (xy 58.851245 58.225517) (xy 58.974383 58.03704) (xy 59.064819 57.830865) (xy 59.120087 57.612617) (xy 59.120088 57.612608) (xy 59.138679 57.388254) (xy 59.138679 57.388243) (xy 59.120088 57.163889) (xy 59.120086 57.163877) (xy 59.0787 57.000447) (xy 59.064819 56.945633) (xy 58.974383 56.739458) (xy 58.942153 56.690127) (xy 58.912814 56.645219) (xy 58.851245 56.550981) (xy 58.851242 56.550978) (xy 58.851238 56.550972) (xy 58.698766 56.385346) (xy 58.698761 56.385341) (xy 58.5211 56.247061) (xy 58.521101 56.247061) (xy 58.521099 56.24706) (xy 58.484593 56.227304) (xy 58.435002 56.178085) (xy 58.419894 56.109868) (xy 58.444064 56.044313) (xy 58.484593 56.009194) (xy 58.484607 56.009185) (xy 58.521099 55.989438) (xy 58.698763 55.851155) (xy 58.851245 55.685517) (xy 58.974383 55.49704) (xy 59.064819 55.290865) (xy 59.120087 55.072617) (xy 59.120088 55.072608) (xy 59.138679 54.848254) (xy 59.138679 54.848243) (xy 59.120088 54.623889) (xy 59.120086 54.623877) (xy 59.0787 54.460447) (xy 59.064819 54.405633) (xy 58.974383 54.199458) (xy 58.942153 54.150127) (xy 58.912814 54.105219) (xy 58.851245 54.010981) (xy 58.851242 54.010978) (xy 58.851238 54.010972) (xy 58.698766 53.845346) (xy 58.698761 53.845341) (xy 58.5211 53.707061) (xy 58.521101 53.707061) (xy 58.521099 53.70706) (xy 58.484593 53.687304) (xy 58.435002 53.638085) (xy 58.419894 53.569868) (xy 58.444064 53.504313) (xy 58.484593 53.469194) (xy 58.484607 53.469185) (xy 58.521099 53.449438) (xy 58.698763 53.311155) (xy 58.828978 53.169705) (xy 58.851238 53.145525) (xy 58.851239 53.145523) (xy 58.851245 53.145517) (xy 58.974383 52.95704) (xy 59.064819 52.750865) (xy 59.120087 52.532617) (xy 59.120088 52.532608) (xy 59.138679 52.308254) (xy 59.138679 52.308243) (xy 59.120088 52.083889) (xy 59.120086 52.083877) (xy 59.0787 51.920447) (xy 59.064819 51.865633) (xy 58.974383 51.659458) (xy 58.851245 51.470981) (xy 58.851242 51.470978) (xy 58.851238 51.470972) (xy 58.698766 51.305346) (xy 58.698761 51.305341) (xy 58.5211 51.167061) (xy 58.521095 51.167057) (xy 58.323103 51.05991) (xy 58.3231 51.059908) (xy 58.323097 51.059907) (xy 58.323094 51.059906) (xy 58.323092 51.059905) (xy 58.11016 50.986805) (xy 57.888092 50.949749) (xy 57.662954 50.949749) (xy 57.440885 50.986805) (xy 57.227953 51.059905) (xy 57.227942 51.05991) (xy 57.02995 51.167057) (xy 57.029945 51.167061) (xy 56.852284 51.305341) (xy 56.852279 51.305346) (xy 56.699807 51.470972) (xy 56.699799 51.470983) (xy 56.576663 51.659456) (xy 56.486226 51.865634) (xy 56.430959 52.083877) (xy 56.430957 52.083889) (xy 56.412367 52.308243) (xy 56.412367 52.308254) (xy 56.430957 52.532608) (xy 56.430959 52.53262) (xy 56.486226 52.750863) (xy 56.576663 52.957041) (xy 56.699799 53.145514) (xy 56.699807 53.145525) (xy 56.852279 53.311151) (xy 56.852284 53.311156) (xy 56.911504 53.357249) (xy 57.029947 53.449438) (xy 57.029952 53.44944) (xy 57.029954 53.449442) (xy 57.066453 53.469195) (xy 57.116043 53.518414) (xy 57.131151 53.586631) (xy 57.10698 53.652186) (xy 57.066453 53.687303) (xy 57.029954 53.707055) (xy 57.029945 53.707061) (xy 56.852284 53.845341) (xy 56.852279 53.845346) (xy 56.699807 54.010972) (xy 56.699799 54.010983) (xy 56.576663 54.199456) (xy 56.486226 54.405634) (xy 56.430959 54.623877) (xy 56.430957 54.623889) (xy 56.412367 54.848243) (xy 56.412367 54.848254) (xy 56.430957 55.072608) (xy 56.430959 55.07262) (xy 56.486226 55.290863) (xy 56.576663 55.497041) (xy 56.699799 55.685514) (xy 56.699807 55.685525) (xy 56.852279 55.851151) (xy 56.852283 55.851155) (xy 57.029947 55.989438) (xy 57.029952 55.98944) (xy 57.029954 55.989442) (xy 57.066453 56.009195) (xy 57.116043 56.058414) (xy 57.131151 56.126631) (xy 57.10698 56.192186) (xy 57.066453 56.227303) (xy 57.029954 56.247055) (xy 57.029945 56.247061) (xy 56.852284 56.385341) (xy 56.852279 56.385346) (xy 56.699807 56.550972) (xy 56.699799 56.550983) (xy 56.576663 56.739456) (xy 56.486226 56.945634) (xy 56.430959 57.163877) (xy 56.430957 57.163889) (xy 56.412367 57.388243) (xy 56.412367 57.388254) (xy 56.430957 57.612608) (xy 56.430959 57.61262) (xy 56.486226 57.830863) (xy 56.576663 58.037041) (xy 56.699799 58.225514) (xy 56.699807 58.225525) (xy 56.852279 58.391151) (xy 56.852283 58.391155) (xy 57.029947 58.529438) (xy 57.029952 58.52944) (xy 57.029954 58.529442) (xy 57.066453 58.549195) (xy 57.116043 58.598414) (xy 57.131151 58.666631) (xy 57.10698 58.732186) (xy 57.066453 58.767303) (xy 57.029954 58.787055) (xy 57.029945 58.787061) (xy 56.852284 58.925341) (xy 56.852279 58.925346) (xy 56.699807 59.090972) (xy 56.699799 59.090983) (xy 56.576663 59.279456) (xy 56.486226 59.485634) (xy 56.430959 59.703877) (xy 56.430957 59.703889) (xy 56.412367 59.928243) (xy 56.412367 59.928254) (xy 56.430957 60.152608) (xy 56.430959 60.15262) (xy 56.486226 60.370863) (xy 56.576663 60.577041) (xy 56.699799 60.765514) (xy 56.699807 60.765525) (xy 56.845012 60.923257) (xy 56.875935 60.985911) (xy 56.868075 61.055337) (xy 56.823928 61.109493) (xy 56.797119 61.123421) (xy 56.679317 61.16736) (xy 56.562262 61.254988) (xy 56.474634 61.372044) (xy 56.423534 61.509044) (xy 56.423534 61.509046) (xy 56.417023 61.569594) (xy 56.417023 63.366903) (xy 56.423534 63.427451) (xy 56.423534 63.427453) (xy 56.474083 63.562975) (xy 56.474634 63.564453) (xy 56.562262 63.68151) (xy 56.679319 63.769138) (xy 56.73126 63.788511) (xy 56.797118 63.813076) (xy 56.853051 63.854948) (xy 56.877467 63.920412) (xy 56.862615 63.988685) (xy 56.845013 64.01324) (xy 56.699802 64.170979) (xy 56.699799 64.170983) (xy 56.576663 64.359456) (xy 56.486226 64.565634) (xy 56.430959 64.783877) (xy 56.430957 64.783889) (xy 56.412367 65.008243) (xy 56.412367 65.008254) (xy 56.430957 65.232608) (xy 56.430959 65.23262) (xy 56.486226 65.450863) (xy 56.576663 65.657041) (xy 56.699799 65.845514) (xy 56.699807 65.845525) (xy 56.852279 66.011151) (xy 56.852283 66.011155) (xy 57.029947 66.149438) (xy 57.029952 66.14944) (xy 57.029954 66.149442) (xy 57.066453 66.169195) (xy 57.116043 66.218414) (xy 57.131151 66.286631) (xy 57.10698 66.352186) (xy 57.066453 66.387303) (xy 57.029954 66.407055) (xy 57.029945 66.407061) (xy 56.852284 66.545341) (xy 56.852279 66.545346) (xy 56.699807 66.710972) (xy 56.699799 66.710983) (xy 56.576663 66.899456) (xy 56.486226 67.105634) (xy 56.430959 67.323877) (xy 56.430957 67.323889) (xy 56.412367 67.548243) (xy 56.412367 67.548254) (xy 56.430957 67.772608) (xy 56.430959 67.77262) (xy 56.486226 67.990863) (xy 56.576663 68.197041) (xy 56.699799 68.385514) (xy 56.699807 68.385525) (xy 56.852279 68.551151) (xy 56.852283 68.551155) (xy 57.029947 68.689438) (xy 57.029952 68.68944) (xy 57.029954 68.689442) (xy 57.066453 68.709195) (xy 57.116043 68.758414) (xy 57.131151 68.826631) (xy 57.10698 68.892186) (xy 57.066453 68.927303) (xy 57.029954 68.947055) (xy 57.029945 68.947061) (xy 56.852284 69.085341) (xy 56.852279 69.085346) (xy 56.699807 69.250972) (xy 56.699799 69.250983) (xy 56.576663 69.439456) (xy 56.486226 69.645634) (xy 56.430959 69.863877) (xy 56.430957 69.863889) (xy 56.412367 70.088243) (xy 56.412367 70.088254) (xy 56.430957 70.312608) (xy 56.430959 70.31262) (xy 56.486226 70.530863) (xy 56.576663 70.737041) (xy 56.699799 70.925514) (xy 56.699807 70.925525) (xy 56.852279 71.091151) (xy 56.852283 71.091155) (xy 57.029947 71.229438) (xy 57.029952 71.22944) (xy 57.029954 71.229442) (xy 57.066453 71.249195) (xy 57.116043 71.298414) (xy 57.131151 71.366631) (xy 57.10698 71.432186) (xy 57.066453 71.467303) (xy 57.029954 71.487055) (xy 57.029945 71.487061) (xy 56.852284 71.625341) (xy 56.852279 71.625346) (xy 56.699807 71.790972) (xy 56.699799 71.790983) (xy 56.576663 71.979456) (xy 56.486226 72.185634) (xy 56.430959 72.403877) (xy 56.430957 72.403889) (xy 56.412367 72.628243) (xy 56.412367 72.628254) (xy 41.358679 72.628254) (xy 41.358679 72.628243) (xy 41.340088 72.403889) (xy 41.340086 72.403877) (xy 41.2987 72.240447) (xy 41.284819 72.185633) (xy 41.194383 71.979458) (xy 41.162153 71.930127) (xy 41.132814 71.885219) (xy 41.071245 71.790981) (xy 41.071242 71.790978) (xy 41.071238 71.790972) (xy 40.918766 71.625346) (xy 40.918761 71.625341) (xy 40.7411 71.487061) (xy 40.741101 71.487061) (xy 40.741099 71.48706) (xy 40.704593 71.467304) (xy 40.655002 71.418085) (xy 40.639894 71.349868) (xy 40.664064 71.284313) (xy 40.704593 71.249194) (xy 40.704607 71.249185) (xy 40.741099 71.229438) (xy 40.918763 71.091155) (xy 41.071245 70.925517) (xy 41.194383 70.73704) (xy 41.284819 70.530865) (xy 41.340087 70.312617) (xy 41.340088 70.312608) (xy 41.358679 70.088254) (xy 41.358679 70.088243) (xy 41.340088 69.863889) (xy 41.340086 69.863877) (xy 41.2987 69.700447) (xy 41.284819 69.645633) (xy 41.194383 69.439458) (xy 41.162153 69.390127) (xy 41.132814 69.345219) (xy 41.071245 69.250981) (xy 41.071242 69.250978) (xy 41.071238 69.250972) (xy 40.918766 69.085346) (xy 40.918761 69.085341) (xy 40.7411 68.947061) (xy 40.741101 68.947061) (xy 40.741099 68.94706) (xy 40.704593 68.927304) (xy 40.655002 68.878085) (xy 40.639894 68.809868) (xy 40.664064 68.744313) (xy 40.704593 68.709194) (xy 40.704607 68.709185) (xy 40.741099 68.689438) (xy 40.918763 68.551155) (xy 41.071245 68.385517) (xy 41.194383 68.19704) (xy 41.284819 67.990865) (xy 41.340087 67.772617) (xy 41.340088 67.772608) (xy 41.358679 67.548254) (xy 41.358679 67.548243) (xy 41.340088 67.323889) (xy 41.340086 67.323877) (xy 41.2987 67.160447) (xy 41.284819 67.105633) (xy 41.194383 66.899458) (xy 41.162153 66.850127) (xy 41.132814 66.805219) (xy 41.071245 66.710981) (xy 41.071242 66.710978) (xy 41.071238 66.710972) (xy 40.918766 66.545346) (xy 40.918761 66.545341) (xy 40.7411 66.407061) (xy 40.741101 66.407061) (xy 40.741099 66.40706) (xy 40.704593 66.387304) (xy 40.655002 66.338085) (xy 40.639894 66.269868) (xy 40.664064 66.204313) (xy 40.704593 66.169194) (xy 40.704607 66.169185) (xy 40.741099 66.149438) (xy 40.918763 66.011155) (xy 41.071245 65.845517) (xy 41.194383 65.65704) (xy 41.284819 65.450865) (xy 41.340087 65.232617) (xy 41.340088 65.232608) (xy 41.358679 65.008254) (xy 41.358679 65.008243) (xy 41.340088 64.783889) (xy 41.340086 64.783877) (xy 41.2987 64.620447) (xy 41.284819 64.565633) (xy 41.194383 64.359458) (xy 41.182264 64.340909) (xy 41.132814 64.265219) (xy 41.071245 64.170981) (xy 41.071242 64.170978) (xy 41.071238 64.170972) (xy 40.918766 64.005346) (xy 40.918761 64.005341) (xy 40.7411 63.867061) (xy 40.741095 63.867057) (xy 40.543103 63.75991) (xy 40.5431 63.759908) (xy 40.543097 63.759907) (xy 40.543094 63.759906) (xy 40.543092 63.759905) (xy 40.33016 63.686805) (xy 40.108092 63.649749) (xy 39.882954 63.649749) (xy 39.660885 63.686805) (xy 39.447953 63.759905) (xy 39.447942 63.75991) (xy 39.24995 63.867057) (xy 39.249945 63.867061) (xy 39.072284 64.005341) (xy 39.072279 64.005346) (xy 38.919807 64.170972) (xy 38.919799 64.170983) (xy 38.796663 64.359456) (xy 38.706226 64.565634) (xy 38.650959 64.783877) (xy 38.650957 64.783889) (xy 38.632367 65.008243) (xy 38.632367 65.008254) (xy 38.650957 65.232608) (xy 38.650959 65.23262) (xy 38.706226 65.450863) (xy 38.796663 65.657041) (xy 38.919799 65.845514) (xy 38.919807 65.845525) (xy 39.072279 66.011151) (xy 39.072283 66.011155) (xy 39.249947 66.149438) (xy 39.249952 66.14944) (xy 39.249954 66.149442) (xy 39.286453 66.169195) (xy 39.336043 66.218414) (xy 39.351151 66.286631) (xy 39.32698 66.352186) (xy 39.286453 66.387303) (xy 39.249954 66.407055) (xy 39.249945 66.407061) (xy 39.072284 66.545341) (xy 39.072279 66.545346) (xy 38.919807 66.710972) (xy 38.919799 66.710983) (xy 38.796663 66.899456) (xy 38.706226 67.105634) (xy 38.650959 67.323877) (xy 38.650957 67.323889) (xy 38.632367 67.548243) (xy 38.632367 67.548254) (xy 38.650957 67.772608) (xy 38.650959 67.77262) (xy 38.706226 67.990863) (xy 38.796663 68.197041) (xy 38.919799 68.385514) (xy 38.919807 68.385525) (xy 39.072279 68.551151) (xy 39.072283 68.551155) (xy 39.249947 68.689438) (xy 39.249952 68.68944) (xy 39.249954 68.689442) (xy 39.286453 68.709195) (xy 39.336043 68.758414) (xy 39.351151 68.826631) (xy 39.32698 68.892186) (xy 39.286453 68.927303) (xy 39.249954 68.947055) (xy 39.249945 68.947061) (xy 39.072284 69.085341) (xy 39.072279 69.085346) (xy 38.919807 69.250972) (xy 38.919799 69.250983) (xy 38.796663 69.439456) (xy 38.706226 69.645634) (xy 38.650959 69.863877) (xy 38.650957 69.863889) (xy 38.632367 70.088243) (xy 38.632367 70.088254) (xy 38.650957 70.312608) (xy 38.650959 70.31262) (xy 38.706226 70.530863) (xy 38.796663 70.737041) (xy 38.919799 70.925514) (xy 38.919807 70.925525) (xy 39.072279 71.091151) (xy 39.072283 71.091155) (xy 39.249947 71.229438) (xy 39.249952 71.22944) (xy 39.249954 71.229442) (xy 39.286453 71.249195) (xy 39.336043 71.298414) (xy 39.351151 71.366631) (xy 39.32698 71.432186) (xy 39.286453 71.467303) (xy 39.249954 71.487055) (xy 39.249945 71.487061) (xy 39.072284 71.625341) (xy 39.072279 71.625346) (xy 38.919807 71.790972) (xy 38.919799 71.790983) (xy 38.796663 71.979456) (xy 38.706226 72.185634) (xy 38.650959 72.403877) (xy 38.650957 72.403889) (xy 38.632367 72.628243) (xy 38.632367 72.628254) (xy 33.798903 72.628254) (xy 33.798903 59.928254) (xy 38.632367 59.928254) (xy 38.650957 60.152608) (xy 38.650959 60.15262) (xy 38.706226 60.370863) (xy 38.796663 60.577041) (xy 38.919799 60.765514) (xy 38.919807 60.765525) (xy 39.065011 60.923256) (xy 39.072283 60.931155) (xy 39.249947 61.069438) (xy 39.249948 61.069438) (xy 39.24995 61.06944) (xy 39.272326 61.081549) (xy 39.447949 61.176591) (xy 39.660888 61.249693) (xy 39.882954 61.286749) (xy 40.108092 61.286749) (xy 40.330158 61.249693) (xy 40.543097 61.176591) (xy 40.741099 61.069438) (xy 40.918763 60.931155) (xy 41.049627 60.789) (xy 41.071238 60.765525) (xy 41.071239 60.765523) (xy 41.071245 60.765517) (xy 41.194383 60.57704) (xy 41.284819 60.370865) (xy 41.340087 60.152617) (xy 41.340088 60.152608) (xy 41.358679 59.928254) (xy 41.358679 59.928243) (xy 41.340088 59.703889) (xy 41.340086 59.703877) (xy 41.2987 59.540447) (xy 41.284819 59.485633) (xy 41.194383 59.279458) (xy 41.162153 59.230127) (xy 41.132814 59.185219) (xy 41.071245 59.090981) (xy 41.071242 59.090978) (xy 41.071238 59.090972) (xy 40.918766 58.925346) (xy 40.918761 58.925341) (xy 40.7411 58.787061) (xy 40.741101 58.787061) (xy 40.741099 58.78706) (xy 40.704593 58.767304) (xy 40.655002 58.718085) (xy 40.639894 58.649868) (xy 40.664064 58.584313) (xy 40.704593 58.549194) (xy 40.704607 58.549185) (xy 40.741099 58.529438) (xy 40.918763 58.391155) (xy 41.071245 58.225517) (xy 41.194383 58.03704) (xy 41.284819 57.830865) (xy 41.340087 57.612617) (xy 41.340088 57.612608) (xy 41.358679 57.388254) (xy 41.358679 57.388243) (xy 41.340088 57.163889) (xy 41.340086 57.163877) (xy 41.2987 57.000447) (xy 41.284819 56.945633) (xy 41.194383 56.739458) (xy 41.162153 56.690127) (xy 41.132814 56.645219) (xy 41.071245 56.550981) (xy 41.071242 56.550978) (xy 41.071238 56.550972) (xy 40.918766 56.385346) (xy 40.918761 56.385341) (xy 40.7411 56.247061) (xy 40.741101 56.247061) (xy 40.741099 56.24706) (xy 40.704593 56.227304) (xy 40.655002 56.178085) (xy 40.639894 56.109868) (xy 40.664064 56.044313) (xy 40.704593 56.009194) (xy 40.704607 56.009185) (xy 40.741099 55.989438) (xy 40.918763 55.851155) (xy 41.071245 55.685517) (xy 41.194383 55.49704) (xy 41.284819 55.290865) (xy 41.340087 55.072617) (xy 41.340088 55.072608) (xy 41.358679 54.848254) (xy 41.358679 54.848243) (xy 41.340088 54.623889) (xy 41.340086 54.623877) (xy 41.2987 54.460447) (xy 41.284819 54.405633) (xy 41.194383 54.199458) (xy 41.162153 54.150127) (xy 41.132814 54.105219) (xy 41.071245 54.010981) (xy 41.071242 54.010978) (xy 41.071238 54.010972) (xy 40.918766 53.845346) (xy 40.918761 53.845341) (xy 40.7411 53.707061) (xy 40.741101 53.707061) (xy 40.741099 53.70706) (xy 40.704593 53.687304) (xy 40.655002 53.638085) (xy 40.639894 53.569868) (xy 40.664064 53.504313) (xy 40.704593 53.469194) (xy 40.704607 53.469185) (xy 40.741099 53.449438) (xy 40.918763 53.311155) (xy 41.048978 53.169705) (xy 41.071238 53.145525) (xy 41.071239 53.145523) (xy 41.071245 53.145517) (xy 41.194383 52.95704) (xy 41.284819 52.750865) (xy 41.340087 52.532617) (xy 41.340088 52.532608) (xy 41.358679 52.308254) (xy 41.358679 52.308243) (xy 41.340088 52.083889) (xy 41.340086 52.083877) (xy 41.2987 51.920447) (xy 41.284819 51.865633) (xy 41.194383 51.659458) (xy 41.071245 51.470981) (xy 41.071242 51.470978) (xy 41.071238 51.470972) (xy 40.918766 51.305346) (xy 40.918761 51.305341) (xy 40.7411 51.167061) (xy 40.741095 51.167057) (xy 40.543103 51.05991) (xy 40.5431 51.059908) (xy 40.543097 51.059907) (xy 40.543094 51.059906) (xy 40.543092 51.059905) (xy 40.33016 50.986805) (xy 40.108092 50.949749) (xy 39.882954 50.949749) (xy 39.660885 50.986805) (xy 39.447953 51.059905) (xy 39.447942 51.05991) (xy 39.24995 51.167057) (xy 39.249945 51.167061) (xy 39.072284 51.305341) (xy 39.072279 51.305346) (xy 38.919807 51.470972) (xy 38.919799 51.470983) (xy 38.796663 51.659456) (xy 38.706226 51.865634) (xy 38.650959 52.083877) (xy 38.650957 52.083889) (xy 38.632367 52.308243) (xy 38.632367 52.308254) (xy 38.650957 52.532608) (xy 38.650959 52.53262) (xy 38.706226 52.750863) (xy 38.796663 52.957041) (xy 38.919799 53.145514) (xy 38.919807 53.145525) (xy 39.072279 53.311151) (xy 39.072284 53.311156) (xy 39.131504 53.357249) (xy 39.249947 53.449438) (xy 39.249952 53.44944) (xy 39.249954 53.449442) (xy 39.286453 53.469195) (xy 39.336043 53.518414) (xy 39.351151 53.586631) (xy 39.32698 53.652186) (xy 39.286453 53.687303) (xy 39.249954 53.707055) (xy 39.249945 53.707061) (xy 39.072284 53.845341) (xy 39.072279 53.845346) (xy 38.919807 54.010972) (xy 38.919799 54.010983) (xy 38.796663 54.199456) (xy 38.706226 54.405634) (xy 38.650959 54.623877) (xy 38.650957 54.623889) (xy 38.632367 54.848243) (xy 38.632367 54.848254) (xy 38.650957 55.072608) (xy 38.650959 55.07262) (xy 38.706226 55.290863) (xy 38.796663 55.497041) (xy 38.919799 55.685514) (xy 38.919807 55.685525) (xy 39.072279 55.851151) (xy 39.072283 55.851155) (xy 39.249947 55.989438) (xy 39.249952 55.98944) (xy 39.249954 55.989442) (xy 39.286453 56.009195) (xy 39.336043 56.058414) (xy 39.351151 56.126631) (xy 39.32698 56.192186) (xy 39.286453 56.227303) (xy 39.249954 56.247055) (xy 39.249945 56.247061) (xy 39.072284 56.385341) (xy 39.072279 56.385346) (xy 38.919807 56.550972) (xy 38.919799 56.550983) (xy 38.796663 56.739456) (xy 38.706226 56.945634) (xy 38.650959 57.163877) (xy 38.650957 57.163889) (xy 38.632367 57.388243) (xy 38.632367 57.388254) (xy 38.650957 57.612608) (xy 38.650959 57.61262) (xy 38.706226 57.830863) (xy 38.796663 58.037041) (xy 38.919799 58.225514) (xy 38.919807 58.225525) (xy 39.072279 58.391151) (xy 39.072283 58.391155) (xy 39.249947 58.529438) (xy 39.249952 58.52944) (xy 39.249954 58.529442) (xy 39.286453 58.549195) (xy 39.336043 58.598414) (xy 39.351151 58.666631) (xy 39.32698 58.732186) (xy 39.286453 58.767303) (xy 39.249954 58.787055) (xy 39.249945 58.787061) (xy 39.072284 58.925341) (xy 39.072279 58.925346) (xy 38.919807 59.090972) (xy 38.919799 59.090983) (xy 38.796663 59.279456) (xy 38.706226 59.485634) (xy 38.650959 59.703877) (xy 38.650957 59.703889) (xy 38.632367 59.928243) (xy 38.632367 59.928254) (xy 33.798903 59.928254) (xy 33.798903 47.228254) (xy 38.632367 47.228254) (xy 38.650957 47.452608) (xy 38.650959 47.45262) (xy 38.706226 47.670863) (xy 38.796663 47.877041) (xy 38.919799 48.065514) (xy 38.919807 48.065525) (xy 39.072279 48.231151) (xy 39.072284 48.231156) (xy 39.109994 48.260507) (xy 39.249947 48.369438) (xy 39.249948 48.369438) (xy 39.24995 48.36944) (xy 39.330125 48.412828) (xy 39.447949 48.476591) (xy 39.660888 48.549693) (xy 39.882954 48.586749) (xy 40.108092 48.586749) (xy 40.330158 48.549693) (xy 40.543097 48.476591) (xy 40.741099 48.369438) (xy 40.918763 48.231155) (xy 41.054442 48.08377) (xy 41.071238 48.065525) (xy 41.071239 48.065523) (xy 41.071245 48.065517) (xy 41.194383 47.87704) (xy 41.207013 47.848247) (xy 45.197216 47.848247) (xy 45.199195 47.870888) (xy 45.199369 47.879078) (xy 45.198207 47.904937) (xy 45.198208 47.904939) (xy 45.209214 47.986195) (xy 45.209539 47.989113) (xy 45.214344 48.04403) (xy 45.216408 48.06762) (xy 45.223147 48.092772) (xy 45.224697 48.100492) (xy 45.228616 48.129422) (xy 45.228619 48.129432) (xy 45.252936 48.204272) (xy 45.253857 48.207383) (xy 45.2734 48.280315) (xy 45.273404 48.280327) (xy 45.285798 48.306908) (xy 45.288574 48.313954) (xy 45.296197 48.337413) (xy 45.29862 48.34487) (xy 45.303473 48.353888) (xy 45.334345 48.411259) (xy 45.335939 48.414436) (xy 45.366465 48.4799) (xy 45.366466 48.479902) (xy 45.366467 48.479903) (xy 45.385191 48.506645) (xy 45.388998 48.512823) (xy 45.405966 48.544354) (xy 45.405968 48.544357) (xy 45.45092 48.600724) (xy 45.453232 48.603816) (xy 45.492774 48.660287) (xy 45.492777 48.66029) (xy 45.518182 48.685695) (xy 45.522818 48.690882) (xy 45.547209 48.721467) (xy 45.599037 48.766748) (xy 45.60208 48.769593) (xy 45.648478 48.815992) (xy 45.648479 48.815993) (xy 45.648482 48.815995) (xy 45.648485 48.815998) (xy 45.68001 48.838071) (xy 45.680632 48.838507) (xy 45.685864 48.842606) (xy 45.717805 48.870512) (xy 45.774058 48.904121) (xy 45.777781 48.906532) (xy 45.814273 48.932084) (xy 45.828861 48.9423) (xy 45.828864 48.942301) (xy 45.828869 48.942305) (xy 45.867433 48.960287) (xy 45.873016 48.963246) (xy 45.912273 48.986702) (xy 45.970533 49.008566) (xy 45.974945 49.01042) (xy 46.028447 49.035369) (xy 46.072727 49.047233) (xy 46.078462 49.049073) (xy 46.107879 49.060113) (xy 46.124362 49.0663) (xy 46.182336 49.07682) (xy 46.187301 49.077934) (xy 46.241152 49.092364) (xy 46.290125 49.096648) (xy 46.295773 49.097406) (xy 46.334875 49.104502) (xy 46.347255 49.106749) (xy 46.347256 49.106749) (xy 46.402871 49.106749) (xy 46.408272 49.106984) (xy 46.436893 49.109488) (xy 46.460521 49.111556) (xy 46.460522 49.111556) (xy 46.460522 49.111555) (xy 46.460523 49.111556) (xy 46.513833 49.106892) (xy 46.517027 49.106749) (xy 46.517045 49.106749) (xy 46.565148 49.102418) (xy 46.571914 49.10181) (xy 46.679876 49.092366) (xy 46.67988 49.092365) (xy 46.679894 49.092364) (xy 46.679906 49.09236) (xy 46.680425 49.092269) (xy 46.685659 49.091573) (xy 46.686145 49.09153) (xy 46.790858 49.06263) (xy 46.892599 49.035369) (xy 46.892612 49.035362) (xy 46.899552 49.032837) (xy 46.904243 49.031338) (xy 46.904516 49.031263) (xy 46.999542 48.9855) (xy 47.092177 48.942305) (xy 47.092186 48.942298) (xy 47.096873 48.939594) (xy 47.096944 48.939717) (xy 47.107729 48.933401) (xy 47.108616 48.932974) (xy 47.191391 48.872834) (xy 47.272561 48.815998) (xy 47.273474 48.815084) (xy 47.288275 48.802442) (xy 47.291886 48.79982) (xy 47.323513 48.766741) (xy 47.360425 48.728133) (xy 47.428269 48.66029) (xy 47.428269 48.660289) (xy 47.428272 48.660287) (xy 47.430999 48.656391) (xy 47.442951 48.641817) (xy 47.448435 48.636083) (xy 47.501332 48.555946) (xy 47.554579 48.479903) (xy 47.558061 48.472434) (xy 47.566959 48.456525) (xy 47.573232 48.447023) (xy 47.609739 48.361609) (xy 47.647643 48.280325) (xy 47.650668 48.269031) (xy 47.656419 48.252396) (xy 47.662266 48.238719) (xy 47.682234 48.151227) (xy 47.704638 48.06762) (xy 47.70633 48.048273) (xy 47.707649 48.039875) (xy 47.712674 48.017864) (xy 47.716559 47.931354) (xy 47.72383 47.848249) (xy 47.72383 47.848247) (xy 50.047216 47.848247) (xy 50.049195 47.870888) (xy 50.049369 47.879078) (xy 50.048207 47.904937) (xy 50.048208 47.904939) (xy 50.059214 47.986195) (xy 50.059539 47.989113) (xy 50.064344 48.04403) (xy 50.066408 48.06762) (xy 50.073147 48.092772) (xy 50.074697 48.100492) (xy 50.078616 48.129422) (xy 50.078619 48.129432) (xy 50.102936 48.204272) (xy 50.103857 48.207383) (xy 50.1234 48.280315) (xy 50.123404 48.280327) (xy 50.135798 48.306908) (xy 50.138574 48.313954) (xy 50.146197 48.337413) (xy 50.14862 48.34487) (xy 50.153473 48.353888) (xy 50.184345 48.411259) (xy 50.185939 48.414436) (xy 50.216465 48.4799) (xy 50.216466 48.479902) (xy 50.216467 48.479903) (xy 50.235191 48.506645) (xy 50.238998 48.512823) (xy 50.255966 48.544354) (xy 50.255968 48.544357) (xy 50.30092 48.600724) (xy 50.303232 48.603816) (xy 50.342774 48.660287) (xy 50.342777 48.66029) (xy 50.368182 48.685695) (xy 50.372818 48.690882) (xy 50.397209 48.721467) (xy 50.449037 48.766748) (xy 50.45208 48.769593) (xy 50.498478 48.815992) (xy 50.498479 48.815993) (xy 50.498482 48.815995) (xy 50.498485 48.815998) (xy 50.53001 48.838071) (xy 50.530632 48.838507) (xy 50.535864 48.842606) (xy 50.567805 48.870512) (xy 50.624058 48.904121) (xy 50.627781 48.906532) (xy 50.664273 48.932084) (xy 50.678861 48.9423) (xy 50.678864 48.942301) (xy 50.678869 48.942305) (xy 50.717433 48.960287) (xy 50.723016 48.963246) (xy 50.762273 48.986702) (xy 50.820533 49.008566) (xy 50.824945 49.01042) (xy 50.878447 49.035369) (xy 50.922727 49.047233) (xy 50.928462 49.049073) (xy 50.957879 49.060113) (xy 50.974362 49.0663) (xy 51.032336 49.07682) (xy 51.037301 49.077934) (xy 51.091152 49.092364) (xy 51.140125 49.096648) (xy 51.145773 49.097406) (xy 51.184875 49.104502) (xy 51.197255 49.106749) (xy 51.197256 49.106749) (xy 51.252871 49.106749) (xy 51.258272 49.106984) (xy 51.286893 49.109488) (xy 51.310521 49.111556) (xy 51.310522 49.111556) (xy 51.310522 49.111555) (xy 51.310523 49.111556) (xy 51.363833 49.106892) (xy 51.367027 49.106749) (xy 51.367045 49.106749) (xy 51.415148 49.102418) (xy 51.421914 49.10181) (xy 51.529876 49.092366) (xy 51.52988 49.092365) (xy 51.529894 49.092364) (xy 51.529906 49.09236) (xy 51.530425 49.092269) (xy 51.535659 49.091573) (xy 51.536145 49.09153) (xy 51.640858 49.06263) (xy 51.742599 49.035369) (xy 51.742612 49.035362) (xy 51.749552 49.032837) (xy 51.754243 49.031338) (xy 51.754516 49.031263) (xy 51.849542 48.9855) (xy 51.942177 48.942305) (xy 51.942186 48.942298) (xy 51.946873 48.939594) (xy 51.946944 48.939717) (xy 51.957729 48.933401) (xy 51.958616 48.932974) (xy 52.041391 48.872834) (xy 52.122561 48.815998) (xy 52.123474 48.815084) (xy 52.138275 48.802442) (xy 52.141886 48.79982) (xy 52.173513 48.766741) (xy 52.210425 48.728133) (xy 52.278269 48.66029) (xy 52.278269 48.660289) (xy 52.278272 48.660287) (xy 52.280999 48.656391) (xy 52.292951 48.641817) (xy 52.298435 48.636083) (xy 52.351332 48.555946) (xy 52.404579 48.479903) (xy 52.408061 48.472434) (xy 52.416959 48.456525) (xy 52.423232 48.447023) (xy 52.459739 48.361609) (xy 52.497643 48.280325) (xy 52.500668 48.269031) (xy 52.506419 48.252396) (xy 52.512266 48.238719) (xy 52.532234 48.151227) (xy 52.554638 48.06762) (xy 52.55633 48.048273) (xy 52.557649 48.039875) (xy 52.562674 48.017864) (xy 52.566559 47.931354) (xy 52.57383 47.848249) (xy 52.57185 47.825617) (xy 52.571676 47.817422) (xy 52.572838 47.791558) (xy 52.561828 47.710291) (xy 52.561504 47.707374) (xy 52.55831 47.670865) (xy 52.554638 47.628878) (xy 52.5479 47.603732) (xy 52.546348 47.596002) (xy 52.54297 47.571069) (xy 52.542429 47.567074) (xy 52.51811 47.492231) (xy 52.517194 47.489138) (xy 52.502953 47.43599) (xy 52.497646 47.416182) (xy 52.497642 47.416172) (xy 52.494535 47.409507) (xy 52.485245 47.389585) (xy 52.482471 47.382545) (xy 52.472426 47.351628) (xy 52.472425 47.351626) (xy 52.472422 47.351619) (xy 52.43669 47.285219) (xy 52.435105 47.28206) (xy 52.410015 47.228254) (xy 56.412367 47.228254) (xy 56.430957 47.452608) (xy 56.430959 47.45262) (xy 56.486226 47.670863) (xy 56.576663 47.877041) (xy 56.699799 48.065514) (xy 56.699807 48.065525) (xy 56.852279 48.231151) (xy 56.852284 48.231156) (xy 56.889994 48.260507) (xy 57.029947 48.369438) (xy 57.029948 48.369438) (xy 57.02995 48.36944) (xy 57.110125 48.412828) (xy 57.227949 48.476591) (xy 57.440888 48.549693) (xy 57.662954 48.586749) (xy 57.888092 48.586749) (xy 58.110158 48.549693) (xy 58.323097 48.476591) (xy 58.521099 48.369438) (xy 58.698763 48.231155) (xy 58.834442 48.08377) (xy 58.851238 48.065525) (xy 58.851239 48.065523) (xy 58.851245 48.065517) (xy 58.974383 47.87704) (xy 59.064819 47.670865) (xy 59.120087 47.452617) (xy 59.122171 47.427471) (xy 59.138679 47.228254) (xy 59.138679 47.228243) (xy 59.120088 47.003889) (xy 59.120086 47.003877) (xy 59.088843 46.880503) (xy 59.064819 46.785633) (xy 58.974383 46.579458) (xy 58.942153 46.530127) (xy 58.912814 46.485219) (xy 58.851245 46.390981) (xy 58.851242 46.390978) (xy 58.851238 46.390972) (xy 58.698766 46.225346) (xy 58.698761 46.225341) (xy 58.549954 46.109519) (xy 58.521099 46.08706) (xy 58.484593 46.067304) (xy 58.435002 46.018085) (xy 58.419894 45.949868) (xy 58.444064 45.884313) (xy 58.484593 45.849194) (xy 58.485419 45.848747) (xy 58.521099 45.829438) (xy 58.698763 45.691155) (xy 58.8077 45.572819) (xy 58.851238 45.525525) (xy 58.851239 45.525523) (xy 58.851245 45.525517) (xy 58.974383 45.33704) (xy 59.064819 45.130865) (xy 59.120087 44.912617) (xy 59.120608 44.906332) (xy 59.138679 44.688254) (xy 59.138679 44.688243) (xy 59.120088 44.463889) (xy 59.120086 44.463877) (xy 59.111174 44.428686) (xy 59.064819 44.245633) (xy 58.974383 44.039458) (xy 58.957496 44.013611) (xy 58.851246 43.850983) (xy 58.851238 43.850972) (xy 58.698766 43.685346) (xy 58.698761 43.685341) (xy 58.5211 43.547061) (xy 58.521095 43.547057) (xy 58.323103 43.43991) (xy 58.3231 43.439908) (xy 58.323097 43.439907) (xy 58.323094 43.439906) (xy 58.323092 43.439905) (xy 58.11016 43.366805) (xy 57.888092 43.329749) (xy 57.662954 43.329749) (xy 57.440885 43.366805) (xy 57.227953 43.439905) (xy 57.227942 43.43991) (xy 57.02995 43.547057) (xy 57.029945 43.547061) (xy 56.852284 43.685341) (xy 56.852279 43.685346) (xy 56.699807 43.850972) (xy 56.699799 43.850983) (xy 56.576663 44.039456) (xy 56.486226 44.245634) (xy 56.430959 44.463877) (xy 56.430957 44.463889) (xy 56.412367 44.688243) (xy 56.412367 44.688254) (xy 56.430957 44.912608) (xy 56.430959 44.91262) (xy 56.486226 45.130863) (xy 56.576663 45.337041) (xy 56.699799 45.525514) (xy 56.699807 45.525525) (xy 56.852279 45.691151) (xy 56.852284 45.691156) (xy 56.888387 45.719256) (xy 57.029947 45.829438) (xy 57.029952 45.82944) (xy 57.029954 45.829442) (xy 57.066453 45.849195) (xy 57.116043 45.898414) (xy 57.131151 45.966631) (xy 57.10698 46.032186) (xy 57.066453 46.067303) (xy 57.029954 46.087055) (xy 57.029945 46.087061) (xy 56.852284 46.225341) (xy 56.852279 46.225346) (xy 56.699807 46.390972) (xy 56.699799 46.390983) (xy 56.576663 46.579456) (xy 56.486226 46.785634) (xy 56.430959 47.003877) (xy 56.430957 47.003889) (xy 56.412367 47.228243) (xy 56.412367 47.228254) (xy 52.410015 47.228254) (xy 52.404579 47.216596) (xy 52.403166 47.214578) (xy 52.38586 47.189862) (xy 52.382046 47.183673) (xy 52.365078 47.152141) (xy 52.320117 47.095762) (xy 52.317802 47.092666) (xy 52.278273 47.036212) (xy 52.252863 47.010802) (xy 52.248225 47.005613) (xy 52.223835 46.975029) (xy 52.172014 46.929754) (xy 52.168965 46.926904) (xy 52.122562 46.8805) (xy 52.090414 46.85799) (xy 52.085179 46.85389) (xy 52.053241 46.825986) (xy 51.997009 46.792388) (xy 51.993248 46.789953) (xy 51.955503 46.763524) (xy 51.942177 46.754193) (xy 51.928463 46.747798) (xy 51.903623 46.736214) (xy 51.898024 46.733246) (xy 51.867224 46.714845) (xy 51.858773 46.709796) (xy 51.800511 46.68793) (xy 51.796111 46.686082) (xy 51.764416 46.671302) (xy 51.7426 46.661129) (xy 51.742588 46.661125) (xy 51.698316 46.649262) (xy 51.692576 46.647421) (xy 51.646683 46.630197) (xy 51.591478 46.620179) (xy 51.588714 46.619677) (xy 51.58374 46.618561) (xy 51.529895 46.604134) (xy 51.517893 46.603083) (xy 51.480926 46.599849) (xy 51.475264 46.599089) (xy 51.440521 46.592785) (xy 51.42379 46.589749) (xy 51.423789 46.589749) (xy 51.368175 46.589749) (xy 51.362773 46.589513) (xy 51.334152 46.587009) (xy 51.310525 46.584942) (xy 51.31052 46.584942) (xy 51.257251 46.589602) (xy 51.254012 46.589748) (xy 51.199131 46.594687) (xy 51.091141 46.604134) (xy 51.090564 46.604236) (xy 51.085412 46.604921) (xy 51.084909 46.604966) (xy 51.084892 46.604969) (xy 50.980187 46.633867) (xy 50.878441 46.66113) (xy 50.871467 46.663667) (xy 50.866791 46.665161) (xy 50.866545 46.665228) (xy 50.866534 46.665233) (xy 50.771487 46.711004) (xy 50.678875 46.75419) (xy 50.674181 46.7569) (xy 50.67411 46.756778) (xy 50.663347 46.763082) (xy 50.662431 46.763523) (xy 50.662425 46.763526) (xy 50.579642 46.823672) (xy 50.498481 46.880503) (xy 50.49755 46.881434) (xy 50.482787 46.894042) (xy 50.479164 46.896674) (xy 50.479154 46.896683) (xy 50.41062 46.968364) (xy 50.34277 47.036215) (xy 50.342769 47.036216) (xy 50.340029 47.040129) (xy 50.328104 47.054668) (xy 50.322612 47.060412) (xy 50.322608 47.060418) (xy 50.269706 47.140562) (xy 50.216466 47.216596) (xy 50.216464 47.216601) (xy 50.212985 47.224061) (xy 50.204099 47.239951) (xy 50.197815 47.249471) (xy 50.197814 47.249473) (xy 50.161303 47.334893) (xy 50.123405 47.416166) (xy 50.123403 47.416172) (xy 50.120375 47.427471) (xy 50.114626 47.444099) (xy 50.11099 47.452608) (xy 50.108782 47.457774) (xy 50.108779 47.457782) (xy 50.088811 47.54527) (xy 50.066408 47.628875) (xy 50.066407 47.628881) (xy 50.064715 47.648219) (xy 50.063396 47.656615) (xy 50.058372 47.678634) (xy 50.054486 47.765143) (xy 50.047216 47.848245) (xy 50.047216 47.848247) (xy 47.72383 47.848247) (xy 47.72185 47.825617) (xy 47.721676 47.817422) (xy 47.722838 47.791558) (xy 47.711828 47.710291) (xy 47.711504 47.707374) (xy 47.70831 47.670865) (xy 47.704638 47.628878) (xy 47.6979 47.603732) (xy 47.696348 47.596002) (xy 47.69297 47.571069) (xy 47.692429 47.567074) (xy 47.66811 47.492231) (xy 47.667194 47.489138) (xy 47.652953 47.43599) (xy 47.647646 47.416182) (xy 47.647642 47.416172) (xy 47.644535 47.409507) (xy 47.635245 47.389585) (xy 47.632471 47.382545) (xy 47.622426 47.351628) (xy 47.622425 47.351626) (xy 47.622422 47.351619) (xy 47.58669 47.285219) (xy 47.585105 47.28206) (xy 47.554579 47.216596) (xy 47.553166 47.214578) (xy 47.53586 47.189862) (xy 47.532046 47.183673) (xy 47.515078 47.152141) (xy 47.470117 47.095762) (xy 47.467802 47.092666) (xy 47.428273 47.036212) (xy 47.402863 47.010802) (xy 47.398225 47.005613) (xy 47.373835 46.975029) (xy 47.322014 46.929754) (xy 47.318965 46.926904) (xy 47.272562 46.8805) (xy 47.240414 46.85799) (xy 47.235179 46.85389) (xy 47.203241 46.825986) (xy 47.147009 46.792388) (xy 47.143248 46.789953) (xy 47.105503 46.763524) (xy 47.092177 46.754193) (xy 47.078463 46.747798) (xy 47.053623 46.736214) (xy 47.048024 46.733246) (xy 47.017224 46.714845) (xy 47.008773 46.709796) (xy 46.950511 46.68793) (xy 46.946111 46.686082) (xy 46.914416 46.671302) (xy 46.8926 46.661129) (xy 46.892588 46.661125) (xy 46.848316 46.649262) (xy 46.842576 46.647421) (xy 46.796683 46.630197) (xy 46.741478 46.620179) (xy 46.738714 46.619677) (xy 46.73374 46.618561) (xy 46.679895 46.604134) (xy 46.667893 46.603083) (xy 46.630926 46.599849) (xy 46.625264 46.599089) (xy 46.590521 46.592785) (xy 46.57379 46.589749) (xy 46.573789 46.589749) (xy 46.518175 46.589749) (xy 46.512773 46.589513) (xy 46.484152 46.587009) (xy 46.460525 46.584942) (xy 46.46052 46.584942) (xy 46.407251 46.589602) (xy 46.404012 46.589748) (xy 46.349131 46.594687) (xy 46.241141 46.604134) (xy 46.240564 46.604236) (xy 46.235412 46.604921) (xy 46.234909 46.604966) (xy 46.234892 46.604969) (xy 46.130187 46.633867) (xy 46.028441 46.66113) (xy 46.021467 46.663667) (xy 46.016791 46.665161) (xy 46.016545 46.665228) (xy 46.016534 46.665233) (xy 45.921487 46.711004) (xy 45.828875 46.75419) (xy 45.824181 46.7569) (xy 45.82411 46.756778) (xy 45.813347 46.763082) (xy 45.812431 46.763523) (xy 45.812425 46.763526) (xy 45.729642 46.823672) (xy 45.648481 46.880503) (xy 45.64755 46.881434) (xy 45.632787 46.894042) (xy 45.629164 46.896674) (xy 45.629154 46.896683) (xy 45.56062 46.968364) (xy 45.49277 47.036215) (xy 45.492769 47.036216) (xy 45.490029 47.040129) (xy 45.478104 47.054668) (xy 45.472612 47.060412) (xy 45.472608 47.060418) (xy 45.419706 47.140562) (xy 45.366466 47.216596) (xy 45.366464 47.216601) (xy 45.362985 47.224061) (xy 45.354099 47.239951) (xy 45.347815 47.249471) (xy 45.347814 47.249473) (xy 45.311303 47.334893) (xy 45.273405 47.416166) (xy 45.273403 47.416172) (xy 45.270375 47.427471) (xy 45.264626 47.444099) (xy 45.26099 47.452608) (xy 45.258782 47.457774) (xy 45.258779 47.457782) (xy 45.238811 47.54527) (xy 45.216408 47.628875) (xy 45.216407 47.628881) (xy 45.214715 47.648219) (xy 45.213396 47.656615) (xy 45.208372 47.678634) (xy 45.204486 47.765143) (xy 45.197216 47.848245) (xy 45.197216 47.848247) (xy 41.207013 47.848247) (xy 41.284819 47.670865) (xy 41.340087 47.452617) (xy 41.342171 47.427471) (xy 41.358679 47.228254) (xy 41.358679 47.228243) (xy 41.340088 47.003889) (xy 41.340086 47.003877) (xy 41.308843 46.880503) (xy 41.284819 46.785633) (xy 41.194383 46.579458) (xy 41.162153 46.530127) (xy 41.132814 46.485219) (xy 41.071245 46.390981) (xy 41.071242 46.390978) (xy 41.071238 46.390972) (xy 40.918766 46.225346) (xy 40.918761 46.225341) (xy 40.769954 46.109519) (xy 40.741099 46.08706) (xy 40.704593 46.067304) (xy 40.655002 46.018085) (xy 40.639894 45.949868) (xy 40.664064 45.884313) (xy 40.704593 45.849194) (xy 40.705419 45.848747) (xy 40.741099 45.829438) (xy 40.918763 45.691155) (xy 41.0277 45.572819) (xy 41.071238 45.525525) (xy 41.071239 45.525523) (xy 41.071245 45.525517) (xy 41.194383 45.33704) (xy 41.284819 45.130865) (xy 41.340087 44.912617) (xy 41.340608 44.906332) (xy 41.347907 44.818249) (xy 44.747196 44.818249) (xy 44.751513 44.87035) (xy 44.754494 44.906332) (xy 44.758379 44.997792) (xy 44.75838 44.997801) (xy 44.763533 45.02171) (xy 44.764713 45.029659) (xy 44.76647 45.050866) (xy 44.766472 45.050878) (xy 44.78894 45.139602) (xy 44.808893 45.232184) (xy 44.81678 45.25181) (xy 44.819357 45.259715) (xy 44.823774 45.277156) (xy 44.861808 45.363865) (xy 44.89829 45.454653) (xy 44.907652 45.469857) (xy 44.91164 45.477469) (xy 44.917538 45.490917) (xy 44.971047 45.572819) (xy 45.023996 45.658814) (xy 45.023998 45.658817) (xy 45.023999 45.658818) (xy 45.030654 45.66638) (xy 45.030681 45.66641) (xy 45.041409 45.680516) (xy 45.045205 45.686326) (xy 45.045209 45.686332) (xy 45.113602 45.760626) (xy 45.182405 45.838801) (xy 45.182406 45.838802) (xy 45.187593 45.84299) (xy 45.20093 45.855489) (xy 45.203306 45.858071) (xy 45.254639 45.898024) (xy 45.285471 45.922021) (xy 45.332554 45.960038) (xy 45.368944 45.989422) (xy 45.368945 45.989422) (xy 45.368947 45.989424) (xy 45.371688 45.990955) (xy 45.371763 45.990997) (xy 45.387457 46.001401) (xy 45.387502 46.001436) (xy 45.387514 46.001444) (xy 45.444322 46.032186) (xy 45.481869 46.052505) (xy 45.578263 46.106354) (xy 45.578268 46.106355) (xy 45.578272 46.106358) (xy 45.580663 46.107439) (xy 45.588 46.110697) (xy 45.588098 46.110475) (xy 45.592785 46.11253) (xy 45.592796 46.112536) (xy 45.697263 46.1484) (xy 45.804329 46.186229) (xy 45.80489 46.186325) (xy 45.809632 46.18733) (xy 45.813566 46.188327) (xy 45.813572 46.188329) (xy 45.925618 46.207026) (xy 46.040633 46.226748) (xy 46.040642 46.226749) (xy 46.27723 46.226749) (xy 46.277235 46.226749) (xy 46.310171 46.221252) (xy 46.333998 46.217277) (xy 46.338936 46.216655) (xy 46.392464 46.2121) (xy 46.39941 46.211509) (xy 46.399411 46.211508) (xy 46.399421 46.211508) (xy 46.45182 46.197863) (xy 46.457191 46.196718) (xy 46.507474 46.188329) (xy 46.565025 46.168571) (xy 46.569498 46.167222) (xy 46.631447 46.151093) (xy 46.677782 46.130147) (xy 46.683156 46.128016) (xy 46.72825 46.112536) (xy 46.784655 46.08201) (xy 46.788577 46.080065) (xy 46.849925 46.052335) (xy 46.889318 46.025708) (xy 46.894502 46.022563) (xy 46.933531 46.001444) (xy 46.933535 46.001442) (xy 46.933536 46.001441) (xy 46.93354 46.001439) (xy 46.986751 45.960021) (xy 46.990084 45.957602) (xy 47.04857 45.918074) (xy 47.080524 45.887447) (xy 47.085312 45.883307) (xy 47.117743 45.858067) (xy 47.165642 45.806033) (xy 47.168317 45.803305) (xy 47.221667 45.752174) (xy 47.24602 45.719245) (xy 47.25025 45.714126) (xy 47.256019 45.70786) (xy 47.275837 45.686332) (xy 47.316308 45.624384) (xy 47.318358 45.621438) (xy 47.324968 45.612501) (xy 47.364238 45.559406) (xy 47.381199 45.525763) (xy 47.384637 45.519798) (xy 47.403507 45.490918) (xy 47.434565 45.42011) (xy 47.435936 45.417199) (xy 47.47218 45.345316) (xy 47.482244 45.312449) (xy 47.484744 45.305715) (xy 47.497272 45.277156) (xy 47.517058 45.199019) (xy 47.517857 45.196158) (xy 47.542387 45.116064) (xy 47.546333 45.085243) (xy 47.547721 45.077933) (xy 47.554574 45.050875) (xy 47.561613 44.965921) (xy 47.572841 44.878244) (xy 47.571662 44.850498) (xy 47.571817 44.842774) (xy 47.57385 44.818249) (xy 50.197196 44.818249) (xy 50.201513 44.87035) (xy 50.204494 44.906332) (xy 50.208379 44.997792) (xy 50.20838 44.997801) (xy 50.213533 45.02171) (xy 50.214713 45.029659) (xy 50.21647 45.050866) (xy 50.216472 45.050878) (xy 50.23894 45.139602) (xy 50.258893 45.232184) (xy 50.26678 45.25181) (xy 50.269357 45.259715) (xy 50.273774 45.277156) (xy 50.311808 45.363865) (xy 50.34829 45.454653) (xy 50.357652 45.469857) (xy 50.36164 45.477469) (xy 50.367538 45.490917) (xy 50.421047 45.572819) (xy 50.473996 45.658814) (xy 50.473998 45.658817) (xy 50.473999 45.658818) (xy 50.480654 45.66638) (xy 50.480681 45.66641) (xy 50.491409 45.680516) (xy 50.495205 45.686326) (xy 50.495209 45.686332) (xy 50.563602 45.760626) (xy 50.632405 45.838801) (xy 50.632406 45.838802) (xy 50.637593 45.84299) (xy 50.65093 45.855489) (xy 50.653306 45.858071) (xy 50.704639 45.898024) (xy 50.735471 45.922021) (xy 50.782554 45.960038) (xy 50.818944 45.989422) (xy 50.818945 45.989422) (xy 50.818947 45.989424) (xy 50.821688 45.990955) (xy 50.821763 45.990997) (xy 50.837457 46.001401) (xy 50.837502 46.001436) (xy 50.837514 46.001444) (xy 50.894322 46.032186) (xy 50.931869 46.052505) (xy 51.028263 46.106354) (xy 51.028268 46.106355) (xy 51.028272 46.106358) (xy 51.030663 46.107439) (xy 51.038 46.110697) (xy 51.038098 46.110475) (xy 51.042785 46.11253) (xy 51.042796 46.112536) (xy 51.147263 46.1484) (xy 51.254329 46.186229) (xy 51.25489 46.186325) (xy 51.259632 46.18733) (xy 51.263566 46.188327) (xy 51.263572 46.188329) (xy 51.375618 46.207026) (xy 51.490633 46.226748) (xy 51.490642 46.226749) (xy 51.72723 46.226749) (xy 51.727235 46.226749) (xy 51.760171 46.221252) (xy 51.783998 46.217277) (xy 51.788936 46.216655) (xy 51.842464 46.2121) (xy 51.84941 46.211509) (xy 51.849411 46.211508) (xy 51.849421 46.211508) (xy 51.90182 46.197863) (xy 51.907191 46.196718) (xy 51.957474 46.188329) (xy 52.015025 46.168571) (xy 52.019498 46.167222) (xy 52.081447 46.151093) (xy 52.127782 46.130147) (xy 52.133156 46.128016) (xy 52.17825 46.112536) (xy 52.234655 46.08201) (xy 52.238577 46.080065) (xy 52.299925 46.052335) (xy 52.339318 46.025708) (xy 52.344502 46.022563) (xy 52.383531 46.001444) (xy 52.383535 46.001442) (xy 52.383536 46.001441) (xy 52.38354 46.001439) (xy 52.436751 45.960021) (xy 52.440084 45.957602) (xy 52.49857 45.918074) (xy 52.530524 45.887447) (xy 52.535312 45.883307) (xy 52.567743 45.858067) (xy 52.615642 45.806033) (xy 52.618317 45.803305) (xy 52.671667 45.752174) (xy 52.69602 45.719245) (xy 52.70025 45.714126) (xy 52.706019 45.70786) (xy 52.725837 45.686332) (xy 52.766308 45.624384) (xy 52.768358 45.621438) (xy 52.774968 45.612501) (xy 52.814238 45.559406) (xy 52.831199 45.525763) (xy 52.834637 45.519798) (xy 52.853507 45.490918) (xy 52.884565 45.42011) (xy 52.885936 45.417199) (xy 52.92218 45.345316) (xy 52.932244 45.312449) (xy 52.934744 45.305715) (xy 52.947272 45.277156) (xy 52.967058 45.199019) (xy 52.967857 45.196158) (xy 52.992387 45.116064) (xy 52.996333 45.085243) (xy 52.997721 45.077933) (xy 53.004574 45.050875) (xy 53.011613 44.965921) (xy 53.022841 44.878244) (xy 53.021662 44.850498) (xy 53.021817 44.842774) (xy 53.02385 44.818249) (xy 53.022143 44.797652) (xy 53.016551 44.730165) (xy 53.012667 44.638709) (xy 53.012666 44.638706) (xy 53.012666 44.638698) (xy 53.00751 44.614779) (xy 53.006331 44.606835) (xy 53.004574 44.585623) (xy 52.982105 44.496895) (xy 52.962153 44.404317) (xy 52.954258 44.384673) (xy 52.95169 44.376793) (xy 52.947272 44.359342) (xy 52.909237 44.272632) (xy 52.89635 44.240562) (xy 52.872757 44.181847) (xy 52.865529 44.170109) (xy 52.86339 44.166635) (xy 52.859405 44.159027) (xy 52.858625 44.157249) (xy 52.853507 44.14558) (xy 52.799998 44.063678) (xy 52.76824 44.012099) (xy 52.747052 43.977688) (xy 52.747051 43.977687) (xy 52.747047 43.97768) (xy 52.747041 43.977673) (xy 52.747038 43.977669) (xy 52.740362 43.970083) (xy 52.729641 43.955988) (xy 52.725838 43.950168) (xy 52.725837 43.950166) (xy 52.657443 43.875871) (xy 52.588642 43.797698) (xy 52.588641 43.797697) (xy 52.588637 43.797693) (xy 52.583452 43.793507) (xy 52.57012 43.781014) (xy 52.567743 43.778431) (xy 52.485574 43.714476) (xy 52.402099 43.647074) (xy 52.402097 43.647072) (xy 52.402091 43.647068) (xy 52.399273 43.645494) (xy 52.383593 43.6351) (xy 52.383543 43.635061) (xy 52.383541 43.63506) (xy 52.38354 43.635059) (xy 52.289176 43.583992) (xy 52.236345 43.554479) (xy 52.192782 43.530143) (xy 52.190522 43.529122) (xy 52.183042 43.5258) (xy 52.182945 43.526022) (xy 52.178248 43.523961) (xy 52.073782 43.488097) (xy 51.96672 43.45027) (xy 51.966719 43.450269) (xy 51.966717 43.450269) (xy 51.966715 43.450268) (xy 51.966706 43.450266) (xy 51.966156 43.450172) (xy 51.961436 43.449171) (xy 51.957489 43.448172) (xy 51.957476 43.448169) (xy 51.957474 43.448169) (xy 51.845427 43.429471) (xy 51.730413 43.409749) (xy 51.730404 43.409749) (xy 51.727235 43.409749) (xy 51.493811 43.409749) (xy 51.49381 43.409749) (xy 51.437052 43.419219) (xy 51.43211 43.419841) (xy 51.398353 43.422714) (xy 51.371623 43.42499) (xy 51.37162 43.42499) (xy 51.319256 43.438625) (xy 51.313836 43.439781) (xy 51.263572 43.448168) (xy 51.206035 43.46792) (xy 51.201528 43.469278) (xy 51.156418 43.481025) (xy 51.139599 43.485405) (xy 51.139596 43.485406) (xy 51.139593 43.485407) (xy 51.093281 43.506341) (xy 51.087882 43.508482) (xy 51.073286 43.513493) (xy 51.042796 43.523961) (xy 50.986402 43.554479) (xy 50.982433 43.556447) (xy 50.92112 43.584163) (xy 50.921118 43.584164) (xy 50.881732 43.610784) (xy 50.876525 43.613942) (xy 50.864961 43.6202) (xy 50.837501 43.635061) (xy 50.784303 43.676467) (xy 50.780948 43.678902) (xy 50.750872 43.69923) (xy 50.722474 43.718425) (xy 50.722471 43.718428) (xy 50.690535 43.749035) (xy 50.685716 43.753201) (xy 50.653304 43.77843) (xy 50.653303 43.778431) (xy 50.605421 43.830442) (xy 50.602707 43.833211) (xy 50.54938 43.884322) (xy 50.525026 43.917248) (xy 50.520793 43.922372) (xy 50.495207 43.950167) (xy 50.495204 43.950171) (xy 50.454745 44.012099) (xy 50.452689 44.015055) (xy 50.40681 44.077088) (xy 50.406809 44.077089) (xy 50.389856 44.110712) (xy 50.386398 44.116712) (xy 50.367538 44.145581) (xy 50.336501 44.216338) (xy 50.335085 44.219345) (xy 50.298865 44.291182) (xy 50.298864 44.291183) (xy 50.288803 44.324035) (xy 50.286298 44.330786) (xy 50.273772 44.359343) (xy 50.273772 44.359344) (xy 50.253992 44.437452) (xy 50.253172 44.440386) (xy 50.22866 44.520427) (xy 50.228658 44.520439) (xy 50.224714 44.551235) (xy 50.223318 44.558584) (xy 50.216473 44.585616) (xy 50.216471 44.585628) (xy 50.209432 44.670576) (xy 50.198205 44.758252) (xy 50.198204 44.758253) (xy 50.199382 44.78598) (xy 50.199226 44.793734) (xy 50.197196 44.818244) (xy 50.197196 44.818249) (xy 47.57385 44.818249) (xy 47.572143 44.797652) (xy 47.566551 44.730165) (xy 47.562667 44.638709) (xy 47.562666 44.638706) (xy 47.562666 44.638698) (xy 47.55751 44.614779) (xy 47.556331 44.606835) (xy 47.554574 44.585623) (xy 47.532105 44.496895) (xy 47.512153 44.404317) (xy 47.504258 44.384673) (xy 47.50169 44.376793) (xy 47.497272 44.359342) (xy 47.459237 44.272632) (xy 47.44635 44.240562) (xy 47.422757 44.181847) (xy 47.415529 44.170109) (xy 47.41339 44.166635) (xy 47.409405 44.159027) (xy 47.408625 44.157249) (xy 47.403507 44.14558) (xy 47.349998 44.063678) (xy 47.31824 44.012099) (xy 47.297052 43.977688) (xy 47.297051 43.977687) (xy 47.297047 43.97768) (xy 47.297041 43.977673) (xy 47.297038 43.977669) (xy 47.290362 43.970083) (xy 47.279641 43.955988) (xy 47.275838 43.950168) (xy 47.275837 43.950166) (xy 47.207443 43.875871) (xy 47.138642 43.797698) (xy 47.138641 43.797697) (xy 47.138637 43.797693) (xy 47.133452 43.793507) (xy 47.12012 43.781014) (xy 47.117743 43.778431) (xy 47.035574 43.714476) (xy 46.952099 43.647074) (xy 46.952097 43.647072) (xy 46.952091 43.647068) (xy 46.949273 43.645494) (xy 46.933593 43.6351) (xy 46.933543 43.635061) (xy 46.933541 43.63506) (xy 46.93354 43.635059) (xy 46.839176 43.583992) (xy 46.786345 43.554479) (xy 46.742782 43.530143) (xy 46.740522 43.529122) (xy 46.733042 43.5258) (xy 46.732945 43.526022) (xy 46.728248 43.523961) (xy 46.623782 43.488097) (xy 46.51672 43.45027) (xy 46.516719 43.450269) (xy 46.516717 43.450269) (xy 46.516715 43.450268) (xy 46.516706 43.450266) (xy 46.516156 43.450172) (xy 46.511436 43.449171) (xy 46.507489 43.448172) (xy 46.507476 43.448169) (xy 46.507474 43.448169) (xy 46.395427 43.429471) (xy 46.280413 43.409749) (xy 46.280404 43.409749) (xy 46.277235 43.409749) (xy 46.043811 43.409749) (xy 46.04381 43.409749) (xy 45.987052 43.419219) (xy 45.98211 43.419841) (xy 45.948353 43.422714) (xy 45.921623 43.42499) (xy 45.92162 43.42499) (xy 45.869256 43.438625) (xy 45.863836 43.439781) (xy 45.813572 43.448168) (xy 45.756035 43.46792) (xy 45.751528 43.469278) (xy 45.706418 43.481025) (xy 45.689599 43.485405) (xy 45.689596 43.485406) (xy 45.689593 43.485407) (xy 45.643281 43.506341) (xy 45.637882 43.508482) (xy 45.623286 43.513493) (xy 45.592796 43.523961) (xy 45.536402 43.554479) (xy 45.532433 43.556447) (xy 45.47112 43.584163) (xy 45.471118 43.584164) (xy 45.431732 43.610784) (xy 45.426525 43.613942) (xy 45.414961 43.6202) (xy 45.387501 43.635061) (xy 45.334303 43.676467) (xy 45.330948 43.678902) (xy 45.300872 43.69923) (xy 45.272474 43.718425) (xy 45.272471 43.718428) (xy 45.240535 43.749035) (xy 45.235716 43.753201) (xy 45.203304 43.77843) (xy 45.203303 43.778431) (xy 45.155421 43.830442) (xy 45.152707 43.833211) (xy 45.09938 43.884322) (xy 45.075026 43.917248) (xy 45.070793 43.922372) (xy 45.045207 43.950167) (xy 45.045204 43.950171) (xy 45.004745 44.012099) (xy 45.002689 44.015055) (xy 44.95681 44.077088) (xy 44.956809 44.077089) (xy 44.939856 44.110712) (xy 44.936398 44.116712) (xy 44.917538 44.145581) (xy 44.886501 44.216338) (xy 44.885085 44.219345) (xy 44.848865 44.291182) (xy 44.848864 44.291183) (xy 44.838803 44.324035) (xy 44.836298 44.330786) (xy 44.823772 44.359343) (xy 44.823772 44.359344) (xy 44.803992 44.437452) (xy 44.803172 44.440386) (xy 44.77866 44.520427) (xy 44.778658 44.520439) (xy 44.774714 44.551235) (xy 44.773318 44.558584) (xy 44.766473 44.585616) (xy 44.766471 44.585628) (xy 44.759432 44.670576) (xy 44.748205 44.758252) (xy 44.748204 44.758253) (xy 44.749382 44.78598) (xy 44.749226 44.793734) (xy 44.747196 44.818244) (xy 44.747196 44.818249) (xy 41.347907 44.818249) (xy 41.358679 44.688254) (xy 41.358679 44.688243) (xy 41.340088 44.463889) (xy 41.340086 44.463877) (xy 41.331174 44.428686) (xy 41.284819 44.245633) (xy 41.194383 44.039458) (xy 41.177496 44.013611) (xy 41.071246 43.850983) (xy 41.071238 43.850972) (xy 40.918766 43.685346) (xy 40.918761 43.685341) (xy 40.7411 43.547061) (xy 40.741095 43.547057) (xy 40.543103 43.43991) (xy 40.5431 43.439908) (xy 40.543097 43.439907) (xy 40.543094 43.439906) (xy 40.543092 43.439905) (xy 40.33016 43.366805) (xy 40.108092 43.329749) (xy 39.882954 43.329749) (xy 39.660885 43.366805) (xy 39.447953 43.439905) (xy 39.447942 43.43991) (xy 39.24995 43.547057) (xy 39.249945 43.547061) (xy 39.072284 43.685341) (xy 39.072279 43.685346) (xy 38.919807 43.850972) (xy 38.919799 43.850983) (xy 38.796663 44.039456) (xy 38.706226 44.245634) (xy 38.650959 44.463877) (xy 38.650957 44.463889) (xy 38.632367 44.688243) (xy 38.632367 44.688254) (xy 38.650957 44.912608) (xy 38.650959 44.91262) (xy 38.706226 45.130863) (xy 38.796663 45.337041) (xy 38.919799 45.525514) (xy 38.919807 45.525525) (xy 39.072279 45.691151) (xy 39.072284 45.691156) (xy 39.108387 45.719256) (xy 39.249947 45.829438) (xy 39.249952 45.82944) (xy 39.249954 45.829442) (xy 39.286453 45.849195) (xy 39.336043 45.898414) (xy 39.351151 45.966631) (xy 39.32698 46.032186) (xy 39.286453 46.067303) (xy 39.249954 46.087055) (xy 39.249945 46.087061) (xy 39.072284 46.225341) (xy 39.072279 46.225346) (xy 38.919807 46.390972) (xy 38.919799 46.390983) (xy 38.796663 46.579456) (xy 38.706226 46.785634) (xy 38.650959 47.003877) (xy 38.650957 47.003889) (xy 38.632367 47.228243) (xy 38.632367 47.228254) (xy 33.798903 47.228254) (xy 33.798903 43.087159) (xy 33.799036 43.083104) (xy 33.815526 42.831457) (xy 33.816583 42.823417) (xy 33.865386 42.578057) (xy 33.867479 42.570244) (xy 33.947891 42.333351) (xy 33.950994 42.325861) (xy 34.019305 42.187338) (xy 34.061632 42.101504) (xy 34.065681 42.094491) (xy 34.20466 41.886493) (xy 34.209598 41.880056) (xy 34.374532 41.691982) (xy 34.380271 41.686244) (xy 34.568343 41.521308) (xy 34.574765 41.516379) (xy 34.782768 41.377394) (xy 34.789782 41.373344) (xy 35.014155 41.262695) (xy 35.021633 41.259599) (xy 35.258524 41.179185) (xy 35.266338 41.177091) (xy 35.511695 41.128286) (xy 35.519724 41.127229) (xy 35.601823 41.121848) (xy 35.771065 41.110757) (xy 35.775121 41.110624) (xy 35.781688 41.110624) (xy 65.092585 41.110624) ) ) ) (zone (net 61) (net_name "GND2") (layer "B.Cu") (tstamp 769796d0-bf36-436c-8f82-b45a68daa42e) (hatch edge 0.5) (priority 2) (connect_pads (clearance 0.508)) (min_thickness 0.25) (filled_areas_thickness no) (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5)) (polygon (pts (xy 68.072 41.072913) (xy 100.706855 41.010565) (xy 100.706855 115.57) (xy 68.072 115.57) ) ) (filled_polygon (layer "B.Cu") (pts (xy 98.691593 41.110757) (xy 98.943239 41.127247) (xy 98.951279 41.128304) (xy 99.196625 41.177104) (xy 99.204465 41.179205) (xy 99.367727 41.234624) (xy 99.441333 41.259609) (xy 99.448834 41.262716) (xy 99.673181 41.37335) (xy 99.680207 41.377406) (xy 99.710071 41.39736) (xy 99.888199 41.51638) (xy 99.894634 41.521318) (xy 100.082705 41.686251) (xy 100.088445 41.691992) (xy 100.253379 41.880061) (xy 100.258321 41.886502) (xy 100.397286 42.094479) (xy 100.401345 42.10151) (xy 100.511982 42.325861) (xy 100.515089 42.333362) (xy 100.595492 42.57023) (xy 100.597594 42.578072) (xy 100.646392 42.823409) (xy 100.647452 42.831459) (xy 100.66394 43.083058) (xy 100.664073 43.087113) (xy 100.664073 113.564339) (xy 100.66394 113.568394) (xy 100.647449 113.82004) (xy 100.64639 113.82809) (xy 100.597592 114.073424) (xy 100.59549 114.081267) (xy 100.515087 114.318135) (xy 100.51198 114.325636) (xy 100.401345 114.549983) (xy 100.397286 114.557014) (xy 100.258317 114.764997) (xy 100.253375 114.771438) (xy 100.088445 114.959505) (xy 100.082704 114.965246) (xy 99.894634 115.130178) (xy 99.888193 115.13512) (xy 99.680216 115.274085) (xy 99.673185 115.278144) (xy 99.448834 115.38878) (xy 99.441333 115.391887) (xy 99.204464 115.472291) (xy 99.196622 115.474392) (xy 98.951288 115.523189) (xy 98.943239 115.524249) (xy 98.691572 115.540742) (xy 98.687517 115.540875) (xy 68.196 115.540875) (xy 68.128961 115.52119) (xy 68.083206 115.468386) (xy 68.072 115.416875) (xy 68.072 104.284001) (xy 76.006891 104.284001) (xy 76.0273 104.569362) (xy 76.088109 104.848895) (xy 76.188091 105.116958) (xy 76.325191 105.368038) (xy 76.325196 105.368046) (xy 76.431882 105.510561) (xy 76.431883 105.510562) (xy 77.041438 104.901006) (xy 77.090348 104.979999) (xy 77.233931 105.137501) (xy 77.392388 105.257163) (xy 76.785436 105.864115) (xy 76.92796 105.970807) (xy 76.927961 105.970808) (xy 77.179042 106.107908) (xy 77.179041 106.107908) (xy 77.447104 106.20789) (xy 77.726637 106.268699) (xy 78.011999 106.289109) (xy 78.012001 106.289109) (xy 78.297362 106.268699) (xy 78.576895 106.20789) (xy 78.844958 106.107908) (xy 79.096047 105.970803) (xy 79.238561 105.864116) (xy 79.238562 105.864115) (xy 78.631611 105.257163) (xy 78.790069 105.137501) (xy 78.933652 104.979999) (xy 78.98256 104.901007) (xy 79.592115 105.510562) (xy 79.592116 105.510561) (xy 79.698803 105.368047) (xy 79.835908 105.116958) (xy 79.93589 104.848895) (xy 79.996699 104.569362) (xy 80.017109 104.284001) (xy 89.146891 104.284001) (xy 89.1673 104.569362) (xy 89.228109 104.848895) (xy 89.328091 105.116958) (xy 89.465191 105.368038) (xy 89.465196 105.368046) (xy 89.571882 105.510561) (xy 89.571883 105.510562) (xy 90.181438 104.901006) (xy 90.230348 104.979999) (xy 90.373931 105.137501) (xy 90.532388 105.257163) (xy 89.925436 105.864115) (xy 90.06796 105.970807) (xy 90.067961 105.970808) (xy 90.319042 106.107908) (xy 90.319041 106.107908) (xy 90.587104 106.20789) (xy 90.866637 106.268699) (xy 91.151999 106.289109) (xy 91.152001 106.289109) (xy 91.437362 106.268699) (xy 91.716895 106.20789) (xy 91.984958 106.107908) (xy 92.236047 105.970803) (xy 92.378561 105.864116) (xy 92.378562 105.864115) (xy 91.771611 105.257163) (xy 91.930069 105.137501) (xy 92.073652 104.979999) (xy 92.12256 104.901007) (xy 92.732115 105.510562) (xy 92.732116 105.510561) (xy 92.838803 105.368047) (xy 92.975908 105.116958) (xy 93.065869 104.875762) (xy 94.304381 104.875762) (xy 94.322971 105.100116) (xy 94.322973 105.100128) (xy 94.37824 105.318371) (xy 94.468677 105.524549) (xy 94.591813 105.713022) (xy 94.591821 105.713033) (xy 94.730904 105.864115) (xy 94.744297 105.878663) (xy 94.921961 106.016946) (xy 94.921962 106.016946) (xy 94.921964 106.016948) (xy 95.048672 106.085518) (xy 95.119963 106.124099) (xy 95.332902 106.197201) (xy 95.554968 106.234257) (xy 95.780106 106.234257) (xy 96.002172 106.197201) (xy 96.215111 106.124099) (xy 96.413113 106.016946) (xy 96.590777 105.878663) (xy 96.743259 105.713025) (xy 96.866397 105.524548) (xy 96.956833 105.318373) (xy 97.012101 105.100125) (xy 97.030693 104.875757) (xy 97.028467 104.848895) (xy 97.012102 104.651397) (xy 97.0121 104.651385) (xy 96.956833 104.433142) (xy 96.938156 104.390563) (xy 96.866397 104.226966) (xy 96.743259 104.038489) (xy 96.743256 104.038486) (xy 96.743252 104.03848) (xy 96.59078 103.872854) (xy 96.590775 103.872849) (xy 96.413114 103.734569) (xy 96.413109 103.734565) (xy 96.215117 103.627418) (xy 96.215114 103.627416) (xy 96.215111 103.627415) (xy 96.215108 103.627414) (xy 96.215106 103.627413) (xy 96.002174 103.554313) (xy 95.780106 103.517257) (xy 95.554968 103.517257) (xy 95.332899 103.554313) (xy 95.119967 103.627413) (xy 95.119956 103.627418) (xy 94.921964 103.734565) (xy 94.921959 103.734569) (xy 94.744298 103.872849) (xy 94.744293 103.872854) (xy 94.591821 104.03848) (xy 94.591813 104.038491) (xy 94.468677 104.226964) (xy 94.37824 104.433142) (xy 94.322973 104.651385) (xy 94.322971 104.651397) (xy 94.304381 104.875751) (xy 94.304381 104.875762) (xy 93.065869 104.875762) (xy 93.07589 104.848895) (xy 93.136699 104.569362) (xy 93.157109 104.284001) (xy 93.157109 104.283998) (xy 93.136699 103.998637) (xy 93.07589 103.719104) (xy 92.975908 103.451041) (xy 92.838808 103.199961) (xy 92.838807 103.19996) (xy 92.732115 103.057436) (xy 92.12256 103.666991) (xy 92.073652 103.588001) (xy 91.930069 103.430499) (xy 91.77161 103.310835) (xy 92.378562 102.703883) (xy 92.378561 102.703882) (xy 92.236046 102.597196) (xy 92.236038 102.597191) (xy 91.984957 102.460091) (xy 91.984958 102.460091) (xy 91.716895 102.360109) (xy 91.437362 102.2993) (xy 91.152001 102.278891) (xy 91.151999 102.278891) (xy 90.866637 102.2993) (xy 90.587104 102.360109) (xy 90.319041 102.460091) (xy 90.067961 102.597191) (xy 90.067953 102.597196) (xy 89.925437 102.703882) (xy 89.925436 102.703883) (xy 90.532389 103.310835) (xy 90.373931 103.430499) (xy 90.230348 103.588001) (xy 90.181439 103.666992) (xy 89.571883 103.057436) (xy 89.571882 103.057437) (xy 89.465196 103.199953) (xy 89.465191 103.199961) (xy 89.328091 103.451041) (xy 89.228109 103.719104) (xy 89.1673 103.998637) (xy 89.146891 104.283998) (xy 89.146891 104.284001) (xy 80.017109 104.284001) (xy 80.017109 104.283998) (xy 79.996699 103.998637) (xy 79.93589 103.719104) (xy 79.835908 103.451041) (xy 79.698808 103.199961) (xy 79.698807 103.19996) (xy 79.592115 103.057436) (xy 78.98256 103.666991) (xy 78.933652 103.588001) (xy 78.790069 103.430499) (xy 78.63161 103.310835) (xy 79.238562 102.703883) (xy 79.238561 102.703882) (xy 79.096046 102.597196) (xy 79.096038 102.597191) (xy 78.844957 102.460091) (xy 78.844958 102.460091) (xy 78.61053 102.372654) (xy 79.7735 102.372654) (xy 79.780011 102.433202) (xy 79.780011 102.433204) (xy 79.831111 102.570203) (xy 79.831111 102.570204) (xy 79.918739 102.687261) (xy 80.035796 102.774889) (xy 80.172799 102.825989) (xy 80.20005 102.828918) (xy 80.233345 102.832499) (xy 80.233362 102.8325) (xy 81.930638 102.8325) (xy 81.930654 102.832499) (xy 81.957692 102.829591) (xy 81.991201 102.825989) (xy 82.128204 102.774889) (xy 82.245261 102.687261) (xy 82.332889 102.570204) (xy 82.346586 102.53348) (xy 82.372717 102.463424) (xy 82.414588 102.40749) (xy 82.480053 102.383074) (xy 82.548326 102.397926) (xy 82.576579 102.419077) (xy 82.7377 102.580198) (xy 82.925251 102.711523) (xy 83.050091 102.769736) (xy 83.13275 102.808281) (xy 83.132752 102.808281) (xy 83.132757 102.808284) (xy 83.353913 102.867543) (xy 83.516832 102.881796) (xy 83.581998 102.887498) (xy 83.582 102.887498) (xy 83.582002 102.887498) (xy 83.639021 102.882509) (xy 83.810087 102.867543) (xy 84.031243 102.808284) (xy 84.238749 102.711523) (xy 84.4263 102.580198) (xy 84.494319 102.512179) (xy 84.555642 102.478694) (xy 84.625334 102.483678) (xy 84.669681 102.512179) (xy 84.7377 102.580198) (xy 84.925251 102.711523) (xy 85.050091 102.769736) (xy 85.13275 102.808281) (xy 85.132752 102.808281) (xy 85.132757 102.808284) (xy 85.353913 102.867543) (xy 85.516832 102.881796) (xy 85.581998 102.887498) (xy 85.582 102.887498) (xy 85.582002 102.887498) (xy 85.639021 102.882509) (xy 85.810087 102.867543) (xy 86.031243 102.808284) (xy 86.238749 102.711523) (xy 86.4263 102.580198) (xy 86.588198 102.4183) (xy 86.719523 102.230749) (xy 86.724307 102.220487) (xy 86.770476 102.168051) (xy 86.837669 102.148897) (xy 86.904551 102.169111) (xy 86.949072 102.22049) (xy 86.951866 102.226483) (xy 87.002973 102.299471) (xy 87.002974 102.299472) (xy 87.619064 101.683381) (xy 87.645481 101.773351) (xy 87.719327 101.888258) (xy 87.822555 101.977705) (xy 87.946801 102.034446) (xy 87.971548 102.038004) (xy 87.356526 102.653025) (xy 87.356526 102.653026) (xy 87.429512 102.704131) (xy 87.429516 102.704133) (xy 87.635673 102.800265) (xy 87.635682 102.800269) (xy 87.855389 102.859139) (xy 87.8554 102.859141) (xy 88.081998 102.878966) (xy 88.082002 102.878966) (xy 88.308599 102.859141) (xy 88.30861 102.859139) (xy 88.528317 102.800269) (xy 88.528331 102.800264) (xy 88.734478 102.704136) (xy 88.807472 102.653025) (xy 88.192451 102.038004) (xy 88.217199 102.034446) (xy 88.341445 101.977705) (xy 88.444673 101.888258) (xy 88.518519 101.773351) (xy 88.544935 101.683382) (xy 89.161025 102.299472) (xy 89.212136 102.226478) (xy 89.308264 102.020331) (xy 89.308269 102.020317) (xy 89.367139 101.80061) (xy 89.367141 101.800599) (xy 89.386966 101.574002) (xy 89.386966 101.573997) (xy 89.367141 101.3474) (xy 89.367139 101.347389) (xy 89.308269 101.127682) (xy 89.308265 101.127673) (xy 89.212133 100.921516) (xy 89.212131 100.921512) (xy 89.161026 100.848526) (xy 89.161025 100.848526) (xy 88.544935 101.464616) (xy 88.518519 101.374649) (xy 88.444673 101.259742) (xy 88.341445 101.170295) (xy 88.217199 101.113554) (xy 88.192451 101.109995) (xy 88.608035 100.694411) (xy 94.309037 100.694411) (xy 94.315548 100.754959) (xy 94.315548 100.754961) (xy 94.366648 100.891961) (xy 94.454276 101.009018) (xy 94.571333 101.096646) (xy 94.708336 101.147746) (xy 94.735587 101.150675) (xy 94.768882 101.154256) (xy 94.768899 101.154257) (xy 96.566175 101.154257) (xy 96.566191 101.154256) (xy 96.593229 101.151348) (xy 96.626738 101.147746) (xy 96.763741 101.096646) (xy 96.880798 101.009018) (xy 96.968426 100.891961) (xy 97.019526 100.754958) (xy 97.023763 100.715551) (xy 97.026036 100.694411) (xy 97.026037 100.694394) (xy 97.026037 98.897119) (xy 97.026036 98.897102) (xy 97.022694 98.866027) (xy 97.019526 98.836556) (xy 96.968426 98.699553) (xy 96.880798 98.582496) (xy 96.763741 98.494868) (xy 96.62674 98.443768) (xy 96.566191 98.437257) (xy 96.566175 98.437257) (xy 94.768899 98.437257) (xy 94.768882 98.437257) (xy 94.708334 98.443768) (xy 94.708332 98.443768) (xy 94.571332 98.494868) (xy 94.454276 98.582496) (xy 94.366648 98.699552) (xy 94.315548 98.836552) (xy 94.315548 98.836554) (xy 94.309037 98.897102) (xy 94.309037 100.694411) (xy 88.608035 100.694411) (xy 88.807472 100.494974) (xy 88.807471 100.494973) (xy 88.734483 100.443866) (xy 88.734481 100.443865) (xy 88.528326 100.347734) (xy 88.528317 100.34773) (xy 88.30861 100.28886) (xy 88.308599 100.288858) (xy 88.082002 100.269034) (xy 88.081998 100.269034) (xy 87.8554 100.288858) (xy 87.855389 100.28886) (xy 87.635682 100.34773) (xy 87.635673 100.347734) (xy 87.429513 100.443868) (xy 87.356527 100.494972) (xy 87.356526 100.494973) (xy 87.971549 101.109995) (xy 87.946801 101.113554) (xy 87.822555 101.170295) (xy 87.719327 101.259742) (xy 87.645481 101.374649) (xy 87.619064 101.464617) (xy 87.002973 100.848526) (xy 87.002972 100.848527) (xy 86.951867 100.921513) (xy 86.94907 100.927513) (xy 86.902897 100.979951) (xy 86.835703 100.999102) (xy 86.768822 100.978885) (xy 86.724307 100.927511) (xy 86.719523 100.917251) (xy 86.588198 100.7297) (xy 86.4263 100.567802) (xy 86.238749 100.436477) (xy 86.238745 100.436475) (xy 86.031249 100.339718) (xy 86.031238 100.339714) (xy 85.810089 100.280457) (xy 85.810081 100.280456) (xy 85.582002 100.260502) (xy 85.581998 100.260502) (xy 85.353918 100.280456) (xy 85.35391 100.280457) (xy 85.132761 100.339714) (xy 85.13275 100.339718) (xy 84.925254 100.436475) (xy 84.925252 100.436476) (xy 84.890601 100.460739) (xy 84.7377 100.567802) (xy 84.737698 100.567803) (xy 84.737695 100.567806) (xy 84.669681 100.635821) (xy 84.608358 100.669306) (xy 84.538666 100.664322) (xy 84.494319 100.635821) (xy 84.426304 100.567806) (xy 84.4263 100.567802) (xy 84.238749 100.436477) (xy 84.238745 100.436475) (xy 84.031249 100.339718) (xy 84.031238 100.339714) (xy 83.810089 100.280457) (xy 83.810081 100.280456) (xy 83.582002 100.260502) (xy 83.581998 100.260502) (xy 83.353918 100.280456) (xy 83.35391 100.280457) (xy 83.132761 100.339714) (xy 83.13275 100.339718) (xy 82.925254 100.436475) (xy 82.925252 100.436476) (xy 82.737699 100.567803) (xy 82.576579 100.728923) (xy 82.515256 100.762407) (xy 82.445564 100.757423) (xy 82.389631 100.715551) (xy 82.372717 100.684576) (xy 82.351544 100.627813) (xy 82.332889 100.577796) (xy 82.245261 100.460739) (xy 82.128204 100.373111) (xy 81.991203 100.322011) (xy 81.930654 100.3155) (xy 81.930638 100.3155) (xy 80.233362 100.3155) (xy 80.233345 100.3155) (xy 80.172797 100.322011) (xy 80.172795 100.322011) (xy 80.035795 100.373111) (xy 79.918739 100.460739) (xy 79.831111 100.577795) (xy 79.780011 100.714795) (xy 79.780011 100.714797) (xy 79.7735 100.775345) (xy 79.7735 102.372654) (xy 78.61053 102.372654) (xy 78.576895 102.360109) (xy 78.297362 102.2993) (xy 78.012001 102.278891) (xy 78.011999 102.278891) (xy 77.726637 102.2993) (xy 77.447104 102.360109) (xy 77.179041 102.460091) (xy 76.927961 102.597191) (xy 76.927953 102.597196) (xy 76.785437 102.703882) (xy 76.785436 102.703883) (xy 77.392389 103.310835) (xy 77.233931 103.430499) (xy 77.090348 103.588001) (xy 77.041439 103.666992) (xy 76.431883 103.057436) (xy 76.431882 103.057437) (xy 76.325196 103.199953) (xy 76.325191 103.199961) (xy 76.188091 103.451041) (xy 76.088109 103.719104) (xy 76.0273 103.998637) (xy 76.006891 104.283998) (xy 76.006891 104.284001) (xy 68.072 104.284001) (xy 68.072 92.964005) (xy 75.090844 92.964005) (xy 75.109434 93.188359) (xy 75.109436 93.188371) (xy 75.164703 93.406614) (xy 75.25514 93.612792) (xy 75.378276 93.801265) (xy 75.378284 93.801276) (xy 75.530756 93.966902) (xy 75.53076 93.966906) (xy 75.708424 94.105189) (xy 75.708425 94.105189) (xy 75.708427 94.105191) (xy 75.835135 94.173761) (xy 75.906426 94.212342) (xy 76.119365 94.285444) (xy 76.341431 94.3225) (xy 76.566569 94.3225) (xy 76.788635 94.285444) (xy 77.001574 94.212342) (xy 77.199576 94.105189) (xy 77.37724 93.966906) (xy 77.529722 93.801268) (xy 77.65286 93.612791) (xy 77.743296 93.406616) (xy 77.798564 93.188368) (xy 77.817156 92.964) (xy 77.816689 92.958368) (xy 77.798565 92.73964) (xy 77.798563 92.739628) (xy 77.797139 92.734005) (xy 81.440844 92.734005) (xy 81.459434 92.958359) (xy 81.459436 92.958371) (xy 81.514703 93.176614) (xy 81.60514 93.382792) (xy 81.728276 93.571265) (xy 81.728284 93.571276) (xy 81.880756 93.736902) (xy 81.88076 93.736906) (xy 82.058424 93.875189) (xy 82.058425 93.875189) (xy 82.058427 93.875191) (xy 82.185135 93.943761) (xy 82.256426 93.982342) (xy 82.469365 94.055444) (xy 82.691431 94.0925) (xy 82.916569 94.0925) (xy 83.138635 94.055444) (xy 83.351574 93.982342) (xy 83.549576 93.875189) (xy 83.72724 93.736906) (xy 83.879722 93.571268) (xy 84.00286 93.382791) (xy 84.093296 93.176616) (xy 84.148564 92.958368) (xy 84.166689 92.73964) (xy 84.167156 92.734005) (xy 86.520844 92.734005) (xy 86.539434 92.958359) (xy 86.539436 92.958371) (xy 86.594703 93.176614) (xy 86.68514 93.382792) (xy 86.808276 93.571265) (xy 86.808284 93.571276) (xy 86.960756 93.736902) (xy 86.96076 93.736906) (xy 87.138424 93.875189) (xy 87.138425 93.875189) (xy 87.138427 93.875191) (xy 87.265135 93.943761) (xy 87.336426 93.982342) (xy 87.549365 94.055444) (xy 87.771431 94.0925) (xy 87.996569 94.0925) (xy 88.218635 94.055444) (xy 88.431574 93.982342) (xy 88.629576 93.875189) (xy 88.80724 93.736906) (xy 88.959722 93.571268) (xy 89.08286 93.382791) (xy 89.173296 93.176616) (xy 89.227137 92.964005) (xy 92.870844 92.964005) (xy 92.889434 93.188359) (xy 92.889436 93.188371) (xy 92.944703 93.406614) (xy 93.03514 93.612792) (xy 93.158276 93.801265) (xy 93.158284 93.801276) (xy 93.310756 93.966902) (xy 93.31076 93.966906) (xy 93.488424 94.105189) (xy 93.488425 94.105189) (xy 93.488427 94.105191) (xy 93.615135 94.173761) (xy 93.686426 94.212342) (xy 93.899365 94.285444) (xy 94.121431 94.3225) (xy 94.346569 94.3225) (xy 94.568635 94.285444) (xy 94.781574 94.212342) (xy 94.979576 94.105189) (xy 95.15724 93.966906) (xy 95.309722 93.801268) (xy 95.43286 93.612791) (xy 95.523296 93.406616) (xy 95.578564 93.188368) (xy 95.597156 92.964) (xy 95.596689 92.958368) (xy 95.578565 92.73964) (xy 95.578563 92.739628) (xy 95.523296 92.521385) (xy 95.518144 92.50964) (xy 95.43286 92.315209) (xy 95.417294 92.291384) (xy 95.309723 92.126734) (xy 95.309715 92.126723) (xy 95.157243 91.961097) (xy 95.157238 91.961092) (xy 94.979577 91.822812) (xy 94.979578 91.822812) (xy 94.979576 91.822811) (xy 94.94307 91.803055) (xy 94.893479 91.753836) (xy 94.878371 91.685619) (xy 94.902541 91.620064) (xy 94.94307 91.584945) (xy 94.943084 91.584936) (xy 94.979576 91.565189) (xy 95.15724 91.426906) (xy 95.309722 91.261268) (xy 95.43286 91.072791) (xy 95.523296 90.866616) (xy 95.578564 90.648368) (xy 95.597156 90.424) (xy 95.578564 90.199632) (xy 95.523296 89.981384) (xy 95.43286 89.775209) (xy 95.309722 89.586732) (xy 95.309719 89.586729) (xy 95.309715 89.586723) (xy 95.157243 89.421097) (xy 95.157238 89.421092) (xy 94.979577 89.282812) (xy 94.979572 89.282808) (xy 94.78158 89.175661) (xy 94.781577 89.175659) (xy 94.781574 89.175658) (xy 94.781571 89.175657) (xy 94.781569 89.175656) (xy 94.568637 89.102556) (xy 94.346569 89.0655) (xy 94.121431 89.0655) (xy 93.899362 89.102556) (xy 93.68643 89.175656) (xy 93.686419 89.175661) (xy 93.488427 89.282808) (xy 93.488422 89.282812) (xy 93.310761 89.421092) (xy 93.310756 89.421097) (xy 93.158284 89.586723) (xy 93.158276 89.586734) (xy 93.03514 89.775207) (xy 92.944703 89.981385) (xy 92.889436 90.199628) (xy 92.889434 90.19964) (xy 92.870844 90.423994) (xy 92.870844 90.424005) (xy 92.889434 90.648359) (xy 92.889436 90.648371) (xy 92.944703 90.866614) (xy 93.03514 91.072792) (xy 93.158276 91.261265) (xy 93.158284 91.261276) (xy 93.310756 91.426902) (xy 93.31076 91.426906) (xy 93.488424 91.565189) (xy 93.488429 91.565191) (xy 93.488431 91.565193) (xy 93.52493 91.584946) (xy 93.57452 91.634165) (xy 93.589628 91.702382) (xy 93.565457 91.767937) (xy 93.52493 91.803054) (xy 93.488431 91.822806) (xy 93.488422 91.822812) (xy 93.310761 91.961092) (xy 93.310756 91.961097) (xy 93.158284 92.126723) (xy 93.158276 92.126734) (xy 93.03514 92.315207) (xy 92.944703 92.521385) (xy 92.889436 92.739628) (xy 92.889434 92.73964) (xy 92.870844 92.963994) (xy 92.870844 92.964005) (xy 89.227137 92.964005) (xy 89.228564 92.958368) (xy 89.246689 92.73964) (xy 89.247156 92.734005) (xy 89.247156 92.733994) (xy 89.228565 92.50964) (xy 89.228563 92.509628) (xy 89.173296 92.291385) (xy 89.101073 92.126732) (xy 89.08286 92.085209) (xy 88.959722 91.896732) (xy 88.959719 91.896729) (xy 88.959715 91.896723) (xy 88.807243 91.731097) (xy 88.807238 91.731092) (xy 88.629577 91.592812) (xy 88.629572 91.592808) (xy 88.43158 91.485661) (xy 88.431577 91.485659) (xy 88.431574 91.485658) (xy 88.431571 91.485657) (xy 88.431569 91.485656) (xy 88.218637 91.412556) (xy 87.996569 91.3755) (xy 87.771431 91.3755) (xy 87.549362 91.412556) (xy 87.33643 91.485656) (xy 87.336419 91.485661) (xy 87.138427 91.592808) (xy 87.138422 91.592812) (xy 86.960761 91.731092) (xy 86.960756 91.731097) (xy 86.808284 91.896723) (xy 86.808276 91.896734) (xy 86.68514 92.085207) (xy 86.594703 92.291385) (xy 86.539436 92.509628) (xy 86.539434 92.50964) (xy 86.520844 92.733994) (xy 86.520844 92.734005) (xy 84.167156 92.734005) (xy 84.167156 92.733994) (xy 84.148565 92.50964) (xy 84.148563 92.509628) (xy 84.093296 92.291385) (xy 84.021073 92.126732) (xy 84.00286 92.085209) (xy 83.879722 91.896732) (xy 83.879719 91.896729) (xy 83.879715 91.896723) (xy 83.727243 91.731097) (xy 83.727238 91.731092) (xy 83.549577 91.592812) (xy 83.549572 91.592808) (xy 83.35158 91.485661) (xy 83.351577 91.485659) (xy 83.351574 91.485658) (xy 83.351571 91.485657) (xy 83.351569 91.485656) (xy 83.138637 91.412556) (xy 82.916569 91.3755) (xy 82.691431 91.3755) (xy 82.469362 91.412556) (xy 82.25643 91.485656) (xy 82.256419 91.485661) (xy 82.058427 91.592808) (xy 82.058422 91.592812) (xy 81.880761 91.731092) (xy 81.880756 91.731097) (xy 81.728284 91.896723) (xy 81.728276 91.896734) (xy 81.60514 92.085207) (xy 81.514703 92.291385) (xy 81.459436 92.509628) (xy 81.459434 92.50964) (xy 81.440844 92.733994) (xy 81.440844 92.734005) (xy 77.797139 92.734005) (xy 77.743296 92.521385) (xy 77.738144 92.50964) (xy 77.65286 92.315209) (xy 77.637294 92.291384) (xy 77.529723 92.126734) (xy 77.529715 92.126723) (xy 77.377243 91.961097) (xy 77.377238 91.961092) (xy 77.199577 91.822812) (xy 77.199578 91.822812) (xy 77.199576 91.822811) (xy 77.16307 91.803055) (xy 77.113479 91.753836) (xy 77.098371 91.685619) (xy 77.122541 91.620064) (xy 77.16307 91.584945) (xy 77.163084 91.584936) (xy 77.199576 91.565189) (xy 77.37724 91.426906) (xy 77.529722 91.261268) (xy 77.65286 91.072791) (xy 77.743296 90.866616) (xy 77.798564 90.648368) (xy 77.817156 90.424) (xy 77.798564 90.199632) (xy 77.743296 89.981384) (xy 77.65286 89.775209) (xy 77.529722 89.586732) (xy 77.529719 89.586729) (xy 77.529715 89.586723) (xy 77.377243 89.421097) (xy 77.377238 89.421092) (xy 77.199577 89.282812) (xy 77.199572 89.282808) (xy 77.00158 89.175661) (xy 77.001577 89.175659) (xy 77.001574 89.175658) (xy 77.001571 89.175657) (xy 77.001569 89.175656) (xy 76.788637 89.102556) (xy 76.566569 89.0655) (xy 76.341431 89.0655) (xy 76.119362 89.102556) (xy 75.90643 89.175656) (xy 75.906419 89.175661) (xy 75.708427 89.282808) (xy 75.708422 89.282812) (xy 75.530761 89.421092) (xy 75.530756 89.421097) (xy 75.378284 89.586723) (xy 75.378276 89.586734) (xy 75.25514 89.775207) (xy 75.164703 89.981385) (xy 75.109436 90.199628) (xy 75.109434 90.19964) (xy 75.090844 90.423994) (xy 75.090844 90.424005) (xy 75.109434 90.648359) (xy 75.109436 90.648371) (xy 75.164703 90.866614) (xy 75.25514 91.072792) (xy 75.378276 91.261265) (xy 75.378284 91.261276) (xy 75.530756 91.426902) (xy 75.53076 91.426906) (xy 75.708424 91.565189) (xy 75.708429 91.565191) (xy 75.708431 91.565193) (xy 75.74493 91.584946) (xy 75.79452 91.634165) (xy 75.809628 91.702382) (xy 75.785457 91.767937) (xy 75.74493 91.803054) (xy 75.708431 91.822806) (xy 75.708422 91.822812) (xy 75.530761 91.961092) (xy 75.530756 91.961097) (xy 75.378284 92.126723) (xy 75.378276 92.126734) (xy 75.25514 92.315207) (xy 75.164703 92.521385) (xy 75.109436 92.739628) (xy 75.109434 92.73964) (xy 75.090844 92.963994) (xy 75.090844 92.964005) (xy 68.072 92.964005) (xy 68.072 85.344005) (xy 75.090844 85.344005) (xy 75.109434 85.568359) (xy 75.109436 85.568371) (xy 75.164703 85.786614) (xy 75.25514 85.992792) (xy 75.378276 86.181265) (xy 75.378284 86.181276) (xy 75.530756 86.346902) (xy 75.53076 86.346906) (xy 75.708424 86.485189) (xy 75.708425 86.485189) (xy 75.708427 86.485191) (xy 75.835135 86.553761) (xy 75.906426 86.592342) (xy 76.119365 86.665444) (xy 76.341431 86.7025) (xy 76.566569 86.7025) (xy 76.788635 86.665444) (xy 77.001574 86.592342) (xy 77.199576 86.485189) (xy 77.37724 86.346906) (xy 77.529722 86.181268) (xy 77.65286 85.992791) (xy 77.743296 85.786616) (xy 77.798564 85.568368) (xy 77.817156 85.344005) (xy 92.870844 85.344005) (xy 92.889434 85.568359) (xy 92.889436 85.568371) (xy 92.944703 85.786614) (xy 93.03514 85.992792) (xy 93.158276 86.181265) (xy 93.158284 86.181276) (xy 93.310756 86.346902) (xy 93.31076 86.346906) (xy 93.488424 86.485189) (xy 93.488425 86.485189) (xy 93.488427 86.485191) (xy 93.615135 86.553761) (xy 93.686426 86.592342) (xy 93.899365 86.665444) (xy 94.121431 86.7025) (xy 94.346569 86.7025) (xy 94.568635 86.665444) (xy 94.781574 86.592342) (xy 94.979576 86.485189) (xy 95.15724 86.346906) (xy 95.309722 86.181268) (xy 95.43286 85.992791) (xy 95.523296 85.786616) (xy 95.578564 85.568368) (xy 95.597156 85.344) (xy 95.578564 85.119632) (xy 95.523296 84.901384) (xy 95.43286 84.695209) (xy 95.309722 84.506732) (xy 95.309719 84.506729) (xy 95.309715 84.506723) (xy 95.157243 84.341097) (xy 95.157238 84.341092) (xy 94.979577 84.202812) (xy 94.979578 84.202812) (xy 94.979576 84.202811) (xy 94.94307 84.183055) (xy 94.893479 84.133836) (xy 94.878371 84.065619) (xy 94.902541 84.000064) (xy 94.94307 83.964945) (xy 94.943084 83.964936) (xy 94.979576 83.945189) (xy 95.15724 83.806906) (xy 95.309722 83.641268) (xy 95.43286 83.452791) (xy 95.523296 83.246616) (xy 95.578564 83.028368) (xy 95.597156 82.804) (xy 95.578564 82.579632) (xy 95.523296 82.361384) (xy 95.43286 82.155209) (xy 95.309722 81.966732) (xy 95.309719 81.966729) (xy 95.309715 81.966723) (xy 95.157243 81.801097) (xy 95.157238 81.801092) (xy 94.979577 81.662812) (xy 94.979578 81.662812) (xy 94.979576 81.662811) (xy 94.94307 81.643055) (xy 94.893479 81.593836) (xy 94.878371 81.525619) (xy 94.902541 81.460064) (xy 94.94307 81.424945) (xy 94.943084 81.424936) (xy 94.979576 81.405189) (xy 95.15724 81.266906) (xy 95.309722 81.101268) (xy 95.43286 80.912791) (xy 95.523296 80.706616) (xy 95.578564 80.488368) (xy 95.597156 80.264) (xy 95.578564 80.039632) (xy 95.523296 79.821384) (xy 95.43286 79.615209) (xy 95.309722 79.426732) (xy 95.309719 79.426729) (xy 95.309715 79.426723) (xy 95.157243 79.261097) (xy 95.157238 79.261092) (xy 94.979577 79.122812) (xy 94.979578 79.122812) (xy 94.979576 79.122811) (xy 94.94307 79.103055) (xy 94.893479 79.053836) (xy 94.878371 78.985619) (xy 94.902541 78.920064) (xy 94.94307 78.884945) (xy 94.943084 78.884936) (xy 94.979576 78.865189) (xy 95.15724 78.726906) (xy 95.309722 78.561268) (xy 95.43286 78.372791) (xy 95.523296 78.166616) (xy 95.578564 77.948368) (xy 95.597156 77.724) (xy 95.578564 77.499632) (xy 95.523296 77.281384) (xy 95.43286 77.075209) (xy 95.309722 76.886732) (xy 95.309719 76.886729) (xy 95.309715 76.886723) (xy 95.157243 76.721097) (xy 95.157238 76.721092) (xy 94.979577 76.582812) (xy 94.979572 76.582808) (xy 94.78158 76.475661) (xy 94.781577 76.475659) (xy 94.781574 76.475658) (xy 94.781571 76.475657) (xy 94.781569 76.475656) (xy 94.568637 76.402556) (xy 94.346569 76.3655) (xy 94.121431 76.3655) (xy 93.899362 76.402556) (xy 93.68643 76.475656) (xy 93.686419 76.475661) (xy 93.488427 76.582808) (xy 93.488422 76.582812) (xy 93.310761 76.721092) (xy 93.310756 76.721097) (xy 93.158284 76.886723) (xy 93.158276 76.886734) (xy 93.03514 77.075207) (xy 92.944703 77.281385) (xy 92.889436 77.499628) (xy 92.889434 77.49964) (xy 92.870844 77.723994) (xy 92.870844 77.724005) (xy 92.889434 77.948359) (xy 92.889436 77.948371) (xy 92.944703 78.166614) (xy 93.03514 78.372792) (xy 93.158276 78.561265) (xy 93.158284 78.561276) (xy 93.310756 78.726902) (xy 93.31076 78.726906) (xy 93.488424 78.865189) (xy 93.488429 78.865191) (xy 93.488431 78.865193) (xy 93.52493 78.884946) (xy 93.57452 78.934165) (xy 93.589628 79.002382) (xy 93.565457 79.067937) (xy 93.52493 79.103054) (xy 93.488431 79.122806) (xy 93.488422 79.122812) (xy 93.310761 79.261092) (xy 93.310756 79.261097) (xy 93.158284 79.426723) (xy 93.158276 79.426734) (xy 93.03514 79.615207) (xy 92.944703 79.821385) (xy 92.889436 80.039628) (xy 92.889434 80.03964) (xy 92.870844 80.263994) (xy 92.870844 80.264005) (xy 92.889434 80.488359) (xy 92.889436 80.488371) (xy 92.944703 80.706614) (xy 93.03514 80.912792) (xy 93.158276 81.101265) (xy 93.158284 81.101276) (xy 93.310756 81.266902) (xy 93.31076 81.266906) (xy 93.488424 81.405189) (xy 93.488429 81.405191) (xy 93.488431 81.405193) (xy 93.52493 81.424946) (xy 93.57452 81.474165) (xy 93.589628 81.542382) (xy 93.565457 81.607937) (xy 93.52493 81.643054) (xy 93.488431 81.662806) (xy 93.488422 81.662812) (xy 93.310761 81.801092) (xy 93.310756 81.801097) (xy 93.158284 81.966723) (xy 93.158276 81.966734) (xy 93.03514 82.155207) (xy 92.944703 82.361385) (xy 92.889436 82.579628) (xy 92.889434 82.57964) (xy 92.870844 82.803994) (xy 92.870844 82.804005) (xy 92.889434 83.028359) (xy 92.889436 83.028371) (xy 92.944703 83.246614) (xy 93.03514 83.452792) (xy 93.158276 83.641265) (xy 93.158284 83.641276) (xy 93.310756 83.806902) (xy 93.31076 83.806906) (xy 93.488424 83.945189) (xy 93.488429 83.945191) (xy 93.488431 83.945193) (xy 93.52493 83.964946) (xy 93.57452 84.014165) (xy 93.589628 84.082382) (xy 93.565457 84.147937) (xy 93.52493 84.183054) (xy 93.488431 84.202806) (xy 93.488422 84.202812) (xy 93.310761 84.341092) (xy 93.310756 84.341097) (xy 93.158284 84.506723) (xy 93.158276 84.506734) (xy 93.03514 84.695207) (xy 92.944703 84.901385) (xy 92.889436 85.119628) (xy 92.889434 85.11964) (xy 92.870844 85.343994) (xy 92.870844 85.344005) (xy 77.817156 85.344005) (xy 77.817156 85.344) (xy 77.798564 85.119632) (xy 77.743296 84.901384) (xy 77.65286 84.695209) (xy 77.529722 84.506732) (xy 77.529719 84.506729) (xy 77.529715 84.506723) (xy 77.377243 84.341097) (xy 77.377238 84.341092) (xy 77.199577 84.202812) (xy 77.199578 84.202812) (xy 77.199576 84.202811) (xy 77.16307 84.183055) (xy 77.113479 84.133836) (xy 77.098371 84.065619) (xy 77.122541 84.000064) (xy 77.16307 83.964945) (xy 77.163084 83.964936) (xy 77.199576 83.945189) (xy 77.37724 83.806906) (xy 77.529722 83.641268) (xy 77.65286 83.452791) (xy 77.743296 83.246616) (xy 77.798564 83.028368) (xy 77.817156 82.804) (xy 77.798564 82.579632) (xy 77.743296 82.361384) (xy 77.65286 82.155209) (xy 77.529722 81.966732) (xy 77.529719 81.966729) (xy 77.529715 81.966723) (xy 77.377243 81.801097) (xy 77.377238 81.801092) (xy 77.199577 81.662812) (xy 77.199578 81.662812) (xy 77.199576 81.662811) (xy 77.16307 81.643055) (xy 77.113479 81.593836) (xy 77.098371 81.525619) (xy 77.122541 81.460064) (xy 77.16307 81.424945) (xy 77.163084 81.424936) (xy 77.199576 81.405189) (xy 77.37724 81.266906) (xy 77.529722 81.101268) (xy 77.65286 80.912791) (xy 77.743296 80.706616) (xy 77.798564 80.488368) (xy 77.817156 80.264) (xy 77.798564 80.039632) (xy 77.743296 79.821384) (xy 77.65286 79.615209) (xy 77.529722 79.426732) (xy 77.529719 79.426729) (xy 77.529715 79.426723) (xy 77.377243 79.261097) (xy 77.377238 79.261092) (xy 77.199577 79.122812) (xy 77.199578 79.122812) (xy 77.199576 79.122811) (xy 77.16307 79.103055) (xy 77.113479 79.053836) (xy 77.098371 78.985619) (xy 77.122541 78.920064) (xy 77.16307 78.884945) (xy 77.163084 78.884936) (xy 77.199576 78.865189) (xy 77.37724 78.726906) (xy 77.529722 78.561268) (xy 77.65286 78.372791) (xy 77.743296 78.166616) (xy 77.798564 77.948368) (xy 77.817156 77.724) (xy 77.798564 77.499632) (xy 77.743296 77.281384) (xy 77.65286 77.075209) (xy 77.529722 76.886732) (xy 77.529719 76.886729) (xy 77.529715 76.886723) (xy 77.377243 76.721097) (xy 77.377238 76.721092) (xy 77.199577 76.582812) (xy 77.199572 76.582808) (xy 77.00158 76.475661) (xy 77.001577 76.475659) (xy 77.001574 76.475658) (xy 77.001571 76.475657) (xy 77.001569 76.475656) (xy 76.788637 76.402556) (xy 76.566569 76.3655) (xy 76.341431 76.3655) (xy 76.119362 76.402556) (xy 75.90643 76.475656) (xy 75.906419 76.475661) (xy 75.708427 76.582808) (xy 75.708422 76.582812) (xy 75.530761 76.721092) (xy 75.530756 76.721097) (xy 75.378284 76.886723) (xy 75.378276 76.886734) (xy 75.25514 77.075207) (xy 75.164703 77.281385) (xy 75.109436 77.499628) (xy 75.109434 77.49964) (xy 75.090844 77.723994) (xy 75.090844 77.724005) (xy 75.109434 77.948359) (xy 75.109436 77.948371) (xy 75.164703 78.166614) (xy 75.25514 78.372792) (xy 75.378276 78.561265) (xy 75.378284 78.561276) (xy 75.530756 78.726902) (xy 75.53076 78.726906) (xy 75.708424 78.865189) (xy 75.708429 78.865191) (xy 75.708431 78.865193) (xy 75.74493 78.884946) (xy 75.79452 78.934165) (xy 75.809628 79.002382) (xy 75.785457 79.067937) (xy 75.74493 79.103054) (xy 75.708431 79.122806) (xy 75.708422 79.122812) (xy 75.530761 79.261092) (xy 75.530756 79.261097) (xy 75.378284 79.426723) (xy 75.378276 79.426734) (xy 75.25514 79.615207) (xy 75.164703 79.821385) (xy 75.109436 80.039628) (xy 75.109434 80.03964) (xy 75.090844 80.263994) (xy 75.090844 80.264005) (xy 75.109434 80.488359) (xy 75.109436 80.488371) (xy 75.164703 80.706614) (xy 75.25514 80.912792) (xy 75.378276 81.101265) (xy 75.378284 81.101276) (xy 75.530756 81.266902) (xy 75.53076 81.266906) (xy 75.708424 81.405189) (xy 75.708429 81.405191) (xy 75.708431 81.405193) (xy 75.74493 81.424946) (xy 75.79452 81.474165) (xy 75.809628 81.542382) (xy 75.785457 81.607937) (xy 75.74493 81.643054) (xy 75.708431 81.662806) (xy 75.708422 81.662812) (xy 75.530761 81.801092) (xy 75.530756 81.801097) (xy 75.378284 81.966723) (xy 75.378276 81.966734) (xy 75.25514 82.155207) (xy 75.164703 82.361385) (xy 75.109436 82.579628) (xy 75.109434 82.57964) (xy 75.090844 82.803994) (xy 75.090844 82.804005) (xy 75.109434 83.028359) (xy 75.109436 83.028371) (xy 75.164703 83.246614) (xy 75.25514 83.452792) (xy 75.378276 83.641265) (xy 75.378284 83.641276) (xy 75.530756 83.806902) (xy 75.53076 83.806906) (xy 75.708424 83.945189) (xy 75.708429 83.945191) (xy 75.708431 83.945193) (xy 75.74493 83.964946) (xy 75.79452 84.014165) (xy 75.809628 84.082382) (xy 75.785457 84.147937) (xy 75.74493 84.183054) (xy 75.708431 84.202806) (xy 75.708422 84.202812) (xy 75.530761 84.341092) (xy 75.530756 84.341097) (xy 75.378284 84.506723) (xy 75.378276 84.506734) (xy 75.25514 84.695207) (xy 75.164703 84.901385) (xy 75.109436 85.119628) (xy 75.109434 85.11964) (xy 75.090844 85.343994) (xy 75.090844 85.344005) (xy 68.072 85.344005) (xy 68.072 72.644005) (xy 75.090844 72.644005) (xy 75.109434 72.868359) (xy 75.109436 72.868371) (xy 75.164703 73.086614) (xy 75.25514 73.292792) (xy 75.378276 73.481265) (xy 75.378284 73.481276) (xy 75.530756 73.646902) (xy 75.53076 73.646906) (xy 75.708424 73.785189) (xy 75.708425 73.785189) (xy 75.708427 73.785191) (xy 75.835135 73.853761) (xy 75.906426 73.892342) (xy 76.119365 73.965444) (xy 76.341431 74.0025) (xy 76.566569 74.0025) (xy 76.788635 73.965444) (xy 77.001574 73.892342) (xy 77.199576 73.785189) (xy 77.37724 73.646906) (xy 77.529722 73.481268) (xy 77.65286 73.292791) (xy 77.743296 73.086616) (xy 77.798564 72.868368) (xy 77.817156 72.644005) (xy 92.870844 72.644005) (xy 92.889434 72.868359) (xy 92.889436 72.868371) (xy 92.944703 73.086614) (xy 93.03514 73.292792) (xy 93.158276 73.481265) (xy 93.158284 73.481276) (xy 93.310756 73.646902) (xy 93.31076 73.646906) (xy 93.488424 73.785189) (xy 93.488425 73.785189) (xy 93.488427 73.785191) (xy 93.615135 73.853761) (xy 93.686426 73.892342) (xy 93.899365 73.965444) (xy 94.121431 74.0025) (xy 94.346569 74.0025) (xy 94.568635 73.965444) (xy 94.781574 73.892342) (xy 94.979576 73.785189) (xy 95.15724 73.646906) (xy 95.309722 73.481268) (xy 95.43286 73.292791) (xy 95.523296 73.086616) (xy 95.578564 72.868368) (xy 95.597156 72.644) (xy 95.578564 72.419632) (xy 95.523296 72.201384) (xy 95.43286 71.995209) (xy 95.309722 71.806732) (xy 95.309719 71.806729) (xy 95.309715 71.806723) (xy 95.157243 71.641097) (xy 95.157238 71.641092) (xy 94.979577 71.502812) (xy 94.979578 71.502812) (xy 94.979576 71.502811) (xy 94.94307 71.483055) (xy 94.893479 71.433836) (xy 94.878371 71.365619) (xy 94.902541 71.300064) (xy 94.94307 71.264945) (xy 94.943084 71.264936) (xy 94.979576 71.245189) (xy 95.15724 71.106906) (xy 95.309722 70.941268) (xy 95.43286 70.752791) (xy 95.523296 70.546616) (xy 95.578564 70.328368) (xy 95.597156 70.104) (xy 95.578564 69.879632) (xy 95.523296 69.661384) (xy 95.43286 69.455209) (xy 95.309722 69.266732) (xy 95.309719 69.266729) (xy 95.309715 69.266723) (xy 95.157243 69.101097) (xy 95.157238 69.101092) (xy 94.979577 68.962812) (xy 94.979578 68.962812) (xy 94.979576 68.962811) (xy 94.94307 68.943055) (xy 94.893479 68.893836) (xy 94.878371 68.825619) (xy 94.902541 68.760064) (xy 94.94307 68.724945) (xy 94.943084 68.724936) (xy 94.979576 68.705189) (xy 95.15724 68.566906) (xy 95.309722 68.401268) (xy 95.43286 68.212791) (xy 95.523296 68.006616) (xy 95.578564 67.788368) (xy 95.597156 67.564) (xy 95.578564 67.339632) (xy 95.523296 67.121384) (xy 95.43286 66.915209) (xy 95.309722 66.726732) (xy 95.309719 66.726729) (xy 95.309715 66.726723) (xy 95.157243 66.561097) (xy 95.157238 66.561092) (xy 94.979577 66.422812) (xy 94.979578 66.422812) (xy 94.979576 66.422811) (xy 94.94307 66.403055) (xy 94.893479 66.353836) (xy 94.878371 66.285619) (xy 94.902541 66.220064) (xy 94.94307 66.184945) (xy 94.943084 66.184936) (xy 94.979576 66.165189) (xy 95.15724 66.026906) (xy 95.309722 65.861268) (xy 95.43286 65.672791) (xy 95.523296 65.466616) (xy 95.578564 65.248368) (xy 95.597156 65.024) (xy 95.578564 64.799632) (xy 95.523296 64.581384) (xy 95.43286 64.375209) (xy 95.309722 64.186732) (xy 95.309719 64.186729) (xy 95.309715 64.186723) (xy 95.16451 64.028991) (xy 95.133587 63.966337) (xy 95.141447 63.896911) (xy 95.185594 63.842755) (xy 95.212405 63.828827) (xy 95.292584 63.79892) (xy 95.330204 63.784889) (xy 95.447261 63.697261) (xy 95.534889 63.580204) (xy 95.585989 63.443201) (xy 95.589591 63.409692) (xy 95.592499 63.382654) (xy 95.5925 63.382637) (xy 95.5925 61.585362) (xy 95.592499 61.585345) (xy 95.589157 61.55427) (xy 95.585989 61.524799) (xy 95.534889 61.387796) (xy 95.447261 61.270739) (xy 95.330204 61.183111) (xy 95.212404 61.139172) (xy 95.156471 61.0973) (xy 95.132055 61.031835) (xy 95.146908 60.963562) (xy 95.164504 60.939014) (xy 95.309722 60.781268) (xy 95.43286 60.592791) (xy 95.523296 60.386616) (xy 95.578564 60.168368) (xy 95.597156 59.944) (xy 95.578564 59.719632) (xy 95.523296 59.501384) (xy 95.43286 59.295209) (xy 95.309722 59.106732) (xy 95.309719 59.106729) (xy 95.309715 59.106723) (xy 95.157243 58.941097) (xy 95.157238 58.941092) (xy 94.979577 58.802812) (xy 94.979578 58.802812) (xy 94.979576 58.802811) (xy 94.94307 58.783055) (xy 94.893479 58.733836) (xy 94.878371 58.665619) (xy 94.902541 58.600064) (xy 94.94307 58.564945) (xy 94.943084 58.564936) (xy 94.979576 58.545189) (xy 95.15724 58.406906) (xy 95.309722 58.241268) (xy 95.43286 58.052791) (xy 95.523296 57.846616) (xy 95.578564 57.628368) (xy 95.597156 57.404) (xy 95.578564 57.179632) (xy 95.523296 56.961384) (xy 95.43286 56.755209) (xy 95.309722 56.566732) (xy 95.309719 56.566729) (xy 95.309715 56.566723) (xy 95.157243 56.401097) (xy 95.157238 56.401092) (xy 94.979577 56.262812) (xy 94.979578 56.262812) (xy 94.979576 56.262811) (xy 94.94307 56.243055) (xy 94.893479 56.193836) (xy 94.878371 56.125619) (xy 94.902541 56.060064) (xy 94.94307 56.024945) (xy 94.943084 56.024936) (xy 94.979576 56.005189) (xy 95.15724 55.866906) (xy 95.309722 55.701268) (xy 95.43286 55.512791) (xy 95.523296 55.306616) (xy 95.578564 55.088368) (xy 95.597156 54.864) (xy 95.578564 54.639632) (xy 95.523296 54.421384) (xy 95.43286 54.215209) (xy 95.309722 54.026732) (xy 95.309719 54.026729) (xy 95.309715 54.026723) (xy 95.157243 53.861097) (xy 95.157238 53.861092) (xy 94.979577 53.722812) (xy 94.979578 53.722812) (xy 94.979576 53.722811) (xy 94.94307 53.703055) (xy 94.893479 53.653836) (xy 94.878371 53.585619) (xy 94.902541 53.520064) (xy 94.94307 53.484945) (xy 94.943084 53.484936) (xy 94.979576 53.465189) (xy 95.15724 53.326906) (xy 95.309722 53.161268) (xy 95.43286 52.972791) (xy 95.523296 52.766616) (xy 95.578564 52.548368) (xy 95.597156 52.324) (xy 95.578564 52.099632) (xy 95.523296 51.881384) (xy 95.43286 51.675209) (xy 95.309722 51.486732) (xy 95.309719 51.486729) (xy 95.309715 51.486723) (xy 95.157243 51.321097) (xy 95.157238 51.321092) (xy 94.979577 51.182812) (xy 94.979572 51.182808) (xy 94.78158 51.075661) (xy 94.781577 51.075659) (xy 94.781574 51.075658) (xy 94.781571 51.075657) (xy 94.781569 51.075656) (xy 94.568637 51.002556) (xy 94.346569 50.9655) (xy 94.121431 50.9655) (xy 93.899362 51.002556) (xy 93.68643 51.075656) (xy 93.686419 51.075661) (xy 93.488427 51.182808) (xy 93.488422 51.182812) (xy 93.310761 51.321092) (xy 93.310756 51.321097) (xy 93.158284 51.486723) (xy 93.158276 51.486734) (xy 93.03514 51.675207) (xy 92.944703 51.881385) (xy 92.889436 52.099628) (xy 92.889434 52.09964) (xy 92.870844 52.323994) (xy 92.870844 52.324005) (xy 92.889434 52.548359) (xy 92.889436 52.548371) (xy 92.944703 52.766614) (xy 93.03514 52.972792) (xy 93.158276 53.161265) (xy 93.158284 53.161276) (xy 93.310756 53.326902) (xy 93.31076 53.326906) (xy 93.488424 53.465189) (xy 93.488429 53.465191) (xy 93.488431 53.465193) (xy 93.52493 53.484946) (xy 93.57452 53.534165) (xy 93.589628 53.602382) (xy 93.565457 53.667937) (xy 93.52493 53.703054) (xy 93.488431 53.722806) (xy 93.488422 53.722812) (xy 93.310761 53.861092) (xy 93.310756 53.861097) (xy 93.158284 54.026723) (xy 93.158276 54.026734) (xy 93.03514 54.215207) (xy 92.944703 54.421385) (xy 92.889436 54.639628) (xy 92.889434 54.63964) (xy 92.870844 54.863994) (xy 92.870844 54.864005) (xy 92.889434 55.088359) (xy 92.889436 55.088371) (xy 92.944703 55.306614) (xy 93.03514 55.512792) (xy 93.158276 55.701265) (xy 93.158284 55.701276) (xy 93.310756 55.866902) (xy 93.31076 55.866906) (xy 93.488424 56.005189) (xy 93.488429 56.005191) (xy 93.488431 56.005193) (xy 93.52493 56.024946) (xy 93.57452 56.074165) (xy 93.589628 56.142382) (xy 93.565457 56.207937) (xy 93.52493 56.243054) (xy 93.488431 56.262806) (xy 93.488422 56.262812) (xy 93.310761 56.401092) (xy 93.310756 56.401097) (xy 93.158284 56.566723) (xy 93.158276 56.566734) (xy 93.03514 56.755207) (xy 92.944703 56.961385) (xy 92.889436 57.179628) (xy 92.889434 57.17964) (xy 92.870844 57.403994) (xy 92.870844 57.404005) (xy 92.889434 57.628359) (xy 92.889436 57.628371) (xy 92.944703 57.846614) (xy 93.03514 58.052792) (xy 93.158276 58.241265) (xy 93.158284 58.241276) (xy 93.310756 58.406902) (xy 93.31076 58.406906) (xy 93.488424 58.545189) (xy 93.488429 58.545191) (xy 93.488431 58.545193) (xy 93.52493 58.564946) (xy 93.57452 58.614165) (xy 93.589628 58.682382) (xy 93.565457 58.747937) (xy 93.52493 58.783054) (xy 93.488431 58.802806) (xy 93.488422 58.802812) (xy 93.310761 58.941092) (xy 93.310756 58.941097) (xy 93.158284 59.106723) (xy 93.158276 59.106734) (xy 93.03514 59.295207) (xy 92.944703 59.501385) (xy 92.889436 59.719628) (xy 92.889434 59.71964) (xy 92.870844 59.943994) (xy 92.870844 59.944005) (xy 92.889434 60.168359) (xy 92.889436 60.168371) (xy 92.944703 60.386614) (xy 93.03514 60.592792) (xy 93.158276 60.781265) (xy 93.158284 60.781276) (xy 93.303489 60.939008) (xy 93.334412 61.001662) (xy 93.326552 61.071088) (xy 93.282405 61.125244) (xy 93.255596 61.139172) (xy 93.137794 61.183111) (xy 93.020739 61.270739) (xy 92.933111 61.387795) (xy 92.882011 61.524795) (xy 92.882011 61.524797) (xy 92.8755 61.585345) (xy 92.8755 63.382654) (xy 92.882011 63.443202) (xy 92.882011 63.443204) (xy 92.933111 63.580204) (xy 93.020739 63.697261) (xy 93.137796 63.784889) (xy 93.189737 63.804262) (xy 93.255595 63.828827) (xy 93.311528 63.870699) (xy 93.335944 63.936163) (xy 93.321092 64.004436) (xy 93.30349 64.028991) (xy 93.158279 64.18673) (xy 93.158276 64.186734) (xy 93.03514 64.375207) (xy 92.944703 64.581385) (xy 92.889436 64.799628) (xy 92.889434 64.79964) (xy 92.870844 65.023994) (xy 92.870844 65.024005) (xy 92.889434 65.248359) (xy 92.889436 65.248371) (xy 92.944703 65.466614) (xy 93.03514 65.672792) (xy 93.158276 65.861265) (xy 93.158284 65.861276) (xy 93.310756 66.026902) (xy 93.31076 66.026906) (xy 93.488424 66.165189) (xy 93.488429 66.165191) (xy 93.488431 66.165193) (xy 93.52493 66.184946) (xy 93.57452 66.234165) (xy 93.589628 66.302382) (xy 93.565457 66.367937) (xy 93.52493 66.403054) (xy 93.488431 66.422806) (xy 93.488422 66.422812) (xy 93.310761 66.561092) (xy 93.310756 66.561097) (xy 93.158284 66.726723) (xy 93.158276 66.726734) (xy 93.03514 66.915207) (xy 92.944703 67.121385) (xy 92.889436 67.339628) (xy 92.889434 67.33964) (xy 92.870844 67.563994) (xy 92.870844 67.564005) (xy 92.889434 67.788359) (xy 92.889436 67.788371) (xy 92.944703 68.006614) (xy 93.03514 68.212792) (xy 93.158276 68.401265) (xy 93.158284 68.401276) (xy 93.310756 68.566902) (xy 93.31076 68.566906) (xy 93.488424 68.705189) (xy 93.488429 68.705191) (xy 93.488431 68.705193) (xy 93.52493 68.724946) (xy 93.57452 68.774165) (xy 93.589628 68.842382) (xy 93.565457 68.907937) (xy 93.52493 68.943054) (xy 93.488431 68.962806) (xy 93.488422 68.962812) (xy 93.310761 69.101092) (xy 93.310756 69.101097) (xy 93.158284 69.266723) (xy 93.158276 69.266734) (xy 93.03514 69.455207) (xy 92.944703 69.661385) (xy 92.889436 69.879628) (xy 92.889434 69.87964) (xy 92.870844 70.103994) (xy 92.870844 70.104005) (xy 92.889434 70.328359) (xy 92.889436 70.328371) (xy 92.944703 70.546614) (xy 93.03514 70.752792) (xy 93.158276 70.941265) (xy 93.158284 70.941276) (xy 93.310756 71.106902) (xy 93.31076 71.106906) (xy 93.488424 71.245189) (xy 93.488429 71.245191) (xy 93.488431 71.245193) (xy 93.52493 71.264946) (xy 93.57452 71.314165) (xy 93.589628 71.382382) (xy 93.565457 71.447937) (xy 93.52493 71.483054) (xy 93.488431 71.502806) (xy 93.488422 71.502812) (xy 93.310761 71.641092) (xy 93.310756 71.641097) (xy 93.158284 71.806723) (xy 93.158276 71.806734) (xy 93.03514 71.995207) (xy 92.944703 72.201385) (xy 92.889436 72.419628) (xy 92.889434 72.41964) (xy 92.870844 72.643994) (xy 92.870844 72.644005) (xy 77.817156 72.644005) (xy 77.817156 72.644) (xy 77.798564 72.419632) (xy 77.743296 72.201384) (xy 77.65286 71.995209) (xy 77.529722 71.806732) (xy 77.529719 71.806729) (xy 77.529715 71.806723) (xy 77.377243 71.641097) (xy 77.377238 71.641092) (xy 77.199577 71.502812) (xy 77.199578 71.502812) (xy 77.199576 71.502811) (xy 77.16307 71.483055) (xy 77.113479 71.433836) (xy 77.098371 71.365619) (xy 77.122541 71.300064) (xy 77.16307 71.264945) (xy 77.163084 71.264936) (xy 77.199576 71.245189) (xy 77.37724 71.106906) (xy 77.529722 70.941268) (xy 77.65286 70.752791) (xy 77.743296 70.546616) (xy 77.798564 70.328368) (xy 77.817156 70.104) (xy 77.798564 69.879632) (xy 77.743296 69.661384) (xy 77.65286 69.455209) (xy 77.529722 69.266732) (xy 77.529719 69.266729) (xy 77.529715 69.266723) (xy 77.377243 69.101097) (xy 77.377238 69.101092) (xy 77.199577 68.962812) (xy 77.199578 68.962812) (xy 77.199576 68.962811) (xy 77.16307 68.943055) (xy 77.113479 68.893836) (xy 77.098371 68.825619) (xy 77.122541 68.760064) (xy 77.16307 68.724945) (xy 77.163084 68.724936) (xy 77.199576 68.705189) (xy 77.37724 68.566906) (xy 77.529722 68.401268) (xy 77.65286 68.212791) (xy 77.743296 68.006616) (xy 77.798564 67.788368) (xy 77.817156 67.564) (xy 77.798564 67.339632) (xy 77.743296 67.121384) (xy 77.65286 66.915209) (xy 77.529722 66.726732) (xy 77.529719 66.726729) (xy 77.529715 66.726723) (xy 77.377243 66.561097) (xy 77.377238 66.561092) (xy 77.199577 66.422812) (xy 77.199578 66.422812) (xy 77.199576 66.422811) (xy 77.16307 66.403055) (xy 77.113479 66.353836) (xy 77.098371 66.285619) (xy 77.122541 66.220064) (xy 77.16307 66.184945) (xy 77.163084 66.184936) (xy 77.199576 66.165189) (xy 77.37724 66.026906) (xy 77.529722 65.861268) (xy 77.65286 65.672791) (xy 77.743296 65.466616) (xy 77.798564 65.248368) (xy 77.817156 65.024) (xy 77.798564 64.799632) (xy 77.743296 64.581384) (xy 77.65286 64.375209) (xy 77.529722 64.186732) (xy 77.529719 64.186729) (xy 77.529715 64.186723) (xy 77.377243 64.021097) (xy 77.377238 64.021092) (xy 77.199577 63.882812) (xy 77.199572 63.882808) (xy 77.00158 63.775661) (xy 77.001577 63.775659) (xy 77.001574 63.775658) (xy 77.001571 63.775657) (xy 77.001569 63.775656) (xy 76.788637 63.702556) (xy 76.566569 63.6655) (xy 76.341431 63.6655) (xy 76.119362 63.702556) (xy 75.90643 63.775656) (xy 75.906419 63.775661) (xy 75.708427 63.882808) (xy 75.708422 63.882812) (xy 75.530761 64.021092) (xy 75.530756 64.021097) (xy 75.378284 64.186723) (xy 75.378276 64.186734) (xy 75.25514 64.375207) (xy 75.164703 64.581385) (xy 75.109436 64.799628) (xy 75.109434 64.79964) (xy 75.090844 65.023994) (xy 75.090844 65.024005) (xy 75.109434 65.248359) (xy 75.109436 65.248371) (xy 75.164703 65.466614) (xy 75.25514 65.672792) (xy 75.378276 65.861265) (xy 75.378284 65.861276) (xy 75.530756 66.026902) (xy 75.53076 66.026906) (xy 75.708424 66.165189) (xy 75.708429 66.165191) (xy 75.708431 66.165193) (xy 75.74493 66.184946) (xy 75.79452 66.234165) (xy 75.809628 66.302382) (xy 75.785457 66.367937) (xy 75.74493 66.403054) (xy 75.708431 66.422806) (xy 75.708422 66.422812) (xy 75.530761 66.561092) (xy 75.530756 66.561097) (xy 75.378284 66.726723) (xy 75.378276 66.726734) (xy 75.25514 66.915207) (xy 75.164703 67.121385) (xy 75.109436 67.339628) (xy 75.109434 67.33964) (xy 75.090844 67.563994) (xy 75.090844 67.564005) (xy 75.109434 67.788359) (xy 75.109436 67.788371) (xy 75.164703 68.006614) (xy 75.25514 68.212792) (xy 75.378276 68.401265) (xy 75.378284 68.401276) (xy 75.530756 68.566902) (xy 75.53076 68.566906) (xy 75.708424 68.705189) (xy 75.708429 68.705191) (xy 75.708431 68.705193) (xy 75.74493 68.724946) (xy 75.79452 68.774165) (xy 75.809628 68.842382) (xy 75.785457 68.907937) (xy 75.74493 68.943054) (xy 75.708431 68.962806) (xy 75.708422 68.962812) (xy 75.530761 69.101092) (xy 75.530756 69.101097) (xy 75.378284 69.266723) (xy 75.378276 69.266734) (xy 75.25514 69.455207) (xy 75.164703 69.661385) (xy 75.109436 69.879628) (xy 75.109434 69.87964) (xy 75.090844 70.103994) (xy 75.090844 70.104005) (xy 75.109434 70.328359) (xy 75.109436 70.328371) (xy 75.164703 70.546614) (xy 75.25514 70.752792) (xy 75.378276 70.941265) (xy 75.378284 70.941276) (xy 75.530756 71.106902) (xy 75.53076 71.106906) (xy 75.708424 71.245189) (xy 75.708429 71.245191) (xy 75.708431 71.245193) (xy 75.74493 71.264946) (xy 75.79452 71.314165) (xy 75.809628 71.382382) (xy 75.785457 71.447937) (xy 75.74493 71.483054) (xy 75.708431 71.502806) (xy 75.708422 71.502812) (xy 75.530761 71.641092) (xy 75.530756 71.641097) (xy 75.378284 71.806723) (xy 75.378276 71.806734) (xy 75.25514 71.995207) (xy 75.164703 72.201385) (xy 75.109436 72.419628) (xy 75.109434 72.41964) (xy 75.090844 72.643994) (xy 75.090844 72.644005) (xy 68.072 72.644005) (xy 68.072 59.944005) (xy 75.090844 59.944005) (xy 75.109434 60.168359) (xy 75.109436 60.168371) (xy 75.164703 60.386614) (xy 75.25514 60.592792) (xy 75.378276 60.781265) (xy 75.378284 60.781276) (xy 75.523488 60.939007) (xy 75.53076 60.946906) (xy 75.708424 61.085189) (xy 75.708425 61.085189) (xy 75.708427 61.085191) (xy 75.730803 61.0973) (xy 75.906426 61.192342) (xy 76.119365 61.265444) (xy 76.341431 61.3025) (xy 76.566569 61.3025) (xy 76.788635 61.265444) (xy 77.001574 61.192342) (xy 77.199576 61.085189) (xy 77.37724 60.946906) (xy 77.529722 60.781268) (xy 77.65286 60.592791) (xy 77.743296 60.386616) (xy 77.798564 60.168368) (xy 77.817156 59.944) (xy 77.798564 59.719632) (xy 77.743296 59.501384) (xy 77.65286 59.295209) (xy 77.529722 59.106732) (xy 77.529719 59.106729) (xy 77.529715 59.106723) (xy 77.377243 58.941097) (xy 77.377238 58.941092) (xy 77.199577 58.802812) (xy 77.199578 58.802812) (xy 77.199576 58.802811) (xy 77.16307 58.783055) (xy 77.113479 58.733836) (xy 77.098371 58.665619) (xy 77.122541 58.600064) (xy 77.16307 58.564945) (xy 77.163084 58.564936) (xy 77.199576 58.545189) (xy 77.37724 58.406906) (xy 77.529722 58.241268) (xy 77.65286 58.052791) (xy 77.743296 57.846616) (xy 77.798564 57.628368) (xy 77.817156 57.404) (xy 77.798564 57.179632) (xy 77.743296 56.961384) (xy 77.65286 56.755209) (xy 77.529722 56.566732) (xy 77.529719 56.566729) (xy 77.529715 56.566723) (xy 77.377243 56.401097) (xy 77.377238 56.401092) (xy 77.199577 56.262812) (xy 77.199578 56.262812) (xy 77.199576 56.262811) (xy 77.16307 56.243055) (xy 77.113479 56.193836) (xy 77.098371 56.125619) (xy 77.122541 56.060064) (xy 77.16307 56.024945) (xy 77.163084 56.024936) (xy 77.199576 56.005189) (xy 77.37724 55.866906) (xy 77.529722 55.701268) (xy 77.65286 55.512791) (xy 77.743296 55.306616) (xy 77.798564 55.088368) (xy 77.817156 54.864) (xy 77.798564 54.639632) (xy 77.743296 54.421384) (xy 77.65286 54.215209) (xy 77.529722 54.026732) (xy 77.529719 54.026729) (xy 77.529715 54.026723) (xy 77.377243 53.861097) (xy 77.377238 53.861092) (xy 77.199577 53.722812) (xy 77.199577 53.722811) (xy 77.156303 53.699393) (xy 77.106713 53.650173) (xy 77.091605 53.581957) (xy 77.115775 53.516401) (xy 77.144198 53.488763) (xy 77.325079 53.362108) (xy 77.492105 53.195082) (xy 77.6276 53.001578) (xy 77.727429 52.787492) (xy 77.727432 52.787486) (xy 77.784636 52.574) (xy 76.899572 52.574) (xy 76.922682 52.53804) (xy 76.964 52.397327) (xy 76.964 52.250673) (xy 76.922682 52.10996) (xy 76.899572 52.074) (xy 77.784636 52.074) (xy 77.784635 52.073999) (xy 77.727432 51.860513) (xy 77.727429 51.860507) (xy 77.6276 51.646422) (xy 77.627599 51.64642) (xy 77.492113 51.452926) (xy 77.492108 51.45292) (xy 77.325082 51.285894) (xy 77.131578 51.150399) (xy 76.917492 51.05057) (xy 76.917486 51.050567) (xy 76.704 50.993364) (xy 76.704 51.877505) (xy 76.599161 51.829627) (xy 76.490473 51.814) (xy 76.417527 51.814) (xy 76.308839 51.829627) (xy 76.204 51.877505) (xy 76.204 50.993364) (xy 76.203999 50.993364) (xy 75.990513 51.050567) (xy 75.990507 51.05057) (xy 75.776422 51.150399) (xy 75.77642 51.1504) (xy 75.582926 51.285886) (xy 75.58292 51.285891) (xy 75.415891 51.45292) (xy 75.415886 51.452926) (xy 75.2804 51.64642) (xy 75.280399 51.646422) (xy 75.18057 51.860507) (xy 75.180567 51.860513) (xy 75.123364 52.073999) (xy 75.123364 52.074) (xy 76.008428 52.074) (xy 75.985318 52.10996) (xy 75.944 52.250673) (xy 75.944 52.397327) (xy 75.985318 52.53804) (xy 76.008428 52.574) (xy 75.123364 52.574) (xy 75.180567 52.787486) (xy 75.18057 52.787492) (xy 75.280399 53.001578) (xy 75.415894 53.195082) (xy 75.582917 53.362105) (xy 75.763802 53.488763) (xy 75.807427 53.54334) (xy 75.814619 53.612839) (xy 75.783097 53.675193) (xy 75.751697 53.699392) (xy 75.708427 53.722809) (xy 75.708422 53.722812) (xy 75.530761 53.861092) (xy 75.530756 53.861097) (xy 75.378284 54.026723) (xy 75.378276 54.026734) (xy 75.25514 54.215207) (xy 75.164703 54.421385) (xy 75.109436 54.639628) (xy 75.109434 54.63964) (xy 75.090844 54.863994) (xy 75.090844 54.864005) (xy 75.109434 55.088359) (xy 75.109436 55.088371) (xy 75.164703 55.306614) (xy 75.25514 55.512792) (xy 75.378276 55.701265) (xy 75.378284 55.701276) (xy 75.530756 55.866902) (xy 75.53076 55.866906) (xy 75.708424 56.005189) (xy 75.708429 56.005191) (xy 75.708431 56.005193) (xy 75.74493 56.024946) (xy 75.79452 56.074165) (xy 75.809628 56.142382) (xy 75.785457 56.207937) (xy 75.74493 56.243054) (xy 75.708431 56.262806) (xy 75.708422 56.262812) (xy 75.530761 56.401092) (xy 75.530756 56.401097) (xy 75.378284 56.566723) (xy 75.378276 56.566734) (xy 75.25514 56.755207) (xy 75.164703 56.961385) (xy 75.109436 57.179628) (xy 75.109434 57.17964) (xy 75.090844 57.403994) (xy 75.090844 57.404005) (xy 75.109434 57.628359) (xy 75.109436 57.628371) (xy 75.164703 57.846614) (xy 75.25514 58.052792) (xy 75.378276 58.241265) (xy 75.378284 58.241276) (xy 75.530756 58.406902) (xy 75.53076 58.406906) (xy 75.708424 58.545189) (xy 75.708429 58.545191) (xy 75.708431 58.545193) (xy 75.74493 58.564946) (xy 75.79452 58.614165) (xy 75.809628 58.682382) (xy 75.785457 58.747937) (xy 75.74493 58.783054) (xy 75.708431 58.802806) (xy 75.708422 58.802812) (xy 75.530761 58.941092) (xy 75.530756 58.941097) (xy 75.378284 59.106723) (xy 75.378276 59.106734) (xy 75.25514 59.295207) (xy 75.164703 59.501385) (xy 75.109436 59.719628) (xy 75.109434 59.71964) (xy 75.090844 59.943994) (xy 75.090844 59.944005) (xy 68.072 59.944005) (xy 68.072 47.244005) (xy 75.090844 47.244005) (xy 75.109434 47.468359) (xy 75.109436 47.468371) (xy 75.164703 47.686614) (xy 75.25514 47.892792) (xy 75.378276 48.081265) (xy 75.378284 48.081276) (xy 75.530756 48.246902) (xy 75.530761 48.246907) (xy 75.568471 48.276258) (xy 75.708424 48.385189) (xy 75.708425 48.385189) (xy 75.708427 48.385191) (xy 75.788602 48.428579) (xy 75.906426 48.492342) (xy 76.119365 48.565444) (xy 76.341431 48.6025) (xy 76.566569 48.6025) (xy 76.788635 48.565444) (xy 77.001574 48.492342) (xy 77.199576 48.385189) (xy 77.37724 48.246906) (xy 77.504641 48.108513) (xy 77.529715 48.081276) (xy 77.529716 48.081274) (xy 77.529722 48.081268) (xy 77.65286 47.892791) (xy 77.66549 47.863998) (xy 81.655693 47.863998) (xy 81.657672 47.886639) (xy 81.657846 47.894829) (xy 81.656684 47.920688) (xy 81.656685 47.92069) (xy 81.667691 48.001946) (xy 81.668016 48.004864) (xy 81.670532 48.033615) (xy 81.674885 48.083371) (xy 81.681624 48.108523) (xy 81.683174 48.116243) (xy 81.687093 48.145173) (xy 81.687096 48.145183) (xy 81.711413 48.220023) (xy 81.712334 48.223134) (xy 81.731877 48.296066) (xy 81.731881 48.296078) (xy 81.744275 48.322659) (xy 81.747051 48.329705) (xy 81.757097 48.360621) (xy 81.766105 48.37736) (xy 81.792822 48.42701) (xy 81.794416 48.430187) (xy 81.824942 48.495651) (xy 81.824943 48.495653) (xy 81.824944 48.495654) (xy 81.843668 48.522396) (xy 81.847475 48.528574) (xy 81.864443 48.560105) (xy 81.864445 48.560108) (xy 81.909397 48.616475) (xy 81.911709 48.619567) (xy 81.951251 48.676038) (xy 81.951254 48.676041) (xy 81.976659 48.701446) (xy 81.981295 48.706633) (xy 82.005686 48.737218) (xy 82.057514 48.782499) (xy 82.060557 48.785344) (xy 82.106955 48.831743) (xy 82.106956 48.831744) (xy 82.106959 48.831746) (xy 82.106962 48.831749) (xy 82.138487 48.853822) (xy 82.139109 48.854258) (xy 82.144341 48.858357) (xy 82.176282 48.886263) (xy 82.232535 48.919872) (xy 82.236258 48.922283) (xy 82.27275 48.947835) (xy 82.287338 48.958051) (xy 82.287341 48.958052) (xy 82.287346 48.958056) (xy 82.32591 48.976038) (xy 82.331493 48.978997) (xy 82.37075 49.002453) (xy 82.42901 49.024317) (xy 82.433422 49.026171) (xy 82.486924 49.05112) (xy 82.531204 49.062984) (xy 82.536939 49.064824) (xy 82.566356 49.075864) (xy 82.582839 49.082051) (xy 82.640813 49.092571) (xy 82.645778 49.093685) (xy 82.699629 49.108115) (xy 82.748602 49.112399) (xy 82.75425 49.113157) (xy 82.793352 49.120253) (xy 82.805732 49.1225) (xy 82.805733 49.1225) (xy 82.861348 49.1225) (xy 82.866749 49.122735) (xy 82.89537 49.125239) (xy 82.918998 49.127307) (xy 82.918999 49.127307) (xy 82.918999 49.127306) (xy 82.919 49.127307) (xy 82.97231 49.122643) (xy 82.975504 49.1225) (xy 82.975522 49.1225) (xy 83.023625 49.118169) (xy 83.030391 49.117561) (xy 83.138353 49.108117) (xy 83.138357 49.108116) (xy 83.138371 49.108115) (xy 83.138383 49.108111) (xy 83.138902 49.10802) (xy 83.144136 49.107324) (xy 83.144622 49.107281) (xy 83.249335 49.078381) (xy 83.351076 49.05112) (xy 83.351089 49.051113) (xy 83.358029 49.048588) (xy 83.36272 49.047089) (xy 83.362993 49.047014) (xy 83.458019 49.001251) (xy 83.550654 48.958056) (xy 83.550663 48.958049) (xy 83.55535 48.955345) (xy 83.555421 48.955468) (xy 83.566206 48.949152) (xy 83.567093 48.948725) (xy 83.649868 48.888585) (xy 83.731038 48.831749) (xy 83.731951 48.830835) (xy 83.746752 48.818193) (xy 83.750363 48.815571) (xy 83.78199 48.782492) (xy 83.818902 48.743884) (xy 83.886746 48.676041) (xy 83.886746 48.67604) (xy 83.886749 48.676038) (xy 83.889476 48.672142) (xy 83.901428 48.657568) (xy 83.906912 48.651834) (xy 83.959809 48.571697) (xy 84.013056 48.495654) (xy 84.016538 48.488185) (xy 84.025436 48.472276) (xy 84.031709 48.462774) (xy 84.068216 48.37736) (xy 84.10612 48.296076) (xy 84.109145 48.284782) (xy 84.114896 48.268147) (xy 84.120743 48.25447) (xy 84.140711 48.166978) (xy 84.163115 48.083371) (xy 84.164807 48.064024) (xy 84.166126 48.055626) (xy 84.171151 48.033615) (xy 84.175036 47.947105) (xy 84.182307 47.864) (xy 84.182307 47.863998) (xy 86.505693 47.863998) (xy 86.507672 47.886639) (xy 86.507846 47.894829) (xy 86.506684 47.920688) (xy 86.506685 47.92069) (xy 86.517691 48.001946) (xy 86.518016 48.004864) (xy 86.520532 48.033615) (xy 86.524885 48.083371) (xy 86.531624 48.108523) (xy 86.533174 48.116243) (xy 86.537093 48.145173) (xy 86.537096 48.145183) (xy 86.561413 48.220023) (xy 86.562334 48.223134) (xy 86.581877 48.296066) (xy 86.581881 48.296078) (xy 86.594275 48.322659) (xy 86.597051 48.329705) (xy 86.607097 48.360621) (xy 86.616105 48.37736) (xy 86.642822 48.42701) (xy 86.644416 48.430187) (xy 86.674942 48.495651) (xy 86.674943 48.495653) (xy 86.674944 48.495654) (xy 86.693668 48.522396) (xy 86.697475 48.528574) (xy 86.714443 48.560105) (xy 86.714445 48.560108) (xy 86.759397 48.616475) (xy 86.761709 48.619567) (xy 86.801251 48.676038) (xy 86.801254 48.676041) (xy 86.826659 48.701446) (xy 86.831295 48.706633) (xy 86.855686 48.737218) (xy 86.907514 48.782499) (xy 86.910557 48.785344) (xy 86.956955 48.831743) (xy 86.956956 48.831744) (xy 86.956959 48.831746) (xy 86.956962 48.831749) (xy 86.988487 48.853822) (xy 86.989109 48.854258) (xy 86.994341 48.858357) (xy 87.026282 48.886263) (xy 87.082535 48.919872) (xy 87.086258 48.922283) (xy 87.12275 48.947835) (xy 87.137338 48.958051) (xy 87.137341 48.958052) (xy 87.137346 48.958056) (xy 87.17591 48.976038) (xy 87.181493 48.978997) (xy 87.22075 49.002453) (xy 87.27901 49.024317) (xy 87.283422 49.026171) (xy 87.336924 49.05112) (xy 87.381204 49.062984) (xy 87.386939 49.064824) (xy 87.416356 49.075864) (xy 87.432839 49.082051) (xy 87.490813 49.092571) (xy 87.495778 49.093685) (xy 87.549629 49.108115) (xy 87.598602 49.112399) (xy 87.60425 49.113157) (xy 87.643352 49.120253) (xy 87.655732 49.1225) (xy 87.655733 49.1225) (xy 87.711348 49.1225) (xy 87.716749 49.122735) (xy 87.74537 49.125239) (xy 87.768998 49.127307) (xy 87.768999 49.127307) (xy 87.768999 49.127306) (xy 87.769 49.127307) (xy 87.82231 49.122643) (xy 87.825504 49.1225) (xy 87.825522 49.1225) (xy 87.873625 49.118169) (xy 87.880391 49.117561) (xy 87.988353 49.108117) (xy 87.988357 49.108116) (xy 87.988371 49.108115) (xy 87.988383 49.108111) (xy 87.988902 49.10802) (xy 87.994136 49.107324) (xy 87.994622 49.107281) (xy 88.099335 49.078381) (xy 88.201076 49.05112) (xy 88.201089 49.051113) (xy 88.208029 49.048588) (xy 88.21272 49.047089) (xy 88.212993 49.047014) (xy 88.308019 49.001251) (xy 88.400654 48.958056) (xy 88.400663 48.958049) (xy 88.40535 48.955345) (xy 88.405421 48.955468) (xy 88.416206 48.949152) (xy 88.417093 48.948725) (xy 88.499868 48.888585) (xy 88.581038 48.831749) (xy 88.581951 48.830835) (xy 88.596752 48.818193) (xy 88.600363 48.815571) (xy 88.63199 48.782492) (xy 88.668902 48.743884) (xy 88.736746 48.676041) (xy 88.736746 48.67604) (xy 88.736749 48.676038) (xy 88.739476 48.672142) (xy 88.751428 48.657568) (xy 88.756912 48.651834) (xy 88.809809 48.571697) (xy 88.863056 48.495654) (xy 88.866538 48.488185) (xy 88.875436 48.472276) (xy 88.881709 48.462774) (xy 88.918216 48.37736) (xy 88.95612 48.296076) (xy 88.959145 48.284782) (xy 88.964896 48.268147) (xy 88.970743 48.25447) (xy 88.990711 48.166978) (xy 89.013115 48.083371) (xy 89.014807 48.064024) (xy 89.016126 48.055626) (xy 89.021151 48.033615) (xy 89.025036 47.947105) (xy 89.032307 47.864) (xy 89.030327 47.841368) (xy 89.030153 47.833173) (xy 89.031315 47.807309) (xy 89.020305 47.726042) (xy 89.019981 47.723125) (xy 89.016787 47.686616) (xy 89.013115 47.644629) (xy 89.006377 47.619483) (xy 89.004825 47.611753) (xy 89.003122 47.59919) (xy 89.000906 47.582825) (xy 88.976587 47.507982) (xy 88.975671 47.504889) (xy 88.96143 47.451741) (xy 88.956123 47.431933) (xy 88.956119 47.431923) (xy 88.943722 47.405336) (xy 88.940948 47.398296) (xy 88.930903 47.367379) (xy 88.930902 47.367377) (xy 88.930899 47.36737) (xy 88.895167 47.30097) (xy 88.893582 47.297811) (xy 88.868492 47.244005) (xy 92.870844 47.244005) (xy 92.889434 47.468359) (xy 92.889436 47.468371) (xy 92.944703 47.686614) (xy 93.03514 47.892792) (xy 93.158276 48.081265) (xy 93.158284 48.081276) (xy 93.310756 48.246902) (xy 93.310761 48.246907) (xy 93.348471 48.276258) (xy 93.488424 48.385189) (xy 93.488425 48.385189) (xy 93.488427 48.385191) (xy 93.568602 48.428579) (xy 93.686426 48.492342) (xy 93.899365 48.565444) (xy 94.121431 48.6025) (xy 94.346569 48.6025) (xy 94.568635 48.565444) (xy 94.781574 48.492342) (xy 94.979576 48.385189) (xy 95.15724 48.246906) (xy 95.284641 48.108513) (xy 95.309715 48.081276) (xy 95.309716 48.081274) (xy 95.309722 48.081268) (xy 95.43286 47.892791) (xy 95.523296 47.686616) (xy 95.578564 47.468368) (xy 95.581584 47.431923) (xy 95.597156 47.244005) (xy 95.597156 47.243994) (xy 95.578565 47.01964) (xy 95.578563 47.019628) (xy 95.54732 46.896254) (xy 95.523296 46.801384) (xy 95.43286 46.595209) (xy 95.309722 46.406732) (xy 95.309719 46.406729) (xy 95.309715 46.406723) (xy 95.157243 46.241097) (xy 95.157238 46.241092) (xy 95.008431 46.12527) (xy 94.979576 46.102811) (xy 94.94307 46.083055) (xy 94.893479 46.033836) (xy 94.878371 45.965619) (xy 94.902541 45.900064) (xy 94.94307 45.864945) (xy 94.943896 45.864498) (xy 94.979576 45.845189) (xy 95.15724 45.706906) (xy 95.27853 45.575151) (xy 95.309715 45.541276) (xy 95.309716 45.541274) (xy 95.309722 45.541268) (xy 95.43286 45.352791) (xy 95.523296 45.146616) (xy 95.578564 44.928368) (xy 95.579085 44.922083) (xy 95.597156 44.704005) (xy 95.597156 44.703994) (xy 95.578565 44.47964) (xy 95.578563 44.479628) (xy 95.556507 44.39253) (xy 95.523296 44.261384) (xy 95.43286 44.055209) (xy 95.415973 44.029362) (xy 95.309723 43.866734) (xy 95.309715 43.866723) (xy 95.157243 43.701097) (xy 95.157238 43.701092) (xy 94.979577 43.562812) (xy 94.979572 43.562808) (xy 94.78158 43.455661) (xy 94.781577 43.455659) (xy 94.781574 43.455658) (xy 94.781571 43.455657) (xy 94.781569 43.455656) (xy 94.568637 43.382556) (xy 94.346569 43.3455) (xy 94.121431 43.3455) (xy 93.899362 43.382556) (xy 93.68643 43.455656) (xy 93.686419 43.455661) (xy 93.488427 43.562808) (xy 93.488422 43.562812) (xy 93.310761 43.701092) (xy 93.310756 43.701097) (xy 93.158284 43.866723) (xy 93.158276 43.866734) (xy 93.03514 44.055207) (xy 92.944703 44.261385) (xy 92.889436 44.479628) (xy 92.889434 44.47964) (xy 92.870844 44.703994) (xy 92.870844 44.704005) (xy 92.889434 44.928359) (xy 92.889436 44.928371) (xy 92.944703 45.146614) (xy 93.03514 45.352792) (xy 93.158276 45.541265) (xy 93.158284 45.541276) (xy 93.310756 45.706902) (xy 93.310761 45.706907) (xy 93.346864 45.735007) (xy 93.488424 45.845189) (xy 93.488429 45.845191) (xy 93.488431 45.845193) (xy 93.52493 45.864946) (xy 93.57452 45.914165) (xy 93.589628 45.982382) (xy 93.565457 46.047937) (xy 93.52493 46.083054) (xy 93.488431 46.102806) (xy 93.488422 46.102812) (xy 93.310761 46.241092) (xy 93.310756 46.241097) (xy 93.158284 46.406723) (xy 93.158276 46.406734) (xy 93.03514 46.595207) (xy 92.944703 46.801385) (xy 92.889436 47.019628) (xy 92.889434 47.01964) (xy 92.870844 47.243994) (xy 92.870844 47.244005) (xy 88.868492 47.244005) (xy 88.863056 47.232347) (xy 88.863052 47.232341) (xy 88.844337 47.205613) (xy 88.840523 47.199424) (xy 88.823555 47.167892) (xy 88.778594 47.111513) (xy 88.776279 47.108417) (xy 88.73675 47.051963) (xy 88.71134 47.026553) (xy 88.706702 47.021364) (xy 88.682312 46.99078) (xy 88.630491 46.945505) (xy 88.627442 46.942655) (xy 88.581039 46.896251) (xy 88.548891 46.873741) (xy 88.543656 46.869641) (xy 88.511718 46.841737) (xy 88.455486 46.808139) (xy 88.451725 46.805704) (xy 88.41398 46.779275) (xy 88.400654 46.769944) (xy 88.38694 46.763549) (xy 88.3621 46.751965) (xy 88.356501 46.748997) (xy 88.325701 46.730596) (xy 88.31725 46.725547) (xy 88.258988 46.703681) (xy 88.254588 46.701833) (xy 88.222893 46.687053) (xy 88.201077 46.67688) (xy 88.201065 46.676876) (xy 88.156793 46.665013) (xy 88.151053 46.663172) (xy 88.10516 46.645948) (xy 88.054115 46.636684) (xy 88.047191 46.635428) (xy 88.042217 46.634312) (xy 87.988372 46.619885) (xy 87.97637 46.618834) (xy 87.939403 46.6156) (xy 87.933741 46.61484) (xy 87.898998 46.608536) (xy 87.882267 46.6055) (xy 87.882266 46.6055) (xy 87.826652 46.6055) (xy 87.82125 46.605264) (xy 87.792629 46.60276) (xy 87.769002 46.600693) (xy 87.768997 46.600693) (xy 87.715728 46.605353) (xy 87.712489 46.605499) (xy 87.657608 46.610438) (xy 87.549618 46.619885) (xy 87.549041 46.619987) (xy 87.543889 46.620672) (xy 87.543386 46.620717) (xy 87.543369 46.62072) (xy 87.438664 46.649618) (xy 87.336918 46.676881) (xy 87.329944 46.679418) (xy 87.325268 46.680912) (xy 87.325022 46.680979) (xy 87.325011 46.680984) (xy 87.229964 46.726755) (xy 87.137352 46.769941) (xy 87.132658 46.772651) (xy 87.132587 46.772529) (xy 87.121824 46.778833) (xy 87.120908 46.779274) (xy 87.120902 46.779277) (xy 87.038119 46.839423) (xy 86.956958 46.896254) (xy 86.956027 46.897185) (xy 86.941264 46.909793) (xy 86.937641 46.912425) (xy 86.937631 46.912434) (xy 86.869097 46.984115) (xy 86.801247 47.051966) (xy 86.801246 47.051967) (xy 86.798506 47.05588) (xy 86.786581 47.070419) (xy 86.781089 47.076163) (xy 86.781085 47.076169) (xy 86.728183 47.156313) (xy 86.674943 47.232347) (xy 86.674941 47.232352) (xy 86.671462 47.239812) (xy 86.662576 47.255702) (xy 86.656292 47.265222) (xy 86.656291 47.265224) (xy 86.61978 47.350644) (xy 86.581882 47.431917) (xy 86.58188 47.431923) (xy 86.578852 47.443222) (xy 86.573102 47.459854) (xy 86.567259 47.473525) (xy 86.567256 47.473533) (xy 86.547288 47.561021) (xy 86.524885 47.644626) (xy 86.524884 47.644632) (xy 86.523192 47.66397) (xy 86.521873 47.672366) (xy 86.516849 47.694385) (xy 86.512963 47.780894) (xy 86.505693 47.863996) (xy 86.505693 47.863998) (xy 84.182307 47.863998) (xy 84.180327 47.841368) (xy 84.180153 47.833173) (xy 84.181315 47.807309) (xy 84.170305 47.726042) (xy 84.169981 47.723125) (xy 84.166787 47.686616) (xy 84.163115 47.644629) (xy 84.156377 47.619483) (xy 84.154825 47.611753) (xy 84.153122 47.59919) (xy 84.150906 47.582825) (xy 84.126587 47.507982) (xy 84.125671 47.504889) (xy 84.11143 47.451741) (xy 84.106123 47.431933) (xy 84.106119 47.431923) (xy 84.093722 47.405336) (xy 84.090948 47.398296) (xy 84.080903 47.367379) (xy 84.080902 47.367377) (xy 84.080899 47.36737) (xy 84.045167 47.30097) (xy 84.043582 47.297811) (xy 84.013056 47.232347) (xy 84.013052 47.232341) (xy 83.994337 47.205613) (xy 83.990523 47.199424) (xy 83.973555 47.167892) (xy 83.928594 47.111513) (xy 83.926279 47.108417) (xy 83.88675 47.051963) (xy 83.86134 47.026553) (xy 83.856702 47.021364) (xy 83.832312 46.99078) (xy 83.780491 46.945505) (xy 83.777442 46.942655) (xy 83.731039 46.896251) (xy 83.698891 46.873741) (xy 83.693656 46.869641) (xy 83.661718 46.841737) (xy 83.605486 46.808139) (xy 83.601725 46.805704) (xy 83.56398 46.779275) (xy 83.550654 46.769944) (xy 83.53694 46.763549) (xy 83.5121 46.751965) (xy 83.506501 46.748997) (xy 83.475701 46.730596) (xy 83.46725 46.725547) (xy 83.408988 46.703681) (xy 83.404588 46.701833) (xy 83.372893 46.687053) (xy 83.351077 46.67688) (xy 83.351065 46.676876) (xy 83.306793 46.665013) (xy 83.301053 46.663172) (xy 83.25516 46.645948) (xy 83.204115 46.636684) (xy 83.197191 46.635428) (xy 83.192217 46.634312) (xy 83.138372 46.619885) (xy 83.12637 46.618834) (xy 83.089403 46.6156) (xy 83.083741 46.61484) (xy 83.048998 46.608536) (xy 83.032267 46.6055) (xy 83.032266 46.6055) (xy 82.976652 46.6055) (xy 82.97125 46.605264) (xy 82.942629 46.60276) (xy 82.919002 46.600693) (xy 82.918997 46.600693) (xy 82.865728 46.605353) (xy 82.862489 46.605499) (xy 82.807608 46.610438) (xy 82.699618 46.619885) (xy 82.699041 46.619987) (xy 82.693889 46.620672) (xy 82.693386 46.620717) (xy 82.693369 46.62072) (xy 82.588664 46.649618) (xy 82.486918 46.676881) (xy 82.479944 46.679418) (xy 82.475268 46.680912) (xy 82.475022 46.680979) (xy 82.475011 46.680984) (xy 82.379964 46.726755) (xy 82.287352 46.769941) (xy 82.282658 46.772651) (xy 82.282587 46.772529) (xy 82.271824 46.778833) (xy 82.270908 46.779274) (xy 82.270902 46.779277) (xy 82.188119 46.839423) (xy 82.106958 46.896254) (xy 82.106027 46.897185) (xy 82.091264 46.909793) (xy 82.087641 46.912425) (xy 82.087631 46.912434) (xy 82.019097 46.984115) (xy 81.951247 47.051966) (xy 81.951246 47.051967) (xy 81.948506 47.05588) (xy 81.936581 47.070419) (xy 81.931089 47.076163) (xy 81.931085 47.076169) (xy 81.878183 47.156313) (xy 81.824943 47.232347) (xy 81.824941 47.232352) (xy 81.821462 47.239812) (xy 81.812576 47.255702) (xy 81.806292 47.265222) (xy 81.806291 47.265224) (xy 81.76978 47.350644) (xy 81.731882 47.431917) (xy 81.73188 47.431923) (xy 81.728852 47.443222) (xy 81.723102 47.459854) (xy 81.717259 47.473525) (xy 81.717256 47.473533) (xy 81.697288 47.561021) (xy 81.674885 47.644626) (xy 81.674884 47.644632) (xy 81.673192 47.66397) (xy 81.671873 47.672366) (xy 81.666849 47.694385) (xy 81.662963 47.780894) (xy 81.655693 47.863996) (xy 81.655693 47.863998) (xy 77.66549 47.863998) (xy 77.743296 47.686616) (xy 77.798564 47.468368) (xy 77.801584 47.431923) (xy 77.817156 47.244005) (xy 77.817156 47.243994) (xy 77.798565 47.01964) (xy 77.798563 47.019628) (xy 77.76732 46.896254) (xy 77.743296 46.801384) (xy 77.65286 46.595209) (xy 77.529722 46.406732) (xy 77.529719 46.406729) (xy 77.529715 46.406723) (xy 77.377243 46.241097) (xy 77.377238 46.241092) (xy 77.228431 46.12527) (xy 77.199576 46.102811) (xy 77.16307 46.083055) (xy 77.113479 46.033836) (xy 77.098371 45.965619) (xy 77.122541 45.900064) (xy 77.16307 45.864945) (xy 77.163896 45.864498) (xy 77.199576 45.845189) (xy 77.37724 45.706906) (xy 77.49853 45.575151) (xy 77.529715 45.541276) (xy 77.529716 45.541274) (xy 77.529722 45.541268) (xy 77.65286 45.352791) (xy 77.743296 45.146616) (xy 77.798564 44.928368) (xy 77.799085 44.922083) (xy 77.806384 44.834) (xy 81.205673 44.834) (xy 81.210644 44.893994) (xy 81.212971 44.922083) (xy 81.216856 45.013543) (xy 81.216857 45.013552) (xy 81.22201 45.037461) (xy 81.22319 45.04541) (xy 81.224947 45.066617) (xy 81.224949 45.066629) (xy 81.247417 45.155353) (xy 81.26737 45.247935) (xy 81.275257 45.267561) (xy 81.277834 45.275466) (xy 81.282251 45.292907) (xy 81.320285 45.379616) (xy 81.356767 45.470404) (xy 81.366129 45.485608) (xy 81.370117 45.49322) (xy 81.376015 45.506668) (xy 81.429524 45.58857) (xy 81.482473 45.674565) (xy 81.48248 45.674574) (xy 81.489158 45.682161) (xy 81.499886 45.696267) (xy 81.503682 45.702077) (xy 81.503686 45.702083) (xy 81.572079 45.776377) (xy 81.640882 45.854552) (xy 81.640883 45.854553) (xy 81.64607 45.858741) (xy 81.659407 45.87124) (xy 81.661783 45.873822) (xy 81.713116 45.913775) (xy 81.743948 45.937772) (xy 81.791031 45.975789) (xy 81.827421 46.005173) (xy 81.827422 46.005173) (xy 81.827424 46.005175) (xy 81.830165 46.006706) (xy 81.83024 46.006748) (xy 81.845934 46.017152) (xy 81.845979 46.017187) (xy 81.845991 46.017195) (xy 81.902799 46.047937) (xy 81.940346 46.068256) (xy 82.03674 46.122105) (xy 82.036745 46.122106) (xy 82.036749 46.122109) (xy 82.03914 46.12319) (xy 82.046477 46.126448) (xy 82.046575 46.126226) (xy 82.051262 46.128281) (xy 82.051273 46.128287) (xy 82.15574 46.164151) (xy 82.262806 46.20198) (xy 82.263367 46.202076) (xy 82.268109 46.203081) (xy 82.272043 46.204078) (xy 82.272049 46.20408) (xy 82.384095 46.222777) (xy 82.49911 46.242499) (xy 82.499119 46.2425) (xy 82.735707 46.2425) (xy 82.735712 46.2425) (xy 82.768648 46.237003) (xy 82.792475 46.233028) (xy 82.797413 46.232406) (xy 82.850941 46.227851) (xy 82.857887 46.22726) (xy 82.857888 46.227259) (xy 82.857898 46.227259) (xy 82.910297 46.213614) (xy 82.915668 46.212469) (xy 82.965951 46.20408) (xy 83.023502 46.184322) (xy 83.027975 46.182973) (xy 83.089924 46.166844) (xy 83.136259 46.145898) (xy 83.141633 46.143767) (xy 83.186727 46.128287) (xy 83.243132 46.097761) (xy 83.247054 46.095816) (xy 83.308402 46.068086) (xy 83.347795 46.041459) (xy 83.352979 46.038314) (xy 83.392008 46.017195) (xy 83.392012 46.017193) (xy 83.392013 46.017192) (xy 83.392017 46.01719) (xy 83.445228 45.975772) (xy 83.448561 45.973353) (xy 83.507047 45.933825) (xy 83.539001 45.903198) (xy 83.543789 45.899058) (xy 83.57622 45.873818) (xy 83.624119 45.821784) (xy 83.626794 45.819056) (xy 83.680144 45.767925) (xy 83.704497 45.734996) (xy 83.708727 45.729877) (xy 83.729878 45.706902) (xy 83.734314 45.702083) (xy 83.774785 45.640135) (xy 83.776835 45.637189) (xy 83.777834 45.635837) (xy 83.822715 45.575157) (xy 83.839676 45.541514) (xy 83.843114 45.535549) (xy 83.861984 45.506669) (xy 83.893042 45.435861) (xy 83.894413 45.43295) (xy 83.930657 45.361067) (xy 83.940721 45.3282) (xy 83.943221 45.321466) (xy 83.955749 45.292907) (xy 83.975535 45.21477) (xy 83.976334 45.211909) (xy 84.000864 45.131815) (xy 84.00481 45.100994) (xy 84.006198 45.093684) (xy 84.013051 45.066626) (xy 84.02009 44.981672) (xy 84.031318 44.893995) (xy 84.030139 44.866249) (xy 84.030294 44.858525) (xy 84.032327 44.834) (xy 86.655673 44.834) (xy 86.660644 44.893994) (xy 86.662971 44.922083) (xy 86.666856 45.013543) (xy 86.666857 45.013552) (xy 86.67201 45.037461) (xy 86.67319 45.04541) (xy 86.674947 45.066617) (xy 86.674949 45.066629) (xy 86.697417 45.155353) (xy 86.71737 45.247935) (xy 86.725257 45.267561) (xy 86.727834 45.275466) (xy 86.732251 45.292907) (xy 86.770285 45.379616) (xy 86.806767 45.470404) (xy 86.816129 45.485608) (xy 86.820117 45.49322) (xy 86.826015 45.506668) (xy 86.879524 45.58857) (xy 86.932473 45.674565) (xy 86.93248 45.674574) (xy 86.939158 45.682161) (xy 86.949886 45.696267) (xy 86.953682 45.702077) (xy 86.953686 45.702083) (xy 87.022079 45.776377) (xy 87.090882 45.854552) (xy 87.090883 45.854553) (xy 87.09607 45.858741) (xy 87.109407 45.87124) (xy 87.111783 45.873822) (xy 87.163116 45.913775) (xy 87.193948 45.937772) (xy 87.241031 45.975789) (xy 87.277421 46.005173) (xy 87.277422 46.005173) (xy 87.277424 46.005175) (xy 87.280165 46.006706) (xy 87.28024 46.006748) (xy 87.295934 46.017152) (xy 87.295979 46.017187) (xy 87.295991 46.017195) (xy 87.352799 46.047937) (xy 87.390346 46.068256) (xy 87.48674 46.122105) (xy 87.486745 46.122106) (xy 87.486749 46.122109) (xy 87.48914 46.12319) (xy 87.496477 46.126448) (xy 87.496575 46.126226) (xy 87.501262 46.128281) (xy 87.501273 46.128287) (xy 87.60574 46.164151) (xy 87.712806 46.20198) (xy 87.713367 46.202076) (xy 87.718109 46.203081) (xy 87.722043 46.204078) (xy 87.722049 46.20408) (xy 87.834095 46.222777) (xy 87.94911 46.242499) (xy 87.949119 46.2425) (xy 88.185707 46.2425) (xy 88.185712 46.2425) (xy 88.218648 46.237003) (xy 88.242475 46.233028) (xy 88.247413 46.232406) (xy 88.300941 46.227851) (xy 88.307887 46.22726) (xy 88.307888 46.227259) (xy 88.307898 46.227259) (xy 88.360297 46.213614) (xy 88.365668 46.212469) (xy 88.415951 46.20408) (xy 88.473502 46.184322) (xy 88.477975 46.182973) (xy 88.539924 46.166844) (xy 88.586259 46.145898) (xy 88.591633 46.143767) (xy 88.636727 46.128287) (xy 88.693132 46.097761) (xy 88.697054 46.095816) (xy 88.758402 46.068086) (xy 88.797795 46.041459) (xy 88.802979 46.038314) (xy 88.842008 46.017195) (xy 88.842012 46.017193) (xy 88.842013 46.017192) (xy 88.842017 46.01719) (xy 88.895228 45.975772) (xy 88.898561 45.973353) (xy 88.957047 45.933825) (xy 88.989001 45.903198) (xy 88.993789 45.899058) (xy 89.02622 45.873818) (xy 89.074119 45.821784) (xy 89.076794 45.819056) (xy 89.130144 45.767925) (xy 89.154497 45.734996) (xy 89.158727 45.729877) (xy 89.179878 45.706902) (xy 89.184314 45.702083) (xy 89.224785 45.640135) (xy 89.226835 45.637189) (xy 89.227834 45.635837) (xy 89.272715 45.575157) (xy 89.289676 45.541514) (xy 89.293114 45.535549) (xy 89.311984 45.506669) (xy 89.343042 45.435861) (xy 89.344413 45.43295) (xy 89.380657 45.361067) (xy 89.390721 45.3282) (xy 89.393221 45.321466) (xy 89.405749 45.292907) (xy 89.425535 45.21477) (xy 89.426334 45.211909) (xy 89.450864 45.131815) (xy 89.45481 45.100994) (xy 89.456198 45.093684) (xy 89.463051 45.066626) (xy 89.47009 44.981672) (xy 89.481318 44.893995) (xy 89.480139 44.866249) (xy 89.480294 44.858525) (xy 89.482327 44.834) (xy 89.477355 44.774004) (xy 89.475028 44.745916) (xy 89.471144 44.65446) (xy 89.471143 44.654457) (xy 89.471143 44.654449) (xy 89.465987 44.63053) (xy 89.464808 44.622586) (xy 89.463051 44.601379) (xy 89.463051 44.601374) (xy 89.440582 44.512646) (xy 89.42063 44.420068) (xy 89.412735 44.400424) (xy 89.410167 44.392544) (xy 89.405749 44.375093) (xy 89.367714 44.288383) (xy 89.331233 44.197596) (xy 89.321867 44.182386) (xy 89.317882 44.174778) (xy 89.317102 44.173) (xy 89.311984 44.161331) (xy 89.258475 44.079429) (xy 89.205524 43.993431) (xy 89.205518 43.993424) (xy 89.205515 43.99342) (xy 89.198839 43.985834) (xy 89.188118 43.971739) (xy 89.184315 43.965919) (xy 89.184314 43.965917) (xy 89.11592 43.891622) (xy 89.047119 43.813449) (xy 89.047118 43.813448) (xy 89.047114 43.813444) (xy 89.041929 43.809258) (xy 89.028597 43.796765) (xy 89.02622 43.794182) (xy 88.944051 43.730227) (xy 88.860576 43.662825) (xy 88.860574 43.662823) (xy 88.860568 43.662819) (xy 88.85775 43.661245) (xy 88.84207 43.650851) (xy 88.84202 43.650812) (xy 88.842018 43.650811) (xy 88.842017 43.65081) (xy 88.747653 43.599743) (xy 88.694822 43.57023) (xy 88.651259 43.545894) (xy 88.648999 43.544873) (xy 88.641519 43.541551) (xy 88.641422 43.541773) (xy 88.636725 43.539712) (xy 88.532259 43.503848) (xy 88.425197 43.466021) (xy 88.425196 43.46602) (xy 88.425194 43.46602) (xy 88.425192 43.466019) (xy 88.425183 43.466017) (xy 88.424633 43.465923) (xy 88.419913 43.464922) (xy 88.415966 43.463923) (xy 88.415953 43.46392) (xy 88.415951 43.46392) (xy 88.303904 43.445222) (xy 88.18889 43.4255) (xy 88.188881 43.4255) (xy 88.185712 43.4255) (xy 87.952288 43.4255) (xy 87.952287 43.4255) (xy 87.895529 43.43497) (xy 87.890587 43.435592) (xy 87.85683 43.438465) (xy 87.8301 43.440741) (xy 87.830097 43.440741) (xy 87.777733 43.454376) (xy 87.772313 43.455532) (xy 87.722049 43.463919) (xy 87.664512 43.483671) (xy 87.660005 43.485029) (xy 87.614895 43.496776) (xy 87.598076 43.501156) (xy 87.598073 43.501157) (xy 87.59807 43.501158) (xy 87.551758 43.522092) (xy 87.546359 43.524233) (xy 87.531763 43.529244) (xy 87.501273 43.539712) (xy 87.444879 43.57023) (xy 87.44091 43.572198) (xy 87.379597 43.599914) (xy 87.379595 43.599915) (xy 87.340209 43.626535) (xy 87.335002 43.629693) (xy 87.323438 43.635951) (xy 87.295978 43.650812) (xy 87.24278 43.692218) (xy 87.239425 43.694653) (xy 87.209349 43.714981) (xy 87.180951 43.734176) (xy 87.180948 43.734179) (xy 87.149012 43.764786) (xy 87.144193 43.768952) (xy 87.111781 43.794181) (xy 87.11178 43.794182) (xy 87.063898 43.846193) (xy 87.061184 43.848962) (xy 87.007857 43.900073) (xy 86.983503 43.932999) (xy 86.97927 43.938123) (xy 86.953684 43.965918) (xy 86.953681 43.965922) (xy 86.913222 44.02785) (xy 86.911166 44.030806) (xy 86.865287 44.092839) (xy 86.865286 44.09284) (xy 86.848333 44.126463) (xy 86.844875 44.132463) (xy 86.826015 44.161332) (xy 86.794978 44.232089) (xy 86.793562 44.235096) (xy 86.757342 44.306933) (xy 86.757341 44.306934) (xy 86.74728 44.339786) (xy 86.744775 44.346537) (xy 86.732249 44.375094) (xy 86.732249 44.375095) (xy 86.712469 44.453203) (xy 86.711649 44.456137) (xy 86.687137 44.536178) (xy 86.687135 44.53619) (xy 86.683191 44.566986) (xy 86.681795 44.574335) (xy 86.67495 44.601367) (xy 86.674948 44.601379) (xy 86.667909 44.686327) (xy 86.656682 44.774003) (xy 86.656681 44.774004) (xy 86.657859 44.801731) (xy 86.657703 44.809485) (xy 86.655673 44.833995) (xy 86.655673 44.834) (xy 84.032327 44.834) (xy 84.027355 44.774004) (xy 84.025028 44.745916) (xy 84.021144 44.65446) (xy 84.021143 44.654457) (xy 84.021143 44.654449) (xy 84.015987 44.63053) (xy 84.014808 44.622586) (xy 84.013051 44.601379) (xy 84.013051 44.601374) (xy 83.990582 44.512646) (xy 83.97063 44.420068) (xy 83.962735 44.400424) (xy 83.960167 44.392544) (xy 83.955749 44.375093) (xy 83.917714 44.288383) (xy 83.881233 44.197596) (xy 83.871867 44.182386) (xy 83.867882 44.174778) (xy 83.867102 44.173) (xy 83.861984 44.161331) (xy 83.808475 44.079429) (xy 83.755524 43.993431) (xy 83.755518 43.993424) (xy 83.755515 43.99342) (xy 83.748839 43.985834) (xy 83.738118 43.971739) (xy 83.734315 43.965919) (xy 83.734314 43.965917) (xy 83.66592 43.891622) (xy 83.597119 43.813449) (xy 83.597118 43.813448) (xy 83.597114 43.813444) (xy 83.591929 43.809258) (xy 83.578597 43.796765) (xy 83.57622 43.794182) (xy 83.494051 43.730227) (xy 83.410576 43.662825) (xy 83.410574 43.662823) (xy 83.410568 43.662819) (xy 83.40775 43.661245) (xy 83.39207 43.650851) (xy 83.39202 43.650812) (xy 83.392018 43.650811) (xy 83.392017 43.65081) (xy 83.297653 43.599743) (xy 83.244822 43.57023) (xy 83.201259 43.545894) (xy 83.198999 43.544873) (xy 83.191519 43.541551) (xy 83.191422 43.541773) (xy 83.186725 43.539712) (xy 83.082259 43.503848) (xy 82.975197 43.466021) (xy 82.975196 43.46602) (xy 82.975194 43.46602) (xy 82.975192 43.466019) (xy 82.975183 43.466017) (xy 82.974633 43.465923) (xy 82.969913 43.464922) (xy 82.965966 43.463923) (xy 82.965953 43.46392) (xy 82.965951 43.46392) (xy 82.853904 43.445222) (xy 82.73889 43.4255) (xy 82.738881 43.4255) (xy 82.735712 43.4255) (xy 82.502288 43.4255) (xy 82.502287 43.4255) (xy 82.445529 43.43497) (xy 82.440587 43.435592) (xy 82.40683 43.438465) (xy 82.3801 43.440741) (xy 82.380097 43.440741) (xy 82.327733 43.454376) (xy 82.322313 43.455532) (xy 82.272049 43.463919) (xy 82.214512 43.483671) (xy 82.210005 43.485029) (xy 82.164895 43.496776) (xy 82.148076 43.501156) (xy 82.148073 43.501157) (xy 82.14807 43.501158) (xy 82.101758 43.522092) (xy 82.096359 43.524233) (xy 82.081763 43.529244) (xy 82.051273 43.539712) (xy 81.994879 43.57023) (xy 81.99091 43.572198) (xy 81.929597 43.599914) (xy 81.929595 43.599915) (xy 81.890209 43.626535) (xy 81.885002 43.629693) (xy 81.873438 43.635951) (xy 81.845978 43.650812) (xy 81.79278 43.692218) (xy 81.789425 43.694653) (xy 81.759349 43.714981) (xy 81.730951 43.734176) (xy 81.730948 43.734179) (xy 81.699012 43.764786) (xy 81.694193 43.768952) (xy 81.661781 43.794181) (xy 81.66178 43.794182) (xy 81.613898 43.846193) (xy 81.611184 43.848962) (xy 81.557857 43.900073) (xy 81.533503 43.932999) (xy 81.52927 43.938123) (xy 81.503684 43.965918) (xy 81.503681 43.965922) (xy 81.463222 44.02785) (xy 81.461166 44.030806) (xy 81.415287 44.092839) (xy 81.415286 44.09284) (xy 81.398333 44.126463) (xy 81.394875 44.132463) (xy 81.376015 44.161332) (xy 81.344978 44.232089) (xy 81.343562 44.235096) (xy 81.307342 44.306933) (xy 81.307341 44.306934) (xy 81.29728 44.339786) (xy 81.294775 44.346537) (xy 81.282249 44.375094) (xy 81.282249 44.375095) (xy 81.262469 44.453203) (xy 81.261649 44.456137) (xy 81.237137 44.536178) (xy 81.237135 44.53619) (xy 81.233191 44.566986) (xy 81.231795 44.574335) (xy 81.22495 44.601367) (xy 81.224948 44.601379) (xy 81.217909 44.686327) (xy 81.206682 44.774003) (xy 81.206681 44.774004) (xy 81.207859 44.801731) (xy 81.207703 44.809485) (xy 81.205673 44.833995) (xy 81.205673 44.834) (xy 77.806384 44.834) (xy 77.817156 44.704005) (xy 77.817156 44.703994) (xy 77.798565 44.47964) (xy 77.798563 44.479628) (xy 77.776507 44.39253) (xy 77.743296 44.261384) (xy 77.65286 44.055209) (xy 77.635973 44.029362) (xy 77.529723 43.866734) (xy 77.529715 43.866723) (xy 77.377243 43.701097) (xy 77.377238 43.701092) (xy 77.199577 43.562812) (xy 77.199572 43.562808) (xy 77.00158 43.455661) (xy 77.001577 43.455659) (xy 77.001574 43.455658) (xy 77.001571 43.455657) (xy 77.001569 43.455656) (xy 76.788637 43.382556) (xy 76.566569 43.3455) (xy 76.341431 43.3455) (xy 76.119362 43.382556) (xy 75.90643 43.455656) (xy 75.906419 43.455661) (xy 75.708427 43.562808) (xy 75.708422 43.562812) (xy 75.530761 43.701092) (xy 75.530756 43.701097) (xy 75.378284 43.866723) (xy 75.378276 43.866734) (xy 75.25514 44.055207) (xy 75.164703 44.261385) (xy 75.109436 44.479628) (xy 75.109434 44.47964) (xy 75.090844 44.703994) (xy 75.090844 44.704005) (xy 75.109434 44.928359) (xy 75.109436 44.928371) (xy 75.164703 45.146614) (xy 75.25514 45.352792) (xy 75.378276 45.541265) (xy 75.378284 45.541276) (xy 75.530756 45.706902) (xy 75.530761 45.706907) (xy 75.566864 45.735007) (xy 75.708424 45.845189) (xy 75.708429 45.845191) (xy 75.708431 45.845193) (xy 75.74493 45.864946) (xy 75.79452 45.914165) (xy 75.809628 45.982382) (xy 75.785457 46.047937) (xy 75.74493 46.083054) (xy 75.708431 46.102806) (xy 75.708422 46.102812) (xy 75.530761 46.241092) (xy 75.530756 46.241097) (xy 75.378284 46.406723) (xy 75.378276 46.406734) (xy 75.25514 46.595207) (xy 75.164703 46.801385) (xy 75.109436 47.019628) (xy 75.109434 47.01964) (xy 75.090844 47.243994) (xy 75.090844 47.244005) (xy 68.072 47.244005) (xy 68.072 41.234624) (xy 68.091685 41.167585) (xy 68.144489 41.12183) (xy 68.196 41.110624) (xy 98.681288 41.110624) (xy 98.687538 41.110624) ) ) ) (zone (net 0) (net_name "") (layer "B.Cu") (tstamp b05f7075-6f9f-49ec-8f30-b3487b51fc9a) (name "Isolation") (hatch edge 0.5) (connect_pads (clearance 0)) (min_thickness 0.25) (filled_areas_thickness no) (keepout (tracks not_allowed) (vias not_allowed) (pads not_allowed) (copperpour not_allowed) (footprints allowed)) (fill (thermal_gap 0.5) (thermal_bridge_width 0.5)) (polygon (pts (xy 68.072 41.834913) (xy 66.496087 41.834913) (xy 66.421 41.91) (xy 66.421 115.57) (xy 68.072 115.57) ) ) ) (group "" (id 6a09b925-815a-4b29-b992-dab2cbb56706) (members 1da1a168-bd0a-4369-96b1-ff2c97ba2547 6cb80317-d51c-493a-8fe1-1682bbaf86d9 70e73454-a612-45d2-9718-2ed416b07583 936d413b-cd00-4547-a6fb-8972dcde761d 9d0d1a3b-daa8-4bd2-888d-1269bdcc8376 b2065ef3-7d36-4942-9375-a2c4398d7c7e c80acafb-ba79-421c-b4dc-8fc151df3854 f69f4f8c-8340-4574-84ec-6106eaab5c3f ) ) (group "" (id a597ae64-66d2-4ba1-aefd-7ec423e2ecfc) (members 5fa1a16d-d491-44f1-9e28-3603334a9eee 61211557-9c80-40cb-8200-e7257e2e0bf5 6d238049-4184-465b-bb3e-c61bbbb9458e 7e0259d6-7738-4fe1-a7a9-733fcec259bb a8b71b2a-44cb-44ab-b18a-5a8632420d8a c708a42f-c186-4f73-8afe-1abba9c6e1f5 d9063032-5c3d-4fe3-90ea-9eed2451e774 e57a97ad-f511-4856-adde-f7f4096812b1 ) ) (group "" (id 021038f1-f65a-4029-8cbd-f7f21955b4b4) (members 31ca6c7f-a9ed-4d47-90c2-f2e9d1815901 f6220d85-02d7-46f9-ab19-dfbea523b9ec ) ) (group "" (id 3a2abb4d-584b-4f61-a4e2-9cc70fca45cb) (members 2682b2e2-ca4f-43bb-a888-1c2cdc98cd58 3f1ed5f7-07f3-4928-8134-2f6f2b4b0a93 4caa43a9-fa63-4b26-ba91-f748a16378d2 56949209-1f1c-4689-a3e7-d6e4d07987ba 62c5e98b-3356-465e-9104-078d73320fef 812153b4-a661-4671-b49d-76ef5744952d 8db8e59c-d177-4a47-853c-6445c5a2ee8b 9fe78667-e9db-480a-a2ef-4e2a68cb72ea abac7c28-8233-4786-9bd6-68988937551b ad6c83fc-f082-4e82-98ea-487f9818463d aea5593b-3dc0-45a6-ace0-c57b0e44e695 be70c03c-c94e-40d2-b997-6ca7207bba74 c0c36be9-56aa-45db-bbac-b7c6ee634728 c11c9a35-614a-42b8-8119-93ad30e65e43 c5383451-e798-427e-8631-6dd983e845c0 ecce7498-9f7b-43a0-b5e8-06db7e6d3727 efcdac77-c6f4-44d0-acb1-2052247934dc f08b7850-dde5-4b6f-b90c-a2b259f3263a f67d9a93-d170-4f1b-9559-d4a8eb51cf50 fb9d3d90-3689-43f5-ac73-8e6978234606 ) ) ) ================================================ FILE: pcb/v1.1/DeskHop_Rev1.kicad_pro ================================================ { "board": { "3dviewports": [], "design_settings": { "defaults": { "board_outline_line_width": 0.049999999999999996, "copper_line_width": 0.19999999999999998, "copper_text_italic": false, "copper_text_size_h": 1.5, "copper_text_size_v": 1.5, "copper_text_thickness": 0.3, "copper_text_upright": false, "courtyard_line_width": 0.049999999999999996, "dimension_precision": 4, "dimension_units": 3, "dimensions": { "arrow_length": 1270000, "extension_offset": 500000, "keep_text_aligned": true, "suppress_zeroes": false, "text_position": 0, "units_format": 1 }, "fab_line_width": 0.09999999999999999, "fab_text_italic": false, "fab_text_size_h": 1.0, "fab_text_size_v": 1.0, "fab_text_thickness": 0.15, "fab_text_upright": false, "other_line_width": 0.09999999999999999, "other_text_italic": false, "other_text_size_h": 1.0, "other_text_size_v": 1.0, "other_text_thickness": 0.15, "other_text_upright": false, "pads": { "drill": 1.02, "height": 1.7, "width": 1.7 }, "silk_line_width": 0.12, "silk_text_italic": false, "silk_text_size_h": 1.0, "silk_text_size_v": 1.0, "silk_text_thickness": 0.15, "silk_text_upright": false, "zones": { "45_degree_only": false, "min_clearance": 0.0 } }, "diff_pair_dimensions": [ { "gap": 0.0, "via_gap": 0.0, "width": 0.0 } ], "drc_exclusions": [ "footprint_type_mismatch|43470000|96770000|923600a8-420a-44ac-aaf2-10c0b26db2ed|00000000-0000-0000-0000-000000000000", "footprint_type_mismatch|48885523|68818249|19a1c803-61f3-45d9-8a9c-86d3c151ef97|00000000-0000-0000-0000-000000000000", "footprint_type_mismatch|79806536|96760000|38c68c5f-5977-448e-8ed0-d70962d9710a|00000000-0000-0000-0000-000000000000", "footprint_type_mismatch|85344000|68834000|00000000-0000-0000-0000-0000602a2a11|00000000-0000-0000-0000-000000000000", "items_not_allowed|67315520|45178990|66aa93c9-52ed-4c16-b909-0a437fb42a55|00000000-0000-0000-0000-000000000000", "items_not_allowed|67315520|45178990|e23f1ad3-e9fd-4475-a954-1ceba659afec|00000000-0000-0000-0000-000000000000" ], "meta": { "filename": "board_design_settings.json", "version": 2 }, "rule_severities": { "annular_width": "error", "clearance": "error", "connection_width": "warning", "copper_edge_clearance": "error", "copper_sliver": "warning", "courtyards_overlap": "error", "diff_pair_gap_out_of_range": "error", "diff_pair_uncoupled_length_too_long": "error", "drill_out_of_range": "error", "duplicate_footprints": "warning", "extra_footprint": "warning", "footprint": "error", "footprint_type_mismatch": "error", "hole_clearance": "error", "hole_near_hole": "error", "invalid_outline": "error", "isolated_copper": "warning", "item_on_disabled_layer": "error", "items_not_allowed": "error", "length_out_of_range": "error", "lib_footprint_issues": "warning", "lib_footprint_mismatch": "warning", "malformed_courtyard": "error", "microvia_drill_out_of_range": "error", "missing_courtyard": "ignore", "missing_footprint": "warning", "net_conflict": "warning", "npth_inside_courtyard": "ignore", "padstack": "error", "pth_inside_courtyard": "ignore", "shorting_items": "error", "silk_edge_clearance": "warning", "silk_over_copper": "warning", "silk_overlap": "warning", "skew_out_of_range": "error", "solder_mask_bridge": "error", "starved_thermal": "error", "text_height": "warning", "text_thickness": "warning", "through_hole_pad_without_hole": "error", "too_many_vias": "error", "track_dangling": "warning", "track_width": "error", "tracks_crossing": "error", "unconnected_items": "error", "unresolved_variable": "error", "via_dangling": "warning", "zones_intersect": "error" }, "rule_severitieslegacy_courtyards_overlap": true, "rule_severitieslegacy_no_courtyard_defined": false, "rules": { "allow_blind_buried_vias": false, "allow_microvias": false, "max_error": 0.005, "min_clearance": 0.25, "min_connection": 0.0, "min_copper_edge_clearance": 0.024999999999999998, "min_hole_clearance": 0.25, "min_hole_to_hole": 0.25, "min_microvia_diameter": 0.19999999999999998, "min_microvia_drill": 0.09999999999999999, "min_resolved_spokes": 2, "min_silk_clearance": 0.0, "min_text_height": 0.7999999999999999, "min_text_thickness": 0.08, "min_through_hole_diameter": 0.3, "min_track_width": 0.25, "min_via_annular_width": 0.049999999999999996, "min_via_diameter": 0.39999999999999997, "solder_mask_to_copper_clearance": 0.0, "use_height_for_length_calcs": true }, "teardrop_options": [ { "td_allow_use_two_tracks": true, "td_curve_segcount": 5, "td_on_pad_in_zone": false, "td_onpadsmd": true, "td_onroundshapesonly": false, "td_ontrackend": false, "td_onviapad": true } ], "teardrop_parameters": [ { "td_curve_segcount": 5, "td_height_ratio": 1.0, "td_length_ratio": 0.5, "td_maxheight": 2.0, "td_maxlen": 0.2, "td_target_name": "td_round_shape", "td_width_to_size_filter_ratio": 0.9 }, { "td_curve_segcount": 5, "td_height_ratio": 1.0, "td_length_ratio": 0.5, "td_maxheight": 2.0, "td_maxlen": 0.2, "td_target_name": "td_rect_shape", "td_width_to_size_filter_ratio": 0.9 }, { "td_curve_segcount": 5, "td_height_ratio": 1.0, "td_length_ratio": 0.5, "td_maxheight": 2.0, "td_maxlen": 0.2, "td_target_name": "td_track_end", "td_width_to_size_filter_ratio": 0.9 } ], "track_widths": [ 0.0, 0.3, 1.0 ], "via_dimensions": [ { "diameter": 0.0, "drill": 0.0 } ], "zones_allow_external_fillets": false, "zones_use_no_outline": true }, "layer_presets": [], "viewports": [] }, "boards": [], "cvpcb": { "equivalence_files": [] }, "erc": { "erc_exclusions": [], "meta": { "version": 0 }, "pin_map": [ [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2 ], [ 0, 2, 0, 1, 0, 0, 1, 0, 2, 2, 2, 2 ], [ 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 2 ], [ 0, 1, 0, 0, 0, 0, 1, 1, 2, 1, 1, 2 ], [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 ], [ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2 ], [ 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 2 ], [ 0, 2, 1, 2, 0, 0, 1, 0, 2, 2, 2, 2 ], [ 0, 2, 0, 1, 0, 0, 1, 0, 2, 0, 0, 2 ], [ 0, 2, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ] ], "rule_severities": { "bus_definition_conflict": "error", "bus_entry_needed": "error", "bus_to_bus_conflict": "error", "bus_to_net_conflict": "error", "conflicting_netclasses": "error", "different_unit_footprint": "error", "different_unit_net": "error", "duplicate_reference": "error", "duplicate_sheet_names": "error", "endpoint_off_grid": "warning", "extra_units": "error", "global_label_dangling": "warning", "hier_label_mismatch": "error", "label_dangling": "error", "lib_symbol_issues": "warning", "missing_bidi_pin": "warning", "missing_input_pin": "warning", "missing_power_pin": "error", "missing_unit": "warning", "multiple_net_names": "warning", "net_not_bus_member": "warning", "no_connect_connected": "warning", "no_connect_dangling": "warning", "pin_not_connected": "error", "pin_not_driven": "error", "pin_to_pin": "warning", "power_pin_not_driven": "error", "similar_labels": "warning", "simulation_model_issue": "error", "unannotated": "error", "unit_value_mismatch": "error", "unresolved_variable": "error", "wire_dangling": "error" } }, "libraries": { "pinned_footprint_libs": [], "pinned_symbol_libs": [] }, "meta": { "filename": "DeskHop_Rev1.kicad_pro", "version": 1 }, "net_settings": { "classes": [ { "bus_width": 12, "clearance": 0.2, "diff_pair_gap": 0.25, "diff_pair_via_gap": 0.25, "diff_pair_width": 0.2, "line_style": 0, "microvia_diameter": 0.3, "microvia_drill": 0.1, "name": "Default", "pcb_color": "rgba(0, 0, 0, 0.000)", "schematic_color": "rgba(0, 0, 0, 0.000)", "track_width": 0.5, "via_diameter": 0.8, "via_drill": 0.4, "wire_width": 6 } ], "meta": { "version": 3 }, "net_colors": null, "netclass_assignments": null, "netclass_patterns": [ { "netclass": "Default", "pattern": "GND" } ] }, "pcbnew": { "last_paths": { "gencad": "", "idf": "", "netlist": "DeskHop_Rev1.net", "specctra_dsn": "", "step": "DeskHop_v3_fusion.step", "vrml": "" }, "page_layout_descr_file": "" }, "schematic": { "annotate_start_num": 0, "drawing": { "dashed_lines_dash_length_ratio": 12.0, "dashed_lines_gap_length_ratio": 3.0, "default_line_thickness": 6.0, "default_text_size": 50.0, "field_names": [], "intersheets_ref_own_page": false, "intersheets_ref_prefix": "", "intersheets_ref_short": false, "intersheets_ref_show": false, "intersheets_ref_suffix": "", "junction_size_choice": 3, "label_size_ratio": 0.25, "pin_symbol_size": 0.0, "text_offset_ratio": 0.08 }, "legacy_lib_dir": "", "legacy_lib_list": [], "meta": { "version": 1 }, "net_format_name": "KiCad", "ngspice": { "fix_include_paths": true, "fix_passive_vals": false, "meta": { "version": 0 }, "model_mode": 0, "workbook_filename": "" }, "page_layout_descr_file": "", "plot_directory": "", "spice_adjust_passive_values": false, "spice_current_sheet_as_root": false, "spice_external_command": "spice \"%I\"", "spice_model_current_sheet_as_root": true, "spice_save_all_currents": false, "spice_save_all_voltages": false, "subpart_first_id": 65, "subpart_id_separator": 0 }, "sheets": [ [ "fa1c3e0e-91b1-4532-8b22-6d396d71c75b", "" ] ], "text_variables": {} } ================================================ FILE: pcb/v1.1/DeskHop_Rev1.kicad_sch ================================================ (kicad_sch (version 20230121) (generator eeschema) (uuid fa1c3e0e-91b1-4532-8b22-6d396d71c75b) (paper "A4") (title_block (title "DeskHop - Fast Keyboard/Mouse Switching Device") (date "2024-01-11") (rev "v1.1") (company "Hrvoje Čavrak") ) (lib_symbols (symbol "Connector:USB_A" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) (property "Reference" "J" (at -5.08 11.43 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "USB_A" (at -5.08 8.89 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "" (at 3.81 -1.27 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" " ~" (at 3.81 -1.27 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "connector USB" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "USB Type A connector" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "USB*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "USB_A_0_1" (rectangle (start -5.08 -7.62) (end 5.08 7.62) (stroke (width 0.254) (type default)) (fill (type background)) ) (circle (center -3.81 2.159) (radius 0.635) (stroke (width 0.254) (type default)) (fill (type outline)) ) (rectangle (start -1.524 4.826) (end -4.318 5.334) (stroke (width 0) (type default)) (fill (type outline)) ) (rectangle (start -1.27 4.572) (end -4.572 5.842) (stroke (width 0) (type default)) (fill (type none)) ) (circle (center -0.635 3.429) (radius 0.381) (stroke (width 0.254) (type default)) (fill (type outline)) ) (rectangle (start -0.127 -7.62) (end 0.127 -6.858) (stroke (width 0) (type default)) (fill (type none)) ) (polyline (pts (xy -3.175 2.159) (xy -2.54 2.159) (xy -1.27 3.429) (xy -0.635 3.429) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy -2.54 2.159) (xy -1.905 2.159) (xy -1.27 0.889) (xy 0 0.889) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 0.635 2.794) (xy 0.635 1.524) (xy 1.905 2.159) (xy 0.635 2.794) ) (stroke (width 0.254) (type default)) (fill (type outline)) ) (rectangle (start 0.254 1.27) (end -0.508 0.508) (stroke (width 0.254) (type default)) (fill (type outline)) ) (rectangle (start 5.08 -2.667) (end 4.318 -2.413) (stroke (width 0) (type default)) (fill (type none)) ) (rectangle (start 5.08 -0.127) (end 4.318 0.127) (stroke (width 0) (type default)) (fill (type none)) ) (rectangle (start 5.08 4.953) (end 4.318 5.207) (stroke (width 0) (type default)) (fill (type none)) ) ) (symbol "USB_A_1_1" (polyline (pts (xy -1.905 2.159) (xy 0.635 2.159) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (pin power_in line (at 7.62 5.08 180) (length 2.54) (name "VBUS" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 7.62 -2.54 180) (length 2.54) (name "D-" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 7.62 0 180) (length 2.54) (name "D+" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 0 -10.16 90) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "4" (effects (font (size 1.27 1.27)))) ) (pin passive line (at -2.54 -10.16 90) (length 2.54) (name "Shield" (effects (font (size 1.27 1.27)))) (number "5" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Connector_Generic:Conn_01x03" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) (property "Reference" "J" (at 0 5.08 0) (effects (font (size 1.27 1.27))) ) (property "Value" "Conn_01x03" (at 0 -5.08 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "connector" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "Connector*:*_1x??_*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "Conn_01x03_1_1" (rectangle (start -1.27 -2.413) (end 0 -2.667) (stroke (width 0.1524) (type default)) (fill (type none)) ) (rectangle (start -1.27 0.127) (end 0 -0.127) (stroke (width 0.1524) (type default)) (fill (type none)) ) (rectangle (start -1.27 2.667) (end 0 2.413) (stroke (width 0.1524) (type default)) (fill (type none)) ) (rectangle (start -1.27 3.81) (end 1.27 -3.81) (stroke (width 0.254) (type default)) (fill (type background)) ) (pin passive line (at -5.08 2.54 0) (length 3.81) (name "Pin_1" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin passive line (at -5.08 0 0) (length 3.81) (name "Pin_2" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) (pin passive line (at -5.08 -2.54 0) (length 3.81) (name "Pin_3" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Device:C" (pin_numbers hide) (pin_names (offset 0.254)) (in_bom yes) (on_board yes) (property "Reference" "C" (at 0.635 2.54 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "C" (at 0.635 -2.54 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "" (at 0.9652 -3.81 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "cap capacitor" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Unpolarized capacitor" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "C_*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "C_0_1" (polyline (pts (xy -2.032 -0.762) (xy 2.032 -0.762) ) (stroke (width 0.508) (type default)) (fill (type none)) ) (polyline (pts (xy -2.032 0.762) (xy 2.032 0.762) ) (stroke (width 0.508) (type default)) (fill (type none)) ) ) (symbol "C_1_1" (pin passive line (at 0 3.81 270) (length 2.794) (name "~" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin passive line (at 0 -3.81 90) (length 2.794) (name "~" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Device:C_Small" (pin_numbers hide) (pin_names (offset 0.254) hide) (in_bom yes) (on_board yes) (property "Reference" "C" (at 0.254 1.778 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "C_Small" (at 0.254 -2.032 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "capacitor cap" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Unpolarized capacitor, small symbol" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "C_*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "C_Small_0_1" (polyline (pts (xy -1.524 -0.508) (xy 1.524 -0.508) ) (stroke (width 0.3302) (type default)) (fill (type none)) ) (polyline (pts (xy -1.524 0.508) (xy 1.524 0.508) ) (stroke (width 0.3048) (type default)) (fill (type none)) ) ) (symbol "C_Small_1_1" (pin passive line (at 0 2.54 270) (length 2.032) (name "~" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin passive line (at 0 -2.54 90) (length 2.032) (name "~" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Device:R_Small" (pin_numbers hide) (pin_names (offset 0.254) hide) (in_bom yes) (on_board yes) (property "Reference" "R" (at 0.762 0.508 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "R_Small" (at 0.762 -1.016 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "R resistor" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Resistor, small symbol" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "R_*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "R_Small_0_1" (rectangle (start -0.762 1.778) (end 0.762 -1.778) (stroke (width 0.2032) (type default)) (fill (type none)) ) ) (symbol "R_Small_1_1" (pin passive line (at 0 2.54 270) (length 0.762) (name "~" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin passive line (at 0 -2.54 90) (length 0.762) (name "~" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Isolator:ADuM1201BR" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) (property "Reference" "U" (at -10.16 8.89 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "ADuM1201BR" (at -2.032 8.89 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 0 -10.16 0) (effects (font (size 1.27 1.27) italic) hide) ) (property "Datasheet" "https://www.analog.com/static/imported-files/data_sheets/ADuM1200_1201.pdf" (at 0 -2.54 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "2Ch Dual Digital Isolator 10Mbps" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Dual-Channel Digital Isolator, 10Mbps 50ns, bidirectional communication, 3V/5V level translation, SOIC-8" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "SOIC*3.9x4.9mm*P1.27mm*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "ADuM1201BR_0_1" (rectangle (start -10.16 7.62) (end 10.16 -7.62) (stroke (width 0.254) (type default)) (fill (type background)) ) (polyline (pts (xy -1.27 -4.445) (xy -1.27 -6.985) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy -1.27 -0.635) (xy -1.27 -3.175) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy -1.27 3.175) (xy -1.27 0.635) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy -1.27 6.985) (xy -1.27 4.445) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 1.27 -4.445) (xy 1.27 -6.985) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 1.27 -0.635) (xy 1.27 -3.175) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 1.27 3.175) (xy 1.27 0.635) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 1.27 6.985) (xy 1.27 4.445) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy -0.635 -1.27) (xy -0.635 -2.54) (xy 0.635 -1.905) (xy -0.635 -1.27) ) (stroke (width 0.254) (type default)) (fill (type none)) ) (polyline (pts (xy 0.635 2.54) (xy 0.635 1.27) (xy -0.635 1.905) (xy 0.635 2.54) ) (stroke (width 0.254) (type default)) (fill (type none)) ) ) (symbol "ADuM1201BR_1_1" (pin power_in line (at -12.7 5.08 0) (length 2.54) (name "VDD1" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin output line (at -12.7 2.54 0) (length 2.54) (name "VOA" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) (pin input line (at -12.7 -2.54 0) (length 2.54) (name "VIB" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -12.7 -5.08 0) (length 2.54) (name "GND1" (effects (font (size 1.27 1.27)))) (number "4" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 12.7 -5.08 180) (length 2.54) (name "GND2" (effects (font (size 1.27 1.27)))) (number "5" (effects (font (size 1.27 1.27)))) ) (pin output line (at 12.7 -2.54 180) (length 2.54) (name "VOB" (effects (font (size 1.27 1.27)))) (number "6" (effects (font (size 1.27 1.27)))) ) (pin input line (at 12.7 2.54 180) (length 2.54) (name "VIA" (effects (font (size 1.27 1.27)))) (number "7" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 12.7 5.08 180) (length 2.54) (name "VDD2" (effects (font (size 1.27 1.27)))) (number "8" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "MCU_RaspberryPi_and_Boards:Pico" (in_bom yes) (on_board yes) (property "Reference" "U" (at -13.97 27.94 0) (effects (font (size 1.27 1.27))) ) (property "Value" "Pico" (at 0 19.05 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "RPi_Pico:RPi_Pico_SMD_TH" (at 0 0 90) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "Pico_0_0" (text "Raspberry Pi Pico" (at 0 21.59 0) (effects (font (size 1.27 1.27))) ) ) (symbol "Pico_0_1" (rectangle (start -15.24 26.67) (end 15.24 -26.67) (stroke (width 0) (type default)) (fill (type background)) ) ) (symbol "Pico_1_1" (pin bidirectional line (at -17.78 24.13 0) (length 2.54) (name "GPIO0" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 1.27 0) (length 2.54) (name "GPIO7" (effects (font (size 1.27 1.27)))) (number "10" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -1.27 0) (length 2.54) (name "GPIO8" (effects (font (size 1.27 1.27)))) (number "11" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -3.81 0) (length 2.54) (name "GPIO9" (effects (font (size 1.27 1.27)))) (number "12" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -17.78 -6.35 0) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "13" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -8.89 0) (length 2.54) (name "GPIO10" (effects (font (size 1.27 1.27)))) (number "14" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -11.43 0) (length 2.54) (name "GPIO11" (effects (font (size 1.27 1.27)))) (number "15" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -13.97 0) (length 2.54) (name "GPIO12" (effects (font (size 1.27 1.27)))) (number "16" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -16.51 0) (length 2.54) (name "GPIO13" (effects (font (size 1.27 1.27)))) (number "17" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -17.78 -19.05 0) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "18" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -21.59 0) (length 2.54) (name "GPIO14" (effects (font (size 1.27 1.27)))) (number "19" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 21.59 0) (length 2.54) (name "GPIO1" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 -24.13 0) (length 2.54) (name "GPIO15" (effects (font (size 1.27 1.27)))) (number "20" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -24.13 180) (length 2.54) (name "GPIO16" (effects (font (size 1.27 1.27)))) (number "21" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -21.59 180) (length 2.54) (name "GPIO17" (effects (font (size 1.27 1.27)))) (number "22" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 -19.05 180) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "23" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -16.51 180) (length 2.54) (name "GPIO18" (effects (font (size 1.27 1.27)))) (number "24" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -13.97 180) (length 2.54) (name "GPIO19" (effects (font (size 1.27 1.27)))) (number "25" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -11.43 180) (length 2.54) (name "GPIO20" (effects (font (size 1.27 1.27)))) (number "26" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -8.89 180) (length 2.54) (name "GPIO21" (effects (font (size 1.27 1.27)))) (number "27" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 -6.35 180) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "28" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 -3.81 180) (length 2.54) (name "GPIO22" (effects (font (size 1.27 1.27)))) (number "29" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -17.78 19.05 0) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))) ) (pin input line (at 17.78 -1.27 180) (length 2.54) (name "RUN" (effects (font (size 1.27 1.27)))) (number "30" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 1.27 180) (length 2.54) (name "GPIO26_ADC0" (effects (font (size 1.27 1.27)))) (number "31" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 3.81 180) (length 2.54) (name "GPIO27_ADC1" (effects (font (size 1.27 1.27)))) (number "32" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 6.35 180) (length 2.54) (name "AGND" (effects (font (size 1.27 1.27)))) (number "33" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 8.89 180) (length 2.54) (name "GPIO28_ADC2" (effects (font (size 1.27 1.27)))) (number "34" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 11.43 180) (length 2.54) (name "ADC_VREF" (effects (font (size 1.27 1.27)))) (number "35" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 13.97 180) (length 2.54) (name "3V3" (effects (font (size 1.27 1.27)))) (number "36" (effects (font (size 1.27 1.27)))) ) (pin input line (at 17.78 16.51 180) (length 2.54) (name "3V3_EN" (effects (font (size 1.27 1.27)))) (number "37" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 17.78 19.05 180) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "38" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 21.59 180) (length 2.54) (name "VSYS" (effects (font (size 1.27 1.27)))) (number "39" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 16.51 0) (length 2.54) (name "GPIO2" (effects (font (size 1.27 1.27)))) (number "4" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 17.78 24.13 180) (length 2.54) (name "VBUS" (effects (font (size 1.27 1.27)))) (number "40" (effects (font (size 1.27 1.27)))) ) (pin input line (at -2.54 -29.21 90) (length 2.54) (name "SWCLK" (effects (font (size 1.27 1.27)))) (number "41" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at 0 -29.21 90) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "42" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at 2.54 -29.21 90) (length 2.54) (name "SWDIO" (effects (font (size 1.27 1.27)))) (number "43" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 13.97 0) (length 2.54) (name "GPIO3" (effects (font (size 1.27 1.27)))) (number "5" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 11.43 0) (length 2.54) (name "GPIO4" (effects (font (size 1.27 1.27)))) (number "6" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 8.89 0) (length 2.54) (name "GPIO5" (effects (font (size 1.27 1.27)))) (number "7" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -17.78 6.35 0) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "8" (effects (font (size 1.27 1.27)))) ) (pin bidirectional line (at -17.78 3.81 0) (length 2.54) (name "GPIO6" (effects (font (size 1.27 1.27)))) (number "9" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Mechanical:MountingHole_Pad" (pin_numbers hide) (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) (property "Reference" "H" (at 0 6.35 0) (effects (font (size 1.27 1.27))) ) (property "Value" "MountingHole_Pad" (at 0 4.445 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "mounting hole" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Mounting Hole with connection" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "MountingHole*Pad*" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "MountingHole_Pad_0_1" (circle (center 0 1.27) (radius 1.27) (stroke (width 1.27) (type default)) (fill (type none)) ) ) (symbol "MountingHole_Pad_1_1" (pin input line (at 0 -2.54 90) (length 2.54) (name "1" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "TPD4E1U06DBVR:TPD4E1U06DBVR" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) (property "Reference" "U" (at -1.27 8.89 0) (effects (font (size 1.27 1.27)) (justify left bottom)) ) (property "Value" "TPD4E1U06DBVR" (at -7.62 -10.16 0) (effects (font (size 1.27 1.27)) (justify left bottom)) ) (property "Footprint" "SOT95P280X145-6N" (at -8.89 12.7 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Datasheet" "SOT-23-6 Texas Instruments" (at -11.43 10.16 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Field4" "Quad Channel High Speed ESD Protection Device 6-SOT-23 -40 to 125" (at -30.48 16.51 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Field5" "Texas Instruments" (at -11.43 21.59 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Field6" "0.19 USD" (at -7.62 25.4 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Field7" "TPD4E1U06DBVR" (at -11.43 29.21 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Field8" "Good" (at -6.35 30.48 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "ki_locked" "" (at 0 0 0) (effects (font (size 1.27 1.27))) ) (symbol "TPD4E1U06DBVR_0_0" (polyline (pts (xy -7.62 -7.62) (xy -7.62 7.62) ) (stroke (width 0.4064) (type solid)) (fill (type none)) ) (polyline (pts (xy -7.62 7.62) (xy 7.62 7.62) ) (stroke (width 0.4064) (type solid)) (fill (type none)) ) (polyline (pts (xy 7.62 -7.62) (xy -7.62 -7.62) ) (stroke (width 0.4064) (type solid)) (fill (type none)) ) (polyline (pts (xy 7.62 7.62) (xy 7.62 -7.62) ) (stroke (width 0.4064) (type solid)) (fill (type none)) ) (pin bidirectional line (at -12.7 5.08 0) (length 5.08) (name "D1+" (effects (font (size 1.016 1.016)))) (number "1" (effects (font (size 1.016 1.016)))) ) (pin power_in line (at 12.7 -3.81 180) (length 5.08) (name "GND" (effects (font (size 1.016 1.016)))) (number "2" (effects (font (size 1.016 1.016)))) ) (pin bidirectional line (at 12.7 5.08 180) (length 5.08) (name "D2+" (effects (font (size 1.016 1.016)))) (number "3" (effects (font (size 1.016 1.016)))) ) (pin bidirectional line (at 12.7 2.54 180) (length 5.08) (name "D2-" (effects (font (size 1.016 1.016)))) (number "4" (effects (font (size 1.016 1.016)))) ) (pin no_connect line (at 12.7 -1.27 180) (length 5.08) (name "NC" (effects (font (size 1.016 1.016)))) (number "5" (effects (font (size 1.016 1.016)))) ) (pin bidirectional line (at -12.7 2.54 0) (length 5.08) (name "D1-" (effects (font (size 1.016 1.016)))) (number "6" (effects (font (size 1.016 1.016)))) ) ) ) (symbol "TPD4E1U06DBVR_1" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) (property "Reference" "U" (at -1.27 8.89 0) (effects (font (size 1.27 1.27)) (justify left bottom)) ) (property "Value" "TPD4E1U06DBVR" (at -7.62 -10.16 0) (effects (font (size 1.27 1.27)) (justify left bottom)) ) (property "Footprint" "SOT95P280X145-6N" (at -8.89 12.7 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Datasheet" "SOT-23-6 Texas Instruments" (at -11.43 10.16 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Field4" "Quad Channel High Speed ESD Protection Device 6-SOT-23 -40 to 125" (at -30.48 16.51 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Field5" "Texas Instruments" (at -11.43 21.59 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Field6" "0.19 USD" (at -7.62 25.4 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Field7" "TPD4E1U06DBVR" (at -11.43 29.21 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Field8" "Good" (at -6.35 30.48 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "ki_locked" "" (at 0 0 0) (effects (font (size 1.27 1.27))) ) (symbol "TPD4E1U06DBVR_1_0_0" (polyline (pts (xy -7.62 -7.62) (xy -7.62 7.62) ) (stroke (width 0.4064) (type solid)) (fill (type none)) ) (polyline (pts (xy -7.62 7.62) (xy 7.62 7.62) ) (stroke (width 0.4064) (type solid)) (fill (type none)) ) (polyline (pts (xy 7.62 -7.62) (xy -7.62 -7.62) ) (stroke (width 0.4064) (type solid)) (fill (type none)) ) (polyline (pts (xy 7.62 7.62) (xy 7.62 -7.62) ) (stroke (width 0.4064) (type solid)) (fill (type none)) ) (pin bidirectional line (at -12.7 5.08 0) (length 5.08) (name "D1+" (effects (font (size 1.016 1.016)))) (number "1" (effects (font (size 1.016 1.016)))) ) (pin power_in line (at 12.7 -3.81 180) (length 5.08) (name "GND" (effects (font (size 1.016 1.016)))) (number "2" (effects (font (size 1.016 1.016)))) ) (pin bidirectional line (at 12.7 5.08 180) (length 5.08) (name "D2+" (effects (font (size 1.016 1.016)))) (number "3" (effects (font (size 1.016 1.016)))) ) (pin bidirectional line (at 12.7 2.54 180) (length 5.08) (name "D2-" (effects (font (size 1.016 1.016)))) (number "4" (effects (font (size 1.016 1.016)))) ) (pin no_connect line (at 12.7 -1.27 180) (length 5.08) (name "NC" (effects (font (size 1.016 1.016)))) (number "5" (effects (font (size 1.016 1.016)))) ) (pin bidirectional line (at -12.7 2.54 0) (length 5.08) (name "D1-" (effects (font (size 1.016 1.016)))) (number "6" (effects (font (size 1.016 1.016)))) ) ) ) (symbol "power:GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) (property "Reference" "#PWR" (at 0 -6.35 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (at 0 -3.81 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "power-flag" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Power symbol creates a global label with name \"GND\" , ground" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "GND_0_1" (polyline (pts (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) ) (stroke (width 0) (type default)) (fill (type none)) ) ) (symbol "GND_1_1" (pin power_in line (at 0 0 270) (length 0) hide (name "GND" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "power:GND2" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) (property "Reference" "#PWR" (at 0 -6.35 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 0 -3.81 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "global power" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Power symbol creates a global label with name \"GND2\" , ground" (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "GND2_0_1" (polyline (pts (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) ) (stroke (width 0) (type default)) (fill (type none)) ) ) (symbol "GND2_1_1" (pin power_in line (at 0 0 270) (length 0) hide (name "GND2" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) ) ) ) (junction (at 121.92 73.66) (diameter 0) (color 0 0 0 0) (uuid 10d8fecd-dad0-43c4-9bcd-cd474bd58e14) ) (junction (at 232.41 95.25) (diameter 0) (color 0 0 0 0) (uuid 14181d32-f67b-4ab4-8327-18da90a9147f) ) (junction (at 190.5 119.38) (diameter 0) (color 0 0 0 0) (uuid 16ebe2c1-857c-4ee8-a6ca-cfc7039e3578) ) (junction (at 71.12 60.96) (diameter 0) (color 0 0 0 0) (uuid 28823946-5560-4194-9c6b-c1be914ba8f6) ) (junction (at 115.57 96.52) (diameter 0) (color 0 0 0 0) (uuid 2bea8c9c-9ec8-4187-a727-a3f81702b724) ) (junction (at 212.09 106.68) (diameter 0) (color 0 0 0 0) (uuid 2e505b6d-fba4-4727-b5ff-7ce2978c188f) ) (junction (at 200.66 138.43) (diameter 0) (color 0 0 0 0) (uuid 35c3f704-bdee-4249-ad86-0f5be3653631) ) (junction (at 71.12 119.38) (diameter 0) (color 0 0 0 0) (uuid 3b029412-9c88-43bd-a55b-dcbbe90da344) ) (junction (at 81.28 138.43) (diameter 0) (color 0 0 0 0) (uuid 3fd51828-7e18-475e-8e92-d571baf6473d) ) (junction (at 81.28 132.08) (diameter 0) (color 0 0 0 0) (uuid 46dccade-23fb-44bc-ab91-3885bd707f3b) ) (junction (at 190.5 95.25) (diameter 0) (color 0 0 0 0) (uuid 5fa727de-198a-4eb6-bff3-eb70d532c861) ) (junction (at 190.5 82.55) (diameter 0) (color 0 0 0 0) (uuid 64132fcf-d05d-4cfe-a6ba-a6a30fe0dd19) ) (junction (at 121.92 63.5) (diameter 0) (color 0 0 0 0) (uuid 69c7070b-8ae3-40f4-a673-7566031439b0) ) (junction (at 92.71 107.95) (diameter 0) (color 0 0 0 0) (uuid 6afbdb77-fe2a-4018-bb0f-c3b499e7549f) ) (junction (at 115.57 83.82) (diameter 0) (color 0 0 0 0) (uuid 6e19b04d-c5b3-4d79-9f6f-24afe88a0741) ) (junction (at 232.41 82.55) (diameter 0) (color 0 0 0 0) (uuid 723477e5-6197-497c-b5a8-baae39a46101) ) (junction (at 54.61 153.67) (diameter 0) (color 0 0 0 0) (uuid 7fc73b0a-282d-4061-b5d6-82c859e1c0cb) ) (junction (at 73.66 121.92) (diameter 0) (color 0 0 0 0) (uuid 8230ea96-8428-4ee1-917c-155aad8cca82) ) (junction (at 74.93 93.98) (diameter 0) (color 0 0 0 0) (uuid 884b6228-d012-4987-9d8c-a002db4144de) ) (junction (at 193.04 121.92) (diameter 0) (color 0 0 0 0) (uuid 8e7e3a86-1cdf-4c5e-9fe7-ddec772b772f) ) (junction (at 175.26 95.25) (diameter 0) (color 0 0 0 0) (uuid 8fe823d4-0e0b-4ee5-8284-d5e2096b9da8) ) (junction (at 115.57 73.66) (diameter 0) (color 0 0 0 0) (uuid 91e56d15-b2cb-4144-b60a-2bdd441299e6) ) (junction (at 190.5 57.15) (diameter 0) (color 0 0 0 0) (uuid a00519da-8cab-45c6-91f5-7b6ace5dd705) ) (junction (at 175.26 57.15) (diameter 0) (color 0 0 0 0) (uuid ad52a94c-9d2a-4249-b5c3-0cc42b6c1171) ) (junction (at 190.5 69.85) (diameter 0) (color 0 0 0 0) (uuid b29c390a-431c-40bc-9568-10f1ba4d309a) ) (junction (at 71.12 71.12) (diameter 0) (color 0 0 0 0) (uuid cb79e699-4b8d-48b2-9db9-fc643af1abb8) ) (junction (at 185.42 121.92) (diameter 0) (color 0 0 0 0) (uuid de0be19e-f5b9-4375-8ca6-5fd469b1e41a) ) (junction (at 66.04 121.92) (diameter 0) (color 0 0 0 0) (uuid e8e66e3a-c771-4b1d-b2c3-89b534a86f4e) ) (junction (at 200.66 132.08) (diameter 0) (color 0 0 0 0) (uuid fd7b96a2-ef0a-456b-a3c9-5917c02bc6e3) ) (junction (at 71.12 83.82) (diameter 0) (color 0 0 0 0) (uuid fdb21035-5f4b-40bf-a121-1471903777a6) ) (wire (pts (xy 175.26 95.25) (xy 175.26 99.06)) (stroke (width 0) (type default)) (uuid 04c6952c-b0b1-475d-9913-6b71d5232485) ) (wire (pts (xy 57.15 121.92) (xy 66.04 121.92)) (stroke (width 0) (type default)) (uuid 082e817c-2c92-4fdf-a097-1091a29ebcbc) ) (wire (pts (xy 185.42 119.38) (xy 185.42 121.92)) (stroke (width 0) (type default)) (uuid 09de0d52-a808-4a50-ad83-5246d2ea9b4c) ) (wire (pts (xy 190.5 82.55) (xy 190.5 95.25)) (stroke (width 0) (type default)) (uuid 0a9fc099-9ba9-4aef-bc83-10ad2d31f577) ) (wire (pts (xy 71.12 83.82) (xy 71.12 71.12)) (stroke (width 0) (type default)) (uuid 0bc8f8b9-d62a-461b-aed0-1600b27a7220) ) (wire (pts (xy 71.12 60.96) (xy 74.93 60.96)) (stroke (width 0) (type default)) (uuid 18c66b04-adf6-45cb-b819-e4646b3a2318) ) (wire (pts (xy 110.49 138.43) (xy 81.28 138.43)) (stroke (width 0) (type default)) (uuid 1c9c34f3-33b3-4b7b-a876-18f33a6db93f) ) (wire (pts (xy 193.04 100.33) (xy 194.31 100.33)) (stroke (width 0) (type default)) (uuid 1cecae9d-0169-4aff-b9af-d9b198bda8d9) ) (wire (pts (xy 68.58 93.98) (xy 74.93 93.98)) (stroke (width 0) (type default)) (uuid 1f40adbb-177b-44e1-8581-578ed8a162fd) ) (wire (pts (xy 71.12 99.06) (xy 71.12 111.76)) (stroke (width 0) (type default)) (uuid 1facac72-744d-49e7-90ff-2c80292ddede) ) (wire (pts (xy 177.8 46.99) (xy 175.26 46.99)) (stroke (width 0) (type default)) (uuid 1ff0df39-d211-48ff-be11-adfac92f2a28) ) (wire (pts (xy 190.5 95.25) (xy 194.31 95.25)) (stroke (width 0) (type default)) (uuid 21b9b7d6-341b-40ee-a1a8-79e2db91b0fd) ) (wire (pts (xy 121.92 73.66) (xy 144.78 73.66)) (stroke (width 0) (type default)) (uuid 228302f7-7d41-4551-b5a8-6b4653e3fc04) ) (wire (pts (xy 170.18 73.66) (xy 175.26 73.66)) (stroke (width 0) (type default)) (uuid 25e1f94a-cf09-4f40-92d3-b677b1945511) ) (wire (pts (xy 199.39 121.92) (xy 193.04 121.92)) (stroke (width 0) (type default)) (uuid 2753d5d7-7d66-43ae-b506-caebfb6e61e9) ) (wire (pts (xy 115.57 73.66) (xy 115.57 58.42)) (stroke (width 0) (type default)) (uuid 28aa4469-53ad-40d9-8e2d-bef636d34826) ) (wire (pts (xy 194.31 97.79) (xy 190.5 97.79)) (stroke (width 0) (type default)) (uuid 2912c152-3777-4fa4-a681-52fb69dade3d) ) (wire (pts (xy 110.49 128.27) (xy 105.41 128.27)) (stroke (width 0) (type default)) (uuid 299461ca-4000-46c0-b829-8dcab405b2f4) ) (wire (pts (xy 81.28 129.54) (xy 81.28 132.08)) (stroke (width 0) (type default)) (uuid 2a8ae914-cecd-41fc-aabc-4a9d649772bc) ) (wire (pts (xy 232.41 57.15) (xy 232.41 82.55)) (stroke (width 0) (type default)) (uuid 2c0b843f-54bf-4be5-8d5c-01c4e8a54a0c) ) (wire (pts (xy 90.17 106.68) (xy 90.17 109.22)) (stroke (width 0) (type default)) (uuid 2c172e78-a5c0-45b2-b47b-db529b5048d5) ) (wire (pts (xy 190.5 97.79) (xy 190.5 113.03)) (stroke (width 0) (type default)) (uuid 2c7b9604-d9b2-4c92-8976-4aad700d803f) ) (wire (pts (xy 200.66 132.08) (xy 200.66 138.43)) (stroke (width 0) (type default)) (uuid 31c239c7-8277-4a26-9e1d-0f31a48435cd) ) (wire (pts (xy 121.92 72.39) (xy 121.92 73.66)) (stroke (width 0) (type default)) (uuid 3511166d-debd-4fa9-991a-98c09da10c42) ) (wire (pts (xy 199.39 119.38) (xy 190.5 119.38)) (stroke (width 0) (type default)) (uuid 36628a15-460f-4818-b7bb-046eb73d0db2) ) (wire (pts (xy 81.28 138.43) (xy 81.28 139.7)) (stroke (width 0) (type default)) (uuid 375f39ab-1238-4c03-916d-a6e0af318ec1) ) (wire (pts (xy 177.8 149.86) (xy 177.8 156.21)) (stroke (width 0) (type default)) (uuid 3e4d56dc-09c9-466c-ba9a-40edb73df696) ) (wire (pts (xy 71.12 71.12) (xy 74.93 71.12)) (stroke (width 0) (type default)) (uuid 3fbeab58-dd08-4687-85b8-0b107f5270d9) ) (wire (pts (xy 229.87 62.23) (xy 237.49 62.23)) (stroke (width 0) (type default)) (uuid 40f9df01-3517-4f09-8474-93a3c0dbc63b) ) (wire (pts (xy 71.12 60.96) (xy 71.12 58.42)) (stroke (width 0) (type default)) (uuid 442f99bd-63f1-4966-a111-1522b8b9a78d) ) (wire (pts (xy 200.66 129.54) (xy 200.66 132.08)) (stroke (width 0) (type default)) (uuid 44bdc859-b3f9-49e6-b739-7e33be200e6d) ) (wire (pts (xy 71.12 71.12) (xy 71.12 60.96)) (stroke (width 0) (type default)) (uuid 4a8e9f02-a0ed-4103-9baa-be038e9f7493) ) (wire (pts (xy 73.66 101.6) (xy 73.66 111.76)) (stroke (width 0) (type default)) (uuid 4cfb6555-6033-4af7-84c5-2d6880a267af) ) (wire (pts (xy 71.12 116.84) (xy 71.12 119.38)) (stroke (width 0) (type default)) (uuid 4e1f0213-3f79-4a44-9d0b-e3a1b8af7d2c) ) (wire (pts (xy 190.5 69.85) (xy 190.5 82.55)) (stroke (width 0) (type default)) (uuid 51c45477-55a9-48c2-9165-09d38c1429da) ) (wire (pts (xy 115.57 83.82) (xy 115.57 96.52)) (stroke (width 0) (type default)) (uuid 53461775-ef4e-4d76-bdcc-ac7efca4f8dd) ) (wire (pts (xy 54.61 153.67) (xy 54.61 157.48)) (stroke (width 0) (type default)) (uuid 53949c80-1d52-4015-b0d1-be36407da35c) ) (wire (pts (xy 57.15 132.08) (xy 57.15 138.43)) (stroke (width 0) (type default)) (uuid 53c02c5c-1e6b-4338-bc80-377656f77cfb) ) (wire (pts (xy 194.31 82.55) (xy 190.5 82.55)) (stroke (width 0) (type default)) (uuid 5466620a-a63f-4035-8049-2f4ca0c6e62d) ) (wire (pts (xy 212.09 109.22) (xy 212.09 106.68)) (stroke (width 0) (type default)) (uuid 58ae6916-0c4f-412b-b403-bff6ac9f47c4) ) (wire (pts (xy 115.57 73.66) (xy 121.92 73.66)) (stroke (width 0) (type default)) (uuid 5b1d1b47-eb41-4f1c-b571-fc92f0ee9d52) ) (wire (pts (xy 176.53 71.12) (xy 170.18 71.12)) (stroke (width 0) (type default)) (uuid 5bc484b6-f645-4d88-909a-1e1fc14008fe) ) (wire (pts (xy 121.92 63.5) (xy 144.78 63.5)) (stroke (width 0) (type default)) (uuid 5d1ded84-f8a4-460a-b5f8-4b7b524dd3b2) ) (wire (pts (xy 74.93 83.82) (xy 71.12 83.82)) (stroke (width 0) (type default)) (uuid 5dcb82c2-b7f7-4aed-8a2d-0b65055e1f32) ) (wire (pts (xy 185.42 57.15) (xy 190.5 57.15)) (stroke (width 0) (type default)) (uuid 5f050328-edbd-4ce4-9510-acdf96f8e673) ) (wire (pts (xy 73.66 116.84) (xy 73.66 121.92)) (stroke (width 0) (type default)) (uuid 5f0dd4c7-f9b0-4512-b4e0-8f11a7213598) ) (wire (pts (xy 190.5 57.15) (xy 194.31 57.15)) (stroke (width 0) (type default)) (uuid 5f9862a9-f39a-498b-ad78-cad9ea0f5f33) ) (wire (pts (xy 176.53 121.92) (xy 185.42 121.92)) (stroke (width 0) (type default)) (uuid 5fd8c7c5-b2a3-4018-a556-d8c10a94d610) ) (wire (pts (xy 200.66 138.43) (xy 200.66 139.7)) (stroke (width 0) (type default)) (uuid 60af9923-5a90-4156-a792-439f1d095a6b) ) (wire (pts (xy 58.42 96.52) (xy 74.93 96.52)) (stroke (width 0) (type default)) (uuid 624de526-9a45-4f61-bd0a-46e21935fe0f) ) (wire (pts (xy 176.53 121.92) (xy 176.53 127)) (stroke (width 0) (type default)) (uuid 66111922-01aa-4a30-9ceb-5df0bae97953) ) (wire (pts (xy 121.92 64.77) (xy 121.92 63.5)) (stroke (width 0) (type default)) (uuid 69bd9aba-940c-4b80-bfbf-dec1f040812d) ) (wire (pts (xy 81.28 132.08) (xy 81.28 138.43)) (stroke (width 0) (type default)) (uuid 6e92617d-8a9d-4fb1-a920-996966596cf5) ) (wire (pts (xy 176.53 132.08) (xy 176.53 138.43)) (stroke (width 0) (type default)) (uuid 7ab9e415-5cdf-4711-af83-18a77d50fc5d) ) (wire (pts (xy 115.57 96.52) (xy 110.49 96.52)) (stroke (width 0) (type default)) (uuid 7f66fa7a-bff1-4ab8-8a65-0a72b65fea95) ) (wire (pts (xy 170.18 66.04) (xy 176.53 66.04)) (stroke (width 0) (type default)) (uuid 7f970666-2fda-42f2-b12a-210f0bce078a) ) (wire (pts (xy 110.49 58.42) (xy 115.57 58.42)) (stroke (width 0) (type default)) (uuid 7fefefd3-5bc3-4096-a07f-09c127329dcb) ) (wire (pts (xy 92.71 107.95) (xy 115.57 107.95)) (stroke (width 0) (type default)) (uuid 8211a031-b12a-4538-89fc-54a1b4a5439e) ) (wire (pts (xy 71.12 119.38) (xy 80.01 119.38)) (stroke (width 0) (type default)) (uuid 834e764c-1070-42a9-9619-edddb0847614) ) (wire (pts (xy 175.26 95.25) (xy 190.5 95.25)) (stroke (width 0) (type default)) (uuid 8923824f-3344-42fc-ba17-5cf88f2dc3ec) ) (wire (pts (xy 54.61 151.13) (xy 54.61 153.67)) (stroke (width 0) (type default)) (uuid 8a764314-c781-42e7-b569-43a9d8257125) ) (wire (pts (xy 175.26 46.99) (xy 175.26 57.15)) (stroke (width 0) (type default)) (uuid 8af487e2-a40c-4103-8278-21e7587589f9) ) (wire (pts (xy 68.58 91.44) (xy 74.93 91.44)) (stroke (width 0) (type default)) (uuid 91cb6da3-e659-467a-a19f-a1edeaccd169) ) (wire (pts (xy 229.87 100.33) (xy 237.49 100.33)) (stroke (width 0) (type default)) (uuid 94a90e97-3bf0-4bf9-8c52-327577d6eb47) ) (wire (pts (xy 74.93 99.06) (xy 71.12 99.06)) (stroke (width 0) (type default)) (uuid 95f156ce-f7aa-423b-b737-aeb976150fc6) ) (wire (pts (xy 73.66 101.6) (xy 74.93 101.6)) (stroke (width 0) (type default)) (uuid 974ae66f-7eca-4b2e-bbf4-410f8b56b30a) ) (wire (pts (xy 115.57 96.52) (xy 115.57 107.95)) (stroke (width 0) (type default)) (uuid 997cede4-8c4b-4a1f-9b3b-d3f0eb6b8677) ) (wire (pts (xy 175.26 73.66) (xy 175.26 95.25)) (stroke (width 0) (type default)) (uuid 9a9b4cc7-f731-4602-8382-e74dc2326088) ) (wire (pts (xy 110.49 63.5) (xy 121.92 63.5)) (stroke (width 0) (type default)) (uuid 9ceed721-5ae3-41bf-9a85-05ff0b43e216) ) (wire (pts (xy 190.5 118.11) (xy 190.5 119.38)) (stroke (width 0) (type default)) (uuid 9d6799e3-c5f2-404a-9035-22ae329b42aa) ) (wire (pts (xy 193.04 100.33) (xy 193.04 113.03)) (stroke (width 0) (type default)) (uuid 9e85cdf2-9b17-43ab-9a61-ab465059858d) ) (wire (pts (xy 143.51 66.04) (xy 144.78 66.04)) (stroke (width 0) (type default)) (uuid 9e9e9b60-83a8-4637-bab5-cadf05d70ff6) ) (wire (pts (xy 232.41 95.25) (xy 229.87 95.25)) (stroke (width 0) (type default)) (uuid a0c52005-8a8e-4558-9f8d-889208103a33) ) (wire (pts (xy 224.79 119.38) (xy 228.6 119.38)) (stroke (width 0) (type default)) (uuid a16f7136-acd0-478f-abec-9b4e6dce79b0) ) (wire (pts (xy 110.49 128.27) (xy 110.49 138.43)) (stroke (width 0) (type default)) (uuid a2c70150-8ec3-492d-8f37-628808bf5ac4) ) (wire (pts (xy 209.55 109.22) (xy 209.55 105.41)) (stroke (width 0) (type default)) (uuid a39e7793-1c77-45dd-9b29-792836644585) ) (wire (pts (xy 71.12 119.38) (xy 71.12 121.92)) (stroke (width 0) (type default)) (uuid a42992cc-0d48-4aed-b2ca-4d20e74c4d2a) ) (wire (pts (xy 176.53 138.43) (xy 200.66 138.43)) (stroke (width 0) (type default)) (uuid a4b64dd2-d142-462a-90ff-567bdca5d9bb) ) (wire (pts (xy 80.01 121.92) (xy 73.66 121.92)) (stroke (width 0) (type default)) (uuid a4fb6158-9ff5-41be-b419-aa97920e1ff5) ) (wire (pts (xy 92.71 109.22) (xy 92.71 107.95)) (stroke (width 0) (type default)) (uuid a5e53a6e-61cd-4888-b15e-655005daf8c4) ) (wire (pts (xy 66.04 118.11) (xy 66.04 121.92)) (stroke (width 0) (type default)) (uuid a674f699-67fa-401c-a78d-5426ac70c009) ) (wire (pts (xy 229.87 57.15) (xy 232.41 57.15)) (stroke (width 0) (type default)) (uuid a8e57268-b492-475a-ac82-71e42f943c95) ) (wire (pts (xy 228.6 128.27) (xy 224.79 128.27)) (stroke (width 0) (type default)) (uuid ae9f1ae6-f49b-46b8-9205-7de5f127b741) ) (wire (pts (xy 54.61 153.67) (xy 63.5 153.67)) (stroke (width 0) (type default)) (uuid b250b45a-838e-4850-a8b8-8055516d9fc8) ) (wire (pts (xy 194.31 69.85) (xy 190.5 69.85)) (stroke (width 0) (type default)) (uuid b2e071d4-967c-4b7a-a892-19379055613c) ) (wire (pts (xy 105.41 121.92) (xy 107.95 121.92)) (stroke (width 0) (type default)) (uuid b5d61424-d41d-4c6e-aaa5-50e74a2e3595) ) (wire (pts (xy 175.26 57.15) (xy 177.8 57.15)) (stroke (width 0) (type default)) (uuid b7161936-49ee-4ba3-a467-7475ebce424e) ) (wire (pts (xy 110.49 83.82) (xy 115.57 83.82)) (stroke (width 0) (type default)) (uuid b847cc93-9d7e-46d4-82f2-542a74444843) ) (wire (pts (xy 228.6 138.43) (xy 200.66 138.43)) (stroke (width 0) (type default)) (uuid bc0cb516-04a9-4f0d-ae22-5e3a25cef70d) ) (wire (pts (xy 170.18 57.15) (xy 175.26 57.15)) (stroke (width 0) (type default)) (uuid bd51e8de-9320-45d5-92ab-44d82ecfe219) ) (wire (pts (xy 110.49 53.34) (xy 114.3 53.34)) (stroke (width 0) (type default)) (uuid bf907065-956c-4c81-9aae-798df7f69b76) ) (wire (pts (xy 236.22 82.55) (xy 232.41 82.55)) (stroke (width 0) (type default)) (uuid c0207329-bb58-49bb-9867-e9a3a5540281) ) (wire (pts (xy 229.87 52.07) (xy 241.3 52.07)) (stroke (width 0) (type default)) (uuid c178f86d-a172-46e2-bb2d-942c50822b8f) ) (wire (pts (xy 71.12 58.42) (xy 74.93 58.42)) (stroke (width 0) (type default)) (uuid c7c9b217-a5e4-4fc9-95e8-437464007e59) ) (wire (pts (xy 57.15 121.92) (xy 57.15 127)) (stroke (width 0) (type default)) (uuid c801ed45-5e43-4e6a-b260-57ddcddba40f) ) (wire (pts (xy 92.71 107.95) (xy 92.71 106.68)) (stroke (width 0) (type default)) (uuid ca5b4757-da9c-4c8a-9168-687d8c855ff6) ) (wire (pts (xy 190.5 119.38) (xy 190.5 121.92)) (stroke (width 0) (type default)) (uuid cfde3e77-4ffc-482a-87a2-7eacdadd0cfd) ) (wire (pts (xy 170.18 57.15) (xy 170.18 63.5)) (stroke (width 0) (type default)) (uuid d21a035d-f7f8-4893-8bf1-db7d91b8494a) ) (wire (pts (xy 236.22 90.17) (xy 236.22 82.55)) (stroke (width 0) (type default)) (uuid d245b027-b484-4442-bfcd-f1b37eaf9f3f) ) (wire (pts (xy 212.09 106.68) (xy 232.41 106.68)) (stroke (width 0) (type default)) (uuid d62849d4-60aa-46b4-ac14-e29238d76caa) ) (wire (pts (xy 193.04 118.11) (xy 193.04 121.92)) (stroke (width 0) (type default)) (uuid d69c34ec-ae4e-4a1b-9357-47f000af4726) ) (wire (pts (xy 229.87 97.79) (xy 237.49 97.79)) (stroke (width 0) (type default)) (uuid d9a6840e-9e3a-4697-971e-914c4fa2f93b) ) (wire (pts (xy 228.6 128.27) (xy 228.6 138.43)) (stroke (width 0) (type default)) (uuid df039ad9-875a-40e7-9c64-6f00b2b54d2a) ) (wire (pts (xy 224.79 121.92) (xy 228.6 121.92)) (stroke (width 0) (type default)) (uuid e08407de-7ba6-470a-a33a-20ab13b7c1d0) ) (wire (pts (xy 232.41 106.68) (xy 232.41 95.25)) (stroke (width 0) (type default)) (uuid e12b1ff6-fc96-4444-9fb1-1b023e6ba011) ) (wire (pts (xy 74.93 93.98) (xy 77.47 93.98)) (stroke (width 0) (type default)) (uuid e3e22f39-dc96-4dae-8725-a47eb25744ac) ) (wire (pts (xy 214.63 109.22) (xy 214.63 105.41)) (stroke (width 0) (type default)) (uuid e5ac77e3-b305-4be0-bbeb-51a28110dd86) ) (wire (pts (xy 232.41 82.55) (xy 232.41 95.25)) (stroke (width 0) (type default)) (uuid e62fa27e-1629-49f5-9d73-1841d4017995) ) (wire (pts (xy 121.92 73.66) (xy 121.92 77.47)) (stroke (width 0) (type default)) (uuid e8764195-77bf-43cb-9fb5-ba372b721335) ) (wire (pts (xy 63.5 151.13) (xy 63.5 153.67)) (stroke (width 0) (type default)) (uuid ec5ca959-1933-4c89-b9ff-3929d4019f8f) ) (wire (pts (xy 229.87 82.55) (xy 232.41 82.55)) (stroke (width 0) (type default)) (uuid ed0a97df-ceb7-47ae-b9c7-c458caedb78b) ) (wire (pts (xy 115.57 83.82) (xy 115.57 73.66)) (stroke (width 0) (type default)) (uuid eed8fe17-92f0-4bf8-abe0-db562b9cd8eb) ) (wire (pts (xy 190.5 57.15) (xy 190.5 69.85)) (stroke (width 0) (type default)) (uuid efcf0d8c-14a6-45cc-90ed-1638d3ccd100) ) (wire (pts (xy 95.25 109.22) (xy 95.25 106.68)) (stroke (width 0) (type default)) (uuid f12d171c-3418-4c03-9f7d-907f8f78bd3f) ) (wire (pts (xy 143.51 71.12) (xy 144.78 71.12)) (stroke (width 0) (type default)) (uuid f1e553aa-f4fe-496c-b8d2-0adc2b447f03) ) (wire (pts (xy 58.42 96.52) (xy 58.42 105.41)) (stroke (width 0) (type default)) (uuid f5d1004c-16bb-4495-9e0d-c7e7ea9a784b) ) (wire (pts (xy 105.41 119.38) (xy 107.95 119.38)) (stroke (width 0) (type default)) (uuid f87e9f4f-fa19-462e-a230-36c00d8bcc4e) ) (wire (pts (xy 212.09 106.68) (xy 212.09 105.41)) (stroke (width 0) (type default)) (uuid fb6cafa8-7f3e-463c-abb0-677ffc7c9598) ) (wire (pts (xy 57.15 138.43) (xy 81.28 138.43)) (stroke (width 0) (type default)) (uuid ff74d034-cde5-4d63-9a7e-eef72f806fef) ) (text "Pico A - GPIO2 Pulled Down to GND\nAdded 27 ohm resistors to D+/D-\nAdded 4.7 uF caps to VBUS\nAdded TPD4E1U06 ESD protectors\nUpdated silkscreen soldering markings" (at 243.84 179.07 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid b0acfc5e-6dc9-4272-95d4-39a1d83cddf2) ) (label "OB-" (at 193.04 121.92 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid 0afc1882-8954-4b02-a085-9933daf63a9e) ) (label "OA+" (at 71.12 119.38 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid 5169d1e8-b1e0-4350-a87f-8b3a4ea36221) ) (label "OA-" (at 73.66 121.92 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid 68b7fc24-18b5-4259-9c33-1758d5e1c5b0) ) (label "AD+" (at 71.12 99.06 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid 8569c647-fe01-4317-a7d9-1d00ff0d8c6d) ) (label "OB+" (at 190.5 119.38 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid a7edbb88-ee0c-4b81-8c22-8f97888d86ad) ) (label "AD-" (at 73.66 110.49 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid bf0eee8d-9ca9-460f-8af3-e69822489fe7) ) (global_label "3V3_BUS2" (shape input) (at 177.8 46.99 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 1f20dca3-1889-4c09-abd3-5c9aac48feed) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 189.6257 46.99 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "OB+" (shape input) (at 228.6 119.38 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 349a00f7-71c4-46f5-b608-ae37a55e014e) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 235.1039 119.38 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "OA-" (shape input) (at 107.95 121.92 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 3bf36a86-8bbe-47bb-8e50-b1a70a6d9b78) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 114.2725 121.92 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART B RX" (shape input) (at 237.49 97.79 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 434d1c1d-e8a0-4dfe-8adc-38036bac230a) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 250.1624 97.79 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "VBUS2" (shape input) (at 241.3 52.07 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 54512599-9867-4e5f-a929-5a345f91a53c) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 249.7391 52.07 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART B RX" (shape input) (at 176.53 66.04 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 5710d9e7-0274-4ffc-b0f1-fa8a415e3ae3) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 189.2024 66.04 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "OB-" (shape input) (at 228.6 121.92 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 5afa7868-d3b8-40fa-8537-61f63a630b7e) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 235.1039 121.92 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART A RX" (shape input) (at 68.58 93.98 180) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify right)) (uuid 768861f9-136d-4fe1-ae92-372566e27050) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 56.089 93.98 0) (effects (font (size 1.27 1.27)) (justify right) hide) ) ) (global_label "UART A TX" (shape input) (at 143.51 66.04 180) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify right)) (uuid 77c1c6d7-6da5-466d-97f7-fba403ef6175) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 131.3214 66.04 0) (effects (font (size 1.27 1.27)) (justify right) hide) ) ) (global_label "UART B TX" (shape input) (at 176.53 71.12 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 7fc434fe-8e3b-465e-b976-bcf3ccfa983a) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 188.9 71.12 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART A RX" (shape input) (at 143.51 71.12 180) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify right)) (uuid 823b10f1-98bb-4e90-9e0c-1064208f423d) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 131.019 71.12 0) (effects (font (size 1.27 1.27)) (justify right) hide) ) ) (global_label "3V3_BUS2" (shape input) (at 237.49 62.23 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 8796789a-9b40-4203-83b0-3d28bbb3ce43) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 249.3157 62.23 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "VBUS2" (shape input) (at 185.42 119.38 90) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 8ce7f362-f4f2-4b75-8007-707fb2892c91) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 185.42 110.9409 90) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "VBUS1" (shape input) (at 114.3 53.34 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid 8e8693c5-20c1-4ac4-8ac3-465ef26657e1) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 122.7391 53.34 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART B TX" (shape input) (at 237.49 100.33 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid b8004e71-d620-4419-8f6d-7bf8466b6c13) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 249.86 100.33 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "OA+" (shape input) (at 107.95 119.38 0) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid cc5aafa8-eca0-4997-aff9-76164eed3cc8) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 114.2725 119.38 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "VBUS1" (shape input) (at 66.04 118.11 90) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify left)) (uuid ccf54633-d9ed-4d52-9429-73b4fd184d67) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 66.04 109.6709 90) (effects (font (size 1.27 1.27)) (justify left) hide) ) ) (global_label "UART A TX" (shape input) (at 68.58 91.44 180) (fields_autoplaced) (effects (font (size 1.27 1.27)) (justify right)) (uuid f5043c9e-1d93-4a5a-806e-6f8a296e9544) (property "Intersheetrefs" "${INTERSHEET_REFS}" (at 56.3914 91.44 0) (effects (font (size 1.27 1.27)) (justify right) hide) ) ) (symbol (lib_id "MCU_RaspberryPi_and_Boards:Pico") (at 92.71 77.47 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 00000000-0000-0000-0000-00006029bf78) (property "Reference" "U1" (at 92.71 46.609 0) (effects (font (size 1.27 1.27))) ) (property "Value" "Pico Primary" (at 92.71 48.9204 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "MCU_RaspberryPi_and_Boards:RPi_Pico_SMD_TH" (at 92.71 77.47 90) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 92.71 77.47 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 2faad433-0f2e-46dd-9b4a-2d603b67961b)) (pin "10" (uuid 98327c9f-462a-4b1c-add3-716c84c1ea34)) (pin "11" (uuid 72b15bed-91a9-4d4a-916b-df9fd750a6d8)) (pin "12" (uuid 3816d71e-d0cc-4e01-af1d-2c77b8f7ae6d)) (pin "13" (uuid 28548c6f-4e8a-40b6-88e1-e5219cfc46c4)) (pin "14" (uuid da9e98ed-e8d8-4708-ae59-b9b12abbebac)) (pin "15" (uuid 9bedbf44-a93a-48fc-aa08-0aee8aec4289)) (pin "16" (uuid 9a2c1b79-0318-46b2-9a93-2d4b7236737e)) (pin "17" (uuid 5209f977-7ae2-42c0-ac87-afd5299e0c6f)) (pin "18" (uuid 4979b3e4-1ef7-4c43-afb1-104e16f652e4)) (pin "19" (uuid bdfff1bc-e1e7-43de-be7e-40027a2c9d1b)) (pin "2" (uuid 06e256dc-b959-478c-af6e-9209fa3ad0a5)) (pin "20" (uuid 019014c5-9f2a-4d51-b6d3-e1decd14bd8c)) (pin "21" (uuid 462da927-6447-4c8b-89d4-e9e6935d0a38)) (pin "22" (uuid cafa53f7-3969-40eb-a587-834481e30299)) (pin "23" (uuid b363623e-b7c8-42ad-85a2-b53499e0bc2f)) (pin "24" (uuid 6ac28f08-6b6d-4f02-a405-1bceeeae7339)) (pin "25" (uuid c47ce474-f65f-47a9-8f7e-934d07176d78)) (pin "26" (uuid a6af9abb-35ca-400f-bc1d-1d5ba3649689)) (pin "27" (uuid fa6351cf-df0f-4255-9b14-78d91cb22446)) (pin "28" (uuid cc6834b8-e887-4938-9916-54fde5f8603a)) (pin "29" (uuid 2327d2dc-71e7-4251-8a95-893dee828bb1)) (pin "3" (uuid 8de46cfc-e2a0-4d69-b02e-6a9ae74d843a)) (pin "30" (uuid 621c399a-2d14-4e9d-9e89-2c3278c53e32)) (pin "31" (uuid 4bde6ec6-8493-4919-8d38-e484dc092216)) (pin "32" (uuid 8d4da508-1bde-4611-a498-f03c8a17be81)) (pin "33" (uuid f893187c-5a24-4779-b08e-a990b6af9166)) (pin "34" (uuid 4adfc371-f749-49a9-aa83-b50a965432a6)) (pin "35" (uuid b3cf395a-0317-4a09-91ab-5efe691d004d)) (pin "36" (uuid 1a79306d-8791-4f38-b46b-a695dfc33b62)) (pin "37" (uuid 5c286853-efa9-4653-93b2-f6089e6c7c3c)) (pin "38" (uuid e93f6760-94de-4374-9fd5-1e91236ea92f)) (pin "39" (uuid 33c37c73-e057-4dac-a606-49a4aac51f8b)) (pin "4" (uuid 40a65fe0-4394-45e2-8662-88b8f1b87054)) (pin "40" (uuid a124d4d2-dad9-46cd-8668-447fa9d6058b)) (pin "41" (uuid 8f1bd6b7-13c9-4ef4-aa08-52164545ec6f)) (pin "42" (uuid fc229e70-dcc4-4156-8722-15c2584e31e4)) (pin "43" (uuid eaa4c448-d952-4822-b497-c3583a39404c)) (pin "5" (uuid 2523225a-0b82-4513-ba8f-73d5d45d80d4)) (pin "6" (uuid 27dd2c61-6d11-4d0d-8e20-169f9799061e)) (pin "7" (uuid 2987fa57-b836-4dfd-9aac-a4cf7c01024d)) (pin "8" (uuid 973ffcfb-2235-405a-9bfe-5f7767e92c08)) (pin "9" (uuid 03a020e9-b628-4bf2-8110-740fd4b25332)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "U1") (unit 1) ) ) ) ) (symbol (lib_id "Mechanical:MountingHole_Pad") (at 177.8 147.32 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 018789e2-c44c-4899-984c-f44a168bc676) (property "Reference" "H1" (at 180.34 145.415 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "MountingHole_Pad" (at 180.34 147.955 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) (property "Footprint" "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopBottom" (at 177.8 147.32 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 177.8 147.32 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid e3828d64-c50c-497f-a64c-c788acf22cb5)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "H1") (unit 1) ) ) ) ) (symbol (lib_id "Connector:USB_A") (at 71.12 129.54 90) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 06ca7a46-083a-44e4-bd6d-8226f9b9eca9) (property "Reference" "J1" (at 72.39 135.89 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "Keyboard In" (at 62.23 135.89 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Connector_USB:USB_A_Molex_67643_Horizontal" (at 72.39 125.73 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" " ~" (at 72.39 125.73 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid b1ba8458-9353-4da8-8b9e-836d52bf1d7a)) (pin "2" (uuid 96de4e18-fe5e-4035-bc67-7ecb3ebf6abe)) (pin "3" (uuid ab17f95b-8f95-4af8-86c9-d810731a1c25)) (pin "4" (uuid 72f3ec16-779f-48dd-8e50-3907d6a7cfd9)) (pin "5" (uuid 4f78bb98-f14d-4682-81a5-17a334366cda)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "J1") (unit 1) ) ) ) ) (symbol (lib_id "power:GND2") (at 71.12 83.82 0) (mirror y) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 19b5b16a-132e-4c28-b184-c5182e5208ef) (property "Reference" "#PWR07" (at 71.12 90.17 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 71.12 88.9 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 71.12 83.82 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 71.12 83.82 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 77affa42-946f-4c89-8f63-6d1290245c37)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR07") (unit 1) ) ) ) ) (symbol (lib_id "Mechanical:MountingHole_Pad") (at 54.61 148.59 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 1c8614e8-4d82-4d74-b1f8-1b1a1ec90a13) (property "Reference" "H2" (at 57.15 146.685 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "MountingHole_Pad" (at 57.15 149.225 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) (property "Footprint" "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopBottom" (at 54.61 148.59 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 54.61 148.59 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid ecfbea2f-a352-4623-98c6-d73d79530070)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "H2") (unit 1) ) ) ) ) (symbol (lib_id "Isolator:ADuM1201BR") (at 157.48 68.58 0) (mirror y) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 24926d99-a33a-49d8-9b11-27c6c1201b83) (property "Reference" "U4" (at 157.48 55.88 0) (effects (font (size 1.27 1.27))) ) (property "Value" "ADuM1201BR" (at 157.48 58.42 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 157.48 78.74 0) (effects (font (size 1.27 1.27) italic) hide) ) (property "Datasheet" "https://www.analog.com/static/imported-files/data_sheets/ADuM1200_1201.pdf" (at 157.48 71.12 0) (effects (font (size 1.27 1.27)) hide) ) (pin "2" (uuid 1128d54a-ff72-4754-8fc1-3ad07b73ac5e)) (pin "3" (uuid 3b0dcb5a-d05e-4f13-97e9-b1b583dc5f50)) (pin "4" (uuid 33d30e64-0ac6-42b8-8de1-a351459d4701)) (pin "5" (uuid a91cb16e-a8d8-41cb-82e2-7182abb5b134)) (pin "7" (uuid 799a1350-353f-4110-9dd5-9e1542cae662)) (pin "6" (uuid b5ffb6a0-b32d-404c-ae05-0d82e84b17e1)) (pin "8" (uuid 49a16743-ea47-4362-84a5-05c0e0fd8f7e)) (pin "1" (uuid 385a9c1a-8e16-4136-9715-3b5fad170421)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "U4") (unit 1) ) ) ) ) (symbol (lib_name "TPD4E1U06DBVR_1") (lib_id "TPD4E1U06DBVR:TPD4E1U06DBVR") (at 212.09 124.46 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 2ff281c6-8c0c-4213-b04a-ae8a6bbc1264) (property "Reference" "U5" (at 212.09 124.46 0) (effects (font (size 1.27 1.27))) ) (property "Value" "TPD4E1U06DBVR" (at 212.09 134.62 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "Library:TPD4E1U06DBVR" (at 203.2 111.76 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Datasheet" "SOT-23-6 Texas Instruments" (at 200.66 114.3 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (pin "5" (uuid a8529571-870d-4199-b3f0-dc1500011ee5)) (pin "4" (uuid 62474ade-6a1e-47cb-ba75-c135d697ed4c)) (pin "6" (uuid 8bd37a79-dce5-4378-972b-8823f595d579)) (pin "3" (uuid abf306fd-5fb1-4ce3-9878-dad82e0843d0)) (pin "2" (uuid e4fe6887-1731-4e9f-bc62-eba83966158d)) (pin "1" (uuid 7643388f-a782-4e15-b0b7-00510432b87c)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "U5") (unit 1) ) ) ) ) (symbol (lib_id "Device:R_Small") (at 193.04 115.57 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 3865e1e3-42fd-4f0e-a588-f3a96ebd4314) (property "Reference" "R3" (at 195.58 114.3 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "27" (at 195.58 116.84 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 193.04 115.57 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 193.04 115.57 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 7f3113c7-453f-4db5-bc31-1f69b5cd8627)) (pin "2" (uuid 728003a6-88e2-48e8-8598-5b774becc574)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "R3") (unit 1) ) ) ) ) (symbol (lib_id "Device:C") (at 121.92 68.58 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 3c58f69e-1b44-4a9e-8696-820df6d6d00b) (property "Reference" "C2" (at 125.73 67.31 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "100n" (at 125.73 69.85 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 122.8852 72.39 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 121.92 68.58 0) (effects (font (size 1.27 1.27)) hide) ) (pin "2" (uuid 45852fe0-f033-4fa1-9155-f4f595867456)) (pin "1" (uuid 6d078a59-02c8-4547-b7bf-3add5671b2b5)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "C2") (unit 1) ) ) ) ) (symbol (lib_id "TPD4E1U06DBVR:TPD4E1U06DBVR") (at 92.71 124.46 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 48b9125f-6a3b-441e-8c3e-7a147ebd5b49) (property "Reference" "U3" (at 92.71 124.46 0) (effects (font (size 1.27 1.27))) ) (property "Value" "TPD4E1U06DBVR" (at 92.71 134.62 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "Library:TPD4E1U06DBVR" (at 83.82 111.76 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (property "Datasheet" "SOT-23-6 Texas Instruments" (at 81.28 114.3 0) (effects (font (size 1.27 1.27)) (justify left bottom) hide) ) (pin "2" (uuid 16ffd29d-26b2-4e74-acfc-fc2c4ce3d69d)) (pin "1" (uuid e771f469-0528-4be5-b69d-a9bc879bf5f8)) (pin "6" (uuid acac5f20-4648-4ad1-a034-ff27e6a3b10d)) (pin "3" (uuid fabfda4d-e722-47d9-8587-53cd540000cc)) (pin "4" (uuid 11a97b62-082e-4a6f-9209-51b55a819393)) (pin "5" (uuid a392fd3c-167a-4be4-a0ea-ee0a939d9d49)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "U3") (unit 1) ) ) ) ) (symbol (lib_id "Mechanical:MountingHole_Pad") (at 63.5 148.59 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 4a3d9b92-86b8-4f01-8c19-8709e0c6cbda) (property "Reference" "H3" (at 66.04 146.685 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "MountingHole_Pad" (at 66.04 149.225 0) (effects (font (size 1.27 1.27)) (justify left) hide) ) (property "Footprint" "MountingHole:MountingHole_2.7mm_M2.5_Pad_TopBottom" (at 63.5 148.59 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 63.5 148.59 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid c91af228-a1b6-49f1-9a99-6ad4ca88ca0f)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "H3") (unit 1) ) ) ) ) (symbol (lib_id "Device:R_Small") (at 73.66 114.3 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid 4d307e4a-4e5d-4351-822e-9ce1c1b8ff0c) (property "Reference" "R1" (at 76.2 113.03 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "27" (at 76.2 115.57 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 73.66 114.3 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 73.66 114.3 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 80ab9627-1b79-469d-b3ec-38a338a7de7d)) (pin "2" (uuid 19930023-f89c-4fbe-b800-6de663507c50)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "R1") (unit 1) ) ) ) ) (symbol (lib_id "Connector_Generic:Conn_01x03") (at 92.71 114.3 270) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 519499fb-6bca-4c43-b4dd-759210adcf79) (property "Reference" "J3" (at 97.282 111.0488 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "Debug1" (at 97.282 113.3602 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (at 92.71 114.3 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 92.71 114.3 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 0f66cee8-0874-4d6e-aeef-aa7ae5b256a6)) (pin "2" (uuid 985bde51-729d-4362-ad44-b1efa96c488a)) (pin "3" (uuid d1e056f5-0c1f-4440-9a08-e470b0e4236e)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "J3") (unit 1) ) ) ) ) (symbol (lib_id "power:GND2") (at 58.42 105.41 0) (mirror y) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 59e1abf1-fd3e-4571-a627-a61ae53aceb2) (property "Reference" "#PWR01" (at 58.42 111.76 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 58.42 110.49 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 58.42 105.41 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 58.42 105.41 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid c0197a26-6b50-4281-9e3e-3b5af7f5ee5f)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR01") (unit 1) ) ) ) ) (symbol (lib_id "Device:C_Small") (at 57.15 129.54 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 68c87fd8-9084-4121-8c05-2543bb307f35) (property "Reference" "C4" (at 53.34 127 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "4.7uF" (at 50.8 132.08 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 57.15 129.54 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 57.15 129.54 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid b70df296-5c74-4766-88a1-2aab879ce820)) (pin "2" (uuid 3081dfb6-bb72-4d6e-a451-dc1f2f316bd3)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "C4") (unit 1) ) ) ) ) (symbol (lib_id "Device:R_Small") (at 71.12 114.3 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 6cf27072-01e7-4eae-9cf7-3e057b9c44eb) (property "Reference" "R2" (at 67.31 113.03 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "27" (at 67.31 115.57 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 71.12 114.3 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 71.12 114.3 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 01f130e9-4531-4aa0-b30e-5960cbc836aa)) (pin "2" (uuid 60e65556-7001-402a-9b59-7a4cd1b4e2f5)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "R2") (unit 1) ) ) ) ) (symbol (lib_id "Connector_Generic:Conn_01x03") (at 212.09 114.3 270) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 6f0720d9-03ca-464d-8f40-cac693806bc9) (property "Reference" "J2" (at 216.662 111.0488 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "Debug2" (at 216.662 113.3602 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (at 212.09 114.3 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 212.09 114.3 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 9835f929-03d6-404a-b0fe-735c523b7add)) (pin "2" (uuid 8b742898-806f-4a0e-8834-5f9f1965ecb8)) (pin "3" (uuid 9b3483e8-e490-4c05-99e1-a348bbac0aad)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "J2") (unit 1) ) ) ) ) (symbol (lib_id "power:GND") (at 175.26 99.06 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid 8664ba9b-bb14-4c63-a14a-17f02ae3e989) (property "Reference" "#PWR010" (at 175.26 105.41 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (at 175.387 103.4542 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 175.26 99.06 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 175.26 99.06 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid be3e6d56-6440-42d4-b9b2-125f469995d4)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR010") (unit 1) ) ) ) ) (symbol (lib_id "power:GND2") (at 81.28 139.7 0) (mirror y) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid aaca2b73-3a07-4bd9-ac25-4eed391e0358) (property "Reference" "#PWR08" (at 81.28 146.05 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 81.28 144.78 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 81.28 139.7 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 81.28 139.7 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 098f4ba5-0d6d-4a2b-a9f6-751e0f3e22b7)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR08") (unit 1) ) ) ) ) (symbol (lib_id "Device:R_Small") (at 190.5 115.57 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid b470f47f-3fd1-4773-8c99-d7803ec222e7) (property "Reference" "R4" (at 186.69 114.3 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "27" (at 186.69 116.84 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 190.5 115.57 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 190.5 115.57 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 3b89752e-4c0a-4cd3-8cfd-6e420c59ca76)) (pin "2" (uuid cac87ece-dc19-41b7-9843-2c5495a52771)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "R4") (unit 1) ) ) ) ) (symbol (lib_id "power:GND") (at 177.8 156.21 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid b94b2b52-1a3c-4ca6-864f-5333d48b1f73) (property "Reference" "#PWR02" (at 177.8 162.56 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (at 177.927 160.6042 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 177.8 156.21 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 177.8 156.21 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid fc4bfe70-6228-4e0e-aee0-b6fd399502d2)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR02") (unit 1) ) ) ) ) (symbol (lib_id "Device:C_Small") (at 176.53 129.54 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid bcead397-8a0f-4e0b-8168-e2f526311d78) (property "Reference" "C3" (at 171.45 127 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "4.7uF" (at 170.18 132.08 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 176.53 129.54 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 176.53 129.54 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 600bf171-9178-4ed8-8893-12265751840c)) (pin "2" (uuid de55634d-de1b-4795-b2de-dc854d4ae3d8)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "C3") (unit 1) ) ) ) ) (symbol (lib_id "power:GND2") (at 121.92 77.47 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) (uuid c62951ce-67f1-46e0-b5a1-41f969d7cbf0) (property "Reference" "#PWR05" (at 121.92 83.82 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 121.92 82.55 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 121.92 77.47 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 121.92 77.47 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid c49fc880-2fca-4b6a-b360-80f25e957334)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR05") (unit 1) ) ) ) ) (symbol (lib_id "MCU_RaspberryPi_and_Boards:Pico") (at 212.09 76.2 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid cc3abbed-10c1-4aac-a096-50d15dfb6222) (property "Reference" "U2" (at 212.09 45.72 0) (effects (font (size 1.27 1.27))) ) (property "Value" "Pico Secondary" (at 212.09 48.26 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "MCU_RaspberryPi_and_Boards:RPi_Pico_SMD_TH" (at 212.09 76.2 90) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 212.09 76.2 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid cee276b1-6717-49ef-964a-71fe75e1e6bb)) (pin "10" (uuid d7103014-3d74-4920-966d-1029b2b93c9e)) (pin "11" (uuid 10c2fb1b-e234-43b8-9f5b-2305387f4fa4)) (pin "12" (uuid 1b8ff87c-1062-4e49-adba-f2b733b92d45)) (pin "13" (uuid f396f0a5-f03f-42c1-8bd1-9871530a2664)) (pin "14" (uuid 7e4819fa-0aee-4c89-b363-eecd981fc772)) (pin "15" (uuid c34c858e-b7a9-4b45-91a4-9ee6aa4834c6)) (pin "16" (uuid 02568be7-f7bf-43f4-9c1c-7e7c27201448)) (pin "17" (uuid 933f6e93-c4b7-4e8c-a893-3c1fe85328ff)) (pin "18" (uuid eb7d8a34-2760-4653-816e-40f5dad588ce)) (pin "19" (uuid ae717bf5-3dae-4d7b-bf2d-44e9e68686dc)) (pin "2" (uuid 8be63fc7-4721-46f9-89eb-a9ad021276df)) (pin "20" (uuid ff6bc733-bb53-4b73-9f82-a3f295366e76)) (pin "21" (uuid 15ba7c4b-8913-46bd-8b78-822816ec9a20)) (pin "22" (uuid 8a29f46f-90d1-4ea1-a0ff-962a70e24619)) (pin "23" (uuid 9e7027d2-cbcd-4f97-ac4e-1a4b28b925dc)) (pin "24" (uuid a57ea5de-7f52-40b0-88d1-8dfb1d6a0aec)) (pin "25" (uuid cdcc8887-cd45-41e9-a519-576d6692ca19)) (pin "26" (uuid 4e119fe1-0cba-40fe-a669-9c831e885c71)) (pin "27" (uuid 5da5b042-026d-4a2c-9f2f-3eeba008fa22)) (pin "28" (uuid 3898bdc7-a929-4327-933e-43a066629057)) (pin "29" (uuid f34f1779-c9d1-45b0-8c70-88e790359463)) (pin "3" (uuid c0a097c6-ef0e-4048-a041-11a5e38e041a)) (pin "30" (uuid d9adcf94-ccb9-4413-a684-717c4cc4e9c8)) (pin "31" (uuid f4391d66-d8d2-4604-90f7-c0458d038e45)) (pin "32" (uuid 39313f53-d41c-4ad4-9f80-ce1e67a26c92)) (pin "33" (uuid bbe3cbe5-d47d-447c-b021-b6b1bd01d68d)) (pin "34" (uuid 690ff88c-5bda-4f54-9885-d1623da7bbbf)) (pin "35" (uuid 02f8ab5b-8f03-420f-a78d-93fd7dc9e722)) (pin "36" (uuid 5509bd8f-4494-410e-b3ee-e4759a7cab4d)) (pin "37" (uuid 2a41989e-bd6e-4103-a9ee-529e49bef6ea)) (pin "38" (uuid 9fa51e14-b17a-4415-900b-0070fa8ee433)) (pin "39" (uuid e8586a87-8ece-48ab-ba8e-55b07b267229)) (pin "4" (uuid c835bd18-8b4c-4949-a19b-a1983b6646d0)) (pin "40" (uuid db6107b7-69e2-4915-b334-a71d5642bbdd)) (pin "41" (uuid e4c07034-245a-4f3a-a4b9-7436c6fccd81)) (pin "42" (uuid 5130ad9c-661c-410f-95d7-75af0a94b4cf)) (pin "43" (uuid 572d9a12-f857-4042-9787-cbaa4d45ecd2)) (pin "5" (uuid 3c11b8de-f15d-44a9-925f-446f96576f36)) (pin "6" (uuid 361ffedb-2b25-452f-93f4-bef8dfeecab1)) (pin "7" (uuid b1cba198-5e76-4b4f-83a9-9c004a97644c)) (pin "8" (uuid 1db7a24b-9de8-463b-98d5-34e0ef574474)) (pin "9" (uuid 87d7f07b-f443-4adf-aaac-7e926569f26d)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "U2") (unit 1) ) ) ) ) (symbol (lib_id "power:GND") (at 236.22 90.17 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid dc0f6b09-d44a-4cf1-bf6f-8e49a08f4c11) (property "Reference" "#PWR09" (at 236.22 96.52 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (at 236.347 94.5642 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 236.22 90.17 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 236.22 90.17 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid f8543e4a-4ca8-4264-b680-df4619e37ff4)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR09") (unit 1) ) ) ) ) (symbol (lib_id "power:GND2") (at 54.61 157.48 0) (mirror y) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid e563d0c0-fea7-4553-862e-c15e8c2a5c36) (property "Reference" "#PWR03" (at 54.61 163.83 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND2" (at 54.61 162.56 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 54.61 157.48 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 54.61 157.48 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid acd58da1-2150-407c-84cc-e6044098db45)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR03") (unit 1) ) ) ) ) (symbol (lib_id "power:GND") (at 200.66 139.7 0) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid e56bbfb1-09e6-417d-9f37-b7600be903c1) (property "Reference" "#PWR04" (at 200.66 146.05 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (at 200.787 144.0942 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (at 200.66 139.7 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (at 200.66 139.7 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 4e4d33b1-8a67-4c36-b99e-50e060ac3bd0)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "#PWR04") (unit 1) ) ) ) ) (symbol (lib_id "Connector:USB_A") (at 190.5 129.54 90) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid e72b3351-45d9-41aa-8df7-943302db5ce3) (property "Reference" "J4" (at 191.77 135.89 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "Mouse In" (at 181.61 133.35 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Connector_USB:USB_A_Molex_67643_Horizontal" (at 191.77 125.73 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" " ~" (at 191.77 125.73 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid cbfaf725-d8f4-4213-9b9e-af1090d99e8c)) (pin "2" (uuid ef7afb39-4a73-41fb-97ba-19cc060913c0)) (pin "3" (uuid 27412821-1996-47d7-8391-176857432b8f)) (pin "4" (uuid 55a01385-2eed-4429-984c-4473280f693b)) (pin "5" (uuid fb201432-9068-4d13-9e50-4a081bdb5ecc)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "J4") (unit 1) ) ) ) ) (symbol (lib_id "Device:C") (at 181.61 57.15 90) (unit 1) (in_bom yes) (on_board yes) (dnp no) (uuid fb534856-14b0-4379-bd15-7952c4f76624) (property "Reference" "C1" (at 186.69 55.88 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "100n" (at 186.69 53.34 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 185.42 56.1848 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (at 181.61 57.15 0) (effects (font (size 1.27 1.27)) hide) ) (pin "2" (uuid 8e699897-70d5-4d70-80de-23bf721f11d8)) (pin "1" (uuid 606d42c5-e2d5-4b61-9257-760962ef0773)) (instances (project "DeskHop_Rev1" (path "/fa1c3e0e-91b1-4532-8b22-6d396d71c75b" (reference "C1") (unit 1) ) ) ) ) (sheet_instances (path "/" (page "1")) ) ) ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-B_Cu.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-09-14T16:33:58+02:00*% %TF.ProjectId,DeskHop_Rev1,4465736b-486f-4705-9f52-6576312e6b69,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Copper,L2,Bot*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-09-14 16:33:58* %MOMM*% %LPD*% G01* G04 APERTURE LIST* %TA.AperFunction,ComponentPad*% %ADD10O,1.700000X1.700000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD11R,1.700000X1.700000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD12R,1.600000X1.500000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD13C,1.600000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD14C,3.000000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD15C,3.100000*% %TD*% %TA.AperFunction,ConnectorPad*% %ADD16C,5.400000*% %TD*% G04 APERTURE END LIST* D10* %TO.P,U1,1,GPIO0*% %TO.N,unconnected-(U1-GPIO0-Pad1)*% X76454000Y-44704000D03* %TO.P,U1,2,GPIO1*% %TO.N,unconnected-(U1-GPIO1-Pad2)*% X76454000Y-47244000D03* D11* %TO.P,U1,3,GND*% %TO.N,GND2*% X76454000Y-49784000D03* D10* %TO.P,U1,4,GPIO2*% X76454000Y-52324000D03* %TO.P,U1,5,GPIO3*% %TO.N,unconnected-(U1-GPIO3-Pad5)*% X76454000Y-54864000D03* %TO.P,U1,6,GPIO4*% %TO.N,unconnected-(U1-GPIO4-Pad6)*% X76454000Y-57404000D03* %TO.P,U1,7,GPIO5*% %TO.N,unconnected-(U1-GPIO5-Pad7)*% X76454000Y-59944000D03* D11* %TO.P,U1,8,GND*% %TO.N,GND2*% X76454000Y-62484000D03* D10* %TO.P,U1,9,GPIO6*% %TO.N,unconnected-(U1-GPIO6-Pad9)*% X76454000Y-65024000D03* %TO.P,U1,10,GPIO7*% %TO.N,unconnected-(U1-GPIO7-Pad10)*% X76454000Y-67564000D03* %TO.P,U1,11,GPIO8*% %TO.N,unconnected-(U1-GPIO8-Pad11)*% X76454000Y-70104000D03* %TO.P,U1,12,GPIO9*% %TO.N,unconnected-(U1-GPIO9-Pad12)*% X76454000Y-72644000D03* D11* %TO.P,U1,13,GND*% %TO.N,GND2*% X76454000Y-75184000D03* D10* %TO.P,U1,14,GPIO10*% %TO.N,unconnected-(U1-GPIO10-Pad14)*% X76454000Y-77724000D03* %TO.P,U1,15,GPIO11*% %TO.N,unconnected-(U1-GPIO11-Pad15)*% X76454000Y-80264000D03* %TO.P,U1,16,GPIO12*% %TO.N,UART A TX*% X76454000Y-82804000D03* %TO.P,U1,17,GPIO13*% %TO.N,UART A RX*% X76454000Y-85344000D03* D11* %TO.P,U1,18,GND*% %TO.N,GND2*% X76454000Y-87884000D03* D10* %TO.P,U1,19,GPIO14*% %TO.N,/AD+*% X76454000Y-90424000D03* %TO.P,U1,20,GPIO15*% %TO.N,/AD-*% X76454000Y-92964000D03* %TO.P,U1,21,GPIO16*% %TO.N,unconnected-(U1-GPIO16-Pad21)*% X94234000Y-92964000D03* %TO.P,U1,22,GPIO17*% %TO.N,unconnected-(U1-GPIO17-Pad22)*% X94234000Y-90424000D03* D11* %TO.P,U1,23,GND*% %TO.N,GND2*% X94234000Y-87884000D03* D10* %TO.P,U1,24,GPIO18*% %TO.N,unconnected-(U1-GPIO18-Pad24)*% X94234000Y-85344000D03* %TO.P,U1,25,GPIO19*% %TO.N,unconnected-(U1-GPIO19-Pad25)*% X94234000Y-82804000D03* %TO.P,U1,26,GPIO20*% %TO.N,unconnected-(U1-GPIO20-Pad26)*% X94234000Y-80264000D03* %TO.P,U1,27,GPIO21*% %TO.N,unconnected-(U1-GPIO21-Pad27)*% X94234000Y-77724000D03* D11* %TO.P,U1,28,GND*% %TO.N,GND2*% X94234000Y-75184000D03* D10* %TO.P,U1,29,GPIO22*% %TO.N,unconnected-(U1-GPIO22-Pad29)*% X94234000Y-72644000D03* %TO.P,U1,30,RUN*% %TO.N,unconnected-(U1-RUN-Pad30)*% X94234000Y-70104000D03* %TO.P,U1,31,GPIO26_ADC0*% %TO.N,unconnected-(U1-GPIO26_ADC0-Pad31)*% X94234000Y-67564000D03* %TO.P,U1,32,GPIO27_ADC1*% %TO.N,unconnected-(U1-GPIO27_ADC1-Pad32)*% X94234000Y-65024000D03* D11* %TO.P,U1,33,AGND*% %TO.N,unconnected-(U1-AGND-Pad33)*% X94234000Y-62484000D03* D10* %TO.P,U1,34,GPIO28_ADC2*% %TO.N,unconnected-(U1-GPIO28_ADC2-Pad34)*% X94234000Y-59944000D03* %TO.P,U1,35,ADC_VREF*% %TO.N,unconnected-(U1-ADC_VREF-Pad35)*% X94234000Y-57404000D03* %TO.P,U1,36,3V3*% %TO.N,Net-(U1-3V3)*% X94234000Y-54864000D03* %TO.P,U1,37,3V3_EN*% %TO.N,unconnected-(U1-3V3_EN-Pad37)*% X94234000Y-52324000D03* D11* %TO.P,U1,38,GND*% %TO.N,GND2*% X94234000Y-49784000D03* D10* %TO.P,U1,39,VSYS*% %TO.N,unconnected-(U1-VSYS-Pad39)*% X94234000Y-47244000D03* %TO.P,U1,40,VBUS*% %TO.N,VBUS1*% X94234000Y-44704000D03* %TO.P,U1,41,SWCLK*% %TO.N,Net-(J3-Pin_3)*% X82804000Y-92734000D03* D11* %TO.P,U1,42,GND*% %TO.N,GND2*% X85344000Y-92734000D03* D10* %TO.P,U1,43,SWDIO*% %TO.N,Net-(J3-Pin_1)*% X87884000Y-92734000D03* %TD*% %TO.P,U2,1,GPIO0*% %TO.N,unconnected-(U2-GPIO0-Pad1)*% X39995523Y-44688249D03* %TO.P,U2,2,GPIO1*% %TO.N,unconnected-(U2-GPIO1-Pad2)*% X39995523Y-47228249D03* D11* %TO.P,U2,3,GND*% %TO.N,GND*% X39995523Y-49768249D03* D10* %TO.P,U2,4,GPIO2*% %TO.N,unconnected-(U2-GPIO2-Pad4)*% X39995523Y-52308249D03* %TO.P,U2,5,GPIO3*% %TO.N,unconnected-(U2-GPIO3-Pad5)*% X39995523Y-54848249D03* %TO.P,U2,6,GPIO4*% %TO.N,unconnected-(U2-GPIO4-Pad6)*% X39995523Y-57388249D03* %TO.P,U2,7,GPIO5*% %TO.N,unconnected-(U2-GPIO5-Pad7)*% X39995523Y-59928249D03* D11* %TO.P,U2,8,GND*% %TO.N,GND*% X39995523Y-62468249D03* D10* %TO.P,U2,9,GPIO6*% %TO.N,unconnected-(U2-GPIO6-Pad9)*% X39995523Y-65008249D03* %TO.P,U2,10,GPIO7*% %TO.N,unconnected-(U2-GPIO7-Pad10)*% X39995523Y-67548249D03* %TO.P,U2,11,GPIO8*% %TO.N,unconnected-(U2-GPIO8-Pad11)*% X39995523Y-70088249D03* %TO.P,U2,12,GPIO9*% %TO.N,unconnected-(U2-GPIO9-Pad12)*% X39995523Y-72628249D03* D11* %TO.P,U2,13,GND*% %TO.N,GND*% X39995523Y-75168249D03* D10* %TO.P,U2,14,GPIO10*% %TO.N,unconnected-(U2-GPIO10-Pad14)*% X39995523Y-77708249D03* %TO.P,U2,15,GPIO11*% %TO.N,unconnected-(U2-GPIO11-Pad15)*% X39995523Y-80248249D03* %TO.P,U2,16,GPIO12*% %TO.N,unconnected-(U2-GPIO12-Pad16)*% X39995523Y-82788249D03* %TO.P,U2,17,GPIO13*% %TO.N,unconnected-(U2-GPIO13-Pad17)*% X39995523Y-85328249D03* D11* %TO.P,U2,18,GND*% %TO.N,GND*% X39995523Y-87868249D03* D10* %TO.P,U2,19,GPIO14*% %TO.N,Net-(U2-GPIO14)*% X39995523Y-90408249D03* %TO.P,U2,20,GPIO15*% %TO.N,Net-(U2-GPIO15)*% X39995523Y-92948249D03* %TO.P,U2,21,GPIO16*% %TO.N,UART B TX*% X57775523Y-92948249D03* %TO.P,U2,22,GPIO17*% %TO.N,UART B RX*% X57775523Y-90408249D03* D11* %TO.P,U2,23,GND*% %TO.N,GND*% X57775523Y-87868249D03* D10* %TO.P,U2,24,GPIO18*% %TO.N,unconnected-(U2-GPIO18-Pad24)*% X57775523Y-85328249D03* %TO.P,U2,25,GPIO19*% %TO.N,unconnected-(U2-GPIO19-Pad25)*% X57775523Y-82788249D03* %TO.P,U2,26,GPIO20*% %TO.N,unconnected-(U2-GPIO20-Pad26)*% X57775523Y-80248249D03* %TO.P,U2,27,GPIO21*% %TO.N,unconnected-(U2-GPIO21-Pad27)*% X57775523Y-77708249D03* D11* %TO.P,U2,28,GND*% %TO.N,GND*% X57775523Y-75168249D03* D10* %TO.P,U2,29,GPIO22*% %TO.N,unconnected-(U2-GPIO22-Pad29)*% X57775523Y-72628249D03* %TO.P,U2,30,RUN*% %TO.N,unconnected-(U2-RUN-Pad30)*% X57775523Y-70088249D03* %TO.P,U2,31,GPIO26_ADC0*% %TO.N,unconnected-(U2-GPIO26_ADC0-Pad31)*% X57775523Y-67548249D03* %TO.P,U2,32,GPIO27_ADC1*% %TO.N,unconnected-(U2-GPIO27_ADC1-Pad32)*% X57775523Y-65008249D03* D11* %TO.P,U2,33,AGND*% %TO.N,unconnected-(U2-AGND-Pad33)*% X57775523Y-62468249D03* D10* %TO.P,U2,34,GPIO28_ADC2*% %TO.N,unconnected-(U2-GPIO28_ADC2-Pad34)*% X57775523Y-59928249D03* %TO.P,U2,35,ADC_VREF*% %TO.N,unconnected-(U2-ADC_VREF-Pad35)*% X57775523Y-57388249D03* %TO.P,U2,36,3V3*% %TO.N,3V3_BUS2*% X57775523Y-54848249D03* %TO.P,U2,37,3V3_EN*% %TO.N,unconnected-(U2-3V3_EN-Pad37)*% X57775523Y-52308249D03* D11* %TO.P,U2,38,GND*% %TO.N,GND*% X57775523Y-49768249D03* D10* %TO.P,U2,39,VSYS*% %TO.N,unconnected-(U2-VSYS-Pad39)*% X57775523Y-47228249D03* %TO.P,U2,40,VBUS*% %TO.N,VBUS2*% X57775523Y-44688249D03* %TO.P,U2,41,SWCLK*% %TO.N,Net-(J2-Pin_3)*% X46345523Y-92718249D03* D11* %TO.P,U2,42,GND*% %TO.N,GND*% X48885523Y-92718249D03* D10* %TO.P,U2,43,SWDIO*% %TO.N,Net-(J2-Pin_1)*% X51425523Y-92718249D03* %TD*% D12* %TO.P,J4,1,VBUS*% %TO.N,VBUS2*% X45776000Y-101574000D03* D13* %TO.P,J4,2,D-*% %TO.N,OB-*% X48276000Y-101574000D03* %TO.P,J4,3,D+*% %TO.N,OB+*% X50276000Y-101574000D03* %TO.P,J4,4,GND*% %TO.N,GND*% X52776000Y-101574000D03* D14* %TO.P,J4,5,Shield*% X42706000Y-104284000D03* X55846000Y-104284000D03* %TD*% D11* %TO.P,J3,1,Pin_1*% %TO.N,Net-(J3-Pin_1)*% X95667537Y-99795757D03* D10* %TO.P,J3,2,Pin_2*% %TO.N,GND2*% X95667537Y-102335757D03* %TO.P,J3,3,Pin_3*% %TO.N,Net-(J3-Pin_3)*% X95667537Y-104875757D03* %TD*% D15* %TO.P,H2,1,1*% %TO.N,GND2*% X96774000Y-111506000D03* D16* X96774000Y-111506000D03* %TD*% D12* %TO.P,J1,1,VBUS*% %TO.N,VBUS1*% X81082000Y-101574000D03* D13* %TO.P,J1,2,D-*% %TO.N,OA-*% X83582000Y-101574000D03* %TO.P,J1,3,D+*% %TO.N,OA+*% X85582000Y-101574000D03* %TO.P,J1,4,GND*% %TO.N,GND2*% X88082000Y-101574000D03* D14* %TO.P,J1,5,Shield*% X78012000Y-104284000D03* X91152000Y-104284000D03* %TD*% D15* %TO.P,H1,1,1*% %TO.N,GND*% X37846000Y-111506000D03* D16* X37846000Y-111506000D03* %TD*% D11* %TO.P,J2,1,Pin_1*% %TO.N,Net-(J2-Pin_1)*% X60731042Y-99717876D03* D10* %TO.P,J2,2,Pin_2*% %TO.N,GND*% X60731042Y-102257876D03* %TO.P,J2,3,Pin_3*% %TO.N,Net-(J2-Pin_3)*% X60731042Y-104797876D03* %TD*% D15* %TO.P,H3,1,1*% %TO.N,GND2*% X67315520Y-45178990D03* D16* X67315520Y-45178990D03* %TD*% %TA.AperFunction,Conductor*% %TO.N,GND*% G36* X65159624Y-41130309D02* G01* X65205379Y-41183113D01* X65215323Y-41252271D01* X65186298Y-41315827D01* X65149405Y-41344839D01* X65112790Y-41363715D01* X65112783Y-41363719D01* X65112776Y-41363723D01* X65112775Y-41363724D01* X65091498Y-41377398D01* X64760090Y-41590379D01* X64430539Y-41849542D01* X64430537Y-41849543D01* X64127114Y-42138856D01* X63852572Y-42455695D01* X63852561Y-42455708D01* X63609395Y-42797187D01* X63609389Y-42797196D01* X63399766Y-43160273D01* X63225608Y-43541625D01* X63225598Y-43541650D01* X63088486Y-43937808D01* X63088483Y-43937818D01* X62989642Y-44345247D01* X62929978Y-44760217D01* X62910030Y-45178990D01* X62929978Y-45597762D01* X62989642Y-46012732D01* X63088483Y-46420161D01* X63088486Y-46420171D01* X63225598Y-46816329D01* X63225608Y-46816354D01* X63236611Y-46840447D01* X63392116Y-47180956D01* X63399766Y-47197706D01* X63508563Y-47386148D01* X63600432Y-47545270D01* X63609389Y-47560783D01* X63609395Y-47560792D01* X63852561Y-47902271D01* X63852570Y-47902281D01* X63852571Y-47902283D01* X63921207Y-47981493D01* X64116941Y-48207383D01* X64127117Y-48219126D01* X64430538Y-48508437D01* X64623631Y-48660287D01* X64760090Y-48767600D01* X64876804Y-48842607D01* X65112775Y-48994256D01* X65485413Y-49186365D01* X65874625Y-49342182D01* X66276886Y-49460296D01* X66296153Y-49464009D01* X66358257Y-49496024D01* X66393193Y-49556532D01* X66396689Y-49585731D01* X66416808Y-115416837D01* X66397144Y-115483883D01* X66344354Y-115529654D01* X66292808Y-115540875D01* X35775441Y-115540875D01* X35771385Y-115540742D01* X35519732Y-115524248D01* X35511683Y-115523188D01* X35266355Y-115474389D01* X35258516Y-115472288D01* X35095160Y-115416837D01* X35021651Y-115391884D01* X35014150Y-115388777D01* X34903587Y-115334253D01* X34789800Y-115278138D01* X34782775Y-115274082D01* X34574791Y-115135111D01* X34568350Y-115130168D01* X34380287Y-114965239D01* X34374546Y-114959498D01* X34209619Y-114771433D01* X34204677Y-114764992D01* X34065707Y-114557007D01* X34061648Y-114549976D01* X33951014Y-114325628D01* X33947907Y-114318127D01* X33867501Y-114081252D01* X33865406Y-114073431D01* X33816606Y-113828081D01* X33815548Y-113820039D01* X33799036Y-113568068D01* X33798903Y-113564013D01* X33798903Y-104284001D01* X40700891Y-104284001D01* X40721300Y-104569362D01* X40782109Y-104848895D01* X40882091Y-105116958D01* X41019191Y-105368038D01* X41019196Y-105368046D01* X41125882Y-105510561D01* X41125883Y-105510562D01* X41735438Y-104901006D01* X41784348Y-104979999D01* X41927931Y-105137501D01* X42086388Y-105257163D01* X41479436Y-105864115D01* X41621960Y-105970807D01* X41621961Y-105970808D01* X41873042Y-106107908D01* X41873041Y-106107908D01* X42141104Y-106207890D01* X42420637Y-106268699D01* X42705999Y-106289109D01* X42706001Y-106289109D01* X42991362Y-106268699D01* X43270895Y-106207890D01* X43538958Y-106107908D01* X43790047Y-105970803D01* X43932561Y-105864116D01* X43932562Y-105864115D01* X43325611Y-105257163D01* X43484069Y-105137501D01* X43627652Y-104979999D01* X43676560Y-104901007D01* X44286115Y-105510562D01* X44286116Y-105510561D01* X44392803Y-105368047D01* X44529908Y-105116958D01* X44629890Y-104848895D01* X44690699Y-104569362D01* X44711109Y-104284001D01* X53840891Y-104284001D01* X53861300Y-104569362D01* X53922109Y-104848895D01* X54022091Y-105116958D01* X54159191Y-105368038D01* X54159196Y-105368046D01* X54265882Y-105510561D01* X54265883Y-105510562D01* X54875438Y-104901006D01* X54924348Y-104979999D01* X55067931Y-105137501D01* X55226388Y-105257163D01* X54619436Y-105864115D01* X54761960Y-105970807D01* X54761961Y-105970808D01* X55013042Y-106107908D01* X55013041Y-106107908D01* X55281104Y-106207890D01* X55560637Y-106268699D01* X55845999Y-106289109D01* X55846001Y-106289109D01* X56131362Y-106268699D01* X56410895Y-106207890D01* X56678958Y-106107908D01* X56930047Y-105970803D01* X57072561Y-105864116D01* X57072562Y-105864115D01* X56465611Y-105257163D01* X56624069Y-105137501D01* X56767652Y-104979999D01* X56816560Y-104901007D01* X57426115Y-105510562D01* X57426116Y-105510561D01* X57532803Y-105368047D01* X57669908Y-105116958D01* X57769890Y-104848895D01* X57780987Y-104797881D01* X59367886Y-104797881D01* X59386476Y-105022235D01* X59386478Y-105022247D01* X59441745Y-105240490D01* X59532182Y-105446668D01* X59655318Y-105635141D01* X59655326Y-105635152D01* X59807798Y-105800778D01* X59807802Y-105800782D01* X59985466Y-105939065D01* X59985467Y-105939065D01* X59985469Y-105939067D01* X60044120Y-105970807D01* X60183468Y-106046218D01* X60396407Y-106119320D01* X60618473Y-106156376D01* X60843611Y-106156376D01* X61065677Y-106119320D01* X61278616Y-106046218D01* X61476618Y-105939065D01* X61654282Y-105800782D01* X61806764Y-105635144D01* X61929902Y-105446667D01* X62020338Y-105240492D01* X62075606Y-105022244D01* X62076180Y-105015316D01* X62094198Y-104797881D01* X62094198Y-104797870D01* X62075607Y-104573516D01* X62075605Y-104573504D01* X62041180Y-104437564D01* X62020338Y-104355260D01* X61929902Y-104149085D01* X61929268Y-104148115D01* X61864752Y-104049365D01* X61806764Y-103960608D01* X61806761Y-103960605D01* X61806757Y-103960599D01* X61654285Y-103794973D01* X61654280Y-103794968D01* X61476619Y-103656688D01* X61476614Y-103656684D01* X61278622Y-103549537D01* X61278619Y-103549535D01* X61278616Y-103549534D01* X61278613Y-103549533D01* X61278611Y-103549532D01* X61065679Y-103476432D01* X60843611Y-103439376D01* X60618473Y-103439376D01* X60396404Y-103476432D01* X60183472Y-103549532D01* X60183461Y-103549537D01* X59985469Y-103656684D01* X59985464Y-103656688D01* X59807803Y-103794968D01* X59807798Y-103794973D01* X59655326Y-103960599D01* X59655318Y-103960610D01* X59532182Y-104149083D01* X59441745Y-104355261D01* X59386478Y-104573504D01* X59386476Y-104573516D01* X59367886Y-104797870D01* X59367886Y-104797881D01* X57780987Y-104797881D01* X57830699Y-104569362D01* X57851109Y-104284001D01* X57851109Y-104283998D01* X57830699Y-103998637D01* X57769890Y-103719104D01* X57669908Y-103451041D01* X57532808Y-103199961D01* X57532807Y-103199960D01* X57426115Y-103057436D01* X56816560Y-103666991D01* X56767652Y-103588001D01* X56624069Y-103430499D01* X56465610Y-103310835D01* X57072562Y-102703883D01* X57072561Y-102703882D01* X56930046Y-102597196D01* X56930038Y-102597191D01* X56678957Y-102460091D01* X56678958Y-102460091D01* X56410895Y-102360109D01* X56131362Y-102299300D01* X55846001Y-102278891D01* X55845999Y-102278891D01* X55560637Y-102299300D01* X55281104Y-102360109D01* X55013041Y-102460091D01* X54761961Y-102597191D01* X54761953Y-102597196D01* X54619437Y-102703882D01* X54619436Y-102703883D01* X55226389Y-103310835D01* X55067931Y-103430499D01* X54924348Y-103588001D01* X54875439Y-103666992D01* X54265883Y-103057436D01* X54265882Y-103057437D01* X54159196Y-103199953D01* X54159191Y-103199961D01* X54022091Y-103451041D01* X53922109Y-103719104D01* X53861300Y-103998637D01* X53840891Y-104283998D01* X53840891Y-104284001D01* X44711109Y-104284001D01* X44711109Y-104283998D01* X44690699Y-103998637D01* X44629890Y-103719104D01* X44529908Y-103451041D01* X44392808Y-103199961D01* X44392807Y-103199960D01* X44286115Y-103057436D01* X43676560Y-103666991D01* X43627652Y-103588001D01* X43484069Y-103430499D01* X43325610Y-103310835D01* X43932562Y-102703883D01* X43932561Y-102703882D01* X43790046Y-102597196D01* X43790038Y-102597191D01* X43538957Y-102460091D01* X43538958Y-102460091D01* X43304530Y-102372654D01* X44467500Y-102372654D01* X44474011Y-102433202D01* X44474011Y-102433204D01* X44525111Y-102570203D01* X44525111Y-102570204D01* X44612739Y-102687261D01* X44729796Y-102774889D01* X44866799Y-102825989D01* X44894050Y-102828918D01* X44927345Y-102832499D01* X44927362Y-102832500D01* X46624638Y-102832500D01* X46624654Y-102832499D01* X46651692Y-102829591D01* X46685201Y-102825989D01* X46822204Y-102774889D01* X46939261Y-102687261D01* X47026889Y-102570204D01* X47040586Y-102533480D01* X47066717Y-102463424D01* X47108588Y-102407490D01* X47174053Y-102383074D01* X47242326Y-102397926D01* X47270579Y-102419077D01* X47431700Y-102580198D01* X47619251Y-102711523D01* X47744091Y-102769736D01* X47826750Y-102808281D01* X47826752Y-102808281D01* X47826757Y-102808284D01* X48047913Y-102867543D01* X48210832Y-102881796D01* X48275998Y-102887498D01* X48276000Y-102887498D01* X48276002Y-102887498D01* X48333021Y-102882509D01* X48504087Y-102867543D01* X48725243Y-102808284D01* X48932749Y-102711523D01* X49120300Y-102580198D01* X49188319Y-102512179D01* X49249642Y-102478694D01* X49319334Y-102483678D01* X49363681Y-102512179D01* X49431700Y-102580198D01* X49619251Y-102711523D01* X49744091Y-102769736D01* X49826750Y-102808281D01* X49826752Y-102808281D01* X49826757Y-102808284D01* X50047913Y-102867543D01* X50210832Y-102881796D01* X50275998Y-102887498D01* X50276000Y-102887498D01* X50276002Y-102887498D01* X50333021Y-102882509D01* X50504087Y-102867543D01* X50725243Y-102808284D01* X50932749Y-102711523D01* X51120300Y-102580198D01* X51282198Y-102418300D01* X51413523Y-102230749D01* X51418307Y-102220487D01* X51464476Y-102168051D01* X51531669Y-102148897D01* X51598551Y-102169111D01* X51643072Y-102220490D01* X51645866Y-102226483D01* X51696973Y-102299471D01* X51696974Y-102299472D01* X52313064Y-101683381D01* X52339481Y-101773351D01* X52413327Y-101888258D01* X52516555Y-101977705D01* X52640801Y-102034446D01* X52665548Y-102038004D01* X52050526Y-102653025D01* X52050526Y-102653026D01* X52123512Y-102704131D01* X52123516Y-102704133D01* X52329673Y-102800265D01* X52329682Y-102800269D01* X52549389Y-102859139D01* X52549400Y-102859141D01* X52775998Y-102878966D01* X52776002Y-102878966D01* X53002599Y-102859141D01* X53002610Y-102859139D01* X53222317Y-102800269D01* X53222331Y-102800264D01* X53428478Y-102704136D01* X53501472Y-102653025D01* X52886451Y-102038004D01* X52911199Y-102034446D01* X53035445Y-101977705D01* X53138673Y-101888258D01* X53212519Y-101773351D01* X53238935Y-101683382D01* X53855025Y-102299472D01* X53906136Y-102226478D01* X54002264Y-102020331D01* X54002269Y-102020317D01* X54061139Y-101800610D01* X54061141Y-101800599D01* X54080966Y-101574002D01* X54080966Y-101573997D01* X54061141Y-101347400D01* X54061139Y-101347389D01* X54002269Y-101127682D01* X54002265Y-101127673D01* X53906133Y-100921516D01* X53906131Y-100921512D01* X53855026Y-100848526D01* X53855025Y-100848526D01* X53238935Y-101464616D01* X53212519Y-101374649D01* X53138673Y-101259742D01* X53035445Y-101170295D01* X52911199Y-101113554D01* X52886451Y-101109995D01* X53379916Y-100616530D01* X59372542Y-100616530D01* X59379053Y-100677078D01* X59379053Y-100677080D01* X59420458Y-100788087D01* X59430153Y-100814080D01* X59517781Y-100931137D01* X59634838Y-101018765D01* X59771841Y-101069865D01* X59799092Y-101072794D01* X59832387Y-101076375D01* X59832404Y-101076376D01* X61629680Y-101076376D01* X61629696Y-101076375D01* X61656734Y-101073467D01* X61690243Y-101069865D01* X61827246Y-101018765D01* X61944303Y-100931137D01* X62031931Y-100814080D01* X62083031Y-100677077D01* X62086936Y-100640756D01* X62089541Y-100616530D01* X62089542Y-100616513D01* X62089542Y-98819238D01* X62089541Y-98819221D01* X62086199Y-98788146D01* X62083031Y-98758675D01* X62031931Y-98621672D01* X61944303Y-98504615D01* X61827246Y-98416987D01* X61690245Y-98365887D01* X61629696Y-98359376D01* X61629680Y-98359376D01* X59832404Y-98359376D01* X59832387Y-98359376D01* X59771839Y-98365887D01* X59771837Y-98365887D01* X59634837Y-98416987D01* X59517781Y-98504615D01* X59430153Y-98621671D01* X59379053Y-98758671D01* X59379053Y-98758673D01* X59372542Y-98819221D01* X59372542Y-100616530D01* X53379916Y-100616530D01* X53501472Y-100494974D01* X53501471Y-100494973D01* X53428483Y-100443866D01* X53428481Y-100443865D01* X53222326Y-100347734D01* X53222317Y-100347730D01* X53002610Y-100288860D01* X53002599Y-100288858D01* X52776002Y-100269034D01* X52775998Y-100269034D01* X52549400Y-100288858D01* X52549389Y-100288860D01* X52329682Y-100347730D01* X52329673Y-100347734D01* X52123513Y-100443868D01* X52050527Y-100494972D01* X52050526Y-100494973D01* X52665549Y-101109995D01* X52640801Y-101113554D01* X52516555Y-101170295D01* X52413327Y-101259742D01* X52339481Y-101374649D01* X52313064Y-101464617D01* X51696973Y-100848526D01* X51696972Y-100848527D01* X51645867Y-100921513D01* X51643070Y-100927513D01* X51596897Y-100979951D01* X51529703Y-100999102D01* X51462822Y-100978885D01* X51418307Y-100927511D01* X51413523Y-100917251D01* X51282198Y-100729700D01* X51120300Y-100567802D01* X50932749Y-100436477D01* X50932745Y-100436475D01* X50725249Y-100339718D01* X50725238Y-100339714D01* X50504089Y-100280457D01* X50504081Y-100280456D01* X50276002Y-100260502D01* X50275998Y-100260502D01* X50047918Y-100280456D01* X50047910Y-100280457D01* X49826761Y-100339714D01* X49826750Y-100339718D01* X49619254Y-100436475D01* X49619252Y-100436476D01* X49584601Y-100460739D01* X49431700Y-100567802D01* X49431698Y-100567803D01* X49431695Y-100567806D01* X49363681Y-100635821D01* X49302358Y-100669306D01* X49232666Y-100664322D01* X49188319Y-100635821D01* X49120304Y-100567806D01* X49120300Y-100567802D01* X48932749Y-100436477D01* X48932745Y-100436475D01* X48725249Y-100339718D01* X48725238Y-100339714D01* X48504089Y-100280457D01* X48504081Y-100280456D01* X48276002Y-100260502D01* X48275998Y-100260502D01* X48047918Y-100280456D01* X48047910Y-100280457D01* X47826761Y-100339714D01* X47826750Y-100339718D01* X47619254Y-100436475D01* X47619252Y-100436476D01* X47431699Y-100567803D01* X47270579Y-100728923D01* X47209256Y-100762407D01* X47139564Y-100757423D01* X47083631Y-100715551D01* X47066717Y-100684576D01* X47041330Y-100616513D01* X47026889Y-100577796D01* X46939261Y-100460739D01* X46822204Y-100373111D01* X46685203Y-100322011D01* X46624654Y-100315500D01* X46624638Y-100315500D01* X44927362Y-100315500D01* X44927345Y-100315500D01* X44866797Y-100322011D01* X44866795Y-100322011D01* X44729795Y-100373111D01* X44612739Y-100460739D01* X44525111Y-100577795D01* X44474011Y-100714795D01* X44474011Y-100714797D01* X44467500Y-100775345D01* X44467500Y-102372654D01* X43304530Y-102372654D01* X43270895Y-102360109D01* X42991362Y-102299300D01* X42706001Y-102278891D01* X42705999Y-102278891D01* X42420637Y-102299300D01* X42141104Y-102360109D01* X41873041Y-102460091D01* X41621961Y-102597191D01* X41621953Y-102597196D01* X41479437Y-102703882D01* X41479436Y-102703883D01* X42086389Y-103310835D01* X41927931Y-103430499D01* X41784348Y-103588001D01* X41735439Y-103666992D01* X41125883Y-103057436D01* X41125882Y-103057437D01* X41019196Y-103199953D01* X41019191Y-103199961D01* X40882091Y-103451041D01* X40782109Y-103719104D01* X40721300Y-103998637D01* X40700891Y-104283998D01* X40700891Y-104284001D01* X33798903Y-104284001D01* X33798903Y-92948254D01* X38632367Y-92948254D01* X38650957Y-93172608D01* X38650959Y-93172620D01* X38706226Y-93390863D01* X38796663Y-93597041D01* X38919799Y-93785514D01* X38919807Y-93785525D01* X39072279Y-93951151D01* X39072283Y-93951155D01* X39249947Y-94089438D01* X39249948Y-94089438D01* X39249950Y-94089440D01* X39376658Y-94158010D01* X39447949Y-94196591D01* X39660888Y-94269693D01* X39882954Y-94306749D01* X40108092Y-94306749D01* X40330158Y-94269693D01* X40543097Y-94196591D01* X40741099Y-94089438D01* X40918763Y-93951155D01* X41049627Y-93809000D01* X41071238Y-93785525D01* X41071239Y-93785523D01* X41071245Y-93785517D01* X41194383Y-93597040D01* X41284819Y-93390865D01* X41340087Y-93172617D01* X41342993Y-93137551D01* X41358679Y-92948254D01* X41358679Y-92948243D01* X41340088Y-92723889D01* X41340086Y-92723877D01* X41338662Y-92718254D01* X44982367Y-92718254D01* X45000957Y-92942608D01* X45000959Y-92942620D01* X45056226Y-93160863D01* X45146663Y-93367041D01* X45269799Y-93555514D01* X45269807Y-93555525D01* X45422279Y-93721151D01* X45422283Y-93721155D01* X45599947Y-93859438D01* X45599948Y-93859438D01* X45599950Y-93859440D01* X45726658Y-93928010D01* X45797949Y-93966591D01* X46010888Y-94039693D01* X46232954Y-94076749D01* X46458092Y-94076749D01* X46680158Y-94039693D01* X46893097Y-93966591D01* X47091099Y-93859438D01* X47268763Y-93721155D01* X47399627Y-93579000D01* X47421238Y-93555525D01* X47421239Y-93555523D01* X47421245Y-93555517D01* X47544383Y-93367040D01* X47634819Y-93160865D01* X47690087Y-92942617D01* X47690088Y-92942608D01* X47708679Y-92718254D01* X50062367Y-92718254D01* X50080957Y-92942608D01* X50080959Y-92942620D01* X50136226Y-93160863D01* X50226663Y-93367041D01* X50349799Y-93555514D01* X50349807Y-93555525D01* X50502279Y-93721151D01* X50502283Y-93721155D01* X50679947Y-93859438D01* X50679948Y-93859438D01* X50679950Y-93859440D01* X50806658Y-93928010D01* X50877949Y-93966591D01* X51090888Y-94039693D01* X51312954Y-94076749D01* X51538092Y-94076749D01* X51760158Y-94039693D01* X51973097Y-93966591D01* X52171099Y-93859438D01* X52348763Y-93721155D01* X52479627Y-93579000D01* X52501238Y-93555525D01* X52501239Y-93555523D01* X52501245Y-93555517D01* X52624383Y-93367040D01* X52714819Y-93160865D01* X52768660Y-92948254D01* X56412367Y-92948254D01* X56430957Y-93172608D01* X56430959Y-93172620D01* X56486226Y-93390863D01* X56576663Y-93597041D01* X56699799Y-93785514D01* X56699807Y-93785525D01* X56852279Y-93951151D01* X56852283Y-93951155D01* X57029947Y-94089438D01* X57029948Y-94089438D01* X57029950Y-94089440D01* X57156658Y-94158010D01* X57227949Y-94196591D01* X57440888Y-94269693D01* X57662954Y-94306749D01* X57888092Y-94306749D01* X58110158Y-94269693D01* X58323097Y-94196591D01* X58521099Y-94089438D01* X58698763Y-93951155D01* X58829627Y-93809000D01* X58851238Y-93785525D01* X58851239Y-93785523D01* X58851245Y-93785517D01* X58974383Y-93597040D01* X59064819Y-93390865D01* X59120087Y-93172617D01* X59122993Y-93137551D01* X59138679Y-92948254D01* X59138679Y-92948243D01* X59120088Y-92723889D01* X59120086Y-92723877D01* X59111175Y-92688688D01* X59064819Y-92505633D01* X58974383Y-92299458D01* X58958817Y-92275633D01* X58912814Y-92205219D01* X58851245Y-92110981D01* X58851242Y-92110978D01* X58851238Y-92110972D01* X58698766Y-91945346D01* X58698761Y-91945341D01* X58521100Y-91807061D01* X58521101Y-91807061D01* X58521099Y-91807060D01* X58484593Y-91787304D01* X58435002Y-91738085D01* X58419894Y-91669868D01* X58444064Y-91604313D01* X58484593Y-91569194D01* X58484607Y-91569185D01* X58521099Y-91549438D01* X58698763Y-91411155D01* X58851245Y-91245517D01* X58974383Y-91057040D01* X59064819Y-90850865D01* X59120087Y-90632617D01* X59120088Y-90632608D01* X59138679Y-90408254D01* X59138679Y-90408243D01* X59120088Y-90183889D01* X59120086Y-90183877D01* X59078700Y-90020447D01* X59064819Y-89965633D01* X58974383Y-89759458D01* X58851245Y-89570981D01* X58851242Y-89570978D01* X58851238Y-89570972D01* X58698766Y-89405346D01* X58698761Y-89405341D01* X58521100Y-89267061D01* X58521095Y-89267057D01* X58323103Y-89159910D01* X58323100Y-89159908D01* X58323097Y-89159907D01* X58323094Y-89159906D01* X58323092Y-89159905D01* X58110160Y-89086805D01* X57888092Y-89049749D01* X57662954Y-89049749D01* X57440885Y-89086805D01* X57227953Y-89159905D01* X57227942Y-89159910D01* X57029950Y-89267057D01* X57029945Y-89267061D01* X56852284Y-89405341D01* X56852279Y-89405346D01* X56699807Y-89570972D01* X56699799Y-89570983D01* X56576663Y-89759456D01* X56486226Y-89965634D01* X56430959Y-90183877D01* X56430957Y-90183889D01* X56412367Y-90408243D01* X56412367Y-90408254D01* X56430957Y-90632608D01* X56430959Y-90632620D01* X56486226Y-90850863D01* X56576663Y-91057041D01* X56699799Y-91245514D01* X56699807Y-91245525D01* X56852279Y-91411151D01* X56852283Y-91411155D01* X57029947Y-91549438D01* X57029952Y-91549440D01* X57029954Y-91549442D01* X57066453Y-91569195D01* X57116043Y-91618414D01* X57131151Y-91686631D01* X57106980Y-91752186D01* X57066453Y-91787303D01* X57029954Y-91807055D01* X57029945Y-91807061D01* X56852284Y-91945341D01* X56852279Y-91945346D01* X56699807Y-92110972D01* X56699799Y-92110983D01* X56576663Y-92299456D01* X56486226Y-92505634D01* X56430959Y-92723877D01* X56430957Y-92723889D01* X56412367Y-92948243D01* X56412367Y-92948254D01* X52768660Y-92948254D01* X52770087Y-92942617D01* X52770088Y-92942608D01* X52788679Y-92718254D01* X52788679Y-92718243D01* X52770088Y-92493889D01* X52770086Y-92493877D01* X52714819Y-92275634D01* X52687436Y-92213207D01* X52624383Y-92069458D01* X52501245Y-91880981D01* X52501242Y-91880978D01* X52501238Y-91880972D01* X52348766Y-91715346D01* X52348761Y-91715341D01* X52171100Y-91577061D01* X52171095Y-91577057D01* X51973103Y-91469910D01* X51973100Y-91469908D01* X51973097Y-91469907D01* X51973094Y-91469906D01* X51973092Y-91469905D01* X51760160Y-91396805D01* X51538092Y-91359749D01* X51312954Y-91359749D01* X51090885Y-91396805D01* X50877953Y-91469905D01* X50877942Y-91469910D01* X50679950Y-91577057D01* X50679945Y-91577061D01* X50502284Y-91715341D01* X50502279Y-91715346D01* X50349807Y-91880972D01* X50349799Y-91880983D01* X50226663Y-92069456D01* X50136226Y-92275634D01* X50080959Y-92493877D01* X50080957Y-92493889D01* X50062367Y-92718243D01* X50062367Y-92718254D01* X47708679Y-92718254D01* X47708679Y-92718243D01* X47690088Y-92493889D01* X47690086Y-92493877D01* X47634819Y-92275634D01* X47607436Y-92213207D01* X47544383Y-92069458D01* X47421245Y-91880981D01* X47421242Y-91880978D01* X47421238Y-91880972D01* X47268766Y-91715346D01* X47268761Y-91715341D01* X47091100Y-91577061D01* X47091095Y-91577057D01* X46893103Y-91469910D01* X46893100Y-91469908D01* X46893097Y-91469907D01* X46893094Y-91469906D01* X46893092Y-91469905D01* X46680160Y-91396805D01* X46458092Y-91359749D01* X46232954Y-91359749D01* X46010885Y-91396805D01* X45797953Y-91469905D01* X45797942Y-91469910D01* X45599950Y-91577057D01* X45599945Y-91577061D01* X45422284Y-91715341D01* X45422279Y-91715346D01* X45269807Y-91880972D01* X45269799Y-91880983D01* X45146663Y-92069456D01* X45056226Y-92275634D01* X45000959Y-92493877D01* X45000957Y-92493889D01* X44982367Y-92718243D01* X44982367Y-92718254D01* X41338662Y-92718254D01* X41331175Y-92688688D01* X41284819Y-92505633D01* X41194383Y-92299458D01* X41178817Y-92275633D01* X41132814Y-92205219D01* X41071245Y-92110981D01* X41071242Y-92110978D01* X41071238Y-92110972D01* X40918766Y-91945346D01* X40918761Y-91945341D01* X40741100Y-91807061D01* X40741101Y-91807061D01* X40741099Y-91807060D01* X40704593Y-91787304D01* X40655002Y-91738085D01* X40639894Y-91669868D01* X40664064Y-91604313D01* X40704593Y-91569194D01* X40704607Y-91569185D01* X40741099Y-91549438D01* X40918763Y-91411155D01* X41071245Y-91245517D01* X41194383Y-91057040D01* X41284819Y-90850865D01* X41340087Y-90632617D01* X41340088Y-90632608D01* X41358679Y-90408254D01* X41358679Y-90408243D01* X41340088Y-90183889D01* X41340086Y-90183877D01* X41298700Y-90020447D01* X41284819Y-89965633D01* X41194383Y-89759458D01* X41071245Y-89570981D01* X41071242Y-89570978D01* X41071238Y-89570972D01* X40918766Y-89405346D01* X40918761Y-89405341D01* X40741100Y-89267061D01* X40741095Y-89267057D01* X40543103Y-89159910D01* X40543100Y-89159908D01* X40543097Y-89159907D01* X40543094Y-89159906D01* X40543092Y-89159905D01* X40330160Y-89086805D01* X40108092Y-89049749D01* X39882954Y-89049749D01* X39660885Y-89086805D01* X39447953Y-89159905D01* X39447942Y-89159910D01* X39249950Y-89267057D01* X39249945Y-89267061D01* X39072284Y-89405341D01* X39072279Y-89405346D01* X38919807Y-89570972D01* X38919799Y-89570983D01* X38796663Y-89759456D01* X38706226Y-89965634D01* X38650959Y-90183877D01* X38650957Y-90183889D01* X38632367Y-90408243D01* X38632367Y-90408254D01* X38650957Y-90632608D01* X38650959Y-90632620D01* X38706226Y-90850863D01* X38796663Y-91057041D01* X38919799Y-91245514D01* X38919807Y-91245525D01* X39072279Y-91411151D01* X39072283Y-91411155D01* X39249947Y-91549438D01* X39249952Y-91549440D01* X39249954Y-91549442D01* X39286453Y-91569195D01* X39336043Y-91618414D01* X39351151Y-91686631D01* X39326980Y-91752186D01* X39286453Y-91787303D01* X39249954Y-91807055D01* X39249945Y-91807061D01* X39072284Y-91945341D01* X39072279Y-91945346D01* X38919807Y-92110972D01* X38919799Y-92110983D01* X38796663Y-92299456D01* X38706226Y-92505634D01* X38650959Y-92723877D01* X38650957Y-92723889D01* X38632367Y-92948243D01* X38632367Y-92948254D01* X33798903Y-92948254D01* X33798903Y-85328254D01* X38632367Y-85328254D01* X38650957Y-85552608D01* X38650959Y-85552620D01* X38706226Y-85770863D01* X38796663Y-85977041D01* X38919799Y-86165514D01* X38919807Y-86165525D01* X39072279Y-86331151D01* X39072283Y-86331155D01* X39249947Y-86469438D01* X39249948Y-86469438D01* X39249950Y-86469440D01* X39376658Y-86538010D01* X39447949Y-86576591D01* X39660888Y-86649693D01* X39882954Y-86686749D01* X40108092Y-86686749D01* X40330158Y-86649693D01* X40543097Y-86576591D01* X40741099Y-86469438D01* X40918763Y-86331155D01* X41049627Y-86189000D01* X41071238Y-86165525D01* X41071239Y-86165523D01* X41071245Y-86165517D01* X41194383Y-85977040D01* X41284819Y-85770865D01* X41340087Y-85552617D01* X41340088Y-85552608D01* X41358679Y-85328254D01* X56412367Y-85328254D01* X56430957Y-85552608D01* X56430959Y-85552620D01* X56486226Y-85770863D01* X56576663Y-85977041D01* X56699799Y-86165514D01* X56699807Y-86165525D01* X56852279Y-86331151D01* X56852283Y-86331155D01* X57029947Y-86469438D01* X57029948Y-86469438D01* X57029950Y-86469440D01* X57156658Y-86538010D01* X57227949Y-86576591D01* X57440888Y-86649693D01* X57662954Y-86686749D01* X57888092Y-86686749D01* X58110158Y-86649693D01* X58323097Y-86576591D01* X58521099Y-86469438D01* X58698763Y-86331155D01* X58829627Y-86189000D01* X58851238Y-86165525D01* X58851239Y-86165523D01* X58851245Y-86165517D01* X58974383Y-85977040D01* X59064819Y-85770865D01* X59120087Y-85552617D01* X59120088Y-85552608D01* X59138679Y-85328254D01* X59138679Y-85328243D01* X59120088Y-85103889D01* X59120086Y-85103877D01* X59078700Y-84940447D01* X59064819Y-84885633D01* X58974383Y-84679458D01* X58942153Y-84630127D01* X58912814Y-84585219D01* X58851245Y-84490981D01* X58851242Y-84490978D01* X58851238Y-84490972D01* X58698766Y-84325346D01* X58698761Y-84325341D01* X58521100Y-84187061D01* X58521101Y-84187061D01* X58521099Y-84187060D01* X58484593Y-84167304D01* X58435002Y-84118085D01* X58419894Y-84049868D01* X58444064Y-83984313D01* X58484593Y-83949194D01* X58484607Y-83949185D01* X58521099Y-83929438D01* X58698763Y-83791155D01* X58851245Y-83625517D01* X58974383Y-83437040D01* X59064819Y-83230865D01* X59120087Y-83012617D01* X59120088Y-83012608D01* X59138679Y-82788254D01* X59138679Y-82788243D01* X59120088Y-82563889D01* X59120086Y-82563877D01* X59078700Y-82400447D01* X59064819Y-82345633D01* X58974383Y-82139458D01* X58942153Y-82090127D01* X58912814Y-82045219D01* X58851245Y-81950981D01* X58851242Y-81950978D01* X58851238Y-81950972D01* X58698766Y-81785346D01* X58698761Y-81785341D01* X58521100Y-81647061D01* X58521101Y-81647061D01* X58521099Y-81647060D01* X58484593Y-81627304D01* X58435002Y-81578085D01* X58419894Y-81509868D01* X58444064Y-81444313D01* X58484593Y-81409194D01* X58484607Y-81409185D01* X58521099Y-81389438D01* X58698763Y-81251155D01* X58851245Y-81085517D01* X58974383Y-80897040D01* X59064819Y-80690865D01* X59120087Y-80472617D01* X59120088Y-80472608D01* X59138679Y-80248254D01* X59138679Y-80248243D01* X59120088Y-80023889D01* X59120086Y-80023877D01* X59078700Y-79860447D01* X59064819Y-79805633D01* X58974383Y-79599458D01* X58942153Y-79550127D01* X58912814Y-79505219D01* X58851245Y-79410981D01* X58851242Y-79410978D01* X58851238Y-79410972D01* X58698766Y-79245346D01* X58698761Y-79245341D01* X58521100Y-79107061D01* X58521101Y-79107061D01* X58521099Y-79107060D01* X58484593Y-79087304D01* X58435002Y-79038085D01* X58419894Y-78969868D01* X58444064Y-78904313D01* X58484593Y-78869194D01* X58484607Y-78869185D01* X58521099Y-78849438D01* X58698763Y-78711155D01* X58851245Y-78545517D01* X58974383Y-78357040D01* X59064819Y-78150865D01* X59120087Y-77932617D01* X59120088Y-77932608D01* X59138679Y-77708254D01* X59138679Y-77708243D01* X59120088Y-77483889D01* X59120086Y-77483877D01* X59078700Y-77320447D01* X59064819Y-77265633D01* X58974383Y-77059458D01* X58851245Y-76870981D01* X58851242Y-76870978D01* X58851238Y-76870972D01* X58698766Y-76705346D01* X58698761Y-76705341D01* X58521100Y-76567061D01* X58521095Y-76567057D01* X58323103Y-76459910D01* X58323100Y-76459908D01* X58323097Y-76459907D01* X58323094Y-76459906D01* X58323092Y-76459905D01* X58110160Y-76386805D01* X57888092Y-76349749D01* X57662954Y-76349749D01* X57440885Y-76386805D01* X57227953Y-76459905D01* X57227942Y-76459910D01* X57029950Y-76567057D01* X57029945Y-76567061D01* X56852284Y-76705341D01* X56852279Y-76705346D01* X56699807Y-76870972D01* X56699799Y-76870983D01* X56576663Y-77059456D01* X56486226Y-77265634D01* X56430959Y-77483877D01* X56430957Y-77483889D01* X56412367Y-77708243D01* X56412367Y-77708254D01* X56430957Y-77932608D01* X56430959Y-77932620D01* X56486226Y-78150863D01* X56576663Y-78357041D01* X56699799Y-78545514D01* X56699807Y-78545525D01* X56852279Y-78711151D01* X56852283Y-78711155D01* X57029947Y-78849438D01* X57029952Y-78849440D01* X57029954Y-78849442D01* X57066453Y-78869195D01* X57116043Y-78918414D01* X57131151Y-78986631D01* X57106980Y-79052186D01* X57066453Y-79087303D01* X57029954Y-79107055D01* X57029945Y-79107061D01* X56852284Y-79245341D01* X56852279Y-79245346D01* X56699807Y-79410972D01* X56699799Y-79410983D01* X56576663Y-79599456D01* X56486226Y-79805634D01* X56430959Y-80023877D01* X56430957Y-80023889D01* X56412367Y-80248243D01* X56412367Y-80248254D01* X56430957Y-80472608D01* X56430959Y-80472620D01* X56486226Y-80690863D01* X56576663Y-80897041D01* X56699799Y-81085514D01* X56699807Y-81085525D01* X56852279Y-81251151D01* X56852283Y-81251155D01* X57029947Y-81389438D01* X57029952Y-81389440D01* X57029954Y-81389442D01* X57066453Y-81409195D01* X57116043Y-81458414D01* X57131151Y-81526631D01* X57106980Y-81592186D01* X57066453Y-81627303D01* X57029954Y-81647055D01* X57029945Y-81647061D01* X56852284Y-81785341D01* X56852279Y-81785346D01* X56699807Y-81950972D01* X56699799Y-81950983D01* X56576663Y-82139456D01* X56486226Y-82345634D01* X56430959Y-82563877D01* X56430957Y-82563889D01* X56412367Y-82788243D01* X56412367Y-82788254D01* X56430957Y-83012608D01* X56430959Y-83012620D01* X56486226Y-83230863D01* X56576663Y-83437041D01* X56699799Y-83625514D01* X56699807Y-83625525D01* X56852279Y-83791151D01* X56852283Y-83791155D01* X57029947Y-83929438D01* X57029952Y-83929440D01* X57029954Y-83929442D01* X57066453Y-83949195D01* X57116043Y-83998414D01* X57131151Y-84066631D01* X57106980Y-84132186D01* X57066453Y-84167303D01* X57029954Y-84187055D01* X57029945Y-84187061D01* X56852284Y-84325341D01* X56852279Y-84325346D01* X56699807Y-84490972D01* X56699799Y-84490983D01* X56576663Y-84679456D01* X56486226Y-84885634D01* X56430959Y-85103877D01* X56430957Y-85103889D01* X56412367Y-85328243D01* X56412367Y-85328254D01* X41358679Y-85328254D01* X41358679Y-85328243D01* X41340088Y-85103889D01* X41340086Y-85103877D01* X41298700Y-84940447D01* X41284819Y-84885633D01* X41194383Y-84679458D01* X41162153Y-84630127D01* X41132814Y-84585219D01* X41071245Y-84490981D01* X41071242Y-84490978D01* X41071238Y-84490972D01* X40918766Y-84325346D01* X40918761Y-84325341D01* X40741100Y-84187061D01* X40741101Y-84187061D01* X40741099Y-84187060D01* X40704593Y-84167304D01* X40655002Y-84118085D01* X40639894Y-84049868D01* X40664064Y-83984313D01* X40704593Y-83949194D01* X40704607Y-83949185D01* X40741099Y-83929438D01* X40918763Y-83791155D01* X41071245Y-83625517D01* X41194383Y-83437040D01* X41284819Y-83230865D01* X41340087Y-83012617D01* X41340088Y-83012608D01* X41358679Y-82788254D01* X41358679Y-82788243D01* X41340088Y-82563889D01* X41340086Y-82563877D01* X41298700Y-82400447D01* X41284819Y-82345633D01* X41194383Y-82139458D01* X41162153Y-82090127D01* X41132814Y-82045219D01* X41071245Y-81950981D01* X41071242Y-81950978D01* X41071238Y-81950972D01* X40918766Y-81785346D01* X40918761Y-81785341D01* X40741100Y-81647061D01* X40741101Y-81647061D01* X40741099Y-81647060D01* X40704593Y-81627304D01* X40655002Y-81578085D01* X40639894Y-81509868D01* X40664064Y-81444313D01* X40704593Y-81409194D01* X40704607Y-81409185D01* X40741099Y-81389438D01* X40918763Y-81251155D01* X41071245Y-81085517D01* X41194383Y-80897040D01* X41284819Y-80690865D01* X41340087Y-80472617D01* X41340088Y-80472608D01* X41358679Y-80248254D01* X41358679Y-80248243D01* X41340088Y-80023889D01* X41340086Y-80023877D01* X41298700Y-79860447D01* X41284819Y-79805633D01* X41194383Y-79599458D01* X41162153Y-79550127D01* X41132814Y-79505219D01* X41071245Y-79410981D01* X41071242Y-79410978D01* X41071238Y-79410972D01* X40918766Y-79245346D01* X40918761Y-79245341D01* X40741100Y-79107061D01* X40741101Y-79107061D01* X40741099Y-79107060D01* X40704593Y-79087304D01* X40655002Y-79038085D01* X40639894Y-78969868D01* X40664064Y-78904313D01* X40704593Y-78869194D01* X40704607Y-78869185D01* X40741099Y-78849438D01* X40918763Y-78711155D01* X41071245Y-78545517D01* X41194383Y-78357040D01* X41284819Y-78150865D01* X41340087Y-77932617D01* X41340088Y-77932608D01* X41358679Y-77708254D01* X41358679Y-77708243D01* X41340088Y-77483889D01* X41340086Y-77483877D01* X41298700Y-77320447D01* X41284819Y-77265633D01* X41194383Y-77059458D01* X41071245Y-76870981D01* X41071242Y-76870978D01* X41071238Y-76870972D01* X40918766Y-76705346D01* X40918761Y-76705341D01* X40741100Y-76567061D01* X40741095Y-76567057D01* X40543103Y-76459910D01* X40543100Y-76459908D01* X40543097Y-76459907D01* X40543094Y-76459906D01* X40543092Y-76459905D01* X40330160Y-76386805D01* X40108092Y-76349749D01* X39882954Y-76349749D01* X39660885Y-76386805D01* X39447953Y-76459905D01* X39447942Y-76459910D01* X39249950Y-76567057D01* X39249945Y-76567061D01* X39072284Y-76705341D01* X39072279Y-76705346D01* X38919807Y-76870972D01* X38919799Y-76870983D01* X38796663Y-77059456D01* X38706226Y-77265634D01* X38650959Y-77483877D01* X38650957Y-77483889D01* X38632367Y-77708243D01* X38632367Y-77708254D01* X38650957Y-77932608D01* X38650959Y-77932620D01* X38706226Y-78150863D01* X38796663Y-78357041D01* X38919799Y-78545514D01* X38919807Y-78545525D01* X39072279Y-78711151D01* X39072283Y-78711155D01* X39249947Y-78849438D01* X39249952Y-78849440D01* X39249954Y-78849442D01* X39286453Y-78869195D01* X39336043Y-78918414D01* X39351151Y-78986631D01* X39326980Y-79052186D01* X39286453Y-79087303D01* X39249954Y-79107055D01* X39249945Y-79107061D01* X39072284Y-79245341D01* X39072279Y-79245346D01* X38919807Y-79410972D01* X38919799Y-79410983D01* X38796663Y-79599456D01* X38706226Y-79805634D01* X38650959Y-80023877D01* X38650957Y-80023889D01* X38632367Y-80248243D01* X38632367Y-80248254D01* X38650957Y-80472608D01* X38650959Y-80472620D01* X38706226Y-80690863D01* X38796663Y-80897041D01* X38919799Y-81085514D01* X38919807Y-81085525D01* X39072279Y-81251151D01* X39072283Y-81251155D01* X39249947Y-81389438D01* X39249952Y-81389440D01* X39249954Y-81389442D01* X39286453Y-81409195D01* X39336043Y-81458414D01* X39351151Y-81526631D01* X39326980Y-81592186D01* X39286453Y-81627303D01* X39249954Y-81647055D01* X39249945Y-81647061D01* X39072284Y-81785341D01* X39072279Y-81785346D01* X38919807Y-81950972D01* X38919799Y-81950983D01* X38796663Y-82139456D01* X38706226Y-82345634D01* X38650959Y-82563877D01* X38650957Y-82563889D01* X38632367Y-82788243D01* X38632367Y-82788254D01* X38650957Y-83012608D01* X38650959Y-83012620D01* X38706226Y-83230863D01* X38796663Y-83437041D01* X38919799Y-83625514D01* X38919807Y-83625525D01* X39072279Y-83791151D01* X39072283Y-83791155D01* X39249947Y-83929438D01* X39249952Y-83929440D01* X39249954Y-83929442D01* X39286453Y-83949195D01* X39336043Y-83998414D01* X39351151Y-84066631D01* X39326980Y-84132186D01* X39286453Y-84167303D01* X39249954Y-84187055D01* X39249945Y-84187061D01* X39072284Y-84325341D01* X39072279Y-84325346D01* X38919807Y-84490972D01* X38919799Y-84490983D01* X38796663Y-84679456D01* X38706226Y-84885634D01* X38650959Y-85103877D01* X38650957Y-85103889D01* X38632367Y-85328243D01* X38632367Y-85328254D01* X33798903Y-85328254D01* X33798903Y-72628254D01* X38632367Y-72628254D01* X38650957Y-72852608D01* X38650959Y-72852620D01* X38706226Y-73070863D01* X38796663Y-73277041D01* X38919799Y-73465514D01* X38919807Y-73465525D01* X39072279Y-73631151D01* X39072283Y-73631155D01* X39249947Y-73769438D01* X39249948Y-73769438D01* X39249950Y-73769440D01* X39376658Y-73838010D01* X39447949Y-73876591D01* X39660888Y-73949693D01* X39882954Y-73986749D01* X40108092Y-73986749D01* X40330158Y-73949693D01* X40543097Y-73876591D01* X40741099Y-73769438D01* X40918763Y-73631155D01* X41049627Y-73489000D01* X41071238Y-73465525D01* X41071239Y-73465523D01* X41071245Y-73465517D01* X41194383Y-73277040D01* X41284819Y-73070865D01* X41340087Y-72852617D01* X41340088Y-72852608D01* X41358679Y-72628254D01* X56412367Y-72628254D01* X56430957Y-72852608D01* X56430959Y-72852620D01* X56486226Y-73070863D01* X56576663Y-73277041D01* X56699799Y-73465514D01* X56699807Y-73465525D01* X56852279Y-73631151D01* X56852283Y-73631155D01* X57029947Y-73769438D01* X57029948Y-73769438D01* X57029950Y-73769440D01* X57156658Y-73838010D01* X57227949Y-73876591D01* X57440888Y-73949693D01* X57662954Y-73986749D01* X57888092Y-73986749D01* X58110158Y-73949693D01* X58323097Y-73876591D01* X58521099Y-73769438D01* X58698763Y-73631155D01* X58829627Y-73489000D01* X58851238Y-73465525D01* X58851239Y-73465523D01* X58851245Y-73465517D01* X58974383Y-73277040D01* X59064819Y-73070865D01* X59120087Y-72852617D01* X59120088Y-72852608D01* X59138679Y-72628254D01* X59138679Y-72628243D01* X59120088Y-72403889D01* X59120086Y-72403877D01* X59078700Y-72240447D01* X59064819Y-72185633D01* X58974383Y-71979458D01* X58942153Y-71930127D01* X58912814Y-71885219D01* X58851245Y-71790981D01* X58851242Y-71790978D01* X58851238Y-71790972D01* X58698766Y-71625346D01* X58698761Y-71625341D01* X58521100Y-71487061D01* X58521101Y-71487061D01* X58521099Y-71487060D01* X58484593Y-71467304D01* X58435002Y-71418085D01* X58419894Y-71349868D01* X58444064Y-71284313D01* X58484593Y-71249194D01* X58484607Y-71249185D01* X58521099Y-71229438D01* X58698763Y-71091155D01* X58851245Y-70925517D01* X58974383Y-70737040D01* X59064819Y-70530865D01* X59120087Y-70312617D01* X59120088Y-70312608D01* X59138679Y-70088254D01* X59138679Y-70088243D01* X59120088Y-69863889D01* X59120086Y-69863877D01* X59078700Y-69700447D01* X59064819Y-69645633D01* X58974383Y-69439458D01* X58942153Y-69390127D01* X58912814Y-69345219D01* X58851245Y-69250981D01* X58851242Y-69250978D01* X58851238Y-69250972D01* X58698766Y-69085346D01* X58698761Y-69085341D01* X58521100Y-68947061D01* X58521101Y-68947061D01* X58521099Y-68947060D01* X58484593Y-68927304D01* X58435002Y-68878085D01* X58419894Y-68809868D01* X58444064Y-68744313D01* X58484593Y-68709194D01* X58484607Y-68709185D01* X58521099Y-68689438D01* X58698763Y-68551155D01* X58851245Y-68385517D01* X58974383Y-68197040D01* X59064819Y-67990865D01* X59120087Y-67772617D01* X59120088Y-67772608D01* X59138679Y-67548254D01* X59138679Y-67548243D01* X59120088Y-67323889D01* X59120086Y-67323877D01* X59078700Y-67160447D01* X59064819Y-67105633D01* X58974383Y-66899458D01* X58942153Y-66850127D01* X58912814Y-66805219D01* X58851245Y-66710981D01* X58851242Y-66710978D01* X58851238Y-66710972D01* X58698766Y-66545346D01* X58698761Y-66545341D01* X58521100Y-66407061D01* X58521101Y-66407061D01* X58521099Y-66407060D01* X58484593Y-66387304D01* X58435002Y-66338085D01* X58419894Y-66269868D01* X58444064Y-66204313D01* X58484593Y-66169194D01* X58484607Y-66169185D01* X58521099Y-66149438D01* X58698763Y-66011155D01* X58851245Y-65845517D01* X58974383Y-65657040D01* X59064819Y-65450865D01* X59120087Y-65232617D01* X59120088Y-65232608D01* X59138679Y-65008254D01* X59138679Y-65008243D01* X59120088Y-64783889D01* X59120086Y-64783877D01* X59078700Y-64620447D01* X59064819Y-64565633D01* X58974383Y-64359458D01* X58962264Y-64340909D01* X58912814Y-64265219D01* X58851245Y-64170981D01* X58851242Y-64170978D01* X58851238Y-64170972D01* X58706033Y-64013240D01* X58675110Y-63950586D01* X58682970Y-63881160D01* X58727117Y-63827004D01* X58753928Y-63813076D01* X58834107Y-63783169D01* X58871727Y-63769138D01* X58988784Y-63681510D01* X59076412Y-63564453D01* X59127512Y-63427450D01* X59131853Y-63387074D01* X59134022Y-63366903D01* X59134023Y-63366886D01* X59134023Y-61569611D01* X59134022Y-61569594D01* X59130680Y-61538519D01* X59127512Y-61509048D01* X59076412Y-61372045D01* X58988784Y-61254988D01* X58871727Y-61167360D01* X58753927Y-61123421D01* X58697994Y-61081549D01* X58673578Y-61016084D01* X58688431Y-60947811D01* X58706027Y-60923263D01* X58851245Y-60765517D01* X58974383Y-60577040D01* X59064819Y-60370865D01* X59120087Y-60152617D01* X59120088Y-60152608D01* X59138679Y-59928254D01* X59138679Y-59928243D01* X59120088Y-59703889D01* X59120086Y-59703877D01* X59078700Y-59540447D01* X59064819Y-59485633D01* X58974383Y-59279458D01* X58942153Y-59230127D01* X58912814Y-59185219D01* X58851245Y-59090981D01* X58851242Y-59090978D01* X58851238Y-59090972D01* X58698766Y-58925346D01* X58698761Y-58925341D01* X58521100Y-58787061D01* X58521101Y-58787061D01* X58521099Y-58787060D01* X58484593Y-58767304D01* X58435002Y-58718085D01* X58419894Y-58649868D01* X58444064Y-58584313D01* X58484593Y-58549194D01* X58484607Y-58549185D01* X58521099Y-58529438D01* X58698763Y-58391155D01* X58851245Y-58225517D01* X58974383Y-58037040D01* X59064819Y-57830865D01* X59120087Y-57612617D01* X59120088Y-57612608D01* X59138679Y-57388254D01* X59138679Y-57388243D01* X59120088Y-57163889D01* X59120086Y-57163877D01* X59078700Y-57000447D01* X59064819Y-56945633D01* X58974383Y-56739458D01* X58942153Y-56690127D01* X58912814Y-56645219D01* X58851245Y-56550981D01* X58851242Y-56550978D01* X58851238Y-56550972D01* X58698766Y-56385346D01* X58698761Y-56385341D01* X58521100Y-56247061D01* X58521101Y-56247061D01* X58521099Y-56247060D01* X58484593Y-56227304D01* X58435002Y-56178085D01* X58419894Y-56109868D01* X58444064Y-56044313D01* X58484593Y-56009194D01* X58484607Y-56009185D01* X58521099Y-55989438D01* X58698763Y-55851155D01* X58851245Y-55685517D01* X58974383Y-55497040D01* X59064819Y-55290865D01* X59120087Y-55072617D01* X59120088Y-55072608D01* X59138679Y-54848254D01* X59138679Y-54848243D01* X59120088Y-54623889D01* X59120086Y-54623877D01* X59078700Y-54460447D01* X59064819Y-54405633D01* X58974383Y-54199458D01* X58942153Y-54150127D01* X58912814Y-54105219D01* X58851245Y-54010981D01* X58851242Y-54010978D01* X58851238Y-54010972D01* X58698766Y-53845346D01* X58698761Y-53845341D01* X58521100Y-53707061D01* X58521101Y-53707061D01* X58521099Y-53707060D01* X58484593Y-53687304D01* X58435002Y-53638085D01* X58419894Y-53569868D01* X58444064Y-53504313D01* X58484593Y-53469194D01* X58484607Y-53469185D01* X58521099Y-53449438D01* X58698763Y-53311155D01* X58828978Y-53169705D01* X58851238Y-53145525D01* X58851239Y-53145523D01* X58851245Y-53145517D01* X58974383Y-52957040D01* X59064819Y-52750865D01* X59120087Y-52532617D01* X59120088Y-52532608D01* X59138679Y-52308254D01* X59138679Y-52308243D01* X59120088Y-52083889D01* X59120086Y-52083877D01* X59078700Y-51920447D01* X59064819Y-51865633D01* X58974383Y-51659458D01* X58851245Y-51470981D01* X58851242Y-51470978D01* X58851238Y-51470972D01* X58698766Y-51305346D01* X58698761Y-51305341D01* X58521100Y-51167061D01* X58521095Y-51167057D01* X58323103Y-51059910D01* X58323100Y-51059908D01* X58323097Y-51059907D01* X58323094Y-51059906D01* X58323092Y-51059905D01* X58110160Y-50986805D01* X57888092Y-50949749D01* X57662954Y-50949749D01* X57440885Y-50986805D01* X57227953Y-51059905D01* X57227942Y-51059910D01* X57029950Y-51167057D01* X57029945Y-51167061D01* X56852284Y-51305341D01* X56852279Y-51305346D01* X56699807Y-51470972D01* X56699799Y-51470983D01* X56576663Y-51659456D01* X56486226Y-51865634D01* X56430959Y-52083877D01* X56430957Y-52083889D01* X56412367Y-52308243D01* X56412367Y-52308254D01* X56430957Y-52532608D01* X56430959Y-52532620D01* X56486226Y-52750863D01* X56576663Y-52957041D01* X56699799Y-53145514D01* X56699807Y-53145525D01* X56852279Y-53311151D01* X56852284Y-53311156D01* X56911504Y-53357249D01* X57029947Y-53449438D01* X57029952Y-53449440D01* X57029954Y-53449442D01* X57066453Y-53469195D01* X57116043Y-53518414D01* X57131151Y-53586631D01* X57106980Y-53652186D01* X57066453Y-53687303D01* X57029954Y-53707055D01* X57029945Y-53707061D01* X56852284Y-53845341D01* X56852279Y-53845346D01* X56699807Y-54010972D01* X56699799Y-54010983D01* X56576663Y-54199456D01* X56486226Y-54405634D01* X56430959Y-54623877D01* X56430957Y-54623889D01* X56412367Y-54848243D01* X56412367Y-54848254D01* X56430957Y-55072608D01* X56430959Y-55072620D01* X56486226Y-55290863D01* X56576663Y-55497041D01* X56699799Y-55685514D01* X56699807Y-55685525D01* X56852279Y-55851151D01* X56852283Y-55851155D01* X57029947Y-55989438D01* X57029952Y-55989440D01* X57029954Y-55989442D01* X57066453Y-56009195D01* X57116043Y-56058414D01* X57131151Y-56126631D01* X57106980Y-56192186D01* X57066453Y-56227303D01* X57029954Y-56247055D01* X57029945Y-56247061D01* X56852284Y-56385341D01* X56852279Y-56385346D01* X56699807Y-56550972D01* X56699799Y-56550983D01* X56576663Y-56739456D01* X56486226Y-56945634D01* X56430959Y-57163877D01* X56430957Y-57163889D01* X56412367Y-57388243D01* X56412367Y-57388254D01* X56430957Y-57612608D01* X56430959Y-57612620D01* X56486226Y-57830863D01* X56576663Y-58037041D01* X56699799Y-58225514D01* X56699807Y-58225525D01* X56852279Y-58391151D01* X56852283Y-58391155D01* X57029947Y-58529438D01* X57029952Y-58529440D01* X57029954Y-58529442D01* X57066453Y-58549195D01* X57116043Y-58598414D01* X57131151Y-58666631D01* X57106980Y-58732186D01* X57066453Y-58767303D01* X57029954Y-58787055D01* X57029945Y-58787061D01* X56852284Y-58925341D01* X56852279Y-58925346D01* X56699807Y-59090972D01* X56699799Y-59090983D01* X56576663Y-59279456D01* X56486226Y-59485634D01* X56430959Y-59703877D01* X56430957Y-59703889D01* X56412367Y-59928243D01* X56412367Y-59928254D01* X56430957Y-60152608D01* X56430959Y-60152620D01* X56486226Y-60370863D01* X56576663Y-60577041D01* X56699799Y-60765514D01* X56699807Y-60765525D01* X56845012Y-60923257D01* X56875935Y-60985911D01* X56868075Y-61055337D01* X56823928Y-61109493D01* X56797119Y-61123421D01* X56679317Y-61167360D01* X56562262Y-61254988D01* X56474634Y-61372044D01* X56423534Y-61509044D01* X56423534Y-61509046D01* X56417023Y-61569594D01* X56417023Y-63366903D01* X56423534Y-63427451D01* X56423534Y-63427453D01* X56474083Y-63562975D01* X56474634Y-63564453D01* X56562262Y-63681510D01* X56679319Y-63769138D01* X56731260Y-63788511D01* X56797118Y-63813076D01* X56853051Y-63854948D01* X56877467Y-63920412D01* X56862615Y-63988685D01* X56845013Y-64013240D01* X56699802Y-64170979D01* X56699799Y-64170983D01* X56576663Y-64359456D01* X56486226Y-64565634D01* X56430959Y-64783877D01* X56430957Y-64783889D01* X56412367Y-65008243D01* X56412367Y-65008254D01* X56430957Y-65232608D01* X56430959Y-65232620D01* X56486226Y-65450863D01* X56576663Y-65657041D01* X56699799Y-65845514D01* X56699807Y-65845525D01* X56852279Y-66011151D01* X56852283Y-66011155D01* X57029947Y-66149438D01* X57029952Y-66149440D01* X57029954Y-66149442D01* X57066453Y-66169195D01* X57116043Y-66218414D01* X57131151Y-66286631D01* X57106980Y-66352186D01* X57066453Y-66387303D01* X57029954Y-66407055D01* X57029945Y-66407061D01* X56852284Y-66545341D01* X56852279Y-66545346D01* X56699807Y-66710972D01* X56699799Y-66710983D01* X56576663Y-66899456D01* X56486226Y-67105634D01* X56430959Y-67323877D01* X56430957Y-67323889D01* X56412367Y-67548243D01* X56412367Y-67548254D01* X56430957Y-67772608D01* X56430959Y-67772620D01* X56486226Y-67990863D01* X56576663Y-68197041D01* X56699799Y-68385514D01* X56699807Y-68385525D01* X56852279Y-68551151D01* X56852283Y-68551155D01* X57029947Y-68689438D01* X57029952Y-68689440D01* X57029954Y-68689442D01* X57066453Y-68709195D01* X57116043Y-68758414D01* X57131151Y-68826631D01* X57106980Y-68892186D01* X57066453Y-68927303D01* X57029954Y-68947055D01* X57029945Y-68947061D01* X56852284Y-69085341D01* X56852279Y-69085346D01* X56699807Y-69250972D01* X56699799Y-69250983D01* X56576663Y-69439456D01* X56486226Y-69645634D01* X56430959Y-69863877D01* X56430957Y-69863889D01* X56412367Y-70088243D01* X56412367Y-70088254D01* X56430957Y-70312608D01* X56430959Y-70312620D01* X56486226Y-70530863D01* X56576663Y-70737041D01* X56699799Y-70925514D01* X56699807Y-70925525D01* X56852279Y-71091151D01* X56852283Y-71091155D01* X57029947Y-71229438D01* X57029952Y-71229440D01* X57029954Y-71229442D01* X57066453Y-71249195D01* X57116043Y-71298414D01* X57131151Y-71366631D01* X57106980Y-71432186D01* X57066453Y-71467303D01* X57029954Y-71487055D01* X57029945Y-71487061D01* X56852284Y-71625341D01* X56852279Y-71625346D01* X56699807Y-71790972D01* X56699799Y-71790983D01* X56576663Y-71979456D01* X56486226Y-72185634D01* X56430959Y-72403877D01* X56430957Y-72403889D01* X56412367Y-72628243D01* X56412367Y-72628254D01* X41358679Y-72628254D01* X41358679Y-72628243D01* X41340088Y-72403889D01* X41340086Y-72403877D01* X41298700Y-72240447D01* X41284819Y-72185633D01* X41194383Y-71979458D01* X41162153Y-71930127D01* X41132814Y-71885219D01* X41071245Y-71790981D01* X41071242Y-71790978D01* X41071238Y-71790972D01* X40918766Y-71625346D01* X40918761Y-71625341D01* X40741100Y-71487061D01* X40741101Y-71487061D01* X40741099Y-71487060D01* X40704593Y-71467304D01* X40655002Y-71418085D01* X40639894Y-71349868D01* X40664064Y-71284313D01* X40704593Y-71249194D01* X40704607Y-71249185D01* X40741099Y-71229438D01* X40918763Y-71091155D01* X41071245Y-70925517D01* X41194383Y-70737040D01* X41284819Y-70530865D01* X41340087Y-70312617D01* X41340088Y-70312608D01* X41358679Y-70088254D01* X41358679Y-70088243D01* X41340088Y-69863889D01* X41340086Y-69863877D01* X41298700Y-69700447D01* X41284819Y-69645633D01* X41194383Y-69439458D01* X41162153Y-69390127D01* X41132814Y-69345219D01* X41071245Y-69250981D01* X41071242Y-69250978D01* X41071238Y-69250972D01* X40918766Y-69085346D01* X40918761Y-69085341D01* X40741100Y-68947061D01* X40741101Y-68947061D01* X40741099Y-68947060D01* X40704593Y-68927304D01* X40655002Y-68878085D01* X40639894Y-68809868D01* X40664064Y-68744313D01* X40704593Y-68709194D01* X40704607Y-68709185D01* X40741099Y-68689438D01* X40918763Y-68551155D01* X41071245Y-68385517D01* X41194383Y-68197040D01* X41284819Y-67990865D01* X41340087Y-67772617D01* X41340088Y-67772608D01* X41358679Y-67548254D01* X41358679Y-67548243D01* X41340088Y-67323889D01* X41340086Y-67323877D01* X41298700Y-67160447D01* X41284819Y-67105633D01* X41194383Y-66899458D01* X41162153Y-66850127D01* X41132814Y-66805219D01* X41071245Y-66710981D01* X41071242Y-66710978D01* X41071238Y-66710972D01* X40918766Y-66545346D01* X40918761Y-66545341D01* X40741100Y-66407061D01* X40741101Y-66407061D01* X40741099Y-66407060D01* X40704593Y-66387304D01* X40655002Y-66338085D01* X40639894Y-66269868D01* X40664064Y-66204313D01* X40704593Y-66169194D01* X40704607Y-66169185D01* X40741099Y-66149438D01* X40918763Y-66011155D01* X41071245Y-65845517D01* X41194383Y-65657040D01* X41284819Y-65450865D01* X41340087Y-65232617D01* X41340088Y-65232608D01* X41358679Y-65008254D01* X41358679Y-65008243D01* X41340088Y-64783889D01* X41340086Y-64783877D01* X41298700Y-64620447D01* X41284819Y-64565633D01* X41194383Y-64359458D01* X41182264Y-64340909D01* X41132814Y-64265219D01* X41071245Y-64170981D01* X41071242Y-64170978D01* X41071238Y-64170972D01* X40918766Y-64005346D01* X40918761Y-64005341D01* X40741100Y-63867061D01* X40741095Y-63867057D01* X40543103Y-63759910D01* X40543100Y-63759908D01* X40543097Y-63759907D01* X40543094Y-63759906D01* X40543092Y-63759905D01* X40330160Y-63686805D01* X40108092Y-63649749D01* X39882954Y-63649749D01* X39660885Y-63686805D01* X39447953Y-63759905D01* X39447942Y-63759910D01* X39249950Y-63867057D01* X39249945Y-63867061D01* X39072284Y-64005341D01* X39072279Y-64005346D01* X38919807Y-64170972D01* X38919799Y-64170983D01* X38796663Y-64359456D01* X38706226Y-64565634D01* X38650959Y-64783877D01* X38650957Y-64783889D01* X38632367Y-65008243D01* X38632367Y-65008254D01* X38650957Y-65232608D01* X38650959Y-65232620D01* X38706226Y-65450863D01* X38796663Y-65657041D01* X38919799Y-65845514D01* X38919807Y-65845525D01* X39072279Y-66011151D01* X39072283Y-66011155D01* X39249947Y-66149438D01* X39249952Y-66149440D01* X39249954Y-66149442D01* X39286453Y-66169195D01* X39336043Y-66218414D01* X39351151Y-66286631D01* X39326980Y-66352186D01* X39286453Y-66387303D01* X39249954Y-66407055D01* X39249945Y-66407061D01* X39072284Y-66545341D01* X39072279Y-66545346D01* X38919807Y-66710972D01* X38919799Y-66710983D01* X38796663Y-66899456D01* X38706226Y-67105634D01* X38650959Y-67323877D01* X38650957Y-67323889D01* X38632367Y-67548243D01* X38632367Y-67548254D01* X38650957Y-67772608D01* X38650959Y-67772620D01* X38706226Y-67990863D01* X38796663Y-68197041D01* X38919799Y-68385514D01* X38919807Y-68385525D01* X39072279Y-68551151D01* X39072283Y-68551155D01* X39249947Y-68689438D01* X39249952Y-68689440D01* X39249954Y-68689442D01* X39286453Y-68709195D01* X39336043Y-68758414D01* X39351151Y-68826631D01* X39326980Y-68892186D01* X39286453Y-68927303D01* X39249954Y-68947055D01* X39249945Y-68947061D01* X39072284Y-69085341D01* X39072279Y-69085346D01* X38919807Y-69250972D01* X38919799Y-69250983D01* X38796663Y-69439456D01* X38706226Y-69645634D01* X38650959Y-69863877D01* X38650957Y-69863889D01* X38632367Y-70088243D01* X38632367Y-70088254D01* X38650957Y-70312608D01* X38650959Y-70312620D01* X38706226Y-70530863D01* X38796663Y-70737041D01* X38919799Y-70925514D01* X38919807Y-70925525D01* X39072279Y-71091151D01* X39072283Y-71091155D01* X39249947Y-71229438D01* X39249952Y-71229440D01* X39249954Y-71229442D01* X39286453Y-71249195D01* X39336043Y-71298414D01* X39351151Y-71366631D01* X39326980Y-71432186D01* X39286453Y-71467303D01* X39249954Y-71487055D01* X39249945Y-71487061D01* X39072284Y-71625341D01* X39072279Y-71625346D01* X38919807Y-71790972D01* X38919799Y-71790983D01* X38796663Y-71979456D01* X38706226Y-72185634D01* X38650959Y-72403877D01* X38650957Y-72403889D01* X38632367Y-72628243D01* X38632367Y-72628254D01* X33798903Y-72628254D01* X33798903Y-59928254D01* X38632367Y-59928254D01* X38650957Y-60152608D01* X38650959Y-60152620D01* X38706226Y-60370863D01* X38796663Y-60577041D01* X38919799Y-60765514D01* X38919807Y-60765525D01* X39065011Y-60923256D01* X39072283Y-60931155D01* X39249947Y-61069438D01* X39249948Y-61069438D01* X39249950Y-61069440D01* X39272326Y-61081549D01* X39447949Y-61176591D01* X39660888Y-61249693D01* X39882954Y-61286749D01* X40108092Y-61286749D01* X40330158Y-61249693D01* X40543097Y-61176591D01* X40741099Y-61069438D01* X40918763Y-60931155D01* X41049627Y-60789000D01* X41071238Y-60765525D01* X41071239Y-60765523D01* X41071245Y-60765517D01* X41194383Y-60577040D01* X41284819Y-60370865D01* X41340087Y-60152617D01* X41340088Y-60152608D01* X41358679Y-59928254D01* X41358679Y-59928243D01* X41340088Y-59703889D01* X41340086Y-59703877D01* X41298700Y-59540447D01* X41284819Y-59485633D01* X41194383Y-59279458D01* X41162153Y-59230127D01* X41132814Y-59185219D01* X41071245Y-59090981D01* X41071242Y-59090978D01* X41071238Y-59090972D01* X40918766Y-58925346D01* X40918761Y-58925341D01* X40741100Y-58787061D01* X40741101Y-58787061D01* X40741099Y-58787060D01* X40704593Y-58767304D01* X40655002Y-58718085D01* X40639894Y-58649868D01* X40664064Y-58584313D01* X40704593Y-58549194D01* X40704607Y-58549185D01* X40741099Y-58529438D01* X40918763Y-58391155D01* X41071245Y-58225517D01* X41194383Y-58037040D01* X41284819Y-57830865D01* X41340087Y-57612617D01* X41340088Y-57612608D01* X41358679Y-57388254D01* X41358679Y-57388243D01* X41340088Y-57163889D01* X41340086Y-57163877D01* X41298700Y-57000447D01* X41284819Y-56945633D01* X41194383Y-56739458D01* X41162153Y-56690127D01* X41132814Y-56645219D01* X41071245Y-56550981D01* X41071242Y-56550978D01* X41071238Y-56550972D01* X40918766Y-56385346D01* X40918761Y-56385341D01* X40741100Y-56247061D01* X40741101Y-56247061D01* X40741099Y-56247060D01* X40704593Y-56227304D01* X40655002Y-56178085D01* X40639894Y-56109868D01* X40664064Y-56044313D01* X40704593Y-56009194D01* X40704607Y-56009185D01* X40741099Y-55989438D01* X40918763Y-55851155D01* X41071245Y-55685517D01* X41194383Y-55497040D01* X41284819Y-55290865D01* X41340087Y-55072617D01* X41340088Y-55072608D01* X41358679Y-54848254D01* X41358679Y-54848243D01* X41340088Y-54623889D01* X41340086Y-54623877D01* X41298700Y-54460447D01* X41284819Y-54405633D01* X41194383Y-54199458D01* X41162153Y-54150127D01* X41132814Y-54105219D01* X41071245Y-54010981D01* X41071242Y-54010978D01* X41071238Y-54010972D01* X40918766Y-53845346D01* X40918761Y-53845341D01* X40741100Y-53707061D01* X40741101Y-53707061D01* X40741099Y-53707060D01* X40704593Y-53687304D01* X40655002Y-53638085D01* X40639894Y-53569868D01* X40664064Y-53504313D01* X40704593Y-53469194D01* X40704607Y-53469185D01* X40741099Y-53449438D01* X40918763Y-53311155D01* X41048978Y-53169705D01* X41071238Y-53145525D01* X41071239Y-53145523D01* X41071245Y-53145517D01* X41194383Y-52957040D01* X41284819Y-52750865D01* X41340087Y-52532617D01* X41340088Y-52532608D01* X41358679Y-52308254D01* X41358679Y-52308243D01* X41340088Y-52083889D01* X41340086Y-52083877D01* X41298700Y-51920447D01* X41284819Y-51865633D01* X41194383Y-51659458D01* X41071245Y-51470981D01* X41071242Y-51470978D01* X41071238Y-51470972D01* X40918766Y-51305346D01* X40918761Y-51305341D01* X40741100Y-51167061D01* X40741095Y-51167057D01* X40543103Y-51059910D01* X40543100Y-51059908D01* X40543097Y-51059907D01* X40543094Y-51059906D01* X40543092Y-51059905D01* X40330160Y-50986805D01* X40108092Y-50949749D01* X39882954Y-50949749D01* X39660885Y-50986805D01* X39447953Y-51059905D01* X39447942Y-51059910D01* X39249950Y-51167057D01* X39249945Y-51167061D01* X39072284Y-51305341D01* X39072279Y-51305346D01* X38919807Y-51470972D01* X38919799Y-51470983D01* X38796663Y-51659456D01* X38706226Y-51865634D01* X38650959Y-52083877D01* X38650957Y-52083889D01* X38632367Y-52308243D01* X38632367Y-52308254D01* X38650957Y-52532608D01* X38650959Y-52532620D01* X38706226Y-52750863D01* X38796663Y-52957041D01* X38919799Y-53145514D01* X38919807Y-53145525D01* X39072279Y-53311151D01* X39072284Y-53311156D01* X39131504Y-53357249D01* X39249947Y-53449438D01* X39249952Y-53449440D01* X39249954Y-53449442D01* X39286453Y-53469195D01* X39336043Y-53518414D01* X39351151Y-53586631D01* X39326980Y-53652186D01* X39286453Y-53687303D01* X39249954Y-53707055D01* X39249945Y-53707061D01* X39072284Y-53845341D01* X39072279Y-53845346D01* X38919807Y-54010972D01* X38919799Y-54010983D01* X38796663Y-54199456D01* X38706226Y-54405634D01* X38650959Y-54623877D01* X38650957Y-54623889D01* X38632367Y-54848243D01* X38632367Y-54848254D01* X38650957Y-55072608D01* X38650959Y-55072620D01* X38706226Y-55290863D01* X38796663Y-55497041D01* X38919799Y-55685514D01* X38919807Y-55685525D01* X39072279Y-55851151D01* X39072283Y-55851155D01* X39249947Y-55989438D01* X39249952Y-55989440D01* X39249954Y-55989442D01* X39286453Y-56009195D01* X39336043Y-56058414D01* X39351151Y-56126631D01* X39326980Y-56192186D01* X39286453Y-56227303D01* X39249954Y-56247055D01* X39249945Y-56247061D01* X39072284Y-56385341D01* X39072279Y-56385346D01* X38919807Y-56550972D01* X38919799Y-56550983D01* X38796663Y-56739456D01* X38706226Y-56945634D01* X38650959Y-57163877D01* X38650957Y-57163889D01* X38632367Y-57388243D01* X38632367Y-57388254D01* X38650957Y-57612608D01* X38650959Y-57612620D01* X38706226Y-57830863D01* X38796663Y-58037041D01* X38919799Y-58225514D01* X38919807Y-58225525D01* X39072279Y-58391151D01* X39072283Y-58391155D01* X39249947Y-58529438D01* X39249952Y-58529440D01* X39249954Y-58529442D01* X39286453Y-58549195D01* X39336043Y-58598414D01* X39351151Y-58666631D01* X39326980Y-58732186D01* X39286453Y-58767303D01* X39249954Y-58787055D01* X39249945Y-58787061D01* X39072284Y-58925341D01* X39072279Y-58925346D01* X38919807Y-59090972D01* X38919799Y-59090983D01* X38796663Y-59279456D01* X38706226Y-59485634D01* X38650959Y-59703877D01* X38650957Y-59703889D01* X38632367Y-59928243D01* X38632367Y-59928254D01* X33798903Y-59928254D01* X33798903Y-47228254D01* X38632367Y-47228254D01* X38650957Y-47452608D01* X38650959Y-47452620D01* X38706226Y-47670863D01* X38796663Y-47877041D01* X38919799Y-48065514D01* X38919807Y-48065525D01* X39072279Y-48231151D01* X39072284Y-48231156D01* X39109994Y-48260507D01* X39249947Y-48369438D01* X39249948Y-48369438D01* X39249950Y-48369440D01* X39330125Y-48412828D01* X39447949Y-48476591D01* X39660888Y-48549693D01* X39882954Y-48586749D01* X40108092Y-48586749D01* X40330158Y-48549693D01* X40543097Y-48476591D01* X40741099Y-48369438D01* X40918763Y-48231155D01* X41054442Y-48083770D01* X41071238Y-48065525D01* X41071239Y-48065523D01* X41071245Y-48065517D01* X41194383Y-47877040D01* X41207013Y-47848247D01* X45197216Y-47848247D01* X45199195Y-47870888D01* X45199369Y-47879078D01* X45198207Y-47904937D01* X45198208Y-47904939D01* X45209214Y-47986195D01* X45209539Y-47989113D01* X45214344Y-48044030D01* X45216408Y-48067620D01* X45223147Y-48092772D01* X45224697Y-48100492D01* X45228616Y-48129422D01* X45228619Y-48129432D01* X45252936Y-48204272D01* X45253857Y-48207383D01* X45273400Y-48280315D01* X45273404Y-48280327D01* X45285798Y-48306908D01* X45288574Y-48313954D01* X45296197Y-48337413D01* X45298620Y-48344870D01* X45303473Y-48353888D01* X45334345Y-48411259D01* X45335939Y-48414436D01* X45366465Y-48479900D01* X45366466Y-48479902D01* X45366467Y-48479903D01* X45385191Y-48506645D01* X45388998Y-48512823D01* X45405966Y-48544354D01* X45405968Y-48544357D01* X45450920Y-48600724D01* X45453232Y-48603816D01* X45492774Y-48660287D01* X45492777Y-48660290D01* X45518182Y-48685695D01* X45522818Y-48690882D01* X45547209Y-48721467D01* X45599037Y-48766748D01* X45602080Y-48769593D01* X45648478Y-48815992D01* X45648479Y-48815993D01* X45648482Y-48815995D01* X45648485Y-48815998D01* X45680010Y-48838071D01* X45680632Y-48838507D01* X45685864Y-48842606D01* X45717805Y-48870512D01* X45774058Y-48904121D01* X45777781Y-48906532D01* X45814273Y-48932084D01* X45828861Y-48942300D01* X45828864Y-48942301D01* X45828869Y-48942305D01* X45867433Y-48960287D01* X45873016Y-48963246D01* X45912273Y-48986702D01* X45970533Y-49008566D01* X45974945Y-49010420D01* X46028447Y-49035369D01* X46072727Y-49047233D01* X46078462Y-49049073D01* X46107879Y-49060113D01* X46124362Y-49066300D01* X46182336Y-49076820D01* X46187301Y-49077934D01* X46241152Y-49092364D01* X46290125Y-49096648D01* X46295773Y-49097406D01* X46334875Y-49104502D01* X46347255Y-49106749D01* X46347256Y-49106749D01* X46402871Y-49106749D01* X46408272Y-49106984D01* X46436893Y-49109488D01* X46460521Y-49111556D01* X46460522Y-49111556D01* X46460522Y-49111555D01* X46460523Y-49111556D01* X46513833Y-49106892D01* X46517027Y-49106749D01* X46517045Y-49106749D01* X46565148Y-49102418D01* X46571914Y-49101810D01* X46679876Y-49092366D01* X46679880Y-49092365D01* X46679894Y-49092364D01* X46679906Y-49092360D01* X46680425Y-49092269D01* X46685659Y-49091573D01* X46686145Y-49091530D01* X46790858Y-49062630D01* X46892599Y-49035369D01* X46892612Y-49035362D01* X46899552Y-49032837D01* X46904243Y-49031338D01* X46904516Y-49031263D01* X46999542Y-48985500D01* X47092177Y-48942305D01* X47092186Y-48942298D01* X47096873Y-48939594D01* X47096944Y-48939717D01* X47107729Y-48933401D01* X47108616Y-48932974D01* X47191391Y-48872834D01* X47272561Y-48815998D01* X47273474Y-48815084D01* X47288275Y-48802442D01* X47291886Y-48799820D01* X47323513Y-48766741D01* X47360425Y-48728133D01* X47428269Y-48660290D01* X47428269Y-48660289D01* X47428272Y-48660287D01* X47430999Y-48656391D01* X47442951Y-48641817D01* X47448435Y-48636083D01* X47501332Y-48555946D01* X47554579Y-48479903D01* X47558061Y-48472434D01* X47566959Y-48456525D01* X47573232Y-48447023D01* X47609739Y-48361609D01* X47647643Y-48280325D01* X47650668Y-48269031D01* X47656419Y-48252396D01* X47662266Y-48238719D01* X47682234Y-48151227D01* X47704638Y-48067620D01* X47706330Y-48048273D01* X47707649Y-48039875D01* X47712674Y-48017864D01* X47716559Y-47931354D01* X47723830Y-47848249D01* X47723830Y-47848247D01* X50047216Y-47848247D01* X50049195Y-47870888D01* X50049369Y-47879078D01* X50048207Y-47904937D01* X50048208Y-47904939D01* X50059214Y-47986195D01* X50059539Y-47989113D01* X50064344Y-48044030D01* X50066408Y-48067620D01* X50073147Y-48092772D01* X50074697Y-48100492D01* X50078616Y-48129422D01* X50078619Y-48129432D01* X50102936Y-48204272D01* X50103857Y-48207383D01* X50123400Y-48280315D01* X50123404Y-48280327D01* X50135798Y-48306908D01* X50138574Y-48313954D01* X50146197Y-48337413D01* X50148620Y-48344870D01* X50153473Y-48353888D01* X50184345Y-48411259D01* X50185939Y-48414436D01* X50216465Y-48479900D01* X50216466Y-48479902D01* X50216467Y-48479903D01* X50235191Y-48506645D01* X50238998Y-48512823D01* X50255966Y-48544354D01* X50255968Y-48544357D01* X50300920Y-48600724D01* X50303232Y-48603816D01* X50342774Y-48660287D01* X50342777Y-48660290D01* X50368182Y-48685695D01* X50372818Y-48690882D01* X50397209Y-48721467D01* X50449037Y-48766748D01* X50452080Y-48769593D01* X50498478Y-48815992D01* X50498479Y-48815993D01* X50498482Y-48815995D01* X50498485Y-48815998D01* X50530010Y-48838071D01* X50530632Y-48838507D01* X50535864Y-48842606D01* X50567805Y-48870512D01* X50624058Y-48904121D01* X50627781Y-48906532D01* X50664273Y-48932084D01* X50678861Y-48942300D01* X50678864Y-48942301D01* X50678869Y-48942305D01* X50717433Y-48960287D01* X50723016Y-48963246D01* X50762273Y-48986702D01* X50820533Y-49008566D01* X50824945Y-49010420D01* X50878447Y-49035369D01* X50922727Y-49047233D01* X50928462Y-49049073D01* X50957879Y-49060113D01* X50974362Y-49066300D01* X51032336Y-49076820D01* X51037301Y-49077934D01* X51091152Y-49092364D01* X51140125Y-49096648D01* X51145773Y-49097406D01* X51184875Y-49104502D01* X51197255Y-49106749D01* X51197256Y-49106749D01* X51252871Y-49106749D01* X51258272Y-49106984D01* X51286893Y-49109488D01* X51310521Y-49111556D01* X51310522Y-49111556D01* X51310522Y-49111555D01* X51310523Y-49111556D01* X51363833Y-49106892D01* X51367027Y-49106749D01* X51367045Y-49106749D01* X51415148Y-49102418D01* X51421914Y-49101810D01* X51529876Y-49092366D01* X51529880Y-49092365D01* X51529894Y-49092364D01* X51529906Y-49092360D01* X51530425Y-49092269D01* X51535659Y-49091573D01* X51536145Y-49091530D01* X51640858Y-49062630D01* X51742599Y-49035369D01* X51742612Y-49035362D01* X51749552Y-49032837D01* X51754243Y-49031338D01* X51754516Y-49031263D01* X51849542Y-48985500D01* X51942177Y-48942305D01* X51942186Y-48942298D01* X51946873Y-48939594D01* X51946944Y-48939717D01* X51957729Y-48933401D01* X51958616Y-48932974D01* X52041391Y-48872834D01* X52122561Y-48815998D01* X52123474Y-48815084D01* X52138275Y-48802442D01* X52141886Y-48799820D01* X52173513Y-48766741D01* X52210425Y-48728133D01* X52278269Y-48660290D01* X52278269Y-48660289D01* X52278272Y-48660287D01* X52280999Y-48656391D01* X52292951Y-48641817D01* X52298435Y-48636083D01* X52351332Y-48555946D01* X52404579Y-48479903D01* X52408061Y-48472434D01* X52416959Y-48456525D01* X52423232Y-48447023D01* X52459739Y-48361609D01* X52497643Y-48280325D01* X52500668Y-48269031D01* X52506419Y-48252396D01* X52512266Y-48238719D01* X52532234Y-48151227D01* X52554638Y-48067620D01* X52556330Y-48048273D01* X52557649Y-48039875D01* X52562674Y-48017864D01* X52566559Y-47931354D01* X52573830Y-47848249D01* X52571850Y-47825617D01* X52571676Y-47817422D01* X52572838Y-47791558D01* X52561828Y-47710291D01* X52561504Y-47707374D01* X52558310Y-47670865D01* X52554638Y-47628878D01* X52547900Y-47603732D01* X52546348Y-47596002D01* X52542970Y-47571069D01* X52542429Y-47567074D01* X52518110Y-47492231D01* X52517194Y-47489138D01* X52502953Y-47435990D01* X52497646Y-47416182D01* X52497642Y-47416172D01* X52494535Y-47409507D01* X52485245Y-47389585D01* X52482471Y-47382545D01* X52472426Y-47351628D01* X52472425Y-47351626D01* X52472422Y-47351619D01* X52436690Y-47285219D01* X52435105Y-47282060D01* X52410015Y-47228254D01* X56412367Y-47228254D01* X56430957Y-47452608D01* X56430959Y-47452620D01* X56486226Y-47670863D01* X56576663Y-47877041D01* X56699799Y-48065514D01* X56699807Y-48065525D01* X56852279Y-48231151D01* X56852284Y-48231156D01* X56889994Y-48260507D01* X57029947Y-48369438D01* X57029948Y-48369438D01* X57029950Y-48369440D01* X57110125Y-48412828D01* X57227949Y-48476591D01* X57440888Y-48549693D01* X57662954Y-48586749D01* X57888092Y-48586749D01* X58110158Y-48549693D01* X58323097Y-48476591D01* X58521099Y-48369438D01* X58698763Y-48231155D01* X58834442Y-48083770D01* X58851238Y-48065525D01* X58851239Y-48065523D01* X58851245Y-48065517D01* X58974383Y-47877040D01* X59064819Y-47670865D01* X59120087Y-47452617D01* X59122171Y-47427471D01* X59138679Y-47228254D01* X59138679Y-47228243D01* X59120088Y-47003889D01* X59120086Y-47003877D01* X59088843Y-46880503D01* X59064819Y-46785633D01* X58974383Y-46579458D01* X58942153Y-46530127D01* X58912814Y-46485219D01* X58851245Y-46390981D01* X58851242Y-46390978D01* X58851238Y-46390972D01* X58698766Y-46225346D01* X58698761Y-46225341D01* X58549954Y-46109519D01* X58521099Y-46087060D01* X58484593Y-46067304D01* X58435002Y-46018085D01* X58419894Y-45949868D01* X58444064Y-45884313D01* X58484593Y-45849194D01* X58485419Y-45848747D01* X58521099Y-45829438D01* X58698763Y-45691155D01* X58807700Y-45572819D01* X58851238Y-45525525D01* X58851239Y-45525523D01* X58851245Y-45525517D01* X58974383Y-45337040D01* X59064819Y-45130865D01* X59120087Y-44912617D01* X59120608Y-44906332D01* X59138679Y-44688254D01* X59138679Y-44688243D01* X59120088Y-44463889D01* X59120086Y-44463877D01* X59111174Y-44428686D01* X59064819Y-44245633D01* X58974383Y-44039458D01* X58957496Y-44013611D01* X58851246Y-43850983D01* X58851238Y-43850972D01* X58698766Y-43685346D01* X58698761Y-43685341D01* X58521100Y-43547061D01* X58521095Y-43547057D01* X58323103Y-43439910D01* X58323100Y-43439908D01* X58323097Y-43439907D01* X58323094Y-43439906D01* X58323092Y-43439905D01* X58110160Y-43366805D01* X57888092Y-43329749D01* X57662954Y-43329749D01* X57440885Y-43366805D01* X57227953Y-43439905D01* X57227942Y-43439910D01* X57029950Y-43547057D01* X57029945Y-43547061D01* X56852284Y-43685341D01* X56852279Y-43685346D01* X56699807Y-43850972D01* X56699799Y-43850983D01* X56576663Y-44039456D01* X56486226Y-44245634D01* X56430959Y-44463877D01* X56430957Y-44463889D01* X56412367Y-44688243D01* X56412367Y-44688254D01* X56430957Y-44912608D01* X56430959Y-44912620D01* X56486226Y-45130863D01* X56576663Y-45337041D01* X56699799Y-45525514D01* X56699807Y-45525525D01* X56852279Y-45691151D01* X56852284Y-45691156D01* X56888387Y-45719256D01* X57029947Y-45829438D01* X57029952Y-45829440D01* X57029954Y-45829442D01* X57066453Y-45849195D01* X57116043Y-45898414D01* X57131151Y-45966631D01* X57106980Y-46032186D01* X57066453Y-46067303D01* X57029954Y-46087055D01* X57029945Y-46087061D01* X56852284Y-46225341D01* X56852279Y-46225346D01* X56699807Y-46390972D01* X56699799Y-46390983D01* X56576663Y-46579456D01* X56486226Y-46785634D01* X56430959Y-47003877D01* X56430957Y-47003889D01* X56412367Y-47228243D01* X56412367Y-47228254D01* X52410015Y-47228254D01* X52404579Y-47216596D01* X52403166Y-47214578D01* X52385860Y-47189862D01* X52382046Y-47183673D01* X52365078Y-47152141D01* X52320117Y-47095762D01* X52317802Y-47092666D01* X52278273Y-47036212D01* X52252863Y-47010802D01* X52248225Y-47005613D01* X52223835Y-46975029D01* X52172014Y-46929754D01* X52168965Y-46926904D01* X52122562Y-46880500D01* X52090414Y-46857990D01* X52085179Y-46853890D01* X52053241Y-46825986D01* X51997009Y-46792388D01* X51993248Y-46789953D01* X51955503Y-46763524D01* X51942177Y-46754193D01* X51928463Y-46747798D01* X51903623Y-46736214D01* X51898024Y-46733246D01* X51867224Y-46714845D01* X51858773Y-46709796D01* X51800511Y-46687930D01* X51796111Y-46686082D01* X51764416Y-46671302D01* X51742600Y-46661129D01* X51742588Y-46661125D01* X51698316Y-46649262D01* X51692576Y-46647421D01* X51646683Y-46630197D01* X51591478Y-46620179D01* X51588714Y-46619677D01* X51583740Y-46618561D01* X51529895Y-46604134D01* X51517893Y-46603083D01* X51480926Y-46599849D01* X51475264Y-46599089D01* X51440521Y-46592785D01* X51423790Y-46589749D01* X51423789Y-46589749D01* X51368175Y-46589749D01* X51362773Y-46589513D01* X51334152Y-46587009D01* X51310525Y-46584942D01* X51310520Y-46584942D01* X51257251Y-46589602D01* X51254012Y-46589748D01* X51199131Y-46594687D01* X51091141Y-46604134D01* X51090564Y-46604236D01* X51085412Y-46604921D01* X51084909Y-46604966D01* X51084892Y-46604969D01* X50980187Y-46633867D01* X50878441Y-46661130D01* X50871467Y-46663667D01* X50866791Y-46665161D01* X50866545Y-46665228D01* X50866534Y-46665233D01* X50771487Y-46711004D01* X50678875Y-46754190D01* X50674181Y-46756900D01* X50674110Y-46756778D01* X50663347Y-46763082D01* X50662431Y-46763523D01* X50662425Y-46763526D01* X50579642Y-46823672D01* X50498481Y-46880503D01* X50497550Y-46881434D01* X50482787Y-46894042D01* X50479164Y-46896674D01* X50479154Y-46896683D01* X50410620Y-46968364D01* X50342770Y-47036215D01* X50342769Y-47036216D01* X50340029Y-47040129D01* X50328104Y-47054668D01* X50322612Y-47060412D01* X50322608Y-47060418D01* X50269706Y-47140562D01* X50216466Y-47216596D01* X50216464Y-47216601D01* X50212985Y-47224061D01* X50204099Y-47239951D01* X50197815Y-47249471D01* X50197814Y-47249473D01* X50161303Y-47334893D01* X50123405Y-47416166D01* X50123403Y-47416172D01* X50120375Y-47427471D01* X50114626Y-47444099D01* X50110990Y-47452608D01* X50108782Y-47457774D01* X50108779Y-47457782D01* X50088811Y-47545270D01* X50066408Y-47628875D01* X50066407Y-47628881D01* X50064715Y-47648219D01* X50063396Y-47656615D01* X50058372Y-47678634D01* X50054486Y-47765143D01* X50047216Y-47848245D01* X50047216Y-47848247D01* X47723830Y-47848247D01* X47721850Y-47825617D01* X47721676Y-47817422D01* X47722838Y-47791558D01* X47711828Y-47710291D01* X47711504Y-47707374D01* X47708310Y-47670865D01* X47704638Y-47628878D01* X47697900Y-47603732D01* X47696348Y-47596002D01* X47692970Y-47571069D01* X47692429Y-47567074D01* X47668110Y-47492231D01* X47667194Y-47489138D01* X47652953Y-47435990D01* X47647646Y-47416182D01* X47647642Y-47416172D01* X47644535Y-47409507D01* X47635245Y-47389585D01* X47632471Y-47382545D01* X47622426Y-47351628D01* X47622425Y-47351626D01* X47622422Y-47351619D01* X47586690Y-47285219D01* X47585105Y-47282060D01* X47554579Y-47216596D01* X47553166Y-47214578D01* X47535860Y-47189862D01* X47532046Y-47183673D01* X47515078Y-47152141D01* X47470117Y-47095762D01* X47467802Y-47092666D01* X47428273Y-47036212D01* X47402863Y-47010802D01* X47398225Y-47005613D01* X47373835Y-46975029D01* X47322014Y-46929754D01* X47318965Y-46926904D01* X47272562Y-46880500D01* X47240414Y-46857990D01* X47235179Y-46853890D01* X47203241Y-46825986D01* X47147009Y-46792388D01* X47143248Y-46789953D01* X47105503Y-46763524D01* X47092177Y-46754193D01* X47078463Y-46747798D01* X47053623Y-46736214D01* X47048024Y-46733246D01* X47017224Y-46714845D01* X47008773Y-46709796D01* X46950511Y-46687930D01* X46946111Y-46686082D01* X46914416Y-46671302D01* X46892600Y-46661129D01* X46892588Y-46661125D01* X46848316Y-46649262D01* X46842576Y-46647421D01* X46796683Y-46630197D01* X46741478Y-46620179D01* X46738714Y-46619677D01* X46733740Y-46618561D01* X46679895Y-46604134D01* X46667893Y-46603083D01* X46630926Y-46599849D01* X46625264Y-46599089D01* X46590521Y-46592785D01* X46573790Y-46589749D01* X46573789Y-46589749D01* X46518175Y-46589749D01* X46512773Y-46589513D01* X46484152Y-46587009D01* X46460525Y-46584942D01* X46460520Y-46584942D01* X46407251Y-46589602D01* X46404012Y-46589748D01* X46349131Y-46594687D01* X46241141Y-46604134D01* X46240564Y-46604236D01* X46235412Y-46604921D01* X46234909Y-46604966D01* X46234892Y-46604969D01* X46130187Y-46633867D01* X46028441Y-46661130D01* X46021467Y-46663667D01* X46016791Y-46665161D01* X46016545Y-46665228D01* X46016534Y-46665233D01* X45921487Y-46711004D01* X45828875Y-46754190D01* X45824181Y-46756900D01* X45824110Y-46756778D01* X45813347Y-46763082D01* X45812431Y-46763523D01* X45812425Y-46763526D01* X45729642Y-46823672D01* X45648481Y-46880503D01* X45647550Y-46881434D01* X45632787Y-46894042D01* X45629164Y-46896674D01* X45629154Y-46896683D01* X45560620Y-46968364D01* X45492770Y-47036215D01* X45492769Y-47036216D01* X45490029Y-47040129D01* X45478104Y-47054668D01* X45472612Y-47060412D01* X45472608Y-47060418D01* X45419706Y-47140562D01* X45366466Y-47216596D01* X45366464Y-47216601D01* X45362985Y-47224061D01* X45354099Y-47239951D01* X45347815Y-47249471D01* X45347814Y-47249473D01* X45311303Y-47334893D01* X45273405Y-47416166D01* X45273403Y-47416172D01* X45270375Y-47427471D01* X45264626Y-47444099D01* X45260990Y-47452608D01* X45258782Y-47457774D01* X45258779Y-47457782D01* X45238811Y-47545270D01* X45216408Y-47628875D01* X45216407Y-47628881D01* X45214715Y-47648219D01* X45213396Y-47656615D01* X45208372Y-47678634D01* X45204486Y-47765143D01* X45197216Y-47848245D01* X45197216Y-47848247D01* X41207013Y-47848247D01* X41284819Y-47670865D01* X41340087Y-47452617D01* X41342171Y-47427471D01* X41358679Y-47228254D01* X41358679Y-47228243D01* X41340088Y-47003889D01* X41340086Y-47003877D01* X41308843Y-46880503D01* X41284819Y-46785633D01* X41194383Y-46579458D01* X41162153Y-46530127D01* X41132814Y-46485219D01* X41071245Y-46390981D01* X41071242Y-46390978D01* X41071238Y-46390972D01* X40918766Y-46225346D01* X40918761Y-46225341D01* X40769954Y-46109519D01* X40741099Y-46087060D01* X40704593Y-46067304D01* X40655002Y-46018085D01* X40639894Y-45949868D01* X40664064Y-45884313D01* X40704593Y-45849194D01* X40705419Y-45848747D01* X40741099Y-45829438D01* X40918763Y-45691155D01* X41027700Y-45572819D01* X41071238Y-45525525D01* X41071239Y-45525523D01* X41071245Y-45525517D01* X41194383Y-45337040D01* X41284819Y-45130865D01* X41340087Y-44912617D01* X41340608Y-44906332D01* X41347907Y-44818249D01* X44747196Y-44818249D01* X44751513Y-44870350D01* X44754494Y-44906332D01* X44758379Y-44997792D01* X44758380Y-44997801D01* X44763533Y-45021710D01* X44764713Y-45029659D01* X44766470Y-45050866D01* X44766472Y-45050878D01* X44788940Y-45139602D01* X44808893Y-45232184D01* X44816780Y-45251810D01* X44819357Y-45259715D01* X44823774Y-45277156D01* X44861808Y-45363865D01* X44898290Y-45454653D01* X44907652Y-45469857D01* X44911640Y-45477469D01* X44917538Y-45490917D01* X44971047Y-45572819D01* X45023996Y-45658814D01* X45023998Y-45658817D01* X45023999Y-45658818D01* X45030654Y-45666380D01* X45030681Y-45666410D01* X45041409Y-45680516D01* X45045205Y-45686326D01* X45045209Y-45686332D01* X45113602Y-45760626D01* X45182405Y-45838801D01* X45182406Y-45838802D01* X45187593Y-45842990D01* X45200930Y-45855489D01* X45203306Y-45858071D01* X45254639Y-45898024D01* X45285471Y-45922021D01* X45332554Y-45960038D01* X45368944Y-45989422D01* X45368945Y-45989422D01* X45368947Y-45989424D01* X45371688Y-45990955D01* X45371763Y-45990997D01* X45387457Y-46001401D01* X45387502Y-46001436D01* X45387514Y-46001444D01* X45444322Y-46032186D01* X45481869Y-46052505D01* X45578263Y-46106354D01* X45578268Y-46106355D01* X45578272Y-46106358D01* X45580663Y-46107439D01* X45588000Y-46110697D01* X45588098Y-46110475D01* X45592785Y-46112530D01* X45592796Y-46112536D01* X45697263Y-46148400D01* X45804329Y-46186229D01* X45804890Y-46186325D01* X45809632Y-46187330D01* X45813566Y-46188327D01* X45813572Y-46188329D01* X45925618Y-46207026D01* X46040633Y-46226748D01* X46040642Y-46226749D01* X46277230Y-46226749D01* X46277235Y-46226749D01* X46310171Y-46221252D01* X46333998Y-46217277D01* X46338936Y-46216655D01* X46392464Y-46212100D01* X46399410Y-46211509D01* X46399411Y-46211508D01* X46399421Y-46211508D01* X46451820Y-46197863D01* X46457191Y-46196718D01* X46507474Y-46188329D01* X46565025Y-46168571D01* X46569498Y-46167222D01* X46631447Y-46151093D01* X46677782Y-46130147D01* X46683156Y-46128016D01* X46728250Y-46112536D01* X46784655Y-46082010D01* X46788577Y-46080065D01* X46849925Y-46052335D01* X46889318Y-46025708D01* X46894502Y-46022563D01* X46933531Y-46001444D01* X46933535Y-46001442D01* X46933536Y-46001441D01* X46933540Y-46001439D01* X46986751Y-45960021D01* X46990084Y-45957602D01* X47048570Y-45918074D01* X47080524Y-45887447D01* X47085312Y-45883307D01* X47117743Y-45858067D01* X47165642Y-45806033D01* X47168317Y-45803305D01* X47221667Y-45752174D01* X47246020Y-45719245D01* X47250250Y-45714126D01* X47256019Y-45707860D01* X47275837Y-45686332D01* X47316308Y-45624384D01* X47318358Y-45621438D01* X47324968Y-45612501D01* X47364238Y-45559406D01* X47381199Y-45525763D01* X47384637Y-45519798D01* X47403507Y-45490918D01* X47434565Y-45420110D01* X47435936Y-45417199D01* X47472180Y-45345316D01* X47482244Y-45312449D01* X47484744Y-45305715D01* X47497272Y-45277156D01* X47517058Y-45199019D01* X47517857Y-45196158D01* X47542387Y-45116064D01* X47546333Y-45085243D01* X47547721Y-45077933D01* X47554574Y-45050875D01* X47561613Y-44965921D01* X47572841Y-44878244D01* X47571662Y-44850498D01* X47571817Y-44842774D01* X47573850Y-44818249D01* X50197196Y-44818249D01* X50201513Y-44870350D01* X50204494Y-44906332D01* X50208379Y-44997792D01* X50208380Y-44997801D01* X50213533Y-45021710D01* X50214713Y-45029659D01* X50216470Y-45050866D01* X50216472Y-45050878D01* X50238940Y-45139602D01* X50258893Y-45232184D01* X50266780Y-45251810D01* X50269357Y-45259715D01* X50273774Y-45277156D01* X50311808Y-45363865D01* X50348290Y-45454653D01* X50357652Y-45469857D01* X50361640Y-45477469D01* X50367538Y-45490917D01* X50421047Y-45572819D01* X50473996Y-45658814D01* X50473998Y-45658817D01* X50473999Y-45658818D01* X50480654Y-45666380D01* X50480681Y-45666410D01* X50491409Y-45680516D01* X50495205Y-45686326D01* X50495209Y-45686332D01* X50563602Y-45760626D01* X50632405Y-45838801D01* X50632406Y-45838802D01* X50637593Y-45842990D01* X50650930Y-45855489D01* X50653306Y-45858071D01* X50704639Y-45898024D01* X50735471Y-45922021D01* X50782554Y-45960038D01* X50818944Y-45989422D01* X50818945Y-45989422D01* X50818947Y-45989424D01* X50821688Y-45990955D01* X50821763Y-45990997D01* X50837457Y-46001401D01* X50837502Y-46001436D01* X50837514Y-46001444D01* X50894322Y-46032186D01* X50931869Y-46052505D01* X51028263Y-46106354D01* X51028268Y-46106355D01* X51028272Y-46106358D01* X51030663Y-46107439D01* X51038000Y-46110697D01* X51038098Y-46110475D01* X51042785Y-46112530D01* X51042796Y-46112536D01* X51147263Y-46148400D01* X51254329Y-46186229D01* X51254890Y-46186325D01* X51259632Y-46187330D01* X51263566Y-46188327D01* X51263572Y-46188329D01* X51375618Y-46207026D01* X51490633Y-46226748D01* X51490642Y-46226749D01* X51727230Y-46226749D01* X51727235Y-46226749D01* X51760171Y-46221252D01* X51783998Y-46217277D01* X51788936Y-46216655D01* X51842464Y-46212100D01* X51849410Y-46211509D01* X51849411Y-46211508D01* X51849421Y-46211508D01* X51901820Y-46197863D01* X51907191Y-46196718D01* X51957474Y-46188329D01* X52015025Y-46168571D01* X52019498Y-46167222D01* X52081447Y-46151093D01* X52127782Y-46130147D01* X52133156Y-46128016D01* X52178250Y-46112536D01* X52234655Y-46082010D01* X52238577Y-46080065D01* X52299925Y-46052335D01* X52339318Y-46025708D01* X52344502Y-46022563D01* X52383531Y-46001444D01* X52383535Y-46001442D01* X52383536Y-46001441D01* X52383540Y-46001439D01* X52436751Y-45960021D01* X52440084Y-45957602D01* X52498570Y-45918074D01* X52530524Y-45887447D01* X52535312Y-45883307D01* X52567743Y-45858067D01* X52615642Y-45806033D01* X52618317Y-45803305D01* X52671667Y-45752174D01* X52696020Y-45719245D01* X52700250Y-45714126D01* X52706019Y-45707860D01* X52725837Y-45686332D01* X52766308Y-45624384D01* X52768358Y-45621438D01* X52774968Y-45612501D01* X52814238Y-45559406D01* X52831199Y-45525763D01* X52834637Y-45519798D01* X52853507Y-45490918D01* X52884565Y-45420110D01* X52885936Y-45417199D01* X52922180Y-45345316D01* X52932244Y-45312449D01* X52934744Y-45305715D01* X52947272Y-45277156D01* X52967058Y-45199019D01* X52967857Y-45196158D01* X52992387Y-45116064D01* X52996333Y-45085243D01* X52997721Y-45077933D01* X53004574Y-45050875D01* X53011613Y-44965921D01* X53022841Y-44878244D01* X53021662Y-44850498D01* X53021817Y-44842774D01* X53023850Y-44818249D01* X53022143Y-44797652D01* X53016551Y-44730165D01* X53012667Y-44638709D01* X53012666Y-44638706D01* X53012666Y-44638698D01* X53007510Y-44614779D01* X53006331Y-44606835D01* X53004574Y-44585623D01* X52982105Y-44496895D01* X52962153Y-44404317D01* X52954258Y-44384673D01* X52951690Y-44376793D01* X52947272Y-44359342D01* X52909237Y-44272632D01* X52896350Y-44240562D01* X52872757Y-44181847D01* X52865529Y-44170109D01* X52863390Y-44166635D01* X52859405Y-44159027D01* X52858625Y-44157249D01* X52853507Y-44145580D01* X52799998Y-44063678D01* X52768240Y-44012099D01* X52747052Y-43977688D01* X52747051Y-43977687D01* X52747047Y-43977680D01* X52747041Y-43977673D01* X52747038Y-43977669D01* X52740362Y-43970083D01* X52729641Y-43955988D01* X52725838Y-43950168D01* X52725837Y-43950166D01* X52657443Y-43875871D01* X52588642Y-43797698D01* X52588641Y-43797697D01* X52588637Y-43797693D01* X52583452Y-43793507D01* X52570120Y-43781014D01* X52567743Y-43778431D01* X52485574Y-43714476D01* X52402099Y-43647074D01* X52402097Y-43647072D01* X52402091Y-43647068D01* X52399273Y-43645494D01* X52383593Y-43635100D01* X52383543Y-43635061D01* X52383541Y-43635060D01* X52383540Y-43635059D01* X52289176Y-43583992D01* X52236345Y-43554479D01* X52192782Y-43530143D01* X52190522Y-43529122D01* X52183042Y-43525800D01* X52182945Y-43526022D01* X52178248Y-43523961D01* X52073782Y-43488097D01* X51966720Y-43450270D01* X51966719Y-43450269D01* X51966717Y-43450269D01* X51966715Y-43450268D01* X51966706Y-43450266D01* X51966156Y-43450172D01* X51961436Y-43449171D01* X51957489Y-43448172D01* X51957476Y-43448169D01* X51957474Y-43448169D01* X51845427Y-43429471D01* X51730413Y-43409749D01* X51730404Y-43409749D01* X51727235Y-43409749D01* X51493811Y-43409749D01* X51493810Y-43409749D01* X51437052Y-43419219D01* X51432110Y-43419841D01* X51398353Y-43422714D01* X51371623Y-43424990D01* X51371620Y-43424990D01* X51319256Y-43438625D01* X51313836Y-43439781D01* X51263572Y-43448168D01* X51206035Y-43467920D01* X51201528Y-43469278D01* X51156418Y-43481025D01* X51139599Y-43485405D01* X51139596Y-43485406D01* X51139593Y-43485407D01* X51093281Y-43506341D01* X51087882Y-43508482D01* X51073286Y-43513493D01* X51042796Y-43523961D01* X50986402Y-43554479D01* X50982433Y-43556447D01* X50921120Y-43584163D01* X50921118Y-43584164D01* X50881732Y-43610784D01* X50876525Y-43613942D01* X50864961Y-43620200D01* X50837501Y-43635061D01* X50784303Y-43676467D01* X50780948Y-43678902D01* X50750872Y-43699230D01* X50722474Y-43718425D01* X50722471Y-43718428D01* X50690535Y-43749035D01* X50685716Y-43753201D01* X50653304Y-43778430D01* X50653303Y-43778431D01* X50605421Y-43830442D01* X50602707Y-43833211D01* X50549380Y-43884322D01* X50525026Y-43917248D01* X50520793Y-43922372D01* X50495207Y-43950167D01* X50495204Y-43950171D01* X50454745Y-44012099D01* X50452689Y-44015055D01* X50406810Y-44077088D01* X50406809Y-44077089D01* X50389856Y-44110712D01* X50386398Y-44116712D01* X50367538Y-44145581D01* X50336501Y-44216338D01* X50335085Y-44219345D01* X50298865Y-44291182D01* X50298864Y-44291183D01* X50288803Y-44324035D01* X50286298Y-44330786D01* X50273772Y-44359343D01* X50273772Y-44359344D01* X50253992Y-44437452D01* X50253172Y-44440386D01* X50228660Y-44520427D01* X50228658Y-44520439D01* X50224714Y-44551235D01* X50223318Y-44558584D01* X50216473Y-44585616D01* X50216471Y-44585628D01* X50209432Y-44670576D01* X50198205Y-44758252D01* X50198204Y-44758253D01* X50199382Y-44785980D01* X50199226Y-44793734D01* X50197196Y-44818244D01* X50197196Y-44818249D01* X47573850Y-44818249D01* X47572143Y-44797652D01* X47566551Y-44730165D01* X47562667Y-44638709D01* X47562666Y-44638706D01* X47562666Y-44638698D01* X47557510Y-44614779D01* X47556331Y-44606835D01* X47554574Y-44585623D01* X47532105Y-44496895D01* X47512153Y-44404317D01* X47504258Y-44384673D01* X47501690Y-44376793D01* X47497272Y-44359342D01* X47459237Y-44272632D01* X47446350Y-44240562D01* X47422757Y-44181847D01* X47415529Y-44170109D01* X47413390Y-44166635D01* X47409405Y-44159027D01* X47408625Y-44157249D01* X47403507Y-44145580D01* X47349998Y-44063678D01* X47318240Y-44012099D01* X47297052Y-43977688D01* X47297051Y-43977687D01* X47297047Y-43977680D01* X47297041Y-43977673D01* X47297038Y-43977669D01* X47290362Y-43970083D01* X47279641Y-43955988D01* X47275838Y-43950168D01* X47275837Y-43950166D01* X47207443Y-43875871D01* X47138642Y-43797698D01* X47138641Y-43797697D01* X47138637Y-43797693D01* X47133452Y-43793507D01* X47120120Y-43781014D01* X47117743Y-43778431D01* X47035574Y-43714476D01* X46952099Y-43647074D01* X46952097Y-43647072D01* X46952091Y-43647068D01* X46949273Y-43645494D01* X46933593Y-43635100D01* X46933543Y-43635061D01* X46933541Y-43635060D01* X46933540Y-43635059D01* X46839176Y-43583992D01* X46786345Y-43554479D01* X46742782Y-43530143D01* X46740522Y-43529122D01* X46733042Y-43525800D01* X46732945Y-43526022D01* X46728248Y-43523961D01* X46623782Y-43488097D01* X46516720Y-43450270D01* X46516719Y-43450269D01* X46516717Y-43450269D01* X46516715Y-43450268D01* X46516706Y-43450266D01* X46516156Y-43450172D01* X46511436Y-43449171D01* X46507489Y-43448172D01* X46507476Y-43448169D01* X46507474Y-43448169D01* X46395427Y-43429471D01* X46280413Y-43409749D01* X46280404Y-43409749D01* X46277235Y-43409749D01* X46043811Y-43409749D01* X46043810Y-43409749D01* X45987052Y-43419219D01* X45982110Y-43419841D01* X45948353Y-43422714D01* X45921623Y-43424990D01* X45921620Y-43424990D01* X45869256Y-43438625D01* X45863836Y-43439781D01* X45813572Y-43448168D01* X45756035Y-43467920D01* X45751528Y-43469278D01* X45706418Y-43481025D01* X45689599Y-43485405D01* X45689596Y-43485406D01* X45689593Y-43485407D01* X45643281Y-43506341D01* X45637882Y-43508482D01* X45623286Y-43513493D01* X45592796Y-43523961D01* X45536402Y-43554479D01* X45532433Y-43556447D01* X45471120Y-43584163D01* X45471118Y-43584164D01* X45431732Y-43610784D01* X45426525Y-43613942D01* X45414961Y-43620200D01* X45387501Y-43635061D01* X45334303Y-43676467D01* X45330948Y-43678902D01* X45300872Y-43699230D01* X45272474Y-43718425D01* X45272471Y-43718428D01* X45240535Y-43749035D01* X45235716Y-43753201D01* X45203304Y-43778430D01* X45203303Y-43778431D01* X45155421Y-43830442D01* X45152707Y-43833211D01* X45099380Y-43884322D01* X45075026Y-43917248D01* X45070793Y-43922372D01* X45045207Y-43950167D01* X45045204Y-43950171D01* X45004745Y-44012099D01* X45002689Y-44015055D01* X44956810Y-44077088D01* X44956809Y-44077089D01* X44939856Y-44110712D01* X44936398Y-44116712D01* X44917538Y-44145581D01* X44886501Y-44216338D01* X44885085Y-44219345D01* X44848865Y-44291182D01* X44848864Y-44291183D01* X44838803Y-44324035D01* X44836298Y-44330786D01* X44823772Y-44359343D01* X44823772Y-44359344D01* X44803992Y-44437452D01* X44803172Y-44440386D01* X44778660Y-44520427D01* X44778658Y-44520439D01* X44774714Y-44551235D01* X44773318Y-44558584D01* X44766473Y-44585616D01* X44766471Y-44585628D01* X44759432Y-44670576D01* X44748205Y-44758252D01* X44748204Y-44758253D01* X44749382Y-44785980D01* X44749226Y-44793734D01* X44747196Y-44818244D01* X44747196Y-44818249D01* X41347907Y-44818249D01* X41358679Y-44688254D01* X41358679Y-44688243D01* X41340088Y-44463889D01* X41340086Y-44463877D01* X41331174Y-44428686D01* X41284819Y-44245633D01* X41194383Y-44039458D01* X41177496Y-44013611D01* X41071246Y-43850983D01* X41071238Y-43850972D01* X40918766Y-43685346D01* X40918761Y-43685341D01* X40741100Y-43547061D01* X40741095Y-43547057D01* X40543103Y-43439910D01* X40543100Y-43439908D01* X40543097Y-43439907D01* X40543094Y-43439906D01* X40543092Y-43439905D01* X40330160Y-43366805D01* X40108092Y-43329749D01* X39882954Y-43329749D01* X39660885Y-43366805D01* X39447953Y-43439905D01* X39447942Y-43439910D01* X39249950Y-43547057D01* X39249945Y-43547061D01* X39072284Y-43685341D01* X39072279Y-43685346D01* X38919807Y-43850972D01* X38919799Y-43850983D01* X38796663Y-44039456D01* X38706226Y-44245634D01* X38650959Y-44463877D01* X38650957Y-44463889D01* X38632367Y-44688243D01* X38632367Y-44688254D01* X38650957Y-44912608D01* X38650959Y-44912620D01* X38706226Y-45130863D01* X38796663Y-45337041D01* X38919799Y-45525514D01* X38919807Y-45525525D01* X39072279Y-45691151D01* X39072284Y-45691156D01* X39108387Y-45719256D01* X39249947Y-45829438D01* X39249952Y-45829440D01* X39249954Y-45829442D01* X39286453Y-45849195D01* X39336043Y-45898414D01* X39351151Y-45966631D01* X39326980Y-46032186D01* X39286453Y-46067303D01* X39249954Y-46087055D01* X39249945Y-46087061D01* X39072284Y-46225341D01* X39072279Y-46225346D01* X38919807Y-46390972D01* X38919799Y-46390983D01* X38796663Y-46579456D01* X38706226Y-46785634D01* X38650959Y-47003877D01* X38650957Y-47003889D01* X38632367Y-47228243D01* X38632367Y-47228254D01* X33798903Y-47228254D01* X33798903Y-43087159D01* X33799036Y-43083104D01* X33815526Y-42831457D01* X33816583Y-42823417D01* X33865386Y-42578057D01* X33867479Y-42570244D01* X33947891Y-42333351D01* X33950994Y-42325861D01* X34019305Y-42187338D01* X34061632Y-42101504D01* X34065681Y-42094491D01* X34204660Y-41886493D01* X34209598Y-41880056D01* X34374532Y-41691982D01* X34380271Y-41686244D01* X34568343Y-41521308D01* X34574765Y-41516379D01* X34782768Y-41377394D01* X34789782Y-41373344D01* X35014155Y-41262695D01* X35021633Y-41259599D01* X35258524Y-41179185D01* X35266338Y-41177091D01* X35511695Y-41128286D01* X35519724Y-41127229D01* X35601823Y-41121848D01* X35771065Y-41110757D01* X35775121Y-41110624D01* X35781688Y-41110624D01* X65092585Y-41110624D01* X65159624Y-41130309D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,GND2*% G36* X98691593Y-41110757D02* G01* X98943239Y-41127247D01* X98951279Y-41128304D01* X99196625Y-41177104D01* X99204465Y-41179205D01* X99367727Y-41234624D01* X99441333Y-41259609D01* X99448834Y-41262716D01* X99673181Y-41373350D01* X99680207Y-41377406D01* X99710071Y-41397360D01* X99888199Y-41516380D01* X99894634Y-41521318D01* X100082705Y-41686251D01* X100088445Y-41691992D01* X100253379Y-41880061D01* X100258321Y-41886502D01* X100397286Y-42094479D01* X100401345Y-42101510D01* X100511982Y-42325861D01* X100515089Y-42333362D01* X100595492Y-42570230D01* X100597594Y-42578072D01* X100646392Y-42823409D01* X100647452Y-42831459D01* X100663940Y-43083058D01* X100664073Y-43087113D01* X100664073Y-113564339D01* X100663940Y-113568394D01* X100647449Y-113820040D01* X100646390Y-113828090D01* X100597592Y-114073424D01* X100595490Y-114081267D01* X100515087Y-114318135D01* X100511980Y-114325636D01* X100401345Y-114549983D01* X100397286Y-114557014D01* X100258317Y-114764997D01* X100253375Y-114771438D01* X100088445Y-114959505D01* X100082704Y-114965246D01* X99894634Y-115130178D01* X99888193Y-115135120D01* X99680216Y-115274085D01* X99673185Y-115278144D01* X99448834Y-115388780D01* X99441333Y-115391887D01* X99204464Y-115472291D01* X99196622Y-115474392D01* X98951288Y-115523189D01* X98943239Y-115524249D01* X98691572Y-115540742D01* X98687517Y-115540875D01* X68196000Y-115540875D01* X68128961Y-115521190D01* X68083206Y-115468386D01* X68072000Y-115416875D01* X68072000Y-104284001D01* X76006891Y-104284001D01* X76027300Y-104569362D01* X76088109Y-104848895D01* X76188091Y-105116958D01* X76325191Y-105368038D01* X76325196Y-105368046D01* X76431882Y-105510561D01* X76431883Y-105510562D01* X77041438Y-104901006D01* X77090348Y-104979999D01* X77233931Y-105137501D01* X77392388Y-105257163D01* X76785436Y-105864115D01* X76927960Y-105970807D01* X76927961Y-105970808D01* X77179042Y-106107908D01* X77179041Y-106107908D01* X77447104Y-106207890D01* X77726637Y-106268699D01* X78011999Y-106289109D01* X78012001Y-106289109D01* X78297362Y-106268699D01* X78576895Y-106207890D01* X78844958Y-106107908D01* X79096047Y-105970803D01* X79238561Y-105864116D01* X79238562Y-105864115D01* X78631611Y-105257163D01* X78790069Y-105137501D01* X78933652Y-104979999D01* X78982560Y-104901007D01* X79592115Y-105510562D01* X79592116Y-105510561D01* X79698803Y-105368047D01* X79835908Y-105116958D01* X79935890Y-104848895D01* X79996699Y-104569362D01* X80017109Y-104284001D01* X89146891Y-104284001D01* X89167300Y-104569362D01* X89228109Y-104848895D01* X89328091Y-105116958D01* X89465191Y-105368038D01* X89465196Y-105368046D01* X89571882Y-105510561D01* X89571883Y-105510562D01* X90181438Y-104901006D01* X90230348Y-104979999D01* X90373931Y-105137501D01* X90532388Y-105257163D01* X89925436Y-105864115D01* X90067960Y-105970807D01* X90067961Y-105970808D01* X90319042Y-106107908D01* X90319041Y-106107908D01* X90587104Y-106207890D01* X90866637Y-106268699D01* X91151999Y-106289109D01* X91152001Y-106289109D01* X91437362Y-106268699D01* X91716895Y-106207890D01* X91984958Y-106107908D01* X92236047Y-105970803D01* X92378561Y-105864116D01* X92378562Y-105864115D01* X91771611Y-105257163D01* X91930069Y-105137501D01* X92073652Y-104979999D01* X92122560Y-104901007D01* X92732115Y-105510562D01* X92732116Y-105510561D01* X92838803Y-105368047D01* X92975908Y-105116958D01* X93065869Y-104875762D01* X94304381Y-104875762D01* X94322971Y-105100116D01* X94322973Y-105100128D01* X94378240Y-105318371D01* X94468677Y-105524549D01* X94591813Y-105713022D01* X94591821Y-105713033D01* X94730904Y-105864115D01* X94744297Y-105878663D01* X94921961Y-106016946D01* X94921962Y-106016946D01* X94921964Y-106016948D01* X95048672Y-106085518D01* X95119963Y-106124099D01* X95332902Y-106197201D01* X95554968Y-106234257D01* X95780106Y-106234257D01* X96002172Y-106197201D01* X96215111Y-106124099D01* X96413113Y-106016946D01* X96590777Y-105878663D01* X96743259Y-105713025D01* X96866397Y-105524548D01* X96956833Y-105318373D01* X97012101Y-105100125D01* X97030693Y-104875757D01* X97028467Y-104848895D01* X97012102Y-104651397D01* X97012100Y-104651385D01* X96956833Y-104433142D01* X96938156Y-104390563D01* X96866397Y-104226966D01* X96743259Y-104038489D01* X96743256Y-104038486D01* X96743252Y-104038480D01* X96590780Y-103872854D01* X96590775Y-103872849D01* X96413114Y-103734569D01* X96413109Y-103734565D01* X96215117Y-103627418D01* X96215114Y-103627416D01* X96215111Y-103627415D01* X96215108Y-103627414D01* X96215106Y-103627413D01* X96002174Y-103554313D01* X95780106Y-103517257D01* X95554968Y-103517257D01* X95332899Y-103554313D01* X95119967Y-103627413D01* X95119956Y-103627418D01* X94921964Y-103734565D01* X94921959Y-103734569D01* X94744298Y-103872849D01* X94744293Y-103872854D01* X94591821Y-104038480D01* X94591813Y-104038491D01* X94468677Y-104226964D01* X94378240Y-104433142D01* X94322973Y-104651385D01* X94322971Y-104651397D01* X94304381Y-104875751D01* X94304381Y-104875762D01* X93065869Y-104875762D01* X93075890Y-104848895D01* X93136699Y-104569362D01* X93157109Y-104284001D01* X93157109Y-104283998D01* X93136699Y-103998637D01* X93075890Y-103719104D01* X92975908Y-103451041D01* X92838808Y-103199961D01* X92838807Y-103199960D01* X92732115Y-103057436D01* X92122560Y-103666991D01* X92073652Y-103588001D01* X91930069Y-103430499D01* X91771610Y-103310835D01* X92378562Y-102703883D01* X92378561Y-102703882D01* X92236046Y-102597196D01* X92236038Y-102597191D01* X91984957Y-102460091D01* X91984958Y-102460091D01* X91716895Y-102360109D01* X91437362Y-102299300D01* X91152001Y-102278891D01* X91151999Y-102278891D01* X90866637Y-102299300D01* X90587104Y-102360109D01* X90319041Y-102460091D01* X90067961Y-102597191D01* X90067953Y-102597196D01* X89925437Y-102703882D01* X89925436Y-102703883D01* X90532389Y-103310835D01* X90373931Y-103430499D01* X90230348Y-103588001D01* X90181439Y-103666992D01* X89571883Y-103057436D01* X89571882Y-103057437D01* X89465196Y-103199953D01* X89465191Y-103199961D01* X89328091Y-103451041D01* X89228109Y-103719104D01* X89167300Y-103998637D01* X89146891Y-104283998D01* X89146891Y-104284001D01* X80017109Y-104284001D01* X80017109Y-104283998D01* X79996699Y-103998637D01* X79935890Y-103719104D01* X79835908Y-103451041D01* X79698808Y-103199961D01* X79698807Y-103199960D01* X79592115Y-103057436D01* X78982560Y-103666991D01* X78933652Y-103588001D01* X78790069Y-103430499D01* X78631610Y-103310835D01* X79238562Y-102703883D01* X79238561Y-102703882D01* X79096046Y-102597196D01* X79096038Y-102597191D01* X78844957Y-102460091D01* X78844958Y-102460091D01* X78610530Y-102372654D01* X79773500Y-102372654D01* X79780011Y-102433202D01* X79780011Y-102433204D01* X79831111Y-102570203D01* X79831111Y-102570204D01* X79918739Y-102687261D01* X80035796Y-102774889D01* X80172799Y-102825989D01* X80200050Y-102828918D01* X80233345Y-102832499D01* X80233362Y-102832500D01* X81930638Y-102832500D01* X81930654Y-102832499D01* X81957692Y-102829591D01* X81991201Y-102825989D01* X82128204Y-102774889D01* X82245261Y-102687261D01* X82332889Y-102570204D01* X82346586Y-102533480D01* X82372717Y-102463424D01* X82414588Y-102407490D01* X82480053Y-102383074D01* X82548326Y-102397926D01* X82576579Y-102419077D01* X82737700Y-102580198D01* X82925251Y-102711523D01* X83050091Y-102769736D01* X83132750Y-102808281D01* X83132752Y-102808281D01* X83132757Y-102808284D01* X83353913Y-102867543D01* X83516832Y-102881796D01* X83581998Y-102887498D01* X83582000Y-102887498D01* X83582002Y-102887498D01* X83639021Y-102882509D01* X83810087Y-102867543D01* X84031243Y-102808284D01* X84238749Y-102711523D01* X84426300Y-102580198D01* X84494319Y-102512179D01* X84555642Y-102478694D01* X84625334Y-102483678D01* X84669681Y-102512179D01* X84737700Y-102580198D01* X84925251Y-102711523D01* X85050091Y-102769736D01* X85132750Y-102808281D01* X85132752Y-102808281D01* X85132757Y-102808284D01* X85353913Y-102867543D01* X85516832Y-102881796D01* X85581998Y-102887498D01* X85582000Y-102887498D01* X85582002Y-102887498D01* X85639021Y-102882509D01* X85810087Y-102867543D01* X86031243Y-102808284D01* X86238749Y-102711523D01* X86426300Y-102580198D01* X86588198Y-102418300D01* X86719523Y-102230749D01* X86724307Y-102220487D01* X86770476Y-102168051D01* X86837669Y-102148897D01* X86904551Y-102169111D01* X86949072Y-102220490D01* X86951866Y-102226483D01* X87002973Y-102299471D01* X87002974Y-102299472D01* X87619064Y-101683381D01* X87645481Y-101773351D01* X87719327Y-101888258D01* X87822555Y-101977705D01* X87946801Y-102034446D01* X87971548Y-102038004D01* X87356526Y-102653025D01* X87356526Y-102653026D01* X87429512Y-102704131D01* X87429516Y-102704133D01* X87635673Y-102800265D01* X87635682Y-102800269D01* X87855389Y-102859139D01* X87855400Y-102859141D01* X88081998Y-102878966D01* X88082002Y-102878966D01* X88308599Y-102859141D01* X88308610Y-102859139D01* X88528317Y-102800269D01* X88528331Y-102800264D01* X88734478Y-102704136D01* X88807472Y-102653025D01* X88192451Y-102038004D01* X88217199Y-102034446D01* X88341445Y-101977705D01* X88444673Y-101888258D01* X88518519Y-101773351D01* X88544935Y-101683382D01* X89161025Y-102299472D01* X89212136Y-102226478D01* X89308264Y-102020331D01* X89308269Y-102020317D01* X89367139Y-101800610D01* X89367141Y-101800599D01* X89386966Y-101574002D01* X89386966Y-101573997D01* X89367141Y-101347400D01* X89367139Y-101347389D01* X89308269Y-101127682D01* X89308265Y-101127673D01* X89212133Y-100921516D01* X89212131Y-100921512D01* X89161026Y-100848526D01* X89161025Y-100848526D01* X88544935Y-101464616D01* X88518519Y-101374649D01* X88444673Y-101259742D01* X88341445Y-101170295D01* X88217199Y-101113554D01* X88192451Y-101109995D01* X88608035Y-100694411D01* X94309037Y-100694411D01* X94315548Y-100754959D01* X94315548Y-100754961D01* X94366648Y-100891961D01* X94454276Y-101009018D01* X94571333Y-101096646D01* X94708336Y-101147746D01* X94735587Y-101150675D01* X94768882Y-101154256D01* X94768899Y-101154257D01* X96566175Y-101154257D01* X96566191Y-101154256D01* X96593229Y-101151348D01* X96626738Y-101147746D01* X96763741Y-101096646D01* X96880798Y-101009018D01* X96968426Y-100891961D01* X97019526Y-100754958D01* X97023763Y-100715551D01* X97026036Y-100694411D01* X97026037Y-100694394D01* X97026037Y-98897119D01* X97026036Y-98897102D01* X97022694Y-98866027D01* X97019526Y-98836556D01* X96968426Y-98699553D01* X96880798Y-98582496D01* X96763741Y-98494868D01* X96626740Y-98443768D01* X96566191Y-98437257D01* X96566175Y-98437257D01* X94768899Y-98437257D01* X94768882Y-98437257D01* X94708334Y-98443768D01* X94708332Y-98443768D01* X94571332Y-98494868D01* X94454276Y-98582496D01* X94366648Y-98699552D01* X94315548Y-98836552D01* X94315548Y-98836554D01* X94309037Y-98897102D01* X94309037Y-100694411D01* X88608035Y-100694411D01* X88807472Y-100494974D01* X88807471Y-100494973D01* X88734483Y-100443866D01* X88734481Y-100443865D01* X88528326Y-100347734D01* X88528317Y-100347730D01* X88308610Y-100288860D01* X88308599Y-100288858D01* X88082002Y-100269034D01* X88081998Y-100269034D01* X87855400Y-100288858D01* X87855389Y-100288860D01* X87635682Y-100347730D01* X87635673Y-100347734D01* X87429513Y-100443868D01* X87356527Y-100494972D01* X87356526Y-100494973D01* X87971549Y-101109995D01* X87946801Y-101113554D01* X87822555Y-101170295D01* X87719327Y-101259742D01* X87645481Y-101374649D01* X87619064Y-101464617D01* X87002973Y-100848526D01* X87002972Y-100848527D01* X86951867Y-100921513D01* X86949070Y-100927513D01* X86902897Y-100979951D01* X86835703Y-100999102D01* X86768822Y-100978885D01* X86724307Y-100927511D01* X86719523Y-100917251D01* X86588198Y-100729700D01* X86426300Y-100567802D01* X86238749Y-100436477D01* X86238745Y-100436475D01* X86031249Y-100339718D01* X86031238Y-100339714D01* X85810089Y-100280457D01* X85810081Y-100280456D01* X85582002Y-100260502D01* X85581998Y-100260502D01* X85353918Y-100280456D01* X85353910Y-100280457D01* X85132761Y-100339714D01* X85132750Y-100339718D01* X84925254Y-100436475D01* X84925252Y-100436476D01* X84890601Y-100460739D01* X84737700Y-100567802D01* X84737698Y-100567803D01* X84737695Y-100567806D01* X84669681Y-100635821D01* X84608358Y-100669306D01* X84538666Y-100664322D01* X84494319Y-100635821D01* X84426304Y-100567806D01* X84426300Y-100567802D01* X84238749Y-100436477D01* X84238745Y-100436475D01* X84031249Y-100339718D01* X84031238Y-100339714D01* X83810089Y-100280457D01* X83810081Y-100280456D01* X83582002Y-100260502D01* X83581998Y-100260502D01* X83353918Y-100280456D01* X83353910Y-100280457D01* X83132761Y-100339714D01* X83132750Y-100339718D01* X82925254Y-100436475D01* X82925252Y-100436476D01* X82737699Y-100567803D01* X82576579Y-100728923D01* X82515256Y-100762407D01* X82445564Y-100757423D01* X82389631Y-100715551D01* X82372717Y-100684576D01* X82351544Y-100627813D01* X82332889Y-100577796D01* X82245261Y-100460739D01* X82128204Y-100373111D01* X81991203Y-100322011D01* X81930654Y-100315500D01* X81930638Y-100315500D01* X80233362Y-100315500D01* X80233345Y-100315500D01* X80172797Y-100322011D01* X80172795Y-100322011D01* X80035795Y-100373111D01* X79918739Y-100460739D01* X79831111Y-100577795D01* X79780011Y-100714795D01* X79780011Y-100714797D01* X79773500Y-100775345D01* X79773500Y-102372654D01* X78610530Y-102372654D01* X78576895Y-102360109D01* X78297362Y-102299300D01* X78012001Y-102278891D01* X78011999Y-102278891D01* X77726637Y-102299300D01* X77447104Y-102360109D01* X77179041Y-102460091D01* X76927961Y-102597191D01* X76927953Y-102597196D01* X76785437Y-102703882D01* X76785436Y-102703883D01* X77392389Y-103310835D01* X77233931Y-103430499D01* X77090348Y-103588001D01* X77041439Y-103666992D01* X76431883Y-103057436D01* X76431882Y-103057437D01* X76325196Y-103199953D01* X76325191Y-103199961D01* X76188091Y-103451041D01* X76088109Y-103719104D01* X76027300Y-103998637D01* X76006891Y-104283998D01* X76006891Y-104284001D01* X68072000Y-104284001D01* X68072000Y-92964005D01* X75090844Y-92964005D01* X75109434Y-93188359D01* X75109436Y-93188371D01* X75164703Y-93406614D01* X75255140Y-93612792D01* X75378276Y-93801265D01* X75378284Y-93801276D01* X75530756Y-93966902D01* X75530760Y-93966906D01* X75708424Y-94105189D01* X75708425Y-94105189D01* X75708427Y-94105191D01* X75835135Y-94173761D01* X75906426Y-94212342D01* X76119365Y-94285444D01* X76341431Y-94322500D01* X76566569Y-94322500D01* X76788635Y-94285444D01* X77001574Y-94212342D01* X77199576Y-94105189D01* X77377240Y-93966906D01* X77529722Y-93801268D01* X77652860Y-93612791D01* X77743296Y-93406616D01* X77798564Y-93188368D01* X77817156Y-92964000D01* X77816689Y-92958368D01* X77798565Y-92739640D01* X77798563Y-92739628D01* X77797139Y-92734005D01* X81440844Y-92734005D01* X81459434Y-92958359D01* X81459436Y-92958371D01* X81514703Y-93176614D01* X81605140Y-93382792D01* X81728276Y-93571265D01* X81728284Y-93571276D01* X81880756Y-93736902D01* X81880760Y-93736906D01* X82058424Y-93875189D01* X82058425Y-93875189D01* X82058427Y-93875191D01* X82185135Y-93943761D01* X82256426Y-93982342D01* X82469365Y-94055444D01* X82691431Y-94092500D01* X82916569Y-94092500D01* X83138635Y-94055444D01* X83351574Y-93982342D01* X83549576Y-93875189D01* X83727240Y-93736906D01* X83879722Y-93571268D01* X84002860Y-93382791D01* X84093296Y-93176616D01* X84148564Y-92958368D01* X84166689Y-92739640D01* X84167156Y-92734005D01* X86520844Y-92734005D01* X86539434Y-92958359D01* X86539436Y-92958371D01* X86594703Y-93176614D01* X86685140Y-93382792D01* X86808276Y-93571265D01* X86808284Y-93571276D01* X86960756Y-93736902D01* X86960760Y-93736906D01* X87138424Y-93875189D01* X87138425Y-93875189D01* X87138427Y-93875191D01* X87265135Y-93943761D01* X87336426Y-93982342D01* X87549365Y-94055444D01* X87771431Y-94092500D01* X87996569Y-94092500D01* X88218635Y-94055444D01* X88431574Y-93982342D01* X88629576Y-93875189D01* X88807240Y-93736906D01* X88959722Y-93571268D01* X89082860Y-93382791D01* X89173296Y-93176616D01* X89227137Y-92964005D01* X92870844Y-92964005D01* X92889434Y-93188359D01* X92889436Y-93188371D01* X92944703Y-93406614D01* X93035140Y-93612792D01* X93158276Y-93801265D01* X93158284Y-93801276D01* X93310756Y-93966902D01* X93310760Y-93966906D01* X93488424Y-94105189D01* X93488425Y-94105189D01* X93488427Y-94105191D01* X93615135Y-94173761D01* X93686426Y-94212342D01* X93899365Y-94285444D01* X94121431Y-94322500D01* X94346569Y-94322500D01* X94568635Y-94285444D01* X94781574Y-94212342D01* X94979576Y-94105189D01* X95157240Y-93966906D01* X95309722Y-93801268D01* X95432860Y-93612791D01* X95523296Y-93406616D01* X95578564Y-93188368D01* X95597156Y-92964000D01* X95596689Y-92958368D01* X95578565Y-92739640D01* X95578563Y-92739628D01* X95523296Y-92521385D01* X95518144Y-92509640D01* X95432860Y-92315209D01* X95417294Y-92291384D01* X95309723Y-92126734D01* X95309715Y-92126723D01* X95157243Y-91961097D01* X95157238Y-91961092D01* X94979577Y-91822812D01* X94979578Y-91822812D01* X94979576Y-91822811D01* X94943070Y-91803055D01* X94893479Y-91753836D01* X94878371Y-91685619D01* X94902541Y-91620064D01* X94943070Y-91584945D01* X94943084Y-91584936D01* X94979576Y-91565189D01* X95157240Y-91426906D01* X95309722Y-91261268D01* X95432860Y-91072791D01* X95523296Y-90866616D01* X95578564Y-90648368D01* X95597156Y-90424000D01* X95578564Y-90199632D01* X95523296Y-89981384D01* X95432860Y-89775209D01* X95309722Y-89586732D01* X95309719Y-89586729D01* X95309715Y-89586723D01* X95157243Y-89421097D01* X95157238Y-89421092D01* X94979577Y-89282812D01* X94979572Y-89282808D01* X94781580Y-89175661D01* X94781577Y-89175659D01* X94781574Y-89175658D01* X94781571Y-89175657D01* X94781569Y-89175656D01* X94568637Y-89102556D01* X94346569Y-89065500D01* X94121431Y-89065500D01* X93899362Y-89102556D01* X93686430Y-89175656D01* X93686419Y-89175661D01* X93488427Y-89282808D01* X93488422Y-89282812D01* X93310761Y-89421092D01* X93310756Y-89421097D01* X93158284Y-89586723D01* X93158276Y-89586734D01* X93035140Y-89775207D01* X92944703Y-89981385D01* X92889436Y-90199628D01* X92889434Y-90199640D01* X92870844Y-90423994D01* X92870844Y-90424005D01* X92889434Y-90648359D01* X92889436Y-90648371D01* X92944703Y-90866614D01* X93035140Y-91072792D01* X93158276Y-91261265D01* X93158284Y-91261276D01* X93310756Y-91426902D01* X93310760Y-91426906D01* X93488424Y-91565189D01* X93488429Y-91565191D01* X93488431Y-91565193D01* X93524930Y-91584946D01* X93574520Y-91634165D01* X93589628Y-91702382D01* X93565457Y-91767937D01* X93524930Y-91803054D01* X93488431Y-91822806D01* X93488422Y-91822812D01* X93310761Y-91961092D01* X93310756Y-91961097D01* X93158284Y-92126723D01* X93158276Y-92126734D01* X93035140Y-92315207D01* X92944703Y-92521385D01* X92889436Y-92739628D01* X92889434Y-92739640D01* X92870844Y-92963994D01* X92870844Y-92964005D01* X89227137Y-92964005D01* X89228564Y-92958368D01* X89246689Y-92739640D01* X89247156Y-92734005D01* X89247156Y-92733994D01* X89228565Y-92509640D01* X89228563Y-92509628D01* X89173296Y-92291385D01* X89101073Y-92126732D01* X89082860Y-92085209D01* X88959722Y-91896732D01* X88959719Y-91896729D01* X88959715Y-91896723D01* X88807243Y-91731097D01* X88807238Y-91731092D01* X88629577Y-91592812D01* X88629572Y-91592808D01* X88431580Y-91485661D01* X88431577Y-91485659D01* X88431574Y-91485658D01* X88431571Y-91485657D01* X88431569Y-91485656D01* X88218637Y-91412556D01* X87996569Y-91375500D01* X87771431Y-91375500D01* X87549362Y-91412556D01* X87336430Y-91485656D01* X87336419Y-91485661D01* X87138427Y-91592808D01* X87138422Y-91592812D01* X86960761Y-91731092D01* X86960756Y-91731097D01* X86808284Y-91896723D01* X86808276Y-91896734D01* X86685140Y-92085207D01* X86594703Y-92291385D01* X86539436Y-92509628D01* X86539434Y-92509640D01* X86520844Y-92733994D01* X86520844Y-92734005D01* X84167156Y-92734005D01* X84167156Y-92733994D01* X84148565Y-92509640D01* X84148563Y-92509628D01* X84093296Y-92291385D01* X84021073Y-92126732D01* X84002860Y-92085209D01* X83879722Y-91896732D01* X83879719Y-91896729D01* X83879715Y-91896723D01* X83727243Y-91731097D01* X83727238Y-91731092D01* X83549577Y-91592812D01* X83549572Y-91592808D01* X83351580Y-91485661D01* X83351577Y-91485659D01* X83351574Y-91485658D01* X83351571Y-91485657D01* X83351569Y-91485656D01* X83138637Y-91412556D01* X82916569Y-91375500D01* X82691431Y-91375500D01* X82469362Y-91412556D01* X82256430Y-91485656D01* X82256419Y-91485661D01* X82058427Y-91592808D01* X82058422Y-91592812D01* X81880761Y-91731092D01* X81880756Y-91731097D01* X81728284Y-91896723D01* X81728276Y-91896734D01* X81605140Y-92085207D01* X81514703Y-92291385D01* X81459436Y-92509628D01* X81459434Y-92509640D01* X81440844Y-92733994D01* X81440844Y-92734005D01* X77797139Y-92734005D01* X77743296Y-92521385D01* X77738144Y-92509640D01* X77652860Y-92315209D01* X77637294Y-92291384D01* X77529723Y-92126734D01* X77529715Y-92126723D01* X77377243Y-91961097D01* X77377238Y-91961092D01* X77199577Y-91822812D01* X77199578Y-91822812D01* X77199576Y-91822811D01* X77163070Y-91803055D01* X77113479Y-91753836D01* X77098371Y-91685619D01* X77122541Y-91620064D01* X77163070Y-91584945D01* X77163084Y-91584936D01* X77199576Y-91565189D01* X77377240Y-91426906D01* X77529722Y-91261268D01* X77652860Y-91072791D01* X77743296Y-90866616D01* X77798564Y-90648368D01* X77817156Y-90424000D01* X77798564Y-90199632D01* X77743296Y-89981384D01* X77652860Y-89775209D01* X77529722Y-89586732D01* X77529719Y-89586729D01* X77529715Y-89586723D01* X77377243Y-89421097D01* X77377238Y-89421092D01* X77199577Y-89282812D01* X77199572Y-89282808D01* X77001580Y-89175661D01* X77001577Y-89175659D01* X77001574Y-89175658D01* X77001571Y-89175657D01* X77001569Y-89175656D01* X76788637Y-89102556D01* X76566569Y-89065500D01* X76341431Y-89065500D01* X76119362Y-89102556D01* X75906430Y-89175656D01* X75906419Y-89175661D01* X75708427Y-89282808D01* X75708422Y-89282812D01* X75530761Y-89421092D01* X75530756Y-89421097D01* X75378284Y-89586723D01* X75378276Y-89586734D01* X75255140Y-89775207D01* X75164703Y-89981385D01* X75109436Y-90199628D01* X75109434Y-90199640D01* X75090844Y-90423994D01* X75090844Y-90424005D01* X75109434Y-90648359D01* X75109436Y-90648371D01* X75164703Y-90866614D01* X75255140Y-91072792D01* X75378276Y-91261265D01* X75378284Y-91261276D01* X75530756Y-91426902D01* X75530760Y-91426906D01* X75708424Y-91565189D01* X75708429Y-91565191D01* X75708431Y-91565193D01* X75744930Y-91584946D01* X75794520Y-91634165D01* X75809628Y-91702382D01* X75785457Y-91767937D01* X75744930Y-91803054D01* X75708431Y-91822806D01* X75708422Y-91822812D01* X75530761Y-91961092D01* X75530756Y-91961097D01* X75378284Y-92126723D01* X75378276Y-92126734D01* X75255140Y-92315207D01* X75164703Y-92521385D01* X75109436Y-92739628D01* X75109434Y-92739640D01* X75090844Y-92963994D01* X75090844Y-92964005D01* X68072000Y-92964005D01* X68072000Y-85344005D01* X75090844Y-85344005D01* X75109434Y-85568359D01* X75109436Y-85568371D01* X75164703Y-85786614D01* X75255140Y-85992792D01* X75378276Y-86181265D01* X75378284Y-86181276D01* X75530756Y-86346902D01* X75530760Y-86346906D01* X75708424Y-86485189D01* X75708425Y-86485189D01* X75708427Y-86485191D01* X75835135Y-86553761D01* X75906426Y-86592342D01* X76119365Y-86665444D01* X76341431Y-86702500D01* X76566569Y-86702500D01* X76788635Y-86665444D01* X77001574Y-86592342D01* X77199576Y-86485189D01* X77377240Y-86346906D01* X77529722Y-86181268D01* X77652860Y-85992791D01* X77743296Y-85786616D01* X77798564Y-85568368D01* X77817156Y-85344005D01* X92870844Y-85344005D01* X92889434Y-85568359D01* X92889436Y-85568371D01* X92944703Y-85786614D01* X93035140Y-85992792D01* X93158276Y-86181265D01* X93158284Y-86181276D01* X93310756Y-86346902D01* X93310760Y-86346906D01* X93488424Y-86485189D01* X93488425Y-86485189D01* X93488427Y-86485191D01* X93615135Y-86553761D01* X93686426Y-86592342D01* X93899365Y-86665444D01* X94121431Y-86702500D01* X94346569Y-86702500D01* X94568635Y-86665444D01* X94781574Y-86592342D01* X94979576Y-86485189D01* X95157240Y-86346906D01* X95309722Y-86181268D01* X95432860Y-85992791D01* X95523296Y-85786616D01* X95578564Y-85568368D01* X95597156Y-85344000D01* X95578564Y-85119632D01* X95523296Y-84901384D01* X95432860Y-84695209D01* X95309722Y-84506732D01* X95309719Y-84506729D01* X95309715Y-84506723D01* X95157243Y-84341097D01* X95157238Y-84341092D01* X94979577Y-84202812D01* X94979578Y-84202812D01* X94979576Y-84202811D01* X94943070Y-84183055D01* X94893479Y-84133836D01* X94878371Y-84065619D01* X94902541Y-84000064D01* X94943070Y-83964945D01* X94943084Y-83964936D01* X94979576Y-83945189D01* X95157240Y-83806906D01* X95309722Y-83641268D01* X95432860Y-83452791D01* X95523296Y-83246616D01* X95578564Y-83028368D01* X95597156Y-82804000D01* X95578564Y-82579632D01* X95523296Y-82361384D01* X95432860Y-82155209D01* X95309722Y-81966732D01* X95309719Y-81966729D01* X95309715Y-81966723D01* X95157243Y-81801097D01* X95157238Y-81801092D01* X94979577Y-81662812D01* X94979578Y-81662812D01* X94979576Y-81662811D01* X94943070Y-81643055D01* X94893479Y-81593836D01* X94878371Y-81525619D01* X94902541Y-81460064D01* X94943070Y-81424945D01* X94943084Y-81424936D01* X94979576Y-81405189D01* X95157240Y-81266906D01* X95309722Y-81101268D01* X95432860Y-80912791D01* X95523296Y-80706616D01* X95578564Y-80488368D01* X95597156Y-80264000D01* X95578564Y-80039632D01* X95523296Y-79821384D01* X95432860Y-79615209D01* X95309722Y-79426732D01* X95309719Y-79426729D01* X95309715Y-79426723D01* X95157243Y-79261097D01* X95157238Y-79261092D01* X94979577Y-79122812D01* X94979578Y-79122812D01* X94979576Y-79122811D01* X94943070Y-79103055D01* X94893479Y-79053836D01* X94878371Y-78985619D01* X94902541Y-78920064D01* X94943070Y-78884945D01* X94943084Y-78884936D01* X94979576Y-78865189D01* X95157240Y-78726906D01* X95309722Y-78561268D01* X95432860Y-78372791D01* X95523296Y-78166616D01* X95578564Y-77948368D01* X95597156Y-77724000D01* X95578564Y-77499632D01* X95523296Y-77281384D01* X95432860Y-77075209D01* X95309722Y-76886732D01* X95309719Y-76886729D01* X95309715Y-76886723D01* X95157243Y-76721097D01* X95157238Y-76721092D01* X94979577Y-76582812D01* X94979572Y-76582808D01* X94781580Y-76475661D01* X94781577Y-76475659D01* X94781574Y-76475658D01* X94781571Y-76475657D01* X94781569Y-76475656D01* X94568637Y-76402556D01* X94346569Y-76365500D01* X94121431Y-76365500D01* X93899362Y-76402556D01* X93686430Y-76475656D01* X93686419Y-76475661D01* X93488427Y-76582808D01* X93488422Y-76582812D01* X93310761Y-76721092D01* X93310756Y-76721097D01* X93158284Y-76886723D01* X93158276Y-76886734D01* X93035140Y-77075207D01* X92944703Y-77281385D01* X92889436Y-77499628D01* X92889434Y-77499640D01* X92870844Y-77723994D01* X92870844Y-77724005D01* X92889434Y-77948359D01* X92889436Y-77948371D01* X92944703Y-78166614D01* X93035140Y-78372792D01* X93158276Y-78561265D01* X93158284Y-78561276D01* X93310756Y-78726902D01* X93310760Y-78726906D01* X93488424Y-78865189D01* X93488429Y-78865191D01* X93488431Y-78865193D01* X93524930Y-78884946D01* X93574520Y-78934165D01* X93589628Y-79002382D01* X93565457Y-79067937D01* X93524930Y-79103054D01* X93488431Y-79122806D01* X93488422Y-79122812D01* X93310761Y-79261092D01* X93310756Y-79261097D01* X93158284Y-79426723D01* X93158276Y-79426734D01* X93035140Y-79615207D01* X92944703Y-79821385D01* X92889436Y-80039628D01* X92889434Y-80039640D01* X92870844Y-80263994D01* X92870844Y-80264005D01* X92889434Y-80488359D01* X92889436Y-80488371D01* X92944703Y-80706614D01* X93035140Y-80912792D01* X93158276Y-81101265D01* X93158284Y-81101276D01* X93310756Y-81266902D01* X93310760Y-81266906D01* X93488424Y-81405189D01* X93488429Y-81405191D01* X93488431Y-81405193D01* X93524930Y-81424946D01* X93574520Y-81474165D01* X93589628Y-81542382D01* X93565457Y-81607937D01* X93524930Y-81643054D01* X93488431Y-81662806D01* X93488422Y-81662812D01* X93310761Y-81801092D01* X93310756Y-81801097D01* X93158284Y-81966723D01* X93158276Y-81966734D01* X93035140Y-82155207D01* X92944703Y-82361385D01* X92889436Y-82579628D01* X92889434Y-82579640D01* X92870844Y-82803994D01* X92870844Y-82804005D01* X92889434Y-83028359D01* X92889436Y-83028371D01* X92944703Y-83246614D01* X93035140Y-83452792D01* X93158276Y-83641265D01* X93158284Y-83641276D01* X93310756Y-83806902D01* X93310760Y-83806906D01* X93488424Y-83945189D01* X93488429Y-83945191D01* X93488431Y-83945193D01* X93524930Y-83964946D01* X93574520Y-84014165D01* X93589628Y-84082382D01* X93565457Y-84147937D01* X93524930Y-84183054D01* X93488431Y-84202806D01* X93488422Y-84202812D01* X93310761Y-84341092D01* X93310756Y-84341097D01* X93158284Y-84506723D01* X93158276Y-84506734D01* X93035140Y-84695207D01* X92944703Y-84901385D01* X92889436Y-85119628D01* X92889434Y-85119640D01* X92870844Y-85343994D01* X92870844Y-85344005D01* X77817156Y-85344005D01* X77817156Y-85344000D01* X77798564Y-85119632D01* X77743296Y-84901384D01* X77652860Y-84695209D01* X77529722Y-84506732D01* X77529719Y-84506729D01* X77529715Y-84506723D01* X77377243Y-84341097D01* X77377238Y-84341092D01* X77199577Y-84202812D01* X77199578Y-84202812D01* X77199576Y-84202811D01* X77163070Y-84183055D01* X77113479Y-84133836D01* X77098371Y-84065619D01* X77122541Y-84000064D01* X77163070Y-83964945D01* X77163084Y-83964936D01* X77199576Y-83945189D01* X77377240Y-83806906D01* X77529722Y-83641268D01* X77652860Y-83452791D01* X77743296Y-83246616D01* X77798564Y-83028368D01* X77817156Y-82804000D01* X77798564Y-82579632D01* X77743296Y-82361384D01* X77652860Y-82155209D01* X77529722Y-81966732D01* X77529719Y-81966729D01* X77529715Y-81966723D01* X77377243Y-81801097D01* X77377238Y-81801092D01* X77199577Y-81662812D01* X77199578Y-81662812D01* X77199576Y-81662811D01* X77163070Y-81643055D01* X77113479Y-81593836D01* X77098371Y-81525619D01* X77122541Y-81460064D01* X77163070Y-81424945D01* X77163084Y-81424936D01* X77199576Y-81405189D01* X77377240Y-81266906D01* X77529722Y-81101268D01* X77652860Y-80912791D01* X77743296Y-80706616D01* X77798564Y-80488368D01* X77817156Y-80264000D01* X77798564Y-80039632D01* X77743296Y-79821384D01* X77652860Y-79615209D01* X77529722Y-79426732D01* X77529719Y-79426729D01* X77529715Y-79426723D01* X77377243Y-79261097D01* X77377238Y-79261092D01* X77199577Y-79122812D01* X77199578Y-79122812D01* X77199576Y-79122811D01* X77163070Y-79103055D01* X77113479Y-79053836D01* X77098371Y-78985619D01* X77122541Y-78920064D01* X77163070Y-78884945D01* X77163084Y-78884936D01* X77199576Y-78865189D01* X77377240Y-78726906D01* X77529722Y-78561268D01* X77652860Y-78372791D01* X77743296Y-78166616D01* X77798564Y-77948368D01* X77817156Y-77724000D01* X77798564Y-77499632D01* X77743296Y-77281384D01* X77652860Y-77075209D01* X77529722Y-76886732D01* X77529719Y-76886729D01* X77529715Y-76886723D01* X77377243Y-76721097D01* X77377238Y-76721092D01* X77199577Y-76582812D01* X77199572Y-76582808D01* X77001580Y-76475661D01* X77001577Y-76475659D01* X77001574Y-76475658D01* X77001571Y-76475657D01* X77001569Y-76475656D01* X76788637Y-76402556D01* X76566569Y-76365500D01* X76341431Y-76365500D01* X76119362Y-76402556D01* X75906430Y-76475656D01* X75906419Y-76475661D01* X75708427Y-76582808D01* X75708422Y-76582812D01* X75530761Y-76721092D01* X75530756Y-76721097D01* X75378284Y-76886723D01* X75378276Y-76886734D01* X75255140Y-77075207D01* X75164703Y-77281385D01* X75109436Y-77499628D01* X75109434Y-77499640D01* X75090844Y-77723994D01* X75090844Y-77724005D01* X75109434Y-77948359D01* X75109436Y-77948371D01* X75164703Y-78166614D01* X75255140Y-78372792D01* X75378276Y-78561265D01* X75378284Y-78561276D01* X75530756Y-78726902D01* X75530760Y-78726906D01* X75708424Y-78865189D01* X75708429Y-78865191D01* X75708431Y-78865193D01* X75744930Y-78884946D01* X75794520Y-78934165D01* X75809628Y-79002382D01* X75785457Y-79067937D01* X75744930Y-79103054D01* X75708431Y-79122806D01* X75708422Y-79122812D01* X75530761Y-79261092D01* X75530756Y-79261097D01* X75378284Y-79426723D01* X75378276Y-79426734D01* X75255140Y-79615207D01* X75164703Y-79821385D01* X75109436Y-80039628D01* X75109434Y-80039640D01* X75090844Y-80263994D01* X75090844Y-80264005D01* X75109434Y-80488359D01* X75109436Y-80488371D01* X75164703Y-80706614D01* X75255140Y-80912792D01* X75378276Y-81101265D01* X75378284Y-81101276D01* X75530756Y-81266902D01* X75530760Y-81266906D01* X75708424Y-81405189D01* X75708429Y-81405191D01* X75708431Y-81405193D01* X75744930Y-81424946D01* X75794520Y-81474165D01* X75809628Y-81542382D01* X75785457Y-81607937D01* X75744930Y-81643054D01* X75708431Y-81662806D01* X75708422Y-81662812D01* X75530761Y-81801092D01* X75530756Y-81801097D01* X75378284Y-81966723D01* X75378276Y-81966734D01* X75255140Y-82155207D01* X75164703Y-82361385D01* X75109436Y-82579628D01* X75109434Y-82579640D01* X75090844Y-82803994D01* X75090844Y-82804005D01* X75109434Y-83028359D01* X75109436Y-83028371D01* X75164703Y-83246614D01* X75255140Y-83452792D01* X75378276Y-83641265D01* X75378284Y-83641276D01* X75530756Y-83806902D01* X75530760Y-83806906D01* X75708424Y-83945189D01* X75708429Y-83945191D01* X75708431Y-83945193D01* X75744930Y-83964946D01* X75794520Y-84014165D01* X75809628Y-84082382D01* X75785457Y-84147937D01* X75744930Y-84183054D01* X75708431Y-84202806D01* X75708422Y-84202812D01* X75530761Y-84341092D01* X75530756Y-84341097D01* X75378284Y-84506723D01* X75378276Y-84506734D01* X75255140Y-84695207D01* X75164703Y-84901385D01* X75109436Y-85119628D01* X75109434Y-85119640D01* X75090844Y-85343994D01* X75090844Y-85344005D01* X68072000Y-85344005D01* X68072000Y-72644005D01* X75090844Y-72644005D01* X75109434Y-72868359D01* X75109436Y-72868371D01* X75164703Y-73086614D01* X75255140Y-73292792D01* X75378276Y-73481265D01* X75378284Y-73481276D01* X75530756Y-73646902D01* X75530760Y-73646906D01* X75708424Y-73785189D01* X75708425Y-73785189D01* X75708427Y-73785191D01* X75835135Y-73853761D01* X75906426Y-73892342D01* X76119365Y-73965444D01* X76341431Y-74002500D01* X76566569Y-74002500D01* X76788635Y-73965444D01* X77001574Y-73892342D01* X77199576Y-73785189D01* X77377240Y-73646906D01* X77529722Y-73481268D01* X77652860Y-73292791D01* X77743296Y-73086616D01* X77798564Y-72868368D01* X77817156Y-72644005D01* X92870844Y-72644005D01* X92889434Y-72868359D01* X92889436Y-72868371D01* X92944703Y-73086614D01* X93035140Y-73292792D01* X93158276Y-73481265D01* X93158284Y-73481276D01* X93310756Y-73646902D01* X93310760Y-73646906D01* X93488424Y-73785189D01* X93488425Y-73785189D01* X93488427Y-73785191D01* X93615135Y-73853761D01* X93686426Y-73892342D01* X93899365Y-73965444D01* X94121431Y-74002500D01* X94346569Y-74002500D01* X94568635Y-73965444D01* X94781574Y-73892342D01* X94979576Y-73785189D01* X95157240Y-73646906D01* X95309722Y-73481268D01* X95432860Y-73292791D01* X95523296Y-73086616D01* X95578564Y-72868368D01* X95597156Y-72644000D01* X95578564Y-72419632D01* X95523296Y-72201384D01* X95432860Y-71995209D01* X95309722Y-71806732D01* X95309719Y-71806729D01* X95309715Y-71806723D01* X95157243Y-71641097D01* X95157238Y-71641092D01* X94979577Y-71502812D01* X94979578Y-71502812D01* X94979576Y-71502811D01* X94943070Y-71483055D01* X94893479Y-71433836D01* X94878371Y-71365619D01* X94902541Y-71300064D01* X94943070Y-71264945D01* X94943084Y-71264936D01* X94979576Y-71245189D01* X95157240Y-71106906D01* X95309722Y-70941268D01* X95432860Y-70752791D01* X95523296Y-70546616D01* X95578564Y-70328368D01* X95597156Y-70104000D01* X95578564Y-69879632D01* X95523296Y-69661384D01* X95432860Y-69455209D01* X95309722Y-69266732D01* X95309719Y-69266729D01* X95309715Y-69266723D01* X95157243Y-69101097D01* X95157238Y-69101092D01* X94979577Y-68962812D01* X94979578Y-68962812D01* X94979576Y-68962811D01* X94943070Y-68943055D01* X94893479Y-68893836D01* X94878371Y-68825619D01* X94902541Y-68760064D01* X94943070Y-68724945D01* X94943084Y-68724936D01* X94979576Y-68705189D01* X95157240Y-68566906D01* X95309722Y-68401268D01* X95432860Y-68212791D01* X95523296Y-68006616D01* X95578564Y-67788368D01* X95597156Y-67564000D01* X95578564Y-67339632D01* X95523296Y-67121384D01* X95432860Y-66915209D01* X95309722Y-66726732D01* X95309719Y-66726729D01* X95309715Y-66726723D01* X95157243Y-66561097D01* X95157238Y-66561092D01* X94979577Y-66422812D01* X94979578Y-66422812D01* X94979576Y-66422811D01* X94943070Y-66403055D01* X94893479Y-66353836D01* X94878371Y-66285619D01* X94902541Y-66220064D01* X94943070Y-66184945D01* X94943084Y-66184936D01* X94979576Y-66165189D01* X95157240Y-66026906D01* X95309722Y-65861268D01* X95432860Y-65672791D01* X95523296Y-65466616D01* X95578564Y-65248368D01* X95597156Y-65024000D01* X95578564Y-64799632D01* X95523296Y-64581384D01* X95432860Y-64375209D01* X95309722Y-64186732D01* X95309719Y-64186729D01* X95309715Y-64186723D01* X95164510Y-64028991D01* X95133587Y-63966337D01* X95141447Y-63896911D01* X95185594Y-63842755D01* X95212405Y-63828827D01* X95292584Y-63798920D01* X95330204Y-63784889D01* X95447261Y-63697261D01* X95534889Y-63580204D01* X95585989Y-63443201D01* X95589591Y-63409692D01* X95592499Y-63382654D01* X95592500Y-63382637D01* X95592500Y-61585362D01* X95592499Y-61585345D01* X95589157Y-61554270D01* X95585989Y-61524799D01* X95534889Y-61387796D01* X95447261Y-61270739D01* X95330204Y-61183111D01* X95212404Y-61139172D01* X95156471Y-61097300D01* X95132055Y-61031835D01* X95146908Y-60963562D01* X95164504Y-60939014D01* X95309722Y-60781268D01* X95432860Y-60592791D01* X95523296Y-60386616D01* X95578564Y-60168368D01* X95597156Y-59944000D01* X95578564Y-59719632D01* X95523296Y-59501384D01* X95432860Y-59295209D01* X95309722Y-59106732D01* X95309719Y-59106729D01* X95309715Y-59106723D01* X95157243Y-58941097D01* X95157238Y-58941092D01* X94979577Y-58802812D01* X94979578Y-58802812D01* X94979576Y-58802811D01* X94943070Y-58783055D01* X94893479Y-58733836D01* X94878371Y-58665619D01* X94902541Y-58600064D01* X94943070Y-58564945D01* X94943084Y-58564936D01* X94979576Y-58545189D01* X95157240Y-58406906D01* X95309722Y-58241268D01* X95432860Y-58052791D01* X95523296Y-57846616D01* X95578564Y-57628368D01* X95597156Y-57404000D01* X95578564Y-57179632D01* X95523296Y-56961384D01* X95432860Y-56755209D01* X95309722Y-56566732D01* X95309719Y-56566729D01* X95309715Y-56566723D01* X95157243Y-56401097D01* X95157238Y-56401092D01* X94979577Y-56262812D01* X94979578Y-56262812D01* X94979576Y-56262811D01* X94943070Y-56243055D01* X94893479Y-56193836D01* X94878371Y-56125619D01* X94902541Y-56060064D01* X94943070Y-56024945D01* X94943084Y-56024936D01* X94979576Y-56005189D01* X95157240Y-55866906D01* X95309722Y-55701268D01* X95432860Y-55512791D01* X95523296Y-55306616D01* X95578564Y-55088368D01* X95597156Y-54864000D01* X95578564Y-54639632D01* X95523296Y-54421384D01* X95432860Y-54215209D01* X95309722Y-54026732D01* X95309719Y-54026729D01* X95309715Y-54026723D01* X95157243Y-53861097D01* X95157238Y-53861092D01* X94979577Y-53722812D01* X94979578Y-53722812D01* X94979576Y-53722811D01* X94943070Y-53703055D01* X94893479Y-53653836D01* X94878371Y-53585619D01* X94902541Y-53520064D01* X94943070Y-53484945D01* X94943084Y-53484936D01* X94979576Y-53465189D01* X95157240Y-53326906D01* X95309722Y-53161268D01* X95432860Y-52972791D01* X95523296Y-52766616D01* X95578564Y-52548368D01* X95597156Y-52324000D01* X95578564Y-52099632D01* X95523296Y-51881384D01* X95432860Y-51675209D01* X95309722Y-51486732D01* X95309719Y-51486729D01* X95309715Y-51486723D01* X95157243Y-51321097D01* X95157238Y-51321092D01* X94979577Y-51182812D01* X94979572Y-51182808D01* X94781580Y-51075661D01* X94781577Y-51075659D01* X94781574Y-51075658D01* X94781571Y-51075657D01* X94781569Y-51075656D01* X94568637Y-51002556D01* X94346569Y-50965500D01* X94121431Y-50965500D01* X93899362Y-51002556D01* X93686430Y-51075656D01* X93686419Y-51075661D01* X93488427Y-51182808D01* X93488422Y-51182812D01* X93310761Y-51321092D01* X93310756Y-51321097D01* X93158284Y-51486723D01* X93158276Y-51486734D01* X93035140Y-51675207D01* X92944703Y-51881385D01* X92889436Y-52099628D01* X92889434Y-52099640D01* X92870844Y-52323994D01* X92870844Y-52324005D01* X92889434Y-52548359D01* X92889436Y-52548371D01* X92944703Y-52766614D01* X93035140Y-52972792D01* X93158276Y-53161265D01* X93158284Y-53161276D01* X93310756Y-53326902D01* X93310760Y-53326906D01* X93488424Y-53465189D01* X93488429Y-53465191D01* X93488431Y-53465193D01* X93524930Y-53484946D01* X93574520Y-53534165D01* X93589628Y-53602382D01* X93565457Y-53667937D01* X93524930Y-53703054D01* X93488431Y-53722806D01* X93488422Y-53722812D01* X93310761Y-53861092D01* X93310756Y-53861097D01* X93158284Y-54026723D01* X93158276Y-54026734D01* X93035140Y-54215207D01* X92944703Y-54421385D01* X92889436Y-54639628D01* X92889434Y-54639640D01* X92870844Y-54863994D01* X92870844Y-54864005D01* X92889434Y-55088359D01* X92889436Y-55088371D01* X92944703Y-55306614D01* X93035140Y-55512792D01* X93158276Y-55701265D01* X93158284Y-55701276D01* X93310756Y-55866902D01* X93310760Y-55866906D01* X93488424Y-56005189D01* X93488429Y-56005191D01* X93488431Y-56005193D01* X93524930Y-56024946D01* X93574520Y-56074165D01* X93589628Y-56142382D01* X93565457Y-56207937D01* X93524930Y-56243054D01* X93488431Y-56262806D01* X93488422Y-56262812D01* X93310761Y-56401092D01* X93310756Y-56401097D01* X93158284Y-56566723D01* X93158276Y-56566734D01* X93035140Y-56755207D01* X92944703Y-56961385D01* X92889436Y-57179628D01* X92889434Y-57179640D01* X92870844Y-57403994D01* X92870844Y-57404005D01* X92889434Y-57628359D01* X92889436Y-57628371D01* X92944703Y-57846614D01* X93035140Y-58052792D01* X93158276Y-58241265D01* X93158284Y-58241276D01* X93310756Y-58406902D01* X93310760Y-58406906D01* X93488424Y-58545189D01* X93488429Y-58545191D01* X93488431Y-58545193D01* X93524930Y-58564946D01* X93574520Y-58614165D01* X93589628Y-58682382D01* X93565457Y-58747937D01* X93524930Y-58783054D01* X93488431Y-58802806D01* X93488422Y-58802812D01* X93310761Y-58941092D01* X93310756Y-58941097D01* X93158284Y-59106723D01* X93158276Y-59106734D01* X93035140Y-59295207D01* X92944703Y-59501385D01* X92889436Y-59719628D01* X92889434Y-59719640D01* X92870844Y-59943994D01* X92870844Y-59944005D01* X92889434Y-60168359D01* X92889436Y-60168371D01* X92944703Y-60386614D01* X93035140Y-60592792D01* X93158276Y-60781265D01* X93158284Y-60781276D01* X93303489Y-60939008D01* X93334412Y-61001662D01* X93326552Y-61071088D01* X93282405Y-61125244D01* X93255596Y-61139172D01* X93137794Y-61183111D01* X93020739Y-61270739D01* X92933111Y-61387795D01* X92882011Y-61524795D01* X92882011Y-61524797D01* X92875500Y-61585345D01* X92875500Y-63382654D01* X92882011Y-63443202D01* X92882011Y-63443204D01* X92933111Y-63580204D01* X93020739Y-63697261D01* X93137796Y-63784889D01* X93189737Y-63804262D01* X93255595Y-63828827D01* X93311528Y-63870699D01* X93335944Y-63936163D01* X93321092Y-64004436D01* X93303490Y-64028991D01* X93158279Y-64186730D01* X93158276Y-64186734D01* X93035140Y-64375207D01* X92944703Y-64581385D01* X92889436Y-64799628D01* X92889434Y-64799640D01* X92870844Y-65023994D01* X92870844Y-65024005D01* X92889434Y-65248359D01* X92889436Y-65248371D01* X92944703Y-65466614D01* X93035140Y-65672792D01* X93158276Y-65861265D01* X93158284Y-65861276D01* X93310756Y-66026902D01* X93310760Y-66026906D01* X93488424Y-66165189D01* X93488429Y-66165191D01* X93488431Y-66165193D01* X93524930Y-66184946D01* X93574520Y-66234165D01* X93589628Y-66302382D01* X93565457Y-66367937D01* X93524930Y-66403054D01* X93488431Y-66422806D01* X93488422Y-66422812D01* X93310761Y-66561092D01* X93310756Y-66561097D01* X93158284Y-66726723D01* X93158276Y-66726734D01* X93035140Y-66915207D01* X92944703Y-67121385D01* X92889436Y-67339628D01* X92889434Y-67339640D01* X92870844Y-67563994D01* X92870844Y-67564005D01* X92889434Y-67788359D01* X92889436Y-67788371D01* X92944703Y-68006614D01* X93035140Y-68212792D01* X93158276Y-68401265D01* X93158284Y-68401276D01* X93310756Y-68566902D01* X93310760Y-68566906D01* X93488424Y-68705189D01* X93488429Y-68705191D01* X93488431Y-68705193D01* X93524930Y-68724946D01* X93574520Y-68774165D01* X93589628Y-68842382D01* X93565457Y-68907937D01* X93524930Y-68943054D01* X93488431Y-68962806D01* X93488422Y-68962812D01* X93310761Y-69101092D01* X93310756Y-69101097D01* X93158284Y-69266723D01* X93158276Y-69266734D01* X93035140Y-69455207D01* X92944703Y-69661385D01* X92889436Y-69879628D01* X92889434Y-69879640D01* X92870844Y-70103994D01* X92870844Y-70104005D01* X92889434Y-70328359D01* X92889436Y-70328371D01* X92944703Y-70546614D01* X93035140Y-70752792D01* X93158276Y-70941265D01* X93158284Y-70941276D01* X93310756Y-71106902D01* X93310760Y-71106906D01* X93488424Y-71245189D01* X93488429Y-71245191D01* X93488431Y-71245193D01* X93524930Y-71264946D01* X93574520Y-71314165D01* X93589628Y-71382382D01* X93565457Y-71447937D01* X93524930Y-71483054D01* X93488431Y-71502806D01* X93488422Y-71502812D01* X93310761Y-71641092D01* X93310756Y-71641097D01* X93158284Y-71806723D01* X93158276Y-71806734D01* X93035140Y-71995207D01* X92944703Y-72201385D01* X92889436Y-72419628D01* X92889434Y-72419640D01* X92870844Y-72643994D01* X92870844Y-72644005D01* X77817156Y-72644005D01* X77817156Y-72644000D01* X77798564Y-72419632D01* X77743296Y-72201384D01* X77652860Y-71995209D01* X77529722Y-71806732D01* X77529719Y-71806729D01* X77529715Y-71806723D01* X77377243Y-71641097D01* X77377238Y-71641092D01* X77199577Y-71502812D01* X77199578Y-71502812D01* X77199576Y-71502811D01* X77163070Y-71483055D01* X77113479Y-71433836D01* X77098371Y-71365619D01* X77122541Y-71300064D01* X77163070Y-71264945D01* X77163084Y-71264936D01* X77199576Y-71245189D01* X77377240Y-71106906D01* X77529722Y-70941268D01* X77652860Y-70752791D01* X77743296Y-70546616D01* X77798564Y-70328368D01* X77817156Y-70104000D01* X77798564Y-69879632D01* X77743296Y-69661384D01* X77652860Y-69455209D01* X77529722Y-69266732D01* X77529719Y-69266729D01* X77529715Y-69266723D01* X77377243Y-69101097D01* X77377238Y-69101092D01* X77199577Y-68962812D01* X77199578Y-68962812D01* X77199576Y-68962811D01* X77163070Y-68943055D01* X77113479Y-68893836D01* X77098371Y-68825619D01* X77122541Y-68760064D01* X77163070Y-68724945D01* X77163084Y-68724936D01* X77199576Y-68705189D01* X77377240Y-68566906D01* X77529722Y-68401268D01* X77652860Y-68212791D01* X77743296Y-68006616D01* X77798564Y-67788368D01* X77817156Y-67564000D01* X77798564Y-67339632D01* X77743296Y-67121384D01* X77652860Y-66915209D01* X77529722Y-66726732D01* X77529719Y-66726729D01* X77529715Y-66726723D01* X77377243Y-66561097D01* X77377238Y-66561092D01* X77199577Y-66422812D01* X77199578Y-66422812D01* X77199576Y-66422811D01* X77163070Y-66403055D01* X77113479Y-66353836D01* X77098371Y-66285619D01* X77122541Y-66220064D01* X77163070Y-66184945D01* X77163084Y-66184936D01* X77199576Y-66165189D01* X77377240Y-66026906D01* X77529722Y-65861268D01* X77652860Y-65672791D01* X77743296Y-65466616D01* X77798564Y-65248368D01* X77817156Y-65024000D01* X77798564Y-64799632D01* X77743296Y-64581384D01* X77652860Y-64375209D01* X77529722Y-64186732D01* X77529719Y-64186729D01* X77529715Y-64186723D01* X77377243Y-64021097D01* X77377238Y-64021092D01* X77199577Y-63882812D01* X77199572Y-63882808D01* X77001580Y-63775661D01* X77001577Y-63775659D01* X77001574Y-63775658D01* X77001571Y-63775657D01* X77001569Y-63775656D01* X76788637Y-63702556D01* X76566569Y-63665500D01* X76341431Y-63665500D01* X76119362Y-63702556D01* X75906430Y-63775656D01* X75906419Y-63775661D01* X75708427Y-63882808D01* X75708422Y-63882812D01* X75530761Y-64021092D01* X75530756Y-64021097D01* X75378284Y-64186723D01* X75378276Y-64186734D01* X75255140Y-64375207D01* X75164703Y-64581385D01* X75109436Y-64799628D01* X75109434Y-64799640D01* X75090844Y-65023994D01* X75090844Y-65024005D01* X75109434Y-65248359D01* X75109436Y-65248371D01* X75164703Y-65466614D01* X75255140Y-65672792D01* X75378276Y-65861265D01* X75378284Y-65861276D01* X75530756Y-66026902D01* X75530760Y-66026906D01* X75708424Y-66165189D01* X75708429Y-66165191D01* X75708431Y-66165193D01* X75744930Y-66184946D01* X75794520Y-66234165D01* X75809628Y-66302382D01* X75785457Y-66367937D01* X75744930Y-66403054D01* X75708431Y-66422806D01* X75708422Y-66422812D01* X75530761Y-66561092D01* X75530756Y-66561097D01* X75378284Y-66726723D01* X75378276Y-66726734D01* X75255140Y-66915207D01* X75164703Y-67121385D01* X75109436Y-67339628D01* X75109434Y-67339640D01* X75090844Y-67563994D01* X75090844Y-67564005D01* X75109434Y-67788359D01* X75109436Y-67788371D01* X75164703Y-68006614D01* X75255140Y-68212792D01* X75378276Y-68401265D01* X75378284Y-68401276D01* X75530756Y-68566902D01* X75530760Y-68566906D01* X75708424Y-68705189D01* X75708429Y-68705191D01* X75708431Y-68705193D01* X75744930Y-68724946D01* X75794520Y-68774165D01* X75809628Y-68842382D01* X75785457Y-68907937D01* X75744930Y-68943054D01* X75708431Y-68962806D01* X75708422Y-68962812D01* X75530761Y-69101092D01* X75530756Y-69101097D01* X75378284Y-69266723D01* X75378276Y-69266734D01* X75255140Y-69455207D01* X75164703Y-69661385D01* X75109436Y-69879628D01* X75109434Y-69879640D01* X75090844Y-70103994D01* X75090844Y-70104005D01* X75109434Y-70328359D01* X75109436Y-70328371D01* X75164703Y-70546614D01* X75255140Y-70752792D01* X75378276Y-70941265D01* X75378284Y-70941276D01* X75530756Y-71106902D01* X75530760Y-71106906D01* X75708424Y-71245189D01* X75708429Y-71245191D01* X75708431Y-71245193D01* X75744930Y-71264946D01* X75794520Y-71314165D01* X75809628Y-71382382D01* X75785457Y-71447937D01* X75744930Y-71483054D01* X75708431Y-71502806D01* X75708422Y-71502812D01* X75530761Y-71641092D01* X75530756Y-71641097D01* X75378284Y-71806723D01* X75378276Y-71806734D01* X75255140Y-71995207D01* X75164703Y-72201385D01* X75109436Y-72419628D01* X75109434Y-72419640D01* X75090844Y-72643994D01* X75090844Y-72644005D01* X68072000Y-72644005D01* X68072000Y-59944005D01* X75090844Y-59944005D01* X75109434Y-60168359D01* X75109436Y-60168371D01* X75164703Y-60386614D01* X75255140Y-60592792D01* X75378276Y-60781265D01* X75378284Y-60781276D01* X75523488Y-60939007D01* X75530760Y-60946906D01* X75708424Y-61085189D01* X75708425Y-61085189D01* X75708427Y-61085191D01* X75730803Y-61097300D01* X75906426Y-61192342D01* X76119365Y-61265444D01* X76341431Y-61302500D01* X76566569Y-61302500D01* X76788635Y-61265444D01* X77001574Y-61192342D01* X77199576Y-61085189D01* X77377240Y-60946906D01* X77529722Y-60781268D01* X77652860Y-60592791D01* X77743296Y-60386616D01* X77798564Y-60168368D01* X77817156Y-59944000D01* X77798564Y-59719632D01* X77743296Y-59501384D01* X77652860Y-59295209D01* X77529722Y-59106732D01* X77529719Y-59106729D01* X77529715Y-59106723D01* X77377243Y-58941097D01* X77377238Y-58941092D01* X77199577Y-58802812D01* X77199578Y-58802812D01* X77199576Y-58802811D01* X77163070Y-58783055D01* X77113479Y-58733836D01* X77098371Y-58665619D01* X77122541Y-58600064D01* X77163070Y-58564945D01* X77163084Y-58564936D01* X77199576Y-58545189D01* X77377240Y-58406906D01* X77529722Y-58241268D01* X77652860Y-58052791D01* X77743296Y-57846616D01* X77798564Y-57628368D01* X77817156Y-57404000D01* X77798564Y-57179632D01* X77743296Y-56961384D01* X77652860Y-56755209D01* X77529722Y-56566732D01* X77529719Y-56566729D01* X77529715Y-56566723D01* X77377243Y-56401097D01* X77377238Y-56401092D01* X77199577Y-56262812D01* X77199578Y-56262812D01* X77199576Y-56262811D01* X77163070Y-56243055D01* X77113479Y-56193836D01* X77098371Y-56125619D01* X77122541Y-56060064D01* X77163070Y-56024945D01* X77163084Y-56024936D01* X77199576Y-56005189D01* X77377240Y-55866906D01* X77529722Y-55701268D01* X77652860Y-55512791D01* X77743296Y-55306616D01* X77798564Y-55088368D01* X77817156Y-54864000D01* X77798564Y-54639632D01* X77743296Y-54421384D01* X77652860Y-54215209D01* X77529722Y-54026732D01* X77529719Y-54026729D01* X77529715Y-54026723D01* X77377243Y-53861097D01* X77377238Y-53861092D01* X77199577Y-53722812D01* X77199577Y-53722811D01* X77156303Y-53699393D01* X77106713Y-53650173D01* X77091605Y-53581957D01* X77115775Y-53516401D01* X77144198Y-53488763D01* X77325079Y-53362108D01* X77492105Y-53195082D01* X77627600Y-53001578D01* X77727429Y-52787492D01* X77727432Y-52787486D01* X77784636Y-52574000D01* X76899572Y-52574000D01* X76922682Y-52538040D01* X76964000Y-52397327D01* X76964000Y-52250673D01* X76922682Y-52109960D01* X76899572Y-52074000D01* X77784636Y-52074000D01* X77784635Y-52073999D01* X77727432Y-51860513D01* X77727429Y-51860507D01* X77627600Y-51646422D01* X77627599Y-51646420D01* X77492113Y-51452926D01* X77492108Y-51452920D01* X77325082Y-51285894D01* X77131578Y-51150399D01* X76917492Y-51050570D01* X76917486Y-51050567D01* X76704000Y-50993364D01* X76704000Y-51877505D01* X76599161Y-51829627D01* X76490473Y-51814000D01* X76417527Y-51814000D01* X76308839Y-51829627D01* X76204000Y-51877505D01* X76204000Y-50993364D01* X76203999Y-50993364D01* X75990513Y-51050567D01* X75990507Y-51050570D01* X75776422Y-51150399D01* X75776420Y-51150400D01* X75582926Y-51285886D01* X75582920Y-51285891D01* X75415891Y-51452920D01* X75415886Y-51452926D01* X75280400Y-51646420D01* X75280399Y-51646422D01* X75180570Y-51860507D01* X75180567Y-51860513D01* X75123364Y-52073999D01* X75123364Y-52074000D01* X76008428Y-52074000D01* X75985318Y-52109960D01* X75944000Y-52250673D01* X75944000Y-52397327D01* X75985318Y-52538040D01* X76008428Y-52574000D01* X75123364Y-52574000D01* X75180567Y-52787486D01* X75180570Y-52787492D01* X75280399Y-53001578D01* X75415894Y-53195082D01* X75582917Y-53362105D01* X75763802Y-53488763D01* X75807427Y-53543340D01* X75814619Y-53612839D01* X75783097Y-53675193D01* X75751697Y-53699392D01* X75708427Y-53722809D01* X75708422Y-53722812D01* X75530761Y-53861092D01* X75530756Y-53861097D01* X75378284Y-54026723D01* X75378276Y-54026734D01* X75255140Y-54215207D01* X75164703Y-54421385D01* X75109436Y-54639628D01* X75109434Y-54639640D01* X75090844Y-54863994D01* X75090844Y-54864005D01* X75109434Y-55088359D01* X75109436Y-55088371D01* X75164703Y-55306614D01* X75255140Y-55512792D01* X75378276Y-55701265D01* X75378284Y-55701276D01* X75530756Y-55866902D01* X75530760Y-55866906D01* X75708424Y-56005189D01* X75708429Y-56005191D01* X75708431Y-56005193D01* X75744930Y-56024946D01* X75794520Y-56074165D01* X75809628Y-56142382D01* X75785457Y-56207937D01* X75744930Y-56243054D01* X75708431Y-56262806D01* X75708422Y-56262812D01* X75530761Y-56401092D01* X75530756Y-56401097D01* X75378284Y-56566723D01* X75378276Y-56566734D01* X75255140Y-56755207D01* X75164703Y-56961385D01* X75109436Y-57179628D01* X75109434Y-57179640D01* X75090844Y-57403994D01* X75090844Y-57404005D01* X75109434Y-57628359D01* X75109436Y-57628371D01* X75164703Y-57846614D01* X75255140Y-58052792D01* X75378276Y-58241265D01* X75378284Y-58241276D01* X75530756Y-58406902D01* X75530760Y-58406906D01* X75708424Y-58545189D01* X75708429Y-58545191D01* X75708431Y-58545193D01* X75744930Y-58564946D01* X75794520Y-58614165D01* X75809628Y-58682382D01* X75785457Y-58747937D01* X75744930Y-58783054D01* X75708431Y-58802806D01* X75708422Y-58802812D01* X75530761Y-58941092D01* X75530756Y-58941097D01* X75378284Y-59106723D01* X75378276Y-59106734D01* X75255140Y-59295207D01* X75164703Y-59501385D01* X75109436Y-59719628D01* X75109434Y-59719640D01* X75090844Y-59943994D01* X75090844Y-59944005D01* X68072000Y-59944005D01* X68072000Y-47244005D01* X75090844Y-47244005D01* X75109434Y-47468359D01* X75109436Y-47468371D01* X75164703Y-47686614D01* X75255140Y-47892792D01* X75378276Y-48081265D01* X75378284Y-48081276D01* X75530756Y-48246902D01* X75530761Y-48246907D01* X75568471Y-48276258D01* X75708424Y-48385189D01* X75708425Y-48385189D01* X75708427Y-48385191D01* X75788602Y-48428579D01* X75906426Y-48492342D01* X76119365Y-48565444D01* X76341431Y-48602500D01* X76566569Y-48602500D01* X76788635Y-48565444D01* X77001574Y-48492342D01* X77199576Y-48385189D01* X77377240Y-48246906D01* X77504641Y-48108513D01* X77529715Y-48081276D01* X77529716Y-48081274D01* X77529722Y-48081268D01* X77652860Y-47892791D01* X77665490Y-47863998D01* X81655693Y-47863998D01* X81657672Y-47886639D01* X81657846Y-47894829D01* X81656684Y-47920688D01* X81656685Y-47920690D01* X81667691Y-48001946D01* X81668016Y-48004864D01* X81670532Y-48033615D01* X81674885Y-48083371D01* X81681624Y-48108523D01* X81683174Y-48116243D01* X81687093Y-48145173D01* X81687096Y-48145183D01* X81711413Y-48220023D01* X81712334Y-48223134D01* X81731877Y-48296066D01* X81731881Y-48296078D01* X81744275Y-48322659D01* X81747051Y-48329705D01* X81757097Y-48360621D01* X81766105Y-48377360D01* X81792822Y-48427010D01* X81794416Y-48430187D01* X81824942Y-48495651D01* X81824943Y-48495653D01* X81824944Y-48495654D01* X81843668Y-48522396D01* X81847475Y-48528574D01* X81864443Y-48560105D01* X81864445Y-48560108D01* X81909397Y-48616475D01* X81911709Y-48619567D01* X81951251Y-48676038D01* X81951254Y-48676041D01* X81976659Y-48701446D01* X81981295Y-48706633D01* X82005686Y-48737218D01* X82057514Y-48782499D01* X82060557Y-48785344D01* X82106955Y-48831743D01* X82106956Y-48831744D01* X82106959Y-48831746D01* X82106962Y-48831749D01* X82138487Y-48853822D01* X82139109Y-48854258D01* X82144341Y-48858357D01* X82176282Y-48886263D01* X82232535Y-48919872D01* X82236258Y-48922283D01* X82272750Y-48947835D01* X82287338Y-48958051D01* X82287341Y-48958052D01* X82287346Y-48958056D01* X82325910Y-48976038D01* X82331493Y-48978997D01* X82370750Y-49002453D01* X82429010Y-49024317D01* X82433422Y-49026171D01* X82486924Y-49051120D01* X82531204Y-49062984D01* X82536939Y-49064824D01* X82566356Y-49075864D01* X82582839Y-49082051D01* X82640813Y-49092571D01* X82645778Y-49093685D01* X82699629Y-49108115D01* X82748602Y-49112399D01* X82754250Y-49113157D01* X82793352Y-49120253D01* X82805732Y-49122500D01* X82805733Y-49122500D01* X82861348Y-49122500D01* X82866749Y-49122735D01* X82895370Y-49125239D01* X82918998Y-49127307D01* X82918999Y-49127307D01* X82918999Y-49127306D01* X82919000Y-49127307D01* X82972310Y-49122643D01* X82975504Y-49122500D01* X82975522Y-49122500D01* X83023625Y-49118169D01* X83030391Y-49117561D01* X83138353Y-49108117D01* X83138357Y-49108116D01* X83138371Y-49108115D01* X83138383Y-49108111D01* X83138902Y-49108020D01* X83144136Y-49107324D01* X83144622Y-49107281D01* X83249335Y-49078381D01* X83351076Y-49051120D01* X83351089Y-49051113D01* X83358029Y-49048588D01* X83362720Y-49047089D01* X83362993Y-49047014D01* X83458019Y-49001251D01* X83550654Y-48958056D01* X83550663Y-48958049D01* X83555350Y-48955345D01* X83555421Y-48955468D01* X83566206Y-48949152D01* X83567093Y-48948725D01* X83649868Y-48888585D01* X83731038Y-48831749D01* X83731951Y-48830835D01* X83746752Y-48818193D01* X83750363Y-48815571D01* X83781990Y-48782492D01* X83818902Y-48743884D01* X83886746Y-48676041D01* X83886746Y-48676040D01* X83886749Y-48676038D01* X83889476Y-48672142D01* X83901428Y-48657568D01* X83906912Y-48651834D01* X83959809Y-48571697D01* X84013056Y-48495654D01* X84016538Y-48488185D01* X84025436Y-48472276D01* X84031709Y-48462774D01* X84068216Y-48377360D01* X84106120Y-48296076D01* X84109145Y-48284782D01* X84114896Y-48268147D01* X84120743Y-48254470D01* X84140711Y-48166978D01* X84163115Y-48083371D01* X84164807Y-48064024D01* X84166126Y-48055626D01* X84171151Y-48033615D01* X84175036Y-47947105D01* X84182307Y-47864000D01* X84182307Y-47863998D01* X86505693Y-47863998D01* X86507672Y-47886639D01* X86507846Y-47894829D01* X86506684Y-47920688D01* X86506685Y-47920690D01* X86517691Y-48001946D01* X86518016Y-48004864D01* X86520532Y-48033615D01* X86524885Y-48083371D01* X86531624Y-48108523D01* X86533174Y-48116243D01* X86537093Y-48145173D01* X86537096Y-48145183D01* X86561413Y-48220023D01* X86562334Y-48223134D01* X86581877Y-48296066D01* X86581881Y-48296078D01* X86594275Y-48322659D01* X86597051Y-48329705D01* X86607097Y-48360621D01* X86616105Y-48377360D01* X86642822Y-48427010D01* X86644416Y-48430187D01* X86674942Y-48495651D01* X86674943Y-48495653D01* X86674944Y-48495654D01* X86693668Y-48522396D01* X86697475Y-48528574D01* X86714443Y-48560105D01* X86714445Y-48560108D01* X86759397Y-48616475D01* X86761709Y-48619567D01* X86801251Y-48676038D01* X86801254Y-48676041D01* X86826659Y-48701446D01* X86831295Y-48706633D01* X86855686Y-48737218D01* X86907514Y-48782499D01* X86910557Y-48785344D01* X86956955Y-48831743D01* X86956956Y-48831744D01* X86956959Y-48831746D01* X86956962Y-48831749D01* X86988487Y-48853822D01* X86989109Y-48854258D01* X86994341Y-48858357D01* X87026282Y-48886263D01* X87082535Y-48919872D01* X87086258Y-48922283D01* X87122750Y-48947835D01* X87137338Y-48958051D01* X87137341Y-48958052D01* X87137346Y-48958056D01* X87175910Y-48976038D01* X87181493Y-48978997D01* X87220750Y-49002453D01* X87279010Y-49024317D01* X87283422Y-49026171D01* X87336924Y-49051120D01* X87381204Y-49062984D01* X87386939Y-49064824D01* X87416356Y-49075864D01* X87432839Y-49082051D01* X87490813Y-49092571D01* X87495778Y-49093685D01* X87549629Y-49108115D01* X87598602Y-49112399D01* X87604250Y-49113157D01* X87643352Y-49120253D01* X87655732Y-49122500D01* X87655733Y-49122500D01* X87711348Y-49122500D01* X87716749Y-49122735D01* X87745370Y-49125239D01* X87768998Y-49127307D01* X87768999Y-49127307D01* X87768999Y-49127306D01* X87769000Y-49127307D01* X87822310Y-49122643D01* X87825504Y-49122500D01* X87825522Y-49122500D01* X87873625Y-49118169D01* X87880391Y-49117561D01* X87988353Y-49108117D01* X87988357Y-49108116D01* X87988371Y-49108115D01* X87988383Y-49108111D01* X87988902Y-49108020D01* X87994136Y-49107324D01* X87994622Y-49107281D01* X88099335Y-49078381D01* X88201076Y-49051120D01* X88201089Y-49051113D01* X88208029Y-49048588D01* X88212720Y-49047089D01* X88212993Y-49047014D01* X88308019Y-49001251D01* X88400654Y-48958056D01* X88400663Y-48958049D01* X88405350Y-48955345D01* X88405421Y-48955468D01* X88416206Y-48949152D01* X88417093Y-48948725D01* X88499868Y-48888585D01* X88581038Y-48831749D01* X88581951Y-48830835D01* X88596752Y-48818193D01* X88600363Y-48815571D01* X88631990Y-48782492D01* X88668902Y-48743884D01* X88736746Y-48676041D01* X88736746Y-48676040D01* X88736749Y-48676038D01* X88739476Y-48672142D01* X88751428Y-48657568D01* X88756912Y-48651834D01* X88809809Y-48571697D01* X88863056Y-48495654D01* X88866538Y-48488185D01* X88875436Y-48472276D01* X88881709Y-48462774D01* X88918216Y-48377360D01* X88956120Y-48296076D01* X88959145Y-48284782D01* X88964896Y-48268147D01* X88970743Y-48254470D01* X88990711Y-48166978D01* X89013115Y-48083371D01* X89014807Y-48064024D01* X89016126Y-48055626D01* X89021151Y-48033615D01* X89025036Y-47947105D01* X89032307Y-47864000D01* X89030327Y-47841368D01* X89030153Y-47833173D01* X89031315Y-47807309D01* X89020305Y-47726042D01* X89019981Y-47723125D01* X89016787Y-47686616D01* X89013115Y-47644629D01* X89006377Y-47619483D01* X89004825Y-47611753D01* X89003122Y-47599190D01* X89000906Y-47582825D01* X88976587Y-47507982D01* X88975671Y-47504889D01* X88961430Y-47451741D01* X88956123Y-47431933D01* X88956119Y-47431923D01* X88943722Y-47405336D01* X88940948Y-47398296D01* X88930903Y-47367379D01* X88930902Y-47367377D01* X88930899Y-47367370D01* X88895167Y-47300970D01* X88893582Y-47297811D01* X88868492Y-47244005D01* X92870844Y-47244005D01* X92889434Y-47468359D01* X92889436Y-47468371D01* X92944703Y-47686614D01* X93035140Y-47892792D01* X93158276Y-48081265D01* X93158284Y-48081276D01* X93310756Y-48246902D01* X93310761Y-48246907D01* X93348471Y-48276258D01* X93488424Y-48385189D01* X93488425Y-48385189D01* X93488427Y-48385191D01* X93568602Y-48428579D01* X93686426Y-48492342D01* X93899365Y-48565444D01* X94121431Y-48602500D01* X94346569Y-48602500D01* X94568635Y-48565444D01* X94781574Y-48492342D01* X94979576Y-48385189D01* X95157240Y-48246906D01* X95284641Y-48108513D01* X95309715Y-48081276D01* X95309716Y-48081274D01* X95309722Y-48081268D01* X95432860Y-47892791D01* X95523296Y-47686616D01* X95578564Y-47468368D01* X95581584Y-47431923D01* X95597156Y-47244005D01* X95597156Y-47243994D01* X95578565Y-47019640D01* X95578563Y-47019628D01* X95547320Y-46896254D01* X95523296Y-46801384D01* X95432860Y-46595209D01* X95309722Y-46406732D01* X95309719Y-46406729D01* X95309715Y-46406723D01* X95157243Y-46241097D01* X95157238Y-46241092D01* X95008431Y-46125270D01* X94979576Y-46102811D01* X94943070Y-46083055D01* X94893479Y-46033836D01* X94878371Y-45965619D01* X94902541Y-45900064D01* X94943070Y-45864945D01* X94943896Y-45864498D01* X94979576Y-45845189D01* X95157240Y-45706906D01* X95278530Y-45575151D01* X95309715Y-45541276D01* X95309716Y-45541274D01* X95309722Y-45541268D01* X95432860Y-45352791D01* X95523296Y-45146616D01* X95578564Y-44928368D01* X95579085Y-44922083D01* X95597156Y-44704005D01* X95597156Y-44703994D01* X95578565Y-44479640D01* X95578563Y-44479628D01* X95556507Y-44392530D01* X95523296Y-44261384D01* X95432860Y-44055209D01* X95415973Y-44029362D01* X95309723Y-43866734D01* X95309715Y-43866723D01* X95157243Y-43701097D01* X95157238Y-43701092D01* X94979577Y-43562812D01* X94979572Y-43562808D01* X94781580Y-43455661D01* X94781577Y-43455659D01* X94781574Y-43455658D01* X94781571Y-43455657D01* X94781569Y-43455656D01* X94568637Y-43382556D01* X94346569Y-43345500D01* X94121431Y-43345500D01* X93899362Y-43382556D01* X93686430Y-43455656D01* X93686419Y-43455661D01* X93488427Y-43562808D01* X93488422Y-43562812D01* X93310761Y-43701092D01* X93310756Y-43701097D01* X93158284Y-43866723D01* X93158276Y-43866734D01* X93035140Y-44055207D01* X92944703Y-44261385D01* X92889436Y-44479628D01* X92889434Y-44479640D01* X92870844Y-44703994D01* X92870844Y-44704005D01* X92889434Y-44928359D01* X92889436Y-44928371D01* X92944703Y-45146614D01* X93035140Y-45352792D01* X93158276Y-45541265D01* X93158284Y-45541276D01* X93310756Y-45706902D01* X93310761Y-45706907D01* X93346864Y-45735007D01* X93488424Y-45845189D01* X93488429Y-45845191D01* X93488431Y-45845193D01* X93524930Y-45864946D01* X93574520Y-45914165D01* X93589628Y-45982382D01* X93565457Y-46047937D01* X93524930Y-46083054D01* X93488431Y-46102806D01* X93488422Y-46102812D01* X93310761Y-46241092D01* X93310756Y-46241097D01* X93158284Y-46406723D01* X93158276Y-46406734D01* X93035140Y-46595207D01* X92944703Y-46801385D01* X92889436Y-47019628D01* X92889434Y-47019640D01* X92870844Y-47243994D01* X92870844Y-47244005D01* X88868492Y-47244005D01* X88863056Y-47232347D01* X88863052Y-47232341D01* X88844337Y-47205613D01* X88840523Y-47199424D01* X88823555Y-47167892D01* X88778594Y-47111513D01* X88776279Y-47108417D01* X88736750Y-47051963D01* X88711340Y-47026553D01* X88706702Y-47021364D01* X88682312Y-46990780D01* X88630491Y-46945505D01* X88627442Y-46942655D01* X88581039Y-46896251D01* X88548891Y-46873741D01* X88543656Y-46869641D01* X88511718Y-46841737D01* X88455486Y-46808139D01* X88451725Y-46805704D01* X88413980Y-46779275D01* X88400654Y-46769944D01* X88386940Y-46763549D01* X88362100Y-46751965D01* X88356501Y-46748997D01* X88325701Y-46730596D01* X88317250Y-46725547D01* X88258988Y-46703681D01* X88254588Y-46701833D01* X88222893Y-46687053D01* X88201077Y-46676880D01* X88201065Y-46676876D01* X88156793Y-46665013D01* X88151053Y-46663172D01* X88105160Y-46645948D01* X88054115Y-46636684D01* X88047191Y-46635428D01* X88042217Y-46634312D01* X87988372Y-46619885D01* X87976370Y-46618834D01* X87939403Y-46615600D01* X87933741Y-46614840D01* X87898998Y-46608536D01* X87882267Y-46605500D01* X87882266Y-46605500D01* X87826652Y-46605500D01* X87821250Y-46605264D01* X87792629Y-46602760D01* X87769002Y-46600693D01* X87768997Y-46600693D01* X87715728Y-46605353D01* X87712489Y-46605499D01* X87657608Y-46610438D01* X87549618Y-46619885D01* X87549041Y-46619987D01* X87543889Y-46620672D01* X87543386Y-46620717D01* X87543369Y-46620720D01* X87438664Y-46649618D01* X87336918Y-46676881D01* X87329944Y-46679418D01* X87325268Y-46680912D01* X87325022Y-46680979D01* X87325011Y-46680984D01* X87229964Y-46726755D01* X87137352Y-46769941D01* X87132658Y-46772651D01* X87132587Y-46772529D01* X87121824Y-46778833D01* X87120908Y-46779274D01* X87120902Y-46779277D01* X87038119Y-46839423D01* X86956958Y-46896254D01* X86956027Y-46897185D01* X86941264Y-46909793D01* X86937641Y-46912425D01* X86937631Y-46912434D01* X86869097Y-46984115D01* X86801247Y-47051966D01* X86801246Y-47051967D01* X86798506Y-47055880D01* X86786581Y-47070419D01* X86781089Y-47076163D01* X86781085Y-47076169D01* X86728183Y-47156313D01* X86674943Y-47232347D01* X86674941Y-47232352D01* X86671462Y-47239812D01* X86662576Y-47255702D01* X86656292Y-47265222D01* X86656291Y-47265224D01* X86619780Y-47350644D01* X86581882Y-47431917D01* X86581880Y-47431923D01* X86578852Y-47443222D01* X86573102Y-47459854D01* X86567259Y-47473525D01* X86567256Y-47473533D01* X86547288Y-47561021D01* X86524885Y-47644626D01* X86524884Y-47644632D01* X86523192Y-47663970D01* X86521873Y-47672366D01* X86516849Y-47694385D01* X86512963Y-47780894D01* X86505693Y-47863996D01* X86505693Y-47863998D01* X84182307Y-47863998D01* X84180327Y-47841368D01* X84180153Y-47833173D01* X84181315Y-47807309D01* X84170305Y-47726042D01* X84169981Y-47723125D01* X84166787Y-47686616D01* X84163115Y-47644629D01* X84156377Y-47619483D01* X84154825Y-47611753D01* X84153122Y-47599190D01* X84150906Y-47582825D01* X84126587Y-47507982D01* X84125671Y-47504889D01* X84111430Y-47451741D01* X84106123Y-47431933D01* X84106119Y-47431923D01* X84093722Y-47405336D01* X84090948Y-47398296D01* X84080903Y-47367379D01* X84080902Y-47367377D01* X84080899Y-47367370D01* X84045167Y-47300970D01* X84043582Y-47297811D01* X84013056Y-47232347D01* X84013052Y-47232341D01* X83994337Y-47205613D01* X83990523Y-47199424D01* X83973555Y-47167892D01* X83928594Y-47111513D01* X83926279Y-47108417D01* X83886750Y-47051963D01* X83861340Y-47026553D01* X83856702Y-47021364D01* X83832312Y-46990780D01* X83780491Y-46945505D01* X83777442Y-46942655D01* X83731039Y-46896251D01* X83698891Y-46873741D01* X83693656Y-46869641D01* X83661718Y-46841737D01* X83605486Y-46808139D01* X83601725Y-46805704D01* X83563980Y-46779275D01* X83550654Y-46769944D01* X83536940Y-46763549D01* X83512100Y-46751965D01* X83506501Y-46748997D01* X83475701Y-46730596D01* X83467250Y-46725547D01* X83408988Y-46703681D01* X83404588Y-46701833D01* X83372893Y-46687053D01* X83351077Y-46676880D01* X83351065Y-46676876D01* X83306793Y-46665013D01* X83301053Y-46663172D01* X83255160Y-46645948D01* X83204115Y-46636684D01* X83197191Y-46635428D01* X83192217Y-46634312D01* X83138372Y-46619885D01* X83126370Y-46618834D01* X83089403Y-46615600D01* X83083741Y-46614840D01* X83048998Y-46608536D01* X83032267Y-46605500D01* X83032266Y-46605500D01* X82976652Y-46605500D01* X82971250Y-46605264D01* X82942629Y-46602760D01* X82919002Y-46600693D01* X82918997Y-46600693D01* X82865728Y-46605353D01* X82862489Y-46605499D01* X82807608Y-46610438D01* X82699618Y-46619885D01* X82699041Y-46619987D01* X82693889Y-46620672D01* X82693386Y-46620717D01* X82693369Y-46620720D01* X82588664Y-46649618D01* X82486918Y-46676881D01* X82479944Y-46679418D01* X82475268Y-46680912D01* X82475022Y-46680979D01* X82475011Y-46680984D01* X82379964Y-46726755D01* X82287352Y-46769941D01* X82282658Y-46772651D01* X82282587Y-46772529D01* X82271824Y-46778833D01* X82270908Y-46779274D01* X82270902Y-46779277D01* X82188119Y-46839423D01* X82106958Y-46896254D01* X82106027Y-46897185D01* X82091264Y-46909793D01* X82087641Y-46912425D01* X82087631Y-46912434D01* X82019097Y-46984115D01* X81951247Y-47051966D01* X81951246Y-47051967D01* X81948506Y-47055880D01* X81936581Y-47070419D01* X81931089Y-47076163D01* X81931085Y-47076169D01* X81878183Y-47156313D01* X81824943Y-47232347D01* X81824941Y-47232352D01* X81821462Y-47239812D01* X81812576Y-47255702D01* X81806292Y-47265222D01* X81806291Y-47265224D01* X81769780Y-47350644D01* X81731882Y-47431917D01* X81731880Y-47431923D01* X81728852Y-47443222D01* X81723102Y-47459854D01* X81717259Y-47473525D01* X81717256Y-47473533D01* X81697288Y-47561021D01* X81674885Y-47644626D01* X81674884Y-47644632D01* X81673192Y-47663970D01* X81671873Y-47672366D01* X81666849Y-47694385D01* X81662963Y-47780894D01* X81655693Y-47863996D01* X81655693Y-47863998D01* X77665490Y-47863998D01* X77743296Y-47686616D01* X77798564Y-47468368D01* X77801584Y-47431923D01* X77817156Y-47244005D01* X77817156Y-47243994D01* X77798565Y-47019640D01* X77798563Y-47019628D01* X77767320Y-46896254D01* X77743296Y-46801384D01* X77652860Y-46595209D01* X77529722Y-46406732D01* X77529719Y-46406729D01* X77529715Y-46406723D01* X77377243Y-46241097D01* X77377238Y-46241092D01* X77228431Y-46125270D01* X77199576Y-46102811D01* X77163070Y-46083055D01* X77113479Y-46033836D01* X77098371Y-45965619D01* X77122541Y-45900064D01* X77163070Y-45864945D01* X77163896Y-45864498D01* X77199576Y-45845189D01* X77377240Y-45706906D01* X77498530Y-45575151D01* X77529715Y-45541276D01* X77529716Y-45541274D01* X77529722Y-45541268D01* X77652860Y-45352791D01* X77743296Y-45146616D01* X77798564Y-44928368D01* X77799085Y-44922083D01* X77806384Y-44834000D01* X81205673Y-44834000D01* X81210644Y-44893994D01* X81212971Y-44922083D01* X81216856Y-45013543D01* X81216857Y-45013552D01* X81222010Y-45037461D01* X81223190Y-45045410D01* X81224947Y-45066617D01* X81224949Y-45066629D01* X81247417Y-45155353D01* X81267370Y-45247935D01* X81275257Y-45267561D01* X81277834Y-45275466D01* X81282251Y-45292907D01* X81320285Y-45379616D01* X81356767Y-45470404D01* X81366129Y-45485608D01* X81370117Y-45493220D01* X81376015Y-45506668D01* X81429524Y-45588570D01* X81482473Y-45674565D01* X81482480Y-45674574D01* X81489158Y-45682161D01* X81499886Y-45696267D01* X81503682Y-45702077D01* X81503686Y-45702083D01* X81572079Y-45776377D01* X81640882Y-45854552D01* X81640883Y-45854553D01* X81646070Y-45858741D01* X81659407Y-45871240D01* X81661783Y-45873822D01* X81713116Y-45913775D01* X81743948Y-45937772D01* X81791031Y-45975789D01* X81827421Y-46005173D01* X81827422Y-46005173D01* X81827424Y-46005175D01* X81830165Y-46006706D01* X81830240Y-46006748D01* X81845934Y-46017152D01* X81845979Y-46017187D01* X81845991Y-46017195D01* X81902799Y-46047937D01* X81940346Y-46068256D01* X82036740Y-46122105D01* X82036745Y-46122106D01* X82036749Y-46122109D01* X82039140Y-46123190D01* X82046477Y-46126448D01* X82046575Y-46126226D01* X82051262Y-46128281D01* X82051273Y-46128287D01* X82155740Y-46164151D01* X82262806Y-46201980D01* X82263367Y-46202076D01* X82268109Y-46203081D01* X82272043Y-46204078D01* X82272049Y-46204080D01* X82384095Y-46222777D01* X82499110Y-46242499D01* X82499119Y-46242500D01* X82735707Y-46242500D01* X82735712Y-46242500D01* X82768648Y-46237003D01* X82792475Y-46233028D01* X82797413Y-46232406D01* X82850941Y-46227851D01* X82857887Y-46227260D01* X82857888Y-46227259D01* X82857898Y-46227259D01* X82910297Y-46213614D01* X82915668Y-46212469D01* X82965951Y-46204080D01* X83023502Y-46184322D01* X83027975Y-46182973D01* X83089924Y-46166844D01* X83136259Y-46145898D01* X83141633Y-46143767D01* X83186727Y-46128287D01* X83243132Y-46097761D01* X83247054Y-46095816D01* X83308402Y-46068086D01* X83347795Y-46041459D01* X83352979Y-46038314D01* X83392008Y-46017195D01* X83392012Y-46017193D01* X83392013Y-46017192D01* X83392017Y-46017190D01* X83445228Y-45975772D01* X83448561Y-45973353D01* X83507047Y-45933825D01* X83539001Y-45903198D01* X83543789Y-45899058D01* X83576220Y-45873818D01* X83624119Y-45821784D01* X83626794Y-45819056D01* X83680144Y-45767925D01* X83704497Y-45734996D01* X83708727Y-45729877D01* X83729878Y-45706902D01* X83734314Y-45702083D01* X83774785Y-45640135D01* X83776835Y-45637189D01* X83777834Y-45635837D01* X83822715Y-45575157D01* X83839676Y-45541514D01* X83843114Y-45535549D01* X83861984Y-45506669D01* X83893042Y-45435861D01* X83894413Y-45432950D01* X83930657Y-45361067D01* X83940721Y-45328200D01* X83943221Y-45321466D01* X83955749Y-45292907D01* X83975535Y-45214770D01* X83976334Y-45211909D01* X84000864Y-45131815D01* X84004810Y-45100994D01* X84006198Y-45093684D01* X84013051Y-45066626D01* X84020090Y-44981672D01* X84031318Y-44893995D01* X84030139Y-44866249D01* X84030294Y-44858525D01* X84032327Y-44834000D01* X86655673Y-44834000D01* X86660644Y-44893994D01* X86662971Y-44922083D01* X86666856Y-45013543D01* X86666857Y-45013552D01* X86672010Y-45037461D01* X86673190Y-45045410D01* X86674947Y-45066617D01* X86674949Y-45066629D01* X86697417Y-45155353D01* X86717370Y-45247935D01* X86725257Y-45267561D01* X86727834Y-45275466D01* X86732251Y-45292907D01* X86770285Y-45379616D01* X86806767Y-45470404D01* X86816129Y-45485608D01* X86820117Y-45493220D01* X86826015Y-45506668D01* X86879524Y-45588570D01* X86932473Y-45674565D01* X86932480Y-45674574D01* X86939158Y-45682161D01* X86949886Y-45696267D01* X86953682Y-45702077D01* X86953686Y-45702083D01* X87022079Y-45776377D01* X87090882Y-45854552D01* X87090883Y-45854553D01* X87096070Y-45858741D01* X87109407Y-45871240D01* X87111783Y-45873822D01* X87163116Y-45913775D01* X87193948Y-45937772D01* X87241031Y-45975789D01* X87277421Y-46005173D01* X87277422Y-46005173D01* X87277424Y-46005175D01* X87280165Y-46006706D01* X87280240Y-46006748D01* X87295934Y-46017152D01* X87295979Y-46017187D01* X87295991Y-46017195D01* X87352799Y-46047937D01* X87390346Y-46068256D01* X87486740Y-46122105D01* X87486745Y-46122106D01* X87486749Y-46122109D01* X87489140Y-46123190D01* X87496477Y-46126448D01* X87496575Y-46126226D01* X87501262Y-46128281D01* X87501273Y-46128287D01* X87605740Y-46164151D01* X87712806Y-46201980D01* X87713367Y-46202076D01* X87718109Y-46203081D01* X87722043Y-46204078D01* X87722049Y-46204080D01* X87834095Y-46222777D01* X87949110Y-46242499D01* X87949119Y-46242500D01* X88185707Y-46242500D01* X88185712Y-46242500D01* X88218648Y-46237003D01* X88242475Y-46233028D01* X88247413Y-46232406D01* X88300941Y-46227851D01* X88307887Y-46227260D01* X88307888Y-46227259D01* X88307898Y-46227259D01* X88360297Y-46213614D01* X88365668Y-46212469D01* X88415951Y-46204080D01* X88473502Y-46184322D01* X88477975Y-46182973D01* X88539924Y-46166844D01* X88586259Y-46145898D01* X88591633Y-46143767D01* X88636727Y-46128287D01* X88693132Y-46097761D01* X88697054Y-46095816D01* X88758402Y-46068086D01* X88797795Y-46041459D01* X88802979Y-46038314D01* X88842008Y-46017195D01* X88842012Y-46017193D01* X88842013Y-46017192D01* X88842017Y-46017190D01* X88895228Y-45975772D01* X88898561Y-45973353D01* X88957047Y-45933825D01* X88989001Y-45903198D01* X88993789Y-45899058D01* X89026220Y-45873818D01* X89074119Y-45821784D01* X89076794Y-45819056D01* X89130144Y-45767925D01* X89154497Y-45734996D01* X89158727Y-45729877D01* X89179878Y-45706902D01* X89184314Y-45702083D01* X89224785Y-45640135D01* X89226835Y-45637189D01* X89227834Y-45635837D01* X89272715Y-45575157D01* X89289676Y-45541514D01* X89293114Y-45535549D01* X89311984Y-45506669D01* X89343042Y-45435861D01* X89344413Y-45432950D01* X89380657Y-45361067D01* X89390721Y-45328200D01* X89393221Y-45321466D01* X89405749Y-45292907D01* X89425535Y-45214770D01* X89426334Y-45211909D01* X89450864Y-45131815D01* X89454810Y-45100994D01* X89456198Y-45093684D01* X89463051Y-45066626D01* X89470090Y-44981672D01* X89481318Y-44893995D01* X89480139Y-44866249D01* X89480294Y-44858525D01* X89482327Y-44834000D01* X89477355Y-44774004D01* X89475028Y-44745916D01* X89471144Y-44654460D01* X89471143Y-44654457D01* X89471143Y-44654449D01* X89465987Y-44630530D01* X89464808Y-44622586D01* X89463051Y-44601379D01* X89463051Y-44601374D01* X89440582Y-44512646D01* X89420630Y-44420068D01* X89412735Y-44400424D01* X89410167Y-44392544D01* X89405749Y-44375093D01* X89367714Y-44288383D01* X89331233Y-44197596D01* X89321867Y-44182386D01* X89317882Y-44174778D01* X89317102Y-44173000D01* X89311984Y-44161331D01* X89258475Y-44079429D01* X89205524Y-43993431D01* X89205518Y-43993424D01* X89205515Y-43993420D01* X89198839Y-43985834D01* X89188118Y-43971739D01* X89184315Y-43965919D01* X89184314Y-43965917D01* X89115920Y-43891622D01* X89047119Y-43813449D01* X89047118Y-43813448D01* X89047114Y-43813444D01* X89041929Y-43809258D01* X89028597Y-43796765D01* X89026220Y-43794182D01* X88944051Y-43730227D01* X88860576Y-43662825D01* X88860574Y-43662823D01* X88860568Y-43662819D01* X88857750Y-43661245D01* X88842070Y-43650851D01* X88842020Y-43650812D01* X88842018Y-43650811D01* X88842017Y-43650810D01* X88747653Y-43599743D01* X88694822Y-43570230D01* X88651259Y-43545894D01* X88648999Y-43544873D01* X88641519Y-43541551D01* X88641422Y-43541773D01* X88636725Y-43539712D01* X88532259Y-43503848D01* X88425197Y-43466021D01* X88425196Y-43466020D01* X88425194Y-43466020D01* X88425192Y-43466019D01* X88425183Y-43466017D01* X88424633Y-43465923D01* X88419913Y-43464922D01* X88415966Y-43463923D01* X88415953Y-43463920D01* X88415951Y-43463920D01* X88303904Y-43445222D01* X88188890Y-43425500D01* X88188881Y-43425500D01* X88185712Y-43425500D01* X87952288Y-43425500D01* X87952287Y-43425500D01* X87895529Y-43434970D01* X87890587Y-43435592D01* X87856830Y-43438465D01* X87830100Y-43440741D01* X87830097Y-43440741D01* X87777733Y-43454376D01* X87772313Y-43455532D01* X87722049Y-43463919D01* X87664512Y-43483671D01* X87660005Y-43485029D01* X87614895Y-43496776D01* X87598076Y-43501156D01* X87598073Y-43501157D01* X87598070Y-43501158D01* X87551758Y-43522092D01* X87546359Y-43524233D01* X87531763Y-43529244D01* X87501273Y-43539712D01* X87444879Y-43570230D01* X87440910Y-43572198D01* X87379597Y-43599914D01* X87379595Y-43599915D01* X87340209Y-43626535D01* X87335002Y-43629693D01* X87323438Y-43635951D01* X87295978Y-43650812D01* X87242780Y-43692218D01* X87239425Y-43694653D01* X87209349Y-43714981D01* X87180951Y-43734176D01* X87180948Y-43734179D01* X87149012Y-43764786D01* X87144193Y-43768952D01* X87111781Y-43794181D01* X87111780Y-43794182D01* X87063898Y-43846193D01* X87061184Y-43848962D01* X87007857Y-43900073D01* X86983503Y-43932999D01* X86979270Y-43938123D01* X86953684Y-43965918D01* X86953681Y-43965922D01* X86913222Y-44027850D01* X86911166Y-44030806D01* X86865287Y-44092839D01* X86865286Y-44092840D01* X86848333Y-44126463D01* X86844875Y-44132463D01* X86826015Y-44161332D01* X86794978Y-44232089D01* X86793562Y-44235096D01* X86757342Y-44306933D01* X86757341Y-44306934D01* X86747280Y-44339786D01* X86744775Y-44346537D01* X86732249Y-44375094D01* X86732249Y-44375095D01* X86712469Y-44453203D01* X86711649Y-44456137D01* X86687137Y-44536178D01* X86687135Y-44536190D01* X86683191Y-44566986D01* X86681795Y-44574335D01* X86674950Y-44601367D01* X86674948Y-44601379D01* X86667909Y-44686327D01* X86656682Y-44774003D01* X86656681Y-44774004D01* X86657859Y-44801731D01* X86657703Y-44809485D01* X86655673Y-44833995D01* X86655673Y-44834000D01* X84032327Y-44834000D01* X84027355Y-44774004D01* X84025028Y-44745916D01* X84021144Y-44654460D01* X84021143Y-44654457D01* X84021143Y-44654449D01* X84015987Y-44630530D01* X84014808Y-44622586D01* X84013051Y-44601379D01* X84013051Y-44601374D01* X83990582Y-44512646D01* X83970630Y-44420068D01* X83962735Y-44400424D01* X83960167Y-44392544D01* X83955749Y-44375093D01* X83917714Y-44288383D01* X83881233Y-44197596D01* X83871867Y-44182386D01* X83867882Y-44174778D01* X83867102Y-44173000D01* X83861984Y-44161331D01* X83808475Y-44079429D01* X83755524Y-43993431D01* X83755518Y-43993424D01* X83755515Y-43993420D01* X83748839Y-43985834D01* X83738118Y-43971739D01* X83734315Y-43965919D01* X83734314Y-43965917D01* X83665920Y-43891622D01* X83597119Y-43813449D01* X83597118Y-43813448D01* X83597114Y-43813444D01* X83591929Y-43809258D01* X83578597Y-43796765D01* X83576220Y-43794182D01* X83494051Y-43730227D01* X83410576Y-43662825D01* X83410574Y-43662823D01* X83410568Y-43662819D01* X83407750Y-43661245D01* X83392070Y-43650851D01* X83392020Y-43650812D01* X83392018Y-43650811D01* X83392017Y-43650810D01* X83297653Y-43599743D01* X83244822Y-43570230D01* X83201259Y-43545894D01* X83198999Y-43544873D01* X83191519Y-43541551D01* X83191422Y-43541773D01* X83186725Y-43539712D01* X83082259Y-43503848D01* X82975197Y-43466021D01* X82975196Y-43466020D01* X82975194Y-43466020D01* X82975192Y-43466019D01* X82975183Y-43466017D01* X82974633Y-43465923D01* X82969913Y-43464922D01* X82965966Y-43463923D01* X82965953Y-43463920D01* X82965951Y-43463920D01* X82853904Y-43445222D01* X82738890Y-43425500D01* X82738881Y-43425500D01* X82735712Y-43425500D01* X82502288Y-43425500D01* X82502287Y-43425500D01* X82445529Y-43434970D01* X82440587Y-43435592D01* X82406830Y-43438465D01* X82380100Y-43440741D01* X82380097Y-43440741D01* X82327733Y-43454376D01* X82322313Y-43455532D01* X82272049Y-43463919D01* X82214512Y-43483671D01* X82210005Y-43485029D01* X82164895Y-43496776D01* X82148076Y-43501156D01* X82148073Y-43501157D01* X82148070Y-43501158D01* X82101758Y-43522092D01* X82096359Y-43524233D01* X82081763Y-43529244D01* X82051273Y-43539712D01* X81994879Y-43570230D01* X81990910Y-43572198D01* X81929597Y-43599914D01* X81929595Y-43599915D01* X81890209Y-43626535D01* X81885002Y-43629693D01* X81873438Y-43635951D01* X81845978Y-43650812D01* X81792780Y-43692218D01* X81789425Y-43694653D01* X81759349Y-43714981D01* X81730951Y-43734176D01* X81730948Y-43734179D01* X81699012Y-43764786D01* X81694193Y-43768952D01* X81661781Y-43794181D01* X81661780Y-43794182D01* X81613898Y-43846193D01* X81611184Y-43848962D01* X81557857Y-43900073D01* X81533503Y-43932999D01* X81529270Y-43938123D01* X81503684Y-43965918D01* X81503681Y-43965922D01* X81463222Y-44027850D01* X81461166Y-44030806D01* X81415287Y-44092839D01* X81415286Y-44092840D01* X81398333Y-44126463D01* X81394875Y-44132463D01* X81376015Y-44161332D01* X81344978Y-44232089D01* X81343562Y-44235096D01* X81307342Y-44306933D01* X81307341Y-44306934D01* X81297280Y-44339786D01* X81294775Y-44346537D01* X81282249Y-44375094D01* X81282249Y-44375095D01* X81262469Y-44453203D01* X81261649Y-44456137D01* X81237137Y-44536178D01* X81237135Y-44536190D01* X81233191Y-44566986D01* X81231795Y-44574335D01* X81224950Y-44601367D01* X81224948Y-44601379D01* X81217909Y-44686327D01* X81206682Y-44774003D01* X81206681Y-44774004D01* X81207859Y-44801731D01* X81207703Y-44809485D01* X81205673Y-44833995D01* X81205673Y-44834000D01* X77806384Y-44834000D01* X77817156Y-44704005D01* X77817156Y-44703994D01* X77798565Y-44479640D01* X77798563Y-44479628D01* X77776507Y-44392530D01* X77743296Y-44261384D01* X77652860Y-44055209D01* X77635973Y-44029362D01* X77529723Y-43866734D01* X77529715Y-43866723D01* X77377243Y-43701097D01* X77377238Y-43701092D01* X77199577Y-43562812D01* X77199572Y-43562808D01* X77001580Y-43455661D01* X77001577Y-43455659D01* X77001574Y-43455658D01* X77001571Y-43455657D01* X77001569Y-43455656D01* X76788637Y-43382556D01* X76566569Y-43345500D01* X76341431Y-43345500D01* X76119362Y-43382556D01* X75906430Y-43455656D01* X75906419Y-43455661D01* X75708427Y-43562808D01* X75708422Y-43562812D01* X75530761Y-43701092D01* X75530756Y-43701097D01* X75378284Y-43866723D01* X75378276Y-43866734D01* X75255140Y-44055207D01* X75164703Y-44261385D01* X75109436Y-44479628D01* X75109434Y-44479640D01* X75090844Y-44703994D01* X75090844Y-44704005D01* X75109434Y-44928359D01* X75109436Y-44928371D01* X75164703Y-45146614D01* X75255140Y-45352792D01* X75378276Y-45541265D01* X75378284Y-45541276D01* X75530756Y-45706902D01* X75530761Y-45706907D01* X75566864Y-45735007D01* X75708424Y-45845189D01* X75708429Y-45845191D01* X75708431Y-45845193D01* X75744930Y-45864946D01* X75794520Y-45914165D01* X75809628Y-45982382D01* X75785457Y-46047937D01* X75744930Y-46083054D01* X75708431Y-46102806D01* X75708422Y-46102812D01* X75530761Y-46241092D01* X75530756Y-46241097D01* X75378284Y-46406723D01* X75378276Y-46406734D01* X75255140Y-46595207D01* X75164703Y-46801385D01* X75109436Y-47019628D01* X75109434Y-47019640D01* X75090844Y-47243994D01* X75090844Y-47244005D01* X68072000Y-47244005D01* X68072000Y-41234624D01* X68091685Y-41167585D01* X68144489Y-41121830D01* X68196000Y-41110624D01* X98681288Y-41110624D01* X98687538Y-41110624D01* X98691593Y-41110757D01* G37* %TD.AperFunction*% %TD*% M02* ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-B_Mask.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-09-14T16:33:58+02:00*% %TF.ProjectId,DeskHop_Rev1,4465736b-486f-4705-9f52-6576312e6b69,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Soldermask,Bot*% %TF.FilePolarity,Negative*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-09-14 16:33:58* %MOMM*% %LPD*% G01* G04 APERTURE LIST* %ADD10O,1.800000X1.800000*% %ADD11O,1.500000X1.500000*% %ADD12O,1.700000X1.700000*% %ADD13R,1.700000X1.700000*% %ADD14R,1.600000X1.500000*% %ADD15C,1.600000*% %ADD16C,3.000000*% %ADD17C,3.100000*% %ADD18C,5.400000*% G04 APERTURE END LIST* D10* %TO.C,U1*% X82619000Y-44834000D03* D11* X82919000Y-47864000D03* X87769000Y-47864000D03* D10* X88069000Y-44834000D03* D12* X76454000Y-44704000D03* X76454000Y-47244000D03* D13* X76454000Y-49784000D03* D12* X76454000Y-52324000D03* X76454000Y-54864000D03* X76454000Y-57404000D03* X76454000Y-59944000D03* D13* X76454000Y-62484000D03* D12* X76454000Y-65024000D03* X76454000Y-67564000D03* X76454000Y-70104000D03* X76454000Y-72644000D03* D13* X76454000Y-75184000D03* D12* X76454000Y-77724000D03* X76454000Y-80264000D03* X76454000Y-82804000D03* X76454000Y-85344000D03* D13* X76454000Y-87884000D03* D12* X76454000Y-90424000D03* X76454000Y-92964000D03* X94234000Y-92964000D03* X94234000Y-90424000D03* D13* X94234000Y-87884000D03* D12* X94234000Y-85344000D03* X94234000Y-82804000D03* X94234000Y-80264000D03* X94234000Y-77724000D03* D13* X94234000Y-75184000D03* D12* X94234000Y-72644000D03* X94234000Y-70104000D03* X94234000Y-67564000D03* X94234000Y-65024000D03* D13* X94234000Y-62484000D03* D12* X94234000Y-59944000D03* X94234000Y-57404000D03* X94234000Y-54864000D03* X94234000Y-52324000D03* D13* X94234000Y-49784000D03* D12* X94234000Y-47244000D03* X94234000Y-44704000D03* X82804000Y-92734000D03* D13* X85344000Y-92734000D03* D12* X87884000Y-92734000D03* %TD*% D10* %TO.C,U2*% X46160523Y-44818249D03* D11* X46460523Y-47848249D03* X51310523Y-47848249D03* D10* X51610523Y-44818249D03* D12* X39995523Y-44688249D03* X39995523Y-47228249D03* D13* X39995523Y-49768249D03* D12* X39995523Y-52308249D03* X39995523Y-54848249D03* X39995523Y-57388249D03* X39995523Y-59928249D03* D13* X39995523Y-62468249D03* D12* X39995523Y-65008249D03* X39995523Y-67548249D03* X39995523Y-70088249D03* X39995523Y-72628249D03* D13* X39995523Y-75168249D03* D12* X39995523Y-77708249D03* X39995523Y-80248249D03* X39995523Y-82788249D03* X39995523Y-85328249D03* D13* X39995523Y-87868249D03* D12* X39995523Y-90408249D03* X39995523Y-92948249D03* X57775523Y-92948249D03* X57775523Y-90408249D03* D13* X57775523Y-87868249D03* D12* X57775523Y-85328249D03* X57775523Y-82788249D03* X57775523Y-80248249D03* X57775523Y-77708249D03* D13* X57775523Y-75168249D03* D12* X57775523Y-72628249D03* X57775523Y-70088249D03* X57775523Y-67548249D03* X57775523Y-65008249D03* D13* X57775523Y-62468249D03* D12* X57775523Y-59928249D03* X57775523Y-57388249D03* X57775523Y-54848249D03* X57775523Y-52308249D03* D13* X57775523Y-49768249D03* D12* X57775523Y-47228249D03* X57775523Y-44688249D03* X46345523Y-92718249D03* D13* X48885523Y-92718249D03* D12* X51425523Y-92718249D03* %TD*% D14* %TO.C,J4*% X45776000Y-101574000D03* D15* X48276000Y-101574000D03* X50276000Y-101574000D03* X52776000Y-101574000D03* D16* X42706000Y-104284000D03* X55846000Y-104284000D03* %TD*% D13* %TO.C,J3*% X95667537Y-99795757D03* D12* X95667537Y-102335757D03* X95667537Y-104875757D03* %TD*% D17* %TO.C,H2*% X96774000Y-111506000D03* D18* X96774000Y-111506000D03* %TD*% D14* %TO.C,J1*% X81082000Y-101574000D03* D15* X83582000Y-101574000D03* X85582000Y-101574000D03* X88082000Y-101574000D03* D16* X78012000Y-104284000D03* X91152000Y-104284000D03* %TD*% D17* %TO.C,H1*% X37846000Y-111506000D03* D18* X37846000Y-111506000D03* %TD*% D13* %TO.C,J2*% X60731042Y-99717876D03* D12* X60731042Y-102257876D03* X60731042Y-104797876D03* %TD*% D17* %TO.C,H3*% X67315520Y-45178990D03* D18* X67315520Y-45178990D03* %TD*% M02* ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-B_Silkscreen.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-09-14T16:33:58+02:00*% %TF.ProjectId,DeskHop_Rev1,4465736b-486f-4705-9f52-6576312e6b69,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Legend,Bot*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-09-14 16:33:58* %MOMM*% %LPD*% G01* G04 APERTURE LIST* %ADD10C,0.120000*% %ADD11C,0.000000*% %ADD12C,0.200000*% %ADD13C,0.400000*% G04 APERTURE END LIST* D10* X67310000Y-48738426D02* X67309441Y-50058426D01* X67309238Y-50538426D02* X67308679Y-51858426D01* X67308476Y-52338426D02* X67307918Y-53658426D01* X67307715Y-54138426D02* X67307156Y-55458425D01* X67306953Y-55938425D02* X67306394Y-57258425D01* X67306191Y-57738425D02* X67305632Y-59058425D01* X67305429Y-59538425D02* X67304870Y-60858425D01* X67304667Y-61338425D02* X67304109Y-62658425D01* X67303905Y-63138425D02* X67303347Y-64458425D01* X67303144Y-64938425D02* X67302585Y-66258424D01* X67302382Y-66738424D02* X67301823Y-68058424D01* X67301620Y-68538424D02* X67301061Y-69858424D01* X67300858Y-70338424D02* X67300299Y-71658424D01* X67300096Y-72138424D02* X67299538Y-73458424D01* X67299334Y-73938424D02* X67298776Y-75258424D01* X67298573Y-75738424D02* X67298014Y-77058423D01* X67297811Y-77538423D02* X67297252Y-78858423D01* X67297049Y-79338423D02* X67296490Y-80658423D01* X67296287Y-81138423D02* X67295728Y-82458423D01* X67295525Y-82938423D02* X67294967Y-84258423D01* X67294763Y-84738423D02* X67294205Y-86058423D01* X67294002Y-86538423D02* X67293443Y-87858422D01* X67293240Y-88338422D02* X67292681Y-89658422D01* X67292478Y-90138422D02* X67291919Y-91458422D01* X67291716Y-91938422D02* X67291157Y-93258422D01* X67290954Y-93738422D02* X67290396Y-95058422D01* X67290192Y-95538422D02* X67289634Y-96858422D01* X67289431Y-97338422D02* X67288872Y-98658422D01* X67288669Y-99138421D02* X67288110Y-100458421D01* X67287907Y-100938421D02* X67287348Y-102258421D01* X67287145Y-102738421D02* X67286586Y-104058421D01* X67286383Y-104538421D02* X67285825Y-105858421D01* X67285621Y-106338421D02* X67285063Y-107658421D01* X67284860Y-108138421D02* X67284301Y-109458421D01* X67284098Y-109938421D02* X67283539Y-111258420D01* X67283336Y-111738420D02* X67282777Y-113058420D01* X67282574Y-113538420D02* X67282015Y-114858420D01* X67281812Y-115338420D02* X67281783Y-115407659D01* D11* G36* X86028315Y-84071099D02* G01* X86056698Y-84073266D01* X86084668Y-84076829D01* X86112191Y-84081752D01* X86139230Y-84088001D01* X86165751Y-84095539D01* X86191720Y-84104331D01* X86217100Y-84114344D01* X86241856Y-84125541D01* X86265955Y-84137888D01* X86289360Y-84151349D01* X86312036Y-84165890D01* X86333949Y-84181475D01* X86355063Y-84198069D01* X86375343Y-84215637D01* X86394754Y-84234145D01* X86413262Y-84253556D01* X86430830Y-84273837D01* X86447424Y-84294951D01* X86463009Y-84316863D01* X86477550Y-84339540D01* X86491011Y-84362945D01* X86503358Y-84387043D01* X86514555Y-84411800D01* X86524568Y-84437180D01* X86533361Y-84463148D01* X86540899Y-84489670D01* X86547147Y-84516709D01* X86552070Y-84544232D01* X86555633Y-84572202D01* X86557801Y-84600585D01* X86558539Y-84629345D01* X86558539Y-85445172D01* X86557888Y-85472926D01* X86555873Y-85500493D01* X86552512Y-85527828D01* X86547825Y-85554884D01* X86541830Y-85581615D01* X86534547Y-85607975D01* X86525995Y-85633919D01* X86516191Y-85659400D01* X86505156Y-85684372D01* X86492909Y-85708789D01* X86479468Y-85732606D01* X86464852Y-85755777D01* X86449081Y-85778255D01* X86432173Y-85799994D01* X86414148Y-85820949D01* X86395023Y-85841073D01* X86374925Y-85860225D01* X86353995Y-85878279D01* X86332280Y-85895216D01* X86309825Y-85911018D01* X86286678Y-85925665D01* X86262884Y-85939138D01* X86238490Y-85951419D01* X86213541Y-85962488D01* X86188085Y-85972326D01* X86162167Y-85980914D01* X86135833Y-85988233D01* X86109131Y-85994264D01* X86082106Y-85998988D01* X86054804Y-86002386D01* X86027271Y-86004438D01* X85999555Y-86005127D01* X85971802Y-86004428D01* X85944238Y-86002365D01* X85916909Y-85998957D01* X85889861Y-85994223D01* X85863141Y-85988182D01* X85836793Y-85980853D01* X85810864Y-85972255D01* X85785400Y-85962408D01* X85760447Y-85951329D01* X85736051Y-85939040D01* X85712257Y-85925558D01* X85689112Y-85910902D01* X85666661Y-85895092D01* X85644951Y-85878147D01* X85624028Y-85860085D01* X85603937Y-85840927D01* X85584821Y-85820796D01* X85566803Y-85799835D01* X85549904Y-85778089D01* X85534141Y-85755606D01* X85519534Y-85732430D01* X85506102Y-85708608D01* X85493864Y-85684186D01* X85482838Y-85659210D01* X85473045Y-85633725D01* X85464502Y-85607778D01* X85457228Y-85581415D01* X85451243Y-85554682D01* X85446566Y-85527624D01* X85443216Y-85500289D01* X85441211Y-85472720D01* X85440570Y-85444966D01* X85440570Y-84629332D01* X85441309Y-84600571D01* X85443478Y-84572188D01* X85447042Y-84544218D01* X85451966Y-84516696D01* X85458215Y-84489656D01* X85465754Y-84463135D01* X85474547Y-84437167D01* X85484560Y-84411787D01* X85495758Y-84387031D01* X85508106Y-84362932D01* X85521568Y-84339528D01* X85536109Y-84316852D01* X85551694Y-84294939D01* X85568289Y-84273825D01* X85585858Y-84253546D01* X85604365Y-84234135D01* X85623777Y-84215628D01* X85644057Y-84198060D01* X85665171Y-84181466D01* X85687084Y-84165882D01* X85709760Y-84151341D01* X85733164Y-84137881D01* X85757262Y-84125535D01* X85782019Y-84114338D01* X85807398Y-84104326D01* X85833365Y-84095534D01* X85859886Y-84087997D01* X85886924Y-84081749D01* X85914445Y-84076827D01* X85942414Y-84073265D01* X85970796Y-84071098D01* X85999555Y-84070361D01* X86028315Y-84071099D01* G37* G36* X48882416Y-62074785D02* G01* X48889291Y-62075364D01* X48896282Y-62076316D01* X48903371Y-62077628D01* X48910543Y-62079289D01* X48917782Y-62081288D01* X48925072Y-62083612D01* X48932396Y-62086251D01* X48947082Y-62092424D01* X48961714Y-62099716D01* X48976161Y-62108033D01* X48990295Y-62117283D01* X49003987Y-62127372D01* X49017109Y-62138209D01* X49029531Y-62149701D01* X49041125Y-62161755D01* X49051762Y-62174278D01* X49056681Y-62180687D01* X49061313Y-62187178D01* X49065641Y-62193740D01* X49069649Y-62200362D01* X49073321Y-62207032D01* X49076641Y-62213738D01* X49083986Y-62246795D01* X49096140Y-62317703D01* X49132124Y-62555281D01* X49179096Y-62890895D01* X49231562Y-63288967D01* X49282657Y-63683352D01* X49326301Y-64008953D01* X49358164Y-64231773D01* X49368325Y-64294017D01* X49371726Y-64310987D01* X49373917Y-64317816D01* X49407813Y-64305686D01* X49499066Y-64265044D01* X49828719Y-64110677D01* X50902141Y-63596779D01* X51297470Y-63405451D01* X51626414Y-63247329D01* X51894026Y-63120041D01* X52105359Y-63021215D01* X52265468Y-62948479D01* X52379405Y-62899461D01* X52420638Y-62883106D01* X52452224Y-62871790D01* X52474793Y-62865218D01* X52488979Y-62863094D01* X52496447Y-62863241D01* X52503932Y-62863680D01* X52511424Y-62864407D01* X52518915Y-62865416D01* X52526397Y-62866703D01* X52533862Y-62868263D01* X52541300Y-62870093D01* X52548704Y-62872186D01* X52556065Y-62874538D01* X52563375Y-62877145D01* X52577807Y-62883106D01* X52591932Y-62890030D01* X52605683Y-62897881D01* X52618992Y-62906620D01* X52631793Y-62916213D01* X52644018Y-62926621D01* X52649893Y-62932119D01* X52655599Y-62937807D01* X52661127Y-62943680D01* X52666468Y-62949734D01* X52671616Y-62955964D01* X52676560Y-62962365D01* X52681292Y-62968933D01* X52685805Y-62975664D01* X52690089Y-62982551D01* X52694137Y-62989592D01* X52770874Y-63142658D01* X52887256Y-63383975D01* X53177720Y-64000519D01* X53443066Y-64577533D01* X53528050Y-64769438D01* X53560830Y-64853326D01* X53561467Y-64862624D01* X53561791Y-64871575D01* X53561782Y-64880231D01* X53561424Y-64888639D01* X53560697Y-64896849D01* X53559583Y-64904911D01* X53558064Y-64912875D01* X53556122Y-64920789D01* X53553738Y-64928703D01* X53550894Y-64936667D01* X53547573Y-64944730D01* X53543754Y-64952941D01* X53539421Y-64961350D01* X53534555Y-64970006D01* X53529138Y-64978958D01* X53523151Y-64988257D01* X53500923Y-65012708D01* X53455241Y-65045510D01* X53375214Y-65092246D01* X53249950Y-65158501D01* X52820137Y-65371900D01* X52078662Y-65730376D01* X50550439Y-66472498D01* X50420647Y-66535748D01* X50889582Y-67037523D01* X51231244Y-67394312D01* X51368672Y-67538212D01* X51485959Y-67661514D01* X51584699Y-67766013D01* X51627612Y-67811774D01* X51666486Y-67853509D01* X51701521Y-67891442D01* X51732916Y-67925797D01* X51760869Y-67956801D01* X51785582Y-67984676D01* X51807252Y-68009649D01* X51826080Y-68031943D01* X51842264Y-68051784D01* X51856005Y-68069395D01* X51867500Y-68085003D01* X51876950Y-68098830D01* X51884554Y-68111103D01* X51887726Y-68116726D01* X51890511Y-68122045D01* X51892935Y-68127088D01* X51895021Y-68131882D01* X51896796Y-68136456D01* X51898283Y-68140838D01* X51899508Y-68145055D01* X51900496Y-68149137D01* X51901860Y-68157005D01* X51902573Y-68164666D01* X51902836Y-68172345D01* X51902808Y-68188654D01* X51902661Y-68197744D01* X51902225Y-68206822D01* X51901503Y-68215874D01* X51900501Y-68224890D01* X51899223Y-68233856D01* X51897674Y-68242761D01* X51895858Y-68251591D01* X51893779Y-68260335D01* X51891443Y-68268980D01* X51888854Y-68277514D01* X51886017Y-68285924D01* X51882936Y-68294199D01* X51879616Y-68302325D01* X51876061Y-68310291D01* X51872276Y-68318084D01* X51868266Y-68325691D01* X51864035Y-68333101D01* X51859587Y-68340301D01* X51854928Y-68347278D01* X51850063Y-68354021D01* X51844995Y-68360517D01* X51839729Y-68366753D01* X51834270Y-68372718D01* X51828622Y-68378398D01* X51822790Y-68383782D01* X51816779Y-68388858D01* X51810593Y-68393612D01* X51804237Y-68398032D01* X51797716Y-68402107D01* X51791034Y-68405823D01* X51784195Y-68409169D01* X51777204Y-68412132D01* X50505889Y-68451597D01* X47789696Y-68503317D01* X45077428Y-68543177D01* X43817886Y-68547063D01* X43812251Y-68543658D01* X43806364Y-68539791D01* X43800270Y-68535490D01* X43794010Y-68530789D01* X43787627Y-68525717D01* X43781165Y-68520305D01* X43774667Y-68514584D01* X43768174Y-68508585D01* X43761730Y-68502339D01* X43755378Y-68495878D01* X43749160Y-68489231D01* X43743120Y-68482429D01* X43737300Y-68475505D01* X43731742Y-68468487D01* X43726491Y-68461409D01* X43721589Y-68454299D01* X43721577Y-68454297D01* X43712698Y-68440857D01* X43704891Y-68427416D01* X43698152Y-68413976D01* X43692473Y-68400536D01* X43687850Y-68387095D01* X43684275Y-68373655D01* X43681743Y-68360214D01* X43680246Y-68346774D01* X43679780Y-68333334D01* X43680338Y-68319893D01* X43681913Y-68306453D01* X43684500Y-68293012D01* X43688092Y-68279572D01* X43692683Y-68266132D01* X43698267Y-68252691D01* X43704837Y-68239251D01* X43865379Y-68034812D01* X44285772Y-67517686D01* X45651752Y-65856875D01* X47176311Y-64006844D01* X48138775Y-62833577D01* X48261585Y-62683427D01* X48374681Y-62547112D01* X48476590Y-62426215D01* X48565841Y-62322316D01* X48640960Y-62236996D01* X48700477Y-62171837D01* X48723924Y-62147311D01* X48742918Y-62128418D01* X48757276Y-62115356D01* X48766813Y-62108321D01* X48773279Y-62105162D01* X48780075Y-62102028D01* X48794416Y-62095932D01* X48809346Y-62090233D01* X48816878Y-62087594D01* X48824374Y-62085128D01* X48831772Y-62082859D01* X48839011Y-62080813D01* X48846029Y-62079014D01* X48852766Y-62077487D01* X48859160Y-62076256D01* X48865149Y-62075346D01* X48870674Y-62074782D01* X48875671Y-62074589D01* X48882416Y-62074785D01* G37* G36* X48003369Y-52807038D02* G01* X48030933Y-52809101D01* X48058262Y-52812509D01* X48085310Y-52817243D01* X48112030Y-52823284D01* X48138378Y-52830613D01* X48164307Y-52839211D01* X48189771Y-52849058D01* X48214724Y-52860137D01* X48239120Y-52872426D01* X48262914Y-52885908D01* X48286059Y-52900564D01* X48308510Y-52916374D01* X48330220Y-52933319D01* X48351143Y-52951381D01* X48371234Y-52970539D01* X48390350Y-52990670D01* X48408368Y-53011631D01* X48425267Y-53033377D01* X48441030Y-53055860D01* X48455637Y-53079036D01* X48469069Y-53102858D01* X48481307Y-53127280D01* X48492333Y-53152256D01* X48502126Y-53177741D01* X48510669Y-53203688D01* X48517943Y-53230051D01* X48523928Y-53256784D01* X48528605Y-53283842D01* X48531955Y-53311177D01* X48533960Y-53338746D01* X48534601Y-53366500D01* X48534601Y-54182134D01* X48533862Y-54210895D01* X48531693Y-54239278D01* X48528129Y-54267248D01* X48523205Y-54294770D01* X48516956Y-54321810D01* X48509417Y-54348331D01* X48500624Y-54374299D01* X48490611Y-54399679D01* X48479413Y-54424435D01* X48467065Y-54448534D01* X48453603Y-54471938D01* X48439062Y-54494614D01* X48423477Y-54516527D01* X48406882Y-54537641D01* X48389313Y-54557920D01* X48370806Y-54577331D01* X48351394Y-54595838D01* X48331114Y-54613406D01* X48310000Y-54630000D01* X48288087Y-54645584D01* X48265411Y-54660125D01* X48242007Y-54673585D01* X48217909Y-54685931D01* X48193152Y-54697128D01* X48167773Y-54707140D01* X48141806Y-54715932D01* X48115285Y-54723469D01* X48088247Y-54729717D01* X48060726Y-54734639D01* X48032757Y-54738201D01* X48004375Y-54740368D01* X47975616Y-54741105D01* X47946856Y-54740367D01* X47918473Y-54738200D01* X47890503Y-54734637D01* X47862980Y-54729714D01* X47835941Y-54723465D01* X47809420Y-54715927D01* X47783451Y-54707135D01* X47758071Y-54697122D01* X47733315Y-54685925D01* X47709216Y-54673578D01* X47685811Y-54660117D01* X47663135Y-54645576D01* X47641222Y-54629991D01* X47620108Y-54613397D01* X47599828Y-54595829D01* X47580417Y-54577321D01* X47561909Y-54557910D01* X47544341Y-54537629D01* X47527747Y-54516515D01* X47512162Y-54494603D01* X47497621Y-54471926D01* X47484160Y-54448521D01* X47471813Y-54424423D01* X47460616Y-54399666D01* X47450603Y-54374286D01* X47441810Y-54348318D01* X47434272Y-54321796D01* X47428024Y-54294757D01* X47423101Y-54267234D01* X47419538Y-54239264D01* X47417370Y-54210881D01* X47416632Y-54182121D01* X47416632Y-53366294D01* X47417283Y-53338540D01* X47419298Y-53310973D01* X47422659Y-53283638D01* X47427346Y-53256582D01* X47433341Y-53229851D01* X47440624Y-53203491D01* X47449176Y-53177547D01* X47458980Y-53152066D01* X47470015Y-53127094D01* X47482262Y-53102677D01* X47495703Y-53078860D01* X47510319Y-53055689D01* X47526090Y-53033211D01* X47542998Y-53011472D01* X47561023Y-52990517D01* X47580148Y-52970393D01* X47600246Y-52951241D01* X47621176Y-52933187D01* X47642891Y-52916250D01* X47665346Y-52900448D01* X47688493Y-52885801D01* X47712287Y-52872328D01* X47736681Y-52860047D01* X47761630Y-52848978D01* X47787086Y-52839140D01* X47813004Y-52830552D01* X47839338Y-52823233D01* X47866040Y-52817202D01* X47893065Y-52812478D01* X47920367Y-52809080D01* X47947900Y-52807028D01* X47975616Y-52806339D01* X48003369Y-52807038D01* G37* D10* X66937741Y-48748460D02* X65680288Y-48372564D01* X65269784Y-48124498D02* X64352268Y-47186070D01* X64113515Y-46770080D02* X63766049Y-45504477D01* X63758926Y-45024894D02* X64068655Y-43749530D01* X64294950Y-43326634D02* X65184193Y-42361372D01* X65587149Y-42101225D02* X66832885Y-41688154D01* D11* G36* X82545507Y-82043755D02* G01* X82573890Y-82045923D01* X82601860Y-82049486D01* X82629383Y-82054409D01* X82656422Y-82060658D01* X82682944Y-82068196D01* X82708912Y-82076989D01* X82734292Y-82087001D01* X82759048Y-82098198D01* X82783147Y-82110545D01* X82806552Y-82124006D01* X82829228Y-82138547D01* X82851141Y-82154132D01* X82872255Y-82170726D01* X82892535Y-82188295D01* X82911946Y-82206802D01* X82930454Y-82226213D01* X82948022Y-82246494D01* X82964616Y-82267608D01* X82980201Y-82289520D01* X82994742Y-82312197D01* X83008203Y-82335602D01* X83020550Y-82359700D01* X83031747Y-82384457D01* X83041760Y-82409837D01* X83050553Y-82435805D01* X83058091Y-82462326D01* X83064339Y-82489366D01* X83069262Y-82516888D01* X83072825Y-82544858D01* X83074993Y-82573241D01* X83075731Y-82602002D01* X83075731Y-85807094D01* X83074992Y-85835854D01* X83072824Y-85864237D01* X83069260Y-85892207D01* X83064336Y-85919730D01* X83058087Y-85946769D01* X83050548Y-85973290D01* X83041754Y-85999258D01* X83031741Y-86024638D01* X83020543Y-86049395D01* X83008195Y-86073493D01* X82994734Y-86096897D01* X82980192Y-86119574D01* X82964607Y-86141486D01* X82948012Y-86162600D01* X82930444Y-86182880D01* X82911936Y-86202291D01* X82892525Y-86220798D01* X82872244Y-86238366D01* X82851130Y-86254959D01* X82829218Y-86270544D01* X82806541Y-86285084D01* X82783137Y-86298545D01* X82759039Y-86310891D01* X82734283Y-86322087D01* X82708903Y-86332099D01* X82682936Y-86340891D01* X82656416Y-86348429D01* X82629377Y-86354676D01* X82601856Y-86359598D01* X82573887Y-86363160D01* X82545506Y-86365327D01* X82516747Y-86366064D01* X82487986Y-86365327D01* X82459603Y-86363159D01* X82431632Y-86359596D01* X82404110Y-86354673D01* X82377070Y-86348425D01* X82350549Y-86340887D01* X82324580Y-86332094D01* X82299200Y-86322082D01* X82274443Y-86310885D01* X82250344Y-86298538D01* X82226939Y-86285077D01* X82204263Y-86270537D01* X82182350Y-86254952D01* X82161236Y-86238358D01* X82140955Y-86220789D01* X82121544Y-86202282D01* X82103036Y-86182871D01* X82085468Y-86162591D01* X82068874Y-86141477D01* X82053288Y-86119564D01* X82038748Y-86096887D01* X82025286Y-86073482D01* X82012939Y-86049384D01* X82001742Y-86024627D01* X81991729Y-85999247D01* X81982936Y-85973279D01* X81975398Y-85946757D01* X81969150Y-85919717D01* X81964227Y-85892195D01* X81960663Y-85864224D01* X81958495Y-85835841D01* X81957758Y-85807080D01* X81957758Y-82601993D01* X81958496Y-82573231D01* X81960664Y-82544848D01* X81964228Y-82516878D01* X81969152Y-82489355D01* X81975401Y-82462316D01* X81982939Y-82435794D01* X81991733Y-82409826D01* X82001746Y-82384446D01* X82012944Y-82359689D01* X82025291Y-82335591D01* X82038753Y-82312186D01* X82053294Y-82289510D01* X82068880Y-82267597D01* X82085474Y-82246483D01* X82103043Y-82226203D01* X82121551Y-82206792D01* X82140962Y-82188285D01* X82161243Y-82170717D01* X82182357Y-82154124D01* X82204270Y-82138539D01* X82226947Y-82123999D01* X82250351Y-82110538D01* X82274450Y-82098192D01* X82299206Y-82086995D01* X82324586Y-82076983D01* X82350554Y-82068191D01* X82377075Y-82060654D01* X82404114Y-82054406D01* X82431635Y-82049484D01* X82459605Y-82045921D01* X82487987Y-82043754D01* X82516747Y-82043017D01* X82545507Y-82043755D01* G37* G36* X53228594Y-57235588D02* G01* X53256977Y-57237756D01* X53284947Y-57241319D01* X53312469Y-57246242D01* X53339509Y-57252491D01* X53366030Y-57260029D01* X53391998Y-57268822D01* X53417378Y-57278834D01* X53442135Y-57290031D01* X53466233Y-57302378D01* X53489638Y-57315840D01* X53512315Y-57330380D01* X53534228Y-57345965D01* X53555342Y-57362559D01* X53575622Y-57380128D01* X53595033Y-57398635D01* X53613541Y-57418046D01* X53631109Y-57438327D01* X53647703Y-57459441D01* X53663288Y-57481353D01* X53677829Y-57504030D01* X53691290Y-57527435D01* X53703637Y-57551533D01* X53714834Y-57576290D01* X53724847Y-57601670D01* X53733640Y-57627638D01* X53741178Y-57654159D01* X53747426Y-57681199D01* X53752349Y-57708721D01* X53755912Y-57736691D01* X53758080Y-57765074D01* X53758817Y-57793835D01* X53758817Y-58610650D01* X53758079Y-58639411D01* X53755910Y-58667793D01* X53752346Y-58695764D01* X53747422Y-58723286D01* X53741174Y-58750325D01* X53733635Y-58776846D01* X53724841Y-58802814D01* X53714828Y-58828194D01* X53703630Y-58852950D01* X53691283Y-58877048D01* X53677821Y-58900453D01* X53663280Y-58923129D01* X53647694Y-58945041D01* X53631099Y-58966154D01* X53613531Y-58986434D01* X53595023Y-59005845D01* X53575612Y-59024352D01* X53555331Y-59041920D01* X53534217Y-59058513D01* X53512304Y-59074098D01* X53489628Y-59088638D01* X53466224Y-59102098D01* X53442126Y-59114444D01* X53417369Y-59125641D01* X53391990Y-59135653D01* X53366022Y-59144445D01* X53339502Y-59151982D01* X53312463Y-59158230D01* X53284942Y-59163152D01* X53256973Y-59166714D01* X53228592Y-59168881D01* X53199833Y-59169618D01* X53171072Y-59168881D01* X53142689Y-59166713D01* X53114719Y-59163149D01* X53087197Y-59158226D01* X53060157Y-59151978D01* X53033636Y-59144440D01* X53007668Y-59135647D01* X52982287Y-59125634D01* X52957531Y-59114437D01* X52933432Y-59102090D01* X52910027Y-59088629D01* X52887351Y-59074088D01* X52865438Y-59058503D01* X52844324Y-59041909D01* X52824044Y-59024341D01* X52804632Y-59005834D01* X52786125Y-58986422D01* X52768557Y-58966142D01* X52751962Y-58945028D01* X52736377Y-58923115D01* X52721837Y-58900439D01* X52708375Y-58877034D01* X52696029Y-58852936D01* X52684831Y-58828179D01* X52674819Y-58802799D01* X52666026Y-58776831D01* X52658488Y-58750309D01* X52652240Y-58723270D01* X52647317Y-58695748D01* X52643754Y-58667778D01* X52641586Y-58639395D01* X52640848Y-58610634D01* X52640848Y-57793819D01* X52641587Y-57765058D01* X52643756Y-57736675D01* X52647319Y-57708705D01* X52652243Y-57681183D01* X52658492Y-57654144D01* X52666031Y-57627623D01* X52674825Y-57601655D01* X52684838Y-57576275D01* X52696036Y-57551518D01* X52708383Y-57527420D01* X52721845Y-57504016D01* X52736386Y-57481340D01* X52751972Y-57459428D01* X52768566Y-57438314D01* X52786135Y-57418034D01* X52804643Y-57398624D01* X52824054Y-57380117D01* X52844335Y-57362549D01* X52865449Y-57345955D01* X52887361Y-57330371D01* X52910038Y-57315831D01* X52933442Y-57302370D01* X52957540Y-57290024D01* X52982296Y-57278828D01* X53007676Y-57268816D01* X53033643Y-57260024D01* X53060164Y-57252487D01* X53087202Y-57246239D01* X53114723Y-57241317D01* X53142692Y-57237754D01* X53171074Y-57235587D01* X53199833Y-57234850D01* X53228594Y-57235588D01* G37* G36* X80804099Y-79642585D02* G01* X80832482Y-79644753D01* X80860452Y-79648317D01* X80887974Y-79653240D01* X80915014Y-79659488D01* X80941535Y-79667026D01* X80967503Y-79675819D01* X80992884Y-79685832D01* X81017640Y-79697029D01* X81041739Y-79709376D01* X81065144Y-79722837D01* X81087820Y-79737378D01* X81109733Y-79752963D01* X81130847Y-79769557D01* X81151127Y-79787125D01* X81170539Y-79805632D01* X81189046Y-79825044D01* X81206614Y-79845324D01* X81223209Y-79866438D01* X81238794Y-79888351D01* X81253334Y-79911027D01* X81266796Y-79934432D01* X81279142Y-79958530D01* X81290340Y-79983287D01* X81300352Y-80008667D01* X81309145Y-80034635D01* X81316683Y-80061157D01* X81322931Y-80088196D01* X81327854Y-80115718D01* X81331417Y-80143688D01* X81333585Y-80172071D01* X81334323Y-80200832D01* X81334323Y-81017647D01* X81333584Y-81046408D01* X81331415Y-81074791D01* X81327852Y-81102761D01* X81322928Y-81130283D01* X81316679Y-81157322D01* X81309140Y-81183843D01* X81300346Y-81209811D01* X81290333Y-81235191D01* X81279135Y-81259948D01* X81266788Y-81284046D01* X81253326Y-81307450D01* X81238785Y-81330126D01* X81223199Y-81352038D01* X81206605Y-81373152D01* X81189036Y-81393432D01* X81170528Y-81412842D01* X81151117Y-81431349D01* X81130836Y-81448917D01* X81109722Y-81465511D01* X81087810Y-81481095D01* X81065133Y-81495635D01* X81041729Y-81509096D01* X81017631Y-81521442D01* X80992875Y-81532638D01* X80967495Y-81542650D01* X80941528Y-81551442D01* X80915007Y-81558979D01* X80887969Y-81565227D01* X80860448Y-81570149D01* X80832479Y-81573712D01* X80804097Y-81575879D01* X80775338Y-81576616D01* X80746577Y-81575878D01* X80718194Y-81573710D01* X80690224Y-81570147D01* X80662702Y-81565224D01* X80635662Y-81558975D01* X80609141Y-81551437D01* X80583173Y-81542644D01* X80557793Y-81532632D01* X80533036Y-81521435D01* X80508938Y-81509088D01* X80485533Y-81495626D01* X80462856Y-81481086D01* X80440943Y-81465501D01* X80419829Y-81448907D01* X80399549Y-81431338D01* X80380138Y-81412831D01* X80361630Y-81393420D01* X80344062Y-81373139D01* X80327468Y-81352025D01* X80311883Y-81330113D01* X80297342Y-81307436D01* X80283881Y-81284031D01* X80271534Y-81259933D01* X80260337Y-81235176D01* X80250324Y-81209796D01* X80241531Y-81183828D01* X80233993Y-81157307D01* X80227745Y-81130267D01* X80222822Y-81102745D01* X80219259Y-81074775D01* X80217091Y-81046392D01* X80216354Y-81017631D01* X80216354Y-80200816D01* X80217092Y-80172055D01* X80219261Y-80143673D01* X80222825Y-80115702D01* X80227749Y-80088180D01* X80233997Y-80061141D01* X80241536Y-80034620D01* X80250330Y-80008652D01* X80260343Y-79983272D01* X80271541Y-79958516D01* X80283888Y-79934418D01* X80297350Y-79911013D01* X80311891Y-79888337D01* X80327477Y-79866425D01* X80344072Y-79845312D01* X80361640Y-79825032D01* X80380148Y-79805621D01* X80399559Y-79787114D01* X80419840Y-79769546D01* X80440954Y-79752953D01* X80462867Y-79737368D01* X80485543Y-79722828D01* X80508947Y-79709368D01* X80533045Y-79697022D01* X80557802Y-79685825D01* X80583181Y-79675813D01* X80609149Y-79667021D01* X80635669Y-79659484D01* X80662708Y-79653236D01* X80690229Y-79648314D01* X80718198Y-79644752D01* X80746579Y-79642585D01* X80775338Y-79641848D01* X80804099Y-79642585D01* G37* G36* X46262966Y-55435588D02* G01* X46291349Y-55437756D01* X46319319Y-55441319D01* X46346842Y-55446242D01* X46373881Y-55452490D01* X46400402Y-55460028D01* X46426371Y-55468821D01* X46451751Y-55478833D01* X46476507Y-55490030D01* X46500606Y-55502377D01* X46524011Y-55515839D01* X46546687Y-55530379D01* X46568600Y-55545964D01* X46589714Y-55562558D01* X46609994Y-55580127D01* X46629405Y-55598634D01* X46647913Y-55618046D01* X46665481Y-55638326D01* X46682075Y-55659440D01* X46697660Y-55681353D01* X46712201Y-55704029D01* X46725662Y-55727434D01* X46738009Y-55751533D01* X46749206Y-55776289D01* X46759219Y-55801669D01* X46768012Y-55827638D01* X46775550Y-55854159D01* X46781798Y-55881199D01* X46786721Y-55908721D01* X46790284Y-55936691D01* X46792452Y-55965074D01* X46793190Y-55993835D01* X46793190Y-61268465D01* X46792451Y-61297225D01* X46790282Y-61325608D01* X46786719Y-61353578D01* X46781794Y-61381101D01* X46775546Y-61408140D01* X46768007Y-61434661D01* X46759213Y-61460629D01* X46749200Y-61486009D01* X46738002Y-61510765D01* X46725654Y-61534863D01* X46712192Y-61558268D01* X46697651Y-61580943D01* X46682066Y-61602856D01* X46665471Y-61623969D01* X46647903Y-61644249D01* X46629395Y-61663660D01* X46609983Y-61682167D01* X46589703Y-61699734D01* X46568589Y-61716328D01* X46546677Y-61731912D01* X46524000Y-61746452D01* X46500596Y-61759913D01* X46476498Y-61772259D01* X46451742Y-61783456D01* X46426362Y-61793467D01* X46400395Y-61802260D01* X46373874Y-61809797D01* X46346836Y-61816044D01* X46319315Y-61820967D01* X46291346Y-61824529D01* X46262965Y-61826696D01* X46234206Y-61827433D01* X46205445Y-61826695D01* X46177062Y-61824527D01* X46149092Y-61820964D01* X46121569Y-61816041D01* X46094530Y-61809793D01* X46068009Y-61802255D01* X46042041Y-61793462D01* X46016661Y-61783449D01* X45991904Y-61772252D01* X45967805Y-61759905D01* X45944401Y-61746444D01* X45921724Y-61731903D01* X45899811Y-61716318D01* X45878697Y-61699724D01* X45858417Y-61682156D01* X45839006Y-61663648D01* X45820499Y-61644237D01* X45802930Y-61623957D01* X45786336Y-61602843D01* X45770751Y-61580930D01* X45756210Y-61558254D01* X45742749Y-61534849D01* X45730402Y-61510750D01* X45719205Y-61485994D01* X45709192Y-61460614D01* X45700400Y-61434646D01* X45692861Y-61408124D01* X45686613Y-61381085D01* X45681690Y-61353563D01* X45678127Y-61325592D01* X45675959Y-61297209D01* X45675221Y-61268449D01* X45675221Y-55993821D01* X45675960Y-55965060D01* X45678129Y-55936677D01* X45681693Y-55908707D01* X45686617Y-55881185D01* X45692866Y-55854146D01* X45700405Y-55827624D01* X45709198Y-55801656D01* X45719211Y-55776276D01* X45730409Y-55751520D01* X45742757Y-55727422D01* X45756219Y-55704017D01* X45770760Y-55681341D01* X45786345Y-55659428D01* X45802940Y-55638315D01* X45820509Y-55618035D01* X45839016Y-55598624D01* X45858428Y-55580117D01* X45878708Y-55562549D01* X45899822Y-55545955D01* X45921735Y-55530371D01* X45944411Y-55515831D01* X45967815Y-55502370D01* X45991913Y-55490024D01* X46016670Y-55478827D01* X46042049Y-55468815D01* X46068016Y-55460023D01* X46094537Y-55452486D01* X46121575Y-55446239D01* X46149096Y-55441316D01* X46177065Y-55437754D01* X46205447Y-55435587D01* X46234206Y-55434850D01* X46262966Y-55435588D01* G37* D10* X67310000Y-41656000D02* X67310000Y-41148000D01* D11* G36* X89511130Y-74380862D02* G01* X89539513Y-74383030D01* X89567484Y-74386593D01* X89595006Y-74391516D01* X89622046Y-74397765D01* X89648567Y-74405303D01* X89674536Y-74414096D01* X89699916Y-74424108D01* X89724673Y-74435306D01* X89748771Y-74447652D01* X89772176Y-74461114D01* X89794852Y-74475654D01* X89816765Y-74491240D01* X89837879Y-74507834D01* X89858159Y-74525402D01* X89877571Y-74543910D01* X89896078Y-74563321D01* X89913646Y-74583601D01* X89930241Y-74604716D01* X89945826Y-74626629D01* X89960366Y-74649305D01* X89973827Y-74672710D01* X89986174Y-74696809D01* X89997371Y-74721566D01* X90007384Y-74746946D01* X90016176Y-74772914D01* X90023714Y-74799436D01* X90029962Y-74826476D01* X90034885Y-74853998D01* X90038448Y-74881969D01* X90040616Y-74910352D01* X90041354Y-74939113D01* X90041354Y-83170379D01* X90040712Y-83198134D01* X90038707Y-83225702D01* X90035355Y-83253037D01* X90030677Y-83280095D01* X90024691Y-83306828D01* X90017417Y-83333190D01* X90008873Y-83359137D01* X89999079Y-83384621D01* X89988052Y-83409597D01* X89975813Y-83434018D01* X89962380Y-83457840D01* X89947773Y-83481015D01* X89932009Y-83503498D01* X89915109Y-83525244D01* X89897091Y-83546205D01* X89877973Y-83566336D01* X89857882Y-83585494D01* X89836957Y-83603555D01* X89815247Y-83620500D01* X89792796Y-83636309D01* X89769651Y-83650964D01* X89745858Y-83664446D01* X89721462Y-83676734D01* X89696509Y-83687811D01* X89671046Y-83697658D01* X89645118Y-83706254D01* X89618772Y-83713582D01* X89592053Y-83719622D01* X89565007Y-83724355D01* X89537681Y-83727762D01* X89510120Y-83729824D01* X89482369Y-83730522D01* X89454616Y-83729823D01* X89427053Y-83727760D01* X89399724Y-83724352D01* X89372676Y-83719618D01* X89345956Y-83713577D01* X89319608Y-83706248D01* X89293680Y-83697650D01* X89268216Y-83687803D01* X89243263Y-83676725D01* X89218867Y-83664435D01* X89195073Y-83650953D01* X89171929Y-83636297D01* X89149478Y-83620487D01* X89127768Y-83603542D01* X89106845Y-83585481D01* X89086754Y-83566322D01* X89067638Y-83546191D01* X89049620Y-83525230D01* X89032720Y-83503485D01* X89016958Y-83481001D01* X89002351Y-83457826D01* X88988918Y-83434005D01* X88976680Y-83409583D01* X88965654Y-83384607D01* X88955860Y-83359123D01* X88947317Y-83333177D01* X88940044Y-83306814D01* X88934059Y-83280081D01* X88929381Y-83253024D01* X88926031Y-83225688D01* X88924026Y-83198120D01* X88923385Y-83170366D01* X88923385Y-74938903D01* X88924133Y-74910142D01* X88926312Y-74881760D01* X88929885Y-74853791D01* X88934818Y-74826270D01* X88941076Y-74799233D01* X88948624Y-74772714D01* X88957425Y-74746749D01* X88967446Y-74721373D01* X88978652Y-74696620D01* X88991006Y-74672526D01* X89004473Y-74649126D01* X89019020Y-74626455D01* X89034610Y-74604548D01* X89051209Y-74583440D01* X89068781Y-74563166D01* X89087291Y-74543761D01* X89106704Y-74525261D01* X89126985Y-74507700D01* X89148098Y-74491114D01* X89170010Y-74475537D01* X89192683Y-74461005D01* X89216085Y-74447552D01* X89240178Y-74435214D01* X89264928Y-74424026D01* X89290301Y-74414023D01* X89316260Y-74405240D01* X89342770Y-74397712D01* X89369798Y-74391474D01* X89397306Y-74386561D01* X89425261Y-74383009D01* X89453627Y-74380851D01* X89482369Y-74380124D01* X89511130Y-74380862D01* G37* G36* X84286911Y-78769536D02* G01* X84315294Y-78771704D01* X84343264Y-78775267D01* X84370787Y-78780191D01* X84397826Y-78786439D01* X84424347Y-78793977D01* X84450316Y-78802770D01* X84475696Y-78812782D01* X84500452Y-78823980D01* X84524551Y-78836326D01* X84547956Y-78849788D01* X84570632Y-78864328D01* X84592545Y-78879913D01* X84613659Y-78896508D01* X84633939Y-78914076D01* X84653350Y-78932583D01* X84671858Y-78951995D01* X84689426Y-78972275D01* X84706020Y-78993389D01* X84721605Y-79015302D01* X84736146Y-79037978D01* X84749607Y-79061383D01* X84761954Y-79085481D01* X84773151Y-79110238D01* X84783164Y-79135618D01* X84791957Y-79161586D01* X84799495Y-79188107D01* X84805743Y-79215147D01* X84810666Y-79242669D01* X84814229Y-79270639D01* X84816397Y-79299022D01* X84817135Y-79327783D01* X84817135Y-86739911D01* X84816494Y-86767665D01* X84814488Y-86795233D01* X84811136Y-86822569D01* X84806458Y-86849626D01* X84800473Y-86876359D01* X84793198Y-86902722D01* X84784655Y-86928668D01* X84774860Y-86954152D01* X84763834Y-86979128D01* X84751595Y-87003550D01* X84738162Y-87027371D01* X84723554Y-87050546D01* X84707791Y-87073030D01* X84690890Y-87094775D01* X84672872Y-87115736D01* X84653755Y-87135867D01* X84633663Y-87155025D01* X84612739Y-87173087D01* X84591028Y-87190031D01* X84568578Y-87205841D01* X84545433Y-87220496D01* X84521639Y-87233977D01* X84497243Y-87246266D01* X84472290Y-87257343D01* X84446827Y-87267189D01* X84420900Y-87275786D01* X84394553Y-87283113D01* X84367834Y-87289153D01* X84340789Y-87293886D01* X84313462Y-87297293D01* X84285901Y-87299355D01* X84258151Y-87300053D01* X84230398Y-87299354D01* X84202834Y-87297291D01* X84175505Y-87293883D01* X84148458Y-87289149D01* X84121737Y-87283108D01* X84095390Y-87275779D01* X84069461Y-87267182D01* X84043997Y-87257334D01* X84019044Y-87246256D01* X83994648Y-87233966D01* X83970855Y-87220484D01* X83947710Y-87205828D01* X83925260Y-87190018D01* X83903550Y-87173073D01* X83882626Y-87155012D01* X83862535Y-87135853D01* X83843419Y-87115722D01* X83825401Y-87094761D01* X83808502Y-87073016D01* X83792739Y-87050533D01* X83778132Y-87027357D01* X83764700Y-87003536D01* X83752461Y-86979114D01* X83741436Y-86954138D01* X83731642Y-86928654D01* X83723098Y-86902708D01* X83715825Y-86876345D01* X83709840Y-86849612D01* X83705163Y-86822555D01* X83701812Y-86795219D01* X83699807Y-86767651D01* X83699166Y-86739897D01* X83699166Y-79327767D01* X83699905Y-79299006D01* X83702074Y-79270623D01* X83705638Y-79242653D01* X83710562Y-79215131D01* X83716811Y-79188092D01* X83724350Y-79161571D01* X83733143Y-79135603D01* X83743157Y-79110223D01* X83754354Y-79085467D01* X83766702Y-79061369D01* X83780164Y-79037964D01* X83794705Y-79015288D01* X83810290Y-78993376D01* X83826885Y-78972262D01* X83844454Y-78951983D01* X83862961Y-78932572D01* X83882373Y-78914065D01* X83902653Y-78896497D01* X83923767Y-78879904D01* X83945680Y-78864319D01* X83968356Y-78849779D01* X83991760Y-78836319D01* X84015858Y-78823973D01* X84040615Y-78812776D01* X84065994Y-78802764D01* X84091961Y-78793972D01* X84118482Y-78786435D01* X84145520Y-78780187D01* X84173041Y-78775265D01* X84201010Y-78771703D01* X84229392Y-78769535D01* X84258151Y-78768799D01* X84286911Y-78769536D01* G37* G36* X47970393Y-56804340D02* G01* X47998776Y-56806508D01* X48026746Y-56810072D01* X48054268Y-56814995D01* X48081308Y-56821243D01* X48107829Y-56828781D01* X48133797Y-56837574D01* X48159177Y-56847586D01* X48183934Y-56858784D01* X48208032Y-56871131D01* X48231437Y-56884592D01* X48254113Y-56899132D01* X48276026Y-56914717D01* X48297140Y-56931312D01* X48317420Y-56948880D01* X48336832Y-56967387D01* X48355339Y-56986799D01* X48372907Y-57007079D01* X48389502Y-57028193D01* X48405087Y-57050106D01* X48419627Y-57072782D01* X48433089Y-57096187D01* X48445435Y-57120285D01* X48456633Y-57145042D01* X48466645Y-57170422D01* X48475438Y-57196390D01* X48482976Y-57222912D01* X48489224Y-57249951D01* X48494148Y-57277473D01* X48497711Y-57305443D01* X48499879Y-57333826D01* X48500616Y-57362587D01* X48500616Y-58609480D01* X48499878Y-58638241D01* X48497709Y-58666624D01* X48494145Y-58694594D01* X48489221Y-58722116D01* X48482972Y-58749155D01* X48475433Y-58775676D01* X48466639Y-58801644D01* X48456626Y-58827024D01* X48445428Y-58851781D01* X48433081Y-58875879D01* X48419619Y-58899283D01* X48405078Y-58921959D01* X48389492Y-58943871D01* X48372898Y-58964985D01* X48355329Y-58985265D01* X48336821Y-59004675D01* X48317410Y-59023182D01* X48297130Y-59040750D01* X48276016Y-59057344D01* X48254103Y-59072928D01* X48231427Y-59087468D01* X48208022Y-59100929D01* X48183924Y-59113275D01* X48159168Y-59124471D01* X48133789Y-59134483D01* X48107821Y-59143275D01* X48081301Y-59150813D01* X48054263Y-59157060D01* X48026741Y-59161982D01* X47998773Y-59165545D01* X47970391Y-59167712D01* X47941632Y-59168449D01* X47913878Y-59167808D01* X47886309Y-59165803D01* X47858974Y-59162453D01* X47831916Y-59157775D01* X47805183Y-59151791D01* X47778820Y-59144517D01* X47752874Y-59135974D01* X47727389Y-59126181D01* X47702413Y-59115155D01* X47677991Y-59102917D01* X47654169Y-59089485D01* X47630993Y-59074878D01* X47608510Y-59059115D01* X47586764Y-59042216D01* X47565803Y-59024198D01* X47545671Y-59005082D01* X47526512Y-58984991D01* X47508450Y-58964067D01* X47491505Y-58942358D01* X47475695Y-58919907D01* X47461039Y-58896762D01* X47447557Y-58872968D01* X47435267Y-58848572D01* X47424189Y-58823619D01* X47414342Y-58798155D01* X47405744Y-58772226D01* X47398416Y-58745878D01* X47392375Y-58719158D01* X47387641Y-58692110D01* X47384233Y-58664781D01* X47382170Y-58637217D01* X47381471Y-58609464D01* X47381471Y-57362587D01* X47382170Y-57334834D01* X47384233Y-57307270D01* X47387641Y-57279942D01* X47392375Y-57252894D01* X47398416Y-57226174D01* X47405744Y-57199827D01* X47414342Y-57173898D01* X47424189Y-57148435D01* X47435267Y-57123482D01* X47447557Y-57099086D01* X47461039Y-57075292D01* X47475695Y-57052147D01* X47491505Y-57029697D01* X47508450Y-57007987D01* X47526512Y-56987063D01* X47545671Y-56966972D01* X47565803Y-56947855D01* X47586764Y-56929837D01* X47608510Y-56912937D01* X47630993Y-56897174D01* X47654169Y-56882567D01* X47677991Y-56869135D01* X47702413Y-56856897D01* X47727389Y-56845871D01* X47752874Y-56836077D01* X47778820Y-56827534D01* X47805183Y-56820261D01* X47831916Y-56814276D01* X47858974Y-56809599D01* X47886309Y-56806248D01* X47913878Y-56804243D01* X47941632Y-56803603D01* X47970393Y-56804340D01* G37* G36* X87769726Y-76984771D02* G01* X87798109Y-76986939D01* X87826079Y-76990502D01* X87853602Y-76995425D01* X87880641Y-77001673D01* X87907162Y-77009211D01* X87933130Y-77018004D01* X87958510Y-77028017D01* X87983267Y-77039214D01* X88007366Y-77051561D01* X88030770Y-77065022D01* X88053447Y-77079563D01* X88075360Y-77095148D01* X88096474Y-77111742D01* X88116754Y-77129310D01* X88136165Y-77147818D01* X88154672Y-77167229D01* X88172241Y-77187509D01* X88188835Y-77208623D01* X88204420Y-77230536D01* X88218961Y-77253212D01* X88232422Y-77276617D01* X88244769Y-77300716D01* X88255966Y-77325472D01* X88265979Y-77350852D01* X88274771Y-77376820D01* X88282310Y-77403342D01* X88288558Y-77430381D01* X88293481Y-77457903D01* X88297044Y-77485874D01* X88299212Y-77514257D01* X88299950Y-77543017D01* X88299950Y-82817645D01* X88299211Y-82846406D01* X88297042Y-82874789D01* X88293478Y-82902759D01* X88288554Y-82930281D01* X88282305Y-82957320D01* X88274766Y-82983842D01* X88265973Y-83009810D01* X88255960Y-83035190D01* X88244762Y-83059946D01* X88232414Y-83084044D01* X88218952Y-83107449D01* X88204411Y-83130125D01* X88188826Y-83152038D01* X88172231Y-83173151D01* X88154662Y-83193431D01* X88136155Y-83212842D01* X88116743Y-83231349D01* X88096463Y-83248917D01* X88075349Y-83265511D01* X88053436Y-83281095D01* X88030760Y-83295635D01* X88007356Y-83309096D01* X87983258Y-83321442D01* X87958501Y-83332639D01* X87933122Y-83342651D01* X87907155Y-83351443D01* X87880634Y-83358980D01* X87853596Y-83365227D01* X87826075Y-83370150D01* X87798106Y-83373712D01* X87769724Y-83375879D01* X87740965Y-83376616D01* X87712205Y-83375878D01* X87683822Y-83373710D01* X87655852Y-83370147D01* X87628329Y-83365224D01* X87601290Y-83358976D01* X87574769Y-83351438D01* X87548800Y-83342645D01* X87523420Y-83332633D01* X87498664Y-83321436D01* X87474565Y-83309089D01* X87451160Y-83295627D01* X87428484Y-83281087D01* X87406571Y-83265502D01* X87385457Y-83248908D01* X87365177Y-83231339D01* X87345766Y-83212832D01* X87327258Y-83193420D01* X87309690Y-83173140D01* X87293096Y-83152026D01* X87277511Y-83130113D01* X87262970Y-83107437D01* X87249509Y-83084032D01* X87237162Y-83059933D01* X87225965Y-83035177D01* X87215952Y-83009797D01* X87207159Y-82983828D01* X87199621Y-82957307D01* X87193373Y-82930267D01* X87188450Y-82902745D01* X87184887Y-82874775D01* X87182719Y-82846392D01* X87181981Y-82817631D01* X87181981Y-77543001D01* X87182720Y-77514241D01* X87184889Y-77485858D01* X87188452Y-77457888D01* X87193377Y-77430365D01* X87199625Y-77403326D01* X87207164Y-77376805D01* X87215958Y-77350837D01* X87225971Y-77325457D01* X87237169Y-77300701D01* X87249517Y-77276603D01* X87262979Y-77253198D01* X87277520Y-77230523D01* X87293105Y-77208610D01* X87309700Y-77187497D01* X87327268Y-77167217D01* X87345776Y-77147806D01* X87365188Y-77129299D01* X87385468Y-77111732D01* X87406582Y-77095138D01* X87428494Y-77079554D01* X87451171Y-77065014D01* X87474575Y-77051553D01* X87498673Y-77039207D01* X87523429Y-77028010D01* X87548809Y-77017999D01* X87574776Y-77009206D01* X87601297Y-77001669D01* X87628335Y-76995422D01* X87655856Y-76990499D01* X87683825Y-76986937D01* X87712206Y-76984770D01* X87740965Y-76984033D01* X87769726Y-76984771D01* G37* G36* X49744773Y-51512112D02* G01* X49772337Y-51514175D01* X49799666Y-51517583D01* X49826713Y-51522317D01* X49853434Y-51528358D01* X49879781Y-51535687D01* X49905710Y-51544284D01* X49931174Y-51554132D01* X49956127Y-51565210D01* X49980523Y-51577500D01* X50004316Y-51590982D01* X50027461Y-51605638D01* X50049911Y-51621448D01* X50071621Y-51638393D01* X50092545Y-51656454D01* X50112636Y-51675613D01* X50131752Y-51695744D01* X50149770Y-51716705D01* X50166669Y-51738450D01* X50182432Y-51760933D01* X50197039Y-51784109D01* X50210471Y-51807930D01* X50222710Y-51832352D01* X50233735Y-51857328D01* X50243529Y-51882812D01* X50252073Y-51908758D01* X50259346Y-51935121D01* X50265331Y-51961854D01* X50270008Y-51988911D01* X50273359Y-52016247D01* X50275364Y-52043815D01* X50276005Y-52071569D01* X50276005Y-59483699D01* X50275266Y-59512460D01* X50273097Y-59540843D01* X50269533Y-59568813D01* X50264609Y-59596335D01* X50258360Y-59623374D01* X50250821Y-59649895D01* X50242028Y-59675863D01* X50232014Y-59701243D01* X50220817Y-59725999D01* X50208469Y-59750097D01* X50195007Y-59773502D01* X50180466Y-59796178D01* X50164881Y-59818090D01* X50148286Y-59839204D01* X50130717Y-59859483D01* X50112210Y-59878894D01* X50092798Y-59897401D01* X50072518Y-59914969D01* X50051404Y-59931562D01* X50029491Y-59947147D01* X50006815Y-59961687D01* X49983411Y-59975147D01* X49959313Y-59987493D01* X49934556Y-59998690D01* X49909177Y-60008702D01* X49883210Y-60017494D01* X49856689Y-60025031D01* X49829651Y-60031279D01* X49802130Y-60036201D01* X49774161Y-60039763D01* X49745779Y-60041931D01* X49717020Y-60042667D01* X49688260Y-60041930D01* X49659877Y-60039762D01* X49631907Y-60036199D01* X49604384Y-60031275D01* X49577345Y-60025027D01* X49550824Y-60017489D01* X49524855Y-60008696D01* X49499475Y-59998684D01* X49474719Y-59987486D01* X49450620Y-59975140D01* X49427215Y-59961678D01* X49404539Y-59947138D01* X49382626Y-59931553D01* X49361512Y-59914958D01* X49341232Y-59897390D01* X49321821Y-59878883D01* X49303313Y-59859471D01* X49285745Y-59839191D01* X49269151Y-59818077D01* X49253566Y-59796164D01* X49239025Y-59773488D01* X49225564Y-59750083D01* X49213217Y-59725985D01* X49202020Y-59701228D01* X49192007Y-59675848D01* X49183214Y-59649880D01* X49175676Y-59623359D01* X49169428Y-59596319D01* X49164505Y-59568797D01* X49160942Y-59540827D01* X49158774Y-59512444D01* X49158036Y-59483683D01* X49158036Y-52071555D01* X49158677Y-52043801D01* X49160683Y-52016233D01* X49164035Y-51988897D01* X49168713Y-51961840D01* X49174698Y-51935107D01* X49181973Y-51908744D01* X49190516Y-51882798D01* X49200311Y-51857314D01* X49211337Y-51832338D01* X49223576Y-51807916D01* X49237009Y-51784095D01* X49251617Y-51760920D01* X49267380Y-51738436D01* X49284281Y-51716691D01* X49302299Y-51695730D01* X49321416Y-51675599D01* X49341508Y-51656441D01* X49362432Y-51638379D01* X49384143Y-51621435D01* X49406593Y-51605625D01* X49429738Y-51590970D01* X49453532Y-51577489D01* X49477928Y-51565200D01* X49502881Y-51554123D01* X49528344Y-51544277D01* X49554271Y-51535680D01* X49580618Y-51528353D01* X49607337Y-51522313D01* X49634382Y-51517580D01* X49661709Y-51514173D01* X49689270Y-51512111D01* X49717020Y-51511413D01* X49744773Y-51512112D01* G37* G36* X90162920Y-70267808D02* G01* X90168807Y-70271675D01* X90174901Y-70275976D01* X90181161Y-70280677D01* X90187544Y-70285749D01* X90194006Y-70291161D01* X90200504Y-70296882D01* X90206997Y-70302881D01* X90213441Y-70309127D01* X90219793Y-70315588D01* X90226011Y-70322235D01* X90232051Y-70329037D01* X90237871Y-70335961D01* X90243429Y-70342979D01* X90248680Y-70350057D01* X90253582Y-70357167D01* X90253594Y-70357169D01* X90262473Y-70370609D01* X90270280Y-70384050D01* X90277019Y-70397490D01* X90282698Y-70410930D01* X90287321Y-70424371D01* X90290896Y-70437811D01* X90293428Y-70451252D01* X90294925Y-70464692D01* X90295391Y-70478132D01* X90294833Y-70491573D01* X90293258Y-70505013D01* X90290671Y-70518454D01* X90287079Y-70531894D01* X90282488Y-70545334D01* X90276904Y-70558775D01* X90270334Y-70572215D01* X90109792Y-70776654D01* X89689399Y-71293780D01* X88323419Y-72954591D01* X86798860Y-74804622D01* X85836396Y-75977889D01* X85713586Y-76128039D01* X85600490Y-76264354D01* X85498581Y-76385251D01* X85409330Y-76489150D01* X85334211Y-76574470D01* X85274694Y-76639629D01* X85251247Y-76664155D01* X85232253Y-76683048D01* X85217895Y-76696110D01* X85208358Y-76703145D01* X85201892Y-76706304D01* X85195096Y-76709438D01* X85180755Y-76715534D01* X85165825Y-76721233D01* X85158293Y-76723872D01* X85150797Y-76726338D01* X85143399Y-76728607D01* X85136160Y-76730653D01* X85129142Y-76732452D01* X85122405Y-76733979D01* X85116011Y-76735210D01* X85110022Y-76736120D01* X85104497Y-76736684D01* X85099500Y-76736877D01* X85092755Y-76736681D01* X85085880Y-76736102D01* X85078889Y-76735150D01* X85071800Y-76733838D01* X85064628Y-76732177D01* X85057389Y-76730178D01* X85050099Y-76727854D01* X85042775Y-76725215D01* X85028089Y-76719042D01* X85013457Y-76711750D01* X84999010Y-76703433D01* X84984876Y-76694183D01* X84971184Y-76684094D01* X84958062Y-76673257D01* X84945640Y-76661765D01* X84934046Y-76649711D01* X84923409Y-76637188D01* X84918490Y-76630779D01* X84913858Y-76624288D01* X84909530Y-76617726D01* X84905522Y-76611104D01* X84901850Y-76604434D01* X84898530Y-76597728D01* X84891185Y-76564671D01* X84879031Y-76493763D01* X84843047Y-76256185D01* X84796075Y-75920571D01* X84743609Y-75522499D01* X84692514Y-75128114D01* X84648870Y-74802513D01* X84617007Y-74579693D01* X84606846Y-74517449D01* X84603445Y-74500479D01* X84601254Y-74493650D01* X84567358Y-74505780D01* X84476105Y-74546422D01* X84146452Y-74700789D01* X83073030Y-75214687D01* X82677701Y-75406015D01* X82348757Y-75564137D01* X82081145Y-75691425D01* X81869812Y-75790251D01* X81709703Y-75862987D01* X81595766Y-75912005D01* X81554533Y-75928360D01* X81522947Y-75939676D01* X81500378Y-75946248D01* X81486192Y-75948372D01* X81478724Y-75948225D01* X81471239Y-75947786D01* X81463747Y-75947059D01* X81456256Y-75946050D01* X81448774Y-75944763D01* X81441309Y-75943203D01* X81433871Y-75941373D01* X81426467Y-75939280D01* X81419106Y-75936928D01* X81411796Y-75934321D01* X81397364Y-75928360D01* X81383239Y-75921436D01* X81369488Y-75913585D01* X81356179Y-75904846D01* X81343378Y-75895253D01* X81331153Y-75884845D01* X81325278Y-75879347D01* X81319572Y-75873659D01* X81314044Y-75867786D01* X81308703Y-75861732D01* X81303555Y-75855502D01* X81298611Y-75849101D01* X81293879Y-75842533D01* X81289366Y-75835802D01* X81285082Y-75828915D01* X81281034Y-75821874D01* X81204297Y-75668808D01* X81087915Y-75427491D01* X80797451Y-74810947D01* X80532105Y-74233933D01* X80447121Y-74042028D01* X80414341Y-73958140D01* X80413704Y-73948842D01* X80413380Y-73939891D01* X80413389Y-73931235D01* X80413747Y-73922827D01* X80414474Y-73914617D01* X80415588Y-73906555D01* X80417107Y-73898591D01* X80419049Y-73890677D01* X80421433Y-73882763D01* X80424277Y-73874799D01* X80427598Y-73866736D01* X80431417Y-73858525D01* X80435750Y-73850116D01* X80440616Y-73841460D01* X80446033Y-73832508D01* X80452020Y-73823209D01* X80474248Y-73798758D01* X80519930Y-73765956D01* X80599957Y-73719220D01* X80725221Y-73652965D01* X81155034Y-73439566D01* X81896509Y-73081090D01* X83424732Y-72338968D01* X83554524Y-72275718D01* X83085589Y-71773943D01* X82743927Y-71417154D01* X82606499Y-71273254D01* X82489212Y-71149952D01* X82390472Y-71045453D01* X82347559Y-70999692D01* X82308685Y-70957957D01* X82273650Y-70920024D01* X82242255Y-70885669D01* X82214302Y-70854665D01* X82189589Y-70826790D01* X82167919Y-70801817D01* X82149091Y-70779523D01* X82132907Y-70759682D01* X82119166Y-70742071D01* X82107671Y-70726463D01* X82098221Y-70712636D01* X82090617Y-70700363D01* X82087445Y-70694740D01* X82084660Y-70689421D01* X82082236Y-70684378D01* X82080150Y-70679584D01* X82078375Y-70675010D01* X82076888Y-70670628D01* X82075663Y-70666411D01* X82074675Y-70662329D01* X82073311Y-70654461D01* X82072598Y-70646800D01* X82072335Y-70639121D01* X82072363Y-70622812D01* X82072510Y-70613722D01* X82072946Y-70604644D01* X82073668Y-70595592D01* X82074670Y-70586576D01* X82075948Y-70577610D01* X82077497Y-70568705D01* X82079313Y-70559875D01* X82081392Y-70551131D01* X82083728Y-70542486D01* X82086317Y-70533952D01* X82089154Y-70525542D01* X82092235Y-70517267D01* X82095555Y-70509141D01* X82099110Y-70501175D01* X82102895Y-70493382D01* X82106905Y-70485775D01* X82111136Y-70478365D01* X82115584Y-70471165D01* X82120243Y-70464188D01* X82125108Y-70457445D01* X82130176Y-70450949D01* X82135442Y-70444713D01* X82140901Y-70438748D01* X82146549Y-70433068D01* X82152381Y-70427684D01* X82158392Y-70422608D01* X82164578Y-70417854D01* X82170934Y-70413434D01* X82177455Y-70409359D01* X82184137Y-70405643D01* X82190976Y-70402297D01* X82197967Y-70399334D01* X83469282Y-70359869D01* X86185475Y-70308149D01* X88897743Y-70268289D01* X90157285Y-70264403D01* X90162920Y-70267808D01* G37* G36* X51487185Y-52446139D02* G01* X51515568Y-52448307D01* X51543539Y-52451870D01* X51571061Y-52456793D01* X51598101Y-52463041D01* X51624622Y-52470579D01* X51650591Y-52479372D01* X51675971Y-52489384D01* X51700728Y-52500581D01* X51724827Y-52512928D01* X51748232Y-52526389D01* X51770908Y-52540929D01* X51792821Y-52556514D01* X51813935Y-52573108D01* X51834216Y-52590677D01* X51853627Y-52609184D01* X51872135Y-52628595D01* X51889703Y-52648875D01* X51906297Y-52669989D01* X51921883Y-52691902D01* X51936423Y-52714579D01* X51949885Y-52737984D01* X51962232Y-52762082D01* X51973429Y-52786839D01* X51983442Y-52812219D01* X51992235Y-52838187D01* X51999773Y-52864709D01* X52006021Y-52891749D01* X52010944Y-52919271D01* X52014508Y-52947242D01* X52016676Y-52975625D01* X52017413Y-53004386D01* X52017413Y-56209473D01* X52016675Y-56238235D01* X52014507Y-56266618D01* X52010943Y-56294588D01* X52006019Y-56322111D01* X51999770Y-56349150D01* X51992232Y-56375672D01* X51983438Y-56401640D01* X51973425Y-56427020D01* X51962227Y-56451777D01* X51949880Y-56475875D01* X51936418Y-56499280D01* X51921877Y-56521956D01* X51906291Y-56543869D01* X51889697Y-56564983D01* X51872128Y-56585263D01* X51853620Y-56604674D01* X51834209Y-56623181D01* X51813928Y-56640749D01* X51792814Y-56657342D01* X51770901Y-56672927D01* X51748224Y-56687467D01* X51724820Y-56700928D01* X51700721Y-56713274D01* X51675965Y-56724471D01* X51650585Y-56734483D01* X51624617Y-56743275D01* X51598096Y-56750812D01* X51571057Y-56757060D01* X51543536Y-56761982D01* X51515566Y-56765545D01* X51487184Y-56767712D01* X51458424Y-56768449D01* X51429664Y-56767711D01* X51401281Y-56765543D01* X51373311Y-56761980D01* X51345788Y-56757057D01* X51318749Y-56750808D01* X51292227Y-56743270D01* X51266259Y-56734477D01* X51240879Y-56724465D01* X51216123Y-56713268D01* X51192024Y-56700921D01* X51168619Y-56687460D01* X51145943Y-56672919D01* X51124030Y-56657334D01* X51102916Y-56640740D01* X51082636Y-56623171D01* X51063225Y-56604664D01* X51044717Y-56585253D01* X51027149Y-56564972D01* X51010555Y-56543858D01* X50994970Y-56521946D01* X50980429Y-56499269D01* X50966968Y-56475864D01* X50954621Y-56451766D01* X50943424Y-56427009D01* X50933411Y-56401629D01* X50924618Y-56375661D01* X50917080Y-56349140D01* X50910832Y-56322100D01* X50905909Y-56294578D01* X50902346Y-56266608D01* X50900178Y-56238225D01* X50899440Y-56209464D01* X50899440Y-53004372D01* X50900179Y-52975612D01* X50902347Y-52947229D01* X50905911Y-52919259D01* X50910835Y-52891736D01* X50917084Y-52864697D01* X50924623Y-52838176D01* X50933417Y-52812208D01* X50943430Y-52786828D01* X50954628Y-52762071D01* X50966976Y-52737973D01* X50980437Y-52714569D01* X50994979Y-52691892D01* X51010564Y-52669980D01* X51027159Y-52648866D01* X51044727Y-52628586D01* X51063235Y-52609175D01* X51082646Y-52590668D01* X51102927Y-52573100D01* X51124041Y-52556507D01* X51145953Y-52540922D01* X51168630Y-52526382D01* X51192034Y-52512921D01* X51216132Y-52500575D01* X51240888Y-52489379D01* X51266268Y-52479367D01* X51292235Y-52470575D01* X51318755Y-52463037D01* X51345794Y-52456790D01* X51373315Y-52451868D01* X51401284Y-52448306D01* X51429665Y-52446139D01* X51458424Y-52445402D01* X51487185Y-52446139D01* G37* G36* X44520555Y-55081643D02* G01* X44548118Y-55083706D01* X44575447Y-55087114D01* X44602495Y-55091848D01* X44629215Y-55097889D01* X44655563Y-55105218D01* X44681491Y-55113816D01* X44706955Y-55123663D01* X44731908Y-55134741D01* X44756304Y-55147031D01* X44780098Y-55160513D01* X44803242Y-55175169D01* X44825693Y-55190979D01* X44847403Y-55207924D01* X44868326Y-55225985D01* X44888417Y-55245144D01* X44907533Y-55265275D01* X44925551Y-55286236D01* X44942451Y-55307981D01* X44958213Y-55330465D01* X44972820Y-55353640D01* X44986253Y-55377461D01* X44998491Y-55401883D01* X45009517Y-55426859D01* X45019311Y-55452343D01* X45027854Y-55478289D01* X45035127Y-55504652D01* X45041112Y-55531385D01* X45045790Y-55558442D01* X45049140Y-55585778D01* X45051145Y-55613346D01* X45051786Y-55641100D01* X45051786Y-63872563D01* X45051038Y-63901324D01* X45048859Y-63929706D01* X45045286Y-63957675D01* X45040353Y-63985196D01* X45034095Y-64012233D01* X45026547Y-64038752D01* X45017746Y-64064717D01* X45007725Y-64090093D01* X44996519Y-64114846D01* X44984165Y-64138940D01* X44970698Y-64162340D01* X44956151Y-64185011D01* X44940561Y-64206918D01* X44923962Y-64228026D01* X44906390Y-64248300D01* X44887880Y-64267705D01* X44868467Y-64286205D01* X44848186Y-64303766D01* X44827073Y-64320352D01* X44805161Y-64335929D01* X44782488Y-64350461D01* X44759086Y-64363914D01* X44734993Y-64376252D01* X44710243Y-64387440D01* X44684870Y-64397443D01* X44658911Y-64406226D01* X44632401Y-64413754D01* X44605373Y-64419992D01* X44577865Y-64424905D01* X44549910Y-64428457D01* X44521544Y-64430615D01* X44492802Y-64431342D01* X44464041Y-64430604D01* X44435658Y-64428436D01* X44407687Y-64424873D01* X44380165Y-64419950D01* X44353125Y-64413701D01* X44326604Y-64406163D01* X44300635Y-64397370D01* X44275255Y-64387358D01* X44250498Y-64376160D01* X44226400Y-64363814D01* X44202995Y-64350352D01* X44180319Y-64335812D01* X44158406Y-64320226D01* X44137292Y-64303632D01* X44117012Y-64286064D01* X44097600Y-64267556D01* X44079093Y-64248145D01* X44061525Y-64227865D01* X44044930Y-64206750D01* X44029345Y-64184837D01* X44014805Y-64162161D01* X44001344Y-64138756D01* X43988997Y-64114657D01* X43977800Y-64089900D01* X43967787Y-64064520D01* X43958995Y-64038552D01* X43951457Y-64012030D01* X43945209Y-63984990D01* X43940286Y-63957468D01* X43936723Y-63929497D01* X43934555Y-63901114D01* X43933817Y-63872353D01* X43933817Y-55641087D01* X43934459Y-55613332D01* X43936464Y-55585764D01* X43939816Y-55558429D01* X43944494Y-55531371D01* X43950480Y-55504638D01* X43957754Y-55478276D01* X43966298Y-55452329D01* X43976092Y-55426845D01* X43987119Y-55401869D01* X43999358Y-55377448D01* X44012791Y-55353626D01* X44027398Y-55330451D01* X44043162Y-55307968D01* X44060062Y-55286222D01* X44078080Y-55265261D01* X44097198Y-55245130D01* X44117289Y-55225972D01* X44138214Y-55207911D01* X44159924Y-55190966D01* X44182375Y-55175157D01* X44205520Y-55160502D01* X44229313Y-55147020D01* X44253709Y-55134732D01* X44278662Y-55123655D01* X44304125Y-55113808D01* X44330053Y-55105212D01* X44356399Y-55097884D01* X44383118Y-55091844D01* X44410164Y-55087111D01* X44437490Y-55083704D01* X44465051Y-55081642D01* X44492802Y-55080944D01* X44520555Y-55081643D01* G37* G36* X86061293Y-79643658D02* G01* X86088862Y-79645663D01* X86116197Y-79649013D01* X86143255Y-79653691D01* X86169988Y-79659675D01* X86196351Y-79666949D01* X86222297Y-79675492D01* X86247782Y-79685285D01* X86272758Y-79696311D01* X86297180Y-79708549D01* X86321002Y-79721981D01* X86344178Y-79736588D01* X86366661Y-79752351D01* X86388407Y-79769250D01* X86409368Y-79787268D01* X86429500Y-79806384D01* X86448659Y-79826475D01* X86466721Y-79847399D01* X86483666Y-79869108D01* X86499476Y-79891559D01* X86514132Y-79914704D01* X86527614Y-79938498D01* X86539904Y-79962894D01* X86550982Y-79987847D01* X86560829Y-80013311D01* X86569427Y-80039240D01* X86576755Y-80065588D01* X86582796Y-80092308D01* X86587530Y-80119356D01* X86590938Y-80146685D01* X86593001Y-80174249D01* X86593700Y-80202002D01* X86593700Y-81448879D01* X86593001Y-81476632D01* X86590938Y-81504196D01* X86587530Y-81531524D01* X86582796Y-81558572D01* X86576755Y-81585292D01* X86569427Y-81611639D01* X86560829Y-81637568D01* X86550982Y-81663031D01* X86539904Y-81687984D01* X86527614Y-81712380D01* X86514132Y-81736174D01* X86499476Y-81759319D01* X86483666Y-81781769D01* X86466721Y-81803479D01* X86448659Y-81824403D01* X86429500Y-81844494D01* X86409368Y-81863611D01* X86388407Y-81881629D01* X86366661Y-81898529D01* X86344178Y-81914292D01* X86321002Y-81928899D01* X86297180Y-81942331D01* X86272758Y-81954569D01* X86247782Y-81965595D01* X86222297Y-81975389D01* X86196351Y-81983932D01* X86169988Y-81991205D01* X86143255Y-81997190D01* X86116197Y-82001867D01* X86088862Y-82005218D01* X86061293Y-82007223D01* X86033539Y-82007863D01* X86004778Y-82007126D01* X85976395Y-82004958D01* X85948425Y-82001394D01* X85920903Y-81996471D01* X85893863Y-81990223D01* X85867342Y-81982685D01* X85841374Y-81973892D01* X85815994Y-81963880D01* X85791237Y-81952682D01* X85767139Y-81940335D01* X85743734Y-81926874D01* X85721058Y-81912334D01* X85699145Y-81896749D01* X85678031Y-81880154D01* X85657751Y-81862586D01* X85638339Y-81844079D01* X85619832Y-81824667D01* X85602264Y-81804387D01* X85585669Y-81783273D01* X85570084Y-81761360D01* X85555544Y-81738684D01* X85542082Y-81715279D01* X85529736Y-81691181D01* X85518538Y-81666424D01* X85508526Y-81641044D01* X85499733Y-81615076D01* X85492195Y-81588554D01* X85485947Y-81561515D01* X85481023Y-81533993D01* X85477460Y-81506023D01* X85475292Y-81477640D01* X85474555Y-81448879D01* X85474555Y-80201986D01* X85475293Y-80173225D01* X85477462Y-80144842D01* X85481026Y-80116872D01* X85485950Y-80089350D01* X85492199Y-80062311D01* X85499738Y-80035790D01* X85508532Y-80009822D01* X85518545Y-79984442D01* X85529743Y-79959685D01* X85542090Y-79935587D01* X85555552Y-79912183D01* X85570093Y-79889507D01* X85585679Y-79867595D01* X85602273Y-79846481D01* X85619842Y-79826201D01* X85638350Y-79806791D01* X85657761Y-79788284D01* X85678041Y-79770716D01* X85699155Y-79754122D01* X85721068Y-79738538D01* X85743744Y-79723998D01* X85767149Y-79710537D01* X85791247Y-79698191D01* X85816003Y-79686995D01* X85841382Y-79676983D01* X85867350Y-79668191D01* X85893870Y-79660653D01* X85920908Y-79654406D01* X85948430Y-79649484D01* X85976398Y-79645921D01* X86004780Y-79643754D01* X86033539Y-79643017D01* X86061293Y-79643658D01* G37* D12* X51091028Y-72771429D02* X49591028Y-72771429D01* X51091028Y-73457143D02* X50233885Y-72942857D01* X49591028Y-73457143D02* X50448171Y-72771429D01* X51019600Y-74428572D02* X51091028Y-74314286D01* X51091028Y-74314286D02* X51091028Y-74085715D01* X51091028Y-74085715D02* X51019600Y-73971429D01* X51019600Y-73971429D02* X50876742Y-73914286D01* X50876742Y-73914286D02* X50305314Y-73914286D01* X50305314Y-73914286D02* X50162457Y-73971429D01* X50162457Y-73971429D02* X50091028Y-74085715D01* X50091028Y-74085715D02* X50091028Y-74314286D01* X50091028Y-74314286D02* X50162457Y-74428572D01* X50162457Y-74428572D02* X50305314Y-74485715D01* X50305314Y-74485715D02* X50448171Y-74485715D01* X50448171Y-74485715D02* X50591028Y-73914286D01* X50091028Y-74885714D02* X51091028Y-75171428D01* X50091028Y-75457143D02* X51091028Y-75171428D01* X51091028Y-75171428D02* X51448171Y-75057143D01* X51448171Y-75057143D02* X51519600Y-75000000D01* X51519600Y-75000000D02* X51591028Y-74885714D01* X51091028Y-75914286D02* X49591028Y-75914286D01* X50162457Y-75914286D02* X50091028Y-76028572D01* X50091028Y-76028572D02* X50091028Y-76257143D01* X50091028Y-76257143D02* X50162457Y-76371429D01* X50162457Y-76371429D02* X50233885Y-76428572D01* X50233885Y-76428572D02* X50376742Y-76485714D01* X50376742Y-76485714D02* X50805314Y-76485714D01* X50805314Y-76485714D02* X50948171Y-76428572D01* X50948171Y-76428572D02* X51019600Y-76371429D01* X51019600Y-76371429D02* X51091028Y-76257143D01* X51091028Y-76257143D02* X51091028Y-76028572D01* X51091028Y-76028572D02* X51019600Y-75914286D01* X51091028Y-77171428D02* X51019600Y-77057143D01* X51019600Y-77057143D02* X50948171Y-77000000D01* X50948171Y-77000000D02* X50805314Y-76942857D01* X50805314Y-76942857D02* X50376742Y-76942857D01* X50376742Y-76942857D02* X50233885Y-77000000D01* X50233885Y-77000000D02* X50162457Y-77057143D01* X50162457Y-77057143D02* X50091028Y-77171428D01* X50091028Y-77171428D02* X50091028Y-77342857D01* X50091028Y-77342857D02* X50162457Y-77457143D01* X50162457Y-77457143D02* X50233885Y-77514286D01* X50233885Y-77514286D02* X50376742Y-77571428D01* X50376742Y-77571428D02* X50805314Y-77571428D01* X50805314Y-77571428D02* X50948171Y-77514286D01* X50948171Y-77514286D02* X51019600Y-77457143D01* X51019600Y-77457143D02* X51091028Y-77342857D01* X51091028Y-77342857D02* X51091028Y-77171428D01* X51091028Y-78600000D02* X50305314Y-78600000D01* X50305314Y-78600000D02* X50162457Y-78542857D01* X50162457Y-78542857D02* X50091028Y-78428571D01* X50091028Y-78428571D02* X50091028Y-78200000D01* X50091028Y-78200000D02* X50162457Y-78085714D01* X51019600Y-78600000D02* X51091028Y-78485714D01* X51091028Y-78485714D02* X51091028Y-78200000D01* X51091028Y-78200000D02* X51019600Y-78085714D01* X51019600Y-78085714D02* X50876742Y-78028571D01* X50876742Y-78028571D02* X50733885Y-78028571D01* X50733885Y-78028571D02* X50591028Y-78085714D01* X50591028Y-78085714D02* X50519600Y-78200000D01* X50519600Y-78200000D02* X50519600Y-78485714D01* X50519600Y-78485714D02* X50448171Y-78600000D01* X51091028Y-79171428D02* X50091028Y-79171428D01* X50376742Y-79171428D02* X50233885Y-79228571D01* X50233885Y-79228571D02* X50162457Y-79285714D01* X50162457Y-79285714D02* X50091028Y-79399999D01* X50091028Y-79399999D02* X50091028Y-79514285D01* X51091028Y-80428571D02* X49591028Y-80428571D01* X51019600Y-80428571D02* X51091028Y-80314285D01* X51091028Y-80314285D02* X51091028Y-80085713D01* X51091028Y-80085713D02* X51019600Y-79971428D01* X51019600Y-79971428D02* X50948171Y-79914285D01* X50948171Y-79914285D02* X50805314Y-79857142D01* X50805314Y-79857142D02* X50376742Y-79857142D01* X50376742Y-79857142D02* X50233885Y-79914285D01* X50233885Y-79914285D02* X50162457Y-79971428D01* X50162457Y-79971428D02* X50091028Y-80085713D01* X50091028Y-80085713D02* X50091028Y-80314285D01* X50091028Y-80314285D02* X50162457Y-80428571D01* X49519600Y-81857142D02* X51448171Y-80828570D01* X51091028Y-82257142D02* X49591028Y-82257142D01* X49591028Y-82257142D02* X50662457Y-82657142D01* X50662457Y-82657142D02* X49591028Y-83057142D01* X49591028Y-83057142D02* X51091028Y-83057142D01* X51091028Y-83799999D02* X51019600Y-83685714D01* X51019600Y-83685714D02* X50948171Y-83628571D01* X50948171Y-83628571D02* X50805314Y-83571428D01* X50805314Y-83571428D02* X50376742Y-83571428D01* X50376742Y-83571428D02* X50233885Y-83628571D01* X50233885Y-83628571D02* X50162457Y-83685714D01* X50162457Y-83685714D02* X50091028Y-83799999D01* X50091028Y-83799999D02* X50091028Y-83971428D01* X50091028Y-83971428D02* X50162457Y-84085714D01* X50162457Y-84085714D02* X50233885Y-84142857D01* X50233885Y-84142857D02* X50376742Y-84199999D01* X50376742Y-84199999D02* X50805314Y-84199999D01* X50805314Y-84199999D02* X50948171Y-84142857D01* X50948171Y-84142857D02* X51019600Y-84085714D01* X51019600Y-84085714D02* X51091028Y-83971428D01* X51091028Y-83971428D02* X51091028Y-83799999D01* X50091028Y-85228571D02* X51091028Y-85228571D01* X50091028Y-84714285D02* X50876742Y-84714285D01* X50876742Y-84714285D02* X51019600Y-84771428D01* X51019600Y-84771428D02* X51091028Y-84885713D01* X51091028Y-84885713D02* X51091028Y-85057142D01* X51091028Y-85057142D02* X51019600Y-85171428D01* X51019600Y-85171428D02* X50948171Y-85228571D01* X51019600Y-85742856D02* X51091028Y-85857142D01* X51091028Y-85857142D02* X51091028Y-86085713D01* X51091028Y-86085713D02* X51019600Y-86199999D01* X51019600Y-86199999D02* X50876742Y-86257142D01* X50876742Y-86257142D02* X50805314Y-86257142D01* X50805314Y-86257142D02* X50662457Y-86199999D01* X50662457Y-86199999D02* X50591028Y-86085713D01* X50591028Y-86085713D02* X50591028Y-85914285D01* X50591028Y-85914285D02* X50519600Y-85799999D01* X50519600Y-85799999D02* X50376742Y-85742856D01* X50376742Y-85742856D02* X50305314Y-85742856D01* X50305314Y-85742856D02* X50162457Y-85799999D01* X50162457Y-85799999D02* X50091028Y-85914285D01* X50091028Y-85914285D02* X50091028Y-86085713D01* X50091028Y-86085713D02* X50162457Y-86199999D01* X51019600Y-87228571D02* X51091028Y-87114285D01* X51091028Y-87114285D02* X51091028Y-86885714D01* X51091028Y-86885714D02* X51019600Y-86771428D01* X51019600Y-86771428D02* X50876742Y-86714285D01* X50876742Y-86714285D02* X50305314Y-86714285D01* X50305314Y-86714285D02* X50162457Y-86771428D01* X50162457Y-86771428D02* X50091028Y-86885714D01* X50091028Y-86885714D02* X50091028Y-87114285D01* X50091028Y-87114285D02* X50162457Y-87228571D01* X50162457Y-87228571D02* X50305314Y-87285714D01* X50305314Y-87285714D02* X50448171Y-87285714D01* X50448171Y-87285714D02* X50591028Y-86714285D01* X53434600Y-77342857D02* X53506028Y-77514286D01* X53506028Y-77514286D02* X53506028Y-77800000D01* X53506028Y-77800000D02* X53434600Y-77914286D01* X53434600Y-77914286D02* X53363171Y-77971428D01* X53363171Y-77971428D02* X53220314Y-78028571D01* X53220314Y-78028571D02* X53077457Y-78028571D01* X53077457Y-78028571D02* X52934600Y-77971428D01* X52934600Y-77971428D02* X52863171Y-77914286D01* X52863171Y-77914286D02* X52791742Y-77800000D01* X52791742Y-77800000D02* X52720314Y-77571428D01* X52720314Y-77571428D02* X52648885Y-77457143D01* X52648885Y-77457143D02* X52577457Y-77400000D01* X52577457Y-77400000D02* X52434600Y-77342857D01* X52434600Y-77342857D02* X52291742Y-77342857D01* X52291742Y-77342857D02* X52148885Y-77400000D01* X52148885Y-77400000D02* X52077457Y-77457143D01* X52077457Y-77457143D02* X52006028Y-77571428D01* X52006028Y-77571428D02* X52006028Y-77857143D01* X52006028Y-77857143D02* X52077457Y-78028571D01* X52506028Y-78428571D02* X53506028Y-78657143D01* X53506028Y-78657143D02* X52791742Y-78885714D01* X52791742Y-78885714D02* X53506028Y-79114285D01* X53506028Y-79114285D02* X52506028Y-79342857D01* X53506028Y-79800000D02* X52506028Y-79800000D01* X52006028Y-79800000D02* X52077457Y-79742857D01* X52077457Y-79742857D02* X52148885Y-79800000D01* X52148885Y-79800000D02* X52077457Y-79857143D01* X52077457Y-79857143D02* X52006028Y-79800000D01* X52006028Y-79800000D02* X52148885Y-79800000D01* X52506028Y-80200000D02* X52506028Y-80657143D01* X52006028Y-80371429D02* X53291742Y-80371429D01* X53291742Y-80371429D02* X53434600Y-80428572D01* X53434600Y-80428572D02* X53506028Y-80542857D01* X53506028Y-80542857D02* X53506028Y-80657143D01* X53434600Y-81571429D02* X53506028Y-81457143D01* X53506028Y-81457143D02* X53506028Y-81228571D01* X53506028Y-81228571D02* X53434600Y-81114286D01* X53434600Y-81114286D02* X53363171Y-81057143D01* X53363171Y-81057143D02* X53220314Y-81000000D01* X53220314Y-81000000D02* X52791742Y-81000000D01* X52791742Y-81000000D02* X52648885Y-81057143D01* X52648885Y-81057143D02* X52577457Y-81114286D01* X52577457Y-81114286D02* X52506028Y-81228571D01* X52506028Y-81228571D02* X52506028Y-81457143D01* X52506028Y-81457143D02* X52577457Y-81571429D01* X53506028Y-82085714D02* X52006028Y-82085714D01* X53506028Y-82600000D02* X52720314Y-82600000D01* X52720314Y-82600000D02* X52577457Y-82542857D01* X52577457Y-82542857D02* X52506028Y-82428571D01* X52506028Y-82428571D02* X52506028Y-82257142D01* X52506028Y-82257142D02* X52577457Y-82142857D01* X52577457Y-82142857D02* X52648885Y-82085714D01* X93166517Y-114364980D02* X93166517Y-113264980D01* X93166517Y-113684028D02* X93061755Y-113631647D01* X93061755Y-113631647D02* X92852231Y-113631647D01* X92852231Y-113631647D02* X92747469Y-113684028D01* X92747469Y-113684028D02* X92695088Y-113736409D01* X92695088Y-113736409D02* X92642707Y-113841171D01* X92642707Y-113841171D02* X92642707Y-114155457D01* X92642707Y-114155457D02* X92695088Y-114260219D01* X92695088Y-114260219D02* X92747469Y-114312600D01* X92747469Y-114312600D02* X92852231Y-114364980D01* X92852231Y-114364980D02* X93061755Y-114364980D01* X93061755Y-114364980D02* X93166517Y-114312600D01* X92276041Y-113631647D02* X92014136Y-114364980D01* X91752231Y-113631647D02* X92014136Y-114364980D01* X92014136Y-114364980D02* X92118898Y-114626885D01* X92118898Y-114626885D02* X92171279Y-114679266D01* X92171279Y-114679266D02* X92276041Y-114731647D01* X90495089Y-114364980D02* X90495089Y-113264980D01* X90495089Y-113788790D02* X89866517Y-113788790D01* X89866517Y-114364980D02* X89866517Y-113264980D01* X89342708Y-114364980D02* X89342708Y-113631647D01* X89342708Y-113841171D02* X89290327Y-113736409D01* X89290327Y-113736409D02* X89237946Y-113684028D01* X89237946Y-113684028D02* X89133184Y-113631647D01* X89133184Y-113631647D02* X89028422Y-113631647D01* X88766518Y-113631647D02* X88504613Y-114364980D01* X88504613Y-114364980D02* X88242708Y-113631647D01* X87666518Y-114364980D02* X87771280Y-114312600D01* X87771280Y-114312600D02* X87823661Y-114260219D01* X87823661Y-114260219D02* X87876042Y-114155457D01* X87876042Y-114155457D02* X87876042Y-113841171D01* X87876042Y-113841171D02* X87823661Y-113736409D01* X87823661Y-113736409D02* X87771280Y-113684028D01* X87771280Y-113684028D02* X87666518Y-113631647D01* X87666518Y-113631647D02* X87509375Y-113631647D01* X87509375Y-113631647D02* X87404613Y-113684028D01* X87404613Y-113684028D02* X87352232Y-113736409D01* X87352232Y-113736409D02* X87299851Y-113841171D01* X87299851Y-113841171D02* X87299851Y-114155457D01* X87299851Y-114155457D02* X87352232Y-114260219D01* X87352232Y-114260219D02* X87404613Y-114312600D01* X87404613Y-114312600D02* X87509375Y-114364980D01* X87509375Y-114364980D02* X87666518Y-114364980D01* X86828423Y-113631647D02* X86828423Y-114574504D01* X86828423Y-114574504D02* X86880804Y-114679266D01* X86880804Y-114679266D02* X86985566Y-114731647D01* X86985566Y-114731647D02* X87037947Y-114731647D01* X86828423Y-113264980D02* X86880804Y-113317361D01* X86880804Y-113317361D02* X86828423Y-113369742D01* X86828423Y-113369742D02* X86776042Y-113317361D01* X86776042Y-113317361D02* X86828423Y-113264980D01* X86828423Y-113264980D02* X86828423Y-113369742D01* X85885565Y-114312600D02* X85990327Y-114364980D01* X85990327Y-114364980D02* X86199851Y-114364980D01* X86199851Y-114364980D02* X86304613Y-114312600D01* X86304613Y-114312600D02* X86356994Y-114207838D01* X86356994Y-114207838D02* X86356994Y-113788790D01* X86356994Y-113788790D02* X86304613Y-113684028D01* X86304613Y-113684028D02* X86199851Y-113631647D01* X86199851Y-113631647D02* X85990327Y-113631647D01* X85990327Y-113631647D02* X85885565Y-113684028D01* X85885565Y-113684028D02* X85833184Y-113788790D01* X85833184Y-113788790D02* X85833184Y-113893552D01* X85833184Y-113893552D02* X86356994Y-113998314D01* X83895089Y-114260219D02* X83947470Y-114312600D01* X83947470Y-114312600D02* X84104613Y-114364980D01* X84104613Y-114364980D02* X84209375Y-114364980D01* X84209375Y-114364980D02* X84366518Y-114312600D01* X84366518Y-114312600D02* X84471280Y-114207838D01* X84471280Y-114207838D02* X84523661Y-114103076D01* X84523661Y-114103076D02* X84576042Y-113893552D01* X84576042Y-113893552D02* X84576042Y-113736409D01* X84576042Y-113736409D02* X84523661Y-113526885D01* X84523661Y-113526885D02* X84471280Y-113422123D01* X84471280Y-113422123D02* X84366518Y-113317361D01* X84366518Y-113317361D02* X84209375Y-113264980D01* X84209375Y-113264980D02* X84104613Y-113264980D01* X84104613Y-113264980D02* X83947470Y-113317361D01* X83947470Y-113317361D02* X83895089Y-113369742D01* X82952232Y-114364980D02* X82952232Y-113788790D01* X82952232Y-113788790D02* X83004613Y-113684028D01* X83004613Y-113684028D02* X83109375Y-113631647D01* X83109375Y-113631647D02* X83318899Y-113631647D01* X83318899Y-113631647D02* X83423661Y-113684028D01* X82952232Y-114312600D02* X83056994Y-114364980D01* X83056994Y-114364980D02* X83318899Y-114364980D01* X83318899Y-114364980D02* X83423661Y-114312600D01* X83423661Y-114312600D02* X83476042Y-114207838D01* X83476042Y-114207838D02* X83476042Y-114103076D01* X83476042Y-114103076D02* X83423661Y-113998314D01* X83423661Y-113998314D02* X83318899Y-113945933D01* X83318899Y-113945933D02* X83056994Y-113945933D01* X83056994Y-113945933D02* X82952232Y-113893552D01* X82533185Y-113631647D02* X82271280Y-114364980D01* X82271280Y-114364980D02* X82009375Y-113631647D01* X81590328Y-114364980D02* X81590328Y-113631647D01* X81590328Y-113841171D02* X81537947Y-113736409D01* X81537947Y-113736409D02* X81485566Y-113684028D01* X81485566Y-113684028D02* X81380804Y-113631647D01* X81380804Y-113631647D02* X81276042Y-113631647D01* X80437947Y-114364980D02* X80437947Y-113788790D01* X80437947Y-113788790D02* X80490328Y-113684028D01* X80490328Y-113684028D02* X80595090Y-113631647D01* X80595090Y-113631647D02* X80804614Y-113631647D01* X80804614Y-113631647D02* X80909376Y-113684028D01* X80437947Y-114312600D02* X80542709Y-114364980D01* X80542709Y-114364980D02* X80804614Y-114364980D01* X80804614Y-114364980D02* X80909376Y-114312600D01* X80909376Y-114312600D02* X80961757Y-114207838D01* X80961757Y-114207838D02* X80961757Y-114103076D01* X80961757Y-114103076D02* X80909376Y-113998314D01* X80909376Y-113998314D02* X80804614Y-113945933D01* X80804614Y-113945933D02* X80542709Y-113945933D01* X80542709Y-113945933D02* X80437947Y-113893552D01* X79914138Y-114364980D02* X79914138Y-113264980D01* X79809376Y-113945933D02* X79495090Y-114364980D01* X79495090Y-113631647D02* X79914138Y-114050695D01* X78971281Y-114312600D02* X78971281Y-114364980D01* X78971281Y-114364980D02* X79023662Y-114469742D01* X79023662Y-114469742D02* X79076043Y-114522123D01* X77452233Y-113264980D02* X77347471Y-113264980D01* X77347471Y-113264980D02* X77242709Y-113317361D01* X77242709Y-113317361D02* X77190328Y-113369742D01* X77190328Y-113369742D02* X77137947Y-113474504D01* X77137947Y-113474504D02* X77085566Y-113684028D01* X77085566Y-113684028D02* X77085566Y-113945933D01* X77085566Y-113945933D02* X77137947Y-114155457D01* X77137947Y-114155457D02* X77190328Y-114260219D01* X77190328Y-114260219D02* X77242709Y-114312600D01* X77242709Y-114312600D02* X77347471Y-114364980D01* X77347471Y-114364980D02* X77452233Y-114364980D01* X77452233Y-114364980D02* X77556995Y-114312600D01* X77556995Y-114312600D02* X77609376Y-114260219D01* X77609376Y-114260219D02* X77661757Y-114155457D01* X77661757Y-114155457D02* X77714138Y-113945933D01* X77714138Y-113945933D02* X77714138Y-113684028D01* X77714138Y-113684028D02* X77661757Y-113474504D01* X77661757Y-113474504D02* X77609376Y-113369742D01* X77609376Y-113369742D02* X77556995Y-113317361D01* X77556995Y-113317361D02* X77452233Y-113264980D01* X76037947Y-114364980D02* X76666519Y-114364980D01* X76352233Y-114364980D02* X76352233Y-113264980D01* X76352233Y-113264980D02* X76456995Y-113422123D01* X76456995Y-113422123D02* X76561757Y-113526885D01* X76561757Y-113526885D02* X76666519Y-113579266D01* X74780804Y-113212600D02* X75723662Y-114626885D01* X74466519Y-113369742D02* X74414138Y-113317361D01* X74414138Y-113317361D02* X74309376Y-113264980D01* X74309376Y-113264980D02* X74047471Y-113264980D01* X74047471Y-113264980D02* X73942709Y-113317361D01* X73942709Y-113317361D02* X73890328Y-113369742D01* X73890328Y-113369742D02* X73837947Y-113474504D01* X73837947Y-113474504D02* X73837947Y-113579266D01* X73837947Y-113579266D02* X73890328Y-113736409D01* X73890328Y-113736409D02* X74518900Y-114364980D01* X74518900Y-114364980D02* X73837947Y-114364980D01* X72895090Y-113631647D02* X72895090Y-114364980D01* X73156995Y-113212600D02* X73418900Y-113998314D01* X73418900Y-113998314D02* X72737947Y-113998314D01* D13* X86887942Y-66611604D02* X89887942Y-66611604D01* X89887942Y-66611604D02* X89887942Y-66016366D01* X89887942Y-66016366D02* X89745085Y-65659223D01* X89745085Y-65659223D02* X89459371Y-65421128D01* X89459371Y-65421128D02* X89173657Y-65302081D01* X89173657Y-65302081D02* X88602228Y-65183033D01* X88602228Y-65183033D02* X88173657Y-65183033D01* X88173657Y-65183033D02* X87602228Y-65302081D01* X87602228Y-65302081D02* X87316514Y-65421128D01* X87316514Y-65421128D02* X87030800Y-65659223D01* X87030800Y-65659223D02* X86887942Y-66016366D01* X86887942Y-66016366D02* X86887942Y-66611604D01* X87030800Y-63159223D02* X86887942Y-63397319D01* X86887942Y-63397319D02* X86887942Y-63873509D01* X86887942Y-63873509D02* X87030800Y-64111604D01* X87030800Y-64111604D02* X87316514Y-64230652D01* X87316514Y-64230652D02* X88459371Y-64230652D01* X88459371Y-64230652D02* X88745085Y-64111604D01* X88745085Y-64111604D02* X88887942Y-63873509D01* X88887942Y-63873509D02* X88887942Y-63397319D01* X88887942Y-63397319D02* X88745085Y-63159223D01* X88745085Y-63159223D02* X88459371Y-63040176D01* X88459371Y-63040176D02* X88173657Y-63040176D01* X88173657Y-63040176D02* X87887942Y-64230652D01* X87030800Y-62087795D02* X86887942Y-61849700D01* X86887942Y-61849700D02* X86887942Y-61373509D01* X86887942Y-61373509D02* X87030800Y-61135414D01* X87030800Y-61135414D02* X87316514Y-61016366D01* X87316514Y-61016366D02* X87459371Y-61016366D01* X87459371Y-61016366D02* X87745085Y-61135414D01* X87745085Y-61135414D02* X87887942Y-61373509D01* X87887942Y-61373509D02* X87887942Y-61730652D01* X87887942Y-61730652D02* X88030800Y-61968747D01* X88030800Y-61968747D02* X88316514Y-62087795D01* X88316514Y-62087795D02* X88459371Y-62087795D01* X88459371Y-62087795D02* X88745085Y-61968747D01* X88745085Y-61968747D02* X88887942Y-61730652D01* X88887942Y-61730652D02* X88887942Y-61373509D01* X88887942Y-61373509D02* X88745085Y-61135414D01* X86887942Y-59944937D02* X89887942Y-59944937D01* X88030800Y-59706842D02* X86887942Y-58992556D01* X88887942Y-58992556D02* X87745085Y-59944937D01* X86887942Y-57921127D02* X89887942Y-57921127D01* X88459371Y-57921127D02* X88459371Y-56492556D01* X86887942Y-56492556D02* X89887942Y-56492556D01* X86887942Y-54944937D02* X87030800Y-55183032D01* X87030800Y-55183032D02* X87173657Y-55302079D01* X87173657Y-55302079D02* X87459371Y-55421127D01* X87459371Y-55421127D02* X88316514Y-55421127D01* X88316514Y-55421127D02* X88602228Y-55302079D01* X88602228Y-55302079D02* X88745085Y-55183032D01* X88745085Y-55183032D02* X88887942Y-54944937D01* X88887942Y-54944937D02* X88887942Y-54587794D01* X88887942Y-54587794D02* X88745085Y-54349698D01* X88745085Y-54349698D02* X88602228Y-54230651D01* X88602228Y-54230651D02* X88316514Y-54111603D01* X88316514Y-54111603D02* X87459371Y-54111603D01* X87459371Y-54111603D02* X87173657Y-54230651D01* X87173657Y-54230651D02* X87030800Y-54349698D01* X87030800Y-54349698D02* X86887942Y-54587794D01* X86887942Y-54587794D02* X86887942Y-54944937D01* X88887942Y-53040174D02* X85887942Y-53040174D01* X88745085Y-53040174D02* X88887942Y-52802079D01* X88887942Y-52802079D02* X88887942Y-52325889D01* X88887942Y-52325889D02* X88745085Y-52087793D01* X88745085Y-52087793D02* X88602228Y-51968746D01* X88602228Y-51968746D02* X88316514Y-51849698D01* X88316514Y-51849698D02* X87459371Y-51849698D01* X87459371Y-51849698D02* X87173657Y-51968746D01* X87173657Y-51968746D02* X87030800Y-52087793D01* X87030800Y-52087793D02* X86887942Y-52325889D01* X86887942Y-52325889D02* X86887942Y-52802079D01* X86887942Y-52802079D02* X87030800Y-53040174D01* D12* X62776517Y-114364980D02* X62776517Y-113264980D01* X62305088Y-114364980D02* X62305088Y-113788790D01* X62305088Y-113788790D02* X62357469Y-113684028D01* X62357469Y-113684028D02* X62462231Y-113631647D01* X62462231Y-113631647D02* X62619374Y-113631647D01* X62619374Y-113631647D02* X62724136Y-113684028D01* X62724136Y-113684028D02* X62776517Y-113736409D01* X61938422Y-113631647D02* X61519374Y-113631647D01* X61781279Y-113264980D02* X61781279Y-114207838D01* X61781279Y-114207838D02* X61728898Y-114312600D01* X61728898Y-114312600D02* X61624136Y-114364980D01* X61624136Y-114364980D02* X61519374Y-114364980D01* X61309851Y-113631647D02* X60890803Y-113631647D01* X61152708Y-113264980D02* X61152708Y-114207838D01* X61152708Y-114207838D02* X61100327Y-114312600D01* X61100327Y-114312600D02* X60995565Y-114364980D01* X60995565Y-114364980D02* X60890803Y-114364980D01* X60524137Y-113631647D02* X60524137Y-114731647D01* X60524137Y-113684028D02* X60419375Y-113631647D01* X60419375Y-113631647D02* X60209851Y-113631647D01* X60209851Y-113631647D02* X60105089Y-113684028D01* X60105089Y-113684028D02* X60052708Y-113736409D01* X60052708Y-113736409D02* X60000327Y-113841171D01* X60000327Y-113841171D02* X60000327Y-114155457D01* X60000327Y-114155457D02* X60052708Y-114260219D01* X60052708Y-114260219D02* X60105089Y-114312600D01* X60105089Y-114312600D02* X60209851Y-114364980D01* X60209851Y-114364980D02* X60419375Y-114364980D01* X60419375Y-114364980D02* X60524137Y-114312600D01* X59581280Y-114312600D02* X59476518Y-114364980D01* X59476518Y-114364980D02* X59266994Y-114364980D01* X59266994Y-114364980D02* X59162232Y-114312600D01* X59162232Y-114312600D02* X59109851Y-114207838D01* X59109851Y-114207838D02* X59109851Y-114155457D01* X59109851Y-114155457D02* X59162232Y-114050695D01* X59162232Y-114050695D02* X59266994Y-113998314D01* X59266994Y-113998314D02* X59424137Y-113998314D01* X59424137Y-113998314D02* X59528899Y-113945933D01* X59528899Y-113945933D02* X59581280Y-113841171D01* X59581280Y-113841171D02* X59581280Y-113788790D01* X59581280Y-113788790D02* X59528899Y-113684028D01* X59528899Y-113684028D02* X59424137Y-113631647D01* X59424137Y-113631647D02* X59266994Y-113631647D01* X59266994Y-113631647D02* X59162232Y-113684028D01* X58638423Y-114260219D02* X58586042Y-114312600D01* X58586042Y-114312600D02* X58638423Y-114364980D01* X58638423Y-114364980D02* X58690804Y-114312600D01* X58690804Y-114312600D02* X58638423Y-114260219D01* X58638423Y-114260219D02* X58638423Y-114364980D01* X58638423Y-113684028D02* X58586042Y-113736409D01* X58586042Y-113736409D02* X58638423Y-113788790D01* X58638423Y-113788790D02* X58690804Y-113736409D01* X58690804Y-113736409D02* X58638423Y-113684028D01* X58638423Y-113684028D02* X58638423Y-113788790D01* X57328898Y-113212600D02* X58271756Y-114626885D01* X56176517Y-113212600D02* X57119375Y-114626885D01* X55338422Y-113631647D02* X55338422Y-114522123D01* X55338422Y-114522123D02* X55390803Y-114626885D01* X55390803Y-114626885D02* X55443184Y-114679266D01* X55443184Y-114679266D02* X55547946Y-114731647D01* X55547946Y-114731647D02* X55705089Y-114731647D01* X55705089Y-114731647D02* X55809851Y-114679266D01* X55338422Y-114312600D02* X55443184Y-114364980D01* X55443184Y-114364980D02* X55652708Y-114364980D01* X55652708Y-114364980D02* X55757470Y-114312600D01* X55757470Y-114312600D02* X55809851Y-114260219D01* X55809851Y-114260219D02* X55862232Y-114155457D01* X55862232Y-114155457D02* X55862232Y-113841171D01* X55862232Y-113841171D02* X55809851Y-113736409D01* X55809851Y-113736409D02* X55757470Y-113684028D01* X55757470Y-113684028D02* X55652708Y-113631647D01* X55652708Y-113631647D02* X55443184Y-113631647D01* X55443184Y-113631647D02* X55338422Y-113684028D01* X54814613Y-114364980D02* X54814613Y-113631647D01* X54814613Y-113264980D02* X54866994Y-113317361D01* X54866994Y-113317361D02* X54814613Y-113369742D01* X54814613Y-113369742D02* X54762232Y-113317361D01* X54762232Y-113317361D02* X54814613Y-113264980D01* X54814613Y-113264980D02* X54814613Y-113369742D01* X54447946Y-113631647D02* X54028898Y-113631647D01* X54290803Y-113264980D02* X54290803Y-114207838D01* X54290803Y-114207838D02* X54238422Y-114312600D01* X54238422Y-114312600D02* X54133660Y-114364980D01* X54133660Y-114364980D02* X54028898Y-114364980D01* X53662232Y-114364980D02* X53662232Y-113264980D01* X53190803Y-114364980D02* X53190803Y-113788790D01* X53190803Y-113788790D02* X53243184Y-113684028D01* X53243184Y-113684028D02* X53347946Y-113631647D01* X53347946Y-113631647D02* X53505089Y-113631647D01* X53505089Y-113631647D02* X53609851Y-113684028D01* X53609851Y-113684028D02* X53662232Y-113736409D01* X52195565Y-113631647D02* X52195565Y-114364980D01* X52666994Y-113631647D02* X52666994Y-114207838D01* X52666994Y-114207838D02* X52614613Y-114312600D01* X52614613Y-114312600D02* X52509851Y-114364980D01* X52509851Y-114364980D02* X52352708Y-114364980D01* X52352708Y-114364980D02* X52247946Y-114312600D01* X52247946Y-114312600D02* X52195565Y-114260219D01* X51671756Y-114364980D02* X51671756Y-113264980D01* X51671756Y-113684028D02* X51566994Y-113631647D01* X51566994Y-113631647D02* X51357470Y-113631647D01* X51357470Y-113631647D02* X51252708Y-113684028D01* X51252708Y-113684028D02* X51200327Y-113736409D01* X51200327Y-113736409D02* X51147946Y-113841171D01* X51147946Y-113841171D02* X51147946Y-114155457D01* X51147946Y-114155457D02* X51200327Y-114260219D01* X51200327Y-114260219D02* X51252708Y-114312600D01* X51252708Y-114312600D02* X51357470Y-114364980D01* X51357470Y-114364980D02* X51566994Y-114364980D01* X51566994Y-114364980D02* X51671756Y-114312600D01* X50676518Y-114260219D02* X50624137Y-114312600D01* X50624137Y-114312600D02* X50676518Y-114364980D01* X50676518Y-114364980D02* X50728899Y-114312600D01* X50728899Y-114312600D02* X50676518Y-114260219D01* X50676518Y-114260219D02* X50676518Y-114364980D01* X49681279Y-114312600D02* X49786041Y-114364980D01* X49786041Y-114364980D02* X49995565Y-114364980D01* X49995565Y-114364980D02* X50100327Y-114312600D01* X50100327Y-114312600D02* X50152708Y-114260219D01* X50152708Y-114260219D02* X50205089Y-114155457D01* X50205089Y-114155457D02* X50205089Y-113841171D01* X50205089Y-113841171D02* X50152708Y-113736409D01* X50152708Y-113736409D02* X50100327Y-113684028D01* X50100327Y-113684028D02* X49995565Y-113631647D01* X49995565Y-113631647D02* X49786041Y-113631647D01* X49786041Y-113631647D02* X49681279Y-113684028D01* X49052708Y-114364980D02* X49157470Y-114312600D01* X49157470Y-114312600D02* X49209851Y-114260219D01* X49209851Y-114260219D02* X49262232Y-114155457D01* X49262232Y-114155457D02* X49262232Y-113841171D01* X49262232Y-113841171D02* X49209851Y-113736409D01* X49209851Y-113736409D02* X49157470Y-113684028D01* X49157470Y-113684028D02* X49052708Y-113631647D01* X49052708Y-113631647D02* X48895565Y-113631647D01* X48895565Y-113631647D02* X48790803Y-113684028D01* X48790803Y-113684028D02* X48738422Y-113736409D01* X48738422Y-113736409D02* X48686041Y-113841171D01* X48686041Y-113841171D02* X48686041Y-114155457D01* X48686041Y-114155457D02* X48738422Y-114260219D01* X48738422Y-114260219D02* X48790803Y-114312600D01* X48790803Y-114312600D02* X48895565Y-114364980D01* X48895565Y-114364980D02* X49052708Y-114364980D01* X48214613Y-114364980D02* X48214613Y-113631647D01* X48214613Y-113736409D02* X48162232Y-113684028D01* X48162232Y-113684028D02* X48057470Y-113631647D01* X48057470Y-113631647D02* X47900327Y-113631647D01* X47900327Y-113631647D02* X47795565Y-113684028D01* X47795565Y-113684028D02* X47743184Y-113788790D01* X47743184Y-113788790D02* X47743184Y-114364980D01* X47743184Y-113788790D02* X47690803Y-113684028D01* X47690803Y-113684028D02* X47586041Y-113631647D01* X47586041Y-113631647D02* X47428898Y-113631647D01* X47428898Y-113631647D02* X47324137Y-113684028D01* X47324137Y-113684028D02* X47271756Y-113788790D01* X47271756Y-113788790D02* X47271756Y-114364980D01* X45962231Y-113212600D02* X46905089Y-114626885D01* X45595565Y-114364980D02* X45595565Y-113264980D01* X45124136Y-114364980D02* X45124136Y-113788790D01* X45124136Y-113788790D02* X45176517Y-113684028D01* X45176517Y-113684028D02* X45281279Y-113631647D01* X45281279Y-113631647D02* X45438422Y-113631647D01* X45438422Y-113631647D02* X45543184Y-113684028D01* X45543184Y-113684028D02* X45595565Y-113736409D01* X44600327Y-114364980D02* X44600327Y-113631647D01* X44600327Y-113841171D02* X44547946Y-113736409D01* X44547946Y-113736409D02* X44495565Y-113684028D01* X44495565Y-113684028D02* X44390803Y-113631647D01* X44390803Y-113631647D02* X44286041Y-113631647D01* X44024137Y-113631647D02* X43762232Y-114364980D01* X43762232Y-114364980D02* X43500327Y-113631647D01* X42609851Y-114364980D02* X42609851Y-113788790D01* X42609851Y-113788790D02* X42662232Y-113684028D01* X42662232Y-113684028D02* X42766994Y-113631647D01* X42766994Y-113631647D02* X42976518Y-113631647D01* X42976518Y-113631647D02* X43081280Y-113684028D01* X42609851Y-114312600D02* X42714613Y-114364980D01* X42714613Y-114364980D02* X42976518Y-114364980D01* X42976518Y-114364980D02* X43081280Y-114312600D01* X43081280Y-114312600D02* X43133661Y-114207838D01* X43133661Y-114207838D02* X43133661Y-114103076D01* X43133661Y-114103076D02* X43081280Y-113998314D01* X43081280Y-113998314D02* X42976518Y-113945933D01* X42976518Y-113945933D02* X42714613Y-113945933D01* X42714613Y-113945933D02* X42609851Y-113893552D01* X41614613Y-114312600D02* X41719375Y-114364980D01* X41719375Y-114364980D02* X41928899Y-114364980D01* X41928899Y-114364980D02* X42033661Y-114312600D01* X42033661Y-114312600D02* X42086042Y-114260219D01* X42086042Y-114260219D02* X42138423Y-114155457D01* X42138423Y-114155457D02* X42138423Y-113841171D01* X42138423Y-113841171D02* X42086042Y-113736409D01* X42086042Y-113736409D02* X42033661Y-113684028D01* X42033661Y-113684028D02* X41928899Y-113631647D01* X41928899Y-113631647D02* X41719375Y-113631647D01* X41719375Y-113631647D02* X41614613Y-113684028D01* X41143185Y-114364980D02* X41143185Y-113264980D01* X40671756Y-114364980D02* X40671756Y-113788790D01* X40671756Y-113788790D02* X40724137Y-113684028D01* X40724137Y-113684028D02* X40828899Y-113631647D01* X40828899Y-113631647D02* X40986042Y-113631647D01* X40986042Y-113631647D02* X41090804Y-113684028D01* X41090804Y-113684028D02* X41143185Y-113736409D01* X99044980Y-43653482D02* X98311647Y-43653482D01* X98521171Y-43653482D02* X98416409Y-43705863D01* X98416409Y-43705863D02* X98364028Y-43758244D01* X98364028Y-43758244D02* X98311647Y-43863006D01* X98311647Y-43863006D02* X98311647Y-43967768D01* X98992600Y-44753482D02* X99044980Y-44648720D01* X99044980Y-44648720D02* X99044980Y-44439196D01* X99044980Y-44439196D02* X98992600Y-44334434D01* X98992600Y-44334434D02* X98887838Y-44282053D01* X98887838Y-44282053D02* X98468790Y-44282053D01* X98468790Y-44282053D02* X98364028Y-44334434D01* X98364028Y-44334434D02* X98311647Y-44439196D01* X98311647Y-44439196D02* X98311647Y-44648720D01* X98311647Y-44648720D02* X98364028Y-44753482D01* X98364028Y-44753482D02* X98468790Y-44805863D01* X98468790Y-44805863D02* X98573552Y-44805863D01* X98573552Y-44805863D02* X98678314Y-44282053D01* X98311647Y-45172529D02* X99044980Y-45434434D01* X99044980Y-45434434D02* X98311647Y-45696339D01* X99044980Y-47529672D02* X99044980Y-46901100D01* X99044980Y-47215386D02* X97944980Y-47215386D01* X97944980Y-47215386D02* X98102123Y-47110624D01* X98102123Y-47110624D02* X98206885Y-47005862D01* X98206885Y-47005862D02* X98259266Y-46901100D01* X98940219Y-48001100D02* X98992600Y-48053481D01* X98992600Y-48053481D02* X99044980Y-48001100D01* X99044980Y-48001100D02* X98992600Y-47948719D01* X98992600Y-47948719D02* X98940219Y-48001100D01* X98940219Y-48001100D02* X99044980Y-48001100D01* X99044980Y-49101101D02* X99044980Y-48472529D01* X99044980Y-48786815D02* X97944980Y-48786815D01* X97944980Y-48786815D02* X98102123Y-48682053D01* X98102123Y-48682053D02* X98206885Y-48577291D01* X98206885Y-48577291D02* X98259266Y-48472529D01* X83568971Y-66758570D02* X85068971Y-66758570D01* X83568971Y-66072856D02* X84426114Y-66587142D01* X85068971Y-66072856D02* X84211828Y-66758570D01* X83640400Y-65101427D02* X83568971Y-65215713D01* X83568971Y-65215713D02* X83568971Y-65444285D01* X83568971Y-65444285D02* X83640400Y-65558570D01* X83640400Y-65558570D02* X83783257Y-65615713D01* X83783257Y-65615713D02* X84354685Y-65615713D01* X84354685Y-65615713D02* X84497542Y-65558570D01* X84497542Y-65558570D02* X84568971Y-65444285D01* X84568971Y-65444285D02* X84568971Y-65215713D01* X84568971Y-65215713D02* X84497542Y-65101427D01* X84497542Y-65101427D02* X84354685Y-65044285D01* X84354685Y-65044285D02* X84211828Y-65044285D01* X84211828Y-65044285D02* X84068971Y-65615713D01* X84568971Y-64644285D02* X83568971Y-64358571D01* X84568971Y-64072856D02* X83568971Y-64358571D01* X83568971Y-64358571D02* X83211828Y-64472856D01* X83211828Y-64472856D02* X83140400Y-64529999D01* X83140400Y-64529999D02* X83068971Y-64644285D01* X83568971Y-63615713D02* X85068971Y-63615713D01* X84497542Y-63615713D02* X84568971Y-63501428D01* X84568971Y-63501428D02* X84568971Y-63272856D01* X84568971Y-63272856D02* X84497542Y-63158570D01* X84497542Y-63158570D02* X84426114Y-63101428D01* X84426114Y-63101428D02* X84283257Y-63044285D01* X84283257Y-63044285D02* X83854685Y-63044285D01* X83854685Y-63044285D02* X83711828Y-63101428D01* X83711828Y-63101428D02* X83640400Y-63158570D01* X83640400Y-63158570D02* X83568971Y-63272856D01* X83568971Y-63272856D02* X83568971Y-63501428D01* X83568971Y-63501428D02* X83640400Y-63615713D01* X83568971Y-62358571D02* X83640400Y-62472856D01* X83640400Y-62472856D02* X83711828Y-62529999D01* X83711828Y-62529999D02* X83854685Y-62587142D01* X83854685Y-62587142D02* X84283257Y-62587142D01* X84283257Y-62587142D02* X84426114Y-62529999D01* X84426114Y-62529999D02* X84497542Y-62472856D01* X84497542Y-62472856D02* X84568971Y-62358571D01* X84568971Y-62358571D02* X84568971Y-62187142D01* X84568971Y-62187142D02* X84497542Y-62072856D01* X84497542Y-62072856D02* X84426114Y-62015714D01* X84426114Y-62015714D02* X84283257Y-61958571D01* X84283257Y-61958571D02* X83854685Y-61958571D01* X83854685Y-61958571D02* X83711828Y-62015714D01* X83711828Y-62015714D02* X83640400Y-62072856D01* X83640400Y-62072856D02* X83568971Y-62187142D01* X83568971Y-62187142D02* X83568971Y-62358571D01* X83568971Y-60930000D02* X84354685Y-60930000D01* X84354685Y-60930000D02* X84497542Y-60987142D01* X84497542Y-60987142D02* X84568971Y-61101428D01* X84568971Y-61101428D02* X84568971Y-61330000D01* X84568971Y-61330000D02* X84497542Y-61444285D01* X83640400Y-60930000D02* X83568971Y-61044285D01* X83568971Y-61044285D02* X83568971Y-61330000D01* X83568971Y-61330000D02* X83640400Y-61444285D01* X83640400Y-61444285D02* X83783257Y-61501428D01* X83783257Y-61501428D02* X83926114Y-61501428D01* X83926114Y-61501428D02* X84068971Y-61444285D01* X84068971Y-61444285D02* X84140400Y-61330000D01* X84140400Y-61330000D02* X84140400Y-61044285D01* X84140400Y-61044285D02* X84211828Y-60930000D01* X83568971Y-60358571D02* X84568971Y-60358571D01* X84283257Y-60358571D02* X84426114Y-60301428D01* X84426114Y-60301428D02* X84497542Y-60244286D01* X84497542Y-60244286D02* X84568971Y-60130000D01* X84568971Y-60130000D02* X84568971Y-60015714D01* X83568971Y-59101429D02* X85068971Y-59101429D01* X83640400Y-59101429D02* X83568971Y-59215714D01* X83568971Y-59215714D02* X83568971Y-59444286D01* X83568971Y-59444286D02* X83640400Y-59558571D01* X83640400Y-59558571D02* X83711828Y-59615714D01* X83711828Y-59615714D02* X83854685Y-59672857D01* X83854685Y-59672857D02* X84283257Y-59672857D01* X84283257Y-59672857D02* X84426114Y-59615714D01* X84426114Y-59615714D02* X84497542Y-59558571D01* X84497542Y-59558571D02* X84568971Y-59444286D01* X84568971Y-59444286D02* X84568971Y-59215714D01* X84568971Y-59215714D02* X84497542Y-59101429D01* X85140400Y-57672857D02* X83211828Y-58701429D01* X83568971Y-57272857D02* X85068971Y-57272857D01* X85068971Y-57272857D02* X83997542Y-56872857D01* X83997542Y-56872857D02* X85068971Y-56472857D01* X85068971Y-56472857D02* X83568971Y-56472857D01* X83568971Y-55730000D02* X83640400Y-55844285D01* X83640400Y-55844285D02* X83711828Y-55901428D01* X83711828Y-55901428D02* X83854685Y-55958571D01* X83854685Y-55958571D02* X84283257Y-55958571D01* X84283257Y-55958571D02* X84426114Y-55901428D01* X84426114Y-55901428D02* X84497542Y-55844285D01* X84497542Y-55844285D02* X84568971Y-55730000D01* X84568971Y-55730000D02* X84568971Y-55558571D01* X84568971Y-55558571D02* X84497542Y-55444285D01* X84497542Y-55444285D02* X84426114Y-55387143D01* X84426114Y-55387143D02* X84283257Y-55330000D01* X84283257Y-55330000D02* X83854685Y-55330000D01* X83854685Y-55330000D02* X83711828Y-55387143D01* X83711828Y-55387143D02* X83640400Y-55444285D01* X83640400Y-55444285D02* X83568971Y-55558571D01* X83568971Y-55558571D02* X83568971Y-55730000D01* X84568971Y-54301429D02* X83568971Y-54301429D01* X84568971Y-54815714D02* X83783257Y-54815714D01* X83783257Y-54815714D02* X83640400Y-54758571D01* X83640400Y-54758571D02* X83568971Y-54644286D01* X83568971Y-54644286D02* X83568971Y-54472857D01* X83568971Y-54472857D02* X83640400Y-54358571D01* X83640400Y-54358571D02* X83711828Y-54301429D01* X83640400Y-53787143D02* X83568971Y-53672857D01* X83568971Y-53672857D02* X83568971Y-53444286D01* X83568971Y-53444286D02* X83640400Y-53330000D01* X83640400Y-53330000D02* X83783257Y-53272857D01* X83783257Y-53272857D02* X83854685Y-53272857D01* X83854685Y-53272857D02* X83997542Y-53330000D01* X83997542Y-53330000D02* X84068971Y-53444286D01* X84068971Y-53444286D02* X84068971Y-53615715D01* X84068971Y-53615715D02* X84140400Y-53730000D01* X84140400Y-53730000D02* X84283257Y-53787143D01* X84283257Y-53787143D02* X84354685Y-53787143D01* X84354685Y-53787143D02* X84497542Y-53730000D01* X84497542Y-53730000D02* X84568971Y-53615715D01* X84568971Y-53615715D02* X84568971Y-53444286D01* X84568971Y-53444286D02* X84497542Y-53330000D01* X83640400Y-52301428D02* X83568971Y-52415714D01* X83568971Y-52415714D02* X83568971Y-52644286D01* X83568971Y-52644286D02* X83640400Y-52758571D01* X83640400Y-52758571D02* X83783257Y-52815714D01* X83783257Y-52815714D02* X84354685Y-52815714D01* X84354685Y-52815714D02* X84497542Y-52758571D01* X84497542Y-52758571D02* X84568971Y-52644286D01* X84568971Y-52644286D02* X84568971Y-52415714D01* X84568971Y-52415714D02* X84497542Y-52301428D01* X84497542Y-52301428D02* X84354685Y-52244286D01* X84354685Y-52244286D02* X84211828Y-52244286D01* X84211828Y-52244286D02* X84068971Y-52815714D01* X81225400Y-62187142D02* X81153971Y-62015714D01* X81153971Y-62015714D02* X81153971Y-61729999D01* X81153971Y-61729999D02* X81225400Y-61615714D01* X81225400Y-61615714D02* X81296828Y-61558571D01* X81296828Y-61558571D02* X81439685Y-61501428D01* X81439685Y-61501428D02* X81582542Y-61501428D01* X81582542Y-61501428D02* X81725400Y-61558571D01* X81725400Y-61558571D02* X81796828Y-61615714D01* X81796828Y-61615714D02* X81868257Y-61729999D01* X81868257Y-61729999D02* X81939685Y-61958571D01* X81939685Y-61958571D02* X82011114Y-62072856D01* X82011114Y-62072856D02* X82082542Y-62129999D01* X82082542Y-62129999D02* X82225400Y-62187142D01* X82225400Y-62187142D02* X82368257Y-62187142D01* X82368257Y-62187142D02* X82511114Y-62129999D01* X82511114Y-62129999D02* X82582542Y-62072856D01* X82582542Y-62072856D02* X82653971Y-61958571D01* X82653971Y-61958571D02* X82653971Y-61672856D01* X82653971Y-61672856D02* X82582542Y-61501428D01* X82153971Y-61101428D02* X81153971Y-60872857D01* X81153971Y-60872857D02* X81868257Y-60644285D01* X81868257Y-60644285D02* X81153971Y-60415714D01* X81153971Y-60415714D02* X82153971Y-60187142D01* X81153971Y-59729999D02* X82153971Y-59729999D01* X82653971Y-59729999D02* X82582542Y-59787142D01* X82582542Y-59787142D02* X82511114Y-59729999D01* X82511114Y-59729999D02* X82582542Y-59672856D01* X82582542Y-59672856D02* X82653971Y-59729999D01* X82653971Y-59729999D02* X82511114Y-59729999D01* X82153971Y-59329999D02* X82153971Y-58872856D01* X82653971Y-59158570D02* X81368257Y-59158570D01* X81368257Y-59158570D02* X81225400Y-59101427D01* X81225400Y-59101427D02* X81153971Y-58987142D01* X81153971Y-58987142D02* X81153971Y-58872856D01* X81225400Y-57958571D02* X81153971Y-58072856D01* X81153971Y-58072856D02* X81153971Y-58301428D01* X81153971Y-58301428D02* X81225400Y-58415713D01* X81225400Y-58415713D02* X81296828Y-58472856D01* X81296828Y-58472856D02* X81439685Y-58529999D01* X81439685Y-58529999D02* X81868257Y-58529999D01* X81868257Y-58529999D02* X82011114Y-58472856D01* X82011114Y-58472856D02* X82082542Y-58415713D01* X82082542Y-58415713D02* X82153971Y-58301428D01* X82153971Y-58301428D02* X82153971Y-58072856D01* X82153971Y-58072856D02* X82082542Y-57958571D01* X81153971Y-57444285D02* X82653971Y-57444285D01* X81153971Y-56930000D02* X81939685Y-56930000D01* X81939685Y-56930000D02* X82082542Y-56987142D01* X82082542Y-56987142D02* X82153971Y-57101428D01* X82153971Y-57101428D02* X82153971Y-57272857D01* X82153971Y-57272857D02* X82082542Y-57387142D01* X82082542Y-57387142D02* X82011114Y-57444285D01* D13* X47452057Y-72708395D02* X44452057Y-72708395D01* X44452057Y-72708395D02* X44452057Y-73303633D01* X44452057Y-73303633D02* X44594914Y-73660776D01* X44594914Y-73660776D02* X44880628Y-73898871D01* X44880628Y-73898871D02* X45166342Y-74017918D01* X45166342Y-74017918D02* X45737771Y-74136966D01* X45737771Y-74136966D02* X46166342Y-74136966D01* X46166342Y-74136966D02* X46737771Y-74017918D01* X46737771Y-74017918D02* X47023485Y-73898871D01* X47023485Y-73898871D02* X47309200Y-73660776D01* X47309200Y-73660776D02* X47452057Y-73303633D01* X47452057Y-73303633D02* X47452057Y-72708395D01* X47309200Y-76160776D02* X47452057Y-75922680D01* X47452057Y-75922680D02* X47452057Y-75446490D01* X47452057Y-75446490D02* X47309200Y-75208395D01* X47309200Y-75208395D02* X47023485Y-75089347D01* X47023485Y-75089347D02* X45880628Y-75089347D01* X45880628Y-75089347D02* X45594914Y-75208395D01* X45594914Y-75208395D02* X45452057Y-75446490D01* X45452057Y-75446490D02* X45452057Y-75922680D01* X45452057Y-75922680D02* X45594914Y-76160776D01* X45594914Y-76160776D02* X45880628Y-76279823D01* X45880628Y-76279823D02* X46166342Y-76279823D01* X46166342Y-76279823D02* X46452057Y-75089347D01* X47309200Y-77232204D02* X47452057Y-77470299D01* X47452057Y-77470299D02* X47452057Y-77946490D01* X47452057Y-77946490D02* X47309200Y-78184585D01* X47309200Y-78184585D02* X47023485Y-78303633D01* X47023485Y-78303633D02* X46880628Y-78303633D01* X46880628Y-78303633D02* X46594914Y-78184585D01* X46594914Y-78184585D02* X46452057Y-77946490D01* X46452057Y-77946490D02* X46452057Y-77589347D01* X46452057Y-77589347D02* X46309200Y-77351252D01* X46309200Y-77351252D02* X46023485Y-77232204D01* X46023485Y-77232204D02* X45880628Y-77232204D01* X45880628Y-77232204D02* X45594914Y-77351252D01* X45594914Y-77351252D02* X45452057Y-77589347D01* X45452057Y-77589347D02* X45452057Y-77946490D01* X45452057Y-77946490D02* X45594914Y-78184585D01* X47452057Y-79375062D02* X44452057Y-79375062D01* X46309200Y-79613157D02* X47452057Y-80327443D01* X45452057Y-80327443D02* X46594914Y-79375062D01* X47452057Y-81398872D02* X44452057Y-81398872D01* X45880628Y-81398872D02* X45880628Y-82827443D01* X47452057Y-82827443D02* X44452057Y-82827443D01* X47452057Y-84375062D02* X47309200Y-84136967D01* X47309200Y-84136967D02* X47166342Y-84017920D01* X47166342Y-84017920D02* X46880628Y-83898872D01* X46880628Y-83898872D02* X46023485Y-83898872D01* X46023485Y-83898872D02* X45737771Y-84017920D01* X45737771Y-84017920D02* X45594914Y-84136967D01* X45594914Y-84136967D02* X45452057Y-84375062D01* X45452057Y-84375062D02* X45452057Y-84732205D01* X45452057Y-84732205D02* X45594914Y-84970301D01* X45594914Y-84970301D02* X45737771Y-85089348D01* X45737771Y-85089348D02* X46023485Y-85208396D01* X46023485Y-85208396D02* X46880628Y-85208396D01* X46880628Y-85208396D02* X47166342Y-85089348D01* X47166342Y-85089348D02* X47309200Y-84970301D01* X47309200Y-84970301D02* X47452057Y-84732205D01* X47452057Y-84732205D02* X47452057Y-84375062D01* X45452057Y-86279825D02* X48452057Y-86279825D01* X45594914Y-86279825D02* X45452057Y-86517920D01* X45452057Y-86517920D02* X45452057Y-86994110D01* X45452057Y-86994110D02* X45594914Y-87232206D01* X45594914Y-87232206D02* X45737771Y-87351253D01* X45737771Y-87351253D02* X46023485Y-87470301D01* X46023485Y-87470301D02* X46880628Y-87470301D01* X46880628Y-87470301D02* X47166342Y-87351253D01* X47166342Y-87351253D02* X47309200Y-87232206D01* X47309200Y-87232206D02* X47452057Y-86994110D01* X47452057Y-86994110D02* X47452057Y-86517920D01* X47452057Y-86517920D02* X47309200Y-86279825D01* M02* ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-Edge_Cuts.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-09-14T16:33:58+02:00*% %TF.ProjectId,DeskHop_Rev1,4465736b-486f-4705-9f52-6576312e6b69,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Profile,NP*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-09-14 16:33:58* %MOMM*% %LPD*% G01* G04 APERTURE LIST* %TA.AperFunction,Profile*% %ADD10C,0.050000*% %TD*% G04 APERTURE END LIST* D10* X33773425Y-113566375D02* G75* G03* X35773403Y-115566375I1999975J-25D01* G01* X35773403Y-41085103D02* G75* G03* X33773403Y-43085124I-3J-1999997D01* G01* X98689573Y-115566373D02* G75* G03* X100689573Y-113566375I27J1999973D01* G01* X98689573Y-115566375D02* X35773403Y-115566375D01* X100689576Y-43085124D02* G75* G03* X98689573Y-41085124I-1999976J24D01* G01* X33773403Y-113566375D02* X33773403Y-43085124D01* X35773403Y-41085124D02* X98689573Y-41085124D01* X100689573Y-43085124D02* X100689573Y-113566375D01* M02* ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-F_Cu.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-09-14T16:33:58+02:00*% %TF.ProjectId,DeskHop_Rev1,4465736b-486f-4705-9f52-6576312e6b69,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Copper,L1,Top*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-09-14 16:33:58* %MOMM*% %LPD*% G01* G04 APERTURE LIST* G04 Aperture macros list* %AMRoundRect* 0 Rectangle with rounded corners* 0 $1 Rounding radius* 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners* 0 Add a 4 corners polygon primitive as box body* 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0* 0 Add four circle primitives for the rounded corners* 1,1,$1+$1,$2,$3* 1,1,$1+$1,$4,$5* 1,1,$1+$1,$6,$7* 1,1,$1+$1,$8,$9* 0 Add four rect primitives between the rounded corners* 20,1,$1+$1,$2,$3,$4,$5,0* 20,1,$1+$1,$4,$5,$6,$7,0* 20,1,$1+$1,$6,$7,$8,$9,0* 20,1,$1+$1,$8,$9,$2,$3,0*% G04 Aperture macros list end* %TA.AperFunction,ComponentPad*% %ADD10O,1.700000X1.700000*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD11R,3.500000X1.700000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD12R,1.700000X1.700000*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD13R,1.700000X3.500000*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD14RoundRect,0.250000X-0.250000X-0.475000X0.250000X-0.475000X0.250000X0.475000X-0.250000X0.475000X0*% %TD*% %TA.AperFunction,ComponentPad*% %ADD15R,1.600000X1.500000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD16C,1.600000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD17C,3.000000*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD18RoundRect,0.250000X-0.475000X0.250000X-0.475000X-0.250000X0.475000X-0.250000X0.475000X0.250000X0*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD19R,0.550013X1.000000*% %TD*% %TA.AperFunction,ComponentPad*% %ADD20C,3.100000*% %TD*% %TA.AperFunction,ConnectorPad*% %ADD21C,5.400000*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD22RoundRect,0.250000X-0.450000X0.262500X-0.450000X-0.262500X0.450000X-0.262500X0.450000X0.262500X0*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD23RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*% %TD*% %TA.AperFunction,SMDPad,CuDef*% %ADD24RoundRect,0.250000X0.250000X0.475000X-0.250000X0.475000X-0.250000X-0.475000X0.250000X-0.475000X0*% %TD*% %TA.AperFunction,Conductor*% %ADD25C,0.550000*% %TD*% %TA.AperFunction,Conductor*% %ADD26C,0.500000*% %TD*% %TA.AperFunction,Conductor*% %ADD27C,0.300000*% %TD*% G04 APERTURE END LIST* D10* %TO.P,U1,1,GPIO0*% %TO.N,unconnected-(U1-GPIO0-Pad1)*% X76454000Y-44704000D03* D11* X75554000Y-44704000D03* D10* %TO.P,U1,2,GPIO1*% %TO.N,unconnected-(U1-GPIO1-Pad2)*% X76454000Y-47244000D03* D11* X75554000Y-47244000D03* D12* %TO.P,U1,3,GND*% %TO.N,GND2*% X76454000Y-49784000D03* D11* X75554000Y-49784000D03* D10* %TO.P,U1,4,GPIO2*% X76454000Y-52324000D03* D11* X75554000Y-52324000D03* D10* %TO.P,U1,5,GPIO3*% %TO.N,unconnected-(U1-GPIO3-Pad5)*% X76454000Y-54864000D03* D11* X75554000Y-54864000D03* D10* %TO.P,U1,6,GPIO4*% %TO.N,unconnected-(U1-GPIO4-Pad6)*% X76454000Y-57404000D03* D11* X75554000Y-57404000D03* D10* %TO.P,U1,7,GPIO5*% %TO.N,unconnected-(U1-GPIO5-Pad7)*% X76454000Y-59944000D03* D11* X75554000Y-59944000D03* D12* %TO.P,U1,8,GND*% %TO.N,GND2*% X76454000Y-62484000D03* D11* X75554000Y-62484000D03* D10* %TO.P,U1,9,GPIO6*% %TO.N,unconnected-(U1-GPIO6-Pad9)*% X76454000Y-65024000D03* D11* X75554000Y-65024000D03* D10* %TO.P,U1,10,GPIO7*% %TO.N,unconnected-(U1-GPIO7-Pad10)*% X76454000Y-67564000D03* D11* X75554000Y-67564000D03* D10* %TO.P,U1,11,GPIO8*% %TO.N,unconnected-(U1-GPIO8-Pad11)*% X76454000Y-70104000D03* D11* X75554000Y-70104000D03* D10* %TO.P,U1,12,GPIO9*% %TO.N,unconnected-(U1-GPIO9-Pad12)*% X76454000Y-72644000D03* D11* X75554000Y-72644000D03* D12* %TO.P,U1,13,GND*% %TO.N,GND2*% X76454000Y-75184000D03* D11* X75554000Y-75184000D03* D10* %TO.P,U1,14,GPIO10*% %TO.N,unconnected-(U1-GPIO10-Pad14)*% X76454000Y-77724000D03* D11* X75554000Y-77724000D03* D10* %TO.P,U1,15,GPIO11*% %TO.N,unconnected-(U1-GPIO11-Pad15)*% X76454000Y-80264000D03* D11* X75554000Y-80264000D03* D10* %TO.P,U1,16,GPIO12*% %TO.N,UART A TX*% X76454000Y-82804000D03* D11* X75554000Y-82804000D03* D10* %TO.P,U1,17,GPIO13*% %TO.N,UART A RX*% X76454000Y-85344000D03* D11* X75554000Y-85344000D03* D12* %TO.P,U1,18,GND*% %TO.N,GND2*% X76454000Y-87884000D03* D11* X75554000Y-87884000D03* D10* %TO.P,U1,19,GPIO14*% %TO.N,/AD+*% X76454000Y-90424000D03* D11* X75554000Y-90424000D03* D10* %TO.P,U1,20,GPIO15*% %TO.N,/AD-*% X76454000Y-92964000D03* D11* X75554000Y-92964000D03* D10* %TO.P,U1,21,GPIO16*% %TO.N,unconnected-(U1-GPIO16-Pad21)*% X94234000Y-92964000D03* D11* X95134000Y-92964000D03* D10* %TO.P,U1,22,GPIO17*% %TO.N,unconnected-(U1-GPIO17-Pad22)*% X94234000Y-90424000D03* D11* X95134000Y-90424000D03* D12* %TO.P,U1,23,GND*% %TO.N,GND2*% X94234000Y-87884000D03* D11* X95134000Y-87884000D03* D10* %TO.P,U1,24,GPIO18*% %TO.N,unconnected-(U1-GPIO18-Pad24)*% X94234000Y-85344000D03* D11* X95134000Y-85344000D03* D10* %TO.P,U1,25,GPIO19*% %TO.N,unconnected-(U1-GPIO19-Pad25)*% X94234000Y-82804000D03* D11* X95134000Y-82804000D03* D10* %TO.P,U1,26,GPIO20*% %TO.N,unconnected-(U1-GPIO20-Pad26)*% X94234000Y-80264000D03* D11* X95134000Y-80264000D03* D10* %TO.P,U1,27,GPIO21*% %TO.N,unconnected-(U1-GPIO21-Pad27)*% X94234000Y-77724000D03* D11* X95134000Y-77724000D03* D12* %TO.P,U1,28,GND*% %TO.N,GND2*% X94234000Y-75184000D03* D11* X95134000Y-75184000D03* D10* %TO.P,U1,29,GPIO22*% %TO.N,unconnected-(U1-GPIO22-Pad29)*% X94234000Y-72644000D03* D11* X95134000Y-72644000D03* D10* %TO.P,U1,30,RUN*% %TO.N,unconnected-(U1-RUN-Pad30)*% X94234000Y-70104000D03* D11* X95134000Y-70104000D03* D10* %TO.P,U1,31,GPIO26_ADC0*% %TO.N,unconnected-(U1-GPIO26_ADC0-Pad31)*% X94234000Y-67564000D03* D11* X95134000Y-67564000D03* D10* %TO.P,U1,32,GPIO27_ADC1*% %TO.N,unconnected-(U1-GPIO27_ADC1-Pad32)*% X94234000Y-65024000D03* D11* X95134000Y-65024000D03* D12* %TO.P,U1,33,AGND*% %TO.N,unconnected-(U1-AGND-Pad33)*% X94234000Y-62484000D03* D11* X95134000Y-62484000D03* D10* %TO.P,U1,34,GPIO28_ADC2*% %TO.N,unconnected-(U1-GPIO28_ADC2-Pad34)*% X94234000Y-59944000D03* D11* X95134000Y-59944000D03* D10* %TO.P,U1,35,ADC_VREF*% %TO.N,unconnected-(U1-ADC_VREF-Pad35)*% X94234000Y-57404000D03* D11* X95134000Y-57404000D03* D10* %TO.P,U1,36,3V3*% %TO.N,Net-(U1-3V3)*% X94234000Y-54864000D03* D11* X95134000Y-54864000D03* D10* %TO.P,U1,37,3V3_EN*% %TO.N,unconnected-(U1-3V3_EN-Pad37)*% X94234000Y-52324000D03* D11* X95134000Y-52324000D03* D12* %TO.P,U1,38,GND*% %TO.N,GND2*% X94234000Y-49784000D03* D11* X95134000Y-49784000D03* D10* %TO.P,U1,39,VSYS*% %TO.N,unconnected-(U1-VSYS-Pad39)*% X94234000Y-47244000D03* D11* X95134000Y-47244000D03* D10* %TO.P,U1,40,VBUS*% %TO.N,VBUS1*% X94234000Y-44704000D03* D11* X95134000Y-44704000D03* D10* %TO.P,U1,41,SWCLK*% %TO.N,Net-(J3-Pin_3)*% X82804000Y-92734000D03* D13* X82804000Y-93634000D03* D12* %TO.P,U1,42,GND*% %TO.N,GND2*% X85344000Y-92734000D03* D13* X85344000Y-93634000D03* D10* %TO.P,U1,43,SWDIO*% %TO.N,Net-(J3-Pin_1)*% X87884000Y-92734000D03* D13* X87884000Y-93634000D03* %TD*% D10* %TO.P,U2,1,GPIO0*% %TO.N,unconnected-(U2-GPIO0-Pad1)*% X39995523Y-44688249D03* D11* X39095523Y-44688249D03* D10* %TO.P,U2,2,GPIO1*% %TO.N,unconnected-(U2-GPIO1-Pad2)*% X39995523Y-47228249D03* D11* X39095523Y-47228249D03* D12* %TO.P,U2,3,GND*% %TO.N,GND*% X39995523Y-49768249D03* D11* X39095523Y-49768249D03* D10* %TO.P,U2,4,GPIO2*% %TO.N,unconnected-(U2-GPIO2-Pad4)*% X39995523Y-52308249D03* D11* X39095523Y-52308249D03* D10* %TO.P,U2,5,GPIO3*% %TO.N,unconnected-(U2-GPIO3-Pad5)*% X39995523Y-54848249D03* D11* X39095523Y-54848249D03* D10* %TO.P,U2,6,GPIO4*% %TO.N,unconnected-(U2-GPIO4-Pad6)*% X39995523Y-57388249D03* D11* X39095523Y-57388249D03* D10* %TO.P,U2,7,GPIO5*% %TO.N,unconnected-(U2-GPIO5-Pad7)*% X39995523Y-59928249D03* D11* X39095523Y-59928249D03* D12* %TO.P,U2,8,GND*% %TO.N,GND*% X39995523Y-62468249D03* D11* X39095523Y-62468249D03* D10* %TO.P,U2,9,GPIO6*% %TO.N,unconnected-(U2-GPIO6-Pad9)*% X39995523Y-65008249D03* D11* X39095523Y-65008249D03* D10* %TO.P,U2,10,GPIO7*% %TO.N,unconnected-(U2-GPIO7-Pad10)*% X39995523Y-67548249D03* D11* X39095523Y-67548249D03* D10* %TO.P,U2,11,GPIO8*% %TO.N,unconnected-(U2-GPIO8-Pad11)*% X39995523Y-70088249D03* D11* X39095523Y-70088249D03* D10* %TO.P,U2,12,GPIO9*% %TO.N,unconnected-(U2-GPIO9-Pad12)*% X39995523Y-72628249D03* D11* X39095523Y-72628249D03* D12* %TO.P,U2,13,GND*% %TO.N,GND*% X39995523Y-75168249D03* D11* X39095523Y-75168249D03* D10* %TO.P,U2,14,GPIO10*% %TO.N,unconnected-(U2-GPIO10-Pad14)*% X39995523Y-77708249D03* D11* X39095523Y-77708249D03* D10* %TO.P,U2,15,GPIO11*% %TO.N,unconnected-(U2-GPIO11-Pad15)*% X39995523Y-80248249D03* D11* X39095523Y-80248249D03* D10* %TO.P,U2,16,GPIO12*% %TO.N,unconnected-(U2-GPIO12-Pad16)*% X39995523Y-82788249D03* D11* X39095523Y-82788249D03* D10* %TO.P,U2,17,GPIO13*% %TO.N,unconnected-(U2-GPIO13-Pad17)*% X39995523Y-85328249D03* D11* X39095523Y-85328249D03* D12* %TO.P,U2,18,GND*% %TO.N,GND*% X39995523Y-87868249D03* D11* X39095523Y-87868249D03* D10* %TO.P,U2,19,GPIO14*% %TO.N,Net-(U2-GPIO14)*% X39995523Y-90408249D03* D11* X39095523Y-90408249D03* D10* %TO.P,U2,20,GPIO15*% %TO.N,Net-(U2-GPIO15)*% X39995523Y-92948249D03* D11* X39095523Y-92948249D03* D10* %TO.P,U2,21,GPIO16*% %TO.N,UART B TX*% X57775523Y-92948249D03* D11* X58675523Y-92948249D03* D10* %TO.P,U2,22,GPIO17*% %TO.N,UART B RX*% X57775523Y-90408249D03* D11* X58675523Y-90408249D03* D12* %TO.P,U2,23,GND*% %TO.N,GND*% X57775523Y-87868249D03* D11* X58675523Y-87868249D03* D10* %TO.P,U2,24,GPIO18*% %TO.N,unconnected-(U2-GPIO18-Pad24)*% X57775523Y-85328249D03* D11* X58675523Y-85328249D03* D10* %TO.P,U2,25,GPIO19*% %TO.N,unconnected-(U2-GPIO19-Pad25)*% X57775523Y-82788249D03* D11* X58675523Y-82788249D03* D10* %TO.P,U2,26,GPIO20*% %TO.N,unconnected-(U2-GPIO20-Pad26)*% X57775523Y-80248249D03* D11* X58675523Y-80248249D03* D10* %TO.P,U2,27,GPIO21*% %TO.N,unconnected-(U2-GPIO21-Pad27)*% X57775523Y-77708249D03* D11* X58675523Y-77708249D03* D12* %TO.P,U2,28,GND*% %TO.N,GND*% X57775523Y-75168249D03* D11* X58675523Y-75168249D03* D10* %TO.P,U2,29,GPIO22*% %TO.N,unconnected-(U2-GPIO22-Pad29)*% X57775523Y-72628249D03* D11* X58675523Y-72628249D03* D10* %TO.P,U2,30,RUN*% %TO.N,unconnected-(U2-RUN-Pad30)*% X57775523Y-70088249D03* D11* X58675523Y-70088249D03* D10* %TO.P,U2,31,GPIO26_ADC0*% %TO.N,unconnected-(U2-GPIO26_ADC0-Pad31)*% X57775523Y-67548249D03* D11* X58675523Y-67548249D03* D10* %TO.P,U2,32,GPIO27_ADC1*% %TO.N,unconnected-(U2-GPIO27_ADC1-Pad32)*% X57775523Y-65008249D03* D11* X58675523Y-65008249D03* D12* %TO.P,U2,33,AGND*% %TO.N,unconnected-(U2-AGND-Pad33)*% X57775523Y-62468249D03* D11* X58675523Y-62468249D03* D10* %TO.P,U2,34,GPIO28_ADC2*% %TO.N,unconnected-(U2-GPIO28_ADC2-Pad34)*% X57775523Y-59928249D03* D11* X58675523Y-59928249D03* D10* %TO.P,U2,35,ADC_VREF*% %TO.N,unconnected-(U2-ADC_VREF-Pad35)*% X57775523Y-57388249D03* D11* X58675523Y-57388249D03* D10* %TO.P,U2,36,3V3*% %TO.N,3V3_BUS2*% X57775523Y-54848249D03* D11* X58675523Y-54848249D03* D10* %TO.P,U2,37,3V3_EN*% %TO.N,unconnected-(U2-3V3_EN-Pad37)*% X57775523Y-52308249D03* D11* X58675523Y-52308249D03* D12* %TO.P,U2,38,GND*% %TO.N,GND*% X57775523Y-49768249D03* D11* X58675523Y-49768249D03* D10* %TO.P,U2,39,VSYS*% %TO.N,unconnected-(U2-VSYS-Pad39)*% X57775523Y-47228249D03* D11* X58675523Y-47228249D03* D10* %TO.P,U2,40,VBUS*% %TO.N,VBUS2*% X57775523Y-44688249D03* D11* X58675523Y-44688249D03* D10* %TO.P,U2,41,SWCLK*% %TO.N,Net-(J2-Pin_3)*% X46345523Y-92718249D03* D13* X46345523Y-93618249D03* D12* %TO.P,U2,42,GND*% %TO.N,GND*% X48885523Y-92718249D03* D13* X48885523Y-93618249D03* D10* %TO.P,U2,43,SWDIO*% %TO.N,Net-(J2-Pin_1)*% X51425523Y-92718249D03* D13* X51425523Y-93618249D03* %TD*% D14* %TO.P,C2,1*% %TO.N,Net-(U1-3V3)*% X70424000Y-74930000D03* %TO.P,C2,2*% %TO.N,GND2*% X72324000Y-74930000D03* %TD*% D15* %TO.P,J4,1,VBUS*% %TO.N,VBUS2*% X45776000Y-101574000D03* D16* %TO.P,J4,2,D-*% %TO.N,OB-*% X48276000Y-101574000D03* %TO.P,J4,3,D+*% %TO.N,OB+*% X50276000Y-101574000D03* %TO.P,J4,4,GND*% %TO.N,GND*% X52776000Y-101574000D03* D17* %TO.P,J4,5,Shield*% X42706000Y-104284000D03* X55846000Y-104284000D03* %TD*% D12* %TO.P,J3,1,Pin_1*% %TO.N,Net-(J3-Pin_1)*% X95667537Y-99795757D03* D10* %TO.P,J3,2,Pin_2*% %TO.N,GND2*% X95667537Y-102335757D03* %TO.P,J3,3,Pin_3*% %TO.N,Net-(J3-Pin_3)*% X95667537Y-104875757D03* %TD*% D18* %TO.P,C4,1*% %TO.N,VBUS1*% X74168000Y-101920000D03* %TO.P,C4,2*% %TO.N,GND2*% X74168000Y-103820000D03* %TD*% D19* %TO.P,U3,1,D1+*% %TO.N,OA+*% X80756396Y-95359949D03* %TO.P,U3,2,GND*% %TO.N,GND2*% X79806434Y-95359949D03* %TO.P,U3,3,D2+*% %TO.N,OA+*% X78856472Y-95359949D03* %TO.P,U3,4,D2-*% %TO.N,OA-*% X78856472Y-98160051D03* %TO.P,U3,5,NC*% %TO.N,unconnected-(U3-NC-Pad5)*% X79806434Y-98160051D03* %TO.P,U3,6,D1-*% %TO.N,OA-*% X80756396Y-98160051D03* %TD*% D20* %TO.P,H2,1,1*% %TO.N,GND2*% X96774000Y-111506000D03* D21* X96774000Y-111506000D03* %TD*% D22* %TO.P,R3,1*% %TO.N,Net-(U2-GPIO15)*% X37846000Y-96115500D03* %TO.P,R3,2*% %TO.N,OB-*% X37846000Y-97940500D03* %TD*% %TO.P,R2,1*% %TO.N,/AD+*% X76403200Y-95861500D03* %TO.P,R2,2*% %TO.N,OA+*% X76403200Y-97686500D03* %TD*% D15* %TO.P,J1,1,VBUS*% %TO.N,VBUS1*% X81082000Y-101574000D03* D16* %TO.P,J1,2,D-*% %TO.N,OA-*% X83582000Y-101574000D03* %TO.P,J1,3,D+*% %TO.N,OA+*% X85582000Y-101574000D03* %TO.P,J1,4,GND*% %TO.N,GND2*% X88082000Y-101574000D03* D17* %TO.P,J1,5,Shield*% X78012000Y-104284000D03* X91152000Y-104284000D03* %TD*% D19* %TO.P,U5,1,D1+*% %TO.N,OB+*% X44419860Y-95369949D03* %TO.P,U5,2,GND*% %TO.N,GND*% X43469898Y-95369949D03* %TO.P,U5,3,D2+*% %TO.N,OB+*% X42519936Y-95369949D03* %TO.P,U5,4,D2-*% %TO.N,OB-*% X42519936Y-98170051D03* %TO.P,U5,5,NC*% %TO.N,unconnected-(U5-NC-Pad5)*% X43469898Y-98170051D03* %TO.P,U5,6,D1-*% %TO.N,OB-*% X44419860Y-98170051D03* %TD*% D22* %TO.P,R1,1*% %TO.N,/AD-*% X74015600Y-95861500D03* %TO.P,R1,2*% %TO.N,OA-*% X74015600Y-97686500D03* %TD*% D20* %TO.P,H1,1,1*% %TO.N,GND*% X37846000Y-111506000D03* D21* X37846000Y-111506000D03* %TD*% D23* %TO.P,U4,1,VDD1*% %TO.N,3V3_BUS2*% X64835000Y-82571110D03* %TO.P,U4,2,VOA*% %TO.N,UART B RX*% X64835000Y-83841110D03* %TO.P,U4,3,VIB*% %TO.N,UART B TX*% X64835000Y-85111110D03* %TO.P,U4,4,GND1*% %TO.N,GND*% X64835000Y-86381110D03* %TO.P,U4,5,GND2*% %TO.N,GND2*% X69785000Y-86381110D03* %TO.P,U4,6,VOB*% %TO.N,UART A RX*% X69785000Y-85111110D03* %TO.P,U4,7,VIA*% %TO.N,UART A TX*% X69785000Y-83841110D03* %TO.P,U4,8,VDD2*% %TO.N,Net-(U1-3V3)*% X69785000Y-82571110D03* %TD*% D22* %TO.P,R4,1*% %TO.N,Net-(U2-GPIO14)*% X40005000Y-96115500D03* %TO.P,R4,2*% %TO.N,OB+*% X40005000Y-97940500D03* %TD*% D18* %TO.P,C3,1*% %TO.N,VBUS2*% X38100000Y-102301000D03* %TO.P,C3,2*% %TO.N,GND*% X38100000Y-104201000D03* %TD*% D12* %TO.P,J2,1,Pin_1*% %TO.N,Net-(J2-Pin_1)*% X60731042Y-99717876D03* D10* %TO.P,J2,2,Pin_2*% %TO.N,GND*% X60731042Y-102257876D03* %TO.P,J2,3,Pin_3*% %TO.N,Net-(J2-Pin_3)*% X60731042Y-104797876D03* %TD*% D24* %TO.P,C1,1*% %TO.N,3V3_BUS2*% X64069000Y-74930000D03* %TO.P,C1,2*% %TO.N,GND*% X62169000Y-74930000D03* %TD*% D20* %TO.P,H3,1,1*% %TO.N,GND2*% X67315520Y-45178990D03* D21* X67315520Y-45178990D03* %TD*% D25* %TO.N,GND*% X43475845Y-95436448D02* X43475845Y-93900000D01* D26* X58013772Y-74930000D02* X57775523Y-75168249D01* X61937500Y-74930000D02* X58013772Y-74930000D01* %TO.N,Net-(J2-Pin_1)*% X58420000Y-99314000D02* X54610000Y-99314000D01* X60452000Y-99822000D02* X58928000Y-99822000D01* X58928000Y-99822000D02* X58420000Y-99314000D01* X51425523Y-96129523D02* X51425523Y-92718249D01* X54610000Y-99314000D02* X51425523Y-96129523D01* %TO.N,Net-(J2-Pin_3)*% X58674000Y-101092000D02* X58674000Y-103124000D01* X46345523Y-92718249D02* X46345523Y-94725704D01* X54096000Y-100324000D02* X57906000Y-100324000D01* X46345523Y-94725704D02* X48393819Y-96774000D01* X48393819Y-96774000D02* X50546000Y-96774000D01* X58674000Y-103124000D02* X60452000Y-104902000D01* X50546000Y-96774000D02* X54096000Y-100324000D01* X57906000Y-100324000D02* X58674000Y-101092000D01* %TO.N,Net-(J3-Pin_1)*% X90637377Y-99309705D02* X87884000Y-96556328D01* X87884000Y-93496000D02* X87869000Y-93511000D01* X95250000Y-99837000D02* X93761955Y-99837000D01* X87884000Y-96556328D02* X87884000Y-93496000D01* X93761955Y-99837000D02* X93234660Y-99309705D01* X93234660Y-99309705D02* X90637377Y-99309705D01* %TO.N,Net-(J3-Pin_3)*% X84096249Y-96796249D02* X86530911Y-96796249D01* X92912787Y-100330000D02* X93653332Y-101070545D01* X82804000Y-95504000D02* X84096249Y-96796249D01* X90064662Y-100330000D02* X92912787Y-100330000D01* X93653332Y-101070545D02* X93653332Y-103305332D01* X82804000Y-93496000D02* X82804000Y-95504000D01* X86530911Y-96796249D02* X90064662Y-100330000D01* X93653332Y-103305332D02* X95250000Y-104902000D01* X82789000Y-93511000D02* X82804000Y-93496000D01* %TO.N,Net-(U1-3V3)*% X94234000Y-54864000D02* X80899000Y-54864000D01* X70583420Y-55591080D02* X70583420Y-71656580D01* X69094026Y-74930000D02* X70424000Y-74930000D01* X69041691Y-73198309D02* X69041691Y-74877665D01* X79465248Y-42986085D02* X72471650Y-42986085D01* X71965520Y-54208980D02* X70583420Y-55591080D01* X80010000Y-43530837D02* X79465248Y-42986085D01* X80899000Y-54864000D02* X80010000Y-53975000D01* X80010000Y-53975000D02* X80010000Y-43530837D01* X71965520Y-43492215D02* X71965520Y-54208980D01* X70583420Y-71656580D02* X69041691Y-73198309D01* X69041691Y-74877665D02* X69094026Y-74930000D01* X69041691Y-81909731D02* X69703070Y-82571110D01* X72471650Y-42986085D02* X71965520Y-43492215D01* X69041691Y-74877665D02* X69041691Y-81909731D01* %TO.N,3V3_BUS2*% X65572536Y-74929999D02* X65572536Y-81877464D01* X64069000Y-74930000D02* X65572536Y-74929999D01* X65572536Y-73192536D02* X65572536Y-74929999D01* X64026291Y-71646291D02* X65572536Y-73192536D01* X65572536Y-81877464D02* X64900000Y-82550000D01* X64026291Y-55662582D02* X64026291Y-71646291D01* X63211958Y-54848249D02* X64026291Y-55662582D01* X57775523Y-54848249D02* X63211958Y-54848249D01* %TO.N,VBUS2*% X62367055Y-96520000D02* X63500000Y-97652945D01* X63500000Y-105774948D02* X61957520Y-107317428D01* X57775523Y-44688249D02* X56149751Y-44688249D01* X45776000Y-105668629D02* X45776000Y-101574000D01* X61957520Y-107317428D02* X47424799Y-107317428D01* X45776000Y-101574000D02* X45496000Y-101854000D01* X63500000Y-97652945D02* X63500000Y-105774948D01* X45496000Y-101854000D02* X40080000Y-101854000D01* X54610000Y-46228000D02* X54610000Y-95250000D01* X47424799Y-107317428D02* X45776000Y-105668629D01* X54610000Y-95250000D02* X55880000Y-96520000D01* X39699000Y-102235000D02* X38100000Y-102235000D01* X55880000Y-96520000D02* X62367055Y-96520000D01* X56149751Y-44688249D02* X54610000Y-46228000D01* X40080000Y-101854000D02* X39699000Y-102235000D01* %TO.N,VBUS1*% X81082000Y-105600583D02* X81082000Y-101574000D01* X99212400Y-45720000D02* X99212400Y-106121200D01* X94234000Y-44704000D02* X98196400Y-44704000D01* X76428000Y-101574000D02* X81082000Y-101574000D01* X98196400Y-44704000D02* X99212400Y-45720000D01* X97997903Y-107335697D02* X82817114Y-107335697D01* X74168000Y-101920000D02* X76082000Y-101920000D01* X99212400Y-106121200D02* X97997903Y-107335697D01* X82817114Y-107335697D02* X81082000Y-105600583D01* X76082000Y-101920000D02* X76428000Y-101574000D01* X74168000Y-101920000D02* X73726000Y-101920000D01* D27* %TO.N,/AD+*% X78655000Y-91889183D02* X78078818Y-91313000D01* X78078818Y-91313000D02* X77343000Y-91313000D01* X75480000Y-95605600D02* X75735900Y-95861500D01* X77343000Y-91313000D02* X76454000Y-90424000D01* X75777000Y-94911000D02* X77697817Y-94911000D01* X75480000Y-95208000D02* X75480000Y-95605600D01* X78655000Y-93953818D02* X78655000Y-91889183D01* X77697817Y-94911000D02* X78655000Y-93953818D01* X75735900Y-95861500D02* X76403200Y-95861500D01* X75480000Y-95208000D02* X75777000Y-94911000D01* D26* %TO.N,GND2*% X79806434Y-94186434D02* X79800000Y-94180000D01* D25* X79806434Y-95449591D02* X79806434Y-94186434D01* D26* X72166691Y-74877665D02* X76147665Y-74877665D01* D27* %TO.N,Net-(U2-GPIO15)*% X38608000Y-95377000D02* X37869500Y-96115500D01* X37869500Y-96115500D02* X37846000Y-96115500D01* X39995523Y-92948249D02* X40995772Y-91948000D01* X38608000Y-94869000D02* X38608000Y-95377000D01* X41783000Y-93599000D02* X41021000Y-94361000D01* X41021000Y-94361000D02* X39116000Y-94361000D01* X41783000Y-92329000D02* X41783000Y-93599000D01* X40995772Y-91948000D02* X41402000Y-91948000D01* X39116000Y-94361000D02* X38608000Y-94869000D01* X41402000Y-91948000D02* X41783000Y-92329000D01* %TO.N,Net-(U2-GPIO14)*% X42333000Y-92101183D02* X42333000Y-93826818D01* X40773274Y-91186000D02* X41417818Y-91186000D01* X39243000Y-95488534D02* X39869966Y-96115500D01* X42333000Y-93826818D02* X41248817Y-94911000D01* X39343818Y-94911000D02* X39243000Y-95011818D01* X41417818Y-91186000D02* X42333000Y-92101183D01* X39995523Y-90408249D02* X40773274Y-91186000D01* X39243000Y-95011818D02* X39243000Y-95488534D01* X41248817Y-94911000D02* X39343818Y-94911000D01* X39869966Y-96115500D02* X40005000Y-96115500D01* D26* %TO.N,UART A TX*% X69850000Y-83820000D02* X71949721Y-83820000D01* X71949721Y-83820000D02* X72965721Y-82804000D01* X72965721Y-82804000D02* X76454000Y-82804000D01* %TO.N,UART A RX*% X69850000Y-85090000D02* X76200000Y-85090000D01* X76180000Y-85270000D02* X76434000Y-85524000D01* %TO.N,UART B TX*% X62280800Y-85598000D02* X62788800Y-85090000D01* X62280800Y-91541600D02* X62280800Y-85598000D01* X62788800Y-85090000D02* X64900000Y-85090000D01* X60874151Y-92948249D02* X62280800Y-91541600D01* X57775523Y-92948249D02* X60874151Y-92948249D01* %TO.N,UART B RX*% X61315600Y-84734400D02* X62230000Y-83820000D01* X61315600Y-89814400D02* X61315600Y-84734400D01* X62230000Y-83820000D02* X64900000Y-83820000D01* X60960000Y-90170000D02* X61315600Y-89814400D01* X57775523Y-90408249D02* X58013772Y-90170000D01* X58013772Y-90170000D02* X60960000Y-90170000D01* D27* %TO.N,/AD-*% X74930000Y-95631000D02* X74699500Y-95861500D01* X74930000Y-94869000D02* X74930000Y-95631000D01* X77470000Y-94361000D02* X75438000Y-94361000D01* X76454000Y-92964000D02* X76454000Y-92710000D01* X78105000Y-92117000D02* X78105000Y-93726000D01* X77851000Y-91863000D02* X78105000Y-92117000D01* X78105000Y-93726000D02* X77470000Y-94361000D01* X75438000Y-94361000D02* X74930000Y-94869000D01* X77301000Y-91863000D02* X77851000Y-91863000D01* X74699500Y-95861500D02* X74015600Y-95861500D01* X76454000Y-92710000D02* X77301000Y-91863000D01* %TO.N,OA-*% X78892400Y-96968400D02* X80763200Y-96968400D01* X76962000Y-99229000D02* X77089000Y-99229000D01* X80763200Y-96968400D02* X80772000Y-96977200D01* X78856472Y-98160051D02* X78856472Y-97004328D01* X78105000Y-97358200D02* X78494800Y-96968400D01* X78856472Y-97004328D02* X78892400Y-96968400D01* X80756396Y-98160051D02* X80756396Y-96992804D01* X75387982Y-99229000D02* X76962000Y-99229000D01* X80756396Y-96992804D02* X80772000Y-96977200D01* X76962000Y-99229000D02* X77605800Y-99229000D01* X74623300Y-97686500D02* X74888000Y-97951200D01* X84328000Y-100828000D02* X83582000Y-101574000D01* X77605800Y-99229000D02* X78105000Y-98729800D01* X74888000Y-97951200D02* X74888000Y-98729018D01* X80772000Y-96977200D02* X81772182Y-96977200D01* X78494800Y-96968400D02* X78892400Y-96968400D01* X81772182Y-96977200D02* X84328000Y-99533018D01* X78105000Y-98729800D02* X78105000Y-97358200D01* X74888000Y-98729018D02* X75387982Y-99229000D01* X84328000Y-99533018D02* X84328000Y-100828000D01* X74015600Y-97686500D02* X74623300Y-97686500D01* %TO.N,OA+*% X80756396Y-95359949D02* X80756396Y-96351996D01* X76403200Y-97713800D02* X76403200Y-97686500D01* X84878000Y-100870000D02* X85582000Y-101574000D01* X80756396Y-96351996D02* X80822800Y-96418400D01* X77555000Y-98416200D02* X77555000Y-97095400D01* X78841600Y-96418400D02* X80822800Y-96418400D01* X76200000Y-97917000D02* X76403200Y-97713800D01* X77555000Y-97095400D02* X78232000Y-96418400D01* X78856472Y-96403528D02* X78841600Y-96418400D01* X78232000Y-96418400D02* X78841600Y-96418400D01* X80822800Y-96418400D02* X81991200Y-96418400D01* X81991200Y-96418400D02* X84878000Y-99305200D01* X75732000Y-97686500D02* X75438000Y-97980500D01* X77292200Y-98679000D02* X77555000Y-98416200D01* X84878000Y-99305200D02* X84878000Y-100870000D01* X78856472Y-95359949D02* X78856472Y-96403528D01* X75438000Y-98501200D02* X75615800Y-98679000D01* X75438000Y-97980500D02* X75438000Y-98501200D01* X76403200Y-97686500D02* X75732000Y-97686500D01* X75615800Y-98679000D02* X77292200Y-98679000D01* %TO.N,OB-*% X39243000Y-99949000D02* X40513000Y-99949000D01* X46635182Y-97070000D02* X48971200Y-99406018D01* X38608000Y-99314000D02* X38862000Y-99568000D01* X38862000Y-99568000D02* X39243000Y-99949000D01* X42291000Y-97070000D02* X42519600Y-97070000D01* X44419860Y-97100140D02* X44419860Y-98170051D01* X48276000Y-101330000D02* X48276000Y-101574000D01* X48971200Y-99406018D02* X48971200Y-100634800D01* X42519936Y-98170051D02* X42519936Y-97070336D01* X38377500Y-97940500D02* X38608000Y-98171000D01* X37846000Y-97940500D02* X38377500Y-97940500D01* X40894000Y-99949000D02* X41783000Y-99060000D01* X41844930Y-97417782D02* X42192712Y-97070000D01* X48971200Y-100634800D02* X48276000Y-101330000D01* X40513000Y-99949000D02* X40894000Y-99949000D01* X42519600Y-97070000D02* X44238000Y-97070000D01* X41783000Y-99060000D02* X41844930Y-98998070D01* X44450000Y-97070000D02* X44419860Y-97100140D01* X44238000Y-97070000D02* X44450000Y-97070000D01* X42519936Y-97070336D02* X42519600Y-97070000D01* X38608000Y-98171000D02* X38608000Y-99314000D01* X41844930Y-98998070D02* X41844930Y-97417782D01* X42192712Y-97070000D02* X42291000Y-97070000D01* X44450000Y-97070000D02* X46635182Y-97070000D01* %TO.N,OB+*% X39600500Y-97940500D02* X39243000Y-98298000D01* X46863000Y-96520000D02* X49521200Y-99178200D01* X42519600Y-96520000D02* X44450000Y-96520000D01* X41964895Y-96520000D02* X42519600Y-96520000D01* X39243000Y-98298000D02* X39243000Y-99171182D01* X44419860Y-95369949D02* X44419860Y-96489860D01* X39470818Y-99399000D02* X40666182Y-99399000D01* X49521200Y-99178200D02* X49521200Y-100626000D01* X44450000Y-96520000D02* X46863000Y-96520000D01* X42519936Y-96519664D02* X42519600Y-96520000D01* X49521200Y-100626000D02* X50276000Y-101380800D01* X40666182Y-99399000D02* X41294930Y-98770252D01* X40005000Y-97940500D02* X39600500Y-97940500D01* X39243000Y-99171182D02* X39470818Y-99399000D01* X50276000Y-101380800D02* X50276000Y-101574000D01* X41294930Y-98770252D02* X41294930Y-97189964D01* X41294930Y-97189964D02* X41964895Y-96520000D01* X44419860Y-96489860D02* X44450000Y-96520000D01* X42519936Y-95369949D02* X42519936Y-96519664D01* %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J3-Pin_1)*% G36* X87892264Y-92741278D02* G01* X88476081Y-93326066D01* X88479501Y-93334342D01* X88476067Y-93342612D01* X88475374Y-93343250D01* X88371395Y-93431550D01* X88370916Y-93431916D01* X88274429Y-93498051D01* X88199535Y-93560897D01* X88151163Y-93647230D01* X88135285Y-93773757D01* X88130855Y-93781539D01* X88123676Y-93784000D01* X87644323Y-93784000D01* X87636050Y-93780573D01* X87632714Y-93773757D01* X87616834Y-93647230D01* X87616834Y-93647229D01* X87568463Y-93560896D01* X87493569Y-93498052D01* X87397080Y-93431914D01* X87396617Y-93431561D01* X87292624Y-93343249D01* X87288537Y-93335283D01* X87291280Y-93326759D01* X87291905Y-93326080D01* X87875721Y-92741292D01* X87883990Y-92737859D01* X87892264Y-92741278D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OA+*% G36* X78862102Y-95373007D02* G01* X78866728Y-95377633D01* X79127326Y-95852385D01* X79128303Y-95861286D01* X79125480Y-95866149D01* X79106472Y-95885802D01* X79081473Y-95918723D01* X79056470Y-95958728D01* X79031479Y-96005786D01* X79009609Y-96053153D01* X79003030Y-96059228D01* X78998987Y-96059949D01* X78713956Y-96059949D01* X78705683Y-96056522D01* X78703334Y-96053153D01* X78681464Y-96005786D01* X78656473Y-95958728D01* X78631469Y-95918723D01* X78606470Y-95885801D01* X78606462Y-95885793D01* X78587463Y-95866149D01* X78584175Y-95857820D01* X78585616Y-95852388D01* X78846216Y-95377632D01* X78853201Y-95372030D01* X78862102Y-95373007D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART A RX*% G36* X76133191Y-84569549D02* G01* X76133547Y-84570323D01* X76450504Y-85333179D01* X76450513Y-85342134D01* X76444188Y-85348472D01* X76444182Y-85348475D01* X76444172Y-85348479D01* X75680545Y-85664381D01* X75671590Y-85664377D01* X75665261Y-85658043D01* X75664905Y-85657058D01* X75636492Y-85565591D01* X75636368Y-85565111D01* X75624336Y-85507928D01* X75617408Y-85474996D01* X75617406Y-85474990D01* X75617405Y-85474985D01* X75593114Y-85403648D01* X75545001Y-85356825D01* X75464084Y-85341777D01* X75456577Y-85336895D01* X75454523Y-85330274D01* X75454523Y-84850705D01* X75457950Y-84842432D01* X75465185Y-84839051D01* X75632504Y-84824163D01* X75752445Y-84781239D01* X75850815Y-84718103D01* X75963778Y-84641838D01* X75964405Y-84641469D01* X76117480Y-84564362D01* X76126409Y-84563701D01* X76133191Y-84569549D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(U2-GPIO15)*% G36* X40008710Y-92099969D02* G01* X40161174Y-92119855D01* X40163368Y-92120361D01* X40292195Y-92163567D01* X40402348Y-92196402D01* X40402349Y-92196402D01* X40429231Y-92193793D01* X40509880Y-92185967D01* X40623868Y-92105410D01* X40632599Y-92103435D01* X40638891Y-92106693D01* X40837077Y-92304879D01* X40840504Y-92313152D01* X40838359Y-92319904D01* X40757803Y-92433889D01* X40757802Y-92433893D01* X40747367Y-92541422D01* X40747367Y-92541423D01* X40780204Y-92651575D01* X40823407Y-92780396D01* X40823916Y-92782603D01* X40843800Y-92935047D01* X40841472Y-92943694D01* X40833711Y-92948162D01* X40832208Y-92948260D01* X40006535Y-92948946D01* X39998259Y-92945526D01* X39994825Y-92937257D01* X39995511Y-92111559D01* X39998945Y-92103292D01* X40007221Y-92099872D01* X40008710Y-92099969D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,VBUS2*% G36* X44989770Y-101028804D02* G01* X45198403Y-101173292D01* X45765083Y-101565747D01* X45769934Y-101573275D01* X45768041Y-101582027D01* X45766419Y-101583907D01* X44986218Y-102314432D01* X44977836Y-102317585D01* X44969680Y-102313888D01* X44968397Y-102312246D01* X44935999Y-102262160D01* X44936000Y-102262161D01* X44895997Y-102209238D01* X44895995Y-102209236D01* X44856005Y-102165246D01* X44856002Y-102165244D01* X44856000Y-102165241D01* X44838036Y-102149486D01* X44816002Y-102130161D01* X44781296Y-102107463D01* X44776248Y-102100066D01* X44776000Y-102097671D01* X44776000Y-101606765D01* X44777239Y-101601526D01* X44816001Y-101524130D01* X44856000Y-101425724D01* X44856001Y-101425724D01* X44895999Y-101308778D01* X44935999Y-101173292D01* X44971788Y-101035481D01* X44977184Y-101028337D01* X44986053Y-101027100D01* X44989770Y-101028804D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,GND2*% G36* X86232407Y-97574434D02* G01* X86253049Y-97591068D01* X88971021Y-100309040D01* X89004506Y-100370363D01* X88999522Y-100440055D01* X88957650Y-100495988D01* X88892186Y-100520405D01* X88823913Y-100505553D01* X88812216Y-100498296D01* X88734482Y-100443866D01* X88528326Y-100347734D01* X88528317Y-100347730D01* X88308610Y-100288860D01* X88308599Y-100288858D01* X88082002Y-100269034D01* X88081998Y-100269034D01* X87855400Y-100288858D01* X87855389Y-100288860D01* X87635682Y-100347730D01* X87635673Y-100347734D01* X87429513Y-100443868D01* X87356526Y-100494973D01* X87971548Y-101109995D01* X87946801Y-101113554D01* X87822555Y-101170295D01* X87719327Y-101259742D01* X87645481Y-101374649D01* X87619064Y-101464617D01* X87002973Y-100848526D01* X87002972Y-100848527D01* X86951867Y-100921513D01* X86949070Y-100927513D01* X86902897Y-100979951D01* X86835703Y-100999102D01* X86768822Y-100978885D01* X86724307Y-100927511D01* X86721790Y-100922113D01* X86719523Y-100917251D01* X86588198Y-100729700D01* X86426300Y-100567802D01* X86238749Y-100436477D01* X86238745Y-100436475D01* X86031249Y-100339718D01* X86031238Y-100339714D01* X85810089Y-100280457D01* X85810082Y-100280456D01* X85649692Y-100266424D01* X85584624Y-100240971D01* X85543645Y-100184380D01* X85536500Y-100142896D01* X85536500Y-99391591D01* X85538282Y-99375448D01* X85538055Y-99375427D01* X85538787Y-99367669D01* X85538789Y-99367663D01* X85536500Y-99294839D01* X85536500Y-99263768D01* X85535564Y-99256366D01* X85535107Y-99250553D01* X85534990Y-99246837D01* X85533562Y-99201369D01* X85527535Y-99180626D01* X85523590Y-99161577D01* X85520882Y-99140136D01* X85502763Y-99094372D01* X85500872Y-99088848D01* X85498470Y-99080582D01* X85487145Y-99041600D01* X85476149Y-99023008D01* X85467589Y-99005535D01* X85460252Y-98987003D01* X85459635Y-98985444D01* X85459631Y-98985438D01* X85430711Y-98945634D01* X85427502Y-98940749D01* X85407102Y-98906255D01* X85402453Y-98898393D01* X85402449Y-98898389D01* X85402446Y-98898385D01* X85387175Y-98883114D01* X85374537Y-98868318D01* X85361839Y-98850840D01* X85323921Y-98819472D01* X85319598Y-98815538D01* X84270490Y-97766430D01* X84237005Y-97705107D01* X84241989Y-97635415D01* X84283861Y-97579482D01* X84349325Y-97555065D01* X84358171Y-97554749D01* X86165368Y-97554749D01* X86232407Y-97574434D01* G37* %TD.AperFunction*% %TA.AperFunction,Conductor*% G36* X98691593Y-41110757D02* G01* X98943239Y-41127247D01* X98951279Y-41128304D01* X99196625Y-41177104D01* X99204464Y-41179205D01* X99441333Y-41259609D01* X99448834Y-41262716D01* X99673181Y-41373350D01* X99680207Y-41377406D01* X99854674Y-41493979D01* X99888199Y-41516380D01* X99894634Y-41521318D01* X99962233Y-41580600D01* X100082705Y-41686251D01* X100088445Y-41691992D01* X100253379Y-41880061D01* X100258321Y-41886502D01* X100397286Y-42094479D01* X100401345Y-42101510D01* X100511982Y-42325861D01* X100515089Y-42333362D01* X100595492Y-42570230D01* X100597594Y-42578072D01* X100646392Y-42823409D01* X100647452Y-42831459D01* X100663940Y-43083058D01* X100664073Y-43087113D01* X100664073Y-113564339D01* X100663940Y-113568394D01* X100647449Y-113820040D01* X100646390Y-113828090D01* X100597592Y-114073424D01* X100595490Y-114081267D01* X100515087Y-114318135D01* X100511980Y-114325636D01* X100401345Y-114549983D01* X100397286Y-114557014D01* X100258317Y-114764997D01* X100253375Y-114771438D01* X100088445Y-114959505D01* X100082704Y-114965246D01* X99894634Y-115130178D01* X99888193Y-115135120D01* X99680216Y-115274085D01* X99673185Y-115278144D01* X99448834Y-115388780D01* X99441333Y-115391887D01* X99204464Y-115472291D01* X99196622Y-115474392D01* X98951288Y-115523189D01* X98943239Y-115524249D01* X98691572Y-115540742D01* X98687517Y-115540875D01* X68155298Y-115540875D01* X68088259Y-115521190D01* X68042504Y-115468386D01* X68031298Y-115416806D01* X68031314Y-115388780D01* X68032016Y-114129843D01* X68037621Y-104070000D01* X72943001Y-104070000D01* X72943001Y-104119986D01* X72953494Y-104222697D01* X73008641Y-104389119D01* X73008643Y-104389124D01* X73100684Y-104538345D01* X73224654Y-104662315D01* X73373875Y-104754356D01* X73373880Y-104754358D01* X73540302Y-104809505D01* X73540309Y-104809506D01* X73643019Y-104819999D01* X73917999Y-104819999D01* X73918000Y-104819998D01* X73918000Y-104070000D01* X74418000Y-104070000D01* X74418000Y-104819999D01* X74692972Y-104819999D01* X74692986Y-104819998D01* X74795697Y-104809505D01* X74962119Y-104754358D01* X74962124Y-104754356D01* X75111345Y-104662315D01* X75235315Y-104538345D01* X75327356Y-104389124D01* X75327358Y-104389119D01* X75382505Y-104222697D01* X75382506Y-104222690D01* X75392999Y-104119986D01* X75393000Y-104119973D01* X75393000Y-104070000D01* X74418000Y-104070000D01* X73918000Y-104070000D01* X72943001Y-104070000D01* X68037621Y-104070000D01* X68041004Y-97999537D01* X72807100Y-97999537D01* X72807101Y-97999553D01* X72817713Y-98103426D01* X72873485Y-98271738D01* X72966570Y-98422652D01* X73091948Y-98548030D01* X73242862Y-98641115D01* X73411174Y-98696887D01* X73515055Y-98707500D01* X74108333Y-98707499D01* X74175372Y-98727183D01* X74221127Y-98779987D01* X74232271Y-98827594D01* X74232436Y-98832837D01* X74232438Y-98832850D01* X74238464Y-98853595D01* X74242407Y-98872636D01* X74245116Y-98894071D01* X74245117Y-98894075D01* X74245118Y-98894082D01* X74261284Y-98934915D01* X74263234Y-98939840D01* X74265125Y-98945366D01* X74278854Y-98992616D01* X74289850Y-99011209D01* X74298410Y-99028683D01* X74306363Y-99048772D01* X74313660Y-99058815D01* X74329475Y-99080582D01* X74335289Y-99088583D01* X74338490Y-99093455D01* X74363547Y-99135825D01* X74363551Y-99135829D01* X74378821Y-99151099D01* X74391459Y-99165895D01* X74404159Y-99183375D01* X74404163Y-99183379D01* X74442078Y-99214745D01* X74446389Y-99218667D01* X74660198Y-99432475D01* X74861262Y-99633539D01* X74871418Y-99646215D01* X74871594Y-99646070D01* X74876566Y-99652080D01* X74929683Y-99701960D01* X74951649Y-99723926D01* X74956904Y-99728002D01* X74957529Y-99728487D01* X74961972Y-99732282D01* X74997847Y-99765971D01* X74997849Y-99765972D01* X75016776Y-99776377D01* X75033036Y-99787057D01* X75050113Y-99800304D01* X75095283Y-99819851D01* X75100519Y-99822415D01* X75143645Y-99846124D01* X75163649Y-99851260D01* X75164568Y-99851496D01* X75182973Y-99857797D01* X75202805Y-99866379D01* X75251435Y-99874081D01* X75257104Y-99875255D01* X75304794Y-99887500D01* X75326400Y-99887500D01* X75345798Y-99889026D01* X75367133Y-99892406D01* X75412246Y-99888141D01* X75416123Y-99887775D01* X75421961Y-99887500D01* X76878812Y-99887500D01* X77519409Y-99887500D01* X77535546Y-99889281D01* X77535568Y-99889054D01* X77543334Y-99889788D01* X77543336Y-99889787D01* X77543337Y-99889788D01* X77616142Y-99887500D01* X77647232Y-99887500D01* X77654623Y-99886566D01* X77660451Y-99886107D01* X77709631Y-99884562D01* X77730383Y-99878532D01* X77749421Y-99874590D01* X77770864Y-99871882D01* X77816634Y-99853760D01* X77822148Y-99851873D01* X77848675Y-99844165D01* X77869400Y-99838145D01* X77887996Y-99827146D01* X77905464Y-99818589D01* X77925556Y-99810635D01* X77965382Y-99781698D01* X77970241Y-99778506D01* X78012607Y-99753453D01* X78027890Y-99738168D01* X78042673Y-99725542D01* X78060157Y-99712841D01* X78091532Y-99674913D01* X78095446Y-99670612D01* X78509541Y-99256516D01* X78522215Y-99246364D01* X78522069Y-99246188D01* X78528074Y-99241219D01* X78528080Y-99241216D01* X78559583Y-99207668D01* X78619823Y-99172273D01* X78649976Y-99168551D01* X79180117Y-99168551D01* X79180133Y-99168550D01* X79218039Y-99164474D01* X79240680Y-99162040D01* X79288122Y-99144344D01* X79357810Y-99139361D01* X79374775Y-99144341D01* X79422226Y-99162040D01* X79439206Y-99163865D01* X79482772Y-99168550D01* X79482789Y-99168551D01* X80130079Y-99168551D01* X80130095Y-99168550D01* X80168001Y-99164474D01* X80190642Y-99162040D01* X80238084Y-99144344D01* X80307772Y-99139361D01* X80324737Y-99144341D01* X80372188Y-99162040D01* X80389168Y-99163865D01* X80432734Y-99168550D01* X80432751Y-99168551D01* X81080041Y-99168551D01* X81080057Y-99168550D01* X81107095Y-99165642D01* X81140604Y-99162040D01* X81277607Y-99110940D01* X81394664Y-99023312D01* X81482292Y-98906255D01* X81533392Y-98769252D01* X81537915Y-98727183D01* X81539902Y-98708705D01* X81539903Y-98708688D01* X81539903Y-97975542D01* X81559588Y-97908503D01* X81612392Y-97862748D01* X81681550Y-97852804D01* X81745106Y-97881829D01* X81751584Y-97887861D01* X83633181Y-99769458D01* X83666666Y-99830781D01* X83669500Y-99857139D01* X83669500Y-100139221D01* X83649815Y-100206260D01* X83597011Y-100252015D01* X83556308Y-100262749D01* X83353917Y-100280456D01* X83353910Y-100280457D01* X83132761Y-100339714D01* X83132750Y-100339718D01* X82925254Y-100436475D01* X82925252Y-100436476D01* X82890601Y-100460739D01* X82744737Y-100562875D01* X82737699Y-100567803D01* X82576579Y-100728923D01* X82515256Y-100762407D01* X82445564Y-100757423D01* X82389631Y-100715551D01* X82372717Y-100684576D01* X82344709Y-100609486D01* X82332889Y-100577796D01* X82245261Y-100460739D01* X82128204Y-100373111D01* X81991203Y-100322011D01* X81930654Y-100315500D01* X81930638Y-100315500D01* X80233362Y-100315500D01* X80233345Y-100315500D01* X80172797Y-100322011D01* X80172795Y-100322011D01* X80035795Y-100373111D01* X79918739Y-100460739D01* X79831111Y-100577795D01* X79831110Y-100577796D01* X79800671Y-100659403D01* X79798771Y-100663941D01* X79785023Y-100693419D01* X79785022Y-100693423D01* X79774754Y-100727386D01* X79736510Y-100785860D01* X79672724Y-100814375D01* X79656060Y-100815500D01* X76492294Y-100815500D01* X76474324Y-100814191D01* X76450206Y-100810658D01* X76404651Y-100814645D01* X76397573Y-100815264D01* X76392172Y-100815500D01* X76383819Y-100815500D01* X76350903Y-100819347D01* X76273574Y-100826112D01* X76266506Y-100827572D01* X76266496Y-100827528D01* X76258906Y-100829210D01* X76258917Y-100829254D01* X76251893Y-100830919D01* X76251887Y-100830920D01* X76251887Y-100830921D01* X76242026Y-100834510D01* X76178933Y-100857473D01* X76105257Y-100881887D01* X76098720Y-100884936D01* X76098700Y-100884894D01* X76091696Y-100888285D01* X76091717Y-100888326D01* X76085269Y-100891564D01* X76020394Y-100934233D01* X75954352Y-100974967D01* X75948683Y-100979450D01* X75948653Y-100979413D01* X75942627Y-100984322D01* X75942657Y-100984357D01* X75937132Y-100988993D01* X75937126Y-100988998D01* X75937126Y-100988999D01* X75883836Y-101045482D01* X75804137Y-101125181D01* X75742814Y-101158666D01* X75716456Y-101161500D01* X75258544Y-101161500D01* X75191505Y-101141815D01* X75170863Y-101125181D01* X75116653Y-101070971D01* X75116652Y-101070970D01* X75016211Y-101009017D01* X74965740Y-100977886D01* X74965735Y-100977884D01* X74797427Y-100922113D01* X74693546Y-100911500D01* X73642462Y-100911500D01* X73642446Y-100911501D01* X73538572Y-100922113D01* X73370264Y-100977884D01* X73370259Y-100977886D01* X73219346Y-101070971D01* X73093971Y-101196346D01* X73000886Y-101347259D01* X73000884Y-101347264D01* X72945113Y-101515572D01* X72934500Y-101619447D01* X72934500Y-102220537D01* X72934501Y-102220553D01* X72945113Y-102324427D01* X73000884Y-102492735D01* X73000886Y-102492740D01* X73015188Y-102515927D01* X73093970Y-102643652D01* X73219348Y-102769030D01* X73220031Y-102769451D01* X73220401Y-102769863D01* X73225015Y-102773511D01* X73224391Y-102774298D01* X73266759Y-102821397D01* X73277984Y-102890359D01* X73250144Y-102954442D01* X73229582Y-102972264D01* X73230323Y-102973202D01* X73224655Y-102977683D01* X73100684Y-103101654D01* X73008643Y-103250875D01* X73008641Y-103250880D01* X72953494Y-103417302D01* X72953493Y-103417309D01* X72943000Y-103520013D01* X72943000Y-103570000D01* X75392999Y-103570000D01* X75392999Y-103520028D01* X75392998Y-103520013D01* X75382505Y-103417302D01* X75327358Y-103250880D01* X75327356Y-103250875D01* X75235315Y-103101654D01* X75111344Y-102977683D01* X75105677Y-102973202D01* X75107404Y-102971016D01* X75069240Y-102928589D01* X75058015Y-102859627D01* X75085855Y-102795543D01* X75111106Y-102773664D01* X75110985Y-102773511D01* X75114401Y-102770809D01* X75115969Y-102769451D01* X75116652Y-102769030D01* X75170863Y-102714819D01* X75232186Y-102681334D01* X75258544Y-102678500D01* X76017706Y-102678500D01* X76035676Y-102679809D01* X76038174Y-102680174D01* X76059789Y-102683341D01* X76112426Y-102678735D01* X76117828Y-102678500D01* X76126175Y-102678500D01* X76126180Y-102678500D01* X76149835Y-102675734D01* X76159096Y-102674652D01* X76236419Y-102667888D01* X76236422Y-102667887D01* X76236426Y-102667887D01* X76236429Y-102667885D01* X76243493Y-102666427D01* X76243502Y-102666474D01* X76251097Y-102664790D01* X76251087Y-102664744D01* X76258107Y-102663079D01* X76258113Y-102663079D01* X76331065Y-102636526D01* X76404738Y-102612114D01* X76404746Y-102612108D01* X76411284Y-102609061D01* X76411305Y-102609106D01* X76418302Y-102605719D01* X76418280Y-102605675D01* X76424729Y-102602436D01* X76424728Y-102602436D01* X76424732Y-102602435D01* X76489605Y-102559766D01* X76555651Y-102519030D01* X76555655Y-102519025D01* X76561319Y-102514548D01* X76561350Y-102514587D01* X76567374Y-102509680D01* X76567342Y-102509642D01* X76572869Y-102505003D01* X76572874Y-102505001D01* X76573554Y-102504281D01* X76626163Y-102448517D01* X76705863Y-102368818D01* X76767187Y-102335334D01* X76793544Y-102332500D01* X76926881Y-102332500D01* X76993920Y-102352185D01* X77039675Y-102404989D01* X77049619Y-102474147D01* X77020594Y-102537703D01* X76986308Y-102565332D01* X76927961Y-102597191D01* X76927953Y-102597196D01* X76785437Y-102703882D01* X76785436Y-102703883D01* X77392389Y-103310835D01* X77233931Y-103430499D01* X77090348Y-103588001D01* X77041439Y-103666992D01* X76431883Y-103057436D01* X76431882Y-103057437D01* X76325196Y-103199953D01* X76325191Y-103199961D01* X76188091Y-103451041D01* X76088109Y-103719104D01* X76027300Y-103998637D01* X76006891Y-104283998D01* X76006891Y-104284001D01* X76027300Y-104569362D01* X76088109Y-104848895D01* X76188091Y-105116958D01* X76325191Y-105368038D01* X76325196Y-105368046D01* X76431882Y-105510561D01* X76431883Y-105510562D01* X77041438Y-104901006D01* X77090348Y-104979999D01* X77233931Y-105137501D01* X77392388Y-105257163D01* X76785436Y-105864115D01* X76927960Y-105970807D01* X76927961Y-105970808D01* X77179042Y-106107908D01* X77179041Y-106107908D01* X77447104Y-106207890D01* X77726637Y-106268699D01* X78011999Y-106289109D01* X78012001Y-106289109D01* X78297362Y-106268699D01* X78576895Y-106207890D01* X78844958Y-106107908D01* X79096047Y-105970803D01* X79238561Y-105864116D01* X79238562Y-105864115D01* X78631611Y-105257163D01* X78790069Y-105137501D01* X78933652Y-104979999D01* X78982560Y-104901007D01* X79592115Y-105510562D01* X79592116Y-105510561D01* X79698803Y-105368047D01* X79835908Y-105116958D01* X79935890Y-104848895D01* X79996699Y-104569362D01* X80017109Y-104284001D01* X80017109Y-104283998D01* X79996699Y-103998637D01* X79935890Y-103719104D01* X79835908Y-103451041D01* X79698808Y-103199961D01* X79698807Y-103199960D01* X79592115Y-103057436D01* X78982560Y-103666991D01* X78933652Y-103588001D01* X78790069Y-103430499D01* X78631610Y-103310835D01* X79238562Y-102703883D01* X79238561Y-102703882D01* X79096046Y-102597196D01* X79096038Y-102597191D01* X79037692Y-102565332D01* X78988287Y-102515927D01* X78973435Y-102447654D01* X78997852Y-102382190D01* X79053785Y-102340318D01* X79097119Y-102332500D01* X79656061Y-102332500D01* X79723100Y-102352185D01* X79768855Y-102404989D01* X79774755Y-102420615D01* X79785021Y-102454572D01* X79785027Y-102454588D01* X79805891Y-102502821D01* X79807077Y-102505768D01* X79821951Y-102545646D01* X79831111Y-102570204D01* X79918739Y-102687261D01* X80035796Y-102774889D01* X80103831Y-102800265D01* X80172795Y-102825988D01* X80172798Y-102825989D01* X80212755Y-102830285D01* X80277306Y-102857023D01* X80317155Y-102914415D01* X80323500Y-102953574D01* X80323500Y-105536289D01* X80322191Y-105554259D01* X80318658Y-105578374D01* X80323264Y-105631003D01* X80323500Y-105636410D01* X80323500Y-105644761D01* X80327347Y-105677679D01* X80334112Y-105755010D01* X80335572Y-105762077D01* X80335526Y-105762086D01* X80337209Y-105769677D01* X80337254Y-105769667D01* X80338919Y-105776693D01* X80365473Y-105849648D01* X80389886Y-105923320D01* X80392940Y-105929869D01* X80392896Y-105929889D01* X80396284Y-105936887D01* X80396327Y-105936866D01* X80399568Y-105943320D01* X80442232Y-106008187D01* X80447635Y-106016946D01* X80482970Y-106074234D01* X80482972Y-106074236D01* X80487451Y-106079901D01* X80487413Y-106079930D01* X80492320Y-106085955D01* X80492357Y-106085925D01* X80497002Y-106091461D01* X80553482Y-106144746D01* X82235310Y-107826574D01* X82247091Y-107840206D01* X82261645Y-107859755D01* X82302126Y-107893722D01* X82306100Y-107897364D01* X82312014Y-107903278D01* X82338009Y-107923832D01* X82397474Y-107973729D01* X82397475Y-107973729D01* X82397477Y-107973731D01* X82403510Y-107977699D01* X82403484Y-107977738D01* X82410041Y-107981915D01* X82410067Y-107981875D01* X82416205Y-107985661D01* X82416209Y-107985664D01* X82486566Y-108018472D01* X82555926Y-108053306D01* X82555932Y-108053307D01* X82562720Y-108055779D01* X82562703Y-108055825D01* X82570038Y-108058374D01* X82570054Y-108058329D01* X82576903Y-108060599D01* X82576908Y-108060600D01* X82652964Y-108076304D01* X82712223Y-108090349D01* X82728453Y-108094196D01* X82728454Y-108094196D01* X82728458Y-108094197D01* X82728462Y-108094197D01* X82735631Y-108095035D01* X82735625Y-108095083D01* X82743356Y-108095874D01* X82743361Y-108095827D01* X82750551Y-108096456D01* X82750555Y-108096455D01* X82750556Y-108096456D01* X82828194Y-108094197D01* X97933609Y-108094197D01* X97951579Y-108095506D01* X97954077Y-108095871D01* X97975692Y-108099038D01* X98028329Y-108094432D01* X98033731Y-108094197D01* X98042078Y-108094197D01* X98042083Y-108094197D01* X98065738Y-108091431D01* X98074999Y-108090349D01* X98152322Y-108083585D01* X98152325Y-108083584D01* X98152329Y-108083584D01* X98152332Y-108083582D01* X98159396Y-108082124D01* X98159405Y-108082171D01* X98167000Y-108080487D01* X98166990Y-108080441D01* X98174010Y-108078776D01* X98174016Y-108078776D01* X98246968Y-108052223D01* X98320641Y-108027811D01* X98320649Y-108027805D01* X98327187Y-108024758D01* X98327208Y-108024803D01* X98334205Y-108021416D01* X98334183Y-108021372D01* X98340632Y-108018133D01* X98340631Y-108018133D01* X98340635Y-108018132D01* X98405508Y-107975463D01* X98471554Y-107934727D01* X98471558Y-107934722D01* X98477222Y-107930245D01* X98477253Y-107930284D01* X98483277Y-107925377D01* X98483245Y-107925339D01* X98488767Y-107920704D01* X98488777Y-107920698D01* X98514233Y-107893716D01* X98542066Y-107864215D01* X99399498Y-107006782D01* X99703280Y-106702999D01* X99716906Y-106691223D01* X99736458Y-106676669D01* X99770415Y-106636200D01* X99774075Y-106632205D01* X99779980Y-106626301D01* X99800536Y-106600303D01* X99850433Y-106540839D01* X99854403Y-106534803D01* X99854443Y-106534829D01* X99858612Y-106528286D01* X99858571Y-106528261D01* X99862364Y-106522111D01* X99862365Y-106522108D01* X99862367Y-106522106D01* X99895173Y-106451752D01* X99930009Y-106382388D01* X99930010Y-106382380D01* X99932479Y-106375600D01* X99932526Y-106375617D01* X99935078Y-106368275D01* X99935031Y-106368260D01* X99937300Y-106361411D01* X99937300Y-106361409D01* X99937302Y-106361406D01* X99952999Y-106285381D01* X99970900Y-106209856D01* X99970900Y-106209854D01* X99970901Y-106209850D01* X99971739Y-106202683D01* X99971786Y-106202688D01* X99972576Y-106194957D01* X99972529Y-106194953D01* X99973158Y-106187762D01* X99971906Y-106144746D01* X99970900Y-106110154D01* X99970900Y-45784293D01* X99972209Y-45766323D01* X99972324Y-45765532D01* X99975741Y-45742211D01* X99971135Y-45689573D01* X99970900Y-45684172D01* X99970900Y-45675824D01* X99970899Y-45675813D01* X99969655Y-45665175D01* X99967052Y-45642904D01* X99960287Y-45565574D01* X99960285Y-45565570D01* X99958827Y-45558503D01* X99958873Y-45558493D01* X99957190Y-45550902D01* X99957144Y-45550914D01* X99955480Y-45543895D01* X99955479Y-45543887D01* X99928926Y-45470934D01* X99904514Y-45397262D01* X99904513Y-45397260D01* X99901461Y-45390715D01* X99901505Y-45390694D01* X99898117Y-45383695D01* X99898074Y-45383717D01* X99894836Y-45377269D01* X99852166Y-45312394D01* X99811430Y-45246349D01* X99806953Y-45240687D01* X99806990Y-45240656D01* X99802081Y-45234629D01* X99802045Y-45234660D01* X99797405Y-45229131D01* X99797403Y-45229129D01* X99797401Y-45229126D01* X99748460Y-45182952D01* X99740917Y-45175835D01* X98778204Y-44213123D01* X98766422Y-44199490D01* X98751872Y-44179946D01* X98751871Y-44179945D01* X98751869Y-44179942D01* X98745715Y-44174778D01* X98711387Y-44145972D01* X98707398Y-44142317D01* X98701502Y-44136421D01* X98701501Y-44136420D01* X98675503Y-44115863D01* X98616040Y-44065968D01* X98616035Y-44065965D01* X98610005Y-44061999D01* X98610030Y-44061959D01* X98603469Y-44057779D01* X98603445Y-44057820D01* X98597304Y-44054031D01* X98526940Y-44021220D01* X98457585Y-43986389D01* X98450801Y-43983920D01* X98450816Y-43983876D01* X98443471Y-43981322D01* X98443457Y-43981367D01* X98436605Y-43979096D01* X98398577Y-43971244D01* X98360549Y-43963392D01* X98285056Y-43945500D01* X98285054Y-43945500D01* X98285046Y-43945498D01* X98277882Y-43944661D01* X98277887Y-43944612D01* X98270157Y-43943822D01* X98270153Y-43943870D01* X98262962Y-43943240D01* X98185320Y-43945500D01* X97533395Y-43945500D01* X97466356Y-43925815D01* X97420601Y-43873011D01* X97413190Y-43851943D01* X97400427Y-43801546D01* X97382850Y-43732143D01* X97380411Y-43723649D01* X97356280Y-43657230D01* X97355705Y-43656314D01* X97344574Y-43633765D01* X97343056Y-43629696D01* X97334889Y-43607796D01* X97247261Y-43490739D01* X97130204Y-43403111D01* X96993203Y-43352011D01* X96932654Y-43345500D01* X96932638Y-43345500D01* X96895584Y-43345500D01* X96859475Y-43344456D01* X96853397Y-43344879D01* X96853379Y-43344620D01* X96842897Y-43345500D01* X93335345Y-43345500D01* X93274797Y-43352011D01* X93274795Y-43352011D01* X93137795Y-43403111D01* X93020739Y-43490739D01* X92933111Y-43607795D01* X92882011Y-43744795D01* X92882011Y-43744797D01* X92875500Y-43805345D01* X92875500Y-44645250D01* X92875288Y-44650373D01* X92871307Y-44698415D01* X92870844Y-44704000D01* X92874317Y-44745916D01* X92875288Y-44757625D01* X92875500Y-44762747D01* X92875500Y-45602654D01* X92882011Y-45663202D01* X92882011Y-45663204D01* X92920474Y-45766323D01* X92933111Y-45800204D01* X93007097Y-45899038D01* X93007585Y-45899689D01* X93032002Y-45965154D01* X93017150Y-46033427D01* X93007586Y-46048308D01* X92999445Y-46059185D01* X92933111Y-46147795D01* X92882011Y-46284795D01* X92882011Y-46284797D01* X92875500Y-46345345D01* X92875500Y-47185250D01* X92875288Y-47190373D01* X92870844Y-47243995D01* X92870844Y-47244003D01* X92871665Y-47253910D01* X92875163Y-47296124D01* X92875288Y-47297625D01* X92875500Y-47302747D01* X92875500Y-48142654D01* X92882011Y-48203202D01* X92882011Y-48203204D01* X92926195Y-48321662D01* X92933111Y-48340204D01* X93020739Y-48457261D01* X93137796Y-48544889D01* X93274799Y-48595989D01* X93302050Y-48598918D01* X93335345Y-48602499D01* X93335362Y-48602500D01* X96932638Y-48602500D01* X96932654Y-48602499D01* X96959692Y-48599591D01* X96993201Y-48595989D01* X97130204Y-48544889D01* X97247261Y-48457261D01* X97334889Y-48340204D01* X97385989Y-48203201D01* X97391479Y-48152138D01* X97392499Y-48142654D01* X97392500Y-48142637D01* X97392500Y-46345362D01* X97392499Y-46345345D01* X97389157Y-46314270D01* X97385989Y-46284799D01* X97382458Y-46275333D01* X97348007Y-46182966D01* X97334889Y-46147796D01* X97260413Y-46048308D01* X97235997Y-45982846D01* X97250849Y-45914573D01* X97260405Y-45899700D01* X97289933Y-45860255D01* X97292638Y-45856895D01* X97293337Y-45856084D01* X97293362Y-45856060D01* X97298715Y-45848881D01* X97299899Y-45847100D01* X97301853Y-45844333D01* X97334889Y-45800204D01* X97368873Y-45709088D01* X97378092Y-45684373D01* X97382133Y-45674565D01* X97384840Y-45667996D01* X97413190Y-45556056D01* X97448732Y-45495901D01* X97511153Y-45464511D01* X97533395Y-45462500D01* X97830857Y-45462500D01* X97897896Y-45482185D01* X97918538Y-45498819D01* X98417581Y-45997862D01* X98451066Y-46059185D01* X98453900Y-46085543D01* X98453900Y-105755657D01* X98434215Y-105822696D01* X98417581Y-105843338D01* X97720041Y-106540878D01* X97658718Y-106574363D01* X97632360Y-106577197D01* X83182657Y-106577197D01* X83115618Y-106557512D01* X83094976Y-106540878D01* X81876819Y-105322721D01* X81843334Y-105261398D01* X81840500Y-105235040D01* X81840500Y-102953574D01* X81860185Y-102886535D01* X81912989Y-102840780D01* X81951245Y-102830285D01* X81991201Y-102825989D01* X81991204Y-102825988D01* X82005768Y-102820555D01* X82128204Y-102774889D01* X82245261Y-102687261D01* X82332889Y-102570204D01* X82351976Y-102519030D01* X82372717Y-102463424D01* X82414588Y-102407490D01* X82480053Y-102383074D01* X82548326Y-102397926D01* X82576579Y-102419077D01* X82737700Y-102580198D01* X82925251Y-102711523D01* X83020980Y-102756162D01* X83132750Y-102808281D01* X83132752Y-102808281D01* X83132757Y-102808284D01* X83353913Y-102867543D01* X83516832Y-102881796D01* X83581998Y-102887498D01* X83582000Y-102887498D01* X83582002Y-102887498D01* X83639021Y-102882509D01* X83810087Y-102867543D01* X84031243Y-102808284D01* X84238749Y-102711523D01* X84426300Y-102580198D01* X84494319Y-102512179D01* X84555642Y-102478694D01* X84625334Y-102483678D01* X84669681Y-102512179D01* X84737700Y-102580198D01* X84925251Y-102711523D01* X85020980Y-102756162D01* X85132750Y-102808281D01* X85132752Y-102808281D01* X85132757Y-102808284D01* X85353913Y-102867543D01* X85516832Y-102881796D01* X85581998Y-102887498D01* X85582000Y-102887498D01* X85582002Y-102887498D01* X85639021Y-102882509D01* X85810087Y-102867543D01* X86031243Y-102808284D01* X86238749Y-102711523D01* X86426300Y-102580198D01* X86588198Y-102418300D01* X86719523Y-102230749D01* X86724307Y-102220487D01* X86770476Y-102168051D01* X86837669Y-102148897D01* X86904551Y-102169111D01* X86949072Y-102220490D01* X86951866Y-102226483D01* X87002973Y-102299471D01* X87002974Y-102299472D01* X87619064Y-101683381D01* X87645481Y-101773351D01* X87719327Y-101888258D01* X87822555Y-101977705D01* X87946801Y-102034446D01* X87971548Y-102038004D01* X87356526Y-102653025D01* X87356526Y-102653026D01* X87429512Y-102704131D01* X87429516Y-102704133D01* X87635673Y-102800265D01* X87635682Y-102800269D01* X87855389Y-102859139D01* X87855400Y-102859141D01* X88081998Y-102878966D01* X88082002Y-102878966D01* X88308599Y-102859141D01* X88308610Y-102859139D01* X88528317Y-102800269D01* X88528331Y-102800264D01* X88734478Y-102704136D01* X88807472Y-102653025D01* X88192451Y-102038004D01* X88217199Y-102034446D01* X88341445Y-101977705D01* X88444673Y-101888258D01* X88518519Y-101773351D01* X88544935Y-101683382D01* X89161025Y-102299472D01* X89212136Y-102226478D01* X89308264Y-102020331D01* X89308269Y-102020317D01* X89367139Y-101800610D01* X89367141Y-101800599D01* X89386966Y-101574002D01* X89386966Y-101573997D01* X89367141Y-101347400D01* X89367139Y-101347389D01* X89308269Y-101127682D01* X89308265Y-101127673D01* X89212133Y-100921516D01* X89212129Y-100921510D01* X89157704Y-100843783D01* X89135376Y-100777577D01* X89152386Y-100709810D01* X89203333Y-100661996D01* X89272043Y-100649318D01* X89336700Y-100675799D01* X89346959Y-100684978D01* X89482858Y-100820877D01* X89494640Y-100834510D01* X89505074Y-100848526D01* X89509193Y-100854058D01* X89549674Y-100888025D01* X89553648Y-100891667D01* X89559562Y-100897581D01* X89585557Y-100918135D01* X89645022Y-100968032D01* X89645023Y-100968032D01* X89645025Y-100968034D01* X89651058Y-100972002D01* X89651032Y-100972041D01* X89657589Y-100976218D01* X89657615Y-100976178D01* X89663753Y-100979964D01* X89663757Y-100979967D01* X89734114Y-101012775D01* X89803474Y-101047609D01* X89803480Y-101047610D01* X89810268Y-101050082D01* X89810251Y-101050128D01* X89817586Y-101052677D01* X89817602Y-101052632D01* X89824451Y-101054902D01* X89824456Y-101054903D01* X89900512Y-101070607D01* X89961265Y-101085006D01* X89976001Y-101088499D01* X89976002Y-101088499D01* X89976006Y-101088500D01* X89976010Y-101088500D01* X89983179Y-101089338D01* X89983173Y-101089386D01* X89990904Y-101090177D01* X89990909Y-101090130D01* X89998099Y-101090759D01* X89998103Y-101090758D01* X89998104Y-101090759D01* X90075742Y-101088500D01* X92547244Y-101088500D01* X92614283Y-101108185D01* X92634925Y-101124819D01* X92858513Y-101348407D01* X92891998Y-101409730D01* X92894832Y-101436088D01* X92894832Y-102935889D01* X92875147Y-103002928D01* X92822343Y-103048683D01* X92761986Y-103059573D01* X92732115Y-103057436D01* X92122560Y-103666991D01* X92073652Y-103588001D01* X91930069Y-103430499D01* X91771610Y-103310835D01* X92378562Y-102703883D01* X92378561Y-102703882D01* X92236046Y-102597196D01* X92236038Y-102597191D01* X91984957Y-102460091D01* X91984958Y-102460091D01* X91716895Y-102360109D01* X91437362Y-102299300D01* X91152001Y-102278891D01* X91151999Y-102278891D01* X90866637Y-102299300D01* X90587104Y-102360109D01* X90319041Y-102460091D01* X90067961Y-102597191D01* X90067953Y-102597196D01* X89925437Y-102703882D01* X89925436Y-102703883D01* X90532389Y-103310835D01* X90373931Y-103430499D01* X90230348Y-103588001D01* X90181439Y-103666992D01* X89571883Y-103057436D01* X89571882Y-103057437D01* X89465196Y-103199953D01* X89465191Y-103199961D01* X89328091Y-103451041D01* X89228109Y-103719104D01* X89167300Y-103998637D01* X89146891Y-104283998D01* X89146891Y-104284001D01* X89167300Y-104569362D01* X89228109Y-104848895D01* X89328091Y-105116958D01* X89465191Y-105368038D01* X89465196Y-105368046D01* X89571882Y-105510561D01* X89571883Y-105510562D01* X90181438Y-104901006D01* X90230348Y-104979999D01* X90373931Y-105137501D01* X90532388Y-105257163D01* X89925436Y-105864115D01* X90067960Y-105970807D01* X90067961Y-105970808D01* X90319042Y-106107908D01* X90319041Y-106107908D01* X90587104Y-106207890D01* X90866637Y-106268699D01* X91151999Y-106289109D01* X91152001Y-106289109D01* X91437362Y-106268699D01* X91716895Y-106207890D01* X91984958Y-106107908D01* X92236047Y-105970803D01* X92378561Y-105864116D01* X92378562Y-105864115D01* X91771611Y-105257163D01* X91930069Y-105137501D01* X92073652Y-104979999D01* X92122560Y-104901007D01* X92732115Y-105510562D01* X92732116Y-105510561D01* X92838803Y-105368047D01* X92975908Y-105116958D01* X93075890Y-104848895D01* X93136699Y-104569362D01* X93157109Y-104284001D01* X93157109Y-104284000D01* X93149843Y-104182418D01* X93164694Y-104114145D01* X93214099Y-104064739D01* X93282372Y-104049887D01* X93347837Y-104074303D01* X93361208Y-104085890D01* X94171961Y-104896642D01* X94187775Y-104916024D01* X94193882Y-104925279D01* X94193886Y-104925283D01* X94193890Y-104925289D01* X94262391Y-105002435D01* X94275766Y-105020587D01* X94276822Y-105022333D01* X94287245Y-105044105D01* X94297241Y-105071576D01* X94298444Y-105075233D01* X94331788Y-105188249D01* X94336823Y-105203634D01* X94376527Y-105312890D01* X94377987Y-105317632D01* X94378243Y-105318380D01* X94379074Y-105320274D01* X94380564Y-105323995D01* X94397338Y-105370149D01* X94399503Y-105375729D01* X94399507Y-105375738D01* X94399506Y-105375737D01* X94427285Y-105435619D01* X94430576Y-105441134D01* X94430072Y-105441434D01* X94438765Y-105456356D01* X94468678Y-105524551D01* X94591813Y-105713022D01* X94591821Y-105713033D01* X94730904Y-105864115D01* X94744297Y-105878663D01* X94921961Y-106016946D01* X94921962Y-106016946D01* X94921964Y-106016948D01* X95027820Y-106074234D01* X95119963Y-106124099D01* X95332902Y-106197201D01* X95554968Y-106234257D01* X95780106Y-106234257D01* X96002172Y-106197201D01* X96215111Y-106124099D01* X96413113Y-106016946D01* X96590777Y-105878663D01* X96743259Y-105713025D01* X96866397Y-105524548D01* X96956833Y-105318373D01* X97012101Y-105100125D01* X97013494Y-105083318D01* X97030693Y-104875762D01* X97030693Y-104875751D01* X97012102Y-104651397D01* X97012100Y-104651385D01* X96975620Y-104507330D01* X96956833Y-104433141D01* X96866397Y-104226966D01* X96863603Y-104222690D01* X96775634Y-104088043D01* X96743259Y-104038489D01* X96743256Y-104038486D01* X96743252Y-104038480D01* X96590780Y-103872854D01* X96590775Y-103872849D01* X96413114Y-103734569D01* X96413109Y-103734565D01* X96215117Y-103627418D01* X96215114Y-103627416D01* X96215111Y-103627415D01* X96215108Y-103627414D01* X96215106Y-103627413D01* X96002174Y-103554313D01* X95780106Y-103517257D01* X95554968Y-103517257D01* X95332899Y-103554313D01* X95139673Y-103620648D01* X95069874Y-103623798D01* X95011729Y-103591048D01* X94448151Y-103027470D01* X94414666Y-102966147D01* X94411832Y-102939789D01* X94411832Y-101215748D01* X94431517Y-101148709D01* X94484321Y-101102954D01* X94553479Y-101093010D01* X94579158Y-101099564D01* X94665415Y-101131737D01* X94706220Y-101146957D01* X94708336Y-101147746D01* X94735587Y-101150675D01* X94768882Y-101154256D01* X94768899Y-101154257D01* X96566175Y-101154257D01* X96566191Y-101154256D01* X96593229Y-101151348D01* X96626738Y-101147746D01* X96628854Y-101146957D01* X96669659Y-101131737D01* X96763741Y-101096646D01* X96880798Y-101009018D01* X96968426Y-100891961D01* X97019526Y-100754958D01* X97023832Y-100714908D01* X97026036Y-100694411D01* X97026037Y-100694394D01* X97026037Y-98897119D01* X97026036Y-98897102D01* X97022365Y-98862962D01* X97019526Y-98836556D01* X97018143Y-98832849D01* X96984305Y-98742126D01* X96968426Y-98699553D01* X96880798Y-98582496D01* X96763741Y-98494868D01* X96626740Y-98443768D01* X96566191Y-98437257D01* X96566175Y-98437257D01* X94768899Y-98437257D01* X94768882Y-98437257D01* X94708334Y-98443768D01* X94708332Y-98443768D01* X94571332Y-98494868D01* X94454276Y-98582496D01* X94366649Y-98699550D01* X94366648Y-98699553D01* X94315550Y-98836552D01* X94315548Y-98836557D01* X94315547Y-98836562D01* X94309835Y-98889689D01* X94308340Y-98898096D01* X94286746Y-98984550D01* X94251402Y-99044821D01* X94189084Y-99076415D01* X94166442Y-99078500D01* X94127498Y-99078500D01* X94060459Y-99058815D01* X94039817Y-99042181D01* X93816464Y-98818828D01* X93804682Y-98805195D01* X93790132Y-98785651D01* X93790131Y-98785650D01* X93790129Y-98785647D01* X93783384Y-98779987D01* X93749647Y-98751677D01* X93745658Y-98748022D01* X93739762Y-98742126D01* X93739761Y-98742125D01* X93713763Y-98721568D01* X93654300Y-98671673D01* X93654295Y-98671670D01* X93648265Y-98667704D01* X93648290Y-98667664D01* X93641729Y-98663484D01* X93641705Y-98663525D01* X93635564Y-98659736D01* X93565200Y-98626925D01* X93495845Y-98592094D01* X93489061Y-98589625D01* X93489076Y-98589581D01* X93481731Y-98587027D01* X93481717Y-98587072D01* X93474865Y-98584801D01* X93436837Y-98576949D01* X93398809Y-98569097D01* X93323316Y-98551205D01* X93323314Y-98551205D01* X93323306Y-98551203D01* X93316142Y-98550366D01* X93316147Y-98550317D01* X93308417Y-98549527D01* X93308413Y-98549575D01* X93301222Y-98548945D01* X93223580Y-98551205D01* X91002920Y-98551205D01* X90935881Y-98531520D01* X90915239Y-98514886D01* X88678819Y-96278466D01* X88645334Y-96217143D01* X88642500Y-96190785D01* X88642500Y-96018624D01* X88662185Y-95951585D01* X88714989Y-95905830D01* X88755299Y-95895131D01* X88801937Y-95890904D01* X88801946Y-95890902D01* X88801951Y-95890902D01* X88801941Y-95890904D01* X88804747Y-95890439D01* X88805309Y-95890347D01* X88805309Y-95890346D01* X88808488Y-95889821D01* X88811976Y-95889346D01* X88815607Y-95888955D01* X88843201Y-95885989D01* X88980204Y-95834889D01* X89097261Y-95747261D01* X89184889Y-95630204D01* X89235989Y-95493201D01* X89240185Y-95454175D01* X89242499Y-95432654D01* X89242500Y-95432637D01* X89242500Y-95357500D01* X89242534Y-95356328D01* X89242533Y-95356325D01* X89242559Y-95355433D01* X89242500Y-95353693D01* X89242500Y-92964003D01* X92870844Y-92964003D01* X92875288Y-93017625D01* X92875500Y-93022747D01* X92875500Y-93862654D01* X92882011Y-93923202D01* X92882011Y-93923204D01* X92926682Y-94042967D01* X92933111Y-94060204D01* X93020739Y-94177261D01* X93137796Y-94264889D01* X93274799Y-94315989D01* X93302050Y-94318918D01* X93335345Y-94322499D01* X93335362Y-94322500D01* X96932638Y-94322500D01* X96932654Y-94322499D01* X96959692Y-94319591D01* X96993201Y-94315989D01* X97130204Y-94264889D01* X97247261Y-94177261D01* X97334889Y-94060204D01* X97385989Y-93923201D01* X97392223Y-93865219D01* X97392499Y-93862654D01* X97392500Y-93862637D01* X97392500Y-92065362D01* X97392499Y-92065345D01* X97388539Y-92028522D01* X97385989Y-92004799D01* X97383931Y-91999282D01* X97334888Y-91867793D01* X97334887Y-91867792D01* X97273173Y-91785353D01* X97260414Y-91768310D01* X97235997Y-91702847D01* X97250848Y-91634574D01* X97260415Y-91619689D01* X97269919Y-91606994D01* X97301133Y-91565296D01* X97334887Y-91520207D01* X97334888Y-91520206D01* X97385988Y-91383204D01* X97385988Y-91383203D01* X97385989Y-91383201D01* X97389591Y-91349692D01* X97392499Y-91322654D01* X97392500Y-91322637D01* X97392500Y-89525362D01* X97392499Y-89525345D01* X97389157Y-89494270D01* X97385989Y-89464799D01* X97334889Y-89327796D01* X97247261Y-89210739D01* X97130204Y-89123111D01* X96993203Y-89072011D01* X96932654Y-89065500D01* X96932638Y-89065500D01* X93335362Y-89065500D01* X93335345Y-89065500D01* X93274797Y-89072011D01* X93274795Y-89072011D01* X93137795Y-89123111D01* X93020739Y-89210739D01* X92933111Y-89327795D01* X92882011Y-89464795D01* X92882011Y-89464797D01* X92875500Y-89525345D01* X92875500Y-90365250D01* X92875288Y-90370373D01* X92870844Y-90423995D01* X92870844Y-90424003D01* X92875288Y-90477625D01* X92875500Y-90482747D01* X92875500Y-91322654D01* X92882011Y-91383202D01* X92882011Y-91383204D01* X92921828Y-91489954D01* X92933111Y-91520204D01* X92998081Y-91606994D01* X93007585Y-91619689D01* X93032002Y-91685154D01* X93017150Y-91753427D01* X93007586Y-91768308D01* X92994827Y-91785353D01* X92933111Y-91867795D01* X92882011Y-92004795D01* X92882011Y-92004797D01* X92875500Y-92065345D01* X92875500Y-92905250D01* X92875288Y-92910373D01* X92870844Y-92963995D01* X92870844Y-92964003D01* X89242500Y-92964003D01* X89242500Y-92792747D01* X89242712Y-92787625D01* X89247156Y-92734003D01* X89247156Y-92733995D01* X89242712Y-92680373D01* X89242500Y-92675250D01* X89242500Y-91835362D01* X89242499Y-91835345D01* X89239157Y-91804270D01* X89235989Y-91774799D01* X89233569Y-91768311D01* X89199004Y-91675639D01* X89184889Y-91637796D01* X89097261Y-91520739D01* X88980204Y-91433111D01* X88957088Y-91424489D01* X88843203Y-91382011D01* X88782654Y-91375500D01* X88782638Y-91375500D01* X86985362Y-91375500D01* X86985345Y-91375500D01* X86924797Y-91382011D01* X86924795Y-91382011D01* X86787795Y-91433111D01* X86670739Y-91520739D01* X86583111Y-91637795D01* X86532011Y-91774795D01* X86532011Y-91774797D01* X86525500Y-91835345D01* X86525500Y-92675250D01* X86525288Y-92680373D01* X86520844Y-92733995D01* X86520844Y-92734003D01* X86525288Y-92787625D01* X86525500Y-92792747D01* X86525500Y-95432654D01* X86532011Y-95493202D01* X86532011Y-95493204D01* X86575664Y-95610238D01* X86583111Y-95630204D01* X86670738Y-95747260D01* X86670740Y-95747262D01* X86784701Y-95832572D01* X86826573Y-95888506D01* X86831557Y-95958197D01* X86798072Y-96019520D01* X86736749Y-96053005D01* X86681796Y-96052497D01* X86639107Y-96042380D01* X86619567Y-96037749D01* X86619566Y-96037749D01* X86619562Y-96037748D01* X86612393Y-96036910D01* X86612398Y-96036861D01* X86604668Y-96036071D01* X86604664Y-96036119D01* X86597473Y-96035489D01* X86519831Y-96037749D01* X84461792Y-96037749D01* X84394753Y-96018064D01* X84374111Y-96001430D01* X84133528Y-95760847D01* X84100043Y-95699524D01* X84105026Y-95629834D01* X84155989Y-95493201D01* X84160185Y-95454175D01* X84162499Y-95432654D01* X84162500Y-95432637D01* X84162500Y-92792747D01* X84162712Y-92787625D01* X84167156Y-92734003D01* X84167156Y-92733995D01* X84162712Y-92680373D01* X84162500Y-92675250D01* X84162500Y-91835362D01* X84162499Y-91835345D01* X84159157Y-91804270D01* X84155989Y-91774799D01* X84153569Y-91768311D01* X84119004Y-91675639D01* X84104889Y-91637796D01* X84017261Y-91520739D01* X83900204Y-91433111D01* X83877088Y-91424489D01* X83763203Y-91382011D01* X83702654Y-91375500D01* X83702638Y-91375500D01* X81905362Y-91375500D01* X81905345Y-91375500D01* X81844797Y-91382011D01* X81844795Y-91382011D01* X81707795Y-91433111D01* X81590739Y-91520739D01* X81503111Y-91637795D01* X81452011Y-91774795D01* X81452011Y-91774797D01* X81445500Y-91835345D01* X81445500Y-92675250D01* X81445288Y-92680373D01* X81440844Y-92733995D01* X81440844Y-92734003D01* X81445288Y-92787625D01* X81445500Y-92792747D01* X81445500Y-94293087D01* X81425815Y-94360126D01* X81373011Y-94405881D01* X81303853Y-94415825D01* X81278166Y-94409268D01* X81140610Y-94357961D01* X81140605Y-94357960D01* X81080057Y-94351449D01* X81080041Y-94351449D01* X80432751Y-94351449D01* X80432734Y-94351449D01* X80372186Y-94357960D01* X80372184Y-94357960D01* X80235184Y-94409060D01* X80118128Y-94496688D01* X80030500Y-94613744D01* X79979400Y-94750744D01* X79979400Y-94750746D01* X79972889Y-94811294D01* X79972889Y-95635900D01* X79953204Y-95702939D01* X79900400Y-95748694D01* X79848889Y-95759900D01* X79763979Y-95759900D01* X79696940Y-95740215D01* X79651185Y-95687411D01* X79639979Y-95635900D01* X79639979Y-94811311D01* X79639978Y-94811294D01* X79635677Y-94771297D01* X79633468Y-94750748D01* X79627713Y-94735319D01* X79586439Y-94624661D01* X79582368Y-94613745D01* X79494740Y-94496688D01* X79377683Y-94409060D01* X79377681Y-94409059D01* X79377683Y-94409059D01* X79328336Y-94390654D01* X79272402Y-94348783D01* X79247986Y-94283318D01* X79262837Y-94215046D01* X79272124Y-94198155D01* X79277496Y-94177227D01* X79283796Y-94158827D01* X79292379Y-94138995D01* X79300077Y-94090389D01* X79301257Y-94084683D01* X79313500Y-94037006D01* X79313500Y-94015399D01* X79315027Y-93995998D01* X79318406Y-93974667D01* X79313775Y-93925676D01* X79313500Y-93919838D01* X79313500Y-91975570D01* X79315282Y-91959432D01* X79315054Y-91959411D01* X79315788Y-91951648D01* X79313500Y-91878841D01* X79313500Y-91847757D01* X79313500Y-91847751D01* X79312566Y-91840358D01* X79312107Y-91834530D01* X79310562Y-91785353D01* X79304536Y-91764612D01* X79300590Y-91745561D01* X79297882Y-91724119D01* X79279761Y-91678353D01* X79277872Y-91672833D01* X79267693Y-91637795D01* X79264145Y-91625583D01* X79253149Y-91606991D01* X79244589Y-91589518D01* X79236635Y-91569427D01* X79228091Y-91557667D01* X79207711Y-91529617D01* X79204502Y-91524732D01* X79183602Y-91489392D01* X79179453Y-91482376D01* X79179449Y-91482372D01* X79179446Y-91482368D01* X79164175Y-91467097D01* X79151537Y-91452301D01* X79138839Y-91434823D01* X79100921Y-91403455D01* X79096598Y-91399521D01* X78605537Y-90908460D01* X78595382Y-90895784D01* X78595206Y-90895930D01* X78590233Y-90889919D01* X78537116Y-90840039D01* X78515154Y-90818076D01* X78509266Y-90813509D01* X78504824Y-90809715D01* X78468954Y-90776031D01* X78468951Y-90776028D01* X78463860Y-90773229D01* X78450017Y-90765618D01* X78433761Y-90754940D01* X78416684Y-90741694D01* X78371515Y-90722148D01* X78366268Y-90719577D01* X78347171Y-90709079D01* X78323155Y-90695876D01* X78323152Y-90695875D01* X78302227Y-90690501D01* X78283833Y-90684204D01* X78279560Y-90682355D01* X78263995Y-90675620D01* X78263992Y-90675619D01* X78263991Y-90675619D01* X78215389Y-90667921D01* X78209667Y-90666736D01* X78162008Y-90654500D01* X78162006Y-90654500D01* X78140400Y-90654500D01* X78121002Y-90652973D01* X78112422Y-90651614D01* X78099668Y-90649594D01* X78099667Y-90649594D01* X78050674Y-90654225D01* X78044838Y-90654500D01* X78013945Y-90654500D01* X77946906Y-90634815D01* X77901151Y-90582011D01* X77891558Y-90550437D01* X77890659Y-90544919D01* X77885224Y-90511553D01* X77849792Y-90261005D01* X77849180Y-90256109D01* X77815518Y-89986662D01* X77815517Y-89986660D01* X77815516Y-89986651D01* X77814982Y-89984024D01* X77812500Y-89959339D01* X77812500Y-89525362D01* X77812499Y-89525345D01* X77809157Y-89494270D01* X77805989Y-89464799D01* X77754889Y-89327796D01* X77667261Y-89210739D01* X77550204Y-89123111D01* X77413203Y-89072011D01* X77352654Y-89065500D01* X77352638Y-89065500D01* X73755362Y-89065500D01* X73755345Y-89065500D01* X73694797Y-89072011D01* X73694795Y-89072011D01* X73557795Y-89123111D01* X73440739Y-89210739D01* X73353111Y-89327795D01* X73302011Y-89464795D01* X73302011Y-89464797D01* X73295500Y-89525345D01* X73295500Y-91322654D01* X73302011Y-91383202D01* X73302011Y-91383204D01* X73341828Y-91489954D01* X73353111Y-91520204D01* X73418081Y-91606994D01* X73427585Y-91619689D01* X73452002Y-91685154D01* X73437150Y-91753427D01* X73427586Y-91768308D01* X73414827Y-91785353D01* X73353111Y-91867795D01* X73302011Y-92004795D01* X73302011Y-92004797D01* X73295500Y-92065345D01* X73295500Y-93862654D01* X73302011Y-93923202D01* X73302011Y-93923204D01* X73346682Y-94042967D01* X73353111Y-94060204D01* X73440739Y-94177261D01* X73557796Y-94264889D01* X73694799Y-94315989D01* X73722050Y-94318918D01* X73755345Y-94322499D01* X73755362Y-94322500D01* X74267412Y-94322500D01* X74334451Y-94342185D01* X74380206Y-94394989D01* X74390150Y-94464147D01* X74365393Y-94522498D01* X74358695Y-94531132D01* X74358695Y-94531133D01* X74339150Y-94576297D01* X74336580Y-94581543D01* X74312876Y-94624661D01* X74307502Y-94645589D01* X74301203Y-94663987D01* X74292619Y-94683824D01* X74284923Y-94732422D01* X74283737Y-94738147D01* X74281376Y-94747342D01* X74245636Y-94807379D01* X74183111Y-94838562D01* X74161273Y-94840500D01* X73515062Y-94840500D01* X73515046Y-94840501D01* X73411172Y-94851113D01* X73242864Y-94906884D01* X73242859Y-94906886D01* X73091946Y-94999971D01* X72966571Y-95125346D01* X72873486Y-95276259D01* X72873484Y-95276264D01* X72817713Y-95444572D01* X72807100Y-95548447D01* X72807100Y-96174537D01* X72807101Y-96174553D01* X72817713Y-96278427D01* X72865558Y-96422816D01* X72873485Y-96446738D01* X72966569Y-96597651D01* X72966571Y-96597653D01* X73055237Y-96686319D01* X73088722Y-96747642D01* X73083738Y-96817334D01* X73055237Y-96861681D01* X72966571Y-96950346D01* X72873486Y-97101259D01* X72873484Y-97101264D01* X72817713Y-97269572D01* X72807100Y-97373447D01* X72807100Y-97999537D01* X68041004Y-97999537D01* X68047339Y-86631111D01* X68312704Y-86631111D01* X68312899Y-86633596D01* X68358718Y-86791308D01* X68442314Y-86932662D01* X68442321Y-86932671D01* X68558438Y-87048788D01* X68558447Y-87048795D01* X68699803Y-87132392D01* X68699806Y-87132393D01* X68857504Y-87178209D01* X68857510Y-87178210D01* X68894356Y-87181110D01* X69535000Y-87181110D01* X69535000Y-86631110D01* X70035000Y-86631110D01* X70035000Y-87181110D01* X70675644Y-87181110D01* X70712489Y-87178210D01* X70712495Y-87178209D01* X70870193Y-87132393D01* X70870196Y-87132392D01* X71011552Y-87048795D01* X71011561Y-87048788D01* X71127678Y-86932671D01* X71127685Y-86932662D01* X71211281Y-86791308D01* X71257100Y-86633596D01* X71257295Y-86631111D01* X71257295Y-86631110D01* X70035000Y-86631110D01* X69535000Y-86631110D01* X68312705Y-86631110D01* X68312704Y-86631111D01* X68047339Y-86631111D01* X68049866Y-82096349D01* X68069587Y-82029324D01* X68122416Y-81983599D01* X68191580Y-81973694D01* X68255120Y-82002754D01* X68291570Y-82057416D01* X68293330Y-82062727D01* X68296899Y-82078825D01* X68296945Y-82078815D01* X68298610Y-82085841D01* X68325163Y-82158795D01* X68326529Y-82162916D01* X68328933Y-82232744D01* X68327901Y-82236517D01* X68304438Y-82317278D01* X68304437Y-82317285D01* X68301500Y-82354605D01* X68301500Y-82787615D01* X68304437Y-82824939D01* X68304438Y-82824945D01* X68350853Y-82984706D01* X68350855Y-82984711D01* X68435547Y-83127918D01* X68437249Y-83130112D01* X68438047Y-83132144D01* X68439518Y-83134632D01* X68439116Y-83134869D01* X68462783Y-83195149D01* X68449101Y-83263666D01* X68437249Y-83282108D01* X68435547Y-83284301D01* X68350855Y-83427508D01* X68350853Y-83427513D01* X68304438Y-83587274D01* X68304437Y-83587280D01* X68301500Y-83624605D01* X68301500Y-84057615D01* X68304437Y-84094939D01* X68304438Y-84094945D01* X68350853Y-84254706D01* X68350855Y-84254711D01* X68435547Y-84397918D01* X68437249Y-84400112D01* X68438047Y-84402144D01* X68439518Y-84404632D01* X68439116Y-84404869D01* X68462783Y-84465149D01* X68449101Y-84533666D01* X68437249Y-84552108D01* X68435547Y-84554301D01* X68350855Y-84697508D01* X68350853Y-84697513D01* X68304438Y-84857274D01* X68304437Y-84857280D01* X68301500Y-84894605D01* X68301500Y-85327615D01* X68304437Y-85364939D01* X68304438Y-85364945D01* X68350853Y-85524706D01* X68350855Y-85524711D01* X68435544Y-85667913D01* X68440330Y-85674083D01* X68438416Y-85675567D01* X68466151Y-85726360D01* X68461167Y-85796052D01* X68446252Y-85822818D01* X68446288Y-85822839D01* X68445482Y-85824201D01* X68442969Y-85828712D01* X68442319Y-85829549D01* X68358718Y-85970911D01* X68312899Y-86128623D01* X68312704Y-86131108D01* X68312705Y-86131110D01* X71257295Y-86131110D01* X71257295Y-86131108D01* X71257100Y-86128621D01* X71257099Y-86128615D01* X71221794Y-86007095D01* X71221993Y-85937226D01* X71259935Y-85878556D01* X71323573Y-85849712D01* X71340870Y-85848500D01* X73150444Y-85848500D01* X73217483Y-85868185D01* X73263238Y-85920989D01* X73270886Y-85943010D01* X73282459Y-85990283D01* X73291943Y-86029020D01* X73295500Y-86058507D01* X73295500Y-86242654D01* X73302011Y-86303202D01* X73302011Y-86303204D01* X73338294Y-86400479D01* X73353111Y-86440204D01* X73440739Y-86557261D01* X73557796Y-86644889D01* X73694799Y-86695989D01* X73722050Y-86698918D01* X73755345Y-86702499D01* X73755362Y-86702500D01* X77352638Y-86702500D01* X77352654Y-86702499D01* X77379692Y-86699591D01* X77413201Y-86695989D01* X77550204Y-86644889D01* X77667261Y-86557261D01* X77754889Y-86440204D01* X77805989Y-86303201D01* X77809591Y-86269692D01* X77812499Y-86242654D01* X77812500Y-86242637D01* X77812500Y-85402747D01* X77812712Y-85397625D01* X77817156Y-85344003D01* X92870844Y-85344003D01* X92875288Y-85397625D01* X92875500Y-85402747D01* X92875500Y-86242654D01* X92882011Y-86303202D01* X92882011Y-86303204D01* X92918294Y-86400479D01* X92933111Y-86440204D01* X93020739Y-86557261D01* X93137796Y-86644889D01* X93274799Y-86695989D01* X93302050Y-86698918D01* X93335345Y-86702499D01* X93335362Y-86702500D01* X96932638Y-86702500D01* X96932654Y-86702499D01* X96959692Y-86699591D01* X96993201Y-86695989D01* X97130204Y-86644889D01* X97247261Y-86557261D01* X97334889Y-86440204D01* X97385989Y-86303201D01* X97389591Y-86269692D01* X97392499Y-86242654D01* X97392500Y-86242637D01* X97392500Y-84445362D01* X97392499Y-84445345D01* X97389157Y-84414270D01* X97385989Y-84384799D01* X97385453Y-84383362D01* X97334888Y-84247793D01* X97334887Y-84247792D01* X97269338Y-84160231D01* X97260414Y-84148309D01* X97235997Y-84082847D01* X97250848Y-84014574D01* X97260415Y-83999689D01* X97334887Y-83900207D01* X97334888Y-83900206D01* X97334890Y-83900202D01* X97385989Y-83763201D01* X97391049Y-83716137D01* X97392499Y-83702654D01* X97392500Y-83702637D01* X97392500Y-81905362D01* X97392499Y-81905345D01* X97389157Y-81874270D01* X97385989Y-81844799D01* X97384200Y-81840003D01* X97334888Y-81707793D01* X97334887Y-81707792D01* X97276251Y-81629466D01* X97260414Y-81608310D01* X97235997Y-81542847D01* X97250848Y-81474574D01* X97260415Y-81459689D01* X97334887Y-81360207D01* X97334888Y-81360206D01* X97385988Y-81223204D01* X97385988Y-81223203D01* X97385989Y-81223201D01* X97390506Y-81181184D01* X97392499Y-81162654D01* X97392500Y-81162637D01* X97392500Y-79365362D01* X97392499Y-79365345D01* X97389157Y-79334270D01* X97385989Y-79304799D01* X97334889Y-79167796D01* X97334888Y-79167793D01* X97334887Y-79167792D01* X97276251Y-79089466D01* X97260414Y-79068310D01* X97235997Y-79002847D01* X97250848Y-78934574D01* X97260415Y-78919689D01* X97334887Y-78820207D01* X97334888Y-78820206D01* X97385988Y-78683204D01* X97385988Y-78683203D01* X97385989Y-78683201D01* X97390506Y-78641184D01* X97392499Y-78622654D01* X97392500Y-78622637D01* X97392500Y-76825362D01* X97392499Y-76825345D01* X97389157Y-76794270D01* X97385989Y-76764799D01* X97334889Y-76627796D01* X97247261Y-76510739D01* X97130204Y-76423111D01* X96993203Y-76372011D01* X96932654Y-76365500D01* X96932638Y-76365500D01* X93335362Y-76365500D01* X93335345Y-76365500D01* X93274797Y-76372011D01* X93274795Y-76372011D01* X93137795Y-76423111D01* X93020739Y-76510739D01* X92933111Y-76627795D01* X92882011Y-76764795D01* X92882011Y-76764797D01* X92875500Y-76825345D01* X92875500Y-77665250D01* X92875288Y-77670373D01* X92870844Y-77723995D01* X92870844Y-77724003D01* X92875288Y-77777625D01* X92875500Y-77782747D01* X92875500Y-78622654D01* X92882011Y-78683202D01* X92882011Y-78683204D01* X92933111Y-78820204D01* X93007585Y-78919689D01* X93032002Y-78985154D01* X93017150Y-79053427D01* X93007586Y-79068308D01* X92987921Y-79094578D01* X92933111Y-79167795D01* X92882011Y-79304795D01* X92882011Y-79304797D01* X92875500Y-79365345D01* X92875500Y-80205250D01* X92875288Y-80210373D01* X92870844Y-80263995D01* X92870844Y-80264003D01* X92875288Y-80317625D01* X92875500Y-80322747D01* X92875500Y-81162654D01* X92882011Y-81223202D01* X92882011Y-81223204D01* X92933111Y-81360204D01* X93007585Y-81459689D01* X93032002Y-81525154D01* X93017150Y-81593427D01* X93007586Y-81608308D01* X92989949Y-81631869D01* X92933111Y-81707795D01* X92882011Y-81844795D01* X92882011Y-81844797D01* X92875500Y-81905345D01* X92875500Y-82745250D01* X92875288Y-82750373D01* X92870844Y-82803995D01* X92870844Y-82804003D01* X92875288Y-82857625D01* X92875500Y-82862747D01* X92875500Y-83702654D01* X92882011Y-83763202D01* X92882011Y-83763204D01* X92933111Y-83900204D01* X93007585Y-83999689D01* X93032002Y-84065154D01* X93017150Y-84133427D01* X93007586Y-84148308D01* X92998662Y-84160231D01* X92933111Y-84247795D01* X92882011Y-84384795D01* X92882011Y-84384797D01* X92875500Y-84445345D01* X92875500Y-85285250D01* X92875288Y-85290373D01* X92870844Y-85343995D01* X92870844Y-85344003D01* X77817156Y-85344003D01* X77817156Y-85343995D01* X77812712Y-85290373D01* X77812500Y-85285250D01* X77812500Y-84445362D01* X77812499Y-84445345D01* X77809157Y-84414270D01* X77805989Y-84384799D01* X77805453Y-84383362D01* X77754888Y-84247793D01* X77754887Y-84247792D01* X77689338Y-84160231D01* X77680414Y-84148309D01* X77655997Y-84082847D01* X77670848Y-84014574D01* X77680415Y-83999689D01* X77754887Y-83900207D01* X77754888Y-83900206D01* X77754890Y-83900202D01* X77805989Y-83763201D01* X77811049Y-83716137D01* X77812499Y-83702654D01* X77812500Y-83702637D01* X77812500Y-82862747D01* X77812712Y-82857625D01* X77817156Y-82804003D01* X77817156Y-82803995D01* X77812712Y-82750373D01* X77812500Y-82745250D01* X77812500Y-81905362D01* X77812499Y-81905345D01* X77809157Y-81874270D01* X77805989Y-81844799D01* X77804200Y-81840003D01* X77754888Y-81707793D01* X77754887Y-81707792D01* X77696251Y-81629466D01* X77680414Y-81608310D01* X77655997Y-81542847D01* X77670848Y-81474574D01* X77680415Y-81459689D01* X77754887Y-81360207D01* X77754888Y-81360206D01* X77805988Y-81223204D01* X77805988Y-81223203D01* X77805989Y-81223201D01* X77810506Y-81181184D01* X77812499Y-81162654D01* X77812500Y-81162637D01* X77812500Y-80322747D01* X77812712Y-80317625D01* X77817156Y-80264003D01* X77817156Y-80263995D01* X77812712Y-80210373D01* X77812500Y-80205250D01* X77812500Y-79365362D01* X77812499Y-79365345D01* X77809157Y-79334270D01* X77805989Y-79304799D01* X77754889Y-79167796D01* X77754888Y-79167793D01* X77754887Y-79167792D01* X77696251Y-79089466D01* X77680414Y-79068310D01* X77655997Y-79002847D01* X77670848Y-78934574D01* X77680415Y-78919689D01* X77754887Y-78820207D01* X77754888Y-78820206D01* X77805988Y-78683204D01* X77805988Y-78683203D01* X77805989Y-78683201D01* X77810506Y-78641184D01* X77812499Y-78622654D01* X77812500Y-78622637D01* X77812500Y-77782747D01* X77812712Y-77777625D01* X77817156Y-77724003D01* X77817156Y-77723995D01* X77812712Y-77670373D01* X77812500Y-77665250D01* X77812500Y-76825362D01* X77812499Y-76825345D01* X77809157Y-76794270D01* X77805989Y-76764799D01* X77754889Y-76627796D01* X77667261Y-76510739D01* X77550204Y-76423111D01* X77413203Y-76372011D01* X77352654Y-76365500D01* X77352638Y-76365500D01* X73755362Y-76365500D01* X73755345Y-76365500D01* X73694797Y-76372011D01* X73694795Y-76372011D01* X73557795Y-76423111D01* X73440739Y-76510739D01* X73353111Y-76627795D01* X73302011Y-76764795D01* X73302011Y-76764797D01* X73295500Y-76825345D01* X73295500Y-78622654D01* X73302011Y-78683202D01* X73302011Y-78683204D01* X73353111Y-78820204D01* X73427585Y-78919689D01* X73452002Y-78985154D01* X73437150Y-79053427D01* X73427586Y-79068308D01* X73407921Y-79094578D01* X73353111Y-79167795D01* X73302011Y-79304795D01* X73302011Y-79304797D01* X73295500Y-79365345D01* X73295500Y-81162654D01* X73302011Y-81223202D01* X73302011Y-81223204D01* X73353111Y-81360204D01* X73427584Y-81459688D01* X73452001Y-81525153D01* X73437149Y-81593426D01* X73427584Y-81608310D01* X73398101Y-81647694D01* X73395415Y-81651035D01* X73394648Y-81651923D01* X73389294Y-81659104D01* X73389283Y-81659119D01* X73388080Y-81660925D01* X73386117Y-81663703D01* X73353113Y-81707791D01* X73353111Y-81707794D01* X73309921Y-81823590D01* X73303158Y-81840004D01* X73274809Y-81951943D01* X73239268Y-82012098D01* X73176847Y-82043489D01* X73154604Y-82045500D01* X73030015Y-82045500D01* X73012045Y-82044191D01* X72987927Y-82040658D01* X72942372Y-82044645D01* X72935294Y-82045264D01* X72929893Y-82045500D01* X72921540Y-82045500D01* X72888624Y-82049347D01* X72811295Y-82056112D01* X72804227Y-82057572D01* X72804217Y-82057528D01* X72796627Y-82059210D01* X72796638Y-82059254D01* X72789614Y-82060919D01* X72789608Y-82060920D01* X72789608Y-82060921D01* X72784646Y-82062727D01* X72716654Y-82087473D01* X72642978Y-82111887D01* X72636441Y-82114936D01* X72636421Y-82114894D01* X72629417Y-82118285D01* X72629438Y-82118326D01* X72622990Y-82121564D01* X72558115Y-82164233D01* X72492073Y-82204967D01* X72486404Y-82209450D01* X72486374Y-82209413D01* X72480348Y-82214322D01* X72480378Y-82214357D01* X72474853Y-82218993D01* X72474847Y-82218998D01* X72474847Y-82218999D01* X72434710Y-82261541D01* X72421557Y-82275482D01* X71671859Y-83025181D01* X71610536Y-83058666D01* X71584178Y-83061500D01* X71361988Y-83061500D01* X71294949Y-83041815D01* X71249194Y-82989011D01* X71239250Y-82919853D01* X71242912Y-82902905D01* X71265561Y-82824945D01* X71265562Y-82824939D01* X71268500Y-82787615D01* X71268500Y-82354605D01* X71265562Y-82317280D01* X71265561Y-82317274D01* X71219519Y-82158796D01* X71219145Y-82157509D01* X71150039Y-82040658D01* X71134455Y-82014306D01* X71134448Y-82014297D01* X71016812Y-81896661D01* X71016803Y-81896654D01* X70873601Y-81811965D01* X70873596Y-81811963D01* X70713835Y-81765548D01* X70713829Y-81765547D01* X70676505Y-81762610D01* X70676502Y-81762610D01* X70018613Y-81762610D01* X69951574Y-81742925D01* X69930932Y-81726291D01* X69836510Y-81631869D01* X69803025Y-81570546D01* X69800191Y-81544188D01* X69800191Y-76251911D01* X69819876Y-76184872D01* X69872680Y-76139117D01* X69941838Y-76129173D01* X69963192Y-76134204D01* X70019574Y-76152887D01* X70123455Y-76163500D01* X70724544Y-76163499D01* X70828426Y-76152887D01* X70996738Y-76097115D01* X71147652Y-76004030D01* X71273030Y-75878652D01* X71273449Y-75877971D01* X71273859Y-75877602D01* X71277511Y-75872985D01* X71278299Y-75873608D01* X71325389Y-75831244D01* X71394350Y-75820014D01* X71458436Y-75847850D01* X71476261Y-75868420D01* X71477202Y-75867677D01* X71481683Y-75873344D01* X71605654Y-75997315D01* X71754875Y-76089356D01* X71754880Y-76089358D01* X71921302Y-76144505D01* X71921309Y-76144506D01* X72024019Y-76154999D01* X72073999Y-76154998D01* X72074000Y-76154998D01* X72074000Y-75180000D01* X72574000Y-75180000D01* X72574000Y-76154999D01* X72623972Y-76154999D01* X72623986Y-76154998D01* X72726697Y-76144505D01* X72893119Y-76089358D01* X72893124Y-76089356D01* X73042345Y-75997315D01* X73166315Y-75873345D01* X73258356Y-75724124D01* X73258358Y-75724119D01* X73313505Y-75557697D01* X73313506Y-75557690D01* X73323999Y-75454986D01* X73324000Y-75454973D01* X73324000Y-75180000D01* X72574000Y-75180000D01* X72074000Y-75180000D01* X72074000Y-73705000D01* X72574000Y-73705000D01* X72574000Y-74680000D01* X73323999Y-74680000D01* X73323999Y-74405028D01* X73323998Y-74405013D01* X73313505Y-74302302D01* X73258358Y-74135880D01* X73258356Y-74135875D01* X73166315Y-73986654D01* X73042345Y-73862684D01* X72893124Y-73770643D01* X72893119Y-73770641D01* X72726697Y-73715494D01* X72726690Y-73715493D01* X72623986Y-73705000D01* X72574000Y-73705000D01* X72074000Y-73705000D01* X72073999Y-73704999D01* X72024029Y-73705000D01* X72024011Y-73705001D01* X71921302Y-73715494D01* X71754880Y-73770641D01* X71754875Y-73770643D01* X71605654Y-73862684D01* X71481683Y-73986655D01* X71477202Y-73992323D01* X71475021Y-73990598D01* X71432556Y-74028775D01* X71363591Y-74039980D01* X71299516Y-74012121D01* X71277663Y-73986894D01* X71277511Y-73987015D01* X71274816Y-73983606D01* X71273451Y-73982031D01* X71273029Y-73981347D01* X71147653Y-73855971D01* X71147652Y-73855970D01* X71009316Y-73770643D01* X70996740Y-73762886D01* X70996735Y-73762884D01* X70828427Y-73707113D01* X70724546Y-73696500D01* X70123462Y-73696500D01* X70123446Y-73696501D01* X70019569Y-73707113D01* X69963193Y-73725794D01* X69893365Y-73728195D01* X69833324Y-73692463D01* X69802132Y-73629942D01* X69800191Y-73608088D01* X69800191Y-73563851D01* X69806415Y-73542654D01* X73295500Y-73542654D01* X73302011Y-73603202D01* X73302011Y-73603204D01* X73347736Y-73725794D01* X73353111Y-73740204D01* X73440739Y-73857261D01* X73557796Y-73944889D01* X73694799Y-73995989D01* X73722050Y-73998918D01* X73755345Y-74002499D01* X73755362Y-74002500D01* X77352638Y-74002500D01* X77352654Y-74002499D01* X77379692Y-73999591D01* X77413201Y-73995989D01* X77550204Y-73944889D01* X77667261Y-73857261D01* X77754889Y-73740204D01* X77805989Y-73603201D01* X77809591Y-73569692D01* X77812499Y-73542654D01* X77812500Y-73542637D01* X77812500Y-72702747D01* X77812712Y-72697625D01* X77817156Y-72644003D01* X77817156Y-72643995D01* X77812712Y-72590373D01* X77812500Y-72585250D01* X77812500Y-71745362D01* X77812499Y-71745345D01* X77807599Y-71699776D01* X77805989Y-71684799D01* X77791338Y-71645519D01* X77754888Y-71547793D01* X77754887Y-71547792D01* X77696251Y-71469466D01* X77680414Y-71448310D01* X77655997Y-71382847D01* X77670848Y-71314574D01* X77680415Y-71299689D01* X77684300Y-71294500D01* X77754889Y-71200204D01* X77805989Y-71063201D01* X77810506Y-71021184D01* X77812499Y-71002654D01* X77812500Y-71002637D01* X77812500Y-70162747D01* X77812712Y-70157625D01* X77817156Y-70104003D01* X77817156Y-70103995D01* X77812712Y-70050373D01* X77812500Y-70045250D01* X77812500Y-69205362D01* X77812499Y-69205345D01* X77809157Y-69174270D01* X77805989Y-69144799D01* X77754889Y-69007796D01* X77754888Y-69007793D01* X77754887Y-69007792D01* X77696251Y-68929466D01* X77680414Y-68908310D01* X77655997Y-68842847D01* X77670848Y-68774574D01* X77680415Y-68759689D01* X77754887Y-68660207D01* X77754888Y-68660206D01* X77805988Y-68523204D01* X77805988Y-68523203D01* X77805989Y-68523201D01* X77810506Y-68481184D01* X77812499Y-68462654D01* X77812500Y-68462637D01* X77812500Y-67622747D01* X77812712Y-67617625D01* X77817156Y-67564003D01* X77817156Y-67563995D01* X77812712Y-67510373D01* X77812500Y-67505250D01* X77812500Y-66665362D01* X77812499Y-66665345D01* X77809157Y-66634270D01* X77805989Y-66604799D01* X77754889Y-66467796D01* X77754888Y-66467793D01* X77754887Y-66467792D01* X77696251Y-66389466D01* X77680414Y-66368310D01* X77655997Y-66302847D01* X77670848Y-66234574D01* X77680415Y-66219689D01* X77754887Y-66120207D01* X77754888Y-66120206D01* X77805988Y-65983204D01* X77805988Y-65983203D01* X77805989Y-65983201D01* X77810506Y-65941184D01* X77812499Y-65922654D01* X77812500Y-65922637D01* X77812500Y-65082747D01* X77812712Y-65077625D01* X77817156Y-65024003D01* X77817156Y-65023995D01* X77812712Y-64970373D01* X77812500Y-64965250D01* X77812500Y-64125362D01* X77812499Y-64125345D01* X77809157Y-64094270D01* X77805989Y-64064799D01* X77754889Y-63927796D01* X77667261Y-63810739D01* X77550204Y-63723111D01* X77413203Y-63672011D01* X77352654Y-63665500D01* X77352638Y-63665500D01* X73755362Y-63665500D01* X73755345Y-63665500D01* X73694797Y-63672011D01* X73694795Y-63672011D01* X73557795Y-63723111D01* X73440739Y-63810739D01* X73353111Y-63927795D01* X73302011Y-64064795D01* X73302011Y-64064797D01* X73295500Y-64125345D01* X73295500Y-65922654D01* X73302011Y-65983202D01* X73302011Y-65983204D01* X73353111Y-66120204D01* X73427585Y-66219689D01* X73452002Y-66285154D01* X73437150Y-66353427D01* X73427586Y-66368308D01* X73407921Y-66394578D01* X73353111Y-66467795D01* X73302011Y-66604795D01* X73302011Y-66604797D01* X73295500Y-66665345D01* X73295500Y-68462654D01* X73302011Y-68523202D01* X73302011Y-68523204D01* X73353111Y-68660204D01* X73427585Y-68759689D01* X73452002Y-68825154D01* X73437150Y-68893427D01* X73427586Y-68908308D01* X73407921Y-68934578D01* X73353111Y-69007795D01* X73302011Y-69144795D01* X73302011Y-69144797D01* X73295500Y-69205345D01* X73295500Y-71002654D01* X73302011Y-71063202D01* X73302011Y-71063204D01* X73341828Y-71169954D01* X73353111Y-71200204D01* X73423700Y-71294500D01* X73427585Y-71299689D01* X73452002Y-71365154D01* X73437150Y-71433427D01* X73427586Y-71448308D01* X73407921Y-71474578D01* X73353111Y-71547795D01* X73302011Y-71684795D01* X73302011Y-71684797D01* X73295500Y-71745345D01* X73295500Y-73542654D01* X69806415Y-73542654D01* X69819876Y-73496812D01* X69836505Y-73476175D01* X71074300Y-72238379D01* X71087926Y-72226603D01* X71107478Y-72212049D01* X71141435Y-72171580D01* X71145095Y-72167585D01* X71151000Y-72161681D01* X71171556Y-72135683D01* X71221452Y-72076220D01* X71221453Y-72076219D01* X71225423Y-72070183D01* X71225463Y-72070209D01* X71229632Y-72063666D01* X71229591Y-72063641D01* X71233384Y-72057491D01* X71233385Y-72057488D01* X71233387Y-72057486D01* X71266193Y-71987132D01* X71301029Y-71917768D01* X71301030Y-71917760D01* X71303499Y-71910980D01* X71303546Y-71910997D01* X71306098Y-71903655D01* X71306051Y-71903640D01* X71308320Y-71896791D01* X71308320Y-71896789D01* X71308322Y-71896786D01* X71324019Y-71820761D01* X71341920Y-71745236D01* X71341920Y-71745234D01* X71341921Y-71745230D01* X71342759Y-71738063D01* X71342806Y-71738068D01* X71343596Y-71730337D01* X71343549Y-71730333D01* X71344178Y-71723142D01* X71343062Y-71684795D01* X71341920Y-71645519D01* X71341920Y-60842654D01* X73295500Y-60842654D01* X73302011Y-60903202D01* X73302011Y-60903204D01* X73341828Y-61009954D01* X73353111Y-61040204D01* X73440739Y-61157261D01* X73557796Y-61244889D01* X73694799Y-61295989D01* X73722050Y-61298918D01* X73755345Y-61302499D01* X73755362Y-61302500D01* X77352638Y-61302500D01* X77352654Y-61302499D01* X77379692Y-61299591D01* X77413201Y-61295989D01* X77550204Y-61244889D01* X77667261Y-61157261D01* X77754889Y-61040204D01* X77805989Y-60903201D01* X77810506Y-60861184D01* X77812499Y-60842654D01* X77812500Y-60842637D01* X77812500Y-60002747D01* X77812712Y-59997625D01* X77817156Y-59944003D01* X77817156Y-59943995D01* X77812712Y-59890373D01* X77812500Y-59885250D01* X77812500Y-59045362D01* X77812499Y-59045345D01* X77809157Y-59014270D01* X77805989Y-58984799D01* X77754889Y-58847796D01* X77754888Y-58847793D01* X77754887Y-58847792D01* X77696251Y-58769466D01* X77680414Y-58748310D01* X77655997Y-58682847D01* X77670848Y-58614574D01* X77680415Y-58599689D01* X77754887Y-58500207D01* X77754888Y-58500206D01* X77805988Y-58363204D01* X77805988Y-58363203D01* X77805989Y-58363201D01* X77810506Y-58321184D01* X77812499Y-58302654D01* X77812500Y-58302637D01* X77812500Y-57462747D01* X77812712Y-57457625D01* X77817156Y-57404003D01* X77817156Y-57403995D01* X77812712Y-57350373D01* X77812500Y-57345250D01* X77812500Y-56505362D01* X77812499Y-56505345D01* X77809157Y-56474270D01* X77805989Y-56444799D01* X77778838Y-56372006D01* X77754888Y-56307793D01* X77754887Y-56307792D01* X77696251Y-56229466D01* X77680414Y-56208310D01* X77655997Y-56142847D01* X77670848Y-56074574D01* X77680415Y-56059689D01* X77754887Y-55960207D01* X77754888Y-55960206D01* X77759862Y-55946872D01* X77805989Y-55823201D01* X77810505Y-55781198D01* X77812499Y-55762654D01* X77812500Y-55762637D01* X77812500Y-54922747D01* X77812712Y-54917625D01* X77817156Y-54864003D01* X77817156Y-54863995D01* X77812712Y-54810373D01* X77812500Y-54805250D01* X77812500Y-53965362D01* X77812499Y-53965345D01* X77807595Y-53919741D01* X77805989Y-53904799D01* X77802259Y-53894799D01* X77778839Y-53832007D01* X77754889Y-53767796D01* X77675105Y-53661218D01* X77650689Y-53595754D01* X77665541Y-53527481D01* X77675107Y-53512596D01* X77747352Y-53416089D01* X77747354Y-53416086D01* X77797596Y-53281379D01* X77797598Y-53281372D01* X77803999Y-53221844D01* X77804000Y-53221827D01* X77804000Y-52574000D01* X76899572Y-52574000D01* X76922682Y-52538040D01* X76964000Y-52397327D01* X76964000Y-52250673D01* X76922682Y-52109960D01* X76899572Y-52074000D01* X77804000Y-52074000D01* X77804000Y-51426172D01* X77803999Y-51426155D01* X77797598Y-51366627D01* X77797596Y-51366620D01* X77747354Y-51231913D01* X77747350Y-51231906D01* X77661190Y-51116812D01* X77661187Y-51116809D01* X77546093Y-51030649D01* X77546086Y-51030645D01* X77411379Y-50980403D01* X77411372Y-50980401D01* X77351844Y-50974000D01* X76704000Y-50974000D01* X76704000Y-51877505D01* X76599161Y-51829627D01* X76490473Y-51814000D01* X76417527Y-51814000D01* X76308839Y-51829627D01* X76204000Y-51877505D01* X76204000Y-50974000D01* X75804000Y-50974000D01* X75804000Y-52074000D01* X76008428Y-52074000D01* X75985318Y-52109960D01* X75944000Y-52250673D01* X75944000Y-52397327D01* X75985318Y-52538040D01* X76008428Y-52574000D01* X73304000Y-52574000D01* X73304000Y-53221844D01* X73310401Y-53281372D01* X73310403Y-53281379D01* X73360645Y-53416086D01* X73360646Y-53416088D01* X73432893Y-53512597D01* X73457310Y-53578061D01* X73442459Y-53646334D01* X73432893Y-53661218D01* X73353112Y-53767793D01* X73353111Y-53767793D01* X73302011Y-53904795D01* X73302011Y-53904797D01* X73295500Y-53965345D01* X73295500Y-55762654D01* X73302011Y-55823202D01* X73302011Y-55823204D01* X73353111Y-55960204D01* X73427585Y-56059689D01* X73452002Y-56125154D01* X73437150Y-56193427D01* X73427586Y-56208308D01* X73407921Y-56234578D01* X73353111Y-56307795D01* X73302011Y-56444795D01* X73302011Y-56444797D01* X73295500Y-56505345D01* X73295500Y-58302654D01* X73302011Y-58363202D01* X73302011Y-58363204D01* X73353111Y-58500204D01* X73427585Y-58599689D01* X73452002Y-58665154D01* X73437150Y-58733427D01* X73427586Y-58748308D01* X73407921Y-58774578D01* X73353111Y-58847795D01* X73302011Y-58984795D01* X73302011Y-58984797D01* X73295500Y-59045345D01* X73295500Y-60842654D01* X71341920Y-60842654D01* X71341920Y-55956622D01* X71361605Y-55889583D01* X71378234Y-55868945D01* X72456400Y-54790779D01* X72470026Y-54779003D01* X72489578Y-54764449D01* X72523535Y-54723980D01* X72527195Y-54719985D01* X72533101Y-54714080D01* X72553655Y-54688084D01* X72603552Y-54628620D01* X72603553Y-54628617D01* X72607524Y-54622581D01* X72607565Y-54622608D01* X72611739Y-54616056D01* X72611696Y-54616030D01* X72615482Y-54609891D01* X72615487Y-54609885D01* X72648295Y-54539527D01* X72683129Y-54470168D01* X72683130Y-54470162D01* X72685597Y-54463385D01* X72685644Y-54463402D01* X72688195Y-54456063D01* X72688149Y-54456048D01* X72690420Y-54449190D01* X72690423Y-54449186D01* X72706127Y-54373129D01* X72724020Y-54297636D01* X72724020Y-54297633D01* X72724859Y-54290463D01* X72724906Y-54290468D01* X72725697Y-54282737D01* X72725650Y-54282733D01* X72726279Y-54275542D01* X72724020Y-54197900D01* X72724020Y-52074000D01* X73304000Y-52074000D01* X75304000Y-52074000D01* X75304000Y-50974000D01* X73756155Y-50974000D01* X73696627Y-50980401D01* X73696620Y-50980403D01* X73561913Y-51030645D01* X73561906Y-51030649D01* X73446812Y-51116809D01* X73446809Y-51116812D01* X73360649Y-51231906D01* X73360645Y-51231913D01* X73310403Y-51366620D01* X73310401Y-51366627D01* X73304000Y-51426155D01* X73304000Y-52074000D01* X72724020Y-52074000D01* X72724020Y-43868585D01* X72743705Y-43801546D01* X72796509Y-43755791D01* X72848020Y-43744585D01* X73171500Y-43744585D01* X73238539Y-43764270D01* X73284294Y-43817074D01* X73295500Y-43868585D01* X73295500Y-45602654D01* X73302011Y-45663202D01* X73302011Y-45663204D01* X73340474Y-45766323D01* X73353111Y-45800204D01* X73427097Y-45899038D01* X73427585Y-45899689D01* X73452002Y-45965154D01* X73437150Y-46033427D01* X73427586Y-46048308D01* X73419445Y-46059185D01* X73353111Y-46147795D01* X73302011Y-46284795D01* X73302011Y-46284797D01* X73295500Y-46345345D01* X73295500Y-48142654D01* X73302011Y-48203202D01* X73302011Y-48203204D01* X73346195Y-48321662D01* X73353111Y-48340204D01* X73440739Y-48457261D01* X73557796Y-48544889D01* X73694799Y-48595989D01* X73722050Y-48598918D01* X73755345Y-48602499D01* X73755362Y-48602500D01* X77352638Y-48602500D01* X77352654Y-48602499D01* X77379692Y-48599591D01* X77413201Y-48595989D01* X77550204Y-48544889D01* X77667261Y-48457261D01* X77754889Y-48340204D01* X77805989Y-48203201D01* X77811479Y-48152138D01* X77812499Y-48142654D01* X77812500Y-48142637D01* X77812500Y-47302747D01* X77812712Y-47297625D01* X77812837Y-47296124D01* X77816335Y-47253910D01* X77817156Y-47244003D01* X77817156Y-47243995D01* X77812712Y-47190373D01* X77812500Y-47185250D01* X77812500Y-46345362D01* X77812499Y-46345345D01* X77809157Y-46314270D01* X77805989Y-46284799D01* X77802458Y-46275333D01* X77754888Y-46147793D01* X77754887Y-46147792D01* X77688555Y-46059185D01* X77680414Y-46048310D01* X77655997Y-45982847D01* X77670848Y-45914574D01* X77680413Y-45899691D01* X77738719Y-45821805D01* X77754887Y-45800207D01* X77754888Y-45800206D01* X77760824Y-45784293D01* X77796675Y-45688172D01* X77805988Y-45663204D01* X77805988Y-45663203D01* X77805989Y-45663201D01* X77810506Y-45621184D01* X77812499Y-45602654D01* X77812500Y-45602637D01* X77812500Y-44762747D01* X77812712Y-44757625D01* X77813683Y-44745916D01* X77817156Y-44704000D01* X77816693Y-44698415D01* X77812712Y-44650373D01* X77812500Y-44645250D01* X77812500Y-43868585D01* X77832185Y-43801546D01* X77884989Y-43755791D01* X77936500Y-43744585D01* X79099705Y-43744585D01* X79166744Y-43764270D01* X79187386Y-43780904D01* X79215181Y-43808699D01* X79248666Y-43870022D01* X79251500Y-43896380D01* X79251500Y-53910706D01* X79250191Y-53928676D01* X79246658Y-53952791D01* X79251264Y-54005420D01* X79251500Y-54010827D01* X79251500Y-54019180D01* X79254064Y-54041123D01* X79255347Y-54052096D01* X79262112Y-54129427D01* X79263572Y-54136494D01* X79263526Y-54136503D01* X79265209Y-54144094D01* X79265254Y-54144084D01* X79266919Y-54151110D01* X79283950Y-54197900D01* X79293473Y-54224065D01* X79317852Y-54297636D01* X79317886Y-54297737D01* X79320940Y-54304286D01* X79320896Y-54304306D01* X79324284Y-54311304D01* X79324327Y-54311283D01* X79327568Y-54317737D01* X79370232Y-54382604D01* X79395541Y-54423636D01* X79410970Y-54448651D01* X79410972Y-54448653D01* X79415451Y-54454318D01* X79415413Y-54454347D01* X79420320Y-54460372D01* X79420357Y-54460342D01* X79425002Y-54465878D01* X79481482Y-54519163D01* X80317196Y-55354877D01* X80328977Y-55368509D01* X80343531Y-55388058D01* X80384012Y-55422025D01* X80387986Y-55425667D01* X80393900Y-55431581D01* X80419895Y-55452135D01* X80479360Y-55502032D01* X80479361Y-55502032D01* X80479363Y-55502034D01* X80485396Y-55506002D01* X80485370Y-55506041D01* X80491927Y-55510218D01* X80491953Y-55510178D01* X80498091Y-55513964D01* X80498095Y-55513967D01* X80568452Y-55546775D01* X80637812Y-55581609D01* X80637818Y-55581610D01* X80644606Y-55584082D01* X80644589Y-55584128D01* X80651924Y-55586677D01* X80651940Y-55586632D01* X80658789Y-55588902D01* X80658794Y-55588903D01* X80734850Y-55604607D01* X80795603Y-55619006D01* X80810339Y-55622499D01* X80810340Y-55622499D01* X80810344Y-55622500D01* X80810348Y-55622500D01* X80817517Y-55623338D01* X80817511Y-55623386D01* X80825242Y-55624177D01* X80825247Y-55624130D01* X80832437Y-55624759D01* X80832441Y-55624758D01* X80832442Y-55624759D01* X80910080Y-55622500D01* X92734604Y-55622500D01* X92801643Y-55642185D01* X92847398Y-55694989D01* X92854809Y-55716058D01* X92881633Y-55821980D01* X92881872Y-55822831D01* X92933111Y-55960204D01* X93007585Y-56059689D01* X93032002Y-56125154D01* X93017150Y-56193427D01* X93007586Y-56208308D01* X92987921Y-56234578D01* X92933111Y-56307795D01* X92882011Y-56444795D01* X92882011Y-56444797D01* X92875500Y-56505345D01* X92875500Y-57345250D01* X92875288Y-57350373D01* X92870844Y-57403995D01* X92870844Y-57404003D01* X92875288Y-57457625D01* X92875500Y-57462747D01* X92875500Y-58302654D01* X92882011Y-58363202D01* X92882011Y-58363204D01* X92933111Y-58500204D01* X93007585Y-58599689D01* X93032002Y-58665154D01* X93017150Y-58733427D01* X93007586Y-58748308D01* X92987921Y-58774578D01* X92933111Y-58847795D01* X92882011Y-58984795D01* X92882011Y-58984797D01* X92875500Y-59045345D01* X92875500Y-59885250D01* X92875288Y-59890373D01* X92870844Y-59943995D01* X92870844Y-59944003D01* X92875288Y-59997625D01* X92875500Y-60002747D01* X92875500Y-60842654D01* X92882011Y-60903202D01* X92882011Y-60903204D01* X92933111Y-61040204D01* X93007585Y-61139689D01* X93032002Y-61205154D01* X93017150Y-61273427D01* X93007586Y-61288308D01* X92996964Y-61302499D01* X92933111Y-61387795D01* X92882011Y-61524795D01* X92882011Y-61524797D01* X92875500Y-61585345D01* X92875500Y-63382654D01* X92882011Y-63443202D01* X92882011Y-63443204D01* X92933111Y-63580204D01* X93007585Y-63679689D01* X93032002Y-63745154D01* X93017150Y-63813427D01* X93007586Y-63828308D01* X92987921Y-63854578D01* X92933111Y-63927795D01* X92882011Y-64064795D01* X92882011Y-64064797D01* X92875500Y-64125345D01* X92875500Y-64965250D01* X92875288Y-64970373D01* X92870844Y-65023995D01* X92870844Y-65024003D01* X92875288Y-65077625D01* X92875500Y-65082747D01* X92875500Y-65922654D01* X92882011Y-65983202D01* X92882011Y-65983204D01* X92933111Y-66120204D01* X93007585Y-66219689D01* X93032002Y-66285154D01* X93017150Y-66353427D01* X93007586Y-66368308D01* X92987921Y-66394578D01* X92933111Y-66467795D01* X92882011Y-66604795D01* X92882011Y-66604797D01* X92875500Y-66665345D01* X92875500Y-67505250D01* X92875288Y-67510373D01* X92870844Y-67563995D01* X92870844Y-67564003D01* X92875288Y-67617625D01* X92875500Y-67622747D01* X92875500Y-68462654D01* X92882011Y-68523202D01* X92882011Y-68523204D01* X92933111Y-68660204D01* X93007585Y-68759689D01* X93032002Y-68825154D01* X93017150Y-68893427D01* X93007586Y-68908308D01* X92987921Y-68934578D01* X92933111Y-69007795D01* X92882011Y-69144795D01* X92882011Y-69144797D01* X92875500Y-69205345D01* X92875500Y-70045250D01* X92875288Y-70050373D01* X92870844Y-70103995D01* X92870844Y-70104003D01* X92875288Y-70157625D01* X92875500Y-70162747D01* X92875500Y-71002654D01* X92882011Y-71063202D01* X92882011Y-71063204D01* X92921828Y-71169954D01* X92933111Y-71200204D01* X93003700Y-71294500D01* X93007585Y-71299689D01* X93032002Y-71365154D01* X93017150Y-71433427D01* X93007586Y-71448308D01* X92987921Y-71474578D01* X92933111Y-71547795D01* X92882011Y-71684795D01* X92882011Y-71684797D01* X92875500Y-71745345D01* X92875500Y-72585250D01* X92875288Y-72590373D01* X92870844Y-72643995D01* X92870844Y-72644003D01* X92875288Y-72697625D01* X92875500Y-72702747D01* X92875500Y-73542654D01* X92882011Y-73603202D01* X92882011Y-73603204D01* X92927736Y-73725794D01* X92933111Y-73740204D01* X93020739Y-73857261D01* X93137796Y-73944889D01* X93274799Y-73995989D01* X93302050Y-73998918D01* X93335345Y-74002499D01* X93335362Y-74002500D01* X96932638Y-74002500D01* X96932654Y-74002499D01* X96959692Y-73999591D01* X96993201Y-73995989D01* X97130204Y-73944889D01* X97247261Y-73857261D01* X97334889Y-73740204D01* X97385989Y-73603201D01* X97389591Y-73569692D01* X97392499Y-73542654D01* X97392500Y-73542637D01* X97392500Y-71745362D01* X97392499Y-71745345D01* X97387599Y-71699776D01* X97385989Y-71684799D01* X97371338Y-71645519D01* X97334888Y-71547793D01* X97334887Y-71547792D01* X97276251Y-71469466D01* X97260414Y-71448310D01* X97235997Y-71382847D01* X97250848Y-71314574D01* X97260415Y-71299689D01* X97264300Y-71294500D01* X97334889Y-71200204D01* X97385989Y-71063201D01* X97390506Y-71021184D01* X97392499Y-71002654D01* X97392500Y-71002637D01* X97392500Y-69205362D01* X97392499Y-69205345D01* X97389157Y-69174270D01* X97385989Y-69144799D01* X97334889Y-69007796D01* X97334888Y-69007793D01* X97334887Y-69007792D01* X97276251Y-68929466D01* X97260414Y-68908310D01* X97235997Y-68842847D01* X97250848Y-68774574D01* X97260415Y-68759689D01* X97334887Y-68660207D01* X97334888Y-68660206D01* X97385988Y-68523204D01* X97385988Y-68523203D01* X97385989Y-68523201D01* X97390506Y-68481184D01* X97392499Y-68462654D01* X97392500Y-68462637D01* X97392500Y-66665362D01* X97392499Y-66665345D01* X97389157Y-66634270D01* X97385989Y-66604799D01* X97334889Y-66467796D01* X97334888Y-66467793D01* X97334887Y-66467792D01* X97276251Y-66389466D01* X97260414Y-66368310D01* X97235997Y-66302847D01* X97250848Y-66234574D01* X97260415Y-66219689D01* X97334887Y-66120207D01* X97334888Y-66120206D01* X97385988Y-65983204D01* X97385988Y-65983203D01* X97385989Y-65983201D01* X97390506Y-65941184D01* X97392499Y-65922654D01* X97392500Y-65922637D01* X97392500Y-64125362D01* X97392499Y-64125345D01* X97389157Y-64094270D01* X97385989Y-64064799D01* X97334889Y-63927796D01* X97334888Y-63927793D01* X97334887Y-63927792D01* X97276251Y-63849466D01* X97260414Y-63828310D01* X97235997Y-63762847D01* X97250848Y-63694574D01* X97260415Y-63679689D01* X97334887Y-63580207D01* X97334888Y-63580206D01* X97385988Y-63443204D01* X97385988Y-63443203D01* X97385989Y-63443201D01* X97390506Y-63401184D01* X97392499Y-63382654D01* X97392500Y-63382637D01* X97392500Y-61585362D01* X97392499Y-61585345D01* X97389157Y-61554270D01* X97385989Y-61524799D01* X97334889Y-61387796D01* X97334888Y-61387793D01* X97334887Y-61387792D01* X97271036Y-61302499D01* X97260414Y-61288310D01* X97235997Y-61222847D01* X97250848Y-61154574D01* X97260415Y-61139689D01* X97334887Y-61040207D01* X97334888Y-61040206D01* X97385988Y-60903204D01* X97385988Y-60903203D01* X97385989Y-60903201D01* X97390506Y-60861184D01* X97392499Y-60842654D01* X97392500Y-60842637D01* X97392500Y-59045362D01* X97392499Y-59045345D01* X97389157Y-59014270D01* X97385989Y-58984799D01* X97334889Y-58847796D01* X97334888Y-58847793D01* X97334887Y-58847792D01* X97276251Y-58769466D01* X97260414Y-58748310D01* X97235997Y-58682847D01* X97250848Y-58614574D01* X97260415Y-58599689D01* X97334887Y-58500207D01* X97334888Y-58500206D01* X97385988Y-58363204D01* X97385988Y-58363203D01* X97385989Y-58363201D01* X97390506Y-58321184D01* X97392499Y-58302654D01* X97392500Y-58302637D01* X97392500Y-56505362D01* X97392499Y-56505345D01* X97389157Y-56474270D01* X97385989Y-56444799D01* X97358838Y-56372006D01* X97334888Y-56307793D01* X97334887Y-56307792D01* X97276251Y-56229466D01* X97260414Y-56208310D01* X97235997Y-56142847D01* X97250848Y-56074574D01* X97260415Y-56059689D01* X97334887Y-55960207D01* X97334888Y-55960206D01* X97339862Y-55946872D01* X97385989Y-55823201D01* X97390505Y-55781198D01* X97392499Y-55762654D01* X97392500Y-55762637D01* X97392500Y-53965362D01* X97392499Y-53965345D01* X97387595Y-53919741D01* X97385989Y-53904799D01* X97382259Y-53894799D01* X97334888Y-53767793D01* X97334887Y-53767792D01* X97276251Y-53689466D01* X97260414Y-53668310D01* X97235997Y-53602847D01* X97250848Y-53534574D01* X97260415Y-53519689D01* X97334887Y-53420207D01* X97334888Y-53420206D01* X97385988Y-53283204D01* X97385988Y-53283203D01* X97385989Y-53283201D01* X97390506Y-53241184D01* X97392499Y-53222654D01* X97392500Y-53222637D01* X97392500Y-51425362D01* X97392499Y-51425345D01* X97389157Y-51394270D01* X97385989Y-51364799D01* X97334889Y-51227796D01* X97247261Y-51110739D01* X97130204Y-51023111D01* X96993203Y-50972011D01* X96932654Y-50965500D01* X96932638Y-50965500D01* X93335362Y-50965500D01* X93335345Y-50965500D01* X93274797Y-50972011D01* X93274795Y-50972011D01* X93137795Y-51023111D01* X93020739Y-51110739D01* X92933111Y-51227795D01* X92882011Y-51364795D01* X92882011Y-51364797D01* X92875500Y-51425345D01* X92875500Y-52265250D01* X92875288Y-52270373D01* X92870844Y-52323995D01* X92870844Y-52324003D01* X92875288Y-52377625D01* X92875500Y-52382747D01* X92875500Y-53222654D01* X92882011Y-53283202D01* X92882011Y-53283204D01* X92933111Y-53420204D01* X93007585Y-53519689D01* X93032002Y-53585154D01* X93017150Y-53653427D01* X93007586Y-53668308D01* X92991817Y-53689373D01* X92933110Y-53767796D01* X92881839Y-53905256D01* X92881712Y-53905709D01* X92854809Y-54011942D01* X92819269Y-54072097D01* X92756848Y-54103489D01* X92734604Y-54105500D01* X81264543Y-54105500D01* X81197504Y-54085815D01* X81176862Y-54069181D01* X80804819Y-53697138D01* X80771334Y-53635815D01* X80768500Y-53609457D01* X80768500Y-47863998D01* X81655693Y-47863998D01* X81657672Y-47886639D01* X81657845Y-47894824D01* X81657614Y-47899979D01* X81656684Y-47920688D01* X81656685Y-47920690D01* X81667691Y-48001946D01* X81668016Y-48004864D01* X81670532Y-48033615D01* X81674885Y-48083371D01* X81681624Y-48108523D01* X81683174Y-48116243D01* X81687093Y-48145173D01* X81687096Y-48145183D01* X81711413Y-48220023D01* X81712334Y-48223134D01* X81731877Y-48296066D01* X81731881Y-48296078D01* X81744275Y-48322659D01* X81747051Y-48329705D01* X81754966Y-48354064D01* X81757097Y-48360621D01* X81759544Y-48365168D01* X81792822Y-48427010D01* X81794416Y-48430187D01* X81824942Y-48495651D01* X81824943Y-48495653D01* X81824944Y-48495654D01* X81843668Y-48522396D01* X81847475Y-48528574D01* X81864443Y-48560105D01* X81864445Y-48560108D01* X81909397Y-48616475D01* X81911709Y-48619567D01* X81951251Y-48676038D01* X81951254Y-48676041D01* X81976659Y-48701446D01* X81981295Y-48706633D01* X82005686Y-48737218D01* X82057514Y-48782499D01* X82060557Y-48785344D01* X82106955Y-48831743D01* X82106956Y-48831744D01* X82106959Y-48831746D01* X82106962Y-48831749D01* X82138487Y-48853822D01* X82139109Y-48854258D01* X82144341Y-48858357D01* X82176282Y-48886263D01* X82232535Y-48919872D01* X82236258Y-48922283D01* X82272750Y-48947835D01* X82287338Y-48958051D01* X82287341Y-48958052D01* X82287346Y-48958056D01* X82325910Y-48976038D01* X82331493Y-48978997D01* X82370750Y-49002453D01* X82429010Y-49024317D01* X82433422Y-49026171D01* X82486924Y-49051120D01* X82531204Y-49062984D01* X82536939Y-49064824D01* X82566356Y-49075864D01* X82582839Y-49082051D01* X82640813Y-49092571D01* X82645778Y-49093685D01* X82699629Y-49108115D01* X82748602Y-49112399D01* X82754250Y-49113157D01* X82793352Y-49120253D01* X82805732Y-49122500D01* X82805733Y-49122500D01* X82861348Y-49122500D01* X82866749Y-49122735D01* X82895370Y-49125239D01* X82918998Y-49127307D01* X82918999Y-49127307D01* X82918999Y-49127306D01* X82919000Y-49127307D01* X82972310Y-49122643D01* X82975504Y-49122500D01* X82975522Y-49122500D01* X83023625Y-49118169D01* X83030391Y-49117561D01* X83138353Y-49108117D01* X83138357Y-49108116D01* X83138371Y-49108115D01* X83138383Y-49108111D01* X83138902Y-49108020D01* X83144136Y-49107324D01* X83144622Y-49107281D01* X83249335Y-49078381D01* X83351076Y-49051120D01* X83351089Y-49051113D01* X83358029Y-49048588D01* X83362720Y-49047089D01* X83362993Y-49047014D01* X83458019Y-49001251D01* X83550654Y-48958056D01* X83550663Y-48958049D01* X83555350Y-48955345D01* X83555421Y-48955468D01* X83566206Y-48949152D01* X83567093Y-48948725D01* X83649868Y-48888585D01* X83731038Y-48831749D01* X83731951Y-48830835D01* X83746752Y-48818193D01* X83750363Y-48815571D01* X83781990Y-48782492D01* X83818902Y-48743884D01* X83886746Y-48676041D01* X83886746Y-48676040D01* X83886749Y-48676038D01* X83889476Y-48672142D01* X83901428Y-48657568D01* X83906912Y-48651834D01* X83959809Y-48571697D01* X84013056Y-48495654D01* X84016538Y-48488185D01* X84025436Y-48472276D01* X84031709Y-48462774D01* X84068216Y-48377360D01* X84106120Y-48296076D01* X84109145Y-48284782D01* X84114896Y-48268147D01* X84120743Y-48254470D01* X84140711Y-48166978D01* X84163115Y-48083371D01* X84164807Y-48064024D01* X84166126Y-48055626D01* X84171151Y-48033615D01* X84175036Y-47947105D01* X84182307Y-47864000D01* X84182307Y-47863998D01* X86505693Y-47863998D01* X86507672Y-47886639D01* X86507845Y-47894824D01* X86507614Y-47899979D01* X86506684Y-47920688D01* X86506685Y-47920690D01* X86517691Y-48001946D01* X86518016Y-48004864D01* X86520532Y-48033615D01* X86524885Y-48083371D01* X86531624Y-48108523D01* X86533174Y-48116243D01* X86537093Y-48145173D01* X86537096Y-48145183D01* X86561413Y-48220023D01* X86562334Y-48223134D01* X86581877Y-48296066D01* X86581881Y-48296078D01* X86594275Y-48322659D01* X86597051Y-48329705D01* X86604966Y-48354064D01* X86607097Y-48360621D01* X86609544Y-48365168D01* X86642822Y-48427010D01* X86644416Y-48430187D01* X86674942Y-48495651D01* X86674943Y-48495653D01* X86674944Y-48495654D01* X86693668Y-48522396D01* X86697475Y-48528574D01* X86714443Y-48560105D01* X86714445Y-48560108D01* X86759397Y-48616475D01* X86761709Y-48619567D01* X86801251Y-48676038D01* X86801254Y-48676041D01* X86826659Y-48701446D01* X86831295Y-48706633D01* X86855686Y-48737218D01* X86907514Y-48782499D01* X86910557Y-48785344D01* X86956955Y-48831743D01* X86956956Y-48831744D01* X86956959Y-48831746D01* X86956962Y-48831749D01* X86988487Y-48853822D01* X86989109Y-48854258D01* X86994341Y-48858357D01* X87026282Y-48886263D01* X87082535Y-48919872D01* X87086258Y-48922283D01* X87122750Y-48947835D01* X87137338Y-48958051D01* X87137341Y-48958052D01* X87137346Y-48958056D01* X87175910Y-48976038D01* X87181493Y-48978997D01* X87220750Y-49002453D01* X87279010Y-49024317D01* X87283422Y-49026171D01* X87336924Y-49051120D01* X87381204Y-49062984D01* X87386939Y-49064824D01* X87416356Y-49075864D01* X87432839Y-49082051D01* X87490813Y-49092571D01* X87495778Y-49093685D01* X87549629Y-49108115D01* X87598602Y-49112399D01* X87604250Y-49113157D01* X87643352Y-49120253D01* X87655732Y-49122500D01* X87655733Y-49122500D01* X87711348Y-49122500D01* X87716749Y-49122735D01* X87745370Y-49125239D01* X87768998Y-49127307D01* X87768999Y-49127307D01* X87768999Y-49127306D01* X87769000Y-49127307D01* X87822310Y-49122643D01* X87825504Y-49122500D01* X87825522Y-49122500D01* X87873625Y-49118169D01* X87880391Y-49117561D01* X87988353Y-49108117D01* X87988357Y-49108116D01* X87988371Y-49108115D01* X87988383Y-49108111D01* X87988902Y-49108020D01* X87994136Y-49107324D01* X87994622Y-49107281D01* X88099335Y-49078381D01* X88201076Y-49051120D01* X88201089Y-49051113D01* X88208029Y-49048588D01* X88212720Y-49047089D01* X88212993Y-49047014D01* X88308019Y-49001251D01* X88400654Y-48958056D01* X88400663Y-48958049D01* X88405350Y-48955345D01* X88405421Y-48955468D01* X88416206Y-48949152D01* X88417093Y-48948725D01* X88499868Y-48888585D01* X88581038Y-48831749D01* X88581951Y-48830835D01* X88596752Y-48818193D01* X88600363Y-48815571D01* X88631990Y-48782492D01* X88668902Y-48743884D01* X88736746Y-48676041D01* X88736746Y-48676040D01* X88736749Y-48676038D01* X88739476Y-48672142D01* X88751428Y-48657568D01* X88756912Y-48651834D01* X88809809Y-48571697D01* X88863056Y-48495654D01* X88866538Y-48488185D01* X88875436Y-48472276D01* X88881709Y-48462774D01* X88918216Y-48377360D01* X88956120Y-48296076D01* X88959145Y-48284782D01* X88964896Y-48268147D01* X88970743Y-48254470D01* X88990711Y-48166978D01* X89013115Y-48083371D01* X89014807Y-48064024D01* X89016126Y-48055626D01* X89021151Y-48033615D01* X89025036Y-47947105D01* X89032307Y-47864000D01* X89030327Y-47841368D01* X89030153Y-47833173D01* X89030864Y-47817343D01* X89031315Y-47807309D01* X89020305Y-47726042D01* X89019981Y-47723125D01* X89019080Y-47712827D01* X89013115Y-47644629D01* X89006377Y-47619483D01* X89004825Y-47611753D01* X89001216Y-47585116D01* X89000906Y-47582825D01* X88976587Y-47507982D01* X88975671Y-47504889D01* X88961430Y-47451741D01* X88956123Y-47431933D01* X88956119Y-47431923D01* X88943722Y-47405336D01* X88940948Y-47398296D01* X88930903Y-47367379D01* X88930902Y-47367377D01* X88930899Y-47367370D01* X88895167Y-47300970D01* X88893582Y-47297811D01* X88863056Y-47232347D01* X88860183Y-47228244D01* X88844337Y-47205613D01* X88840523Y-47199424D01* X88823555Y-47167892D01* X88778594Y-47111513D01* X88776279Y-47108417D01* X88775453Y-47107238D01* X88744899Y-47063601D01* X88736750Y-47051963D01* X88711340Y-47026553D01* X88706702Y-47021364D01* X88682312Y-46990780D01* X88630491Y-46945505D01* X88627442Y-46942655D01* X88581039Y-46896251D01* X88548891Y-46873741D01* X88543656Y-46869641D01* X88511718Y-46841737D01* X88455486Y-46808139D01* X88451725Y-46805704D01* X88413980Y-46779275D01* X88400654Y-46769944D01* X88386940Y-46763549D01* X88362100Y-46751965D01* X88356501Y-46748997D01* X88325701Y-46730596D01* X88317250Y-46725547D01* X88258988Y-46703681D01* X88254588Y-46701833D01* X88222893Y-46687053D01* X88201077Y-46676880D01* X88201065Y-46676876D01* X88156793Y-46665013D01* X88151053Y-46663172D01* X88105160Y-46645948D01* X88054115Y-46636684D01* X88047191Y-46635428D01* X88042217Y-46634312D01* X87988372Y-46619885D01* X87976370Y-46618834D01* X87939403Y-46615600D01* X87933741Y-46614840D01* X87898998Y-46608536D01* X87882267Y-46605500D01* X87882266Y-46605500D01* X87826652Y-46605500D01* X87821250Y-46605264D01* X87792629Y-46602760D01* X87769002Y-46600693D01* X87768997Y-46600693D01* X87715728Y-46605353D01* X87712489Y-46605499D01* X87657608Y-46610438D01* X87549618Y-46619885D01* X87549041Y-46619987D01* X87543889Y-46620672D01* X87543386Y-46620717D01* X87543369Y-46620720D01* X87438664Y-46649618D01* X87336918Y-46676881D01* X87329944Y-46679418D01* X87325268Y-46680912D01* X87325022Y-46680979D01* X87325011Y-46680984D01* X87229964Y-46726755D01* X87137352Y-46769941D01* X87132658Y-46772651D01* X87132587Y-46772529D01* X87121824Y-46778833D01* X87120908Y-46779274D01* X87120902Y-46779277D01* X87038119Y-46839423D01* X86956958Y-46896254D01* X86956027Y-46897185D01* X86941264Y-46909793D01* X86937641Y-46912425D01* X86937631Y-46912434D01* X86869097Y-46984115D01* X86801247Y-47051966D01* X86801246Y-47051967D01* X86798506Y-47055880D01* X86786581Y-47070419D01* X86781089Y-47076163D01* X86781085Y-47076169D01* X86728183Y-47156313D01* X86674943Y-47232347D01* X86674941Y-47232352D01* X86671462Y-47239812D01* X86662576Y-47255702D01* X86656292Y-47265222D01* X86656291Y-47265224D01* X86619780Y-47350644D01* X86581882Y-47431917D01* X86581880Y-47431923D01* X86578852Y-47443222D01* X86573102Y-47459854D01* X86567259Y-47473525D01* X86567256Y-47473533D01* X86547288Y-47561021D01* X86524885Y-47644626D01* X86524884Y-47644632D01* X86523192Y-47663970D01* X86521873Y-47672366D01* X86516849Y-47694385D01* X86512963Y-47780894D01* X86505693Y-47863996D01* X86505693Y-47863998D01* X84182307Y-47863998D01* X84180327Y-47841368D01* X84180153Y-47833173D01* X84180864Y-47817343D01* X84181315Y-47807309D01* X84170305Y-47726042D01* X84169981Y-47723125D01* X84169080Y-47712827D01* X84163115Y-47644629D01* X84156377Y-47619483D01* X84154825Y-47611753D01* X84151216Y-47585116D01* X84150906Y-47582825D01* X84126587Y-47507982D01* X84125671Y-47504889D01* X84111430Y-47451741D01* X84106123Y-47431933D01* X84106119Y-47431923D01* X84093722Y-47405336D01* X84090948Y-47398296D01* X84080903Y-47367379D01* X84080902Y-47367377D01* X84080899Y-47367370D01* X84045167Y-47300970D01* X84043582Y-47297811D01* X84013056Y-47232347D01* X84010183Y-47228244D01* X83994337Y-47205613D01* X83990523Y-47199424D01* X83973555Y-47167892D01* X83928594Y-47111513D01* X83926279Y-47108417D01* X83925453Y-47107238D01* X83894899Y-47063601D01* X83886750Y-47051963D01* X83861340Y-47026553D01* X83856702Y-47021364D01* X83832312Y-46990780D01* X83780491Y-46945505D01* X83777442Y-46942655D01* X83731039Y-46896251D01* X83698891Y-46873741D01* X83693656Y-46869641D01* X83661718Y-46841737D01* X83605486Y-46808139D01* X83601725Y-46805704D01* X83563980Y-46779275D01* X83550654Y-46769944D01* X83536940Y-46763549D01* X83512100Y-46751965D01* X83506501Y-46748997D01* X83475701Y-46730596D01* X83467250Y-46725547D01* X83408988Y-46703681D01* X83404588Y-46701833D01* X83372893Y-46687053D01* X83351077Y-46676880D01* X83351065Y-46676876D01* X83306793Y-46665013D01* X83301053Y-46663172D01* X83255160Y-46645948D01* X83204115Y-46636684D01* X83197191Y-46635428D01* X83192217Y-46634312D01* X83138372Y-46619885D01* X83126370Y-46618834D01* X83089403Y-46615600D01* X83083741Y-46614840D01* X83048998Y-46608536D01* X83032267Y-46605500D01* X83032266Y-46605500D01* X82976652Y-46605500D01* X82971250Y-46605264D01* X82942629Y-46602760D01* X82919002Y-46600693D01* X82918997Y-46600693D01* X82865728Y-46605353D01* X82862489Y-46605499D01* X82807608Y-46610438D01* X82699618Y-46619885D01* X82699041Y-46619987D01* X82693889Y-46620672D01* X82693386Y-46620717D01* X82693369Y-46620720D01* X82588664Y-46649618D01* X82486918Y-46676881D01* X82479944Y-46679418D01* X82475268Y-46680912D01* X82475022Y-46680979D01* X82475011Y-46680984D01* X82379964Y-46726755D01* X82287352Y-46769941D01* X82282658Y-46772651D01* X82282587Y-46772529D01* X82271824Y-46778833D01* X82270908Y-46779274D01* X82270902Y-46779277D01* X82188119Y-46839423D01* X82106958Y-46896254D01* X82106027Y-46897185D01* X82091264Y-46909793D01* X82087641Y-46912425D01* X82087631Y-46912434D01* X82019097Y-46984115D01* X81951247Y-47051966D01* X81951246Y-47051967D01* X81948506Y-47055880D01* X81936581Y-47070419D01* X81931089Y-47076163D01* X81931085Y-47076169D01* X81878183Y-47156313D01* X81824943Y-47232347D01* X81824941Y-47232352D01* X81821462Y-47239812D01* X81812576Y-47255702D01* X81806292Y-47265222D01* X81806291Y-47265224D01* X81769780Y-47350644D01* X81731882Y-47431917D01* X81731880Y-47431923D01* X81728852Y-47443222D01* X81723102Y-47459854D01* X81717259Y-47473525D01* X81717256Y-47473533D01* X81697288Y-47561021D01* X81674885Y-47644626D01* X81674884Y-47644632D01* X81673192Y-47663970D01* X81671873Y-47672366D01* X81666849Y-47694385D01* X81662963Y-47780894D01* X81655693Y-47863996D01* X81655693Y-47863998D01* X80768500Y-47863998D01* X80768500Y-44834000D01* X81205673Y-44834000D01* X81210644Y-44893994D01* X81212971Y-44922083D01* X81216856Y-45013543D01* X81216857Y-45013552D01* X81222010Y-45037461D01* X81223190Y-45045410D01* X81224947Y-45066617D01* X81224949Y-45066629D01* X81247417Y-45155353D01* X81267370Y-45247935D01* X81275257Y-45267561D01* X81277834Y-45275466D01* X81282249Y-45292900D01* X81282251Y-45292907D01* X81320285Y-45379616D01* X81356767Y-45470404D01* X81358239Y-45472794D01* X81366129Y-45485608D01* X81370117Y-45493220D01* X81376015Y-45506668D01* X81429524Y-45588570D01* X81482473Y-45674565D01* X81482480Y-45674574D01* X81489158Y-45682161D01* X81499886Y-45696267D01* X81503686Y-45702083D01* X81572079Y-45776377D01* X81634344Y-45847124D01* X81640882Y-45854552D01* X81640883Y-45854553D01* X81646070Y-45858741D01* X81659407Y-45871240D01* X81661783Y-45873822D01* X81711828Y-45912772D01* X81743948Y-45937772D01* X81791031Y-45975789D01* X81827421Y-46005173D01* X81827422Y-46005173D01* X81827424Y-46005175D01* X81830165Y-46006706D01* X81830240Y-46006748D01* X81845934Y-46017152D01* X81845979Y-46017187D01* X81845991Y-46017195D01* X81923584Y-46059185D01* X81940346Y-46068256D01* X82036740Y-46122105D01* X82036745Y-46122106D01* X82036749Y-46122109D01* X82039140Y-46123190D01* X82046477Y-46126448D01* X82046575Y-46126226D01* X82051262Y-46128281D01* X82051273Y-46128287D01* X82155740Y-46164151D01* X82262806Y-46201980D01* X82263367Y-46202076D01* X82268109Y-46203081D01* X82272043Y-46204078D01* X82272049Y-46204080D01* X82384095Y-46222777D01* X82499110Y-46242499D01* X82499119Y-46242500D01* X82735707Y-46242500D01* X82735712Y-46242500D01* X82768648Y-46237003D01* X82792475Y-46233028D01* X82797413Y-46232406D01* X82850941Y-46227851D01* X82857887Y-46227260D01* X82857888Y-46227259D01* X82857898Y-46227259D01* X82910297Y-46213614D01* X82915668Y-46212469D01* X82965951Y-46204080D01* X83023502Y-46184322D01* X83027975Y-46182973D01* X83089924Y-46166844D01* X83136259Y-46145898D01* X83141633Y-46143767D01* X83186727Y-46128287D01* X83243132Y-46097761D01* X83247054Y-46095816D01* X83308402Y-46068086D01* X83347795Y-46041459D01* X83352979Y-46038314D01* X83392008Y-46017195D01* X83392012Y-46017193D01* X83392013Y-46017192D01* X83392017Y-46017190D01* X83445228Y-45975772D01* X83448561Y-45973353D01* X83507047Y-45933825D01* X83539001Y-45903198D01* X83543789Y-45899058D01* X83576220Y-45873818D01* X83624119Y-45821784D01* X83626794Y-45819056D01* X83680144Y-45767925D01* X83704497Y-45734996D01* X83708727Y-45729877D01* X83724035Y-45713249D01* X83734314Y-45702083D01* X83774785Y-45640135D01* X83776835Y-45637189D01* X83785078Y-45626044D01* X83822715Y-45575157D01* X83839676Y-45541514D01* X83843114Y-45535549D01* X83861984Y-45506669D01* X83893042Y-45435861D01* X83894413Y-45432950D01* X83930657Y-45361067D01* X83940721Y-45328200D01* X83943221Y-45321466D01* X83955749Y-45292907D01* X83975535Y-45214770D01* X83976334Y-45211909D01* X84000864Y-45131815D01* X84004810Y-45100994D01* X84006198Y-45093684D01* X84013051Y-45066626D01* X84020090Y-44981672D01* X84031318Y-44893995D01* X84030139Y-44866249D01* X84030294Y-44858525D01* X84032327Y-44834000D01* X86655673Y-44834000D01* X86660644Y-44893994D01* X86662971Y-44922083D01* X86666856Y-45013543D01* X86666857Y-45013552D01* X86672010Y-45037461D01* X86673190Y-45045410D01* X86674947Y-45066617D01* X86674949Y-45066629D01* X86697417Y-45155353D01* X86717370Y-45247935D01* X86725257Y-45267561D01* X86727834Y-45275466D01* X86732249Y-45292900D01* X86732251Y-45292907D01* X86770285Y-45379616D01* X86806767Y-45470404D01* X86808239Y-45472794D01* X86816129Y-45485608D01* X86820117Y-45493220D01* X86826015Y-45506668D01* X86879524Y-45588570D01* X86932473Y-45674565D01* X86932480Y-45674574D01* X86939158Y-45682161D01* X86949886Y-45696267D01* X86953686Y-45702083D01* X87022079Y-45776377D01* X87084344Y-45847124D01* X87090882Y-45854552D01* X87090883Y-45854553D01* X87096070Y-45858741D01* X87109407Y-45871240D01* X87111783Y-45873822D01* X87161828Y-45912772D01* X87193948Y-45937772D01* X87241031Y-45975789D01* X87277421Y-46005173D01* X87277422Y-46005173D01* X87277424Y-46005175D01* X87280165Y-46006706D01* X87280240Y-46006748D01* X87295934Y-46017152D01* X87295979Y-46017187D01* X87295991Y-46017195D01* X87373584Y-46059185D01* X87390346Y-46068256D01* X87486740Y-46122105D01* X87486745Y-46122106D01* X87486749Y-46122109D01* X87489140Y-46123190D01* X87496477Y-46126448D01* X87496575Y-46126226D01* X87501262Y-46128281D01* X87501273Y-46128287D01* X87605740Y-46164151D01* X87712806Y-46201980D01* X87713367Y-46202076D01* X87718109Y-46203081D01* X87722043Y-46204078D01* X87722049Y-46204080D01* X87834095Y-46222777D01* X87949110Y-46242499D01* X87949119Y-46242500D01* X88185707Y-46242500D01* X88185712Y-46242500D01* X88218648Y-46237003D01* X88242475Y-46233028D01* X88247413Y-46232406D01* X88300941Y-46227851D01* X88307887Y-46227260D01* X88307888Y-46227259D01* X88307898Y-46227259D01* X88360297Y-46213614D01* X88365668Y-46212469D01* X88415951Y-46204080D01* X88473502Y-46184322D01* X88477975Y-46182973D01* X88539924Y-46166844D01* X88586259Y-46145898D01* X88591633Y-46143767D01* X88636727Y-46128287D01* X88693132Y-46097761D01* X88697054Y-46095816D01* X88758402Y-46068086D01* X88797795Y-46041459D01* X88802979Y-46038314D01* X88842008Y-46017195D01* X88842012Y-46017193D01* X88842013Y-46017192D01* X88842017Y-46017190D01* X88895228Y-45975772D01* X88898561Y-45973353D01* X88957047Y-45933825D01* X88989001Y-45903198D01* X88993789Y-45899058D01* X89026220Y-45873818D01* X89074119Y-45821784D01* X89076794Y-45819056D01* X89130144Y-45767925D01* X89154497Y-45734996D01* X89158727Y-45729877D01* X89174035Y-45713249D01* X89184314Y-45702083D01* X89224785Y-45640135D01* X89226835Y-45637189D01* X89235078Y-45626044D01* X89272715Y-45575157D01* X89289676Y-45541514D01* X89293114Y-45535549D01* X89311984Y-45506669D01* X89343042Y-45435861D01* X89344413Y-45432950D01* X89380657Y-45361067D01* X89390721Y-45328200D01* X89393221Y-45321466D01* X89405749Y-45292907D01* X89425535Y-45214770D01* X89426334Y-45211909D01* X89450864Y-45131815D01* X89454810Y-45100994D01* X89456198Y-45093684D01* X89463051Y-45066626D01* X89470090Y-44981672D01* X89481318Y-44893995D01* X89480139Y-44866249D01* X89480294Y-44858525D01* X89482327Y-44834000D01* X89480829Y-44815927D01* X89475028Y-44745916D01* X89471144Y-44654460D01* X89471143Y-44654457D01* X89471143Y-44654449D01* X89465987Y-44630530D01* X89464808Y-44622586D01* X89463051Y-44601379D01* X89463051Y-44601374D01* X89440582Y-44512646D01* X89420630Y-44420068D01* X89412735Y-44400424D01* X89410167Y-44392544D01* X89405749Y-44375093D01* X89367714Y-44288383D01* X89331233Y-44197596D01* X89321867Y-44182386D01* X89317882Y-44174778D01* X89317102Y-44173000D01* X89311984Y-44161331D01* X89258475Y-44079429D01* X89234050Y-44039760D01* X89205529Y-43993439D01* X89205528Y-43993438D01* X89205524Y-43993431D01* X89205518Y-43993424D01* X89205515Y-43993420D01* X89198839Y-43985834D01* X89188118Y-43971739D01* X89184315Y-43965919D01* X89184314Y-43965917D01* X89115920Y-43891622D01* X89047119Y-43813449D01* X89047118Y-43813448D01* X89047114Y-43813444D01* X89041929Y-43809258D01* X89028597Y-43796765D01* X89026220Y-43794182D01* X88944051Y-43730227D01* X88860576Y-43662825D01* X88860574Y-43662823D01* X88860568Y-43662819D01* X88857750Y-43661245D01* X88842070Y-43650851D01* X88842020Y-43650812D01* X88842018Y-43650811D01* X88842017Y-43650810D01* X88747653Y-43599743D01* X88739397Y-43595131D01* X88651259Y-43545894D01* X88648999Y-43544873D01* X88641519Y-43541551D01* X88641422Y-43541773D01* X88636725Y-43539712D01* X88532259Y-43503848D01* X88425197Y-43466021D01* X88425196Y-43466020D01* X88425194Y-43466020D01* X88425192Y-43466019D01* X88425183Y-43466017D01* X88424633Y-43465923D01* X88419913Y-43464922D01* X88415966Y-43463923D01* X88415953Y-43463920D01* X88415951Y-43463920D01* X88303904Y-43445222D01* X88188890Y-43425500D01* X88188881Y-43425500D01* X88185712Y-43425500D01* X87952288Y-43425500D01* X87952287Y-43425500D01* X87895529Y-43434970D01* X87890587Y-43435592D01* X87856830Y-43438465D01* X87830100Y-43440741D01* X87830097Y-43440741D01* X87777733Y-43454376D01* X87772313Y-43455532D01* X87722049Y-43463919D01* X87664512Y-43483671D01* X87660005Y-43485029D01* X87614895Y-43496776D01* X87598076Y-43501156D01* X87598073Y-43501157D01* X87598070Y-43501158D01* X87551758Y-43522092D01* X87546359Y-43524233D01* X87531763Y-43529244D01* X87501273Y-43539712D01* X87444879Y-43570230D01* X87440910Y-43572198D01* X87379597Y-43599914D01* X87379595Y-43599915D01* X87340209Y-43626535D01* X87335002Y-43629693D01* X87327479Y-43633765D01* X87295978Y-43650812D01* X87242780Y-43692218D01* X87239425Y-43694653D01* X87209349Y-43714981D01* X87180951Y-43734176D01* X87180948Y-43734179D01* X87149012Y-43764786D01* X87144193Y-43768952D01* X87111781Y-43794181D01* X87111780Y-43794182D01* X87063898Y-43846193D01* X87061184Y-43848962D01* X87007857Y-43900073D01* X86983503Y-43932999D01* X86979270Y-43938123D01* X86953684Y-43965918D01* X86953681Y-43965922D01* X86913222Y-44027850D01* X86911166Y-44030806D01* X86865287Y-44092839D01* X86865286Y-44092840D01* X86848333Y-44126463D01* X86844875Y-44132463D01* X86826015Y-44161332D01* X86794978Y-44232089D01* X86793562Y-44235096D01* X86757342Y-44306933D01* X86757341Y-44306934D01* X86747280Y-44339786D01* X86744775Y-44346537D01* X86732249Y-44375094D01* X86732249Y-44375095D01* X86712469Y-44453203D01* X86711649Y-44456137D01* X86687137Y-44536178D01* X86687135Y-44536190D01* X86683191Y-44566986D01* X86681795Y-44574335D01* X86674950Y-44601367D01* X86674948Y-44601379D01* X86667909Y-44686327D01* X86656682Y-44774003D01* X86656681Y-44774004D01* X86657859Y-44801731D01* X86657703Y-44809485D01* X86655673Y-44833995D01* X86655673Y-44834000D01* X84032327Y-44834000D01* X84030829Y-44815927D01* X84025028Y-44745916D01* X84021144Y-44654460D01* X84021143Y-44654457D01* X84021143Y-44654449D01* X84015987Y-44630530D01* X84014808Y-44622586D01* X84013051Y-44601379D01* X84013051Y-44601374D01* X83990582Y-44512646D01* X83970630Y-44420068D01* X83962735Y-44400424D01* X83960167Y-44392544D01* X83955749Y-44375093D01* X83917714Y-44288383D01* X83881233Y-44197596D01* X83871867Y-44182386D01* X83867882Y-44174778D01* X83867102Y-44173000D01* X83861984Y-44161331D01* X83808475Y-44079429D01* X83784050Y-44039760D01* X83755529Y-43993439D01* X83755528Y-43993438D01* X83755524Y-43993431D01* X83755518Y-43993424D01* X83755515Y-43993420D01* X83748839Y-43985834D01* X83738118Y-43971739D01* X83734315Y-43965919D01* X83734314Y-43965917D01* X83665920Y-43891622D01* X83597119Y-43813449D01* X83597118Y-43813448D01* X83597114Y-43813444D01* X83591929Y-43809258D01* X83578597Y-43796765D01* X83576220Y-43794182D01* X83494051Y-43730227D01* X83410576Y-43662825D01* X83410574Y-43662823D01* X83410568Y-43662819D01* X83407750Y-43661245D01* X83392070Y-43650851D01* X83392020Y-43650812D01* X83392018Y-43650811D01* X83392017Y-43650810D01* X83297653Y-43599743D01* X83289397Y-43595131D01* X83201259Y-43545894D01* X83198999Y-43544873D01* X83191519Y-43541551D01* X83191422Y-43541773D01* X83186725Y-43539712D01* X83082259Y-43503848D01* X82975197Y-43466021D01* X82975196Y-43466020D01* X82975194Y-43466020D01* X82975192Y-43466019D01* X82975183Y-43466017D01* X82974633Y-43465923D01* X82969913Y-43464922D01* X82965966Y-43463923D01* X82965953Y-43463920D01* X82965951Y-43463920D01* X82853904Y-43445222D01* X82738890Y-43425500D01* X82738881Y-43425500D01* X82735712Y-43425500D01* X82502288Y-43425500D01* X82502287Y-43425500D01* X82445529Y-43434970D01* X82440587Y-43435592D01* X82406830Y-43438465D01* X82380100Y-43440741D01* X82380097Y-43440741D01* X82327733Y-43454376D01* X82322313Y-43455532D01* X82272049Y-43463919D01* X82214512Y-43483671D01* X82210005Y-43485029D01* X82164895Y-43496776D01* X82148076Y-43501156D01* X82148073Y-43501157D01* X82148070Y-43501158D01* X82101758Y-43522092D01* X82096359Y-43524233D01* X82081763Y-43529244D01* X82051273Y-43539712D01* X81994879Y-43570230D01* X81990910Y-43572198D01* X81929597Y-43599914D01* X81929595Y-43599915D01* X81890209Y-43626535D01* X81885002Y-43629693D01* X81877479Y-43633765D01* X81845978Y-43650812D01* X81792780Y-43692218D01* X81789425Y-43694653D01* X81759349Y-43714981D01* X81730951Y-43734176D01* X81730948Y-43734179D01* X81699012Y-43764786D01* X81694193Y-43768952D01* X81661781Y-43794181D01* X81661780Y-43794182D01* X81613898Y-43846193D01* X81611184Y-43848962D01* X81557857Y-43900073D01* X81533503Y-43932999D01* X81529270Y-43938123D01* X81503684Y-43965918D01* X81503681Y-43965922D01* X81463222Y-44027850D01* X81461166Y-44030806D01* X81415287Y-44092839D01* X81415286Y-44092840D01* X81398333Y-44126463D01* X81394875Y-44132463D01* X81376015Y-44161332D01* X81344978Y-44232089D01* X81343562Y-44235096D01* X81307342Y-44306933D01* X81307341Y-44306934D01* X81297280Y-44339786D01* X81294775Y-44346537D01* X81282249Y-44375094D01* X81282249Y-44375095D01* X81262469Y-44453203D01* X81261649Y-44456137D01* X81237137Y-44536178D01* X81237135Y-44536190D01* X81233191Y-44566986D01* X81231795Y-44574335D01* X81224950Y-44601367D01* X81224948Y-44601379D01* X81217909Y-44686327D01* X81206682Y-44774003D01* X81206681Y-44774004D01* X81207859Y-44801731D01* X81207703Y-44809485D01* X81205673Y-44833995D01* X81205673Y-44834000D01* X80768500Y-44834000D01* X80768500Y-43595131D01* X80769809Y-43577161D01* X80773341Y-43553045D01* X80768736Y-43500416D01* X80768500Y-43495009D01* X80768500Y-43486661D01* X80768499Y-43486650D01* X80764652Y-43453740D01* X80760889Y-43410728D01* X80757887Y-43376411D01* X80757885Y-43376407D01* X80756427Y-43369340D01* X80756473Y-43369330D01* X80754790Y-43361739D01* X80754744Y-43361751D01* X80753080Y-43354732D01* X80753079Y-43354724D01* X80726526Y-43281771D01* X80702114Y-43208099D01* X80702113Y-43208097D01* X80699061Y-43201552D01* X80699105Y-43201531D01* X80695717Y-43194532D01* X80695674Y-43194554D01* X80692436Y-43188106D01* X80649766Y-43123231D01* X80609030Y-43057186D01* X80604553Y-43051524D01* X80604590Y-43051493D01* X80599681Y-43045466D01* X80599645Y-43045497D01* X80595005Y-43039968D01* X80595003Y-43039966D01* X80595001Y-43039963D01* X80563891Y-43010612D01* X80538517Y-42986672D01* X80047052Y-42495208D01* X80035270Y-42481575D01* X80020720Y-42462031D01* X80020719Y-42462030D01* X80020717Y-42462027D01* X80015402Y-42457567D01* X79980235Y-42428057D01* X79976246Y-42424402D01* X79970350Y-42418506D01* X79970349Y-42418505D01* X79948317Y-42401084D01* X79944350Y-42397947D01* X79884890Y-42348055D01* X79884888Y-42348053D01* X79884883Y-42348050D01* X79878853Y-42344084D01* X79878878Y-42344044D01* X79872317Y-42339864D01* X79872293Y-42339905D01* X79866152Y-42336116D01* X79795788Y-42303305D01* X79726433Y-42268474D01* X79719649Y-42266005D01* X79719664Y-42265961D01* X79712319Y-42263407D01* X79712305Y-42263452D01* X79705453Y-42261181D01* X79667425Y-42253329D01* X79629397Y-42245477D01* X79553904Y-42227585D01* X79553902Y-42227585D01* X79553894Y-42227583D01* X79546730Y-42226746D01* X79546735Y-42226697D01* X79539005Y-42225907D01* X79539001Y-42225955D01* X79531810Y-42225325D01* X79454168Y-42227585D01* X72535944Y-42227585D01* X72517974Y-42226276D01* X72493856Y-42222743D01* X72448679Y-42226697D01* X72441223Y-42227349D01* X72435822Y-42227585D01* X72427469Y-42227585D01* X72394553Y-42231432D01* X72317224Y-42238197D01* X72310156Y-42239657D01* X72310146Y-42239613D01* X72302556Y-42241295D01* X72302567Y-42241339D01* X72295543Y-42243004D01* X72295537Y-42243005D01* X72295537Y-42243006D01* X72288748Y-42245477D01* X72222583Y-42269558D01* X72148907Y-42293972D01* X72142370Y-42297021D01* X72142350Y-42296979D01* X72135346Y-42300370D01* X72135367Y-42300411D01* X72128919Y-42303649D01* X72064044Y-42346318D01* X71998002Y-42387052D01* X71992333Y-42391535D01* X71992303Y-42391498D01* X71986277Y-42396407D01* X71986307Y-42396442D01* X71980782Y-42401078D01* X71927486Y-42457567D01* X71474642Y-42910410D01* X71461015Y-42922188D01* X71441461Y-42936746D01* X71407497Y-42977221D01* X71403850Y-42981202D01* X71397938Y-42987115D01* X71377383Y-43013111D01* X71327487Y-43072575D01* X71323521Y-43078606D01* X71323483Y-43078581D01* X71319302Y-43085143D01* X71319341Y-43085167D01* X71315552Y-43091309D01* X71282740Y-43161674D01* X71247911Y-43231025D01* X71245443Y-43237808D01* X71245398Y-43237791D01* X71242842Y-43245147D01* X71242886Y-43245162D01* X71240616Y-43252010D01* X71234471Y-43281771D01* X71224912Y-43328065D01* X71215966Y-43365812D01* X71207018Y-43403566D01* X71206181Y-43410734D01* X71206133Y-43410728D01* X71205343Y-43418459D01* X71205390Y-43418464D01* X71204760Y-43425653D01* X71207020Y-43503294D01* X71207020Y-53843436D01* X71187335Y-53910475D01* X71170701Y-53931117D01* X70092542Y-55009275D01* X70078915Y-55021053D01* X70059361Y-55035611D01* X70025397Y-55076086D01* X70021750Y-55080067D01* X70015838Y-55085980D01* X69995283Y-55111976D01* X69945387Y-55171440D01* X69941421Y-55177471D01* X69941383Y-55177446D01* X69937202Y-55184008D01* X69937241Y-55184032D01* X69933452Y-55190174D01* X69900640Y-55260539D01* X69865811Y-55329890D01* X69863343Y-55336673D01* X69863298Y-55336656D01* X69860742Y-55344012D01* X69860786Y-55344027D01* X69858516Y-55350875D01* X69850839Y-55388057D01* X69842812Y-55426930D01* X69830445Y-55479109D01* X69824918Y-55502431D01* X69824081Y-55509599D01* X69824033Y-55509593D01* X69823243Y-55517324D01* X69823290Y-55517329D01* X69822660Y-55524518D01* X69824920Y-55602159D01* X69824920Y-71291036D01* X69805235Y-71358075D01* X69788601Y-71378717D01* X68550813Y-72616504D01* X68537186Y-72628282D01* X68517632Y-72642840D01* X68483668Y-72683315D01* X68480021Y-72687296D01* X68474109Y-72693209D01* X68453554Y-72719205D01* X68403658Y-72778669D01* X68399692Y-72784700D01* X68399654Y-72784675D01* X68395473Y-72791237D01* X68395512Y-72791261D01* X68391723Y-72797403D01* X68358911Y-72867768D01* X68324082Y-72937119D01* X68321614Y-72943902D01* X68321569Y-72943885D01* X68319013Y-72951241D01* X68319057Y-72951256D01* X68316787Y-72958105D01* X68301083Y-73034159D01* X68299585Y-73040480D01* X68264970Y-73101173D01* X68203037Y-73133516D01* X68133450Y-73127241D01* X68078301Y-73084341D01* X68055101Y-73018435D01* X68054928Y-73011813D01* X68055009Y-72867768D01* X68072615Y-41271371D01* X68092337Y-41204343D01* X68145166Y-41158618D01* X68196052Y-41147442D01* X76340746Y-41110624D01* X98681288Y-41110624D01* X98687538Y-41110624D01* X98691593Y-41110757D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OA-*% G36* X79007261Y-97463478D02* G01* X79009607Y-97466841D01* X79031473Y-97514201D01* X79031479Y-97514213D01* X79056470Y-97561271D01* X79081473Y-97601275D01* X79106472Y-97634197D01* X79106480Y-97634205D01* X79125480Y-97653850D01* X79128768Y-97662179D01* X79127326Y-97667614D01* X78866728Y-98142366D01* X78859743Y-98147969D01* X78850842Y-98146992D01* X78846216Y-98142366D01* X78585617Y-97667613D01* X78584640Y-97658712D01* X78587461Y-97653852D01* X78606467Y-97634201D01* X78631468Y-97601277D01* X78656469Y-97561277D01* X78656473Y-97561271D01* X78681464Y-97514213D01* X78681464Y-97514212D01* X78681470Y-97514201D01* X78697066Y-97480422D01* X78703335Y-97466846D01* X78709914Y-97460772D01* X78713957Y-97460051D01* X78998988Y-97460051D01* X79007261Y-97463478D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,3V3_BUS2*% G36* X64569900Y-74440692D02* G01* X64571734Y-74443047D01* X64605021Y-74499396D01* X64605025Y-74499403D01* X64605027Y-74499405D01* X64646015Y-74559095D01* X64687007Y-74609092D01* X64687021Y-74609107D01* X64727998Y-74649391D01* X64728001Y-74649393D01* X64728004Y-74649396D01* X64764298Y-74676491D01* X64768878Y-74684186D01* X64768999Y-74685866D01* X64768999Y-75174132D01* X64765572Y-75182405D01* X64764298Y-75183507D01* X64728004Y-75210601D01* X64728002Y-75210604D01* X64687021Y-75250891D01* X64687007Y-75250906D01* X64646016Y-75300904D01* X64605021Y-75360602D01* X64586823Y-75391408D01* X64571734Y-75416952D01* X64564575Y-75422332D01* X64555709Y-75421075D01* X64553354Y-75419241D01* X64310193Y-75174132D01* X64076174Y-74938239D01* X64072781Y-74929953D01* X64076174Y-74921760D01* X64553354Y-74440757D01* X64561613Y-74437298D01* X64569900Y-74440692D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(U2-GPIO15)*% G36* X40886870Y-91856754D02* G01* X41088128Y-92058012D01* X41091555Y-92066285D01* X41091098Y-92069525D01* X41052323Y-92204087D01* X41043512Y-92234665D01* X40994015Y-92444294D01* X40944517Y-92691781D01* X40895020Y-92977126D01* X40847779Y-93285597D01* X40843139Y-93293256D01* X40834443Y-93295391D01* X40831747Y-93294640D01* X39999307Y-92950811D01* X39992969Y-92944485D01* X39650948Y-92116421D01* X39650957Y-92107467D01* X39657295Y-92101141D01* X39662993Y-92100320D01* X39890929Y-92124467D01* X40138416Y-92112828D01* X40385903Y-92063331D01* X40633390Y-91975975D01* X40873318Y-91854586D01* X40882244Y-91853910D01* X40886870Y-91856754D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OA-*% G36* X74704269Y-97355295D02* G01* X74704595Y-97356010D01* X74752439Y-97470707D01* X74805101Y-97580800D01* X74857763Y-97674739D01* X74885338Y-97715468D01* X74910420Y-97752517D01* X74956059Y-97805930D01* X74958828Y-97814446D01* X74955437Y-97821804D01* X74752266Y-98024975D01* X74749304Y-98027127D01* X74729240Y-98037347D01* X74707531Y-98052822D01* X74707515Y-98052835D01* X74685805Y-98072729D01* X74685803Y-98072731D01* X74664093Y-98097042D01* X74649184Y-98116769D01* X74641462Y-98121303D01* X74633133Y-98119295D01* X74030986Y-97697077D01* X74026179Y-97689521D01* X74028123Y-97680780D01* X74032481Y-97677027D01* X74688579Y-97350041D01* X74697511Y-97349419D01* X74704269Y-97355295D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J3-Pin_3)*% G36* X95346693Y-104101399D02* G01* X95347343Y-104102725D01* X95663754Y-104865640D01* X95663758Y-104874595D01* X95657429Y-104880929D01* X95657413Y-104880936D01* X94893528Y-105196375D01* X94884573Y-105196366D01* X94878248Y-105190027D01* X94878075Y-105189581D01* X94822273Y-105036035D01* X94822165Y-105035705D01* X94817672Y-105020478D01* X94785905Y-104912804D01* X94748440Y-104809831D01* X94720883Y-104764306D01* X94684947Y-104704936D01* X94667514Y-104685304D01* X94577864Y-104584340D01* X94574935Y-104575881D01* X94578340Y-104568302D01* X94917424Y-104229218D01* X94925696Y-104225792D01* X94932030Y-104227656D01* X95007675Y-104276398D01* X95079926Y-104267193D01* X95135554Y-104229219D01* X95152203Y-104217854D01* X95191321Y-104186733D01* X95235164Y-104151855D01* X95236633Y-104150859D01* X95330730Y-104097049D01* X95339611Y-104095918D01* X95346693Y-104101399D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OA+*% G36* X80762026Y-95373007D02* G01* X80766652Y-95377633D01* X81027250Y-95852385D01* X81028227Y-95861286D01* X81025404Y-95866149D01* X81006396Y-95885802D01* X80981397Y-95918723D01* X80956394Y-95958728D01* X80931403Y-96005786D01* X80909533Y-96053153D01* X80902954Y-96059228D01* X80898911Y-96059949D01* X80613880Y-96059949D01* X80605607Y-96056522D01* X80603258Y-96053153D01* X80581388Y-96005786D01* X80556397Y-95958728D01* X80531393Y-95918723D01* X80506394Y-95885801D01* X80506386Y-95885793D01* X80487387Y-95866149D01* X80484099Y-95857820D01* X80485540Y-95852388D01* X80746140Y-95377632D01* X80753125Y-95372030D01* X80762026Y-95373007D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,VBUS2*% G36* X56940081Y-43852790D02* G01* X57768235Y-44679971D01* X57771667Y-44688242D01* X57768245Y-44696517D01* X57768235Y-44696527D01* X56940081Y-45523707D01* X56931806Y-45527129D01* X56923535Y-45523697D01* X56920471Y-45518301D01* X56885522Y-45380302D01* X56845522Y-45241328D01* X56805525Y-45121332D01* X56765524Y-45020305D01* X56726706Y-44940675D01* X56725523Y-44935548D01* X56725523Y-44440949D01* X56726706Y-44435822D01* X56765524Y-44356192D01* X56805525Y-44255165D01* X56845522Y-44135169D01* X56885522Y-43996195D01* X56920471Y-43858196D01* X56925824Y-43851017D01* X56934685Y-43849726D01* X56940081Y-43852790D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART B RX*% G36* X64012896Y-83542162D02* G01* X64321126Y-83654110D01* X64803751Y-83829397D01* X64810357Y-83835442D01* X64810754Y-83844388D01* X64804709Y-83850994D01* X64803314Y-83851540D01* X63949283Y-84124081D01* X63942385Y-84124148D01* X63888688Y-84108146D01* X63888689Y-84108147D01* X63888685Y-84108146D01* X63888675Y-84108143D01* X63831506Y-84094107D01* X63774337Y-84083071D01* X63717168Y-84075035D01* X63717162Y-84075034D01* X63717159Y-84075034D01* X63717158Y-84075034D01* X63670674Y-84070940D01* X63662733Y-84066800D01* X63660000Y-84059285D01* X63660000Y-83581737D01* X63663427Y-83573464D01* X63671699Y-83570037D01* X63730000Y-83570222D01* X63730000Y-83570221D01* X63730001Y-83570222D01* X63800000Y-83567444D01* X63869999Y-83561666D01* X63939999Y-83552888D01* X64006962Y-83541621D01* X64012896Y-83542162D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J2-Pin_1)*% G36* X59895606Y-98961199D02* G01* X60476298Y-99486519D01* X60722915Y-99709619D01* X60726751Y-99717710D01* X60723742Y-99726144D01* X60723334Y-99726573D01* X59894823Y-100554110D01* X59886548Y-100557532D01* X59878277Y-100554100D01* X59875364Y-100549244D01* X59841041Y-100436619D01* X59801041Y-100321403D01* X59801040Y-100321399D01* X59801040Y-100321398D01* X59761044Y-100222232D01* X59721043Y-100139096D01* X59721042Y-100139093D01* X59682692Y-100074767D01* X59681042Y-100068776D01* X59681042Y-99574601D01* X59682145Y-99569642D01* X59721042Y-99486518D01* X59761042Y-99381381D01* X59801041Y-99256586D01* X59841041Y-99112133D01* X59876391Y-98967104D01* X59881679Y-98959879D01* X59890529Y-98958509D01* X59895606Y-98961199D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OB-*% G36* X44570649Y-97473478D02* G01* X44572995Y-97476841D01* X44594861Y-97524201D01* X44594867Y-97524213D01* X44619858Y-97571271D01* X44644861Y-97611275D01* X44669860Y-97644197D01* X44669868Y-97644205D01* X44688868Y-97663850D01* X44692156Y-97672179D01* X44690714Y-97677614D01* X44430116Y-98152366D01* X44423131Y-98157969D01* X44414230Y-98156992D01* X44409604Y-98152366D01* X44149005Y-97677613D01* X44148028Y-97668712D01* X44150849Y-97663852D01* X44169855Y-97644201D01* X44194856Y-97611277D01* X44219857Y-97571277D01* X44219861Y-97571271D01* X44244852Y-97524213D01* X44244852Y-97524212D01* X44244858Y-97524201D01* X44260454Y-97490422D01* X44266723Y-97476846D01* X44273302Y-97470772D01* X44277345Y-97470051D01* X44562376Y-97470051D01* X44570649Y-97473478D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,/AD-*% G36* X76945144Y-92020744D02* G01* X77143397Y-92218997D01* X77146824Y-92227270D01* X77144778Y-92233880D01* X77094428Y-92307411D01* X77094428Y-92307412D01* X77093824Y-92379508D01* X77130043Y-92452116D01* X77184524Y-92534974D01* X77184796Y-92535435D01* X77220310Y-92602736D01* X77233308Y-92627368D01* X77234138Y-92636284D01* X77228420Y-92643176D01* X77227442Y-92643635D01* X76464116Y-92960217D01* X76455161Y-92960221D01* X76448827Y-92953892D01* X76448820Y-92953876D01* X76320519Y-92643176D01* X76133913Y-92191280D01* X76133922Y-92182326D01* X76140261Y-92176001D01* X76141923Y-92175456D01* X76329752Y-92129289D01* X76333078Y-92128965D01* X76494197Y-92136455D01* X76494551Y-92136484D01* X76636946Y-92152449D01* X76636947Y-92152448D01* X76636949Y-92152449D01* X76778438Y-92127865D01* X76930069Y-92019497D01* X76938791Y-92017476D01* X76945144Y-92020744D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,VBUS1*% G36* X94842612Y-44111932D02* G01* X94843243Y-44112617D01* X94931561Y-44216617D01* X94931914Y-44217080D01* X94998052Y-44313569D01* X95060896Y-44388463D01* X95147229Y-44436834D01* X95273757Y-44452714D01* X95281539Y-44457144D01* X95284000Y-44464323D01* X95284000Y-44943676D01* X95280573Y-44951949D01* X95273757Y-44955285D01* X95147230Y-44971163D01* X95060897Y-45019535D01* X94998051Y-45094429D01* X94931916Y-45190916D01* X94931550Y-45191395D01* X94843250Y-45295374D01* X94835283Y-45299462D01* X94826759Y-45296719D01* X94826066Y-45296081D01* X94721206Y-45191395D01* X94241292Y-44712278D01* X94237859Y-44704010D01* X94241278Y-44695735D01* X94826067Y-44111917D01* X94834342Y-44108498D01* X94842612Y-44111932D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(U2-GPIO15)*% G36* X38409497Y-95376191D02* G01* X38610924Y-95577618D01* X38614351Y-95585891D01* X38614178Y-95587895D01* X38601375Y-95661527D01* X38587531Y-95758380D01* X38573687Y-95872473D01* X38559843Y-96003805D01* X38547041Y-96141199D01* X38542861Y-96149118D01* X38534788Y-96151797D01* X37852760Y-96116592D01* X37844674Y-96112744D01* X37842506Y-96109269D01* X37645442Y-95618710D01* X37645538Y-95609756D01* X37651938Y-95603492D01* X37656054Y-95602651D01* X37791922Y-95599856D01* X37944713Y-95574962D01* X38097504Y-95528318D01* X38250295Y-95459924D01* X38395280Y-95374386D01* X38404146Y-95373135D01* X38409497Y-95376191D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J3-Pin_1)*% G36* X87894404Y-92765966D02* G01* X87895141Y-92767746D01* X88729190Y-95368999D01* X88728453Y-95377923D01* X88721621Y-95383712D01* X88718249Y-95384269D01* X88621029Y-95385932D01* X88614000Y-95386053D01* X88613993Y-95386053D01* X88494011Y-95407076D01* X88494005Y-95407077D01* X88373994Y-95447080D01* X88373992Y-95447081D01* X88254010Y-95506046D01* X88254002Y-95506051D01* X88136907Y-95582112D01* X88130534Y-95584000D01* X87637466Y-95584000D01* X87631093Y-95582112D01* X87513997Y-95506051D01* X87513989Y-95506046D01* X87394007Y-95447081D01* X87394005Y-95447080D01* X87273994Y-95407077D01* X87273988Y-95407076D01* X87154002Y-95386053D01* X87049750Y-95384269D01* X87041536Y-95380701D01* X87038252Y-95372371D01* X87038808Y-95369004D01* X87872859Y-92767745D01* X87878648Y-92760914D01* X87887572Y-92760177D01* X87894404Y-92765966D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J2-Pin_3)*% G36* X46353787Y-92725527D02* G01* X46937604Y-93310315D01* X46941024Y-93318591D01* X46937590Y-93326861D01* X46936897Y-93327499D01* X46832918Y-93415799D01* X46832439Y-93416165D01* X46735952Y-93482300D01* X46661058Y-93545146D01* X46612686Y-93631479D01* X46596808Y-93758006D01* X46592378Y-93765788D01* X46585199Y-93768249D01* X46105846Y-93768249D01* X46097573Y-93764822D01* X46094237Y-93758006D01* X46078357Y-93631479D01* X46078357Y-93631478D01* X46029986Y-93545145D01* X45955092Y-93482301D01* X45858603Y-93416163D01* X45858140Y-93415810D01* X45754147Y-93327498D01* X45750060Y-93319532D01* X45752803Y-93311008D01* X45753428Y-93310329D01* X46337244Y-92725541D01* X46345513Y-92722108D01* X46353787Y-92725527D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART B TX*% G36* X64012896Y-84812162D02* G01* X64321126Y-84924110D01* X64803751Y-85099397D01* X64810357Y-85105442D01* X64810754Y-85114388D01* X64804709Y-85120994D01* X64803314Y-85121540D01* X63949283Y-85394081D01* X63942385Y-85394148D01* X63888688Y-85378146D01* X63888689Y-85378147D01* X63888685Y-85378146D01* X63888675Y-85378143D01* X63831506Y-85364107D01* X63774337Y-85353071D01* X63717168Y-85345035D01* X63717162Y-85345034D01* X63717159Y-85345034D01* X63717158Y-85345034D01* X63670674Y-85340940D01* X63662733Y-85336800D01* X63660000Y-85329285D01* X63660000Y-84851737D01* X63663427Y-84843464D01* X63671699Y-84840037D01* X63730000Y-84840222D01* X63730000Y-84840221D01* X63730001Y-84840222D01* X63800000Y-84837444D01* X63869999Y-84831666D01* X63939999Y-84822888D01* X64006962Y-84811621D01* X64012896Y-84812162D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART A TX*% G36* X70680000Y-83552888D02* G01* X70750000Y-83561666D01* X70819999Y-83567444D01* X70889998Y-83570222D01* X70889998Y-83570221D01* X70889999Y-83570222D01* X70948263Y-83570037D01* X70956547Y-83573438D01* X70960000Y-83581700D01* X70960000Y-84059285D01* X70956573Y-84067558D01* X70949326Y-84070940D01* X70902840Y-84075034D01* X70902839Y-84075034D01* X70902835Y-84075034D01* X70902830Y-84075035D01* X70845661Y-84083071D01* X70788493Y-84094107D01* X70731324Y-84108143D01* X70731313Y-84108146D01* X70731310Y-84108147D01* X70731311Y-84108146D01* X70677613Y-84124148D01* X70670715Y-84124081D01* X69816685Y-83851540D01* X69809845Y-83845760D01* X69809096Y-83836837D01* X69814876Y-83829997D01* X69816239Y-83829400D01* X70607103Y-83542161D01* X70613037Y-83541621D01* X70680000Y-83552888D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,/AD+*% G36* X77290687Y-90423988D02* G01* X77298955Y-90427422D01* X77302375Y-90435698D01* X77302277Y-90437201D01* X77282393Y-90589644D01* X77281884Y-90591851D01* X77238681Y-90720672D01* X77205844Y-90830824D01* X77205844Y-90830825D01* X77216279Y-90938354D01* X77216280Y-90938358D01* X77296836Y-91052344D01* X77298812Y-91061078D01* X77295554Y-91067369D01* X77097369Y-91265554D01* X77089096Y-91268981D01* X77082344Y-91266836D01* X76968358Y-91186280D01* X76968354Y-91186279D01* X76860825Y-91175844D01* X76860824Y-91175844D01* X76750672Y-91208681D01* X76621851Y-91251884D01* X76619644Y-91252393D01* X76467201Y-91272277D01* X76458554Y-91269949D01* X76454086Y-91262188D01* X76453988Y-91260699D01* X76453302Y-90435010D01* X76456722Y-90426736D01* X76464990Y-90423302D01* X77290687Y-90423988D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J2-Pin_1)*% G36* X51433787Y-92725527D02* G01* X52017604Y-93310315D01* X52021024Y-93318591D01* X52017590Y-93326861D01* X52016897Y-93327499D01* X51912918Y-93415799D01* X51912439Y-93416165D01* X51815952Y-93482300D01* X51741058Y-93545146D01* X51692686Y-93631479D01* X51676808Y-93758006D01* X51672378Y-93765788D01* X51665199Y-93768249D01* X51185846Y-93768249D01* X51177573Y-93764822D01* X51174237Y-93758006D01* X51158357Y-93631479D01* X51158357Y-93631478D01* X51109986Y-93545145D01* X51035092Y-93482301D01* X50938603Y-93416163D01* X50938140Y-93415810D01* X50834147Y-93327498D01* X50830060Y-93319532D01* X50832803Y-93311008D01* X50833428Y-93310329D01* X51417244Y-92725541D01* X51425513Y-92722108D01* X51433787Y-92725527D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,VBUS2*% G36* X38678162Y-101825997D02* G01* X38678412Y-101826196D01* X38741536Y-101876474D01* X38812402Y-101921194D01* X38812406Y-101921196D01* X38812408Y-101921197D01* X38883268Y-101954188D01* X38954130Y-101975455D01* X38954131Y-101975455D01* X38954134Y-101975456D01* X39014862Y-101983634D01* X39022603Y-101988134D01* X39025000Y-101995229D01* X39025000Y-102477685D01* X39021573Y-102485958D01* X39018425Y-102488203D01* X38970353Y-102511625D01* X38915714Y-102549212D01* X38915701Y-102549222D01* X38861073Y-102597763D01* X38861069Y-102597766D01* X38806415Y-102657298D01* X38758390Y-102719245D01* X38750612Y-102723683D01* X38742741Y-102721869D01* X38112173Y-102309612D01* X38107123Y-102302216D01* X38108782Y-102293417D01* X38111036Y-102290872D01* X38663342Y-101826195D01* X38671877Y-101823492D01* X38678162Y-101825997D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(U2-GPIO14)*% G36* X40846729Y-89993057D02* G01* X40847854Y-89996630D01* X40885523Y-90256108D01* X40925523Y-90499420D01* X40965522Y-90710506D01* X41005522Y-90889366D01* X41045111Y-91034489D01* X41045523Y-91037568D01* X41045523Y-91319370D01* X41042096Y-91327643D01* X41033823Y-91331070D01* X41029871Y-91330382D01* X40779265Y-91240436D01* X40779256Y-91240433D01* X40512996Y-91184877D01* X40513002Y-91184877D01* X40246743Y-91169327D01* X39980480Y-91193784D01* X39980471Y-91193786D01* X39734674Y-91253296D01* X39725827Y-91251913D01* X39720550Y-91244678D01* X39720810Y-91238261D01* X39993003Y-90412857D01* X39998845Y-90406076D01* X40831023Y-89987856D01* X40839952Y-89987204D01* X40846729Y-89993057D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,VBUS1*% G36* X81090268Y-101581279D02* G01* X81090279Y-101581290D01* X81814038Y-102306014D01* X81817459Y-102314290D01* X81814027Y-102322561D01* X81806656Y-102325948D01* X81764976Y-102329153D01* X81731999Y-102331689D01* X81731995Y-102331689D01* X81731993Y-102331690D01* X81632006Y-102355530D01* X81631999Y-102355532D01* X81532012Y-102395527D01* X81532010Y-102395528D01* X81532003Y-102395531D01* X81532000Y-102395533D01* X81479708Y-102424897D01* X81431999Y-102451689D01* X81335069Y-102521781D01* X81328213Y-102524000D01* X80835787Y-102524000D01* X80828931Y-102521781D01* X80731999Y-102451689D01* X80631999Y-102395533D01* X80631991Y-102395530D01* X80631988Y-102395528D01* X80631986Y-102395527D01* X80531999Y-102355532D01* X80531992Y-102355530D01* X80432005Y-102331690D01* X80432003Y-102331689D01* X80432000Y-102331689D01* X80394906Y-102328836D01* X80357343Y-102325948D01* X80349357Y-102321896D01* X80346574Y-102313385D01* X80349960Y-102306015D01* X81073721Y-101581289D01* X81081992Y-101577858D01* X81090268Y-101581279D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART A TX*% G36* X73815834Y-81957794D02* G01* X75683715Y-82556700D01* X76420253Y-82792859D01* X76427085Y-82798648D01* X76427822Y-82807572D01* X76422033Y-82814404D01* X76420253Y-82815141D01* X73815857Y-83650198D01* X73806933Y-83649461D01* X73801144Y-83642629D01* X73800943Y-83641929D01* X73763999Y-83496053D01* X73723999Y-83357079D01* X73684002Y-83237083D01* X73644001Y-83136056D01* X73605183Y-83056426D01* X73604000Y-83051299D01* X73604000Y-82556700D01* X73605183Y-82551573D01* X73644001Y-82471943D01* X73684002Y-82370916D01* X73723999Y-82250920D01* X73763999Y-82111946D01* X73800943Y-81966070D01* X73806296Y-81958891D01* X73815157Y-81957600D01* X73815834Y-81957794D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J2-Pin_1)*% G36* X51435927Y-92750215D02* G01* X51436664Y-92751995D01* X52270713Y-95353248D01* X52269976Y-95362172D01* X52263144Y-95367961D01* X52259772Y-95368518D01* X52162552Y-95370181D01* X52155523Y-95370302D01* X52155516Y-95370302D01* X52035533Y-95391325D01* X52035527Y-95391326D01* X51915515Y-95431330D01* X51795533Y-95490295D01* X51795525Y-95490300D01* X51678430Y-95566361D01* X51672057Y-95568249D01* X51178989Y-95568249D01* X51172616Y-95566361D01* X51055520Y-95490300D01* X51055512Y-95490295D01* X50935529Y-95431330D01* X50815517Y-95391326D01* X50815511Y-95391325D01* X50695525Y-95370302D01* X50591273Y-95368518D01* X50583059Y-95364950D01* X50579775Y-95356620D01* X50580331Y-95353253D01* X51414382Y-92751994D01* X51420171Y-92745163D01* X51429095Y-92744426D01* X51435927Y-92750215D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J3-Pin_1)*% G36* X94832098Y-98992481D02* G01* X95659920Y-99787482D01* X95663514Y-99795684D01* X95660255Y-99804025D01* X95660084Y-99804199D01* X94831810Y-100631499D01* X94823535Y-100634921D01* X94815264Y-100631489D01* X94812252Y-100626287D01* X94777536Y-100498397D01* X94737536Y-100368841D01* X94697537Y-100257090D01* X94657537Y-100163142D01* X94618879Y-100089554D01* X94617537Y-100084113D01* X94617537Y-99589663D01* X94618691Y-99584597D01* X94657540Y-99503723D01* X94670463Y-99470609D01* X94697537Y-99401245D01* X94737536Y-99279544D01* X94777536Y-99138628D01* X94812644Y-98998083D01* X94817972Y-98990889D01* X94826829Y-98989569D01* X94832098Y-98992481D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART B RX*% G36* X58111233Y-89628343D02* G01* X58112071Y-89628731D01* X58266200Y-89707807D01* X58267624Y-89708672D01* X58380314Y-89788647D01* X58478354Y-89856195D01* X58598485Y-89902692D01* X58767557Y-89918981D01* X58775461Y-89923184D01* X58778133Y-89930626D01* X58778133Y-90410776D01* X58774706Y-90419049D01* X58769164Y-90422153D01* X58623656Y-90457082D01* X58555360Y-90554817D01* X58524145Y-90692943D01* X58481404Y-90849383D01* X58479883Y-90852745D01* X58384455Y-90997332D01* X58377038Y-91002349D01* X58368245Y-91000652D01* X58366424Y-90999167D01* X58364586Y-90997332D01* X57780066Y-90413783D01* X57776633Y-90405514D01* X57777527Y-90401017D01* X58095939Y-89634658D01* X58102278Y-89628334D01* X58111233Y-89628343D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(U1-3V3)*% G36* X69937290Y-74438924D02* G01* X69939645Y-74440758D01* X70416825Y-74921760D01* X70420219Y-74930047D01* X70416825Y-74938240D01* X69939645Y-75419241D01* X69931386Y-75422701D01* X69923099Y-75419307D01* X69921265Y-75416952D01* X69887978Y-75360603D01* X69846983Y-75300904D01* X69805989Y-75250904D01* X69764994Y-75210603D01* X69764991Y-75210600D01* X69728701Y-75183508D01* X69724121Y-75175813D01* X69724000Y-75174133D01* X69724000Y-74685866D01* X69727427Y-74677593D01* X69728701Y-74676491D01* X69764991Y-74649398D01* X69764989Y-74649398D01* X69764994Y-74649396D01* X69805989Y-74609095D01* X69846983Y-74559095D01* X69887978Y-74499396D01* X69921266Y-74443046D01* X69928424Y-74437667D01* X69937290Y-74438924D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART B TX*% G36* X58384135Y-92356181D02* G01* X58384766Y-92356866D01* X58473084Y-92460866D01* X58473437Y-92461329D01* X58539575Y-92557818D01* X58602419Y-92632712D01* X58688752Y-92681083D01* X58815280Y-92696963D01* X58823062Y-92701393D01* X58825523Y-92708572D01* X58825523Y-93187925D01* X58822096Y-93196198D01* X58815280Y-93199534D01* X58688753Y-93215412D01* X58602420Y-93263784D01* X58539574Y-93338678D01* X58473439Y-93435165D01* X58473073Y-93435644D01* X58384773Y-93539623D01* X58376806Y-93543711D01* X58368282Y-93540968D01* X58367589Y-93540330D01* X58262729Y-93435644D01* X57782815Y-92956527D01* X57779382Y-92948259D01* X57782801Y-92939984D01* X58367590Y-92356166D01* X58375865Y-92352747D01* X58384135Y-92356181D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,VBUS1*% G36* X80295746Y-100836871D02* G01* X81073878Y-101565459D01* X81077575Y-101573615D01* X81074422Y-101581997D01* X81073878Y-101582541D01* X80295746Y-102311128D01* X80287364Y-102314281D01* X80279208Y-102310584D01* X80276550Y-102305973D01* X80241999Y-102191689D01* X80202003Y-102075545D01* X80202004Y-102075546D01* X80162002Y-101975539D01* X80162003Y-101975539D01* X80121998Y-101891685D01* X80083627Y-101826753D01* X80082000Y-101820801D01* X80082000Y-101327198D01* X80083627Y-101321246D01* X80122000Y-101256310D01* X80162000Y-101172466D01* X80162003Y-101172460D01* X80162002Y-101172460D01* X80202004Y-101072453D01* X80202003Y-101072454D01* X80241999Y-100956310D01* X80276550Y-100842026D01* X80282224Y-100835099D01* X80291135Y-100834213D01* X80295746Y-100836871D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OB+*% G36* X42525566Y-95383007D02* G01* X42530192Y-95387633D01* X42790790Y-95862385D01* X42791767Y-95871286D01* X42788944Y-95876149D01* X42769936Y-95895802D01* X42744937Y-95928723D01* X42719934Y-95968728D01* X42694943Y-96015786D01* X42673073Y-96063153D01* X42666494Y-96069228D01* X42662451Y-96069949D01* X42377420Y-96069949D01* X42369147Y-96066522D01* X42366798Y-96063153D01* X42344928Y-96015786D01* X42319937Y-95968728D01* X42294933Y-95928723D01* X42269934Y-95895801D01* X42269926Y-95895793D01* X42250927Y-95876149D01* X42247639Y-95867820D01* X42249080Y-95862388D01* X42509680Y-95387632D01* X42516665Y-95382030D01* X42525566Y-95383007D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OB+*% G36* X44425490Y-95383007D02* G01* X44430116Y-95387633D01* X44690714Y-95862385D01* X44691691Y-95871286D01* X44688868Y-95876149D01* X44669860Y-95895802D01* X44644861Y-95928723D01* X44619858Y-95968728D01* X44594867Y-96015786D01* X44572997Y-96063153D01* X44566418Y-96069228D01* X44562375Y-96069949D01* X44277344Y-96069949D01* X44269071Y-96066522D01* X44266722Y-96063153D01* X44244852Y-96015786D01* X44219861Y-95968728D01* X44194857Y-95928723D01* X44169858Y-95895801D01* X44169850Y-95895793D01* X44150851Y-95876149D01* X44147563Y-95867820D01* X44149004Y-95862388D01* X44409604Y-95387632D01* X44416589Y-95382030D01* X44425490Y-95383007D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART A TX*% G36* X75861240Y-82211280D02* G01* X75861931Y-82211916D01* X75967272Y-82317082D01* X76446706Y-82795720D01* X76450140Y-82803990D01* X76446720Y-82812266D01* X76446706Y-82812280D01* X75861933Y-83396081D01* X75853657Y-83399501D01* X75845387Y-83396067D01* X75844757Y-83395383D01* X75756435Y-83291378D01* X75756082Y-83290916D01* X75689946Y-83194429D01* X75627103Y-83119536D01* X75540770Y-83071164D01* X75540769Y-83071163D01* X75540768Y-83071163D01* X75414243Y-83055285D01* X75406461Y-83050855D01* X75404000Y-83043676D01* X75404000Y-82564323D01* X75407427Y-82556050D01* X75414241Y-82552714D01* X75540770Y-82536834D01* X75627103Y-82488463D01* X75689946Y-82413569D01* X75756092Y-82317068D01* X75756437Y-82316618D01* X75844751Y-82212623D01* X75852716Y-82208537D01* X75861240Y-82211280D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART A RX*% G36* X70680000Y-84822888D02* G01* X70750000Y-84831666D01* X70819999Y-84837444D01* X70889998Y-84840222D01* X70889998Y-84840221D01* X70889999Y-84840222D01* X70948263Y-84840037D01* X70956547Y-84843438D01* X70960000Y-84851700D01* X70960000Y-85329285D01* X70956573Y-85337558D01* X70949326Y-85340940D01* X70902840Y-85345034D01* X70902839Y-85345034D01* X70902835Y-85345034D01* X70902830Y-85345035D01* X70845661Y-85353071D01* X70788493Y-85364107D01* X70731324Y-85378143D01* X70731313Y-85378146D01* X70731310Y-85378147D01* X70731311Y-85378146D01* X70677613Y-85394148D01* X70670715Y-85394081D01* X69816685Y-85121540D01* X69809845Y-85115760D01* X69809096Y-85106837D01* X69814876Y-85099997D01* X69816239Y-85099400D01* X70607103Y-84812161D01* X70613037Y-84811621D01* X70680000Y-84822888D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART B TX*% G36* X60422589Y-92102787D02* G01* X60428378Y-92109619D01* X60428579Y-92110319D01* X60465523Y-92256195D01* X60505523Y-92395169D01* X60545520Y-92515165D01* X60585523Y-92616197D01* X60585523Y-92616198D01* X60624340Y-92695822D01* X60625523Y-92700949D01* X60625523Y-93195548D01* X60624340Y-93200675D01* X60585523Y-93280299D01* X60585523Y-93280300D01* X60545520Y-93381332D01* X60505523Y-93501328D01* X60465523Y-93640302D01* X60428579Y-93786178D01* X60423226Y-93793357D01* X60414365Y-93794648D01* X60413665Y-93794447D01* X57809268Y-92959389D01* X57802437Y-92953601D01* X57801700Y-92944677D01* X57807489Y-92937845D01* X57809266Y-92937109D01* X60413667Y-92102050D01* X60422589Y-92102787D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART B RX*% G36* X60424166Y-89562282D02* G01* X60429633Y-89568232D01* X60465521Y-89655396D01* X60505522Y-89740150D01* X60505523Y-89740150D01* X60505523Y-89740151D01* X60545522Y-89812501D01* X60545526Y-89812508D01* X60585511Y-89872434D01* X60585522Y-89872450D01* X60585528Y-89872457D01* X60622776Y-89916734D01* X60625523Y-89924266D01* X60625523Y-90417381D01* X60624406Y-90422369D01* X60585522Y-90504866D01* X60558577Y-90575192D01* X60545524Y-90609261D01* X60505523Y-90733202D01* X60465523Y-90876672D01* X60428292Y-91028389D01* X60422992Y-91035607D01* X60414218Y-91036983D01* X57815321Y-90417966D01* X57808067Y-90412715D01* X57806650Y-90403873D01* X57811901Y-90396619D01* X57814453Y-90395445D01* X60415243Y-89561545D01* X60424166Y-89562282D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OA-*% G36* X84190074Y-100767862D02* G01* X84388137Y-100965925D01* X84391564Y-100974198D01* X84389359Y-100981034D01* X84312183Y-101088228D01* X84312181Y-101088233D01* X84298712Y-101189776D01* X84298712Y-101189778D01* X84325423Y-101293798D01* X84325423Y-101293797D01* X84362660Y-101415475D01* X84363088Y-101417495D01* X84380417Y-101560907D01* X84378007Y-101569532D01* X84370205Y-101573927D01* X84368811Y-101574011D01* X83593013Y-101574696D01* X83584737Y-101571276D01* X83581303Y-101563006D01* X83581303Y-101562986D01* X83581305Y-101560907D01* X83581988Y-100787186D01* X83585422Y-100778917D01* X83593698Y-100775497D01* X83595078Y-100775580D01* X83738508Y-100792910D01* X83740515Y-100793335D01* X83862207Y-100830577D01* X83913761Y-100843815D01* X83966221Y-100857286D01* X83966221Y-100857285D01* X83966222Y-100857286D01* X84067769Y-100843817D01* X84174968Y-100766639D01* X84183681Y-100764587D01* X84190074Y-100767862D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OB-*% G36* X48737843Y-100670165D02* G01* X48936384Y-100868706D01* X48939811Y-100876979D01* X48938089Y-100883089D01* X48860172Y-101010327D01* X48860172Y-101010328D01* X48881107Y-101127406D01* X48881108Y-101127408D01* X48956654Y-101246708D01* X48956789Y-101246933D01* X49037084Y-101387268D01* X49038390Y-101390726D01* X49073118Y-101559960D01* X49071424Y-101568753D01* X49064009Y-101573773D01* X49061667Y-101574012D01* X48283128Y-101574700D01* X48274852Y-101571280D01* X48272303Y-101567465D01* X47975000Y-100847362D01* X47975011Y-100838409D01* X47981350Y-100832084D01* X47982907Y-100831567D01* X48159343Y-100786580D01* X48162475Y-100786221D01* X48313811Y-100789367D01* X48314054Y-100789379D01* X48447564Y-100799726D01* X48580324Y-100772539D01* X48722687Y-100668976D01* X48731393Y-100666881D01* X48737843Y-100670165D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OA-*% G36* X80907185Y-97463478D02* G01* X80909531Y-97466841D01* X80931397Y-97514201D01* X80931403Y-97514213D01* X80956394Y-97561271D01* X80981397Y-97601275D01* X81006396Y-97634197D01* X81006404Y-97634205D01* X81025404Y-97653850D01* X81028692Y-97662179D01* X81027250Y-97667614D01* X80766652Y-98142366D01* X80759667Y-98147969D01* X80750766Y-98146992D01* X80746140Y-98142366D01* X80485541Y-97667613D01* X80484564Y-97658712D01* X80487385Y-97653852D01* X80506391Y-97634201D01* X80531392Y-97601277D01* X80556393Y-97561277D01* X80556397Y-97561271D01* X80581388Y-97514213D01* X80581388Y-97514212D01* X80581394Y-97514201D01* X80596990Y-97480422D01* X80603259Y-97466846D01* X80609838Y-97460772D01* X80613881Y-97460051D01* X80898912Y-97460051D01* X80907185Y-97463478D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(U1-3V3)*% G36* X93398558Y-54028541D02* G01* X94226712Y-54855722D01* X94230144Y-54863993D01* X94226722Y-54872268D01* X94226712Y-54872278D01* X93398558Y-55699458D01* X93390283Y-55702880D01* X93382012Y-55699448D01* X93378948Y-55694052D01* X93343999Y-55556053D01* X93303999Y-55417079D01* X93264002Y-55297083D01* X93224001Y-55196056D01* X93185183Y-55116426D01* X93184000Y-55111299D01* X93184000Y-54616700D01* X93185183Y-54611573D01* X93224001Y-54531943D01* X93264002Y-54430916D01* X93303999Y-54310920D01* X93343999Y-54171946D01* X93378948Y-54033947D01* X93384301Y-54026768D01* X93393162Y-54025477D01* X93398558Y-54028541D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,VBUS2*% G36* X57182763Y-44095529D02* G01* X57183454Y-44096165D01* X57288795Y-44201331D01* X57768229Y-44679969D01* X57771663Y-44688239D01* X57768243Y-44696515D01* X57768229Y-44696529D01* X57183456Y-45280330D01* X57175180Y-45283750D01* X57166910Y-45280316D01* X57166280Y-45279632D01* X57077958Y-45175627D01* X57077605Y-45175165D01* X57011469Y-45078678D01* X56948626Y-45003785D01* X56862293Y-44955413D01* X56862292Y-44955412D01* X56862291Y-44955412D01* X56735766Y-44939534D01* X56727984Y-44935104D01* X56725523Y-44927925D01* X56725523Y-44448572D01* X56728950Y-44440299D01* X56735764Y-44436963D01* X56862293Y-44421083D01* X56948626Y-44372712D01* X57011469Y-44297818D01* X57077615Y-44201317D01* X57077960Y-44200867D01* X57166274Y-44096872D01* X57174239Y-44092786D01* X57182763Y-44095529D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J2-Pin_3)*% G36* X60410213Y-104023470D02* G01* X60410724Y-104024546D01* X60727259Y-104787759D01* X60727263Y-104796714D01* X60720934Y-104803048D01* X60720918Y-104803055D01* X59957281Y-105118392D01* X59948326Y-105118383D01* X59942001Y-105112044D01* X59941735Y-105111336D01* X59887447Y-104951254D01* X59887278Y-104950649D01* X59858390Y-104819917D01* X59829891Y-104708851D01* X59772865Y-104596569D01* X59734646Y-104551626D01* X59665319Y-104470101D01* X59662570Y-104461579D01* X59665958Y-104454250D01* X60005068Y-104115140D01* X60013340Y-104111714D01* X60019872Y-104113707D01* X60089900Y-104160847D01* X60158510Y-104158872D01* X60227498Y-104121062D01* X60306394Y-104066255D01* X60306929Y-104065927D01* X60394360Y-104018731D01* X60403267Y-104017818D01* X60410213Y-104023470D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(U2-GPIO14)*% G36* X40832210Y-90408237D02* G01* X40840478Y-90411671D01* X40843898Y-90419947D01* X40843800Y-90421450D01* X40823916Y-90573893D01* X40823407Y-90576100D01* X40780204Y-90704921D01* X40747367Y-90815073D01* X40747367Y-90815074D01* X40757802Y-90922603D01* X40757803Y-90922607D01* X40838359Y-91036593D01* X40840335Y-91045327D01* X40837077Y-91051618D01* X40638892Y-91249803D01* X40630619Y-91253230D01* X40623867Y-91251085D01* X40509881Y-91170529D01* X40509877Y-91170528D01* X40402348Y-91160093D01* X40402347Y-91160093D01* X40292195Y-91192930D01* X40163374Y-91236133D01* X40161167Y-91236642D01* X40008724Y-91256526D01* X40000077Y-91254198D01* X39995609Y-91246437D01* X39995511Y-91244948D01* X39994825Y-90419259D01* X39998245Y-90410985D01* X40006513Y-90407551D01* X40832210Y-90408237D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OB+*% G36* X49798964Y-100690117D02* G01* X49830593Y-100715894D01* X49884557Y-100759874D01* X49915392Y-100771564D01* X49965882Y-100790708D01* X49965885Y-100790709D01* X50048842Y-100792383D01* X50147373Y-100781351D01* X50147658Y-100781326D01* X50263644Y-100774705D01* X50272098Y-100777655D01* X50275991Y-100785719D01* X50276010Y-100786376D01* X50276696Y-101562986D01* X50273276Y-101571262D01* X50265006Y-101574696D01* X50264986Y-101574696D01* X49490116Y-101574012D01* X49481846Y-101570578D01* X49478426Y-101562302D01* X49478631Y-101560131D01* X49509641Y-101396688D01* X49510762Y-101393459D01* X49581995Y-101256852D01* X49647308Y-101140376D01* X49647309Y-101140374D01* X49647308Y-101140374D01* X49647310Y-101140373D01* X49661121Y-101026349D01* X49661120Y-101026348D01* X49661121Y-101026348D01* X49621831Y-100964053D01* X49583627Y-100903478D01* X49582113Y-100894655D01* X49585249Y-100888968D01* X49783303Y-100690914D01* X49791575Y-100687488D01* X49798964Y-100690117D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,/AD+*% G36* X77305006Y-90046891D02* G01* X77305977Y-90050310D01* X77340769Y-90328790D01* X77377538Y-90588795D01* X77414307Y-90814498D01* X77451076Y-91005900D01* X77487538Y-91161684D01* X77487846Y-91164350D01* X77487846Y-91445020D01* X77484419Y-91453293D01* X77476146Y-91456720D01* X77471408Y-91455718D01* X77217888Y-91343423D01* X77217883Y-91343421D01* X77217882Y-91343421D01* X76947919Y-91264732D01* X76677956Y-91226932D01* X76677955Y-91226932D01* X76407996Y-91230020D01* X76157864Y-91270768D01* X76149148Y-91268716D01* X76144435Y-91261101D01* X76145011Y-91255158D01* X76451313Y-90428551D01* X76457400Y-90421986D01* X76457398Y-90421986D01* X77289499Y-90041120D01* X77298446Y-90040794D01* X77305006Y-90046891D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,3V3_BUS2*% G36* X60422589Y-54002787D02* G01* X60428378Y-54009619D01* X60428579Y-54010319D01* X60465523Y-54156195D01* X60505523Y-54295169D01* X60545520Y-54415165D01* X60585523Y-54516197D01* X60585523Y-54516198D01* X60624340Y-54595822D01* X60625523Y-54600949D01* X60625523Y-55095548D01* X60624340Y-55100675D01* X60585523Y-55180299D01* X60585523Y-55180300D01* X60545520Y-55281332D01* X60505523Y-55401328D01* X60465523Y-55540302D01* X60428579Y-55686178D01* X60423226Y-55693357D01* X60414365Y-55694648D01* X60413665Y-55694447D01* X57809268Y-54859389D01* X57802437Y-54853601D01* X57801700Y-54844677D01* X57807489Y-54837845D01* X57809266Y-54837109D01* X60413667Y-54002050D01* X60422589Y-54002787D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(U2-GPIO14)*% G36* X39381882Y-95411559D02* G01* X39536967Y-95490276D01* X39699616Y-95551082D01* X39862264Y-95590138D01* X39985446Y-95603244D01* X40024902Y-95607443D01* X40024903Y-95607442D01* X40024913Y-95607444D01* X40170520Y-95603465D01* X40178883Y-95606665D01* X40182535Y-95614841D01* X40181867Y-95619069D01* X40008111Y-96109419D01* X40002118Y-96116072D01* X39998563Y-96117117D01* X39315958Y-96204170D01* X39307318Y-96201817D01* X39302976Y-96194708D01* X39276437Y-96052252D01* X39247874Y-95917023D01* X39219312Y-95799880D01* X39190753Y-95700837D01* X39190754Y-95700837D01* X39164639Y-95626804D01* X39165119Y-95617862D01* X39167397Y-95614642D01* X39368319Y-95413720D01* X39376591Y-95410294D01* X39381882Y-95411559D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,GND*% G36* X50247496Y-97552185D02* G01* X50268138Y-97568819D01* X52764845Y-100065526D01* X52798330Y-100126849D01* X52793346Y-100196541D01* X52751474Y-100252474D01* X52687972Y-100276735D01* X52549399Y-100288858D01* X52549389Y-100288860D01* X52329682Y-100347730D01* X52329673Y-100347734D01* X52123513Y-100443868D01* X52050526Y-100494973D01* X52665548Y-101109995D01* X52640801Y-101113554D01* X52516555Y-101170295D01* X52413327Y-101259742D01* X52339481Y-101374649D01* X52313064Y-101464617D01* X51696973Y-100848526D01* X51696972Y-100848527D01* X51645867Y-100921513D01* X51643070Y-100927513D01* X51596897Y-100979951D01* X51529703Y-100999102D01* X51462822Y-100978885D01* X51418307Y-100927511D01* X51415510Y-100921513D01* X51413523Y-100917251D01* X51282198Y-100729700D01* X51120300Y-100567802D01* X50932749Y-100436477D01* X50901615Y-100421959D01* X50725249Y-100339718D01* X50725238Y-100339714D01* X50504089Y-100280457D01* X50504082Y-100280456D01* X50292892Y-100261979D01* X50227824Y-100236526D01* X50186845Y-100179935D01* X50179700Y-100138451D01* X50179700Y-99264587D01* X50181482Y-99248449D01* X50181254Y-99248428D01* X50181988Y-99240665D01* X50179700Y-99167857D01* X50179700Y-99136774D01* X50179700Y-99136768D01* X50178766Y-99129375D01* X50178307Y-99123547D01* X50176762Y-99074371D01* X50176762Y-99074369D01* X50170732Y-99053614D01* X50166789Y-99034568D01* X50166716Y-99033987D01* X50164082Y-99013136D01* X50145964Y-98967376D01* X50144071Y-98961845D01* X50138402Y-98942335D01* X50130345Y-98914599D01* X50130343Y-98914595D01* X50130342Y-98914593D01* X50119349Y-98896007D01* X50110788Y-98878532D01* X50102835Y-98858444D01* X50073903Y-98818623D01* X50070698Y-98813743D01* X50063771Y-98802030D01* X50045652Y-98771393D01* X50030378Y-98756119D01* X50017739Y-98741321D01* X50005041Y-98723843D01* X50005039Y-98723841D01* X50005040Y-98723841D01* X49967114Y-98692467D01* X49962792Y-98688533D01* X49018440Y-97744181D01* X48984955Y-97682858D01* X48989939Y-97613166D01* X49031811Y-97557233D01* X49097275Y-97532816D01* X49106121Y-97532500D01* X50180457Y-97532500D01* X50247496Y-97552185D01* G37* %TD.AperFunction*% %TA.AperFunction,Conductor*% G36* X65159624Y-41130309D02* G01* X65205379Y-41183113D01* X65215323Y-41252271D01* X65186298Y-41315827D01* X65149405Y-41344839D01* X65112790Y-41363715D01* X65112783Y-41363719D01* X65112776Y-41363723D01* X65112775Y-41363724D01* X65091498Y-41377398D01* X64760090Y-41590379D01* X64430539Y-41849542D01* X64430537Y-41849543D01* X64127114Y-42138856D01* X63852572Y-42455695D01* X63852561Y-42455708D01* X63609395Y-42797187D01* X63609389Y-42797196D01* X63399766Y-43160273D01* X63225608Y-43541625D01* X63225598Y-43541650D01* X63088486Y-43937808D01* X63088483Y-43937818D01* X62989642Y-44345247D01* X62929978Y-44760217D01* X62910030Y-45178990D01* X62929978Y-45597762D01* X62989642Y-46012732D01* X63088483Y-46420161D01* X63088486Y-46420171D01* X63216913Y-46791235D01* X63225604Y-46816345D01* X63337068Y-47060418D01* X63399766Y-47197706D01* X63449394Y-47283664D01* X63600432Y-47545270D01* X63609389Y-47560783D01* X63609395Y-47560792D01* X63852561Y-47902271D01* X63852570Y-47902281D01* X63852571Y-47902283D01* X63854873Y-47904940D01* X64116941Y-48207383D01* X64127117Y-48219126D01* X64430538Y-48508437D01* X64623631Y-48660287D01* X64760090Y-48767600D01* X64876804Y-48842607D01* X65112775Y-48994256D01* X65485413Y-49186365D01* X65874625Y-49342182D01* X66276886Y-49460296D01* X66276895Y-49460297D01* X66276900Y-49460299D01* X66323923Y-49469362D01* X66386026Y-49501377D01* X66420961Y-49561886D01* X66424457Y-49591127D01* X66423296Y-72689773D01* X66403608Y-72756812D01* X66350802Y-72802564D01* X66281643Y-72812504D01* X66218089Y-72783476D01* X66193756Y-72754862D01* X66171565Y-72718883D01* X66167089Y-72713223D01* X66167126Y-72713192D01* X66162217Y-72707165D01* X66162181Y-72707196D01* X66157541Y-72701667D01* X66157539Y-72701665D01* X66157537Y-72701662D01* X66126427Y-72672311D01* X66101053Y-72648371D01* X64821110Y-71368428D01* X64787625Y-71307105D01* X64784791Y-71280747D01* X64784791Y-55726876D01* X64786100Y-55708906D01* X64789632Y-55684790D01* X64785027Y-55632161D01* X64784791Y-55626754D01* X64784791Y-55618406D01* X64784790Y-55618395D01* X64780943Y-55585485D01* X64774178Y-55508158D01* X64772718Y-55501085D01* X64772764Y-55501075D01* X64771081Y-55493484D01* X64771035Y-55493496D01* X64769371Y-55486477D01* X64769370Y-55486469D01* X64742817Y-55413516D01* X64718405Y-55339844D01* X64718404Y-55339842D01* X64715352Y-55333297D01* X64715396Y-55333276D01* X64712008Y-55326277D01* X64711965Y-55326299D01* X64708727Y-55319851D01* X64666057Y-55254976D01* X64625321Y-55188931D01* X64620844Y-55183269D01* X64620881Y-55183238D01* X64615972Y-55177211D01* X64615936Y-55177242D01* X64611296Y-55171713D01* X64611294Y-55171711D01* X64611292Y-55171708D01* X64580182Y-55142357D01* X64554808Y-55118417D01* X63793762Y-54357372D01* X63781980Y-54343739D01* X63767430Y-54324195D01* X63767429Y-54324194D01* X63767427Y-54324191D01* X63766553Y-54323457D01* X63726945Y-54290221D01* X63722956Y-54286566D01* X63717060Y-54280670D01* X63717059Y-54280669D01* X63691061Y-54260112D01* X63631598Y-54210217D01* X63631593Y-54210214D01* X63625563Y-54206248D01* X63625588Y-54206208D01* X63619027Y-54202028D01* X63619003Y-54202069D01* X63612862Y-54198280D01* X63542498Y-54165469D01* X63473143Y-54130638D01* X63466359Y-54128169D01* X63466374Y-54128125D01* X63459029Y-54125571D01* X63459015Y-54125616D01* X63452163Y-54123345D01* X63414135Y-54115493D01* X63376107Y-54107641D01* X63300614Y-54089749D01* X63300612Y-54089749D01* X63300604Y-54089747D01* X63293440Y-54088910D01* X63293445Y-54088861D01* X63285715Y-54088071D01* X63285711Y-54088119D01* X63278520Y-54087489D01* X63200878Y-54089749D01* X61074918Y-54089749D01* X61007879Y-54070064D01* X60962124Y-54017260D01* X60954713Y-53996192D01* X60927578Y-53889048D01* X60924373Y-53876392D01* X60921934Y-53867898D01* X60897803Y-53801479D01* X60897228Y-53800563D01* X60886097Y-53778014D01* X60876413Y-53752048D01* X60876412Y-53752045D01* X60801935Y-53652556D01* X60777520Y-53587096D01* X60792372Y-53518823D01* X60801938Y-53503938D01* X60876410Y-53404456D01* X60876411Y-53404455D01* X60927511Y-53267453D01* X60927511Y-53267452D01* X60927512Y-53267450D01* X60931114Y-53233941D01* X60934022Y-53206903D01* X60934023Y-53206886D01* X60934023Y-51409611D01* X60934022Y-51409594D01* X60930680Y-51378519D01* X60927512Y-51349048D01* X60876412Y-51212045D01* X60788784Y-51094988D01* X60671727Y-51007360D01* X60534726Y-50956260D01* X60474177Y-50949749D01* X60474161Y-50949749D01* X56876885Y-50949749D01* X56876868Y-50949749D01* X56816320Y-50956260D01* X56816318Y-50956260D01* X56679318Y-51007360D01* X56562262Y-51094988D01* X56474634Y-51212044D01* X56423534Y-51349044D01* X56423534Y-51349046D01* X56417023Y-51409594D01* X56417023Y-52249499D01* X56416811Y-52254622D01* X56412367Y-52308244D01* X56412367Y-52308252D01* X56416811Y-52361874D01* X56417023Y-52366996D01* X56417023Y-53206903D01* X56423534Y-53267451D01* X56423534Y-53267453D01* X56474634Y-53404453D01* X56549108Y-53503938D01* X56573525Y-53569403D01* X56558673Y-53637676D01* X56549108Y-53652560D01* X56474634Y-53752044D01* X56423534Y-53889044D01* X56423534Y-53889046D01* X56417023Y-53949594D01* X56417023Y-54789499D01* X56416811Y-54794622D01* X56412367Y-54848244D01* X56412367Y-54848252D01* X56416811Y-54901874D01* X56417023Y-54906996D01* X56417023Y-55746903D01* X56423534Y-55807451D01* X56423534Y-55807453D01* X56473139Y-55940444D01* X56474634Y-55944453D01* X56517072Y-56001144D01* X56549108Y-56043938D01* X56573525Y-56109403D01* X56558673Y-56177676D01* X56549109Y-56192557D01* X56549109Y-56192559D01* X56549108Y-56192560D01* X56474634Y-56292044D01* X56423534Y-56429044D01* X56423534Y-56429046D01* X56417023Y-56489594D01* X56417023Y-57329499D01* X56416811Y-57334622D01* X56412367Y-57388244D01* X56412367Y-57388252D01* X56416811Y-57441874D01* X56417023Y-57446996D01* X56417023Y-58286903D01* X56423534Y-58347451D01* X56423534Y-58347453D01* X56474634Y-58484453D01* X56549108Y-58583938D01* X56573525Y-58649403D01* X56558673Y-58717676D01* X56549108Y-58732560D01* X56474634Y-58832044D01* X56423534Y-58969044D01* X56423534Y-58969046D01* X56417023Y-59029594D01* X56417023Y-59869499D01* X56416811Y-59874622D01* X56412367Y-59928244D01* X56412367Y-59928252D01* X56416811Y-59981874D01* X56417023Y-59986996D01* X56417023Y-60826903D01* X56423534Y-60887451D01* X56423534Y-60887453D01* X56474634Y-61024453D01* X56549108Y-61123938D01* X56573525Y-61189403D01* X56558673Y-61257676D01* X56549108Y-61272560D01* X56474634Y-61372044D01* X56423534Y-61509044D01* X56423534Y-61509046D01* X56417023Y-61569594D01* X56417023Y-63366903D01* X56423534Y-63427451D01* X56423534Y-63427453D01* X56474634Y-63564453D01* X56549108Y-63663938D01* X56573525Y-63729403D01* X56558673Y-63797676D01* X56549108Y-63812560D01* X56474634Y-63912044D01* X56423534Y-64049044D01* X56423534Y-64049046D01* X56417023Y-64109594D01* X56417023Y-64949499D01* X56416811Y-64954622D01* X56412367Y-65008244D01* X56412367Y-65008252D01* X56416811Y-65061874D01* X56417023Y-65066996D01* X56417023Y-65906903D01* X56423534Y-65967451D01* X56423534Y-65967453D01* X56474634Y-66104453D01* X56549108Y-66203938D01* X56573525Y-66269403D01* X56558673Y-66337676D01* X56549108Y-66352560D01* X56474634Y-66452044D01* X56423534Y-66589044D01* X56423534Y-66589046D01* X56417023Y-66649594D01* X56417023Y-67489499D01* X56416811Y-67494622D01* X56412367Y-67548244D01* X56412367Y-67548252D01* X56416811Y-67601874D01* X56417023Y-67606996D01* X56417023Y-68446903D01* X56423534Y-68507451D01* X56423534Y-68507453D01* X56474634Y-68644453D01* X56549108Y-68743938D01* X56573525Y-68809403D01* X56558673Y-68877676D01* X56549108Y-68892560D01* X56474634Y-68992044D01* X56423534Y-69129044D01* X56423534Y-69129046D01* X56417023Y-69189594D01* X56417023Y-70029499D01* X56416811Y-70034622D01* X56412367Y-70088244D01* X56412367Y-70088252D01* X56416811Y-70141874D01* X56417023Y-70146996D01* X56417023Y-70986903D01* X56423534Y-71047451D01* X56423534Y-71047453D01* X56474634Y-71184453D01* X56549108Y-71283938D01* X56573525Y-71349403D01* X56558673Y-71417676D01* X56549108Y-71432560D01* X56474634Y-71532044D01* X56423534Y-71669044D01* X56423534Y-71669046D01* X56417023Y-71729594D01* X56417023Y-72569499D01* X56416811Y-72574622D01* X56412367Y-72628244D01* X56412367Y-72628252D01* X56416811Y-72681874D01* X56417023Y-72686996D01* X56417023Y-73526903D01* X56423534Y-73587451D01* X56423534Y-73587453D01* X56464208Y-73696500D01* X56474634Y-73724453D01* X56562262Y-73841510D01* X56679319Y-73929138D01* X56816322Y-73980238D01* X56843573Y-73983167D01* X56876868Y-73986748D01* X56876885Y-73986749D01* X60474161Y-73986749D01* X60474177Y-73986748D01* X60501215Y-73983840D01* X60534724Y-73980238D01* X60671727Y-73929138D01* X60788784Y-73841510D01* X60876412Y-73724453D01* X60927512Y-73587450D01* X60931114Y-73553941D01* X60934022Y-73526903D01* X60934023Y-73526886D01* X60934023Y-71729611D01* X60934022Y-71729594D01* X60928626Y-71679411D01* X60927512Y-71669048D01* X60910740Y-71624082D01* X60876411Y-71532042D01* X60876410Y-71532041D01* X60801938Y-71432560D01* X60777520Y-71367096D01* X60792371Y-71298823D01* X60801938Y-71283938D01* X60876410Y-71184456D01* X60876411Y-71184455D01* X60927511Y-71047453D01* X60927511Y-71047452D01* X60927512Y-71047450D01* X60931114Y-71013941D01* X60934022Y-70986903D01* X60934023Y-70986886D01* X60934023Y-69189611D01* X60934022Y-69189594D01* X60930680Y-69158519D01* X60927512Y-69129048D01* X60876412Y-68992045D01* X60876411Y-68992042D01* X60876410Y-68992041D01* X60801938Y-68892560D01* X60777520Y-68827096D01* X60792371Y-68758823D01* X60801938Y-68743938D01* X60876410Y-68644456D01* X60876411Y-68644455D01* X60927511Y-68507453D01* X60927511Y-68507452D01* X60927512Y-68507450D01* X60931114Y-68473941D01* X60934022Y-68446903D01* X60934023Y-68446886D01* X60934023Y-66649611D01* X60934022Y-66649594D01* X60930680Y-66618519D01* X60927512Y-66589048D01* X60876412Y-66452045D01* X60876411Y-66452042D01* X60876410Y-66452041D01* X60801938Y-66352560D01* X60777520Y-66287096D01* X60792371Y-66218823D01* X60801938Y-66203938D01* X60876410Y-66104456D01* X60876411Y-66104455D01* X60927511Y-65967453D01* X60927511Y-65967452D01* X60927512Y-65967450D01* X60931114Y-65933941D01* X60934022Y-65906903D01* X60934023Y-65906886D01* X60934023Y-64109611D01* X60934022Y-64109594D01* X60930680Y-64078519D01* X60927512Y-64049048D01* X60876412Y-63912045D01* X60876411Y-63912042D01* X60876410Y-63912041D01* X60801938Y-63812560D01* X60777520Y-63747096D01* X60792371Y-63678823D01* X60801938Y-63663938D01* X60876410Y-63564456D01* X60876411Y-63564455D01* X60927511Y-63427453D01* X60927511Y-63427452D01* X60927512Y-63427450D01* X60931114Y-63393941D01* X60934022Y-63366903D01* X60934023Y-63366886D01* X60934023Y-61569611D01* X60934022Y-61569594D01* X60930680Y-61538519D01* X60927512Y-61509048D01* X60876412Y-61372045D01* X60876411Y-61372042D01* X60876410Y-61372041D01* X60801938Y-61272560D01* X60777520Y-61207096D01* X60792371Y-61138823D01* X60801938Y-61123938D01* X60876410Y-61024456D01* X60876411Y-61024455D01* X60927511Y-60887453D01* X60927511Y-60887452D01* X60927512Y-60887450D01* X60931114Y-60853941D01* X60934022Y-60826903D01* X60934023Y-60826886D01* X60934023Y-59029611D01* X60934022Y-59029594D01* X60930680Y-58998519D01* X60927512Y-58969048D01* X60876412Y-58832045D01* X60876411Y-58832042D01* X60876410Y-58832041D01* X60801938Y-58732560D01* X60777520Y-58667096D01* X60792371Y-58598823D01* X60801938Y-58583938D01* X60876410Y-58484456D01* X60876411Y-58484455D01* X60927511Y-58347453D01* X60927511Y-58347452D01* X60927512Y-58347450D01* X60931114Y-58313941D01* X60934022Y-58286903D01* X60934023Y-58286886D01* X60934023Y-56489611D01* X60934022Y-56489594D01* X60930680Y-56458519D01* X60927512Y-56429048D01* X60876412Y-56292045D01* X60801936Y-56192557D01* X60777520Y-56127095D01* X60792372Y-56058822D01* X60801928Y-56043949D01* X60831456Y-56004504D01* X60834161Y-56001144D01* X60834860Y-56000333D01* X60834885Y-56000309D01* X60840238Y-55993130D01* X60841422Y-55991349D01* X60843376Y-55988582D01* X60876412Y-55944453D01* X60919615Y-55828621D01* X60926363Y-55812245D01* X60954713Y-55700305D01* X60990255Y-55640150D01* X61052676Y-55608760D01* X61074918Y-55606749D01* X62846415Y-55606749D01* X62913454Y-55626434D01* X62934096Y-55643068D01* X63231472Y-55940444D01* X63264957Y-56001767D01* X63267791Y-56028125D01* X63267791Y-71581997D01* X63266482Y-71599967D01* X63262949Y-71624082D01* X63267555Y-71676711D01* X63267791Y-71682118D01* X63267791Y-71690469D01* X63271638Y-71723387D01* X63278403Y-71800718D01* X63279863Y-71807785D01* X63279817Y-71807794D01* X63281500Y-71815385D01* X63281545Y-71815375D01* X63283210Y-71822401D01* X63309764Y-71895356D01* X63334177Y-71969028D01* X63337231Y-71975577D01* X63337187Y-71975597D01* X63340575Y-71982595D01* X63340618Y-71982574D01* X63343854Y-71989019D01* X63343856Y-71989023D01* X63386524Y-72053896D01* X63427261Y-72119942D01* X63427263Y-72119944D01* X63431742Y-72125609D01* X63431704Y-72125638D01* X63436611Y-72131663D01* X63436648Y-72131633D01* X63441293Y-72137169D01* X63497773Y-72190454D01* X64777717Y-73470398D01* X64811202Y-73531721D01* X64814036Y-73558079D01* X64814036Y-73648588D01* X64794351Y-73715627D01* X64741547Y-73761382D01* X64672389Y-73771326D01* X64648870Y-73764320D01* X64648593Y-73765157D01* X64641739Y-73762886D01* X64641738Y-73762885D01* X64525756Y-73724453D01* X64473427Y-73707113D01* X64369546Y-73696500D01* X63768462Y-73696500D01* X63768446Y-73696501D01* X63664572Y-73707113D01* X63496264Y-73762884D01* X63496259Y-73762886D01* X63345346Y-73855971D01* X63219970Y-73981347D01* X63219968Y-73981350D01* X63219541Y-73982043D01* X63219123Y-73982418D01* X63215489Y-73987015D01* X63214703Y-73986393D01* X63167591Y-74028764D01* X63098627Y-74039983D01* X63034547Y-74012136D01* X63016739Y-73991578D01* X63015798Y-73992323D01* X63011316Y-73986655D01* X62887345Y-73862684D01* X62738124Y-73770643D01* X62738119Y-73770641D01* X62571697Y-73715494D01* X62571690Y-73715493D01* X62468986Y-73705000D01* X62419000Y-73705000D01* X62419000Y-76154999D01* X62468972Y-76154999D01* X62468986Y-76154998D01* X62571697Y-76144505D01* X62738119Y-76089358D01* X62738124Y-76089356D01* X62887345Y-75997315D01* X63011316Y-75873344D01* X63015798Y-75867677D01* X63017991Y-75869411D01* X63060357Y-75831265D01* X63129314Y-75820008D01* X63193410Y-75847818D01* X63215334Y-75873106D01* X63215489Y-75872985D01* X63218183Y-75876392D01* X63219545Y-75877963D01* X63219970Y-75878652D01* X63345348Y-76004030D01* X63496262Y-76097115D01* X63664574Y-76152887D01* X63768455Y-76163500D01* X64369544Y-76163499D01* X64473426Y-76152887D01* X64641738Y-76097115D01* X64641739Y-76097113D01* X64648593Y-76094843D01* X64649390Y-76097248D01* X64706681Y-76088533D01* X64770471Y-76117038D01* X64808724Y-76175506D01* X64814036Y-76211411D01* X64814036Y-81511921D01* X64794351Y-81578960D01* X64777717Y-81599602D01* X64651028Y-81726291D01* X64589705Y-81759776D01* X64563347Y-81762610D01* X63943495Y-81762610D01* X63906170Y-81765547D01* X63906164Y-81765548D01* X63746403Y-81811963D01* X63746398Y-81811965D01* X63603196Y-81896654D01* X63603187Y-81896661D01* X63485551Y-82014297D01* X63485544Y-82014306D01* X63400855Y-82157508D01* X63400853Y-82157513D01* X63354438Y-82317274D01* X63354437Y-82317280D01* X63351500Y-82354605D01* X63351500Y-82787615D01* X63354437Y-82824939D01* X63354438Y-82824945D01* X63377088Y-82902905D01* X63376889Y-82972775D01* X63338947Y-83031445D01* X63275308Y-83060288D01* X63258012Y-83061500D01* X62294294Y-83061500D01* X62276324Y-83060191D01* X62252206Y-83056658D01* X62206651Y-83060645D01* X62199573Y-83061264D01* X62194172Y-83061500D01* X62185819Y-83061500D01* X62152903Y-83065347D01* X62075574Y-83072112D01* X62068506Y-83073572D01* X62068496Y-83073528D01* X62060906Y-83075210D01* X62060917Y-83075254D01* X62053893Y-83076919D01* X62053887Y-83076920D01* X62053887Y-83076921D01* X62029414Y-83085827D01* X61980933Y-83103473D01* X61907257Y-83127887D01* X61900720Y-83130936D01* X61900700Y-83130894D01* X61893696Y-83134285D01* X61893717Y-83134326D01* X61887269Y-83137564D01* X61822394Y-83180233D01* X61756352Y-83220967D01* X61750683Y-83225450D01* X61750653Y-83225413D01* X61744627Y-83230322D01* X61744657Y-83230357D01* X61739132Y-83234993D01* X61685836Y-83291482D01* X61139632Y-83837685D01* X61078309Y-83871170D01* X61008617Y-83866186D01* X60952684Y-83824314D01* X60928267Y-83758850D01* X60928661Y-83736754D01* X60934023Y-83686887D01* X60934023Y-81889611D01* X60934022Y-81889594D01* X60930680Y-81858519D01* X60927512Y-81829048D01* X60921140Y-81811965D01* X60876411Y-81692042D01* X60876410Y-81692041D01* X60801938Y-81592560D01* X60777520Y-81527096D01* X60792371Y-81458823D01* X60801938Y-81443938D01* X60876410Y-81344456D01* X60876411Y-81344455D01* X60927511Y-81207453D01* X60927511Y-81207452D01* X60927512Y-81207450D01* X60931114Y-81173941D01* X60934022Y-81146903D01* X60934023Y-81146886D01* X60934023Y-79349611D01* X60934022Y-79349594D01* X60930680Y-79318519D01* X60927512Y-79289048D01* X60876412Y-79152045D01* X60876411Y-79152042D01* X60876410Y-79152041D01* X60801938Y-79052560D01* X60777520Y-78987096D01* X60792371Y-78918823D01* X60801938Y-78903938D01* X60876410Y-78804456D01* X60876411Y-78804455D01* X60927511Y-78667453D01* X60927511Y-78667452D01* X60927512Y-78667450D01* X60931114Y-78633941D01* X60934022Y-78606903D01* X60934023Y-78606886D01* X60934023Y-76809611D01* X60934022Y-76809594D01* X60930680Y-76778519D01* X60927512Y-76749048D01* X60876412Y-76612045D01* X60788784Y-76494988D01* X60671727Y-76407360D01* X60534726Y-76356260D01* X60474177Y-76349749D01* X60474161Y-76349749D01* X56876885Y-76349749D01* X56876868Y-76349749D01* X56816320Y-76356260D01* X56816318Y-76356260D01* X56679318Y-76407360D01* X56562262Y-76494988D01* X56474634Y-76612044D01* X56423534Y-76749044D01* X56423534Y-76749046D01* X56417023Y-76809594D01* X56417023Y-77649499D01* X56416811Y-77654622D01* X56412367Y-77708244D01* X56412367Y-77708252D01* X56416811Y-77761874D01* X56417023Y-77766996D01* X56417023Y-78606903D01* X56423534Y-78667451D01* X56423534Y-78667453D01* X56474634Y-78804453D01* X56549108Y-78903938D01* X56573525Y-78969403D01* X56558673Y-79037676D01* X56549108Y-79052560D01* X56474634Y-79152044D01* X56423534Y-79289044D01* X56423534Y-79289046D01* X56417023Y-79349594D01* X56417023Y-80189499D01* X56416811Y-80194622D01* X56412367Y-80248244D01* X56412367Y-80248252D01* X56416811Y-80301874D01* X56417023Y-80306996D01* X56417023Y-81146903D01* X56423534Y-81207451D01* X56423534Y-81207453D01* X56474634Y-81344453D01* X56549108Y-81443938D01* X56573525Y-81509403D01* X56558673Y-81577676D01* X56549108Y-81592560D01* X56474634Y-81692044D01* X56423534Y-81829044D01* X56423534Y-81829046D01* X56417023Y-81889594D01* X56417023Y-82729499D01* X56416811Y-82734622D01* X56412420Y-82787615D01* X56412367Y-82788249D01* X56415407Y-82824941D01* X56416811Y-82841874D01* X56417023Y-82846996D01* X56417023Y-83686903D01* X56423534Y-83747451D01* X56423534Y-83747453D01* X56474634Y-83884453D01* X56549108Y-83983938D01* X56573525Y-84049403D01* X56558673Y-84117676D01* X56549108Y-84132560D01* X56474634Y-84232044D01* X56423534Y-84369044D01* X56423534Y-84369046D01* X56417023Y-84429594D01* X56417023Y-85269499D01* X56416811Y-85274622D01* X56412420Y-85327612D01* X56412367Y-85328249D01* X56415407Y-85364941D01* X56416811Y-85381874D01* X56417023Y-85386996D01* X56417023Y-86226903D01* X56423534Y-86287451D01* X56423534Y-86287453D01* X56474634Y-86424453D01* X56562262Y-86541510D01* X56679319Y-86629138D01* X56816322Y-86680238D01* X56843573Y-86683167D01* X56876868Y-86686748D01* X56876885Y-86686749D01* X60433100Y-86686749D01* X60500139Y-86706434D01* X60545894Y-86759238D01* X60557100Y-86810749D01* X60557100Y-88925031D01* X60537415Y-88992070D01* X60484611Y-89037825D01* X60429521Y-89048979D01* X60402575Y-89048200D01* X60396497Y-89048623D01* X60396496Y-89048617D01* X60383009Y-89049749D01* X56876868Y-89049749D01* X56816320Y-89056260D01* X56816318Y-89056260D01* X56679318Y-89107360D01* X56562262Y-89194988D01* X56474634Y-89312044D01* X56423534Y-89449044D01* X56423534Y-89449046D01* X56417023Y-89509594D01* X56417023Y-90349499D01* X56416811Y-90354622D01* X56412367Y-90408244D01* X56412367Y-90408252D01* X56416811Y-90461874D01* X56417023Y-90466996D01* X56417023Y-91306903D01* X56423534Y-91367451D01* X56423534Y-91367453D01* X56474634Y-91504453D01* X56549108Y-91603938D01* X56573525Y-91669403D01* X56558673Y-91737676D01* X56549109Y-91752557D01* X56544251Y-91759048D01* X56474634Y-91852044D01* X56423534Y-91989044D01* X56423534Y-91989046D01* X56417023Y-92049594D01* X56417023Y-92889499D01* X56416811Y-92894622D01* X56412367Y-92948244D01* X56412367Y-92948252D01* X56416811Y-93001874D01* X56417023Y-93006996D01* X56417023Y-93846903D01* X56423534Y-93907451D01* X56423534Y-93907453D01* X56462527Y-94011993D01* X56474634Y-94044453D01* X56562262Y-94161510D01* X56679319Y-94249138D01* X56816322Y-94300238D01* X56843573Y-94303167D01* X56876868Y-94306748D01* X56876885Y-94306749D01* X60474161Y-94306749D01* X60474177Y-94306748D01* X60501215Y-94303840D01* X60534724Y-94300238D01* X60671727Y-94249138D01* X60788784Y-94161510D01* X60831456Y-94104504D01* X60834161Y-94101144D01* X60834860Y-94100333D01* X60834885Y-94100309D01* X60840238Y-94093130D01* X60841422Y-94091349D01* X60843376Y-94088582D01* X60876412Y-94044453D01* X60919615Y-93928621D01* X60926363Y-93912245D01* X60959516Y-93781336D01* X60995057Y-93721183D01* X61043912Y-93694993D01* X61043477Y-93693798D01* X61050262Y-93691328D01* X61050264Y-93691328D01* X61123216Y-93664775D01* X61196889Y-93640363D01* X61196897Y-93640357D01* X61203435Y-93637310D01* X61203456Y-93637355D01* X61210453Y-93633968D01* X61210431Y-93633924D01* X61216880Y-93630685D01* X61216879Y-93630685D01* X61216883Y-93630684D01* X61281756Y-93588015D01* X61347802Y-93547279D01* X61347806Y-93547274D01* X61353470Y-93542797D01* X61353501Y-93542836D01* X61359525Y-93537929D01* X61359493Y-93537891D01* X61365015Y-93533256D01* X61365025Y-93533250D01* X61386974Y-93509984D01* X61418314Y-93476767D01* X62355419Y-92539661D01* X62771680Y-92123399D01* X62785306Y-92111623D01* X62804858Y-92097069D01* X62838815Y-92056600D01* X62842475Y-92052605D01* X62842702Y-92052378D01* X62848380Y-92046701D01* X62868936Y-92020703D01* X62905934Y-91976611D01* X62918833Y-91961239D01* X62922803Y-91955203D01* X62922843Y-91955229D01* X62927012Y-91948686D01* X62926971Y-91948661D01* X62930764Y-91942511D01* X62930765Y-91942508D01* X62930767Y-91942506D01* X62963573Y-91872152D01* X62998409Y-91802788D01* X62998410Y-91802780D01* X63000879Y-91796000D01* X63000926Y-91796017D01* X63003478Y-91788675D01* X63003431Y-91788660D01* X63005700Y-91781811D01* X63005700Y-91781809D01* X63005702Y-91781806D01* X63021399Y-91705781D01* X63039300Y-91630256D01* X63039300Y-91630254D01* X63039301Y-91630250D01* X63040139Y-91623083D01* X63040186Y-91623088D01* X63040976Y-91615357D01* X63040929Y-91615353D01* X63041558Y-91608162D01* X63039300Y-91530540D01* X63039300Y-86631111D01* X63362704Y-86631111D01* X63362899Y-86633596D01* X63408718Y-86791308D01* X63492314Y-86932662D01* X63492321Y-86932671D01* X63608438Y-87048788D01* X63608447Y-87048795D01* X63749803Y-87132392D01* X63749806Y-87132393D01* X63907504Y-87178209D01* X63907510Y-87178210D01* X63944356Y-87181110D01* X64585000Y-87181110D01* X64585000Y-86631110D01* X63362705Y-86631110D01* X63362704Y-86631111D01* X63039300Y-86631111D01* X63039300Y-85972500D01* X63058985Y-85905461D01* X63111789Y-85859706D01* X63163300Y-85848500D01* X63279130Y-85848500D01* X63346169Y-85868185D01* X63391924Y-85920989D01* X63401868Y-85990147D01* X63398206Y-86007095D01* X63362900Y-86128615D01* X63362899Y-86128621D01* X63362704Y-86131108D01* X63362705Y-86131110D01* X64961000Y-86131110D01* X65028039Y-86150795D01* X65073794Y-86203599D01* X65085000Y-86255110D01* X65085000Y-87181110D01* X65725644Y-87181110D01* X65762489Y-87178210D01* X65762495Y-87178209D01* X65920193Y-87132393D01* X65920196Y-87132392D01* X66061552Y-87048795D01* X66061561Y-87048788D01* X66177678Y-86932671D01* X66177684Y-86932663D01* X66191847Y-86908716D01* X66242916Y-86861033D01* X66311657Y-86848529D01* X66376247Y-86875174D01* X66416177Y-86932509D01* X66422579Y-86971843D01* X66421151Y-115382479D01* X66401463Y-115449518D01* X66348657Y-115495270D01* X66297197Y-115506473D01* X35497278Y-115517884D01* X35473041Y-115515501D01* X35266356Y-115474389D01* X35258516Y-115472288D01* X35140082Y-115432086D01* X35021651Y-115391884D01* X35014150Y-115388777D01* X34903587Y-115334253D01* X34789800Y-115278138D01* X34782775Y-115274082D01* X34574791Y-115135111D01* X34568350Y-115130168D01* X34380287Y-114965239D01* X34374546Y-114959498D01* X34209619Y-114771433D01* X34204677Y-114764992D01* X34065707Y-114557007D01* X34061648Y-114549976D01* X33951014Y-114325628D01* X33947907Y-114318127D01* X33867501Y-114081252D01* X33865406Y-114073431D01* X33816606Y-113828081D01* X33815548Y-113820039D01* X33799036Y-113568068D01* X33798903Y-113564013D01* X33798903Y-104451000D01* X36875001Y-104451000D01* X36875001Y-104500986D01* X36885494Y-104603697D01* X36940641Y-104770119D01* X36940643Y-104770124D01* X37032684Y-104919345D01* X37156654Y-105043315D01* X37305875Y-105135356D01* X37305880Y-105135358D01* X37472302Y-105190505D01* X37472309Y-105190506D01* X37575019Y-105200999D01* X37849999Y-105200999D01* X37850000Y-105200998D01* X37850000Y-104451000D01* X38350000Y-104451000D01* X38350000Y-105200999D01* X38624972Y-105200999D01* X38624986Y-105200998D01* X38727697Y-105190505D01* X38894119Y-105135358D01* X38894124Y-105135356D01* X39043345Y-105043315D01* X39167315Y-104919345D01* X39259356Y-104770124D01* X39259358Y-104770119D01* X39314505Y-104603697D01* X39314506Y-104603690D01* X39324999Y-104500986D01* X39325000Y-104500973D01* X39325000Y-104451000D01* X38350000Y-104451000D01* X37850000Y-104451000D01* X36875001Y-104451000D01* X33798903Y-104451000D01* X33798903Y-98253537D01* X36637500Y-98253537D01* X36637501Y-98253553D01* X36648113Y-98357427D01* X36703884Y-98525735D01* X36703886Y-98525740D01* X36720848Y-98553240D01* X36796970Y-98676652D01* X36922348Y-98802030D01* X37073262Y-98895115D01* X37241574Y-98950887D01* X37345455Y-98961500D01* X37825500Y-98961499D01* X37892539Y-98981183D01* X37938294Y-99033987D01* X37949500Y-99085499D01* X37949500Y-99227609D01* X37947718Y-99243746D01* X37947946Y-99243768D01* X37947211Y-99251534D01* X37949500Y-99324342D01* X37949500Y-99355434D01* X37950433Y-99362829D01* X37950891Y-99368647D01* X37952437Y-99417829D01* X37952438Y-99417832D01* X37958464Y-99438577D01* X37962407Y-99457618D01* X37965116Y-99479053D01* X37965117Y-99479057D01* X37965118Y-99479064D01* X37981284Y-99519897D01* X37983234Y-99524822D01* X37985125Y-99530348D01* X37998854Y-99577598D01* X38009850Y-99596191D01* X38018410Y-99613665D01* X38026363Y-99633754D01* X38055289Y-99673565D01* X38058490Y-99678437D01* X38083547Y-99720807D01* X38083551Y-99720811D01* X38098820Y-99736080D01* X38111459Y-99750877D01* X38124159Y-99768358D01* X38162074Y-99799723D01* X38166385Y-99803645D01* X38337545Y-99974805D01* X38337547Y-99974807D01* X38716280Y-100353539D01* X38726436Y-100366215D01* X38726612Y-100366070D01* X38731584Y-100372080D01* X38784700Y-100421959D01* X38806667Y-100443926D01* X38811922Y-100448002D01* X38812547Y-100448487D01* X38816990Y-100452282D01* X38852865Y-100485971D01* X38852867Y-100485972D01* X38871794Y-100496377D01* X38888054Y-100507057D01* X38905131Y-100520304D01* X38950301Y-100539851D01* X38955537Y-100542415D01* X38998663Y-100566124D01* X39018667Y-100571260D01* X39019586Y-100571496D01* X39037991Y-100577797D01* X39057823Y-100586379D01* X39106453Y-100594081D01* X39112122Y-100595255D01* X39159812Y-100607500D01* X39181418Y-100607500D01* X39200816Y-100609026D01* X39222151Y-100612406D01* X39267264Y-100608141D01* X39271141Y-100607775D01* X39276979Y-100607500D01* X40429812Y-100607500D01* X40807609Y-100607500D01* X40823746Y-100609281D01* X40823768Y-100609054D01* X40831534Y-100609788D01* X40831536Y-100609787D01* X40831537Y-100609788D01* X40904342Y-100607500D01* X40935432Y-100607500D01* X40942823Y-100606566D01* X40948651Y-100606107D01* X40997831Y-100604562D01* X41018583Y-100598532D01* X41037621Y-100594590D01* X41059064Y-100591882D01* X41104834Y-100573760D01* X41110348Y-100571873D01* X41136875Y-100564165D01* X41157600Y-100558145D01* X41176196Y-100547146D01* X41193664Y-100538589D01* X41213756Y-100530635D01* X41253582Y-100501698D01* X41258441Y-100498506D01* X41300807Y-100473453D01* X41316090Y-100458168D01* X41330873Y-100445542D01* X41348357Y-100432841D01* X41379731Y-100394914D01* X41383645Y-100390613D01* X42249473Y-99524785D01* X42262144Y-99514636D01* X42261998Y-99514459D01* X42268004Y-99509489D01* X42268010Y-99509486D01* X42317888Y-99456370D01* X42339856Y-99434403D01* X42344418Y-99428521D01* X42348210Y-99424080D01* X42381902Y-99388203D01* X42392306Y-99369275D01* X42402984Y-99353019D01* X42416234Y-99335939D01* X42435785Y-99290757D01* X42438341Y-99285538D01* X42457386Y-99250898D01* X42461834Y-99242808D01* X42511383Y-99193547D01* X42570493Y-99178551D01* X42843581Y-99178551D01* X42843597Y-99178550D01* X42881503Y-99174474D01* X42904144Y-99172040D01* X42951586Y-99154344D01* X43021274Y-99149361D01* X43038239Y-99154341D01* X43085690Y-99172040D01* X43102670Y-99173865D01* X43146236Y-99178550D01* X43146253Y-99178551D01* X43793543Y-99178551D01* X43793559Y-99178550D01* X43831465Y-99174474D01* X43854106Y-99172040D01* X43901548Y-99154344D01* X43971236Y-99149361D01* X43988201Y-99154341D01* X44035652Y-99172040D01* X44052632Y-99173865D01* X44096198Y-99178550D01* X44096215Y-99178551D01* X44743505Y-99178551D01* X44743521Y-99178550D01* X44770559Y-99175642D01* X44804068Y-99172040D01* X44941071Y-99120940D01* X45058128Y-99033312D01* X45145756Y-98916255D01* X45196856Y-98779252D01* X45202813Y-98723843D01* X45203366Y-98718705D01* X45203367Y-98718688D01* X45203367Y-97852500D01* X45223052Y-97785461D01* X45275856Y-97739706D01* X45327367Y-97728500D01* X46311060Y-97728500D01* X46378099Y-97748185D01* X46398741Y-97764819D01* X48276381Y-99642458D01* X48309866Y-99703781D01* X48312700Y-99730139D01* X48312700Y-100143666D01* X48293015Y-100210705D01* X48240211Y-100256460D01* X48199508Y-100267194D01* X48047917Y-100280456D01* X48047910Y-100280457D01* X47826755Y-100339716D01* X47767747Y-100367231D01* X47735753Y-100381124D01* X47729113Y-100384975D01* X47724209Y-100387534D01* X47619251Y-100436476D01* X47518448Y-100507060D01* X47434097Y-100566124D01* X47431699Y-100567803D01* X47270579Y-100728923D01* X47209256Y-100762407D01* X47139564Y-100757423D01* X47083631Y-100715551D01* X47066717Y-100684576D01* X47039798Y-100612406D01* X47026889Y-100577796D01* X46939261Y-100460739D01* X46822204Y-100373111D01* X46806442Y-100367232D01* X46685203Y-100322011D01* X46624654Y-100315500D01* X46624638Y-100315500D01* X44927362Y-100315500D01* X44927345Y-100315500D01* X44866797Y-100322011D01* X44866795Y-100322011D01* X44729795Y-100373111D01* X44612739Y-100460739D01* X44525111Y-100577795D01* X44474011Y-100714795D01* X44474011Y-100714797D01* X44467500Y-100775345D01* X44467500Y-100918579D01* X44463519Y-100949747D01* X44449776Y-101002668D01* X44413873Y-101062607D01* X44351264Y-101093621D01* X44329757Y-101095500D01* X40144294Y-101095500D01* X40126324Y-101094191D01* X40102206Y-101090658D01* X40056651Y-101094645D01* X40049573Y-101095264D01* X40044172Y-101095500D01* X40035820Y-101095500D01* X40019362Y-101097423D01* X40002904Y-101099347D01* X39925577Y-101106112D01* X39918503Y-101107573D01* X39918493Y-101107526D01* X39910905Y-101109209D01* X39910916Y-101109255D01* X39903890Y-101110920D01* X39903887Y-101110920D01* X39903887Y-101110921D01* X39882187Y-101118819D01* X39830944Y-101137469D01* X39757261Y-101161885D01* X39750713Y-101164939D01* X39750693Y-101164896D01* X39743695Y-101168284D01* X39743717Y-101168327D01* X39737261Y-101171568D01* X39672386Y-101214237D01* X39606346Y-101254972D01* X39600686Y-101259448D01* X39600656Y-101259411D01* X39594626Y-101264323D01* X39594656Y-101264358D01* X39589127Y-101268997D01* X39566953Y-101292500D01* X39535821Y-101325497D01* X39430135Y-101431185D01* X39421139Y-101440181D01* X39359816Y-101473666D01* X39333457Y-101476500D01* X39122776Y-101476500D01* X39055737Y-101456815D01* X39050853Y-101453328D01* X39048653Y-101451971D01* X39048652Y-101451970D01* X38897738Y-101358885D01* X38897735Y-101358884D01* X38872039Y-101350368D01* X38868588Y-101349110D01* X38862001Y-101346485D01* X38861999Y-101346484D01* X38806108Y-101327846D01* X38802689Y-101327075D01* X38796827Y-101325447D01* X38729427Y-101303113D01* X38625546Y-101292500D01* X37574462Y-101292500D01* X37574446Y-101292501D01* X37470572Y-101303113D01* X37302264Y-101358884D01* X37302259Y-101358886D01* X37151346Y-101451971D01* X37025971Y-101577346D01* X36932886Y-101728259D01* X36932884Y-101728264D01* X36877113Y-101896572D01* X36866500Y-102000447D01* X36866500Y-102601537D01* X36866501Y-102601553D01* X36877113Y-102705427D01* X36932884Y-102873735D01* X36932886Y-102873740D01* X36940778Y-102886535D01* X37025970Y-103024652D01* X37151348Y-103150030D01* X37152031Y-103150451D01* X37152401Y-103150863D01* X37157015Y-103154511D01* X37156391Y-103155298D01* X37198759Y-103202397D01* X37209984Y-103271359D01* X37182144Y-103335442D01* X37161582Y-103353264D01* X37162323Y-103354202D01* X37156655Y-103358683D01* X37032684Y-103482654D01* X36940643Y-103631875D01* X36940641Y-103631880D01* X36885494Y-103798302D01* X36885493Y-103798309D01* X36875000Y-103901013D01* X36875000Y-103951000D01* X39324999Y-103951000D01* X39324999Y-103901028D01* X39324998Y-103901013D01* X39314505Y-103798302D01* X39259358Y-103631880D01* X39259356Y-103631875D01* X39167315Y-103482654D01* X39043344Y-103358683D01* X39037677Y-103354202D01* X39039404Y-103352016D01* X39001240Y-103309589D01* X38990015Y-103240627D01* X39017855Y-103176543D01* X39043106Y-103154664D01* X39042985Y-103154511D01* X39046401Y-103151809D01* X39047969Y-103150451D01* X39048652Y-103150030D01* X39168863Y-103029819D01* X39230186Y-102996334D01* X39256544Y-102993500D01* X39634706Y-102993500D01* X39652676Y-102994809D01* X39655174Y-102995174D01* X39676789Y-102998341D01* X39729426Y-102993735D01* X39734828Y-102993500D01* X39743175Y-102993500D01* X39743180Y-102993500D01* X39766835Y-102990734D01* X39776096Y-102989652D01* X39853419Y-102982888D01* X39853422Y-102982887D01* X39853426Y-102982887D01* X39853429Y-102982885D01* X39860493Y-102981427D01* X39860502Y-102981474D01* X39868097Y-102979790D01* X39868087Y-102979744D01* X39875107Y-102978079D01* X39875113Y-102978079D01* X39948065Y-102951526D01* X40021738Y-102927114D01* X40021746Y-102927108D01* X40028284Y-102924061D01* X40028305Y-102924106D01* X40035302Y-102920719D01* X40035280Y-102920675D01* X40041729Y-102917436D01* X40041728Y-102917436D01* X40041732Y-102917435D01* X40106605Y-102874766D01* X40172651Y-102834030D01* X40172655Y-102834025D01* X40178319Y-102829548D01* X40178350Y-102829587D01* X40184374Y-102824680D01* X40184342Y-102824642D01* X40189869Y-102820003D01* X40189874Y-102820001D01* X40200928Y-102808285D01* X40243163Y-102763517D01* X40357863Y-102648818D01* X40419186Y-102615334D01* X40445544Y-102612500D01* X41352787Y-102612500D01* X41419826Y-102632185D01* X41465581Y-102684989D01* X41466690Y-102691136D01* X42086389Y-103310835D01* X41927931Y-103430499D01* X41784348Y-103588001D01* X41735439Y-103666992D01* X41125883Y-103057436D01* X41125882Y-103057437D01* X41019196Y-103199953D01* X41019191Y-103199961D01* X40882091Y-103451041D01* X40782109Y-103719104D01* X40721300Y-103998637D01* X40700891Y-104283998D01* X40700891Y-104284001D01* X40721300Y-104569362D01* X40782109Y-104848895D01* X40882091Y-105116958D01* X41019191Y-105368038D01* X41019196Y-105368046D01* X41125882Y-105510561D01* X41125883Y-105510562D01* X41735438Y-104901006D01* X41784348Y-104979999D01* X41927931Y-105137501D01* X42086388Y-105257163D01* X41479436Y-105864115D01* X41621960Y-105970807D01* X41621961Y-105970808D01* X41873042Y-106107908D01* X41873041Y-106107908D01* X42141104Y-106207890D01* X42420637Y-106268699D01* X42705999Y-106289109D01* X42706001Y-106289109D01* X42991362Y-106268699D01* X43270895Y-106207890D01* X43538958Y-106107908D01* X43790047Y-105970803D01* X43932561Y-105864116D01* X43932562Y-105864115D01* X43325611Y-105257163D01* X43484069Y-105137501D01* X43627652Y-104979999D01* X43676560Y-104901007D01* X44286115Y-105510562D01* X44286116Y-105510561D01* X44392803Y-105368047D01* X44529908Y-105116958D01* X44629890Y-104848895D01* X44690699Y-104569362D01* X44711109Y-104284001D01* X44711109Y-104283998D01* X44690699Y-103998637D01* X44629890Y-103719104D01* X44529908Y-103451041D01* X44392808Y-103199961D01* X44392807Y-103199960D01* X44286115Y-103057436D01* X43676560Y-103666991D01* X43627652Y-103588001D01* X43484069Y-103430499D01* X43325610Y-103310835D01* X43947880Y-102688566D01* X43950381Y-102677070D01* X43999788Y-102627666D01* X44059212Y-102612500D01* X44494703Y-102612500D01* X44561742Y-102632185D01* X44593969Y-102662188D01* X44612739Y-102687261D01* X44729796Y-102774889D01* X44797831Y-102800265D01* X44866795Y-102825988D01* X44866798Y-102825989D01* X44906755Y-102830285D01* X44971306Y-102857023D01* X45011155Y-102914415D01* X45017500Y-102953574D01* X45017500Y-105604335D01* X45016191Y-105622305D01* X45012658Y-105646420D01* X45017264Y-105699049D01* X45017500Y-105704456D01* X45017500Y-105712807D01* X45021347Y-105745725D01* X45028112Y-105823056D01* X45029572Y-105830123D01* X45029526Y-105830132D01* X45031209Y-105837723D01* X45031254Y-105837713D01* X45032919Y-105844739D01* X45039972Y-105864116D01* X45059473Y-105917694D01* X45077073Y-105970808D01* X45083886Y-105991366D01* X45086940Y-105997915D01* X45086896Y-105997935D01* X45090284Y-106004933D01* X45090327Y-106004912D01* X45093568Y-106011366D01* X45116491Y-106046219D01* X45136233Y-106076234D01* X45176970Y-106142280D01* X45176972Y-106142282D01* X45181451Y-106147947D01* X45181413Y-106147976D01* X45186320Y-106154001D01* X45186357Y-106153971D01* X45191002Y-106159507D01* X45247482Y-106212792D01* X46842995Y-107808305D01* X46854776Y-107821937D01* X46869330Y-107841486D01* X46909811Y-107875453D01* X46913785Y-107879095D01* X46919699Y-107885009D01* X46945694Y-107905563D01* X47005159Y-107955460D01* X47005160Y-107955460D01* X47005162Y-107955462D01* X47011195Y-107959430D01* X47011169Y-107959469D01* X47017726Y-107963646D01* X47017752Y-107963606D01* X47023890Y-107967392D01* X47023894Y-107967395D01* X47094251Y-108000203D01* X47163611Y-108035037D01* X47163617Y-108035038D01* X47170405Y-108037510D01* X47170388Y-108037556D01* X47177723Y-108040105D01* X47177739Y-108040060D01* X47184588Y-108042330D01* X47184593Y-108042331D01* X47260649Y-108058035D01* X47319908Y-108072080D01* X47336138Y-108075927D01* X47336139Y-108075927D01* X47336143Y-108075928D01* X47336147Y-108075928D01* X47343316Y-108076766D01* X47343310Y-108076814D01* X47351041Y-108077605D01* X47351046Y-108077558D01* X47358236Y-108078187D01* X47358240Y-108078186D01* X47358241Y-108078187D01* X47435879Y-108075928D01* X61893226Y-108075928D01* X61911196Y-108077237D01* X61913694Y-108077602D01* X61935309Y-108080769D01* X61987946Y-108076163D01* X61993348Y-108075928D01* X62001695Y-108075928D01* X62001700Y-108075928D01* X62025355Y-108073162D01* X62034616Y-108072080D01* X62111939Y-108065316D01* X62111942Y-108065315D01* X62111946Y-108065315D01* X62111949Y-108065313D01* X62119013Y-108063855D01* X62119022Y-108063902D01* X62126617Y-108062218D01* X62126607Y-108062172D01* X62133627Y-108060507D01* X62133633Y-108060507D01* X62206585Y-108033954D01* X62280258Y-108009542D01* X62280266Y-108009536D01* X62286804Y-108006489D01* X62286825Y-108006534D01* X62293822Y-108003147D01* X62293800Y-108003103D01* X62300249Y-107999864D01* X62300248Y-107999864D01* X62300252Y-107999863D01* X62365125Y-107957194D01* X62431171Y-107916458D01* X62431175Y-107916453D01* X62436839Y-107911976D01* X62436870Y-107912015D01* X62442894Y-107907108D01* X62442862Y-107907070D01* X62448384Y-107902435D01* X62448394Y-107902429D01* X62473850Y-107875447D01* X62501683Y-107845946D01* X63246278Y-107101350D01* X63990880Y-106356747D01* X64004506Y-106344971D01* X64024058Y-106330417D01* X64058015Y-106289948D01* X64061675Y-106285953D01* X64067580Y-106280049D01* X64088136Y-106254051D01* X64138032Y-106194588D01* X64138033Y-106194587D01* X64142003Y-106188551D01* X64142043Y-106188577D01* X64146212Y-106182034D01* X64146171Y-106182009D01* X64149964Y-106175859D01* X64149965Y-106175856D01* X64149967Y-106175854D01* X64182773Y-106105500D01* X64217609Y-106036136D01* X64217610Y-106036128D01* X64220079Y-106029348D01* X64220126Y-106029365D01* X64222678Y-106022023D01* X64222631Y-106022008D01* X64224900Y-106015159D01* X64224900Y-106015157D01* X64224902Y-106015154D01* X64240599Y-105939129D01* X64258500Y-105863604D01* X64258500Y-105863602D01* X64258501Y-105863598D01* X64259339Y-105856431D01* X64259386Y-105856436D01* X64260176Y-105848705D01* X64260129Y-105848701D01* X64260758Y-105841510D01* X64260529Y-105833653D01* X64258500Y-105763902D01* X64258500Y-97717238D01* X64259809Y-97699267D01* X64263341Y-97675156D01* X64258735Y-97622518D01* X64258500Y-97617116D01* X64258500Y-97608769D01* X64258499Y-97608758D01* X64254652Y-97575849D01* X64247887Y-97498521D01* X64247887Y-97498518D01* X64247885Y-97498513D01* X64246427Y-97491449D01* X64246475Y-97491438D01* X64244794Y-97483854D01* X64244746Y-97483866D01* X64243079Y-97476838D01* X64243079Y-97476832D01* X64216530Y-97403889D01* X64192114Y-97330206D01* X64192112Y-97330202D01* X64189060Y-97323657D01* X64189104Y-97323636D01* X64185720Y-97316646D01* X64185676Y-97316669D01* X64182438Y-97310223D01* X64182435Y-97310213D01* X64139771Y-97245345D01* X64099030Y-97179294D01* X64099025Y-97179289D01* X64094552Y-97173631D01* X64094590Y-97173600D01* X64089681Y-97167574D01* X64089645Y-97167605D01* X64085005Y-97162076D01* X64085003Y-97162074D01* X64085001Y-97162071D01* X64035831Y-97115681D01* X64028517Y-97108780D01* X62948859Y-96029123D01* X62937077Y-96015490D01* X62922527Y-95995946D01* X62922526Y-95995945D01* X62922524Y-95995942D01* X62909434Y-95984958D01* X62882042Y-95961972D01* X62878053Y-95958317D01* X62872157Y-95952421D01* X62872156Y-95952420D01* X62846158Y-95931863D01* X62786695Y-95881968D01* X62786690Y-95881965D01* X62780660Y-95877999D01* X62780685Y-95877959D01* X62774124Y-95873779D01* X62774100Y-95873820D01* X62767959Y-95870031D01* X62697595Y-95837220D01* X62628240Y-95802389D01* X62621456Y-95799920D01* X62621471Y-95799876D01* X62614126Y-95797322D01* X62614112Y-95797367D01* X62607260Y-95795096D01* X62569232Y-95787244D01* X62531204Y-95779392D01* X62455711Y-95761500D01* X62455709Y-95761500D01* X62455701Y-95761498D01* X62448537Y-95760661D01* X62448542Y-95760612D01* X62440812Y-95759822D01* X62440808Y-95759870D01* X62433617Y-95759240D01* X62355975Y-95761500D01* X56245543Y-95761500D01* X56178504Y-95741815D01* X56157862Y-95725181D01* X55404819Y-94972138D01* X55371334Y-94910815D01* X55368500Y-94884457D01* X55368500Y-75180000D01* X61169001Y-75180000D01* X61169001Y-75454986D01* X61179494Y-75557697D01* X61234641Y-75724119D01* X61234643Y-75724124D01* X61326684Y-75873345D01* X61450654Y-75997315D01* X61599875Y-76089356D01* X61599880Y-76089358D01* X61766302Y-76144505D01* X61766309Y-76144506D01* X61869019Y-76154999D01* X61918999Y-76154998D01* X61919000Y-76154998D01* X61919000Y-75180000D01* X61169001Y-75180000D01* X55368500Y-75180000D01* X55368500Y-74680000D01* X61169000Y-74680000D01* X61919000Y-74680000D01* X61919000Y-73705000D01* X61918999Y-73704999D01* X61869029Y-73705000D01* X61869011Y-73705001D01* X61766302Y-73715494D01* X61599880Y-73770641D01* X61599875Y-73770643D01* X61450654Y-73862684D01* X61326684Y-73986654D01* X61234643Y-74135875D01* X61234641Y-74135880D01* X61179494Y-74302302D01* X61179493Y-74302309D01* X61169000Y-74405013D01* X61169000Y-74680000D01* X55368500Y-74680000D01* X55368500Y-46593542D01* X55388185Y-46526503D01* X55404814Y-46505865D01* X56243553Y-45667126D01* X56304874Y-45633643D01* X56374565Y-45638627D01* X56430499Y-45680499D01* X56447413Y-45711474D01* X56462593Y-45752171D01* X56474634Y-45784453D01* X56548620Y-45883287D01* X56549108Y-45883938D01* X56573525Y-45949403D01* X56558673Y-46017676D01* X56549108Y-46032560D01* X56474634Y-46132044D01* X56423534Y-46269044D01* X56423534Y-46269046D01* X56417023Y-46329594D01* X56417023Y-47169499D01* X56416811Y-47174622D01* X56412367Y-47228244D01* X56412367Y-47228252D01* X56416811Y-47281874D01* X56417023Y-47286996D01* X56417023Y-48126903D01* X56423534Y-48187451D01* X56423534Y-48187453D01* X56468090Y-48306908D01* X56474634Y-48324453D01* X56562262Y-48441510D01* X56679319Y-48529138D01* X56816322Y-48580238D01* X56843573Y-48583167D01* X56876868Y-48586748D01* X56876885Y-48586749D01* X60474161Y-48586749D01* X60474177Y-48586748D01* X60501215Y-48583840D01* X60534724Y-48580238D01* X60671727Y-48529138D01* X60788784Y-48441510D01* X60876412Y-48324453D01* X60927512Y-48187450D01* X60931406Y-48151227D01* X60934022Y-48126903D01* X60934023Y-48126886D01* X60934023Y-46329611D01* X60934022Y-46329594D01* X60930680Y-46298519D01* X60927512Y-46269048D01* X60911735Y-46226749D01* X60876411Y-46132042D01* X60876410Y-46132041D01* X60801938Y-46032560D01* X60777520Y-45967096D01* X60792371Y-45898823D01* X60801938Y-45883938D01* X60802426Y-45883287D01* X60849107Y-45820928D01* X60876410Y-45784456D01* X60876411Y-45784455D01* X60888452Y-45752174D01* X60927512Y-45647450D01* X60932854Y-45597762D01* X60934022Y-45586903D01* X60934023Y-45586886D01* X60934023Y-43789611D01* X60934022Y-43789594D01* X60930680Y-43758519D01* X60927512Y-43729048D01* X60923549Y-43718424D01* X60896935Y-43647068D01* X60876412Y-43592045D01* X60788784Y-43474988D01* X60671727Y-43387360D01* X60534726Y-43336260D01* X60474177Y-43329749D01* X60474161Y-43329749D01* X56876885Y-43329749D01* X56876868Y-43329749D01* X56816320Y-43336260D01* X56816318Y-43336260D01* X56679318Y-43387360D01* X56562262Y-43474988D01* X56474633Y-43592045D01* X56423362Y-43729505D01* X56423235Y-43729958D01* X56396332Y-43836191D01* X56360792Y-43896346D01* X56298371Y-43927738D01* X56276127Y-43929749D01* X56214045Y-43929749D01* X56196075Y-43928440D01* X56171957Y-43924907D01* X56126402Y-43928894D01* X56119324Y-43929513D01* X56113923Y-43929749D01* X56105570Y-43929749D01* X56072654Y-43933596D01* X55995325Y-43940361D01* X55988257Y-43941821D01* X55988247Y-43941777D01* X55980657Y-43943459D01* X55980668Y-43943503D01* X55973644Y-43945168D01* X55973638Y-43945169D01* X55973638Y-43945170D01* X55949165Y-43954076D01* X55900684Y-43971722D01* X55827008Y-43996136D01* X55820471Y-43999185D01* X55820451Y-43999143D01* X55813447Y-44002534D01* X55813468Y-44002575D01* X55807020Y-44005813D01* X55742145Y-44048482D01* X55676103Y-44089216D01* X55670434Y-44093699D01* X55670404Y-44093662D01* X55664378Y-44098571D01* X55664408Y-44098606D01* X55658883Y-44103242D01* X55605587Y-44159731D01* X54119122Y-45646195D01* X54105495Y-45657973D01* X54085941Y-45672531D01* X54051977Y-45713006D01* X54048330Y-45716987D01* X54042418Y-45722900D01* X54021863Y-45748896D01* X53971967Y-45808360D01* X53968001Y-45814391D01* X53967963Y-45814366D01* X53963782Y-45820928D01* X53963821Y-45820952D01* X53960032Y-45827094D01* X53927220Y-45897459D01* X53892391Y-45966810D01* X53889923Y-45973593D01* X53889878Y-45973576D01* X53887322Y-45980932D01* X53887366Y-45980947D01* X53885096Y-45987795D01* X53877920Y-46022551D01* X53869392Y-46063850D01* X53857853Y-46112537D01* X53851498Y-46139351D01* X53850661Y-46146519D01* X53850613Y-46146513D01* X53849823Y-46154244D01* X53849870Y-46154249D01* X53849240Y-46161438D01* X53851500Y-46239079D01* X53851500Y-95185706D01* X53850191Y-95203676D01* X53846658Y-95227791D01* X53851264Y-95280420D01* X53851500Y-95285827D01* X53851500Y-95294178D01* X53855347Y-95327096D01* X53862112Y-95404427D01* X53863572Y-95411494D01* X53863526Y-95411503D01* X53865209Y-95419094D01* X53865254Y-95419084D01* X53866919Y-95426110D01* X53870320Y-95435453D01* X53893473Y-95499065D01* X53917571Y-95571788D01* X53917886Y-95572737D01* X53920940Y-95579286D01* X53920896Y-95579306D01* X53924284Y-95586304D01* X53924327Y-95586283D01* X53927568Y-95592737D01* X53955591Y-95635344D01* X53970233Y-95657605D01* X54010970Y-95723651D01* X54010972Y-95723653D01* X54015451Y-95729318D01* X54015413Y-95729347D01* X54020320Y-95735372D01* X54020357Y-95735342D01* X54025002Y-95740878D01* X54081482Y-95794163D01* X55298196Y-97010877D01* X55309977Y-97024509D01* X55324531Y-97044058D01* X55354807Y-97069463D01* X55365005Y-97078020D01* X55368995Y-97081676D01* X55374899Y-97087580D01* X55395456Y-97103834D01* X55400897Y-97108137D01* X55409888Y-97115681D01* X55460360Y-97158032D01* X55460362Y-97158033D01* X55466396Y-97162002D01* X55466369Y-97162042D01* X55472921Y-97166216D01* X55472947Y-97166175D01* X55479099Y-97169970D01* X55549447Y-97202773D01* X55618812Y-97237609D01* X55618813Y-97237609D01* X55618815Y-97237610D01* X55625594Y-97240077D01* X55625577Y-97240122D01* X55632925Y-97242676D01* X55632941Y-97242631D01* X55639790Y-97244901D01* X55639793Y-97244901D01* X55639794Y-97244902D01* X55715818Y-97260599D01* X55791344Y-97278500D01* X55791345Y-97278500D01* X55791349Y-97278501D01* X55798517Y-97279339D01* X55798511Y-97279386D01* X55806242Y-97280176D01* X55806247Y-97280129D01* X55813437Y-97280758D01* X55813441Y-97280757D01* X55813442Y-97280758D01* X55891045Y-97278500D01* X62001512Y-97278500D01* X62068551Y-97298185D01* X62089193Y-97314819D01* X62705181Y-97930807D01* X62738666Y-97992130D01* X62741500Y-98018488D01* X62741500Y-105409405D01* X62721815Y-105476444D01* X62705181Y-105497086D01* X61679658Y-106522609D01* X61618335Y-106556094D01* X61591977Y-106558928D01* X47790342Y-106558928D01* X47723303Y-106539243D01* X47702661Y-106522609D01* X46570819Y-105390767D01* X46537334Y-105329444D01* X46534500Y-105303086D01* X46534500Y-104284001D01* X53840891Y-104284001D01* X53861300Y-104569362D01* X53922109Y-104848895D01* X54022091Y-105116958D01* X54159191Y-105368038D01* X54159196Y-105368046D01* X54265882Y-105510561D01* X54265883Y-105510562D01* X54875438Y-104901006D01* X54924348Y-104979999D01* X55067931Y-105137501D01* X55226388Y-105257163D01* X54619436Y-105864115D01* X54761960Y-105970807D01* X54761961Y-105970808D01* X55013042Y-106107908D01* X55013041Y-106107908D01* X55281104Y-106207890D01* X55560637Y-106268699D01* X55845999Y-106289109D01* X55846001Y-106289109D01* X56131362Y-106268699D01* X56410895Y-106207890D01* X56678958Y-106107908D01* X56930047Y-105970803D01* X57072561Y-105864116D01* X57072562Y-105864115D01* X56465611Y-105257163D01* X56624069Y-105137501D01* X56767652Y-104979999D01* X56816560Y-104901007D01* X57426115Y-105510562D01* X57426116Y-105510561D01* X57532803Y-105368047D01* X57669908Y-105116958D01* X57769890Y-104848895D01* X57830699Y-104569362D01* X57851109Y-104284001D01* X57851109Y-104283998D01* X57830699Y-103998637D01* X57769890Y-103719104D01* X57669908Y-103451041D01* X57532808Y-103199961D01* X57532807Y-103199960D01* X57426115Y-103057436D01* X56816560Y-103666991D01* X56767652Y-103588001D01* X56624069Y-103430499D01* X56465610Y-103310835D01* X57072562Y-102703883D01* X57072561Y-102703882D01* X56930046Y-102597196D01* X56930038Y-102597191D01* X56678957Y-102460091D01* X56678958Y-102460091D01* X56410895Y-102360109D01* X56131362Y-102299300D01* X55846001Y-102278891D01* X55845999Y-102278891D01* X55560637Y-102299300D01* X55281104Y-102360109D01* X55013041Y-102460091D01* X54761961Y-102597191D01* X54761953Y-102597196D01* X54619437Y-102703882D01* X54619436Y-102703883D01* X55226389Y-103310835D01* X55067931Y-103430499D01* X54924348Y-103588001D01* X54875439Y-103666992D01* X54265883Y-103057436D01* X54265882Y-103057437D01* X54159196Y-103199953D01* X54159191Y-103199961D01* X54022091Y-103451041D01* X53922109Y-103719104D01* X53861300Y-103998637D01* X53840891Y-104283998D01* X53840891Y-104284001D01* X46534500Y-104284001D01* X46534500Y-102953574D01* X46554185Y-102886535D01* X46606989Y-102840780D01* X46645245Y-102830285D01* X46685201Y-102825989D01* X46685204Y-102825988D01* X46701269Y-102819996D01* X46822204Y-102774889D01* X46939261Y-102687261D01* X47026889Y-102570204D01* X47040586Y-102533480D01* X47066717Y-102463424D01* X47108588Y-102407490D01* X47174053Y-102383074D01* X47242326Y-102397926D01* X47270579Y-102419077D01* X47431700Y-102580198D01* X47619251Y-102711523D01* X47719902Y-102758457D01* X47826750Y-102808281D01* X47826752Y-102808281D01* X47826757Y-102808284D01* X48047913Y-102867543D01* X48210832Y-102881796D01* X48275998Y-102887498D01* X48276000Y-102887498D01* X48276002Y-102887498D01* X48333021Y-102882509D01* X48504087Y-102867543D01* X48725243Y-102808284D01* X48932749Y-102711523D01* X49120300Y-102580198D01* X49188319Y-102512179D01* X49249642Y-102478694D01* X49319334Y-102483678D01* X49363681Y-102512179D01* X49431700Y-102580198D01* X49619251Y-102711523D01* X49719902Y-102758457D01* X49826750Y-102808281D01* X49826752Y-102808281D01* X49826757Y-102808284D01* X50047913Y-102867543D01* X50210832Y-102881796D01* X50275998Y-102887498D01* X50276000Y-102887498D01* X50276002Y-102887498D01* X50333021Y-102882509D01* X50504087Y-102867543D01* X50725243Y-102808284D01* X50932749Y-102711523D01* X51120300Y-102580198D01* X51282198Y-102418300D01* X51413523Y-102230749D01* X51418307Y-102220487D01* X51464476Y-102168051D01* X51531669Y-102148897D01* X51598551Y-102169111D01* X51643072Y-102220490D01* X51645866Y-102226483D01* X51696973Y-102299471D01* X51696974Y-102299472D01* X52313064Y-101683381D01* X52339481Y-101773351D01* X52413327Y-101888258D01* X52516555Y-101977705D01* X52640801Y-102034446D01* X52665548Y-102038004D01* X52050526Y-102653025D01* X52050526Y-102653026D01* X52123512Y-102704131D01* X52123516Y-102704133D01* X52329673Y-102800265D01* X52329682Y-102800269D01* X52549389Y-102859139D01* X52549400Y-102859141D01* X52775998Y-102878966D01* X52776002Y-102878966D01* X53002599Y-102859141D01* X53002610Y-102859139D01* X53222317Y-102800269D01* X53222331Y-102800264D01* X53428478Y-102704136D01* X53501472Y-102653025D01* X52886451Y-102038004D01* X52911199Y-102034446D01* X53035445Y-101977705D01* X53138673Y-101888258D01* X53212519Y-101773351D01* X53238935Y-101683382D01* X53855025Y-102299472D01* X53906136Y-102226478D01* X54002264Y-102020331D01* X54002269Y-102020317D01* X54061139Y-101800610D01* X54061141Y-101800599D01* X54080966Y-101574002D01* X54080966Y-101573997D01* X54061141Y-101347400D01* X54061139Y-101347389D01* X54031988Y-101238593D01* X54033651Y-101168743D01* X54072814Y-101110881D01* X54137042Y-101083377D01* X54151763Y-101082500D01* X57540457Y-101082500D01* X57607496Y-101102185D01* X57628138Y-101118819D01* X57879181Y-101369862D01* X57912666Y-101431185D01* X57915500Y-101457543D01* X57915500Y-103059706D01* X57914191Y-103077676D01* X57910658Y-103101791D01* X57913477Y-103134000D01* X57914879Y-103150027D01* X57915264Y-103154420D01* X57915500Y-103159827D01* X57915500Y-103168180D01* X57918064Y-103190123D01* X57919347Y-103201096D01* X57926112Y-103278427D01* X57927572Y-103285494D01* X57927526Y-103285503D01* X57929209Y-103293094D01* X57929254Y-103293084D01* X57930919Y-103300110D01* X57952238Y-103358683D01* X57957473Y-103373065D01* X57979446Y-103439376D01* X57981886Y-103446737D01* X57984940Y-103453286D01* X57984896Y-103453306D01* X57988284Y-103460304D01* X57988327Y-103460283D01* X57991568Y-103466737D01* X58034232Y-103531604D01* X58059541Y-103572636D01* X58074970Y-103597651D01* X58074972Y-103597653D01* X58079451Y-103603318D01* X58079413Y-103603347D01* X58084320Y-103609372D01* X58084357Y-103609342D01* X58089002Y-103614878D01* X58145482Y-103668163D01* X59254204Y-104776885D01* X59271453Y-104798493D01* X59274137Y-104802755D01* X59313374Y-104848895D01* X59326799Y-104864682D01* X59352444Y-104914187D01* X59358853Y-104939162D01* X59387395Y-105068330D01* X59390814Y-105082010D01* X59394765Y-105096152D01* X59398900Y-105109537D01* X59436346Y-105219955D01* X59437733Y-105224647D01* X59441746Y-105240493D01* X59447567Y-105253763D01* X59449501Y-105258747D01* X59458113Y-105284139D01* X59461308Y-105292643D01* X59491041Y-105357640D01* X59491044Y-105357645D01* X59494402Y-105363307D01* X59493797Y-105363665D01* X59501811Y-105377429D01* X59532182Y-105446668D01* X59655318Y-105635141D01* X59655326Y-105635152D01* X59773851Y-105763902D01* X59807802Y-105800782D01* X59985466Y-105939065D01* X59985467Y-105939065D01* X59985469Y-105939067D01* X60099665Y-106000866D01* X60183468Y-106046218D01* X60396407Y-106119320D01* X60618473Y-106156376D01* X60843611Y-106156376D01* X61065677Y-106119320D01* X61278616Y-106046218D01* X61476618Y-105939065D01* X61654282Y-105800782D01* X61796384Y-105646420D01* X61806757Y-105635152D01* X61806758Y-105635150D01* X61806764Y-105635144D01* X61929902Y-105446667D01* X62020338Y-105240492D01* X62075606Y-105022244D01* X62079107Y-104979999D01* X62094198Y-104797881D01* X62094198Y-104797870D01* X62075607Y-104573516D01* X62075605Y-104573504D01* X62020338Y-104355261D01* X61989080Y-104284000D01* X61929902Y-104149085D01* X61806764Y-103960608D01* X61806761Y-103960605D01* X61806757Y-103960599D01* X61654285Y-103794973D01* X61654280Y-103794968D01* X61476619Y-103656688D01* X61476614Y-103656684D01* X61278622Y-103549537D01* X61278619Y-103549535D01* X61278616Y-103549534D01* X61278613Y-103549533D01* X61278611Y-103549532D01* X61065679Y-103476432D01* X60843611Y-103439376D01* X60618473Y-103439376D01* X60396404Y-103476432D01* X60248301Y-103527276D01* X60178502Y-103530426D01* X60120357Y-103497676D01* X59468819Y-102846138D01* X59435334Y-102784815D01* X59432500Y-102758457D01* X59432500Y-101156293D01* X59433809Y-101138323D01* X59438387Y-101107067D01* X59439824Y-101107277D01* X59458947Y-101048536D01* X59513062Y-101004338D01* X59582480Y-100996413D01* X59626552Y-101015424D01* X59627050Y-101014513D01* X59634835Y-101018764D01* X59752382Y-101062607D01* X59771841Y-101069865D01* X59799092Y-101072794D01* X59832387Y-101076375D01* X59832404Y-101076376D01* X61629680Y-101076376D01* X61629696Y-101076375D01* X61656734Y-101073467D01* X61690243Y-101069865D01* X61827246Y-101018765D01* X61944303Y-100931137D01* X62031931Y-100814080D01* X62083031Y-100677077D01* X62089345Y-100618349D01* X62089541Y-100616530D01* X62089542Y-100616513D01* X62089542Y-98819238D01* X62089541Y-98819221D01* X62086199Y-98788146D01* X62083031Y-98758675D01* X62078460Y-98746421D01* X62052183Y-98675970D01* X62031931Y-98621672D01* X61944303Y-98504615D01* X61827246Y-98416987D01* X61690245Y-98365887D01* X61629696Y-98359376D01* X61629680Y-98359376D01* X59832404Y-98359376D01* X59832387Y-98359376D01* X59771839Y-98365887D01* X59771837Y-98365887D01* X59634837Y-98416987D01* X59517781Y-98504615D01* X59430153Y-98621671D01* X59379053Y-98758671D01* X59379053Y-98758673D01* X59372542Y-98819221D01* X59372542Y-98850936D01* X59369014Y-98880303D01* X59360476Y-98915328D01* X59325474Y-98975799D01* X59263336Y-99007746D01* X59193791Y-99001028D01* X59152323Y-98973642D01* X59001804Y-98823123D01* X58990022Y-98809490D01* X58975472Y-98789946D01* X58975471Y-98789945D01* X58975469Y-98789942D01* X58962733Y-98779255D01* X58934987Y-98755972D01* X58930998Y-98752317D01* X58925102Y-98746421D01* X58925101Y-98746420D01* X58899103Y-98725863D01* X58839640Y-98675968D01* X58839635Y-98675965D01* X58833605Y-98671999D01* X58833630Y-98671959D01* X58827069Y-98667779D01* X58827045Y-98667820D01* X58820904Y-98664031D01* X58750540Y-98631220D01* X58681185Y-98596389D01* X58674401Y-98593920D01* X58674416Y-98593876D01* X58667071Y-98591322D01* X58667057Y-98591367D01* X58660205Y-98589096D01* X58622177Y-98581244D01* X58584149Y-98573392D01* X58508656Y-98555500D01* X58508654Y-98555500D01* X58508646Y-98555498D01* X58501482Y-98554661D01* X58501487Y-98554612D01* X58493757Y-98553822D01* X58493753Y-98553870D01* X58486562Y-98553240D01* X58408920Y-98555500D01* X54975543Y-98555500D01* X54908504Y-98535815D01* X54887862Y-98519181D01* X52414962Y-96046281D01* X52381477Y-95984958D01* X52386461Y-95915266D01* X52428333Y-95859333D01* X52459303Y-95842420D01* X52521727Y-95819138D01* X52638784Y-95731510D01* X52726412Y-95614453D01* X52777512Y-95477450D01* X52782027Y-95435453D01* X52784022Y-95416903D01* X52784023Y-95416886D01* X52784023Y-95341749D01* X52784057Y-95340577D01* X52784056Y-95340574D01* X52784082Y-95339682D01* X52784023Y-95337942D01* X52784023Y-92776996D01* X52784235Y-92771874D01* X52788679Y-92718252D01* X52788679Y-92718244D01* X52784235Y-92664622D01* X52784023Y-92659499D01* X52784023Y-91819611D01* X52784022Y-91819594D01* X52779959Y-91781811D01* X52777512Y-91759048D01* X52775092Y-91752560D01* X52744076Y-91669403D01* X52726412Y-91622045D01* X52638784Y-91504988D01* X52521727Y-91417360D01* X52384726Y-91366260D01* X52324177Y-91359749D01* X52324161Y-91359749D01* X50526885Y-91359749D01* X50526868Y-91359749D01* X50466320Y-91366260D01* X50466318Y-91366260D01* X50329318Y-91417360D01* X50212262Y-91504988D01* X50124634Y-91622044D01* X50073534Y-91759044D01* X50073534Y-91759046D01* X50067023Y-91819594D01* X50067023Y-92659499D01* X50066811Y-92664622D01* X50062367Y-92718244D01* X50062367Y-92718252D01* X50066811Y-92771874D01* X50067023Y-92776996D01* X50067023Y-95416903D01* X50073534Y-95477451D01* X50073534Y-95477453D01* X50111733Y-95579864D01* X50124634Y-95614453D01* X50212262Y-95731510D01* X50293379Y-95792234D01* X50335250Y-95848167D01* X50340234Y-95917858D01* X50306749Y-95979181D01* X50245426Y-96012666D01* X50219068Y-96015500D01* X48759362Y-96015500D01* X48692323Y-95995815D01* X48671681Y-95979181D01* X47844216Y-95151716D01* X47810731Y-95090393D01* X47808032Y-95069829D01* X47797097Y-94835768D01* X47775016Y-94327345D01* X47752924Y-93782721D01* X47730821Y-93201930D01* X47708931Y-92591141D01* X47708178Y-92578643D01* X47707553Y-92571267D01* X47705663Y-92559761D01* X47704023Y-92539661D01* X47704023Y-91819611D01* X47704022Y-91819594D01* X47699959Y-91781811D01* X47697512Y-91759048D01* X47695092Y-91752560D01* X47664076Y-91669403D01* X47646412Y-91622045D01* X47558784Y-91504988D01* X47441727Y-91417360D01* X47304726Y-91366260D01* X47244177Y-91359749D01* X47244161Y-91359749D01* X45446885Y-91359749D01* X45446868Y-91359749D01* X45386320Y-91366260D01* X45386318Y-91366260D01* X45249318Y-91417360D01* X45132262Y-91504988D01* X45044634Y-91622044D01* X44993534Y-91759044D01* X44993534Y-91759046D01* X44987023Y-91819594D01* X44987023Y-92659499D01* X44986811Y-92664622D01* X44982367Y-92718244D01* X44982367Y-92718252D01* X44986811Y-92771874D01* X44987023Y-92776996D01* X44987023Y-94257604D01* X44967338Y-94324643D01* X44914534Y-94370398D01* X44845376Y-94380342D01* X44819690Y-94373786D01* X44804069Y-94367960D01* X44743521Y-94361449D01* X44743505Y-94361449D01* X44096215Y-94361449D01* X44096198Y-94361449D01* X44035650Y-94367960D01* X44035648Y-94367960D01* X43898648Y-94419060D01* X43781592Y-94506688D01* X43693964Y-94623744D01* X43642864Y-94760744D01* X43642864Y-94760746D01* X43636353Y-94821294D01* X43636353Y-95737500D01* X43616668Y-95804539D01* X43563864Y-95850294D01* X43512353Y-95861500D01* X43427443Y-95861500D01* X43360404Y-95841815D01* X43314649Y-95789011D01* X43303443Y-95737500D01* X43303443Y-94821311D01* X43303442Y-94821294D01* X43300100Y-94790219D01* X43296932Y-94760748D01* X43287447Y-94735319D01* X43268241Y-94683825D01* X43245832Y-94623745D01* X43158204Y-94506688D01* X43041147Y-94419060D01* X43018693Y-94410685D01* X42941361Y-94381841D01* X42885428Y-94339970D01* X42861012Y-94274505D01* X42875863Y-94206234D01* X42880384Y-94198009D01* X42891059Y-94181760D01* X42904304Y-94164686D01* X42923852Y-94119509D01* X42926409Y-94114290D01* X42950124Y-94071155D01* X42955495Y-94050231D01* X42961796Y-94031827D01* X42970380Y-94011994D01* X42975733Y-93978190D01* X42978078Y-93963387D01* X42979263Y-93957662D01* X42991500Y-93910006D01* X42991500Y-93888398D01* X42993027Y-93868998D01* X42996406Y-93847666D01* X42991775Y-93798672D01* X42991500Y-93792835D01* X42991500Y-92187577D01* X42993282Y-92171434D01* X42993055Y-92171413D01* X42993789Y-92163650D01* X42992323Y-92117014D01* X42991500Y-92090809D01* X42991500Y-92059751D01* X42990565Y-92052353D01* X42990108Y-92046544D01* X42988563Y-91997353D01* X42988562Y-91997351D01* X42986149Y-91989046D01* X42982534Y-91976605D01* X42978589Y-91957555D01* X42975882Y-91936119D01* X42957765Y-91890362D01* X42955872Y-91884832D01* X42942144Y-91837581D01* X42931151Y-91818994D01* X42922589Y-91801518D01* X42920411Y-91796017D01* X42914635Y-91781427D01* X42885699Y-91741602D01* X42882504Y-91736736D01* X42857453Y-91694377D01* X42857450Y-91694374D01* X42857448Y-91694371D01* X42842178Y-91679101D01* X42829541Y-91664305D01* X42816843Y-91646827D01* X42816840Y-91646824D01* X42778914Y-91615450D01* X42774592Y-91611516D01* X41944537Y-90781460D01* X41934382Y-90768784D01* X41934206Y-90768930D01* X41929233Y-90762919D01* X41876115Y-90713038D01* X41854154Y-90691076D01* X41848266Y-90686509D01* X41843824Y-90682715D01* X41807954Y-90649031D01* X41807951Y-90649028D01* X41802860Y-90646229D01* X41789017Y-90638618D01* X41772761Y-90627940D01* X41755684Y-90614694D01* X41710515Y-90595148D01* X41705268Y-90592577D01* X41686171Y-90582079D01* X41662155Y-90568876D01* X41662152Y-90568875D01* X41641227Y-90563501D01* X41622833Y-90557204D01* X41618560Y-90555355D01* X41602995Y-90548620D01* X41602992Y-90548619D01* X41602991Y-90548619D01* X41554388Y-90540921D01* X41548666Y-90539736D01* X41527374Y-90534269D01* X41467336Y-90498531D01* X41436380Y-90437249D01* X41431208Y-90409954D01* X41393003Y-90177565D01* X41356027Y-89922857D01* X41356025Y-89922852D01* X41356025Y-89922846D01* X41356120Y-89923358D01* X41354023Y-89900648D01* X41354023Y-89509611D01* X41354022Y-89509594D01* X41350680Y-89478519D01* X41347512Y-89449048D01* X41296412Y-89312045D01* X41208784Y-89194988D01* X41091727Y-89107360D01* X40954726Y-89056260D01* X40894177Y-89049749D01* X40894161Y-89049749D01* X37296885Y-89049749D01* X37296868Y-89049749D01* X37236320Y-89056260D01* X37236318Y-89056260D01* X37099318Y-89107360D01* X36982262Y-89194988D01* X36894634Y-89312044D01* X36843534Y-89449044D01* X36843534Y-89449046D01* X36837023Y-89509594D01* X36837023Y-91306903D01* X36843534Y-91367451D01* X36843534Y-91367453D01* X36894634Y-91504453D01* X36969108Y-91603938D01* X36993525Y-91669403D01* X36978673Y-91737676D01* X36969109Y-91752557D01* X36964251Y-91759048D01* X36894634Y-91852044D01* X36843534Y-91989044D01* X36843534Y-91989046D01* X36837023Y-92049594D01* X36837023Y-93846903D01* X36843534Y-93907451D01* X36843534Y-93907453D01* X36882527Y-94011993D01* X36894634Y-94044453D01* X36982262Y-94161510D01* X37099319Y-94249138D01* X37236322Y-94300238D01* X37263573Y-94303167D01* X37296868Y-94306748D01* X37296885Y-94306749D01* X37955978Y-94306749D01* X38023017Y-94326434D01* X38068772Y-94379238D01* X38078716Y-94448396D01* X38064635Y-94490493D01* X38060616Y-94497805D01* X38049942Y-94514054D01* X38036695Y-94531133D01* X38017150Y-94576297D01* X38014580Y-94581543D01* X37990876Y-94624661D01* X37985502Y-94645589D01* X37979203Y-94663987D01* X37970619Y-94683825D01* X37962923Y-94732420D01* X37961738Y-94738143D01* X37949500Y-94785809D01* X37949500Y-94807413D01* X37947974Y-94826808D01* X37944594Y-94848151D01* X37949225Y-94897143D01* X37949500Y-94902981D01* X37949500Y-94944810D01* X37929815Y-95011849D01* X37877011Y-95057604D01* X37861704Y-95063407D01* X37831936Y-95072494D01* X37823795Y-95074391D01* X37749447Y-95086505D01* X37740741Y-95087300D01* X37645488Y-95089260D01* X37618359Y-95092285D01* X37601920Y-95094118D01* X37595052Y-95094500D01* X37345461Y-95094500D01* X37345446Y-95094501D01* X37241572Y-95105113D01* X37073264Y-95160884D01* X37073259Y-95160886D01* X36922346Y-95253971D01* X36796971Y-95379346D01* X36703886Y-95530259D01* X36703884Y-95530264D01* X36648113Y-95698572D01* X36637500Y-95802447D01* X36637500Y-96428537D01* X36637501Y-96428553D01* X36648113Y-96532427D01* X36703884Y-96700735D01* X36703886Y-96700740D01* X36796971Y-96851653D01* X36885637Y-96940319D01* X36919122Y-97001642D01* X36914138Y-97071334D01* X36885637Y-97115681D01* X36796971Y-97204346D01* X36703886Y-97355259D01* X36703884Y-97355264D01* X36648113Y-97523572D01* X36637500Y-97627447D01* X36637500Y-98253537D01* X33798903Y-98253537D01* X33798903Y-86226903D01* X36837023Y-86226903D01* X36843534Y-86287451D01* X36843534Y-86287453D01* X36894634Y-86424453D01* X36982262Y-86541510D01* X37099319Y-86629138D01* X37236322Y-86680238D01* X37263573Y-86683167D01* X37296868Y-86686748D01* X37296885Y-86686749D01* X40894161Y-86686749D01* X40894177Y-86686748D01* X40921215Y-86683840D01* X40954724Y-86680238D01* X41091727Y-86629138D01* X41208784Y-86541510D01* X41296412Y-86424453D01* X41347512Y-86287450D01* X41351114Y-86253941D01* X41354022Y-86226903D01* X41354023Y-86226886D01* X41354023Y-85386996D01* X41354235Y-85381874D01* X41355639Y-85364941D01* X41358679Y-85328249D01* X41358626Y-85327612D01* X41354235Y-85274622D01* X41354023Y-85269499D01* X41354023Y-84429611D01* X41354022Y-84429594D01* X41350616Y-84397917D01* X41347512Y-84369048D01* X41296412Y-84232045D01* X41296411Y-84232042D01* X41296410Y-84232041D01* X41221938Y-84132560D01* X41197520Y-84067096D01* X41212371Y-83998823D01* X41221938Y-83983938D01* X41296410Y-83884456D01* X41296411Y-83884455D01* X41347511Y-83747453D01* X41347511Y-83747452D01* X41347512Y-83747450D01* X41351114Y-83713941D01* X41354022Y-83686903D01* X41354023Y-83686886D01* X41354023Y-82846996D01* X41354235Y-82841874D01* X41355639Y-82824941D01* X41358679Y-82788249D01* X41358626Y-82787615D01* X41354235Y-82734622D01* X41354023Y-82729499D01* X41354023Y-81889611D01* X41354022Y-81889594D01* X41350680Y-81858519D01* X41347512Y-81829048D01* X41341140Y-81811965D01* X41296411Y-81692042D01* X41296410Y-81692041D01* X41221938Y-81592560D01* X41197520Y-81527096D01* X41212371Y-81458823D01* X41221938Y-81443938D01* X41296410Y-81344456D01* X41296411Y-81344455D01* X41347511Y-81207453D01* X41347511Y-81207452D01* X41347512Y-81207450D01* X41351114Y-81173941D01* X41354022Y-81146903D01* X41354023Y-81146886D01* X41354023Y-80306996D01* X41354235Y-80301874D01* X41358679Y-80248252D01* X41358679Y-80248244D01* X41354235Y-80194622D01* X41354023Y-80189499D01* X41354023Y-79349611D01* X41354022Y-79349594D01* X41350680Y-79318519D01* X41347512Y-79289048D01* X41296412Y-79152045D01* X41296411Y-79152042D01* X41296410Y-79152041D01* X41221938Y-79052560D01* X41197520Y-78987096D01* X41212371Y-78918823D01* X41221938Y-78903938D01* X41296410Y-78804456D01* X41296411Y-78804455D01* X41347511Y-78667453D01* X41347511Y-78667452D01* X41347512Y-78667450D01* X41351114Y-78633941D01* X41354022Y-78606903D01* X41354023Y-78606886D01* X41354023Y-77766996D01* X41354235Y-77761874D01* X41358679Y-77708252D01* X41358679Y-77708244D01* X41354235Y-77654622D01* X41354023Y-77649499D01* X41354023Y-76809611D01* X41354022Y-76809594D01* X41350680Y-76778519D01* X41347512Y-76749048D01* X41296412Y-76612045D01* X41208784Y-76494988D01* X41091727Y-76407360D01* X40954726Y-76356260D01* X40894177Y-76349749D01* X40894161Y-76349749D01* X37296885Y-76349749D01* X37296868Y-76349749D01* X37236320Y-76356260D01* X37236318Y-76356260D01* X37099318Y-76407360D01* X36982262Y-76494988D01* X36894634Y-76612044D01* X36843534Y-76749044D01* X36843534Y-76749046D01* X36837023Y-76809594D01* X36837023Y-78606903D01* X36843534Y-78667451D01* X36843534Y-78667453D01* X36894634Y-78804453D01* X36969108Y-78903938D01* X36993525Y-78969403D01* X36978673Y-79037676D01* X36969108Y-79052560D01* X36894634Y-79152044D01* X36843534Y-79289044D01* X36843534Y-79289046D01* X36837023Y-79349594D01* X36837023Y-81146903D01* X36843534Y-81207451D01* X36843534Y-81207453D01* X36894634Y-81344453D01* X36969108Y-81443938D01* X36993525Y-81509403D01* X36978673Y-81577676D01* X36969108Y-81592560D01* X36894634Y-81692044D01* X36843534Y-81829044D01* X36843534Y-81829046D01* X36837023Y-81889594D01* X36837023Y-83686903D01* X36843534Y-83747451D01* X36843534Y-83747453D01* X36894634Y-83884453D01* X36969108Y-83983938D01* X36993525Y-84049403D01* X36978673Y-84117676D01* X36969108Y-84132560D01* X36894634Y-84232044D01* X36843534Y-84369044D01* X36843534Y-84369046D01* X36837023Y-84429594D01* X36837023Y-86226903D01* X33798903Y-86226903D01* X33798903Y-73526903D01* X36837023Y-73526903D01* X36843534Y-73587451D01* X36843534Y-73587453D01* X36884208Y-73696500D01* X36894634Y-73724453D01* X36982262Y-73841510D01* X37099319Y-73929138D01* X37236322Y-73980238D01* X37263573Y-73983167D01* X37296868Y-73986748D01* X37296885Y-73986749D01* X40894161Y-73986749D01* X40894177Y-73986748D01* X40921215Y-73983840D01* X40954724Y-73980238D01* X41091727Y-73929138D01* X41208784Y-73841510D01* X41296412Y-73724453D01* X41347512Y-73587450D01* X41351114Y-73553941D01* X41354022Y-73526903D01* X41354023Y-73526886D01* X41354023Y-72686996D01* X41354235Y-72681874D01* X41358679Y-72628252D01* X41358679Y-72628244D01* X41354235Y-72574622D01* X41354023Y-72569499D01* X41354023Y-71729611D01* X41354022Y-71729594D01* X41348626Y-71679411D01* X41347512Y-71669048D01* X41330740Y-71624082D01* X41296411Y-71532042D01* X41296410Y-71532041D01* X41221938Y-71432560D01* X41197520Y-71367096D01* X41212371Y-71298823D01* X41221938Y-71283938D01* X41296410Y-71184456D01* X41296411Y-71184455D01* X41347511Y-71047453D01* X41347511Y-71047452D01* X41347512Y-71047450D01* X41351114Y-71013941D01* X41354022Y-70986903D01* X41354023Y-70986886D01* X41354023Y-70146996D01* X41354235Y-70141874D01* X41358679Y-70088252D01* X41358679Y-70088244D01* X41354235Y-70034622D01* X41354023Y-70029499D01* X41354023Y-69189611D01* X41354022Y-69189594D01* X41350680Y-69158519D01* X41347512Y-69129048D01* X41296412Y-68992045D01* X41296411Y-68992042D01* X41296410Y-68992041D01* X41221938Y-68892560D01* X41197520Y-68827096D01* X41212371Y-68758823D01* X41221938Y-68743938D01* X41296410Y-68644456D01* X41296411Y-68644455D01* X41347511Y-68507453D01* X41347511Y-68507452D01* X41347512Y-68507450D01* X41351114Y-68473941D01* X41354022Y-68446903D01* X41354023Y-68446886D01* X41354023Y-67606996D01* X41354235Y-67601874D01* X41358679Y-67548252D01* X41358679Y-67548244D01* X41354235Y-67494622D01* X41354023Y-67489499D01* X41354023Y-66649611D01* X41354022Y-66649594D01* X41350680Y-66618519D01* X41347512Y-66589048D01* X41296412Y-66452045D01* X41296411Y-66452042D01* X41296410Y-66452041D01* X41221938Y-66352560D01* X41197520Y-66287096D01* X41212371Y-66218823D01* X41221938Y-66203938D01* X41296410Y-66104456D01* X41296411Y-66104455D01* X41347511Y-65967453D01* X41347511Y-65967452D01* X41347512Y-65967450D01* X41351114Y-65933941D01* X41354022Y-65906903D01* X41354023Y-65906886D01* X41354023Y-65066996D01* X41354235Y-65061874D01* X41358679Y-65008252D01* X41358679Y-65008244D01* X41354235Y-64954622D01* X41354023Y-64949499D01* X41354023Y-64109611D01* X41354022Y-64109594D01* X41350680Y-64078519D01* X41347512Y-64049048D01* X41296412Y-63912045D01* X41208784Y-63794988D01* X41091727Y-63707360D01* X40954726Y-63656260D01* X40894177Y-63649749D01* X40894161Y-63649749D01* X37296885Y-63649749D01* X37296868Y-63649749D01* X37236320Y-63656260D01* X37236318Y-63656260D01* X37099318Y-63707360D01* X36982262Y-63794988D01* X36894634Y-63912044D01* X36843534Y-64049044D01* X36843534Y-64049046D01* X36837023Y-64109594D01* X36837023Y-65906903D01* X36843534Y-65967451D01* X36843534Y-65967453D01* X36894634Y-66104453D01* X36969108Y-66203938D01* X36993525Y-66269403D01* X36978673Y-66337676D01* X36969108Y-66352560D01* X36894634Y-66452044D01* X36843534Y-66589044D01* X36843534Y-66589046D01* X36837023Y-66649594D01* X36837023Y-68446903D01* X36843534Y-68507451D01* X36843534Y-68507453D01* X36894634Y-68644453D01* X36969108Y-68743938D01* X36993525Y-68809403D01* X36978673Y-68877676D01* X36969108Y-68892560D01* X36894634Y-68992044D01* X36843534Y-69129044D01* X36843534Y-69129046D01* X36837023Y-69189594D01* X36837023Y-70986903D01* X36843534Y-71047451D01* X36843534Y-71047453D01* X36894634Y-71184453D01* X36969108Y-71283938D01* X36993525Y-71349403D01* X36978673Y-71417676D01* X36969108Y-71432560D01* X36894634Y-71532044D01* X36843534Y-71669044D01* X36843534Y-71669046D01* X36837023Y-71729594D01* X36837023Y-73526903D01* X33798903Y-73526903D01* X33798903Y-60826903D01* X36837023Y-60826903D01* X36843534Y-60887451D01* X36843534Y-60887453D01* X36894634Y-61024453D01* X36982262Y-61141510D01* X37099319Y-61229138D01* X37236322Y-61280238D01* X37263573Y-61283167D01* X37296868Y-61286748D01* X37296885Y-61286749D01* X40894161Y-61286749D01* X40894177Y-61286748D01* X40921215Y-61283840D01* X40954724Y-61280238D01* X41091727Y-61229138D01* X41208784Y-61141510D01* X41296412Y-61024453D01* X41347512Y-60887450D01* X41351114Y-60853941D01* X41354022Y-60826903D01* X41354023Y-60826886D01* X41354023Y-59986996D01* X41354235Y-59981874D01* X41358679Y-59928252D01* X41358679Y-59928244D01* X41354235Y-59874622D01* X41354023Y-59869499D01* X41354023Y-59029611D01* X41354022Y-59029594D01* X41350680Y-58998519D01* X41347512Y-58969048D01* X41296412Y-58832045D01* X41296411Y-58832042D01* X41296410Y-58832041D01* X41221938Y-58732560D01* X41197520Y-58667096D01* X41212371Y-58598823D01* X41221938Y-58583938D01* X41296410Y-58484456D01* X41296411Y-58484455D01* X41347511Y-58347453D01* X41347511Y-58347452D01* X41347512Y-58347450D01* X41351114Y-58313941D01* X41354022Y-58286903D01* X41354023Y-58286886D01* X41354023Y-57446996D01* X41354235Y-57441874D01* X41358679Y-57388252D01* X41358679Y-57388244D01* X41354235Y-57334622D01* X41354023Y-57329499D01* X41354023Y-56489611D01* X41354022Y-56489594D01* X41350680Y-56458519D01* X41347512Y-56429048D01* X41296412Y-56292045D01* X41296411Y-56292042D01* X41296410Y-56292041D01* X41221938Y-56192560D01* X41197520Y-56127096D01* X41212371Y-56058823D01* X41221936Y-56043940D01* X41296412Y-55944453D01* X41347512Y-55807450D01* X41351114Y-55773941D01* X41354022Y-55746903D01* X41354023Y-55746886D01* X41354023Y-54906996D01* X41354235Y-54901874D01* X41358679Y-54848252D01* X41358679Y-54848244D01* X41354235Y-54794622D01* X41354023Y-54789499D01* X41354023Y-53949611D01* X41354022Y-53949594D01* X41350680Y-53918519D01* X41347512Y-53889048D01* X41342790Y-53876389D01* X41296411Y-53752042D01* X41296410Y-53752041D01* X41221938Y-53652560D01* X41197520Y-53587096D01* X41212371Y-53518823D01* X41221938Y-53503938D01* X41296410Y-53404456D01* X41296411Y-53404455D01* X41347511Y-53267453D01* X41347511Y-53267452D01* X41347512Y-53267450D01* X41351114Y-53233941D01* X41354022Y-53206903D01* X41354023Y-53206886D01* X41354023Y-52366996D01* X41354235Y-52361874D01* X41358679Y-52308252D01* X41358679Y-52308244D01* X41354235Y-52254622D01* X41354023Y-52249499D01* X41354023Y-51409611D01* X41354022Y-51409594D01* X41350680Y-51378519D01* X41347512Y-51349048D01* X41296412Y-51212045D01* X41208784Y-51094988D01* X41091727Y-51007360D01* X40954726Y-50956260D01* X40894177Y-50949749D01* X40894161Y-50949749D01* X37296885Y-50949749D01* X37296868Y-50949749D01* X37236320Y-50956260D01* X37236318Y-50956260D01* X37099318Y-51007360D01* X36982262Y-51094988D01* X36894634Y-51212044D01* X36843534Y-51349044D01* X36843534Y-51349046D01* X36837023Y-51409594D01* X36837023Y-53206903D01* X36843534Y-53267451D01* X36843534Y-53267453D01* X36894634Y-53404453D01* X36969108Y-53503938D01* X36993525Y-53569403D01* X36978673Y-53637676D01* X36969108Y-53652560D01* X36894634Y-53752044D01* X36843534Y-53889044D01* X36843534Y-53889046D01* X36837023Y-53949594D01* X36837023Y-55746903D01* X36843534Y-55807451D01* X36843534Y-55807453D01* X36893139Y-55940444D01* X36894634Y-55944453D01* X36937072Y-56001144D01* X36969108Y-56043938D01* X36993525Y-56109403D01* X36978673Y-56177676D01* X36969109Y-56192557D01* X36969109Y-56192559D01* X36969108Y-56192560D01* X36894634Y-56292044D01* X36843534Y-56429044D01* X36843534Y-56429046D01* X36837023Y-56489594D01* X36837023Y-58286903D01* X36843534Y-58347451D01* X36843534Y-58347453D01* X36894634Y-58484453D01* X36969108Y-58583938D01* X36993525Y-58649403D01* X36978673Y-58717676D01* X36969108Y-58732560D01* X36894634Y-58832044D01* X36843534Y-58969044D01* X36843534Y-58969046D01* X36837023Y-59029594D01* X36837023Y-60826903D01* X33798903Y-60826903D01* X33798903Y-48126903D01* X36837023Y-48126903D01* X36843534Y-48187451D01* X36843534Y-48187453D01* X36888090Y-48306908D01* X36894634Y-48324453D01* X36982262Y-48441510D01* X37099319Y-48529138D01* X37236322Y-48580238D01* X37263573Y-48583167D01* X37296868Y-48586748D01* X37296885Y-48586749D01* X40894161Y-48586749D01* X40894177Y-48586748D01* X40921215Y-48583840D01* X40954724Y-48580238D01* X41091727Y-48529138D01* X41208784Y-48441510D01* X41296412Y-48324453D01* X41347512Y-48187450D01* X41351406Y-48151227D01* X41354022Y-48126903D01* X41354023Y-48126886D01* X41354023Y-47848247D01* X45197216Y-47848247D01* X45199195Y-47870888D01* X45199369Y-47879078D01* X45198207Y-47904937D01* X45198208Y-47904939D01* X45209214Y-47986195D01* X45209539Y-47989113D01* X45212055Y-48017864D01* X45216408Y-48067620D01* X45223147Y-48092772D01* X45224697Y-48100492D01* X45228616Y-48129422D01* X45228619Y-48129432D01* X45252936Y-48204272D01* X45253857Y-48207383D01* X45273400Y-48280315D01* X45273404Y-48280327D01* X45285798Y-48306908D01* X45288574Y-48313954D01* X45298618Y-48344865D01* X45298620Y-48344870D01* X45307628Y-48361609D01* X45334345Y-48411259D01* X45335939Y-48414436D01* X45366465Y-48479900D01* X45366466Y-48479902D01* X45366467Y-48479903D01* X45385191Y-48506645D01* X45388998Y-48512823D01* X45405966Y-48544354D01* X45405968Y-48544357D01* X45450920Y-48600724D01* X45453232Y-48603816D01* X45492774Y-48660287D01* X45492777Y-48660290D01* X45518182Y-48685695D01* X45522818Y-48690882D01* X45547209Y-48721467D01* X45599037Y-48766748D01* X45602080Y-48769593D01* X45648478Y-48815992D01* X45648479Y-48815993D01* X45648482Y-48815995D01* X45648485Y-48815998D01* X45680010Y-48838071D01* X45680632Y-48838507D01* X45685864Y-48842606D01* X45717805Y-48870512D01* X45774058Y-48904121D01* X45777781Y-48906532D01* X45814273Y-48932084D01* X45828861Y-48942300D01* X45828864Y-48942301D01* X45828869Y-48942305D01* X45867433Y-48960287D01* X45873016Y-48963246D01* X45912273Y-48986702D01* X45970533Y-49008566D01* X45974945Y-49010420D01* X46028447Y-49035369D01* X46072727Y-49047233D01* X46078462Y-49049073D01* X46107879Y-49060113D01* X46124362Y-49066300D01* X46182336Y-49076820D01* X46187301Y-49077934D01* X46241152Y-49092364D01* X46290125Y-49096648D01* X46295773Y-49097406D01* X46334875Y-49104502D01* X46347255Y-49106749D01* X46347256Y-49106749D01* X46402871Y-49106749D01* X46408272Y-49106984D01* X46436893Y-49109488D01* X46460521Y-49111556D01* X46460522Y-49111556D01* X46460522Y-49111555D01* X46460523Y-49111556D01* X46513833Y-49106892D01* X46517027Y-49106749D01* X46517045Y-49106749D01* X46565148Y-49102418D01* X46571914Y-49101810D01* X46679876Y-49092366D01* X46679880Y-49092365D01* X46679894Y-49092364D01* X46679906Y-49092360D01* X46680425Y-49092269D01* X46685659Y-49091573D01* X46686145Y-49091530D01* X46790858Y-49062630D01* X46892599Y-49035369D01* X46892612Y-49035362D01* X46899552Y-49032837D01* X46904243Y-49031338D01* X46904516Y-49031263D01* X46999542Y-48985500D01* X47092177Y-48942305D01* X47092186Y-48942298D01* X47096873Y-48939594D01* X47096944Y-48939717D01* X47107729Y-48933401D01* X47108616Y-48932974D01* X47191391Y-48872834D01* X47272561Y-48815998D01* X47273474Y-48815084D01* X47288275Y-48802442D01* X47291886Y-48799820D01* X47323513Y-48766741D01* X47360425Y-48728133D01* X47428269Y-48660290D01* X47428269Y-48660289D01* X47428272Y-48660287D01* X47430999Y-48656391D01* X47442951Y-48641817D01* X47448435Y-48636083D01* X47501332Y-48555946D01* X47554579Y-48479903D01* X47558061Y-48472434D01* X47566959Y-48456525D01* X47573232Y-48447023D01* X47609739Y-48361609D01* X47647643Y-48280325D01* X47650668Y-48269031D01* X47656419Y-48252396D01* X47662266Y-48238719D01* X47682234Y-48151227D01* X47704638Y-48067620D01* X47706330Y-48048273D01* X47707649Y-48039875D01* X47712674Y-48017864D01* X47716559Y-47931354D01* X47723830Y-47848249D01* X47723830Y-47848247D01* X50047216Y-47848247D01* X50049195Y-47870888D01* X50049369Y-47879078D01* X50048207Y-47904937D01* X50048208Y-47904939D01* X50059214Y-47986195D01* X50059539Y-47989113D01* X50062055Y-48017864D01* X50066408Y-48067620D01* X50073147Y-48092772D01* X50074697Y-48100492D01* X50078616Y-48129422D01* X50078619Y-48129432D01* X50102936Y-48204272D01* X50103857Y-48207383D01* X50123400Y-48280315D01* X50123404Y-48280327D01* X50135798Y-48306908D01* X50138574Y-48313954D01* X50148618Y-48344865D01* X50148620Y-48344870D01* X50157628Y-48361609D01* X50184345Y-48411259D01* X50185939Y-48414436D01* X50216465Y-48479900D01* X50216466Y-48479902D01* X50216467Y-48479903D01* X50235191Y-48506645D01* X50238998Y-48512823D01* X50255966Y-48544354D01* X50255968Y-48544357D01* X50300920Y-48600724D01* X50303232Y-48603816D01* X50342774Y-48660287D01* X50342777Y-48660290D01* X50368182Y-48685695D01* X50372818Y-48690882D01* X50397209Y-48721467D01* X50449037Y-48766748D01* X50452080Y-48769593D01* X50498478Y-48815992D01* X50498479Y-48815993D01* X50498482Y-48815995D01* X50498485Y-48815998D01* X50530010Y-48838071D01* X50530632Y-48838507D01* X50535864Y-48842606D01* X50567805Y-48870512D01* X50624058Y-48904121D01* X50627781Y-48906532D01* X50664273Y-48932084D01* X50678861Y-48942300D01* X50678864Y-48942301D01* X50678869Y-48942305D01* X50717433Y-48960287D01* X50723016Y-48963246D01* X50762273Y-48986702D01* X50820533Y-49008566D01* X50824945Y-49010420D01* X50878447Y-49035369D01* X50922727Y-49047233D01* X50928462Y-49049073D01* X50957879Y-49060113D01* X50974362Y-49066300D01* X51032336Y-49076820D01* X51037301Y-49077934D01* X51091152Y-49092364D01* X51140125Y-49096648D01* X51145773Y-49097406D01* X51184875Y-49104502D01* X51197255Y-49106749D01* X51197256Y-49106749D01* X51252871Y-49106749D01* X51258272Y-49106984D01* X51286893Y-49109488D01* X51310521Y-49111556D01* X51310522Y-49111556D01* X51310522Y-49111555D01* X51310523Y-49111556D01* X51363833Y-49106892D01* X51367027Y-49106749D01* X51367045Y-49106749D01* X51415148Y-49102418D01* X51421914Y-49101810D01* X51529876Y-49092366D01* X51529880Y-49092365D01* X51529894Y-49092364D01* X51529906Y-49092360D01* X51530425Y-49092269D01* X51535659Y-49091573D01* X51536145Y-49091530D01* X51640858Y-49062630D01* X51742599Y-49035369D01* X51742612Y-49035362D01* X51749552Y-49032837D01* X51754243Y-49031338D01* X51754516Y-49031263D01* X51849542Y-48985500D01* X51942177Y-48942305D01* X51942186Y-48942298D01* X51946873Y-48939594D01* X51946944Y-48939717D01* X51957729Y-48933401D01* X51958616Y-48932974D01* X52041391Y-48872834D01* X52122561Y-48815998D01* X52123474Y-48815084D01* X52138275Y-48802442D01* X52141886Y-48799820D01* X52173513Y-48766741D01* X52210425Y-48728133D01* X52278269Y-48660290D01* X52278269Y-48660289D01* X52278272Y-48660287D01* X52280999Y-48656391D01* X52292951Y-48641817D01* X52298435Y-48636083D01* X52351332Y-48555946D01* X52404579Y-48479903D01* X52408061Y-48472434D01* X52416959Y-48456525D01* X52423232Y-48447023D01* X52459739Y-48361609D01* X52497643Y-48280325D01* X52500668Y-48269031D01* X52506419Y-48252396D01* X52512266Y-48238719D01* X52532234Y-48151227D01* X52554638Y-48067620D01* X52556330Y-48048273D01* X52557649Y-48039875D01* X52562674Y-48017864D01* X52566559Y-47931354D01* X52573830Y-47848249D01* X52571850Y-47825617D01* X52571676Y-47817422D01* X52572838Y-47791558D01* X52561828Y-47710291D01* X52561504Y-47707374D01* X52554638Y-47628880D01* X52554638Y-47628878D01* X52547900Y-47603732D01* X52546348Y-47596002D01* X52544645Y-47583439D01* X52542429Y-47567074D01* X52518110Y-47492231D01* X52517194Y-47489138D01* X52502953Y-47435990D01* X52497646Y-47416182D01* X52497642Y-47416172D01* X52485245Y-47389585D01* X52482471Y-47382545D01* X52472426Y-47351628D01* X52472425Y-47351626D01* X52472422Y-47351619D01* X52436690Y-47285219D01* X52435105Y-47282060D01* X52404579Y-47216596D01* X52391352Y-47197706D01* X52385860Y-47189862D01* X52382046Y-47183673D01* X52365078Y-47152141D01* X52320117Y-47095762D01* X52317802Y-47092666D01* X52278273Y-47036212D01* X52252863Y-47010802D01* X52248225Y-47005613D01* X52223835Y-46975029D01* X52172014Y-46929754D01* X52168965Y-46926904D01* X52122562Y-46880500D01* X52090414Y-46857990D01* X52085179Y-46853890D01* X52053241Y-46825986D01* X51997009Y-46792388D01* X51993248Y-46789953D01* X51955503Y-46763524D01* X51942177Y-46754193D01* X51928463Y-46747798D01* X51903623Y-46736214D01* X51898024Y-46733246D01* X51867224Y-46714845D01* X51858773Y-46709796D01* X51800511Y-46687930D01* X51796111Y-46686082D01* X51764416Y-46671302D01* X51742600Y-46661129D01* X51742588Y-46661125D01* X51698316Y-46649262D01* X51692576Y-46647421D01* X51646683Y-46630197D01* X51595638Y-46620933D01* X51588714Y-46619677D01* X51583740Y-46618561D01* X51529895Y-46604134D01* X51517893Y-46603083D01* X51480926Y-46599849D01* X51475264Y-46599089D01* X51440521Y-46592785D01* X51423790Y-46589749D01* X51423789Y-46589749D01* X51368175Y-46589749D01* X51362773Y-46589513D01* X51334152Y-46587009D01* X51310525Y-46584942D01* X51310520Y-46584942D01* X51257251Y-46589602D01* X51254012Y-46589748D01* X51199131Y-46594687D01* X51091141Y-46604134D01* X51090564Y-46604236D01* X51085412Y-46604921D01* X51084909Y-46604966D01* X51084892Y-46604969D01* X50980187Y-46633867D01* X50878441Y-46661130D01* X50871467Y-46663667D01* X50866791Y-46665161D01* X50866545Y-46665228D01* X50866534Y-46665233D01* X50771487Y-46711004D01* X50678875Y-46754190D01* X50674181Y-46756900D01* X50674110Y-46756778D01* X50663347Y-46763082D01* X50662431Y-46763523D01* X50662425Y-46763526D01* X50579642Y-46823672D01* X50498481Y-46880503D01* X50497550Y-46881434D01* X50482787Y-46894042D01* X50479164Y-46896674D01* X50479154Y-46896683D01* X50410620Y-46968364D01* X50342770Y-47036215D01* X50342769Y-47036216D01* X50340029Y-47040129D01* X50328104Y-47054668D01* X50322612Y-47060412D01* X50322608Y-47060418D01* X50269706Y-47140562D01* X50216466Y-47216596D01* X50216464Y-47216601D01* X50212985Y-47224061D01* X50204099Y-47239951D01* X50197815Y-47249471D01* X50197814Y-47249473D01* X50161303Y-47334893D01* X50123405Y-47416166D01* X50123403Y-47416172D01* X50120375Y-47427471D01* X50114625Y-47444103D01* X50108782Y-47457774D01* X50108779Y-47457782D01* X50088811Y-47545270D01* X50066408Y-47628875D01* X50066407Y-47628881D01* X50064715Y-47648219D01* X50063396Y-47656615D01* X50058372Y-47678634D01* X50054486Y-47765143D01* X50047216Y-47848245D01* X50047216Y-47848247D01* X47723830Y-47848247D01* X47721850Y-47825617D01* X47721676Y-47817422D01* X47722838Y-47791558D01* X47711828Y-47710291D01* X47711504Y-47707374D01* X47704638Y-47628880D01* X47704638Y-47628878D01* X47697900Y-47603732D01* X47696348Y-47596002D01* X47694645Y-47583439D01* X47692429Y-47567074D01* X47668110Y-47492231D01* X47667194Y-47489138D01* X47652953Y-47435990D01* X47647646Y-47416182D01* X47647642Y-47416172D01* X47635245Y-47389585D01* X47632471Y-47382545D01* X47622426Y-47351628D01* X47622425Y-47351626D01* X47622422Y-47351619D01* X47586690Y-47285219D01* X47585105Y-47282060D01* X47554579Y-47216596D01* X47541352Y-47197706D01* X47535860Y-47189862D01* X47532046Y-47183673D01* X47515078Y-47152141D01* X47470117Y-47095762D01* X47467802Y-47092666D01* X47428273Y-47036212D01* X47402863Y-47010802D01* X47398225Y-47005613D01* X47373835Y-46975029D01* X47322014Y-46929754D01* X47318965Y-46926904D01* X47272562Y-46880500D01* X47240414Y-46857990D01* X47235179Y-46853890D01* X47203241Y-46825986D01* X47147009Y-46792388D01* X47143248Y-46789953D01* X47105503Y-46763524D01* X47092177Y-46754193D01* X47078463Y-46747798D01* X47053623Y-46736214D01* X47048024Y-46733246D01* X47017224Y-46714845D01* X47008773Y-46709796D01* X46950511Y-46687930D01* X46946111Y-46686082D01* X46914416Y-46671302D01* X46892600Y-46661129D01* X46892588Y-46661125D01* X46848316Y-46649262D01* X46842576Y-46647421D01* X46796683Y-46630197D01* X46745638Y-46620933D01* X46738714Y-46619677D01* X46733740Y-46618561D01* X46679895Y-46604134D01* X46667893Y-46603083D01* X46630926Y-46599849D01* X46625264Y-46599089D01* X46590521Y-46592785D01* X46573790Y-46589749D01* X46573789Y-46589749D01* X46518175Y-46589749D01* X46512773Y-46589513D01* X46484152Y-46587009D01* X46460525Y-46584942D01* X46460520Y-46584942D01* X46407251Y-46589602D01* X46404012Y-46589748D01* X46349131Y-46594687D01* X46241141Y-46604134D01* X46240564Y-46604236D01* X46235412Y-46604921D01* X46234909Y-46604966D01* X46234892Y-46604969D01* X46130187Y-46633867D01* X46028441Y-46661130D01* X46021467Y-46663667D01* X46016791Y-46665161D01* X46016545Y-46665228D01* X46016534Y-46665233D01* X45921487Y-46711004D01* X45828875Y-46754190D01* X45824181Y-46756900D01* X45824110Y-46756778D01* X45813347Y-46763082D01* X45812431Y-46763523D01* X45812425Y-46763526D01* X45729642Y-46823672D01* X45648481Y-46880503D01* X45647550Y-46881434D01* X45632787Y-46894042D01* X45629164Y-46896674D01* X45629154Y-46896683D01* X45560620Y-46968364D01* X45492770Y-47036215D01* X45492769Y-47036216D01* X45490029Y-47040129D01* X45478104Y-47054668D01* X45472612Y-47060412D01* X45472608Y-47060418D01* X45419706Y-47140562D01* X45366466Y-47216596D01* X45366464Y-47216601D01* X45362985Y-47224061D01* X45354099Y-47239951D01* X45347815Y-47249471D01* X45347814Y-47249473D01* X45311303Y-47334893D01* X45273405Y-47416166D01* X45273403Y-47416172D01* X45270375Y-47427471D01* X45264625Y-47444103D01* X45258782Y-47457774D01* X45258779Y-47457782D01* X45238811Y-47545270D01* X45216408Y-47628875D01* X45216407Y-47628881D01* X45214715Y-47648219D01* X45213396Y-47656615D01* X45208372Y-47678634D01* X45204486Y-47765143D01* X45197216Y-47848245D01* X45197216Y-47848247D01* X41354023Y-47848247D01* X41354023Y-47286996D01* X41354235Y-47281874D01* X41358679Y-47228252D01* X41358679Y-47228244D01* X41354235Y-47174622D01* X41354023Y-47169499D01* X41354023Y-46329611D01* X41354022Y-46329594D01* X41350680Y-46298519D01* X41347512Y-46269048D01* X41331735Y-46226749D01* X41296411Y-46132042D01* X41296410Y-46132041D01* X41221938Y-46032560D01* X41197520Y-45967096D01* X41212371Y-45898823D01* X41221938Y-45883938D01* X41222426Y-45883287D01* X41269107Y-45820928D01* X41296410Y-45784456D01* X41296411Y-45784455D01* X41308452Y-45752174D01* X41347512Y-45647450D01* X41352854Y-45597762D01* X41354022Y-45586903D01* X41354023Y-45586886D01* X41354023Y-44818249D01* X44747196Y-44818249D01* X44752167Y-44878243D01* X44754494Y-44906332D01* X44758379Y-44997792D01* X44758380Y-44997801D01* X44763533Y-45021710D01* X44764713Y-45029659D01* X44766470Y-45050866D01* X44766472Y-45050878D01* X44788940Y-45139602D01* X44808893Y-45232184D01* X44816780Y-45251810D01* X44819357Y-45259715D01* X44823774Y-45277156D01* X44861808Y-45363865D01* X44898290Y-45454653D01* X44907652Y-45469857D01* X44911640Y-45477469D01* X44917538Y-45490917D01* X44971047Y-45572819D01* X45023996Y-45658814D01* X45024003Y-45658823D01* X45030681Y-45666410D01* X45041409Y-45680516D01* X45045209Y-45686332D01* X45113602Y-45760626D01* X45134572Y-45784453D01* X45182405Y-45838801D01* X45182406Y-45838802D01* X45187593Y-45842990D01* X45200930Y-45855489D01* X45203306Y-45858071D01* X45253914Y-45897459D01* X45285471Y-45922021D01* X45340943Y-45966812D01* X45368944Y-45989422D01* X45368945Y-45989422D01* X45368947Y-45989424D01* X45371688Y-45990955D01* X45371763Y-45990997D01* X45387457Y-46001401D01* X45387502Y-46001436D01* X45387514Y-46001444D01* X45445013Y-46032560D01* X45481869Y-46052505D01* X45578263Y-46106354D01* X45578268Y-46106355D01* X45578272Y-46106358D01* X45580663Y-46107439D01* X45588000Y-46110697D01* X45588098Y-46110475D01* X45592785Y-46112530D01* X45592796Y-46112536D01* X45697263Y-46148400D01* X45804329Y-46186229D01* X45804890Y-46186325D01* X45809632Y-46187330D01* X45813566Y-46188327D01* X45813572Y-46188329D01* X45925618Y-46207026D01* X46040633Y-46226748D01* X46040642Y-46226749D01* X46277230Y-46226749D01* X46277235Y-46226749D01* X46310171Y-46221252D01* X46333998Y-46217277D01* X46338936Y-46216655D01* X46392464Y-46212100D01* X46399410Y-46211509D01* X46399411Y-46211508D01* X46399421Y-46211508D01* X46451820Y-46197863D01* X46457191Y-46196718D01* X46507474Y-46188329D01* X46565025Y-46168571D01* X46569498Y-46167222D01* X46631447Y-46151093D01* X46677782Y-46130147D01* X46683156Y-46128016D01* X46728250Y-46112536D01* X46784655Y-46082010D01* X46788577Y-46080065D01* X46849925Y-46052335D01* X46889318Y-46025708D01* X46894502Y-46022563D01* X46933531Y-46001444D01* X46933535Y-46001442D01* X46933536Y-46001441D01* X46933540Y-46001439D01* X46986751Y-45960021D01* X46990084Y-45957602D01* X47048570Y-45918074D01* X47080524Y-45887447D01* X47085312Y-45883307D01* X47117743Y-45858067D01* X47165642Y-45806033D01* X47168317Y-45803305D01* X47221667Y-45752174D01* X47246020Y-45719245D01* X47250250Y-45714126D01* X47252692Y-45711474D01* X47275837Y-45686332D01* X47316308Y-45624384D01* X47318358Y-45621438D01* X47335872Y-45597758D01* X47364238Y-45559406D01* X47381199Y-45525763D01* X47384637Y-45519798D01* X47403507Y-45490918D01* X47434565Y-45420110D01* X47435936Y-45417199D01* X47472180Y-45345316D01* X47482244Y-45312449D01* X47484744Y-45305715D01* X47497272Y-45277156D01* X47517058Y-45199019D01* X47517857Y-45196158D01* X47542387Y-45116064D01* X47546333Y-45085243D01* X47547721Y-45077933D01* X47554574Y-45050875D01* X47561613Y-44965921D01* X47572841Y-44878244D01* X47571662Y-44850498D01* X47571817Y-44842774D01* X47573850Y-44818249D01* X50197196Y-44818249D01* X50202167Y-44878243D01* X50204494Y-44906332D01* X50208379Y-44997792D01* X50208380Y-44997801D01* X50213533Y-45021710D01* X50214713Y-45029659D01* X50216470Y-45050866D01* X50216472Y-45050878D01* X50238940Y-45139602D01* X50258893Y-45232184D01* X50266780Y-45251810D01* X50269357Y-45259715D01* X50273774Y-45277156D01* X50311808Y-45363865D01* X50348290Y-45454653D01* X50357652Y-45469857D01* X50361640Y-45477469D01* X50367538Y-45490917D01* X50421047Y-45572819D01* X50473996Y-45658814D01* X50474003Y-45658823D01* X50480681Y-45666410D01* X50491409Y-45680516D01* X50495209Y-45686332D01* X50563602Y-45760626D01* X50584572Y-45784453D01* X50632405Y-45838801D01* X50632406Y-45838802D01* X50637593Y-45842990D01* X50650930Y-45855489D01* X50653306Y-45858071D01* X50703914Y-45897459D01* X50735471Y-45922021D01* X50790943Y-45966812D01* X50818944Y-45989422D01* X50818945Y-45989422D01* X50818947Y-45989424D01* X50821688Y-45990955D01* X50821763Y-45990997D01* X50837457Y-46001401D01* X50837502Y-46001436D01* X50837514Y-46001444D01* X50895013Y-46032560D01* X50931869Y-46052505D01* X51028263Y-46106354D01* X51028268Y-46106355D01* X51028272Y-46106358D01* X51030663Y-46107439D01* X51038000Y-46110697D01* X51038098Y-46110475D01* X51042785Y-46112530D01* X51042796Y-46112536D01* X51147263Y-46148400D01* X51254329Y-46186229D01* X51254890Y-46186325D01* X51259632Y-46187330D01* X51263566Y-46188327D01* X51263572Y-46188329D01* X51375618Y-46207026D01* X51490633Y-46226748D01* X51490642Y-46226749D01* X51727230Y-46226749D01* X51727235Y-46226749D01* X51760171Y-46221252D01* X51783998Y-46217277D01* X51788936Y-46216655D01* X51842464Y-46212100D01* X51849410Y-46211509D01* X51849411Y-46211508D01* X51849421Y-46211508D01* X51901820Y-46197863D01* X51907191Y-46196718D01* X51957474Y-46188329D01* X52015025Y-46168571D01* X52019498Y-46167222D01* X52081447Y-46151093D01* X52127782Y-46130147D01* X52133156Y-46128016D01* X52178250Y-46112536D01* X52234655Y-46082010D01* X52238577Y-46080065D01* X52299925Y-46052335D01* X52339318Y-46025708D01* X52344502Y-46022563D01* X52383531Y-46001444D01* X52383535Y-46001442D01* X52383536Y-46001441D01* X52383540Y-46001439D01* X52436751Y-45960021D01* X52440084Y-45957602D01* X52498570Y-45918074D01* X52530524Y-45887447D01* X52535312Y-45883307D01* X52567743Y-45858067D01* X52615642Y-45806033D01* X52618317Y-45803305D01* X52671667Y-45752174D01* X52696020Y-45719245D01* X52700250Y-45714126D01* X52702692Y-45711474D01* X52725837Y-45686332D01* X52766308Y-45624384D01* X52768358Y-45621438D01* X52785872Y-45597758D01* X52814238Y-45559406D01* X52831199Y-45525763D01* X52834637Y-45519798D01* X52853507Y-45490918D01* X52884565Y-45420110D01* X52885936Y-45417199D01* X52922180Y-45345316D01* X52932244Y-45312449D01* X52934744Y-45305715D01* X52947272Y-45277156D01* X52967058Y-45199019D01* X52967857Y-45196158D01* X52992387Y-45116064D01* X52996333Y-45085243D01* X52997721Y-45077933D01* X53004574Y-45050875D01* X53011613Y-44965921D01* X53022841Y-44878244D01* X53021662Y-44850498D01* X53021817Y-44842774D01* X53023850Y-44818249D01* X53018878Y-44758253D01* X53016551Y-44730165D01* X53012667Y-44638709D01* X53012666Y-44638706D01* X53012666Y-44638698D01* X53007510Y-44614779D01* X53006331Y-44606835D01* X53004574Y-44585628D01* X53004574Y-44585623D01* X52982105Y-44496895D01* X52962153Y-44404317D01* X52954258Y-44384673D01* X52951690Y-44376793D01* X52947272Y-44359342D01* X52909237Y-44272632D01* X52872756Y-44181845D01* X52863390Y-44166635D01* X52859405Y-44159027D01* X52858625Y-44157249D01* X52853507Y-44145580D01* X52799998Y-44063678D01* X52747047Y-43977680D01* X52747041Y-43977673D01* X52747038Y-43977669D01* X52740362Y-43970083D01* X52729641Y-43955988D01* X52725838Y-43950168D01* X52725837Y-43950166D01* X52657443Y-43875871D01* X52588642Y-43797698D01* X52588641Y-43797697D01* X52588637Y-43797693D01* X52583452Y-43793507D01* X52570120Y-43781014D01* X52567743Y-43778431D01* X52485574Y-43714476D01* X52402099Y-43647074D01* X52402097Y-43647072D01* X52402091Y-43647068D01* X52399273Y-43645494D01* X52383593Y-43635100D01* X52383543Y-43635061D01* X52383541Y-43635060D01* X52383540Y-43635059D01* X52289176Y-43583992D01* X52213380Y-43541650D01* X52192782Y-43530143D01* X52190522Y-43529122D01* X52183042Y-43525800D01* X52182945Y-43526022D01* X52178248Y-43523961D01* X52073782Y-43488097D01* X51966720Y-43450270D01* X51966719Y-43450269D01* X51966717Y-43450269D01* X51966715Y-43450268D01* X51966706Y-43450266D01* X51966156Y-43450172D01* X51961436Y-43449171D01* X51957489Y-43448172D01* X51957476Y-43448169D01* X51957474Y-43448169D01* X51845427Y-43429471D01* X51730413Y-43409749D01* X51730404Y-43409749D01* X51727235Y-43409749D01* X51493811Y-43409749D01* X51493810Y-43409749D01* X51437052Y-43419219D01* X51432110Y-43419841D01* X51398353Y-43422714D01* X51371623Y-43424990D01* X51371620Y-43424990D01* X51319256Y-43438625D01* X51313836Y-43439781D01* X51263572Y-43448168D01* X51206035Y-43467920D01* X51201528Y-43469278D01* X51156418Y-43481025D01* X51139599Y-43485405D01* X51139596Y-43485406D01* X51139593Y-43485407D01* X51093281Y-43506341D01* X51087882Y-43508482D01* X51073286Y-43513493D01* X51042796Y-43523961D01* X50986402Y-43554479D01* X50982433Y-43556447D01* X50921120Y-43584163D01* X50921118Y-43584164D01* X50881732Y-43610784D01* X50876525Y-43613942D01* X50864961Y-43620200D01* X50837501Y-43635061D01* X50784303Y-43676467D01* X50780948Y-43678902D01* X50750872Y-43699230D01* X50722474Y-43718425D01* X50722471Y-43718428D01* X50690535Y-43749035D01* X50685716Y-43753201D01* X50653304Y-43778430D01* X50653303Y-43778431D01* X50605421Y-43830442D01* X50602707Y-43833211D01* X50549380Y-43884322D01* X50525026Y-43917248D01* X50520793Y-43922372D01* X50495207Y-43950167D01* X50495204Y-43950171D01* X50454745Y-44012099D01* X50452689Y-44015055D01* X50406810Y-44077088D01* X50406809Y-44077089D01* X50389856Y-44110712D01* X50386398Y-44116712D01* X50367538Y-44145581D01* X50336501Y-44216338D01* X50335085Y-44219345D01* X50298865Y-44291182D01* X50298864Y-44291183D01* X50288803Y-44324035D01* X50286298Y-44330786D01* X50273772Y-44359343D01* X50273772Y-44359344D01* X50253992Y-44437452D01* X50253172Y-44440386D01* X50228660Y-44520427D01* X50228658Y-44520439D01* X50224714Y-44551235D01* X50223318Y-44558584D01* X50216473Y-44585616D01* X50216471Y-44585628D01* X50209432Y-44670576D01* X50198205Y-44758252D01* X50198204Y-44758253D01* X50199382Y-44785980D01* X50199226Y-44793734D01* X50197196Y-44818244D01* X50197196Y-44818249D01* X47573850Y-44818249D01* X47568878Y-44758253D01* X47566551Y-44730165D01* X47562667Y-44638709D01* X47562666Y-44638706D01* X47562666Y-44638698D01* X47557510Y-44614779D01* X47556331Y-44606835D01* X47554574Y-44585628D01* X47554574Y-44585623D01* X47532105Y-44496895D01* X47512153Y-44404317D01* X47504258Y-44384673D01* X47501690Y-44376793D01* X47497272Y-44359342D01* X47459237Y-44272632D01* X47422756Y-44181845D01* X47413390Y-44166635D01* X47409405Y-44159027D01* X47408625Y-44157249D01* X47403507Y-44145580D01* X47349998Y-44063678D01* X47297047Y-43977680D01* X47297041Y-43977673D01* X47297038Y-43977669D01* X47290362Y-43970083D01* X47279641Y-43955988D01* X47275838Y-43950168D01* X47275837Y-43950166D01* X47207443Y-43875871D01* X47138642Y-43797698D01* X47138641Y-43797697D01* X47138637Y-43797693D01* X47133452Y-43793507D01* X47120120Y-43781014D01* X47117743Y-43778431D01* X47035574Y-43714476D01* X46952099Y-43647074D01* X46952097Y-43647072D01* X46952091Y-43647068D01* X46949273Y-43645494D01* X46933593Y-43635100D01* X46933543Y-43635061D01* X46933541Y-43635060D01* X46933540Y-43635059D01* X46839176Y-43583992D01* X46763380Y-43541650D01* X46742782Y-43530143D01* X46740522Y-43529122D01* X46733042Y-43525800D01* X46732945Y-43526022D01* X46728248Y-43523961D01* X46623782Y-43488097D01* X46516720Y-43450270D01* X46516719Y-43450269D01* X46516717Y-43450269D01* X46516715Y-43450268D01* X46516706Y-43450266D01* X46516156Y-43450172D01* X46511436Y-43449171D01* X46507489Y-43448172D01* X46507476Y-43448169D01* X46507474Y-43448169D01* X46395427Y-43429471D01* X46280413Y-43409749D01* X46280404Y-43409749D01* X46277235Y-43409749D01* X46043811Y-43409749D01* X46043810Y-43409749D01* X45987052Y-43419219D01* X45982110Y-43419841D01* X45948353Y-43422714D01* X45921623Y-43424990D01* X45921620Y-43424990D01* X45869256Y-43438625D01* X45863836Y-43439781D01* X45813572Y-43448168D01* X45756035Y-43467920D01* X45751528Y-43469278D01* X45706418Y-43481025D01* X45689599Y-43485405D01* X45689596Y-43485406D01* X45689593Y-43485407D01* X45643281Y-43506341D01* X45637882Y-43508482D01* X45623286Y-43513493D01* X45592796Y-43523961D01* X45536402Y-43554479D01* X45532433Y-43556447D01* X45471120Y-43584163D01* X45471118Y-43584164D01* X45431732Y-43610784D01* X45426525Y-43613942D01* X45414961Y-43620200D01* X45387501Y-43635061D01* X45334303Y-43676467D01* X45330948Y-43678902D01* X45300872Y-43699230D01* X45272474Y-43718425D01* X45272471Y-43718428D01* X45240535Y-43749035D01* X45235716Y-43753201D01* X45203304Y-43778430D01* X45203303Y-43778431D01* X45155421Y-43830442D01* X45152707Y-43833211D01* X45099380Y-43884322D01* X45075026Y-43917248D01* X45070793Y-43922372D01* X45045207Y-43950167D01* X45045204Y-43950171D01* X45004745Y-44012099D01* X45002689Y-44015055D01* X44956810Y-44077088D01* X44956809Y-44077089D01* X44939856Y-44110712D01* X44936398Y-44116712D01* X44917538Y-44145581D01* X44886501Y-44216338D01* X44885085Y-44219345D01* X44848865Y-44291182D01* X44848864Y-44291183D01* X44838803Y-44324035D01* X44836298Y-44330786D01* X44823772Y-44359343D01* X44823772Y-44359344D01* X44803992Y-44437452D01* X44803172Y-44440386D01* X44778660Y-44520427D01* X44778658Y-44520439D01* X44774714Y-44551235D01* X44773318Y-44558584D01* X44766473Y-44585616D01* X44766471Y-44585628D01* X44759432Y-44670576D01* X44748205Y-44758252D01* X44748204Y-44758253D01* X44749382Y-44785980D01* X44749226Y-44793734D01* X44747196Y-44818244D01* X44747196Y-44818249D01* X41354023Y-44818249D01* X41354023Y-44746996D01* X41354235Y-44741874D01* X41355206Y-44730165D01* X41358679Y-44688249D01* X41354234Y-44634614D01* X41354023Y-44629499D01* X41354023Y-43789611D01* X41354022Y-43789594D01* X41350680Y-43758519D01* X41347512Y-43729048D01* X41343549Y-43718424D01* X41316935Y-43647068D01* X41296412Y-43592045D01* X41208784Y-43474988D01* X41091727Y-43387360D01* X40954726Y-43336260D01* X40894177Y-43329749D01* X40894161Y-43329749D01* X37296885Y-43329749D01* X37296868Y-43329749D01* X37236320Y-43336260D01* X37236318Y-43336260D01* X37099318Y-43387360D01* X36982262Y-43474988D01* X36894634Y-43592044D01* X36843534Y-43729044D01* X36843534Y-43729046D01* X36837023Y-43789594D01* X36837023Y-45586903D01* X36843534Y-45647451D01* X36843534Y-45647453D01* X36882593Y-45752171D01* X36894634Y-45784453D01* X36968620Y-45883287D01* X36969108Y-45883938D01* X36993525Y-45949403D01* X36978673Y-46017676D01* X36969108Y-46032560D01* X36894634Y-46132044D01* X36843534Y-46269044D01* X36843534Y-46269046D01* X36837023Y-46329594D01* X36837023Y-48126903D01* X33798903Y-48126903D01* X33798903Y-43087159D01* X33799036Y-43083104D01* X33815526Y-42831457D01* X33816583Y-42823417D01* X33865386Y-42578057D01* X33867479Y-42570244D01* X33947891Y-42333351D01* X33950994Y-42325861D01* X34043214Y-42138854D01* X34061632Y-42101504D01* X34065681Y-42094491D01* X34204660Y-41886493D01* X34209598Y-41880056D01* X34374532Y-41691982D01* X34380271Y-41686244D01* X34568343Y-41521308D01* X34574765Y-41516379D01* X34782768Y-41377394D01* X34789782Y-41373344D01* X35014155Y-41262695D01* X35021633Y-41259599D01* X35258524Y-41179185D01* X35266338Y-41177091D01* X35511695Y-41128286D01* X35519724Y-41127229D01* X35601823Y-41121848D01* X35771065Y-41110757D01* X35775121Y-41110624D01* X35781688Y-41110624D01* X65092585Y-41110624D01* X65159624Y-41130309D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,3V3_BUS2*% G36* X58384135Y-54256181D02* G01* X58384766Y-54256866D01* X58473084Y-54360866D01* X58473437Y-54361329D01* X58539575Y-54457818D01* X58602419Y-54532712D01* X58688752Y-54581083D01* X58815280Y-54596963D01* X58823062Y-54601393D01* X58825523Y-54608572D01* X58825523Y-55087925D01* X58822096Y-55096198D01* X58815280Y-55099534D01* X58688753Y-55115412D01* X58602420Y-55163784D01* X58539574Y-55238678D01* X58473439Y-55335165D01* X58473073Y-55335644D01* X58384773Y-55439623D01* X58376806Y-55443711D01* X58368282Y-55440968D01* X58367589Y-55440330D01* X58262729Y-55335644D01* X57782815Y-54856527D01* X57779382Y-54848259D01* X57782801Y-54839984D01* X58367590Y-54256166D01* X58375865Y-54252747D01* X58384135Y-54256181D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OB+*% G36* X39986384Y-97934864D02* G01* X39993584Y-97940188D01* X39994910Y-97949044D01* X39992356Y-97953928D01* X39561562Y-98445511D01* X39553532Y-98449475D01* X39546559Y-98447720D01* X39535006Y-98440495D01* X39522600Y-98432735D01* X39522596Y-98432733D01* X39490203Y-98417561D01* X39490194Y-98417557D01* X39457801Y-98407474D01* X39425405Y-98402480D01* X39425400Y-98402480D01* X39393000Y-98402576D01* X39111701Y-98402576D01* X39103428Y-98399149D01* X39100001Y-98390876D01* X39101179Y-98385759D01* X39135400Y-98315399D01* X39177799Y-98208075D01* X39177800Y-98208073D01* X39220199Y-98080594D01* X39262599Y-97932964D01* X39302143Y-97776483D01* X39307492Y-97769304D01* X39316312Y-97767999D01* X39986384Y-97934864D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OA+*% G36* X75732597Y-97333780D02* G01* X75733078Y-97334017D01* X76291155Y-97626667D01* X76386901Y-97676875D01* X76392636Y-97683752D01* X76391829Y-97692671D01* X76388184Y-97696817D01* X75787628Y-98117919D01* X75778887Y-98119863D01* X75771331Y-98115056D01* X75770406Y-98113489D01* X75754707Y-98081428D01* X75732991Y-98042955D01* X75711279Y-98010361D01* X75711279Y-98010360D01* X75689562Y-97983637D01* X75689560Y-97983634D01* X75689555Y-97983629D01* X75667845Y-97962786D01* X75463894Y-97758836D01* X75460467Y-97750563D01* X75463800Y-97742385D01* X75509016Y-97696152D01* X75562319Y-97626669D01* X75615623Y-97542203D01* X75639400Y-97497842D01* X75668918Y-97442773D01* X75668921Y-97442764D01* X75668926Y-97442757D01* X75717051Y-97339445D01* X75723651Y-97333393D01* X75732597Y-97333780D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OB-*% G36* X42670725Y-97473478D02* G01* X42673071Y-97476841D01* X42694937Y-97524201D01* X42694943Y-97524213D01* X42719934Y-97571271D01* X42744937Y-97611275D01* X42769936Y-97644197D01* X42769944Y-97644205D01* X42788944Y-97663850D01* X42792232Y-97672179D01* X42790790Y-97677614D01* X42530192Y-98152366D01* X42523207Y-98157969D01* X42514306Y-98156992D01* X42509680Y-98152366D01* X42249081Y-97677613D01* X42248104Y-97668712D01* X42250925Y-97663852D01* X42269931Y-97644201D01* X42294932Y-97611277D01* X42319933Y-97571277D01* X42319937Y-97571271D01* X42344928Y-97524213D01* X42344928Y-97524212D01* X42344934Y-97524201D01* X42360530Y-97490422D01* X42366799Y-97476846D01* X42373378Y-97470772D01* X42377421Y-97470051D01* X42662452Y-97470051D01* X42670725Y-97473478D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J3-Pin_3)*% G36* X82812264Y-92741278D02* G01* X83396081Y-93326066D01* X83399501Y-93334342D01* X83396067Y-93342612D01* X83395374Y-93343250D01* X83291395Y-93431550D01* X83290916Y-93431916D01* X83194429Y-93498051D01* X83119535Y-93560897D01* X83071163Y-93647230D01* X83055285Y-93773757D01* X83050855Y-93781539D01* X83043676Y-93784000D01* X82564323Y-93784000D01* X82556050Y-93780573D01* X82552714Y-93773757D01* X82536834Y-93647230D01* X82536834Y-93647229D01* X82488463Y-93560896D01* X82413569Y-93498052D01* X82317080Y-93431914D01* X82316617Y-93431561D01* X82212624Y-93343249D01* X82208537Y-93335283D01* X82211280Y-93326759D01* X82211905Y-93326080D01* X82795721Y-92741292D01* X82803990Y-92737859D01* X82812264Y-92741278D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,UART A RX*% G36* X76414668Y-85331068D02* G01* X76421499Y-85336856D01* X76422236Y-85345780D01* X76416447Y-85352612D01* X76413748Y-85353603D01* X73815266Y-85958562D01* X73806431Y-85957101D01* X73801249Y-85949949D01* X73763999Y-85797792D01* X73723999Y-85653978D01* X73683999Y-85529739D01* X73683999Y-85529738D01* X73643997Y-85425075D01* X73605112Y-85342365D01* X73604000Y-85337387D01* X73604000Y-84844432D01* X73606935Y-84836681D01* X73644000Y-84794778D01* X73644003Y-84794774D01* X73684002Y-84737565D01* X73684002Y-84737564D01* X73724000Y-84668365D01* X73763999Y-84587179D01* X73799804Y-84503773D01* X73806216Y-84497522D01* X73814127Y-84497247D01* X76414668Y-85331068D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,OA+*% G36* X85576597Y-100778699D02* G01* X85581725Y-100786040D01* X85582000Y-100788560D01* X85582000Y-101563285D01* X85578573Y-101571558D01* X85570300Y-101574985D01* X85570285Y-101574985D01* X84793317Y-101574014D01* X84785049Y-101570577D01* X84781639Y-101562689D01* X84776384Y-101398022D01* X84762992Y-101273492D01* X84747009Y-101166112D01* X84733639Y-101041800D01* X84733609Y-101041384D01* X84728499Y-100881242D01* X84728499Y-100877306D01* X84731926Y-100869033D01* X84740199Y-100865606D01* X85019394Y-100865606D01* X85027667Y-100869033D01* X85030563Y-100873822D01* X85058661Y-100963889D01* X85058662Y-100963890D01* X85058662Y-100963891D01* X85142148Y-100954649D01* X85265703Y-100887104D01* X85415249Y-100811150D01* X85418022Y-100810159D01* X85567781Y-100777135D01* X85576597Y-100778699D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,VBUS1*% G36* X74746261Y-101446696D02* G01* X74809536Y-101510601D01* X74880402Y-101569484D01* X74951268Y-101615678D01* X75022134Y-101649183D01* X75084599Y-101667532D01* X75091569Y-101673151D01* X75093000Y-101678757D01* X75093000Y-102161242D01* X75089573Y-102169515D01* X75084598Y-102172468D01* X75022131Y-102190817D01* X74951269Y-102224320D01* X74880402Y-102270514D01* X74809535Y-102329398D01* X74746261Y-102393303D01* X74738005Y-102396771D01* X74730415Y-102394024D01* X74583614Y-102270514D01* X74177640Y-101928952D01* X74173516Y-101921004D01* X74176220Y-101912468D01* X74177641Y-101911047D01* X74453736Y-101678757D01* X74730417Y-101445974D01* X74738951Y-101443271D01* X74746261Y-101446696D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(U1-3V3)*% G36* X93641240Y-54271280D02* G01* X93641931Y-54271916D01* X93747272Y-54377082D01* X94226706Y-54855720D01* X94230140Y-54863990D01* X94226720Y-54872266D01* X94226706Y-54872280D01* X93641933Y-55456081D01* X93633657Y-55459501D01* X93625387Y-55456067D01* X93624757Y-55455383D01* X93536435Y-55351378D01* X93536082Y-55350916D01* X93469946Y-55254429D01* X93407103Y-55179536D01* X93320770Y-55131164D01* X93320769Y-55131163D01* X93320768Y-55131163D01* X93194243Y-55115285D01* X93186461Y-55110855D01* X93184000Y-55103676D01* X93184000Y-54624323D01* X93187427Y-54616050D01* X93194241Y-54612714D01* X93320770Y-54596834D01* X93407103Y-54548463D01* X93469946Y-54473569D01* X93536092Y-54377068D01* X93536437Y-54376618D01* X93624751Y-54272623D01* X93632716Y-54268537D01* X93641240Y-54271280D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,VBUS2*% G36* X45784268Y-101581279D02* G01* X45784279Y-101581290D01* X46508038Y-102306014D01* X46511459Y-102314290D01* X46508027Y-102322561D01* X46500656Y-102325948D01* X46458976Y-102329153D01* X46425999Y-102331689D01* X46425995Y-102331689D01* X46425993Y-102331690D01* X46326006Y-102355530D01* X46325999Y-102355532D01* X46226012Y-102395527D01* X46226010Y-102395528D01* X46226003Y-102395531D01* X46226000Y-102395533D01* X46173708Y-102424897D01* X46125999Y-102451689D01* X46029069Y-102521781D01* X46022213Y-102524000D01* X45529787Y-102524000D01* X45522931Y-102521781D01* X45425999Y-102451689D01* X45325999Y-102395533D01* X45325991Y-102395530D01* X45325988Y-102395528D01* X45325986Y-102395527D01* X45225999Y-102355532D01* X45225992Y-102355530D01* X45126005Y-102331690D01* X45126003Y-102331689D01* X45126000Y-102331689D01* X45088906Y-102328836D01* X45051343Y-102325948D01* X45043357Y-102321896D01* X45040574Y-102313385D01* X45043960Y-102306015D01* X45767721Y-101581289D01* X45775992Y-101577858D01* X45784268Y-101581279D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,VBUS1*% G36* X96881066Y-43858538D02* G01* X96886855Y-43865370D01* X96887056Y-43866070D01* X96924000Y-44011946D01* X96964000Y-44150920D01* X97003997Y-44270916D01* X97044000Y-44371948D01* X97044000Y-44371949D01* X97082817Y-44451573D01* X97084000Y-44456700D01* X97084000Y-44951299D01* X97082817Y-44956426D01* X97044000Y-45036050D01* X97044000Y-45036051D01* X97003997Y-45137083D01* X96964000Y-45257079D01* X96924000Y-45396053D01* X96887056Y-45541929D01* X96881703Y-45549108D01* X96872842Y-45550399D01* X96872142Y-45550198D01* X94267745Y-44715140D01* X94260914Y-44709352D01* X94260177Y-44700428D01* X94265966Y-44693596D01* X94267743Y-44692860D01* X96872144Y-43857801D01* X96881066Y-43858538D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,Net-(J2-Pin_3)*% G36* X47191387Y-92606904D02* G01* X47195888Y-92614645D01* X47195985Y-92615789D01* X47217671Y-93220890D01* X47239820Y-93802891D01* X47261968Y-94348891D01* X47284117Y-94858892D01* X47306024Y-95327730D01* X47302987Y-95336154D01* X47302610Y-95336549D01* X46959901Y-95679258D01* X46951628Y-95682685D01* X46944592Y-95680333D01* X46803543Y-95574158D01* X46803532Y-95574150D01* X46654356Y-95486185D01* X46654355Y-95486184D01* X46505177Y-95422544D01* X46356001Y-95383233D01* X46355999Y-95383232D01* X46355997Y-95383232D01* X46355995Y-95383231D01* X46355987Y-95383230D01* X46217912Y-95369363D01* X46210022Y-95365127D01* X46207397Y-95357115D01* X46344311Y-92727230D01* X46348163Y-92719148D01* X46354428Y-92716246D01* X47182730Y-92604613D01* X47191387Y-92606904D01* G37* %TD.AperFunction*% %TD*% %TA.AperFunction,Conductor*% %TO.N,/AD-*% G36* X77091527Y-91872685D02* G01* X77294721Y-92075879D01* X77298033Y-92082516D01* X77298789Y-92087872D01* X77300092Y-92096021D01* X77301191Y-92101993D01* X77301394Y-92103093D01* X77302450Y-92107950D01* X77300859Y-92116763D01* X77299290Y-92118709D01* X76464758Y-92953241D01* X76456485Y-92956668D01* X76448212Y-92953241D01* X76446026Y-92950212D01* X76036011Y-92132440D01* X76035366Y-92123508D01* X76041226Y-92116737D01* X76047335Y-92115528D01* X76238483Y-92129730D01* X76450201Y-92112846D01* X76661919Y-92063349D01* X76873637Y-91981238D01* X77077682Y-91870670D01* X77086586Y-91869743D01* X77091527Y-91872685D01* G37* %TD.AperFunction*% %TD*% M02* ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-F_Mask.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-09-14T16:33:58+02:00*% %TF.ProjectId,DeskHop_Rev1,4465736b-486f-4705-9f52-6576312e6b69,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Soldermask,Top*% %TF.FilePolarity,Negative*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-09-14 16:33:58* %MOMM*% %LPD*% G01* G04 APERTURE LIST* G04 Aperture macros list* %AMRoundRect* 0 Rectangle with rounded corners* 0 $1 Rounding radius* 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners* 0 Add a 4 corners polygon primitive as box body* 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0* 0 Add four circle primitives for the rounded corners* 1,1,$1+$1,$2,$3* 1,1,$1+$1,$4,$5* 1,1,$1+$1,$6,$7* 1,1,$1+$1,$8,$9* 0 Add four rect primitives between the rounded corners* 20,1,$1+$1,$2,$3,$4,$5,0* 20,1,$1+$1,$4,$5,$6,$7,0* 20,1,$1+$1,$6,$7,$8,$9,0* 20,1,$1+$1,$8,$9,$2,$3,0*% G04 Aperture macros list end* %ADD10O,1.800000X1.800000*% %ADD11O,1.500000X1.500000*% %ADD12O,1.700000X1.700000*% %ADD13R,3.500000X1.700000*% %ADD14R,1.700000X1.700000*% %ADD15R,1.700000X3.500000*% %ADD16RoundRect,0.250000X-0.250000X-0.475000X0.250000X-0.475000X0.250000X0.475000X-0.250000X0.475000X0*% %ADD17R,1.600000X1.500000*% %ADD18C,1.600000*% %ADD19C,3.000000*% %ADD20RoundRect,0.250000X-0.475000X0.250000X-0.475000X-0.250000X0.475000X-0.250000X0.475000X0.250000X0*% %ADD21R,0.550013X1.000000*% %ADD22C,3.100000*% %ADD23C,5.400000*% %ADD24RoundRect,0.250000X-0.450000X0.262500X-0.450000X-0.262500X0.450000X-0.262500X0.450000X0.262500X0*% %ADD25RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*% %ADD26RoundRect,0.250000X0.250000X0.475000X-0.250000X0.475000X-0.250000X-0.475000X0.250000X-0.475000X0*% G04 APERTURE END LIST* D10* %TO.C,U1*% X82619000Y-44834000D03* D11* X82919000Y-47864000D03* X87769000Y-47864000D03* D10* X88069000Y-44834000D03* D12* X76454000Y-44704000D03* D13* X75554000Y-44704000D03* D12* X76454000Y-47244000D03* D13* X75554000Y-47244000D03* D14* X76454000Y-49784000D03* D13* X75554000Y-49784000D03* D12* X76454000Y-52324000D03* D13* X75554000Y-52324000D03* D12* X76454000Y-54864000D03* D13* X75554000Y-54864000D03* D12* X76454000Y-57404000D03* D13* X75554000Y-57404000D03* D12* X76454000Y-59944000D03* D13* X75554000Y-59944000D03* D14* X76454000Y-62484000D03* D13* X75554000Y-62484000D03* D12* X76454000Y-65024000D03* D13* X75554000Y-65024000D03* D12* X76454000Y-67564000D03* D13* X75554000Y-67564000D03* D12* X76454000Y-70104000D03* D13* X75554000Y-70104000D03* D12* X76454000Y-72644000D03* D13* X75554000Y-72644000D03* D14* X76454000Y-75184000D03* D13* X75554000Y-75184000D03* D12* X76454000Y-77724000D03* D13* X75554000Y-77724000D03* D12* X76454000Y-80264000D03* D13* X75554000Y-80264000D03* D12* X76454000Y-82804000D03* D13* X75554000Y-82804000D03* D12* X76454000Y-85344000D03* D13* X75554000Y-85344000D03* D14* X76454000Y-87884000D03* D13* X75554000Y-87884000D03* D12* X76454000Y-90424000D03* D13* X75554000Y-90424000D03* D12* X76454000Y-92964000D03* D13* X75554000Y-92964000D03* D12* X94234000Y-92964000D03* D13* X95134000Y-92964000D03* D12* X94234000Y-90424000D03* D13* X95134000Y-90424000D03* D14* X94234000Y-87884000D03* D13* X95134000Y-87884000D03* D12* X94234000Y-85344000D03* D13* X95134000Y-85344000D03* D12* X94234000Y-82804000D03* D13* X95134000Y-82804000D03* D12* X94234000Y-80264000D03* D13* X95134000Y-80264000D03* D12* X94234000Y-77724000D03* D13* X95134000Y-77724000D03* D14* X94234000Y-75184000D03* D13* X95134000Y-75184000D03* D12* X94234000Y-72644000D03* D13* X95134000Y-72644000D03* D12* X94234000Y-70104000D03* D13* X95134000Y-70104000D03* D12* X94234000Y-67564000D03* D13* X95134000Y-67564000D03* D12* X94234000Y-65024000D03* D13* X95134000Y-65024000D03* D14* X94234000Y-62484000D03* D13* X95134000Y-62484000D03* D12* X94234000Y-59944000D03* D13* X95134000Y-59944000D03* D12* X94234000Y-57404000D03* D13* X95134000Y-57404000D03* D12* X94234000Y-54864000D03* D13* X95134000Y-54864000D03* D12* X94234000Y-52324000D03* D13* X95134000Y-52324000D03* D14* X94234000Y-49784000D03* D13* X95134000Y-49784000D03* D12* X94234000Y-47244000D03* D13* X95134000Y-47244000D03* D12* X94234000Y-44704000D03* D13* X95134000Y-44704000D03* D12* X82804000Y-92734000D03* D15* X82804000Y-93634000D03* D14* X85344000Y-92734000D03* D15* X85344000Y-93634000D03* D12* X87884000Y-92734000D03* D15* X87884000Y-93634000D03* %TD*% D10* %TO.C,U2*% X46160523Y-44818249D03* D11* X46460523Y-47848249D03* X51310523Y-47848249D03* D10* X51610523Y-44818249D03* D12* X39995523Y-44688249D03* D13* X39095523Y-44688249D03* D12* X39995523Y-47228249D03* D13* X39095523Y-47228249D03* D14* X39995523Y-49768249D03* D13* X39095523Y-49768249D03* D12* X39995523Y-52308249D03* D13* X39095523Y-52308249D03* D12* X39995523Y-54848249D03* D13* X39095523Y-54848249D03* D12* X39995523Y-57388249D03* D13* X39095523Y-57388249D03* D12* X39995523Y-59928249D03* D13* X39095523Y-59928249D03* D14* X39995523Y-62468249D03* D13* X39095523Y-62468249D03* D12* X39995523Y-65008249D03* D13* X39095523Y-65008249D03* D12* X39995523Y-67548249D03* D13* X39095523Y-67548249D03* D12* X39995523Y-70088249D03* D13* X39095523Y-70088249D03* D12* X39995523Y-72628249D03* D13* X39095523Y-72628249D03* D14* X39995523Y-75168249D03* D13* X39095523Y-75168249D03* D12* X39995523Y-77708249D03* D13* X39095523Y-77708249D03* D12* X39995523Y-80248249D03* D13* X39095523Y-80248249D03* D12* X39995523Y-82788249D03* D13* X39095523Y-82788249D03* D12* X39995523Y-85328249D03* D13* X39095523Y-85328249D03* D14* X39995523Y-87868249D03* D13* X39095523Y-87868249D03* D12* X39995523Y-90408249D03* D13* X39095523Y-90408249D03* D12* X39995523Y-92948249D03* D13* X39095523Y-92948249D03* D12* X57775523Y-92948249D03* D13* X58675523Y-92948249D03* D12* X57775523Y-90408249D03* D13* X58675523Y-90408249D03* D14* X57775523Y-87868249D03* D13* X58675523Y-87868249D03* D12* X57775523Y-85328249D03* D13* X58675523Y-85328249D03* D12* X57775523Y-82788249D03* D13* X58675523Y-82788249D03* D12* X57775523Y-80248249D03* D13* X58675523Y-80248249D03* D12* X57775523Y-77708249D03* D13* X58675523Y-77708249D03* D14* X57775523Y-75168249D03* D13* X58675523Y-75168249D03* D12* X57775523Y-72628249D03* D13* X58675523Y-72628249D03* D12* X57775523Y-70088249D03* D13* X58675523Y-70088249D03* D12* X57775523Y-67548249D03* D13* X58675523Y-67548249D03* D12* X57775523Y-65008249D03* D13* X58675523Y-65008249D03* D14* X57775523Y-62468249D03* D13* X58675523Y-62468249D03* D12* X57775523Y-59928249D03* D13* X58675523Y-59928249D03* D12* X57775523Y-57388249D03* D13* X58675523Y-57388249D03* D12* X57775523Y-54848249D03* D13* X58675523Y-54848249D03* D12* X57775523Y-52308249D03* D13* X58675523Y-52308249D03* D14* X57775523Y-49768249D03* D13* X58675523Y-49768249D03* D12* X57775523Y-47228249D03* D13* X58675523Y-47228249D03* D12* X57775523Y-44688249D03* D13* X58675523Y-44688249D03* D12* X46345523Y-92718249D03* D15* X46345523Y-93618249D03* D14* X48885523Y-92718249D03* D15* X48885523Y-93618249D03* D12* X51425523Y-92718249D03* D15* X51425523Y-93618249D03* %TD*% D16* %TO.C,C2*% X70424000Y-74930000D03* X72324000Y-74930000D03* %TD*% D17* %TO.C,J4*% X45776000Y-101574000D03* D18* X48276000Y-101574000D03* X50276000Y-101574000D03* X52776000Y-101574000D03* D19* X42706000Y-104284000D03* X55846000Y-104284000D03* %TD*% D14* %TO.C,J3*% X95667537Y-99795757D03* D12* X95667537Y-102335757D03* X95667537Y-104875757D03* %TD*% D20* %TO.C,C4*% X74168000Y-101920000D03* X74168000Y-103820000D03* %TD*% D21* %TO.C,U3*% X80756396Y-95359949D03* X79806434Y-95359949D03* X78856472Y-95359949D03* X78856472Y-98160051D03* X79806434Y-98160051D03* X80756396Y-98160051D03* %TD*% D22* %TO.C,H2*% X96774000Y-111506000D03* D23* X96774000Y-111506000D03* %TD*% D24* %TO.C,R3*% X37846000Y-96115500D03* X37846000Y-97940500D03* %TD*% %TO.C,R2*% X76403200Y-95861500D03* X76403200Y-97686500D03* %TD*% D17* %TO.C,J1*% X81082000Y-101574000D03* D18* X83582000Y-101574000D03* X85582000Y-101574000D03* X88082000Y-101574000D03* D19* X78012000Y-104284000D03* X91152000Y-104284000D03* %TD*% D21* %TO.C,U5*% X44419860Y-95369949D03* X43469898Y-95369949D03* X42519936Y-95369949D03* X42519936Y-98170051D03* X43469898Y-98170051D03* X44419860Y-98170051D03* %TD*% D24* %TO.C,R1*% X74015600Y-95861500D03* X74015600Y-97686500D03* %TD*% D22* %TO.C,H1*% X37846000Y-111506000D03* D23* X37846000Y-111506000D03* %TD*% D25* %TO.C,U4*% X64835000Y-82571110D03* X64835000Y-83841110D03* X64835000Y-85111110D03* X64835000Y-86381110D03* X69785000Y-86381110D03* X69785000Y-85111110D03* X69785000Y-83841110D03* X69785000Y-82571110D03* %TD*% D24* %TO.C,R4*% X40005000Y-96115500D03* X40005000Y-97940500D03* %TD*% D20* %TO.C,C3*% X38100000Y-102301000D03* X38100000Y-104201000D03* %TD*% D14* %TO.C,J2*% X60731042Y-99717876D03* D12* X60731042Y-102257876D03* X60731042Y-104797876D03* %TD*% D26* %TO.C,C1*% X64069000Y-74930000D03* X62169000Y-74930000D03* %TD*% D22* %TO.C,H3*% X67315520Y-45178990D03* D23* X67315520Y-45178990D03* %TD*% M02* ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-F_Paste.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-09-14T16:33:58+02:00*% %TF.ProjectId,DeskHop_Rev1,4465736b-486f-4705-9f52-6576312e6b69,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Paste,Top*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-09-14 16:33:58* %MOMM*% %LPD*% G01* G04 APERTURE LIST* G04 Aperture macros list* %AMRoundRect* 0 Rectangle with rounded corners* 0 $1 Rounding radius* 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners* 0 Add a 4 corners polygon primitive as box body* 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0* 0 Add four circle primitives for the rounded corners* 1,1,$1+$1,$2,$3* 1,1,$1+$1,$4,$5* 1,1,$1+$1,$6,$7* 1,1,$1+$1,$8,$9* 0 Add four rect primitives between the rounded corners* 20,1,$1+$1,$2,$3,$4,$5,0* 20,1,$1+$1,$4,$5,$6,$7,0* 20,1,$1+$1,$6,$7,$8,$9,0* 20,1,$1+$1,$8,$9,$2,$3,0*% G04 Aperture macros list end* %ADD10C,0.100000*% %ADD11RoundRect,0.250000X-0.250000X-0.475000X0.250000X-0.475000X0.250000X0.475000X-0.250000X0.475000X0*% %ADD12RoundRect,0.250000X-0.475000X0.250000X-0.475000X-0.250000X0.475000X-0.250000X0.475000X0.250000X0*% %ADD13R,0.550013X1.000000*% %ADD14RoundRect,0.250000X-0.450000X0.262500X-0.450000X-0.262500X0.450000X-0.262500X0.450000X0.262500X0*% %ADD15RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*% %ADD16RoundRect,0.250000X0.250000X0.475000X-0.250000X0.475000X-0.250000X-0.475000X0.250000X-0.475000X0*% G04 APERTURE END LIST* D10* X60317381Y-83568061D02* X57015381Y-83568061D01* X57015381Y-82044061D01* X60317381Y-82044061D01* X60317381Y-83568061D01* G36* X60317381Y-83568061D02* G01* X57015381Y-83568061D01* X57015381Y-82044061D01* X60317381Y-82044061D01* X60317381Y-83568061D01* G37* X96774000Y-81026000D02* X93472000Y-81026000D01* X93472000Y-79502000D01* X96774000Y-79502000D01* X96774000Y-81026000D01* G36* X96774000Y-81026000D02* G01* X93472000Y-81026000D01* X93472000Y-79502000D01* X96774000Y-79502000D01* X96774000Y-81026000D01* G37* X60315734Y-70825047D02* X57013734Y-70825047D01* X57013734Y-69301047D01* X60315734Y-69301047D01* X60315734Y-70825047D01* G36* X60315734Y-70825047D02* G01* X57013734Y-70825047D01* X57013734Y-69301047D01* X60315734Y-69301047D01* X60315734Y-70825047D01* G37* X40721244Y-68282544D02* X37419244Y-68282544D01* X37419244Y-66758544D01* X40721244Y-66758544D01* X40721244Y-68282544D01* G36* X40721244Y-68282544D02* G01* X37419244Y-68282544D01* X37419244Y-66758544D01* X40721244Y-66758544D01* X40721244Y-68282544D01* G37* X77216000Y-88646000D02* X73914000Y-88646000D01* X73914000Y-87122000D01* X77216000Y-87122000D01* X77216000Y-88646000D01* G36* X77216000Y-88646000D02* G01* X73914000Y-88646000D01* X73914000Y-87122000D01* X77216000Y-87122000D01* X77216000Y-88646000D01* G37* X40721244Y-78442544D02* X37419244Y-78442544D01* X37419244Y-76918544D01* X40721244Y-76918544D01* X40721244Y-78442544D01* G36* X40721244Y-78442544D02* G01* X37419244Y-78442544D01* X37419244Y-76918544D01* X40721244Y-76918544D01* X40721244Y-78442544D01* G37* X40721244Y-60662544D02* X37419244Y-60662544D01* X37419244Y-59138544D01* X40721244Y-59138544D01* X40721244Y-60662544D01* G36* X40721244Y-60662544D02* G01* X37419244Y-60662544D01* X37419244Y-59138544D01* X40721244Y-59138544D01* X40721244Y-60662544D01* G37* X96774000Y-50546000D02* X93472000Y-50546000D01* X93472000Y-49022000D01* X96774000Y-49022000D01* X96774000Y-50546000D01* G36* X96774000Y-50546000D02* G01* X93472000Y-50546000D01* X93472000Y-49022000D01* X96774000Y-49022000D01* X96774000Y-50546000D01* G37* X96774000Y-70866000D02* X93472000Y-70866000D01* X93472000Y-69342000D01* X96774000Y-69342000D01* X96774000Y-70866000D01* G36* X96774000Y-70866000D02* G01* X93472000Y-70866000D01* X93472000Y-69342000D01* X96774000Y-69342000D01* X96774000Y-70866000D01* G37* X77216000Y-81026000D02* X73914000Y-81026000D01* X73914000Y-79502000D01* X77216000Y-79502000D01* X77216000Y-81026000D01* G36* X77216000Y-81026000D02* G01* X73914000Y-81026000D01* X73914000Y-79502000D01* X77216000Y-79502000D01* X77216000Y-81026000D01* G37* X96774000Y-88646000D02* X93472000Y-88646000D01* X93472000Y-87122000D01* X96774000Y-87122000D01* X96774000Y-88646000D01* G36* X96774000Y-88646000D02* G01* X93472000Y-88646000D01* X93472000Y-87122000D01* X96774000Y-87122000D01* X96774000Y-88646000D01* G37* X60315734Y-73365047D02* X57013734Y-73365047D01* X57013734Y-71841047D01* X60315734Y-71841047D01* X60315734Y-73365047D01* G36* X60315734Y-73365047D02* G01* X57013734Y-73365047D01* X57013734Y-71841047D01* X60315734Y-71841047D01* X60315734Y-73365047D01* G37* X96774000Y-68326000D02* X93472000Y-68326000D01* X93472000Y-66802000D01* X96774000Y-66802000D01* X96774000Y-68326000D01* G36* X96774000Y-68326000D02* G01* X93472000Y-68326000D01* X93472000Y-66802000D01* X96774000Y-66802000D01* X96774000Y-68326000D01* G37* X60315734Y-75905047D02* X57013734Y-75905047D01* X57013734Y-74381047D01* X60315734Y-74381047D01* X60315734Y-75905047D01* G36* X60315734Y-75905047D02* G01* X57013734Y-75905047D01* X57013734Y-74381047D01* X60315734Y-74381047D01* X60315734Y-75905047D01* G37* X96774000Y-91186000D02* X93472000Y-91186000D01* X93472000Y-89662000D01* X96774000Y-89662000D01* X96774000Y-91186000D01* G36* X96774000Y-91186000D02* G01* X93472000Y-91186000D01* X93472000Y-89662000D01* X96774000Y-89662000D01* X96774000Y-91186000D01* G37* X49654297Y-95249999D02* X48130297Y-95249999D01* X48130297Y-91947999D01* X49654297Y-91947999D01* X49654297Y-95249999D01* G36* X49654297Y-95249999D02* G01* X48130297Y-95249999D01* X48130297Y-91947999D01* X49654297Y-91947999D01* X49654297Y-95249999D01* G37* X40721244Y-73362544D02* X37419244Y-73362544D01* X37419244Y-71838544D01* X40721244Y-71838544D01* X40721244Y-73362544D01* G36* X40721244Y-73362544D02* G01* X37419244Y-73362544D01* X37419244Y-71838544D01* X40721244Y-71838544D01* X40721244Y-73362544D01* G37* X77216000Y-68326000D02* X73914000Y-68326000D01* X73914000Y-66802000D01* X77216000Y-66802000D01* X77216000Y-68326000D01* G36* X77216000Y-68326000D02* G01* X73914000Y-68326000D01* X73914000Y-66802000D01* X77216000Y-66802000D01* X77216000Y-68326000D01* G37* X96774000Y-65786000D02* X93472000Y-65786000D01* X93472000Y-64262000D01* X96774000Y-64262000D01* X96774000Y-65786000D01* G36* X96774000Y-65786000D02* G01* X93472000Y-65786000D01* X93472000Y-64262000D01* X96774000Y-64262000D01* X96774000Y-65786000D01* G37* X96774000Y-86106000D02* X93472000Y-86106000D01* X93472000Y-84582000D01* X96774000Y-84582000D01* X96774000Y-86106000D01* G36* X96774000Y-86106000D02* G01* X93472000Y-86106000D01* X93472000Y-84582000D01* X96774000Y-84582000D01* X96774000Y-86106000D01* G37* X60317381Y-93728061D02* X57015381Y-93728061D01* X57015381Y-92204061D01* X60317381Y-92204061D01* X60317381Y-93728061D01* G36* X60317381Y-93728061D02* G01* X57015381Y-93728061D01* X57015381Y-92204061D01* X60317381Y-92204061D01* X60317381Y-93728061D01* G37* X77216000Y-50546000D02* X73914000Y-50546000D01* X73914000Y-49022000D01* X77216000Y-49022000D01* X77216000Y-50546000D01* G36* X77216000Y-50546000D02* G01* X73914000Y-50546000D01* X73914000Y-49022000D01* X77216000Y-49022000D01* X77216000Y-50546000D01* G37* X96774000Y-58166000D02* X93472000Y-58166000D01* X93472000Y-56642000D01* X96774000Y-56642000D01* X96774000Y-58166000D01* G36* X96774000Y-58166000D02* G01* X93472000Y-58166000D01* X93472000Y-56642000D01* X96774000Y-56642000D01* X96774000Y-58166000D01* G37* X40717563Y-47970959D02* X37415563Y-47970959D01* X37415563Y-46446959D01* X40717563Y-46446959D01* X40717563Y-47970959D01* G36* X40717563Y-47970959D02* G01* X37415563Y-47970959D01* X37415563Y-46446959D01* X40717563Y-46446959D01* X40717563Y-47970959D01* G37* X77216000Y-60706000D02* X73914000Y-60706000D01* X73914000Y-59182000D01* X77216000Y-59182000D01* X77216000Y-60706000D01* G36* X77216000Y-60706000D02* G01* X73914000Y-60706000D01* X73914000Y-59182000D01* X77216000Y-59182000D01* X77216000Y-60706000D01* G37* X77216000Y-63246000D02* X73914000Y-63246000D01* X73914000Y-61722000D01* X77216000Y-61722000D01* X77216000Y-63246000D01* G36* X77216000Y-63246000D02* G01* X73914000Y-63246000D01* X73914000Y-61722000D01* X77216000Y-61722000D01* X77216000Y-63246000D01* G37* X60275563Y-53050959D02* X56973563Y-53050959D01* X56973563Y-51526959D01* X60275563Y-51526959D01* X60275563Y-53050959D01* G36* X60275563Y-53050959D02* G01* X56973563Y-53050959D01* X56973563Y-51526959D01* X60275563Y-51526959D01* X60275563Y-53050959D01* G37* X77216000Y-91186000D02* X73914000Y-91186000D01* X73914000Y-89662000D01* X77216000Y-89662000D01* X77216000Y-91186000D01* G36* X77216000Y-91186000D02* G01* X73914000Y-91186000D01* X73914000Y-89662000D01* X77216000Y-89662000D01* X77216000Y-91186000D01* G37* X83566000Y-95250000D02* X82042000Y-95250000D01* X82042000Y-91948000D01* X83566000Y-91948000D01* X83566000Y-95250000D01* G36* X83566000Y-95250000D02* G01* X82042000Y-95250000D01* X82042000Y-91948000D01* X83566000Y-91948000D01* X83566000Y-95250000D01* G37* X96774000Y-48006000D02* X93472000Y-48006000D01* X93472000Y-46482000D01* X96774000Y-46482000D01* X96774000Y-48006000D01* G36* X96774000Y-48006000D02* G01* X93472000Y-48006000D01* X93472000Y-46482000D01* X96774000Y-46482000D01* X96774000Y-48006000D01* G37* X40721244Y-80982544D02* X37419244Y-80982544D01* X37419244Y-79458544D01* X40721244Y-79458544D01* X40721244Y-80982544D01* G36* X40721244Y-80982544D02* G01* X37419244Y-80982544D01* X37419244Y-79458544D01* X40721244Y-79458544D01* X40721244Y-80982544D01* G37* X40721244Y-55582544D02* X37419244Y-55582544D01* X37419244Y-54058544D01* X40721244Y-54058544D01* X40721244Y-55582544D01* G36* X40721244Y-55582544D02* G01* X37419244Y-55582544D01* X37419244Y-54058544D01* X40721244Y-54058544D01* X40721244Y-55582544D01* G37* X40717563Y-50510959D02* X37415563Y-50510959D01* X37415563Y-48986959D01* X40717563Y-48986959D01* X40717563Y-50510959D01* G36* X40717563Y-50510959D02* G01* X37415563Y-50510959D01* X37415563Y-48986959D01* X40717563Y-48986959D01* X40717563Y-50510959D01* G37* X40721244Y-86062544D02* X37419244Y-86062544D01* X37419244Y-84538544D01* X40721244Y-84538544D01* X40721244Y-86062544D01* G36* X40721244Y-86062544D02* G01* X37419244Y-86062544D01* X37419244Y-84538544D01* X40721244Y-84538544D01* X40721244Y-86062544D01* G37* X40721244Y-75902544D02* X37419244Y-75902544D01* X37419244Y-74378544D01* X40721244Y-74378544D01* X40721244Y-75902544D01* G36* X40721244Y-75902544D02* G01* X37419244Y-75902544D01* X37419244Y-74378544D01* X40721244Y-74378544D01* X40721244Y-75902544D01* G37* X40721244Y-58122544D02* X37419244Y-58122544D01* X37419244Y-56598544D01* X40721244Y-56598544D01* X40721244Y-58122544D01* G36* X40721244Y-58122544D02* G01* X37419244Y-58122544D01* X37419244Y-56598544D01* X40721244Y-56598544D01* X40721244Y-58122544D01* G37* X40717563Y-45430959D02* X37415563Y-45430959D01* X37415563Y-43906959D01* X40717563Y-43906959D01* X40717563Y-45430959D01* G36* X40717563Y-45430959D02* G01* X37415563Y-45430959D01* X37415563Y-43906959D01* X40717563Y-43906959D01* X40717563Y-45430959D01* G37* X60317381Y-88648061D02* X57015381Y-88648061D01* X57015381Y-87124061D01* X60317381Y-87124061D01* X60317381Y-88648061D01* G36* X60317381Y-88648061D02* G01* X57015381Y-88648061D01* X57015381Y-87124061D01* X60317381Y-87124061D01* X60317381Y-88648061D01* G37* X77216000Y-55626000D02* X73914000Y-55626000D01* X73914000Y-54102000D01* X77216000Y-54102000D01* X77216000Y-55626000D01* G36* X77216000Y-55626000D02* G01* X73914000Y-55626000D01* X73914000Y-54102000D01* X77216000Y-54102000D01* X77216000Y-55626000D01* G37* X86106000Y-95250000D02* X84582000Y-95250000D01* X84582000Y-91948000D01* X86106000Y-91948000D01* X86106000Y-95250000D01* G36* X86106000Y-95250000D02* G01* X84582000Y-95250000D01* X84582000Y-91948000D01* X86106000Y-91948000D01* X86106000Y-95250000D01* G37* X77216000Y-45466000D02* X73914000Y-45466000D01* X73914000Y-43942000D01* X77216000Y-43942000D01* X77216000Y-45466000D01* G36* X77216000Y-45466000D02* G01* X73914000Y-45466000D01* X73914000Y-43942000D01* X77216000Y-43942000D01* X77216000Y-45466000D01* G37* X96774000Y-75946000D02* X93472000Y-75946000D01* X93472000Y-74422000D01* X96774000Y-74422000D01* X96774000Y-75946000D01* G36* X96774000Y-75946000D02* G01* X93472000Y-75946000D01* X93472000Y-74422000D01* X96774000Y-74422000D01* X96774000Y-75946000D01* G37* X40721244Y-91142544D02* X37419244Y-91142544D01* X37419244Y-89618544D01* X40721244Y-89618544D01* X40721244Y-91142544D01* G36* X40721244Y-91142544D02* G01* X37419244Y-91142544D01* X37419244Y-89618544D01* X40721244Y-89618544D01* X40721244Y-91142544D01* G37* X47114297Y-95249999D02* X45590297Y-95249999D01* X45590297Y-91947999D01* X47114297Y-91947999D01* X47114297Y-95249999D01* G36* X47114297Y-95249999D02* G01* X45590297Y-95249999D01* X45590297Y-91947999D01* X47114297Y-91947999D01* X47114297Y-95249999D01* G37* X60275563Y-47970959D02* X56973563Y-47970959D01* X56973563Y-46446959D01* X60275563Y-46446959D01* X60275563Y-47970959D01* G36* X60275563Y-47970959D02* G01* X56973563Y-47970959D01* X56973563Y-46446959D01* X60275563Y-46446959D01* X60275563Y-47970959D01* G37* X96774000Y-45466000D02* X93472000Y-45466000D01* X93472000Y-43942000D01* X96774000Y-43942000D01* X96774000Y-45466000D01* G36* X96774000Y-45466000D02* G01* X93472000Y-45466000D01* X93472000Y-43942000D01* X96774000Y-43942000D01* X96774000Y-45466000D01* G37* X77216000Y-75946000D02* X73914000Y-75946000D01* X73914000Y-74422000D01* X77216000Y-74422000D01* X77216000Y-75946000D01* G36* X77216000Y-75946000D02* G01* X73914000Y-75946000D01* X73914000Y-74422000D01* X77216000Y-74422000D01* X77216000Y-75946000D01* G37* X96774000Y-63246000D02* X93472000Y-63246000D01* X93472000Y-61722000D01* X96774000Y-61722000D01* X96774000Y-63246000D01* G36* X96774000Y-63246000D02* G01* X93472000Y-63246000D01* X93472000Y-61722000D01* X96774000Y-61722000D01* X96774000Y-63246000D01* G37* X60275563Y-50510959D02* X56973563Y-50510959D01* X56973563Y-48986959D01* X60275563Y-48986959D01* X60275563Y-50510959D01* G36* X60275563Y-50510959D02* G01* X56973563Y-50510959D01* X56973563Y-48986959D01* X60275563Y-48986959D01* X60275563Y-50510959D01* G37* X60315734Y-63205047D02* X57013734Y-63205047D01* X57013734Y-61681047D01* X60315734Y-61681047D01* X60315734Y-63205047D01* G36* X60315734Y-63205047D02* G01* X57013734Y-63205047D01* X57013734Y-61681047D01* X60315734Y-61681047D01* X60315734Y-63205047D01* G37* X96774000Y-55626000D02* X93472000Y-55626000D01* X93472000Y-54102000D01* X96774000Y-54102000D01* X96774000Y-55626000D01* G36* X96774000Y-55626000D02* G01* X93472000Y-55626000D01* X93472000Y-54102000D01* X96774000Y-54102000D01* X96774000Y-55626000D01* G37* X60317381Y-91188061D02* X57015381Y-91188061D01* X57015381Y-89664061D01* X60317381Y-89664061D01* X60317381Y-91188061D01* G36* X60317381Y-91188061D02* G01* X57015381Y-91188061D01* X57015381Y-89664061D01* X60317381Y-89664061D01* X60317381Y-91188061D01* G37* X77216000Y-83566000D02* X73914000Y-83566000D01* X73914000Y-82042000D01* X77216000Y-82042000D01* X77216000Y-83566000D01* G36* X77216000Y-83566000D02* G01* X73914000Y-83566000D01* X73914000Y-82042000D01* X77216000Y-82042000D01* X77216000Y-83566000D01* G37* X60275563Y-45430959D02* X56973563Y-45430959D01* X56973563Y-43906959D01* X60275563Y-43906959D01* X60275563Y-45430959D01* G36* X60275563Y-45430959D02* G01* X56973563Y-45430959D01* X56973563Y-43906959D01* X60275563Y-43906959D01* X60275563Y-45430959D01* G37* X96774000Y-93726000D02* X93472000Y-93726000D01* X93472000Y-92202000D01* X96774000Y-92202000D01* X96774000Y-93726000D01* G36* X96774000Y-93726000D02* G01* X93472000Y-93726000D01* X93472000Y-92202000D01* X96774000Y-92202000D01* X96774000Y-93726000D01* G37* X60317381Y-78488061D02* X57015381Y-78488061D01* X57015381Y-76964061D01* X60317381Y-76964061D01* X60317381Y-78488061D01* G36* X60317381Y-78488061D02* G01* X57015381Y-78488061D01* X57015381Y-76964061D01* X60317381Y-76964061D01* X60317381Y-78488061D01* G37* X40721244Y-88602544D02* X37419244Y-88602544D01* X37419244Y-87078544D01* X40721244Y-87078544D01* X40721244Y-88602544D01* G36* X40721244Y-88602544D02* G01* X37419244Y-88602544D01* X37419244Y-87078544D01* X40721244Y-87078544D01* X40721244Y-88602544D01* G37* X52194297Y-95249999D02* X50670297Y-95249999D01* X50670297Y-91947999D01* X52194297Y-91947999D01* X52194297Y-95249999D01* G36* X52194297Y-95249999D02* G01* X50670297Y-95249999D01* X50670297Y-91947999D01* X52194297Y-91947999D01* X52194297Y-95249999D01* G37* X60315734Y-65745047D02* X57013734Y-65745047D01* X57013734Y-64221047D01* X60315734Y-64221047D01* X60315734Y-65745047D01* G36* X60315734Y-65745047D02* G01* X57013734Y-65745047D01* X57013734Y-64221047D01* X60315734Y-64221047D01* X60315734Y-65745047D01* G37* X77216000Y-53086000D02* X73914000Y-53086000D01* X73914000Y-51562000D01* X77216000Y-51562000D01* X77216000Y-53086000D01* G36* X77216000Y-53086000D02* G01* X73914000Y-53086000D01* X73914000Y-51562000D01* X77216000Y-51562000D01* X77216000Y-53086000D01* G37* X96774000Y-53086000D02* X93472000Y-53086000D01* X93472000Y-51562000D01* X96774000Y-51562000D01* X96774000Y-53086000D01* G36* X96774000Y-53086000D02* G01* X93472000Y-53086000D01* X93472000Y-51562000D01* X96774000Y-51562000D01* X96774000Y-53086000D01* G37* X40721244Y-70822544D02* X37419244Y-70822544D01* X37419244Y-69298544D01* X40721244Y-69298544D01* X40721244Y-70822544D01* G36* X40721244Y-70822544D02* G01* X37419244Y-70822544D01* X37419244Y-69298544D01* X40721244Y-69298544D01* X40721244Y-70822544D01* G37* X40721244Y-93682544D02* X37419244Y-93682544D01* X37419244Y-92158544D01* X40721244Y-92158544D01* X40721244Y-93682544D01* G36* X40721244Y-93682544D02* G01* X37419244Y-93682544D01* X37419244Y-92158544D01* X40721244Y-92158544D01* X40721244Y-93682544D01* G37* X96774000Y-83566000D02* X93472000Y-83566000D01* X93472000Y-82042000D01* X96774000Y-82042000D01* X96774000Y-83566000D01* G36* X96774000Y-83566000D02* G01* X93472000Y-83566000D01* X93472000Y-82042000D01* X96774000Y-82042000D01* X96774000Y-83566000D01* G37* X77216000Y-58166000D02* X73914000Y-58166000D01* X73914000Y-56642000D01* X77216000Y-56642000D01* X77216000Y-58166000D01* G36* X77216000Y-58166000D02* G01* X73914000Y-58166000D01* X73914000Y-56642000D01* X77216000Y-56642000D01* X77216000Y-58166000D01* G37* X77216000Y-48006000D02* X73914000Y-48006000D01* X73914000Y-46482000D01* X77216000Y-46482000D01* X77216000Y-48006000D01* G36* X77216000Y-48006000D02* G01* X73914000Y-48006000D01* X73914000Y-46482000D01* X77216000Y-46482000D01* X77216000Y-48006000D01* G37* X60315734Y-60665047D02* X57013734Y-60665047D01* X57013734Y-59141047D01* X60315734Y-59141047D01* X60315734Y-60665047D01* G36* X60315734Y-60665047D02* G01* X57013734Y-60665047D01* X57013734Y-59141047D01* X60315734Y-59141047D01* X60315734Y-60665047D01* G37* X96774000Y-78486000D02* X93472000Y-78486000D01* X93472000Y-76962000D01* X96774000Y-76962000D01* X96774000Y-78486000D01* G36* X96774000Y-78486000D02* G01* X93472000Y-78486000D01* X93472000Y-76962000D01* X96774000Y-76962000D01* X96774000Y-78486000D01* G37* X60315734Y-68285047D02* X57013734Y-68285047D01* X57013734Y-66761047D01* X60315734Y-66761047D01* X60315734Y-68285047D01* G36* X60315734Y-68285047D02* G01* X57013734Y-68285047D01* X57013734Y-66761047D01* X60315734Y-66761047D01* X60315734Y-68285047D01* G37* X60317381Y-81028061D02* X57015381Y-81028061D01* X57015381Y-79504061D01* X60317381Y-79504061D01* X60317381Y-81028061D01* G36* X60317381Y-81028061D02* G01* X57015381Y-81028061D01* X57015381Y-79504061D01* X60317381Y-79504061D01* X60317381Y-81028061D01* G37* X77216000Y-86106000D02* X73914000Y-86106000D01* X73914000Y-84582000D01* X77216000Y-84582000D01* X77216000Y-86106000D01* G36* X77216000Y-86106000D02* G01* X73914000Y-86106000D01* X73914000Y-84582000D01* X77216000Y-84582000D01* X77216000Y-86106000D01* G37* X77216000Y-65786000D02* X73914000Y-65786000D01* X73914000Y-64262000D01* X77216000Y-64262000D01* X77216000Y-65786000D01* G36* X77216000Y-65786000D02* G01* X73914000Y-65786000D01* X73914000Y-64262000D01* X77216000Y-64262000D01* X77216000Y-65786000D01* G37* X40721244Y-65742544D02* X37419244Y-65742544D01* X37419244Y-64218544D01* X40721244Y-64218544D01* X40721244Y-65742544D01* G36* X40721244Y-65742544D02* G01* X37419244Y-65742544D01* X37419244Y-64218544D01* X40721244Y-64218544D01* X40721244Y-65742544D01* G37* X96774000Y-60706000D02* X93472000Y-60706000D01* X93472000Y-59182000D01* X96774000Y-59182000D01* X96774000Y-60706000D01* G36* X96774000Y-60706000D02* G01* X93472000Y-60706000D01* X93472000Y-59182000D01* X96774000Y-59182000D01* X96774000Y-60706000D01* G37* X77216000Y-73406000D02* X73914000Y-73406000D01* X73914000Y-71882000D01* X77216000Y-71882000D01* X77216000Y-73406000D01* G36* X77216000Y-73406000D02* G01* X73914000Y-73406000D01* X73914000Y-71882000D01* X77216000Y-71882000D01* X77216000Y-73406000D01* G37* X77216000Y-78486000D02* X73914000Y-78486000D01* X73914000Y-76962000D01* X77216000Y-76962000D01* X77216000Y-78486000D01* G36* X77216000Y-78486000D02* G01* X73914000Y-78486000D01* X73914000Y-76962000D01* X77216000Y-76962000D01* X77216000Y-78486000D01* G37* X40717563Y-53050959D02* X37415563Y-53050959D01* X37415563Y-51526959D01* X40717563Y-51526959D01* X40717563Y-53050959D01* G36* X40717563Y-53050959D02* G01* X37415563Y-53050959D01* X37415563Y-51526959D01* X40717563Y-51526959D01* X40717563Y-53050959D01* G37* X60315734Y-55585047D02* X57013734Y-55585047D01* X57013734Y-54061047D01* X60315734Y-54061047D01* X60315734Y-55585047D01* G36* X60315734Y-55585047D02* G01* X57013734Y-55585047D01* X57013734Y-54061047D01* X60315734Y-54061047D01* X60315734Y-55585047D01* G37* X40721244Y-83522544D02* X37419244Y-83522544D01* X37419244Y-81998544D01* X40721244Y-81998544D01* X40721244Y-83522544D01* G36* X40721244Y-83522544D02* G01* X37419244Y-83522544D01* X37419244Y-81998544D01* X40721244Y-81998544D01* X40721244Y-83522544D01* G37* X96774000Y-73406000D02* X93472000Y-73406000D01* X93472000Y-71882000D01* X96774000Y-71882000D01* X96774000Y-73406000D01* G36* X96774000Y-73406000D02* G01* X93472000Y-73406000D01* X93472000Y-71882000D01* X96774000Y-71882000D01* X96774000Y-73406000D01* G37* X77216000Y-70866000D02* X73914000Y-70866000D01* X73914000Y-69342000D01* X77216000Y-69342000D01* X77216000Y-70866000D01* G36* X77216000Y-70866000D02* G01* X73914000Y-70866000D01* X73914000Y-69342000D01* X77216000Y-69342000D01* X77216000Y-70866000D01* G37* X88646000Y-95250000D02* X87122000Y-95250000D01* X87122000Y-91948000D01* X88646000Y-91948000D01* X88646000Y-95250000D01* G36* X88646000Y-95250000D02* G01* X87122000Y-95250000D01* X87122000Y-91948000D01* X88646000Y-91948000D01* X88646000Y-95250000D01* G37* X40721244Y-63202544D02* X37419244Y-63202544D01* X37419244Y-61678544D01* X40721244Y-61678544D01* X40721244Y-63202544D01* G36* X40721244Y-63202544D02* G01* X37419244Y-63202544D01* X37419244Y-61678544D01* X40721244Y-61678544D01* X40721244Y-63202544D01* G37* X77216000Y-93726000D02* X73914000Y-93726000D01* X73914000Y-92202000D01* X77216000Y-92202000D01* X77216000Y-93726000D01* G36* X77216000Y-93726000D02* G01* X73914000Y-93726000D01* X73914000Y-92202000D01* X77216000Y-92202000D01* X77216000Y-93726000D01* G37* X60315734Y-58125047D02* X57013734Y-58125047D01* X57013734Y-56601047D01* X60315734Y-56601047D01* X60315734Y-58125047D01* G36* X60315734Y-58125047D02* G01* X57013734Y-58125047D01* X57013734Y-56601047D01* X60315734Y-56601047D01* X60315734Y-58125047D01* G37* X60317381Y-86108061D02* X57015381Y-86108061D01* X57015381Y-84584061D01* X60317381Y-84584061D01* X60317381Y-86108061D01* G36* X60317381Y-86108061D02* G01* X57015381Y-86108061D01* X57015381Y-84584061D01* X60317381Y-84584061D01* X60317381Y-86108061D01* G37* D11* %TO.C,C2*% X70424000Y-74930000D03* X72324000Y-74930000D03* %TD*% D12* %TO.C,C4*% X74168000Y-101920000D03* X74168000Y-103820000D03* %TD*% D13* %TO.C,U3*% X80756396Y-95359949D03* X79806434Y-95359949D03* X78856472Y-95359949D03* X78856472Y-98160051D03* X79806434Y-98160051D03* X80756396Y-98160051D03* %TD*% D14* %TO.C,R3*% X37846000Y-96115500D03* X37846000Y-97940500D03* %TD*% %TO.C,R2*% X76403200Y-95861500D03* X76403200Y-97686500D03* %TD*% D13* %TO.C,U5*% X44419860Y-95369949D03* X43469898Y-95369949D03* X42519936Y-95369949D03* X42519936Y-98170051D03* X43469898Y-98170051D03* X44419860Y-98170051D03* %TD*% D14* %TO.C,R1*% X74015600Y-95861500D03* X74015600Y-97686500D03* %TD*% D15* %TO.C,U4*% X64835000Y-82571110D03* X64835000Y-83841110D03* X64835000Y-85111110D03* X64835000Y-86381110D03* X69785000Y-86381110D03* X69785000Y-85111110D03* X69785000Y-83841110D03* X69785000Y-82571110D03* %TD*% D14* %TO.C,R4*% X40005000Y-96115500D03* X40005000Y-97940500D03* %TD*% D12* %TO.C,C3*% X38100000Y-102301000D03* X38100000Y-104201000D03* %TD*% D16* %TO.C,C1*% X64069000Y-74930000D03* X62169000Y-74930000D03* %TD*% M02* ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-F_Silkscreen.gbr ================================================ %TF.GenerationSoftware,KiCad,Pcbnew,7.0.9*% %TF.CreationDate,2024-09-14T16:33:58+02:00*% %TF.ProjectId,DeskHop_Rev1,4465736b-486f-4705-9f52-6576312e6b69,rev?*% %TF.SameCoordinates,Original*% %TF.FileFunction,Legend,Top*% %TF.FilePolarity,Positive*% %FSLAX46Y46*% G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Created by KiCad (PCBNEW 7.0.9) date 2024-09-14 16:33:58* %MOMM*% %LPD*% G01* G04 APERTURE LIST* %ADD10C,0.120000*% %ADD11C,0.000000*% %ADD12C,0.314000*% %ADD13C,0.150000*% %ADD14C,0.254000*% %ADD15C,0.059995*% G04 APERTURE END LIST* D10* X67310000Y-48738426D02* X67309441Y-50058426D01* X67309238Y-50538426D02* X67308679Y-51858426D01* X67308476Y-52338426D02* X67307918Y-53658426D01* X67307715Y-54138426D02* X67307156Y-55458425D01* X67306953Y-55938425D02* X67306394Y-57258425D01* X67306191Y-57738425D02* X67305632Y-59058425D01* X67305429Y-59538425D02* X67304870Y-60858425D01* X67304667Y-61338425D02* X67304109Y-62658425D01* X67303905Y-63138425D02* X67303347Y-64458425D01* X67303144Y-64938425D02* X67302585Y-66258424D01* X67302382Y-66738424D02* X67301823Y-68058424D01* X67301620Y-68538424D02* X67301061Y-69858424D01* X67300858Y-70338424D02* X67300299Y-71658424D01* X67300096Y-72138424D02* X67299538Y-73458424D01* X67299334Y-73938424D02* X67298776Y-75258424D01* X67298573Y-75738424D02* X67298014Y-77058423D01* X67297811Y-77538423D02* X67297252Y-78858423D01* X67297049Y-79338423D02* X67296490Y-80658423D01* X67296287Y-81138423D02* X67295728Y-82458423D01* X67295525Y-82938423D02* X67294967Y-84258423D01* X67294763Y-84738423D02* X67294205Y-86058423D01* X67294002Y-86538423D02* X67293443Y-87858422D01* X67293240Y-88338422D02* X67292681Y-89658422D01* X67292478Y-90138422D02* X67291919Y-91458422D01* X67291716Y-91938422D02* X67291157Y-93258422D01* X67290954Y-93738422D02* X67290396Y-95058422D01* X67290192Y-95538422D02* X67289634Y-96858422D01* X67289431Y-97338422D02* X67288872Y-98658422D01* X67288669Y-99138421D02* X67288110Y-100458421D01* X67287907Y-100938421D02* X67287348Y-102258421D01* X67287145Y-102738421D02* X67286586Y-104058421D01* X67286383Y-104538421D02* X67285825Y-105858421D01* X67285621Y-106338421D02* X67285063Y-107658421D01* X67284860Y-108138421D02* X67284301Y-109458421D01* X67284098Y-109938421D02* X67283539Y-111258420D01* X67283336Y-111738420D02* X67282777Y-113058420D01* X67282574Y-113538420D02* X67282015Y-114858420D01* X67281812Y-115338420D02* X67281783Y-115407659D01* D11* G36* X75409953Y-109711596D02* G01* X75414084Y-109711996D01* X75418717Y-109712651D01* X75423798Y-109713553D01* X75429272Y-109714694D01* X75435082Y-109716066D01* X75447491Y-109719465D01* X75453979Y-109721476D01* X75460582Y-109723683D01* X75467245Y-109726077D01* X75473912Y-109728651D01* X75480528Y-109731395D01* X75487037Y-109734301D01* X75493385Y-109737361D01* X75499515Y-109740565D01* X75511406Y-109747709D01* X75523025Y-109755970D01* X75534303Y-109765237D01* X75545172Y-109775399D01* X75555563Y-109786346D01* X75565408Y-109797967D01* X75574640Y-109810150D01* X75583189Y-109822785D01* X75590988Y-109835761D01* X75597969Y-109848967D01* X75604062Y-109862293D01* X75609201Y-109875627D01* X75613317Y-109888859D01* X75616341Y-109901877D01* X75618205Y-109914572D01* X75618681Y-109920763D01* X75618842Y-109926832D01* X75618681Y-109932900D01* X75618205Y-109939091D01* X75617422Y-109945389D01* X75616341Y-109951781D01* X75614969Y-109958251D01* X75613317Y-109964786D01* X75611391Y-109971371D01* X75609201Y-109977991D01* X75604062Y-109991282D01* X75597969Y-110004543D01* X75590988Y-110017659D01* X75583189Y-110030515D01* X75574640Y-110042996D01* X75565408Y-110054987D01* X75555563Y-110066372D01* X75545172Y-110077037D01* X75539793Y-110082063D01* X75534303Y-110086866D01* X75528711Y-110091431D01* X75523025Y-110095744D01* X75517254Y-110099791D01* X75511406Y-110103557D01* X75505490Y-110107027D01* X75499515Y-110110189D01* X75493385Y-110113426D01* X75487038Y-110116578D01* X75480528Y-110119627D01* X75473912Y-110122558D01* X75467245Y-110125352D01* X75460582Y-110127992D01* X75453979Y-110130462D01* X75447491Y-110132744D01* X75441174Y-110134822D01* X75435082Y-110136678D01* X75429272Y-110138295D01* X75423799Y-110139657D01* X75418717Y-110140745D01* X75414084Y-110141544D01* X75409954Y-110142035D01* X75406382Y-110142203D01* X75402810Y-110142035D01* X75398679Y-110141544D01* X75394046Y-110140745D01* X75388965Y-110139657D01* X75383491Y-110138295D01* X75377681Y-110136678D01* X75365272Y-110132744D01* X75352181Y-110127992D01* X75338851Y-110122558D01* X75332235Y-110119627D01* X75325725Y-110116578D01* X75319378Y-110113426D01* X75313248Y-110110189D01* X75301356Y-110103589D01* X75289737Y-110095864D01* X75278459Y-110087115D01* X75267591Y-110077446D01* X75257200Y-110066958D01* X75247354Y-110055754D01* X75238123Y-110043936D01* X75229573Y-110031607D01* X75221774Y-110018868D01* X75214794Y-110005823D01* X75208700Y-109992572D01* X75203562Y-109979220D01* X75199446Y-109965867D01* X75196422Y-109952616D01* X75194558Y-109939571D01* X75194081Y-109933157D01* X75193921Y-109926832D01* X75194081Y-109920507D01* X75194558Y-109914093D01* X75195341Y-109907600D01* X75196422Y-109901042D01* X75197793Y-109894430D01* X75199446Y-109887778D01* X75201372Y-109881097D01* X75203562Y-109874399D01* X75208700Y-109861003D01* X75214794Y-109847688D01* X75221775Y-109834552D01* X75229574Y-109821693D01* X75238123Y-109809210D01* X75247355Y-109797199D01* X75257200Y-109785760D01* X75267591Y-109774990D01* X75278460Y-109764988D01* X75289737Y-109755851D01* X75295509Y-109751637D01* X75301356Y-109747677D01* X75307272Y-109743982D01* X75313248Y-109740565D01* X75319858Y-109737361D01* X75326561Y-109734301D01* X75333316Y-109731395D01* X75340079Y-109728651D01* X75346808Y-109726077D01* X75353460Y-109723683D01* X75359993Y-109721476D01* X75366364Y-109719465D01* X75372530Y-109717659D01* X75378449Y-109716066D01* X75384078Y-109714694D01* X75389374Y-109713553D01* X75394295Y-109712651D01* X75398799Y-109711996D01* X75402842Y-109711596D01* X75406382Y-109711461D01* X75409953Y-109711596D01* G37* G36* X59309000Y-110998000D02* G01* X59332483Y-110999792D01* X59355628Y-111002741D01* X59378406Y-111006819D01* X59400788Y-111011997D01* X59422744Y-111018246D01* X59444244Y-111025535D01* X59465261Y-111033836D01* X59485763Y-111043120D01* X59505723Y-111053356D01* X59525110Y-111064517D01* X59543896Y-111076572D01* X59562051Y-111089492D01* X59579546Y-111103247D01* X59596351Y-111117810D01* X59612438Y-111133149D01* X59627777Y-111149237D01* X59642338Y-111166043D01* X59656093Y-111183538D01* X59669012Y-111201694D01* X59681066Y-111220480D01* X59692225Y-111239867D01* X59702460Y-111259826D01* X59711743Y-111280329D01* X59720043Y-111301344D01* X59727331Y-111322844D01* X59733579Y-111344798D01* X59738756Y-111367178D01* X59742834Y-111389954D01* X59745782Y-111413097D01* X59747573Y-111436577D01* X59748177Y-111460366D01* X59747573Y-111484155D01* X59745782Y-111507635D01* X59742833Y-111530778D01* X59738754Y-111553554D01* X59733576Y-111575934D01* X59727328Y-111597889D01* X59720038Y-111619388D01* X59711737Y-111640404D01* X59702454Y-111660906D01* X59692217Y-111680865D01* X59681057Y-111700253D01* X59669002Y-111719039D01* X59656082Y-111737194D01* X59642326Y-111754690D01* X59627764Y-111771496D01* X59612424Y-111787583D01* X59596337Y-111802923D01* X59579531Y-111817485D01* X59562035Y-111831241D01* X59543880Y-111844161D01* X59525094Y-111856216D01* X59505706Y-111867376D01* X59485747Y-111877613D01* X59465245Y-111886896D01* X59444229Y-111895197D01* X59422730Y-111902487D01* X59400775Y-111908735D01* X59378396Y-111913913D01* X59355620Y-111917992D01* X59332477Y-111920941D01* X59308996Y-111922732D01* X59285208Y-111923336D01* X59261419Y-111922732D01* X59237938Y-111920941D01* X59214796Y-111917992D01* X59192020Y-111913913D01* X59169640Y-111908735D01* X59147685Y-111902487D01* X59126186Y-111895197D01* X59105170Y-111886896D01* X59084668Y-111877613D01* X59064709Y-111867376D01* X59045321Y-111856216D01* X59026535Y-111844161D01* X59008380Y-111831241D01* X58990885Y-111817485D01* X58974078Y-111802923D01* X58957991Y-111787583D01* X58942651Y-111771496D01* X58928089Y-111754690D01* X58914333Y-111737194D01* X58901413Y-111719039D01* X58889358Y-111700253D01* X58878198Y-111680865D01* X58867961Y-111660906D01* X58858678Y-111640404D01* X58850377Y-111619388D01* X58843087Y-111597889D01* X58836839Y-111575934D01* X58831661Y-111553554D01* X58827582Y-111530778D01* X58824633Y-111507635D01* X58822842Y-111484155D01* X58822238Y-111460366D01* X59130897Y-111460366D01* X59131098Y-111468301D01* X59131695Y-111476133D01* X59132678Y-111483851D01* X59134038Y-111491446D01* X59135764Y-111498909D01* X59137847Y-111506229D01* X59140276Y-111513397D01* X59143043Y-111520403D01* X59146138Y-111527238D01* X59149550Y-111533891D01* X59153270Y-111540353D01* X59157288Y-111546614D01* X59161594Y-111552665D01* X59166179Y-111558495D01* X59171033Y-111564095D01* X59176146Y-111569456D01* X59181508Y-111574567D01* X59187110Y-111579419D01* X59192942Y-111584002D01* X59198993Y-111588306D01* X59205254Y-111592322D01* X59211716Y-111596039D01* X59218369Y-111599449D01* X59225202Y-111602541D01* X59232207Y-111605306D01* X59239373Y-111607734D01* X59246690Y-111609815D01* X59254149Y-111611539D01* X59261740Y-111612898D01* X59269453Y-111613880D01* X59277279Y-111614476D01* X59285208Y-111614677D01* X59293136Y-111614476D01* X59300962Y-111613880D01* X59308675Y-111612898D01* X59316266Y-111611539D01* X59323725Y-111609815D01* X59331043Y-111607734D01* X59338208Y-111605306D01* X59345213Y-111602541D01* X59352046Y-111599449D01* X59358699Y-111596039D01* X59365161Y-111592322D01* X59371422Y-111588306D01* X59377474Y-111584002D01* X59383305Y-111579419D01* X59388907Y-111574567D01* X59394269Y-111569456D01* X59399382Y-111564095D01* X59404236Y-111558495D01* X59408821Y-111552665D01* X59413127Y-111546614D01* X59417145Y-111540353D01* X59420865Y-111533891D01* X59424277Y-111527238D01* X59427372Y-111520403D01* X59430139Y-111513397D01* X59432569Y-111506229D01* X59434651Y-111498909D01* X59436377Y-111491446D01* X59437737Y-111483851D01* X59438720Y-111476133D01* X59439317Y-111468301D01* X59439518Y-111460366D01* X59439317Y-111452431D01* X59438720Y-111444600D01* X59437737Y-111436881D01* X59436377Y-111429286D01* X59434651Y-111421823D01* X59432569Y-111414503D01* X59430139Y-111407335D01* X59427372Y-111400329D01* X59424277Y-111393495D01* X59420865Y-111386842D01* X59417145Y-111380380D01* X59413127Y-111374118D01* X59408821Y-111368068D01* X59404236Y-111362237D01* X59399382Y-111356637D01* X59394269Y-111351277D01* X59388907Y-111346166D01* X59383305Y-111341314D01* X59377474Y-111336731D01* X59371422Y-111332427D01* X59365161Y-111328411D01* X59358699Y-111324693D01* X59352046Y-111321283D01* X59345213Y-111318191D01* X59338208Y-111315426D01* X59331043Y-111312999D01* X59323725Y-111310918D01* X59316266Y-111309193D01* X59308675Y-111307835D01* X59300962Y-111306853D01* X59293136Y-111306256D01* X59285208Y-111306055D01* X59277279Y-111306256D01* X59269453Y-111306853D01* X59261740Y-111307835D01* X59254149Y-111309193D01* X59246690Y-111310918D01* X59239373Y-111312999D01* X59232207Y-111315426D01* X59225202Y-111318191D01* X59218369Y-111321283D01* X59211716Y-111324693D01* X59205254Y-111328411D01* X59198993Y-111332427D01* X59192942Y-111336731D01* X59187110Y-111341314D01* X59181508Y-111346166D01* X59176146Y-111351277D01* X59171033Y-111356637D01* X59166179Y-111362237D01* X59161594Y-111368068D01* X59157288Y-111374118D01* X59153270Y-111380380D01* X59149550Y-111386842D01* X59146138Y-111393495D01* X59143043Y-111400329D01* X59140276Y-111407335D01* X59137847Y-111414503D01* X59135764Y-111421823D01* X59134038Y-111429286D01* X59132678Y-111436881D01* X59131695Y-111444600D01* X59131098Y-111452431D01* X59130897Y-111460366D01* X58822238Y-111460366D01* X58822842Y-111436577D01* X58824633Y-111413097D01* X58827582Y-111389954D01* X58831661Y-111367178D01* X58836839Y-111344798D01* X58843087Y-111322844D01* X58850377Y-111301344D01* X58858678Y-111280329D01* X58867961Y-111259826D01* X58878198Y-111239867D01* X58889358Y-111220480D01* X58901413Y-111201694D01* X58914333Y-111183538D01* X58928089Y-111166043D01* X58942651Y-111149237D01* X58957991Y-111133149D01* X58974078Y-111117810D01* X58990885Y-111103247D01* X59008380Y-111089492D01* X59026535Y-111076572D01* X59045321Y-111064517D01* X59064709Y-111053356D01* X59084668Y-111043120D01* X59105170Y-111033836D01* X59126186Y-111025535D01* X59147685Y-111018246D01* X59169640Y-111011997D01* X59192020Y-111006819D01* X59214796Y-111002741D01* X59237938Y-110999792D01* X59261419Y-110998000D01* X59285208Y-110997397D01* X59309000Y-110998000D01* G37* G36* X71971429Y-111002828D02* G01* X71973288Y-111003199D01* X71975000Y-111003686D01* X71981325Y-111003846D01* X71987740Y-111004323D01* X71994233Y-111005106D01* X72000791Y-111006187D01* X72007402Y-111007558D01* X72014055Y-111009211D01* X72020736Y-111011137D01* X72027434Y-111013327D01* X72040830Y-111018465D01* X72054145Y-111024559D01* X72067281Y-111031540D01* X72080139Y-111039339D01* X72092623Y-111047888D01* X72104634Y-111057120D01* X72116073Y-111066965D01* X72126843Y-111077356D01* X72136845Y-111088225D01* X72145982Y-111099502D01* X72150195Y-111105274D01* X72154155Y-111111121D01* X72157850Y-111117037D01* X72161267Y-111123013D01* X72166696Y-111135490D01* X72171954Y-111148616D01* X72176871Y-111161946D01* X72181276Y-111175037D01* X72185000Y-111187446D01* X72186552Y-111193256D01* X72187870Y-111198730D01* X72188933Y-111203811D01* X72189718Y-111208444D01* X72190204Y-111212575D01* X72190371Y-111216147D01* X72190236Y-111219719D01* X72189837Y-111223849D01* X72189182Y-111228482D01* X72188280Y-111233564D01* X72187138Y-111239037D01* X72185767Y-111244847D01* X72182368Y-111257256D01* X72180357Y-111263744D01* X72178150Y-111270347D01* X72175755Y-111277010D01* X72173182Y-111283677D01* X72170438Y-111290293D01* X72167531Y-111296802D01* X72164472Y-111303150D01* X72161267Y-111309280D01* X72154155Y-111321172D01* X72145982Y-111332791D01* X72136845Y-111344069D01* X72126842Y-111354937D01* X72116073Y-111365328D01* X72104633Y-111375174D01* X72092623Y-111384405D01* X72080139Y-111392954D01* X72067281Y-111400753D01* X72054145Y-111407734D01* X72040830Y-111413828D01* X72027434Y-111418966D01* X72014055Y-111423082D01* X72000791Y-111426106D01* X71987740Y-111427970D01* X71981325Y-111428446D01* X71975000Y-111428607D01* X71971429Y-111428439D01* X71967298Y-111427948D01* X71962665Y-111427149D01* X71957584Y-111426060D01* X71952110Y-111424699D01* X71946300Y-111423082D01* X71933891Y-111419148D01* X71920800Y-111414396D01* X71907470Y-111408962D01* X71900854Y-111406031D01* X71894345Y-111402982D01* X71887997Y-111399830D01* X71881867Y-111396592D01* X71869976Y-111389993D01* X71858357Y-111382268D01* X71847079Y-111373519D01* X71836210Y-111363850D01* X71825819Y-111353362D01* X71815974Y-111342158D01* X71806742Y-111330340D01* X71798193Y-111318011D01* X71790394Y-111305272D01* X71783413Y-111292226D01* X71777320Y-111278976D01* X71772181Y-111265623D01* X71768066Y-111252271D01* X71765041Y-111239020D01* X71763177Y-111225975D01* X71762701Y-111219561D01* X71762540Y-111213236D01* X71762701Y-111206911D01* X71763177Y-111200497D01* X71763960Y-111194004D01* X71765041Y-111187446D01* X71766413Y-111180835D01* X71768066Y-111174182D01* X71769991Y-111167501D01* X71772181Y-111160803D01* X71777320Y-111147407D01* X71783413Y-111134092D01* X71790394Y-111120956D01* X71798193Y-111108097D01* X71806742Y-111095614D01* X71815974Y-111083603D01* X71825819Y-111072164D01* X71836210Y-111061394D01* X71847079Y-111051392D01* X71858357Y-111042255D01* X71864128Y-111038042D01* X71869976Y-111034081D01* X71875892Y-111030387D01* X71881867Y-111026970D01* X71894345Y-111021552D01* X71900854Y-111018918D01* X71907470Y-111016374D01* X71914137Y-111013949D01* X71920800Y-111011673D01* X71927403Y-111009576D01* X71933891Y-111007688D01* X71940208Y-111006039D01* X71946300Y-111004658D01* X71952110Y-111003576D01* X71957584Y-111002822D01* X71962665Y-111002426D01* X71967298Y-111002418D01* X71971429Y-111002828D01* G37* D10* X66937740Y-48748460D02* X65680287Y-48372564D01* X65269783Y-48124498D02* X64352267Y-47186069D01* X64113514Y-46770079D02* X63766049Y-45504476D01* X63758926Y-45024893D02* X64068656Y-43749529D01* X64294950Y-43326633D02* X65184194Y-42361372D01* X65587150Y-42101225D02* X66832886Y-41688153D01* D11* G36* X74396618Y-106991515D02* G01* X74402288Y-106992041D01* X74407276Y-106993018D01* X74411632Y-106994453D01* X74415406Y-106996352D01* X74418648Y-106998720D01* X74421408Y-107001564D01* X74423737Y-107004888D01* X74425684Y-107008700D01* X74427299Y-107013005D01* X74428634Y-107017809D01* X74429737Y-107023117D01* X74430658Y-107028936D01* X74431449Y-107035271D01* X74434303Y-107065893D01* X74437784Y-107092363D01* X74440601Y-107121310D01* X74444307Y-107185083D01* X74445558Y-107254109D01* X74444489Y-107325284D01* X74441237Y-107395503D01* X74435939Y-107461664D01* X74428732Y-107520662D01* X74424454Y-107546506D01* X74419750Y-107569395D01* X74414104Y-107593448D01* X74407046Y-107618576D01* X74398666Y-107644625D01* X74389055Y-107671441D01* X74378301Y-107698871D01* X74366493Y-107726762D01* X74353723Y-107754960D01* X74340078Y-107783311D01* X74325649Y-107811662D01* X74310525Y-107839859D01* X74294795Y-107867750D01* X74278550Y-107895180D01* X74261878Y-107921996D01* X74244870Y-107948045D01* X74227614Y-107973173D01* X74210200Y-107997226D01* X74193699Y-108017684D01* X74173138Y-108041383D01* X74149371Y-108067468D01* X74123252Y-108095089D01* X74095631Y-108123392D01* X74067362Y-108151524D01* X74039299Y-108178633D01* X74012292Y-108203866D01* X73972019Y-108239667D01* X73932125Y-108275950D01* X73854448Y-108348886D01* X73781204Y-108420527D01* X73714339Y-108488723D01* X73655795Y-108551325D01* X73630251Y-108579857D01* X73607517Y-108606185D01* X73587836Y-108630041D01* X73571450Y-108651155D01* X73558602Y-108669259D01* X73549536Y-108684084D01* X73542419Y-108697383D01* X73535297Y-108712029D01* X73528235Y-108727800D01* X73521296Y-108744475D01* X73514545Y-108761833D01* X73508046Y-108779651D01* X73496057Y-108815781D01* X73490696Y-108833650D01* X73485842Y-108851092D01* X73481560Y-108867887D01* X73477913Y-108883812D01* X73474965Y-108898645D01* X73472780Y-108912165D01* X73471422Y-108924151D01* X73470955Y-108934380D01* X73471948Y-108938479D01* X73476037Y-108942065D01* X73500150Y-108947841D01* X73556596Y-108951979D01* X73658677Y-108954753D01* X74052947Y-108957300D01* X74789374Y-108957664D01* X75469002Y-108958391D01* X75704671Y-108959505D01* X75882599Y-108961302D01* X76011550Y-108963916D01* X76060398Y-108965573D01* X76100289Y-108967486D01* X76132319Y-108969672D01* X76157582Y-108972147D01* X76177176Y-108974930D01* X76192194Y-108978036D01* X76236309Y-108989888D01* X76279081Y-109004634D01* X76320394Y-109022168D01* X76360134Y-109042384D01* X76398187Y-109065175D01* X76434435Y-109090434D01* X76468766Y-109118055D01* X76501062Y-109147932D01* X76531210Y-109179957D01* X76559094Y-109214025D01* X76584600Y-109250028D01* X76607611Y-109287859D01* X76628013Y-109327414D01* X76645691Y-109368584D01* X76660529Y-109411263D01* X76672413Y-109455345D01* X76682918Y-109610643D01* X76690421Y-109939747D01* X76696424Y-110887997D01* X76690421Y-111837339D01* X76682918Y-112167807D01* X76672413Y-112325015D01* X76661557Y-112366122D01* X76647640Y-112406393D01* X76630807Y-112445675D01* X76611203Y-112483815D01* X76588973Y-112520658D01* X76564261Y-112556052D01* X76537214Y-112589843D01* X76507974Y-112621878D01* X76476689Y-112652002D01* X76443502Y-112680063D01* X76408558Y-112705908D01* X76372003Y-112729381D01* X76333982Y-112750331D01* X76294639Y-112768604D01* X76254119Y-112784045D01* X76212567Y-112796503D01* X76171480Y-112804188D01* X76091239Y-112809963D01* X75704699Y-112816876D01* X73267226Y-112819786D01* X72246516Y-112820719D01* X71838534Y-112820886D01* X71491735Y-112820696D01* X71200819Y-112820028D01* X70960488Y-112818763D01* X70765441Y-112816782D01* X70683243Y-112815486D01* X70610379Y-112813966D01* X70546187Y-112812207D01* X70490004Y-112810194D01* X70441168Y-112807913D01* X70399016Y-112805348D01* X70362886Y-112802485D01* X70332115Y-112799308D01* X70306042Y-112795803D01* X70284003Y-112791955D01* X70265337Y-112787749D01* X70249380Y-112783170D01* X70235471Y-112778203D01* X70222947Y-112772833D01* X70211146Y-112767045D01* X70199404Y-112760825D01* X70173453Y-112747026D01* X70156057Y-112737303D01* X70137829Y-112725726D01* X70118961Y-112712487D01* X70099647Y-112697776D01* X70080076Y-112681787D01* X70060441Y-112664710D01* X70040934Y-112646738D01* X70021747Y-112628063D01* X70003072Y-112608876D01* X69985100Y-112589369D01* X69968023Y-112569734D01* X69952034Y-112550163D01* X69937323Y-112530849D01* X69924084Y-112511981D01* X69912507Y-112493754D01* X69902784Y-112476357D01* X69877932Y-112424902D01* X69859492Y-112370854D01* X69846509Y-112294433D01* X69842451Y-112237703D01* X70257855Y-112237703D01* X70289869Y-112284269D01* X70293341Y-112288764D01* X70297180Y-112293489D01* X70301342Y-112298402D01* X70305786Y-112303460D01* X70315347Y-112313840D01* X70325522Y-112324288D01* X70335970Y-112334463D01* X70346350Y-112344024D01* X70351407Y-112348468D01* X70356320Y-112352630D01* X70361045Y-112356469D01* X70365540Y-112359940D01* X70412107Y-112391955D01* X73273047Y-112389045D01* X76133986Y-112386134D01* X76168911Y-112357030D01* X76172827Y-112354136D01* X76176914Y-112350936D01* X76181138Y-112347463D01* X76185464Y-112343751D01* X76189858Y-112339834D01* X76194286Y-112335747D01* X76203108Y-112327198D01* X76211657Y-112318376D01* X76215745Y-112313948D01* X76219661Y-112309554D01* X76223373Y-112305228D01* X76226846Y-112301004D01* X76230047Y-112296917D01* X76232940Y-112293001D01* X76242547Y-112278443D01* X76249766Y-112250209D01* X76254939Y-112192165D01* X76258406Y-112088180D01* X76261589Y-111677857D01* X76262044Y-110890180D01* X76261987Y-110438594D01* X76261852Y-110255743D01* X76261589Y-110098774D01* X76261156Y-109965629D01* X76260862Y-109907347D01* X76260509Y-109854248D01* X76260093Y-109806076D01* X76259607Y-109762572D01* X76259047Y-109723480D01* X76258406Y-109688542D01* X76257681Y-109657500D01* X76256864Y-109630098D01* X76255952Y-109606078D01* X76254939Y-109585182D01* X76253819Y-109567154D01* X76253217Y-109559134D01* X76252587Y-109551734D01* X76251927Y-109544923D01* X76251238Y-109538668D01* X76250517Y-109532936D01* X76249766Y-109527696D01* X76248982Y-109522915D01* X76248166Y-109518561D01* X76247317Y-109514603D01* X76246433Y-109511007D01* X76245515Y-109507742D01* X76244562Y-109504775D01* X76243573Y-109502075D01* X76242547Y-109499609D01* X76241483Y-109497345D01* X76240382Y-109495251D01* X76239242Y-109493294D01* X76238063Y-109491443D01* X76235584Y-109487928D01* X76232940Y-109484449D01* X76229981Y-109481011D01* X76226591Y-109477275D01* X76218706Y-109469078D01* X76209662Y-109460199D01* X76199834Y-109450979D01* X76189596Y-109441759D01* X76179325Y-109432880D01* X76169394Y-109424683D01* X76160180Y-109417509D01* X76113613Y-109385494D01* X70409197Y-109385494D01* X70365540Y-109414599D01* X70361046Y-109417525D01* X70356326Y-109420817D01* X70351427Y-109424434D01* X70346395Y-109428332D01* X70341279Y-109432469D01* X70336123Y-109436802D01* X70330977Y-109441288D01* X70325886Y-109445886D01* X70320897Y-109450551D01* X70316058Y-109455242D01* X70311414Y-109459916D01* X70307014Y-109464530D01* X70302903Y-109469042D01* X70299129Y-109473409D01* X70295739Y-109477589D01* X70292780Y-109481538D01* X70283168Y-109496920D01* X70275909Y-109525467D01* X70270628Y-109583346D01* X70266950Y-109686723D01* X70262903Y-110094636D01* X70260765Y-110878538D01* X70257855Y-112237703D01* X69842451Y-112237703D01* X69838027Y-112175857D01* X69833093Y-111995343D01* X69830751Y-111733109D01* X69830024Y-110884359D01* X69830189Y-110470540D01* X69830797Y-110148433D01* X69832019Y-109905521D01* X69834026Y-109729288D01* X69835376Y-109662263D01* X69836987Y-109607215D01* X69838879Y-109562577D01* X69841074Y-109526786D01* X69843593Y-109498277D01* X69846457Y-109475484D01* X69849688Y-109456845D01* X69853307Y-109440792D01* X69862206Y-109410544D01* X69872520Y-109380936D01* X69884233Y-109351992D01* X69897327Y-109323739D01* X69911785Y-109296202D01* X69927591Y-109269408D01* X69944727Y-109243380D01* X69963175Y-109218146D01* X69982920Y-109193730D01* X70003944Y-109170158D01* X70026230Y-109147456D01* X70049760Y-109125649D01* X70074519Y-109104763D01* X70100488Y-109084824D01* X70127651Y-109065856D01* X70155990Y-109047886D01* X70207292Y-109019066D01* X70260811Y-108997409D01* X70294551Y-108988946D01* X70336226Y-108981890D01* X70453217Y-108971488D01* X70631463Y-108965178D01* X70890643Y-108961938D01* X71730526Y-108960574D01* X73046034Y-108960574D01* X73060586Y-108855799D01* X73064775Y-108829996D01* X73069675Y-108803951D01* X73075250Y-108777761D01* X73081459Y-108751524D01* X73088265Y-108725338D01* X73095630Y-108699301D01* X73103515Y-108673512D01* X73111882Y-108648068D01* X73120692Y-108623067D01* X73129907Y-108598608D01* X73139489Y-108574788D01* X73149399Y-108551706D01* X73159599Y-108529459D01* X73170051Y-108508146D01* X73180715Y-108487865D01* X73191555Y-108468713D01* X73227196Y-108412580D01* X73246053Y-108385266D01* X73266043Y-108357981D01* X73287500Y-108330373D01* X73310757Y-108302086D01* X73336145Y-108272768D01* X73363997Y-108242065D01* X73428424Y-108175085D01* X73506698Y-108098317D01* X73601480Y-108008930D01* X73715430Y-107904093D01* X73741621Y-107879605D01* X73766709Y-107855258D01* X73790679Y-107831056D01* X73813520Y-107807003D01* X73835218Y-107783103D01* X73855761Y-107759362D01* X73875135Y-107735782D01* X73893329Y-107712369D01* X73910329Y-107689126D01* X73926122Y-107666058D01* X73940697Y-107643169D01* X73954039Y-107620463D01* X73966136Y-107597945D01* X73976975Y-107575619D01* X73986544Y-107553489D01* X73994830Y-107531559D01* X74001805Y-107511590D01* X74007518Y-107490222D01* X74012071Y-107466331D01* X74015567Y-107438790D01* X74018107Y-107406474D01* X74019796Y-107368258D01* X74020733Y-107323015D01* X74021023Y-107269622D01* X74021023Y-107074624D01* X74195649Y-107033878D01* X74274901Y-107013886D01* X74306627Y-107006156D01* X74333620Y-106999999D01* X74345468Y-106997525D01* X74356283Y-106995462D01* X74366115Y-106993816D01* X74375014Y-106992592D01* X74383031Y-106991797D01* X74390216Y-106991436D01* X74396618Y-106991515D01* G37* G36* X71120000Y-110998000D02* G01* X71124130Y-110998400D01* X71128764Y-110999055D01* X71133845Y-110999957D01* X71139318Y-111001098D01* X71145128Y-111002470D01* X71157537Y-111005869D01* X71164026Y-111007880D01* X71170629Y-111010087D01* X71177291Y-111012481D01* X71183959Y-111015055D01* X71190575Y-111017799D01* X71197084Y-111020705D01* X71203431Y-111023765D01* X71209561Y-111026970D01* X71221453Y-111034113D01* X71233072Y-111042374D01* X71244350Y-111051641D01* X71255218Y-111061803D01* X71265609Y-111072750D01* X71275455Y-111084371D01* X71284686Y-111096554D01* X71293235Y-111109189D01* X71301034Y-111122165D01* X71308015Y-111135371D01* X71314109Y-111148697D01* X71319247Y-111162031D01* X71323363Y-111175263D01* X71326387Y-111188282D01* X71328251Y-111200976D01* X71328727Y-111207168D01* X71328888Y-111213236D01* X71328727Y-111219305D01* X71328251Y-111225495D01* X71327468Y-111231793D01* X71326387Y-111238185D01* X71325016Y-111244655D01* X71323363Y-111251190D01* X71321437Y-111257775D01* X71319247Y-111264396D01* X71314109Y-111277687D01* X71308015Y-111290948D01* X71301035Y-111304064D01* X71293236Y-111316920D01* X71284686Y-111329400D01* X71275455Y-111341391D01* X71265609Y-111352776D01* X71255218Y-111363441D01* X71249839Y-111368467D01* X71244350Y-111373270D01* X71238758Y-111377835D01* X71233072Y-111382148D01* X71227301Y-111386195D01* X71221453Y-111389961D01* X71215537Y-111393431D01* X71209561Y-111396592D01* X71203431Y-111399830D01* X71197084Y-111402982D01* X71190574Y-111406031D01* X71183959Y-111408962D01* X71177291Y-111411756D01* X71170629Y-111414396D01* X71164025Y-111416866D01* X71157537Y-111419148D01* X71151220Y-111421226D01* X71145128Y-111423082D01* X71139318Y-111424699D01* X71133845Y-111426060D01* X71128764Y-111427149D01* X71124130Y-111427948D01* X71120000Y-111428439D01* X71116428Y-111428607D01* X71112856Y-111428439D01* X71108725Y-111427948D01* X71104092Y-111427149D01* X71099011Y-111426060D01* X71093537Y-111424699D01* X71087727Y-111423082D01* X71075318Y-111419148D01* X71062227Y-111414396D01* X71048897Y-111408962D01* X71042281Y-111406031D01* X71035772Y-111402982D01* X71029424Y-111399830D01* X71023294Y-111396592D01* X71011403Y-111389993D01* X70999784Y-111382268D01* X70988506Y-111373519D01* X70977637Y-111363850D01* X70967246Y-111353362D01* X70957401Y-111342158D01* X70948169Y-111330340D01* X70939620Y-111318011D01* X70931821Y-111305272D01* X70924841Y-111292226D01* X70918747Y-111278976D01* X70913608Y-111265623D01* X70909493Y-111252271D01* X70906469Y-111239020D01* X70904604Y-111225975D01* X70904128Y-111219561D01* X70903967Y-111213236D01* X70904128Y-111206911D01* X70904604Y-111200497D01* X70905387Y-111194004D01* X70906469Y-111187446D01* X70907840Y-111180835D01* X70909493Y-111174182D01* X70911418Y-111167501D01* X70913608Y-111160803D01* X70918747Y-111147407D01* X70924841Y-111134092D01* X70931821Y-111120956D01* X70939620Y-111108097D01* X70948169Y-111095614D01* X70957401Y-111083603D01* X70967246Y-111072164D01* X70977637Y-111061394D01* X70988506Y-111051392D01* X70999784Y-111042255D01* X71005555Y-111038042D01* X71011403Y-111034081D01* X71017319Y-111030387D01* X71023294Y-111026970D01* X71035772Y-111021541D01* X71048897Y-111016283D01* X71062227Y-111011366D01* X71075318Y-111006960D01* X71087727Y-111003237D01* X71093537Y-111001685D01* X71099011Y-111000366D01* X71104092Y-110999304D01* X71108725Y-110998519D01* X71112856Y-110998032D01* X71116428Y-110997865D01* X71120000Y-110998000D01* G37* G36* X72836484Y-111000776D02* G01* X72840056Y-111000911D01* X72844186Y-111001310D01* X72848820Y-111001965D01* X72853901Y-111002868D01* X72859374Y-111004009D01* X72865184Y-111005380D01* X72877594Y-111008779D01* X72884082Y-111010790D01* X72890685Y-111012997D01* X72897348Y-111015392D01* X72904015Y-111017965D01* X72910631Y-111020710D01* X72917140Y-111023616D01* X72923487Y-111026675D01* X72929617Y-111029880D01* X72941509Y-111036992D01* X72953128Y-111045165D01* X72964406Y-111054302D01* X72975274Y-111064305D01* X72985665Y-111075075D01* X72995511Y-111086514D01* X73004742Y-111098524D01* X73013292Y-111111008D01* X73021091Y-111123867D01* X73028071Y-111137003D01* X73034165Y-111150318D01* X73039304Y-111163714D01* X73043419Y-111177093D01* X73046443Y-111190356D01* X73048308Y-111203407D01* X73048784Y-111209822D01* X73048944Y-111216147D01* X73048809Y-111219719D01* X73048410Y-111223849D01* X73047755Y-111228482D01* X73046852Y-111233564D01* X73045711Y-111239037D01* X73044340Y-111244847D01* X73040941Y-111257256D01* X73038930Y-111263744D01* X73036723Y-111270347D01* X73034328Y-111277010D01* X73031755Y-111283677D01* X73029010Y-111290293D01* X73026104Y-111296802D01* X73023045Y-111303150D01* X73019840Y-111309280D01* X73012728Y-111321172D01* X73004555Y-111332791D01* X72995418Y-111344069D01* X72985415Y-111354937D01* X72974646Y-111365328D01* X72963206Y-111375174D01* X72951196Y-111384405D01* X72938712Y-111392954D01* X72925853Y-111400753D01* X72912717Y-111407734D01* X72899402Y-111413828D01* X72886006Y-111418966D01* X72872627Y-111423082D01* X72859364Y-111426106D01* X72846313Y-111427970D01* X72839898Y-111428446D01* X72833573Y-111428607D01* X72830001Y-111428439D01* X72825871Y-111427948D01* X72821238Y-111427149D01* X72816156Y-111426060D01* X72810683Y-111424699D01* X72804873Y-111423082D01* X72792464Y-111419148D01* X72779373Y-111414396D01* X72766043Y-111408962D01* X72759427Y-111406031D01* X72752917Y-111402982D01* X72746570Y-111399830D01* X72740440Y-111396592D01* X72728548Y-111389993D01* X72716930Y-111382268D01* X72705652Y-111373519D01* X72694783Y-111363850D01* X72684392Y-111353362D01* X72674547Y-111342158D01* X72665315Y-111330340D01* X72656766Y-111318011D01* X72648967Y-111305272D01* X72641986Y-111292226D01* X72635893Y-111278976D01* X72630754Y-111265623D01* X72626638Y-111252271D01* X72623614Y-111239020D01* X72621750Y-111225975D01* X72621274Y-111219561D01* X72621113Y-111213236D01* X72621274Y-111206911D01* X72621750Y-111200497D01* X72622533Y-111194004D01* X72623614Y-111187446D01* X72624986Y-111180835D01* X72626638Y-111174182D01* X72628564Y-111167501D01* X72630754Y-111160803D01* X72635893Y-111147407D01* X72641986Y-111134092D01* X72648967Y-111120956D01* X72656766Y-111108097D01* X72665315Y-111095614D01* X72674547Y-111083603D01* X72684392Y-111072164D01* X72694783Y-111061394D01* X72705652Y-111051392D01* X72716930Y-111042255D01* X72722701Y-111038042D01* X72728548Y-111034081D01* X72734465Y-111030387D01* X72740440Y-111026970D01* X72752804Y-111021547D01* X72765679Y-111016328D01* X72778759Y-111011519D01* X72785279Y-111009332D01* X72791736Y-111007324D01* X72798091Y-111005521D01* X72804304Y-111003948D01* X72810339Y-111002630D01* X72816156Y-111001594D01* X72821718Y-111000865D01* X72826985Y-111000469D01* X72831920Y-111000431D01* X72836484Y-111000776D01* G37* G36* X73255435Y-110357196D02* G01* X73258494Y-110357573D01* X73264819Y-110357734D01* X73271234Y-110358210D01* X73277726Y-110358993D01* X73284284Y-110360074D01* X73290896Y-110361446D01* X73297548Y-110363098D01* X73304229Y-110365024D01* X73310927Y-110367214D01* X73324323Y-110372353D01* X73337638Y-110378446D01* X73350774Y-110385427D01* X73363633Y-110393226D01* X73376117Y-110401775D01* X73388127Y-110411007D01* X73399566Y-110420852D01* X73410336Y-110431243D01* X73420339Y-110442112D01* X73429476Y-110453390D01* X73433689Y-110459161D01* X73437649Y-110465009D01* X73441344Y-110470925D01* X73444761Y-110476900D01* X73450189Y-110489378D01* X73455448Y-110502503D01* X73460365Y-110515833D01* X73464770Y-110528924D01* X73468493Y-110541333D01* X73470046Y-110547143D01* X73471364Y-110552617D01* X73472426Y-110557698D01* X73473211Y-110562331D01* X73473698Y-110566462D01* X73473865Y-110570034D01* X73473704Y-110576102D01* X73473228Y-110582293D01* X73472445Y-110588591D01* X73471364Y-110594983D01* X73469992Y-110601453D01* X73468340Y-110607988D01* X73466414Y-110614573D01* X73464224Y-110621193D01* X73459085Y-110634484D01* X73452992Y-110647745D01* X73446011Y-110660861D01* X73438212Y-110673717D01* X73429663Y-110686198D01* X73420431Y-110698189D01* X73410586Y-110709574D01* X73400195Y-110720238D01* X73394816Y-110725265D01* X73389326Y-110730068D01* X73383734Y-110734633D01* X73378048Y-110738946D01* X73372277Y-110742993D01* X73366430Y-110746758D01* X73360513Y-110750229D01* X73354538Y-110753390D01* X73348408Y-110756627D01* X73342061Y-110759779D01* X73335551Y-110762829D01* X73328935Y-110765759D01* X73322268Y-110768553D01* X73315605Y-110771194D01* X73309002Y-110773664D01* X73302514Y-110775946D01* X73296197Y-110778023D01* X73290105Y-110779879D01* X73284295Y-110781497D01* X73278822Y-110782858D01* X73273741Y-110783947D01* X73269107Y-110784745D01* X73264977Y-110785237D01* X73261405Y-110785405D01* X73257833Y-110785237D01* X73253702Y-110784745D01* X73249069Y-110783947D01* X73243988Y-110782858D01* X73238514Y-110781497D01* X73232704Y-110779879D01* X73220295Y-110775946D01* X73207204Y-110771194D01* X73193874Y-110765759D01* X73187258Y-110762829D01* X73180748Y-110759779D01* X73174401Y-110756627D01* X73168271Y-110753390D01* X73156379Y-110746790D01* X73144761Y-110739065D01* X73133483Y-110730317D01* X73122614Y-110720648D01* X73112223Y-110710160D01* X73102378Y-110698956D01* X73093146Y-110687138D01* X73084597Y-110674809D01* X73076798Y-110662070D01* X73069817Y-110649024D01* X73063724Y-110635774D01* X73058585Y-110622421D01* X73054470Y-110609068D01* X73051445Y-110595818D01* X73049581Y-110582773D01* X73049105Y-110576358D01* X73048944Y-110570034D01* X73049105Y-110563709D01* X73049581Y-110557294D01* X73050364Y-110550802D01* X73051445Y-110544244D01* X73052817Y-110537632D01* X73054470Y-110530980D01* X73056395Y-110524299D01* X73058585Y-110517601D01* X73063724Y-110504205D01* X73069817Y-110490890D01* X73076798Y-110477754D01* X73084597Y-110464895D01* X73093146Y-110452412D01* X73102378Y-110440401D01* X73112223Y-110428962D01* X73122614Y-110418192D01* X73133483Y-110408190D01* X73144761Y-110399053D01* X73150532Y-110394839D01* X73156379Y-110390879D01* X73162295Y-110387184D01* X73168271Y-110383767D01* X73174400Y-110380563D01* X73180743Y-110377509D01* X73187239Y-110374616D01* X73193829Y-110371898D01* X73200452Y-110369368D01* X73207051Y-110367038D01* X73213563Y-110364921D01* X73219931Y-110363031D01* X73226095Y-110361378D01* X73231994Y-110359978D01* X73237569Y-110358842D01* X73242760Y-110357983D01* X73247508Y-110357413D01* X73251753Y-110357147D01* X73255435Y-110357196D01* G37* G36* X73695718Y-109711596D02* G01* X73699849Y-109711996D01* X73704482Y-109712651D01* X73709563Y-109713553D01* X73715037Y-109714694D01* X73720847Y-109716066D01* X73733256Y-109719465D01* X73739744Y-109721476D01* X73746347Y-109723683D01* X73753010Y-109726077D01* X73759677Y-109728651D01* X73766293Y-109731395D01* X73772802Y-109734301D01* X73779149Y-109737361D01* X73785279Y-109740565D01* X73797171Y-109747709D01* X73808790Y-109755970D01* X73820068Y-109765237D01* X73830937Y-109775399D01* X73841328Y-109786346D01* X73851173Y-109797967D01* X73860405Y-109810150D01* X73868954Y-109822785D01* X73876753Y-109835761D01* X73883734Y-109848967D01* X73889827Y-109862293D01* X73894966Y-109875627D01* X73899081Y-109888859D01* X73902105Y-109901877D01* X73903970Y-109914572D01* X73904446Y-109920763D01* X73904607Y-109926832D01* X73904446Y-109932900D01* X73903970Y-109939091D01* X73903187Y-109945389D01* X73902105Y-109951781D01* X73900734Y-109958251D01* X73899081Y-109964786D01* X73897156Y-109971371D01* X73894966Y-109977991D01* X73889827Y-109991282D01* X73883733Y-110004543D01* X73876753Y-110017659D01* X73868954Y-110030515D01* X73860405Y-110042996D01* X73851173Y-110054987D01* X73841328Y-110066372D01* X73830937Y-110077037D01* X73825558Y-110082063D01* X73820068Y-110086866D01* X73814476Y-110091431D01* X73808790Y-110095744D01* X73803019Y-110099791D01* X73797171Y-110103557D01* X73791255Y-110107027D01* X73785279Y-110110189D01* X73779149Y-110113426D01* X73772802Y-110116578D01* X73766293Y-110119627D01* X73759677Y-110122558D01* X73753010Y-110125352D01* X73746347Y-110127992D01* X73739744Y-110130462D01* X73733256Y-110132744D01* X73726938Y-110134822D01* X73720847Y-110136678D01* X73715037Y-110138295D01* X73709563Y-110139657D01* X73704482Y-110140745D01* X73699849Y-110141544D01* X73695718Y-110142035D01* X73692146Y-110142203D01* X73688574Y-110142035D01* X73684444Y-110141544D01* X73679810Y-110140745D01* X73674729Y-110139657D01* X73669256Y-110138295D01* X73663446Y-110136678D01* X73651037Y-110132744D01* X73637946Y-110127992D01* X73624616Y-110122558D01* X73618000Y-110119627D01* X73611490Y-110116578D01* X73605143Y-110113426D01* X73599013Y-110110189D01* X73587121Y-110103589D01* X73575502Y-110095864D01* X73564224Y-110087115D01* X73553356Y-110077446D01* X73542965Y-110066958D01* X73533119Y-110055754D01* X73523888Y-110043936D01* X73515338Y-110031607D01* X73507539Y-110018868D01* X73500559Y-110005823D01* X73494465Y-109992572D01* X73489327Y-109979220D01* X73485211Y-109965867D01* X73482187Y-109952616D01* X73480323Y-109939571D01* X73479847Y-109933157D01* X73479686Y-109926832D01* X73479847Y-109920507D01* X73480323Y-109914093D01* X73481106Y-109907600D01* X73482187Y-109901042D01* X73483558Y-109894430D01* X73485211Y-109887778D01* X73487137Y-109881097D01* X73489327Y-109874399D01* X73494465Y-109861003D01* X73500559Y-109847688D01* X73507540Y-109834552D01* X73515339Y-109821693D01* X73523888Y-109809210D01* X73533119Y-109797199D01* X73542965Y-109785760D01* X73553356Y-109774990D01* X73564225Y-109764988D01* X73575502Y-109755851D01* X73581274Y-109751637D01* X73587121Y-109747677D01* X73593037Y-109743982D01* X73599013Y-109740565D01* X73605143Y-109737361D01* X73611490Y-109734301D01* X73618000Y-109731395D01* X73624616Y-109728651D01* X73631283Y-109726077D01* X73637946Y-109723683D01* X73644549Y-109721476D01* X73651037Y-109719465D01* X73657354Y-109717659D01* X73663446Y-109716066D01* X73669256Y-109714694D01* X73674729Y-109713553D01* X73679810Y-109712651D01* X73684444Y-109711996D01* X73688574Y-109711596D01* X73692146Y-109711461D01* X73695718Y-109711596D01* G37* D10* X67310000Y-41656000D02* X67310000Y-41148000D01* D11* G36* X71547169Y-111643978D02* G01* X71550741Y-111644113D01* X71554872Y-111644512D01* X71559505Y-111645168D01* X71564586Y-111646070D01* X71570060Y-111647211D01* X71575870Y-111648582D01* X71588279Y-111651982D01* X71594767Y-111653993D01* X71601370Y-111656200D01* X71608033Y-111658594D01* X71614700Y-111661168D01* X71621316Y-111663912D01* X71627825Y-111666818D01* X71634173Y-111669878D01* X71640303Y-111673082D01* X71652194Y-111680194D01* X71663813Y-111688368D01* X71675091Y-111697505D01* X71685960Y-111707507D01* X71696351Y-111718277D01* X71706196Y-111729716D01* X71715428Y-111741726D01* X71723977Y-111754210D01* X71731776Y-111767069D01* X71738757Y-111780205D01* X71744850Y-111793520D01* X71749989Y-111806916D01* X71754104Y-111820295D01* X71757129Y-111833559D01* X71758993Y-111846609D01* X71759469Y-111853024D01* X71759630Y-111859349D01* X71759495Y-111862921D01* X71759095Y-111867051D01* X71758440Y-111871685D01* X71757538Y-111876766D01* X71756397Y-111882239D01* X71755025Y-111888049D01* X71751626Y-111900458D01* X71749615Y-111906946D01* X71747408Y-111913549D01* X71745014Y-111920212D01* X71742440Y-111926879D01* X71739696Y-111933495D01* X71736790Y-111940005D01* X71733730Y-111946352D01* X71730525Y-111952482D01* X71723414Y-111964374D01* X71715240Y-111975993D01* X71706103Y-111987271D01* X71696101Y-111998139D01* X71685331Y-112008530D01* X71673892Y-112018376D01* X71661881Y-112027607D01* X71649398Y-112036157D01* X71636539Y-112043956D01* X71623403Y-112050936D01* X71610088Y-112057030D01* X71596692Y-112062169D01* X71583313Y-112066284D01* X71570049Y-112069308D01* X71556998Y-112071173D01* X71550584Y-112071649D01* X71544259Y-112071809D01* X71540687Y-112071642D01* X71536556Y-112071150D01* X71531923Y-112070351D01* X71526842Y-112069263D01* X71521368Y-112067901D01* X71515558Y-112066284D01* X71503149Y-112062350D01* X71490058Y-112057598D01* X71476728Y-112052164D01* X71470112Y-112049234D01* X71463603Y-112046184D01* X71457255Y-112043032D01* X71451126Y-112039795D01* X71439234Y-112033195D01* X71427615Y-112025470D01* X71416337Y-112016722D01* X71405468Y-112007052D01* X71395077Y-111996565D01* X71385232Y-111985361D01* X71376000Y-111973543D01* X71367451Y-111961213D01* X71359652Y-111948474D01* X71352672Y-111935429D01* X71346578Y-111922178D01* X71341439Y-111908826D01* X71337324Y-111895473D01* X71334300Y-111882222D01* X71332435Y-111869177D01* X71331959Y-111862763D01* X71331799Y-111856438D01* X71331959Y-111850113D01* X71332435Y-111843699D01* X71333218Y-111837206D01* X71334300Y-111830648D01* X71335671Y-111824037D01* X71337324Y-111817384D01* X71339249Y-111810703D01* X71341439Y-111804005D01* X71346578Y-111790609D01* X71352672Y-111777294D01* X71359652Y-111764158D01* X71367451Y-111751300D01* X71376000Y-111738816D01* X71385232Y-111726806D01* X71395077Y-111715366D01* X71405468Y-111704597D01* X71416337Y-111694594D01* X71427615Y-111685457D01* X71433386Y-111681244D01* X71439234Y-111677284D01* X71445150Y-111673589D01* X71451126Y-111670172D01* X71463609Y-111664749D01* X71476774Y-111659531D01* X71490212Y-111654722D01* X71496905Y-111652535D01* X71503513Y-111650527D01* X71509985Y-111648723D01* X71516269Y-111647150D01* X71522314Y-111645833D01* X71528070Y-111644797D01* X71533484Y-111644068D01* X71538506Y-111643671D01* X71543085Y-111643633D01* X71547169Y-111643978D01* G37* D12* X64038000Y-81407000D02* G75* G03* X64038000Y-81407000I-157000J0D01* G01* D11* G36* X74557201Y-109714507D02* G01* X74561332Y-109714906D01* X74565965Y-109715561D01* X74571046Y-109716464D01* X74576519Y-109717605D01* X74582330Y-109718976D01* X74594739Y-109722375D01* X74601227Y-109724386D01* X74607830Y-109726593D01* X74614493Y-109728988D01* X74621160Y-109731561D01* X74627776Y-109734305D01* X74634285Y-109737212D01* X74640633Y-109740271D01* X74646762Y-109743476D01* X74658654Y-109750588D01* X74670273Y-109758761D01* X74681551Y-109767898D01* X74692420Y-109777901D01* X74702811Y-109788670D01* X74712656Y-109800110D01* X74721888Y-109812120D01* X74730437Y-109824604D01* X74738236Y-109837463D01* X74745217Y-109850599D01* X74751310Y-109863914D01* X74756449Y-109877310D01* X74760565Y-109890688D01* X74763589Y-109903952D01* X74765453Y-109917003D01* X74765929Y-109923418D01* X74766090Y-109929742D01* X74765955Y-109933314D01* X74765555Y-109937445D01* X74764900Y-109942078D01* X74763998Y-109947159D01* X74762857Y-109952633D01* X74761485Y-109958443D01* X74758086Y-109970852D01* X74756075Y-109977340D01* X74753868Y-109983943D01* X74751474Y-109990606D01* X74748900Y-109997273D01* X74746156Y-110003889D01* X74743250Y-110010398D01* X74740190Y-110016746D01* X74736986Y-110022876D01* X74729874Y-110034768D01* X74721700Y-110046387D01* X74712563Y-110057665D01* X74702561Y-110068533D01* X74691791Y-110078924D01* X74680352Y-110088770D01* X74668342Y-110098001D01* X74655858Y-110106551D01* X74642999Y-110114350D01* X74629863Y-110121330D01* X74616548Y-110127424D01* X74603152Y-110132562D01* X74589773Y-110136678D01* X74576509Y-110139702D01* X74563458Y-110141567D01* X74557044Y-110142043D01* X74550719Y-110142203D01* X74547147Y-110142035D01* X74543017Y-110141544D01* X74538383Y-110140745D01* X74533302Y-110139657D01* X74527829Y-110138295D01* X74522019Y-110136678D01* X74509610Y-110132744D01* X74496518Y-110127992D01* X74483189Y-110122558D01* X74476573Y-110119627D01* X74470063Y-110116578D01* X74463716Y-110113426D01* X74457586Y-110110189D01* X74445694Y-110103589D01* X74434075Y-110095864D01* X74422797Y-110087115D01* X74411929Y-110077446D01* X74401537Y-110066958D01* X74391692Y-110055754D01* X74382461Y-110043936D01* X74373911Y-110031607D01* X74366112Y-110018868D01* X74359132Y-110005823D01* X74353038Y-109992572D01* X74347899Y-109979220D01* X74343784Y-109965867D01* X74340760Y-109952616D01* X74338895Y-109939571D01* X74338419Y-109933157D01* X74338259Y-109926832D01* X74338419Y-109920507D01* X74338895Y-109914093D01* X74339678Y-109907600D01* X74340760Y-109901042D01* X74342131Y-109894430D01* X74343784Y-109887778D01* X74345710Y-109881097D01* X74347899Y-109874399D01* X74353038Y-109861003D01* X74359132Y-109847688D01* X74366112Y-109834552D01* X74373911Y-109821693D01* X74382461Y-109809210D01* X74391692Y-109797199D01* X74401538Y-109785760D01* X74411929Y-109774990D01* X74422797Y-109764988D01* X74434075Y-109755851D01* X74439846Y-109751637D01* X74445694Y-109747677D01* X74451610Y-109743982D01* X74457586Y-109740565D01* X74463748Y-109737393D01* X74470188Y-109734426D01* X74476841Y-109731664D01* X74483643Y-109729106D01* X74490531Y-109726752D01* X74497439Y-109724604D01* X74504305Y-109722660D01* X74511065Y-109720920D01* X74517654Y-109719385D01* X74524008Y-109718055D01* X74530064Y-109716930D01* X74535758Y-109716009D01* X74541025Y-109715293D01* X74545802Y-109714781D01* X74550025Y-109714474D01* X74553629Y-109714372D01* X74557201Y-109714507D01* G37* G36* X75208474Y-110357573D02* G01* X75262347Y-110358140D01* X75309724Y-110358835D01* X75351132Y-110359786D01* X75387100Y-110361120D01* X75403209Y-110361971D01* X75418157Y-110362966D01* X75432009Y-110364121D01* X75444831Y-110365452D01* X75456690Y-110366974D01* X75467651Y-110368705D01* X75477781Y-110370659D01* X75487146Y-110372853D01* X75495811Y-110375303D01* X75503844Y-110378024D01* X75511309Y-110381034D01* X75518274Y-110384347D01* X75524803Y-110387980D01* X75530964Y-110391948D01* X75536822Y-110396269D01* X75542444Y-110400957D01* X75547895Y-110406028D01* X75553241Y-110411500D01* X75558549Y-110417387D01* X75563885Y-110423706D01* X75574905Y-110437702D01* X75586828Y-110453617D01* X75596434Y-110466646D01* X75600321Y-110473953D01* X75603654Y-110482539D01* X75606474Y-110492967D01* X75608826Y-110505800D01* X75612294Y-110540930D01* X75614397Y-110592430D01* X75615477Y-110664804D01* X75615932Y-110890180D01* X75615893Y-110958009D01* X75615756Y-111017806D01* X75615491Y-111070134D01* X75615068Y-111115555D01* X75614457Y-111154632D01* X75613630Y-111187929D01* X75613125Y-111202585D01* X75612554Y-111216007D01* X75611915Y-111228265D01* X75611202Y-111239430D01* X75610413Y-111249571D01* X75609543Y-111258759D01* X75608589Y-111267065D01* X75607547Y-111274559D01* X75606414Y-111281311D01* X75605185Y-111287392D01* X75603856Y-111292871D01* X75602426Y-111297820D01* X75600888Y-111302308D01* X75599240Y-111306406D01* X75597478Y-111310184D01* X75595599Y-111313713D01* X75593597Y-111317063D01* X75591471Y-111320304D01* X75586828Y-111326742D01* X75577095Y-111339779D01* X75567495Y-111351634D01* X75557954Y-111362356D01* X75548401Y-111371990D01* X75538762Y-111380584D01* X75528966Y-111388185D01* X75518939Y-111394839D01* X75508610Y-111400594D01* X75497906Y-111405496D01* X75486754Y-111409592D01* X75475081Y-111412930D01* X75462817Y-111415555D01* X75449887Y-111417515D01* X75436219Y-111418858D01* X75421742Y-111419629D01* X75406382Y-111419875D01* X75391022Y-111419597D01* X75376545Y-111418738D01* X75362877Y-111417266D01* X75356324Y-111416289D01* X75349947Y-111415146D01* X75343736Y-111413832D01* X75337682Y-111412343D01* X75331777Y-111410676D01* X75326010Y-111408825D01* X75320374Y-111406786D01* X75314858Y-111404556D01* X75309454Y-111402129D01* X75304154Y-111399502D01* X75298947Y-111396671D01* X75293824Y-111393630D01* X75288778Y-111390377D01* X75283798Y-111386906D01* X75278875Y-111383213D01* X75274001Y-111379294D01* X75269167Y-111375145D01* X75264363Y-111370762D01* X75254809Y-111361275D01* X75245269Y-111350798D01* X75235668Y-111339299D01* X75225936Y-111326742D01* X75217159Y-111313759D01* X75213504Y-111306866D01* X75210292Y-111299275D01* X75207490Y-111290660D01* X75205063Y-111280698D01* X75202977Y-111269065D01* X75201198Y-111255437D01* X75198424Y-111220898D01* X75196468Y-111174491D01* X75195058Y-111113622D01* X75193921Y-111035701D01* X75191011Y-110782494D01* X75062953Y-110782494D01* X75036736Y-110782315D01* X75012566Y-110781744D01* X74990306Y-110780729D01* X74969819Y-110779220D01* X74950970Y-110777165D01* X74933621Y-110774513D01* X74925467Y-110772948D01* X74917636Y-110771214D01* X74910113Y-110769305D01* X74902880Y-110767215D01* X74895919Y-110764937D01* X74889214Y-110762465D01* X74882748Y-110759793D01* X74876504Y-110756914D01* X74870464Y-110753822D01* X74864612Y-110750511D01* X74858931Y-110746973D01* X74853403Y-110743204D01* X74848011Y-110739195D01* X74842739Y-110734941D01* X74837569Y-110730436D01* X74832484Y-110725673D01* X74827467Y-110720645D01* X74822502Y-110715347D01* X74812657Y-110703913D01* X74804845Y-110693900D01* X74797776Y-110683528D01* X74791441Y-110672831D01* X74785832Y-110661843D01* X74780942Y-110650597D01* X74776762Y-110639126D01* X74773284Y-110627464D01* X74770501Y-110615646D01* X74768404Y-110603703D01* X74766986Y-110591671D01* X74766238Y-110579582D01* X74766152Y-110567470D01* X74766721Y-110555369D01* X74767937Y-110543312D01* X74769790Y-110531333D01* X74772275Y-110519466D01* X74775381Y-110507743D01* X74779102Y-110496199D01* X74783430Y-110484866D01* X74788356Y-110473780D01* X74793872Y-110462973D01* X74799971Y-110452478D01* X74806644Y-110442330D01* X74813884Y-110432562D01* X74821683Y-110423208D01* X74830032Y-110414300D01* X74838923Y-110405874D01* X74848349Y-110397961D01* X74858301Y-110390597D01* X74868772Y-110383814D01* X74879754Y-110377645D01* X74891238Y-110372126D01* X74897774Y-110369532D01* X74905466Y-110367203D01* X74924844Y-110363303D01* X74950430Y-110360359D01* X74983280Y-110358301D01* X75024452Y-110357062D01* X75075004Y-110356573D01* X75208474Y-110357573D01* G37* G36* X73578452Y-111644995D02* G01* X73700352Y-111645519D01* X73805425Y-111646115D01* X73894996Y-111646831D01* X73970392Y-111647712D01* X74003189Y-111648230D01* X74032939Y-111648807D01* X74059807Y-111649449D01* X74083961Y-111650162D01* X74105565Y-111650952D01* X74124786Y-111651824D01* X74141788Y-111652785D01* X74156738Y-111653840D01* X74169802Y-111654996D01* X74181145Y-111656257D01* X74190933Y-111657630D01* X74199332Y-111659121D01* X74206507Y-111660736D01* X74212624Y-111662480D01* X74217849Y-111664359D01* X74222348Y-111666380D01* X74226286Y-111668548D01* X74229829Y-111670869D01* X74233143Y-111673348D01* X74236394Y-111675992D01* X74249431Y-111685725D01* X74261286Y-111695325D01* X74272008Y-111704866D01* X74281642Y-111714419D01* X74290236Y-111724058D01* X74297837Y-111733854D01* X74304491Y-111743881D01* X74310246Y-111754210D01* X74315148Y-111764914D01* X74319244Y-111776066D01* X74322582Y-111787739D01* X74325207Y-111800003D01* X74327168Y-111812933D01* X74328510Y-111826601D01* X74329281Y-111841078D01* X74329527Y-111856438D01* X74329249Y-111871798D01* X74328390Y-111886276D01* X74326918Y-111899943D01* X74325941Y-111906496D01* X74324798Y-111912873D01* X74323484Y-111919084D01* X74321995Y-111925138D01* X74320328Y-111931043D01* X74318477Y-111936810D01* X74316438Y-111942446D01* X74314208Y-111947962D01* X74311781Y-111953366D01* X74309154Y-111958666D01* X74306323Y-111963873D01* X74303282Y-111968996D01* X74300029Y-111974042D01* X74296558Y-111979022D01* X74292865Y-111983945D01* X74288946Y-111988819D01* X74284797Y-111993653D01* X74280414Y-111998457D01* X74270927Y-112008011D01* X74260450Y-112017551D01* X74248951Y-112027151D01* X74236394Y-112036884D01* X74222376Y-112046496D01* X74199559Y-112053755D01* X74157506Y-112059036D01* X74085780Y-112062714D01* X73811565Y-112066761D01* X73293419Y-112068899D01* X72889645Y-112069945D01* X72729793Y-112069564D01* X72597466Y-112068535D01* X72492287Y-112066824D01* X72413882Y-112064397D01* X72361876Y-112061219D01* X72345655Y-112059339D01* X72335892Y-112057257D01* X72330147Y-112055460D01* X72324379Y-112053351D01* X72312819Y-112048242D01* X72301302Y-112042024D01* X72289917Y-112034792D01* X72278753Y-112026640D01* X72267901Y-112017660D01* X72257450Y-112007946D01* X72247488Y-111997594D01* X72238107Y-111986695D01* X72229395Y-111975345D01* X72221442Y-111963636D01* X72214337Y-111951663D01* X72208170Y-111939520D01* X72203031Y-111927300D01* X72199008Y-111915097D01* X72197444Y-111909031D01* X72196192Y-111903005D01* X72194751Y-111893713D01* X72193696Y-111884401D01* X72193024Y-111875081D01* X72192730Y-111865766D01* X72192810Y-111856471D01* X72193257Y-111847209D01* X72194068Y-111837992D01* X72195237Y-111828835D01* X72196761Y-111819750D01* X72198633Y-111810751D01* X72200850Y-111801850D01* X72203406Y-111793063D01* X72206297Y-111784401D01* X72209517Y-111775878D01* X72213063Y-111767508D01* X72216929Y-111759303D01* X72221110Y-111751277D01* X72225603Y-111743444D01* X72230401Y-111735817D01* X72235500Y-111728408D01* X72240895Y-111721232D01* X72246582Y-111714302D01* X72252556Y-111707630D01* X72258812Y-111701231D01* X72265344Y-111695118D01* X72272149Y-111689303D01* X72279222Y-111683801D01* X72286557Y-111678624D01* X72294151Y-111673787D01* X72301997Y-111669301D01* X72310092Y-111665181D01* X72318430Y-111661441D01* X72338331Y-111656512D01* X72377229Y-111652573D01* X72531254Y-111647252D01* X72818976Y-111644660D01* X73278867Y-111643978D01* X73578452Y-111644995D01* G37* G36* X71122752Y-109711622D02* G01* X71129167Y-109712098D01* X71135660Y-109712881D01* X71142218Y-109713962D01* X71148829Y-109715334D01* X71155482Y-109716986D01* X71162163Y-109718912D01* X71168861Y-109721102D01* X71182257Y-109726241D01* X71195572Y-109732334D01* X71208708Y-109739315D01* X71221566Y-109747114D01* X71234050Y-109755663D01* X71246061Y-109764895D01* X71257500Y-109774740D01* X71268270Y-109785131D01* X71278272Y-109796000D01* X71287409Y-109807277D01* X71291622Y-109813048D01* X71295582Y-109818896D01* X71299277Y-109824812D01* X71302694Y-109830788D01* X71308123Y-109843265D01* X71313381Y-109856391D01* X71318298Y-109869721D01* X71322703Y-109882812D01* X71326427Y-109895221D01* X71327979Y-109901031D01* X71329297Y-109906504D01* X71330360Y-109911586D01* X71331145Y-109916219D01* X71331632Y-109920350D01* X71331799Y-109923921D01* X71331638Y-109929990D01* X71331162Y-109936181D01* X71330379Y-109942479D01* X71329297Y-109948870D01* X71327926Y-109955341D01* X71326273Y-109961875D01* X71324348Y-109968460D01* X71322158Y-109975081D01* X71317019Y-109988372D01* X71310925Y-110001633D01* X71303945Y-110014749D01* X71296146Y-110027605D01* X71287597Y-110040086D01* X71278365Y-110052076D01* X71268520Y-110063461D01* X71258129Y-110074126D01* X71252750Y-110079152D01* X71247260Y-110083955D01* X71241668Y-110088520D01* X71235982Y-110092834D01* X71230211Y-110096880D01* X71224363Y-110100646D01* X71218447Y-110104117D01* X71212472Y-110107278D01* X71206342Y-110110515D01* X71199994Y-110113667D01* X71193485Y-110116717D01* X71186869Y-110119647D01* X71180202Y-110122441D01* X71173539Y-110125081D01* X71166936Y-110127551D01* X71160448Y-110129833D01* X71154130Y-110131911D01* X71148039Y-110133767D01* X71142228Y-110135384D01* X71136755Y-110136746D01* X71131674Y-110137834D01* X71127040Y-110138633D01* X71122910Y-110139125D01* X71119338Y-110139292D01* X71113270Y-110139132D01* X71107079Y-110138656D01* X71100781Y-110137873D01* X71094389Y-110136791D01* X71087919Y-110135420D01* X71081384Y-110133767D01* X71074799Y-110131841D01* X71068178Y-110129652D01* X71054888Y-110124513D01* X71041627Y-110118419D01* X71028511Y-110111439D01* X71015655Y-110103640D01* X71003174Y-110095090D01* X70991183Y-110085859D01* X70979798Y-110076013D01* X70969133Y-110065622D01* X70964107Y-110060243D01* X70959304Y-110054754D01* X70954739Y-110049162D01* X70950426Y-110043476D01* X70946379Y-110037705D01* X70942613Y-110031857D01* X70939143Y-110025941D01* X70935982Y-110019965D01* X70932745Y-110013835D01* X70929593Y-110007488D01* X70926543Y-110000979D01* X70923613Y-109994363D01* X70920819Y-109987696D01* X70918178Y-109981033D01* X70915709Y-109974430D01* X70913426Y-109967942D01* X70911349Y-109961624D01* X70909493Y-109955533D01* X70907875Y-109949722D01* X70906514Y-109944249D01* X70905425Y-109939168D01* X70904627Y-109934534D01* X70904135Y-109930404D01* X70903967Y-109926832D01* X70904128Y-109920507D01* X70904604Y-109914093D01* X70905387Y-109907600D01* X70906469Y-109901042D01* X70907840Y-109894430D01* X70909493Y-109887778D01* X70911418Y-109881097D01* X70913608Y-109874399D01* X70918747Y-109861003D01* X70924841Y-109847688D01* X70931821Y-109834552D01* X70939620Y-109821693D01* X70948169Y-109809210D01* X70957401Y-109797199D01* X70967246Y-109785760D01* X70977637Y-109774990D01* X70988506Y-109764988D01* X70999784Y-109755851D01* X71005555Y-109751637D01* X71011403Y-109747677D01* X71017319Y-109743982D01* X71023294Y-109740565D01* X71029424Y-109737361D01* X71035772Y-109734301D01* X71042281Y-109731395D01* X71048897Y-109728651D01* X71055564Y-109726077D01* X71062227Y-109723683D01* X71068830Y-109721476D01* X71075318Y-109719465D01* X71081636Y-109717659D01* X71087727Y-109716066D01* X71093537Y-109714694D01* X71099011Y-109713553D01* X71104092Y-109712651D01* X71108725Y-109711996D01* X71112856Y-109711596D01* X71116428Y-109711461D01* X71122752Y-109711622D01* G37* G36* X74553630Y-111000775D02* G01* X74559954Y-111000936D01* X74566369Y-111001412D01* X74572862Y-111002195D01* X74579420Y-111003277D01* X74586031Y-111004648D01* X74592684Y-111006301D01* X74599365Y-111008226D01* X74606063Y-111010416D01* X74619458Y-111015555D01* X74632773Y-111021649D01* X74645909Y-111028629D01* X74658768Y-111036428D01* X74671252Y-111044978D01* X74683262Y-111054209D01* X74694702Y-111064054D01* X74705472Y-111074446D01* X74715474Y-111085314D01* X74724611Y-111096592D01* X74728824Y-111102363D01* X74732784Y-111108211D01* X74736479Y-111114127D01* X74739896Y-111120103D01* X74745325Y-111132580D01* X74750583Y-111145705D01* X74755500Y-111159035D01* X74759905Y-111172126D01* X74763629Y-111184536D01* X74765181Y-111190346D01* X74766499Y-111195819D01* X74767561Y-111200900D01* X74768346Y-111205534D01* X74768833Y-111209664D01* X74769000Y-111213236D01* X74768865Y-111216808D01* X74768466Y-111220938D01* X74767811Y-111225572D01* X74766908Y-111230653D01* X74765767Y-111236126D01* X74764396Y-111241936D01* X74760997Y-111254345D01* X74758986Y-111260833D01* X74756779Y-111267437D01* X74754384Y-111274100D01* X74751811Y-111280767D01* X74749067Y-111287383D01* X74746161Y-111293892D01* X74743101Y-111300239D01* X74739896Y-111306369D01* X74732753Y-111318261D01* X74724492Y-111329880D01* X74715225Y-111341158D01* X74705062Y-111352027D01* X74694116Y-111362418D01* X74682495Y-111372263D01* X74670312Y-111381495D01* X74657677Y-111390044D01* X74644701Y-111397843D01* X74631495Y-111404823D01* X74618169Y-111410917D01* X74604835Y-111416056D01* X74591603Y-111420171D01* X74578584Y-111423195D01* X74565890Y-111425060D01* X74559698Y-111425536D01* X74553630Y-111425697D01* X74547561Y-111425536D01* X74541371Y-111425060D01* X74535072Y-111424277D01* X74528681Y-111423195D01* X74522211Y-111421824D01* X74515676Y-111420171D01* X74509091Y-111418246D01* X74502470Y-111416056D01* X74489179Y-111410917D01* X74475918Y-111404823D01* X74462802Y-111397843D01* X74449946Y-111390044D01* X74437465Y-111381494D01* X74425475Y-111372263D01* X74414090Y-111362417D01* X74403425Y-111352026D01* X74398399Y-111346647D01* X74393596Y-111341158D01* X74389031Y-111335566D01* X74384718Y-111329880D01* X74380671Y-111324109D01* X74376905Y-111318261D01* X74373434Y-111312345D01* X74370273Y-111306369D01* X74367036Y-111300239D01* X74363884Y-111293892D01* X74360834Y-111287383D01* X74357904Y-111280767D01* X74355110Y-111274100D01* X74352470Y-111267437D01* X74350000Y-111260834D01* X74347718Y-111254346D01* X74345640Y-111248028D01* X74343784Y-111241937D01* X74342167Y-111236127D01* X74340805Y-111230653D01* X74339717Y-111225572D01* X74338918Y-111220939D01* X74338426Y-111216808D01* X74338259Y-111213236D01* X74338419Y-111206911D01* X74338895Y-111200497D01* X74339678Y-111194004D01* X74340760Y-111187446D01* X74342131Y-111180835D01* X74343784Y-111174182D01* X74345710Y-111167501D01* X74347899Y-111160803D01* X74353038Y-111147407D01* X74359132Y-111134092D01* X74366112Y-111120956D01* X74373911Y-111108097D01* X74382461Y-111095614D01* X74391692Y-111083603D01* X74401538Y-111072164D01* X74411929Y-111061394D01* X74422797Y-111051392D01* X74434075Y-111042255D01* X74439846Y-111038042D01* X74445694Y-111034081D01* X74451610Y-111030387D01* X74457586Y-111026970D01* X74469949Y-111021547D01* X74482825Y-111016328D01* X74495904Y-111011519D01* X74502425Y-111009332D01* X74508882Y-111007324D01* X74515236Y-111005521D01* X74521450Y-111003948D01* X74527485Y-111002630D01* X74533302Y-111001594D01* X74538864Y-111000865D01* X74544131Y-111000469D01* X74549066Y-111000430D01* X74553630Y-111000775D01* G37* G36* X74126302Y-110354823D02* G01* X74132717Y-110355299D01* X74139210Y-110356082D01* X74145768Y-110357164D01* X74152379Y-110358535D01* X74159032Y-110360188D01* X74165713Y-110362114D01* X74172411Y-110364303D01* X74185807Y-110369442D01* X74199122Y-110375536D01* X74212258Y-110382516D01* X74225116Y-110390315D01* X74237600Y-110398865D01* X74249611Y-110408096D01* X74261050Y-110417942D01* X74271820Y-110428333D01* X74281822Y-110439201D01* X74290959Y-110450479D01* X74295172Y-110456250D01* X74299132Y-110462098D01* X74302827Y-110468014D01* X74306244Y-110473990D01* X74311673Y-110486467D01* X74316931Y-110499592D01* X74321848Y-110512922D01* X74326253Y-110526013D01* X74329977Y-110538422D01* X74331529Y-110544233D01* X74332847Y-110549706D01* X74333910Y-110554787D01* X74334695Y-110559421D01* X74335182Y-110563551D01* X74335349Y-110567123D01* X74335188Y-110573192D01* X74334712Y-110579382D01* X74333929Y-110585680D01* X74332847Y-110592072D01* X74331476Y-110598542D01* X74329823Y-110605077D01* X74327898Y-110611662D01* X74325708Y-110618283D01* X74320569Y-110631574D01* X74314475Y-110644835D01* X74307495Y-110657951D01* X74299696Y-110670807D01* X74291146Y-110683288D01* X74281915Y-110695278D01* X74272070Y-110706663D01* X74261678Y-110717328D01* X74256300Y-110722354D01* X74250810Y-110727157D01* X74245218Y-110731722D01* X74239532Y-110736035D01* X74233761Y-110740082D01* X74227913Y-110743848D01* X74221997Y-110747319D01* X74216021Y-110750480D01* X74209891Y-110753717D01* X74203544Y-110756869D01* X74197035Y-110759919D01* X74190419Y-110762849D01* X74183752Y-110765643D01* X74177089Y-110768283D01* X74170486Y-110770753D01* X74163998Y-110773035D01* X74157680Y-110775113D01* X74151589Y-110776969D01* X74145778Y-110778586D01* X74140305Y-110779948D01* X74135224Y-110781036D01* X74130590Y-110781835D01* X74126460Y-110782326D01* X74122888Y-110782494D01* X74116819Y-110782334D01* X74110629Y-110781858D01* X74104331Y-110781074D01* X74097939Y-110779993D01* X74091469Y-110778622D01* X74084934Y-110776969D01* X74078349Y-110775043D01* X74071728Y-110772853D01* X74058437Y-110767715D01* X74045176Y-110761621D01* X74032060Y-110754641D01* X74019204Y-110746842D01* X74006724Y-110738292D01* X73994733Y-110729061D01* X73983348Y-110719215D01* X73972683Y-110708824D01* X73967657Y-110703445D01* X73962854Y-110697956D01* X73958289Y-110692364D01* X73953976Y-110686678D01* X73949929Y-110680907D01* X73946163Y-110675059D01* X73942693Y-110669143D01* X73939532Y-110663167D01* X73936294Y-110657037D01* X73933142Y-110650690D01* X73930093Y-110644180D01* X73927162Y-110637565D01* X73924368Y-110630898D01* X73921728Y-110624235D01* X73919258Y-110617632D01* X73916976Y-110611144D01* X73914898Y-110604826D01* X73913042Y-110598735D01* X73911425Y-110592924D01* X73910064Y-110587451D01* X73908975Y-110582370D01* X73908176Y-110577736D01* X73907685Y-110573606D01* X73907517Y-110570034D01* X73907678Y-110563709D01* X73908154Y-110557294D01* X73908937Y-110550802D01* X73910018Y-110544244D01* X73911390Y-110537632D01* X73913042Y-110530980D01* X73914968Y-110524299D01* X73917158Y-110517601D01* X73922297Y-110504205D01* X73928390Y-110490890D01* X73935371Y-110477754D01* X73943170Y-110464895D01* X73951719Y-110452412D01* X73960951Y-110440401D01* X73970796Y-110428962D01* X73981187Y-110418192D01* X73992056Y-110408190D01* X74003334Y-110399053D01* X74009105Y-110394839D01* X74014952Y-110390879D01* X74020869Y-110387184D01* X74026844Y-110383767D01* X74032974Y-110380563D01* X74039322Y-110377503D01* X74045831Y-110374597D01* X74052447Y-110371853D01* X74059114Y-110369279D01* X74065777Y-110366885D01* X74072380Y-110364678D01* X74078868Y-110362667D01* X74085186Y-110360860D01* X74091277Y-110359267D01* X74097087Y-110357896D01* X74102561Y-110356755D01* X74107642Y-110355852D01* X74112275Y-110355197D01* X74116406Y-110354798D01* X74119978Y-110354663D01* X74126302Y-110354823D01* G37* G36* X72839898Y-109711622D02* G01* X72846313Y-109712098D01* X72852805Y-109712881D01* X72859364Y-109713962D01* X72865975Y-109715334D01* X72872627Y-109716986D01* X72879309Y-109718912D01* X72886006Y-109721102D01* X72899402Y-109726241D01* X72912718Y-109732334D01* X72925853Y-109739315D01* X72938712Y-109747114D01* X72951196Y-109755663D01* X72963206Y-109764895D01* X72974646Y-109774740D01* X72985415Y-109785131D01* X72995418Y-109796000D01* X73004555Y-109807277D01* X73008768Y-109813048D01* X73012728Y-109818896D01* X73016423Y-109824812D01* X73019840Y-109830788D01* X73025269Y-109843265D01* X73030527Y-109856391D01* X73035444Y-109869721D01* X73039849Y-109882812D01* X73043573Y-109895221D01* X73045125Y-109901031D01* X73046443Y-109906504D01* X73047505Y-109911586D01* X73048291Y-109916219D01* X73048777Y-109920350D01* X73048944Y-109923921D01* X73048784Y-109929990D01* X73048308Y-109936181D01* X73047525Y-109942479D01* X73046443Y-109948870D01* X73045072Y-109955341D01* X73043419Y-109961875D01* X73041493Y-109968460D01* X73039304Y-109975081D01* X73034165Y-109988372D01* X73028071Y-110001633D01* X73021091Y-110014749D01* X73013292Y-110027605D01* X73004742Y-110040086D01* X72995511Y-110052076D01* X72985665Y-110063461D01* X72975274Y-110074126D01* X72969895Y-110079152D01* X72964406Y-110083955D01* X72958814Y-110088520D01* X72953128Y-110092834D01* X72947357Y-110096880D01* X72941509Y-110100646D01* X72935593Y-110104117D01* X72929617Y-110107278D01* X72923487Y-110110515D01* X72917140Y-110113667D01* X72910631Y-110116717D01* X72904015Y-110119647D01* X72897348Y-110122441D01* X72890685Y-110125081D01* X72884082Y-110127551D01* X72877594Y-110129833D01* X72871276Y-110131911D01* X72865184Y-110133767D01* X72859374Y-110135384D01* X72853901Y-110136746D01* X72848820Y-110137834D01* X72844186Y-110138633D01* X72840056Y-110139125D01* X72836484Y-110139292D01* X72830415Y-110139132D01* X72824225Y-110138656D01* X72817927Y-110137873D01* X72811535Y-110136791D01* X72805065Y-110135420D01* X72798530Y-110133767D01* X72791945Y-110131841D01* X72785324Y-110129652D01* X72772033Y-110124513D01* X72758772Y-110118419D01* X72745656Y-110111439D01* X72732800Y-110103640D01* X72720319Y-110095090D01* X72708329Y-110085859D01* X72696944Y-110076013D01* X72686279Y-110065622D01* X72681253Y-110060243D01* X72676450Y-110054754D01* X72671885Y-110049162D01* X72667572Y-110043476D01* X72663525Y-110037705D01* X72659759Y-110031857D01* X72656289Y-110025941D01* X72653128Y-110019965D01* X72649890Y-110013835D01* X72646738Y-110007488D01* X72643689Y-110000979D01* X72640758Y-109994363D01* X72637965Y-109987696D01* X72635324Y-109981033D01* X72632854Y-109974430D01* X72630572Y-109967942D01* X72628494Y-109961624D01* X72626638Y-109955533D01* X72625021Y-109949722D01* X72623660Y-109944249D01* X72622571Y-109939168D01* X72621773Y-109934534D01* X72621281Y-109930404D01* X72621113Y-109926832D01* X72621274Y-109920507D01* X72621750Y-109914093D01* X72622533Y-109907600D01* X72623614Y-109901042D01* X72624986Y-109894430D01* X72626638Y-109887778D01* X72628564Y-109881097D01* X72630754Y-109874399D01* X72635893Y-109861003D01* X72641986Y-109847688D01* X72648967Y-109834552D01* X72656766Y-109821693D01* X72665315Y-109809210D01* X72674547Y-109797199D01* X72684392Y-109785760D01* X72694783Y-109774990D01* X72705652Y-109764988D01* X72716930Y-109755851D01* X72722701Y-109751637D01* X72728548Y-109747677D01* X72734465Y-109743982D01* X72740440Y-109740565D01* X72746538Y-109737361D01* X72752798Y-109734301D01* X72759177Y-109731395D01* X72765633Y-109728651D01* X72772124Y-109726077D01* X72778605Y-109723683D01* X72785036Y-109721476D01* X72791372Y-109719465D01* X72797573Y-109717659D01* X72803594Y-109716066D01* X72809393Y-109714694D01* X72814929Y-109713553D01* X72820157Y-109712651D01* X72825035Y-109711996D01* X72829522Y-109711596D01* X72833573Y-109711461D01* X72839898Y-109711622D01* G37* G36* X71346351Y-110357574D02* G01* X71400225Y-110358141D01* X71447601Y-110358836D01* X71489009Y-110359786D01* X71524977Y-110361121D01* X71541087Y-110361972D01* X71556034Y-110362967D01* X71569886Y-110364122D01* X71582708Y-110365452D01* X71594567Y-110366975D01* X71605528Y-110368705D01* X71615658Y-110370659D01* X71625023Y-110372853D01* X71633688Y-110375303D01* X71641721Y-110378025D01* X71649186Y-110381034D01* X71656151Y-110384347D01* X71662680Y-110387980D01* X71668841Y-110391949D01* X71674699Y-110396269D01* X71680321Y-110400957D01* X71685772Y-110406029D01* X71691118Y-110411500D01* X71696427Y-110417387D01* X71701762Y-110423706D01* X71712782Y-110437703D01* X71724705Y-110453617D01* X71728141Y-110458738D01* X71731356Y-110464257D01* X71737120Y-110476389D01* X71741997Y-110489800D01* X71745987Y-110504277D01* X71749091Y-110519606D01* X71751308Y-110535575D01* X71752638Y-110551970D01* X71753081Y-110568579D01* X71752638Y-110585187D01* X71751308Y-110601582D01* X71749091Y-110617551D01* X71745987Y-110632881D01* X71741997Y-110647357D01* X71737120Y-110660768D01* X71731356Y-110672900D01* X71728141Y-110678420D01* X71724705Y-110683540D01* X71702507Y-110713452D01* X71692046Y-110725657D01* X71681367Y-110736201D01* X71669989Y-110745209D01* X71657430Y-110752810D01* X71643208Y-110759133D01* X71626842Y-110764304D01* X71607850Y-110768453D01* X71585749Y-110771705D01* X71560060Y-110774191D01* X71530298Y-110776037D01* X71456634Y-110778322D01* X71360903Y-110779584D01* X71307630Y-110780494D01* X71259959Y-110781000D01* X71217489Y-110781036D01* X71179820Y-110780539D01* X71146551Y-110779446D01* X71131441Y-110778655D01* X71117280Y-110777692D01* X71104020Y-110776547D01* X71091608Y-110775212D01* X71079996Y-110773681D01* X71069133Y-110771945D01* X71058970Y-110769995D01* X71049455Y-110767824D01* X71040540Y-110765424D01* X71032173Y-110762787D01* X71024306Y-110759905D01* X71016887Y-110756769D01* X71009866Y-110753373D01* X71003194Y-110749707D01* X70996821Y-110745764D01* X70990696Y-110741537D01* X70984769Y-110737016D01* X70978990Y-110732193D01* X70973310Y-110727062D01* X70967677Y-110721614D01* X70956355Y-110709734D01* X70947998Y-110699457D01* X70940385Y-110688836D01* X70933511Y-110677906D01* X70927370Y-110666698D01* X70921956Y-110655244D01* X70917262Y-110643578D01* X70913284Y-110631732D01* X70910016Y-110619739D01* X70907450Y-110607630D01* X70905582Y-110595438D01* X70904406Y-110583197D01* X70903916Y-110570938D01* X70904106Y-110558694D01* X70904970Y-110546497D01* X70906502Y-110534380D01* X70908697Y-110522376D01* X70911548Y-110510517D01* X70915050Y-110498835D01* X70919196Y-110487363D01* X70923982Y-110476133D01* X70929401Y-110465179D01* X70935447Y-110454532D01* X70942114Y-110444225D01* X70949397Y-110434291D01* X70957290Y-110424761D01* X70965786Y-110415669D01* X70974880Y-110407047D01* X70984567Y-110398928D01* X70994839Y-110391343D01* X71005692Y-110384327D01* X71017119Y-110377910D01* X71029115Y-110372126D01* X71035652Y-110369532D01* X71043343Y-110367203D01* X71062721Y-110363303D01* X71088307Y-110360359D01* X71121157Y-110358301D01* X71162329Y-110357062D01* X71212881Y-110356573D01* X71346351Y-110357574D01* G37* G36* X71973827Y-109713994D02* G01* X71977911Y-109714372D01* X71984236Y-109714532D01* X71990651Y-109715008D01* X71997143Y-109715791D01* X72003701Y-109716873D01* X72010313Y-109718244D01* X72016965Y-109719897D01* X72023646Y-109721822D01* X72030344Y-109724012D01* X72043740Y-109729151D01* X72057055Y-109735245D01* X72070191Y-109742225D01* X72083050Y-109750024D01* X72095534Y-109758574D01* X72107544Y-109767805D01* X72118983Y-109777651D01* X72129753Y-109788042D01* X72139756Y-109798910D01* X72148893Y-109810188D01* X72153106Y-109815959D01* X72157066Y-109821807D01* X72160761Y-109827723D01* X72164178Y-109833699D01* X72169606Y-109846176D01* X72174864Y-109859301D01* X72179781Y-109872631D01* X72184187Y-109885722D01* X72187910Y-109898131D01* X72189463Y-109903942D01* X72190781Y-109909415D01* X72191843Y-109914496D01* X72192628Y-109919130D01* X72193115Y-109923260D01* X72193282Y-109926832D01* X72193147Y-109930404D01* X72192748Y-109934534D01* X72192092Y-109939168D01* X72191190Y-109944249D01* X72190049Y-109949722D01* X72188678Y-109955532D01* X72185278Y-109967941D01* X72183267Y-109974429D01* X72181060Y-109981033D01* X72178666Y-109987695D01* X72176092Y-109994362D01* X72173348Y-110000978D01* X72170442Y-110007488D01* X72167382Y-110013835D01* X72164178Y-110019965D01* X72157034Y-110031857D01* X72148773Y-110043476D01* X72139506Y-110054754D01* X72129344Y-110065622D01* X72118397Y-110076014D01* X72106777Y-110085859D01* X72094594Y-110095090D01* X72081959Y-110103640D01* X72068982Y-110111439D01* X72055776Y-110118419D01* X72042450Y-110124513D01* X72029116Y-110129652D01* X72015884Y-110133767D01* X72002866Y-110136791D01* X71990171Y-110138656D01* X71983980Y-110139132D01* X71977911Y-110139292D01* X71971843Y-110139132D01* X71965652Y-110138656D01* X71959354Y-110137873D01* X71952962Y-110136791D01* X71946492Y-110135420D01* X71939957Y-110133767D01* X71933372Y-110131841D01* X71926751Y-110129652D01* X71913461Y-110124513D01* X71900200Y-110118419D01* X71887083Y-110111439D01* X71874227Y-110103640D01* X71861747Y-110095090D01* X71849756Y-110085859D01* X71838371Y-110076013D01* X71827706Y-110065622D01* X71822680Y-110060243D01* X71817877Y-110054754D01* X71813312Y-110049162D01* X71808999Y-110043476D01* X71804952Y-110037705D01* X71801186Y-110031857D01* X71797716Y-110025941D01* X71794555Y-110019965D01* X71791318Y-110013835D01* X71788166Y-110007488D01* X71785116Y-110000979D01* X71782186Y-109994363D01* X71779392Y-109987696D01* X71776751Y-109981033D01* X71774281Y-109974430D01* X71771999Y-109967942D01* X71769922Y-109961624D01* X71768066Y-109955533D01* X71766448Y-109949722D01* X71765087Y-109944249D01* X71763998Y-109939168D01* X71763200Y-109934534D01* X71762708Y-109930404D01* X71762540Y-109926832D01* X71762701Y-109920507D01* X71763177Y-109914093D01* X71763960Y-109907600D01* X71765041Y-109901042D01* X71766413Y-109894430D01* X71768066Y-109887778D01* X71769991Y-109881097D01* X71772181Y-109874399D01* X71777320Y-109861003D01* X71783413Y-109847688D01* X71790394Y-109834552D01* X71798193Y-109821693D01* X71806742Y-109809210D01* X71815974Y-109797199D01* X71825819Y-109785760D01* X71836210Y-109774990D01* X71847079Y-109764988D01* X71858357Y-109755851D01* X71864128Y-109751637D01* X71869976Y-109747677D01* X71875892Y-109743982D01* X71881867Y-109740565D01* X71887998Y-109737362D01* X71894350Y-109734307D01* X71900873Y-109731414D01* X71907515Y-109728696D01* X71914226Y-109726166D01* X71920953Y-109723836D01* X71927647Y-109721719D01* X71934255Y-109719829D01* X71940726Y-109718177D01* X71947011Y-109716776D01* X71953056Y-109715640D01* X71958811Y-109714781D01* X71964226Y-109714212D01* X71969248Y-109713945D01* X71973827Y-109713994D01* G37* G36* X72395129Y-110359097D02* G01* X72399260Y-110359594D01* X72401119Y-110359989D01* X72402832Y-110360484D01* X72409156Y-110360645D01* X72415571Y-110361121D01* X72422064Y-110361904D01* X72428622Y-110362985D01* X72435233Y-110364356D01* X72441886Y-110366009D01* X72448567Y-110367935D01* X72455265Y-110370125D01* X72468661Y-110375263D01* X72481976Y-110381357D01* X72495112Y-110388338D01* X72507971Y-110396137D01* X72520454Y-110404686D01* X72532465Y-110413917D01* X72543904Y-110423763D01* X72554674Y-110434154D01* X72564676Y-110445023D01* X72573813Y-110456300D01* X72578026Y-110462072D01* X72581986Y-110467919D01* X72585681Y-110473835D01* X72589098Y-110479811D01* X72594527Y-110492288D01* X72599785Y-110505414D01* X72604702Y-110518744D01* X72609108Y-110531835D01* X72612831Y-110544244D01* X72614383Y-110550054D01* X72615701Y-110555527D01* X72616764Y-110560608D01* X72617549Y-110565242D01* X72618036Y-110569372D01* X72618203Y-110572944D01* X72618068Y-110576516D01* X72617668Y-110580647D01* X72617013Y-110585280D01* X72616111Y-110590361D01* X72614970Y-110595835D01* X72613598Y-110601645D01* X72610199Y-110614054D01* X72608188Y-110620542D01* X72605981Y-110627145D01* X72603587Y-110633808D01* X72601013Y-110640475D01* X72598269Y-110647091D01* X72595363Y-110653600D01* X72592303Y-110659947D01* X72589098Y-110666077D01* X72581986Y-110677969D01* X72573813Y-110689588D01* X72564676Y-110700866D01* X72554674Y-110711735D01* X72543904Y-110722126D01* X72532465Y-110731971D01* X72520454Y-110741203D01* X72507970Y-110749752D01* X72495112Y-110757551D01* X72481976Y-110764532D01* X72468661Y-110770625D01* X72455265Y-110775764D01* X72441886Y-110779879D01* X72428622Y-110782904D01* X72415571Y-110784768D01* X72409156Y-110785244D01* X72402832Y-110785405D01* X72399260Y-110785237D01* X72395129Y-110784745D01* X72390496Y-110783947D01* X72385415Y-110782858D01* X72379941Y-110781497D01* X72374131Y-110779879D01* X72361722Y-110775946D01* X72348631Y-110771194D01* X72335301Y-110765759D01* X72328685Y-110762829D01* X72322176Y-110759779D01* X72315828Y-110756627D01* X72309698Y-110753390D01* X72297807Y-110746790D01* X72286188Y-110739065D01* X72274910Y-110730317D01* X72264041Y-110720648D01* X72253650Y-110710160D01* X72243805Y-110698956D01* X72234573Y-110687138D01* X72226024Y-110674809D01* X72218225Y-110662070D01* X72211245Y-110649024D01* X72205151Y-110635774D01* X72200012Y-110622421D01* X72195897Y-110609068D01* X72192873Y-110595818D01* X72191008Y-110582773D01* X72190532Y-110576358D01* X72190371Y-110570034D01* X72190532Y-110563709D01* X72191008Y-110557294D01* X72191791Y-110550802D01* X72192873Y-110544244D01* X72194244Y-110537632D01* X72195897Y-110530980D01* X72197822Y-110524299D01* X72200012Y-110517601D01* X72205151Y-110504205D01* X72211245Y-110490890D01* X72218225Y-110477754D01* X72226024Y-110464895D01* X72234573Y-110452412D01* X72243805Y-110440401D01* X72253650Y-110428962D01* X72264041Y-110418192D01* X72274910Y-110408190D01* X72286188Y-110399053D01* X72291959Y-110394839D01* X72297807Y-110390879D01* X72303723Y-110387184D01* X72309698Y-110383767D01* X72315828Y-110380564D01* X72322176Y-110377514D01* X72328685Y-110374635D01* X72335301Y-110371944D01* X72341968Y-110369457D01* X72348631Y-110367192D01* X72355234Y-110365165D01* X72361722Y-110363394D01* X72368040Y-110361897D01* X72374131Y-110360689D01* X72379941Y-110359788D01* X72385415Y-110359211D01* X72390496Y-110358975D01* X72395129Y-110359097D01* G37* G36* X64703390Y-105465805D02* G01* X64711227Y-105466400D01* X64718950Y-105467381D01* X64726550Y-105468737D01* X64734016Y-105470459D01* X64741339Y-105472538D01* X64748509Y-105474962D01* X64755517Y-105477724D01* X64762353Y-105480813D01* X64769006Y-105484219D01* X64775468Y-105487933D01* X64781729Y-105491946D01* X64787779Y-105496246D01* X64793608Y-105500826D01* X64799207Y-105505675D01* X64804566Y-105510783D01* X64809676Y-105516141D01* X64814525Y-105521739D01* X64819106Y-105527568D01* X64823408Y-105533618D01* X64827422Y-105539878D01* X64831137Y-105546340D01* X64834545Y-105552994D01* X64837635Y-105559830D01* X64840397Y-105566839D01* X64842823Y-105574010D01* X64844902Y-105581334D01* X64846625Y-105588802D01* X64847982Y-105596404D01* X64848963Y-105604130D01* X64849559Y-105611970D01* X64849760Y-105619915D01* X64849559Y-105627860D01* X64848963Y-105635700D01* X64847982Y-105643425D01* X64846625Y-105651027D01* X64844902Y-105658495D01* X64842823Y-105665819D01* X64840397Y-105672990D01* X64837635Y-105679999D01* X64834545Y-105686835D01* X64831137Y-105693489D01* X64827422Y-105699951D01* X64823408Y-105706212D01* X64819106Y-105712261D01* X64814526Y-105718090D01* X64809676Y-105723688D01* X64804567Y-105729046D01* X64799208Y-105734154D01* X64793609Y-105739003D01* X64787780Y-105743583D01* X64781730Y-105747884D01* X64775469Y-105751896D01* X64769007Y-105755610D01* X64762353Y-105759016D01* X64755518Y-105762105D01* X64748510Y-105764867D01* X64741340Y-105767292D01* X64734017Y-105769370D01* X64726550Y-105771092D01* X64718951Y-105772448D01* X64711228Y-105773429D01* X64703390Y-105774025D01* X64695449Y-105774225D01* X64643060Y-105776630D01* X64583757Y-105783907D01* X64518606Y-105796148D01* X64448672Y-105813448D01* X64375023Y-105835898D01* X64298725Y-105863591D01* X64220843Y-105896621D01* X64142444Y-105935081D01* X64064596Y-105979063D01* X63988362Y-106028661D01* X63951185Y-106055594D01* X63914811Y-106083967D01* X63879375Y-106113790D01* X63845008Y-106145074D01* X63811846Y-106177832D01* X63780020Y-106212076D01* X63749665Y-106247816D01* X63720913Y-106285065D01* X63693898Y-106323834D01* X63668753Y-106364134D01* X63645612Y-106405978D01* X63624607Y-106449376D01* X63605513Y-106495264D01* X63589101Y-106542157D01* X63564306Y-106638902D01* X63550181Y-106739509D01* X63546691Y-106843873D01* X63553796Y-106951890D01* X63571458Y-107063456D01* X63599639Y-107178467D01* X63638302Y-107296820D01* X63687407Y-107418409D01* X63746917Y-107543132D01* X63816793Y-107670884D01* X63896997Y-107801561D01* X63987492Y-107935059D01* X64088239Y-108071274D01* X64199199Y-108210103D01* X64320335Y-108351441D01* X64447973Y-108499730D01* X64565313Y-108644594D01* X64672345Y-108786007D01* X64769058Y-108923942D01* X64855440Y-109058372D01* X64931480Y-109189271D01* X64997168Y-109316613D01* X65052491Y-109440371D01* X65097439Y-109560520D01* X65132001Y-109677032D01* X65145384Y-109733916D01* X65156166Y-109789881D01* X65164346Y-109844923D01* X65169922Y-109899040D01* X65172893Y-109952228D01* X65173258Y-110004484D01* X65171015Y-110055804D01* X65166163Y-110106186D01* X65158701Y-110155625D01* X65148627Y-110204119D01* X65135939Y-110251665D01* X65120637Y-110298258D01* X65104370Y-110340004D01* X65086346Y-110380019D01* X65066677Y-110418337D01* X65045478Y-110454995D01* X65022864Y-110490025D01* X64998948Y-110523464D01* X64973846Y-110555345D01* X64947673Y-110585705D01* X64920541Y-110614577D01* X64892566Y-110641996D01* X64863862Y-110667998D01* X64834544Y-110692616D01* X64774522Y-110737844D01* X64713416Y-110777957D01* X64652141Y-110813236D01* X64591612Y-110843957D01* X64532744Y-110870399D01* X64476454Y-110892842D01* X64423656Y-110911563D01* X64375267Y-110926842D01* X64295373Y-110948184D01* X64306601Y-110992166D01* X64316864Y-111035998D01* X64334626Y-111123046D01* X64348926Y-111208996D01* X64360028Y-111293513D01* X64368200Y-111376265D01* X64373708Y-111456917D01* X64376817Y-111535137D01* X64377794Y-111610591D01* X64373585Y-111725367D01* X64361106Y-111832972D01* X64340580Y-111933637D01* X64312231Y-112027594D01* X64276282Y-112115074D01* X64232958Y-112196307D01* X64182481Y-112271527D01* X64125076Y-112340963D01* X64060964Y-112404847D01* X63990371Y-112463411D01* X63913520Y-112516886D01* X63830633Y-112565503D01* X63741935Y-112609493D01* X63647649Y-112649089D01* X63443207Y-112716019D01* X63219096Y-112768144D01* X62977102Y-112807315D01* X62719015Y-112835383D01* X62446622Y-112854197D01* X61866071Y-112871470D01* X61249753Y-112873937D01* X60925066Y-112872301D01* X60605594Y-112866748D01* X60293510Y-112856310D01* X59990983Y-112840019D01* X59700184Y-112816906D01* X59423284Y-112786004D01* X59162453Y-112746344D01* X59038743Y-112722928D01* X58919863Y-112696959D01* X58806086Y-112668317D01* X58697684Y-112636881D01* X58594926Y-112602529D01* X58498085Y-112565141D01* X58407433Y-112524595D01* X58323239Y-112480770D01* X58245777Y-112433547D01* X58175316Y-112382803D01* X58112129Y-112328417D01* X58056486Y-112270269D01* X58008659Y-112208237D01* X57968920Y-112142201D01* X57937539Y-112072040D01* X57914788Y-111997632D01* X57900939Y-111918856D01* X57896262Y-111835592D01* X58204996Y-111835592D01* X58210021Y-111895230D01* X58224830Y-111951571D01* X58249028Y-112004707D01* X58282216Y-112054731D01* X58323998Y-112101733D01* X58373977Y-112145808D01* X58431756Y-112187045D01* X58496937Y-112225538D01* X58647919Y-112294658D01* X58823748Y-112353905D01* X59021247Y-112404014D01* X59237241Y-112445722D01* X59468552Y-112479765D01* X59712005Y-112506881D01* X60222631Y-112543272D01* X60743708Y-112560786D01* X61249828Y-112565315D01* X61578222Y-112564595D01* X61887944Y-112561633D01* X62178648Y-112555225D01* X62449986Y-112544167D01* X62701612Y-112527255D01* X62819925Y-112516228D01* X62933179Y-112503285D01* X63041332Y-112488277D01* X63144339Y-112471054D01* X63242158Y-112451464D01* X63334746Y-112429357D01* X63422058Y-112404582D01* X63504051Y-112376990D01* X63580683Y-112346430D01* X63651909Y-112312751D01* X63717686Y-112275802D01* X63777972Y-112235434D01* X63832721Y-112191495D01* X63881892Y-112143835D01* X63925441Y-112092305D01* X63963323Y-112036752D01* X63995497Y-111977028D01* X64021919Y-111912980D01* X64042544Y-111844460D01* X64057330Y-111771316D01* X64066234Y-111693397D01* X64069211Y-111610554D01* X64064544Y-111453019D01* X64049526Y-111293428D01* X64022631Y-111133467D01* X63982334Y-110974823D01* X63927111Y-110819182D01* X63893425Y-110743014D01* X63855435Y-110668229D01* X63812951Y-110595037D01* X63765782Y-110523650D01* X63713737Y-110454277D01* X63656626Y-110387131D01* X63594258Y-110322421D01* X63526442Y-110260358D01* X63452988Y-110201154D01* X63373706Y-110145018D01* X63288403Y-110092162D01* X63196890Y-110042796D01* X63098977Y-109997131D01* X62994472Y-109955377D01* X62883184Y-109917747D01* X62764924Y-109884449D01* X62639500Y-109855695D01* X62506722Y-109831696D01* X62366399Y-109812663D01* X62218341Y-109798806D01* X62062357Y-109790335D01* X61898255Y-109787463D01* X61816146Y-109788643D01* X61732547Y-109792175D01* X61647538Y-109798040D01* X61561199Y-109806223D01* X61473609Y-109816709D01* X61384848Y-109829480D01* X61294993Y-109844522D01* X61204125Y-109861816D01* X61019665Y-109903102D01* X60832102Y-109953209D01* X60642070Y-110012007D01* X60450202Y-110079367D01* X60300914Y-110134840D01* X60250127Y-109983978D01* X60229042Y-109926902D01* X60205121Y-109872318D01* X60178567Y-109820391D01* X60149582Y-109771285D01* X60118366Y-109725163D01* X60085123Y-109682190D01* X60050052Y-109642531D01* X60013357Y-109606349D01* X59994463Y-109589613D01* X59975239Y-109573808D01* X59955709Y-109558955D01* X59935899Y-109545074D01* X59915834Y-109532185D01* X59895540Y-109520310D01* X59875041Y-109509468D01* X59854363Y-109499680D01* X59833530Y-109490966D01* X59812569Y-109483348D01* X59791504Y-109476846D01* X59770361Y-109471480D01* X59749164Y-109467270D01* X59727940Y-109464238D01* X59706713Y-109462404D01* X59685508Y-109461788D01* X59677040Y-109461887D01* X59668585Y-109462184D01* X59660145Y-109462683D01* X59651719Y-109463385D01* X59643306Y-109464293D01* X59634908Y-109465409D01* X59626524Y-109466734D01* X59618154Y-109468272D01* X59593883Y-109473856D01* X59570087Y-109481102D01* X59546797Y-109489984D01* X59524042Y-109500475D01* X59501852Y-109512549D01* X59480258Y-109526177D01* X59459289Y-109541334D01* X59438975Y-109557993D01* X59419346Y-109576127D01* X59400432Y-109595708D01* X59382264Y-109616712D01* X59364871Y-109639109D01* X59348282Y-109662875D01* X59332529Y-109687982D01* X59317641Y-109714402D01* X59303648Y-109742110D01* X59289399Y-109773836D01* X59276523Y-109806469D01* X59265027Y-109839955D01* X59254914Y-109874236D01* X59246192Y-109909256D01* X59238866Y-109944959D01* X59232941Y-109981288D01* X59228423Y-110018188D01* X59225318Y-110055602D01* X59223631Y-110093474D01* X59223367Y-110131746D01* X59224533Y-110170364D01* X59227134Y-110209270D01* X59231176Y-110248408D01* X59236664Y-110287722D01* X59243603Y-110327156D01* X59248441Y-110350734D01* X59253785Y-110374173D01* X59259628Y-110397452D01* X59265966Y-110420550D01* X59272789Y-110443449D01* X59280093Y-110466126D01* X59287870Y-110488563D01* X59296115Y-110510739D01* X59340642Y-110626482D01* X59237194Y-110694923D01* X59108102Y-110782887D01* X58988131Y-110869880D01* X58877171Y-110955633D01* X58775113Y-111039879D01* X58681848Y-111122349D01* X58597267Y-111202775D01* X58521260Y-111280888D01* X58453717Y-111356421D01* X58394530Y-111429105D01* X58343590Y-111498672D01* X58300786Y-111564854D01* X58266010Y-111627382D01* X58251598Y-111657192D01* X58239153Y-111685988D01* X58228659Y-111713736D01* X58220104Y-111740404D01* X58213474Y-111765956D01* X58208755Y-111790361D01* X58205933Y-111813584D01* X58204996Y-111835592D01* X57896262Y-111835592D01* X57897427Y-111800260D01* X57900904Y-111764252D01* X57914709Y-111690315D01* X57937496Y-111613997D01* X57969084Y-111535514D01* X58009292Y-111455084D01* X58057938Y-111372923D01* X58114842Y-111289248D01* X58179823Y-111204275D01* X58252698Y-111118222D01* X58333288Y-111031306D01* X58421410Y-110943742D01* X58516884Y-110855748D01* X58619530Y-110767541D01* X58729164Y-110679337D01* X58845607Y-110591353D01* X58968678Y-110503805D01* X58964596Y-110489250D01* X58960674Y-110474629D01* X58956910Y-110459951D01* X58953306Y-110445222D01* X58949861Y-110430451D01* X58946577Y-110415646D01* X58943454Y-110400814D01* X58940492Y-110385964D01* X58931453Y-110334423D01* X58924361Y-110282931D01* X58919208Y-110231564D01* X58915986Y-110180397D01* X58914687Y-110129503D01* X58915303Y-110078958D01* X58917826Y-110028836D01* X58922248Y-109979212D01* X58928561Y-109930160D01* X58936758Y-109881755D01* X58946831Y-109834071D01* X58958771Y-109787184D01* X58972571Y-109741168D01* X58988222Y-109696096D01* X59005718Y-109652045D01* X59025050Y-109609089D01* X59047544Y-109564761D01* X59071730Y-109522449D01* X59097556Y-109482196D01* X59124971Y-109444043D01* X59153924Y-109408033D01* X59184364Y-109374208D01* X59216239Y-109342610D01* X59249497Y-109313282D01* X59284088Y-109286265D01* X59319961Y-109261602D01* X59357064Y-109239336D01* X59395345Y-109219507D01* X59434754Y-109202160D01* X59475239Y-109187335D01* X59516749Y-109175075D01* X59559233Y-109165422D01* X59593135Y-109159719D01* X59627057Y-109155791D01* X59660965Y-109153612D01* X59694823Y-109153158D01* X59728598Y-109154405D01* X59762257Y-109157327D01* X59795763Y-109161898D01* X59829084Y-109168095D01* X59862184Y-109175893D01* X59895030Y-109185266D01* X59927587Y-109196189D01* X59959821Y-109208638D01* X59991698Y-109222587D01* X60023184Y-109238013D01* X60054244Y-109254889D01* X60084843Y-109273191D01* X60114948Y-109292894D01* X60144525Y-109313972D01* X60173539Y-109336402D01* X60201955Y-109360159D01* X60229740Y-109385216D01* X60256860Y-109411549D01* X60283279Y-109439135D01* X60308964Y-109467946D01* X60333880Y-109497959D01* X60357994Y-109529149D01* X60381271Y-109561490D01* X60403676Y-109594958D01* X60425175Y-109629528D01* X60445735Y-109665174D01* X60465320Y-109701873D01* X60483897Y-109739599D01* X60670151Y-109679325D01* X60854744Y-109626757D01* X61037154Y-109581996D01* X61216859Y-109545146D01* X61305533Y-109529718D01* X61393336Y-109516307D01* X61480201Y-109504924D01* X61566063Y-109495581D01* X61650858Y-109488293D01* X61734519Y-109483071D01* X61816981Y-109479929D01* X61898180Y-109478879D01* X62027242Y-109480513D01* X62151844Y-109485351D01* X62272063Y-109493301D01* X62387974Y-109504267D01* X62499654Y-109518157D01* X62607178Y-109534875D01* X62710623Y-109554329D01* X62810064Y-109576423D01* X62905577Y-109601065D01* X62997239Y-109628160D01* X63085125Y-109657613D01* X63169312Y-109689332D01* X63249875Y-109723222D01* X63326890Y-109759190D01* X63400434Y-109797140D01* X63470582Y-109836980D01* X63537411Y-109878615D01* X63600996Y-109921951D01* X63661413Y-109966895D01* X63718739Y-110013352D01* X63773049Y-110061228D01* X63824419Y-110110430D01* X63872926Y-110160863D01* X63918645Y-110212433D01* X63961652Y-110265047D01* X64002024Y-110318611D01* X64039836Y-110373030D01* X64075165Y-110428210D01* X64138674Y-110540480D01* X64193161Y-110654668D01* X64237518Y-110644561D01* X64307797Y-110624532D01* X64350185Y-110610218D01* X64396086Y-110592729D01* X64444512Y-110571835D01* X64494474Y-110547302D01* X64544982Y-110518902D01* X64595047Y-110486401D01* X64619604Y-110468540D01* X64643680Y-110449568D01* X64667151Y-110429455D01* X64689893Y-110408173D01* X64711783Y-110385692D01* X64732696Y-110361983D01* X64752510Y-110337019D01* X64771100Y-110310768D01* X64788344Y-110283204D01* X64804117Y-110254296D01* X64818295Y-110224017D01* X64830756Y-110192336D01* X64851115Y-110120264D01* X64862391Y-110043748D01* X64864625Y-109962879D01* X64857859Y-109877745D01* X64842131Y-109788437D01* X64817483Y-109695043D01* X64783955Y-109597654D01* X64741588Y-109496359D01* X64690422Y-109391248D01* X64630498Y-109282409D01* X64561856Y-109169933D01* X64484537Y-109053909D01* X64398582Y-108934427D01* X64304030Y-108811576D01* X64200923Y-108685446D01* X64089300Y-108556126D01* X64002179Y-108455524D01* X63920673Y-108356995D01* X63844633Y-108260530D01* X63773910Y-108166123D01* X63708353Y-108073763D01* X63647812Y-107983442D01* X63592137Y-107895152D01* X63541179Y-107808883D01* X63494787Y-107724628D01* X63452811Y-107642378D01* X63415102Y-107562124D01* X63381509Y-107483858D01* X63351883Y-107407570D01* X63326073Y-107333252D01* X63303930Y-107260897D01* X63285303Y-107190494D01* X63270043Y-107122036D01* X63257999Y-107055514D01* X63249023Y-106990919D01* X63242963Y-106928243D01* X63239669Y-106867477D01* X63238993Y-106808612D01* X63240783Y-106751640D01* X63244890Y-106696553D01* X63259456Y-106591996D01* X63281489Y-106494872D01* X63309790Y-106405114D01* X63343160Y-106322652D01* X63369099Y-106268746D01* X63397457Y-106216664D01* X63428095Y-106166397D01* X63460879Y-106117939D01* X63495671Y-106071283D01* X63532334Y-106026421D01* X63570733Y-105983345D01* X63610731Y-105942048D01* X63652192Y-105902524D01* X63694978Y-105864764D01* X63783982Y-105794508D01* X63876652Y-105731222D01* X63971895Y-105674848D01* X64068620Y-105625326D01* X64165734Y-105582598D01* X64262146Y-105546605D01* X64356763Y-105517288D01* X64448494Y-105494588D01* X64536246Y-105478447D01* X64618929Y-105468805D01* X64695448Y-105465604D01* X64703390Y-105465805D01* G37* G36* X74981461Y-111643978D02* G01* X74987786Y-111644138D01* X74994200Y-111644614D01* X75000693Y-111645397D01* X75007251Y-111646479D01* X75013862Y-111647850D01* X75020515Y-111649503D01* X75027196Y-111651429D01* X75033894Y-111653619D01* X75047290Y-111658757D01* X75060605Y-111664851D01* X75073741Y-111671831D01* X75086600Y-111679630D01* X75099083Y-111688180D01* X75111094Y-111697411D01* X75122533Y-111707257D01* X75133303Y-111717648D01* X75143305Y-111728516D01* X75152442Y-111739794D01* X75156655Y-111745565D01* X75160616Y-111751413D01* X75164310Y-111757329D01* X75167728Y-111763305D01* X75173156Y-111775782D01* X75178414Y-111788907D01* X75183331Y-111802237D01* X75187737Y-111815329D01* X75191460Y-111827738D01* X75193012Y-111833548D01* X75194331Y-111839021D01* X75195393Y-111844102D01* X75196178Y-111848736D01* X75196665Y-111852866D01* X75196832Y-111856438D01* X75196697Y-111860010D01* X75196297Y-111864140D01* X75195642Y-111868774D01* X75194740Y-111873855D01* X75193599Y-111879328D01* X75192227Y-111885139D01* X75188828Y-111897548D01* X75186817Y-111904036D01* X75184610Y-111910639D01* X75182216Y-111917302D01* X75179642Y-111923969D01* X75176898Y-111930585D01* X75173992Y-111937094D01* X75170932Y-111943442D01* X75167728Y-111949572D01* X75160616Y-111961463D01* X75152442Y-111973082D01* X75143305Y-111984360D01* X75133303Y-111995229D01* X75122533Y-112005620D01* X75111094Y-112015465D01* X75099083Y-112024697D01* X75086600Y-112033246D01* X75073741Y-112041045D01* X75060605Y-112048026D01* X75047290Y-112054119D01* X75033894Y-112059258D01* X75020515Y-112063374D01* X75007251Y-112066398D01* X74994200Y-112068262D01* X74987786Y-112068738D01* X74981461Y-112068899D01* X74975392Y-112068738D01* X74969202Y-112068262D01* X74962904Y-112067479D01* X74956512Y-112066398D01* X74950042Y-112065026D01* X74943507Y-112063374D01* X74936922Y-112061448D01* X74930301Y-112059258D01* X74917010Y-112054119D01* X74903749Y-112048026D01* X74890633Y-112041045D01* X74877777Y-112033246D01* X74865297Y-112024697D01* X74853306Y-112015465D01* X74841921Y-112005620D01* X74831256Y-111995229D01* X74826230Y-111989850D01* X74821427Y-111984360D01* X74816862Y-111978768D01* X74812549Y-111973082D01* X74808502Y-111967311D01* X74804736Y-111961463D01* X74801265Y-111955547D01* X74798104Y-111949572D01* X74794867Y-111943442D01* X74791715Y-111937094D01* X74788665Y-111930585D01* X74785735Y-111923969D01* X74782941Y-111917302D01* X74780301Y-111910639D01* X74777831Y-111904036D01* X74775549Y-111897548D01* X74773471Y-111891230D01* X74771615Y-111885139D01* X74769998Y-111879329D01* X74768636Y-111873855D01* X74767548Y-111868774D01* X74766749Y-111864141D01* X74766257Y-111860010D01* X74766090Y-111856438D01* X74766250Y-111850113D01* X74766726Y-111843699D01* X74767509Y-111837206D01* X74768591Y-111830648D01* X74769962Y-111824037D01* X74771615Y-111817384D01* X74773541Y-111810703D01* X74775731Y-111804005D01* X74780869Y-111790609D01* X74786963Y-111777294D01* X74793943Y-111764158D01* X74801743Y-111751300D01* X74810292Y-111738816D01* X74819523Y-111726806D01* X74829369Y-111715366D01* X74839760Y-111704597D01* X74850628Y-111694594D01* X74861906Y-111685457D01* X74867677Y-111681244D01* X74873525Y-111677284D01* X74879441Y-111673589D01* X74885417Y-111670172D01* X74897900Y-111664749D01* X74911065Y-111659531D01* X74924503Y-111654722D01* X74931197Y-111652534D01* X74937805Y-111650526D01* X74944276Y-111648723D01* X74950561Y-111647150D01* X74956606Y-111645833D01* X74962361Y-111644796D01* X74967776Y-111644067D01* X74972798Y-111643671D01* X74977377Y-111643632D01* X74981461Y-111643978D01* G37* G36* X73698471Y-110998026D02* G01* X73704886Y-110998502D01* X73711379Y-110999285D01* X73717937Y-111000366D01* X73724548Y-111001737D01* X73731201Y-111003390D01* X73737882Y-111005316D01* X73744580Y-111007506D01* X73757976Y-111012644D01* X73771291Y-111018738D01* X73784426Y-111025719D01* X73797285Y-111033518D01* X73809769Y-111042067D01* X73821779Y-111051298D01* X73833219Y-111061144D01* X73843988Y-111071535D01* X73853991Y-111082404D01* X73863128Y-111093681D01* X73867341Y-111099453D01* X73871301Y-111105300D01* X73874996Y-111111216D01* X73878413Y-111117192D01* X73883842Y-111129669D01* X73889100Y-111142795D01* X73894017Y-111156124D01* X73898422Y-111169216D01* X73902146Y-111181625D01* X73903698Y-111187435D01* X73905016Y-111192908D01* X73906079Y-111197989D01* X73906864Y-111202623D01* X73907350Y-111206753D01* X73907517Y-111210325D01* X73907357Y-111216394D01* X73906881Y-111222584D01* X73906098Y-111228883D01* X73905016Y-111235274D01* X73903645Y-111241745D01* X73901992Y-111248279D01* X73900067Y-111254864D01* X73897877Y-111261485D01* X73892738Y-111274776D01* X73886644Y-111288037D01* X73879664Y-111301153D01* X73871865Y-111314009D01* X73863315Y-111326490D01* X73854084Y-111338480D01* X73844238Y-111349865D01* X73833847Y-111360530D01* X73828468Y-111365556D01* X73822979Y-111370359D01* X73817387Y-111374924D01* X73811701Y-111379238D01* X73805930Y-111383284D01* X73800082Y-111387050D01* X73794166Y-111390521D01* X73788190Y-111393682D01* X73782060Y-111396919D01* X73775713Y-111400071D01* X73769204Y-111403121D01* X73762588Y-111406051D01* X73755921Y-111408845D01* X73749258Y-111411485D01* X73742655Y-111413955D01* X73736167Y-111416238D01* X73729849Y-111418315D01* X73723758Y-111420171D01* X73717947Y-111421788D01* X73712474Y-111423150D01* X73707393Y-111424238D01* X73702759Y-111425037D01* X73698629Y-111425529D01* X73695057Y-111425697D01* X73688988Y-111425536D01* X73682798Y-111425060D01* X73676499Y-111424277D01* X73670108Y-111423195D01* X73663638Y-111421824D01* X73657103Y-111420171D01* X73650518Y-111418246D01* X73643897Y-111416056D01* X73630606Y-111410917D01* X73617345Y-111404823D01* X73604229Y-111397843D01* X73591373Y-111390044D01* X73578892Y-111381494D01* X73566902Y-111372263D01* X73555517Y-111362417D01* X73544852Y-111352026D01* X73539826Y-111346647D01* X73535023Y-111341158D01* X73530458Y-111335566D01* X73526145Y-111329880D01* X73522098Y-111324109D01* X73518332Y-111318261D01* X73514862Y-111312345D01* X73511701Y-111306369D01* X73508463Y-111300239D01* X73505311Y-111293892D01* X73502262Y-111287383D01* X73499331Y-111280767D01* X73496537Y-111274100D01* X73493897Y-111267437D01* X73491427Y-111260834D01* X73489145Y-111254346D01* X73487067Y-111248028D01* X73485211Y-111241937D01* X73483594Y-111236127D01* X73482233Y-111230653D01* X73481144Y-111225572D01* X73480345Y-111220939D01* X73479854Y-111216808D01* X73479686Y-111213236D01* X73479847Y-111206911D01* X73480323Y-111200497D01* X73481106Y-111194004D01* X73482187Y-111187446D01* X73483558Y-111180835D01* X73485211Y-111174182D01* X73487137Y-111167501D01* X73489327Y-111160803D01* X73494465Y-111147407D01* X73500559Y-111134092D01* X73507540Y-111120956D01* X73515339Y-111108097D01* X73523888Y-111095614D01* X73533119Y-111083603D01* X73542965Y-111072164D01* X73553356Y-111061394D01* X73564225Y-111051392D01* X73575502Y-111042255D01* X73581274Y-111038042D01* X73587121Y-111034081D01* X73593037Y-111030387D01* X73599013Y-111026970D01* X73611371Y-111021541D01* X73624206Y-111016283D01* X73637178Y-111011366D01* X73649945Y-111006960D01* X73656146Y-111005003D01* X73662167Y-111003237D01* X73667966Y-111001684D01* X73673502Y-111000366D01* X73678730Y-110999304D01* X73683609Y-110998519D01* X73688095Y-110998032D01* X73692147Y-110997865D01* X73698471Y-110998026D01* G37* D13* X83951541Y-41704295D02* X84103922Y-41704295D01* X84103922Y-41704295D02* X84180112Y-41742390D01* X84180112Y-41742390D02* X84256303Y-41818580D01* X84256303Y-41818580D02* X84294398Y-41970961D01* X84294398Y-41970961D02* X84294398Y-42237628D01* X84294398Y-42237628D02* X84256303Y-42390009D01* X84256303Y-42390009D02* X84180112Y-42466200D01* X84180112Y-42466200D02* X84103922Y-42504295D01* X84103922Y-42504295D02* X83951541Y-42504295D01* X83951541Y-42504295D02* X83875350Y-42466200D01* X83875350Y-42466200D02* X83799160Y-42390009D01* X83799160Y-42390009D02* X83761064Y-42237628D01* X83761064Y-42237628D02* X83761064Y-41970961D01* X83761064Y-41970961D02* X83799160Y-41818580D01* X83799160Y-41818580D02* X83875350Y-41742390D01* X83875350Y-41742390D02* X83951541Y-41704295D01* X84637255Y-41704295D02* X84637255Y-42351914D01* X84637255Y-42351914D02* X84675350Y-42428104D01* X84675350Y-42428104D02* X84713445Y-42466200D01* X84713445Y-42466200D02* X84789636Y-42504295D01* X84789636Y-42504295D02* X84942017Y-42504295D01* X84942017Y-42504295D02* X85018207Y-42466200D01* X85018207Y-42466200D02* X85056302Y-42428104D01* X85056302Y-42428104D02* X85094398Y-42351914D01* X85094398Y-42351914D02* X85094398Y-41704295D01* X85361064Y-41704295D02* X85818207Y-41704295D01* X85589635Y-42504295D02* X85589635Y-41704295D01* X86656302Y-42275723D02* X87037255Y-42275723D01* X86580112Y-42504295D02* X86846779Y-41704295D01* X86846779Y-41704295D02* X87113445Y-42504295D01* X64741541Y-52039819D02* X65027255Y-52135057D01* X65027255Y-52135057D02* X65122493Y-52230295D01* X65122493Y-52230295D02* X65217731Y-52420771D01* X65217731Y-52420771D02* X65217731Y-52706485D01* X65217731Y-52706485D02* X65122493Y-52896961D01* X65122493Y-52896961D02* X65027255Y-52992200D01* X65027255Y-52992200D02* X64836779Y-53087438D01* X64836779Y-53087438D02* X64074874Y-53087438D01* X64074874Y-53087438D02* X64074874Y-51087438D01* X64074874Y-51087438D02* X64741541Y-51087438D01* X64741541Y-51087438D02* X64932017Y-51182676D01* X64932017Y-51182676D02* X65027255Y-51277914D01* X65027255Y-51277914D02* X65122493Y-51468390D01* X65122493Y-51468390D02* X65122493Y-51658866D01* X65122493Y-51658866D02* X65027255Y-51849342D01* X65027255Y-51849342D02* X64932017Y-51944580D01* X64932017Y-51944580D02* X64741541Y-52039819D01* X64741541Y-52039819D02* X64074874Y-52039819D01* X97457435Y-101494431D02* X97376623Y-101521368D01* X97376623Y-101521368D02* X97295811Y-101602180D01* X97295811Y-101602180D02* X97241936Y-101709930D01* X97241936Y-101709930D02* X97241936Y-101817680D01* X97241936Y-101817680D02* X97268873Y-101898492D01* X97268873Y-101898492D02* X97349685Y-102033179D01* X97349685Y-102033179D02* X97430498Y-102113991D01* X97430498Y-102113991D02* X97565185Y-102194803D01* X97565185Y-102194803D02* X97645997Y-102221741D01* X97645997Y-102221741D02* X97753746Y-102221741D01* X97753746Y-102221741D02* X97861496Y-102167866D01* X97861496Y-102167866D02* X97915371Y-102113991D01* X97915371Y-102113991D02* X97969246Y-102006241D01* X97969246Y-102006241D02* X97969246Y-101952367D01* X97969246Y-101952367D02* X97780684Y-101763805D01* X97780684Y-101763805D02* X97672934Y-101871554D01* X98265557Y-101763805D02* X97699872Y-101198119D01* X97699872Y-101198119D02* X98588806Y-101440556D01* X98588806Y-101440556D02* X98023120Y-100874871D01* X98858180Y-101171182D02* X98292494Y-100605497D01* X98292494Y-100605497D02* X98427181Y-100470810D01* X98427181Y-100470810D02* X98534931Y-100416935D01* X98534931Y-100416935D02* X98642680Y-100416935D01* X98642680Y-100416935D02* X98723493Y-100443872D01* X98723493Y-100443872D02* X98858180Y-100524685D01* X98858180Y-100524685D02* X98938992Y-100605497D01* X98938992Y-100605497D02* X99019804Y-100740184D01* X99019804Y-100740184D02* X99046741Y-100820996D01* X99046741Y-100820996D02* X99046741Y-100928746D01* X99046741Y-100928746D02* X98992867Y-101036495D01* X98992867Y-101036495D02* X98858180Y-101171182D01* X97909589Y-104425023D02* X97909589Y-104478898D01* X97909589Y-104478898D02* X97855714Y-104586648D01* X97855714Y-104586648D02* X97801839Y-104640522D01* X97801839Y-104640522D02* X97694090Y-104694397D01* X97694090Y-104694397D02* X97586340Y-104694397D01* X97586340Y-104694397D02* X97505528Y-104667460D01* X97505528Y-104667460D02* X97370841Y-104586648D01* X97370841Y-104586648D02* X97290029Y-104505835D01* X97290029Y-104505835D02* X97209217Y-104371148D01* X97209217Y-104371148D02* X97182279Y-104290336D01* X97182279Y-104290336D02* X97182279Y-104182587D01* X97182279Y-104182587D02* X97236154Y-104074837D01* X97236154Y-104074837D02* X97290029Y-104020962D01* X97290029Y-104020962D02* X97397778Y-103967087D01* X97397778Y-103967087D02* X97451653Y-103967087D01* X98475274Y-103967087D02* X98205900Y-104236461D01* X98205900Y-104236461D02* X97640215Y-103670776D01* X98663836Y-103778526D02* X98098151Y-103212840D01* X98987085Y-103455277D02* X98421400Y-103374465D01* X98421400Y-102889591D02* X98421400Y-103536089D01* X62780653Y-100291709D02* X62214967Y-99726023D01* X62214967Y-99726023D02* X62349654Y-99591336D01* X62349654Y-99591336D02* X62457404Y-99537462D01* X62457404Y-99537462D02* X62565154Y-99537462D01* X62565154Y-99537462D02* X62645966Y-99564399D01* X62645966Y-99564399D02* X62780653Y-99645211D01* X62780653Y-99645211D02* X62861465Y-99726023D01* X62861465Y-99726023D02* X62942277Y-99860711D01* X62942277Y-99860711D02* X62969215Y-99941523D01* X62969215Y-99941523D02* X62969215Y-100049272D01* X62969215Y-100049272D02* X62915340Y-100157022D01* X62915340Y-100157022D02* X62780653Y-100291709D01* X63157777Y-99591336D02* X63427151Y-99321962D01* X63265526Y-99806836D02* X62888403Y-99052588D01* X62888403Y-99052588D02* X63642650Y-99429712D01* X63184714Y-98756277D02* X63507963Y-98433028D01* X63912024Y-99160338D02* X63346338Y-98594653D01* X64073648Y-98675465D02* X64343022Y-98406091D01* X64181398Y-98890964D02* X63804274Y-98136717D01* X63804274Y-98136717D02* X64558521Y-98513841D01* X73178921Y-75395060D02* X73313608Y-75529747D01* X73125047Y-75610559D02* X73313608Y-75529747D01* X73313608Y-75529747D02* X73394421Y-75341185D01* X73340546Y-75718308D02* X73313608Y-75529747D01* X73313608Y-75529747D02* X73502170Y-75556684D01* X97427653Y-100024709D02* X96861967Y-99459023D01* X96861967Y-99459023D02* X96996654Y-99324336D01* X96996654Y-99324336D02* X97104404Y-99270462D01* X97104404Y-99270462D02* X97212154Y-99270462D01* X97212154Y-99270462D02* X97292966Y-99297399D01* X97292966Y-99297399D02* X97427653Y-99378211D01* X97427653Y-99378211D02* X97508465Y-99459023D01* X97508465Y-99459023D02* X97589277Y-99593711D01* X97589277Y-99593711D02* X97616215Y-99674523D01* X97616215Y-99674523D02* X97616215Y-99782272D01* X97616215Y-99782272D02* X97562340Y-99890022D01* X97562340Y-99890022D02* X97427653Y-100024709D01* X97804777Y-99324336D02* X98074151Y-99054962D01* X97912526Y-99539836D02* X97535403Y-98785588D01* X97535403Y-98785588D02* X98289650Y-99162712D01* X97831714Y-98489277D02* X98154963Y-98166028D01* X98559024Y-98893338D02* X97993338Y-98327653D01* X98720648Y-98408465D02* X98990022Y-98139091D01* X98828398Y-98623964D02* X98451274Y-97869717D01* X98451274Y-97869717D02* X99205521Y-98246841D01* X60727456Y-75452524D02* X60862143Y-75587211D01* X60673582Y-75668023D02* X60862143Y-75587211D01* X60862143Y-75587211D02* X60942956Y-75398649D01* X60889081Y-75775772D02* X60862143Y-75587211D01* X60862143Y-75587211D02* X61050705Y-75614148D01* X69313636Y-52516009D02* X70266017Y-52516009D01* X69123160Y-53087438D02* X69789826Y-51087438D01* X69789826Y-51087438D02* X70456493Y-53087438D01* X63111589Y-104806023D02* X63111589Y-104859898D01* X63111589Y-104859898D02* X63057714Y-104967648D01* X63057714Y-104967648D02* X63003839Y-105021522D01* X63003839Y-105021522D02* X62896090Y-105075397D01* X62896090Y-105075397D02* X62788340Y-105075397D01* X62788340Y-105075397D02* X62707528Y-105048460D01* X62707528Y-105048460D02* X62572841Y-104967648D01* X62572841Y-104967648D02* X62492029Y-104886835D01* X62492029Y-104886835D02* X62411217Y-104752148D01* X62411217Y-104752148D02* X62384279Y-104671336D01* X62384279Y-104671336D02* X62384279Y-104563587D01* X62384279Y-104563587D02* X62438154Y-104455837D01* X62438154Y-104455837D02* X62492029Y-104401962D01* X62492029Y-104401962D02* X62599778Y-104348087D01* X62599778Y-104348087D02* X62653653Y-104348087D01* X63677274Y-104348087D02* X63407900Y-104617461D01* X63407900Y-104617461D02* X62842215Y-104051776D01* X63865836Y-104159526D02* X63300151Y-103593840D01* X64189085Y-103836277D02* X63623400Y-103755465D01* X63623400Y-103270591D02* X63623400Y-103917089D01* X62532435Y-101875431D02* X62451623Y-101902368D01* X62451623Y-101902368D02* X62370811Y-101983180D01* X62370811Y-101983180D02* X62316936Y-102090930D01* X62316936Y-102090930D02* X62316936Y-102198680D01* X62316936Y-102198680D02* X62343873Y-102279492D01* X62343873Y-102279492D02* X62424685Y-102414179D01* X62424685Y-102414179D02* X62505498Y-102494991D01* X62505498Y-102494991D02* X62640185Y-102575803D01* X62640185Y-102575803D02* X62720997Y-102602741D01* X62720997Y-102602741D02* X62828746Y-102602741D01* X62828746Y-102602741D02* X62936496Y-102548866D01* X62936496Y-102548866D02* X62990371Y-102494991D01* X62990371Y-102494991D02* X63044246Y-102387241D01* X63044246Y-102387241D02* X63044246Y-102333367D01* X63044246Y-102333367D02* X62855684Y-102144805D01* X62855684Y-102144805D02* X62747934Y-102252554D01* X63340557Y-102144805D02* X62774872Y-101579119D01* X62774872Y-101579119D02* X63663806Y-101821556D01* X63663806Y-101821556D02* X63098120Y-101255871D01* X63933180Y-101552182D02* X63367494Y-100986497D01* X63367494Y-100986497D02* X63502181Y-100851810D01* X63502181Y-100851810D02* X63609931Y-100797935D01* X63609931Y-100797935D02* X63717680Y-100797935D01* X63717680Y-100797935D02* X63798493Y-100824872D01* X63798493Y-100824872D02* X63933180Y-100905685D01* X63933180Y-100905685D02* X64013992Y-100986497D01* X64013992Y-100986497D02* X64094804Y-101121184D01* X64094804Y-101121184D02* X64121741Y-101201996D01* X64121741Y-101201996D02* X64121741Y-101309746D01* X64121741Y-101309746D02* X64067867Y-101417495D01* X64067867Y-101417495D02* X63933180Y-101552182D01* X47441541Y-41764295D02* X47593922Y-41764295D01* X47593922Y-41764295D02* X47670112Y-41802390D01* X47670112Y-41802390D02* X47746303Y-41878580D01* X47746303Y-41878580D02* X47784398Y-42030961D01* X47784398Y-42030961D02* X47784398Y-42297628D01* X47784398Y-42297628D02* X47746303Y-42450009D01* X47746303Y-42450009D02* X47670112Y-42526200D01* X47670112Y-42526200D02* X47593922Y-42564295D01* X47593922Y-42564295D02* X47441541Y-42564295D01* X47441541Y-42564295D02* X47365350Y-42526200D01* X47365350Y-42526200D02* X47289160Y-42450009D01* X47289160Y-42450009D02* X47251064Y-42297628D01* X47251064Y-42297628D02* X47251064Y-42030961D01* X47251064Y-42030961D02* X47289160Y-41878580D01* X47289160Y-41878580D02* X47365350Y-41802390D01* X47365350Y-41802390D02* X47441541Y-41764295D01* X48127255Y-41764295D02* X48127255Y-42411914D01* X48127255Y-42411914D02* X48165350Y-42488104D01* X48165350Y-42488104D02* X48203445Y-42526200D01* X48203445Y-42526200D02* X48279636Y-42564295D01* X48279636Y-42564295D02* X48432017Y-42564295D01* X48432017Y-42564295D02* X48508207Y-42526200D01* X48508207Y-42526200D02* X48546302Y-42488104D01* X48546302Y-42488104D02* X48584398Y-42411914D01* X48584398Y-42411914D02* X48584398Y-41764295D01* X48851064Y-41764295D02* X49308207Y-41764295D01* X49079635Y-42564295D02* X49079635Y-41764295D01* X50451064Y-42145247D02* X50565350Y-42183342D01* X50565350Y-42183342D02* X50603445Y-42221438D01* X50603445Y-42221438D02* X50641541Y-42297628D01* X50641541Y-42297628D02* X50641541Y-42411914D01* X50641541Y-42411914D02* X50603445Y-42488104D01* X50603445Y-42488104D02* X50565350Y-42526200D01* X50565350Y-42526200D02* X50489160Y-42564295D01* X50489160Y-42564295D02* X50184398Y-42564295D01* X50184398Y-42564295D02* X50184398Y-41764295D01* X50184398Y-41764295D02* X50451064Y-41764295D01* X50451064Y-41764295D02* X50527255Y-41802390D01* X50527255Y-41802390D02* X50565350Y-41840485D01* X50565350Y-41840485D02* X50603445Y-41916676D01* X50603445Y-41916676D02* X50603445Y-41992866D01* X50603445Y-41992866D02* X50565350Y-42069057D01* X50565350Y-42069057D02* X50527255Y-42107152D01* X50527255Y-42107152D02* X50451064Y-42145247D01* X50451064Y-42145247D02* X50184398Y-42145247D01* X90718095Y-94754819D02* X90718095Y-95564342D01* X90718095Y-95564342D02* X90765714Y-95659580D01* X90765714Y-95659580D02* X90813333Y-95707200D01* X90813333Y-95707200D02* X90908571Y-95754819D01* X90908571Y-95754819D02* X91099047Y-95754819D01* X91099047Y-95754819D02* X91194285Y-95707200D01* X91194285Y-95707200D02* X91241904Y-95659580D01* X91241904Y-95659580D02* X91289523Y-95564342D01* X91289523Y-95564342D02* X91289523Y-94754819D01* X92289523Y-95754819D02* X91718095Y-95754819D01* X92003809Y-95754819D02* X92003809Y-94754819D01* X92003809Y-94754819D02* X91908571Y-94897676D01* X91908571Y-94897676D02* X91813333Y-94992914D01* X91813333Y-94992914D02* X91718095Y-95040533D01* X97441998Y-60080868D02* X97361185Y-60107805D01* X97361185Y-60107805D02* X97280373Y-60188618D01* X97280373Y-60188618D02* X97226498Y-60296367D01* X97226498Y-60296367D02* X97226498Y-60404117D01* X97226498Y-60404117D02* X97253436Y-60484929D01* X97253436Y-60484929D02* X97334248Y-60619616D01* X97334248Y-60619616D02* X97415060Y-60700428D01* X97415060Y-60700428D02* X97549747Y-60781241D01* X97549747Y-60781241D02* X97630560Y-60808178D01* X97630560Y-60808178D02* X97738309Y-60808178D01* X97738309Y-60808178D02* X97846059Y-60754303D01* X97846059Y-60754303D02* X97899934Y-60700428D01* X97899934Y-60700428D02* X97953808Y-60592679D01* X97953808Y-60592679D02* X97953808Y-60538804D01* X97953808Y-60538804D02* X97765247Y-60350242D01* X97765247Y-60350242D02* X97657497Y-60457992D01* X98250120Y-60350242D02* X97684434Y-59784557D01* X97684434Y-59784557D02* X97899934Y-59569057D01* X97899934Y-59569057D02* X97980746Y-59542120D01* X97980746Y-59542120D02* X98034621Y-59542120D01* X98034621Y-59542120D02* X98115433Y-59569057D01* X98115433Y-59569057D02* X98196245Y-59649870D01* X98196245Y-59649870D02* X98223182Y-59730682D01* X98223182Y-59730682D02* X98223182Y-59784557D01* X98223182Y-59784557D02* X98196245Y-59865369D01* X98196245Y-59865369D02* X97980746Y-60080868D01* X98277057Y-59299683D02* X98277057Y-59245809D01* X98277057Y-59245809D02* X98303995Y-59164996D01* X98303995Y-59164996D02* X98438682Y-59030309D01* X98438682Y-59030309D02* X98519494Y-59003372D01* X98519494Y-59003372D02* X98573369Y-59003372D01* X98573369Y-59003372D02* X98654181Y-59030309D01* X98654181Y-59030309D02* X98708056Y-59084184D01* X98708056Y-59084184D02* X98761930Y-59191934D01* X98761930Y-59191934D02* X98761930Y-59838431D01* X98761930Y-59838431D02* X99112117Y-59488245D01* X99112117Y-58841747D02* X99031305Y-58868685D01* X99031305Y-58868685D02* X98977430Y-58868685D01* X98977430Y-58868685D02* X98896618Y-58841747D01* X98896618Y-58841747D02* X98869680Y-58814810D01* X98869680Y-58814810D02* X98842743Y-58733998D01* X98842743Y-58733998D02* X98842743Y-58680123D01* X98842743Y-58680123D02* X98869680Y-58599311D01* X98869680Y-58599311D02* X98977430Y-58491561D01* X98977430Y-58491561D02* X99058242Y-58464624D01* X99058242Y-58464624D02* X99112117Y-58464624D01* X99112117Y-58464624D02* X99192929Y-58491561D01* X99192929Y-58491561D02* X99219866Y-58518499D01* X99219866Y-58518499D02* X99246804Y-58599311D01* X99246804Y-58599311D02* X99246804Y-58653186D01* X99246804Y-58653186D02* X99219866Y-58733998D01* X99219866Y-58733998D02* X99112117Y-58841747D01* X99112117Y-58841747D02* X99085179Y-58922560D01* X99085179Y-58922560D02* X99085179Y-58976434D01* X99085179Y-58976434D02* X99112117Y-59057247D01* X99112117Y-59057247D02* X99219866Y-59164996D01* X99219866Y-59164996D02* X99300679Y-59191934D01* X99300679Y-59191934D02* X99354553Y-59191934D01* X99354553Y-59191934D02* X99435366Y-59164996D01* X99435366Y-59164996D02* X99543115Y-59057247D01* X99543115Y-59057247D02* X99570053Y-58976434D01* X99570053Y-58976434D02* X99570053Y-58922560D01* X99570053Y-58922560D02* X99543115Y-58841747D01* X99543115Y-58841747D02* X99435366Y-58733998D01* X99435366Y-58733998D02* X99354553Y-58707060D01* X99354553Y-58707060D02* X99300679Y-58707060D01* X99300679Y-58707060D02* X99219866Y-58733998D01* X97441998Y-90814868D02* X97361185Y-90841805D01* X97361185Y-90841805D02* X97280373Y-90922618D01* X97280373Y-90922618D02* X97226498Y-91030367D01* X97226498Y-91030367D02* X97226498Y-91138117D01* X97226498Y-91138117D02* X97253436Y-91218929D01* X97253436Y-91218929D02* X97334248Y-91353616D01* X97334248Y-91353616D02* X97415060Y-91434428D01* X97415060Y-91434428D02* X97549747Y-91515241D01* X97549747Y-91515241D02* X97630560Y-91542178D01* X97630560Y-91542178D02* X97738309Y-91542178D01* X97738309Y-91542178D02* X97846059Y-91488303D01* X97846059Y-91488303D02* X97899934Y-91434428D01* X97899934Y-91434428D02* X97953808Y-91326679D01* X97953808Y-91326679D02* X97953808Y-91272804D01* X97953808Y-91272804D02* X97765247Y-91084242D01* X97765247Y-91084242D02* X97657497Y-91191992D01* X98250120Y-91084242D02* X97684434Y-90518557D01* X97684434Y-90518557D02* X97899934Y-90303057D01* X97899934Y-90303057D02* X97980746Y-90276120D01* X97980746Y-90276120D02* X98034621Y-90276120D01* X98034621Y-90276120D02* X98115433Y-90303057D01* X98115433Y-90303057D02* X98196245Y-90383870D01* X98196245Y-90383870D02* X98223182Y-90464682D01* X98223182Y-90464682D02* X98223182Y-90518557D01* X98223182Y-90518557D02* X98196245Y-90599369D01* X98196245Y-90599369D02* X97980746Y-90814868D01* X99112117Y-90222245D02* X98788868Y-90545494D01* X98950492Y-90383870D02* X98384807Y-89818184D01* X98384807Y-89818184D02* X98411744Y-89952871D01* X98411744Y-89952871D02* X98411744Y-90060621D01* X98411744Y-90060621D02* X98384807Y-90141433D01* X98734993Y-89467998D02* X99112117Y-89090874D01* X99112117Y-89090874D02* X99435366Y-89898996D01* X97441998Y-80654868D02* X97361185Y-80681805D01* X97361185Y-80681805D02* X97280373Y-80762618D01* X97280373Y-80762618D02* X97226498Y-80870367D01* X97226498Y-80870367D02* X97226498Y-80978117D01* X97226498Y-80978117D02* X97253436Y-81058929D01* X97253436Y-81058929D02* X97334248Y-81193616D01* X97334248Y-81193616D02* X97415060Y-81274428D01* X97415060Y-81274428D02* X97549747Y-81355241D01* X97549747Y-81355241D02* X97630560Y-81382178D01* X97630560Y-81382178D02* X97738309Y-81382178D01* X97738309Y-81382178D02* X97846059Y-81328303D01* X97846059Y-81328303D02* X97899934Y-81274428D01* X97899934Y-81274428D02* X97953808Y-81166679D01* X97953808Y-81166679D02* X97953808Y-81112804D01* X97953808Y-81112804D02* X97765247Y-80924242D01* X97765247Y-80924242D02* X97657497Y-81031992D01* X98250120Y-80924242D02* X97684434Y-80358557D01* X97684434Y-80358557D02* X97899934Y-80143057D01* X97899934Y-80143057D02* X97980746Y-80116120D01* X97980746Y-80116120D02* X98034621Y-80116120D01* X98034621Y-80116120D02* X98115433Y-80143057D01* X98115433Y-80143057D02* X98196245Y-80223870D01* X98196245Y-80223870D02* X98223182Y-80304682D01* X98223182Y-80304682D02* X98223182Y-80358557D01* X98223182Y-80358557D02* X98196245Y-80439369D01* X98196245Y-80439369D02* X97980746Y-80654868D01* X98277057Y-79873683D02* X98277057Y-79819809D01* X98277057Y-79819809D02* X98303995Y-79738996D01* X98303995Y-79738996D02* X98438682Y-79604309D01* X98438682Y-79604309D02* X98519494Y-79577372D01* X98519494Y-79577372D02* X98573369Y-79577372D01* X98573369Y-79577372D02* X98654181Y-79604309D01* X98654181Y-79604309D02* X98708056Y-79658184D01* X98708056Y-79658184D02* X98761930Y-79765934D01* X98761930Y-79765934D02* X98761930Y-80412431D01* X98761930Y-80412431D02* X99112117Y-80062245D01* X98896618Y-79146373D02* X98950492Y-79092499D01* X98950492Y-79092499D02* X99031305Y-79065561D01* X99031305Y-79065561D02* X99085179Y-79065561D01* X99085179Y-79065561D02* X99165992Y-79092499D01* X99165992Y-79092499D02* X99300679Y-79173311D01* X99300679Y-79173311D02* X99435366Y-79307998D01* X99435366Y-79307998D02* X99516178Y-79442685D01* X99516178Y-79442685D02* X99543115Y-79523497D01* X99543115Y-79523497D02* X99543115Y-79577372D01* X99543115Y-79577372D02* X99516178Y-79658184D01* X99516178Y-79658184D02* X99462303Y-79712059D01* X99462303Y-79712059D02* X99381491Y-79738996D01* X99381491Y-79738996D02* X99327616Y-79738996D01* X99327616Y-79738996D02* X99246804Y-79712059D01* X99246804Y-79712059D02* X99112117Y-79631247D01* X99112117Y-79631247D02* X98977430Y-79496560D01* X98977430Y-79496560D02* X98896618Y-79361873D01* X98896618Y-79361873D02* X98869680Y-79281060D01* X98869680Y-79281060D02* X98869680Y-79227186D01* X98869680Y-79227186D02* X98896618Y-79146373D01* X71857372Y-44825494D02* X71776560Y-44852431D01* X71776560Y-44852431D02* X71695748Y-44933243D01* X71695748Y-44933243D02* X71641873Y-45040993D01* X71641873Y-45040993D02* X71641873Y-45148742D01* X71641873Y-45148742D02* X71668810Y-45229555D01* X71668810Y-45229555D02* X71749623Y-45364242D01* X71749623Y-45364242D02* X71830435Y-45445054D01* X71830435Y-45445054D02* X71965122Y-45525866D01* X71965122Y-45525866D02* X72045934Y-45552803D01* X72045934Y-45552803D02* X72153684Y-45552803D01* X72153684Y-45552803D02* X72261433Y-45498929D01* X72261433Y-45498929D02* X72315308Y-45445054D01* X72315308Y-45445054D02* X72369183Y-45337304D01* X72369183Y-45337304D02* X72369183Y-45283429D01* X72369183Y-45283429D02* X72180621Y-45094868D01* X72180621Y-45094868D02* X72072871Y-45202617D01* X72665494Y-45094868D02* X72099809Y-44529182D01* X72099809Y-44529182D02* X72315308Y-44313683D01* X72315308Y-44313683D02* X72396120Y-44286746D01* X72396120Y-44286746D02* X72449995Y-44286746D01* X72449995Y-44286746D02* X72530807Y-44313683D01* X72530807Y-44313683D02* X72611619Y-44394495D01* X72611619Y-44394495D02* X72638557Y-44475307D01* X72638557Y-44475307D02* X72638557Y-44529182D01* X72638557Y-44529182D02* X72611619Y-44609994D01* X72611619Y-44609994D02* X72396120Y-44825494D01* X72773244Y-43855747D02* X72827119Y-43801872D01* X72827119Y-43801872D02* X72907931Y-43774935D01* X72907931Y-43774935D02* X72961806Y-43774935D01* X72961806Y-43774935D02* X73042618Y-43801872D01* X73042618Y-43801872D02* X73177305Y-43882685D01* X73177305Y-43882685D02* X73311992Y-44017372D01* X73311992Y-44017372D02* X73392804Y-44152059D01* X73392804Y-44152059D02* X73419741Y-44232871D01* X73419741Y-44232871D02* X73419741Y-44286746D01* X73419741Y-44286746D02* X73392804Y-44367558D01* X73392804Y-44367558D02* X73338929Y-44421433D01* X73338929Y-44421433D02* X73258117Y-44448370D01* X73258117Y-44448370D02* X73204242Y-44448370D01* X73204242Y-44448370D02* X73123430Y-44421433D01* X73123430Y-44421433D02* X72988743Y-44340620D01* X72988743Y-44340620D02* X72854056Y-44205933D01* X72854056Y-44205933D02* X72773244Y-44071246D01* X72773244Y-44071246D02* X72746306Y-43990434D01* X72746306Y-43990434D02* X72746306Y-43936559D01* X72746306Y-43936559D02* X72773244Y-43855747D01* X97234123Y-55324868D02* X97584309Y-54974682D01* X97584309Y-54974682D02* X97611247Y-55378743D01* X97611247Y-55378743D02* X97692059Y-55297931D01* X97692059Y-55297931D02* X97772871Y-55270993D01* X97772871Y-55270993D02* X97826746Y-55270993D01* X97826746Y-55270993D02* X97907558Y-55297931D01* X97907558Y-55297931D02* X98042245Y-55432618D01* X98042245Y-55432618D02* X98069182Y-55513430D01* X98069182Y-55513430D02* X98069182Y-55567305D01* X98069182Y-55567305D02* X98042245Y-55648117D01* X98042245Y-55648117D02* X97880621Y-55809741D01* X97880621Y-55809741D02* X97799808Y-55836679D01* X97799808Y-55836679D02* X97745934Y-55836679D01* X97745934Y-54813057D02* X98500181Y-55190181D01* X98500181Y-55190181D02* X98123057Y-54435934D01* X98257744Y-54301247D02* X98607930Y-53951061D01* X98607930Y-53951061D02* X98634868Y-54355122D01* X98634868Y-54355122D02* X98715680Y-54274309D01* X98715680Y-54274309D02* X98796492Y-54247372D01* X98796492Y-54247372D02* X98850367Y-54247372D01* X98850367Y-54247372D02* X98931179Y-54274309D01* X98931179Y-54274309D02* X99065866Y-54408996D01* X99065866Y-54408996D02* X99092804Y-54489809D01* X99092804Y-54489809D02* X99092804Y-54543683D01* X99092804Y-54543683D02* X99065866Y-54624496D01* X99065866Y-54624496D02* X98904242Y-54786120D01* X98904242Y-54786120D02* X98823430Y-54813057D01* X98823430Y-54813057D02* X98769555Y-54813057D01* X98931179Y-53627812D02* X99065866Y-53762499D01* X98877305Y-53843311D02* X99065866Y-53762499D01* X99065866Y-53762499D02* X99146679Y-53573937D01* X99092804Y-53951060D02* X99065866Y-53762499D01* X99065866Y-53762499D02* X99254428Y-53789436D01* X71857372Y-57525494D02* X71776560Y-57552431D01* X71776560Y-57552431D02* X71695748Y-57633243D01* X71695748Y-57633243D02* X71641873Y-57740993D01* X71641873Y-57740993D02* X71641873Y-57848742D01* X71641873Y-57848742D02* X71668810Y-57929555D01* X71668810Y-57929555D02* X71749623Y-58064242D01* X71749623Y-58064242D02* X71830435Y-58145054D01* X71830435Y-58145054D02* X71965122Y-58225866D01* X71965122Y-58225866D02* X72045934Y-58252803D01* X72045934Y-58252803D02* X72153684Y-58252803D01* X72153684Y-58252803D02* X72261433Y-58198929D01* X72261433Y-58198929D02* X72315308Y-58145054D01* X72315308Y-58145054D02* X72369183Y-58037304D01* X72369183Y-58037304D02* X72369183Y-57983429D01* X72369183Y-57983429D02* X72180621Y-57794868D01* X72180621Y-57794868D02* X72072871Y-57902617D01* X72665494Y-57794868D02* X72099809Y-57229182D01* X72099809Y-57229182D02* X72315308Y-57013683D01* X72315308Y-57013683D02* X72396120Y-56986746D01* X72396120Y-56986746D02* X72449995Y-56986746D01* X72449995Y-56986746D02* X72530807Y-57013683D01* X72530807Y-57013683D02* X72611619Y-57094495D01* X72611619Y-57094495D02* X72638557Y-57175307D01* X72638557Y-57175307D02* X72638557Y-57229182D01* X72638557Y-57229182D02* X72611619Y-57309994D01* X72611619Y-57309994D02* X72396120Y-57525494D01* X73096493Y-56609622D02* X73473616Y-56986746D01* X72746306Y-56528810D02* X73015680Y-57067558D01* X73015680Y-57067558D02* X73365867Y-56717372D01* X97495873Y-63575240D02* X97765247Y-63305866D01* X97603623Y-63790739D02* X97226499Y-63036492D01* X97226499Y-63036492D02* X97980746Y-63413615D01* X97926871Y-62389994D02* X97846059Y-62416932D01* X97846059Y-62416932D02* X97765247Y-62497744D01* X97765247Y-62497744D02* X97711372Y-62605494D01* X97711372Y-62605494D02* X97711372Y-62713243D01* X97711372Y-62713243D02* X97738310Y-62794055D01* X97738310Y-62794055D02* X97819122Y-62928742D01* X97819122Y-62928742D02* X97899934Y-63009555D01* X97899934Y-63009555D02* X98034621Y-63090367D01* X98034621Y-63090367D02* X98115433Y-63117304D01* X98115433Y-63117304D02* X98223183Y-63117304D01* X98223183Y-63117304D02* X98330932Y-63063429D01* X98330932Y-63063429D02* X98384807Y-63009555D01* X98384807Y-63009555D02* X98438682Y-62901805D01* X98438682Y-62901805D02* X98438682Y-62847930D01* X98438682Y-62847930D02* X98250120Y-62659368D01* X98250120Y-62659368D02* X98142371Y-62767118D01* X98734993Y-62659368D02* X98169308Y-62093683D01* X98169308Y-62093683D02* X99058242Y-62336120D01* X99058242Y-62336120D02* X98492557Y-61770434D01* X99327616Y-62066746D02* X98761931Y-61501060D01* X98761931Y-61501060D02* X98896618Y-61366373D01* X98896618Y-61366373D02* X99004367Y-61312498D01* X99004367Y-61312498D02* X99112117Y-61312498D01* X99112117Y-61312498D02* X99192929Y-61339436D01* X99192929Y-61339436D02* X99327616Y-61420248D01* X99327616Y-61420248D02* X99408428Y-61501060D01* X99408428Y-61501060D02* X99489241Y-61635747D01* X99489241Y-61635747D02* X99516178Y-61716560D01* X99516178Y-61716560D02* X99516178Y-61824309D01* X99516178Y-61824309D02* X99462303Y-61932059D01* X99462303Y-61932059D02* X99327616Y-62066746D01* X71909683Y-91532679D02* X71343998Y-90966993D01* X71343998Y-90966993D02* X71478685Y-90832306D01* X71478685Y-90832306D02* X71586434Y-90778431D01* X71586434Y-90778431D02* X71694184Y-90778431D01* X71694184Y-90778431D02* X71774996Y-90805369D01* X71774996Y-90805369D02* X71909683Y-90886181D01* X71909683Y-90886181D02* X71990495Y-90966993D01* X71990495Y-90966993D02* X72071308Y-91101680D01* X72071308Y-91101680D02* X72098245Y-91182492D01* X72098245Y-91182492D02* X72098245Y-91290242D01* X72098245Y-91290242D02* X72044370Y-91397992D01* X72044370Y-91397992D02* X71909683Y-91532679D01* X72475369Y-90966993D02* X71909683Y-90401308D01* X71909683Y-90401308D02* X72125182Y-90185809D01* X72125182Y-90185809D02* X72205995Y-90158871D01* X72205995Y-90158871D02* X72259869Y-90158871D01* X72259869Y-90158871D02* X72340682Y-90185809D01* X72340682Y-90185809D02* X72421494Y-90266621D01* X72421494Y-90266621D02* X72448431Y-90347433D01* X72448431Y-90347433D02* X72448431Y-90401308D01* X72448431Y-90401308D02* X72421494Y-90482120D01* X72421494Y-90482120D02* X72205995Y-90697619D01* X72556181Y-89754810D02* X72690868Y-89889497D01* X72502306Y-89970309D02* X72690868Y-89889497D01* X72690868Y-89889497D02* X72771680Y-89700935D01* X72717805Y-90078059D02* X72690868Y-89889497D01* X72690868Y-89889497D02* X72879430Y-89916435D01* X71614936Y-62847930D02* X71534123Y-62874868D01* X71534123Y-62874868D02* X71453311Y-62955680D01* X71453311Y-62955680D02* X71399436Y-63063429D01* X71399436Y-63063429D02* X71399436Y-63171179D01* X71399436Y-63171179D02* X71426374Y-63251991D01* X71426374Y-63251991D02* X71507186Y-63386678D01* X71507186Y-63386678D02* X71587998Y-63467490D01* X71587998Y-63467490D02* X71722685Y-63548303D01* X71722685Y-63548303D02* X71803497Y-63575240D01* X71803497Y-63575240D02* X71911247Y-63575240D01* X71911247Y-63575240D02* X72018997Y-63521365D01* X72018997Y-63521365D02* X72072871Y-63467490D01* X72072871Y-63467490D02* X72126746Y-63359741D01* X72126746Y-63359741D02* X72126746Y-63305866D01* X72126746Y-63305866D02* X71938184Y-63117304D01* X71938184Y-63117304D02* X71830435Y-63225054D01* X72423058Y-63117304D02* X71857372Y-62551619D01* X71857372Y-62551619D02* X72746306Y-62794055D01* X72746306Y-62794055D02* X72180621Y-62228370D01* X73015680Y-62524682D02* X72449995Y-61958996D01* X72449995Y-61958996D02* X72584682Y-61824309D01* X72584682Y-61824309D02* X72692432Y-61770434D01* X72692432Y-61770434D02* X72800181Y-61770434D01* X72800181Y-61770434D02* X72880993Y-61797372D01* X72880993Y-61797372D02* X73015680Y-61878184D01* X73015680Y-61878184D02* X73096493Y-61958996D01* X73096493Y-61958996D02* X73177305Y-62093683D01* X73177305Y-62093683D02* X73204242Y-62174495D01* X73204242Y-62174495D02* X73204242Y-62282245D01* X73204242Y-62282245D02* X73150367Y-62389995D01* X73150367Y-62389995D02* X73015680Y-62524682D01* X73096493Y-61312498D02* X73231180Y-61447185D01* X73042618Y-61527998D02* X73231180Y-61447185D01* X73231180Y-61447185D02* X73311992Y-61258624D01* X73258117Y-61635747D02* X73231180Y-61447185D01* X73231180Y-61447185D02* X73419741Y-61474123D01* X71857372Y-60065494D02* X71776560Y-60092431D01* X71776560Y-60092431D02* X71695748Y-60173243D01* X71695748Y-60173243D02* X71641873Y-60280993D01* X71641873Y-60280993D02* X71641873Y-60388742D01* X71641873Y-60388742D02* X71668810Y-60469555D01* X71668810Y-60469555D02* X71749623Y-60604242D01* X71749623Y-60604242D02* X71830435Y-60685054D01* X71830435Y-60685054D02* X71965122Y-60765866D01* X71965122Y-60765866D02* X72045934Y-60792803D01* X72045934Y-60792803D02* X72153684Y-60792803D01* X72153684Y-60792803D02* X72261433Y-60738929D01* X72261433Y-60738929D02* X72315308Y-60685054D01* X72315308Y-60685054D02* X72369183Y-60577304D01* X72369183Y-60577304D02* X72369183Y-60523429D01* X72369183Y-60523429D02* X72180621Y-60334868D01* X72180621Y-60334868D02* X72072871Y-60442617D01* X72665494Y-60334868D02* X72099809Y-59769182D01* X72099809Y-59769182D02* X72315308Y-59553683D01* X72315308Y-59553683D02* X72396120Y-59526746D01* X72396120Y-59526746D02* X72449995Y-59526746D01* X72449995Y-59526746D02* X72530807Y-59553683D01* X72530807Y-59553683D02* X72611619Y-59634495D01* X72611619Y-59634495D02* X72638557Y-59715307D01* X72638557Y-59715307D02* X72638557Y-59769182D01* X72638557Y-59769182D02* X72611619Y-59849994D01* X72611619Y-59849994D02* X72396120Y-60065494D01* X72934868Y-58934123D02* X72665494Y-59203497D01* X72665494Y-59203497D02* X72907931Y-59499808D01* X72907931Y-59499808D02* X72907931Y-59445933D01* X72907931Y-59445933D02* X72934868Y-59365121D01* X72934868Y-59365121D02* X73069555Y-59230434D01* X73069555Y-59230434D02* X73150367Y-59203497D01* X73150367Y-59203497D02* X73204242Y-59203497D01* X73204242Y-59203497D02* X73285054Y-59230434D01* X73285054Y-59230434D02* X73419741Y-59365121D01* X73419741Y-59365121D02* X73446679Y-59445933D01* X73446679Y-59445933D02* X73446679Y-59499808D01* X73446679Y-59499808D02* X73419741Y-59580620D01* X73419741Y-59580620D02* X73285054Y-59715307D01* X73285054Y-59715307D02* X73204242Y-59742245D01* X73204242Y-59742245D02* X73150367Y-59742245D01* X97264749Y-47904242D02* X98018996Y-48281366D01* X98018996Y-48281366D02* X97641873Y-47527118D01* X98342245Y-47904242D02* X98449995Y-47850367D01* X98449995Y-47850367D02* X98584682Y-47715680D01* X98584682Y-47715680D02* X98611619Y-47634868D01* X98611619Y-47634868D02* X98611619Y-47580993D01* X98611619Y-47580993D02* X98584682Y-47500181D01* X98584682Y-47500181D02* X98530807Y-47446306D01* X98530807Y-47446306D02* X98449995Y-47419369D01* X98449995Y-47419369D02* X98396120Y-47419369D01* X98396120Y-47419369D02* X98315308Y-47446306D01* X98315308Y-47446306D02* X98180621Y-47527118D01* X98180621Y-47527118D02* X98099808Y-47554056D01* X98099808Y-47554056D02* X98045934Y-47554056D01* X98045934Y-47554056D02* X97965121Y-47527118D01* X97965121Y-47527118D02* X97911247Y-47473244D01* X97911247Y-47473244D02* X97884309Y-47392431D01* X97884309Y-47392431D02* X97884309Y-47338557D01* X97884309Y-47338557D02* X97911247Y-47257744D01* X97911247Y-47257744D02* X98045934Y-47123057D01* X98045934Y-47123057D02* X98153683Y-47069183D01* X98773244Y-46988370D02* X99042618Y-47257744D01* X98288370Y-46880621D02* X98773244Y-46988370D01* X98773244Y-46988370D02* X98665494Y-46503497D01* X99365866Y-46880621D02* X99473616Y-46826746D01* X99473616Y-46826746D02* X99608303Y-46692059D01* X99608303Y-46692059D02* X99635240Y-46611247D01* X99635240Y-46611247D02* X99635240Y-46557372D01* X99635240Y-46557372D02* X99608303Y-46476560D01* X99608303Y-46476560D02* X99554428Y-46422685D01* X99554428Y-46422685D02* X99473616Y-46395748D01* X99473616Y-46395748D02* X99419741Y-46395748D01* X99419741Y-46395748D02* X99338929Y-46422685D01* X99338929Y-46422685D02* X99204242Y-46503497D01* X99204242Y-46503497D02* X99123430Y-46530435D01* X99123430Y-46530435D02* X99069555Y-46530435D01* X99069555Y-46530435D02* X98988743Y-46503497D01* X98988743Y-46503497D02* X98934868Y-46449622D01* X98934868Y-46449622D02* X98907930Y-46368810D01* X98907930Y-46368810D02* X98907930Y-46314935D01* X98907930Y-46314935D02* X98934868Y-46234123D01* X98934868Y-46234123D02* X99069555Y-46099436D01* X99069555Y-46099436D02* X99177304Y-46045561D01* X71187998Y-83140993D02* X71511247Y-82817744D01* X71915308Y-83545054D02* X71349622Y-82979369D01* X71645934Y-82683057D02* X72588743Y-82871619D01* X72023058Y-82305933D02* X72211619Y-83248742D01* X72319369Y-82009622D02* X72454056Y-82144309D01* X72265494Y-82225121D02* X72454056Y-82144309D01* X72454056Y-82144309D02* X72534868Y-81955747D01* X72480994Y-82332871D02* X72454056Y-82144309D01* X72454056Y-82144309D02* X72642618Y-82171246D01* X97441998Y-67954868D02* X97361185Y-67981805D01* X97361185Y-67981805D02* X97280373Y-68062618D01* X97280373Y-68062618D02* X97226498Y-68170367D01* X97226498Y-68170367D02* X97226498Y-68278117D01* X97226498Y-68278117D02* X97253436Y-68358929D01* X97253436Y-68358929D02* X97334248Y-68493616D01* X97334248Y-68493616D02* X97415060Y-68574428D01* X97415060Y-68574428D02* X97549747Y-68655241D01* X97549747Y-68655241D02* X97630560Y-68682178D01* X97630560Y-68682178D02* X97738309Y-68682178D01* X97738309Y-68682178D02* X97846059Y-68628303D01* X97846059Y-68628303D02* X97899934Y-68574428D01* X97899934Y-68574428D02* X97953808Y-68466679D01* X97953808Y-68466679D02* X97953808Y-68412804D01* X97953808Y-68412804D02* X97765247Y-68224242D01* X97765247Y-68224242D02* X97657497Y-68331992D01* X98250120Y-68224242D02* X97684434Y-67658557D01* X97684434Y-67658557D02* X97899934Y-67443057D01* X97899934Y-67443057D02* X97980746Y-67416120D01* X97980746Y-67416120D02* X98034621Y-67416120D01* X98034621Y-67416120D02* X98115433Y-67443057D01* X98115433Y-67443057D02* X98196245Y-67523870D01* X98196245Y-67523870D02* X98223182Y-67604682D01* X98223182Y-67604682D02* X98223182Y-67658557D01* X98223182Y-67658557D02* X98196245Y-67739369D01* X98196245Y-67739369D02* X97980746Y-67954868D01* X98277057Y-67173683D02* X98277057Y-67119809D01* X98277057Y-67119809D02* X98303995Y-67038996D01* X98303995Y-67038996D02* X98438682Y-66904309D01* X98438682Y-66904309D02* X98519494Y-66877372D01* X98519494Y-66877372D02* X98573369Y-66877372D01* X98573369Y-66877372D02* X98654181Y-66904309D01* X98654181Y-66904309D02* X98708056Y-66958184D01* X98708056Y-66958184D02* X98761930Y-67065934D01* X98761930Y-67065934D02* X98761930Y-67712431D01* X98761930Y-67712431D02* X99112117Y-67362245D01* X99031305Y-66311686D02* X98923555Y-66419436D01* X98923555Y-66419436D02* X98896618Y-66500248D01* X98896618Y-66500248D02* X98896618Y-66554123D01* X98896618Y-66554123D02* X98923555Y-66688810D01* X98923555Y-66688810D02* X99004367Y-66823497D01* X99004367Y-66823497D02* X99219866Y-67038996D01* X99219866Y-67038996D02* X99300679Y-67065934D01* X99300679Y-67065934D02* X99354553Y-67065934D01* X99354553Y-67065934D02* X99435366Y-67038996D01* X99435366Y-67038996D02* X99543115Y-66931247D01* X99543115Y-66931247D02* X99570053Y-66850434D01* X99570053Y-66850434D02* X99570053Y-66796560D01* X99570053Y-66796560D02* X99543115Y-66715747D01* X99543115Y-66715747D02* X99408428Y-66581060D01* X99408428Y-66581060D02* X99327616Y-66554123D01* X99327616Y-66554123D02* X99273741Y-66554123D01* X99273741Y-66554123D02* X99192929Y-66581060D01* X99192929Y-66581060D02* X99085179Y-66688810D01* X99085179Y-66688810D02* X99058242Y-66769622D01* X99058242Y-66769622D02* X99058242Y-66823497D01* X99058242Y-66823497D02* X99085179Y-66904309D01* X71187998Y-80654868D02* X71107185Y-80681805D01* X71107185Y-80681805D02* X71026373Y-80762618D01* X71026373Y-80762618D02* X70972498Y-80870367D01* X70972498Y-80870367D02* X70972498Y-80978117D01* X70972498Y-80978117D02* X70999436Y-81058929D01* X70999436Y-81058929D02* X71080248Y-81193616D01* X71080248Y-81193616D02* X71161060Y-81274428D01* X71161060Y-81274428D02* X71295747Y-81355241D01* X71295747Y-81355241D02* X71376560Y-81382178D01* X71376560Y-81382178D02* X71484309Y-81382178D01* X71484309Y-81382178D02* X71592059Y-81328303D01* X71592059Y-81328303D02* X71645934Y-81274428D01* X71645934Y-81274428D02* X71699808Y-81166679D01* X71699808Y-81166679D02* X71699808Y-81112804D01* X71699808Y-81112804D02* X71511247Y-80924242D01* X71511247Y-80924242D02* X71403497Y-81031992D01* X71996120Y-80924242D02* X71430434Y-80358557D01* X71430434Y-80358557D02* X71645934Y-80143057D01* X71645934Y-80143057D02* X71726746Y-80116120D01* X71726746Y-80116120D02* X71780621Y-80116120D01* X71780621Y-80116120D02* X71861433Y-80143057D01* X71861433Y-80143057D02* X71942245Y-80223870D01* X71942245Y-80223870D02* X71969182Y-80304682D01* X71969182Y-80304682D02* X71969182Y-80358557D01* X71969182Y-80358557D02* X71942245Y-80439369D01* X71942245Y-80439369D02* X71726746Y-80654868D01* X72858117Y-80062245D02* X72534868Y-80385494D01* X72696492Y-80223870D02* X72130807Y-79658184D01* X72130807Y-79658184D02* X72157744Y-79792871D01* X72157744Y-79792871D02* X72157744Y-79900621D01* X72157744Y-79900621D02* X72130807Y-79981433D01* X73396865Y-79523497D02* X73073616Y-79846746D01* X73235240Y-79685121D02* X72669555Y-79119436D01* X72669555Y-79119436D02* X72696492Y-79254123D01* X72696492Y-79254123D02* X72696492Y-79361873D01* X72696492Y-79361873D02* X72669555Y-79442685D01* X71541873Y-52660993D02* X71461061Y-52687930D01* X71461061Y-52687930D02* X71380248Y-52768743D01* X71380248Y-52768743D02* X71326374Y-52876492D01* X71326374Y-52876492D02* X71326374Y-52984242D01* X71326374Y-52984242D02* X71353311Y-53065054D01* X71353311Y-53065054D02* X71434123Y-53199741D01* X71434123Y-53199741D02* X71514935Y-53280553D01* X71514935Y-53280553D02* X71649622Y-53361365D01* X71649622Y-53361365D02* X71730435Y-53388303D01* X71730435Y-53388303D02* X71838184Y-53388303D01* X71838184Y-53388303D02* X71945934Y-53334428D01* X71945934Y-53334428D02* X71999809Y-53280553D01* X71999809Y-53280553D02* X72053683Y-53172804D01* X72053683Y-53172804D02* X72053683Y-53118929D01* X72053683Y-53118929D02* X71865122Y-52930367D01* X71865122Y-52930367D02* X71757372Y-53038117D01* X72349995Y-52930367D02* X71784309Y-52364682D01* X71784309Y-52364682D02* X71999809Y-52149182D01* X71999809Y-52149182D02* X72080621Y-52122245D01* X72080621Y-52122245D02* X72134496Y-52122245D01* X72134496Y-52122245D02* X72215308Y-52149182D01* X72215308Y-52149182D02* X72296120Y-52229995D01* X72296120Y-52229995D02* X72323058Y-52310807D01* X72323058Y-52310807D02* X72323058Y-52364682D01* X72323058Y-52364682D02* X72296120Y-52445494D01* X72296120Y-52445494D02* X72080621Y-52660993D01* X72376932Y-51879808D02* X72376932Y-51825933D01* X72376932Y-51825933D02* X72403870Y-51745121D01* X72403870Y-51745121D02* X72538557Y-51610434D01* X72538557Y-51610434D02* X72619369Y-51583497D01* X72619369Y-51583497D02* X72673244Y-51583497D01* X72673244Y-51583497D02* X72754056Y-51610434D01* X72754056Y-51610434D02* X72807931Y-51664309D01* X72807931Y-51664309D02* X72861806Y-51772059D01* X72861806Y-51772059D02* X72861806Y-52418556D01* X72861806Y-52418556D02* X73211992Y-52068370D01* X72969555Y-51179436D02* X73104242Y-51314123D01* X72915680Y-51394935D02* X73104242Y-51314123D01* X73104242Y-51314123D02* X73185055Y-51125561D01* X73131180Y-51502685D02* X73104242Y-51314123D01* X73104242Y-51314123D02* X73292804Y-51341060D01* X97317686Y-52643305D02* X97667873Y-52293118D01* X97667873Y-52293118D02* X97694810Y-52697179D01* X97694810Y-52697179D02* X97775622Y-52616367D01* X97775622Y-52616367D02* X97856435Y-52589430D01* X97856435Y-52589430D02* X97910309Y-52589430D01* X97910309Y-52589430D02* X97991122Y-52616367D01* X97991122Y-52616367D02* X98125809Y-52751054D01* X98125809Y-52751054D02* X98152746Y-52831866D01* X98152746Y-52831866D02* X98152746Y-52885741D01* X98152746Y-52885741D02* X98125809Y-52966553D01* X98125809Y-52966553D02* X97964184Y-53128178D01* X97964184Y-53128178D02* X97883372Y-53155115D01* X97883372Y-53155115D02* X97829497Y-53155115D01* X97829497Y-52131494D02* X98583745Y-52508617D01* X98583745Y-52508617D02* X98206621Y-51754370D01* X98341308Y-51619683D02* X98691494Y-51269497D01* X98691494Y-51269497D02* X98718431Y-51673558D01* X98718431Y-51673558D02* X98799244Y-51592746D01* X98799244Y-51592746D02* X98880056Y-51565808D01* X98880056Y-51565808D02* X98933931Y-51565808D01* X98933931Y-51565808D02* X99014743Y-51592746D01* X99014743Y-51592746D02* X99149430Y-51727433D01* X99149430Y-51727433D02* X99176367Y-51808245D01* X99176367Y-51808245D02* X99176367Y-51862120D01* X99176367Y-51862120D02* X99149430Y-51942932D01* X99149430Y-51942932D02* X98987805Y-52104557D01* X98987805Y-52104557D02* X98906993Y-52131494D01* X98906993Y-52131494D02* X98853118Y-52131494D01* X99688178Y-51350309D02* X99661241Y-51431121D01* X99661241Y-51431121D02* X99553491Y-51538871D01* X99553491Y-51538871D02* X99472679Y-51565808D01* X99472679Y-51565808D02* X99391867Y-51538871D01* X99391867Y-51538871D02* X99176367Y-51323372D01* X99176367Y-51323372D02* X99149430Y-51242560D01* X99149430Y-51242560D02* X99176367Y-51161747D01* X99176367Y-51161747D02* X99284117Y-51053998D01* X99284117Y-51053998D02* X99364929Y-51027060D01* X99364929Y-51027060D02* X99445741Y-51053998D01* X99445741Y-51053998D02* X99499616Y-51107873D01* X99499616Y-51107873D02* X99284117Y-51431121D01* X97460936Y-88113930D02* X97380123Y-88140868D01* X97380123Y-88140868D02* X97299311Y-88221680D01* X97299311Y-88221680D02* X97245436Y-88329429D01* X97245436Y-88329429D02* X97245436Y-88437179D01* X97245436Y-88437179D02* X97272374Y-88517991D01* X97272374Y-88517991D02* X97353186Y-88652678D01* X97353186Y-88652678D02* X97433998Y-88733490D01* X97433998Y-88733490D02* X97568685Y-88814303D01* X97568685Y-88814303D02* X97649497Y-88841240D01* X97649497Y-88841240D02* X97757247Y-88841240D01* X97757247Y-88841240D02* X97864997Y-88787365D01* X97864997Y-88787365D02* X97918871Y-88733490D01* X97918871Y-88733490D02* X97972746Y-88625741D01* X97972746Y-88625741D02* X97972746Y-88571866D01* X97972746Y-88571866D02* X97784184Y-88383304D01* X97784184Y-88383304D02* X97676435Y-88491054D01* X98269058Y-88383304D02* X97703372Y-87817619D01* X97703372Y-87817619D02* X98592306Y-88060055D01* X98592306Y-88060055D02* X98026621Y-87494370D01* X98861680Y-87790682D02* X98295995Y-87224996D01* X98295995Y-87224996D02* X98430682Y-87090309D01* X98430682Y-87090309D02* X98538432Y-87036434D01* X98538432Y-87036434D02* X98646181Y-87036434D01* X98646181Y-87036434D02* X98726993Y-87063372D01* X98726993Y-87063372D02* X98861680Y-87144184D01* X98861680Y-87144184D02* X98942493Y-87224996D01* X98942493Y-87224996D02* X99023305Y-87359683D01* X99023305Y-87359683D02* X99050242Y-87440495D01* X99050242Y-87440495D02* X99050242Y-87548245D01* X99050242Y-87548245D02* X98996367Y-87655995D01* X98996367Y-87655995D02* X98861680Y-87790682D01* X98942493Y-86578498D02* X99077180Y-86713185D01* X98888618Y-86793998D02* X99077180Y-86713185D01* X99077180Y-86713185D02* X99157992Y-86524624D01* X99104117Y-86901747D02* X99077180Y-86713185D01* X99077180Y-86713185D02* X99265741Y-86740123D01* X98182651Y-70777710D02* X97724716Y-70696898D01* X97859403Y-71100959D02* X97293717Y-70535274D01* X97293717Y-70535274D02* X97509216Y-70319775D01* X97509216Y-70319775D02* X97590029Y-70292837D01* X97590029Y-70292837D02* X97643903Y-70292837D01* X97643903Y-70292837D02* X97724716Y-70319775D01* X97724716Y-70319775D02* X97805528Y-70400587D01* X97805528Y-70400587D02* X97832465Y-70481399D01* X97832465Y-70481399D02* X97832465Y-70535274D01* X97832465Y-70535274D02* X97805528Y-70616086D01* X97805528Y-70616086D02* X97590029Y-70831585D01* X97859403Y-69969588D02* X98317338Y-70427524D01* X98317338Y-70427524D02* X98398151Y-70454462D01* X98398151Y-70454462D02* X98452025Y-70454462D01* X98452025Y-70454462D02* X98532838Y-70427524D01* X98532838Y-70427524D02* X98640587Y-70319775D01* X98640587Y-70319775D02* X98667525Y-70238962D01* X98667525Y-70238962D02* X98667525Y-70185088D01* X98667525Y-70185088D02* X98640587Y-70104275D01* X98640587Y-70104275D02* X98182651Y-69646340D01* X99017711Y-69942651D02* X98452025Y-69376966D01* X98452025Y-69376966D02* X99340959Y-69619402D01* X99340959Y-69619402D02* X98775274Y-69053717D01* X71857372Y-65145494D02* X71776560Y-65172431D01* X71776560Y-65172431D02* X71695748Y-65253243D01* X71695748Y-65253243D02* X71641873Y-65360993D01* X71641873Y-65360993D02* X71641873Y-65468742D01* X71641873Y-65468742D02* X71668810Y-65549555D01* X71668810Y-65549555D02* X71749623Y-65684242D01* X71749623Y-65684242D02* X71830435Y-65765054D01* X71830435Y-65765054D02* X71965122Y-65845866D01* X71965122Y-65845866D02* X72045934Y-65872803D01* X72045934Y-65872803D02* X72153684Y-65872803D01* X72153684Y-65872803D02* X72261433Y-65818929D01* X72261433Y-65818929D02* X72315308Y-65765054D01* X72315308Y-65765054D02* X72369183Y-65657304D01* X72369183Y-65657304D02* X72369183Y-65603429D01* X72369183Y-65603429D02* X72180621Y-65414868D01* X72180621Y-65414868D02* X72072871Y-65522617D01* X72665494Y-65414868D02* X72099809Y-64849182D01* X72099809Y-64849182D02* X72315308Y-64633683D01* X72315308Y-64633683D02* X72396120Y-64606746D01* X72396120Y-64606746D02* X72449995Y-64606746D01* X72449995Y-64606746D02* X72530807Y-64633683D01* X72530807Y-64633683D02* X72611619Y-64714495D01* X72611619Y-64714495D02* X72638557Y-64795307D01* X72638557Y-64795307D02* X72638557Y-64849182D01* X72638557Y-64849182D02* X72611619Y-64929994D01* X72611619Y-64929994D02* X72396120Y-65145494D01* X72907931Y-64041060D02* X72800181Y-64148810D01* X72800181Y-64148810D02* X72773244Y-64229622D01* X72773244Y-64229622D02* X72773244Y-64283497D01* X72773244Y-64283497D02* X72800181Y-64418184D01* X72800181Y-64418184D02* X72880993Y-64552871D01* X72880993Y-64552871D02* X73096493Y-64768370D01* X73096493Y-64768370D02* X73177305Y-64795307D01* X73177305Y-64795307D02* X73231180Y-64795307D01* X73231180Y-64795307D02* X73311992Y-64768370D01* X73311992Y-64768370D02* X73419741Y-64660620D01* X73419741Y-64660620D02* X73446679Y-64579808D01* X73446679Y-64579808D02* X73446679Y-64525933D01* X73446679Y-64525933D02* X73419741Y-64445121D01* X73419741Y-64445121D02* X73285054Y-64310434D01* X73285054Y-64310434D02* X73204242Y-64283497D01* X73204242Y-64283497D02* X73150367Y-64283497D01* X73150367Y-64283497D02* X73069555Y-64310434D01* X73069555Y-64310434D02* X72961806Y-64418184D01* X72961806Y-64418184D02* X72934868Y-64498996D01* X72934868Y-64498996D02* X72934868Y-64552871D01* X72934868Y-64552871D02* X72961806Y-64633683D01* X71757372Y-47355494D02* X71676560Y-47382431D01* X71676560Y-47382431D02* X71595748Y-47463243D01* X71595748Y-47463243D02* X71541873Y-47570993D01* X71541873Y-47570993D02* X71541873Y-47678742D01* X71541873Y-47678742D02* X71568810Y-47759555D01* X71568810Y-47759555D02* X71649623Y-47894242D01* X71649623Y-47894242D02* X71730435Y-47975054D01* X71730435Y-47975054D02* X71865122Y-48055866D01* X71865122Y-48055866D02* X71945934Y-48082803D01* X71945934Y-48082803D02* X72053684Y-48082803D01* X72053684Y-48082803D02* X72161433Y-48028929D01* X72161433Y-48028929D02* X72215308Y-47975054D01* X72215308Y-47975054D02* X72269183Y-47867304D01* X72269183Y-47867304D02* X72269183Y-47813429D01* X72269183Y-47813429D02* X72080621Y-47624868D01* X72080621Y-47624868D02* X71972871Y-47732617D01* X72565494Y-47624868D02* X71999809Y-47059182D01* X71999809Y-47059182D02* X72215308Y-46843683D01* X72215308Y-46843683D02* X72296120Y-46816746D01* X72296120Y-46816746D02* X72349995Y-46816746D01* X72349995Y-46816746D02* X72430807Y-46843683D01* X72430807Y-46843683D02* X72511619Y-46924495D01* X72511619Y-46924495D02* X72538557Y-47005307D01* X72538557Y-47005307D02* X72538557Y-47059182D01* X72538557Y-47059182D02* X72511619Y-47139994D01* X72511619Y-47139994D02* X72296120Y-47355494D01* X73427491Y-46762871D02* X73104242Y-47086120D01* X73265867Y-46924495D02* X72700181Y-46358810D01* X72700181Y-46358810D02* X72727119Y-46493497D01* X72727119Y-46493497D02* X72727119Y-46601246D01* X72727119Y-46601246D02* X72700181Y-46682059D01* X71333998Y-78114868D02* X71253185Y-78141805D01* X71253185Y-78141805D02* X71172373Y-78222618D01* X71172373Y-78222618D02* X71118498Y-78330367D01* X71118498Y-78330367D02* X71118498Y-78438117D01* X71118498Y-78438117D02* X71145436Y-78518929D01* X71145436Y-78518929D02* X71226248Y-78653616D01* X71226248Y-78653616D02* X71307060Y-78734428D01* X71307060Y-78734428D02* X71441747Y-78815241D01* X71441747Y-78815241D02* X71522560Y-78842178D01* X71522560Y-78842178D02* X71630309Y-78842178D01* X71630309Y-78842178D02* X71738059Y-78788303D01* X71738059Y-78788303D02* X71791934Y-78734428D01* X71791934Y-78734428D02* X71845808Y-78626679D01* X71845808Y-78626679D02* X71845808Y-78572804D01* X71845808Y-78572804D02* X71657247Y-78384242D01* X71657247Y-78384242D02* X71549497Y-78491992D01* X72142120Y-78384242D02* X71576434Y-77818557D01* X71576434Y-77818557D02* X71791934Y-77603057D01* X71791934Y-77603057D02* X71872746Y-77576120D01* X71872746Y-77576120D02* X71926621Y-77576120D01* X71926621Y-77576120D02* X72007433Y-77603057D01* X72007433Y-77603057D02* X72088245Y-77683870D01* X72088245Y-77683870D02* X72115182Y-77764682D01* X72115182Y-77764682D02* X72115182Y-77818557D01* X72115182Y-77818557D02* X72088245Y-77899369D01* X72088245Y-77899369D02* X71872746Y-78114868D01* X73004117Y-77522245D02* X72680868Y-77845494D01* X72842492Y-77683870D02* X72276807Y-77118184D01* X72276807Y-77118184D02* X72303744Y-77252871D01* X72303744Y-77252871D02* X72303744Y-77360621D01* X72303744Y-77360621D02* X72276807Y-77441433D01* X72788618Y-76606373D02* X72842492Y-76552499D01* X72842492Y-76552499D02* X72923305Y-76525561D01* X72923305Y-76525561D02* X72977179Y-76525561D01* X72977179Y-76525561D02* X73057992Y-76552499D01* X73057992Y-76552499D02* X73192679Y-76633311D01* X73192679Y-76633311D02* X73327366Y-76767998D01* X73327366Y-76767998D02* X73408178Y-76902685D01* X73408178Y-76902685D02* X73435115Y-76983497D01* X73435115Y-76983497D02* X73435115Y-77037372D01* X73435115Y-77037372D02* X73408178Y-77118184D01* X73408178Y-77118184D02* X73354303Y-77172059D01* X73354303Y-77172059D02* X73273491Y-77198996D01* X73273491Y-77198996D02* X73219616Y-77198996D01* X73219616Y-77198996D02* X73138804Y-77172059D01* X73138804Y-77172059D02* X73004117Y-77091247D01* X73004117Y-77091247D02* X72869430Y-76956560D01* X72869430Y-76956560D02* X72788618Y-76821873D01* X72788618Y-76821873D02* X72761680Y-76741060D01* X72761680Y-76741060D02* X72761680Y-76687186D01* X72761680Y-76687186D02* X72788618Y-76606373D01* X72236401Y-85909961D02* X71778465Y-85829149D01* X71913152Y-86233210D02* X71347467Y-85667524D01* X71347467Y-85667524D02* X71562966Y-85452025D01* X71562966Y-85452025D02* X71643778Y-85425088D01* X71643778Y-85425088D02* X71697653Y-85425088D01* X71697653Y-85425088D02* X71778465Y-85452025D01* X71778465Y-85452025D02* X71859277Y-85532837D01* X71859277Y-85532837D02* X71886215Y-85613649D01* X71886215Y-85613649D02* X71886215Y-85667524D01* X71886215Y-85667524D02* X71859277Y-85748336D01* X71859277Y-85748336D02* X71643778Y-85963836D01* X71859277Y-85155714D02* X72802086Y-85344275D01* X72236401Y-84778590D02* X72424963Y-85721399D01* X72532713Y-84482278D02* X72667400Y-84616965D01* X72478838Y-84697778D02* X72667400Y-84616965D01* X72667400Y-84616965D02* X72748212Y-84428404D01* X72694337Y-84805527D02* X72667400Y-84616965D01* X72667400Y-84616965D02* X72855961Y-84643903D01* X97441998Y-78124868D02* X97361185Y-78151805D01* X97361185Y-78151805D02* X97280373Y-78232618D01* X97280373Y-78232618D02* X97226498Y-78340367D01* X97226498Y-78340367D02* X97226498Y-78448117D01* X97226498Y-78448117D02* X97253436Y-78528929D01* X97253436Y-78528929D02* X97334248Y-78663616D01* X97334248Y-78663616D02* X97415060Y-78744428D01* X97415060Y-78744428D02* X97549747Y-78825241D01* X97549747Y-78825241D02* X97630560Y-78852178D01* X97630560Y-78852178D02* X97738309Y-78852178D01* X97738309Y-78852178D02* X97846059Y-78798303D01* X97846059Y-78798303D02* X97899934Y-78744428D01* X97899934Y-78744428D02* X97953808Y-78636679D01* X97953808Y-78636679D02* X97953808Y-78582804D01* X97953808Y-78582804D02* X97765247Y-78394242D01* X97765247Y-78394242D02* X97657497Y-78501992D01* X98250120Y-78394242D02* X97684434Y-77828557D01* X97684434Y-77828557D02* X97899934Y-77613057D01* X97899934Y-77613057D02* X97980746Y-77586120D01* X97980746Y-77586120D02* X98034621Y-77586120D01* X98034621Y-77586120D02* X98115433Y-77613057D01* X98115433Y-77613057D02* X98196245Y-77693870D01* X98196245Y-77693870D02* X98223182Y-77774682D01* X98223182Y-77774682D02* X98223182Y-77828557D01* X98223182Y-77828557D02* X98196245Y-77909369D01* X98196245Y-77909369D02* X97980746Y-78124868D01* X98277057Y-77343683D02* X98277057Y-77289809D01* X98277057Y-77289809D02* X98303995Y-77208996D01* X98303995Y-77208996D02* X98438682Y-77074309D01* X98438682Y-77074309D02* X98519494Y-77047372D01* X98519494Y-77047372D02* X98573369Y-77047372D01* X98573369Y-77047372D02* X98654181Y-77074309D01* X98654181Y-77074309D02* X98708056Y-77128184D01* X98708056Y-77128184D02* X98761930Y-77235934D01* X98761930Y-77235934D02* X98761930Y-77882431D01* X98761930Y-77882431D02* X99112117Y-77532245D01* X99650865Y-76993497D02* X99327616Y-77316746D01* X99489240Y-77155121D02* X98923555Y-76589436D01* X98923555Y-76589436D02* X98950492Y-76724123D01* X98950492Y-76724123D02* X98950492Y-76831873D01* X98950492Y-76831873D02* X98923555Y-76912685D01* X97430435Y-75332431D02* X97349623Y-75359368D01* X97349623Y-75359368D02* X97268811Y-75440180D01* X97268811Y-75440180D02* X97214936Y-75547930D01* X97214936Y-75547930D02* X97214936Y-75655680D01* X97214936Y-75655680D02* X97241873Y-75736492D01* X97241873Y-75736492D02* X97322685Y-75871179D01* X97322685Y-75871179D02* X97403498Y-75951991D01* X97403498Y-75951991D02* X97538185Y-76032803D01* X97538185Y-76032803D02* X97618997Y-76059741D01* X97618997Y-76059741D02* X97726746Y-76059741D01* X97726746Y-76059741D02* X97834496Y-76005866D01* X97834496Y-76005866D02* X97888371Y-75951991D01* X97888371Y-75951991D02* X97942246Y-75844241D01* X97942246Y-75844241D02* X97942246Y-75790367D01* X97942246Y-75790367D02* X97753684Y-75601805D01* X97753684Y-75601805D02* X97645934Y-75709554D01* X98238557Y-75601805D02* X97672872Y-75036119D01* X97672872Y-75036119D02* X98561806Y-75278556D01* X98561806Y-75278556D02* X97996120Y-74712871D01* X98831180Y-75009182D02* X98265494Y-74443497D01* X98265494Y-74443497D02* X98400181Y-74308810D01* X98400181Y-74308810D02* X98507931Y-74254935D01* X98507931Y-74254935D02* X98615680Y-74254935D01* X98615680Y-74254935D02* X98696493Y-74281872D01* X98696493Y-74281872D02* X98831180Y-74362685D01* X98831180Y-74362685D02* X98911992Y-74443497D01* X98911992Y-74443497D02* X98992804Y-74578184D01* X98992804Y-74578184D02* X99019741Y-74658996D01* X99019741Y-74658996D02* X99019741Y-74766746D01* X99019741Y-74766746D02* X98965867Y-74874495D01* X98965867Y-74874495D02* X98831180Y-75009182D01* X98911992Y-73796999D02* X99046679Y-73931686D01* X98858117Y-74012498D02* X99046679Y-73931686D01* X99046679Y-73931686D02* X99127491Y-73743124D01* X99073616Y-74120248D02* X99046679Y-73931686D01* X99046679Y-73931686D02* X99235241Y-73958624D01* X97612154Y-57986959D02* X97881528Y-57717585D01* X97719903Y-58202458D02* X97342780Y-57448211D01* X97342780Y-57448211D02* X98097027Y-57825335D01* X97639091Y-57151900D02* X98393338Y-57529024D01* X98393338Y-57529024D02* X98016215Y-56774776D01* X99093711Y-56828651D02* X98635775Y-56747839D01* X98770462Y-57151900D02* X98204776Y-56586215D01* X98204776Y-56586215D02* X98420276Y-56370715D01* X98420276Y-56370715D02* X98501088Y-56343778D01* X98501088Y-56343778D02* X98554963Y-56343778D01* X98554963Y-56343778D02* X98635775Y-56370715D01* X98635775Y-56370715D02* X98716587Y-56451528D01* X98716587Y-56451528D02* X98743524Y-56532340D01* X98743524Y-56532340D02* X98743524Y-56586215D01* X98743524Y-56586215D02* X98716587Y-56667027D01* X98716587Y-56667027D02* X98501088Y-56882526D01* X99228398Y-56101341D02* X99039836Y-56289903D01* X99336147Y-56586215D02* X98770462Y-56020529D01* X98770462Y-56020529D02* X99039836Y-55751155D01* X71857372Y-72765494D02* X71776560Y-72792431D01* X71776560Y-72792431D02* X71695748Y-72873243D01* X71695748Y-72873243D02* X71641873Y-72980993D01* X71641873Y-72980993D02* X71641873Y-73088742D01* X71641873Y-73088742D02* X71668810Y-73169555D01* X71668810Y-73169555D02* X71749623Y-73304242D01* X71749623Y-73304242D02* X71830435Y-73385054D01* X71830435Y-73385054D02* X71965122Y-73465866D01* X71965122Y-73465866D02* X72045934Y-73492803D01* X72045934Y-73492803D02* X72153684Y-73492803D01* X72153684Y-73492803D02* X72261433Y-73438929D01* X72261433Y-73438929D02* X72315308Y-73385054D01* X72315308Y-73385054D02* X72369183Y-73277304D01* X72369183Y-73277304D02* X72369183Y-73223429D01* X72369183Y-73223429D02* X72180621Y-73034868D01* X72180621Y-73034868D02* X72072871Y-73142617D01* X72665494Y-73034868D02* X72099809Y-72469182D01* X72099809Y-72469182D02* X72315308Y-72253683D01* X72315308Y-72253683D02* X72396120Y-72226746D01* X72396120Y-72226746D02* X72449995Y-72226746D01* X72449995Y-72226746D02* X72530807Y-72253683D01* X72530807Y-72253683D02* X72611619Y-72334495D01* X72611619Y-72334495D02* X72638557Y-72415307D01* X72638557Y-72415307D02* X72638557Y-72469182D01* X72638557Y-72469182D02* X72611619Y-72549994D01* X72611619Y-72549994D02* X72396120Y-72765494D01* X73258117Y-72442245D02* X73365867Y-72334495D01* X73365867Y-72334495D02* X73392804Y-72253683D01* X73392804Y-72253683D02* X73392804Y-72199808D01* X73392804Y-72199808D02* X73365867Y-72065121D01* X73365867Y-72065121D02* X73285054Y-71930434D01* X73285054Y-71930434D02* X73069555Y-71714935D01* X73069555Y-71714935D02* X72988743Y-71687998D01* X72988743Y-71687998D02* X72934868Y-71687998D01* X72934868Y-71687998D02* X72854056Y-71714935D01* X72854056Y-71714935D02* X72746306Y-71822685D01* X72746306Y-71822685D02* X72719369Y-71903497D01* X72719369Y-71903497D02* X72719369Y-71957372D01* X72719369Y-71957372D02* X72746306Y-72038184D01* X72746306Y-72038184D02* X72880993Y-72172871D01* X72880993Y-72172871D02* X72961806Y-72199808D01* X72961806Y-72199808D02* X73015680Y-72199808D01* X73015680Y-72199808D02* X73096493Y-72172871D01* X73096493Y-72172871D02* X73204242Y-72065121D01* X73204242Y-72065121D02* X73231180Y-71984309D01* X73231180Y-71984309D02* X73231180Y-71930434D01* X73231180Y-71930434D02* X73204242Y-71849622D01* X97441998Y-85734868D02* X97361185Y-85761805D01* X97361185Y-85761805D02* X97280373Y-85842618D01* X97280373Y-85842618D02* X97226498Y-85950367D01* X97226498Y-85950367D02* X97226498Y-86058117D01* X97226498Y-86058117D02* X97253436Y-86138929D01* X97253436Y-86138929D02* X97334248Y-86273616D01* X97334248Y-86273616D02* X97415060Y-86354428D01* X97415060Y-86354428D02* X97549747Y-86435241D01* X97549747Y-86435241D02* X97630560Y-86462178D01* X97630560Y-86462178D02* X97738309Y-86462178D01* X97738309Y-86462178D02* X97846059Y-86408303D01* X97846059Y-86408303D02* X97899934Y-86354428D01* X97899934Y-86354428D02* X97953808Y-86246679D01* X97953808Y-86246679D02* X97953808Y-86192804D01* X97953808Y-86192804D02* X97765247Y-86004242D01* X97765247Y-86004242D02* X97657497Y-86111992D01* X98250120Y-86004242D02* X97684434Y-85438557D01* X97684434Y-85438557D02* X97899934Y-85223057D01* X97899934Y-85223057D02* X97980746Y-85196120D01* X97980746Y-85196120D02* X98034621Y-85196120D01* X98034621Y-85196120D02* X98115433Y-85223057D01* X98115433Y-85223057D02* X98196245Y-85303870D01* X98196245Y-85303870D02* X98223182Y-85384682D01* X98223182Y-85384682D02* X98223182Y-85438557D01* X98223182Y-85438557D02* X98196245Y-85519369D01* X98196245Y-85519369D02* X97980746Y-85734868D01* X99112117Y-85142245D02* X98788868Y-85465494D01* X98950492Y-85303870D02* X98384807Y-84738184D01* X98384807Y-84738184D02* X98411744Y-84872871D01* X98411744Y-84872871D02* X98411744Y-84980621D01* X98411744Y-84980621D02* X98384807Y-85061433D01* X99112117Y-84495747D02* X99031305Y-84522685D01* X99031305Y-84522685D02* X98977430Y-84522685D01* X98977430Y-84522685D02* X98896618Y-84495747D01* X98896618Y-84495747D02* X98869680Y-84468810D01* X98869680Y-84468810D02* X98842743Y-84387998D01* X98842743Y-84387998D02* X98842743Y-84334123D01* X98842743Y-84334123D02* X98869680Y-84253311D01* X98869680Y-84253311D02* X98977430Y-84145561D01* X98977430Y-84145561D02* X99058242Y-84118624D01* X99058242Y-84118624D02* X99112117Y-84118624D01* X99112117Y-84118624D02* X99192929Y-84145561D01* X99192929Y-84145561D02* X99219866Y-84172499D01* X99219866Y-84172499D02* X99246804Y-84253311D01* X99246804Y-84253311D02* X99246804Y-84307186D01* X99246804Y-84307186D02* X99219866Y-84387998D01* X99219866Y-84387998D02* X99112117Y-84495747D01* X99112117Y-84495747D02* X99085179Y-84576560D01* X99085179Y-84576560D02* X99085179Y-84630434D01* X99085179Y-84630434D02* X99112117Y-84711247D01* X99112117Y-84711247D02* X99219866Y-84818996D01* X99219866Y-84818996D02* X99300679Y-84845934D01* X99300679Y-84845934D02* X99354553Y-84845934D01* X99354553Y-84845934D02* X99435366Y-84818996D01* X99435366Y-84818996D02* X99543115Y-84711247D01* X99543115Y-84711247D02* X99570053Y-84630434D01* X99570053Y-84630434D02* X99570053Y-84576560D01* X99570053Y-84576560D02* X99543115Y-84495747D01* X99543115Y-84495747D02* X99435366Y-84387998D01* X99435366Y-84387998D02* X99354553Y-84361060D01* X99354553Y-84361060D02* X99300679Y-84361060D01* X99300679Y-84361060D02* X99219866Y-84387998D01* X97297406Y-45361585D02* X98051653Y-45738709D01* X98051653Y-45738709D02* X97674529Y-44984462D01* X98321027Y-44876712D02* X98428776Y-44822838D01* X98428776Y-44822838D02* X98482651Y-44822838D01* X98482651Y-44822838D02* X98563463Y-44849775D01* X98563463Y-44849775D02* X98644276Y-44930587D01* X98644276Y-44930587D02* X98671213Y-45011399D01* X98671213Y-45011399D02* X98671213Y-45065274D01* X98671213Y-45065274D02* X98644276Y-45146086D01* X98644276Y-45146086D02* X98428776Y-45361586D01* X98428776Y-45361586D02* X97863091Y-44795900D01* X97863091Y-44795900D02* X98051653Y-44607338D01* X98051653Y-44607338D02* X98132465Y-44580401D01* X98132465Y-44580401D02* X98186340Y-44580401D01* X98186340Y-44580401D02* X98267152Y-44607338D01* X98267152Y-44607338D02* X98321027Y-44661213D01* X98321027Y-44661213D02* X98347964Y-44742025D01* X98347964Y-44742025D02* X98347964Y-44795900D01* X98347964Y-44795900D02* X98321027Y-44876712D01* X98321027Y-44876712D02* X98132465Y-45065274D01* X98428776Y-44230215D02* X98886712Y-44688151D01* X98886712Y-44688151D02* X98967524Y-44715088D01* X98967524Y-44715088D02* X99021399Y-44715088D01* X99021399Y-44715088D02* X99102211Y-44688151D01* X99102211Y-44688151D02* X99209961Y-44580401D01* X99209961Y-44580401D02* X99236898Y-44499589D01* X99236898Y-44499589D02* X99236898Y-44445714D01* X99236898Y-44445714D02* X99209961Y-44364902D01* X99209961Y-44364902D02* X98752025Y-43906966D01* X99533210Y-44203277D02* X99640959Y-44149403D01* X99640959Y-44149403D02* X99775646Y-44014716D01* X99775646Y-44014716D02* X99802584Y-43933903D01* X99802584Y-43933903D02* X99802584Y-43880029D01* X99802584Y-43880029D02* X99775646Y-43799216D01* X99775646Y-43799216D02* X99721771Y-43745342D01* X99721771Y-43745342D02* X99640959Y-43718404D01* X99640959Y-43718404D02* X99587084Y-43718404D01* X99587084Y-43718404D02* X99506272Y-43745342D01* X99506272Y-43745342D02* X99371585Y-43826154D01* X99371585Y-43826154D02* X99290773Y-43853091D01* X99290773Y-43853091D02* X99236898Y-43853091D01* X99236898Y-43853091D02* X99156086Y-43826154D01* X99156086Y-43826154D02* X99102211Y-43772279D01* X99102211Y-43772279D02* X99075274Y-43691467D01* X99075274Y-43691467D02* X99075274Y-43637592D01* X99075274Y-43637592D02* X99102211Y-43556780D01* X99102211Y-43556780D02* X99236898Y-43422093D01* X99236898Y-43422093D02* X99344648Y-43368218D01* X99640959Y-43018032D02* X99775646Y-43152719D01* X99587085Y-43233531D02* X99775646Y-43152719D01* X99775646Y-43152719D02* X99856459Y-42964157D01* X99802584Y-43341280D02* X99775646Y-43152719D01* X99775646Y-43152719D02* X99964208Y-43179656D01* X97441998Y-65424868D02* X97361185Y-65451805D01* X97361185Y-65451805D02* X97280373Y-65532618D01* X97280373Y-65532618D02* X97226498Y-65640367D01* X97226498Y-65640367D02* X97226498Y-65748117D01* X97226498Y-65748117D02* X97253436Y-65828929D01* X97253436Y-65828929D02* X97334248Y-65963616D01* X97334248Y-65963616D02* X97415060Y-66044428D01* X97415060Y-66044428D02* X97549747Y-66125241D01* X97549747Y-66125241D02* X97630560Y-66152178D01* X97630560Y-66152178D02* X97738309Y-66152178D01* X97738309Y-66152178D02* X97846059Y-66098303D01* X97846059Y-66098303D02* X97899934Y-66044428D01* X97899934Y-66044428D02* X97953808Y-65936679D01* X97953808Y-65936679D02* X97953808Y-65882804D01* X97953808Y-65882804D02* X97765247Y-65694242D01* X97765247Y-65694242D02* X97657497Y-65801992D01* X98250120Y-65694242D02* X97684434Y-65128557D01* X97684434Y-65128557D02* X97899934Y-64913057D01* X97899934Y-64913057D02* X97980746Y-64886120D01* X97980746Y-64886120D02* X98034621Y-64886120D01* X98034621Y-64886120D02* X98115433Y-64913057D01* X98115433Y-64913057D02* X98196245Y-64993870D01* X98196245Y-64993870D02* X98223182Y-65074682D01* X98223182Y-65074682D02* X98223182Y-65128557D01* X98223182Y-65128557D02* X98196245Y-65209369D01* X98196245Y-65209369D02* X97980746Y-65424868D01* X98277057Y-64643683D02* X98277057Y-64589809D01* X98277057Y-64589809D02* X98303995Y-64508996D01* X98303995Y-64508996D02* X98438682Y-64374309D01* X98438682Y-64374309D02* X98519494Y-64347372D01* X98519494Y-64347372D02* X98573369Y-64347372D01* X98573369Y-64347372D02* X98654181Y-64374309D01* X98654181Y-64374309D02* X98708056Y-64428184D01* X98708056Y-64428184D02* X98761930Y-64535934D01* X98761930Y-64535934D02* X98761930Y-65182431D01* X98761930Y-65182431D02* X99112117Y-64832245D01* X98734993Y-64077998D02* X99112117Y-63700874D01* X99112117Y-63700874D02* X99435366Y-64508996D01* X97441998Y-73034868D02* X97361185Y-73061805D01* X97361185Y-73061805D02* X97280373Y-73142618D01* X97280373Y-73142618D02* X97226498Y-73250367D01* X97226498Y-73250367D02* X97226498Y-73358117D01* X97226498Y-73358117D02* X97253436Y-73438929D01* X97253436Y-73438929D02* X97334248Y-73573616D01* X97334248Y-73573616D02* X97415060Y-73654428D01* X97415060Y-73654428D02* X97549747Y-73735241D01* X97549747Y-73735241D02* X97630560Y-73762178D01* X97630560Y-73762178D02* X97738309Y-73762178D01* X97738309Y-73762178D02* X97846059Y-73708303D01* X97846059Y-73708303D02* X97899934Y-73654428D01* X97899934Y-73654428D02* X97953808Y-73546679D01* X97953808Y-73546679D02* X97953808Y-73492804D01* X97953808Y-73492804D02* X97765247Y-73304242D01* X97765247Y-73304242D02* X97657497Y-73411992D01* X98250120Y-73304242D02* X97684434Y-72738557D01* X97684434Y-72738557D02* X97899934Y-72523057D01* X97899934Y-72523057D02* X97980746Y-72496120D01* X97980746Y-72496120D02* X98034621Y-72496120D01* X98034621Y-72496120D02* X98115433Y-72523057D01* X98115433Y-72523057D02* X98196245Y-72603870D01* X98196245Y-72603870D02* X98223182Y-72684682D01* X98223182Y-72684682D02* X98223182Y-72738557D01* X98223182Y-72738557D02* X98196245Y-72819369D01* X98196245Y-72819369D02* X97980746Y-73034868D01* X98277057Y-72253683D02* X98277057Y-72199809D01* X98277057Y-72199809D02* X98303995Y-72118996D01* X98303995Y-72118996D02* X98438682Y-71984309D01* X98438682Y-71984309D02* X98519494Y-71957372D01* X98519494Y-71957372D02* X98573369Y-71957372D01* X98573369Y-71957372D02* X98654181Y-71984309D01* X98654181Y-71984309D02* X98708056Y-72038184D01* X98708056Y-72038184D02* X98761930Y-72145934D01* X98761930Y-72145934D02* X98761930Y-72792431D01* X98761930Y-72792431D02* X99112117Y-72442245D01* X98815805Y-71714935D02* X98815805Y-71661060D01* X98815805Y-71661060D02* X98842743Y-71580248D01* X98842743Y-71580248D02* X98977430Y-71445561D01* X98977430Y-71445561D02* X99058242Y-71418624D01* X99058242Y-71418624D02* X99112117Y-71418624D01* X99112117Y-71418624D02* X99192929Y-71445561D01* X99192929Y-71445561D02* X99246804Y-71499436D01* X99246804Y-71499436D02* X99300679Y-71607186D01* X99300679Y-71607186D02* X99300679Y-72253683D01* X99300679Y-72253683D02* X99650865Y-71903497D01* X71857372Y-70225494D02* X71776560Y-70252431D01* X71776560Y-70252431D02* X71695748Y-70333243D01* X71695748Y-70333243D02* X71641873Y-70440993D01* X71641873Y-70440993D02* X71641873Y-70548742D01* X71641873Y-70548742D02* X71668810Y-70629555D01* X71668810Y-70629555D02* X71749623Y-70764242D01* X71749623Y-70764242D02* X71830435Y-70845054D01* X71830435Y-70845054D02* X71965122Y-70925866D01* X71965122Y-70925866D02* X72045934Y-70952803D01* X72045934Y-70952803D02* X72153684Y-70952803D01* X72153684Y-70952803D02* X72261433Y-70898929D01* X72261433Y-70898929D02* X72315308Y-70845054D01* X72315308Y-70845054D02* X72369183Y-70737304D01* X72369183Y-70737304D02* X72369183Y-70683429D01* X72369183Y-70683429D02* X72180621Y-70494868D01* X72180621Y-70494868D02* X72072871Y-70602617D01* X72665494Y-70494868D02* X72099809Y-69929182D01* X72099809Y-69929182D02* X72315308Y-69713683D01* X72315308Y-69713683D02* X72396120Y-69686746D01* X72396120Y-69686746D02* X72449995Y-69686746D01* X72449995Y-69686746D02* X72530807Y-69713683D01* X72530807Y-69713683D02* X72611619Y-69794495D01* X72611619Y-69794495D02* X72638557Y-69875307D01* X72638557Y-69875307D02* X72638557Y-69929182D01* X72638557Y-69929182D02* X72611619Y-70009994D01* X72611619Y-70009994D02* X72396120Y-70225494D01* X72988743Y-69525121D02* X72907931Y-69552059D01* X72907931Y-69552059D02* X72854056Y-69552059D01* X72854056Y-69552059D02* X72773244Y-69525121D01* X72773244Y-69525121D02* X72746306Y-69498184D01* X72746306Y-69498184D02* X72719369Y-69417372D01* X72719369Y-69417372D02* X72719369Y-69363497D01* X72719369Y-69363497D02* X72746306Y-69282685D01* X72746306Y-69282685D02* X72854056Y-69174935D01* X72854056Y-69174935D02* X72934868Y-69147998D01* X72934868Y-69147998D02* X72988743Y-69147998D01* X72988743Y-69147998D02* X73069555Y-69174935D01* X73069555Y-69174935D02* X73096493Y-69201872D01* X73096493Y-69201872D02* X73123430Y-69282685D01* X73123430Y-69282685D02* X73123430Y-69336559D01* X73123430Y-69336559D02* X73096493Y-69417372D01* X73096493Y-69417372D02* X72988743Y-69525121D01* X72988743Y-69525121D02* X72961806Y-69605933D01* X72961806Y-69605933D02* X72961806Y-69659808D01* X72961806Y-69659808D02* X72988743Y-69740620D01* X72988743Y-69740620D02* X73096493Y-69848370D01* X73096493Y-69848370D02* X73177305Y-69875307D01* X73177305Y-69875307D02* X73231180Y-69875307D01* X73231180Y-69875307D02* X73311992Y-69848370D01* X73311992Y-69848370D02* X73419741Y-69740620D01* X73419741Y-69740620D02* X73446679Y-69659808D01* X73446679Y-69659808D02* X73446679Y-69605933D01* X73446679Y-69605933D02* X73419741Y-69525121D01* X73419741Y-69525121D02* X73311992Y-69417372D01* X73311992Y-69417372D02* X73231180Y-69390434D01* X73231180Y-69390434D02* X73177305Y-69390434D01* X73177305Y-69390434D02* X73096493Y-69417372D01* X71100936Y-88493930D02* X71020123Y-88520868D01* X71020123Y-88520868D02* X70939311Y-88601680D01* X70939311Y-88601680D02* X70885436Y-88709429D01* X70885436Y-88709429D02* X70885436Y-88817179D01* X70885436Y-88817179D02* X70912374Y-88897991D01* X70912374Y-88897991D02* X70993186Y-89032678D01* X70993186Y-89032678D02* X71073998Y-89113490D01* X71073998Y-89113490D02* X71208685Y-89194303D01* X71208685Y-89194303D02* X71289497Y-89221240D01* X71289497Y-89221240D02* X71397247Y-89221240D01* X71397247Y-89221240D02* X71504997Y-89167365D01* X71504997Y-89167365D02* X71558871Y-89113490D01* X71558871Y-89113490D02* X71612746Y-89005741D01* X71612746Y-89005741D02* X71612746Y-88951866D01* X71612746Y-88951866D02* X71424184Y-88763304D01* X71424184Y-88763304D02* X71316435Y-88871054D01* X71909058Y-88763304D02* X71343372Y-88197619D01* X71343372Y-88197619D02* X72232306Y-88440055D01* X72232306Y-88440055D02* X71666621Y-87874370D01* X72501680Y-88170682D02* X71935995Y-87604996D01* X71935995Y-87604996D02* X72070682Y-87470309D01* X72070682Y-87470309D02* X72178432Y-87416434D01* X72178432Y-87416434D02* X72286181Y-87416434D01* X72286181Y-87416434D02* X72366993Y-87443372D01* X72366993Y-87443372D02* X72501680Y-87524184D01* X72501680Y-87524184D02* X72582493Y-87604996D01* X72582493Y-87604996D02* X72663305Y-87739683D01* X72663305Y-87739683D02* X72690242Y-87820495D01* X72690242Y-87820495D02* X72690242Y-87928245D01* X72690242Y-87928245D02* X72636367Y-88035995D01* X72636367Y-88035995D02* X72501680Y-88170682D01* X72582493Y-86958498D02* X72717180Y-87093185D01* X72528618Y-87173998D02* X72717180Y-87093185D01* X72717180Y-87093185D02* X72797992Y-86904624D01* X72744117Y-87281747D02* X72717180Y-87093185D01* X72717180Y-87093185D02* X72905741Y-87120123D01* X97441998Y-93354868D02* X97361185Y-93381805D01* X97361185Y-93381805D02* X97280373Y-93462618D01* X97280373Y-93462618D02* X97226498Y-93570367D01* X97226498Y-93570367D02* X97226498Y-93678117D01* X97226498Y-93678117D02* X97253436Y-93758929D01* X97253436Y-93758929D02* X97334248Y-93893616D01* X97334248Y-93893616D02* X97415060Y-93974428D01* X97415060Y-93974428D02* X97549747Y-94055241D01* X97549747Y-94055241D02* X97630560Y-94082178D01* X97630560Y-94082178D02* X97738309Y-94082178D01* X97738309Y-94082178D02* X97846059Y-94028303D01* X97846059Y-94028303D02* X97899934Y-93974428D01* X97899934Y-93974428D02* X97953808Y-93866679D01* X97953808Y-93866679D02* X97953808Y-93812804D01* X97953808Y-93812804D02* X97765247Y-93624242D01* X97765247Y-93624242D02* X97657497Y-93731992D01* X98250120Y-93624242D02* X97684434Y-93058557D01* X97684434Y-93058557D02* X97899934Y-92843057D01* X97899934Y-92843057D02* X97980746Y-92816120D01* X97980746Y-92816120D02* X98034621Y-92816120D01* X98034621Y-92816120D02* X98115433Y-92843057D01* X98115433Y-92843057D02* X98196245Y-92923870D01* X98196245Y-92923870D02* X98223182Y-93004682D01* X98223182Y-93004682D02* X98223182Y-93058557D01* X98223182Y-93058557D02* X98196245Y-93139369D01* X98196245Y-93139369D02* X97980746Y-93354868D01* X99112117Y-92762245D02* X98788868Y-93085494D01* X98950492Y-92923870D02* X98384807Y-92358184D01* X98384807Y-92358184D02* X98411744Y-92492871D01* X98411744Y-92492871D02* X98411744Y-92600621D01* X98411744Y-92600621D02* X98384807Y-92681433D01* X99031305Y-91711686D02* X98923555Y-91819436D01* X98923555Y-91819436D02* X98896618Y-91900248D01* X98896618Y-91900248D02* X98896618Y-91954123D01* X98896618Y-91954123D02* X98923555Y-92088810D01* X98923555Y-92088810D02* X99004367Y-92223497D01* X99004367Y-92223497D02* X99219866Y-92438996D01* X99219866Y-92438996D02* X99300679Y-92465934D01* X99300679Y-92465934D02* X99354553Y-92465934D01* X99354553Y-92465934D02* X99435366Y-92438996D01* X99435366Y-92438996D02* X99543115Y-92331247D01* X99543115Y-92331247D02* X99570053Y-92250434D01* X99570053Y-92250434D02* X99570053Y-92196560D01* X99570053Y-92196560D02* X99543115Y-92115747D01* X99543115Y-92115747D02* X99408428Y-91981060D01* X99408428Y-91981060D02* X99327616Y-91954123D01* X99327616Y-91954123D02* X99273741Y-91954123D01* X99273741Y-91954123D02* X99192929Y-91981060D01* X99192929Y-91981060D02* X99085179Y-92088810D01* X99085179Y-92088810D02* X99058242Y-92169622D01* X99058242Y-92169622D02* X99058242Y-92223497D01* X99058242Y-92223497D02* X99085179Y-92304309D01* X97441998Y-83194868D02* X97361185Y-83221805D01* X97361185Y-83221805D02* X97280373Y-83302618D01* X97280373Y-83302618D02* X97226498Y-83410367D01* X97226498Y-83410367D02* X97226498Y-83518117D01* X97226498Y-83518117D02* X97253436Y-83598929D01* X97253436Y-83598929D02* X97334248Y-83733616D01* X97334248Y-83733616D02* X97415060Y-83814428D01* X97415060Y-83814428D02* X97549747Y-83895241D01* X97549747Y-83895241D02* X97630560Y-83922178D01* X97630560Y-83922178D02* X97738309Y-83922178D01* X97738309Y-83922178D02* X97846059Y-83868303D01* X97846059Y-83868303D02* X97899934Y-83814428D01* X97899934Y-83814428D02* X97953808Y-83706679D01* X97953808Y-83706679D02* X97953808Y-83652804D01* X97953808Y-83652804D02* X97765247Y-83464242D01* X97765247Y-83464242D02* X97657497Y-83571992D01* X98250120Y-83464242D02* X97684434Y-82898557D01* X97684434Y-82898557D02* X97899934Y-82683057D01* X97899934Y-82683057D02* X97980746Y-82656120D01* X97980746Y-82656120D02* X98034621Y-82656120D01* X98034621Y-82656120D02* X98115433Y-82683057D01* X98115433Y-82683057D02* X98196245Y-82763870D01* X98196245Y-82763870D02* X98223182Y-82844682D01* X98223182Y-82844682D02* X98223182Y-82898557D01* X98223182Y-82898557D02* X98196245Y-82979369D01* X98196245Y-82979369D02* X97980746Y-83194868D01* X99112117Y-82602245D02* X98788868Y-82925494D01* X98950492Y-82763870D02* X98384807Y-82198184D01* X98384807Y-82198184D02* X98411744Y-82332871D01* X98411744Y-82332871D02* X98411744Y-82440621D01* X98411744Y-82440621D02* X98384807Y-82521433D01* X99381491Y-82332871D02* X99489240Y-82225121D01* X99489240Y-82225121D02* X99516178Y-82144309D01* X99516178Y-82144309D02* X99516178Y-82090434D01* X99516178Y-82090434D02* X99489240Y-81955747D01* X99489240Y-81955747D02* X99408428Y-81821060D01* X99408428Y-81821060D02* X99192929Y-81605561D01* X99192929Y-81605561D02* X99112117Y-81578624D01* X99112117Y-81578624D02* X99058242Y-81578624D01* X99058242Y-81578624D02* X98977430Y-81605561D01* X98977430Y-81605561D02* X98869680Y-81713311D01* X98869680Y-81713311D02* X98842743Y-81794123D01* X98842743Y-81794123D02* X98842743Y-81847998D01* X98842743Y-81847998D02* X98869680Y-81928810D01* X98869680Y-81928810D02* X99004367Y-82063497D01* X99004367Y-82063497D02* X99085179Y-82090434D01* X99085179Y-82090434D02* X99139054Y-82090434D01* X99139054Y-82090434D02* X99219866Y-82063497D01* X99219866Y-82063497D02* X99327616Y-81955747D01* X99327616Y-81955747D02* X99354553Y-81874935D01* X99354553Y-81874935D02* X99354553Y-81821060D01* X99354553Y-81821060D02* X99327616Y-81740248D01* X72009277Y-93973085D02* X71443592Y-93407399D01* X71443592Y-93407399D02* X71578279Y-93272712D01* X71578279Y-93272712D02* X71686028Y-93218838D01* X71686028Y-93218838D02* X71793778Y-93218838D01* X71793778Y-93218838D02* X71874590Y-93245775D01* X71874590Y-93245775D02* X72009277Y-93326587D01* X72009277Y-93326587D02* X72090089Y-93407399D01* X72090089Y-93407399D02* X72170901Y-93542086D01* X72170901Y-93542086D02* X72197839Y-93622899D01* X72197839Y-93622899D02* X72197839Y-93730648D01* X72197839Y-93730648D02* X72143964Y-93838398D01* X72143964Y-93838398D02* X72009277Y-93973085D01* X72574962Y-93407399D02* X72009277Y-92841714D01* X72009277Y-92841714D02* X72601900Y-93057213D01* X72601900Y-93057213D02* X72386401Y-92464590D01* X72386401Y-92464590D02* X72952086Y-93030276D01* X72736587Y-92114404D02* X72871274Y-92249091D01* X72682712Y-92329903D02* X72871274Y-92249091D01* X72871274Y-92249091D02* X72952086Y-92060529D01* X72898211Y-92437653D02* X72871274Y-92249091D01* X72871274Y-92249091D02* X73059836Y-92276028D01* X71957372Y-67655494D02* X71876560Y-67682431D01* X71876560Y-67682431D02* X71795748Y-67763243D01* X71795748Y-67763243D02* X71741873Y-67870993D01* X71741873Y-67870993D02* X71741873Y-67978742D01* X71741873Y-67978742D02* X71768810Y-68059555D01* X71768810Y-68059555D02* X71849623Y-68194242D01* X71849623Y-68194242D02* X71930435Y-68275054D01* X71930435Y-68275054D02* X72065122Y-68355866D01* X72065122Y-68355866D02* X72145934Y-68382803D01* X72145934Y-68382803D02* X72253684Y-68382803D01* X72253684Y-68382803D02* X72361433Y-68328929D01* X72361433Y-68328929D02* X72415308Y-68275054D01* X72415308Y-68275054D02* X72469183Y-68167304D01* X72469183Y-68167304D02* X72469183Y-68113429D01* X72469183Y-68113429D02* X72280621Y-67924868D01* X72280621Y-67924868D02* X72172871Y-68032617D01* X72765494Y-67924868D02* X72199809Y-67359182D01* X72199809Y-67359182D02* X72415308Y-67143683D01* X72415308Y-67143683D02* X72496120Y-67116746D01* X72496120Y-67116746D02* X72549995Y-67116746D01* X72549995Y-67116746D02* X72630807Y-67143683D01* X72630807Y-67143683D02* X72711619Y-67224495D01* X72711619Y-67224495D02* X72738557Y-67305307D01* X72738557Y-67305307D02* X72738557Y-67359182D01* X72738557Y-67359182D02* X72711619Y-67439994D01* X72711619Y-67439994D02* X72496120Y-67655494D01* X72711619Y-66847372D02* X73088743Y-66470248D01* X73088743Y-66470248D02* X73411992Y-67278370D01* X71614936Y-50147930D02* X71534123Y-50174868D01* X71534123Y-50174868D02* X71453311Y-50255680D01* X71453311Y-50255680D02* X71399436Y-50363429D01* X71399436Y-50363429D02* X71399436Y-50471179D01* X71399436Y-50471179D02* X71426374Y-50551991D01* X71426374Y-50551991D02* X71507186Y-50686678D01* X71507186Y-50686678D02* X71587998Y-50767490D01* X71587998Y-50767490D02* X71722685Y-50848303D01* X71722685Y-50848303D02* X71803497Y-50875240D01* X71803497Y-50875240D02* X71911247Y-50875240D01* X71911247Y-50875240D02* X72018997Y-50821365D01* X72018997Y-50821365D02* X72072871Y-50767490D01* X72072871Y-50767490D02* X72126746Y-50659741D01* X72126746Y-50659741D02* X72126746Y-50605866D01* X72126746Y-50605866D02* X71938184Y-50417304D01* X71938184Y-50417304D02* X71830435Y-50525054D01* X72423058Y-50417304D02* X71857372Y-49851619D01* X71857372Y-49851619D02* X72746306Y-50094055D01* X72746306Y-50094055D02* X72180621Y-49528370D01* X73015680Y-49824682D02* X72449995Y-49258996D01* X72449995Y-49258996D02* X72584682Y-49124309D01* X72584682Y-49124309D02* X72692432Y-49070434D01* X72692432Y-49070434D02* X72800181Y-49070434D01* X72800181Y-49070434D02* X72880993Y-49097372D01* X72880993Y-49097372D02* X73015680Y-49178184D01* X73015680Y-49178184D02* X73096493Y-49258996D01* X73096493Y-49258996D02* X73177305Y-49393683D01* X73177305Y-49393683D02* X73204242Y-49474495D01* X73204242Y-49474495D02* X73204242Y-49582245D01* X73204242Y-49582245D02* X73150367Y-49689995D01* X73150367Y-49689995D02* X73015680Y-49824682D01* X73096493Y-48612498D02* X73231180Y-48747185D01* X73042618Y-48827998D02* X73231180Y-48747185D01* X73231180Y-48747185D02* X73311992Y-48558624D01* X73258117Y-48935747D02* X73231180Y-48747185D01* X73231180Y-48747185D02* X73419741Y-48774123D01* X71857372Y-54985494D02* X71776560Y-55012431D01* X71776560Y-55012431D02* X71695748Y-55093243D01* X71695748Y-55093243D02* X71641873Y-55200993D01* X71641873Y-55200993D02* X71641873Y-55308742D01* X71641873Y-55308742D02* X71668810Y-55389555D01* X71668810Y-55389555D02* X71749623Y-55524242D01* X71749623Y-55524242D02* X71830435Y-55605054D01* X71830435Y-55605054D02* X71965122Y-55685866D01* X71965122Y-55685866D02* X72045934Y-55712803D01* X72045934Y-55712803D02* X72153684Y-55712803D01* X72153684Y-55712803D02* X72261433Y-55658929D01* X72261433Y-55658929D02* X72315308Y-55605054D01* X72315308Y-55605054D02* X72369183Y-55497304D01* X72369183Y-55497304D02* X72369183Y-55443429D01* X72369183Y-55443429D02* X72180621Y-55254868D01* X72180621Y-55254868D02* X72072871Y-55362617D01* X72665494Y-55254868D02* X72099809Y-54689182D01* X72099809Y-54689182D02* X72315308Y-54473683D01* X72315308Y-54473683D02* X72396120Y-54446746D01* X72396120Y-54446746D02* X72449995Y-54446746D01* X72449995Y-54446746D02* X72530807Y-54473683D01* X72530807Y-54473683D02* X72611619Y-54554495D01* X72611619Y-54554495D02* X72638557Y-54635307D01* X72638557Y-54635307D02* X72638557Y-54689182D01* X72638557Y-54689182D02* X72611619Y-54769994D01* X72611619Y-54769994D02* X72396120Y-54985494D01* X72611619Y-54177372D02* X72961806Y-53827185D01* X72961806Y-53827185D02* X72988743Y-54231246D01* X72988743Y-54231246D02* X73069555Y-54150434D01* X73069555Y-54150434D02* X73150367Y-54123497D01* X73150367Y-54123497D02* X73204242Y-54123497D01* X73204242Y-54123497D02* X73285054Y-54150434D01* X73285054Y-54150434D02* X73419741Y-54285121D01* X73419741Y-54285121D02* X73446679Y-54365933D01* X73446679Y-54365933D02* X73446679Y-54419808D01* X73446679Y-54419808D02* X73419741Y-54500620D01* X73419741Y-54500620D02* X73258117Y-54662245D01* X73258117Y-54662245D02* X73177305Y-54689182D01* X73177305Y-54689182D02* X73123430Y-54689182D01* X97430435Y-49932431D02* X97349623Y-49959368D01* X97349623Y-49959368D02* X97268811Y-50040180D01* X97268811Y-50040180D02* X97214936Y-50147930D01* X97214936Y-50147930D02* X97214936Y-50255680D01* X97214936Y-50255680D02* X97241873Y-50336492D01* X97241873Y-50336492D02* X97322685Y-50471179D01* X97322685Y-50471179D02* X97403498Y-50551991D01* X97403498Y-50551991D02* X97538185Y-50632803D01* X97538185Y-50632803D02* X97618997Y-50659741D01* X97618997Y-50659741D02* X97726746Y-50659741D01* X97726746Y-50659741D02* X97834496Y-50605866D01* X97834496Y-50605866D02* X97888371Y-50551991D01* X97888371Y-50551991D02* X97942246Y-50444241D01* X97942246Y-50444241D02* X97942246Y-50390367D01* X97942246Y-50390367D02* X97753684Y-50201805D01* X97753684Y-50201805D02* X97645934Y-50309554D01* X98238557Y-50201805D02* X97672872Y-49636119D01* X97672872Y-49636119D02* X98561806Y-49878556D01* X98561806Y-49878556D02* X97996120Y-49312871D01* X98831180Y-49609182D02* X98265494Y-49043497D01* X98265494Y-49043497D02* X98400181Y-48908810D01* X98400181Y-48908810D02* X98507931Y-48854935D01* X98507931Y-48854935D02* X98615680Y-48854935D01* X98615680Y-48854935D02* X98696493Y-48881872D01* X98696493Y-48881872D02* X98831180Y-48962685D01* X98831180Y-48962685D02* X98911992Y-49043497D01* X98911992Y-49043497D02* X98992804Y-49178184D01* X98992804Y-49178184D02* X99019741Y-49258996D01* X99019741Y-49258996D02* X99019741Y-49366746D01* X99019741Y-49366746D02* X98965867Y-49474495D01* X98965867Y-49474495D02* X98831180Y-49609182D01* X98911992Y-48396999D02* X99046679Y-48531686D01* X98858117Y-48612498D02* X99046679Y-48531686D01* X99046679Y-48531686D02* X99127491Y-48343124D01* X99073616Y-48720248D02* X99046679Y-48531686D01* X99046679Y-48531686D02* X99235241Y-48558624D01* X54068095Y-94804819D02* X54068095Y-95614342D01* X54068095Y-95614342D02* X54115714Y-95709580D01* X54115714Y-95709580D02* X54163333Y-95757200D01* X54163333Y-95757200D02* X54258571Y-95804819D01* X54258571Y-95804819D02* X54449047Y-95804819D01* X54449047Y-95804819D02* X54544285Y-95757200D01* X54544285Y-95757200D02* X54591904Y-95709580D01* X54591904Y-95709580D02* X54639523Y-95614342D01* X54639523Y-95614342D02* X54639523Y-94804819D01* X55068095Y-94900057D02* X55115714Y-94852438D01* X55115714Y-94852438D02* X55210952Y-94804819D01* X55210952Y-94804819D02* X55449047Y-94804819D01* X55449047Y-94804819D02* X55544285Y-94852438D01* X55544285Y-94852438D02* X55591904Y-94900057D01* X55591904Y-94900057D02* X55639523Y-94995295D01* X55639523Y-94995295D02* X55639523Y-95090533D01* X55639523Y-95090533D02* X55591904Y-95233390D01* X55591904Y-95233390D02* X55020476Y-95804819D01* X55020476Y-95804819D02* X55639523Y-95804819D01* X60837686Y-52553305D02* X61187873Y-52203118D01* X61187873Y-52203118D02* X61214810Y-52607179D01* X61214810Y-52607179D02* X61295622Y-52526367D01* X61295622Y-52526367D02* X61376435Y-52499430D01* X61376435Y-52499430D02* X61430309Y-52499430D01* X61430309Y-52499430D02* X61511122Y-52526367D01* X61511122Y-52526367D02* X61645809Y-52661054D01* X61645809Y-52661054D02* X61672746Y-52741866D01* X61672746Y-52741866D02* X61672746Y-52795741D01* X61672746Y-52795741D02* X61645809Y-52876553D01* X61645809Y-52876553D02* X61484184Y-53038178D01* X61484184Y-53038178D02* X61403372Y-53065115D01* X61403372Y-53065115D02* X61349497Y-53065115D01* X61349497Y-52041494D02* X62103745Y-52418617D01* X62103745Y-52418617D02* X61726621Y-51664370D01* X61861308Y-51529683D02* X62211494Y-51179497D01* X62211494Y-51179497D02* X62238431Y-51583558D01* X62238431Y-51583558D02* X62319244Y-51502746D01* X62319244Y-51502746D02* X62400056Y-51475808D01* X62400056Y-51475808D02* X62453931Y-51475808D01* X62453931Y-51475808D02* X62534743Y-51502746D01* X62534743Y-51502746D02* X62669430Y-51637433D01* X62669430Y-51637433D02* X62696367Y-51718245D01* X62696367Y-51718245D02* X62696367Y-51772120D01* X62696367Y-51772120D02* X62669430Y-51852932D01* X62669430Y-51852932D02* X62507805Y-52014557D01* X62507805Y-52014557D02* X62426993Y-52041494D01* X62426993Y-52041494D02* X62373118Y-52041494D01* X63208178Y-51260309D02* X63181241Y-51341121D01* X63181241Y-51341121D02* X63073491Y-51448871D01* X63073491Y-51448871D02* X62992679Y-51475808D01* X62992679Y-51475808D02* X62911867Y-51448871D01* X62911867Y-51448871D02* X62696367Y-51233372D01* X62696367Y-51233372D02* X62669430Y-51152560D01* X62669430Y-51152560D02* X62696367Y-51071747D01* X62696367Y-51071747D02* X62804117Y-50963998D01* X62804117Y-50963998D02* X62884929Y-50937060D01* X62884929Y-50937060D02* X62965741Y-50963998D01* X62965741Y-50963998D02* X63019616Y-51017873D01* X63019616Y-51017873D02* X62804117Y-51341121D01* X34729521Y-83179117D02* X34648708Y-83206054D01* X34648708Y-83206054D02* X34567896Y-83286867D01* X34567896Y-83286867D02* X34514021Y-83394616D01* X34514021Y-83394616D02* X34514021Y-83502366D01* X34514021Y-83502366D02* X34540959Y-83583178D01* X34540959Y-83583178D02* X34621771Y-83717865D01* X34621771Y-83717865D02* X34702583Y-83798677D01* X34702583Y-83798677D02* X34837270Y-83879490D01* X34837270Y-83879490D02* X34918083Y-83906427D01* X34918083Y-83906427D02* X35025832Y-83906427D01* X35025832Y-83906427D02* X35133582Y-83852552D01* X35133582Y-83852552D02* X35187457Y-83798677D01* X35187457Y-83798677D02* X35241331Y-83690928D01* X35241331Y-83690928D02* X35241331Y-83637053D01* X35241331Y-83637053D02* X35052770Y-83448491D01* X35052770Y-83448491D02* X34945020Y-83556241D01* X35537643Y-83448491D02* X34971957Y-82882806D01* X34971957Y-82882806D02* X35187457Y-82667306D01* X35187457Y-82667306D02* X35268269Y-82640369D01* X35268269Y-82640369D02* X35322144Y-82640369D01* X35322144Y-82640369D02* X35402956Y-82667306D01* X35402956Y-82667306D02* X35483768Y-82748119D01* X35483768Y-82748119D02* X35510705Y-82828931D01* X35510705Y-82828931D02* X35510705Y-82882806D01* X35510705Y-82882806D02* X35483768Y-82963618D01* X35483768Y-82963618D02* X35268269Y-83179117D01* X36399640Y-82586494D02* X36076391Y-82909743D01* X36238015Y-82748119D02* X35672330Y-82182433D01* X35672330Y-82182433D02* X35699267Y-82317120D01* X35699267Y-82317120D02* X35699267Y-82424870D01* X35699267Y-82424870D02* X35672330Y-82505682D01* X36103328Y-81859184D02* X36103328Y-81805309D01* X36103328Y-81805309D02* X36130266Y-81724497D01* X36130266Y-81724497D02* X36264953Y-81589810D01* X36264953Y-81589810D02* X36345765Y-81562873D01* X36345765Y-81562873D02* X36399640Y-81562873D01* X36399640Y-81562873D02* X36480452Y-81589810D01* X36480452Y-81589810D02* X36534327Y-81643685D01* X36534327Y-81643685D02* X36588202Y-81751435D01* X36588202Y-81751435D02* X36588202Y-82397932D01* X36588202Y-82397932D02* X36938388Y-82047746D01* X35498895Y-67639743D02* X35418083Y-67666680D01* X35418083Y-67666680D02* X35337271Y-67747492D01* X35337271Y-67747492D02* X35283396Y-67855242D01* X35283396Y-67855242D02* X35283396Y-67962991D01* X35283396Y-67962991D02* X35310333Y-68043804D01* X35310333Y-68043804D02* X35391146Y-68178491D01* X35391146Y-68178491D02* X35471958Y-68259303D01* X35471958Y-68259303D02* X35606645Y-68340115D01* X35606645Y-68340115D02* X35687457Y-68367052D01* X35687457Y-68367052D02* X35795207Y-68367052D01* X35795207Y-68367052D02* X35902956Y-68313178D01* X35902956Y-68313178D02* X35956831Y-68259303D01* X35956831Y-68259303D02* X36010706Y-68151553D01* X36010706Y-68151553D02* X36010706Y-68097678D01* X36010706Y-68097678D02* X35822144Y-67909117D01* X35822144Y-67909117D02* X35714394Y-68016866D01* X36307017Y-67909117D02* X35741332Y-67343431D01* X35741332Y-67343431D02* X35956831Y-67127932D01* X35956831Y-67127932D02* X36037643Y-67100995D01* X36037643Y-67100995D02* X36091518Y-67100995D01* X36091518Y-67100995D02* X36172330Y-67127932D01* X36172330Y-67127932D02* X36253142Y-67208744D01* X36253142Y-67208744D02* X36280080Y-67289556D01* X36280080Y-67289556D02* X36280080Y-67343431D01* X36280080Y-67343431D02* X36253142Y-67424243D01* X36253142Y-67424243D02* X36037643Y-67639743D01* X36253142Y-66831621D02* X36630266Y-66454497D01* X36630266Y-66454497D02* X36953515Y-67262619D01* X35298895Y-52429743D02* X35218083Y-52456680D01* X35218083Y-52456680D02* X35137271Y-52537492D01* X35137271Y-52537492D02* X35083396Y-52645242D01* X35083396Y-52645242D02* X35083396Y-52752991D01* X35083396Y-52752991D02* X35110333Y-52833804D01* X35110333Y-52833804D02* X35191146Y-52968491D01* X35191146Y-52968491D02* X35271958Y-53049303D01* X35271958Y-53049303D02* X35406645Y-53130115D01* X35406645Y-53130115D02* X35487457Y-53157052D01* X35487457Y-53157052D02* X35595207Y-53157052D01* X35595207Y-53157052D02* X35702956Y-53103178D01* X35702956Y-53103178D02* X35756831Y-53049303D01* X35756831Y-53049303D02* X35810706Y-52941553D01* X35810706Y-52941553D02* X35810706Y-52887678D01* X35810706Y-52887678D02* X35622144Y-52699117D01* X35622144Y-52699117D02* X35514394Y-52806866D01* X36107017Y-52699117D02* X35541332Y-52133431D01* X35541332Y-52133431D02* X35756831Y-51917932D01* X35756831Y-51917932D02* X35837643Y-51890995D01* X35837643Y-51890995D02* X35891518Y-51890995D01* X35891518Y-51890995D02* X35972330Y-51917932D01* X35972330Y-51917932D02* X36053142Y-51998744D01* X36053142Y-51998744D02* X36080080Y-52079556D01* X36080080Y-52079556D02* X36080080Y-52133431D01* X36080080Y-52133431D02* X36053142Y-52214243D01* X36053142Y-52214243D02* X35837643Y-52429743D01* X36133955Y-51648558D02* X36133955Y-51594683D01* X36133955Y-51594683D02* X36160892Y-51513871D01* X36160892Y-51513871D02* X36295579Y-51379184D01* X36295579Y-51379184D02* X36376391Y-51352247D01* X36376391Y-51352247D02* X36430266Y-51352247D01* X36430266Y-51352247D02* X36511078Y-51379184D01* X36511078Y-51379184D02* X36564953Y-51433059D01* X36564953Y-51433059D02* X36618828Y-51540808D01* X36618828Y-51540808D02* X36618828Y-52187306D01* X36618828Y-52187306D02* X36969014Y-51837120D01* X35395206Y-91310928D02* X34829521Y-90745242D01* X34829521Y-90745242D02* X34964208Y-90610555D01* X34964208Y-90610555D02* X35071957Y-90556680D01* X35071957Y-90556680D02* X35179707Y-90556680D01* X35179707Y-90556680D02* X35260519Y-90583618D01* X35260519Y-90583618D02* X35395206Y-90664430D01* X35395206Y-90664430D02* X35476018Y-90745242D01* X35476018Y-90745242D02* X35556831Y-90879929D01* X35556831Y-90879929D02* X35583768Y-90960741D01* X35583768Y-90960741D02* X35583768Y-91068491D01* X35583768Y-91068491D02* X35529893Y-91176241D01* X35529893Y-91176241D02* X35395206Y-91310928D01* X35960892Y-90745242D02* X35395206Y-90179557D01* X35395206Y-90179557D02* X35610705Y-89964058D01* X35610705Y-89964058D02* X35691518Y-89937120D01* X35691518Y-89937120D02* X35745392Y-89937120D01* X35745392Y-89937120D02* X35826205Y-89964058D01* X35826205Y-89964058D02* X35907017Y-90044870D01* X35907017Y-90044870D02* X35933954Y-90125682D01* X35933954Y-90125682D02* X35933954Y-90179557D01* X35933954Y-90179557D02* X35907017Y-90260369D01* X35907017Y-90260369D02* X35691518Y-90475868D01* X36041704Y-89533059D02* X36176391Y-89667746D01* X35987829Y-89748558D02* X36176391Y-89667746D01* X36176391Y-89667746D02* X36257203Y-89479184D01* X36203328Y-89856308D02* X36176391Y-89667746D01* X36176391Y-89667746D02* X36364953Y-89694684D01* X61724174Y-70761959D02* X61266239Y-70681147D01* X61400926Y-71085208D02* X60835240Y-70519523D01* X60835240Y-70519523D02* X61050739Y-70304024D01* X61050739Y-70304024D02* X61131552Y-70277086D01* X61131552Y-70277086D02* X61185426Y-70277086D01* X61185426Y-70277086D02* X61266239Y-70304024D01* X61266239Y-70304024D02* X61347051Y-70384836D01* X61347051Y-70384836D02* X61373988Y-70465648D01* X61373988Y-70465648D02* X61373988Y-70519523D01* X61373988Y-70519523D02* X61347051Y-70600335D01* X61347051Y-70600335D02* X61131552Y-70815834D01* X61400926Y-69953837D02* X61858861Y-70411773D01* X61858861Y-70411773D02* X61939674Y-70438711D01* X61939674Y-70438711D02* X61993548Y-70438711D01* X61993548Y-70438711D02* X62074361Y-70411773D01* X62074361Y-70411773D02* X62182110Y-70304024D01* X62182110Y-70304024D02* X62209048Y-70223211D01* X62209048Y-70223211D02* X62209048Y-70169337D01* X62209048Y-70169337D02* X62182110Y-70088524D01* X62182110Y-70088524D02* X61724174Y-69630589D01* X62559234Y-69926900D02* X61993548Y-69361215D01* X61993548Y-69361215D02* X62882482Y-69603651D01* X62882482Y-69603651D02* X62316797Y-69037966D01* X60983521Y-78109117D02* X60902708Y-78136054D01* X60902708Y-78136054D02* X60821896Y-78216867D01* X60821896Y-78216867D02* X60768021Y-78324616D01* X60768021Y-78324616D02* X60768021Y-78432366D01* X60768021Y-78432366D02* X60794959Y-78513178D01* X60794959Y-78513178D02* X60875771Y-78647865D01* X60875771Y-78647865D02* X60956583Y-78728677D01* X60956583Y-78728677D02* X61091270Y-78809490D01* X61091270Y-78809490D02* X61172083Y-78836427D01* X61172083Y-78836427D02* X61279832Y-78836427D01* X61279832Y-78836427D02* X61387582Y-78782552D01* X61387582Y-78782552D02* X61441457Y-78728677D01* X61441457Y-78728677D02* X61495331Y-78620928D01* X61495331Y-78620928D02* X61495331Y-78567053D01* X61495331Y-78567053D02* X61306770Y-78378491D01* X61306770Y-78378491D02* X61199020Y-78486241D01* X61791643Y-78378491D02* X61225957Y-77812806D01* X61225957Y-77812806D02* X61441457Y-77597306D01* X61441457Y-77597306D02* X61522269Y-77570369D01* X61522269Y-77570369D02* X61576144Y-77570369D01* X61576144Y-77570369D02* X61656956Y-77597306D01* X61656956Y-77597306D02* X61737768Y-77678119D01* X61737768Y-77678119D02* X61764705Y-77758931D01* X61764705Y-77758931D02* X61764705Y-77812806D01* X61764705Y-77812806D02* X61737768Y-77893618D01* X61737768Y-77893618D02* X61522269Y-78109117D01* X61818580Y-77327932D02* X61818580Y-77274058D01* X61818580Y-77274058D02* X61845518Y-77193245D01* X61845518Y-77193245D02* X61980205Y-77058558D01* X61980205Y-77058558D02* X62061017Y-77031621D01* X62061017Y-77031621D02* X62114892Y-77031621D01* X62114892Y-77031621D02* X62195704Y-77058558D01* X62195704Y-77058558D02* X62249579Y-77112433D01* X62249579Y-77112433D02* X62303453Y-77220183D01* X62303453Y-77220183D02* X62303453Y-77866680D01* X62303453Y-77866680D02* X62653640Y-77516494D01* X63192388Y-76977746D02* X62869139Y-77300995D01* X63030763Y-77139370D02* X62465078Y-76573685D01* X62465078Y-76573685D02* X62492015Y-76708372D01* X62492015Y-76708372D02* X62492015Y-76816122D01* X62492015Y-76816122D02* X62465078Y-76896934D01* X35398895Y-72749743D02* X35318083Y-72776680D01* X35318083Y-72776680D02* X35237271Y-72857492D01* X35237271Y-72857492D02* X35183396Y-72965242D01* X35183396Y-72965242D02* X35183396Y-73072991D01* X35183396Y-73072991D02* X35210333Y-73153804D01* X35210333Y-73153804D02* X35291146Y-73288491D01* X35291146Y-73288491D02* X35371958Y-73369303D01* X35371958Y-73369303D02* X35506645Y-73450115D01* X35506645Y-73450115D02* X35587457Y-73477052D01* X35587457Y-73477052D02* X35695207Y-73477052D01* X35695207Y-73477052D02* X35802956Y-73423178D01* X35802956Y-73423178D02* X35856831Y-73369303D01* X35856831Y-73369303D02* X35910706Y-73261553D01* X35910706Y-73261553D02* X35910706Y-73207678D01* X35910706Y-73207678D02* X35722144Y-73019117D01* X35722144Y-73019117D02* X35614394Y-73126866D01* X36207017Y-73019117D02* X35641332Y-72453431D01* X35641332Y-72453431D02* X35856831Y-72237932D01* X35856831Y-72237932D02* X35937643Y-72210995D01* X35937643Y-72210995D02* X35991518Y-72210995D01* X35991518Y-72210995D02* X36072330Y-72237932D01* X36072330Y-72237932D02* X36153142Y-72318744D01* X36153142Y-72318744D02* X36180080Y-72399556D01* X36180080Y-72399556D02* X36180080Y-72453431D01* X36180080Y-72453431D02* X36153142Y-72534243D01* X36153142Y-72534243D02* X35937643Y-72749743D01* X36799640Y-72426494D02* X36907390Y-72318744D01* X36907390Y-72318744D02* X36934327Y-72237932D01* X36934327Y-72237932D02* X36934327Y-72184057D01* X36934327Y-72184057D02* X36907390Y-72049370D01* X36907390Y-72049370D02* X36826577Y-71914683D01* X36826577Y-71914683D02* X36611078Y-71699184D01* X36611078Y-71699184D02* X36530266Y-71672247D01* X36530266Y-71672247D02* X36476391Y-71672247D01* X36476391Y-71672247D02* X36395579Y-71699184D01* X36395579Y-71699184D02* X36287829Y-71806934D01* X36287829Y-71806934D02* X36260892Y-71887746D01* X36260892Y-71887746D02* X36260892Y-71941621D01* X36260892Y-71941621D02* X36287829Y-72022433D01* X36287829Y-72022433D02* X36422516Y-72157120D01* X36422516Y-72157120D02* X36503329Y-72184057D01* X36503329Y-72184057D02* X36557203Y-72184057D01* X36557203Y-72184057D02* X36638016Y-72157120D01* X36638016Y-72157120D02* X36745765Y-72049370D01* X36745765Y-72049370D02* X36772703Y-71968558D01* X36772703Y-71968558D02* X36772703Y-71914683D01* X36772703Y-71914683D02* X36745765Y-71833871D01* X35036435Y-62868431D02* X34955623Y-62895368D01* X34955623Y-62895368D02* X34874811Y-62976180D01* X34874811Y-62976180D02* X34820936Y-63083930D01* X34820936Y-63083930D02* X34820936Y-63191680D01* X34820936Y-63191680D02* X34847873Y-63272492D01* X34847873Y-63272492D02* X34928685Y-63407179D01* X34928685Y-63407179D02* X35009498Y-63487991D01* X35009498Y-63487991D02* X35144185Y-63568803D01* X35144185Y-63568803D02* X35224997Y-63595741D01* X35224997Y-63595741D02* X35332746Y-63595741D01* X35332746Y-63595741D02* X35440496Y-63541866D01* X35440496Y-63541866D02* X35494371Y-63487991D01* X35494371Y-63487991D02* X35548246Y-63380241D01* X35548246Y-63380241D02* X35548246Y-63326367D01* X35548246Y-63326367D02* X35359684Y-63137805D01* X35359684Y-63137805D02* X35251934Y-63245554D01* X35844557Y-63137805D02* X35278872Y-62572119D01* X35278872Y-62572119D02* X36167806Y-62814556D01* X36167806Y-62814556D02* X35602120Y-62248871D01* X36437180Y-62545182D02* X35871494Y-61979497D01* X35871494Y-61979497D02* X36006181Y-61844810D01* X36006181Y-61844810D02* X36113931Y-61790935D01* X36113931Y-61790935D02* X36221680Y-61790935D01* X36221680Y-61790935D02* X36302493Y-61817872D01* X36302493Y-61817872D02* X36437180Y-61898685D01* X36437180Y-61898685D02* X36517992Y-61979497D01* X36517992Y-61979497D02* X36598804Y-62114184D01* X36598804Y-62114184D02* X36625741Y-62194996D01* X36625741Y-62194996D02* X36625741Y-62302746D01* X36625741Y-62302746D02* X36571867Y-62410495D01* X36571867Y-62410495D02* X36437180Y-62545182D01* X36517992Y-61332999D02* X36652679Y-61467686D01* X36464117Y-61548498D02* X36652679Y-61467686D01* X36652679Y-61467686D02* X36733491Y-61279124D01* X36679616Y-61656248D02* X36652679Y-61467686D01* X36652679Y-61467686D02* X36841241Y-61494624D01* X35398895Y-60049743D02* X35318083Y-60076680D01* X35318083Y-60076680D02* X35237271Y-60157492D01* X35237271Y-60157492D02* X35183396Y-60265242D01* X35183396Y-60265242D02* X35183396Y-60372991D01* X35183396Y-60372991D02* X35210333Y-60453804D01* X35210333Y-60453804D02* X35291146Y-60588491D01* X35291146Y-60588491D02* X35371958Y-60669303D01* X35371958Y-60669303D02* X35506645Y-60750115D01* X35506645Y-60750115D02* X35587457Y-60777052D01* X35587457Y-60777052D02* X35695207Y-60777052D01* X35695207Y-60777052D02* X35802956Y-60723178D01* X35802956Y-60723178D02* X35856831Y-60669303D01* X35856831Y-60669303D02* X35910706Y-60561553D01* X35910706Y-60561553D02* X35910706Y-60507678D01* X35910706Y-60507678D02* X35722144Y-60319117D01* X35722144Y-60319117D02* X35614394Y-60426866D01* X36207017Y-60319117D02* X35641332Y-59753431D01* X35641332Y-59753431D02* X35856831Y-59537932D01* X35856831Y-59537932D02* X35937643Y-59510995D01* X35937643Y-59510995D02* X35991518Y-59510995D01* X35991518Y-59510995D02* X36072330Y-59537932D01* X36072330Y-59537932D02* X36153142Y-59618744D01* X36153142Y-59618744D02* X36180080Y-59699556D01* X36180080Y-59699556D02* X36180080Y-59753431D01* X36180080Y-59753431D02* X36153142Y-59834243D01* X36153142Y-59834243D02* X35937643Y-60049743D01* X36476391Y-58918372D02* X36207017Y-59187746D01* X36207017Y-59187746D02* X36449454Y-59484057D01* X36449454Y-59484057D02* X36449454Y-59430182D01* X36449454Y-59430182D02* X36476391Y-59349370D01* X36476391Y-59349370D02* X36611078Y-59214683D01* X36611078Y-59214683D02* X36691890Y-59187746D01* X36691890Y-59187746D02* X36745765Y-59187746D01* X36745765Y-59187746D02* X36826577Y-59214683D01* X36826577Y-59214683D02* X36961264Y-59349370D01* X36961264Y-59349370D02* X36988202Y-59430182D01* X36988202Y-59430182D02* X36988202Y-59484057D01* X36988202Y-59484057D02* X36961264Y-59564869D01* X36961264Y-59564869D02* X36826577Y-59699556D01* X36826577Y-59699556D02* X36745765Y-59726494D01* X36745765Y-59726494D02* X36691890Y-59726494D01* X35398895Y-44809743D02* X35318083Y-44836680D01* X35318083Y-44836680D02* X35237271Y-44917492D01* X35237271Y-44917492D02* X35183396Y-45025242D01* X35183396Y-45025242D02* X35183396Y-45132991D01* X35183396Y-45132991D02* X35210333Y-45213804D01* X35210333Y-45213804D02* X35291146Y-45348491D01* X35291146Y-45348491D02* X35371958Y-45429303D01* X35371958Y-45429303D02* X35506645Y-45510115D01* X35506645Y-45510115D02* X35587457Y-45537052D01* X35587457Y-45537052D02* X35695207Y-45537052D01* X35695207Y-45537052D02* X35802956Y-45483178D01* X35802956Y-45483178D02* X35856831Y-45429303D01* X35856831Y-45429303D02* X35910706Y-45321553D01* X35910706Y-45321553D02* X35910706Y-45267678D01* X35910706Y-45267678D02* X35722144Y-45079117D01* X35722144Y-45079117D02* X35614394Y-45186866D01* X36207017Y-45079117D02* X35641332Y-44513431D01* X35641332Y-44513431D02* X35856831Y-44297932D01* X35856831Y-44297932D02* X35937643Y-44270995D01* X35937643Y-44270995D02* X35991518Y-44270995D01* X35991518Y-44270995D02* X36072330Y-44297932D01* X36072330Y-44297932D02* X36153142Y-44378744D01* X36153142Y-44378744D02* X36180080Y-44459556D01* X36180080Y-44459556D02* X36180080Y-44513431D01* X36180080Y-44513431D02* X36153142Y-44594243D01* X36153142Y-44594243D02* X35937643Y-44809743D01* X36314767Y-43839996D02* X36368642Y-43786121D01* X36368642Y-43786121D02* X36449454Y-43759184D01* X36449454Y-43759184D02* X36503329Y-43759184D01* X36503329Y-43759184D02* X36584141Y-43786121D01* X36584141Y-43786121D02* X36718828Y-43866934D01* X36718828Y-43866934D02* X36853515Y-44001621D01* X36853515Y-44001621D02* X36934327Y-44136308D01* X36934327Y-44136308D02* X36961264Y-44217120D01* X36961264Y-44217120D02* X36961264Y-44270995D01* X36961264Y-44270995D02* X36934327Y-44351807D01* X36934327Y-44351807D02* X36880452Y-44405682D01* X36880452Y-44405682D02* X36799640Y-44432619D01* X36799640Y-44432619D02* X36745765Y-44432619D01* X36745765Y-44432619D02* X36664953Y-44405682D01* X36664953Y-44405682D02* X36530266Y-44324869D01* X36530266Y-44324869D02* X36395579Y-44190182D01* X36395579Y-44190182D02* X36314767Y-44055495D01* X36314767Y-44055495D02* X36287829Y-43974683D01* X36287829Y-43974683D02* X36287829Y-43920808D01* X36287829Y-43920808D02* X36314767Y-43839996D01* X35298895Y-47339743D02* X35218083Y-47366680D01* X35218083Y-47366680D02* X35137271Y-47447492D01* X35137271Y-47447492D02* X35083396Y-47555242D01* X35083396Y-47555242D02* X35083396Y-47662991D01* X35083396Y-47662991D02* X35110333Y-47743804D01* X35110333Y-47743804D02* X35191146Y-47878491D01* X35191146Y-47878491D02* X35271958Y-47959303D01* X35271958Y-47959303D02* X35406645Y-48040115D01* X35406645Y-48040115D02* X35487457Y-48067052D01* X35487457Y-48067052D02* X35595207Y-48067052D01* X35595207Y-48067052D02* X35702956Y-48013178D01* X35702956Y-48013178D02* X35756831Y-47959303D01* X35756831Y-47959303D02* X35810706Y-47851553D01* X35810706Y-47851553D02* X35810706Y-47797678D01* X35810706Y-47797678D02* X35622144Y-47609117D01* X35622144Y-47609117D02* X35514394Y-47716866D01* X36107017Y-47609117D02* X35541332Y-47043431D01* X35541332Y-47043431D02* X35756831Y-46827932D01* X35756831Y-46827932D02* X35837643Y-46800995D01* X35837643Y-46800995D02* X35891518Y-46800995D01* X35891518Y-46800995D02* X35972330Y-46827932D01* X35972330Y-46827932D02* X36053142Y-46908744D01* X36053142Y-46908744D02* X36080080Y-46989556D01* X36080080Y-46989556D02* X36080080Y-47043431D01* X36080080Y-47043431D02* X36053142Y-47124243D01* X36053142Y-47124243D02* X35837643Y-47339743D01* X36969014Y-46747120D02* X36645765Y-47070369D01* X36807390Y-46908744D02* X36241704Y-46343059D01* X36241704Y-46343059D02* X36268642Y-46477746D01* X36268642Y-46477746D02* X36268642Y-46585495D01* X36268642Y-46585495D02* X36241704Y-46666308D01* X60806272Y-47888491D02* X61560519Y-48265615D01* X61560519Y-48265615D02* X61183396Y-47511367D01* X61883768Y-47888491D02* X61991518Y-47834616D01* X61991518Y-47834616D02* X62126205Y-47699929D01* X62126205Y-47699929D02* X62153142Y-47619117D01* X62153142Y-47619117D02* X62153142Y-47565242D01* X62153142Y-47565242D02* X62126205Y-47484430D01* X62126205Y-47484430D02* X62072330Y-47430555D01* X62072330Y-47430555D02* X61991518Y-47403618D01* X61991518Y-47403618D02* X61937643Y-47403618D01* X61937643Y-47403618D02* X61856831Y-47430555D01* X61856831Y-47430555D02* X61722144Y-47511367D01* X61722144Y-47511367D02* X61641331Y-47538305D01* X61641331Y-47538305D02* X61587457Y-47538305D01* X61587457Y-47538305D02* X61506644Y-47511367D01* X61506644Y-47511367D02* X61452770Y-47457493D01* X61452770Y-47457493D02* X61425832Y-47376680D01* X61425832Y-47376680D02* X61425832Y-47322806D01* X61425832Y-47322806D02* X61452770Y-47241993D01* X61452770Y-47241993D02* X61587457Y-47107306D01* X61587457Y-47107306D02* X61695206Y-47053432D01* X62314767Y-46972619D02* X62584141Y-47241993D01* X61829893Y-46864870D02* X62314767Y-46972619D01* X62314767Y-46972619D02* X62207017Y-46487746D01* X62907389Y-46864870D02* X63015139Y-46810995D01* X63015139Y-46810995D02* X63149826Y-46676308D01* X63149826Y-46676308D02* X63176763Y-46595496D01* X63176763Y-46595496D02* X63176763Y-46541621D01* X63176763Y-46541621D02* X63149826Y-46460809D01* X63149826Y-46460809D02* X63095951Y-46406934D01* X63095951Y-46406934D02* X63015139Y-46379997D01* X63015139Y-46379997D02* X62961264Y-46379997D01* X62961264Y-46379997D02* X62880452Y-46406934D01* X62880452Y-46406934D02* X62745765Y-46487746D01* X62745765Y-46487746D02* X62664953Y-46514684D01* X62664953Y-46514684D02* X62611078Y-46514684D01* X62611078Y-46514684D02* X62530266Y-46487746D01* X62530266Y-46487746D02* X62476391Y-46433871D01* X62476391Y-46433871D02* X62449453Y-46353059D01* X62449453Y-46353059D02* X62449453Y-46299184D01* X62449453Y-46299184D02* X62476391Y-46218372D01* X62476391Y-46218372D02* X62611078Y-46083685D01* X62611078Y-46083685D02* X62718827Y-46029810D01* X61885924Y-90974210D02* X61427988Y-90893398D01* X61562675Y-91297459D02* X60996990Y-90731773D01* X60996990Y-90731773D02* X61212489Y-90516274D01* X61212489Y-90516274D02* X61293301Y-90489337D01* X61293301Y-90489337D02* X61347176Y-90489337D01* X61347176Y-90489337D02* X61427988Y-90516274D01* X61427988Y-90516274D02* X61508800Y-90597086D01* X61508800Y-90597086D02* X61535738Y-90677898D01* X61535738Y-90677898D02* X61535738Y-90731773D01* X61535738Y-90731773D02* X61508800Y-90812585D01* X61508800Y-90812585D02* X61293301Y-91028085D01* X61508800Y-90219963D02* X62451609Y-90408524D01* X61885924Y-89842839D02* X62074486Y-90785648D01* X62182236Y-89546527D02* X62316923Y-89681214D01* X62128361Y-89762027D02* X62316923Y-89681214D01* X62316923Y-89681214D02* X62397735Y-89492653D01* X62343860Y-89869776D02* X62316923Y-89681214D01* X62316923Y-89681214D02* X62505484Y-89708152D01* X60983521Y-85719117D02* X60902708Y-85746054D01* X60902708Y-85746054D02* X60821896Y-85826867D01* X60821896Y-85826867D02* X60768021Y-85934616D01* X60768021Y-85934616D02* X60768021Y-86042366D01* X60768021Y-86042366D02* X60794959Y-86123178D01* X60794959Y-86123178D02* X60875771Y-86257865D01* X60875771Y-86257865D02* X60956583Y-86338677D01* X60956583Y-86338677D02* X61091270Y-86419490D01* X61091270Y-86419490D02* X61172083Y-86446427D01* X61172083Y-86446427D02* X61279832Y-86446427D01* X61279832Y-86446427D02* X61387582Y-86392552D01* X61387582Y-86392552D02* X61441457Y-86338677D01* X61441457Y-86338677D02* X61495331Y-86230928D01* X61495331Y-86230928D02* X61495331Y-86177053D01* X61495331Y-86177053D02* X61306770Y-85988491D01* X61306770Y-85988491D02* X61199020Y-86096241D01* X61791643Y-85988491D02* X61225957Y-85422806D01* X61225957Y-85422806D02* X61441457Y-85207306D01* X61441457Y-85207306D02* X61522269Y-85180369D01* X61522269Y-85180369D02* X61576144Y-85180369D01* X61576144Y-85180369D02* X61656956Y-85207306D01* X61656956Y-85207306D02* X61737768Y-85288119D01* X61737768Y-85288119D02* X61764705Y-85368931D01* X61764705Y-85368931D02* X61764705Y-85422806D01* X61764705Y-85422806D02* X61737768Y-85503618D01* X61737768Y-85503618D02* X61522269Y-85719117D01* X62653640Y-85126494D02* X62330391Y-85449743D01* X62492015Y-85288119D02* X61926330Y-84722433D01* X61926330Y-84722433D02* X61953267Y-84857120D01* X61953267Y-84857120D02* X61953267Y-84964870D01* X61953267Y-84964870D02* X61926330Y-85045682D01* X62653640Y-84479996D02* X62572828Y-84506934D01* X62572828Y-84506934D02* X62518953Y-84506934D01* X62518953Y-84506934D02* X62438141Y-84479996D01* X62438141Y-84479996D02* X62411203Y-84453059D01* X62411203Y-84453059D02* X62384266Y-84372247D01* X62384266Y-84372247D02* X62384266Y-84318372D01* X62384266Y-84318372D02* X62411203Y-84237560D01* X62411203Y-84237560D02* X62518953Y-84129810D01* X62518953Y-84129810D02* X62599765Y-84102873D01* X62599765Y-84102873D02* X62653640Y-84102873D01* X62653640Y-84102873D02* X62734452Y-84129810D01* X62734452Y-84129810D02* X62761389Y-84156748D01* X62761389Y-84156748D02* X62788327Y-84237560D01* X62788327Y-84237560D02* X62788327Y-84291435D01* X62788327Y-84291435D02* X62761389Y-84372247D01* X62761389Y-84372247D02* X62653640Y-84479996D01* X62653640Y-84479996D02* X62626702Y-84560809D01* X62626702Y-84560809D02* X62626702Y-84614683D01* X62626702Y-84614683D02* X62653640Y-84695496D01* X62653640Y-84695496D02* X62761389Y-84803245D01* X62761389Y-84803245D02* X62842202Y-84830183D01* X62842202Y-84830183D02* X62896076Y-84830183D01* X62896076Y-84830183D02* X62976889Y-84803245D01* X62976889Y-84803245D02* X63084638Y-84695496D01* X63084638Y-84695496D02* X63111576Y-84614683D01* X63111576Y-84614683D02* X63111576Y-84560809D01* X63111576Y-84560809D02* X63084638Y-84479996D01* X63084638Y-84479996D02* X62976889Y-84372247D01* X62976889Y-84372247D02* X62896076Y-84345309D01* X62896076Y-84345309D02* X62842202Y-84345309D01* X62842202Y-84345309D02* X62761389Y-84372247D01* X60983521Y-83179117D02* X60902708Y-83206054D01* X60902708Y-83206054D02* X60821896Y-83286867D01* X60821896Y-83286867D02* X60768021Y-83394616D01* X60768021Y-83394616D02* X60768021Y-83502366D01* X60768021Y-83502366D02* X60794959Y-83583178D01* X60794959Y-83583178D02* X60875771Y-83717865D01* X60875771Y-83717865D02* X60956583Y-83798677D01* X60956583Y-83798677D02* X61091270Y-83879490D01* X61091270Y-83879490D02* X61172083Y-83906427D01* X61172083Y-83906427D02* X61279832Y-83906427D01* X61279832Y-83906427D02* X61387582Y-83852552D01* X61387582Y-83852552D02* X61441457Y-83798677D01* X61441457Y-83798677D02* X61495331Y-83690928D01* X61495331Y-83690928D02* X61495331Y-83637053D01* X61495331Y-83637053D02* X61306770Y-83448491D01* X61306770Y-83448491D02* X61199020Y-83556241D01* X61791643Y-83448491D02* X61225957Y-82882806D01* X61225957Y-82882806D02* X61441457Y-82667306D01* X61441457Y-82667306D02* X61522269Y-82640369D01* X61522269Y-82640369D02* X61576144Y-82640369D01* X61576144Y-82640369D02* X61656956Y-82667306D01* X61656956Y-82667306D02* X61737768Y-82748119D01* X61737768Y-82748119D02* X61764705Y-82828931D01* X61764705Y-82828931D02* X61764705Y-82882806D01* X61764705Y-82882806D02* X61737768Y-82963618D01* X61737768Y-82963618D02* X61522269Y-83179117D01* X62653640Y-82586494D02* X62330391Y-82909743D01* X62492015Y-82748119D02* X61926330Y-82182433D01* X61926330Y-82182433D02* X61953267Y-82317120D01* X61953267Y-82317120D02* X61953267Y-82424870D01* X61953267Y-82424870D02* X61926330Y-82505682D01* X62923014Y-82317120D02* X63030763Y-82209370D01* X63030763Y-82209370D02* X63057701Y-82128558D01* X63057701Y-82128558D02* X63057701Y-82074683D01* X63057701Y-82074683D02* X63030763Y-81939996D01* X63030763Y-81939996D02* X62949951Y-81805309D01* X62949951Y-81805309D02* X62734452Y-81589810D01* X62734452Y-81589810D02* X62653640Y-81562873D01* X62653640Y-81562873D02* X62599765Y-81562873D01* X62599765Y-81562873D02* X62518953Y-81589810D01* X62518953Y-81589810D02* X62411203Y-81697560D01* X62411203Y-81697560D02* X62384266Y-81778372D01* X62384266Y-81778372D02* X62384266Y-81832247D01* X62384266Y-81832247D02* X62411203Y-81913059D01* X62411203Y-81913059D02* X62545890Y-82047746D01* X62545890Y-82047746D02* X62626702Y-82074683D01* X62626702Y-82074683D02* X62680577Y-82074683D01* X62680577Y-82074683D02* X62761389Y-82047746D01* X62761389Y-82047746D02* X62869139Y-81939996D01* X62869139Y-81939996D02* X62896076Y-81859184D01* X62896076Y-81859184D02* X62896076Y-81805309D01* X62896076Y-81805309D02* X62869139Y-81724497D01* X34729521Y-80639117D02* X34648708Y-80666054D01* X34648708Y-80666054D02* X34567896Y-80746867D01* X34567896Y-80746867D02* X34514021Y-80854616D01* X34514021Y-80854616D02* X34514021Y-80962366D01* X34514021Y-80962366D02* X34540959Y-81043178D01* X34540959Y-81043178D02* X34621771Y-81177865D01* X34621771Y-81177865D02* X34702583Y-81258677D01* X34702583Y-81258677D02* X34837270Y-81339490D01* X34837270Y-81339490D02* X34918083Y-81366427D01* X34918083Y-81366427D02* X35025832Y-81366427D01* X35025832Y-81366427D02* X35133582Y-81312552D01* X35133582Y-81312552D02* X35187457Y-81258677D01* X35187457Y-81258677D02* X35241331Y-81150928D01* X35241331Y-81150928D02* X35241331Y-81097053D01* X35241331Y-81097053D02* X35052770Y-80908491D01* X35052770Y-80908491D02* X34945020Y-81016241D01* X35537643Y-80908491D02* X34971957Y-80342806D01* X34971957Y-80342806D02* X35187457Y-80127306D01* X35187457Y-80127306D02* X35268269Y-80100369D01* X35268269Y-80100369D02* X35322144Y-80100369D01* X35322144Y-80100369D02* X35402956Y-80127306D01* X35402956Y-80127306D02* X35483768Y-80208119D01* X35483768Y-80208119D02* X35510705Y-80288931D01* X35510705Y-80288931D02* X35510705Y-80342806D01* X35510705Y-80342806D02* X35483768Y-80423618D01* X35483768Y-80423618D02* X35268269Y-80639117D01* X36399640Y-80046494D02* X36076391Y-80369743D01* X36238015Y-80208119D02* X35672330Y-79642433D01* X35672330Y-79642433D02* X35699267Y-79777120D01* X35699267Y-79777120D02* X35699267Y-79884870D01* X35699267Y-79884870D02* X35672330Y-79965682D01* X36938388Y-79507746D02* X36615139Y-79830995D01* X36776763Y-79669370D02* X36211078Y-79103685D01* X36211078Y-79103685D02* X36238015Y-79238372D01* X36238015Y-79238372D02* X36238015Y-79346122D01* X36238015Y-79346122D02* X36211078Y-79426934D01* X35398895Y-70209743D02* X35318083Y-70236680D01* X35318083Y-70236680D02* X35237271Y-70317492D01* X35237271Y-70317492D02* X35183396Y-70425242D01* X35183396Y-70425242D02* X35183396Y-70532991D01* X35183396Y-70532991D02* X35210333Y-70613804D01* X35210333Y-70613804D02* X35291146Y-70748491D01* X35291146Y-70748491D02* X35371958Y-70829303D01* X35371958Y-70829303D02* X35506645Y-70910115D01* X35506645Y-70910115D02* X35587457Y-70937052D01* X35587457Y-70937052D02* X35695207Y-70937052D01* X35695207Y-70937052D02* X35802956Y-70883178D01* X35802956Y-70883178D02* X35856831Y-70829303D01* X35856831Y-70829303D02* X35910706Y-70721553D01* X35910706Y-70721553D02* X35910706Y-70667678D01* X35910706Y-70667678D02* X35722144Y-70479117D01* X35722144Y-70479117D02* X35614394Y-70586866D01* X36207017Y-70479117D02* X35641332Y-69913431D01* X35641332Y-69913431D02* X35856831Y-69697932D01* X35856831Y-69697932D02* X35937643Y-69670995D01* X35937643Y-69670995D02* X35991518Y-69670995D01* X35991518Y-69670995D02* X36072330Y-69697932D01* X36072330Y-69697932D02* X36153142Y-69778744D01* X36153142Y-69778744D02* X36180080Y-69859556D01* X36180080Y-69859556D02* X36180080Y-69913431D01* X36180080Y-69913431D02* X36153142Y-69994243D01* X36153142Y-69994243D02* X35937643Y-70209743D01* X36530266Y-69509370D02* X36449454Y-69536308D01* X36449454Y-69536308D02* X36395579Y-69536308D01* X36395579Y-69536308D02* X36314767Y-69509370D01* X36314767Y-69509370D02* X36287829Y-69482433D01* X36287829Y-69482433D02* X36260892Y-69401621D01* X36260892Y-69401621D02* X36260892Y-69347746D01* X36260892Y-69347746D02* X36287829Y-69266934D01* X36287829Y-69266934D02* X36395579Y-69159184D01* X36395579Y-69159184D02* X36476391Y-69132247D01* X36476391Y-69132247D02* X36530266Y-69132247D01* X36530266Y-69132247D02* X36611078Y-69159184D01* X36611078Y-69159184D02* X36638016Y-69186121D01* X36638016Y-69186121D02* X36664953Y-69266934D01* X36664953Y-69266934D02* X36664953Y-69320808D01* X36664953Y-69320808D02* X36638016Y-69401621D01* X36638016Y-69401621D02* X36530266Y-69509370D01* X36530266Y-69509370D02* X36503329Y-69590182D01* X36503329Y-69590182D02* X36503329Y-69644057D01* X36503329Y-69644057D02* X36530266Y-69724869D01* X36530266Y-69724869D02* X36638016Y-69832619D01* X36638016Y-69832619D02* X36718828Y-69859556D01* X36718828Y-69859556D02* X36772703Y-69859556D01* X36772703Y-69859556D02* X36853515Y-69832619D01* X36853515Y-69832619D02* X36961264Y-69724869D01* X36961264Y-69724869D02* X36988202Y-69644057D01* X36988202Y-69644057D02* X36988202Y-69590182D01* X36988202Y-69590182D02* X36961264Y-69509370D01* X36961264Y-69509370D02* X36853515Y-69401621D01* X36853515Y-69401621D02* X36772703Y-69374683D01* X36772703Y-69374683D02* X36718828Y-69374683D01* X36718828Y-69374683D02* X36638016Y-69401621D01* X60983521Y-93285242D02* X61306770Y-92961993D01* X61710831Y-93689303D02* X61145145Y-93123618D01* X61441457Y-92827306D02* X62384266Y-93015868D01* X61818581Y-92450182D02* X62007142Y-93392991D01* X62114892Y-92153871D02* X62249579Y-92288558D01* X62061017Y-92369370D02* X62249579Y-92288558D01* X62249579Y-92288558D02* X62330391Y-92099996D01* X62276517Y-92477120D02* X62249579Y-92288558D01* X62249579Y-92288558D02* X62438141Y-92315495D01* X60983521Y-80639117D02* X60902708Y-80666054D01* X60902708Y-80666054D02* X60821896Y-80746867D01* X60821896Y-80746867D02* X60768021Y-80854616D01* X60768021Y-80854616D02* X60768021Y-80962366D01* X60768021Y-80962366D02* X60794959Y-81043178D01* X60794959Y-81043178D02* X60875771Y-81177865D01* X60875771Y-81177865D02* X60956583Y-81258677D01* X60956583Y-81258677D02* X61091270Y-81339490D01* X61091270Y-81339490D02* X61172083Y-81366427D01* X61172083Y-81366427D02* X61279832Y-81366427D01* X61279832Y-81366427D02* X61387582Y-81312552D01* X61387582Y-81312552D02* X61441457Y-81258677D01* X61441457Y-81258677D02* X61495331Y-81150928D01* X61495331Y-81150928D02* X61495331Y-81097053D01* X61495331Y-81097053D02* X61306770Y-80908491D01* X61306770Y-80908491D02* X61199020Y-81016241D01* X61791643Y-80908491D02* X61225957Y-80342806D01* X61225957Y-80342806D02* X61441457Y-80127306D01* X61441457Y-80127306D02* X61522269Y-80100369D01* X61522269Y-80100369D02* X61576144Y-80100369D01* X61576144Y-80100369D02* X61656956Y-80127306D01* X61656956Y-80127306D02* X61737768Y-80208119D01* X61737768Y-80208119D02* X61764705Y-80288931D01* X61764705Y-80288931D02* X61764705Y-80342806D01* X61764705Y-80342806D02* X61737768Y-80423618D01* X61737768Y-80423618D02* X61522269Y-80639117D01* X61818580Y-79857932D02* X61818580Y-79804058D01* X61818580Y-79804058D02* X61845518Y-79723245D01* X61845518Y-79723245D02* X61980205Y-79588558D01* X61980205Y-79588558D02* X62061017Y-79561621D01* X62061017Y-79561621D02* X62114892Y-79561621D01* X62114892Y-79561621D02* X62195704Y-79588558D01* X62195704Y-79588558D02* X62249579Y-79642433D01* X62249579Y-79642433D02* X62303453Y-79750183D01* X62303453Y-79750183D02* X62303453Y-80396680D01* X62303453Y-80396680D02* X62653640Y-80046494D01* X62438141Y-79130622D02* X62492015Y-79076748D01* X62492015Y-79076748D02* X62572828Y-79049810D01* X62572828Y-79049810D02* X62626702Y-79049810D01* X62626702Y-79049810D02* X62707515Y-79076748D01* X62707515Y-79076748D02* X62842202Y-79157560D01* X62842202Y-79157560D02* X62976889Y-79292247D01* X62976889Y-79292247D02* X63057701Y-79426934D01* X63057701Y-79426934D02* X63084638Y-79507746D01* X63084638Y-79507746D02* X63084638Y-79561621D01* X63084638Y-79561621D02* X63057701Y-79642433D01* X63057701Y-79642433D02* X63003826Y-79696308D01* X63003826Y-79696308D02* X62923014Y-79723245D01* X62923014Y-79723245D02* X62869139Y-79723245D01* X62869139Y-79723245D02* X62788327Y-79696308D01* X62788327Y-79696308D02* X62653640Y-79615496D01* X62653640Y-79615496D02* X62518953Y-79480809D01* X62518953Y-79480809D02* X62438141Y-79346122D01* X62438141Y-79346122D02* X62411203Y-79265309D01* X62411203Y-79265309D02* X62411203Y-79211435D01* X62411203Y-79211435D02* X62438141Y-79130622D01* X35398895Y-57509743D02* X35318083Y-57536680D01* X35318083Y-57536680D02* X35237271Y-57617492D01* X35237271Y-57617492D02* X35183396Y-57725242D01* X35183396Y-57725242D02* X35183396Y-57832991D01* X35183396Y-57832991D02* X35210333Y-57913804D01* X35210333Y-57913804D02* X35291146Y-58048491D01* X35291146Y-58048491D02* X35371958Y-58129303D01* X35371958Y-58129303D02* X35506645Y-58210115D01* X35506645Y-58210115D02* X35587457Y-58237052D01* X35587457Y-58237052D02* X35695207Y-58237052D01* X35695207Y-58237052D02* X35802956Y-58183178D01* X35802956Y-58183178D02* X35856831Y-58129303D01* X35856831Y-58129303D02* X35910706Y-58021553D01* X35910706Y-58021553D02* X35910706Y-57967678D01* X35910706Y-57967678D02* X35722144Y-57779117D01* X35722144Y-57779117D02* X35614394Y-57886866D01* X36207017Y-57779117D02* X35641332Y-57213431D01* X35641332Y-57213431D02* X35856831Y-56997932D01* X35856831Y-56997932D02* X35937643Y-56970995D01* X35937643Y-56970995D02* X35991518Y-56970995D01* X35991518Y-56970995D02* X36072330Y-56997932D01* X36072330Y-56997932D02* X36153142Y-57078744D01* X36153142Y-57078744D02* X36180080Y-57159556D01* X36180080Y-57159556D02* X36180080Y-57213431D01* X36180080Y-57213431D02* X36153142Y-57294243D01* X36153142Y-57294243D02* X35937643Y-57509743D01* X36638016Y-56593871D02* X37015139Y-56970995D01* X36287829Y-56513059D02* X36557203Y-57051807D01* X36557203Y-57051807D02* X36907390Y-56701621D01* X34866435Y-75568431D02* X34785623Y-75595368D01* X34785623Y-75595368D02* X34704811Y-75676180D01* X34704811Y-75676180D02* X34650936Y-75783930D01* X34650936Y-75783930D02* X34650936Y-75891680D01* X34650936Y-75891680D02* X34677873Y-75972492D01* X34677873Y-75972492D02* X34758685Y-76107179D01* X34758685Y-76107179D02* X34839498Y-76187991D01* X34839498Y-76187991D02* X34974185Y-76268803D01* X34974185Y-76268803D02* X35054997Y-76295741D01* X35054997Y-76295741D02* X35162746Y-76295741D01* X35162746Y-76295741D02* X35270496Y-76241866D01* X35270496Y-76241866D02* X35324371Y-76187991D01* X35324371Y-76187991D02* X35378246Y-76080241D01* X35378246Y-76080241D02* X35378246Y-76026367D01* X35378246Y-76026367D02* X35189684Y-75837805D01* X35189684Y-75837805D02* X35081934Y-75945554D01* X35674557Y-75837805D02* X35108872Y-75272119D01* X35108872Y-75272119D02* X35997806Y-75514556D01* X35997806Y-75514556D02* X35432120Y-74948871D01* X36267180Y-75245182D02* X35701494Y-74679497D01* X35701494Y-74679497D02* X35836181Y-74544810D01* X35836181Y-74544810D02* X35943931Y-74490935D01* X35943931Y-74490935D02* X36051680Y-74490935D01* X36051680Y-74490935D02* X36132493Y-74517872D01* X36132493Y-74517872D02* X36267180Y-74598685D01* X36267180Y-74598685D02* X36347992Y-74679497D01* X36347992Y-74679497D02* X36428804Y-74814184D01* X36428804Y-74814184D02* X36455741Y-74894996D01* X36455741Y-74894996D02* X36455741Y-75002746D01* X36455741Y-75002746D02* X36401867Y-75110495D01* X36401867Y-75110495D02* X36267180Y-75245182D01* X36347992Y-74032999D02* X36482679Y-74167686D01* X36294117Y-74248498D02* X36482679Y-74167686D01* X36482679Y-74167686D02* X36563491Y-73979124D01* X36509616Y-74356248D02* X36482679Y-74167686D01* X36482679Y-74167686D02* X36671241Y-74194624D01* X35398895Y-65129743D02* X35318083Y-65156680D01* X35318083Y-65156680D02* X35237271Y-65237492D01* X35237271Y-65237492D02* X35183396Y-65345242D01* X35183396Y-65345242D02* X35183396Y-65452991D01* X35183396Y-65452991D02* X35210333Y-65533804D01* X35210333Y-65533804D02* X35291146Y-65668491D01* X35291146Y-65668491D02* X35371958Y-65749303D01* X35371958Y-65749303D02* X35506645Y-65830115D01* X35506645Y-65830115D02* X35587457Y-65857052D01* X35587457Y-65857052D02* X35695207Y-65857052D01* X35695207Y-65857052D02* X35802956Y-65803178D01* X35802956Y-65803178D02* X35856831Y-65749303D01* X35856831Y-65749303D02* X35910706Y-65641553D01* X35910706Y-65641553D02* X35910706Y-65587678D01* X35910706Y-65587678D02* X35722144Y-65399117D01* X35722144Y-65399117D02* X35614394Y-65506866D01* X36207017Y-65399117D02* X35641332Y-64833431D01* X35641332Y-64833431D02* X35856831Y-64617932D01* X35856831Y-64617932D02* X35937643Y-64590995D01* X35937643Y-64590995D02* X35991518Y-64590995D01* X35991518Y-64590995D02* X36072330Y-64617932D01* X36072330Y-64617932D02* X36153142Y-64698744D01* X36153142Y-64698744D02* X36180080Y-64779556D01* X36180080Y-64779556D02* X36180080Y-64833431D01* X36180080Y-64833431D02* X36153142Y-64914243D01* X36153142Y-64914243D02* X35937643Y-65129743D01* X36449454Y-64025309D02* X36341704Y-64133059D01* X36341704Y-64133059D02* X36314767Y-64213871D01* X36314767Y-64213871D02* X36314767Y-64267746D01* X36314767Y-64267746D02* X36341704Y-64402433D01* X36341704Y-64402433D02* X36422516Y-64537120D01* X36422516Y-64537120D02* X36638016Y-64752619D01* X36638016Y-64752619D02* X36718828Y-64779556D01* X36718828Y-64779556D02* X36772703Y-64779556D01* X36772703Y-64779556D02* X36853515Y-64752619D01* X36853515Y-64752619D02* X36961264Y-64644869D01* X36961264Y-64644869D02* X36988202Y-64564057D01* X36988202Y-64564057D02* X36988202Y-64510182D01* X36988202Y-64510182D02* X36961264Y-64429370D01* X36961264Y-64429370D02* X36826577Y-64294683D01* X36826577Y-64294683D02* X36745765Y-64267746D01* X36745765Y-64267746D02* X36691890Y-64267746D01* X36691890Y-64267746D02* X36611078Y-64294683D01* X36611078Y-64294683D02* X36503329Y-64402433D01* X36503329Y-64402433D02* X36476391Y-64483245D01* X36476391Y-64483245D02* X36476391Y-64537120D01* X36476391Y-64537120D02* X36503329Y-64617932D01* X60983521Y-65409117D02* X60902708Y-65436054D01* X60902708Y-65436054D02* X60821896Y-65516867D01* X60821896Y-65516867D02* X60768021Y-65624616D01* X60768021Y-65624616D02* X60768021Y-65732366D01* X60768021Y-65732366D02* X60794959Y-65813178D01* X60794959Y-65813178D02* X60875771Y-65947865D01* X60875771Y-65947865D02* X60956583Y-66028677D01* X60956583Y-66028677D02* X61091270Y-66109490D01* X61091270Y-66109490D02* X61172083Y-66136427D01* X61172083Y-66136427D02* X61279832Y-66136427D01* X61279832Y-66136427D02* X61387582Y-66082552D01* X61387582Y-66082552D02* X61441457Y-66028677D01* X61441457Y-66028677D02* X61495331Y-65920928D01* X61495331Y-65920928D02* X61495331Y-65867053D01* X61495331Y-65867053D02* X61306770Y-65678491D01* X61306770Y-65678491D02* X61199020Y-65786241D01* X61791643Y-65678491D02* X61225957Y-65112806D01* X61225957Y-65112806D02* X61441457Y-64897306D01* X61441457Y-64897306D02* X61522269Y-64870369D01* X61522269Y-64870369D02* X61576144Y-64870369D01* X61576144Y-64870369D02* X61656956Y-64897306D01* X61656956Y-64897306D02* X61737768Y-64978119D01* X61737768Y-64978119D02* X61764705Y-65058931D01* X61764705Y-65058931D02* X61764705Y-65112806D01* X61764705Y-65112806D02* X61737768Y-65193618D01* X61737768Y-65193618D02* X61522269Y-65409117D01* X61818580Y-64627932D02* X61818580Y-64574058D01* X61818580Y-64574058D02* X61845518Y-64493245D01* X61845518Y-64493245D02* X61980205Y-64358558D01* X61980205Y-64358558D02* X62061017Y-64331621D01* X62061017Y-64331621D02* X62114892Y-64331621D01* X62114892Y-64331621D02* X62195704Y-64358558D01* X62195704Y-64358558D02* X62249579Y-64412433D01* X62249579Y-64412433D02* X62303453Y-64520183D01* X62303453Y-64520183D02* X62303453Y-65166680D01* X62303453Y-65166680D02* X62653640Y-64816494D01* X62276516Y-64062247D02* X62653640Y-63685123D01* X62653640Y-63685123D02* X62976889Y-64493245D01* X35036435Y-50178431D02* X34955623Y-50205368D01* X34955623Y-50205368D02* X34874811Y-50286180D01* X34874811Y-50286180D02* X34820936Y-50393930D01* X34820936Y-50393930D02* X34820936Y-50501680D01* X34820936Y-50501680D02* X34847873Y-50582492D01* X34847873Y-50582492D02* X34928685Y-50717179D01* X34928685Y-50717179D02* X35009498Y-50797991D01* X35009498Y-50797991D02* X35144185Y-50878803D01* X35144185Y-50878803D02* X35224997Y-50905741D01* X35224997Y-50905741D02* X35332746Y-50905741D01* X35332746Y-50905741D02* X35440496Y-50851866D01* X35440496Y-50851866D02* X35494371Y-50797991D01* X35494371Y-50797991D02* X35548246Y-50690241D01* X35548246Y-50690241D02* X35548246Y-50636367D01* X35548246Y-50636367D02* X35359684Y-50447805D01* X35359684Y-50447805D02* X35251934Y-50555554D01* X35844557Y-50447805D02* X35278872Y-49882119D01* X35278872Y-49882119D02* X36167806Y-50124556D01* X36167806Y-50124556D02* X35602120Y-49558871D01* X36437180Y-49855182D02* X35871494Y-49289497D01* X35871494Y-49289497D02* X36006181Y-49154810D01* X36006181Y-49154810D02* X36113931Y-49100935D01* X36113931Y-49100935D02* X36221680Y-49100935D01* X36221680Y-49100935D02* X36302493Y-49127872D01* X36302493Y-49127872D02* X36437180Y-49208685D01* X36437180Y-49208685D02* X36517992Y-49289497D01* X36517992Y-49289497D02* X36598804Y-49424184D01* X36598804Y-49424184D02* X36625741Y-49504996D01* X36625741Y-49504996D02* X36625741Y-49612746D01* X36625741Y-49612746D02* X36571867Y-49720495D01* X36571867Y-49720495D02* X36437180Y-49855182D01* X36517992Y-48642999D02* X36652679Y-48777686D01* X36464117Y-48858498D02* X36652679Y-48777686D01* X36652679Y-48777686D02* X36733491Y-48589124D01* X36679616Y-48966248D02* X36652679Y-48777686D01* X36652679Y-48777686D02* X36841241Y-48804624D01* X34875521Y-85719117D02* X34794708Y-85746054D01* X34794708Y-85746054D02* X34713896Y-85826867D01* X34713896Y-85826867D02* X34660021Y-85934616D01* X34660021Y-85934616D02* X34660021Y-86042366D01* X34660021Y-86042366D02* X34686959Y-86123178D01* X34686959Y-86123178D02* X34767771Y-86257865D01* X34767771Y-86257865D02* X34848583Y-86338677D01* X34848583Y-86338677D02* X34983270Y-86419490D01* X34983270Y-86419490D02* X35064083Y-86446427D01* X35064083Y-86446427D02* X35171832Y-86446427D01* X35171832Y-86446427D02* X35279582Y-86392552D01* X35279582Y-86392552D02* X35333457Y-86338677D01* X35333457Y-86338677D02* X35387331Y-86230928D01* X35387331Y-86230928D02* X35387331Y-86177053D01* X35387331Y-86177053D02* X35198770Y-85988491D01* X35198770Y-85988491D02* X35091020Y-86096241D01* X35683643Y-85988491D02* X35117957Y-85422806D01* X35117957Y-85422806D02* X35333457Y-85207306D01* X35333457Y-85207306D02* X35414269Y-85180369D01* X35414269Y-85180369D02* X35468144Y-85180369D01* X35468144Y-85180369D02* X35548956Y-85207306D01* X35548956Y-85207306D02* X35629768Y-85288119D01* X35629768Y-85288119D02* X35656705Y-85368931D01* X35656705Y-85368931D02* X35656705Y-85422806D01* X35656705Y-85422806D02* X35629768Y-85503618D01* X35629768Y-85503618D02* X35414269Y-85719117D01* X36545640Y-85126494D02* X36222391Y-85449743D01* X36384015Y-85288119D02* X35818330Y-84722433D01* X35818330Y-84722433D02* X35845267Y-84857120D01* X35845267Y-84857120D02* X35845267Y-84964870D01* X35845267Y-84964870D02* X35818330Y-85045682D01* X36168516Y-84372247D02* X36518702Y-84022061D01* X36518702Y-84022061D02* X36545640Y-84426122D01* X36545640Y-84426122D02* X36626452Y-84345309D01* X36626452Y-84345309D02* X36707264Y-84318372D01* X36707264Y-84318372D02* X36761139Y-84318372D01* X36761139Y-84318372D02* X36841951Y-84345309D01* X36841951Y-84345309D02* X36976638Y-84479996D01* X36976638Y-84479996D02* X37003576Y-84560809D01* X37003576Y-84560809D02* X37003576Y-84614683D01* X37003576Y-84614683D02* X36976638Y-84695496D01* X36976638Y-84695496D02* X36815014Y-84857120D01* X36815014Y-84857120D02* X36734202Y-84884057D01* X36734202Y-84884057D02* X36680327Y-84884057D01* X60983521Y-73019117D02* X60902708Y-73046054D01* X60902708Y-73046054D02* X60821896Y-73126867D01* X60821896Y-73126867D02* X60768021Y-73234616D01* X60768021Y-73234616D02* X60768021Y-73342366D01* X60768021Y-73342366D02* X60794959Y-73423178D01* X60794959Y-73423178D02* X60875771Y-73557865D01* X60875771Y-73557865D02* X60956583Y-73638677D01* X60956583Y-73638677D02* X61091270Y-73719490D01* X61091270Y-73719490D02* X61172083Y-73746427D01* X61172083Y-73746427D02* X61279832Y-73746427D01* X61279832Y-73746427D02* X61387582Y-73692552D01* X61387582Y-73692552D02* X61441457Y-73638677D01* X61441457Y-73638677D02* X61495331Y-73530928D01* X61495331Y-73530928D02* X61495331Y-73477053D01* X61495331Y-73477053D02* X61306770Y-73288491D01* X61306770Y-73288491D02* X61199020Y-73396241D01* X61791643Y-73288491D02* X61225957Y-72722806D01* X61225957Y-72722806D02* X61441457Y-72507306D01* X61441457Y-72507306D02* X61522269Y-72480369D01* X61522269Y-72480369D02* X61576144Y-72480369D01* X61576144Y-72480369D02* X61656956Y-72507306D01* X61656956Y-72507306D02* X61737768Y-72588119D01* X61737768Y-72588119D02* X61764705Y-72668931D01* X61764705Y-72668931D02* X61764705Y-72722806D01* X61764705Y-72722806D02* X61737768Y-72803618D01* X61737768Y-72803618D02* X61522269Y-73019117D01* X61818580Y-72237932D02* X61818580Y-72184058D01* X61818580Y-72184058D02* X61845518Y-72103245D01* X61845518Y-72103245D02* X61980205Y-71968558D01* X61980205Y-71968558D02* X62061017Y-71941621D01* X62061017Y-71941621D02* X62114892Y-71941621D01* X62114892Y-71941621D02* X62195704Y-71968558D01* X62195704Y-71968558D02* X62249579Y-72022433D01* X62249579Y-72022433D02* X62303453Y-72130183D01* X62303453Y-72130183D02* X62303453Y-72776680D01* X62303453Y-72776680D02* X62653640Y-72426494D01* X62357328Y-71699184D02* X62357328Y-71645309D01* X62357328Y-71645309D02* X62384266Y-71564497D01* X62384266Y-71564497D02* X62518953Y-71429810D01* X62518953Y-71429810D02* X62599765Y-71402873D01* X62599765Y-71402873D02* X62653640Y-71402873D01* X62653640Y-71402873D02* X62734452Y-71429810D01* X62734452Y-71429810D02* X62788327Y-71483685D01* X62788327Y-71483685D02* X62842202Y-71591435D01* X62842202Y-71591435D02* X62842202Y-72237932D01* X62842202Y-72237932D02* X63192388Y-71887746D01* X35400800Y-93891334D02* X34835115Y-93325648D01* X34835115Y-93325648D02* X34969802Y-93190961D01* X34969802Y-93190961D02* X35077551Y-93137087D01* X35077551Y-93137087D02* X35185301Y-93137087D01* X35185301Y-93137087D02* X35266113Y-93164024D01* X35266113Y-93164024D02* X35400800Y-93244836D01* X35400800Y-93244836D02* X35481612Y-93325648D01* X35481612Y-93325648D02* X35562424Y-93460335D01* X35562424Y-93460335D02* X35589362Y-93541148D01* X35589362Y-93541148D02* X35589362Y-93648897D01* X35589362Y-93648897D02* X35535487Y-93756647D01* X35535487Y-93756647D02* X35400800Y-93891334D01* X35966485Y-93325648D02* X35400800Y-92759963D01* X35400800Y-92759963D02* X35993423Y-92975462D01* X35993423Y-92975462D02* X35777924Y-92382839D01* X35777924Y-92382839D02* X36343609Y-92948525D01* X36128110Y-92032653D02* X36262797Y-92167340D01* X36074235Y-92248152D02* X36262797Y-92167340D01* X36262797Y-92167340D02* X36343609Y-91978778D01* X36289734Y-92355902D02* X36262797Y-92167340D01* X36262797Y-92167340D02* X36451359Y-92194277D01* X34875521Y-78099117D02* X34794708Y-78126054D01* X34794708Y-78126054D02* X34713896Y-78206867D01* X34713896Y-78206867D02* X34660021Y-78314616D01* X34660021Y-78314616D02* X34660021Y-78422366D01* X34660021Y-78422366D02* X34686959Y-78503178D01* X34686959Y-78503178D02* X34767771Y-78637865D01* X34767771Y-78637865D02* X34848583Y-78718677D01* X34848583Y-78718677D02* X34983270Y-78799490D01* X34983270Y-78799490D02* X35064083Y-78826427D01* X35064083Y-78826427D02* X35171832Y-78826427D01* X35171832Y-78826427D02* X35279582Y-78772552D01* X35279582Y-78772552D02* X35333457Y-78718677D01* X35333457Y-78718677D02* X35387331Y-78610928D01* X35387331Y-78610928D02* X35387331Y-78557053D01* X35387331Y-78557053D02* X35198770Y-78368491D01* X35198770Y-78368491D02* X35091020Y-78476241D01* X35683643Y-78368491D02* X35117957Y-77802806D01* X35117957Y-77802806D02* X35333457Y-77587306D01* X35333457Y-77587306D02* X35414269Y-77560369D01* X35414269Y-77560369D02* X35468144Y-77560369D01* X35468144Y-77560369D02* X35548956Y-77587306D01* X35548956Y-77587306D02* X35629768Y-77668119D01* X35629768Y-77668119D02* X35656705Y-77748931D01* X35656705Y-77748931D02* X35656705Y-77802806D01* X35656705Y-77802806D02* X35629768Y-77883618D01* X35629768Y-77883618D02* X35414269Y-78099117D01* X36545640Y-77506494D02* X36222391Y-77829743D01* X36384015Y-77668119D02* X35818330Y-77102433D01* X35818330Y-77102433D02* X35845267Y-77237120D01* X35845267Y-77237120D02* X35845267Y-77344870D01* X35845267Y-77344870D02* X35818330Y-77425682D01* X36330141Y-76590622D02* X36384015Y-76536748D01* X36384015Y-76536748D02* X36464828Y-76509810D01* X36464828Y-76509810D02* X36518702Y-76509810D01* X36518702Y-76509810D02* X36599515Y-76536748D01* X36599515Y-76536748D02* X36734202Y-76617560D01* X36734202Y-76617560D02* X36868889Y-76752247D01* X36868889Y-76752247D02* X36949701Y-76886934D01* X36949701Y-76886934D02* X36976638Y-76967746D01* X36976638Y-76967746D02* X36976638Y-77021621D01* X36976638Y-77021621D02* X36949701Y-77102433D01* X36949701Y-77102433D02* X36895826Y-77156308D01* X36895826Y-77156308D02* X36815014Y-77183245D01* X36815014Y-77183245D02* X36761139Y-77183245D01* X36761139Y-77183245D02* X36680327Y-77156308D01* X36680327Y-77156308D02* X36545640Y-77075496D01* X36545640Y-77075496D02* X36410953Y-76940809D01* X36410953Y-76940809D02* X36330141Y-76806122D01* X36330141Y-76806122D02* X36303203Y-76725309D01* X36303203Y-76725309D02* X36303203Y-76671435D01* X36303203Y-76671435D02* X36330141Y-76590622D01* X60623429Y-45561334D02* X61377677Y-45938457D01* X61377677Y-45938457D02* X61000553Y-45184210D01* X61647050Y-45076461D02* X61754800Y-45022586D01* X61754800Y-45022586D02* X61808675Y-45022586D01* X61808675Y-45022586D02* X61889487Y-45049523D01* X61889487Y-45049523D02* X61970299Y-45130335D01* X61970299Y-45130335D02* X61997237Y-45211148D01* X61997237Y-45211148D02* X61997237Y-45265022D01* X61997237Y-45265022D02* X61970299Y-45345835D01* X61970299Y-45345835D02* X61754800Y-45561334D01* X61754800Y-45561334D02* X61189115Y-44995648D01* X61189115Y-44995648D02* X61377676Y-44807087D01* X61377676Y-44807087D02* X61458489Y-44780149D01* X61458489Y-44780149D02* X61512363Y-44780149D01* X61512363Y-44780149D02* X61593176Y-44807087D01* X61593176Y-44807087D02* X61647050Y-44860961D01* X61647050Y-44860961D02* X61673988Y-44941774D01* X61673988Y-44941774D02* X61673988Y-44995648D01* X61673988Y-44995648D02* X61647050Y-45076461D01* X61647050Y-45076461D02* X61458489Y-45265022D01* X61754800Y-44429963D02* X62212736Y-44887899D01* X62212736Y-44887899D02* X62293548Y-44914836D01* X62293548Y-44914836D02* X62347423Y-44914836D01* X62347423Y-44914836D02* X62428235Y-44887899D01* X62428235Y-44887899D02* X62535985Y-44780149D01* X62535985Y-44780149D02* X62562922Y-44699337D01* X62562922Y-44699337D02* X62562922Y-44645462D01* X62562922Y-44645462D02* X62535985Y-44564650D01* X62535985Y-44564650D02* X62078049Y-44106714D01* X62859233Y-44403026D02* X62966983Y-44349151D01* X62966983Y-44349151D02* X63101670Y-44214464D01* X63101670Y-44214464D02* X63128607Y-44133652D01* X63128607Y-44133652D02* X63128607Y-44079777D01* X63128607Y-44079777D02* X63101670Y-43998965D01* X63101670Y-43998965D02* X63047795Y-43945090D01* X63047795Y-43945090D02* X62966983Y-43918153D01* X62966983Y-43918153D02* X62913108Y-43918153D01* X62913108Y-43918153D02* X62832296Y-43945090D01* X62832296Y-43945090D02* X62697609Y-44025902D01* X62697609Y-44025902D02* X62616797Y-44052840D01* X62616797Y-44052840D02* X62562922Y-44052840D01* X62562922Y-44052840D02* X62482110Y-44025902D01* X62482110Y-44025902D02* X62428235Y-43972027D01* X62428235Y-43972027D02* X62401297Y-43891215D01* X62401297Y-43891215D02* X62401297Y-43837340D01* X62401297Y-43837340D02* X62428235Y-43756528D01* X62428235Y-43756528D02* X62562922Y-43621841D01* X62562922Y-43621841D02* X62670671Y-43567966D01* X62966983Y-43217780D02* X63101670Y-43352467D01* X62913108Y-43433279D02* X63101670Y-43352467D01* X63101670Y-43352467D02* X63182482Y-43163905D01* X63128607Y-43541029D02* X63101670Y-43352467D01* X63101670Y-43352467D02* X63290232Y-43379404D01* X61082154Y-58056959D02* X61351528Y-57787585D01* X61189903Y-58272458D02* X60812780Y-57518211D01* X60812780Y-57518211D02* X61567027Y-57895335D01* X61109091Y-57221900D02* X61863338Y-57599024D01* X61863338Y-57599024D02* X61486215Y-56844776D01* X62563711Y-56898651D02* X62105775Y-56817839D01* X62240462Y-57221900D02* X61674776Y-56656215D01* X61674776Y-56656215D02* X61890276Y-56440715D01* X61890276Y-56440715D02* X61971088Y-56413778D01* X61971088Y-56413778D02* X62024963Y-56413778D01* X62024963Y-56413778D02* X62105775Y-56440715D01* X62105775Y-56440715D02* X62186587Y-56521528D01* X62186587Y-56521528D02* X62213524Y-56602340D01* X62213524Y-56602340D02* X62213524Y-56656215D01* X62213524Y-56656215D02* X62186587Y-56737027D01* X62186587Y-56737027D02* X61971088Y-56952526D01* X62698398Y-56171341D02* X62509836Y-56359903D01* X62806147Y-56656215D02* X62240462Y-56090529D01* X62240462Y-56090529D02* X62509836Y-55821155D01* X34886435Y-88288431D02* X34805623Y-88315368D01* X34805623Y-88315368D02* X34724811Y-88396180D01* X34724811Y-88396180D02* X34670936Y-88503930D01* X34670936Y-88503930D02* X34670936Y-88611680D01* X34670936Y-88611680D02* X34697873Y-88692492D01* X34697873Y-88692492D02* X34778685Y-88827179D01* X34778685Y-88827179D02* X34859498Y-88907991D01* X34859498Y-88907991D02* X34994185Y-88988803D01* X34994185Y-88988803D02* X35074997Y-89015741D01* X35074997Y-89015741D02* X35182746Y-89015741D01* X35182746Y-89015741D02* X35290496Y-88961866D01* X35290496Y-88961866D02* X35344371Y-88907991D01* X35344371Y-88907991D02* X35398246Y-88800241D01* X35398246Y-88800241D02* X35398246Y-88746367D01* X35398246Y-88746367D02* X35209684Y-88557805D01* X35209684Y-88557805D02* X35101934Y-88665554D01* X35694557Y-88557805D02* X35128872Y-87992119D01* X35128872Y-87992119D02* X36017806Y-88234556D01* X36017806Y-88234556D02* X35452120Y-87668871D01* X36287180Y-87965182D02* X35721494Y-87399497D01* X35721494Y-87399497D02* X35856181Y-87264810D01* X35856181Y-87264810D02* X35963931Y-87210935D01* X35963931Y-87210935D02* X36071680Y-87210935D01* X36071680Y-87210935D02* X36152493Y-87237872D01* X36152493Y-87237872D02* X36287180Y-87318685D01* X36287180Y-87318685D02* X36367992Y-87399497D01* X36367992Y-87399497D02* X36448804Y-87534184D01* X36448804Y-87534184D02* X36475741Y-87614996D01* X36475741Y-87614996D02* X36475741Y-87722746D01* X36475741Y-87722746D02* X36421867Y-87830495D01* X36421867Y-87830495D02* X36287180Y-87965182D01* X36367992Y-86752999D02* X36502679Y-86887686D01* X36314117Y-86968498D02* X36502679Y-86887686D01* X36502679Y-86887686D02* X36583491Y-86699124D01* X36529616Y-87076248D02* X36502679Y-86887686D01* X36502679Y-86887686D02* X36691241Y-86914624D01* X60983521Y-67939117D02* X60902708Y-67966054D01* X60902708Y-67966054D02* X60821896Y-68046867D01* X60821896Y-68046867D02* X60768021Y-68154616D01* X60768021Y-68154616D02* X60768021Y-68262366D01* X60768021Y-68262366D02* X60794959Y-68343178D01* X60794959Y-68343178D02* X60875771Y-68477865D01* X60875771Y-68477865D02* X60956583Y-68558677D01* X60956583Y-68558677D02* X61091270Y-68639490D01* X61091270Y-68639490D02* X61172083Y-68666427D01* X61172083Y-68666427D02* X61279832Y-68666427D01* X61279832Y-68666427D02* X61387582Y-68612552D01* X61387582Y-68612552D02* X61441457Y-68558677D01* X61441457Y-68558677D02* X61495331Y-68450928D01* X61495331Y-68450928D02* X61495331Y-68397053D01* X61495331Y-68397053D02* X61306770Y-68208491D01* X61306770Y-68208491D02* X61199020Y-68316241D01* X61791643Y-68208491D02* X61225957Y-67642806D01* X61225957Y-67642806D02* X61441457Y-67427306D01* X61441457Y-67427306D02* X61522269Y-67400369D01* X61522269Y-67400369D02* X61576144Y-67400369D01* X61576144Y-67400369D02* X61656956Y-67427306D01* X61656956Y-67427306D02* X61737768Y-67508119D01* X61737768Y-67508119D02* X61764705Y-67588931D01* X61764705Y-67588931D02* X61764705Y-67642806D01* X61764705Y-67642806D02* X61737768Y-67723618D01* X61737768Y-67723618D02* X61522269Y-67939117D01* X61818580Y-67157932D02* X61818580Y-67104058D01* X61818580Y-67104058D02* X61845518Y-67023245D01* X61845518Y-67023245D02* X61980205Y-66888558D01* X61980205Y-66888558D02* X62061017Y-66861621D01* X62061017Y-66861621D02* X62114892Y-66861621D01* X62114892Y-66861621D02* X62195704Y-66888558D01* X62195704Y-66888558D02* X62249579Y-66942433D01* X62249579Y-66942433D02* X62303453Y-67050183D01* X62303453Y-67050183D02* X62303453Y-67696680D01* X62303453Y-67696680D02* X62653640Y-67346494D01* X62572828Y-66295935D02* X62465078Y-66403685D01* X62465078Y-66403685D02* X62438141Y-66484497D01* X62438141Y-66484497D02* X62438141Y-66538372D01* X62438141Y-66538372D02* X62465078Y-66673059D01* X62465078Y-66673059D02* X62545890Y-66807746D01* X62545890Y-66807746D02* X62761389Y-67023245D01* X62761389Y-67023245D02* X62842202Y-67050183D01* X62842202Y-67050183D02* X62896076Y-67050183D01* X62896076Y-67050183D02* X62976889Y-67023245D01* X62976889Y-67023245D02* X63084638Y-66915496D01* X63084638Y-66915496D02* X63111576Y-66834683D01* X63111576Y-66834683D02* X63111576Y-66780809D01* X63111576Y-66780809D02* X63084638Y-66699996D01* X63084638Y-66699996D02* X62949951Y-66565309D01* X62949951Y-66565309D02* X62869139Y-66538372D01* X62869139Y-66538372D02* X62815264Y-66538372D01* X62815264Y-66538372D02* X62734452Y-66565309D01* X62734452Y-66565309D02* X62626702Y-66673059D01* X62626702Y-66673059D02* X62599765Y-66753871D01* X62599765Y-66753871D02* X62599765Y-66807746D01* X62599765Y-66807746D02* X62626702Y-66888558D01* X60784624Y-55176367D02* X61134810Y-54826181D01* X61134810Y-54826181D02* X61161747Y-55230242D01* X61161747Y-55230242D02* X61242560Y-55149430D01* X61242560Y-55149430D02* X61323372Y-55122492D01* X61323372Y-55122492D02* X61377247Y-55122492D01* X61377247Y-55122492D02* X61458059Y-55149430D01* X61458059Y-55149430D02* X61592746Y-55284117D01* X61592746Y-55284117D02* X61619683Y-55364929D01* X61619683Y-55364929D02* X61619683Y-55418804D01* X61619683Y-55418804D02* X61592746Y-55499616D01* X61592746Y-55499616D02* X61431121Y-55661240D01* X61431121Y-55661240D02* X61350309Y-55688178D01* X61350309Y-55688178D02* X61296434Y-55688178D01* X61296435Y-54664556D02* X62050682Y-55041680D01* X62050682Y-55041680D02* X61673558Y-54287433D01* X61808245Y-54152746D02* X62158431Y-53802560D01* X62158431Y-53802560D02* X62185369Y-54206621D01* X62185369Y-54206621D02* X62266181Y-54125809D01* X62266181Y-54125809D02* X62346993Y-54098871D01* X62346993Y-54098871D02* X62400868Y-54098871D01* X62400868Y-54098871D02* X62481680Y-54125809D01* X62481680Y-54125809D02* X62616367Y-54260496D01* X62616367Y-54260496D02* X62643304Y-54341308D01* X62643304Y-54341308D02* X62643304Y-54395183D01* X62643304Y-54395183D02* X62616367Y-54475995D01* X62616367Y-54475995D02* X62454743Y-54637619D01* X62454743Y-54637619D02* X62373930Y-54664557D01* X62373930Y-54664557D02* X62320056Y-54664557D01* X62481680Y-53479311D02* X62616367Y-53613998D01* X62427805Y-53694810D02* X62616367Y-53613998D01* X62616367Y-53613998D02* X62697179Y-53425436D01* X62643305Y-53802560D02* X62616367Y-53613998D01* X62616367Y-53613998D02* X62804929Y-53640935D01* X60983521Y-60065117D02* X60902708Y-60092054D01* X60902708Y-60092054D02* X60821896Y-60172867D01* X60821896Y-60172867D02* X60768021Y-60280616D01* X60768021Y-60280616D02* X60768021Y-60388366D01* X60768021Y-60388366D02* X60794959Y-60469178D01* X60794959Y-60469178D02* X60875771Y-60603865D01* X60875771Y-60603865D02* X60956583Y-60684677D01* X60956583Y-60684677D02* X61091270Y-60765490D01* X61091270Y-60765490D02* X61172083Y-60792427D01* X61172083Y-60792427D02* X61279832Y-60792427D01* X61279832Y-60792427D02* X61387582Y-60738552D01* X61387582Y-60738552D02* X61441457Y-60684677D01* X61441457Y-60684677D02* X61495331Y-60576928D01* X61495331Y-60576928D02* X61495331Y-60523053D01* X61495331Y-60523053D02* X61306770Y-60334491D01* X61306770Y-60334491D02* X61199020Y-60442241D01* X61791643Y-60334491D02* X61225957Y-59768806D01* X61225957Y-59768806D02* X61441457Y-59553306D01* X61441457Y-59553306D02* X61522269Y-59526369D01* X61522269Y-59526369D02* X61576144Y-59526369D01* X61576144Y-59526369D02* X61656956Y-59553306D01* X61656956Y-59553306D02* X61737768Y-59634119D01* X61737768Y-59634119D02* X61764705Y-59714931D01* X61764705Y-59714931D02* X61764705Y-59768806D01* X61764705Y-59768806D02* X61737768Y-59849618D01* X61737768Y-59849618D02* X61522269Y-60065117D01* X61818580Y-59283932D02* X61818580Y-59230058D01* X61818580Y-59230058D02* X61845518Y-59149245D01* X61845518Y-59149245D02* X61980205Y-59014558D01* X61980205Y-59014558D02* X62061017Y-58987621D01* X62061017Y-58987621D02* X62114892Y-58987621D01* X62114892Y-58987621D02* X62195704Y-59014558D01* X62195704Y-59014558D02* X62249579Y-59068433D01* X62249579Y-59068433D02* X62303453Y-59176183D01* X62303453Y-59176183D02* X62303453Y-59822680D01* X62303453Y-59822680D02* X62653640Y-59472494D01* X62653640Y-58825996D02* X62572828Y-58852934D01* X62572828Y-58852934D02* X62518953Y-58852934D01* X62518953Y-58852934D02* X62438141Y-58825996D01* X62438141Y-58825996D02* X62411203Y-58799059D01* X62411203Y-58799059D02* X62384266Y-58718247D01* X62384266Y-58718247D02* X62384266Y-58664372D01* X62384266Y-58664372D02* X62411203Y-58583560D01* X62411203Y-58583560D02* X62518953Y-58475810D01* X62518953Y-58475810D02* X62599765Y-58448873D01* X62599765Y-58448873D02* X62653640Y-58448873D01* X62653640Y-58448873D02* X62734452Y-58475810D01* X62734452Y-58475810D02* X62761389Y-58502748D01* X62761389Y-58502748D02* X62788327Y-58583560D01* X62788327Y-58583560D02* X62788327Y-58637435D01* X62788327Y-58637435D02* X62761389Y-58718247D01* X62761389Y-58718247D02* X62653640Y-58825996D01* X62653640Y-58825996D02* X62626702Y-58906809D01* X62626702Y-58906809D02* X62626702Y-58960683D01* X62626702Y-58960683D02* X62653640Y-59041496D01* X62653640Y-59041496D02* X62761389Y-59149245D01* X62761389Y-59149245D02* X62842202Y-59176183D01* X62842202Y-59176183D02* X62896076Y-59176183D01* X62896076Y-59176183D02* X62976889Y-59149245D01* X62976889Y-59149245D02* X63084638Y-59041496D01* X63084638Y-59041496D02* X63111576Y-58960683D01* X63111576Y-58960683D02* X63111576Y-58906809D01* X63111576Y-58906809D02* X63084638Y-58825996D01* X63084638Y-58825996D02* X62976889Y-58718247D01* X62976889Y-58718247D02* X62896076Y-58691309D01* X62896076Y-58691309D02* X62842202Y-58691309D01* X62842202Y-58691309D02* X62761389Y-58718247D01* X35398895Y-54969743D02* X35318083Y-54996680D01* X35318083Y-54996680D02* X35237271Y-55077492D01* X35237271Y-55077492D02* X35183396Y-55185242D01* X35183396Y-55185242D02* X35183396Y-55292991D01* X35183396Y-55292991D02* X35210333Y-55373804D01* X35210333Y-55373804D02* X35291146Y-55508491D01* X35291146Y-55508491D02* X35371958Y-55589303D01* X35371958Y-55589303D02* X35506645Y-55670115D01* X35506645Y-55670115D02* X35587457Y-55697052D01* X35587457Y-55697052D02* X35695207Y-55697052D01* X35695207Y-55697052D02* X35802956Y-55643178D01* X35802956Y-55643178D02* X35856831Y-55589303D01* X35856831Y-55589303D02* X35910706Y-55481553D01* X35910706Y-55481553D02* X35910706Y-55427678D01* X35910706Y-55427678D02* X35722144Y-55239117D01* X35722144Y-55239117D02* X35614394Y-55346866D01* X36207017Y-55239117D02* X35641332Y-54673431D01* X35641332Y-54673431D02* X35856831Y-54457932D01* X35856831Y-54457932D02* X35937643Y-54430995D01* X35937643Y-54430995D02* X35991518Y-54430995D01* X35991518Y-54430995D02* X36072330Y-54457932D01* X36072330Y-54457932D02* X36153142Y-54538744D01* X36153142Y-54538744D02* X36180080Y-54619556D01* X36180080Y-54619556D02* X36180080Y-54673431D01* X36180080Y-54673431D02* X36153142Y-54754243D01* X36153142Y-54754243D02* X35937643Y-54969743D01* X36153142Y-54161621D02* X36503329Y-53811434D01* X36503329Y-53811434D02* X36530266Y-54215495D01* X36530266Y-54215495D02* X36611078Y-54134683D01* X36611078Y-54134683D02* X36691890Y-54107746D01* X36691890Y-54107746D02* X36745765Y-54107746D01* X36745765Y-54107746D02* X36826577Y-54134683D01* X36826577Y-54134683D02* X36961264Y-54269370D01* X36961264Y-54269370D02* X36988202Y-54350182D01* X36988202Y-54350182D02* X36988202Y-54404057D01* X36988202Y-54404057D02* X36961264Y-54484869D01* X36961264Y-54484869D02* X36799640Y-54646494D01* X36799640Y-54646494D02* X36718828Y-54673431D01* X36718828Y-54673431D02* X36664953Y-54673431D01* X61050936Y-50023930D02* X60970123Y-50050868D01* X60970123Y-50050868D02* X60889311Y-50131680D01* X60889311Y-50131680D02* X60835436Y-50239429D01* X60835436Y-50239429D02* X60835436Y-50347179D01* X60835436Y-50347179D02* X60862374Y-50427991D01* X60862374Y-50427991D02* X60943186Y-50562678D01* X60943186Y-50562678D02* X61023998Y-50643490D01* X61023998Y-50643490D02* X61158685Y-50724303D01* X61158685Y-50724303D02* X61239497Y-50751240D01* X61239497Y-50751240D02* X61347247Y-50751240D01* X61347247Y-50751240D02* X61454997Y-50697365D01* X61454997Y-50697365D02* X61508871Y-50643490D01* X61508871Y-50643490D02* X61562746Y-50535741D01* X61562746Y-50535741D02* X61562746Y-50481866D01* X61562746Y-50481866D02* X61374184Y-50293304D01* X61374184Y-50293304D02* X61266435Y-50401054D01* X61859058Y-50293304D02* X61293372Y-49727619D01* X61293372Y-49727619D02* X62182306Y-49970055D01* X62182306Y-49970055D02* X61616621Y-49404370D01* X62451680Y-49700682D02* X61885995Y-49134996D01* X61885995Y-49134996D02* X62020682Y-49000309D01* X62020682Y-49000309D02* X62128432Y-48946434D01* X62128432Y-48946434D02* X62236181Y-48946434D01* X62236181Y-48946434D02* X62316993Y-48973372D01* X62316993Y-48973372D02* X62451680Y-49054184D01* X62451680Y-49054184D02* X62532493Y-49134996D01* X62532493Y-49134996D02* X62613305Y-49269683D01* X62613305Y-49269683D02* X62640242Y-49350495D01* X62640242Y-49350495D02* X62640242Y-49458245D01* X62640242Y-49458245D02* X62586367Y-49565995D01* X62586367Y-49565995D02* X62451680Y-49700682D01* X62532493Y-48488498D02* X62667180Y-48623185D01* X62478618Y-48703998D02* X62667180Y-48623185D01* X62667180Y-48623185D02* X62747992Y-48434624D01* X62694117Y-48811747D02* X62667180Y-48623185D01* X62667180Y-48623185D02* X62855741Y-48650123D01* X61037396Y-63559489D02* X61306770Y-63290115D01* X61145146Y-63774988D02* X60768022Y-63020741D01* X60768022Y-63020741D02* X61522269Y-63397864D01* X61468394Y-62374243D02* X61387582Y-62401181D01* X61387582Y-62401181D02* X61306770Y-62481993D01* X61306770Y-62481993D02* X61252895Y-62589743D01* X61252895Y-62589743D02* X61252895Y-62697492D01* X61252895Y-62697492D02* X61279833Y-62778304D01* X61279833Y-62778304D02* X61360645Y-62912991D01* X61360645Y-62912991D02* X61441457Y-62993804D01* X61441457Y-62993804D02* X61576144Y-63074616D01* X61576144Y-63074616D02* X61656956Y-63101553D01* X61656956Y-63101553D02* X61764706Y-63101553D01* X61764706Y-63101553D02* X61872455Y-63047678D01* X61872455Y-63047678D02* X61926330Y-62993804D01* X61926330Y-62993804D02* X61980205Y-62886054D01* X61980205Y-62886054D02* X61980205Y-62832179D01* X61980205Y-62832179D02* X61791643Y-62643617D01* X61791643Y-62643617D02* X61683894Y-62751367D01* X62276516Y-62643617D02* X61710831Y-62077932D01* X61710831Y-62077932D02* X62599765Y-62320369D01* X62599765Y-62320369D02* X62034080Y-61754683D01* X62869139Y-62050995D02* X62303454Y-61485309D01* X62303454Y-61485309D02* X62438141Y-61350622D01* X62438141Y-61350622D02* X62545890Y-61296747D01* X62545890Y-61296747D02* X62653640Y-61296747D01* X62653640Y-61296747D02* X62734452Y-61323685D01* X62734452Y-61323685D02* X62869139Y-61404497D01* X62869139Y-61404497D02* X62949951Y-61485309D01* X62949951Y-61485309D02* X63030764Y-61619996D01* X63030764Y-61619996D02* X63057701Y-61700809D01* X63057701Y-61700809D02* X63057701Y-61808558D01* X63057701Y-61808558D02* X63003826Y-61916308D01* X63003826Y-61916308D02* X62869139Y-62050995D01* X60971958Y-88016680D02* X60891146Y-88043617D01* X60891146Y-88043617D02* X60810334Y-88124429D01* X60810334Y-88124429D02* X60756459Y-88232179D01* X60756459Y-88232179D02* X60756459Y-88339929D01* X60756459Y-88339929D02* X60783396Y-88420741D01* X60783396Y-88420741D02* X60864208Y-88555428D01* X60864208Y-88555428D02* X60945021Y-88636240D01* X60945021Y-88636240D02* X61079708Y-88717052D01* X61079708Y-88717052D02* X61160520Y-88743990D01* X61160520Y-88743990D02* X61268269Y-88743990D01* X61268269Y-88743990D02* X61376019Y-88690115D01* X61376019Y-88690115D02* X61429894Y-88636240D01* X61429894Y-88636240D02* X61483769Y-88528490D01* X61483769Y-88528490D02* X61483769Y-88474616D01* X61483769Y-88474616D02* X61295207Y-88286054D01* X61295207Y-88286054D02* X61187457Y-88393803D01* X61780080Y-88286054D02* X61214395Y-87720368D01* X61214395Y-87720368D02* X62103329Y-87962805D01* X62103329Y-87962805D02* X61537643Y-87397120D01* X62372703Y-87693431D02* X61807017Y-87127746D01* X61807017Y-87127746D02* X61941704Y-86993059D01* X61941704Y-86993059D02* X62049454Y-86939184D01* X62049454Y-86939184D02* X62157203Y-86939184D01* X62157203Y-86939184D02* X62238016Y-86966121D01* X62238016Y-86966121D02* X62372703Y-87046934D01* X62372703Y-87046934D02* X62453515Y-87127746D01* X62453515Y-87127746D02* X62534327Y-87262433D01* X62534327Y-87262433D02* X62561264Y-87343245D01* X62561264Y-87343245D02* X62561264Y-87450995D01* X62561264Y-87450995D02* X62507390Y-87558744D01* X62507390Y-87558744D02* X62372703Y-87693431D01* X62453515Y-86481248D02* X62588202Y-86615935D01* X62399640Y-86696747D02* X62588202Y-86615935D01* X62588202Y-86615935D02* X62669014Y-86427373D01* X62615139Y-86804497D02* X62588202Y-86615935D01* X62588202Y-86615935D02* X62776764Y-86642873D01* X69429333Y-73384580D02* X69381714Y-73432200D01* X69381714Y-73432200D02* X69238857Y-73479819D01* X69238857Y-73479819D02* X69143619Y-73479819D01* X69143619Y-73479819D02* X69000762Y-73432200D01* X69000762Y-73432200D02* X68905524Y-73336961D01* X68905524Y-73336961D02* X68857905Y-73241723D01* X68857905Y-73241723D02* X68810286Y-73051247D01* X68810286Y-73051247D02* X68810286Y-72908390D01* X68810286Y-72908390D02* X68857905Y-72717914D01* X68857905Y-72717914D02* X68905524Y-72622676D01* X68905524Y-72622676D02* X69000762Y-72527438D01* X69000762Y-72527438D02* X69143619Y-72479819D01* X69143619Y-72479819D02* X69238857Y-72479819D01* X69238857Y-72479819D02* X69381714Y-72527438D01* X69381714Y-72527438D02* X69429333Y-72575057D01* X69810286Y-72575057D02* X69857905Y-72527438D01* X69857905Y-72527438D02* X69953143Y-72479819D01* X69953143Y-72479819D02* X70191238Y-72479819D01* X70191238Y-72479819D02* X70286476Y-72527438D01* X70286476Y-72527438D02* X70334095Y-72575057D01* X70334095Y-72575057D02* X70381714Y-72670295D01* X70381714Y-72670295D02* X70381714Y-72765533D01* X70381714Y-72765533D02* X70334095Y-72908390D01* X70334095Y-72908390D02* X69762667Y-73479819D01* X69762667Y-73479819D02* X70381714Y-73479819D01* X49044266Y-97498819D02* X49044266Y-98213104D01* X49044266Y-98213104D02* X48996647Y-98355961D01* X48996647Y-98355961D02* X48901409Y-98451200D01* X48901409Y-98451200D02* X48758552Y-98498819D01* X48758552Y-98498819D02* X48663314Y-98498819D01* X49949028Y-97832152D02* X49949028Y-98498819D01* X49710933Y-97451200D02* X49472838Y-98165485D01* X49472838Y-98165485D02* X50091885Y-98165485D01* X95334203Y-96920576D02* X95334203Y-97634861D01* X95334203Y-97634861D02* X95286584Y-97777718D01* X95286584Y-97777718D02* X95191346Y-97872957D01* X95191346Y-97872957D02* X95048489Y-97920576D01* X95048489Y-97920576D02* X94953251Y-97920576D01* X95715156Y-96920576D02* X96334203Y-96920576D01* X96334203Y-96920576D02* X96000870Y-97301528D01* X96000870Y-97301528D02* X96143727Y-97301528D01* X96143727Y-97301528D02* X96238965Y-97349147D01* X96238965Y-97349147D02* X96286584Y-97396766D01* X96286584Y-97396766D02* X96334203Y-97492004D01* X96334203Y-97492004D02* X96334203Y-97730099D01* X96334203Y-97730099D02* X96286584Y-97825337D01* X96286584Y-97825337D02* X96238965Y-97872957D01* X96238965Y-97872957D02* X96143727Y-97920576D01* X96143727Y-97920576D02* X95858013Y-97920576D01* X95858013Y-97920576D02* X95762775Y-97872957D01* X95762775Y-97872957D02* X95715156Y-97825337D01* X71969333Y-103356580D02* X71921714Y-103404200D01* X71921714Y-103404200D02* X71778857Y-103451819D01* X71778857Y-103451819D02* X71683619Y-103451819D01* X71683619Y-103451819D02* X71540762Y-103404200D01* X71540762Y-103404200D02* X71445524Y-103308961D01* X71445524Y-103308961D02* X71397905Y-103213723D01* X71397905Y-103213723D02* X71350286Y-103023247D01* X71350286Y-103023247D02* X71350286Y-102880390D01* X71350286Y-102880390D02* X71397905Y-102689914D01* X71397905Y-102689914D02* X71445524Y-102594676D01* X71445524Y-102594676D02* X71540762Y-102499438D01* X71540762Y-102499438D02* X71683619Y-102451819D01* X71683619Y-102451819D02* X71778857Y-102451819D01* X71778857Y-102451819D02* X71921714Y-102499438D01* X71921714Y-102499438D02* X71969333Y-102547057D01* X72826476Y-102785152D02* X72826476Y-103451819D01* X72588381Y-102404200D02* X72350286Y-103118485D01* X72350286Y-103118485D02* X72969333Y-103118485D01* X81869003Y-96477071D02* X81869003Y-97286594D01* X81869003Y-97286594D02* X81916622Y-97381832D01* X81916622Y-97381832D02* X81964241Y-97429452D01* X81964241Y-97429452D02* X82059479Y-97477071D01* X82059479Y-97477071D02* X82249955Y-97477071D01* X82249955Y-97477071D02* X82345193Y-97429452D01* X82345193Y-97429452D02* X82392812Y-97381832D01* X82392812Y-97381832D02* X82440431Y-97286594D01* X82440431Y-97286594D02* X82440431Y-96477071D01* X82821384Y-96477071D02* X83440431Y-96477071D01* X83440431Y-96477071D02* X83107098Y-96858023D01* X83107098Y-96858023D02* X83249955Y-96858023D01* X83249955Y-96858023D02* X83345193Y-96905642D01* X83345193Y-96905642D02* X83392812Y-96953261D01* X83392812Y-96953261D02* X83440431Y-97048499D01* X83440431Y-97048499D02* X83440431Y-97286594D01* X83440431Y-97286594D02* X83392812Y-97381832D01* X83392812Y-97381832D02* X83345193Y-97429452D01* X83345193Y-97429452D02* X83249955Y-97477071D01* X83249955Y-97477071D02* X82964241Y-97477071D01* X82964241Y-97477071D02* X82869003Y-97429452D01* X82869003Y-97429452D02* X82821384Y-97381832D01* X37659186Y-100042965D02* X37325853Y-99566774D01* X37087758Y-100042965D02* X37087758Y-99042965D01* X37087758Y-99042965D02* X37468710Y-99042965D01* X37468710Y-99042965D02* X37563948Y-99090584D01* X37563948Y-99090584D02* X37611567Y-99138203D01* X37611567Y-99138203D02* X37659186Y-99233441D01* X37659186Y-99233441D02* X37659186Y-99376298D01* X37659186Y-99376298D02* X37611567Y-99471536D01* X37611567Y-99471536D02* X37563948Y-99519155D01* X37563948Y-99519155D02* X37468710Y-99566774D01* X37468710Y-99566774D02* X37087758Y-99566774D01* X37992520Y-99042965D02* X38611567Y-99042965D01* X38611567Y-99042965D02* X38278234Y-99423917D01* X38278234Y-99423917D02* X38421091Y-99423917D01* X38421091Y-99423917D02* X38516329Y-99471536D01* X38516329Y-99471536D02* X38563948Y-99519155D01* X38563948Y-99519155D02* X38611567Y-99614393D01* X38611567Y-99614393D02* X38611567Y-99852488D01* X38611567Y-99852488D02* X38563948Y-99947726D01* X38563948Y-99947726D02* X38516329Y-99995346D01* X38516329Y-99995346D02* X38421091Y-100042965D01* X38421091Y-100042965D02* X38135377Y-100042965D01* X38135377Y-100042965D02* X38040139Y-99995346D01* X38040139Y-99995346D02* X37992520Y-99947726D01* X76239723Y-99809112D02* X75906390Y-99332921D01* X75668295Y-99809112D02* X75668295Y-98809112D01* X75668295Y-98809112D02* X76049247Y-98809112D01* X76049247Y-98809112D02* X76144485Y-98856731D01* X76144485Y-98856731D02* X76192104Y-98904350D01* X76192104Y-98904350D02* X76239723Y-98999588D01* X76239723Y-98999588D02* X76239723Y-99142445D01* X76239723Y-99142445D02* X76192104Y-99237683D01* X76192104Y-99237683D02* X76144485Y-99285302D01* X76144485Y-99285302D02* X76049247Y-99332921D01* X76049247Y-99332921D02* X75668295Y-99332921D01* X76620676Y-98904350D02* X76668295Y-98856731D01* X76668295Y-98856731D02* X76763533Y-98809112D01* X76763533Y-98809112D02* X77001628Y-98809112D01* X77001628Y-98809112D02* X77096866Y-98856731D01* X77096866Y-98856731D02* X77144485Y-98904350D01* X77144485Y-98904350D02* X77192104Y-98999588D01* X77192104Y-98999588D02* X77192104Y-99094826D01* X77192104Y-99094826D02* X77144485Y-99237683D01* X77144485Y-99237683D02* X76573057Y-99809112D01* X76573057Y-99809112D02* X77192104Y-99809112D01* X84375666Y-97752819D02* X84375666Y-98467104D01* X84375666Y-98467104D02* X84328047Y-98609961D01* X84328047Y-98609961D02* X84232809Y-98705200D01* X84232809Y-98705200D02* X84089952Y-98752819D01* X84089952Y-98752819D02* X83994714Y-98752819D01* X85375666Y-98752819D02* X84804238Y-98752819D01* X85089952Y-98752819D02* X85089952Y-97752819D01* X85089952Y-97752819D02* X84994714Y-97895676D01* X84994714Y-97895676D02* X84899476Y-97990914D01* X84899476Y-97990914D02* X84804238Y-98038533D01* X45608133Y-96387585D02* X45608133Y-97197108D01* X45608133Y-97197108D02* X45655752Y-97292346D01* X45655752Y-97292346D02* X45703371Y-97339966D01* X45703371Y-97339966D02* X45798609Y-97387585D01* X45798609Y-97387585D02* X45989085Y-97387585D01* X45989085Y-97387585D02* X46084323Y-97339966D01* X46084323Y-97339966D02* X46131942Y-97292346D01* X46131942Y-97292346D02* X46179561Y-97197108D01* X46179561Y-97197108D02* X46179561Y-96387585D01* X47131942Y-96387585D02* X46655752Y-96387585D01* X46655752Y-96387585D02* X46608133Y-96863775D01* X46608133Y-96863775D02* X46655752Y-96816156D01* X46655752Y-96816156D02* X46750990Y-96768537D01* X46750990Y-96768537D02* X46989085Y-96768537D01* X46989085Y-96768537D02* X47084323Y-96816156D01* X47084323Y-96816156D02* X47131942Y-96863775D01* X47131942Y-96863775D02* X47179561Y-96959013D01* X47179561Y-96959013D02* X47179561Y-97197108D01* X47179561Y-97197108D02* X47131942Y-97292346D01* X47131942Y-97292346D02* X47084323Y-97339966D01* X47084323Y-97339966D02* X46989085Y-97387585D01* X46989085Y-97387585D02* X46750990Y-97387585D01* X46750990Y-97387585D02* X46655752Y-97339966D01* X46655752Y-97339966D02* X46608133Y-97292346D01* X73969269Y-99790615D02* X73635936Y-99314424D01* X73397841Y-99790615D02* X73397841Y-98790615D01* X73397841Y-98790615D02* X73778793Y-98790615D01* X73778793Y-98790615D02* X73874031Y-98838234D01* X73874031Y-98838234D02* X73921650Y-98885853D01* X73921650Y-98885853D02* X73969269Y-98981091D01* X73969269Y-98981091D02* X73969269Y-99123948D01* X73969269Y-99123948D02* X73921650Y-99219186D01* X73921650Y-99219186D02* X73874031Y-99266805D01* X73874031Y-99266805D02* X73778793Y-99314424D01* X73778793Y-99314424D02* X73397841Y-99314424D01* X74921650Y-99790615D02* X74350222Y-99790615D01* X74635936Y-99790615D02* X74635936Y-98790615D01* X74635936Y-98790615D02* X74540698Y-98933472D01* X74540698Y-98933472D02* X74445460Y-99028710D01* X74445460Y-99028710D02* X74350222Y-99076329D01* X68450025Y-87584819D02* X68450025Y-88394342D01* X68450025Y-88394342D02* X68497644Y-88489580D01* X68497644Y-88489580D02* X68545263Y-88537200D01* X68545263Y-88537200D02* X68640501Y-88584819D01* X68640501Y-88584819D02* X68830977Y-88584819D01* X68830977Y-88584819D02* X68926215Y-88537200D01* X68926215Y-88537200D02* X68973834Y-88489580D01* X68973834Y-88489580D02* X69021453Y-88394342D01* X69021453Y-88394342D02* X69021453Y-87584819D01* X69926215Y-87918152D02* X69926215Y-88584819D01* X69688120Y-87537200D02* X69450025Y-88251485D01* X69450025Y-88251485D02* X70069072Y-88251485D01* X40006669Y-100010082D02* X39673336Y-99533891D01* X39435241Y-100010082D02* X39435241Y-99010082D01* X39435241Y-99010082D02* X39816193Y-99010082D01* X39816193Y-99010082D02* X39911431Y-99057701D01* X39911431Y-99057701D02* X39959050Y-99105320D01* X39959050Y-99105320D02* X40006669Y-99200558D01* X40006669Y-99200558D02* X40006669Y-99343415D01* X40006669Y-99343415D02* X39959050Y-99438653D01* X39959050Y-99438653D02* X39911431Y-99486272D01* X39911431Y-99486272D02* X39816193Y-99533891D01* X39816193Y-99533891D02* X39435241Y-99533891D01* X40863812Y-99343415D02* X40863812Y-100010082D01* X40625717Y-98962463D02* X40387622Y-99676748D01* X40387622Y-99676748D02* X41006669Y-99676748D01* X35901333Y-103737580D02* X35853714Y-103785200D01* X35853714Y-103785200D02* X35710857Y-103832819D01* X35710857Y-103832819D02* X35615619Y-103832819D01* X35615619Y-103832819D02* X35472762Y-103785200D01* X35472762Y-103785200D02* X35377524Y-103689961D01* X35377524Y-103689961D02* X35329905Y-103594723D01* X35329905Y-103594723D02* X35282286Y-103404247D01* X35282286Y-103404247D02* X35282286Y-103261390D01* X35282286Y-103261390D02* X35329905Y-103070914D01* X35329905Y-103070914D02* X35377524Y-102975676D01* X35377524Y-102975676D02* X35472762Y-102880438D01* X35472762Y-102880438D02* X35615619Y-102832819D01* X35615619Y-102832819D02* X35710857Y-102832819D01* X35710857Y-102832819D02* X35853714Y-102880438D01* X35853714Y-102880438D02* X35901333Y-102928057D01* X36234667Y-102832819D02* X36853714Y-102832819D01* X36853714Y-102832819D02* X36520381Y-103213771D01* X36520381Y-103213771D02* X36663238Y-103213771D01* X36663238Y-103213771D02* X36758476Y-103261390D01* X36758476Y-103261390D02* X36806095Y-103309009D01* X36806095Y-103309009D02* X36853714Y-103404247D01* X36853714Y-103404247D02* X36853714Y-103642342D01* X36853714Y-103642342D02* X36806095Y-103737580D01* X36806095Y-103737580D02* X36758476Y-103785200D01* X36758476Y-103785200D02* X36663238Y-103832819D01* X36663238Y-103832819D02* X36377524Y-103832819D01* X36377524Y-103832819D02* X36282286Y-103785200D01* X36282286Y-103785200D02* X36234667Y-103737580D01* X60626666Y-96736819D02* X60626666Y-97451104D01* X60626666Y-97451104D02* X60579047Y-97593961D01* X60579047Y-97593961D02* X60483809Y-97689200D01* X60483809Y-97689200D02* X60340952Y-97736819D01* X60340952Y-97736819D02* X60245714Y-97736819D01* X61055238Y-96832057D02* X61102857Y-96784438D01* X61102857Y-96784438D02* X61198095Y-96736819D01* X61198095Y-96736819D02* X61436190Y-96736819D01* X61436190Y-96736819D02* X61531428Y-96784438D01* X61531428Y-96784438D02* X61579047Y-96832057D01* X61579047Y-96832057D02* X61626666Y-96927295D01* X61626666Y-96927295D02* X61626666Y-97022533D01* X61626666Y-97022533D02* X61579047Y-97165390D01* X61579047Y-97165390D02* X61007619Y-97736819D01* X61007619Y-97736819D02* X61626666Y-97736819D01* X64730333Y-73384580D02* X64682714Y-73432200D01* X64682714Y-73432200D02* X64539857Y-73479819D01* X64539857Y-73479819D02* X64444619Y-73479819D01* X64444619Y-73479819D02* X64301762Y-73432200D01* X64301762Y-73432200D02* X64206524Y-73336961D01* X64206524Y-73336961D02* X64158905Y-73241723D01* X64158905Y-73241723D02* X64111286Y-73051247D01* X64111286Y-73051247D02* X64111286Y-72908390D01* X64111286Y-72908390D02* X64158905Y-72717914D01* X64158905Y-72717914D02* X64206524Y-72622676D01* X64206524Y-72622676D02* X64301762Y-72527438D01* X64301762Y-72527438D02* X64444619Y-72479819D01* X64444619Y-72479819D02* X64539857Y-72479819D01* X64539857Y-72479819D02* X64682714Y-72527438D01* X64682714Y-72527438D02* X64730333Y-72575057D01* X65682714Y-73479819D02* X65111286Y-73479819D01* X65397000Y-73479819D02* X65397000Y-72479819D01* X65397000Y-72479819D02* X65301762Y-72622676D01* X65301762Y-72622676D02* X65206524Y-72717914D01* X65206524Y-72717914D02* X65111286Y-72765533D01* D10* %TO.C,U1*% X74844000Y-43334000D02* X74844000Y-43634000D01* X74844000Y-43334000D02* X95844000Y-43334000D01* X74844000Y-45734000D02* X74844000Y-46134000D01* X74844000Y-46001000D02* X77851000Y-46001000D01* X74844000Y-48334000D02* X74844000Y-48734000D01* X74844000Y-50834000D02* X74844000Y-51234000D01* X74844000Y-53434000D02* X74844000Y-53834000D01* X74844000Y-55934000D02* X74844000Y-56334000D01* X74844000Y-58434000D02* X74844000Y-58834000D01* X74844000Y-61034000D02* X74844000Y-61434000D01* X74844000Y-63534000D02* X74844000Y-63934000D01* X74844000Y-66134000D02* X74844000Y-66534000D01* X74844000Y-68634000D02* X74844000Y-69034000D01* X74844000Y-71134000D02* X74844000Y-71534000D01* X74844000Y-73734000D02* X74844000Y-74134000D01* X74844000Y-76234000D02* X74844000Y-76634000D01* X74844000Y-78834000D02* X74844000Y-79234000D01* X74844000Y-81334000D02* X74844000Y-81734000D01* X74844000Y-83934000D02* X74844000Y-84334000D01* X74844000Y-86434000D02* X74844000Y-86834000D01* X74844000Y-88934000D02* X74844000Y-89334000D01* X74844000Y-91534000D02* X74844000Y-91934000D01* X77851000Y-46001000D02* X77851000Y-43334000D01* X81644000Y-94334000D02* X74844000Y-94334000D01* X83844000Y-94334000D02* X84244000Y-94334000D01* X86444000Y-94334000D02* X86844000Y-94334000D01* X95844000Y-43334000D02* X95844000Y-43634000D01* X95844000Y-45734000D02* X95844000Y-46134000D01* X95844000Y-48334000D02* X95844000Y-48734000D01* X95844000Y-50834000D02* X95844000Y-51234000D01* X95844000Y-53434000D02* X95844000Y-53834000D01* X95844000Y-55934000D02* X95844000Y-56334000D01* X95844000Y-58434000D02* X95844000Y-58834000D01* X95844000Y-61034000D02* X95844000Y-61434000D01* X95844000Y-63534000D02* X95844000Y-63934000D01* X95844000Y-66134000D02* X95844000Y-66534000D01* X95844000Y-68634000D02* X95844000Y-69034000D01* X95844000Y-71134000D02* X95844000Y-71534000D01* X95844000Y-73734000D02* X95844000Y-74134000D01* X95844000Y-76234000D02* X95844000Y-76634000D01* X95844000Y-78834000D02* X95844000Y-79234000D01* X95844000Y-81334000D02* X95844000Y-81734000D01* X95844000Y-83934000D02* X95844000Y-84334000D01* X95844000Y-86434000D02* X95844000Y-86834000D01* X95844000Y-88934000D02* X95844000Y-89334000D01* X95844000Y-91534000D02* X95844000Y-91934000D01* X95844000Y-94334000D02* X89044000Y-94334000D01* %TO.C,U2*% X38385523Y-43318249D02* X38385523Y-43618249D01* X38385523Y-43318249D02* X59385523Y-43318249D01* X38385523Y-45718249D02* X38385523Y-46118249D01* X38385523Y-45985249D02* X41392523Y-45985249D01* X38385523Y-48318249D02* X38385523Y-48718249D01* X38385523Y-50818249D02* X38385523Y-51218249D01* X38385523Y-53418249D02* X38385523Y-53818249D01* X38385523Y-55918249D02* X38385523Y-56318249D01* X38385523Y-58418249D02* X38385523Y-58818249D01* X38385523Y-61018249D02* X38385523Y-61418249D01* X38385523Y-63518249D02* X38385523Y-63918249D01* X38385523Y-66118249D02* X38385523Y-66518249D01* X38385523Y-68618249D02* X38385523Y-69018249D01* X38385523Y-71118249D02* X38385523Y-71518249D01* X38385523Y-73718249D02* X38385523Y-74118249D01* X38385523Y-76218249D02* X38385523Y-76618249D01* X38385523Y-78818249D02* X38385523Y-79218249D01* X38385523Y-81318249D02* X38385523Y-81718249D01* X38385523Y-83918249D02* X38385523Y-84318249D01* X38385523Y-86418249D02* X38385523Y-86818249D01* X38385523Y-88918249D02* X38385523Y-89318249D01* X38385523Y-91518249D02* X38385523Y-91918249D01* X41392523Y-45985249D02* X41392523Y-43318249D01* X45185523Y-94318249D02* X38385523Y-94318249D01* X47385523Y-94318249D02* X47785523Y-94318249D01* X49985523Y-94318249D02* X50385523Y-94318249D01* X59385523Y-43318249D02* X59385523Y-43618249D01* X59385523Y-45718249D02* X59385523Y-46118249D01* X59385523Y-48318249D02* X59385523Y-48718249D01* X59385523Y-50818249D02* X59385523Y-51218249D01* X59385523Y-53418249D02* X59385523Y-53818249D01* X59385523Y-55918249D02* X59385523Y-56318249D01* X59385523Y-58418249D02* X59385523Y-58818249D01* X59385523Y-61018249D02* X59385523Y-61418249D01* X59385523Y-63518249D02* X59385523Y-63918249D01* X59385523Y-66118249D02* X59385523Y-66518249D01* X59385523Y-68618249D02* X59385523Y-69018249D01* X59385523Y-71118249D02* X59385523Y-71518249D01* X59385523Y-73718249D02* X59385523Y-74118249D01* X59385523Y-76218249D02* X59385523Y-76618249D01* X59385523Y-78818249D02* X59385523Y-79218249D01* X59385523Y-81318249D02* X59385523Y-81718249D01* X59385523Y-83918249D02* X59385523Y-84318249D01* X59385523Y-86418249D02* X59385523Y-86818249D01* X59385523Y-88918249D02* X59385523Y-89318249D01* X59385523Y-91518249D02* X59385523Y-91918249D01* X59385523Y-94318249D02* X52585523Y-94318249D01* %TO.C,C2*% X71112748Y-74195000D02* X71635252Y-74195000D01* X71112748Y-75665000D02* X71635252Y-75665000D01* %TO.C,J4*% X41966000Y-114154000D02* X41966000Y-114674000D01* X41966000Y-114674000D02* X56586000Y-114674000D01* X42616000Y-99194000D02* X42616000Y-102524000D01* X42616000Y-99194000D02* X55936000Y-99194000D01* X42616000Y-114154000D02* X41966000Y-114154000D01* X42616000Y-114154000D02* X42616000Y-106044000D01* X44876000Y-98974000D02* X46676000Y-98974000D01* X55936000Y-99194000D02* X55936000Y-102524000D01* X55936000Y-106044000D02* X55936000Y-114154000D01* X56586000Y-114154000D02* X55936000Y-114154000D01* X56586000Y-114674000D02* X56586000Y-114154000D01* %TO.C,J3*% X94337537Y-98465757D02* X95667537Y-98465757D01* X94337537Y-99795757D02* X94337537Y-98465757D01* X94337537Y-101065757D02* X94337537Y-106205757D01* X94337537Y-101065757D02* X96997537Y-101065757D01* X94337537Y-106205757D02* X96997537Y-106205757D01* X96997537Y-101065757D02* X96997537Y-106205757D01* %TO.C,C4*% X74903000Y-102608748D02* X74903000Y-103131252D01* X73433000Y-102608748D02* X73433000Y-103131252D01* D14* %TO.C,U3*% X78256523Y-97660000D02* X78256523Y-95859975D01* X81356549Y-97660000D02* X81356549Y-95859975D01* X81584438Y-95362997D02* G75* G03* X81584438Y-95362997I-127000J0D01* G01* D15* X81271510Y-95359975D02* G75* G03* X81271510Y-95359975I-29998J0D01* G01* D10* %TO.C,R3*% X38581000Y-96800936D02* X38581000Y-97255064D01* X37111000Y-96800936D02* X37111000Y-97255064D01* %TO.C,R2*% X77138200Y-96546936D02* X77138200Y-97001064D01* X75668200Y-96546936D02* X75668200Y-97001064D01* %TO.C,J1*% X77272000Y-114154000D02* X77272000Y-114674000D01* X77272000Y-114674000D02* X91892000Y-114674000D01* X77922000Y-99194000D02* X77922000Y-102524000D01* X77922000Y-99194000D02* X91242000Y-99194000D01* X77922000Y-114154000D02* X77272000Y-114154000D01* X77922000Y-114154000D02* X77922000Y-106044000D01* X80182000Y-98974000D02* X81982000Y-98974000D01* X91242000Y-99194000D02* X91242000Y-102524000D01* X91242000Y-106044000D02* X91242000Y-114154000D01* X91892000Y-114154000D02* X91242000Y-114154000D01* X91892000Y-114674000D02* X91892000Y-114154000D01* D14* %TO.C,U5*% X41919987Y-97670000D02* X41919987Y-95869975D01* X45020013Y-97670000D02* X45020013Y-95869975D01* X45247902Y-95372997D02* G75* G03* X45247902Y-95372997I-127000J0D01* G01* D15* X44934974Y-95369975D02* G75* G03* X44934974Y-95369975I-29998J0D01* G01* D10* %TO.C,R1*% X74750600Y-96546936D02* X74750600Y-97001064D01* X73280600Y-96546936D02* X73280600Y-97001064D01* %TO.C,U4*% X67310000Y-81916110D02* X63860000Y-81916110D01* X67310000Y-81916110D02* X69260000Y-81916110D01* X67310000Y-87036110D02* X65360000Y-87036110D01* X67310000Y-87036110D02* X69260000Y-87036110D01* %TO.C,R4*% X40740000Y-96800936D02* X40740000Y-97255064D01* X39270000Y-96800936D02* X39270000Y-97255064D01* %TO.C,C3*% X38835000Y-102989748D02* X38835000Y-103512252D01* X37365000Y-102989748D02* X37365000Y-103512252D01* %TO.C,J2*% X59401042Y-98387876D02* X60731042Y-98387876D01* X59401042Y-99717876D02* X59401042Y-98387876D01* X59401042Y-100987876D02* X59401042Y-106127876D01* X59401042Y-100987876D02* X62061042Y-100987876D01* X59401042Y-106127876D02* X62061042Y-106127876D01* X62061042Y-100987876D02* X62061042Y-106127876D01* %TO.C,C1*% X63380252Y-75665000D02* X62857748Y-75665000D01* X63380252Y-74195000D02* X62857748Y-74195000D01* %TD*% M02* ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-NPTH.drl ================================================ M48 ; DRILL file {KiCad 7.0.9} date Saturday, September 14, 2024 at 04:33:36 PM ; FORMAT={-:-/ absolute / inch / decimal} ; #@! TF.CreationDate,2024-09-14T16:33:36+02:00 ; #@! TF.GenerationSoftware,Kicad,Pcbnew,7.0.9 ; #@! TF.FileFunction,NonPlated,1,2,NPTH FMAT,2 INCH ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill T1C0.0591 ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill T2C0.0709 % G90 G05 T1 X1.8292Y-1.8838 X2.0201Y-1.8838 X3.2645Y-1.8844 X3.4555Y-1.8844 T2 X1.8173Y-1.7645 X2.0319Y-1.7645 X3.2527Y-1.7651 X3.4673Y-1.7651 T0 M30 ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-PTH.drl ================================================ M48 ; DRILL file {KiCad 7.0.9} date Saturday, September 14, 2024 at 04:33:36 PM ; FORMAT={-:-/ absolute / inch / decimal} ; #@! TF.CreationDate,2024-09-14T16:33:36+02:00 ; #@! TF.GenerationSoftware,Kicad,Pcbnew,7.0.9 ; #@! TF.FileFunction,Plated,1,2,PTH FMAT,2 INCH ; #@! TA.AperFunction,Plated,PTH,ComponentDrill T1C0.0374 ; #@! TA.AperFunction,Plated,PTH,ComponentDrill T2C0.0394 ; #@! TA.AperFunction,Plated,PTH,ComponentDrill T3C0.0402 ; #@! TA.AperFunction,Plated,PTH,ComponentDrill T4C0.0906 ; #@! TA.AperFunction,Plated,PTH,ComponentDrill T5C0.1063 % G90 G05 T1 X1.8022Y-3.999 X1.9006Y-3.999 X1.9794Y-3.999 X2.0778Y-3.999 X3.1922Y-3.999 X3.2906Y-3.999 X3.3694Y-3.999 X3.4678Y-3.999 T2 X2.391Y-3.9259 X2.391Y-4.0259 X2.391Y-4.1259 X3.7664Y-3.929 X3.7664Y-4.029 X3.7664Y-4.129 T3 X1.5746Y-1.7594 X1.5746Y-1.8594 X1.5746Y-1.9594 X1.5746Y-2.0594 X1.5746Y-2.1594 X1.5746Y-2.2594 X1.5746Y-2.3594 X1.5746Y-2.4594 X1.5746Y-2.5594 X1.5746Y-2.6594 X1.5746Y-2.7594 X1.5746Y-2.8594 X1.5746Y-2.9594 X1.5746Y-3.0594 X1.5746Y-3.1594 X1.5746Y-3.2594 X1.5746Y-3.3594 X1.5746Y-3.4594 X1.5746Y-3.5594 X1.5746Y-3.6594 X1.8246Y-3.6503 X1.9246Y-3.6503 X2.0246Y-3.6503 X2.2746Y-1.7594 X2.2746Y-1.8594 X2.2746Y-1.9594 X2.2746Y-2.0594 X2.2746Y-2.1594 X2.2746Y-2.2594 X2.2746Y-2.3594 X2.2746Y-2.4594 X2.2746Y-2.5594 X2.2746Y-2.6594 X2.2746Y-2.7594 X2.2746Y-2.8594 X2.2746Y-2.9594 X2.2746Y-3.0594 X2.2746Y-3.1594 X2.2746Y-3.2594 X2.2746Y-3.3594 X2.2746Y-3.4594 X2.2746Y-3.5594 X2.2746Y-3.6594 X3.01Y-1.76 X3.01Y-1.86 X3.01Y-1.96 X3.01Y-2.06 X3.01Y-2.16 X3.01Y-2.26 X3.01Y-2.36 X3.01Y-2.46 X3.01Y-2.56 X3.01Y-2.66 X3.01Y-2.76 X3.01Y-2.86 X3.01Y-2.96 X3.01Y-3.06 X3.01Y-3.16 X3.01Y-3.26 X3.01Y-3.36 X3.01Y-3.46 X3.01Y-3.56 X3.01Y-3.66 X3.26Y-3.6509 X3.36Y-3.6509 X3.46Y-3.6509 X3.71Y-1.76 X3.71Y-1.86 X3.71Y-1.96 X3.71Y-2.06 X3.71Y-2.16 X3.71Y-2.26 X3.71Y-2.36 X3.71Y-2.46 X3.71Y-2.56 X3.71Y-2.66 X3.71Y-2.76 X3.71Y-2.86 X3.71Y-2.96 X3.71Y-3.06 X3.71Y-3.16 X3.71Y-3.26 X3.71Y-3.36 X3.71Y-3.46 X3.71Y-3.56 X3.71Y-3.66 T4 X1.6813Y-4.1057 X2.1987Y-4.1057 X3.0713Y-4.1057 X3.5887Y-4.1057 T5 X1.49Y-4.39 X2.6502Y-1.7787 X3.81Y-4.39 T0 M30 ================================================ FILE: pcb/v1.1/Gerber/DeskHop_Rev1-job.gbrjob ================================================ { "Header": { "GenerationSoftware": { "Vendor": "KiCad", "Application": "Pcbnew", "Version": "7.0.9" }, "CreationDate": "2024-09-14T16:33:58+02:00" }, "GeneralSpecs": { "ProjectId": { "Name": "DeskHop_Rev1", "GUID": "4465736b-486f-4705-9f52-6576312e6b69", "Revision": "rev?" }, "Size": { "X": 66.9662, "Y": 74.5313 }, "LayerNumber": 2, "BoardThickness": 1.6, "Finish": "None" }, "DesignRules": [ { "Layers": "Outer", "PadToPad": 0.2, "PadToTrack": 0.2, "TrackToTrack": 0.2, "MinLineWidth": 0.3, "TrackToRegion": 0.25, "RegionToRegion": 0.25 } ], "FilesAttributes": [ { "Path": "DeskHop_Rev1-F_Cu.gbr", "FileFunction": "Copper,L1,Top", "FilePolarity": "Positive" }, { "Path": "DeskHop_Rev1-B_Cu.gbr", "FileFunction": "Copper,L2,Bot", "FilePolarity": "Positive" }, { "Path": "DeskHop_Rev1-F_Paste.gbr", "FileFunction": "SolderPaste,Top", "FilePolarity": "Positive" }, { "Path": "DeskHop_Rev1-F_Silkscreen.gbr", "FileFunction": "Legend,Top", "FilePolarity": "Positive" }, { "Path": "DeskHop_Rev1-B_Silkscreen.gbr", "FileFunction": "Legend,Bot", "FilePolarity": "Positive" }, { "Path": "DeskHop_Rev1-F_Mask.gbr", "FileFunction": "SolderMask,Top", "FilePolarity": "Negative" }, { "Path": "DeskHop_Rev1-B_Mask.gbr", "FileFunction": "SolderMask,Bot", "FilePolarity": "Negative" }, { "Path": "DeskHop_Rev1-Edge_Cuts.gbr", "FileFunction": "Profile", "FilePolarity": "Positive" } ], "MaterialStackup": [ { "Type": "Legend", "Name": "Top Silk Screen" }, { "Type": "SolderPaste", "Name": "Top Solder Paste" }, { "Type": "SolderMask", "Thickness": 0.01, "Name": "Top Solder Mask" }, { "Type": "Copper", "Thickness": 0.035, "Name": "F.Cu" }, { "Type": "Dielectric", "Thickness": 1.51, "Material": "FR4", "Name": "F.Cu/B.Cu", "Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)" }, { "Type": "Copper", "Thickness": 0.035, "Name": "B.Cu" }, { "Type": "SolderMask", "Thickness": 0.01, "Name": "Bottom Solder Mask" }, { "Type": "SolderPaste", "Name": "Bottom Solder Paste" }, { "Type": "Legend", "Name": "Bottom Silk Screen" } ] } ================================================ FILE: pico-sdk/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.13) # Note: this CMakeLists.txt can be used as a top-level CMakeLists.txt for the SDK itself. For all other uses # it is included as a subdirectory via the pico_sdk_init() method provided by pico_sdk_init.cmake if (NOT TARGET _pico_sdk_inclusion_marker) add_library(_pico_sdk_inclusion_marker INTERFACE) # This is a no-op unless we are the top-level CMakeLists.txt include(pico_sdk_init.cmake) project(pico_sdk C CXX ASM) string(REGEX MATCH "Clang" PICO_C_COMPILER_IS_CLANG "${CMAKE_C_COMPILER_ID}") string(REGEX MATCH "GNU" PICO_C_COMPILER_IS_GNU "${CMAKE_C_COMPILER_ID}") string(REGEX MATCH "IAR" PICO_C_COMPILER_IS_IAR "${CMAKE_C_COMPILER_ID}") pico_register_common_scope_var(PICO_C_COMPILER_IS_CLANG) pico_register_common_scope_var(PICO_C_COMPILER_IS_GNU) pico_register_common_scope_var(PICO_C_COMPILER_IS_IAR) message("Build type is ${CMAKE_BUILD_TYPE}") if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") if (PICO_DEOPTIMIZED_DEBUG) message("Using fully de-optimized debug build (set PICO_DEOPTIMIZED_DEBUG=0 to optimize)") else() message("Using regular optimized debug build (set PICO_DEOPTIMIZED_DEBUG=1 to de-optimize)") endif() endif() pico_is_top_level_project(PICO_SDK_TOP_LEVEL_PROJECT) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 11) if (NOT PICO_SDK_TOP_LEVEL_PROJECT) set(PICO_SDK 1 PARENT_SCOPE) endif() # allow customization add_sub_list_dirs(PICO_SDK_PRE_LIST_DIRS) add_sub_list_files(PICO_SDK_PRE_LIST_FILES) add_subdirectory(tools) add_subdirectory(src) # allow customization add_sub_list_dirs(PICO_SDK_POST_LIST_DIRS) add_sub_list_files(PICO_SDK_POST_LIST_FILES) if (PICO_SDK_TOP_LEVEL_PROJECT AND NOT DEFINED PICO_SDK_TESTS_ENABLED) set(PICO_SDK_TESTS_ENABLED 1) endif() if (PICO_SDK_TESTS_ENABLED) add_subdirectory(test) endif () set(PICO_SDK_TESTS_ENABLED "${PICO_SDK_TESTS_ENABLED}" CACHE INTERNAL "Enable build of SDK tests") if (NOT PICO_SDK_TOP_LEVEL_PROJECT) pico_promote_common_scope_vars() endif() endif() ================================================ FILE: pico-sdk/cmake/Platform/PICO.cmake ================================================ # this is included because toolchain file sets SYSTEM_NAME=PICO set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) set(CMAKE_EXECUTABLE_SUFFIX .elf) ================================================ FILE: pico-sdk/cmake/pico_pre_load_platform.cmake ================================================ # PICO_CMAKE_CONFIG: PICO_PLATFORM, platform to build for e.g. rp2040/host, default=rp2040 or environment value, group=build if (DEFINED ENV{PICO_PLATFORM} AND (NOT PICO_PLATFORM)) set(PICO_PLATFORM $ENV{PICO_PLATFORM}) message("Using PICO_PLATFORM from environment ('${PICO_PLATFORM}')") else() if (NOT PICO_PLATFORM) set(PICO_PLATFORM "rp2040") pico_message("Defaulting PICO_PLATFORM to ${PICO_PLATFORM} since not specified.") else() message("PICO platform is ${PICO_PLATFORM}.") endif() endif () set(PICO_PLATFORM ${PICO_PLATFORM} CACHE STRING "PICO Build platform (e.g. rp2040, host)") # PICO_CMAKE_CONFIG: PICO_CMAKE_PRELOAD_PLATFORM_FILE, custom CMake file to use to set up the platform environment, default=none, group=build set(PICO_CMAKE_PRELOAD_PLATFORM_FILE "" CACHE INTERNAL "") set(PICO_CMAKE_PRELOAD_PLATFORM_DIR "${CMAKE_CURRENT_LIST_DIR}/preload/platforms" CACHE INTERNAL "") if (NOT PICO_CMAKE_PRELOAD_PLATFORM_FILE) set(PICO_CMAKE_PRELOAD_PLATFORM_FILE ${PICO_CMAKE_PRELOAD_PLATFORM_DIR}/${PICO_PLATFORM}.cmake CACHE INTERNAL "") endif () if (NOT EXISTS "${PICO_CMAKE_PRELOAD_PLATFORM_FILE}") message(FATAL_ERROR "${PICO_CMAKE_PRELOAD_PLATFORM_FILE} does not exist. \ Either specify a valid PICO_PLATFORM (or PICO_CMAKE_PRELOAD_PLATFORM_FILE).") endif () include(${PICO_CMAKE_PRELOAD_PLATFORM_FILE}) ================================================ FILE: pico-sdk/cmake/pico_pre_load_toolchain.cmake ================================================ # PICO_CMAKE_CONFIG: PICO_TOOLCHAIN_PATH, Path to search for compiler, default=none (i.e. search system paths), group=build set(PICO_TOOLCHAIN_PATH "${PICO_TOOLCHAIN_PATH}" CACHE INTERNAL "") # Set a default build type if none was specified set(default_build_type "Release") if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Defaulting build type to '${default_build_type}' since not specified.") set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build, options are: 'Debug', 'Release', 'MinSizeRel', 'RelWithDebInfo'." FORCE) # Set the possible values of build type for cmake-gui set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() if (CMAKE_BUILD_TYPE STREQUAL "Default") error("Default build type is NOT supported") endif() # PICO_CMAKE_CONFIG: PICO_COMPILER, Optionally specifies a different compiler (other than pico_arm_gcc.cmake) - this is not yet fully supported, default=none, group=build # If PICO_COMPILER is specified, set toolchain file to ${PICO_COMPILER}.cmake. if (DEFINED PICO_COMPILER) if (DEFINED CMAKE_TOOLCHAIN_FILE) get_filename_component(toolchain "${CMAKE_TOOLCHAIN_FILE}" NAME_WE) if (NOT "${PICO_COMPILER}" STREQUAL "${toolchain}") message(WARNING "CMAKE_TOOLCHAIN_FILE is already defined to ${toolchain}.cmake, you\ need to delete cache and reconfigure if you want to switch compiler.") endif () else () set(toolchain_dir "${CMAKE_CURRENT_LIST_DIR}/preload/toolchains") set(toolchain_file "${toolchain_dir}/${PICO_COMPILER}.cmake") if (EXISTS "${toolchain_file}") set(CMAKE_TOOLCHAIN_FILE "${toolchain_file}" CACHE INTERNAL "") else () # todo improve message message(FATAL_ERROR "Toolchain file \"${PICO_COMPILER}.cmake\" does not exist, please\ select one from \"cmake/toolchains\" folder.") endif () endif () message("PICO compiler is ${PICO_COMPILER}") endif () unset(PICO_COMPILER CACHE) ================================================ FILE: pico-sdk/cmake/pico_utils.cmake ================================================ function(pico_message param) if (${ARGC} EQUAL 1) message("${param}") return() endif () if (NOT ${ARGC} EQUAL 2) message(FATAL_ERROR "Expect at most 2 arguments") endif () message("${param}" "${ARGV1}") endfunction() macro(assert VAR MSG) if (NOT ${VAR}) message(FATAL_ERROR "${MSG}") endif () endmacro() function(pico_find_in_paths OUT PATHS NAME) foreach(PATH IN LISTS ${PATHS}) if (EXISTS ${PATH}/${NAME}) get_filename_component(FULLNAME ${PATH}/${NAME} ABSOLUTE) set(${OUT} ${FULLNAME} PARENT_SCOPE) return() endif() endforeach() set(${OUT} "" PARENT_SCOPE) endfunction() ================================================ FILE: pico-sdk/cmake/preload/platforms/host.cmake ================================================ ================================================ FILE: pico-sdk/cmake/preload/platforms/pico/pico.cmake ================================================ if (NOT (DEFINED PICO_COMPILER OR DEFINED CMAKE_TOOLCHAIN_FILE)) pico_message("Defaulting PICO platform compiler to pico_arm_gcc since not specified.") set(PICO_COMPILER "pico_arm_gcc") endif () ================================================ FILE: pico-sdk/cmake/preload/platforms/rp2040.cmake ================================================ include(${CMAKE_CURRENT_LIST_DIR}/pico/pico.cmake) ================================================ FILE: pico-sdk/cmake/preload/toolchains/find_compiler.cmake ================================================ # Toolchain file is processed multiple times, however, it cannot access CMake cache on some runs. # We store the search path in an environment variable so that we can always access it. if (NOT "${PICO_TOOLCHAIN_PATH}" STREQUAL "") set(ENV{PICO_TOOLCHAIN_PATH} "${PICO_TOOLCHAIN_PATH}") endif () # Find the compiler executable and store its path in a cache entry ${compiler_path}. # If not found, issue a fatal message and stop processing. PICO_TOOLCHAIN_PATH can be provided from # commandline as additional search path. function(pico_find_compiler compiler_path compiler_exe) # Search user provided path first. find_program( ${compiler_path} ${compiler_exe} PATHS ENV PICO_TOOLCHAIN_PATH PATH_SUFFIXES bin NO_DEFAULT_PATH ) # If not then search system paths. if ("${${compiler_path}}" STREQUAL "${compiler_path}-NOTFOUND") if (DEFINED ENV{PICO_TOOLCHAIN_PATH}) message(WARNING "PICO_TOOLCHAIN_PATH specified ($ENV{PICO_TOOLCHAIN_PATH}), but ${compiler_exe} not found there") endif() find_program(${compiler_path} ${compiler_exe}) endif () if ("${${compiler_path}}" STREQUAL "${compiler_path}-NOTFOUND") set(PICO_TOOLCHAIN_PATH "" CACHE PATH "Path to search for compiler.") message(FATAL_ERROR "Compiler '${compiler_exe}' not found, you can specify search path with\ \"PICO_TOOLCHAIN_PATH\".") endif () endfunction() ================================================ FILE: pico-sdk/cmake/preload/toolchains/pico_arm_clang.cmake ================================================ # NOTE: THIS IS A WIP ONLY PICO_ARM_GCC IS CURRENTLY SUPPORTED, however should work with LLVM Embedded Toolchain for ARM # version 14.0.0 https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/tag/release-14.0.0 # todo there is probably a more "cmake" way of doing this going thru the standard path with our "PICO" platform # i.e. CMakeInformation and whatnot include(${CMAKE_CURRENT_LIST_DIR}/find_compiler.cmake) # include our Platform/pico.cmake set(CMAKE_SYSTEM_NAME PICO) set(CMAKE_SYSTEM_PROCESSOR cortex-m0plus) # Find CLANG pico_find_compiler(PICO_COMPILER_CC clang) pico_find_compiler(PICO_COMPILER_CXX clang) #pico_find_compiler(PICO_COMPILER_ASM armasm) set(PICO_COMPILER_ASM "${PICO_COMPILER_CC}" CACHE INTERNAL "") pico_find_compiler(PICO_OBJCOPY llvm-objcopy) pico_find_compiler(PICO_OBJDUMP llvm-objdump) # Specify the cross compiler. set(CMAKE_C_COMPILER ${PICO_COMPILER_CC} CACHE FILEPATH "C compiler") set(CMAKE_CXX_COMPILER ${PICO_COMPILER_CXX} CACHE FILEPATH "C++ compiler") set(CMAKE_C_OUTPUT_EXTENSION .o) # todo should we be including CMakeASMInformation anyway - i guess that is host side set(CMAKE_ASM_COMPILER ${PICO_COMPILER_ASM} CACHE FILEPATH "ASM compiler") set(CMAKE_ASM_COMPILE_OBJECT " -o -c ") set(CMAKE_INCLUDE_FLAG_ASM "-I") set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "") set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "") # Add target system root to cmake find path. get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY) get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY) # Look for includes and libraries only in the target system prefix. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) option(PICO_DEOPTIMIZED_DEBUG "Build debug builds with -O0" 0) # Oz is preferred for Clang (verses CMake default -Os) see also https://gitlab.kitware.com/cmake/cmake/-/issues/22458 set(CMAKE_C_FLAGS_MINSIZEREL "-Oz -DNDEBUG") set(ARM_TOOLCHAIN_COMMON_FLAGS "--target=armv6m-none-eabi -mfloat-abi=soft -march=armv6m --sysroot ${PICO_COMPILER_DIR}/../lib/clang-runtimes/armv6m_soft_nofp") include(${CMAKE_CURRENT_LIST_DIR}/set_flags.cmake) ================================================ FILE: pico-sdk/cmake/preload/toolchains/pico_arm_clang_arm.cmake ================================================ # NOTE: THIS IS A WIP ONLY PICO_ARM_GCC IS CURRENTLY SUPPORTED # todo there is probably a more "cmake" way of doing this going thru the standard path with our "PICO" platform # i.e. CMakeInformation and whatnot include(${CMAKE_CURRENT_LIST_DIR}/find_compiler.cmake) # include our Platform/PICO.cmake set(CMAKE_SYSTEM_NAME PICO) set(CMAKE_SYSTEM_PROCESSOR cortex-m0plus) # Find ARMClang. pico_find_compiler(PICO_COMPILER_CC armclang) pico_find_compiler(PICO_COMPILER_CXX armclang) pico_find_compiler(PICO_COMPILER_ASM armasm) set(PICO_COMPILER_ASM "${PICO_COMPILER_ASM}" CACHE INTERNAL "") pico_find_compiler(PICO_OBJCOPY llvm-objcopy) pico_find_compiler(PICO_OBJDUMP llvm-objdump) # Specify the cross compiler. set(CMAKE_C_COMPILER ${PICO_COMPILER_CC} CACHE FILEPATH "C compiler") set(CMAKE_CXX_COMPILER ${PICO_COMPILER_CXX} CACHE FILEPATH "C++ compiler") set(CMAKE_C_OUTPUT_EXTENSION .o) # todo should we be including CMakeASMInformation anyway - i guess that is host side set(CMAKE_ASM_COMPILER ${PICO_COMPILER_ASM} CACHE FILEPATH "ASM compiler") set(CMAKE_ASM_COMPILE_OBJECT " -o -c ") set(CMAKE_INCLUDE_FLAG_ASM "-I") set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "") set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "") # Add target system root to cmake find path. get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY) get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY) # Look for includes and libraries only in the target system prefix. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) option(PICO_DEOPTIMIZED_DEBUG "Build debug builds with -O0" 0) set(ARM_TOOLCHAIN_COMMON_FLAGS " --cpu=Cortex-M0plus") include(${CMAKE_CURRENT_LIST_DIR}/set_flags.cmake) ================================================ FILE: pico-sdk/cmake/preload/toolchains/pico_arm_gcc.cmake ================================================ # todo there is probably a more "cmake" way of doing this going thru the standard path with our "PICO" platform # i.e. CMakeInformation and whatnot include(${CMAKE_CURRENT_LIST_DIR}/find_compiler.cmake) # include our Platform/PICO.cmake set(CMAKE_SYSTEM_NAME PICO) set(CMAKE_SYSTEM_PROCESSOR cortex-m0plus) if (NOT PICO_GCC_TRIPLE) if (DEFINED ENV{PICO_GCC_TRIPLE}) set(PICO_GCC_TRIPLE $ENV{PICO_GCC_TRIPLE}) message("PICO_GCC_TRIPLE set from environment: $ENV{PICO_GCC_TRIPLE}") else() set(PICO_GCC_TRIPLE arm-none-eabi) #pico_message_debug("PICO_GCC_TRIPLE defaulted to arm-none-eabi") endif() endif() # Find GCC for ARM. pico_find_compiler(PICO_COMPILER_CC ${PICO_GCC_TRIPLE}-gcc) pico_find_compiler(PICO_COMPILER_CXX ${PICO_GCC_TRIPLE}-g++) set(PICO_COMPILER_ASM "${PICO_COMPILER_CC}" CACHE INTERNAL "") pico_find_compiler(PICO_OBJCOPY ${PICO_GCC_TRIPLE}-objcopy) pico_find_compiler(PICO_OBJDUMP ${PICO_GCC_TRIPLE}-objdump) # Specify the cross compiler. set(CMAKE_C_COMPILER ${PICO_COMPILER_CC} CACHE FILEPATH "C compiler") set(CMAKE_CXX_COMPILER ${PICO_COMPILER_CXX} CACHE FILEPATH "C++ compiler") set(CMAKE_C_OUTPUT_EXTENSION .o) # todo should we be including CMakeASMInformation anyway - i guess that is host side set(CMAKE_ASM_COMPILER ${PICO_COMPILER_ASM} CACHE FILEPATH "ASM compiler") set(CMAKE_ASM_COMPILE_OBJECT " -o -c ") set(CMAKE_INCLUDE_FLAG_ASM "-I") set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "") set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "") # Add target system root to cmake find path. get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY) get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY) # Look for includes and libraries only in the target system prefix. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) option(PICO_DEOPTIMIZED_DEBUG "Build debug builds with -O0" 0) # on ARM -mcpu should not be mixed with -march set(ARM_TOOLCHAIN_COMMON_FLAGS " -mcpu=cortex-m0plus -mthumb") include(${CMAKE_CURRENT_LIST_DIR}/set_flags.cmake) ================================================ FILE: pico-sdk/cmake/preload/toolchains/set_flags.cmake ================================================ get_property(IS_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE) foreach(LANG IN ITEMS C CXX ASM) set(CMAKE_${LANG}_FLAGS_INIT "${ARM_TOOLCHAIN_COMMON_FLAGS}") if (PICO_DEOPTIMIZED_DEBUG) set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-O0") else() set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-Og") endif() set(CMAKE_${LANG}_LINK_FLAGS "-Wl,--build-id=none") # try_compile is where the feature testing is done, and at that point, # pico_standard_link is not ready to be linked in to provide essential # functions like _exit. So pass -nostdlib so it doesn't link in an exit() # function at all. if(IS_IN_TRY_COMPILE) set(CMAKE_${LANG}_LINK_FLAGS "${CMAKE_${LANG}_LINK_FLAGS} -nostdlib") endif() endforeach() ================================================ FILE: pico-sdk/lib/tinyusb/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2018, hathach (tinyusb.org) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/ansi_escape.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ /** \ingroup group_board * \defgroup group_ansi_esc ANSI Escape Code * @{ */ #ifndef _TUSB_ANSI_ESC_CODE_H_ #define _TUSB_ANSI_ESC_CODE_H_ #ifdef __cplusplus extern "C" { #endif #define CSI_CODE(seq) "\33[" seq #define CSI_SGR(x) CSI_CODE(#x) "m" //------------- Cursor movement -------------// /** \defgroup group_ansi_cursor Cursor Movement * @{ */ #define ANSI_CURSOR_UP(n) CSI_CODE(#n "A") ///< Move cursor up #define ANSI_CURSOR_DOWN(n) CSI_CODE(#n "B") ///< Move cursor down #define ANSI_CURSOR_FORWARD(n) CSI_CODE(#n "C") ///< Move cursor forward #define ANSI_CURSOR_BACKWARD(n) CSI_CODE(#n "D") ///< Move cursor backward #define ANSI_CURSOR_LINE_DOWN(n) CSI_CODE(#n "E") ///< Move cursor to the beginning of the line (n) down #define ANSI_CURSOR_LINE_UP(n) CSI_CODE(#n "F") ///< Move cursor to the beginning of the line (n) up #define ANSI_CURSOR_POSITION(n, m) CSI_CODE(#n ";" #m "H") ///< Move cursor to position (n, m) /** @} */ //------------- Screen -------------// /** \defgroup group_ansi_screen Screen Control * @{ */ #define ANSI_ERASE_SCREEN(n) CSI_CODE(#n "J") ///< Erase the screen #define ANSI_ERASE_LINE(n) CSI_CODE(#n "K") ///< Erase the line (n) #define ANSI_SCROLL_UP(n) CSI_CODE(#n "S") ///< Scroll the whole page up (n) lines #define ANSI_SCROLL_DOWN(n) CSI_CODE(#n "T") ///< Scroll the whole page down (n) lines /** @} */ //------------- Text Color -------------// /** \defgroup group_ansi_text Text Color * @{ */ #define ANSI_TEXT_BLACK CSI_SGR(30) #define ANSI_TEXT_RED CSI_SGR(31) #define ANSI_TEXT_GREEN CSI_SGR(32) #define ANSI_TEXT_YELLOW CSI_SGR(33) #define ANSI_TEXT_BLUE CSI_SGR(34) #define ANSI_TEXT_MAGENTA CSI_SGR(35) #define ANSI_TEXT_CYAN CSI_SGR(36) #define ANSI_TEXT_WHITE CSI_SGR(37) #define ANSI_TEXT_DEFAULT CSI_SGR(39) /** @} */ //------------- Background Color -------------// /** \defgroup group_ansi_background Background Color * @{ */ #define ANSI_BG_BLACK CSI_SGR(40) #define ANSI_BG_RED CSI_SGR(41) #define ANSI_BG_GREEN CSI_SGR(42) #define ANSI_BG_YELLOW CSI_SGR(43) #define ANSI_BG_BLUE CSI_SGR(44) #define ANSI_BG_MAGENTA CSI_SGR(45) #define ANSI_BG_CYAN CSI_SGR(46) #define ANSI_BG_WHITE CSI_SGR(47) #define ANSI_BG_DEFAULT CSI_SGR(49) /** @} */ #ifdef __cplusplus } #endif #endif /* _TUSB_ANSI_ESC_CODE_H_ */ /** @} */ ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/board.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2018, hathach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ #include "board_api.h" //--------------------------------------------------------------------+ // newlib read()/write() retarget //--------------------------------------------------------------------+ #ifdef __ICCARM__ #define sys_write __write #define sys_read __read #elif defined(__MSP430__) || defined(__RX__) #define sys_write write #define sys_read read #else #define sys_write _write #define sys_read _read #endif #if defined(LOGGER_RTT) // Logging with RTT // If using SES IDE, use the Syscalls/SEGGER_RTT_Syscalls_SES.c instead #if !(defined __SES_ARM) && !(defined __SES_RISCV) && !(defined __CROSSWORKS_ARM) #include "SEGGER_RTT.h" TU_ATTR_USED int sys_write(int fhdl, const char *buf, size_t count) { (void) fhdl; SEGGER_RTT_Write(0, (const char *) buf, (int) count); return (int) count; } TU_ATTR_USED int sys_read(int fhdl, char *buf, size_t count) { (void) fhdl; int rd = (int) SEGGER_RTT_Read(0, buf, count); return (rd > 0) ? rd : -1; } #endif #elif defined(LOGGER_SWO) // Logging with SWO for ARM Cortex #include "board_mcu.h" TU_ATTR_USED int sys_write (int fhdl, const char *buf, size_t count) { (void) fhdl; uint8_t const* buf8 = (uint8_t const*) buf; for(size_t i=0; i 0) ? rd : -1; } #endif //TU_ATTR_USED int _close(int fhdl) { // (void) fhdl; // return 0; //} //TU_ATTR_USED int _fstat(int file, struct stat *st) { // memset(st, 0, sizeof(*st)); // st->st_mode = S_IFCHR; //} // Clang use picolibc #if defined(__clang__) static int cl_putc(char c, FILE *f) { (void) f; return sys_write(0, &c, 1); } static int cl_getc(FILE* f) { (void) f; char c; return sys_read(0, &c, 1) > 0 ? c : -1; } static FILE __stdio = FDEV_SETUP_STREAM(cl_putc, cl_getc, NULL, _FDEV_SETUP_RW); FILE *const stdin = &__stdio; __strong_reference(stdin, stdout); __strong_reference(stdin, stderr); #endif //--------------------------------------------------------------------+ // Board API //--------------------------------------------------------------------+ int board_getchar(void) { char c; return (sys_read(0, &c, 1) > 0) ? (int) c : (-1); } ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/board_api.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _BOARD_API_H_ #define _BOARD_API_H_ #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include "tusb.h" #if CFG_TUSB_OS == OPT_OS_FREERTOS #if TUP_MCU_ESPRESSIF // ESP-IDF need "freertos/" prefix in include path. // CFG_TUSB_OS_INC_PATH should be defined accordingly. #include "freertos/FreeRTOS.h" #include "freertos/semphr.h" #include "freertos/queue.h" #include "freertos/task.h" #include "freertos/timers.h" #else #include "FreeRTOS.h" #include "semphr.h" #include "queue.h" #include "task.h" #include "timers.h" #endif #endif // Define the default baudrate #ifndef CFG_BOARD_UART_BAUDRATE #define CFG_BOARD_UART_BAUDRATE 115200 ///< Default baud rate #endif //--------------------------------------------------------------------+ // Board Porting API // For simplicity, only one LED and one Button are used //--------------------------------------------------------------------+ // Initialize on-board peripherals : led, button, uart and USB void board_init(void); // Init board after tinyusb is initialized void board_init_after_tusb(void) TU_ATTR_WEAK; // Turn LED on or off void board_led_write(bool state); // Control led pattern using phase duration in ms. // For each phase, LED is toggle then repeated, board_led_task() is required to be called //void board_led_pattern(uint32_t const phase_ms[], uint8_t count); // Get the current state of button // a '1' means active (pressed), a '0' means inactive. uint32_t board_button_read(void); // Get board unique ID for USB serial number. Return number of bytes. Note max_len is typically 16 TU_ATTR_WEAK size_t board_get_unique_id(uint8_t id[], size_t max_len); // Get characters from UART. Return number of read bytes int board_uart_read(uint8_t *buf, int len); // Send characters to UART. Return number of sent bytes int board_uart_write(void const *buf, int len); #if CFG_TUSB_OS == OPT_OS_NONE // Get current milliseconds, must be implemented when no RTOS is used uint32_t board_millis(void); #elif CFG_TUSB_OS == OPT_OS_FREERTOS static inline uint32_t board_millis(void) { return ( ( ((uint64_t) xTaskGetTickCount()) * 1000) / configTICK_RATE_HZ ); } #elif CFG_TUSB_OS == OPT_OS_MYNEWT static inline uint32_t board_millis(void) { return os_time_ticks_to_ms32( os_time_get() ); } #elif CFG_TUSB_OS == OPT_OS_PICO #include "pico/time.h" static inline uint32_t board_millis(void) { return to_ms_since_boot(get_absolute_time()); } #elif CFG_TUSB_OS == OPT_OS_RTTHREAD static inline uint32_t board_millis(void) { return (((uint64_t)rt_tick_get()) * 1000 / RT_TICK_PER_SECOND); } #elif CFG_TUSB_OS == OPT_OS_CUSTOM // Implement your own board_millis() in any of .c file uint32_t board_millis(void); #else #error "board_millis() is not implemented for this OS" #endif //--------------------------------------------------------------------+ // Helper functions //--------------------------------------------------------------------+ static inline void board_led_on(void) { board_led_write(true); } static inline void board_led_off(void) { board_led_write(false); } // Get USB Serial number string from unique ID if available. Return number of character. // Input is string descriptor from index 1 (index 0 is type + len) static inline size_t board_usb_get_serial(uint16_t desc_str1[], size_t max_chars) { uint8_t uid[16] TU_ATTR_ALIGNED(4); size_t uid_len; // TODO work with make, but not working with esp32s3 cmake if ( board_get_unique_id ) { uid_len = board_get_unique_id(uid, sizeof(uid)); }else { // fixed serial string is 01234567889ABCDEF uint32_t* uid32 = (uint32_t*) (uintptr_t) uid; uid32[0] = 0x67452301; uid32[1] = 0xEFCDAB89; uid_len = 8; } if ( uid_len > max_chars / 2 ) uid_len = max_chars / 2; for ( size_t i = 0; i < uid_len; i++ ) { for ( size_t j = 0; j < 2; j++ ) { const char nibble_to_hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; uint8_t const nibble = (uid[i] >> (j * 4)) & 0xf; desc_str1[i * 2 + (1 - j)] = nibble_to_hex[nibble]; // UTF-16-LE } } return 2 * uid_len; } // TODO remove static inline void board_delay(uint32_t ms) { uint32_t start_ms = board_millis(); while ( board_millis() - start_ms < ms ) { // take chance to run usb background #if CFG_TUD_ENABLED tud_task(); #endif #if CFG_TUH_ENABLED tuh_task(); #endif } } // stdio getchar() is blocking, this is non-blocking version int board_getchar(void); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/board_mcu.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2020, Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef BOARD_MCU_H_ #define BOARD_MCU_H_ #include "tusb_option.h" //--------------------------------------------------------------------+ // Low Level MCU header include. Example should be // platform independent and mostly doesn't need to include this file. // However there are still certain situation where this file is needed: // - FreeRTOSConfig.h to set up correct clock and NVIC interrupts for ARM Cortex // - SWO logging for Cortex M with ITM_SendChar() / ITM_ReceiveChar() //--------------------------------------------------------------------+ // Include order follows OPT_MCU_ number #if TU_CHECK_MCU(OPT_MCU_LPC11UXX, OPT_MCU_LPC13XX, OPT_MCU_LPC15XX) || \ TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC18XX) || \ TU_CHECK_MCU(OPT_MCU_LPC40XX, OPT_MCU_LPC43XX) #include "chip.h" #elif TU_CHECK_MCU(OPT_MCU_LPC51UXX, OPT_MCU_LPC54XXX, OPT_MCU_LPC55XX, OPT_MCU_MCXN9) #include "fsl_device_registers.h" #elif TU_CHECK_MCU(OPT_MCU_KINETIS_KL, OPT_MCU_KINETIS_K32L, OPT_MCU_KINETIS_K) #include "fsl_device_registers.h" #elif CFG_TUSB_MCU == OPT_MCU_NRF5X #include "nrf.h" #elif CFG_TUSB_MCU == OPT_MCU_SAMD11 || CFG_TUSB_MCU == OPT_MCU_SAMD21 || \ CFG_TUSB_MCU == OPT_MCU_SAMD51 || CFG_TUSB_MCU == OPT_MCU_SAME5X || \ CFG_TUSB_MCU == OPT_MCU_SAML22 || CFG_TUSB_MCU == OPT_MCU_SAML21 #include "sam.h" #elif CFG_TUSB_MCU == OPT_MCU_SAMG #undef LITTLE_ENDIAN // hack to suppress "LITTLE_ENDIAN" redefined #include "sam.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F0 #include "stm32f0xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F1 #include "stm32f1xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F2 #include "stm32f2xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F3 #include "stm32f3xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F4 #include "stm32f4xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F7 #include "stm32f7xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32G4 #include "stm32g4xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32H5 #include "stm32h5xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32H7 #include "stm32h7xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32L0 #include "stm32l0xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32L1 #include "stm32l1xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32L4 #include "stm32l4xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32WB #include "stm32wbxx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32U5 #include "stm32u5xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32G0 #include "stm32g0xx.h" #elif CFG_TUSB_MCU == OPT_MCU_CXD56 // no header needed #elif CFG_TUSB_MCU == OPT_MCU_MSP430x5xx #include "msp430.h" #elif CFG_TUSB_MCU == OPT_MCU_MSP432E4 #include "msp.h" #elif CFG_TUSB_MCU == OPT_MCU_VALENTYUSB_EPTRI // no header needed #elif CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX #include "fsl_device_registers.h" #elif CFG_TUSB_MCU == OPT_MCU_NUC120 #include "NUC100Series.h" #elif CFG_TUSB_MCU == OPT_MCU_NUC121 || CFG_TUSB_MCU == OPT_MCU_NUC126 #include "NuMicro.h" #elif CFG_TUSB_MCU == OPT_MCU_NUC505 #include "NUC505Series.h" #elif CFG_TUSB_MCU == OPT_MCU_ESP32S2 // no header needed #elif CFG_TUSB_MCU == OPT_MCU_ESP32S3 // no header needed #elif CFG_TUSB_MCU == OPT_MCU_DA1469X #include "DA1469xAB.h" #elif CFG_TUSB_MCU == OPT_MCU_RP2040 #include "pico.h" #elif CFG_TUSB_MCU == OPT_MCU_EFM32GG #include "em_device.h" #elif CFG_TUSB_MCU == OPT_MCU_RX63X || CFG_TUSB_MCU == OPT_MCU_RX65X // no header needed #elif CFG_TUSB_MCU == OPT_MCU_RAXXX #include "bsp_api.h" #elif CFG_TUSB_MCU == OPT_MCU_GD32VF103 #include "gd32vf103.h" #elif CFG_TUSB_MCU == OPT_MCU_MM32F327X #include "mm32_device.h" #elif CFG_TUSB_MCU == OPT_MCU_XMC4000 #include "xmc_device.h" #elif CFG_TUSB_MCU == OPT_MCU_TM4C123 #include "TM4C123.h" #elif CFG_TUSB_MCU == OPT_MCU_CH32F20X #include "ch32f20x.h" #elif TU_CHECK_MCU(OPT_MCU_BCM2711, OPT_MCU_BCM2835, OPT_MCU_BCM2837) // no header needed #else #error "Missing MCU header" #endif #endif /* BOARD_MCU_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/family_support.cmake ================================================ include_guard(GLOBAL) include(CMakePrintHelpers) # TOP is path to root directory set(TOP "${CMAKE_CURRENT_LIST_DIR}/../..") get_filename_component(TOP ${TOP} ABSOLUTE) #------------------------------------------------------------- # Toolchain # Can be changed via -DTOOLCHAIN=gcc|iar or -DCMAKE_C_COMPILER= #------------------------------------------------------------- # Detect toolchain based on CMAKE_C_COMPILER if (DEFINED CMAKE_C_COMPILER) string(FIND ${CMAKE_C_COMPILER} "iccarm" IS_IAR) string(FIND ${CMAKE_C_COMPILER} "clang" IS_CLANG) string(FIND ${CMAKE_C_COMPILER} "gcc" IS_GCC) if (NOT IS_IAR EQUAL -1) set(TOOLCHAIN iar) elseif (NOT IS_CLANG EQUAL -1) set(TOOLCHAIN clang) elseif (NOT IS_GCC EQUAL -1) set(TOOLCHAIN gcc) endif () endif () # default to gcc if (NOT DEFINED TOOLCHAIN) set(TOOLCHAIN gcc) endif () #------------------------------------------------------------- # FAMILY and BOARD #------------------------------------------------------------- if (NOT DEFINED FAMILY) if (NOT DEFINED BOARD) message(FATAL_ERROR "You must set a FAMILY variable for the build (e.g. rp2040, espressif). You can do this via -DFAMILY=xxx on the cmake command line") endif () # Find path contains BOARD file(GLOB BOARD_PATH LIST_DIRECTORIES true RELATIVE ${TOP}/hw/bsp ${TOP}/hw/bsp/*/boards/${BOARD} ) if (NOT BOARD_PATH) message(FATAL_ERROR "Could not detect FAMILY from BOARD=${BOARD}") endif () # replace / with ; so that we can get the first element as FAMILY string(REPLACE "/" ";" BOARD_PATH ${BOARD_PATH}) list(GET BOARD_PATH 0 FAMILY) endif () if (NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/${FAMILY}/family.cmake) message(FATAL_ERROR "Family '${FAMILY}' is not known/supported") endif() if (NOT FAMILY STREQUAL rp2040) # enable LTO if supported skip rp2040 include(CheckIPOSupported) check_ipo_supported(RESULT IPO_SUPPORTED) cmake_print_variables(IPO_SUPPORTED) if (IPO_SUPPORTED) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) endif() endif() set(WARNING_FLAGS_GNU -Wall -Wextra -Werror -Wfatal-errors -Wdouble-promotion -Wstrict-prototypes -Wstrict-overflow -Werror-implicit-function-declaration -Wfloat-equal -Wundef -Wshadow -Wwrite-strings -Wsign-compare -Wmissing-format-attribute -Wunreachable-code -Wcast-align -Wcast-function-type -Wcast-qual -Wnull-dereference -Wuninitialized -Wunused -Wreturn-type -Wredundant-decls ) set(WARNING_FLAGS_IAR "") #------------------------------------------------------------- # Functions #------------------------------------------------------------- # Filter example based on only.txt and skip.txt function(family_filter RESULT DIR) get_filename_component(DIR ${DIR} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) if (EXISTS "${DIR}/skip.txt") file(STRINGS "${DIR}/skip.txt" SKIPS_LINES) foreach(MCU IN LISTS FAMILY_MCUS) # For each line in only.txt foreach(_line ${SKIPS_LINES}) # If mcu:xxx exists for this mcu then skip if (${_line} STREQUAL "mcu:${MCU}" OR ${_line} STREQUAL "board:${BOARD}" OR ${_line} STREQUAL "family:${FAMILY}") set(${RESULT} 0 PARENT_SCOPE) return() endif() endforeach() endforeach() endif () if (EXISTS "${DIR}/only.txt") file(STRINGS "${DIR}/only.txt" ONLYS_LINES) foreach(MCU IN LISTS FAMILY_MCUS) # For each line in only.txt foreach(_line ${ONLYS_LINES}) # If mcu:xxx exists for this mcu or board:xxx then include if (${_line} STREQUAL "mcu:${MCU}" OR ${_line} STREQUAL "board:${BOARD}" OR ${_line} STREQUAL "family:${FAMILY}") set(${RESULT} 1 PARENT_SCOPE) return() endif() endforeach() endforeach() # Didn't find it in only file so don't build set(${RESULT} 0 PARENT_SCOPE) else() # only.txt not exist so build set(${RESULT} 1 PARENT_SCOPE) endif() endfunction() function(family_add_subdirectory DIR) family_filter(SHOULD_ADD "${DIR}") if (SHOULD_ADD) add_subdirectory(${DIR}) endif() endfunction() function(family_get_project_name OUTPUT_NAME DIR) get_filename_component(SHORT_NAME ${DIR} NAME) set(${OUTPUT_NAME} ${TINYUSB_FAMILY_PROJECT_NAME_PREFIX}${SHORT_NAME} PARENT_SCOPE) endfunction() function(family_initialize_project PROJECT DIR) # set output suffix to .elf (skip espressif and rp2040) if(NOT FAMILY STREQUAL "espressif" AND NOT FAMILY STREQUAL "rp2040") set(CMAKE_EXECUTABLE_SUFFIX .elf PARENT_SCOPE) endif() family_filter(ALLOWED "${DIR}") if (NOT ALLOWED) get_filename_component(SHORT_NAME ${DIR} NAME) message(FATAL_ERROR "${SHORT_NAME} is not supported on FAMILY=${FAMILY}") endif() endfunction() #------------------------------------------------------------- # Common Target Configure # Most families use these settings except rp2040 and espressif #------------------------------------------------------------- # Add RTOS to example function(family_add_rtos TARGET RTOS) if (RTOS STREQUAL "freertos") # freertos config if (NOT TARGET freertos_config) add_library(freertos_config INTERFACE) target_include_directories(freertos_config INTERFACE ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/${FAMILY}/FreeRTOSConfig) # add board definition to freertos_config mostly for SystemCoreClock target_link_libraries(freertos_config INTERFACE board_${BOARD}) endif() # freertos kernel if (NOT TARGET freertos_kernel) add_subdirectory(${TOP}/lib/FreeRTOS-Kernel ${CMAKE_BINARY_DIR}/lib/freertos_kernel) endif () target_link_libraries(${TARGET} PUBLIC freertos_kernel) endif () endfunction() # Add common configuration to example function(family_configure_common TARGET RTOS) family_add_rtos(${TARGET} ${RTOS}) string(TOUPPER ${BOARD} BOARD_UPPER) string(REPLACE "-" "_" BOARD_UPPER ${BOARD_UPPER}) target_compile_definitions(${TARGET} PUBLIC BOARD_${BOARD_UPPER} ) # run size after build find_program(SIZE_EXE ${CMAKE_SIZE}) if(NOT ${SIZE_EXE} STREQUAL SIZE_EXE-NOTFOUND) add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${SIZE_EXE} $ ) endif () # Add warnings flags target_compile_options(${TARGET} PUBLIC ${WARNING_FLAGS_${CMAKE_C_COMPILER_ID}}) # Generate linker map file if (CMAKE_C_COMPILER_ID STREQUAL "GNU") target_link_options(${TARGET} PUBLIC "LINKER:-Map=$.map") if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0) target_link_options(${TARGET} PUBLIC "LINKER:--no-warn-rwx-segments") endif () elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang") target_link_options(${TARGET} PUBLIC "LINKER:-Map=$.map") elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR") target_link_options(${TARGET} PUBLIC "LINKER:--map=$.map") endif() # ETM Trace option if (TRACE_ETM STREQUAL "1") target_compile_definitions(${TARGET} PUBLIC TRACE_ETM) endif () # LOGGER option if (DEFINED LOGGER) target_compile_definitions(${TARGET} PUBLIC LOGGER_${LOGGER}) # Add segger rtt to example if(LOGGER STREQUAL "RTT" OR LOGGER STREQUAL "rtt") if (NOT TARGET segger_rtt) add_library(segger_rtt STATIC ${TOP}/lib/SEGGER_RTT/RTT/SEGGER_RTT.c) target_include_directories(segger_rtt PUBLIC ${TOP}/lib/SEGGER_RTT/RTT) # target_compile_definitions(segger_rtt PUBLIC SEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) endif() target_link_libraries(${TARGET} PUBLIC segger_rtt) endif () endif () endfunction() # Add tinyusb to example function(family_add_tinyusb TARGET OPT_MCU RTOS) # tinyusb target is built for each example since it depends on example's tusb_config.h set(TINYUSB_TARGET_PREFIX ${TARGET}-) add_library(${TARGET}-tinyusb_config INTERFACE) # path to tusb_config.h target_include_directories(${TARGET}-tinyusb_config INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/src) target_compile_definitions(${TARGET}-tinyusb_config INTERFACE CFG_TUSB_MCU=${OPT_MCU}) if (DEFINED LOG) target_compile_definitions(${TARGET}-tinyusb_config INTERFACE CFG_TUSB_DEBUG=${LOG}) if (LOG STREQUAL "4") # no inline for debug level 4 target_compile_definitions(${TARGET}-tinyusb_config INTERFACE TU_ATTR_ALWAYS_INLINE=) endif () endif() if (RTOS STREQUAL "freertos") target_compile_definitions(${TARGET}-tinyusb_config INTERFACE CFG_TUSB_OS=OPT_OS_FREERTOS) endif () # tinyusb's CMakeList.txt add_subdirectory(${TOP}/src ${CMAKE_CURRENT_BINARY_DIR}/tinyusb) if (RTOS STREQUAL "freertos") # link tinyusb with freeRTOS kernel target_link_libraries(${TARGET}-tinyusb PUBLIC freertos_kernel) endif () # use max3421 as host controller if (MAX3421_HOST STREQUAL "1") target_compile_definitions(${TARGET}-tinyusb_config INTERFACE CFG_TUH_MAX3421=1) target_sources(${TARGET}-tinyusb PUBLIC ${TOP}/src/portable/analog/max3421/hcd_max3421.c ) endif () endfunction() # Add bin/hex output function(family_add_bin_hex TARGET) add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Obinary $ $/${TARGET}.bin COMMAND ${CMAKE_OBJCOPY} -Oihex $ $/${TARGET}.hex VERBATIM) endfunction() #---------------------------------- # Example Target Configure (Default rule) # These function can be redefined in FAMILY/family.cmake #---------------------------------- function(family_configure_example TARGET RTOS) # empty function, should be redefined in FAMILY/family.cmake endfunction() # Configure device example with RTOS function(family_configure_device_example TARGET RTOS) family_configure_example(${TARGET} ${RTOS}) endfunction() # Configure host example with RTOS function(family_configure_host_example TARGET RTOS) family_configure_example(${TARGET} ${RTOS}) endfunction() # Configure host + device example with RTOS function(family_configure_dual_usb_example TARGET RTOS) family_configure_example(${TARGET} ${RTOS}) endfunction() function(family_example_missing_dependency TARGET DEPENDENCY) message(WARNING "${DEPENDENCY} submodule needed by ${TARGET} not found, please run 'python tools/get_deps.py ${DEPENDENCY}' to fetch it") endfunction() #---------------------------------- # RPI specific: refactor later #---------------------------------- function(family_add_default_example_warnings TARGET) target_compile_options(${TARGET} PUBLIC -Wall -Wextra -Werror -Wfatal-errors -Wdouble-promotion -Wfloat-equal # FIXME commented out because of https://github.com/raspberrypi/pico-sdk/issues/1468 #-Wshadow -Wwrite-strings -Wsign-compare -Wmissing-format-attribute -Wunreachable-code -Wcast-align -Wcast-qual -Wnull-dereference -Wuninitialized -Wunused -Wredundant-decls #-Wstrict-prototypes #-Werror-implicit-function-declaration #-Wundef ) if (CMAKE_C_COMPILER_ID STREQUAL "GNU") if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0) target_link_options(${TARGET} PUBLIC "LINKER:--no-warn-rwx-segments") endif() # GCC 10 if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0) target_compile_options(${TARGET} PUBLIC -Wconversion) endif() # GCC 8 if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0) target_compile_options(${TARGET} PUBLIC -Wcast-function-type -Wstrict-overflow) endif() # GCC 6 if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0) target_compile_options(${TARGET} PUBLIC -Wno-strict-aliasing) endif() endif() endfunction() #---------------------------------- # Flashing target #---------------------------------- # Add flash jlink target function(family_flash_jlink TARGET) if (NOT DEFINED JLINKEXE) set(JLINKEXE JLinkExe) endif () if (NOT DEFINED JLINK_IF) set(JLINK_IF swd) endif () file(GENERATE OUTPUT $/${TARGET}.jlink CONTENT "halt loadfile $ r go exit" ) add_custom_target(${TARGET}-jlink DEPENDS ${TARGET} COMMAND ${JLINKEXE} -device ${JLINK_DEVICE} -if ${JLINK_IF} -JTAGConf -1,-1 -speed auto -CommandFile $/${TARGET}.jlink ) endfunction() # Add flash stlink target function(family_flash_stlink TARGET) if (NOT DEFINED STM32_PROGRAMMER_CLI) set(STM32_PROGRAMMER_CLI STM32_Programmer_CLI) endif () add_custom_target(${TARGET}-stlink DEPENDS ${TARGET} COMMAND ${STM32_PROGRAMMER_CLI} --connect port=swd --write $ --go ) endfunction() # Add flash openocd target function(family_flash_openocd TARGET) if (NOT DEFINED OPENOCD) set(OPENOCD openocd) endif () if (NOT DEFINED OPENOCD_OPTION2) set(OPENOCD_OPTION2 "") endif () separate_arguments(OPTION_LIST UNIX_COMMAND ${OPENOCD_OPTION}) separate_arguments(OPTION_LIST2 UNIX_COMMAND ${OPENOCD_OPTION2}) # note skip verify since it has issue with rp2040 add_custom_target(${TARGET}-openocd DEPENDS ${TARGET} COMMAND ${OPENOCD} ${OPTION_LIST} -c "program $ reset" ${OPTION_LIST2} -c exit VERBATIM ) endfunction() # Add flash openocd-wch target # compiled from https://github.com/hathach/riscv-openocd-wch or https://github.com/dragonlock2/miscboards/blob/main/wch/SDK/riscv-openocd.tar.xz function(family_flash_openocd_wch TARGET) if (NOT DEFINED OPENOCD) set(OPENOCD $ENV{HOME}/app/riscv-openocd-wch/src/openocd) endif () family_flash_openocd(${TARGET}) endfunction() # Add flash pycod target function(family_flash_pyocd TARGET) if (NOT DEFINED PYOC) set(PYOCD pyocd) endif () add_custom_target(${TARGET}-pyocd DEPENDS ${TARGET} COMMAND ${PYOCD} flash -t ${PYOCD_TARGET} $ ) endfunction() # Add flash teensy_cli target function(family_flash_teensy TARGET) if (NOT DEFINED TEENSY_CLI) set(TEENSY_CLI teensy_loader_cli) endif () add_custom_target(${TARGET}-teensy DEPENDS ${TARGET} COMMAND ${TEENSY_CLI} --mcu=${TEENSY_MCU} -w -s $/${TARGET}.hex ) endfunction() # Add flash using NXP's LinkServer (redserver) # https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools-/linkserver-for-microcontrollers:LINKERSERVER function(family_flash_nxplink TARGET) if (NOT DEFINED LINKSERVER) set(LINKSERVER LinkServer) endif () # LinkServer has a bug that can only execute with full path otherwise it throws: # realpath error: No such file or directory execute_process(COMMAND which ${LINKSERVER} OUTPUT_VARIABLE LINKSERVER_PATH OUTPUT_STRIP_TRAILING_WHITESPACE) add_custom_target(${TARGET}-nxplink DEPENDS ${TARGET} COMMAND ${LINKSERVER_PATH} flash ${NXPLINK_DEVICE} load $ ) endfunction() function(family_flash_dfu_util TARGET OPTION) if (NOT DEFINED DFU_UTIL) set(DFU_UTIL dfu-util) endif () add_custom_target(${TARGET}-dfu-util DEPENDS ${TARGET} COMMAND ${DFU_UTIL} -R -d ${DFU_UTIL_VID_PID} -a 0 -D $/${TARGET}.bin VERBATIM ) endfunction() function(family_flash_msp430flasher TARGET) if (NOT DEFINED MSP430Flasher) set(MSP430FLASHER MSP430Flasher) endif () # set LD_LIBRARY_PATH to find libmsp430.so (directory containing MSP430Flasher) find_program(MSP430FLASHER_PATH MSP430Flasher) get_filename_component(MSP430FLASHER_PARENT_DIR "${MSP430FLASHER_PATH}" DIRECTORY) add_custom_target(${TARGET}-msp430flasher DEPENDS ${TARGET} COMMAND ${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=${MSP430FLASHER_PARENT_DIR} ${MSP430FLASHER} -w $/${TARGET}.hex -z [VCC] ) endfunction() #---------------------------------- # Family specific #---------------------------------- # family specific: can override above functions include(${CMAKE_CURRENT_LIST_DIR}/${FAMILY}/family.cmake) if (NOT FAMILY_MCUS) set(FAMILY_MCUS ${FAMILY}) endif() # if use max3421 as host controller, expand FAMILY_MCUS to include max3421 if (MAX3421_HOST STREQUAL "1") set(FAMILY_MCUS ${FAMILY_MCUS} MAX3421) endif () # save it in case of re-inclusion set(FAMILY_MCUS ${FAMILY_MCUS} CACHE INTERNAL "") ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/rp2040/board.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2021, Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef BOARD_H_ #define BOARD_H_ #ifdef __cplusplus extern "C" { #endif // LED #ifdef PICO_DEFAULT_LED_PIN #define LED_PIN PICO_DEFAULT_LED_PIN #define LED_STATE_ON (!(PICO_DEFAULT_LED_PIN_INVERTED)) #endif // Button pin is BOOTSEL which is flash CS pin #define BUTTON_BOOTSEL #define BUTTON_STATE_ACTIVE 0 // UART #if defined(PICO_DEFAULT_UART_TX_PIN) && defined(PICO_DEFAULT_UART_RX_PIN) && \ defined(PICO_DEFAULT_UART) && defined(LIB_PICO_STDIO_UART) #define UART_DEV PICO_DEFAULT_UART #define UART_TX_PIN PICO_DEFAULT_UART_TX_PIN #define UART_RX_PIN PICO_DEFAULT_UART_RX_PIN #endif //--------------------------------------------------------------------+ // PIO_USB // default to pin on Adafruit Feather rp2040 USB Host or Tester if defined //--------------------------------------------------------------------+ // #define USE_ADAFRUIT_FEATHER_RP2040_USBHOST #ifdef USE_ADAFRUIT_FEATHER_RP2040_USBHOST #define PICO_DEFAULT_PIO_USB_DP_PIN 16 #define PICO_DEFAULT_PIO_USB_VBUSEN_PIN 18 #endif #ifndef PICO_DEFAULT_PIO_USB_DP_PIN #define PICO_DEFAULT_PIO_USB_DP_PIN 20 #endif // VBUS enable pin and its active state #ifndef PICO_DEFAULT_PIO_USB_VBUSEN_PIN #define PICO_DEFAULT_PIO_USB_VBUSEN_PIN 22 #endif // VBUS enable state #ifndef PICO_DEFAULT_PIO_USB_VBUSEN_STATE #define PICO_DEFAULT_PIO_USB_VBUSEN_STATE 1 #endif //-------------------------------------------------------------------- // USB Host MAX3421E //-------------------------------------------------------------------- #define MAX3421_SPI PICO_DEFAULT_SPI_INSTANCE #define MAX3421_SCK_PIN PICO_DEFAULT_SPI_SCK_PIN #define MAX3421_MOSI_PIN PICO_DEFAULT_SPI_TX_PIN #define MAX3421_MISO_PIN PICO_DEFAULT_SPI_RX_PIN #define MAX3421_CS_PIN 10 #define MAX3421_INTR_PIN 9 #ifdef __cplusplus } #endif #endif /* BOARD_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/rp2040/boards/pico_sdk/board.cmake ================================================ # This builds with settings based purely on the current PICO_BOARD set via the SDK ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/rp2040/boards/raspberry_pi_pico/board.cmake ================================================ set(PICO_BOARD pico) ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * Copyright (c) 2021, Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "pico/stdlib.h" #include "pico/binary_info.h" #include "pico/unique_id.h" #include "hardware/gpio.h" #include "hardware/sync.h" #include "hardware/resets.h" #include "hardware/structs/ioqspi.h" #include "hardware/structs/sio.h" #include "bsp/board_api.h" #include "board.h" #ifdef UART_DEV static uart_inst_t *uart_inst; #endif #if CFG_TUH_RPI_PIO_USB || CFG_TUD_RPI_PIO_USB #include "pio_usb.h" #endif #if CFG_TUH_ENABLED && CFG_TUH_MAX3421 #include "hardware/spi.h" static void max3421_init(void); #endif #ifdef BUTTON_BOOTSEL // This example blinks the Picoboard LED when the BOOTSEL button is pressed. // // Picoboard has a button attached to the flash CS pin, which the bootrom // checks, and jumps straight to the USB bootcode if the button is pressed // (pulling flash CS low). We can check this pin in by jumping to some code in // SRAM (so that the XIP interface is not required), floating the flash CS // pin, and observing whether it is pulled low. // // This doesn't work if others are trying to access flash at the same time, // e.g. XIP streamer, or the other core. bool __no_inline_not_in_flash_func(get_bootsel_button)(void) { const uint CS_PIN_INDEX = 1; // Must disable interrupts, as interrupt handlers may be in flash, and we // are about to temporarily disable flash access! uint32_t flags = save_and_disable_interrupts(); // Set chip select to Hi-Z hw_write_masked(&ioqspi_hw->io[CS_PIN_INDEX].ctrl, GPIO_OVERRIDE_LOW << IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_LSB, IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_BITS); // Note we can't call into any sleep functions in flash right now for (volatile int i = 0; i < 1000; ++i); // The HI GPIO registers in SIO can observe and control the 6 QSPI pins. // Note the button pulls the pin *low* when pressed. bool button_state = (sio_hw->gpio_hi_in & (1u << CS_PIN_INDEX)); // Need to restore the state of chip select, else we are going to have a // bad time when we return to code in flash! hw_write_masked(&ioqspi_hw->io[CS_PIN_INDEX].ctrl, GPIO_OVERRIDE_NORMAL << IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_LSB, IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_BITS); restore_interrupts(flags); return button_state; } #endif //------------- Segger RTT retarget -------------// #if defined(LOGGER_RTT) // Logging with RTT // - If RTT Control Block is not found by 'Auto Detection` try to use 'Search Range` with '0x20000000 0x10000' // - SWD speed is rather slow around 1000Khz #include "pico/stdio/driver.h" #include "SEGGER_RTT.h" static void stdio_rtt_write (const char *buf, int length) { SEGGER_RTT_Write(0, buf, (unsigned) length); } static int stdio_rtt_read (char *buf, int len) { return (int) SEGGER_RTT_Read(0, buf, (unsigned) len); } static stdio_driver_t stdio_rtt = { .out_chars = stdio_rtt_write, .out_flush = NULL, .in_chars = stdio_rtt_read }; void stdio_rtt_init(void) { stdio_set_driver_enabled(&stdio_rtt, true); } #endif //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ void board_init(void) { #if CFG_TUH_RPI_PIO_USB || CFG_TUD_RPI_PIO_USB // Set the system clock to a multiple of 120mhz for bitbanging USB with pico-usb set_sys_clock_khz(120000, true); #ifdef PICO_DEFAULT_PIO_USB_VBUSEN_PIN gpio_init(PICO_DEFAULT_PIO_USB_VBUSEN_PIN); gpio_set_dir(PICO_DEFAULT_PIO_USB_VBUSEN_PIN, GPIO_OUT); gpio_put(PICO_DEFAULT_PIO_USB_VBUSEN_PIN, PICO_DEFAULT_PIO_USB_VBUSEN_STATE); #endif // rp2040 use pico-pio-usb for host tuh_configure() can be used to passed pio configuration to the host stack // Note: tuh_configure() must be called before tuh_init() pio_usb_configuration_t pio_cfg = PIO_USB_DEFAULT_CONFIG; pio_cfg.pin_dp = PICO_DEFAULT_PIO_USB_DP_PIN; tuh_configure(BOARD_TUH_RHPORT, TUH_CFGID_RPI_PIO_USB_CONFIGURATION, &pio_cfg); #endif #ifdef LED_PIN bi_decl(bi_1pin_with_name(LED_PIN, "LED")); gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT); #endif // Button #ifndef BUTTON_BOOTSEL #endif #ifdef UART_DEV bi_decl(bi_2pins_with_func(UART_TX_PIN, UART_RX_PIN, GPIO_FUNC_UART)); uart_inst = uart_get_instance(UART_DEV); stdio_uart_init_full(uart_inst, CFG_BOARD_UART_BAUDRATE, UART_TX_PIN, UART_RX_PIN); #endif #if defined(LOGGER_RTT) stdio_rtt_init(); #endif #if CFG_TUD_ENABLED // TODO probably set up device mode? #endif #if CFG_TUH_ENABLED #if CFG_TUH_MAX3421 max3421_init(); #endif #endif #if !CFG_TUD_ENABLED && !CFG_TUH_ENABLED // board test exxample, reset usb controller reset_block(RESETS_RESET_USBCTRL_BITS); unreset_block_wait(RESETS_RESET_USBCTRL_BITS); #endif } //--------------------------------------------------------------------+ // Board porting API //--------------------------------------------------------------------+ void board_led_write(bool state) { (void) state; #ifdef LED_PIN gpio_put(LED_PIN, state ? LED_STATE_ON : (1 - LED_STATE_ON)); #endif } uint32_t board_button_read(void) { #ifdef BUTTON_BOOTSEL return BUTTON_STATE_ACTIVE == get_bootsel_button(); #else return 0; #endif } size_t board_get_unique_id(uint8_t id[], size_t max_len) { pico_unique_board_id_t pico_id; pico_get_unique_board_id(&pico_id); size_t len = PICO_UNIQUE_BOARD_ID_SIZE_BYTES; if (len > max_len) len = max_len; memcpy(id, pico_id.id, len); return len; } int board_uart_read(uint8_t *buf, int len) { #ifdef UART_DEV int count = 0; while ( (count < len) && uart_is_readable(uart_inst) ) { buf[count] = uart_getc(uart_inst); count++; } return count; #else (void) buf; (void) len; return 0; #endif } int board_uart_write(void const *buf, int len) { #ifdef UART_DEV char const *bufch = (char const *) buf; for ( int i = 0; i < len; i++ ) { uart_putc(uart_inst, bufch[i]); } return len; #else (void) buf; (void) len; return 0; #endif } int board_getchar(void) { return getchar_timeout_us(0); } //--------------------------------------------------------------------+ // USB Interrupt Handler // rp2040 implementation will install appropriate handler when initializing // tinyusb. There is no need to forward IRQ from application //--------------------------------------------------------------------+ //--------------------------------------------------------------------+ // API: SPI transfer with MAX3421E, must be implemented by application //--------------------------------------------------------------------+ #if CFG_TUH_ENABLED && defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421 void max3421_int_handler(uint gpio, uint32_t event_mask) { if (!(gpio == MAX3421_INTR_PIN && event_mask & GPIO_IRQ_EDGE_FALL)) return; tuh_int_handler(BOARD_TUH_RHPORT, true); } static void max3421_init(void) { // CS pin gpio_init(MAX3421_CS_PIN); gpio_set_dir(MAX3421_CS_PIN, GPIO_OUT); gpio_put(MAX3421_CS_PIN, true); // Interrupt pin gpio_init(MAX3421_INTR_PIN); gpio_set_dir(MAX3421_INTR_PIN, GPIO_IN); gpio_pull_up(MAX3421_INTR_PIN); gpio_set_irq_enabled_with_callback(MAX3421_INTR_PIN, GPIO_IRQ_EDGE_FALL, true, max3421_int_handler); // SPI init spi_init(MAX3421_SPI, 4*1000000ul); gpio_set_function(MAX3421_SCK_PIN, GPIO_FUNC_SPI); gpio_set_function(MAX3421_MOSI_PIN, GPIO_FUNC_SPI); gpio_set_function(MAX3421_MISO_PIN, GPIO_FUNC_SPI); spi_set_format(MAX3421_SPI, 8, SPI_CPOL_0, SPI_CPHA_0, SPI_MSB_FIRST); } //// API to enable/disable MAX3421 INTR pin interrupt void tuh_max3421_int_api(uint8_t rhport, bool enabled) { (void) rhport; irq_set_enabled(IO_IRQ_BANK0, enabled); } // API to control MAX3421 SPI CS void tuh_max3421_spi_cs_api(uint8_t rhport, bool active) { (void) rhport; gpio_put(MAX3421_CS_PIN, !active); } // API to transfer data with MAX3421 SPI // Either tx_buf or rx_buf can be NULL, which means transfer is write or read only bool tuh_max3421_spi_xfer_api(uint8_t rhport, uint8_t const* tx_buf, uint8_t* rx_buf, size_t xfer_bytes) { (void) rhport; if (tx_buf == NULL && rx_buf == NULL) { return false; } int ret; if (tx_buf == NULL) { ret = spi_read_blocking(MAX3421_SPI, 0, rx_buf, xfer_bytes); }else if (rx_buf == NULL) { ret = spi_write_blocking(MAX3421_SPI, tx_buf, xfer_bytes); }else { ret = spi_write_read_blocking(spi0, tx_buf, rx_buf, xfer_bytes); } return ret == (int) xfer_bytes; } #endif ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.cmake ================================================ cmake_minimum_required(VERSION 3.13) include_guard(GLOBAL) if (NOT BOARD) message("BOARD not specified, defaulting to pico_sdk") set(BOARD pico_sdk) endif() # add the SDK in case we are standalone tinyusb example (noop if already present) include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_import.cmake) # include basic family CMake functionality set(FAMILY_MCUS RP2040) set(JLINK_DEVICE rp2040_m0_0) set(OPENOCD_OPTION "-f interface/cmsis-dap.cfg -f target/rp2040.cfg -c \"adapter speed 5000\"") include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake) if (NOT PICO_TINYUSB_PATH) set(PICO_TINYUSB_PATH ${TOP}) endif() if (NOT TINYUSB_OPT_OS) message("Setting OPT_OS_PICO") set(TINYUSB_OPT_OS OPT_OS_PICO) endif() #------------------------------------ # Base config for both device and host; wrapped by SDK's tinyusb_common #------------------------------------ add_library(tinyusb_common_base INTERFACE) target_sources(tinyusb_common_base INTERFACE ${TOP}/src/tusb.c ${TOP}/src/common/tusb_fifo.c ) target_include_directories(tinyusb_common_base INTERFACE ${TOP}/src ) if(DEFINED LOG) set(TINYUSB_DEBUG_LEVEL ${LOG}) elseif (CMAKE_BUILD_TYPE STREQUAL "Debug") message("Compiling TinyUSB with CFG_TUSB_DEBUG=1") set(TINYUSB_DEBUG_LEVEL 1) else () set(TINYUSB_DEBUG_LEVEL 0) endif() target_compile_definitions(tinyusb_common_base INTERFACE CFG_TUSB_MCU=OPT_MCU_RP2040 CFG_TUSB_OS=${TINYUSB_OPT_OS} CFG_TUSB_DEBUG=${TINYUSB_DEBUG_LEVEL} ) target_link_libraries(tinyusb_common_base INTERFACE hardware_structs hardware_irq hardware_resets pico_sync ) #------------------------------------ # Base config for device mode; wrapped by SDK's tinyusb_device #------------------------------------ add_library(tinyusb_device_base INTERFACE) target_sources(tinyusb_device_base INTERFACE ${TOP}/src/portable/raspberrypi/rp2040/dcd_rp2040.c ${TOP}/src/portable/raspberrypi/rp2040/rp2040_usb.c ${TOP}/src/device/usbd.c ${TOP}/src/device/usbd_control.c ${TOP}/src/class/cdc/cdc_device.c ${TOP}/src/class/hid/hid_device.c ${TOP}/src/class/msc/msc_device.c ) #------------------------------------ # Base config for host mode; wrapped by SDK's tinyusb_host #------------------------------------ add_library(tinyusb_host_base INTERFACE) target_sources(tinyusb_host_base INTERFACE ${TOP}/src/portable/raspberrypi/rp2040/hcd_rp2040.c ${TOP}/src/portable/raspberrypi/rp2040/rp2040_usb.c ${TOP}/src/host/usbh.c ${TOP}/src/host/hub.c ${TOP}/src/class/hid/hid_host.c ) # Sometimes have to do host specific actions in mostly common functions target_compile_definitions(tinyusb_host_base INTERFACE RP2040_USB_HOST_MODE=1 ) #------------------------------------ # Host MAX3421 #------------------------------------ add_library(tinyusb_host_max3421 INTERFACE) target_sources(tinyusb_host_max3421 INTERFACE ${TOP}/src/portable/analog/max3421/hcd_max3421.c ) target_compile_definitions(tinyusb_host_max3421 INTERFACE CFG_TUH_MAX3421=1 ) target_link_libraries(tinyusb_host_max3421 INTERFACE hardware_spi ) #------------------------------------ # BSP & Additions #------------------------------------ add_library(tinyusb_bsp INTERFACE) target_sources(tinyusb_bsp INTERFACE ${TOP}/hw/bsp/rp2040/family.c ) target_include_directories(tinyusb_bsp INTERFACE ${TOP}/hw ) target_link_libraries(tinyusb_bsp INTERFACE pico_unique_id) # tinyusb_additions will hold our extra settings for examples add_library(tinyusb_additions INTERFACE) message("Setting PICO workarounds") target_compile_definitions(tinyusb_additions INTERFACE PICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1 PICO_RP2040_USB_DEVICE_UFRAME_FIX=1 ) if(LOGGER STREQUAL "RTT" OR LOGGER STREQUAL "rtt") target_compile_definitions(tinyusb_additions INTERFACE LOGGER_RTT #SEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL ) target_sources(tinyusb_additions INTERFACE ${TOP}/lib/SEGGER_RTT/RTT/SEGGER_RTT.c ) set_source_files_properties(${TOP}/lib/SEGGER_RTT/RTT/SEGGER_RTT.c PROPERTIES COMPILE_FLAGS "-Wno-cast-qual -Wno-cast-align -Wno-sign-conversion") target_include_directories(tinyusb_additions INTERFACE ${TOP}/lib/SEGGER_RTT/RTT ) endif() #------------------------------------ # Functions #------------------------------------ function(family_configure_target TARGET RTOS) if (RTOS STREQUAL noos OR RTOS STREQUAL "") set(RTOS_SUFFIX "") else() set(RTOS_SUFFIX _${RTOS}) endif() # export RTOS_SUFFIX to parent scope set(RTOS_SUFFIX ${RTOS_SUFFIX} PARENT_SCOPE) pico_add_extra_outputs(${TARGET}) pico_enable_stdio_uart(${TARGET} 1) target_link_libraries(${TARGET} PUBLIC pico_stdlib pico_bootsel_via_double_reset tinyusb_board${RTOS_SUFFIX} tinyusb_additions) # family_flash_openocd(${TARGET} ${OPENOCD_OPTION}) family_flash_jlink(${TARGET}) endfunction() function(rp2040_family_configure_example_warnings TARGET) if (NOT PICO_TINYUSB_NO_EXAMPLE_WARNINGS) family_add_default_example_warnings(${TARGET}) endif() if(CMAKE_C_COMPILER_ID STREQUAL "Clang") target_compile_options(${TARGET} PRIVATE -Wno-unreachable-code) endif() suppress_tinyusb_warnings() endfunction() function(family_configure_device_example TARGET RTOS) family_configure_target(${TARGET} ${RTOS}) target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_device${RTOS_SUFFIX}) rp2040_family_configure_example_warnings(${TARGET}) endfunction() function(family_add_pico_pio_usb TARGET) target_link_libraries(${TARGET} PUBLIC tinyusb_pico_pio_usb) endfunction() # since Pico-PIO_USB compiler support may lag, and change from version to version, add a function that pico-sdk/pico-examples # can check (if present) in case the user has updated their TinyUSB function(is_compiler_supported_by_pico_pio_usb OUTVAR) if ((NOT CMAKE_C_COMPILER_ID STREQUAL "GNU")) SET(${OUTVAR} 0 PARENT_SCOPE) else() set(${OUTVAR} 1 PARENT_SCOPE) endif() endfunction() function(family_configure_host_example TARGET RTOS) family_configure_target(${TARGET} ${RTOS}) target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_host${RTOS_SUFFIX}) rp2040_family_configure_example_warnings(${TARGET}) # For rp2040 enable pico-pio-usb if (TARGET tinyusb_pico_pio_usb) # Pico-PIO-USB does not compile with all pico-sdk supported compilers, so check before enabling it is_compiler_supported_by_pico_pio_usb(PICO_PIO_USB_COMPILER_SUPPORTED) if (PICO_PIO_USB_COMPILER_SUPPORTED) family_add_pico_pio_usb(${PROJECT}) endif() endif() # for max3421 host if (MAX3421_HOST STREQUAL "1") target_link_libraries(${TARGET} PUBLIC tinyusb_host_max3421) endif() endfunction() function(family_configure_dual_usb_example TARGET RTOS) family_configure_target(${TARGET} ${RTOS}) # require tinyusb_pico_pio_usb target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_device tinyusb_host tinyusb_pico_pio_usb ) rp2040_family_configure_example_warnings(${TARGET}) endfunction() function(check_and_add_pico_pio_usb_support) # check for pico_generate_pio_header (as depending on environment we may be called before SDK is # initialized in which case it isn't available yet), and only do the initialization once if (COMMAND pico_generate_pio_header AND NOT TARGET tinyusb_pico_pio_usb) #------------------------------------ # PIO USB for both host and device #------------------------------------ if (NOT DEFINED PICO_PIO_USB_PATH) set(PICO_PIO_USB_PATH "${TOP}/hw/mcu/raspberry_pi/Pico-PIO-USB") endif() if (EXISTS ${PICO_PIO_USB_PATH}/src/pio_usb.c) add_library(tinyusb_pico_pio_usb INTERFACE) target_sources(tinyusb_device_base INTERFACE ${TOP}/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c ) target_sources(tinyusb_host_base INTERFACE ${TOP}/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c ) target_sources(tinyusb_pico_pio_usb INTERFACE ${PICO_PIO_USB_PATH}/src/pio_usb.c ${PICO_PIO_USB_PATH}/src/pio_usb_host.c ${PICO_PIO_USB_PATH}/src/pio_usb_device.c ${PICO_PIO_USB_PATH}/src/usb_crc.c ) target_include_directories(tinyusb_pico_pio_usb INTERFACE ${PICO_PIO_USB_PATH}/src ) target_link_libraries(tinyusb_pico_pio_usb INTERFACE hardware_dma hardware_pio pico_multicore ) target_compile_definitions(tinyusb_pico_pio_usb INTERFACE PIO_USB_USE_TINYUSB ) pico_generate_pio_header(tinyusb_pico_pio_usb ${PICO_PIO_USB_PATH}/src/usb_tx.pio) pico_generate_pio_header(tinyusb_pico_pio_usb ${PICO_PIO_USB_PATH}/src/usb_rx.pio) endif() endif() endfunction() # Try to add Pico-PIO_USB support now for the case where this file is included directly # after Pico SDK initialization, but without using the family_ functions (as is the case # when included by the SDK itself) check_and_add_pico_pio_usb_support() function(family_initialize_project PROJECT DIR) # call the original version of this function from family_common.cmake _family_initialize_project(${PROJECT} ${DIR}) enable_language(C CXX ASM) pico_sdk_init() # now re-check for adding Pico-PIO_USB support now SDK is definitely available check_and_add_pico_pio_usb_support() endfunction() # This method must be called from the project scope to suppress known warnings in TinyUSB source files function(suppress_tinyusb_warnings) # some of these are pretty silly warnings only occurring in some older GCC versions 9 or prior if (CMAKE_C_COMPILER_ID STREQUAL "GNU") if (CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) set(CONVERSION_WARNING_FILES ${PICO_TINYUSB_PATH}/src/tusb.c ${PICO_TINYUSB_PATH}/src/common/tusb_fifo.c ${PICO_TINYUSB_PATH}/src/device/usbd.c ${PICO_TINYUSB_PATH}/src/device/usbd_control.c ${PICO_TINYUSB_PATH}/src/host/usbh.c ${PICO_TINYUSB_PATH}/src/class/cdc/cdc_device.c ${PICO_TINYUSB_PATH}/src/class/hid/hid_device.c ${PICO_TINYUSB_PATH}/src/class/hid/hid_host.c ${PICO_TINYUSB_PATH}/src/class/audio/audio_device.c ${PICO_TINYUSB_PATH}/src/class/dfu/dfu_device.c ${PICO_TINYUSB_PATH}/src/class/dfu/dfu_rt_device.c ${PICO_TINYUSB_PATH}/src/class/midi/midi_device.c ${PICO_TINYUSB_PATH}/src/class/usbtmc/usbtmc_device.c ${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/hcd_rp2040.c ) foreach(SOURCE_FILE IN LISTS CONVERSION_WARNING_FILES) set_source_files_properties( ${SOURCE_FILE} PROPERTIES COMPILE_FLAGS "-Wno-conversion") endforeach() endif() if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0) set_source_files_properties( ${PICO_TINYUSB_PATH}/lib/fatfs/source/ff.c COMPILE_FLAGS "-Wno-stringop-overflow -Wno-array-bounds") endif() set_source_files_properties( ${PICO_TINYUSB_PATH}/lib/fatfs/source/ff.c PROPERTIES COMPILE_FLAGS "-Wno-conversion -Wno-cast-qual") set_source_files_properties( ${PICO_TINYUSB_PATH}/lib/lwip/src/core/tcp_in.c ${PICO_TINYUSB_PATH}/lib/lwip/src/core/tcp_out.c PROPERTIES COMPILE_FLAGS "-Wno-conversion") set_source_files_properties( ${PICO_TINYUSB_PATH}/lib/networking/dnserver.c ${PICO_TINYUSB_PATH}/lib/networking/dhserver.c ${PICO_TINYUSB_PATH}/lib/networking/rndis_reports.c PROPERTIES COMPILE_FLAGS "-Wno-conversion -Wno-sign-conversion") if (TARGET tinyusb_pico_pio_usb) set_source_files_properties( ${PICO_TINYUSB_PATH}/hw/mcu/raspberry_pi/Pico-PIO-USB/src/pio_usb_device.c ${PICO_TINYUSB_PATH}/hw/mcu/raspberry_pi/Pico-PIO-USB/src/pio_usb.c ${PICO_TINYUSB_PATH}/hw/mcu/raspberry_pi/Pico-PIO-USB/src/pio_usb_host.c ${PICO_TINYUSB_PATH}/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c PROPERTIES COMPILE_FLAGS "-Wno-conversion -Wno-cast-qual -Wno-attributes") endif() elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang") set_source_files_properties( ${PICO_TINYUSB_PATH}/src/class/cdc/cdc_device.c COMPILE_FLAGS "-Wno-unreachable-code") set_source_files_properties( ${PICO_TINYUSB_PATH}/lib/fatfs/source/ff.c PROPERTIES COMPILE_FLAGS "-Wno-cast-qual") endif() endfunction() ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.mk ================================================ JLINK_DEVICE = rp2040_m0_0 PYOCD_TARGET = rp2040 DEPS_SUBMODULES += hw/mcu/raspberry_pi/Pico-PIO-USB ifeq ($(DEBUG), 1) CMAKE_DEFSYM += -DCMAKE_BUILD_TYPE=Debug endif $(BUILD): cmake -S . -B $(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) -DPICO_BUILD_DOCS=0 $(CMAKE_DEFSYM) all: $(BUILD) $(MAKE) -C $(BUILD) flash: flash-pyocd flash-uf2: @$(CP) $(BUILD)/$(PROJECT).uf2 /media/$(USER)/RPI-RP2 ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/rp2040/pico_sdk_import.cmake ================================================ # This is a copy of /external/pico_sdk_import.cmake # This can be dropped into an external project to help locate this SDK # It should be include()ed prior to project() if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH)) set(PICO_SDK_PATH $ENV{PICO_SDK_PATH}) message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')") endif () if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT)) set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT}) message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')") endif () if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH)) set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH}) message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')") endif () set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK") set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable") set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK") if (NOT PICO_SDK_PATH) if (PICO_SDK_FETCH_FROM_GIT) include(FetchContent) set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR}) if (PICO_SDK_FETCH_FROM_GIT_PATH) get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}") endif () FetchContent_Declare( pico_sdk GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk GIT_TAG master ) if (NOT pico_sdk) message("Downloading Raspberry Pi Pico SDK") FetchContent_Populate(pico_sdk) set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR}) endif () set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE}) else () message(FATAL_ERROR "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git." ) endif () endif () get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") if (NOT EXISTS ${PICO_SDK_PATH}) message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found") endif () set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake) if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE}) message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK") endif () set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) include(${PICO_SDK_INIT_CMAKE_FILE}) ================================================ FILE: pico-sdk/lib/tinyusb/hw/bsp/rp2040/rp2040-openocd.cfg ================================================ source [find interface/cmsis-dap.cfg] adapter speed 5000 source [find target/rp2040.cfg] ================================================ FILE: pico-sdk/lib/tinyusb/src/CMakeLists.txt ================================================ # TODO more docs and example on how to use this file # Usage: requires target tinyusb_config which expose tusb_config.h file # TINYUSB_TARGET_PREFIX and TINYUSB_TARGET_SUFFIX can be used to change the name of the target cmake_minimum_required(VERSION 3.17) # Add tinyusb to a target, if user don't want to compile tinyusb as a library function(add_tinyusb TARGET) target_sources(${TARGET} PRIVATE # common ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/tusb.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/common/tusb_fifo.c # device ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/device/usbd.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/device/usbd_control.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/audio/audio_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/cdc/cdc_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/dfu/dfu_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/dfu/dfu_rt_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/hid/hid_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/midi/midi_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/msc/msc_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/net/ecm_rndis_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/net/ncm_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/usbtmc/usbtmc_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/vendor/vendor_device.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/video/video_device.c # host ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/host/usbh.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/host/hub.c ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/class/hid/hid_host.c # typec ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/typec/usbc.c ) target_include_directories(${TARGET} PUBLIC ${CMAKE_CURRENT_FUNCTION_LIST_DIR} # TODO for net driver, should be removed/changed ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../lib/networking ) if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") target_compile_options(${TARGET} PRIVATE -Wall -Wextra -Werror -Wfatal-errors -Wdouble-promotion -Wstrict-prototypes -Wstrict-overflow -Werror-implicit-function-declaration -Wfloat-equal -Wundef -Wshadow -Wwrite-strings -Wsign-compare -Wmissing-format-attribute -Wunreachable-code -Wcast-align -Wcast-function-type -Wcast-qual -Wnull-dereference -Wuninitialized -Wunused -Wunused-function -Wreturn-type -Wredundant-decls ) elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR") endif () endfunction() #------------------------------------ # TinyUSB as library target #------------------------------------ if (NOT DEFINED TINYUSB_TARGET) set(TINYUSB_TARGET "tinyusb") endif () set(TINYUSB_CONFIG_TARGET "${TINYUSB_TARGET}_config") if (DEFINED TINYUSB_TARGET_PREFIX) set(TINYUSB_TARGET "${TINYUSB_TARGET_PREFIX}${TINYUSB_TARGET}") set(TINYUSB_CONFIG_TARGET "${TINYUSB_TARGET_PREFIX}${TINYUSB_CONFIG_TARGET}") endif () if (DEFINED TINYUSB_TARGET_SUFFIX) set(TINYUSB_TARGET "${TINYUSB_TARGET}${TINYUSB_TARGET_SUFFIX}") set(TINYUSB_CONFIG_TARGET "${TINYUSB_CONFIG_TARGET}${TINYUSB_TARGET_SUFFIX}") endif () add_library(${TINYUSB_TARGET} STATIC) add_tinyusb(${TINYUSB_TARGET}) # Check if tinyusb_config target is defined if (NOT TARGET ${TINYUSB_CONFIG_TARGET}) message(FATAL_ERROR "${TINYUSB_CONFIG_TARGET} target is not defined") endif() # Link with tinyusb_config target target_link_libraries(${TINYUSB_TARGET} PUBLIC ${TINYUSB_CONFIG_TARGET} ) ================================================ FILE: pico-sdk/lib/tinyusb/src/class/cdc/cdc.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ /** \ingroup group_class * \defgroup ClassDriver_CDC Communication Device Class (CDC) * Currently only Abstract Control Model subclass is supported * @{ */ #ifndef _TUSB_CDC_H__ #define _TUSB_CDC_H__ #include "common/tusb_common.h" #ifdef __cplusplus extern "C" { #endif /** \defgroup ClassDriver_CDC_Common Common Definitions * @{ */ //--------------------------------------------------------------------+ // CDC Communication Interface Class //--------------------------------------------------------------------+ /// Communication Interface Subclass Codes typedef enum { CDC_COMM_SUBCLASS_DIRECT_LINE_CONTROL_MODEL = 0x01 , ///< Direct Line Control Model [USBPSTN1.2] CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL = 0x02 , ///< Abstract Control Model [USBPSTN1.2] CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL = 0x03 , ///< Telephone Control Model [USBPSTN1.2] CDC_COMM_SUBCLASS_MULTICHANNEL_CONTROL_MODEL = 0x04 , ///< Multi-Channel Control Model [USBISDN1.2] CDC_COMM_SUBCLASS_CAPI_CONTROL_MODEL = 0x05 , ///< CAPI Control Model [USBISDN1.2] CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL = 0x06 , ///< Ethernet Networking Control Model [USBECM1.2] CDC_COMM_SUBCLASS_ATM_NETWORKING_CONTROL_MODEL = 0x07 , ///< ATM Networking Control Model [USBATM1.2] CDC_COMM_SUBCLASS_WIRELESS_HANDSET_CONTROL_MODEL = 0x08 , ///< Wireless Handset Control Model [USBWMC1.1] CDC_COMM_SUBCLASS_DEVICE_MANAGEMENT = 0x09 , ///< Device Management [USBWMC1.1] CDC_COMM_SUBCLASS_MOBILE_DIRECT_LINE_MODEL = 0x0A , ///< Mobile Direct Line Model [USBWMC1.1] CDC_COMM_SUBCLASS_OBEX = 0x0B , ///< OBEX [USBWMC1.1] CDC_COMM_SUBCLASS_ETHERNET_EMULATION_MODEL = 0x0C , ///< Ethernet Emulation Model [USBEEM1.0] CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL = 0x0D ///< Network Control Model [USBNCM1.0] } cdc_comm_sublcass_type_t; /// Communication Interface Protocol Codes typedef enum { CDC_COMM_PROTOCOL_NONE = 0x00 , ///< No specific protocol CDC_COMM_PROTOCOL_ATCOMMAND = 0x01 , ///< AT Commands: V.250 etc CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101 = 0x02 , ///< AT Commands defined by PCCA-101 CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101_AND_ANNEXO = 0x03 , ///< AT Commands defined by PCCA-101 & Annex O CDC_COMM_PROTOCOL_ATCOMMAND_GSM_707 = 0x04 , ///< AT Commands defined by GSM 07.07 CDC_COMM_PROTOCOL_ATCOMMAND_3GPP_27007 = 0x05 , ///< AT Commands defined by 3GPP 27.007 CDC_COMM_PROTOCOL_ATCOMMAND_CDMA = 0x06 , ///< AT Commands defined by TIA for CDMA CDC_COMM_PROTOCOL_ETHERNET_EMULATION_MODEL = 0x07 ///< Ethernet Emulation Model } cdc_comm_protocol_type_t; //------------- SubType Descriptor in COMM Functional Descriptor -------------// /// Communication Interface SubType Descriptor typedef enum { CDC_FUNC_DESC_HEADER = 0x00 , ///< Header Functional Descriptor, which marks the beginning of the concatenated set of functional descriptors for the interface. CDC_FUNC_DESC_CALL_MANAGEMENT = 0x01 , ///< Call Management Functional Descriptor. CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT = 0x02 , ///< Abstract Control Management Functional Descriptor. CDC_FUNC_DESC_DIRECT_LINE_MANAGEMENT = 0x03 , ///< Direct Line Management Functional Descriptor. CDC_FUNC_DESC_TELEPHONE_RINGER = 0x04 , ///< Telephone Ringer Functional Descriptor. CDC_FUNC_DESC_TELEPHONE_CALL_AND_LINE_STATE_REPORTING_CAPACITY = 0x05 , ///< Telephone Call and Line State Reporting Capabilities Functional Descriptor. CDC_FUNC_DESC_UNION = 0x06 , ///< Union Functional Descriptor CDC_FUNC_DESC_COUNTRY_SELECTION = 0x07 , ///< Country Selection Functional Descriptor CDC_FUNC_DESC_TELEPHONE_OPERATIONAL_MODES = 0x08 , ///< Telephone Operational ModesFunctional Descriptor CDC_FUNC_DESC_USB_TERMINAL = 0x09 , ///< USB Terminal Functional Descriptor CDC_FUNC_DESC_NETWORK_CHANNEL_TERMINAL = 0x0A , ///< Network Channel Terminal Descriptor CDC_FUNC_DESC_PROTOCOL_UNIT = 0x0B , ///< Protocol Unit Functional Descriptor CDC_FUNC_DESC_EXTENSION_UNIT = 0x0C , ///< Extension Unit Functional Descriptor CDC_FUNC_DESC_MULTICHANEL_MANAGEMENT = 0x0D , ///< Multi-Channel Management Functional Descriptor CDC_FUNC_DESC_CAPI_CONTROL_MANAGEMENT = 0x0E , ///< CAPI Control Management Functional Descriptor CDC_FUNC_DESC_ETHERNET_NETWORKING = 0x0F , ///< Ethernet Networking Functional Descriptor CDC_FUNC_DESC_ATM_NETWORKING = 0x10 , ///< ATM Networking Functional Descriptor CDC_FUNC_DESC_WIRELESS_HANDSET_CONTROL_MODEL = 0x11 , ///< Wireless Handset Control Model Functional Descriptor CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL = 0x12 , ///< Mobile Direct Line Model Functional Descriptor CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL_DETAIL = 0x13 , ///< MDLM Detail Functional Descriptor CDC_FUNC_DESC_DEVICE_MANAGEMENT_MODEL = 0x14 , ///< Device Management Model Functional Descriptor CDC_FUNC_DESC_OBEX = 0x15 , ///< OBEX Functional Descriptor CDC_FUNC_DESC_COMMAND_SET = 0x16 , ///< Command Set Functional Descriptor CDC_FUNC_DESC_COMMAND_SET_DETAIL = 0x17 , ///< Command Set Detail Functional Descriptor CDC_FUNC_DESC_TELEPHONE_CONTROL_MODEL = 0x18 , ///< Telephone Control Model Functional Descriptor CDC_FUNC_DESC_OBEX_SERVICE_IDENTIFIER = 0x19 , ///< OBEX Service Identifier Functional Descriptor CDC_FUNC_DESC_NCM = 0x1A , ///< NCM Functional Descriptor }cdc_func_desc_type_t; //--------------------------------------------------------------------+ // CDC Data Interface Class //--------------------------------------------------------------------+ // SUBCLASS code of Data Interface is not used and should/must be zero // Data Interface Protocol Codes typedef enum{ CDC_DATA_PROTOCOL_ISDN_BRI = 0x30, ///< Physical interface protocol for ISDN BRI CDC_DATA_PROTOCOL_HDLC = 0x31, ///< HDLC CDC_DATA_PROTOCOL_TRANSPARENT = 0x32, ///< Transparent CDC_DATA_PROTOCOL_Q921_MANAGEMENT = 0x50, ///< Management protocol for Q.921 data link protocol CDC_DATA_PROTOCOL_Q921_DATA_LINK = 0x51, ///< Data link protocol for Q.931 CDC_DATA_PROTOCOL_Q921_TEI_MULTIPLEXOR = 0x52, ///< TEI-multiplexor for Q.921 data link protocol CDC_DATA_PROTOCOL_V42BIS_DATA_COMPRESSION = 0x90, ///< Data compression procedures CDC_DATA_PROTOCOL_EURO_ISDN = 0x91, ///< Euro-ISDN protocol control CDC_DATA_PROTOCOL_V24_RATE_ADAPTION_TO_ISDN = 0x92, ///< V.24 rate adaptation to ISDN CDC_DATA_PROTOCOL_CAPI_COMMAND = 0x93, ///< CAPI Commands CDC_DATA_PROTOCOL_HOST_BASED_DRIVER = 0xFD, ///< Host based driver. Note: This protocol code should only be used in messages between host and device to identify the host driver portion of a protocol stack. CDC_DATA_PROTOCOL_IN_PROTOCOL_UNIT_FUNCTIONAL_DESCRIPTOR = 0xFE ///< The protocol(s) are described using a ProtocolUnit Functional Descriptors on Communications Class Interface }cdc_data_protocol_type_t; //--------------------------------------------------------------------+ // Management Element Request (Control Endpoint) //--------------------------------------------------------------------+ /// Communication Interface Management Element Request Codes typedef enum { CDC_REQUEST_SEND_ENCAPSULATED_COMMAND = 0x00, ///< is used to issue a command in the format of the supported control protocol of the Communications Class interface CDC_REQUEST_GET_ENCAPSULATED_RESPONSE = 0x01, ///< is used to request a response in the format of the supported control protocol of the Communications Class interface. CDC_REQUEST_SET_COMM_FEATURE = 0x02, CDC_REQUEST_GET_COMM_FEATURE = 0x03, CDC_REQUEST_CLEAR_COMM_FEATURE = 0x04, CDC_REQUEST_SET_AUX_LINE_STATE = 0x10, CDC_REQUEST_SET_HOOK_STATE = 0x11, CDC_REQUEST_PULSE_SETUP = 0x12, CDC_REQUEST_SEND_PULSE = 0x13, CDC_REQUEST_SET_PULSE_TIME = 0x14, CDC_REQUEST_RING_AUX_JACK = 0x15, CDC_REQUEST_SET_LINE_CODING = 0x20, CDC_REQUEST_GET_LINE_CODING = 0x21, CDC_REQUEST_SET_CONTROL_LINE_STATE = 0x22, CDC_REQUEST_SEND_BREAK = 0x23, CDC_REQUEST_SET_RINGER_PARMS = 0x30, CDC_REQUEST_GET_RINGER_PARMS = 0x31, CDC_REQUEST_SET_OPERATION_PARMS = 0x32, CDC_REQUEST_GET_OPERATION_PARMS = 0x33, CDC_REQUEST_SET_LINE_PARMS = 0x34, CDC_REQUEST_GET_LINE_PARMS = 0x35, CDC_REQUEST_DIAL_DIGITS = 0x36, CDC_REQUEST_SET_UNIT_PARAMETER = 0x37, CDC_REQUEST_GET_UNIT_PARAMETER = 0x38, CDC_REQUEST_CLEAR_UNIT_PARAMETER = 0x39, CDC_REQUEST_GET_PROFILE = 0x3A, CDC_REQUEST_SET_ETHERNET_MULTICAST_FILTERS = 0x40, CDC_REQUEST_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x41, CDC_REQUEST_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x42, CDC_REQUEST_SET_ETHERNET_PACKET_FILTER = 0x43, CDC_REQUEST_GET_ETHERNET_STATISTIC = 0x44, CDC_REQUEST_SET_ATM_DATA_FORMAT = 0x50, CDC_REQUEST_GET_ATM_DEVICE_STATISTICS = 0x51, CDC_REQUEST_SET_ATM_DEFAULT_VC = 0x52, CDC_REQUEST_GET_ATM_VC_STATISTICS = 0x53, CDC_REQUEST_MDLM_SEMANTIC_MODEL = 0x60, } cdc_management_request_t; typedef enum { CDC_CONTROL_LINE_STATE_DTR = 0x01, CDC_CONTROL_LINE_STATE_RTS = 0x02, } cdc_control_line_state_t; typedef enum { CDC_LINE_CODING_STOP_BITS_1 = 0, // 1 bit CDC_LINE_CODING_STOP_BITS_1_5 = 1, // 1.5 bits CDC_LINE_CODING_STOP_BITS_2 = 2, // 2 bits } cdc_line_coding_stopbits_t; // TODO Backward compatible for typos. Maybe removed in the future release #define CDC_LINE_CONDING_STOP_BITS_1 CDC_LINE_CODING_STOP_BITS_1 #define CDC_LINE_CONDING_STOP_BITS_1_5 CDC_LINE_CODING_STOP_BITS_1_5 #define CDC_LINE_CONDING_STOP_BITS_2 CDC_LINE_CODING_STOP_BITS_2 typedef enum { CDC_LINE_CODING_PARITY_NONE = 0, CDC_LINE_CODING_PARITY_ODD = 1, CDC_LINE_CODING_PARITY_EVEN = 2, CDC_LINE_CODING_PARITY_MARK = 3, CDC_LINE_CODING_PARITY_SPACE = 4, } cdc_line_coding_parity_t; //--------------------------------------------------------------------+ // Management Element Notification (Notification Endpoint) //--------------------------------------------------------------------+ /// 6.3 Notification Codes typedef enum { CDC_NOTIF_NETWORK_CONNECTION = 0x00, ///< This notification allows the device to notify the host about network connection status. CDC_NOTIF_RESPONSE_AVAILABLE = 0x01, ///< This notification allows the device to notify the hostthat a response is available. This response can be retrieved with a subsequent \ref CDC_REQUEST_GET_ENCAPSULATED_RESPONSE request. CDC_NOTIF_AUX_JACK_HOOK_STATE = 0x08, CDC_NOTIF_RING_DETECT = 0x09, CDC_NOTIF_SERIAL_STATE = 0x20, CDC_NOTIF_CALL_STATE_CHANGE = 0x28, CDC_NOTIF_LINE_STATE_CHANGE = 0x29, CDC_NOTIF_CONNECTION_SPEED_CHANGE = 0x2A, ///< This notification allows the device to inform the host-networking driver that a change in either the upstream or the downstream bit rate of the connection has occurred CDC_NOTIF_MDLM_SEMANTIC_MODEL_NOTIFICATION = 0x40, }cdc_notification_request_t; //--------------------------------------------------------------------+ // Class Specific Functional Descriptor (Communication Interface) //--------------------------------------------------------------------+ // Start of all packed definitions for compiler without per-type packed TU_ATTR_PACKED_BEGIN TU_ATTR_BIT_FIELD_ORDER_BEGIN /// Header Functional Descriptor (Communication Interface) typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes. uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUNC_DESC_ uint16_t bcdCDC ; ///< CDC release number in Binary-Coded Decimal }cdc_desc_func_header_t; /// Union Functional Descriptor (Communication Interface) typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes. uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ uint8_t bControlInterface ; ///< Interface number of Communication Interface uint8_t bSubordinateInterface ; ///< Array of Interface number of Data Interface }cdc_desc_func_union_t; #define cdc_desc_func_union_n_t(no_slave)\ struct TU_ATTR_PACKED { \ uint8_t bLength ;\ uint8_t bDescriptorType ;\ uint8_t bDescriptorSubType ;\ uint8_t bControlInterface ;\ uint8_t bSubordinateInterface[no_slave] ;\ } /// Country Selection Functional Descriptor (Communication Interface) typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes. uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ uint8_t iCountryCodeRelDate ; ///< Index of a string giving the release date for the implemented ISO 3166 Country Codes. uint16_t wCountryCode ; ///< Country code in the format as defined in [ISO3166], release date as specified inoffset 3 for the first supported country. }cdc_desc_func_country_selection_t; #define cdc_desc_func_country_selection_n_t(no_country) \ struct TU_ATTR_PACKED { \ uint8_t bLength ;\ uint8_t bDescriptorType ;\ uint8_t bDescriptorSubType ;\ uint8_t iCountryCodeRelDate ;\ uint16_t wCountryCode[no_country] ;\ } //--------------------------------------------------------------------+ // PUBLIC SWITCHED TELEPHONE NETWORK (PSTN) SUBCLASS //--------------------------------------------------------------------+ /// \brief Call Management Functional Descriptor /// \details This functional descriptor describes the processing of calls for the Communications Class interface. typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes. uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ struct { uint8_t handle_call : 1; ///< 0 - Device sends/receives call management information only over the Communications Class interface. 1 - Device can send/receive call management information over a Data Class interface. uint8_t send_recv_call : 1; ///< 0 - Device does not handle call management itself. 1 - Device handles call management itself. uint8_t TU_RESERVED : 6; } bmCapabilities; uint8_t bDataInterface; }cdc_desc_func_call_management_t; typedef struct TU_ATTR_PACKED { uint8_t support_comm_request : 1; ///< Device supports the request combination of Set_Comm_Feature, Clear_Comm_Feature, and Get_Comm_Feature. uint8_t support_line_request : 1; ///< Device supports the request combination of Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State. uint8_t support_send_break : 1; ///< Device supports the request Send_Break uint8_t support_notification_network_connection : 1; ///< Device supports the notification Network_Connection. uint8_t TU_RESERVED : 4; }cdc_acm_capability_t; TU_VERIFY_STATIC(sizeof(cdc_acm_capability_t) == 1, "mostly problem with compiler"); /// Abstract Control Management Functional Descriptor /// This functional descriptor describes the commands supported by by the Communications Class interface with SubClass code of \ref CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes. uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ cdc_acm_capability_t bmCapabilities ; }cdc_desc_func_acm_t; /// \brief Direct Line Management Functional Descriptor /// \details This functional descriptor describes the commands supported by the Communications Class interface with SubClass code of \ref CDC_FUNC_DESC_DIRECT_LINE_MANAGEMENT typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes. uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ struct { uint8_t require_pulse_setup : 1; ///< Device requires extra Pulse_Setup request during pulse dialing sequence to disengage holding circuit. uint8_t support_aux_request : 1; ///< Device supports the request combination of Set_Aux_Line_State, Ring_Aux_Jack, and notification Aux_Jack_Hook_State. uint8_t support_pulse_request : 1; ///< Device supports the request combination of Pulse_Setup, Send_Pulse, and Set_Pulse_Time. uint8_t TU_RESERVED : 5; } bmCapabilities; }cdc_desc_func_direct_line_management_t; /// \brief Telephone Ringer Functional Descriptor /// \details The Telephone Ringer functional descriptor describes the ringer capabilities supported by the Communications Class interface, /// with the SubClass code of \ref CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes. uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ uint8_t bRingerVolSteps ; uint8_t bNumRingerPatterns ; }cdc_desc_func_telephone_ringer_t; /// \brief Telephone Operational Modes Functional Descriptor /// \details The Telephone Operational Modes functional descriptor describes the operational modes supported by /// the Communications Class interface, with the SubClass code of \ref CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes. uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ struct { uint8_t simple_mode : 1; uint8_t standalone_mode : 1; uint8_t computer_centric_mode : 1; uint8_t TU_RESERVED : 5; } bmCapabilities; }cdc_desc_func_telephone_operational_modes_t; /// \brief Telephone Call and Line State Reporting Capabilities Descriptor /// \details The Telephone Call and Line State Reporting Capabilities functional descriptor describes the abilities of a /// telephone device to report optional call and line states. typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes. uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ struct { uint32_t interrupted_dialtone : 1; ///< 0 : Reports only dialtone (does not differentiate between normal and interrupted dialtone). 1 : Reports interrupted dialtone in addition to normal dialtone uint32_t ringback_busy_fastbusy : 1; ///< 0 : Reports only dialing state. 1 : Reports ringback, busy, and fast busy states. uint32_t caller_id : 1; ///< 0 : Does not report caller ID. 1 : Reports caller ID information. uint32_t incoming_distinctive : 1; ///< 0 : Reports only incoming ringing. 1 : Reports incoming distinctive ringing patterns. uint32_t dual_tone_multi_freq : 1; ///< 0 : Cannot report dual tone multi-frequency (DTMF) digits input remotely over the telephone line. 1 : Can report DTMF digits input remotely over the telephone line. uint32_t line_state_change : 1; ///< 0 : Does not support line state change notification. 1 : Does support line state change notification uint32_t TU_RESERVED0 : 2; uint32_t TU_RESERVED1 : 16; uint32_t TU_RESERVED2 : 8; } bmCapabilities; }cdc_desc_func_telephone_call_state_reporting_capabilities_t; // TODO remove static inline uint8_t cdc_functional_desc_typeof(uint8_t const * p_desc) { return p_desc[2]; } //--------------------------------------------------------------------+ // Requests //--------------------------------------------------------------------+ typedef struct TU_ATTR_PACKED { uint32_t bit_rate; uint8_t stop_bits; ///< 0: 1 stop bit - 1: 1.5 stop bits - 2: 2 stop bits uint8_t parity; ///< 0: None - 1: Odd - 2: Even - 3: Mark - 4: Space uint8_t data_bits; ///< can be 5, 6, 7, 8 or 16 } cdc_line_coding_t; TU_VERIFY_STATIC(sizeof(cdc_line_coding_t) == 7, "size is not correct"); typedef struct TU_ATTR_PACKED { uint16_t dtr : 1; uint16_t rts : 1; uint16_t : 6; uint16_t : 8; } cdc_line_control_state_t; TU_VERIFY_STATIC(sizeof(cdc_line_control_state_t) == 2, "size is not correct"); TU_ATTR_PACKED_END // End of all packed definitions TU_ATTR_BIT_FIELD_ORDER_END #ifdef __cplusplus } #endif #endif /** @} */ ================================================ FILE: pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if (CFG_TUD_ENABLED && CFG_TUD_CDC) #include "device/usbd.h" #include "device/usbd_pvt.h" #include "cdc_device.h" // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_CDC_LOG_LEVEL #define CFG_TUD_CDC_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif #define TU_LOG_DRV(...) TU_LOG(CFG_TUD_CDC_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ #define BULK_PACKET_SIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) typedef struct { uint8_t itf_num; uint8_t ep_notif; uint8_t ep_in; uint8_t ep_out; // Bit 0: DTR (Data Terminal Ready), Bit 1: RTS (Request to Send) uint8_t line_state; /*------------- From this point, data is not cleared by bus reset -------------*/ char wanted_char; TU_ATTR_ALIGNED(4) cdc_line_coding_t line_coding; // FIFO tu_fifo_t rx_ff; tu_fifo_t tx_ff; uint8_t rx_ff_buf[CFG_TUD_CDC_RX_BUFSIZE]; uint8_t tx_ff_buf[CFG_TUD_CDC_TX_BUFSIZE]; OSAL_MUTEX_DEF(rx_ff_mutex); OSAL_MUTEX_DEF(tx_ff_mutex); // Endpoint Transfer buffer CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_CDC_EP_BUFSIZE]; CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_CDC_EP_BUFSIZE]; }cdcd_interface_t; #define ITF_MEM_RESET_SIZE offsetof(cdcd_interface_t, wanted_char) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ CFG_TUD_MEM_SECTION tu_static cdcd_interface_t _cdcd_itf[CFG_TUD_CDC]; static bool _prep_out_transaction (cdcd_interface_t* p_cdc) { uint8_t const rhport = 0; uint16_t available = tu_fifo_remaining(&p_cdc->rx_ff); // Prepare for incoming data but only allow what we can store in the ring buffer. // TODO Actually we can still carry out the transfer, keeping count of received bytes // and slowly move it to the FIFO when read(). // This pre-check reduces endpoint claiming TU_VERIFY(available >= sizeof(p_cdc->epout_buf)); // claim endpoint TU_VERIFY(usbd_edpt_claim(rhport, p_cdc->ep_out)); // fifo can be changed before endpoint is claimed available = tu_fifo_remaining(&p_cdc->rx_ff); if ( available >= sizeof(p_cdc->epout_buf) ) { return usbd_edpt_xfer(rhport, p_cdc->ep_out, p_cdc->epout_buf, sizeof(p_cdc->epout_buf)); }else { // Release endpoint since we don't make any transfer usbd_edpt_release(rhport, p_cdc->ep_out); return false; } } //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ bool tud_cdc_n_connected(uint8_t itf) { // DTR (bit 0) active is considered as connected return tud_ready() && tu_bit_test(_cdcd_itf[itf].line_state, 0); } uint8_t tud_cdc_n_get_line_state (uint8_t itf) { return _cdcd_itf[itf].line_state; } void tud_cdc_n_get_line_coding (uint8_t itf, cdc_line_coding_t* coding) { (*coding) = _cdcd_itf[itf].line_coding; } void tud_cdc_n_set_wanted_char (uint8_t itf, char wanted) { _cdcd_itf[itf].wanted_char = wanted; } //--------------------------------------------------------------------+ // READ API //--------------------------------------------------------------------+ uint32_t tud_cdc_n_available(uint8_t itf) { return tu_fifo_count(&_cdcd_itf[itf].rx_ff); } uint32_t tud_cdc_n_read(uint8_t itf, void* buffer, uint32_t bufsize) { cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; uint32_t num_read = tu_fifo_read_n(&p_cdc->rx_ff, buffer, (uint16_t) TU_MIN(bufsize, UINT16_MAX)); _prep_out_transaction(p_cdc); return num_read; } bool tud_cdc_n_peek(uint8_t itf, uint8_t* chr) { return tu_fifo_peek(&_cdcd_itf[itf].rx_ff, chr); } void tud_cdc_n_read_flush (uint8_t itf) { cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; tu_fifo_clear(&p_cdc->rx_ff); _prep_out_transaction(p_cdc); } //--------------------------------------------------------------------+ // WRITE API //--------------------------------------------------------------------+ uint32_t tud_cdc_n_write(uint8_t itf, void const* buffer, uint32_t bufsize) { cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; uint16_t ret = tu_fifo_write_n(&p_cdc->tx_ff, buffer, (uint16_t) TU_MIN(bufsize, UINT16_MAX)); // flush if queue more than packet size if ( tu_fifo_count(&p_cdc->tx_ff) >= BULK_PACKET_SIZE #if CFG_TUD_CDC_TX_BUFSIZE < BULK_PACKET_SIZE || tu_fifo_full(&p_cdc->tx_ff) // check full if fifo size is less than packet size #endif ) { tud_cdc_n_write_flush(itf); } return ret; } uint32_t tud_cdc_n_write_flush (uint8_t itf) { cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; // Skip if usb is not ready yet TU_VERIFY( tud_ready(), 0 ); // No data to send if ( !tu_fifo_count(&p_cdc->tx_ff) ) return 0; uint8_t const rhport = 0; // Claim the endpoint TU_VERIFY( usbd_edpt_claim(rhport, p_cdc->ep_in), 0 ); // Pull data from FIFO uint16_t const count = tu_fifo_read_n(&p_cdc->tx_ff, p_cdc->epin_buf, sizeof(p_cdc->epin_buf)); if ( count ) { TU_ASSERT( usbd_edpt_xfer(rhport, p_cdc->ep_in, p_cdc->epin_buf, count), 0 ); return count; }else { // Release endpoint since we don't make any transfer // Note: data is dropped if terminal is not connected usbd_edpt_release(rhport, p_cdc->ep_in); return 0; } } uint32_t tud_cdc_n_write_available (uint8_t itf) { return tu_fifo_remaining(&_cdcd_itf[itf].tx_ff); } bool tud_cdc_n_write_clear (uint8_t itf) { return tu_fifo_clear(&_cdcd_itf[itf].tx_ff); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ void cdcd_init(void) { tu_memclr(_cdcd_itf, sizeof(_cdcd_itf)); for(uint8_t i=0; iwanted_char = (char) -1; // default line coding is : stop bit = 1, parity = none, data bits = 8 p_cdc->line_coding.bit_rate = 115200; p_cdc->line_coding.stop_bits = 0; p_cdc->line_coding.parity = 0; p_cdc->line_coding.data_bits = 8; // Config RX fifo tu_fifo_config(&p_cdc->rx_ff, p_cdc->rx_ff_buf, TU_ARRAY_SIZE(p_cdc->rx_ff_buf), 1, false); // Config TX fifo as overwritable at initialization and will be changed to non-overwritable // if terminal supports DTR bit. Without DTR we do not know if data is actually polled by terminal. // In this way, the most current data is prioritized. tu_fifo_config(&p_cdc->tx_ff, p_cdc->tx_ff_buf, TU_ARRAY_SIZE(p_cdc->tx_ff_buf), 1, true); #if OSAL_MUTEX_REQUIRED osal_mutex_t mutex_rd = osal_mutex_create(&p_cdc->rx_ff_mutex); osal_mutex_t mutex_wr = osal_mutex_create(&p_cdc->tx_ff_mutex); TU_ASSERT(mutex_rd != NULL && mutex_wr != NULL, ); tu_fifo_config_mutex(&p_cdc->rx_ff, NULL, mutex_rd); tu_fifo_config_mutex(&p_cdc->tx_ff, mutex_wr, NULL); #endif } } bool cdcd_deinit(void) { #if OSAL_MUTEX_REQUIRED for(uint8_t i=0; irx_ff.mutex_rd; osal_mutex_t mutex_wr = p_cdc->tx_ff.mutex_wr; if (mutex_rd) { osal_mutex_delete(mutex_rd); tu_fifo_config_mutex(&p_cdc->rx_ff, NULL, NULL); } if (mutex_wr) { osal_mutex_delete(mutex_wr); tu_fifo_config_mutex(&p_cdc->tx_ff, NULL, NULL); } } #endif return true; } void cdcd_reset(uint8_t rhport) { (void) rhport; for(uint8_t i=0; irx_ff); #if !CFG_TUD_CDC_PERSISTENT_TX_BUFF tu_fifo_clear(&p_cdc->tx_ff); #endif tu_fifo_set_overwritable(&p_cdc->tx_ff, true); } } uint16_t cdcd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { // Only support ACM subclass TU_VERIFY( TUSB_CLASS_CDC == itf_desc->bInterfaceClass && CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass, 0); // Find available interface cdcd_interface_t * p_cdc = NULL; for(uint8_t cdc_id=0; cdc_iditf_num = itf_desc->bInterfaceNumber; uint16_t drv_len = sizeof(tusb_desc_interface_t); uint8_t const * p_desc = tu_desc_next( itf_desc ); // Communication Functional Descriptors while ( TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len ) { drv_len += tu_desc_len(p_desc); p_desc = tu_desc_next(p_desc); } if ( TUSB_DESC_ENDPOINT == tu_desc_type(p_desc) ) { // notification endpoint tusb_desc_endpoint_t const * desc_ep = (tusb_desc_endpoint_t const *) p_desc; TU_ASSERT( usbd_edpt_open(rhport, desc_ep), 0 ); p_cdc->ep_notif = desc_ep->bEndpointAddress; drv_len += tu_desc_len(p_desc); p_desc = tu_desc_next(p_desc); } //------------- Data Interface (if any) -------------// if ( (TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && (TUSB_CLASS_CDC_DATA == ((tusb_desc_interface_t const *) p_desc)->bInterfaceClass) ) { // next to endpoint descriptor drv_len += tu_desc_len(p_desc); p_desc = tu_desc_next(p_desc); // Open endpoint pair TU_ASSERT( usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &p_cdc->ep_out, &p_cdc->ep_in), 0 ); drv_len += 2*sizeof(tusb_desc_endpoint_t); } // Prepare for incoming data _prep_out_transaction(p_cdc); return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) bool cdcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { // Handle class request only TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); uint8_t itf = 0; cdcd_interface_t* p_cdc = _cdcd_itf; // Identify which interface to use for ( ; ; itf++, p_cdc++) { if (itf >= TU_ARRAY_SIZE(_cdcd_itf)) return false; if ( p_cdc->itf_num == request->wIndex ) break; } switch ( request->bRequest ) { case CDC_REQUEST_SET_LINE_CODING: if (stage == CONTROL_STAGE_SETUP) { TU_LOG_DRV(" Set Line Coding\r\n"); tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t)); } else if ( stage == CONTROL_STAGE_ACK) { if ( tud_cdc_line_coding_cb ) tud_cdc_line_coding_cb(itf, &p_cdc->line_coding); } break; case CDC_REQUEST_GET_LINE_CODING: if (stage == CONTROL_STAGE_SETUP) { TU_LOG_DRV(" Get Line Coding\r\n"); tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t)); } break; case CDC_REQUEST_SET_CONTROL_LINE_STATE: if (stage == CONTROL_STAGE_SETUP) { tud_control_status(rhport, request); } else if (stage == CONTROL_STAGE_ACK) { // CDC PSTN v1.2 section 6.3.12 // Bit 0: Indicates if DTE is present or not. // This signal corresponds to V.24 signal 108/2 and RS-232 signal DTR (Data Terminal Ready) // Bit 1: Carrier control for half-duplex modems. // This signal corresponds to V.24 signal 105 and RS-232 signal RTS (Request to Send) bool const dtr = tu_bit_test(request->wValue, 0); bool const rts = tu_bit_test(request->wValue, 1); p_cdc->line_state = (uint8_t) request->wValue; // Disable fifo overwriting if DTR bit is set tu_fifo_set_overwritable(&p_cdc->tx_ff, !dtr); TU_LOG_DRV(" Set Control Line State: DTR = %d, RTS = %d\r\n", dtr, rts); // Invoke callback if ( tud_cdc_line_state_cb ) tud_cdc_line_state_cb(itf, dtr, rts); } break; case CDC_REQUEST_SEND_BREAK: if (stage == CONTROL_STAGE_SETUP) { tud_control_status(rhport, request); } else if (stage == CONTROL_STAGE_ACK) { TU_LOG_DRV(" Send Break\r\n"); if ( tud_cdc_send_break_cb ) tud_cdc_send_break_cb(itf, request->wValue); } break; default: return false; // stall unsupported request } return true; } bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { (void) result; uint8_t itf; cdcd_interface_t* p_cdc; // Identify which interface to use for (itf = 0; itf < CFG_TUD_CDC; itf++) { p_cdc = &_cdcd_itf[itf]; if ( ( ep_addr == p_cdc->ep_out ) || ( ep_addr == p_cdc->ep_in ) ) break; } TU_ASSERT(itf < CFG_TUD_CDC); // Received new data if ( ep_addr == p_cdc->ep_out ) { tu_fifo_write_n(&p_cdc->rx_ff, p_cdc->epout_buf, (uint16_t) xferred_bytes); // Check for wanted char and invoke callback if needed if ( tud_cdc_rx_wanted_cb && (((signed char) p_cdc->wanted_char) != -1) ) { for ( uint32_t i = 0; i < xferred_bytes; i++ ) { if ( (p_cdc->wanted_char == p_cdc->epout_buf[i]) && !tu_fifo_empty(&p_cdc->rx_ff) ) { tud_cdc_rx_wanted_cb(itf, p_cdc->wanted_char); } } } // invoke receive callback (if there is still data) if (tud_cdc_rx_cb && !tu_fifo_empty(&p_cdc->rx_ff) ) tud_cdc_rx_cb(itf); // prepare for OUT transaction _prep_out_transaction(p_cdc); } // Data sent to host, we continue to fetch from tx fifo to send. // Note: This will cause incorrect baudrate set in line coding. // Though maybe the baudrate is not really important !!! if ( ep_addr == p_cdc->ep_in ) { // invoke transmit callback to possibly refill tx fifo if ( tud_cdc_tx_complete_cb ) tud_cdc_tx_complete_cb(itf); if ( 0 == tud_cdc_n_write_flush(itf) ) { // If there is no data left, a ZLP should be sent if // xferred_bytes is multiple of EP Packet size and not zero if ( !tu_fifo_count(&p_cdc->tx_ff) && xferred_bytes && (0 == (xferred_bytes & (BULK_PACKET_SIZE-1))) ) { if ( usbd_edpt_claim(rhport, p_cdc->ep_in) ) { usbd_edpt_xfer(rhport, p_cdc->ep_in, NULL, 0); } } } } // nothing to do with notif endpoint for now return true; } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_CDC_DEVICE_H_ #define _TUSB_CDC_DEVICE_H_ #include "cdc.h" //--------------------------------------------------------------------+ // Class Driver Configuration //--------------------------------------------------------------------+ #if !defined(CFG_TUD_CDC_EP_BUFSIZE) && defined(CFG_TUD_CDC_EPSIZE) #warning CFG_TUD_CDC_EPSIZE is renamed to CFG_TUD_CDC_EP_BUFSIZE, please update to use the new name #define CFG_TUD_CDC_EP_BUFSIZE CFG_TUD_CDC_EPSIZE #endif #ifndef CFG_TUD_CDC_EP_BUFSIZE #define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #endif // By default the TX fifo buffer is cleared on connect / bus reset. // Enable this to persist any data in the fifo instead. #ifndef CFG_TUD_CDC_PERSISTENT_TX_BUFF #define CFG_TUD_CDC_PERSISTENT_TX_BUFF (0) #endif #ifdef __cplusplus extern "C" { #endif /** \addtogroup CDC_Serial Serial * @{ * \defgroup CDC_Serial_Device Device * @{ */ //--------------------------------------------------------------------+ // Application API (Multiple Ports) // CFG_TUD_CDC > 1 //--------------------------------------------------------------------+ // Check if terminal is connected to this port bool tud_cdc_n_connected (uint8_t itf); // Get current line state. Bit 0: DTR (Data Terminal Ready), Bit 1: RTS (Request to Send) uint8_t tud_cdc_n_get_line_state (uint8_t itf); // Get current line encoding: bit rate, stop bits parity etc .. void tud_cdc_n_get_line_coding (uint8_t itf, cdc_line_coding_t* coding); // Set special character that will trigger tud_cdc_rx_wanted_cb() callback on receiving void tud_cdc_n_set_wanted_char (uint8_t itf, char wanted); // Get the number of bytes available for reading uint32_t tud_cdc_n_available (uint8_t itf); // Read received bytes uint32_t tud_cdc_n_read (uint8_t itf, void* buffer, uint32_t bufsize); // Read a byte, return -1 if there is none static inline int32_t tud_cdc_n_read_char (uint8_t itf); // Clear the received FIFO void tud_cdc_n_read_flush (uint8_t itf); // Get a byte from FIFO without removing it bool tud_cdc_n_peek (uint8_t itf, uint8_t* ui8); // Write bytes to TX FIFO, data may remain in the FIFO for a while uint32_t tud_cdc_n_write (uint8_t itf, void const* buffer, uint32_t bufsize); // Write a byte static inline uint32_t tud_cdc_n_write_char (uint8_t itf, char ch); // Write a null-terminated string static inline uint32_t tud_cdc_n_write_str (uint8_t itf, char const* str); // Force sending data if possible, return number of forced bytes uint32_t tud_cdc_n_write_flush (uint8_t itf); // Return the number of bytes (characters) available for writing to TX FIFO buffer in a single n_write operation. uint32_t tud_cdc_n_write_available (uint8_t itf); // Clear the transmit FIFO bool tud_cdc_n_write_clear (uint8_t itf); //--------------------------------------------------------------------+ // Application API (Single Port) //--------------------------------------------------------------------+ static inline bool tud_cdc_connected (void); static inline uint8_t tud_cdc_get_line_state (void); static inline void tud_cdc_get_line_coding (cdc_line_coding_t* coding); static inline void tud_cdc_set_wanted_char (char wanted); static inline uint32_t tud_cdc_available (void); static inline int32_t tud_cdc_read_char (void); static inline uint32_t tud_cdc_read (void* buffer, uint32_t bufsize); static inline void tud_cdc_read_flush (void); static inline bool tud_cdc_peek (uint8_t* ui8); static inline uint32_t tud_cdc_write_char (char ch); static inline uint32_t tud_cdc_write (void const* buffer, uint32_t bufsize); static inline uint32_t tud_cdc_write_str (char const* str); static inline uint32_t tud_cdc_write_flush (void); static inline uint32_t tud_cdc_write_available (void); static inline bool tud_cdc_write_clear (void); //--------------------------------------------------------------------+ // Application Callback API (weak is optional) //--------------------------------------------------------------------+ // Invoked when received new data TU_ATTR_WEAK void tud_cdc_rx_cb(uint8_t itf); // Invoked when received `wanted_char` TU_ATTR_WEAK void tud_cdc_rx_wanted_cb(uint8_t itf, char wanted_char); // Invoked when a TX is complete and therefore space becomes available in TX buffer TU_ATTR_WEAK void tud_cdc_tx_complete_cb(uint8_t itf); // Invoked when line state DTR & RTS are changed via SET_CONTROL_LINE_STATE TU_ATTR_WEAK void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts); // Invoked when line coding is change via SET_LINE_CODING TU_ATTR_WEAK void tud_cdc_line_coding_cb(uint8_t itf, cdc_line_coding_t const* p_line_coding); // Invoked when received send break TU_ATTR_WEAK void tud_cdc_send_break_cb(uint8_t itf, uint16_t duration_ms); //--------------------------------------------------------------------+ // Inline Functions //--------------------------------------------------------------------+ static inline int32_t tud_cdc_n_read_char (uint8_t itf) { uint8_t ch; return tud_cdc_n_read(itf, &ch, 1) ? (int32_t) ch : -1; } static inline uint32_t tud_cdc_n_write_char(uint8_t itf, char ch) { return tud_cdc_n_write(itf, &ch, 1); } static inline uint32_t tud_cdc_n_write_str (uint8_t itf, char const* str) { return tud_cdc_n_write(itf, str, strlen(str)); } static inline bool tud_cdc_connected (void) { return tud_cdc_n_connected(0); } static inline uint8_t tud_cdc_get_line_state (void) { return tud_cdc_n_get_line_state(0); } static inline void tud_cdc_get_line_coding (cdc_line_coding_t* coding) { tud_cdc_n_get_line_coding(0, coding); } static inline void tud_cdc_set_wanted_char (char wanted) { tud_cdc_n_set_wanted_char(0, wanted); } static inline uint32_t tud_cdc_available (void) { return tud_cdc_n_available(0); } static inline int32_t tud_cdc_read_char (void) { return tud_cdc_n_read_char(0); } static inline uint32_t tud_cdc_read (void* buffer, uint32_t bufsize) { return tud_cdc_n_read(0, buffer, bufsize); } static inline void tud_cdc_read_flush (void) { tud_cdc_n_read_flush(0); } static inline bool tud_cdc_peek (uint8_t* ui8) { return tud_cdc_n_peek(0, ui8); } static inline uint32_t tud_cdc_write_char (char ch) { return tud_cdc_n_write_char(0, ch); } static inline uint32_t tud_cdc_write (void const* buffer, uint32_t bufsize) { return tud_cdc_n_write(0, buffer, bufsize); } static inline uint32_t tud_cdc_write_str (char const* str) { return tud_cdc_n_write_str(0, str); } static inline uint32_t tud_cdc_write_flush (void) { return tud_cdc_n_write_flush(0); } static inline uint32_t tud_cdc_write_available(void) { return tud_cdc_n_write_available(0); } static inline bool tud_cdc_write_clear(void) { return tud_cdc_n_write_clear(0); } /** @} */ /** @} */ //--------------------------------------------------------------------+ // INTERNAL USBD-CLASS DRIVER API //--------------------------------------------------------------------+ void cdcd_init (void); bool cdcd_deinit (void); void cdcd_reset (uint8_t rhport); uint16_t cdcd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); bool cdcd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); bool cdcd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); #ifdef __cplusplus } #endif #endif /* _TUSB_CDC_DEVICE_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/class/cdc/serial/cp210x.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2023 Ha Thach (thach@tinyusb.org) for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef TUSB_CP210X_H #define TUSB_CP210X_H // Protocol details can be found at AN571: CP210x Virtual COM Port Interface // https://www.silabs.com/documents/public/application-notes/AN571.pdf #define TU_CP210X_VID 0x10C4 /* Config request codes */ #define CP210X_IFC_ENABLE 0x00 #define CP210X_SET_BAUDDIV 0x01 #define CP210X_GET_BAUDDIV 0x02 #define CP210X_SET_LINE_CTL 0x03 // Set parity, data bits, stop bits #define CP210X_GET_LINE_CTL 0x04 #define CP210X_SET_BREAK 0x05 #define CP210X_IMM_CHAR 0x06 #define CP210X_SET_MHS 0x07 // Set DTR, RTS #define CP210X_GET_MDMSTS 0x08 // Get modem status (DTR, RTS, CTS, DSR, RI, DCD) #define CP210X_SET_XON 0x09 #define CP210X_SET_XOFF 0x0A #define CP210X_SET_EVENTMASK 0x0B #define CP210X_GET_EVENTMASK 0x0C #define CP210X_SET_CHAR 0x0D #define CP210X_GET_CHARS 0x0E #define CP210X_GET_PROPS 0x0F #define CP210X_GET_COMM_STATUS 0x10 #define CP210X_RESET 0x11 #define CP210X_PURGE 0x12 #define CP210X_SET_FLOW 0x13 #define CP210X_GET_FLOW 0x14 #define CP210X_EMBED_EVENTS 0x15 #define CP210X_GET_EVENTSTATE 0x16 #define CP210X_SET_CHARS 0x19 #define CP210X_GET_BAUDRATE 0x1D #define CP210X_SET_BAUDRATE 0x1E #define CP210X_VENDOR_SPECIFIC 0xFF // GPIO, Recipient must be Device #endif //TUSB_CP210X_H ================================================ FILE: pico-sdk/lib/tinyusb/src/class/cdc/serial/ftdi_sio.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2023 Ha Thach (thach@tinyusb.org) for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef TUSB_FTDI_SIO_H #define TUSB_FTDI_SIO_H // VID for matching FTDI devices #define TU_FTDI_VID 0x0403 // Commands #define FTDI_SIO_RESET 0 /* Reset the port */ #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ #define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */ #define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */ #define FTDI_SIO_SET_DATA 4 /* Set the data characteristics of the port */ #define FTDI_SIO_GET_MODEM_STATUS 5 /* Retrieve current value of modem status register */ #define FTDI_SIO_SET_EVENT_CHAR 6 /* Set the event character */ #define FTDI_SIO_SET_ERROR_CHAR 7 /* Set the error character */ #define FTDI_SIO_SET_LATENCY_TIMER 9 /* Set the latency timer */ #define FTDI_SIO_GET_LATENCY_TIMER 0x0a /* Get the latency timer */ #define FTDI_SIO_SET_BITMODE 0x0b /* Set bitbang mode */ #define FTDI_SIO_READ_PINS 0x0c /* Read immediate value of pins */ #define FTDI_SIO_READ_EEPROM 0x90 /* Read EEPROM */ /* FTDI_SIO_RESET */ #define FTDI_SIO_RESET_SIO 0 #define FTDI_SIO_RESET_PURGE_RX 1 #define FTDI_SIO_RESET_PURGE_TX 2 /* * BmRequestType: 0100 0000B * bRequest: FTDI_SIO_RESET * wValue: Control Value * 0 = Reset SIO * 1 = Purge RX buffer * 2 = Purge TX buffer * wIndex: Port * wLength: 0 * Data: None * * The Reset SIO command has this effect: * * Sets flow control set to 'none' * Event char = $0D * Event trigger = disabled * Purge RX buffer * Purge TX buffer * Clear DTR * Clear RTS * baud and data format not reset * * The Purge RX and TX buffer commands affect nothing except the buffers * */ /* FTDI_SIO_MODEM_CTRL */ /* * BmRequestType: 0100 0000B * bRequest: FTDI_SIO_MODEM_CTRL * wValue: ControlValue (see below) * wIndex: Port * wLength: 0 * Data: None * * NOTE: If the device is in RTS/CTS flow control, the RTS set by this * command will be IGNORED without an error being returned * Also - you can not set DTR and RTS with one control message */ #define FTDI_SIO_SET_DTR_MASK 0x1 #define FTDI_SIO_SET_DTR_HIGH ((FTDI_SIO_SET_DTR_MASK << 8) | 1) #define FTDI_SIO_SET_DTR_LOW ((FTDI_SIO_SET_DTR_MASK << 8) | 0) #define FTDI_SIO_SET_RTS_MASK 0x2 #define FTDI_SIO_SET_RTS_HIGH ((FTDI_SIO_SET_RTS_MASK << 8) | 2) #define FTDI_SIO_SET_RTS_LOW ((FTDI_SIO_SET_RTS_MASK << 8) | 0) /* * ControlValue * B0 DTR state * 0 = reset * 1 = set * B1 RTS state * 0 = reset * 1 = set * B2..7 Reserved * B8 DTR state enable * 0 = ignore * 1 = use DTR state * B9 RTS state enable * 0 = ignore * 1 = use RTS state * B10..15 Reserved */ /* FTDI_SIO_SET_FLOW_CTRL */ #define FTDI_SIO_DISABLE_FLOW_CTRL 0x0 #define FTDI_SIO_RTS_CTS_HS (0x1 << 8) #define FTDI_SIO_DTR_DSR_HS (0x2 << 8) #define FTDI_SIO_XON_XOFF_HS (0x4 << 8) /* * BmRequestType: 0100 0000b * bRequest: FTDI_SIO_SET_FLOW_CTRL * wValue: Xoff/Xon * wIndex: Protocol/Port - hIndex is protocol / lIndex is port * wLength: 0 * Data: None * * hIndex protocol is: * B0 Output handshaking using RTS/CTS * 0 = disabled * 1 = enabled * B1 Output handshaking using DTR/DSR * 0 = disabled * 1 = enabled * B2 Xon/Xoff handshaking * 0 = disabled * 1 = enabled * * A value of zero in the hIndex field disables handshaking * * If Xon/Xoff handshaking is specified, the hValue field should contain the * XOFF character and the lValue field contains the XON character. */ /* FTDI_SIO_SET_BAUD_RATE */ /* * BmRequestType: 0100 0000B * bRequest: FTDI_SIO_SET_BAUDRATE * wValue: BaudDivisor value - see below * wIndex: Port * wLength: 0 * Data: None * The BaudDivisor values are calculated as follows (too complicated): */ /* FTDI_SIO_SET_DATA */ #define FTDI_SIO_SET_DATA_PARITY_NONE (0x0 << 8) #define FTDI_SIO_SET_DATA_PARITY_ODD (0x1 << 8) #define FTDI_SIO_SET_DATA_PARITY_EVEN (0x2 << 8) #define FTDI_SIO_SET_DATA_PARITY_MARK (0x3 << 8) #define FTDI_SIO_SET_DATA_PARITY_SPACE (0x4 << 8) #define FTDI_SIO_SET_DATA_STOP_BITS_1 (0x0 << 11) #define FTDI_SIO_SET_DATA_STOP_BITS_15 (0x1 << 11) #define FTDI_SIO_SET_DATA_STOP_BITS_2 (0x2 << 11) #define FTDI_SIO_SET_BREAK (0x1 << 14) /* * BmRequestType: 0100 0000B * bRequest: FTDI_SIO_SET_DATA * wValue: Data characteristics (see below) * wIndex: Port * wLength: 0 * Data: No * * Data characteristics * * B0..7 Number of data bits * B8..10 Parity * 0 = None * 1 = Odd * 2 = Even * 3 = Mark * 4 = Space * B11..13 Stop Bits * 0 = 1 * 1 = 1.5 * 2 = 2 * B14 * 1 = TX ON (break) * 0 = TX OFF (normal state) * B15 Reserved * */ /* * DATA FORMAT * * IN Endpoint * * The device reserves the first two bytes of data on this endpoint to contain * the current values of the modem and line status registers. In the absence of * data, the device generates a message consisting of these two status bytes * every 40 ms * * Byte 0: Modem Status * * Offset Description * B0 Reserved - must be 1 * B1 Reserved - must be 0 * B2 Reserved - must be 0 * B3 Reserved - must be 0 * B4 Clear to Send (CTS) * B5 Data Set Ready (DSR) * B6 Ring Indicator (RI) * B7 Receive Line Signal Detect (RLSD) * * Byte 1: Line Status * * Offset Description * B0 Data Ready (DR) * B1 Overrun Error (OE) * B2 Parity Error (PE) * B3 Framing Error (FE) * B4 Break Interrupt (BI) * B5 Transmitter Holding Register (THRE) * B6 Transmitter Empty (TEMT) * B7 Error in RCVR FIFO * */ #define FTDI_RS0_CTS (1 << 4) #define FTDI_RS0_DSR (1 << 5) #define FTDI_RS0_RI (1 << 6) #define FTDI_RS0_RLSD (1 << 7) #define FTDI_RS_DR 1 #define FTDI_RS_OE (1<<1) #define FTDI_RS_PE (1<<2) #define FTDI_RS_FE (1<<3) #define FTDI_RS_BI (1<<4) #define FTDI_RS_THRE (1<<5) #define FTDI_RS_TEMT (1<<6) #define FTDI_RS_FIFO (1<<7) #endif //TUSB_FTDI_SIO_H ================================================ FILE: pico-sdk/lib/tinyusb/src/class/hid/hid.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ /** \ingroup group_class * \defgroup ClassDriver_HID Human Interface Device (HID) * @{ */ #ifndef _TUSB_HID_H_ #define _TUSB_HID_H_ #include "common/tusb_common.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // Common Definitions //--------------------------------------------------------------------+ /** \defgroup ClassDriver_HID_Common Common Definitions * @{ */ /// USB HID Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength; /**< Numeric expression that is the total size of the HID descriptor */ uint8_t bDescriptorType; /**< Constant name specifying type of HID descriptor. */ uint16_t bcdHID; /**< Numeric expression identifying the HID Class Specification release */ uint8_t bCountryCode; /**< Numeric expression identifying country code of the localized hardware. */ uint8_t bNumDescriptors; /**< Numeric expression specifying the number of class descriptors */ uint8_t bReportType; /**< Type of HID class report. */ uint16_t wReportLength; /**< the total size of the Report descriptor. */ } tusb_hid_descriptor_hid_t; /// HID Subclass typedef enum { HID_SUBCLASS_NONE = 0, ///< No Subclass HID_SUBCLASS_BOOT = 1 ///< Boot Interface Subclass }hid_subclass_enum_t; /// HID Interface Protocol typedef enum { HID_ITF_PROTOCOL_NONE = 0, ///< None HID_ITF_PROTOCOL_KEYBOARD = 1, ///< Keyboard HID_ITF_PROTOCOL_MOUSE = 2 ///< Mouse }hid_interface_protocol_enum_t; /// HID Descriptor Type typedef enum { HID_DESC_TYPE_HID = 0x21, ///< HID Descriptor HID_DESC_TYPE_REPORT = 0x22, ///< Report Descriptor HID_DESC_TYPE_PHYSICAL = 0x23 ///< Physical Descriptor }hid_descriptor_enum_t; /// HID Request Report Type typedef enum { HID_REPORT_TYPE_INVALID = 0, HID_REPORT_TYPE_INPUT, ///< Input HID_REPORT_TYPE_OUTPUT, ///< Output HID_REPORT_TYPE_FEATURE ///< Feature }hid_report_type_t; /// HID Class Specific Control Request typedef enum { HID_REQ_CONTROL_GET_REPORT = 0x01, ///< Get Report HID_REQ_CONTROL_GET_IDLE = 0x02, ///< Get Idle HID_REQ_CONTROL_GET_PROTOCOL = 0x03, ///< Get Protocol HID_REQ_CONTROL_SET_REPORT = 0x09, ///< Set Report HID_REQ_CONTROL_SET_IDLE = 0x0a, ///< Set Idle HID_REQ_CONTROL_SET_PROTOCOL = 0x0b ///< Set Protocol }hid_request_enum_t; /// HID Local Code typedef enum { HID_LOCAL_NotSupported = 0 , ///< NotSupported HID_LOCAL_Arabic , ///< Arabic HID_LOCAL_Belgian , ///< Belgian HID_LOCAL_Canadian_Bilingual , ///< Canadian_Bilingual HID_LOCAL_Canadian_French , ///< Canadian_French HID_LOCAL_Czech_Republic , ///< Czech_Republic HID_LOCAL_Danish , ///< Danish HID_LOCAL_Finnish , ///< Finnish HID_LOCAL_French , ///< French HID_LOCAL_German , ///< German HID_LOCAL_Greek , ///< Greek HID_LOCAL_Hebrew , ///< Hebrew HID_LOCAL_Hungary , ///< Hungary HID_LOCAL_International , ///< International HID_LOCAL_Italian , ///< Italian HID_LOCAL_Japan_Katakana , ///< Japan_Katakana HID_LOCAL_Korean , ///< Korean HID_LOCAL_Latin_American , ///< Latin_American HID_LOCAL_Netherlands_Dutch , ///< Netherlands/Dutch HID_LOCAL_Norwegian , ///< Norwegian HID_LOCAL_Persian_Farsi , ///< Persian (Farsi) HID_LOCAL_Poland , ///< Poland HID_LOCAL_Portuguese , ///< Portuguese HID_LOCAL_Russia , ///< Russia HID_LOCAL_Slovakia , ///< Slovakia HID_LOCAL_Spanish , ///< Spanish HID_LOCAL_Swedish , ///< Swedish HID_LOCAL_Swiss_French , ///< Swiss/French HID_LOCAL_Swiss_German , ///< Swiss/German HID_LOCAL_Switzerland , ///< Switzerland HID_LOCAL_Taiwan , ///< Taiwan HID_LOCAL_Turkish_Q , ///< Turkish-Q HID_LOCAL_UK , ///< UK HID_LOCAL_US , ///< US HID_LOCAL_Yugoslavia , ///< Yugoslavia HID_LOCAL_Turkish_F ///< Turkish-F } hid_local_enum_t; // HID protocol value used by GetProtocol / SetProtocol typedef enum { HID_PROTOCOL_BOOT = 0, HID_PROTOCOL_REPORT = 1 } hid_protocol_mode_enum_t; /** @} */ //--------------------------------------------------------------------+ // GAMEPAD //--------------------------------------------------------------------+ /** \addtogroup ClassDriver_HID_Gamepad Gamepad * @{ */ /* From https://www.kernel.org/doc/html/latest/input/gamepad.html ____________________________ __ / [__ZL__] [__ZR__] \ | / [__ TL __] [__ TR __] \ | Front Triggers __/________________________________\__ __| / _ \ | / /\ __ (N) \ | / || __ |MO| __ _ _ \ | Main Pad | <===DP===> |SE| |ST| (W) -|- (E) | | \ || ___ ___ _ / | /\ \/ / \ / \ (S) /\ __| / \________ | LS | ____ | RS | ________/ \ | | / \ \___/ / \ \___/ / \ | | Control Sticks | / \_____/ \_____/ \ | __| | / \ | \_____/ \_____/ |________|______| |______|___________| D-Pad Left Right Action Pad Stick Stick |_____________| Menu Pad Most gamepads have the following features: - Action-Pad 4 buttons in diamonds-shape (on the right side) NORTH, SOUTH, WEST and EAST. - D-Pad (Direction-pad) 4 buttons (on the left side) that point up, down, left and right. - Menu-Pad Different constellations, but most-times 2 buttons: SELECT - START. - Analog-Sticks provide freely moveable sticks to control directions, Analog-sticks may also provide a digital button if you press them. - Triggers are located on the upper-side of the pad in vertical direction. The upper buttons are normally named Left- and Right-Triggers, the lower buttons Z-Left and Z-Right. - Rumble Many devices provide force-feedback features. But are mostly just simple rumble motors. */ /// HID Gamepad Protocol Report. typedef struct TU_ATTR_PACKED { int8_t x; ///< Delta x movement of left analog-stick int8_t y; ///< Delta y movement of left analog-stick int8_t z; ///< Delta z movement of right analog-joystick int8_t rz; ///< Delta Rz movement of right analog-joystick int8_t rx; ///< Delta Rx movement of analog left trigger int8_t ry; ///< Delta Ry movement of analog right trigger uint8_t hat; ///< Buttons mask for currently pressed buttons in the DPad/hat uint32_t buttons; ///< Buttons mask for currently pressed buttons }hid_gamepad_report_t; /// Standard Gamepad Buttons Bitmap typedef enum { GAMEPAD_BUTTON_0 = TU_BIT(0), GAMEPAD_BUTTON_1 = TU_BIT(1), GAMEPAD_BUTTON_2 = TU_BIT(2), GAMEPAD_BUTTON_3 = TU_BIT(3), GAMEPAD_BUTTON_4 = TU_BIT(4), GAMEPAD_BUTTON_5 = TU_BIT(5), GAMEPAD_BUTTON_6 = TU_BIT(6), GAMEPAD_BUTTON_7 = TU_BIT(7), GAMEPAD_BUTTON_8 = TU_BIT(8), GAMEPAD_BUTTON_9 = TU_BIT(9), GAMEPAD_BUTTON_10 = TU_BIT(10), GAMEPAD_BUTTON_11 = TU_BIT(11), GAMEPAD_BUTTON_12 = TU_BIT(12), GAMEPAD_BUTTON_13 = TU_BIT(13), GAMEPAD_BUTTON_14 = TU_BIT(14), GAMEPAD_BUTTON_15 = TU_BIT(15), GAMEPAD_BUTTON_16 = TU_BIT(16), GAMEPAD_BUTTON_17 = TU_BIT(17), GAMEPAD_BUTTON_18 = TU_BIT(18), GAMEPAD_BUTTON_19 = TU_BIT(19), GAMEPAD_BUTTON_20 = TU_BIT(20), GAMEPAD_BUTTON_21 = TU_BIT(21), GAMEPAD_BUTTON_22 = TU_BIT(22), GAMEPAD_BUTTON_23 = TU_BIT(23), GAMEPAD_BUTTON_24 = TU_BIT(24), GAMEPAD_BUTTON_25 = TU_BIT(25), GAMEPAD_BUTTON_26 = TU_BIT(26), GAMEPAD_BUTTON_27 = TU_BIT(27), GAMEPAD_BUTTON_28 = TU_BIT(28), GAMEPAD_BUTTON_29 = TU_BIT(29), GAMEPAD_BUTTON_30 = TU_BIT(30), GAMEPAD_BUTTON_31 = TU_BIT(31), }hid_gamepad_button_bm_t; /// Standard Gamepad Buttons Naming from Linux input event codes /// https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h #define GAMEPAD_BUTTON_A GAMEPAD_BUTTON_0 #define GAMEPAD_BUTTON_SOUTH GAMEPAD_BUTTON_0 #define GAMEPAD_BUTTON_B GAMEPAD_BUTTON_1 #define GAMEPAD_BUTTON_EAST GAMEPAD_BUTTON_1 #define GAMEPAD_BUTTON_C GAMEPAD_BUTTON_2 #define GAMEPAD_BUTTON_X GAMEPAD_BUTTON_3 #define GAMEPAD_BUTTON_NORTH GAMEPAD_BUTTON_3 #define GAMEPAD_BUTTON_Y GAMEPAD_BUTTON_4 #define GAMEPAD_BUTTON_WEST GAMEPAD_BUTTON_4 #define GAMEPAD_BUTTON_Z GAMEPAD_BUTTON_5 #define GAMEPAD_BUTTON_TL GAMEPAD_BUTTON_6 #define GAMEPAD_BUTTON_TR GAMEPAD_BUTTON_7 #define GAMEPAD_BUTTON_TL2 GAMEPAD_BUTTON_8 #define GAMEPAD_BUTTON_TR2 GAMEPAD_BUTTON_9 #define GAMEPAD_BUTTON_SELECT GAMEPAD_BUTTON_10 #define GAMEPAD_BUTTON_START GAMEPAD_BUTTON_11 #define GAMEPAD_BUTTON_MODE GAMEPAD_BUTTON_12 #define GAMEPAD_BUTTON_THUMBL GAMEPAD_BUTTON_13 #define GAMEPAD_BUTTON_THUMBR GAMEPAD_BUTTON_14 /// Standard Gamepad HAT/DPAD Buttons (from Linux input event codes) typedef enum { GAMEPAD_HAT_CENTERED = 0, ///< DPAD_CENTERED GAMEPAD_HAT_UP = 1, ///< DPAD_UP GAMEPAD_HAT_UP_RIGHT = 2, ///< DPAD_UP_RIGHT GAMEPAD_HAT_RIGHT = 3, ///< DPAD_RIGHT GAMEPAD_HAT_DOWN_RIGHT = 4, ///< DPAD_DOWN_RIGHT GAMEPAD_HAT_DOWN = 5, ///< DPAD_DOWN GAMEPAD_HAT_DOWN_LEFT = 6, ///< DPAD_DOWN_LEFT GAMEPAD_HAT_LEFT = 7, ///< DPAD_LEFT GAMEPAD_HAT_UP_LEFT = 8, ///< DPAD_UP_LEFT }hid_gamepad_hat_t; /// @} //--------------------------------------------------------------------+ // MOUSE //--------------------------------------------------------------------+ /** \addtogroup ClassDriver_HID_Mouse Mouse * @{ */ /// Standard HID Boot Protocol Mouse Report. typedef struct TU_ATTR_PACKED { uint8_t buttons; /**< buttons mask for currently pressed buttons in the mouse. */ int8_t x; /**< Current delta x movement of the mouse. */ int8_t y; /**< Current delta y movement on the mouse. */ int8_t wheel; /**< Current delta wheel movement on the mouse. */ int8_t pan; // using AC Pan } hid_mouse_report_t; // Absolute Mouse: same as the Standard (relative) Mouse Report but // with int16_t instead of int8_t for X and Y coordinates. typedef struct TU_ATTR_PACKED { uint8_t buttons; /**< buttons mask for currently pressed buttons in the mouse. */ int16_t x; /**< Current x position of the mouse. */ int16_t y; /**< Current y position of the mouse. */ int8_t wheel; /**< Current delta wheel movement on the mouse. */ int8_t pan; // using AC Pan } hid_abs_mouse_report_t; /// Standard Mouse Buttons Bitmap typedef enum { MOUSE_BUTTON_LEFT = TU_BIT(0), ///< Left button MOUSE_BUTTON_RIGHT = TU_BIT(1), ///< Right button MOUSE_BUTTON_MIDDLE = TU_BIT(2), ///< Middle button MOUSE_BUTTON_BACKWARD = TU_BIT(3), ///< Backward button, MOUSE_BUTTON_FORWARD = TU_BIT(4), ///< Forward button, }hid_mouse_button_bm_t; /// @} //--------------------------------------------------------------------+ // Keyboard //--------------------------------------------------------------------+ /** \addtogroup ClassDriver_HID_Keyboard Keyboard * @{ */ /// Standard HID Boot Protocol Keyboard Report. typedef struct TU_ATTR_PACKED { uint8_t modifier; /**< Keyboard modifier (KEYBOARD_MODIFIER_* masks). */ uint8_t reserved; /**< Reserved for OEM use, always set to 0. */ uint8_t keycode[6]; /**< Key codes of the currently pressed keys. */ } hid_keyboard_report_t; /// Keyboard modifier codes bitmap typedef enum { KEYBOARD_MODIFIER_LEFTCTRL = TU_BIT(0), ///< Left Control KEYBOARD_MODIFIER_LEFTSHIFT = TU_BIT(1), ///< Left Shift KEYBOARD_MODIFIER_LEFTALT = TU_BIT(2), ///< Left Alt KEYBOARD_MODIFIER_LEFTGUI = TU_BIT(3), ///< Left Window KEYBOARD_MODIFIER_RIGHTCTRL = TU_BIT(4), ///< Right Control KEYBOARD_MODIFIER_RIGHTSHIFT = TU_BIT(5), ///< Right Shift KEYBOARD_MODIFIER_RIGHTALT = TU_BIT(6), ///< Right Alt KEYBOARD_MODIFIER_RIGHTGUI = TU_BIT(7) ///< Right Window }hid_keyboard_modifier_bm_t; typedef enum { KEYBOARD_LED_NUMLOCK = TU_BIT(0), ///< Num Lock LED KEYBOARD_LED_CAPSLOCK = TU_BIT(1), ///< Caps Lock LED KEYBOARD_LED_SCROLLLOCK = TU_BIT(2), ///< Scroll Lock LED KEYBOARD_LED_COMPOSE = TU_BIT(3), ///< Composition Mode KEYBOARD_LED_KANA = TU_BIT(4) ///< Kana mode }hid_keyboard_led_bm_t; /// @} //--------------------------------------------------------------------+ // HID KEYCODE //--------------------------------------------------------------------+ #define HID_KEY_NONE 0x00 #define HID_KEY_A 0x04 #define HID_KEY_B 0x05 #define HID_KEY_C 0x06 #define HID_KEY_D 0x07 #define HID_KEY_E 0x08 #define HID_KEY_F 0x09 #define HID_KEY_G 0x0A #define HID_KEY_H 0x0B #define HID_KEY_I 0x0C #define HID_KEY_J 0x0D #define HID_KEY_K 0x0E #define HID_KEY_L 0x0F #define HID_KEY_M 0x10 #define HID_KEY_N 0x11 #define HID_KEY_O 0x12 #define HID_KEY_P 0x13 #define HID_KEY_Q 0x14 #define HID_KEY_R 0x15 #define HID_KEY_S 0x16 #define HID_KEY_T 0x17 #define HID_KEY_U 0x18 #define HID_KEY_V 0x19 #define HID_KEY_W 0x1A #define HID_KEY_X 0x1B #define HID_KEY_Y 0x1C #define HID_KEY_Z 0x1D #define HID_KEY_1 0x1E #define HID_KEY_2 0x1F #define HID_KEY_3 0x20 #define HID_KEY_4 0x21 #define HID_KEY_5 0x22 #define HID_KEY_6 0x23 #define HID_KEY_7 0x24 #define HID_KEY_8 0x25 #define HID_KEY_9 0x26 #define HID_KEY_0 0x27 #define HID_KEY_ENTER 0x28 #define HID_KEY_ESCAPE 0x29 #define HID_KEY_BACKSPACE 0x2A #define HID_KEY_TAB 0x2B #define HID_KEY_SPACE 0x2C #define HID_KEY_MINUS 0x2D #define HID_KEY_EQUAL 0x2E #define HID_KEY_BRACKET_LEFT 0x2F #define HID_KEY_BRACKET_RIGHT 0x30 #define HID_KEY_BACKSLASH 0x31 #define HID_KEY_EUROPE_1 0x32 #define HID_KEY_SEMICOLON 0x33 #define HID_KEY_APOSTROPHE 0x34 #define HID_KEY_GRAVE 0x35 #define HID_KEY_COMMA 0x36 #define HID_KEY_PERIOD 0x37 #define HID_KEY_SLASH 0x38 #define HID_KEY_CAPS_LOCK 0x39 #define HID_KEY_F1 0x3A #define HID_KEY_F2 0x3B #define HID_KEY_F3 0x3C #define HID_KEY_F4 0x3D #define HID_KEY_F5 0x3E #define HID_KEY_F6 0x3F #define HID_KEY_F7 0x40 #define HID_KEY_F8 0x41 #define HID_KEY_F9 0x42 #define HID_KEY_F10 0x43 #define HID_KEY_F11 0x44 #define HID_KEY_F12 0x45 #define HID_KEY_PRINT_SCREEN 0x46 #define HID_KEY_SCROLL_LOCK 0x47 #define HID_KEY_PAUSE 0x48 #define HID_KEY_INSERT 0x49 #define HID_KEY_HOME 0x4A #define HID_KEY_PAGE_UP 0x4B #define HID_KEY_DELETE 0x4C #define HID_KEY_END 0x4D #define HID_KEY_PAGE_DOWN 0x4E #define HID_KEY_ARROW_RIGHT 0x4F #define HID_KEY_ARROW_LEFT 0x50 #define HID_KEY_ARROW_DOWN 0x51 #define HID_KEY_ARROW_UP 0x52 #define HID_KEY_NUM_LOCK 0x53 #define HID_KEY_KEYPAD_DIVIDE 0x54 #define HID_KEY_KEYPAD_MULTIPLY 0x55 #define HID_KEY_KEYPAD_SUBTRACT 0x56 #define HID_KEY_KEYPAD_ADD 0x57 #define HID_KEY_KEYPAD_ENTER 0x58 #define HID_KEY_KEYPAD_1 0x59 #define HID_KEY_KEYPAD_2 0x5A #define HID_KEY_KEYPAD_3 0x5B #define HID_KEY_KEYPAD_4 0x5C #define HID_KEY_KEYPAD_5 0x5D #define HID_KEY_KEYPAD_6 0x5E #define HID_KEY_KEYPAD_7 0x5F #define HID_KEY_KEYPAD_8 0x60 #define HID_KEY_KEYPAD_9 0x61 #define HID_KEY_KEYPAD_0 0x62 #define HID_KEY_KEYPAD_DECIMAL 0x63 #define HID_KEY_EUROPE_2 0x64 #define HID_KEY_APPLICATION 0x65 #define HID_KEY_POWER 0x66 #define HID_KEY_KEYPAD_EQUAL 0x67 #define HID_KEY_F13 0x68 #define HID_KEY_F14 0x69 #define HID_KEY_F15 0x6A #define HID_KEY_F16 0x6B #define HID_KEY_F17 0x6C #define HID_KEY_F18 0x6D #define HID_KEY_F19 0x6E #define HID_KEY_F20 0x6F #define HID_KEY_F21 0x70 #define HID_KEY_F22 0x71 #define HID_KEY_F23 0x72 #define HID_KEY_F24 0x73 #define HID_KEY_EXECUTE 0x74 #define HID_KEY_HELP 0x75 #define HID_KEY_MENU 0x76 #define HID_KEY_SELECT 0x77 #define HID_KEY_STOP 0x78 #define HID_KEY_AGAIN 0x79 #define HID_KEY_UNDO 0x7A #define HID_KEY_CUT 0x7B #define HID_KEY_COPY 0x7C #define HID_KEY_PASTE 0x7D #define HID_KEY_FIND 0x7E #define HID_KEY_MUTE 0x7F #define HID_KEY_VOLUME_UP 0x80 #define HID_KEY_VOLUME_DOWN 0x81 #define HID_KEY_LOCKING_CAPS_LOCK 0x82 #define HID_KEY_LOCKING_NUM_LOCK 0x83 #define HID_KEY_LOCKING_SCROLL_LOCK 0x84 #define HID_KEY_KEYPAD_COMMA 0x85 #define HID_KEY_KEYPAD_EQUAL_SIGN 0x86 #define HID_KEY_KANJI1 0x87 #define HID_KEY_KANJI2 0x88 #define HID_KEY_KANJI3 0x89 #define HID_KEY_KANJI4 0x8A #define HID_KEY_KANJI5 0x8B #define HID_KEY_KANJI6 0x8C #define HID_KEY_KANJI7 0x8D #define HID_KEY_KANJI8 0x8E #define HID_KEY_KANJI9 0x8F #define HID_KEY_LANG1 0x90 #define HID_KEY_LANG2 0x91 #define HID_KEY_LANG3 0x92 #define HID_KEY_LANG4 0x93 #define HID_KEY_LANG5 0x94 #define HID_KEY_LANG6 0x95 #define HID_KEY_LANG7 0x96 #define HID_KEY_LANG8 0x97 #define HID_KEY_LANG9 0x98 #define HID_KEY_ALTERNATE_ERASE 0x99 #define HID_KEY_SYSREQ_ATTENTION 0x9A #define HID_KEY_CANCEL 0x9B #define HID_KEY_CLEAR 0x9C #define HID_KEY_PRIOR 0x9D #define HID_KEY_RETURN 0x9E #define HID_KEY_SEPARATOR 0x9F #define HID_KEY_OUT 0xA0 #define HID_KEY_OPER 0xA1 #define HID_KEY_CLEAR_AGAIN 0xA2 #define HID_KEY_CRSEL_PROPS 0xA3 #define HID_KEY_EXSEL 0xA4 // RESERVED 0xA5-AF #define HID_KEY_KEYPAD_00 0xB0 #define HID_KEY_KEYPAD_000 0xB1 #define HID_KEY_THOUSANDS_SEPARATOR 0xB2 #define HID_KEY_DECIMAL_SEPARATOR 0xB3 #define HID_KEY_CURRENCY_UNIT 0xB4 #define HID_KEY_CURRENCY_SUBUNIT 0xB5 #define HID_KEY_KEYPAD_LEFT_PARENTHESIS 0xB6 #define HID_KEY_KEYPAD_RIGHT_PARENTHESIS 0xB7 #define HID_KEY_KEYPAD_LEFT_BRACE 0xB8 #define HID_KEY_KEYPAD_RIGHT_BRACE 0xB9 #define HID_KEY_KEYPAD_TAB 0xBA #define HID_KEY_KEYPAD_BACKSPACE 0xBB #define HID_KEY_KEYPAD_A 0xBC #define HID_KEY_KEYPAD_B 0xBD #define HID_KEY_KEYPAD_C 0xBE #define HID_KEY_KEYPAD_D 0xBF #define HID_KEY_KEYPAD_E 0xC0 #define HID_KEY_KEYPAD_F 0xC1 #define HID_KEY_KEYPAD_XOR 0xC2 #define HID_KEY_KEYPAD_CARET 0xC3 #define HID_KEY_KEYPAD_PERCENT 0xC4 #define HID_KEY_KEYPAD_LESS_THAN 0xC5 #define HID_KEY_KEYPAD_GREATER_THAN 0xC6 #define HID_KEY_KEYPAD_AMPERSAND 0xC7 #define HID_KEY_KEYPAD_DOUBLE_AMPERSAND 0xC8 #define HID_KEY_KEYPAD_VERTICAL_BAR 0xC9 #define HID_KEY_KEYPAD_DOUBLE_VERTICAL_BAR 0xCA #define HID_KEY_KEYPAD_COLON 0xCB #define HID_KEY_KEYPAD_HASH 0xCC #define HID_KEY_KEYPAD_SPACE 0xCD #define HID_KEY_KEYPAD_AT 0xCE #define HID_KEY_KEYPAD_EXCLAMATION 0xCF #define HID_KEY_KEYPAD_MEMORY_STORE 0xD0 #define HID_KEY_KEYPAD_MEMORY_RECALL 0xD1 #define HID_KEY_KEYPAD_MEMORY_CLEAR 0xD2 #define HID_KEY_KEYPAD_MEMORY_ADD 0xD3 #define HID_KEY_KEYPAD_MEMORY_SUBTRACT 0xD4 #define HID_KEY_KEYPAD_MEMORY_MULTIPLY 0xD5 #define HID_KEY_KEYPAD_MEMORY_DIVIDE 0xD6 #define HID_KEY_KEYPAD_PLUS_MINUS 0xD7 #define HID_KEY_KEYPAD_CLEAR 0xD8 #define HID_KEY_KEYPAD_CLEAR_ENTRY 0xD9 #define HID_KEY_KEYPAD_BINARY 0xDA #define HID_KEY_KEYPAD_OCTAL 0xDB #define HID_KEY_KEYPAD_DECIMAL_2 0xDC #define HID_KEY_KEYPAD_HEXADECIMAL 0xDD // RESERVED 0xDE-DF #define HID_KEY_CONTROL_LEFT 0xE0 #define HID_KEY_SHIFT_LEFT 0xE1 #define HID_KEY_ALT_LEFT 0xE2 #define HID_KEY_GUI_LEFT 0xE3 #define HID_KEY_CONTROL_RIGHT 0xE4 #define HID_KEY_SHIFT_RIGHT 0xE5 #define HID_KEY_ALT_RIGHT 0xE6 #define HID_KEY_GUI_RIGHT 0xE7 //--------------------------------------------------------------------+ // REPORT DESCRIPTOR //--------------------------------------------------------------------+ //------------- ITEM & TAG -------------// #define HID_REPORT_DATA_0(data) #define HID_REPORT_DATA_1(data) , data #define HID_REPORT_DATA_2(data) , U16_TO_U8S_LE(data) #define HID_REPORT_DATA_3(data) , U32_TO_U8S_LE(data) #define HID_REPORT_ITEM(data, tag, type, size) \ (((tag) << 4) | ((type) << 2) | (size)) HID_REPORT_DATA_##size(data) // Report Item Types enum { RI_TYPE_MAIN = 0, RI_TYPE_GLOBAL = 1, RI_TYPE_LOCAL = 2 }; //------------- Main Items - HID 1.11 section 6.2.2.4 -------------// // Report Item Main group enum { RI_MAIN_INPUT = 8, RI_MAIN_OUTPUT = 9, RI_MAIN_COLLECTION = 10, RI_MAIN_FEATURE = 11, RI_MAIN_COLLECTION_END = 12 }; #define HID_INPUT(x) HID_REPORT_ITEM(x, RI_MAIN_INPUT , RI_TYPE_MAIN, 1) #define HID_OUTPUT(x) HID_REPORT_ITEM(x, RI_MAIN_OUTPUT , RI_TYPE_MAIN, 1) #define HID_COLLECTION(x) HID_REPORT_ITEM(x, RI_MAIN_COLLECTION , RI_TYPE_MAIN, 1) #define HID_FEATURE(x) HID_REPORT_ITEM(x, RI_MAIN_FEATURE , RI_TYPE_MAIN, 1) #define HID_COLLECTION_END HID_REPORT_ITEM(x, RI_MAIN_COLLECTION_END, RI_TYPE_MAIN, 0) //------------- Input, Output, Feature - HID 1.11 section 6.2.2.5 -------------// #define HID_DATA (0<<0) #define HID_CONSTANT (1<<0) #define HID_ARRAY (0<<1) #define HID_VARIABLE (1<<1) #define HID_ABSOLUTE (0<<2) #define HID_RELATIVE (1<<2) #define HID_WRAP_NO (0<<3) #define HID_WRAP (1<<3) #define HID_LINEAR (0<<4) #define HID_NONLINEAR (1<<4) #define HID_PREFERRED_STATE (0<<5) #define HID_PREFERRED_NO (1<<5) #define HID_NO_NULL_POSITION (0<<6) #define HID_NULL_STATE (1<<6) #define HID_NON_VOLATILE (0<<7) #define HID_VOLATILE (1<<7) #define HID_BITFIELD (0<<8) #define HID_BUFFERED_BYTES (1<<8) //------------- Collection Item - HID 1.11 section 6.2.2.6 -------------// enum { HID_COLLECTION_PHYSICAL = 0, HID_COLLECTION_APPLICATION, HID_COLLECTION_LOGICAL, HID_COLLECTION_REPORT, HID_COLLECTION_NAMED_ARRAY, HID_COLLECTION_USAGE_SWITCH, HID_COLLECTION_USAGE_MODIFIER }; //------------- Global Items - HID 1.11 section 6.2.2.7 -------------// // Report Item Global group enum { RI_GLOBAL_USAGE_PAGE = 0, RI_GLOBAL_LOGICAL_MIN = 1, RI_GLOBAL_LOGICAL_MAX = 2, RI_GLOBAL_PHYSICAL_MIN = 3, RI_GLOBAL_PHYSICAL_MAX = 4, RI_GLOBAL_UNIT_EXPONENT = 5, RI_GLOBAL_UNIT = 6, RI_GLOBAL_REPORT_SIZE = 7, RI_GLOBAL_REPORT_ID = 8, RI_GLOBAL_REPORT_COUNT = 9, RI_GLOBAL_PUSH = 10, RI_GLOBAL_POP = 11 }; #define HID_USAGE_PAGE(x) HID_REPORT_ITEM(x, RI_GLOBAL_USAGE_PAGE, RI_TYPE_GLOBAL, 1) #define HID_USAGE_PAGE_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_USAGE_PAGE, RI_TYPE_GLOBAL, n) #define HID_LOGICAL_MIN(x) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MIN, RI_TYPE_GLOBAL, 1) #define HID_LOGICAL_MIN_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MIN, RI_TYPE_GLOBAL, n) #define HID_LOGICAL_MAX(x) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MAX, RI_TYPE_GLOBAL, 1) #define HID_LOGICAL_MAX_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MAX, RI_TYPE_GLOBAL, n) #define HID_PHYSICAL_MIN(x) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MIN, RI_TYPE_GLOBAL, 1) #define HID_PHYSICAL_MIN_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MIN, RI_TYPE_GLOBAL, n) #define HID_PHYSICAL_MAX(x) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MAX, RI_TYPE_GLOBAL, 1) #define HID_PHYSICAL_MAX_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MAX, RI_TYPE_GLOBAL, n) #define HID_UNIT_EXPONENT(x) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT_EXPONENT, RI_TYPE_GLOBAL, 1) #define HID_UNIT_EXPONENT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT_EXPONENT, RI_TYPE_GLOBAL, n) #define HID_UNIT(x) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT, RI_TYPE_GLOBAL, 1) #define HID_UNIT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT, RI_TYPE_GLOBAL, n) #define HID_REPORT_SIZE(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_SIZE, RI_TYPE_GLOBAL, 1) #define HID_REPORT_SIZE_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_SIZE, RI_TYPE_GLOBAL, n) #define HID_REPORT_ID(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_ID, RI_TYPE_GLOBAL, 1), #define HID_REPORT_ID_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_ID, RI_TYPE_GLOBAL, n), #define HID_REPORT_COUNT(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_COUNT, RI_TYPE_GLOBAL, 1) #define HID_REPORT_COUNT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_COUNT, RI_TYPE_GLOBAL, n) #define HID_PUSH HID_REPORT_ITEM(x, RI_GLOBAL_PUSH, RI_TYPE_GLOBAL, 0) #define HID_POP HID_REPORT_ITEM(x, RI_GLOBAL_POP, RI_TYPE_GLOBAL, 0) //------------- LOCAL ITEMS 6.2.2.8 -------------// enum { RI_LOCAL_USAGE = 0, RI_LOCAL_USAGE_MIN = 1, RI_LOCAL_USAGE_MAX = 2, RI_LOCAL_DESIGNATOR_INDEX = 3, RI_LOCAL_DESIGNATOR_MIN = 4, RI_LOCAL_DESIGNATOR_MAX = 5, // 6 is reserved RI_LOCAL_STRING_INDEX = 7, RI_LOCAL_STRING_MIN = 8, RI_LOCAL_STRING_MAX = 9, RI_LOCAL_DELIMITER = 10, }; #define HID_USAGE(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE, RI_TYPE_LOCAL, 1) #define HID_USAGE_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE, RI_TYPE_LOCAL, n) #define HID_USAGE_MIN(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MIN, RI_TYPE_LOCAL, 1) #define HID_USAGE_MIN_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MIN, RI_TYPE_LOCAL, n) #define HID_USAGE_MAX(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MAX, RI_TYPE_LOCAL, 1) #define HID_USAGE_MAX_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MAX, RI_TYPE_LOCAL, n) //--------------------------------------------------------------------+ // Usage Table //--------------------------------------------------------------------+ /// HID Usage Table - Table 1: Usage Page Summary enum { HID_USAGE_PAGE_DESKTOP = 0x01, HID_USAGE_PAGE_SIMULATE = 0x02, HID_USAGE_PAGE_VIRTUAL_REALITY = 0x03, HID_USAGE_PAGE_SPORT = 0x04, HID_USAGE_PAGE_GAME = 0x05, HID_USAGE_PAGE_GENERIC_DEVICE = 0x06, HID_USAGE_PAGE_KEYBOARD = 0x07, HID_USAGE_PAGE_LED = 0x08, HID_USAGE_PAGE_BUTTON = 0x09, HID_USAGE_PAGE_ORDINAL = 0x0a, HID_USAGE_PAGE_TELEPHONY = 0x0b, HID_USAGE_PAGE_CONSUMER = 0x0c, HID_USAGE_PAGE_DIGITIZER = 0x0d, HID_USAGE_PAGE_PID = 0x0f, HID_USAGE_PAGE_UNICODE = 0x10, HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14, HID_USAGE_PAGE_MEDICAL = 0x40, HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION = 0x59, HID_USAGE_PAGE_MONITOR = 0x80, //0x80 - 0x83 HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87 HID_USAGE_PAGE_BARCODE_SCANNER = 0x8c, HID_USAGE_PAGE_SCALE = 0x8d, HID_USAGE_PAGE_MSR = 0x8e, HID_USAGE_PAGE_CAMERA = 0x90, HID_USAGE_PAGE_ARCADE = 0x91, HID_USAGE_PAGE_FIDO = 0xF1D0, // FIDO alliance HID usage page HID_USAGE_PAGE_VENDOR = 0xFF00 // 0xFF00 - 0xFFFF }; /// HID Usage Table - Table 6: Generic Desktop Page enum { HID_USAGE_DESKTOP_POINTER = 0x01, HID_USAGE_DESKTOP_MOUSE = 0x02, HID_USAGE_DESKTOP_JOYSTICK = 0x04, HID_USAGE_DESKTOP_GAMEPAD = 0x05, HID_USAGE_DESKTOP_KEYBOARD = 0x06, HID_USAGE_DESKTOP_KEYPAD = 0x07, HID_USAGE_DESKTOP_MULTI_AXIS_CONTROLLER = 0x08, HID_USAGE_DESKTOP_TABLET_PC_SYSTEM = 0x09, HID_USAGE_DESKTOP_X = 0x30, HID_USAGE_DESKTOP_Y = 0x31, HID_USAGE_DESKTOP_Z = 0x32, HID_USAGE_DESKTOP_RX = 0x33, HID_USAGE_DESKTOP_RY = 0x34, HID_USAGE_DESKTOP_RZ = 0x35, HID_USAGE_DESKTOP_SLIDER = 0x36, HID_USAGE_DESKTOP_DIAL = 0x37, HID_USAGE_DESKTOP_WHEEL = 0x38, HID_USAGE_DESKTOP_HAT_SWITCH = 0x39, HID_USAGE_DESKTOP_COUNTED_BUFFER = 0x3a, HID_USAGE_DESKTOP_BYTE_COUNT = 0x3b, HID_USAGE_DESKTOP_MOTION_WAKEUP = 0x3c, HID_USAGE_DESKTOP_START = 0x3d, HID_USAGE_DESKTOP_SELECT = 0x3e, HID_USAGE_DESKTOP_VX = 0x40, HID_USAGE_DESKTOP_VY = 0x41, HID_USAGE_DESKTOP_VZ = 0x42, HID_USAGE_DESKTOP_VBRX = 0x43, HID_USAGE_DESKTOP_VBRY = 0x44, HID_USAGE_DESKTOP_VBRZ = 0x45, HID_USAGE_DESKTOP_VNO = 0x46, HID_USAGE_DESKTOP_FEATURE_NOTIFICATION = 0x47, HID_USAGE_DESKTOP_RESOLUTION_MULTIPLIER = 0x48, HID_USAGE_DESKTOP_SYSTEM_CONTROL = 0x80, HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN = 0x81, HID_USAGE_DESKTOP_SYSTEM_SLEEP = 0x82, HID_USAGE_DESKTOP_SYSTEM_WAKE_UP = 0x83, HID_USAGE_DESKTOP_SYSTEM_CONTEXT_MENU = 0x84, HID_USAGE_DESKTOP_SYSTEM_MAIN_MENU = 0x85, HID_USAGE_DESKTOP_SYSTEM_APP_MENU = 0x86, HID_USAGE_DESKTOP_SYSTEM_MENU_HELP = 0x87, HID_USAGE_DESKTOP_SYSTEM_MENU_EXIT = 0x88, HID_USAGE_DESKTOP_SYSTEM_MENU_SELECT = 0x89, HID_USAGE_DESKTOP_SYSTEM_MENU_RIGHT = 0x8A, HID_USAGE_DESKTOP_SYSTEM_MENU_LEFT = 0x8B, HID_USAGE_DESKTOP_SYSTEM_MENU_UP = 0x8C, HID_USAGE_DESKTOP_SYSTEM_MENU_DOWN = 0x8D, HID_USAGE_DESKTOP_SYSTEM_COLD_RESTART = 0x8E, HID_USAGE_DESKTOP_SYSTEM_WARM_RESTART = 0x8F, HID_USAGE_DESKTOP_DPAD_UP = 0x90, HID_USAGE_DESKTOP_DPAD_DOWN = 0x91, HID_USAGE_DESKTOP_DPAD_RIGHT = 0x92, HID_USAGE_DESKTOP_DPAD_LEFT = 0x93, HID_USAGE_DESKTOP_SYSTEM_DOCK = 0xA0, HID_USAGE_DESKTOP_SYSTEM_UNDOCK = 0xA1, HID_USAGE_DESKTOP_SYSTEM_SETUP = 0xA2, HID_USAGE_DESKTOP_SYSTEM_BREAK = 0xA3, HID_USAGE_DESKTOP_SYSTEM_DEBUGGER_BREAK = 0xA4, HID_USAGE_DESKTOP_APPLICATION_BREAK = 0xA5, HID_USAGE_DESKTOP_APPLICATION_DEBUGGER_BREAK = 0xA6, HID_USAGE_DESKTOP_SYSTEM_SPEAKER_MUTE = 0xA7, HID_USAGE_DESKTOP_SYSTEM_HIBERNATE = 0xA8, HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INVERT = 0xB0, HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INTERNAL = 0xB1, HID_USAGE_DESKTOP_SYSTEM_DISPLAY_EXTERNAL = 0xB2, HID_USAGE_DESKTOP_SYSTEM_DISPLAY_BOTH = 0xB3, HID_USAGE_DESKTOP_SYSTEM_DISPLAY_DUAL = 0xB4, HID_USAGE_DESKTOP_SYSTEM_DISPLAY_TOGGLE_INT_EXT = 0xB5, HID_USAGE_DESKTOP_SYSTEM_DISPLAY_SWAP_PRIMARY_SECONDARY = 0xB6, HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7 }; /// HID Usage Table: Consumer Page (0x0C) /// Only contains controls that supported by Windows (whole list is too long) enum { // Generic Control HID_USAGE_CONSUMER_CONTROL = 0x0001, // Power Control HID_USAGE_CONSUMER_POWER = 0x0030, HID_USAGE_CONSUMER_RESET = 0x0031, HID_USAGE_CONSUMER_SLEEP = 0x0032, // Screen Brightness HID_USAGE_CONSUMER_BRIGHTNESS_INCREMENT = 0x006F, HID_USAGE_CONSUMER_BRIGHTNESS_DECREMENT = 0x0070, // These HID usages operate only on mobile systems (battery powered) and // require Windows 8 (build 8302 or greater). HID_USAGE_CONSUMER_WIRELESS_RADIO_CONTROLS = 0x000C, HID_USAGE_CONSUMER_WIRELESS_RADIO_BUTTONS = 0x00C6, HID_USAGE_CONSUMER_WIRELESS_RADIO_LED = 0x00C7, HID_USAGE_CONSUMER_WIRELESS_RADIO_SLIDER_SWITCH = 0x00C8, // Media Control HID_USAGE_CONSUMER_PLAY_PAUSE = 0x00CD, HID_USAGE_CONSUMER_SCAN_NEXT = 0x00B5, HID_USAGE_CONSUMER_SCAN_PREVIOUS = 0x00B6, HID_USAGE_CONSUMER_STOP = 0x00B7, HID_USAGE_CONSUMER_VOLUME = 0x00E0, HID_USAGE_CONSUMER_MUTE = 0x00E2, HID_USAGE_CONSUMER_BASS = 0x00E3, HID_USAGE_CONSUMER_TREBLE = 0x00E4, HID_USAGE_CONSUMER_BASS_BOOST = 0x00E5, HID_USAGE_CONSUMER_VOLUME_INCREMENT = 0x00E9, HID_USAGE_CONSUMER_VOLUME_DECREMENT = 0x00EA, HID_USAGE_CONSUMER_BASS_INCREMENT = 0x0152, HID_USAGE_CONSUMER_BASS_DECREMENT = 0x0153, HID_USAGE_CONSUMER_TREBLE_INCREMENT = 0x0154, HID_USAGE_CONSUMER_TREBLE_DECREMENT = 0x0155, // Application Launcher HID_USAGE_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION = 0x0183, HID_USAGE_CONSUMER_AL_EMAIL_READER = 0x018A, HID_USAGE_CONSUMER_AL_CALCULATOR = 0x0192, HID_USAGE_CONSUMER_AL_LOCAL_BROWSER = 0x0194, // Browser/Explorer Specific HID_USAGE_CONSUMER_AC_SEARCH = 0x0221, HID_USAGE_CONSUMER_AC_HOME = 0x0223, HID_USAGE_CONSUMER_AC_BACK = 0x0224, HID_USAGE_CONSUMER_AC_FORWARD = 0x0225, HID_USAGE_CONSUMER_AC_STOP = 0x0226, HID_USAGE_CONSUMER_AC_REFRESH = 0x0227, HID_USAGE_CONSUMER_AC_BOOKMARKS = 0x022A, // Mouse Horizontal scroll HID_USAGE_CONSUMER_AC_PAN = 0x0238, }; /// HID Usage Table - Lighting And Illumination Page (0x59) enum { HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01, HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02, HID_USAGE_LIGHTING_LAMP_COUNT = 0x03, HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04, HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05, HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06, HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07, HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08, HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20, HID_USAGE_LIGHTING_LAMP_ID = 0x21, HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22, HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23, HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24, HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25, HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26, HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27, HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28, HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29, HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A, HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B, HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C, HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D, HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50, HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51, HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52, HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53, HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54, HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55, HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60, HID_USAGE_LIGHTING_LAMP_ID_START = 0x61, HID_USAGE_LIGHTING_LAMP_ID_END = 0x62, HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70, HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71, }; /// HID Usage Table: FIDO Alliance Page (0xF1D0) enum { HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report }; /*-------------------------------------------------------------------- * ASCII to KEYCODE Conversion * Expand to array of [128][2] (shift, keycode) * * Usage: example to convert input chr into keyboard report (modifier + keycode) * * uint8_t const conv_table[128][2] = { HID_ASCII_TO_KEYCODE }; * * uint8_t keycode[6] = { 0 }; * uint8_t modifier = 0; * * if ( conv_table[chr][0] ) modifier = KEYBOARD_MODIFIER_LEFTSHIFT; * keycode[0] = conv_table[chr][1]; * tud_hid_keyboard_report(report_id, modifier, keycode); * *--------------------------------------------------------------------*/ #define HID_ASCII_TO_KEYCODE \ {0, 0 }, /* 0x00 Null */ \ {0, 0 }, /* 0x01 */ \ {0, 0 }, /* 0x02 */ \ {0, 0 }, /* 0x03 */ \ {0, 0 }, /* 0x04 */ \ {0, 0 }, /* 0x05 */ \ {0, 0 }, /* 0x06 */ \ {0, 0 }, /* 0x07 */ \ {0, HID_KEY_BACKSPACE }, /* 0x08 Backspace */ \ {0, HID_KEY_TAB }, /* 0x09 Tab */ \ {0, HID_KEY_ENTER }, /* 0x0A Line Feed */ \ {0, 0 }, /* 0x0B */ \ {0, 0 }, /* 0x0C */ \ {0, HID_KEY_ENTER }, /* 0x0D CR */ \ {0, 0 }, /* 0x0E */ \ {0, 0 }, /* 0x0F */ \ {0, 0 }, /* 0x10 */ \ {0, 0 }, /* 0x11 */ \ {0, 0 }, /* 0x12 */ \ {0, 0 }, /* 0x13 */ \ {0, 0 }, /* 0x14 */ \ {0, 0 }, /* 0x15 */ \ {0, 0 }, /* 0x16 */ \ {0, 0 }, /* 0x17 */ \ {0, 0 }, /* 0x18 */ \ {0, 0 }, /* 0x19 */ \ {0, 0 }, /* 0x1A */ \ {0, HID_KEY_ESCAPE }, /* 0x1B Escape */ \ {0, 0 }, /* 0x1C */ \ {0, 0 }, /* 0x1D */ \ {0, 0 }, /* 0x1E */ \ {0, 0 }, /* 0x1F */ \ \ {0, HID_KEY_SPACE }, /* 0x20 */ \ {1, HID_KEY_1 }, /* 0x21 ! */ \ {1, HID_KEY_APOSTROPHE }, /* 0x22 " */ \ {1, HID_KEY_3 }, /* 0x23 # */ \ {1, HID_KEY_4 }, /* 0x24 $ */ \ {1, HID_KEY_5 }, /* 0x25 % */ \ {1, HID_KEY_7 }, /* 0x26 & */ \ {0, HID_KEY_APOSTROPHE }, /* 0x27 ' */ \ {1, HID_KEY_9 }, /* 0x28 ( */ \ {1, HID_KEY_0 }, /* 0x29 ) */ \ {1, HID_KEY_8 }, /* 0x2A * */ \ {1, HID_KEY_EQUAL }, /* 0x2B + */ \ {0, HID_KEY_COMMA }, /* 0x2C , */ \ {0, HID_KEY_MINUS }, /* 0x2D - */ \ {0, HID_KEY_PERIOD }, /* 0x2E . */ \ {0, HID_KEY_SLASH }, /* 0x2F / */ \ {0, HID_KEY_0 }, /* 0x30 0 */ \ {0, HID_KEY_1 }, /* 0x31 1 */ \ {0, HID_KEY_2 }, /* 0x32 2 */ \ {0, HID_KEY_3 }, /* 0x33 3 */ \ {0, HID_KEY_4 }, /* 0x34 4 */ \ {0, HID_KEY_5 }, /* 0x35 5 */ \ {0, HID_KEY_6 }, /* 0x36 6 */ \ {0, HID_KEY_7 }, /* 0x37 7 */ \ {0, HID_KEY_8 }, /* 0x38 8 */ \ {0, HID_KEY_9 }, /* 0x39 9 */ \ {1, HID_KEY_SEMICOLON }, /* 0x3A : */ \ {0, HID_KEY_SEMICOLON }, /* 0x3B ; */ \ {1, HID_KEY_COMMA }, /* 0x3C < */ \ {0, HID_KEY_EQUAL }, /* 0x3D = */ \ {1, HID_KEY_PERIOD }, /* 0x3E > */ \ {1, HID_KEY_SLASH }, /* 0x3F ? */ \ \ {1, HID_KEY_2 }, /* 0x40 @ */ \ {1, HID_KEY_A }, /* 0x41 A */ \ {1, HID_KEY_B }, /* 0x42 B */ \ {1, HID_KEY_C }, /* 0x43 C */ \ {1, HID_KEY_D }, /* 0x44 D */ \ {1, HID_KEY_E }, /* 0x45 E */ \ {1, HID_KEY_F }, /* 0x46 F */ \ {1, HID_KEY_G }, /* 0x47 G */ \ {1, HID_KEY_H }, /* 0x48 H */ \ {1, HID_KEY_I }, /* 0x49 I */ \ {1, HID_KEY_J }, /* 0x4A J */ \ {1, HID_KEY_K }, /* 0x4B K */ \ {1, HID_KEY_L }, /* 0x4C L */ \ {1, HID_KEY_M }, /* 0x4D M */ \ {1, HID_KEY_N }, /* 0x4E N */ \ {1, HID_KEY_O }, /* 0x4F O */ \ {1, HID_KEY_P }, /* 0x50 P */ \ {1, HID_KEY_Q }, /* 0x51 Q */ \ {1, HID_KEY_R }, /* 0x52 R */ \ {1, HID_KEY_S }, /* 0x53 S */ \ {1, HID_KEY_T }, /* 0x55 T */ \ {1, HID_KEY_U }, /* 0x55 U */ \ {1, HID_KEY_V }, /* 0x56 V */ \ {1, HID_KEY_W }, /* 0x57 W */ \ {1, HID_KEY_X }, /* 0x58 X */ \ {1, HID_KEY_Y }, /* 0x59 Y */ \ {1, HID_KEY_Z }, /* 0x5A Z */ \ {0, HID_KEY_BRACKET_LEFT }, /* 0x5B [ */ \ {0, HID_KEY_BACKSLASH }, /* 0x5C '\' */ \ {0, HID_KEY_BRACKET_RIGHT }, /* 0x5D ] */ \ {1, HID_KEY_6 }, /* 0x5E ^ */ \ {1, HID_KEY_MINUS }, /* 0x5F _ */ \ \ {0, HID_KEY_GRAVE }, /* 0x60 ` */ \ {0, HID_KEY_A }, /* 0x61 a */ \ {0, HID_KEY_B }, /* 0x62 b */ \ {0, HID_KEY_C }, /* 0x63 c */ \ {0, HID_KEY_D }, /* 0x66 d */ \ {0, HID_KEY_E }, /* 0x65 e */ \ {0, HID_KEY_F }, /* 0x66 f */ \ {0, HID_KEY_G }, /* 0x67 g */ \ {0, HID_KEY_H }, /* 0x68 h */ \ {0, HID_KEY_I }, /* 0x69 i */ \ {0, HID_KEY_J }, /* 0x6A j */ \ {0, HID_KEY_K }, /* 0x6B k */ \ {0, HID_KEY_L }, /* 0x6C l */ \ {0, HID_KEY_M }, /* 0x6D m */ \ {0, HID_KEY_N }, /* 0x6E n */ \ {0, HID_KEY_O }, /* 0x6F o */ \ {0, HID_KEY_P }, /* 0x70 p */ \ {0, HID_KEY_Q }, /* 0x71 q */ \ {0, HID_KEY_R }, /* 0x72 r */ \ {0, HID_KEY_S }, /* 0x73 s */ \ {0, HID_KEY_T }, /* 0x75 t */ \ {0, HID_KEY_U }, /* 0x75 u */ \ {0, HID_KEY_V }, /* 0x76 v */ \ {0, HID_KEY_W }, /* 0x77 w */ \ {0, HID_KEY_X }, /* 0x78 x */ \ {0, HID_KEY_Y }, /* 0x79 y */ \ {0, HID_KEY_Z }, /* 0x7A z */ \ {1, HID_KEY_BRACKET_LEFT }, /* 0x7B { */ \ {1, HID_KEY_BACKSLASH }, /* 0x7C | */ \ {1, HID_KEY_BRACKET_RIGHT }, /* 0x7D } */ \ {1, HID_KEY_GRAVE }, /* 0x7E ~ */ \ {0, HID_KEY_DELETE } /* 0x7F Delete */ \ /*-------------------------------------------------------------------- * KEYCODE to Ascii Conversion * Expand to array of [128][2] (ascii without shift, ascii with shift) * * Usage: example to convert ascii from keycode (key) and shift modifier (shift). * Here we assume key < 128 ( printable ) * * uint8_t const conv_table[128][2] = { HID_KEYCODE_TO_ASCII }; * char ch = shift ? conv_table[chr][1] : conv_table[chr][0]; * *--------------------------------------------------------------------*/ #define HID_KEYCODE_TO_ASCII \ {0 , 0 }, /* 0x00 */ \ {0 , 0 }, /* 0x01 */ \ {0 , 0 }, /* 0x02 */ \ {0 , 0 }, /* 0x03 */ \ {'a' , 'A' }, /* 0x04 */ \ {'b' , 'B' }, /* 0x05 */ \ {'c' , 'C' }, /* 0x06 */ \ {'d' , 'D' }, /* 0x07 */ \ {'e' , 'E' }, /* 0x08 */ \ {'f' , 'F' }, /* 0x09 */ \ {'g' , 'G' }, /* 0x0a */ \ {'h' , 'H' }, /* 0x0b */ \ {'i' , 'I' }, /* 0x0c */ \ {'j' , 'J' }, /* 0x0d */ \ {'k' , 'K' }, /* 0x0e */ \ {'l' , 'L' }, /* 0x0f */ \ {'m' , 'M' }, /* 0x10 */ \ {'n' , 'N' }, /* 0x11 */ \ {'o' , 'O' }, /* 0x12 */ \ {'p' , 'P' }, /* 0x13 */ \ {'q' , 'Q' }, /* 0x14 */ \ {'r' , 'R' }, /* 0x15 */ \ {'s' , 'S' }, /* 0x16 */ \ {'t' , 'T' }, /* 0x17 */ \ {'u' , 'U' }, /* 0x18 */ \ {'v' , 'V' }, /* 0x19 */ \ {'w' , 'W' }, /* 0x1a */ \ {'x' , 'X' }, /* 0x1b */ \ {'y' , 'Y' }, /* 0x1c */ \ {'z' , 'Z' }, /* 0x1d */ \ {'1' , '!' }, /* 0x1e */ \ {'2' , '@' }, /* 0x1f */ \ {'3' , '#' }, /* 0x20 */ \ {'4' , '$' }, /* 0x21 */ \ {'5' , '%' }, /* 0x22 */ \ {'6' , '^' }, /* 0x23 */ \ {'7' , '&' }, /* 0x24 */ \ {'8' , '*' }, /* 0x25 */ \ {'9' , '(' }, /* 0x26 */ \ {'0' , ')' }, /* 0x27 */ \ {'\r' , '\r' }, /* 0x28 */ \ {'\x1b', '\x1b' }, /* 0x29 */ \ {'\b' , '\b' }, /* 0x2a */ \ {'\t' , '\t' }, /* 0x2b */ \ {' ' , ' ' }, /* 0x2c */ \ {'-' , '_' }, /* 0x2d */ \ {'=' , '+' }, /* 0x2e */ \ {'[' , '{' }, /* 0x2f */ \ {']' , '}' }, /* 0x30 */ \ {'\\' , '|' }, /* 0x31 */ \ {'#' , '~' }, /* 0x32 */ \ {';' , ':' }, /* 0x33 */ \ {'\'' , '\"' }, /* 0x34 */ \ {'`' , '~' }, /* 0x35 */ \ {',' , '<' }, /* 0x36 */ \ {'.' , '>' }, /* 0x37 */ \ {'/' , '?' }, /* 0x38 */ \ \ {0 , 0 }, /* 0x39 */ \ {0 , 0 }, /* 0x3a */ \ {0 , 0 }, /* 0x3b */ \ {0 , 0 }, /* 0x3c */ \ {0 , 0 }, /* 0x3d */ \ {0 , 0 }, /* 0x3e */ \ {0 , 0 }, /* 0x3f */ \ {0 , 0 }, /* 0x40 */ \ {0 , 0 }, /* 0x41 */ \ {0 , 0 }, /* 0x42 */ \ {0 , 0 }, /* 0x43 */ \ {0 , 0 }, /* 0x44 */ \ {0 , 0 }, /* 0x45 */ \ {0 , 0 }, /* 0x46 */ \ {0 , 0 }, /* 0x47 */ \ {0 , 0 }, /* 0x48 */ \ {0 , 0 }, /* 0x49 */ \ {0 , 0 }, /* 0x4a */ \ {0 , 0 }, /* 0x4b */ \ {0 , 0 }, /* 0x4c */ \ {0 , 0 }, /* 0x4d */ \ {0 , 0 }, /* 0x4e */ \ {0 , 0 }, /* 0x4f */ \ {0 , 0 }, /* 0x50 */ \ {0 , 0 }, /* 0x51 */ \ {0 , 0 }, /* 0x52 */ \ {0 , 0 }, /* 0x53 */ \ \ {'/' , '/' }, /* 0x54 */ \ {'*' , '*' }, /* 0x55 */ \ {'-' , '-' }, /* 0x56 */ \ {'+' , '+' }, /* 0x57 */ \ {'\r' , '\r' }, /* 0x58 */ \ {'1' , 0 }, /* 0x59 */ \ {'2' , 0 }, /* 0x5a */ \ {'3' , 0 }, /* 0x5b */ \ {'4' , 0 }, /* 0x5c */ \ {'5' , '5' }, /* 0x5d */ \ {'6' , 0 }, /* 0x5e */ \ {'7' , 0 }, /* 0x5f */ \ {'8' , 0 }, /* 0x60 */ \ {'9' , 0 }, /* 0x61 */ \ {'0' , 0 }, /* 0x62 */ \ {'.' , 0 }, /* 0x63 */ \ {0 , 0 }, /* 0x64 */ \ {0 , 0 }, /* 0x65 */ \ {0 , 0 }, /* 0x66 */ \ {'=' , '=' }, /* 0x67 */ \ #ifdef __cplusplus } #endif #endif /* _TUSB_HID_H__ */ /// @} ================================================ FILE: pico-sdk/lib/tinyusb/src/class/hid/hid_device.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if (CFG_TUD_ENABLED && CFG_TUD_HID) //--------------------------------------------------------------------+ // INCLUDE //--------------------------------------------------------------------+ #include "device/usbd.h" #include "device/usbd_pvt.h" #include "hid_device.h" //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ typedef struct { uint8_t itf_num; uint8_t ep_in; uint8_t ep_out; // optional Out endpoint uint8_t itf_protocol; // Boot mouse or keyboard uint16_t report_desc_len; CFG_TUSB_MEM_ALIGN uint8_t protocol_mode; // Boot (0) or Report protocol (1) CFG_TUSB_MEM_ALIGN uint8_t idle_rate; // up to application to handle idle rate CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_HID_EP_BUFSIZE]; CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_HID_EP_BUFSIZE]; CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf[CFG_TUD_HID_EP_BUFSIZE]; // TODO save hid descriptor since host can specifically request this after enumeration // Note: HID descriptor may be not available from application after enumeration tusb_hid_descriptor_hid_t const *hid_descriptor; } hidd_interface_t; CFG_TUD_MEM_SECTION tu_static hidd_interface_t _hidd_itf[CFG_TUD_HID]; /*------------- Helpers -------------*/ static inline uint8_t get_index_by_itfnum(uint8_t itf_num) { for (uint8_t i = 0; i < CFG_TUD_HID; i++) { if (itf_num == _hidd_itf[i].itf_num) return i; } return 0xFF; } //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ bool tud_hid_n_ready(uint8_t instance) { uint8_t const rhport = 0; uint8_t const ep_in = _hidd_itf[instance].ep_in; return tud_ready() && (ep_in != 0) && !usbd_edpt_busy(rhport, ep_in); } bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const *report, uint16_t len) { uint8_t const rhport = 0; hidd_interface_t *p_hid = &_hidd_itf[instance]; // claim endpoint TU_VERIFY(usbd_edpt_claim(rhport, p_hid->ep_in)); // prepare data if (report_id) { p_hid->epin_buf[0] = report_id; TU_VERIFY(0 == tu_memcpy_s(p_hid->epin_buf + 1, CFG_TUD_HID_EP_BUFSIZE - 1, report, len)); len++; } else { TU_VERIFY(0 == tu_memcpy_s(p_hid->epin_buf, CFG_TUD_HID_EP_BUFSIZE, report, len)); } return usbd_edpt_xfer(rhport, p_hid->ep_in, p_hid->epin_buf, len); } uint8_t tud_hid_n_interface_protocol(uint8_t instance) { return _hidd_itf[instance].itf_protocol; } uint8_t tud_hid_n_get_protocol(uint8_t instance) { return _hidd_itf[instance].protocol_mode; } bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, uint8_t keycode[6]) { hid_keyboard_report_t report; report.modifier = modifier; report.reserved = 0; if (keycode) { memcpy(report.keycode, keycode, sizeof(report.keycode)); } else { tu_memclr(report.keycode, 6); } return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal) { hid_mouse_report_t report = { .buttons = buttons, .x = x, .y = y, .wheel = vertical, .pan = horizontal }; return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal) { hid_abs_mouse_report_t report = { .buttons = buttons, .x = x, .y = y, .wheel = vertical, .pan = horizontal }; return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons) { hid_gamepad_report_t report = { .x = x, .y = y, .z = z, .rz = rz, .rx = rx, .ry = ry, .hat = hat, .buttons = buttons, }; return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } //--------------------------------------------------------------------+ // USBD-CLASS API //--------------------------------------------------------------------+ void hidd_init(void) { hidd_reset(0); } bool hidd_deinit(void) { return true; } void hidd_reset(uint8_t rhport) { (void)rhport; tu_memclr(_hidd_itf, sizeof(_hidd_itf)); } uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len) { TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass, 0); // len = interface + hid + n*endpoints uint16_t const drv_len = (uint16_t)(sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); TU_ASSERT(max_len >= drv_len, 0); // Find available interface hidd_interface_t *p_hid = NULL; uint8_t hid_id; for (hid_id = 0; hid_id < CFG_TUD_HID; hid_id++) { if (_hidd_itf[hid_id].ep_in == 0) { p_hid = &_hidd_itf[hid_id]; break; } } TU_ASSERT(p_hid, 0); uint8_t const *p_desc = (uint8_t const *)desc_itf; //------------- HID descriptor -------------// p_desc = tu_desc_next(p_desc); TU_ASSERT(HID_DESC_TYPE_HID == tu_desc_type(p_desc), 0); p_hid->hid_descriptor = (tusb_hid_descriptor_hid_t const *)p_desc; //------------- Endpoint Descriptor -------------// p_desc = tu_desc_next(p_desc); TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_INTERRUPT, &p_hid->ep_out, &p_hid->ep_in), 0); if (desc_itf->bInterfaceSubClass == HID_SUBCLASS_BOOT) p_hid->itf_protocol = desc_itf->bInterfaceProtocol; p_hid->protocol_mode = HID_PROTOCOL_REPORT; // Per Specs: default is report mode p_hid->itf_num = desc_itf->bInterfaceNumber; // Use offsetof to avoid pointer to the odd/misaligned address p_hid->report_desc_len = tu_unaligned_read16((uint8_t const *)p_hid->hid_descriptor + offsetof(tusb_hid_descriptor_hid_t, wReportLength)); // Prepare for output endpoint if (p_hid->ep_out) { if (!usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))) { TU_LOG_FAILED(); TU_BREAKPOINT(); } } return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) bool hidd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); uint8_t const hid_itf = get_index_by_itfnum((uint8_t)request->wIndex); TU_VERIFY(hid_itf < CFG_TUD_HID); hidd_interface_t *p_hid = &_hidd_itf[hid_itf]; if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) { //------------- STD Request -------------// if (stage == CONTROL_STAGE_SETUP) { uint8_t const desc_type = tu_u16_high(request->wValue); // uint8_t const desc_index = tu_u16_low (request->wValue); if (request->bRequest == TUSB_REQ_GET_DESCRIPTOR && desc_type == HID_DESC_TYPE_HID) { TU_VERIFY(p_hid->hid_descriptor); TU_VERIFY(tud_control_xfer(rhport, request, (void *)(uintptr_t)p_hid->hid_descriptor, p_hid->hid_descriptor->bLength)); } else if (request->bRequest == TUSB_REQ_GET_DESCRIPTOR && desc_type == HID_DESC_TYPE_REPORT) { uint8_t const *desc_report = tud_hid_descriptor_report_cb(hid_itf); tud_control_xfer(rhport, request, (void *)(uintptr_t)desc_report, p_hid->report_desc_len); } else { return false; // stall unsupported request } } } else if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) { //------------- Class Specific Request -------------// switch (request->bRequest) { case HID_REQ_CONTROL_GET_REPORT: if (stage == CONTROL_STAGE_SETUP) { uint8_t const report_type = tu_u16_high(request->wValue); uint8_t const report_id = tu_u16_low(request->wValue); uint8_t *report_buf = p_hid->ctrl_buf; uint16_t req_len = tu_min16(request->wLength, CFG_TUD_HID_EP_BUFSIZE); uint16_t xferlen = 0; // If host request a specific Report ID, add ID to as 1 byte of response if ((report_id != HID_REPORT_TYPE_INVALID) && (req_len > 1)) { *report_buf++ = report_id; req_len--; xferlen++; } xferlen += tud_hid_get_report_cb(hid_itf, report_id, (hid_report_type_t)report_type, report_buf, req_len); TU_ASSERT(xferlen > 0); tud_control_xfer(rhport, request, p_hid->ctrl_buf, xferlen); } break; case HID_REQ_CONTROL_SET_REPORT: if (stage == CONTROL_STAGE_SETUP) { TU_VERIFY(request->wLength <= sizeof(p_hid->ctrl_buf)); tud_control_xfer(rhport, request, p_hid->ctrl_buf, request->wLength); } else if (stage == CONTROL_STAGE_ACK) { uint8_t const report_type = tu_u16_high(request->wValue); uint8_t const report_id = tu_u16_low(request->wValue); uint8_t const *report_buf = p_hid->ctrl_buf; uint16_t report_len = tu_min16(request->wLength, CFG_TUD_HID_EP_BUFSIZE); // If host request a specific Report ID, extract report ID in buffer before invoking callback if ((report_id != HID_REPORT_TYPE_INVALID) && (report_len > 1) && (report_id == report_buf[0])) { report_buf++; report_len--; } tud_hid_set_report_cb(hid_itf, report_id, (hid_report_type_t)report_type, report_buf, report_len); } break; case HID_REQ_CONTROL_SET_IDLE: if (stage == CONTROL_STAGE_SETUP) { p_hid->idle_rate = tu_u16_high(request->wValue); if (tud_hid_set_idle_cb) { // stall request if callback return false TU_VERIFY(tud_hid_set_idle_cb(hid_itf, p_hid->idle_rate)); } tud_control_status(rhport, request); } break; case HID_REQ_CONTROL_GET_IDLE: if (stage == CONTROL_STAGE_SETUP) { // TODO idle rate of report tud_control_xfer(rhport, request, &p_hid->idle_rate, 1); } break; case HID_REQ_CONTROL_GET_PROTOCOL: if (stage == CONTROL_STAGE_SETUP) { tud_control_xfer(rhport, request, &p_hid->protocol_mode, 1); } break; case HID_REQ_CONTROL_SET_PROTOCOL: if (stage == CONTROL_STAGE_SETUP) { tud_control_status(rhport, request); } else if (stage == CONTROL_STAGE_ACK) { p_hid->protocol_mode = (uint8_t)request->wValue; if (tud_hid_set_protocol_cb) { tud_hid_set_protocol_cb(hid_itf, p_hid->protocol_mode); } } break; default: return false; // stall unsupported request } } else { return false; // stall unsupported request } return true; } bool hidd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { (void)result; uint8_t instance = 0; hidd_interface_t *p_hid = _hidd_itf; // Identify which interface to use for (instance = 0; instance < CFG_TUD_HID; instance++) { p_hid = &_hidd_itf[instance]; if ((ep_addr == p_hid->ep_out) || (ep_addr == p_hid->ep_in)) break; } TU_ASSERT(instance < CFG_TUD_HID); // Check if there was a problem if (XFER_RESULT_SUCCESS != result) { // Inform application about the issue if (tud_hid_report_fail_cb) { tud_hid_report_fail_cb(instance, ep_addr, (uint16_t)xferred_bytes); } // Allow a new transfer to be received if issue happened on an OUT endpoint if (ep_addr == p_hid->ep_out) { // Prepare the OUT endpoint to be able to receive a new transfer TU_ASSERT(usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))); } return true; } // Sent report successfully if (ep_addr == p_hid->ep_in) { if (tud_hid_report_complete_cb) { tud_hid_report_complete_cb(instance, p_hid->epin_buf, (uint16_t)xferred_bytes); } } // Received report successfully else if (ep_addr == p_hid->ep_out) { tud_hid_set_report_cb(instance, 0, HID_REPORT_TYPE_OUTPUT, p_hid->epout_buf, (uint16_t)xferred_bytes); TU_ASSERT(usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))); } return true; } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/class/hid/hid_device.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_HID_DEVICE_H_ #define _TUSB_HID_DEVICE_H_ #include "hid.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // Class Driver Default Configure & Validation //--------------------------------------------------------------------+ #if !defined(CFG_TUD_HID_EP_BUFSIZE) & defined(CFG_TUD_HID_BUFSIZE) // TODO warn user to use new name later on // #warning CFG_TUD_HID_BUFSIZE is renamed to CFG_TUD_HID_EP_BUFSIZE, please update to use the new name #define CFG_TUD_HID_EP_BUFSIZE CFG_TUD_HID_BUFSIZE #endif #ifndef CFG_TUD_HID_EP_BUFSIZE #define CFG_TUD_HID_EP_BUFSIZE 64 #endif //--------------------------------------------------------------------+ // Application API (Multiple Instances) // CFG_TUD_HID > 1 //--------------------------------------------------------------------+ // Check if the interface is ready to use bool tud_hid_n_ready(uint8_t instance); // Get interface supported protocol (bInterfaceProtocol) check out hid_interface_protocol_enum_t for possible values uint8_t tud_hid_n_interface_protocol(uint8_t instance); // Get current active protocol: HID_PROTOCOL_BOOT (0) or HID_PROTOCOL_REPORT (1) uint8_t tud_hid_n_get_protocol(uint8_t instance); // Send report to host bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const* report, uint16_t len); // KEYBOARD: convenient helper to send keyboard report if application // use template layout report as defined by hid_keyboard_report_t bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, uint8_t keycode[6]); // MOUSE: convenient helper to send mouse report if application // use template layout report as defined by hid_mouse_report_t bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal); // ABSOLUTE MOUSE: convenient helper to send absolute mouse report if application // use template layout report as defined by hid_abs_mouse_report_t bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal); static inline bool tud_hid_abs_mouse_report(uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal) { return tud_hid_n_abs_mouse_report(0, report_id, buttons, x, y, vertical, horizontal); } // Gamepad: convenient helper to send gamepad report if application // use template layout report TUD_HID_REPORT_DESC_GAMEPAD bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons); //--------------------------------------------------------------------+ // Application API (Single Port) //--------------------------------------------------------------------+ static inline bool tud_hid_ready(void); static inline uint8_t tud_hid_interface_protocol(void); static inline uint8_t tud_hid_get_protocol(void); static inline bool tud_hid_report(uint8_t report_id, void const* report, uint16_t len); static inline bool tud_hid_keyboard_report(uint8_t report_id, uint8_t modifier, uint8_t keycode[6]); static inline bool tud_hid_mouse_report(uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal); static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons); //--------------------------------------------------------------------+ // Callbacks (Weak is optional) //--------------------------------------------------------------------+ // Invoked when received GET HID REPORT DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance); // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen); // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize); // Invoked when received SET_PROTOCOL request // protocol is either HID_PROTOCOL_BOOT (0) or HID_PROTOCOL_REPORT (1) TU_ATTR_WEAK void tud_hid_set_protocol_cb(uint8_t instance, uint8_t protocol); // Invoked when received SET_IDLE request. return false will stall the request // - Idle Rate = 0 : only send report if there is changes, i.e skip duplication // - Idle Rate > 0 : skip duplication, but send at least 1 report every idle rate (in unit of 4 ms). TU_ATTR_WEAK bool tud_hid_set_idle_cb(uint8_t instance, uint8_t idle_rate); // Invoked when sent REPORT successfully to host // Application can use this to send the next report // Note: For composite reports, report[0] is report ID TU_ATTR_WEAK void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint16_t len); // Invoked when a transfer wasn't successful TU_ATTR_WEAK void tud_hid_report_fail_cb(uint8_t instance, uint8_t ep_addr, uint16_t len); //--------------------------------------------------------------------+ // Inline Functions //--------------------------------------------------------------------+ static inline bool tud_hid_ready(void) { return tud_hid_n_ready(0); } static inline uint8_t tud_hid_interface_protocol(void) { return tud_hid_n_interface_protocol(0); } static inline uint8_t tud_hid_get_protocol(void) { return tud_hid_n_get_protocol(0); } static inline bool tud_hid_report(uint8_t report_id, void const* report, uint16_t len) { return tud_hid_n_report(0, report_id, report, len); } static inline bool tud_hid_keyboard_report(uint8_t report_id, uint8_t modifier, uint8_t keycode[6]) { return tud_hid_n_keyboard_report(0, report_id, modifier, keycode); } static inline bool tud_hid_mouse_report(uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal) { return tud_hid_n_mouse_report(0, report_id, buttons, x, y, vertical, horizontal); } static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons) { return tud_hid_n_gamepad_report(0, report_id, x, y, z, rz, rx, ry, hat, buttons); } /* --------------------------------------------------------------------+ * HID Report Descriptor Template * * Convenient for declaring popular HID device (keyboard, mouse, consumer, * gamepad etc...). Templates take "HID_REPORT_ID(n)" as input, leave * empty if multiple reports is not used * * - Only 1 report: no parameter * uint8_t const report_desc[] = { TUD_HID_REPORT_DESC_KEYBOARD() }; * * - Multiple Reports: "HID_REPORT_ID(ID)" must be passed to template * uint8_t const report_desc[] = * { * TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(1) ) , * TUD_HID_REPORT_DESC_MOUSE ( HID_REPORT_ID(2) ) * }; *--------------------------------------------------------------------*/ // Keyboard Report Descriptor Template #define TUD_HID_REPORT_DESC_KEYBOARD(...) \ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_KEYBOARD ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ /* 8 bits Modifier Keys (Shift, Control, Alt) */ \ HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ) ,\ HID_USAGE_MIN ( 224 ) ,\ HID_USAGE_MAX ( 231 ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ HID_LOGICAL_MAX ( 1 ) ,\ HID_REPORT_COUNT ( 8 ) ,\ HID_REPORT_SIZE ( 1 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ /* 8 bit reserved */ \ HID_REPORT_COUNT ( 1 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_INPUT ( HID_CONSTANT ) ,\ /* Output 5-bit LED Indicator Kana | Compose | ScrollLock | CapsLock | NumLock */ \ HID_USAGE_PAGE ( HID_USAGE_PAGE_LED ) ,\ HID_USAGE_MIN ( 1 ) ,\ HID_USAGE_MAX ( 5 ) ,\ HID_REPORT_COUNT ( 5 ) ,\ HID_REPORT_SIZE ( 1 ) ,\ HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ /* led padding */ \ HID_REPORT_COUNT ( 1 ) ,\ HID_REPORT_SIZE ( 3 ) ,\ HID_OUTPUT ( HID_CONSTANT ) ,\ /* 6-byte Keycodes */ \ HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ) ,\ HID_USAGE_MIN ( 0 ) ,\ HID_USAGE_MAX_N ( 255, 2 ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ HID_LOGICAL_MAX_N( 255, 2 ) ,\ HID_REPORT_COUNT ( 6 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \ // Mouse Report Descriptor Template #define TUD_HID_REPORT_DESC_MOUSE(...) \ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\ HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\ HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\ HID_USAGE_MIN ( 1 ) ,\ HID_USAGE_MAX ( 5 ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ HID_LOGICAL_MAX ( 1 ) ,\ /* Left, Right, Middle, Backward, Forward buttons */ \ HID_REPORT_COUNT( 5 ) ,\ HID_REPORT_SIZE ( 1 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ /* 3 bit padding */ \ HID_REPORT_COUNT( 1 ) ,\ HID_REPORT_SIZE ( 3 ) ,\ HID_INPUT ( HID_CONSTANT ) ,\ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ /* X, Y position [-127, 127] */ \ HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ HID_LOGICAL_MIN ( 0x81 ) ,\ HID_LOGICAL_MAX ( 0x7f ) ,\ HID_REPORT_COUNT( 2 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ /* Verital wheel scroll [-127, 127] */ \ HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\ HID_LOGICAL_MIN ( 0x81 ) ,\ HID_LOGICAL_MAX ( 0x7f ) ,\ HID_REPORT_COUNT( 1 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ), \ /* Horizontal wheel scroll [-127, 127] */ \ HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ), \ HID_LOGICAL_MIN ( 0x81 ), \ HID_LOGICAL_MAX ( 0x7f ), \ HID_REPORT_COUNT( 1 ), \ HID_REPORT_SIZE ( 8 ), \ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), \ HID_COLLECTION_END , \ HID_COLLECTION_END \ // Absolute Mouse Report Descriptor Template #define TUD_HID_REPORT_DESC_ABSMOUSE(...) \ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\ HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\ HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\ HID_USAGE_MIN ( 1 ) ,\ HID_USAGE_MAX ( 5 ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ HID_LOGICAL_MAX ( 1 ) ,\ /* Left, Right, Middle, Backward, Forward buttons */ \ HID_REPORT_COUNT( 5 ) ,\ HID_REPORT_SIZE ( 1 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ /* 3 bit padding */ \ HID_REPORT_COUNT( 1 ) ,\ HID_REPORT_SIZE ( 3 ) ,\ HID_INPUT ( HID_CONSTANT ) ,\ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ /* X, Y absolute position [0, 32767] */ \ HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ HID_LOGICAL_MIN ( 0x00 ) ,\ HID_LOGICAL_MAX_N( 0x7FFF, 2 ) ,\ HID_REPORT_SIZE ( 16 ) ,\ HID_REPORT_COUNT ( 2 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ /* Vertical wheel scroll [-127, 127] */ \ HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\ HID_LOGICAL_MIN ( 0x81 ) ,\ HID_LOGICAL_MAX ( 0x7f ) ,\ HID_REPORT_COUNT( 1 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ), \ /* Horizontal wheel scroll [-127, 127] */ \ HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ), \ HID_LOGICAL_MIN ( 0x81 ), \ HID_LOGICAL_MAX ( 0x7f ), \ HID_REPORT_COUNT( 1 ), \ HID_REPORT_SIZE ( 8 ), \ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), \ HID_COLLECTION_END , \ HID_COLLECTION_END \ // Consumer Control Report Descriptor Template #define TUD_HID_REPORT_DESC_CONSUMER(...) \ HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\ HID_USAGE ( HID_USAGE_CONSUMER_CONTROL ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ HID_LOGICAL_MIN ( 0x00 ) ,\ HID_LOGICAL_MAX_N( 0x03FF, 2 ) ,\ HID_USAGE_MIN ( 0x00 ) ,\ HID_USAGE_MAX_N ( 0x03FF, 2 ) ,\ HID_REPORT_COUNT ( 1 ) ,\ HID_REPORT_SIZE ( 16 ) ,\ HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \ /* System Control Report Descriptor Template * 0x00 - do nothing * 0x01 - Power Off * 0x02 - Standby * 0x03 - Wake Host */ #define TUD_HID_REPORT_DESC_SYSTEM_CONTROL(...) \ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_CONTROL ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ /* 2 bit system power control */ \ HID_LOGICAL_MIN ( 1 ) ,\ HID_LOGICAL_MAX ( 3 ) ,\ HID_REPORT_COUNT ( 1 ) ,\ HID_REPORT_SIZE ( 2 ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_SLEEP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_WAKE_UP ) ,\ HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ /* 6 bit padding */ \ HID_REPORT_COUNT ( 1 ) ,\ HID_REPORT_SIZE ( 6 ) ,\ HID_INPUT ( HID_CONSTANT ) ,\ HID_COLLECTION_END \ // Gamepad Report Descriptor Template // with 32 buttons, 2 joysticks and 1 hat/dpad with following layout // | X | Y | Z | Rz | Rx | Ry (1 byte each) | hat/DPAD (1 byte) | Button Map (4 bytes) | #define TUD_HID_REPORT_DESC_GAMEPAD(...) \ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_GAMEPAD ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ /* 8 bit X, Y, Z, Rz, Rx, Ry (min -127, max 127 ) */ \ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_Z ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_RZ ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_RX ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_RY ) ,\ HID_LOGICAL_MIN ( 0x81 ) ,\ HID_LOGICAL_MAX ( 0x7f ) ,\ HID_REPORT_COUNT ( 6 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ /* 8 bit DPad/Hat Button Map */ \ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_HAT_SWITCH ) ,\ HID_LOGICAL_MIN ( 1 ) ,\ HID_LOGICAL_MAX ( 8 ) ,\ HID_PHYSICAL_MIN ( 0 ) ,\ HID_PHYSICAL_MAX_N ( 315, 2 ) ,\ HID_REPORT_COUNT ( 1 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ /* 32 bit Button Map */ \ HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\ HID_USAGE_MIN ( 1 ) ,\ HID_USAGE_MAX ( 32 ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ HID_LOGICAL_MAX ( 1 ) ,\ HID_REPORT_COUNT ( 32 ) ,\ HID_REPORT_SIZE ( 1 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \ // FIDO U2F Authenticator Descriptor Template // - 1st parameter is report size, which is 64 bytes maximum in U2F // - 2nd parameter is HID_REPORT_ID(n) (optional) #define TUD_HID_REPORT_DESC_FIDO_U2F(report_size, ...) \ HID_USAGE_PAGE_N ( HID_USAGE_PAGE_FIDO, 2 ) ,\ HID_USAGE ( HID_USAGE_FIDO_U2FHID ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */ \ __VA_ARGS__ \ /* Usage Data In */ \ HID_USAGE ( HID_USAGE_FIDO_DATA_IN ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ HID_LOGICAL_MAX_N ( 0xff, 2 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_REPORT_COUNT ( report_size ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ /* Usage Data Out */ \ HID_USAGE ( HID_USAGE_FIDO_DATA_OUT ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ HID_LOGICAL_MAX_N ( 0xff, 2 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_REPORT_COUNT ( report_size ) ,\ HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \ // HID Generic Input & Output // - 1st parameter is report size (mandatory) // - 2nd parameter is report id HID_REPORT_ID(n) (optional) #define TUD_HID_REPORT_DESC_GENERIC_INOUT(report_size, ...) \ HID_USAGE_PAGE_N ( HID_USAGE_PAGE_VENDOR, 2 ),\ HID_USAGE ( 0x01 ),\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ),\ /* Report ID if any */\ __VA_ARGS__ \ /* Input */ \ HID_USAGE ( 0x02 ),\ HID_LOGICAL_MIN ( 0x00 ),\ HID_LOGICAL_MAX_N ( 0xff, 2 ),\ HID_REPORT_SIZE ( 8 ),\ HID_REPORT_COUNT( report_size ),\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ /* Output */ \ HID_USAGE ( 0x03 ),\ HID_LOGICAL_MIN ( 0x00 ),\ HID_LOGICAL_MAX_N ( 0xff, 2 ),\ HID_REPORT_SIZE ( 8 ),\ HID_REPORT_COUNT( report_size ),\ HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_COLLECTION_END \ // HID Lighting and Illumination Report Descriptor Template // - 1st parameter is report id (required) // Creates 6 report ids for lighting HID usages in the following order: // report_id+0: HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT // report_id+1: HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT // report_id+2: HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT // report_id+3: HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT // report_id+4: HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT // report_id+5: HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT #define TUD_HID_REPORT_DESC_LIGHTING(report_id) \ HID_USAGE_PAGE ( HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY ),\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ),\ /* Lamp Array Attributes Report */ \ HID_REPORT_ID (report_id ) \ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT ),\ HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_COUNT ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX_N ( 65535, 3 ),\ HID_REPORT_SIZE ( 16 ),\ HID_REPORT_COUNT ( 1 ),\ HID_FEATURE ( HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE ),\ HID_USAGE ( HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS ),\ HID_USAGE ( HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS ),\ HID_USAGE ( HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY_KIND ),\ HID_USAGE ( HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX_N ( 2147483647, 3 ),\ HID_REPORT_SIZE ( 32 ),\ HID_REPORT_COUNT ( 5 ),\ HID_FEATURE ( HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE ),\ HID_COLLECTION_END ,\ /* Lamp Attributes Request Report */ \ HID_REPORT_ID ( report_id + 1 ) \ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT ),\ HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX_N ( 65535, 3 ),\ HID_REPORT_SIZE ( 16 ),\ HID_REPORT_COUNT ( 1 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_COLLECTION_END ,\ /* Lamp Attributes Response Report */ \ HID_REPORT_ID ( report_id + 2 ) \ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT ),\ HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX_N ( 65535, 3 ),\ HID_REPORT_SIZE ( 16 ),\ HID_REPORT_COUNT ( 1 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_USAGE ( HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS ),\ HID_USAGE ( HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS ),\ HID_USAGE ( HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS ),\ HID_USAGE ( HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_PURPOSES ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX_N ( 2147483647, 3 ),\ HID_REPORT_SIZE ( 32 ),\ HID_REPORT_COUNT ( 5 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_USAGE ( HID_USAGE_LIGHTING_RED_LEVEL_COUNT ),\ HID_USAGE ( HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT ),\ HID_USAGE ( HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT ),\ HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT ),\ HID_USAGE ( HID_USAGE_LIGHTING_IS_PROGRAMMABLE ),\ HID_USAGE ( HID_USAGE_LIGHTING_INPUT_BINDING ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX_N ( 255, 2 ),\ HID_REPORT_SIZE ( 8 ),\ HID_REPORT_COUNT ( 6 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_COLLECTION_END ,\ /* Lamp Multi-Update Report */ \ HID_REPORT_ID ( report_id + 3 ) \ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT ),\ HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_COUNT ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX ( 8 ),\ HID_REPORT_SIZE ( 8 ),\ HID_REPORT_COUNT ( 2 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX_N ( 65535, 3 ),\ HID_REPORT_SIZE ( 16 ),\ HID_REPORT_COUNT ( 8 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX_N ( 255, 2 ),\ HID_REPORT_SIZE ( 8 ),\ HID_REPORT_COUNT ( 32 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_COLLECTION_END ,\ /* Lamp Range Update Report */ \ HID_REPORT_ID ( report_id + 4 ) \ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT ),\ HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX ( 8 ),\ HID_REPORT_SIZE ( 8 ),\ HID_REPORT_COUNT ( 1 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID_START ),\ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID_END ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX_N ( 65535, 3 ),\ HID_REPORT_SIZE ( 16 ),\ HID_REPORT_COUNT ( 2 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX_N ( 255, 2 ),\ HID_REPORT_SIZE ( 8 ),\ HID_REPORT_COUNT ( 4 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_COLLECTION_END ,\ /* Lamp Array Control Report */ \ HID_REPORT_ID ( report_id + 5 ) \ HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT ),\ HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ HID_USAGE ( HID_USAGE_LIGHTING_AUTONOMOUS_MODE ),\ HID_LOGICAL_MIN ( 0 ),\ HID_LOGICAL_MAX ( 1 ),\ HID_REPORT_SIZE ( 8 ),\ HID_REPORT_COUNT ( 1 ),\ HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_COLLECTION_END ,\ HID_COLLECTION_END \ //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ void hidd_init (void); bool hidd_deinit (void); void hidd_reset (uint8_t rhport); uint16_t hidd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); bool hidd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); bool hidd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); #ifdef __cplusplus } #endif #endif /* _TUSB_HID_DEVICE_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/class/hid/hid_host.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if (CFG_TUH_ENABLED && CFG_TUH_HID) #include "host/usbh.h" #include "host/usbh_pvt.h" #include "hid_host.h" // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUH_HID_LOG_LEVEL #define CFG_TUH_HID_LOG_LEVEL CFG_TUH_LOG_LEVEL #endif #define TU_LOG_DRV(...) TU_LOG(CFG_TUH_HID_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ typedef struct { uint8_t daddr; uint8_t itf_num; uint8_t ep_in; uint8_t ep_out; bool mounted; // Enumeration is complete uint8_t itf_protocol; // None, Keyboard, Mouse uint8_t protocol_mode; // Boot (0) or Report protocol (1) uint8_t report_desc_type; uint16_t report_desc_len; uint16_t epin_size; uint16_t epout_size; CFG_TUH_MEM_ALIGN uint8_t epin_buf[CFG_TUH_HID_EPIN_BUFSIZE]; CFG_TUH_MEM_ALIGN uint8_t epout_buf[CFG_TUH_HID_EPOUT_BUFSIZE]; } hidh_interface_t; CFG_TUH_MEM_SECTION tu_static hidh_interface_t _hidh_itf[CFG_TUH_HID]; tu_static uint8_t _hidh_default_protocol = HID_PROTOCOL_BOOT; //--------------------------------------------------------------------+ // Helper //--------------------------------------------------------------------+ TU_ATTR_ALWAYS_INLINE static inline hidh_interface_t* get_hid_itf(uint8_t daddr, uint8_t idx) { TU_ASSERT(daddr > 0 && idx < CFG_TUH_HID, NULL); hidh_interface_t* p_hid = &_hidh_itf[idx]; return (p_hid->daddr == daddr) ? p_hid : NULL; } // Get instance ID by endpoint address static uint8_t get_idx_by_epaddr(uint8_t daddr, uint8_t ep_addr) { for (uint8_t idx = 0; idx < CFG_TUH_HID; idx++) { hidh_interface_t const* p_hid = &_hidh_itf[idx]; if (p_hid->daddr == daddr && (p_hid->ep_in == ep_addr || p_hid->ep_out == ep_addr)) { return idx; } } return TUSB_INDEX_INVALID_8; } static hidh_interface_t* find_new_itf(void) { for (uint8_t i = 0; i < CFG_TUH_HID; i++) { if (_hidh_itf[i].daddr == 0) return &_hidh_itf[i]; } return NULL; } //--------------------------------------------------------------------+ // Interface API //--------------------------------------------------------------------+ uint8_t tuh_hid_itf_get_count(uint8_t daddr) { uint8_t count = 0; for (uint8_t i = 0; i < CFG_TUH_HID; i++) { if (_hidh_itf[i].daddr == daddr) count++; } return count; } uint8_t tuh_hid_itf_get_total_count(void) { uint8_t count = 0; for (uint8_t i = 0; i < CFG_TUH_HID; i++) { if (_hidh_itf[i].daddr != 0) count++; } return count; } bool tuh_hid_mounted(uint8_t daddr, uint8_t idx) { hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid); return p_hid->mounted; } bool tuh_hid_itf_get_info(uint8_t daddr, uint8_t idx, tuh_itf_info_t* info) { hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid && info); info->daddr = daddr; // re-construct descriptor tusb_desc_interface_t* desc = &info->desc; desc->bLength = sizeof(tusb_desc_interface_t); desc->bDescriptorType = TUSB_DESC_INTERFACE; desc->bInterfaceNumber = p_hid->itf_num; desc->bAlternateSetting = 0; desc->bNumEndpoints = (uint8_t) ((p_hid->ep_in ? 1u : 0u) + (p_hid->ep_out ? 1u : 0u)); desc->bInterfaceClass = TUSB_CLASS_HID; desc->bInterfaceSubClass = (p_hid->itf_protocol ? HID_SUBCLASS_BOOT : HID_SUBCLASS_NONE); desc->bInterfaceProtocol = p_hid->itf_protocol; desc->iInterface = 0; // not used yet return true; } uint8_t tuh_hid_itf_get_index(uint8_t daddr, uint8_t itf_num) { for (uint8_t idx = 0; idx < CFG_TUH_HID; idx++) { hidh_interface_t const* p_hid = &_hidh_itf[idx]; if (p_hid->daddr == daddr && p_hid->itf_num == itf_num) return idx; } return TUSB_INDEX_INVALID_8; } uint8_t tuh_hid_interface_protocol(uint8_t daddr, uint8_t idx) { hidh_interface_t* p_hid = get_hid_itf(daddr, idx); return p_hid ? p_hid->itf_protocol : 0; } //--------------------------------------------------------------------+ // Control Endpoint API //--------------------------------------------------------------------+ uint8_t tuh_hid_get_protocol(uint8_t daddr, uint8_t idx) { hidh_interface_t* p_hid = get_hid_itf(daddr, idx); return p_hid ? p_hid->protocol_mode : 0; } static void set_protocol_complete(tuh_xfer_t* xfer) { uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); uint8_t const daddr = xfer->daddr; uint8_t const idx = tuh_hid_itf_get_index(daddr, itf_num); hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid,); if (XFER_RESULT_SUCCESS == xfer->result) { p_hid->protocol_mode = (uint8_t) tu_le16toh(xfer->setup->wValue); } if (tuh_hid_set_protocol_complete_cb) { tuh_hid_set_protocol_complete_cb(daddr, idx, p_hid->protocol_mode); } } void tuh_hid_set_default_protocol(uint8_t protocol) { _hidh_default_protocol = protocol; } static bool _hidh_set_protocol(uint8_t daddr, uint8_t itf_num, uint8_t protocol, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { TU_LOG_DRV("HID Set Protocol = %d\r\n", protocol); tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_INTERFACE, .type = TUSB_REQ_TYPE_CLASS, .direction = TUSB_DIR_OUT }, .bRequest = HID_REQ_CONTROL_SET_PROTOCOL, .wValue = protocol, .wIndex = itf_num, .wLength = 0 }; tuh_xfer_t xfer = { .daddr = daddr, .ep_addr = 0, .setup = &request, .buffer = NULL, .complete_cb = complete_cb, .user_data = user_data }; return tuh_control_xfer(&xfer); } bool tuh_hid_set_protocol(uint8_t daddr, uint8_t idx, uint8_t protocol) { hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid && p_hid->itf_protocol != HID_ITF_PROTOCOL_NONE); return _hidh_set_protocol(daddr, p_hid->itf_num, protocol, set_protocol_complete, 0); } static void get_report_complete(tuh_xfer_t* xfer) { TU_LOG_DRV("HID Get Report complete\r\n"); if (tuh_hid_get_report_complete_cb) { uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); uint8_t const idx = tuh_hid_itf_get_index(xfer->daddr, itf_num); uint8_t const report_type = tu_u16_high(xfer->setup->wValue); uint8_t const report_id = tu_u16_low(xfer->setup->wValue); tuh_hid_get_report_complete_cb(xfer->daddr, idx, report_id, report_type, (xfer->result == XFER_RESULT_SUCCESS) ? xfer->setup->wLength : 0); } } bool tuh_hid_get_report(uint8_t daddr, uint8_t idx, uint8_t report_id, uint8_t report_type, void* report, uint16_t len) { hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid); TU_LOG_DRV("HID Get Report: id = %u, type = %u, len = %u\r\n", report_id, report_type, len); tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_INTERFACE, .type = TUSB_REQ_TYPE_CLASS, .direction = TUSB_DIR_IN }, .bRequest = HID_REQ_CONTROL_GET_REPORT, .wValue = tu_htole16(tu_u16(report_type, report_id)), .wIndex = tu_htole16((uint16_t) p_hid->itf_num), .wLength = len }; tuh_xfer_t xfer = { .daddr = daddr, .ep_addr = 0, .setup = &request, .buffer = report, .complete_cb = get_report_complete, .user_data = 0 }; return tuh_control_xfer(&xfer); } static void set_report_complete(tuh_xfer_t* xfer) { TU_LOG_DRV("HID Set Report complete\r\n"); if (tuh_hid_set_report_complete_cb) { uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); uint8_t const idx = tuh_hid_itf_get_index(xfer->daddr, itf_num); uint8_t const report_type = tu_u16_high(xfer->setup->wValue); uint8_t const report_id = tu_u16_low(xfer->setup->wValue); tuh_hid_set_report_complete_cb(xfer->daddr, idx, report_id, report_type, (xfer->result == XFER_RESULT_SUCCESS) ? xfer->setup->wLength : 0); } } bool tuh_hid_set_report(uint8_t daddr, uint8_t idx, uint8_t report_id, uint8_t report_type, void* report, uint16_t len) { hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid); TU_LOG_DRV("HID Set Report: id = %u, type = %u, len = %u\r\n", report_id, report_type, len); tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_INTERFACE, .type = TUSB_REQ_TYPE_CLASS, .direction = TUSB_DIR_OUT }, .bRequest = HID_REQ_CONTROL_SET_REPORT, .wValue = tu_htole16(tu_u16(report_type, report_id)), .wIndex = tu_htole16((uint16_t) p_hid->itf_num), .wLength = len }; tuh_xfer_t xfer = { .daddr = daddr, .ep_addr = 0, .setup = &request, .buffer = report, .complete_cb = set_report_complete, .user_data = 0 }; return tuh_control_xfer(&xfer); } static bool _hidh_set_idle(uint8_t daddr, uint8_t itf_num, uint16_t idle_rate, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { // SET IDLE request, device can stall if not support this request TU_LOG_DRV("HID Set Idle \r\n"); tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_INTERFACE, .type = TUSB_REQ_TYPE_CLASS, .direction = TUSB_DIR_OUT }, .bRequest = HID_REQ_CONTROL_SET_IDLE, .wValue = tu_htole16(idle_rate), .wIndex = tu_htole16((uint16_t) itf_num), .wLength = 0 }; tuh_xfer_t xfer = { .daddr = daddr, .ep_addr = 0, .setup = &request, .buffer = NULL, .complete_cb = complete_cb, .user_data = user_data }; return tuh_control_xfer(&xfer); } //--------------------------------------------------------------------+ // Interrupt Endpoint API //--------------------------------------------------------------------+ // Check if HID interface is ready to receive report bool tuh_hid_receive_ready(uint8_t dev_addr, uint8_t idx) { hidh_interface_t* p_hid = get_hid_itf(dev_addr, idx); TU_VERIFY(p_hid); return !usbh_edpt_busy(dev_addr, p_hid->ep_in); } bool tuh_hid_receive_report(uint8_t daddr, uint8_t idx) { hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid); // claim endpoint TU_VERIFY(usbh_edpt_claim(daddr, p_hid->ep_in)); if (!usbh_edpt_xfer(daddr, p_hid->ep_in, p_hid->epin_buf, p_hid->epin_size)) { usbh_edpt_release(daddr, p_hid->ep_in); return false; } return true; } bool tuh_hid_receive_abort(uint8_t dev_addr, uint8_t idx) { hidh_interface_t* p_hid = get_hid_itf(dev_addr, idx); TU_VERIFY(p_hid); return tuh_edpt_abort_xfer(dev_addr, p_hid->ep_in); } bool tuh_hid_send_ready(uint8_t dev_addr, uint8_t idx) { hidh_interface_t* p_hid = get_hid_itf(dev_addr, idx); TU_VERIFY(p_hid); return !usbh_edpt_busy(dev_addr, p_hid->ep_out); } bool tuh_hid_send_report(uint8_t daddr, uint8_t idx, uint8_t report_id, const void* report, uint16_t len) { TU_LOG_DRV("HID Send Report %d\r\n", report_id); hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid); if (p_hid->ep_out == 0) { // This HID does not have an out endpoint (other than control) return false; } else if (len > CFG_TUH_HID_EPOUT_BUFSIZE || (report_id != 0 && len > (CFG_TUH_HID_EPOUT_BUFSIZE - 1))) { // ep_out buffer is not large enough to hold contents return false; } // claim endpoint TU_VERIFY(usbh_edpt_claim(daddr, p_hid->ep_out)); if (report_id == 0) { // No report ID in transmission memcpy(&p_hid->epout_buf[0], report, len); } else { p_hid->epout_buf[0] = report_id; memcpy(&p_hid->epout_buf[1], report, len); ++len; // 1 more byte for report_id } TU_LOG3_MEM(p_hid->epout_buf, len, 2); if (!usbh_edpt_xfer(daddr, p_hid->ep_out, p_hid->epout_buf, len)) { usbh_edpt_release(daddr, p_hid->ep_out); return false; } return true; } //--------------------------------------------------------------------+ // USBH API //--------------------------------------------------------------------+ bool hidh_init(void) { TU_LOG_DRV("sizeof(hidh_interface_t) = %u\r\n", sizeof(hidh_interface_t)); tu_memclr(_hidh_itf, sizeof(_hidh_itf)); return true; } bool hidh_deinit(void) { return true; } bool hidh_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { (void) result; uint8_t const dir = tu_edpt_dir(ep_addr); uint8_t const idx = get_idx_by_epaddr(daddr, ep_addr); hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid); if (dir == TUSB_DIR_IN) { TU_LOG_DRV(" Get Report callback (%u, %u)\r\n", daddr, idx); TU_LOG3_MEM(p_hid->epin_buf, xferred_bytes, 2); tuh_hid_report_received_cb(daddr, idx, p_hid->epin_buf, (uint16_t) xferred_bytes); } else { if (tuh_hid_report_sent_cb) { tuh_hid_report_sent_cb(daddr, idx, p_hid->epout_buf, (uint16_t) xferred_bytes); } } return true; } void hidh_close(uint8_t daddr) { for (uint8_t i = 0; i < CFG_TUH_HID; i++) { hidh_interface_t* p_hid = &_hidh_itf[i]; if (p_hid->daddr == daddr) { TU_LOG_DRV(" HIDh close addr = %u index = %u\r\n", daddr, i); if (tuh_hid_umount_cb) tuh_hid_umount_cb(daddr, i); tu_memclr(p_hid, sizeof(hidh_interface_t)); } } } //--------------------------------------------------------------------+ // Enumeration //--------------------------------------------------------------------+ bool hidh_open(uint8_t rhport, uint8_t daddr, tusb_desc_interface_t const* desc_itf, uint16_t max_len) { (void) rhport; (void) max_len; TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass); TU_LOG_DRV("[%u] HID opening Interface %u\r\n", daddr, desc_itf->bInterfaceNumber); // len = interface + hid + n*endpoints uint16_t const drv_len = (uint16_t) (sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); TU_ASSERT(max_len >= drv_len); uint8_t const* p_desc = (uint8_t const*) desc_itf; //------------- HID descriptor -------------// p_desc = tu_desc_next(p_desc); tusb_hid_descriptor_hid_t const* desc_hid = (tusb_hid_descriptor_hid_t const*) p_desc; TU_ASSERT(HID_DESC_TYPE_HID == desc_hid->bDescriptorType); hidh_interface_t* p_hid = find_new_itf(); TU_ASSERT(p_hid); // not enough interface, try to increase CFG_TUH_HID p_hid->daddr = daddr; //------------- Endpoint Descriptors -------------// p_desc = tu_desc_next(p_desc); tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const*) p_desc; for (int i = 0; i < desc_itf->bNumEndpoints; i++) { TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType); TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { p_hid->ep_in = desc_ep->bEndpointAddress; p_hid->epin_size = tu_edpt_packet_size(desc_ep); } else { p_hid->ep_out = desc_ep->bEndpointAddress; p_hid->epout_size = tu_edpt_packet_size(desc_ep); } p_desc = tu_desc_next(p_desc); desc_ep = (tusb_desc_endpoint_t const*) p_desc; } p_hid->itf_num = desc_itf->bInterfaceNumber; // Assume bNumDescriptors = 1 p_hid->report_desc_type = desc_hid->bReportType; p_hid->report_desc_len = tu_unaligned_read16(&desc_hid->wReportLength); // Per HID Specs: default is Report protocol, though we will force Boot protocol when set_config p_hid->protocol_mode = _hidh_default_protocol; if (HID_SUBCLASS_BOOT == desc_itf->bInterfaceSubClass) { p_hid->itf_protocol = desc_itf->bInterfaceProtocol; } return true; } //--------------------------------------------------------------------+ // Set Configure //--------------------------------------------------------------------+ enum { CONFG_SET_IDLE, CONFIG_SET_PROTOCOL, CONFIG_GET_REPORT_DESC, CONFIG_COMPLETE }; static void config_driver_mount_complete(uint8_t daddr, uint8_t idx, uint8_t const* desc_report, uint16_t desc_len); static void process_set_config(tuh_xfer_t* xfer); bool hidh_set_config(uint8_t daddr, uint8_t itf_num) { tusb_control_request_t request; request.wIndex = tu_htole16((uint16_t) itf_num); tuh_xfer_t xfer; xfer.daddr = daddr; xfer.result = XFER_RESULT_SUCCESS; xfer.setup = &request; xfer.user_data = CONFG_SET_IDLE; // fake request to kick-off the set config process process_set_config(&xfer); return true; } static void process_set_config(tuh_xfer_t* xfer) { // Stall is a valid response for SET_IDLE, sometime SET_PROTOCOL as well // therefore we could ignore its result if (!(xfer->setup->bRequest == HID_REQ_CONTROL_SET_IDLE || xfer->setup->bRequest == HID_REQ_CONTROL_SET_PROTOCOL)) { TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS,); } uintptr_t const state = xfer->user_data; uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); uint8_t const daddr = xfer->daddr; uint8_t const idx = tuh_hid_itf_get_index(daddr, itf_num); hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid,); switch (state) { case CONFG_SET_IDLE: { // Idle rate = 0 mean only report when there is changes const uint16_t idle_rate = 0; const uintptr_t next_state = (p_hid->itf_protocol != HID_ITF_PROTOCOL_NONE) ? CONFIG_SET_PROTOCOL : CONFIG_GET_REPORT_DESC; _hidh_set_idle(daddr, itf_num, idle_rate, process_set_config, next_state); break; } case CONFIG_SET_PROTOCOL: _hidh_set_protocol(daddr, p_hid->itf_num, _hidh_default_protocol, process_set_config, CONFIG_GET_REPORT_DESC); break; case CONFIG_GET_REPORT_DESC: // Get Report Descriptor if possible // using usbh enumeration buffer since report descriptor can be very long if (p_hid->report_desc_len > CFG_TUH_ENUMERATION_BUFSIZE) { TU_LOG_DRV("HID Skip Report Descriptor since it is too large %u bytes\r\n", p_hid->report_desc_len); // Driver is mounted without report descriptor config_driver_mount_complete(daddr, idx, NULL, 0); } else { tuh_descriptor_get_hid_report(daddr, itf_num, p_hid->report_desc_type, 0, usbh_get_enum_buf(), p_hid->report_desc_len, process_set_config, CONFIG_COMPLETE); } break; case CONFIG_COMPLETE: { uint8_t const* desc_report = usbh_get_enum_buf(); uint16_t const desc_len = tu_le16toh(xfer->setup->wLength); config_driver_mount_complete(daddr, idx, desc_report, desc_len); break; } default: break; } } static void config_driver_mount_complete(uint8_t daddr, uint8_t idx, uint8_t const* desc_report, uint16_t desc_len) { hidh_interface_t* p_hid = get_hid_itf(daddr, idx); TU_VERIFY(p_hid,); p_hid->mounted = true; // enumeration is complete if (tuh_hid_mount_cb) tuh_hid_mount_cb(daddr, idx, desc_report, desc_len); // notify usbh that driver enumeration is complete usbh_driver_set_config_complete(daddr, p_hid->itf_num); } //--------------------------------------------------------------------+ // Report Descriptor Parser //--------------------------------------------------------------------+ uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t* report_info_arr, uint8_t arr_count, uint8_t const* desc_report, uint16_t desc_len) { // Report Item 6.2.2.2 USB HID 1.11 union TU_ATTR_PACKED { uint8_t byte; struct TU_ATTR_PACKED { uint8_t size : 2; uint8_t type : 2; uint8_t tag : 4; }; } header; tu_memclr(report_info_arr, arr_count * sizeof(tuh_hid_report_info_t)); uint8_t report_num = 0; tuh_hid_report_info_t* info = report_info_arr; // current parsed report count & size from descriptor // uint8_t ri_report_count = 0; // uint8_t ri_report_size = 0; uint8_t ri_collection_depth = 0; while (desc_len && report_num < arr_count) { header.byte = *desc_report++; desc_len--; uint8_t const tag = header.tag; uint8_t const type = header.type; uint8_t const size = header.size; uint8_t const data8 = desc_report[0]; TU_LOG(3, "tag = %d, type = %d, size = %d, data = ", tag, type, size); for (uint32_t i = 0; i < size; i++) TU_LOG(3, "%02X ", desc_report[i]); TU_LOG(3, "\r\n"); switch (type) { case RI_TYPE_MAIN: switch (tag) { case RI_MAIN_INPUT: break; case RI_MAIN_OUTPUT: break; case RI_MAIN_FEATURE: break; case RI_MAIN_COLLECTION: ri_collection_depth++; break; case RI_MAIN_COLLECTION_END: ri_collection_depth--; if (ri_collection_depth == 0) { info++; report_num++; } break; default:break; } break; case RI_TYPE_GLOBAL: switch (tag) { case RI_GLOBAL_USAGE_PAGE: // only take in account the "usage page" before REPORT ID if (ri_collection_depth == 0) memcpy(&info->usage_page, desc_report, size); break; case RI_GLOBAL_LOGICAL_MIN: break; case RI_GLOBAL_LOGICAL_MAX: break; case RI_GLOBAL_PHYSICAL_MIN: break; case RI_GLOBAL_PHYSICAL_MAX: break; case RI_GLOBAL_REPORT_ID: info->report_id = data8; break; case RI_GLOBAL_REPORT_SIZE: // ri_report_size = data8; break; case RI_GLOBAL_REPORT_COUNT: // ri_report_count = data8; break; case RI_GLOBAL_UNIT_EXPONENT: break; case RI_GLOBAL_UNIT: break; case RI_GLOBAL_PUSH: break; case RI_GLOBAL_POP: break; default: break; } break; case RI_TYPE_LOCAL: switch (tag) { case RI_LOCAL_USAGE: // only take in account the "usage" before starting REPORT ID if (ri_collection_depth == 0) info->usage = data8; break; case RI_LOCAL_USAGE_MIN: break; case RI_LOCAL_USAGE_MAX: break; case RI_LOCAL_DESIGNATOR_INDEX: break; case RI_LOCAL_DESIGNATOR_MIN: break; case RI_LOCAL_DESIGNATOR_MAX: break; case RI_LOCAL_STRING_INDEX: break; case RI_LOCAL_STRING_MIN: break; case RI_LOCAL_STRING_MAX: break; case RI_LOCAL_DELIMITER: break; default: break; } break; // error default: break; } desc_report += size; desc_len -= size; } for (uint8_t i = 0; i < report_num; i++) { info = report_info_arr + i; TU_LOG_DRV("%u: id = %u, usage_page = %u, usage = %u\r\n", i, info->report_id, info->usage_page, info->usage); } return report_num; } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/class/hid/hid_host.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_HID_HOST_H_ #define _TUSB_HID_HOST_H_ #include "hid.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // Class Driver Configuration //--------------------------------------------------------------------+ // TODO Highspeed interrupt can be up to 512 bytes #ifndef CFG_TUH_HID_EPIN_BUFSIZE #define CFG_TUH_HID_EPIN_BUFSIZE 64 #endif #ifndef CFG_TUH_HID_EPOUT_BUFSIZE #define CFG_TUH_HID_EPOUT_BUFSIZE 64 #endif typedef struct { uint8_t report_id; uint8_t usage; uint16_t usage_page; // TODO still use the endpoint size for now // uint8_t in_len; // length of IN report // uint8_t out_len; // length of OUT report } tuh_hid_report_info_t; //--------------------------------------------------------------------+ // Interface API //--------------------------------------------------------------------+ // Get the total number of mounted HID interfaces of a device uint8_t tuh_hid_itf_get_count(uint8_t dev_addr); // Get all mounted interfaces across devices uint8_t tuh_hid_itf_get_total_count(void); // backward compatible rename #define tuh_hid_instance_count tuh_hid_itf_get_count // Get Interface information bool tuh_hid_itf_get_info(uint8_t daddr, uint8_t idx, tuh_itf_info_t* itf_info); // Get Interface index from device address + interface number // return TUSB_INDEX_INVALID_8 (0xFF) if not found uint8_t tuh_hid_itf_get_index(uint8_t daddr, uint8_t itf_num); // Get interface supported protocol (bInterfaceProtocol) check out hid_interface_protocol_enum_t for possible values uint8_t tuh_hid_interface_protocol(uint8_t dev_addr, uint8_t idx); // Check if HID interface is mounted bool tuh_hid_mounted(uint8_t dev_addr, uint8_t idx); // Parse report descriptor into array of report_info struct and return number of reports. // For complicated report, application should write its own parser. TU_ATTR_UNUSED uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t* reports_info_arr, uint8_t arr_count, uint8_t const* desc_report, uint16_t desc_len); //--------------------------------------------------------------------+ // Control Endpoint API //--------------------------------------------------------------------+ // Get current protocol: HID_PROTOCOL_BOOT (0) or HID_PROTOCOL_REPORT (1) // Note: Device will be initialized in Boot protocol for simplicity. // Application can use set_protocol() to switch back to Report protocol. uint8_t tuh_hid_get_protocol(uint8_t dev_addr, uint8_t idx); // Device by default is enumerated in Boot protocol for simplicity. Application // can use this to modify the default protocol for next enumeration. void tuh_hid_set_default_protocol(uint8_t protocol); // Set protocol to HID_PROTOCOL_BOOT (0) or HID_PROTOCOL_REPORT (1) // This function is only supported by Boot interface (tuh_n_hid_interface_protocol() != NONE) bool tuh_hid_set_protocol(uint8_t dev_addr, uint8_t idx, uint8_t protocol); // Get Report using control endpoint // report_type is either Input, Output or Feature, (value from hid_report_type_t) bool tuh_hid_get_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, void* report, uint16_t len); // Set Report using control endpoint // report_type is either Input, Output or Feature, (value from hid_report_type_t) bool tuh_hid_set_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, void* report, uint16_t len); //--------------------------------------------------------------------+ // Interrupt Endpoint API //--------------------------------------------------------------------+ // Check if HID interface is ready to receive report bool tuh_hid_receive_ready(uint8_t dev_addr, uint8_t idx); // Try to receive next report on Interrupt Endpoint. Immediately return // - true If succeeded, tuh_hid_report_received_cb() callback will be invoked when report is available // - false if failed to queue the transfer e.g endpoint is busy bool tuh_hid_receive_report(uint8_t dev_addr, uint8_t idx); // Abort receiving report on Interrupt Endpoint bool tuh_hid_receive_abort(uint8_t dev_addr, uint8_t idx); // Check if HID interface is ready to send report bool tuh_hid_send_ready(uint8_t dev_addr, uint8_t idx); // Send report using interrupt endpoint // If report_id > 0 (composite), it will be sent as 1st byte, then report contents. Otherwise only report content is sent. bool tuh_hid_send_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, const void* report, uint16_t len); //--------------------------------------------------------------------+ // Callbacks (Weak is optional) //--------------------------------------------------------------------+ // Invoked when device with hid interface is mounted // Report descriptor is also available for use. tuh_hid_parse_report_descriptor() // can be used to parse common/simple enough descriptor. // Note: if report descriptor length > CFG_TUH_ENUMERATION_BUFSIZE, it will be skipped // therefore report_desc = NULL, desc_len = 0 TU_ATTR_WEAK void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t idx, uint8_t const* report_desc, uint16_t desc_len); // Invoked when device with hid interface is un-mounted TU_ATTR_WEAK void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t idx); // Invoked when received report from device via interrupt endpoint // Note: if there is report ID (composite), it is 1st byte of report void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t idx, uint8_t const* report, uint16_t len); // Invoked when sent report to device successfully via interrupt endpoint TU_ATTR_WEAK void tuh_hid_report_sent_cb(uint8_t dev_addr, uint8_t idx, uint8_t const* report, uint16_t len); // Invoked when Get Report to device via either control endpoint // len = 0 indicate there is error in the transfer e.g stalled response TU_ATTR_WEAK void tuh_hid_get_report_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, uint16_t len); // Invoked when Sent Report to device via either control endpoint // len = 0 indicate there is error in the transfer e.g stalled response TU_ATTR_WEAK void tuh_hid_set_report_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, uint16_t len); // Invoked when Set Protocol request is complete TU_ATTR_WEAK void tuh_hid_set_protocol_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t protocol); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ bool hidh_init(void); bool hidh_deinit(void); bool hidh_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const* desc_itf, uint16_t max_len); bool hidh_set_config(uint8_t dev_addr, uint8_t itf_num); bool hidh_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); void hidh_close(uint8_t dev_addr); #ifdef __cplusplus } #endif #endif /* _TUSB_HID_HOST_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/class/msc/msc.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_MSC_H_ #define _TUSB_MSC_H_ #include "common/tusb_common.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // Mass Storage Class Constant //--------------------------------------------------------------------+ /// MassStorage Subclass typedef enum { MSC_SUBCLASS_RBC = 1 , ///< Reduced Block Commands (RBC) T10 Project 1240-D MSC_SUBCLASS_SFF_MMC , ///< SFF-8020i, MMC-2 (ATAPI). Typically used by a CD/DVD device MSC_SUBCLASS_QIC , ///< QIC-157. Typically used by a tape device MSC_SUBCLASS_UFI , ///< UFI. Typically used by Floppy Disk Drive (FDD) device MSC_SUBCLASS_SFF , ///< SFF-8070i. Can be used by Floppy Disk Drive (FDD) device MSC_SUBCLASS_SCSI ///< SCSI transparent command set }msc_subclass_type_t; enum { MSC_CBW_SIGNATURE = 0x43425355, ///< Constant value of 43425355h (little endian) MSC_CSW_SIGNATURE = 0x53425355 ///< Constant value of 53425355h (little endian) }; /// \brief MassStorage Protocol. /// \details CBI only approved to use with full-speed floppy disk & should not used with highspeed or device other than floppy typedef enum { MSC_PROTOCOL_CBI = 0 , ///< Control/Bulk/Interrupt protocol (with command completion interrupt) MSC_PROTOCOL_CBI_NO_INTERRUPT = 1 , ///< Control/Bulk/Interrupt protocol (without command completion interrupt) MSC_PROTOCOL_BOT = 0x50 ///< Bulk-Only Transport }msc_protocol_type_t; /// MassStorage Class-Specific Control Request typedef enum { MSC_REQ_GET_MAX_LUN = 254, ///< The Get Max LUN device request is used to determine the number of logical units supported by the device. Logical Unit Numbers on the device shall be numbered contiguously starting from LUN 0 to a maximum LUN of 15 MSC_REQ_RESET = 255 ///< This request is used to reset the mass storage device and its associated interface. This class-specific request shall ready the device for the next CBW from the host. }msc_request_type_t; /// \brief Command Block Status Values /// \details Indicates the success or failure of the command. The device shall set this byte to zero if the command completed /// successfully. A non-zero value shall indicate a failure during command execution according to the following typedef enum { MSC_CSW_STATUS_PASSED = 0 , ///< MSC_CSW_STATUS_PASSED MSC_CSW_STATUS_FAILED , ///< MSC_CSW_STATUS_FAILED MSC_CSW_STATUS_PHASE_ERROR ///< MSC_CSW_STATUS_PHASE_ERROR }msc_csw_status_t; /// Command Block Wrapper typedef struct TU_ATTR_PACKED { uint32_t signature; ///< Signature that helps identify this data packet as a CBW. The signature field shall contain the value 43425355h (little endian), indicating a CBW. uint32_t tag; ///< Tag sent by the host. The device shall echo the contents of this field back to the host in the dCSWTagfield of the associated CSW. The dCSWTagpositively associates a CSW with the corresponding CBW. uint32_t total_bytes; ///< The number of bytes of data that the host expects to transfer on the Bulk-In or Bulk-Out endpoint (as indicated by the Direction bit) during the execution of this command. If this field is zero, the device and the host shall transfer no data between the CBW and the associated CSW, and the device shall ignore the value of the Direction bit in bmCBWFlags. uint8_t dir; ///< Bit 7 of this field define transfer direction \n - 0 : Data-Out from host to the device. \n - 1 : Data-In from the device to the host. uint8_t lun; ///< The device Logical Unit Number (LUN) to which the command block is being sent. For devices that support multiple LUNs, the host shall place into this field the LUN to which this command block is addressed. Otherwise, the host shall set this field to zero. uint8_t cmd_len; ///< The valid length of the CBWCBin bytes. This defines the valid length of the command block. The only legal values are 1 through 16 uint8_t command[16]; ///< The command block to be executed by the device. The device shall interpret the first cmd_len bytes in this field as a command block }msc_cbw_t; TU_VERIFY_STATIC(sizeof(msc_cbw_t) == 31, "size is not correct"); /// Command Status Wrapper typedef struct TU_ATTR_PACKED { uint32_t signature ; ///< Signature that helps identify this data packet as a CSW. The signature field shall contain the value 53425355h (little endian), indicating CSW. uint32_t tag ; ///< The device shall set this field to the value received in the dCBWTag of the associated CBW. uint32_t data_residue ; ///< For Data-Out the device shall report in the dCSWDataResidue the difference between the amount of data expected as stated in the dCBWDataTransferLength, and the actual amount of data processed by the device. For Data-In the device shall report in the dCSWDataResiduethe difference between the amount of data expected as stated in the dCBWDataTransferLengthand the actual amount of relevant data sent by the device uint8_t status ; ///< indicates the success or failure of the command. Values from \ref msc_csw_status_t }msc_csw_t; TU_VERIFY_STATIC(sizeof(msc_csw_t) == 13, "size is not correct"); //--------------------------------------------------------------------+ // SCSI Constant //--------------------------------------------------------------------+ /// SCSI Command Operation Code typedef enum { SCSI_CMD_TEST_UNIT_READY = 0x00, ///< The SCSI Test Unit Ready command is used to determine if a device is ready to transfer data (read/write), i.e. if a disk has spun up, if a tape is loaded and ready etc. The device does not perform a self-test operation. SCSI_CMD_INQUIRY = 0x12, ///< The SCSI Inquiry command is used to obtain basic information from a target device. SCSI_CMD_MODE_SELECT_6 = 0x15, ///< provides a means for the application client to specify medium, logical unit, or peripheral device parameters to the device server. Device servers that implement the MODE SELECT(6) command shall also implement the MODE SENSE(6) command. Application clients should issue MODE SENSE(6) prior to each MODE SELECT(6) to determine supported mode pages, page lengths, and other parameters. SCSI_CMD_MODE_SENSE_6 = 0x1A, ///< provides a means for a device server to report parameters to an application client. It is a complementary command to the MODE SELECT(6) command. Device servers that implement the MODE SENSE(6) command shall also implement the MODE SELECT(6) command. SCSI_CMD_START_STOP_UNIT = 0x1B, SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL = 0x1E, SCSI_CMD_READ_CAPACITY_10 = 0x25, ///< The SCSI Read Capacity command is used to obtain data capacity information from a target device. SCSI_CMD_REQUEST_SENSE = 0x03, ///< The SCSI Request Sense command is part of the SCSI computer protocol standard. This command is used to obtain sense data -- status/error information -- from a target device. SCSI_CMD_READ_FORMAT_CAPACITY = 0x23, ///< The command allows the Host to request a list of the possible format capacities for an installed writable media. This command also has the capability to report the writable capacity for a media when it is installed SCSI_CMD_READ_10 = 0x28, ///< The READ (10) command requests that the device server read the specified logical block(s) and transfer them to the data-in buffer. SCSI_CMD_WRITE_10 = 0x2A, ///< The WRITE (10) command requests that the device server transfer the specified logical block(s) from the data-out buffer and write them. }scsi_cmd_type_t; /// SCSI Sense Key typedef enum { SCSI_SENSE_NONE = 0x00, ///< no specific Sense Key. This would be the case for a successful command SCSI_SENSE_RECOVERED_ERROR = 0x01, ///< Indicates the last command completed successfully with some recovery action performed by the disc drive. SCSI_SENSE_NOT_READY = 0x02, ///< Indicates the logical unit addressed cannot be accessed. SCSI_SENSE_MEDIUM_ERROR = 0x03, ///< Indicates the command terminated with a non-recovered error condition. SCSI_SENSE_HARDWARE_ERROR = 0x04, ///< Indicates the disc drive detected a nonrecoverable hardware failure while performing the command or during a self test. SCSI_SENSE_ILLEGAL_REQUEST = 0x05, ///< Indicates an illegal parameter in the command descriptor block or in the additional parameters SCSI_SENSE_UNIT_ATTENTION = 0x06, ///< Indicates the disc drive may have been reset. SCSI_SENSE_DATA_PROTECT = 0x07, ///< Indicates that a command that reads or writes the medium was attempted on a block that is protected from this operation. The read or write operation is not performed. SCSI_SENSE_FIRMWARE_ERROR = 0x08, ///< Vendor specific sense key. SCSI_SENSE_ABORTED_COMMAND = 0x0b, ///< Indicates the disc drive aborted the command. SCSI_SENSE_EQUAL = 0x0c, ///< Indicates a SEARCH DATA command has satisfied an equal comparison. SCSI_SENSE_VOLUME_OVERFLOW = 0x0d, ///< Indicates a buffered peripheral device has reached the end of medium partition and data remains in the buffer that has not been written to the medium. SCSI_SENSE_MISCOMPARE = 0x0e ///< Indicates that the source data did not match the data read from the medium. }scsi_sense_key_type_t; //--------------------------------------------------------------------+ // SCSI Primary Command (SPC-4) //--------------------------------------------------------------------+ /// SCSI Test Unit Ready Command typedef struct TU_ATTR_PACKED { uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_TEST_UNIT_READY uint8_t lun ; ///< Logical Unit uint8_t reserved[3] ; uint8_t control ; } scsi_test_unit_ready_t; TU_VERIFY_STATIC(sizeof(scsi_test_unit_ready_t) == 6, "size is not correct"); /// SCSI Inquiry Command typedef struct TU_ATTR_PACKED { uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_INQUIRY uint8_t reserved1 ; uint8_t page_code ; uint8_t reserved2 ; uint8_t alloc_length ; ///< specifies the maximum number of bytes that USB host has allocated in the Data-In Buffer. An allocation length of zero specifies that no data shall be transferred. uint8_t control ; } scsi_inquiry_t, scsi_request_sense_t; TU_VERIFY_STATIC(sizeof(scsi_inquiry_t) == 6, "size is not correct"); /// SCSI Inquiry Response Data typedef struct TU_ATTR_PACKED { uint8_t peripheral_device_type : 5; uint8_t peripheral_qualifier : 3; uint8_t : 7; uint8_t is_removable : 1; uint8_t version; uint8_t response_data_format : 4; uint8_t hierarchical_support : 1; uint8_t normal_aca : 1; uint8_t : 2; uint8_t additional_length; uint8_t protect : 1; uint8_t : 2; uint8_t third_party_copy : 1; uint8_t target_port_group_support : 2; uint8_t access_control_coordinator : 1; uint8_t scc_support : 1; uint8_t addr16 : 1; uint8_t : 3; uint8_t multi_port : 1; uint8_t : 1; // vendor specific uint8_t enclosure_service : 1; uint8_t : 1; uint8_t : 1; // vendor specific uint8_t cmd_que : 1; uint8_t : 2; uint8_t sync : 1; uint8_t wbus16 : 1; uint8_t : 2; uint8_t vendor_id[8] ; ///< 8 bytes of ASCII data identifying the vendor of the product. uint8_t product_id[16]; ///< 16 bytes of ASCII data defined by the vendor. uint8_t product_rev[4]; ///< 4 bytes of ASCII data defined by the vendor. } scsi_inquiry_resp_t; TU_VERIFY_STATIC(sizeof(scsi_inquiry_resp_t) == 36, "size is not correct"); typedef struct TU_ATTR_PACKED { uint8_t response_code : 7; ///< 70h - current errors, Fixed Format 71h - deferred errors, Fixed Format uint8_t valid : 1; uint8_t reserved; uint8_t sense_key : 4; uint8_t : 1; uint8_t ili : 1; ///< Incorrect length indicator uint8_t end_of_medium : 1; uint8_t filemark : 1; uint32_t information; uint8_t add_sense_len; uint32_t command_specific_info; uint8_t add_sense_code; uint8_t add_sense_qualifier; uint8_t field_replaceable_unit_code; uint8_t sense_key_specific[3]; ///< sense key specific valid bit is bit 7 of key[0], aka MSB in Big Endian layout } scsi_sense_fixed_resp_t; TU_VERIFY_STATIC(sizeof(scsi_sense_fixed_resp_t) == 18, "size is not correct"); typedef struct TU_ATTR_PACKED { uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_MODE_SENSE_6 uint8_t : 3; uint8_t disable_block_descriptor : 1; uint8_t : 4; uint8_t page_code : 6; uint8_t page_control : 2; uint8_t subpage_code; uint8_t alloc_length; uint8_t control; } scsi_mode_sense6_t; TU_VERIFY_STATIC( sizeof(scsi_mode_sense6_t) == 6, "size is not correct"); // This is only a Mode parameter header(6). typedef struct TU_ATTR_PACKED { uint8_t data_len; uint8_t medium_type; uint8_t reserved : 7; bool write_protected : 1; uint8_t block_descriptor_len; } scsi_mode_sense6_resp_t; TU_VERIFY_STATIC( sizeof(scsi_mode_sense6_resp_t) == 4, "size is not correct"); typedef struct TU_ATTR_PACKED { uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL uint8_t reserved[3]; uint8_t prohibit_removal; uint8_t control; } scsi_prevent_allow_medium_removal_t; TU_VERIFY_STATIC( sizeof(scsi_prevent_allow_medium_removal_t) == 6, "size is not correct"); typedef struct TU_ATTR_PACKED { uint8_t cmd_code; uint8_t immded : 1; uint8_t : 7; uint8_t TU_RESERVED; uint8_t power_condition_mod : 4; uint8_t : 4; uint8_t start : 1; uint8_t load_eject : 1; uint8_t no_flush : 1; uint8_t : 1; uint8_t power_condition : 4; uint8_t control; } scsi_start_stop_unit_t; TU_VERIFY_STATIC( sizeof(scsi_start_stop_unit_t) == 6, "size is not correct"); //--------------------------------------------------------------------+ // SCSI MMC //--------------------------------------------------------------------+ /// SCSI Read Format Capacity: Write Capacity typedef struct TU_ATTR_PACKED { uint8_t cmd_code; uint8_t reserved[6]; uint16_t alloc_length; uint8_t control; } scsi_read_format_capacity_t; TU_VERIFY_STATIC( sizeof(scsi_read_format_capacity_t) == 10, "size is not correct"); typedef struct TU_ATTR_PACKED{ uint8_t reserved[3]; uint8_t list_length; /// must be 8*n, length in bytes of formattable capacity descriptor followed it. uint32_t block_num; /// Number of Logical Blocks uint8_t descriptor_type; // 00: reserved, 01 unformatted media , 10 Formatted media, 11 No media present uint8_t reserved2; uint16_t block_size_u16; } scsi_read_format_capacity_data_t; TU_VERIFY_STATIC( sizeof(scsi_read_format_capacity_data_t) == 12, "size is not correct"); //--------------------------------------------------------------------+ // SCSI Block Command (SBC-3) // NOTE: All data in SCSI command are in Big Endian //--------------------------------------------------------------------+ /// SCSI Read Capacity 10 Command: Read Capacity typedef struct TU_ATTR_PACKED { uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_READ_CAPACITY_10 uint8_t reserved1 ; uint32_t lba ; ///< The first Logical Block Address (LBA) accessed by this command uint16_t reserved2 ; uint8_t partial_medium_indicator ; uint8_t control ; } scsi_read_capacity10_t; TU_VERIFY_STATIC(sizeof(scsi_read_capacity10_t) == 10, "size is not correct"); /// SCSI Read Capacity 10 Response Data typedef struct { uint32_t last_lba ; ///< The last Logical Block Address of the device uint32_t block_size ; ///< Block size in bytes } scsi_read_capacity10_resp_t; TU_VERIFY_STATIC(sizeof(scsi_read_capacity10_resp_t) == 8, "size is not correct"); /// SCSI Read 10 Command typedef struct TU_ATTR_PACKED { uint8_t cmd_code ; ///< SCSI OpCode uint8_t reserved ; // has LUN according to wiki uint32_t lba ; ///< The first Logical Block Address (LBA) accessed by this command uint8_t reserved2 ; uint16_t block_count ; ///< Number of Blocks used by this command uint8_t control ; } scsi_read10_t, scsi_write10_t; TU_VERIFY_STATIC(sizeof(scsi_read10_t) == 10, "size is not correct"); TU_VERIFY_STATIC(sizeof(scsi_write10_t) == 10, "size is not correct"); #ifdef __cplusplus } #endif #endif /* _TUSB_MSC_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/class/msc/msc_device.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if (CFG_TUD_ENABLED && CFG_TUD_MSC) #include "device/dcd.h" // for faking dcd_event_xfer_complete #include "device/usbd.h" #include "device/usbd_pvt.h" #include "msc_device.h" // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_MSC_LOG_LEVEL #define CFG_TUD_MSC_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif #define TU_LOG_DRV(...) TU_LOG(CFG_TUD_MSC_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ enum { MSC_STAGE_CMD = 0, MSC_STAGE_DATA, MSC_STAGE_STATUS, MSC_STAGE_STATUS_SENT, MSC_STAGE_NEED_RESET, }; typedef struct { // TODO optimize alignment CFG_TUSB_MEM_ALIGN msc_cbw_t cbw; CFG_TUSB_MEM_ALIGN msc_csw_t csw; uint8_t itf_num; uint8_t ep_in; uint8_t ep_out; // Bulk Only Transfer (BOT) Protocol uint8_t stage; uint32_t total_len; // byte to be transferred, can be smaller than total_bytes in cbw uint32_t xferred_len; // numbered of bytes transferred so far in the Data Stage // Sense Response Data uint8_t sense_key; uint8_t add_sense_code; uint8_t add_sense_qualifier; }mscd_interface_t; CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static mscd_interface_t _mscd_itf; CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t _mscd_buf[CFG_TUD_MSC_EP_BUFSIZE]; //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t* buffer, uint32_t bufsize); static void proc_read10_cmd(uint8_t rhport, mscd_interface_t* p_msc); static void proc_write10_cmd(uint8_t rhport, mscd_interface_t* p_msc); static void proc_write10_new_data(uint8_t rhport, mscd_interface_t* p_msc, uint32_t xferred_bytes); TU_ATTR_ALWAYS_INLINE static inline bool is_data_in(uint8_t dir) { return tu_bit_test(dir, 7); } static inline bool send_csw(uint8_t rhport, mscd_interface_t* p_msc) { // Data residue is always = host expect - actual transferred p_msc->csw.data_residue = p_msc->cbw.total_bytes - p_msc->xferred_len; p_msc->stage = MSC_STAGE_STATUS_SENT; return usbd_edpt_xfer(rhport, p_msc->ep_in , (uint8_t*) &p_msc->csw, sizeof(msc_csw_t)); } static inline bool prepare_cbw(uint8_t rhport, mscd_interface_t* p_msc) { p_msc->stage = MSC_STAGE_CMD; return usbd_edpt_xfer(rhport, p_msc->ep_out, (uint8_t*) &p_msc->cbw, sizeof(msc_cbw_t)); } static void fail_scsi_op(uint8_t rhport, mscd_interface_t* p_msc, uint8_t status) { msc_cbw_t const * p_cbw = &p_msc->cbw; msc_csw_t * p_csw = &p_msc->csw; p_csw->status = status; p_csw->data_residue = p_msc->cbw.total_bytes - p_msc->xferred_len; p_msc->stage = MSC_STAGE_STATUS; // failed but sense key is not set: default to Illegal Request if ( p_msc->sense_key == 0 ) tud_msc_set_sense(p_cbw->lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); // If there is data stage and not yet complete, stall it if ( p_cbw->total_bytes && p_csw->data_residue ) { if ( is_data_in(p_cbw->dir) ) { usbd_edpt_stall(rhport, p_msc->ep_in); } else { usbd_edpt_stall(rhport, p_msc->ep_out); } } } static inline uint32_t rdwr10_get_lba(uint8_t const command[]) { // use offsetof to avoid pointer to the odd/unaligned address uint32_t const lba = tu_unaligned_read32(command + offsetof(scsi_write10_t, lba)); // lba is in Big Endian return tu_ntohl(lba); } static inline uint16_t rdwr10_get_blockcount(msc_cbw_t const* cbw) { uint16_t const block_count = tu_unaligned_read16(cbw->command + offsetof(scsi_write10_t, block_count)); return tu_ntohs(block_count); } static inline uint16_t rdwr10_get_blocksize(msc_cbw_t const* cbw) { // first extract block count in the command uint16_t const block_count = rdwr10_get_blockcount(cbw); // invalid block count if (block_count == 0) return 0; return (uint16_t) (cbw->total_bytes / block_count); } uint8_t rdwr10_validate_cmd(msc_cbw_t const* cbw) { uint8_t status = MSC_CSW_STATUS_PASSED; uint16_t const block_count = rdwr10_get_blockcount(cbw); if ( cbw->total_bytes == 0 ) { if ( block_count ) { TU_LOG_DRV(" SCSI case 2 (Hn < Di) or case 3 (Hn < Do) \r\n"); status = MSC_CSW_STATUS_PHASE_ERROR; }else { // no data transfer, only exist in complaint test suite } }else { if ( SCSI_CMD_READ_10 == cbw->command[0] && !is_data_in(cbw->dir) ) { TU_LOG_DRV(" SCSI case 10 (Ho <> Di)\r\n"); status = MSC_CSW_STATUS_PHASE_ERROR; } else if ( SCSI_CMD_WRITE_10 == cbw->command[0] && is_data_in(cbw->dir) ) { TU_LOG_DRV(" SCSI case 8 (Hi <> Do)\r\n"); status = MSC_CSW_STATUS_PHASE_ERROR; } else if ( 0 == block_count ) { TU_LOG_DRV(" SCSI case 4 Hi > Dn (READ10) or case 9 Ho > Dn (WRITE10) \r\n"); status = MSC_CSW_STATUS_FAILED; } else if ( cbw->total_bytes / block_count == 0 ) { TU_LOG_DRV(" Computed block size = 0. SCSI case 7 Hi < Di (READ10) or case 13 Ho < Do (WRIT10)\r\n"); status = MSC_CSW_STATUS_PHASE_ERROR; } } return status; } //--------------------------------------------------------------------+ // Debug //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUD_MSC_LOG_LEVEL TU_ATTR_UNUSED tu_static tu_lookup_entry_t const _msc_scsi_cmd_lookup[] = { { .key = SCSI_CMD_TEST_UNIT_READY , .data = "Test Unit Ready" }, { .key = SCSI_CMD_INQUIRY , .data = "Inquiry" }, { .key = SCSI_CMD_MODE_SELECT_6 , .data = "Mode_Select 6" }, { .key = SCSI_CMD_MODE_SENSE_6 , .data = "Mode_Sense 6" }, { .key = SCSI_CMD_START_STOP_UNIT , .data = "Start Stop Unit" }, { .key = SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL , .data = "Prevent/Allow Medium Removal" }, { .key = SCSI_CMD_READ_CAPACITY_10 , .data = "Read Capacity10" }, { .key = SCSI_CMD_REQUEST_SENSE , .data = "Request Sense" }, { .key = SCSI_CMD_READ_FORMAT_CAPACITY , .data = "Read Format Capacity" }, { .key = SCSI_CMD_READ_10 , .data = "Read10" }, { .key = SCSI_CMD_WRITE_10 , .data = "Write10" } }; TU_ATTR_UNUSED tu_static tu_lookup_table_t const _msc_scsi_cmd_table = { .count = TU_ARRAY_SIZE(_msc_scsi_cmd_lookup), .items = _msc_scsi_cmd_lookup }; #endif //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, uint8_t add_sense_qualifier) { (void) lun; _mscd_itf.sense_key = sense_key; _mscd_itf.add_sense_code = add_sense_code; _mscd_itf.add_sense_qualifier = add_sense_qualifier; return true; } static inline void set_sense_medium_not_present(uint8_t lun) { // default sense is NOT READY, MEDIUM NOT PRESENT tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3A, 0x00); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ void mscd_init(void) { tu_memclr(&_mscd_itf, sizeof(mscd_interface_t)); } bool mscd_deinit(void) { // nothing to do return true; } void mscd_reset(uint8_t rhport) { (void) rhport; tu_memclr(&_mscd_itf, sizeof(mscd_interface_t)); } uint16_t mscd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { // only support SCSI's BOT protocol TU_VERIFY(TUSB_CLASS_MSC == itf_desc->bInterfaceClass && MSC_SUBCLASS_SCSI == itf_desc->bInterfaceSubClass && MSC_PROTOCOL_BOT == itf_desc->bInterfaceProtocol, 0); // msc driver length is fixed uint16_t const drv_len = sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t); // Max length must be at least 1 interface + 2 endpoints TU_ASSERT(max_len >= drv_len, 0); mscd_interface_t * p_msc = &_mscd_itf; p_msc->itf_num = itf_desc->bInterfaceNumber; // Open endpoint pair TU_ASSERT( usbd_open_edpt_pair(rhport, tu_desc_next(itf_desc), 2, TUSB_XFER_BULK, &p_msc->ep_out, &p_msc->ep_in), 0 ); // Prepare for Command Block Wrapper TU_ASSERT( prepare_cbw(rhport, p_msc), drv_len); return drv_len; } static void proc_bot_reset(mscd_interface_t* p_msc) { p_msc->stage = MSC_STAGE_CMD; p_msc->total_len = 0; p_msc->xferred_len = 0; p_msc->sense_key = 0; p_msc->add_sense_code = 0; p_msc->add_sense_qualifier = 0; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) bool mscd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { // nothing to do with DATA & ACK stage if (stage != CONTROL_STAGE_SETUP) return true; mscd_interface_t* p_msc = &_mscd_itf; // Clear Endpoint Feature (stall) for recovery if ( TUSB_REQ_TYPE_STANDARD == request->bmRequestType_bit.type && TUSB_REQ_RCPT_ENDPOINT == request->bmRequestType_bit.recipient && TUSB_REQ_CLEAR_FEATURE == request->bRequest && TUSB_REQ_FEATURE_EDPT_HALT == request->wValue ) { uint8_t const ep_addr = tu_u16_low(request->wIndex); if ( p_msc->stage == MSC_STAGE_NEED_RESET ) { // reset recovery is required to recover from this stage // Clear Stall request cannot resolve this -> continue to stall endpoint usbd_edpt_stall(rhport, ep_addr); } else { if ( ep_addr == p_msc->ep_in ) { if ( p_msc->stage == MSC_STAGE_STATUS ) { // resume sending SCSI status if we are in this stage previously before stalled TU_ASSERT( send_csw(rhport, p_msc) ); } } else if ( ep_addr == p_msc->ep_out ) { if ( p_msc->stage == MSC_STAGE_CMD ) { // part of reset recovery (probably due to invalid CBW) -> prepare for new command // Note: skip if already queued previously if ( usbd_edpt_ready(rhport, p_msc->ep_out) ) { TU_ASSERT( prepare_cbw(rhport, p_msc) ); } } } } return true; } // From this point only handle class request only TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); switch ( request->bRequest ) { case MSC_REQ_RESET: TU_LOG_DRV(" MSC BOT Reset\r\n"); TU_VERIFY(request->wValue == 0 && request->wLength == 0); // driver state reset proc_bot_reset(p_msc); tud_control_status(rhport, request); break; case MSC_REQ_GET_MAX_LUN: { TU_LOG_DRV(" MSC Get Max Lun\r\n"); TU_VERIFY(request->wValue == 0 && request->wLength == 1); uint8_t maxlun = 1; if (tud_msc_get_maxlun_cb) maxlun = tud_msc_get_maxlun_cb(); TU_VERIFY(maxlun); // MAX LUN is minus 1 by specs maxlun--; tud_control_xfer(rhport, request, &maxlun, 1); } break; default: return false; // stall unsupported request } return true; } bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) { (void) event; mscd_interface_t* p_msc = &_mscd_itf; msc_cbw_t const * p_cbw = &p_msc->cbw; msc_csw_t * p_csw = &p_msc->csw; switch (p_msc->stage) { case MSC_STAGE_CMD: //------------- new CBW received -------------// // Complete IN while waiting for CMD is usually Status of previous SCSI op, ignore it if(ep_addr != p_msc->ep_out) return true; if ( !(xferred_bytes == sizeof(msc_cbw_t) && p_cbw->signature == MSC_CBW_SIGNATURE) ) { TU_LOG_DRV(" SCSI CBW is not valid\r\n"); // BOT 6.6.1 If CBW is not valid stall both endpoints until reset recovery p_msc->stage = MSC_STAGE_NEED_RESET; // invalid CBW stall both endpoints usbd_edpt_stall(rhport, p_msc->ep_in); usbd_edpt_stall(rhport, p_msc->ep_out); return false; } TU_LOG_DRV(" SCSI Command [Lun%u]: %s\r\n", p_cbw->lun, tu_lookup_find(&_msc_scsi_cmd_table, p_cbw->command[0])); //TU_LOG_MEM(MSC_DEBUG, p_cbw, xferred_bytes, 2); p_csw->signature = MSC_CSW_SIGNATURE; p_csw->tag = p_cbw->tag; p_csw->data_residue = 0; p_csw->status = MSC_CSW_STATUS_PASSED; /*------------- Parse command and prepare DATA -------------*/ p_msc->stage = MSC_STAGE_DATA; p_msc->total_len = p_cbw->total_bytes; p_msc->xferred_len = 0; // Read10 or Write10 if ( (SCSI_CMD_READ_10 == p_cbw->command[0]) || (SCSI_CMD_WRITE_10 == p_cbw->command[0]) ) { uint8_t const status = rdwr10_validate_cmd(p_cbw); if ( status != MSC_CSW_STATUS_PASSED) { fail_scsi_op(rhport, p_msc, status); }else if ( p_cbw->total_bytes ) { if (SCSI_CMD_READ_10 == p_cbw->command[0]) { proc_read10_cmd(rhport, p_msc); }else { proc_write10_cmd(rhport, p_msc); } }else { // no data transfer, only exist in complaint test suite p_msc->stage = MSC_STAGE_STATUS; } } else { // For other SCSI commands // 1. OUT : queue transfer (invoke app callback after done) // 2. IN & Zero: Process if is built-in, else Invoke app callback. Skip DATA if zero length if ( (p_cbw->total_bytes > 0 ) && !is_data_in(p_cbw->dir) ) { if (p_cbw->total_bytes > sizeof(_mscd_buf)) { TU_LOG_DRV(" SCSI reject non READ10/WRITE10 with large data\r\n"); fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); }else { // Didn't check for case 9 (Ho > Dn), which requires examining scsi command first // but it is OK to just receive data then responded with failed status TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_out, _mscd_buf, (uint16_t) p_msc->total_len) ); } }else { // First process if it is a built-in commands int32_t resplen = proc_builtin_scsi(p_cbw->lun, p_cbw->command, _mscd_buf, sizeof(_mscd_buf)); // Invoke user callback if not built-in if ( (resplen < 0) && (p_msc->sense_key == 0) ) { resplen = tud_msc_scsi_cb(p_cbw->lun, p_cbw->command, _mscd_buf, (uint16_t) p_msc->total_len); } if ( resplen < 0 ) { // unsupported command TU_LOG_DRV(" SCSI unsupported or failed command\r\n"); fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); } else if (resplen == 0) { if (p_cbw->total_bytes) { // 6.7 The 13 Cases: case 4 (Hi > Dn) // TU_LOG(MSC_DEBUG, " SCSI case 4 (Hi > Dn): %lu\r\n", p_cbw->total_bytes); fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); }else { // case 1 Hn = Dn: all good p_msc->stage = MSC_STAGE_STATUS; } } else { if ( p_cbw->total_bytes == 0 ) { // 6.7 The 13 Cases: case 2 (Hn < Di) // TU_LOG(MSC_DEBUG, " SCSI case 2 (Hn < Di): %lu\r\n", p_cbw->total_bytes); fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); }else { // cannot return more than host expect p_msc->total_len = tu_min32((uint32_t) resplen, p_cbw->total_bytes); TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_in, _mscd_buf, (uint16_t) p_msc->total_len) ); } } } } break; case MSC_STAGE_DATA: TU_LOG_DRV(" SCSI Data [Lun%u]\r\n", p_cbw->lun); //TU_LOG_MEM(MSC_DEBUG, _mscd_buf, xferred_bytes, 2); if (SCSI_CMD_READ_10 == p_cbw->command[0]) { p_msc->xferred_len += xferred_bytes; if ( p_msc->xferred_len >= p_msc->total_len ) { // Data Stage is complete p_msc->stage = MSC_STAGE_STATUS; }else { proc_read10_cmd(rhport, p_msc); } } else if (SCSI_CMD_WRITE_10 == p_cbw->command[0]) { proc_write10_new_data(rhport, p_msc, xferred_bytes); } else { p_msc->xferred_len += xferred_bytes; // OUT transfer, invoke callback if needed if ( !is_data_in(p_cbw->dir) ) { int32_t cb_result = tud_msc_scsi_cb(p_cbw->lun, p_cbw->command, _mscd_buf, (uint16_t) p_msc->total_len); if ( cb_result < 0 ) { // unsupported command TU_LOG_DRV(" SCSI unsupported command\r\n"); fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); }else { // TODO haven't implement this scenario any further yet } } if ( p_msc->xferred_len >= p_msc->total_len ) { // Data Stage is complete p_msc->stage = MSC_STAGE_STATUS; } else { // This scenario with command that take more than one transfer is already rejected at Command stage TU_BREAKPOINT(); } } break; case MSC_STAGE_STATUS: // processed immediately after this switch, supposedly to be empty break; case MSC_STAGE_STATUS_SENT: // Wait for the Status phase to complete if( (ep_addr == p_msc->ep_in) && (xferred_bytes == sizeof(msc_csw_t)) ) { TU_LOG_DRV(" SCSI Status [Lun%u] = %u\r\n", p_cbw->lun, p_csw->status); // TU_LOG_MEM(MSC_DEBUG, p_csw, xferred_bytes, 2); // Invoke complete callback if defined // Note: There is racing issue with samd51 + qspi flash testing with arduino // if complete_cb() is invoked after queuing the status. switch(p_cbw->command[0]) { case SCSI_CMD_READ_10: if ( tud_msc_read10_complete_cb ) tud_msc_read10_complete_cb(p_cbw->lun); break; case SCSI_CMD_WRITE_10: if ( tud_msc_write10_complete_cb ) tud_msc_write10_complete_cb(p_cbw->lun); break; default: if ( tud_msc_scsi_complete_cb ) tud_msc_scsi_complete_cb(p_cbw->lun, p_cbw->command); break; } TU_ASSERT( prepare_cbw(rhport, p_msc) ); }else { // Any xfer ended here is consider unknown error, ignore it TU_LOG1(" Warning expect SCSI Status but received unknown data\r\n"); } break; default : break; } if ( p_msc->stage == MSC_STAGE_STATUS ) { // skip status if epin is currently stalled, will do it when received Clear Stall request if ( !usbd_edpt_stalled(rhport, p_msc->ep_in) ) { if ( (p_cbw->total_bytes > p_msc->xferred_len) && is_data_in(p_cbw->dir) ) { // 6.7 The 13 Cases: case 5 (Hi > Di): STALL before status // TU_LOG(MSC_DEBUG, " SCSI case 5 (Hi > Di): %lu > %lu\r\n", p_cbw->total_bytes, p_msc->xferred_len); usbd_edpt_stall(rhport, p_msc->ep_in); }else { TU_ASSERT( send_csw(rhport, p_msc) ); } } #if TU_CHECK_MCU(OPT_MCU_CXD56) // WORKAROUND: cxd56 has its own nuttx usb stack which does not forward Set/ClearFeature(Endpoint) to DCD. // There is no way for us to know when EP is un-stall, therefore we will unconditionally un-stall here and // hope everything will work if ( usbd_edpt_stalled(rhport, p_msc->ep_in) ) { usbd_edpt_clear_stall(rhport, p_msc->ep_in); send_csw(rhport, p_msc); } #endif } return true; } /*------------------------------------------------------------------*/ /* SCSI Command Process *------------------------------------------------------------------*/ // return response's length (copied to buffer). Negative if it is not an built-in command or indicate Failed status (CSW) // In case of a failed status, sense key must be set for reason of failure static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t* buffer, uint32_t bufsize) { (void) bufsize; // TODO refractor later int32_t resplen; mscd_interface_t* p_msc = &_mscd_itf; switch ( scsi_cmd[0] ) { case SCSI_CMD_TEST_UNIT_READY: resplen = 0; if ( !tud_msc_test_unit_ready_cb(lun) ) { // Failed status response resplen = - 1; // set default sense if not set by callback if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); } break; case SCSI_CMD_START_STOP_UNIT: resplen = 0; if (tud_msc_start_stop_cb) { scsi_start_stop_unit_t const * start_stop = (scsi_start_stop_unit_t const *) scsi_cmd; if ( !tud_msc_start_stop_cb(lun, start_stop->power_condition, start_stop->start, start_stop->load_eject) ) { // Failed status response resplen = - 1; // set default sense if not set by callback if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); } } break; case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: resplen = 0; if (tud_msc_prevent_allow_medium_removal_cb) { scsi_prevent_allow_medium_removal_t const * prevent_allow = (scsi_prevent_allow_medium_removal_t const *) scsi_cmd; if ( !tud_msc_prevent_allow_medium_removal_cb(lun, prevent_allow->prohibit_removal, prevent_allow->control) ) { // Failed status response resplen = - 1; // set default sense if not set by callback if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); } } break; case SCSI_CMD_READ_CAPACITY_10: { uint32_t block_count; uint32_t block_size; uint16_t block_size_u16; tud_msc_capacity_cb(lun, &block_count, &block_size_u16); block_size = (uint32_t) block_size_u16; // Invalid block size/count from callback, possibly unit is not ready // stall this request, set sense key to NOT READY if (block_count == 0 || block_size == 0) { resplen = -1; // set default sense if not set by callback if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); }else { scsi_read_capacity10_resp_t read_capa10; read_capa10.last_lba = tu_htonl(block_count-1); read_capa10.block_size = tu_htonl(block_size); resplen = sizeof(read_capa10); TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &read_capa10, (size_t) resplen)); } } break; case SCSI_CMD_READ_FORMAT_CAPACITY: { scsi_read_format_capacity_data_t read_fmt_capa = { .list_length = 8, .block_num = 0, .descriptor_type = 2, // formatted media .block_size_u16 = 0 }; uint32_t block_count; uint16_t block_size; tud_msc_capacity_cb(lun, &block_count, &block_size); // Invalid block size/count from callback, possibly unit is not ready // stall this request, set sense key to NOT READY if (block_count == 0 || block_size == 0) { resplen = -1; // set default sense if not set by callback if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); }else { read_fmt_capa.block_num = tu_htonl(block_count); read_fmt_capa.block_size_u16 = tu_htons(block_size); resplen = sizeof(read_fmt_capa); TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &read_fmt_capa, (size_t) resplen)); } } break; case SCSI_CMD_INQUIRY: { scsi_inquiry_resp_t inquiry_rsp = { .is_removable = 1, .version = 2, .response_data_format = 2, .additional_length = sizeof(scsi_inquiry_resp_t) - 5, }; // vendor_id, product_id, product_rev is space padded string memset(inquiry_rsp.vendor_id , ' ', sizeof(inquiry_rsp.vendor_id)); memset(inquiry_rsp.product_id , ' ', sizeof(inquiry_rsp.product_id)); memset(inquiry_rsp.product_rev, ' ', sizeof(inquiry_rsp.product_rev)); tud_msc_inquiry_cb(lun, inquiry_rsp.vendor_id, inquiry_rsp.product_id, inquiry_rsp.product_rev); resplen = sizeof(inquiry_rsp); TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &inquiry_rsp, (size_t) resplen)); } break; case SCSI_CMD_MODE_SENSE_6: { scsi_mode_sense6_resp_t mode_resp = { .data_len = 3, .medium_type = 0, .write_protected = false, .reserved = 0, .block_descriptor_len = 0 // no block descriptor are included }; bool writable = true; if ( tud_msc_is_writable_cb ) { writable = tud_msc_is_writable_cb(lun); } mode_resp.write_protected = !writable; resplen = sizeof(mode_resp); TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &mode_resp, (size_t) resplen)); } break; case SCSI_CMD_REQUEST_SENSE: { scsi_sense_fixed_resp_t sense_rsp = { .response_code = 0x70, // current, fixed format .valid = 1 }; sense_rsp.add_sense_len = sizeof(scsi_sense_fixed_resp_t) - 8; sense_rsp.sense_key = (uint8_t) (p_msc->sense_key & 0x0F); sense_rsp.add_sense_code = p_msc->add_sense_code; sense_rsp.add_sense_qualifier = p_msc->add_sense_qualifier; resplen = sizeof(sense_rsp); TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &sense_rsp, (size_t) resplen)); // request sense callback could overwrite the sense data if (tud_msc_request_sense_cb) { resplen = tud_msc_request_sense_cb(lun, buffer, (uint16_t) bufsize); } // Clear sense data after copy tud_msc_set_sense(lun, 0, 0, 0); } break; default: resplen = -1; break; } return resplen; } static void proc_read10_cmd(uint8_t rhport, mscd_interface_t* p_msc) { msc_cbw_t const * p_cbw = &p_msc->cbw; // block size already verified not zero uint16_t const block_sz = rdwr10_get_blocksize(p_cbw); // Adjust lba with transferred bytes uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz); // remaining bytes capped at class buffer int32_t nbytes = (int32_t) tu_min32(sizeof(_mscd_buf), p_cbw->total_bytes-p_msc->xferred_len); // Application can consume smaller bytes uint32_t const offset = p_msc->xferred_len % block_sz; nbytes = tud_msc_read10_cb(p_cbw->lun, lba, offset, _mscd_buf, (uint32_t) nbytes); if ( nbytes < 0 ) { // negative means error -> endpoint is stalled & status in CSW set to failed TU_LOG_DRV(" tud_msc_read10_cb() return -1\r\n"); // set sense set_sense_medium_not_present(p_cbw->lun); fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); } else if ( nbytes == 0 ) { // zero means not ready -> simulate an transfer complete so that this driver callback will fired again dcd_event_xfer_complete(rhport, p_msc->ep_in, 0, XFER_RESULT_SUCCESS, false); } else { TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_in, _mscd_buf, (uint16_t) nbytes), ); } } static void proc_write10_cmd(uint8_t rhport, mscd_interface_t* p_msc) { msc_cbw_t const * p_cbw = &p_msc->cbw; bool writable = true; if ( tud_msc_is_writable_cb ) { writable = tud_msc_is_writable_cb(p_cbw->lun); } if ( !writable ) { // Not writable, complete this SCSI op with error // Sense = Write protected tud_msc_set_sense(p_cbw->lun, SCSI_SENSE_DATA_PROTECT, 0x27, 0x00); fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); return; } // remaining bytes capped at class buffer uint16_t nbytes = (uint16_t) tu_min32(sizeof(_mscd_buf), p_cbw->total_bytes-p_msc->xferred_len); // Write10 callback will be called later when usb transfer complete TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_out, _mscd_buf, nbytes), ); } // process new data arrived from WRITE10 static void proc_write10_new_data(uint8_t rhport, mscd_interface_t* p_msc, uint32_t xferred_bytes) { msc_cbw_t const * p_cbw = &p_msc->cbw; // block size already verified not zero uint16_t const block_sz = rdwr10_get_blocksize(p_cbw); // Adjust lba with transferred bytes uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz); // Invoke callback to consume new data uint32_t const offset = p_msc->xferred_len % block_sz; int32_t nbytes = tud_msc_write10_cb(p_cbw->lun, lba, offset, _mscd_buf, xferred_bytes); if ( nbytes < 0 ) { // negative means error -> failed this scsi op TU_LOG_DRV(" tud_msc_write10_cb() return -1\r\n"); // update actual byte before failed p_msc->xferred_len += xferred_bytes; // Set sense set_sense_medium_not_present(p_cbw->lun); fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); }else { // Application consume less than what we got (including zero) if ( (uint32_t) nbytes < xferred_bytes ) { uint32_t const left_over = xferred_bytes - (uint32_t) nbytes; if ( nbytes > 0 ) { p_msc->xferred_len += (uint16_t) nbytes; memmove(_mscd_buf, _mscd_buf+nbytes, left_over); } // simulate an transfer complete with adjusted parameters --> callback will be invoked with adjusted parameter dcd_event_xfer_complete(rhport, p_msc->ep_out, left_over, XFER_RESULT_SUCCESS, false); } else { // Application consume all bytes in our buffer p_msc->xferred_len += xferred_bytes; if ( p_msc->xferred_len >= p_msc->total_len ) { // Data Stage is complete p_msc->stage = MSC_STAGE_STATUS; }else { // prepare to receive more data from host proc_write10_cmd(rhport, p_msc); } } } } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/class/msc/msc_device.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_MSC_DEVICE_H_ #define _TUSB_MSC_DEVICE_H_ #include "common/tusb_common.h" #include "msc.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // Class Driver Configuration //--------------------------------------------------------------------+ #if !defined(CFG_TUD_MSC_EP_BUFSIZE) & defined(CFG_TUD_MSC_BUFSIZE) // TODO warn user to use new name later on // #warning CFG_TUD_MSC_BUFSIZE is renamed to CFG_TUD_MSC_EP_BUFSIZE, please update to use the new name #define CFG_TUD_MSC_EP_BUFSIZE CFG_TUD_MSC_BUFSIZE #endif #ifndef CFG_TUD_MSC_EP_BUFSIZE #error CFG_TUD_MSC_EP_BUFSIZE must be defined, value of a block size should work well, the more the better #endif TU_VERIFY_STATIC(CFG_TUD_MSC_EP_BUFSIZE < UINT16_MAX, "Size is not correct"); //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ // Set SCSI sense response bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, uint8_t add_sense_qualifier); //--------------------------------------------------------------------+ // Application Callbacks (WEAK is optional) //--------------------------------------------------------------------+ // Invoked when received SCSI READ10 command // - Address = lba * BLOCK_SIZE + offset // - offset is only needed if CFG_TUD_MSC_EP_BUFSIZE is smaller than BLOCK_SIZE. // // - Application fill the buffer (up to bufsize) with address contents and return number of read byte. If // - read < bufsize : These bytes are transferred first and callback invoked again for remaining data. // // - read == 0 : Indicate application is not ready yet e.g disk I/O busy. // Callback invoked again with the same parameters later on. // // - read < 0 : Indicate application error e.g invalid address. This request will be STALLed // and return failed status in command status wrapper phase. int32_t tud_msc_read10_cb (uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize); // Invoked when received SCSI WRITE10 command // - Address = lba * BLOCK_SIZE + offset // - offset is only needed if CFG_TUD_MSC_EP_BUFSIZE is smaller than BLOCK_SIZE. // // - Application write data from buffer to address contents (up to bufsize) and return number of written byte. If // - write < bufsize : callback invoked again with remaining data later on. // // - write == 0 : Indicate application is not ready yet e.g disk I/O busy. // Callback invoked again with the same parameters later on. // // - write < 0 : Indicate application error e.g invalid address. This request will be STALLed // and return failed status in command status wrapper phase. // // TODO change buffer to const uint8_t* int32_t tud_msc_write10_cb (uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize); // Invoked when received SCSI_CMD_INQUIRY // Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]); // Invoked when received Test Unit Ready command. // return true allowing host to read/write this LUN e.g SD card inserted bool tud_msc_test_unit_ready_cb(uint8_t lun); // Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size // Application update block count and block size void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size); /** * Invoked when received an SCSI command not in built-in list below. * - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, TEST_UNIT_READY, START_STOP_UNIT, MODE_SENSE6, REQUEST_SENSE * - READ10 and WRITE10 has their own callbacks * * \param[in] lun Logical unit number * \param[in] scsi_cmd SCSI command contents which application must examine to response accordingly * \param[out] buffer Buffer for SCSI Data Stage. * - For INPUT: application must fill this with response. * - For OUTPUT it holds the Data from host * \param[in] bufsize Buffer's length. * * \return Actual bytes processed, can be zero for no-data command. * \retval negative Indicate error e.g unsupported command, tinyusb will \b STALL the corresponding * endpoint and return failed status in command status wrapper phase. */ int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize); /*------------- Optional callbacks -------------*/ // Invoked when received GET_MAX_LUN request, required for multiple LUNs implementation TU_ATTR_WEAK uint8_t tud_msc_get_maxlun_cb(void); // Invoked when received Start Stop Unit command // - Start = 0 : stopped power mode, if load_eject = 1 : unload disk storage // - Start = 1 : active mode, if load_eject = 1 : load disk storage TU_ATTR_WEAK bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject); //Invoked when we receive the Prevent / Allow Medium Removal command TU_ATTR_WEAK bool tud_msc_prevent_allow_medium_removal_cb(uint8_t lun, uint8_t prohibit_removal, uint8_t control); // Invoked when received REQUEST_SENSE TU_ATTR_WEAK int32_t tud_msc_request_sense_cb(uint8_t lun, void* buffer, uint16_t bufsize); // Invoked when Read10 command is complete TU_ATTR_WEAK void tud_msc_read10_complete_cb(uint8_t lun); // Invoke when Write10 command is complete, can be used to flush flash caching TU_ATTR_WEAK void tud_msc_write10_complete_cb(uint8_t lun); // Invoked when command in tud_msc_scsi_cb is complete TU_ATTR_WEAK void tud_msc_scsi_complete_cb(uint8_t lun, uint8_t const scsi_cmd[16]); // Invoked to check if device is writable as part of SCSI WRITE10 TU_ATTR_WEAK bool tud_msc_is_writable_cb(uint8_t lun); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ void mscd_init (void); bool mscd_deinit (void); void mscd_reset (uint8_t rhport); uint16_t mscd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); bool mscd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * p_request); bool mscd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); #ifdef __cplusplus } #endif #endif /* _TUSB_MSC_DEVICE_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/common/tusb_common.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_COMMON_H_ #define _TUSB_COMMON_H_ #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // Macros Helper //--------------------------------------------------------------------+ #define TU_ARRAY_SIZE(_arr) ( sizeof(_arr) / sizeof(_arr[0]) ) #define TU_MIN(_x, _y) ( ( (_x) < (_y) ) ? (_x) : (_y) ) #define TU_MAX(_x, _y) ( ( (_x) > (_y) ) ? (_x) : (_y) ) #define TU_DIV_CEIL(n, d) (((n) + (d) - 1) / (d)) #define TU_U16(_high, _low) ((uint16_t) (((_high) << 8) | (_low))) #define TU_U16_HIGH(_u16) ((uint8_t) (((_u16) >> 8) & 0x00ff)) #define TU_U16_LOW(_u16) ((uint8_t) ((_u16) & 0x00ff)) #define U16_TO_U8S_BE(_u16) TU_U16_HIGH(_u16), TU_U16_LOW(_u16) #define U16_TO_U8S_LE(_u16) TU_U16_LOW(_u16), TU_U16_HIGH(_u16) #define TU_U32_BYTE3(_u32) ((uint8_t) ((((uint32_t) _u32) >> 24) & 0x000000ff)) // MSB #define TU_U32_BYTE2(_u32) ((uint8_t) ((((uint32_t) _u32) >> 16) & 0x000000ff)) #define TU_U32_BYTE1(_u32) ((uint8_t) ((((uint32_t) _u32) >> 8) & 0x000000ff)) #define TU_U32_BYTE0(_u32) ((uint8_t) (((uint32_t) _u32) & 0x000000ff)) // LSB #define U32_TO_U8S_BE(_u32) TU_U32_BYTE3(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE0(_u32) #define U32_TO_U8S_LE(_u32) TU_U32_BYTE0(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE3(_u32) #define TU_BIT(n) (1UL << (n)) // Generate a mask with bit from high (31) to low (0) set, e.g TU_GENMASK(3, 0) = 0b1111 #define TU_GENMASK(h, l) ( (UINT32_MAX << (l)) & (UINT32_MAX >> (31 - (h))) ) //--------------------------------------------------------------------+ // Includes //--------------------------------------------------------------------+ // Standard Headers #include #include #include #include #include #include // Tinyusb Common Headers #include "tusb_option.h" #include "tusb_compiler.h" #include "tusb_verify.h" #include "tusb_types.h" #include "tusb_debug.h" //--------------------------------------------------------------------+ // Optional API implemented by application if needed // TODO move to a more ovious place/file //--------------------------------------------------------------------+ // flush data cache TU_ATTR_WEAK extern void tusb_app_dcache_flush(uintptr_t addr, uint32_t data_size); // invalidate data cache TU_ATTR_WEAK extern void tusb_app_dcache_invalidate(uintptr_t addr, uint32_t data_size); // Optional physical <-> virtual address translation TU_ATTR_WEAK extern void* tusb_app_virt_to_phys(void *virt_addr); TU_ATTR_WEAK extern void* tusb_app_phys_to_virt(void *phys_addr); //--------------------------------------------------------------------+ // Internal Inline Functions //--------------------------------------------------------------------+ //------------- Mem -------------// #define tu_memclr(buffer, size) memset((buffer), 0, (size)) #define tu_varclr(_var) tu_memclr(_var, sizeof(*(_var))) // This is a backport of memset_s from c11 TU_ATTR_ALWAYS_INLINE static inline int tu_memset_s(void *dest, size_t destsz, int ch, size_t count) { // TODO may check if desst and src is not NULL if ( count > destsz ) { return -1; } memset(dest, ch, count); return 0; } // This is a backport of memcpy_s from c11 TU_ATTR_ALWAYS_INLINE static inline int tu_memcpy_s(void *dest, size_t destsz, const void *src, size_t count) { // TODO may check if desst and src is not NULL if ( count > destsz ) { return -1; } memcpy(dest, src, count); return 0; } //------------- Bytes -------------// TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_u32(uint8_t b3, uint8_t b2, uint8_t b1, uint8_t b0) { return ( ((uint32_t) b3) << 24) | ( ((uint32_t) b2) << 16) | ( ((uint32_t) b1) << 8) | b0; } TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u16(uint8_t high, uint8_t low) { return (uint16_t) ((((uint16_t) high) << 8) | low); } TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte3(uint32_t ui32) { return TU_U32_BYTE3(ui32); } TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte2(uint32_t ui32) { return TU_U32_BYTE2(ui32); } TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte1(uint32_t ui32) { return TU_U32_BYTE1(ui32); } TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte0(uint32_t ui32) { return TU_U32_BYTE0(ui32); } TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u32_high16(uint32_t ui32) { return (uint16_t) (ui32 >> 16); } TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u32_low16 (uint32_t ui32) { return (uint16_t) (ui32 & 0x0000ffffu); } TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u16_high(uint16_t ui16) { return TU_U16_HIGH(ui16); } TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u16_low (uint16_t ui16) { return TU_U16_LOW(ui16); } //------------- Bits -------------// TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_bit_set (uint32_t value, uint8_t pos) { return value | TU_BIT(pos); } TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_bit_clear(uint32_t value, uint8_t pos) { return value & (~TU_BIT(pos)); } TU_ATTR_ALWAYS_INLINE static inline bool tu_bit_test (uint32_t value, uint8_t pos) { return (value & TU_BIT(pos)) ? true : false; } //------------- Min -------------// TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_min8 (uint8_t x, uint8_t y ) { return (x < y) ? x : y; } TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_min16 (uint16_t x, uint16_t y) { return (x < y) ? x : y; } TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_min32 (uint32_t x, uint32_t y) { return (x < y) ? x : y; } //------------- Max -------------// TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_max8 (uint8_t x, uint8_t y ) { return (x > y) ? x : y; } TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_max16 (uint16_t x, uint16_t y) { return (x > y) ? x : y; } TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_max32 (uint32_t x, uint32_t y) { return (x > y) ? x : y; } //------------- Align -------------// TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align(uint32_t value, uint32_t alignment) { return value & ((uint32_t) ~(alignment-1)); } TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align4 (uint32_t value) { return (value & 0xFFFFFFFCUL); } TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align8 (uint32_t value) { return (value & 0xFFFFFFF8UL); } TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align16 (uint32_t value) { return (value & 0xFFFFFFF0UL); } TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align32 (uint32_t value) { return (value & 0xFFFFFFE0UL); } TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align4k (uint32_t value) { return (value & 0xFFFFF000UL); } TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_offset4k(uint32_t value) { return (value & 0xFFFUL); } TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned32(uint32_t value) { return (value & 0x1FUL) == 0; } TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned64(uint64_t value) { return (value & 0x3FUL) == 0; } //------------- Mathematics -------------// TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_div_ceil(uint32_t v, uint32_t d) { return (v + d -1)/d; } // log2 of a value is its MSB's position // TODO use clz TODO remove static inline uint8_t tu_log2(uint32_t value) { uint8_t result = 0; while (value >>= 1) { result++; } return result; } //static inline uint8_t tu_log2(uint32_t value) //{ // return sizeof(uint32_t) * CHAR_BIT - __builtin_clz(x) - 1; //} static inline bool tu_is_power_of_two(uint32_t value) { return (value != 0) && ((value & (value - 1)) == 0); } //------------- Unaligned Access -------------// #if TUP_ARCH_STRICT_ALIGN // Rely on compiler to generate correct code for unaligned access typedef struct { uint16_t val; } TU_ATTR_PACKED tu_unaligned_uint16_t; typedef struct { uint32_t val; } TU_ATTR_PACKED tu_unaligned_uint32_t; TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void* mem) { tu_unaligned_uint32_t const* ua32 = (tu_unaligned_uint32_t const*) mem; return ua32->val; } TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void* mem, uint32_t value) { tu_unaligned_uint32_t* ua32 = (tu_unaligned_uint32_t*) mem; ua32->val = value; } TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void* mem) { tu_unaligned_uint16_t const* ua16 = (tu_unaligned_uint16_t const*) mem; return ua16->val; } TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void* mem, uint16_t value) { tu_unaligned_uint16_t* ua16 = (tu_unaligned_uint16_t*) mem; ua16->val = value; } #elif TUP_MCU_STRICT_ALIGN // MCU such as LPC_IP3511 Highspeed cannot access unaligned memory on USB_RAM although it is ARM M4. // We have to manually pick up bytes since tu_unaligned_uint32_t will still generate unaligned code // NOTE: volatile cast to memory to prevent compiler to optimize and generate unaligned code // TODO Big Endian may need minor changes TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void* mem) { volatile uint8_t const* buf8 = (uint8_t const*) mem; return tu_u32(buf8[3], buf8[2], buf8[1], buf8[0]); } TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void* mem, uint32_t value) { volatile uint8_t* buf8 = (uint8_t*) mem; buf8[0] = tu_u32_byte0(value); buf8[1] = tu_u32_byte1(value); buf8[2] = tu_u32_byte2(value); buf8[3] = tu_u32_byte3(value); } TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void* mem) { volatile uint8_t const* buf8 = (uint8_t const*) mem; return tu_u16(buf8[1], buf8[0]); } TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void* mem, uint16_t value) { volatile uint8_t* buf8 = (uint8_t*) mem; buf8[0] = tu_u16_low(value); buf8[1] = tu_u16_high(value); } #else // MCU that could access unaligned memory natively TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void *mem) { return *((uint32_t const *) mem); } TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void *mem) { return *((uint16_t const *) mem); } TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void *mem, uint32_t value) { *((uint32_t *) mem) = value; } TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_t value) { *((uint16_t *) mem) = value; } #endif // To be removed //------------- Binary constant -------------// #if defined(__GNUC__) && !defined(__CC_ARM) #define TU_BIN8(x) ((uint8_t) (0b##x)) #define TU_BIN16(b1, b2) ((uint16_t) (0b##b1##b2)) #define TU_BIN32(b1, b2, b3, b4) ((uint32_t) (0b##b1##b2##b3##b4)) #else // internal macro of B8, B16, B32 #define _B8__(x) (((x&0x0000000FUL)?1:0) \ +((x&0x000000F0UL)?2:0) \ +((x&0x00000F00UL)?4:0) \ +((x&0x0000F000UL)?8:0) \ +((x&0x000F0000UL)?16:0) \ +((x&0x00F00000UL)?32:0) \ +((x&0x0F000000UL)?64:0) \ +((x&0xF0000000UL)?128:0)) #define TU_BIN8(d) ((uint8_t) _B8__(0x##d##UL)) #define TU_BIN16(dmsb,dlsb) (((uint16_t)TU_BIN8(dmsb)<<8) + TU_BIN8(dlsb)) #define TU_BIN32(dmsb,db2,db3,dlsb) \ (((uint32_t)TU_BIN8(dmsb)<<24) \ + ((uint32_t)TU_BIN8(db2)<<16) \ + ((uint32_t)TU_BIN8(db3)<<8) \ + TU_BIN8(dlsb)) #endif #ifdef __cplusplus } #endif #endif /* _TUSB_COMMON_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/common/tusb_compiler.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ /** \ingroup Group_Common * \defgroup Group_Compiler Compiler * \brief Group_Compiler brief * @{ */ #ifndef _TUSB_COMPILER_H_ #define _TUSB_COMPILER_H_ #define TU_TOKEN(x) x #define TU_STRING(x) #x ///< stringify without expand #define TU_XSTRING(x) TU_STRING(x) ///< expand then stringify #define TU_STRCAT(a, b) a##b ///< concat without expand #define TU_STRCAT3(a, b, c) a##b##c ///< concat without expand #define TU_XSTRCAT(a, b) TU_STRCAT(a, b) ///< expand then concat #define TU_XSTRCAT3(a, b, c) TU_STRCAT3(a, b, c) ///< expand then concat 3 tokens #define TU_INCLUDE_PATH(_dir,_file) TU_XSTRING( TU_TOKEN(_dir)TU_TOKEN(_file) ) #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ #define _TU_COUNTER_ __COUNTER__ #else #define _TU_COUNTER_ __LINE__ #endif // Compile-time Assert #if defined (__cplusplus) && __cplusplus >= 201103L #define TU_VERIFY_STATIC static_assert #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L #define TU_VERIFY_STATIC _Static_assert #elif defined(__CCRX__) #define TU_VERIFY_STATIC(const_expr, _mess) typedef char TU_XSTRCAT(_verify_static_, _TU_COUNTER_)[(const_expr) ? 1 : 0]; #else #define TU_VERIFY_STATIC(const_expr, _mess) enum { TU_XSTRCAT(_verify_static_, _TU_COUNTER_) = 1/(!!(const_expr)) } #endif /* --------------------- Fuzzing types -------------------------------------- */ #ifdef _FUZZ #define tu_static static __thread #else #define tu_static static #endif // for declaration of reserved field, make use of _TU_COUNTER_ #define TU_RESERVED TU_XSTRCAT(reserved, _TU_COUNTER_) #define TU_LITTLE_ENDIAN (0x12u) #define TU_BIG_ENDIAN (0x21u) /*------------------------------------------------------------------*/ /* Count number of arguments of __VA_ARGS__ * - reference https://stackoverflow.com/questions/2124339/c-preprocessor-va-args-number-of-arguments * - _GET_NTH_ARG() takes args >= N (64) but only expand to Nth one (64th) * - _RSEQ_N() is reverse sequential to N to add padding to have * Nth position is the same as the number of arguments * - ##__VA_ARGS__ is used to deal with 0 paramerter (swallows comma) *------------------------------------------------------------------*/ #if !defined(__CCRX__) #define TU_ARGS_NUM(...) _TU_NARG(_0, ##__VA_ARGS__, _RSEQ_N()) #else #define TU_ARGS_NUM(...) _TU_NARG(_0, __VA_ARGS__, _RSEQ_N()) #endif #define _TU_NARG(...) _GET_NTH_ARG(__VA_ARGS__) #define _GET_NTH_ARG( \ _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ _61,_62,_63,N,...) N #define _RSEQ_N() \ 62,61,60, \ 59,58,57,56,55,54,53,52,51,50, \ 49,48,47,46,45,44,43,42,41,40, \ 39,38,37,36,35,34,33,32,31,30, \ 29,28,27,26,25,24,23,22,21,20, \ 19,18,17,16,15,14,13,12,11,10, \ 9,8,7,6,5,4,3,2,1,0 // Apply an macro X to each of the arguments with an separated of choice #define TU_ARGS_APPLY(_X, _s, ...) TU_XSTRCAT(_TU_ARGS_APPLY_, TU_ARGS_NUM(__VA_ARGS__))(_X, _s, __VA_ARGS__) #define _TU_ARGS_APPLY_1(_X, _s, _a1) _X(_a1) #define _TU_ARGS_APPLY_2(_X, _s, _a1, _a2) _X(_a1) _s _X(_a2) #define _TU_ARGS_APPLY_3(_X, _s, _a1, _a2, _a3) _X(_a1) _s _TU_ARGS_APPLY_2(_X, _s, _a2, _a3) #define _TU_ARGS_APPLY_4(_X, _s, _a1, _a2, _a3, _a4) _X(_a1) _s _TU_ARGS_APPLY_3(_X, _s, _a2, _a3, _a4) #define _TU_ARGS_APPLY_5(_X, _s, _a1, _a2, _a3, _a4, _a5) _X(_a1) _s _TU_ARGS_APPLY_4(_X, _s, _a2, _a3, _a4, _a5) #define _TU_ARGS_APPLY_6(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6) _X(_a1) _s _TU_ARGS_APPLY_5(_X, _s, _a2, _a3, _a4, _a5, _a6) #define _TU_ARGS_APPLY_7(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7) _X(_a1) _s _TU_ARGS_APPLY_6(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7) #define _TU_ARGS_APPLY_8(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7, _a8) _X(_a1) _s _TU_ARGS_APPLY_7(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7, _a8) //--------------------------------------------------------------------+ // Compiler porting with Attribute and Endian //--------------------------------------------------------------------+ // TODO refactor since __attribute__ is supported across many compiler #if defined(__GNUC__) #define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes))) #define TU_ATTR_SECTION(sec_name) __attribute__ ((section(#sec_name))) #define TU_ATTR_PACKED __attribute__ ((packed)) #define TU_ATTR_WEAK __attribute__ ((weak)) #ifndef TU_ATTR_ALWAYS_INLINE // allow to override for debug #define TU_ATTR_ALWAYS_INLINE __attribute__ ((always_inline)) #endif #define TU_ATTR_DEPRECATED(mess) __attribute__ ((deprecated(mess))) // warn if function with this attribute is used #define TU_ATTR_UNUSED __attribute__ ((unused)) // Function/Variable is meant to be possibly unused #define TU_ATTR_USED __attribute__ ((used)) // Function/Variable is meant to be used #define TU_ATTR_PACKED_BEGIN #define TU_ATTR_PACKED_END #define TU_ATTR_BIT_FIELD_ORDER_BEGIN #define TU_ATTR_BIT_FIELD_ORDER_END #if __GNUC__ < 5 #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ #else #if __has_attribute(__fallthrough__) #define TU_ATTR_FALLTHROUGH __attribute__((fallthrough)) #else #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ #endif #endif // Endian conversion use well-known host to network (big endian) naming #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ #define TU_BYTE_ORDER TU_LITTLE_ENDIAN #else #define TU_BYTE_ORDER TU_BIG_ENDIAN #endif // Unfortunately XC16 doesn't provide builtins for 32bit endian conversion #if defined(__XC16) #define TU_BSWAP16(u16) (__builtin_swap(u16)) #define TU_BSWAP32(u32) ((((u32) & 0xff000000) >> 24) | \ (((u32) & 0x00ff0000) >> 8) | \ (((u32) & 0x0000ff00) << 8) | \ (((u32) & 0x000000ff) << 24)) #else #define TU_BSWAP16(u16) (__builtin_bswap16(u16)) #define TU_BSWAP32(u32) (__builtin_bswap32(u32)) #endif #ifndef __ARMCC_VERSION // List of obsolete callback function that is renamed and should not be defined. // Put it here since only gcc support this pragma #pragma GCC poison tud_vendor_control_request_cb #endif #elif defined(__TI_COMPILER_VERSION__) #define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes))) #define TU_ATTR_SECTION(sec_name) __attribute__ ((section(#sec_name))) #define TU_ATTR_PACKED __attribute__ ((packed)) #define TU_ATTR_WEAK __attribute__ ((weak)) #define TU_ATTR_ALWAYS_INLINE __attribute__ ((always_inline)) #define TU_ATTR_DEPRECATED(mess) __attribute__ ((deprecated(mess))) // warn if function with this attribute is used #define TU_ATTR_UNUSED __attribute__ ((unused)) // Function/Variable is meant to be possibly unused #define TU_ATTR_USED __attribute__ ((used)) #define TU_ATTR_FALLTHROUGH __attribute__((fallthrough)) #define TU_ATTR_PACKED_BEGIN #define TU_ATTR_PACKED_END #define TU_ATTR_BIT_FIELD_ORDER_BEGIN #define TU_ATTR_BIT_FIELD_ORDER_END // __BYTE_ORDER is defined in the TI ARM compiler, but not MSP430 (which is little endian) #if ((__BYTE_ORDER__) == (__ORDER_LITTLE_ENDIAN__)) || defined(__MSP430__) #define TU_BYTE_ORDER TU_LITTLE_ENDIAN #else #define TU_BYTE_ORDER TU_BIG_ENDIAN #endif #define TU_BSWAP16(u16) (__builtin_bswap16(u16)) #define TU_BSWAP32(u32) (__builtin_bswap32(u32)) #elif defined(__ICCARM__) #include #define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes))) #define TU_ATTR_SECTION(sec_name) __attribute__ ((section(#sec_name))) #define TU_ATTR_PACKED __attribute__ ((packed)) #define TU_ATTR_WEAK __attribute__ ((weak)) #ifndef TU_ATTR_ALWAYS_INLINE // allow to override for debug #define TU_ATTR_ALWAYS_INLINE __attribute__ ((always_inline)) #endif #define TU_ATTR_DEPRECATED(mess) __attribute__ ((deprecated(mess))) // warn if function with this attribute is used #define TU_ATTR_UNUSED __attribute__ ((unused)) // Function/Variable is meant to be possibly unused #define TU_ATTR_USED __attribute__ ((used)) // Function/Variable is meant to be used #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ #define TU_ATTR_PACKED_BEGIN #define TU_ATTR_PACKED_END #define TU_ATTR_BIT_FIELD_ORDER_BEGIN #define TU_ATTR_BIT_FIELD_ORDER_END // Endian conversion use well-known host to network (big endian) naming #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ #define TU_BYTE_ORDER TU_LITTLE_ENDIAN #else #define TU_BYTE_ORDER TU_BIG_ENDIAN #endif #define TU_BSWAP16(u16) (__iar_builtin_REV16(u16)) #define TU_BSWAP32(u32) (__iar_builtin_REV(u32)) #elif defined(__CCRX__) #define TU_ATTR_ALIGNED(Bytes) #define TU_ATTR_SECTION(sec_name) #define TU_ATTR_PACKED #define TU_ATTR_WEAK #define TU_ATTR_ALWAYS_INLINE #define TU_ATTR_DEPRECATED(mess) #define TU_ATTR_UNUSED #define TU_ATTR_USED #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ #define TU_ATTR_PACKED_BEGIN _Pragma("pack") #define TU_ATTR_PACKED_END _Pragma("packoption") #define TU_ATTR_BIT_FIELD_ORDER_BEGIN _Pragma("bit_order right") #define TU_ATTR_BIT_FIELD_ORDER_END _Pragma("bit_order") // Endian conversion use well-known host to network (big endian) naming #if defined(__LIT) #define TU_BYTE_ORDER TU_LITTLE_ENDIAN #else #define TU_BYTE_ORDER TU_BIG_ENDIAN #endif #define TU_BSWAP16(u16) ((unsigned short)_builtin_revw((unsigned long)u16)) #define TU_BSWAP32(u32) (_builtin_revl(u32)) #else #error "Compiler attribute porting is required" #endif #if (TU_BYTE_ORDER == TU_LITTLE_ENDIAN) #define tu_htons(u16) (TU_BSWAP16(u16)) #define tu_ntohs(u16) (TU_BSWAP16(u16)) #define tu_htonl(u32) (TU_BSWAP32(u32)) #define tu_ntohl(u32) (TU_BSWAP32(u32)) #define tu_htole16(u16) (u16) #define tu_le16toh(u16) (u16) #define tu_htole32(u32) (u32) #define tu_le32toh(u32) (u32) #elif (TU_BYTE_ORDER == TU_BIG_ENDIAN) #define tu_htons(u16) (u16) #define tu_ntohs(u16) (u16) #define tu_htonl(u32) (u32) #define tu_ntohl(u32) (u32) #define tu_htole16(u16) (TU_BSWAP16(u16)) #define tu_le16toh(u16) (TU_BSWAP16(u16)) #define tu_htole32(u32) (TU_BSWAP32(u32)) #define tu_le32toh(u32) (TU_BSWAP32(u32)) #else #error Byte order is undefined #endif #endif /* _TUSB_COMPILER_H_ */ /// @} ================================================ FILE: pico-sdk/lib/tinyusb/src/common/tusb_debug.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2022, Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_DEBUG_H_ #define _TUSB_DEBUG_H_ #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // Debug //--------------------------------------------------------------------+ // CFG_TUSB_DEBUG for debugging // 0 : no debug // 1 : print error // 2 : print warning // 3 : print info #if CFG_TUSB_DEBUG // Enum to String for debugging purposes #if CFG_TUSB_DEBUG >= CFG_TUH_LOG_LEVEL || CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL extern char const* const tu_str_speed[]; extern char const* const tu_str_std_request[]; extern char const* const tu_str_xfer_result[]; #endif void tu_print_mem(void const *buf, uint32_t count, uint8_t indent); #ifdef CFG_TUSB_DEBUG_PRINTF extern int CFG_TUSB_DEBUG_PRINTF(const char *format, ...); #define tu_printf CFG_TUSB_DEBUG_PRINTF #else #define tu_printf printf #endif static inline void tu_print_buf(uint8_t const* buf, uint32_t bufsize) { for(uint32_t i=0; i= 2 #define TU_LOG2 TU_LOG1 #define TU_LOG2_MEM TU_LOG1_MEM #define TU_LOG2_BUF TU_LOG1_BUF #define TU_LOG2_INT TU_LOG1_INT #define TU_LOG2_HEX TU_LOG1_HEX #endif // Log Level 3: Info #if CFG_TUSB_DEBUG >= 3 #define TU_LOG3 TU_LOG1 #define TU_LOG3_MEM TU_LOG1_MEM #define TU_LOG3_BUF TU_LOG1_BUF #define TU_LOG3_INT TU_LOG1_INT #define TU_LOG3_HEX TU_LOG1_HEX #endif typedef struct { uint32_t key; const char* data; } tu_lookup_entry_t; typedef struct { uint16_t count; tu_lookup_entry_t const* items; } tu_lookup_table_t; static inline const char* tu_lookup_find(tu_lookup_table_t const* p_table, uint32_t key) { tu_static char not_found[11]; for(uint16_t i=0; icount; i++) { if (p_table->items[i].key == key) return p_table->items[i].data; } // not found return the key value in hex snprintf(not_found, sizeof(not_found), "0x%08lX", (unsigned long) key); return not_found; } #endif // CFG_TUSB_DEBUG #ifndef TU_LOG #define TU_LOG(n, ...) #define TU_LOG_MEM(n, ...) #define TU_LOG_BUF(n, ...) #define TU_LOG_INT(n, ...) #define TU_LOG_HEX(n, ...) #define TU_LOG_LOCATION() #define TU_LOG_FAILED() #endif // TODO replace all TU_LOGn with TU_LOG(n) #define TU_LOG0(...) #define TU_LOG0_MEM(...) #define TU_LOG0_BUF(...) #define TU_LOG0_INT(...) #define TU_LOG0_HEX(...) #ifndef TU_LOG1 #define TU_LOG1(...) #define TU_LOG1_MEM(...) #define TU_LOG1_BUF(...) #define TU_LOG1_INT(...) #define TU_LOG1_HEX(...) #endif #ifndef TU_LOG2 #define TU_LOG2(...) #define TU_LOG2_MEM(...) #define TU_LOG2_BUF(...) #define TU_LOG2_INT(...) #define TU_LOG2_HEX(...) #endif #ifndef TU_LOG3 #define TU_LOG3(...) #define TU_LOG3_MEM(...) #define TU_LOG3_BUF(...) #define TU_LOG3_INT(...) #define TU_LOG3_HEX(...) #endif #ifdef __cplusplus } #endif #endif /* _TUSB_DEBUG_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/common/tusb_fifo.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * Copyright (c) 2020 Reinhard Panhuber - rework to unmasked pointers * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "osal/osal.h" #include "tusb_fifo.h" #define TU_FIFO_DBG 0 // Suppress IAR warning // Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement #if defined(__ICCARM__) #pragma diag_suppress = Pa082 #endif #if OSAL_MUTEX_REQUIRED TU_ATTR_ALWAYS_INLINE static inline void _ff_lock(osal_mutex_t mutex) { if (mutex) osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); } TU_ATTR_ALWAYS_INLINE static inline void _ff_unlock(osal_mutex_t mutex) { if (mutex) osal_mutex_unlock(mutex); } #else #define _ff_lock(_mutex) #define _ff_unlock(_mutex) #endif /** \enum tu_fifo_copy_mode_t * \brief Write modes intended to allow special read and write functions to be able to * copy data to and from USB hardware FIFOs as needed for e.g. STM32s and others */ typedef enum { TU_FIFO_COPY_INC, ///< Copy from/to an increasing source/destination address - default mode #ifdef TUP_MEM_CONST_ADDR TU_FIFO_COPY_CST_FULL_WORDS, ///< Copy from/to a constant source/destination address - required for e.g. STM32 to write into USB hardware FIFO #endif } tu_fifo_copy_mode_t; bool tu_fifo_config(tu_fifo_t *f, void* buffer, uint16_t depth, uint16_t item_size, bool overwritable) { // Limit index space to 2*depth - this allows for a fast "modulo" calculation // but limits the maximum depth to 2^16/2 = 2^15 and buffer overflows are detectable // only if overflow happens once (important for unsupervised DMA applications) if (depth > 0x8000) return false; _ff_lock(f->mutex_wr); _ff_lock(f->mutex_rd); f->buffer = (uint8_t*) buffer; f->depth = depth; f->item_size = (uint16_t) (item_size & 0x7FFF); f->overwritable = overwritable; f->rd_idx = 0; f->wr_idx = 0; _ff_unlock(f->mutex_wr); _ff_unlock(f->mutex_rd); return true; } //--------------------------------------------------------------------+ // Pull & Push //--------------------------------------------------------------------+ #ifdef TUP_MEM_CONST_ADDR // Intended to be used to read from hardware USB FIFO in e.g. STM32 where all data is read from a constant address // Code adapted from dcd_synopsys.c // TODO generalize with configurable 1 byte or 4 byte each read static void _ff_push_const_addr(uint8_t * ff_buf, const void * app_buf, uint16_t len) { volatile const uint32_t * reg_rx = (volatile const uint32_t *) app_buf; // Reading full available 32 bit words from const app address uint16_t full_words = len >> 2; while(full_words--) { tu_unaligned_write32(ff_buf, *reg_rx); ff_buf += 4; } // Read the remaining 1-3 bytes from const app address uint8_t const bytes_rem = len & 0x03; if ( bytes_rem ) { uint32_t tmp32 = *reg_rx; memcpy(ff_buf, &tmp32, bytes_rem); } } // Intended to be used to write to hardware USB FIFO in e.g. STM32 // where all data is written to a constant address in full word copies static void _ff_pull_const_addr(void * app_buf, const uint8_t * ff_buf, uint16_t len) { volatile uint32_t * reg_tx = (volatile uint32_t *) app_buf; // Write full available 32 bit words to const address uint16_t full_words = len >> 2; while(full_words--) { *reg_tx = tu_unaligned_read32(ff_buf); ff_buf += 4; } // Write the remaining 1-3 bytes into const address uint8_t const bytes_rem = len & 0x03; if ( bytes_rem ) { uint32_t tmp32 = 0; memcpy(&tmp32, ff_buf, bytes_rem); *reg_tx = tmp32; } } #endif // send one item to fifo WITHOUT updating write pointer static inline void _ff_push(tu_fifo_t* f, void const * app_buf, uint16_t rel) { memcpy(f->buffer + (rel * f->item_size), app_buf, f->item_size); } // send n items to fifo WITHOUT updating write pointer static void _ff_push_n(tu_fifo_t* f, void const * app_buf, uint16_t n, uint16_t wr_ptr, tu_fifo_copy_mode_t copy_mode) { uint16_t const lin_count = f->depth - wr_ptr; uint16_t const wrap_count = n - lin_count; uint16_t lin_bytes = lin_count * f->item_size; uint16_t wrap_bytes = wrap_count * f->item_size; // current buffer of fifo uint8_t* ff_buf = f->buffer + (wr_ptr * f->item_size); switch (copy_mode) { case TU_FIFO_COPY_INC: if(n <= lin_count) { // Linear only memcpy(ff_buf, app_buf, n*f->item_size); } else { // Wrap around // Write data to linear part of buffer memcpy(ff_buf, app_buf, lin_bytes); // Write data wrapped around // TU_ASSERT(nWrap_bytes <= f->depth, ); memcpy(f->buffer, ((uint8_t const*) app_buf) + lin_bytes, wrap_bytes); } break; #ifdef TUP_MEM_CONST_ADDR case TU_FIFO_COPY_CST_FULL_WORDS: // Intended for hardware buffers from which it can be read word by word only if(n <= lin_count) { // Linear only _ff_push_const_addr(ff_buf, app_buf, n*f->item_size); } else { // Wrap around case // Write full words to linear part of buffer uint16_t nLin_4n_bytes = lin_bytes & 0xFFFC; _ff_push_const_addr(ff_buf, app_buf, nLin_4n_bytes); ff_buf += nLin_4n_bytes; // There could be odd 1-3 bytes before the wrap-around boundary uint8_t rem = lin_bytes & 0x03; if (rem > 0) { volatile const uint32_t * rx_fifo = (volatile const uint32_t *) app_buf; uint8_t remrem = (uint8_t) tu_min16(wrap_bytes, 4-rem); wrap_bytes -= remrem; uint32_t tmp32 = *rx_fifo; uint8_t * src_u8 = ((uint8_t *) &tmp32); // Write 1-3 bytes before wrapped boundary while(rem--) *ff_buf++ = *src_u8++; // Read more bytes to beginning to complete a word ff_buf = f->buffer; while(remrem--) *ff_buf++ = *src_u8++; } else { ff_buf = f->buffer; // wrap around to beginning } // Write data wrapped part if (wrap_bytes > 0) _ff_push_const_addr(ff_buf, app_buf, wrap_bytes); } break; #endif default: break; } } // get one item from fifo WITHOUT updating read pointer static inline void _ff_pull(tu_fifo_t* f, void * app_buf, uint16_t rel) { memcpy(app_buf, f->buffer + (rel * f->item_size), f->item_size); } // get n items from fifo WITHOUT updating read pointer static void _ff_pull_n(tu_fifo_t* f, void* app_buf, uint16_t n, uint16_t rd_ptr, tu_fifo_copy_mode_t copy_mode) { uint16_t const lin_count = f->depth - rd_ptr; uint16_t const wrap_count = n - lin_count; // only used if wrapped uint16_t lin_bytes = lin_count * f->item_size; uint16_t wrap_bytes = wrap_count * f->item_size; // current buffer of fifo uint8_t* ff_buf = f->buffer + (rd_ptr * f->item_size); switch (copy_mode) { case TU_FIFO_COPY_INC: if ( n <= lin_count ) { // Linear only memcpy(app_buf, ff_buf, n*f->item_size); } else { // Wrap around // Read data from linear part of buffer memcpy(app_buf, ff_buf, lin_bytes); // Read data wrapped part memcpy((uint8_t*) app_buf + lin_bytes, f->buffer, wrap_bytes); } break; #ifdef TUP_MEM_CONST_ADDR case TU_FIFO_COPY_CST_FULL_WORDS: if ( n <= lin_count ) { // Linear only _ff_pull_const_addr(app_buf, ff_buf, n*f->item_size); } else { // Wrap around case // Read full words from linear part of buffer uint16_t lin_4n_bytes = lin_bytes & 0xFFFC; _ff_pull_const_addr(app_buf, ff_buf, lin_4n_bytes); ff_buf += lin_4n_bytes; // There could be odd 1-3 bytes before the wrap-around boundary uint8_t rem = lin_bytes & 0x03; if (rem > 0) { volatile uint32_t * reg_tx = (volatile uint32_t *) app_buf; uint8_t remrem = (uint8_t) tu_min16(wrap_bytes, 4-rem); wrap_bytes -= remrem; uint32_t tmp32=0; uint8_t * dst_u8 = (uint8_t *)&tmp32; // Read 1-3 bytes before wrapped boundary while(rem--) *dst_u8++ = *ff_buf++; // Read more bytes from beginning to complete a word ff_buf = f->buffer; while(remrem--) *dst_u8++ = *ff_buf++; *reg_tx = tmp32; } else { ff_buf = f->buffer; // wrap around to beginning } // Read data wrapped part if (wrap_bytes > 0) _ff_pull_const_addr(app_buf, ff_buf, wrap_bytes); } #endif break; default: break; } } //--------------------------------------------------------------------+ // Helper //--------------------------------------------------------------------+ // return only the index difference and as such can be used to determine an overflow i.e overflowable count TU_ATTR_ALWAYS_INLINE static inline uint16_t _ff_count(uint16_t depth, uint16_t wr_idx, uint16_t rd_idx) { // In case we have non-power of two depth we need a further modification if (wr_idx >= rd_idx) { return (uint16_t) (wr_idx - rd_idx); } else { return (uint16_t) (2*depth - (rd_idx - wr_idx)); } } // return remaining slot in fifo TU_ATTR_ALWAYS_INLINE static inline uint16_t _ff_remaining(uint16_t depth, uint16_t wr_idx, uint16_t rd_idx) { uint16_t const count = _ff_count(depth, wr_idx, rd_idx); return (depth > count) ? (depth - count) : 0; } //--------------------------------------------------------------------+ // Index Helper //--------------------------------------------------------------------+ // Advance an absolute index // "absolute" index is only in the range of [0..2*depth) static uint16_t advance_index(uint16_t depth, uint16_t idx, uint16_t offset) { // We limit the index space of p such that a correct wrap around happens // Check for a wrap around or if we are in unused index space - This has to be checked first!! // We are exploiting the wrap around to the correct index uint16_t new_idx = (uint16_t) (idx + offset); if ( (idx > new_idx) || (new_idx >= 2*depth) ) { uint16_t const non_used_index_space = (uint16_t) (UINT16_MAX - (2*depth-1)); new_idx = (uint16_t) (new_idx + non_used_index_space); } return new_idx; } #if 0 // not used but // Backward an absolute index static uint16_t backward_index(uint16_t depth, uint16_t idx, uint16_t offset) { // We limit the index space of p such that a correct wrap around happens // Check for a wrap around or if we are in unused index space - This has to be checked first!! // We are exploiting the wrap around to the correct index uint16_t new_idx = (uint16_t) (idx - offset); if ( (idx < new_idx) || (new_idx >= 2*depth) ) { uint16_t const non_used_index_space = (uint16_t) (UINT16_MAX - (2*depth-1)); new_idx = (uint16_t) (new_idx - non_used_index_space); } return new_idx; } #endif // index to pointer, simply an modulo with minus. TU_ATTR_ALWAYS_INLINE static inline uint16_t idx2ptr(uint16_t depth, uint16_t idx) { // Only run at most 3 times since index is limit in the range of [0..2*depth) while ( idx >= depth ) idx -= depth; return idx; } // Works on local copies of w // When an overwritable fifo is overflowed, rd_idx will be re-index so that it forms // an full fifo i.e _ff_count() = depth TU_ATTR_ALWAYS_INLINE static inline uint16_t _ff_correct_read_index(tu_fifo_t* f, uint16_t wr_idx) { uint16_t rd_idx; if ( wr_idx >= f->depth ) { rd_idx = wr_idx - f->depth; }else { rd_idx = wr_idx + f->depth; } f->rd_idx = rd_idx; return rd_idx; } // Works on local copies of w and r // Must be protected by mutexes since in case of an overflow read pointer gets modified static bool _tu_fifo_peek(tu_fifo_t* f, void * p_buffer, uint16_t wr_idx, uint16_t rd_idx) { uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); // nothing to peek if ( cnt == 0 ) return false; // Check overflow and correct if required if ( cnt > f->depth ) { rd_idx = _ff_correct_read_index(f, wr_idx); cnt = f->depth; } uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); // Peek data _ff_pull(f, p_buffer, rd_ptr); return true; } // Works on local copies of w and r // Must be protected by mutexes since in case of an overflow read pointer gets modified static uint16_t _tu_fifo_peek_n(tu_fifo_t* f, void * p_buffer, uint16_t n, uint16_t wr_idx, uint16_t rd_idx, tu_fifo_copy_mode_t copy_mode) { uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); // nothing to peek if ( cnt == 0 ) return 0; // Check overflow and correct if required if ( cnt > f->depth ) { rd_idx = _ff_correct_read_index(f, wr_idx); cnt = f->depth; } // Check if we can read something at and after offset - if too less is available we read what remains if ( cnt < n ) n = cnt; uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); // Peek data _ff_pull_n(f, p_buffer, n, rd_ptr, copy_mode); return n; } static uint16_t _tu_fifo_write_n(tu_fifo_t* f, const void * data, uint16_t n, tu_fifo_copy_mode_t copy_mode) { if ( n == 0 ) return 0; _ff_lock(f->mutex_wr); uint16_t wr_idx = f->wr_idx; uint16_t rd_idx = f->rd_idx; uint8_t const* buf8 = (uint8_t const*) data; TU_LOG(TU_FIFO_DBG, "rd = %3u, wr = %3u, count = %3u, remain = %3u, n = %3u: ", rd_idx, wr_idx, _ff_count(f->depth, wr_idx, rd_idx), _ff_remaining(f->depth, wr_idx, rd_idx), n); if ( !f->overwritable ) { // limit up to full uint16_t const remain = _ff_remaining(f->depth, wr_idx, rd_idx); n = tu_min16(n, remain); } else { // In over-writable mode, fifo_write() is allowed even when fifo is full. In such case, // oldest data in fifo i.e at read pointer data will be overwritten // Note: we can modify read buffer contents but we must not modify the read index itself within a write function! // Since it would end up in a race condition with read functions! if ( n >= f->depth ) { // Only copy last part if ( copy_mode == TU_FIFO_COPY_INC ) { buf8 += (n - f->depth) * f->item_size; }else { // TODO should read from hw fifo to discard data, however reading an odd number could // accidentally discard data. } n = f->depth; // We start writing at the read pointer's position since we fill the whole buffer wr_idx = rd_idx; } else { uint16_t const overflowable_count = _ff_count(f->depth, wr_idx, rd_idx); if (overflowable_count + n >= 2*f->depth) { // Double overflowed // Index is bigger than the allowed range [0,2*depth) // re-position write index to have a full fifo after pushed wr_idx = advance_index(f->depth, rd_idx, f->depth - n); // TODO we should also shift out n bytes from read index since we avoid changing rd index !! // However memmove() is expensive due to actual copying + wrapping consideration. // Also race condition could happen anyway if read() is invoke while moving result in corrupted memory // currently deliberately not implemented --> result in incorrect data read back }else { // normal + single overflowed: // Index is in the range of [0,2*depth) and thus detect and recoverable. Recovering is handled in read() // Therefore we just increase write index // we will correct (re-position) read index later on in fifo_read() function } } } if (n) { uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); TU_LOG(TU_FIFO_DBG, "actual_n = %u, wr_ptr = %u", n, wr_ptr); // Write data _ff_push_n(f, buf8, n, wr_ptr, copy_mode); // Advance index f->wr_idx = advance_index(f->depth, wr_idx, n); TU_LOG(TU_FIFO_DBG, "\tnew_wr = %u\r\n", f->wr_idx); } _ff_unlock(f->mutex_wr); return n; } static uint16_t _tu_fifo_read_n(tu_fifo_t* f, void * buffer, uint16_t n, tu_fifo_copy_mode_t copy_mode) { _ff_lock(f->mutex_rd); // Peek the data // f->rd_idx might get modified in case of an overflow so we can not use a local variable n = _tu_fifo_peek_n(f, buffer, n, f->wr_idx, f->rd_idx, copy_mode); // Advance read pointer f->rd_idx = advance_index(f->depth, f->rd_idx, n); _ff_unlock(f->mutex_rd); return n; } //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ /******************************************************************************/ /*! @brief Get number of items in FIFO. As this function only reads the read and write pointers once, this function is reentrant and thus thread and ISR save without any mutexes. In case an overflow occurred, this function return f.depth at maximum. Overflows are checked and corrected for in the read functions! @param[in] f Pointer to the FIFO buffer to manipulate @returns Number of items in FIFO */ /******************************************************************************/ uint16_t tu_fifo_count(tu_fifo_t* f) { return tu_min16(_ff_count(f->depth, f->wr_idx, f->rd_idx), f->depth); } /******************************************************************************/ /*! @brief Check if FIFO is empty. As this function only reads the read and write pointers once, this function is reentrant and thus thread and ISR save without any mutexes. @param[in] f Pointer to the FIFO buffer to manipulate @returns Number of items in FIFO */ /******************************************************************************/ bool tu_fifo_empty(tu_fifo_t* f) { return f->wr_idx == f->rd_idx; } /******************************************************************************/ /*! @brief Check if FIFO is full. As this function only reads the read and write pointers once, this function is reentrant and thus thread and ISR save without any mutexes. @param[in] f Pointer to the FIFO buffer to manipulate @returns Number of items in FIFO */ /******************************************************************************/ bool tu_fifo_full(tu_fifo_t* f) { return _ff_count(f->depth, f->wr_idx, f->rd_idx) >= f->depth; } /******************************************************************************/ /*! @brief Get remaining space in FIFO. As this function only reads the read and write pointers once, this function is reentrant and thus thread and ISR save without any mutexes. @param[in] f Pointer to the FIFO buffer to manipulate @returns Number of items in FIFO */ /******************************************************************************/ uint16_t tu_fifo_remaining(tu_fifo_t* f) { return _ff_remaining(f->depth, f->wr_idx, f->rd_idx); } /******************************************************************************/ /*! @brief Check if overflow happened. BE AWARE - THIS FUNCTION MIGHT NOT GIVE A CORRECT ANSWERE IN CASE WRITE POINTER "OVERFLOWS" Only one overflow is allowed for this function to work e.g. if depth = 100, you must not write more than 2*depth-1 items in one rush without updating write pointer. Otherwise write pointer wraps and your pointer states are messed up. This can only happen if you use DMAs, write functions do not allow such an error. Avoid such nasty things! All reading functions (read, peek) check for overflows and correct read pointer on their own such that latest items are read. If required (e.g. for DMA use) you can also correct the read pointer by tu_fifo_correct_read_pointer(). @param[in] f Pointer to the FIFO buffer to manipulate @returns True if overflow happened */ /******************************************************************************/ bool tu_fifo_overflowed(tu_fifo_t* f) { return _ff_count(f->depth, f->wr_idx, f->rd_idx) > f->depth; } // Only use in case tu_fifo_overflow() returned true! void tu_fifo_correct_read_pointer(tu_fifo_t* f) { _ff_lock(f->mutex_rd); _ff_correct_read_index(f, f->wr_idx); _ff_unlock(f->mutex_rd); } /******************************************************************************/ /*! @brief Read one element out of the buffer. This function will return the element located at the array index of the read pointer, and then increment the read pointer index. This function checks for an overflow and corrects read pointer if required. @param[in] f Pointer to the FIFO buffer to manipulate @param[in] buffer Pointer to the place holder for data read from the buffer @returns TRUE if the queue is not empty */ /******************************************************************************/ bool tu_fifo_read(tu_fifo_t* f, void * buffer) { _ff_lock(f->mutex_rd); // Peek the data // f->rd_idx might get modified in case of an overflow so we can not use a local variable bool ret = _tu_fifo_peek(f, buffer, f->wr_idx, f->rd_idx); // Advance pointer f->rd_idx = advance_index(f->depth, f->rd_idx, ret); _ff_unlock(f->mutex_rd); return ret; } /******************************************************************************/ /*! @brief This function will read n elements from the array index specified by the read pointer and increment the read index. This function checks for an overflow and corrects read pointer if required. @param[in] f Pointer to the FIFO buffer to manipulate @param[in] buffer The pointer to data location @param[in] n Number of element that buffer can afford @returns number of items read from the FIFO */ /******************************************************************************/ uint16_t tu_fifo_read_n(tu_fifo_t* f, void * buffer, uint16_t n) { return _tu_fifo_read_n(f, buffer, n, TU_FIFO_COPY_INC); } #ifdef TUP_MEM_CONST_ADDR /******************************************************************************/ /*! @brief This function will read n elements from the array index specified by the read pointer and increment the read index. This function checks for an overflow and corrects read pointer if required. The dest address will not be incremented which is useful for writing to registers. @param[in] f Pointer to the FIFO buffer to manipulate @param[in] buffer The pointer to data location @param[in] n Number of element that buffer can afford @returns number of items read from the FIFO */ /******************************************************************************/ uint16_t tu_fifo_read_n_const_addr_full_words(tu_fifo_t* f, void * buffer, uint16_t n) { return _tu_fifo_read_n(f, buffer, n, TU_FIFO_COPY_CST_FULL_WORDS); } #endif /******************************************************************************/ /*! @brief Read one item without removing it from the FIFO. This function checks for an overflow and corrects read pointer if required. @param[in] f Pointer to the FIFO buffer to manipulate @param[in] p_buffer Pointer to the place holder for data read from the buffer @returns TRUE if the queue is not empty */ /******************************************************************************/ bool tu_fifo_peek(tu_fifo_t* f, void * p_buffer) { _ff_lock(f->mutex_rd); bool ret = _tu_fifo_peek(f, p_buffer, f->wr_idx, f->rd_idx); _ff_unlock(f->mutex_rd); return ret; } /******************************************************************************/ /*! @brief Read n items without removing it from the FIFO This function checks for an overflow and corrects read pointer if required. @param[in] f Pointer to the FIFO buffer to manipulate @param[in] p_buffer Pointer to the place holder for data read from the buffer @param[in] n Number of items to peek @returns Number of bytes written to p_buffer */ /******************************************************************************/ uint16_t tu_fifo_peek_n(tu_fifo_t* f, void * p_buffer, uint16_t n) { _ff_lock(f->mutex_rd); uint16_t ret = _tu_fifo_peek_n(f, p_buffer, n, f->wr_idx, f->rd_idx, TU_FIFO_COPY_INC); _ff_unlock(f->mutex_rd); return ret; } /******************************************************************************/ /*! @brief Write one element into the buffer. This function will write one element into the array index specified by the write pointer and increment the write index. @param[in] f Pointer to the FIFO buffer to manipulate @param[in] data The byte to add to the FIFO @returns TRUE if the data was written to the FIFO (overwrittable FIFO will always return TRUE) */ /******************************************************************************/ bool tu_fifo_write(tu_fifo_t* f, const void * data) { _ff_lock(f->mutex_wr); bool ret; uint16_t const wr_idx = f->wr_idx; if ( tu_fifo_full(f) && !f->overwritable ) { ret = false; }else { uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); // Write data _ff_push(f, data, wr_ptr); // Advance pointer f->wr_idx = advance_index(f->depth, wr_idx, 1); ret = true; } _ff_unlock(f->mutex_wr); return ret; } /******************************************************************************/ /*! @brief This function will write n elements into the array index specified by the write pointer and increment the write index. @param[in] f Pointer to the FIFO buffer to manipulate @param[in] data The pointer to data to add to the FIFO @param[in] count Number of element @return Number of written elements */ /******************************************************************************/ uint16_t tu_fifo_write_n(tu_fifo_t* f, const void * data, uint16_t n) { return _tu_fifo_write_n(f, data, n, TU_FIFO_COPY_INC); } #ifdef TUP_MEM_CONST_ADDR /******************************************************************************/ /*! @brief This function will write n elements into the array index specified by the write pointer and increment the write index. The source address will not be incremented which is useful for reading from registers. @param[in] f Pointer to the FIFO buffer to manipulate @param[in] data The pointer to data to add to the FIFO @param[in] count Number of element @return Number of written elements */ /******************************************************************************/ uint16_t tu_fifo_write_n_const_addr_full_words(tu_fifo_t* f, const void * data, uint16_t n) { return _tu_fifo_write_n(f, data, n, TU_FIFO_COPY_CST_FULL_WORDS); } #endif /******************************************************************************/ /*! @brief Clear the fifo read and write pointers @param[in] f Pointer to the FIFO buffer to manipulate */ /******************************************************************************/ bool tu_fifo_clear(tu_fifo_t *f) { _ff_lock(f->mutex_wr); _ff_lock(f->mutex_rd); f->rd_idx = 0; f->wr_idx = 0; _ff_unlock(f->mutex_wr); _ff_unlock(f->mutex_rd); return true; } /******************************************************************************/ /*! @brief Change the fifo mode to overwritable or not overwritable @param[in] f Pointer to the FIFO buffer to manipulate @param[in] overwritable Overwritable mode the fifo is set to */ /******************************************************************************/ bool tu_fifo_set_overwritable(tu_fifo_t *f, bool overwritable) { _ff_lock(f->mutex_wr); _ff_lock(f->mutex_rd); f->overwritable = overwritable; _ff_unlock(f->mutex_wr); _ff_unlock(f->mutex_rd); return true; } /******************************************************************************/ /*! @brief Advance write pointer - intended to be used in combination with DMA. It is possible to fill the FIFO by use of a DMA in circular mode. Within DMA ISRs you may update the write pointer to be able to read from the FIFO. As long as the DMA is the only process writing into the FIFO this is safe to use. USE WITH CARE - WE DO NOT CONDUCT SAFETY CHECKS HERE! @param[in] f Pointer to the FIFO buffer to manipulate @param[in] n Number of items the write pointer moves forward */ /******************************************************************************/ void tu_fifo_advance_write_pointer(tu_fifo_t *f, uint16_t n) { f->wr_idx = advance_index(f->depth, f->wr_idx, n); } /******************************************************************************/ /*! @brief Advance read pointer - intended to be used in combination with DMA. It is possible to read from the FIFO by use of a DMA in linear mode. Within DMA ISRs you may update the read pointer to be able to again write into the FIFO. As long as the DMA is the only process reading from the FIFO this is safe to use. USE WITH CARE - WE DO NOT CONDUCT SAFETY CHECKS HERE! @param[in] f Pointer to the FIFO buffer to manipulate @param[in] n Number of items the read pointer moves forward */ /******************************************************************************/ void tu_fifo_advance_read_pointer(tu_fifo_t *f, uint16_t n) { f->rd_idx = advance_index(f->depth, f->rd_idx, n); } /******************************************************************************/ /*! @brief Get read info Returns the length and pointer from which bytes can be read in a linear manner. This is of major interest for DMA transmissions. If returned length is zero the corresponding pointer is invalid. The read pointer does NOT get advanced, use tu_fifo_advance_read_pointer() to do so! @param[in] f Pointer to FIFO @param[out] *info Pointer to struct which holds the desired infos */ /******************************************************************************/ void tu_fifo_get_read_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info) { // Operate on temporary values in case they change in between uint16_t wr_idx = f->wr_idx; uint16_t rd_idx = f->rd_idx; uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); // Check overflow and correct if required - may happen in case a DMA wrote too fast if (cnt > f->depth) { _ff_lock(f->mutex_rd); rd_idx = _ff_correct_read_index(f, wr_idx); _ff_unlock(f->mutex_rd); cnt = f->depth; } // Check if fifo is empty if (cnt == 0) { info->len_lin = 0; info->len_wrap = 0; info->ptr_lin = NULL; info->ptr_wrap = NULL; return; } // Get relative pointers uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); // Copy pointer to buffer to start reading from info->ptr_lin = &f->buffer[rd_ptr]; // Check if there is a wrap around necessary if (wr_ptr > rd_ptr) { // Non wrapping case info->len_lin = cnt; info->len_wrap = 0; info->ptr_wrap = NULL; } else { info->len_lin = f->depth - rd_ptr; // Also the case if FIFO was full info->len_wrap = cnt - info->len_lin; info->ptr_wrap = f->buffer; } } /******************************************************************************/ /*! @brief Get linear write info Returns the length and pointer to which bytes can be written into FIFO in a linear manner. This is of major interest for DMA transmissions not using circular mode. If a returned length is zero the corresponding pointer is invalid. The returned lengths summed up are the currently free space in the FIFO. The write pointer does NOT get advanced, use tu_fifo_advance_write_pointer() to do so! TAKE CARE TO NOT OVERFLOW THE BUFFER MORE THAN TWO TIMES THE FIFO DEPTH - IT CAN NOT RECOVERE OTHERWISE! @param[in] f Pointer to FIFO @param[out] *info Pointer to struct which holds the desired infos */ /******************************************************************************/ void tu_fifo_get_write_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info) { uint16_t wr_idx = f->wr_idx; uint16_t rd_idx = f->rd_idx; uint16_t remain = _ff_remaining(f->depth, wr_idx, rd_idx); if (remain == 0) { info->len_lin = 0; info->len_wrap = 0; info->ptr_lin = NULL; info->ptr_wrap = NULL; return; } // Get relative pointers uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); // Copy pointer to buffer to start writing to info->ptr_lin = &f->buffer[wr_ptr]; if (wr_ptr < rd_ptr) { // Non wrapping case info->len_lin = rd_ptr-wr_ptr; info->len_wrap = 0; info->ptr_wrap = NULL; } else { info->len_lin = f->depth - wr_ptr; info->len_wrap = remain - info->len_lin; // Remaining length - n already was limited to remain or FIFO depth info->ptr_wrap = f->buffer; // Always start of buffer } } ================================================ FILE: pico-sdk/lib/tinyusb/src/common/tusb_fifo.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * Copyright (c) 2020 Reinhard Panhuber - rework to unmasked pointers * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_FIFO_H_ #define _TUSB_FIFO_H_ #ifdef __cplusplus extern "C" { #endif // Due to the use of unmasked pointers, this FIFO does not suffer from losing // one item slice. Furthermore, write and read operations are completely // decoupled as write and read functions do not modify a common state. Henceforth, // writing or reading from the FIFO within an ISR is safe as long as no other // process (thread or ISR) interferes. // Also, this FIFO is ready to be used in combination with a DMA as the write and // read pointers can be updated from within a DMA ISR. Overflows are detectable // within a certain number (see tu_fifo_overflow()). #include "common/tusb_common.h" #include "osal/osal.h" // mutex is only needed for RTOS // for OS None, we don't get preempted #define CFG_FIFO_MUTEX OSAL_MUTEX_REQUIRED /* Write/Read index is always in the range of: * 0 .. 2*depth-1 * The extra window allow us to determine the fifo state of empty or full with only 2 indices * Following are examples with depth = 3 * * - empty: W = R * | * ------------------------- * | 0 | RW| 2 | 3 | 4 | 5 | * * - full 1: W > R * | * ------------------------- * | 0 | R | 2 | 3 | W | 5 | * * - full 2: W < R * | * ------------------------- * | 0 | 1 | W | 3 | 4 | R | * * - Number of items in the fifo can be determined in either cases: * - case W >= R: Count = W - R * - case W < R: Count = 2*depth - (R - W) * * In non-overwritable mode, computed Count (in above 2 cases) is at most equal to depth. * However, in over-writable mode, write index can be repeatedly increased and count can be * temporarily larger than depth (overflowed condition) e.g * * - Overflowed 1: write(3), write(1) * In this case we will adjust Read index when read()/peek() is called so that count = depth. * | * ------------------------- * | R | 1 | 2 | 3 | W | 5 | * * - Double Overflowed i.e index is out of allowed range [0,2*depth) * This occurs when we continue to write after 1st overflowed to 2nd overflowed. e.g: * write(3), write(1), write(2) * This must be prevented since it will cause unrecoverable state, in above example * if not handled the fifo will be empty instead of continue-to-be full. Since we must not modify * read index in write() function, which cause race condition. We will re-position write index so that * after data is written it is a full fifo i.e W = depth - R * * re-position W = 1 before write(2) * Note: we should also move data from mem[3] to read index as well, but deliberately skipped here * since it is an expensive operation !!! * | * ------------------------- * | R | W | 2 | 3 | 4 | 5 | * * perform write(2), result is still a full fifo. * * | * ------------------------- * | R | 1 | 2 | W | 4 | 5 | */ typedef struct { uint8_t* buffer ; // buffer pointer uint16_t depth ; // max items struct TU_ATTR_PACKED { uint16_t item_size : 15; // size of each item bool overwritable : 1 ; // ovwerwritable when full }; volatile uint16_t wr_idx ; // write index volatile uint16_t rd_idx ; // read index #if OSAL_MUTEX_REQUIRED osal_mutex_t mutex_wr; osal_mutex_t mutex_rd; #endif } tu_fifo_t; typedef struct { uint16_t len_lin ; ///< linear length in item size uint16_t len_wrap ; ///< wrapped length in item size void * ptr_lin ; ///< linear part start pointer void * ptr_wrap ; ///< wrapped part start pointer } tu_fifo_buffer_info_t; #define TU_FIFO_INIT(_buffer, _depth, _type, _overwritable){\ .buffer = _buffer, \ .depth = _depth, \ .item_size = sizeof(_type), \ .overwritable = _overwritable, \ } #define TU_FIFO_DEF(_name, _depth, _type, _overwritable) \ uint8_t _name##_buf[_depth*sizeof(_type)]; \ tu_fifo_t _name = TU_FIFO_INIT(_name##_buf, _depth, _type, _overwritable) bool tu_fifo_set_overwritable(tu_fifo_t *f, bool overwritable); bool tu_fifo_clear(tu_fifo_t *f); bool tu_fifo_config(tu_fifo_t *f, void* buffer, uint16_t depth, uint16_t item_size, bool overwritable); #if OSAL_MUTEX_REQUIRED TU_ATTR_ALWAYS_INLINE static inline void tu_fifo_config_mutex(tu_fifo_t *f, osal_mutex_t wr_mutex, osal_mutex_t rd_mutex) { f->mutex_wr = wr_mutex; f->mutex_rd = rd_mutex; } #else #define tu_fifo_config_mutex(_f, _wr_mutex, _rd_mutex) #endif bool tu_fifo_write (tu_fifo_t* f, void const * p_data); uint16_t tu_fifo_write_n (tu_fifo_t* f, void const * p_data, uint16_t n); #ifdef TUP_MEM_CONST_ADDR uint16_t tu_fifo_write_n_const_addr_full_words (tu_fifo_t* f, const void * data, uint16_t n); #endif bool tu_fifo_read (tu_fifo_t* f, void * p_buffer); uint16_t tu_fifo_read_n (tu_fifo_t* f, void * p_buffer, uint16_t n); #ifdef TUP_MEM_CONST_ADDR uint16_t tu_fifo_read_n_const_addr_full_words (tu_fifo_t* f, void * buffer, uint16_t n); #endif bool tu_fifo_peek (tu_fifo_t* f, void * p_buffer); uint16_t tu_fifo_peek_n (tu_fifo_t* f, void * p_buffer, uint16_t n); uint16_t tu_fifo_count (tu_fifo_t* f); uint16_t tu_fifo_remaining (tu_fifo_t* f); bool tu_fifo_empty (tu_fifo_t* f); bool tu_fifo_full (tu_fifo_t* f); bool tu_fifo_overflowed (tu_fifo_t* f); void tu_fifo_correct_read_pointer (tu_fifo_t* f); TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_fifo_depth(tu_fifo_t* f) { return f->depth; } // Pointer modifications intended to be used in combinations with DMAs. // USE WITH CARE - NO SAFETY CHECKS CONDUCTED HERE! NOT MUTEX PROTECTED! void tu_fifo_advance_write_pointer(tu_fifo_t *f, uint16_t n); void tu_fifo_advance_read_pointer (tu_fifo_t *f, uint16_t n); // If you want to read/write from/to the FIFO by use of a DMA, you may need to conduct two copies // to handle a possible wrapping part. These functions deliver a pointer to start // reading/writing from/to and a valid linear length along which no wrap occurs. void tu_fifo_get_read_info (tu_fifo_t *f, tu_fifo_buffer_info_t *info); void tu_fifo_get_write_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info); #ifdef __cplusplus } #endif #endif /* _TUSB_FIFO_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/common/tusb_mcu.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2021, Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef TUSB_MCU_H_ #define TUSB_MCU_H_ //--------------------------------------------------------------------+ // Port/Platform Specific // TUP stand for TinyUSB Port/Platform (can be renamed) //--------------------------------------------------------------------+ //------------- Unaligned Memory Access -------------// #ifdef __ARM_ARCH // ARM Architecture set __ARM_FEATURE_UNALIGNED to 1 for mcu supports unaligned access #if defined(__ARM_FEATURE_UNALIGNED) && __ARM_FEATURE_UNALIGNED == 1 #define TUP_ARCH_STRICT_ALIGN 0 #else #define TUP_ARCH_STRICT_ALIGN 1 #endif #else // TODO default to strict align for others // Should investigate other architecture such as risv, xtensa, mips for optimal setting #define TUP_ARCH_STRICT_ALIGN 1 #endif /* USB Controller Attributes for Device, Host or MCU (both) * - ENDPOINT_MAX: max (logical) number of endpoint * - ENDPOINT_EXCLUSIVE_NUMBER: endpoint number with different direction IN and OUT aren't allowed, * e.g EP1 OUT & EP1 IN cannot exist together * - RHPORT_HIGHSPEED: support highspeed with on-chip PHY */ //--------------------------------------------------------------------+ // NXP //--------------------------------------------------------------------+ #if TU_CHECK_MCU(OPT_MCU_LPC11UXX, OPT_MCU_LPC13XX, OPT_MCU_LPC15XX) #define TUP_USBIP_IP3511 #define TUP_DCD_ENDPOINT_MAX 5 #elif TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC40XX) #define TUP_DCD_ENDPOINT_MAX 16 #define TUP_USBIP_OHCI #define TUP_OHCI_RHPORTS 2 #elif TU_CHECK_MCU(OPT_MCU_LPC51UXX) #define TUP_USBIP_IP3511 #define TUP_DCD_ENDPOINT_MAX 5 #elif TU_CHECK_MCU(OPT_MCU_LPC54) // TODO USB0 has 5, USB1 has 6 #define TUP_USBIP_IP3511 #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_LPC55) // TODO USB0 has 5, USB1 has 6 #define TUP_USBIP_IP3511 #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_LPC18XX, OPT_MCU_LPC43XX) // USB0 has 6 with HS PHY, USB1 has 4 only FS #define TUP_USBIP_CHIPIDEA_HS #define TUP_USBIP_EHCI #define TUP_DCD_ENDPOINT_MAX 6 #define TUP_RHPORT_HIGHSPEED 1 #elif TU_CHECK_MCU(OPT_MCU_MCXN9) // USB0 is chipidea FS #define TUP_USBIP_CHIPIDEA_FS #define TUP_USBIP_CHIPIDEA_FS_MCX // USB1 is chipidea HS #define TUP_USBIP_CHIPIDEA_HS #define TUP_USBIP_EHCI #define TUP_DCD_ENDPOINT_MAX 8 #define TUP_RHPORT_HIGHSPEED 1 #elif TU_CHECK_MCU(OPT_MCU_MCXA15) // USB0 is chipidea FS #define TUP_USBIP_CHIPIDEA_FS #define TUP_USBIP_CHIPIDEA_FS_MCX #define TUP_DCD_ENDPOINT_MAX 16 #elif TU_CHECK_MCU(OPT_MCU_MIMXRT1XXX) #define TUP_USBIP_CHIPIDEA_HS #define TUP_USBIP_EHCI #define TUP_DCD_ENDPOINT_MAX 8 #define TUP_RHPORT_HIGHSPEED 1 #elif TU_CHECK_MCU(OPT_MCU_KINETIS_KL, OPT_MCU_KINETIS_K32L, OPT_MCU_KINETIS_K) #define TUP_USBIP_CHIPIDEA_FS #define TUP_USBIP_CHIPIDEA_FS_KINETIS #define TUP_DCD_ENDPOINT_MAX 16 #elif TU_CHECK_MCU(OPT_MCU_MM32F327X) #define TUP_DCD_ENDPOINT_MAX 16 //--------------------------------------------------------------------+ // Nordic //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_NRF5X) // 8 CBI + 1 ISO #define TUP_DCD_ENDPOINT_MAX 9 //--------------------------------------------------------------------+ // Microchip //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_SAMD21, OPT_MCU_SAMD51, OPT_MCU_SAME5X) || \ TU_CHECK_MCU(OPT_MCU_SAMD11, OPT_MCU_SAML21, OPT_MCU_SAML22) #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_SAMG) #define TUP_DCD_ENDPOINT_MAX 6 #define TUP_DCD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_SAMX7X) #define TUP_DCD_ENDPOINT_MAX 10 #define TUP_RHPORT_HIGHSPEED 1 #define TUP_DCD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_PIC32MZ) #define TUP_DCD_ENDPOINT_MAX 8 #define TUP_DCD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_PIC32MX, OPT_MCU_PIC32MM, OPT_MCU_PIC32MK) || \ TU_CHECK_MCU(OPT_MCU_PIC24, OPT_MCU_DSPIC33) #define TUP_DCD_ENDPOINT_MAX 16 #define TUP_DCD_ENDPOINT_EXCLUSIVE_NUMBER //--------------------------------------------------------------------+ // ST //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_STM32F0) #define TUP_USBIP_FSDEV #define TUP_USBIP_FSDEV_STM32 #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32F1) // - F102, F103 use fsdev // - F105, F107 use dwc2 #if defined (STM32F105x8) || defined (STM32F105xB) || defined (STM32F105xC) || \ defined (STM32F107xB) || defined (STM32F107xC) #define TUP_USBIP_DWC2 #define TUP_USBIP_DWC2_STM32 #define TUP_DCD_ENDPOINT_MAX 4 #elif defined(STM32F102x6) || defined(STM32F102xB) || \ defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) #define TUP_USBIP_FSDEV #define TUP_USBIP_FSDEV_STM32 #define TUP_DCD_ENDPOINT_MAX 8 #else #error "Unsupported STM32F1 mcu" #endif #elif TU_CHECK_MCU(OPT_MCU_STM32F2) #define TUP_USBIP_DWC2 #define TUP_USBIP_DWC2_STM32 // FS has 4 ep, HS has 5 ep #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_STM32F3) #define TUP_USBIP_FSDEV #define TUP_USBIP_FSDEV_STM32 #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32F4) #define TUP_USBIP_DWC2 #define TUP_USBIP_DWC2_STM32 #define TUP_USBIP_DWC2_TEST_MODE // For most mcu, FS has 4, HS has 6. TODO 446/469/479 HS has 9 #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_STM32F7) #define TUP_USBIP_DWC2 #define TUP_USBIP_DWC2_STM32 // FS has 6, HS has 9 #define TUP_DCD_ENDPOINT_MAX 9 // MCU with on-chip HS Phy #if defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F733xx) #define TUP_RHPORT_HIGHSPEED 1 // Port0: FS, Port1: HS #define TUP_USBIP_DWC2_TEST_MODE #endif #elif TU_CHECK_MCU(OPT_MCU_STM32H7) #define TUP_USBIP_DWC2 #define TUP_USBIP_DWC2_STM32 #define TUP_DCD_ENDPOINT_MAX 9 #elif TU_CHECK_MCU(OPT_MCU_STM32H5) #define TUP_USBIP_FSDEV #define TUP_USBIP_FSDEV_STM32 #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32G4) // Device controller #define TUP_USBIP_FSDEV #define TUP_USBIP_FSDEV_STM32 // TypeC controller #define TUP_USBIP_TYPEC_STM32 #define TUP_DCD_ENDPOINT_MAX 8 #define TUP_TYPEC_RHPORTS_NUM 1 #elif TU_CHECK_MCU(OPT_MCU_STM32G0) #define TUP_USBIP_FSDEV #define TUP_USBIP_FSDEV_STM32 #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32L0, OPT_MCU_STM32L1) #define TUP_USBIP_FSDEV #define TUP_USBIP_FSDEV_STM32 #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32L4) // - L4x2, L4x3 use fsdev // - L4x4, L4x6, L4x7, L4x9 use dwc2 #if defined (STM32L475xx) || defined (STM32L476xx) || \ defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || \ defined (STM32L4A6xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || \ defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || \ defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define TUP_USBIP_DWC2 #define TUP_USBIP_DWC2_STM32 #define TUP_DCD_ENDPOINT_MAX 6 #elif defined(STM32L412xx) || defined(STM32L422xx) || defined(STM32L432xx) || defined(STM32L433xx) || \ defined(STM32L442xx) || defined(STM32L443xx) || defined(STM32L452xx) || defined(STM32L462xx) #define TUP_USBIP_FSDEV #define TUP_USBIP_FSDEV_STM32 #define TUP_DCD_ENDPOINT_MAX 8 #else #error "Unsupported STM32L4 mcu" #endif #elif TU_CHECK_MCU(OPT_MCU_STM32WB) #define TUP_USBIP_FSDEV #define TUP_USBIP_FSDEV_STM32 #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32U5) #define TUP_USBIP_DWC2 #define TUP_USBIP_DWC2_STM32 // U59x/5Ax/5Fx/5Gx are highspeed with built-in HS PHY #if defined(STM32U595xx) || defined(STM32U599xx) || defined(STM32U5A5xx) || defined(STM32U5A9xx) || \ defined(STM32U5F7xx) || defined(STM32U5F9xx) || defined(STM32U5G7xx) || defined(STM32U5G9xx) #define TUP_DCD_ENDPOINT_MAX 9 #define TUP_RHPORT_HIGHSPEED 1 #define TUP_USBIP_DWC2_TEST_MODE #else #define TUP_DCD_ENDPOINT_MAX 6 #endif #elif TU_CHECK_MCU(OPT_MCU_STM32L5) #define TUP_USBIP_FSDEV #define TUP_USBIP_FSDEV_STM32 #define TUP_DCD_ENDPOINT_MAX 8 //--------------------------------------------------------------------+ // Sony //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_CXD56) #define TUP_DCD_ENDPOINT_MAX 7 #define TUP_RHPORT_HIGHSPEED 1 #define TUP_DCD_ENDPOINT_EXCLUSIVE_NUMBER //--------------------------------------------------------------------+ // TI //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_MSP430x5xx) #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_MSP432E4, OPT_MCU_TM4C123, OPT_MCU_TM4C129) #define TUP_DCD_ENDPOINT_MAX 8 //--------------------------------------------------------------------+ // ValentyUSB (Litex) //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_VALENTYUSB_EPTRI) #define TUP_DCD_ENDPOINT_MAX 16 //--------------------------------------------------------------------+ // Nuvoton //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_NUC121, OPT_MCU_NUC126) #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_NUC120) #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_NUC505) #define TUP_DCD_ENDPOINT_MAX 12 #define TUP_RHPORT_HIGHSPEED 1 //--------------------------------------------------------------------+ // Espressif //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3) #define TUP_USBIP_DWC2 #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_ESP32, OPT_MCU_ESP32C2, OPT_MCU_ESP32C3, OPT_MCU_ESP32C6, OPT_MCU_ESP32H2) && (CFG_TUD_ENABLED || !(defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421)) #error "MCUs are only supported with CFG_TUH_MAX3421 enabled" //--------------------------------------------------------------------+ // Dialog //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_DA1469X) #define TUP_DCD_ENDPOINT_MAX 4 //--------------------------------------------------------------------+ // Raspberry Pi //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_RP2040) #define TUP_DCD_ENDPOINT_MAX 16 #define TU_ATTR_FAST_FUNC __attribute__((section(".time_critical.tinyusb"))) //--------------------------------------------------------------------+ // Silabs //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_EFM32GG) #define TUP_USBIP_DWC2 #define TUP_DCD_ENDPOINT_MAX 7 //--------------------------------------------------------------------+ // Renesas //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_RX63X, OPT_MCU_RX65X, OPT_MCU_RX72N, OPT_MCU_RAXXX) #define TUP_USBIP_RUSB2 #define TUP_DCD_ENDPOINT_MAX 10 //--------------------------------------------------------------------+ // GigaDevice //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_GD32VF103) #define TUP_USBIP_DWC2 #define TUP_DCD_ENDPOINT_MAX 4 //--------------------------------------------------------------------+ // Broadcom //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_BCM2711, OPT_MCU_BCM2835, OPT_MCU_BCM2837) #define TUP_USBIP_DWC2 #define TUP_DCD_ENDPOINT_MAX 8 #define TUP_RHPORT_HIGHSPEED 1 //--------------------------------------------------------------------+ // Infineon //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_XMC4000) #define TUP_USBIP_DWC2 #define TUP_DCD_ENDPOINT_MAX 8 //--------------------------------------------------------------------+ // BridgeTek //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_FT90X) #define TUP_DCD_ENDPOINT_MAX 8 #define TUP_RHPORT_HIGHSPEED 1 #elif TU_CHECK_MCU(OPT_MCU_FT93X) #define TUP_DCD_ENDPOINT_MAX 16 #define TUP_RHPORT_HIGHSPEED 1 //--------------------------------------------------------------------+ // Allwinner //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_F1C100S) #define TUP_DCD_ENDPOINT_MAX 4 //------------- WCH -------------// #elif TU_CHECK_MCU(OPT_MCU_CH32V307) // v307 support both FS and HS #define TUP_USBIP_WCH_USBHS #define TUP_USBIP_WCH_USBFS #define TUP_RHPORT_HIGHSPEED 1 // default to highspeed #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_MAX_SPEED == OPT_MODE_HIGH_SPEED ? 16 : 8) #elif TU_CHECK_MCU(OPT_MCU_CH32F20X) #define TUP_USBIP_WCH_USBHS #define TUP_USBIP_WCH_USBFS #define TUP_RHPORT_HIGHSPEED 1 // default to highspeed #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_MAX_SPEED == OPT_MODE_HIGH_SPEED ? 16 : 8) #elif TU_CHECK_MCU(OPT_MCU_CH32V20X) #define TUP_USBIP_WCH_USBFS #define TUP_DCD_ENDPOINT_MAX 8 #endif //--------------------------------------------------------------------+ // External USB controller //--------------------------------------------------------------------+ #if defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421 #ifndef CFG_TUH_MAX3421_ENDPOINT_TOTAL #define CFG_TUH_MAX3421_ENDPOINT_TOTAL (8 + 4*(CFG_TUH_DEVICE_MAX-1)) #endif #endif //--------------------------------------------------------------------+ // Default Values //--------------------------------------------------------------------+ #ifndef TUP_MCU_MULTIPLE_CORE #define TUP_MCU_MULTIPLE_CORE 0 #endif #if !defined(TUP_DCD_ENDPOINT_MAX) && defined(CFG_TUD_ENABLED) && CFG_TUD_ENABLED #warning "TUP_DCD_ENDPOINT_MAX is not defined for this MCU, default to 8" #define TUP_DCD_ENDPOINT_MAX 8 #endif // Default to fullspeed if not defined #ifndef TUP_RHPORT_HIGHSPEED #define TUP_RHPORT_HIGHSPEED 0 #endif // fast function, normally mean placing function in SRAM #ifndef TU_ATTR_FAST_FUNC #define TU_ATTR_FAST_FUNC #endif #if defined(TUP_USBIP_DWC2) || defined(TUP_USBIP_FSDEV) #define TUP_DCD_EDPT_ISO_ALLOC #endif #if defined(TUP_USBIP_DWC2) #define TUP_MEM_CONST_ADDR #endif #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/common/tusb_private.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2022, Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_PRIVATE_H_ #define _TUSB_PRIVATE_H_ // Internal Helper used by Host and Device Stack #ifdef __cplusplus extern "C" { #endif typedef struct TU_ATTR_PACKED { volatile uint8_t busy : 1; volatile uint8_t stalled : 1; volatile uint8_t claimed : 1; }tu_edpt_state_t; typedef struct { bool is_host; // host or device most union { uint8_t daddr; uint8_t rhport; uint8_t hwid; }; uint8_t ep_addr; uint8_t ep_speed; uint16_t ep_packetsize; uint16_t ep_bufsize; // TODO xfer_fifo can skip this buffer uint8_t* ep_buf; tu_fifo_t ff; // mutex: read if ep rx, write if e tx OSAL_MUTEX_DEF(ff_mutexdef); }tu_edpt_stream_t; //--------------------------------------------------------------------+ // Endpoint //--------------------------------------------------------------------+ // Check if endpoint descriptor is valid per USB specs bool tu_edpt_validate(tusb_desc_endpoint_t const * desc_ep, tusb_speed_t speed); // Bind all endpoint of a interface descriptor to class driver void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const* p_desc, uint16_t desc_len, uint8_t driver_id); // Calculate total length of n interfaces (depending on IAD) uint16_t tu_desc_get_interface_total_len(tusb_desc_interface_t const* desc_itf, uint8_t itf_count, uint16_t max_len); // Claim an endpoint with provided mutex bool tu_edpt_claim(tu_edpt_state_t* ep_state, osal_mutex_t mutex); // Release an endpoint with provided mutex bool tu_edpt_release(tu_edpt_state_t* ep_state, osal_mutex_t mutex); //--------------------------------------------------------------------+ // Endpoint Stream //--------------------------------------------------------------------+ // Init an endpoint stream bool tu_edpt_stream_init(tu_edpt_stream_t* s, bool is_host, bool is_tx, bool overwritable, void* ff_buf, uint16_t ff_bufsize, uint8_t* ep_buf, uint16_t ep_bufsize); // Deinit an endpoint stream bool tu_edpt_stream_deinit(tu_edpt_stream_t* s); // Open an stream for an endpoint // hwid is either device address (host mode) or rhport (device mode) TU_ATTR_ALWAYS_INLINE static inline void tu_edpt_stream_open(tu_edpt_stream_t* s, uint8_t hwid, tusb_desc_endpoint_t const *desc_ep) { tu_fifo_clear(&s->ff); s->hwid = hwid; s->ep_addr = desc_ep->bEndpointAddress; s->ep_packetsize = tu_edpt_packet_size(desc_ep); } TU_ATTR_ALWAYS_INLINE static inline void tu_edpt_stream_close(tu_edpt_stream_t* s) { s->hwid = 0; s->ep_addr = 0; } // Clear fifo TU_ATTR_ALWAYS_INLINE static inline bool tu_edpt_stream_clear(tu_edpt_stream_t* s) { return tu_fifo_clear(&s->ff); } //--------------------------------------------------------------------+ // Stream Write //--------------------------------------------------------------------+ // Write to stream uint32_t tu_edpt_stream_write(tu_edpt_stream_t* s, void const *buffer, uint32_t bufsize); // Start an usb transfer if endpoint is not busy uint32_t tu_edpt_stream_write_xfer(tu_edpt_stream_t* s); // Start an zero-length packet if needed bool tu_edpt_stream_write_zlp_if_needed(tu_edpt_stream_t* s, uint32_t last_xferred_bytes); // Get the number of bytes available for writing TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_edpt_stream_write_available(tu_edpt_stream_t* s) { return (uint32_t) tu_fifo_remaining(&s->ff); } //--------------------------------------------------------------------+ // Stream Read //--------------------------------------------------------------------+ // Read from stream uint32_t tu_edpt_stream_read(tu_edpt_stream_t* s, void* buffer, uint32_t bufsize); // Start an usb transfer if endpoint is not busy uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t* s); // Must be called in the transfer complete callback TU_ATTR_ALWAYS_INLINE static inline void tu_edpt_stream_read_xfer_complete(tu_edpt_stream_t* s, uint32_t xferred_bytes) { tu_fifo_write_n(&s->ff, s->ep_buf, (uint16_t) xferred_bytes); } // Same as tu_edpt_stream_read_xfer_complete but skip the first n bytes TU_ATTR_ALWAYS_INLINE static inline void tu_edpt_stream_read_xfer_complete_offset(tu_edpt_stream_t* s, uint32_t xferred_bytes, uint32_t skip_offset) { if (skip_offset < xferred_bytes) { tu_fifo_write_n(&s->ff, s->ep_buf + skip_offset, (uint16_t) (xferred_bytes - skip_offset)); } } // Get the number of bytes available for reading TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_edpt_stream_read_available(tu_edpt_stream_t* s) { return (uint32_t) tu_fifo_count(&s->ff); } TU_ATTR_ALWAYS_INLINE static inline bool tu_edpt_stream_peek(tu_edpt_stream_t* s, uint8_t* ch) { return tu_fifo_peek(&s->ff, ch); } #ifdef __cplusplus } #endif #endif /* _TUSB_PRIVATE_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/common/tusb_types.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef TUSB_TYPES_H_ #define TUSB_TYPES_H_ #include #include #include "tusb_compiler.h" #ifdef __cplusplus extern "C" { #endif /*------------------------------------------------------------------*/ /* CONSTANTS *------------------------------------------------------------------*/ /// defined base on EHCI specs value for Endpoint Speed typedef enum { TUSB_SPEED_FULL = 0, TUSB_SPEED_LOW = 1, TUSB_SPEED_HIGH = 2, TUSB_SPEED_INVALID = 0xff, } tusb_speed_t; /// defined base on USB Specs Endpoint's bmAttributes typedef enum { TUSB_XFER_CONTROL = 0 , TUSB_XFER_ISOCHRONOUS , TUSB_XFER_BULK , TUSB_XFER_INTERRUPT } tusb_xfer_type_t; typedef enum { TUSB_DIR_OUT = 0, TUSB_DIR_IN = 1, TUSB_DIR_IN_MASK = 0x80 } tusb_dir_t; enum { TUSB_EPSIZE_BULK_FS = 64, TUSB_EPSIZE_BULK_HS = 512, TUSB_EPSIZE_ISO_FS_MAX = 1023, TUSB_EPSIZE_ISO_HS_MAX = 1024, }; /// Isochronous Endpoint Attributes typedef enum { TUSB_ISO_EP_ATT_NO_SYNC = 0x00, TUSB_ISO_EP_ATT_ASYNCHRONOUS = 0x04, TUSB_ISO_EP_ATT_ADAPTIVE = 0x08, TUSB_ISO_EP_ATT_SYNCHRONOUS = 0x0C, TUSB_ISO_EP_ATT_DATA = 0x00, ///< Data End Point TUSB_ISO_EP_ATT_EXPLICIT_FB = 0x10, ///< Feedback End Point TUSB_ISO_EP_ATT_IMPLICIT_FB = 0x20, ///< Data endpoint that also serves as an implicit feedback } tusb_iso_ep_attribute_t; /// USB Descriptor Types typedef enum { TUSB_DESC_DEVICE = 0x01, TUSB_DESC_CONFIGURATION = 0x02, TUSB_DESC_STRING = 0x03, TUSB_DESC_INTERFACE = 0x04, TUSB_DESC_ENDPOINT = 0x05, TUSB_DESC_DEVICE_QUALIFIER = 0x06, TUSB_DESC_OTHER_SPEED_CONFIG = 0x07, TUSB_DESC_INTERFACE_POWER = 0x08, TUSB_DESC_OTG = 0x09, TUSB_DESC_DEBUG = 0x0A, TUSB_DESC_INTERFACE_ASSOCIATION = 0x0B, TUSB_DESC_BOS = 0x0F, TUSB_DESC_DEVICE_CAPABILITY = 0x10, TUSB_DESC_FUNCTIONAL = 0x21, // Class Specific Descriptor TUSB_DESC_CS_DEVICE = 0x21, TUSB_DESC_CS_CONFIGURATION = 0x22, TUSB_DESC_CS_STRING = 0x23, TUSB_DESC_CS_INTERFACE = 0x24, TUSB_DESC_CS_ENDPOINT = 0x25, TUSB_DESC_SUPERSPEED_ENDPOINT_COMPANION = 0x30, TUSB_DESC_SUPERSPEED_ISO_ENDPOINT_COMPANION = 0x31 } tusb_desc_type_t; typedef enum { TUSB_REQ_GET_STATUS = 0 , TUSB_REQ_CLEAR_FEATURE = 1 , TUSB_REQ_RESERVED = 2 , TUSB_REQ_SET_FEATURE = 3 , TUSB_REQ_RESERVED2 = 4 , TUSB_REQ_SET_ADDRESS = 5 , TUSB_REQ_GET_DESCRIPTOR = 6 , TUSB_REQ_SET_DESCRIPTOR = 7 , TUSB_REQ_GET_CONFIGURATION = 8 , TUSB_REQ_SET_CONFIGURATION = 9 , TUSB_REQ_GET_INTERFACE = 10 , TUSB_REQ_SET_INTERFACE = 11 , TUSB_REQ_SYNCH_FRAME = 12 } tusb_request_code_t; typedef enum { TUSB_REQ_FEATURE_EDPT_HALT = 0, TUSB_REQ_FEATURE_REMOTE_WAKEUP = 1, TUSB_REQ_FEATURE_TEST_MODE = 2 } tusb_request_feature_selector_t; typedef enum { TUSB_REQ_TYPE_STANDARD = 0, TUSB_REQ_TYPE_CLASS, TUSB_REQ_TYPE_VENDOR, TUSB_REQ_TYPE_INVALID } tusb_request_type_t; typedef enum { TUSB_REQ_RCPT_DEVICE =0, TUSB_REQ_RCPT_INTERFACE, TUSB_REQ_RCPT_ENDPOINT, TUSB_REQ_RCPT_OTHER } tusb_request_recipient_t; // https://www.usb.org/defined-class-codes typedef enum { TUSB_CLASS_UNSPECIFIED = 0 , TUSB_CLASS_AUDIO = 1 , TUSB_CLASS_CDC = 2 , TUSB_CLASS_HID = 3 , TUSB_CLASS_RESERVED_4 = 4 , TUSB_CLASS_PHYSICAL = 5 , TUSB_CLASS_IMAGE = 6 , TUSB_CLASS_PRINTER = 7 , TUSB_CLASS_MSC = 8 , TUSB_CLASS_HUB = 9 , TUSB_CLASS_CDC_DATA = 10 , TUSB_CLASS_SMART_CARD = 11 , TUSB_CLASS_RESERVED_12 = 12 , TUSB_CLASS_CONTENT_SECURITY = 13 , TUSB_CLASS_VIDEO = 14 , TUSB_CLASS_PERSONAL_HEALTHCARE = 15 , TUSB_CLASS_AUDIO_VIDEO = 16 , TUSB_CLASS_DIAGNOSTIC = 0xDC , TUSB_CLASS_WIRELESS_CONTROLLER = 0xE0 , TUSB_CLASS_MISC = 0xEF , TUSB_CLASS_APPLICATION_SPECIFIC = 0xFE , TUSB_CLASS_VENDOR_SPECIFIC = 0xFF } tusb_class_code_t; typedef enum { MISC_SUBCLASS_COMMON = 2 }misc_subclass_type_t; typedef enum { MISC_PROTOCOL_IAD = 1 } misc_protocol_type_t; typedef enum { APP_SUBCLASS_USBTMC = 0x03, APP_SUBCLASS_DFU_RUNTIME = 0x01 } app_subclass_type_t; typedef enum { DEVICE_CAPABILITY_WIRELESS_USB = 0x01, DEVICE_CAPABILITY_USB20_EXTENSION = 0x02, DEVICE_CAPABILITY_SUPERSPEED_USB = 0x03, DEVICE_CAPABILITY_CONTAINER_id = 0x04, DEVICE_CAPABILITY_PLATFORM = 0x05, DEVICE_CAPABILITY_POWER_DELIVERY = 0x06, DEVICE_CAPABILITY_BATTERY_INFO = 0x07, DEVICE_CAPABILITY_PD_CONSUMER_PORT = 0x08, DEVICE_CAPABILITY_PD_PROVIDER_PORT = 0x09, DEVICE_CAPABILITY_SUPERSPEED_PLUS = 0x0A, DEVICE_CAPABILITY_PRECESION_TIME_MEASUREMENT = 0x0B, DEVICE_CAPABILITY_WIRELESS_USB_EXT = 0x0C, DEVICE_CAPABILITY_BILLBOARD = 0x0D, DEVICE_CAPABILITY_AUTHENTICATION = 0x0E, DEVICE_CAPABILITY_BILLBOARD_EX = 0x0F, DEVICE_CAPABILITY_CONFIGURATION_SUMMARY = 0x10 } device_capability_type_t; enum { TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP = 1u << 5, TUSB_DESC_CONFIG_ATT_SELF_POWERED = 1u << 6, }; #define TUSB_DESC_CONFIG_POWER_MA(x) ((x)/2) //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ typedef enum { XFER_RESULT_SUCCESS = 0, XFER_RESULT_FAILED, XFER_RESULT_STALLED, XFER_RESULT_TIMEOUT, XFER_RESULT_INVALID } xfer_result_t; // TODO remove enum { DESC_OFFSET_LEN = 0, DESC_OFFSET_TYPE = 1 }; enum { INTERFACE_INVALID_NUMBER = 0xff }; typedef enum { MS_OS_20_SET_HEADER_DESCRIPTOR = 0x00, MS_OS_20_SUBSET_HEADER_CONFIGURATION = 0x01, MS_OS_20_SUBSET_HEADER_FUNCTION = 0x02, MS_OS_20_FEATURE_COMPATBLE_ID = 0x03, MS_OS_20_FEATURE_REG_PROPERTY = 0x04, MS_OS_20_FEATURE_MIN_RESUME_TIME = 0x05, MS_OS_20_FEATURE_MODEL_ID = 0x06, MS_OS_20_FEATURE_CCGP_DEVICE = 0x07, MS_OS_20_FEATURE_VENDOR_REVISION = 0x08 } microsoft_os_20_type_t; enum { CONTROL_STAGE_IDLE, CONTROL_STAGE_SETUP, CONTROL_STAGE_DATA, CONTROL_STAGE_ACK }; enum { TUSB_INDEX_INVALID_8 = 0xFFu }; //--------------------------------------------------------------------+ // USB Descriptors //--------------------------------------------------------------------+ // Start of all packed definitions for compiler without per-type packed TU_ATTR_PACKED_BEGIN TU_ATTR_BIT_FIELD_ORDER_BEGIN /// USB Device Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes. uint8_t bDescriptorType ; ///< DEVICE Descriptor Type. uint16_t bcdUSB ; ///< BUSB Specification Release Number in Binary-Coded Decimal (i.e., 2.10 is 210H). uint8_t bDeviceClass ; ///< Class code (assigned by the USB-IF). uint8_t bDeviceSubClass ; ///< Subclass code (assigned by the USB-IF). uint8_t bDeviceProtocol ; ///< Protocol code (assigned by the USB-IF). uint8_t bMaxPacketSize0 ; ///< Maximum packet size for endpoint zero (only 8, 16, 32, or 64 are valid). For HS devices is fixed to 64. uint16_t idVendor ; ///< Vendor ID (assigned by the USB-IF). uint16_t idProduct ; ///< Product ID (assigned by the manufacturer). uint16_t bcdDevice ; ///< Device release number in binary-coded decimal. uint8_t iManufacturer ; ///< Index of string descriptor describing manufacturer. uint8_t iProduct ; ///< Index of string descriptor describing product. uint8_t iSerialNumber ; ///< Index of string descriptor describing the device's serial number. uint8_t bNumConfigurations ; ///< Number of possible configurations. } tusb_desc_device_t; TU_VERIFY_STATIC( sizeof(tusb_desc_device_t) == 18, "size is not correct"); // USB Binary Device Object Store (BOS) Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes uint8_t bDescriptorType ; ///< CONFIGURATION Descriptor Type uint16_t wTotalLength ; ///< Total length of data returned for this descriptor uint8_t bNumDeviceCaps ; ///< Number of device capability descriptors in the BOS } tusb_desc_bos_t; TU_VERIFY_STATIC( sizeof(tusb_desc_bos_t) == 5, "size is not correct"); /// USB Configuration Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes uint8_t bDescriptorType ; ///< CONFIGURATION Descriptor Type uint16_t wTotalLength ; ///< Total length of data returned for this configuration. Includes the combined length of all descriptors (configuration, interface, endpoint, and class- or vendor-specific) returned for this configuration. uint8_t bNumInterfaces ; ///< Number of interfaces supported by this configuration uint8_t bConfigurationValue ; ///< Value to use as an argument to the SetConfiguration() request to select this configuration. uint8_t iConfiguration ; ///< Index of string descriptor describing this configuration uint8_t bmAttributes ; ///< Configuration characteristics \n D7: Reserved (set to one)\n D6: Self-powered \n D5: Remote Wakeup \n D4...0: Reserved (reset to zero) \n D7 is reserved and must be set to one for historical reasons. \n A device configuration that uses power from the bus and a local source reports a non-zero value in bMaxPower to indicate the amount of bus power required and sets D6. The actual power source at runtime may be determined using the GetStatus(DEVICE) request (see USB 2.0 spec Section 9.4.5). \n If a device configuration supports remote wakeup, D5 is set to one. uint8_t bMaxPower ; ///< Maximum power consumption of the USB device from the bus in this specific configuration when the device is fully operational. Expressed in 2 mA units (i.e., 50 = 100 mA). } tusb_desc_configuration_t; TU_VERIFY_STATIC( sizeof(tusb_desc_configuration_t) == 9, "size is not correct"); /// USB Interface Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes uint8_t bDescriptorType ; ///< INTERFACE Descriptor Type uint8_t bInterfaceNumber ; ///< Number of this interface. Zero-based value identifying the index in the array of concurrent interfaces supported by this configuration. uint8_t bAlternateSetting ; ///< Value used to select this alternate setting for the interface identified in the prior field uint8_t bNumEndpoints ; ///< Number of endpoints used by this interface (excluding endpoint zero). If this value is zero, this interface only uses the Default Control Pipe. uint8_t bInterfaceClass ; ///< Class code (assigned by the USB-IF). \li A value of zero is reserved for future standardization. \li If this field is set to FFH, the interface class is vendor-specific. \li All other values are reserved for assignment by the USB-IF. uint8_t bInterfaceSubClass ; ///< Subclass code (assigned by the USB-IF). \n These codes are qualified by the value of the bInterfaceClass field. \li If the bInterfaceClass field is reset to zero, this field must also be reset to zero. \li If the bInterfaceClass field is not set to FFH, all values are reserved for assignment by the USB-IF. uint8_t bInterfaceProtocol ; ///< Protocol code (assigned by the USB). \n These codes are qualified by the value of the bInterfaceClass and the bInterfaceSubClass fields. If an interface supports class-specific requests, this code identifies the protocols that the device uses as defined by the specification of the device class. \li If this field is reset to zero, the device does not use a class-specific protocol on this interface. \li If this field is set to FFH, the device uses a vendor-specific protocol for this interface. uint8_t iInterface ; ///< Index of string descriptor describing this interface } tusb_desc_interface_t; TU_VERIFY_STATIC( sizeof(tusb_desc_interface_t) == 9, "size is not correct"); /// USB Endpoint Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength ; // Size of this descriptor in bytes uint8_t bDescriptorType ; // ENDPOINT Descriptor Type uint8_t bEndpointAddress ; // The address of the endpoint struct TU_ATTR_PACKED { uint8_t xfer : 2; // Control, ISO, Bulk, Interrupt uint8_t sync : 2; // None, Asynchronous, Adaptive, Synchronous uint8_t usage : 2; // Data, Feedback, Implicit feedback uint8_t : 2; } bmAttributes; uint16_t wMaxPacketSize ; // Bit 10..0 : max packet size, bit 12..11 additional transaction per highspeed micro-frame uint8_t bInterval ; // Polling interval, in frames or microframes depending on the operating speed } tusb_desc_endpoint_t; TU_VERIFY_STATIC( sizeof(tusb_desc_endpoint_t) == 7, "size is not correct"); /// USB Other Speed Configuration Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of descriptor uint8_t bDescriptorType ; ///< Other_speed_Configuration Type uint16_t wTotalLength ; ///< Total length of data returned uint8_t bNumInterfaces ; ///< Number of interfaces supported by this speed configuration uint8_t bConfigurationValue ; ///< Value to use to select configuration uint8_t iConfiguration ; ///< Index of string descriptor uint8_t bmAttributes ; ///< Same as Configuration descriptor uint8_t bMaxPower ; ///< Same as Configuration descriptor } tusb_desc_other_speed_t; /// USB Device Qualifier Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of descriptor uint8_t bDescriptorType ; ///< Device Qualifier Type uint16_t bcdUSB ; ///< USB specification version number (e.g., 0200H for V2.00) uint8_t bDeviceClass ; ///< Class Code uint8_t bDeviceSubClass ; ///< SubClass Code uint8_t bDeviceProtocol ; ///< Protocol Code uint8_t bMaxPacketSize0 ; ///< Maximum packet size for other speed uint8_t bNumConfigurations ; ///< Number of Other-speed Configurations uint8_t bReserved ; ///< Reserved for future use, must be zero } tusb_desc_device_qualifier_t; TU_VERIFY_STATIC( sizeof(tusb_desc_device_qualifier_t) == 10, "size is not correct"); /// USB Interface Association Descriptor (IAD ECN) typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of descriptor uint8_t bDescriptorType ; ///< Other_speed_Configuration Type uint8_t bFirstInterface ; ///< Index of the first associated interface. uint8_t bInterfaceCount ; ///< Total number of associated interfaces. uint8_t bFunctionClass ; ///< Interface class ID. uint8_t bFunctionSubClass ; ///< Interface subclass ID. uint8_t bFunctionProtocol ; ///< Interface protocol ID. uint8_t iFunction ; ///< Index of the string descriptor describing the interface association. } tusb_desc_interface_assoc_t; TU_VERIFY_STATIC( sizeof(tusb_desc_interface_assoc_t) == 8, "size is not correct"); // USB String Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength ; ///< Size of this descriptor in bytes uint8_t bDescriptorType ; ///< Descriptor Type uint16_t unicode_string[]; } tusb_desc_string_t; // USB Binary Device Object Store (BOS) typedef struct TU_ATTR_PACKED { uint8_t bLength; uint8_t bDescriptorType ; uint8_t bDevCapabilityType; uint8_t bReserved; uint8_t PlatformCapabilityUUID[16]; uint8_t CapabilityData[]; } tusb_desc_bos_platform_t; // USB WebUSB URL Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength; uint8_t bDescriptorType; uint8_t bScheme; char url[]; } tusb_desc_webusb_url_t; // DFU Functional Descriptor typedef struct TU_ATTR_PACKED { uint8_t bLength; uint8_t bDescriptorType; union { struct TU_ATTR_PACKED { uint8_t bitCanDnload : 1; uint8_t bitCanUpload : 1; uint8_t bitManifestationTolerant : 1; uint8_t bitWillDetach : 1; uint8_t reserved : 4; } bmAttributes; uint8_t bAttributes; }; uint16_t wDetachTimeOut; uint16_t wTransferSize; uint16_t bcdDFUVersion; } tusb_desc_dfu_functional_t; //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ typedef struct TU_ATTR_PACKED { union { struct TU_ATTR_PACKED { uint8_t recipient : 5; ///< Recipient type tusb_request_recipient_t. uint8_t type : 2; ///< Request type tusb_request_type_t. uint8_t direction : 1; ///< Direction type. tusb_dir_t } bmRequestType_bit; uint8_t bmRequestType; }; uint8_t bRequest; uint16_t wValue; uint16_t wIndex; uint16_t wLength; } tusb_control_request_t; TU_VERIFY_STATIC( sizeof(tusb_control_request_t) == 8, "size is not correct"); TU_ATTR_PACKED_END // End of all packed definitions TU_ATTR_BIT_FIELD_ORDER_END //--------------------------------------------------------------------+ // Endpoint helper //--------------------------------------------------------------------+ // Get direction from Endpoint address TU_ATTR_ALWAYS_INLINE static inline tusb_dir_t tu_edpt_dir(uint8_t addr) { return (addr & TUSB_DIR_IN_MASK) ? TUSB_DIR_IN : TUSB_DIR_OUT; } // Get Endpoint number from address TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_edpt_number(uint8_t addr) { return (uint8_t)(addr & (~TUSB_DIR_IN_MASK)); } TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_edpt_addr(uint8_t num, uint8_t dir) { return (uint8_t)(num | (dir ? TUSB_DIR_IN_MASK : 0)); } TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_edpt_packet_size(tusb_desc_endpoint_t const* desc_ep) { return tu_le16toh(desc_ep->wMaxPacketSize) & 0x7FF; } #if CFG_TUSB_DEBUG TU_ATTR_ALWAYS_INLINE static inline const char *tu_edpt_type_str(tusb_xfer_type_t t) { tu_static const char *str[] = {"control", "isochronous", "bulk", "interrupt"}; return str[t]; } #endif //--------------------------------------------------------------------+ // Descriptor helper //--------------------------------------------------------------------+ // return next descriptor TU_ATTR_ALWAYS_INLINE static inline uint8_t const * tu_desc_next(void const* desc) { uint8_t const* desc8 = (uint8_t const*) desc; return desc8 + desc8[DESC_OFFSET_LEN]; } // get descriptor type TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_desc_type(void const* desc) { return ((uint8_t const*) desc)[DESC_OFFSET_TYPE]; } // get descriptor length TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_desc_len(void const* desc) { return ((uint8_t const*) desc)[DESC_OFFSET_LEN]; } // find descriptor that match byte1 (type) uint8_t const * tu_desc_find(uint8_t const* desc, uint8_t const* end, uint8_t byte1); // find descriptor that match byte1 (type) and byte2 uint8_t const * tu_desc_find2(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2); // find descriptor that match byte1 (type) and byte2 uint8_t const * tu_desc_find3(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2, uint8_t byte3); #ifdef __cplusplus } #endif #endif // TUSB_TYPES_H_ ================================================ FILE: pico-sdk/lib/tinyusb/src/common/tusb_verify.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef TUSB_VERIFY_H_ #define TUSB_VERIFY_H_ #include #include #include "tusb_option.h" #include "tusb_compiler.h" /*------------------------------------------------------------------*/ /* This file use an advanced macro technique to mimic the default parameter * as C++ for the sake of code simplicity. Beware of a headache macro * manipulation that you are told to stay away. * * This contains macros for both VERIFY and ASSERT: * * VERIFY: Used when there is an error condition which is not the * fault of the MCU. For example, bounds checking on data * sent to the micro over USB should use this function. * Another example is checking for buffer overflows, where * returning from the active function causes a NAK. * * ASSERT: Used for error conditions that are caused by MCU firmware * bugs. This is used to discover bugs in the code more * quickly. One example would be adding assertions in library * function calls to confirm a function's (untainted) * parameters are valid. * * The difference in behavior is that ASSERT triggers a breakpoint while * verify does not. * * #define TU_VERIFY(cond) if(cond) return false; * #define TU_VERIFY(cond,ret) if(cond) return ret; * * #define TU_ASSERT(cond) if(cond) {_MESS_FAILED(); TU_BREAKPOINT(), return false;} * #define TU_ASSERT(cond,ret) if(cond) {_MESS_FAILED(); TU_BREAKPOINT(), return ret;} *------------------------------------------------------------------*/ #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // TU_VERIFY Helper //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG #include #define _MESS_FAILED() tu_printf("%s %d: ASSERT FAILED\r\n", __func__, __LINE__) #else #define _MESS_FAILED() do {} while (0) #endif // Halt CPU (breakpoint) when hitting error, only apply for Cortex M3, M4, M7, M33. M55 #if defined(__ARM_ARCH_7M__) || defined (__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__) || defined(__ARM_ARCH_8_1M_MAIN__) || \ defined(__ARM7M__) || defined (__ARM7EM__) || defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) #define TU_BREAKPOINT() do { \ volatile uint32_t* ARM_CM_DHCSR = ((volatile uint32_t*) 0xE000EDF0UL); /* Cortex M CoreDebug->DHCSR */ \ if ( (*ARM_CM_DHCSR) & 1UL ) __asm("BKPT #0\n"); /* Only halt mcu if debugger is attached */ \ } while(0) #elif defined(__riscv) && !TUP_MCU_ESPRESSIF #define TU_BREAKPOINT() do { __asm("ebreak\n"); } while(0) #elif defined(_mips) #define TU_BREAKPOINT() do { __asm("sdbbp 0"); } while (0) #else #define TU_BREAKPOINT() do {} while (0) #endif // Helper to implement optional parameter for TU_VERIFY Macro family #define _GET_3RD_ARG(arg1, arg2, arg3, ...) arg3 /*------------------------------------------------------------------*/ /* TU_VERIFY * - TU_VERIFY_1ARGS : return false if failed * - TU_VERIFY_2ARGS : return provided value if failed *------------------------------------------------------------------*/ #define TU_VERIFY_DEFINE(_cond, _ret) \ do { \ if ( !(_cond) ) { return _ret; } \ } while(0) #define TU_VERIFY_1ARGS(_cond) TU_VERIFY_DEFINE(_cond, false) #define TU_VERIFY_2ARGS(_cond, _ret) TU_VERIFY_DEFINE(_cond, _ret) #define TU_VERIFY(...) _GET_3RD_ARG(__VA_ARGS__, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, _dummy)(__VA_ARGS__) /*------------------------------------------------------------------*/ /* ASSERT * basically TU_VERIFY with TU_BREAKPOINT() as handler * - 1 arg : return false if failed * - 2 arg : return error if failed *------------------------------------------------------------------*/ #define TU_ASSERT_DEFINE(_cond, _ret) \ do { \ if ( !(_cond) ) { _MESS_FAILED(); TU_BREAKPOINT(); return _ret; } \ } while(0) #define TU_ASSERT_1ARGS(_cond) TU_ASSERT_DEFINE(_cond, false) #define TU_ASSERT_2ARGS(_cond, _ret) TU_ASSERT_DEFINE(_cond, _ret) #ifndef TU_ASSERT #define TU_ASSERT(...) _GET_3RD_ARG(__VA_ARGS__, TU_ASSERT_2ARGS, TU_ASSERT_1ARGS, _dummy)(__VA_ARGS__) #endif #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/device/dcd.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_DCD_H_ #define _TUSB_DCD_H_ #include "common/tusb_common.h" #include "osal/osal.h" #include "common/tusb_fifo.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // Configuration //--------------------------------------------------------------------+ #ifndef CFG_TUD_ENDPPOINT_MAX #define CFG_TUD_ENDPPOINT_MAX TUP_DCD_ENDPOINT_MAX #endif //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF PROTYPES //--------------------------------------------------------------------+ typedef enum { DCD_EVENT_INVALID = 0, DCD_EVENT_BUS_RESET, DCD_EVENT_UNPLUGGED, DCD_EVENT_SOF, DCD_EVENT_SUSPEND, // TODO LPM Sleep L1 support DCD_EVENT_RESUME, DCD_EVENT_SETUP_RECEIVED, DCD_EVENT_XFER_COMPLETE, // Not an DCD event, just a convenient way to defer ISR function USBD_EVENT_FUNC_CALL, DCD_EVENT_COUNT } dcd_eventid_t; typedef struct TU_ATTR_ALIGNED(4) { uint8_t rhport; uint8_t event_id; union { // BUS RESET struct { tusb_speed_t speed; } bus_reset; // SOF struct { uint32_t frame_count; }sof; // SETUP_RECEIVED tusb_control_request_t setup_received; // XFER_COMPLETE struct { uint8_t ep_addr; uint8_t result; uint32_t len; }xfer_complete; // FUNC_CALL struct { void (*func) (void*); void* param; }func_call; }; } dcd_event_t; typedef enum { TEST_J = 1, TEST_K, TEST_SE0_NAK, TEST_PACKET, TEST_FORCE_ENABLE, } test_mode_t; //TU_VERIFY_STATIC(sizeof(dcd_event_t) <= 12, "size is not correct"); //--------------------------------------------------------------------+ // Memory API //--------------------------------------------------------------------+ // clean/flush data cache: write cache -> memory. // Required before an DMA TX transfer to make sure data is in memory void dcd_dcache_clean(void const* addr, uint32_t data_size) TU_ATTR_WEAK; // invalidate data cache: mark cache as invalid, next read will read from memory // Required BOTH before and after an DMA RX transfer void dcd_dcache_invalidate(void const* addr, uint32_t data_size) TU_ATTR_WEAK; // clean and invalidate data cache // Required before an DMA transfer where memory is both read/write by DMA void dcd_dcache_clean_invalidate(void const* addr, uint32_t data_size) TU_ATTR_WEAK; //--------------------------------------------------------------------+ // Controller API //--------------------------------------------------------------------+ // Initialize controller to device mode void dcd_init(uint8_t rhport); // Deinitialize controller, unset device mode. bool dcd_deinit(uint8_t rhport); // Interrupt Handler void dcd_int_handler(uint8_t rhport); // Enable device interrupt void dcd_int_enable (uint8_t rhport); // Disable device interrupt void dcd_int_disable(uint8_t rhport); // Receive Set Address request, mcu port must also include status IN response void dcd_set_address(uint8_t rhport, uint8_t dev_addr); // Wake up host void dcd_remote_wakeup(uint8_t rhport); // Connect by enabling internal pull-up resistor on D+/D- void dcd_connect(uint8_t rhport) TU_ATTR_WEAK; // Disconnect by disabling internal pull-up resistor on D+/D- void dcd_disconnect(uint8_t rhport) TU_ATTR_WEAK; // Enable/Disable Start-of-frame interrupt. Default is disabled void dcd_sof_enable(uint8_t rhport, bool en); #if CFG_TUD_TEST_MODE // Check if the test mode is supported, returns true is test mode selector is supported bool dcd_check_test_mode_support(test_mode_t test_selector) TU_ATTR_WEAK; // Put device into a test mode (needs power cycle to quit) void dcd_enter_test_mode(uint8_t rhport, test_mode_t test_selector) TU_ATTR_WEAK; #endif //--------------------------------------------------------------------+ // Endpoint API //--------------------------------------------------------------------+ // Invoked when a control transfer's status stage is complete. // May help DCD to prepare for next control transfer, this API is optional. void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * request); // Configure endpoint's registers according to descriptor bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * desc_ep); // Close all non-control endpoints, cancel all pending transfers if any. // Invoked when switching from a non-zero Configuration by SET_CONFIGURE therefore // required for multiple configuration support. void dcd_edpt_close_all (uint8_t rhport); // Close an endpoint. // Since it is weak, caller must TU_ASSERT this function's existence before calling it. void dcd_edpt_close (uint8_t rhport, uint8_t ep_addr) TU_ATTR_WEAK; // Submit a transfer, When complete dcd_event_xfer_complete() is invoked to notify the stack bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes); // Submit an transfer using fifo, When complete dcd_event_xfer_complete() is invoked to notify the stack // This API is optional, may be useful for register-based for transferring data. bool dcd_edpt_xfer_fifo (uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes) TU_ATTR_WEAK; // Stall endpoint, any queuing transfer should be removed from endpoint void dcd_edpt_stall (uint8_t rhport, uint8_t ep_addr); // clear stall, data toggle is also reset to DATA0 // This API never calls with control endpoints, since it is auto cleared when receiving setup packet void dcd_edpt_clear_stall (uint8_t rhport, uint8_t ep_addr); // Allocate packet buffer used by ISO endpoints // Some MCU need manual packet buffer allocation, we allocate the largest size to avoid clustering TU_ATTR_WEAK bool dcd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size); // Configure and enable an ISO endpoint according to descriptor TU_ATTR_WEAK bool dcd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc); //--------------------------------------------------------------------+ // Event API (implemented by stack) //--------------------------------------------------------------------+ // Called by DCD to notify device stack extern void dcd_event_handler(dcd_event_t const * event, bool in_isr); // helper to send bus signal event TU_ATTR_ALWAYS_INLINE static inline void dcd_event_bus_signal (uint8_t rhport, dcd_eventid_t eid, bool in_isr) { dcd_event_t event = { .rhport = rhport, .event_id = eid }; dcd_event_handler(&event, in_isr); } // helper to send bus reset event TU_ATTR_ALWAYS_INLINE static inline void dcd_event_bus_reset (uint8_t rhport, tusb_speed_t speed, bool in_isr) { dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_BUS_RESET }; event.bus_reset.speed = speed; dcd_event_handler(&event, in_isr); } // helper to send setup received TU_ATTR_ALWAYS_INLINE static inline void dcd_event_setup_received(uint8_t rhport, uint8_t const * setup, bool in_isr) { dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SETUP_RECEIVED }; memcpy(&event.setup_received, setup, sizeof(tusb_control_request_t)); dcd_event_handler(&event, in_isr); } // helper to send transfer complete event TU_ATTR_ALWAYS_INLINE static inline void dcd_event_xfer_complete (uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr) { dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_XFER_COMPLETE }; event.xfer_complete.ep_addr = ep_addr; event.xfer_complete.len = xferred_bytes; event.xfer_complete.result = result; dcd_event_handler(&event, in_isr); } TU_ATTR_ALWAYS_INLINE static inline void dcd_event_sof(uint8_t rhport, uint32_t frame_count, bool in_isr) { dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SOF }; event.sof.frame_count = frame_count; dcd_event_handler(&event, in_isr); } #ifdef __cplusplus } #endif #endif /* _TUSB_DCD_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/device/usbd.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if CFG_TUD_ENABLED #include "device/dcd.h" #include "tusb.h" #include "common/tusb_private.h" #include "device/usbd.h" #include "device/usbd_pvt.h" //--------------------------------------------------------------------+ // USBD Configuration //--------------------------------------------------------------------+ #ifndef CFG_TUD_TASK_QUEUE_SZ #define CFG_TUD_TASK_QUEUE_SZ 32 #endif //--------------------------------------------------------------------+ // Weak stubs: invoked if no strong implementation is available //--------------------------------------------------------------------+ TU_ATTR_WEAK bool dcd_deinit(uint8_t rhport) { (void) rhport; return false; } TU_ATTR_WEAK void tud_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr) { (void)rhport; (void)eventid; (void)in_isr; } TU_ATTR_WEAK void tud_sof_cb(uint32_t frame_count) { (void)frame_count; } //--------------------------------------------------------------------+ // Device Data //--------------------------------------------------------------------+ // Invalid driver ID in itf2drv[] ep2drv[][] mapping enum { DRVID_INVALID = 0xFFu }; typedef struct { struct TU_ATTR_PACKED { volatile uint8_t connected : 1; volatile uint8_t addressed : 1; volatile uint8_t suspended : 1; uint8_t remote_wakeup_en : 1; // enable/disable by host uint8_t remote_wakeup_support : 1; // configuration descriptor's attribute uint8_t self_powered : 1; // configuration descriptor's attribute }; volatile uint8_t cfg_num; // current active configuration (0x00 is not configured) uint8_t speed; volatile uint8_t setup_count; volatile uint8_t sof_consumer; uint8_t itf2drv[CFG_TUD_INTERFACE_MAX]; // map interface number to driver (0xff is invalid) uint8_t ep2drv[CFG_TUD_ENDPPOINT_MAX][2]; // map endpoint to driver ( 0xff is invalid ), can use only 4-bit each tu_edpt_state_t ep_status[CFG_TUD_ENDPPOINT_MAX][2]; }usbd_device_t; tu_static usbd_device_t _usbd_dev; //--------------------------------------------------------------------+ // Class Driver //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL #define DRIVER_NAME(_name) _name #else #define DRIVER_NAME(_name) NULL #endif // Built-in class drivers tu_static usbd_class_driver_t const _usbd_driver[] = { #if CFG_TUD_CDC { .name = DRIVER_NAME("CDC"), .init = cdcd_init, .deinit = cdcd_deinit, .reset = cdcd_reset, .open = cdcd_open, .control_xfer_cb = cdcd_control_xfer_cb, .xfer_cb = cdcd_xfer_cb, .sof = NULL }, #endif #if CFG_TUD_MSC { .name = DRIVER_NAME("MSC"), .init = mscd_init, .deinit = NULL, .reset = mscd_reset, .open = mscd_open, .control_xfer_cb = mscd_control_xfer_cb, .xfer_cb = mscd_xfer_cb, .sof = NULL }, #endif #if CFG_TUD_HID { .name = DRIVER_NAME("HID"), .init = hidd_init, .deinit = hidd_deinit, .reset = hidd_reset, .open = hidd_open, .control_xfer_cb = hidd_control_xfer_cb, .xfer_cb = hidd_xfer_cb, .sof = NULL }, #endif #if CFG_TUD_AUDIO { .name = DRIVER_NAME("AUDIO"), .init = audiod_init, .deinit = audiod_deinit, .reset = audiod_reset, .open = audiod_open, .control_xfer_cb = audiod_control_xfer_cb, .xfer_cb = audiod_xfer_cb, .sof = audiod_sof_isr }, #endif #if CFG_TUD_VIDEO { .name = DRIVER_NAME("VIDEO"), .init = videod_init, .deinit = videod_deinit, .reset = videod_reset, .open = videod_open, .control_xfer_cb = videod_control_xfer_cb, .xfer_cb = videod_xfer_cb, .sof = NULL }, #endif #if CFG_TUD_MIDI { .name = DRIVER_NAME("MIDI"), .init = midid_init, .deinit = midid_deinit, .open = midid_open, .reset = midid_reset, .control_xfer_cb = midid_control_xfer_cb, .xfer_cb = midid_xfer_cb, .sof = NULL }, #endif #if CFG_TUD_VENDOR { .name = DRIVER_NAME("VENDOR"), .init = vendord_init, .deinit = vendord_deinit, .reset = vendord_reset, .open = vendord_open, .control_xfer_cb = tud_vendor_control_xfer_cb, .xfer_cb = vendord_xfer_cb, .sof = NULL }, #endif #if CFG_TUD_USBTMC { .name = DRIVER_NAME("TMC"), .init = usbtmcd_init_cb, .deinit = usbtmcd_deinit, .reset = usbtmcd_reset_cb, .open = usbtmcd_open_cb, .control_xfer_cb = usbtmcd_control_xfer_cb, .xfer_cb = usbtmcd_xfer_cb, .sof = NULL }, #endif #if CFG_TUD_DFU_RUNTIME { .name = DRIVER_NAME("DFU-RUNTIME"), .init = dfu_rtd_init, .deinit = dfu_rtd_deinit, .reset = dfu_rtd_reset, .open = dfu_rtd_open, .control_xfer_cb = dfu_rtd_control_xfer_cb, .xfer_cb = NULL, .sof = NULL }, #endif #if CFG_TUD_DFU { .name = DRIVER_NAME("DFU"), .init = dfu_moded_init, .deinit = dfu_moded_deinit, .reset = dfu_moded_reset, .open = dfu_moded_open, .control_xfer_cb = dfu_moded_control_xfer_cb, .xfer_cb = NULL, .sof = NULL }, #endif #if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM { .name = DRIVER_NAME("NET"), .init = netd_init, .deinit = netd_deinit, .reset = netd_reset, .open = netd_open, .control_xfer_cb = netd_control_xfer_cb, .xfer_cb = netd_xfer_cb, .sof = NULL, }, #endif #if CFG_TUD_BTH { .name = DRIVER_NAME("BTH"), .init = btd_init, .deinit = btd_deinit, .reset = btd_reset, .open = btd_open, .control_xfer_cb = btd_control_xfer_cb, .xfer_cb = btd_xfer_cb, .sof = NULL }, #endif }; enum { BUILTIN_DRIVER_COUNT = TU_ARRAY_SIZE(_usbd_driver) }; // Additional class drivers implemented by application tu_static usbd_class_driver_t const * _app_driver = NULL; tu_static uint8_t _app_driver_count = 0; #define TOTAL_DRIVER_COUNT (_app_driver_count + BUILTIN_DRIVER_COUNT) // virtually joins built-in and application drivers together. // Application is positioned first to allow overwriting built-in ones. TU_ATTR_ALWAYS_INLINE static inline usbd_class_driver_t const * get_driver(uint8_t drvid) { usbd_class_driver_t const * driver = NULL; if ( drvid < _app_driver_count ) { // Application drivers driver = &_app_driver[drvid]; } else if ( drvid < TOTAL_DRIVER_COUNT && BUILTIN_DRIVER_COUNT > 0 ){ driver = &_usbd_driver[drvid - _app_driver_count]; } return driver; } //--------------------------------------------------------------------+ // DCD Event //--------------------------------------------------------------------+ enum { RHPORT_INVALID = 0xFFu }; tu_static uint8_t _usbd_rhport = RHPORT_INVALID; // Event queue // usbd_int_set() is used as mutex in OS NONE config OSAL_QUEUE_DEF(usbd_int_set, _usbd_qdef, CFG_TUD_TASK_QUEUE_SZ, dcd_event_t); tu_static osal_queue_t _usbd_q; // Mutex for claiming endpoint #if OSAL_MUTEX_REQUIRED tu_static osal_mutex_def_t _ubsd_mutexdef; tu_static osal_mutex_t _usbd_mutex; #else #define _usbd_mutex NULL #endif TU_ATTR_ALWAYS_INLINE static inline bool queue_event(dcd_event_t const * event, bool in_isr) { TU_ASSERT(osal_queue_send(_usbd_q, event, in_isr)); tud_event_hook_cb(event->rhport, event->event_id, in_isr); return true; } //--------------------------------------------------------------------+ // Prototypes //--------------------------------------------------------------------+ static bool process_control_request(uint8_t rhport, tusb_control_request_t const * p_request); static bool process_set_config(uint8_t rhport, uint8_t cfg_num); static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const * p_request); #if CFG_TUD_TEST_MODE static bool process_test_mode_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); #endif // from usbd_control.c void usbd_control_reset(void); void usbd_control_set_request(tusb_control_request_t const *request); void usbd_control_set_complete_callback( usbd_control_xfer_cb_t fp ); bool usbd_control_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); //--------------------------------------------------------------------+ // Debug //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL tu_static char const* const _usbd_event_str[DCD_EVENT_COUNT] = { "Invalid", "Bus Reset", "Unplugged", "SOF", "Suspend", "Resume", "Setup Received", "Xfer Complete", "Func Call" }; // for usbd_control to print the name of control complete driver void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback) { for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { usbd_class_driver_t const* driver = get_driver(i); if (driver && driver->control_xfer_cb == callback) { TU_LOG_USBD("%s control complete\r\n", driver->name); return; } } } #endif //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ tusb_speed_t tud_speed_get(void) { return (tusb_speed_t) _usbd_dev.speed; } bool tud_connected(void) { return _usbd_dev.connected; } bool tud_mounted(void) { return _usbd_dev.cfg_num ? true : false; } bool tud_suspended(void) { return _usbd_dev.suspended; } bool tud_remote_wakeup(void) { // only wake up host if this feature is supported and enabled and we are suspended TU_VERIFY (_usbd_dev.suspended && _usbd_dev.remote_wakeup_support && _usbd_dev.remote_wakeup_en); dcd_remote_wakeup(_usbd_rhport); return true; } bool tud_disconnect(void) { TU_VERIFY(dcd_disconnect); dcd_disconnect(_usbd_rhport); return true; } bool tud_connect(void) { TU_VERIFY(dcd_connect); dcd_connect(_usbd_rhport); return true; } bool tud_sof_cb_enable(bool en) { usbd_sof_enable(_usbd_rhport, SOF_CONSUMER_USER, en); return true; } //--------------------------------------------------------------------+ // USBD Task //--------------------------------------------------------------------+ bool tud_inited(void) { return _usbd_rhport != RHPORT_INVALID; } bool tud_init(uint8_t rhport) { // skip if already initialized if (tud_inited()) return true; TU_LOG_USBD("USBD init on controller %u\r\n", rhport); TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(usbd_device_t)); TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(dcd_event_t)); TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_fifo_t)); TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_edpt_stream_t)); tu_varclr(&_usbd_dev); #if OSAL_MUTEX_REQUIRED // Init device mutex _usbd_mutex = osal_mutex_create(&_ubsd_mutexdef); TU_ASSERT(_usbd_mutex); #endif // Init device queue & task _usbd_q = osal_queue_create(&_usbd_qdef); TU_ASSERT(_usbd_q); // Get application driver if available if (usbd_app_driver_get_cb) { _app_driver = usbd_app_driver_get_cb(&_app_driver_count); } // Init class drivers for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { usbd_class_driver_t const* driver = get_driver(i); TU_ASSERT(driver && driver->init); TU_LOG_USBD("%s init\r\n", driver->name); driver->init(); } _usbd_rhport = rhport; // Init device controller driver dcd_init(rhport); dcd_int_enable(rhport); return true; } bool tud_deinit(uint8_t rhport) { // skip if not initialized if (!tud_inited()) return true; TU_LOG_USBD("USBD deinit on controller %u\r\n", rhport); // Deinit device controller driver dcd_int_disable(rhport); dcd_disconnect(rhport); dcd_deinit(rhport); // Deinit class drivers for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { usbd_class_driver_t const* driver = get_driver(i); if(driver && driver->deinit) { TU_LOG_USBD("%s deinit\r\n", driver->name); driver->deinit(); } } // Deinit device queue & task osal_queue_delete(_usbd_q); _usbd_q = NULL; #if OSAL_MUTEX_REQUIRED // TODO make sure there is no task waiting on this mutex osal_mutex_delete(_usbd_mutex); _usbd_mutex = NULL; #endif _usbd_rhport = RHPORT_INVALID; return true; } static void configuration_reset(uint8_t rhport) { for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { usbd_class_driver_t const* driver = get_driver(i); TU_ASSERT(driver,); driver->reset(rhport); } tu_varclr(&_usbd_dev); memset(_usbd_dev.itf2drv, DRVID_INVALID, sizeof(_usbd_dev.itf2drv)); // invalid mapping memset(_usbd_dev.ep2drv, DRVID_INVALID, sizeof(_usbd_dev.ep2drv)); // invalid mapping } static void usbd_reset(uint8_t rhport) { configuration_reset(rhport); usbd_control_reset(); } bool tud_task_event_ready(void) { // Skip if stack is not initialized if (!tud_inited()) return false; return !osal_queue_empty(_usbd_q); } /* USB Device Driver task * This top level thread manages all device controller event and delegates events to class-specific drivers. * This should be called periodically within the mainloop or rtos thread. * int main(void) { application_init(); tusb_init(); while(1) { // the mainloop application_code(); tud_task(); // tinyusb device task } } */ void tud_task_ext(uint32_t timeout_ms, bool in_isr) { (void) in_isr; // not implemented yet // Skip if stack is not initialized if (!tud_inited()) return; // Loop until there is no more events in the queue while (1) { dcd_event_t event; if (!osal_queue_receive(_usbd_q, &event, timeout_ms)) return; #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL if (event.event_id == DCD_EVENT_SETUP_RECEIVED) TU_LOG_USBD("\r\n"); // extra line for setup TU_LOG_USBD("USBD %s ", event.event_id < DCD_EVENT_COUNT ? _usbd_event_str[event.event_id] : "CORRUPTED"); #endif switch (event.event_id) { case DCD_EVENT_BUS_RESET: TU_LOG_USBD(": %s Speed\r\n", tu_str_speed[event.bus_reset.speed]); usbd_reset(event.rhport); _usbd_dev.speed = event.bus_reset.speed; break; case DCD_EVENT_UNPLUGGED: TU_LOG_USBD("\r\n"); usbd_reset(event.rhport); if (tud_umount_cb) tud_umount_cb(); break; case DCD_EVENT_SETUP_RECEIVED: _usbd_dev.setup_count--; TU_LOG_BUF(CFG_TUD_LOG_LEVEL, &event.setup_received, 8); if (_usbd_dev.setup_count) { TU_LOG_USBD(" Skipped since there is other SETUP in queue\r\n"); break; } // Mark as connected after receiving 1st setup packet. // But it is easier to set it every time instead of wasting time to check then set _usbd_dev.connected = 1; // mark both in & out control as free _usbd_dev.ep_status[0][TUSB_DIR_OUT].busy = 0; _usbd_dev.ep_status[0][TUSB_DIR_OUT].claimed = 0; _usbd_dev.ep_status[0][TUSB_DIR_IN].busy = 0; _usbd_dev.ep_status[0][TUSB_DIR_IN].claimed = 0; // Process control request if (!process_control_request(event.rhport, &event.setup_received)) { TU_LOG_USBD(" Stall EP0\r\n"); // Failed -> stall both control endpoint IN and OUT dcd_edpt_stall(event.rhport, 0); dcd_edpt_stall(event.rhport, 0 | TUSB_DIR_IN_MASK); } break; case DCD_EVENT_XFER_COMPLETE: { // Invoke the class callback associated with the endpoint address uint8_t const ep_addr = event.xfer_complete.ep_addr; uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const ep_dir = tu_edpt_dir(ep_addr); TU_LOG_USBD("on EP %02X with %u bytes\r\n", ep_addr, (unsigned int) event.xfer_complete.len); _usbd_dev.ep_status[epnum][ep_dir].busy = 0; _usbd_dev.ep_status[epnum][ep_dir].claimed = 0; if (0 == epnum) { usbd_control_xfer_cb(event.rhport, ep_addr, (xfer_result_t) event.xfer_complete.result, event.xfer_complete.len); } else { usbd_class_driver_t const* driver = get_driver(_usbd_dev.ep2drv[epnum][ep_dir]); TU_ASSERT(driver,); TU_LOG_USBD(" %s xfer callback\r\n", driver->name); driver->xfer_cb(event.rhport, ep_addr, (xfer_result_t) event.xfer_complete.result, event.xfer_complete.len); } break; } case DCD_EVENT_SUSPEND: // NOTE: When plugging/unplugging device, the D+/D- state are unstable and // can accidentally meet the SUSPEND condition ( Bus Idle for 3ms ), which result in a series of event // e.g suspend -> resume -> unplug/plug. Skip suspend/resume if not connected if (_usbd_dev.connected) { TU_LOG_USBD(": Remote Wakeup = %u\r\n", _usbd_dev.remote_wakeup_en); if (tud_suspend_cb) tud_suspend_cb(_usbd_dev.remote_wakeup_en); } else { TU_LOG_USBD(" Skipped\r\n"); } break; case DCD_EVENT_RESUME: if (_usbd_dev.connected) { TU_LOG_USBD("\r\n"); if (tud_resume_cb) tud_resume_cb(); } else { TU_LOG_USBD(" Skipped\r\n"); } break; case USBD_EVENT_FUNC_CALL: TU_LOG_USBD("\r\n"); if (event.func_call.func) event.func_call.func(event.func_call.param); break; case DCD_EVENT_SOF: if (tu_bit_test(_usbd_dev.sof_consumer, SOF_CONSUMER_USER)) { TU_LOG_USBD("\r\n"); tud_sof_cb(event.sof.frame_count); } break; default: TU_BREAKPOINT(); break; } // return if there is no more events, for application to run other background if (osal_queue_empty(_usbd_q)) return; } } //--------------------------------------------------------------------+ // Control Request Parser & Handling //--------------------------------------------------------------------+ // Helper to invoke class driver control request handler static bool invoke_class_control(uint8_t rhport, usbd_class_driver_t const * driver, tusb_control_request_t const * request) { usbd_control_set_complete_callback(driver->control_xfer_cb); TU_LOG_USBD(" %s control request\r\n", driver->name); return driver->control_xfer_cb(rhport, CONTROL_STAGE_SETUP, request); } // This handles the actual request and its response. // Returns false if unable to complete the request, causing caller to stall control endpoints. static bool process_control_request(uint8_t rhport, tusb_control_request_t const * p_request) { usbd_control_set_complete_callback(NULL); TU_ASSERT(p_request->bmRequestType_bit.type < TUSB_REQ_TYPE_INVALID); // Vendor request if ( p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_VENDOR ) { TU_VERIFY(tud_vendor_control_xfer_cb); usbd_control_set_complete_callback(tud_vendor_control_xfer_cb); return tud_vendor_control_xfer_cb(rhport, CONTROL_STAGE_SETUP, p_request); } #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL if (TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type && p_request->bRequest <= TUSB_REQ_SYNCH_FRAME) { TU_LOG_USBD(" %s", tu_str_std_request[p_request->bRequest]); if (TUSB_REQ_GET_DESCRIPTOR != p_request->bRequest) TU_LOG_USBD("\r\n"); } #endif switch ( p_request->bmRequestType_bit.recipient ) { //------------- Device Requests e.g in enumeration -------------// case TUSB_REQ_RCPT_DEVICE: if ( TUSB_REQ_TYPE_CLASS == p_request->bmRequestType_bit.type ) { uint8_t const itf = tu_u16_low(p_request->wIndex); TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv)); usbd_class_driver_t const * driver = get_driver(_usbd_dev.itf2drv[itf]); TU_VERIFY(driver); // forward to class driver: "non-STD request to Interface" return invoke_class_control(rhport, driver, p_request); } if ( TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type ) { // Non standard request is not supported TU_BREAKPOINT(); return false; } switch ( p_request->bRequest ) { case TUSB_REQ_SET_ADDRESS: // Depending on mcu, status phase could be sent either before or after changing device address, // or even require stack to not response with status at all // Therefore DCD must take full responsibility to response and include zlp status packet if needed. usbd_control_set_request(p_request); // set request since DCD has no access to tud_control_status() API dcd_set_address(rhport, (uint8_t) p_request->wValue); // skip tud_control_status() _usbd_dev.addressed = 1; break; case TUSB_REQ_GET_CONFIGURATION: { uint8_t cfg_num = _usbd_dev.cfg_num; tud_control_xfer(rhport, p_request, &cfg_num, 1); } break; case TUSB_REQ_SET_CONFIGURATION: { uint8_t const cfg_num = (uint8_t) p_request->wValue; // Only process if new configure is different if (_usbd_dev.cfg_num != cfg_num) { if ( _usbd_dev.cfg_num ) { // already configured: need to clear all endpoints and driver first TU_LOG_USBD(" Clear current Configuration (%u) before switching\r\n", _usbd_dev.cfg_num); // disable SOF dcd_sof_enable(rhport, false); // close all non-control endpoints, cancel all pending transfers if any dcd_edpt_close_all(rhport); // close all drivers and current configured state except bus speed uint8_t const speed = _usbd_dev.speed; configuration_reset(rhport); _usbd_dev.speed = speed; // restore speed } // Handle the new configuration and execute the corresponding callback if ( cfg_num ) { // switch to new configuration if not zero TU_ASSERT( process_set_config(rhport, cfg_num) ); if ( tud_mount_cb ) tud_mount_cb(); } else { if ( tud_umount_cb ) tud_umount_cb(); } } _usbd_dev.cfg_num = cfg_num; tud_control_status(rhport, p_request); } break; case TUSB_REQ_GET_DESCRIPTOR: TU_VERIFY( process_get_descriptor(rhport, p_request) ); break; case TUSB_REQ_SET_FEATURE: // Handle the feature selector switch(p_request->wValue) { // Support for remote wakeup case TUSB_REQ_FEATURE_REMOTE_WAKEUP: TU_LOG_USBD(" Enable Remote Wakeup\r\n"); // Host may enable remote wake up before suspending especially HID device _usbd_dev.remote_wakeup_en = true; tud_control_status(rhport, p_request); break; #if CFG_TUD_TEST_MODE // Support for TEST_MODE case TUSB_REQ_FEATURE_TEST_MODE: { // Only handle the test mode if supported and valid TU_VERIFY(dcd_enter_test_mode && dcd_check_test_mode_support && 0 == tu_u16_low(p_request->wIndex)); uint8_t selector = tu_u16_high(p_request->wIndex); // Stall request if the selected test mode isn't supported if (!dcd_check_test_mode_support((test_mode_t)selector)) { TU_LOG_USBD(" Unsupported Test Mode (test selector index: %d)\r\n", selector); return false; } // Acknowledge request tud_control_status(rhport, p_request); TU_LOG_USBD(" Enter Test Mode (test selector index: %d)\r\n", selector); usbd_control_set_complete_callback(process_test_mode_cb); break; } #endif /* CFG_TUD_TEST_MODE */ // Stall unsupported feature selector default: return false; } break; case TUSB_REQ_CLEAR_FEATURE: // Only support remote wakeup for device feature TU_VERIFY(TUSB_REQ_FEATURE_REMOTE_WAKEUP == p_request->wValue); TU_LOG_USBD(" Disable Remote Wakeup\r\n"); // Host may disable remote wake up after resuming _usbd_dev.remote_wakeup_en = false; tud_control_status(rhport, p_request); break; case TUSB_REQ_GET_STATUS: { // Device status bit mask // - Bit 0: Self Powered // - Bit 1: Remote Wakeup enabled uint16_t status = (uint16_t) ((_usbd_dev.self_powered ? 1u : 0u) | (_usbd_dev.remote_wakeup_en ? 2u : 0u)); tud_control_xfer(rhport, p_request, &status, 2); break; } // Unknown/Unsupported request default: TU_BREAKPOINT(); return false; } break; //------------- Class/Interface Specific Request -------------// case TUSB_REQ_RCPT_INTERFACE: { uint8_t const itf = tu_u16_low(p_request->wIndex); TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv)); usbd_class_driver_t const * driver = get_driver(_usbd_dev.itf2drv[itf]); TU_VERIFY(driver); // all requests to Interface (STD or Class) is forwarded to class driver. // notable requests are: GET HID REPORT DESCRIPTOR, SET_INTERFACE, GET_INTERFACE if ( !invoke_class_control(rhport, driver, p_request) ) { // For GET_INTERFACE and SET_INTERFACE, it is mandatory to respond even if the class // driver doesn't use alternate settings or implement this TU_VERIFY(TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type); switch(p_request->bRequest) { case TUSB_REQ_GET_INTERFACE: case TUSB_REQ_SET_INTERFACE: // Clear complete callback if driver set since it can also stall the request. usbd_control_set_complete_callback(NULL); if (TUSB_REQ_GET_INTERFACE == p_request->bRequest) { uint8_t alternate = 0; tud_control_xfer(rhport, p_request, &alternate, 1); }else { tud_control_status(rhport, p_request); } break; default: return false; } } break; } //------------- Endpoint Request -------------// case TUSB_REQ_RCPT_ENDPOINT: { uint8_t const ep_addr = tu_u16_low(p_request->wIndex); uint8_t const ep_num = tu_edpt_number(ep_addr); uint8_t const ep_dir = tu_edpt_dir(ep_addr); TU_ASSERT(ep_num < TU_ARRAY_SIZE(_usbd_dev.ep2drv) ); usbd_class_driver_t const * driver = get_driver(_usbd_dev.ep2drv[ep_num][ep_dir]); if ( TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type ) { // Forward class request to its driver TU_VERIFY(driver); return invoke_class_control(rhport, driver, p_request); } else { // Handle STD request to endpoint switch ( p_request->bRequest ) { case TUSB_REQ_GET_STATUS: { uint16_t status = usbd_edpt_stalled(rhport, ep_addr) ? 0x0001 : 0x0000; tud_control_xfer(rhport, p_request, &status, 2); } break; case TUSB_REQ_CLEAR_FEATURE: case TUSB_REQ_SET_FEATURE: { if ( TUSB_REQ_FEATURE_EDPT_HALT == p_request->wValue ) { if ( TUSB_REQ_CLEAR_FEATURE == p_request->bRequest ) { usbd_edpt_clear_stall(rhport, ep_addr); }else { usbd_edpt_stall(rhport, ep_addr); } } if (driver) { // Some classes such as USBTMC needs to clear/re-init its buffer when receiving CLEAR_FEATURE request // We will also forward std request targeted endpoint to class drivers as well // STD request must always be ACKed regardless of driver returned value // Also clear complete callback if driver set since it can also stall the request. (void) invoke_class_control(rhport, driver, p_request); usbd_control_set_complete_callback(NULL); // skip ZLP status if driver already did that if ( !_usbd_dev.ep_status[0][TUSB_DIR_IN].busy ) tud_control_status(rhport, p_request); } } break; // Unknown/Unsupported request default: TU_BREAKPOINT(); return false; } } } break; // Unknown recipient default: TU_BREAKPOINT(); return false; } return true; } // Process Set Configure Request // This function parse configuration descriptor & open drivers accordingly static bool process_set_config(uint8_t rhport, uint8_t cfg_num) { // index is cfg_num-1 tusb_desc_configuration_t const * desc_cfg = (tusb_desc_configuration_t const *) tud_descriptor_configuration_cb(cfg_num-1); TU_ASSERT(desc_cfg != NULL && desc_cfg->bDescriptorType == TUSB_DESC_CONFIGURATION); // Parse configuration descriptor _usbd_dev.remote_wakeup_support = (desc_cfg->bmAttributes & TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP) ? 1u : 0u; _usbd_dev.self_powered = (desc_cfg->bmAttributes & TUSB_DESC_CONFIG_ATT_SELF_POWERED ) ? 1u : 0u; // Parse interface descriptor uint8_t const * p_desc = ((uint8_t const*) desc_cfg) + sizeof(tusb_desc_configuration_t); uint8_t const * desc_end = ((uint8_t const*) desc_cfg) + tu_le16toh(desc_cfg->wTotalLength); while( p_desc < desc_end ) { uint8_t assoc_itf_count = 1; // Class will always starts with Interface Association (if any) and then Interface descriptor if ( TUSB_DESC_INTERFACE_ASSOCIATION == tu_desc_type(p_desc) ) { tusb_desc_interface_assoc_t const * desc_iad = (tusb_desc_interface_assoc_t const *) p_desc; assoc_itf_count = desc_iad->bInterfaceCount; p_desc = tu_desc_next(p_desc); // next to Interface // IAD's first interface number and class should match with opened interface //TU_ASSERT(desc_iad->bFirstInterface == desc_itf->bInterfaceNumber && // desc_iad->bFunctionClass == desc_itf->bInterfaceClass); } TU_ASSERT( TUSB_DESC_INTERFACE == tu_desc_type(p_desc) ); tusb_desc_interface_t const * desc_itf = (tusb_desc_interface_t const*) p_desc; // Find driver for this interface uint16_t const remaining_len = (uint16_t) (desc_end-p_desc); uint8_t drv_id; for (drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++) { usbd_class_driver_t const *driver = get_driver(drv_id); TU_ASSERT(driver); uint16_t const drv_len = driver->open(rhport, desc_itf, remaining_len); if ( (sizeof(tusb_desc_interface_t) <= drv_len) && (drv_len <= remaining_len) ) { // Open successfully TU_LOG_USBD(" %s opened\r\n", driver->name); // Some drivers use 2 or more interfaces but may not have IAD e.g MIDI (always) or // BTH (even CDC) with class in device descriptor (single interface) if ( assoc_itf_count == 1) { #if CFG_TUD_CDC if ( driver->open == cdcd_open ) assoc_itf_count = 2; #endif #if CFG_TUD_MIDI if ( driver->open == midid_open ) assoc_itf_count = 2; #endif #if CFG_TUD_BTH && CFG_TUD_BTH_ISO_ALT_COUNT if ( driver->open == btd_open ) assoc_itf_count = 2; #endif } // bind (associated) interfaces to found driver for(uint8_t i=0; ibInterfaceNumber+i; // Interface number must not be used already TU_ASSERT(DRVID_INVALID == _usbd_dev.itf2drv[itf_num]); _usbd_dev.itf2drv[itf_num] = drv_id; } // bind all endpoints to found driver tu_edpt_bind_driver(_usbd_dev.ep2drv, desc_itf, drv_len, drv_id); // next Interface p_desc += drv_len; break; // exit driver find loop } } // Failed if there is no supported drivers TU_ASSERT(drv_id < TOTAL_DRIVER_COUNT); } return true; } // return descriptor's buffer and update desc_len static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const * p_request) { tusb_desc_type_t const desc_type = (tusb_desc_type_t) tu_u16_high(p_request->wValue); uint8_t const desc_index = tu_u16_low( p_request->wValue ); switch(desc_type) { case TUSB_DESC_DEVICE: { TU_LOG_USBD(" Device\r\n"); void* desc_device = (void*) (uintptr_t) tud_descriptor_device_cb(); // Only response with exactly 1 Packet if: not addressed and host requested more data than device descriptor has. // This only happens with the very first get device descriptor and EP0 size = 8 or 16. if ((CFG_TUD_ENDPOINT0_SIZE < sizeof(tusb_desc_device_t)) && !_usbd_dev.addressed && ((tusb_control_request_t const*) p_request)->wLength > sizeof(tusb_desc_device_t)) { // Hack here: we modify the request length to prevent usbd_control response with zlp // since we are responding with 1 packet & less data than wLength. tusb_control_request_t mod_request = *p_request; mod_request.wLength = CFG_TUD_ENDPOINT0_SIZE; return tud_control_xfer(rhport, &mod_request, desc_device, CFG_TUD_ENDPOINT0_SIZE); }else { return tud_control_xfer(rhport, p_request, desc_device, sizeof(tusb_desc_device_t)); } } // break; // unreachable case TUSB_DESC_BOS: { TU_LOG_USBD(" BOS\r\n"); // requested by host if USB > 2.0 ( i.e 2.1 or 3.x ) if (!tud_descriptor_bos_cb) return false; uintptr_t desc_bos = (uintptr_t) tud_descriptor_bos_cb(); TU_ASSERT(desc_bos); // Use offsetof to avoid pointer to the odd/misaligned address uint16_t const total_len = tu_le16toh( tu_unaligned_read16((const void*) (desc_bos + offsetof(tusb_desc_bos_t, wTotalLength))) ); return tud_control_xfer(rhport, p_request, (void*) desc_bos, total_len); } // break; // unreachable case TUSB_DESC_CONFIGURATION: case TUSB_DESC_OTHER_SPEED_CONFIG: { uintptr_t desc_config; if ( desc_type == TUSB_DESC_CONFIGURATION ) { TU_LOG_USBD(" Configuration[%u]\r\n", desc_index); desc_config = (uintptr_t) tud_descriptor_configuration_cb(desc_index); }else { // Host only request this after getting Device Qualifier descriptor TU_LOG_USBD(" Other Speed Configuration\r\n"); TU_VERIFY( tud_descriptor_other_speed_configuration_cb ); desc_config = (uintptr_t) tud_descriptor_other_speed_configuration_cb(desc_index); } TU_ASSERT(desc_config); // Use offsetof to avoid pointer to the odd/misaligned address uint16_t const total_len = tu_le16toh( tu_unaligned_read16((const void*) (desc_config + offsetof(tusb_desc_configuration_t, wTotalLength))) ); return tud_control_xfer(rhport, p_request, (void*) desc_config, total_len); } // break; // unreachable case TUSB_DESC_STRING: { TU_LOG_USBD(" String[%u]\r\n", desc_index); // String Descriptor always uses the desc set from user uint8_t const* desc_str = (uint8_t const*) tud_descriptor_string_cb(desc_index, tu_le16toh(p_request->wIndex)); TU_VERIFY(desc_str); // first byte of descriptor is its size return tud_control_xfer(rhport, p_request, (void*) (uintptr_t) desc_str, tu_desc_len(desc_str)); } // break; // unreachable case TUSB_DESC_DEVICE_QUALIFIER: { TU_LOG_USBD(" Device Qualifier\r\n"); TU_VERIFY( tud_descriptor_device_qualifier_cb ); uint8_t const* desc_qualifier = tud_descriptor_device_qualifier_cb(); TU_VERIFY(desc_qualifier); // first byte of descriptor is its size return tud_control_xfer(rhport, p_request, (void*) (uintptr_t) desc_qualifier, tu_desc_len(desc_qualifier)); } // break; // unreachable default: return false; } } #if CFG_TUD_TEST_MODE static bool process_test_mode_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { // At this point it should already be ensured that dcd_enter_test_mode() is defined // Only enter the test mode after the request for it has completed TU_VERIFY(CONTROL_STAGE_ACK == stage); dcd_enter_test_mode(rhport, (test_mode_t)tu_u16_high(request->wIndex)); return true; } #endif /* CFG_TUD_TEST_MODE */ //--------------------------------------------------------------------+ // DCD Event Handler //--------------------------------------------------------------------+ TU_ATTR_FAST_FUNC void dcd_event_handler(dcd_event_t const* event, bool in_isr) { bool send = false; switch (event->event_id) { case DCD_EVENT_UNPLUGGED: _usbd_dev.connected = 0; _usbd_dev.addressed = 0; _usbd_dev.cfg_num = 0; _usbd_dev.suspended = 0; send = true; break; case DCD_EVENT_SUSPEND: // NOTE: When plugging/unplugging device, the D+/D- state are unstable and // can accidentally meet the SUSPEND condition ( Bus Idle for 3ms ). // In addition, some MCUs such as SAMD or boards that haven no VBUS detection cannot distinguish // suspended vs disconnected. We will skip handling SUSPEND/RESUME event if not currently connected if (_usbd_dev.connected) { _usbd_dev.suspended = 1; send = true; } break; case DCD_EVENT_RESUME: // skip event if not connected (especially required for SAMD) if (_usbd_dev.connected) { _usbd_dev.suspended = 0; send = true; } break; case DCD_EVENT_SOF: // SOF driver handler in ISR context for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { usbd_class_driver_t const* driver = get_driver(i); if (driver && driver->sof) { driver->sof(event->rhport, event->sof.frame_count); } } // Some MCUs after running dcd_remote_wakeup() does not have way to detect the end of remote wakeup // which last 1-15 ms. DCD can use SOF as a clear indicator that bus is back to operational if (_usbd_dev.suspended) { _usbd_dev.suspended = 0; dcd_event_t const event_resume = {.rhport = event->rhport, .event_id = DCD_EVENT_RESUME}; queue_event(&event_resume, in_isr); } if (tu_bit_test(_usbd_dev.sof_consumer, SOF_CONSUMER_USER)) { dcd_event_t const event_sof = {.rhport = event->rhport, .event_id = DCD_EVENT_SOF}; queue_event(&event_sof, in_isr); } break; case DCD_EVENT_SETUP_RECEIVED: _usbd_dev.setup_count++; send = true; break; default: send = true; break; } if (send) { queue_event(event, in_isr); } } //--------------------------------------------------------------------+ // USBD API For Class Driver //--------------------------------------------------------------------+ void usbd_int_set(bool enabled) { if (enabled) { dcd_int_enable(_usbd_rhport); }else { dcd_int_disable(_usbd_rhport); } } // Parse consecutive endpoint descriptors (IN & OUT) bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const* p_desc, uint8_t ep_count, uint8_t xfer_type, uint8_t* ep_out, uint8_t* ep_in) { for(int i=0; ibDescriptorType && xfer_type == desc_ep->bmAttributes.xfer); TU_ASSERT(usbd_edpt_open(rhport, desc_ep)); if ( tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN ) { (*ep_in) = desc_ep->bEndpointAddress; }else { (*ep_out) = desc_ep->bEndpointAddress; } p_desc = tu_desc_next(p_desc); } return true; } // Helper to defer an isr function void usbd_defer_func(osal_task_func_t func, void* param, bool in_isr) { dcd_event_t event = { .rhport = 0, .event_id = USBD_EVENT_FUNC_CALL, }; event.func_call.func = func; event.func_call.param = param; queue_event(&event, in_isr); } //--------------------------------------------------------------------+ // USBD Endpoint API //--------------------------------------------------------------------+ bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const* desc_ep) { rhport = _usbd_rhport; TU_ASSERT(tu_edpt_number(desc_ep->bEndpointAddress) < CFG_TUD_ENDPPOINT_MAX); TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t) _usbd_dev.speed)); return dcd_edpt_open(rhport, desc_ep); } bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr) { (void) rhport; // TODO add this check later, also make sure we don't starve an out endpoint while suspending // TU_VERIFY(tud_ready()); uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); tu_edpt_state_t* ep_state = &_usbd_dev.ep_status[epnum][dir]; return tu_edpt_claim(ep_state, _usbd_mutex); } bool usbd_edpt_release(uint8_t rhport, uint8_t ep_addr) { (void) rhport; uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); tu_edpt_state_t* ep_state = &_usbd_dev.ep_status[epnum][dir]; return tu_edpt_release(ep_state, _usbd_mutex); } bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t* buffer, uint16_t total_bytes) { rhport = _usbd_rhport; uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); // TODO skip ready() check for now since enumeration also use this API // TU_VERIFY(tud_ready()); TU_LOG_USBD(" Queue EP %02X with %u bytes ...\r\n", ep_addr, total_bytes); #if CFG_TUD_LOG_LEVEL >= 3 if(dir == TUSB_DIR_IN) { TU_LOG_MEM(CFG_TUD_LOG_LEVEL, buffer, total_bytes, 2); } #endif // Attempt to transfer on a busy endpoint, sound like an race condition ! TU_ASSERT(_usbd_dev.ep_status[epnum][dir].busy == 0); // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() // could return and USBD task can preempt and clear the busy _usbd_dev.ep_status[epnum][dir].busy = 1; if (dcd_edpt_xfer(rhport, ep_addr, buffer, total_bytes)) { return true; } else { // DCD error, mark endpoint as ready to allow next transfer _usbd_dev.ep_status[epnum][dir].busy = 0; _usbd_dev.ep_status[epnum][dir].claimed = 0; TU_LOG_USBD("FAILED\r\n"); TU_BREAKPOINT(); return false; } } // The number of bytes has to be given explicitly to allow more flexible control of how many // bytes should be written and second to keep the return value free to give back a boolean // success message. If total_bytes is too big, the FIFO will copy only what is available // into the USB buffer! bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t* ff, uint16_t total_bytes) { rhport = _usbd_rhport; uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); TU_LOG_USBD(" Queue ISO EP %02X with %u bytes ... ", ep_addr, total_bytes); // Attempt to transfer on a busy endpoint, sound like an race condition ! TU_ASSERT(_usbd_dev.ep_status[epnum][dir].busy == 0); // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() could return // and usbd task can preempt and clear the busy _usbd_dev.ep_status[epnum][dir].busy = 1; if (dcd_edpt_xfer_fifo(rhport, ep_addr, ff, total_bytes)) { TU_LOG_USBD("OK\r\n"); return true; } else { // DCD error, mark endpoint as ready to allow next transfer _usbd_dev.ep_status[epnum][dir].busy = 0; _usbd_dev.ep_status[epnum][dir].claimed = 0; TU_LOG_USBD("failed\r\n"); TU_BREAKPOINT(); return false; } } bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr) { (void) rhport; uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); return _usbd_dev.ep_status[epnum][dir].busy; } void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr) { rhport = _usbd_rhport; uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); // only stalled if currently cleared TU_LOG_USBD(" Stall EP %02X\r\n", ep_addr); dcd_edpt_stall(rhport, ep_addr); _usbd_dev.ep_status[epnum][dir].stalled = 1; _usbd_dev.ep_status[epnum][dir].busy = 1; } void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr) { rhport = _usbd_rhport; uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); // only clear if currently stalled TU_LOG_USBD(" Clear Stall EP %02X\r\n", ep_addr); dcd_edpt_clear_stall(rhport, ep_addr); _usbd_dev.ep_status[epnum][dir].stalled = 0; _usbd_dev.ep_status[epnum][dir].busy = 0; } bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr) { (void) rhport; uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); return _usbd_dev.ep_status[epnum][dir].stalled; } /** * usbd_edpt_close will disable an endpoint. * In progress transfers on this EP may be delivered after this call. */ void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr) { rhport = _usbd_rhport; TU_ASSERT(dcd_edpt_close, /**/); TU_LOG_USBD(" CLOSING Endpoint: 0x%02X\r\n", ep_addr); uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); dcd_edpt_close(rhport, ep_addr); _usbd_dev.ep_status[epnum][dir].stalled = 0; _usbd_dev.ep_status[epnum][dir].busy = 0; _usbd_dev.ep_status[epnum][dir].claimed = 0; return; } void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en) { rhport = _usbd_rhport; uint8_t consumer_old = _usbd_dev.sof_consumer; // Keep track how many class instances need the SOF interrupt if (en) { _usbd_dev.sof_consumer |= (uint8_t)(1 << consumer); } else { _usbd_dev.sof_consumer &= (uint8_t)(~(1 << consumer)); } // Test logically unequal if(!_usbd_dev.sof_consumer != !consumer_old) { dcd_sof_enable(rhport, _usbd_dev.sof_consumer); } } bool usbd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size) { rhport = _usbd_rhport; TU_ASSERT(dcd_edpt_iso_alloc); TU_ASSERT(tu_edpt_number(ep_addr) < CFG_TUD_ENDPPOINT_MAX); return dcd_edpt_iso_alloc(rhport, ep_addr, largest_packet_size); } bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const* desc_ep) { rhport = _usbd_rhport; uint8_t const epnum = tu_edpt_number(desc_ep->bEndpointAddress); uint8_t const dir = tu_edpt_dir(desc_ep->bEndpointAddress); TU_ASSERT(dcd_edpt_iso_activate); TU_ASSERT(epnum < CFG_TUD_ENDPPOINT_MAX); TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t) _usbd_dev.speed)); _usbd_dev.ep_status[epnum][dir].stalled = 0; _usbd_dev.ep_status[epnum][dir].busy = 0; _usbd_dev.ep_status[epnum][dir].claimed = 0; return dcd_edpt_iso_activate(rhport, desc_ep); } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/device/usbd.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_USBD_H_ #define _TUSB_USBD_H_ #include "common/tusb_common.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ // Init device stack on roothub port bool tud_init (uint8_t rhport); // Deinit device stack on roothub port bool tud_deinit(uint8_t rhport); // Check if device stack is already initialized bool tud_inited(void); // Task function should be called in main/rtos loop, extended version of tud_task() // - timeout_ms: millisecond to wait, zero = no wait, 0xFFFFFFFF = wait forever // - in_isr: if function is called in ISR void tud_task_ext(uint32_t timeout_ms, bool in_isr); // Task function should be called in main/rtos loop TU_ATTR_ALWAYS_INLINE static inline void tud_task (void) { tud_task_ext(UINT32_MAX, false); } // Check if there is pending events need processing by tud_task() bool tud_task_event_ready(void); #ifndef _TUSB_DCD_H_ extern void dcd_int_handler(uint8_t rhport); #endif // Interrupt handler, name alias to DCD #define tud_int_handler dcd_int_handler // Get current bus speed tusb_speed_t tud_speed_get(void); // Check if device is connected (may not mounted/configured yet) // True if just got out of Bus Reset and received the very first data from host bool tud_connected(void); // Check if device is connected and configured bool tud_mounted(void); // Check if device is suspended bool tud_suspended(void); // Check if device is ready to transfer TU_ATTR_ALWAYS_INLINE static inline bool tud_ready(void) { return tud_mounted() && !tud_suspended(); } // Remote wake up host, only if suspended and enabled by host bool tud_remote_wakeup(void); // Enable pull-up resistor on D+ D- // Return false on unsupported MCUs bool tud_disconnect(void); // Disable pull-up resistor on D+ D- // Return false on unsupported MCUs bool tud_connect(void); // Enable or disable the Start Of Frame callback support bool tud_sof_cb_enable(bool en); // Carry out Data and Status stage of control transfer // - If len = 0, it is equivalent to sending status only // - If len > wLength : it will be truncated bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const * request, void* buffer, uint16_t len); // Send STATUS (zero length) packet bool tud_control_status(uint8_t rhport, tusb_control_request_t const * request); //--------------------------------------------------------------------+ // Application Callbacks (WEAK is optional) //--------------------------------------------------------------------+ // Invoked when received GET DEVICE DESCRIPTOR request // Application return pointer to descriptor uint8_t const * tud_descriptor_device_cb(void); // Invoked when received GET CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete uint8_t const * tud_descriptor_configuration_cb(uint8_t index); // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid); // Invoked when received GET BOS DESCRIPTOR request // Application return pointer to descriptor TU_ATTR_WEAK uint8_t const * tud_descriptor_bos_cb(void); // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. TU_ATTR_WEAK uint8_t const* tud_descriptor_device_qualifier_cb(void); // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa TU_ATTR_WEAK uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index); // Invoked when device is mounted (configured) TU_ATTR_WEAK void tud_mount_cb(void); // Invoked when device is unmounted TU_ATTR_WEAK void tud_umount_cb(void); // Invoked when usb bus is suspended // Within 7ms, device must draw an average of current less than 2.5 mA from bus TU_ATTR_WEAK void tud_suspend_cb(bool remote_wakeup_en); // Invoked when usb bus is resumed TU_ATTR_WEAK void tud_resume_cb(void); // Invoked when there is a new usb event, which need to be processed by tud_task()/tud_task_ext() void tud_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr); // Invoked when a new (micro) frame started void tud_sof_cb(uint32_t frame_count); // Invoked when received control request with VENDOR TYPE TU_ATTR_WEAK bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); //--------------------------------------------------------------------+ // Binary Device Object Store (BOS) Descriptor Templates //--------------------------------------------------------------------+ #define TUD_BOS_DESC_LEN 5 // total length, number of device caps #define TUD_BOS_DESCRIPTOR(_total_len, _caps_num) \ 5, TUSB_DESC_BOS, U16_TO_U8S_LE(_total_len), _caps_num // Device Capability Platform 128-bit UUID + Data #define TUD_BOS_PLATFORM_DESCRIPTOR(...) \ 4+TU_ARGS_NUM(__VA_ARGS__), TUSB_DESC_DEVICE_CAPABILITY, DEVICE_CAPABILITY_PLATFORM, 0x00, __VA_ARGS__ //------------- WebUSB BOS Platform -------------// // Descriptor Length #define TUD_BOS_WEBUSB_DESC_LEN 24 // Vendor Code, iLandingPage #define TUD_BOS_WEBUSB_DESCRIPTOR(_vendor_code, _ipage) \ TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_WEBUSB_UUID, U16_TO_U8S_LE(0x0100), _vendor_code, _ipage) #define TUD_BOS_WEBUSB_UUID \ 0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, \ 0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65 //------------- Microsoft OS 2.0 Platform -------------// #define TUD_BOS_MICROSOFT_OS_DESC_LEN 28 // Total Length of descriptor set, vendor code #define TUD_BOS_MS_OS_20_DESCRIPTOR(_desc_set_len, _vendor_code) \ TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_MS_OS_20_UUID, U32_TO_U8S_LE(0x06030000), U16_TO_U8S_LE(_desc_set_len), _vendor_code, 0) #define TUD_BOS_MS_OS_20_UUID \ 0xDF, 0x60, 0xDD, 0xD8, 0x89, 0x45, 0xC7, 0x4C, \ 0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F //--------------------------------------------------------------------+ // Configuration Descriptor Templates //--------------------------------------------------------------------+ #define TUD_CONFIG_DESC_LEN (9) // Config number, interface count, string index, total length, attribute, power in mA #define TUD_CONFIG_DESCRIPTOR(config_num, _itfcount, _stridx, _total_len, _attribute, _power_ma) \ 9, TUSB_DESC_CONFIGURATION, U16_TO_U8S_LE(_total_len), _itfcount, config_num, _stridx, TU_BIT(7) | _attribute, (_power_ma)/2 //--------------------------------------------------------------------+ // CDC Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 66 bytes #define TUD_CDC_DESC_LEN (8+9+5+5+4+5+7+9+7+7) // CDC Descriptor Template // Interface number, string index, EP notification address and size, EP data address (out, in) and size. #define TUD_CDC_DESCRIPTOR(_itfnum, _stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize) \ /* Interface Associate */\ 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL, CDC_COMM_PROTOCOL_NONE, 0,\ /* CDC Control Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL, CDC_COMM_PROTOCOL_NONE, _stridx,\ /* CDC Header */\ 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0120),\ /* CDC Call */\ 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, (uint8_t)((_itfnum) + 1),\ /* CDC ACM: support line request + send break */\ 4, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT, 6,\ /* CDC Union */\ 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ /* Endpoint Notification */\ 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 16,\ /* CDC Data Interface */\ 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ /* Endpoint Out */\ 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ /* Endpoint In */\ 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // MSC Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 23 bytes #define TUD_MSC_DESC_LEN (9 + 7 + 7) // Interface number, string index, EP Out & EP In address, EP size #define TUD_MSC_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ /* Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_MSC, MSC_SUBCLASS_SCSI, MSC_PROTOCOL_BOT, _stridx,\ /* Endpoint Out */\ 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ /* Endpoint In */\ 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // HID Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 25 bytes #define TUD_HID_DESC_LEN (9 + 9 + 7) // HID Input only descriptor // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval #define TUD_HID_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epin, _epsize, _ep_interval) \ /* Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_HID, (uint8_t)((_boot_protocol) ? (uint8_t)HID_SUBCLASS_BOOT : 0), _boot_protocol, _stridx,\ /* HID descriptor */\ 9, HID_DESC_TYPE_HID, U16_TO_U8S_LE(0x0111), 0, 1, HID_DESC_TYPE_REPORT, U16_TO_U8S_LE(_report_desc_len),\ /* Endpoint In */\ 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval // Length of template descriptor: 32 bytes #define TUD_HID_INOUT_DESC_LEN (9 + 9 + 7 + 7) // HID Input & Output descriptor // Interface number, string index, protocol, report descriptor len, EP OUT & IN address, size & polling interval #define TUD_HID_INOUT_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epout, _epin, _epsize, _ep_interval) \ /* Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_HID, (uint8_t)((_boot_protocol) ? (uint8_t)HID_SUBCLASS_BOOT : 0), _boot_protocol, _stridx,\ /* HID descriptor */\ 9, HID_DESC_TYPE_HID, U16_TO_U8S_LE(0x0111), 0, 1, HID_DESC_TYPE_REPORT, U16_TO_U8S_LE(_report_desc_len),\ /* Endpoint Out */\ 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval, \ /* Endpoint In */\ 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval //--------------------------------------------------------------------+ // MIDI Descriptor Templates // Note: MIDI v1.0 is based on Audio v1.0 //--------------------------------------------------------------------+ #define TUD_MIDI_DESC_HEAD_LEN (9 + 9 + 9 + 7) #define TUD_MIDI_DESC_HEAD(_itfnum, _stridx, _numcables) \ /* Audio Control (AC) Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_FUNC_PROTOCOL_CODE_UNDEF, _stridx,\ /* AC Header */\ 9, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(0x0100), U16_TO_U8S_LE(0x0009), 1, (uint8_t)((_itfnum) + 1),\ /* MIDI Streaming (MS) Interface */\ 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 2, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_MIDI_STREAMING, AUDIO_FUNC_PROTOCOL_CODE_UNDEF, 0,\ /* MS Header */\ 7, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_HEADER, U16_TO_U8S_LE(0x0100), U16_TO_U8S_LE(7 + (_numcables) * TUD_MIDI_DESC_JACK_LEN + 2 * TUD_MIDI_DESC_EP_LEN(_numcables)) #define TUD_MIDI_JACKID_IN_EMB(_cablenum) \ (uint8_t)(((_cablenum) - 1) * 4 + 1) #define TUD_MIDI_JACKID_IN_EXT(_cablenum) \ (uint8_t)(((_cablenum) - 1) * 4 + 2) #define TUD_MIDI_JACKID_OUT_EMB(_cablenum) \ (uint8_t)(((_cablenum) - 1) * 4 + 3) #define TUD_MIDI_JACKID_OUT_EXT(_cablenum) \ (uint8_t)(((_cablenum) - 1) * 4 + 4) #define TUD_MIDI_DESC_JACK_LEN (6 + 6 + 9 + 9) #define TUD_MIDI_DESC_JACK_DESC(_cablenum, _stridx) \ /* MS In Jack (Embedded) */\ 6, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_IN_JACK, MIDI_JACK_EMBEDDED, TUD_MIDI_JACKID_IN_EMB(_cablenum), _stridx,\ /* MS In Jack (External) */\ 6, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_IN_JACK, MIDI_JACK_EXTERNAL, TUD_MIDI_JACKID_IN_EXT(_cablenum), _stridx,\ /* MS Out Jack (Embedded), connected to In Jack External */\ 9, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_OUT_JACK, MIDI_JACK_EMBEDDED, TUD_MIDI_JACKID_OUT_EMB(_cablenum), 1, TUD_MIDI_JACKID_IN_EXT(_cablenum), 1, _stridx,\ /* MS Out Jack (External), connected to In Jack Embedded */\ 9, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_OUT_JACK, MIDI_JACK_EXTERNAL, TUD_MIDI_JACKID_OUT_EXT(_cablenum), 1, TUD_MIDI_JACKID_IN_EMB(_cablenum), 1, _stridx #define TUD_MIDI_DESC_JACK(_cablenum) TUD_MIDI_DESC_JACK_DESC(_cablenum, 0) #define TUD_MIDI_DESC_EP_LEN(_numcables) (9 + 4 + (_numcables)) #define TUD_MIDI_DESC_EP(_epout, _epsize, _numcables) \ /* Endpoint: Note Audio v1.0's endpoint has 9 bytes instead of 7 */\ 9, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0, 0, 0, \ /* MS Endpoint (connected to embedded jack) */\ (uint8_t)(4 + (_numcables)), TUSB_DESC_CS_ENDPOINT, MIDI_CS_ENDPOINT_GENERAL, _numcables // Length of template descriptor (88 bytes) #define TUD_MIDI_DESC_LEN (TUD_MIDI_DESC_HEAD_LEN + TUD_MIDI_DESC_JACK_LEN + TUD_MIDI_DESC_EP_LEN(1) * 2) // MIDI simple descriptor // - 1 Embedded Jack In connected to 1 External Jack Out // - 1 Embedded Jack out connected to 1 External Jack In #define TUD_MIDI_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ TUD_MIDI_DESC_HEAD(_itfnum, _stridx, 1),\ TUD_MIDI_DESC_JACK_DESC(1, 0),\ TUD_MIDI_DESC_EP(_epout, _epsize, 1),\ TUD_MIDI_JACKID_IN_EMB(1),\ TUD_MIDI_DESC_EP(_epin, _epsize, 1),\ TUD_MIDI_JACKID_OUT_EMB(1) //--------------------------------------------------------------------+ // Audio v2.0 Descriptor Templates //--------------------------------------------------------------------+ /* Standard Interface Association Descriptor (IAD) */ #define TUD_AUDIO_DESC_IAD_LEN 8 #define TUD_AUDIO_DESC_IAD(_firstitf, _nitfs, _stridx) \ TUD_AUDIO_DESC_IAD_LEN, TUSB_DESC_INTERFACE_ASSOCIATION, _firstitf, _nitfs, TUSB_CLASS_AUDIO, AUDIO_FUNCTION_SUBCLASS_UNDEFINED, AUDIO_FUNC_PROTOCOL_CODE_V2, _stridx /* Standard AC Interface Descriptor(4.7.1) */ #define TUD_AUDIO_DESC_STD_AC_LEN 9 #define TUD_AUDIO_DESC_STD_AC(_itfnum, _nEPs, _stridx) /* _nEPs is 0 or 1 */\ TUD_AUDIO_DESC_STD_AC_LEN, TUSB_DESC_INTERFACE, _itfnum, /* fixed to zero */ 0x00, _nEPs, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_INT_PROTOCOL_CODE_V2, _stridx /* Class-Specific AC Interface Header Descriptor(4.7.2) */ #define TUD_AUDIO_DESC_CS_AC_LEN 9 #define TUD_AUDIO_DESC_CS_AC(_bcdADC, _category, _totallen, _ctrl) /* _bcdADC : Audio Device Class Specification Release Number in Binary-Coded Decimal, _category : see audio_function_t, _totallen : Total number of bytes returned for the class-specific AudioControl interface i.e. Clock Source, Unit and Terminal descriptors - Do not include TUD_AUDIO_DESC_CS_AC_LEN, we already do this here*/ \ TUD_AUDIO_DESC_CS_AC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(_bcdADC), _category, U16_TO_U8S_LE(_totallen + TUD_AUDIO_DESC_CS_AC_LEN), _ctrl /* Clock Source Descriptor(4.7.2.1) */ #define TUD_AUDIO_DESC_CLK_SRC_LEN 8 #define TUD_AUDIO_DESC_CLK_SRC(_clkid, _attr, _ctrl, _assocTerm, _stridx) \ TUD_AUDIO_DESC_CLK_SRC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE, _clkid, _attr, _ctrl, _assocTerm, _stridx /* Input Terminal Descriptor(4.7.2.4) */ #define TUD_AUDIO_DESC_INPUT_TERM_LEN 17 #define TUD_AUDIO_DESC_INPUT_TERM(_termid, _termtype, _assocTerm, _clkid, _nchannelslogical, _channelcfg, _idxchannelnames, _ctrl, _stridx) \ TUD_AUDIO_DESC_INPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL, _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _clkid, _nchannelslogical, U32_TO_U8S_LE(_channelcfg), _idxchannelnames, U16_TO_U8S_LE(_ctrl), _stridx /* Output Terminal Descriptor(4.7.2.5) */ #define TUD_AUDIO_DESC_OUTPUT_TERM_LEN 12 #define TUD_AUDIO_DESC_OUTPUT_TERM(_termid, _termtype, _assocTerm, _srcid, _clkid, _ctrl, _stridx) \ TUD_AUDIO_DESC_OUTPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL, _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _srcid, _clkid, U16_TO_U8S_LE(_ctrl), _stridx /* Feature Unit Descriptor(4.7.2.8) */ // 1 - Channel #define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN 6+(1+1)*4 #define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, _stridx) \ TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), U32_TO_U8S_LE(_ctrlch1), _stridx // 2 - Channels #define TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN (6+(2+1)*4) #define TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, _ctrlch2, _stridx) \ TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), U32_TO_U8S_LE(_ctrlch1), U32_TO_U8S_LE(_ctrlch2), _stridx // 4 - Channels #define TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN (6+(4+1)*4) #define TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, _ctrlch2, _ctrlch3, _ctrlch4, _stridx) \ TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), U32_TO_U8S_LE(_ctrlch1), U32_TO_U8S_LE(_ctrlch2), U32_TO_U8S_LE(_ctrlch3), U32_TO_U8S_LE(_ctrlch4), _stridx // For more channels, add definitions here /* Standard AC Interrupt Endpoint Descriptor(4.8.2.1) */ #define TUD_AUDIO_DESC_STD_AC_INT_EP_LEN 7 #define TUD_AUDIO_DESC_STD_AC_INT_EP(_ep, _interval) \ TUD_AUDIO_DESC_STD_AC_INT_EP_LEN, TUSB_DESC_ENDPOINT, _ep, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(6), _interval /* Standard AS Interface Descriptor(4.9.1) */ #define TUD_AUDIO_DESC_STD_AS_INT_LEN 9 #define TUD_AUDIO_DESC_STD_AS_INT(_itfnum, _altset, _nEPs, _stridx) \ TUD_AUDIO_DESC_STD_AS_INT_LEN, TUSB_DESC_INTERFACE, _itfnum, _altset, _nEPs, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_STREAMING, AUDIO_INT_PROTOCOL_CODE_V2, _stridx /* Class-Specific AS Interface Descriptor(4.9.2) */ #define TUD_AUDIO_DESC_CS_AS_INT_LEN 16 #define TUD_AUDIO_DESC_CS_AS_INT(_termid, _ctrl, _formattype, _formats, _nchannelsphysical, _channelcfg, _stridx) \ TUD_AUDIO_DESC_CS_AS_INT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_AS_GENERAL, _termid, _ctrl, _formattype, U32_TO_U8S_LE(_formats), _nchannelsphysical, U32_TO_U8S_LE(_channelcfg), _stridx /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ #define TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN 6 #define TUD_AUDIO_DESC_TYPE_I_FORMAT(_subslotsize, _bitresolution) /* _subslotsize is number of bytes per sample (i.e. subslot) and can be 1,2,3, or 4 */\ TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_FORMAT_TYPE, AUDIO_FORMAT_TYPE_I, _subslotsize, _bitresolution /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ #define TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN 7 #define TUD_AUDIO_DESC_STD_AS_ISO_EP(_ep, _attr, _maxEPsize, _interval) \ TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN, TUSB_DESC_ENDPOINT, _ep, _attr, U16_TO_U8S_LE(_maxEPsize), _interval /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ #define TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN 8 #define TUD_AUDIO_DESC_CS_AS_ISO_EP(_attr, _ctrl, _lockdelayunit, _lockdelay) \ TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN, TUSB_DESC_CS_ENDPOINT, AUDIO_CS_EP_SUBTYPE_GENERAL, _attr, _ctrl, _lockdelayunit, U16_TO_U8S_LE(_lockdelay) /* Standard AS Isochronous Feedback Endpoint Descriptor(4.10.2.1) */ #define TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN 7 #define TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(_ep, _interval) \ TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN, TUSB_DESC_ENDPOINT, _ep, (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_NO_SYNC | (uint8_t)TUSB_ISO_EP_ATT_EXPLICIT_FB), U16_TO_U8S_LE(4), _interval // AUDIO simple descriptor (UAC2) for 1 microphone input // - 1 Input Terminal, 1 Feature Unit (Mute and Volume Control), 1 Output Terminal, 1 Clock Source #define TUD_AUDIO_MIC_ONE_CH_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ + TUD_AUDIO_DESC_STD_AC_LEN\ + TUD_AUDIO_DESC_CS_AC_LEN\ + TUD_AUDIO_DESC_CLK_SRC_LEN\ + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN\ + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) #define TUD_AUDIO_MIC_ONE_CH_DESC_N_AS_INT 1 // Number of AS interfaces #define TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epin, _epsize) \ /* Standard Interface Association Descriptor (IAD) */\ TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ /* Standard AC Interface Descriptor(4.7.1) */\ TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ /* Clock Source Descriptor(4.7.2.1) */\ TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ /* Input Terminal Descriptor(4.7.2.4) */\ TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, /*_stridx*/ 0x00),\ /* Output Terminal Descriptor(4.7.2.5) */\ TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ /* Feature Unit Descriptor(4.7.2.8) */\ TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(/*_unitid*/ 0x02, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\ /* Standard AS Interface Descriptor(4.9.1) */\ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ /* Standard AS Interface Descriptor(4.9.1) */\ /* Interface 1, Alternate 1 - alternate interface for data streaming */\ TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\ /* Class-Specific AS Interface Descriptor(4.9.2) */\ TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ TUD_AUDIO_DESC_TYPE_I_FORMAT(_nBytesPerSample, _nBitsUsedPerSample),\ /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ _epsize, /*_interval*/ 0x01),\ /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) // AUDIO simple descriptor (UAC2) for 4 microphone input // - 1 Input Terminal, 1 Feature Unit (Mute and Volume Control), 1 Output Terminal, 1 Clock Source #define TUD_AUDIO_MIC_FOUR_CH_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ + TUD_AUDIO_DESC_STD_AC_LEN\ + TUD_AUDIO_DESC_CS_AC_LEN\ + TUD_AUDIO_DESC_CLK_SRC_LEN\ + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN\ + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) #define TUD_AUDIO_MIC_FOUR_CH_DESC_N_AS_INT 1 // Number of AS interfaces #define TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epin, _epsize) \ /* Standard Interface Association Descriptor (IAD) */\ TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ /* Standard AC Interface Descriptor(4.7.1) */\ TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ /* Clock Source Descriptor(4.7.2.1) */\ TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ /* Input Terminal Descriptor(4.7.2.4) */\ TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x04, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, /*_stridx*/ 0x00),\ /* Output Terminal Descriptor(4.7.2.5) */\ TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ /* Feature Unit Descriptor(4.7.2.8) */\ TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL(/*_unitid*/ 0x02, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch2*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch3*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch4*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\ /* Standard AS Interface Descriptor(4.9.1) */\ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ /* Standard AS Interface Descriptor(4.9.1) */\ /* Interface 1, Alternate 1 - alternate interface for data streaming */\ TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\ /* Class-Specific AS Interface Descriptor(4.9.2) */\ TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x04, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ TUD_AUDIO_DESC_TYPE_I_FORMAT(_nBytesPerSample, _nBitsUsedPerSample),\ /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ _epsize, /*_interval*/ 0x01),\ /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) // AUDIO simple descriptor (UAC2) for mono speaker // - 1 Input Terminal, 2 Feature Unit (Mute and Volume Control), 3 Output Terminal, 4 Clock Source #define TUD_AUDIO_SPEAKER_MONO_FB_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ + TUD_AUDIO_DESC_STD_AC_LEN\ + TUD_AUDIO_DESC_CS_AC_LEN\ + TUD_AUDIO_DESC_CLK_SRC_LEN\ + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN\ + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN) #define TUD_AUDIO_SPEAKER_MONO_FB_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epout, _epsize, _epfb) \ /* Standard Interface Association Descriptor (IAD) */\ TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ /* Standard AC Interface Descriptor(4.7.1) */\ TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_DESKTOP_SPEAKER, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ /* Clock Source Descriptor(4.7.2.1) */\ TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ /* Input Terminal Descriptor(4.7.2.4) */\ TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ /* Output Terminal Descriptor(4.7.2.5) */\ TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_OUT_DESKTOP_SPEAKER, /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ /* Feature Unit Descriptor(4.7.2.8) */\ TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(/*_unitid*/ 0x02, /*_srcid*/ 0x01, /*_ctrlch0master*/ 0 * (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch1*/ 0 * (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_stridx*/ 0x00),\ /* Standard AS Interface Descriptor(4.9.1) */\ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ /* Standard AS Interface Descriptor(4.9.1) */\ /* Interface 1, Alternate 1 - alternate interface for data streaming */\ TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x02, /*_stridx*/ 0x00),\ /* Class-Specific AS Interface Descriptor(4.9.2) */\ TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ 0x01, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ TUD_AUDIO_DESC_TYPE_I_FORMAT(_nBytesPerSample, _nBitsUsedPerSample),\ /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ _epsize, /*_interval*/ 0x01),\ /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000),\ /* Standard AS Isochronous Feedback Endpoint Descriptor(4.10.2.1) */\ TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(/*_ep*/ _epfb, /*_interval*/ 1)\ // Calculate wMaxPacketSize of Endpoints #define TUD_AUDIO_EP_SIZE(_maxFrequency, _nBytesPerSample, _nChannels) \ ((((_maxFrequency + (TUD_OPT_HIGH_SPEED ? 7999 : 999)) / (TUD_OPT_HIGH_SPEED ? 8000 : 1000)) + 1) * _nBytesPerSample * _nChannels) //--------------------------------------------------------------------+ // USBTMC/USB488 Descriptor Templates //--------------------------------------------------------------------+ #define TUD_USBTMC_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC) #define TUD_USBTMC_APP_SUBCLASS 0x03u #define TUD_USBTMC_PROTOCOL_STD 0x00u #define TUD_USBTMC_PROTOCOL_USB488 0x01u // Interface number, number of endpoints, EP string index, USB_TMC_PROTOCOL*, bulk-out endpoint ID, // bulk-in endpoint ID #define TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints, _stridx, _itfProtocol) \ /* Interface */ \ 0x09, TUSB_DESC_INTERFACE, _itfnum, 0x00, _bNumEndpoints, TUD_USBTMC_APP_CLASS, TUD_USBTMC_APP_SUBCLASS, _itfProtocol, _stridx #define TUD_USBTMC_IF_DESCRIPTOR_LEN 9u #define TUD_USBTMC_BULK_DESCRIPTORS(_epout, _epin, _bulk_epsize) \ /* Endpoint Out */ \ 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_bulk_epsize), 0u, \ /* Endpoint In */ \ 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_bulk_epsize), 0u #define TUD_USBTMC_BULK_DESCRIPTORS_LEN (7u+7u) /* optional interrupt endpoint */ \ // _int_pollingInterval : for LS/FS, expressed in frames (1ms each). 16 may be a good number? #define TUD_USBTMC_INT_DESCRIPTOR(_ep_interrupt, _ep_interrupt_size, _int_pollingInterval ) \ 7, TUSB_DESC_ENDPOINT, _ep_interrupt, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_interrupt_size), _int_pollingInterval #define TUD_USBTMC_INT_DESCRIPTOR_LEN (7u) //--------------------------------------------------------------------+ // Vendor Descriptor Templates //--------------------------------------------------------------------+ #define TUD_VENDOR_DESC_LEN (9+7+7) // Interface number, string index, EP Out & IN address, EP size #define TUD_VENDOR_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ /* Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_VENDOR_SPECIFIC, 0x00, 0x00, _stridx,\ /* Endpoint Out */\ 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ /* Endpoint In */\ 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // DFU Runtime Descriptor Templates //--------------------------------------------------------------------+ #define TUD_DFU_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC) #define TUD_DFU_APP_SUBCLASS (APP_SUBCLASS_DFU_RUNTIME) // Length of template descriptr: 18 bytes #define TUD_DFU_RT_DESC_LEN (9 + 9) // DFU runtime descriptor // Interface number, string index, attributes, detach timeout, transfer size #define TUD_DFU_RT_DESCRIPTOR(_itfnum, _stridx, _attr, _timeout, _xfer_size) \ /* Interface */ \ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, DFU_PROTOCOL_RT, _stridx, \ /* Function */ \ 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), U16_TO_U8S_LE(0x0101) //--------------------------------------------------------------------+ // DFU Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 9 bytes + number of alternatives * 9 #define TUD_DFU_DESC_LEN(_alt_count) (9 + (_alt_count) * 9) // Interface number, Alternate count, starting string index, attributes, detach timeout, transfer size // Note: Alternate count must be numeric or macro, string index is increased by one for each Alt interface #define TUD_DFU_DESCRIPTOR(_itfnum, _alt_count, _stridx, _attr, _timeout, _xfer_size) \ TU_XSTRCAT(_TUD_DFU_ALT_,_alt_count)(_itfnum, 0, _stridx), \ /* Function */ \ 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), U16_TO_U8S_LE(0x0101) #define _TUD_DFU_ALT(_itfnum, _alt, _stridx) \ /* Interface */ \ 9, TUSB_DESC_INTERFACE, _itfnum, _alt, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, DFU_PROTOCOL_DFU, _stridx #define _TUD_DFU_ALT_1(_itfnum, _alt_count, _stridx) \ _TUD_DFU_ALT(_itfnum, _alt_count, _stridx) #define _TUD_DFU_ALT_2(_itfnum, _alt_count, _stridx) \ _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ _TUD_DFU_ALT_1(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_3(_itfnum, _alt_count, _stridx) \ _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ _TUD_DFU_ALT_2(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_4(_itfnum, _alt_count, _stridx) \ _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ _TUD_DFU_ALT_3(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_5(_itfnum, _alt_count, _stridx) \ _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ _TUD_DFU_ALT_4(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_6(_itfnum, _alt_count, _stridx) \ _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ _TUD_DFU_ALT_5(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_7(_itfnum, _alt_count, _stridx) \ _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ _TUD_DFU_ALT_6(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_8(_itfnum, _alt_count, _stridx) \ _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ _TUD_DFU_ALT_7(_itfnum, _alt_count+1, _stridx+1) //--------------------------------------------------------------------+ // CDC-ECM Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 71 bytes #define TUD_CDC_ECM_DESC_LEN (8+9+5+5+13+7+9+9+7+7) // CDC-ECM Descriptor Template // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. #define TUD_CDC_ECM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize, _maxsegmentsize) \ /* Interface Association */\ 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL, 0, 0,\ /* CDC Control Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL, 0, _desc_stridx,\ /* CDC-ECM Header */\ 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0120),\ /* CDC-ECM Union */\ 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ /* CDC-ECM Functional Descriptor */\ 13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0,\ /* Endpoint Notification */\ 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 1,\ /* CDC Data Interface (default inactive) */\ 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 0, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ /* CDC Data Interface (alternative active) */\ 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 1, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ /* Endpoint In */\ 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ /* Endpoint Out */\ 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // RNDIS Descriptor Templates //--------------------------------------------------------------------+ #if 0 /* Windows XP */ #define TUD_RNDIS_ITF_CLASS TUSB_CLASS_CDC #define TUD_RNDIS_ITF_SUBCLASS CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL #define TUD_RNDIS_ITF_PROTOCOL 0xFF /* CDC_COMM_PROTOCOL_MICROSOFT_RNDIS */ #else /* Windows 7+ */ #define TUD_RNDIS_ITF_CLASS TUSB_CLASS_WIRELESS_CONTROLLER #define TUD_RNDIS_ITF_SUBCLASS 0x01 #define TUD_RNDIS_ITF_PROTOCOL 0x03 #endif // Length of template descriptor: 66 bytes #define TUD_RNDIS_DESC_LEN (8+9+5+5+4+5+7+9+7+7) // RNDIS Descriptor Template // Interface number, string index, EP notification address and size, EP data address (out, in) and size. #define TUD_RNDIS_DESCRIPTOR(_itfnum, _stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize) \ /* Interface Association */\ 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUD_RNDIS_ITF_CLASS, TUD_RNDIS_ITF_SUBCLASS, TUD_RNDIS_ITF_PROTOCOL, 0,\ /* CDC Control Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUD_RNDIS_ITF_CLASS, TUD_RNDIS_ITF_SUBCLASS, TUD_RNDIS_ITF_PROTOCOL, _stridx,\ /* CDC-ACM Header */\ 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0110),\ /* CDC Call Management */\ 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, (uint8_t)((_itfnum) + 1),\ /* ACM */\ 4, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT, 0,\ /* CDC Union */\ 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ /* Endpoint Notification */\ 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 1,\ /* CDC Data Interface */\ 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ /* Endpoint In */\ 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ /* Endpoint Out */\ 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // Bluetooth Radio Descriptor Templates //--------------------------------------------------------------------+ #define TUD_BT_APP_CLASS (TUSB_CLASS_WIRELESS_CONTROLLER) #define TUD_BT_APP_SUBCLASS 0x01 #define TUD_BT_PROTOCOL_PRIMARY_CONTROLLER 0x01 #define TUD_BT_PROTOCOL_AMP_CONTROLLER 0x02 // Length of template descriptor: 38 bytes + number of ISO alternatives * 23 #define TUD_BTH_DESC_LEN (8 + 9 + 7 + 7 + 7 + (CFG_TUD_BTH_ISO_ALT_COUNT) * (9 + 7 + 7)) /* Primary Interface */ #define TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, _ep_out, _ep_size) \ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 3, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, _stridx, \ /* Endpoint In for events */ \ 7, TUSB_DESC_ENDPOINT, _ep_evt, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_evt_size), _ep_evt_interval, \ /* Endpoint In for ACL data */ \ 7, TUSB_DESC_ENDPOINT, _ep_in, TUSB_XFER_BULK, U16_TO_U8S_LE(_ep_size), 1, \ /* Endpoint Out for ACL data */ \ 7, TUSB_DESC_ENDPOINT, _ep_out, TUSB_XFER_BULK, U16_TO_U8S_LE(_ep_size), 1 #define TUD_BTH_ISO_ITF(_itfnum, _alt, _ep_in, _ep_out, _n) ,\ /* Interface with 2 endpoints */ \ 9, TUSB_DESC_INTERFACE, _itfnum, _alt, 2, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, 0, \ /* Isochronous endpoints */ \ 7, TUSB_DESC_ENDPOINT, _ep_in, TUSB_XFER_ISOCHRONOUS, U16_TO_U8S_LE(_n), 1, \ 7, TUSB_DESC_ENDPOINT, _ep_out, TUSB_XFER_ISOCHRONOUS, U16_TO_U8S_LE(_n), 1 #define _FIRST(a, ...) a #define _REST(a, ...) __VA_ARGS__ #define TUD_BTH_ISO_ITF_0(_itfnum, ...) #define TUD_BTH_ISO_ITF_1(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 1, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) #define TUD_BTH_ISO_ITF_2(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 2, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ TUD_BTH_ISO_ITF_1(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) #define TUD_BTH_ISO_ITF_3(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 3, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ TUD_BTH_ISO_ITF_2(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) #define TUD_BTH_ISO_ITF_4(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 4, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ TUD_BTH_ISO_ITF_3(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) #define TUD_BTH_ISO_ITF_5(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 5, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ TUD_BTH_ISO_ITF_4(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) #define TUD_BTH_ISO_ITF_6(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 6, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ TUD_BTH_ISO_ITF_5(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) #define TUD_BTH_ISO_ITFS(_itfnum, _ep_in, _ep_out, ...) \ TU_XSTRCAT(TUD_BTH_ISO_ITF_, CFG_TUD_BTH_ISO_ALT_COUNT)(_itfnum, _ep_in, _ep_out, __VA_ARGS__) // BT Primary controller descriptor // Interface number, string index, attributes, event endpoint, event endpoint size, interval, data in, data out, data endpoint size, iso endpoint sizes // TODO BTH should also use IAD like CDC for composite device #define TUD_BTH_DESCRIPTOR(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, _ep_out, _ep_size,...) \ /* Interface Associate */\ 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, 0,\ TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, _ep_out, _ep_size) \ TUD_BTH_ISO_ITFS(_itfnum + 1, _ep_in + 1, _ep_out + 1, __VA_ARGS__) //--------------------------------------------------------------------+ // CDC-NCM Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor #define TUD_CDC_NCM_DESC_LEN (8+9+5+5+13+6+7+9+9+7+7) // CDC-ECM Descriptor Template // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. #define TUD_CDC_NCM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize, _maxsegmentsize) \ /* Interface Association */\ 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, 0,\ /* CDC Control Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, _desc_stridx,\ /* CDC-NCM Header */\ 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0110),\ /* CDC-NCM Union */\ 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ /* CDC-NCM Functional Descriptor */\ 13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0, \ /* CDC-NCM Functional Descriptor */\ 6, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_NCM, U16_TO_U8S_LE(0x0100), 0, \ /* Endpoint Notification */\ 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 50,\ /* CDC Data Interface (default inactive) */\ 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 0, TUSB_CLASS_CDC_DATA, 0, NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK, 0,\ /* CDC Data Interface (alternative active) */\ 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 1, 2, TUSB_CLASS_CDC_DATA, 0, NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK, 0,\ /* Endpoint In */\ 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ /* Endpoint Out */\ 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 #ifdef __cplusplus } #endif #endif /* _TUSB_USBD_H_ */ /** @} */ ================================================ FILE: pico-sdk/lib/tinyusb/src/device/usbd_control.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if CFG_TUD_ENABLED #include "dcd.h" #include "tusb.h" #include "device/usbd_pvt.h" //--------------------------------------------------------------------+ // Callback weak stubs (called if application does not provide) //--------------------------------------------------------------------+ TU_ATTR_WEAK void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const* request) { (void) rhport; (void) request; } //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL extern void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback); #endif enum { EDPT_CTRL_OUT = 0x00, EDPT_CTRL_IN = 0x80 }; typedef struct { tusb_control_request_t request; uint8_t* buffer; uint16_t data_len; uint16_t total_xferred; usbd_control_xfer_cb_t complete_cb; } usbd_control_xfer_t; tu_static usbd_control_xfer_t _ctrl_xfer; CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t _usbd_ctrl_buf[CFG_TUD_ENDPOINT0_SIZE]; //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ // Queue ZLP status transaction static inline bool _status_stage_xact(uint8_t rhport, tusb_control_request_t const* request) { // Opposite to endpoint in Data Phase uint8_t const ep_addr = request->bmRequestType_bit.direction ? EDPT_CTRL_OUT : EDPT_CTRL_IN; return usbd_edpt_xfer(rhport, ep_addr, NULL, 0); } // Status phase bool tud_control_status(uint8_t rhport, tusb_control_request_t const* request) { _ctrl_xfer.request = (*request); _ctrl_xfer.buffer = NULL; _ctrl_xfer.total_xferred = 0; _ctrl_xfer.data_len = 0; return _status_stage_xact(rhport, request); } // Queue a transaction in Data Stage // Each transaction has up to Endpoint0's max packet size. // This function can also transfer an zero-length packet static bool _data_stage_xact(uint8_t rhport) { uint16_t const xact_len = tu_min16(_ctrl_xfer.data_len - _ctrl_xfer.total_xferred, CFG_TUD_ENDPOINT0_SIZE); uint8_t ep_addr = EDPT_CTRL_OUT; if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_IN) { ep_addr = EDPT_CTRL_IN; if (xact_len) { TU_VERIFY(0 == tu_memcpy_s(_usbd_ctrl_buf, CFG_TUD_ENDPOINT0_SIZE, _ctrl_xfer.buffer, xact_len)); } } return usbd_edpt_xfer(rhport, ep_addr, xact_len ? _usbd_ctrl_buf : NULL, xact_len); } // Transmit data to/from the control endpoint. // If the request's wLength is zero, a status packet is sent instead. bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const* request, void* buffer, uint16_t len) { _ctrl_xfer.request = (*request); _ctrl_xfer.buffer = (uint8_t*) buffer; _ctrl_xfer.total_xferred = 0U; _ctrl_xfer.data_len = tu_min16(len, request->wLength); if (request->wLength > 0U) { if (_ctrl_xfer.data_len > 0U) { TU_ASSERT(buffer); } // TU_LOG2(" Control total data length is %u bytes\r\n", _ctrl_xfer.data_len); // Data stage TU_ASSERT(_data_stage_xact(rhport)); } else { // Status stage TU_ASSERT(_status_stage_xact(rhport, request)); } return true; } //--------------------------------------------------------------------+ // USBD API //--------------------------------------------------------------------+ void usbd_control_reset(void); void usbd_control_set_request(tusb_control_request_t const* request); void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp); bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); void usbd_control_reset(void) { tu_varclr(&_ctrl_xfer); } // Set complete callback void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp) { _ctrl_xfer.complete_cb = fp; } // for dcd_set_address where DCD is responsible for status response void usbd_control_set_request(tusb_control_request_t const* request) { _ctrl_xfer.request = (*request); _ctrl_xfer.buffer = NULL; _ctrl_xfer.total_xferred = 0; _ctrl_xfer.data_len = 0; } // callback when a transaction complete on // - DATA stage of control endpoint or // - Status stage bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { (void) result; // Endpoint Address is opposite to direction bit, this is Status Stage complete event if (tu_edpt_dir(ep_addr) != _ctrl_xfer.request.bmRequestType_bit.direction) { TU_ASSERT(0 == xferred_bytes); // invoke optional dcd hook if available dcd_edpt0_status_complete(rhport, &_ctrl_xfer.request); if (_ctrl_xfer.complete_cb) { // TODO refactor with usbd_driver_print_control_complete_name _ctrl_xfer.complete_cb(rhport, CONTROL_STAGE_ACK, &_ctrl_xfer.request); } return true; } if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_OUT) { TU_VERIFY(_ctrl_xfer.buffer); memcpy(_ctrl_xfer.buffer, _usbd_ctrl_buf, xferred_bytes); TU_LOG_MEM(CFG_TUD_LOG_LEVEL, _usbd_ctrl_buf, xferred_bytes, 2); } _ctrl_xfer.total_xferred += (uint16_t) xferred_bytes; _ctrl_xfer.buffer += xferred_bytes; // Data Stage is complete when all request's length are transferred or // a short packet is sent including zero-length packet. if ((_ctrl_xfer.request.wLength == _ctrl_xfer.total_xferred) || (xferred_bytes < CFG_TUD_ENDPOINT0_SIZE)) { // DATA stage is complete bool is_ok = true; // invoke complete callback if set // callback can still stall control in status phase e.g out data does not make sense if (_ctrl_xfer.complete_cb) { #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL usbd_driver_print_control_complete_name(_ctrl_xfer.complete_cb); #endif is_ok = _ctrl_xfer.complete_cb(rhport, CONTROL_STAGE_DATA, &_ctrl_xfer.request); } if (is_ok) { // Send status TU_ASSERT(_status_stage_xact(rhport, &_ctrl_xfer.request)); } else { // Stall both IN and OUT control endpoint dcd_edpt_stall(rhport, EDPT_CTRL_OUT); dcd_edpt_stall(rhport, EDPT_CTRL_IN); } } else { // More data to transfer TU_ASSERT(_data_stage_xact(rhport)); } return true; } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/device/usbd_pvt.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef TUSB_USBD_PVT_H_ #define TUSB_USBD_PVT_H_ #include "osal/osal.h" #include "common/tusb_fifo.h" #ifdef __cplusplus extern "C" { #endif #define TU_LOG_USBD(...) TU_LOG(CFG_TUD_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF PROTYPES //--------------------------------------------------------------------+ typedef enum { SOF_CONSUMER_USER = 0, SOF_CONSUMER_AUDIO, } sof_consumer_t; //--------------------------------------------------------------------+ // Class Driver API //--------------------------------------------------------------------+ typedef struct { char const* name; void (* init ) (void); bool (* deinit ) (void); void (* reset ) (uint8_t rhport); uint16_t (* open ) (uint8_t rhport, tusb_desc_interface_t const * desc_intf, uint16_t max_len); bool (* control_xfer_cb ) (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); bool (* xfer_cb ) (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); void (* sof ) (uint8_t rhport, uint32_t frame_count); // optional } usbd_class_driver_t; // Invoked when initializing device stack to get additional class drivers. // Can be implemented by application to extend/overwrite class driver support. // Note: The drivers array must be accessible at all time when stack is active usbd_class_driver_t const* usbd_app_driver_get_cb(uint8_t* driver_count) TU_ATTR_WEAK; typedef bool (*usbd_control_xfer_cb_t)(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); void usbd_int_set(bool enabled); //--------------------------------------------------------------------+ // USBD Endpoint API // Note: rhport should be 0 since device stack only support 1 rhport for now //--------------------------------------------------------------------+ // Open an endpoint bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * desc_ep); // Close an endpoint void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr); // Submit a usb transfer bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes); // Submit a usb ISO transfer by use of a FIFO (ring buffer) - all bytes in FIFO get transmitted bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes); // Claim an endpoint before submitting a transfer. // If caller does not make any transfer, it must release endpoint for others. bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr); // Release claimed endpoint without submitting a transfer bool usbd_edpt_release(uint8_t rhport, uint8_t ep_addr); // Check if endpoint is busy transferring bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr); // Stall endpoint void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr); // Clear stalled endpoint void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr); // Check if endpoint is stalled bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr); // Allocate packet buffer used by ISO endpoints bool usbd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size); // Configure and enable an ISO endpoint according to descriptor bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc); // Check if endpoint is ready (not busy and not stalled) TU_ATTR_ALWAYS_INLINE static inline bool usbd_edpt_ready(uint8_t rhport, uint8_t ep_addr) { return !usbd_edpt_busy(rhport, ep_addr) && !usbd_edpt_stalled(rhport, ep_addr); } // Enable SOF interrupt void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en); /*------------------------------------------------------------------*/ /* Helper *------------------------------------------------------------------*/ bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const* p_desc, uint8_t ep_count, uint8_t xfer_type, uint8_t* ep_out, uint8_t* ep_in); void usbd_defer_func(osal_task_func_t func, void *param, bool in_isr); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/host/hcd.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_HCD_H_ #define _TUSB_HCD_H_ #include "common/tusb_common.h" #include "osal/osal.h" #include "common/tusb_fifo.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // Configuration //--------------------------------------------------------------------+ // Max number of endpoints pair per device // TODO optimize memory usage #ifndef CFG_TUH_ENDPOINT_MAX #define CFG_TUH_ENDPOINT_MAX 16 // #ifdef TUP_HCD_ENDPOINT_MAX // #define CFG_TUH_ENDPPOINT_MAX TUP_HCD_ENDPOINT_MAX // #else // #define // #endif #endif //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ typedef enum { HCD_EVENT_DEVICE_ATTACH, HCD_EVENT_DEVICE_REMOVE, HCD_EVENT_XFER_COMPLETE, // Not an HCD event, just a convenient way to defer ISR function USBH_EVENT_FUNC_CALL, HCD_EVENT_COUNT } hcd_eventid_t; typedef struct { uint8_t rhport; uint8_t event_id; uint8_t dev_addr; union { // Attach, Remove struct { uint8_t hub_addr; uint8_t hub_port; uint8_t speed; } connection; // XFER_COMPLETE struct { uint8_t ep_addr; uint8_t result; uint32_t len; } xfer_complete; // FUNC_CALL struct { void (*func) (void*); void* param; }func_call; }; } hcd_event_t; typedef struct { uint8_t rhport; uint8_t hub_addr; uint8_t hub_port; uint8_t speed; } hcd_devtree_info_t; //--------------------------------------------------------------------+ // Memory API //--------------------------------------------------------------------+ // clean/flush data cache: write cache -> memory. // Required before an DMA TX transfer to make sure data is in memory bool hcd_dcache_clean(void const* addr, uint32_t data_size) TU_ATTR_WEAK; // invalidate data cache: mark cache as invalid, next read will read from memory // Required BOTH before and after an DMA RX transfer bool hcd_dcache_invalidate(void const* addr, uint32_t data_size) TU_ATTR_WEAK; // clean and invalidate data cache // Required before an DMA transfer where memory is both read/write by DMA bool hcd_dcache_clean_invalidate(void const* addr, uint32_t data_size) TU_ATTR_WEAK; //--------------------------------------------------------------------+ // Controller API //--------------------------------------------------------------------+ // optional hcd configuration, called by tuh_configure() bool hcd_configure(uint8_t rhport, uint32_t cfg_id, const void* cfg_param); // Initialize controller to host mode bool hcd_init(uint8_t rhport); // De-initialize controller bool hcd_deinit(uint8_t rhport); // Interrupt Handler void hcd_int_handler(uint8_t rhport, bool in_isr); // Enable USB interrupt void hcd_int_enable (uint8_t rhport); // Disable USB interrupt void hcd_int_disable(uint8_t rhport); // Get frame number (1ms) uint32_t hcd_frame_number(uint8_t rhport); //--------------------------------------------------------------------+ // Port API //--------------------------------------------------------------------+ // Get the current connect status of roothub port bool hcd_port_connect_status(uint8_t rhport); // Reset USB bus on the port. Return immediately, bus reset sequence may not be complete. // Some port would require hcd_port_reset_end() to be invoked after 10ms to complete the reset sequence. void hcd_port_reset(uint8_t rhport); // Complete bus reset sequence, may be required by some controllers void hcd_port_reset_end(uint8_t rhport); // Get port link speed tusb_speed_t hcd_port_speed_get(uint8_t rhport); // HCD closes all opened endpoints belong to this device void hcd_device_close(uint8_t rhport, uint8_t dev_addr); //--------------------------------------------------------------------+ // Endpoints API //--------------------------------------------------------------------+ // Open an endpoint bool hcd_edpt_open(uint8_t rhport, uint8_t daddr, tusb_desc_endpoint_t const * ep_desc); // Submit a transfer, when complete hcd_event_xfer_complete() must be invoked bool hcd_edpt_xfer(uint8_t rhport, uint8_t daddr, uint8_t ep_addr, uint8_t * buffer, uint16_t buflen); // Abort a queued transfer. Note: it can only abort transfer that has not been started // Return true if a queued transfer is aborted, false if there is no transfer to abort bool hcd_edpt_abort_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr); // Submit a special transfer to send 8-byte Setup Packet, when complete hcd_event_xfer_complete() must be invoked bool hcd_setup_send(uint8_t rhport, uint8_t daddr, uint8_t const setup_packet[8]); // clear stall, data toggle is also reset to DATA0 bool hcd_edpt_clear_stall(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr); //--------------------------------------------------------------------+ // USBH implemented API //--------------------------------------------------------------------+ // Get device tree information of a device // USB device tree can be complicated and manged by USBH, this help HCD to retrieve // needed topology info to carry out its work extern void hcd_devtree_get_info(uint8_t dev_addr, hcd_devtree_info_t* devtree_info); //------------- Event API -------------// // Called by HCD to notify stack extern void hcd_event_handler(hcd_event_t const* event, bool in_isr); // Helper to send device attach event TU_ATTR_ALWAYS_INLINE static inline void hcd_event_device_attach(uint8_t rhport, bool in_isr) { hcd_event_t event; event.rhport = rhport; event.event_id = HCD_EVENT_DEVICE_ATTACH; event.connection.hub_addr = 0; event.connection.hub_port = 0; hcd_event_handler(&event, in_isr); } // Helper to send device removal event TU_ATTR_ALWAYS_INLINE static inline void hcd_event_device_remove(uint8_t rhport, bool in_isr) { hcd_event_t event; event.rhport = rhport; event.event_id = HCD_EVENT_DEVICE_REMOVE; event.connection.hub_addr = 0; event.connection.hub_port = 0; hcd_event_handler(&event, in_isr); } // Helper to send USB transfer event TU_ATTR_ALWAYS_INLINE static inline void hcd_event_xfer_complete(uint8_t dev_addr, uint8_t ep_addr, uint32_t xferred_bytes, xfer_result_t result, bool in_isr) { hcd_event_t event = { .rhport = 0, // TODO correct rhport .event_id = HCD_EVENT_XFER_COMPLETE, .dev_addr = dev_addr, }; event.xfer_complete.ep_addr = ep_addr; event.xfer_complete.result = result; event.xfer_complete.len = xferred_bytes; hcd_event_handler(&event, in_isr); } #ifdef __cplusplus } #endif #endif /* _TUSB_HCD_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/host/hub.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if (CFG_TUH_ENABLED && CFG_TUH_HUB) #include "hcd.h" #include "usbh.h" #include "usbh_pvt.h" #include "hub.h" // Debug level, TUSB_CFG_DEBUG must be at least this level for debug message #define HUB_DEBUG 2 #define TU_LOG_DRV(...) TU_LOG(HUB_DEBUG, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ typedef struct { uint8_t itf_num; uint8_t ep_in; uint8_t port_count; CFG_TUH_MEM_ALIGN uint8_t status_change; CFG_TUH_MEM_ALIGN hub_port_status_response_t port_status; CFG_TUH_MEM_ALIGN hub_status_response_t hub_status; } hub_interface_t; CFG_TUH_MEM_SECTION static hub_interface_t hub_data[CFG_TUH_HUB]; CFG_TUH_MEM_SECTION CFG_TUH_MEM_ALIGN static uint8_t _hub_buffer[sizeof(descriptor_hub_desc_t)]; TU_ATTR_ALWAYS_INLINE static inline hub_interface_t* get_itf(uint8_t dev_addr) { return &hub_data[dev_addr-1-CFG_TUH_DEVICE_MAX]; } #if CFG_TUSB_DEBUG >= 2 static char const* const _hub_feature_str[] = { [HUB_FEATURE_PORT_CONNECTION ] = "PORT_CONNECTION", [HUB_FEATURE_PORT_ENABLE ] = "PORT_ENABLE", [HUB_FEATURE_PORT_SUSPEND ] = "PORT_SUSPEND", [HUB_FEATURE_PORT_OVER_CURRENT ] = "PORT_OVER_CURRENT", [HUB_FEATURE_PORT_RESET ] = "PORT_RESET", [HUB_FEATURE_PORT_POWER ] = "PORT_POWER", [HUB_FEATURE_PORT_LOW_SPEED ] = "PORT_LOW_SPEED", [HUB_FEATURE_PORT_CONNECTION_CHANGE ] = "PORT_CONNECTION_CHANGE", [HUB_FEATURE_PORT_ENABLE_CHANGE ] = "PORT_ENABLE_CHANGE", [HUB_FEATURE_PORT_SUSPEND_CHANGE ] = "PORT_SUSPEND_CHANGE", [HUB_FEATURE_PORT_OVER_CURRENT_CHANGE ] = "PORT_OVER_CURRENT_CHANGE", [HUB_FEATURE_PORT_RESET_CHANGE ] = "PORT_RESET_CHANGE", [HUB_FEATURE_PORT_TEST ] = "PORT_TEST", [HUB_FEATURE_PORT_INDICATOR ] = "PORT_INDICATOR", }; #endif //--------------------------------------------------------------------+ // HUB //--------------------------------------------------------------------+ bool hub_port_clear_feature(uint8_t hub_addr, uint8_t hub_port, uint8_t feature, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = (hub_port == 0) ? TUSB_REQ_RCPT_DEVICE : TUSB_REQ_RCPT_OTHER, .type = TUSB_REQ_TYPE_CLASS, .direction = TUSB_DIR_OUT }, .bRequest = HUB_REQUEST_CLEAR_FEATURE, .wValue = feature, .wIndex = hub_port, .wLength = 0 }; tuh_xfer_t xfer = { .daddr = hub_addr, .ep_addr = 0, .setup = &request, .buffer = NULL, .complete_cb = complete_cb, .user_data = user_data }; TU_LOG2("HUB Clear Feature: %s, addr = %u port = %u\r\n", _hub_feature_str[feature], hub_addr, hub_port); TU_ASSERT( tuh_control_xfer(&xfer) ); return true; } bool hub_port_set_feature(uint8_t hub_addr, uint8_t hub_port, uint8_t feature, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = (hub_port == 0) ? TUSB_REQ_RCPT_DEVICE : TUSB_REQ_RCPT_OTHER, .type = TUSB_REQ_TYPE_CLASS, .direction = TUSB_DIR_OUT }, .bRequest = HUB_REQUEST_SET_FEATURE, .wValue = feature, .wIndex = hub_port, .wLength = 0 }; tuh_xfer_t xfer = { .daddr = hub_addr, .ep_addr = 0, .setup = &request, .buffer = NULL, .complete_cb = complete_cb, .user_data = user_data }; TU_LOG2("HUB Set Feature: %s, addr = %u port = %u\r\n", _hub_feature_str[feature], hub_addr, hub_port); TU_ASSERT( tuh_control_xfer(&xfer) ); return true; } bool hub_port_get_status(uint8_t hub_addr, uint8_t hub_port, void* resp, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = (hub_port == 0) ? TUSB_REQ_RCPT_DEVICE : TUSB_REQ_RCPT_OTHER, .type = TUSB_REQ_TYPE_CLASS, .direction = TUSB_DIR_IN }, .bRequest = HUB_REQUEST_GET_STATUS, .wValue = 0, .wIndex = hub_port, .wLength = 4 }; tuh_xfer_t xfer = { .daddr = hub_addr, .ep_addr = 0, .setup = &request, .buffer = resp, .complete_cb = complete_cb, .user_data = user_data }; TU_LOG2("HUB Get Port Status: addr = %u port = %u\r\n", hub_addr, hub_port); TU_VERIFY( tuh_control_xfer(&xfer) ); return true; } //--------------------------------------------------------------------+ // CLASS-USBH API (don't require to verify parameters) //--------------------------------------------------------------------+ bool hub_init(void) { tu_memclr(hub_data, sizeof(hub_data)); return true; } bool hub_deinit(void) { return true; } bool hub_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { (void) rhport; TU_VERIFY(TUSB_CLASS_HUB == itf_desc->bInterfaceClass && 0 == itf_desc->bInterfaceSubClass); // hub driver does not support multiple TT yet TU_VERIFY(itf_desc->bInterfaceProtocol <= 1); // msc driver length is fixed uint16_t const drv_len = sizeof(tusb_desc_interface_t) + sizeof(tusb_desc_endpoint_t); TU_ASSERT(drv_len <= max_len); //------------- Interrupt Status endpoint -------------// tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) tu_desc_next(itf_desc); TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && TUSB_XFER_INTERRUPT == desc_ep->bmAttributes.xfer, 0); TU_ASSERT(tuh_edpt_open(dev_addr, desc_ep)); hub_interface_t* p_hub = get_itf(dev_addr); p_hub->itf_num = itf_desc->bInterfaceNumber; p_hub->ep_in = desc_ep->bEndpointAddress; return true; } void hub_close(uint8_t dev_addr) { TU_VERIFY(dev_addr > CFG_TUH_DEVICE_MAX, ); hub_interface_t* p_hub = get_itf(dev_addr); if (p_hub->ep_in) { TU_LOG_DRV(" HUB close addr = %d\r\n", dev_addr); tu_memclr(p_hub, sizeof( hub_interface_t)); } } bool hub_edpt_status_xfer(uint8_t dev_addr) { hub_interface_t* hub_itf = get_itf(dev_addr); return usbh_edpt_xfer(dev_addr, hub_itf->ep_in, &hub_itf->status_change, 1); } //--------------------------------------------------------------------+ // Set Configure //--------------------------------------------------------------------+ static void config_set_port_power (tuh_xfer_t* xfer); static void config_port_power_complete (tuh_xfer_t* xfer); bool hub_set_config(uint8_t dev_addr, uint8_t itf_num) { hub_interface_t* p_hub = get_itf(dev_addr); TU_ASSERT(itf_num == p_hub->itf_num); // Get Hub Descriptor tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_DEVICE, .type = TUSB_REQ_TYPE_CLASS, .direction = TUSB_DIR_IN }, .bRequest = HUB_REQUEST_GET_DESCRIPTOR, .wValue = 0, .wIndex = 0, .wLength = sizeof(descriptor_hub_desc_t) }; tuh_xfer_t xfer = { .daddr = dev_addr, .ep_addr = 0, .setup = &request, .buffer = _hub_buffer, .complete_cb = config_set_port_power, .user_data = 0 }; TU_ASSERT( tuh_control_xfer(&xfer) ); return true; } static void config_set_port_power (tuh_xfer_t* xfer) { TU_ASSERT(XFER_RESULT_SUCCESS == xfer->result, ); uint8_t const daddr = xfer->daddr; hub_interface_t* p_hub = get_itf(daddr); // only use number of ports in hub descriptor descriptor_hub_desc_t const* desc_hub = (descriptor_hub_desc_t const*) _hub_buffer; p_hub->port_count = desc_hub->bNbrPorts; // May need to GET_STATUS // Set Port Power to be able to detect connection, starting with port 1 uint8_t const hub_port = 1; hub_port_set_feature(daddr, hub_port, HUB_FEATURE_PORT_POWER, config_port_power_complete, 0); } static void config_port_power_complete (tuh_xfer_t* xfer) { TU_ASSERT(XFER_RESULT_SUCCESS == xfer->result, ); uint8_t const daddr = xfer->daddr; hub_interface_t* p_hub = get_itf(daddr); if (xfer->setup->wIndex == p_hub->port_count) { // All ports are power -> queue notification status endpoint and // complete the SET CONFIGURATION TU_ASSERT( usbh_edpt_xfer(daddr, p_hub->ep_in, &p_hub->status_change, 1), ); usbh_driver_set_config_complete(daddr, p_hub->itf_num); }else { // power next port uint8_t const hub_port = (uint8_t) (xfer->setup->wIndex + 1); hub_port_set_feature(daddr, hub_port, HUB_FEATURE_PORT_POWER, config_port_power_complete, 0); } } //--------------------------------------------------------------------+ // Connection Changes //--------------------------------------------------------------------+ static void hub_port_get_status_complete (tuh_xfer_t* xfer); static void hub_get_status_complete (tuh_xfer_t* xfer); static void connection_clear_conn_change_complete (tuh_xfer_t* xfer); static void connection_port_reset_complete (tuh_xfer_t* xfer); // callback as response of interrupt endpoint polling bool hub_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { (void) xferred_bytes; // TODO can be more than 1 for hub with lots of ports (void) ep_addr; TU_VERIFY(result == XFER_RESULT_SUCCESS); hub_interface_t* p_hub = get_itf(dev_addr); uint8_t const status_change = p_hub->status_change; TU_LOG2(" Hub Status Change = 0x%02X\r\n", status_change); if ( status_change == 0 ) { // The status change event was neither for the hub, nor for any of its ports. // This shouldn't happen, but it does with some devices. // Initiate the next interrupt poll here. return hub_edpt_status_xfer(dev_addr); } if (tu_bit_test(status_change, 0)) { // Hub bit 0 is for the hub device events if (hub_port_get_status(dev_addr, 0, &p_hub->hub_status, hub_get_status_complete, 0) == false) { //Hub status control transfer failed, retry hub_edpt_status_xfer(dev_addr); } } else { // Hub bits 1 to n are hub port events for (uint8_t port=1; port <= p_hub->port_count; port++) { if ( tu_bit_test(status_change, port) ) { if (hub_port_get_status(dev_addr, port, &p_hub->port_status, hub_port_get_status_complete, 0) == false) { //Hub status control transfer failed, retry hub_edpt_status_xfer(dev_addr); } break; } } } // NOTE: next status transfer is queued by usbh.c after handling this request return true; } static void hub_clear_feature_complete_stub(tuh_xfer_t* xfer) { TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS, ); hub_edpt_status_xfer(xfer->daddr); } static void hub_get_status_complete (tuh_xfer_t* xfer) { TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS, ); uint8_t const daddr = xfer->daddr; hub_interface_t* p_hub = get_itf(daddr); uint8_t const port_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); TU_ASSERT(port_num == 0 , ); TU_LOG2("HUB Got hub status, addr = %u, status = %04x\r\n", daddr, p_hub->hub_status.change.value); if (p_hub->hub_status.change.local_power_source) { TU_LOG2("HUB Local Power Change, addr = %u\r\n", daddr); hub_port_clear_feature(daddr, port_num, HUB_FEATURE_HUB_LOCAL_POWER_CHANGE, hub_clear_feature_complete_stub, 0); } else if (p_hub->hub_status.change.over_current) { TU_LOG1("HUB Over Current, addr = %u\r\n", daddr); hub_port_clear_feature(daddr, port_num, HUB_FEATURE_HUB_OVER_CURRENT_CHANGE, hub_clear_feature_complete_stub, 0); } } static void hub_port_get_status_complete (tuh_xfer_t* xfer) { TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS, ); uint8_t const daddr = xfer->daddr; hub_interface_t* p_hub = get_itf(daddr); uint8_t const port_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); // Connection change if (p_hub->port_status.change.connection) { // Port is powered and enabled //TU_VERIFY(port_status.status_current.port_power && port_status.status_current.port_enable, ); // Acknowledge Port Connection Change hub_port_clear_feature(daddr, port_num, HUB_FEATURE_PORT_CONNECTION_CHANGE, connection_clear_conn_change_complete, 0); }else { // Clear other port status change interrupts. TODO Not currently handled - just cleared. if (p_hub->port_status.change.port_enable) { hub_port_clear_feature(daddr, port_num, HUB_FEATURE_PORT_ENABLE_CHANGE, hub_clear_feature_complete_stub, 0); } else if (p_hub->port_status.change.suspend) { hub_port_clear_feature(daddr, port_num, HUB_FEATURE_PORT_SUSPEND_CHANGE, hub_clear_feature_complete_stub, 0); } else if (p_hub->port_status.change.over_current) { hub_port_clear_feature(daddr, port_num, HUB_FEATURE_PORT_OVER_CURRENT_CHANGE, hub_clear_feature_complete_stub, 0); } else if (p_hub->port_status.change.reset) { hub_port_clear_feature(daddr, port_num, HUB_FEATURE_PORT_RESET_CHANGE, hub_clear_feature_complete_stub, 0); } // Other changes are: L1 state // TODO clear change else { // prepare for next hub status // TODO continue with status_change, or maybe we can do it again with status hub_edpt_status_xfer(daddr); } } } static void connection_clear_conn_change_complete (tuh_xfer_t* xfer) { TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS, ); uint8_t const daddr = xfer->daddr; hub_interface_t* p_hub = get_itf(daddr); uint8_t const port_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); if ( p_hub->port_status.status.connection ) { // Reset port if attach event hub_port_reset(daddr, port_num, connection_port_reset_complete, 0); }else { // submit detach event hcd_event_t event = { .rhport = usbh_get_rhport(daddr), .event_id = HCD_EVENT_DEVICE_REMOVE, .connection = { .hub_addr = daddr, .hub_port = port_num } }; hcd_event_handler(&event, false); } } static void connection_port_reset_complete (tuh_xfer_t* xfer) { TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS, ); uint8_t const daddr = xfer->daddr; // hub_interface_t* p_hub = get_itf(daddr); uint8_t const port_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); // submit attach event hcd_event_t event = { .rhport = usbh_get_rhport(daddr), .event_id = HCD_EVENT_DEVICE_ATTACH, .connection = { .hub_addr = daddr, .hub_port = port_num } }; hcd_event_handler(&event, false); } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/host/hub.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ /** \ingroup group_class * \defgroup ClassDriver_Hub Hub (Host only) * \details Like most PC's OS, Hub support is completely hidden from Application. In fact, application cannot determine whether * a device is mounted directly via roothub or via a hub's port. All Hub-related procedures are performed and managed * by tinyusb stack. Unless you are trying to develop the stack itself, there are nothing else can be used by Application. * \note Due to my laziness, only 1-level of Hub is supported. In other way, the stack cannot mount a hub via another hub. * @{ */ #ifndef _TUSB_HUB_H_ #define _TUSB_HUB_H_ #include "common/tusb_common.h" #ifdef __cplusplus extern "C" { #endif //D1...D0: Logical Power Switching Mode //00: Ganged power switching (all ports’power at //once) //01: Individual port power switching //1X: Reserved. Used only on 1.0 compliant hubs //that implement no power switching //D2: Identifies a Compound Device //0: Hub is not part of a compound device. //1: Hub is part of a compound device. //D4...D3: Over-current Protection Mode //00: Global Over-current Protection. The hub //reports over-current as a summation of all //ports’current draw, without a breakdown of //individual port over-current status. //01: Individual Port Over-current Protection. The //hub reports over-current on a per-port basis. //Each port has an over-current status. //1X: No Over-current Protection. This option is //allowed only for bus-powered hubs that do not //implement over-current protection. // //D6...D5: TT Think TIme //00: TT requires at most 8 FS bit times of inter //transaction gap on a full-/low-speed //downstream bus. //01: TT requires at most 16 FS bit times. //10: TT requires at most 24 FS bit times. //11: TT requires at most 32 FS bit times. //D7: Port Indicators Supported //0: Port Indicators are not supported on its //downstream facing ports and the //PORT_INDICATOR request has no effect. //1: Port Indicators are supported on its //downstream facing ports and the //PORT_INDICATOR request controls the //indicators. See Section 11.5.3. //D15...D8: Reserved typedef struct TU_ATTR_PACKED{ uint8_t bLength ; ///< Size of descriptor uint8_t bDescriptorType ; ///< Other_speed_Configuration Type uint8_t bNbrPorts; uint16_t wHubCharacteristics; uint8_t bPwrOn2PwrGood; uint8_t bHubContrCurrent; uint8_t DeviceRemovable; // bitmap each bit for a port (from bit1) uint8_t PortPwrCtrlMask; // just for compatibility, should be 0xff } descriptor_hub_desc_t; TU_VERIFY_STATIC( sizeof(descriptor_hub_desc_t) == 9, "size is not correct"); enum { HUB_REQUEST_GET_STATUS = 0 , HUB_REQUEST_CLEAR_FEATURE = 1 , HUB_REQUEST_SET_FEATURE = 3 , HUB_REQUEST_GET_DESCRIPTOR = 6 , HUB_REQUEST_SET_DESCRIPTOR = 7 , HUB_REQUEST_CLEAR_TT_BUFFER = 8 , HUB_REQUEST_RESET_TT = 9 , HUB_REQUEST_GET_TT_STATE = 10 , HUB_REQUEST_STOP_TT = 11 }; enum { HUB_FEATURE_HUB_LOCAL_POWER_CHANGE = 0, HUB_FEATURE_HUB_OVER_CURRENT_CHANGE }; enum{ HUB_FEATURE_PORT_CONNECTION = 0, HUB_FEATURE_PORT_ENABLE = 1, HUB_FEATURE_PORT_SUSPEND = 2, HUB_FEATURE_PORT_OVER_CURRENT = 3, HUB_FEATURE_PORT_RESET = 4, HUB_FEATURE_PORT_POWER = 8, HUB_FEATURE_PORT_LOW_SPEED = 9, HUB_FEATURE_PORT_CONNECTION_CHANGE = 16, HUB_FEATURE_PORT_ENABLE_CHANGE = 17, HUB_FEATURE_PORT_SUSPEND_CHANGE = 18, HUB_FEATURE_PORT_OVER_CURRENT_CHANGE = 19, HUB_FEATURE_PORT_RESET_CHANGE = 20, HUB_FEATURE_PORT_TEST = 21, HUB_FEATURE_PORT_INDICATOR = 22 }; // data in response of HUB_REQUEST_GET_STATUS, wIndex = 0 (hub) typedef struct { union{ struct TU_ATTR_PACKED { uint16_t local_power_source : 1; uint16_t over_current : 1; uint16_t : 14; }; uint16_t value; } status, change; } hub_status_response_t; TU_VERIFY_STATIC( sizeof(hub_status_response_t) == 4, "size is not correct"); // data in response of HUB_REQUEST_GET_STATUS, wIndex = Port num typedef struct { union { struct TU_ATTR_PACKED { uint16_t connection : 1; uint16_t port_enable : 1; uint16_t suspend : 1; uint16_t over_current : 1; uint16_t reset : 1; uint16_t : 3; uint16_t port_power : 1; uint16_t low_speed : 1; uint16_t high_speed : 1; uint16_t port_test_mode : 1; uint16_t port_indicator_control : 1; uint16_t TU_RESERVED : 3; }; uint16_t value; } status, change; } hub_port_status_response_t; TU_VERIFY_STATIC( sizeof(hub_port_status_response_t) == 4, "size is not correct"); // Clear feature bool hub_port_clear_feature (uint8_t hub_addr, uint8_t hub_port, uint8_t feature, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Set feature bool hub_port_set_feature (uint8_t hub_addr, uint8_t hub_port, uint8_t feature, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Get port status bool hub_port_get_status (uint8_t hub_addr, uint8_t hub_port, void* resp, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Get status from Interrupt endpoint bool hub_edpt_status_xfer(uint8_t dev_addr); // Reset a port TU_ATTR_ALWAYS_INLINE static inline bool hub_port_reset(uint8_t hub_addr, uint8_t hub_port, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { return hub_port_set_feature(hub_addr, hub_port, HUB_FEATURE_PORT_RESET, complete_cb, user_data); } // Clear Reset Change TU_ATTR_ALWAYS_INLINE static inline bool hub_port_clear_reset_change(uint8_t hub_addr, uint8_t hub_port, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { return hub_port_clear_feature(hub_addr, hub_port, HUB_FEATURE_PORT_RESET_CHANGE, complete_cb, user_data); } //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ bool hub_init (void); bool hub_deinit (void); bool hub_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, uint16_t max_len); bool hub_set_config (uint8_t dev_addr, uint8_t itf_num); bool hub_xfer_cb (uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); void hub_close (uint8_t dev_addr); #ifdef __cplusplus } #endif #endif /* _TUSB_HUB_H_ */ /** @} */ ================================================ FILE: pico-sdk/lib/tinyusb/src/host/usbh.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if CFG_TUH_ENABLED #include "host/hcd.h" #include "tusb.h" #include "host/usbh_pvt.h" #include "hub.h" //--------------------------------------------------------------------+ // USBH Configuration //--------------------------------------------------------------------+ #ifndef CFG_TUH_TASK_QUEUE_SZ #define CFG_TUH_TASK_QUEUE_SZ 32 #endif #ifndef CFG_TUH_INTERFACE_MAX #define CFG_TUH_INTERFACE_MAX 8 #endif //--------------------------------------------------------------------+ // Weak stubs: invoked if no strong implementation is available //--------------------------------------------------------------------+ TU_ATTR_WEAK bool hcd_deinit(uint8_t rhport) { (void) rhport; return false; } TU_ATTR_WEAK bool hcd_configure(uint8_t rhport, uint32_t cfg_id, const void* cfg_param) { (void) rhport; (void) cfg_id; (void) cfg_param; return false; } TU_ATTR_WEAK void tuh_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr) { (void) rhport; (void) eventid; (void) in_isr; } //--------------------------------------------------------------------+ // USBH-HCD common data structure //--------------------------------------------------------------------+ typedef struct { // port uint8_t rhport; uint8_t hub_addr; uint8_t hub_port; struct TU_ATTR_PACKED { uint8_t speed : 4; // packed speed to save footprint volatile uint8_t enumerating : 1; // enumeration is in progress, false if not connected or all interfaces are configured uint8_t TU_RESERVED : 3; }; } usbh_dev0_t; typedef struct { // port, must be same layout as usbh_dev0_t uint8_t rhport; uint8_t hub_addr; uint8_t hub_port; uint8_t speed; // Device State struct TU_ATTR_PACKED { volatile uint8_t connected : 1; // After 1st transfer volatile uint8_t addressed : 1; // After SET_ADDR volatile uint8_t configured : 1; // After SET_CONFIG and all drivers are configured volatile uint8_t suspended : 1; // Bus suspended // volatile uint8_t removing : 1; // Physically disconnected, waiting to be processed by usbh }; // Device Descriptor uint8_t ep0_size; uint16_t vid; uint16_t pid; uint8_t i_manufacturer; uint8_t i_product; uint8_t i_serial; // Configuration Descriptor // uint8_t interface_count; // bNumInterfaces alias // Endpoint & Interface uint8_t itf2drv[CFG_TUH_INTERFACE_MAX]; // map interface number to driver (0xff is invalid) uint8_t ep2drv[CFG_TUH_ENDPOINT_MAX][2]; // map endpoint to driver ( 0xff is invalid ), can use only 4-bit each tu_edpt_state_t ep_status[CFG_TUH_ENDPOINT_MAX][2]; #if CFG_TUH_API_EDPT_XFER // TODO array can be CFG_TUH_ENDPOINT_MAX-1 struct { tuh_xfer_cb_t complete_cb; uintptr_t user_data; }ep_callback[CFG_TUH_ENDPOINT_MAX][2]; #endif } usbh_device_t; //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUH_LOG_LEVEL #define DRIVER_NAME(_name) _name #else #define DRIVER_NAME(_name) NULL #endif static usbh_class_driver_t const usbh_class_drivers[] = { #if CFG_TUH_CDC { .name = DRIVER_NAME("CDC"), .init = cdch_init, .deinit = cdch_deinit, .open = cdch_open, .set_config = cdch_set_config, .xfer_cb = cdch_xfer_cb, .close = cdch_close }, #endif #if CFG_TUH_MSC { .name = DRIVER_NAME("MSC"), .init = msch_init, .deinit = msch_deinit, .open = msch_open, .set_config = msch_set_config, .xfer_cb = msch_xfer_cb, .close = msch_close }, #endif #if CFG_TUH_HID { .name = DRIVER_NAME("HID"), .init = hidh_init, .deinit = hidh_deinit, .open = hidh_open, .set_config = hidh_set_config, .xfer_cb = hidh_xfer_cb, .close = hidh_close }, #endif #if CFG_TUH_HUB { .name = DRIVER_NAME("HUB"), .init = hub_init, .deinit = hub_deinit, .open = hub_open, .set_config = hub_set_config, .xfer_cb = hub_xfer_cb, .close = hub_close }, #endif #if CFG_TUH_VENDOR { .name = DRIVER_NAME("VENDOR"), .init = cush_init, .deinit = cush_deinit, .open = cush_open, .set_config = cush_set_config, .xfer_cb = cush_isr, .close = cush_close } #endif }; enum { BUILTIN_DRIVER_COUNT = TU_ARRAY_SIZE(usbh_class_drivers) }; enum { CONFIG_NUM = 1 }; // default to use configuration 1 // Additional class drivers implemented by application tu_static usbh_class_driver_t const * _app_driver = NULL; tu_static uint8_t _app_driver_count = 0; #define TOTAL_DRIVER_COUNT (_app_driver_count + BUILTIN_DRIVER_COUNT) static inline usbh_class_driver_t const *get_driver(uint8_t drv_id) { usbh_class_driver_t const *driver = NULL; if ( drv_id < _app_driver_count ) { driver = &_app_driver[drv_id]; } else if ( drv_id < TOTAL_DRIVER_COUNT && BUILTIN_DRIVER_COUNT > 0) { driver = &usbh_class_drivers[drv_id - _app_driver_count]; } return driver; } //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ // sum of end device + hub #define TOTAL_DEVICES (CFG_TUH_DEVICE_MAX + CFG_TUH_HUB) static uint8_t _usbh_controller = TUSB_INDEX_INVALID_8; // Device with address = 0 for enumeration static usbh_dev0_t _dev0; // all devices excluding zero-address // hub address start from CFG_TUH_DEVICE_MAX+1 // TODO: hub can has its own simpler struct to save memory static usbh_device_t _usbh_devices[TOTAL_DEVICES]; // Mutex for claiming endpoint #if OSAL_MUTEX_REQUIRED static osal_mutex_def_t _usbh_mutexdef; static osal_mutex_t _usbh_mutex; #else #define _usbh_mutex NULL #endif // Event queue // usbh_int_set is used as mutex in OS NONE config OSAL_QUEUE_DEF(usbh_int_set, _usbh_qdef, CFG_TUH_TASK_QUEUE_SZ, hcd_event_t); static osal_queue_t _usbh_q; CFG_TUH_MEM_SECTION CFG_TUH_MEM_ALIGN static uint8_t _usbh_ctrl_buf[CFG_TUH_ENUMERATION_BUFSIZE]; // Control transfers: since most controllers do not support multiple control transfers // on multiple devices concurrently and control transfers are not used much except for // enumeration, we will only execute control transfers one at a time. CFG_TUH_MEM_SECTION struct { CFG_TUH_MEM_ALIGN tusb_control_request_t request; uint8_t* buffer; tuh_xfer_cb_t complete_cb; uintptr_t user_data; uint8_t daddr; volatile uint8_t stage; volatile uint16_t actual_len; }_ctrl_xfer; //------------- Helper Function -------------// TU_ATTR_ALWAYS_INLINE static inline usbh_device_t* get_device(uint8_t dev_addr) { TU_VERIFY(dev_addr > 0 && dev_addr <= TOTAL_DEVICES, NULL); return &_usbh_devices[dev_addr-1]; } static bool enum_new_device(hcd_event_t* event); static void process_removing_device(uint8_t rhport, uint8_t hub_addr, uint8_t hub_port); static bool usbh_edpt_control_open(uint8_t dev_addr, uint8_t max_packet_size); static bool usbh_control_xfer_cb (uint8_t daddr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); #if CFG_TUSB_OS == OPT_OS_NONE // TODO rework time-related function later // weak and overridable TU_ATTR_WEAK void osal_task_delay(uint32_t msec) { const uint32_t start = hcd_frame_number(_usbh_controller); while ( ( hcd_frame_number(_usbh_controller) - start ) < msec ) {} } #endif TU_ATTR_ALWAYS_INLINE static inline bool queue_event(hcd_event_t const * event, bool in_isr) { TU_ASSERT(osal_queue_send(_usbh_q, event, in_isr)); tuh_event_hook_cb(event->rhport, event->event_id, in_isr); return true; } //--------------------------------------------------------------------+ // Device API //--------------------------------------------------------------------+ bool tuh_mounted(uint8_t dev_addr) { usbh_device_t *dev = get_device(dev_addr); TU_VERIFY(dev); return dev->configured; } bool tuh_vid_pid_get(uint8_t dev_addr, uint16_t *vid, uint16_t *pid) { *vid = *pid = 0; usbh_device_t const *dev = get_device(dev_addr); TU_VERIFY(dev && dev->addressed && dev->vid != 0); *vid = dev->vid; *pid = dev->pid; return true; } tusb_speed_t tuh_speed_get(uint8_t dev_addr) { usbh_device_t *dev = get_device(dev_addr); return (tusb_speed_t) (dev ? get_device(dev_addr)->speed : _dev0.speed); } bool tuh_rhport_is_active(uint8_t rhport) { return _usbh_controller == rhport; } bool tuh_rhport_reset_bus(uint8_t rhport, bool active) { TU_VERIFY(tuh_rhport_is_active(rhport)); if ( active ) { hcd_port_reset(rhport); } else { hcd_port_reset_end(rhport); } return true; } //--------------------------------------------------------------------+ // PUBLIC API (Parameter Verification is required) //--------------------------------------------------------------------+ bool tuh_configure(uint8_t rhport, uint32_t cfg_id, const void *cfg_param) { return hcd_configure(rhport, cfg_id, cfg_param); } static void clear_device(usbh_device_t* dev) { tu_memclr(dev, sizeof(usbh_device_t)); memset(dev->itf2drv, TUSB_INDEX_INVALID_8, sizeof(dev->itf2drv)); // invalid mapping memset(dev->ep2drv , TUSB_INDEX_INVALID_8, sizeof(dev->ep2drv )); // invalid mapping } bool tuh_inited(void) { return _usbh_controller != TUSB_INDEX_INVALID_8; } bool tuh_init(uint8_t rhport) { // skip if already initialized if (tuh_rhport_is_active(rhport)) return true; TU_LOG_USBH("USBH init on controller %u\r\n", rhport); // Init host stack if not already if (!tuh_inited()) { TU_LOG_INT_USBH(sizeof(usbh_device_t)); TU_LOG_INT_USBH(sizeof(hcd_event_t)); TU_LOG_INT_USBH(sizeof(_ctrl_xfer)); TU_LOG_INT_USBH(sizeof(tuh_xfer_t)); TU_LOG_INT_USBH(sizeof(tu_fifo_t)); TU_LOG_INT_USBH(sizeof(tu_edpt_stream_t)); // Event queue _usbh_q = osal_queue_create(&_usbh_qdef); TU_ASSERT(_usbh_q != NULL); #if OSAL_MUTEX_REQUIRED // Init mutex _usbh_mutex = osal_mutex_create(&_usbh_mutexdef); TU_ASSERT(_usbh_mutex); #endif // Get application driver if available if (usbh_app_driver_get_cb) { _app_driver = usbh_app_driver_get_cb(&_app_driver_count); } // Device tu_memclr(&_dev0, sizeof(_dev0)); tu_memclr(_usbh_devices, sizeof(_usbh_devices)); tu_memclr(&_ctrl_xfer, sizeof(_ctrl_xfer)); for (uint8_t i = 0; i < TOTAL_DEVICES; i++) { clear_device(&_usbh_devices[i]); } // Class drivers for (uint8_t drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++) { usbh_class_driver_t const* driver = get_driver(drv_id); if (driver) { TU_LOG_USBH("%s init\r\n", driver->name); driver->init(); } } } // Init host controller _usbh_controller = rhport;; TU_ASSERT(hcd_init(rhport)); hcd_int_enable(rhport); return true; } bool tuh_deinit(uint8_t rhport) { if (!tuh_rhport_is_active(rhport)) return true; // deinit host controller hcd_int_disable(rhport); hcd_deinit(rhport); _usbh_controller = TUSB_INDEX_INVALID_8; // "unplug" all devices on this rhport (hub_addr = 0, hub_port = 0) process_removing_device(rhport, 0, 0); // deinit host stack if no controller is active if (!tuh_inited()) { // Class drivers for (uint8_t drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++) { usbh_class_driver_t const* driver = get_driver(drv_id); if (driver && driver->deinit) { TU_LOG_USBH("%s deinit\r\n", driver->name); driver->deinit(); } } osal_queue_delete(_usbh_q); _usbh_q = NULL; #if OSAL_MUTEX_REQUIRED // TODO make sure there is no task waiting on this mutex osal_mutex_delete(_usbh_mutex); _usbh_mutex = NULL; #endif } return true; } bool tuh_task_event_ready(void) { // Skip if stack is not initialized if ( !tuh_inited() ) return false; return !osal_queue_empty(_usbh_q); } /* USB Host Driver task * This top level thread manages all host controller event and delegates events to class-specific drivers. * This should be called periodically within the mainloop or rtos thread. * @code int main(void) { application_init(); tusb_init(); while(1) // the mainloop { application_code(); tuh_task(); // tinyusb host task } } @endcode */ void tuh_task_ext(uint32_t timeout_ms, bool in_isr) { (void) in_isr; // not implemented yet // Skip if stack is not initialized if (!tuh_inited()) return; // Loop until there is no more events in the queue while (1) { hcd_event_t event; if (!osal_queue_receive(_usbh_q, &event, timeout_ms)) return; switch (event.event_id) { case HCD_EVENT_DEVICE_ATTACH: // due to the shared _usbh_ctrl_buf, we must complete enumerating one device before enumerating another one. // TODO better to have an separated queue for newly attached devices if (_dev0.enumerating) { TU_LOG_USBH("[%u:] USBH Defer Attach until current enumeration complete\r\n", event.rhport); bool is_empty = osal_queue_empty(_usbh_q); queue_event(&event, in_isr); if (is_empty) { // Exit if this is the only event in the queue, otherwise we may loop forever return; } } else { TU_LOG_USBH("[%u:] USBH DEVICE ATTACH\r\n", event.rhport); _dev0.enumerating = 1; enum_new_device(&event); } break; case HCD_EVENT_DEVICE_REMOVE: TU_LOG_USBH("[%u:%u:%u] USBH DEVICE REMOVED\r\n", event.rhport, event.connection.hub_addr, event.connection.hub_port); process_removing_device(event.rhport, event.connection.hub_addr, event.connection.hub_port); #if CFG_TUH_HUB // TODO remove if (event.connection.hub_addr != 0 && event.connection.hub_port != 0) { // done with hub, waiting for next data on status pipe (void) hub_edpt_status_xfer(event.connection.hub_addr); } #endif break; case HCD_EVENT_XFER_COMPLETE: { uint8_t const ep_addr = event.xfer_complete.ep_addr; uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const ep_dir = (uint8_t) tu_edpt_dir(ep_addr); TU_LOG_USBH("on EP %02X with %u bytes: %s\r\n", ep_addr, (unsigned int) event.xfer_complete.len, tu_str_xfer_result[event.xfer_complete.result]); if (event.dev_addr == 0) { // device 0 only has control endpoint TU_ASSERT(epnum == 0,); usbh_control_xfer_cb(event.dev_addr, ep_addr, (xfer_result_t) event.xfer_complete.result, event.xfer_complete.len); } else { usbh_device_t* dev = get_device(event.dev_addr); TU_VERIFY(dev && dev->connected,); dev->ep_status[epnum][ep_dir].busy = 0; dev->ep_status[epnum][ep_dir].claimed = 0; if (0 == epnum) { usbh_control_xfer_cb(event.dev_addr, ep_addr, (xfer_result_t) event.xfer_complete.result, event.xfer_complete.len); } else { // Prefer application callback over built-in one if available. This occurs when tuh_edpt_xfer() is used // with enabled driver e.g HID endpoint #if CFG_TUH_API_EDPT_XFER tuh_xfer_cb_t const complete_cb = dev->ep_callback[epnum][ep_dir].complete_cb; if ( complete_cb ) { // re-construct xfer info tuh_xfer_t xfer = { .daddr = event.dev_addr, .ep_addr = ep_addr, .result = event.xfer_complete.result, .actual_len = event.xfer_complete.len, .buflen = 0, // not available .buffer = NULL, // not available .complete_cb = complete_cb, .user_data = dev->ep_callback[epnum][ep_dir].user_data }; complete_cb(&xfer); }else #endif { uint8_t drv_id = dev->ep2drv[epnum][ep_dir]; usbh_class_driver_t const* driver = get_driver(drv_id); if (driver) { TU_LOG_USBH("%s xfer callback\r\n", driver->name); driver->xfer_cb(event.dev_addr, ep_addr, (xfer_result_t) event.xfer_complete.result, event.xfer_complete.len); } else { // no driver/callback responsible for this transfer TU_ASSERT(false,); } } } } break; } case USBH_EVENT_FUNC_CALL: if (event.func_call.func) event.func_call.func(event.func_call.param); break; default: break; } // return if there is no more events, for application to run other background if (osal_queue_empty(_usbh_q)) return; } } //--------------------------------------------------------------------+ // Control transfer //--------------------------------------------------------------------+ static void _control_blocking_complete_cb(tuh_xfer_t* xfer) { // update result *((xfer_result_t*) xfer->user_data) = xfer->result; } // TODO timeout_ms is not supported yet bool tuh_control_xfer (tuh_xfer_t* xfer) { // EP0 with setup packet TU_VERIFY(xfer->ep_addr == 0 && xfer->setup); // Check if device is still connected (enumerating for dev0) uint8_t const daddr = xfer->daddr; if ( daddr == 0 ) { if (!_dev0.enumerating) return false; } else { usbh_device_t const* dev = get_device(daddr); if (dev && dev->connected == 0) return false; } // pre-check to help reducing mutex lock TU_VERIFY(_ctrl_xfer.stage == CONTROL_STAGE_IDLE); (void) osal_mutex_lock(_usbh_mutex, OSAL_TIMEOUT_WAIT_FOREVER); bool const is_idle = (_ctrl_xfer.stage == CONTROL_STAGE_IDLE); if (is_idle) { _ctrl_xfer.stage = CONTROL_STAGE_SETUP; _ctrl_xfer.daddr = daddr; _ctrl_xfer.actual_len = 0; _ctrl_xfer.request = (*xfer->setup); _ctrl_xfer.buffer = xfer->buffer; _ctrl_xfer.complete_cb = xfer->complete_cb; _ctrl_xfer.user_data = xfer->user_data; } (void) osal_mutex_unlock(_usbh_mutex); TU_VERIFY(is_idle); const uint8_t rhport = usbh_get_rhport(daddr); TU_LOG_USBH("[%u:%u] %s: ", rhport, daddr, (xfer->setup->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD && xfer->setup->bRequest <= TUSB_REQ_SYNCH_FRAME) ? tu_str_std_request[xfer->setup->bRequest] : "Class Request"); TU_LOG_BUF_USBH(xfer->setup, 8); if (xfer->complete_cb) { TU_ASSERT( hcd_setup_send(rhport, daddr, (uint8_t const*) &_ctrl_xfer.request) ); }else { // blocking if complete callback is not provided // change callback to internal blocking, and result as user argument volatile xfer_result_t result = XFER_RESULT_INVALID; // use user_data to point to xfer_result_t _ctrl_xfer.user_data = (uintptr_t) &result; _ctrl_xfer.complete_cb = _control_blocking_complete_cb; TU_ASSERT( hcd_setup_send(rhport, daddr, (uint8_t*) &_ctrl_xfer.request) ); while (result == XFER_RESULT_INVALID) { // Note: this can be called within an callback ie. part of tuh_task() // therefore event with RTOS tuh_task() still need to be invoked if (tuh_task_event_ready()) { tuh_task(); } // TODO probably some timeout to prevent hanged } // update transfer result, user_data is expected to point to xfer_result_t if (xfer->user_data != 0) { *((xfer_result_t*) xfer->user_data) = result; } xfer->result = result; xfer->actual_len = _ctrl_xfer.actual_len; } return true; } TU_ATTR_ALWAYS_INLINE static inline void _set_control_xfer_stage(uint8_t stage) { (void) osal_mutex_lock(_usbh_mutex, OSAL_TIMEOUT_WAIT_FOREVER); _ctrl_xfer.stage = stage; (void) osal_mutex_unlock(_usbh_mutex); } static void _control_xfer_complete(uint8_t daddr, xfer_result_t result) { TU_LOG_USBH("\r\n"); // duplicate xfer since user can execute control transfer within callback tusb_control_request_t const request = _ctrl_xfer.request; tuh_xfer_t xfer_temp = { .daddr = daddr, .ep_addr = 0, .result = result, .setup = &request, .actual_len = (uint32_t) _ctrl_xfer.actual_len, .buffer = _ctrl_xfer.buffer, .complete_cb = _ctrl_xfer.complete_cb, .user_data = _ctrl_xfer.user_data }; _set_control_xfer_stage(CONTROL_STAGE_IDLE); if (xfer_temp.complete_cb) { xfer_temp.complete_cb(&xfer_temp); } } static bool usbh_control_xfer_cb (uint8_t daddr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { (void) ep_addr; const uint8_t rhport = usbh_get_rhport(daddr); tusb_control_request_t const * request = &_ctrl_xfer.request; if (XFER_RESULT_SUCCESS != result) { TU_LOG_USBH("[%u:%u] Control %s, xferred_bytes = %" PRIu32 "\r\n", rhport, daddr, result == XFER_RESULT_STALLED ? "STALLED" : "FAILED", xferred_bytes); TU_LOG_BUF_USBH(request, 8); // terminate transfer if any stage failed _control_xfer_complete(daddr, result); }else { switch(_ctrl_xfer.stage) { case CONTROL_STAGE_SETUP: if (request->wLength) { // DATA stage: initial data toggle is always 1 _set_control_xfer_stage(CONTROL_STAGE_DATA); TU_ASSERT( hcd_edpt_xfer(rhport, daddr, tu_edpt_addr(0, request->bmRequestType_bit.direction), _ctrl_xfer.buffer, request->wLength) ); return true; } TU_ATTR_FALLTHROUGH; case CONTROL_STAGE_DATA: if (request->wLength) { TU_LOG_USBH("[%u:%u] Control data:\r\n", rhport, daddr); TU_LOG_MEM_USBH(_ctrl_xfer.buffer, xferred_bytes, 2); } _ctrl_xfer.actual_len = (uint16_t) xferred_bytes; // ACK stage: toggle is always 1 _set_control_xfer_stage(CONTROL_STAGE_ACK); TU_ASSERT( hcd_edpt_xfer(rhport, daddr, tu_edpt_addr(0, 1 - request->bmRequestType_bit.direction), NULL, 0) ); break; case CONTROL_STAGE_ACK: { // Abort all pending transfers if SET_CONFIGURATION request // NOTE: should we force closing all non-control endpoints in the future? if (request->bRequest == TUSB_REQ_SET_CONFIGURATION && request->bmRequestType == 0x00) { for(uint8_t epnum=1; epnumdaddr; uint8_t const ep_addr = xfer->ep_addr; TU_VERIFY(daddr && ep_addr); TU_VERIFY(usbh_edpt_claim(daddr, ep_addr)); if (!usbh_edpt_xfer_with_callback(daddr, ep_addr, xfer->buffer, (uint16_t) xfer->buflen, xfer->complete_cb, xfer->user_data)) { usbh_edpt_release(daddr, ep_addr); return false; } return true; } bool tuh_edpt_abort_xfer(uint8_t daddr, uint8_t ep_addr) { usbh_device_t* dev = get_device(daddr); TU_VERIFY(dev); TU_LOG_USBH("[%u] Aborted transfer on EP %02X\r\n", daddr, ep_addr); uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); if ( epnum == 0 ) { // control transfer: only 1 control at a time, check if we are aborting the current one TU_VERIFY(daddr == _ctrl_xfer.daddr && _ctrl_xfer.stage != CONTROL_STAGE_IDLE); TU_VERIFY(hcd_edpt_abort_xfer(dev->rhport, daddr, ep_addr)); // reset control transfer state to idle _set_control_xfer_stage(CONTROL_STAGE_IDLE); } else { // non-control skip if not busy TU_VERIFY(dev->ep_status[epnum][dir].busy); TU_VERIFY(hcd_edpt_abort_xfer(dev->rhport, daddr, ep_addr)); // mark as ready and release endpoint if transfer is aborted dev->ep_status[epnum][dir].busy = false; tu_edpt_release(&dev->ep_status[epnum][dir], _usbh_mutex); } return true; } //--------------------------------------------------------------------+ // USBH API For Class Driver //--------------------------------------------------------------------+ uint8_t usbh_get_rhport(uint8_t dev_addr) { usbh_device_t *dev = get_device(dev_addr); return dev ? dev->rhport : _dev0.rhport; } uint8_t *usbh_get_enum_buf(void) { return _usbh_ctrl_buf; } void usbh_int_set(bool enabled) { // TODO all host controller if multiple are used since they shared the same event queue if (enabled) { hcd_int_enable(_usbh_controller); } else { hcd_int_disable(_usbh_controller); } } void usbh_defer_func(osal_task_func_t func, void *param, bool in_isr) { hcd_event_t event = { 0 }; event.event_id = USBH_EVENT_FUNC_CALL; event.func_call.func = func; event.func_call.param = param; queue_event(&event, in_isr); } //--------------------------------------------------------------------+ // Endpoint API //--------------------------------------------------------------------+ // Claim an endpoint for transfer bool usbh_edpt_claim(uint8_t dev_addr, uint8_t ep_addr) { // Note: addr0 only use tuh_control_xfer usbh_device_t* dev = get_device(dev_addr); TU_ASSERT(dev && dev->connected); uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); TU_VERIFY(tu_edpt_claim(&dev->ep_status[epnum][dir], _usbh_mutex)); TU_LOG_USBH("[%u] Claimed EP 0x%02x\r\n", dev_addr, ep_addr); return true; } // Release an claimed endpoint due to failed transfer attempt bool usbh_edpt_release(uint8_t dev_addr, uint8_t ep_addr) { // Note: addr0 only use tuh_control_xfer usbh_device_t* dev = get_device(dev_addr); TU_VERIFY(dev && dev->connected); uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); TU_VERIFY(tu_edpt_release(&dev->ep_status[epnum][dir], _usbh_mutex)); TU_LOG_USBH("[%u] Released EP 0x%02x\r\n", dev_addr, ep_addr); return true; } // Submit an transfer // TODO call usbh_edpt_release if failed bool usbh_edpt_xfer_with_callback(uint8_t dev_addr, uint8_t ep_addr, uint8_t* buffer, uint16_t total_bytes, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { (void) complete_cb; (void) user_data; usbh_device_t* dev = get_device(dev_addr); TU_VERIFY(dev); uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); tu_edpt_state_t* ep_state = &dev->ep_status[epnum][dir]; TU_LOG_USBH(" Queue EP %02X with %u bytes ... \r\n", ep_addr, total_bytes); // Attempt to transfer on a busy endpoint, sound like an race condition ! TU_ASSERT(ep_state->busy == 0); // Set busy first since the actual transfer can be complete before hcd_edpt_xfer() // could return and USBH task can preempt and clear the busy ep_state->busy = 1; #if CFG_TUH_API_EDPT_XFER dev->ep_callback[epnum][dir].complete_cb = complete_cb; dev->ep_callback[epnum][dir].user_data = user_data; #endif if (hcd_edpt_xfer(dev->rhport, dev_addr, ep_addr, buffer, total_bytes)) { TU_LOG_USBH("OK\r\n"); return true; } else { // HCD error, mark endpoint as ready to allow next transfer ep_state->busy = 0; ep_state->claimed = 0; TU_LOG1("Failed\r\n"); // TU_BREAKPOINT(); return false; } } static bool usbh_edpt_control_open(uint8_t dev_addr, uint8_t max_packet_size) { TU_LOG_USBH("[%u:%u] Open EP0 with Size = %u\r\n", usbh_get_rhport(dev_addr), dev_addr, max_packet_size); tusb_desc_endpoint_t ep0_desc = { .bLength = sizeof(tusb_desc_endpoint_t), .bDescriptorType = TUSB_DESC_ENDPOINT, .bEndpointAddress = 0, .bmAttributes = { .xfer = TUSB_XFER_CONTROL }, .wMaxPacketSize = max_packet_size, .bInterval = 0 }; return hcd_edpt_open(usbh_get_rhport(dev_addr), dev_addr, &ep0_desc); } bool tuh_edpt_open(uint8_t dev_addr, tusb_desc_endpoint_t const* desc_ep) { TU_ASSERT(tu_edpt_validate(desc_ep, tuh_speed_get(dev_addr))); return hcd_edpt_open(usbh_get_rhport(dev_addr), dev_addr, desc_ep); } bool usbh_edpt_busy(uint8_t dev_addr, uint8_t ep_addr) { usbh_device_t* dev = get_device(dev_addr); TU_VERIFY(dev); uint8_t const epnum = tu_edpt_number(ep_addr); uint8_t const dir = tu_edpt_dir(ep_addr); return dev->ep_status[epnum][dir].busy; } //--------------------------------------------------------------------+ // HCD Event Handler //--------------------------------------------------------------------+ void hcd_devtree_get_info(uint8_t dev_addr, hcd_devtree_info_t* devtree_info) { usbh_device_t const* dev = get_device(dev_addr); if (dev) { devtree_info->rhport = dev->rhport; devtree_info->hub_addr = dev->hub_addr; devtree_info->hub_port = dev->hub_port; devtree_info->speed = dev->speed; } else { devtree_info->rhport = _dev0.rhport; devtree_info->hub_addr = _dev0.hub_addr; devtree_info->hub_port = _dev0.hub_port; devtree_info->speed = _dev0.speed; } } TU_ATTR_FAST_FUNC void hcd_event_handler(hcd_event_t const* event, bool in_isr) { switch (event->event_id) { case HCD_EVENT_DEVICE_REMOVE: // FIXME device remove from a hub need an HCD API for hcd to free up endpoint // mark device as removing to prevent further xfer before the event is processed in usbh task // Check if dev0 is removed if ((event->rhport == _dev0.rhport) && (event->connection.hub_addr == _dev0.hub_addr) && (event->connection.hub_port == _dev0.hub_port)) { _dev0.enumerating = 0; } break; default: break; } queue_event(event, in_isr); } //--------------------------------------------------------------------+ // Descriptors Async //--------------------------------------------------------------------+ // generic helper to get a descriptor // if blocking, user_data is pointed to xfer_result static bool _get_descriptor(uint8_t daddr, uint8_t type, uint8_t index, uint16_t language_id, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_DEVICE, .type = TUSB_REQ_TYPE_STANDARD, .direction = TUSB_DIR_IN }, .bRequest = TUSB_REQ_GET_DESCRIPTOR, .wValue = tu_htole16( TU_U16(type, index) ), .wIndex = tu_htole16(language_id), .wLength = tu_htole16(len) }; tuh_xfer_t xfer = { .daddr = daddr, .ep_addr = 0, .setup = &request, .buffer = buffer, .complete_cb = complete_cb, .user_data = user_data }; return tuh_control_xfer(&xfer); } bool tuh_descriptor_get(uint8_t daddr, uint8_t type, uint8_t index, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { return _get_descriptor(daddr, type, index, 0x0000, buffer, len, complete_cb, user_data); } bool tuh_descriptor_get_device(uint8_t daddr, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { len = tu_min16(len, sizeof(tusb_desc_device_t)); return tuh_descriptor_get(daddr, TUSB_DESC_DEVICE, 0, buffer, len, complete_cb, user_data); } bool tuh_descriptor_get_configuration(uint8_t daddr, uint8_t index, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { return tuh_descriptor_get(daddr, TUSB_DESC_CONFIGURATION, index, buffer, len, complete_cb, user_data); } //------------- String Descriptor -------------// bool tuh_descriptor_get_string(uint8_t daddr, uint8_t index, uint16_t language_id, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { return _get_descriptor(daddr, TUSB_DESC_STRING, index, language_id, buffer, len, complete_cb, user_data); } // Get manufacturer string descriptor bool tuh_descriptor_get_manufacturer_string(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { usbh_device_t const* dev = get_device(daddr); TU_VERIFY(dev && dev->i_manufacturer); return tuh_descriptor_get_string(daddr, dev->i_manufacturer, language_id, buffer, len, complete_cb, user_data); } // Get product string descriptor bool tuh_descriptor_get_product_string(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { usbh_device_t const* dev = get_device(daddr); TU_VERIFY(dev && dev->i_product); return tuh_descriptor_get_string(daddr, dev->i_product, language_id, buffer, len, complete_cb, user_data); } // Get serial string descriptor bool tuh_descriptor_get_serial_string(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { usbh_device_t const* dev = get_device(daddr); TU_VERIFY(dev && dev->i_serial); return tuh_descriptor_get_string(daddr, dev->i_serial, language_id, buffer, len, complete_cb, user_data); } // Get HID report descriptor // if blocking, user_data is pointed to xfer_result bool tuh_descriptor_get_hid_report(uint8_t daddr, uint8_t itf_num, uint8_t desc_type, uint8_t index, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { TU_LOG_USBH("HID Get Report Descriptor\r\n"); tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_INTERFACE, .type = TUSB_REQ_TYPE_STANDARD, .direction = TUSB_DIR_IN }, .bRequest = TUSB_REQ_GET_DESCRIPTOR, .wValue = tu_htole16(TU_U16(desc_type, index)), .wIndex = tu_htole16((uint16_t) itf_num), .wLength = len }; tuh_xfer_t xfer = { .daddr = daddr, .ep_addr = 0, .setup = &request, .buffer = buffer, .complete_cb = complete_cb, .user_data = user_data }; return tuh_control_xfer(&xfer); } bool tuh_configuration_set(uint8_t daddr, uint8_t config_num, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { TU_LOG_USBH("Set Configuration = %d\r\n", config_num); tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_DEVICE, .type = TUSB_REQ_TYPE_STANDARD, .direction = TUSB_DIR_OUT }, .bRequest = TUSB_REQ_SET_CONFIGURATION, .wValue = tu_htole16(config_num), .wIndex = 0, .wLength = 0 }; tuh_xfer_t xfer = { .daddr = daddr, .ep_addr = 0, .setup = &request, .buffer = NULL, .complete_cb = complete_cb, .user_data = user_data }; return tuh_control_xfer(&xfer); } bool tuh_interface_set(uint8_t daddr, uint8_t itf_num, uint8_t itf_alt, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { TU_LOG_USBH("Set Interface %u Alternate %u\r\n", itf_num, itf_alt); tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_DEVICE, .type = TUSB_REQ_TYPE_STANDARD, .direction = TUSB_DIR_OUT }, .bRequest = TUSB_REQ_SET_INTERFACE, .wValue = tu_htole16(itf_alt), .wIndex = tu_htole16(itf_num), .wLength = 0 }; tuh_xfer_t xfer = { .daddr = daddr, .ep_addr = 0, .setup = &request, .buffer = NULL, .complete_cb = complete_cb, .user_data = user_data }; return tuh_control_xfer(&xfer); } //--------------------------------------------------------------------+ // Descriptor Sync //--------------------------------------------------------------------+ #define _CONTROL_SYNC_API(_async_func, ...) \ xfer_result_t result = XFER_RESULT_INVALID;\ TU_VERIFY(_async_func(__VA_ARGS__, NULL, (uintptr_t) &result), XFER_RESULT_TIMEOUT); \ return (uint8_t) result uint8_t tuh_descriptor_get_sync(uint8_t daddr, uint8_t type, uint8_t index, void* buffer, uint16_t len) { _CONTROL_SYNC_API(tuh_descriptor_get, daddr, type, index, buffer, len); } uint8_t tuh_descriptor_get_device_sync(uint8_t daddr, void* buffer, uint16_t len) { _CONTROL_SYNC_API(tuh_descriptor_get_device, daddr, buffer, len); } uint8_t tuh_descriptor_get_configuration_sync(uint8_t daddr, uint8_t index, void* buffer, uint16_t len) { _CONTROL_SYNC_API(tuh_descriptor_get_configuration, daddr, index, buffer, len); } uint8_t tuh_descriptor_get_hid_report_sync(uint8_t daddr, uint8_t itf_num, uint8_t desc_type, uint8_t index, void* buffer, uint16_t len) { _CONTROL_SYNC_API(tuh_descriptor_get_hid_report, daddr, itf_num, desc_type, index, buffer, len); } uint8_t tuh_descriptor_get_string_sync(uint8_t daddr, uint8_t index, uint16_t language_id, void* buffer, uint16_t len) { _CONTROL_SYNC_API(tuh_descriptor_get_string, daddr, index, language_id, buffer, len); } uint8_t tuh_descriptor_get_manufacturer_string_sync(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len) { _CONTROL_SYNC_API(tuh_descriptor_get_manufacturer_string, daddr, language_id, buffer, len); } uint8_t tuh_descriptor_get_product_string_sync(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len) { _CONTROL_SYNC_API(tuh_descriptor_get_product_string, daddr, language_id, buffer, len); } uint8_t tuh_descriptor_get_serial_string_sync(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len) { _CONTROL_SYNC_API(tuh_descriptor_get_serial_string, daddr, language_id, buffer, len); } //--------------------------------------------------------------------+ // Detaching //--------------------------------------------------------------------+ TU_ATTR_ALWAYS_INLINE static inline bool is_hub_addr(uint8_t daddr) { return (CFG_TUH_HUB > 0) && (daddr > CFG_TUH_DEVICE_MAX); } //static void mark_removing_device_isr(uint8_t rhport, uint8_t hub_addr, uint8_t hub_port) { // for (uint8_t dev_id = 0; dev_id < TOTAL_DEVICES; dev_id++) { // usbh_device_t *dev = &_usbh_devices[dev_id]; // uint8_t const daddr = dev_id + 1; // // // hub_addr = 0 means roothub, hub_port = 0 means all devices of downstream hub // if (dev->rhport == rhport && dev->connected && // (hub_addr == 0 || dev->hub_addr == hub_addr) && // (hub_port == 0 || dev->hub_port == hub_port)) { // if (is_hub_addr(daddr)) { // // If the device itself is a usb hub, mark all downstream devices. // // FIXME recursive calls // mark_removing_device_isr(rhport, daddr, 0); // } // // dev->removing = 1; // } // } //} // a device unplugged from rhport:hub_addr:hub_port static void process_removing_device(uint8_t rhport, uint8_t hub_addr, uint8_t hub_port) { //------------- find the all devices (star-network) under port that is unplugged -------------// // TODO mark as disconnected in ISR, also handle dev0 uint32_t removing_hubs = 0; do { for (uint8_t dev_id = 0; dev_id < TOTAL_DEVICES; dev_id++) { usbh_device_t* dev = &_usbh_devices[dev_id]; uint8_t const daddr = dev_id + 1; // hub_addr = 0 means roothub, hub_port = 0 means all devices of downstream hub if (dev->rhport == rhport && dev->connected && (hub_addr == 0 || dev->hub_addr == hub_addr) && (hub_port == 0 || dev->hub_port == hub_port)) { TU_LOG_USBH("[%u:%u:%u] unplugged address = %u\r\n", rhport, hub_addr, hub_port, daddr); if (is_hub_addr(daddr)) { TU_LOG_USBH(" is a HUB device %u\r\n", daddr); removing_hubs |= TU_BIT(dev_id - CFG_TUH_DEVICE_MAX); } else { // Invoke callback before closing driver (maybe call it later ?) if (tuh_umount_cb) tuh_umount_cb(daddr); } // Close class driver for (uint8_t drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++) { usbh_class_driver_t const* driver = get_driver(drv_id); if (driver) driver->close(daddr); } hcd_device_close(rhport, daddr); clear_device(dev); // abort on-going control xfer on this device if any if (_ctrl_xfer.daddr == daddr) _set_control_xfer_stage(CONTROL_STAGE_IDLE); } } // if removing a hub, we need to remove its downstream devices #if CFG_TUH_HUB if (removing_hubs == 0) break; // find a marked hub to process for (uint8_t h_id = 0; h_id < CFG_TUH_HUB; h_id++) { if (tu_bit_test(removing_hubs, h_id)) { removing_hubs &= ~TU_BIT(h_id); // update hub_addr and hub_port for next loop hub_addr = h_id + 1 + CFG_TUH_DEVICE_MAX; hub_port = 0; break; } } #else (void) removing_hubs; break; #endif } while(1); } //--------------------------------------------------------------------+ // Enumeration Process // is a lengthy process with a series of control transfer to configure // newly attached device. // NOTE: due to the shared _usbh_ctrl_buf, we must complete enumerating // one device before enumerating another one. //--------------------------------------------------------------------+ enum { ENUM_RESET_DELAY = 50, // USB specs: 10 to 50ms ENUM_CONTACT_DEBOUNCING_DELAY = 450, // when plug/unplug a device, physical connection can be bouncing and may // generate a series of attach/detach event. This delay wait for stable connection }; enum { ENUM_IDLE, ENUM_RESET_1, // 1st reset when attached //ENUM_HUB_GET_STATUS_1, ENUM_HUB_CLEAR_RESET_1, ENUM_ADDR0_DEVICE_DESC, ENUM_RESET_2, // 2nd reset before set address (not used) ENUM_HUB_GET_STATUS_2, ENUM_HUB_CLEAR_RESET_2, ENUM_SET_ADDR, ENUM_GET_DEVICE_DESC, ENUM_GET_9BYTE_CONFIG_DESC, ENUM_GET_FULL_CONFIG_DESC, ENUM_SET_CONFIG, ENUM_CONFIG_DRIVER }; static bool enum_request_set_addr(void); static bool _parse_configuration_descriptor (uint8_t dev_addr, tusb_desc_configuration_t const* desc_cfg); static void enum_full_complete(void); // process device enumeration static void process_enumeration(tuh_xfer_t* xfer) { // Retry a few times with transfers in enumeration since device can be unstable when starting up enum { ATTEMPT_COUNT_MAX = 3, ATTEMPT_DELAY_MS = 100 }; static uint8_t failed_count = 0; if (XFER_RESULT_SUCCESS != xfer->result) { // retry if not reaching max attempt bool retry = _dev0.enumerating && (failed_count < ATTEMPT_COUNT_MAX); if ( retry ) { failed_count++; osal_task_delay(ATTEMPT_DELAY_MS); // delay a bit TU_LOG1("Enumeration attempt %u\r\n", failed_count); retry = tuh_control_xfer(xfer); } if (!retry) { enum_full_complete(); } return; } failed_count = 0; uint8_t const daddr = xfer->daddr; uintptr_t const state = xfer->user_data; switch (state) { #if CFG_TUH_HUB //case ENUM_HUB_GET_STATUS_1: break; case ENUM_HUB_CLEAR_RESET_1: { hub_port_status_response_t port_status; memcpy(&port_status, _usbh_ctrl_buf, sizeof(hub_port_status_response_t)); if (!port_status.status.connection) { // device unplugged while delaying, nothing else to do enum_full_complete(); return; } _dev0.speed = (port_status.status.high_speed) ? TUSB_SPEED_HIGH : (port_status.status.low_speed) ? TUSB_SPEED_LOW : TUSB_SPEED_FULL; // Acknowledge Port Reset Change if (port_status.change.reset) { hub_port_clear_reset_change(_dev0.hub_addr, _dev0.hub_port, process_enumeration, ENUM_ADDR0_DEVICE_DESC); } break; } case ENUM_HUB_GET_STATUS_2: osal_task_delay(ENUM_RESET_DELAY); TU_ASSERT(hub_port_get_status(_dev0.hub_addr, _dev0.hub_port, _usbh_ctrl_buf, process_enumeration, ENUM_HUB_CLEAR_RESET_2),); break; case ENUM_HUB_CLEAR_RESET_2: { hub_port_status_response_t port_status; memcpy(&port_status, _usbh_ctrl_buf, sizeof(hub_port_status_response_t)); // Acknowledge Port Reset Change if Reset Successful if (port_status.change.reset) { TU_ASSERT(hub_port_clear_reset_change(_dev0.hub_addr, _dev0.hub_port, process_enumeration, ENUM_SET_ADDR),); } break; } #endif case ENUM_ADDR0_DEVICE_DESC: { // TODO probably doesn't need to open/close each enumeration uint8_t const addr0 = 0; TU_ASSERT(usbh_edpt_control_open(addr0, 8),); // Get first 8 bytes of device descriptor for Control Endpoint size TU_LOG_USBH("Get 8 byte of Device Descriptor\r\n"); TU_ASSERT(tuh_descriptor_get_device(addr0, _usbh_ctrl_buf, 8, process_enumeration, ENUM_SET_ADDR),); break; } #if 0 case ENUM_RESET_2: // TODO not used by now, but may be needed for some devices !? // Reset device again before Set Address TU_LOG_USBH("Port reset2 \r\n"); if (_dev0.hub_addr == 0) { // connected directly to roothub hcd_port_reset( _dev0.rhport ); osal_task_delay(RESET_DELAY); // TODO may not work for no-OS on MCU that require reset_end() since // sof of controller may not running while resetting hcd_port_reset_end(_dev0.rhport); // TODO: fall through to SET ADDRESS, refactor later } #if CFG_TUH_HUB else { // after RESET_DELAY the hub_port_reset() already complete TU_ASSERT( hub_port_reset(_dev0.hub_addr, _dev0.hub_port, process_enumeration, ENUM_HUB_GET_STATUS_2), ); break; } #endif TU_ATTR_FALLTHROUGH; #endif case ENUM_SET_ADDR: enum_request_set_addr(); break; case ENUM_GET_DEVICE_DESC: { uint8_t const new_addr = (uint8_t) tu_le16toh(xfer->setup->wValue); usbh_device_t* new_dev = get_device(new_addr); TU_ASSERT(new_dev,); new_dev->addressed = 1; // Close device 0 hcd_device_close(_dev0.rhport, 0); // open control pipe for new address TU_ASSERT(usbh_edpt_control_open(new_addr, new_dev->ep0_size),); // Get full device descriptor TU_LOG_USBH("Get Device Descriptor\r\n"); TU_ASSERT(tuh_descriptor_get_device(new_addr, _usbh_ctrl_buf, sizeof(tusb_desc_device_t), process_enumeration, ENUM_GET_9BYTE_CONFIG_DESC),); break; } case ENUM_GET_9BYTE_CONFIG_DESC: { tusb_desc_device_t const* desc_device = (tusb_desc_device_t const*) _usbh_ctrl_buf; usbh_device_t* dev = get_device(daddr); TU_ASSERT(dev,); dev->vid = desc_device->idVendor; dev->pid = desc_device->idProduct; dev->i_manufacturer = desc_device->iManufacturer; dev->i_product = desc_device->iProduct; dev->i_serial = desc_device->iSerialNumber; // if (tuh_attach_cb) tuh_attach_cb((tusb_desc_device_t*) _usbh_ctrl_buf); // Get 9-byte for total length uint8_t const config_idx = CONFIG_NUM - 1; TU_LOG_USBH("Get Configuration[0] Descriptor (9 bytes)\r\n"); TU_ASSERT(tuh_descriptor_get_configuration(daddr, config_idx, _usbh_ctrl_buf, 9, process_enumeration, ENUM_GET_FULL_CONFIG_DESC),); break; } case ENUM_GET_FULL_CONFIG_DESC: { uint8_t const* desc_config = _usbh_ctrl_buf; // Use offsetof to avoid pointer to the odd/misaligned address uint16_t const total_len = tu_le16toh( tu_unaligned_read16(desc_config + offsetof(tusb_desc_configuration_t, wTotalLength))); // TODO not enough buffer to hold configuration descriptor TU_ASSERT(total_len <= CFG_TUH_ENUMERATION_BUFSIZE,); // Get full configuration descriptor uint8_t const config_idx = CONFIG_NUM - 1; TU_LOG_USBH("Get Configuration[0] Descriptor\r\n"); TU_ASSERT(tuh_descriptor_get_configuration(daddr, config_idx, _usbh_ctrl_buf, total_len, process_enumeration, ENUM_SET_CONFIG),); break; } case ENUM_SET_CONFIG: TU_ASSERT(tuh_configuration_set(daddr, CONFIG_NUM, process_enumeration, ENUM_CONFIG_DRIVER),); break; case ENUM_CONFIG_DRIVER: { TU_LOG_USBH("Device configured\r\n"); usbh_device_t* dev = get_device(daddr); TU_ASSERT(dev,); dev->configured = 1; // Parse configuration & set up drivers // driver_open() must not make any usb transfer TU_ASSERT(_parse_configuration_descriptor(daddr, (tusb_desc_configuration_t*) _usbh_ctrl_buf),); // Start the Set Configuration process for interfaces (itf = TUSB_INDEX_INVALID_8) // Since driver can perform control transfer within its set_config, this is done asynchronously. // The process continue with next interface when class driver complete its sequence with usbh_driver_set_config_complete() // TODO use separated API instead of using TUSB_INDEX_INVALID_8 usbh_driver_set_config_complete(daddr, TUSB_INDEX_INVALID_8); break; } default: // stop enumeration if unknown state enum_full_complete(); break; } } static bool enum_new_device(hcd_event_t* event) { _dev0.rhport = event->rhport; _dev0.hub_addr = event->connection.hub_addr; _dev0.hub_port = event->connection.hub_port; if (_dev0.hub_addr == 0) { // connected/disconnected directly with roothub hcd_port_reset(_dev0.rhport); osal_task_delay(ENUM_RESET_DELAY); // TODO may not work for no-OS on MCU that require reset_end() since // sof of controller may not running while resetting hcd_port_reset_end(_dev0.rhport); // wait until device connection is stable TODO non blocking osal_task_delay(ENUM_CONTACT_DEBOUNCING_DELAY); // device unplugged while delaying if (!hcd_port_connect_status(_dev0.rhport)) { enum_full_complete(); return true; } _dev0.speed = hcd_port_speed_get(_dev0.rhport); TU_LOG_USBH("%s Speed\r\n", tu_str_speed[_dev0.speed]); // fake transfer to kick-off the enumeration process tuh_xfer_t xfer; xfer.daddr = 0; xfer.result = XFER_RESULT_SUCCESS; xfer.user_data = ENUM_ADDR0_DEVICE_DESC; process_enumeration(&xfer); } #if CFG_TUH_HUB else { // connected/disconnected via external hub // wait until device connection is stable TODO non blocking osal_task_delay(ENUM_CONTACT_DEBOUNCING_DELAY); // ENUM_HUB_GET_STATUS //TU_ASSERT( hub_port_get_status(_dev0.hub_addr, _dev0.hub_port, _usbh_ctrl_buf, enum_hub_get_status0_complete, 0) ); TU_ASSERT(hub_port_get_status(_dev0.hub_addr, _dev0.hub_port, _usbh_ctrl_buf, process_enumeration, ENUM_HUB_CLEAR_RESET_1)); } #endif // hub return true; } static uint8_t get_new_address(bool is_hub) { uint8_t start; uint8_t end; if ( is_hub ) { start = CFG_TUH_DEVICE_MAX; end = start + CFG_TUH_HUB; }else { start = 0; end = start + CFG_TUH_DEVICE_MAX; } for (uint8_t idx = start; idx < end; idx++) { if (!_usbh_devices[idx].connected) return (idx+1); } return 0; // invalid address } static bool enum_request_set_addr(void) { tusb_desc_device_t const* desc_device = (tusb_desc_device_t const*) _usbh_ctrl_buf; // Get new address uint8_t const new_addr = get_new_address(desc_device->bDeviceClass == TUSB_CLASS_HUB); TU_ASSERT(new_addr != 0); TU_LOG_USBH("Set Address = %d\r\n", new_addr); usbh_device_t* new_dev = get_device(new_addr); new_dev->rhport = _dev0.rhport; new_dev->hub_addr = _dev0.hub_addr; new_dev->hub_port = _dev0.hub_port; new_dev->speed = _dev0.speed; new_dev->connected = 1; new_dev->ep0_size = desc_device->bMaxPacketSize0; tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_DEVICE, .type = TUSB_REQ_TYPE_STANDARD, .direction = TUSB_DIR_OUT }, .bRequest = TUSB_REQ_SET_ADDRESS, .wValue = tu_htole16(new_addr), .wIndex = 0, .wLength = 0 }; tuh_xfer_t xfer = { .daddr = 0, // dev0 .ep_addr = 0, .setup = &request, .buffer = NULL, .complete_cb = process_enumeration, .user_data = ENUM_GET_DEVICE_DESC }; TU_ASSERT(tuh_control_xfer(&xfer)); return true; } static bool _parse_configuration_descriptor(uint8_t dev_addr, tusb_desc_configuration_t const* desc_cfg) { usbh_device_t* dev = get_device(dev_addr); uint16_t const total_len = tu_le16toh(desc_cfg->wTotalLength); uint8_t const* desc_end = ((uint8_t const*) desc_cfg) + total_len; uint8_t const* p_desc = tu_desc_next(desc_cfg); TU_LOG_USBH("Parsing Configuration descriptor (wTotalLength = %u)\r\n", total_len); // parse each interfaces while( p_desc < desc_end ) { uint8_t assoc_itf_count = 1; // Class will always starts with Interface Association (if any) and then Interface descriptor if ( TUSB_DESC_INTERFACE_ASSOCIATION == tu_desc_type(p_desc) ) { tusb_desc_interface_assoc_t const * desc_iad = (tusb_desc_interface_assoc_t const *) p_desc; assoc_itf_count = desc_iad->bInterfaceCount; p_desc = tu_desc_next(p_desc); // next to Interface // IAD's first interface number and class should match with opened interface //TU_ASSERT(desc_iad->bFirstInterface == desc_itf->bInterfaceNumber && // desc_iad->bFunctionClass == desc_itf->bInterfaceClass); } TU_ASSERT( TUSB_DESC_INTERFACE == tu_desc_type(p_desc) ); tusb_desc_interface_t const* desc_itf = (tusb_desc_interface_t const*) p_desc; #if CFG_TUH_MIDI // MIDI has 2 interfaces (Audio Control v1 + MIDIStreaming) but does not have IAD // manually force associated count = 2 if (1 == assoc_itf_count && TUSB_CLASS_AUDIO == desc_itf->bInterfaceClass && AUDIO_SUBCLASS_CONTROL == desc_itf->bInterfaceSubClass && AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_itf->bInterfaceProtocol) { assoc_itf_count = 2; } #endif #if CFG_TUH_CDC // Some legacy CDC device does not use IAD but rather use device class as hint to combine 2 interfaces // manually force associated count = 2 if (1 == assoc_itf_count && TUSB_CLASS_CDC == desc_itf->bInterfaceClass && CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == desc_itf->bInterfaceSubClass) { assoc_itf_count = 2; } #endif uint16_t const drv_len = tu_desc_get_interface_total_len(desc_itf, assoc_itf_count, (uint16_t) (desc_end-p_desc)); TU_ASSERT(drv_len >= sizeof(tusb_desc_interface_t)); // Find driver for this interface for (uint8_t drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++) { usbh_class_driver_t const * driver = get_driver(drv_id); if (driver && driver->open(dev->rhport, dev_addr, desc_itf, drv_len) ) { // open successfully TU_LOG_USBH(" %s opened\r\n", driver->name); // bind (associated) interfaces to found driver for(uint8_t i=0; ibInterfaceNumber+i; // Interface number must not be used already TU_ASSERT( TUSB_INDEX_INVALID_8 == dev->itf2drv[itf_num] ); dev->itf2drv[itf_num] = drv_id; } // bind all endpoints to found driver tu_edpt_bind_driver(dev->ep2drv, desc_itf, drv_len, drv_id); break; // exit driver find loop } if ( drv_id == TOTAL_DRIVER_COUNT - 1 ) { TU_LOG_USBH("[%u:%u] Interface %u: class = %u subclass = %u protocol = %u is not supported\r\n", dev->rhport, dev_addr, desc_itf->bInterfaceNumber, desc_itf->bInterfaceClass, desc_itf->bInterfaceSubClass, desc_itf->bInterfaceProtocol); } } // next Interface or IAD descriptor p_desc += drv_len; } return true; } void usbh_driver_set_config_complete(uint8_t dev_addr, uint8_t itf_num) { usbh_device_t* dev = get_device(dev_addr); for(itf_num++; itf_num < CFG_TUH_INTERFACE_MAX; itf_num++) { // continue with next valid interface // IAD binding interface such as CDCs should return itf_num + 1 when complete // with usbh_driver_set_config_complete() uint8_t const drv_id = dev->itf2drv[itf_num]; usbh_class_driver_t const * driver = get_driver(drv_id); if (driver) { TU_LOG_USBH("%s set config: itf = %u\r\n", driver->name, itf_num); driver->set_config(dev_addr, itf_num); break; } } // all interface are configured if (itf_num == CFG_TUH_INTERFACE_MAX) { enum_full_complete(); if (is_hub_addr(dev_addr)) { TU_LOG_USBH("HUB address = %u is mounted\r\n", dev_addr); }else { // Invoke callback if available if (tuh_mount_cb) tuh_mount_cb(dev_addr); } } } static void enum_full_complete(void) { // mark enumeration as complete _dev0.enumerating = 0; #if CFG_TUH_HUB // get next hub status if (_dev0.hub_addr) hub_edpt_status_xfer(_dev0.hub_addr); #endif } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/host/usbh.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_USBH_H_ #define _TUSB_USBH_H_ #ifdef __cplusplus extern "C" { #endif #include "common/tusb_common.h" //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ // forward declaration struct tuh_xfer_s; typedef struct tuh_xfer_s tuh_xfer_t; typedef void (*tuh_xfer_cb_t)(tuh_xfer_t* xfer); // Note1: layout and order of this will be changed in near future // it is advised to initialize it using member name // Note2: not all field is available/meaningful in callback, // some info is not saved by usbh to save SRAM struct tuh_xfer_s { uint8_t daddr; uint8_t ep_addr; uint8_t TU_RESERVED; // reserved xfer_result_t result; uint32_t actual_len; // excluding setup packet union { tusb_control_request_t const* setup; // setup packet pointer if control transfer uint32_t buflen; // expected length if not control transfer (not available in callback) }; uint8_t* buffer; // not available in callback if not control transfer tuh_xfer_cb_t complete_cb; uintptr_t user_data; // uint32_t timeout_ms; // place holder, not supported yet }; // Subject to change typedef struct { uint8_t daddr; tusb_desc_interface_t desc; } tuh_itf_info_t; // ConfigID for tuh_configure() enum { TUH_CFGID_INVALID = 0, TUH_CFGID_RPI_PIO_USB_CONFIGURATION = 100, // cfg_param: pio_usb_configuration_t TUH_CFGID_MAX3421 = 200, }; typedef struct { uint8_t max_nak; // max NAK per endpoint per frame uint8_t cpuctl; // R16: CPU Control Register uint8_t pinctl; // R17: Pin Control Register. FDUPSPI bit is ignored } tuh_configure_max3421_t; typedef union { // For TUH_CFGID_RPI_PIO_USB_CONFIGURATION use pio_usb_configuration_t tuh_configure_max3421_t max3421; } tuh_configure_param_t; //--------------------------------------------------------------------+ // APPLICATION CALLBACK //--------------------------------------------------------------------+ //TU_ATTR_WEAK uint8_t tuh_attach_cb (tusb_desc_device_t const *desc_device); // Invoked when a device is mounted (configured) TU_ATTR_WEAK void tuh_mount_cb (uint8_t daddr); // Invoked when a device failed to mount during enumeration process // TU_ATTR_WEAK void tuh_mount_failed_cb (uint8_t daddr); // Invoked when a device is unmounted (detached) TU_ATTR_WEAK void tuh_umount_cb(uint8_t daddr); // Invoked when there is a new usb event, which need to be processed by tuh_task()/tuh_task_ext() void tuh_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr); //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ // Configure host stack behavior with dynamic or port-specific parameters. // Should be called before tuh_init() // - cfg_id : configure ID (TBD) // - cfg_param: configure data, structure depends on the ID bool tuh_configure(uint8_t rhport, uint32_t cfg_id, const void* cfg_param); // Init host stack bool tuh_init(uint8_t rhport); // Deinit host stack on rhport bool tuh_deinit(uint8_t rhport); // Check if host stack is already initialized with any roothub ports // To check if an rhport is initialized, use tuh_rhport_is_active() bool tuh_inited(void); // Task function should be called in main/rtos loop, extended version of tuh_task() // - timeout_ms: millisecond to wait, zero = no wait, 0xFFFFFFFF = wait forever // - in_isr: if function is called in ISR void tuh_task_ext(uint32_t timeout_ms, bool in_isr); // Task function should be called in main/rtos loop TU_ATTR_ALWAYS_INLINE static inline void tuh_task(void) { tuh_task_ext(UINT32_MAX, false); } // Check if there is pending events need processing by tuh_task() bool tuh_task_event_ready(void); #ifndef _TUSB_HCD_H_ extern void hcd_int_handler(uint8_t rhport, bool in_isr); #endif // Interrupt handler alias to HCD with in_isr as optional parameter // - tuh_int_handler(rhport) --> hcd_int_handler(rhport, true) // - tuh_int_handler(rhport, in_isr) --> hcd_int_handler(rhport, in_isr) // Note: this is similar to TU_VERIFY(), _GET_3RD_ARG() is defined in tusb_verify.h #define _tuh_int_handler_1arg(_rhport) hcd_int_handler(_rhport, true) #define _tuh_int_hanlder_2arg(_rhport, _in_isr) hcd_int_handler(_rhport, _in_isr) #define tuh_int_handler(...) _GET_3RD_ARG(__VA_ARGS__, _tuh_int_hanlder_2arg, _tuh_int_handler_1arg, _dummy)(__VA_ARGS__) // Check if roothub port is initialized and active as a host bool tuh_rhport_is_active(uint8_t rhport); // Assert/de-assert Bus Reset signal to roothub port. USB specs: it should last 10-50ms bool tuh_rhport_reset_bus(uint8_t rhport, bool active); //--------------------------------------------------------------------+ // Device API //--------------------------------------------------------------------+ // Get VID/PID of device bool tuh_vid_pid_get(uint8_t daddr, uint16_t* vid, uint16_t* pid); // Get speed of device tusb_speed_t tuh_speed_get(uint8_t daddr); // Check if device is connected and configured bool tuh_mounted(uint8_t daddr); // Check if device is suspended TU_ATTR_ALWAYS_INLINE static inline bool tuh_suspended(uint8_t daddr) { // TODO implement suspend & resume on host (void) daddr; return false; } // Check if device is ready to communicate with TU_ATTR_ALWAYS_INLINE static inline bool tuh_ready(uint8_t daddr) { return tuh_mounted(daddr) && !tuh_suspended(daddr); } //--------------------------------------------------------------------+ // Transfer API //--------------------------------------------------------------------+ // Submit a control transfer // - async: complete callback invoked when finished. // - sync : blocking if complete callback is NULL. bool tuh_control_xfer(tuh_xfer_t* xfer); // Submit a bulk/interrupt transfer // - async: complete callback invoked when finished. // - sync : blocking if complete callback is NULL. bool tuh_edpt_xfer(tuh_xfer_t* xfer); // Open a non-control endpoint bool tuh_edpt_open(uint8_t daddr, tusb_desc_endpoint_t const * desc_ep); // Abort a queued transfer. Note: it can only abort transfer that has not been started // Return true if a queued transfer is aborted, false if there is no transfer to abort bool tuh_edpt_abort_xfer(uint8_t daddr, uint8_t ep_addr); // Set Configuration (control transfer) // config_num = 0 will un-configure device. Note: config_num = config_descriptor_index + 1 // true on success, false if there is on-going control transfer or incorrect parameters // if complete_cb == NULL i.e blocking, user_data should be pointed to xfer_reuslt_t* bool tuh_configuration_set(uint8_t daddr, uint8_t config_num, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Set Interface (control transfer) // true on success, false if there is on-going control transfer or incorrect parameters // if complete_cb == NULL i.e blocking, user_data should be pointed to xfer_reuslt_t* bool tuh_interface_set(uint8_t daddr, uint8_t itf_num, uint8_t itf_alt, tuh_xfer_cb_t complete_cb, uintptr_t user_data); //--------------------------------------------------------------------+ // Descriptors Asynchronous (non-blocking) //--------------------------------------------------------------------+ // Get an descriptor (control transfer) // true on success, false if there is on-going control transfer or incorrect parameters bool tuh_descriptor_get(uint8_t daddr, uint8_t type, uint8_t index, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Get device descriptor (control transfer) // true on success, false if there is on-going control transfer or incorrect parameters bool tuh_descriptor_get_device(uint8_t daddr, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Get configuration descriptor (control transfer) // true on success, false if there is on-going control transfer or incorrect parameters bool tuh_descriptor_get_configuration(uint8_t daddr, uint8_t index, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Get HID report descriptor (control transfer) // true on success, false if there is on-going control transfer or incorrect parameters bool tuh_descriptor_get_hid_report(uint8_t daddr, uint8_t itf_num, uint8_t desc_type, uint8_t index, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Get string descriptor (control transfer) // true on success, false if there is on-going control transfer or incorrect parameters // Blocking if complete callback is NULL, in this case 'user_data' must contain xfer_result_t variable bool tuh_descriptor_get_string(uint8_t daddr, uint8_t index, uint16_t language_id, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Get manufacturer string descriptor (control transfer) // true on success, false if there is on-going control transfer or incorrect parameters bool tuh_descriptor_get_manufacturer_string(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Get product string descriptor (control transfer) // true on success, false if there is on-going control transfer or incorrect parameters bool tuh_descriptor_get_product_string(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Get serial string descriptor (control transfer) // true on success, false if there is on-going control transfer or incorrect parameters bool tuh_descriptor_get_serial_string(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len, tuh_xfer_cb_t complete_cb, uintptr_t user_data); //--------------------------------------------------------------------+ // Descriptors Synchronous (blocking) //--------------------------------------------------------------------+ // Sync (blocking) version of tuh_descriptor_get() // return transfer result uint8_t tuh_descriptor_get_sync(uint8_t daddr, uint8_t type, uint8_t index, void* buffer, uint16_t len); // Sync (blocking) version of tuh_descriptor_get_device() // return transfer result uint8_t tuh_descriptor_get_device_sync(uint8_t daddr, void* buffer, uint16_t len); // Sync (blocking) version of tuh_descriptor_get_configuration() // return transfer result uint8_t tuh_descriptor_get_configuration_sync(uint8_t daddr, uint8_t index, void* buffer, uint16_t len); // Sync (blocking) version of tuh_descriptor_get_hid_report() // return transfer result uint8_t tuh_descriptor_get_hid_report_sync(uint8_t daddr, uint8_t itf_num, uint8_t desc_type, uint8_t index, void* buffer, uint16_t len); // Sync (blocking) version of tuh_descriptor_get_string() // return transfer result uint8_t tuh_descriptor_get_string_sync(uint8_t daddr, uint8_t index, uint16_t language_id, void* buffer, uint16_t len); // Sync (blocking) version of tuh_descriptor_get_manufacturer_string() // return transfer result uint8_t tuh_descriptor_get_manufacturer_string_sync(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len); // Sync (blocking) version of tuh_descriptor_get_product_string() // return transfer result uint8_t tuh_descriptor_get_product_string_sync(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len); // Sync (blocking) version of tuh_descriptor_get_serial_string() // return transfer result uint8_t tuh_descriptor_get_serial_string_sync(uint8_t daddr, uint16_t language_id, void* buffer, uint16_t len); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/host/usbh_pvt.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2021, Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_USBH_PVT_H_ #define _TUSB_USBH_PVT_H_ #include "osal/osal.h" #include "common/tusb_fifo.h" #include "common/tusb_private.h" #ifdef __cplusplus extern "C" { #endif #define TU_LOG_USBH(...) TU_LOG(CFG_TUH_LOG_LEVEL, __VA_ARGS__) #define TU_LOG_MEM_USBH(...) TU_LOG_MEM(CFG_TUH_LOG_LEVEL, __VA_ARGS__) #define TU_LOG_BUF_USBH(...) TU_LOG_BUF(CFG_TUH_LOG_LEVEL, __VA_ARGS__) #define TU_LOG_INT_USBH(...) TU_LOG_INT(CFG_TUH_LOG_LEVEL, __VA_ARGS__) #define TU_LOG_HEX_USBH(...) TU_LOG_HEX(CFG_TUH_LOG_LEVEL, __VA_ARGS__) enum { USBH_EPSIZE_BULK_MAX = (TUH_OPT_HIGH_SPEED ? TUSB_EPSIZE_BULK_HS : TUSB_EPSIZE_BULK_FS) }; //--------------------------------------------------------------------+ // Class Driver API //--------------------------------------------------------------------+ typedef struct { char const* name; bool (* const init )(void); bool (* const deinit )(void); bool (* const open )(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const * itf_desc, uint16_t max_len); bool (* const set_config )(uint8_t dev_addr, uint8_t itf_num); bool (* const xfer_cb )(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); void (* const close )(uint8_t dev_addr); } usbh_class_driver_t; // Invoked when initializing host stack to get additional class drivers. // Can be implemented by application to extend/overwrite class driver support. // Note: The drivers array must be accessible at all time when stack is active usbh_class_driver_t const* usbh_app_driver_get_cb(uint8_t* driver_count) TU_ATTR_WEAK; // Call by class driver to tell USBH that it has complete the enumeration void usbh_driver_set_config_complete(uint8_t dev_addr, uint8_t itf_num); uint8_t usbh_get_rhport(uint8_t dev_addr); uint8_t* usbh_get_enum_buf(void); void usbh_int_set(bool enabled); void usbh_defer_func(osal_task_func_t func, void *param, bool in_isr); //--------------------------------------------------------------------+ // USBH Endpoint API //--------------------------------------------------------------------+ // Submit a usb transfer with callback support, require CFG_TUH_API_EDPT_XFER bool usbh_edpt_xfer_with_callback(uint8_t dev_addr, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes, tuh_xfer_cb_t complete_cb, uintptr_t user_data); TU_ATTR_ALWAYS_INLINE static inline bool usbh_edpt_xfer(uint8_t dev_addr, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes) { return usbh_edpt_xfer_with_callback(dev_addr, ep_addr, buffer, total_bytes, NULL, 0); } // Claim an endpoint before submitting a transfer. // If caller does not make any transfer, it must release endpoint for others. bool usbh_edpt_claim(uint8_t dev_addr, uint8_t ep_addr); // Release claimed endpoint without submitting a transfer bool usbh_edpt_release(uint8_t dev_addr, uint8_t ep_addr); // Check if endpoint transferring is complete bool usbh_edpt_busy(uint8_t dev_addr, uint8_t ep_addr); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/osal/osal.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_OSAL_H_ #define _TUSB_OSAL_H_ #ifdef __cplusplus extern "C" { #endif #include "common/tusb_common.h" typedef void (*osal_task_func_t)( void * ); // Timeout #define OSAL_TIMEOUT_NOTIMEOUT (0) // Return immediately #define OSAL_TIMEOUT_NORMAL (10) // Default timeout #define OSAL_TIMEOUT_WAIT_FOREVER (UINT32_MAX) // Wait forever #define OSAL_TIMEOUT_CONTROL_XFER OSAL_TIMEOUT_WAIT_FOREVER // Mutex is required when using a preempted RTOS or MCU has multiple cores #if (CFG_TUSB_OS == OPT_OS_NONE) && !TUP_MCU_MULTIPLE_CORE #define OSAL_MUTEX_REQUIRED 0 #define OSAL_MUTEX_DEF(_name) uint8_t :0 #else #define OSAL_MUTEX_REQUIRED 1 #define OSAL_MUTEX_DEF(_name) osal_mutex_def_t _name #endif // OS thin implementation #if CFG_TUSB_OS == OPT_OS_NONE #include "osal_none.h" #elif CFG_TUSB_OS == OPT_OS_FREERTOS #include "osal_freertos.h" #elif CFG_TUSB_OS == OPT_OS_MYNEWT #include "osal_mynewt.h" #elif CFG_TUSB_OS == OPT_OS_PICO #include "osal_pico.h" #elif CFG_TUSB_OS == OPT_OS_RTTHREAD #include "osal_rtthread.h" #elif CFG_TUSB_OS == OPT_OS_RTX4 #include "osal_rtx4.h" #elif CFG_TUSB_OS == OPT_OS_CUSTOM #include "tusb_os_custom.h" // implemented by application #else #error OS is not supported yet #endif //--------------------------------------------------------------------+ // OSAL Porting API // Should be implemented as static inline function in osal_port.h header /* osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef); bool osal_semaphore_delete(osal_semaphore_t semd_hdl); bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr); bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec); void osal_semaphore_reset(osal_semaphore_t sem_hdl); // TODO removed osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef); bool osal_mutex_delete(osal_mutex_t mutex_hdl) bool osal_mutex_lock (osal_mutex_t sem_hdl, uint32_t msec); bool osal_mutex_unlock(osal_mutex_t mutex_hdl); osal_queue_t osal_queue_create(osal_queue_def_t* qdef); bool osal_queue_delete(osal_queue_t qhdl); bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec); bool osal_queue_send(osal_queue_t qhdl, void const * data, bool in_isr); bool osal_queue_empty(osal_queue_t qhdl); */ //--------------------------------------------------------------------+ #ifdef __cplusplus } #endif #endif /* _TUSB_OSAL_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/osal/osal_none.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef TUSB_OSAL_NONE_H_ #define TUSB_OSAL_NONE_H_ #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ #if CFG_TUH_ENABLED // currently only needed/available in host mode TU_ATTR_WEAK void osal_task_delay(uint32_t msec); #endif //--------------------------------------------------------------------+ // Binary Semaphore API //--------------------------------------------------------------------+ typedef struct { volatile uint16_t count; } osal_semaphore_def_t; typedef osal_semaphore_def_t* osal_semaphore_t; TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef) { semdef->count = 0; return semdef; } TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { (void) semd_hdl; return true; // nothing to do } TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { (void) in_isr; sem_hdl->count++; return true; } // TODO blocking for now TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { (void) msec; while (sem_hdl->count == 0) {} sem_hdl->count--; return true; } TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) { sem_hdl->count = 0; } //--------------------------------------------------------------------+ // MUTEX API // Within tinyusb, mutex is never used in ISR context //--------------------------------------------------------------------+ typedef osal_semaphore_def_t osal_mutex_def_t; typedef osal_semaphore_t osal_mutex_t; #if OSAL_MUTEX_REQUIRED // Note: multiple cores MCUs usually do provide IPC API for mutex // or we can use std atomic function TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef) { mdef->count = 1; return mdef; } TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { (void) mutex_hdl; return true; // nothing to do } TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock (osal_mutex_t mutex_hdl, uint32_t msec) { return osal_semaphore_wait(mutex_hdl, msec); } TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { return osal_semaphore_post(mutex_hdl, false); } #else #define osal_mutex_create(_mdef) (NULL) #define osal_mutex_lock(_mutex_hdl, _ms) (true) #define osal_mutex_unlock(_mutex_hdl) (true) #endif //--------------------------------------------------------------------+ // QUEUE API //--------------------------------------------------------------------+ #include "common/tusb_fifo.h" typedef struct { void (* interrupt_set)(bool); tu_fifo_t ff; } osal_queue_def_t; typedef osal_queue_def_t* osal_queue_t; // _int_set is used as mutex in OS NONE (disable/enable USB ISR) #define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ uint8_t _name##_buf[_depth*sizeof(_type)]; \ osal_queue_def_t _name = { \ .interrupt_set = _int_set, \ .ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) \ } // lock queue by disable USB interrupt TU_ATTR_ALWAYS_INLINE static inline void _osal_q_lock(osal_queue_t qhdl) { // disable dcd/hcd interrupt qhdl->interrupt_set(false); } // unlock queue TU_ATTR_ALWAYS_INLINE static inline void _osal_q_unlock(osal_queue_t qhdl) { // enable dcd/hcd interrupt qhdl->interrupt_set(true); } TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { tu_fifo_clear(&qdef->ff); return (osal_queue_t) qdef; } TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { (void) qhdl; return true; // nothing to do } TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { (void) msec; // not used, always behave as msec = 0 _osal_q_lock(qhdl); bool success = tu_fifo_read(&qhdl->ff, data); _osal_q_unlock(qhdl); return success; } TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const* data, bool in_isr) { if (!in_isr) { _osal_q_lock(qhdl); } bool success = tu_fifo_write(&qhdl->ff, data); if (!in_isr) { _osal_q_unlock(qhdl); } return success; } TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { // Skip queue lock/unlock since this function is primarily called // with interrupt disabled before going into low power mode return tu_fifo_empty(&qhdl->ff); } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/osal/osal_pico.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef TUSB_OSAL_PICO_H_ #define TUSB_OSAL_PICO_H_ #include "pico/time.h" #include "pico/sem.h" #include "pico/mutex.h" #include "pico/critical_section.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { sleep_ms(msec); } //--------------------------------------------------------------------+ // Binary Semaphore API //--------------------------------------------------------------------+ typedef struct semaphore osal_semaphore_def_t, * osal_semaphore_t; TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef) { sem_init(semdef, 0, 255); return semdef; } TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { (void) semd_hdl; return true; // nothing to do } TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { (void) in_isr; sem_release(sem_hdl); return true; } TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { return sem_acquire_timeout_ms(sem_hdl, msec); } TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) { sem_reset(sem_hdl, 0); } //--------------------------------------------------------------------+ // MUTEX API // Within tinyusb, mutex is never used in ISR context //--------------------------------------------------------------------+ typedef struct mutex osal_mutex_def_t, * osal_mutex_t; TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef) { mutex_init(mdef); return mdef; } TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { (void) mutex_hdl; return true; // nothing to do } TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) { return mutex_enter_timeout_ms(mutex_hdl, msec); } TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { mutex_exit(mutex_hdl); return true; } //--------------------------------------------------------------------+ // QUEUE API //--------------------------------------------------------------------+ #include "common/tusb_fifo.h" typedef struct { tu_fifo_t ff; struct critical_section critsec; // osal_queue may be used in IRQs, so need critical section } osal_queue_def_t; typedef osal_queue_def_t* osal_queue_t; // role device/host is used by OS NONE for mutex (disable usb isr) only #define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ uint8_t _name##_buf[_depth*sizeof(_type)]; \ osal_queue_def_t _name = { \ .ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) \ } TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { critical_section_init(&qdef->critsec); tu_fifo_clear(&qdef->ff); return (osal_queue_t) qdef; } TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { osal_queue_def_t* qdef = (osal_queue_def_t*) qhdl; critical_section_deinit(&qdef->critsec); return true; } TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { (void) msec; // not used, always behave as msec = 0 critical_section_enter_blocking(&qhdl->critsec); bool success = tu_fifo_read(&qhdl->ff, data); critical_section_exit(&qhdl->critsec); return success; } TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const* data, bool in_isr) { (void) in_isr; critical_section_enter_blocking(&qhdl->critsec); bool success = tu_fifo_write(&qhdl->ff, data); critical_section_exit(&qhdl->critsec); return success; } TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { // TODO: revisit; whether this is true or not currently, tu_fifo_empty is a single // volatile read. // Skip queue lock/unlock since this function is primarily called // with interrupt disabled before going into low power mode return tu_fifo_empty(&qhdl->ff); } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2018, hathach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if CFG_TUD_ENABLED && (CFG_TUSB_MCU == OPT_MCU_RP2040) && CFG_TUD_RPI_PIO_USB #include "pico.h" #include "pio_usb.h" #include "pio_usb_ll.h" #include "device/dcd.h" //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM DECLARATION //--------------------------------------------------------------------+ #define RHPORT_OFFSET 1 #define RHPORT_PIO(_x) ((_x)-RHPORT_OFFSET) //------------- -------------// static usb_device_t *usb_device = NULL; static usb_descriptor_buffers_t desc; /*------------------------------------------------------------------*/ /* Device API *------------------------------------------------------------------*/ // Initialize controller to device mode void dcd_init (uint8_t rhport) { (void) rhport; static pio_usb_configuration_t config = PIO_USB_DEFAULT_CONFIG; usb_device = pio_usb_device_init(&config, &desc); } // Enable device interrupt void dcd_int_enable (uint8_t rhport) { (void) rhport; } // Disable device interrupt void dcd_int_disable (uint8_t rhport) { (void) rhport; } // Receive Set Address request, mcu port must also include status IN response void dcd_set_address (uint8_t rhport, uint8_t dev_addr) { // must be called before queuing status pio_usb_device_set_address(dev_addr); dcd_edpt_xfer(rhport, 0x80, NULL, 0); } // Wake up host void dcd_remote_wakeup (uint8_t rhport) { (void) rhport; } // Connect by enabling internal pull-up resistor on D+/D- void dcd_connect(uint8_t rhport) { (void) rhport; } // Disconnect by disabling internal pull-up resistor on D+/D- void dcd_disconnect(uint8_t rhport) { (void) rhport; } //--------------------------------------------------------------------+ // Endpoint API //--------------------------------------------------------------------+ // Configure endpoint's registers according to descriptor bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * desc_ep) { (void) rhport; return pio_usb_device_endpoint_open((uint8_t const*) desc_ep); } void dcd_edpt_close_all (uint8_t rhport) { (void) rhport; } // Submit a transfer, When complete dcd_event_xfer_complete() is invoked to notify the stack bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes) { (void) rhport; endpoint_t *ep = pio_usb_device_get_endpoint_by_address(ep_addr); return pio_usb_ll_transfer_start(ep, buffer, total_bytes); } // Submit a transfer where is managed by FIFO, When complete dcd_event_xfer_complete() is invoked to notify the stack - optional, however, must be listed in usbd.c //bool dcd_edpt_xfer_fifo (uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes) //{ // (void) rhport; // (void) ep_addr; // (void) ff; // (void) total_bytes; // return false; //} // Stall endpoint void dcd_edpt_stall (uint8_t rhport, uint8_t ep_addr) { (void) rhport; endpoint_t *ep = pio_usb_device_get_endpoint_by_address(ep_addr); ep->has_transfer = false; ep->stalled = true; } // clear stall, data toggle is also reset to DATA0 void dcd_edpt_clear_stall (uint8_t rhport, uint8_t ep_addr) { (void) rhport; endpoint_t *ep = pio_usb_device_get_endpoint_by_address(ep_addr); ep->data_id = 0; ep->stalled = false; } //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ static void __no_inline_not_in_flash_func(handle_endpoint_irq)(uint8_t tu_rhport, xfer_result_t result, volatile uint32_t* ep_reg) { const uint32_t ep_all = *ep_reg; for(uint8_t ep_idx = 0; ep_idx < PIO_USB_EP_POOL_CNT; ep_idx++) { uint32_t const mask = (1u << ep_idx); if (ep_all & mask) { endpoint_t* ep = PIO_USB_ENDPOINT(ep_idx); dcd_event_xfer_complete(tu_rhport, ep->ep_num, ep->actual_len, result, true); } } // clear all (*ep_reg) &= ~ep_all; } // IRQ Handler void __no_inline_not_in_flash_func(pio_usb_device_irq_handler)(uint8_t root_id) { uint8_t const tu_rhport = root_id + 1; root_port_t* rport = PIO_USB_ROOT_PORT(root_id); uint32_t const ints = rport->ints; if (ints & PIO_USB_INTS_RESET_END_BITS) { dcd_event_bus_reset(tu_rhport, TUSB_SPEED_FULL, true); } if (ints & PIO_USB_INTS_SETUP_REQ_BITS) { dcd_event_setup_received(tu_rhport, rport->setup_packet, true); } if ( ints & PIO_USB_INTS_ENDPOINT_COMPLETE_BITS ) { handle_endpoint_irq(tu_rhport, XFER_RESULT_SUCCESS, &rport->ep_complete); } if ( ints & PIO_USB_INTS_ENDPOINT_STALLED_BITS ) { handle_endpoint_irq(tu_rhport, XFER_RESULT_STALLED, &rport->ep_stalled); } if ( ints & PIO_USB_INTS_ENDPOINT_ERROR_BITS ) { handle_endpoint_irq(tu_rhport, XFER_RESULT_FAILED, &rport->ep_error); } // clear all rport->ints &= ~ints; } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2021 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if CFG_TUH_ENABLED && (CFG_TUSB_MCU == OPT_MCU_RP2040) && CFG_TUH_RPI_PIO_USB #include "pico.h" #include "pio_usb.h" #include "pio_usb_ll.h" //--------------------------------------------------------------------+ // INCLUDE //--------------------------------------------------------------------+ #include "osal/osal.h" #include "host/hcd.h" #include "host/usbh.h" #define RHPORT_OFFSET 1 #define RHPORT_PIO(_x) ((_x)-RHPORT_OFFSET) static pio_usb_configuration_t pio_host_cfg = PIO_USB_DEFAULT_CONFIG; //--------------------------------------------------------------------+ // HCD API //--------------------------------------------------------------------+ bool hcd_configure(uint8_t rhport, uint32_t cfg_id, const void *cfg_param) { (void) rhport; TU_VERIFY(cfg_id == TUH_CFGID_RPI_PIO_USB_CONFIGURATION); memcpy(&pio_host_cfg, cfg_param, sizeof(pio_usb_configuration_t)); return true; } bool hcd_init(uint8_t rhport) { (void) rhport; // To run USB SOF interrupt in core1, call this init in core1 pio_usb_host_init(&pio_host_cfg); return true; } void hcd_port_reset(uint8_t rhport) { uint8_t const pio_rhport = RHPORT_PIO(rhport); pio_usb_host_port_reset_start(pio_rhport); } void hcd_port_reset_end(uint8_t rhport) { uint8_t const pio_rhport = RHPORT_PIO(rhport); pio_usb_host_port_reset_end(pio_rhport); } bool hcd_port_connect_status(uint8_t rhport) { uint8_t const pio_rhport = RHPORT_PIO(rhport); root_port_t *root = PIO_USB_ROOT_PORT(pio_rhport); port_pin_status_t line_state = pio_usb_bus_get_line_state(root); return line_state != PORT_PIN_SE0; } tusb_speed_t hcd_port_speed_get(uint8_t rhport) { // TODO determine link speed uint8_t const pio_rhport = RHPORT_PIO(rhport); return PIO_USB_ROOT_PORT(pio_rhport)->is_fullspeed ? TUSB_SPEED_FULL : TUSB_SPEED_LOW; } // Close all opened endpoint belong to this device void hcd_device_close(uint8_t rhport, uint8_t dev_addr) { uint8_t const pio_rhport = RHPORT_PIO(rhport); pio_usb_host_close_device(pio_rhport, dev_addr); } uint32_t hcd_frame_number(uint8_t rhport) { (void) rhport; return pio_usb_host_get_frame_number(); } void hcd_int_enable(uint8_t rhport) { (void) rhport; } void hcd_int_disable(uint8_t rhport) { (void) rhport; } //--------------------------------------------------------------------+ // Endpoint API //--------------------------------------------------------------------+ bool hcd_edpt_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_endpoint_t const *desc_ep) { hcd_devtree_info_t dev_tree; hcd_devtree_get_info(dev_addr, &dev_tree); bool const need_pre = (dev_tree.hub_addr && dev_tree.speed == TUSB_SPEED_LOW); uint8_t const pio_rhport = RHPORT_PIO(rhport); return pio_usb_host_endpoint_open(pio_rhport, dev_addr, (uint8_t const *) desc_ep, need_pre); } bool hcd_edpt_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr, uint8_t *buffer, uint16_t buflen) { uint8_t const pio_rhport = RHPORT_PIO(rhport); return pio_usb_host_endpoint_transfer(pio_rhport, dev_addr, ep_addr, buffer, buflen); } bool hcd_edpt_abort_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr) { uint8_t const pio_rhport = RHPORT_PIO(rhport); return pio_usb_host_endpoint_abort_transfer(pio_rhport, dev_addr, ep_addr); } bool hcd_setup_send(uint8_t rhport, uint8_t dev_addr, uint8_t const setup_packet[8]) { uint8_t const pio_rhport = RHPORT_PIO(rhport); return pio_usb_host_send_setup(pio_rhport, dev_addr, setup_packet); } //bool hcd_edpt_busy(uint8_t dev_addr, uint8_t ep_addr) //{ // // EPX is shared, so multiple device addresses and endpoint addresses share that // // so if any transfer is active on epx, we are busy. Interrupt endpoints have their own // // EPX so ep->active will only be busy if there is a pending transfer on that interrupt endpoint // // on that device // pico_trace("hcd_edpt_busy dev addr %d ep_addr 0x%x\r\n", dev_addr, ep_addr); // struct hw_endpoint *ep = get_dev_ep(dev_addr, ep_addr); // assert(ep); // bool busy = ep->active; // pico_trace("busy == %d\r\n", busy); // return busy; //} bool hcd_edpt_clear_stall(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr) { (void) rhport; (void) dev_addr; (void) ep_addr; return true; } static void __no_inline_not_in_flash_func(handle_endpoint_irq)(root_port_t *rport, xfer_result_t result, volatile uint32_t *ep_reg) { (void) rport; const uint32_t ep_all = *ep_reg; for ( uint8_t ep_idx = 0; ep_idx < PIO_USB_EP_POOL_CNT; ep_idx++ ) { uint32_t const mask = (1u << ep_idx); if ( ep_all & mask ) { endpoint_t * ep = PIO_USB_ENDPOINT(ep_idx); hcd_event_xfer_complete(ep->dev_addr, ep->ep_num, ep->actual_len, result, true); } } // clear all (*ep_reg) &= ~ep_all; } // IRQ Handler void __no_inline_not_in_flash_func(pio_usb_host_irq_handler)(uint8_t root_id) { uint8_t const tu_rhport = root_id + 1; root_port_t *rport = PIO_USB_ROOT_PORT(root_id); uint32_t const ints = rport->ints; if ( ints & PIO_USB_INTS_ENDPOINT_COMPLETE_BITS ) { handle_endpoint_irq(rport, XFER_RESULT_SUCCESS, &rport->ep_complete); } if ( ints & PIO_USB_INTS_ENDPOINT_STALLED_BITS ) { handle_endpoint_irq(rport, XFER_RESULT_STALLED, &rport->ep_stalled); } if ( ints & PIO_USB_INTS_ENDPOINT_ERROR_BITS ) { handle_endpoint_irq(rport, XFER_RESULT_FAILED, &rport->ep_error); } if ( ints & PIO_USB_INTS_CONNECT_BITS ) { hcd_event_device_attach(tu_rhport, true); } if ( ints & PIO_USB_INTS_DISCONNECT_BITS ) { hcd_event_device_remove(tu_rhport, true); } // clear all rport->ints &= ~ints; } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if CFG_TUD_ENABLED && (CFG_TUSB_MCU == OPT_MCU_RP2040) && !CFG_TUD_RPI_PIO_USB #include "pico.h" #include "hardware/sync.h" #include "rp2040_usb.h" #if TUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX #include "pico/fix/rp2040_usb_device_enumeration.h" #endif #include "device/dcd.h" // Current implementation force vbus detection as always present, causing device think it is always plugged into host. // Therefore it cannot detect disconnect event, mistaken it as suspend. // Note: won't work if change to 0 (for now) #define FORCE_VBUS_DETECT 1 /*------------------------------------------------------------------*/ /* Low level controller *------------------------------------------------------------------*/ // Init these in dcd_init static uint8_t* next_buffer_ptr; // USB_MAX_ENDPOINTS Endpoints, direction TUSB_DIR_OUT for out and TUSB_DIR_IN for in. static struct hw_endpoint hw_endpoints[USB_MAX_ENDPOINTS][2]; // SOF may be used by remote wakeup as RESUME, this indicate whether SOF is actually used by usbd static bool _sof_enable = false; TU_ATTR_ALWAYS_INLINE static inline struct hw_endpoint* hw_endpoint_get_by_num(uint8_t num, tusb_dir_t dir) { return &hw_endpoints[num][dir]; } TU_ATTR_ALWAYS_INLINE static inline struct hw_endpoint* hw_endpoint_get_by_addr(uint8_t ep_addr) { uint8_t num = tu_edpt_number(ep_addr); tusb_dir_t dir = tu_edpt_dir(ep_addr); return hw_endpoint_get_by_num(num, dir); } static void _hw_endpoint_alloc(struct hw_endpoint* ep, uint8_t transfer_type) { // size must be multiple of 64 uint size = tu_div_ceil(ep->wMaxPacketSize, 64) * 64u; // double buffered Bulk endpoint if (transfer_type == TUSB_XFER_BULK) { size *= 2u; } ep->hw_data_buf = next_buffer_ptr; next_buffer_ptr += size; assert(((uintptr_t) next_buffer_ptr & 0b111111u) == 0); uint dpram_offset = hw_data_offset(ep->hw_data_buf); hard_assert(hw_data_offset(next_buffer_ptr) <= USB_DPRAM_MAX); pico_info(" Allocated %d bytes at offset 0x%x (0x%p)\r\n", size, dpram_offset, ep->hw_data_buf); // Fill in endpoint control register with buffer offset uint32_t const reg = EP_CTRL_ENABLE_BITS | ((uint) transfer_type << EP_CTRL_BUFFER_TYPE_LSB) | dpram_offset; *ep->endpoint_control = reg; } static void _hw_endpoint_close(struct hw_endpoint* ep) { // Clear hardware registers and then zero the struct // Clears endpoint enable *ep->endpoint_control = 0; // Clears buffer available, etc *ep->buffer_control = 0; // Clear any endpoint state memset(ep, 0, sizeof(struct hw_endpoint)); // Reclaim buffer space if all endpoints are closed bool reclaim_buffers = true; for (uint8_t i = 1; i < USB_MAX_ENDPOINTS; i++) { if (hw_endpoint_get_by_num(i, TUSB_DIR_OUT)->hw_data_buf != NULL || hw_endpoint_get_by_num(i, TUSB_DIR_IN)->hw_data_buf != NULL) { reclaim_buffers = false; break; } } if (reclaim_buffers) { next_buffer_ptr = &usb_dpram->epx_data[0]; } } static void hw_endpoint_close(uint8_t ep_addr) { struct hw_endpoint* ep = hw_endpoint_get_by_addr(ep_addr); _hw_endpoint_close(ep); } static void hw_endpoint_init(uint8_t ep_addr, uint16_t wMaxPacketSize, uint8_t transfer_type) { struct hw_endpoint* ep = hw_endpoint_get_by_addr(ep_addr); const uint8_t num = tu_edpt_number(ep_addr); const tusb_dir_t dir = tu_edpt_dir(ep_addr); ep->ep_addr = ep_addr; // For device, IN is a tx transfer and OUT is an rx transfer ep->rx = (dir == TUSB_DIR_OUT); ep->next_pid = 0u; ep->wMaxPacketSize = wMaxPacketSize; ep->transfer_type = transfer_type; // Every endpoint has a buffer control register in dpram if (dir == TUSB_DIR_IN) { ep->buffer_control = &usb_dpram->ep_buf_ctrl[num].in; } else { ep->buffer_control = &usb_dpram->ep_buf_ctrl[num].out; } // Clear existing buffer control state *ep->buffer_control = 0; if (num == 0) { // EP0 has no endpoint control register because the buffer offsets are fixed ep->endpoint_control = NULL; // Buffer offset is fixed (also double buffered) ep->hw_data_buf = (uint8_t*) &usb_dpram->ep0_buf_a[0]; } else { // Set the endpoint control register (starts at EP1, hence num-1) if (dir == TUSB_DIR_IN) { ep->endpoint_control = &usb_dpram->ep_ctrl[num - 1].in; } else { ep->endpoint_control = &usb_dpram->ep_ctrl[num - 1].out; } // alloc a buffer and fill in endpoint control register _hw_endpoint_alloc(ep, transfer_type); } } static void hw_endpoint_xfer(uint8_t ep_addr, uint8_t* buffer, uint16_t total_bytes) { struct hw_endpoint* ep = hw_endpoint_get_by_addr(ep_addr); hw_endpoint_xfer_start(ep, buffer, total_bytes); } static void __tusb_irq_path_func(hw_handle_buff_status)(void) { uint32_t remaining_buffers = usb_hw->buf_status; pico_trace("buf_status = 0x%08lx\r\n", remaining_buffers); uint bit = 1u; for (uint8_t i = 0; remaining_buffers && i < USB_MAX_ENDPOINTS * 2; i++) { if (remaining_buffers & bit) { // clear this in advance usb_hw_clear->buf_status = bit; // IN transfer for even i, OUT transfer for odd i struct hw_endpoint* ep = hw_endpoint_get_by_num(i >> 1u, (i & 1u) ? TUSB_DIR_OUT : TUSB_DIR_IN); // Continue xfer bool done = hw_endpoint_xfer_continue(ep); if (done) { // Notify dcd_event_xfer_complete(0, ep->ep_addr, ep->xferred_len, XFER_RESULT_SUCCESS, true); hw_endpoint_reset_transfer(ep); } remaining_buffers &= ~bit; } bit <<= 1u; } } TU_ATTR_ALWAYS_INLINE static inline void reset_ep0(void) { // If we have finished this transfer on EP0 set pid back to 1 for next // setup transfer. Also clear a stall in case for (uint8_t dir = 0; dir < 2; dir++) { struct hw_endpoint* ep = hw_endpoint_get_by_num(0, dir); if (ep->active) { // Abort any pending transfer from a prior control transfer per USB specs // Due to Errata RP2040-E2: ABORT flag is only applicable for B2 and later (unusable for B0, B1). // Which means we are not guaranteed to safely abort pending transfer on B0 and B1. uint32_t const abort_mask = (dir ? USB_EP_ABORT_EP0_IN_BITS : USB_EP_ABORT_EP0_OUT_BITS); if (rp2040_chip_version() >= 2) { usb_hw_set->abort = abort_mask; while ((usb_hw->abort_done & abort_mask) != abort_mask) {} } _hw_endpoint_buffer_control_set_value32(ep, USB_BUF_CTRL_DATA1_PID | USB_BUF_CTRL_SEL); hw_endpoint_reset_transfer(ep); if (rp2040_chip_version() >= 2) { usb_hw_clear->abort_done = abort_mask; usb_hw_clear->abort = abort_mask; } } ep->next_pid = 1u; } } static void __tusb_irq_path_func(reset_non_control_endpoints)(void) { // Disable all non-control for (uint8_t i = 0; i < USB_MAX_ENDPOINTS - 1; i++) { usb_dpram->ep_ctrl[i].in = 0; usb_dpram->ep_ctrl[i].out = 0; } // clear non-control hw endpoints tu_memclr(hw_endpoints[1], sizeof(hw_endpoints) - 2 * sizeof(hw_endpoint_t)); // reclaim buffer space next_buffer_ptr = &usb_dpram->epx_data[0]; } static void __tusb_irq_path_func(dcd_rp2040_irq)(void) { uint32_t const status = usb_hw->ints; uint32_t handled = 0; if (status & USB_INTF_DEV_SOF_BITS) { bool keep_sof_alive = false; handled |= USB_INTF_DEV_SOF_BITS; #if TUD_OPT_RP2040_USB_DEVICE_UFRAME_FIX // Errata 15 workaround for Device Bulk-In endpoint e15_last_sof = time_us_32(); for (uint8_t i = 0; i < USB_MAX_ENDPOINTS; i++) { struct hw_endpoint* ep = hw_endpoint_get_by_num(i, TUSB_DIR_IN); // Active Bulk IN endpoint requires SOF if ((ep->transfer_type == TUSB_XFER_BULK) && ep->active) { keep_sof_alive = true; hw_endpoint_lock_update(ep, 1); // Deferred enable? if (ep->pending) { ep->pending = 0; hw_endpoint_start_next_buffer(ep); } hw_endpoint_lock_update(ep, -1); } } #endif // disable SOF interrupt if it is used for RESUME in remote wakeup if (!keep_sof_alive && !_sof_enable) usb_hw_clear->inte = USB_INTS_DEV_SOF_BITS; dcd_event_sof(0, usb_hw->sof_rd & USB_SOF_RD_BITS, true); } // xfer events are handled before setup req. So if a transfer completes immediately // before closing the EP, the events will be delivered in same order. if (status & USB_INTS_BUFF_STATUS_BITS) { handled |= USB_INTS_BUFF_STATUS_BITS; hw_handle_buff_status(); } if (status & USB_INTS_SETUP_REQ_BITS) { handled |= USB_INTS_SETUP_REQ_BITS; uint8_t const* setup = remove_volatile_cast(uint8_t const*, &usb_dpram->setup_packet); // reset pid to both 1 (data and ack) reset_ep0(); // Pass setup packet to tiny usb dcd_event_setup_received(0, setup, true); usb_hw_clear->sie_status = USB_SIE_STATUS_SETUP_REC_BITS; } #if FORCE_VBUS_DETECT == 0 // Since we force VBUS detect On, device will always think it is connected and // couldn't distinguish between disconnect and suspend if (status & USB_INTS_DEV_CONN_DIS_BITS) { handled |= USB_INTS_DEV_CONN_DIS_BITS; if ( usb_hw->sie_status & USB_SIE_STATUS_CONNECTED_BITS ) { // Connected: nothing to do }else { // Disconnected dcd_event_bus_signal(0, DCD_EVENT_UNPLUGGED, true); } usb_hw_clear->sie_status = USB_SIE_STATUS_CONNECTED_BITS; } #endif // SE0 for 2.5 us or more (will last at least 10ms) if (status & USB_INTS_BUS_RESET_BITS) { pico_trace("BUS RESET\r\n"); handled |= USB_INTS_BUS_RESET_BITS; usb_hw->dev_addr_ctrl = 0; reset_non_control_endpoints(); dcd_event_bus_reset(0, TUSB_SPEED_FULL, true); usb_hw_clear->sie_status = USB_SIE_STATUS_BUS_RESET_BITS; #if TUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX // Only run enumeration workaround if pull up is enabled if (usb_hw->sie_ctrl & USB_SIE_CTRL_PULLUP_EN_BITS) rp2040_usb_device_enumeration_fix(); #endif } /* Note from pico datasheet 4.1.2.6.4 (v1.2) * If you enable the suspend interrupt, it is likely you will see a suspend interrupt when * the device is first connected but the bus is idle. The bus can be idle for a few ms before * the host begins sending start of frame packets. You will also see a suspend interrupt * when the device is disconnected if you do not have a VBUS detect circuit connected. This is * because without VBUS detection, it is impossible to tell the difference between * being disconnected and suspended. */ if (status & USB_INTS_DEV_SUSPEND_BITS) { handled |= USB_INTS_DEV_SUSPEND_BITS; dcd_event_bus_signal(0, DCD_EVENT_SUSPEND, true); usb_hw_clear->sie_status = USB_SIE_STATUS_SUSPENDED_BITS; } if (status & USB_INTS_DEV_RESUME_FROM_HOST_BITS) { handled |= USB_INTS_DEV_RESUME_FROM_HOST_BITS; dcd_event_bus_signal(0, DCD_EVENT_RESUME, true); usb_hw_clear->sie_status = USB_SIE_STATUS_RESUME_BITS; } if (status ^ handled) { panic("Unhandled IRQ 0x%x\n", (uint) (status ^ handled)); } } #define USB_INTS_ERROR_BITS ( \ USB_INTS_ERROR_DATA_SEQ_BITS | \ USB_INTS_ERROR_BIT_STUFF_BITS | \ USB_INTS_ERROR_CRC_BITS | \ USB_INTS_ERROR_RX_OVERFLOW_BITS | \ USB_INTS_ERROR_RX_TIMEOUT_BITS) /*------------------------------------------------------------------*/ /* Controller API *------------------------------------------------------------------*/ // older SDK #ifndef PICO_SHARED_IRQ_HANDLER_HIGHEST_ORDER_PRIORITY #define PICO_SHARED_IRQ_HANDLER_HIGHEST_ORDER_PRIORITY 0xff #endif void dcd_init(uint8_t rhport) { assert(rhport == 0); TU_LOG(2, "Chip Version B%u\r\n", rp2040_chip_version()); // Reset hardware to default state rp2040_usb_init(); #if FORCE_VBUS_DETECT // Force VBUS detect so the device thinks it is plugged into a host usb_hw->pwr = USB_USB_PWR_VBUS_DETECT_BITS | USB_USB_PWR_VBUS_DETECT_OVERRIDE_EN_BITS; #endif irq_add_shared_handler(USBCTRL_IRQ, dcd_rp2040_irq, PICO_SHARED_IRQ_HANDLER_HIGHEST_ORDER_PRIORITY); // Init control endpoints tu_memclr(hw_endpoints[0], 2 * sizeof(hw_endpoint_t)); hw_endpoint_init(0x0, 64, TUSB_XFER_CONTROL); hw_endpoint_init(0x80, 64, TUSB_XFER_CONTROL); // Init non-control endpoints reset_non_control_endpoints(); // Initializes the USB peripheral for device mode and enables it. // Don't need to enable the pull up here. Force VBUS usb_hw->main_ctrl = USB_MAIN_CTRL_CONTROLLER_EN_BITS; // Enable individual controller IRQS here. Processor interrupt enable will be used // for the global interrupt enable... // Note: Force VBUS detect cause disconnection not detectable usb_hw->sie_ctrl = USB_SIE_CTRL_EP0_INT_1BUF_BITS; usb_hw->inte = USB_INTS_BUFF_STATUS_BITS | USB_INTS_BUS_RESET_BITS | USB_INTS_SETUP_REQ_BITS | USB_INTS_DEV_SUSPEND_BITS | USB_INTS_DEV_RESUME_FROM_HOST_BITS | (FORCE_VBUS_DETECT ? 0 : USB_INTS_DEV_CONN_DIS_BITS); dcd_connect(rhport); } bool dcd_deinit(uint8_t rhport) { (void) rhport; reset_non_control_endpoints(); irq_remove_handler(USBCTRL_IRQ, dcd_rp2040_irq); // reset usb hardware into initial state reset_block(RESETS_RESET_USBCTRL_BITS); unreset_block_wait(RESETS_RESET_USBCTRL_BITS); return true; } void dcd_int_enable(__unused uint8_t rhport) { assert(rhport == 0); irq_set_enabled(USBCTRL_IRQ, true); } void dcd_int_disable(__unused uint8_t rhport) { assert(rhport == 0); irq_set_enabled(USBCTRL_IRQ, false); } void dcd_set_address(__unused uint8_t rhport, __unused uint8_t dev_addr) { assert(rhport == 0); // Can't set device address in hardware until status xfer has complete // Send 0len complete response on EP0 IN hw_endpoint_xfer(0x80, NULL, 0); } void dcd_remote_wakeup(__unused uint8_t rhport) { pico_info("dcd_remote_wakeup %d\n", rhport); assert(rhport == 0); // since RESUME interrupt is not triggered if we are the one initiate // briefly enable SOF to notify usbd when bus is ready usb_hw_set->inte = USB_INTS_DEV_SOF_BITS; usb_hw_set->sie_ctrl = USB_SIE_CTRL_RESUME_BITS; } // disconnect by disabling internal pull-up resistor on D+/D- void dcd_disconnect(__unused uint8_t rhport) { (void) rhport; usb_hw_clear->sie_ctrl = USB_SIE_CTRL_PULLUP_EN_BITS; } // connect by enabling internal pull-up resistor on D+/D- void dcd_connect(__unused uint8_t rhport) { (void) rhport; usb_hw_set->sie_ctrl = USB_SIE_CTRL_PULLUP_EN_BITS; } void dcd_sof_enable(uint8_t rhport, bool en) { (void) rhport; _sof_enable = en; if (en) { usb_hw_set->inte = USB_INTS_DEV_SOF_BITS; } #if !TUD_OPT_RP2040_USB_DEVICE_UFRAME_FIX else { // Don't clear immediately if the SOF workaround is in use. // The SOF handler will conditionally disable the interrupt. usb_hw_clear->inte = USB_INTS_DEV_SOF_BITS; } #endif } /*------------------------------------------------------------------*/ /* DCD Endpoint port *------------------------------------------------------------------*/ void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const* request) { (void) rhport; if (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_DEVICE && request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD && request->bRequest == TUSB_REQ_SET_ADDRESS) { usb_hw->dev_addr_ctrl = (uint8_t) request->wValue; } } bool dcd_edpt_open(__unused uint8_t rhport, tusb_desc_endpoint_t const* desc_edpt) { assert(rhport == 0); hw_endpoint_init(desc_edpt->bEndpointAddress, tu_edpt_packet_size(desc_edpt), desc_edpt->bmAttributes.xfer); return true; } void dcd_edpt_close_all(uint8_t rhport) { (void) rhport; // may need to use EP Abort reset_non_control_endpoints(); } bool dcd_edpt_xfer(__unused uint8_t rhport, uint8_t ep_addr, uint8_t* buffer, uint16_t total_bytes) { assert(rhport == 0); hw_endpoint_xfer(ep_addr, buffer, total_bytes); return true; } void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr) { (void) rhport; if (tu_edpt_number(ep_addr) == 0) { // A stall on EP0 has to be armed so it can be cleared on the next setup packet usb_hw_set->ep_stall_arm = (tu_edpt_dir(ep_addr) == TUSB_DIR_IN) ? USB_EP_STALL_ARM_EP0_IN_BITS : USB_EP_STALL_ARM_EP0_OUT_BITS; } struct hw_endpoint* ep = hw_endpoint_get_by_addr(ep_addr); // stall and clear current pending buffer // may need to use EP_ABORT _hw_endpoint_buffer_control_set_value32(ep, USB_BUF_CTRL_STALL); } void dcd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr) { (void) rhport; if (tu_edpt_number(ep_addr)) { struct hw_endpoint* ep = hw_endpoint_get_by_addr(ep_addr); // clear stall also reset toggle to DATA0, ready for next transfer ep->next_pid = 0; _hw_endpoint_buffer_control_clear_mask32(ep, USB_BUF_CTRL_STALL); } } void dcd_edpt_close(uint8_t rhport, uint8_t ep_addr) { (void) rhport; pico_trace("dcd_edpt_close %02x\r\n", ep_addr); hw_endpoint_close(ep_addr); } void __tusb_irq_path_func(dcd_int_handler)(uint8_t rhport) { (void) rhport; dcd_rp2040_irq(); } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/hcd_rp2040.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * Copyright (c) 2021 Ha Thach (tinyusb.org) for Double Buffered * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if CFG_TUH_ENABLED && (CFG_TUSB_MCU == OPT_MCU_RP2040) && !CFG_TUH_RPI_PIO_USB && !CFG_TUH_MAX3421 #include "pico.h" #include "rp2040_usb.h" //--------------------------------------------------------------------+ // INCLUDE //--------------------------------------------------------------------+ #include "osal/osal.h" #include "host/hcd.h" #include "host/usbh.h" // port 0 is native USB port, other is counted as software PIO #define RHPORT_NATIVE 0 //--------------------------------------------------------------------+ // Low level rp2040 controller functions //--------------------------------------------------------------------+ #ifndef PICO_USB_HOST_INTERRUPT_ENDPOINTS #define PICO_USB_HOST_INTERRUPT_ENDPOINTS (USB_MAX_ENDPOINTS - 1) #endif static_assert(PICO_USB_HOST_INTERRUPT_ENDPOINTS <= USB_MAX_ENDPOINTS, ""); // Host mode uses one shared endpoint register for non-interrupt endpoint static struct hw_endpoint ep_pool[1 + PICO_USB_HOST_INTERRUPT_ENDPOINTS]; #define epx (ep_pool[0]) // Flags we set by default in sie_ctrl (we add other bits on top) enum { SIE_CTRL_BASE = USB_SIE_CTRL_SOF_EN_BITS | USB_SIE_CTRL_KEEP_ALIVE_EN_BITS | USB_SIE_CTRL_PULLDOWN_EN_BITS | USB_SIE_CTRL_EP0_INT_1BUF_BITS }; static struct hw_endpoint *get_dev_ep(uint8_t dev_addr, uint8_t ep_addr) { uint8_t num = tu_edpt_number(ep_addr); if ( num == 0 ) return &epx; for ( uint32_t i = 1; i < TU_ARRAY_SIZE(ep_pool); i++ ) { struct hw_endpoint *ep = &ep_pool[i]; if ( ep->configured && (ep->dev_addr == dev_addr) && (ep->ep_addr == ep_addr) ) return ep; } return NULL; } TU_ATTR_ALWAYS_INLINE static inline uint8_t dev_speed(void) { return (usb_hw->sie_status & USB_SIE_STATUS_SPEED_BITS) >> USB_SIE_STATUS_SPEED_LSB; } TU_ATTR_ALWAYS_INLINE static inline bool need_pre(uint8_t dev_addr) { // If this device is different to the speed of the root device // (i.e. is a low speed device on a full speed hub) then need pre return hcd_port_speed_get(0) != tuh_speed_get(dev_addr); } static void __tusb_irq_path_func(hw_xfer_complete)(struct hw_endpoint *ep, xfer_result_t xfer_result) { // Mark transfer as done before we tell the tinyusb stack uint8_t dev_addr = ep->dev_addr; uint8_t ep_addr = ep->ep_addr; uint xferred_len = ep->xferred_len; hw_endpoint_reset_transfer(ep); hcd_event_xfer_complete(dev_addr, ep_addr, xferred_len, xfer_result, true); } static void __tusb_irq_path_func(_handle_buff_status_bit)(uint bit, struct hw_endpoint *ep) { usb_hw_clear->buf_status = bit; // EP may have been stalled? assert(ep->active); bool done = hw_endpoint_xfer_continue(ep); if ( done ) { hw_xfer_complete(ep, XFER_RESULT_SUCCESS); } } static void __tusb_irq_path_func(hw_handle_buff_status)(void) { uint32_t remaining_buffers = usb_hw->buf_status; pico_trace("buf_status 0x%08lx\n", remaining_buffers); // Check EPX first uint bit = 0b1; if ( remaining_buffers & bit ) { remaining_buffers &= ~bit; struct hw_endpoint * ep = &epx; uint32_t ep_ctrl = *ep->endpoint_control; if ( ep_ctrl & EP_CTRL_DOUBLE_BUFFERED_BITS ) { TU_LOG(3, "Double Buffered: "); } else { TU_LOG(3, "Single Buffered: "); } TU_LOG_HEX(3, ep_ctrl); _handle_buff_status_bit(bit, ep); } // Check "interrupt" (asynchronous) endpoints for both IN and OUT for ( uint i = 1; i <= USB_HOST_INTERRUPT_ENDPOINTS && remaining_buffers; i++ ) { // EPX is bit 0 & 1 // IEP1 IN is bit 2 // IEP1 OUT is bit 3 // IEP2 IN is bit 4 // IEP2 OUT is bit 5 // IEP3 IN is bit 6 // IEP3 OUT is bit 7 // etc for ( uint j = 0; j < 2; j++ ) { bit = 1 << (i * 2 + j); if ( remaining_buffers & bit ) { remaining_buffers &= ~bit; _handle_buff_status_bit(bit, &ep_pool[i]); } } } if ( remaining_buffers ) { panic("Unhandled buffer %d\n", remaining_buffers); } } static void __tusb_irq_path_func(hw_trans_complete)(void) { if (usb_hw->sie_ctrl & USB_SIE_CTRL_SEND_SETUP_BITS) { pico_trace("Sent setup packet\n"); struct hw_endpoint *ep = &epx; assert(ep->active); // Set transferred length to 8 for a setup packet ep->xferred_len = 8; hw_xfer_complete(ep, XFER_RESULT_SUCCESS); } else { // Don't care. Will handle this in buff status return; } } static void __tusb_irq_path_func(hcd_rp2040_irq)(void) { uint32_t status = usb_hw->ints; uint32_t handled = 0; if ( status & USB_INTS_HOST_CONN_DIS_BITS ) { handled |= USB_INTS_HOST_CONN_DIS_BITS; if ( dev_speed() ) { hcd_event_device_attach(RHPORT_NATIVE, true); } else { hcd_event_device_remove(RHPORT_NATIVE, true); } // Clear speed change interrupt usb_hw_clear->sie_status = USB_SIE_STATUS_SPEED_BITS; } if ( status & USB_INTS_STALL_BITS ) { // We have rx'd a stall from the device // NOTE THIS SHOULD HAVE PRIORITY OVER BUFF_STATUS // AND TRANS_COMPLETE as the stall is an alternative response // to one of those events pico_trace("Stall REC\n"); handled |= USB_INTS_STALL_BITS; usb_hw_clear->sie_status = USB_SIE_STATUS_STALL_REC_BITS; hw_xfer_complete(&epx, XFER_RESULT_STALLED); } if ( status & USB_INTS_BUFF_STATUS_BITS ) { handled |= USB_INTS_BUFF_STATUS_BITS; TU_LOG(2, "Buffer complete\r\n"); hw_handle_buff_status(); } if ( status & USB_INTS_TRANS_COMPLETE_BITS ) { handled |= USB_INTS_TRANS_COMPLETE_BITS; usb_hw_clear->sie_status = USB_SIE_STATUS_TRANS_COMPLETE_BITS; TU_LOG(2, "Transfer complete\r\n"); hw_trans_complete(); } if ( status & USB_INTS_ERROR_RX_TIMEOUT_BITS ) { handled |= USB_INTS_ERROR_RX_TIMEOUT_BITS; usb_hw_clear->sie_status = USB_SIE_STATUS_RX_TIMEOUT_BITS; } if ( status & USB_INTS_ERROR_DATA_SEQ_BITS ) { usb_hw_clear->sie_status = USB_SIE_STATUS_DATA_SEQ_ERROR_BITS; TU_LOG(3, " Seq Error: [0] = 0x%04u [1] = 0x%04x\r\n", tu_u32_low16(*epx.buffer_control), tu_u32_high16(*epx.buffer_control)); panic("Data Seq Error \n"); } if ( status ^ handled ) { panic("Unhandled IRQ 0x%x\n", (uint) (status ^ handled)); } } void __tusb_irq_path_func(hcd_int_handler)(uint8_t rhport, bool in_isr) { (void) rhport; (void) in_isr; hcd_rp2040_irq(); } static struct hw_endpoint *_next_free_interrupt_ep(void) { struct hw_endpoint * ep = NULL; for ( uint i = 1; i < TU_ARRAY_SIZE(ep_pool); i++ ) { ep = &ep_pool[i]; if ( !ep->configured ) { // Will be configured by _hw_endpoint_init / _hw_endpoint_allocate ep->interrupt_num = (uint8_t) (i - 1); return ep; } } return ep; } static struct hw_endpoint *_hw_endpoint_allocate(uint8_t transfer_type) { struct hw_endpoint * ep = NULL; if ( transfer_type != TUSB_XFER_CONTROL ) { // Note: even though datasheet name these "Interrupt" endpoints. These are actually // "Asynchronous" endpoints and can be used for other type such as: Bulk (ISO need confirmation) ep = _next_free_interrupt_ep(); pico_info("Allocate %s ep %d\n", tu_edpt_type_str(transfer_type), ep->interrupt_num); assert(ep); ep->buffer_control = &usbh_dpram->int_ep_buffer_ctrl[ep->interrupt_num].ctrl; ep->endpoint_control = &usbh_dpram->int_ep_ctrl[ep->interrupt_num].ctrl; // 0 for epx (double buffered): TODO increase to 1024 for ISO // 2x64 for intep0 // 3x64 for intep1 // etc ep->hw_data_buf = &usbh_dpram->epx_data[64 * (ep->interrupt_num + 2)]; } else { ep = &epx; ep->buffer_control = &usbh_dpram->epx_buf_ctrl; ep->endpoint_control = &usbh_dpram->epx_ctrl; ep->hw_data_buf = &usbh_dpram->epx_data[0]; } return ep; } static void _hw_endpoint_init(struct hw_endpoint *ep, uint8_t dev_addr, uint8_t ep_addr, uint16_t wMaxPacketSize, uint8_t transfer_type, uint8_t bmInterval) { // Already has data buffer, endpoint control, and buffer control allocated at this point assert(ep->endpoint_control); assert(ep->buffer_control); assert(ep->hw_data_buf); uint8_t const num = tu_edpt_number(ep_addr); tusb_dir_t const dir = tu_edpt_dir(ep_addr); ep->ep_addr = ep_addr; ep->dev_addr = dev_addr; // For host, IN to host == RX, anything else rx == false ep->rx = (dir == TUSB_DIR_IN); // Response to a setup packet on EP0 starts with pid of 1 ep->next_pid = (num == 0 ? 1u : 0u); ep->wMaxPacketSize = wMaxPacketSize; ep->transfer_type = transfer_type; pico_trace("hw_endpoint_init dev %d ep %02X xfer %d\n", ep->dev_addr, ep->ep_addr, ep->transfer_type); pico_trace("dev %d ep %02X setup buffer @ 0x%p\n", ep->dev_addr, ep->ep_addr, ep->hw_data_buf); uint dpram_offset = hw_data_offset(ep->hw_data_buf); // Bits 0-5 should be 0 assert(!(dpram_offset & 0b111111)); // Fill in endpoint control register with buffer offset uint32_t ep_reg = EP_CTRL_ENABLE_BITS | EP_CTRL_INTERRUPT_PER_BUFFER | (ep->transfer_type << EP_CTRL_BUFFER_TYPE_LSB) | dpram_offset; if ( bmInterval ) { ep_reg |= (uint32_t) ((bmInterval - 1) << EP_CTRL_HOST_INTERRUPT_INTERVAL_LSB); } *ep->endpoint_control = ep_reg; pico_trace("endpoint control (0x%p) <- 0x%lx\n", ep->endpoint_control, ep_reg); ep->configured = true; if ( ep != &epx ) { // Endpoint has its own addr_endp and interrupt bits to be setup! // This is an interrupt/async endpoint. so need to set up ADDR_ENDP register with: // - device address // - endpoint number / direction // - preamble uint32_t reg = (uint32_t) (dev_addr | (num << USB_ADDR_ENDP1_ENDPOINT_LSB)); if ( dir == TUSB_DIR_OUT ) { reg |= USB_ADDR_ENDP1_INTEP_DIR_BITS; } if ( need_pre(dev_addr) ) { reg |= USB_ADDR_ENDP1_INTEP_PREAMBLE_BITS; } usb_hw->int_ep_addr_ctrl[ep->interrupt_num] = reg; // Finally, enable interrupt that endpoint usb_hw_set->int_ep_ctrl = 1 << (ep->interrupt_num + 1); // If it's an interrupt endpoint we need to set up the buffer control // register } } //--------------------------------------------------------------------+ // HCD API //--------------------------------------------------------------------+ bool hcd_init(uint8_t rhport) { (void) rhport; pico_trace("hcd_init %d\n", rhport); assert(rhport == 0); // Reset any previous state rp2040_usb_init(); // Force VBUS detect to always present, for now we assume vbus is always provided (without using VBUS En) usb_hw->pwr = USB_USB_PWR_VBUS_DETECT_BITS | USB_USB_PWR_VBUS_DETECT_OVERRIDE_EN_BITS; // Remove shared irq if it was previously added so as not to fill up shared irq slots irq_remove_handler(USBCTRL_IRQ, hcd_rp2040_irq); irq_add_shared_handler(USBCTRL_IRQ, hcd_rp2040_irq, PICO_SHARED_IRQ_HANDLER_HIGHEST_ORDER_PRIORITY); // clear epx and interrupt eps memset(&ep_pool, 0, sizeof(ep_pool)); // Enable in host mode with SOF / Keep alive on usb_hw->main_ctrl = USB_MAIN_CTRL_CONTROLLER_EN_BITS | USB_MAIN_CTRL_HOST_NDEVICE_BITS; usb_hw->sie_ctrl = SIE_CTRL_BASE; usb_hw->inte = USB_INTE_BUFF_STATUS_BITS | USB_INTE_HOST_CONN_DIS_BITS | USB_INTE_HOST_RESUME_BITS | USB_INTE_STALL_BITS | USB_INTE_TRANS_COMPLETE_BITS | USB_INTE_ERROR_RX_TIMEOUT_BITS | USB_INTE_ERROR_DATA_SEQ_BITS ; return true; } bool hcd_deinit(uint8_t rhport) { (void) rhport; irq_remove_handler(USBCTRL_IRQ, hcd_rp2040_irq); reset_block(RESETS_RESET_USBCTRL_BITS); unreset_block_wait(RESETS_RESET_USBCTRL_BITS); return true; } void hcd_port_reset(uint8_t rhport) { (void) rhport; pico_trace("hcd_port_reset\n"); assert(rhport == 0); // TODO: Nothing to do here yet. Perhaps need to reset some state? } void hcd_port_reset_end(uint8_t rhport) { (void) rhport; } bool hcd_port_connect_status(uint8_t rhport) { (void) rhport; pico_trace("hcd_port_connect_status\n"); assert(rhport == 0); return usb_hw->sie_status & USB_SIE_STATUS_SPEED_BITS; } tusb_speed_t hcd_port_speed_get(uint8_t rhport) { (void) rhport; assert(rhport == 0); // TODO: Should enumval this register switch ( dev_speed() ) { case 1: return TUSB_SPEED_LOW; case 2: return TUSB_SPEED_FULL; default: panic("Invalid speed\n"); // return TUSB_SPEED_INVALID; } } // Close all opened endpoint belong to this device void hcd_device_close(uint8_t rhport, uint8_t dev_addr) { pico_trace("hcd_device_close %d\n", dev_addr); (void) rhport; if (dev_addr == 0) return; for (size_t i = 1; i < TU_ARRAY_SIZE(ep_pool); i++) { hw_endpoint_t* ep = &ep_pool[i]; if (ep->dev_addr == dev_addr && ep->configured) { // in case it is an interrupt endpoint, disable it usb_hw_clear->int_ep_ctrl = (1 << (ep->interrupt_num + 1)); usb_hw->int_ep_addr_ctrl[ep->interrupt_num] = 0; // unconfigure the endpoint ep->configured = false; *ep->endpoint_control = 0; *ep->buffer_control = 0; hw_endpoint_reset_transfer(ep); } } } uint32_t hcd_frame_number(uint8_t rhport) { (void) rhport; return usb_hw->sof_rd; } void hcd_int_enable(uint8_t rhport) { (void) rhport; assert(rhport == 0); irq_set_enabled(USBCTRL_IRQ, true); } void hcd_int_disable(uint8_t rhport) { (void) rhport; // todo we should check this is disabling from the correct core; note currently this is never called assert(rhport == 0); irq_set_enabled(USBCTRL_IRQ, false); } //--------------------------------------------------------------------+ // Endpoint API //--------------------------------------------------------------------+ bool hcd_edpt_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_endpoint_t const * ep_desc) { (void) rhport; pico_trace("hcd_edpt_open dev_addr %d, ep_addr %d\n", dev_addr, ep_desc->bEndpointAddress); // Allocated differently based on if it's an interrupt endpoint or not struct hw_endpoint *ep = _hw_endpoint_allocate(ep_desc->bmAttributes.xfer); TU_ASSERT(ep); _hw_endpoint_init(ep, dev_addr, ep_desc->bEndpointAddress, tu_edpt_packet_size(ep_desc), ep_desc->bmAttributes.xfer, ep_desc->bInterval); return true; } bool hcd_edpt_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr, uint8_t * buffer, uint16_t buflen) { (void) rhport; pico_trace("hcd_edpt_xfer dev_addr %d, ep_addr 0x%x, len %d\n", dev_addr, ep_addr, buflen); uint8_t const ep_num = tu_edpt_number(ep_addr); tusb_dir_t const ep_dir = tu_edpt_dir(ep_addr); // Get appropriate ep. Either EPX or interrupt endpoint struct hw_endpoint *ep = get_dev_ep(dev_addr, ep_addr); TU_ASSERT(ep); // EP should be inactive assert(!ep->active); // Control endpoint can change direction 0x00 <-> 0x80 if ( ep_addr != ep->ep_addr ) { assert(ep_num == 0); // Direction has flipped on endpoint control so re init it but with same properties _hw_endpoint_init(ep, dev_addr, ep_addr, ep->wMaxPacketSize, ep->transfer_type, 0); } // If a normal transfer (non-interrupt) then initiate using // sie ctrl registers. Otherwise interrupt ep registers should // already be configured if ( ep == &epx ) { hw_endpoint_xfer_start(ep, buffer, buflen); // That has set up buffer control, endpoint control etc // for host we have to initiate the transfer usb_hw->dev_addr_ctrl = (uint32_t) (dev_addr | (ep_num << USB_ADDR_ENDP_ENDPOINT_LSB)); uint32_t flags = USB_SIE_CTRL_START_TRANS_BITS | SIE_CTRL_BASE | (ep_dir ? USB_SIE_CTRL_RECEIVE_DATA_BITS : USB_SIE_CTRL_SEND_DATA_BITS) | (need_pre(dev_addr) ? USB_SIE_CTRL_PREAMBLE_EN_BITS : 0); // START_TRANS bit on SIE_CTRL seems to exhibit the same behavior as the AVAILABLE bit // described in RP2040 Datasheet, release 2.1, section "4.1.2.5.1. Concurrent access". // We write everything except the START_TRANS bit first, then wait some cycles. usb_hw->sie_ctrl = flags & ~USB_SIE_CTRL_START_TRANS_BITS; busy_wait_at_least_cycles(12); usb_hw->sie_ctrl = flags; }else { hw_endpoint_xfer_start(ep, buffer, buflen); } return true; } bool hcd_edpt_abort_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr) { (void) rhport; (void) dev_addr; (void) ep_addr; // TODO not implemented yet return false; } bool hcd_setup_send(uint8_t rhport, uint8_t dev_addr, uint8_t const setup_packet[8]) { (void) rhport; // Copy data into setup packet buffer for ( uint8_t i = 0; i < 8; i++ ) { usbh_dpram->setup_packet[i] = setup_packet[i]; } // Configure EP0 struct with setup info for the trans complete struct hw_endpoint * ep = _hw_endpoint_allocate(0); TU_ASSERT(ep); // EPX should be inactive assert(!ep->active); // EP0 out _hw_endpoint_init(ep, dev_addr, 0x00, ep->wMaxPacketSize, 0, 0); assert(ep->configured); ep->remaining_len = 8; ep->active = true; // Set device address usb_hw->dev_addr_ctrl = dev_addr; // Set pre if we are a low speed device on full speed hub uint32_t const flags = SIE_CTRL_BASE | USB_SIE_CTRL_SEND_SETUP_BITS | USB_SIE_CTRL_START_TRANS_BITS | (need_pre(dev_addr) ? USB_SIE_CTRL_PREAMBLE_EN_BITS : 0); // START_TRANS bit on SIE_CTRL seems to exhibit the same behavior as the AVAILABLE bit // described in RP2040 Datasheet, release 2.1, section "4.1.2.5.1. Concurrent access". // We write everything except the START_TRANS bit first, then wait some cycles. usb_hw->sie_ctrl = flags & ~USB_SIE_CTRL_START_TRANS_BITS; busy_wait_at_least_cycles(12); usb_hw->sie_ctrl = flags; return true; } bool hcd_edpt_clear_stall(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr) { (void) rhport; (void) dev_addr; (void) ep_addr; panic("hcd_clear_stall"); // return true; } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * Copyright (c) 2021 Ha Thach (tinyusb.org) for Double Buffered * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if CFG_TUSB_MCU == OPT_MCU_RP2040 #include #include "rp2040_usb.h" //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF PROTOTYPE //--------------------------------------------------------------------+ static void _hw_endpoint_xfer_sync(struct hw_endpoint* ep); #if TUD_OPT_RP2040_USB_DEVICE_UFRAME_FIX static bool e15_is_bulkin_ep(struct hw_endpoint* ep); static bool e15_is_critical_frame_period(struct hw_endpoint* ep); #else #define e15_is_bulkin_ep(x) (false) #define e15_is_critical_frame_period(x) (false) #endif // if usb hardware is in host mode TU_ATTR_ALWAYS_INLINE static inline bool is_host_mode(void) { return (usb_hw->main_ctrl & USB_MAIN_CTRL_HOST_NDEVICE_BITS) ? true : false; } //--------------------------------------------------------------------+ // Implementation //--------------------------------------------------------------------+ void rp2040_usb_init(void) { // Reset usb controller reset_block(RESETS_RESET_USBCTRL_BITS); unreset_block_wait(RESETS_RESET_USBCTRL_BITS); #ifdef __GNUC__ // Clear any previous state just in case #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Warray-bounds" #if __GNUC__ > 6 #pragma GCC diagnostic ignored "-Wstringop-overflow" #endif #endif memset(usb_hw, 0, sizeof(*usb_hw)); memset(usb_dpram, 0, sizeof(*usb_dpram)); #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // Mux the controller to the onboard usb phy usb_hw->muxing = USB_USB_MUXING_TO_PHY_BITS | USB_USB_MUXING_SOFTCON_BITS; TU_LOG2_INT(sizeof(hw_endpoint_t)); } void __tusb_irq_path_func(hw_endpoint_reset_transfer)(struct hw_endpoint* ep) { ep->active = false; ep->remaining_len = 0; ep->xferred_len = 0; ep->user_buf = 0; } void __tusb_irq_path_func(_hw_endpoint_buffer_control_update32)(struct hw_endpoint* ep, uint32_t and_mask, uint32_t or_mask) { uint32_t value = 0; if (and_mask) { value = *ep->buffer_control & and_mask; } if (or_mask) { value |= or_mask; if (or_mask & USB_BUF_CTRL_AVAIL) { if (*ep->buffer_control & USB_BUF_CTRL_AVAIL) { panic("ep %02X was already available", ep->ep_addr); } *ep->buffer_control = value & ~USB_BUF_CTRL_AVAIL; // 4.1.2.5.1 Con-current access: 12 cycles (should be good for 48*12Mhz = 576Mhz) after write to buffer control // Don't need delay in host mode as host is in charge if ( !is_host_mode()) { busy_wait_at_least_cycles(12); } } } *ep->buffer_control = value; } // prepare buffer, return buffer control static uint32_t __tusb_irq_path_func(prepare_ep_buffer)(struct hw_endpoint* ep, uint8_t buf_id) { uint16_t const buflen = tu_min16(ep->remaining_len, ep->wMaxPacketSize); ep->remaining_len = (uint16_t) (ep->remaining_len - buflen); uint32_t buf_ctrl = buflen | USB_BUF_CTRL_AVAIL; // PID buf_ctrl |= ep->next_pid ? USB_BUF_CTRL_DATA1_PID : USB_BUF_CTRL_DATA0_PID; ep->next_pid ^= 1u; if (!ep->rx) { // Copy data from user buffer to hw buffer memcpy(ep->hw_data_buf + buf_id * 64, ep->user_buf, buflen); ep->user_buf += buflen; // Mark as full buf_ctrl |= USB_BUF_CTRL_FULL; } // Is this the last buffer? Only really matters for host mode. Will trigger // the trans complete irq but also stop it polling. We only really care about // trans complete for setup packets being sent if (ep->remaining_len == 0) { buf_ctrl |= USB_BUF_CTRL_LAST; } if (buf_id) buf_ctrl = buf_ctrl << 16; return buf_ctrl; } // Prepare buffer control register value void __tusb_irq_path_func(hw_endpoint_start_next_buffer)(struct hw_endpoint* ep) { uint32_t ep_ctrl = *ep->endpoint_control; // always compute and start with buffer 0 uint32_t buf_ctrl = prepare_ep_buffer(ep, 0) | USB_BUF_CTRL_SEL; // For now: skip double buffered for OUT endpoint in Device mode, since // host could send < 64 bytes and cause short packet on buffer0 // NOTE: this could happen to Host mode IN endpoint // Also, Host mode "interrupt" endpoint hardware is only single buffered, // NOTE2: Currently Host bulk is implemented using "interrupt" endpoint bool const is_host = is_host_mode(); bool const force_single = (!is_host && !tu_edpt_dir(ep->ep_addr)) || (is_host && tu_edpt_number(ep->ep_addr) != 0); if (ep->remaining_len && !force_single) { // Use buffer 1 (double buffered) if there is still data // TODO: Isochronous for buffer1 bit-field is different than CBI (control bulk, interrupt) buf_ctrl |= prepare_ep_buffer(ep, 1); // Set endpoint control double buffered bit if needed ep_ctrl &= ~EP_CTRL_INTERRUPT_PER_BUFFER; ep_ctrl |= EP_CTRL_DOUBLE_BUFFERED_BITS | EP_CTRL_INTERRUPT_PER_DOUBLE_BUFFER; } else { // Single buffered since 1 is enough ep_ctrl &= ~(EP_CTRL_DOUBLE_BUFFERED_BITS | EP_CTRL_INTERRUPT_PER_DOUBLE_BUFFER); ep_ctrl |= EP_CTRL_INTERRUPT_PER_BUFFER; } *ep->endpoint_control = ep_ctrl; TU_LOG(3, " Prepare BufCtrl: [0] = 0x%04x [1] = 0x%04x\r\n", tu_u32_low16(buf_ctrl), tu_u32_high16(buf_ctrl)); // Finally, write to buffer_control which will trigger the transfer // the next time the controller polls this dpram address _hw_endpoint_buffer_control_set_value32(ep, buf_ctrl); } void hw_endpoint_xfer_start(struct hw_endpoint* ep, uint8_t* buffer, uint16_t total_len) { hw_endpoint_lock_update(ep, 1); if (ep->active) { // TODO: Is this acceptable for interrupt packets? TU_LOG(1, "WARN: starting new transfer on already active ep %02X\r\n", ep->ep_addr); hw_endpoint_reset_transfer(ep); } // Fill in info now that we're kicking off the hw ep->remaining_len = total_len; ep->xferred_len = 0; ep->active = true; ep->user_buf = buffer; if (e15_is_bulkin_ep(ep)) { usb_hw_set->inte = USB_INTS_DEV_SOF_BITS; } if (e15_is_critical_frame_period(ep)) { ep->pending = 1; } else { hw_endpoint_start_next_buffer(ep); } hw_endpoint_lock_update(ep, -1); } // sync endpoint buffer and return transferred bytes static uint16_t __tusb_irq_path_func(sync_ep_buffer)(struct hw_endpoint* ep, uint8_t buf_id) { uint32_t buf_ctrl = _hw_endpoint_buffer_control_get_value32(ep); if (buf_id) buf_ctrl = buf_ctrl >> 16; uint16_t xferred_bytes = buf_ctrl & USB_BUF_CTRL_LEN_MASK; if (!ep->rx) { // We are continuing a transfer here. If we are TX, we have successfully // sent some data can increase the length we have sent assert(!(buf_ctrl & USB_BUF_CTRL_FULL)); ep->xferred_len = (uint16_t) (ep->xferred_len + xferred_bytes); } else { // If we have received some data, so can increase the length // we have received AFTER we have copied it to the user buffer at the appropriate offset assert(buf_ctrl & USB_BUF_CTRL_FULL); memcpy(ep->user_buf, ep->hw_data_buf + buf_id * 64, xferred_bytes); ep->xferred_len = (uint16_t) (ep->xferred_len + xferred_bytes); ep->user_buf += xferred_bytes; } // Short packet if (xferred_bytes < ep->wMaxPacketSize) { pico_trace(" Short packet on buffer %d with %u bytes\r\n", buf_id, xferred_bytes); // Reduce total length as this is last packet ep->remaining_len = 0; } return xferred_bytes; } static void __tusb_irq_path_func(_hw_endpoint_xfer_sync)(struct hw_endpoint* ep) { // Update hw endpoint struct with info from hardware // after a buff status interrupt uint32_t __unused buf_ctrl = _hw_endpoint_buffer_control_get_value32(ep); TU_LOG(3, " Sync BufCtrl: [0] = 0x%04x [1] = 0x%04x\r\n", tu_u32_low16(buf_ctrl), tu_u32_high16(buf_ctrl)); // always sync buffer 0 uint16_t buf0_bytes = sync_ep_buffer(ep, 0); // sync buffer 1 if double buffered if ((*ep->endpoint_control) & EP_CTRL_DOUBLE_BUFFERED_BITS) { if (buf0_bytes == ep->wMaxPacketSize) { // sync buffer 1 if not short packet sync_ep_buffer(ep, 1); } else { // short packet on buffer 0 // TODO couldn't figure out how to handle this case which happen with net_lwip_webserver example // At this time (currently trigger per 2 buffer), the buffer1 is probably filled with data from // the next transfer (not current one). For now we disable double buffered for device OUT // NOTE this could happen to Host IN #if 0 uint8_t const ep_num = tu_edpt_number(ep->ep_addr); uint8_t const dir = (uint8_t) tu_edpt_dir(ep->ep_addr); uint8_t const ep_id = 2*ep_num + (dir ? 0 : 1); // abort queued transfer on buffer 1 usb_hw->abort |= TU_BIT(ep_id); while ( !(usb_hw->abort_done & TU_BIT(ep_id)) ) {} uint32_t ep_ctrl = *ep->endpoint_control; ep_ctrl &= ~(EP_CTRL_DOUBLE_BUFFERED_BITS | EP_CTRL_INTERRUPT_PER_DOUBLE_BUFFER); ep_ctrl |= EP_CTRL_INTERRUPT_PER_BUFFER; _hw_endpoint_buffer_control_set_value32(ep, 0); usb_hw->abort &= ~TU_BIT(ep_id); TU_LOG(3, "----SHORT PACKET buffer0 on EP %02X:\r\n", ep->ep_addr); TU_LOG(3, " BufCtrl: [0] = 0x%04x [1] = 0x%04x\r\n", tu_u32_low16(buf_ctrl), tu_u32_high16(buf_ctrl)); #endif } } } // Returns true if transfer is complete bool __tusb_irq_path_func(hw_endpoint_xfer_continue)(struct hw_endpoint* ep) { hw_endpoint_lock_update(ep, 1); // Part way through a transfer if (!ep->active) { panic("Can't continue xfer on inactive ep %02X", ep->ep_addr); } // Update EP struct from hardware state _hw_endpoint_xfer_sync(ep); // Now we have synced our state with the hardware. Is there more data to transfer? // If we are done then notify tinyusb if (ep->remaining_len == 0) { pico_trace("Completed transfer of %d bytes on ep %02X\r\n", ep->xferred_len, ep->ep_addr); // Notify caller we are done so it can notify the tinyusb stack hw_endpoint_lock_update(ep, -1); return true; } else { if (e15_is_critical_frame_period(ep)) { ep->pending = 1; } else { hw_endpoint_start_next_buffer(ep); } } hw_endpoint_lock_update(ep, -1); // More work to do return false; } //--------------------------------------------------------------------+ // Errata 15 //--------------------------------------------------------------------+ #if TUD_OPT_RP2040_USB_DEVICE_UFRAME_FIX /* Don't mark IN buffers as available during the last 200us of a full-speed frame. This avoids a situation seen with the USB2.0 hub on a Raspberry Pi 4 where a late IN token before the next full-speed SOF can cause port babble and a corrupt ACK packet. The nature of the data corruption has a chance to cause device lockup. Use the next SOF to mark delayed buffers as available. This reduces available Bulk IN bandwidth by approximately 20%, and requires that the SOF interrupt is enabled while these transfers are ongoing. Inherit the top-level enable from the corresponding Pico-SDK flag. Applications that will not use the device in a situation where it could be plugged into a Pi 4 or Pi 400 (for example, when directly connected to a commodity hub or other host) can turn off the flag in the SDK. */ volatile uint32_t e15_last_sof = 0; // check if Errata 15 is needed for this endpoint i.e device bulk-in static bool __tusb_irq_path_func(e15_is_bulkin_ep)(struct hw_endpoint* ep) { return (!is_host_mode() && tu_edpt_dir(ep->ep_addr) == TUSB_DIR_IN && ep->transfer_type == TUSB_XFER_BULK); } // check if we need to apply Errata 15 workaround : i.e // Endpoint is BULK IN and is currently in critical frame period i.e 20% of last usb frame static bool __tusb_irq_path_func(e15_is_critical_frame_period)(struct hw_endpoint* ep) { TU_VERIFY(e15_is_bulkin_ep(ep)); /* Avoid the last 200us (uframe 6.5-7) of a frame, up to the EOF2 point. * The device state machine cannot recover from receiving an incorrect PID * when it is expecting an ACK. */ uint32_t delta = time_us_32() - e15_last_sof; if (delta < 800 || delta > 998) { return false; } TU_LOG(3, "Avoiding sof %lu now %lu last %lu\r\n", (usb_hw->sof_rd + 1) & USB_SOF_RD_BITS, time_us_32(), e15_last_sof); return true; } #endif // TUD_OPT_RP2040_USB_DEVICE_UFRAME_FIX #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.h ================================================ #ifndef RP2040_COMMON_H_ #define RP2040_COMMON_H_ #if defined(RP2040_USB_HOST_MODE) && defined(RP2040_USB_DEVICE_MODE) #error TinyUSB device and host mode not supported at the same time #endif #include "common/tusb_common.h" #include "pico.h" #include "hardware/structs/usb.h" #include "hardware/irq.h" #include "hardware/resets.h" #include "hardware/timer.h" #if defined(PICO_RP2040_USB_DEVICE_ENUMERATION_FIX) && !defined(TUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX) #define TUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX PICO_RP2040_USB_DEVICE_ENUMERATION_FIX #endif #if defined(PICO_RP2040_USB_DEVICE_UFRAME_FIX) && !defined(TUD_OPT_RP2040_USB_DEVICE_UFRAME_FIX) #define TUD_OPT_RP2040_USB_DEVICE_UFRAME_FIX PICO_RP2040_USB_DEVICE_UFRAME_FIX #endif #if TUD_OPT_RP2040_USB_DEVICE_UFRAME_FIX #undef PICO_RP2040_USB_FAST_IRQ #define PICO_RP2040_USB_FAST_IRQ 1 #endif #ifndef PICO_RP2040_USB_FAST_IRQ #define PICO_RP2040_USB_FAST_IRQ 0 #endif #if PICO_RP2040_USB_FAST_IRQ #define __tusb_irq_path_func(x) __no_inline_not_in_flash_func(x) #else #define __tusb_irq_path_func(x) x #endif #define usb_hw_set ((usb_hw_t *) hw_set_alias_untyped(usb_hw)) #define usb_hw_clear ((usb_hw_t *) hw_clear_alias_untyped(usb_hw)) #define pico_info(...) TU_LOG(2, __VA_ARGS__) #define pico_trace(...) TU_LOG(3, __VA_ARGS__) // Hardware information per endpoint typedef struct hw_endpoint { // Is this a valid struct bool configured; // Transfer direction (i.e. IN is rx for host but tx for device) // allows us to common up transfer functions bool rx; uint8_t ep_addr; uint8_t next_pid; // Endpoint control register io_rw_32 *endpoint_control; // Buffer control register io_rw_32 *buffer_control; // Buffer pointer in usb dpram uint8_t *hw_data_buf; // User buffer in main memory uint8_t *user_buf; // Current transfer information uint16_t remaining_len; uint16_t xferred_len; // Data needed from EP descriptor uint16_t wMaxPacketSize; // Endpoint is in use bool active; // Interrupt, bulk, etc uint8_t transfer_type; // Transfer scheduled but not active uint8_t pending; #if CFG_TUH_ENABLED // Only needed for host uint8_t dev_addr; // If interrupt endpoint uint8_t interrupt_num; #endif } hw_endpoint_t; #if TUD_OPT_RP2040_USB_DEVICE_UFRAME_FIX extern volatile uint32_t e15_last_sof; #endif void rp2040_usb_init(void); void hw_endpoint_xfer_start(struct hw_endpoint *ep, uint8_t *buffer, uint16_t total_len); bool hw_endpoint_xfer_continue(struct hw_endpoint *ep); void hw_endpoint_reset_transfer(struct hw_endpoint *ep); void hw_endpoint_start_next_buffer(struct hw_endpoint *ep); TU_ATTR_ALWAYS_INLINE static inline void hw_endpoint_lock_update(__unused struct hw_endpoint * ep, __unused int delta) { // todo add critsec as necessary to prevent issues between worker and IRQ... // note that this is perhaps as simple as disabling IRQs because it would make // sense to have worker and IRQ on same core, however I think using critsec is about equivalent. } void _hw_endpoint_buffer_control_update32(struct hw_endpoint *ep, uint32_t and_mask, uint32_t or_mask); TU_ATTR_ALWAYS_INLINE static inline uint32_t _hw_endpoint_buffer_control_get_value32 (struct hw_endpoint *ep) { return *ep->buffer_control; } TU_ATTR_ALWAYS_INLINE static inline void _hw_endpoint_buffer_control_set_value32 (struct hw_endpoint *ep, uint32_t value) { _hw_endpoint_buffer_control_update32(ep, 0, value); } TU_ATTR_ALWAYS_INLINE static inline void _hw_endpoint_buffer_control_set_mask32 (struct hw_endpoint *ep, uint32_t value) { _hw_endpoint_buffer_control_update32(ep, ~value, value); } TU_ATTR_ALWAYS_INLINE static inline void _hw_endpoint_buffer_control_clear_mask32 (struct hw_endpoint *ep, uint32_t value) { _hw_endpoint_buffer_control_update32(ep, ~value, 0); } static inline uintptr_t hw_data_offset (uint8_t *buf) { // Remove usb base from buffer pointer return (uintptr_t) buf ^ (uintptr_t) usb_dpram; } extern const char *ep_dir_string[]; #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/tinyusb.mk ================================================ # C source files TINYUSB_SRC_C += \ src/tusb.c \ src/common/tusb_fifo.c \ src/device/usbd.c \ src/device/usbd_control.c \ src/class/msc/msc_device.c \ src/typec/usbc.c \ src/class/audio/audio_device.c \ src/class/cdc/cdc_device.c \ src/class/dfu/dfu_device.c \ src/class/dfu/dfu_rt_device.c \ src/class/hid/hid_device.c \ src/class/usbtmc/usbtmc_device.c \ src/host/usbh.c \ src/host/hub.c \ src/class/hid/hid_host.c \ src/typec/usbc.c \ ================================================ FILE: pico-sdk/lib/tinyusb/src/tusb.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if CFG_TUH_ENABLED || CFG_TUD_ENABLED #include "tusb.h" #include "common/tusb_private.h" #if CFG_TUD_ENABLED #include "device/usbd_pvt.h" #endif #if CFG_TUH_ENABLED #include "host/usbh_pvt.h" #endif //--------------------------------------------------------------------+ // Public API //--------------------------------------------------------------------+ bool tusb_init(void) { #if CFG_TUD_ENABLED && defined(TUD_OPT_RHPORT) // init device stack CFG_TUSB_RHPORTx_MODE must be defined TU_ASSERT ( tud_init(TUD_OPT_RHPORT) ); #endif #if CFG_TUH_ENABLED && defined(TUH_OPT_RHPORT) // init host stack CFG_TUSB_RHPORTx_MODE must be defined TU_ASSERT( tuh_init(TUH_OPT_RHPORT) ); #endif return true; } bool tusb_inited(void) { bool ret = false; #if CFG_TUD_ENABLED ret = ret || tud_inited(); #endif #if CFG_TUH_ENABLED ret = ret || tuh_inited(); #endif return ret; } //--------------------------------------------------------------------+ // Descriptor helper //--------------------------------------------------------------------+ uint8_t const* tu_desc_find(uint8_t const* desc, uint8_t const* end, uint8_t byte1) { while (desc + 1 < end) { if (desc[1] == byte1) return desc; desc += desc[DESC_OFFSET_LEN]; } return NULL; } uint8_t const* tu_desc_find2(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2) { while (desc + 2 < end) { if (desc[1] == byte1 && desc[2] == byte2) return desc; desc += desc[DESC_OFFSET_LEN]; } return NULL; } uint8_t const* tu_desc_find3(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2, uint8_t byte3) { while (desc + 3 < end) { if (desc[1] == byte1 && desc[2] == byte2 && desc[3] == byte3) return desc; desc += desc[DESC_OFFSET_LEN]; } return NULL; } //--------------------------------------------------------------------+ // Endpoint Helper for both Host and Device stack //--------------------------------------------------------------------+ bool tu_edpt_claim(tu_edpt_state_t* ep_state, osal_mutex_t mutex) { (void) mutex; // pre-check to help reducing mutex lock TU_VERIFY((ep_state->busy == 0) && (ep_state->claimed == 0)); (void) osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); // can only claim the endpoint if it is not busy and not claimed yet. bool const available = (ep_state->busy == 0) && (ep_state->claimed == 0); if (available) { ep_state->claimed = 1; } (void) osal_mutex_unlock(mutex); return available; } bool tu_edpt_release(tu_edpt_state_t* ep_state, osal_mutex_t mutex) { (void) mutex; (void) osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); // can only release the endpoint if it is claimed and not busy bool const ret = (ep_state->claimed == 1) && (ep_state->busy == 0); if (ret) { ep_state->claimed = 0; } (void) osal_mutex_unlock(mutex); return ret; } bool tu_edpt_validate(tusb_desc_endpoint_t const* desc_ep, tusb_speed_t speed) { uint16_t const max_packet_size = tu_edpt_packet_size(desc_ep); TU_LOG2(" Open EP %02X with Size = %u\r\n", desc_ep->bEndpointAddress, max_packet_size); switch (desc_ep->bmAttributes.xfer) { case TUSB_XFER_ISOCHRONOUS: { uint16_t const spec_size = (speed == TUSB_SPEED_HIGH ? 1024 : 1023); TU_ASSERT(max_packet_size <= spec_size); break; } case TUSB_XFER_BULK: if (speed == TUSB_SPEED_HIGH) { // Bulk highspeed must be EXACTLY 512 TU_ASSERT(max_packet_size == 512); } else { // TODO Bulk fullspeed can only be 8, 16, 32, 64 TU_ASSERT(max_packet_size <= 64); } break; case TUSB_XFER_INTERRUPT: { uint16_t const spec_size = (speed == TUSB_SPEED_HIGH ? 1024 : 64); TU_ASSERT(max_packet_size <= spec_size); break; } default: return false; } return true; } void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const* desc_itf, uint16_t desc_len, uint8_t driver_id) { uint8_t const* p_desc = (uint8_t const*) desc_itf; uint8_t const* desc_end = p_desc + desc_len; while (p_desc < desc_end) { if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { uint8_t const ep_addr = ((tusb_desc_endpoint_t const*) p_desc)->bEndpointAddress; TU_LOG(2, " Bind EP %02x to driver id %u\r\n", ep_addr, driver_id); ep2drv[tu_edpt_number(ep_addr)][tu_edpt_dir(ep_addr)] = driver_id; } p_desc = tu_desc_next(p_desc); } } uint16_t tu_desc_get_interface_total_len(tusb_desc_interface_t const* desc_itf, uint8_t itf_count, uint16_t max_len) { uint8_t const* p_desc = (uint8_t const*) desc_itf; uint16_t len = 0; while (itf_count--) { // Next on interface desc len += tu_desc_len(desc_itf); p_desc = tu_desc_next(p_desc); while (len < max_len) { // return on IAD regardless of itf count if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE_ASSOCIATION) { return len; } if ((tu_desc_type(p_desc) == TUSB_DESC_INTERFACE) && ((tusb_desc_interface_t const*) p_desc)->bAlternateSetting == 0) { break; } len += tu_desc_len(p_desc); p_desc = tu_desc_next(p_desc); } } return len; } //--------------------------------------------------------------------+ // Endpoint Stream Helper for both Host and Device stack //--------------------------------------------------------------------+ bool tu_edpt_stream_init(tu_edpt_stream_t* s, bool is_host, bool is_tx, bool overwritable, void* ff_buf, uint16_t ff_bufsize, uint8_t* ep_buf, uint16_t ep_bufsize) { osal_mutex_t new_mutex = osal_mutex_create(&s->ff_mutexdef); (void) new_mutex; (void) is_tx; s->is_host = is_host; tu_fifo_config(&s->ff, ff_buf, ff_bufsize, 1, overwritable); tu_fifo_config_mutex(&s->ff, is_tx ? new_mutex : NULL, is_tx ? NULL : new_mutex); s->ep_buf = ep_buf; s->ep_bufsize = ep_bufsize; return true; } bool tu_edpt_stream_deinit(tu_edpt_stream_t* s) { (void) s; #if OSAL_MUTEX_REQUIRED if (s->ff.mutex_wr) osal_mutex_delete(s->ff.mutex_wr); if (s->ff.mutex_rd) osal_mutex_delete(s->ff.mutex_rd); #endif return true; } TU_ATTR_ALWAYS_INLINE static inline bool stream_claim(tu_edpt_stream_t* s) { if (s->is_host) { #if CFG_TUH_ENABLED return usbh_edpt_claim(s->daddr, s->ep_addr); #endif } else { #if CFG_TUD_ENABLED return usbd_edpt_claim(s->rhport, s->ep_addr); #endif } return false; } TU_ATTR_ALWAYS_INLINE static inline bool stream_xfer(tu_edpt_stream_t* s, uint16_t count) { if (s->is_host) { #if CFG_TUH_ENABLED return usbh_edpt_xfer(s->daddr, s->ep_addr, count ? s->ep_buf : NULL, count); #endif } else { #if CFG_TUD_ENABLED return usbd_edpt_xfer(s->rhport, s->ep_addr, count ? s->ep_buf : NULL, count); #endif } return false; } TU_ATTR_ALWAYS_INLINE static inline bool stream_release(tu_edpt_stream_t* s) { if (s->is_host) { #if CFG_TUH_ENABLED return usbh_edpt_release(s->daddr, s->ep_addr); #endif } else { #if CFG_TUD_ENABLED return usbd_edpt_release(s->rhport, s->ep_addr); #endif } return false; } //--------------------------------------------------------------------+ // Stream Write //--------------------------------------------------------------------+ bool tu_edpt_stream_write_zlp_if_needed(tu_edpt_stream_t* s, uint32_t last_xferred_bytes) { // ZLP condition: no pending data, last transferred bytes is multiple of packet size TU_VERIFY(!tu_fifo_count(&s->ff) && last_xferred_bytes && (0 == (last_xferred_bytes & (s->ep_packetsize - 1)))); TU_VERIFY(stream_claim(s)); TU_ASSERT(stream_xfer(s, 0)); return true; } uint32_t tu_edpt_stream_write_xfer(tu_edpt_stream_t* s) { // skip if no data TU_VERIFY(tu_fifo_count(&s->ff), 0); // Claim the endpoint TU_VERIFY(stream_claim(s), 0); // Pull data from FIFO -> EP buf uint16_t const count = tu_fifo_read_n(&s->ff, s->ep_buf, s->ep_bufsize); if (count) { TU_ASSERT(stream_xfer(s, count), 0); return count; } else { // Release endpoint since we don't make any transfer // Note: data is dropped if terminal is not connected stream_release(s); return 0; } } uint32_t tu_edpt_stream_write(tu_edpt_stream_t* s, void const* buffer, uint32_t bufsize) { TU_VERIFY(bufsize); // TODO support ZLP uint16_t ret = tu_fifo_write_n(&s->ff, buffer, (uint16_t) bufsize); // flush if fifo has more than packet size or // in rare case: fifo depth is configured too small (which never reach packet size) if ((tu_fifo_count(&s->ff) >= s->ep_packetsize) || (tu_fifo_depth(&s->ff) < s->ep_packetsize)) { tu_edpt_stream_write_xfer(s); } return ret; } //--------------------------------------------------------------------+ // Stream Read //--------------------------------------------------------------------+ uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t* s) { uint16_t available = tu_fifo_remaining(&s->ff); // Prepare for incoming data but only allow what we can store in the ring buffer. // TODO Actually we can still carry out the transfer, keeping count of received bytes // and slowly move it to the FIFO when read(). // This pre-check reduces endpoint claiming TU_VERIFY(available >= s->ep_packetsize); // claim endpoint TU_VERIFY(stream_claim(s), 0); // get available again since fifo can be changed before endpoint is claimed available = tu_fifo_remaining(&s->ff); if (available >= s->ep_packetsize) { // multiple of packet size limit by ep bufsize uint16_t count = (uint16_t) (available & ~(s->ep_packetsize - 1)); count = tu_min16(count, s->ep_bufsize); TU_ASSERT(stream_xfer(s, count), 0); return count; } else { // Release endpoint since we don't make any transfer stream_release(s); return 0; } } uint32_t tu_edpt_stream_read(tu_edpt_stream_t* s, void* buffer, uint32_t bufsize) { uint32_t num_read = tu_fifo_read_n(&s->ff, buffer, (uint16_t) bufsize); tu_edpt_stream_read_xfer(s); return num_read; } //--------------------------------------------------------------------+ // Debug //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG #include #if CFG_TUSB_DEBUG >= CFG_TUH_LOG_LEVEL || CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL char const* const tu_str_speed[] = {"Full", "Low", "High"}; char const* const tu_str_std_request[] = { "Get Status", "Clear Feature", "Reserved", "Set Feature", "Reserved", "Set Address", "Get Descriptor", "Set Descriptor", "Get Configuration", "Set Configuration", "Get Interface", "Set Interface", "Synch Frame" }; char const* const tu_str_xfer_result[] = { "OK", "FAILED", "STALLED", "TIMEOUT" }; #endif static void dump_str_line(uint8_t const* buf, uint16_t count) { tu_printf(" |"); // each line is 16 bytes for (uint16_t i = 0; i < count; i++) { const char ch = buf[i]; tu_printf("%c", isprint(ch) ? ch : '.'); } tu_printf("|\r\n"); } /* Print out memory contents * - buf : buffer * - count : number of item * - indent: prefix spaces on every line */ void tu_print_mem(void const* buf, uint32_t count, uint8_t indent) { uint8_t const size = 1; // fixed 1 byte for now if (!buf || !count) { tu_printf("NULL\r\n"); return; } uint8_t const* buf8 = (uint8_t const*) buf; char format[] = "%00X"; format[2] += (uint8_t) (2 * size); // 1 byte = 2 hex digits const uint8_t item_per_line = 16 / size; for (unsigned int i = 0; i < count; i++) { unsigned int value = 0; if (i % item_per_line == 0) { // Print Ascii if (i != 0) dump_str_line(buf8 - 16, 16); for (uint8_t s = 0; s < indent; s++) tu_printf(" "); // print offset or absolute address tu_printf("%04X: ", 16 * i / item_per_line); } tu_memcpy_s(&value, sizeof(value), buf8, size); buf8 += size; tu_printf(" "); tu_printf(format, value); } // fill up last row to 16 for printing ascii const uint32_t remain = count % 16; uint8_t nback = (uint8_t) (remain ? remain : 16); if (remain) { for (uint32_t i = 0; i < 16 - remain; i++) { tu_printf(" "); for (int j = 0; j < 2 * size; j++) tu_printf(" "); } } dump_str_line(buf8 - nback, nback); } #endif #endif // host or device enabled ================================================ FILE: pico-sdk/lib/tinyusb/src/tusb.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_H_ #define _TUSB_H_ #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // INCLUDE //--------------------------------------------------------------------+ #include "common/tusb_common.h" #include "osal/osal.h" #include "common/tusb_fifo.h" //------------- TypeC -------------// #if CFG_TUC_ENABLED #include "typec/usbc.h" #endif //------------- HOST -------------// #if CFG_TUH_ENABLED #include "host/usbh.h" #if CFG_TUH_HID #include "class/hid/hid_host.h" #endif #if CFG_TUH_MSC #include "class/msc/msc_host.h" #endif #if CFG_TUH_CDC #include "class/cdc/cdc_host.h" #endif #else #ifndef tuh_int_handler #define tuh_int_handler(...) #endif #endif //------------- DEVICE -------------// #if CFG_TUD_ENABLED #include "device/usbd.h" #if CFG_TUD_HID #include "class/hid/hid_device.h" #endif #if CFG_TUD_CDC #include "class/cdc/cdc_device.h" #endif #if CFG_TUD_MSC #include "class/msc/msc_device.h" #endif #if CFG_TUD_AUDIO #include "class/audio/audio_device.h" #endif #if CFG_TUD_VIDEO #include "class/video/video_device.h" #endif #if CFG_TUD_MIDI #include "class/midi/midi_device.h" #endif #if CFG_TUD_VENDOR #include "class/vendor/vendor_device.h" #endif #if CFG_TUD_USBTMC #include "class/usbtmc/usbtmc_device.h" #endif #if CFG_TUD_DFU_RUNTIME #include "class/dfu/dfu_rt_device.h" #endif #if CFG_TUD_DFU #include "class/dfu/dfu_device.h" #endif #if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM #include "class/net/net_device.h" #endif #if CFG_TUD_BTH #include "class/bth/bth_device.h" #endif #else #ifndef tud_int_handler #define tud_int_handler(...) #endif #endif //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ // Initialize device/host stack // Note: when using with RTOS, this should be called after scheduler/kernel is started. // Otherwise it could cause kernel issue since USB IRQ handler does use RTOS queue API. bool tusb_init(void); // Check if stack is initialized bool tusb_inited(void); // TODO // bool tusb_teardown(void); #ifdef __cplusplus } #endif #endif /* _TUSB_H_ */ ================================================ FILE: pico-sdk/lib/tinyusb/src/tusb_option.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_OPTION_H_ #define _TUSB_OPTION_H_ #include "common/tusb_compiler.h" // Version is release as major.minor.revision eg 1.0.0. though there could be notable APIs before a new release. // For notable API changes within a release, we increase the build number. #define TUSB_VERSION_MAJOR 0 #define TUSB_VERSION_MINOR 16 #define TUSB_VERSION_REVISION 0 #define TUSB_VERSION_BUILD 3 #define TUSB_VERSION_NUMBER (TUSB_VERSION_MAJOR << 24 | TUSB_VERSION_MINOR << 16 | TUSB_VERSION_REVISION << 8 | TUSB_VERSION_BUILD) #define TUSB_VERSION_STRING TU_STRING(TUSB_VERSION_MAJOR) "." TU_STRING(TUSB_VERSION_MINOR) "." TU_STRING(TUSB_VERSION_REVISION) //--------------------------------------------------------------------+ // Supported MCUs // CFG_TUSB_MCU must be defined to one of following value //--------------------------------------------------------------------+ #define OPT_MCU_NONE 0 // LPC #define OPT_MCU_LPC11UXX 1 ///< NXP LPC11Uxx #define OPT_MCU_LPC13XX 2 ///< NXP LPC13xx #define OPT_MCU_LPC15XX 3 ///< NXP LPC15xx #define OPT_MCU_LPC175X_6X 4 ///< NXP LPC175x, LPC176x #define OPT_MCU_LPC177X_8X 5 ///< NXP LPC177x, LPC178x #define OPT_MCU_LPC18XX 6 ///< NXP LPC18xx #define OPT_MCU_LPC40XX 7 ///< NXP LPC40xx #define OPT_MCU_LPC43XX 8 ///< NXP LPC43xx #define OPT_MCU_LPC51 9 ///< NXP LPC51 #define OPT_MCU_LPC51UXX OPT_MCU_LPC51 ///< NXP LPC51 #define OPT_MCU_LPC54 10 ///< NXP LPC54 #define OPT_MCU_LPC55 11 ///< NXP LPC55 // legacy naming #define OPT_MCU_LPC54XXX OPT_MCU_LPC54 #define OPT_MCU_LPC55XX OPT_MCU_LPC55 // NRF #define OPT_MCU_NRF5X 100 ///< Nordic nRF5x series // SAM #define OPT_MCU_SAMD21 200 ///< MicroChip SAMD21 #define OPT_MCU_SAMD51 201 ///< MicroChip SAMD51 #define OPT_MCU_SAMG 202 ///< MicroChip SAMDG series #define OPT_MCU_SAME5X 203 ///< MicroChip SAM E5x #define OPT_MCU_SAMD11 204 ///< MicroChip SAMD11 #define OPT_MCU_SAML22 205 ///< MicroChip SAML22 #define OPT_MCU_SAML21 206 ///< MicroChip SAML21 #define OPT_MCU_SAMX7X 207 ///< MicroChip SAME70, S70, V70, V71 family // STM32 #define OPT_MCU_STM32F0 300 ///< ST F0 #define OPT_MCU_STM32F1 301 ///< ST F1 #define OPT_MCU_STM32F2 302 ///< ST F2 #define OPT_MCU_STM32F3 303 ///< ST F3 #define OPT_MCU_STM32F4 304 ///< ST F4 #define OPT_MCU_STM32F7 305 ///< ST F7 #define OPT_MCU_STM32H7 306 ///< ST H7 #define OPT_MCU_STM32L1 308 ///< ST L1 #define OPT_MCU_STM32L0 307 ///< ST L0 #define OPT_MCU_STM32L4 309 ///< ST L4 #define OPT_MCU_STM32G0 310 ///< ST G0 #define OPT_MCU_STM32G4 311 ///< ST G4 #define OPT_MCU_STM32WB 312 ///< ST WB #define OPT_MCU_STM32U5 313 ///< ST U5 #define OPT_MCU_STM32L5 314 ///< ST L5 #define OPT_MCU_STM32H5 315 ///< ST H5 // Sony #define OPT_MCU_CXD56 400 ///< SONY CXD56 // TI #define OPT_MCU_MSP430x5xx 500 ///< TI MSP430x5xx #define OPT_MCU_MSP432E4 510 ///< TI MSP432E4xx #define OPT_MCU_TM4C123 511 ///< TI Tiva-C 123x #define OPT_MCU_TM4C129 512 ///< TI Tiva-C 129x // ValentyUSB eptri #define OPT_MCU_VALENTYUSB_EPTRI 600 ///< Fomu eptri config // NXP iMX RT #define OPT_MCU_MIMXRT1XXX 700 ///< NXP iMX RT1xxx Series #define OPT_MCU_MIMXRT10XX OPT_MCU_MIMXRT1XXX ///< RT10xx #define OPT_MCU_MIMXRT11XX OPT_MCU_MIMXRT1XXX ///< RT11xx // Nuvoton #define OPT_MCU_NUC121 800 #define OPT_MCU_NUC126 801 #define OPT_MCU_NUC120 802 #define OPT_MCU_NUC505 803 // Espressif #define OPT_MCU_ESP32S2 900 ///< Espressif ESP32-S2 #define OPT_MCU_ESP32S3 901 ///< Espressif ESP32-S3 #define OPT_MCU_ESP32 902 ///< Espressif ESP32 (for host max3421e) #define OPT_MCU_ESP32C3 903 ///< Espressif ESP32-C3 #define OPT_MCU_ESP32C6 904 ///< Espressif ESP32-C6 #define OPT_MCU_ESP32C2 905 ///< Espressif ESP32-C2 #define OPT_MCU_ESP32H2 906 ///< Espressif ESP32-H2 #define TUP_MCU_ESPRESSIF (CFG_TUSB_MCU >= 900 && CFG_TUSB_MCU < 1000) // check if Espressif MCU // Dialog #define OPT_MCU_DA1469X 1000 ///< Dialog Semiconductor DA1469x // Raspberry Pi #define OPT_MCU_RP2040 1100 ///< Raspberry Pi RP2040 // NXP Kinetis #define OPT_MCU_KINETIS_KL 1200 ///< NXP KL series #define OPT_MCU_KINETIS_K32L 1201 ///< NXP K32L series #define OPT_MCU_KINETIS_K32 1201 ///< Alias to K32L #define OPT_MCU_KINETIS_K 1202 ///< NXP K series #define OPT_MCU_MKL25ZXX 1200 ///< Alias to KL (obsolete) #define OPT_MCU_K32L2BXX 1201 ///< Alias to K32 (obsolete) // Silabs #define OPT_MCU_EFM32GG 1300 ///< Silabs EFM32GG // Renesas RX #define OPT_MCU_RX63X 1400 ///< Renesas RX63N/631 #define OPT_MCU_RX65X 1401 ///< Renesas RX65N/RX651 #define OPT_MCU_RX72N 1402 ///< Renesas RX72N #define OPT_MCU_RAXXX 1403 ///< Renesas RAxxx families // Mind Motion #define OPT_MCU_MM32F327X 1500 ///< Mind Motion MM32F327 // GigaDevice #define OPT_MCU_GD32VF103 1600 ///< GigaDevice GD32VF103 // Broadcom #define OPT_MCU_BCM2711 1700 ///< Broadcom BCM2711 #define OPT_MCU_BCM2835 1701 ///< Broadcom BCM2835 #define OPT_MCU_BCM2837 1702 ///< Broadcom BCM2837 // Infineon #define OPT_MCU_XMC4000 1800 ///< Infineon XMC4000 // PIC #define OPT_MCU_PIC32MZ 1900 ///< MicroChip PIC32MZ family #define OPT_MCU_PIC32MM 1901 ///< MicroChip PIC32MM family #define OPT_MCU_PIC32MX 1902 ///< MicroChip PIC32MX family #define OPT_MCU_PIC32MK 1903 ///< MicroChip PIC32MK family #define OPT_MCU_PIC24 1910 ///< MicroChip PIC24 family #define OPT_MCU_DSPIC33 1911 ///< MicroChip DSPIC33 family // BridgeTek #define OPT_MCU_FT90X 2000 ///< BridgeTek FT90x #define OPT_MCU_FT93X 2001 ///< BridgeTek FT93x // Allwinner #define OPT_MCU_F1C100S 2100 ///< Allwinner F1C100s family // WCH #define OPT_MCU_CH32V307 2200 ///< WCH CH32V307 #define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x #define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20X // NXP LPC MCX #define OPT_MCU_MCXN9 2300 ///< NXP MCX N9 Series #define OPT_MCU_MCXA15 2301 ///< NXP MCX A15 Series // Check if configured MCU is one of listed // Apply _TU_CHECK_MCU with || as separator to list of input #define _TU_CHECK_MCU(_m) (CFG_TUSB_MCU == _m) #define TU_CHECK_MCU(...) (TU_ARGS_APPLY(_TU_CHECK_MCU, ||, __VA_ARGS__)) //--------------------------------------------------------------------+ // Supported OS //--------------------------------------------------------------------+ #define OPT_OS_NONE 1 ///< No RTOS #define OPT_OS_FREERTOS 2 ///< FreeRTOS #define OPT_OS_MYNEWT 3 ///< Mynewt OS #define OPT_OS_CUSTOM 4 ///< Custom OS is implemented by application #define OPT_OS_PICO 5 ///< Raspberry Pi Pico SDK #define OPT_OS_RTTHREAD 6 ///< RT-Thread #define OPT_OS_RTX4 7 ///< Keil RTX 4 // Allow to use command line to change the config name/location #ifdef CFG_TUSB_CONFIG_FILE #include CFG_TUSB_CONFIG_FILE #else #include "tusb_config.h" #endif #include "common/tusb_mcu.h" //-------------------------------------------------------------------- // RootHub Mode Configuration // CFG_TUSB_RHPORTx_MODE contains operation mode and speed for that port //-------------------------------------------------------------------- // Low byte is operational mode #define OPT_MODE_NONE 0x0000 ///< Disabled #define OPT_MODE_DEVICE 0x0001 ///< Device Mode #define OPT_MODE_HOST 0x0002 ///< Host Mode // High byte is max operational speed (corresponding to tusb_speed_t) #define OPT_MODE_DEFAULT_SPEED 0x0000 ///< Default (max) speed supported by MCU #define OPT_MODE_LOW_SPEED 0x0100 ///< Low Speed #define OPT_MODE_FULL_SPEED 0x0200 ///< Full Speed #define OPT_MODE_HIGH_SPEED 0x0400 ///< High Speed #define OPT_MODE_SPEED_MASK 0xff00 //------------- Roothub as Device -------------// #if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_DEVICE) #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE) #define TUD_OPT_RHPORT 0 #elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_DEVICE) #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE) #define TUD_OPT_RHPORT 1 #else #define TUD_RHPORT_MODE OPT_MODE_NONE #endif #ifndef CFG_TUD_ENABLED // fallback to use CFG_TUSB_RHPORTx_MODE #define CFG_TUD_ENABLED (TUD_RHPORT_MODE & OPT_MODE_DEVICE) #endif #ifndef CFG_TUD_MAX_SPEED // fallback to use CFG_TUSB_RHPORTx_MODE #define CFG_TUD_MAX_SPEED (TUD_RHPORT_MODE & OPT_MODE_SPEED_MASK) #endif // For backward compatible #define TUSB_OPT_DEVICE_ENABLED CFG_TUD_ENABLED // highspeed support indicator #define TUD_OPT_HIGH_SPEED (CFG_TUD_MAX_SPEED ? (CFG_TUD_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED) //------------- Roothub as Host -------------// #if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_HOST) #define TUH_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE) #define TUH_OPT_RHPORT 0 #elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_HOST) #define TUH_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE) #define TUH_OPT_RHPORT 1 #else #define TUH_RHPORT_MODE OPT_MODE_NONE #endif #ifndef CFG_TUH_ENABLED // fallback to use CFG_TUSB_RHPORTx_MODE #define CFG_TUH_ENABLED (TUH_RHPORT_MODE & OPT_MODE_HOST) #endif #ifndef CFG_TUH_MAX_SPEED // fallback to use CFG_TUSB_RHPORTx_MODE #define CFG_TUH_MAX_SPEED (TUH_RHPORT_MODE & OPT_MODE_SPEED_MASK) #endif // For backward compatible #define TUSB_OPT_HOST_ENABLED CFG_TUH_ENABLED // highspeed support indicator #define TUH_OPT_HIGH_SPEED (CFG_TUH_MAX_SPEED ? (CFG_TUH_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED) //--------------------------------------------------------------------+ // TODO move later //--------------------------------------------------------------------+ // TUP_MCU_STRICT_ALIGN will overwrite TUP_ARCH_STRICT_ALIGN. // In case TUP_MCU_STRICT_ALIGN = 1 and TUP_ARCH_STRICT_ALIGN =0, we will not reply on compiler // to generate unaligned access code. // LPC_IP3511 Highspeed cannot access unaligned memory on USB_RAM #if TUD_OPT_HIGH_SPEED && TU_CHECK_MCU(OPT_MCU_LPC54XXX, OPT_MCU_LPC55XX) #define TUP_MCU_STRICT_ALIGN 1 #else #define TUP_MCU_STRICT_ALIGN 0 #endif //--------------------------------------------------------------------+ // Common Options (Default) //--------------------------------------------------------------------+ // Debug enable to print out error message #ifndef CFG_TUSB_DEBUG #define CFG_TUSB_DEBUG 0 #endif // Level where CFG_TUSB_DEBUG must be at least for USBH is logged #ifndef CFG_TUH_LOG_LEVEL #define CFG_TUH_LOG_LEVEL 2 #endif // Level where CFG_TUSB_DEBUG must be at least for USBD is logged #ifndef CFG_TUD_LOG_LEVEL #define CFG_TUD_LOG_LEVEL 2 #endif // Memory section for placing buffer used for usb transferring. If MEM_SECTION is different for // host and device use: CFG_TUD_MEM_SECTION, CFG_TUH_MEM_SECTION instead #ifndef CFG_TUSB_MEM_SECTION #define CFG_TUSB_MEM_SECTION #endif // Alignment requirement of buffer used for usb transferring. if MEM_ALIGN is different for // host and device controller use: CFG_TUD_MEM_ALIGN, CFG_TUH_MEM_ALIGN instead #ifndef CFG_TUSB_MEM_ALIGN #define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4) #endif // OS selection #ifndef CFG_TUSB_OS #define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_OS_INC_PATH #define CFG_TUSB_OS_INC_PATH #endif //-------------------------------------------------------------------- // Device Options (Default) //-------------------------------------------------------------------- // Attribute to place data in accessible RAM for device controller (default: CFG_TUSB_MEM_SECTION) #ifndef CFG_TUD_MEM_SECTION #define CFG_TUD_MEM_SECTION CFG_TUSB_MEM_SECTION #endif // Attribute to align memory for device controller (default: CFG_TUSB_MEM_ALIGN) #ifndef CFG_TUD_MEM_ALIGN #define CFG_TUD_MEM_ALIGN CFG_TUSB_MEM_ALIGN #endif #ifndef CFG_TUD_ENDPOINT0_SIZE #define CFG_TUD_ENDPOINT0_SIZE 64 #endif #ifndef CFG_TUD_INTERFACE_MAX #define CFG_TUD_INTERFACE_MAX 16 #endif // USB 2.0 compliance test mode support #ifndef CFG_TUD_TEST_MODE #define CFG_TUD_TEST_MODE 0 #endif //------------- Device Class Driver -------------// #ifndef CFG_TUD_BTH #define CFG_TUD_BTH 0 #endif #if CFG_TUD_BTH && !defined(CFG_TUD_BTH_ISO_ALT_COUNT) #error CFG_TUD_BTH_ISO_ALT_COUNT must be defined to tell Bluetooth driver the number of ISO endpoints to use #endif #ifndef CFG_TUD_CDC #define CFG_TUD_CDC 0 #endif #ifndef CFG_TUD_MSC #define CFG_TUD_MSC 0 #endif #ifndef CFG_TUD_HID #define CFG_TUD_HID 0 #endif #ifndef CFG_TUD_AUDIO #define CFG_TUD_AUDIO 0 #endif #ifndef CFG_TUD_VIDEO #define CFG_TUD_VIDEO 0 #endif #ifndef CFG_TUD_MIDI #define CFG_TUD_MIDI 0 #endif #ifndef CFG_TUD_VENDOR #define CFG_TUD_VENDOR 0 #endif #ifndef CFG_TUD_USBTMC #define CFG_TUD_USBTMC 0 #endif #ifndef CFG_TUD_DFU_RUNTIME #define CFG_TUD_DFU_RUNTIME 0 #endif #ifndef CFG_TUD_DFU #define CFG_TUD_DFU 0 #endif #ifndef CFG_TUD_ECM_RNDIS #ifdef CFG_TUD_NET #warning "CFG_TUD_NET is renamed to CFG_TUD_ECM_RNDIS" #define CFG_TUD_ECM_RNDIS CFG_TUD_NET #else #define CFG_TUD_ECM_RNDIS 0 #endif #endif #ifndef CFG_TUD_NCM #define CFG_TUD_NCM 0 #endif //-------------------------------------------------------------------- // Host Options (Default) //-------------------------------------------------------------------- #if CFG_TUH_ENABLED #ifndef CFG_TUH_DEVICE_MAX #define CFG_TUH_DEVICE_MAX 1 #endif #ifndef CFG_TUH_ENUMERATION_BUFSIZE #define CFG_TUH_ENUMERATION_BUFSIZE 256 #endif #endif // CFG_TUH_ENABLED // Attribute to place data in accessible RAM for host controller (default: CFG_TUSB_MEM_SECTION) #ifndef CFG_TUH_MEM_SECTION #define CFG_TUH_MEM_SECTION CFG_TUSB_MEM_SECTION #endif // Attribute to align memory for host controller #ifndef CFG_TUH_MEM_ALIGN #define CFG_TUH_MEM_ALIGN CFG_TUSB_MEM_ALIGN #endif //------------- CLASS -------------// #ifndef CFG_TUH_HUB #define CFG_TUH_HUB 0 #endif #ifndef CFG_TUH_CDC #define CFG_TUH_CDC 0 #endif #ifndef CFG_TUH_CDC_FTDI // FTDI is not part of CDC class, only to re-use CDC driver API #define CFG_TUH_CDC_FTDI 0 #endif #ifndef CFG_TUH_CDC_FTDI_VID_PID_LIST // List of product IDs that can use the FTDI CDC driver. 0x0403 is FTDI's VID #define CFG_TUH_CDC_FTDI_VID_PID_LIST \ {0x0403, 0x6001}, {0x0403, 0x6006}, {0x0403, 0x6010}, {0x0403, 0x6011}, \ {0x0403, 0x6014}, {0x0403, 0x6015}, {0x0403, 0x8372}, {0x0403, 0xFBFA}, \ {0x0403, 0xCD18} #endif #ifndef CFG_TUH_CDC_CP210X // CP210X is not part of CDC class, only to re-use CDC driver API #define CFG_TUH_CDC_CP210X 0 #endif #ifndef CFG_TUH_CDC_CP210X_VID_PID_LIST // List of product IDs that can use the CP210X CDC driver. 0x10C4 is Silicon Labs' VID #define CFG_TUH_CDC_CP210X_VID_PID_LIST \ {0x10C4, 0xEA60}, {0x10C4, 0xEA70} #endif #ifndef CFG_TUH_CDC_CH34X // CH34X is not part of CDC class, only to re-use CDC driver API #define CFG_TUH_CDC_CH34X 0 #endif #ifndef CFG_TUH_CDC_CH34X_VID_PID_LIST // List of product IDs that can use the CH34X CDC driver #define CFG_TUH_CDC_CH34X_VID_PID_LIST \ { 0x1a86, 0x5523 }, /* ch341 chip */ \ { 0x1a86, 0x7522 }, /* ch340k chip */ \ { 0x1a86, 0x7523 }, /* ch340 chip */ \ { 0x1a86, 0xe523 }, /* ch330 chip */ \ { 0x4348, 0x5523 }, /* ch340 custom chip */ \ { 0x2184, 0x0057 }, /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ \ { 0x9986, 0x7523 } /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ #endif #ifndef CFG_TUH_HID #define CFG_TUH_HID 0 #endif #ifndef CFG_TUH_MIDI #define CFG_TUH_MIDI 0 #endif #ifndef CFG_TUH_MSC #define CFG_TUH_MSC 0 #endif #ifndef CFG_TUH_VENDOR #define CFG_TUH_VENDOR 0 #endif #ifndef CFG_TUH_API_EDPT_XFER #define CFG_TUH_API_EDPT_XFER 0 #endif // Enable PIO-USB software host controller #ifndef CFG_TUH_RPI_PIO_USB #define CFG_TUH_RPI_PIO_USB 0 #endif #ifndef CFG_TUD_RPI_PIO_USB #define CFG_TUD_RPI_PIO_USB 0 #endif // MAX3421 Host controller option #ifndef CFG_TUH_MAX3421 #define CFG_TUH_MAX3421 0 #endif //--------------------------------------------------------------------+ // TypeC Options (Default) //--------------------------------------------------------------------+ #ifndef CFG_TUC_ENABLED #define CFG_TUC_ENABLED 0 #define tuc_int_handler(_p) #endif //------------------------------------------------------------------ // Configuration Validation //------------------------------------------------------------------ #if CFG_TUD_ENDPOINT0_SIZE > 64 #error Control Endpoint Max Packet Size cannot be larger than 64 #endif // To avoid GCC compiler warnings when -pedantic option is used (strict ISO C) typedef int make_iso_compilers_happy; #endif /* _TUSB_OPTION_H_ */ /** @} */ ================================================ FILE: pico-sdk/lib/tinyusb/src/typec/pd_types.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2023 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_PD_TYPES_H_ #define _TUSB_PD_TYPES_H_ #ifdef __cplusplus extern "C" { #endif #include #include #include "common/tusb_compiler.h" // Start of all packed definitions for compiler without per-type packed TU_ATTR_PACKED_BEGIN TU_ATTR_BIT_FIELD_ORDER_BEGIN //--------------------------------------------------------------------+ // TYPE-C //--------------------------------------------------------------------+ typedef enum { TUSB_TYPEC_PORT_SRC, TUSB_TYPEC_PORT_SNK, TUSB_TYPEC_PORT_DRP } tusb_typec_port_type_t; enum { PD_CTRL_RESERVED = 0, // 0b00000: 0 PD_CTRL_GOOD_CRC, // 0b00001: 1 PD_CTRL_GO_TO_MIN, // 0b00010: 2 PD_CTRL_ACCEPT, // 0b00011: 3 PD_CTRL_REJECT, // 0b00100: 4 PD_CTRL_PING, // 0b00101: 5 PD_CTRL_PS_READY, // 0b00110: 6 PD_CTRL_GET_SOURCE_CAP, // 0b00111: 7 PD_CTRL_GET_SINK_CAP, // 0b01000: 8 PD_CTRL_DR_SWAP, // 0b01001: 9 PD_CTRL_PR_SWAP, // 0b01010: 10 PD_CTRL_VCONN_SWAP, // 0b01011: 11 PD_CTRL_WAIT, // 0b01100: 12 PD_CTRL_SOFT_RESET, // 0b01101: 13 PD_CTRL_DATA_RESET, // 0b01110: 14 PD_CTRL_DATA_RESET_COMPLETE, // 0b01111: 15 PD_CTRL_NOT_SUPPORTED, // 0b10000: 16 PD_CTRL_GET_SOURCE_CAP_EXTENDED, // 0b10001: 17 PD_CTRL_GET_STATUS, // 0b10010: 18 PD_CTRL_FR_SWAP, // 0b10011: 19 PD_CTRL_GET_PPS_STATUS, // 0b10100: 20 PD_CTRL_GET_COUNTRY_CODES, // 0b10101: 21 PD_CTRL_GET_SINK_CAP_EXTENDED, // 0b10110: 22 PD_CTRL_GET_SOURCE_INFO, // 0b10111: 23 PD_CTRL_REVISION, // 0b11000: 24 }; enum { PD_DATA_RESERVED = 0, // 0b00000: 0 PD_DATA_SOURCE_CAP, // 0b00001: 1 PD_DATA_REQUEST, // 0b00010: 2 PD_DATA_BIST, // 0b00011: 3 PD_DATA_SINK_CAP, // 0b00100: 4 PD_DATA_BATTERY_STATUS, // 0b00101: 5 PD_DATA_ALERT, // 0b00110: 6 PD_DATA_GET_COUNTRY_INFO, // 0b00111: 7 PD_DATA_ENTER_USB, // 0b01000: 8 PD_DATA_EPR_REQUEST, // 0b01001: 9 PD_DATA_EPR_MODE, // 0b01010: 10 PD_DATA_SRC_INFO, // 0b01011: 11 PD_DATA_REVISION, // 0b01100: 12 PD_DATA_RESERVED_13, // 0b01101: 13 PD_DATA_RESERVED_14, // 0b01110: 14 PD_DATA_VENDOR_DEFINED, // 0b01111: 15 }; enum { PD_REV_10 = 0x0, PD_REV_20 = 0x1, PD_REV_30 = 0x2, }; enum { PD_DATA_ROLE_UFP = 0x0, PD_DATA_ROLE_DFP = 0x1, }; enum { PD_POWER_ROLE_SINK = 0x0, PD_POWER_ROLE_SOURCE = 0x1, }; typedef struct TU_ATTR_PACKED { uint16_t msg_type : 5; // [0:4] uint16_t data_role : 1; // [5] SOP only: 0 UFP, 1 DFP uint16_t specs_rev : 2; // [6:7] uint16_t power_role : 1; // [8] SOP only: 0 Sink, 1 Source uint16_t msg_id : 3; // [9:11] uint16_t n_data_obj : 3; // [12:14] uint16_t extended : 1; // [15] } pd_header_t; TU_VERIFY_STATIC(sizeof(pd_header_t) == 2, "size is not correct"); typedef struct TU_ATTR_PACKED { uint16_t data_size : 9; // [0:8] uint16_t reserved : 1; // [9] uint16_t request_chunk : 1; // [10] uint16_t chunk_number : 4; // [11:14] uint16_t chunked : 1; // [15] } pd_header_extended_t; TU_VERIFY_STATIC(sizeof(pd_header_extended_t) == 2, "size is not correct"); //--------------------------------------------------------------------+ // Source Capability //--------------------------------------------------------------------+ // All table references are from USBPD Specification rev3.1 version 1.8 enum { PD_PDO_TYPE_FIXED = 0, // Vmin = Vmax PD_PDO_TYPE_BATTERY, PD_PDO_TYPE_VARIABLE, // non-battery PD_PDO_TYPE_APDO, // Augmented Power Data Object }; // Fixed Power Data Object (PDO) table 6-9 typedef struct TU_ATTR_PACKED { uint32_t current_max_10ma : 10; // [9..0] Max current in 10mA unit uint32_t voltage_50mv : 10; // [19..10] Voltage in 50mV unit uint32_t current_peak : 2; // [21..20] Peak current uint32_t reserved : 1; // [22] Reserved uint32_t epr_mode_capable : 1; // [23] epr_mode_capable uint32_t unchunked_ext_msg_support : 1; // [24] UnChunked Extended Message Supported uint32_t dual_role_data : 1; // [25] Dual Role Data uint32_t usb_comm_capable : 1; // [26] USB Communications Capable uint32_t unconstrained_power : 1; // [27] Unconstrained Power uint32_t usb_suspend_supported : 1; // [28] USB Suspend Supported uint32_t dual_role_power : 1; // [29] Dual Role Power uint32_t type : 2; // [30] Fixed Supply type = PD_PDO_TYPE_FIXED } pd_pdo_fixed_t; TU_VERIFY_STATIC(sizeof(pd_pdo_fixed_t) == 4, "Invalid size"); // Battery Power Data Object (PDO) table 6-12 typedef struct TU_ATTR_PACKED { uint32_t power_max_250mw : 10; // [9..0] Max allowable power in 250mW unit uint32_t voltage_min_50mv : 10; // [19..10] Minimum voltage in 50mV unit uint32_t voltage_max_50mv : 10; // [29..20] Maximum voltage in 50mV unit uint32_t type : 2; // [31..30] Battery type = PD_PDO_TYPE_BATTERY } pd_pdo_battery_t; TU_VERIFY_STATIC(sizeof(pd_pdo_battery_t) == 4, "Invalid size"); // Variable Power Data Object (PDO) table 6-11 typedef struct TU_ATTR_PACKED { uint32_t current_max_10ma : 10; // [9..0] Max current in 10mA unit uint32_t voltage_min_50mv : 10; // [19..10] Minimum voltage in 50mV unit uint32_t voltage_max_50mv : 10; // [29..20] Maximum voltage in 50mV unit uint32_t type : 2; // [31..30] Variable Supply type = PD_PDO_TYPE_VARIABLE } pd_pdo_variable_t; TU_VERIFY_STATIC(sizeof(pd_pdo_variable_t) == 4, "Invalid size"); // Augmented Power Data Object (PDO) table 6-13 typedef struct TU_ATTR_PACKED { uint32_t current_max_50ma : 7; // [6..0] Max current in 50mA unit uint32_t reserved1 : 1; // [7] Reserved uint32_t voltage_min_100mv : 8; // [15..8] Minimum Voltage in 100mV unit uint32_t reserved2 : 1; // [16] Reserved uint32_t voltage_max_100mv : 8; // [24..17] Maximum Voltage in 100mV unit uint32_t reserved3 : 2; // [26..25] Reserved uint32_t pps_power_limited : 1; // [27] PPS Power Limited uint32_t spr_programmable : 2; // [29..28] SPR Programmable Power Supply uint32_t type : 2; // [31..30] Augmented Power Data Object = PD_PDO_TYPE_APDO } pd_pdo_apdo_t; TU_VERIFY_STATIC(sizeof(pd_pdo_apdo_t) == 4, "Invalid size"); //--------------------------------------------------------------------+ // Request //--------------------------------------------------------------------+ typedef struct TU_ATTR_PACKED { uint32_t current_extremum_10ma : 10; // [9..0] Max (give back = 0) or Min (give back = 1) current in 10mA unit uint32_t current_operate_10ma : 10; // [19..10] Operating current in 10mA unit uint32_t reserved : 2; // [21..20] Reserved uint32_t epr_mode_capable : 1; // [22] EPR mode capable uint32_t unchunked_ext_msg_support : 1; // [23] UnChunked Extended Message Supported uint32_t no_usb_suspend : 1; // [24] No USB Suspend uint32_t usb_comm_capable : 1; // [25] USB Communications Capable uint32_t capability_mismatch : 1; // [26] Capability Mismatch uint32_t give_back_flag : 1; // [27] GiveBack Flag: 0 = Max, 1 = Min uint32_t object_position : 4; // [31..28] Object Position } pd_rdo_fixed_variable_t; TU_VERIFY_STATIC(sizeof(pd_rdo_fixed_variable_t) == 4, "Invalid size"); typedef struct TU_ATTR_PACKED { uint32_t power_extremum_250mw : 10; // [9..0] Max (give back = 0) or Min (give back = 1) operating power in 250mW unit uint32_t power_operate_250mw : 10; // [19..10] Operating power in 250mW unit uint32_t reserved : 2; // [21..20] Reserved uint32_t epr_mode_capable : 1; // [22] EPR mode capable uint32_t unchunked_ext_msg_support : 1; // [23] UnChunked Extended Message Supported uint32_t no_usb_suspend : 1; // [24] No USB Suspend uint32_t usb_comm_capable : 1; // [25] USB Communications Capable uint32_t capability_mismatch : 1; // [26] Capability Mismatch uint32_t give_back_flag : 1; // [27] GiveBack Flag: 0 = Max, 1 = Min uint32_t object_position : 4; // [31..28] Object Position } pd_rdo_battery_t; TU_VERIFY_STATIC(sizeof(pd_rdo_battery_t) == 4, "Invalid size"); TU_ATTR_PACKED_END // End of all packed definitions TU_ATTR_BIT_FIELD_ORDER_END #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/typec/tcd.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2023 Ha Thach (thach@tinyusb.org) for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_TCD_H_ #define _TUSB_TCD_H_ #include "common/tusb_common.h" #include "pd_types.h" #include "osal/osal.h" #include "common/tusb_fifo.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ enum { TCD_EVENT_INVALID = 0, TCD_EVENT_CC_CHANGED, TCD_EVENT_RX_COMPLETE, TCD_EVENT_TX_COMPLETE, }; typedef struct TU_ATTR_PACKED { uint8_t rhport; uint8_t event_id; union { struct { uint8_t cc_state[2]; } cc_changed; struct TU_ATTR_PACKED { uint16_t result : 2; uint16_t xferred_bytes : 14; } xfer_complete; }; } tcd_event_t;; //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ // Initialize controller bool tcd_init(uint8_t rhport, uint32_t port_type); // Enable interrupt void tcd_int_enable (uint8_t rhport); // Disable interrupt void tcd_int_disable(uint8_t rhport); // Interrupt Handler void tcd_int_handler(uint8_t rhport); //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ bool tcd_msg_receive(uint8_t rhport, uint8_t* buffer, uint16_t total_bytes); bool tcd_msg_send(uint8_t rhport, uint8_t const* buffer, uint16_t total_bytes); //--------------------------------------------------------------------+ // Event API (implemented by stack) // Called by TCD to notify stack //--------------------------------------------------------------------+ extern void tcd_event_handler(tcd_event_t const * event, bool in_isr); TU_ATTR_ALWAYS_INLINE static inline void tcd_event_cc_changed(uint8_t rhport, uint8_t cc1, uint8_t cc2, bool in_isr) { tcd_event_t event = { .rhport = rhport, .event_id = TCD_EVENT_CC_CHANGED, .cc_changed = { .cc_state = {cc1, cc2 } } }; tcd_event_handler(&event, in_isr); } TU_ATTR_ALWAYS_INLINE static inline void tcd_event_rx_complete(uint8_t rhport, uint16_t xferred_bytes, uint8_t result, bool in_isr) { tcd_event_t event = { .rhport = rhport, .event_id = TCD_EVENT_RX_COMPLETE, .xfer_complete = { .xferred_bytes = xferred_bytes, .result = result } }; tcd_event_handler(&event, in_isr); } TU_ATTR_ALWAYS_INLINE static inline void tcd_event_tx_complete(uint8_t rhport, uint16_t xferred_bytes, uint8_t result, bool in_isr) { tcd_event_t event = { .rhport = rhport, .event_id = TCD_EVENT_TX_COMPLETE, .xfer_complete = { .xferred_bytes = xferred_bytes, .result = result } }; tcd_event_handler(&event, in_isr); } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/typec/usbc.c ================================================ /* * The MIT License (MIT) * * Copyright (c) 2023 Ha Thach (thach@tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #include "tusb_option.h" #if CFG_TUC_ENABLED #include "tcd.h" #include "usbc.h" //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ // Debug level of USBD #define USBC_DEBUG 2 #define TU_LOG_USBC(...) TU_LOG(USBC_DEBUG, __VA_ARGS__) // Event queue // usbc_int_set() is used as mutex in OS NONE config void usbc_int_set(bool enabled); OSAL_QUEUE_DEF(usbc_int_set, _usbc_qdef, CFG_TUC_TASK_QUEUE_SZ, tcd_event_t); tu_static osal_queue_t _usbc_q; // if stack is initialized static bool _usbc_inited = false; // if port is initialized static bool _port_inited[TUP_TYPEC_RHPORTS_NUM]; // Max possible PD size is 262 bytes static uint8_t _rx_buf[64] TU_ATTR_ALIGNED(4); static uint8_t _tx_buf[64] TU_ATTR_ALIGNED(4); bool usbc_msg_send(uint8_t rhport, pd_header_t const* header, void const* data); bool parse_msg_data(uint8_t rhport, pd_header_t const* header, uint8_t const* dobj, uint8_t const* p_end); bool parse_msg_control(uint8_t rhport, pd_header_t const* header); //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ bool tuc_inited(uint8_t rhport) { return _usbc_inited && _port_inited[rhport]; } bool tuc_init(uint8_t rhport, uint32_t port_type) { // Initialize stack if (!_usbc_inited) { tu_memclr(_port_inited, sizeof(_port_inited)); _usbc_q = osal_queue_create(&_usbc_qdef); TU_ASSERT(_usbc_q != NULL); _usbc_inited = true; } // skip if port already initialized if ( _port_inited[rhport] ) { return true; } TU_LOG_USBC("USBC init on port %u\r\n", rhport); TU_LOG_INT(USBC_DEBUG, sizeof(tcd_event_t)); TU_ASSERT(tcd_init(rhport, port_type)); tcd_int_enable(rhport); _port_inited[rhport] = true; return true; } void tuc_task_ext(uint32_t timeout_ms, bool in_isr) { (void) in_isr; // not implemented yet // Skip if stack is not initialized if (!_usbc_inited) return; // Loop until there is no more events in the queue while (1) { tcd_event_t event; if (!osal_queue_receive(_usbc_q, &event, timeout_ms)) return; switch (event.event_id) { case TCD_EVENT_CC_CHANGED: break; case TCD_EVENT_RX_COMPLETE: // TODO process message here in ISR, move to thread later if (event.xfer_complete.result == XFER_RESULT_SUCCESS) { pd_header_t const* header = (pd_header_t const*) _rx_buf; if (header->n_data_obj == 0) { parse_msg_control(event.rhport, header); }else { uint8_t const* p_end = _rx_buf + event.xfer_complete.xferred_bytes; uint8_t const * dobj = _rx_buf + sizeof(pd_header_t); parse_msg_data(event.rhport, header, dobj, p_end); } } // prepare for next message tcd_msg_receive(event.rhport, _rx_buf, sizeof(_rx_buf)); break; case TCD_EVENT_TX_COMPLETE: break; default: break; } } } bool parse_msg_data(uint8_t rhport, pd_header_t const* header, uint8_t const* dobj, uint8_t const* p_end) { if (tuc_pd_data_received_cb) { tuc_pd_data_received_cb(rhport, header, dobj, p_end); } return true; } bool parse_msg_control(uint8_t rhport, pd_header_t const* header) { if (tuc_pd_control_received_cb) { tuc_pd_control_received_cb(rhport, header); } return true; } //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ bool usbc_msg_send(uint8_t rhport, pd_header_t const* header, void const* data) { // copy header memcpy(_tx_buf, header, sizeof(pd_header_t)); // copy data objcet if available uint16_t const n_data_obj = header->n_data_obj; if (n_data_obj > 0) { memcpy(_tx_buf + sizeof(pd_header_t), data, n_data_obj * 4); } return tcd_msg_send(rhport, _tx_buf, sizeof(pd_header_t) + n_data_obj * 4); } bool tuc_msg_request(uint8_t rhport, void const* rdo) { pd_header_t const header = { .msg_type = PD_DATA_REQUEST, .data_role = PD_DATA_ROLE_UFP, .specs_rev = PD_REV_30, .power_role = PD_POWER_ROLE_SINK, .msg_id = 0, .n_data_obj = 1, .extended = 0, }; return usbc_msg_send(rhport, &header, rdo); } void tcd_event_handler(tcd_event_t const * event, bool in_isr) { (void) in_isr; switch(event->event_id) { case TCD_EVENT_CC_CHANGED: if (event->cc_changed.cc_state[0] || event->cc_changed.cc_state[1]) { // Attach, start receiving tcd_msg_receive(event->rhport, _rx_buf, sizeof(_rx_buf)); }else { // Detach } break; default: break; } osal_queue_send(_usbc_q, event, in_isr); } //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ void usbc_int_set(bool enabled) { // Disable all controllers since they shared the same event queue for (uint8_t p = 0; p < TUP_TYPEC_RHPORTS_NUM; p++) { if ( _port_inited[p] ) { if (enabled) { tcd_int_enable(p); }else { tcd_int_disable(p); } } } } #endif ================================================ FILE: pico-sdk/lib/tinyusb/src/typec/usbc.h ================================================ /* * The MIT License (MIT) * * Copyright (c) 2023 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_UTCD_H_ #define _TUSB_UTCD_H_ #include "common/tusb_common.h" #include "pd_types.h" #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------+ // TypeC Configuration //--------------------------------------------------------------------+ #ifndef CFG_TUC_TASK_QUEUE_SZ #define CFG_TUC_TASK_QUEUE_SZ 8 #endif //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ // Init typec stack on a port bool tuc_init(uint8_t rhport, uint32_t port_type); // Check if typec port is initialized bool tuc_inited(uint8_t rhport); // Task function should be called in main/rtos loop, extended version of tud_task() // - timeout_ms: millisecond to wait, zero = no wait, 0xFFFFFFFF = wait forever // - in_isr: if function is called in ISR void tuc_task_ext(uint32_t timeout_ms, bool in_isr); // Task function should be called in main/rtos loop TU_ATTR_ALWAYS_INLINE static inline void tuc_task (void) { tuc_task_ext(UINT32_MAX, false); } #ifndef _TUSB_TCD_H_ extern void tcd_int_handler(uint8_t rhport); #endif // Interrupt handler, name alias to TCD #define tuc_int_handler tcd_int_handler //--------------------------------------------------------------------+ // Callbacks //--------------------------------------------------------------------+ TU_ATTR_WEAK bool tuc_pd_data_received_cb(uint8_t rhport, pd_header_t const* header, uint8_t const* dobj, uint8_t const* p_end); TU_ATTR_WEAK bool tuc_pd_control_received_cb(uint8_t rhport, pd_header_t const* header); //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ bool tuc_msg_request(uint8_t rhport, void const* rdo); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/pico_sdk_import.cmake ================================================ # This is a copy of /external/pico_sdk_import.cmake # This can be dropped into an external project to help locate this SDK # It should be include()ed prior to project() if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH)) set(PICO_SDK_PATH $ENV{PICO_SDK_PATH}) message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')") endif () if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT)) set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT}) message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')") endif () if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH)) set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH}) message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')") endif () set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK") set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable") set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK") if (NOT PICO_SDK_PATH) if (PICO_SDK_FETCH_FROM_GIT) include(FetchContent) set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR}) if (PICO_SDK_FETCH_FROM_GIT_PATH) get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}") endif () FetchContent_Declare( pico_sdk GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk GIT_TAG master ) if (NOT pico_sdk) message("Downloading Raspberry Pi Pico SDK") FetchContent_Populate(pico_sdk) set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR}) endif () set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE}) else () message(FATAL_ERROR "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git." ) endif () endif () get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") if (NOT EXISTS ${PICO_SDK_PATH}) message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found") endif () set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake) if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE}) message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK") endif () set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) include(${PICO_SDK_INIT_CMAKE_FILE}) ================================================ FILE: pico-sdk/pico_sdk_init.cmake ================================================ # Pre-initialize the Raspberry Pi Pico SDK, setting up the platform and toolchain and some CMake utility functions # This file must be included prior to the project() call # Note: this file is perhaps named badly, as it provides a method pico_sdk_init which # the enclosing project calls LATER to actually "initialize" the SDK (by including the CMakeLists.txt from this # same directory) if (NOT TARGET _pico_sdk_pre_init_marker) add_library(_pico_sdk_pre_init_marker INTERFACE) function(pico_is_top_level_project VAR) string(TOLOWER ${CMAKE_CURRENT_LIST_DIR} __list_dir) string(TOLOWER ${CMAKE_SOURCE_DIR} __source_dir) if (__source_dir STREQUAL __list_dir) set(${VAR} 1 PARENT_SCOPE) else() set(${VAR} 0 PARENT_SCOPE) endif() endfunction() function(pico_message_debug MESSAGE) # The log-level system was added in CMake 3.15. if(${CMAKE_VERSION} VERSION_LESS "3.15.0") message(${MESSAGE}) else() message(DEBUG ${MESSAGE}) endif() endfunction() if (NOT PICO_SDK_PATH) set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR}) endif () get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) list(APPEND CMAKE_MODULE_PATH ${PICO_SDK_PATH}/cmake) include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_version.cmake) include(pico_utils) message("PICO_SDK_PATH is ${CMAKE_CURRENT_LIST_DIR}") include(pico_pre_load_platform) # We want to configure correct toolchain prior to project load # todo perhaps this should be included by the platform instead? include(pico_pre_load_toolchain) macro(pico_sdk_init) if (NOT CMAKE_PROJECT_NAME) message(WARNING "pico_sdk_init() should be called after the project is created (and languages added)") endif() add_subdirectory(${PICO_SDK_PATH} pico-sdk) endmacro() macro(add_sub_list_dirs var) foreach(LIST_DIR IN LISTS ${var}) get_filename_component(SHORT_NAME "${LIST_DIR}" NAME) pico_message_debug("Including custom CMakeLists.txt ${SHORT_NAME}") add_subdirectory(${LIST_DIR} ${SHORT_NAME}) endforeach() endmacro() macro(add_sub_list_files var) foreach(LIST_FILE IN LISTS ${var}) pico_message_debug("Including custom CMake file ${LIST_FILE}") include(${LIST_FILE}) endforeach() endmacro() macro(pico_register_common_scope_var NAME) if (NOT ${NAME} IN_LIST PICO_PROMOTE_COMMON_SCOPE_VARS) list(APPEND PICO_PROMOTE_COMMON_SCOPE_VARS ${NAME}) endif() endmacro() set(PICO_PROMOTE_COMMON_SCOPE_VARS PICO_INCLUDE_DIRS PICO_SDK_POST_LIST_DIRS PICO_SDK_POST_LIST_FILES PICO_CONFIG_HEADER_FILES PICO_RP2040_CONFIG_HEADER_FILES ) macro(pico_promote_common_scope_vars) set(PICO_PROMOTE_COMMON_SCOPE_VARS ${PICO_PROMOTE_COMMON_SCOPE_VARS} PARENT_SCOPE) foreach(VAR IN LISTS PICO_PROMOTE_COMMON_SCOPE_VARS) SET(${VAR} ${${VAR}} PARENT_SCOPE) endforeach() endmacro() endif() ================================================ FILE: pico-sdk/pico_sdk_version.cmake ================================================ # PICO_BUILD_DEFINE: PICO_SDK_VERSION_MAJOR, SDK major version number, type=int, group=pico_base # PICO_CMAKE_CONFIG: PICO_SDK_VERSION_MAJOR, SDK major version number, type=int, group=pico_base set(PICO_SDK_VERSION_MAJOR 1) # PICO_BUILD_DEFINE: PICO_SDK_VERSION_MINOR, SDK minor version number, type=int, group=pico_base # PICO_CMAKE_CONFIG: PICO_SDK_VERSION_MINOR, SDK minor version number, type=int, group=pico_base set(PICO_SDK_VERSION_MINOR 5) # PICO_BUILD_DEFINE: PICO_SDK_VERSION_REVISION, SDK version revision, type=int, group=pico_base # PICO_CMAKE_CONFIG: PICO_SDK_VERSION_REVISION, SDK version revision, type=int, group=pico_base set(PICO_SDK_VERSION_REVISION 1) # PICO_BUILD_DEFINE: PICO_SDK_VERSION_PRE_RELEASE_ID, optional SDK pre-release version identifier, type=string, group=pico_base # PICO_CMAKE_CONFIG: PICO_SDK_VERSION_PRE_RELEASE_ID, optional SDK pre-release version identifier, type=string, group=pico_base #set(PICO_SDK_VERSION_PRE_RELEASE_ID develop) # PICO_BUILD_DEFINE: PICO_SDK_VERSION_STRING, SDK version, type=string, group=pico_base # PICO_CMAKE_CONFIG: PICO_SDK_VERSION_STRING, SDK version, type=string, group=pico_base set(PICO_SDK_VERSION_STRING "${PICO_SDK_VERSION_MAJOR}.${PICO_SDK_VERSION_MINOR}.${PICO_SDK_VERSION_REVISION}") if (PICO_SDK_VERSION_PRE_RELEASE_ID) set(PICO_SDK_VERSION_STRING "${PICO_SDK_VERSION_STRING}-${PICO_SDK_VERSION_PRE_RELEASE_ID}") endif() ================================================ FILE: pico-sdk/src/CMakeLists.txt ================================================ cmake_policy(SET CMP0079 NEW) # allow inserting of dependencies into our INTERFACE libraries set(PICO_PLATFORM_CMAKE_FILE "" CACHE INTERNAL "") set(PICO_DOXYGEN_PATHS "" CACHE INTERNAL "") # generated each time if (NOT PICO_PLATFORM_CMAKE_FILE) set(PICO_PLATFORM_CMAKE_FILE ${CMAKE_CURRENT_LIST_DIR}/${PICO_PLATFORM}.cmake CACHE INTERNAL "") endif () if (NOT EXISTS "${PICO_PLATFORM_CMAKE_FILE}") message(FATAL_ERROR "${PICO_PLATFORM_CMAKE_FILE} does not exist. \ Either specify a valid PICO_PLATFORM (or PICO_PLATFORM_CMAKE_FILE).") endif () # Initialize board related build/compile settings include(${CMAKE_CURRENT_LIST_DIR}/board_setup.cmake) # call add_subdirectory(subdir) unless SKIP_SUBDIR evaluates to true function(pico_add_subdirectory subdir) # todo add option to disable skip flag string(TOUPPER ${subdir} subdir_upper) set(replace_flag SKIP_${subdir_upper}) if (NOT ${replace_flag}) add_subdirectory(${subdir}) else () message("Not including ${subdir} because ${replace_flag} defined.") endif () pico_promote_common_scope_vars() endfunction() # takes dependencies after the target function(pico_mirrored_target_link_libraries TARGET SCOPE) if (${ARGC} LESS 3) message(FATAL_ERROR "expected a target, scope and at least one dependency") endif() if (NOT TARGET ${TARGET}_headers) message(FATAL_ERROR "${TARGET} does not have headers") endif() # library should depend on its own header target_link_libraries(${TARGET} ${SCOPE} ${TARGET}_headers) foreach(DEPENDENCY IN LISTS ARGN) if (DEPENDENCY MATCHES ".*_headers") message(FATAL_ERROR "should not use headers with pico_mirrored_target_link_libraries") endif() # note, it would be nice to only add the dependency if it exists, but we do # not necessarily add libraries in reverse dependency order, so we do this # unconditionally, so this function should only be passed dependencies that # have headers, or link will fail with a missing library -lfoo_headers target_link_libraries(${TARGET}_headers ${SCOPE} ${DEPENDENCY}_headers) target_link_libraries(${TARGET} ${SCOPE} ${DEPENDENCY}) endforeach() endfunction() # add a link option to wrap the given function name; i.e. -Wl:wrap=FUNCNAME for gcc function(pico_wrap_function TARGET FUNCNAME) target_link_options(${TARGET} INTERFACE "LINKER:--wrap=${FUNCNAME}") endfunction() # add map file generation for the given target function(pico_add_map_output TARGET) get_target_property(target_type ${TARGET} TYPE) if ("EXECUTABLE" STREQUAL "${target_type}") target_link_options(${TARGET} PRIVATE "LINKER:-Map=$>,$,$>${CMAKE_EXECUTABLE_SUFFIX}.map") else () target_link_options(${TARGET} INTERFACE "LINKER:-Map=$>,$,$>${CMAKE_EXECUTABLE_SUFFIX}.map") endif () endfunction() # create a hardware_NAME_headers target (see pico_simple_hardware_headers_target) # create a hardware_NAME target (see pico_simple_hardware_target) macro(pico_simple_hardware_target NAME) pico_simple_hardware_headers_target(${NAME}) pico_simple_hardware_impl_target(${NAME}) endmacro() # create an INTERFACE library named target, and define LIB_TARGET=1 (upper case) as a compile option # and make it dependent on a pre-existing corresponding _headers library # optional arg NOFLAG will skip the LIB_TARGET definition function(pico_add_impl_library target) add_library(${target} INTERFACE) string(TOUPPER ${target} TARGET_UPPER) if (${ARGC} GREATER 1) if (NOT "${ARGV1}" STREQUAL "NOFLAG") message(FATAL_ERROR "Unknown parameter ${ARGV1}") endif() else() target_compile_definitions(${target} INTERFACE LIB_${TARGET_UPPER}=1) endif() target_link_libraries(${target} INTERFACE ${target}_headers) endfunction() # create an INTERFACE library named target along with associated header, and define LIB_TARGET=1 (upper case) as a compile option # optional arg NOFLAG will skip the LIB_TARGET definition function(pico_add_library target) add_library(${target}_headers INTERFACE) pico_add_impl_library(${target} ${ARGN}) endfunction() # create an INTERFACE library named hardware_NAME_headers INTERFACE library if it doesn't already exist, # and add include/ relative to the calling directory to the includes. # and hardware_structs and hardware_claim as dependencies of the library macro(pico_simple_hardware_headers_target NAME) if (NOT TARGET hardware_${NAME}_headers) add_library(hardware_${NAME}_headers INTERFACE) target_include_directories(hardware_${NAME}_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_link_libraries(hardware_${NAME}_headers INTERFACE pico_base_headers) if (NOT PICO_NO_HARDWARE) target_link_libraries(hardware_${NAME}_headers INTERFACE hardware_structs hardware_claim_headers) endif() endif() endmacro() # create an INTERFACE library named hardware_NAME if it doesn't exist, along with a hardware_NAME_headers # INTERFACE library that it depends on. The hardware_NAME_headers library add include/ relative to # and pico_base_headers, and harddware_structs as a dependency of the library macro(pico_simple_hardware_headers_only_target NAME) if (NOT TARGET hardware_${NAME}) # Choosing not to add LIB_HARDWARE_ defines to avoid command line bloat pending a need (they aren't # super interesting except to determine functionality as they are mostly passive accessors, however # they could be useful to determine if the header is available. # pico_add_sdk_impl_library(hardware_${NAME}) add_library(hardware_${NAME}_headers INTERFACE) # a headers only target should still have an explicit _headers library for consistency target_include_directories(hardware_${NAME}_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_link_libraries(hardware_${NAME}_headers INTERFACE pico_base_headers) if (NOT PICO_NO_HARDWARE) target_link_libraries(hardware_${NAME}_headers INTERFACE hardware_structs) endif() add_library(hardware_${NAME} INTERFACE) target_link_libraries(hardware_${NAME} INTERFACE hardware_${NAME}_headers) endif() endmacro() # create an INTERFACE library named hardware_NAME if it doesn't exist, dependent on a pre-existing hardware_NAME_headers # INTERFACE library and pico_platform. The file NAME.c relative to the caller is added to the C sources for the hardware_NAME macro(pico_simple_hardware_impl_target NAME) if (NOT TARGET hardware_${NAME}) # Choosing not to add LIB_HARDWARE_ defines to avoid command line bloat pending a need (they aren't # super interesting except to determine functionality as they are mostly passive accessors, however # they could be useful to determine if the header is available. # pico_add_sdk_impl_library(hardware_${NAME}) add_library(hardware_${NAME} INTERFACE) target_sources(hardware_${NAME} INTERFACE ${CMAKE_CURRENT_LIST_DIR}/${NAME}.c ) pico_mirrored_target_link_libraries(hardware_${NAME} INTERFACE pico_platform) if (NOT PICO_NO_HARDWARE) target_link_libraries(hardware_${NAME} INTERFACE hardware_claim) endif() endif() endmacro() function(pico_add_doxygen SOURCE_DIR) set(PICO_DOXYGEN_PATHS "${PICO_DOXYGEN_PATHS} ${SOURCE_DIR}" CACHE INTERNAL "") endfunction() function(pico_add_doxygen_exclude SOURCE_DIR) set(PICO_DOXYGEN_EXCLUDE_PATHS "${PICO_DOXYGEN_EXCLUDE_PATHS} ${SOURCE_DIR}" CACHE INTERNAL "") endfunction() include(${PICO_PLATFORM_CMAKE_FILE}) pico_promote_common_scope_vars() ================================================ FILE: pico-sdk/src/board_setup.cmake ================================================ # PICO_CMAKE_CONFIG: PICO_BOARD, The board name being built for. This is overridable from the user environment, type=string, default=pico, group=build if (DEFINED ENV{PICO_BOARD}) set(PICO_BOARD $ENV{PICO_BOARD}) message("Using PICO_BOARD from environment ('${PICO_BOARD}')") else() if (NOT PICO_BOARD) set(PICO_BOARD "pico") pico_message("Defaulting PICO target board to ${PICO_BOARD} since not specified.") else() message("PICO target board is ${PICO_BOARD}.") endif() endif() set(PICO_BOARD ${PICO_BOARD} CACHE STRING "PICO target board (e.g. pico)" FORCE) # PICO_CMAKE_CONFIG: PICO_BOARD_CMAKE_DIRS, Directories to look for .cmake in. This is overridable from the user environment, type=list, default="", group=build if (DEFINED ENV{PICO_BOARD_CMAKE_DIRS}) set(PICO_BOARD_CMAKE_DIRS $ENV{PICO_BOARD_CMAKE_DIRS}) message("Using PICO_BOARD_CMAKE_DIRS from environment ('${PICO_BOARD_CMAKE_DIRS}')") endif() list(APPEND PICO_BOARD_CMAKE_DIRS ${CMAKE_CURRENT_LIST_DIR}/boards) pico_find_in_paths(PICO_BOARD_CMAKE_FILE PICO_BOARD_CMAKE_DIRS ${PICO_BOARD}.cmake) if (EXISTS "${PICO_BOARD_CMAKE_FILE}") message("Using CMake board configuration from ${PICO_BOARD_CMAKE_FILE}") include(${PICO_BOARD_CMAKE_FILE} board_config) else() include(boards/generic_board.cmake) endif() list(APPEND PICO_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/boards/include) # so boards/foo.h can be explicitly included ================================================ FILE: pico-sdk/src/boards/generic_board.cmake ================================================ # For boards without their own cmake file, simply include a header # PICO_CMAKE_CONFIG: PICO_BOARD_HEADER_DIRS, Directories to look for .h in. This is overridable from the user environment, type=list, default="", group=build if (DEFINED ENV{PICO_BOARD_HEADER_DIRS}) set(PICO_BOARD_HEADER_DIRS $ENV{PICO_BOARD_HEADER_DIRS}) message("Using PICO_BOARD_HEADER_DIRS from environment ('${PICO_BOARD_HEADER_DIRS}')") endif() set(PICO_BOARD_HEADER_DIRS ${PICO_BOARD_HEADER_DIRS} CACHE STRING "PICO board header directories" FORCE) list(APPEND PICO_BOARD_HEADER_DIRS ${CMAKE_CURRENT_LIST_DIR}/include/boards) pico_find_in_paths(PICO_BOARD_HEADER_FILE PICO_BOARD_HEADER_DIRS ${PICO_BOARD}.h) if (EXISTS ${PICO_BOARD_HEADER_FILE}) message("Using board configuration from ${PICO_BOARD_HEADER_FILE}") list(APPEND PICO_CONFIG_HEADER_FILES ${PICO_BOARD_HEADER_FILE}) else() set(msg "Unable to find definition of board '${PICO_BOARD}' (specified by PICO_BOARD):\n") list(JOIN PICO_BOARD_HEADER_DIRS ", " DIRS) string(CONCAT msg ${msg} " Looked for ${PICO_BOARD}.h in ${DIRS} (additional paths specified by PICO_BOARD_HEADER_DIRS)\n") list(JOIN PICO_BOARD_CMAKE_DIRS ", " DIRS) string(CONCAT msg ${msg} " Looked for ${PICO_BOARD}.cmake in ${DIRS} (additional paths specified by PICO_BOARD_CMAKE_DIRS)") message(FATAL_ERROR ${msg}) endif() ================================================ FILE: pico-sdk/src/boards/include/boards/none.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ----------------------------------------------------- // NOTE: THIS HEADER IS ALSO INCLUDED BY ASSEMBLER SO // SHOULD ONLY CONSIST OF PREPROCESSOR DIRECTIVES // ----------------------------------------------------- #ifndef _BOARDS_NONE_H #define _BOARDS_NONE_H #endif ================================================ FILE: pico-sdk/src/boards/include/boards/pico.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ----------------------------------------------------- // NOTE: THIS HEADER IS ALSO INCLUDED BY ASSEMBLER SO // SHOULD ONLY CONSIST OF PREPROCESSOR DIRECTIVES // ----------------------------------------------------- // This header may be included by other board headers as "boards/pico.h" #ifndef _BOARDS_PICO_H #define _BOARDS_PICO_H // For board detection #define RASPBERRYPI_PICO // --- UART --- #ifndef PICO_DEFAULT_UART #define PICO_DEFAULT_UART 0 #endif #ifndef PICO_DEFAULT_UART_TX_PIN #define PICO_DEFAULT_UART_TX_PIN 0 #endif #ifndef PICO_DEFAULT_UART_RX_PIN #define PICO_DEFAULT_UART_RX_PIN 1 #endif // --- LED --- #ifndef PICO_DEFAULT_LED_PIN #define PICO_DEFAULT_LED_PIN 25 #endif // no PICO_DEFAULT_WS2812_PIN // --- I2C --- #ifndef PICO_DEFAULT_I2C #define PICO_DEFAULT_I2C 0 #endif #ifndef PICO_DEFAULT_I2C_SDA_PIN #define PICO_DEFAULT_I2C_SDA_PIN 4 #endif #ifndef PICO_DEFAULT_I2C_SCL_PIN #define PICO_DEFAULT_I2C_SCL_PIN 5 #endif // --- SPI --- #ifndef PICO_DEFAULT_SPI #define PICO_DEFAULT_SPI 0 #endif #ifndef PICO_DEFAULT_SPI_SCK_PIN #define PICO_DEFAULT_SPI_SCK_PIN 18 #endif #ifndef PICO_DEFAULT_SPI_TX_PIN #define PICO_DEFAULT_SPI_TX_PIN 19 #endif #ifndef PICO_DEFAULT_SPI_RX_PIN #define PICO_DEFAULT_SPI_RX_PIN 16 #endif #ifndef PICO_DEFAULT_SPI_CSN_PIN #define PICO_DEFAULT_SPI_CSN_PIN 17 #endif // --- FLASH --- #define PICO_BOOT_STAGE2_CHOOSE_W25Q080 1 #ifndef PICO_FLASH_SPI_CLKDIV #define PICO_FLASH_SPI_CLKDIV 2 #endif #ifndef PICO_FLASH_SIZE_BYTES #define PICO_FLASH_SIZE_BYTES (2 * 1024 * 1024) #endif // Drive high to force power supply into PWM mode (lower ripple on 3V3 at light loads) #define PICO_SMPS_MODE_PIN 23 #ifndef PICO_RP2040_B0_SUPPORTED #define PICO_RP2040_B0_SUPPORTED 1 #endif // The GPIO Pin used to read VBUS to determine if the device is battery powered. #ifndef PICO_VBUS_PIN #define PICO_VBUS_PIN 24 #endif // The GPIO Pin used to monitor VSYS. Typically you would use this with ADC. // There is an example in adc/read_vsys in pico-examples. #ifndef PICO_VSYS_PIN #define PICO_VSYS_PIN 29 #endif #endif ================================================ FILE: pico-sdk/src/boards/include/boards/pico_w.h ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ----------------------------------------------------- // NOTE: THIS HEADER IS ALSO INCLUDED BY ASSEMBLER SO // SHOULD ONLY CONSIST OF PREPROCESSOR DIRECTIVES // ----------------------------------------------------- // This header may be included by other board headers as "boards/pico.h" #ifndef _BOARDS_PICO_W_H #define _BOARDS_PICO_W_H // For board detection #define RASPBERRYPI_PICO_W // --- UART --- #ifndef PICO_DEFAULT_UART #define PICO_DEFAULT_UART 0 #endif #ifndef PICO_DEFAULT_UART_TX_PIN #define PICO_DEFAULT_UART_TX_PIN 0 #endif #ifndef PICO_DEFAULT_UART_RX_PIN #define PICO_DEFAULT_UART_RX_PIN 1 #endif // --- LED --- // no PICO_DEFAULT_LED_PIN - LED is on Wireless chip // no PICO_DEFAULT_WS2812_PIN // --- I2C --- #ifndef PICO_DEFAULT_I2C #define PICO_DEFAULT_I2C 0 #endif #ifndef PICO_DEFAULT_I2C_SDA_PIN #define PICO_DEFAULT_I2C_SDA_PIN 4 #endif #ifndef PICO_DEFAULT_I2C_SCL_PIN #define PICO_DEFAULT_I2C_SCL_PIN 5 #endif // --- SPI --- #ifndef PICO_DEFAULT_SPI #define PICO_DEFAULT_SPI 0 #endif #ifndef PICO_DEFAULT_SPI_SCK_PIN #define PICO_DEFAULT_SPI_SCK_PIN 18 #endif #ifndef PICO_DEFAULT_SPI_TX_PIN #define PICO_DEFAULT_SPI_TX_PIN 19 #endif #ifndef PICO_DEFAULT_SPI_RX_PIN #define PICO_DEFAULT_SPI_RX_PIN 16 #endif #ifndef PICO_DEFAULT_SPI_CSN_PIN #define PICO_DEFAULT_SPI_CSN_PIN 17 #endif // --- FLASH --- #define PICO_BOOT_STAGE2_CHOOSE_W25Q080 1 #ifndef PICO_FLASH_SPI_CLKDIV #define PICO_FLASH_SPI_CLKDIV 2 #endif #ifndef PICO_FLASH_SIZE_BYTES #define PICO_FLASH_SIZE_BYTES (2 * 1024 * 1024) #endif // note the SMSP mode pin is on WL_GPIO1 // #define PICO_SMPS_MODE_PIN #ifndef PICO_RP2040_B0_SUPPORTED #define PICO_RP2040_B0_SUPPORTED 0 #endif #ifndef PICO_RP2040_B1_SUPPORTED #define PICO_RP2040_B1_SUPPORTED 0 #endif #ifndef CYW43_PIN_WL_HOST_WAKE #define CYW43_PIN_WL_HOST_WAKE 24 #endif #ifndef CYW43_PIN_WL_REG_ON #define CYW43_PIN_WL_REG_ON 23 #endif #ifndef CYW43_WL_GPIO_COUNT #define CYW43_WL_GPIO_COUNT 3 #endif #ifndef CYW43_WL_GPIO_LED_PIN #define CYW43_WL_GPIO_LED_PIN 0 #endif // If CYW43_WL_GPIO_VBUS_PIN is defined then a CYW43 GPIO has to be used to read VBUS. // This can be passed to cyw43_arch_gpio_get to determine if the device is battery powered. // PICO_VBUS_PIN and CYW43_WL_GPIO_VBUS_PIN should not both be defined. #ifndef CYW43_WL_GPIO_VBUS_PIN #define CYW43_WL_GPIO_VBUS_PIN 2 #endif // If CYW43_USES_VSYS_PIN is defined then CYW43 uses the VSYS GPIO (defined by PICO_VSYS_PIN) for other purposes. // If this is the case, to use the VSYS GPIO it's necessary to ensure CYW43 is not using it. // This can be achieved by wrapping the use of the VSYS GPIO in cyw43_thread_enter / cyw43_thread_exit. #ifndef CYW43_USES_VSYS_PIN #define CYW43_USES_VSYS_PIN 1 #endif // The GPIO Pin used to monitor VSYS. Typically you would use this with ADC. // There is an example in adc/read_vsys in pico-examples. #ifndef PICO_VSYS_PIN #define PICO_VSYS_PIN 29 #endif #endif ================================================ FILE: pico-sdk/src/boards/pico_w.cmake ================================================ set(PICO_CYW43_SUPPORTED "1") pico_register_common_scope_var(PICO_CYW43_SUPPORTED) include(${CMAKE_CURRENT_LIST_DIR}/generic_board.cmake) ================================================ FILE: pico-sdk/src/common/CMakeLists.txt ================================================ pico_add_subdirectory(boot_picoboot) pico_add_subdirectory(boot_uf2) pico_add_subdirectory(pico_base) pico_add_subdirectory(pico_usb_reset_interface) # PICO_CMAKE_CONFIG: PICO_BARE_METAL, Flag to exclude anything except base headers from the build, type=bool, default=0, group=build if (NOT PICO_BARE_METAL) pico_add_subdirectory(pico_bit_ops) pico_add_subdirectory(pico_binary_info) pico_add_subdirectory(pico_divider) pico_add_subdirectory(pico_sync) pico_add_subdirectory(pico_time) pico_add_subdirectory(pico_util) pico_add_subdirectory(pico_stdlib) endif() pico_add_doxygen(${CMAKE_CURRENT_LIST_DIR}) pico_promote_common_scope_vars() ================================================ FILE: pico-sdk/src/common/README.md ================================================ This directory code that is common to all builds regardless of `PICO_PLATFORM`. It is a mix of common header files, or high level functionality built entirely using `hardware_` or `pico_` libraries provided by the actual target `PICO_PLATFORM`` ================================================ FILE: pico-sdk/src/common/boot_picoboot/CMakeLists.txt ================================================ add_library(boot_picoboot_headers INTERFACE) target_include_directories(boot_picoboot_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) ================================================ FILE: pico-sdk/src/common/boot_picoboot/include/boot/picoboot.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _BOOT_PICOBOOT_H #define _BOOT_PICOBOOT_H #include #include #include #ifndef NO_PICO_PLATFORM #include "pico/platform.h" #endif /** \file picoboot.h * \defgroup boot_picoboot boot_picoboot * * Header file for the PICOBOOT USB interface exposed by an RP2040 in BOOTSEL mode. */ #define PICOBOOT_MAGIC 0x431fd10bu // -------------------------------------------- // CONTROL REQUESTS FOR THE PICOBOOT INTERFACE // -------------------------------------------- // size 0 OUT - unstall EPs and reset #define PICOBOOT_IF_RESET 0x41 // size 16 IN - return the status of the last command #define PICOBOOT_IF_CMD_STATUS 0x42 // -------------------------------------------------- // COMMAND REQUESTS SENT TO THE PICOBOOT OUT ENDPOINT // -------------------------------------------------- // // picoboot_cmd structure of size 32 is sent to OUT endpoint // transfer_length bytes are transferred via IN/OUT // device responds on success with 0 length ACK packet set via OUT/IN // device may stall the transferring endpoint in case of error enum picoboot_cmd_id { PC_EXCLUSIVE_ACCESS = 0x1, PC_REBOOT = 0x2, PC_FLASH_ERASE = 0x3, PC_READ = 0x84, // either RAM or FLASH PC_WRITE = 5, // either RAM or FLASH (does no erase) PC_EXIT_XIP = 0x6, PC_ENTER_CMD_XIP = 0x7, PC_EXEC = 0x8, PC_VECTORIZE_FLASH = 0x9 }; enum picoboot_status { PICOBOOT_OK = 0, PICOBOOT_UNKNOWN_CMD = 1, PICOBOOT_INVALID_CMD_LENGTH = 2, PICOBOOT_INVALID_TRANSFER_LENGTH = 3, PICOBOOT_INVALID_ADDRESS = 4, PICOBOOT_BAD_ALIGNMENT = 5, PICOBOOT_INTERLEAVED_WRITE = 6, PICOBOOT_REBOOTING = 7, PICOBOOT_UNKNOWN_ERROR = 8, }; struct __packed picoboot_reboot_cmd { uint32_t dPC; // 0 means reset into bootrom uint32_t dSP; uint32_t dDelayMS; }; // used for EXEC, VECTORIZE_FLASH struct __packed picoboot_address_only_cmd { uint32_t dAddr; }; // used for READ, WRITE, FLASH_ERASE struct __packed picoboot_range_cmd { uint32_t dAddr; uint32_t dSize; }; enum picoboot_exclusive_type { NOT_EXCLUSIVE = 0, EXCLUSIVE, EXCLUSIVE_AND_EJECT }; struct __packed picoboot_exclusive_cmd { uint8_t bExclusive; }; // little endian struct __packed __aligned(4) picoboot_cmd { uint32_t dMagic; uint32_t dToken; // an identifier for this token to correlate with a status response uint8_t bCmdId; // top bit set for IN uint8_t bCmdSize; // bytes of actual data in the arg part of this structure uint16_t _unused; uint32_t dTransferLength; // length of IN/OUT transfer (or 0) if none union { uint8_t args[16]; struct picoboot_reboot_cmd reboot_cmd; struct picoboot_range_cmd range_cmd; struct picoboot_address_only_cmd address_only_cmd; struct picoboot_exclusive_cmd exclusive_cmd; }; }; static_assert(32 == sizeof(struct picoboot_cmd), "picoboot_cmd must be 32 bytes big"); struct __packed __aligned(4) picoboot_cmd_status { uint32_t dToken; uint32_t dStatusCode; uint8_t bCmdId; uint8_t bInProgress; uint8_t _pad[6]; }; static_assert(16 == sizeof(struct picoboot_cmd_status), "picoboot_cmd_status must be 16 bytes big"); #endif ================================================ FILE: pico-sdk/src/common/boot_uf2/CMakeLists.txt ================================================ add_library(boot_uf2_headers INTERFACE) target_include_directories(boot_uf2_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) ================================================ FILE: pico-sdk/src/common/boot_uf2/include/boot/uf2.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _BOOT_UF2_H #define _BOOT_UF2_H #include #include /** \file uf2.h * \defgroup boot_uf2 boot_uf2 * * Header file for the UF2 format supported by an RP2040 in BOOTSEL mode. */ #define UF2_MAGIC_START0 0x0A324655u #define UF2_MAGIC_START1 0x9E5D5157u #define UF2_MAGIC_END 0x0AB16F30u #define UF2_FLAG_NOT_MAIN_FLASH 0x00000001u #define UF2_FLAG_FILE_CONTAINER 0x00001000u #define UF2_FLAG_FAMILY_ID_PRESENT 0x00002000u #define UF2_FLAG_MD5_PRESENT 0x00004000u #define RP2040_FAMILY_ID 0xe48bff56 struct uf2_block { // 32 byte header uint32_t magic_start0; uint32_t magic_start1; uint32_t flags; uint32_t target_addr; uint32_t payload_size; uint32_t block_no; uint32_t num_blocks; uint32_t file_size; // or familyID; uint8_t data[476]; uint32_t magic_end; }; static_assert(sizeof(struct uf2_block) == 512, "uf2_block not sector sized"); #endif ================================================ FILE: pico-sdk/src/common/pico_base/CMakeLists.txt ================================================ if (NOT TARGET pico_base_headers) pico_add_library(pico_base NOFLAG) target_include_directories(pico_base_headers INTERFACE include ${CMAKE_BINARY_DIR}/generated/pico_base) # PICO_BUILD_DEFINE: PICO_BOARD, Name of board, type=string, default=CMake PICO_BOARD variable, group=pico_base target_compile_definitions(pico_base_headers INTERFACE PICO_BOARD="${PICO_BOARD}") target_link_libraries(pico_base_headers INTERFACE pico_platform_headers) list(APPEND PICO_SDK_POST_LIST_FILES ${CMAKE_CURRENT_LIST_DIR}/generate_config_header.cmake) pico_promote_common_scope_vars() endif() ================================================ FILE: pico-sdk/src/common/pico_base/generate_config_header.cmake ================================================ # build the auto gen config headers set(header_content "// AUTOGENERATED FROM PICO_CONFIG_HEADER_FILES and then PICO__CONFIG_HEADER_FILES\n// DO NOT EDIT!\n") string(TOUPPER ${PICO_PLATFORM} PICO_PLATFORM_UPPER) macro(add_header_content_from_var VAR) set(header_content "${header_content}\n\n// based on ${VAR}:\n") foreach(var IN LISTS ${VAR}) set(header_content "${header_content}\n#include \"${var}\"") endforeach() endmacro() # PICO_CMAKE_CONFIG: PICO_CONFIG_HEADER_FILES, List of extra header files to include from pico/config.h for all platforms, type=list, default="", group=pico_base add_header_content_from_var(PICO_CONFIG_HEADER_FILES) # PICO_CMAKE_CONFIG: PICO_RP2040_CONFIG_HEADER_FILES, List of extra header files to include from pico/config.h for rp2040 platform, type=list, default="", group=pico_base # PICO_CMAKE_CONFIG: PICO_HOST_CONFIG_HEADER_FILES, List of extra header files to include from pico/config.h for host platform, type=list, default="", group=pico_base add_header_content_from_var(PICO_${PICO_PLATFORM_UPPER}_CONFIG_HEADER_FILES) file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/generated/pico_base/pico/config_autogen.h CONTENT "${header_content}" ) configure_file( ${CMAKE_CURRENT_LIST_DIR}/include/pico/version.h.in ${CMAKE_BINARY_DIR}/generated/pico_base/pico/version.h) foreach(DIR IN LISTS PICO_INCLUDE_DIRS) target_include_directories(pico_base_headers INTERFACE ${DIR}) endforeach() ================================================ FILE: pico-sdk/src/common/pico_base/include/pico/assert.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_ASSERT_H #define _PICO_ASSERT_H #include #ifdef __cplusplus #include extern "C" { #else #include #endif // PICO_CONFIG: PARAM_ASSERTIONS_ENABLE_ALL, Global assert enable, type=bool, default=0, group=pico_base // PICO_CONFIG: PARAM_ASSERTIONS_DISABLE_ALL, Global assert disable, type=bool, default=0, group=pico_base #ifndef PARAM_ASSERTIONS_ENABLE_ALL #define PARAM_ASSERTIONS_ENABLE_ALL 0 #endif #ifndef PARAM_ASSERTIONS_DISABLE_ALL #define PARAM_ASSERTIONS_DISABLE_ALL 0 #endif #define PARAM_ASSERTIONS_ENABLED(x) ((PARAM_ASSERTIONS_ENABLED_ ## x || PARAM_ASSERTIONS_ENABLE_ALL) && !PARAM_ASSERTIONS_DISABLE_ALL) #define invalid_params_if(x, test) ({if (PARAM_ASSERTIONS_ENABLED(x)) assert(!(test));}) #define valid_params_if(x, test) ({if (PARAM_ASSERTIONS_ENABLED(x)) assert(test);}) #define hard_assert_if(x, test) ({if (PARAM_ASSERTIONS_ENABLED(x)) hard_assert(!(test));}) #ifdef NDEBUG extern void hard_assertion_failure(void); static inline void hard_assert(bool condition, ...) { if (!condition) hard_assertion_failure(); } #else #define hard_assert assert #endif #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_base/include/pico/config.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_CONFIG_H #define _PICO_CONFIG_H // ----------------------------------------------------- // NOTE: THIS HEADER IS ALSO INCLUDED BY ASSEMBLY CODE SO // SHOULD ONLY CONSIST OF PREPROCESSOR DIRECTIVES // OR USE #ifndef __ASSEMBLER__ guards // ------------- // PICO_CONFIG_HEADER_FILES and then PICO_SDK__CONFIG_INCLUDE_FILES // entries are dumped in order at build time into this generated header #include "pico/config_autogen.h" // PICO_CONFIG: PICO_CONFIG_RTOS_ADAPTER_HEADER, unquoted path to header include in the default pico/config.h for RTOS integration defines that must be included in all sources, group=pico_base #ifdef PICO_CONFIG_RTOS_ADAPTER_HEADER #include __PICO_XSTRING(PICO_CONFIG_RTOS_ADAPTER_HEADER) #endif #endif ================================================ FILE: pico-sdk/src/common/pico_base/include/pico/error.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_ERROR_H #define _PICO_ERROR_H #ifndef __ASSEMBLER__ /*! * \brief Common return codes from pico_sdk methods that return a status * \ingroup pico_base */ enum pico_error_codes { PICO_OK = 0, PICO_ERROR_NONE = 0, PICO_ERROR_TIMEOUT = -1, PICO_ERROR_GENERIC = -2, PICO_ERROR_NO_DATA = -3, PICO_ERROR_NOT_PERMITTED = -4, PICO_ERROR_INVALID_ARG = -5, PICO_ERROR_IO = -6, PICO_ERROR_BADAUTH = -7, PICO_ERROR_CONNECT_FAILED = -8, PICO_ERROR_INSUFFICIENT_RESOURCES = -9, }; #endif // !__ASSEMBLER__ #endif ================================================ FILE: pico-sdk/src/common/pico_base/include/pico/types.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_TYPES_H #define _PICO_TYPES_H #ifndef __ASSEMBLER__ #include "pico/assert.h" #include #include #include typedef unsigned int uint; /*! \typedef absolute_time_t \brief An opaque 64 bit timestamp in microseconds The type is used instead of a raw uint64_t to prevent accidentally passing relative times or times in the wrong time units where an absolute time is required. It is equivalent to uint64_t in release builds. \see to_us_since_boot() \see update_us_since_boot() \ingroup timestamp */ #ifdef NDEBUG typedef uint64_t absolute_time_t; #else typedef struct { uint64_t _private_us_since_boot; } absolute_time_t; #endif /*! fn to_us_since_boot * \brief convert an absolute_time_t into a number of microseconds since boot. * \param t the absolute time to convert * \return a number of microseconds since boot, equivalent to t * \ingroup timestamp */ static inline uint64_t to_us_since_boot(absolute_time_t t) { #ifdef NDEBUG return t; #else return t._private_us_since_boot; #endif } /*! fn update_us_since_boot * \brief update an absolute_time_t value to represent a given number of microseconds since boot * \param t the absolute time value to update * \param us_since_boot the number of microseconds since boot to represent. Note this should be representable * as a signed 64 bit integer * \ingroup timestamp */ static inline void update_us_since_boot(absolute_time_t *t, uint64_t us_since_boot) { #ifdef NDEBUG *t = us_since_boot; #else assert(us_since_boot <= INT64_MAX); t->_private_us_since_boot = us_since_boot; #endif } /*! fn from_us_since_boot * \brief convert a number of microseconds since boot to an absolute_time_t * \param us_since_boot number of microseconds since boot * \return an absolute time equivalent to us_since_boot * \ingroup timestamp */ static inline absolute_time_t from_us_since_boot(uint64_t us_since_boot) { absolute_time_t t; update_us_since_boot(&t, us_since_boot); return t; } #ifdef NDEBUG #define ABSOLUTE_TIME_INITIALIZED_VAR(name, value) name = value #else #define ABSOLUTE_TIME_INITIALIZED_VAR(name, value) name = {value} #endif /** \struct datetime_t * \ingroup util_datetime * \brief Structure containing date and time information * * When setting an RTC alarm, set a field to -1 tells * the RTC to not match on this field */ typedef struct { int16_t year; ///< 0..4095 int8_t month; ///< 1..12, 1 is January int8_t day; ///< 1..28,29,30,31 depending on month int8_t dotw; ///< 0..6, 0 is Sunday int8_t hour; ///< 0..23 int8_t min; ///< 0..59 int8_t sec; ///< 0..59 } datetime_t; #define bool_to_bit(x) ((uint)!!(x)) #endif #endif ================================================ FILE: pico-sdk/src/common/pico_base/include/pico/version.h.in ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // --------------------------------------- // THIS FILE IS AUTOGENERATED; DO NOT EDIT // --------------------------------------- #ifndef _PICO_VERSION_H #define _PICO_VERSION_H #define PICO_SDK_VERSION_MAJOR ${PICO_SDK_VERSION_MAJOR} #define PICO_SDK_VERSION_MINOR ${PICO_SDK_VERSION_MINOR} #define PICO_SDK_VERSION_REVISION ${PICO_SDK_VERSION_REVISION} #define PICO_SDK_VERSION_STRING "${PICO_SDK_VERSION_STRING}" #endif ================================================ FILE: pico-sdk/src/common/pico_base/include/pico.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_H #define _PICO_H /** \file pico.h * \defgroup pico_base pico_base * * Core types and macros for the Raspberry Pi Pico SDK. This header is intended to be included by all source code * as it includes configuration headers and overrides in the correct order * * This header may be included by assembly code */ // We may be included by assembly which cant include #define __PICO_STRING(x) #x #define __PICO_XSTRING(x) __PICO_STRING(x) #define __PICO_CONCAT1(x, y) x ## y #include "pico/types.h" #include "pico/version.h" // PICO_CONFIG: PICO_CONFIG_HEADER, unquoted path to header include in place of the default pico/config.h which may be desirable for build systems which can't easily generate the config_autogen header, group=pico_base #ifdef PICO_CONFIG_HEADER #include __PICO_XSTRING(PICO_CONFIG_HEADER) #else #include "pico/config.h" #endif #include "pico/platform.h" #include "pico/error.h" #endif ================================================ FILE: pico-sdk/src/common/pico_binary_info/CMakeLists.txt ================================================ add_library(pico_binary_info_headers INTERFACE) target_include_directories(pico_binary_info_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) if (COMMAND pico_add_platform_library) pico_add_platform_library(pico_binary_info) else() add_library(pico_binary_info INTERFACE) endif() target_link_libraries(pico_binary_info INTERFACE pico_binary_info_headers) function(pico_set_program_name TARGET name) # PICO_BUILD_DEFINE: PICO_PROGRAM_NAME, value passed to pico_set_program_name, type=string, default=none, group=pico_binary_info target_compile_definitions(${TARGET} PRIVATE -DPICO_PROGRAM_NAME="${name}") endfunction() function(pico_set_program_description TARGET description) # since this is the command line, we will remove newlines string(REPLACE "\n" " " description ${description}) string(REPLACE "\"" "\\\"" description ${description}) # PICO_BUILD_DEFINE: PICO_PROGRAM_DESCRIPTION, value passed to pico_set_program_description, type=string, default=none, group=pico_binary_info target_compile_definitions(${TARGET} PRIVATE -DPICO_PROGRAM_DESCRIPTION="${description}") endfunction() function(pico_set_program_url TARGET url) # PICO_BUILD_DEFINE: PICO_PROGRAM_URL, value passed to pico_set_program_url, type=string, default=none, group=pico_binary_info target_compile_definitions(${TARGET} PRIVATE -DPICO_PROGRAM_URL="${url}") endfunction() function(pico_set_program_version TARGET version) # PICO_BUILD_DEFINE: PICO_PROGRAM_VERSION_STRING, value passed to pico_set_program_version, type=string, default=none, group=pico_binary_info target_compile_definitions(${TARGET} PRIVATE -DPICO_PROGRAM_VERSION_STRING="${version}") endfunction() ================================================ FILE: pico-sdk/src/common/pico_binary_info/include/pico/binary_info/code.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_BINARY_INFO_CODE_H #define _PICO_BINARY_INFO_CODE_H // pico.h is not available when PICO_NO_BINARY_INFO=1 is used for builds outside of the SDK (e.g. picotool) // and only needed anyway (because of macro definitions) in PICO_NO_BINARY_INFO=0 builds #if !PICO_NO_BINARY_INFO #include "pico.h" #endif #include "pico/binary_info/structure.h" #if !PICO_NO_BINARY_INFO #define __bi_decl(name, bi, section_prefix, attr) static const attr __attribute__((section(section_prefix __STRING(name)))) struct _binary_info_core *const name = bi #define __bi_lineno_var_name __CONCAT(__bi_, __LINE__) #define __bi_ptr_lineno_var_name __CONCAT(__bi_ptr, __LINE__) #define __bi_enclosure_check_lineno_var_name __CONCAT(_error_bi_is_missing_enclosing_decl_,__LINE__) #define __bi_mark_enclosure static const __unused int __bi_enclosure_check_lineno_var_name=0; #if __cplusplus || __GNUC__ >= 8 #define __bi_enclosure_check(x) (x + __bi_enclosure_check_lineno_var_name) #else // skip the version check on older GCC non C++, as it doesn't compile.. this is only here to catch the // user accidentally forgetting to enclose the binary item with bi_decl #define __bi_enclosure_check(x) (x) #endif /** * Declare some binary information that will be included if the contain source file/line is compiled into the binary * \ingroup pico_binary_info */ #define bi_decl(_decl) __bi_mark_enclosure _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.keep.", __used); /** * Declare some binary information that will be included if the function containing the decl is linked into the binary. * The SDK uses --gc-sections, so functions that are never called will be removed by the linker, and any associated * binary information declared this way will also be stripped * \ingroup pico_binary_info */ #define bi_decl_if_func_used(_decl) ({__bi_mark_enclosure _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.", ); *(const volatile uint8_t *)&__bi_ptr_lineno_var_name;}); #define bi_decl_with_attr(_decl, _attr) __bi_mark_enclosure _attr _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.keep.", __used); #define bi_decl_if_func_used_with_attr(_decl, _attr) ({__bi_mark_enclosure _attr _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.", ); *(const volatile uint8_t *)&__bi_ptr_lineno_var_name;}); #else #define __bi_decl(bi, name, attr) #define bi_decl_with_attr(_decl, _attr) #define bi_decl(_decl) #define bi_decl_if_func_used_with_attr(_decl, _attr) ((void)0); #define bi_decl_if_func_used(_decl) ((void)0); #endif #define bi_int(_tag, _id, _value) \ static const struct _binary_info_id_and_int __bi_lineno_var_name = { \ .core = { \ .type = __bi_enclosure_check(BINARY_INFO_TYPE_ID_AND_INT), \ .tag = _tag, \ },\ .id = _id, \ .value = _value \ }; #define bi_string(_tag, _id, _value) \ static const struct _binary_info_id_and_string __bi_lineno_var_name = { \ .core = { \ .type = __bi_enclosure_check(BINARY_INFO_TYPE_ID_AND_STRING), \ .tag = _tag, \ },\ .id = _id, \ .value = _value, \ } #define bi_block_device(_tag, _name, _address, _size, _extra, _flags) \ static const struct _binary_info_block_device __bi_lineno_var_name = { \ .core = { \ .type = __bi_enclosure_check(BINARY_INFO_TYPE_BLOCK_DEVICE), \ .tag = _tag, \ },\ .name = _name, \ .address = _address, \ .size = _size, \ .extra = _extra, \ .flags = _flags, \ } #define __bi_encoded_pins_with_func(_encoding) \ static const struct _binary_info_pins_with_func __bi_lineno_var_name = { \ .core = { \ .type = __bi_enclosure_check(BINARY_INFO_TYPE_PINS_WITH_FUNC), \ .tag = BINARY_INFO_TAG_RASPBERRY_PI, \ },\ .pin_encoding = _encoding \ } #define __bi_pins_with_name(_mask, _label) \ static const struct _binary_info_pins_with_name __bi_lineno_var_name = { \ .core = { \ .type = __bi_enclosure_check(BINARY_INFO_TYPE_PINS_WITH_NAME), \ .tag = BINARY_INFO_TAG_RASPBERRY_PI, \ },\ .pin_mask = _mask, \ .label = _label \ } #define __bi_named_group(_parent_tag, _parent_id, _group_tag, _group_id, _label, _flags) \ static const struct _binary_info_named_group __bi_lineno_var_name = { \ .core = { \ .type = __bi_enclosure_check(BINARY_INFO_TYPE_NAMED_GROUP), \ .tag = _parent_tag, \ },\ .parent_id = _parent_id, \ .group_tag = _group_tag, \ .flags = _flags, \ .group_id = _group_id, \ .label = _label \ } #define bi_binary_end(end) bi_int(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_BINARY_END, end) #define bi_program_name(name) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_NAME, name) #define bi_program_description(description) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_DESCRIPTION, description) #define bi_program_version_string(version_string) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_VERSION_STRING, version_string) #define bi_program_build_date_string(date_string) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_BUILD_DATE_STRING, date_string) #define bi_program_url(url) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_URL, url) // multiple of these may be added #define bi_program_feature(feature) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_FEATURE, feature) #define bi_program_build_attribute(attr) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_BUILD_ATTRIBUTE, attr) #define bi_program_feature_group(tag, id, name) __bi_named_group(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_FEATURE, tag, id, name, 0) #define bi_program_feature_group_with_flags(tag, id, name, flags) __bi_named_group(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_FEATURE, tag, id, name, flags) #define bi_1pin_with_func(p0, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI | ((func << 3)) | ((p0) << 7) | ((p0) << 12)) #define bi_2pins_with_func(p0, p1, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI | ((func << 3)) | ((p0) << 7) | ((p1) << 12) | ((p1) << 17)) #define bi_3pins_with_func(p0, p1, p2, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI | ((func << 3)) | ((p0) << 7) | ((p1) << 12) | ((p2) << 17) | ((p2) << 22)) #define bi_4pins_with_func(p0, p1, p2, p3, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI | ((func << 3)) | ((p0) << 7) | ((p1) << 12) | ((p2) << 17) | ((p3) << 22) | ((p3) << 27)) #define bi_5pins_with_func(p0, p1, p2, p3, p4, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI | ((func << 3)) | ((p0) << 7) | ((p1) << 12) | ((p2) << 17) | ((p3) << 22) | ((p4) << 27)) #define bi_pin_range_with_func(plo, phi, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_RANGE | ((func << 3)) | ((plo) << 7) | ((phi) << 12)) #define bi_pin_mask_with_name(pmask, label) __bi_pins_with_name((pmask), (label)) // names are separated by | ... i.e. "name1|name2|name3" #define bi_pin_mask_with_names(pmask, label) __bi_pins_with_name((pmask), (label)) #define bi_1pin_with_name(p0, name) bi_pin_mask_with_name(1u << (p0), name) #define bi_2pins_with_names(p0, name0, p1, name1) bi_pin_mask_with_names((1u << (p0)) | (1u << (p1)), name0 "|" name1) #define bi_3pins_with_names(p0, name0, p1, name1, p2, name2) bi_pin_mask_with_names((1u << (p0)) | (1u << (p1)) | (1u << (p2)), name0 "|" name1 "|" name2) #define bi_4pins_with_names(p0, name0, p1, name1, p2, name2, p3, name3) bi_pin_mask_with_names((1u << (p0)) | (1u << (p1)) | (1u << (p2)) | (1u << (p3)), name0 "|" name1 "|" name2 "|" name3) #endif ================================================ FILE: pico-sdk/src/common/pico_binary_info/include/pico/binary_info/defs.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_BINARY_INFO_DEFS_H #define _PICO_BINARY_INFO_DEFS_H // this file is for pre-processor definitions only // should be found within the first 256 bytes of the real binary (i.e. after the flash second stage if a flash binary) // // Note the layout is: // // addr : BINARY_INFO_MARKER_START // addr+0x04 : __binary_info_start // addr+0x08 : __binary_info_end // addr+0x0c : __address_mapping_table // addr+0x10 | BINARY_INFO_MARKER_END // // __binary_info_start to __binary_info_end are the start, end (non inclusive) of an array // of pointers to binary_info_t structures // // __address_mapping_table is an array of the following items: // // uint32_t source_addr_start // uint32_t dest_addr_start // uint32_t dest_addr_end // // representing a mapping from the stored address in the binary/flash to addresses at runtime. // The linker will store pointers within the binary using their runtime values, however because of // "AT" mapping in the link script these addresses actually correspond to a different address in the binary // image. This mapping (which in the case of crt0.S is simply the data copy table used at initialization // to copy data into its runtime location) can be used by picotool or others to reverse the mapping to find data // within the binary. // // Note the above array is terminated with a NULL source_addr_start #define BINARY_INFO_MARKER_START 0x7188ebf2 #define BINARY_INFO_MARKER_END 0xe71aa390 #endif ================================================ FILE: pico-sdk/src/common/pico_binary_info/include/pico/binary_info/structure.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_BINARY_INFO_STRUCTURE_H #define _PICO_BINARY_INFO_STRUCTURE_H // NOTE: This file may be included by non SDK code, so does not use SDK includes // NOTE: ALL CHANGES MUST BE BACKWARDS COMPATIBLE #ifdef __cplusplus extern "C" { #endif #include #ifndef __packed #define __packed __attribute__((packed)) #endif typedef struct _binary_info_core binary_info_t; #define BINARY_INFO_TYPE_RAW_DATA 1 #define BINARY_INFO_TYPE_SIZED_DATA 2 #define BINARY_INFO_TYPE_BINARY_INFO_LIST_ZERO_TERMINATED 3 #define BINARY_INFO_TYPE_BSON 4 #define BINARY_INFO_TYPE_ID_AND_INT 5 #define BINARY_INFO_TYPE_ID_AND_STRING 6 // traditional block device #define BINARY_INFO_TYPE_BLOCK_DEVICE 7 #define BINARY_INFO_TYPE_PINS_WITH_FUNC 8 #define BINARY_INFO_TYPE_PINS_WITH_NAME 9 #define BINARY_INFO_TYPE_PINS_WITH_NAMES 9 #define BINARY_INFO_TYPE_NAMED_GROUP 10 // note plan is to reserve c1 = 0->31 for "collision tags"; i.e. // for which you should always use random IDs with the binary_info, // giving you 4 + 8 + 32 = 44 bits to avoid collisions #define BINARY_INFO_MAKE_TAG(c1, c2) ((((uint)c2&0xffu)<<8u)|((uint)c1&0xffu)) // Raspberry Pi defined. do not use #define BINARY_INFO_TAG_RASPBERRY_PI BINARY_INFO_MAKE_TAG('R','P') #define BINARY_INFO_ID_RP_PROGRAM_NAME 0x02031c86 #define BINARY_INFO_ID_RP_PROGRAM_VERSION_STRING 0x11a9bc3a #define BINARY_INFO_ID_RP_PROGRAM_BUILD_DATE_STRING 0x9da22254 #define BINARY_INFO_ID_RP_BINARY_END 0x68f465de #define BINARY_INFO_ID_RP_PROGRAM_URL 0x1856239a #define BINARY_INFO_ID_RP_PROGRAM_DESCRIPTION 0xb6a07c19 #define BINARY_INFO_ID_RP_PROGRAM_FEATURE 0xa1f4b453 #define BINARY_INFO_ID_RP_PROGRAM_BUILD_ATTRIBUTE 0x4275f0d3 #define BINARY_INFO_ID_RP_SDK_VERSION 0x5360b3ab #define BINARY_INFO_ID_RP_PICO_BOARD 0xb63cffbb #define BINARY_INFO_ID_RP_BOOT2_NAME 0x7f8882e1 #if PICO_ON_DEVICE #define bi_ptr_of(x) x * #else #define bi_ptr_of(x) uint32_t #endif typedef struct __packed _binary_info_core { uint16_t type; uint16_t tag; } binary_info_core_t; typedef struct __packed _binary_info_raw_data { struct _binary_info_core core; uint8_t bytes[1]; } binary_info_raw_data_t; typedef struct __packed _binary_info_sized_data { struct _binary_info_core core; uint32_t length; uint8_t bytes[1]; } binary_info_sized_data_t; typedef struct __packed _binary_info_list_zero_terminated { struct _binary_info_core core; bi_ptr_of(binary_info_t) list; } binary_info_list_zero_terminated_t; typedef struct __packed _binary_info_id_and_int { struct _binary_info_core core; uint32_t id; int32_t value; } binary_info_id_and_int_t; typedef struct __packed _binary_info_id_and_string { struct _binary_info_core core; uint32_t id; bi_ptr_of(const char) value; } binary_info_id_and_string_t; typedef struct __packed _binary_info_block_device { struct _binary_info_core core; bi_ptr_of(const char) name; // optional static name (independent of what is formatted) uint32_t address; uint32_t size; bi_ptr_of(binary_info_t) extra; // additional info uint16_t flags; } binary_info_block_device_t; #define BI_PINS_ENCODING_RANGE 1 #define BI_PINS_ENCODING_MULTI 2 typedef struct __packed _binary_info_pins_with_func { struct _binary_info_core core; // p4_5 : p3_5 : p2_5 : p1_5 : p0_5 : func_4 : 010_3 //individual pins p0,p1,p2,p3,p4 ... if fewer than 5 then duplicate p // phi_5 : plo_5 : func_4 : 001_3 // pin range plo-phi inclusive uint32_t pin_encoding; } binary_info_pins_with_func_t; typedef struct __packed _binary_info_pins_with_name { struct _binary_info_core core; uint32_t pin_mask; bi_ptr_of(const char) label; } binary_info_pins_with_name_t; #define BI_NAMED_GROUP_SHOW_IF_EMPTY 0x0001 // default is to hide #define BI_NAMED_GROUP_SEPARATE_COMMAS 0x0002 // default is newlines #define BI_NAMED_GROUP_SORT_ALPHA 0x0004 // default is no sort #define BI_NAMED_GROUP_ADVANCED 0x0008 // if set, then only shown in say info -a typedef struct __packed _binary_info_named_group { struct _binary_info_core core; uint32_t parent_id; uint16_t flags; uint16_t group_tag; uint32_t group_id; bi_ptr_of(const char) label; } binary_info_named_group_t; enum { BINARY_INFO_BLOCK_DEV_FLAG_READ = 1 << 0, // if not readable, then it is basically hidden, but tools may choose to avoid overwriting it BINARY_INFO_BLOCK_DEV_FLAG_WRITE = 1 << 1, BINARY_INFO_BLOCK_DEV_FLAG_REFORMAT = 1 << 2, // may be reformatted.. BINARY_INFO_BLOCK_DEV_FLAG_PT_UNKNOWN = 0 << 4, // unknown free to look BINARY_INFO_BLOCK_DEV_FLAG_PT_MBR = 1 << 4, // expect MBR BINARY_INFO_BLOCK_DEV_FLAG_PT_GPT = 2 << 4, // expect GPT BINARY_INFO_BLOCK_DEV_FLAG_PT_NONE = 3 << 4, // no partition table }; #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_binary_info/include/pico/binary_info.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_BINARY_INFO_H #define _PICO_BINARY_INFO_H /** \file binary_info.h * \defgroup pico_binary_info pico_binary_info * * Binary info is intended for embedding machine readable information with the binary in FLASH. * * Example uses include: * * - Program identification / information * - Pin layouts * - Included features * - Identifying flash regions used as block devices/storage */ #include "pico/binary_info/defs.h" #include "pico/binary_info/structure.h" #if !PICO_ON_DEVICE && !defined(PICO_NO_BINARY_INFO) #define PICO_NO_BINARY_INFO 1 #endif #include "pico/binary_info/code.h" #endif ================================================ FILE: pico-sdk/src/common/pico_bit_ops/CMakeLists.txt ================================================ if (NOT TARGET pico_bit_ops_headers) add_library(pico_bit_ops_headers INTERFACE) target_include_directories(pico_bit_ops_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_link_libraries(pico_bit_ops_headers INTERFACE pico_base_headers) endif() ================================================ FILE: pico-sdk/src/common/pico_bit_ops/include/pico/bit_ops.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_BIT_OPS_H #define _PICO_BIT_OPS_H #include "pico.h" #ifdef __cplusplus extern "C" { #endif /** \file bit_ops.h * \defgroup pico_bit_ops pico_bit_ops * * Optimized bit manipulation functions. * Additionally provides replacement implementations of the compiler built-ins __builtin_popcount, __builtin_clz * and __bulitin_ctz */ /*! \brief Reverse the bits in a 32 bit word * \ingroup pico_bit_ops * * \param bits 32 bit input * \return the 32 input bits reversed */ uint32_t __rev(uint32_t bits); /*! \brief Reverse the bits in a 64 bit double word * \ingroup pico_bit_ops * * \param bits 64 bit input * \return the 64 input bits reversed */ uint64_t __revll(uint64_t bits); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_divider/CMakeLists.txt ================================================ if (NOT TARGET pico_divider_headers) add_library(pico_divider_headers INTERFACE) target_include_directories(pico_divider_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_link_libraries(pico_divider_headers INTERFACE pico_base_headers) endif() ================================================ FILE: pico-sdk/src/common/pico_divider/include/pico/divider.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_DIVIDER_H #define _PICO_DIVIDER_H #include "pico.h" #include "hardware/divider.h" #ifdef __cplusplus extern "C" { #endif /** * \defgroup pico_divider pico_divider * Optimized 32 and 64 bit division functions accelerated by the RP2040 hardware divider. * Additionally provides integration with the C `/` and `%` operators */ /** \file pico/divider.h * \brief High level APIs including combined quotient and remainder functions for 32 and 64 bit accelerated by the hardware divider * \ingroup pico_divider * * These functions all call __aeabi_idiv0 or __aebi_ldiv0 on division by zero * passing the largest applicably signed value * * Functions with unsafe in their name do not save/restore divider state, so are unsafe to call from interrupts. Unsafe functions are slightly faster. */ /** * \brief Integer divide of two signed 32-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return quotient */ int32_t div_s32s32(int32_t a, int32_t b); /** * \brief Integer divide of two signed 32-bit values, with remainder * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \param [out] rem The remainder of dividend/divisor * \return Quotient result of dividend/divisor */ static inline int32_t divmod_s32s32_rem(int32_t a, int32_t b, int32_t *rem) { divmod_result_t r = hw_divider_divmod_s32(a, b); *rem = to_remainder_s32(r); return to_quotient_s32(r); } /** * \brief Integer divide of two signed 32-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return quotient in low word/r0, remainder in high word/r1 */ divmod_result_t divmod_s32s32(int32_t a, int32_t b); /** * \brief Integer divide of two unsigned 32-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return Quotient */ uint32_t div_u32u32(uint32_t a, uint32_t b); /** * \brief Integer divide of two unsigned 32-bit values, with remainder * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \param [out] rem The remainder of dividend/divisor * \return Quotient result of dividend/divisor */ static inline uint32_t divmod_u32u32_rem(uint32_t a, uint32_t b, uint32_t *rem) { divmod_result_t r = hw_divider_divmod_u32(a, b); *rem = to_remainder_u32(r); return to_quotient_u32(r); } /** * \brief Integer divide of two unsigned 32-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return quotient in low word/r0, remainder in high word/r1 */ divmod_result_t divmod_u32u32(uint32_t a, uint32_t b); /** * \brief Integer divide of two signed 64-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return Quotient */ int64_t div_s64s64(int64_t a, int64_t b); /** * \brief Integer divide of two signed 64-bit values, with remainder * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \param [out] rem The remainder of dividend/divisor * \return Quotient result of dividend/divisor */ int64_t divmod_s64s64_rem(int64_t a, int64_t b, int64_t *rem); /** * \brief Integer divide of two signed 64-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return quotient in result (r0,r1), remainder in regs (r2, r3) */ int64_t divmod_s64s64(int64_t a, int64_t b); /** * \brief Integer divide of two unsigned 64-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return Quotient */ uint64_t div_u64u64(uint64_t a, uint64_t b); /** * \brief Integer divide of two unsigned 64-bit values, with remainder * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \param [out] rem The remainder of dividend/divisor * \return Quotient result of dividend/divisor */ uint64_t divmod_u64u64_rem(uint64_t a, uint64_t b, uint64_t *rem); /** * \brief Integer divide of two signed 64-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return quotient in result (r0,r1), remainder in regs (r2, r3) */ uint64_t divmod_u64u64(uint64_t a, uint64_t b); // ----------------------------------------------------------------------- // these "unsafe" functions are slightly faster, but do not save the divider state, // so are not generally safe to be called from interrupts // ----------------------------------------------------------------------- /** * \brief Unsafe integer divide of two signed 32-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return quotient * * Do not use in interrupts */ int32_t div_s32s32_unsafe(int32_t a, int32_t b); /** * \brief Unsafe integer divide of two signed 32-bit values, with remainder * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \param [out] rem The remainder of dividend/divisor * \return Quotient result of dividend/divisor * * Do not use in interrupts */ int32_t divmod_s32s32_rem_unsafe(int32_t a, int32_t b, int32_t *rem); /** * \brief Unsafe integer divide of two unsigned 32-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return quotient in low word/r0, remainder in high word/r1 * * Do not use in interrupts */ int64_t divmod_s32s32_unsafe(int32_t a, int32_t b); /** * \brief Unsafe integer divide of two unsigned 32-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return Quotient * * Do not use in interrupts */ uint32_t div_u32u32_unsafe(uint32_t a, uint32_t b); /** * \brief Unsafe integer divide of two unsigned 32-bit values, with remainder * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \param [out] rem The remainder of dividend/divisor * \return Quotient result of dividend/divisor * * Do not use in interrupts */ uint32_t divmod_u32u32_rem_unsafe(uint32_t a, uint32_t b, uint32_t *rem); /** * \brief Unsafe integer divide of two unsigned 32-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return quotient in low word/r0, remainder in high word/r1 * * Do not use in interrupts */ uint64_t divmod_u32u32_unsafe(uint32_t a, uint32_t b); /** * \brief Unsafe integer divide of two signed 64-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return Quotient * * Do not use in interrupts */ int64_t div_s64s64_unsafe(int64_t a, int64_t b); /** * \brief Unsafe integer divide of two signed 64-bit values, with remainder * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \param [out] rem The remainder of dividend/divisor * \return Quotient result of dividend/divisor * * Do not use in interrupts */ int64_t divmod_s64s64_rem_unsafe(int64_t a, int64_t b, int64_t *rem); /** * \brief Unsafe integer divide of two signed 64-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return quotient in result (r0,r1), remainder in regs (r2, r3) * * Do not use in interrupts */ int64_t divmod_s64s64_unsafe(int64_t a, int64_t b); /** * \brief Unsafe integer divide of two unsigned 64-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return Quotient * * Do not use in interrupts */ uint64_t div_u64u64_unsafe(uint64_t a, uint64_t b); /** * \brief Unsafe integer divide of two unsigned 64-bit values, with remainder * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \param [out] rem The remainder of dividend/divisor * \return Quotient result of dividend/divisor * * Do not use in interrupts */ uint64_t divmod_u64u64_rem_unsafe(uint64_t a, uint64_t b, uint64_t *rem); /** * \brief Unsafe integer divide of two signed 64-bit values * \ingroup pico_divider * * \param a Dividend * \param b Divisor * \return quotient in result (r0,r1), remainder in regs (r2, r3) * * Do not use in interrupts */ uint64_t divmod_u64u64_unsafe(uint64_t a, uint64_t b); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_stdlib/CMakeLists.txt ================================================ if (NOT TARGET pico_stdlib_headers) add_library(pico_stdlib_headers INTERFACE) target_include_directories(pico_stdlib_headers INTERFACE include) # dependencies handled in implementation CMakeLists.txt endif() ================================================ FILE: pico-sdk/src/common/pico_stdlib/include/pico/stdlib.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_STDLIB_H #define _PICO_STDLIB_H #include "pico.h" #include "pico/stdio.h" #include "pico/time.h" #include "hardware/gpio.h" #include "hardware/uart.h" #ifdef __cplusplus extern "C" { #endif /** \file stdlib.h * \defgroup pico_stdlib pico_stdlib * * Aggregation of a core subset of Raspberry Pi Pico SDK libraries used by most executables along with some additional * utility methods. Including pico_stdlib gives you everything you need to get a basic program running * which prints to stdout or flashes a LED * * This library aggregates: * - @ref hardware_uart * - @ref hardware_gpio * - @ref pico_binary_info * - @ref pico_runtime * - @ref pico_platform * - @ref pico_printf * - @ref pico_stdio * - @ref pico_standard_link * - @ref pico_util * * There are some basic default values used by these functions that will default to * usable values, however, they can be customised in a board definition header via * config.h or similar */ // Note PICO_STDIO_UART, PICO_STDIO_USB, PICO_STDIO_SEMIHOSTING are set by the // respective INTERFACE libraries, so these defines are set if the library // is included for the target executable #if LIB_PICO_STDIO_UART #include "pico/stdio_uart.h" #endif #if LIB_PICO_STDIO_USB #include "pico/stdio_usb.h" #endif #if LIB_PICO_STDIO_SEMIHOSTING #include "pico/stdio_semihosting.h" #endif // PICO_CONFIG: PICO_DEFAULT_LED_PIN, Optionally define a pin that drives a regular LED on the board, group=pico_stdlib // PICO_CONFIG: PICO_DEFAULT_LED_PIN_INVERTED, 1 if LED is inverted or 0 if not, type=int, default=0, group=pico_stdlib #ifndef PICO_DEFAULT_LED_PIN_INVERTED #define PICO_DEFAULT_LED_PIN_INVERTED 0 #endif // PICO_CONFIG: PICO_DEFAULT_WS2812_PIN, Optionally define a pin that controls data to a WS2812 compatible LED on the board, group=pico_stdlib // PICO_CONFIG: PICO_DEFAULT_WS2812_POWER_PIN, Optionally define a pin that controls power to a WS2812 compatible LED on the board, group=pico_stdlib /*! \brief Set up the default UART and assign it to the default GPIOs * \ingroup pico_stdlib * * By default this will use UART 0, with TX to pin GPIO 0, * RX to pin GPIO 1, and the baudrate to 115200 * * Calling this method also initializes stdin/stdout over UART if the * @ref pico_stdio_uart library is linked. * * Defaults can be changed using configuration defines, * PICO_DEFAULT_UART_INSTANCE, * PICO_DEFAULT_UART_BAUD_RATE * PICO_DEFAULT_UART_TX_PIN * PICO_DEFAULT_UART_RX_PIN */ void setup_default_uart(void); /*! \brief Initialise the system clock to 48MHz * \ingroup pico_stdlib * * Set the system clock to 48MHz, and set the peripheral clock to match. */ void set_sys_clock_48mhz(void); /*! \brief Initialise the system clock * \ingroup pico_stdlib * * \param vco_freq The voltage controller oscillator frequency to be used by the SYS PLL * \param post_div1 The first post divider for the SYS PLL * \param post_div2 The second post divider for the SYS PLL. * * See the PLL documentation in the datasheet for details of driving the PLLs. */ void set_sys_clock_pll(uint32_t vco_freq, uint post_div1, uint post_div2); /*! \brief Check if a given system clock frequency is valid/attainable * \ingroup pico_stdlib * * \param freq_khz Requested frequency * \param vco_freq_out On success, the voltage controlled oscillator frequency to be used by the SYS PLL * \param post_div1_out On success, The first post divider for the SYS PLL * \param post_div2_out On success, The second post divider for the SYS PLL. * @return true if the frequency is possible and the output parameters have been written. */ bool check_sys_clock_khz(uint32_t freq_khz, uint *vco_freq_out, uint *post_div1_out, uint *post_div2_out); /*! \brief Attempt to set a system clock frequency in khz * \ingroup pico_stdlib * * Note that not all clock frequencies are possible; it is preferred that you * use src/rp2_common/hardware_clocks/scripts/vcocalc.py to calculate the parameters * for use with set_sys_clock_pll * * \param freq_khz Requested frequency * \param required if true then this function will assert if the frequency is not attainable. * \return true if the clock was configured */ static inline bool set_sys_clock_khz(uint32_t freq_khz, bool required) { uint vco, postdiv1, postdiv2; if (check_sys_clock_khz(freq_khz, &vco, &postdiv1, &postdiv2)) { set_sys_clock_pll(vco, postdiv1, postdiv2); return true; } else if (required) { panic("System clock of %u kHz cannot be exactly achieved", freq_khz); } return false; } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_sync/CMakeLists.txt ================================================ if (NOT TARGET pico_sync_headers) add_library(pico_sync_headers INTERFACE) target_link_libraries(pico_sync_headers INTERFACE hardware_sync_headers pico_time_headers) endif() if (NOT TARGET pico_sync) pico_add_impl_library(pico_sync) target_include_directories(pico_sync_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_mirrored_target_link_libraries(pico_sync INTERFACE pico_sync_sem pico_sync_mutex pico_sync_critical_section pico_time hardware_sync) endif() if (NOT TARGET pico_sync_core) pico_add_library(pico_sync_core NOFLAG) target_sources(pico_sync_core INTERFACE ${CMAKE_CURRENT_LIST_DIR}/lock_core.c ) endif() if (NOT TARGET pico_sync_sem) pico_add_library(pico_sync_sem) target_sources(pico_sync_sem INTERFACE ${CMAKE_CURRENT_LIST_DIR}/sem.c ) pico_mirrored_target_link_libraries(pico_sync_sem INTERFACE pico_sync_core) endif() if (NOT TARGET pico_sync_mutex) pico_add_library(pico_sync_mutex) target_sources(pico_sync_mutex INTERFACE ${CMAKE_CURRENT_LIST_DIR}/mutex.c ) pico_mirrored_target_link_libraries(pico_sync_mutex INTERFACE pico_sync_core) endif() if (NOT TARGET pico_sync_critical_section) pico_add_library(pico_sync_critical_section) target_sources(pico_sync_critical_section INTERFACE ${CMAKE_CURRENT_LIST_DIR}/critical_section.c ) pico_mirrored_target_link_libraries(pico_sync_critical_section INTERFACE pico_sync_core) endif() ================================================ FILE: pico-sdk/src/common/pico_sync/critical_section.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/critical_section.h" #if !PICO_NO_HARDWARE static_assert(sizeof(critical_section_t) == 8, ""); #endif void critical_section_init(critical_section_t *crit_sec) { critical_section_init_with_lock_num(crit_sec, (uint)spin_lock_claim_unused(true)); } void critical_section_init_with_lock_num(critical_section_t *crit_sec, uint lock_num) { crit_sec->spin_lock = spin_lock_instance(lock_num); __mem_fence_release(); } void critical_section_deinit(critical_section_t *crit_sec) { spin_lock_unclaim(spin_lock_get_num(crit_sec->spin_lock)); crit_sec->spin_lock = NULL; } ================================================ FILE: pico-sdk/src/common/pico_sync/include/pico/critical_section.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_CRITICAL_SECTION_H #define _PICO_CRITICAL_SECTION_H #include "pico/lock_core.h" #ifdef __cplusplus extern "C" { #endif /** \file critical_section.h * \defgroup critical_section critical_section * \ingroup pico_sync * \brief Critical Section API for short-lived mutual exclusion safe for IRQ and multi-core * * A critical section is non-reentrant, and provides mutual exclusion using a spin-lock to prevent access * from the other core, and from (higher priority) interrupts on the same core. It does the former * using a spin lock and the latter by disabling interrupts on the calling core. * * Because interrupts are disabled when a critical_section is owned, uses of the critical_section * should be as short as possible. */ typedef struct __packed_aligned critical_section { spin_lock_t *spin_lock; uint32_t save; } critical_section_t; /*! \brief Initialise a critical_section structure allowing the system to assign a spin lock number * \ingroup critical_section * * The critical section is initialized ready for use, and will use a (possibly shared) spin lock * number assigned by the system. Note that in general it is unlikely that you would be nesting * critical sections, however if you do so you *must* use \ref critical_section_init_with_lock_num * to ensure that the spin locks used are different. * * \param crit_sec Pointer to critical_section structure */ void critical_section_init(critical_section_t *crit_sec); /*! \brief Initialise a critical_section structure assigning a specific spin lock number * \ingroup critical_section * \param crit_sec Pointer to critical_section structure * \param lock_num the specific spin lock number to use */ void critical_section_init_with_lock_num(critical_section_t *crit_sec, uint lock_num); /*! \brief Enter a critical_section * \ingroup critical_section * * If the spin lock associated with this critical section is in use, then this * method will block until it is released. * * \param crit_sec Pointer to critical_section structure */ static inline void critical_section_enter_blocking(critical_section_t *crit_sec) { crit_sec->save = spin_lock_blocking(crit_sec->spin_lock); } /*! \brief Release a critical_section * \ingroup critical_section * * \param crit_sec Pointer to critical_section structure */ static inline void critical_section_exit(critical_section_t *crit_sec) { spin_unlock(crit_sec->spin_lock, crit_sec->save); } /*! \brief De-Initialise a critical_section created by the critical_section_init method * \ingroup critical_section * * This method is only used to free the associated spin lock allocated via * the critical_section_init method (it should not be used to de-initialize a spin lock * created via critical_section_init_with_lock_num). After this call, the critical section is invalid * * \param crit_sec Pointer to critical_section structure */ void critical_section_deinit(critical_section_t *crit_sec); /*! \brief Test whether a critical_section has been initialized * \ingroup mutex * * \param crit_sec Pointer to critical_section structure * \return true if the critical section is initialized, false otherwise */ static inline bool critical_section_is_initialized(critical_section_t *crit_sec) { return crit_sec->spin_lock != 0; } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_sync/include/pico/lock_core.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_LOCK_CORE_H #define _PICO_LOCK_CORE_H #include "pico.h" #include "pico/time.h" #include "hardware/sync.h" /** \file lock_core.h * \defgroup lock_core lock_core * \ingroup pico_sync * \brief base synchronization/lock primitive support * * Most of the pico_sync locking primitives contain a lock_core_t structure member. This currently just holds a spin * lock which is used only to protect the contents of the rest of the structure as part of implementing the synchronization * primitive. As such, the spin_lock member of lock core is never still held on return from any function for the primitive. * * \ref critical_section is an exceptional case in that it does not have a lock_core_t and simply wraps a spin lock, providing * methods to lock and unlock said spin lock. * * lock_core based structures work by locking the spin lock, checking state, and then deciding whether they additionally need to block * or notify when the spin lock is released. In the blocking case, they will wake up again in the future, and try the process again. * * By default the SDK just uses the processors' events via SEV and WEV for notification and blocking as these are sufficient for * cross core, and notification from interrupt handlers. However macros are defined in this file that abstract the wait * and notify mechanisms to allow the SDK locking functions to effectively be used within an RTOS or other environment. * * When implementing an RTOS, it is desirable for the SDK synchronization primitives that wait, to block the calling task (and immediately yield), * and those that notify, to wake a blocked task which isn't on processor. At least the wait macro implementation needs to be atomic with the protecting * spin_lock unlock from the callers point of view; i.e. the task should unlock the spin lock when it starts its wait. Such implementation is * up to the RTOS integration, however the macros are defined such that such operations are always combined into a single call * (so they can be perfomed atomically) even though the default implementation does not need this, as a WFE which starts * following the corresponding SEV is not missed. */ // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_LOCK_CORE, Enable/disable assertions in the lock core, type=bool, default=0, group=pico_sync #ifndef PARAM_ASSERTIONS_ENABLED_LOCK_CORE #define PARAM_ASSERTIONS_ENABLED_LOCK_CORE 0 #endif /** \file lock_core.h * \ingroup lock_core * * Base implementation for locking primitives protected by a spin lock. The spin lock is only used to protect * access to the remaining lock state (in primitives using lock_core); it is never left locked outside * of the function implementations */ struct lock_core { // spin lock protecting this lock's state spin_lock_t *spin_lock; // note any lock members in containing structures need not be volatile; // they are protected by memory/compiler barriers when gaining and release spin locks }; typedef struct lock_core lock_core_t; /*! \brief Initialise a lock structure * \ingroup lock_core * * Inititalize a lock structure, providing the spin lock number to use for protecting internal state. * * \param core Pointer to the lock_core to initialize * \param lock_num Spin lock number to use for the lock. As the spin lock is only used internally to the locking primitive * method implementations, this does not need to be globally unique, however could suffer contention */ void lock_init(lock_core_t *core, uint lock_num); #ifndef lock_owner_id_t /*! \brief type to use to store the 'owner' of a lock. * \ingroup lock_core * By default this is int8_t as it only needs to store the core number or -1, however it may be * overridden if a larger type is required (e.g. for an RTOS task id) */ #define lock_owner_id_t int8_t #endif #ifndef LOCK_INVALID_OWNER_ID /*! \brief marker value to use for a lock_owner_id_t which does not refer to any valid owner * \ingroup lock_core */ #define LOCK_INVALID_OWNER_ID ((lock_owner_id_t)-1) #endif #ifndef lock_get_caller_owner_id /*! \brief return the owner id for the caller * \ingroup lock_core * By default this returns the calling core number, but may be overridden (e.g. to return an RTOS task id) */ #define lock_get_caller_owner_id() ((lock_owner_id_t)get_core_num()) #ifndef lock_is_owner_id_valid #define lock_is_owner_id_valid(id) ((id)>=0) #endif #endif #ifndef lock_is_owner_id_valid #define lock_is_owner_id_valid(id) ((id) != LOCK_INVALID_OWNER_ID) #endif #ifndef lock_internal_spin_unlock_with_wait /*! \brief Atomically unlock the lock's spin lock, and wait for a notification. * \ingroup lock_core * * _Atomic_ here refers to the fact that it should not be possible for a concurrent lock_internal_spin_unlock_with_notify * to insert itself between the spin unlock and this wait in a way that the wait does not see the notification (i.e. causing * a missed notification). In other words this method should always wake up in response to a lock_internal_spin_unlock_with_notify * for the same lock, which completes after this call starts. * * In an ideal implementation, this method would return exactly after the corresponding lock_internal_spin_unlock_with_notify * has subsequently been called on the same lock instance, however this method is free to return at _any_ point before that; * this macro is _always_ used in a loop which locks the spin lock, checks the internal locking primitive state and then * waits again if the calling thread should not proceed. * * By default this macro simply unlocks the spin lock, and then performs a WFE, but may be overridden * (e.g. to actually block the RTOS task). * * \param lock the lock_core for the primitive which needs to block * \param save the uint32_t value that should be passed to spin_unlock when the spin lock is unlocked. (i.e. the `PRIMASK` * state when the spin lock was acquire */ #define lock_internal_spin_unlock_with_wait(lock, save) spin_unlock((lock)->spin_lock, save), __wfe() #endif #ifndef lock_internal_spin_unlock_with_notify /*! \brief Atomically unlock the lock's spin lock, and send a notification * \ingroup lock_core * * _Atomic_ here refers to the fact that it should not be possible for this notification to happen during a * lock_internal_spin_unlock_with_wait in a way that that wait does not see the notification (i.e. causing * a missed notification). In other words this method should always wake up any lock_internal_spin_unlock_with_wait * which started before this call completes. * * In an ideal implementation, this method would wake up only the corresponding lock_internal_spin_unlock_with_wait * that has been called on the same lock instance, however it is free to wake up any of them, as they will check * their condition and then re-wait if necessary/ * * By default this macro simply unlocks the spin lock, and then performs a SEV, but may be overridden * (e.g. to actually un-block RTOS task(s)). * * \param lock the lock_core for the primitive which needs to block * \param save the uint32_t value that should be passed to spin_unlock when the spin lock is unlocked. (i.e. the PRIMASK * state when the spin lock was acquire) */ #define lock_internal_spin_unlock_with_notify(lock, save) spin_unlock((lock)->spin_lock, save), __sev() #endif #ifndef lock_internal_spin_unlock_with_best_effort_wait_or_timeout /*! \brief Atomically unlock the lock's spin lock, and wait for a notification or a timeout * \ingroup lock_core * * _Atomic_ here refers to the fact that it should not be possible for a concurrent lock_internal_spin_unlock_with_notify * to insert itself between the spin unlock and this wait in a way that the wait does not see the notification (i.e. causing * a missed notification). In other words this method should always wake up in response to a lock_internal_spin_unlock_with_notify * for the same lock, which completes after this call starts. * * In an ideal implementation, this method would return exactly after the corresponding lock_internal_spin_unlock_with_notify * has subsequently been called on the same lock instance or the timeout has been reached, however this method is free to return * at _any_ point before that; this macro is _always_ used in a loop which locks the spin lock, checks the internal locking * primitive state and then waits again if the calling thread should not proceed. * * By default this simply unlocks the spin lock, and then calls \ref best_effort_wfe_or_timeout * but may be overridden (e.g. to actually block the RTOS task with a timeout). * * \param lock the lock_core for the primitive which needs to block * \param save the uint32_t value that should be passed to spin_unlock when the spin lock is unlocked. (i.e. the PRIMASK * state when the spin lock was acquire) * \param until the \ref absolute_time_t value * \return true if the timeout has been reached */ #define lock_internal_spin_unlock_with_best_effort_wait_or_timeout(lock, save, until) ({ \ spin_unlock((lock)->spin_lock, save); \ best_effort_wfe_or_timeout(until); \ }) #endif #ifndef sync_internal_yield_until_before /*! \brief yield to other processing until some time before the requested time * \ingroup lock_core * * This method is provided for cases where the caller has no useful work to do * until the specified time. * * By default this method does nothing, however it can be overridden (for example by an * RTOS which is able to block the current task until the scheduler tick before * the given time) * * \param until the \ref absolute_time_t value */ #define sync_internal_yield_until_before(until) ((void)0) #endif #endif ================================================ FILE: pico-sdk/src/common/pico_sync/include/pico/mutex.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_MUTEX_H #define _PICO_MUTEX_H #include "pico/lock_core.h" #ifdef __cplusplus extern "C" { #endif /** \file mutex.h * \defgroup mutex mutex * \ingroup pico_sync * \brief Mutex API for non IRQ mutual exclusion between cores * * Mutexes are application level locks usually used protecting data structures that might be used by * multiple threads of execution. Unlike critical sections, the mutex protected code is not necessarily * required/expected to complete quickly, as no other sytem wide locks are held on account of an acquired mutex. * * When acquired, the mutex has an owner (see \ref lock_get_caller_owner_id) which with the plain SDK is just * the acquiring core, but in an RTOS it could be a task, or an IRQ handler context. * * Two variants of mutex are provided; \ref mutex_t (and associated mutex_ functions) is a regular mutex that cannot * be acquired recursively by the same owner (a deadlock will occur if you try). \ref recursive_mutex_t * (and associated recursive_mutex_ functions) is a recursive mutex that can be recursively obtained by * the same caller, at the expense of some more overhead when acquiring and releasing. * * It is generally a bad idea to call blocking mutex_ or recursive_mutex_ functions from within an IRQ handler. * It is valid to call \ref mutex_try_enter or \ref recursive_mutex_try_enter from within an IRQ handler, if the operation * that would be conducted under lock can be skipped if the mutex is locked (at least by the same owner). * * NOTE: For backwards compatibility with version 1.2.0 of the SDK, if the define * PICO_MUTEX_ENABLE_SDK120_COMPATIBILITY is set to 1, then the the regular mutex_ functions * may also be used for recursive mutexes. This flag will be removed in a future version of the SDK. * * See \ref critical_section.h for protecting access between multiple cores AND IRQ handlers */ /*! \brief recursive mutex instance * \ingroup mutex */ typedef struct __packed_aligned { lock_core_t core; lock_owner_id_t owner; //! owner id LOCK_INVALID_OWNER_ID for unowned uint8_t enter_count; //! ownership count #if PICO_MUTEX_ENABLE_SDK120_COMPATIBILITY bool recursive; #endif } recursive_mutex_t; /*! \brief regular (non recursive) mutex instance * \ingroup mutex */ #if !PICO_MUTEX_ENABLE_SDK120_COMPATIBILITY typedef struct __packed_aligned mutex { lock_core_t core; lock_owner_id_t owner; //! owner id LOCK_INVALID_OWNER_ID for unowned } mutex_t; #else typedef recursive_mutex_t mutex_t; // they are one and the same when backwards compatible with SDK1.2.0 #endif /*! \brief Initialise a mutex structure * \ingroup mutex * * \param mtx Pointer to mutex structure */ void mutex_init(mutex_t *mtx); /*! \brief Initialise a recursive mutex structure * \ingroup mutex * * A recursive mutex may be entered in a nested fashion by the same owner * * \param mtx Pointer to recursive mutex structure */ void recursive_mutex_init(recursive_mutex_t *mtx); /*! \brief Take ownership of a mutex * \ingroup mutex * * This function will block until the caller can be granted ownership of the mutex. * On return the caller owns the mutex * * \param mtx Pointer to mutex structure */ void mutex_enter_blocking(mutex_t *mtx); /*! \brief Take ownership of a recursive mutex * \ingroup mutex * * This function will block until the caller can be granted ownership of the mutex. * On return the caller owns the mutex * * \param mtx Pointer to recursive mutex structure */ void recursive_mutex_enter_blocking(recursive_mutex_t *mtx); /*! \brief Attempt to take ownership of a mutex * \ingroup mutex * * If the mutex wasn't owned, this will claim the mutex for the caller and return true. * Otherwise (if the mutex was already owned) this will return false and the * caller will NOT own the mutex. * * \param mtx Pointer to mutex structure * \param owner_out If mutex was already owned, and this pointer is non-zero, it will be filled in with the owner id of the current owner of the mutex * \return true if mutex now owned, false otherwise */ bool mutex_try_enter(mutex_t *mtx, uint32_t *owner_out); /*! \brief Attempt to take ownership of a mutex until the specified time * \ingroup mutex * * If the mutex wasn't owned, this method will immediately claim the mutex for the caller and return true. * If the mutex is owned by the caller, this method will immediately return false, * If the mutex is owned by someone else, this method will try to claim it until the specified time, returning * true if it succeeds, or false on timeout * * \param mtx Pointer to mutex structure * \param until The time after which to return if the caller cannot be granted ownership of the mutex * \return true if mutex now owned, false otherwise */ bool mutex_try_enter_block_until(mutex_t *mtx, absolute_time_t until); /*! \brief Attempt to take ownership of a recursive mutex * \ingroup mutex * * If the mutex wasn't owned or was owned by the caller, this will claim the mutex and return true. * Otherwise (if the mutex was already owned by another owner) this will return false and the * caller will NOT own the mutex. * * \param mtx Pointer to recursive mutex structure * \param owner_out If mutex was already owned by another owner, and this pointer is non-zero, * it will be filled in with the owner id of the current owner of the mutex * \return true if the recursive mutex (now) owned, false otherwise */ bool recursive_mutex_try_enter(recursive_mutex_t *mtx, uint32_t *owner_out); /*! \brief Wait for mutex with timeout * \ingroup mutex * * Wait for up to the specific time to take ownership of the mutex. If the caller * can be granted ownership of the mutex before the timeout expires, then true will be returned * and the caller will own the mutex, otherwise false will be returned and the caller will NOT own the mutex. * * \param mtx Pointer to mutex structure * \param timeout_ms The timeout in milliseconds. * \return true if mutex now owned, false if timeout occurred before ownership could be granted */ bool mutex_enter_timeout_ms(mutex_t *mtx, uint32_t timeout_ms); /*! \brief Wait for recursive mutex with timeout * \ingroup mutex * * Wait for up to the specific time to take ownership of the recursive mutex. If the caller * already has ownership of the mutex or can be granted ownership of the mutex before the timeout expires, * then true will be returned and the caller will own the mutex, otherwise false will be returned and the caller * will NOT own the mutex. * * \param mtx Pointer to recursive mutex structure * \param timeout_ms The timeout in milliseconds. * \return true if the recursive mutex (now) owned, false if timeout occurred before ownership could be granted */ bool recursive_mutex_enter_timeout_ms(recursive_mutex_t *mtx, uint32_t timeout_ms); /*! \brief Wait for mutex with timeout * \ingroup mutex * * Wait for up to the specific time to take ownership of the mutex. If the caller * can be granted ownership of the mutex before the timeout expires, then true will be returned * and the caller will own the mutex, otherwise false will be returned and the caller * will NOT own the mutex. * * \param mtx Pointer to mutex structure * \param timeout_us The timeout in microseconds. * \return true if mutex now owned, false if timeout occurred before ownership could be granted */ bool mutex_enter_timeout_us(mutex_t *mtx, uint32_t timeout_us); /*! \brief Wait for recursive mutex with timeout * \ingroup mutex * * Wait for up to the specific time to take ownership of the recursive mutex. If the caller * already has ownership of the mutex or can be granted ownership of the mutex before the timeout expires, * then true will be returned and the caller will own the mutex, otherwise false will be returned and the caller * will NOT own the mutex. * * \param mtx Pointer to mutex structure * \param timeout_us The timeout in microseconds. * \return true if the recursive mutex (now) owned, false if timeout occurred before ownership could be granted */ bool recursive_mutex_enter_timeout_us(recursive_mutex_t *mtx, uint32_t timeout_us); /*! \brief Wait for mutex until a specific time * \ingroup mutex * * Wait until the specific time to take ownership of the mutex. If the caller * can be granted ownership of the mutex before the timeout expires, then true will be returned * and the caller will own the mutex, otherwise false will be returned and the caller * will NOT own the mutex. * * \param mtx Pointer to mutex structure * \param until The time after which to return if the caller cannot be granted ownership of the mutex * \return true if mutex now owned, false if timeout occurred before ownership could be granted */ bool mutex_enter_block_until(mutex_t *mtx, absolute_time_t until); /*! \brief Wait for mutex until a specific time * \ingroup mutex * * Wait until the specific time to take ownership of the mutex. If the caller * already has ownership of the mutex or can be granted ownership of the mutex before the timeout expires, * then true will be returned and the caller will own the mutex, otherwise false will be returned and the caller * will NOT own the mutex. * * \param mtx Pointer to recursive mutex structure * \param until The time after which to return if the caller cannot be granted ownership of the mutex * \return true if the recursive mutex (now) owned, false if timeout occurred before ownership could be granted */ bool recursive_mutex_enter_block_until(recursive_mutex_t *mtx, absolute_time_t until); /*! \brief Release ownership of a mutex * \ingroup mutex * * \param mtx Pointer to mutex structure */ void mutex_exit(mutex_t *mtx); /*! \brief Release ownership of a recursive mutex * \ingroup mutex * * \param mtx Pointer to recursive mutex structure */ void recursive_mutex_exit(recursive_mutex_t *mtx); /*! \brief Test for mutex initialized state * \ingroup mutex * * \param mtx Pointer to mutex structure * \return true if the mutex is initialized, false otherwise */ static inline bool mutex_is_initialized(mutex_t *mtx) { return mtx->core.spin_lock != 0; } /*! \brief Test for recursive mutex initialized state * \ingroup mutex * * \param mtx Pointer to recursive mutex structure * \return true if the recursive mutex is initialized, false otherwise */ static inline bool recursive_mutex_is_initialized(recursive_mutex_t *mtx) { return mtx->core.spin_lock != 0; } /*! \brief Helper macro for static definition of mutexes * \ingroup mutex * * A mutex defined as follows: * * ```c * auto_init_mutex(my_mutex); * ``` * * Is equivalent to doing * * ```c * static mutex_t my_mutex; * * void my_init_function() { * mutex_init(&my_mutex); * } * ``` * * But the initialization of the mutex is performed automatically during runtime initialization */ #define auto_init_mutex(name) static __attribute__((section(".mutex_array"))) mutex_t name /*! \brief Helper macro for static definition of recursive mutexes * \ingroup mutex * * A recursive mutex defined as follows: * * ```c * auto_init_recursive_mutex(my_recursive_mutex); * ``` * * Is equivalent to doing * * ```c * static recursive_mutex_t my_recursive_mutex; * * void my_init_function() { * recursive_mutex_init(&my_recursive_mutex); * } * ``` * * But the initialization of the mutex is performed automatically during runtime initialization */ #define auto_init_recursive_mutex(name) static __attribute__((section(".mutex_array"))) recursive_mutex_t name = { .core = { .spin_lock = (spin_lock_t *)1 /* marker for runtime_init */ }, .owner = 0, .enter_count = 0 } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_sync/include/pico/sem.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_SEM_H #define _PICO_SEM_H #include "pico/lock_core.h" /** \file sem.h * \defgroup sem sem * \ingroup pico_sync * \brief Semaphore API for restricting access to a resource * * A semaphore holds a number of available permits. `sem_acquire` methods will acquire a permit if available * (reducing the available count by 1) or block if the number of available permits is 0. * \ref sem_release() increases the number of available permits by one potentially unblocking a `sem_acquire` method. * * Note that \ref sem_release() may be called an arbitrary number of times, however the number of available * permits is capped to the max_permit value specified during semaphore initialization. * * Although these semaphore related functions can be used from IRQ handlers, it is obviously preferable to only * release semaphores from within an IRQ handler (i.e. avoid blocking) */ #ifdef __cplusplus extern "C" { #endif typedef struct __packed_aligned semaphore { struct lock_core core; int16_t permits; int16_t max_permits; } semaphore_t; /*! \brief Initialise a semaphore structure * \ingroup sem * * \param sem Pointer to semaphore structure * \param initial_permits How many permits are initially acquired * \param max_permits Total number of permits allowed for this semaphore */ void sem_init(semaphore_t *sem, int16_t initial_permits, int16_t max_permits); /*! \brief Return number of available permits on the semaphore * \ingroup sem * * \param sem Pointer to semaphore structure * \return The number of permits available on the semaphore. */ int sem_available(semaphore_t *sem); /*! \brief Release a permit on a semaphore * \ingroup sem * * Increases the number of permits by one (unless the number of permits is already at the maximum). * A blocked `sem_acquire` will be released if the number of permits is increased. * * \param sem Pointer to semaphore structure * \return true if the number of permits available was increased. */ bool sem_release(semaphore_t *sem); /*! \brief Reset semaphore to a specific number of available permits * \ingroup sem * * Reset value should be from 0 to the max_permits specified in the init function * * \param sem Pointer to semaphore structure * \param permits the new number of available permits */ void sem_reset(semaphore_t *sem, int16_t permits); /*! \brief Acquire a permit from the semaphore * \ingroup sem * * This function will block and wait if no permits are available. * * \param sem Pointer to semaphore structure */ void sem_acquire_blocking(semaphore_t *sem); /*! \brief Acquire a permit from a semaphore, with timeout * \ingroup sem * * This function will block and wait if no permits are available, until the * defined timeout has been reached. If the timeout is reached the function will * return false, otherwise it will return true. * * \param sem Pointer to semaphore structure * \param timeout_ms Time to wait to acquire the semaphore, in milliseconds. * \return false if timeout reached, true if permit was acquired. */ bool sem_acquire_timeout_ms(semaphore_t *sem, uint32_t timeout_ms); /*! \brief Acquire a permit from a semaphore, with timeout * \ingroup sem * * This function will block and wait if no permits are available, until the * defined timeout has been reached. If the timeout is reached the function will * return false, otherwise it will return true. * * \param sem Pointer to semaphore structure * \param timeout_us Time to wait to acquire the semaphore, in microseconds. * \return false if timeout reached, true if permit was acquired. */ bool sem_acquire_timeout_us(semaphore_t *sem, uint32_t timeout_us); /*! \brief Wait to acquire a permit from a semaphore until a specific time * \ingroup sem * * This function will block and wait if no permits are available, until the * specified timeout time. If the timeout is reached the function will * return false, otherwise it will return true. * * \param sem Pointer to semaphore structure * \param until The time after which to return if the sem is not available. * \return true if permit was acquired, false if the until time was reached before * acquiring. */ bool sem_acquire_block_until(semaphore_t *sem, absolute_time_t until); /*! \brief Attempt to acquire a permit from a semaphore without blocking * \ingroup sem * * This function will return false without blocking if no permits are * available, otherwise it will acquire a permit and return true. * * \param sem Pointer to semaphore structure * \return true if permit was acquired. */ bool sem_try_acquire(semaphore_t *sem); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_sync/include/pico/sync.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_SYNC_H #define _PICO_SYNC_H /** \file pico/sync.h * \defgroup pico_sync pico_sync * Synchronization primitives and mutual exclusion */ #include "pico/sem.h" #include "pico/mutex.h" #include "pico/critical_section.h" #endif ================================================ FILE: pico-sdk/src/common/pico_sync/lock_core.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/lock_core.h" void lock_init(lock_core_t *core, uint lock_num) { valid_params_if(LOCK_CORE, lock_num < NUM_SPIN_LOCKS); core->spin_lock = spin_lock_instance(lock_num); } ================================================ FILE: pico-sdk/src/common/pico_sync/mutex.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/mutex.h" #include "pico/time.h" void mutex_init(mutex_t *mtx) { lock_init(&mtx->core, next_striped_spin_lock_num()); mtx->owner = LOCK_INVALID_OWNER_ID; #if PICO_MUTEX_ENABLE_SDK120_COMPATIBILITY mtx->recursive = false; #endif __mem_fence_release(); } void recursive_mutex_init(recursive_mutex_t *mtx) { lock_init(&mtx->core, next_striped_spin_lock_num()); mtx->owner = LOCK_INVALID_OWNER_ID; mtx->enter_count = 0; #if PICO_MUTEX_ENABLE_SDK120_COMPATIBILITY mtx->recursive = true; #endif __mem_fence_release(); } void __time_critical_func(mutex_enter_blocking)(mutex_t *mtx) { #if PICO_MUTEX_ENABLE_SDK120_COMPATIBILITY if (mtx->recursive) { recursive_mutex_enter_blocking(mtx); return; } #endif lock_owner_id_t caller = lock_get_caller_owner_id(); do { uint32_t save = spin_lock_blocking(mtx->core.spin_lock); if (!lock_is_owner_id_valid(mtx->owner)) { mtx->owner = caller; spin_unlock(mtx->core.spin_lock, save); break; } lock_internal_spin_unlock_with_wait(&mtx->core, save); } while (true); } void __time_critical_func(recursive_mutex_enter_blocking)(recursive_mutex_t *mtx) { lock_owner_id_t caller = lock_get_caller_owner_id(); do { uint32_t save = spin_lock_blocking(mtx->core.spin_lock); if (mtx->owner == caller || !lock_is_owner_id_valid(mtx->owner)) { mtx->owner = caller; uint __unused total = ++mtx->enter_count; spin_unlock(mtx->core.spin_lock, save); assert(total); // check for overflow return; } else { lock_internal_spin_unlock_with_wait(&mtx->core, save); } } while (true); } bool __time_critical_func(mutex_try_enter)(mutex_t *mtx, uint32_t *owner_out) { #if PICO_MUTEX_ENABLE_SDK120_COMPATIBILITY if (mtx->recursive) { return recursive_mutex_try_enter(mtx, owner_out); } #endif bool entered; uint32_t save = spin_lock_blocking(mtx->core.spin_lock); if (!lock_is_owner_id_valid(mtx->owner)) { mtx->owner = lock_get_caller_owner_id(); entered = true; } else { if (owner_out) *owner_out = (uint32_t) mtx->owner; entered = false; } spin_unlock(mtx->core.spin_lock, save); return entered; } bool __time_critical_func(mutex_try_enter_block_until)(mutex_t *mtx, absolute_time_t until) { // not using lock_owner_id_t to avoid backwards incompatibility change to mutex_try_enter API static_assert(sizeof(lock_owner_id_t) <= 4, ""); uint32_t owner; if (!mutex_try_enter(mtx, &owner)) { if ((lock_owner_id_t)owner == lock_get_caller_owner_id()) return false; // deadlock, so we can never own it return mutex_enter_block_until(mtx, until); } return true; } bool __time_critical_func(recursive_mutex_try_enter)(recursive_mutex_t *mtx, uint32_t *owner_out) { bool entered; lock_owner_id_t caller = lock_get_caller_owner_id(); uint32_t save = spin_lock_blocking(mtx->core.spin_lock); if (!lock_is_owner_id_valid(mtx->owner) || mtx->owner == caller) { mtx->owner = caller; uint __unused total = ++mtx->enter_count; assert(total); // check for overflow entered = true; } else { if (owner_out) *owner_out = (uint32_t) mtx->owner; entered = false; } spin_unlock(mtx->core.spin_lock, save); return entered; } bool __time_critical_func(mutex_enter_timeout_ms)(mutex_t *mtx, uint32_t timeout_ms) { return mutex_enter_block_until(mtx, make_timeout_time_ms(timeout_ms)); } bool __time_critical_func(recursive_mutex_enter_timeout_ms)(recursive_mutex_t *mtx, uint32_t timeout_ms) { return recursive_mutex_enter_block_until(mtx, make_timeout_time_ms(timeout_ms)); } bool __time_critical_func(mutex_enter_timeout_us)(mutex_t *mtx, uint32_t timeout_us) { return mutex_enter_block_until(mtx, make_timeout_time_us(timeout_us)); } bool __time_critical_func(recursive_mutex_enter_timeout_us)(recursive_mutex_t *mtx, uint32_t timeout_us) { return recursive_mutex_enter_block_until(mtx, make_timeout_time_us(timeout_us)); } bool __time_critical_func(mutex_enter_block_until)(mutex_t *mtx, absolute_time_t until) { #if PICO_MUTEX_ENABLE_SDK120_COMPATIBILITY if (mtx->recursive) { return recursive_mutex_enter_block_until(mtx, until); } #endif assert(mtx->core.spin_lock); lock_owner_id_t caller = lock_get_caller_owner_id(); do { uint32_t save = spin_lock_blocking(mtx->core.spin_lock); if (!lock_is_owner_id_valid(mtx->owner)) { mtx->owner = caller; spin_unlock(mtx->core.spin_lock, save); return true; } else { if (lock_internal_spin_unlock_with_best_effort_wait_or_timeout(&mtx->core, save, until)) { // timed out return false; } // not timed out; spin lock already unlocked, so loop again } } while (true); } bool __time_critical_func(recursive_mutex_enter_block_until)(recursive_mutex_t *mtx, absolute_time_t until) { assert(mtx->core.spin_lock); lock_owner_id_t caller = lock_get_caller_owner_id(); do { uint32_t save = spin_lock_blocking(mtx->core.spin_lock); if (!lock_is_owner_id_valid(mtx->owner) || mtx->owner == caller) { mtx->owner = caller; uint __unused total = ++mtx->enter_count; spin_unlock(mtx->core.spin_lock, save); assert(total); // check for overflow return true; } else { if (lock_internal_spin_unlock_with_best_effort_wait_or_timeout(&mtx->core, save, until)) { // timed out return false; } // not timed out; spin lock already unlocked, so loop again } } while (true); } void __time_critical_func(mutex_exit)(mutex_t *mtx) { #if PICO_MUTEX_ENABLE_SDK120_COMPATIBILITY if (mtx->recursive) { recursive_mutex_exit(mtx); return; } #endif uint32_t save = spin_lock_blocking(mtx->core.spin_lock); assert(lock_is_owner_id_valid(mtx->owner)); mtx->owner = LOCK_INVALID_OWNER_ID; lock_internal_spin_unlock_with_notify(&mtx->core, save); } void __time_critical_func(recursive_mutex_exit)(recursive_mutex_t *mtx) { uint32_t save = spin_lock_blocking(mtx->core.spin_lock); assert(lock_is_owner_id_valid(mtx->owner)); assert(mtx->enter_count); if (!--mtx->enter_count) { mtx->owner = LOCK_INVALID_OWNER_ID; lock_internal_spin_unlock_with_notify(&mtx->core, save); } else { spin_unlock(mtx->core.spin_lock, save); } } ================================================ FILE: pico-sdk/src/common/pico_sync/sem.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/sem.h" #include "pico/time.h" void sem_init(semaphore_t *sem, int16_t initial_permits, int16_t max_permits) { lock_init(&sem->core, next_striped_spin_lock_num()); sem->permits = initial_permits; sem->max_permits = max_permits; __mem_fence_release(); } int __time_critical_func(sem_available)(semaphore_t *sem) { #ifdef __GNUC__ return *(volatile typeof(sem->permits) *) &sem->permits; #else static_assert(sizeof(sem->permits) == 2, ""); return *(volatile int16_t *) &sem->permits; #endif } void __time_critical_func(sem_acquire_blocking)(semaphore_t *sem) { do { uint32_t save = spin_lock_blocking(sem->core.spin_lock); if (sem->permits > 0) { sem->permits--; spin_unlock(sem->core.spin_lock, save); break; } lock_internal_spin_unlock_with_wait(&sem->core, save); } while (true); } bool __time_critical_func(sem_acquire_timeout_ms)(semaphore_t *sem, uint32_t timeout_ms) { return sem_acquire_block_until(sem, make_timeout_time_ms(timeout_ms)); } bool __time_critical_func(sem_acquire_timeout_us)(semaphore_t *sem, uint32_t timeout_us) { return sem_acquire_block_until(sem, make_timeout_time_us(timeout_us)); } bool __time_critical_func(sem_acquire_block_until)(semaphore_t *sem, absolute_time_t until) { do { uint32_t save = spin_lock_blocking(sem->core.spin_lock); if (sem->permits > 0) { sem->permits--; spin_unlock(sem->core.spin_lock, save); return true; } if (lock_internal_spin_unlock_with_best_effort_wait_or_timeout(&sem->core, save, until)) { return false; } } while (true); } bool __time_critical_func(sem_try_acquire)(semaphore_t *sem) { uint32_t save = spin_lock_blocking(sem->core.spin_lock); if (sem->permits > 0) { sem->permits--; spin_unlock(sem->core.spin_lock, save); return true; } spin_unlock(sem->core.spin_lock, save); return false; } // todo this should really have a blocking variant for when permits are maxed out bool __time_critical_func(sem_release)(semaphore_t *sem) { uint32_t save = spin_lock_blocking(sem->core.spin_lock); int32_t count = sem->permits; if (count < sem->max_permits) { sem->permits = (int16_t)(count + 1); lock_internal_spin_unlock_with_notify(&sem->core, save); return true; } else { spin_unlock(sem->core.spin_lock, save); return false; } } void __time_critical_func(sem_reset)(semaphore_t *sem, int16_t permits) { assert(permits >= 0 && permits <= sem->max_permits); uint32_t save = spin_lock_blocking(sem->core.spin_lock); if (permits > sem->permits) { sem->permits = permits; lock_internal_spin_unlock_with_notify(&sem->core, save); } else { sem->permits = permits; spin_unlock(sem->core.spin_lock, save); } } ================================================ FILE: pico-sdk/src/common/pico_time/CMakeLists.txt ================================================ if (NOT TARGET pico_time_headers) add_library(pico_time_headers INTERFACE) target_include_directories(pico_time_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_link_libraries(pico_time_headers INTERFACE hardware_timer_headers pico_sync_headers pico_util_headers) endif() if (NOT TARGET pico_time) pico_add_impl_library(pico_time) target_sources(pico_time INTERFACE ${CMAKE_CURRENT_LIST_DIR}/time.c ${CMAKE_CURRENT_LIST_DIR}/timeout_helper.c) target_link_libraries(pico_time INTERFACE hardware_timer pico_sync pico_util) endif() ================================================ FILE: pico-sdk/src/common/pico_time/include/pico/time.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_TIME_H #define _PICO_TIME_H #include "pico.h" #include "hardware/timer.h" #ifdef __cplusplus extern "C" { #endif /** \file time.h * \defgroup pico_time pico_time * * API for accurate timestamps, sleeping, and time based callbacks * * \note The functions defined here provide a much more powerful and user friendly wrapping around the * low level hardware timer functionality. For these functions (and any other SDK functionality * e.g. timeouts, that relies on them) to work correctly, the hardware timer should not be modified. i.e. it is expected * to be monotonically increasing once per microsecond. Fortunately there is no need to modify the hardware * timer as any functionality you can think of that isn't already covered here can easily be modelled * by adding or subtracting a constant value from the unmodified hardware timer. * * \sa \ref hardware_timer */ // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_TIME, Enable/disable assertions in the time module, type=bool, default=0, group=pico_time #ifndef PARAM_ASSERTIONS_ENABLED_TIME #define PARAM_ASSERTIONS_ENABLED_TIME 0 #endif // PICO_CONFIG: PICO_TIME_SLEEP_OVERHEAD_ADJUST_US, How many microseconds to wake up early (and then busy_wait) to account for timer overhead when sleeping in low power mode, type=int, default=6, group=pico_time #ifndef PICO_TIME_SLEEP_OVERHEAD_ADJUST_US #define PICO_TIME_SLEEP_OVERHEAD_ADJUST_US 6 #endif /*! * \defgroup timestamp timestamp * \ingroup pico_time * \brief Timestamp functions relating to points in time (including the current time) * * These are functions for dealing with timestamps (i.e. instants in time) represented by the type absolute_time_t. This opaque * type is provided to help prevent accidental mixing of timestamps and relative time values. */ /*! \brief Return a representation of the current time. * \ingroup timestamp * * Returns an opaque high fidelity representation of the current time sampled during the call. * * \return the absolute time (now) of the hardware timer * * \sa absolute_time_t * \sa sleep_until() * \sa time_us_64() */ static inline absolute_time_t get_absolute_time(void) { absolute_time_t t; update_us_since_boot(&t, time_us_64()); return t; } static inline uint32_t us_to_ms(uint64_t us) { if (us >> 32u) { return (uint32_t)(us / 1000u); } else { return ((uint32_t)us) / 1000u; } } /*! fn to_ms_since_boot * \ingroup timestamp * \brief Convert a timestamp into a number of milliseconds since boot. * \param t an absolute_time_t value to convert * \return the number of milliseconds since boot represented by t * \sa to_us_since_boot() */ static inline uint32_t to_ms_since_boot(absolute_time_t t) { uint64_t us = to_us_since_boot(t); return us_to_ms(us); } /*! \brief Return a timestamp value obtained by adding a number of microseconds to another timestamp * \ingroup timestamp * * \param t the base timestamp * \param us the number of microseconds to add * \return the timestamp representing the resulting time */ static inline absolute_time_t delayed_by_us(const absolute_time_t t, uint64_t us) { absolute_time_t t2; uint64_t base = to_us_since_boot(t); uint64_t delayed = base + us; if ((int64_t)delayed < 0) { // absolute_time_t (to allow for signed time deltas) is never greater than INT64_MAX which == at_the_end_of_time delayed = INT64_MAX; } update_us_since_boot(&t2, delayed); return t2; } /*! \brief Return a timestamp value obtained by adding a number of milliseconds to another timestamp * \ingroup timestamp * * \param t the base timestamp * \param ms the number of milliseconds to add * \return the timestamp representing the resulting time */ static inline absolute_time_t delayed_by_ms(const absolute_time_t t, uint32_t ms) { absolute_time_t t2; uint64_t base = to_us_since_boot(t); uint64_t delayed = base + ms * 1000ull; if ((int64_t)delayed < 0) { // absolute_time_t (to allow for signed time deltas) is never greater than INT64_MAX which == at_the_end_of_time delayed = INT64_MAX; } update_us_since_boot(&t2, delayed); return t2; } /*! \brief Convenience method to get the timestamp a number of microseconds from the current time * \ingroup timestamp * * \param us the number of microseconds to add to the current timestamp * \return the future timestamp */ static inline absolute_time_t make_timeout_time_us(uint64_t us) { return delayed_by_us(get_absolute_time(), us); } /*! \brief Convenience method to get the timestamp a number of milliseconds from the current time * \ingroup timestamp * * \param ms the number of milliseconds to add to the current timestamp * \return the future timestamp */ static inline absolute_time_t make_timeout_time_ms(uint32_t ms) { return delayed_by_ms(get_absolute_time(), ms); } /*! \brief Return the difference in microseconds between two timestamps * \ingroup timestamp * * \note be careful when diffing against large timestamps (e.g. \ref at_the_end_of_time) * as the signed integer may overflow. * * \param from the first timestamp * \param to the second timestamp * \return the number of microseconds between the two timestamps (positive if `to` is after `from` except * in case of overflow) */ static inline int64_t absolute_time_diff_us(absolute_time_t from, absolute_time_t to) { return (int64_t)(to_us_since_boot(to) - to_us_since_boot(from)); } /*! \brief Return the earlier of two timestamps * \ingroup timestamp * * \param a the first timestamp * \param b the second timestamp * \return the earlier of the two timestamps */ static inline absolute_time_t absolute_time_min(absolute_time_t a, absolute_time_t b) { return to_us_since_boot(a) < to_us_since_boot(b) ? a : b; } /*! \brief The timestamp representing the end of time; this is actually not the maximum possible * timestamp, but is set to 0x7fffffff_ffffffff microseconds to avoid sign overflows with time * arithmetic. This is almost 300,000 years, so should be sufficient. * \ingroup timestamp */ extern const absolute_time_t at_the_end_of_time; /*! \brief Determine if the given timestamp is "at_the_end_of_time" * \ingroup timestamp * \param t the timestamp * \return true if the timestamp is at_the_end_of_time * \sa at_the_end_of_time */ static inline bool is_at_the_end_of_time(absolute_time_t t) { return to_us_since_boot(t) == to_us_since_boot(at_the_end_of_time); } /*! \brief The timestamp representing a null timestamp * \ingroup timestamp */ extern const absolute_time_t nil_time; /*! \brief Determine if the given timestamp is nil * \ingroup timestamp * \param t the timestamp * \return true if the timestamp is nil * \sa nil_time */ static inline bool is_nil_time(absolute_time_t t) { return !to_us_since_boot(t); } /*! * \defgroup sleep sleep * \ingroup pico_time * \brief Sleep functions for delaying execution in a lower power state. * * These functions allow the calling core to sleep. This is a lower powered sleep; waking and re-checking time on every processor * event (WFE) * * \note These functions should not be called from an IRQ handler. * * \note Lower powered sleep requires use of the \link alarm_pool_get_default default alarm pool\endlink which may * be disabled by the PICO_TIME_DEFAULT_ALARM_POOL_DISABLED #define or currently full in which case these functions * become busy waits instead. * * \note Whilst \a sleep_ functions are preferable to \a busy_wait functions from a power perspective, the \a busy_wait equivalent function * may return slightly sooner after the target is reached. * * \sa busy_wait_until() \sa busy_wait_us() \sa busy_wait_us_32() */ /*! \brief Wait until after the given timestamp to return * \ingroup sleep * * \note This method attempts to perform a lower power (WFE) sleep * * \param target the time after which to return * \sa sleep_us() * \sa busy_wait_until() * */ void sleep_until(absolute_time_t target); /*! \brief Wait for the given number of microseconds before returning * \ingroup sleep * * \note This method attempts to perform a lower power (WFE) sleep * * \param us the number of microseconds to sleep * \sa busy_wait_us() */ void sleep_us(uint64_t us); /*! \brief Wait for the given number of milliseconds before returning * \ingroup sleep * * \note This method attempts to perform a lower power sleep (using WFE) as much as possible. * * \param ms the number of milliseconds to sleep */ void sleep_ms(uint32_t ms); /*! \brief Helper method for blocking on a timeout * \ingroup sleep * * This method will return in response to an event (as per __wfe) or * when the target time is reached, or at any point before. * * This method can be used to implement a lower power polling loop waiting on * some condition signalled by an event (__sev()). * * This is called \a best_effort because under certain circumstances (notably the default timer pool * being disabled or full) the best effort is simply to return immediately without a __wfe, thus turning the calling * code into a busy wait. * * Example usage: * ```c * bool my_function_with_timeout_us(uint64_t timeout_us) { * absolute_time_t timeout_time = make_timeout_time_us(timeout_us); * do { * // each time round the loop, we check to see if the condition * // we are waiting on has happened * if (my_check_done()) { * // do something * return true; * } * // will try to sleep until timeout or the next processor event * } while (!best_effort_wfe_or_timeout(timeout_time)); * return false; // timed out * } * ``` * * @param timeout_timestamp the timeout time * @return true if the target time is reached, false otherwise */ bool best_effort_wfe_or_timeout(absolute_time_t timeout_timestamp); /*! * \defgroup alarm alarm * \ingroup pico_time * \brief Alarm functions for scheduling future execution * * Alarms are added to alarm pools, which may hold a certain fixed number of active alarms. Each alarm pool * utilizes one of four underlying hardware alarms, thus you may have up to four alarm pools. An alarm pool * calls (except when the callback would happen before or during being set) the callback on the core from which * the alarm pool was created. Callbacks are called from the hardware alarm IRQ handler, so care must * be taken in their implementation. * * A default pool is created the core specified by PICO_TIME_DEFAULT_ALARM_POOL_HARDWARE_ALARM_NUM * on core 0, and may be used by the method variants that take no alarm pool parameter. * * \sa struct alarm_pool * \sa hardware_timer */ // PICO_CONFIG: PICO_TIME_DEFAULT_ALARM_POOL_DISABLED, Disable the default alarm pool, type=bool, default=0, advanced=true, group=pico_time #ifndef PICO_TIME_DEFAULT_ALARM_POOL_DISABLED /*! * \brief If 1 then the default alarm pool is disabled (so no hardware alarm is claimed for the pool) * * \note Setting to 1 may cause some code not to compile as default timer pool related methods are removed * * \note When the default alarm pool is disabled, \a sleep_ methods and timeouts are no longer lower powered * (they become \a busy_wait_) * * \ingroup alarm * \sa #PICO_TIME_DEFAULT_ALARM_POOL_HARDWARE_ALARM_NUM * \sa alarm_pool_get_default() */ #define PICO_TIME_DEFAULT_ALARM_POOL_DISABLED 0 #endif // PICO_CONFIG: PICO_TIME_DEFAULT_ALARM_POOL_HARDWARE_ALARM_NUM, Select which HW alarm is used for the default alarm pool, min=0, max=3, default=3, advanced=true, group=pico_time #ifndef PICO_TIME_DEFAULT_ALARM_POOL_HARDWARE_ALARM_NUM /*! * \brief Selects which hardware alarm is used for the default alarm pool * \ingroup alarm * \sa alarm_pool_get_default() */ #define PICO_TIME_DEFAULT_ALARM_POOL_HARDWARE_ALARM_NUM 3 #endif // PICO_CONFIG: PICO_TIME_DEFAULT_ALARM_POOL_MAX_TIMERS, Selects the maximum number of concurrent timers in the default alarm pool, min=0, max=255, default=16, advanced=true, group=pico_time #ifndef PICO_TIME_DEFAULT_ALARM_POOL_MAX_TIMERS /*! * \brief Selects the maximum number of concurrent timers in the default alarm pool * \ingroup alarm * * \note For implementation reasons this is limited to PICO_PHEAP_MAX_ENTRIES which defaults to 255 * \sa #PICO_TIME_DEFAULT_ALARM_POOL_HARDWARE_ALARM_NUM * \sa alarm_pool_get_default() */ #define PICO_TIME_DEFAULT_ALARM_POOL_MAX_TIMERS 16 #endif /** * \brief The identifier for an alarm * * \note this identifier is signed because -1 is used as an error condition when creating alarms * * \note alarm ids may be reused, however for convenience the implementation makes an attempt to defer * reusing as long as possible. You should certainly expect it to be hundreds of ids before one is * reused, although in most cases it is more. Nonetheless care must still be taken when cancelling * alarms or other functionality based on alarms when the alarm may have expired, as eventually * the alarm id may be reused for another alarm. * * \ingroup alarm */ typedef int32_t alarm_id_t; // note this is signed because we use -1 as a meaningful error value /** * \brief User alarm callback * \ingroup alarm * \param id the alarm_id as returned when the alarm was added * \param user_data the user data passed when the alarm was added * \return <0 to reschedule the same alarm this many us from the time the alarm was previously scheduled to fire * \return >0 to reschedule the same alarm this many us from the time this method returns * \return 0 to not reschedule the alarm */ typedef int64_t (*alarm_callback_t)(alarm_id_t id, void *user_data); typedef struct alarm_pool alarm_pool_t; /** * \brief Create the default alarm pool (if not already created or disabled) * \ingroup alarm */ void alarm_pool_init_default(void); #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED /*! * \brief The default alarm pool used when alarms are added without specifying an alarm pool, * and also used by the SDK to support lower power sleeps and timeouts. * * \ingroup alarm * \sa #PICO_TIME_DEFAULT_ALARM_POOL_HARDWARE_ALARM_NUM */ alarm_pool_t *alarm_pool_get_default(void); #endif /** * \brief Create an alarm pool * * The alarm pool will call callbacks from an alarm IRQ Handler on the core of this function is called from. * * In many situations there is never any need for anything other than the default alarm pool, however you * might want to create another if you want alarm callbacks on core 1 or require alarm pools of * different priority (IRQ priority based preemption of callbacks) * * \note This method will hard assert if the hardware alarm is already claimed. * * \ingroup alarm * \param hardware_alarm_num the hardware alarm to use to back this pool * \param max_timers the maximum number of timers * \note For implementation reasons this is limited to PICO_PHEAP_MAX_ENTRIES which defaults to 255 * \sa alarm_pool_get_default() * \sa hardware_claiming */ alarm_pool_t *alarm_pool_create(uint hardware_alarm_num, uint max_timers); /** * \brief Create an alarm pool, claiming an used hardware alarm to back it. * * The alarm pool will call callbacks from an alarm IRQ Handler on the core of this function is called from. * * In many situations there is never any need for anything other than the default alarm pool, however you * might want to create another if you want alarm callbacks on core 1 or require alarm pools of * different priority (IRQ priority based preemption of callbacks) * * \note This method will hard assert if the there is no free hardware to claim. * * \ingroup alarm * \param max_timers the maximum number of timers * \note For implementation reasons this is limited to PICO_PHEAP_MAX_ENTRIES which defaults to 255 * \sa alarm_pool_get_default() * \sa hardware_claiming */ alarm_pool_t *alarm_pool_create_with_unused_hardware_alarm(uint max_timers); /** * \brief Return the hardware alarm used by an alarm pool * \ingroup alarm * \param pool the pool * \return the hardware alarm used by the pool */ uint alarm_pool_hardware_alarm_num(alarm_pool_t *pool); /** * \brief Return the core number the alarm pool was initialized on (and hence callbacks are called on) * \ingroup alarm * \param pool the pool * \return the core used by the pool */ uint alarm_pool_core_num(alarm_pool_t *pool); /** * \brief Destroy the alarm pool, cancelling all alarms and freeing up the underlying hardware alarm * \ingroup alarm * \param pool the pool */ void alarm_pool_destroy(alarm_pool_t *pool); /*! * \brief Add an alarm callback to be called at a specific time * \ingroup alarm * * Generally the callback is called as soon as possible after the time specified from an IRQ handler * on the core the alarm pool was created on. If the callback is in the past or happens before * the alarm setup could be completed, then this method will optionally call the callback itself * and then return a return code to indicate that the target time has passed. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param pool the alarm pool to use for scheduling the callback (this determines which hardware alarm is used, and which core calls the callback) * @param time the timestamp when (after which) the callback should fire * @param callback the callback function * @param user_data user data to pass to the callback function * @param fire_if_past if true, and the alarm time falls before or during this call before the alarm can be set, * then the callback should be called during (by) this function instead * @return >0 the alarm id for an active (at the time of return) alarm * @return 0 if the alarm time passed before or during the call AND there is no active alarm to return the id of. * The latter can either happen because fire_if_past was false (i.e. no timer was ever created), * or if the callback was called during this method but the callback cancelled itself by returning 0 * @return -1 if there were no alarm slots available */ alarm_id_t alarm_pool_add_alarm_at(alarm_pool_t *pool, absolute_time_t time, alarm_callback_t callback, void *user_data, bool fire_if_past); /*! * \brief Add an alarm callback to be called at or after a specific time * \ingroup alarm * * The callback is called as soon as possible after the time specified from an IRQ handler * on the core the alarm pool was created on. Unlike \ref alarm_pool_add_alarm_at, this method * guarantees to call the callback from that core even if the time is during this method call or in the past. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param pool the alarm pool to use for scheduling the callback (this determines which hardware alarm is used, and which core calls the callback) * @param time the timestamp when (after which) the callback should fire * @param callback the callback function * @param user_data user data to pass to the callback function * @return >0 the alarm id for an active (at the time of return) alarm * @return -1 if there were no alarm slots available */ alarm_id_t alarm_pool_add_alarm_at_force_in_context(alarm_pool_t *pool, absolute_time_t time, alarm_callback_t callback, void *user_data); /*! * \brief Add an alarm callback to be called after a delay specified in microseconds * \ingroup alarm * * Generally the callback is called as soon as possible after the time specified from an IRQ handler * on the core the alarm pool was created on. If the callback is in the past or happens before * the alarm setup could be completed, then this method will optionally call the callback itself * and then return a return code to indicate that the target time has passed. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param pool the alarm pool to use for scheduling the callback (this determines which hardware alarm is used, and which core calls the callback) * @param us the delay (from now) in microseconds when (after which) the callback should fire * @param callback the callback function * @param user_data user data to pass to the callback function * @param fire_if_past if true, and the alarm time falls during this call before the alarm can be set, * then the callback should be called during (by) this function instead * @return >0 the alarm id * @return 0 if the alarm time passed before or during the call AND there is no active alarm to return the id of. * The latter can either happen because fire_if_past was false (i.e. no timer was ever created), * or if the callback was called during this method but the callback cancelled itself by returning 0 * @return -1 if there were no alarm slots available */ static inline alarm_id_t alarm_pool_add_alarm_in_us(alarm_pool_t *pool, uint64_t us, alarm_callback_t callback, void *user_data, bool fire_if_past) { return alarm_pool_add_alarm_at(pool, delayed_by_us(get_absolute_time(), us), callback, user_data, fire_if_past); } /*! * \brief Add an alarm callback to be called after a delay specified in milliseconds * \ingroup alarm * * Generally the callback is called as soon as possible after the time specified from an IRQ handler * on the core the alarm pool was created on. If the callback is in the past or happens before * the alarm setup could be completed, then this method will optionally call the callback itself * and then return a return code to indicate that the target time has passed. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param pool the alarm pool to use for scheduling the callback (this determines which hardware alarm is used, and which core calls the callback) * @param ms the delay (from now) in milliseconds when (after which) the callback should fire * @param callback the callback function * @param user_data user data to pass to the callback function * @param fire_if_past if true, and the alarm time falls before or during this call before the alarm can be set, * then the callback should be called during (by) this function instead * @return >0 the alarm id * @return 0 if the alarm time passed before or during the call AND there is no active alarm to return the id of. * The latter can either happen because fire_if_past was false (i.e. no timer was ever created), * or if the callback was called during this method but the callback cancelled itself by returning 0 * @return -1 if there were no alarm slots available */ static inline alarm_id_t alarm_pool_add_alarm_in_ms(alarm_pool_t *pool, uint32_t ms, alarm_callback_t callback, void *user_data, bool fire_if_past) { return alarm_pool_add_alarm_at(pool, delayed_by_ms(get_absolute_time(), ms), callback, user_data, fire_if_past); } /*! * \brief Cancel an alarm * \ingroup alarm * \param pool the alarm_pool containing the alarm * \param alarm_id the alarm * \return true if the alarm was cancelled, false if it didn't exist * \sa alarm_id_t for a note on reuse of IDs */ bool alarm_pool_cancel_alarm(alarm_pool_t *pool, alarm_id_t alarm_id); #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED /*! * \brief Add an alarm callback to be called at a specific time * \ingroup alarm * * Generally the callback is called as soon as possible after the time specified from an IRQ handler * on the core of the default alarm pool (generally core 0). If the callback is in the past or happens before * the alarm setup could be completed, then this method will optionally call the callback itself * and then return a return code to indicate that the target time has passed. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param time the timestamp when (after which) the callback should fire * @param callback the callback function * @param user_data user data to pass to the callback function * @param fire_if_past if true, and the alarm time falls before or during this call before the alarm can be set, * then the callback should be called during (by) this function instead * @return >0 the alarm id * @return 0 if the alarm time passed before or during the call AND there is no active alarm to return the id of. * The latter can either happen because fire_if_past was false (i.e. no timer was ever created), * or if the callback was called during this method but the callback cancelled itself by returning 0 * @return -1 if there were no alarm slots available */ static inline alarm_id_t add_alarm_at(absolute_time_t time, alarm_callback_t callback, void *user_data, bool fire_if_past) { return alarm_pool_add_alarm_at(alarm_pool_get_default(), time, callback, user_data, fire_if_past); } /*! * \brief Add an alarm callback to be called after a delay specified in microseconds * \ingroup alarm * * Generally the callback is called as soon as possible after the time specified from an IRQ handler * on the core of the default alarm pool (generally core 0). If the callback is in the past or happens before * the alarm setup could be completed, then this method will optionally call the callback itself * and then return a return code to indicate that the target time has passed. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param us the delay (from now) in microseconds when (after which) the callback should fire * @param callback the callback function * @param user_data user data to pass to the callback function * @param fire_if_past if true, and the alarm time falls during this call before the alarm can be set, * then the callback should be called during (by) this function instead * @return >0 the alarm id * @return 0 if the alarm time passed before or during the call AND there is no active alarm to return the id of. * The latter can either happen because fire_if_past was false (i.e. no timer was ever created), * or if the callback was called during this method but the callback cancelled itself by returning 0 * @return -1 if there were no alarm slots available */ static inline alarm_id_t add_alarm_in_us(uint64_t us, alarm_callback_t callback, void *user_data, bool fire_if_past) { return alarm_pool_add_alarm_in_us(alarm_pool_get_default(), us, callback, user_data, fire_if_past); } /*! * \brief Add an alarm callback to be called after a delay specified in milliseconds * \ingroup alarm * * Generally the callback is called as soon as possible after the time specified from an IRQ handler * on the core of the default alarm pool (generally core 0). If the callback is in the past or happens before * the alarm setup could be completed, then this method will optionally call the callback itself * and then return a return code to indicate that the target time has passed. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param ms the delay (from now) in milliseconds when (after which) the callback should fire * @param callback the callback function * @param user_data user data to pass to the callback function * @param fire_if_past if true, and the alarm time falls during this call before the alarm can be set, * then the callback should be called during (by) this function instead * @return >0 the alarm id * @return 0 if the alarm time passed before or during the call AND there is no active alarm to return the id of. * The latter can either happen because fire_if_past was false (i.e. no timer was ever created), * or if the callback was called during this method but the callback cancelled itself by returning 0 * @return -1 if there were no alarm slots available */ static inline alarm_id_t add_alarm_in_ms(uint32_t ms, alarm_callback_t callback, void *user_data, bool fire_if_past) { return alarm_pool_add_alarm_in_ms(alarm_pool_get_default(), ms, callback, user_data, fire_if_past); } /*! * \brief Cancel an alarm from the default alarm pool * \ingroup alarm * \param alarm_id the alarm * \return true if the alarm was cancelled, false if it didn't exist * \sa alarm_id_t for a note on reuse of IDs */ static inline bool cancel_alarm(alarm_id_t alarm_id) { return alarm_pool_cancel_alarm(alarm_pool_get_default(), alarm_id); } #endif /*! * \defgroup repeating_timer repeating_timer * \ingroup pico_time * \brief Repeating Timer functions for simple scheduling of repeated execution * * \note The regular \a alarm_ functionality can be used to make repeating alarms (by return non zero from the callback), * however these methods abstract that further (at the cost of a user structure to store the repeat delay in (which * the alarm framework does not have space for). */ typedef struct repeating_timer repeating_timer_t; /** * \brief Callback for a repeating timer * \ingroup repeating_timer * \param rt repeating time structure containing information about the repeating time. user_data is of primary important to the user * \return true to continue repeating, false to stop. */ typedef bool (*repeating_timer_callback_t)(repeating_timer_t *rt); /** * \brief Information about a repeating timer * \ingroup repeating_timer * \return */ struct repeating_timer { int64_t delay_us; alarm_pool_t *pool; alarm_id_t alarm_id; repeating_timer_callback_t callback; void *user_data; }; /*! * \brief Add a repeating timer that is called repeatedly at the specified interval in microseconds * \ingroup repeating_timer * * Generally the callback is called as soon as possible after the time specified from an IRQ handler * on the core the alarm pool was created on. If the callback is in the past or happens before * the alarm setup could be completed, then this method will optionally call the callback itself * and then return a return code to indicate that the target time has passed. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param pool the alarm pool to use for scheduling the repeating timer (this determines which hardware alarm is used, and which core calls the callback) * @param delay_us the repeat delay in microseconds; if >0 then this is the delay between one callback ending and the next starting; if <0 then this is the negative of the time between the starts of the callbacks. The value of 0 is treated as 1 * @param callback the repeating timer callback function * @param user_data user data to pass to store in the repeating_timer structure for use by the callback. * @param out the pointer to the user owned structure to store the repeating timer info in. BEWARE this storage location must outlive the repeating timer, so be careful of using stack space * @return false if there were no alarm slots available to create the timer, true otherwise. */ bool alarm_pool_add_repeating_timer_us(alarm_pool_t *pool, int64_t delay_us, repeating_timer_callback_t callback, void *user_data, repeating_timer_t *out); /*! * \brief Add a repeating timer that is called repeatedly at the specified interval in milliseconds * \ingroup repeating_timer * * Generally the callback is called as soon as possible after the time specified from an IRQ handler * on the core the alarm pool was created on. If the callback is in the past or happens before * the alarm setup could be completed, then this method will optionally call the callback itself * and then return a return code to indicate that the target time has passed. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param pool the alarm pool to use for scheduling the repeating timer (this determines which hardware alarm is used, and which core calls the callback) * @param delay_ms the repeat delay in milliseconds; if >0 then this is the delay between one callback ending and the next starting; if <0 then this is the negative of the time between the starts of the callbacks. The value of 0 is treated as 1 microsecond * @param callback the repeating timer callback function * @param user_data user data to pass to store in the repeating_timer structure for use by the callback. * @param out the pointer to the user owned structure to store the repeating timer info in. BEWARE this storage location must outlive the repeating timer, so be careful of using stack space * @return false if there were no alarm slots available to create the timer, true otherwise. */ static inline bool alarm_pool_add_repeating_timer_ms(alarm_pool_t *pool, int32_t delay_ms, repeating_timer_callback_t callback, void *user_data, repeating_timer_t *out) { return alarm_pool_add_repeating_timer_us(pool, delay_ms * (int64_t)1000, callback, user_data, out); } #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED /*! * \brief Add a repeating timer that is called repeatedly at the specified interval in microseconds * \ingroup repeating_timer * * Generally the callback is called as soon as possible after the time specified from an IRQ handler * on the core of the default alarm pool (generally core 0). If the callback is in the past or happens before * the alarm setup could be completed, then this method will optionally call the callback itself * and then return a return code to indicate that the target time has passed. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param delay_us the repeat delay in microseconds; if >0 then this is the delay between one callback ending and the next starting; if <0 then this is the negative of the time between the starts of the callbacks. The value of 0 is treated as 1 * @param callback the repeating timer callback function * @param user_data user data to pass to store in the repeating_timer structure for use by the callback. * @param out the pointer to the user owned structure to store the repeating timer info in. BEWARE this storage location must outlive the repeating timer, so be careful of using stack space * @return false if there were no alarm slots available to create the timer, true otherwise. */ static inline bool add_repeating_timer_us(int64_t delay_us, repeating_timer_callback_t callback, void *user_data, repeating_timer_t *out) { return alarm_pool_add_repeating_timer_us(alarm_pool_get_default(), delay_us, callback, user_data, out); } /*! * \brief Add a repeating timer that is called repeatedly at the specified interval in milliseconds * \ingroup repeating_timer * * Generally the callback is called as soon as possible after the time specified from an IRQ handler * on the core of the default alarm pool (generally core 0). If the callback is in the past or happens before * the alarm setup could be completed, then this method will optionally call the callback itself * and then return a return code to indicate that the target time has passed. * * \note It is safe to call this method from an IRQ handler (including alarm callbacks), and from either core. * * @param delay_ms the repeat delay in milliseconds; if >0 then this is the delay between one callback ending and the next starting; if <0 then this is the negative of the time between the starts of the callbacks. The value of 0 is treated as 1 microsecond * @param callback the repeating timer callback function * @param user_data user data to pass to store in the repeating_timer structure for use by the callback. * @param out the pointer to the user owned structure to store the repeating timer info in. BEWARE this storage location must outlive the repeating timer, so be careful of using stack space * @return false if there were no alarm slots available to create the timer, true otherwise. */ static inline bool add_repeating_timer_ms(int32_t delay_ms, repeating_timer_callback_t callback, void *user_data, repeating_timer_t *out) { return alarm_pool_add_repeating_timer_us(alarm_pool_get_default(), delay_ms * (int64_t)1000, callback, user_data, out); } #endif /** * \brief Cancel a repeating timer * \ingroup repeating_timer * \param timer the repeating timer to cancel * \return true if the repeating timer was cancelled, false if it didn't exist * \sa alarm_id_t for a note on reuse of IDs */ bool cancel_repeating_timer(repeating_timer_t *timer); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_time/include/pico/timeout_helper.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_TIMEOUT_HELPER_H #define _PICO_TIMEOUT_HELPER_H #include "pico/time.h" #ifdef __cplusplus extern "C" { #endif typedef struct timeout_state { absolute_time_t next_timeout; uint64_t param; } timeout_state_t; typedef bool (*check_timeout_fn)(timeout_state_t *ts); check_timeout_fn init_single_timeout_until(timeout_state_t *ts, absolute_time_t target); check_timeout_fn init_per_iteration_timeout_us(timeout_state_t *ts, uint64_t per_iteration_timeout_us); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_time/time.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include "pico.h" #include "pico/time.h" #include "pico/util/pheap.h" #include "pico/sync.h" const absolute_time_t ABSOLUTE_TIME_INITIALIZED_VAR(nil_time, 0); const absolute_time_t ABSOLUTE_TIME_INITIALIZED_VAR(at_the_end_of_time, INT64_MAX); typedef struct alarm_pool_entry { absolute_time_t target; alarm_callback_t callback; void *user_data; } alarm_pool_entry_t; struct alarm_pool { pheap_t *heap; spin_lock_t *lock; alarm_pool_entry_t *entries; // one byte per entry, used to provide more longevity to public IDs than heap node ids do // (this is increment every time the heap node id is re-used) uint8_t *entry_ids_high; alarm_id_t alarm_in_progress; // this is set during a callback from the IRQ handler... it can be cleared by alarm_cancel to prevent repeats uint8_t hardware_alarm_num; uint8_t core_num; }; #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED // To avoid bringing in calloc, we statically allocate the arrays and the heap PHEAP_DEFINE_STATIC(default_alarm_pool_heap, PICO_TIME_DEFAULT_ALARM_POOL_MAX_TIMERS); static alarm_pool_entry_t default_alarm_pool_entries[PICO_TIME_DEFAULT_ALARM_POOL_MAX_TIMERS]; static uint8_t default_alarm_pool_entry_ids_high[PICO_TIME_DEFAULT_ALARM_POOL_MAX_TIMERS]; static lock_core_t sleep_notifier; static alarm_pool_t default_alarm_pool = { .heap = &default_alarm_pool_heap, .entries = default_alarm_pool_entries, .entry_ids_high = default_alarm_pool_entry_ids_high, }; static inline bool default_alarm_pool_initialized(void) { return default_alarm_pool.lock != NULL; } #endif static alarm_pool_t *pools[NUM_TIMERS]; static void alarm_pool_post_alloc_init(alarm_pool_t *pool, uint hardware_alarm_num); static inline alarm_pool_entry_t *get_entry(alarm_pool_t *pool, pheap_node_id_t id) { assert(id && id <= pool->heap->max_nodes); return pool->entries + id - 1; } static inline uint8_t *get_entry_id_high(alarm_pool_t *pool, pheap_node_id_t id) { assert(id && id <= pool->heap->max_nodes); return pool->entry_ids_high + id - 1; } bool timer_pool_entry_comparator(void *user_data, pheap_node_id_t a, pheap_node_id_t b) { alarm_pool_t *pool = (alarm_pool_t *)user_data; return to_us_since_boot(get_entry(pool, a)->target) < to_us_since_boot(get_entry(pool, b)->target); } static inline alarm_id_t make_public_id(uint8_t id_high, pheap_node_id_t id) { return (alarm_id_t)(((uint)id_high << 8u * sizeof(id)) | id); } void alarm_pool_init_default() { #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED // allow multiple calls for ease of use from host tests if (!default_alarm_pool_initialized()) { ph_post_alloc_init(default_alarm_pool.heap, PICO_TIME_DEFAULT_ALARM_POOL_MAX_TIMERS, timer_pool_entry_comparator, &default_alarm_pool); hardware_alarm_claim(PICO_TIME_DEFAULT_ALARM_POOL_HARDWARE_ALARM_NUM); alarm_pool_post_alloc_init(&default_alarm_pool, PICO_TIME_DEFAULT_ALARM_POOL_HARDWARE_ALARM_NUM); } lock_init(&sleep_notifier, PICO_SPINLOCK_ID_TIMER); #endif } #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED alarm_pool_t *alarm_pool_get_default() { assert(default_alarm_pool_initialized()); return &default_alarm_pool; } #endif static pheap_node_id_t add_alarm_under_lock(alarm_pool_t *pool, absolute_time_t time, alarm_callback_t callback, void *user_data, pheap_node_id_t reuse_id, bool create_if_past, bool *missed) { pheap_node_id_t id; if (reuse_id) { assert(!ph_contains_node(pool->heap, reuse_id)); id = reuse_id; } else { id = ph_new_node(pool->heap); } if (id) { alarm_pool_entry_t *entry = get_entry(pool, id); entry->target = time; entry->callback = callback; entry->user_data = user_data; if (id == ph_insert_node(pool->heap, id)) { bool is_missed = hardware_alarm_set_target(pool->hardware_alarm_num, time); if (is_missed && !create_if_past) { ph_remove_and_free_node(pool->heap, id); } if (missed) *missed = is_missed; } } return id; } static void alarm_pool_alarm_callback(uint alarm_num) { // note this is called from timer IRQ handler alarm_pool_t *pool = pools[alarm_num]; bool again; do { absolute_time_t now = get_absolute_time(); alarm_callback_t callback = NULL; absolute_time_t target = nil_time; void *user_data = NULL; uint8_t id_high; again = false; uint32_t save = spin_lock_blocking(pool->lock); pheap_node_id_t next_id = ph_peek_head(pool->heap); if (next_id) { alarm_pool_entry_t *entry = get_entry(pool, next_id); if (absolute_time_diff_us(now, entry->target) <= 0) { // we don't free the id in case we need to re-add the timer pheap_node_id_t __unused removed_id = ph_remove_head(pool->heap, false); assert(removed_id == next_id); // will be true under lock target = entry->target; callback = entry->callback; user_data = entry->user_data; assert(callback); id_high = *get_entry_id_high(pool, next_id); pool->alarm_in_progress = make_public_id(id_high, removed_id); } else { if (hardware_alarm_set_target(alarm_num, entry->target)) { again = true; } } } spin_unlock(pool->lock, save); if (callback) { int64_t repeat = callback(make_public_id(id_high, next_id), user_data); save = spin_lock_blocking(pool->lock); // todo think more about whether we want to keep calling if (repeat < 0 && pool->alarm_in_progress) { assert(pool->alarm_in_progress == make_public_id(id_high, next_id)); add_alarm_under_lock(pool, delayed_by_us(target, (uint64_t)-repeat), callback, user_data, next_id, true, NULL); } else if (repeat > 0 && pool->alarm_in_progress) { assert(pool->alarm_in_progress == make_public_id(id_high, next_id)); add_alarm_under_lock(pool, delayed_by_us(get_absolute_time(), (uint64_t)repeat), callback, user_data, next_id, true, NULL); } else { // need to return the id to the heap ph_free_node(pool->heap, next_id); (*get_entry_id_high(pool, next_id))++; // we bump it for next use of id } pool->alarm_in_progress = 0; spin_unlock(pool->lock, save); again = true; } } while (again); } // note the timer is create with IRQs on this core alarm_pool_t *alarm_pool_create(uint hardware_alarm_num, uint max_timers) { alarm_pool_t *pool = (alarm_pool_t *) malloc(sizeof(alarm_pool_t)); pool->heap = ph_create(max_timers, timer_pool_entry_comparator, pool); pool->entries = (alarm_pool_entry_t *)calloc(max_timers, sizeof(alarm_pool_entry_t)); pool->entry_ids_high = (uint8_t *)calloc(max_timers, sizeof(uint8_t)); hardware_alarm_claim(hardware_alarm_num); alarm_pool_post_alloc_init(pool, hardware_alarm_num); return pool; } alarm_pool_t *alarm_pool_create_with_unused_hardware_alarm(uint max_timers) { alarm_pool_t *pool = (alarm_pool_t *) malloc(sizeof(alarm_pool_t)); pool->heap = ph_create(max_timers, timer_pool_entry_comparator, pool); pool->entries = (alarm_pool_entry_t *)calloc(max_timers, sizeof(alarm_pool_entry_t)); pool->entry_ids_high = (uint8_t *)calloc(max_timers, sizeof(uint8_t)); alarm_pool_post_alloc_init(pool, (uint)hardware_alarm_claim_unused(true)); return pool; } void alarm_pool_post_alloc_init(alarm_pool_t *pool, uint hardware_alarm_num) { hardware_alarm_cancel(hardware_alarm_num); hardware_alarm_set_callback(hardware_alarm_num, alarm_pool_alarm_callback); pool->lock = spin_lock_instance(next_striped_spin_lock_num()); pool->hardware_alarm_num = (uint8_t) hardware_alarm_num; pool->core_num = (uint8_t) get_core_num(); pools[hardware_alarm_num] = pool; } void alarm_pool_destroy(alarm_pool_t *pool) { #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED if (pool == &default_alarm_pool) { assert(false); // attempt to delete default alarm pool return; } #endif assert(pools[pool->hardware_alarm_num] == pool); pools[pool->hardware_alarm_num] = NULL; // todo clear out timers ph_destroy(pool->heap); hardware_alarm_set_callback(pool->hardware_alarm_num, NULL); hardware_alarm_unclaim(pool->hardware_alarm_num); free(pool->entry_ids_high); free(pool->entries); free(pool); } alarm_id_t alarm_pool_add_alarm_at(alarm_pool_t *pool, absolute_time_t time, alarm_callback_t callback, void *user_data, bool fire_if_past) { bool missed = false; alarm_id_t public_id; do { uint8_t id_high = 0; uint32_t save = spin_lock_blocking(pool->lock); pheap_node_id_t id = add_alarm_under_lock(pool, time, callback, user_data, 0, false, &missed); if (id) id_high = *get_entry_id_high(pool, id); spin_unlock(pool->lock, save); if (!id) { // no space in pheap to allocate an alarm return -1; } // note that if missed was true, then the id was never added to the pheap (because we // passed false for create_if_past arg above) public_id = missed ? 0 : make_public_id(id_high, id); if (missed && fire_if_past) { // ... so if fire_if_past == true we call the callback int64_t repeat = callback(public_id, user_data); // if not repeated we have no id to return so set public_id to 0, // otherwise we need to repeat, but will assign a new id next time // todo arguably this does mean that the id passed to the first callback may differ from subsequent calls if (!repeat) { public_id = 0; break; } else if (repeat < 0) { time = delayed_by_us(time, (uint64_t)-repeat); } else { time = delayed_by_us(get_absolute_time(), (uint64_t)repeat); } } else { // either: // a) missed == false && public_id is > 0 // b) missed == true && fire_if_past == false && public_id = 0 // but we are done in either case break; } } while (true); return public_id; } alarm_id_t alarm_pool_add_alarm_at_force_in_context(alarm_pool_t *pool, absolute_time_t time, alarm_callback_t callback, void *user_data) { bool missed = false; uint8_t id_high = 0; uint32_t save = spin_lock_blocking(pool->lock); pheap_node_id_t id = add_alarm_under_lock(pool, time, callback, user_data, 0, true, &missed); if (id) id_high = *get_entry_id_high(pool, id); spin_unlock(pool->lock, save); if (!id) return -1; if (missed) { // we want to fire the timer forcibly because it is in the past. Note that we do // not care about racing with other timers, as it is harmless to have the IRQ // wake up one time too many, we just need to make sure it does wake up hardware_alarm_force_irq(pool->hardware_alarm_num); } return make_public_id(id_high, id); } bool alarm_pool_cancel_alarm(alarm_pool_t *pool, alarm_id_t alarm_id) { if (!alarm_id) return false; bool rc = false; uint32_t save = spin_lock_blocking(pool->lock); pheap_node_id_t id = (pheap_node_id_t) alarm_id; if (ph_contains_node(pool->heap, id)) { assert(alarm_id != pool->alarm_in_progress); // it shouldn't be in the heap if it is in progress // check we have the right high value uint8_t id_high = (uint8_t)((uint)alarm_id >> 8u * sizeof(pheap_node_id_t)); if (id_high == *get_entry_id_high(pool, id)) { rc = ph_remove_and_free_node(pool->heap, id); // note we don't bother to remove the actual hardware alarm timeout... // it will either do callbacks or not depending on other alarms, and reset the next timeout itself assert(rc); } } else { if (alarm_id == pool->alarm_in_progress) { // make sure the alarm doesn't repeat pool->alarm_in_progress = 0; } } spin_unlock(pool->lock, save); return rc; } uint alarm_pool_hardware_alarm_num(alarm_pool_t *pool) { return pool->hardware_alarm_num; } uint alarm_pool_core_num(alarm_pool_t *pool) { return pool->core_num; } static void alarm_pool_dump_key(pheap_node_id_t id, void *user_data) { alarm_pool_t *pool = (alarm_pool_t *)user_data; #if PICO_ON_DEVICE printf("%lld (hi %02x)", to_us_since_boot(get_entry(pool, id)->target), *get_entry_id_high(pool, id)); #else printf("%"PRIu64, to_us_since_boot(get_entry(pool, id)->target)); #endif } static int64_t repeating_timer_callback(__unused alarm_id_t id, void *user_data) { repeating_timer_t *rt = (repeating_timer_t *)user_data; assert(rt->alarm_id == id); if (rt->callback(rt)) { return rt->delay_us; } else { rt->alarm_id = 0; return 0; } } bool alarm_pool_add_repeating_timer_us(alarm_pool_t *pool, int64_t delay_us, repeating_timer_callback_t callback, void *user_data, repeating_timer_t *out) { if (!delay_us) delay_us = 1; out->pool = pool; out->callback = callback; out->delay_us = delay_us; out->user_data = user_data; out->alarm_id = alarm_pool_add_alarm_at(pool, make_timeout_time_us((uint64_t)(delay_us >= 0 ? delay_us : -delay_us)), repeating_timer_callback, out, true); // note that if out->alarm_id is 0, then the callback was called during the above call (fire_if_past == true) // and then the callback removed itself. return out->alarm_id >= 0; } bool cancel_repeating_timer(repeating_timer_t *timer) { bool rc = false; if (timer->alarm_id) { rc = alarm_pool_cancel_alarm(timer->pool, timer->alarm_id); timer->alarm_id = 0; } return rc; } void alarm_pool_dump(alarm_pool_t *pool) { uint32_t save = spin_lock_blocking(pool->lock); ph_dump(pool->heap, alarm_pool_dump_key, pool); spin_unlock(pool->lock, save); } #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED static int64_t sleep_until_callback(__unused alarm_id_t id, __unused void *user_data) { uint32_t save = spin_lock_blocking(sleep_notifier.spin_lock); lock_internal_spin_unlock_with_notify(&sleep_notifier, save); return 0; } #endif void sleep_until(absolute_time_t t) { #if PICO_ON_DEVICE && !defined(NDEBUG) if (__get_current_exception()) { panic("Attempted to sleep inside of an exception handler; use busy_wait if you must"); } #endif #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED uint64_t t_us = to_us_since_boot(t); uint64_t t_before_us = t_us - PICO_TIME_SLEEP_OVERHEAD_ADJUST_US; // needs to work in the first PICO_TIME_SLEEP_OVERHEAD_ADJUST_US of boot if (t_before_us > t_us) t_before_us = 0; absolute_time_t t_before; update_us_since_boot(&t_before, t_before_us); if (absolute_time_diff_us(get_absolute_time(), t_before) > 0) { if (add_alarm_at(t_before, sleep_until_callback, NULL, false) >= 0) { // able to add alarm for just before the time while (!time_reached(t_before)) { uint32_t save = spin_lock_blocking(sleep_notifier.spin_lock); lock_internal_spin_unlock_with_wait(&sleep_notifier, save); } } } #else // hook in case we're in RTOS; note we assume using the alarm pool is better always if available. sync_internal_yield_until_before(t); #endif // now wait until the exact time busy_wait_until(t); } void sleep_us(uint64_t us) { #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED sleep_until(make_timeout_time_us(us)); #else if (us < PICO_TIME_SLEEP_OVERHEAD_ADJUST_US) { busy_wait_us(us); } else { // hook in case we're in RTOS; note we assume using the alarm pool is better always if available. absolute_time_t t = make_timeout_time_us(us - PICO_TIME_SLEEP_OVERHEAD_ADJUST_US); sync_internal_yield_until_before(t); // then wait the rest of thw way busy_wait_until(t); } #endif } void sleep_ms(uint32_t ms) { sleep_us(ms * 1000ull); } bool best_effort_wfe_or_timeout(absolute_time_t timeout_timestamp) { #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED if (__get_current_exception()) { tight_loop_contents(); return time_reached(timeout_timestamp); } else { alarm_id_t id; id = add_alarm_at(timeout_timestamp, sleep_until_callback, NULL, false); if (id <= 0) { tight_loop_contents(); return time_reached(timeout_timestamp); } else { __wfe(); // we need to clean up if it wasn't us that caused the wfe; if it was this will be a noop. cancel_alarm(id); return time_reached(timeout_timestamp); } } #else tight_loop_contents(); return time_reached(timeout_timestamp); #endif } ================================================ FILE: pico-sdk/src/common/pico_time/timeout_helper.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/timeout_helper.h" static bool check_single_timeout_us(timeout_state_t *ts) { return time_reached(ts->next_timeout); } check_timeout_fn init_single_timeout_until(timeout_state_t *ts, absolute_time_t target) { ts->next_timeout = target; return check_single_timeout_us; } static bool check_per_iteration_timeout_us(timeout_state_t *ts) { if (time_reached(ts->next_timeout)) { return true; } ts->next_timeout = make_timeout_time_us(ts->param); return false; } check_timeout_fn init_per_iteration_timeout_us(timeout_state_t *ts, uint64_t per_iteration_timeout_us) { ts->next_timeout = make_timeout_time_us(per_iteration_timeout_us); ts->param = per_iteration_timeout_us; return check_per_iteration_timeout_us; } ================================================ FILE: pico-sdk/src/common/pico_usb_reset_interface/CMakeLists.txt ================================================ # don't use pico_add_library here as picotool includes it directly add_library(pico_usb_reset_interface_headers INTERFACE) add_library(pico_usb_reset_interface INTERFACE) target_link_libraries(pico_usb_reset_interface INTERFACE pico_usb_reset_interface_headers) target_include_directories(pico_usb_reset_interface_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) ================================================ FILE: pico-sdk/src/common/pico_usb_reset_interface/include/pico/usb_reset_interface.h ================================================ /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_USB_RESET_INTERFACE_H #define _PICO_USB_RESET_INTERFACE_H /** \file usb_reset_interface.h * \defgroup pico_usb_reset_interface pico_usb_reset_interface * * Definition for the reset interface that may be exposed by the pico_stdio_usb library */ // VENDOR sub-class for the reset interface #define RESET_INTERFACE_SUBCLASS 0x00 // VENDOR protocol for the reset interface #define RESET_INTERFACE_PROTOCOL 0x01 // CONTROL requests: // reset to BOOTSEL #define RESET_REQUEST_BOOTSEL 0x01 // regular flash boot #define RESET_REQUEST_FLASH 0x02 #endif ================================================ FILE: pico-sdk/src/common/pico_util/CMakeLists.txt ================================================ if (NOT TARGET pico_util_headers) add_library(pico_util_headers INTERFACE) target_include_directories(pico_util_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_link_libraries(pico_util_headers INTERFACE pico_base_headers hardware_sync_headers) endif() if (NOT TARGET pico_util) pico_add_impl_library(pico_util) target_sources(pico_util INTERFACE ${CMAKE_CURRENT_LIST_DIR}/datetime.c ${CMAKE_CURRENT_LIST_DIR}/pheap.c ${CMAKE_CURRENT_LIST_DIR}/queue.c ) pico_mirrored_target_link_libraries(pico_util INTERFACE pico_sync) endif() ================================================ FILE: pico-sdk/src/common/pico_util/datetime.c ================================================ #include "pico/util/datetime.h" #include static const char *DATETIME_MONTHS[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; static const char *DATETIME_DOWS[7] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", }; void datetime_to_str(char *buf, uint buf_size, const datetime_t *t) { snprintf(buf, buf_size, "%s %d %s %d:%02d:%02d %d", DATETIME_DOWS[t->dotw], t->day, DATETIME_MONTHS[t->month - 1], t->hour, t->min, t->sec, t->year); }; ================================================ FILE: pico-sdk/src/common/pico_util/doc.h ================================================ /** * \defgroup pico_util pico_util * \brief Useful data structures and utility functions */ ================================================ FILE: pico-sdk/src/common/pico_util/include/pico/util/datetime.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_UTIL_DATETIME_H #define _PICO_UTIL_DATETIME_H #include "pico.h" #ifdef __cplusplus extern "C" { #endif /** \file datetime.h * \defgroup util_datetime datetime * \brief Date/Time formatting * \ingroup pico_util */ /*! \brief Convert a datetime_t structure to a string * \ingroup util_datetime * * \param buf character buffer to accept generated string * \param buf_size The size of the passed in buffer * \param t The datetime to be converted. */ void datetime_to_str(char *buf, uint buf_size, const datetime_t *t); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_util/include/pico/util/pheap.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_UTIL_PHEAP_H #define _PICO_UTIL_PHEAP_H #include "pico.h" #ifdef __cplusplus extern "C" { #endif // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_PHEAP, Enable/disable assertions in the pheap module, type=bool, default=0, group=pico_util #ifndef PARAM_ASSERTIONS_ENABLED_PHEAP #define PARAM_ASSERTIONS_ENABLED_PHEAP 0 #endif /** * \file pheap.h * \defgroup util_pheap pheap * Pairing Heap Implementation * \ingroup pico_util * * pheap defines a simple pairing heap. The implementation simply tracks array indexes, it is up to * the user to provide storage for heap entries and a comparison function. * * NOTE: This class is not safe for concurrent usage. It should be externally protected. Furthermore * if used concurrently, the caller needs to protect around their use of the returned id. * For example, ph_remove_and_free_head returns the id of an element that is no longer in the heap. * The user can still use this to look at the data in their companion array, however obviously further operations * on the heap may cause them to overwrite that data as the id may be reused on subsequent operations * */ // PICO_CONFIG: PICO_PHEAP_MAX_ENTRIES, Maximum number of entries in the pheap, min=1, max=65534, default=255, group=pico_util #ifndef PICO_PHEAP_MAX_ENTRIES #define PICO_PHEAP_MAX_ENTRIES 255 #endif // public heap_node ids are numbered from 1 (0 means none) #if PICO_PHEAP_MAX_ENTRIES < 256 typedef uint8_t pheap_node_id_t; #elif PICO_PHEAP_MAX_ENTRIES < 65535 typedef uint16_t pheap_node_id_t; #else #error invalid PICO_PHEAP_MAX_ENTRIES #endif typedef struct pheap_node { pheap_node_id_t child, sibling, parent; } pheap_node_t; /** * A user comparator function for nodes in a pairing heap. * * \return true if a < b in natural order. Note this relative ordering must be stable from call to call. */ typedef bool (*pheap_comparator)(void *user_data, pheap_node_id_t a, pheap_node_id_t b); typedef struct pheap { pheap_node_t *nodes; pheap_comparator comparator; void *user_data; pheap_node_id_t max_nodes; pheap_node_id_t root_id; // we remove from head and add to tail to stop reusing the same ids pheap_node_id_t free_head_id; pheap_node_id_t free_tail_id; } pheap_t; /** * Create a pairing heap, which effectively maintains an efficient sorted ordering * of nodes. The heap itself stores no user per-node state, it is expected * that the user maintains a companion array. A comparator function must * be provided so that the heap implementation can determine the relative ordering of nodes * * \param max_nodes the maximum number of nodes that may be in the heap (this is bounded by * PICO_PHEAP_MAX_ENTRIES which defaults to 255 to be able to store indexes * in a single byte). * \param comparator the node comparison function * \param user_data a user data pointer associated with the heap that is provided in callbacks * \return a newly allocated and initialized heap */ pheap_t *ph_create(uint max_nodes, pheap_comparator comparator, void *user_data); /** * Removes all nodes from the pairing heap * \param heap the heap */ void ph_clear(pheap_t *heap); /** * De-allocates a pairing heap * * Note this method must *ONLY* be called on heaps created by ph_create() * \param heap the heap */ void ph_destroy(pheap_t *heap); // internal method static inline pheap_node_t *ph_get_node(pheap_t *heap, pheap_node_id_t id) { assert(id && id <= heap->max_nodes); return heap->nodes + id - 1; } // internal method static void ph_add_child_node(pheap_t *heap, pheap_node_id_t parent_id, pheap_node_id_t child_id) { pheap_node_t *n = ph_get_node(heap, parent_id); assert(parent_id); assert(child_id); assert(parent_id != child_id); pheap_node_t *c = ph_get_node(heap, child_id); c->parent = parent_id; if (!n->child) { n->child = child_id; } else { c->sibling = n->child; n->child = child_id; } } // internal method static pheap_node_id_t ph_merge_nodes(pheap_t *heap, pheap_node_id_t a, pheap_node_id_t b) { if (!a) return b; if (!b) return a; if (heap->comparator(heap->user_data, a, b)) { ph_add_child_node(heap, a, b); return a; } else { ph_add_child_node(heap, b, a); return b; } } /** * Allocate a new node from the unused space in the heap * * \param heap the heap * \return an identifier for the node, or 0 if the heap is full */ static inline pheap_node_id_t ph_new_node(pheap_t *heap) { if (!heap->free_head_id) return 0; pheap_node_id_t id = heap->free_head_id; pheap_node_t *hn = ph_get_node(heap, id); heap->free_head_id = hn->sibling; if (!heap->free_head_id) heap->free_tail_id = 0; hn->child = hn->sibling = hn->parent = 0; return id; } /** * Inserts a node into the heap. * * This method inserts a node (previously allocated by ph_new_node()) * into the heap, determining the correct order by calling * the heap's comparator * * \param heap the heap * \param id the id of the node to insert * \return the id of the new head of the pairing heap (i.e. node that compares first) */ static inline pheap_node_id_t ph_insert_node(pheap_t *heap, pheap_node_id_t id) { assert(id); pheap_node_t *hn = ph_get_node(heap, id); hn->child = hn->sibling = hn->parent = 0; heap->root_id = ph_merge_nodes(heap, heap->root_id, id); return heap->root_id; } /** * Returns the head node in the heap, i.e. the node * which compares first, but without removing it from the heap. * * \param heap the heap * \return the current head node id */ static inline pheap_node_id_t ph_peek_head(pheap_t *heap) { return heap->root_id; } /** * Remove the head node from the pairing heap. This head node is * the node which compares first in the logical ordering provided * by the comparator. * * Note that in the case of free == true, the returned id is no longer * allocated and may be re-used by future node allocations, so the caller * should retrieve any per node state from the companion array before modifying * the heap further. * * @param heap the heap * @param free true if the id is also to be freed; false if not - useful if the caller * may wish to re-insert an item with the same id) * @return the old head node id. */ pheap_node_id_t ph_remove_head(pheap_t *heap, bool free); /** * Remove the head node from the pairing heap. This head node is * the node which compares first in the logical ordering provided * by the comparator. * * Note that the returned id will be freed, and thus may be re-used by future node allocations, * so the caller should retrieve any per node state from the companion array before modifying * the heap further. * * @param heap the heap * @return the old head node id. */ static inline pheap_node_id_t ph_remove_and_free_head(pheap_t *heap) { return ph_remove_head(heap, true); } /** * Remove and free an arbitrary node from the pairing heap. This is a more * costly operation than removing the head via ph_remove_and_free_head() * * @param heap the heap * @param id the id of the node to free * @return true if the the node was in the heap, false otherwise */ bool ph_remove_and_free_node(pheap_t *heap, pheap_node_id_t id); /** * Determine if the heap contains a given node. Note containment refers * to whether the node is inserted (ph_insert_node()) vs allocated (ph_new_node()) * * @param heap the heap * @param id the id of the node * @return true if the heap contains a node with the given id, false otherwise. */ static inline bool ph_contains_node(pheap_t *heap, pheap_node_id_t id) { return id == heap->root_id || ph_get_node(heap, id)->parent; } /** * Free a node that is not currently in the heap, but has been allocated * * @param heap the heap * @param id the id of the node */ static inline void ph_free_node(pheap_t *heap, pheap_node_id_t id) { assert(id && !ph_contains_node(heap, id)); if (heap->free_tail_id) { ph_get_node(heap, heap->free_tail_id)->sibling = id; } if (!heap->free_head_id) { assert(!heap->free_tail_id); heap->free_head_id = id; } heap->free_tail_id = id; } /** * Print a representation of the heap for debugging * * @param heap the heap * @param dump_key a method to print a node value * @param user_data the user data to pass to the dump_key method */ void ph_dump(pheap_t *heap, void (*dump_key)(pheap_node_id_t id, void *user_data), void *user_data); /** * Initialize a statically allocated heap (ph_create() using the C heap). * The heap member `nodes` must be allocated of size max_nodes. * * @param heap the heap * @param max_nodes the max number of nodes in the heap (matching the size of the heap's nodes array) * @param comparator the comparator for the heap * @param user_data the user data for the heap. */ void ph_post_alloc_init(pheap_t *heap, uint max_nodes, pheap_comparator comparator, void *user_data); /** * Define a statically allocated pairing heap. This must be initialized * by ph_post_alloc_init */ #define PHEAP_DEFINE_STATIC(name, _max_nodes) \ static_assert(_max_nodes && _max_nodes < (1u << (8 * sizeof(pheap_node_id_t))), ""); \ static pheap_node_t name ## _nodes[_max_nodes]; \ static pheap_t name = { \ .nodes = name ## _nodes, \ .max_nodes = _max_nodes \ }; #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_util/include/pico/util/queue.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_UTIL_QUEUE_H #define _PICO_UTIL_QUEUE_H #include "pico.h" #include "hardware/sync.h" // PICO_CONFIG: PICO_QUEUE_MAX_LEVEL, Maintain a field for the highest level that has been reached by a queue, type=bool, default=0, advanced=true, group=queue #ifndef PICO_QUEUE_MAX_LEVEL #define PICO_QUEUE_MAX_LEVEL 0 #endif /** \file queue.h * \defgroup queue queue * Multi-core and IRQ safe queue implementation. * * Note that this queue stores values of a specified size, and pushed values are copied into the queue * \ingroup pico_util */ #ifdef __cplusplus extern "C" { #endif #include "pico/lock_core.h" typedef struct { lock_core_t core; uint8_t *data; uint16_t wptr; uint16_t rptr; uint16_t element_size; uint16_t element_count; #if PICO_QUEUE_MAX_LEVEL uint16_t max_level; #endif } queue_t; /*! \brief Initialise a queue with a specific spinlock for concurrency protection * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \param element_size Size of each value in the queue * \param element_count Maximum number of entries in the queue * \param spinlock_num The spin ID used to protect the queue */ void queue_init_with_spinlock(queue_t *q, uint element_size, uint element_count, uint spinlock_num); /*! \brief Initialise a queue, allocating a (possibly shared) spinlock * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \param element_size Size of each value in the queue * \param element_count Maximum number of entries in the queue */ static inline void queue_init(queue_t *q, uint element_size, uint element_count) { queue_init_with_spinlock(q, element_size, element_count, next_striped_spin_lock_num()); } /*! \brief Destroy the specified queue. * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * * Does not deallocate the queue_t structure itself. */ void queue_free(queue_t *q); /*! \brief Unsafe check of level of the specified queue. * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \return Number of entries in the queue * * This does not use the spinlock, so may return incorrect results if the * spin lock is not externally locked */ static inline uint queue_get_level_unsafe(queue_t *q) { int32_t rc = (int32_t)q->wptr - (int32_t)q->rptr; if (rc < 0) { rc += q->element_count + 1; } return (uint)rc; } /*! \brief Check of level of the specified queue. * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \return Number of entries in the queue */ static inline uint queue_get_level(queue_t *q) { uint32_t save = spin_lock_blocking(q->core.spin_lock); uint level = queue_get_level_unsafe(q); spin_unlock(q->core.spin_lock, save); return level; } #if PICO_QUEUE_MAX_LEVEL /*! \brief Returns the highest level reached by the specified queue since it was created * or since the max level was reset * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \return Maximum level of the queue */ static inline uint queue_get_max_level(queue_t *q) { return q->max_level; } #endif #if PICO_QUEUE_MAX_LEVEL /*! \brief Reset the highest level reached of the specified queue. * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle */ static inline void queue_reset_max_level(queue_t *q) { uint32_t save = spin_lock_blocking(q->core.spin_lock); q->max_level = queue_get_level_unsafe(q); spin_unlock(q->core.spin_lock, save); } #endif /*! \brief Check if queue is empty * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \return true if queue is empty, false otherwise * * This function is interrupt and multicore safe. */ static inline bool queue_is_empty(queue_t *q) { return queue_get_level(q) == 0; } /*! \brief Check if queue is full * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \return true if queue is full, false otherwise * * This function is interrupt and multicore safe. */ static inline bool queue_is_full(queue_t *q) { return queue_get_level(q) == q->element_count; } // nonblocking queue access functions: /*! \brief Non-blocking add value queue if not full * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \param data Pointer to value to be copied into the queue * \return true if the value was added * * If the queue is full this function will return immediately with false, otherwise * the data is copied into a new value added to the queue, and this function will return true. */ bool queue_try_add(queue_t *q, const void *data); /*! \brief Non-blocking removal of entry from the queue if non empty * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \param data Pointer to the location to receive the removed value * \return true if a value was removed * * If the queue is not empty function will copy the removed value into the location provided and return * immediately with true, otherwise the function will return immediately with false. */ bool queue_try_remove(queue_t *q, void *data); /*! \brief Non-blocking peek at the next item to be removed from the queue * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \param data Pointer to the location to receive the peeked value * \return true if there was a value to peek * * If the queue is not empty this function will return immediately with true with the peeked entry * copied into the location specified by the data parameter, otherwise the function will return false. */ bool queue_try_peek(queue_t *q, void *data); // blocking queue access functions: /*! \brief Blocking add of value to queue * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \param data Pointer to value to be copied into the queue * * If the queue is full this function will block, until a removal happens on the queue */ void queue_add_blocking(queue_t *q, const void *data); /*! \brief Blocking remove entry from queue * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \param data Pointer to the location to receive the removed value * * If the queue is empty this function will block until a value is added. */ void queue_remove_blocking(queue_t *q, void *data); /*! \brief Blocking peek at next value to be removed from queue * \ingroup queue * * \param q Pointer to a queue_t structure, used as a handle * \param data Pointer to the location to receive the peeked value * * If the queue is empty function will block until a value is added */ void queue_peek_blocking(queue_t *q, void *data); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/common/pico_util/pheap.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include "pico/util/pheap.h" pheap_t *ph_create(uint max_nodes, pheap_comparator comparator, void *user_data) { invalid_params_if(PHEAP, !max_nodes || max_nodes >= (1u << (8 * sizeof(pheap_node_id_t)))); pheap_t *heap = calloc(1, sizeof(pheap_t)); heap->nodes = calloc(max_nodes, sizeof(pheap_node_t)); ph_post_alloc_init(heap, max_nodes, comparator, user_data); return heap; } void ph_post_alloc_init(pheap_t *heap, uint max_nodes, pheap_comparator comparator, void *user_data) { invalid_params_if(PHEAP, !max_nodes || max_nodes >= (1u << (8 * sizeof(pheap_node_id_t)))); heap->max_nodes = (pheap_node_id_t) max_nodes; heap->comparator = comparator; heap->user_data = user_data; ph_clear(heap); } void ph_clear(pheap_t *heap) { heap->root_id = 0; heap->free_head_id = 1; heap->free_tail_id = heap->max_nodes; for(pheap_node_id_t i = 1; i < heap->max_nodes; i++) { ph_get_node(heap, i)->sibling = (pheap_node_id_t)(i + 1); } ph_get_node(heap, heap->max_nodes)->sibling = 0; } void ph_destroy(pheap_t *heap) { free(heap->nodes); free(heap); } pheap_node_id_t ph_merge_two_pass(pheap_t *heap, pheap_node_id_t id) { if (!id || !ph_get_node(heap, id)->sibling) { return id; } else { pheap_node_id_t a, b, new_node; a = id; b = ph_get_node(heap, id)->sibling; new_node = ph_get_node(heap, b)->sibling; ph_get_node(heap, a)->sibling = ph_get_node(heap, b)->sibling = 0; return ph_merge_nodes(heap, ph_merge_nodes(heap, a, b), ph_merge_two_pass(heap, new_node)); } } static pheap_node_id_t ph_remove_any_head(pheap_t *heap, pheap_node_id_t root_id, bool free) { assert(root_id); // printf("Removing head %d (parent %d sibling %d)\n", root_id, ph_get_node(heap, root_id)->parent, ph_get_node(heap, root_id)->sibling); assert(!ph_get_node(heap, root_id)->sibling); assert(!ph_get_node(heap, root_id)->parent); pheap_node_id_t new_root_id = ph_merge_two_pass(heap, ph_get_node(heap, root_id)->child); if (free) { if (heap->free_tail_id) { ph_get_node(heap, heap->free_tail_id)->sibling = root_id; } if (!heap->free_head_id) { assert(!heap->free_tail_id); heap->free_head_id = root_id; } heap->free_tail_id = root_id; } if (new_root_id) ph_get_node(heap, new_root_id)->parent = 0; ph_get_node(heap, root_id)->sibling = 0; return new_root_id; } pheap_node_id_t ph_remove_head(pheap_t *heap, bool free) { pheap_node_id_t old_root_id = ph_peek_head(heap); heap->root_id = ph_remove_any_head(heap, old_root_id, free); return old_root_id; } bool ph_remove_and_free_node(pheap_t *heap, pheap_node_id_t id) { // 1) trivial cases if (!id) return false; if (id == heap->root_id) { ph_remove_and_free_head(heap); return true; } // 2) unlink the node from the tree pheap_node_t *node = ph_get_node(heap, id); if (!node->parent) return false; // not in tree pheap_node_t *parent = ph_get_node(heap, node->parent); if (parent->child == id) { parent->child = node->sibling; } else { pheap_node_id_t prev_sibling_id = parent->child; bool __unused found = false; do { pheap_node_t *prev_sibling = ph_get_node(heap, prev_sibling_id); if (prev_sibling->sibling == id) { prev_sibling->sibling = node->sibling; found = true; break; } prev_sibling_id = prev_sibling->sibling; } while (prev_sibling_id); assert(found); } node->sibling = node->parent = 0; // ph_dump(heap, NULL, NULL); // 3) remove it from the head of its own subtree pheap_node_id_t new_sub_tree = ph_remove_any_head(heap, id, true); assert(new_sub_tree != heap->root_id); heap->root_id = ph_merge_nodes(heap, heap->root_id, new_sub_tree); return true; } static uint ph_dump_node(pheap_t *heap, pheap_node_id_t id, void (*dump_key)(pheap_node_id_t, void *), void *user_data, uint indent) { uint count = 0; if (id) { count++; for (uint i = 0; i < indent * 2; i++) { putchar(' '); } pheap_node_t *node = ph_get_node(heap, id); printf("%d (c=%d s=%d p=%d) ", id, node->child, node->sibling, node->parent); if (dump_key) dump_key(id, user_data); printf("\n"); count += ph_dump_node(heap, node->child, dump_key, user_data, indent + 1); count += ph_dump_node(heap, node->sibling, dump_key, user_data, indent); } return count; } void ph_dump(pheap_t *heap, void (*dump_key)(pheap_node_id_t, void *), void *user_data) { uint count = ph_dump_node(heap, heap->root_id, dump_key, user_data, 0); printf("node_count %d\n", count); } ================================================ FILE: pico-sdk/src/common/pico_util/queue.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include "pico/util/queue.h" void queue_init_with_spinlock(queue_t *q, uint element_size, uint element_count, uint spinlock_num) { lock_init(&q->core, spinlock_num); q->data = (uint8_t *)calloc(element_count + 1, element_size); q->element_count = (uint16_t)element_count; q->element_size = (uint16_t)element_size; q->wptr = 0; q->rptr = 0; } void queue_free(queue_t *q) { free(q->data); } static inline void *element_ptr(queue_t *q, uint index) { assert(index <= q->element_count); return q->data + index * q->element_size; } static inline uint16_t inc_index(queue_t *q, uint16_t index) { if (++index > q->element_count) { // > because we have element_count + 1 elements index = 0; } #if PICO_QUEUE_MAX_LEVEL uint16_t level = queue_get_level_unsafe(q); if (level > q->max_level) { q->max_level = level; } #endif return index; } static bool queue_add_internal(queue_t *q, const void *data, bool block) { do { uint32_t save = spin_lock_blocking(q->core.spin_lock); if (queue_get_level_unsafe(q) != q->element_count) { memcpy(element_ptr(q, q->wptr), data, q->element_size); q->wptr = inc_index(q, q->wptr); lock_internal_spin_unlock_with_notify(&q->core, save); return true; } if (block) { lock_internal_spin_unlock_with_wait(&q->core, save); } else { spin_unlock(q->core.spin_lock, save); return false; } } while (true); } static bool queue_remove_internal(queue_t *q, void *data, bool block) { do { uint32_t save = spin_lock_blocking(q->core.spin_lock); if (queue_get_level_unsafe(q) != 0) { memcpy(data, element_ptr(q, q->rptr), q->element_size); q->rptr = inc_index(q, q->rptr); lock_internal_spin_unlock_with_notify(&q->core, save); return true; } if (block) { lock_internal_spin_unlock_with_wait(&q->core, save); } else { spin_unlock(q->core.spin_lock, save); return false; } } while (true); } static bool queue_peek_internal(queue_t *q, void *data, bool block) { do { uint32_t save = spin_lock_blocking(q->core.spin_lock); if (queue_get_level_unsafe(q) != 0) { memcpy(data, element_ptr(q, q->rptr), q->element_size); lock_internal_spin_unlock_with_notify(&q->core, save); return true; } if (block) { lock_internal_spin_unlock_with_wait(&q->core, save); } else { spin_unlock(q->core.spin_lock, save); return false; } } while (true); } bool queue_try_add(queue_t *q, const void *data) { return queue_add_internal(q, data, false); } bool queue_try_remove(queue_t *q, void *data) { return queue_remove_internal(q, data, false); } bool queue_try_peek(queue_t *q, void *data) { return queue_peek_internal(q, data, false); } void queue_add_blocking(queue_t *q, const void *data) { queue_add_internal(q, data, true); } void queue_remove_blocking(queue_t *q, void *data) { queue_remove_internal(q, data, true); } void queue_peek_blocking(queue_t *q, void *data) { queue_peek_internal(q, data, true); } ================================================ FILE: pico-sdk/src/rp2040/CMakeLists.txt ================================================ # Targets specific to B0 silicon pico_add_subdirectory(hardware_regs) pico_add_subdirectory(hardware_structs) pico_add_doxygen(${CMAKE_CURRENT_LIST_DIR}) pico_add_doxygen_exclude(${CMAKE_CURRENT_LIST_DIR}/hardware_regs) # very very big pico_promote_common_scope_vars() ================================================ FILE: pico-sdk/src/rp2040/README.md ================================================ This directory contains header files defining the RP2040 hardware. It is selected when `PICO_PLATFORM=rp2040` (the default) is specified for the build `hardware_regs` contains low level hardware register #defines autogenerated from the RP2040 chip definition itself. `hardware_structs` contains C structures for accessing memory mapped registers ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/CMakeLists.txt ================================================ add_library(hardware_regs INTERFACE) add_library(hardware_regs_headers INTERFACE) target_include_directories(hardware_regs_headers INTERFACE include) pico_mirrored_target_link_libraries(hardware_regs INTERFACE hardware_base) ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/platform_defs.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_PLATFORM_DEFS_H #define _HARDWARE_PLATFORM_DEFS_H // This header is included from C and assembler - intended mostly for #defines; guard other stuff with #ifdef __ASSEMBLER__ #ifndef _u #ifdef __ASSEMBLER__ #define _u(x) x #else #define _u(x) x ## u #endif #endif #define NUM_CORES _u(2) #define NUM_DMA_CHANNELS _u(12) #define NUM_DMA_TIMERS _u(4) #define NUM_IRQS _u(32) #define NUM_USER_IRQS _u(6) #define NUM_PIOS _u(2) #define NUM_PIO_STATE_MACHINES _u(4) #define NUM_PWM_SLICES _u(8) #define NUM_SPIN_LOCKS _u(32) #define NUM_UARTS _u(2) #define NUM_I2CS _u(2) #define NUM_SPIS _u(2) #define NUM_TIMERS _u(4) #define NUM_ADC_CHANNELS _u(5) #define NUM_BANK0_GPIOS _u(30) #define NUM_QSPI_GPIOS _u(6) #define PIO_INSTRUCTION_COUNT _u(32) // PICO_CONFIG: XOSC_KHZ, The crystal oscillator frequency in kHz, type=int, default=12000, advanced=true, group=hardware_base // NOTE: The system and USB clocks are generated from the frequency using two PLLs. // If you override this define, or SYS_CLK_KHZ/USB_CLK_KHZ below, you will *also* need to add your own adjusted PLL set-up defines to // override the defaults which live in src/rp2_common/hardware_clocks/include/hardware/clocks.h // Please see the comments there about calculating the new PLL setting values. #ifndef XOSC_KHZ #define XOSC_KHZ _u(12000) #endif // PICO_CONFIG: SYS_CLK_KHZ, The system operating frequency in kHz, type=int, default=125000, advanced=true, group=hardware_base #ifndef SYS_CLK_KHZ #define SYS_CLK_KHZ _u(125000) #endif // PICO_CONFIG: USB_CLK_KHZ, USB clock frequency. Must be 48MHz for the USB interface to operate correctly, type=int, default=48000, advanced=true, group=hardware_base #ifndef USB_CLK_KHZ #define USB_CLK_KHZ _u(48000) #endif // For backwards compatibility define XOSC_MHZ if the frequency is indeed an integer number of Mhz. #if defined(XOSC_KHZ) && !defined(XOSC_MHZ) && (XOSC_KHZ % 1000 == 0) #define XOSC_MHZ (XOSC_KHZ / 1000) #endif // For backwards compatibility define SYS_CLK_MHZ if the frequency is indeed an integer number of Mhz. #if defined(SYS_CLK_KHZ) && !defined(SYS_CLK_MHZ) && (SYS_CLK_KHZ % 1000 == 0) #define SYS_CLK_MHZ (SYS_CLK_KHZ / 1000) #endif // For backwards compatibility define USB_CLK_MHZ if the frequency is indeed an integer number of Mhz. #if defined(USB_CLK_KHZ) && !defined(USB_CLK_MHZ) && (USB_CLK_KHZ % 1000 == 0) #define USB_CLK_MHZ (USB_CLK_KHZ / 1000) #endif #define FIRST_USER_IRQ (NUM_IRQS - NUM_USER_IRQS) #define VTABLE_FIRST_IRQ 16 #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/adc.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : ADC // Version : 2 // Bus type : apb // Description : Control and data interface to SAR ADC // ============================================================================= #ifndef HARDWARE_REGS_ADC_DEFINED #define HARDWARE_REGS_ADC_DEFINED // ============================================================================= // Register : ADC_CS // Description : ADC Control and Status #define ADC_CS_OFFSET _u(0x00000000) #define ADC_CS_BITS _u(0x001f770f) #define ADC_CS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ADC_CS_RROBIN // Description : Round-robin sampling. 1 bit per channel. Set all bits to 0 to // disable. // Otherwise, the ADC will cycle through each enabled channel in a // round-robin fashion. // The first channel to be sampled will be the one currently // indicated by AINSEL. // AINSEL will be updated after each conversion with the // newly-selected channel. #define ADC_CS_RROBIN_RESET _u(0x00) #define ADC_CS_RROBIN_BITS _u(0x001f0000) #define ADC_CS_RROBIN_MSB _u(20) #define ADC_CS_RROBIN_LSB _u(16) #define ADC_CS_RROBIN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ADC_CS_AINSEL // Description : Select analog mux input. Updated automatically in round-robin // mode. #define ADC_CS_AINSEL_RESET _u(0x0) #define ADC_CS_AINSEL_BITS _u(0x00007000) #define ADC_CS_AINSEL_MSB _u(14) #define ADC_CS_AINSEL_LSB _u(12) #define ADC_CS_AINSEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ADC_CS_ERR_STICKY // Description : Some past ADC conversion encountered an error. Write 1 to // clear. #define ADC_CS_ERR_STICKY_RESET _u(0x0) #define ADC_CS_ERR_STICKY_BITS _u(0x00000400) #define ADC_CS_ERR_STICKY_MSB _u(10) #define ADC_CS_ERR_STICKY_LSB _u(10) #define ADC_CS_ERR_STICKY_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : ADC_CS_ERR // Description : The most recent ADC conversion encountered an error; result is // undefined or noisy. #define ADC_CS_ERR_RESET _u(0x0) #define ADC_CS_ERR_BITS _u(0x00000200) #define ADC_CS_ERR_MSB _u(9) #define ADC_CS_ERR_LSB _u(9) #define ADC_CS_ERR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : ADC_CS_READY // Description : 1 if the ADC is ready to start a new conversion. Implies any // previous conversion has completed. // 0 whilst conversion in progress. #define ADC_CS_READY_RESET _u(0x0) #define ADC_CS_READY_BITS _u(0x00000100) #define ADC_CS_READY_MSB _u(8) #define ADC_CS_READY_LSB _u(8) #define ADC_CS_READY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : ADC_CS_START_MANY // Description : Continuously perform conversions whilst this bit is 1. A new // conversion will start immediately after the previous finishes. #define ADC_CS_START_MANY_RESET _u(0x0) #define ADC_CS_START_MANY_BITS _u(0x00000008) #define ADC_CS_START_MANY_MSB _u(3) #define ADC_CS_START_MANY_LSB _u(3) #define ADC_CS_START_MANY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ADC_CS_START_ONCE // Description : Start a single conversion. Self-clearing. Ignored if start_many // is asserted. #define ADC_CS_START_ONCE_RESET _u(0x0) #define ADC_CS_START_ONCE_BITS _u(0x00000004) #define ADC_CS_START_ONCE_MSB _u(2) #define ADC_CS_START_ONCE_LSB _u(2) #define ADC_CS_START_ONCE_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : ADC_CS_TS_EN // Description : Power on temperature sensor. 1 - enabled. 0 - disabled. #define ADC_CS_TS_EN_RESET _u(0x0) #define ADC_CS_TS_EN_BITS _u(0x00000002) #define ADC_CS_TS_EN_MSB _u(1) #define ADC_CS_TS_EN_LSB _u(1) #define ADC_CS_TS_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ADC_CS_EN // Description : Power on ADC and enable its clock. // 1 - enabled. 0 - disabled. #define ADC_CS_EN_RESET _u(0x0) #define ADC_CS_EN_BITS _u(0x00000001) #define ADC_CS_EN_MSB _u(0) #define ADC_CS_EN_LSB _u(0) #define ADC_CS_EN_ACCESS "RW" // ============================================================================= // Register : ADC_RESULT // Description : Result of most recent ADC conversion #define ADC_RESULT_OFFSET _u(0x00000004) #define ADC_RESULT_BITS _u(0x00000fff) #define ADC_RESULT_RESET _u(0x00000000) #define ADC_RESULT_MSB _u(11) #define ADC_RESULT_LSB _u(0) #define ADC_RESULT_ACCESS "RO" // ============================================================================= // Register : ADC_FCS // Description : FIFO control and status #define ADC_FCS_OFFSET _u(0x00000008) #define ADC_FCS_BITS _u(0x0f0f0f0f) #define ADC_FCS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ADC_FCS_THRESH // Description : DREQ/IRQ asserted when level >= threshold #define ADC_FCS_THRESH_RESET _u(0x0) #define ADC_FCS_THRESH_BITS _u(0x0f000000) #define ADC_FCS_THRESH_MSB _u(27) #define ADC_FCS_THRESH_LSB _u(24) #define ADC_FCS_THRESH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ADC_FCS_LEVEL // Description : The number of conversion results currently waiting in the FIFO #define ADC_FCS_LEVEL_RESET _u(0x0) #define ADC_FCS_LEVEL_BITS _u(0x000f0000) #define ADC_FCS_LEVEL_MSB _u(19) #define ADC_FCS_LEVEL_LSB _u(16) #define ADC_FCS_LEVEL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : ADC_FCS_OVER // Description : 1 if the FIFO has been overflowed. Write 1 to clear. #define ADC_FCS_OVER_RESET _u(0x0) #define ADC_FCS_OVER_BITS _u(0x00000800) #define ADC_FCS_OVER_MSB _u(11) #define ADC_FCS_OVER_LSB _u(11) #define ADC_FCS_OVER_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : ADC_FCS_UNDER // Description : 1 if the FIFO has been underflowed. Write 1 to clear. #define ADC_FCS_UNDER_RESET _u(0x0) #define ADC_FCS_UNDER_BITS _u(0x00000400) #define ADC_FCS_UNDER_MSB _u(10) #define ADC_FCS_UNDER_LSB _u(10) #define ADC_FCS_UNDER_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : ADC_FCS_FULL // Description : None #define ADC_FCS_FULL_RESET _u(0x0) #define ADC_FCS_FULL_BITS _u(0x00000200) #define ADC_FCS_FULL_MSB _u(9) #define ADC_FCS_FULL_LSB _u(9) #define ADC_FCS_FULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : ADC_FCS_EMPTY // Description : None #define ADC_FCS_EMPTY_RESET _u(0x0) #define ADC_FCS_EMPTY_BITS _u(0x00000100) #define ADC_FCS_EMPTY_MSB _u(8) #define ADC_FCS_EMPTY_LSB _u(8) #define ADC_FCS_EMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : ADC_FCS_DREQ_EN // Description : If 1: assert DMA requests when FIFO contains data #define ADC_FCS_DREQ_EN_RESET _u(0x0) #define ADC_FCS_DREQ_EN_BITS _u(0x00000008) #define ADC_FCS_DREQ_EN_MSB _u(3) #define ADC_FCS_DREQ_EN_LSB _u(3) #define ADC_FCS_DREQ_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ADC_FCS_ERR // Description : If 1: conversion error bit appears in the FIFO alongside the // result #define ADC_FCS_ERR_RESET _u(0x0) #define ADC_FCS_ERR_BITS _u(0x00000004) #define ADC_FCS_ERR_MSB _u(2) #define ADC_FCS_ERR_LSB _u(2) #define ADC_FCS_ERR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ADC_FCS_SHIFT // Description : If 1: FIFO results are right-shifted to be one byte in size. // Enables DMA to byte buffers. #define ADC_FCS_SHIFT_RESET _u(0x0) #define ADC_FCS_SHIFT_BITS _u(0x00000002) #define ADC_FCS_SHIFT_MSB _u(1) #define ADC_FCS_SHIFT_LSB _u(1) #define ADC_FCS_SHIFT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ADC_FCS_EN // Description : If 1: write result to the FIFO after each conversion. #define ADC_FCS_EN_RESET _u(0x0) #define ADC_FCS_EN_BITS _u(0x00000001) #define ADC_FCS_EN_MSB _u(0) #define ADC_FCS_EN_LSB _u(0) #define ADC_FCS_EN_ACCESS "RW" // ============================================================================= // Register : ADC_FIFO // Description : Conversion result FIFO #define ADC_FIFO_OFFSET _u(0x0000000c) #define ADC_FIFO_BITS _u(0x00008fff) #define ADC_FIFO_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ADC_FIFO_ERR // Description : 1 if this particular sample experienced a conversion error. // Remains in the same location if the sample is shifted. #define ADC_FIFO_ERR_RESET "-" #define ADC_FIFO_ERR_BITS _u(0x00008000) #define ADC_FIFO_ERR_MSB _u(15) #define ADC_FIFO_ERR_LSB _u(15) #define ADC_FIFO_ERR_ACCESS "RF" // ----------------------------------------------------------------------------- // Field : ADC_FIFO_VAL // Description : None #define ADC_FIFO_VAL_RESET "-" #define ADC_FIFO_VAL_BITS _u(0x00000fff) #define ADC_FIFO_VAL_MSB _u(11) #define ADC_FIFO_VAL_LSB _u(0) #define ADC_FIFO_VAL_ACCESS "RF" // ============================================================================= // Register : ADC_DIV // Description : Clock divider. If non-zero, CS_START_MANY will start // conversions // at regular intervals rather than back-to-back. // The divider is reset when either of these fields are written. // Total period is 1 + INT + FRAC / 256 #define ADC_DIV_OFFSET _u(0x00000010) #define ADC_DIV_BITS _u(0x00ffffff) #define ADC_DIV_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ADC_DIV_INT // Description : Integer part of clock divisor. #define ADC_DIV_INT_RESET _u(0x0000) #define ADC_DIV_INT_BITS _u(0x00ffff00) #define ADC_DIV_INT_MSB _u(23) #define ADC_DIV_INT_LSB _u(8) #define ADC_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ADC_DIV_FRAC // Description : Fractional part of clock divisor. First-order delta-sigma. #define ADC_DIV_FRAC_RESET _u(0x00) #define ADC_DIV_FRAC_BITS _u(0x000000ff) #define ADC_DIV_FRAC_MSB _u(7) #define ADC_DIV_FRAC_LSB _u(0) #define ADC_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : ADC_INTR // Description : Raw Interrupts #define ADC_INTR_OFFSET _u(0x00000014) #define ADC_INTR_BITS _u(0x00000001) #define ADC_INTR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ADC_INTR_FIFO // Description : Triggered when the sample FIFO reaches a certain level. // This level can be programmed via the FCS_THRESH field. #define ADC_INTR_FIFO_RESET _u(0x0) #define ADC_INTR_FIFO_BITS _u(0x00000001) #define ADC_INTR_FIFO_MSB _u(0) #define ADC_INTR_FIFO_LSB _u(0) #define ADC_INTR_FIFO_ACCESS "RO" // ============================================================================= // Register : ADC_INTE // Description : Interrupt Enable #define ADC_INTE_OFFSET _u(0x00000018) #define ADC_INTE_BITS _u(0x00000001) #define ADC_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ADC_INTE_FIFO // Description : Triggered when the sample FIFO reaches a certain level. // This level can be programmed via the FCS_THRESH field. #define ADC_INTE_FIFO_RESET _u(0x0) #define ADC_INTE_FIFO_BITS _u(0x00000001) #define ADC_INTE_FIFO_MSB _u(0) #define ADC_INTE_FIFO_LSB _u(0) #define ADC_INTE_FIFO_ACCESS "RW" // ============================================================================= // Register : ADC_INTF // Description : Interrupt Force #define ADC_INTF_OFFSET _u(0x0000001c) #define ADC_INTF_BITS _u(0x00000001) #define ADC_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ADC_INTF_FIFO // Description : Triggered when the sample FIFO reaches a certain level. // This level can be programmed via the FCS_THRESH field. #define ADC_INTF_FIFO_RESET _u(0x0) #define ADC_INTF_FIFO_BITS _u(0x00000001) #define ADC_INTF_FIFO_MSB _u(0) #define ADC_INTF_FIFO_LSB _u(0) #define ADC_INTF_FIFO_ACCESS "RW" // ============================================================================= // Register : ADC_INTS // Description : Interrupt status after masking & forcing #define ADC_INTS_OFFSET _u(0x00000020) #define ADC_INTS_BITS _u(0x00000001) #define ADC_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ADC_INTS_FIFO // Description : Triggered when the sample FIFO reaches a certain level. // This level can be programmed via the FCS_THRESH field. #define ADC_INTS_FIFO_RESET _u(0x0) #define ADC_INTS_FIFO_BITS _u(0x00000001) #define ADC_INTS_FIFO_MSB _u(0) #define ADC_INTS_FIFO_LSB _u(0) #define ADC_INTS_FIFO_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_ADC_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/addressmap.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _ADDRESSMAP_H_ #define _ADDRESSMAP_H_ #include "hardware/platform_defs.h" // Register address offsets for atomic RMW aliases #define REG_ALIAS_RW_BITS (0x0u << 12u) #define REG_ALIAS_XOR_BITS (0x1u << 12u) #define REG_ALIAS_SET_BITS (0x2u << 12u) #define REG_ALIAS_CLR_BITS (0x3u << 12u) #define ROM_BASE _u(0x00000000) #define XIP_BASE _u(0x10000000) #define XIP_MAIN_BASE _u(0x10000000) #define XIP_NOALLOC_BASE _u(0x11000000) #define XIP_NOCACHE_BASE _u(0x12000000) #define XIP_NOCACHE_NOALLOC_BASE _u(0x13000000) #define XIP_CTRL_BASE _u(0x14000000) #define XIP_SRAM_BASE _u(0x15000000) #define XIP_SRAM_END _u(0x15004000) #define XIP_SSI_BASE _u(0x18000000) #define SRAM_BASE _u(0x20000000) #define SRAM_STRIPED_BASE _u(0x20000000) #define SRAM_STRIPED_END _u(0x20040000) #define SRAM4_BASE _u(0x20040000) #define SRAM5_BASE _u(0x20041000) #define SRAM_END _u(0x20042000) #define SRAM0_BASE _u(0x21000000) #define SRAM1_BASE _u(0x21010000) #define SRAM2_BASE _u(0x21020000) #define SRAM3_BASE _u(0x21030000) #define SYSINFO_BASE _u(0x40000000) #define SYSCFG_BASE _u(0x40004000) #define CLOCKS_BASE _u(0x40008000) #define RESETS_BASE _u(0x4000c000) #define PSM_BASE _u(0x40010000) #define IO_BANK0_BASE _u(0x40014000) #define IO_QSPI_BASE _u(0x40018000) #define PADS_BANK0_BASE _u(0x4001c000) #define PADS_QSPI_BASE _u(0x40020000) #define XOSC_BASE _u(0x40024000) #define PLL_SYS_BASE _u(0x40028000) #define PLL_USB_BASE _u(0x4002c000) #define BUSCTRL_BASE _u(0x40030000) #define UART0_BASE _u(0x40034000) #define UART1_BASE _u(0x40038000) #define SPI0_BASE _u(0x4003c000) #define SPI1_BASE _u(0x40040000) #define I2C0_BASE _u(0x40044000) #define I2C1_BASE _u(0x40048000) #define ADC_BASE _u(0x4004c000) #define PWM_BASE _u(0x40050000) #define TIMER_BASE _u(0x40054000) #define WATCHDOG_BASE _u(0x40058000) #define RTC_BASE _u(0x4005c000) #define ROSC_BASE _u(0x40060000) #define VREG_AND_CHIP_RESET_BASE _u(0x40064000) #define TBMAN_BASE _u(0x4006c000) #define DMA_BASE _u(0x50000000) #define USBCTRL_DPRAM_BASE _u(0x50100000) #define USBCTRL_BASE _u(0x50100000) #define USBCTRL_REGS_BASE _u(0x50110000) #define PIO0_BASE _u(0x50200000) #define PIO1_BASE _u(0x50300000) #define XIP_AUX_BASE _u(0x50400000) #define SIO_BASE _u(0xd0000000) #define PPB_BASE _u(0xe0000000) #endif // _ADDRESSMAP_H_ ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/busctrl.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : BUSCTRL // Version : 1 // Bus type : apb // Description : Register block for busfabric control signals and performance // counters // ============================================================================= #ifndef HARDWARE_REGS_BUSCTRL_DEFINED #define HARDWARE_REGS_BUSCTRL_DEFINED // ============================================================================= // Register : BUSCTRL_BUS_PRIORITY // Description : Set the priority of each master for bus arbitration. #define BUSCTRL_BUS_PRIORITY_OFFSET _u(0x00000000) #define BUSCTRL_BUS_PRIORITY_BITS _u(0x00001111) #define BUSCTRL_BUS_PRIORITY_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : BUSCTRL_BUS_PRIORITY_DMA_W // Description : 0 - low priority, 1 - high priority #define BUSCTRL_BUS_PRIORITY_DMA_W_RESET _u(0x0) #define BUSCTRL_BUS_PRIORITY_DMA_W_BITS _u(0x00001000) #define BUSCTRL_BUS_PRIORITY_DMA_W_MSB _u(12) #define BUSCTRL_BUS_PRIORITY_DMA_W_LSB _u(12) #define BUSCTRL_BUS_PRIORITY_DMA_W_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : BUSCTRL_BUS_PRIORITY_DMA_R // Description : 0 - low priority, 1 - high priority #define BUSCTRL_BUS_PRIORITY_DMA_R_RESET _u(0x0) #define BUSCTRL_BUS_PRIORITY_DMA_R_BITS _u(0x00000100) #define BUSCTRL_BUS_PRIORITY_DMA_R_MSB _u(8) #define BUSCTRL_BUS_PRIORITY_DMA_R_LSB _u(8) #define BUSCTRL_BUS_PRIORITY_DMA_R_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : BUSCTRL_BUS_PRIORITY_PROC1 // Description : 0 - low priority, 1 - high priority #define BUSCTRL_BUS_PRIORITY_PROC1_RESET _u(0x0) #define BUSCTRL_BUS_PRIORITY_PROC1_BITS _u(0x00000010) #define BUSCTRL_BUS_PRIORITY_PROC1_MSB _u(4) #define BUSCTRL_BUS_PRIORITY_PROC1_LSB _u(4) #define BUSCTRL_BUS_PRIORITY_PROC1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : BUSCTRL_BUS_PRIORITY_PROC0 // Description : 0 - low priority, 1 - high priority #define BUSCTRL_BUS_PRIORITY_PROC0_RESET _u(0x0) #define BUSCTRL_BUS_PRIORITY_PROC0_BITS _u(0x00000001) #define BUSCTRL_BUS_PRIORITY_PROC0_MSB _u(0) #define BUSCTRL_BUS_PRIORITY_PROC0_LSB _u(0) #define BUSCTRL_BUS_PRIORITY_PROC0_ACCESS "RW" // ============================================================================= // Register : BUSCTRL_BUS_PRIORITY_ACK // Description : Bus priority acknowledge // Goes to 1 once all arbiters have registered the new global // priority levels. // Arbiters update their local priority when servicing a new // nonsequential access. // In normal circumstances this will happen almost immediately. #define BUSCTRL_BUS_PRIORITY_ACK_OFFSET _u(0x00000004) #define BUSCTRL_BUS_PRIORITY_ACK_BITS _u(0x00000001) #define BUSCTRL_BUS_PRIORITY_ACK_RESET _u(0x00000000) #define BUSCTRL_BUS_PRIORITY_ACK_MSB _u(0) #define BUSCTRL_BUS_PRIORITY_ACK_LSB _u(0) #define BUSCTRL_BUS_PRIORITY_ACK_ACCESS "RO" // ============================================================================= // Register : BUSCTRL_PERFCTR0 // Description : Bus fabric performance counter 0 // Busfabric saturating performance counter 0 // Count some event signal from the busfabric arbiters. // Write any value to clear. Select an event to count using // PERFSEL0 #define BUSCTRL_PERFCTR0_OFFSET _u(0x00000008) #define BUSCTRL_PERFCTR0_BITS _u(0x00ffffff) #define BUSCTRL_PERFCTR0_RESET _u(0x00000000) #define BUSCTRL_PERFCTR0_MSB _u(23) #define BUSCTRL_PERFCTR0_LSB _u(0) #define BUSCTRL_PERFCTR0_ACCESS "WC" // ============================================================================= // Register : BUSCTRL_PERFSEL0 // Description : Bus fabric performance event select for PERFCTR0 // Select an event for PERFCTR0. Count either contested accesses, // or all accesses, on a downstream port of the main crossbar. // 0x00 -> apb_contested // 0x01 -> apb // 0x02 -> fastperi_contested // 0x03 -> fastperi // 0x04 -> sram5_contested // 0x05 -> sram5 // 0x06 -> sram4_contested // 0x07 -> sram4 // 0x08 -> sram3_contested // 0x09 -> sram3 // 0x0a -> sram2_contested // 0x0b -> sram2 // 0x0c -> sram1_contested // 0x0d -> sram1 // 0x0e -> sram0_contested // 0x0f -> sram0 // 0x10 -> xip_main_contested // 0x11 -> xip_main // 0x12 -> rom_contested // 0x13 -> rom #define BUSCTRL_PERFSEL0_OFFSET _u(0x0000000c) #define BUSCTRL_PERFSEL0_BITS _u(0x0000001f) #define BUSCTRL_PERFSEL0_RESET _u(0x0000001f) #define BUSCTRL_PERFSEL0_MSB _u(4) #define BUSCTRL_PERFSEL0_LSB _u(0) #define BUSCTRL_PERFSEL0_ACCESS "RW" #define BUSCTRL_PERFSEL0_VALUE_APB_CONTESTED _u(0x00) #define BUSCTRL_PERFSEL0_VALUE_APB _u(0x01) #define BUSCTRL_PERFSEL0_VALUE_FASTPERI_CONTESTED _u(0x02) #define BUSCTRL_PERFSEL0_VALUE_FASTPERI _u(0x03) #define BUSCTRL_PERFSEL0_VALUE_SRAM5_CONTESTED _u(0x04) #define BUSCTRL_PERFSEL0_VALUE_SRAM5 _u(0x05) #define BUSCTRL_PERFSEL0_VALUE_SRAM4_CONTESTED _u(0x06) #define BUSCTRL_PERFSEL0_VALUE_SRAM4 _u(0x07) #define BUSCTRL_PERFSEL0_VALUE_SRAM3_CONTESTED _u(0x08) #define BUSCTRL_PERFSEL0_VALUE_SRAM3 _u(0x09) #define BUSCTRL_PERFSEL0_VALUE_SRAM2_CONTESTED _u(0x0a) #define BUSCTRL_PERFSEL0_VALUE_SRAM2 _u(0x0b) #define BUSCTRL_PERFSEL0_VALUE_SRAM1_CONTESTED _u(0x0c) #define BUSCTRL_PERFSEL0_VALUE_SRAM1 _u(0x0d) #define BUSCTRL_PERFSEL0_VALUE_SRAM0_CONTESTED _u(0x0e) #define BUSCTRL_PERFSEL0_VALUE_SRAM0 _u(0x0f) #define BUSCTRL_PERFSEL0_VALUE_XIP_MAIN_CONTESTED _u(0x10) #define BUSCTRL_PERFSEL0_VALUE_XIP_MAIN _u(0x11) #define BUSCTRL_PERFSEL0_VALUE_ROM_CONTESTED _u(0x12) #define BUSCTRL_PERFSEL0_VALUE_ROM _u(0x13) // ============================================================================= // Register : BUSCTRL_PERFCTR1 // Description : Bus fabric performance counter 1 // Busfabric saturating performance counter 1 // Count some event signal from the busfabric arbiters. // Write any value to clear. Select an event to count using // PERFSEL1 #define BUSCTRL_PERFCTR1_OFFSET _u(0x00000010) #define BUSCTRL_PERFCTR1_BITS _u(0x00ffffff) #define BUSCTRL_PERFCTR1_RESET _u(0x00000000) #define BUSCTRL_PERFCTR1_MSB _u(23) #define BUSCTRL_PERFCTR1_LSB _u(0) #define BUSCTRL_PERFCTR1_ACCESS "WC" // ============================================================================= // Register : BUSCTRL_PERFSEL1 // Description : Bus fabric performance event select for PERFCTR1 // Select an event for PERFCTR1. Count either contested accesses, // or all accesses, on a downstream port of the main crossbar. // 0x00 -> apb_contested // 0x01 -> apb // 0x02 -> fastperi_contested // 0x03 -> fastperi // 0x04 -> sram5_contested // 0x05 -> sram5 // 0x06 -> sram4_contested // 0x07 -> sram4 // 0x08 -> sram3_contested // 0x09 -> sram3 // 0x0a -> sram2_contested // 0x0b -> sram2 // 0x0c -> sram1_contested // 0x0d -> sram1 // 0x0e -> sram0_contested // 0x0f -> sram0 // 0x10 -> xip_main_contested // 0x11 -> xip_main // 0x12 -> rom_contested // 0x13 -> rom #define BUSCTRL_PERFSEL1_OFFSET _u(0x00000014) #define BUSCTRL_PERFSEL1_BITS _u(0x0000001f) #define BUSCTRL_PERFSEL1_RESET _u(0x0000001f) #define BUSCTRL_PERFSEL1_MSB _u(4) #define BUSCTRL_PERFSEL1_LSB _u(0) #define BUSCTRL_PERFSEL1_ACCESS "RW" #define BUSCTRL_PERFSEL1_VALUE_APB_CONTESTED _u(0x00) #define BUSCTRL_PERFSEL1_VALUE_APB _u(0x01) #define BUSCTRL_PERFSEL1_VALUE_FASTPERI_CONTESTED _u(0x02) #define BUSCTRL_PERFSEL1_VALUE_FASTPERI _u(0x03) #define BUSCTRL_PERFSEL1_VALUE_SRAM5_CONTESTED _u(0x04) #define BUSCTRL_PERFSEL1_VALUE_SRAM5 _u(0x05) #define BUSCTRL_PERFSEL1_VALUE_SRAM4_CONTESTED _u(0x06) #define BUSCTRL_PERFSEL1_VALUE_SRAM4 _u(0x07) #define BUSCTRL_PERFSEL1_VALUE_SRAM3_CONTESTED _u(0x08) #define BUSCTRL_PERFSEL1_VALUE_SRAM3 _u(0x09) #define BUSCTRL_PERFSEL1_VALUE_SRAM2_CONTESTED _u(0x0a) #define BUSCTRL_PERFSEL1_VALUE_SRAM2 _u(0x0b) #define BUSCTRL_PERFSEL1_VALUE_SRAM1_CONTESTED _u(0x0c) #define BUSCTRL_PERFSEL1_VALUE_SRAM1 _u(0x0d) #define BUSCTRL_PERFSEL1_VALUE_SRAM0_CONTESTED _u(0x0e) #define BUSCTRL_PERFSEL1_VALUE_SRAM0 _u(0x0f) #define BUSCTRL_PERFSEL1_VALUE_XIP_MAIN_CONTESTED _u(0x10) #define BUSCTRL_PERFSEL1_VALUE_XIP_MAIN _u(0x11) #define BUSCTRL_PERFSEL1_VALUE_ROM_CONTESTED _u(0x12) #define BUSCTRL_PERFSEL1_VALUE_ROM _u(0x13) // ============================================================================= // Register : BUSCTRL_PERFCTR2 // Description : Bus fabric performance counter 2 // Busfabric saturating performance counter 2 // Count some event signal from the busfabric arbiters. // Write any value to clear. Select an event to count using // PERFSEL2 #define BUSCTRL_PERFCTR2_OFFSET _u(0x00000018) #define BUSCTRL_PERFCTR2_BITS _u(0x00ffffff) #define BUSCTRL_PERFCTR2_RESET _u(0x00000000) #define BUSCTRL_PERFCTR2_MSB _u(23) #define BUSCTRL_PERFCTR2_LSB _u(0) #define BUSCTRL_PERFCTR2_ACCESS "WC" // ============================================================================= // Register : BUSCTRL_PERFSEL2 // Description : Bus fabric performance event select for PERFCTR2 // Select an event for PERFCTR2. Count either contested accesses, // or all accesses, on a downstream port of the main crossbar. // 0x00 -> apb_contested // 0x01 -> apb // 0x02 -> fastperi_contested // 0x03 -> fastperi // 0x04 -> sram5_contested // 0x05 -> sram5 // 0x06 -> sram4_contested // 0x07 -> sram4 // 0x08 -> sram3_contested // 0x09 -> sram3 // 0x0a -> sram2_contested // 0x0b -> sram2 // 0x0c -> sram1_contested // 0x0d -> sram1 // 0x0e -> sram0_contested // 0x0f -> sram0 // 0x10 -> xip_main_contested // 0x11 -> xip_main // 0x12 -> rom_contested // 0x13 -> rom #define BUSCTRL_PERFSEL2_OFFSET _u(0x0000001c) #define BUSCTRL_PERFSEL2_BITS _u(0x0000001f) #define BUSCTRL_PERFSEL2_RESET _u(0x0000001f) #define BUSCTRL_PERFSEL2_MSB _u(4) #define BUSCTRL_PERFSEL2_LSB _u(0) #define BUSCTRL_PERFSEL2_ACCESS "RW" #define BUSCTRL_PERFSEL2_VALUE_APB_CONTESTED _u(0x00) #define BUSCTRL_PERFSEL2_VALUE_APB _u(0x01) #define BUSCTRL_PERFSEL2_VALUE_FASTPERI_CONTESTED _u(0x02) #define BUSCTRL_PERFSEL2_VALUE_FASTPERI _u(0x03) #define BUSCTRL_PERFSEL2_VALUE_SRAM5_CONTESTED _u(0x04) #define BUSCTRL_PERFSEL2_VALUE_SRAM5 _u(0x05) #define BUSCTRL_PERFSEL2_VALUE_SRAM4_CONTESTED _u(0x06) #define BUSCTRL_PERFSEL2_VALUE_SRAM4 _u(0x07) #define BUSCTRL_PERFSEL2_VALUE_SRAM3_CONTESTED _u(0x08) #define BUSCTRL_PERFSEL2_VALUE_SRAM3 _u(0x09) #define BUSCTRL_PERFSEL2_VALUE_SRAM2_CONTESTED _u(0x0a) #define BUSCTRL_PERFSEL2_VALUE_SRAM2 _u(0x0b) #define BUSCTRL_PERFSEL2_VALUE_SRAM1_CONTESTED _u(0x0c) #define BUSCTRL_PERFSEL2_VALUE_SRAM1 _u(0x0d) #define BUSCTRL_PERFSEL2_VALUE_SRAM0_CONTESTED _u(0x0e) #define BUSCTRL_PERFSEL2_VALUE_SRAM0 _u(0x0f) #define BUSCTRL_PERFSEL2_VALUE_XIP_MAIN_CONTESTED _u(0x10) #define BUSCTRL_PERFSEL2_VALUE_XIP_MAIN _u(0x11) #define BUSCTRL_PERFSEL2_VALUE_ROM_CONTESTED _u(0x12) #define BUSCTRL_PERFSEL2_VALUE_ROM _u(0x13) // ============================================================================= // Register : BUSCTRL_PERFCTR3 // Description : Bus fabric performance counter 3 // Busfabric saturating performance counter 3 // Count some event signal from the busfabric arbiters. // Write any value to clear. Select an event to count using // PERFSEL3 #define BUSCTRL_PERFCTR3_OFFSET _u(0x00000020) #define BUSCTRL_PERFCTR3_BITS _u(0x00ffffff) #define BUSCTRL_PERFCTR3_RESET _u(0x00000000) #define BUSCTRL_PERFCTR3_MSB _u(23) #define BUSCTRL_PERFCTR3_LSB _u(0) #define BUSCTRL_PERFCTR3_ACCESS "WC" // ============================================================================= // Register : BUSCTRL_PERFSEL3 // Description : Bus fabric performance event select for PERFCTR3 // Select an event for PERFCTR3. Count either contested accesses, // or all accesses, on a downstream port of the main crossbar. // 0x00 -> apb_contested // 0x01 -> apb // 0x02 -> fastperi_contested // 0x03 -> fastperi // 0x04 -> sram5_contested // 0x05 -> sram5 // 0x06 -> sram4_contested // 0x07 -> sram4 // 0x08 -> sram3_contested // 0x09 -> sram3 // 0x0a -> sram2_contested // 0x0b -> sram2 // 0x0c -> sram1_contested // 0x0d -> sram1 // 0x0e -> sram0_contested // 0x0f -> sram0 // 0x10 -> xip_main_contested // 0x11 -> xip_main // 0x12 -> rom_contested // 0x13 -> rom #define BUSCTRL_PERFSEL3_OFFSET _u(0x00000024) #define BUSCTRL_PERFSEL3_BITS _u(0x0000001f) #define BUSCTRL_PERFSEL3_RESET _u(0x0000001f) #define BUSCTRL_PERFSEL3_MSB _u(4) #define BUSCTRL_PERFSEL3_LSB _u(0) #define BUSCTRL_PERFSEL3_ACCESS "RW" #define BUSCTRL_PERFSEL3_VALUE_APB_CONTESTED _u(0x00) #define BUSCTRL_PERFSEL3_VALUE_APB _u(0x01) #define BUSCTRL_PERFSEL3_VALUE_FASTPERI_CONTESTED _u(0x02) #define BUSCTRL_PERFSEL3_VALUE_FASTPERI _u(0x03) #define BUSCTRL_PERFSEL3_VALUE_SRAM5_CONTESTED _u(0x04) #define BUSCTRL_PERFSEL3_VALUE_SRAM5 _u(0x05) #define BUSCTRL_PERFSEL3_VALUE_SRAM4_CONTESTED _u(0x06) #define BUSCTRL_PERFSEL3_VALUE_SRAM4 _u(0x07) #define BUSCTRL_PERFSEL3_VALUE_SRAM3_CONTESTED _u(0x08) #define BUSCTRL_PERFSEL3_VALUE_SRAM3 _u(0x09) #define BUSCTRL_PERFSEL3_VALUE_SRAM2_CONTESTED _u(0x0a) #define BUSCTRL_PERFSEL3_VALUE_SRAM2 _u(0x0b) #define BUSCTRL_PERFSEL3_VALUE_SRAM1_CONTESTED _u(0x0c) #define BUSCTRL_PERFSEL3_VALUE_SRAM1 _u(0x0d) #define BUSCTRL_PERFSEL3_VALUE_SRAM0_CONTESTED _u(0x0e) #define BUSCTRL_PERFSEL3_VALUE_SRAM0 _u(0x0f) #define BUSCTRL_PERFSEL3_VALUE_XIP_MAIN_CONTESTED _u(0x10) #define BUSCTRL_PERFSEL3_VALUE_XIP_MAIN _u(0x11) #define BUSCTRL_PERFSEL3_VALUE_ROM_CONTESTED _u(0x12) #define BUSCTRL_PERFSEL3_VALUE_ROM _u(0x13) // ============================================================================= #endif // HARDWARE_REGS_BUSCTRL_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/clocks.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : CLOCKS // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_CLOCKS_DEFINED #define HARDWARE_REGS_CLOCKS_DEFINED // ============================================================================= // Register : CLOCKS_CLK_GPOUT0_CTRL // Description : Clock control, can be changed on-the-fly (except for auxsrc) #define CLOCKS_CLK_GPOUT0_CTRL_OFFSET _u(0x00000000) #define CLOCKS_CLK_GPOUT0_CTRL_BITS _u(0x00131de0) #define CLOCKS_CLK_GPOUT0_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT0_CTRL_NUDGE // Description : An edge on this signal shifts the phase of the output by 1 // cycle of the input clock // This can be done at any time #define CLOCKS_CLK_GPOUT0_CTRL_NUDGE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT0_CTRL_NUDGE_BITS _u(0x00100000) #define CLOCKS_CLK_GPOUT0_CTRL_NUDGE_MSB _u(20) #define CLOCKS_CLK_GPOUT0_CTRL_NUDGE_LSB _u(20) #define CLOCKS_CLK_GPOUT0_CTRL_NUDGE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT0_CTRL_PHASE // Description : This delays the enable signal by up to 3 cycles of the input // clock // This must be set before the clock is enabled to have any effect #define CLOCKS_CLK_GPOUT0_CTRL_PHASE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT0_CTRL_PHASE_BITS _u(0x00030000) #define CLOCKS_CLK_GPOUT0_CTRL_PHASE_MSB _u(17) #define CLOCKS_CLK_GPOUT0_CTRL_PHASE_LSB _u(16) #define CLOCKS_CLK_GPOUT0_CTRL_PHASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT0_CTRL_DC50 // Description : Enables duty cycle correction for odd divisors #define CLOCKS_CLK_GPOUT0_CTRL_DC50_RESET _u(0x0) #define CLOCKS_CLK_GPOUT0_CTRL_DC50_BITS _u(0x00001000) #define CLOCKS_CLK_GPOUT0_CTRL_DC50_MSB _u(12) #define CLOCKS_CLK_GPOUT0_CTRL_DC50_LSB _u(12) #define CLOCKS_CLK_GPOUT0_CTRL_DC50_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT0_CTRL_ENABLE // Description : Starts and stops the clock generator cleanly #define CLOCKS_CLK_GPOUT0_CTRL_ENABLE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT0_CTRL_ENABLE_BITS _u(0x00000800) #define CLOCKS_CLK_GPOUT0_CTRL_ENABLE_MSB _u(11) #define CLOCKS_CLK_GPOUT0_CTRL_ENABLE_LSB _u(11) #define CLOCKS_CLK_GPOUT0_CTRL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT0_CTRL_KILL // Description : Asynchronously kills the clock generator #define CLOCKS_CLK_GPOUT0_CTRL_KILL_RESET _u(0x0) #define CLOCKS_CLK_GPOUT0_CTRL_KILL_BITS _u(0x00000400) #define CLOCKS_CLK_GPOUT0_CTRL_KILL_MSB _u(10) #define CLOCKS_CLK_GPOUT0_CTRL_KILL_LSB _u(10) #define CLOCKS_CLK_GPOUT0_CTRL_KILL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT0_CTRL_AUXSRC // Description : Selects the auxiliary clock source, will glitch when switching // 0x0 -> clksrc_pll_sys // 0x1 -> clksrc_gpin0 // 0x2 -> clksrc_gpin1 // 0x3 -> clksrc_pll_usb // 0x4 -> rosc_clksrc // 0x5 -> xosc_clksrc // 0x6 -> clk_sys // 0x7 -> clk_usb // 0x8 -> clk_adc // 0x9 -> clk_rtc // 0xa -> clk_ref #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_RESET _u(0x0) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_BITS _u(0x000001e0) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_MSB _u(8) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_LSB _u(5) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_ACCESS "RW" #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS _u(0x0) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 _u(0x1) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 _u(0x2) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB _u(0x3) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_ROSC_CLKSRC _u(0x4) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_XOSC_CLKSRC _u(0x5) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLK_SYS _u(0x6) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLK_USB _u(0x7) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLK_ADC _u(0x8) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLK_RTC _u(0x9) #define CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLK_REF _u(0xa) // ============================================================================= // Register : CLOCKS_CLK_GPOUT0_DIV // Description : Clock divisor, can be changed on-the-fly #define CLOCKS_CLK_GPOUT0_DIV_OFFSET _u(0x00000004) #define CLOCKS_CLK_GPOUT0_DIV_BITS _u(0xffffffff) #define CLOCKS_CLK_GPOUT0_DIV_RESET _u(0x00000100) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT0_DIV_INT // Description : Integer component of the divisor, 0 -> divide by 2^16 #define CLOCKS_CLK_GPOUT0_DIV_INT_RESET _u(0x000001) #define CLOCKS_CLK_GPOUT0_DIV_INT_BITS _u(0xffffff00) #define CLOCKS_CLK_GPOUT0_DIV_INT_MSB _u(31) #define CLOCKS_CLK_GPOUT0_DIV_INT_LSB _u(8) #define CLOCKS_CLK_GPOUT0_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT0_DIV_FRAC // Description : Fractional component of the divisor #define CLOCKS_CLK_GPOUT0_DIV_FRAC_RESET _u(0x00) #define CLOCKS_CLK_GPOUT0_DIV_FRAC_BITS _u(0x000000ff) #define CLOCKS_CLK_GPOUT0_DIV_FRAC_MSB _u(7) #define CLOCKS_CLK_GPOUT0_DIV_FRAC_LSB _u(0) #define CLOCKS_CLK_GPOUT0_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : CLOCKS_CLK_GPOUT0_SELECTED // Description : Indicates which SRC is currently selected by the glitchless mux // (one-hot). // This slice does not have a glitchless mux (only the AUX_SRC // field is present, not SRC) so this register is hardwired to // 0x1. #define CLOCKS_CLK_GPOUT0_SELECTED_OFFSET _u(0x00000008) #define CLOCKS_CLK_GPOUT0_SELECTED_BITS _u(0xffffffff) #define CLOCKS_CLK_GPOUT0_SELECTED_RESET _u(0x00000001) #define CLOCKS_CLK_GPOUT0_SELECTED_MSB _u(31) #define CLOCKS_CLK_GPOUT0_SELECTED_LSB _u(0) #define CLOCKS_CLK_GPOUT0_SELECTED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_CLK_GPOUT1_CTRL // Description : Clock control, can be changed on-the-fly (except for auxsrc) #define CLOCKS_CLK_GPOUT1_CTRL_OFFSET _u(0x0000000c) #define CLOCKS_CLK_GPOUT1_CTRL_BITS _u(0x00131de0) #define CLOCKS_CLK_GPOUT1_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT1_CTRL_NUDGE // Description : An edge on this signal shifts the phase of the output by 1 // cycle of the input clock // This can be done at any time #define CLOCKS_CLK_GPOUT1_CTRL_NUDGE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT1_CTRL_NUDGE_BITS _u(0x00100000) #define CLOCKS_CLK_GPOUT1_CTRL_NUDGE_MSB _u(20) #define CLOCKS_CLK_GPOUT1_CTRL_NUDGE_LSB _u(20) #define CLOCKS_CLK_GPOUT1_CTRL_NUDGE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT1_CTRL_PHASE // Description : This delays the enable signal by up to 3 cycles of the input // clock // This must be set before the clock is enabled to have any effect #define CLOCKS_CLK_GPOUT1_CTRL_PHASE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT1_CTRL_PHASE_BITS _u(0x00030000) #define CLOCKS_CLK_GPOUT1_CTRL_PHASE_MSB _u(17) #define CLOCKS_CLK_GPOUT1_CTRL_PHASE_LSB _u(16) #define CLOCKS_CLK_GPOUT1_CTRL_PHASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT1_CTRL_DC50 // Description : Enables duty cycle correction for odd divisors #define CLOCKS_CLK_GPOUT1_CTRL_DC50_RESET _u(0x0) #define CLOCKS_CLK_GPOUT1_CTRL_DC50_BITS _u(0x00001000) #define CLOCKS_CLK_GPOUT1_CTRL_DC50_MSB _u(12) #define CLOCKS_CLK_GPOUT1_CTRL_DC50_LSB _u(12) #define CLOCKS_CLK_GPOUT1_CTRL_DC50_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT1_CTRL_ENABLE // Description : Starts and stops the clock generator cleanly #define CLOCKS_CLK_GPOUT1_CTRL_ENABLE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT1_CTRL_ENABLE_BITS _u(0x00000800) #define CLOCKS_CLK_GPOUT1_CTRL_ENABLE_MSB _u(11) #define CLOCKS_CLK_GPOUT1_CTRL_ENABLE_LSB _u(11) #define CLOCKS_CLK_GPOUT1_CTRL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT1_CTRL_KILL // Description : Asynchronously kills the clock generator #define CLOCKS_CLK_GPOUT1_CTRL_KILL_RESET _u(0x0) #define CLOCKS_CLK_GPOUT1_CTRL_KILL_BITS _u(0x00000400) #define CLOCKS_CLK_GPOUT1_CTRL_KILL_MSB _u(10) #define CLOCKS_CLK_GPOUT1_CTRL_KILL_LSB _u(10) #define CLOCKS_CLK_GPOUT1_CTRL_KILL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT1_CTRL_AUXSRC // Description : Selects the auxiliary clock source, will glitch when switching // 0x0 -> clksrc_pll_sys // 0x1 -> clksrc_gpin0 // 0x2 -> clksrc_gpin1 // 0x3 -> clksrc_pll_usb // 0x4 -> rosc_clksrc // 0x5 -> xosc_clksrc // 0x6 -> clk_sys // 0x7 -> clk_usb // 0x8 -> clk_adc // 0x9 -> clk_rtc // 0xa -> clk_ref #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_RESET _u(0x0) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_BITS _u(0x000001e0) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_MSB _u(8) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_LSB _u(5) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_ACCESS "RW" #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS _u(0x0) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 _u(0x1) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 _u(0x2) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB _u(0x3) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_ROSC_CLKSRC _u(0x4) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_XOSC_CLKSRC _u(0x5) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLK_SYS _u(0x6) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLK_USB _u(0x7) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLK_ADC _u(0x8) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLK_RTC _u(0x9) #define CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLK_REF _u(0xa) // ============================================================================= // Register : CLOCKS_CLK_GPOUT1_DIV // Description : Clock divisor, can be changed on-the-fly #define CLOCKS_CLK_GPOUT1_DIV_OFFSET _u(0x00000010) #define CLOCKS_CLK_GPOUT1_DIV_BITS _u(0xffffffff) #define CLOCKS_CLK_GPOUT1_DIV_RESET _u(0x00000100) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT1_DIV_INT // Description : Integer component of the divisor, 0 -> divide by 2^16 #define CLOCKS_CLK_GPOUT1_DIV_INT_RESET _u(0x000001) #define CLOCKS_CLK_GPOUT1_DIV_INT_BITS _u(0xffffff00) #define CLOCKS_CLK_GPOUT1_DIV_INT_MSB _u(31) #define CLOCKS_CLK_GPOUT1_DIV_INT_LSB _u(8) #define CLOCKS_CLK_GPOUT1_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT1_DIV_FRAC // Description : Fractional component of the divisor #define CLOCKS_CLK_GPOUT1_DIV_FRAC_RESET _u(0x00) #define CLOCKS_CLK_GPOUT1_DIV_FRAC_BITS _u(0x000000ff) #define CLOCKS_CLK_GPOUT1_DIV_FRAC_MSB _u(7) #define CLOCKS_CLK_GPOUT1_DIV_FRAC_LSB _u(0) #define CLOCKS_CLK_GPOUT1_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : CLOCKS_CLK_GPOUT1_SELECTED // Description : Indicates which SRC is currently selected by the glitchless mux // (one-hot). // This slice does not have a glitchless mux (only the AUX_SRC // field is present, not SRC) so this register is hardwired to // 0x1. #define CLOCKS_CLK_GPOUT1_SELECTED_OFFSET _u(0x00000014) #define CLOCKS_CLK_GPOUT1_SELECTED_BITS _u(0xffffffff) #define CLOCKS_CLK_GPOUT1_SELECTED_RESET _u(0x00000001) #define CLOCKS_CLK_GPOUT1_SELECTED_MSB _u(31) #define CLOCKS_CLK_GPOUT1_SELECTED_LSB _u(0) #define CLOCKS_CLK_GPOUT1_SELECTED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_CLK_GPOUT2_CTRL // Description : Clock control, can be changed on-the-fly (except for auxsrc) #define CLOCKS_CLK_GPOUT2_CTRL_OFFSET _u(0x00000018) #define CLOCKS_CLK_GPOUT2_CTRL_BITS _u(0x00131de0) #define CLOCKS_CLK_GPOUT2_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT2_CTRL_NUDGE // Description : An edge on this signal shifts the phase of the output by 1 // cycle of the input clock // This can be done at any time #define CLOCKS_CLK_GPOUT2_CTRL_NUDGE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT2_CTRL_NUDGE_BITS _u(0x00100000) #define CLOCKS_CLK_GPOUT2_CTRL_NUDGE_MSB _u(20) #define CLOCKS_CLK_GPOUT2_CTRL_NUDGE_LSB _u(20) #define CLOCKS_CLK_GPOUT2_CTRL_NUDGE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT2_CTRL_PHASE // Description : This delays the enable signal by up to 3 cycles of the input // clock // This must be set before the clock is enabled to have any effect #define CLOCKS_CLK_GPOUT2_CTRL_PHASE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT2_CTRL_PHASE_BITS _u(0x00030000) #define CLOCKS_CLK_GPOUT2_CTRL_PHASE_MSB _u(17) #define CLOCKS_CLK_GPOUT2_CTRL_PHASE_LSB _u(16) #define CLOCKS_CLK_GPOUT2_CTRL_PHASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT2_CTRL_DC50 // Description : Enables duty cycle correction for odd divisors #define CLOCKS_CLK_GPOUT2_CTRL_DC50_RESET _u(0x0) #define CLOCKS_CLK_GPOUT2_CTRL_DC50_BITS _u(0x00001000) #define CLOCKS_CLK_GPOUT2_CTRL_DC50_MSB _u(12) #define CLOCKS_CLK_GPOUT2_CTRL_DC50_LSB _u(12) #define CLOCKS_CLK_GPOUT2_CTRL_DC50_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT2_CTRL_ENABLE // Description : Starts and stops the clock generator cleanly #define CLOCKS_CLK_GPOUT2_CTRL_ENABLE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT2_CTRL_ENABLE_BITS _u(0x00000800) #define CLOCKS_CLK_GPOUT2_CTRL_ENABLE_MSB _u(11) #define CLOCKS_CLK_GPOUT2_CTRL_ENABLE_LSB _u(11) #define CLOCKS_CLK_GPOUT2_CTRL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT2_CTRL_KILL // Description : Asynchronously kills the clock generator #define CLOCKS_CLK_GPOUT2_CTRL_KILL_RESET _u(0x0) #define CLOCKS_CLK_GPOUT2_CTRL_KILL_BITS _u(0x00000400) #define CLOCKS_CLK_GPOUT2_CTRL_KILL_MSB _u(10) #define CLOCKS_CLK_GPOUT2_CTRL_KILL_LSB _u(10) #define CLOCKS_CLK_GPOUT2_CTRL_KILL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT2_CTRL_AUXSRC // Description : Selects the auxiliary clock source, will glitch when switching // 0x0 -> clksrc_pll_sys // 0x1 -> clksrc_gpin0 // 0x2 -> clksrc_gpin1 // 0x3 -> clksrc_pll_usb // 0x4 -> rosc_clksrc_ph // 0x5 -> xosc_clksrc // 0x6 -> clk_sys // 0x7 -> clk_usb // 0x8 -> clk_adc // 0x9 -> clk_rtc // 0xa -> clk_ref #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_RESET _u(0x0) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_BITS _u(0x000001e0) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_MSB _u(8) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_LSB _u(5) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_ACCESS "RW" #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS _u(0x0) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 _u(0x1) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 _u(0x2) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB _u(0x3) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_ROSC_CLKSRC_PH _u(0x4) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_XOSC_CLKSRC _u(0x5) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLK_SYS _u(0x6) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLK_USB _u(0x7) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLK_ADC _u(0x8) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLK_RTC _u(0x9) #define CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLK_REF _u(0xa) // ============================================================================= // Register : CLOCKS_CLK_GPOUT2_DIV // Description : Clock divisor, can be changed on-the-fly #define CLOCKS_CLK_GPOUT2_DIV_OFFSET _u(0x0000001c) #define CLOCKS_CLK_GPOUT2_DIV_BITS _u(0xffffffff) #define CLOCKS_CLK_GPOUT2_DIV_RESET _u(0x00000100) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT2_DIV_INT // Description : Integer component of the divisor, 0 -> divide by 2^16 #define CLOCKS_CLK_GPOUT2_DIV_INT_RESET _u(0x000001) #define CLOCKS_CLK_GPOUT2_DIV_INT_BITS _u(0xffffff00) #define CLOCKS_CLK_GPOUT2_DIV_INT_MSB _u(31) #define CLOCKS_CLK_GPOUT2_DIV_INT_LSB _u(8) #define CLOCKS_CLK_GPOUT2_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT2_DIV_FRAC // Description : Fractional component of the divisor #define CLOCKS_CLK_GPOUT2_DIV_FRAC_RESET _u(0x00) #define CLOCKS_CLK_GPOUT2_DIV_FRAC_BITS _u(0x000000ff) #define CLOCKS_CLK_GPOUT2_DIV_FRAC_MSB _u(7) #define CLOCKS_CLK_GPOUT2_DIV_FRAC_LSB _u(0) #define CLOCKS_CLK_GPOUT2_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : CLOCKS_CLK_GPOUT2_SELECTED // Description : Indicates which SRC is currently selected by the glitchless mux // (one-hot). // This slice does not have a glitchless mux (only the AUX_SRC // field is present, not SRC) so this register is hardwired to // 0x1. #define CLOCKS_CLK_GPOUT2_SELECTED_OFFSET _u(0x00000020) #define CLOCKS_CLK_GPOUT2_SELECTED_BITS _u(0xffffffff) #define CLOCKS_CLK_GPOUT2_SELECTED_RESET _u(0x00000001) #define CLOCKS_CLK_GPOUT2_SELECTED_MSB _u(31) #define CLOCKS_CLK_GPOUT2_SELECTED_LSB _u(0) #define CLOCKS_CLK_GPOUT2_SELECTED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_CLK_GPOUT3_CTRL // Description : Clock control, can be changed on-the-fly (except for auxsrc) #define CLOCKS_CLK_GPOUT3_CTRL_OFFSET _u(0x00000024) #define CLOCKS_CLK_GPOUT3_CTRL_BITS _u(0x00131de0) #define CLOCKS_CLK_GPOUT3_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT3_CTRL_NUDGE // Description : An edge on this signal shifts the phase of the output by 1 // cycle of the input clock // This can be done at any time #define CLOCKS_CLK_GPOUT3_CTRL_NUDGE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT3_CTRL_NUDGE_BITS _u(0x00100000) #define CLOCKS_CLK_GPOUT3_CTRL_NUDGE_MSB _u(20) #define CLOCKS_CLK_GPOUT3_CTRL_NUDGE_LSB _u(20) #define CLOCKS_CLK_GPOUT3_CTRL_NUDGE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT3_CTRL_PHASE // Description : This delays the enable signal by up to 3 cycles of the input // clock // This must be set before the clock is enabled to have any effect #define CLOCKS_CLK_GPOUT3_CTRL_PHASE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT3_CTRL_PHASE_BITS _u(0x00030000) #define CLOCKS_CLK_GPOUT3_CTRL_PHASE_MSB _u(17) #define CLOCKS_CLK_GPOUT3_CTRL_PHASE_LSB _u(16) #define CLOCKS_CLK_GPOUT3_CTRL_PHASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT3_CTRL_DC50 // Description : Enables duty cycle correction for odd divisors #define CLOCKS_CLK_GPOUT3_CTRL_DC50_RESET _u(0x0) #define CLOCKS_CLK_GPOUT3_CTRL_DC50_BITS _u(0x00001000) #define CLOCKS_CLK_GPOUT3_CTRL_DC50_MSB _u(12) #define CLOCKS_CLK_GPOUT3_CTRL_DC50_LSB _u(12) #define CLOCKS_CLK_GPOUT3_CTRL_DC50_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT3_CTRL_ENABLE // Description : Starts and stops the clock generator cleanly #define CLOCKS_CLK_GPOUT3_CTRL_ENABLE_RESET _u(0x0) #define CLOCKS_CLK_GPOUT3_CTRL_ENABLE_BITS _u(0x00000800) #define CLOCKS_CLK_GPOUT3_CTRL_ENABLE_MSB _u(11) #define CLOCKS_CLK_GPOUT3_CTRL_ENABLE_LSB _u(11) #define CLOCKS_CLK_GPOUT3_CTRL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT3_CTRL_KILL // Description : Asynchronously kills the clock generator #define CLOCKS_CLK_GPOUT3_CTRL_KILL_RESET _u(0x0) #define CLOCKS_CLK_GPOUT3_CTRL_KILL_BITS _u(0x00000400) #define CLOCKS_CLK_GPOUT3_CTRL_KILL_MSB _u(10) #define CLOCKS_CLK_GPOUT3_CTRL_KILL_LSB _u(10) #define CLOCKS_CLK_GPOUT3_CTRL_KILL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT3_CTRL_AUXSRC // Description : Selects the auxiliary clock source, will glitch when switching // 0x0 -> clksrc_pll_sys // 0x1 -> clksrc_gpin0 // 0x2 -> clksrc_gpin1 // 0x3 -> clksrc_pll_usb // 0x4 -> rosc_clksrc_ph // 0x5 -> xosc_clksrc // 0x6 -> clk_sys // 0x7 -> clk_usb // 0x8 -> clk_adc // 0x9 -> clk_rtc // 0xa -> clk_ref #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_RESET _u(0x0) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_BITS _u(0x000001e0) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_MSB _u(8) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_LSB _u(5) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_ACCESS "RW" #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS _u(0x0) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 _u(0x1) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 _u(0x2) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB _u(0x3) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_ROSC_CLKSRC_PH _u(0x4) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_XOSC_CLKSRC _u(0x5) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLK_SYS _u(0x6) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLK_USB _u(0x7) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLK_ADC _u(0x8) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLK_RTC _u(0x9) #define CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLK_REF _u(0xa) // ============================================================================= // Register : CLOCKS_CLK_GPOUT3_DIV // Description : Clock divisor, can be changed on-the-fly #define CLOCKS_CLK_GPOUT3_DIV_OFFSET _u(0x00000028) #define CLOCKS_CLK_GPOUT3_DIV_BITS _u(0xffffffff) #define CLOCKS_CLK_GPOUT3_DIV_RESET _u(0x00000100) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT3_DIV_INT // Description : Integer component of the divisor, 0 -> divide by 2^16 #define CLOCKS_CLK_GPOUT3_DIV_INT_RESET _u(0x000001) #define CLOCKS_CLK_GPOUT3_DIV_INT_BITS _u(0xffffff00) #define CLOCKS_CLK_GPOUT3_DIV_INT_MSB _u(31) #define CLOCKS_CLK_GPOUT3_DIV_INT_LSB _u(8) #define CLOCKS_CLK_GPOUT3_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_GPOUT3_DIV_FRAC // Description : Fractional component of the divisor #define CLOCKS_CLK_GPOUT3_DIV_FRAC_RESET _u(0x00) #define CLOCKS_CLK_GPOUT3_DIV_FRAC_BITS _u(0x000000ff) #define CLOCKS_CLK_GPOUT3_DIV_FRAC_MSB _u(7) #define CLOCKS_CLK_GPOUT3_DIV_FRAC_LSB _u(0) #define CLOCKS_CLK_GPOUT3_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : CLOCKS_CLK_GPOUT3_SELECTED // Description : Indicates which SRC is currently selected by the glitchless mux // (one-hot). // This slice does not have a glitchless mux (only the AUX_SRC // field is present, not SRC) so this register is hardwired to // 0x1. #define CLOCKS_CLK_GPOUT3_SELECTED_OFFSET _u(0x0000002c) #define CLOCKS_CLK_GPOUT3_SELECTED_BITS _u(0xffffffff) #define CLOCKS_CLK_GPOUT3_SELECTED_RESET _u(0x00000001) #define CLOCKS_CLK_GPOUT3_SELECTED_MSB _u(31) #define CLOCKS_CLK_GPOUT3_SELECTED_LSB _u(0) #define CLOCKS_CLK_GPOUT3_SELECTED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_CLK_REF_CTRL // Description : Clock control, can be changed on-the-fly (except for auxsrc) #define CLOCKS_CLK_REF_CTRL_OFFSET _u(0x00000030) #define CLOCKS_CLK_REF_CTRL_BITS _u(0x00000063) #define CLOCKS_CLK_REF_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_REF_CTRL_AUXSRC // Description : Selects the auxiliary clock source, will glitch when switching // 0x0 -> clksrc_pll_usb // 0x1 -> clksrc_gpin0 // 0x2 -> clksrc_gpin1 #define CLOCKS_CLK_REF_CTRL_AUXSRC_RESET _u(0x0) #define CLOCKS_CLK_REF_CTRL_AUXSRC_BITS _u(0x00000060) #define CLOCKS_CLK_REF_CTRL_AUXSRC_MSB _u(6) #define CLOCKS_CLK_REF_CTRL_AUXSRC_LSB _u(5) #define CLOCKS_CLK_REF_CTRL_AUXSRC_ACCESS "RW" #define CLOCKS_CLK_REF_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB _u(0x0) #define CLOCKS_CLK_REF_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 _u(0x1) #define CLOCKS_CLK_REF_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 _u(0x2) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_REF_CTRL_SRC // Description : Selects the clock source glitchlessly, can be changed // on-the-fly // 0x0 -> rosc_clksrc_ph // 0x1 -> clksrc_clk_ref_aux // 0x2 -> xosc_clksrc #define CLOCKS_CLK_REF_CTRL_SRC_RESET "-" #define CLOCKS_CLK_REF_CTRL_SRC_BITS _u(0x00000003) #define CLOCKS_CLK_REF_CTRL_SRC_MSB _u(1) #define CLOCKS_CLK_REF_CTRL_SRC_LSB _u(0) #define CLOCKS_CLK_REF_CTRL_SRC_ACCESS "RW" #define CLOCKS_CLK_REF_CTRL_SRC_VALUE_ROSC_CLKSRC_PH _u(0x0) #define CLOCKS_CLK_REF_CTRL_SRC_VALUE_CLKSRC_CLK_REF_AUX _u(0x1) #define CLOCKS_CLK_REF_CTRL_SRC_VALUE_XOSC_CLKSRC _u(0x2) // ============================================================================= // Register : CLOCKS_CLK_REF_DIV // Description : Clock divisor, can be changed on-the-fly #define CLOCKS_CLK_REF_DIV_OFFSET _u(0x00000034) #define CLOCKS_CLK_REF_DIV_BITS _u(0x00000300) #define CLOCKS_CLK_REF_DIV_RESET _u(0x00000100) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_REF_DIV_INT // Description : Integer component of the divisor, 0 -> divide by 2^16 #define CLOCKS_CLK_REF_DIV_INT_RESET _u(0x1) #define CLOCKS_CLK_REF_DIV_INT_BITS _u(0x00000300) #define CLOCKS_CLK_REF_DIV_INT_MSB _u(9) #define CLOCKS_CLK_REF_DIV_INT_LSB _u(8) #define CLOCKS_CLK_REF_DIV_INT_ACCESS "RW" // ============================================================================= // Register : CLOCKS_CLK_REF_SELECTED // Description : Indicates which SRC is currently selected by the glitchless mux // (one-hot). // The glitchless multiplexer does not switch instantaneously (to // avoid glitches), so software should poll this register to wait // for the switch to complete. This register contains one decoded // bit for each of the clock sources enumerated in the CTRL SRC // field. At most one of these bits will be set at any time, // indicating that clock is currently present at the output of the // glitchless mux. Whilst switching is in progress, this register // may briefly show all-0s. #define CLOCKS_CLK_REF_SELECTED_OFFSET _u(0x00000038) #define CLOCKS_CLK_REF_SELECTED_BITS _u(0xffffffff) #define CLOCKS_CLK_REF_SELECTED_RESET _u(0x00000001) #define CLOCKS_CLK_REF_SELECTED_MSB _u(31) #define CLOCKS_CLK_REF_SELECTED_LSB _u(0) #define CLOCKS_CLK_REF_SELECTED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_CLK_SYS_CTRL // Description : Clock control, can be changed on-the-fly (except for auxsrc) #define CLOCKS_CLK_SYS_CTRL_OFFSET _u(0x0000003c) #define CLOCKS_CLK_SYS_CTRL_BITS _u(0x000000e1) #define CLOCKS_CLK_SYS_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_SYS_CTRL_AUXSRC // Description : Selects the auxiliary clock source, will glitch when switching // 0x0 -> clksrc_pll_sys // 0x1 -> clksrc_pll_usb // 0x2 -> rosc_clksrc // 0x3 -> xosc_clksrc // 0x4 -> clksrc_gpin0 // 0x5 -> clksrc_gpin1 #define CLOCKS_CLK_SYS_CTRL_AUXSRC_RESET _u(0x0) #define CLOCKS_CLK_SYS_CTRL_AUXSRC_BITS _u(0x000000e0) #define CLOCKS_CLK_SYS_CTRL_AUXSRC_MSB _u(7) #define CLOCKS_CLK_SYS_CTRL_AUXSRC_LSB _u(5) #define CLOCKS_CLK_SYS_CTRL_AUXSRC_ACCESS "RW" #define CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS _u(0x0) #define CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB _u(0x1) #define CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_ROSC_CLKSRC _u(0x2) #define CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_XOSC_CLKSRC _u(0x3) #define CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 _u(0x4) #define CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 _u(0x5) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_SYS_CTRL_SRC // Description : Selects the clock source glitchlessly, can be changed // on-the-fly // 0x0 -> clk_ref // 0x1 -> clksrc_clk_sys_aux #define CLOCKS_CLK_SYS_CTRL_SRC_RESET _u(0x0) #define CLOCKS_CLK_SYS_CTRL_SRC_BITS _u(0x00000001) #define CLOCKS_CLK_SYS_CTRL_SRC_MSB _u(0) #define CLOCKS_CLK_SYS_CTRL_SRC_LSB _u(0) #define CLOCKS_CLK_SYS_CTRL_SRC_ACCESS "RW" #define CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLK_REF _u(0x0) #define CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX _u(0x1) // ============================================================================= // Register : CLOCKS_CLK_SYS_DIV // Description : Clock divisor, can be changed on-the-fly #define CLOCKS_CLK_SYS_DIV_OFFSET _u(0x00000040) #define CLOCKS_CLK_SYS_DIV_BITS _u(0xffffffff) #define CLOCKS_CLK_SYS_DIV_RESET _u(0x00000100) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_SYS_DIV_INT // Description : Integer component of the divisor, 0 -> divide by 2^16 #define CLOCKS_CLK_SYS_DIV_INT_RESET _u(0x000001) #define CLOCKS_CLK_SYS_DIV_INT_BITS _u(0xffffff00) #define CLOCKS_CLK_SYS_DIV_INT_MSB _u(31) #define CLOCKS_CLK_SYS_DIV_INT_LSB _u(8) #define CLOCKS_CLK_SYS_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_SYS_DIV_FRAC // Description : Fractional component of the divisor #define CLOCKS_CLK_SYS_DIV_FRAC_RESET _u(0x00) #define CLOCKS_CLK_SYS_DIV_FRAC_BITS _u(0x000000ff) #define CLOCKS_CLK_SYS_DIV_FRAC_MSB _u(7) #define CLOCKS_CLK_SYS_DIV_FRAC_LSB _u(0) #define CLOCKS_CLK_SYS_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : CLOCKS_CLK_SYS_SELECTED // Description : Indicates which SRC is currently selected by the glitchless mux // (one-hot). // The glitchless multiplexer does not switch instantaneously (to // avoid glitches), so software should poll this register to wait // for the switch to complete. This register contains one decoded // bit for each of the clock sources enumerated in the CTRL SRC // field. At most one of these bits will be set at any time, // indicating that clock is currently present at the output of the // glitchless mux. Whilst switching is in progress, this register // may briefly show all-0s. #define CLOCKS_CLK_SYS_SELECTED_OFFSET _u(0x00000044) #define CLOCKS_CLK_SYS_SELECTED_BITS _u(0xffffffff) #define CLOCKS_CLK_SYS_SELECTED_RESET _u(0x00000001) #define CLOCKS_CLK_SYS_SELECTED_MSB _u(31) #define CLOCKS_CLK_SYS_SELECTED_LSB _u(0) #define CLOCKS_CLK_SYS_SELECTED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_CLK_PERI_CTRL // Description : Clock control, can be changed on-the-fly (except for auxsrc) #define CLOCKS_CLK_PERI_CTRL_OFFSET _u(0x00000048) #define CLOCKS_CLK_PERI_CTRL_BITS _u(0x00000ce0) #define CLOCKS_CLK_PERI_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_PERI_CTRL_ENABLE // Description : Starts and stops the clock generator cleanly #define CLOCKS_CLK_PERI_CTRL_ENABLE_RESET _u(0x0) #define CLOCKS_CLK_PERI_CTRL_ENABLE_BITS _u(0x00000800) #define CLOCKS_CLK_PERI_CTRL_ENABLE_MSB _u(11) #define CLOCKS_CLK_PERI_CTRL_ENABLE_LSB _u(11) #define CLOCKS_CLK_PERI_CTRL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_PERI_CTRL_KILL // Description : Asynchronously kills the clock generator #define CLOCKS_CLK_PERI_CTRL_KILL_RESET _u(0x0) #define CLOCKS_CLK_PERI_CTRL_KILL_BITS _u(0x00000400) #define CLOCKS_CLK_PERI_CTRL_KILL_MSB _u(10) #define CLOCKS_CLK_PERI_CTRL_KILL_LSB _u(10) #define CLOCKS_CLK_PERI_CTRL_KILL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_PERI_CTRL_AUXSRC // Description : Selects the auxiliary clock source, will glitch when switching // 0x0 -> clk_sys // 0x1 -> clksrc_pll_sys // 0x2 -> clksrc_pll_usb // 0x3 -> rosc_clksrc_ph // 0x4 -> xosc_clksrc // 0x5 -> clksrc_gpin0 // 0x6 -> clksrc_gpin1 #define CLOCKS_CLK_PERI_CTRL_AUXSRC_RESET _u(0x0) #define CLOCKS_CLK_PERI_CTRL_AUXSRC_BITS _u(0x000000e0) #define CLOCKS_CLK_PERI_CTRL_AUXSRC_MSB _u(7) #define CLOCKS_CLK_PERI_CTRL_AUXSRC_LSB _u(5) #define CLOCKS_CLK_PERI_CTRL_AUXSRC_ACCESS "RW" #define CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLK_SYS _u(0x0) #define CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS _u(0x1) #define CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB _u(0x2) #define CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_ROSC_CLKSRC_PH _u(0x3) #define CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_XOSC_CLKSRC _u(0x4) #define CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 _u(0x5) #define CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 _u(0x6) // ============================================================================= // Register : CLOCKS_CLK_PERI_SELECTED // Description : Indicates which SRC is currently selected by the glitchless mux // (one-hot). // This slice does not have a glitchless mux (only the AUX_SRC // field is present, not SRC) so this register is hardwired to // 0x1. #define CLOCKS_CLK_PERI_SELECTED_OFFSET _u(0x00000050) #define CLOCKS_CLK_PERI_SELECTED_BITS _u(0xffffffff) #define CLOCKS_CLK_PERI_SELECTED_RESET _u(0x00000001) #define CLOCKS_CLK_PERI_SELECTED_MSB _u(31) #define CLOCKS_CLK_PERI_SELECTED_LSB _u(0) #define CLOCKS_CLK_PERI_SELECTED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_CLK_USB_CTRL // Description : Clock control, can be changed on-the-fly (except for auxsrc) #define CLOCKS_CLK_USB_CTRL_OFFSET _u(0x00000054) #define CLOCKS_CLK_USB_CTRL_BITS _u(0x00130ce0) #define CLOCKS_CLK_USB_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_USB_CTRL_NUDGE // Description : An edge on this signal shifts the phase of the output by 1 // cycle of the input clock // This can be done at any time #define CLOCKS_CLK_USB_CTRL_NUDGE_RESET _u(0x0) #define CLOCKS_CLK_USB_CTRL_NUDGE_BITS _u(0x00100000) #define CLOCKS_CLK_USB_CTRL_NUDGE_MSB _u(20) #define CLOCKS_CLK_USB_CTRL_NUDGE_LSB _u(20) #define CLOCKS_CLK_USB_CTRL_NUDGE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_USB_CTRL_PHASE // Description : This delays the enable signal by up to 3 cycles of the input // clock // This must be set before the clock is enabled to have any effect #define CLOCKS_CLK_USB_CTRL_PHASE_RESET _u(0x0) #define CLOCKS_CLK_USB_CTRL_PHASE_BITS _u(0x00030000) #define CLOCKS_CLK_USB_CTRL_PHASE_MSB _u(17) #define CLOCKS_CLK_USB_CTRL_PHASE_LSB _u(16) #define CLOCKS_CLK_USB_CTRL_PHASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_USB_CTRL_ENABLE // Description : Starts and stops the clock generator cleanly #define CLOCKS_CLK_USB_CTRL_ENABLE_RESET _u(0x0) #define CLOCKS_CLK_USB_CTRL_ENABLE_BITS _u(0x00000800) #define CLOCKS_CLK_USB_CTRL_ENABLE_MSB _u(11) #define CLOCKS_CLK_USB_CTRL_ENABLE_LSB _u(11) #define CLOCKS_CLK_USB_CTRL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_USB_CTRL_KILL // Description : Asynchronously kills the clock generator #define CLOCKS_CLK_USB_CTRL_KILL_RESET _u(0x0) #define CLOCKS_CLK_USB_CTRL_KILL_BITS _u(0x00000400) #define CLOCKS_CLK_USB_CTRL_KILL_MSB _u(10) #define CLOCKS_CLK_USB_CTRL_KILL_LSB _u(10) #define CLOCKS_CLK_USB_CTRL_KILL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_USB_CTRL_AUXSRC // Description : Selects the auxiliary clock source, will glitch when switching // 0x0 -> clksrc_pll_usb // 0x1 -> clksrc_pll_sys // 0x2 -> rosc_clksrc_ph // 0x3 -> xosc_clksrc // 0x4 -> clksrc_gpin0 // 0x5 -> clksrc_gpin1 #define CLOCKS_CLK_USB_CTRL_AUXSRC_RESET _u(0x0) #define CLOCKS_CLK_USB_CTRL_AUXSRC_BITS _u(0x000000e0) #define CLOCKS_CLK_USB_CTRL_AUXSRC_MSB _u(7) #define CLOCKS_CLK_USB_CTRL_AUXSRC_LSB _u(5) #define CLOCKS_CLK_USB_CTRL_AUXSRC_ACCESS "RW" #define CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB _u(0x0) #define CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS _u(0x1) #define CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_ROSC_CLKSRC_PH _u(0x2) #define CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_XOSC_CLKSRC _u(0x3) #define CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 _u(0x4) #define CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 _u(0x5) // ============================================================================= // Register : CLOCKS_CLK_USB_DIV // Description : Clock divisor, can be changed on-the-fly #define CLOCKS_CLK_USB_DIV_OFFSET _u(0x00000058) #define CLOCKS_CLK_USB_DIV_BITS _u(0x00000300) #define CLOCKS_CLK_USB_DIV_RESET _u(0x00000100) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_USB_DIV_INT // Description : Integer component of the divisor, 0 -> divide by 2^16 #define CLOCKS_CLK_USB_DIV_INT_RESET _u(0x1) #define CLOCKS_CLK_USB_DIV_INT_BITS _u(0x00000300) #define CLOCKS_CLK_USB_DIV_INT_MSB _u(9) #define CLOCKS_CLK_USB_DIV_INT_LSB _u(8) #define CLOCKS_CLK_USB_DIV_INT_ACCESS "RW" // ============================================================================= // Register : CLOCKS_CLK_USB_SELECTED // Description : Indicates which SRC is currently selected by the glitchless mux // (one-hot). // This slice does not have a glitchless mux (only the AUX_SRC // field is present, not SRC) so this register is hardwired to // 0x1. #define CLOCKS_CLK_USB_SELECTED_OFFSET _u(0x0000005c) #define CLOCKS_CLK_USB_SELECTED_BITS _u(0xffffffff) #define CLOCKS_CLK_USB_SELECTED_RESET _u(0x00000001) #define CLOCKS_CLK_USB_SELECTED_MSB _u(31) #define CLOCKS_CLK_USB_SELECTED_LSB _u(0) #define CLOCKS_CLK_USB_SELECTED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_CLK_ADC_CTRL // Description : Clock control, can be changed on-the-fly (except for auxsrc) #define CLOCKS_CLK_ADC_CTRL_OFFSET _u(0x00000060) #define CLOCKS_CLK_ADC_CTRL_BITS _u(0x00130ce0) #define CLOCKS_CLK_ADC_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_ADC_CTRL_NUDGE // Description : An edge on this signal shifts the phase of the output by 1 // cycle of the input clock // This can be done at any time #define CLOCKS_CLK_ADC_CTRL_NUDGE_RESET _u(0x0) #define CLOCKS_CLK_ADC_CTRL_NUDGE_BITS _u(0x00100000) #define CLOCKS_CLK_ADC_CTRL_NUDGE_MSB _u(20) #define CLOCKS_CLK_ADC_CTRL_NUDGE_LSB _u(20) #define CLOCKS_CLK_ADC_CTRL_NUDGE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_ADC_CTRL_PHASE // Description : This delays the enable signal by up to 3 cycles of the input // clock // This must be set before the clock is enabled to have any effect #define CLOCKS_CLK_ADC_CTRL_PHASE_RESET _u(0x0) #define CLOCKS_CLK_ADC_CTRL_PHASE_BITS _u(0x00030000) #define CLOCKS_CLK_ADC_CTRL_PHASE_MSB _u(17) #define CLOCKS_CLK_ADC_CTRL_PHASE_LSB _u(16) #define CLOCKS_CLK_ADC_CTRL_PHASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_ADC_CTRL_ENABLE // Description : Starts and stops the clock generator cleanly #define CLOCKS_CLK_ADC_CTRL_ENABLE_RESET _u(0x0) #define CLOCKS_CLK_ADC_CTRL_ENABLE_BITS _u(0x00000800) #define CLOCKS_CLK_ADC_CTRL_ENABLE_MSB _u(11) #define CLOCKS_CLK_ADC_CTRL_ENABLE_LSB _u(11) #define CLOCKS_CLK_ADC_CTRL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_ADC_CTRL_KILL // Description : Asynchronously kills the clock generator #define CLOCKS_CLK_ADC_CTRL_KILL_RESET _u(0x0) #define CLOCKS_CLK_ADC_CTRL_KILL_BITS _u(0x00000400) #define CLOCKS_CLK_ADC_CTRL_KILL_MSB _u(10) #define CLOCKS_CLK_ADC_CTRL_KILL_LSB _u(10) #define CLOCKS_CLK_ADC_CTRL_KILL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_ADC_CTRL_AUXSRC // Description : Selects the auxiliary clock source, will glitch when switching // 0x0 -> clksrc_pll_usb // 0x1 -> clksrc_pll_sys // 0x2 -> rosc_clksrc_ph // 0x3 -> xosc_clksrc // 0x4 -> clksrc_gpin0 // 0x5 -> clksrc_gpin1 #define CLOCKS_CLK_ADC_CTRL_AUXSRC_RESET _u(0x0) #define CLOCKS_CLK_ADC_CTRL_AUXSRC_BITS _u(0x000000e0) #define CLOCKS_CLK_ADC_CTRL_AUXSRC_MSB _u(7) #define CLOCKS_CLK_ADC_CTRL_AUXSRC_LSB _u(5) #define CLOCKS_CLK_ADC_CTRL_AUXSRC_ACCESS "RW" #define CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB _u(0x0) #define CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS _u(0x1) #define CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_ROSC_CLKSRC_PH _u(0x2) #define CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_XOSC_CLKSRC _u(0x3) #define CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 _u(0x4) #define CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 _u(0x5) // ============================================================================= // Register : CLOCKS_CLK_ADC_DIV // Description : Clock divisor, can be changed on-the-fly #define CLOCKS_CLK_ADC_DIV_OFFSET _u(0x00000064) #define CLOCKS_CLK_ADC_DIV_BITS _u(0x00000300) #define CLOCKS_CLK_ADC_DIV_RESET _u(0x00000100) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_ADC_DIV_INT // Description : Integer component of the divisor, 0 -> divide by 2^16 #define CLOCKS_CLK_ADC_DIV_INT_RESET _u(0x1) #define CLOCKS_CLK_ADC_DIV_INT_BITS _u(0x00000300) #define CLOCKS_CLK_ADC_DIV_INT_MSB _u(9) #define CLOCKS_CLK_ADC_DIV_INT_LSB _u(8) #define CLOCKS_CLK_ADC_DIV_INT_ACCESS "RW" // ============================================================================= // Register : CLOCKS_CLK_ADC_SELECTED // Description : Indicates which SRC is currently selected by the glitchless mux // (one-hot). // This slice does not have a glitchless mux (only the AUX_SRC // field is present, not SRC) so this register is hardwired to // 0x1. #define CLOCKS_CLK_ADC_SELECTED_OFFSET _u(0x00000068) #define CLOCKS_CLK_ADC_SELECTED_BITS _u(0xffffffff) #define CLOCKS_CLK_ADC_SELECTED_RESET _u(0x00000001) #define CLOCKS_CLK_ADC_SELECTED_MSB _u(31) #define CLOCKS_CLK_ADC_SELECTED_LSB _u(0) #define CLOCKS_CLK_ADC_SELECTED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_CLK_RTC_CTRL // Description : Clock control, can be changed on-the-fly (except for auxsrc) #define CLOCKS_CLK_RTC_CTRL_OFFSET _u(0x0000006c) #define CLOCKS_CLK_RTC_CTRL_BITS _u(0x00130ce0) #define CLOCKS_CLK_RTC_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_RTC_CTRL_NUDGE // Description : An edge on this signal shifts the phase of the output by 1 // cycle of the input clock // This can be done at any time #define CLOCKS_CLK_RTC_CTRL_NUDGE_RESET _u(0x0) #define CLOCKS_CLK_RTC_CTRL_NUDGE_BITS _u(0x00100000) #define CLOCKS_CLK_RTC_CTRL_NUDGE_MSB _u(20) #define CLOCKS_CLK_RTC_CTRL_NUDGE_LSB _u(20) #define CLOCKS_CLK_RTC_CTRL_NUDGE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_RTC_CTRL_PHASE // Description : This delays the enable signal by up to 3 cycles of the input // clock // This must be set before the clock is enabled to have any effect #define CLOCKS_CLK_RTC_CTRL_PHASE_RESET _u(0x0) #define CLOCKS_CLK_RTC_CTRL_PHASE_BITS _u(0x00030000) #define CLOCKS_CLK_RTC_CTRL_PHASE_MSB _u(17) #define CLOCKS_CLK_RTC_CTRL_PHASE_LSB _u(16) #define CLOCKS_CLK_RTC_CTRL_PHASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_RTC_CTRL_ENABLE // Description : Starts and stops the clock generator cleanly #define CLOCKS_CLK_RTC_CTRL_ENABLE_RESET _u(0x0) #define CLOCKS_CLK_RTC_CTRL_ENABLE_BITS _u(0x00000800) #define CLOCKS_CLK_RTC_CTRL_ENABLE_MSB _u(11) #define CLOCKS_CLK_RTC_CTRL_ENABLE_LSB _u(11) #define CLOCKS_CLK_RTC_CTRL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_RTC_CTRL_KILL // Description : Asynchronously kills the clock generator #define CLOCKS_CLK_RTC_CTRL_KILL_RESET _u(0x0) #define CLOCKS_CLK_RTC_CTRL_KILL_BITS _u(0x00000400) #define CLOCKS_CLK_RTC_CTRL_KILL_MSB _u(10) #define CLOCKS_CLK_RTC_CTRL_KILL_LSB _u(10) #define CLOCKS_CLK_RTC_CTRL_KILL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_RTC_CTRL_AUXSRC // Description : Selects the auxiliary clock source, will glitch when switching // 0x0 -> clksrc_pll_usb // 0x1 -> clksrc_pll_sys // 0x2 -> rosc_clksrc_ph // 0x3 -> xosc_clksrc // 0x4 -> clksrc_gpin0 // 0x5 -> clksrc_gpin1 #define CLOCKS_CLK_RTC_CTRL_AUXSRC_RESET _u(0x0) #define CLOCKS_CLK_RTC_CTRL_AUXSRC_BITS _u(0x000000e0) #define CLOCKS_CLK_RTC_CTRL_AUXSRC_MSB _u(7) #define CLOCKS_CLK_RTC_CTRL_AUXSRC_LSB _u(5) #define CLOCKS_CLK_RTC_CTRL_AUXSRC_ACCESS "RW" #define CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB _u(0x0) #define CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS _u(0x1) #define CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_ROSC_CLKSRC_PH _u(0x2) #define CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_XOSC_CLKSRC _u(0x3) #define CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 _u(0x4) #define CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 _u(0x5) // ============================================================================= // Register : CLOCKS_CLK_RTC_DIV // Description : Clock divisor, can be changed on-the-fly #define CLOCKS_CLK_RTC_DIV_OFFSET _u(0x00000070) #define CLOCKS_CLK_RTC_DIV_BITS _u(0xffffffff) #define CLOCKS_CLK_RTC_DIV_RESET _u(0x00000100) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_RTC_DIV_INT // Description : Integer component of the divisor, 0 -> divide by 2^16 #define CLOCKS_CLK_RTC_DIV_INT_RESET _u(0x000001) #define CLOCKS_CLK_RTC_DIV_INT_BITS _u(0xffffff00) #define CLOCKS_CLK_RTC_DIV_INT_MSB _u(31) #define CLOCKS_CLK_RTC_DIV_INT_LSB _u(8) #define CLOCKS_CLK_RTC_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_RTC_DIV_FRAC // Description : Fractional component of the divisor #define CLOCKS_CLK_RTC_DIV_FRAC_RESET _u(0x00) #define CLOCKS_CLK_RTC_DIV_FRAC_BITS _u(0x000000ff) #define CLOCKS_CLK_RTC_DIV_FRAC_MSB _u(7) #define CLOCKS_CLK_RTC_DIV_FRAC_LSB _u(0) #define CLOCKS_CLK_RTC_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : CLOCKS_CLK_RTC_SELECTED // Description : Indicates which SRC is currently selected by the glitchless mux // (one-hot). // This slice does not have a glitchless mux (only the AUX_SRC // field is present, not SRC) so this register is hardwired to // 0x1. #define CLOCKS_CLK_RTC_SELECTED_OFFSET _u(0x00000074) #define CLOCKS_CLK_RTC_SELECTED_BITS _u(0xffffffff) #define CLOCKS_CLK_RTC_SELECTED_RESET _u(0x00000001) #define CLOCKS_CLK_RTC_SELECTED_MSB _u(31) #define CLOCKS_CLK_RTC_SELECTED_LSB _u(0) #define CLOCKS_CLK_RTC_SELECTED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_CLK_SYS_RESUS_CTRL // Description : None #define CLOCKS_CLK_SYS_RESUS_CTRL_OFFSET _u(0x00000078) #define CLOCKS_CLK_SYS_RESUS_CTRL_BITS _u(0x000111ff) #define CLOCKS_CLK_SYS_RESUS_CTRL_RESET _u(0x000000ff) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_SYS_RESUS_CTRL_CLEAR // Description : For clearing the resus after the fault that triggered it has // been corrected #define CLOCKS_CLK_SYS_RESUS_CTRL_CLEAR_RESET _u(0x0) #define CLOCKS_CLK_SYS_RESUS_CTRL_CLEAR_BITS _u(0x00010000) #define CLOCKS_CLK_SYS_RESUS_CTRL_CLEAR_MSB _u(16) #define CLOCKS_CLK_SYS_RESUS_CTRL_CLEAR_LSB _u(16) #define CLOCKS_CLK_SYS_RESUS_CTRL_CLEAR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_SYS_RESUS_CTRL_FRCE // Description : Force a resus, for test purposes only #define CLOCKS_CLK_SYS_RESUS_CTRL_FRCE_RESET _u(0x0) #define CLOCKS_CLK_SYS_RESUS_CTRL_FRCE_BITS _u(0x00001000) #define CLOCKS_CLK_SYS_RESUS_CTRL_FRCE_MSB _u(12) #define CLOCKS_CLK_SYS_RESUS_CTRL_FRCE_LSB _u(12) #define CLOCKS_CLK_SYS_RESUS_CTRL_FRCE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_SYS_RESUS_CTRL_ENABLE // Description : Enable resus #define CLOCKS_CLK_SYS_RESUS_CTRL_ENABLE_RESET _u(0x0) #define CLOCKS_CLK_SYS_RESUS_CTRL_ENABLE_BITS _u(0x00000100) #define CLOCKS_CLK_SYS_RESUS_CTRL_ENABLE_MSB _u(8) #define CLOCKS_CLK_SYS_RESUS_CTRL_ENABLE_LSB _u(8) #define CLOCKS_CLK_SYS_RESUS_CTRL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_SYS_RESUS_CTRL_TIMEOUT // Description : This is expressed as a number of clk_ref cycles // and must be >= 2x clk_ref_freq/min_clk_tst_freq #define CLOCKS_CLK_SYS_RESUS_CTRL_TIMEOUT_RESET _u(0xff) #define CLOCKS_CLK_SYS_RESUS_CTRL_TIMEOUT_BITS _u(0x000000ff) #define CLOCKS_CLK_SYS_RESUS_CTRL_TIMEOUT_MSB _u(7) #define CLOCKS_CLK_SYS_RESUS_CTRL_TIMEOUT_LSB _u(0) #define CLOCKS_CLK_SYS_RESUS_CTRL_TIMEOUT_ACCESS "RW" // ============================================================================= // Register : CLOCKS_CLK_SYS_RESUS_STATUS // Description : None #define CLOCKS_CLK_SYS_RESUS_STATUS_OFFSET _u(0x0000007c) #define CLOCKS_CLK_SYS_RESUS_STATUS_BITS _u(0x00000001) #define CLOCKS_CLK_SYS_RESUS_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_CLK_SYS_RESUS_STATUS_RESUSSED // Description : Clock has been resuscitated, correct the error then send // ctrl_clear=1 #define CLOCKS_CLK_SYS_RESUS_STATUS_RESUSSED_RESET _u(0x0) #define CLOCKS_CLK_SYS_RESUS_STATUS_RESUSSED_BITS _u(0x00000001) #define CLOCKS_CLK_SYS_RESUS_STATUS_RESUSSED_MSB _u(0) #define CLOCKS_CLK_SYS_RESUS_STATUS_RESUSSED_LSB _u(0) #define CLOCKS_CLK_SYS_RESUS_STATUS_RESUSSED_ACCESS "RO" // ============================================================================= // Register : CLOCKS_FC0_REF_KHZ // Description : Reference clock frequency in kHz #define CLOCKS_FC0_REF_KHZ_OFFSET _u(0x00000080) #define CLOCKS_FC0_REF_KHZ_BITS _u(0x000fffff) #define CLOCKS_FC0_REF_KHZ_RESET _u(0x00000000) #define CLOCKS_FC0_REF_KHZ_MSB _u(19) #define CLOCKS_FC0_REF_KHZ_LSB _u(0) #define CLOCKS_FC0_REF_KHZ_ACCESS "RW" // ============================================================================= // Register : CLOCKS_FC0_MIN_KHZ // Description : Minimum pass frequency in kHz. This is optional. Set to 0 if // you are not using the pass/fail flags #define CLOCKS_FC0_MIN_KHZ_OFFSET _u(0x00000084) #define CLOCKS_FC0_MIN_KHZ_BITS _u(0x01ffffff) #define CLOCKS_FC0_MIN_KHZ_RESET _u(0x00000000) #define CLOCKS_FC0_MIN_KHZ_MSB _u(24) #define CLOCKS_FC0_MIN_KHZ_LSB _u(0) #define CLOCKS_FC0_MIN_KHZ_ACCESS "RW" // ============================================================================= // Register : CLOCKS_FC0_MAX_KHZ // Description : Maximum pass frequency in kHz. This is optional. Set to // 0x1ffffff if you are not using the pass/fail flags #define CLOCKS_FC0_MAX_KHZ_OFFSET _u(0x00000088) #define CLOCKS_FC0_MAX_KHZ_BITS _u(0x01ffffff) #define CLOCKS_FC0_MAX_KHZ_RESET _u(0x01ffffff) #define CLOCKS_FC0_MAX_KHZ_MSB _u(24) #define CLOCKS_FC0_MAX_KHZ_LSB _u(0) #define CLOCKS_FC0_MAX_KHZ_ACCESS "RW" // ============================================================================= // Register : CLOCKS_FC0_DELAY // Description : Delays the start of frequency counting to allow the mux to // settle // Delay is measured in multiples of the reference clock period #define CLOCKS_FC0_DELAY_OFFSET _u(0x0000008c) #define CLOCKS_FC0_DELAY_BITS _u(0x00000007) #define CLOCKS_FC0_DELAY_RESET _u(0x00000001) #define CLOCKS_FC0_DELAY_MSB _u(2) #define CLOCKS_FC0_DELAY_LSB _u(0) #define CLOCKS_FC0_DELAY_ACCESS "RW" // ============================================================================= // Register : CLOCKS_FC0_INTERVAL // Description : The test interval is 0.98us * 2**interval, but let's call it // 1us * 2**interval // The default gives a test interval of 250us #define CLOCKS_FC0_INTERVAL_OFFSET _u(0x00000090) #define CLOCKS_FC0_INTERVAL_BITS _u(0x0000000f) #define CLOCKS_FC0_INTERVAL_RESET _u(0x00000008) #define CLOCKS_FC0_INTERVAL_MSB _u(3) #define CLOCKS_FC0_INTERVAL_LSB _u(0) #define CLOCKS_FC0_INTERVAL_ACCESS "RW" // ============================================================================= // Register : CLOCKS_FC0_SRC // Description : Clock sent to frequency counter, set to 0 when not required // Writing to this register initiates the frequency count // 0x00 -> NULL // 0x01 -> pll_sys_clksrc_primary // 0x02 -> pll_usb_clksrc_primary // 0x03 -> rosc_clksrc // 0x04 -> rosc_clksrc_ph // 0x05 -> xosc_clksrc // 0x06 -> clksrc_gpin0 // 0x07 -> clksrc_gpin1 // 0x08 -> clk_ref // 0x09 -> clk_sys // 0x0a -> clk_peri // 0x0b -> clk_usb // 0x0c -> clk_adc // 0x0d -> clk_rtc #define CLOCKS_FC0_SRC_OFFSET _u(0x00000094) #define CLOCKS_FC0_SRC_BITS _u(0x000000ff) #define CLOCKS_FC0_SRC_RESET _u(0x00000000) #define CLOCKS_FC0_SRC_MSB _u(7) #define CLOCKS_FC0_SRC_LSB _u(0) #define CLOCKS_FC0_SRC_ACCESS "RW" #define CLOCKS_FC0_SRC_VALUE_NULL _u(0x00) #define CLOCKS_FC0_SRC_VALUE_PLL_SYS_CLKSRC_PRIMARY _u(0x01) #define CLOCKS_FC0_SRC_VALUE_PLL_USB_CLKSRC_PRIMARY _u(0x02) #define CLOCKS_FC0_SRC_VALUE_ROSC_CLKSRC _u(0x03) #define CLOCKS_FC0_SRC_VALUE_ROSC_CLKSRC_PH _u(0x04) #define CLOCKS_FC0_SRC_VALUE_XOSC_CLKSRC _u(0x05) #define CLOCKS_FC0_SRC_VALUE_CLKSRC_GPIN0 _u(0x06) #define CLOCKS_FC0_SRC_VALUE_CLKSRC_GPIN1 _u(0x07) #define CLOCKS_FC0_SRC_VALUE_CLK_REF _u(0x08) #define CLOCKS_FC0_SRC_VALUE_CLK_SYS _u(0x09) #define CLOCKS_FC0_SRC_VALUE_CLK_PERI _u(0x0a) #define CLOCKS_FC0_SRC_VALUE_CLK_USB _u(0x0b) #define CLOCKS_FC0_SRC_VALUE_CLK_ADC _u(0x0c) #define CLOCKS_FC0_SRC_VALUE_CLK_RTC _u(0x0d) // ============================================================================= // Register : CLOCKS_FC0_STATUS // Description : Frequency counter status #define CLOCKS_FC0_STATUS_OFFSET _u(0x00000098) #define CLOCKS_FC0_STATUS_BITS _u(0x11111111) #define CLOCKS_FC0_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_FC0_STATUS_DIED // Description : Test clock stopped during test #define CLOCKS_FC0_STATUS_DIED_RESET _u(0x0) #define CLOCKS_FC0_STATUS_DIED_BITS _u(0x10000000) #define CLOCKS_FC0_STATUS_DIED_MSB _u(28) #define CLOCKS_FC0_STATUS_DIED_LSB _u(28) #define CLOCKS_FC0_STATUS_DIED_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_FC0_STATUS_FAST // Description : Test clock faster than expected, only valid when status_done=1 #define CLOCKS_FC0_STATUS_FAST_RESET _u(0x0) #define CLOCKS_FC0_STATUS_FAST_BITS _u(0x01000000) #define CLOCKS_FC0_STATUS_FAST_MSB _u(24) #define CLOCKS_FC0_STATUS_FAST_LSB _u(24) #define CLOCKS_FC0_STATUS_FAST_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_FC0_STATUS_SLOW // Description : Test clock slower than expected, only valid when status_done=1 #define CLOCKS_FC0_STATUS_SLOW_RESET _u(0x0) #define CLOCKS_FC0_STATUS_SLOW_BITS _u(0x00100000) #define CLOCKS_FC0_STATUS_SLOW_MSB _u(20) #define CLOCKS_FC0_STATUS_SLOW_LSB _u(20) #define CLOCKS_FC0_STATUS_SLOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_FC0_STATUS_FAIL // Description : Test failed #define CLOCKS_FC0_STATUS_FAIL_RESET _u(0x0) #define CLOCKS_FC0_STATUS_FAIL_BITS _u(0x00010000) #define CLOCKS_FC0_STATUS_FAIL_MSB _u(16) #define CLOCKS_FC0_STATUS_FAIL_LSB _u(16) #define CLOCKS_FC0_STATUS_FAIL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_FC0_STATUS_WAITING // Description : Waiting for test clock to start #define CLOCKS_FC0_STATUS_WAITING_RESET _u(0x0) #define CLOCKS_FC0_STATUS_WAITING_BITS _u(0x00001000) #define CLOCKS_FC0_STATUS_WAITING_MSB _u(12) #define CLOCKS_FC0_STATUS_WAITING_LSB _u(12) #define CLOCKS_FC0_STATUS_WAITING_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_FC0_STATUS_RUNNING // Description : Test running #define CLOCKS_FC0_STATUS_RUNNING_RESET _u(0x0) #define CLOCKS_FC0_STATUS_RUNNING_BITS _u(0x00000100) #define CLOCKS_FC0_STATUS_RUNNING_MSB _u(8) #define CLOCKS_FC0_STATUS_RUNNING_LSB _u(8) #define CLOCKS_FC0_STATUS_RUNNING_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_FC0_STATUS_DONE // Description : Test complete #define CLOCKS_FC0_STATUS_DONE_RESET _u(0x0) #define CLOCKS_FC0_STATUS_DONE_BITS _u(0x00000010) #define CLOCKS_FC0_STATUS_DONE_MSB _u(4) #define CLOCKS_FC0_STATUS_DONE_LSB _u(4) #define CLOCKS_FC0_STATUS_DONE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_FC0_STATUS_PASS // Description : Test passed #define CLOCKS_FC0_STATUS_PASS_RESET _u(0x0) #define CLOCKS_FC0_STATUS_PASS_BITS _u(0x00000001) #define CLOCKS_FC0_STATUS_PASS_MSB _u(0) #define CLOCKS_FC0_STATUS_PASS_LSB _u(0) #define CLOCKS_FC0_STATUS_PASS_ACCESS "RO" // ============================================================================= // Register : CLOCKS_FC0_RESULT // Description : Result of frequency measurement, only valid when status_done=1 #define CLOCKS_FC0_RESULT_OFFSET _u(0x0000009c) #define CLOCKS_FC0_RESULT_BITS _u(0x3fffffff) #define CLOCKS_FC0_RESULT_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_FC0_RESULT_KHZ // Description : None #define CLOCKS_FC0_RESULT_KHZ_RESET _u(0x0000000) #define CLOCKS_FC0_RESULT_KHZ_BITS _u(0x3fffffe0) #define CLOCKS_FC0_RESULT_KHZ_MSB _u(29) #define CLOCKS_FC0_RESULT_KHZ_LSB _u(5) #define CLOCKS_FC0_RESULT_KHZ_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_FC0_RESULT_FRAC // Description : None #define CLOCKS_FC0_RESULT_FRAC_RESET _u(0x00) #define CLOCKS_FC0_RESULT_FRAC_BITS _u(0x0000001f) #define CLOCKS_FC0_RESULT_FRAC_MSB _u(4) #define CLOCKS_FC0_RESULT_FRAC_LSB _u(0) #define CLOCKS_FC0_RESULT_FRAC_ACCESS "RO" // ============================================================================= // Register : CLOCKS_WAKE_EN0 // Description : enable clock in wake mode #define CLOCKS_WAKE_EN0_OFFSET _u(0x000000a0) #define CLOCKS_WAKE_EN0_BITS _u(0xffffffff) #define CLOCKS_WAKE_EN0_RESET _u(0xffffffff) // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_SRAM3 // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM3_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM3_BITS _u(0x80000000) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM3_MSB _u(31) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM3_LSB _u(31) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_SRAM2 // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM2_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM2_BITS _u(0x40000000) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM2_MSB _u(30) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM2_LSB _u(30) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_SRAM1 // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM1_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM1_BITS _u(0x20000000) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM1_MSB _u(29) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM1_LSB _u(29) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_SRAM0 // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM0_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM0_BITS _u(0x10000000) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM0_MSB _u(28) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM0_LSB _u(28) #define CLOCKS_WAKE_EN0_CLK_SYS_SRAM0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_SPI1 // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_SPI1_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_SPI1_BITS _u(0x08000000) #define CLOCKS_WAKE_EN0_CLK_SYS_SPI1_MSB _u(27) #define CLOCKS_WAKE_EN0_CLK_SYS_SPI1_LSB _u(27) #define CLOCKS_WAKE_EN0_CLK_SYS_SPI1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_PERI_SPI1 // Description : None #define CLOCKS_WAKE_EN0_CLK_PERI_SPI1_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_PERI_SPI1_BITS _u(0x04000000) #define CLOCKS_WAKE_EN0_CLK_PERI_SPI1_MSB _u(26) #define CLOCKS_WAKE_EN0_CLK_PERI_SPI1_LSB _u(26) #define CLOCKS_WAKE_EN0_CLK_PERI_SPI1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_SPI0 // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_SPI0_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_SPI0_BITS _u(0x02000000) #define CLOCKS_WAKE_EN0_CLK_SYS_SPI0_MSB _u(25) #define CLOCKS_WAKE_EN0_CLK_SYS_SPI0_LSB _u(25) #define CLOCKS_WAKE_EN0_CLK_SYS_SPI0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_PERI_SPI0 // Description : None #define CLOCKS_WAKE_EN0_CLK_PERI_SPI0_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_PERI_SPI0_BITS _u(0x01000000) #define CLOCKS_WAKE_EN0_CLK_PERI_SPI0_MSB _u(24) #define CLOCKS_WAKE_EN0_CLK_PERI_SPI0_LSB _u(24) #define CLOCKS_WAKE_EN0_CLK_PERI_SPI0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_SIO // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_SIO_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_SIO_BITS _u(0x00800000) #define CLOCKS_WAKE_EN0_CLK_SYS_SIO_MSB _u(23) #define CLOCKS_WAKE_EN0_CLK_SYS_SIO_LSB _u(23) #define CLOCKS_WAKE_EN0_CLK_SYS_SIO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_RTC // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_RTC_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_RTC_BITS _u(0x00400000) #define CLOCKS_WAKE_EN0_CLK_SYS_RTC_MSB _u(22) #define CLOCKS_WAKE_EN0_CLK_SYS_RTC_LSB _u(22) #define CLOCKS_WAKE_EN0_CLK_SYS_RTC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_RTC_RTC // Description : None #define CLOCKS_WAKE_EN0_CLK_RTC_RTC_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_RTC_RTC_BITS _u(0x00200000) #define CLOCKS_WAKE_EN0_CLK_RTC_RTC_MSB _u(21) #define CLOCKS_WAKE_EN0_CLK_RTC_RTC_LSB _u(21) #define CLOCKS_WAKE_EN0_CLK_RTC_RTC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_ROSC // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_ROSC_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_ROSC_BITS _u(0x00100000) #define CLOCKS_WAKE_EN0_CLK_SYS_ROSC_MSB _u(20) #define CLOCKS_WAKE_EN0_CLK_SYS_ROSC_LSB _u(20) #define CLOCKS_WAKE_EN0_CLK_SYS_ROSC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_ROM // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_ROM_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_ROM_BITS _u(0x00080000) #define CLOCKS_WAKE_EN0_CLK_SYS_ROM_MSB _u(19) #define CLOCKS_WAKE_EN0_CLK_SYS_ROM_LSB _u(19) #define CLOCKS_WAKE_EN0_CLK_SYS_ROM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_RESETS // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_RESETS_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_RESETS_BITS _u(0x00040000) #define CLOCKS_WAKE_EN0_CLK_SYS_RESETS_MSB _u(18) #define CLOCKS_WAKE_EN0_CLK_SYS_RESETS_LSB _u(18) #define CLOCKS_WAKE_EN0_CLK_SYS_RESETS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_PWM // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_PWM_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_PWM_BITS _u(0x00020000) #define CLOCKS_WAKE_EN0_CLK_SYS_PWM_MSB _u(17) #define CLOCKS_WAKE_EN0_CLK_SYS_PWM_LSB _u(17) #define CLOCKS_WAKE_EN0_CLK_SYS_PWM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_PSM // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_PSM_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_PSM_BITS _u(0x00010000) #define CLOCKS_WAKE_EN0_CLK_SYS_PSM_MSB _u(16) #define CLOCKS_WAKE_EN0_CLK_SYS_PSM_LSB _u(16) #define CLOCKS_WAKE_EN0_CLK_SYS_PSM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_PLL_USB // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_PLL_USB_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_PLL_USB_BITS _u(0x00008000) #define CLOCKS_WAKE_EN0_CLK_SYS_PLL_USB_MSB _u(15) #define CLOCKS_WAKE_EN0_CLK_SYS_PLL_USB_LSB _u(15) #define CLOCKS_WAKE_EN0_CLK_SYS_PLL_USB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_PLL_SYS // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_PLL_SYS_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_PLL_SYS_BITS _u(0x00004000) #define CLOCKS_WAKE_EN0_CLK_SYS_PLL_SYS_MSB _u(14) #define CLOCKS_WAKE_EN0_CLK_SYS_PLL_SYS_LSB _u(14) #define CLOCKS_WAKE_EN0_CLK_SYS_PLL_SYS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_PIO1 // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_PIO1_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_PIO1_BITS _u(0x00002000) #define CLOCKS_WAKE_EN0_CLK_SYS_PIO1_MSB _u(13) #define CLOCKS_WAKE_EN0_CLK_SYS_PIO1_LSB _u(13) #define CLOCKS_WAKE_EN0_CLK_SYS_PIO1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_PIO0 // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_PIO0_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_PIO0_BITS _u(0x00001000) #define CLOCKS_WAKE_EN0_CLK_SYS_PIO0_MSB _u(12) #define CLOCKS_WAKE_EN0_CLK_SYS_PIO0_LSB _u(12) #define CLOCKS_WAKE_EN0_CLK_SYS_PIO0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_PADS // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_PADS_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_PADS_BITS _u(0x00000800) #define CLOCKS_WAKE_EN0_CLK_SYS_PADS_MSB _u(11) #define CLOCKS_WAKE_EN0_CLK_SYS_PADS_LSB _u(11) #define CLOCKS_WAKE_EN0_CLK_SYS_PADS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_VREG_AND_CHIP_RESET // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_VREG_AND_CHIP_RESET_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_VREG_AND_CHIP_RESET_BITS _u(0x00000400) #define CLOCKS_WAKE_EN0_CLK_SYS_VREG_AND_CHIP_RESET_MSB _u(10) #define CLOCKS_WAKE_EN0_CLK_SYS_VREG_AND_CHIP_RESET_LSB _u(10) #define CLOCKS_WAKE_EN0_CLK_SYS_VREG_AND_CHIP_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_JTAG // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_JTAG_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_JTAG_BITS _u(0x00000200) #define CLOCKS_WAKE_EN0_CLK_SYS_JTAG_MSB _u(9) #define CLOCKS_WAKE_EN0_CLK_SYS_JTAG_LSB _u(9) #define CLOCKS_WAKE_EN0_CLK_SYS_JTAG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_IO // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_IO_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_IO_BITS _u(0x00000100) #define CLOCKS_WAKE_EN0_CLK_SYS_IO_MSB _u(8) #define CLOCKS_WAKE_EN0_CLK_SYS_IO_LSB _u(8) #define CLOCKS_WAKE_EN0_CLK_SYS_IO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_I2C1 // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_I2C1_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_I2C1_BITS _u(0x00000080) #define CLOCKS_WAKE_EN0_CLK_SYS_I2C1_MSB _u(7) #define CLOCKS_WAKE_EN0_CLK_SYS_I2C1_LSB _u(7) #define CLOCKS_WAKE_EN0_CLK_SYS_I2C1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_I2C0 // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_I2C0_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_I2C0_BITS _u(0x00000040) #define CLOCKS_WAKE_EN0_CLK_SYS_I2C0_MSB _u(6) #define CLOCKS_WAKE_EN0_CLK_SYS_I2C0_LSB _u(6) #define CLOCKS_WAKE_EN0_CLK_SYS_I2C0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_DMA // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_DMA_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_DMA_BITS _u(0x00000020) #define CLOCKS_WAKE_EN0_CLK_SYS_DMA_MSB _u(5) #define CLOCKS_WAKE_EN0_CLK_SYS_DMA_LSB _u(5) #define CLOCKS_WAKE_EN0_CLK_SYS_DMA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_BUSFABRIC // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_BUSFABRIC_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_BUSFABRIC_BITS _u(0x00000010) #define CLOCKS_WAKE_EN0_CLK_SYS_BUSFABRIC_MSB _u(4) #define CLOCKS_WAKE_EN0_CLK_SYS_BUSFABRIC_LSB _u(4) #define CLOCKS_WAKE_EN0_CLK_SYS_BUSFABRIC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_BUSCTRL // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_BUSCTRL_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_BUSCTRL_BITS _u(0x00000008) #define CLOCKS_WAKE_EN0_CLK_SYS_BUSCTRL_MSB _u(3) #define CLOCKS_WAKE_EN0_CLK_SYS_BUSCTRL_LSB _u(3) #define CLOCKS_WAKE_EN0_CLK_SYS_BUSCTRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_ADC // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_ADC_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_ADC_BITS _u(0x00000004) #define CLOCKS_WAKE_EN0_CLK_SYS_ADC_MSB _u(2) #define CLOCKS_WAKE_EN0_CLK_SYS_ADC_LSB _u(2) #define CLOCKS_WAKE_EN0_CLK_SYS_ADC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_ADC_ADC // Description : None #define CLOCKS_WAKE_EN0_CLK_ADC_ADC_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_ADC_ADC_BITS _u(0x00000002) #define CLOCKS_WAKE_EN0_CLK_ADC_ADC_MSB _u(1) #define CLOCKS_WAKE_EN0_CLK_ADC_ADC_LSB _u(1) #define CLOCKS_WAKE_EN0_CLK_ADC_ADC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN0_CLK_SYS_CLOCKS // Description : None #define CLOCKS_WAKE_EN0_CLK_SYS_CLOCKS_RESET _u(0x1) #define CLOCKS_WAKE_EN0_CLK_SYS_CLOCKS_BITS _u(0x00000001) #define CLOCKS_WAKE_EN0_CLK_SYS_CLOCKS_MSB _u(0) #define CLOCKS_WAKE_EN0_CLK_SYS_CLOCKS_LSB _u(0) #define CLOCKS_WAKE_EN0_CLK_SYS_CLOCKS_ACCESS "RW" // ============================================================================= // Register : CLOCKS_WAKE_EN1 // Description : enable clock in wake mode #define CLOCKS_WAKE_EN1_OFFSET _u(0x000000a4) #define CLOCKS_WAKE_EN1_BITS _u(0x00007fff) #define CLOCKS_WAKE_EN1_RESET _u(0x00007fff) // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_XOSC // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_XOSC_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_XOSC_BITS _u(0x00004000) #define CLOCKS_WAKE_EN1_CLK_SYS_XOSC_MSB _u(14) #define CLOCKS_WAKE_EN1_CLK_SYS_XOSC_LSB _u(14) #define CLOCKS_WAKE_EN1_CLK_SYS_XOSC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_XIP // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_XIP_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_XIP_BITS _u(0x00002000) #define CLOCKS_WAKE_EN1_CLK_SYS_XIP_MSB _u(13) #define CLOCKS_WAKE_EN1_CLK_SYS_XIP_LSB _u(13) #define CLOCKS_WAKE_EN1_CLK_SYS_XIP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_WATCHDOG // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_WATCHDOG_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_WATCHDOG_BITS _u(0x00001000) #define CLOCKS_WAKE_EN1_CLK_SYS_WATCHDOG_MSB _u(12) #define CLOCKS_WAKE_EN1_CLK_SYS_WATCHDOG_LSB _u(12) #define CLOCKS_WAKE_EN1_CLK_SYS_WATCHDOG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_USB_USBCTRL // Description : None #define CLOCKS_WAKE_EN1_CLK_USB_USBCTRL_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_USB_USBCTRL_BITS _u(0x00000800) #define CLOCKS_WAKE_EN1_CLK_USB_USBCTRL_MSB _u(11) #define CLOCKS_WAKE_EN1_CLK_USB_USBCTRL_LSB _u(11) #define CLOCKS_WAKE_EN1_CLK_USB_USBCTRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_USBCTRL // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_USBCTRL_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_USBCTRL_BITS _u(0x00000400) #define CLOCKS_WAKE_EN1_CLK_SYS_USBCTRL_MSB _u(10) #define CLOCKS_WAKE_EN1_CLK_SYS_USBCTRL_LSB _u(10) #define CLOCKS_WAKE_EN1_CLK_SYS_USBCTRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_UART1 // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_UART1_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_UART1_BITS _u(0x00000200) #define CLOCKS_WAKE_EN1_CLK_SYS_UART1_MSB _u(9) #define CLOCKS_WAKE_EN1_CLK_SYS_UART1_LSB _u(9) #define CLOCKS_WAKE_EN1_CLK_SYS_UART1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_PERI_UART1 // Description : None #define CLOCKS_WAKE_EN1_CLK_PERI_UART1_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_PERI_UART1_BITS _u(0x00000100) #define CLOCKS_WAKE_EN1_CLK_PERI_UART1_MSB _u(8) #define CLOCKS_WAKE_EN1_CLK_PERI_UART1_LSB _u(8) #define CLOCKS_WAKE_EN1_CLK_PERI_UART1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_UART0 // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_UART0_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_UART0_BITS _u(0x00000080) #define CLOCKS_WAKE_EN1_CLK_SYS_UART0_MSB _u(7) #define CLOCKS_WAKE_EN1_CLK_SYS_UART0_LSB _u(7) #define CLOCKS_WAKE_EN1_CLK_SYS_UART0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_PERI_UART0 // Description : None #define CLOCKS_WAKE_EN1_CLK_PERI_UART0_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_PERI_UART0_BITS _u(0x00000040) #define CLOCKS_WAKE_EN1_CLK_PERI_UART0_MSB _u(6) #define CLOCKS_WAKE_EN1_CLK_PERI_UART0_LSB _u(6) #define CLOCKS_WAKE_EN1_CLK_PERI_UART0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_TIMER // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_TIMER_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_TIMER_BITS _u(0x00000020) #define CLOCKS_WAKE_EN1_CLK_SYS_TIMER_MSB _u(5) #define CLOCKS_WAKE_EN1_CLK_SYS_TIMER_LSB _u(5) #define CLOCKS_WAKE_EN1_CLK_SYS_TIMER_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_TBMAN // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_TBMAN_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_TBMAN_BITS _u(0x00000010) #define CLOCKS_WAKE_EN1_CLK_SYS_TBMAN_MSB _u(4) #define CLOCKS_WAKE_EN1_CLK_SYS_TBMAN_LSB _u(4) #define CLOCKS_WAKE_EN1_CLK_SYS_TBMAN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_SYSINFO // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_SYSINFO_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_SYSINFO_BITS _u(0x00000008) #define CLOCKS_WAKE_EN1_CLK_SYS_SYSINFO_MSB _u(3) #define CLOCKS_WAKE_EN1_CLK_SYS_SYSINFO_LSB _u(3) #define CLOCKS_WAKE_EN1_CLK_SYS_SYSINFO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_SYSCFG // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_SYSCFG_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_SYSCFG_BITS _u(0x00000004) #define CLOCKS_WAKE_EN1_CLK_SYS_SYSCFG_MSB _u(2) #define CLOCKS_WAKE_EN1_CLK_SYS_SYSCFG_LSB _u(2) #define CLOCKS_WAKE_EN1_CLK_SYS_SYSCFG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_SRAM5 // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_SRAM5_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_SRAM5_BITS _u(0x00000002) #define CLOCKS_WAKE_EN1_CLK_SYS_SRAM5_MSB _u(1) #define CLOCKS_WAKE_EN1_CLK_SYS_SRAM5_LSB _u(1) #define CLOCKS_WAKE_EN1_CLK_SYS_SRAM5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_WAKE_EN1_CLK_SYS_SRAM4 // Description : None #define CLOCKS_WAKE_EN1_CLK_SYS_SRAM4_RESET _u(0x1) #define CLOCKS_WAKE_EN1_CLK_SYS_SRAM4_BITS _u(0x00000001) #define CLOCKS_WAKE_EN1_CLK_SYS_SRAM4_MSB _u(0) #define CLOCKS_WAKE_EN1_CLK_SYS_SRAM4_LSB _u(0) #define CLOCKS_WAKE_EN1_CLK_SYS_SRAM4_ACCESS "RW" // ============================================================================= // Register : CLOCKS_SLEEP_EN0 // Description : enable clock in sleep mode #define CLOCKS_SLEEP_EN0_OFFSET _u(0x000000a8) #define CLOCKS_SLEEP_EN0_BITS _u(0xffffffff) #define CLOCKS_SLEEP_EN0_RESET _u(0xffffffff) // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_SRAM3 // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM3_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM3_BITS _u(0x80000000) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM3_MSB _u(31) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM3_LSB _u(31) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_SRAM2 // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM2_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM2_BITS _u(0x40000000) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM2_MSB _u(30) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM2_LSB _u(30) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_SRAM1 // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM1_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM1_BITS _u(0x20000000) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM1_MSB _u(29) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM1_LSB _u(29) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_SRAM0 // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM0_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM0_BITS _u(0x10000000) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM0_MSB _u(28) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM0_LSB _u(28) #define CLOCKS_SLEEP_EN0_CLK_SYS_SRAM0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_SPI1 // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_SPI1_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_SPI1_BITS _u(0x08000000) #define CLOCKS_SLEEP_EN0_CLK_SYS_SPI1_MSB _u(27) #define CLOCKS_SLEEP_EN0_CLK_SYS_SPI1_LSB _u(27) #define CLOCKS_SLEEP_EN0_CLK_SYS_SPI1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_PERI_SPI1 // Description : None #define CLOCKS_SLEEP_EN0_CLK_PERI_SPI1_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_PERI_SPI1_BITS _u(0x04000000) #define CLOCKS_SLEEP_EN0_CLK_PERI_SPI1_MSB _u(26) #define CLOCKS_SLEEP_EN0_CLK_PERI_SPI1_LSB _u(26) #define CLOCKS_SLEEP_EN0_CLK_PERI_SPI1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_SPI0 // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_SPI0_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_SPI0_BITS _u(0x02000000) #define CLOCKS_SLEEP_EN0_CLK_SYS_SPI0_MSB _u(25) #define CLOCKS_SLEEP_EN0_CLK_SYS_SPI0_LSB _u(25) #define CLOCKS_SLEEP_EN0_CLK_SYS_SPI0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_PERI_SPI0 // Description : None #define CLOCKS_SLEEP_EN0_CLK_PERI_SPI0_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_PERI_SPI0_BITS _u(0x01000000) #define CLOCKS_SLEEP_EN0_CLK_PERI_SPI0_MSB _u(24) #define CLOCKS_SLEEP_EN0_CLK_PERI_SPI0_LSB _u(24) #define CLOCKS_SLEEP_EN0_CLK_PERI_SPI0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_SIO // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_SIO_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_SIO_BITS _u(0x00800000) #define CLOCKS_SLEEP_EN0_CLK_SYS_SIO_MSB _u(23) #define CLOCKS_SLEEP_EN0_CLK_SYS_SIO_LSB _u(23) #define CLOCKS_SLEEP_EN0_CLK_SYS_SIO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_RTC // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_RTC_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_RTC_BITS _u(0x00400000) #define CLOCKS_SLEEP_EN0_CLK_SYS_RTC_MSB _u(22) #define CLOCKS_SLEEP_EN0_CLK_SYS_RTC_LSB _u(22) #define CLOCKS_SLEEP_EN0_CLK_SYS_RTC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_RTC_RTC // Description : None #define CLOCKS_SLEEP_EN0_CLK_RTC_RTC_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_RTC_RTC_BITS _u(0x00200000) #define CLOCKS_SLEEP_EN0_CLK_RTC_RTC_MSB _u(21) #define CLOCKS_SLEEP_EN0_CLK_RTC_RTC_LSB _u(21) #define CLOCKS_SLEEP_EN0_CLK_RTC_RTC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_ROSC // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_ROSC_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_ROSC_BITS _u(0x00100000) #define CLOCKS_SLEEP_EN0_CLK_SYS_ROSC_MSB _u(20) #define CLOCKS_SLEEP_EN0_CLK_SYS_ROSC_LSB _u(20) #define CLOCKS_SLEEP_EN0_CLK_SYS_ROSC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_ROM // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_ROM_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_ROM_BITS _u(0x00080000) #define CLOCKS_SLEEP_EN0_CLK_SYS_ROM_MSB _u(19) #define CLOCKS_SLEEP_EN0_CLK_SYS_ROM_LSB _u(19) #define CLOCKS_SLEEP_EN0_CLK_SYS_ROM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_RESETS // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_RESETS_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_RESETS_BITS _u(0x00040000) #define CLOCKS_SLEEP_EN0_CLK_SYS_RESETS_MSB _u(18) #define CLOCKS_SLEEP_EN0_CLK_SYS_RESETS_LSB _u(18) #define CLOCKS_SLEEP_EN0_CLK_SYS_RESETS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_PWM // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_PWM_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_PWM_BITS _u(0x00020000) #define CLOCKS_SLEEP_EN0_CLK_SYS_PWM_MSB _u(17) #define CLOCKS_SLEEP_EN0_CLK_SYS_PWM_LSB _u(17) #define CLOCKS_SLEEP_EN0_CLK_SYS_PWM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_PSM // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_PSM_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_PSM_BITS _u(0x00010000) #define CLOCKS_SLEEP_EN0_CLK_SYS_PSM_MSB _u(16) #define CLOCKS_SLEEP_EN0_CLK_SYS_PSM_LSB _u(16) #define CLOCKS_SLEEP_EN0_CLK_SYS_PSM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_PLL_USB // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_PLL_USB_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_PLL_USB_BITS _u(0x00008000) #define CLOCKS_SLEEP_EN0_CLK_SYS_PLL_USB_MSB _u(15) #define CLOCKS_SLEEP_EN0_CLK_SYS_PLL_USB_LSB _u(15) #define CLOCKS_SLEEP_EN0_CLK_SYS_PLL_USB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_PLL_SYS // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_PLL_SYS_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_PLL_SYS_BITS _u(0x00004000) #define CLOCKS_SLEEP_EN0_CLK_SYS_PLL_SYS_MSB _u(14) #define CLOCKS_SLEEP_EN0_CLK_SYS_PLL_SYS_LSB _u(14) #define CLOCKS_SLEEP_EN0_CLK_SYS_PLL_SYS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_PIO1 // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_PIO1_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_PIO1_BITS _u(0x00002000) #define CLOCKS_SLEEP_EN0_CLK_SYS_PIO1_MSB _u(13) #define CLOCKS_SLEEP_EN0_CLK_SYS_PIO1_LSB _u(13) #define CLOCKS_SLEEP_EN0_CLK_SYS_PIO1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_PIO0 // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_PIO0_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_PIO0_BITS _u(0x00001000) #define CLOCKS_SLEEP_EN0_CLK_SYS_PIO0_MSB _u(12) #define CLOCKS_SLEEP_EN0_CLK_SYS_PIO0_LSB _u(12) #define CLOCKS_SLEEP_EN0_CLK_SYS_PIO0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_PADS // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_PADS_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_PADS_BITS _u(0x00000800) #define CLOCKS_SLEEP_EN0_CLK_SYS_PADS_MSB _u(11) #define CLOCKS_SLEEP_EN0_CLK_SYS_PADS_LSB _u(11) #define CLOCKS_SLEEP_EN0_CLK_SYS_PADS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_VREG_AND_CHIP_RESET // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_VREG_AND_CHIP_RESET_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_VREG_AND_CHIP_RESET_BITS _u(0x00000400) #define CLOCKS_SLEEP_EN0_CLK_SYS_VREG_AND_CHIP_RESET_MSB _u(10) #define CLOCKS_SLEEP_EN0_CLK_SYS_VREG_AND_CHIP_RESET_LSB _u(10) #define CLOCKS_SLEEP_EN0_CLK_SYS_VREG_AND_CHIP_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_JTAG // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_JTAG_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_JTAG_BITS _u(0x00000200) #define CLOCKS_SLEEP_EN0_CLK_SYS_JTAG_MSB _u(9) #define CLOCKS_SLEEP_EN0_CLK_SYS_JTAG_LSB _u(9) #define CLOCKS_SLEEP_EN0_CLK_SYS_JTAG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_IO // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_IO_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_IO_BITS _u(0x00000100) #define CLOCKS_SLEEP_EN0_CLK_SYS_IO_MSB _u(8) #define CLOCKS_SLEEP_EN0_CLK_SYS_IO_LSB _u(8) #define CLOCKS_SLEEP_EN0_CLK_SYS_IO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_I2C1 // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_I2C1_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_I2C1_BITS _u(0x00000080) #define CLOCKS_SLEEP_EN0_CLK_SYS_I2C1_MSB _u(7) #define CLOCKS_SLEEP_EN0_CLK_SYS_I2C1_LSB _u(7) #define CLOCKS_SLEEP_EN0_CLK_SYS_I2C1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_I2C0 // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_I2C0_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_I2C0_BITS _u(0x00000040) #define CLOCKS_SLEEP_EN0_CLK_SYS_I2C0_MSB _u(6) #define CLOCKS_SLEEP_EN0_CLK_SYS_I2C0_LSB _u(6) #define CLOCKS_SLEEP_EN0_CLK_SYS_I2C0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_DMA // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_DMA_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_DMA_BITS _u(0x00000020) #define CLOCKS_SLEEP_EN0_CLK_SYS_DMA_MSB _u(5) #define CLOCKS_SLEEP_EN0_CLK_SYS_DMA_LSB _u(5) #define CLOCKS_SLEEP_EN0_CLK_SYS_DMA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_BUSFABRIC // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_BUSFABRIC_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_BUSFABRIC_BITS _u(0x00000010) #define CLOCKS_SLEEP_EN0_CLK_SYS_BUSFABRIC_MSB _u(4) #define CLOCKS_SLEEP_EN0_CLK_SYS_BUSFABRIC_LSB _u(4) #define CLOCKS_SLEEP_EN0_CLK_SYS_BUSFABRIC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_BUSCTRL // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_BUSCTRL_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_BUSCTRL_BITS _u(0x00000008) #define CLOCKS_SLEEP_EN0_CLK_SYS_BUSCTRL_MSB _u(3) #define CLOCKS_SLEEP_EN0_CLK_SYS_BUSCTRL_LSB _u(3) #define CLOCKS_SLEEP_EN0_CLK_SYS_BUSCTRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_ADC // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_ADC_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_ADC_BITS _u(0x00000004) #define CLOCKS_SLEEP_EN0_CLK_SYS_ADC_MSB _u(2) #define CLOCKS_SLEEP_EN0_CLK_SYS_ADC_LSB _u(2) #define CLOCKS_SLEEP_EN0_CLK_SYS_ADC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_ADC_ADC // Description : None #define CLOCKS_SLEEP_EN0_CLK_ADC_ADC_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_ADC_ADC_BITS _u(0x00000002) #define CLOCKS_SLEEP_EN0_CLK_ADC_ADC_MSB _u(1) #define CLOCKS_SLEEP_EN0_CLK_ADC_ADC_LSB _u(1) #define CLOCKS_SLEEP_EN0_CLK_ADC_ADC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN0_CLK_SYS_CLOCKS // Description : None #define CLOCKS_SLEEP_EN0_CLK_SYS_CLOCKS_RESET _u(0x1) #define CLOCKS_SLEEP_EN0_CLK_SYS_CLOCKS_BITS _u(0x00000001) #define CLOCKS_SLEEP_EN0_CLK_SYS_CLOCKS_MSB _u(0) #define CLOCKS_SLEEP_EN0_CLK_SYS_CLOCKS_LSB _u(0) #define CLOCKS_SLEEP_EN0_CLK_SYS_CLOCKS_ACCESS "RW" // ============================================================================= // Register : CLOCKS_SLEEP_EN1 // Description : enable clock in sleep mode #define CLOCKS_SLEEP_EN1_OFFSET _u(0x000000ac) #define CLOCKS_SLEEP_EN1_BITS _u(0x00007fff) #define CLOCKS_SLEEP_EN1_RESET _u(0x00007fff) // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_XOSC // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_XOSC_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_XOSC_BITS _u(0x00004000) #define CLOCKS_SLEEP_EN1_CLK_SYS_XOSC_MSB _u(14) #define CLOCKS_SLEEP_EN1_CLK_SYS_XOSC_LSB _u(14) #define CLOCKS_SLEEP_EN1_CLK_SYS_XOSC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_XIP // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_XIP_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_XIP_BITS _u(0x00002000) #define CLOCKS_SLEEP_EN1_CLK_SYS_XIP_MSB _u(13) #define CLOCKS_SLEEP_EN1_CLK_SYS_XIP_LSB _u(13) #define CLOCKS_SLEEP_EN1_CLK_SYS_XIP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_WATCHDOG // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_WATCHDOG_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_WATCHDOG_BITS _u(0x00001000) #define CLOCKS_SLEEP_EN1_CLK_SYS_WATCHDOG_MSB _u(12) #define CLOCKS_SLEEP_EN1_CLK_SYS_WATCHDOG_LSB _u(12) #define CLOCKS_SLEEP_EN1_CLK_SYS_WATCHDOG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_USB_USBCTRL // Description : None #define CLOCKS_SLEEP_EN1_CLK_USB_USBCTRL_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_USB_USBCTRL_BITS _u(0x00000800) #define CLOCKS_SLEEP_EN1_CLK_USB_USBCTRL_MSB _u(11) #define CLOCKS_SLEEP_EN1_CLK_USB_USBCTRL_LSB _u(11) #define CLOCKS_SLEEP_EN1_CLK_USB_USBCTRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_USBCTRL // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_USBCTRL_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_USBCTRL_BITS _u(0x00000400) #define CLOCKS_SLEEP_EN1_CLK_SYS_USBCTRL_MSB _u(10) #define CLOCKS_SLEEP_EN1_CLK_SYS_USBCTRL_LSB _u(10) #define CLOCKS_SLEEP_EN1_CLK_SYS_USBCTRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_UART1 // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_UART1_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_UART1_BITS _u(0x00000200) #define CLOCKS_SLEEP_EN1_CLK_SYS_UART1_MSB _u(9) #define CLOCKS_SLEEP_EN1_CLK_SYS_UART1_LSB _u(9) #define CLOCKS_SLEEP_EN1_CLK_SYS_UART1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_PERI_UART1 // Description : None #define CLOCKS_SLEEP_EN1_CLK_PERI_UART1_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_PERI_UART1_BITS _u(0x00000100) #define CLOCKS_SLEEP_EN1_CLK_PERI_UART1_MSB _u(8) #define CLOCKS_SLEEP_EN1_CLK_PERI_UART1_LSB _u(8) #define CLOCKS_SLEEP_EN1_CLK_PERI_UART1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_UART0 // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_UART0_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_UART0_BITS _u(0x00000080) #define CLOCKS_SLEEP_EN1_CLK_SYS_UART0_MSB _u(7) #define CLOCKS_SLEEP_EN1_CLK_SYS_UART0_LSB _u(7) #define CLOCKS_SLEEP_EN1_CLK_SYS_UART0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_PERI_UART0 // Description : None #define CLOCKS_SLEEP_EN1_CLK_PERI_UART0_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_PERI_UART0_BITS _u(0x00000040) #define CLOCKS_SLEEP_EN1_CLK_PERI_UART0_MSB _u(6) #define CLOCKS_SLEEP_EN1_CLK_PERI_UART0_LSB _u(6) #define CLOCKS_SLEEP_EN1_CLK_PERI_UART0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_TIMER // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_TIMER_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_TIMER_BITS _u(0x00000020) #define CLOCKS_SLEEP_EN1_CLK_SYS_TIMER_MSB _u(5) #define CLOCKS_SLEEP_EN1_CLK_SYS_TIMER_LSB _u(5) #define CLOCKS_SLEEP_EN1_CLK_SYS_TIMER_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_TBMAN // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_TBMAN_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_TBMAN_BITS _u(0x00000010) #define CLOCKS_SLEEP_EN1_CLK_SYS_TBMAN_MSB _u(4) #define CLOCKS_SLEEP_EN1_CLK_SYS_TBMAN_LSB _u(4) #define CLOCKS_SLEEP_EN1_CLK_SYS_TBMAN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_SYSINFO // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_SYSINFO_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_SYSINFO_BITS _u(0x00000008) #define CLOCKS_SLEEP_EN1_CLK_SYS_SYSINFO_MSB _u(3) #define CLOCKS_SLEEP_EN1_CLK_SYS_SYSINFO_LSB _u(3) #define CLOCKS_SLEEP_EN1_CLK_SYS_SYSINFO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_SYSCFG // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_SYSCFG_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_SYSCFG_BITS _u(0x00000004) #define CLOCKS_SLEEP_EN1_CLK_SYS_SYSCFG_MSB _u(2) #define CLOCKS_SLEEP_EN1_CLK_SYS_SYSCFG_LSB _u(2) #define CLOCKS_SLEEP_EN1_CLK_SYS_SYSCFG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_SRAM5 // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_SRAM5_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_SRAM5_BITS _u(0x00000002) #define CLOCKS_SLEEP_EN1_CLK_SYS_SRAM5_MSB _u(1) #define CLOCKS_SLEEP_EN1_CLK_SYS_SRAM5_LSB _u(1) #define CLOCKS_SLEEP_EN1_CLK_SYS_SRAM5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : CLOCKS_SLEEP_EN1_CLK_SYS_SRAM4 // Description : None #define CLOCKS_SLEEP_EN1_CLK_SYS_SRAM4_RESET _u(0x1) #define CLOCKS_SLEEP_EN1_CLK_SYS_SRAM4_BITS _u(0x00000001) #define CLOCKS_SLEEP_EN1_CLK_SYS_SRAM4_MSB _u(0) #define CLOCKS_SLEEP_EN1_CLK_SYS_SRAM4_LSB _u(0) #define CLOCKS_SLEEP_EN1_CLK_SYS_SRAM4_ACCESS "RW" // ============================================================================= // Register : CLOCKS_ENABLED0 // Description : indicates the state of the clock enable #define CLOCKS_ENABLED0_OFFSET _u(0x000000b0) #define CLOCKS_ENABLED0_BITS _u(0xffffffff) #define CLOCKS_ENABLED0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_SRAM3 // Description : None #define CLOCKS_ENABLED0_CLK_SYS_SRAM3_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_SRAM3_BITS _u(0x80000000) #define CLOCKS_ENABLED0_CLK_SYS_SRAM3_MSB _u(31) #define CLOCKS_ENABLED0_CLK_SYS_SRAM3_LSB _u(31) #define CLOCKS_ENABLED0_CLK_SYS_SRAM3_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_SRAM2 // Description : None #define CLOCKS_ENABLED0_CLK_SYS_SRAM2_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_SRAM2_BITS _u(0x40000000) #define CLOCKS_ENABLED0_CLK_SYS_SRAM2_MSB _u(30) #define CLOCKS_ENABLED0_CLK_SYS_SRAM2_LSB _u(30) #define CLOCKS_ENABLED0_CLK_SYS_SRAM2_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_SRAM1 // Description : None #define CLOCKS_ENABLED0_CLK_SYS_SRAM1_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_SRAM1_BITS _u(0x20000000) #define CLOCKS_ENABLED0_CLK_SYS_SRAM1_MSB _u(29) #define CLOCKS_ENABLED0_CLK_SYS_SRAM1_LSB _u(29) #define CLOCKS_ENABLED0_CLK_SYS_SRAM1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_SRAM0 // Description : None #define CLOCKS_ENABLED0_CLK_SYS_SRAM0_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_SRAM0_BITS _u(0x10000000) #define CLOCKS_ENABLED0_CLK_SYS_SRAM0_MSB _u(28) #define CLOCKS_ENABLED0_CLK_SYS_SRAM0_LSB _u(28) #define CLOCKS_ENABLED0_CLK_SYS_SRAM0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_SPI1 // Description : None #define CLOCKS_ENABLED0_CLK_SYS_SPI1_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_SPI1_BITS _u(0x08000000) #define CLOCKS_ENABLED0_CLK_SYS_SPI1_MSB _u(27) #define CLOCKS_ENABLED0_CLK_SYS_SPI1_LSB _u(27) #define CLOCKS_ENABLED0_CLK_SYS_SPI1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_PERI_SPI1 // Description : None #define CLOCKS_ENABLED0_CLK_PERI_SPI1_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_PERI_SPI1_BITS _u(0x04000000) #define CLOCKS_ENABLED0_CLK_PERI_SPI1_MSB _u(26) #define CLOCKS_ENABLED0_CLK_PERI_SPI1_LSB _u(26) #define CLOCKS_ENABLED0_CLK_PERI_SPI1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_SPI0 // Description : None #define CLOCKS_ENABLED0_CLK_SYS_SPI0_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_SPI0_BITS _u(0x02000000) #define CLOCKS_ENABLED0_CLK_SYS_SPI0_MSB _u(25) #define CLOCKS_ENABLED0_CLK_SYS_SPI0_LSB _u(25) #define CLOCKS_ENABLED0_CLK_SYS_SPI0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_PERI_SPI0 // Description : None #define CLOCKS_ENABLED0_CLK_PERI_SPI0_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_PERI_SPI0_BITS _u(0x01000000) #define CLOCKS_ENABLED0_CLK_PERI_SPI0_MSB _u(24) #define CLOCKS_ENABLED0_CLK_PERI_SPI0_LSB _u(24) #define CLOCKS_ENABLED0_CLK_PERI_SPI0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_SIO // Description : None #define CLOCKS_ENABLED0_CLK_SYS_SIO_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_SIO_BITS _u(0x00800000) #define CLOCKS_ENABLED0_CLK_SYS_SIO_MSB _u(23) #define CLOCKS_ENABLED0_CLK_SYS_SIO_LSB _u(23) #define CLOCKS_ENABLED0_CLK_SYS_SIO_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_RTC // Description : None #define CLOCKS_ENABLED0_CLK_SYS_RTC_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_RTC_BITS _u(0x00400000) #define CLOCKS_ENABLED0_CLK_SYS_RTC_MSB _u(22) #define CLOCKS_ENABLED0_CLK_SYS_RTC_LSB _u(22) #define CLOCKS_ENABLED0_CLK_SYS_RTC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_RTC_RTC // Description : None #define CLOCKS_ENABLED0_CLK_RTC_RTC_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_RTC_RTC_BITS _u(0x00200000) #define CLOCKS_ENABLED0_CLK_RTC_RTC_MSB _u(21) #define CLOCKS_ENABLED0_CLK_RTC_RTC_LSB _u(21) #define CLOCKS_ENABLED0_CLK_RTC_RTC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_ROSC // Description : None #define CLOCKS_ENABLED0_CLK_SYS_ROSC_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_ROSC_BITS _u(0x00100000) #define CLOCKS_ENABLED0_CLK_SYS_ROSC_MSB _u(20) #define CLOCKS_ENABLED0_CLK_SYS_ROSC_LSB _u(20) #define CLOCKS_ENABLED0_CLK_SYS_ROSC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_ROM // Description : None #define CLOCKS_ENABLED0_CLK_SYS_ROM_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_ROM_BITS _u(0x00080000) #define CLOCKS_ENABLED0_CLK_SYS_ROM_MSB _u(19) #define CLOCKS_ENABLED0_CLK_SYS_ROM_LSB _u(19) #define CLOCKS_ENABLED0_CLK_SYS_ROM_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_RESETS // Description : None #define CLOCKS_ENABLED0_CLK_SYS_RESETS_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_RESETS_BITS _u(0x00040000) #define CLOCKS_ENABLED0_CLK_SYS_RESETS_MSB _u(18) #define CLOCKS_ENABLED0_CLK_SYS_RESETS_LSB _u(18) #define CLOCKS_ENABLED0_CLK_SYS_RESETS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_PWM // Description : None #define CLOCKS_ENABLED0_CLK_SYS_PWM_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_PWM_BITS _u(0x00020000) #define CLOCKS_ENABLED0_CLK_SYS_PWM_MSB _u(17) #define CLOCKS_ENABLED0_CLK_SYS_PWM_LSB _u(17) #define CLOCKS_ENABLED0_CLK_SYS_PWM_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_PSM // Description : None #define CLOCKS_ENABLED0_CLK_SYS_PSM_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_PSM_BITS _u(0x00010000) #define CLOCKS_ENABLED0_CLK_SYS_PSM_MSB _u(16) #define CLOCKS_ENABLED0_CLK_SYS_PSM_LSB _u(16) #define CLOCKS_ENABLED0_CLK_SYS_PSM_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_PLL_USB // Description : None #define CLOCKS_ENABLED0_CLK_SYS_PLL_USB_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_PLL_USB_BITS _u(0x00008000) #define CLOCKS_ENABLED0_CLK_SYS_PLL_USB_MSB _u(15) #define CLOCKS_ENABLED0_CLK_SYS_PLL_USB_LSB _u(15) #define CLOCKS_ENABLED0_CLK_SYS_PLL_USB_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_PLL_SYS // Description : None #define CLOCKS_ENABLED0_CLK_SYS_PLL_SYS_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_PLL_SYS_BITS _u(0x00004000) #define CLOCKS_ENABLED0_CLK_SYS_PLL_SYS_MSB _u(14) #define CLOCKS_ENABLED0_CLK_SYS_PLL_SYS_LSB _u(14) #define CLOCKS_ENABLED0_CLK_SYS_PLL_SYS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_PIO1 // Description : None #define CLOCKS_ENABLED0_CLK_SYS_PIO1_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_PIO1_BITS _u(0x00002000) #define CLOCKS_ENABLED0_CLK_SYS_PIO1_MSB _u(13) #define CLOCKS_ENABLED0_CLK_SYS_PIO1_LSB _u(13) #define CLOCKS_ENABLED0_CLK_SYS_PIO1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_PIO0 // Description : None #define CLOCKS_ENABLED0_CLK_SYS_PIO0_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_PIO0_BITS _u(0x00001000) #define CLOCKS_ENABLED0_CLK_SYS_PIO0_MSB _u(12) #define CLOCKS_ENABLED0_CLK_SYS_PIO0_LSB _u(12) #define CLOCKS_ENABLED0_CLK_SYS_PIO0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_PADS // Description : None #define CLOCKS_ENABLED0_CLK_SYS_PADS_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_PADS_BITS _u(0x00000800) #define CLOCKS_ENABLED0_CLK_SYS_PADS_MSB _u(11) #define CLOCKS_ENABLED0_CLK_SYS_PADS_LSB _u(11) #define CLOCKS_ENABLED0_CLK_SYS_PADS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_VREG_AND_CHIP_RESET // Description : None #define CLOCKS_ENABLED0_CLK_SYS_VREG_AND_CHIP_RESET_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_VREG_AND_CHIP_RESET_BITS _u(0x00000400) #define CLOCKS_ENABLED0_CLK_SYS_VREG_AND_CHIP_RESET_MSB _u(10) #define CLOCKS_ENABLED0_CLK_SYS_VREG_AND_CHIP_RESET_LSB _u(10) #define CLOCKS_ENABLED0_CLK_SYS_VREG_AND_CHIP_RESET_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_JTAG // Description : None #define CLOCKS_ENABLED0_CLK_SYS_JTAG_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_JTAG_BITS _u(0x00000200) #define CLOCKS_ENABLED0_CLK_SYS_JTAG_MSB _u(9) #define CLOCKS_ENABLED0_CLK_SYS_JTAG_LSB _u(9) #define CLOCKS_ENABLED0_CLK_SYS_JTAG_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_IO // Description : None #define CLOCKS_ENABLED0_CLK_SYS_IO_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_IO_BITS _u(0x00000100) #define CLOCKS_ENABLED0_CLK_SYS_IO_MSB _u(8) #define CLOCKS_ENABLED0_CLK_SYS_IO_LSB _u(8) #define CLOCKS_ENABLED0_CLK_SYS_IO_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_I2C1 // Description : None #define CLOCKS_ENABLED0_CLK_SYS_I2C1_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_I2C1_BITS _u(0x00000080) #define CLOCKS_ENABLED0_CLK_SYS_I2C1_MSB _u(7) #define CLOCKS_ENABLED0_CLK_SYS_I2C1_LSB _u(7) #define CLOCKS_ENABLED0_CLK_SYS_I2C1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_I2C0 // Description : None #define CLOCKS_ENABLED0_CLK_SYS_I2C0_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_I2C0_BITS _u(0x00000040) #define CLOCKS_ENABLED0_CLK_SYS_I2C0_MSB _u(6) #define CLOCKS_ENABLED0_CLK_SYS_I2C0_LSB _u(6) #define CLOCKS_ENABLED0_CLK_SYS_I2C0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_DMA // Description : None #define CLOCKS_ENABLED0_CLK_SYS_DMA_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_DMA_BITS _u(0x00000020) #define CLOCKS_ENABLED0_CLK_SYS_DMA_MSB _u(5) #define CLOCKS_ENABLED0_CLK_SYS_DMA_LSB _u(5) #define CLOCKS_ENABLED0_CLK_SYS_DMA_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_BUSFABRIC // Description : None #define CLOCKS_ENABLED0_CLK_SYS_BUSFABRIC_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_BUSFABRIC_BITS _u(0x00000010) #define CLOCKS_ENABLED0_CLK_SYS_BUSFABRIC_MSB _u(4) #define CLOCKS_ENABLED0_CLK_SYS_BUSFABRIC_LSB _u(4) #define CLOCKS_ENABLED0_CLK_SYS_BUSFABRIC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_BUSCTRL // Description : None #define CLOCKS_ENABLED0_CLK_SYS_BUSCTRL_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_BUSCTRL_BITS _u(0x00000008) #define CLOCKS_ENABLED0_CLK_SYS_BUSCTRL_MSB _u(3) #define CLOCKS_ENABLED0_CLK_SYS_BUSCTRL_LSB _u(3) #define CLOCKS_ENABLED0_CLK_SYS_BUSCTRL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_ADC // Description : None #define CLOCKS_ENABLED0_CLK_SYS_ADC_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_ADC_BITS _u(0x00000004) #define CLOCKS_ENABLED0_CLK_SYS_ADC_MSB _u(2) #define CLOCKS_ENABLED0_CLK_SYS_ADC_LSB _u(2) #define CLOCKS_ENABLED0_CLK_SYS_ADC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_ADC_ADC // Description : None #define CLOCKS_ENABLED0_CLK_ADC_ADC_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_ADC_ADC_BITS _u(0x00000002) #define CLOCKS_ENABLED0_CLK_ADC_ADC_MSB _u(1) #define CLOCKS_ENABLED0_CLK_ADC_ADC_LSB _u(1) #define CLOCKS_ENABLED0_CLK_ADC_ADC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED0_CLK_SYS_CLOCKS // Description : None #define CLOCKS_ENABLED0_CLK_SYS_CLOCKS_RESET _u(0x0) #define CLOCKS_ENABLED0_CLK_SYS_CLOCKS_BITS _u(0x00000001) #define CLOCKS_ENABLED0_CLK_SYS_CLOCKS_MSB _u(0) #define CLOCKS_ENABLED0_CLK_SYS_CLOCKS_LSB _u(0) #define CLOCKS_ENABLED0_CLK_SYS_CLOCKS_ACCESS "RO" // ============================================================================= // Register : CLOCKS_ENABLED1 // Description : indicates the state of the clock enable #define CLOCKS_ENABLED1_OFFSET _u(0x000000b4) #define CLOCKS_ENABLED1_BITS _u(0x00007fff) #define CLOCKS_ENABLED1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_XOSC // Description : None #define CLOCKS_ENABLED1_CLK_SYS_XOSC_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_XOSC_BITS _u(0x00004000) #define CLOCKS_ENABLED1_CLK_SYS_XOSC_MSB _u(14) #define CLOCKS_ENABLED1_CLK_SYS_XOSC_LSB _u(14) #define CLOCKS_ENABLED1_CLK_SYS_XOSC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_XIP // Description : None #define CLOCKS_ENABLED1_CLK_SYS_XIP_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_XIP_BITS _u(0x00002000) #define CLOCKS_ENABLED1_CLK_SYS_XIP_MSB _u(13) #define CLOCKS_ENABLED1_CLK_SYS_XIP_LSB _u(13) #define CLOCKS_ENABLED1_CLK_SYS_XIP_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_WATCHDOG // Description : None #define CLOCKS_ENABLED1_CLK_SYS_WATCHDOG_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_WATCHDOG_BITS _u(0x00001000) #define CLOCKS_ENABLED1_CLK_SYS_WATCHDOG_MSB _u(12) #define CLOCKS_ENABLED1_CLK_SYS_WATCHDOG_LSB _u(12) #define CLOCKS_ENABLED1_CLK_SYS_WATCHDOG_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_USB_USBCTRL // Description : None #define CLOCKS_ENABLED1_CLK_USB_USBCTRL_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_USB_USBCTRL_BITS _u(0x00000800) #define CLOCKS_ENABLED1_CLK_USB_USBCTRL_MSB _u(11) #define CLOCKS_ENABLED1_CLK_USB_USBCTRL_LSB _u(11) #define CLOCKS_ENABLED1_CLK_USB_USBCTRL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_USBCTRL // Description : None #define CLOCKS_ENABLED1_CLK_SYS_USBCTRL_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_USBCTRL_BITS _u(0x00000400) #define CLOCKS_ENABLED1_CLK_SYS_USBCTRL_MSB _u(10) #define CLOCKS_ENABLED1_CLK_SYS_USBCTRL_LSB _u(10) #define CLOCKS_ENABLED1_CLK_SYS_USBCTRL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_UART1 // Description : None #define CLOCKS_ENABLED1_CLK_SYS_UART1_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_UART1_BITS _u(0x00000200) #define CLOCKS_ENABLED1_CLK_SYS_UART1_MSB _u(9) #define CLOCKS_ENABLED1_CLK_SYS_UART1_LSB _u(9) #define CLOCKS_ENABLED1_CLK_SYS_UART1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_PERI_UART1 // Description : None #define CLOCKS_ENABLED1_CLK_PERI_UART1_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_PERI_UART1_BITS _u(0x00000100) #define CLOCKS_ENABLED1_CLK_PERI_UART1_MSB _u(8) #define CLOCKS_ENABLED1_CLK_PERI_UART1_LSB _u(8) #define CLOCKS_ENABLED1_CLK_PERI_UART1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_UART0 // Description : None #define CLOCKS_ENABLED1_CLK_SYS_UART0_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_UART0_BITS _u(0x00000080) #define CLOCKS_ENABLED1_CLK_SYS_UART0_MSB _u(7) #define CLOCKS_ENABLED1_CLK_SYS_UART0_LSB _u(7) #define CLOCKS_ENABLED1_CLK_SYS_UART0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_PERI_UART0 // Description : None #define CLOCKS_ENABLED1_CLK_PERI_UART0_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_PERI_UART0_BITS _u(0x00000040) #define CLOCKS_ENABLED1_CLK_PERI_UART0_MSB _u(6) #define CLOCKS_ENABLED1_CLK_PERI_UART0_LSB _u(6) #define CLOCKS_ENABLED1_CLK_PERI_UART0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_TIMER // Description : None #define CLOCKS_ENABLED1_CLK_SYS_TIMER_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_TIMER_BITS _u(0x00000020) #define CLOCKS_ENABLED1_CLK_SYS_TIMER_MSB _u(5) #define CLOCKS_ENABLED1_CLK_SYS_TIMER_LSB _u(5) #define CLOCKS_ENABLED1_CLK_SYS_TIMER_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_TBMAN // Description : None #define CLOCKS_ENABLED1_CLK_SYS_TBMAN_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_TBMAN_BITS _u(0x00000010) #define CLOCKS_ENABLED1_CLK_SYS_TBMAN_MSB _u(4) #define CLOCKS_ENABLED1_CLK_SYS_TBMAN_LSB _u(4) #define CLOCKS_ENABLED1_CLK_SYS_TBMAN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_SYSINFO // Description : None #define CLOCKS_ENABLED1_CLK_SYS_SYSINFO_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_SYSINFO_BITS _u(0x00000008) #define CLOCKS_ENABLED1_CLK_SYS_SYSINFO_MSB _u(3) #define CLOCKS_ENABLED1_CLK_SYS_SYSINFO_LSB _u(3) #define CLOCKS_ENABLED1_CLK_SYS_SYSINFO_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_SYSCFG // Description : None #define CLOCKS_ENABLED1_CLK_SYS_SYSCFG_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_SYSCFG_BITS _u(0x00000004) #define CLOCKS_ENABLED1_CLK_SYS_SYSCFG_MSB _u(2) #define CLOCKS_ENABLED1_CLK_SYS_SYSCFG_LSB _u(2) #define CLOCKS_ENABLED1_CLK_SYS_SYSCFG_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_SRAM5 // Description : None #define CLOCKS_ENABLED1_CLK_SYS_SRAM5_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_SRAM5_BITS _u(0x00000002) #define CLOCKS_ENABLED1_CLK_SYS_SRAM5_MSB _u(1) #define CLOCKS_ENABLED1_CLK_SYS_SRAM5_LSB _u(1) #define CLOCKS_ENABLED1_CLK_SYS_SRAM5_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : CLOCKS_ENABLED1_CLK_SYS_SRAM4 // Description : None #define CLOCKS_ENABLED1_CLK_SYS_SRAM4_RESET _u(0x0) #define CLOCKS_ENABLED1_CLK_SYS_SRAM4_BITS _u(0x00000001) #define CLOCKS_ENABLED1_CLK_SYS_SRAM4_MSB _u(0) #define CLOCKS_ENABLED1_CLK_SYS_SRAM4_LSB _u(0) #define CLOCKS_ENABLED1_CLK_SYS_SRAM4_ACCESS "RO" // ============================================================================= // Register : CLOCKS_INTR // Description : Raw Interrupts #define CLOCKS_INTR_OFFSET _u(0x000000b8) #define CLOCKS_INTR_BITS _u(0x00000001) #define CLOCKS_INTR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_INTR_CLK_SYS_RESUS // Description : None #define CLOCKS_INTR_CLK_SYS_RESUS_RESET _u(0x0) #define CLOCKS_INTR_CLK_SYS_RESUS_BITS _u(0x00000001) #define CLOCKS_INTR_CLK_SYS_RESUS_MSB _u(0) #define CLOCKS_INTR_CLK_SYS_RESUS_LSB _u(0) #define CLOCKS_INTR_CLK_SYS_RESUS_ACCESS "RO" // ============================================================================= // Register : CLOCKS_INTE // Description : Interrupt Enable #define CLOCKS_INTE_OFFSET _u(0x000000bc) #define CLOCKS_INTE_BITS _u(0x00000001) #define CLOCKS_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_INTE_CLK_SYS_RESUS // Description : None #define CLOCKS_INTE_CLK_SYS_RESUS_RESET _u(0x0) #define CLOCKS_INTE_CLK_SYS_RESUS_BITS _u(0x00000001) #define CLOCKS_INTE_CLK_SYS_RESUS_MSB _u(0) #define CLOCKS_INTE_CLK_SYS_RESUS_LSB _u(0) #define CLOCKS_INTE_CLK_SYS_RESUS_ACCESS "RW" // ============================================================================= // Register : CLOCKS_INTF // Description : Interrupt Force #define CLOCKS_INTF_OFFSET _u(0x000000c0) #define CLOCKS_INTF_BITS _u(0x00000001) #define CLOCKS_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_INTF_CLK_SYS_RESUS // Description : None #define CLOCKS_INTF_CLK_SYS_RESUS_RESET _u(0x0) #define CLOCKS_INTF_CLK_SYS_RESUS_BITS _u(0x00000001) #define CLOCKS_INTF_CLK_SYS_RESUS_MSB _u(0) #define CLOCKS_INTF_CLK_SYS_RESUS_LSB _u(0) #define CLOCKS_INTF_CLK_SYS_RESUS_ACCESS "RW" // ============================================================================= // Register : CLOCKS_INTS // Description : Interrupt status after masking & forcing #define CLOCKS_INTS_OFFSET _u(0x000000c4) #define CLOCKS_INTS_BITS _u(0x00000001) #define CLOCKS_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : CLOCKS_INTS_CLK_SYS_RESUS // Description : None #define CLOCKS_INTS_CLK_SYS_RESUS_RESET _u(0x0) #define CLOCKS_INTS_CLK_SYS_RESUS_BITS _u(0x00000001) #define CLOCKS_INTS_CLK_SYS_RESUS_MSB _u(0) #define CLOCKS_INTS_CLK_SYS_RESUS_LSB _u(0) #define CLOCKS_INTS_CLK_SYS_RESUS_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_CLOCKS_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/dma.h ================================================ /** * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : DMA // Version : 1 // Bus type : apb // Description : DMA with separate read and write masters // ============================================================================= #ifndef HARDWARE_REGS_DMA_DEFINED #define HARDWARE_REGS_DMA_DEFINED // ============================================================================= // Register : DMA_CH0_READ_ADDR // Description : DMA Channel 0 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH0_READ_ADDR_OFFSET _u(0x00000000) #define DMA_CH0_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH0_READ_ADDR_RESET _u(0x00000000) #define DMA_CH0_READ_ADDR_MSB _u(31) #define DMA_CH0_READ_ADDR_LSB _u(0) #define DMA_CH0_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_WRITE_ADDR // Description : DMA Channel 0 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH0_WRITE_ADDR_OFFSET _u(0x00000004) #define DMA_CH0_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH0_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH0_WRITE_ADDR_MSB _u(31) #define DMA_CH0_WRITE_ADDR_LSB _u(0) #define DMA_CH0_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_TRANS_COUNT // Description : DMA Channel 0 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH0_TRANS_COUNT_OFFSET _u(0x00000008) #define DMA_CH0_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH0_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH0_TRANS_COUNT_MSB _u(31) #define DMA_CH0_TRANS_COUNT_LSB _u(0) #define DMA_CH0_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_CTRL_TRIG // Description : DMA Channel 0 Control and Status #define DMA_CH0_CTRL_TRIG_OFFSET _u(0x0000000c) #define DMA_CH0_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH0_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH0_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH0_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH0_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH0_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH0_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH0_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH0_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH0_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH0_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH0_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH0_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH0_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH0_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH0_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH0_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH0_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH0_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH0_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH0_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH0_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH0_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH0_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH0_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH0_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH0_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH0_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH0_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH0_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH0_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH0_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH0_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH0_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH0_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH0_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH0_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH0_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH0_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH0_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH0_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH0_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH0_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH0_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH0_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH0_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH0_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH0_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH0_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH0_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH0_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH0_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH0_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH0_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH0_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH0_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH0_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH0_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH0_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH0_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH0_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH0_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH0_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH0_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH0_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH0_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH0_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH0_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH0_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL1_CTRL // Description : Alias for channel 0 CTRL register #define DMA_CH0_AL1_CTRL_OFFSET _u(0x00000010) #define DMA_CH0_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH0_AL1_CTRL_RESET "-" #define DMA_CH0_AL1_CTRL_MSB _u(31) #define DMA_CH0_AL1_CTRL_LSB _u(0) #define DMA_CH0_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL1_READ_ADDR // Description : Alias for channel 0 READ_ADDR register #define DMA_CH0_AL1_READ_ADDR_OFFSET _u(0x00000014) #define DMA_CH0_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH0_AL1_READ_ADDR_RESET "-" #define DMA_CH0_AL1_READ_ADDR_MSB _u(31) #define DMA_CH0_AL1_READ_ADDR_LSB _u(0) #define DMA_CH0_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL1_WRITE_ADDR // Description : Alias for channel 0 WRITE_ADDR register #define DMA_CH0_AL1_WRITE_ADDR_OFFSET _u(0x00000018) #define DMA_CH0_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH0_AL1_WRITE_ADDR_RESET "-" #define DMA_CH0_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH0_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH0_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 0 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH0_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x0000001c) #define DMA_CH0_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH0_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH0_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH0_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH0_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL2_CTRL // Description : Alias for channel 0 CTRL register #define DMA_CH0_AL2_CTRL_OFFSET _u(0x00000020) #define DMA_CH0_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH0_AL2_CTRL_RESET "-" #define DMA_CH0_AL2_CTRL_MSB _u(31) #define DMA_CH0_AL2_CTRL_LSB _u(0) #define DMA_CH0_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL2_TRANS_COUNT // Description : Alias for channel 0 TRANS_COUNT register #define DMA_CH0_AL2_TRANS_COUNT_OFFSET _u(0x00000024) #define DMA_CH0_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH0_AL2_TRANS_COUNT_RESET "-" #define DMA_CH0_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH0_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH0_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL2_READ_ADDR // Description : Alias for channel 0 READ_ADDR register #define DMA_CH0_AL2_READ_ADDR_OFFSET _u(0x00000028) #define DMA_CH0_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH0_AL2_READ_ADDR_RESET "-" #define DMA_CH0_AL2_READ_ADDR_MSB _u(31) #define DMA_CH0_AL2_READ_ADDR_LSB _u(0) #define DMA_CH0_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 0 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH0_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x0000002c) #define DMA_CH0_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH0_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH0_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH0_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH0_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL3_CTRL // Description : Alias for channel 0 CTRL register #define DMA_CH0_AL3_CTRL_OFFSET _u(0x00000030) #define DMA_CH0_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH0_AL3_CTRL_RESET "-" #define DMA_CH0_AL3_CTRL_MSB _u(31) #define DMA_CH0_AL3_CTRL_LSB _u(0) #define DMA_CH0_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL3_WRITE_ADDR // Description : Alias for channel 0 WRITE_ADDR register #define DMA_CH0_AL3_WRITE_ADDR_OFFSET _u(0x00000034) #define DMA_CH0_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH0_AL3_WRITE_ADDR_RESET "-" #define DMA_CH0_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH0_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH0_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL3_TRANS_COUNT // Description : Alias for channel 0 TRANS_COUNT register #define DMA_CH0_AL3_TRANS_COUNT_OFFSET _u(0x00000038) #define DMA_CH0_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH0_AL3_TRANS_COUNT_RESET "-" #define DMA_CH0_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH0_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH0_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH0_AL3_READ_ADDR_TRIG // Description : Alias for channel 0 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH0_AL3_READ_ADDR_TRIG_OFFSET _u(0x0000003c) #define DMA_CH0_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH0_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH0_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH0_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH0_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_READ_ADDR // Description : DMA Channel 1 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH1_READ_ADDR_OFFSET _u(0x00000040) #define DMA_CH1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH1_READ_ADDR_RESET _u(0x00000000) #define DMA_CH1_READ_ADDR_MSB _u(31) #define DMA_CH1_READ_ADDR_LSB _u(0) #define DMA_CH1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_WRITE_ADDR // Description : DMA Channel 1 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH1_WRITE_ADDR_OFFSET _u(0x00000044) #define DMA_CH1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH1_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH1_WRITE_ADDR_MSB _u(31) #define DMA_CH1_WRITE_ADDR_LSB _u(0) #define DMA_CH1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_TRANS_COUNT // Description : DMA Channel 1 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH1_TRANS_COUNT_OFFSET _u(0x00000048) #define DMA_CH1_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH1_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH1_TRANS_COUNT_MSB _u(31) #define DMA_CH1_TRANS_COUNT_LSB _u(0) #define DMA_CH1_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_CTRL_TRIG // Description : DMA Channel 1 Control and Status #define DMA_CH1_CTRL_TRIG_OFFSET _u(0x0000004c) #define DMA_CH1_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH1_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH1_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH1_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH1_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH1_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH1_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH1_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH1_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH1_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH1_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH1_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH1_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH1_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH1_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH1_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH1_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH1_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH1_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH1_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH1_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH1_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH1_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH1_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH1_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH1_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH1_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH1_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH1_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH1_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH1_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH1_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH1_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH1_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH1_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH1_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH1_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH1_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH1_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH1_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH1_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH1_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH1_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH1_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH1_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH1_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH1_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH1_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH1_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH1_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH1_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH1_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH1_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH1_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH1_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH1_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH1_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH1_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH1_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH1_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH1_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH1_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH1_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH1_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH1_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH1_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH1_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH1_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH1_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH1_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH1_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH1_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH1_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH1_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH1_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH1_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH1_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH1_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL1_CTRL // Description : Alias for channel 1 CTRL register #define DMA_CH1_AL1_CTRL_OFFSET _u(0x00000050) #define DMA_CH1_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH1_AL1_CTRL_RESET "-" #define DMA_CH1_AL1_CTRL_MSB _u(31) #define DMA_CH1_AL1_CTRL_LSB _u(0) #define DMA_CH1_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL1_READ_ADDR // Description : Alias for channel 1 READ_ADDR register #define DMA_CH1_AL1_READ_ADDR_OFFSET _u(0x00000054) #define DMA_CH1_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH1_AL1_READ_ADDR_RESET "-" #define DMA_CH1_AL1_READ_ADDR_MSB _u(31) #define DMA_CH1_AL1_READ_ADDR_LSB _u(0) #define DMA_CH1_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL1_WRITE_ADDR // Description : Alias for channel 1 WRITE_ADDR register #define DMA_CH1_AL1_WRITE_ADDR_OFFSET _u(0x00000058) #define DMA_CH1_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH1_AL1_WRITE_ADDR_RESET "-" #define DMA_CH1_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH1_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH1_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 1 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH1_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x0000005c) #define DMA_CH1_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH1_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH1_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH1_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH1_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL2_CTRL // Description : Alias for channel 1 CTRL register #define DMA_CH1_AL2_CTRL_OFFSET _u(0x00000060) #define DMA_CH1_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH1_AL2_CTRL_RESET "-" #define DMA_CH1_AL2_CTRL_MSB _u(31) #define DMA_CH1_AL2_CTRL_LSB _u(0) #define DMA_CH1_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL2_TRANS_COUNT // Description : Alias for channel 1 TRANS_COUNT register #define DMA_CH1_AL2_TRANS_COUNT_OFFSET _u(0x00000064) #define DMA_CH1_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH1_AL2_TRANS_COUNT_RESET "-" #define DMA_CH1_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH1_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH1_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL2_READ_ADDR // Description : Alias for channel 1 READ_ADDR register #define DMA_CH1_AL2_READ_ADDR_OFFSET _u(0x00000068) #define DMA_CH1_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH1_AL2_READ_ADDR_RESET "-" #define DMA_CH1_AL2_READ_ADDR_MSB _u(31) #define DMA_CH1_AL2_READ_ADDR_LSB _u(0) #define DMA_CH1_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 1 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH1_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x0000006c) #define DMA_CH1_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH1_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH1_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH1_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH1_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL3_CTRL // Description : Alias for channel 1 CTRL register #define DMA_CH1_AL3_CTRL_OFFSET _u(0x00000070) #define DMA_CH1_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH1_AL3_CTRL_RESET "-" #define DMA_CH1_AL3_CTRL_MSB _u(31) #define DMA_CH1_AL3_CTRL_LSB _u(0) #define DMA_CH1_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL3_WRITE_ADDR // Description : Alias for channel 1 WRITE_ADDR register #define DMA_CH1_AL3_WRITE_ADDR_OFFSET _u(0x00000074) #define DMA_CH1_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH1_AL3_WRITE_ADDR_RESET "-" #define DMA_CH1_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH1_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH1_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL3_TRANS_COUNT // Description : Alias for channel 1 TRANS_COUNT register #define DMA_CH1_AL3_TRANS_COUNT_OFFSET _u(0x00000078) #define DMA_CH1_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH1_AL3_TRANS_COUNT_RESET "-" #define DMA_CH1_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH1_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH1_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH1_AL3_READ_ADDR_TRIG // Description : Alias for channel 1 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH1_AL3_READ_ADDR_TRIG_OFFSET _u(0x0000007c) #define DMA_CH1_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH1_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH1_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH1_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH1_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_READ_ADDR // Description : DMA Channel 2 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH2_READ_ADDR_OFFSET _u(0x00000080) #define DMA_CH2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH2_READ_ADDR_RESET _u(0x00000000) #define DMA_CH2_READ_ADDR_MSB _u(31) #define DMA_CH2_READ_ADDR_LSB _u(0) #define DMA_CH2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_WRITE_ADDR // Description : DMA Channel 2 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH2_WRITE_ADDR_OFFSET _u(0x00000084) #define DMA_CH2_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH2_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH2_WRITE_ADDR_MSB _u(31) #define DMA_CH2_WRITE_ADDR_LSB _u(0) #define DMA_CH2_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_TRANS_COUNT // Description : DMA Channel 2 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH2_TRANS_COUNT_OFFSET _u(0x00000088) #define DMA_CH2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH2_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH2_TRANS_COUNT_MSB _u(31) #define DMA_CH2_TRANS_COUNT_LSB _u(0) #define DMA_CH2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_CTRL_TRIG // Description : DMA Channel 2 Control and Status #define DMA_CH2_CTRL_TRIG_OFFSET _u(0x0000008c) #define DMA_CH2_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH2_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH2_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH2_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH2_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH2_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH2_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH2_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH2_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH2_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH2_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH2_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH2_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH2_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH2_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH2_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH2_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH2_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH2_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH2_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH2_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH2_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH2_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH2_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH2_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH2_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH2_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH2_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH2_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH2_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH2_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH2_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH2_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH2_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH2_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH2_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH2_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH2_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH2_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH2_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH2_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH2_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH2_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH2_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH2_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH2_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH2_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH2_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH2_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH2_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH2_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH2_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH2_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH2_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH2_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH2_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH2_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH2_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH2_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH2_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH2_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH2_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH2_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH2_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH2_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH2_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH2_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH2_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH2_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH2_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH2_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH2_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH2_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH2_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH2_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH2_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH2_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH2_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL1_CTRL // Description : Alias for channel 2 CTRL register #define DMA_CH2_AL1_CTRL_OFFSET _u(0x00000090) #define DMA_CH2_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH2_AL1_CTRL_RESET "-" #define DMA_CH2_AL1_CTRL_MSB _u(31) #define DMA_CH2_AL1_CTRL_LSB _u(0) #define DMA_CH2_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL1_READ_ADDR // Description : Alias for channel 2 READ_ADDR register #define DMA_CH2_AL1_READ_ADDR_OFFSET _u(0x00000094) #define DMA_CH2_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH2_AL1_READ_ADDR_RESET "-" #define DMA_CH2_AL1_READ_ADDR_MSB _u(31) #define DMA_CH2_AL1_READ_ADDR_LSB _u(0) #define DMA_CH2_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL1_WRITE_ADDR // Description : Alias for channel 2 WRITE_ADDR register #define DMA_CH2_AL1_WRITE_ADDR_OFFSET _u(0x00000098) #define DMA_CH2_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH2_AL1_WRITE_ADDR_RESET "-" #define DMA_CH2_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH2_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH2_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 2 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH2_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x0000009c) #define DMA_CH2_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH2_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH2_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH2_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH2_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL2_CTRL // Description : Alias for channel 2 CTRL register #define DMA_CH2_AL2_CTRL_OFFSET _u(0x000000a0) #define DMA_CH2_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH2_AL2_CTRL_RESET "-" #define DMA_CH2_AL2_CTRL_MSB _u(31) #define DMA_CH2_AL2_CTRL_LSB _u(0) #define DMA_CH2_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL2_TRANS_COUNT // Description : Alias for channel 2 TRANS_COUNT register #define DMA_CH2_AL2_TRANS_COUNT_OFFSET _u(0x000000a4) #define DMA_CH2_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH2_AL2_TRANS_COUNT_RESET "-" #define DMA_CH2_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH2_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH2_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL2_READ_ADDR // Description : Alias for channel 2 READ_ADDR register #define DMA_CH2_AL2_READ_ADDR_OFFSET _u(0x000000a8) #define DMA_CH2_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH2_AL2_READ_ADDR_RESET "-" #define DMA_CH2_AL2_READ_ADDR_MSB _u(31) #define DMA_CH2_AL2_READ_ADDR_LSB _u(0) #define DMA_CH2_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 2 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH2_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x000000ac) #define DMA_CH2_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH2_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH2_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH2_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH2_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL3_CTRL // Description : Alias for channel 2 CTRL register #define DMA_CH2_AL3_CTRL_OFFSET _u(0x000000b0) #define DMA_CH2_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH2_AL3_CTRL_RESET "-" #define DMA_CH2_AL3_CTRL_MSB _u(31) #define DMA_CH2_AL3_CTRL_LSB _u(0) #define DMA_CH2_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL3_WRITE_ADDR // Description : Alias for channel 2 WRITE_ADDR register #define DMA_CH2_AL3_WRITE_ADDR_OFFSET _u(0x000000b4) #define DMA_CH2_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH2_AL3_WRITE_ADDR_RESET "-" #define DMA_CH2_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH2_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH2_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL3_TRANS_COUNT // Description : Alias for channel 2 TRANS_COUNT register #define DMA_CH2_AL3_TRANS_COUNT_OFFSET _u(0x000000b8) #define DMA_CH2_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH2_AL3_TRANS_COUNT_RESET "-" #define DMA_CH2_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH2_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH2_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH2_AL3_READ_ADDR_TRIG // Description : Alias for channel 2 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH2_AL3_READ_ADDR_TRIG_OFFSET _u(0x000000bc) #define DMA_CH2_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH2_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH2_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH2_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH2_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_READ_ADDR // Description : DMA Channel 3 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH3_READ_ADDR_OFFSET _u(0x000000c0) #define DMA_CH3_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH3_READ_ADDR_RESET _u(0x00000000) #define DMA_CH3_READ_ADDR_MSB _u(31) #define DMA_CH3_READ_ADDR_LSB _u(0) #define DMA_CH3_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_WRITE_ADDR // Description : DMA Channel 3 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH3_WRITE_ADDR_OFFSET _u(0x000000c4) #define DMA_CH3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH3_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH3_WRITE_ADDR_MSB _u(31) #define DMA_CH3_WRITE_ADDR_LSB _u(0) #define DMA_CH3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_TRANS_COUNT // Description : DMA Channel 3 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH3_TRANS_COUNT_OFFSET _u(0x000000c8) #define DMA_CH3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH3_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH3_TRANS_COUNT_MSB _u(31) #define DMA_CH3_TRANS_COUNT_LSB _u(0) #define DMA_CH3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_CTRL_TRIG // Description : DMA Channel 3 Control and Status #define DMA_CH3_CTRL_TRIG_OFFSET _u(0x000000cc) #define DMA_CH3_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH3_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH3_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH3_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH3_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH3_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH3_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH3_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH3_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH3_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH3_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH3_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH3_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH3_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH3_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH3_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH3_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH3_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH3_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH3_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH3_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH3_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH3_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH3_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH3_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH3_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH3_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH3_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH3_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH3_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH3_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH3_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH3_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH3_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH3_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH3_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH3_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH3_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH3_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH3_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH3_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH3_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH3_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH3_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH3_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH3_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH3_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH3_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH3_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH3_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH3_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH3_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH3_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH3_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH3_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH3_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH3_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH3_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH3_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH3_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH3_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH3_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH3_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH3_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH3_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH3_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH3_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH3_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH3_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH3_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH3_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH3_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH3_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH3_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH3_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH3_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH3_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH3_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL1_CTRL // Description : Alias for channel 3 CTRL register #define DMA_CH3_AL1_CTRL_OFFSET _u(0x000000d0) #define DMA_CH3_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH3_AL1_CTRL_RESET "-" #define DMA_CH3_AL1_CTRL_MSB _u(31) #define DMA_CH3_AL1_CTRL_LSB _u(0) #define DMA_CH3_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL1_READ_ADDR // Description : Alias for channel 3 READ_ADDR register #define DMA_CH3_AL1_READ_ADDR_OFFSET _u(0x000000d4) #define DMA_CH3_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH3_AL1_READ_ADDR_RESET "-" #define DMA_CH3_AL1_READ_ADDR_MSB _u(31) #define DMA_CH3_AL1_READ_ADDR_LSB _u(0) #define DMA_CH3_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL1_WRITE_ADDR // Description : Alias for channel 3 WRITE_ADDR register #define DMA_CH3_AL1_WRITE_ADDR_OFFSET _u(0x000000d8) #define DMA_CH3_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH3_AL1_WRITE_ADDR_RESET "-" #define DMA_CH3_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH3_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH3_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 3 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH3_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x000000dc) #define DMA_CH3_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH3_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH3_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH3_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH3_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL2_CTRL // Description : Alias for channel 3 CTRL register #define DMA_CH3_AL2_CTRL_OFFSET _u(0x000000e0) #define DMA_CH3_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH3_AL2_CTRL_RESET "-" #define DMA_CH3_AL2_CTRL_MSB _u(31) #define DMA_CH3_AL2_CTRL_LSB _u(0) #define DMA_CH3_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL2_TRANS_COUNT // Description : Alias for channel 3 TRANS_COUNT register #define DMA_CH3_AL2_TRANS_COUNT_OFFSET _u(0x000000e4) #define DMA_CH3_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH3_AL2_TRANS_COUNT_RESET "-" #define DMA_CH3_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH3_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH3_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL2_READ_ADDR // Description : Alias for channel 3 READ_ADDR register #define DMA_CH3_AL2_READ_ADDR_OFFSET _u(0x000000e8) #define DMA_CH3_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH3_AL2_READ_ADDR_RESET "-" #define DMA_CH3_AL2_READ_ADDR_MSB _u(31) #define DMA_CH3_AL2_READ_ADDR_LSB _u(0) #define DMA_CH3_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 3 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH3_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x000000ec) #define DMA_CH3_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH3_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH3_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH3_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH3_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL3_CTRL // Description : Alias for channel 3 CTRL register #define DMA_CH3_AL3_CTRL_OFFSET _u(0x000000f0) #define DMA_CH3_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH3_AL3_CTRL_RESET "-" #define DMA_CH3_AL3_CTRL_MSB _u(31) #define DMA_CH3_AL3_CTRL_LSB _u(0) #define DMA_CH3_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL3_WRITE_ADDR // Description : Alias for channel 3 WRITE_ADDR register #define DMA_CH3_AL3_WRITE_ADDR_OFFSET _u(0x000000f4) #define DMA_CH3_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH3_AL3_WRITE_ADDR_RESET "-" #define DMA_CH3_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH3_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH3_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL3_TRANS_COUNT // Description : Alias for channel 3 TRANS_COUNT register #define DMA_CH3_AL3_TRANS_COUNT_OFFSET _u(0x000000f8) #define DMA_CH3_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH3_AL3_TRANS_COUNT_RESET "-" #define DMA_CH3_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH3_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH3_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH3_AL3_READ_ADDR_TRIG // Description : Alias for channel 3 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH3_AL3_READ_ADDR_TRIG_OFFSET _u(0x000000fc) #define DMA_CH3_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH3_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH3_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH3_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH3_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_READ_ADDR // Description : DMA Channel 4 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH4_READ_ADDR_OFFSET _u(0x00000100) #define DMA_CH4_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH4_READ_ADDR_RESET _u(0x00000000) #define DMA_CH4_READ_ADDR_MSB _u(31) #define DMA_CH4_READ_ADDR_LSB _u(0) #define DMA_CH4_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_WRITE_ADDR // Description : DMA Channel 4 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH4_WRITE_ADDR_OFFSET _u(0x00000104) #define DMA_CH4_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH4_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH4_WRITE_ADDR_MSB _u(31) #define DMA_CH4_WRITE_ADDR_LSB _u(0) #define DMA_CH4_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_TRANS_COUNT // Description : DMA Channel 4 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH4_TRANS_COUNT_OFFSET _u(0x00000108) #define DMA_CH4_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH4_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH4_TRANS_COUNT_MSB _u(31) #define DMA_CH4_TRANS_COUNT_LSB _u(0) #define DMA_CH4_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_CTRL_TRIG // Description : DMA Channel 4 Control and Status #define DMA_CH4_CTRL_TRIG_OFFSET _u(0x0000010c) #define DMA_CH4_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH4_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH4_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH4_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH4_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH4_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH4_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH4_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH4_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH4_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH4_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH4_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH4_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH4_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH4_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH4_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH4_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH4_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH4_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH4_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH4_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH4_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH4_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH4_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH4_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH4_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH4_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH4_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH4_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH4_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH4_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH4_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH4_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH4_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH4_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH4_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH4_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH4_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH4_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH4_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH4_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH4_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH4_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH4_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH4_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH4_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH4_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH4_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH4_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH4_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH4_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH4_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH4_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH4_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH4_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH4_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH4_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH4_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH4_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH4_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH4_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH4_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH4_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH4_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH4_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH4_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH4_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH4_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH4_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH4_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH4_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH4_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH4_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH4_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH4_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH4_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH4_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH4_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL1_CTRL // Description : Alias for channel 4 CTRL register #define DMA_CH4_AL1_CTRL_OFFSET _u(0x00000110) #define DMA_CH4_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH4_AL1_CTRL_RESET "-" #define DMA_CH4_AL1_CTRL_MSB _u(31) #define DMA_CH4_AL1_CTRL_LSB _u(0) #define DMA_CH4_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL1_READ_ADDR // Description : Alias for channel 4 READ_ADDR register #define DMA_CH4_AL1_READ_ADDR_OFFSET _u(0x00000114) #define DMA_CH4_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH4_AL1_READ_ADDR_RESET "-" #define DMA_CH4_AL1_READ_ADDR_MSB _u(31) #define DMA_CH4_AL1_READ_ADDR_LSB _u(0) #define DMA_CH4_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL1_WRITE_ADDR // Description : Alias for channel 4 WRITE_ADDR register #define DMA_CH4_AL1_WRITE_ADDR_OFFSET _u(0x00000118) #define DMA_CH4_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH4_AL1_WRITE_ADDR_RESET "-" #define DMA_CH4_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH4_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH4_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 4 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH4_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x0000011c) #define DMA_CH4_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH4_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH4_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH4_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH4_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL2_CTRL // Description : Alias for channel 4 CTRL register #define DMA_CH4_AL2_CTRL_OFFSET _u(0x00000120) #define DMA_CH4_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH4_AL2_CTRL_RESET "-" #define DMA_CH4_AL2_CTRL_MSB _u(31) #define DMA_CH4_AL2_CTRL_LSB _u(0) #define DMA_CH4_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL2_TRANS_COUNT // Description : Alias for channel 4 TRANS_COUNT register #define DMA_CH4_AL2_TRANS_COUNT_OFFSET _u(0x00000124) #define DMA_CH4_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH4_AL2_TRANS_COUNT_RESET "-" #define DMA_CH4_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH4_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH4_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL2_READ_ADDR // Description : Alias for channel 4 READ_ADDR register #define DMA_CH4_AL2_READ_ADDR_OFFSET _u(0x00000128) #define DMA_CH4_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH4_AL2_READ_ADDR_RESET "-" #define DMA_CH4_AL2_READ_ADDR_MSB _u(31) #define DMA_CH4_AL2_READ_ADDR_LSB _u(0) #define DMA_CH4_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 4 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH4_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x0000012c) #define DMA_CH4_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH4_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH4_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH4_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH4_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL3_CTRL // Description : Alias for channel 4 CTRL register #define DMA_CH4_AL3_CTRL_OFFSET _u(0x00000130) #define DMA_CH4_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH4_AL3_CTRL_RESET "-" #define DMA_CH4_AL3_CTRL_MSB _u(31) #define DMA_CH4_AL3_CTRL_LSB _u(0) #define DMA_CH4_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL3_WRITE_ADDR // Description : Alias for channel 4 WRITE_ADDR register #define DMA_CH4_AL3_WRITE_ADDR_OFFSET _u(0x00000134) #define DMA_CH4_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH4_AL3_WRITE_ADDR_RESET "-" #define DMA_CH4_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH4_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH4_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL3_TRANS_COUNT // Description : Alias for channel 4 TRANS_COUNT register #define DMA_CH4_AL3_TRANS_COUNT_OFFSET _u(0x00000138) #define DMA_CH4_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH4_AL3_TRANS_COUNT_RESET "-" #define DMA_CH4_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH4_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH4_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH4_AL3_READ_ADDR_TRIG // Description : Alias for channel 4 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH4_AL3_READ_ADDR_TRIG_OFFSET _u(0x0000013c) #define DMA_CH4_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH4_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH4_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH4_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH4_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_READ_ADDR // Description : DMA Channel 5 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH5_READ_ADDR_OFFSET _u(0x00000140) #define DMA_CH5_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH5_READ_ADDR_RESET _u(0x00000000) #define DMA_CH5_READ_ADDR_MSB _u(31) #define DMA_CH5_READ_ADDR_LSB _u(0) #define DMA_CH5_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_WRITE_ADDR // Description : DMA Channel 5 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH5_WRITE_ADDR_OFFSET _u(0x00000144) #define DMA_CH5_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH5_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH5_WRITE_ADDR_MSB _u(31) #define DMA_CH5_WRITE_ADDR_LSB _u(0) #define DMA_CH5_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_TRANS_COUNT // Description : DMA Channel 5 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH5_TRANS_COUNT_OFFSET _u(0x00000148) #define DMA_CH5_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH5_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH5_TRANS_COUNT_MSB _u(31) #define DMA_CH5_TRANS_COUNT_LSB _u(0) #define DMA_CH5_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_CTRL_TRIG // Description : DMA Channel 5 Control and Status #define DMA_CH5_CTRL_TRIG_OFFSET _u(0x0000014c) #define DMA_CH5_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH5_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH5_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH5_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH5_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH5_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH5_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH5_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH5_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH5_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH5_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH5_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH5_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH5_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH5_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH5_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH5_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH5_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH5_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH5_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH5_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH5_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH5_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH5_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH5_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH5_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH5_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH5_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH5_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH5_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH5_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH5_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH5_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH5_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH5_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH5_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH5_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH5_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH5_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH5_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH5_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH5_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH5_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH5_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH5_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH5_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH5_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH5_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH5_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH5_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH5_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH5_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH5_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH5_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH5_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH5_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH5_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH5_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH5_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH5_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH5_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH5_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH5_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH5_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH5_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH5_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH5_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH5_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH5_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH5_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH5_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH5_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH5_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH5_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH5_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH5_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH5_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH5_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL1_CTRL // Description : Alias for channel 5 CTRL register #define DMA_CH5_AL1_CTRL_OFFSET _u(0x00000150) #define DMA_CH5_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH5_AL1_CTRL_RESET "-" #define DMA_CH5_AL1_CTRL_MSB _u(31) #define DMA_CH5_AL1_CTRL_LSB _u(0) #define DMA_CH5_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL1_READ_ADDR // Description : Alias for channel 5 READ_ADDR register #define DMA_CH5_AL1_READ_ADDR_OFFSET _u(0x00000154) #define DMA_CH5_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH5_AL1_READ_ADDR_RESET "-" #define DMA_CH5_AL1_READ_ADDR_MSB _u(31) #define DMA_CH5_AL1_READ_ADDR_LSB _u(0) #define DMA_CH5_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL1_WRITE_ADDR // Description : Alias for channel 5 WRITE_ADDR register #define DMA_CH5_AL1_WRITE_ADDR_OFFSET _u(0x00000158) #define DMA_CH5_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH5_AL1_WRITE_ADDR_RESET "-" #define DMA_CH5_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH5_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH5_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 5 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH5_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x0000015c) #define DMA_CH5_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH5_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH5_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH5_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH5_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL2_CTRL // Description : Alias for channel 5 CTRL register #define DMA_CH5_AL2_CTRL_OFFSET _u(0x00000160) #define DMA_CH5_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH5_AL2_CTRL_RESET "-" #define DMA_CH5_AL2_CTRL_MSB _u(31) #define DMA_CH5_AL2_CTRL_LSB _u(0) #define DMA_CH5_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL2_TRANS_COUNT // Description : Alias for channel 5 TRANS_COUNT register #define DMA_CH5_AL2_TRANS_COUNT_OFFSET _u(0x00000164) #define DMA_CH5_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH5_AL2_TRANS_COUNT_RESET "-" #define DMA_CH5_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH5_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH5_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL2_READ_ADDR // Description : Alias for channel 5 READ_ADDR register #define DMA_CH5_AL2_READ_ADDR_OFFSET _u(0x00000168) #define DMA_CH5_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH5_AL2_READ_ADDR_RESET "-" #define DMA_CH5_AL2_READ_ADDR_MSB _u(31) #define DMA_CH5_AL2_READ_ADDR_LSB _u(0) #define DMA_CH5_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 5 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH5_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x0000016c) #define DMA_CH5_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH5_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH5_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH5_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH5_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL3_CTRL // Description : Alias for channel 5 CTRL register #define DMA_CH5_AL3_CTRL_OFFSET _u(0x00000170) #define DMA_CH5_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH5_AL3_CTRL_RESET "-" #define DMA_CH5_AL3_CTRL_MSB _u(31) #define DMA_CH5_AL3_CTRL_LSB _u(0) #define DMA_CH5_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL3_WRITE_ADDR // Description : Alias for channel 5 WRITE_ADDR register #define DMA_CH5_AL3_WRITE_ADDR_OFFSET _u(0x00000174) #define DMA_CH5_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH5_AL3_WRITE_ADDR_RESET "-" #define DMA_CH5_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH5_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH5_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL3_TRANS_COUNT // Description : Alias for channel 5 TRANS_COUNT register #define DMA_CH5_AL3_TRANS_COUNT_OFFSET _u(0x00000178) #define DMA_CH5_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH5_AL3_TRANS_COUNT_RESET "-" #define DMA_CH5_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH5_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH5_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH5_AL3_READ_ADDR_TRIG // Description : Alias for channel 5 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH5_AL3_READ_ADDR_TRIG_OFFSET _u(0x0000017c) #define DMA_CH5_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH5_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH5_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH5_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH5_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_READ_ADDR // Description : DMA Channel 6 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH6_READ_ADDR_OFFSET _u(0x00000180) #define DMA_CH6_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH6_READ_ADDR_RESET _u(0x00000000) #define DMA_CH6_READ_ADDR_MSB _u(31) #define DMA_CH6_READ_ADDR_LSB _u(0) #define DMA_CH6_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_WRITE_ADDR // Description : DMA Channel 6 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH6_WRITE_ADDR_OFFSET _u(0x00000184) #define DMA_CH6_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH6_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH6_WRITE_ADDR_MSB _u(31) #define DMA_CH6_WRITE_ADDR_LSB _u(0) #define DMA_CH6_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_TRANS_COUNT // Description : DMA Channel 6 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH6_TRANS_COUNT_OFFSET _u(0x00000188) #define DMA_CH6_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH6_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH6_TRANS_COUNT_MSB _u(31) #define DMA_CH6_TRANS_COUNT_LSB _u(0) #define DMA_CH6_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_CTRL_TRIG // Description : DMA Channel 6 Control and Status #define DMA_CH6_CTRL_TRIG_OFFSET _u(0x0000018c) #define DMA_CH6_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH6_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH6_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH6_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH6_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH6_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH6_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH6_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH6_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH6_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH6_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH6_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH6_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH6_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH6_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH6_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH6_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH6_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH6_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH6_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH6_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH6_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH6_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH6_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH6_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH6_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH6_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH6_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH6_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH6_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH6_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH6_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH6_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH6_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH6_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH6_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH6_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH6_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH6_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH6_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH6_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH6_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH6_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH6_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH6_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH6_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH6_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH6_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH6_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH6_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH6_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH6_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH6_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH6_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH6_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH6_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH6_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH6_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH6_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH6_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH6_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH6_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH6_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH6_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH6_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH6_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH6_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH6_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH6_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH6_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH6_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH6_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH6_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH6_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH6_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH6_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH6_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH6_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL1_CTRL // Description : Alias for channel 6 CTRL register #define DMA_CH6_AL1_CTRL_OFFSET _u(0x00000190) #define DMA_CH6_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH6_AL1_CTRL_RESET "-" #define DMA_CH6_AL1_CTRL_MSB _u(31) #define DMA_CH6_AL1_CTRL_LSB _u(0) #define DMA_CH6_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL1_READ_ADDR // Description : Alias for channel 6 READ_ADDR register #define DMA_CH6_AL1_READ_ADDR_OFFSET _u(0x00000194) #define DMA_CH6_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH6_AL1_READ_ADDR_RESET "-" #define DMA_CH6_AL1_READ_ADDR_MSB _u(31) #define DMA_CH6_AL1_READ_ADDR_LSB _u(0) #define DMA_CH6_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL1_WRITE_ADDR // Description : Alias for channel 6 WRITE_ADDR register #define DMA_CH6_AL1_WRITE_ADDR_OFFSET _u(0x00000198) #define DMA_CH6_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH6_AL1_WRITE_ADDR_RESET "-" #define DMA_CH6_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH6_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH6_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 6 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH6_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x0000019c) #define DMA_CH6_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH6_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH6_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH6_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH6_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL2_CTRL // Description : Alias for channel 6 CTRL register #define DMA_CH6_AL2_CTRL_OFFSET _u(0x000001a0) #define DMA_CH6_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH6_AL2_CTRL_RESET "-" #define DMA_CH6_AL2_CTRL_MSB _u(31) #define DMA_CH6_AL2_CTRL_LSB _u(0) #define DMA_CH6_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL2_TRANS_COUNT // Description : Alias for channel 6 TRANS_COUNT register #define DMA_CH6_AL2_TRANS_COUNT_OFFSET _u(0x000001a4) #define DMA_CH6_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH6_AL2_TRANS_COUNT_RESET "-" #define DMA_CH6_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH6_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH6_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL2_READ_ADDR // Description : Alias for channel 6 READ_ADDR register #define DMA_CH6_AL2_READ_ADDR_OFFSET _u(0x000001a8) #define DMA_CH6_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH6_AL2_READ_ADDR_RESET "-" #define DMA_CH6_AL2_READ_ADDR_MSB _u(31) #define DMA_CH6_AL2_READ_ADDR_LSB _u(0) #define DMA_CH6_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 6 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH6_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x000001ac) #define DMA_CH6_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH6_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH6_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH6_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH6_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL3_CTRL // Description : Alias for channel 6 CTRL register #define DMA_CH6_AL3_CTRL_OFFSET _u(0x000001b0) #define DMA_CH6_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH6_AL3_CTRL_RESET "-" #define DMA_CH6_AL3_CTRL_MSB _u(31) #define DMA_CH6_AL3_CTRL_LSB _u(0) #define DMA_CH6_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL3_WRITE_ADDR // Description : Alias for channel 6 WRITE_ADDR register #define DMA_CH6_AL3_WRITE_ADDR_OFFSET _u(0x000001b4) #define DMA_CH6_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH6_AL3_WRITE_ADDR_RESET "-" #define DMA_CH6_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH6_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH6_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL3_TRANS_COUNT // Description : Alias for channel 6 TRANS_COUNT register #define DMA_CH6_AL3_TRANS_COUNT_OFFSET _u(0x000001b8) #define DMA_CH6_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH6_AL3_TRANS_COUNT_RESET "-" #define DMA_CH6_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH6_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH6_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH6_AL3_READ_ADDR_TRIG // Description : Alias for channel 6 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH6_AL3_READ_ADDR_TRIG_OFFSET _u(0x000001bc) #define DMA_CH6_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH6_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH6_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH6_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH6_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_READ_ADDR // Description : DMA Channel 7 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH7_READ_ADDR_OFFSET _u(0x000001c0) #define DMA_CH7_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH7_READ_ADDR_RESET _u(0x00000000) #define DMA_CH7_READ_ADDR_MSB _u(31) #define DMA_CH7_READ_ADDR_LSB _u(0) #define DMA_CH7_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_WRITE_ADDR // Description : DMA Channel 7 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH7_WRITE_ADDR_OFFSET _u(0x000001c4) #define DMA_CH7_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH7_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH7_WRITE_ADDR_MSB _u(31) #define DMA_CH7_WRITE_ADDR_LSB _u(0) #define DMA_CH7_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_TRANS_COUNT // Description : DMA Channel 7 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH7_TRANS_COUNT_OFFSET _u(0x000001c8) #define DMA_CH7_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH7_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH7_TRANS_COUNT_MSB _u(31) #define DMA_CH7_TRANS_COUNT_LSB _u(0) #define DMA_CH7_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_CTRL_TRIG // Description : DMA Channel 7 Control and Status #define DMA_CH7_CTRL_TRIG_OFFSET _u(0x000001cc) #define DMA_CH7_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH7_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH7_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH7_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH7_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH7_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH7_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH7_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH7_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH7_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH7_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH7_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH7_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH7_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH7_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH7_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH7_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH7_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH7_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH7_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH7_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH7_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH7_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH7_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH7_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH7_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH7_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH7_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH7_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH7_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH7_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH7_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH7_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH7_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH7_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH7_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH7_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH7_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH7_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH7_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH7_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH7_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH7_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH7_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH7_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH7_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH7_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH7_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH7_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH7_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH7_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH7_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH7_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH7_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH7_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH7_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH7_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH7_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH7_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH7_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH7_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH7_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH7_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH7_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH7_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH7_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH7_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH7_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH7_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH7_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH7_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH7_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH7_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH7_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH7_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH7_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH7_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH7_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL1_CTRL // Description : Alias for channel 7 CTRL register #define DMA_CH7_AL1_CTRL_OFFSET _u(0x000001d0) #define DMA_CH7_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH7_AL1_CTRL_RESET "-" #define DMA_CH7_AL1_CTRL_MSB _u(31) #define DMA_CH7_AL1_CTRL_LSB _u(0) #define DMA_CH7_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL1_READ_ADDR // Description : Alias for channel 7 READ_ADDR register #define DMA_CH7_AL1_READ_ADDR_OFFSET _u(0x000001d4) #define DMA_CH7_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH7_AL1_READ_ADDR_RESET "-" #define DMA_CH7_AL1_READ_ADDR_MSB _u(31) #define DMA_CH7_AL1_READ_ADDR_LSB _u(0) #define DMA_CH7_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL1_WRITE_ADDR // Description : Alias for channel 7 WRITE_ADDR register #define DMA_CH7_AL1_WRITE_ADDR_OFFSET _u(0x000001d8) #define DMA_CH7_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH7_AL1_WRITE_ADDR_RESET "-" #define DMA_CH7_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH7_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH7_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 7 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH7_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x000001dc) #define DMA_CH7_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH7_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH7_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH7_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH7_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL2_CTRL // Description : Alias for channel 7 CTRL register #define DMA_CH7_AL2_CTRL_OFFSET _u(0x000001e0) #define DMA_CH7_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH7_AL2_CTRL_RESET "-" #define DMA_CH7_AL2_CTRL_MSB _u(31) #define DMA_CH7_AL2_CTRL_LSB _u(0) #define DMA_CH7_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL2_TRANS_COUNT // Description : Alias for channel 7 TRANS_COUNT register #define DMA_CH7_AL2_TRANS_COUNT_OFFSET _u(0x000001e4) #define DMA_CH7_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH7_AL2_TRANS_COUNT_RESET "-" #define DMA_CH7_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH7_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH7_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL2_READ_ADDR // Description : Alias for channel 7 READ_ADDR register #define DMA_CH7_AL2_READ_ADDR_OFFSET _u(0x000001e8) #define DMA_CH7_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH7_AL2_READ_ADDR_RESET "-" #define DMA_CH7_AL2_READ_ADDR_MSB _u(31) #define DMA_CH7_AL2_READ_ADDR_LSB _u(0) #define DMA_CH7_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 7 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH7_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x000001ec) #define DMA_CH7_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH7_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH7_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH7_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH7_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL3_CTRL // Description : Alias for channel 7 CTRL register #define DMA_CH7_AL3_CTRL_OFFSET _u(0x000001f0) #define DMA_CH7_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH7_AL3_CTRL_RESET "-" #define DMA_CH7_AL3_CTRL_MSB _u(31) #define DMA_CH7_AL3_CTRL_LSB _u(0) #define DMA_CH7_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL3_WRITE_ADDR // Description : Alias for channel 7 WRITE_ADDR register #define DMA_CH7_AL3_WRITE_ADDR_OFFSET _u(0x000001f4) #define DMA_CH7_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH7_AL3_WRITE_ADDR_RESET "-" #define DMA_CH7_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH7_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH7_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL3_TRANS_COUNT // Description : Alias for channel 7 TRANS_COUNT register #define DMA_CH7_AL3_TRANS_COUNT_OFFSET _u(0x000001f8) #define DMA_CH7_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH7_AL3_TRANS_COUNT_RESET "-" #define DMA_CH7_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH7_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH7_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH7_AL3_READ_ADDR_TRIG // Description : Alias for channel 7 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH7_AL3_READ_ADDR_TRIG_OFFSET _u(0x000001fc) #define DMA_CH7_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH7_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH7_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH7_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH7_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_READ_ADDR // Description : DMA Channel 8 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH8_READ_ADDR_OFFSET _u(0x00000200) #define DMA_CH8_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH8_READ_ADDR_RESET _u(0x00000000) #define DMA_CH8_READ_ADDR_MSB _u(31) #define DMA_CH8_READ_ADDR_LSB _u(0) #define DMA_CH8_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_WRITE_ADDR // Description : DMA Channel 8 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH8_WRITE_ADDR_OFFSET _u(0x00000204) #define DMA_CH8_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH8_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH8_WRITE_ADDR_MSB _u(31) #define DMA_CH8_WRITE_ADDR_LSB _u(0) #define DMA_CH8_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_TRANS_COUNT // Description : DMA Channel 8 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH8_TRANS_COUNT_OFFSET _u(0x00000208) #define DMA_CH8_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH8_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH8_TRANS_COUNT_MSB _u(31) #define DMA_CH8_TRANS_COUNT_LSB _u(0) #define DMA_CH8_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_CTRL_TRIG // Description : DMA Channel 8 Control and Status #define DMA_CH8_CTRL_TRIG_OFFSET _u(0x0000020c) #define DMA_CH8_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH8_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH8_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH8_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH8_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH8_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH8_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH8_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH8_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH8_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH8_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH8_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH8_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH8_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH8_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH8_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH8_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH8_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH8_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH8_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH8_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH8_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH8_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH8_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH8_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH8_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH8_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH8_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH8_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH8_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH8_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH8_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH8_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH8_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH8_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH8_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH8_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH8_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH8_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH8_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH8_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH8_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH8_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH8_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH8_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH8_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH8_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH8_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH8_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH8_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH8_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH8_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH8_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH8_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH8_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH8_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH8_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH8_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH8_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH8_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH8_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH8_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH8_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH8_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH8_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH8_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH8_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH8_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH8_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH8_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH8_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH8_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH8_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH8_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH8_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH8_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH8_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH8_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL1_CTRL // Description : Alias for channel 8 CTRL register #define DMA_CH8_AL1_CTRL_OFFSET _u(0x00000210) #define DMA_CH8_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH8_AL1_CTRL_RESET "-" #define DMA_CH8_AL1_CTRL_MSB _u(31) #define DMA_CH8_AL1_CTRL_LSB _u(0) #define DMA_CH8_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL1_READ_ADDR // Description : Alias for channel 8 READ_ADDR register #define DMA_CH8_AL1_READ_ADDR_OFFSET _u(0x00000214) #define DMA_CH8_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH8_AL1_READ_ADDR_RESET "-" #define DMA_CH8_AL1_READ_ADDR_MSB _u(31) #define DMA_CH8_AL1_READ_ADDR_LSB _u(0) #define DMA_CH8_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL1_WRITE_ADDR // Description : Alias for channel 8 WRITE_ADDR register #define DMA_CH8_AL1_WRITE_ADDR_OFFSET _u(0x00000218) #define DMA_CH8_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH8_AL1_WRITE_ADDR_RESET "-" #define DMA_CH8_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH8_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH8_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 8 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH8_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x0000021c) #define DMA_CH8_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH8_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH8_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH8_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH8_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL2_CTRL // Description : Alias for channel 8 CTRL register #define DMA_CH8_AL2_CTRL_OFFSET _u(0x00000220) #define DMA_CH8_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH8_AL2_CTRL_RESET "-" #define DMA_CH8_AL2_CTRL_MSB _u(31) #define DMA_CH8_AL2_CTRL_LSB _u(0) #define DMA_CH8_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL2_TRANS_COUNT // Description : Alias for channel 8 TRANS_COUNT register #define DMA_CH8_AL2_TRANS_COUNT_OFFSET _u(0x00000224) #define DMA_CH8_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH8_AL2_TRANS_COUNT_RESET "-" #define DMA_CH8_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH8_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH8_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL2_READ_ADDR // Description : Alias for channel 8 READ_ADDR register #define DMA_CH8_AL2_READ_ADDR_OFFSET _u(0x00000228) #define DMA_CH8_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH8_AL2_READ_ADDR_RESET "-" #define DMA_CH8_AL2_READ_ADDR_MSB _u(31) #define DMA_CH8_AL2_READ_ADDR_LSB _u(0) #define DMA_CH8_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 8 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH8_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x0000022c) #define DMA_CH8_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH8_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH8_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH8_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH8_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL3_CTRL // Description : Alias for channel 8 CTRL register #define DMA_CH8_AL3_CTRL_OFFSET _u(0x00000230) #define DMA_CH8_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH8_AL3_CTRL_RESET "-" #define DMA_CH8_AL3_CTRL_MSB _u(31) #define DMA_CH8_AL3_CTRL_LSB _u(0) #define DMA_CH8_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL3_WRITE_ADDR // Description : Alias for channel 8 WRITE_ADDR register #define DMA_CH8_AL3_WRITE_ADDR_OFFSET _u(0x00000234) #define DMA_CH8_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH8_AL3_WRITE_ADDR_RESET "-" #define DMA_CH8_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH8_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH8_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL3_TRANS_COUNT // Description : Alias for channel 8 TRANS_COUNT register #define DMA_CH8_AL3_TRANS_COUNT_OFFSET _u(0x00000238) #define DMA_CH8_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH8_AL3_TRANS_COUNT_RESET "-" #define DMA_CH8_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH8_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH8_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH8_AL3_READ_ADDR_TRIG // Description : Alias for channel 8 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH8_AL3_READ_ADDR_TRIG_OFFSET _u(0x0000023c) #define DMA_CH8_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH8_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH8_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH8_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH8_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_READ_ADDR // Description : DMA Channel 9 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH9_READ_ADDR_OFFSET _u(0x00000240) #define DMA_CH9_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH9_READ_ADDR_RESET _u(0x00000000) #define DMA_CH9_READ_ADDR_MSB _u(31) #define DMA_CH9_READ_ADDR_LSB _u(0) #define DMA_CH9_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_WRITE_ADDR // Description : DMA Channel 9 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH9_WRITE_ADDR_OFFSET _u(0x00000244) #define DMA_CH9_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH9_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH9_WRITE_ADDR_MSB _u(31) #define DMA_CH9_WRITE_ADDR_LSB _u(0) #define DMA_CH9_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_TRANS_COUNT // Description : DMA Channel 9 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH9_TRANS_COUNT_OFFSET _u(0x00000248) #define DMA_CH9_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH9_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH9_TRANS_COUNT_MSB _u(31) #define DMA_CH9_TRANS_COUNT_LSB _u(0) #define DMA_CH9_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_CTRL_TRIG // Description : DMA Channel 9 Control and Status #define DMA_CH9_CTRL_TRIG_OFFSET _u(0x0000024c) #define DMA_CH9_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH9_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH9_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH9_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH9_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH9_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH9_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH9_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH9_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH9_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH9_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH9_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH9_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH9_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH9_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH9_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH9_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH9_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH9_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH9_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH9_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH9_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH9_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH9_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH9_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH9_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH9_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH9_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH9_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH9_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH9_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH9_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH9_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH9_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH9_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH9_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH9_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH9_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH9_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH9_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH9_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH9_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH9_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH9_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH9_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH9_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH9_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH9_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH9_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH9_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH9_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH9_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH9_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH9_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH9_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH9_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH9_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH9_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH9_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH9_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH9_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH9_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH9_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH9_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH9_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH9_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH9_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH9_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH9_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH9_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH9_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH9_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH9_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH9_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH9_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH9_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH9_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH9_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL1_CTRL // Description : Alias for channel 9 CTRL register #define DMA_CH9_AL1_CTRL_OFFSET _u(0x00000250) #define DMA_CH9_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH9_AL1_CTRL_RESET "-" #define DMA_CH9_AL1_CTRL_MSB _u(31) #define DMA_CH9_AL1_CTRL_LSB _u(0) #define DMA_CH9_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL1_READ_ADDR // Description : Alias for channel 9 READ_ADDR register #define DMA_CH9_AL1_READ_ADDR_OFFSET _u(0x00000254) #define DMA_CH9_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH9_AL1_READ_ADDR_RESET "-" #define DMA_CH9_AL1_READ_ADDR_MSB _u(31) #define DMA_CH9_AL1_READ_ADDR_LSB _u(0) #define DMA_CH9_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL1_WRITE_ADDR // Description : Alias for channel 9 WRITE_ADDR register #define DMA_CH9_AL1_WRITE_ADDR_OFFSET _u(0x00000258) #define DMA_CH9_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH9_AL1_WRITE_ADDR_RESET "-" #define DMA_CH9_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH9_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH9_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 9 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH9_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x0000025c) #define DMA_CH9_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH9_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH9_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH9_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH9_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL2_CTRL // Description : Alias for channel 9 CTRL register #define DMA_CH9_AL2_CTRL_OFFSET _u(0x00000260) #define DMA_CH9_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH9_AL2_CTRL_RESET "-" #define DMA_CH9_AL2_CTRL_MSB _u(31) #define DMA_CH9_AL2_CTRL_LSB _u(0) #define DMA_CH9_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL2_TRANS_COUNT // Description : Alias for channel 9 TRANS_COUNT register #define DMA_CH9_AL2_TRANS_COUNT_OFFSET _u(0x00000264) #define DMA_CH9_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH9_AL2_TRANS_COUNT_RESET "-" #define DMA_CH9_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH9_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH9_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL2_READ_ADDR // Description : Alias for channel 9 READ_ADDR register #define DMA_CH9_AL2_READ_ADDR_OFFSET _u(0x00000268) #define DMA_CH9_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH9_AL2_READ_ADDR_RESET "-" #define DMA_CH9_AL2_READ_ADDR_MSB _u(31) #define DMA_CH9_AL2_READ_ADDR_LSB _u(0) #define DMA_CH9_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 9 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH9_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x0000026c) #define DMA_CH9_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH9_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH9_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH9_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH9_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL3_CTRL // Description : Alias for channel 9 CTRL register #define DMA_CH9_AL3_CTRL_OFFSET _u(0x00000270) #define DMA_CH9_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH9_AL3_CTRL_RESET "-" #define DMA_CH9_AL3_CTRL_MSB _u(31) #define DMA_CH9_AL3_CTRL_LSB _u(0) #define DMA_CH9_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL3_WRITE_ADDR // Description : Alias for channel 9 WRITE_ADDR register #define DMA_CH9_AL3_WRITE_ADDR_OFFSET _u(0x00000274) #define DMA_CH9_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH9_AL3_WRITE_ADDR_RESET "-" #define DMA_CH9_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH9_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH9_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL3_TRANS_COUNT // Description : Alias for channel 9 TRANS_COUNT register #define DMA_CH9_AL3_TRANS_COUNT_OFFSET _u(0x00000278) #define DMA_CH9_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH9_AL3_TRANS_COUNT_RESET "-" #define DMA_CH9_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH9_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH9_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH9_AL3_READ_ADDR_TRIG // Description : Alias for channel 9 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH9_AL3_READ_ADDR_TRIG_OFFSET _u(0x0000027c) #define DMA_CH9_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH9_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH9_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH9_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH9_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_READ_ADDR // Description : DMA Channel 10 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH10_READ_ADDR_OFFSET _u(0x00000280) #define DMA_CH10_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH10_READ_ADDR_RESET _u(0x00000000) #define DMA_CH10_READ_ADDR_MSB _u(31) #define DMA_CH10_READ_ADDR_LSB _u(0) #define DMA_CH10_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_WRITE_ADDR // Description : DMA Channel 10 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH10_WRITE_ADDR_OFFSET _u(0x00000284) #define DMA_CH10_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH10_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH10_WRITE_ADDR_MSB _u(31) #define DMA_CH10_WRITE_ADDR_LSB _u(0) #define DMA_CH10_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_TRANS_COUNT // Description : DMA Channel 10 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH10_TRANS_COUNT_OFFSET _u(0x00000288) #define DMA_CH10_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH10_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH10_TRANS_COUNT_MSB _u(31) #define DMA_CH10_TRANS_COUNT_LSB _u(0) #define DMA_CH10_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_CTRL_TRIG // Description : DMA Channel 10 Control and Status #define DMA_CH10_CTRL_TRIG_OFFSET _u(0x0000028c) #define DMA_CH10_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH10_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH10_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH10_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH10_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH10_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH10_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH10_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH10_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH10_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH10_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH10_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH10_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH10_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH10_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH10_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH10_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH10_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH10_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH10_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH10_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH10_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH10_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH10_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH10_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH10_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH10_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH10_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH10_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH10_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH10_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH10_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH10_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH10_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH10_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH10_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH10_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH10_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH10_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH10_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH10_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH10_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH10_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH10_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH10_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH10_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH10_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH10_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH10_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH10_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH10_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH10_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH10_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH10_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH10_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH10_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH10_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH10_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH10_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH10_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH10_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH10_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH10_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH10_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH10_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH10_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH10_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH10_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH10_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH10_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH10_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH10_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH10_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH10_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH10_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH10_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH10_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH10_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL1_CTRL // Description : Alias for channel 10 CTRL register #define DMA_CH10_AL1_CTRL_OFFSET _u(0x00000290) #define DMA_CH10_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH10_AL1_CTRL_RESET "-" #define DMA_CH10_AL1_CTRL_MSB _u(31) #define DMA_CH10_AL1_CTRL_LSB _u(0) #define DMA_CH10_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL1_READ_ADDR // Description : Alias for channel 10 READ_ADDR register #define DMA_CH10_AL1_READ_ADDR_OFFSET _u(0x00000294) #define DMA_CH10_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH10_AL1_READ_ADDR_RESET "-" #define DMA_CH10_AL1_READ_ADDR_MSB _u(31) #define DMA_CH10_AL1_READ_ADDR_LSB _u(0) #define DMA_CH10_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL1_WRITE_ADDR // Description : Alias for channel 10 WRITE_ADDR register #define DMA_CH10_AL1_WRITE_ADDR_OFFSET _u(0x00000298) #define DMA_CH10_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH10_AL1_WRITE_ADDR_RESET "-" #define DMA_CH10_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH10_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH10_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 10 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH10_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x0000029c) #define DMA_CH10_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH10_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH10_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH10_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH10_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL2_CTRL // Description : Alias for channel 10 CTRL register #define DMA_CH10_AL2_CTRL_OFFSET _u(0x000002a0) #define DMA_CH10_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH10_AL2_CTRL_RESET "-" #define DMA_CH10_AL2_CTRL_MSB _u(31) #define DMA_CH10_AL2_CTRL_LSB _u(0) #define DMA_CH10_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL2_TRANS_COUNT // Description : Alias for channel 10 TRANS_COUNT register #define DMA_CH10_AL2_TRANS_COUNT_OFFSET _u(0x000002a4) #define DMA_CH10_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH10_AL2_TRANS_COUNT_RESET "-" #define DMA_CH10_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH10_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH10_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL2_READ_ADDR // Description : Alias for channel 10 READ_ADDR register #define DMA_CH10_AL2_READ_ADDR_OFFSET _u(0x000002a8) #define DMA_CH10_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH10_AL2_READ_ADDR_RESET "-" #define DMA_CH10_AL2_READ_ADDR_MSB _u(31) #define DMA_CH10_AL2_READ_ADDR_LSB _u(0) #define DMA_CH10_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 10 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH10_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x000002ac) #define DMA_CH10_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH10_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH10_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH10_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH10_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL3_CTRL // Description : Alias for channel 10 CTRL register #define DMA_CH10_AL3_CTRL_OFFSET _u(0x000002b0) #define DMA_CH10_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH10_AL3_CTRL_RESET "-" #define DMA_CH10_AL3_CTRL_MSB _u(31) #define DMA_CH10_AL3_CTRL_LSB _u(0) #define DMA_CH10_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL3_WRITE_ADDR // Description : Alias for channel 10 WRITE_ADDR register #define DMA_CH10_AL3_WRITE_ADDR_OFFSET _u(0x000002b4) #define DMA_CH10_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH10_AL3_WRITE_ADDR_RESET "-" #define DMA_CH10_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH10_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH10_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL3_TRANS_COUNT // Description : Alias for channel 10 TRANS_COUNT register #define DMA_CH10_AL3_TRANS_COUNT_OFFSET _u(0x000002b8) #define DMA_CH10_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH10_AL3_TRANS_COUNT_RESET "-" #define DMA_CH10_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH10_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH10_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH10_AL3_READ_ADDR_TRIG // Description : Alias for channel 10 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH10_AL3_READ_ADDR_TRIG_OFFSET _u(0x000002bc) #define DMA_CH10_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH10_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH10_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH10_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH10_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_READ_ADDR // Description : DMA Channel 11 Read Address pointer // This register updates automatically each time a read completes. // The current value is the next address to be read by this // channel. #define DMA_CH11_READ_ADDR_OFFSET _u(0x000002c0) #define DMA_CH11_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH11_READ_ADDR_RESET _u(0x00000000) #define DMA_CH11_READ_ADDR_MSB _u(31) #define DMA_CH11_READ_ADDR_LSB _u(0) #define DMA_CH11_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_WRITE_ADDR // Description : DMA Channel 11 Write Address pointer // This register updates automatically each time a write // completes. The current value is the next address to be written // by this channel. #define DMA_CH11_WRITE_ADDR_OFFSET _u(0x000002c4) #define DMA_CH11_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH11_WRITE_ADDR_RESET _u(0x00000000) #define DMA_CH11_WRITE_ADDR_MSB _u(31) #define DMA_CH11_WRITE_ADDR_LSB _u(0) #define DMA_CH11_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_TRANS_COUNT // Description : DMA Channel 11 Transfer Count // Program the number of bus transfers a channel will perform // before halting. Note that, if transfers are larger than one // byte in size, this is not equal to the number of bytes // transferred (see CTRL_DATA_SIZE). // // When the channel is active, reading this register shows the // number of transfers remaining, updating automatically each time // a write transfer completes. // // Writing this register sets the RELOAD value for the transfer // counter. Each time this channel is triggered, the RELOAD value // is copied into the live transfer counter. The channel can be // started multiple times, and will perform the same number of // transfers each time, as programmed by most recent write. // // The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT // is used as a trigger, the written value is used immediately as // the length of the new transfer sequence, as well as being // written to RELOAD. #define DMA_CH11_TRANS_COUNT_OFFSET _u(0x000002c8) #define DMA_CH11_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH11_TRANS_COUNT_RESET _u(0x00000000) #define DMA_CH11_TRANS_COUNT_MSB _u(31) #define DMA_CH11_TRANS_COUNT_LSB _u(0) #define DMA_CH11_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_CTRL_TRIG // Description : DMA Channel 11 Control and Status #define DMA_CH11_CTRL_TRIG_OFFSET _u(0x000002cc) #define DMA_CH11_CTRL_TRIG_BITS _u(0xe1ffffff) #define DMA_CH11_CTRL_TRIG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_AHB_ERROR // Description : Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel // halts when it encounters any bus error, and always raises its // channel IRQ flag. #define DMA_CH11_CTRL_TRIG_AHB_ERROR_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_AHB_ERROR_BITS _u(0x80000000) #define DMA_CH11_CTRL_TRIG_AHB_ERROR_MSB _u(31) #define DMA_CH11_CTRL_TRIG_AHB_ERROR_LSB _u(31) #define DMA_CH11_CTRL_TRIG_AHB_ERROR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_READ_ERROR // Description : If 1, the channel received a read bus error. Write one to // clear. // READ_ADDR shows the approximate address where the bus error was // encountered (will not be earlier, or more than 3 transfers // later) #define DMA_CH11_CTRL_TRIG_READ_ERROR_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_READ_ERROR_BITS _u(0x40000000) #define DMA_CH11_CTRL_TRIG_READ_ERROR_MSB _u(30) #define DMA_CH11_CTRL_TRIG_READ_ERROR_LSB _u(30) #define DMA_CH11_CTRL_TRIG_READ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_WRITE_ERROR // Description : If 1, the channel received a write bus error. Write one to // clear. // WRITE_ADDR shows the approximate address where the bus error // was encountered (will not be earlier, or more than 5 transfers // later) #define DMA_CH11_CTRL_TRIG_WRITE_ERROR_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_WRITE_ERROR_BITS _u(0x20000000) #define DMA_CH11_CTRL_TRIG_WRITE_ERROR_MSB _u(29) #define DMA_CH11_CTRL_TRIG_WRITE_ERROR_LSB _u(29) #define DMA_CH11_CTRL_TRIG_WRITE_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_BUSY // Description : This flag goes high when the channel starts a new transfer // sequence, and low when the last transfer of that sequence // completes. Clearing EN while BUSY is high pauses the channel, // and BUSY will stay high while paused. // // To terminate a sequence early (and clear the BUSY flag), see // CHAN_ABORT. #define DMA_CH11_CTRL_TRIG_BUSY_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_BUSY_BITS _u(0x01000000) #define DMA_CH11_CTRL_TRIG_BUSY_MSB _u(24) #define DMA_CH11_CTRL_TRIG_BUSY_LSB _u(24) #define DMA_CH11_CTRL_TRIG_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_SNIFF_EN // Description : If 1, this channel's data transfers are visible to the sniff // hardware, and each transfer will advance the state of the // checksum. This only applies if the sniff hardware is enabled, // and has this channel selected. // // This allows checksum to be enabled or disabled on a // per-control- block basis. #define DMA_CH11_CTRL_TRIG_SNIFF_EN_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_SNIFF_EN_BITS _u(0x00800000) #define DMA_CH11_CTRL_TRIG_SNIFF_EN_MSB _u(23) #define DMA_CH11_CTRL_TRIG_SNIFF_EN_LSB _u(23) #define DMA_CH11_CTRL_TRIG_SNIFF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_BSWAP // Description : Apply byte-swap transformation to DMA data. // For byte data, this has no effect. For halfword data, the two // bytes of each halfword are swapped. For word data, the four // bytes of each word are swapped to reverse order. #define DMA_CH11_CTRL_TRIG_BSWAP_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_BSWAP_BITS _u(0x00400000) #define DMA_CH11_CTRL_TRIG_BSWAP_MSB _u(22) #define DMA_CH11_CTRL_TRIG_BSWAP_LSB _u(22) #define DMA_CH11_CTRL_TRIG_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_IRQ_QUIET // Description : In QUIET mode, the channel does not generate IRQs at the end of // every transfer block. Instead, an IRQ is raised when NULL is // written to a trigger register, indicating the end of a control // block chain. // // This reduces the number of interrupts to be serviced by the CPU // when transferring a DMA chain of many small control blocks. #define DMA_CH11_CTRL_TRIG_IRQ_QUIET_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_IRQ_QUIET_BITS _u(0x00200000) #define DMA_CH11_CTRL_TRIG_IRQ_QUIET_MSB _u(21) #define DMA_CH11_CTRL_TRIG_IRQ_QUIET_LSB _u(21) #define DMA_CH11_CTRL_TRIG_IRQ_QUIET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_TREQ_SEL // Description : Select a Transfer Request signal. // The channel uses the transfer request signal to pace its data // transfer rate. Sources for TREQ signals are internal (TIMERS) // or external (DREQ, a Data Request from the system). // 0x0 to 0x3a -> select DREQ n as TREQ // 0x3b -> Select Timer 0 as TREQ // 0x3c -> Select Timer 1 as TREQ // 0x3d -> Select Timer 2 as TREQ (Optional) // 0x3e -> Select Timer 3 as TREQ (Optional) // 0x3f -> Permanent request, for unpaced transfers. #define DMA_CH11_CTRL_TRIG_TREQ_SEL_RESET _u(0x00) #define DMA_CH11_CTRL_TRIG_TREQ_SEL_BITS _u(0x001f8000) #define DMA_CH11_CTRL_TRIG_TREQ_SEL_MSB _u(20) #define DMA_CH11_CTRL_TRIG_TREQ_SEL_LSB _u(15) #define DMA_CH11_CTRL_TRIG_TREQ_SEL_ACCESS "RW" #define DMA_CH11_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 _u(0x3b) #define DMA_CH11_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 _u(0x3c) #define DMA_CH11_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 _u(0x3d) #define DMA_CH11_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 _u(0x3e) #define DMA_CH11_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT _u(0x3f) // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_CHAIN_TO // Description : When this channel completes, it will trigger the channel // indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this // channel)_. #define DMA_CH11_CTRL_TRIG_CHAIN_TO_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_CHAIN_TO_BITS _u(0x00007800) #define DMA_CH11_CTRL_TRIG_CHAIN_TO_MSB _u(14) #define DMA_CH11_CTRL_TRIG_CHAIN_TO_LSB _u(11) #define DMA_CH11_CTRL_TRIG_CHAIN_TO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_RING_SEL // Description : Select whether RING_SIZE applies to read or write addresses. // If 0, read addresses are wrapped on a (1 << RING_SIZE) // boundary. If 1, write addresses are wrapped. #define DMA_CH11_CTRL_TRIG_RING_SEL_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_RING_SEL_BITS _u(0x00000400) #define DMA_CH11_CTRL_TRIG_RING_SEL_MSB _u(10) #define DMA_CH11_CTRL_TRIG_RING_SEL_LSB _u(10) #define DMA_CH11_CTRL_TRIG_RING_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_RING_SIZE // Description : Size of address wrap region. If 0, don't wrap. For values n > // 0, only the lower n bits of the address will change. This wraps // the address on a (1 << n) byte boundary, facilitating access to // naturally-aligned ring buffers. // // Ring sizes between 2 and 32768 bytes are possible. This can // apply to either read or write addresses, based on value of // RING_SEL. // 0x0 -> RING_NONE #define DMA_CH11_CTRL_TRIG_RING_SIZE_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_RING_SIZE_BITS _u(0x000003c0) #define DMA_CH11_CTRL_TRIG_RING_SIZE_MSB _u(9) #define DMA_CH11_CTRL_TRIG_RING_SIZE_LSB _u(6) #define DMA_CH11_CTRL_TRIG_RING_SIZE_ACCESS "RW" #define DMA_CH11_CTRL_TRIG_RING_SIZE_VALUE_RING_NONE _u(0x0) // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_INCR_WRITE // Description : If 1, the write address increments with each transfer. If 0, // each write is directed to the same, initial address. // // Generally this should be disabled for memory-to-peripheral // transfers. #define DMA_CH11_CTRL_TRIG_INCR_WRITE_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_INCR_WRITE_BITS _u(0x00000020) #define DMA_CH11_CTRL_TRIG_INCR_WRITE_MSB _u(5) #define DMA_CH11_CTRL_TRIG_INCR_WRITE_LSB _u(5) #define DMA_CH11_CTRL_TRIG_INCR_WRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_INCR_READ // Description : If 1, the read address increments with each transfer. If 0, // each read is directed to the same, initial address. // // Generally this should be disabled for peripheral-to-memory // transfers. #define DMA_CH11_CTRL_TRIG_INCR_READ_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_INCR_READ_BITS _u(0x00000010) #define DMA_CH11_CTRL_TRIG_INCR_READ_MSB _u(4) #define DMA_CH11_CTRL_TRIG_INCR_READ_LSB _u(4) #define DMA_CH11_CTRL_TRIG_INCR_READ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_DATA_SIZE // Description : Set the size of each bus transfer (byte/halfword/word). // READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) // with each transfer. // 0x0 -> SIZE_BYTE // 0x1 -> SIZE_HALFWORD // 0x2 -> SIZE_WORD #define DMA_CH11_CTRL_TRIG_DATA_SIZE_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_DATA_SIZE_BITS _u(0x0000000c) #define DMA_CH11_CTRL_TRIG_DATA_SIZE_MSB _u(3) #define DMA_CH11_CTRL_TRIG_DATA_SIZE_LSB _u(2) #define DMA_CH11_CTRL_TRIG_DATA_SIZE_ACCESS "RW" #define DMA_CH11_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_BYTE _u(0x0) #define DMA_CH11_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_HALFWORD _u(0x1) #define DMA_CH11_CTRL_TRIG_DATA_SIZE_VALUE_SIZE_WORD _u(0x2) // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_HIGH_PRIORITY // Description : HIGH_PRIORITY gives a channel preferential treatment in issue // scheduling: in each scheduling round, all high priority // channels are considered first, and then only a single low // priority channel, before returning to the high priority // channels. // // This only affects the order in which the DMA schedules // channels. The DMA's bus priority is not changed. If the DMA is // not saturated then a low priority channel will see no loss of // throughput. #define DMA_CH11_CTRL_TRIG_HIGH_PRIORITY_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_HIGH_PRIORITY_BITS _u(0x00000002) #define DMA_CH11_CTRL_TRIG_HIGH_PRIORITY_MSB _u(1) #define DMA_CH11_CTRL_TRIG_HIGH_PRIORITY_LSB _u(1) #define DMA_CH11_CTRL_TRIG_HIGH_PRIORITY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_CH11_CTRL_TRIG_EN // Description : DMA Channel Enable. // When 1, the channel will respond to triggering events, which // will cause it to become BUSY and start transferring data. When // 0, the channel will ignore triggers, stop issuing transfers, // and pause the current transfer sequence (i.e. BUSY will remain // high if already high) #define DMA_CH11_CTRL_TRIG_EN_RESET _u(0x0) #define DMA_CH11_CTRL_TRIG_EN_BITS _u(0x00000001) #define DMA_CH11_CTRL_TRIG_EN_MSB _u(0) #define DMA_CH11_CTRL_TRIG_EN_LSB _u(0) #define DMA_CH11_CTRL_TRIG_EN_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL1_CTRL // Description : Alias for channel 11 CTRL register #define DMA_CH11_AL1_CTRL_OFFSET _u(0x000002d0) #define DMA_CH11_AL1_CTRL_BITS _u(0xffffffff) #define DMA_CH11_AL1_CTRL_RESET "-" #define DMA_CH11_AL1_CTRL_MSB _u(31) #define DMA_CH11_AL1_CTRL_LSB _u(0) #define DMA_CH11_AL1_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL1_READ_ADDR // Description : Alias for channel 11 READ_ADDR register #define DMA_CH11_AL1_READ_ADDR_OFFSET _u(0x000002d4) #define DMA_CH11_AL1_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH11_AL1_READ_ADDR_RESET "-" #define DMA_CH11_AL1_READ_ADDR_MSB _u(31) #define DMA_CH11_AL1_READ_ADDR_LSB _u(0) #define DMA_CH11_AL1_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL1_WRITE_ADDR // Description : Alias for channel 11 WRITE_ADDR register #define DMA_CH11_AL1_WRITE_ADDR_OFFSET _u(0x000002d8) #define DMA_CH11_AL1_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH11_AL1_WRITE_ADDR_RESET "-" #define DMA_CH11_AL1_WRITE_ADDR_MSB _u(31) #define DMA_CH11_AL1_WRITE_ADDR_LSB _u(0) #define DMA_CH11_AL1_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL1_TRANS_COUNT_TRIG // Description : Alias for channel 11 TRANS_COUNT register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH11_AL1_TRANS_COUNT_TRIG_OFFSET _u(0x000002dc) #define DMA_CH11_AL1_TRANS_COUNT_TRIG_BITS _u(0xffffffff) #define DMA_CH11_AL1_TRANS_COUNT_TRIG_RESET "-" #define DMA_CH11_AL1_TRANS_COUNT_TRIG_MSB _u(31) #define DMA_CH11_AL1_TRANS_COUNT_TRIG_LSB _u(0) #define DMA_CH11_AL1_TRANS_COUNT_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL2_CTRL // Description : Alias for channel 11 CTRL register #define DMA_CH11_AL2_CTRL_OFFSET _u(0x000002e0) #define DMA_CH11_AL2_CTRL_BITS _u(0xffffffff) #define DMA_CH11_AL2_CTRL_RESET "-" #define DMA_CH11_AL2_CTRL_MSB _u(31) #define DMA_CH11_AL2_CTRL_LSB _u(0) #define DMA_CH11_AL2_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL2_TRANS_COUNT // Description : Alias for channel 11 TRANS_COUNT register #define DMA_CH11_AL2_TRANS_COUNT_OFFSET _u(0x000002e4) #define DMA_CH11_AL2_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH11_AL2_TRANS_COUNT_RESET "-" #define DMA_CH11_AL2_TRANS_COUNT_MSB _u(31) #define DMA_CH11_AL2_TRANS_COUNT_LSB _u(0) #define DMA_CH11_AL2_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL2_READ_ADDR // Description : Alias for channel 11 READ_ADDR register #define DMA_CH11_AL2_READ_ADDR_OFFSET _u(0x000002e8) #define DMA_CH11_AL2_READ_ADDR_BITS _u(0xffffffff) #define DMA_CH11_AL2_READ_ADDR_RESET "-" #define DMA_CH11_AL2_READ_ADDR_MSB _u(31) #define DMA_CH11_AL2_READ_ADDR_LSB _u(0) #define DMA_CH11_AL2_READ_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL2_WRITE_ADDR_TRIG // Description : Alias for channel 11 WRITE_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH11_AL2_WRITE_ADDR_TRIG_OFFSET _u(0x000002ec) #define DMA_CH11_AL2_WRITE_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH11_AL2_WRITE_ADDR_TRIG_RESET "-" #define DMA_CH11_AL2_WRITE_ADDR_TRIG_MSB _u(31) #define DMA_CH11_AL2_WRITE_ADDR_TRIG_LSB _u(0) #define DMA_CH11_AL2_WRITE_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL3_CTRL // Description : Alias for channel 11 CTRL register #define DMA_CH11_AL3_CTRL_OFFSET _u(0x000002f0) #define DMA_CH11_AL3_CTRL_BITS _u(0xffffffff) #define DMA_CH11_AL3_CTRL_RESET "-" #define DMA_CH11_AL3_CTRL_MSB _u(31) #define DMA_CH11_AL3_CTRL_LSB _u(0) #define DMA_CH11_AL3_CTRL_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL3_WRITE_ADDR // Description : Alias for channel 11 WRITE_ADDR register #define DMA_CH11_AL3_WRITE_ADDR_OFFSET _u(0x000002f4) #define DMA_CH11_AL3_WRITE_ADDR_BITS _u(0xffffffff) #define DMA_CH11_AL3_WRITE_ADDR_RESET "-" #define DMA_CH11_AL3_WRITE_ADDR_MSB _u(31) #define DMA_CH11_AL3_WRITE_ADDR_LSB _u(0) #define DMA_CH11_AL3_WRITE_ADDR_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL3_TRANS_COUNT // Description : Alias for channel 11 TRANS_COUNT register #define DMA_CH11_AL3_TRANS_COUNT_OFFSET _u(0x000002f8) #define DMA_CH11_AL3_TRANS_COUNT_BITS _u(0xffffffff) #define DMA_CH11_AL3_TRANS_COUNT_RESET "-" #define DMA_CH11_AL3_TRANS_COUNT_MSB _u(31) #define DMA_CH11_AL3_TRANS_COUNT_LSB _u(0) #define DMA_CH11_AL3_TRANS_COUNT_ACCESS "RW" // ============================================================================= // Register : DMA_CH11_AL3_READ_ADDR_TRIG // Description : Alias for channel 11 READ_ADDR register // This is a trigger register (0xc). Writing a nonzero value will // reload the channel counter and start the channel. #define DMA_CH11_AL3_READ_ADDR_TRIG_OFFSET _u(0x000002fc) #define DMA_CH11_AL3_READ_ADDR_TRIG_BITS _u(0xffffffff) #define DMA_CH11_AL3_READ_ADDR_TRIG_RESET "-" #define DMA_CH11_AL3_READ_ADDR_TRIG_MSB _u(31) #define DMA_CH11_AL3_READ_ADDR_TRIG_LSB _u(0) #define DMA_CH11_AL3_READ_ADDR_TRIG_ACCESS "RW" // ============================================================================= // Register : DMA_INTR // Description : Interrupt Status (raw) // Raw interrupt status for DMA Channels 0..15. Bit n corresponds // to channel n. Ignores any masking or forcing. Channel // interrupts can be cleared by writing a bit mask to INTR, INTS0 // or INTS1. // // Channel interrupts can be routed to either of two system-level // IRQs based on INTE0 and INTE1. // // This can be used vector different channel interrupts to // different ISRs: this might be done to allow NVIC IRQ preemption // for more time-critical channels, or to spread IRQ load across // different cores. // // It is also valid to ignore this behaviour and just use // INTE0/INTS0/IRQ 0. #define DMA_INTR_OFFSET _u(0x00000400) #define DMA_INTR_BITS _u(0x0000ffff) #define DMA_INTR_RESET _u(0x00000000) #define DMA_INTR_MSB _u(15) #define DMA_INTR_LSB _u(0) #define DMA_INTR_ACCESS "WC" // ============================================================================= // Register : DMA_INTE0 // Description : Interrupt Enables for IRQ 0 // Set bit n to pass interrupts from channel n to DMA IRQ 0. #define DMA_INTE0_OFFSET _u(0x00000404) #define DMA_INTE0_BITS _u(0x0000ffff) #define DMA_INTE0_RESET _u(0x00000000) #define DMA_INTE0_MSB _u(15) #define DMA_INTE0_LSB _u(0) #define DMA_INTE0_ACCESS "RW" // ============================================================================= // Register : DMA_INTF0 // Description : Force Interrupts // Write 1s to force the corresponding bits in INTE0. The // interrupt remains asserted until INTF0 is cleared. #define DMA_INTF0_OFFSET _u(0x00000408) #define DMA_INTF0_BITS _u(0x0000ffff) #define DMA_INTF0_RESET _u(0x00000000) #define DMA_INTF0_MSB _u(15) #define DMA_INTF0_LSB _u(0) #define DMA_INTF0_ACCESS "RW" // ============================================================================= // Register : DMA_INTS0 // Description : Interrupt Status for IRQ 0 // Indicates active channel interrupt requests which are currently // causing IRQ 0 to be asserted. // Channel interrupts can be cleared by writing a bit mask here. #define DMA_INTS0_OFFSET _u(0x0000040c) #define DMA_INTS0_BITS _u(0x0000ffff) #define DMA_INTS0_RESET _u(0x00000000) #define DMA_INTS0_MSB _u(15) #define DMA_INTS0_LSB _u(0) #define DMA_INTS0_ACCESS "WC" // ============================================================================= // Register : DMA_INTE1 // Description : Interrupt Enables for IRQ 1 // Set bit n to pass interrupts from channel n to DMA IRQ 1. #define DMA_INTE1_OFFSET _u(0x00000414) #define DMA_INTE1_BITS _u(0x0000ffff) #define DMA_INTE1_RESET _u(0x00000000) #define DMA_INTE1_MSB _u(15) #define DMA_INTE1_LSB _u(0) #define DMA_INTE1_ACCESS "RW" // ============================================================================= // Register : DMA_INTF1 // Description : Force Interrupts for IRQ 1 // Write 1s to force the corresponding bits in INTE0. The // interrupt remains asserted until INTF0 is cleared. #define DMA_INTF1_OFFSET _u(0x00000418) #define DMA_INTF1_BITS _u(0x0000ffff) #define DMA_INTF1_RESET _u(0x00000000) #define DMA_INTF1_MSB _u(15) #define DMA_INTF1_LSB _u(0) #define DMA_INTF1_ACCESS "RW" // ============================================================================= // Register : DMA_INTS1 // Description : Interrupt Status (masked) for IRQ 1 // Indicates active channel interrupt requests which are currently // causing IRQ 1 to be asserted. // Channel interrupts can be cleared by writing a bit mask here. #define DMA_INTS1_OFFSET _u(0x0000041c) #define DMA_INTS1_BITS _u(0x0000ffff) #define DMA_INTS1_RESET _u(0x00000000) #define DMA_INTS1_MSB _u(15) #define DMA_INTS1_LSB _u(0) #define DMA_INTS1_ACCESS "WC" // ============================================================================= // Register : DMA_TIMER0 // Description : Pacing (X/Y) Fractional Timer // The pacing timer produces TREQ assertions at a rate set by // ((X/Y) * sys_clk). This equation is evaluated every sys_clk // cycles and therefore can only generate TREQs at a rate of 1 per // sys_clk (i.e. permanent TREQ) or less. #define DMA_TIMER0_OFFSET _u(0x00000420) #define DMA_TIMER0_BITS _u(0xffffffff) #define DMA_TIMER0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_TIMER0_X // Description : Pacing Timer Dividend. Specifies the X value for the (X/Y) // fractional timer. #define DMA_TIMER0_X_RESET _u(0x0000) #define DMA_TIMER0_X_BITS _u(0xffff0000) #define DMA_TIMER0_X_MSB _u(31) #define DMA_TIMER0_X_LSB _u(16) #define DMA_TIMER0_X_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_TIMER0_Y // Description : Pacing Timer Divisor. Specifies the Y value for the (X/Y) // fractional timer. #define DMA_TIMER0_Y_RESET _u(0x0000) #define DMA_TIMER0_Y_BITS _u(0x0000ffff) #define DMA_TIMER0_Y_MSB _u(15) #define DMA_TIMER0_Y_LSB _u(0) #define DMA_TIMER0_Y_ACCESS "RW" // ============================================================================= // Register : DMA_TIMER1 // Description : Pacing (X/Y) Fractional Timer // The pacing timer produces TREQ assertions at a rate set by // ((X/Y) * sys_clk). This equation is evaluated every sys_clk // cycles and therefore can only generate TREQs at a rate of 1 per // sys_clk (i.e. permanent TREQ) or less. #define DMA_TIMER1_OFFSET _u(0x00000424) #define DMA_TIMER1_BITS _u(0xffffffff) #define DMA_TIMER1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_TIMER1_X // Description : Pacing Timer Dividend. Specifies the X value for the (X/Y) // fractional timer. #define DMA_TIMER1_X_RESET _u(0x0000) #define DMA_TIMER1_X_BITS _u(0xffff0000) #define DMA_TIMER1_X_MSB _u(31) #define DMA_TIMER1_X_LSB _u(16) #define DMA_TIMER1_X_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_TIMER1_Y // Description : Pacing Timer Divisor. Specifies the Y value for the (X/Y) // fractional timer. #define DMA_TIMER1_Y_RESET _u(0x0000) #define DMA_TIMER1_Y_BITS _u(0x0000ffff) #define DMA_TIMER1_Y_MSB _u(15) #define DMA_TIMER1_Y_LSB _u(0) #define DMA_TIMER1_Y_ACCESS "RW" // ============================================================================= // Register : DMA_TIMER2 // Description : Pacing (X/Y) Fractional Timer // The pacing timer produces TREQ assertions at a rate set by // ((X/Y) * sys_clk). This equation is evaluated every sys_clk // cycles and therefore can only generate TREQs at a rate of 1 per // sys_clk (i.e. permanent TREQ) or less. #define DMA_TIMER2_OFFSET _u(0x00000428) #define DMA_TIMER2_BITS _u(0xffffffff) #define DMA_TIMER2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_TIMER2_X // Description : Pacing Timer Dividend. Specifies the X value for the (X/Y) // fractional timer. #define DMA_TIMER2_X_RESET _u(0x0000) #define DMA_TIMER2_X_BITS _u(0xffff0000) #define DMA_TIMER2_X_MSB _u(31) #define DMA_TIMER2_X_LSB _u(16) #define DMA_TIMER2_X_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_TIMER2_Y // Description : Pacing Timer Divisor. Specifies the Y value for the (X/Y) // fractional timer. #define DMA_TIMER2_Y_RESET _u(0x0000) #define DMA_TIMER2_Y_BITS _u(0x0000ffff) #define DMA_TIMER2_Y_MSB _u(15) #define DMA_TIMER2_Y_LSB _u(0) #define DMA_TIMER2_Y_ACCESS "RW" // ============================================================================= // Register : DMA_TIMER3 // Description : Pacing (X/Y) Fractional Timer // The pacing timer produces TREQ assertions at a rate set by // ((X/Y) * sys_clk). This equation is evaluated every sys_clk // cycles and therefore can only generate TREQs at a rate of 1 per // sys_clk (i.e. permanent TREQ) or less. #define DMA_TIMER3_OFFSET _u(0x0000042c) #define DMA_TIMER3_BITS _u(0xffffffff) #define DMA_TIMER3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_TIMER3_X // Description : Pacing Timer Dividend. Specifies the X value for the (X/Y) // fractional timer. #define DMA_TIMER3_X_RESET _u(0x0000) #define DMA_TIMER3_X_BITS _u(0xffff0000) #define DMA_TIMER3_X_MSB _u(31) #define DMA_TIMER3_X_LSB _u(16) #define DMA_TIMER3_X_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_TIMER3_Y // Description : Pacing Timer Divisor. Specifies the Y value for the (X/Y) // fractional timer. #define DMA_TIMER3_Y_RESET _u(0x0000) #define DMA_TIMER3_Y_BITS _u(0x0000ffff) #define DMA_TIMER3_Y_MSB _u(15) #define DMA_TIMER3_Y_LSB _u(0) #define DMA_TIMER3_Y_ACCESS "RW" // ============================================================================= // Register : DMA_MULTI_CHAN_TRIGGER // Description : Trigger one or more channels simultaneously // Each bit in this register corresponds to a DMA channel. Writing // a 1 to the relevant bit is the same as writing to that // channel's trigger register; the channel will start if it is // currently enabled and not already busy. #define DMA_MULTI_CHAN_TRIGGER_OFFSET _u(0x00000430) #define DMA_MULTI_CHAN_TRIGGER_BITS _u(0x0000ffff) #define DMA_MULTI_CHAN_TRIGGER_RESET _u(0x00000000) #define DMA_MULTI_CHAN_TRIGGER_MSB _u(15) #define DMA_MULTI_CHAN_TRIGGER_LSB _u(0) #define DMA_MULTI_CHAN_TRIGGER_ACCESS "SC" // ============================================================================= // Register : DMA_SNIFF_CTRL // Description : Sniffer Control #define DMA_SNIFF_CTRL_OFFSET _u(0x00000434) #define DMA_SNIFF_CTRL_BITS _u(0x00000fff) #define DMA_SNIFF_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_SNIFF_CTRL_OUT_INV // Description : If set, the result appears inverted (bitwise complement) when // read. This does not affect the way the checksum is calculated; // the result is transformed on-the-fly between the result // register and the bus. #define DMA_SNIFF_CTRL_OUT_INV_RESET _u(0x0) #define DMA_SNIFF_CTRL_OUT_INV_BITS _u(0x00000800) #define DMA_SNIFF_CTRL_OUT_INV_MSB _u(11) #define DMA_SNIFF_CTRL_OUT_INV_LSB _u(11) #define DMA_SNIFF_CTRL_OUT_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_SNIFF_CTRL_OUT_REV // Description : If set, the result appears bit-reversed when read. This does // not affect the way the checksum is calculated; the result is // transformed on-the-fly between the result register and the bus. #define DMA_SNIFF_CTRL_OUT_REV_RESET _u(0x0) #define DMA_SNIFF_CTRL_OUT_REV_BITS _u(0x00000400) #define DMA_SNIFF_CTRL_OUT_REV_MSB _u(10) #define DMA_SNIFF_CTRL_OUT_REV_LSB _u(10) #define DMA_SNIFF_CTRL_OUT_REV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_SNIFF_CTRL_BSWAP // Description : Locally perform a byte reverse on the sniffed data, before // feeding into checksum. // // Note that the sniff hardware is downstream of the DMA channel // byteswap performed in the read master: if channel CTRL_BSWAP // and SNIFF_CTRL_BSWAP are both enabled, their effects cancel // from the sniffer's point of view. #define DMA_SNIFF_CTRL_BSWAP_RESET _u(0x0) #define DMA_SNIFF_CTRL_BSWAP_BITS _u(0x00000200) #define DMA_SNIFF_CTRL_BSWAP_MSB _u(9) #define DMA_SNIFF_CTRL_BSWAP_LSB _u(9) #define DMA_SNIFF_CTRL_BSWAP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_SNIFF_CTRL_CALC // Description : 0x0 -> Calculate a CRC-32 (IEEE802.3 polynomial) // 0x1 -> Calculate a CRC-32 (IEEE802.3 polynomial) with bit // reversed data // 0x2 -> Calculate a CRC-16-CCITT // 0x3 -> Calculate a CRC-16-CCITT with bit reversed data // 0xe -> XOR reduction over all data. == 1 if the total 1 // population count is odd. // 0xf -> Calculate a simple 32-bit checksum (addition with a 32 // bit accumulator) #define DMA_SNIFF_CTRL_CALC_RESET _u(0x0) #define DMA_SNIFF_CTRL_CALC_BITS _u(0x000001e0) #define DMA_SNIFF_CTRL_CALC_MSB _u(8) #define DMA_SNIFF_CTRL_CALC_LSB _u(5) #define DMA_SNIFF_CTRL_CALC_ACCESS "RW" #define DMA_SNIFF_CTRL_CALC_VALUE_CRC32 _u(0x0) #define DMA_SNIFF_CTRL_CALC_VALUE_CRC32R _u(0x1) #define DMA_SNIFF_CTRL_CALC_VALUE_CRC16 _u(0x2) #define DMA_SNIFF_CTRL_CALC_VALUE_CRC16R _u(0x3) #define DMA_SNIFF_CTRL_CALC_VALUE_EVEN _u(0xe) #define DMA_SNIFF_CTRL_CALC_VALUE_SUM _u(0xf) // ----------------------------------------------------------------------------- // Field : DMA_SNIFF_CTRL_DMACH // Description : DMA channel for Sniffer to observe #define DMA_SNIFF_CTRL_DMACH_RESET _u(0x0) #define DMA_SNIFF_CTRL_DMACH_BITS _u(0x0000001e) #define DMA_SNIFF_CTRL_DMACH_MSB _u(4) #define DMA_SNIFF_CTRL_DMACH_LSB _u(1) #define DMA_SNIFF_CTRL_DMACH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : DMA_SNIFF_CTRL_EN // Description : Enable sniffer #define DMA_SNIFF_CTRL_EN_RESET _u(0x0) #define DMA_SNIFF_CTRL_EN_BITS _u(0x00000001) #define DMA_SNIFF_CTRL_EN_MSB _u(0) #define DMA_SNIFF_CTRL_EN_LSB _u(0) #define DMA_SNIFF_CTRL_EN_ACCESS "RW" // ============================================================================= // Register : DMA_SNIFF_DATA // Description : Data accumulator for sniff hardware // Write an initial seed value here before starting a DMA transfer // on the channel indicated by SNIFF_CTRL_DMACH. The hardware will // update this register each time it observes a read from the // indicated channel. Once the channel completes, the final result // can be read from this register. #define DMA_SNIFF_DATA_OFFSET _u(0x00000438) #define DMA_SNIFF_DATA_BITS _u(0xffffffff) #define DMA_SNIFF_DATA_RESET _u(0x00000000) #define DMA_SNIFF_DATA_MSB _u(31) #define DMA_SNIFF_DATA_LSB _u(0) #define DMA_SNIFF_DATA_ACCESS "RW" // ============================================================================= // Register : DMA_FIFO_LEVELS // Description : Debug RAF, WAF, TDF levels #define DMA_FIFO_LEVELS_OFFSET _u(0x00000440) #define DMA_FIFO_LEVELS_BITS _u(0x00ffffff) #define DMA_FIFO_LEVELS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : DMA_FIFO_LEVELS_RAF_LVL // Description : Current Read-Address-FIFO fill level #define DMA_FIFO_LEVELS_RAF_LVL_RESET _u(0x00) #define DMA_FIFO_LEVELS_RAF_LVL_BITS _u(0x00ff0000) #define DMA_FIFO_LEVELS_RAF_LVL_MSB _u(23) #define DMA_FIFO_LEVELS_RAF_LVL_LSB _u(16) #define DMA_FIFO_LEVELS_RAF_LVL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_FIFO_LEVELS_WAF_LVL // Description : Current Write-Address-FIFO fill level #define DMA_FIFO_LEVELS_WAF_LVL_RESET _u(0x00) #define DMA_FIFO_LEVELS_WAF_LVL_BITS _u(0x0000ff00) #define DMA_FIFO_LEVELS_WAF_LVL_MSB _u(15) #define DMA_FIFO_LEVELS_WAF_LVL_LSB _u(8) #define DMA_FIFO_LEVELS_WAF_LVL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : DMA_FIFO_LEVELS_TDF_LVL // Description : Current Transfer-Data-FIFO fill level #define DMA_FIFO_LEVELS_TDF_LVL_RESET _u(0x00) #define DMA_FIFO_LEVELS_TDF_LVL_BITS _u(0x000000ff) #define DMA_FIFO_LEVELS_TDF_LVL_MSB _u(7) #define DMA_FIFO_LEVELS_TDF_LVL_LSB _u(0) #define DMA_FIFO_LEVELS_TDF_LVL_ACCESS "RO" // ============================================================================= // Register : DMA_CHAN_ABORT // Description : Abort an in-progress transfer sequence on one or more channels // Each bit corresponds to a channel. Writing a 1 aborts whatever // transfer sequence is in progress on that channel. The bit will // remain high until any in-flight transfers have been flushed // through the address and data FIFOs. // // After writing, this register must be polled until it returns // all-zero. Until this point, it is unsafe to restart the // channel. #define DMA_CHAN_ABORT_OFFSET _u(0x00000444) #define DMA_CHAN_ABORT_BITS _u(0x0000ffff) #define DMA_CHAN_ABORT_RESET _u(0x00000000) #define DMA_CHAN_ABORT_MSB _u(15) #define DMA_CHAN_ABORT_LSB _u(0) #define DMA_CHAN_ABORT_ACCESS "SC" // ============================================================================= // Register : DMA_N_CHANNELS // Description : The number of channels this DMA instance is equipped with. This // DMA supports up to 16 hardware channels, but can be configured // with as few as one, to minimise silicon area. #define DMA_N_CHANNELS_OFFSET _u(0x00000448) #define DMA_N_CHANNELS_BITS _u(0x0000001f) #define DMA_N_CHANNELS_RESET "-" #define DMA_N_CHANNELS_MSB _u(4) #define DMA_N_CHANNELS_LSB _u(0) #define DMA_N_CHANNELS_ACCESS "RO" // ============================================================================= // Register : DMA_CH0_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH0_DBG_CTDREQ_OFFSET _u(0x00000800) #define DMA_CH0_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH0_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH0_DBG_CTDREQ_MSB _u(5) #define DMA_CH0_DBG_CTDREQ_LSB _u(0) #define DMA_CH0_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH0_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH0_DBG_TCR_OFFSET _u(0x00000804) #define DMA_CH0_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH0_DBG_TCR_RESET _u(0x00000000) #define DMA_CH0_DBG_TCR_MSB _u(31) #define DMA_CH0_DBG_TCR_LSB _u(0) #define DMA_CH0_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH1_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH1_DBG_CTDREQ_OFFSET _u(0x00000840) #define DMA_CH1_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH1_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH1_DBG_CTDREQ_MSB _u(5) #define DMA_CH1_DBG_CTDREQ_LSB _u(0) #define DMA_CH1_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH1_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH1_DBG_TCR_OFFSET _u(0x00000844) #define DMA_CH1_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH1_DBG_TCR_RESET _u(0x00000000) #define DMA_CH1_DBG_TCR_MSB _u(31) #define DMA_CH1_DBG_TCR_LSB _u(0) #define DMA_CH1_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH2_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH2_DBG_CTDREQ_OFFSET _u(0x00000880) #define DMA_CH2_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH2_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH2_DBG_CTDREQ_MSB _u(5) #define DMA_CH2_DBG_CTDREQ_LSB _u(0) #define DMA_CH2_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH2_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH2_DBG_TCR_OFFSET _u(0x00000884) #define DMA_CH2_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH2_DBG_TCR_RESET _u(0x00000000) #define DMA_CH2_DBG_TCR_MSB _u(31) #define DMA_CH2_DBG_TCR_LSB _u(0) #define DMA_CH2_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH3_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH3_DBG_CTDREQ_OFFSET _u(0x000008c0) #define DMA_CH3_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH3_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH3_DBG_CTDREQ_MSB _u(5) #define DMA_CH3_DBG_CTDREQ_LSB _u(0) #define DMA_CH3_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH3_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH3_DBG_TCR_OFFSET _u(0x000008c4) #define DMA_CH3_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH3_DBG_TCR_RESET _u(0x00000000) #define DMA_CH3_DBG_TCR_MSB _u(31) #define DMA_CH3_DBG_TCR_LSB _u(0) #define DMA_CH3_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH4_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH4_DBG_CTDREQ_OFFSET _u(0x00000900) #define DMA_CH4_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH4_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH4_DBG_CTDREQ_MSB _u(5) #define DMA_CH4_DBG_CTDREQ_LSB _u(0) #define DMA_CH4_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH4_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH4_DBG_TCR_OFFSET _u(0x00000904) #define DMA_CH4_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH4_DBG_TCR_RESET _u(0x00000000) #define DMA_CH4_DBG_TCR_MSB _u(31) #define DMA_CH4_DBG_TCR_LSB _u(0) #define DMA_CH4_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH5_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH5_DBG_CTDREQ_OFFSET _u(0x00000940) #define DMA_CH5_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH5_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH5_DBG_CTDREQ_MSB _u(5) #define DMA_CH5_DBG_CTDREQ_LSB _u(0) #define DMA_CH5_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH5_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH5_DBG_TCR_OFFSET _u(0x00000944) #define DMA_CH5_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH5_DBG_TCR_RESET _u(0x00000000) #define DMA_CH5_DBG_TCR_MSB _u(31) #define DMA_CH5_DBG_TCR_LSB _u(0) #define DMA_CH5_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH6_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH6_DBG_CTDREQ_OFFSET _u(0x00000980) #define DMA_CH6_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH6_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH6_DBG_CTDREQ_MSB _u(5) #define DMA_CH6_DBG_CTDREQ_LSB _u(0) #define DMA_CH6_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH6_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH6_DBG_TCR_OFFSET _u(0x00000984) #define DMA_CH6_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH6_DBG_TCR_RESET _u(0x00000000) #define DMA_CH6_DBG_TCR_MSB _u(31) #define DMA_CH6_DBG_TCR_LSB _u(0) #define DMA_CH6_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH7_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH7_DBG_CTDREQ_OFFSET _u(0x000009c0) #define DMA_CH7_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH7_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH7_DBG_CTDREQ_MSB _u(5) #define DMA_CH7_DBG_CTDREQ_LSB _u(0) #define DMA_CH7_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH7_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH7_DBG_TCR_OFFSET _u(0x000009c4) #define DMA_CH7_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH7_DBG_TCR_RESET _u(0x00000000) #define DMA_CH7_DBG_TCR_MSB _u(31) #define DMA_CH7_DBG_TCR_LSB _u(0) #define DMA_CH7_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH8_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH8_DBG_CTDREQ_OFFSET _u(0x00000a00) #define DMA_CH8_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH8_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH8_DBG_CTDREQ_MSB _u(5) #define DMA_CH8_DBG_CTDREQ_LSB _u(0) #define DMA_CH8_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH8_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH8_DBG_TCR_OFFSET _u(0x00000a04) #define DMA_CH8_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH8_DBG_TCR_RESET _u(0x00000000) #define DMA_CH8_DBG_TCR_MSB _u(31) #define DMA_CH8_DBG_TCR_LSB _u(0) #define DMA_CH8_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH9_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH9_DBG_CTDREQ_OFFSET _u(0x00000a40) #define DMA_CH9_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH9_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH9_DBG_CTDREQ_MSB _u(5) #define DMA_CH9_DBG_CTDREQ_LSB _u(0) #define DMA_CH9_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH9_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH9_DBG_TCR_OFFSET _u(0x00000a44) #define DMA_CH9_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH9_DBG_TCR_RESET _u(0x00000000) #define DMA_CH9_DBG_TCR_MSB _u(31) #define DMA_CH9_DBG_TCR_LSB _u(0) #define DMA_CH9_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH10_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH10_DBG_CTDREQ_OFFSET _u(0x00000a80) #define DMA_CH10_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH10_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH10_DBG_CTDREQ_MSB _u(5) #define DMA_CH10_DBG_CTDREQ_LSB _u(0) #define DMA_CH10_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH10_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH10_DBG_TCR_OFFSET _u(0x00000a84) #define DMA_CH10_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH10_DBG_TCR_RESET _u(0x00000000) #define DMA_CH10_DBG_TCR_MSB _u(31) #define DMA_CH10_DBG_TCR_LSB _u(0) #define DMA_CH10_DBG_TCR_ACCESS "RO" // ============================================================================= // Register : DMA_CH11_DBG_CTDREQ // Description : Read: get channel DREQ counter (i.e. how many accesses the DMA // expects it can perform on the peripheral without // overflow/underflow. Write any value: clears the counter, and // cause channel to re-initiate DREQ handshake. #define DMA_CH11_DBG_CTDREQ_OFFSET _u(0x00000ac0) #define DMA_CH11_DBG_CTDREQ_BITS _u(0x0000003f) #define DMA_CH11_DBG_CTDREQ_RESET _u(0x00000000) #define DMA_CH11_DBG_CTDREQ_MSB _u(5) #define DMA_CH11_DBG_CTDREQ_LSB _u(0) #define DMA_CH11_DBG_CTDREQ_ACCESS "WC" // ============================================================================= // Register : DMA_CH11_DBG_TCR // Description : Read to get channel TRANS_COUNT reload value, i.e. the length // of the next transfer #define DMA_CH11_DBG_TCR_OFFSET _u(0x00000ac4) #define DMA_CH11_DBG_TCR_BITS _u(0xffffffff) #define DMA_CH11_DBG_TCR_RESET _u(0x00000000) #define DMA_CH11_DBG_TCR_MSB _u(31) #define DMA_CH11_DBG_TCR_LSB _u(0) #define DMA_CH11_DBG_TCR_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_DMA_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/dreq.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _DREQ_H_ #define _DREQ_H_ #define DREQ_PIO0_TX0 0x0 #define DREQ_PIO0_TX1 0x1 #define DREQ_PIO0_TX2 0x2 #define DREQ_PIO0_TX3 0x3 #define DREQ_PIO0_RX0 0x4 #define DREQ_PIO0_RX1 0x5 #define DREQ_PIO0_RX2 0x6 #define DREQ_PIO0_RX3 0x7 #define DREQ_PIO1_TX0 0x8 #define DREQ_PIO1_TX1 0x9 #define DREQ_PIO1_TX2 0xa #define DREQ_PIO1_TX3 0xb #define DREQ_PIO1_RX0 0xc #define DREQ_PIO1_RX1 0xd #define DREQ_PIO1_RX2 0xe #define DREQ_PIO1_RX3 0xf #define DREQ_SPI0_TX 0x10 #define DREQ_SPI0_RX 0x11 #define DREQ_SPI1_TX 0x12 #define DREQ_SPI1_RX 0x13 #define DREQ_UART0_TX 0x14 #define DREQ_UART0_RX 0x15 #define DREQ_UART1_TX 0x16 #define DREQ_UART1_RX 0x17 #define DREQ_PWM_WRAP0 0x18 #define DREQ_PWM_WRAP1 0x19 #define DREQ_PWM_WRAP2 0x1a #define DREQ_PWM_WRAP3 0x1b #define DREQ_PWM_WRAP4 0x1c #define DREQ_PWM_WRAP5 0x1d #define DREQ_PWM_WRAP6 0x1e #define DREQ_PWM_WRAP7 0x1f #define DREQ_I2C0_TX 0x20 #define DREQ_I2C0_RX 0x21 #define DREQ_I2C1_TX 0x22 #define DREQ_I2C1_RX 0x23 #define DREQ_ADC 0x24 #define DREQ_XIP_STREAM 0x25 #define DREQ_XIP_SSITX 0x26 #define DREQ_XIP_SSIRX 0x27 #endif // _DREQ_H_ ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/i2c.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : I2C // Version : 1 // Bus type : apb // Description : DW_apb_i2c address block // // List of configuration constants for the Synopsys I2C // hardware (you may see references to these in I2C register // header; these are *fixed* values, set at hardware design // time): // // IC_ULTRA_FAST_MODE ................ 0x0 // IC_UFM_TBUF_CNT_DEFAULT ........... 0x8 // IC_UFM_SCL_LOW_COUNT .............. 0x0008 // IC_UFM_SCL_HIGH_COUNT ............. 0x0006 // IC_TX_TL .......................... 0x0 // IC_TX_CMD_BLOCK ................... 0x1 // IC_HAS_DMA ........................ 0x1 // IC_HAS_ASYNC_FIFO ................. 0x0 // IC_SMBUS_ARP ...................... 0x0 // IC_FIRST_DATA_BYTE_STATUS ......... 0x1 // IC_INTR_IO ........................ 0x1 // IC_MASTER_MODE .................... 0x1 // IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1 // IC_INTR_POL ....................... 0x1 // IC_OPTIONAL_SAR ................... 0x0 // IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055 // IC_DEFAULT_SLAVE_ADDR ............. 0x055 // IC_DEFAULT_HS_SPKLEN .............. 0x1 // IC_FS_SCL_HIGH_COUNT .............. 0x0006 // IC_HS_SCL_LOW_COUNT ............... 0x0008 // IC_DEVICE_ID_VALUE ................ 0x0 // IC_10BITADDR_MASTER ............... 0x0 // IC_CLK_FREQ_OPTIMIZATION .......... 0x0 // IC_DEFAULT_FS_SPKLEN .............. 0x7 // IC_ADD_ENCODED_PARAMS ............. 0x0 // IC_DEFAULT_SDA_HOLD ............... 0x000001 // IC_DEFAULT_SDA_SETUP .............. 0x64 // IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0 // IC_CLOCK_PERIOD ................... 100 // IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1 // IC_RESTART_EN ..................... 0x1 // IC_TX_CMD_BLOCK_DEFAULT ........... 0x0 // IC_BUS_CLEAR_FEATURE .............. 0x0 // IC_CAP_LOADING .................... 100 // IC_FS_SCL_LOW_COUNT ............... 0x000d // APB_DATA_WIDTH .................... 32 // IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff // IC_SLV_DATA_NACK_ONLY ............. 0x1 // IC_10BITADDR_SLAVE ................ 0x0 // IC_CLK_TYPE ....................... 0x0 // IC_SMBUS_UDID_MSB ................. 0x0 // IC_SMBUS_SUSPEND_ALERT ............ 0x0 // IC_HS_SCL_HIGH_COUNT .............. 0x0006 // IC_SLV_RESTART_DET_EN ............. 0x1 // IC_SMBUS .......................... 0x0 // IC_OPTIONAL_SAR_DEFAULT ........... 0x0 // IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0 // IC_USE_COUNTS ..................... 0x0 // IC_RX_BUFFER_DEPTH ................ 16 // IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff // IC_RX_FULL_HLD_BUS_EN ............. 0x1 // IC_SLAVE_DISABLE .................. 0x1 // IC_RX_TL .......................... 0x0 // IC_DEVICE_ID ...................... 0x0 // IC_HC_COUNT_VALUES ................ 0x0 // I2C_DYNAMIC_TAR_UPDATE ............ 0 // IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff // IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff // IC_HS_MASTER_CODE ................. 0x1 // IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff // IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff // IC_SS_SCL_HIGH_COUNT .............. 0x0028 // IC_SS_SCL_LOW_COUNT ............... 0x002f // IC_MAX_SPEED_MODE ................. 0x2 // IC_STAT_FOR_CLK_STRETCH ........... 0x0 // IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0 // IC_DEFAULT_UFM_SPKLEN ............. 0x1 // IC_TX_BUFFER_DEPTH ................ 16 // ============================================================================= #ifndef HARDWARE_REGS_I2C_DEFINED #define HARDWARE_REGS_I2C_DEFINED // ============================================================================= // Register : I2C_IC_CON // Description : I2C Control Register. This register can be written only when // the DW_apb_i2c is disabled, which corresponds to the // IC_ENABLE[0] register being set to 0. Writes at other times // have no effect. // // Read/Write Access: - bit 10 is read only. - bit 11 is read only // - bit 16 is read only - bit 17 is read only - bits 18 and 19 // are read only. #define I2C_IC_CON_OFFSET _u(0x00000000) #define I2C_IC_CON_BITS _u(0x000007ff) #define I2C_IC_CON_RESET _u(0x00000065) // ----------------------------------------------------------------------------- // Field : I2C_IC_CON_STOP_DET_IF_MASTER_ACTIVE // Description : Master issues the STOP_DET interrupt irrespective of whether // master is active or not #define I2C_IC_CON_STOP_DET_IF_MASTER_ACTIVE_RESET _u(0x0) #define I2C_IC_CON_STOP_DET_IF_MASTER_ACTIVE_BITS _u(0x00000400) #define I2C_IC_CON_STOP_DET_IF_MASTER_ACTIVE_MSB _u(10) #define I2C_IC_CON_STOP_DET_IF_MASTER_ACTIVE_LSB _u(10) #define I2C_IC_CON_STOP_DET_IF_MASTER_ACTIVE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : I2C_IC_CON_RX_FIFO_FULL_HLD_CTRL // Description : This bit controls whether DW_apb_i2c should hold the bus when // the Rx FIFO is physically full to its RX_BUFFER_DEPTH, as // described in the IC_RX_FULL_HLD_BUS_EN parameter. // // Reset value: 0x0. // 0x0 -> Overflow when RX_FIFO is full // 0x1 -> Hold bus when RX_FIFO is full #define I2C_IC_CON_RX_FIFO_FULL_HLD_CTRL_RESET _u(0x0) #define I2C_IC_CON_RX_FIFO_FULL_HLD_CTRL_BITS _u(0x00000200) #define I2C_IC_CON_RX_FIFO_FULL_HLD_CTRL_MSB _u(9) #define I2C_IC_CON_RX_FIFO_FULL_HLD_CTRL_LSB _u(9) #define I2C_IC_CON_RX_FIFO_FULL_HLD_CTRL_ACCESS "RW" #define I2C_IC_CON_RX_FIFO_FULL_HLD_CTRL_VALUE_DISABLED _u(0x0) #define I2C_IC_CON_RX_FIFO_FULL_HLD_CTRL_VALUE_ENABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_CON_TX_EMPTY_CTRL // Description : This bit controls the generation of the TX_EMPTY interrupt, as // described in the IC_RAW_INTR_STAT register. // // Reset value: 0x0. // 0x0 -> Default behaviour of TX_EMPTY interrupt // 0x1 -> Controlled generation of TX_EMPTY interrupt #define I2C_IC_CON_TX_EMPTY_CTRL_RESET _u(0x0) #define I2C_IC_CON_TX_EMPTY_CTRL_BITS _u(0x00000100) #define I2C_IC_CON_TX_EMPTY_CTRL_MSB _u(8) #define I2C_IC_CON_TX_EMPTY_CTRL_LSB _u(8) #define I2C_IC_CON_TX_EMPTY_CTRL_ACCESS "RW" #define I2C_IC_CON_TX_EMPTY_CTRL_VALUE_DISABLED _u(0x0) #define I2C_IC_CON_TX_EMPTY_CTRL_VALUE_ENABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_CON_STOP_DET_IFADDRESSED // Description : In slave mode: - 1'b1: issues the STOP_DET interrupt only when // it is addressed. - 1'b0: issues the STOP_DET irrespective of // whether it's addressed or not. Reset value: 0x0 // // NOTE: During a general call address, this slave does not issue // the STOP_DET interrupt if STOP_DET_IF_ADDRESSED = 1'b1, even if // the slave responds to the general call address by generating // ACK. The STOP_DET interrupt is generated only when the // transmitted address matches the slave address (SAR). // 0x0 -> slave issues STOP_DET intr always // 0x1 -> slave issues STOP_DET intr only if addressed #define I2C_IC_CON_STOP_DET_IFADDRESSED_RESET _u(0x0) #define I2C_IC_CON_STOP_DET_IFADDRESSED_BITS _u(0x00000080) #define I2C_IC_CON_STOP_DET_IFADDRESSED_MSB _u(7) #define I2C_IC_CON_STOP_DET_IFADDRESSED_LSB _u(7) #define I2C_IC_CON_STOP_DET_IFADDRESSED_ACCESS "RW" #define I2C_IC_CON_STOP_DET_IFADDRESSED_VALUE_DISABLED _u(0x0) #define I2C_IC_CON_STOP_DET_IFADDRESSED_VALUE_ENABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_CON_IC_SLAVE_DISABLE // Description : This bit controls whether I2C has its slave disabled, which // means once the presetn signal is applied, then this bit is set // and the slave is disabled. // // If this bit is set (slave is disabled), DW_apb_i2c functions // only as a master and does not perform any action that requires // a slave. // // NOTE: Software should ensure that if this bit is written with // 0, then bit 0 should also be written with a 0. // 0x0 -> Slave mode is enabled // 0x1 -> Slave mode is disabled #define I2C_IC_CON_IC_SLAVE_DISABLE_RESET _u(0x1) #define I2C_IC_CON_IC_SLAVE_DISABLE_BITS _u(0x00000040) #define I2C_IC_CON_IC_SLAVE_DISABLE_MSB _u(6) #define I2C_IC_CON_IC_SLAVE_DISABLE_LSB _u(6) #define I2C_IC_CON_IC_SLAVE_DISABLE_ACCESS "RW" #define I2C_IC_CON_IC_SLAVE_DISABLE_VALUE_SLAVE_ENABLED _u(0x0) #define I2C_IC_CON_IC_SLAVE_DISABLE_VALUE_SLAVE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_CON_IC_RESTART_EN // Description : Determines whether RESTART conditions may be sent when acting // as a master. Some older slaves do not support handling RESTART // conditions; however, RESTART conditions are used in several // DW_apb_i2c operations. When RESTART is disabled, the master is // prohibited from performing the following functions: - Sending a // START BYTE - Performing any high-speed mode operation - // High-speed mode operation - Performing direction changes in // combined format mode - Performing a read operation with a // 10-bit address By replacing RESTART condition followed by a // STOP and a subsequent START condition, split operations are // broken down into multiple DW_apb_i2c transfers. If the above // operations are performed, it will result in setting bit 6 // (TX_ABRT) of the IC_RAW_INTR_STAT register. // // Reset value: ENABLED // 0x0 -> Master restart disabled // 0x1 -> Master restart enabled #define I2C_IC_CON_IC_RESTART_EN_RESET _u(0x1) #define I2C_IC_CON_IC_RESTART_EN_BITS _u(0x00000020) #define I2C_IC_CON_IC_RESTART_EN_MSB _u(5) #define I2C_IC_CON_IC_RESTART_EN_LSB _u(5) #define I2C_IC_CON_IC_RESTART_EN_ACCESS "RW" #define I2C_IC_CON_IC_RESTART_EN_VALUE_DISABLED _u(0x0) #define I2C_IC_CON_IC_RESTART_EN_VALUE_ENABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_CON_IC_10BITADDR_MASTER // Description : Controls whether the DW_apb_i2c starts its transfers in 7- or // 10-bit addressing mode when acting as a master. - 0: 7-bit // addressing - 1: 10-bit addressing // 0x0 -> Master 7Bit addressing mode // 0x1 -> Master 10Bit addressing mode #define I2C_IC_CON_IC_10BITADDR_MASTER_RESET _u(0x0) #define I2C_IC_CON_IC_10BITADDR_MASTER_BITS _u(0x00000010) #define I2C_IC_CON_IC_10BITADDR_MASTER_MSB _u(4) #define I2C_IC_CON_IC_10BITADDR_MASTER_LSB _u(4) #define I2C_IC_CON_IC_10BITADDR_MASTER_ACCESS "RW" #define I2C_IC_CON_IC_10BITADDR_MASTER_VALUE_ADDR_7BITS _u(0x0) #define I2C_IC_CON_IC_10BITADDR_MASTER_VALUE_ADDR_10BITS _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_CON_IC_10BITADDR_SLAVE // Description : When acting as a slave, this bit controls whether the // DW_apb_i2c responds to 7- or 10-bit addresses. - 0: 7-bit // addressing. The DW_apb_i2c ignores transactions that involve // 10-bit addressing; for 7-bit addressing, only the lower 7 bits // of the IC_SAR register are compared. - 1: 10-bit addressing. // The DW_apb_i2c responds to only 10-bit addressing transfers // that match the full 10 bits of the IC_SAR register. // 0x0 -> Slave 7Bit addressing // 0x1 -> Slave 10Bit addressing #define I2C_IC_CON_IC_10BITADDR_SLAVE_RESET _u(0x0) #define I2C_IC_CON_IC_10BITADDR_SLAVE_BITS _u(0x00000008) #define I2C_IC_CON_IC_10BITADDR_SLAVE_MSB _u(3) #define I2C_IC_CON_IC_10BITADDR_SLAVE_LSB _u(3) #define I2C_IC_CON_IC_10BITADDR_SLAVE_ACCESS "RW" #define I2C_IC_CON_IC_10BITADDR_SLAVE_VALUE_ADDR_7BITS _u(0x0) #define I2C_IC_CON_IC_10BITADDR_SLAVE_VALUE_ADDR_10BITS _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_CON_SPEED // Description : These bits control at which speed the DW_apb_i2c operates; its // setting is relevant only if one is operating the DW_apb_i2c in // master mode. Hardware protects against illegal values being // programmed by software. These bits must be programmed // appropriately for slave mode also, as it is used to capture // correct value of spike filter as per the speed mode. // // This register should be programmed only with a value in the // range of 1 to IC_MAX_SPEED_MODE; otherwise, hardware updates // this register with the value of IC_MAX_SPEED_MODE. // // 1: standard mode (100 kbit/s) // // 2: fast mode (<=400 kbit/s) or fast mode plus (<=1000Kbit/s) // // 3: high speed mode (3.4 Mbit/s) // // Note: This field is not applicable when IC_ULTRA_FAST_MODE=1 // 0x1 -> Standard Speed mode of operation // 0x2 -> Fast or Fast Plus mode of operation // 0x3 -> High Speed mode of operation #define I2C_IC_CON_SPEED_RESET _u(0x2) #define I2C_IC_CON_SPEED_BITS _u(0x00000006) #define I2C_IC_CON_SPEED_MSB _u(2) #define I2C_IC_CON_SPEED_LSB _u(1) #define I2C_IC_CON_SPEED_ACCESS "RW" #define I2C_IC_CON_SPEED_VALUE_STANDARD _u(0x1) #define I2C_IC_CON_SPEED_VALUE_FAST _u(0x2) #define I2C_IC_CON_SPEED_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : I2C_IC_CON_MASTER_MODE // Description : This bit controls whether the DW_apb_i2c master is enabled. // // NOTE: Software should ensure that if this bit is written with // '1' then bit 6 should also be written with a '1'. // 0x0 -> Master mode is disabled // 0x1 -> Master mode is enabled #define I2C_IC_CON_MASTER_MODE_RESET _u(0x1) #define I2C_IC_CON_MASTER_MODE_BITS _u(0x00000001) #define I2C_IC_CON_MASTER_MODE_MSB _u(0) #define I2C_IC_CON_MASTER_MODE_LSB _u(0) #define I2C_IC_CON_MASTER_MODE_ACCESS "RW" #define I2C_IC_CON_MASTER_MODE_VALUE_DISABLED _u(0x0) #define I2C_IC_CON_MASTER_MODE_VALUE_ENABLED _u(0x1) // ============================================================================= // Register : I2C_IC_TAR // Description : I2C Target Address Register // // This register is 12 bits wide, and bits 31:12 are reserved. // This register can be written to only when IC_ENABLE[0] is set // to 0. // // Note: If the software or application is aware that the // DW_apb_i2c is not using the TAR address for the pending // commands in the Tx FIFO, then it is possible to update the TAR // address even while the Tx FIFO has entries (IC_STATUS[2]= 0). - // It is not necessary to perform any write to this register if // DW_apb_i2c is enabled as an I2C slave only. #define I2C_IC_TAR_OFFSET _u(0x00000004) #define I2C_IC_TAR_BITS _u(0x00000fff) #define I2C_IC_TAR_RESET _u(0x00000055) // ----------------------------------------------------------------------------- // Field : I2C_IC_TAR_SPECIAL // Description : This bit indicates whether software performs a Device-ID or // General Call or START BYTE command. - 0: ignore bit 10 // GC_OR_START and use IC_TAR normally - 1: perform special I2C // command as specified in Device_ID or GC_OR_START bit Reset // value: 0x0 // 0x0 -> Disables programming of GENERAL_CALL or START_BYTE // transmission // 0x1 -> Enables programming of GENERAL_CALL or START_BYTE // transmission #define I2C_IC_TAR_SPECIAL_RESET _u(0x0) #define I2C_IC_TAR_SPECIAL_BITS _u(0x00000800) #define I2C_IC_TAR_SPECIAL_MSB _u(11) #define I2C_IC_TAR_SPECIAL_LSB _u(11) #define I2C_IC_TAR_SPECIAL_ACCESS "RW" #define I2C_IC_TAR_SPECIAL_VALUE_DISABLED _u(0x0) #define I2C_IC_TAR_SPECIAL_VALUE_ENABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TAR_GC_OR_START // Description : If bit 11 (SPECIAL) is set to 1 and bit 13(Device-ID) is set to // 0, then this bit indicates whether a General Call or START byte // command is to be performed by the DW_apb_i2c. - 0: General Call // Address - after issuing a General Call, only writes may be // performed. Attempting to issue a read command results in // setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The // DW_apb_i2c remains in General Call mode until the SPECIAL bit // value (bit 11) is cleared. - 1: START BYTE Reset value: 0x0 // 0x0 -> GENERAL_CALL byte transmission // 0x1 -> START byte transmission #define I2C_IC_TAR_GC_OR_START_RESET _u(0x0) #define I2C_IC_TAR_GC_OR_START_BITS _u(0x00000400) #define I2C_IC_TAR_GC_OR_START_MSB _u(10) #define I2C_IC_TAR_GC_OR_START_LSB _u(10) #define I2C_IC_TAR_GC_OR_START_ACCESS "RW" #define I2C_IC_TAR_GC_OR_START_VALUE_GENERAL_CALL _u(0x0) #define I2C_IC_TAR_GC_OR_START_VALUE_START_BYTE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TAR_IC_TAR // Description : This is the target address for any master transaction. When // transmitting a General Call, these bits are ignored. To // generate a START BYTE, the CPU needs to write only once into // these bits. // // If the IC_TAR and IC_SAR are the same, loopback exists but the // FIFOs are shared between master and slave, so full loopback is // not feasible. Only one direction loopback mode is supported // (simplex), not duplex. A master cannot transmit to itself; it // can transmit to only a slave. #define I2C_IC_TAR_IC_TAR_RESET _u(0x055) #define I2C_IC_TAR_IC_TAR_BITS _u(0x000003ff) #define I2C_IC_TAR_IC_TAR_MSB _u(9) #define I2C_IC_TAR_IC_TAR_LSB _u(0) #define I2C_IC_TAR_IC_TAR_ACCESS "RW" // ============================================================================= // Register : I2C_IC_SAR // Description : I2C Slave Address Register #define I2C_IC_SAR_OFFSET _u(0x00000008) #define I2C_IC_SAR_BITS _u(0x000003ff) #define I2C_IC_SAR_RESET _u(0x00000055) // ----------------------------------------------------------------------------- // Field : I2C_IC_SAR_IC_SAR // Description : The IC_SAR holds the slave address when the I2C is operating as // a slave. For 7-bit addressing, only IC_SAR[6:0] is used. // // This register can be written only when the I2C interface is // disabled, which corresponds to the IC_ENABLE[0] register being // set to 0. Writes at other times have no effect. // // Note: The default values cannot be any of the reserved address // locations: that is, 0x00 to 0x07, or 0x78 to 0x7f. The correct // operation of the device is not guaranteed if you program the // IC_SAR or IC_TAR to a reserved value. Refer to // <> for a complete list of these // reserved values. #define I2C_IC_SAR_IC_SAR_RESET _u(0x055) #define I2C_IC_SAR_IC_SAR_BITS _u(0x000003ff) #define I2C_IC_SAR_IC_SAR_MSB _u(9) #define I2C_IC_SAR_IC_SAR_LSB _u(0) #define I2C_IC_SAR_IC_SAR_ACCESS "RW" // ============================================================================= // Register : I2C_IC_DATA_CMD // Description : I2C Rx/Tx Data Buffer and Command Register; this is the // register the CPU writes to when filling the TX FIFO and the CPU // reads from when retrieving bytes from RX FIFO. // // The size of the register changes as follows: // // Write: - 11 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=1 - 9 bits // when IC_EMPTYFIFO_HOLD_MASTER_EN=0 Read: - 12 bits when // IC_FIRST_DATA_BYTE_STATUS = 1 - 8 bits when // IC_FIRST_DATA_BYTE_STATUS = 0 Note: In order for the DW_apb_i2c // to continue acknowledging reads, a read command should be // written for every byte that is to be received; otherwise the // DW_apb_i2c will stop acknowledging. #define I2C_IC_DATA_CMD_OFFSET _u(0x00000010) #define I2C_IC_DATA_CMD_BITS _u(0x00000fff) #define I2C_IC_DATA_CMD_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_DATA_CMD_FIRST_DATA_BYTE // Description : Indicates the first data byte received after the address phase // for receive transfer in Master receiver or Slave receiver mode. // // Reset value : 0x0 // // NOTE: In case of APB_DATA_WIDTH=8, // // 1. The user has to perform two APB Reads to IC_DATA_CMD in // order to get status on 11 bit. // // 2. In order to read the 11 bit, the user has to perform the // first data byte read [7:0] (offset 0x10) and then perform the // second read [15:8] (offset 0x11) in order to know the status of // 11 bit (whether the data received in previous read is a first // data byte or not). // // 3. The 11th bit is an optional read field, user can ignore 2nd // byte read [15:8] (offset 0x11) if not interested in // FIRST_DATA_BYTE status. // 0x0 -> Sequential data byte received // 0x1 -> Non sequential data byte received #define I2C_IC_DATA_CMD_FIRST_DATA_BYTE_RESET _u(0x0) #define I2C_IC_DATA_CMD_FIRST_DATA_BYTE_BITS _u(0x00000800) #define I2C_IC_DATA_CMD_FIRST_DATA_BYTE_MSB _u(11) #define I2C_IC_DATA_CMD_FIRST_DATA_BYTE_LSB _u(11) #define I2C_IC_DATA_CMD_FIRST_DATA_BYTE_ACCESS "RO" #define I2C_IC_DATA_CMD_FIRST_DATA_BYTE_VALUE_INACTIVE _u(0x0) #define I2C_IC_DATA_CMD_FIRST_DATA_BYTE_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_DATA_CMD_RESTART // Description : This bit controls whether a RESTART is issued before the byte // is sent or received. // // 1 - If IC_RESTART_EN is 1, a RESTART is issued before the data // is sent/received (according to the value of CMD), regardless of // whether or not the transfer direction is changing from the // previous command; if IC_RESTART_EN is 0, a STOP followed by a // START is issued instead. // // 0 - If IC_RESTART_EN is 1, a RESTART is issued only if the // transfer direction is changing from the previous command; if // IC_RESTART_EN is 0, a STOP followed by a START is issued // instead. // // Reset value: 0x0 // 0x0 -> Don't Issue RESTART before this command // 0x1 -> Issue RESTART before this command #define I2C_IC_DATA_CMD_RESTART_RESET _u(0x0) #define I2C_IC_DATA_CMD_RESTART_BITS _u(0x00000400) #define I2C_IC_DATA_CMD_RESTART_MSB _u(10) #define I2C_IC_DATA_CMD_RESTART_LSB _u(10) #define I2C_IC_DATA_CMD_RESTART_ACCESS "SC" #define I2C_IC_DATA_CMD_RESTART_VALUE_DISABLE _u(0x0) #define I2C_IC_DATA_CMD_RESTART_VALUE_ENABLE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_DATA_CMD_STOP // Description : This bit controls whether a STOP is issued after the byte is // sent or received. // // - 1 - STOP is issued after this byte, regardless of whether or // not the Tx FIFO is empty. If the Tx FIFO is not empty, the // master immediately tries to start a new transfer by issuing a // START and arbitrating for the bus. - 0 - STOP is not issued // after this byte, regardless of whether or not the Tx FIFO is // empty. If the Tx FIFO is not empty, the master continues the // current transfer by sending/receiving data bytes according to // the value of the CMD bit. If the Tx FIFO is empty, the master // holds the SCL line low and stalls the bus until a new command // is available in the Tx FIFO. Reset value: 0x0 // 0x0 -> Don't Issue STOP after this command // 0x1 -> Issue STOP after this command #define I2C_IC_DATA_CMD_STOP_RESET _u(0x0) #define I2C_IC_DATA_CMD_STOP_BITS _u(0x00000200) #define I2C_IC_DATA_CMD_STOP_MSB _u(9) #define I2C_IC_DATA_CMD_STOP_LSB _u(9) #define I2C_IC_DATA_CMD_STOP_ACCESS "SC" #define I2C_IC_DATA_CMD_STOP_VALUE_DISABLE _u(0x0) #define I2C_IC_DATA_CMD_STOP_VALUE_ENABLE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_DATA_CMD_CMD // Description : This bit controls whether a read or a write is performed. This // bit does not control the direction when the DW_apb_i2con acts // as a slave. It controls only the direction when it acts as a // master. // // When a command is entered in the TX FIFO, this bit // distinguishes the write and read commands. In slave-receiver // mode, this bit is a 'don't care' because writes to this // register are not required. In slave-transmitter mode, a '0' // indicates that the data in IC_DATA_CMD is to be transmitted. // // When programming this bit, you should remember the following: // attempting to perform a read operation after a General Call // command has been sent results in a TX_ABRT interrupt (bit 6 of // the IC_RAW_INTR_STAT register), unless bit 11 (SPECIAL) in the // IC_TAR register has been cleared. If a '1' is written to this // bit after receiving a RD_REQ interrupt, then a TX_ABRT // interrupt occurs. // // Reset value: 0x0 // 0x0 -> Master Write Command // 0x1 -> Master Read Command #define I2C_IC_DATA_CMD_CMD_RESET _u(0x0) #define I2C_IC_DATA_CMD_CMD_BITS _u(0x00000100) #define I2C_IC_DATA_CMD_CMD_MSB _u(8) #define I2C_IC_DATA_CMD_CMD_LSB _u(8) #define I2C_IC_DATA_CMD_CMD_ACCESS "SC" #define I2C_IC_DATA_CMD_CMD_VALUE_WRITE _u(0x0) #define I2C_IC_DATA_CMD_CMD_VALUE_READ _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_DATA_CMD_DAT // Description : This register contains the data to be transmitted or received // on the I2C bus. If you are writing to this register and want to // perform a read, bits 7:0 (DAT) are ignored by the DW_apb_i2c. // However, when you read this register, these bits return the // value of data received on the DW_apb_i2c interface. // // Reset value: 0x0 #define I2C_IC_DATA_CMD_DAT_RESET _u(0x00) #define I2C_IC_DATA_CMD_DAT_BITS _u(0x000000ff) #define I2C_IC_DATA_CMD_DAT_MSB _u(7) #define I2C_IC_DATA_CMD_DAT_LSB _u(0) #define I2C_IC_DATA_CMD_DAT_ACCESS "RW" // ============================================================================= // Register : I2C_IC_SS_SCL_HCNT // Description : Standard Speed I2C Clock SCL High Count Register #define I2C_IC_SS_SCL_HCNT_OFFSET _u(0x00000014) #define I2C_IC_SS_SCL_HCNT_BITS _u(0x0000ffff) #define I2C_IC_SS_SCL_HCNT_RESET _u(0x00000028) // ----------------------------------------------------------------------------- // Field : I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT // Description : This register must be set before any I2C bus transaction can // take place to ensure proper I/O timing. This register sets the // SCL clock high-period count for standard speed. For more // information, refer to 'IC_CLK Frequency Configuration'. // // This register can be written only when the I2C interface is // disabled which corresponds to the IC_ENABLE[0] register being // set to 0. Writes at other times have no effect. // // The minimum valid value is 6; hardware prevents values less // than this being written, and if attempted results in 6 being // set. For designs with APB_DATA_WIDTH = 8, the order of // programming is important to ensure the correct operation of the // DW_apb_i2c. The lower byte must be programmed first. Then the // upper byte is programmed. // // NOTE: This register must not be programmed to a value higher // than 65525, because DW_apb_i2c uses a 16-bit counter to flag an // I2C bus idle condition when this counter reaches a value of // IC_SS_SCL_HCNT + 10. #define I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT_RESET _u(0x0028) #define I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT_BITS _u(0x0000ffff) #define I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT_MSB _u(15) #define I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT_LSB _u(0) #define I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT_ACCESS "RW" // ============================================================================= // Register : I2C_IC_SS_SCL_LCNT // Description : Standard Speed I2C Clock SCL Low Count Register #define I2C_IC_SS_SCL_LCNT_OFFSET _u(0x00000018) #define I2C_IC_SS_SCL_LCNT_BITS _u(0x0000ffff) #define I2C_IC_SS_SCL_LCNT_RESET _u(0x0000002f) // ----------------------------------------------------------------------------- // Field : I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT // Description : This register must be set before any I2C bus transaction can // take place to ensure proper I/O timing. This register sets the // SCL clock low period count for standard speed. For more // information, refer to 'IC_CLK Frequency Configuration' // // This register can be written only when the I2C interface is // disabled which corresponds to the IC_ENABLE[0] register being // set to 0. Writes at other times have no effect. // // The minimum valid value is 8; hardware prevents values less // than this being written, and if attempted, results in 8 being // set. For designs with APB_DATA_WIDTH = 8, the order of // programming is important to ensure the correct operation of // DW_apb_i2c. The lower byte must be programmed first, and then // the upper byte is programmed. #define I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT_RESET _u(0x002f) #define I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT_BITS _u(0x0000ffff) #define I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT_MSB _u(15) #define I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT_LSB _u(0) #define I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT_ACCESS "RW" // ============================================================================= // Register : I2C_IC_FS_SCL_HCNT // Description : Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register #define I2C_IC_FS_SCL_HCNT_OFFSET _u(0x0000001c) #define I2C_IC_FS_SCL_HCNT_BITS _u(0x0000ffff) #define I2C_IC_FS_SCL_HCNT_RESET _u(0x00000006) // ----------------------------------------------------------------------------- // Field : I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT // Description : This register must be set before any I2C bus transaction can // take place to ensure proper I/O timing. This register sets the // SCL clock high-period count for fast mode or fast mode plus. It // is used in high-speed mode to send the Master Code and START // BYTE or General CALL. For more information, refer to 'IC_CLK // Frequency Configuration'. // // This register goes away and becomes read-only returning 0s if // IC_MAX_SPEED_MODE = standard. This register can be written only // when the I2C interface is disabled, which corresponds to the // IC_ENABLE[0] register being set to 0. Writes at other times // have no effect. // // The minimum valid value is 6; hardware prevents values less // than this being written, and if attempted results in 6 being // set. For designs with APB_DATA_WIDTH == 8 the order of // programming is important to ensure the correct operation of the // DW_apb_i2c. The lower byte must be programmed first. Then the // upper byte is programmed. #define I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_RESET _u(0x0006) #define I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_BITS _u(0x0000ffff) #define I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_MSB _u(15) #define I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_LSB _u(0) #define I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_ACCESS "RW" // ============================================================================= // Register : I2C_IC_FS_SCL_LCNT // Description : Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register #define I2C_IC_FS_SCL_LCNT_OFFSET _u(0x00000020) #define I2C_IC_FS_SCL_LCNT_BITS _u(0x0000ffff) #define I2C_IC_FS_SCL_LCNT_RESET _u(0x0000000d) // ----------------------------------------------------------------------------- // Field : I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT // Description : This register must be set before any I2C bus transaction can // take place to ensure proper I/O timing. This register sets the // SCL clock low period count for fast speed. It is used in // high-speed mode to send the Master Code and START BYTE or // General CALL. For more information, refer to 'IC_CLK Frequency // Configuration'. // // This register goes away and becomes read-only returning 0s if // IC_MAX_SPEED_MODE = standard. // // This register can be written only when the I2C interface is // disabled, which corresponds to the IC_ENABLE[0] register being // set to 0. Writes at other times have no effect. // // The minimum valid value is 8; hardware prevents values less // than this being written, and if attempted results in 8 being // set. For designs with APB_DATA_WIDTH = 8 the order of // programming is important to ensure the correct operation of the // DW_apb_i2c. The lower byte must be programmed first. Then the // upper byte is programmed. If the value is less than 8 then the // count value gets changed to 8. #define I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_RESET _u(0x000d) #define I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_BITS _u(0x0000ffff) #define I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_MSB _u(15) #define I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_LSB _u(0) #define I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_ACCESS "RW" // ============================================================================= // Register : I2C_IC_INTR_STAT // Description : I2C Interrupt Status Register // // Each bit in this register has a corresponding mask bit in the // IC_INTR_MASK register. These bits are cleared by reading the // matching interrupt clear register. The unmasked raw versions of // these bits are available in the IC_RAW_INTR_STAT register. #define I2C_IC_INTR_STAT_OFFSET _u(0x0000002c) #define I2C_IC_INTR_STAT_BITS _u(0x00001fff) #define I2C_IC_INTR_STAT_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_RESTART_DET // Description : See IC_RAW_INTR_STAT for a detailed description of // R_RESTART_DET bit. // // Reset value: 0x0 // 0x0 -> R_RESTART_DET interrupt is inactive // 0x1 -> R_RESTART_DET interrupt is active #define I2C_IC_INTR_STAT_R_RESTART_DET_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_RESTART_DET_BITS _u(0x00001000) #define I2C_IC_INTR_STAT_R_RESTART_DET_MSB _u(12) #define I2C_IC_INTR_STAT_R_RESTART_DET_LSB _u(12) #define I2C_IC_INTR_STAT_R_RESTART_DET_ACCESS "RO" #define I2C_IC_INTR_STAT_R_RESTART_DET_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_RESTART_DET_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_GEN_CALL // Description : See IC_RAW_INTR_STAT for a detailed description of R_GEN_CALL // bit. // // Reset value: 0x0 // 0x0 -> R_GEN_CALL interrupt is inactive // 0x1 -> R_GEN_CALL interrupt is active #define I2C_IC_INTR_STAT_R_GEN_CALL_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_GEN_CALL_BITS _u(0x00000800) #define I2C_IC_INTR_STAT_R_GEN_CALL_MSB _u(11) #define I2C_IC_INTR_STAT_R_GEN_CALL_LSB _u(11) #define I2C_IC_INTR_STAT_R_GEN_CALL_ACCESS "RO" #define I2C_IC_INTR_STAT_R_GEN_CALL_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_GEN_CALL_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_START_DET // Description : See IC_RAW_INTR_STAT for a detailed description of R_START_DET // bit. // // Reset value: 0x0 // 0x0 -> R_START_DET interrupt is inactive // 0x1 -> R_START_DET interrupt is active #define I2C_IC_INTR_STAT_R_START_DET_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_START_DET_BITS _u(0x00000400) #define I2C_IC_INTR_STAT_R_START_DET_MSB _u(10) #define I2C_IC_INTR_STAT_R_START_DET_LSB _u(10) #define I2C_IC_INTR_STAT_R_START_DET_ACCESS "RO" #define I2C_IC_INTR_STAT_R_START_DET_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_START_DET_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_STOP_DET // Description : See IC_RAW_INTR_STAT for a detailed description of R_STOP_DET // bit. // // Reset value: 0x0 // 0x0 -> R_STOP_DET interrupt is inactive // 0x1 -> R_STOP_DET interrupt is active #define I2C_IC_INTR_STAT_R_STOP_DET_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_STOP_DET_BITS _u(0x00000200) #define I2C_IC_INTR_STAT_R_STOP_DET_MSB _u(9) #define I2C_IC_INTR_STAT_R_STOP_DET_LSB _u(9) #define I2C_IC_INTR_STAT_R_STOP_DET_ACCESS "RO" #define I2C_IC_INTR_STAT_R_STOP_DET_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_STOP_DET_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_ACTIVITY // Description : See IC_RAW_INTR_STAT for a detailed description of R_ACTIVITY // bit. // // Reset value: 0x0 // 0x0 -> R_ACTIVITY interrupt is inactive // 0x1 -> R_ACTIVITY interrupt is active #define I2C_IC_INTR_STAT_R_ACTIVITY_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_ACTIVITY_BITS _u(0x00000100) #define I2C_IC_INTR_STAT_R_ACTIVITY_MSB _u(8) #define I2C_IC_INTR_STAT_R_ACTIVITY_LSB _u(8) #define I2C_IC_INTR_STAT_R_ACTIVITY_ACCESS "RO" #define I2C_IC_INTR_STAT_R_ACTIVITY_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_ACTIVITY_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_RX_DONE // Description : See IC_RAW_INTR_STAT for a detailed description of R_RX_DONE // bit. // // Reset value: 0x0 // 0x0 -> R_RX_DONE interrupt is inactive // 0x1 -> R_RX_DONE interrupt is active #define I2C_IC_INTR_STAT_R_RX_DONE_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_RX_DONE_BITS _u(0x00000080) #define I2C_IC_INTR_STAT_R_RX_DONE_MSB _u(7) #define I2C_IC_INTR_STAT_R_RX_DONE_LSB _u(7) #define I2C_IC_INTR_STAT_R_RX_DONE_ACCESS "RO" #define I2C_IC_INTR_STAT_R_RX_DONE_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_RX_DONE_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_TX_ABRT // Description : See IC_RAW_INTR_STAT for a detailed description of R_TX_ABRT // bit. // // Reset value: 0x0 // 0x0 -> R_TX_ABRT interrupt is inactive // 0x1 -> R_TX_ABRT interrupt is active #define I2C_IC_INTR_STAT_R_TX_ABRT_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_TX_ABRT_BITS _u(0x00000040) #define I2C_IC_INTR_STAT_R_TX_ABRT_MSB _u(6) #define I2C_IC_INTR_STAT_R_TX_ABRT_LSB _u(6) #define I2C_IC_INTR_STAT_R_TX_ABRT_ACCESS "RO" #define I2C_IC_INTR_STAT_R_TX_ABRT_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_TX_ABRT_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_RD_REQ // Description : See IC_RAW_INTR_STAT for a detailed description of R_RD_REQ // bit. // // Reset value: 0x0 // 0x0 -> R_RD_REQ interrupt is inactive // 0x1 -> R_RD_REQ interrupt is active #define I2C_IC_INTR_STAT_R_RD_REQ_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_RD_REQ_BITS _u(0x00000020) #define I2C_IC_INTR_STAT_R_RD_REQ_MSB _u(5) #define I2C_IC_INTR_STAT_R_RD_REQ_LSB _u(5) #define I2C_IC_INTR_STAT_R_RD_REQ_ACCESS "RO" #define I2C_IC_INTR_STAT_R_RD_REQ_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_RD_REQ_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_TX_EMPTY // Description : See IC_RAW_INTR_STAT for a detailed description of R_TX_EMPTY // bit. // // Reset value: 0x0 // 0x0 -> R_TX_EMPTY interrupt is inactive // 0x1 -> R_TX_EMPTY interrupt is active #define I2C_IC_INTR_STAT_R_TX_EMPTY_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_TX_EMPTY_BITS _u(0x00000010) #define I2C_IC_INTR_STAT_R_TX_EMPTY_MSB _u(4) #define I2C_IC_INTR_STAT_R_TX_EMPTY_LSB _u(4) #define I2C_IC_INTR_STAT_R_TX_EMPTY_ACCESS "RO" #define I2C_IC_INTR_STAT_R_TX_EMPTY_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_TX_EMPTY_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_TX_OVER // Description : See IC_RAW_INTR_STAT for a detailed description of R_TX_OVER // bit. // // Reset value: 0x0 // 0x0 -> R_TX_OVER interrupt is inactive // 0x1 -> R_TX_OVER interrupt is active #define I2C_IC_INTR_STAT_R_TX_OVER_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_TX_OVER_BITS _u(0x00000008) #define I2C_IC_INTR_STAT_R_TX_OVER_MSB _u(3) #define I2C_IC_INTR_STAT_R_TX_OVER_LSB _u(3) #define I2C_IC_INTR_STAT_R_TX_OVER_ACCESS "RO" #define I2C_IC_INTR_STAT_R_TX_OVER_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_TX_OVER_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_RX_FULL // Description : See IC_RAW_INTR_STAT for a detailed description of R_RX_FULL // bit. // // Reset value: 0x0 // 0x0 -> R_RX_FULL interrupt is inactive // 0x1 -> R_RX_FULL interrupt is active #define I2C_IC_INTR_STAT_R_RX_FULL_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_RX_FULL_BITS _u(0x00000004) #define I2C_IC_INTR_STAT_R_RX_FULL_MSB _u(2) #define I2C_IC_INTR_STAT_R_RX_FULL_LSB _u(2) #define I2C_IC_INTR_STAT_R_RX_FULL_ACCESS "RO" #define I2C_IC_INTR_STAT_R_RX_FULL_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_RX_FULL_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_RX_OVER // Description : See IC_RAW_INTR_STAT for a detailed description of R_RX_OVER // bit. // // Reset value: 0x0 // 0x0 -> R_RX_OVER interrupt is inactive // 0x1 -> R_RX_OVER interrupt is active #define I2C_IC_INTR_STAT_R_RX_OVER_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_RX_OVER_BITS _u(0x00000002) #define I2C_IC_INTR_STAT_R_RX_OVER_MSB _u(1) #define I2C_IC_INTR_STAT_R_RX_OVER_LSB _u(1) #define I2C_IC_INTR_STAT_R_RX_OVER_ACCESS "RO" #define I2C_IC_INTR_STAT_R_RX_OVER_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_RX_OVER_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_STAT_R_RX_UNDER // Description : See IC_RAW_INTR_STAT for a detailed description of R_RX_UNDER // bit. // // Reset value: 0x0 // 0x0 -> RX_UNDER interrupt is inactive // 0x1 -> RX_UNDER interrupt is active #define I2C_IC_INTR_STAT_R_RX_UNDER_RESET _u(0x0) #define I2C_IC_INTR_STAT_R_RX_UNDER_BITS _u(0x00000001) #define I2C_IC_INTR_STAT_R_RX_UNDER_MSB _u(0) #define I2C_IC_INTR_STAT_R_RX_UNDER_LSB _u(0) #define I2C_IC_INTR_STAT_R_RX_UNDER_ACCESS "RO" #define I2C_IC_INTR_STAT_R_RX_UNDER_VALUE_INACTIVE _u(0x0) #define I2C_IC_INTR_STAT_R_RX_UNDER_VALUE_ACTIVE _u(0x1) // ============================================================================= // Register : I2C_IC_INTR_MASK // Description : I2C Interrupt Mask Register. // // These bits mask their corresponding interrupt status bits. This // register is active low; a value of 0 masks the interrupt, // whereas a value of 1 unmasks the interrupt. #define I2C_IC_INTR_MASK_OFFSET _u(0x00000030) #define I2C_IC_INTR_MASK_BITS _u(0x00001fff) #define I2C_IC_INTR_MASK_RESET _u(0x000008ff) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_RESTART_DET // Description : This bit masks the R_RESTART_DET interrupt in IC_INTR_STAT // register. // // Reset value: 0x0 // 0x0 -> RESTART_DET interrupt is masked // 0x1 -> RESTART_DET interrupt is unmasked #define I2C_IC_INTR_MASK_M_RESTART_DET_RESET _u(0x0) #define I2C_IC_INTR_MASK_M_RESTART_DET_BITS _u(0x00001000) #define I2C_IC_INTR_MASK_M_RESTART_DET_MSB _u(12) #define I2C_IC_INTR_MASK_M_RESTART_DET_LSB _u(12) #define I2C_IC_INTR_MASK_M_RESTART_DET_ACCESS "RW" #define I2C_IC_INTR_MASK_M_RESTART_DET_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_RESTART_DET_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_GEN_CALL // Description : This bit masks the R_GEN_CALL interrupt in IC_INTR_STAT // register. // // Reset value: 0x1 // 0x0 -> GEN_CALL interrupt is masked // 0x1 -> GEN_CALL interrupt is unmasked #define I2C_IC_INTR_MASK_M_GEN_CALL_RESET _u(0x1) #define I2C_IC_INTR_MASK_M_GEN_CALL_BITS _u(0x00000800) #define I2C_IC_INTR_MASK_M_GEN_CALL_MSB _u(11) #define I2C_IC_INTR_MASK_M_GEN_CALL_LSB _u(11) #define I2C_IC_INTR_MASK_M_GEN_CALL_ACCESS "RW" #define I2C_IC_INTR_MASK_M_GEN_CALL_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_GEN_CALL_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_START_DET // Description : This bit masks the R_START_DET interrupt in IC_INTR_STAT // register. // // Reset value: 0x0 // 0x0 -> START_DET interrupt is masked // 0x1 -> START_DET interrupt is unmasked #define I2C_IC_INTR_MASK_M_START_DET_RESET _u(0x0) #define I2C_IC_INTR_MASK_M_START_DET_BITS _u(0x00000400) #define I2C_IC_INTR_MASK_M_START_DET_MSB _u(10) #define I2C_IC_INTR_MASK_M_START_DET_LSB _u(10) #define I2C_IC_INTR_MASK_M_START_DET_ACCESS "RW" #define I2C_IC_INTR_MASK_M_START_DET_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_START_DET_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_STOP_DET // Description : This bit masks the R_STOP_DET interrupt in IC_INTR_STAT // register. // // Reset value: 0x0 // 0x0 -> STOP_DET interrupt is masked // 0x1 -> STOP_DET interrupt is unmasked #define I2C_IC_INTR_MASK_M_STOP_DET_RESET _u(0x0) #define I2C_IC_INTR_MASK_M_STOP_DET_BITS _u(0x00000200) #define I2C_IC_INTR_MASK_M_STOP_DET_MSB _u(9) #define I2C_IC_INTR_MASK_M_STOP_DET_LSB _u(9) #define I2C_IC_INTR_MASK_M_STOP_DET_ACCESS "RW" #define I2C_IC_INTR_MASK_M_STOP_DET_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_STOP_DET_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_ACTIVITY // Description : This bit masks the R_ACTIVITY interrupt in IC_INTR_STAT // register. // // Reset value: 0x0 // 0x0 -> ACTIVITY interrupt is masked // 0x1 -> ACTIVITY interrupt is unmasked #define I2C_IC_INTR_MASK_M_ACTIVITY_RESET _u(0x0) #define I2C_IC_INTR_MASK_M_ACTIVITY_BITS _u(0x00000100) #define I2C_IC_INTR_MASK_M_ACTIVITY_MSB _u(8) #define I2C_IC_INTR_MASK_M_ACTIVITY_LSB _u(8) #define I2C_IC_INTR_MASK_M_ACTIVITY_ACCESS "RW" #define I2C_IC_INTR_MASK_M_ACTIVITY_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_ACTIVITY_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_RX_DONE // Description : This bit masks the R_RX_DONE interrupt in IC_INTR_STAT // register. // // Reset value: 0x1 // 0x0 -> RX_DONE interrupt is masked // 0x1 -> RX_DONE interrupt is unmasked #define I2C_IC_INTR_MASK_M_RX_DONE_RESET _u(0x1) #define I2C_IC_INTR_MASK_M_RX_DONE_BITS _u(0x00000080) #define I2C_IC_INTR_MASK_M_RX_DONE_MSB _u(7) #define I2C_IC_INTR_MASK_M_RX_DONE_LSB _u(7) #define I2C_IC_INTR_MASK_M_RX_DONE_ACCESS "RW" #define I2C_IC_INTR_MASK_M_RX_DONE_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_RX_DONE_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_TX_ABRT // Description : This bit masks the R_TX_ABRT interrupt in IC_INTR_STAT // register. // // Reset value: 0x1 // 0x0 -> TX_ABORT interrupt is masked // 0x1 -> TX_ABORT interrupt is unmasked #define I2C_IC_INTR_MASK_M_TX_ABRT_RESET _u(0x1) #define I2C_IC_INTR_MASK_M_TX_ABRT_BITS _u(0x00000040) #define I2C_IC_INTR_MASK_M_TX_ABRT_MSB _u(6) #define I2C_IC_INTR_MASK_M_TX_ABRT_LSB _u(6) #define I2C_IC_INTR_MASK_M_TX_ABRT_ACCESS "RW" #define I2C_IC_INTR_MASK_M_TX_ABRT_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_TX_ABRT_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_RD_REQ // Description : This bit masks the R_RD_REQ interrupt in IC_INTR_STAT register. // // Reset value: 0x1 // 0x0 -> RD_REQ interrupt is masked // 0x1 -> RD_REQ interrupt is unmasked #define I2C_IC_INTR_MASK_M_RD_REQ_RESET _u(0x1) #define I2C_IC_INTR_MASK_M_RD_REQ_BITS _u(0x00000020) #define I2C_IC_INTR_MASK_M_RD_REQ_MSB _u(5) #define I2C_IC_INTR_MASK_M_RD_REQ_LSB _u(5) #define I2C_IC_INTR_MASK_M_RD_REQ_ACCESS "RW" #define I2C_IC_INTR_MASK_M_RD_REQ_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_RD_REQ_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_TX_EMPTY // Description : This bit masks the R_TX_EMPTY interrupt in IC_INTR_STAT // register. // // Reset value: 0x1 // 0x0 -> TX_EMPTY interrupt is masked // 0x1 -> TX_EMPTY interrupt is unmasked #define I2C_IC_INTR_MASK_M_TX_EMPTY_RESET _u(0x1) #define I2C_IC_INTR_MASK_M_TX_EMPTY_BITS _u(0x00000010) #define I2C_IC_INTR_MASK_M_TX_EMPTY_MSB _u(4) #define I2C_IC_INTR_MASK_M_TX_EMPTY_LSB _u(4) #define I2C_IC_INTR_MASK_M_TX_EMPTY_ACCESS "RW" #define I2C_IC_INTR_MASK_M_TX_EMPTY_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_TX_EMPTY_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_TX_OVER // Description : This bit masks the R_TX_OVER interrupt in IC_INTR_STAT // register. // // Reset value: 0x1 // 0x0 -> TX_OVER interrupt is masked // 0x1 -> TX_OVER interrupt is unmasked #define I2C_IC_INTR_MASK_M_TX_OVER_RESET _u(0x1) #define I2C_IC_INTR_MASK_M_TX_OVER_BITS _u(0x00000008) #define I2C_IC_INTR_MASK_M_TX_OVER_MSB _u(3) #define I2C_IC_INTR_MASK_M_TX_OVER_LSB _u(3) #define I2C_IC_INTR_MASK_M_TX_OVER_ACCESS "RW" #define I2C_IC_INTR_MASK_M_TX_OVER_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_TX_OVER_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_RX_FULL // Description : This bit masks the R_RX_FULL interrupt in IC_INTR_STAT // register. // // Reset value: 0x1 // 0x0 -> RX_FULL interrupt is masked // 0x1 -> RX_FULL interrupt is unmasked #define I2C_IC_INTR_MASK_M_RX_FULL_RESET _u(0x1) #define I2C_IC_INTR_MASK_M_RX_FULL_BITS _u(0x00000004) #define I2C_IC_INTR_MASK_M_RX_FULL_MSB _u(2) #define I2C_IC_INTR_MASK_M_RX_FULL_LSB _u(2) #define I2C_IC_INTR_MASK_M_RX_FULL_ACCESS "RW" #define I2C_IC_INTR_MASK_M_RX_FULL_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_RX_FULL_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_RX_OVER // Description : This bit masks the R_RX_OVER interrupt in IC_INTR_STAT // register. // // Reset value: 0x1 // 0x0 -> RX_OVER interrupt is masked // 0x1 -> RX_OVER interrupt is unmasked #define I2C_IC_INTR_MASK_M_RX_OVER_RESET _u(0x1) #define I2C_IC_INTR_MASK_M_RX_OVER_BITS _u(0x00000002) #define I2C_IC_INTR_MASK_M_RX_OVER_MSB _u(1) #define I2C_IC_INTR_MASK_M_RX_OVER_LSB _u(1) #define I2C_IC_INTR_MASK_M_RX_OVER_ACCESS "RW" #define I2C_IC_INTR_MASK_M_RX_OVER_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_RX_OVER_VALUE_DISABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_INTR_MASK_M_RX_UNDER // Description : This bit masks the R_RX_UNDER interrupt in IC_INTR_STAT // register. // // Reset value: 0x1 // 0x0 -> RX_UNDER interrupt is masked // 0x1 -> RX_UNDER interrupt is unmasked #define I2C_IC_INTR_MASK_M_RX_UNDER_RESET _u(0x1) #define I2C_IC_INTR_MASK_M_RX_UNDER_BITS _u(0x00000001) #define I2C_IC_INTR_MASK_M_RX_UNDER_MSB _u(0) #define I2C_IC_INTR_MASK_M_RX_UNDER_LSB _u(0) #define I2C_IC_INTR_MASK_M_RX_UNDER_ACCESS "RW" #define I2C_IC_INTR_MASK_M_RX_UNDER_VALUE_ENABLED _u(0x0) #define I2C_IC_INTR_MASK_M_RX_UNDER_VALUE_DISABLED _u(0x1) // ============================================================================= // Register : I2C_IC_RAW_INTR_STAT // Description : I2C Raw Interrupt Status Register // // Unlike the IC_INTR_STAT register, these bits are not masked so // they always show the true status of the DW_apb_i2c. #define I2C_IC_RAW_INTR_STAT_OFFSET _u(0x00000034) #define I2C_IC_RAW_INTR_STAT_BITS _u(0x00001fff) #define I2C_IC_RAW_INTR_STAT_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_RESTART_DET // Description : Indicates whether a RESTART condition has occurred on the I2C // interface when DW_apb_i2c is operating in Slave mode and the // slave is being addressed. Enabled only when // IC_SLV_RESTART_DET_EN=1. // // Note: However, in high-speed mode or during a START BYTE // transfer, the RESTART comes before the address field as per the // I2C protocol. In this case, the slave is not the addressed // slave when the RESTART is issued, therefore DW_apb_i2c does not // generate the RESTART_DET interrupt. // // Reset value: 0x0 // 0x0 -> RESTART_DET interrupt is inactive // 0x1 -> RESTART_DET interrupt is active #define I2C_IC_RAW_INTR_STAT_RESTART_DET_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_RESTART_DET_BITS _u(0x00001000) #define I2C_IC_RAW_INTR_STAT_RESTART_DET_MSB _u(12) #define I2C_IC_RAW_INTR_STAT_RESTART_DET_LSB _u(12) #define I2C_IC_RAW_INTR_STAT_RESTART_DET_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_RESTART_DET_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_RESTART_DET_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_GEN_CALL // Description : Set only when a General Call address is received and it is // acknowledged. It stays set until it is cleared either by // disabling DW_apb_i2c or when the CPU reads bit 0 of the // IC_CLR_GEN_CALL register. DW_apb_i2c stores the received data // in the Rx buffer. // // Reset value: 0x0 // 0x0 -> GEN_CALL interrupt is inactive // 0x1 -> GEN_CALL interrupt is active #define I2C_IC_RAW_INTR_STAT_GEN_CALL_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_GEN_CALL_BITS _u(0x00000800) #define I2C_IC_RAW_INTR_STAT_GEN_CALL_MSB _u(11) #define I2C_IC_RAW_INTR_STAT_GEN_CALL_LSB _u(11) #define I2C_IC_RAW_INTR_STAT_GEN_CALL_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_GEN_CALL_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_GEN_CALL_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_START_DET // Description : Indicates whether a START or RESTART condition has occurred on // the I2C interface regardless of whether DW_apb_i2c is operating // in slave or master mode. // // Reset value: 0x0 // 0x0 -> START_DET interrupt is inactive // 0x1 -> START_DET interrupt is active #define I2C_IC_RAW_INTR_STAT_START_DET_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_START_DET_BITS _u(0x00000400) #define I2C_IC_RAW_INTR_STAT_START_DET_MSB _u(10) #define I2C_IC_RAW_INTR_STAT_START_DET_LSB _u(10) #define I2C_IC_RAW_INTR_STAT_START_DET_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_START_DET_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_START_DET_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_STOP_DET // Description : Indicates whether a STOP condition has occurred on the I2C // interface regardless of whether DW_apb_i2c is operating in // slave or master mode. // // In Slave Mode: - If IC_CON[7]=1'b1 (STOP_DET_IFADDRESSED), the // STOP_DET interrupt will be issued only if slave is addressed. // Note: During a general call address, this slave does not issue // a STOP_DET interrupt if STOP_DET_IF_ADDRESSED=1'b1, even if the // slave responds to the general call address by generating ACK. // The STOP_DET interrupt is generated only when the transmitted // address matches the slave address (SAR). - If IC_CON[7]=1'b0 // (STOP_DET_IFADDRESSED), the STOP_DET interrupt is issued // irrespective of whether it is being addressed. In Master Mode: // - If IC_CON[10]=1'b1 (STOP_DET_IF_MASTER_ACTIVE),the STOP_DET // interrupt will be issued only if Master is active. - If // IC_CON[10]=1'b0 (STOP_DET_IFADDRESSED),the STOP_DET interrupt // will be issued irrespective of whether master is active or not. // Reset value: 0x0 // 0x0 -> STOP_DET interrupt is inactive // 0x1 -> STOP_DET interrupt is active #define I2C_IC_RAW_INTR_STAT_STOP_DET_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_STOP_DET_BITS _u(0x00000200) #define I2C_IC_RAW_INTR_STAT_STOP_DET_MSB _u(9) #define I2C_IC_RAW_INTR_STAT_STOP_DET_LSB _u(9) #define I2C_IC_RAW_INTR_STAT_STOP_DET_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_STOP_DET_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_STOP_DET_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_ACTIVITY // Description : This bit captures DW_apb_i2c activity and stays set until it is // cleared. There are four ways to clear it: - Disabling the // DW_apb_i2c - Reading the IC_CLR_ACTIVITY register - Reading the // IC_CLR_INTR register - System reset Once this bit is set, it // stays set unless one of the four methods is used to clear it. // Even if the DW_apb_i2c module is idle, this bit remains set // until cleared, indicating that there was activity on the bus. // // Reset value: 0x0 // 0x0 -> RAW_INTR_ACTIVITY interrupt is inactive // 0x1 -> RAW_INTR_ACTIVITY interrupt is active #define I2C_IC_RAW_INTR_STAT_ACTIVITY_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_ACTIVITY_BITS _u(0x00000100) #define I2C_IC_RAW_INTR_STAT_ACTIVITY_MSB _u(8) #define I2C_IC_RAW_INTR_STAT_ACTIVITY_LSB _u(8) #define I2C_IC_RAW_INTR_STAT_ACTIVITY_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_ACTIVITY_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_ACTIVITY_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_RX_DONE // Description : When the DW_apb_i2c is acting as a slave-transmitter, this bit // is set to 1 if the master does not acknowledge a transmitted // byte. This occurs on the last byte of the transmission, // indicating that the transmission is done. // // Reset value: 0x0 // 0x0 -> RX_DONE interrupt is inactive // 0x1 -> RX_DONE interrupt is active #define I2C_IC_RAW_INTR_STAT_RX_DONE_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_RX_DONE_BITS _u(0x00000080) #define I2C_IC_RAW_INTR_STAT_RX_DONE_MSB _u(7) #define I2C_IC_RAW_INTR_STAT_RX_DONE_LSB _u(7) #define I2C_IC_RAW_INTR_STAT_RX_DONE_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_RX_DONE_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_RX_DONE_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_TX_ABRT // Description : This bit indicates if DW_apb_i2c, as an I2C transmitter, is // unable to complete the intended actions on the contents of the // transmit FIFO. This situation can occur both as an I2C master // or an I2C slave, and is referred to as a 'transmit abort'. When // this bit is set to 1, the IC_TX_ABRT_SOURCE register indicates // the reason why the transmit abort takes places. // // Note: The DW_apb_i2c flushes/resets/empties the TX_FIFO and // RX_FIFO whenever there is a transmit abort caused by any of the // events tracked by the IC_TX_ABRT_SOURCE register. The FIFOs // remains in this flushed state until the register IC_CLR_TX_ABRT // is read. Once this read is performed, the Tx FIFO is then ready // to accept more data bytes from the APB interface. // // Reset value: 0x0 // 0x0 -> TX_ABRT interrupt is inactive // 0x1 -> TX_ABRT interrupt is active #define I2C_IC_RAW_INTR_STAT_TX_ABRT_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_TX_ABRT_BITS _u(0x00000040) #define I2C_IC_RAW_INTR_STAT_TX_ABRT_MSB _u(6) #define I2C_IC_RAW_INTR_STAT_TX_ABRT_LSB _u(6) #define I2C_IC_RAW_INTR_STAT_TX_ABRT_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_TX_ABRT_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_TX_ABRT_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_RD_REQ // Description : This bit is set to 1 when DW_apb_i2c is acting as a slave and // another I2C master is attempting to read data from DW_apb_i2c. // The DW_apb_i2c holds the I2C bus in a wait state (SCL=0) until // this interrupt is serviced, which means that the slave has been // addressed by a remote master that is asking for data to be // transferred. The processor must respond to this interrupt and // then write the requested data to the IC_DATA_CMD register. This // bit is set to 0 just after the processor reads the // IC_CLR_RD_REQ register. // // Reset value: 0x0 // 0x0 -> RD_REQ interrupt is inactive // 0x1 -> RD_REQ interrupt is active #define I2C_IC_RAW_INTR_STAT_RD_REQ_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_RD_REQ_BITS _u(0x00000020) #define I2C_IC_RAW_INTR_STAT_RD_REQ_MSB _u(5) #define I2C_IC_RAW_INTR_STAT_RD_REQ_LSB _u(5) #define I2C_IC_RAW_INTR_STAT_RD_REQ_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_RD_REQ_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_RD_REQ_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_TX_EMPTY // Description : The behavior of the TX_EMPTY interrupt status differs based on // the TX_EMPTY_CTRL selection in the IC_CON register. - When // TX_EMPTY_CTRL = 0: This bit is set to 1 when the transmit // buffer is at or below the threshold value set in the IC_TX_TL // register. - When TX_EMPTY_CTRL = 1: This bit is set to 1 when // the transmit buffer is at or below the threshold value set in // the IC_TX_TL register and the transmission of the address/data // from the internal shift register for the most recently popped // command is completed. It is automatically cleared by hardware // when the buffer level goes above the threshold. When // IC_ENABLE[0] is set to 0, the TX FIFO is flushed and held in // reset. There the TX FIFO looks like it has no data within it, // so this bit is set to 1, provided there is activity in the // master or slave state machines. When there is no longer any // activity, then with ic_en=0, this bit is set to 0. // // Reset value: 0x0. // 0x0 -> TX_EMPTY interrupt is inactive // 0x1 -> TX_EMPTY interrupt is active #define I2C_IC_RAW_INTR_STAT_TX_EMPTY_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_TX_EMPTY_BITS _u(0x00000010) #define I2C_IC_RAW_INTR_STAT_TX_EMPTY_MSB _u(4) #define I2C_IC_RAW_INTR_STAT_TX_EMPTY_LSB _u(4) #define I2C_IC_RAW_INTR_STAT_TX_EMPTY_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_TX_EMPTY_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_TX_EMPTY_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_TX_OVER // Description : Set during transmit if the transmit buffer is filled to // IC_TX_BUFFER_DEPTH and the processor attempts to issue another // I2C command by writing to the IC_DATA_CMD register. When the // module is disabled, this bit keeps its level until the master // or slave state machines go into idle, and when ic_en goes to 0, // this interrupt is cleared. // // Reset value: 0x0 // 0x0 -> TX_OVER interrupt is inactive // 0x1 -> TX_OVER interrupt is active #define I2C_IC_RAW_INTR_STAT_TX_OVER_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_TX_OVER_BITS _u(0x00000008) #define I2C_IC_RAW_INTR_STAT_TX_OVER_MSB _u(3) #define I2C_IC_RAW_INTR_STAT_TX_OVER_LSB _u(3) #define I2C_IC_RAW_INTR_STAT_TX_OVER_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_TX_OVER_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_TX_OVER_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_RX_FULL // Description : Set when the receive buffer reaches or goes above the RX_TL // threshold in the IC_RX_TL register. It is automatically cleared // by hardware when buffer level goes below the threshold. If the // module is disabled (IC_ENABLE[0]=0), the RX FIFO is flushed and // held in reset; therefore the RX FIFO is not full. So this bit // is cleared once the IC_ENABLE bit 0 is programmed with a 0, // regardless of the activity that continues. // // Reset value: 0x0 // 0x0 -> RX_FULL interrupt is inactive // 0x1 -> RX_FULL interrupt is active #define I2C_IC_RAW_INTR_STAT_RX_FULL_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_RX_FULL_BITS _u(0x00000004) #define I2C_IC_RAW_INTR_STAT_RX_FULL_MSB _u(2) #define I2C_IC_RAW_INTR_STAT_RX_FULL_LSB _u(2) #define I2C_IC_RAW_INTR_STAT_RX_FULL_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_RX_FULL_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_RX_FULL_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_RX_OVER // Description : Set if the receive buffer is completely filled to // IC_RX_BUFFER_DEPTH and an additional byte is received from an // external I2C device. The DW_apb_i2c acknowledges this, but any // data bytes received after the FIFO is full are lost. If the // module is disabled (IC_ENABLE[0]=0), this bit keeps its level // until the master or slave state machines go into idle, and when // ic_en goes to 0, this interrupt is cleared. // // Note: If bit 9 of the IC_CON register (RX_FIFO_FULL_HLD_CTRL) // is programmed to HIGH, then the RX_OVER interrupt never occurs, // because the Rx FIFO never overflows. // // Reset value: 0x0 // 0x0 -> RX_OVER interrupt is inactive // 0x1 -> RX_OVER interrupt is active #define I2C_IC_RAW_INTR_STAT_RX_OVER_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_RX_OVER_BITS _u(0x00000002) #define I2C_IC_RAW_INTR_STAT_RX_OVER_MSB _u(1) #define I2C_IC_RAW_INTR_STAT_RX_OVER_LSB _u(1) #define I2C_IC_RAW_INTR_STAT_RX_OVER_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_RX_OVER_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_RX_OVER_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_RAW_INTR_STAT_RX_UNDER // Description : Set if the processor attempts to read the receive buffer when // it is empty by reading from the IC_DATA_CMD register. If the // module is disabled (IC_ENABLE[0]=0), this bit keeps its level // until the master or slave state machines go into idle, and when // ic_en goes to 0, this interrupt is cleared. // // Reset value: 0x0 // 0x0 -> RX_UNDER interrupt is inactive // 0x1 -> RX_UNDER interrupt is active #define I2C_IC_RAW_INTR_STAT_RX_UNDER_RESET _u(0x0) #define I2C_IC_RAW_INTR_STAT_RX_UNDER_BITS _u(0x00000001) #define I2C_IC_RAW_INTR_STAT_RX_UNDER_MSB _u(0) #define I2C_IC_RAW_INTR_STAT_RX_UNDER_LSB _u(0) #define I2C_IC_RAW_INTR_STAT_RX_UNDER_ACCESS "RO" #define I2C_IC_RAW_INTR_STAT_RX_UNDER_VALUE_INACTIVE _u(0x0) #define I2C_IC_RAW_INTR_STAT_RX_UNDER_VALUE_ACTIVE _u(0x1) // ============================================================================= // Register : I2C_IC_RX_TL // Description : I2C Receive FIFO Threshold Register #define I2C_IC_RX_TL_OFFSET _u(0x00000038) #define I2C_IC_RX_TL_BITS _u(0x000000ff) #define I2C_IC_RX_TL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_RX_TL_RX_TL // Description : Receive FIFO Threshold Level. // // Controls the level of entries (or above) that triggers the // RX_FULL interrupt (bit 2 in IC_RAW_INTR_STAT register). The // valid range is 0-255, with the additional restriction that // hardware does not allow this value to be set to a value larger // than the depth of the buffer. If an attempt is made to do that, // the actual value set will be the maximum depth of the buffer. A // value of 0 sets the threshold for 1 entry, and a value of 255 // sets the threshold for 256 entries. #define I2C_IC_RX_TL_RX_TL_RESET _u(0x00) #define I2C_IC_RX_TL_RX_TL_BITS _u(0x000000ff) #define I2C_IC_RX_TL_RX_TL_MSB _u(7) #define I2C_IC_RX_TL_RX_TL_LSB _u(0) #define I2C_IC_RX_TL_RX_TL_ACCESS "RW" // ============================================================================= // Register : I2C_IC_TX_TL // Description : I2C Transmit FIFO Threshold Register #define I2C_IC_TX_TL_OFFSET _u(0x0000003c) #define I2C_IC_TX_TL_BITS _u(0x000000ff) #define I2C_IC_TX_TL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_TL_TX_TL // Description : Transmit FIFO Threshold Level. // // Controls the level of entries (or below) that trigger the // TX_EMPTY interrupt (bit 4 in IC_RAW_INTR_STAT register). The // valid range is 0-255, with the additional restriction that it // may not be set to value larger than the depth of the buffer. If // an attempt is made to do that, the actual value set will be the // maximum depth of the buffer. A value of 0 sets the threshold // for 0 entries, and a value of 255 sets the threshold for 255 // entries. #define I2C_IC_TX_TL_TX_TL_RESET _u(0x00) #define I2C_IC_TX_TL_TX_TL_BITS _u(0x000000ff) #define I2C_IC_TX_TL_TX_TL_MSB _u(7) #define I2C_IC_TX_TL_TX_TL_LSB _u(0) #define I2C_IC_TX_TL_TX_TL_ACCESS "RW" // ============================================================================= // Register : I2C_IC_CLR_INTR // Description : Clear Combined and Individual Interrupt Register #define I2C_IC_CLR_INTR_OFFSET _u(0x00000040) #define I2C_IC_CLR_INTR_BITS _u(0x00000001) #define I2C_IC_CLR_INTR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_INTR_CLR_INTR // Description : Read this register to clear the combined interrupt, all // individual interrupts, and the IC_TX_ABRT_SOURCE register. This // bit does not clear hardware clearable interrupts but software // clearable interrupts. Refer to Bit 9 of the IC_TX_ABRT_SOURCE // register for an exception to clearing IC_TX_ABRT_SOURCE. // // Reset value: 0x0 #define I2C_IC_CLR_INTR_CLR_INTR_RESET _u(0x0) #define I2C_IC_CLR_INTR_CLR_INTR_BITS _u(0x00000001) #define I2C_IC_CLR_INTR_CLR_INTR_MSB _u(0) #define I2C_IC_CLR_INTR_CLR_INTR_LSB _u(0) #define I2C_IC_CLR_INTR_CLR_INTR_ACCESS "RO" // ============================================================================= // Register : I2C_IC_CLR_RX_UNDER // Description : Clear RX_UNDER Interrupt Register #define I2C_IC_CLR_RX_UNDER_OFFSET _u(0x00000044) #define I2C_IC_CLR_RX_UNDER_BITS _u(0x00000001) #define I2C_IC_CLR_RX_UNDER_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER // Description : Read this register to clear the RX_UNDER interrupt (bit 0) of // the IC_RAW_INTR_STAT register. // // Reset value: 0x0 #define I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER_RESET _u(0x0) #define I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER_BITS _u(0x00000001) #define I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER_MSB _u(0) #define I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER_LSB _u(0) #define I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER_ACCESS "RO" // ============================================================================= // Register : I2C_IC_CLR_RX_OVER // Description : Clear RX_OVER Interrupt Register #define I2C_IC_CLR_RX_OVER_OFFSET _u(0x00000048) #define I2C_IC_CLR_RX_OVER_BITS _u(0x00000001) #define I2C_IC_CLR_RX_OVER_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_RX_OVER_CLR_RX_OVER // Description : Read this register to clear the RX_OVER interrupt (bit 1) of // the IC_RAW_INTR_STAT register. // // Reset value: 0x0 #define I2C_IC_CLR_RX_OVER_CLR_RX_OVER_RESET _u(0x0) #define I2C_IC_CLR_RX_OVER_CLR_RX_OVER_BITS _u(0x00000001) #define I2C_IC_CLR_RX_OVER_CLR_RX_OVER_MSB _u(0) #define I2C_IC_CLR_RX_OVER_CLR_RX_OVER_LSB _u(0) #define I2C_IC_CLR_RX_OVER_CLR_RX_OVER_ACCESS "RO" // ============================================================================= // Register : I2C_IC_CLR_TX_OVER // Description : Clear TX_OVER Interrupt Register #define I2C_IC_CLR_TX_OVER_OFFSET _u(0x0000004c) #define I2C_IC_CLR_TX_OVER_BITS _u(0x00000001) #define I2C_IC_CLR_TX_OVER_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_TX_OVER_CLR_TX_OVER // Description : Read this register to clear the TX_OVER interrupt (bit 3) of // the IC_RAW_INTR_STAT register. // // Reset value: 0x0 #define I2C_IC_CLR_TX_OVER_CLR_TX_OVER_RESET _u(0x0) #define I2C_IC_CLR_TX_OVER_CLR_TX_OVER_BITS _u(0x00000001) #define I2C_IC_CLR_TX_OVER_CLR_TX_OVER_MSB _u(0) #define I2C_IC_CLR_TX_OVER_CLR_TX_OVER_LSB _u(0) #define I2C_IC_CLR_TX_OVER_CLR_TX_OVER_ACCESS "RO" // ============================================================================= // Register : I2C_IC_CLR_RD_REQ // Description : Clear RD_REQ Interrupt Register #define I2C_IC_CLR_RD_REQ_OFFSET _u(0x00000050) #define I2C_IC_CLR_RD_REQ_BITS _u(0x00000001) #define I2C_IC_CLR_RD_REQ_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_RD_REQ_CLR_RD_REQ // Description : Read this register to clear the RD_REQ interrupt (bit 5) of the // IC_RAW_INTR_STAT register. // // Reset value: 0x0 #define I2C_IC_CLR_RD_REQ_CLR_RD_REQ_RESET _u(0x0) #define I2C_IC_CLR_RD_REQ_CLR_RD_REQ_BITS _u(0x00000001) #define I2C_IC_CLR_RD_REQ_CLR_RD_REQ_MSB _u(0) #define I2C_IC_CLR_RD_REQ_CLR_RD_REQ_LSB _u(0) #define I2C_IC_CLR_RD_REQ_CLR_RD_REQ_ACCESS "RO" // ============================================================================= // Register : I2C_IC_CLR_TX_ABRT // Description : Clear TX_ABRT Interrupt Register #define I2C_IC_CLR_TX_ABRT_OFFSET _u(0x00000054) #define I2C_IC_CLR_TX_ABRT_BITS _u(0x00000001) #define I2C_IC_CLR_TX_ABRT_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT // Description : Read this register to clear the TX_ABRT interrupt (bit 6) of // the IC_RAW_INTR_STAT register, and the IC_TX_ABRT_SOURCE // register. This also releases the TX FIFO from the flushed/reset // state, allowing more writes to the TX FIFO. Refer to Bit 9 of // the IC_TX_ABRT_SOURCE register for an exception to clearing // IC_TX_ABRT_SOURCE. // // Reset value: 0x0 #define I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT_RESET _u(0x0) #define I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT_BITS _u(0x00000001) #define I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT_MSB _u(0) #define I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT_LSB _u(0) #define I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT_ACCESS "RO" // ============================================================================= // Register : I2C_IC_CLR_RX_DONE // Description : Clear RX_DONE Interrupt Register #define I2C_IC_CLR_RX_DONE_OFFSET _u(0x00000058) #define I2C_IC_CLR_RX_DONE_BITS _u(0x00000001) #define I2C_IC_CLR_RX_DONE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_RX_DONE_CLR_RX_DONE // Description : Read this register to clear the RX_DONE interrupt (bit 7) of // the IC_RAW_INTR_STAT register. // // Reset value: 0x0 #define I2C_IC_CLR_RX_DONE_CLR_RX_DONE_RESET _u(0x0) #define I2C_IC_CLR_RX_DONE_CLR_RX_DONE_BITS _u(0x00000001) #define I2C_IC_CLR_RX_DONE_CLR_RX_DONE_MSB _u(0) #define I2C_IC_CLR_RX_DONE_CLR_RX_DONE_LSB _u(0) #define I2C_IC_CLR_RX_DONE_CLR_RX_DONE_ACCESS "RO" // ============================================================================= // Register : I2C_IC_CLR_ACTIVITY // Description : Clear ACTIVITY Interrupt Register #define I2C_IC_CLR_ACTIVITY_OFFSET _u(0x0000005c) #define I2C_IC_CLR_ACTIVITY_BITS _u(0x00000001) #define I2C_IC_CLR_ACTIVITY_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY // Description : Reading this register clears the ACTIVITY interrupt if the I2C // is not active anymore. If the I2C module is still active on the // bus, the ACTIVITY interrupt bit continues to be set. It is // automatically cleared by hardware if the module is disabled and // if there is no further activity on the bus. The value read from // this register to get status of the ACTIVITY interrupt (bit 8) // of the IC_RAW_INTR_STAT register. // // Reset value: 0x0 #define I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY_RESET _u(0x0) #define I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY_BITS _u(0x00000001) #define I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY_MSB _u(0) #define I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY_LSB _u(0) #define I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY_ACCESS "RO" // ============================================================================= // Register : I2C_IC_CLR_STOP_DET // Description : Clear STOP_DET Interrupt Register #define I2C_IC_CLR_STOP_DET_OFFSET _u(0x00000060) #define I2C_IC_CLR_STOP_DET_BITS _u(0x00000001) #define I2C_IC_CLR_STOP_DET_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_STOP_DET_CLR_STOP_DET // Description : Read this register to clear the STOP_DET interrupt (bit 9) of // the IC_RAW_INTR_STAT register. // // Reset value: 0x0 #define I2C_IC_CLR_STOP_DET_CLR_STOP_DET_RESET _u(0x0) #define I2C_IC_CLR_STOP_DET_CLR_STOP_DET_BITS _u(0x00000001) #define I2C_IC_CLR_STOP_DET_CLR_STOP_DET_MSB _u(0) #define I2C_IC_CLR_STOP_DET_CLR_STOP_DET_LSB _u(0) #define I2C_IC_CLR_STOP_DET_CLR_STOP_DET_ACCESS "RO" // ============================================================================= // Register : I2C_IC_CLR_START_DET // Description : Clear START_DET Interrupt Register #define I2C_IC_CLR_START_DET_OFFSET _u(0x00000064) #define I2C_IC_CLR_START_DET_BITS _u(0x00000001) #define I2C_IC_CLR_START_DET_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_START_DET_CLR_START_DET // Description : Read this register to clear the START_DET interrupt (bit 10) of // the IC_RAW_INTR_STAT register. // // Reset value: 0x0 #define I2C_IC_CLR_START_DET_CLR_START_DET_RESET _u(0x0) #define I2C_IC_CLR_START_DET_CLR_START_DET_BITS _u(0x00000001) #define I2C_IC_CLR_START_DET_CLR_START_DET_MSB _u(0) #define I2C_IC_CLR_START_DET_CLR_START_DET_LSB _u(0) #define I2C_IC_CLR_START_DET_CLR_START_DET_ACCESS "RO" // ============================================================================= // Register : I2C_IC_CLR_GEN_CALL // Description : Clear GEN_CALL Interrupt Register #define I2C_IC_CLR_GEN_CALL_OFFSET _u(0x00000068) #define I2C_IC_CLR_GEN_CALL_BITS _u(0x00000001) #define I2C_IC_CLR_GEN_CALL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL // Description : Read this register to clear the GEN_CALL interrupt (bit 11) of // IC_RAW_INTR_STAT register. // // Reset value: 0x0 #define I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL_RESET _u(0x0) #define I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL_BITS _u(0x00000001) #define I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL_MSB _u(0) #define I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL_LSB _u(0) #define I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL_ACCESS "RO" // ============================================================================= // Register : I2C_IC_ENABLE // Description : I2C Enable Register #define I2C_IC_ENABLE_OFFSET _u(0x0000006c) #define I2C_IC_ENABLE_BITS _u(0x00000007) #define I2C_IC_ENABLE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_ENABLE_TX_CMD_BLOCK // Description : In Master mode: - 1'b1: Blocks the transmission of data on I2C // bus even if Tx FIFO has data to transmit. - 1'b0: The // transmission of data starts on I2C bus automatically, as soon // as the first data is available in the Tx FIFO. Note: To block // the execution of Master commands, set the TX_CMD_BLOCK bit only // when Tx FIFO is empty (IC_STATUS[2]==1) and Master is in Idle // state (IC_STATUS[5] == 0). Any further commands put in the Tx // FIFO are not executed until TX_CMD_BLOCK bit is unset. Reset // value: IC_TX_CMD_BLOCK_DEFAULT // 0x0 -> Tx Command execution not blocked // 0x1 -> Tx Command execution blocked #define I2C_IC_ENABLE_TX_CMD_BLOCK_RESET _u(0x0) #define I2C_IC_ENABLE_TX_CMD_BLOCK_BITS _u(0x00000004) #define I2C_IC_ENABLE_TX_CMD_BLOCK_MSB _u(2) #define I2C_IC_ENABLE_TX_CMD_BLOCK_LSB _u(2) #define I2C_IC_ENABLE_TX_CMD_BLOCK_ACCESS "RW" #define I2C_IC_ENABLE_TX_CMD_BLOCK_VALUE_NOT_BLOCKED _u(0x0) #define I2C_IC_ENABLE_TX_CMD_BLOCK_VALUE_BLOCKED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_ENABLE_ABORT // Description : When set, the controller initiates the transfer abort. - 0: // ABORT not initiated or ABORT done - 1: ABORT operation in // progress The software can abort the I2C transfer in master mode // by setting this bit. The software can set this bit only when // ENABLE is already set; otherwise, the controller ignores any // write to ABORT bit. The software cannot clear the ABORT bit // once set. In response to an ABORT, the controller issues a STOP // and flushes the Tx FIFO after completing the current transfer, // then sets the TX_ABORT interrupt after the abort operation. The // ABORT bit is cleared automatically after the abort operation. // // For a detailed description on how to abort I2C transfers, refer // to 'Aborting I2C Transfers'. // // Reset value: 0x0 // 0x0 -> ABORT operation not in progress // 0x1 -> ABORT operation in progress #define I2C_IC_ENABLE_ABORT_RESET _u(0x0) #define I2C_IC_ENABLE_ABORT_BITS _u(0x00000002) #define I2C_IC_ENABLE_ABORT_MSB _u(1) #define I2C_IC_ENABLE_ABORT_LSB _u(1) #define I2C_IC_ENABLE_ABORT_ACCESS "RW" #define I2C_IC_ENABLE_ABORT_VALUE_DISABLE _u(0x0) #define I2C_IC_ENABLE_ABORT_VALUE_ENABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_ENABLE_ENABLE // Description : Controls whether the DW_apb_i2c is enabled. - 0: Disables // DW_apb_i2c (TX and RX FIFOs are held in an erased state) - 1: // Enables DW_apb_i2c Software can disable DW_apb_i2c while it is // active. However, it is important that care be taken to ensure // that DW_apb_i2c is disabled properly. A recommended procedure // is described in 'Disabling DW_apb_i2c'. // // When DW_apb_i2c is disabled, the following occurs: - The TX // FIFO and RX FIFO get flushed. - Status bits in the IC_INTR_STAT // register are still active until DW_apb_i2c goes into IDLE // state. If the module is transmitting, it stops as well as // deletes the contents of the transmit buffer after the current // transfer is complete. If the module is receiving, the // DW_apb_i2c stops the current transfer at the end of the current // byte and does not acknowledge the transfer. // // In systems with asynchronous pclk and ic_clk when IC_CLK_TYPE // parameter set to asynchronous (1), there is a two ic_clk delay // when enabling or disabling the DW_apb_i2c. For a detailed // description on how to disable DW_apb_i2c, refer to 'Disabling // DW_apb_i2c' // // Reset value: 0x0 // 0x0 -> I2C is disabled // 0x1 -> I2C is enabled #define I2C_IC_ENABLE_ENABLE_RESET _u(0x0) #define I2C_IC_ENABLE_ENABLE_BITS _u(0x00000001) #define I2C_IC_ENABLE_ENABLE_MSB _u(0) #define I2C_IC_ENABLE_ENABLE_LSB _u(0) #define I2C_IC_ENABLE_ENABLE_ACCESS "RW" #define I2C_IC_ENABLE_ENABLE_VALUE_DISABLED _u(0x0) #define I2C_IC_ENABLE_ENABLE_VALUE_ENABLED _u(0x1) // ============================================================================= // Register : I2C_IC_STATUS // Description : I2C Status Register // // This is a read-only register used to indicate the current // transfer status and FIFO status. The status register may be // read at any time. None of the bits in this register request an // interrupt. // // When the I2C is disabled by writing 0 in bit 0 of the IC_ENABLE // register: - Bits 1 and 2 are set to 1 - Bits 3 and 10 are set // to 0 When the master or slave state machines goes to idle and // ic_en=0: - Bits 5 and 6 are set to 0 #define I2C_IC_STATUS_OFFSET _u(0x00000070) #define I2C_IC_STATUS_BITS _u(0x0000007f) #define I2C_IC_STATUS_RESET _u(0x00000006) // ----------------------------------------------------------------------------- // Field : I2C_IC_STATUS_SLV_ACTIVITY // Description : Slave FSM Activity Status. When the Slave Finite State Machine // (FSM) is not in the IDLE state, this bit is set. - 0: Slave FSM // is in IDLE state so the Slave part of DW_apb_i2c is not Active // - 1: Slave FSM is not in IDLE state so the Slave part of // DW_apb_i2c is Active Reset value: 0x0 // 0x0 -> Slave is idle // 0x1 -> Slave not idle #define I2C_IC_STATUS_SLV_ACTIVITY_RESET _u(0x0) #define I2C_IC_STATUS_SLV_ACTIVITY_BITS _u(0x00000040) #define I2C_IC_STATUS_SLV_ACTIVITY_MSB _u(6) #define I2C_IC_STATUS_SLV_ACTIVITY_LSB _u(6) #define I2C_IC_STATUS_SLV_ACTIVITY_ACCESS "RO" #define I2C_IC_STATUS_SLV_ACTIVITY_VALUE_IDLE _u(0x0) #define I2C_IC_STATUS_SLV_ACTIVITY_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_STATUS_MST_ACTIVITY // Description : Master FSM Activity Status. When the Master Finite State // Machine (FSM) is not in the IDLE state, this bit is set. - 0: // Master FSM is in IDLE state so the Master part of DW_apb_i2c is // not Active - 1: Master FSM is not in IDLE state so the Master // part of DW_apb_i2c is Active Note: IC_STATUS[0]-that is, // ACTIVITY bit-is the OR of SLV_ACTIVITY and MST_ACTIVITY bits. // // Reset value: 0x0 // 0x0 -> Master is idle // 0x1 -> Master not idle #define I2C_IC_STATUS_MST_ACTIVITY_RESET _u(0x0) #define I2C_IC_STATUS_MST_ACTIVITY_BITS _u(0x00000020) #define I2C_IC_STATUS_MST_ACTIVITY_MSB _u(5) #define I2C_IC_STATUS_MST_ACTIVITY_LSB _u(5) #define I2C_IC_STATUS_MST_ACTIVITY_ACCESS "RO" #define I2C_IC_STATUS_MST_ACTIVITY_VALUE_IDLE _u(0x0) #define I2C_IC_STATUS_MST_ACTIVITY_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_STATUS_RFF // Description : Receive FIFO Completely Full. When the receive FIFO is // completely full, this bit is set. When the receive FIFO // contains one or more empty location, this bit is cleared. - 0: // Receive FIFO is not full - 1: Receive FIFO is full Reset value: // 0x0 // 0x0 -> Rx FIFO not full // 0x1 -> Rx FIFO is full #define I2C_IC_STATUS_RFF_RESET _u(0x0) #define I2C_IC_STATUS_RFF_BITS _u(0x00000010) #define I2C_IC_STATUS_RFF_MSB _u(4) #define I2C_IC_STATUS_RFF_LSB _u(4) #define I2C_IC_STATUS_RFF_ACCESS "RO" #define I2C_IC_STATUS_RFF_VALUE_NOT_FULL _u(0x0) #define I2C_IC_STATUS_RFF_VALUE_FULL _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_STATUS_RFNE // Description : Receive FIFO Not Empty. This bit is set when the receive FIFO // contains one or more entries; it is cleared when the receive // FIFO is empty. - 0: Receive FIFO is empty - 1: Receive FIFO is // not empty Reset value: 0x0 // 0x0 -> Rx FIFO is empty // 0x1 -> Rx FIFO not empty #define I2C_IC_STATUS_RFNE_RESET _u(0x0) #define I2C_IC_STATUS_RFNE_BITS _u(0x00000008) #define I2C_IC_STATUS_RFNE_MSB _u(3) #define I2C_IC_STATUS_RFNE_LSB _u(3) #define I2C_IC_STATUS_RFNE_ACCESS "RO" #define I2C_IC_STATUS_RFNE_VALUE_EMPTY _u(0x0) #define I2C_IC_STATUS_RFNE_VALUE_NOT_EMPTY _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_STATUS_TFE // Description : Transmit FIFO Completely Empty. When the transmit FIFO is // completely empty, this bit is set. When it contains one or more // valid entries, this bit is cleared. This bit field does not // request an interrupt. - 0: Transmit FIFO is not empty - 1: // Transmit FIFO is empty Reset value: 0x1 // 0x0 -> Tx FIFO not empty // 0x1 -> Tx FIFO is empty #define I2C_IC_STATUS_TFE_RESET _u(0x1) #define I2C_IC_STATUS_TFE_BITS _u(0x00000004) #define I2C_IC_STATUS_TFE_MSB _u(2) #define I2C_IC_STATUS_TFE_LSB _u(2) #define I2C_IC_STATUS_TFE_ACCESS "RO" #define I2C_IC_STATUS_TFE_VALUE_NON_EMPTY _u(0x0) #define I2C_IC_STATUS_TFE_VALUE_EMPTY _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_STATUS_TFNF // Description : Transmit FIFO Not Full. Set when the transmit FIFO contains one // or more empty locations, and is cleared when the FIFO is full. // - 0: Transmit FIFO is full - 1: Transmit FIFO is not full Reset // value: 0x1 // 0x0 -> Tx FIFO is full // 0x1 -> Tx FIFO not full #define I2C_IC_STATUS_TFNF_RESET _u(0x1) #define I2C_IC_STATUS_TFNF_BITS _u(0x00000002) #define I2C_IC_STATUS_TFNF_MSB _u(1) #define I2C_IC_STATUS_TFNF_LSB _u(1) #define I2C_IC_STATUS_TFNF_ACCESS "RO" #define I2C_IC_STATUS_TFNF_VALUE_FULL _u(0x0) #define I2C_IC_STATUS_TFNF_VALUE_NOT_FULL _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_STATUS_ACTIVITY // Description : I2C Activity Status. Reset value: 0x0 // 0x0 -> I2C is idle // 0x1 -> I2C is active #define I2C_IC_STATUS_ACTIVITY_RESET _u(0x0) #define I2C_IC_STATUS_ACTIVITY_BITS _u(0x00000001) #define I2C_IC_STATUS_ACTIVITY_MSB _u(0) #define I2C_IC_STATUS_ACTIVITY_LSB _u(0) #define I2C_IC_STATUS_ACTIVITY_ACCESS "RO" #define I2C_IC_STATUS_ACTIVITY_VALUE_INACTIVE _u(0x0) #define I2C_IC_STATUS_ACTIVITY_VALUE_ACTIVE _u(0x1) // ============================================================================= // Register : I2C_IC_TXFLR // Description : I2C Transmit FIFO Level Register This register contains the // number of valid data entries in the transmit FIFO buffer. It is // cleared whenever: - The I2C is disabled - There is a transmit // abort - that is, TX_ABRT bit is set in the IC_RAW_INTR_STAT // register - The slave bulk transmit mode is aborted The register // increments whenever data is placed into the transmit FIFO and // decrements when data is taken from the transmit FIFO. #define I2C_IC_TXFLR_OFFSET _u(0x00000074) #define I2C_IC_TXFLR_BITS _u(0x0000001f) #define I2C_IC_TXFLR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_TXFLR_TXFLR // Description : Transmit FIFO Level. Contains the number of valid data entries // in the transmit FIFO. // // Reset value: 0x0 #define I2C_IC_TXFLR_TXFLR_RESET _u(0x00) #define I2C_IC_TXFLR_TXFLR_BITS _u(0x0000001f) #define I2C_IC_TXFLR_TXFLR_MSB _u(4) #define I2C_IC_TXFLR_TXFLR_LSB _u(0) #define I2C_IC_TXFLR_TXFLR_ACCESS "RO" // ============================================================================= // Register : I2C_IC_RXFLR // Description : I2C Receive FIFO Level Register This register contains the // number of valid data entries in the receive FIFO buffer. It is // cleared whenever: - The I2C is disabled - Whenever there is a // transmit abort caused by any of the events tracked in // IC_TX_ABRT_SOURCE The register increments whenever data is // placed into the receive FIFO and decrements when data is taken // from the receive FIFO. #define I2C_IC_RXFLR_OFFSET _u(0x00000078) #define I2C_IC_RXFLR_BITS _u(0x0000001f) #define I2C_IC_RXFLR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_RXFLR_RXFLR // Description : Receive FIFO Level. Contains the number of valid data entries // in the receive FIFO. // // Reset value: 0x0 #define I2C_IC_RXFLR_RXFLR_RESET _u(0x00) #define I2C_IC_RXFLR_RXFLR_BITS _u(0x0000001f) #define I2C_IC_RXFLR_RXFLR_MSB _u(4) #define I2C_IC_RXFLR_RXFLR_LSB _u(0) #define I2C_IC_RXFLR_RXFLR_ACCESS "RO" // ============================================================================= // Register : I2C_IC_SDA_HOLD // Description : I2C SDA Hold Time Length Register // // The bits [15:0] of this register are used to control the hold // time of SDA during transmit in both slave and master mode // (after SCL goes from HIGH to LOW). // // The bits [23:16] of this register are used to extend the SDA // transition (if any) whenever SCL is HIGH in the receiver in // either master or slave mode. // // Writes to this register succeed only when IC_ENABLE[0]=0. // // The values in this register are in units of ic_clk period. The // value programmed in IC_SDA_TX_HOLD must be greater than the // minimum hold time in each mode (one cycle in master mode, seven // cycles in slave mode) for the value to be implemented. // // The programmed SDA hold time during transmit (IC_SDA_TX_HOLD) // cannot exceed at any time the duration of the low part of scl. // Therefore the programmed value cannot be larger than // N_SCL_LOW-2, where N_SCL_LOW is the duration of the low part of // the scl period measured in ic_clk cycles. #define I2C_IC_SDA_HOLD_OFFSET _u(0x0000007c) #define I2C_IC_SDA_HOLD_BITS _u(0x00ffffff) #define I2C_IC_SDA_HOLD_RESET _u(0x00000001) // ----------------------------------------------------------------------------- // Field : I2C_IC_SDA_HOLD_IC_SDA_RX_HOLD // Description : Sets the required SDA hold time in units of ic_clk period, when // DW_apb_i2c acts as a receiver. // // Reset value: IC_DEFAULT_SDA_HOLD[23:16]. #define I2C_IC_SDA_HOLD_IC_SDA_RX_HOLD_RESET _u(0x00) #define I2C_IC_SDA_HOLD_IC_SDA_RX_HOLD_BITS _u(0x00ff0000) #define I2C_IC_SDA_HOLD_IC_SDA_RX_HOLD_MSB _u(23) #define I2C_IC_SDA_HOLD_IC_SDA_RX_HOLD_LSB _u(16) #define I2C_IC_SDA_HOLD_IC_SDA_RX_HOLD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : I2C_IC_SDA_HOLD_IC_SDA_TX_HOLD // Description : Sets the required SDA hold time in units of ic_clk period, when // DW_apb_i2c acts as a transmitter. // // Reset value: IC_DEFAULT_SDA_HOLD[15:0]. #define I2C_IC_SDA_HOLD_IC_SDA_TX_HOLD_RESET _u(0x0001) #define I2C_IC_SDA_HOLD_IC_SDA_TX_HOLD_BITS _u(0x0000ffff) #define I2C_IC_SDA_HOLD_IC_SDA_TX_HOLD_MSB _u(15) #define I2C_IC_SDA_HOLD_IC_SDA_TX_HOLD_LSB _u(0) #define I2C_IC_SDA_HOLD_IC_SDA_TX_HOLD_ACCESS "RW" // ============================================================================= // Register : I2C_IC_TX_ABRT_SOURCE // Description : I2C Transmit Abort Source Register // // This register has 32 bits that indicate the source of the // TX_ABRT bit. Except for Bit 9, this register is cleared // whenever the IC_CLR_TX_ABRT register or the IC_CLR_INTR // register is read. To clear Bit 9, the source of the // ABRT_SBYTE_NORSTRT must be fixed first; RESTART must be enabled // (IC_CON[5]=1), the SPECIAL bit must be cleared (IC_TAR[11]), or // the GC_OR_START bit must be cleared (IC_TAR[10]). // // Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this // bit can be cleared in the same manner as other bits in this // register. If the source of the ABRT_SBYTE_NORSTRT is not fixed // before attempting to clear this bit, Bit 9 clears for one cycle // and is then re-asserted. #define I2C_IC_TX_ABRT_SOURCE_OFFSET _u(0x00000080) #define I2C_IC_TX_ABRT_SOURCE_BITS _u(0xff81ffff) #define I2C_IC_TX_ABRT_SOURCE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_TX_FLUSH_CNT // Description : This field indicates the number of Tx FIFO Data Commands which // are flushed due to TX_ABRT interrupt. It is cleared whenever // I2C is disabled. // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter #define I2C_IC_TX_ABRT_SOURCE_TX_FLUSH_CNT_RESET _u(0x000) #define I2C_IC_TX_ABRT_SOURCE_TX_FLUSH_CNT_BITS _u(0xff800000) #define I2C_IC_TX_ABRT_SOURCE_TX_FLUSH_CNT_MSB _u(31) #define I2C_IC_TX_ABRT_SOURCE_TX_FLUSH_CNT_LSB _u(23) #define I2C_IC_TX_ABRT_SOURCE_TX_FLUSH_CNT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_USER_ABRT // Description : This is a master-mode-only bit. Master has detected the // transfer abort (IC_ENABLE[1]) // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter // 0x0 -> Transfer abort detected by master- scenario not present // 0x1 -> Transfer abort detected by master #define I2C_IC_TX_ABRT_SOURCE_ABRT_USER_ABRT_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_USER_ABRT_BITS _u(0x00010000) #define I2C_IC_TX_ABRT_SOURCE_ABRT_USER_ABRT_MSB _u(16) #define I2C_IC_TX_ABRT_SOURCE_ABRT_USER_ABRT_LSB _u(16) #define I2C_IC_TX_ABRT_SOURCE_ABRT_USER_ABRT_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_USER_ABRT_VALUE_ABRT_USER_ABRT_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_USER_ABRT_VALUE_ABRT_USER_ABRT_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX // Description : 1: When the processor side responds to a slave mode request for // data to be transmitted to a remote master and user writes a 1 // in CMD (bit 8) of IC_DATA_CMD register. // // Reset value: 0x0 // // Role of DW_apb_i2c: Slave-Transmitter // 0x0 -> Slave trying to transmit to remote master in read mode- // scenario not present // 0x1 -> Slave trying to transmit to remote master in read mode #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_BITS _u(0x00008000) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_MSB _u(15) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_LSB _u(15) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_VALUE_ABRT_SLVRD_INTX_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_VALUE_ABRT_SLVRD_INTX_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST // Description : This field indicates that a Slave has lost the bus while // transmitting data to a remote master. IC_TX_ABRT_SOURCE[12] is // set at the same time. Note: Even though the slave never 'owns' // the bus, something could go wrong on the bus. This is a fail // safe check. For instance, during a data transmission at the // low-to-high transition of SCL, if what is on the data bus is // not what is supposed to be transmitted, then DW_apb_i2c no // longer own the bus. // // Reset value: 0x0 // // Role of DW_apb_i2c: Slave-Transmitter // 0x0 -> Slave lost arbitration to remote master- scenario not // present // 0x1 -> Slave lost arbitration to remote master #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_BITS _u(0x00004000) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_MSB _u(14) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_LSB _u(14) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_VALUE_ABRT_SLV_ARBLOST_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_VALUE_ABRT_SLV_ARBLOST_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO // Description : This field specifies that the Slave has received a read command // and some data exists in the TX FIFO, so the slave issues a // TX_ABRT interrupt to flush old data in TX FIFO. // // Reset value: 0x0 // // Role of DW_apb_i2c: Slave-Transmitter // 0x0 -> Slave flushes existing data in TX-FIFO upon getting read // command- scenario not present // 0x1 -> Slave flushes existing data in TX-FIFO upon getting read // command #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_BITS _u(0x00002000) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_MSB _u(13) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_LSB _u(13) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_VALUE_ABRT_SLVFLUSH_TXFIFO_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_VALUE_ABRT_SLVFLUSH_TXFIFO_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ARB_LOST // Description : This field specifies that the Master has lost arbitration, or // if IC_TX_ABRT_SOURCE[14] is also set, then the slave // transmitter has lost arbitration. // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter // 0x0 -> Master or Slave-Transmitter lost arbitration- scenario // not present // 0x1 -> Master or Slave-Transmitter lost arbitration #define I2C_IC_TX_ABRT_SOURCE_ARB_LOST_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ARB_LOST_BITS _u(0x00001000) #define I2C_IC_TX_ABRT_SOURCE_ARB_LOST_MSB _u(12) #define I2C_IC_TX_ABRT_SOURCE_ARB_LOST_LSB _u(12) #define I2C_IC_TX_ABRT_SOURCE_ARB_LOST_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ARB_LOST_VALUE_ABRT_LOST_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ARB_LOST_VALUE_ABRT_LOST_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS // Description : This field indicates that the User tries to initiate a Master // operation with the Master mode disabled. // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter or Master-Receiver // 0x0 -> User initiating master operation when MASTER disabled- // scenario not present // 0x1 -> User initiating master operation when MASTER disabled #define I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_BITS _u(0x00000800) #define I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_MSB _u(11) #define I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_LSB _u(11) #define I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_VALUE_ABRT_MASTER_DIS_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_VALUE_ABRT_MASTER_DIS_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT // Description : This field indicates that the restart is disabled // (IC_RESTART_EN bit (IC_CON[5]) =0) and the master sends a read // command in 10-bit addressing mode. // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Receiver // 0x0 -> Master not trying to read in 10Bit addressing mode when // RESTART disabled // 0x1 -> Master trying to read in 10Bit addressing mode when // RESTART disabled #define I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_BITS _u(0x00000400) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_MSB _u(10) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_LSB _u(10) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_VALUE_ABRT_10B_RD_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_VALUE_ABRT_10B_RD_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT // Description : To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be // fixed first; restart must be enabled (IC_CON[5]=1), the SPECIAL // bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must // be cleared (IC_TAR[10]). Once the source of the // ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in // the same manner as other bits in this register. If the source // of the ABRT_SBYTE_NORSTRT is not fixed before attempting to // clear this bit, bit 9 clears for one cycle and then gets // reasserted. When this field is set to 1, the restart is // disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is // trying to send a START Byte. // // Reset value: 0x0 // // Role of DW_apb_i2c: Master // 0x0 -> User trying to send START byte when RESTART disabled- // scenario not present // 0x1 -> User trying to send START byte when RESTART disabled #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_BITS _u(0x00000200) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_MSB _u(9) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_LSB _u(9) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_VALUE_ABRT_SBYTE_NORSTRT_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_VALUE_ABRT_SBYTE_NORSTRT_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT // Description : This field indicates that the restart is disabled // (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to // use the master to transfer data in High Speed mode. // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter or Master-Receiver // 0x0 -> User trying to switch Master to HS mode when RESTART // disabled- scenario not present // 0x1 -> User trying to switch Master to HS mode when RESTART // disabled #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_BITS _u(0x00000100) #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_MSB _u(8) #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_LSB _u(8) #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_VALUE_ABRT_HS_NORSTRT_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_VALUE_ABRT_HS_NORSTRT_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET // Description : This field indicates that the Master has sent a START Byte and // the START Byte was acknowledged (wrong behavior). // // Reset value: 0x0 // // Role of DW_apb_i2c: Master // 0x0 -> ACK detected for START byte- scenario not present // 0x1 -> ACK detected for START byte #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_BITS _u(0x00000080) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_MSB _u(7) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_LSB _u(7) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_VALUE_ABRT_SBYTE_ACKDET_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_VALUE_ABRT_SBYTE_ACKDET_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET // Description : This field indicates that the Master is in High Speed mode and // the High Speed Master code was acknowledged (wrong behavior). // // Reset value: 0x0 // // Role of DW_apb_i2c: Master // 0x0 -> HS Master code ACKed in HS Mode- scenario not present // 0x1 -> HS Master code ACKed in HS Mode #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_BITS _u(0x00000040) #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_MSB _u(6) #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_LSB _u(6) #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_VALUE_ABRT_HS_ACK_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_VALUE_ABRT_HS_ACK_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ // Description : This field indicates that DW_apb_i2c in the master mode has // sent a General Call but the user programmed the byte following // the General Call to be a read from the bus (IC_DATA_CMD[9] is // set to 1). // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter // 0x0 -> GCALL is followed by read from bus-scenario not present // 0x1 -> GCALL is followed by read from bus #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_BITS _u(0x00000020) #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_MSB _u(5) #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_LSB _u(5) #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_VALUE_ABRT_GCALL_READ_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_VALUE_ABRT_GCALL_READ_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK // Description : This field indicates that DW_apb_i2c in master mode has sent a // General Call and no slave on the bus acknowledged the General // Call. // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter // 0x0 -> GCALL not ACKed by any slave-scenario not present // 0x1 -> GCALL not ACKed by any slave #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_BITS _u(0x00000010) #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_MSB _u(4) #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_LSB _u(4) #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_VALUE_ABRT_GCALL_NOACK_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_VALUE_ABRT_GCALL_NOACK_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK // Description : This field indicates the master-mode only bit. When the master // receives an acknowledgement for the address, but when it sends // data byte(s) following the address, it did not receive an // acknowledge from the remote slave(s). // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter // 0x0 -> Transmitted data non-ACKed by addressed slave-scenario // not present // 0x1 -> Transmitted data not ACKed by addressed slave #define I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_BITS _u(0x00000008) #define I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_MSB _u(3) #define I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_LSB _u(3) #define I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_VALUE_ABRT_TXDATA_NOACK_VOID _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_VALUE_ABRT_TXDATA_NOACK_GENERATED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK // Description : This field indicates that the Master is in 10-bit address mode // and that the second address byte of the 10-bit address was not // acknowledged by any slave. // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter or Master-Receiver // 0x0 -> This abort is not generated // 0x1 -> Byte 2 of 10Bit Address not ACKed by any slave #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_BITS _u(0x00000004) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_MSB _u(2) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_LSB _u(2) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_VALUE_INACTIVE _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK // Description : This field indicates that the Master is in 10-bit address mode // and the first 10-bit address byte was not acknowledged by any // slave. // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter or Master-Receiver // 0x0 -> This abort is not generated // 0x1 -> Byte 1 of 10Bit Address not ACKed by any slave #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_BITS _u(0x00000002) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_MSB _u(1) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_LSB _u(1) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_VALUE_INACTIVE _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK // Description : This field indicates that the Master is in 7-bit addressing // mode and the address sent was not acknowledged by any slave. // // Reset value: 0x0 // // Role of DW_apb_i2c: Master-Transmitter or Master-Receiver // 0x0 -> This abort is not generated // 0x1 -> This abort is generated because of NOACK for 7-bit // address #define I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_RESET _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_BITS _u(0x00000001) #define I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_MSB _u(0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_LSB _u(0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_ACCESS "RO" #define I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_VALUE_INACTIVE _u(0x0) #define I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_VALUE_ACTIVE _u(0x1) // ============================================================================= // Register : I2C_IC_SLV_DATA_NACK_ONLY // Description : Generate Slave Data NACK Register // // The register is used to generate a NACK for the data part of a // transfer when DW_apb_i2c is acting as a slave-receiver. This // register only exists when the IC_SLV_DATA_NACK_ONLY parameter // is set to 1. When this parameter disabled, this register does // not exist and writing to the register's address has no effect. // // A write can occur on this register if both of the following // conditions are met: - DW_apb_i2c is disabled (IC_ENABLE[0] = 0) // - Slave part is inactive (IC_STATUS[6] = 0) Note: The // IC_STATUS[6] is a register read-back location for the internal // slv_activity signal; the user should poll this before writing // the ic_slv_data_nack_only bit. #define I2C_IC_SLV_DATA_NACK_ONLY_OFFSET _u(0x00000084) #define I2C_IC_SLV_DATA_NACK_ONLY_BITS _u(0x00000001) #define I2C_IC_SLV_DATA_NACK_ONLY_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_SLV_DATA_NACK_ONLY_NACK // Description : Generate NACK. This NACK generation only occurs when DW_apb_i2c // is a slave-receiver. If this register is set to a value of 1, // it can only generate a NACK after a data byte is received; // hence, the data transfer is aborted and the data received is // not pushed to the receive buffer. // // When the register is set to a value of 0, it generates // NACK/ACK, depending on normal criteria. - 1: generate NACK // after data byte received - 0: generate NACK/ACK normally Reset // value: 0x0 // 0x0 -> Slave receiver generates NACK normally // 0x1 -> Slave receiver generates NACK upon data reception only #define I2C_IC_SLV_DATA_NACK_ONLY_NACK_RESET _u(0x0) #define I2C_IC_SLV_DATA_NACK_ONLY_NACK_BITS _u(0x00000001) #define I2C_IC_SLV_DATA_NACK_ONLY_NACK_MSB _u(0) #define I2C_IC_SLV_DATA_NACK_ONLY_NACK_LSB _u(0) #define I2C_IC_SLV_DATA_NACK_ONLY_NACK_ACCESS "RW" #define I2C_IC_SLV_DATA_NACK_ONLY_NACK_VALUE_DISABLED _u(0x0) #define I2C_IC_SLV_DATA_NACK_ONLY_NACK_VALUE_ENABLED _u(0x1) // ============================================================================= // Register : I2C_IC_DMA_CR // Description : DMA Control Register // // The register is used to enable the DMA Controller interface // operation. There is a separate bit for transmit and receive. // This can be programmed regardless of the state of IC_ENABLE. #define I2C_IC_DMA_CR_OFFSET _u(0x00000088) #define I2C_IC_DMA_CR_BITS _u(0x00000003) #define I2C_IC_DMA_CR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_DMA_CR_TDMAE // Description : Transmit DMA Enable. This bit enables/disables the transmit // FIFO DMA channel. Reset value: 0x0 // 0x0 -> transmit FIFO DMA channel disabled // 0x1 -> Transmit FIFO DMA channel enabled #define I2C_IC_DMA_CR_TDMAE_RESET _u(0x0) #define I2C_IC_DMA_CR_TDMAE_BITS _u(0x00000002) #define I2C_IC_DMA_CR_TDMAE_MSB _u(1) #define I2C_IC_DMA_CR_TDMAE_LSB _u(1) #define I2C_IC_DMA_CR_TDMAE_ACCESS "RW" #define I2C_IC_DMA_CR_TDMAE_VALUE_DISABLED _u(0x0) #define I2C_IC_DMA_CR_TDMAE_VALUE_ENABLED _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_DMA_CR_RDMAE // Description : Receive DMA Enable. This bit enables/disables the receive FIFO // DMA channel. Reset value: 0x0 // 0x0 -> Receive FIFO DMA channel disabled // 0x1 -> Receive FIFO DMA channel enabled #define I2C_IC_DMA_CR_RDMAE_RESET _u(0x0) #define I2C_IC_DMA_CR_RDMAE_BITS _u(0x00000001) #define I2C_IC_DMA_CR_RDMAE_MSB _u(0) #define I2C_IC_DMA_CR_RDMAE_LSB _u(0) #define I2C_IC_DMA_CR_RDMAE_ACCESS "RW" #define I2C_IC_DMA_CR_RDMAE_VALUE_DISABLED _u(0x0) #define I2C_IC_DMA_CR_RDMAE_VALUE_ENABLED _u(0x1) // ============================================================================= // Register : I2C_IC_DMA_TDLR // Description : DMA Transmit Data Level Register #define I2C_IC_DMA_TDLR_OFFSET _u(0x0000008c) #define I2C_IC_DMA_TDLR_BITS _u(0x0000000f) #define I2C_IC_DMA_TDLR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_DMA_TDLR_DMATDL // Description : Transmit Data Level. This bit field controls the level at which // a DMA request is made by the transmit logic. It is equal to the // watermark level; that is, the dma_tx_req signal is generated // when the number of valid data entries in the transmit FIFO is // equal to or below this field value, and TDMAE = 1. // // Reset value: 0x0 #define I2C_IC_DMA_TDLR_DMATDL_RESET _u(0x0) #define I2C_IC_DMA_TDLR_DMATDL_BITS _u(0x0000000f) #define I2C_IC_DMA_TDLR_DMATDL_MSB _u(3) #define I2C_IC_DMA_TDLR_DMATDL_LSB _u(0) #define I2C_IC_DMA_TDLR_DMATDL_ACCESS "RW" // ============================================================================= // Register : I2C_IC_DMA_RDLR // Description : I2C Receive Data Level Register #define I2C_IC_DMA_RDLR_OFFSET _u(0x00000090) #define I2C_IC_DMA_RDLR_BITS _u(0x0000000f) #define I2C_IC_DMA_RDLR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_DMA_RDLR_DMARDL // Description : Receive Data Level. This bit field controls the level at which // a DMA request is made by the receive logic. The watermark level // = DMARDL+1; that is, dma_rx_req is generated when the number of // valid data entries in the receive FIFO is equal to or more than // this field value + 1, and RDMAE =1. For instance, when DMARDL // is 0, then dma_rx_req is asserted when 1 or more data entries // are present in the receive FIFO. // // Reset value: 0x0 #define I2C_IC_DMA_RDLR_DMARDL_RESET _u(0x0) #define I2C_IC_DMA_RDLR_DMARDL_BITS _u(0x0000000f) #define I2C_IC_DMA_RDLR_DMARDL_MSB _u(3) #define I2C_IC_DMA_RDLR_DMARDL_LSB _u(0) #define I2C_IC_DMA_RDLR_DMARDL_ACCESS "RW" // ============================================================================= // Register : I2C_IC_SDA_SETUP // Description : I2C SDA Setup Register // // This register controls the amount of time delay (in terms of // number of ic_clk clock periods) introduced in the rising edge // of SCL - relative to SDA changing - when DW_apb_i2c services a // read request in a slave-transmitter operation. The relevant I2C // requirement is tSU:DAT (note 4) as detailed in the I2C Bus // Specification. This register must be programmed with a value // equal to or greater than 2. // // Writes to this register succeed only when IC_ENABLE[0] = 0. // // Note: The length of setup time is calculated using // [(IC_SDA_SETUP - 1) * (ic_clk_period)], so if the user requires // 10 ic_clk periods of setup time, they should program a value of // 11. The IC_SDA_SETUP register is only used by the DW_apb_i2c // when operating as a slave transmitter. #define I2C_IC_SDA_SETUP_OFFSET _u(0x00000094) #define I2C_IC_SDA_SETUP_BITS _u(0x000000ff) #define I2C_IC_SDA_SETUP_RESET _u(0x00000064) // ----------------------------------------------------------------------------- // Field : I2C_IC_SDA_SETUP_SDA_SETUP // Description : SDA Setup. It is recommended that if the required delay is // 1000ns, then for an ic_clk frequency of 10 MHz, IC_SDA_SETUP // should be programmed to a value of 11. IC_SDA_SETUP must be // programmed with a minimum value of 2. #define I2C_IC_SDA_SETUP_SDA_SETUP_RESET _u(0x64) #define I2C_IC_SDA_SETUP_SDA_SETUP_BITS _u(0x000000ff) #define I2C_IC_SDA_SETUP_SDA_SETUP_MSB _u(7) #define I2C_IC_SDA_SETUP_SDA_SETUP_LSB _u(0) #define I2C_IC_SDA_SETUP_SDA_SETUP_ACCESS "RW" // ============================================================================= // Register : I2C_IC_ACK_GENERAL_CALL // Description : I2C ACK General Call Register // // The register controls whether DW_apb_i2c responds with a ACK or // NACK when it receives an I2C General Call address. // // This register is applicable only when the DW_apb_i2c is in // slave mode. #define I2C_IC_ACK_GENERAL_CALL_OFFSET _u(0x00000098) #define I2C_IC_ACK_GENERAL_CALL_BITS _u(0x00000001) #define I2C_IC_ACK_GENERAL_CALL_RESET _u(0x00000001) // ----------------------------------------------------------------------------- // Field : I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL // Description : ACK General Call. When set to 1, DW_apb_i2c responds with a ACK // (by asserting ic_data_oe) when it receives a General Call. // Otherwise, DW_apb_i2c responds with a NACK (by negating // ic_data_oe). // 0x0 -> Generate NACK for a General Call // 0x1 -> Generate ACK for a General Call #define I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_RESET _u(0x1) #define I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_BITS _u(0x00000001) #define I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_MSB _u(0) #define I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_LSB _u(0) #define I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_ACCESS "RW" #define I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_VALUE_DISABLED _u(0x0) #define I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_VALUE_ENABLED _u(0x1) // ============================================================================= // Register : I2C_IC_ENABLE_STATUS // Description : I2C Enable Status Register // // The register is used to report the DW_apb_i2c hardware status // when the IC_ENABLE[0] register is set from 1 to 0; that is, // when DW_apb_i2c is disabled. // // If IC_ENABLE[0] has been set to 1, bits 2:1 are forced to 0, // and bit 0 is forced to 1. // // If IC_ENABLE[0] has been set to 0, bits 2:1 is only be valid as // soon as bit 0 is read as '0'. // // Note: When IC_ENABLE[0] has been set to 0, a delay occurs for // bit 0 to be read as 0 because disabling the DW_apb_i2c depends // on I2C bus activities. #define I2C_IC_ENABLE_STATUS_OFFSET _u(0x0000009c) #define I2C_IC_ENABLE_STATUS_BITS _u(0x00000007) #define I2C_IC_ENABLE_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST // Description : Slave Received Data Lost. This bit indicates if a // Slave-Receiver operation has been aborted with at least one // data byte received from an I2C transfer due to the setting bit // 0 of IC_ENABLE from 1 to 0. When read as 1, DW_apb_i2c is // deemed to have been actively engaged in an aborted I2C transfer // (with matching address) and the data phase of the I2C transfer // has been entered, even though a data byte has been responded // with a NACK. // // Note: If the remote I2C master terminates the transfer with a // STOP condition before the DW_apb_i2c has a chance to NACK a // transfer, and IC_ENABLE[0] has been set to 0, then this bit is // also set to 1. // // When read as 0, DW_apb_i2c is deemed to have been disabled // without being actively involved in the data phase of a // Slave-Receiver transfer. // // Note: The CPU can safely read this bit when IC_EN (bit 0) is // read as 0. // // Reset value: 0x0 // 0x0 -> Slave RX Data is not lost // 0x1 -> Slave RX Data is lost #define I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_RESET _u(0x0) #define I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_BITS _u(0x00000004) #define I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_MSB _u(2) #define I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_LSB _u(2) #define I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_ACCESS "RO" #define I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_VALUE_INACTIVE _u(0x0) #define I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY // Description : Slave Disabled While Busy (Transmit, Receive). This bit // indicates if a potential or active Slave operation has been // aborted due to the setting bit 0 of the IC_ENABLE register from // 1 to 0. This bit is set when the CPU writes a 0 to the // IC_ENABLE register while: // // (a) DW_apb_i2c is receiving the address byte of the // Slave-Transmitter operation from a remote master; // // OR, // // (b) address and data bytes of the Slave-Receiver operation from // a remote master. // // When read as 1, DW_apb_i2c is deemed to have forced a NACK // during any part of an I2C transfer, irrespective of whether the // I2C address matches the slave address set in DW_apb_i2c (IC_SAR // register) OR if the transfer is completed before IC_ENABLE is // set to 0 but has not taken effect. // // Note: If the remote I2C master terminates the transfer with a // STOP condition before the DW_apb_i2c has a chance to NACK a // transfer, and IC_ENABLE[0] has been set to 0, then this bit // will also be set to 1. // // When read as 0, DW_apb_i2c is deemed to have been disabled when // there is master activity, or when the I2C bus is idle. // // Note: The CPU can safely read this bit when IC_EN (bit 0) is // read as 0. // // Reset value: 0x0 // 0x0 -> Slave is disabled when it is idle // 0x1 -> Slave is disabled when it is active #define I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_RESET _u(0x0) #define I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_BITS _u(0x00000002) #define I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_MSB _u(1) #define I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_LSB _u(1) #define I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_ACCESS "RO" #define I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_VALUE_INACTIVE _u(0x0) #define I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_VALUE_ACTIVE _u(0x1) // ----------------------------------------------------------------------------- // Field : I2C_IC_ENABLE_STATUS_IC_EN // Description : ic_en Status. This bit always reflects the value driven on the // output port ic_en. - When read as 1, DW_apb_i2c is deemed to be // in an enabled state. - When read as 0, DW_apb_i2c is deemed // completely inactive. Note: The CPU can safely read this bit // anytime. When this bit is read as 0, the CPU can safely read // SLV_RX_DATA_LOST (bit 2) and SLV_DISABLED_WHILE_BUSY (bit 1). // // Reset value: 0x0 // 0x0 -> I2C disabled // 0x1 -> I2C enabled #define I2C_IC_ENABLE_STATUS_IC_EN_RESET _u(0x0) #define I2C_IC_ENABLE_STATUS_IC_EN_BITS _u(0x00000001) #define I2C_IC_ENABLE_STATUS_IC_EN_MSB _u(0) #define I2C_IC_ENABLE_STATUS_IC_EN_LSB _u(0) #define I2C_IC_ENABLE_STATUS_IC_EN_ACCESS "RO" #define I2C_IC_ENABLE_STATUS_IC_EN_VALUE_DISABLED _u(0x0) #define I2C_IC_ENABLE_STATUS_IC_EN_VALUE_ENABLED _u(0x1) // ============================================================================= // Register : I2C_IC_FS_SPKLEN // Description : I2C SS, FS or FM+ spike suppression limit // // This register is used to store the duration, measured in ic_clk // cycles, of the longest spike that is filtered out by the spike // suppression logic when the component is operating in SS, FS or // FM+ modes. The relevant I2C requirement is tSP (table 4) as // detailed in the I2C Bus Specification. This register must be // programmed with a minimum value of 1. #define I2C_IC_FS_SPKLEN_OFFSET _u(0x000000a0) #define I2C_IC_FS_SPKLEN_BITS _u(0x000000ff) #define I2C_IC_FS_SPKLEN_RESET _u(0x00000007) // ----------------------------------------------------------------------------- // Field : I2C_IC_FS_SPKLEN_IC_FS_SPKLEN // Description : This register must be set before any I2C bus transaction can // take place to ensure stable operation. This register sets the // duration, measured in ic_clk cycles, of the longest spike in // the SCL or SDA lines that will be filtered out by the spike // suppression logic. This register can be written only when the // I2C interface is disabled which corresponds to the IC_ENABLE[0] // register being set to 0. Writes at other times have no effect. // The minimum valid value is 1; hardware prevents values less // than this being written, and if attempted results in 1 being // set. or more information, refer to 'Spike Suppression'. #define I2C_IC_FS_SPKLEN_IC_FS_SPKLEN_RESET _u(0x07) #define I2C_IC_FS_SPKLEN_IC_FS_SPKLEN_BITS _u(0x000000ff) #define I2C_IC_FS_SPKLEN_IC_FS_SPKLEN_MSB _u(7) #define I2C_IC_FS_SPKLEN_IC_FS_SPKLEN_LSB _u(0) #define I2C_IC_FS_SPKLEN_IC_FS_SPKLEN_ACCESS "RW" // ============================================================================= // Register : I2C_IC_CLR_RESTART_DET // Description : Clear RESTART_DET Interrupt Register #define I2C_IC_CLR_RESTART_DET_OFFSET _u(0x000000a8) #define I2C_IC_CLR_RESTART_DET_BITS _u(0x00000001) #define I2C_IC_CLR_RESTART_DET_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_CLR_RESTART_DET_CLR_RESTART_DET // Description : Read this register to clear the RESTART_DET interrupt (bit 12) // of IC_RAW_INTR_STAT register. // // Reset value: 0x0 #define I2C_IC_CLR_RESTART_DET_CLR_RESTART_DET_RESET _u(0x0) #define I2C_IC_CLR_RESTART_DET_CLR_RESTART_DET_BITS _u(0x00000001) #define I2C_IC_CLR_RESTART_DET_CLR_RESTART_DET_MSB _u(0) #define I2C_IC_CLR_RESTART_DET_CLR_RESTART_DET_LSB _u(0) #define I2C_IC_CLR_RESTART_DET_CLR_RESTART_DET_ACCESS "RO" // ============================================================================= // Register : I2C_IC_COMP_PARAM_1 // Description : Component Parameter Register 1 // // Note This register is not implemented and therefore reads as 0. // If it was implemented it would be a constant read-only register // that contains encoded information about the component's // parameter settings. Fields shown below are the settings for // those parameters #define I2C_IC_COMP_PARAM_1_OFFSET _u(0x000000f4) #define I2C_IC_COMP_PARAM_1_BITS _u(0x00ffffff) #define I2C_IC_COMP_PARAM_1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH // Description : TX Buffer Depth = 16 #define I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_RESET _u(0x00) #define I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_BITS _u(0x00ff0000) #define I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_MSB _u(23) #define I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_LSB _u(16) #define I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH // Description : RX Buffer Depth = 16 #define I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_RESET _u(0x00) #define I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_BITS _u(0x0000ff00) #define I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_MSB _u(15) #define I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_LSB _u(8) #define I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS // Description : Encoded parameters not visible #define I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS_RESET _u(0x0) #define I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS_BITS _u(0x00000080) #define I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS_MSB _u(7) #define I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS_LSB _u(7) #define I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : I2C_IC_COMP_PARAM_1_HAS_DMA // Description : DMA handshaking signals are enabled #define I2C_IC_COMP_PARAM_1_HAS_DMA_RESET _u(0x0) #define I2C_IC_COMP_PARAM_1_HAS_DMA_BITS _u(0x00000040) #define I2C_IC_COMP_PARAM_1_HAS_DMA_MSB _u(6) #define I2C_IC_COMP_PARAM_1_HAS_DMA_LSB _u(6) #define I2C_IC_COMP_PARAM_1_HAS_DMA_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : I2C_IC_COMP_PARAM_1_INTR_IO // Description : COMBINED Interrupt outputs #define I2C_IC_COMP_PARAM_1_INTR_IO_RESET _u(0x0) #define I2C_IC_COMP_PARAM_1_INTR_IO_BITS _u(0x00000020) #define I2C_IC_COMP_PARAM_1_INTR_IO_MSB _u(5) #define I2C_IC_COMP_PARAM_1_INTR_IO_LSB _u(5) #define I2C_IC_COMP_PARAM_1_INTR_IO_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES // Description : Programmable count values for each mode. #define I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES_RESET _u(0x0) #define I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES_BITS _u(0x00000010) #define I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES_MSB _u(4) #define I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES_LSB _u(4) #define I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE // Description : MAX SPEED MODE = FAST MODE #define I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE_RESET _u(0x0) #define I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE_BITS _u(0x0000000c) #define I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE_MSB _u(3) #define I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE_LSB _u(2) #define I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH // Description : APB data bus width is 32 bits #define I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH_RESET _u(0x0) #define I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH_BITS _u(0x00000003) #define I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH_MSB _u(1) #define I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH_LSB _u(0) #define I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH_ACCESS "RO" // ============================================================================= // Register : I2C_IC_COMP_VERSION // Description : I2C Component Version Register #define I2C_IC_COMP_VERSION_OFFSET _u(0x000000f8) #define I2C_IC_COMP_VERSION_BITS _u(0xffffffff) #define I2C_IC_COMP_VERSION_RESET _u(0x3230312a) // ----------------------------------------------------------------------------- // Field : I2C_IC_COMP_VERSION_IC_COMP_VERSION // Description : None #define I2C_IC_COMP_VERSION_IC_COMP_VERSION_RESET _u(0x3230312a) #define I2C_IC_COMP_VERSION_IC_COMP_VERSION_BITS _u(0xffffffff) #define I2C_IC_COMP_VERSION_IC_COMP_VERSION_MSB _u(31) #define I2C_IC_COMP_VERSION_IC_COMP_VERSION_LSB _u(0) #define I2C_IC_COMP_VERSION_IC_COMP_VERSION_ACCESS "RO" // ============================================================================= // Register : I2C_IC_COMP_TYPE // Description : I2C Component Type Register #define I2C_IC_COMP_TYPE_OFFSET _u(0x000000fc) #define I2C_IC_COMP_TYPE_BITS _u(0xffffffff) #define I2C_IC_COMP_TYPE_RESET _u(0x44570140) // ----------------------------------------------------------------------------- // Field : I2C_IC_COMP_TYPE_IC_COMP_TYPE // Description : Designware Component Type number = 0x44_57_01_40. This assigned // unique hex value is constant and is derived from the two ASCII // letters 'DW' followed by a 16-bit unsigned number. #define I2C_IC_COMP_TYPE_IC_COMP_TYPE_RESET _u(0x44570140) #define I2C_IC_COMP_TYPE_IC_COMP_TYPE_BITS _u(0xffffffff) #define I2C_IC_COMP_TYPE_IC_COMP_TYPE_MSB _u(31) #define I2C_IC_COMP_TYPE_IC_COMP_TYPE_LSB _u(0) #define I2C_IC_COMP_TYPE_IC_COMP_TYPE_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_I2C_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/intctrl.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _INTCTRL_H_ #define _INTCTRL_H_ #define TIMER_IRQ_0 0 #define TIMER_IRQ_1 1 #define TIMER_IRQ_2 2 #define TIMER_IRQ_3 3 #define PWM_IRQ_WRAP 4 #define USBCTRL_IRQ 5 #define XIP_IRQ 6 #define PIO0_IRQ_0 7 #define PIO0_IRQ_1 8 #define PIO1_IRQ_0 9 #define PIO1_IRQ_1 10 #define DMA_IRQ_0 11 #define DMA_IRQ_1 12 #define IO_IRQ_BANK0 13 #define IO_IRQ_QSPI 14 #define SIO_IRQ_PROC0 15 #define SIO_IRQ_PROC1 16 #define CLOCKS_IRQ 17 #define SPI0_IRQ 18 #define SPI1_IRQ 19 #define UART0_IRQ 20 #define UART1_IRQ 21 #define ADC_IRQ_FIFO 22 #define I2C0_IRQ 23 #define I2C1_IRQ 24 #define RTC_IRQ 25 #define isr_timer_0 isr_irq0 #define isr_timer_1 isr_irq1 #define isr_timer_2 isr_irq2 #define isr_timer_3 isr_irq3 #define isr_pwm_wrap isr_irq4 #define isr_usbctrl isr_irq5 #define isr_xip isr_irq6 #define isr_pio0_0 isr_irq7 #define isr_pio0_1 isr_irq8 #define isr_pio1_0 isr_irq9 #define isr_pio1_1 isr_irq10 #define isr_dma_0 isr_irq11 #define isr_dma_1 isr_irq12 #define isr_io_bank0 isr_irq13 #define isr_io_qspi isr_irq14 #define isr_sio_proc0 isr_irq15 #define isr_sio_proc1 isr_irq16 #define isr_clocks isr_irq17 #define isr_spi0 isr_irq18 #define isr_spi1 isr_irq19 #define isr_uart0 isr_irq20 #define isr_uart1 isr_irq21 #define isr_adc_fifo isr_irq22 #define isr_i2c0 isr_irq23 #define isr_i2c1 isr_irq24 #define isr_rtc isr_irq25 #endif // _INTCTRL_H_ ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/io_bank0.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : IO_BANK0 // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_IO_BANK0_DEFINED #define HARDWARE_REGS_IO_BANK0_DEFINED // ============================================================================= // Register : IO_BANK0_GPIO0_STATUS // Description : GPIO status #define IO_BANK0_GPIO0_STATUS_OFFSET _u(0x00000000) #define IO_BANK0_GPIO0_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO0_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO0_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO0_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO0_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO0_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO0_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO0_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO0_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO0_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO0_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO0_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO0_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO0_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO0_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO0_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO0_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO0_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO0_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO0_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO0_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO0_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO0_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO0_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO0_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO0_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO0_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO0_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO0_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO0_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO0_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO0_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO0_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO0_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO0_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO0_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO0_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO0_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO0_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO0_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO0_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO0_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO0_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO0_CTRL_OFFSET _u(0x00000004) #define IO_BANK0_GPIO0_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO0_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO0_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO0_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO0_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO0_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO0_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO0_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO0_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO0_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO0_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO0_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO0_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO0_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO0_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO0_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO0_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO0_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO0_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO0_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO0_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO0_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO0_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO0_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO0_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO0_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO0_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO0_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO0_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO0_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO0_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO0_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO0_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO0_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO0_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO0_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO0_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO0_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO0_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x00 -> jtag_tck // 0x01 -> spi0_rx // 0x02 -> uart0_tx // 0x03 -> i2c0_sda // 0x04 -> pwm_a_0 // 0x05 -> sio_0 // 0x06 -> pio0_0 // 0x07 -> pio1_0 // 0x09 -> usb_muxing_overcurr_detect // 0x1f -> null #define IO_BANK0_GPIO0_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO0_CTRL_FUNCSEL_VALUE_JTAG_TCK _u(0x00) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_VALUE_SPI0_RX _u(0x01) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_VALUE_UART0_TX _u(0x02) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_VALUE_I2C0_SDA _u(0x03) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_VALUE_PWM_A_0 _u(0x04) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_VALUE_SIO_0 _u(0x05) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_VALUE_PIO0_0 _u(0x06) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_VALUE_PIO1_0 _u(0x07) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_VALUE_USB_MUXING_OVERCURR_DETECT _u(0x09) #define IO_BANK0_GPIO0_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO1_STATUS // Description : GPIO status #define IO_BANK0_GPIO1_STATUS_OFFSET _u(0x00000008) #define IO_BANK0_GPIO1_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO1_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO1_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO1_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO1_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO1_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO1_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO1_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO1_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO1_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO1_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO1_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO1_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO1_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO1_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO1_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO1_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO1_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO1_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO1_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO1_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO1_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO1_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO1_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO1_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO1_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO1_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO1_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO1_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO1_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO1_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO1_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO1_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO1_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO1_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO1_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO1_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO1_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO1_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO1_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO1_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO1_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO1_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO1_CTRL_OFFSET _u(0x0000000c) #define IO_BANK0_GPIO1_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO1_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO1_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO1_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO1_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO1_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO1_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO1_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO1_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO1_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO1_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO1_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO1_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO1_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO1_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO1_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO1_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO1_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO1_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO1_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO1_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO1_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO1_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO1_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO1_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO1_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO1_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO1_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO1_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO1_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO1_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO1_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO1_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO1_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO1_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO1_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO1_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO1_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO1_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x00 -> jtag_tms // 0x01 -> spi0_ss_n // 0x02 -> uart0_rx // 0x03 -> i2c0_scl // 0x04 -> pwm_b_0 // 0x05 -> sio_1 // 0x06 -> pio0_1 // 0x07 -> pio1_1 // 0x09 -> usb_muxing_vbus_detect // 0x1f -> null #define IO_BANK0_GPIO1_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO1_CTRL_FUNCSEL_VALUE_JTAG_TMS _u(0x00) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_VALUE_SPI0_SS_N _u(0x01) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_VALUE_UART0_RX _u(0x02) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_VALUE_I2C0_SCL _u(0x03) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_VALUE_PWM_B_0 _u(0x04) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_VALUE_SIO_1 _u(0x05) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_VALUE_PIO0_1 _u(0x06) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_VALUE_PIO1_1 _u(0x07) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_DETECT _u(0x09) #define IO_BANK0_GPIO1_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO2_STATUS // Description : GPIO status #define IO_BANK0_GPIO2_STATUS_OFFSET _u(0x00000010) #define IO_BANK0_GPIO2_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO2_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO2_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO2_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO2_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO2_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO2_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO2_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO2_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO2_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO2_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO2_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO2_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO2_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO2_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO2_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO2_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO2_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO2_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO2_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO2_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO2_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO2_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO2_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO2_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO2_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO2_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO2_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO2_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO2_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO2_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO2_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO2_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO2_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO2_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO2_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO2_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO2_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO2_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO2_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO2_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO2_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO2_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO2_CTRL_OFFSET _u(0x00000014) #define IO_BANK0_GPIO2_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO2_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO2_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO2_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO2_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO2_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO2_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO2_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO2_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO2_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO2_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO2_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO2_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO2_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO2_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO2_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO2_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO2_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO2_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO2_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO2_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO2_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO2_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO2_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO2_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO2_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO2_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO2_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO2_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO2_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO2_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO2_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO2_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO2_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO2_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO2_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO2_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO2_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO2_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x00 -> jtag_tdi // 0x01 -> spi0_sclk // 0x02 -> uart0_cts // 0x03 -> i2c1_sda // 0x04 -> pwm_a_1 // 0x05 -> sio_2 // 0x06 -> pio0_2 // 0x07 -> pio1_2 // 0x09 -> usb_muxing_vbus_en // 0x1f -> null #define IO_BANK0_GPIO2_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO2_CTRL_FUNCSEL_VALUE_JTAG_TDI _u(0x00) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_VALUE_SPI0_SCLK _u(0x01) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_VALUE_UART0_CTS _u(0x02) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_VALUE_I2C1_SDA _u(0x03) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_VALUE_PWM_A_1 _u(0x04) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_VALUE_SIO_2 _u(0x05) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_VALUE_PIO0_2 _u(0x06) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_VALUE_PIO1_2 _u(0x07) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_EN _u(0x09) #define IO_BANK0_GPIO2_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO3_STATUS // Description : GPIO status #define IO_BANK0_GPIO3_STATUS_OFFSET _u(0x00000018) #define IO_BANK0_GPIO3_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO3_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO3_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO3_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO3_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO3_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO3_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO3_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO3_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO3_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO3_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO3_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO3_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO3_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO3_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO3_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO3_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO3_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO3_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO3_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO3_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO3_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO3_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO3_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO3_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO3_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO3_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO3_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO3_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO3_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO3_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO3_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO3_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO3_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO3_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO3_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO3_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO3_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO3_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO3_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO3_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO3_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO3_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO3_CTRL_OFFSET _u(0x0000001c) #define IO_BANK0_GPIO3_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO3_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO3_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO3_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO3_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO3_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO3_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO3_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO3_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO3_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO3_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO3_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO3_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO3_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO3_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO3_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO3_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO3_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO3_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO3_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO3_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO3_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO3_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO3_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO3_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO3_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO3_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO3_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO3_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO3_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO3_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO3_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO3_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO3_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO3_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO3_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO3_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO3_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO3_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x00 -> jtag_tdo // 0x01 -> spi0_tx // 0x02 -> uart0_rts // 0x03 -> i2c1_scl // 0x04 -> pwm_b_1 // 0x05 -> sio_3 // 0x06 -> pio0_3 // 0x07 -> pio1_3 // 0x09 -> usb_muxing_overcurr_detect // 0x1f -> null #define IO_BANK0_GPIO3_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO3_CTRL_FUNCSEL_VALUE_JTAG_TDO _u(0x00) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_VALUE_SPI0_TX _u(0x01) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_VALUE_UART0_RTS _u(0x02) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_VALUE_I2C1_SCL _u(0x03) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_VALUE_PWM_B_1 _u(0x04) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_VALUE_SIO_3 _u(0x05) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_VALUE_PIO0_3 _u(0x06) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_VALUE_PIO1_3 _u(0x07) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_VALUE_USB_MUXING_OVERCURR_DETECT _u(0x09) #define IO_BANK0_GPIO3_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO4_STATUS // Description : GPIO status #define IO_BANK0_GPIO4_STATUS_OFFSET _u(0x00000020) #define IO_BANK0_GPIO4_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO4_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO4_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO4_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO4_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO4_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO4_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO4_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO4_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO4_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO4_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO4_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO4_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO4_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO4_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO4_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO4_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO4_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO4_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO4_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO4_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO4_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO4_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO4_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO4_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO4_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO4_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO4_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO4_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO4_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO4_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO4_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO4_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO4_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO4_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO4_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO4_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO4_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO4_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO4_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO4_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO4_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO4_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO4_CTRL_OFFSET _u(0x00000024) #define IO_BANK0_GPIO4_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO4_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO4_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO4_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO4_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO4_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO4_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO4_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO4_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO4_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO4_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO4_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO4_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO4_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO4_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO4_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO4_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO4_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO4_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO4_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO4_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO4_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO4_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO4_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO4_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO4_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO4_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO4_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO4_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO4_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO4_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO4_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO4_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO4_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO4_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO4_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO4_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO4_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO4_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_rx // 0x02 -> uart1_tx // 0x03 -> i2c0_sda // 0x04 -> pwm_a_2 // 0x05 -> sio_4 // 0x06 -> pio0_4 // 0x07 -> pio1_4 // 0x09 -> usb_muxing_vbus_detect // 0x1f -> null #define IO_BANK0_GPIO4_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO4_CTRL_FUNCSEL_VALUE_SPI0_RX _u(0x01) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_VALUE_UART1_TX _u(0x02) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_VALUE_I2C0_SDA _u(0x03) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_VALUE_PWM_A_2 _u(0x04) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_VALUE_SIO_4 _u(0x05) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_VALUE_PIO0_4 _u(0x06) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_VALUE_PIO1_4 _u(0x07) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_DETECT _u(0x09) #define IO_BANK0_GPIO4_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO5_STATUS // Description : GPIO status #define IO_BANK0_GPIO5_STATUS_OFFSET _u(0x00000028) #define IO_BANK0_GPIO5_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO5_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO5_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO5_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO5_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO5_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO5_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO5_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO5_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO5_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO5_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO5_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO5_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO5_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO5_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO5_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO5_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO5_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO5_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO5_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO5_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO5_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO5_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO5_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO5_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO5_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO5_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO5_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO5_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO5_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO5_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO5_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO5_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO5_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO5_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO5_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO5_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO5_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO5_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO5_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO5_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO5_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO5_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO5_CTRL_OFFSET _u(0x0000002c) #define IO_BANK0_GPIO5_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO5_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO5_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO5_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO5_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO5_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO5_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO5_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO5_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO5_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO5_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO5_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO5_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO5_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO5_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO5_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO5_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO5_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO5_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO5_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO5_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO5_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO5_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO5_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO5_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO5_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO5_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO5_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO5_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO5_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO5_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO5_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO5_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO5_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO5_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO5_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO5_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO5_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO5_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_ss_n // 0x02 -> uart1_rx // 0x03 -> i2c0_scl // 0x04 -> pwm_b_2 // 0x05 -> sio_5 // 0x06 -> pio0_5 // 0x07 -> pio1_5 // 0x09 -> usb_muxing_vbus_en // 0x1f -> null #define IO_BANK0_GPIO5_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO5_CTRL_FUNCSEL_VALUE_SPI0_SS_N _u(0x01) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_VALUE_UART1_RX _u(0x02) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_VALUE_I2C0_SCL _u(0x03) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_VALUE_PWM_B_2 _u(0x04) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_VALUE_SIO_5 _u(0x05) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_VALUE_PIO0_5 _u(0x06) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_VALUE_PIO1_5 _u(0x07) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_EN _u(0x09) #define IO_BANK0_GPIO5_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO6_STATUS // Description : GPIO status #define IO_BANK0_GPIO6_STATUS_OFFSET _u(0x00000030) #define IO_BANK0_GPIO6_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO6_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO6_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO6_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO6_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO6_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO6_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO6_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO6_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO6_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO6_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO6_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO6_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO6_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO6_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO6_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO6_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO6_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO6_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO6_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO6_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO6_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO6_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO6_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO6_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO6_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO6_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO6_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO6_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO6_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO6_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO6_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO6_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO6_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO6_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO6_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO6_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO6_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO6_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO6_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO6_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO6_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO6_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO6_CTRL_OFFSET _u(0x00000034) #define IO_BANK0_GPIO6_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO6_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO6_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO6_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO6_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO6_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO6_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO6_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO6_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO6_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO6_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO6_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO6_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO6_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO6_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO6_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO6_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO6_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO6_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO6_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO6_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO6_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO6_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO6_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO6_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO6_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO6_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO6_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO6_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO6_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO6_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO6_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO6_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO6_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO6_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO6_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO6_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO6_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO6_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_sclk // 0x02 -> uart1_cts // 0x03 -> i2c1_sda // 0x04 -> pwm_a_3 // 0x05 -> sio_6 // 0x06 -> pio0_6 // 0x07 -> pio1_6 // 0x08 -> usb_muxing_extphy_softcon // 0x09 -> usb_muxing_overcurr_detect // 0x1f -> null #define IO_BANK0_GPIO6_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO6_CTRL_FUNCSEL_VALUE_SPI0_SCLK _u(0x01) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_VALUE_UART1_CTS _u(0x02) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_VALUE_I2C1_SDA _u(0x03) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_VALUE_PWM_A_3 _u(0x04) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_VALUE_SIO_6 _u(0x05) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_VALUE_PIO0_6 _u(0x06) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_VALUE_PIO1_6 _u(0x07) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_VALUE_USB_MUXING_EXTPHY_SOFTCON _u(0x08) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_VALUE_USB_MUXING_OVERCURR_DETECT _u(0x09) #define IO_BANK0_GPIO6_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO7_STATUS // Description : GPIO status #define IO_BANK0_GPIO7_STATUS_OFFSET _u(0x00000038) #define IO_BANK0_GPIO7_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO7_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO7_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO7_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO7_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO7_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO7_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO7_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO7_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO7_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO7_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO7_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO7_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO7_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO7_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO7_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO7_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO7_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO7_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO7_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO7_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO7_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO7_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO7_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO7_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO7_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO7_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO7_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO7_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO7_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO7_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO7_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO7_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO7_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO7_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO7_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO7_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO7_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO7_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO7_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO7_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO7_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO7_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO7_CTRL_OFFSET _u(0x0000003c) #define IO_BANK0_GPIO7_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO7_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO7_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO7_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO7_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO7_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO7_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO7_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO7_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO7_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO7_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO7_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO7_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO7_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO7_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO7_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO7_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO7_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO7_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO7_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO7_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO7_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO7_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO7_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO7_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO7_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO7_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO7_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO7_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO7_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO7_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO7_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO7_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO7_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO7_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO7_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO7_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO7_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO7_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_tx // 0x02 -> uart1_rts // 0x03 -> i2c1_scl // 0x04 -> pwm_b_3 // 0x05 -> sio_7 // 0x06 -> pio0_7 // 0x07 -> pio1_7 // 0x08 -> usb_muxing_extphy_oe_n // 0x09 -> usb_muxing_vbus_detect // 0x1f -> null #define IO_BANK0_GPIO7_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO7_CTRL_FUNCSEL_VALUE_SPI0_TX _u(0x01) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_VALUE_UART1_RTS _u(0x02) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_VALUE_I2C1_SCL _u(0x03) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_VALUE_PWM_B_3 _u(0x04) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_VALUE_SIO_7 _u(0x05) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_VALUE_PIO0_7 _u(0x06) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_VALUE_PIO1_7 _u(0x07) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_VALUE_USB_MUXING_EXTPHY_OE_N _u(0x08) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_DETECT _u(0x09) #define IO_BANK0_GPIO7_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO8_STATUS // Description : GPIO status #define IO_BANK0_GPIO8_STATUS_OFFSET _u(0x00000040) #define IO_BANK0_GPIO8_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO8_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO8_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO8_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO8_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO8_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO8_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO8_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO8_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO8_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO8_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO8_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO8_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO8_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO8_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO8_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO8_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO8_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO8_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO8_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO8_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO8_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO8_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO8_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO8_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO8_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO8_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO8_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO8_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO8_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO8_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO8_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO8_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO8_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO8_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO8_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO8_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO8_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO8_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO8_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO8_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO8_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO8_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO8_CTRL_OFFSET _u(0x00000044) #define IO_BANK0_GPIO8_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO8_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO8_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO8_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO8_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO8_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO8_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO8_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO8_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO8_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO8_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO8_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO8_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO8_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO8_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO8_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO8_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO8_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO8_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO8_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO8_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO8_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO8_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO8_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO8_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO8_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO8_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO8_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO8_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO8_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO8_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO8_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO8_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO8_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO8_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO8_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO8_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO8_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO8_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_rx // 0x02 -> uart1_tx // 0x03 -> i2c0_sda // 0x04 -> pwm_a_4 // 0x05 -> sio_8 // 0x06 -> pio0_8 // 0x07 -> pio1_8 // 0x08 -> usb_muxing_extphy_rcv // 0x09 -> usb_muxing_vbus_en // 0x1f -> null #define IO_BANK0_GPIO8_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO8_CTRL_FUNCSEL_VALUE_SPI1_RX _u(0x01) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_VALUE_UART1_TX _u(0x02) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_VALUE_I2C0_SDA _u(0x03) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_VALUE_PWM_A_4 _u(0x04) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_VALUE_SIO_8 _u(0x05) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_VALUE_PIO0_8 _u(0x06) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_VALUE_PIO1_8 _u(0x07) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_VALUE_USB_MUXING_EXTPHY_RCV _u(0x08) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_EN _u(0x09) #define IO_BANK0_GPIO8_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO9_STATUS // Description : GPIO status #define IO_BANK0_GPIO9_STATUS_OFFSET _u(0x00000048) #define IO_BANK0_GPIO9_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO9_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO9_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO9_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO9_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO9_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO9_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO9_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO9_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO9_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO9_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO9_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO9_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO9_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO9_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO9_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO9_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO9_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO9_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO9_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO9_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO9_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO9_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO9_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO9_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO9_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO9_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO9_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO9_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO9_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO9_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO9_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO9_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO9_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO9_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO9_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO9_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO9_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO9_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO9_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO9_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO9_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO9_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO9_CTRL_OFFSET _u(0x0000004c) #define IO_BANK0_GPIO9_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO9_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO9_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO9_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO9_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO9_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO9_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO9_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO9_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO9_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO9_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO9_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO9_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO9_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO9_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO9_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO9_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO9_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO9_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO9_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO9_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO9_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO9_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO9_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO9_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO9_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO9_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO9_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO9_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO9_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO9_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO9_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO9_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO9_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO9_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO9_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO9_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO9_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO9_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_ss_n // 0x02 -> uart1_rx // 0x03 -> i2c0_scl // 0x04 -> pwm_b_4 // 0x05 -> sio_9 // 0x06 -> pio0_9 // 0x07 -> pio1_9 // 0x08 -> usb_muxing_extphy_vp // 0x09 -> usb_muxing_overcurr_detect // 0x1f -> null #define IO_BANK0_GPIO9_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO9_CTRL_FUNCSEL_VALUE_SPI1_SS_N _u(0x01) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_VALUE_UART1_RX _u(0x02) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_VALUE_I2C0_SCL _u(0x03) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_VALUE_PWM_B_4 _u(0x04) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_VALUE_SIO_9 _u(0x05) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_VALUE_PIO0_9 _u(0x06) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_VALUE_PIO1_9 _u(0x07) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_VALUE_USB_MUXING_EXTPHY_VP _u(0x08) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_VALUE_USB_MUXING_OVERCURR_DETECT _u(0x09) #define IO_BANK0_GPIO9_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO10_STATUS // Description : GPIO status #define IO_BANK0_GPIO10_STATUS_OFFSET _u(0x00000050) #define IO_BANK0_GPIO10_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO10_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO10_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO10_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO10_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO10_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO10_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO10_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO10_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO10_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO10_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO10_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO10_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO10_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO10_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO10_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO10_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO10_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO10_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO10_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO10_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO10_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO10_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO10_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO10_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO10_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO10_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO10_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO10_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO10_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO10_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO10_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO10_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO10_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO10_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO10_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO10_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO10_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO10_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO10_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO10_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO10_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO10_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO10_CTRL_OFFSET _u(0x00000054) #define IO_BANK0_GPIO10_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO10_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO10_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO10_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO10_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO10_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO10_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO10_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO10_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO10_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO10_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO10_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO10_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO10_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO10_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO10_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO10_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO10_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO10_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO10_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO10_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO10_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO10_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO10_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO10_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO10_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO10_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO10_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO10_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO10_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO10_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO10_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO10_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO10_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO10_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO10_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO10_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO10_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO10_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_sclk // 0x02 -> uart1_cts // 0x03 -> i2c1_sda // 0x04 -> pwm_a_5 // 0x05 -> sio_10 // 0x06 -> pio0_10 // 0x07 -> pio1_10 // 0x08 -> usb_muxing_extphy_vm // 0x09 -> usb_muxing_vbus_detect // 0x1f -> null #define IO_BANK0_GPIO10_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO10_CTRL_FUNCSEL_VALUE_SPI1_SCLK _u(0x01) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_VALUE_UART1_CTS _u(0x02) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_VALUE_I2C1_SDA _u(0x03) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_VALUE_PWM_A_5 _u(0x04) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_VALUE_SIO_10 _u(0x05) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_VALUE_PIO0_10 _u(0x06) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_VALUE_PIO1_10 _u(0x07) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_VALUE_USB_MUXING_EXTPHY_VM _u(0x08) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_DETECT _u(0x09) #define IO_BANK0_GPIO10_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO11_STATUS // Description : GPIO status #define IO_BANK0_GPIO11_STATUS_OFFSET _u(0x00000058) #define IO_BANK0_GPIO11_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO11_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO11_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO11_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO11_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO11_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO11_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO11_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO11_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO11_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO11_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO11_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO11_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO11_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO11_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO11_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO11_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO11_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO11_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO11_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO11_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO11_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO11_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO11_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO11_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO11_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO11_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO11_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO11_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO11_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO11_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO11_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO11_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO11_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO11_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO11_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO11_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO11_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO11_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO11_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO11_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO11_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO11_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO11_CTRL_OFFSET _u(0x0000005c) #define IO_BANK0_GPIO11_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO11_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO11_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO11_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO11_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO11_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO11_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO11_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO11_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO11_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO11_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO11_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO11_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO11_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO11_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO11_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO11_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO11_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO11_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO11_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO11_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO11_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO11_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO11_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO11_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO11_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO11_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO11_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO11_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO11_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO11_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO11_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO11_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO11_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO11_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO11_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO11_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO11_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO11_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_tx // 0x02 -> uart1_rts // 0x03 -> i2c1_scl // 0x04 -> pwm_b_5 // 0x05 -> sio_11 // 0x06 -> pio0_11 // 0x07 -> pio1_11 // 0x08 -> usb_muxing_extphy_suspnd // 0x09 -> usb_muxing_vbus_en // 0x1f -> null #define IO_BANK0_GPIO11_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO11_CTRL_FUNCSEL_VALUE_SPI1_TX _u(0x01) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_VALUE_UART1_RTS _u(0x02) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_VALUE_I2C1_SCL _u(0x03) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_VALUE_PWM_B_5 _u(0x04) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_VALUE_SIO_11 _u(0x05) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_VALUE_PIO0_11 _u(0x06) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_VALUE_PIO1_11 _u(0x07) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_VALUE_USB_MUXING_EXTPHY_SUSPND _u(0x08) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_EN _u(0x09) #define IO_BANK0_GPIO11_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO12_STATUS // Description : GPIO status #define IO_BANK0_GPIO12_STATUS_OFFSET _u(0x00000060) #define IO_BANK0_GPIO12_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO12_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO12_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO12_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO12_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO12_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO12_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO12_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO12_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO12_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO12_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO12_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO12_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO12_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO12_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO12_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO12_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO12_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO12_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO12_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO12_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO12_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO12_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO12_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO12_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO12_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO12_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO12_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO12_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO12_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO12_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO12_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO12_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO12_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO12_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO12_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO12_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO12_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO12_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO12_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO12_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO12_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO12_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO12_CTRL_OFFSET _u(0x00000064) #define IO_BANK0_GPIO12_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO12_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO12_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO12_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO12_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO12_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO12_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO12_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO12_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO12_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO12_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO12_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO12_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO12_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO12_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO12_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO12_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO12_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO12_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO12_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO12_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO12_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO12_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO12_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO12_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO12_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO12_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO12_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO12_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO12_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO12_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO12_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO12_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO12_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO12_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO12_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO12_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO12_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO12_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_rx // 0x02 -> uart0_tx // 0x03 -> i2c0_sda // 0x04 -> pwm_a_6 // 0x05 -> sio_12 // 0x06 -> pio0_12 // 0x07 -> pio1_12 // 0x08 -> usb_muxing_extphy_speed // 0x09 -> usb_muxing_overcurr_detect // 0x1f -> null #define IO_BANK0_GPIO12_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO12_CTRL_FUNCSEL_VALUE_SPI1_RX _u(0x01) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_VALUE_UART0_TX _u(0x02) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_VALUE_I2C0_SDA _u(0x03) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_VALUE_PWM_A_6 _u(0x04) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_VALUE_SIO_12 _u(0x05) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_VALUE_PIO0_12 _u(0x06) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_VALUE_PIO1_12 _u(0x07) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_VALUE_USB_MUXING_EXTPHY_SPEED _u(0x08) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_VALUE_USB_MUXING_OVERCURR_DETECT _u(0x09) #define IO_BANK0_GPIO12_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO13_STATUS // Description : GPIO status #define IO_BANK0_GPIO13_STATUS_OFFSET _u(0x00000068) #define IO_BANK0_GPIO13_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO13_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO13_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO13_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO13_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO13_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO13_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO13_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO13_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO13_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO13_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO13_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO13_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO13_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO13_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO13_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO13_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO13_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO13_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO13_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO13_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO13_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO13_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO13_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO13_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO13_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO13_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO13_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO13_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO13_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO13_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO13_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO13_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO13_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO13_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO13_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO13_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO13_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO13_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO13_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO13_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO13_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO13_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO13_CTRL_OFFSET _u(0x0000006c) #define IO_BANK0_GPIO13_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO13_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO13_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO13_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO13_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO13_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO13_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO13_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO13_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO13_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO13_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO13_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO13_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO13_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO13_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO13_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO13_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO13_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO13_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO13_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO13_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO13_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO13_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO13_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO13_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO13_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO13_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO13_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO13_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO13_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO13_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO13_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO13_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO13_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO13_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO13_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO13_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO13_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO13_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_ss_n // 0x02 -> uart0_rx // 0x03 -> i2c0_scl // 0x04 -> pwm_b_6 // 0x05 -> sio_13 // 0x06 -> pio0_13 // 0x07 -> pio1_13 // 0x08 -> usb_muxing_extphy_vpo // 0x09 -> usb_muxing_vbus_detect // 0x1f -> null #define IO_BANK0_GPIO13_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO13_CTRL_FUNCSEL_VALUE_SPI1_SS_N _u(0x01) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_VALUE_UART0_RX _u(0x02) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_VALUE_I2C0_SCL _u(0x03) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_VALUE_PWM_B_6 _u(0x04) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_VALUE_SIO_13 _u(0x05) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_VALUE_PIO0_13 _u(0x06) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_VALUE_PIO1_13 _u(0x07) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_VALUE_USB_MUXING_EXTPHY_VPO _u(0x08) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_DETECT _u(0x09) #define IO_BANK0_GPIO13_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO14_STATUS // Description : GPIO status #define IO_BANK0_GPIO14_STATUS_OFFSET _u(0x00000070) #define IO_BANK0_GPIO14_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO14_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO14_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO14_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO14_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO14_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO14_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO14_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO14_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO14_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO14_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO14_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO14_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO14_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO14_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO14_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO14_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO14_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO14_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO14_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO14_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO14_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO14_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO14_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO14_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO14_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO14_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO14_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO14_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO14_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO14_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO14_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO14_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO14_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO14_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO14_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO14_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO14_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO14_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO14_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO14_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO14_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO14_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO14_CTRL_OFFSET _u(0x00000074) #define IO_BANK0_GPIO14_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO14_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO14_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO14_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO14_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO14_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO14_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO14_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO14_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO14_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO14_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO14_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO14_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO14_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO14_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO14_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO14_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO14_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO14_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO14_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO14_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO14_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO14_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO14_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO14_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO14_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO14_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO14_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO14_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO14_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO14_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO14_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO14_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO14_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO14_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO14_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO14_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO14_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO14_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_sclk // 0x02 -> uart0_cts // 0x03 -> i2c1_sda // 0x04 -> pwm_a_7 // 0x05 -> sio_14 // 0x06 -> pio0_14 // 0x07 -> pio1_14 // 0x08 -> usb_muxing_extphy_vmo // 0x09 -> usb_muxing_vbus_en // 0x1f -> null #define IO_BANK0_GPIO14_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO14_CTRL_FUNCSEL_VALUE_SPI1_SCLK _u(0x01) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_VALUE_UART0_CTS _u(0x02) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_VALUE_I2C1_SDA _u(0x03) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_VALUE_PWM_A_7 _u(0x04) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_VALUE_SIO_14 _u(0x05) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_VALUE_PIO0_14 _u(0x06) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_VALUE_PIO1_14 _u(0x07) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_VALUE_USB_MUXING_EXTPHY_VMO _u(0x08) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_EN _u(0x09) #define IO_BANK0_GPIO14_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO15_STATUS // Description : GPIO status #define IO_BANK0_GPIO15_STATUS_OFFSET _u(0x00000078) #define IO_BANK0_GPIO15_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO15_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO15_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO15_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO15_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO15_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO15_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO15_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO15_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO15_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO15_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO15_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO15_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO15_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO15_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO15_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO15_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO15_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO15_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO15_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO15_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO15_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO15_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO15_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO15_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO15_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO15_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO15_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO15_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO15_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO15_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO15_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO15_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO15_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO15_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO15_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO15_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO15_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO15_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO15_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO15_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO15_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO15_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO15_CTRL_OFFSET _u(0x0000007c) #define IO_BANK0_GPIO15_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO15_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO15_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO15_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO15_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO15_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO15_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO15_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO15_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO15_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO15_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO15_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO15_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO15_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO15_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO15_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO15_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO15_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO15_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO15_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO15_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO15_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO15_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO15_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO15_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO15_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO15_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO15_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO15_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO15_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO15_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO15_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO15_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO15_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO15_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO15_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO15_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO15_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO15_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_tx // 0x02 -> uart0_rts // 0x03 -> i2c1_scl // 0x04 -> pwm_b_7 // 0x05 -> sio_15 // 0x06 -> pio0_15 // 0x07 -> pio1_15 // 0x08 -> usb_muxing_digital_dp // 0x09 -> usb_muxing_overcurr_detect // 0x1f -> null #define IO_BANK0_GPIO15_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO15_CTRL_FUNCSEL_VALUE_SPI1_TX _u(0x01) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_VALUE_UART0_RTS _u(0x02) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_VALUE_I2C1_SCL _u(0x03) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_VALUE_PWM_B_7 _u(0x04) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_VALUE_SIO_15 _u(0x05) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_VALUE_PIO0_15 _u(0x06) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_VALUE_PIO1_15 _u(0x07) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_VALUE_USB_MUXING_DIGITAL_DP _u(0x08) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_VALUE_USB_MUXING_OVERCURR_DETECT _u(0x09) #define IO_BANK0_GPIO15_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO16_STATUS // Description : GPIO status #define IO_BANK0_GPIO16_STATUS_OFFSET _u(0x00000080) #define IO_BANK0_GPIO16_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO16_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO16_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO16_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO16_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO16_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO16_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO16_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO16_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO16_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO16_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO16_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO16_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO16_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO16_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO16_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO16_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO16_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO16_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO16_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO16_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO16_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO16_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO16_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO16_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO16_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO16_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO16_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO16_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO16_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO16_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO16_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO16_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO16_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO16_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO16_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO16_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO16_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO16_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO16_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO16_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO16_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO16_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO16_CTRL_OFFSET _u(0x00000084) #define IO_BANK0_GPIO16_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO16_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO16_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO16_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO16_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO16_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO16_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO16_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO16_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO16_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO16_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO16_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO16_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO16_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO16_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO16_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO16_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO16_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO16_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO16_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO16_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO16_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO16_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO16_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO16_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO16_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO16_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO16_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO16_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO16_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO16_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO16_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO16_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO16_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO16_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO16_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO16_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO16_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO16_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_rx // 0x02 -> uart0_tx // 0x03 -> i2c0_sda // 0x04 -> pwm_a_0 // 0x05 -> sio_16 // 0x06 -> pio0_16 // 0x07 -> pio1_16 // 0x08 -> usb_muxing_digital_dm // 0x09 -> usb_muxing_vbus_detect // 0x1f -> null #define IO_BANK0_GPIO16_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO16_CTRL_FUNCSEL_VALUE_SPI0_RX _u(0x01) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_VALUE_UART0_TX _u(0x02) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_VALUE_I2C0_SDA _u(0x03) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_VALUE_PWM_A_0 _u(0x04) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_VALUE_SIO_16 _u(0x05) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_VALUE_PIO0_16 _u(0x06) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_VALUE_PIO1_16 _u(0x07) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_VALUE_USB_MUXING_DIGITAL_DM _u(0x08) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_DETECT _u(0x09) #define IO_BANK0_GPIO16_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO17_STATUS // Description : GPIO status #define IO_BANK0_GPIO17_STATUS_OFFSET _u(0x00000088) #define IO_BANK0_GPIO17_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO17_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO17_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO17_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO17_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO17_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO17_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO17_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO17_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO17_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO17_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO17_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO17_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO17_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO17_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO17_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO17_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO17_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO17_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO17_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO17_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO17_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO17_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO17_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO17_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO17_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO17_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO17_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO17_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO17_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO17_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO17_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO17_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO17_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO17_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO17_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO17_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO17_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO17_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO17_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO17_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO17_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO17_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO17_CTRL_OFFSET _u(0x0000008c) #define IO_BANK0_GPIO17_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO17_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO17_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO17_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO17_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO17_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO17_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO17_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO17_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO17_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO17_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO17_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO17_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO17_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO17_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO17_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO17_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO17_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO17_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO17_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO17_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO17_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO17_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO17_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO17_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO17_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO17_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO17_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO17_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO17_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO17_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO17_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO17_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO17_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO17_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO17_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO17_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO17_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO17_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_ss_n // 0x02 -> uart0_rx // 0x03 -> i2c0_scl // 0x04 -> pwm_b_0 // 0x05 -> sio_17 // 0x06 -> pio0_17 // 0x07 -> pio1_17 // 0x09 -> usb_muxing_vbus_en // 0x1f -> null #define IO_BANK0_GPIO17_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO17_CTRL_FUNCSEL_VALUE_SPI0_SS_N _u(0x01) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_VALUE_UART0_RX _u(0x02) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_VALUE_I2C0_SCL _u(0x03) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_VALUE_PWM_B_0 _u(0x04) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_VALUE_SIO_17 _u(0x05) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_VALUE_PIO0_17 _u(0x06) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_VALUE_PIO1_17 _u(0x07) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_EN _u(0x09) #define IO_BANK0_GPIO17_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO18_STATUS // Description : GPIO status #define IO_BANK0_GPIO18_STATUS_OFFSET _u(0x00000090) #define IO_BANK0_GPIO18_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO18_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO18_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO18_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO18_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO18_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO18_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO18_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO18_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO18_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO18_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO18_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO18_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO18_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO18_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO18_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO18_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO18_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO18_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO18_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO18_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO18_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO18_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO18_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO18_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO18_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO18_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO18_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO18_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO18_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO18_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO18_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO18_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO18_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO18_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO18_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO18_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO18_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO18_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO18_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO18_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO18_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO18_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO18_CTRL_OFFSET _u(0x00000094) #define IO_BANK0_GPIO18_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO18_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO18_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO18_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO18_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO18_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO18_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO18_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO18_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO18_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO18_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO18_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO18_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO18_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO18_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO18_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO18_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO18_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO18_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO18_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO18_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO18_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO18_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO18_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO18_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO18_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO18_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO18_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO18_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO18_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO18_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO18_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO18_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO18_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO18_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO18_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO18_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO18_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO18_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_sclk // 0x02 -> uart0_cts // 0x03 -> i2c1_sda // 0x04 -> pwm_a_1 // 0x05 -> sio_18 // 0x06 -> pio0_18 // 0x07 -> pio1_18 // 0x09 -> usb_muxing_overcurr_detect // 0x1f -> null #define IO_BANK0_GPIO18_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO18_CTRL_FUNCSEL_VALUE_SPI0_SCLK _u(0x01) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_VALUE_UART0_CTS _u(0x02) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_VALUE_I2C1_SDA _u(0x03) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_VALUE_PWM_A_1 _u(0x04) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_VALUE_SIO_18 _u(0x05) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_VALUE_PIO0_18 _u(0x06) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_VALUE_PIO1_18 _u(0x07) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_VALUE_USB_MUXING_OVERCURR_DETECT _u(0x09) #define IO_BANK0_GPIO18_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO19_STATUS // Description : GPIO status #define IO_BANK0_GPIO19_STATUS_OFFSET _u(0x00000098) #define IO_BANK0_GPIO19_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO19_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO19_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO19_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO19_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO19_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO19_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO19_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO19_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO19_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO19_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO19_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO19_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO19_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO19_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO19_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO19_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO19_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO19_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO19_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO19_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO19_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO19_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO19_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO19_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO19_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO19_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO19_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO19_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO19_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO19_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO19_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO19_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO19_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO19_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO19_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO19_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO19_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO19_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO19_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO19_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO19_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO19_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO19_CTRL_OFFSET _u(0x0000009c) #define IO_BANK0_GPIO19_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO19_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO19_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO19_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO19_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO19_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO19_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO19_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO19_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO19_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO19_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO19_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO19_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO19_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO19_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO19_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO19_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO19_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO19_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO19_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO19_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO19_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO19_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO19_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO19_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO19_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO19_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO19_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO19_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO19_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO19_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO19_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO19_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO19_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO19_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO19_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO19_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO19_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO19_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_tx // 0x02 -> uart0_rts // 0x03 -> i2c1_scl // 0x04 -> pwm_b_1 // 0x05 -> sio_19 // 0x06 -> pio0_19 // 0x07 -> pio1_19 // 0x09 -> usb_muxing_vbus_detect // 0x1f -> null #define IO_BANK0_GPIO19_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO19_CTRL_FUNCSEL_VALUE_SPI0_TX _u(0x01) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_VALUE_UART0_RTS _u(0x02) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_VALUE_I2C1_SCL _u(0x03) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_VALUE_PWM_B_1 _u(0x04) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_VALUE_SIO_19 _u(0x05) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_VALUE_PIO0_19 _u(0x06) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_VALUE_PIO1_19 _u(0x07) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_DETECT _u(0x09) #define IO_BANK0_GPIO19_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO20_STATUS // Description : GPIO status #define IO_BANK0_GPIO20_STATUS_OFFSET _u(0x000000a0) #define IO_BANK0_GPIO20_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO20_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO20_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO20_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO20_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO20_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO20_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO20_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO20_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO20_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO20_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO20_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO20_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO20_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO20_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO20_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO20_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO20_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO20_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO20_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO20_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO20_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO20_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO20_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO20_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO20_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO20_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO20_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO20_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO20_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO20_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO20_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO20_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO20_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO20_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO20_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO20_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO20_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO20_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO20_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO20_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO20_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO20_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO20_CTRL_OFFSET _u(0x000000a4) #define IO_BANK0_GPIO20_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO20_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO20_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO20_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO20_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO20_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO20_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO20_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO20_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO20_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO20_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO20_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO20_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO20_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO20_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO20_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO20_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO20_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO20_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO20_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO20_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO20_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO20_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO20_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO20_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO20_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO20_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO20_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO20_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO20_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO20_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO20_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO20_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO20_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO20_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO20_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO20_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO20_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO20_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_rx // 0x02 -> uart1_tx // 0x03 -> i2c0_sda // 0x04 -> pwm_a_2 // 0x05 -> sio_20 // 0x06 -> pio0_20 // 0x07 -> pio1_20 // 0x08 -> clocks_gpin_0 // 0x09 -> usb_muxing_vbus_en // 0x1f -> null #define IO_BANK0_GPIO20_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO20_CTRL_FUNCSEL_VALUE_SPI0_RX _u(0x01) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_VALUE_UART1_TX _u(0x02) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_VALUE_I2C0_SDA _u(0x03) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_VALUE_PWM_A_2 _u(0x04) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_VALUE_SIO_20 _u(0x05) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_VALUE_PIO0_20 _u(0x06) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_VALUE_PIO1_20 _u(0x07) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_VALUE_CLOCKS_GPIN_0 _u(0x08) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_EN _u(0x09) #define IO_BANK0_GPIO20_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO21_STATUS // Description : GPIO status #define IO_BANK0_GPIO21_STATUS_OFFSET _u(0x000000a8) #define IO_BANK0_GPIO21_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO21_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO21_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO21_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO21_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO21_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO21_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO21_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO21_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO21_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO21_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO21_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO21_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO21_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO21_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO21_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO21_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO21_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO21_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO21_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO21_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO21_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO21_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO21_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO21_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO21_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO21_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO21_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO21_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO21_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO21_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO21_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO21_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO21_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO21_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO21_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO21_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO21_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO21_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO21_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO21_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO21_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO21_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO21_CTRL_OFFSET _u(0x000000ac) #define IO_BANK0_GPIO21_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO21_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO21_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO21_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO21_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO21_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO21_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO21_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO21_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO21_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO21_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO21_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO21_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO21_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO21_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO21_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO21_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO21_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO21_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO21_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO21_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO21_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO21_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO21_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO21_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO21_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO21_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO21_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO21_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO21_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO21_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO21_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO21_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO21_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO21_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO21_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO21_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO21_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO21_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_ss_n // 0x02 -> uart1_rx // 0x03 -> i2c0_scl // 0x04 -> pwm_b_2 // 0x05 -> sio_21 // 0x06 -> pio0_21 // 0x07 -> pio1_21 // 0x08 -> clocks_gpout_0 // 0x09 -> usb_muxing_overcurr_detect // 0x1f -> null #define IO_BANK0_GPIO21_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO21_CTRL_FUNCSEL_VALUE_SPI0_SS_N _u(0x01) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_VALUE_UART1_RX _u(0x02) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_VALUE_I2C0_SCL _u(0x03) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_VALUE_PWM_B_2 _u(0x04) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_VALUE_SIO_21 _u(0x05) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_VALUE_PIO0_21 _u(0x06) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_VALUE_PIO1_21 _u(0x07) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_VALUE_CLOCKS_GPOUT_0 _u(0x08) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_VALUE_USB_MUXING_OVERCURR_DETECT _u(0x09) #define IO_BANK0_GPIO21_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO22_STATUS // Description : GPIO status #define IO_BANK0_GPIO22_STATUS_OFFSET _u(0x000000b0) #define IO_BANK0_GPIO22_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO22_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO22_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO22_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO22_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO22_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO22_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO22_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO22_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO22_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO22_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO22_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO22_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO22_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO22_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO22_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO22_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO22_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO22_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO22_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO22_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO22_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO22_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO22_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO22_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO22_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO22_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO22_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO22_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO22_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO22_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO22_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO22_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO22_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO22_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO22_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO22_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO22_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO22_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO22_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO22_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO22_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO22_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO22_CTRL_OFFSET _u(0x000000b4) #define IO_BANK0_GPIO22_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO22_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO22_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO22_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO22_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO22_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO22_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO22_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO22_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO22_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO22_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO22_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO22_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO22_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO22_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO22_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO22_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO22_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO22_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO22_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO22_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO22_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO22_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO22_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO22_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO22_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO22_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO22_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO22_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO22_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO22_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO22_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO22_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO22_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO22_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO22_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO22_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO22_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO22_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_sclk // 0x02 -> uart1_cts // 0x03 -> i2c1_sda // 0x04 -> pwm_a_3 // 0x05 -> sio_22 // 0x06 -> pio0_22 // 0x07 -> pio1_22 // 0x08 -> clocks_gpin_1 // 0x09 -> usb_muxing_vbus_detect // 0x1f -> null #define IO_BANK0_GPIO22_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO22_CTRL_FUNCSEL_VALUE_SPI0_SCLK _u(0x01) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_VALUE_UART1_CTS _u(0x02) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_VALUE_I2C1_SDA _u(0x03) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_VALUE_PWM_A_3 _u(0x04) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_VALUE_SIO_22 _u(0x05) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_VALUE_PIO0_22 _u(0x06) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_VALUE_PIO1_22 _u(0x07) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_VALUE_CLOCKS_GPIN_1 _u(0x08) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_DETECT _u(0x09) #define IO_BANK0_GPIO22_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO23_STATUS // Description : GPIO status #define IO_BANK0_GPIO23_STATUS_OFFSET _u(0x000000b8) #define IO_BANK0_GPIO23_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO23_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO23_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO23_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO23_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO23_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO23_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO23_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO23_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO23_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO23_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO23_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO23_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO23_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO23_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO23_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO23_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO23_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO23_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO23_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO23_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO23_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO23_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO23_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO23_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO23_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO23_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO23_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO23_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO23_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO23_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO23_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO23_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO23_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO23_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO23_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO23_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO23_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO23_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO23_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO23_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO23_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO23_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO23_CTRL_OFFSET _u(0x000000bc) #define IO_BANK0_GPIO23_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO23_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO23_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO23_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO23_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO23_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO23_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO23_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO23_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO23_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO23_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO23_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO23_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO23_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO23_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO23_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO23_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO23_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO23_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO23_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO23_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO23_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO23_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO23_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO23_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO23_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO23_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO23_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO23_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO23_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO23_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO23_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO23_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO23_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO23_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO23_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO23_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO23_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO23_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi0_tx // 0x02 -> uart1_rts // 0x03 -> i2c1_scl // 0x04 -> pwm_b_3 // 0x05 -> sio_23 // 0x06 -> pio0_23 // 0x07 -> pio1_23 // 0x08 -> clocks_gpout_1 // 0x09 -> usb_muxing_vbus_en // 0x1f -> null #define IO_BANK0_GPIO23_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO23_CTRL_FUNCSEL_VALUE_SPI0_TX _u(0x01) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_VALUE_UART1_RTS _u(0x02) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_VALUE_I2C1_SCL _u(0x03) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_VALUE_PWM_B_3 _u(0x04) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_VALUE_SIO_23 _u(0x05) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_VALUE_PIO0_23 _u(0x06) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_VALUE_PIO1_23 _u(0x07) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_VALUE_CLOCKS_GPOUT_1 _u(0x08) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_EN _u(0x09) #define IO_BANK0_GPIO23_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO24_STATUS // Description : GPIO status #define IO_BANK0_GPIO24_STATUS_OFFSET _u(0x000000c0) #define IO_BANK0_GPIO24_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO24_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO24_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO24_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO24_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO24_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO24_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO24_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO24_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO24_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO24_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO24_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO24_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO24_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO24_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO24_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO24_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO24_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO24_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO24_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO24_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO24_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO24_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO24_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO24_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO24_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO24_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO24_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO24_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO24_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO24_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO24_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO24_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO24_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO24_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO24_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO24_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO24_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO24_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO24_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO24_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO24_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO24_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO24_CTRL_OFFSET _u(0x000000c4) #define IO_BANK0_GPIO24_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO24_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO24_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO24_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO24_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO24_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO24_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO24_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO24_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO24_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO24_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO24_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO24_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO24_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO24_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO24_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO24_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO24_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO24_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO24_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO24_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO24_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO24_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO24_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO24_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO24_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO24_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO24_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO24_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO24_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO24_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO24_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO24_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO24_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO24_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO24_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO24_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO24_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO24_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_rx // 0x02 -> uart1_tx // 0x03 -> i2c0_sda // 0x04 -> pwm_a_4 // 0x05 -> sio_24 // 0x06 -> pio0_24 // 0x07 -> pio1_24 // 0x08 -> clocks_gpout_2 // 0x09 -> usb_muxing_overcurr_detect // 0x1f -> null #define IO_BANK0_GPIO24_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO24_CTRL_FUNCSEL_VALUE_SPI1_RX _u(0x01) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_VALUE_UART1_TX _u(0x02) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_VALUE_I2C0_SDA _u(0x03) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_VALUE_PWM_A_4 _u(0x04) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_VALUE_SIO_24 _u(0x05) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_VALUE_PIO0_24 _u(0x06) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_VALUE_PIO1_24 _u(0x07) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_VALUE_CLOCKS_GPOUT_2 _u(0x08) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_VALUE_USB_MUXING_OVERCURR_DETECT _u(0x09) #define IO_BANK0_GPIO24_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO25_STATUS // Description : GPIO status #define IO_BANK0_GPIO25_STATUS_OFFSET _u(0x000000c8) #define IO_BANK0_GPIO25_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO25_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO25_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO25_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO25_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO25_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO25_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO25_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO25_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO25_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO25_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO25_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO25_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO25_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO25_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO25_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO25_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO25_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO25_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO25_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO25_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO25_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO25_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO25_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO25_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO25_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO25_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO25_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO25_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO25_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO25_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO25_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO25_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO25_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO25_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO25_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO25_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO25_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO25_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO25_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO25_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO25_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO25_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO25_CTRL_OFFSET _u(0x000000cc) #define IO_BANK0_GPIO25_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO25_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO25_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO25_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO25_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO25_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO25_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO25_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO25_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO25_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO25_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO25_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO25_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO25_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO25_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO25_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO25_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO25_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO25_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO25_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO25_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO25_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO25_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO25_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO25_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO25_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO25_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO25_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO25_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO25_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO25_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO25_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO25_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO25_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO25_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO25_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO25_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO25_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO25_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_ss_n // 0x02 -> uart1_rx // 0x03 -> i2c0_scl // 0x04 -> pwm_b_4 // 0x05 -> sio_25 // 0x06 -> pio0_25 // 0x07 -> pio1_25 // 0x08 -> clocks_gpout_3 // 0x09 -> usb_muxing_vbus_detect // 0x1f -> null #define IO_BANK0_GPIO25_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO25_CTRL_FUNCSEL_VALUE_SPI1_SS_N _u(0x01) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_VALUE_UART1_RX _u(0x02) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_VALUE_I2C0_SCL _u(0x03) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_VALUE_PWM_B_4 _u(0x04) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_VALUE_SIO_25 _u(0x05) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_VALUE_PIO0_25 _u(0x06) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_VALUE_PIO1_25 _u(0x07) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_VALUE_CLOCKS_GPOUT_3 _u(0x08) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_DETECT _u(0x09) #define IO_BANK0_GPIO25_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO26_STATUS // Description : GPIO status #define IO_BANK0_GPIO26_STATUS_OFFSET _u(0x000000d0) #define IO_BANK0_GPIO26_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO26_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO26_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO26_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO26_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO26_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO26_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO26_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO26_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO26_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO26_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO26_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO26_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO26_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO26_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO26_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO26_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO26_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO26_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO26_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO26_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO26_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO26_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO26_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO26_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO26_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO26_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO26_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO26_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO26_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO26_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO26_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO26_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO26_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO26_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO26_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO26_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO26_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO26_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO26_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO26_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO26_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO26_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO26_CTRL_OFFSET _u(0x000000d4) #define IO_BANK0_GPIO26_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO26_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO26_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO26_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO26_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO26_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO26_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO26_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO26_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO26_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO26_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO26_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO26_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO26_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO26_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO26_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO26_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO26_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO26_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO26_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO26_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO26_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO26_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO26_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO26_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO26_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO26_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO26_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO26_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO26_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO26_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO26_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO26_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO26_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO26_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO26_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO26_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO26_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO26_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_sclk // 0x02 -> uart1_cts // 0x03 -> i2c1_sda // 0x04 -> pwm_a_5 // 0x05 -> sio_26 // 0x06 -> pio0_26 // 0x07 -> pio1_26 // 0x09 -> usb_muxing_vbus_en // 0x1f -> null #define IO_BANK0_GPIO26_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO26_CTRL_FUNCSEL_VALUE_SPI1_SCLK _u(0x01) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_VALUE_UART1_CTS _u(0x02) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_VALUE_I2C1_SDA _u(0x03) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_VALUE_PWM_A_5 _u(0x04) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_VALUE_SIO_26 _u(0x05) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_VALUE_PIO0_26 _u(0x06) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_VALUE_PIO1_26 _u(0x07) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_EN _u(0x09) #define IO_BANK0_GPIO26_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO27_STATUS // Description : GPIO status #define IO_BANK0_GPIO27_STATUS_OFFSET _u(0x000000d8) #define IO_BANK0_GPIO27_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO27_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO27_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO27_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO27_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO27_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO27_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO27_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO27_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO27_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO27_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO27_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO27_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO27_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO27_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO27_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO27_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO27_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO27_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO27_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO27_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO27_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO27_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO27_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO27_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO27_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO27_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO27_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO27_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO27_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO27_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO27_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO27_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO27_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO27_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO27_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO27_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO27_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO27_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO27_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO27_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO27_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO27_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO27_CTRL_OFFSET _u(0x000000dc) #define IO_BANK0_GPIO27_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO27_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO27_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO27_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO27_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO27_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO27_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO27_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO27_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO27_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO27_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO27_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO27_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO27_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO27_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO27_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO27_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO27_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO27_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO27_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO27_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO27_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO27_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO27_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO27_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO27_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO27_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO27_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO27_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO27_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO27_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO27_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO27_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO27_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO27_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO27_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO27_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO27_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO27_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_tx // 0x02 -> uart1_rts // 0x03 -> i2c1_scl // 0x04 -> pwm_b_5 // 0x05 -> sio_27 // 0x06 -> pio0_27 // 0x07 -> pio1_27 // 0x09 -> usb_muxing_overcurr_detect // 0x1f -> null #define IO_BANK0_GPIO27_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO27_CTRL_FUNCSEL_VALUE_SPI1_TX _u(0x01) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_VALUE_UART1_RTS _u(0x02) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_VALUE_I2C1_SCL _u(0x03) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_VALUE_PWM_B_5 _u(0x04) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_VALUE_SIO_27 _u(0x05) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_VALUE_PIO0_27 _u(0x06) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_VALUE_PIO1_27 _u(0x07) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_VALUE_USB_MUXING_OVERCURR_DETECT _u(0x09) #define IO_BANK0_GPIO27_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO28_STATUS // Description : GPIO status #define IO_BANK0_GPIO28_STATUS_OFFSET _u(0x000000e0) #define IO_BANK0_GPIO28_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO28_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO28_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO28_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO28_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO28_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO28_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO28_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO28_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO28_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO28_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO28_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO28_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO28_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO28_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO28_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO28_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO28_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO28_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO28_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO28_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO28_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO28_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO28_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO28_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO28_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO28_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO28_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO28_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO28_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO28_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO28_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO28_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO28_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO28_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO28_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO28_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO28_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO28_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO28_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO28_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO28_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO28_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO28_CTRL_OFFSET _u(0x000000e4) #define IO_BANK0_GPIO28_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO28_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO28_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO28_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO28_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO28_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO28_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO28_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO28_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO28_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO28_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO28_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO28_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO28_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO28_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO28_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO28_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO28_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO28_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO28_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO28_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO28_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO28_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO28_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO28_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO28_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO28_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO28_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO28_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO28_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO28_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO28_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO28_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO28_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO28_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO28_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO28_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO28_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO28_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_rx // 0x02 -> uart0_tx // 0x03 -> i2c0_sda // 0x04 -> pwm_a_6 // 0x05 -> sio_28 // 0x06 -> pio0_28 // 0x07 -> pio1_28 // 0x09 -> usb_muxing_vbus_detect // 0x1f -> null #define IO_BANK0_GPIO28_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO28_CTRL_FUNCSEL_VALUE_SPI1_RX _u(0x01) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_VALUE_UART0_TX _u(0x02) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_VALUE_I2C0_SDA _u(0x03) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_VALUE_PWM_A_6 _u(0x04) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_VALUE_SIO_28 _u(0x05) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_VALUE_PIO0_28 _u(0x06) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_VALUE_PIO1_28 _u(0x07) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_DETECT _u(0x09) #define IO_BANK0_GPIO28_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_GPIO29_STATUS // Description : GPIO status #define IO_BANK0_GPIO29_STATUS_OFFSET _u(0x000000e8) #define IO_BANK0_GPIO29_STATUS_BITS _u(0x050a3300) #define IO_BANK0_GPIO29_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_BANK0_GPIO29_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_BANK0_GPIO29_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_BANK0_GPIO29_STATUS_IRQTOPROC_MSB _u(26) #define IO_BANK0_GPIO29_STATUS_IRQTOPROC_LSB _u(26) #define IO_BANK0_GPIO29_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_BANK0_GPIO29_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO29_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_BANK0_GPIO29_STATUS_IRQFROMPAD_MSB _u(24) #define IO_BANK0_GPIO29_STATUS_IRQFROMPAD_LSB _u(24) #define IO_BANK0_GPIO29_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_BANK0_GPIO29_STATUS_INTOPERI_RESET _u(0x0) #define IO_BANK0_GPIO29_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_BANK0_GPIO29_STATUS_INTOPERI_MSB _u(19) #define IO_BANK0_GPIO29_STATUS_INTOPERI_LSB _u(19) #define IO_BANK0_GPIO29_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_BANK0_GPIO29_STATUS_INFROMPAD_RESET _u(0x0) #define IO_BANK0_GPIO29_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_BANK0_GPIO29_STATUS_INFROMPAD_MSB _u(17) #define IO_BANK0_GPIO29_STATUS_INFROMPAD_LSB _u(17) #define IO_BANK0_GPIO29_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_BANK0_GPIO29_STATUS_OETOPAD_RESET _u(0x0) #define IO_BANK0_GPIO29_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_BANK0_GPIO29_STATUS_OETOPAD_MSB _u(13) #define IO_BANK0_GPIO29_STATUS_OETOPAD_LSB _u(13) #define IO_BANK0_GPIO29_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_BANK0_GPIO29_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO29_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_BANK0_GPIO29_STATUS_OEFROMPERI_MSB _u(12) #define IO_BANK0_GPIO29_STATUS_OEFROMPERI_LSB _u(12) #define IO_BANK0_GPIO29_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_BANK0_GPIO29_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_BANK0_GPIO29_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_BANK0_GPIO29_STATUS_OUTTOPAD_MSB _u(9) #define IO_BANK0_GPIO29_STATUS_OUTTOPAD_LSB _u(9) #define IO_BANK0_GPIO29_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_BANK0_GPIO29_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_BANK0_GPIO29_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_BANK0_GPIO29_STATUS_OUTFROMPERI_MSB _u(8) #define IO_BANK0_GPIO29_STATUS_OUTFROMPERI_LSB _u(8) #define IO_BANK0_GPIO29_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_GPIO29_CTRL // Description : GPIO control including function select and overrides. #define IO_BANK0_GPIO29_CTRL_OFFSET _u(0x000000ec) #define IO_BANK0_GPIO29_CTRL_BITS _u(0x3003331f) #define IO_BANK0_GPIO29_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_BANK0_GPIO29_CTRL_IRQOVER_RESET _u(0x0) #define IO_BANK0_GPIO29_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_BANK0_GPIO29_CTRL_IRQOVER_MSB _u(29) #define IO_BANK0_GPIO29_CTRL_IRQOVER_LSB _u(28) #define IO_BANK0_GPIO29_CTRL_IRQOVER_ACCESS "RW" #define IO_BANK0_GPIO29_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO29_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO29_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO29_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_BANK0_GPIO29_CTRL_INOVER_RESET _u(0x0) #define IO_BANK0_GPIO29_CTRL_INOVER_BITS _u(0x00030000) #define IO_BANK0_GPIO29_CTRL_INOVER_MSB _u(17) #define IO_BANK0_GPIO29_CTRL_INOVER_LSB _u(16) #define IO_BANK0_GPIO29_CTRL_INOVER_ACCESS "RW" #define IO_BANK0_GPIO29_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO29_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO29_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO29_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_BANK0_GPIO29_CTRL_OEOVER_RESET _u(0x0) #define IO_BANK0_GPIO29_CTRL_OEOVER_BITS _u(0x00003000) #define IO_BANK0_GPIO29_CTRL_OEOVER_MSB _u(13) #define IO_BANK0_GPIO29_CTRL_OEOVER_LSB _u(12) #define IO_BANK0_GPIO29_CTRL_OEOVER_ACCESS "RW" #define IO_BANK0_GPIO29_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO29_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO29_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_BANK0_GPIO29_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_BANK0_GPIO29_CTRL_OUTOVER_RESET _u(0x0) #define IO_BANK0_GPIO29_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_BANK0_GPIO29_CTRL_OUTOVER_MSB _u(9) #define IO_BANK0_GPIO29_CTRL_OUTOVER_LSB _u(8) #define IO_BANK0_GPIO29_CTRL_OUTOVER_ACCESS "RW" #define IO_BANK0_GPIO29_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_BANK0_GPIO29_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_BANK0_GPIO29_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_BANK0_GPIO29_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_BANK0_GPIO29_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x01 -> spi1_ss_n // 0x02 -> uart0_rx // 0x03 -> i2c0_scl // 0x04 -> pwm_b_6 // 0x05 -> sio_29 // 0x06 -> pio0_29 // 0x07 -> pio1_29 // 0x09 -> usb_muxing_vbus_en // 0x1f -> null #define IO_BANK0_GPIO29_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_MSB _u(4) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_LSB _u(0) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_ACCESS "RW" #define IO_BANK0_GPIO29_CTRL_FUNCSEL_VALUE_SPI1_SS_N _u(0x01) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_VALUE_UART0_RX _u(0x02) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_VALUE_I2C0_SCL _u(0x03) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_VALUE_PWM_B_6 _u(0x04) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_VALUE_SIO_29 _u(0x05) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_VALUE_PIO0_29 _u(0x06) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_VALUE_PIO1_29 _u(0x07) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_VALUE_USB_MUXING_VBUS_EN _u(0x09) #define IO_BANK0_GPIO29_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_BANK0_INTR0 // Description : Raw Interrupts #define IO_BANK0_INTR0_OFFSET _u(0x000000f0) #define IO_BANK0_INTR0_BITS _u(0xffffffff) #define IO_BANK0_INTR0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO7_EDGE_HIGH // Description : None #define IO_BANK0_INTR0_GPIO7_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO7_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_INTR0_GPIO7_EDGE_HIGH_MSB _u(31) #define IO_BANK0_INTR0_GPIO7_EDGE_HIGH_LSB _u(31) #define IO_BANK0_INTR0_GPIO7_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO7_EDGE_LOW // Description : None #define IO_BANK0_INTR0_GPIO7_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO7_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_INTR0_GPIO7_EDGE_LOW_MSB _u(30) #define IO_BANK0_INTR0_GPIO7_EDGE_LOW_LSB _u(30) #define IO_BANK0_INTR0_GPIO7_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO7_LEVEL_HIGH // Description : None #define IO_BANK0_INTR0_GPIO7_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO7_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_INTR0_GPIO7_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_INTR0_GPIO7_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_INTR0_GPIO7_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO7_LEVEL_LOW // Description : None #define IO_BANK0_INTR0_GPIO7_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO7_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_INTR0_GPIO7_LEVEL_LOW_MSB _u(28) #define IO_BANK0_INTR0_GPIO7_LEVEL_LOW_LSB _u(28) #define IO_BANK0_INTR0_GPIO7_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO6_EDGE_HIGH // Description : None #define IO_BANK0_INTR0_GPIO6_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO6_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_INTR0_GPIO6_EDGE_HIGH_MSB _u(27) #define IO_BANK0_INTR0_GPIO6_EDGE_HIGH_LSB _u(27) #define IO_BANK0_INTR0_GPIO6_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO6_EDGE_LOW // Description : None #define IO_BANK0_INTR0_GPIO6_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO6_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_INTR0_GPIO6_EDGE_LOW_MSB _u(26) #define IO_BANK0_INTR0_GPIO6_EDGE_LOW_LSB _u(26) #define IO_BANK0_INTR0_GPIO6_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO6_LEVEL_HIGH // Description : None #define IO_BANK0_INTR0_GPIO6_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO6_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_INTR0_GPIO6_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_INTR0_GPIO6_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_INTR0_GPIO6_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO6_LEVEL_LOW // Description : None #define IO_BANK0_INTR0_GPIO6_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO6_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_INTR0_GPIO6_LEVEL_LOW_MSB _u(24) #define IO_BANK0_INTR0_GPIO6_LEVEL_LOW_LSB _u(24) #define IO_BANK0_INTR0_GPIO6_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO5_EDGE_HIGH // Description : None #define IO_BANK0_INTR0_GPIO5_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO5_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_INTR0_GPIO5_EDGE_HIGH_MSB _u(23) #define IO_BANK0_INTR0_GPIO5_EDGE_HIGH_LSB _u(23) #define IO_BANK0_INTR0_GPIO5_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO5_EDGE_LOW // Description : None #define IO_BANK0_INTR0_GPIO5_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO5_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_INTR0_GPIO5_EDGE_LOW_MSB _u(22) #define IO_BANK0_INTR0_GPIO5_EDGE_LOW_LSB _u(22) #define IO_BANK0_INTR0_GPIO5_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO5_LEVEL_HIGH // Description : None #define IO_BANK0_INTR0_GPIO5_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO5_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_INTR0_GPIO5_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_INTR0_GPIO5_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_INTR0_GPIO5_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO5_LEVEL_LOW // Description : None #define IO_BANK0_INTR0_GPIO5_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO5_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_INTR0_GPIO5_LEVEL_LOW_MSB _u(20) #define IO_BANK0_INTR0_GPIO5_LEVEL_LOW_LSB _u(20) #define IO_BANK0_INTR0_GPIO5_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO4_EDGE_HIGH // Description : None #define IO_BANK0_INTR0_GPIO4_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO4_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_INTR0_GPIO4_EDGE_HIGH_MSB _u(19) #define IO_BANK0_INTR0_GPIO4_EDGE_HIGH_LSB _u(19) #define IO_BANK0_INTR0_GPIO4_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO4_EDGE_LOW // Description : None #define IO_BANK0_INTR0_GPIO4_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO4_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_INTR0_GPIO4_EDGE_LOW_MSB _u(18) #define IO_BANK0_INTR0_GPIO4_EDGE_LOW_LSB _u(18) #define IO_BANK0_INTR0_GPIO4_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO4_LEVEL_HIGH // Description : None #define IO_BANK0_INTR0_GPIO4_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO4_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_INTR0_GPIO4_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_INTR0_GPIO4_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_INTR0_GPIO4_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO4_LEVEL_LOW // Description : None #define IO_BANK0_INTR0_GPIO4_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO4_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_INTR0_GPIO4_LEVEL_LOW_MSB _u(16) #define IO_BANK0_INTR0_GPIO4_LEVEL_LOW_LSB _u(16) #define IO_BANK0_INTR0_GPIO4_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO3_EDGE_HIGH // Description : None #define IO_BANK0_INTR0_GPIO3_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO3_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_INTR0_GPIO3_EDGE_HIGH_MSB _u(15) #define IO_BANK0_INTR0_GPIO3_EDGE_HIGH_LSB _u(15) #define IO_BANK0_INTR0_GPIO3_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO3_EDGE_LOW // Description : None #define IO_BANK0_INTR0_GPIO3_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO3_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_INTR0_GPIO3_EDGE_LOW_MSB _u(14) #define IO_BANK0_INTR0_GPIO3_EDGE_LOW_LSB _u(14) #define IO_BANK0_INTR0_GPIO3_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO3_LEVEL_HIGH // Description : None #define IO_BANK0_INTR0_GPIO3_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO3_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_INTR0_GPIO3_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_INTR0_GPIO3_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_INTR0_GPIO3_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO3_LEVEL_LOW // Description : None #define IO_BANK0_INTR0_GPIO3_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO3_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_INTR0_GPIO3_LEVEL_LOW_MSB _u(12) #define IO_BANK0_INTR0_GPIO3_LEVEL_LOW_LSB _u(12) #define IO_BANK0_INTR0_GPIO3_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO2_EDGE_HIGH // Description : None #define IO_BANK0_INTR0_GPIO2_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO2_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_INTR0_GPIO2_EDGE_HIGH_MSB _u(11) #define IO_BANK0_INTR0_GPIO2_EDGE_HIGH_LSB _u(11) #define IO_BANK0_INTR0_GPIO2_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO2_EDGE_LOW // Description : None #define IO_BANK0_INTR0_GPIO2_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO2_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_INTR0_GPIO2_EDGE_LOW_MSB _u(10) #define IO_BANK0_INTR0_GPIO2_EDGE_LOW_LSB _u(10) #define IO_BANK0_INTR0_GPIO2_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO2_LEVEL_HIGH // Description : None #define IO_BANK0_INTR0_GPIO2_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO2_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_INTR0_GPIO2_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_INTR0_GPIO2_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_INTR0_GPIO2_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO2_LEVEL_LOW // Description : None #define IO_BANK0_INTR0_GPIO2_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO2_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_INTR0_GPIO2_LEVEL_LOW_MSB _u(8) #define IO_BANK0_INTR0_GPIO2_LEVEL_LOW_LSB _u(8) #define IO_BANK0_INTR0_GPIO2_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO1_EDGE_HIGH // Description : None #define IO_BANK0_INTR0_GPIO1_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO1_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_INTR0_GPIO1_EDGE_HIGH_MSB _u(7) #define IO_BANK0_INTR0_GPIO1_EDGE_HIGH_LSB _u(7) #define IO_BANK0_INTR0_GPIO1_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO1_EDGE_LOW // Description : None #define IO_BANK0_INTR0_GPIO1_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO1_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_INTR0_GPIO1_EDGE_LOW_MSB _u(6) #define IO_BANK0_INTR0_GPIO1_EDGE_LOW_LSB _u(6) #define IO_BANK0_INTR0_GPIO1_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO1_LEVEL_HIGH // Description : None #define IO_BANK0_INTR0_GPIO1_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO1_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_INTR0_GPIO1_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_INTR0_GPIO1_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_INTR0_GPIO1_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO1_LEVEL_LOW // Description : None #define IO_BANK0_INTR0_GPIO1_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO1_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_INTR0_GPIO1_LEVEL_LOW_MSB _u(4) #define IO_BANK0_INTR0_GPIO1_LEVEL_LOW_LSB _u(4) #define IO_BANK0_INTR0_GPIO1_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO0_EDGE_HIGH // Description : None #define IO_BANK0_INTR0_GPIO0_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO0_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_INTR0_GPIO0_EDGE_HIGH_MSB _u(3) #define IO_BANK0_INTR0_GPIO0_EDGE_HIGH_LSB _u(3) #define IO_BANK0_INTR0_GPIO0_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO0_EDGE_LOW // Description : None #define IO_BANK0_INTR0_GPIO0_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO0_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_INTR0_GPIO0_EDGE_LOW_MSB _u(2) #define IO_BANK0_INTR0_GPIO0_EDGE_LOW_LSB _u(2) #define IO_BANK0_INTR0_GPIO0_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO0_LEVEL_HIGH // Description : None #define IO_BANK0_INTR0_GPIO0_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO0_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_INTR0_GPIO0_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_INTR0_GPIO0_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_INTR0_GPIO0_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR0_GPIO0_LEVEL_LOW // Description : None #define IO_BANK0_INTR0_GPIO0_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR0_GPIO0_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_INTR0_GPIO0_LEVEL_LOW_MSB _u(0) #define IO_BANK0_INTR0_GPIO0_LEVEL_LOW_LSB _u(0) #define IO_BANK0_INTR0_GPIO0_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_INTR1 // Description : Raw Interrupts #define IO_BANK0_INTR1_OFFSET _u(0x000000f4) #define IO_BANK0_INTR1_BITS _u(0xffffffff) #define IO_BANK0_INTR1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO15_EDGE_HIGH // Description : None #define IO_BANK0_INTR1_GPIO15_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO15_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_INTR1_GPIO15_EDGE_HIGH_MSB _u(31) #define IO_BANK0_INTR1_GPIO15_EDGE_HIGH_LSB _u(31) #define IO_BANK0_INTR1_GPIO15_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO15_EDGE_LOW // Description : None #define IO_BANK0_INTR1_GPIO15_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO15_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_INTR1_GPIO15_EDGE_LOW_MSB _u(30) #define IO_BANK0_INTR1_GPIO15_EDGE_LOW_LSB _u(30) #define IO_BANK0_INTR1_GPIO15_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO15_LEVEL_HIGH // Description : None #define IO_BANK0_INTR1_GPIO15_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO15_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_INTR1_GPIO15_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_INTR1_GPIO15_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_INTR1_GPIO15_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO15_LEVEL_LOW // Description : None #define IO_BANK0_INTR1_GPIO15_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO15_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_INTR1_GPIO15_LEVEL_LOW_MSB _u(28) #define IO_BANK0_INTR1_GPIO15_LEVEL_LOW_LSB _u(28) #define IO_BANK0_INTR1_GPIO15_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO14_EDGE_HIGH // Description : None #define IO_BANK0_INTR1_GPIO14_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO14_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_INTR1_GPIO14_EDGE_HIGH_MSB _u(27) #define IO_BANK0_INTR1_GPIO14_EDGE_HIGH_LSB _u(27) #define IO_BANK0_INTR1_GPIO14_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO14_EDGE_LOW // Description : None #define IO_BANK0_INTR1_GPIO14_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO14_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_INTR1_GPIO14_EDGE_LOW_MSB _u(26) #define IO_BANK0_INTR1_GPIO14_EDGE_LOW_LSB _u(26) #define IO_BANK0_INTR1_GPIO14_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO14_LEVEL_HIGH // Description : None #define IO_BANK0_INTR1_GPIO14_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO14_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_INTR1_GPIO14_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_INTR1_GPIO14_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_INTR1_GPIO14_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO14_LEVEL_LOW // Description : None #define IO_BANK0_INTR1_GPIO14_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO14_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_INTR1_GPIO14_LEVEL_LOW_MSB _u(24) #define IO_BANK0_INTR1_GPIO14_LEVEL_LOW_LSB _u(24) #define IO_BANK0_INTR1_GPIO14_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO13_EDGE_HIGH // Description : None #define IO_BANK0_INTR1_GPIO13_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO13_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_INTR1_GPIO13_EDGE_HIGH_MSB _u(23) #define IO_BANK0_INTR1_GPIO13_EDGE_HIGH_LSB _u(23) #define IO_BANK0_INTR1_GPIO13_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO13_EDGE_LOW // Description : None #define IO_BANK0_INTR1_GPIO13_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO13_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_INTR1_GPIO13_EDGE_LOW_MSB _u(22) #define IO_BANK0_INTR1_GPIO13_EDGE_LOW_LSB _u(22) #define IO_BANK0_INTR1_GPIO13_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO13_LEVEL_HIGH // Description : None #define IO_BANK0_INTR1_GPIO13_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO13_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_INTR1_GPIO13_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_INTR1_GPIO13_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_INTR1_GPIO13_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO13_LEVEL_LOW // Description : None #define IO_BANK0_INTR1_GPIO13_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO13_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_INTR1_GPIO13_LEVEL_LOW_MSB _u(20) #define IO_BANK0_INTR1_GPIO13_LEVEL_LOW_LSB _u(20) #define IO_BANK0_INTR1_GPIO13_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO12_EDGE_HIGH // Description : None #define IO_BANK0_INTR1_GPIO12_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO12_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_INTR1_GPIO12_EDGE_HIGH_MSB _u(19) #define IO_BANK0_INTR1_GPIO12_EDGE_HIGH_LSB _u(19) #define IO_BANK0_INTR1_GPIO12_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO12_EDGE_LOW // Description : None #define IO_BANK0_INTR1_GPIO12_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO12_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_INTR1_GPIO12_EDGE_LOW_MSB _u(18) #define IO_BANK0_INTR1_GPIO12_EDGE_LOW_LSB _u(18) #define IO_BANK0_INTR1_GPIO12_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO12_LEVEL_HIGH // Description : None #define IO_BANK0_INTR1_GPIO12_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO12_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_INTR1_GPIO12_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_INTR1_GPIO12_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_INTR1_GPIO12_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO12_LEVEL_LOW // Description : None #define IO_BANK0_INTR1_GPIO12_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO12_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_INTR1_GPIO12_LEVEL_LOW_MSB _u(16) #define IO_BANK0_INTR1_GPIO12_LEVEL_LOW_LSB _u(16) #define IO_BANK0_INTR1_GPIO12_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO11_EDGE_HIGH // Description : None #define IO_BANK0_INTR1_GPIO11_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO11_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_INTR1_GPIO11_EDGE_HIGH_MSB _u(15) #define IO_BANK0_INTR1_GPIO11_EDGE_HIGH_LSB _u(15) #define IO_BANK0_INTR1_GPIO11_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO11_EDGE_LOW // Description : None #define IO_BANK0_INTR1_GPIO11_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO11_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_INTR1_GPIO11_EDGE_LOW_MSB _u(14) #define IO_BANK0_INTR1_GPIO11_EDGE_LOW_LSB _u(14) #define IO_BANK0_INTR1_GPIO11_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO11_LEVEL_HIGH // Description : None #define IO_BANK0_INTR1_GPIO11_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO11_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_INTR1_GPIO11_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_INTR1_GPIO11_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_INTR1_GPIO11_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO11_LEVEL_LOW // Description : None #define IO_BANK0_INTR1_GPIO11_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO11_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_INTR1_GPIO11_LEVEL_LOW_MSB _u(12) #define IO_BANK0_INTR1_GPIO11_LEVEL_LOW_LSB _u(12) #define IO_BANK0_INTR1_GPIO11_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO10_EDGE_HIGH // Description : None #define IO_BANK0_INTR1_GPIO10_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO10_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_INTR1_GPIO10_EDGE_HIGH_MSB _u(11) #define IO_BANK0_INTR1_GPIO10_EDGE_HIGH_LSB _u(11) #define IO_BANK0_INTR1_GPIO10_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO10_EDGE_LOW // Description : None #define IO_BANK0_INTR1_GPIO10_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO10_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_INTR1_GPIO10_EDGE_LOW_MSB _u(10) #define IO_BANK0_INTR1_GPIO10_EDGE_LOW_LSB _u(10) #define IO_BANK0_INTR1_GPIO10_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO10_LEVEL_HIGH // Description : None #define IO_BANK0_INTR1_GPIO10_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO10_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_INTR1_GPIO10_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_INTR1_GPIO10_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_INTR1_GPIO10_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO10_LEVEL_LOW // Description : None #define IO_BANK0_INTR1_GPIO10_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO10_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_INTR1_GPIO10_LEVEL_LOW_MSB _u(8) #define IO_BANK0_INTR1_GPIO10_LEVEL_LOW_LSB _u(8) #define IO_BANK0_INTR1_GPIO10_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO9_EDGE_HIGH // Description : None #define IO_BANK0_INTR1_GPIO9_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO9_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_INTR1_GPIO9_EDGE_HIGH_MSB _u(7) #define IO_BANK0_INTR1_GPIO9_EDGE_HIGH_LSB _u(7) #define IO_BANK0_INTR1_GPIO9_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO9_EDGE_LOW // Description : None #define IO_BANK0_INTR1_GPIO9_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO9_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_INTR1_GPIO9_EDGE_LOW_MSB _u(6) #define IO_BANK0_INTR1_GPIO9_EDGE_LOW_LSB _u(6) #define IO_BANK0_INTR1_GPIO9_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO9_LEVEL_HIGH // Description : None #define IO_BANK0_INTR1_GPIO9_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO9_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_INTR1_GPIO9_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_INTR1_GPIO9_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_INTR1_GPIO9_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO9_LEVEL_LOW // Description : None #define IO_BANK0_INTR1_GPIO9_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO9_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_INTR1_GPIO9_LEVEL_LOW_MSB _u(4) #define IO_BANK0_INTR1_GPIO9_LEVEL_LOW_LSB _u(4) #define IO_BANK0_INTR1_GPIO9_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO8_EDGE_HIGH // Description : None #define IO_BANK0_INTR1_GPIO8_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO8_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_INTR1_GPIO8_EDGE_HIGH_MSB _u(3) #define IO_BANK0_INTR1_GPIO8_EDGE_HIGH_LSB _u(3) #define IO_BANK0_INTR1_GPIO8_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO8_EDGE_LOW // Description : None #define IO_BANK0_INTR1_GPIO8_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO8_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_INTR1_GPIO8_EDGE_LOW_MSB _u(2) #define IO_BANK0_INTR1_GPIO8_EDGE_LOW_LSB _u(2) #define IO_BANK0_INTR1_GPIO8_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO8_LEVEL_HIGH // Description : None #define IO_BANK0_INTR1_GPIO8_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO8_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_INTR1_GPIO8_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_INTR1_GPIO8_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_INTR1_GPIO8_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR1_GPIO8_LEVEL_LOW // Description : None #define IO_BANK0_INTR1_GPIO8_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR1_GPIO8_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_INTR1_GPIO8_LEVEL_LOW_MSB _u(0) #define IO_BANK0_INTR1_GPIO8_LEVEL_LOW_LSB _u(0) #define IO_BANK0_INTR1_GPIO8_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_INTR2 // Description : Raw Interrupts #define IO_BANK0_INTR2_OFFSET _u(0x000000f8) #define IO_BANK0_INTR2_BITS _u(0xffffffff) #define IO_BANK0_INTR2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO23_EDGE_HIGH // Description : None #define IO_BANK0_INTR2_GPIO23_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO23_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_INTR2_GPIO23_EDGE_HIGH_MSB _u(31) #define IO_BANK0_INTR2_GPIO23_EDGE_HIGH_LSB _u(31) #define IO_BANK0_INTR2_GPIO23_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO23_EDGE_LOW // Description : None #define IO_BANK0_INTR2_GPIO23_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO23_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_INTR2_GPIO23_EDGE_LOW_MSB _u(30) #define IO_BANK0_INTR2_GPIO23_EDGE_LOW_LSB _u(30) #define IO_BANK0_INTR2_GPIO23_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO23_LEVEL_HIGH // Description : None #define IO_BANK0_INTR2_GPIO23_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO23_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_INTR2_GPIO23_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_INTR2_GPIO23_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_INTR2_GPIO23_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO23_LEVEL_LOW // Description : None #define IO_BANK0_INTR2_GPIO23_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO23_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_INTR2_GPIO23_LEVEL_LOW_MSB _u(28) #define IO_BANK0_INTR2_GPIO23_LEVEL_LOW_LSB _u(28) #define IO_BANK0_INTR2_GPIO23_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO22_EDGE_HIGH // Description : None #define IO_BANK0_INTR2_GPIO22_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO22_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_INTR2_GPIO22_EDGE_HIGH_MSB _u(27) #define IO_BANK0_INTR2_GPIO22_EDGE_HIGH_LSB _u(27) #define IO_BANK0_INTR2_GPIO22_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO22_EDGE_LOW // Description : None #define IO_BANK0_INTR2_GPIO22_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO22_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_INTR2_GPIO22_EDGE_LOW_MSB _u(26) #define IO_BANK0_INTR2_GPIO22_EDGE_LOW_LSB _u(26) #define IO_BANK0_INTR2_GPIO22_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO22_LEVEL_HIGH // Description : None #define IO_BANK0_INTR2_GPIO22_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO22_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_INTR2_GPIO22_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_INTR2_GPIO22_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_INTR2_GPIO22_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO22_LEVEL_LOW // Description : None #define IO_BANK0_INTR2_GPIO22_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO22_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_INTR2_GPIO22_LEVEL_LOW_MSB _u(24) #define IO_BANK0_INTR2_GPIO22_LEVEL_LOW_LSB _u(24) #define IO_BANK0_INTR2_GPIO22_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO21_EDGE_HIGH // Description : None #define IO_BANK0_INTR2_GPIO21_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO21_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_INTR2_GPIO21_EDGE_HIGH_MSB _u(23) #define IO_BANK0_INTR2_GPIO21_EDGE_HIGH_LSB _u(23) #define IO_BANK0_INTR2_GPIO21_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO21_EDGE_LOW // Description : None #define IO_BANK0_INTR2_GPIO21_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO21_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_INTR2_GPIO21_EDGE_LOW_MSB _u(22) #define IO_BANK0_INTR2_GPIO21_EDGE_LOW_LSB _u(22) #define IO_BANK0_INTR2_GPIO21_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO21_LEVEL_HIGH // Description : None #define IO_BANK0_INTR2_GPIO21_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO21_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_INTR2_GPIO21_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_INTR2_GPIO21_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_INTR2_GPIO21_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO21_LEVEL_LOW // Description : None #define IO_BANK0_INTR2_GPIO21_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO21_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_INTR2_GPIO21_LEVEL_LOW_MSB _u(20) #define IO_BANK0_INTR2_GPIO21_LEVEL_LOW_LSB _u(20) #define IO_BANK0_INTR2_GPIO21_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO20_EDGE_HIGH // Description : None #define IO_BANK0_INTR2_GPIO20_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO20_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_INTR2_GPIO20_EDGE_HIGH_MSB _u(19) #define IO_BANK0_INTR2_GPIO20_EDGE_HIGH_LSB _u(19) #define IO_BANK0_INTR2_GPIO20_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO20_EDGE_LOW // Description : None #define IO_BANK0_INTR2_GPIO20_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO20_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_INTR2_GPIO20_EDGE_LOW_MSB _u(18) #define IO_BANK0_INTR2_GPIO20_EDGE_LOW_LSB _u(18) #define IO_BANK0_INTR2_GPIO20_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO20_LEVEL_HIGH // Description : None #define IO_BANK0_INTR2_GPIO20_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO20_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_INTR2_GPIO20_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_INTR2_GPIO20_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_INTR2_GPIO20_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO20_LEVEL_LOW // Description : None #define IO_BANK0_INTR2_GPIO20_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO20_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_INTR2_GPIO20_LEVEL_LOW_MSB _u(16) #define IO_BANK0_INTR2_GPIO20_LEVEL_LOW_LSB _u(16) #define IO_BANK0_INTR2_GPIO20_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO19_EDGE_HIGH // Description : None #define IO_BANK0_INTR2_GPIO19_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO19_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_INTR2_GPIO19_EDGE_HIGH_MSB _u(15) #define IO_BANK0_INTR2_GPIO19_EDGE_HIGH_LSB _u(15) #define IO_BANK0_INTR2_GPIO19_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO19_EDGE_LOW // Description : None #define IO_BANK0_INTR2_GPIO19_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO19_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_INTR2_GPIO19_EDGE_LOW_MSB _u(14) #define IO_BANK0_INTR2_GPIO19_EDGE_LOW_LSB _u(14) #define IO_BANK0_INTR2_GPIO19_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO19_LEVEL_HIGH // Description : None #define IO_BANK0_INTR2_GPIO19_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO19_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_INTR2_GPIO19_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_INTR2_GPIO19_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_INTR2_GPIO19_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO19_LEVEL_LOW // Description : None #define IO_BANK0_INTR2_GPIO19_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO19_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_INTR2_GPIO19_LEVEL_LOW_MSB _u(12) #define IO_BANK0_INTR2_GPIO19_LEVEL_LOW_LSB _u(12) #define IO_BANK0_INTR2_GPIO19_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO18_EDGE_HIGH // Description : None #define IO_BANK0_INTR2_GPIO18_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO18_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_INTR2_GPIO18_EDGE_HIGH_MSB _u(11) #define IO_BANK0_INTR2_GPIO18_EDGE_HIGH_LSB _u(11) #define IO_BANK0_INTR2_GPIO18_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO18_EDGE_LOW // Description : None #define IO_BANK0_INTR2_GPIO18_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO18_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_INTR2_GPIO18_EDGE_LOW_MSB _u(10) #define IO_BANK0_INTR2_GPIO18_EDGE_LOW_LSB _u(10) #define IO_BANK0_INTR2_GPIO18_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO18_LEVEL_HIGH // Description : None #define IO_BANK0_INTR2_GPIO18_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO18_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_INTR2_GPIO18_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_INTR2_GPIO18_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_INTR2_GPIO18_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO18_LEVEL_LOW // Description : None #define IO_BANK0_INTR2_GPIO18_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO18_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_INTR2_GPIO18_LEVEL_LOW_MSB _u(8) #define IO_BANK0_INTR2_GPIO18_LEVEL_LOW_LSB _u(8) #define IO_BANK0_INTR2_GPIO18_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO17_EDGE_HIGH // Description : None #define IO_BANK0_INTR2_GPIO17_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO17_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_INTR2_GPIO17_EDGE_HIGH_MSB _u(7) #define IO_BANK0_INTR2_GPIO17_EDGE_HIGH_LSB _u(7) #define IO_BANK0_INTR2_GPIO17_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO17_EDGE_LOW // Description : None #define IO_BANK0_INTR2_GPIO17_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO17_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_INTR2_GPIO17_EDGE_LOW_MSB _u(6) #define IO_BANK0_INTR2_GPIO17_EDGE_LOW_LSB _u(6) #define IO_BANK0_INTR2_GPIO17_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO17_LEVEL_HIGH // Description : None #define IO_BANK0_INTR2_GPIO17_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO17_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_INTR2_GPIO17_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_INTR2_GPIO17_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_INTR2_GPIO17_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO17_LEVEL_LOW // Description : None #define IO_BANK0_INTR2_GPIO17_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO17_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_INTR2_GPIO17_LEVEL_LOW_MSB _u(4) #define IO_BANK0_INTR2_GPIO17_LEVEL_LOW_LSB _u(4) #define IO_BANK0_INTR2_GPIO17_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO16_EDGE_HIGH // Description : None #define IO_BANK0_INTR2_GPIO16_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO16_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_INTR2_GPIO16_EDGE_HIGH_MSB _u(3) #define IO_BANK0_INTR2_GPIO16_EDGE_HIGH_LSB _u(3) #define IO_BANK0_INTR2_GPIO16_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO16_EDGE_LOW // Description : None #define IO_BANK0_INTR2_GPIO16_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO16_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_INTR2_GPIO16_EDGE_LOW_MSB _u(2) #define IO_BANK0_INTR2_GPIO16_EDGE_LOW_LSB _u(2) #define IO_BANK0_INTR2_GPIO16_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO16_LEVEL_HIGH // Description : None #define IO_BANK0_INTR2_GPIO16_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO16_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_INTR2_GPIO16_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_INTR2_GPIO16_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_INTR2_GPIO16_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR2_GPIO16_LEVEL_LOW // Description : None #define IO_BANK0_INTR2_GPIO16_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR2_GPIO16_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_INTR2_GPIO16_LEVEL_LOW_MSB _u(0) #define IO_BANK0_INTR2_GPIO16_LEVEL_LOW_LSB _u(0) #define IO_BANK0_INTR2_GPIO16_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_INTR3 // Description : Raw Interrupts #define IO_BANK0_INTR3_OFFSET _u(0x000000fc) #define IO_BANK0_INTR3_BITS _u(0x00ffffff) #define IO_BANK0_INTR3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO29_EDGE_HIGH // Description : None #define IO_BANK0_INTR3_GPIO29_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO29_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_INTR3_GPIO29_EDGE_HIGH_MSB _u(23) #define IO_BANK0_INTR3_GPIO29_EDGE_HIGH_LSB _u(23) #define IO_BANK0_INTR3_GPIO29_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO29_EDGE_LOW // Description : None #define IO_BANK0_INTR3_GPIO29_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO29_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_INTR3_GPIO29_EDGE_LOW_MSB _u(22) #define IO_BANK0_INTR3_GPIO29_EDGE_LOW_LSB _u(22) #define IO_BANK0_INTR3_GPIO29_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO29_LEVEL_HIGH // Description : None #define IO_BANK0_INTR3_GPIO29_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO29_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_INTR3_GPIO29_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_INTR3_GPIO29_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_INTR3_GPIO29_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO29_LEVEL_LOW // Description : None #define IO_BANK0_INTR3_GPIO29_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO29_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_INTR3_GPIO29_LEVEL_LOW_MSB _u(20) #define IO_BANK0_INTR3_GPIO29_LEVEL_LOW_LSB _u(20) #define IO_BANK0_INTR3_GPIO29_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO28_EDGE_HIGH // Description : None #define IO_BANK0_INTR3_GPIO28_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO28_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_INTR3_GPIO28_EDGE_HIGH_MSB _u(19) #define IO_BANK0_INTR3_GPIO28_EDGE_HIGH_LSB _u(19) #define IO_BANK0_INTR3_GPIO28_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO28_EDGE_LOW // Description : None #define IO_BANK0_INTR3_GPIO28_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO28_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_INTR3_GPIO28_EDGE_LOW_MSB _u(18) #define IO_BANK0_INTR3_GPIO28_EDGE_LOW_LSB _u(18) #define IO_BANK0_INTR3_GPIO28_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO28_LEVEL_HIGH // Description : None #define IO_BANK0_INTR3_GPIO28_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO28_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_INTR3_GPIO28_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_INTR3_GPIO28_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_INTR3_GPIO28_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO28_LEVEL_LOW // Description : None #define IO_BANK0_INTR3_GPIO28_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO28_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_INTR3_GPIO28_LEVEL_LOW_MSB _u(16) #define IO_BANK0_INTR3_GPIO28_LEVEL_LOW_LSB _u(16) #define IO_BANK0_INTR3_GPIO28_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO27_EDGE_HIGH // Description : None #define IO_BANK0_INTR3_GPIO27_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO27_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_INTR3_GPIO27_EDGE_HIGH_MSB _u(15) #define IO_BANK0_INTR3_GPIO27_EDGE_HIGH_LSB _u(15) #define IO_BANK0_INTR3_GPIO27_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO27_EDGE_LOW // Description : None #define IO_BANK0_INTR3_GPIO27_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO27_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_INTR3_GPIO27_EDGE_LOW_MSB _u(14) #define IO_BANK0_INTR3_GPIO27_EDGE_LOW_LSB _u(14) #define IO_BANK0_INTR3_GPIO27_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO27_LEVEL_HIGH // Description : None #define IO_BANK0_INTR3_GPIO27_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO27_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_INTR3_GPIO27_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_INTR3_GPIO27_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_INTR3_GPIO27_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO27_LEVEL_LOW // Description : None #define IO_BANK0_INTR3_GPIO27_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO27_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_INTR3_GPIO27_LEVEL_LOW_MSB _u(12) #define IO_BANK0_INTR3_GPIO27_LEVEL_LOW_LSB _u(12) #define IO_BANK0_INTR3_GPIO27_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO26_EDGE_HIGH // Description : None #define IO_BANK0_INTR3_GPIO26_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO26_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_INTR3_GPIO26_EDGE_HIGH_MSB _u(11) #define IO_BANK0_INTR3_GPIO26_EDGE_HIGH_LSB _u(11) #define IO_BANK0_INTR3_GPIO26_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO26_EDGE_LOW // Description : None #define IO_BANK0_INTR3_GPIO26_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO26_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_INTR3_GPIO26_EDGE_LOW_MSB _u(10) #define IO_BANK0_INTR3_GPIO26_EDGE_LOW_LSB _u(10) #define IO_BANK0_INTR3_GPIO26_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO26_LEVEL_HIGH // Description : None #define IO_BANK0_INTR3_GPIO26_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO26_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_INTR3_GPIO26_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_INTR3_GPIO26_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_INTR3_GPIO26_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO26_LEVEL_LOW // Description : None #define IO_BANK0_INTR3_GPIO26_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO26_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_INTR3_GPIO26_LEVEL_LOW_MSB _u(8) #define IO_BANK0_INTR3_GPIO26_LEVEL_LOW_LSB _u(8) #define IO_BANK0_INTR3_GPIO26_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO25_EDGE_HIGH // Description : None #define IO_BANK0_INTR3_GPIO25_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO25_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_INTR3_GPIO25_EDGE_HIGH_MSB _u(7) #define IO_BANK0_INTR3_GPIO25_EDGE_HIGH_LSB _u(7) #define IO_BANK0_INTR3_GPIO25_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO25_EDGE_LOW // Description : None #define IO_BANK0_INTR3_GPIO25_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO25_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_INTR3_GPIO25_EDGE_LOW_MSB _u(6) #define IO_BANK0_INTR3_GPIO25_EDGE_LOW_LSB _u(6) #define IO_BANK0_INTR3_GPIO25_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO25_LEVEL_HIGH // Description : None #define IO_BANK0_INTR3_GPIO25_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO25_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_INTR3_GPIO25_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_INTR3_GPIO25_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_INTR3_GPIO25_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO25_LEVEL_LOW // Description : None #define IO_BANK0_INTR3_GPIO25_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO25_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_INTR3_GPIO25_LEVEL_LOW_MSB _u(4) #define IO_BANK0_INTR3_GPIO25_LEVEL_LOW_LSB _u(4) #define IO_BANK0_INTR3_GPIO25_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO24_EDGE_HIGH // Description : None #define IO_BANK0_INTR3_GPIO24_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO24_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_INTR3_GPIO24_EDGE_HIGH_MSB _u(3) #define IO_BANK0_INTR3_GPIO24_EDGE_HIGH_LSB _u(3) #define IO_BANK0_INTR3_GPIO24_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO24_EDGE_LOW // Description : None #define IO_BANK0_INTR3_GPIO24_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO24_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_INTR3_GPIO24_EDGE_LOW_MSB _u(2) #define IO_BANK0_INTR3_GPIO24_EDGE_LOW_LSB _u(2) #define IO_BANK0_INTR3_GPIO24_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO24_LEVEL_HIGH // Description : None #define IO_BANK0_INTR3_GPIO24_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO24_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_INTR3_GPIO24_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_INTR3_GPIO24_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_INTR3_GPIO24_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_INTR3_GPIO24_LEVEL_LOW // Description : None #define IO_BANK0_INTR3_GPIO24_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_INTR3_GPIO24_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_INTR3_GPIO24_LEVEL_LOW_MSB _u(0) #define IO_BANK0_INTR3_GPIO24_LEVEL_LOW_LSB _u(0) #define IO_BANK0_INTR3_GPIO24_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_PROC0_INTE0 // Description : Interrupt Enable for proc0 #define IO_BANK0_PROC0_INTE0_OFFSET _u(0x00000100) #define IO_BANK0_PROC0_INTE0_BITS _u(0xffffffff) #define IO_BANK0_PROC0_INTE0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO7_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO7_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO7_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC0_INTE0_GPIO7_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC0_INTE0_GPIO7_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC0_INTE0_GPIO7_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO7_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO7_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO7_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC0_INTE0_GPIO7_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC0_INTE0_GPIO7_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC0_INTE0_GPIO7_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC0_INTE0_GPIO7_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO6_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO6_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO6_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC0_INTE0_GPIO6_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC0_INTE0_GPIO6_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC0_INTE0_GPIO6_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO6_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO6_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO6_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC0_INTE0_GPIO6_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC0_INTE0_GPIO6_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC0_INTE0_GPIO6_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC0_INTE0_GPIO6_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO5_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO5_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO5_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTE0_GPIO5_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTE0_GPIO5_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTE0_GPIO5_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO5_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO5_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO5_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTE0_GPIO5_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTE0_GPIO5_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTE0_GPIO5_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTE0_GPIO5_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO4_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO4_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO4_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTE0_GPIO4_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTE0_GPIO4_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTE0_GPIO4_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO4_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO4_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO4_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTE0_GPIO4_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTE0_GPIO4_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTE0_GPIO4_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTE0_GPIO4_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO3_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO3_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO3_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTE0_GPIO3_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTE0_GPIO3_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTE0_GPIO3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO3_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO3_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO3_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTE0_GPIO3_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTE0_GPIO3_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTE0_GPIO3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTE0_GPIO3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO2_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO2_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO2_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTE0_GPIO2_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTE0_GPIO2_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTE0_GPIO2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO2_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO2_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO2_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTE0_GPIO2_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTE0_GPIO2_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTE0_GPIO2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTE0_GPIO2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO1_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO1_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO1_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTE0_GPIO1_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTE0_GPIO1_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTE0_GPIO1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO1_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO1_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO1_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTE0_GPIO1_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTE0_GPIO1_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTE0_GPIO1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTE0_GPIO1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO0_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO0_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO0_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTE0_GPIO0_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTE0_GPIO0_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTE0_GPIO0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO0_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO0_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO0_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTE0_GPIO0_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTE0_GPIO0_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTE0_GPIO0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTE0_GPIO0_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC0_INTE1 // Description : Interrupt Enable for proc0 #define IO_BANK0_PROC0_INTE1_OFFSET _u(0x00000104) #define IO_BANK0_PROC0_INTE1_BITS _u(0xffffffff) #define IO_BANK0_PROC0_INTE1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO15_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO15_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO15_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC0_INTE1_GPIO15_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC0_INTE1_GPIO15_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC0_INTE1_GPIO15_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO15_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO15_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO15_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC0_INTE1_GPIO15_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC0_INTE1_GPIO15_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC0_INTE1_GPIO15_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC0_INTE1_GPIO15_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO14_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO14_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO14_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC0_INTE1_GPIO14_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC0_INTE1_GPIO14_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC0_INTE1_GPIO14_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO14_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO14_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO14_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC0_INTE1_GPIO14_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC0_INTE1_GPIO14_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC0_INTE1_GPIO14_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC0_INTE1_GPIO14_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO13_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO13_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO13_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTE1_GPIO13_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTE1_GPIO13_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTE1_GPIO13_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO13_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO13_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO13_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTE1_GPIO13_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTE1_GPIO13_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTE1_GPIO13_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTE1_GPIO13_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO12_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO12_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO12_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTE1_GPIO12_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTE1_GPIO12_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTE1_GPIO12_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO12_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO12_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO12_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTE1_GPIO12_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTE1_GPIO12_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTE1_GPIO12_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTE1_GPIO12_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO11_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO11_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO11_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTE1_GPIO11_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTE1_GPIO11_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTE1_GPIO11_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO11_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO11_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO11_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTE1_GPIO11_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTE1_GPIO11_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTE1_GPIO11_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTE1_GPIO11_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO10_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO10_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO10_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTE1_GPIO10_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTE1_GPIO10_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTE1_GPIO10_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO10_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO10_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO10_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTE1_GPIO10_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTE1_GPIO10_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTE1_GPIO10_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTE1_GPIO10_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO9_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO9_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO9_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTE1_GPIO9_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTE1_GPIO9_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTE1_GPIO9_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO9_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO9_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO9_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTE1_GPIO9_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTE1_GPIO9_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTE1_GPIO9_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTE1_GPIO9_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO8_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO8_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO8_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTE1_GPIO8_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTE1_GPIO8_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTE1_GPIO8_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO8_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO8_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO8_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTE1_GPIO8_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTE1_GPIO8_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTE1_GPIO8_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTE1_GPIO8_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC0_INTE2 // Description : Interrupt Enable for proc0 #define IO_BANK0_PROC0_INTE2_OFFSET _u(0x00000108) #define IO_BANK0_PROC0_INTE2_BITS _u(0xffffffff) #define IO_BANK0_PROC0_INTE2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO23_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO23_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO23_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC0_INTE2_GPIO23_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC0_INTE2_GPIO23_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC0_INTE2_GPIO23_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO23_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO23_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO23_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC0_INTE2_GPIO23_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC0_INTE2_GPIO23_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC0_INTE2_GPIO23_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC0_INTE2_GPIO23_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO22_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO22_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO22_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC0_INTE2_GPIO22_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC0_INTE2_GPIO22_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC0_INTE2_GPIO22_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO22_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO22_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO22_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC0_INTE2_GPIO22_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC0_INTE2_GPIO22_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC0_INTE2_GPIO22_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC0_INTE2_GPIO22_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO21_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO21_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO21_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTE2_GPIO21_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTE2_GPIO21_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTE2_GPIO21_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO21_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO21_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO21_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTE2_GPIO21_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTE2_GPIO21_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTE2_GPIO21_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTE2_GPIO21_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO20_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO20_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO20_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTE2_GPIO20_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTE2_GPIO20_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTE2_GPIO20_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO20_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO20_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO20_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTE2_GPIO20_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTE2_GPIO20_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTE2_GPIO20_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTE2_GPIO20_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO19_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO19_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO19_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTE2_GPIO19_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTE2_GPIO19_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTE2_GPIO19_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO19_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO19_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO19_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTE2_GPIO19_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTE2_GPIO19_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTE2_GPIO19_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTE2_GPIO19_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO18_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO18_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO18_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTE2_GPIO18_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTE2_GPIO18_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTE2_GPIO18_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO18_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO18_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO18_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTE2_GPIO18_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTE2_GPIO18_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTE2_GPIO18_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTE2_GPIO18_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO17_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO17_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO17_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTE2_GPIO17_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTE2_GPIO17_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTE2_GPIO17_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO17_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO17_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO17_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTE2_GPIO17_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTE2_GPIO17_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTE2_GPIO17_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTE2_GPIO17_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO16_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO16_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO16_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTE2_GPIO16_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTE2_GPIO16_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTE2_GPIO16_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO16_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO16_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO16_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTE2_GPIO16_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTE2_GPIO16_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTE2_GPIO16_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTE2_GPIO16_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC0_INTE3 // Description : Interrupt Enable for proc0 #define IO_BANK0_PROC0_INTE3_OFFSET _u(0x0000010c) #define IO_BANK0_PROC0_INTE3_BITS _u(0x00ffffff) #define IO_BANK0_PROC0_INTE3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO29_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO29_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO29_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTE3_GPIO29_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTE3_GPIO29_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTE3_GPIO29_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO29_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO29_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO29_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTE3_GPIO29_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTE3_GPIO29_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTE3_GPIO29_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTE3_GPIO29_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO28_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO28_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO28_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTE3_GPIO28_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTE3_GPIO28_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTE3_GPIO28_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO28_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO28_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO28_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTE3_GPIO28_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTE3_GPIO28_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTE3_GPIO28_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTE3_GPIO28_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO27_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO27_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO27_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTE3_GPIO27_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTE3_GPIO27_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTE3_GPIO27_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO27_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO27_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO27_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTE3_GPIO27_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTE3_GPIO27_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTE3_GPIO27_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTE3_GPIO27_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO26_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO26_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO26_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTE3_GPIO26_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTE3_GPIO26_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTE3_GPIO26_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO26_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO26_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO26_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTE3_GPIO26_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTE3_GPIO26_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTE3_GPIO26_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTE3_GPIO26_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO25_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO25_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO25_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTE3_GPIO25_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTE3_GPIO25_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTE3_GPIO25_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO25_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO25_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO25_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTE3_GPIO25_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTE3_GPIO25_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTE3_GPIO25_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTE3_GPIO25_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO24_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO24_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO24_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTE3_GPIO24_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTE3_GPIO24_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTE3_GPIO24_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO24_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO24_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO24_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTE3_GPIO24_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTE3_GPIO24_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTE3_GPIO24_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTE3_GPIO24_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC0_INTF0 // Description : Interrupt Force for proc0 #define IO_BANK0_PROC0_INTF0_OFFSET _u(0x00000110) #define IO_BANK0_PROC0_INTF0_BITS _u(0xffffffff) #define IO_BANK0_PROC0_INTF0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO7_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO7_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO7_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC0_INTF0_GPIO7_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC0_INTF0_GPIO7_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC0_INTF0_GPIO7_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO7_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO7_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO7_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC0_INTF0_GPIO7_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC0_INTF0_GPIO7_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC0_INTF0_GPIO7_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC0_INTF0_GPIO7_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO6_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO6_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO6_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC0_INTF0_GPIO6_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC0_INTF0_GPIO6_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC0_INTF0_GPIO6_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO6_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO6_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO6_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC0_INTF0_GPIO6_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC0_INTF0_GPIO6_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC0_INTF0_GPIO6_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC0_INTF0_GPIO6_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO5_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO5_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO5_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTF0_GPIO5_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTF0_GPIO5_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTF0_GPIO5_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO5_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO5_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO5_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTF0_GPIO5_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTF0_GPIO5_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTF0_GPIO5_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTF0_GPIO5_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO4_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO4_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO4_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTF0_GPIO4_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTF0_GPIO4_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTF0_GPIO4_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO4_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO4_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO4_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTF0_GPIO4_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTF0_GPIO4_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTF0_GPIO4_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTF0_GPIO4_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO3_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO3_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO3_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTF0_GPIO3_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTF0_GPIO3_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTF0_GPIO3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO3_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO3_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO3_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTF0_GPIO3_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTF0_GPIO3_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTF0_GPIO3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTF0_GPIO3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO2_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO2_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO2_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTF0_GPIO2_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTF0_GPIO2_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTF0_GPIO2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO2_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO2_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO2_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTF0_GPIO2_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTF0_GPIO2_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTF0_GPIO2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTF0_GPIO2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO1_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO1_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO1_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTF0_GPIO1_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTF0_GPIO1_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTF0_GPIO1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO1_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO1_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO1_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTF0_GPIO1_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTF0_GPIO1_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTF0_GPIO1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTF0_GPIO1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO0_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO0_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO0_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTF0_GPIO0_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTF0_GPIO0_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTF0_GPIO0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO0_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO0_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO0_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTF0_GPIO0_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTF0_GPIO0_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTF0_GPIO0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTF0_GPIO0_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC0_INTF1 // Description : Interrupt Force for proc0 #define IO_BANK0_PROC0_INTF1_OFFSET _u(0x00000114) #define IO_BANK0_PROC0_INTF1_BITS _u(0xffffffff) #define IO_BANK0_PROC0_INTF1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO15_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO15_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO15_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC0_INTF1_GPIO15_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC0_INTF1_GPIO15_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC0_INTF1_GPIO15_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO15_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO15_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO15_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC0_INTF1_GPIO15_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC0_INTF1_GPIO15_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC0_INTF1_GPIO15_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC0_INTF1_GPIO15_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO14_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO14_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO14_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC0_INTF1_GPIO14_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC0_INTF1_GPIO14_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC0_INTF1_GPIO14_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO14_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO14_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO14_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC0_INTF1_GPIO14_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC0_INTF1_GPIO14_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC0_INTF1_GPIO14_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC0_INTF1_GPIO14_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO13_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO13_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO13_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTF1_GPIO13_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTF1_GPIO13_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTF1_GPIO13_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO13_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO13_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO13_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTF1_GPIO13_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTF1_GPIO13_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTF1_GPIO13_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTF1_GPIO13_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO12_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO12_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO12_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTF1_GPIO12_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTF1_GPIO12_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTF1_GPIO12_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO12_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO12_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO12_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTF1_GPIO12_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTF1_GPIO12_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTF1_GPIO12_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTF1_GPIO12_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO11_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO11_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO11_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTF1_GPIO11_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTF1_GPIO11_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTF1_GPIO11_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO11_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO11_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO11_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTF1_GPIO11_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTF1_GPIO11_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTF1_GPIO11_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTF1_GPIO11_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO10_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO10_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO10_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTF1_GPIO10_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTF1_GPIO10_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTF1_GPIO10_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO10_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO10_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO10_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTF1_GPIO10_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTF1_GPIO10_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTF1_GPIO10_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTF1_GPIO10_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO9_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO9_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO9_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTF1_GPIO9_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTF1_GPIO9_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTF1_GPIO9_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO9_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO9_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO9_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTF1_GPIO9_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTF1_GPIO9_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTF1_GPIO9_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTF1_GPIO9_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO8_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO8_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO8_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTF1_GPIO8_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTF1_GPIO8_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTF1_GPIO8_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO8_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO8_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO8_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTF1_GPIO8_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTF1_GPIO8_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTF1_GPIO8_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTF1_GPIO8_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC0_INTF2 // Description : Interrupt Force for proc0 #define IO_BANK0_PROC0_INTF2_OFFSET _u(0x00000118) #define IO_BANK0_PROC0_INTF2_BITS _u(0xffffffff) #define IO_BANK0_PROC0_INTF2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO23_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO23_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO23_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC0_INTF2_GPIO23_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC0_INTF2_GPIO23_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC0_INTF2_GPIO23_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO23_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO23_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO23_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC0_INTF2_GPIO23_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC0_INTF2_GPIO23_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC0_INTF2_GPIO23_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC0_INTF2_GPIO23_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO22_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO22_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO22_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC0_INTF2_GPIO22_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC0_INTF2_GPIO22_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC0_INTF2_GPIO22_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO22_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO22_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO22_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC0_INTF2_GPIO22_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC0_INTF2_GPIO22_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC0_INTF2_GPIO22_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC0_INTF2_GPIO22_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO21_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO21_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO21_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTF2_GPIO21_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTF2_GPIO21_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTF2_GPIO21_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO21_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO21_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO21_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTF2_GPIO21_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTF2_GPIO21_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTF2_GPIO21_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTF2_GPIO21_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO20_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO20_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO20_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTF2_GPIO20_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTF2_GPIO20_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTF2_GPIO20_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO20_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO20_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO20_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTF2_GPIO20_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTF2_GPIO20_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTF2_GPIO20_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTF2_GPIO20_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO19_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO19_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO19_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTF2_GPIO19_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTF2_GPIO19_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTF2_GPIO19_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO19_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO19_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO19_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTF2_GPIO19_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTF2_GPIO19_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTF2_GPIO19_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTF2_GPIO19_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO18_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO18_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO18_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTF2_GPIO18_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTF2_GPIO18_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTF2_GPIO18_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO18_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO18_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO18_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTF2_GPIO18_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTF2_GPIO18_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTF2_GPIO18_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTF2_GPIO18_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO17_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO17_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO17_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTF2_GPIO17_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTF2_GPIO17_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTF2_GPIO17_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO17_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO17_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO17_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTF2_GPIO17_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTF2_GPIO17_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTF2_GPIO17_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTF2_GPIO17_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO16_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO16_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO16_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTF2_GPIO16_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTF2_GPIO16_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTF2_GPIO16_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO16_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO16_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO16_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTF2_GPIO16_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTF2_GPIO16_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTF2_GPIO16_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTF2_GPIO16_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC0_INTF3 // Description : Interrupt Force for proc0 #define IO_BANK0_PROC0_INTF3_OFFSET _u(0x0000011c) #define IO_BANK0_PROC0_INTF3_BITS _u(0x00ffffff) #define IO_BANK0_PROC0_INTF3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO29_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO29_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO29_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTF3_GPIO29_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTF3_GPIO29_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTF3_GPIO29_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO29_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO29_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO29_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTF3_GPIO29_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTF3_GPIO29_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTF3_GPIO29_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTF3_GPIO29_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO28_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO28_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO28_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTF3_GPIO28_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTF3_GPIO28_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTF3_GPIO28_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO28_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO28_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO28_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTF3_GPIO28_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTF3_GPIO28_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTF3_GPIO28_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTF3_GPIO28_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO27_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO27_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO27_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTF3_GPIO27_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTF3_GPIO27_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTF3_GPIO27_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO27_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO27_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO27_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTF3_GPIO27_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTF3_GPIO27_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTF3_GPIO27_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTF3_GPIO27_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO26_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO26_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO26_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTF3_GPIO26_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTF3_GPIO26_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTF3_GPIO26_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO26_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO26_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO26_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTF3_GPIO26_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTF3_GPIO26_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTF3_GPIO26_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTF3_GPIO26_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO25_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO25_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO25_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTF3_GPIO25_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTF3_GPIO25_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTF3_GPIO25_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO25_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO25_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO25_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTF3_GPIO25_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTF3_GPIO25_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTF3_GPIO25_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTF3_GPIO25_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO24_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO24_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO24_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTF3_GPIO24_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTF3_GPIO24_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTF3_GPIO24_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO24_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO24_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO24_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTF3_GPIO24_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTF3_GPIO24_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTF3_GPIO24_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTF3_GPIO24_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC0_INTS0 // Description : Interrupt status after masking & forcing for proc0 #define IO_BANK0_PROC0_INTS0_OFFSET _u(0x00000120) #define IO_BANK0_PROC0_INTS0_BITS _u(0xffffffff) #define IO_BANK0_PROC0_INTS0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO7_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO7_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO7_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC0_INTS0_GPIO7_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC0_INTS0_GPIO7_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC0_INTS0_GPIO7_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO7_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO7_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO7_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC0_INTS0_GPIO7_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC0_INTS0_GPIO7_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC0_INTS0_GPIO7_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC0_INTS0_GPIO7_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO6_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO6_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO6_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC0_INTS0_GPIO6_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC0_INTS0_GPIO6_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC0_INTS0_GPIO6_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO6_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO6_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO6_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC0_INTS0_GPIO6_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC0_INTS0_GPIO6_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC0_INTS0_GPIO6_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC0_INTS0_GPIO6_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO5_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO5_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO5_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTS0_GPIO5_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTS0_GPIO5_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTS0_GPIO5_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO5_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO5_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO5_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTS0_GPIO5_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTS0_GPIO5_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTS0_GPIO5_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTS0_GPIO5_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO4_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO4_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO4_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTS0_GPIO4_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTS0_GPIO4_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTS0_GPIO4_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO4_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO4_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO4_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTS0_GPIO4_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTS0_GPIO4_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTS0_GPIO4_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTS0_GPIO4_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO3_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO3_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO3_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTS0_GPIO3_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTS0_GPIO3_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTS0_GPIO3_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO3_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO3_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO3_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTS0_GPIO3_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTS0_GPIO3_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTS0_GPIO3_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTS0_GPIO3_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO2_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO2_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO2_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTS0_GPIO2_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTS0_GPIO2_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTS0_GPIO2_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO2_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO2_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO2_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTS0_GPIO2_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTS0_GPIO2_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTS0_GPIO2_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTS0_GPIO2_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO1_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO1_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO1_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTS0_GPIO1_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTS0_GPIO1_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTS0_GPIO1_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO1_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO1_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO1_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTS0_GPIO1_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTS0_GPIO1_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTS0_GPIO1_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTS0_GPIO1_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO0_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO0_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO0_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTS0_GPIO0_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTS0_GPIO0_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTS0_GPIO0_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO0_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO0_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO0_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTS0_GPIO0_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTS0_GPIO0_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTS0_GPIO0_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTS0_GPIO0_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_PROC0_INTS1 // Description : Interrupt status after masking & forcing for proc0 #define IO_BANK0_PROC0_INTS1_OFFSET _u(0x00000124) #define IO_BANK0_PROC0_INTS1_BITS _u(0xffffffff) #define IO_BANK0_PROC0_INTS1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO15_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO15_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO15_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC0_INTS1_GPIO15_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC0_INTS1_GPIO15_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC0_INTS1_GPIO15_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO15_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO15_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO15_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC0_INTS1_GPIO15_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC0_INTS1_GPIO15_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC0_INTS1_GPIO15_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC0_INTS1_GPIO15_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO14_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO14_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO14_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC0_INTS1_GPIO14_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC0_INTS1_GPIO14_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC0_INTS1_GPIO14_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO14_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO14_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO14_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC0_INTS1_GPIO14_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC0_INTS1_GPIO14_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC0_INTS1_GPIO14_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC0_INTS1_GPIO14_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO13_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO13_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO13_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTS1_GPIO13_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTS1_GPIO13_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTS1_GPIO13_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO13_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO13_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO13_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTS1_GPIO13_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTS1_GPIO13_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTS1_GPIO13_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTS1_GPIO13_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO12_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO12_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO12_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTS1_GPIO12_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTS1_GPIO12_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTS1_GPIO12_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO12_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO12_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO12_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTS1_GPIO12_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTS1_GPIO12_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTS1_GPIO12_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTS1_GPIO12_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO11_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO11_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO11_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTS1_GPIO11_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTS1_GPIO11_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTS1_GPIO11_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO11_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO11_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO11_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTS1_GPIO11_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTS1_GPIO11_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTS1_GPIO11_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTS1_GPIO11_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO10_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO10_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO10_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTS1_GPIO10_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTS1_GPIO10_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTS1_GPIO10_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO10_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO10_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO10_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTS1_GPIO10_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTS1_GPIO10_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTS1_GPIO10_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTS1_GPIO10_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO9_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO9_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO9_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTS1_GPIO9_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTS1_GPIO9_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTS1_GPIO9_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO9_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO9_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO9_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTS1_GPIO9_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTS1_GPIO9_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTS1_GPIO9_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTS1_GPIO9_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO8_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO8_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO8_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTS1_GPIO8_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTS1_GPIO8_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTS1_GPIO8_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO8_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO8_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO8_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTS1_GPIO8_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTS1_GPIO8_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTS1_GPIO8_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTS1_GPIO8_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_PROC0_INTS2 // Description : Interrupt status after masking & forcing for proc0 #define IO_BANK0_PROC0_INTS2_OFFSET _u(0x00000128) #define IO_BANK0_PROC0_INTS2_BITS _u(0xffffffff) #define IO_BANK0_PROC0_INTS2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO23_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO23_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO23_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC0_INTS2_GPIO23_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC0_INTS2_GPIO23_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC0_INTS2_GPIO23_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO23_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO23_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO23_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC0_INTS2_GPIO23_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC0_INTS2_GPIO23_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC0_INTS2_GPIO23_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC0_INTS2_GPIO23_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO22_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO22_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO22_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC0_INTS2_GPIO22_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC0_INTS2_GPIO22_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC0_INTS2_GPIO22_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO22_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO22_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO22_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC0_INTS2_GPIO22_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC0_INTS2_GPIO22_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC0_INTS2_GPIO22_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC0_INTS2_GPIO22_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO21_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO21_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO21_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTS2_GPIO21_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTS2_GPIO21_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTS2_GPIO21_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO21_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO21_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO21_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTS2_GPIO21_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTS2_GPIO21_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTS2_GPIO21_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTS2_GPIO21_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO20_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO20_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO20_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTS2_GPIO20_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTS2_GPIO20_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTS2_GPIO20_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO20_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO20_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO20_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTS2_GPIO20_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTS2_GPIO20_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTS2_GPIO20_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTS2_GPIO20_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO19_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO19_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO19_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTS2_GPIO19_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTS2_GPIO19_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTS2_GPIO19_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO19_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO19_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO19_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTS2_GPIO19_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTS2_GPIO19_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTS2_GPIO19_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTS2_GPIO19_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO18_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO18_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO18_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTS2_GPIO18_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTS2_GPIO18_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTS2_GPIO18_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO18_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO18_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO18_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTS2_GPIO18_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTS2_GPIO18_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTS2_GPIO18_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTS2_GPIO18_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO17_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO17_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO17_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTS2_GPIO17_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTS2_GPIO17_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTS2_GPIO17_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO17_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO17_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO17_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTS2_GPIO17_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTS2_GPIO17_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTS2_GPIO17_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTS2_GPIO17_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO16_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO16_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO16_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTS2_GPIO16_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTS2_GPIO16_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTS2_GPIO16_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO16_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO16_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO16_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTS2_GPIO16_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTS2_GPIO16_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTS2_GPIO16_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTS2_GPIO16_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_PROC0_INTS3 // Description : Interrupt status after masking & forcing for proc0 #define IO_BANK0_PROC0_INTS3_OFFSET _u(0x0000012c) #define IO_BANK0_PROC0_INTS3_BITS _u(0x00ffffff) #define IO_BANK0_PROC0_INTS3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO29_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO29_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO29_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC0_INTS3_GPIO29_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC0_INTS3_GPIO29_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC0_INTS3_GPIO29_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO29_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO29_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO29_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC0_INTS3_GPIO29_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC0_INTS3_GPIO29_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC0_INTS3_GPIO29_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC0_INTS3_GPIO29_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO28_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO28_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO28_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC0_INTS3_GPIO28_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC0_INTS3_GPIO28_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC0_INTS3_GPIO28_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO28_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO28_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO28_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC0_INTS3_GPIO28_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC0_INTS3_GPIO28_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC0_INTS3_GPIO28_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC0_INTS3_GPIO28_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO27_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO27_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO27_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC0_INTS3_GPIO27_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC0_INTS3_GPIO27_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC0_INTS3_GPIO27_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO27_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO27_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO27_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC0_INTS3_GPIO27_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC0_INTS3_GPIO27_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC0_INTS3_GPIO27_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC0_INTS3_GPIO27_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO26_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO26_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO26_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC0_INTS3_GPIO26_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC0_INTS3_GPIO26_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC0_INTS3_GPIO26_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO26_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO26_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO26_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC0_INTS3_GPIO26_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC0_INTS3_GPIO26_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC0_INTS3_GPIO26_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC0_INTS3_GPIO26_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO25_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO25_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO25_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC0_INTS3_GPIO25_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC0_INTS3_GPIO25_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC0_INTS3_GPIO25_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO25_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO25_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO25_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC0_INTS3_GPIO25_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC0_INTS3_GPIO25_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC0_INTS3_GPIO25_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC0_INTS3_GPIO25_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO24_EDGE_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO24_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO24_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC0_INTS3_GPIO24_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC0_INTS3_GPIO24_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC0_INTS3_GPIO24_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO24_EDGE_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO24_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO24_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC0_INTS3_GPIO24_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC0_INTS3_GPIO24_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC0_INTS3_GPIO24_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_HIGH // Description : None #define IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_LOW // Description : None #define IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC0_INTS3_GPIO24_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_PROC1_INTE0 // Description : Interrupt Enable for proc1 #define IO_BANK0_PROC1_INTE0_OFFSET _u(0x00000130) #define IO_BANK0_PROC1_INTE0_BITS _u(0xffffffff) #define IO_BANK0_PROC1_INTE0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO7_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO7_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO7_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC1_INTE0_GPIO7_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC1_INTE0_GPIO7_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC1_INTE0_GPIO7_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO7_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO7_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO7_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC1_INTE0_GPIO7_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC1_INTE0_GPIO7_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC1_INTE0_GPIO7_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC1_INTE0_GPIO7_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO6_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO6_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO6_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC1_INTE0_GPIO6_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC1_INTE0_GPIO6_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC1_INTE0_GPIO6_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO6_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO6_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO6_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC1_INTE0_GPIO6_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC1_INTE0_GPIO6_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC1_INTE0_GPIO6_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC1_INTE0_GPIO6_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO5_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO5_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO5_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTE0_GPIO5_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTE0_GPIO5_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTE0_GPIO5_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO5_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO5_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO5_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTE0_GPIO5_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTE0_GPIO5_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTE0_GPIO5_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTE0_GPIO5_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO4_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO4_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO4_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTE0_GPIO4_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTE0_GPIO4_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTE0_GPIO4_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO4_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO4_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO4_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTE0_GPIO4_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTE0_GPIO4_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTE0_GPIO4_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTE0_GPIO4_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO3_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO3_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO3_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTE0_GPIO3_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTE0_GPIO3_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTE0_GPIO3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO3_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO3_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO3_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTE0_GPIO3_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTE0_GPIO3_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTE0_GPIO3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTE0_GPIO3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO2_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO2_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO2_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTE0_GPIO2_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTE0_GPIO2_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTE0_GPIO2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO2_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO2_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO2_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTE0_GPIO2_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTE0_GPIO2_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTE0_GPIO2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTE0_GPIO2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO1_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO1_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO1_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTE0_GPIO1_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTE0_GPIO1_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTE0_GPIO1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO1_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO1_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO1_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTE0_GPIO1_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTE0_GPIO1_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTE0_GPIO1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTE0_GPIO1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO0_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO0_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO0_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTE0_GPIO0_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTE0_GPIO0_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTE0_GPIO0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO0_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO0_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO0_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTE0_GPIO0_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTE0_GPIO0_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTE0_GPIO0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTE0_GPIO0_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC1_INTE1 // Description : Interrupt Enable for proc1 #define IO_BANK0_PROC1_INTE1_OFFSET _u(0x00000134) #define IO_BANK0_PROC1_INTE1_BITS _u(0xffffffff) #define IO_BANK0_PROC1_INTE1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO15_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO15_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO15_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC1_INTE1_GPIO15_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC1_INTE1_GPIO15_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC1_INTE1_GPIO15_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO15_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO15_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO15_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC1_INTE1_GPIO15_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC1_INTE1_GPIO15_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC1_INTE1_GPIO15_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC1_INTE1_GPIO15_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO14_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO14_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO14_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC1_INTE1_GPIO14_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC1_INTE1_GPIO14_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC1_INTE1_GPIO14_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO14_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO14_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO14_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC1_INTE1_GPIO14_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC1_INTE1_GPIO14_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC1_INTE1_GPIO14_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC1_INTE1_GPIO14_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO13_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO13_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO13_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTE1_GPIO13_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTE1_GPIO13_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTE1_GPIO13_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO13_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO13_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO13_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTE1_GPIO13_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTE1_GPIO13_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTE1_GPIO13_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTE1_GPIO13_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO12_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO12_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO12_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTE1_GPIO12_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTE1_GPIO12_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTE1_GPIO12_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO12_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO12_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO12_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTE1_GPIO12_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTE1_GPIO12_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTE1_GPIO12_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTE1_GPIO12_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO11_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO11_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO11_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTE1_GPIO11_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTE1_GPIO11_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTE1_GPIO11_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO11_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO11_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO11_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTE1_GPIO11_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTE1_GPIO11_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTE1_GPIO11_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTE1_GPIO11_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO10_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO10_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO10_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTE1_GPIO10_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTE1_GPIO10_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTE1_GPIO10_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO10_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO10_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO10_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTE1_GPIO10_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTE1_GPIO10_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTE1_GPIO10_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTE1_GPIO10_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO9_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO9_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO9_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTE1_GPIO9_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTE1_GPIO9_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTE1_GPIO9_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO9_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO9_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO9_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTE1_GPIO9_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTE1_GPIO9_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTE1_GPIO9_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTE1_GPIO9_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO8_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO8_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO8_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTE1_GPIO8_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTE1_GPIO8_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTE1_GPIO8_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO8_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO8_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO8_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTE1_GPIO8_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTE1_GPIO8_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTE1_GPIO8_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTE1_GPIO8_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC1_INTE2 // Description : Interrupt Enable for proc1 #define IO_BANK0_PROC1_INTE2_OFFSET _u(0x00000138) #define IO_BANK0_PROC1_INTE2_BITS _u(0xffffffff) #define IO_BANK0_PROC1_INTE2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO23_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO23_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO23_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC1_INTE2_GPIO23_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC1_INTE2_GPIO23_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC1_INTE2_GPIO23_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO23_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO23_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO23_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC1_INTE2_GPIO23_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC1_INTE2_GPIO23_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC1_INTE2_GPIO23_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC1_INTE2_GPIO23_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO22_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO22_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO22_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC1_INTE2_GPIO22_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC1_INTE2_GPIO22_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC1_INTE2_GPIO22_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO22_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO22_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO22_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC1_INTE2_GPIO22_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC1_INTE2_GPIO22_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC1_INTE2_GPIO22_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC1_INTE2_GPIO22_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO21_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO21_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO21_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTE2_GPIO21_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTE2_GPIO21_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTE2_GPIO21_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO21_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO21_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO21_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTE2_GPIO21_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTE2_GPIO21_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTE2_GPIO21_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTE2_GPIO21_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO20_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO20_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO20_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTE2_GPIO20_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTE2_GPIO20_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTE2_GPIO20_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO20_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO20_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO20_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTE2_GPIO20_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTE2_GPIO20_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTE2_GPIO20_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTE2_GPIO20_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO19_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO19_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO19_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTE2_GPIO19_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTE2_GPIO19_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTE2_GPIO19_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO19_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO19_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO19_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTE2_GPIO19_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTE2_GPIO19_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTE2_GPIO19_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTE2_GPIO19_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO18_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO18_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO18_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTE2_GPIO18_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTE2_GPIO18_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTE2_GPIO18_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO18_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO18_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO18_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTE2_GPIO18_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTE2_GPIO18_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTE2_GPIO18_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTE2_GPIO18_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO17_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO17_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO17_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTE2_GPIO17_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTE2_GPIO17_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTE2_GPIO17_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO17_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO17_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO17_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTE2_GPIO17_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTE2_GPIO17_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTE2_GPIO17_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTE2_GPIO17_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO16_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO16_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO16_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTE2_GPIO16_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTE2_GPIO16_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTE2_GPIO16_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO16_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO16_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO16_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTE2_GPIO16_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTE2_GPIO16_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTE2_GPIO16_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTE2_GPIO16_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC1_INTE3 // Description : Interrupt Enable for proc1 #define IO_BANK0_PROC1_INTE3_OFFSET _u(0x0000013c) #define IO_BANK0_PROC1_INTE3_BITS _u(0x00ffffff) #define IO_BANK0_PROC1_INTE3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO29_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO29_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO29_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTE3_GPIO29_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTE3_GPIO29_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTE3_GPIO29_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO29_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO29_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO29_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTE3_GPIO29_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTE3_GPIO29_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTE3_GPIO29_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTE3_GPIO29_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO28_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO28_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO28_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTE3_GPIO28_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTE3_GPIO28_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTE3_GPIO28_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO28_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO28_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO28_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTE3_GPIO28_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTE3_GPIO28_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTE3_GPIO28_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTE3_GPIO28_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO27_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO27_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO27_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTE3_GPIO27_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTE3_GPIO27_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTE3_GPIO27_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO27_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO27_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO27_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTE3_GPIO27_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTE3_GPIO27_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTE3_GPIO27_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTE3_GPIO27_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO26_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO26_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO26_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTE3_GPIO26_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTE3_GPIO26_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTE3_GPIO26_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO26_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO26_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO26_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTE3_GPIO26_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTE3_GPIO26_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTE3_GPIO26_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTE3_GPIO26_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO25_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO25_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO25_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTE3_GPIO25_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTE3_GPIO25_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTE3_GPIO25_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO25_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO25_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO25_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTE3_GPIO25_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTE3_GPIO25_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTE3_GPIO25_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTE3_GPIO25_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO24_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO24_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO24_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTE3_GPIO24_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTE3_GPIO24_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTE3_GPIO24_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO24_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO24_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO24_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTE3_GPIO24_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTE3_GPIO24_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTE3_GPIO24_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTE3_GPIO24_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC1_INTF0 // Description : Interrupt Force for proc1 #define IO_BANK0_PROC1_INTF0_OFFSET _u(0x00000140) #define IO_BANK0_PROC1_INTF0_BITS _u(0xffffffff) #define IO_BANK0_PROC1_INTF0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO7_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO7_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO7_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC1_INTF0_GPIO7_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC1_INTF0_GPIO7_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC1_INTF0_GPIO7_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO7_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO7_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO7_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC1_INTF0_GPIO7_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC1_INTF0_GPIO7_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC1_INTF0_GPIO7_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC1_INTF0_GPIO7_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO6_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO6_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO6_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC1_INTF0_GPIO6_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC1_INTF0_GPIO6_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC1_INTF0_GPIO6_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO6_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO6_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO6_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC1_INTF0_GPIO6_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC1_INTF0_GPIO6_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC1_INTF0_GPIO6_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC1_INTF0_GPIO6_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO5_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO5_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO5_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTF0_GPIO5_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTF0_GPIO5_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTF0_GPIO5_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO5_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO5_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO5_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTF0_GPIO5_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTF0_GPIO5_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTF0_GPIO5_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTF0_GPIO5_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO4_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO4_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO4_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTF0_GPIO4_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTF0_GPIO4_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTF0_GPIO4_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO4_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO4_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO4_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTF0_GPIO4_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTF0_GPIO4_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTF0_GPIO4_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTF0_GPIO4_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO3_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO3_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO3_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTF0_GPIO3_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTF0_GPIO3_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTF0_GPIO3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO3_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO3_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO3_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTF0_GPIO3_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTF0_GPIO3_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTF0_GPIO3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTF0_GPIO3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO2_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO2_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO2_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTF0_GPIO2_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTF0_GPIO2_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTF0_GPIO2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO2_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO2_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO2_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTF0_GPIO2_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTF0_GPIO2_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTF0_GPIO2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTF0_GPIO2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO1_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO1_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO1_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTF0_GPIO1_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTF0_GPIO1_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTF0_GPIO1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO1_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO1_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO1_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTF0_GPIO1_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTF0_GPIO1_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTF0_GPIO1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTF0_GPIO1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO0_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO0_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO0_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTF0_GPIO0_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTF0_GPIO0_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTF0_GPIO0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO0_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO0_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO0_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTF0_GPIO0_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTF0_GPIO0_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTF0_GPIO0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTF0_GPIO0_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC1_INTF1 // Description : Interrupt Force for proc1 #define IO_BANK0_PROC1_INTF1_OFFSET _u(0x00000144) #define IO_BANK0_PROC1_INTF1_BITS _u(0xffffffff) #define IO_BANK0_PROC1_INTF1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO15_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO15_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO15_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC1_INTF1_GPIO15_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC1_INTF1_GPIO15_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC1_INTF1_GPIO15_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO15_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO15_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO15_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC1_INTF1_GPIO15_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC1_INTF1_GPIO15_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC1_INTF1_GPIO15_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC1_INTF1_GPIO15_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO14_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO14_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO14_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC1_INTF1_GPIO14_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC1_INTF1_GPIO14_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC1_INTF1_GPIO14_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO14_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO14_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO14_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC1_INTF1_GPIO14_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC1_INTF1_GPIO14_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC1_INTF1_GPIO14_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC1_INTF1_GPIO14_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO13_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO13_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO13_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTF1_GPIO13_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTF1_GPIO13_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTF1_GPIO13_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO13_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO13_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO13_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTF1_GPIO13_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTF1_GPIO13_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTF1_GPIO13_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTF1_GPIO13_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO12_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO12_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO12_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTF1_GPIO12_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTF1_GPIO12_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTF1_GPIO12_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO12_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO12_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO12_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTF1_GPIO12_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTF1_GPIO12_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTF1_GPIO12_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTF1_GPIO12_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO11_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO11_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO11_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTF1_GPIO11_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTF1_GPIO11_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTF1_GPIO11_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO11_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO11_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO11_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTF1_GPIO11_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTF1_GPIO11_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTF1_GPIO11_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTF1_GPIO11_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO10_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO10_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO10_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTF1_GPIO10_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTF1_GPIO10_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTF1_GPIO10_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO10_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO10_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO10_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTF1_GPIO10_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTF1_GPIO10_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTF1_GPIO10_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTF1_GPIO10_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO9_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO9_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO9_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTF1_GPIO9_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTF1_GPIO9_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTF1_GPIO9_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO9_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO9_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO9_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTF1_GPIO9_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTF1_GPIO9_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTF1_GPIO9_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTF1_GPIO9_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO8_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO8_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO8_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTF1_GPIO8_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTF1_GPIO8_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTF1_GPIO8_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO8_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO8_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO8_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTF1_GPIO8_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTF1_GPIO8_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTF1_GPIO8_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTF1_GPIO8_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC1_INTF2 // Description : Interrupt Force for proc1 #define IO_BANK0_PROC1_INTF2_OFFSET _u(0x00000148) #define IO_BANK0_PROC1_INTF2_BITS _u(0xffffffff) #define IO_BANK0_PROC1_INTF2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO23_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO23_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO23_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC1_INTF2_GPIO23_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC1_INTF2_GPIO23_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC1_INTF2_GPIO23_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO23_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO23_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO23_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC1_INTF2_GPIO23_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC1_INTF2_GPIO23_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC1_INTF2_GPIO23_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC1_INTF2_GPIO23_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO22_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO22_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO22_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC1_INTF2_GPIO22_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC1_INTF2_GPIO22_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC1_INTF2_GPIO22_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO22_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO22_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO22_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC1_INTF2_GPIO22_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC1_INTF2_GPIO22_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC1_INTF2_GPIO22_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC1_INTF2_GPIO22_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO21_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO21_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO21_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTF2_GPIO21_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTF2_GPIO21_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTF2_GPIO21_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO21_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO21_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO21_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTF2_GPIO21_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTF2_GPIO21_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTF2_GPIO21_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTF2_GPIO21_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO20_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO20_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO20_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTF2_GPIO20_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTF2_GPIO20_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTF2_GPIO20_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO20_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO20_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO20_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTF2_GPIO20_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTF2_GPIO20_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTF2_GPIO20_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTF2_GPIO20_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO19_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO19_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO19_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTF2_GPIO19_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTF2_GPIO19_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTF2_GPIO19_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO19_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO19_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO19_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTF2_GPIO19_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTF2_GPIO19_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTF2_GPIO19_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTF2_GPIO19_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO18_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO18_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO18_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTF2_GPIO18_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTF2_GPIO18_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTF2_GPIO18_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO18_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO18_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO18_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTF2_GPIO18_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTF2_GPIO18_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTF2_GPIO18_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTF2_GPIO18_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO17_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO17_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO17_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTF2_GPIO17_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTF2_GPIO17_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTF2_GPIO17_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO17_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO17_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO17_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTF2_GPIO17_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTF2_GPIO17_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTF2_GPIO17_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTF2_GPIO17_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO16_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO16_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO16_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTF2_GPIO16_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTF2_GPIO16_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTF2_GPIO16_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO16_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO16_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO16_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTF2_GPIO16_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTF2_GPIO16_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTF2_GPIO16_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTF2_GPIO16_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC1_INTF3 // Description : Interrupt Force for proc1 #define IO_BANK0_PROC1_INTF3_OFFSET _u(0x0000014c) #define IO_BANK0_PROC1_INTF3_BITS _u(0x00ffffff) #define IO_BANK0_PROC1_INTF3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO29_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO29_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO29_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTF3_GPIO29_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTF3_GPIO29_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTF3_GPIO29_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO29_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO29_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO29_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTF3_GPIO29_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTF3_GPIO29_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTF3_GPIO29_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTF3_GPIO29_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO28_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO28_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO28_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTF3_GPIO28_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTF3_GPIO28_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTF3_GPIO28_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO28_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO28_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO28_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTF3_GPIO28_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTF3_GPIO28_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTF3_GPIO28_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTF3_GPIO28_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO27_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO27_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO27_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTF3_GPIO27_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTF3_GPIO27_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTF3_GPIO27_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO27_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO27_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO27_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTF3_GPIO27_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTF3_GPIO27_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTF3_GPIO27_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTF3_GPIO27_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO26_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO26_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO26_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTF3_GPIO26_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTF3_GPIO26_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTF3_GPIO26_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO26_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO26_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO26_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTF3_GPIO26_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTF3_GPIO26_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTF3_GPIO26_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTF3_GPIO26_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO25_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO25_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO25_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTF3_GPIO25_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTF3_GPIO25_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTF3_GPIO25_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO25_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO25_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO25_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTF3_GPIO25_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTF3_GPIO25_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTF3_GPIO25_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTF3_GPIO25_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO24_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO24_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO24_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTF3_GPIO24_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTF3_GPIO24_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTF3_GPIO24_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO24_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO24_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO24_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTF3_GPIO24_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTF3_GPIO24_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTF3_GPIO24_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTF3_GPIO24_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_PROC1_INTS0 // Description : Interrupt status after masking & forcing for proc1 #define IO_BANK0_PROC1_INTS0_OFFSET _u(0x00000150) #define IO_BANK0_PROC1_INTS0_BITS _u(0xffffffff) #define IO_BANK0_PROC1_INTS0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO7_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO7_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO7_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC1_INTS0_GPIO7_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC1_INTS0_GPIO7_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC1_INTS0_GPIO7_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO7_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO7_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO7_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC1_INTS0_GPIO7_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC1_INTS0_GPIO7_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC1_INTS0_GPIO7_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC1_INTS0_GPIO7_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO6_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO6_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO6_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC1_INTS0_GPIO6_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC1_INTS0_GPIO6_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC1_INTS0_GPIO6_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO6_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO6_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO6_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC1_INTS0_GPIO6_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC1_INTS0_GPIO6_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC1_INTS0_GPIO6_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC1_INTS0_GPIO6_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO5_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO5_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO5_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTS0_GPIO5_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTS0_GPIO5_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTS0_GPIO5_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO5_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO5_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO5_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTS0_GPIO5_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTS0_GPIO5_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTS0_GPIO5_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTS0_GPIO5_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO4_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO4_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO4_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTS0_GPIO4_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTS0_GPIO4_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTS0_GPIO4_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO4_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO4_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO4_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTS0_GPIO4_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTS0_GPIO4_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTS0_GPIO4_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTS0_GPIO4_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO3_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO3_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO3_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTS0_GPIO3_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTS0_GPIO3_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTS0_GPIO3_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO3_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO3_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO3_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTS0_GPIO3_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTS0_GPIO3_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTS0_GPIO3_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTS0_GPIO3_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO2_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO2_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO2_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTS0_GPIO2_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTS0_GPIO2_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTS0_GPIO2_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO2_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO2_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO2_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTS0_GPIO2_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTS0_GPIO2_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTS0_GPIO2_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTS0_GPIO2_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO1_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO1_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO1_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTS0_GPIO1_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTS0_GPIO1_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTS0_GPIO1_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO1_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO1_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO1_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTS0_GPIO1_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTS0_GPIO1_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTS0_GPIO1_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTS0_GPIO1_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO0_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO0_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO0_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTS0_GPIO0_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTS0_GPIO0_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTS0_GPIO0_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO0_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO0_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO0_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTS0_GPIO0_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTS0_GPIO0_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTS0_GPIO0_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTS0_GPIO0_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_PROC1_INTS1 // Description : Interrupt status after masking & forcing for proc1 #define IO_BANK0_PROC1_INTS1_OFFSET _u(0x00000154) #define IO_BANK0_PROC1_INTS1_BITS _u(0xffffffff) #define IO_BANK0_PROC1_INTS1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO15_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO15_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO15_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC1_INTS1_GPIO15_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC1_INTS1_GPIO15_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC1_INTS1_GPIO15_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO15_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO15_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO15_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC1_INTS1_GPIO15_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC1_INTS1_GPIO15_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC1_INTS1_GPIO15_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC1_INTS1_GPIO15_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO14_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO14_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO14_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC1_INTS1_GPIO14_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC1_INTS1_GPIO14_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC1_INTS1_GPIO14_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO14_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO14_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO14_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC1_INTS1_GPIO14_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC1_INTS1_GPIO14_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC1_INTS1_GPIO14_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC1_INTS1_GPIO14_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO13_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO13_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO13_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTS1_GPIO13_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTS1_GPIO13_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTS1_GPIO13_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO13_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO13_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO13_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTS1_GPIO13_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTS1_GPIO13_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTS1_GPIO13_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTS1_GPIO13_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO12_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO12_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO12_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTS1_GPIO12_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTS1_GPIO12_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTS1_GPIO12_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO12_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO12_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO12_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTS1_GPIO12_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTS1_GPIO12_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTS1_GPIO12_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTS1_GPIO12_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO11_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO11_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO11_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTS1_GPIO11_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTS1_GPIO11_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTS1_GPIO11_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO11_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO11_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO11_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTS1_GPIO11_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTS1_GPIO11_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTS1_GPIO11_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTS1_GPIO11_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO10_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO10_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO10_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTS1_GPIO10_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTS1_GPIO10_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTS1_GPIO10_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO10_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO10_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO10_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTS1_GPIO10_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTS1_GPIO10_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTS1_GPIO10_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTS1_GPIO10_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO9_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO9_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO9_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTS1_GPIO9_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTS1_GPIO9_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTS1_GPIO9_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO9_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO9_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO9_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTS1_GPIO9_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTS1_GPIO9_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTS1_GPIO9_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTS1_GPIO9_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO8_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO8_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO8_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTS1_GPIO8_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTS1_GPIO8_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTS1_GPIO8_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO8_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO8_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO8_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTS1_GPIO8_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTS1_GPIO8_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTS1_GPIO8_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTS1_GPIO8_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_PROC1_INTS2 // Description : Interrupt status after masking & forcing for proc1 #define IO_BANK0_PROC1_INTS2_OFFSET _u(0x00000158) #define IO_BANK0_PROC1_INTS2_BITS _u(0xffffffff) #define IO_BANK0_PROC1_INTS2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO23_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO23_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO23_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_PROC1_INTS2_GPIO23_EDGE_HIGH_MSB _u(31) #define IO_BANK0_PROC1_INTS2_GPIO23_EDGE_HIGH_LSB _u(31) #define IO_BANK0_PROC1_INTS2_GPIO23_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO23_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO23_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO23_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_PROC1_INTS2_GPIO23_EDGE_LOW_MSB _u(30) #define IO_BANK0_PROC1_INTS2_GPIO23_EDGE_LOW_LSB _u(30) #define IO_BANK0_PROC1_INTS2_GPIO23_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_LOW_MSB _u(28) #define IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_LOW_LSB _u(28) #define IO_BANK0_PROC1_INTS2_GPIO23_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO22_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO22_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO22_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_PROC1_INTS2_GPIO22_EDGE_HIGH_MSB _u(27) #define IO_BANK0_PROC1_INTS2_GPIO22_EDGE_HIGH_LSB _u(27) #define IO_BANK0_PROC1_INTS2_GPIO22_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO22_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO22_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO22_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_PROC1_INTS2_GPIO22_EDGE_LOW_MSB _u(26) #define IO_BANK0_PROC1_INTS2_GPIO22_EDGE_LOW_LSB _u(26) #define IO_BANK0_PROC1_INTS2_GPIO22_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_LOW_MSB _u(24) #define IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_LOW_LSB _u(24) #define IO_BANK0_PROC1_INTS2_GPIO22_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO21_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO21_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO21_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTS2_GPIO21_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTS2_GPIO21_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTS2_GPIO21_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO21_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO21_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO21_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTS2_GPIO21_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTS2_GPIO21_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTS2_GPIO21_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTS2_GPIO21_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO20_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO20_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO20_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTS2_GPIO20_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTS2_GPIO20_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTS2_GPIO20_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO20_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO20_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO20_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTS2_GPIO20_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTS2_GPIO20_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTS2_GPIO20_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTS2_GPIO20_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO19_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO19_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO19_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTS2_GPIO19_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTS2_GPIO19_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTS2_GPIO19_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO19_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO19_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO19_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTS2_GPIO19_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTS2_GPIO19_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTS2_GPIO19_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTS2_GPIO19_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO18_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO18_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO18_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTS2_GPIO18_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTS2_GPIO18_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTS2_GPIO18_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO18_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO18_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO18_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTS2_GPIO18_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTS2_GPIO18_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTS2_GPIO18_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTS2_GPIO18_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO17_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO17_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO17_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTS2_GPIO17_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTS2_GPIO17_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTS2_GPIO17_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO17_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO17_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO17_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTS2_GPIO17_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTS2_GPIO17_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTS2_GPIO17_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTS2_GPIO17_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO16_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO16_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO16_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTS2_GPIO16_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTS2_GPIO16_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTS2_GPIO16_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO16_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO16_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO16_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTS2_GPIO16_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTS2_GPIO16_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTS2_GPIO16_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTS2_GPIO16_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_PROC1_INTS3 // Description : Interrupt status after masking & forcing for proc1 #define IO_BANK0_PROC1_INTS3_OFFSET _u(0x0000015c) #define IO_BANK0_PROC1_INTS3_BITS _u(0x00ffffff) #define IO_BANK0_PROC1_INTS3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO29_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO29_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO29_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_PROC1_INTS3_GPIO29_EDGE_HIGH_MSB _u(23) #define IO_BANK0_PROC1_INTS3_GPIO29_EDGE_HIGH_LSB _u(23) #define IO_BANK0_PROC1_INTS3_GPIO29_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO29_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO29_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO29_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_PROC1_INTS3_GPIO29_EDGE_LOW_MSB _u(22) #define IO_BANK0_PROC1_INTS3_GPIO29_EDGE_LOW_LSB _u(22) #define IO_BANK0_PROC1_INTS3_GPIO29_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_LOW_MSB _u(20) #define IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_LOW_LSB _u(20) #define IO_BANK0_PROC1_INTS3_GPIO29_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO28_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO28_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO28_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_PROC1_INTS3_GPIO28_EDGE_HIGH_MSB _u(19) #define IO_BANK0_PROC1_INTS3_GPIO28_EDGE_HIGH_LSB _u(19) #define IO_BANK0_PROC1_INTS3_GPIO28_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO28_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO28_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO28_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_PROC1_INTS3_GPIO28_EDGE_LOW_MSB _u(18) #define IO_BANK0_PROC1_INTS3_GPIO28_EDGE_LOW_LSB _u(18) #define IO_BANK0_PROC1_INTS3_GPIO28_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_LOW_MSB _u(16) #define IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_LOW_LSB _u(16) #define IO_BANK0_PROC1_INTS3_GPIO28_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO27_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO27_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO27_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_PROC1_INTS3_GPIO27_EDGE_HIGH_MSB _u(15) #define IO_BANK0_PROC1_INTS3_GPIO27_EDGE_HIGH_LSB _u(15) #define IO_BANK0_PROC1_INTS3_GPIO27_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO27_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO27_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO27_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_PROC1_INTS3_GPIO27_EDGE_LOW_MSB _u(14) #define IO_BANK0_PROC1_INTS3_GPIO27_EDGE_LOW_LSB _u(14) #define IO_BANK0_PROC1_INTS3_GPIO27_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_LOW_MSB _u(12) #define IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_LOW_LSB _u(12) #define IO_BANK0_PROC1_INTS3_GPIO27_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO26_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO26_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO26_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_PROC1_INTS3_GPIO26_EDGE_HIGH_MSB _u(11) #define IO_BANK0_PROC1_INTS3_GPIO26_EDGE_HIGH_LSB _u(11) #define IO_BANK0_PROC1_INTS3_GPIO26_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO26_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO26_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO26_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_PROC1_INTS3_GPIO26_EDGE_LOW_MSB _u(10) #define IO_BANK0_PROC1_INTS3_GPIO26_EDGE_LOW_LSB _u(10) #define IO_BANK0_PROC1_INTS3_GPIO26_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_LOW_MSB _u(8) #define IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_LOW_LSB _u(8) #define IO_BANK0_PROC1_INTS3_GPIO26_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO25_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO25_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO25_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_PROC1_INTS3_GPIO25_EDGE_HIGH_MSB _u(7) #define IO_BANK0_PROC1_INTS3_GPIO25_EDGE_HIGH_LSB _u(7) #define IO_BANK0_PROC1_INTS3_GPIO25_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO25_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO25_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO25_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_PROC1_INTS3_GPIO25_EDGE_LOW_MSB _u(6) #define IO_BANK0_PROC1_INTS3_GPIO25_EDGE_LOW_LSB _u(6) #define IO_BANK0_PROC1_INTS3_GPIO25_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_LOW_MSB _u(4) #define IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_LOW_LSB _u(4) #define IO_BANK0_PROC1_INTS3_GPIO25_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO24_EDGE_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO24_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO24_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_PROC1_INTS3_GPIO24_EDGE_HIGH_MSB _u(3) #define IO_BANK0_PROC1_INTS3_GPIO24_EDGE_HIGH_LSB _u(3) #define IO_BANK0_PROC1_INTS3_GPIO24_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO24_EDGE_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO24_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO24_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_PROC1_INTS3_GPIO24_EDGE_LOW_MSB _u(2) #define IO_BANK0_PROC1_INTS3_GPIO24_EDGE_LOW_LSB _u(2) #define IO_BANK0_PROC1_INTS3_GPIO24_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_HIGH // Description : None #define IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_LOW // Description : None #define IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_LOW_MSB _u(0) #define IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_LOW_LSB _u(0) #define IO_BANK0_PROC1_INTS3_GPIO24_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTE0 // Description : Interrupt Enable for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTE0_OFFSET _u(0x00000160) #define IO_BANK0_DORMANT_WAKE_INTE0_BITS _u(0xffffffff) #define IO_BANK0_DORMANT_WAKE_INTE0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_HIGH_MSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_HIGH_LSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_LOW_MSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_LOW_LSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_LOW_MSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_LOW_LSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO7_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_HIGH_MSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_HIGH_LSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_LOW_MSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_LOW_LSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_LOW_MSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_LOW_LSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO6_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO5_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO4_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTE1 // Description : Interrupt Enable for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTE1_OFFSET _u(0x00000164) #define IO_BANK0_DORMANT_WAKE_INTE1_BITS _u(0xffffffff) #define IO_BANK0_DORMANT_WAKE_INTE1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_HIGH_MSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_HIGH_LSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_LOW_MSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_LOW_LSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_LOW_MSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_LOW_LSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO15_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_HIGH_MSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_HIGH_LSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_LOW_MSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_LOW_LSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_LOW_MSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_LOW_LSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO14_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO13_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO12_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO11_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO10_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO9_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTE1_GPIO8_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTE2 // Description : Interrupt Enable for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTE2_OFFSET _u(0x00000168) #define IO_BANK0_DORMANT_WAKE_INTE2_BITS _u(0xffffffff) #define IO_BANK0_DORMANT_WAKE_INTE2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_HIGH_MSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_HIGH_LSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_LOW_MSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_LOW_LSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_LOW_MSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_LOW_LSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO23_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_HIGH_MSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_HIGH_LSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_LOW_MSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_LOW_LSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_LOW_MSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_LOW_LSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO22_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO21_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO20_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO19_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO18_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO17_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTE2_GPIO16_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTE3 // Description : Interrupt Enable for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTE3_OFFSET _u(0x0000016c) #define IO_BANK0_DORMANT_WAKE_INTE3_BITS _u(0x00ffffff) #define IO_BANK0_DORMANT_WAKE_INTE3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO29_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO28_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO27_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO26_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO25_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTE3_GPIO24_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTF0 // Description : Interrupt Force for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTF0_OFFSET _u(0x00000170) #define IO_BANK0_DORMANT_WAKE_INTF0_BITS _u(0xffffffff) #define IO_BANK0_DORMANT_WAKE_INTF0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_HIGH_MSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_HIGH_LSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_LOW_MSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_LOW_LSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_LOW_MSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_LOW_LSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO7_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_HIGH_MSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_HIGH_LSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_LOW_MSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_LOW_LSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_LOW_MSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_LOW_LSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO6_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO5_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO4_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTF0_GPIO0_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTF1 // Description : Interrupt Force for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTF1_OFFSET _u(0x00000174) #define IO_BANK0_DORMANT_WAKE_INTF1_BITS _u(0xffffffff) #define IO_BANK0_DORMANT_WAKE_INTF1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_HIGH_MSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_HIGH_LSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_LOW_MSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_LOW_LSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_LOW_MSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_LOW_LSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO15_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_HIGH_MSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_HIGH_LSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_LOW_MSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_LOW_LSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_LOW_MSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_LOW_LSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO14_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO13_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO12_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO11_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO10_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO9_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTF1_GPIO8_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTF2 // Description : Interrupt Force for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTF2_OFFSET _u(0x00000178) #define IO_BANK0_DORMANT_WAKE_INTF2_BITS _u(0xffffffff) #define IO_BANK0_DORMANT_WAKE_INTF2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_HIGH_MSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_HIGH_LSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_LOW_MSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_LOW_LSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_LOW_MSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_LOW_LSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO23_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_HIGH_MSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_HIGH_LSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_LOW_MSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_LOW_LSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_LOW_MSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_LOW_LSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO22_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO21_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO20_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO19_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO18_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO17_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTF2_GPIO16_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTF3 // Description : Interrupt Force for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTF3_OFFSET _u(0x0000017c) #define IO_BANK0_DORMANT_WAKE_INTF3_BITS _u(0x00ffffff) #define IO_BANK0_DORMANT_WAKE_INTF3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO29_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO28_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO27_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO26_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO25_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTF3_GPIO24_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTS0 // Description : Interrupt status after masking & forcing for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTS0_OFFSET _u(0x00000180) #define IO_BANK0_DORMANT_WAKE_INTS0_BITS _u(0xffffffff) #define IO_BANK0_DORMANT_WAKE_INTS0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_HIGH_MSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_HIGH_LSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_LOW_MSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_LOW_LSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_LOW_MSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_LOW_LSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO7_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_HIGH_MSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_HIGH_LSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_LOW_MSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_LOW_LSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_LOW_MSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_LOW_LSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO6_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO5_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO4_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO3_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO2_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO1_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTS0_GPIO0_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTS1 // Description : Interrupt status after masking & forcing for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTS1_OFFSET _u(0x00000184) #define IO_BANK0_DORMANT_WAKE_INTS1_BITS _u(0xffffffff) #define IO_BANK0_DORMANT_WAKE_INTS1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_HIGH_MSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_HIGH_LSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_LOW_MSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_LOW_LSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_LOW_MSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_LOW_LSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO15_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_HIGH_MSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_HIGH_LSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_LOW_MSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_LOW_LSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_LOW_MSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_LOW_LSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO14_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO13_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO12_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO11_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO10_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO9_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTS1_GPIO8_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTS2 // Description : Interrupt status after masking & forcing for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTS2_OFFSET _u(0x00000188) #define IO_BANK0_DORMANT_WAKE_INTS2_BITS _u(0xffffffff) #define IO_BANK0_DORMANT_WAKE_INTS2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_HIGH_BITS _u(0x80000000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_HIGH_MSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_HIGH_LSB _u(31) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_LOW_BITS _u(0x40000000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_LOW_MSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_LOW_LSB _u(30) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_HIGH_BITS _u(0x20000000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_HIGH_MSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_HIGH_LSB _u(29) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_LOW_BITS _u(0x10000000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_LOW_MSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_LOW_LSB _u(28) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO23_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_HIGH_BITS _u(0x08000000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_HIGH_MSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_HIGH_LSB _u(27) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_LOW_BITS _u(0x04000000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_LOW_MSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_LOW_LSB _u(26) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_HIGH_BITS _u(0x02000000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_HIGH_MSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_HIGH_LSB _u(25) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_LOW_BITS _u(0x01000000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_LOW_MSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_LOW_LSB _u(24) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO22_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO21_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO20_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO19_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO18_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO17_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTS2_GPIO16_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_BANK0_DORMANT_WAKE_INTS3 // Description : Interrupt status after masking & forcing for dormant_wake #define IO_BANK0_DORMANT_WAKE_INTS3_OFFSET _u(0x0000018c) #define IO_BANK0_DORMANT_WAKE_INTS3_BITS _u(0x00ffffff) #define IO_BANK0_DORMANT_WAKE_INTS3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_HIGH_BITS _u(0x00800000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_HIGH_MSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_HIGH_LSB _u(23) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_LOW_BITS _u(0x00400000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_LOW_MSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_LOW_LSB _u(22) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_HIGH_BITS _u(0x00200000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_HIGH_MSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_HIGH_LSB _u(21) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_LOW_BITS _u(0x00100000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_LOW_MSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_LOW_LSB _u(20) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO29_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_HIGH_BITS _u(0x00080000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_HIGH_MSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_HIGH_LSB _u(19) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_LOW_BITS _u(0x00040000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_LOW_MSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_LOW_LSB _u(18) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_HIGH_BITS _u(0x00020000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_HIGH_MSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_HIGH_LSB _u(17) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_LOW_BITS _u(0x00010000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_LOW_MSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_LOW_LSB _u(16) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO28_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_HIGH_BITS _u(0x00008000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_HIGH_MSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_HIGH_LSB _u(15) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_LOW_BITS _u(0x00004000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_LOW_MSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_LOW_LSB _u(14) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_HIGH_BITS _u(0x00002000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_HIGH_MSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_HIGH_LSB _u(13) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_LOW_BITS _u(0x00001000) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_LOW_MSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_LOW_LSB _u(12) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO27_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_HIGH_BITS _u(0x00000800) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_HIGH_MSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_HIGH_LSB _u(11) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_LOW_BITS _u(0x00000400) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_LOW_MSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_LOW_LSB _u(10) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_HIGH_BITS _u(0x00000200) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_HIGH_MSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_HIGH_LSB _u(9) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_LOW_BITS _u(0x00000100) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_LOW_MSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_LOW_LSB _u(8) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO26_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_HIGH_BITS _u(0x00000080) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_HIGH_MSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_HIGH_LSB _u(7) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_LOW_BITS _u(0x00000040) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_LOW_MSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_LOW_LSB _u(6) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_HIGH_BITS _u(0x00000020) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_HIGH_MSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_HIGH_LSB _u(5) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_LOW_BITS _u(0x00000010) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_LOW_MSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_LOW_LSB _u(4) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO25_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_HIGH_BITS _u(0x00000008) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_HIGH_MSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_HIGH_LSB _u(3) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_LOW_BITS _u(0x00000004) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_LOW_MSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_LOW_LSB _u(2) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_HIGH // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_HIGH_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_HIGH_BITS _u(0x00000002) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_HIGH_MSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_HIGH_LSB _u(1) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_LOW // Description : None #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_LOW_RESET _u(0x0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_LOW_BITS _u(0x00000001) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_LOW_MSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_LOW_LSB _u(0) #define IO_BANK0_DORMANT_WAKE_INTS3_GPIO24_LEVEL_LOW_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_IO_BANK0_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/io_qspi.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : IO_QSPI // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_IO_QSPI_DEFINED #define HARDWARE_REGS_IO_QSPI_DEFINED // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SCLK_STATUS // Description : GPIO status #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OFFSET _u(0x00000000) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_BITS _u(0x050a3300) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQTOPROC_MSB _u(26) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQTOPROC_LSB _u(26) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQFROMPAD_MSB _u(24) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQFROMPAD_LSB _u(24) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_INTOPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_INTOPERI_MSB _u(19) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_INTOPERI_LSB _u(19) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_INFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_INFROMPAD_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_INFROMPAD_LSB _u(17) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OETOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OETOPAD_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OETOPAD_LSB _u(13) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OEFROMPERI_MSB _u(12) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OEFROMPERI_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTTOPAD_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTTOPAD_LSB _u(9) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTFROMPERI_MSB _u(8) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTFROMPERI_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SCLK_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SCLK_CTRL // Description : GPIO control including function select and overrides. #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OFFSET _u(0x00000004) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_BITS _u(0x3003331f) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_IRQOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_IRQOVER_MSB _u(29) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_IRQOVER_LSB _u(28) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_IRQOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_INOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_INOVER_BITS _u(0x00030000) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_INOVER_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_INOVER_LSB _u(16) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_INOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OEOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OEOVER_BITS _u(0x00003000) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OEOVER_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OEOVER_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OEOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OUTOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OUTOVER_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OUTOVER_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OUTOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SCLK_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x00 -> xip_sclk // 0x05 -> sio_30 // 0x1f -> null #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_FUNCSEL_MSB _u(4) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_FUNCSEL_LSB _u(0) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_FUNCSEL_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_FUNCSEL_VALUE_XIP_SCLK _u(0x00) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_FUNCSEL_VALUE_SIO_30 _u(0x05) #define IO_QSPI_GPIO_QSPI_SCLK_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SS_STATUS // Description : GPIO status #define IO_QSPI_GPIO_QSPI_SS_STATUS_OFFSET _u(0x00000008) #define IO_QSPI_GPIO_QSPI_SS_STATUS_BITS _u(0x050a3300) #define IO_QSPI_GPIO_QSPI_SS_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_QSPI_GPIO_QSPI_SS_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_QSPI_GPIO_QSPI_SS_STATUS_IRQTOPROC_MSB _u(26) #define IO_QSPI_GPIO_QSPI_SS_STATUS_IRQTOPROC_LSB _u(26) #define IO_QSPI_GPIO_QSPI_SS_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_QSPI_GPIO_QSPI_SS_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_QSPI_GPIO_QSPI_SS_STATUS_IRQFROMPAD_MSB _u(24) #define IO_QSPI_GPIO_QSPI_SS_STATUS_IRQFROMPAD_LSB _u(24) #define IO_QSPI_GPIO_QSPI_SS_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_QSPI_GPIO_QSPI_SS_STATUS_INTOPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_QSPI_GPIO_QSPI_SS_STATUS_INTOPERI_MSB _u(19) #define IO_QSPI_GPIO_QSPI_SS_STATUS_INTOPERI_LSB _u(19) #define IO_QSPI_GPIO_QSPI_SS_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_QSPI_GPIO_QSPI_SS_STATUS_INFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_QSPI_GPIO_QSPI_SS_STATUS_INFROMPAD_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SS_STATUS_INFROMPAD_LSB _u(17) #define IO_QSPI_GPIO_QSPI_SS_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SS_STATUS_OETOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OETOPAD_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OETOPAD_LSB _u(13) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SS_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OEFROMPERI_MSB _u(12) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OEFROMPERI_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SS_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OUTTOPAD_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OUTTOPAD_LSB _u(9) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SS_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OUTFROMPERI_MSB _u(8) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OUTFROMPERI_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SS_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SS_CTRL // Description : GPIO control including function select and overrides. #define IO_QSPI_GPIO_QSPI_SS_CTRL_OFFSET _u(0x0000000c) #define IO_QSPI_GPIO_QSPI_SS_CTRL_BITS _u(0x3003331f) #define IO_QSPI_GPIO_QSPI_SS_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_QSPI_GPIO_QSPI_SS_CTRL_IRQOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_QSPI_GPIO_QSPI_SS_CTRL_IRQOVER_MSB _u(29) #define IO_QSPI_GPIO_QSPI_SS_CTRL_IRQOVER_LSB _u(28) #define IO_QSPI_GPIO_QSPI_SS_CTRL_IRQOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SS_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SS_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SS_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_QSPI_GPIO_QSPI_SS_CTRL_INOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_CTRL_INOVER_BITS _u(0x00030000) #define IO_QSPI_GPIO_QSPI_SS_CTRL_INOVER_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SS_CTRL_INOVER_LSB _u(16) #define IO_QSPI_GPIO_QSPI_SS_CTRL_INOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SS_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SS_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SS_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_BITS _u(0x00003000) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SS_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x00 -> xip_ss_n // 0x05 -> sio_31 // 0x1f -> null #define IO_QSPI_GPIO_QSPI_SS_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_QSPI_GPIO_QSPI_SS_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_QSPI_GPIO_QSPI_SS_CTRL_FUNCSEL_MSB _u(4) #define IO_QSPI_GPIO_QSPI_SS_CTRL_FUNCSEL_LSB _u(0) #define IO_QSPI_GPIO_QSPI_SS_CTRL_FUNCSEL_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SS_CTRL_FUNCSEL_VALUE_XIP_SS_N _u(0x00) #define IO_QSPI_GPIO_QSPI_SS_CTRL_FUNCSEL_VALUE_SIO_31 _u(0x05) #define IO_QSPI_GPIO_QSPI_SS_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SD0_STATUS // Description : GPIO status #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OFFSET _u(0x00000010) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_BITS _u(0x050a3300) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQTOPROC_MSB _u(26) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQTOPROC_LSB _u(26) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQFROMPAD_MSB _u(24) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQFROMPAD_LSB _u(24) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_QSPI_GPIO_QSPI_SD0_STATUS_INTOPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_INTOPERI_MSB _u(19) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_INTOPERI_LSB _u(19) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_QSPI_GPIO_QSPI_SD0_STATUS_INFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_INFROMPAD_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_INFROMPAD_LSB _u(17) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OETOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OETOPAD_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OETOPAD_LSB _u(13) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OEFROMPERI_MSB _u(12) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OEFROMPERI_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTTOPAD_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTTOPAD_LSB _u(9) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTFROMPERI_MSB _u(8) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTFROMPERI_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SD0_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SD0_CTRL // Description : GPIO control including function select and overrides. #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OFFSET _u(0x00000014) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_BITS _u(0x3003331f) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_QSPI_GPIO_QSPI_SD0_CTRL_IRQOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_IRQOVER_MSB _u(29) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_IRQOVER_LSB _u(28) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_IRQOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD0_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_QSPI_GPIO_QSPI_SD0_CTRL_INOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_INOVER_BITS _u(0x00030000) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_INOVER_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_INOVER_LSB _u(16) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_INOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD0_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OEOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OEOVER_BITS _u(0x00003000) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OEOVER_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OEOVER_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OEOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OUTOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OUTOVER_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OUTOVER_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OUTOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD0_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x00 -> xip_sd0 // 0x05 -> sio_32 // 0x1f -> null #define IO_QSPI_GPIO_QSPI_SD0_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_FUNCSEL_MSB _u(4) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_FUNCSEL_LSB _u(0) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_FUNCSEL_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD0_CTRL_FUNCSEL_VALUE_XIP_SD0 _u(0x00) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_FUNCSEL_VALUE_SIO_32 _u(0x05) #define IO_QSPI_GPIO_QSPI_SD0_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SD1_STATUS // Description : GPIO status #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OFFSET _u(0x00000018) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_BITS _u(0x050a3300) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQTOPROC_MSB _u(26) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQTOPROC_LSB _u(26) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQFROMPAD_MSB _u(24) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQFROMPAD_LSB _u(24) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_QSPI_GPIO_QSPI_SD1_STATUS_INTOPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_INTOPERI_MSB _u(19) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_INTOPERI_LSB _u(19) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_QSPI_GPIO_QSPI_SD1_STATUS_INFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_INFROMPAD_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_INFROMPAD_LSB _u(17) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OETOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OETOPAD_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OETOPAD_LSB _u(13) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OEFROMPERI_MSB _u(12) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OEFROMPERI_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTTOPAD_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTTOPAD_LSB _u(9) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTFROMPERI_MSB _u(8) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTFROMPERI_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SD1_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SD1_CTRL // Description : GPIO control including function select and overrides. #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OFFSET _u(0x0000001c) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_BITS _u(0x3003331f) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_QSPI_GPIO_QSPI_SD1_CTRL_IRQOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_IRQOVER_MSB _u(29) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_IRQOVER_LSB _u(28) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_IRQOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD1_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_QSPI_GPIO_QSPI_SD1_CTRL_INOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_INOVER_BITS _u(0x00030000) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_INOVER_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_INOVER_LSB _u(16) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_INOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD1_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OEOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OEOVER_BITS _u(0x00003000) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OEOVER_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OEOVER_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OEOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OUTOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OUTOVER_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OUTOVER_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OUTOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD1_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x00 -> xip_sd1 // 0x05 -> sio_33 // 0x1f -> null #define IO_QSPI_GPIO_QSPI_SD1_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_FUNCSEL_MSB _u(4) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_FUNCSEL_LSB _u(0) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_FUNCSEL_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD1_CTRL_FUNCSEL_VALUE_XIP_SD1 _u(0x00) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_FUNCSEL_VALUE_SIO_33 _u(0x05) #define IO_QSPI_GPIO_QSPI_SD1_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SD2_STATUS // Description : GPIO status #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OFFSET _u(0x00000020) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_BITS _u(0x050a3300) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQTOPROC_MSB _u(26) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQTOPROC_LSB _u(26) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQFROMPAD_MSB _u(24) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQFROMPAD_LSB _u(24) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_QSPI_GPIO_QSPI_SD2_STATUS_INTOPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_INTOPERI_MSB _u(19) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_INTOPERI_LSB _u(19) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_QSPI_GPIO_QSPI_SD2_STATUS_INFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_INFROMPAD_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_INFROMPAD_LSB _u(17) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OETOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OETOPAD_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OETOPAD_LSB _u(13) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OEFROMPERI_MSB _u(12) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OEFROMPERI_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTTOPAD_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTTOPAD_LSB _u(9) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTFROMPERI_MSB _u(8) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTFROMPERI_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SD2_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SD2_CTRL // Description : GPIO control including function select and overrides. #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OFFSET _u(0x00000024) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_BITS _u(0x3003331f) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_QSPI_GPIO_QSPI_SD2_CTRL_IRQOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_IRQOVER_MSB _u(29) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_IRQOVER_LSB _u(28) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_IRQOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD2_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_QSPI_GPIO_QSPI_SD2_CTRL_INOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_INOVER_BITS _u(0x00030000) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_INOVER_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_INOVER_LSB _u(16) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_INOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD2_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OEOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OEOVER_BITS _u(0x00003000) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OEOVER_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OEOVER_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OEOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OUTOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OUTOVER_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OUTOVER_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OUTOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD2_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x00 -> xip_sd2 // 0x05 -> sio_34 // 0x1f -> null #define IO_QSPI_GPIO_QSPI_SD2_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_FUNCSEL_MSB _u(4) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_FUNCSEL_LSB _u(0) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_FUNCSEL_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD2_CTRL_FUNCSEL_VALUE_XIP_SD2 _u(0x00) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_FUNCSEL_VALUE_SIO_34 _u(0x05) #define IO_QSPI_GPIO_QSPI_SD2_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SD3_STATUS // Description : GPIO status #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OFFSET _u(0x00000028) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_BITS _u(0x050a3300) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQTOPROC // Description : interrupt to processors, after override is applied #define IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQTOPROC_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQTOPROC_BITS _u(0x04000000) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQTOPROC_MSB _u(26) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQTOPROC_LSB _u(26) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQTOPROC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQFROMPAD // Description : interrupt from pad before override is applied #define IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQFROMPAD_BITS _u(0x01000000) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQFROMPAD_MSB _u(24) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQFROMPAD_LSB _u(24) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_IRQFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_STATUS_INTOPERI // Description : input signal to peripheral, after override is applied #define IO_QSPI_GPIO_QSPI_SD3_STATUS_INTOPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_INTOPERI_BITS _u(0x00080000) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_INTOPERI_MSB _u(19) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_INTOPERI_LSB _u(19) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_INTOPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_STATUS_INFROMPAD // Description : input signal from pad, before override is applied #define IO_QSPI_GPIO_QSPI_SD3_STATUS_INFROMPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_INFROMPAD_BITS _u(0x00020000) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_INFROMPAD_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_INFROMPAD_LSB _u(17) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_INFROMPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_STATUS_OETOPAD // Description : output enable to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OETOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OETOPAD_BITS _u(0x00002000) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OETOPAD_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OETOPAD_LSB _u(13) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OETOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_STATUS_OEFROMPERI // Description : output enable from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OEFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OEFROMPERI_BITS _u(0x00001000) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OEFROMPERI_MSB _u(12) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OEFROMPERI_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OEFROMPERI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTTOPAD // Description : output signal to pad after register override is applied #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTTOPAD_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTTOPAD_BITS _u(0x00000200) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTTOPAD_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTTOPAD_LSB _u(9) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTTOPAD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTFROMPERI // Description : output signal from selected peripheral, before register // override is applied #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTFROMPERI_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTFROMPERI_BITS _u(0x00000100) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTFROMPERI_MSB _u(8) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTFROMPERI_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SD3_STATUS_OUTFROMPERI_ACCESS "RO" // ============================================================================= // Register : IO_QSPI_GPIO_QSPI_SD3_CTRL // Description : GPIO control including function select and overrides. #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OFFSET _u(0x0000002c) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_BITS _u(0x3003331f) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_RESET _u(0x0000001f) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_CTRL_IRQOVER // Description : 0x0 -> don't invert the interrupt // 0x1 -> invert the interrupt // 0x2 -> drive interrupt low // 0x3 -> drive interrupt high #define IO_QSPI_GPIO_QSPI_SD3_CTRL_IRQOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_IRQOVER_BITS _u(0x30000000) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_IRQOVER_MSB _u(29) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_IRQOVER_LSB _u(28) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_IRQOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD3_CTRL_IRQOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_IRQOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_IRQOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_IRQOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_CTRL_INOVER // Description : 0x0 -> don't invert the peri input // 0x1 -> invert the peri input // 0x2 -> drive peri input low // 0x3 -> drive peri input high #define IO_QSPI_GPIO_QSPI_SD3_CTRL_INOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_INOVER_BITS _u(0x00030000) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_INOVER_MSB _u(17) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_INOVER_LSB _u(16) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_INOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD3_CTRL_INOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_INOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_INOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_INOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_CTRL_OEOVER // Description : 0x0 -> drive output enable from peripheral signal selected by // funcsel // 0x1 -> drive output enable from inverse of peripheral signal // selected by funcsel // 0x2 -> disable output // 0x3 -> enable output #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OEOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OEOVER_BITS _u(0x00003000) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OEOVER_MSB _u(13) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OEOVER_LSB _u(12) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OEOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OEOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OEOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OEOVER_VALUE_DISABLE _u(0x2) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OEOVER_VALUE_ENABLE _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_CTRL_OUTOVER // Description : 0x0 -> drive output from peripheral signal selected by funcsel // 0x1 -> drive output from inverse of peripheral signal selected // by funcsel // 0x2 -> drive output low // 0x3 -> drive output high #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OUTOVER_RESET _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OUTOVER_BITS _u(0x00000300) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OUTOVER_MSB _u(9) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OUTOVER_LSB _u(8) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OUTOVER_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OUTOVER_VALUE_NORMAL _u(0x0) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OUTOVER_VALUE_INVERT _u(0x1) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OUTOVER_VALUE_LOW _u(0x2) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_OUTOVER_VALUE_HIGH _u(0x3) // ----------------------------------------------------------------------------- // Field : IO_QSPI_GPIO_QSPI_SD3_CTRL_FUNCSEL // Description : 0-31 -> selects pin function according to the gpio table // 31 == NULL // 0x00 -> xip_sd3 // 0x05 -> sio_35 // 0x1f -> null #define IO_QSPI_GPIO_QSPI_SD3_CTRL_FUNCSEL_RESET _u(0x1f) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_FUNCSEL_BITS _u(0x0000001f) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_FUNCSEL_MSB _u(4) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_FUNCSEL_LSB _u(0) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_FUNCSEL_ACCESS "RW" #define IO_QSPI_GPIO_QSPI_SD3_CTRL_FUNCSEL_VALUE_XIP_SD3 _u(0x00) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_FUNCSEL_VALUE_SIO_35 _u(0x05) #define IO_QSPI_GPIO_QSPI_SD3_CTRL_FUNCSEL_VALUE_NULL _u(0x1f) // ============================================================================= // Register : IO_QSPI_INTR // Description : Raw Interrupts #define IO_QSPI_INTR_OFFSET _u(0x00000030) #define IO_QSPI_INTR_BITS _u(0x00ffffff) #define IO_QSPI_INTR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_HIGH_BITS _u(0x00800000) #define IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_HIGH_MSB _u(23) #define IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_HIGH_LSB _u(23) #define IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_LOW_BITS _u(0x00400000) #define IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_LOW_MSB _u(22) #define IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_LOW_LSB _u(22) #define IO_QSPI_INTR_GPIO_QSPI_SD3_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_HIGH_BITS _u(0x00200000) #define IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_HIGH_MSB _u(21) #define IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_HIGH_LSB _u(21) #define IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_LOW_BITS _u(0x00100000) #define IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_LOW_MSB _u(20) #define IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_LOW_LSB _u(20) #define IO_QSPI_INTR_GPIO_QSPI_SD3_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_HIGH_BITS _u(0x00080000) #define IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_HIGH_MSB _u(19) #define IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_HIGH_LSB _u(19) #define IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_LOW_BITS _u(0x00040000) #define IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_LOW_MSB _u(18) #define IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_LOW_LSB _u(18) #define IO_QSPI_INTR_GPIO_QSPI_SD2_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_HIGH_BITS _u(0x00020000) #define IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_HIGH_MSB _u(17) #define IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_HIGH_LSB _u(17) #define IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_LOW_BITS _u(0x00010000) #define IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_LOW_MSB _u(16) #define IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_LOW_LSB _u(16) #define IO_QSPI_INTR_GPIO_QSPI_SD2_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_HIGH_BITS _u(0x00008000) #define IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_HIGH_MSB _u(15) #define IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_HIGH_LSB _u(15) #define IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_LOW_BITS _u(0x00004000) #define IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_LOW_MSB _u(14) #define IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_LOW_LSB _u(14) #define IO_QSPI_INTR_GPIO_QSPI_SD1_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_HIGH_BITS _u(0x00002000) #define IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_HIGH_MSB _u(13) #define IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_HIGH_LSB _u(13) #define IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_LOW_BITS _u(0x00001000) #define IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_LOW_MSB _u(12) #define IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_LOW_LSB _u(12) #define IO_QSPI_INTR_GPIO_QSPI_SD1_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_HIGH_BITS _u(0x00000800) #define IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_HIGH_MSB _u(11) #define IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_HIGH_LSB _u(11) #define IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_LOW_BITS _u(0x00000400) #define IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_LOW_MSB _u(10) #define IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_LOW_LSB _u(10) #define IO_QSPI_INTR_GPIO_QSPI_SD0_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_HIGH_BITS _u(0x00000200) #define IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_HIGH_MSB _u(9) #define IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_HIGH_LSB _u(9) #define IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_LOW_BITS _u(0x00000100) #define IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_LOW_MSB _u(8) #define IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_LOW_LSB _u(8) #define IO_QSPI_INTR_GPIO_QSPI_SD0_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_HIGH_BITS _u(0x00000080) #define IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_HIGH_MSB _u(7) #define IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_HIGH_LSB _u(7) #define IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_LOW_BITS _u(0x00000040) #define IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_LOW_MSB _u(6) #define IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_LOW_LSB _u(6) #define IO_QSPI_INTR_GPIO_QSPI_SS_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_HIGH_BITS _u(0x00000020) #define IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_HIGH_MSB _u(5) #define IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_HIGH_LSB _u(5) #define IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_LOW_BITS _u(0x00000010) #define IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_LOW_MSB _u(4) #define IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_LOW_LSB _u(4) #define IO_QSPI_INTR_GPIO_QSPI_SS_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_HIGH_BITS _u(0x00000008) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_HIGH_MSB _u(3) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_HIGH_LSB _u(3) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_HIGH_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_LOW_BITS _u(0x00000004) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_LOW_MSB _u(2) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_LOW_LSB _u(2) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_EDGE_LOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_HIGH // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_HIGH_BITS _u(0x00000002) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_HIGH_MSB _u(1) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_HIGH_LSB _u(1) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_LOW // Description : None #define IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_LOW_BITS _u(0x00000001) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_LOW_MSB _u(0) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_LOW_LSB _u(0) #define IO_QSPI_INTR_GPIO_QSPI_SCLK_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_QSPI_PROC0_INTE // Description : Interrupt Enable for proc0 #define IO_QSPI_PROC0_INTE_OFFSET _u(0x00000034) #define IO_QSPI_PROC0_INTE_BITS _u(0x00ffffff) #define IO_QSPI_PROC0_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_HIGH_BITS _u(0x00800000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_HIGH_MSB _u(23) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_HIGH_LSB _u(23) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_LOW_BITS _u(0x00400000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_LOW_MSB _u(22) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_LOW_LSB _u(22) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_BITS _u(0x00200000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_MSB _u(21) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_LSB _u(21) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_LOW_BITS _u(0x00100000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_LOW_MSB _u(20) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_LOW_LSB _u(20) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_HIGH_BITS _u(0x00080000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_HIGH_MSB _u(19) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_HIGH_LSB _u(19) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_LOW_BITS _u(0x00040000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_LOW_MSB _u(18) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_LOW_LSB _u(18) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_BITS _u(0x00020000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_MSB _u(17) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_LSB _u(17) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_LOW_BITS _u(0x00010000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_LOW_MSB _u(16) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_LOW_LSB _u(16) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_HIGH_BITS _u(0x00008000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_HIGH_MSB _u(15) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_HIGH_LSB _u(15) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_LOW_BITS _u(0x00004000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_LOW_MSB _u(14) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_LOW_LSB _u(14) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_BITS _u(0x00002000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_MSB _u(13) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_LSB _u(13) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_LOW_BITS _u(0x00001000) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_LOW_MSB _u(12) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_LOW_LSB _u(12) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_HIGH_BITS _u(0x00000800) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_HIGH_MSB _u(11) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_HIGH_LSB _u(11) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_LOW_BITS _u(0x00000400) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_LOW_MSB _u(10) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_LOW_LSB _u(10) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_BITS _u(0x00000200) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_MSB _u(9) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_LSB _u(9) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_LOW_BITS _u(0x00000100) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_LOW_MSB _u(8) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_LOW_LSB _u(8) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SD0_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_HIGH_BITS _u(0x00000080) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_HIGH_MSB _u(7) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_HIGH_LSB _u(7) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_LOW_BITS _u(0x00000040) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_LOW_MSB _u(6) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_LOW_LSB _u(6) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_HIGH_BITS _u(0x00000020) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_HIGH_MSB _u(5) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_HIGH_LSB _u(5) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_LOW_BITS _u(0x00000010) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_LOW_MSB _u(4) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_LOW_LSB _u(4) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SS_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_BITS _u(0x00000008) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_MSB _u(3) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_LSB _u(3) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_LOW_BITS _u(0x00000004) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_LOW_MSB _u(2) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_LOW_LSB _u(2) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_BITS _u(0x00000002) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_MSB _u(1) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_LSB _u(1) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_BITS _u(0x00000001) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_MSB _u(0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_LSB _u(0) #define IO_QSPI_PROC0_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_QSPI_PROC0_INTF // Description : Interrupt Force for proc0 #define IO_QSPI_PROC0_INTF_OFFSET _u(0x00000038) #define IO_QSPI_PROC0_INTF_BITS _u(0x00ffffff) #define IO_QSPI_PROC0_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_HIGH_BITS _u(0x00800000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_HIGH_MSB _u(23) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_HIGH_LSB _u(23) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_LOW_BITS _u(0x00400000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_LOW_MSB _u(22) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_LOW_LSB _u(22) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_BITS _u(0x00200000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_MSB _u(21) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_LSB _u(21) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_LOW_BITS _u(0x00100000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_LOW_MSB _u(20) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_LOW_LSB _u(20) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_HIGH_BITS _u(0x00080000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_HIGH_MSB _u(19) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_HIGH_LSB _u(19) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_LOW_BITS _u(0x00040000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_LOW_MSB _u(18) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_LOW_LSB _u(18) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_BITS _u(0x00020000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_MSB _u(17) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_LSB _u(17) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_LOW_BITS _u(0x00010000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_LOW_MSB _u(16) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_LOW_LSB _u(16) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_HIGH_BITS _u(0x00008000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_HIGH_MSB _u(15) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_HIGH_LSB _u(15) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_LOW_BITS _u(0x00004000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_LOW_MSB _u(14) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_LOW_LSB _u(14) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_BITS _u(0x00002000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_MSB _u(13) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_LSB _u(13) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_LOW_BITS _u(0x00001000) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_LOW_MSB _u(12) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_LOW_LSB _u(12) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_HIGH_BITS _u(0x00000800) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_HIGH_MSB _u(11) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_HIGH_LSB _u(11) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_LOW_BITS _u(0x00000400) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_LOW_MSB _u(10) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_LOW_LSB _u(10) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_BITS _u(0x00000200) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_MSB _u(9) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_LSB _u(9) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_LOW_BITS _u(0x00000100) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_LOW_MSB _u(8) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_LOW_LSB _u(8) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SD0_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_HIGH_BITS _u(0x00000080) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_HIGH_MSB _u(7) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_HIGH_LSB _u(7) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_LOW_BITS _u(0x00000040) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_LOW_MSB _u(6) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_LOW_LSB _u(6) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_HIGH_BITS _u(0x00000020) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_HIGH_MSB _u(5) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_HIGH_LSB _u(5) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_LOW_BITS _u(0x00000010) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_LOW_MSB _u(4) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_LOW_LSB _u(4) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SS_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_BITS _u(0x00000008) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_MSB _u(3) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_LSB _u(3) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_LOW_BITS _u(0x00000004) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_LOW_MSB _u(2) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_LOW_LSB _u(2) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_BITS _u(0x00000002) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_MSB _u(1) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_LSB _u(1) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_BITS _u(0x00000001) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_MSB _u(0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_LSB _u(0) #define IO_QSPI_PROC0_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_QSPI_PROC0_INTS // Description : Interrupt status after masking & forcing for proc0 #define IO_QSPI_PROC0_INTS_OFFSET _u(0x0000003c) #define IO_QSPI_PROC0_INTS_BITS _u(0x00ffffff) #define IO_QSPI_PROC0_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_HIGH_BITS _u(0x00800000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_HIGH_MSB _u(23) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_HIGH_LSB _u(23) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_LOW_BITS _u(0x00400000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_LOW_MSB _u(22) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_LOW_LSB _u(22) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_BITS _u(0x00200000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_MSB _u(21) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_LSB _u(21) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_LOW_BITS _u(0x00100000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_LOW_MSB _u(20) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_LOW_LSB _u(20) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD3_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_HIGH_BITS _u(0x00080000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_HIGH_MSB _u(19) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_HIGH_LSB _u(19) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_LOW_BITS _u(0x00040000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_LOW_MSB _u(18) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_LOW_LSB _u(18) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_BITS _u(0x00020000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_MSB _u(17) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_LSB _u(17) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_LOW_BITS _u(0x00010000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_LOW_MSB _u(16) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_LOW_LSB _u(16) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD2_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_HIGH_BITS _u(0x00008000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_HIGH_MSB _u(15) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_HIGH_LSB _u(15) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_LOW_BITS _u(0x00004000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_LOW_MSB _u(14) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_LOW_LSB _u(14) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_BITS _u(0x00002000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_MSB _u(13) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_LSB _u(13) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_LOW_BITS _u(0x00001000) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_LOW_MSB _u(12) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_LOW_LSB _u(12) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD1_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_HIGH_BITS _u(0x00000800) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_HIGH_MSB _u(11) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_HIGH_LSB _u(11) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_LOW_BITS _u(0x00000400) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_LOW_MSB _u(10) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_LOW_LSB _u(10) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_BITS _u(0x00000200) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_MSB _u(9) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_LSB _u(9) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_LOW_BITS _u(0x00000100) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_LOW_MSB _u(8) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_LOW_LSB _u(8) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SD0_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_HIGH_BITS _u(0x00000080) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_HIGH_MSB _u(7) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_HIGH_LSB _u(7) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_LOW_BITS _u(0x00000040) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_LOW_MSB _u(6) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_LOW_LSB _u(6) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_HIGH_BITS _u(0x00000020) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_HIGH_MSB _u(5) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_HIGH_LSB _u(5) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_LOW_BITS _u(0x00000010) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_LOW_MSB _u(4) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_LOW_LSB _u(4) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SS_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_BITS _u(0x00000008) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_MSB _u(3) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_LSB _u(3) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_LOW_BITS _u(0x00000004) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_LOW_MSB _u(2) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_LOW_LSB _u(2) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_BITS _u(0x00000002) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_MSB _u(1) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_LSB _u(1) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_LOW // Description : None #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_BITS _u(0x00000001) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_MSB _u(0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_LSB _u(0) #define IO_QSPI_PROC0_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_QSPI_PROC1_INTE // Description : Interrupt Enable for proc1 #define IO_QSPI_PROC1_INTE_OFFSET _u(0x00000040) #define IO_QSPI_PROC1_INTE_BITS _u(0x00ffffff) #define IO_QSPI_PROC1_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_HIGH_BITS _u(0x00800000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_HIGH_MSB _u(23) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_HIGH_LSB _u(23) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_LOW_BITS _u(0x00400000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_LOW_MSB _u(22) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_LOW_LSB _u(22) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_BITS _u(0x00200000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_MSB _u(21) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_LSB _u(21) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_LOW_BITS _u(0x00100000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_LOW_MSB _u(20) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_LOW_LSB _u(20) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_HIGH_BITS _u(0x00080000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_HIGH_MSB _u(19) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_HIGH_LSB _u(19) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_LOW_BITS _u(0x00040000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_LOW_MSB _u(18) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_LOW_LSB _u(18) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_BITS _u(0x00020000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_MSB _u(17) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_LSB _u(17) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_LOW_BITS _u(0x00010000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_LOW_MSB _u(16) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_LOW_LSB _u(16) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_HIGH_BITS _u(0x00008000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_HIGH_MSB _u(15) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_HIGH_LSB _u(15) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_LOW_BITS _u(0x00004000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_LOW_MSB _u(14) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_LOW_LSB _u(14) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_BITS _u(0x00002000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_MSB _u(13) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_LSB _u(13) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_LOW_BITS _u(0x00001000) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_LOW_MSB _u(12) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_LOW_LSB _u(12) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_HIGH_BITS _u(0x00000800) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_HIGH_MSB _u(11) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_HIGH_LSB _u(11) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_LOW_BITS _u(0x00000400) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_LOW_MSB _u(10) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_LOW_LSB _u(10) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_BITS _u(0x00000200) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_MSB _u(9) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_LSB _u(9) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_LOW_BITS _u(0x00000100) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_LOW_MSB _u(8) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_LOW_LSB _u(8) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SD0_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_HIGH_BITS _u(0x00000080) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_HIGH_MSB _u(7) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_HIGH_LSB _u(7) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_LOW_BITS _u(0x00000040) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_LOW_MSB _u(6) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_LOW_LSB _u(6) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_HIGH_BITS _u(0x00000020) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_HIGH_MSB _u(5) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_HIGH_LSB _u(5) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_LOW_BITS _u(0x00000010) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_LOW_MSB _u(4) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_LOW_LSB _u(4) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SS_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_BITS _u(0x00000008) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_MSB _u(3) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_LSB _u(3) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_LOW_BITS _u(0x00000004) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_LOW_MSB _u(2) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_LOW_LSB _u(2) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_BITS _u(0x00000002) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_MSB _u(1) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_LSB _u(1) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_BITS _u(0x00000001) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_MSB _u(0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_LSB _u(0) #define IO_QSPI_PROC1_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_QSPI_PROC1_INTF // Description : Interrupt Force for proc1 #define IO_QSPI_PROC1_INTF_OFFSET _u(0x00000044) #define IO_QSPI_PROC1_INTF_BITS _u(0x00ffffff) #define IO_QSPI_PROC1_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_HIGH_BITS _u(0x00800000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_HIGH_MSB _u(23) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_HIGH_LSB _u(23) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_LOW_BITS _u(0x00400000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_LOW_MSB _u(22) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_LOW_LSB _u(22) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_BITS _u(0x00200000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_MSB _u(21) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_LSB _u(21) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_LOW_BITS _u(0x00100000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_LOW_MSB _u(20) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_LOW_LSB _u(20) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_HIGH_BITS _u(0x00080000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_HIGH_MSB _u(19) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_HIGH_LSB _u(19) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_LOW_BITS _u(0x00040000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_LOW_MSB _u(18) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_LOW_LSB _u(18) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_BITS _u(0x00020000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_MSB _u(17) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_LSB _u(17) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_LOW_BITS _u(0x00010000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_LOW_MSB _u(16) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_LOW_LSB _u(16) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_HIGH_BITS _u(0x00008000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_HIGH_MSB _u(15) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_HIGH_LSB _u(15) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_LOW_BITS _u(0x00004000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_LOW_MSB _u(14) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_LOW_LSB _u(14) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_BITS _u(0x00002000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_MSB _u(13) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_LSB _u(13) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_LOW_BITS _u(0x00001000) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_LOW_MSB _u(12) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_LOW_LSB _u(12) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_HIGH_BITS _u(0x00000800) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_HIGH_MSB _u(11) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_HIGH_LSB _u(11) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_LOW_BITS _u(0x00000400) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_LOW_MSB _u(10) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_LOW_LSB _u(10) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_BITS _u(0x00000200) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_MSB _u(9) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_LSB _u(9) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_LOW_BITS _u(0x00000100) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_LOW_MSB _u(8) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_LOW_LSB _u(8) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SD0_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_HIGH_BITS _u(0x00000080) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_HIGH_MSB _u(7) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_HIGH_LSB _u(7) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_LOW_BITS _u(0x00000040) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_LOW_MSB _u(6) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_LOW_LSB _u(6) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_HIGH_BITS _u(0x00000020) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_HIGH_MSB _u(5) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_HIGH_LSB _u(5) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_LOW_BITS _u(0x00000010) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_LOW_MSB _u(4) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_LOW_LSB _u(4) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SS_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_BITS _u(0x00000008) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_MSB _u(3) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_LSB _u(3) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_LOW_BITS _u(0x00000004) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_LOW_MSB _u(2) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_LOW_LSB _u(2) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_BITS _u(0x00000002) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_MSB _u(1) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_LSB _u(1) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_BITS _u(0x00000001) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_MSB _u(0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_LSB _u(0) #define IO_QSPI_PROC1_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_QSPI_PROC1_INTS // Description : Interrupt status after masking & forcing for proc1 #define IO_QSPI_PROC1_INTS_OFFSET _u(0x00000048) #define IO_QSPI_PROC1_INTS_BITS _u(0x00ffffff) #define IO_QSPI_PROC1_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_HIGH_BITS _u(0x00800000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_HIGH_MSB _u(23) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_HIGH_LSB _u(23) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_LOW_BITS _u(0x00400000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_LOW_MSB _u(22) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_LOW_LSB _u(22) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_BITS _u(0x00200000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_MSB _u(21) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_LSB _u(21) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_LOW_BITS _u(0x00100000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_LOW_MSB _u(20) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_LOW_LSB _u(20) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD3_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_HIGH_BITS _u(0x00080000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_HIGH_MSB _u(19) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_HIGH_LSB _u(19) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_LOW_BITS _u(0x00040000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_LOW_MSB _u(18) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_LOW_LSB _u(18) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_BITS _u(0x00020000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_MSB _u(17) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_LSB _u(17) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_LOW_BITS _u(0x00010000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_LOW_MSB _u(16) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_LOW_LSB _u(16) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD2_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_HIGH_BITS _u(0x00008000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_HIGH_MSB _u(15) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_HIGH_LSB _u(15) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_LOW_BITS _u(0x00004000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_LOW_MSB _u(14) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_LOW_LSB _u(14) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_BITS _u(0x00002000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_MSB _u(13) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_LSB _u(13) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_LOW_BITS _u(0x00001000) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_LOW_MSB _u(12) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_LOW_LSB _u(12) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD1_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_HIGH_BITS _u(0x00000800) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_HIGH_MSB _u(11) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_HIGH_LSB _u(11) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_LOW_BITS _u(0x00000400) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_LOW_MSB _u(10) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_LOW_LSB _u(10) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_BITS _u(0x00000200) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_MSB _u(9) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_LSB _u(9) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_LOW_BITS _u(0x00000100) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_LOW_MSB _u(8) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_LOW_LSB _u(8) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SD0_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_HIGH_BITS _u(0x00000080) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_HIGH_MSB _u(7) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_HIGH_LSB _u(7) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_LOW_BITS _u(0x00000040) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_LOW_MSB _u(6) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_LOW_LSB _u(6) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_HIGH_BITS _u(0x00000020) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_HIGH_MSB _u(5) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_HIGH_LSB _u(5) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_LOW_BITS _u(0x00000010) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_LOW_MSB _u(4) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_LOW_LSB _u(4) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SS_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_BITS _u(0x00000008) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_MSB _u(3) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_LSB _u(3) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_LOW_BITS _u(0x00000004) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_LOW_MSB _u(2) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_LOW_LSB _u(2) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_BITS _u(0x00000002) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_MSB _u(1) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_LSB _u(1) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_LOW // Description : None #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_BITS _u(0x00000001) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_MSB _u(0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_LSB _u(0) #define IO_QSPI_PROC1_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_ACCESS "RO" // ============================================================================= // Register : IO_QSPI_DORMANT_WAKE_INTE // Description : Interrupt Enable for dormant_wake #define IO_QSPI_DORMANT_WAKE_INTE_OFFSET _u(0x0000004c) #define IO_QSPI_DORMANT_WAKE_INTE_BITS _u(0x00ffffff) #define IO_QSPI_DORMANT_WAKE_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_HIGH_BITS _u(0x00800000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_HIGH_MSB _u(23) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_HIGH_LSB _u(23) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_LOW_BITS _u(0x00400000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_LOW_MSB _u(22) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_LOW_LSB _u(22) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_BITS _u(0x00200000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_MSB _u(21) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_LSB _u(21) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_LOW_BITS _u(0x00100000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_LOW_MSB _u(20) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_LOW_LSB _u(20) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_HIGH_BITS _u(0x00080000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_HIGH_MSB _u(19) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_HIGH_LSB _u(19) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_LOW_BITS _u(0x00040000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_LOW_MSB _u(18) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_LOW_LSB _u(18) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_BITS _u(0x00020000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_MSB _u(17) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_LSB _u(17) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_LOW_BITS _u(0x00010000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_LOW_MSB _u(16) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_LOW_LSB _u(16) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_HIGH_BITS _u(0x00008000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_HIGH_MSB _u(15) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_HIGH_LSB _u(15) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_LOW_BITS _u(0x00004000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_LOW_MSB _u(14) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_LOW_LSB _u(14) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_BITS _u(0x00002000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_MSB _u(13) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_LSB _u(13) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_LOW_BITS _u(0x00001000) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_LOW_MSB _u(12) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_LOW_LSB _u(12) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_HIGH_BITS _u(0x00000800) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_HIGH_MSB _u(11) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_HIGH_LSB _u(11) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_LOW_BITS _u(0x00000400) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_LOW_MSB _u(10) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_LOW_LSB _u(10) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_BITS _u(0x00000200) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_MSB _u(9) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_LSB _u(9) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_LOW_BITS _u(0x00000100) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_LOW_MSB _u(8) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_LOW_LSB _u(8) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SD0_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_HIGH_BITS _u(0x00000080) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_HIGH_MSB _u(7) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_HIGH_LSB _u(7) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_LOW_BITS _u(0x00000040) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_LOW_MSB _u(6) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_LOW_LSB _u(6) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_HIGH_BITS _u(0x00000020) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_HIGH_MSB _u(5) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_HIGH_LSB _u(5) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_LOW_BITS _u(0x00000010) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_LOW_MSB _u(4) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_LOW_LSB _u(4) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SS_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_BITS _u(0x00000008) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_MSB _u(3) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_LSB _u(3) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_LOW_BITS _u(0x00000004) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_LOW_MSB _u(2) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_LOW_LSB _u(2) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_BITS _u(0x00000002) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_MSB _u(1) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_LSB _u(1) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_BITS _u(0x00000001) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_MSB _u(0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_LSB _u(0) #define IO_QSPI_DORMANT_WAKE_INTE_GPIO_QSPI_SCLK_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_QSPI_DORMANT_WAKE_INTF // Description : Interrupt Force for dormant_wake #define IO_QSPI_DORMANT_WAKE_INTF_OFFSET _u(0x00000050) #define IO_QSPI_DORMANT_WAKE_INTF_BITS _u(0x00ffffff) #define IO_QSPI_DORMANT_WAKE_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_HIGH_BITS _u(0x00800000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_HIGH_MSB _u(23) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_HIGH_LSB _u(23) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_LOW_BITS _u(0x00400000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_LOW_MSB _u(22) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_LOW_LSB _u(22) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_BITS _u(0x00200000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_MSB _u(21) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_LSB _u(21) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_LOW_BITS _u(0x00100000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_LOW_MSB _u(20) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_LOW_LSB _u(20) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD3_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_HIGH_BITS _u(0x00080000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_HIGH_MSB _u(19) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_HIGH_LSB _u(19) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_LOW_BITS _u(0x00040000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_LOW_MSB _u(18) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_LOW_LSB _u(18) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_BITS _u(0x00020000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_MSB _u(17) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_LSB _u(17) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_LOW_BITS _u(0x00010000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_LOW_MSB _u(16) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_LOW_LSB _u(16) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD2_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_HIGH_BITS _u(0x00008000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_HIGH_MSB _u(15) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_HIGH_LSB _u(15) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_LOW_BITS _u(0x00004000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_LOW_MSB _u(14) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_LOW_LSB _u(14) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_BITS _u(0x00002000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_MSB _u(13) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_LSB _u(13) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_LOW_BITS _u(0x00001000) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_LOW_MSB _u(12) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_LOW_LSB _u(12) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD1_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_HIGH_BITS _u(0x00000800) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_HIGH_MSB _u(11) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_HIGH_LSB _u(11) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_LOW_BITS _u(0x00000400) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_LOW_MSB _u(10) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_LOW_LSB _u(10) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_BITS _u(0x00000200) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_MSB _u(9) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_LSB _u(9) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_LOW_BITS _u(0x00000100) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_LOW_MSB _u(8) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_LOW_LSB _u(8) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SD0_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_HIGH_BITS _u(0x00000080) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_HIGH_MSB _u(7) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_HIGH_LSB _u(7) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_LOW_BITS _u(0x00000040) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_LOW_MSB _u(6) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_LOW_LSB _u(6) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_HIGH_BITS _u(0x00000020) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_HIGH_MSB _u(5) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_HIGH_LSB _u(5) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_LOW_BITS _u(0x00000010) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_LOW_MSB _u(4) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_LOW_LSB _u(4) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SS_LEVEL_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_BITS _u(0x00000008) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_MSB _u(3) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_LSB _u(3) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_LOW_BITS _u(0x00000004) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_LOW_MSB _u(2) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_LOW_LSB _u(2) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_EDGE_LOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_BITS _u(0x00000002) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_MSB _u(1) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_LSB _u(1) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_HIGH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_BITS _u(0x00000001) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_MSB _u(0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_LSB _u(0) #define IO_QSPI_DORMANT_WAKE_INTF_GPIO_QSPI_SCLK_LEVEL_LOW_ACCESS "RW" // ============================================================================= // Register : IO_QSPI_DORMANT_WAKE_INTS // Description : Interrupt status after masking & forcing for dormant_wake #define IO_QSPI_DORMANT_WAKE_INTS_OFFSET _u(0x00000054) #define IO_QSPI_DORMANT_WAKE_INTS_BITS _u(0x00ffffff) #define IO_QSPI_DORMANT_WAKE_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_HIGH_BITS _u(0x00800000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_HIGH_MSB _u(23) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_HIGH_LSB _u(23) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_LOW_BITS _u(0x00400000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_LOW_MSB _u(22) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_LOW_LSB _u(22) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_BITS _u(0x00200000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_MSB _u(21) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_LSB _u(21) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_LOW_BITS _u(0x00100000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_LOW_MSB _u(20) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_LOW_LSB _u(20) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD3_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_HIGH_BITS _u(0x00080000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_HIGH_MSB _u(19) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_HIGH_LSB _u(19) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_LOW_BITS _u(0x00040000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_LOW_MSB _u(18) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_LOW_LSB _u(18) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_BITS _u(0x00020000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_MSB _u(17) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_LSB _u(17) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_LOW_BITS _u(0x00010000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_LOW_MSB _u(16) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_LOW_LSB _u(16) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD2_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_HIGH_BITS _u(0x00008000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_HIGH_MSB _u(15) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_HIGH_LSB _u(15) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_LOW_BITS _u(0x00004000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_LOW_MSB _u(14) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_LOW_LSB _u(14) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_BITS _u(0x00002000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_MSB _u(13) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_LSB _u(13) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_LOW_BITS _u(0x00001000) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_LOW_MSB _u(12) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_LOW_LSB _u(12) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD1_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_HIGH_BITS _u(0x00000800) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_HIGH_MSB _u(11) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_HIGH_LSB _u(11) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_LOW_BITS _u(0x00000400) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_LOW_MSB _u(10) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_LOW_LSB _u(10) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_BITS _u(0x00000200) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_MSB _u(9) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_LSB _u(9) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_LOW_BITS _u(0x00000100) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_LOW_MSB _u(8) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_LOW_LSB _u(8) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SD0_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_HIGH_BITS _u(0x00000080) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_HIGH_MSB _u(7) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_HIGH_LSB _u(7) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_LOW_BITS _u(0x00000040) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_LOW_MSB _u(6) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_LOW_LSB _u(6) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_HIGH_BITS _u(0x00000020) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_HIGH_MSB _u(5) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_HIGH_LSB _u(5) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_LOW_BITS _u(0x00000010) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_LOW_MSB _u(4) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_LOW_LSB _u(4) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SS_LEVEL_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_BITS _u(0x00000008) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_MSB _u(3) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_LSB _u(3) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_LOW_BITS _u(0x00000004) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_LOW_MSB _u(2) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_LOW_LSB _u(2) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_EDGE_LOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_BITS _u(0x00000002) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_MSB _u(1) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_LSB _u(1) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_HIGH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_LOW // Description : None #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_RESET _u(0x0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_BITS _u(0x00000001) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_MSB _u(0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_LSB _u(0) #define IO_QSPI_DORMANT_WAKE_INTS_GPIO_QSPI_SCLK_LEVEL_LOW_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_IO_QSPI_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/m0plus.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : M0PLUS // Version : 1 // Bus type : ahbl // Description : None // ============================================================================= #ifndef HARDWARE_REGS_M0PLUS_DEFINED #define HARDWARE_REGS_M0PLUS_DEFINED // ============================================================================= // Register : M0PLUS_SYST_CSR // Description : Use the SysTick Control and Status Register to enable the // SysTick features. #define M0PLUS_SYST_CSR_OFFSET _u(0x0000e010) #define M0PLUS_SYST_CSR_BITS _u(0x00010007) #define M0PLUS_SYST_CSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_SYST_CSR_COUNTFLAG // Description : Returns 1 if timer counted to 0 since last time this was read. // Clears on read by application or debugger. #define M0PLUS_SYST_CSR_COUNTFLAG_RESET _u(0x0) #define M0PLUS_SYST_CSR_COUNTFLAG_BITS _u(0x00010000) #define M0PLUS_SYST_CSR_COUNTFLAG_MSB _u(16) #define M0PLUS_SYST_CSR_COUNTFLAG_LSB _u(16) #define M0PLUS_SYST_CSR_COUNTFLAG_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_SYST_CSR_CLKSOURCE // Description : SysTick clock source. Always reads as one if SYST_CALIB reports // NOREF. // Selects the SysTick timer clock source: // 0 = External reference clock. // 1 = Processor clock. #define M0PLUS_SYST_CSR_CLKSOURCE_RESET _u(0x0) #define M0PLUS_SYST_CSR_CLKSOURCE_BITS _u(0x00000004) #define M0PLUS_SYST_CSR_CLKSOURCE_MSB _u(2) #define M0PLUS_SYST_CSR_CLKSOURCE_LSB _u(2) #define M0PLUS_SYST_CSR_CLKSOURCE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_SYST_CSR_TICKINT // Description : Enables SysTick exception request: // 0 = Counting down to zero does not assert the SysTick exception // request. // 1 = Counting down to zero to asserts the SysTick exception // request. #define M0PLUS_SYST_CSR_TICKINT_RESET _u(0x0) #define M0PLUS_SYST_CSR_TICKINT_BITS _u(0x00000002) #define M0PLUS_SYST_CSR_TICKINT_MSB _u(1) #define M0PLUS_SYST_CSR_TICKINT_LSB _u(1) #define M0PLUS_SYST_CSR_TICKINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_SYST_CSR_ENABLE // Description : Enable SysTick counter: // 0 = Counter disabled. // 1 = Counter enabled. #define M0PLUS_SYST_CSR_ENABLE_RESET _u(0x0) #define M0PLUS_SYST_CSR_ENABLE_BITS _u(0x00000001) #define M0PLUS_SYST_CSR_ENABLE_MSB _u(0) #define M0PLUS_SYST_CSR_ENABLE_LSB _u(0) #define M0PLUS_SYST_CSR_ENABLE_ACCESS "RW" // ============================================================================= // Register : M0PLUS_SYST_RVR // Description : Use the SysTick Reload Value Register to specify the start // value to load into the current value register when the counter // reaches 0. It can be any value between 0 and 0x00FFFFFF. A // start value of 0 is possible, but has no effect because the // SysTick interrupt and COUNTFLAG are activated when counting // from 1 to 0. The reset value of this register is UNKNOWN. // To generate a multi-shot timer with a period of N processor // clock cycles, use a RELOAD value of N-1. For example, if the // SysTick interrupt is required every 100 clock pulses, set // RELOAD to 99. #define M0PLUS_SYST_RVR_OFFSET _u(0x0000e014) #define M0PLUS_SYST_RVR_BITS _u(0x00ffffff) #define M0PLUS_SYST_RVR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_SYST_RVR_RELOAD // Description : Value to load into the SysTick Current Value Register when the // counter reaches 0. #define M0PLUS_SYST_RVR_RELOAD_RESET _u(0x000000) #define M0PLUS_SYST_RVR_RELOAD_BITS _u(0x00ffffff) #define M0PLUS_SYST_RVR_RELOAD_MSB _u(23) #define M0PLUS_SYST_RVR_RELOAD_LSB _u(0) #define M0PLUS_SYST_RVR_RELOAD_ACCESS "RW" // ============================================================================= // Register : M0PLUS_SYST_CVR // Description : Use the SysTick Current Value Register to find the current // value in the register. The reset value of this register is // UNKNOWN. #define M0PLUS_SYST_CVR_OFFSET _u(0x0000e018) #define M0PLUS_SYST_CVR_BITS _u(0x00ffffff) #define M0PLUS_SYST_CVR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_SYST_CVR_CURRENT // Description : Reads return the current value of the SysTick counter. This // register is write-clear. Writing to it with any value clears // the register to 0. Clearing this register also clears the // COUNTFLAG bit of the SysTick Control and Status Register. #define M0PLUS_SYST_CVR_CURRENT_RESET _u(0x000000) #define M0PLUS_SYST_CVR_CURRENT_BITS _u(0x00ffffff) #define M0PLUS_SYST_CVR_CURRENT_MSB _u(23) #define M0PLUS_SYST_CVR_CURRENT_LSB _u(0) #define M0PLUS_SYST_CVR_CURRENT_ACCESS "RW" // ============================================================================= // Register : M0PLUS_SYST_CALIB // Description : Use the SysTick Calibration Value Register to enable software // to scale to any required speed using divide and multiply. #define M0PLUS_SYST_CALIB_OFFSET _u(0x0000e01c) #define M0PLUS_SYST_CALIB_BITS _u(0xc0ffffff) #define M0PLUS_SYST_CALIB_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_SYST_CALIB_NOREF // Description : If reads as 1, the Reference clock is not provided - the // CLKSOURCE bit of the SysTick Control and Status register will // be forced to 1 and cannot be cleared to 0. #define M0PLUS_SYST_CALIB_NOREF_RESET _u(0x0) #define M0PLUS_SYST_CALIB_NOREF_BITS _u(0x80000000) #define M0PLUS_SYST_CALIB_NOREF_MSB _u(31) #define M0PLUS_SYST_CALIB_NOREF_LSB _u(31) #define M0PLUS_SYST_CALIB_NOREF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_SYST_CALIB_SKEW // Description : If reads as 1, the calibration value for 10ms is inexact (due // to clock frequency). #define M0PLUS_SYST_CALIB_SKEW_RESET _u(0x0) #define M0PLUS_SYST_CALIB_SKEW_BITS _u(0x40000000) #define M0PLUS_SYST_CALIB_SKEW_MSB _u(30) #define M0PLUS_SYST_CALIB_SKEW_LSB _u(30) #define M0PLUS_SYST_CALIB_SKEW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_SYST_CALIB_TENMS // Description : An optional Reload value to be used for 10ms (100Hz) timing, // subject to system clock skew errors. If the value reads as 0, // the calibration value is not known. #define M0PLUS_SYST_CALIB_TENMS_RESET _u(0x000000) #define M0PLUS_SYST_CALIB_TENMS_BITS _u(0x00ffffff) #define M0PLUS_SYST_CALIB_TENMS_MSB _u(23) #define M0PLUS_SYST_CALIB_TENMS_LSB _u(0) #define M0PLUS_SYST_CALIB_TENMS_ACCESS "RO" // ============================================================================= // Register : M0PLUS_NVIC_ISER // Description : Use the Interrupt Set-Enable Register to enable interrupts and // determine which interrupts are currently enabled. // If a pending interrupt is enabled, the NVIC activates the // interrupt based on its priority. If an interrupt is not // enabled, asserting its interrupt signal changes the interrupt // state to pending, but the NVIC never activates the interrupt, // regardless of its priority. #define M0PLUS_NVIC_ISER_OFFSET _u(0x0000e100) #define M0PLUS_NVIC_ISER_BITS _u(0xffffffff) #define M0PLUS_NVIC_ISER_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_ISER_SETENA // Description : Interrupt set-enable bits. // Write: // 0 = No effect. // 1 = Enable interrupt. // Read: // 0 = Interrupt disabled. // 1 = Interrupt enabled. #define M0PLUS_NVIC_ISER_SETENA_RESET _u(0x00000000) #define M0PLUS_NVIC_ISER_SETENA_BITS _u(0xffffffff) #define M0PLUS_NVIC_ISER_SETENA_MSB _u(31) #define M0PLUS_NVIC_ISER_SETENA_LSB _u(0) #define M0PLUS_NVIC_ISER_SETENA_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_ICER // Description : Use the Interrupt Clear-Enable Registers to disable interrupts // and determine which interrupts are currently enabled. #define M0PLUS_NVIC_ICER_OFFSET _u(0x0000e180) #define M0PLUS_NVIC_ICER_BITS _u(0xffffffff) #define M0PLUS_NVIC_ICER_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_ICER_CLRENA // Description : Interrupt clear-enable bits. // Write: // 0 = No effect. // 1 = Disable interrupt. // Read: // 0 = Interrupt disabled. // 1 = Interrupt enabled. #define M0PLUS_NVIC_ICER_CLRENA_RESET _u(0x00000000) #define M0PLUS_NVIC_ICER_CLRENA_BITS _u(0xffffffff) #define M0PLUS_NVIC_ICER_CLRENA_MSB _u(31) #define M0PLUS_NVIC_ICER_CLRENA_LSB _u(0) #define M0PLUS_NVIC_ICER_CLRENA_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_ISPR // Description : The NVIC_ISPR forces interrupts into the pending state, and // shows which interrupts are pending. #define M0PLUS_NVIC_ISPR_OFFSET _u(0x0000e200) #define M0PLUS_NVIC_ISPR_BITS _u(0xffffffff) #define M0PLUS_NVIC_ISPR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_ISPR_SETPEND // Description : Interrupt set-pending bits. // Write: // 0 = No effect. // 1 = Changes interrupt state to pending. // Read: // 0 = Interrupt is not pending. // 1 = Interrupt is pending. // Note: Writing 1 to the NVIC_ISPR bit corresponding to: // An interrupt that is pending has no effect. // A disabled interrupt sets the state of that interrupt to // pending. #define M0PLUS_NVIC_ISPR_SETPEND_RESET _u(0x00000000) #define M0PLUS_NVIC_ISPR_SETPEND_BITS _u(0xffffffff) #define M0PLUS_NVIC_ISPR_SETPEND_MSB _u(31) #define M0PLUS_NVIC_ISPR_SETPEND_LSB _u(0) #define M0PLUS_NVIC_ISPR_SETPEND_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_ICPR // Description : Use the Interrupt Clear-Pending Register to clear pending // interrupts and determine which interrupts are currently // pending. #define M0PLUS_NVIC_ICPR_OFFSET _u(0x0000e280) #define M0PLUS_NVIC_ICPR_BITS _u(0xffffffff) #define M0PLUS_NVIC_ICPR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_ICPR_CLRPEND // Description : Interrupt clear-pending bits. // Write: // 0 = No effect. // 1 = Removes pending state and interrupt. // Read: // 0 = Interrupt is not pending. // 1 = Interrupt is pending. #define M0PLUS_NVIC_ICPR_CLRPEND_RESET _u(0x00000000) #define M0PLUS_NVIC_ICPR_CLRPEND_BITS _u(0xffffffff) #define M0PLUS_NVIC_ICPR_CLRPEND_MSB _u(31) #define M0PLUS_NVIC_ICPR_CLRPEND_LSB _u(0) #define M0PLUS_NVIC_ICPR_CLRPEND_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_IPR0 // Description : Use the Interrupt Priority Registers to assign a priority from // 0 to 3 to each of the available interrupts. 0 is the highest // priority, and 3 is the lowest. // Note: Writing 1 to an NVIC_ICPR bit does not affect the active // state of the corresponding interrupt. // These registers are only word-accessible #define M0PLUS_NVIC_IPR0_OFFSET _u(0x0000e400) #define M0PLUS_NVIC_IPR0_BITS _u(0xc0c0c0c0) #define M0PLUS_NVIC_IPR0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR0_IP_3 // Description : Priority of interrupt 3 #define M0PLUS_NVIC_IPR0_IP_3_RESET _u(0x0) #define M0PLUS_NVIC_IPR0_IP_3_BITS _u(0xc0000000) #define M0PLUS_NVIC_IPR0_IP_3_MSB _u(31) #define M0PLUS_NVIC_IPR0_IP_3_LSB _u(30) #define M0PLUS_NVIC_IPR0_IP_3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR0_IP_2 // Description : Priority of interrupt 2 #define M0PLUS_NVIC_IPR0_IP_2_RESET _u(0x0) #define M0PLUS_NVIC_IPR0_IP_2_BITS _u(0x00c00000) #define M0PLUS_NVIC_IPR0_IP_2_MSB _u(23) #define M0PLUS_NVIC_IPR0_IP_2_LSB _u(22) #define M0PLUS_NVIC_IPR0_IP_2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR0_IP_1 // Description : Priority of interrupt 1 #define M0PLUS_NVIC_IPR0_IP_1_RESET _u(0x0) #define M0PLUS_NVIC_IPR0_IP_1_BITS _u(0x0000c000) #define M0PLUS_NVIC_IPR0_IP_1_MSB _u(15) #define M0PLUS_NVIC_IPR0_IP_1_LSB _u(14) #define M0PLUS_NVIC_IPR0_IP_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR0_IP_0 // Description : Priority of interrupt 0 #define M0PLUS_NVIC_IPR0_IP_0_RESET _u(0x0) #define M0PLUS_NVIC_IPR0_IP_0_BITS _u(0x000000c0) #define M0PLUS_NVIC_IPR0_IP_0_MSB _u(7) #define M0PLUS_NVIC_IPR0_IP_0_LSB _u(6) #define M0PLUS_NVIC_IPR0_IP_0_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_IPR1 // Description : Use the Interrupt Priority Registers to assign a priority from // 0 to 3 to each of the available interrupts. 0 is the highest // priority, and 3 is the lowest. #define M0PLUS_NVIC_IPR1_OFFSET _u(0x0000e404) #define M0PLUS_NVIC_IPR1_BITS _u(0xc0c0c0c0) #define M0PLUS_NVIC_IPR1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR1_IP_7 // Description : Priority of interrupt 7 #define M0PLUS_NVIC_IPR1_IP_7_RESET _u(0x0) #define M0PLUS_NVIC_IPR1_IP_7_BITS _u(0xc0000000) #define M0PLUS_NVIC_IPR1_IP_7_MSB _u(31) #define M0PLUS_NVIC_IPR1_IP_7_LSB _u(30) #define M0PLUS_NVIC_IPR1_IP_7_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR1_IP_6 // Description : Priority of interrupt 6 #define M0PLUS_NVIC_IPR1_IP_6_RESET _u(0x0) #define M0PLUS_NVIC_IPR1_IP_6_BITS _u(0x00c00000) #define M0PLUS_NVIC_IPR1_IP_6_MSB _u(23) #define M0PLUS_NVIC_IPR1_IP_6_LSB _u(22) #define M0PLUS_NVIC_IPR1_IP_6_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR1_IP_5 // Description : Priority of interrupt 5 #define M0PLUS_NVIC_IPR1_IP_5_RESET _u(0x0) #define M0PLUS_NVIC_IPR1_IP_5_BITS _u(0x0000c000) #define M0PLUS_NVIC_IPR1_IP_5_MSB _u(15) #define M0PLUS_NVIC_IPR1_IP_5_LSB _u(14) #define M0PLUS_NVIC_IPR1_IP_5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR1_IP_4 // Description : Priority of interrupt 4 #define M0PLUS_NVIC_IPR1_IP_4_RESET _u(0x0) #define M0PLUS_NVIC_IPR1_IP_4_BITS _u(0x000000c0) #define M0PLUS_NVIC_IPR1_IP_4_MSB _u(7) #define M0PLUS_NVIC_IPR1_IP_4_LSB _u(6) #define M0PLUS_NVIC_IPR1_IP_4_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_IPR2 // Description : Use the Interrupt Priority Registers to assign a priority from // 0 to 3 to each of the available interrupts. 0 is the highest // priority, and 3 is the lowest. #define M0PLUS_NVIC_IPR2_OFFSET _u(0x0000e408) #define M0PLUS_NVIC_IPR2_BITS _u(0xc0c0c0c0) #define M0PLUS_NVIC_IPR2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR2_IP_11 // Description : Priority of interrupt 11 #define M0PLUS_NVIC_IPR2_IP_11_RESET _u(0x0) #define M0PLUS_NVIC_IPR2_IP_11_BITS _u(0xc0000000) #define M0PLUS_NVIC_IPR2_IP_11_MSB _u(31) #define M0PLUS_NVIC_IPR2_IP_11_LSB _u(30) #define M0PLUS_NVIC_IPR2_IP_11_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR2_IP_10 // Description : Priority of interrupt 10 #define M0PLUS_NVIC_IPR2_IP_10_RESET _u(0x0) #define M0PLUS_NVIC_IPR2_IP_10_BITS _u(0x00c00000) #define M0PLUS_NVIC_IPR2_IP_10_MSB _u(23) #define M0PLUS_NVIC_IPR2_IP_10_LSB _u(22) #define M0PLUS_NVIC_IPR2_IP_10_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR2_IP_9 // Description : Priority of interrupt 9 #define M0PLUS_NVIC_IPR2_IP_9_RESET _u(0x0) #define M0PLUS_NVIC_IPR2_IP_9_BITS _u(0x0000c000) #define M0PLUS_NVIC_IPR2_IP_9_MSB _u(15) #define M0PLUS_NVIC_IPR2_IP_9_LSB _u(14) #define M0PLUS_NVIC_IPR2_IP_9_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR2_IP_8 // Description : Priority of interrupt 8 #define M0PLUS_NVIC_IPR2_IP_8_RESET _u(0x0) #define M0PLUS_NVIC_IPR2_IP_8_BITS _u(0x000000c0) #define M0PLUS_NVIC_IPR2_IP_8_MSB _u(7) #define M0PLUS_NVIC_IPR2_IP_8_LSB _u(6) #define M0PLUS_NVIC_IPR2_IP_8_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_IPR3 // Description : Use the Interrupt Priority Registers to assign a priority from // 0 to 3 to each of the available interrupts. 0 is the highest // priority, and 3 is the lowest. #define M0PLUS_NVIC_IPR3_OFFSET _u(0x0000e40c) #define M0PLUS_NVIC_IPR3_BITS _u(0xc0c0c0c0) #define M0PLUS_NVIC_IPR3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR3_IP_15 // Description : Priority of interrupt 15 #define M0PLUS_NVIC_IPR3_IP_15_RESET _u(0x0) #define M0PLUS_NVIC_IPR3_IP_15_BITS _u(0xc0000000) #define M0PLUS_NVIC_IPR3_IP_15_MSB _u(31) #define M0PLUS_NVIC_IPR3_IP_15_LSB _u(30) #define M0PLUS_NVIC_IPR3_IP_15_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR3_IP_14 // Description : Priority of interrupt 14 #define M0PLUS_NVIC_IPR3_IP_14_RESET _u(0x0) #define M0PLUS_NVIC_IPR3_IP_14_BITS _u(0x00c00000) #define M0PLUS_NVIC_IPR3_IP_14_MSB _u(23) #define M0PLUS_NVIC_IPR3_IP_14_LSB _u(22) #define M0PLUS_NVIC_IPR3_IP_14_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR3_IP_13 // Description : Priority of interrupt 13 #define M0PLUS_NVIC_IPR3_IP_13_RESET _u(0x0) #define M0PLUS_NVIC_IPR3_IP_13_BITS _u(0x0000c000) #define M0PLUS_NVIC_IPR3_IP_13_MSB _u(15) #define M0PLUS_NVIC_IPR3_IP_13_LSB _u(14) #define M0PLUS_NVIC_IPR3_IP_13_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR3_IP_12 // Description : Priority of interrupt 12 #define M0PLUS_NVIC_IPR3_IP_12_RESET _u(0x0) #define M0PLUS_NVIC_IPR3_IP_12_BITS _u(0x000000c0) #define M0PLUS_NVIC_IPR3_IP_12_MSB _u(7) #define M0PLUS_NVIC_IPR3_IP_12_LSB _u(6) #define M0PLUS_NVIC_IPR3_IP_12_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_IPR4 // Description : Use the Interrupt Priority Registers to assign a priority from // 0 to 3 to each of the available interrupts. 0 is the highest // priority, and 3 is the lowest. #define M0PLUS_NVIC_IPR4_OFFSET _u(0x0000e410) #define M0PLUS_NVIC_IPR4_BITS _u(0xc0c0c0c0) #define M0PLUS_NVIC_IPR4_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR4_IP_19 // Description : Priority of interrupt 19 #define M0PLUS_NVIC_IPR4_IP_19_RESET _u(0x0) #define M0PLUS_NVIC_IPR4_IP_19_BITS _u(0xc0000000) #define M0PLUS_NVIC_IPR4_IP_19_MSB _u(31) #define M0PLUS_NVIC_IPR4_IP_19_LSB _u(30) #define M0PLUS_NVIC_IPR4_IP_19_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR4_IP_18 // Description : Priority of interrupt 18 #define M0PLUS_NVIC_IPR4_IP_18_RESET _u(0x0) #define M0PLUS_NVIC_IPR4_IP_18_BITS _u(0x00c00000) #define M0PLUS_NVIC_IPR4_IP_18_MSB _u(23) #define M0PLUS_NVIC_IPR4_IP_18_LSB _u(22) #define M0PLUS_NVIC_IPR4_IP_18_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR4_IP_17 // Description : Priority of interrupt 17 #define M0PLUS_NVIC_IPR4_IP_17_RESET _u(0x0) #define M0PLUS_NVIC_IPR4_IP_17_BITS _u(0x0000c000) #define M0PLUS_NVIC_IPR4_IP_17_MSB _u(15) #define M0PLUS_NVIC_IPR4_IP_17_LSB _u(14) #define M0PLUS_NVIC_IPR4_IP_17_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR4_IP_16 // Description : Priority of interrupt 16 #define M0PLUS_NVIC_IPR4_IP_16_RESET _u(0x0) #define M0PLUS_NVIC_IPR4_IP_16_BITS _u(0x000000c0) #define M0PLUS_NVIC_IPR4_IP_16_MSB _u(7) #define M0PLUS_NVIC_IPR4_IP_16_LSB _u(6) #define M0PLUS_NVIC_IPR4_IP_16_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_IPR5 // Description : Use the Interrupt Priority Registers to assign a priority from // 0 to 3 to each of the available interrupts. 0 is the highest // priority, and 3 is the lowest. #define M0PLUS_NVIC_IPR5_OFFSET _u(0x0000e414) #define M0PLUS_NVIC_IPR5_BITS _u(0xc0c0c0c0) #define M0PLUS_NVIC_IPR5_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR5_IP_23 // Description : Priority of interrupt 23 #define M0PLUS_NVIC_IPR5_IP_23_RESET _u(0x0) #define M0PLUS_NVIC_IPR5_IP_23_BITS _u(0xc0000000) #define M0PLUS_NVIC_IPR5_IP_23_MSB _u(31) #define M0PLUS_NVIC_IPR5_IP_23_LSB _u(30) #define M0PLUS_NVIC_IPR5_IP_23_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR5_IP_22 // Description : Priority of interrupt 22 #define M0PLUS_NVIC_IPR5_IP_22_RESET _u(0x0) #define M0PLUS_NVIC_IPR5_IP_22_BITS _u(0x00c00000) #define M0PLUS_NVIC_IPR5_IP_22_MSB _u(23) #define M0PLUS_NVIC_IPR5_IP_22_LSB _u(22) #define M0PLUS_NVIC_IPR5_IP_22_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR5_IP_21 // Description : Priority of interrupt 21 #define M0PLUS_NVIC_IPR5_IP_21_RESET _u(0x0) #define M0PLUS_NVIC_IPR5_IP_21_BITS _u(0x0000c000) #define M0PLUS_NVIC_IPR5_IP_21_MSB _u(15) #define M0PLUS_NVIC_IPR5_IP_21_LSB _u(14) #define M0PLUS_NVIC_IPR5_IP_21_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR5_IP_20 // Description : Priority of interrupt 20 #define M0PLUS_NVIC_IPR5_IP_20_RESET _u(0x0) #define M0PLUS_NVIC_IPR5_IP_20_BITS _u(0x000000c0) #define M0PLUS_NVIC_IPR5_IP_20_MSB _u(7) #define M0PLUS_NVIC_IPR5_IP_20_LSB _u(6) #define M0PLUS_NVIC_IPR5_IP_20_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_IPR6 // Description : Use the Interrupt Priority Registers to assign a priority from // 0 to 3 to each of the available interrupts. 0 is the highest // priority, and 3 is the lowest. #define M0PLUS_NVIC_IPR6_OFFSET _u(0x0000e418) #define M0PLUS_NVIC_IPR6_BITS _u(0xc0c0c0c0) #define M0PLUS_NVIC_IPR6_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR6_IP_27 // Description : Priority of interrupt 27 #define M0PLUS_NVIC_IPR6_IP_27_RESET _u(0x0) #define M0PLUS_NVIC_IPR6_IP_27_BITS _u(0xc0000000) #define M0PLUS_NVIC_IPR6_IP_27_MSB _u(31) #define M0PLUS_NVIC_IPR6_IP_27_LSB _u(30) #define M0PLUS_NVIC_IPR6_IP_27_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR6_IP_26 // Description : Priority of interrupt 26 #define M0PLUS_NVIC_IPR6_IP_26_RESET _u(0x0) #define M0PLUS_NVIC_IPR6_IP_26_BITS _u(0x00c00000) #define M0PLUS_NVIC_IPR6_IP_26_MSB _u(23) #define M0PLUS_NVIC_IPR6_IP_26_LSB _u(22) #define M0PLUS_NVIC_IPR6_IP_26_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR6_IP_25 // Description : Priority of interrupt 25 #define M0PLUS_NVIC_IPR6_IP_25_RESET _u(0x0) #define M0PLUS_NVIC_IPR6_IP_25_BITS _u(0x0000c000) #define M0PLUS_NVIC_IPR6_IP_25_MSB _u(15) #define M0PLUS_NVIC_IPR6_IP_25_LSB _u(14) #define M0PLUS_NVIC_IPR6_IP_25_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR6_IP_24 // Description : Priority of interrupt 24 #define M0PLUS_NVIC_IPR6_IP_24_RESET _u(0x0) #define M0PLUS_NVIC_IPR6_IP_24_BITS _u(0x000000c0) #define M0PLUS_NVIC_IPR6_IP_24_MSB _u(7) #define M0PLUS_NVIC_IPR6_IP_24_LSB _u(6) #define M0PLUS_NVIC_IPR6_IP_24_ACCESS "RW" // ============================================================================= // Register : M0PLUS_NVIC_IPR7 // Description : Use the Interrupt Priority Registers to assign a priority from // 0 to 3 to each of the available interrupts. 0 is the highest // priority, and 3 is the lowest. #define M0PLUS_NVIC_IPR7_OFFSET _u(0x0000e41c) #define M0PLUS_NVIC_IPR7_BITS _u(0xc0c0c0c0) #define M0PLUS_NVIC_IPR7_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR7_IP_31 // Description : Priority of interrupt 31 #define M0PLUS_NVIC_IPR7_IP_31_RESET _u(0x0) #define M0PLUS_NVIC_IPR7_IP_31_BITS _u(0xc0000000) #define M0PLUS_NVIC_IPR7_IP_31_MSB _u(31) #define M0PLUS_NVIC_IPR7_IP_31_LSB _u(30) #define M0PLUS_NVIC_IPR7_IP_31_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR7_IP_30 // Description : Priority of interrupt 30 #define M0PLUS_NVIC_IPR7_IP_30_RESET _u(0x0) #define M0PLUS_NVIC_IPR7_IP_30_BITS _u(0x00c00000) #define M0PLUS_NVIC_IPR7_IP_30_MSB _u(23) #define M0PLUS_NVIC_IPR7_IP_30_LSB _u(22) #define M0PLUS_NVIC_IPR7_IP_30_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR7_IP_29 // Description : Priority of interrupt 29 #define M0PLUS_NVIC_IPR7_IP_29_RESET _u(0x0) #define M0PLUS_NVIC_IPR7_IP_29_BITS _u(0x0000c000) #define M0PLUS_NVIC_IPR7_IP_29_MSB _u(15) #define M0PLUS_NVIC_IPR7_IP_29_LSB _u(14) #define M0PLUS_NVIC_IPR7_IP_29_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_NVIC_IPR7_IP_28 // Description : Priority of interrupt 28 #define M0PLUS_NVIC_IPR7_IP_28_RESET _u(0x0) #define M0PLUS_NVIC_IPR7_IP_28_BITS _u(0x000000c0) #define M0PLUS_NVIC_IPR7_IP_28_MSB _u(7) #define M0PLUS_NVIC_IPR7_IP_28_LSB _u(6) #define M0PLUS_NVIC_IPR7_IP_28_ACCESS "RW" // ============================================================================= // Register : M0PLUS_CPUID // Description : Read the CPU ID Base Register to determine: the ID number of // the processor core, the version number of the processor core, // the implementation details of the processor core. #define M0PLUS_CPUID_OFFSET _u(0x0000ed00) #define M0PLUS_CPUID_BITS _u(0xffffffff) #define M0PLUS_CPUID_RESET _u(0x410cc601) // ----------------------------------------------------------------------------- // Field : M0PLUS_CPUID_IMPLEMENTER // Description : Implementor code: 0x41 = ARM #define M0PLUS_CPUID_IMPLEMENTER_RESET _u(0x41) #define M0PLUS_CPUID_IMPLEMENTER_BITS _u(0xff000000) #define M0PLUS_CPUID_IMPLEMENTER_MSB _u(31) #define M0PLUS_CPUID_IMPLEMENTER_LSB _u(24) #define M0PLUS_CPUID_IMPLEMENTER_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_CPUID_VARIANT // Description : Major revision number n in the rnpm revision status: // 0x0 = Revision 0. #define M0PLUS_CPUID_VARIANT_RESET _u(0x0) #define M0PLUS_CPUID_VARIANT_BITS _u(0x00f00000) #define M0PLUS_CPUID_VARIANT_MSB _u(23) #define M0PLUS_CPUID_VARIANT_LSB _u(20) #define M0PLUS_CPUID_VARIANT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_CPUID_ARCHITECTURE // Description : Constant that defines the architecture of the processor: // 0xC = ARMv6-M architecture. #define M0PLUS_CPUID_ARCHITECTURE_RESET _u(0xc) #define M0PLUS_CPUID_ARCHITECTURE_BITS _u(0x000f0000) #define M0PLUS_CPUID_ARCHITECTURE_MSB _u(19) #define M0PLUS_CPUID_ARCHITECTURE_LSB _u(16) #define M0PLUS_CPUID_ARCHITECTURE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_CPUID_PARTNO // Description : Number of processor within family: 0xC60 = Cortex-M0+ #define M0PLUS_CPUID_PARTNO_RESET _u(0xc60) #define M0PLUS_CPUID_PARTNO_BITS _u(0x0000fff0) #define M0PLUS_CPUID_PARTNO_MSB _u(15) #define M0PLUS_CPUID_PARTNO_LSB _u(4) #define M0PLUS_CPUID_PARTNO_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_CPUID_REVISION // Description : Minor revision number m in the rnpm revision status: // 0x1 = Patch 1. #define M0PLUS_CPUID_REVISION_RESET _u(0x1) #define M0PLUS_CPUID_REVISION_BITS _u(0x0000000f) #define M0PLUS_CPUID_REVISION_MSB _u(3) #define M0PLUS_CPUID_REVISION_LSB _u(0) #define M0PLUS_CPUID_REVISION_ACCESS "RO" // ============================================================================= // Register : M0PLUS_ICSR // Description : Use the Interrupt Control State Register to set a pending // Non-Maskable Interrupt (NMI), set or clear a pending PendSV, // set or clear a pending SysTick, check for pending exceptions, // check the vector number of the highest priority pended // exception, check the vector number of the active exception. #define M0PLUS_ICSR_OFFSET _u(0x0000ed04) #define M0PLUS_ICSR_BITS _u(0x9edff1ff) #define M0PLUS_ICSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_ICSR_NMIPENDSET // Description : Setting this bit will activate an NMI. Since NMI is the highest // priority exception, it will activate as soon as it is // registered. // NMI set-pending bit. // Write: // 0 = No effect. // 1 = Changes NMI exception state to pending. // Read: // 0 = NMI exception is not pending. // 1 = NMI exception is pending. // Because NMI is the highest-priority exception, normally the // processor enters the NMI // exception handler as soon as it detects a write of 1 to this // bit. Entering the handler then clears // this bit to 0. This means a read of this bit by the NMI // exception handler returns 1 only if the // NMI signal is reasserted while the processor is executing that // handler. #define M0PLUS_ICSR_NMIPENDSET_RESET _u(0x0) #define M0PLUS_ICSR_NMIPENDSET_BITS _u(0x80000000) #define M0PLUS_ICSR_NMIPENDSET_MSB _u(31) #define M0PLUS_ICSR_NMIPENDSET_LSB _u(31) #define M0PLUS_ICSR_NMIPENDSET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_ICSR_PENDSVSET // Description : PendSV set-pending bit. // Write: // 0 = No effect. // 1 = Changes PendSV exception state to pending. // Read: // 0 = PendSV exception is not pending. // 1 = PendSV exception is pending. // Writing 1 to this bit is the only way to set the PendSV // exception state to pending. #define M0PLUS_ICSR_PENDSVSET_RESET _u(0x0) #define M0PLUS_ICSR_PENDSVSET_BITS _u(0x10000000) #define M0PLUS_ICSR_PENDSVSET_MSB _u(28) #define M0PLUS_ICSR_PENDSVSET_LSB _u(28) #define M0PLUS_ICSR_PENDSVSET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_ICSR_PENDSVCLR // Description : PendSV clear-pending bit. // Write: // 0 = No effect. // 1 = Removes the pending state from the PendSV exception. #define M0PLUS_ICSR_PENDSVCLR_RESET _u(0x0) #define M0PLUS_ICSR_PENDSVCLR_BITS _u(0x08000000) #define M0PLUS_ICSR_PENDSVCLR_MSB _u(27) #define M0PLUS_ICSR_PENDSVCLR_LSB _u(27) #define M0PLUS_ICSR_PENDSVCLR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_ICSR_PENDSTSET // Description : SysTick exception set-pending bit. // Write: // 0 = No effect. // 1 = Changes SysTick exception state to pending. // Read: // 0 = SysTick exception is not pending. // 1 = SysTick exception is pending. #define M0PLUS_ICSR_PENDSTSET_RESET _u(0x0) #define M0PLUS_ICSR_PENDSTSET_BITS _u(0x04000000) #define M0PLUS_ICSR_PENDSTSET_MSB _u(26) #define M0PLUS_ICSR_PENDSTSET_LSB _u(26) #define M0PLUS_ICSR_PENDSTSET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_ICSR_PENDSTCLR // Description : SysTick exception clear-pending bit. // Write: // 0 = No effect. // 1 = Removes the pending state from the SysTick exception. // This bit is WO. On a register read its value is Unknown. #define M0PLUS_ICSR_PENDSTCLR_RESET _u(0x0) #define M0PLUS_ICSR_PENDSTCLR_BITS _u(0x02000000) #define M0PLUS_ICSR_PENDSTCLR_MSB _u(25) #define M0PLUS_ICSR_PENDSTCLR_LSB _u(25) #define M0PLUS_ICSR_PENDSTCLR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_ICSR_ISRPREEMPT // Description : The system can only access this bit when the core is halted. It // indicates that a pending interrupt is to be taken in the next // running cycle. If C_MASKINTS is clear in the Debug Halting // Control and Status Register, the interrupt is serviced. #define M0PLUS_ICSR_ISRPREEMPT_RESET _u(0x0) #define M0PLUS_ICSR_ISRPREEMPT_BITS _u(0x00800000) #define M0PLUS_ICSR_ISRPREEMPT_MSB _u(23) #define M0PLUS_ICSR_ISRPREEMPT_LSB _u(23) #define M0PLUS_ICSR_ISRPREEMPT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_ICSR_ISRPENDING // Description : External interrupt pending flag #define M0PLUS_ICSR_ISRPENDING_RESET _u(0x0) #define M0PLUS_ICSR_ISRPENDING_BITS _u(0x00400000) #define M0PLUS_ICSR_ISRPENDING_MSB _u(22) #define M0PLUS_ICSR_ISRPENDING_LSB _u(22) #define M0PLUS_ICSR_ISRPENDING_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_ICSR_VECTPENDING // Description : Indicates the exception number for the highest priority pending // exception: 0 = no pending exceptions. Non zero = The pending // state includes the effect of memory-mapped enable and mask // registers. It does not include the PRIMASK special-purpose // register qualifier. #define M0PLUS_ICSR_VECTPENDING_RESET _u(0x000) #define M0PLUS_ICSR_VECTPENDING_BITS _u(0x001ff000) #define M0PLUS_ICSR_VECTPENDING_MSB _u(20) #define M0PLUS_ICSR_VECTPENDING_LSB _u(12) #define M0PLUS_ICSR_VECTPENDING_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_ICSR_VECTACTIVE // Description : Active exception number field. Reset clears the VECTACTIVE // field. #define M0PLUS_ICSR_VECTACTIVE_RESET _u(0x000) #define M0PLUS_ICSR_VECTACTIVE_BITS _u(0x000001ff) #define M0PLUS_ICSR_VECTACTIVE_MSB _u(8) #define M0PLUS_ICSR_VECTACTIVE_LSB _u(0) #define M0PLUS_ICSR_VECTACTIVE_ACCESS "RO" // ============================================================================= // Register : M0PLUS_VTOR // Description : The VTOR holds the vector table offset address. #define M0PLUS_VTOR_OFFSET _u(0x0000ed08) #define M0PLUS_VTOR_BITS _u(0xffffff00) #define M0PLUS_VTOR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_VTOR_TBLOFF // Description : Bits [31:8] of the indicate the vector table offset address. #define M0PLUS_VTOR_TBLOFF_RESET _u(0x000000) #define M0PLUS_VTOR_TBLOFF_BITS _u(0xffffff00) #define M0PLUS_VTOR_TBLOFF_MSB _u(31) #define M0PLUS_VTOR_TBLOFF_LSB _u(8) #define M0PLUS_VTOR_TBLOFF_ACCESS "RW" // ============================================================================= // Register : M0PLUS_AIRCR // Description : Use the Application Interrupt and Reset Control Register to: // determine data endianness, clear all active state information // from debug halt mode, request a system reset. #define M0PLUS_AIRCR_OFFSET _u(0x0000ed0c) #define M0PLUS_AIRCR_BITS _u(0xffff8006) #define M0PLUS_AIRCR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_AIRCR_VECTKEY // Description : Register key: // Reads as Unknown // On writes, write 0x05FA to VECTKEY, otherwise the write is // ignored. #define M0PLUS_AIRCR_VECTKEY_RESET _u(0x0000) #define M0PLUS_AIRCR_VECTKEY_BITS _u(0xffff0000) #define M0PLUS_AIRCR_VECTKEY_MSB _u(31) #define M0PLUS_AIRCR_VECTKEY_LSB _u(16) #define M0PLUS_AIRCR_VECTKEY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_AIRCR_ENDIANESS // Description : Data endianness implemented: // 0 = Little-endian. #define M0PLUS_AIRCR_ENDIANESS_RESET _u(0x0) #define M0PLUS_AIRCR_ENDIANESS_BITS _u(0x00008000) #define M0PLUS_AIRCR_ENDIANESS_MSB _u(15) #define M0PLUS_AIRCR_ENDIANESS_LSB _u(15) #define M0PLUS_AIRCR_ENDIANESS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_AIRCR_SYSRESETREQ // Description : Writing 1 to this bit causes the SYSRESETREQ signal to the // outer system to be asserted to request a reset. The intention // is to force a large system reset of all major components except // for debug. The C_HALT bit in the DHCSR is cleared as a result // of the system reset requested. The debugger does not lose // contact with the device. #define M0PLUS_AIRCR_SYSRESETREQ_RESET _u(0x0) #define M0PLUS_AIRCR_SYSRESETREQ_BITS _u(0x00000004) #define M0PLUS_AIRCR_SYSRESETREQ_MSB _u(2) #define M0PLUS_AIRCR_SYSRESETREQ_LSB _u(2) #define M0PLUS_AIRCR_SYSRESETREQ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_AIRCR_VECTCLRACTIVE // Description : Clears all active state information for fixed and configurable // exceptions. This bit: is self-clearing, can only be set by the // DAP when the core is halted. When set: clears all active // exception status of the processor, forces a return to Thread // mode, forces an IPSR of 0. A debugger must re-initialize the // stack. #define M0PLUS_AIRCR_VECTCLRACTIVE_RESET _u(0x0) #define M0PLUS_AIRCR_VECTCLRACTIVE_BITS _u(0x00000002) #define M0PLUS_AIRCR_VECTCLRACTIVE_MSB _u(1) #define M0PLUS_AIRCR_VECTCLRACTIVE_LSB _u(1) #define M0PLUS_AIRCR_VECTCLRACTIVE_ACCESS "RW" // ============================================================================= // Register : M0PLUS_SCR // Description : System Control Register. Use the System Control Register for // power-management functions: signal to the system when the // processor can enter a low power state, control how the // processor enters and exits low power states. #define M0PLUS_SCR_OFFSET _u(0x0000ed10) #define M0PLUS_SCR_BITS _u(0x00000016) #define M0PLUS_SCR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_SCR_SEVONPEND // Description : Send Event on Pending bit: // 0 = Only enabled interrupts or events can wakeup the processor, // disabled interrupts are excluded. // 1 = Enabled events and all interrupts, including disabled // interrupts, can wakeup the processor. // When an event or interrupt becomes pending, the event signal // wakes up the processor from WFE. If the // processor is not waiting for an event, the event is registered // and affects the next WFE. // The processor also wakes up on execution of an SEV instruction // or an external event. #define M0PLUS_SCR_SEVONPEND_RESET _u(0x0) #define M0PLUS_SCR_SEVONPEND_BITS _u(0x00000010) #define M0PLUS_SCR_SEVONPEND_MSB _u(4) #define M0PLUS_SCR_SEVONPEND_LSB _u(4) #define M0PLUS_SCR_SEVONPEND_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_SCR_SLEEPDEEP // Description : Controls whether the processor uses sleep or deep sleep as its // low power mode: // 0 = Sleep. // 1 = Deep sleep. #define M0PLUS_SCR_SLEEPDEEP_RESET _u(0x0) #define M0PLUS_SCR_SLEEPDEEP_BITS _u(0x00000004) #define M0PLUS_SCR_SLEEPDEEP_MSB _u(2) #define M0PLUS_SCR_SLEEPDEEP_LSB _u(2) #define M0PLUS_SCR_SLEEPDEEP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_SCR_SLEEPONEXIT // Description : Indicates sleep-on-exit when returning from Handler mode to // Thread mode: // 0 = Do not sleep when returning to Thread mode. // 1 = Enter sleep, or deep sleep, on return from an ISR to Thread // mode. // Setting this bit to 1 enables an interrupt driven application // to avoid returning to an empty main application. #define M0PLUS_SCR_SLEEPONEXIT_RESET _u(0x0) #define M0PLUS_SCR_SLEEPONEXIT_BITS _u(0x00000002) #define M0PLUS_SCR_SLEEPONEXIT_MSB _u(1) #define M0PLUS_SCR_SLEEPONEXIT_LSB _u(1) #define M0PLUS_SCR_SLEEPONEXIT_ACCESS "RW" // ============================================================================= // Register : M0PLUS_CCR // Description : The Configuration and Control Register permanently enables // stack alignment and causes unaligned accesses to result in a // Hard Fault. #define M0PLUS_CCR_OFFSET _u(0x0000ed14) #define M0PLUS_CCR_BITS _u(0x00000208) #define M0PLUS_CCR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_CCR_STKALIGN // Description : Always reads as one, indicates 8-byte stack alignment on // exception entry. On exception entry, the processor uses bit[9] // of the stacked PSR to indicate the stack alignment. On return // from the exception it uses this stacked bit to restore the // correct stack alignment. #define M0PLUS_CCR_STKALIGN_RESET _u(0x0) #define M0PLUS_CCR_STKALIGN_BITS _u(0x00000200) #define M0PLUS_CCR_STKALIGN_MSB _u(9) #define M0PLUS_CCR_STKALIGN_LSB _u(9) #define M0PLUS_CCR_STKALIGN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_CCR_UNALIGN_TRP // Description : Always reads as one, indicates that all unaligned accesses // generate a HardFault. #define M0PLUS_CCR_UNALIGN_TRP_RESET _u(0x0) #define M0PLUS_CCR_UNALIGN_TRP_BITS _u(0x00000008) #define M0PLUS_CCR_UNALIGN_TRP_MSB _u(3) #define M0PLUS_CCR_UNALIGN_TRP_LSB _u(3) #define M0PLUS_CCR_UNALIGN_TRP_ACCESS "RO" // ============================================================================= // Register : M0PLUS_SHPR2 // Description : System handlers are a special class of exception handler that // can have their priority set to any of the priority levels. Use // the System Handler Priority Register 2 to set the priority of // SVCall. #define M0PLUS_SHPR2_OFFSET _u(0x0000ed1c) #define M0PLUS_SHPR2_BITS _u(0xc0000000) #define M0PLUS_SHPR2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_SHPR2_PRI_11 // Description : Priority of system handler 11, SVCall #define M0PLUS_SHPR2_PRI_11_RESET _u(0x0) #define M0PLUS_SHPR2_PRI_11_BITS _u(0xc0000000) #define M0PLUS_SHPR2_PRI_11_MSB _u(31) #define M0PLUS_SHPR2_PRI_11_LSB _u(30) #define M0PLUS_SHPR2_PRI_11_ACCESS "RW" // ============================================================================= // Register : M0PLUS_SHPR3 // Description : System handlers are a special class of exception handler that // can have their priority set to any of the priority levels. Use // the System Handler Priority Register 3 to set the priority of // PendSV and SysTick. #define M0PLUS_SHPR3_OFFSET _u(0x0000ed20) #define M0PLUS_SHPR3_BITS _u(0xc0c00000) #define M0PLUS_SHPR3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_SHPR3_PRI_15 // Description : Priority of system handler 15, SysTick #define M0PLUS_SHPR3_PRI_15_RESET _u(0x0) #define M0PLUS_SHPR3_PRI_15_BITS _u(0xc0000000) #define M0PLUS_SHPR3_PRI_15_MSB _u(31) #define M0PLUS_SHPR3_PRI_15_LSB _u(30) #define M0PLUS_SHPR3_PRI_15_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_SHPR3_PRI_14 // Description : Priority of system handler 14, PendSV #define M0PLUS_SHPR3_PRI_14_RESET _u(0x0) #define M0PLUS_SHPR3_PRI_14_BITS _u(0x00c00000) #define M0PLUS_SHPR3_PRI_14_MSB _u(23) #define M0PLUS_SHPR3_PRI_14_LSB _u(22) #define M0PLUS_SHPR3_PRI_14_ACCESS "RW" // ============================================================================= // Register : M0PLUS_SHCSR // Description : Use the System Handler Control and State Register to determine // or clear the pending status of SVCall. #define M0PLUS_SHCSR_OFFSET _u(0x0000ed24) #define M0PLUS_SHCSR_BITS _u(0x00008000) #define M0PLUS_SHCSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_SHCSR_SVCALLPENDED // Description : Reads as 1 if SVCall is Pending. Write 1 to set pending // SVCall, write 0 to clear pending SVCall. #define M0PLUS_SHCSR_SVCALLPENDED_RESET _u(0x0) #define M0PLUS_SHCSR_SVCALLPENDED_BITS _u(0x00008000) #define M0PLUS_SHCSR_SVCALLPENDED_MSB _u(15) #define M0PLUS_SHCSR_SVCALLPENDED_LSB _u(15) #define M0PLUS_SHCSR_SVCALLPENDED_ACCESS "RW" // ============================================================================= // Register : M0PLUS_MPU_TYPE // Description : Read the MPU Type Register to determine if the processor // implements an MPU, and how many regions the MPU supports. #define M0PLUS_MPU_TYPE_OFFSET _u(0x0000ed90) #define M0PLUS_MPU_TYPE_BITS _u(0x00ffff01) #define M0PLUS_MPU_TYPE_RESET _u(0x00000800) // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_TYPE_IREGION // Description : Instruction region. Reads as zero as ARMv6-M only supports a // unified MPU. #define M0PLUS_MPU_TYPE_IREGION_RESET _u(0x00) #define M0PLUS_MPU_TYPE_IREGION_BITS _u(0x00ff0000) #define M0PLUS_MPU_TYPE_IREGION_MSB _u(23) #define M0PLUS_MPU_TYPE_IREGION_LSB _u(16) #define M0PLUS_MPU_TYPE_IREGION_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_TYPE_DREGION // Description : Number of regions supported by the MPU. #define M0PLUS_MPU_TYPE_DREGION_RESET _u(0x08) #define M0PLUS_MPU_TYPE_DREGION_BITS _u(0x0000ff00) #define M0PLUS_MPU_TYPE_DREGION_MSB _u(15) #define M0PLUS_MPU_TYPE_DREGION_LSB _u(8) #define M0PLUS_MPU_TYPE_DREGION_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_TYPE_SEPARATE // Description : Indicates support for separate instruction and data address // maps. Reads as 0 as ARMv6-M only supports a unified MPU. #define M0PLUS_MPU_TYPE_SEPARATE_RESET _u(0x0) #define M0PLUS_MPU_TYPE_SEPARATE_BITS _u(0x00000001) #define M0PLUS_MPU_TYPE_SEPARATE_MSB _u(0) #define M0PLUS_MPU_TYPE_SEPARATE_LSB _u(0) #define M0PLUS_MPU_TYPE_SEPARATE_ACCESS "RO" // ============================================================================= // Register : M0PLUS_MPU_CTRL // Description : Use the MPU Control Register to enable and disable the MPU, and // to control whether the default memory map is enabled as a // background region for privileged accesses, and whether the MPU // is enabled for HardFaults and NMIs. #define M0PLUS_MPU_CTRL_OFFSET _u(0x0000ed94) #define M0PLUS_MPU_CTRL_BITS _u(0x00000007) #define M0PLUS_MPU_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_CTRL_PRIVDEFENA // Description : Controls whether the default memory map is enabled as a // background region for privileged accesses. This bit is ignored // when ENABLE is clear. // 0 = If the MPU is enabled, disables use of the default memory // map. Any memory access to a location not // covered by any enabled region causes a fault. // 1 = If the MPU is enabled, enables use of the default memory // map as a background region for privileged software accesses. // When enabled, the background region acts as if it is region // number -1. Any region that is defined and enabled has priority // over this default map. #define M0PLUS_MPU_CTRL_PRIVDEFENA_RESET _u(0x0) #define M0PLUS_MPU_CTRL_PRIVDEFENA_BITS _u(0x00000004) #define M0PLUS_MPU_CTRL_PRIVDEFENA_MSB _u(2) #define M0PLUS_MPU_CTRL_PRIVDEFENA_LSB _u(2) #define M0PLUS_MPU_CTRL_PRIVDEFENA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_CTRL_HFNMIENA // Description : Controls the use of the MPU for HardFaults and NMIs. Setting // this bit when ENABLE is clear results in UNPREDICTABLE // behaviour. // When the MPU is enabled: // 0 = MPU is disabled during HardFault and NMI handlers, // regardless of the value of the ENABLE bit. // 1 = the MPU is enabled during HardFault and NMI handlers. #define M0PLUS_MPU_CTRL_HFNMIENA_RESET _u(0x0) #define M0PLUS_MPU_CTRL_HFNMIENA_BITS _u(0x00000002) #define M0PLUS_MPU_CTRL_HFNMIENA_MSB _u(1) #define M0PLUS_MPU_CTRL_HFNMIENA_LSB _u(1) #define M0PLUS_MPU_CTRL_HFNMIENA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_CTRL_ENABLE // Description : Enables the MPU. If the MPU is disabled, privileged and // unprivileged accesses use the default memory map. // 0 = MPU disabled. // 1 = MPU enabled. #define M0PLUS_MPU_CTRL_ENABLE_RESET _u(0x0) #define M0PLUS_MPU_CTRL_ENABLE_BITS _u(0x00000001) #define M0PLUS_MPU_CTRL_ENABLE_MSB _u(0) #define M0PLUS_MPU_CTRL_ENABLE_LSB _u(0) #define M0PLUS_MPU_CTRL_ENABLE_ACCESS "RW" // ============================================================================= // Register : M0PLUS_MPU_RNR // Description : Use the MPU Region Number Register to select the region // currently accessed by MPU_RBAR and MPU_RASR. #define M0PLUS_MPU_RNR_OFFSET _u(0x0000ed98) #define M0PLUS_MPU_RNR_BITS _u(0x0000000f) #define M0PLUS_MPU_RNR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_RNR_REGION // Description : Indicates the MPU region referenced by the MPU_RBAR and // MPU_RASR registers. // The MPU supports 8 memory regions, so the permitted values of // this field are 0-7. #define M0PLUS_MPU_RNR_REGION_RESET _u(0x0) #define M0PLUS_MPU_RNR_REGION_BITS _u(0x0000000f) #define M0PLUS_MPU_RNR_REGION_MSB _u(3) #define M0PLUS_MPU_RNR_REGION_LSB _u(0) #define M0PLUS_MPU_RNR_REGION_ACCESS "RW" // ============================================================================= // Register : M0PLUS_MPU_RBAR // Description : Read the MPU Region Base Address Register to determine the base // address of the region identified by MPU_RNR. Write to update // the base address of said region or that of a specified region, // with whose number MPU_RNR will also be updated. #define M0PLUS_MPU_RBAR_OFFSET _u(0x0000ed9c) #define M0PLUS_MPU_RBAR_BITS _u(0xffffff1f) #define M0PLUS_MPU_RBAR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_RBAR_ADDR // Description : Base address of the region. #define M0PLUS_MPU_RBAR_ADDR_RESET _u(0x000000) #define M0PLUS_MPU_RBAR_ADDR_BITS _u(0xffffff00) #define M0PLUS_MPU_RBAR_ADDR_MSB _u(31) #define M0PLUS_MPU_RBAR_ADDR_LSB _u(8) #define M0PLUS_MPU_RBAR_ADDR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_RBAR_VALID // Description : On writes, indicates whether the write must update the base // address of the region identified by the REGION field, updating // the MPU_RNR to indicate this new region. // Write: // 0 = MPU_RNR not changed, and the processor: // Updates the base address for the region specified in the // MPU_RNR. // Ignores the value of the REGION field. // 1 = The processor: // Updates the value of the MPU_RNR to the value of the REGION // field. // Updates the base address for the region specified in the REGION // field. // Always reads as zero. #define M0PLUS_MPU_RBAR_VALID_RESET _u(0x0) #define M0PLUS_MPU_RBAR_VALID_BITS _u(0x00000010) #define M0PLUS_MPU_RBAR_VALID_MSB _u(4) #define M0PLUS_MPU_RBAR_VALID_LSB _u(4) #define M0PLUS_MPU_RBAR_VALID_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_RBAR_REGION // Description : On writes, specifies the number of the region whose base // address to update provided VALID is set written as 1. On reads, // returns bits [3:0] of MPU_RNR. #define M0PLUS_MPU_RBAR_REGION_RESET _u(0x0) #define M0PLUS_MPU_RBAR_REGION_BITS _u(0x0000000f) #define M0PLUS_MPU_RBAR_REGION_MSB _u(3) #define M0PLUS_MPU_RBAR_REGION_LSB _u(0) #define M0PLUS_MPU_RBAR_REGION_ACCESS "RW" // ============================================================================= // Register : M0PLUS_MPU_RASR // Description : Use the MPU Region Attribute and Size Register to define the // size, access behaviour and memory type of the region identified // by MPU_RNR, and enable that region. #define M0PLUS_MPU_RASR_OFFSET _u(0x0000eda0) #define M0PLUS_MPU_RASR_BITS _u(0xffffff3f) #define M0PLUS_MPU_RASR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_RASR_ATTRS // Description : The MPU Region Attribute field. Use to define the region // attribute control. // 28 = XN: Instruction access disable bit: // 0 = Instruction fetches enabled. // 1 = Instruction fetches disabled. // 26:24 = AP: Access permission field // 18 = S: Shareable bit // 17 = C: Cacheable bit // 16 = B: Bufferable bit #define M0PLUS_MPU_RASR_ATTRS_RESET _u(0x0000) #define M0PLUS_MPU_RASR_ATTRS_BITS _u(0xffff0000) #define M0PLUS_MPU_RASR_ATTRS_MSB _u(31) #define M0PLUS_MPU_RASR_ATTRS_LSB _u(16) #define M0PLUS_MPU_RASR_ATTRS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_RASR_SRD // Description : Subregion Disable. For regions of 256 bytes or larger, each bit // of this field controls whether one of the eight equal // subregions is enabled. #define M0PLUS_MPU_RASR_SRD_RESET _u(0x00) #define M0PLUS_MPU_RASR_SRD_BITS _u(0x0000ff00) #define M0PLUS_MPU_RASR_SRD_MSB _u(15) #define M0PLUS_MPU_RASR_SRD_LSB _u(8) #define M0PLUS_MPU_RASR_SRD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_RASR_SIZE // Description : Indicates the region size. Region size in bytes = 2^(SIZE+1). // The minimum permitted value is 7 (b00111) = 256Bytes #define M0PLUS_MPU_RASR_SIZE_RESET _u(0x00) #define M0PLUS_MPU_RASR_SIZE_BITS _u(0x0000003e) #define M0PLUS_MPU_RASR_SIZE_MSB _u(5) #define M0PLUS_MPU_RASR_SIZE_LSB _u(1) #define M0PLUS_MPU_RASR_SIZE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : M0PLUS_MPU_RASR_ENABLE // Description : Enables the region. #define M0PLUS_MPU_RASR_ENABLE_RESET _u(0x0) #define M0PLUS_MPU_RASR_ENABLE_BITS _u(0x00000001) #define M0PLUS_MPU_RASR_ENABLE_MSB _u(0) #define M0PLUS_MPU_RASR_ENABLE_LSB _u(0) #define M0PLUS_MPU_RASR_ENABLE_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_M0PLUS_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/pads_bank0.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : PADS_BANK0 // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_PADS_BANK0_DEFINED #define HARDWARE_REGS_PADS_BANK0_DEFINED // ============================================================================= // Register : PADS_BANK0_VOLTAGE_SELECT // Description : Voltage select. Per bank control // 0x0 -> Set voltage to 3.3V (DVDD >= 2V5) // 0x1 -> Set voltage to 1.8V (DVDD <= 1V8) #define PADS_BANK0_VOLTAGE_SELECT_OFFSET _u(0x00000000) #define PADS_BANK0_VOLTAGE_SELECT_BITS _u(0x00000001) #define PADS_BANK0_VOLTAGE_SELECT_RESET _u(0x00000000) #define PADS_BANK0_VOLTAGE_SELECT_MSB _u(0) #define PADS_BANK0_VOLTAGE_SELECT_LSB _u(0) #define PADS_BANK0_VOLTAGE_SELECT_ACCESS "RW" #define PADS_BANK0_VOLTAGE_SELECT_VALUE_3V3 _u(0x0) #define PADS_BANK0_VOLTAGE_SELECT_VALUE_1V8 _u(0x1) // ============================================================================= // Register : PADS_BANK0_GPIO0 // Description : Pad control register #define PADS_BANK0_GPIO0_OFFSET _u(0x00000004) #define PADS_BANK0_GPIO0_BITS _u(0x000000ff) #define PADS_BANK0_GPIO0_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO0_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO0_OD_RESET _u(0x0) #define PADS_BANK0_GPIO0_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO0_OD_MSB _u(7) #define PADS_BANK0_GPIO0_OD_LSB _u(7) #define PADS_BANK0_GPIO0_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO0_IE // Description : Input enable #define PADS_BANK0_GPIO0_IE_RESET _u(0x1) #define PADS_BANK0_GPIO0_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO0_IE_MSB _u(6) #define PADS_BANK0_GPIO0_IE_LSB _u(6) #define PADS_BANK0_GPIO0_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO0_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO0_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO0_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO0_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO0_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO0_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO0_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO0_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO0_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO0_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO0_PUE // Description : Pull up enable #define PADS_BANK0_GPIO0_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO0_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO0_PUE_MSB _u(3) #define PADS_BANK0_GPIO0_PUE_LSB _u(3) #define PADS_BANK0_GPIO0_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO0_PDE // Description : Pull down enable #define PADS_BANK0_GPIO0_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO0_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO0_PDE_MSB _u(2) #define PADS_BANK0_GPIO0_PDE_LSB _u(2) #define PADS_BANK0_GPIO0_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO0_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO0_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO0_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO0_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO0_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO0_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO0_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO0_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO0_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO0_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO0_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO0_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO1 // Description : Pad control register #define PADS_BANK0_GPIO1_OFFSET _u(0x00000008) #define PADS_BANK0_GPIO1_BITS _u(0x000000ff) #define PADS_BANK0_GPIO1_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO1_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO1_OD_RESET _u(0x0) #define PADS_BANK0_GPIO1_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO1_OD_MSB _u(7) #define PADS_BANK0_GPIO1_OD_LSB _u(7) #define PADS_BANK0_GPIO1_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO1_IE // Description : Input enable #define PADS_BANK0_GPIO1_IE_RESET _u(0x1) #define PADS_BANK0_GPIO1_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO1_IE_MSB _u(6) #define PADS_BANK0_GPIO1_IE_LSB _u(6) #define PADS_BANK0_GPIO1_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO1_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO1_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO1_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO1_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO1_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO1_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO1_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO1_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO1_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO1_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO1_PUE // Description : Pull up enable #define PADS_BANK0_GPIO1_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO1_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO1_PUE_MSB _u(3) #define PADS_BANK0_GPIO1_PUE_LSB _u(3) #define PADS_BANK0_GPIO1_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO1_PDE // Description : Pull down enable #define PADS_BANK0_GPIO1_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO1_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO1_PDE_MSB _u(2) #define PADS_BANK0_GPIO1_PDE_LSB _u(2) #define PADS_BANK0_GPIO1_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO1_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO1_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO1_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO1_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO1_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO1_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO1_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO1_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO1_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO1_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO1_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO1_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO2 // Description : Pad control register #define PADS_BANK0_GPIO2_OFFSET _u(0x0000000c) #define PADS_BANK0_GPIO2_BITS _u(0x000000ff) #define PADS_BANK0_GPIO2_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO2_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO2_OD_RESET _u(0x0) #define PADS_BANK0_GPIO2_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO2_OD_MSB _u(7) #define PADS_BANK0_GPIO2_OD_LSB _u(7) #define PADS_BANK0_GPIO2_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO2_IE // Description : Input enable #define PADS_BANK0_GPIO2_IE_RESET _u(0x1) #define PADS_BANK0_GPIO2_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO2_IE_MSB _u(6) #define PADS_BANK0_GPIO2_IE_LSB _u(6) #define PADS_BANK0_GPIO2_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO2_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO2_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO2_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO2_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO2_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO2_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO2_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO2_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO2_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO2_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO2_PUE // Description : Pull up enable #define PADS_BANK0_GPIO2_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO2_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO2_PUE_MSB _u(3) #define PADS_BANK0_GPIO2_PUE_LSB _u(3) #define PADS_BANK0_GPIO2_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO2_PDE // Description : Pull down enable #define PADS_BANK0_GPIO2_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO2_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO2_PDE_MSB _u(2) #define PADS_BANK0_GPIO2_PDE_LSB _u(2) #define PADS_BANK0_GPIO2_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO2_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO2_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO2_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO2_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO2_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO2_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO2_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO2_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO2_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO2_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO2_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO2_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO3 // Description : Pad control register #define PADS_BANK0_GPIO3_OFFSET _u(0x00000010) #define PADS_BANK0_GPIO3_BITS _u(0x000000ff) #define PADS_BANK0_GPIO3_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO3_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO3_OD_RESET _u(0x0) #define PADS_BANK0_GPIO3_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO3_OD_MSB _u(7) #define PADS_BANK0_GPIO3_OD_LSB _u(7) #define PADS_BANK0_GPIO3_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO3_IE // Description : Input enable #define PADS_BANK0_GPIO3_IE_RESET _u(0x1) #define PADS_BANK0_GPIO3_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO3_IE_MSB _u(6) #define PADS_BANK0_GPIO3_IE_LSB _u(6) #define PADS_BANK0_GPIO3_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO3_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO3_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO3_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO3_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO3_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO3_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO3_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO3_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO3_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO3_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO3_PUE // Description : Pull up enable #define PADS_BANK0_GPIO3_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO3_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO3_PUE_MSB _u(3) #define PADS_BANK0_GPIO3_PUE_LSB _u(3) #define PADS_BANK0_GPIO3_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO3_PDE // Description : Pull down enable #define PADS_BANK0_GPIO3_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO3_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO3_PDE_MSB _u(2) #define PADS_BANK0_GPIO3_PDE_LSB _u(2) #define PADS_BANK0_GPIO3_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO3_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO3_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO3_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO3_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO3_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO3_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO3_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO3_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO3_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO3_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO3_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO3_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO4 // Description : Pad control register #define PADS_BANK0_GPIO4_OFFSET _u(0x00000014) #define PADS_BANK0_GPIO4_BITS _u(0x000000ff) #define PADS_BANK0_GPIO4_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO4_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO4_OD_RESET _u(0x0) #define PADS_BANK0_GPIO4_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO4_OD_MSB _u(7) #define PADS_BANK0_GPIO4_OD_LSB _u(7) #define PADS_BANK0_GPIO4_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO4_IE // Description : Input enable #define PADS_BANK0_GPIO4_IE_RESET _u(0x1) #define PADS_BANK0_GPIO4_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO4_IE_MSB _u(6) #define PADS_BANK0_GPIO4_IE_LSB _u(6) #define PADS_BANK0_GPIO4_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO4_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO4_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO4_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO4_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO4_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO4_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO4_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO4_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO4_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO4_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO4_PUE // Description : Pull up enable #define PADS_BANK0_GPIO4_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO4_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO4_PUE_MSB _u(3) #define PADS_BANK0_GPIO4_PUE_LSB _u(3) #define PADS_BANK0_GPIO4_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO4_PDE // Description : Pull down enable #define PADS_BANK0_GPIO4_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO4_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO4_PDE_MSB _u(2) #define PADS_BANK0_GPIO4_PDE_LSB _u(2) #define PADS_BANK0_GPIO4_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO4_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO4_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO4_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO4_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO4_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO4_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO4_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO4_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO4_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO4_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO4_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO4_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO5 // Description : Pad control register #define PADS_BANK0_GPIO5_OFFSET _u(0x00000018) #define PADS_BANK0_GPIO5_BITS _u(0x000000ff) #define PADS_BANK0_GPIO5_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO5_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO5_OD_RESET _u(0x0) #define PADS_BANK0_GPIO5_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO5_OD_MSB _u(7) #define PADS_BANK0_GPIO5_OD_LSB _u(7) #define PADS_BANK0_GPIO5_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO5_IE // Description : Input enable #define PADS_BANK0_GPIO5_IE_RESET _u(0x1) #define PADS_BANK0_GPIO5_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO5_IE_MSB _u(6) #define PADS_BANK0_GPIO5_IE_LSB _u(6) #define PADS_BANK0_GPIO5_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO5_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO5_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO5_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO5_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO5_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO5_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO5_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO5_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO5_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO5_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO5_PUE // Description : Pull up enable #define PADS_BANK0_GPIO5_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO5_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO5_PUE_MSB _u(3) #define PADS_BANK0_GPIO5_PUE_LSB _u(3) #define PADS_BANK0_GPIO5_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO5_PDE // Description : Pull down enable #define PADS_BANK0_GPIO5_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO5_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO5_PDE_MSB _u(2) #define PADS_BANK0_GPIO5_PDE_LSB _u(2) #define PADS_BANK0_GPIO5_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO5_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO5_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO5_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO5_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO5_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO5_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO5_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO5_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO5_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO5_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO5_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO5_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO6 // Description : Pad control register #define PADS_BANK0_GPIO6_OFFSET _u(0x0000001c) #define PADS_BANK0_GPIO6_BITS _u(0x000000ff) #define PADS_BANK0_GPIO6_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO6_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO6_OD_RESET _u(0x0) #define PADS_BANK0_GPIO6_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO6_OD_MSB _u(7) #define PADS_BANK0_GPIO6_OD_LSB _u(7) #define PADS_BANK0_GPIO6_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO6_IE // Description : Input enable #define PADS_BANK0_GPIO6_IE_RESET _u(0x1) #define PADS_BANK0_GPIO6_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO6_IE_MSB _u(6) #define PADS_BANK0_GPIO6_IE_LSB _u(6) #define PADS_BANK0_GPIO6_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO6_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO6_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO6_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO6_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO6_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO6_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO6_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO6_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO6_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO6_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO6_PUE // Description : Pull up enable #define PADS_BANK0_GPIO6_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO6_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO6_PUE_MSB _u(3) #define PADS_BANK0_GPIO6_PUE_LSB _u(3) #define PADS_BANK0_GPIO6_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO6_PDE // Description : Pull down enable #define PADS_BANK0_GPIO6_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO6_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO6_PDE_MSB _u(2) #define PADS_BANK0_GPIO6_PDE_LSB _u(2) #define PADS_BANK0_GPIO6_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO6_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO6_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO6_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO6_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO6_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO6_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO6_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO6_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO6_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO6_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO6_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO6_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO7 // Description : Pad control register #define PADS_BANK0_GPIO7_OFFSET _u(0x00000020) #define PADS_BANK0_GPIO7_BITS _u(0x000000ff) #define PADS_BANK0_GPIO7_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO7_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO7_OD_RESET _u(0x0) #define PADS_BANK0_GPIO7_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO7_OD_MSB _u(7) #define PADS_BANK0_GPIO7_OD_LSB _u(7) #define PADS_BANK0_GPIO7_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO7_IE // Description : Input enable #define PADS_BANK0_GPIO7_IE_RESET _u(0x1) #define PADS_BANK0_GPIO7_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO7_IE_MSB _u(6) #define PADS_BANK0_GPIO7_IE_LSB _u(6) #define PADS_BANK0_GPIO7_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO7_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO7_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO7_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO7_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO7_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO7_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO7_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO7_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO7_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO7_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO7_PUE // Description : Pull up enable #define PADS_BANK0_GPIO7_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO7_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO7_PUE_MSB _u(3) #define PADS_BANK0_GPIO7_PUE_LSB _u(3) #define PADS_BANK0_GPIO7_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO7_PDE // Description : Pull down enable #define PADS_BANK0_GPIO7_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO7_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO7_PDE_MSB _u(2) #define PADS_BANK0_GPIO7_PDE_LSB _u(2) #define PADS_BANK0_GPIO7_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO7_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO7_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO7_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO7_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO7_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO7_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO7_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO7_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO7_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO7_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO7_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO7_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO8 // Description : Pad control register #define PADS_BANK0_GPIO8_OFFSET _u(0x00000024) #define PADS_BANK0_GPIO8_BITS _u(0x000000ff) #define PADS_BANK0_GPIO8_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO8_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO8_OD_RESET _u(0x0) #define PADS_BANK0_GPIO8_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO8_OD_MSB _u(7) #define PADS_BANK0_GPIO8_OD_LSB _u(7) #define PADS_BANK0_GPIO8_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO8_IE // Description : Input enable #define PADS_BANK0_GPIO8_IE_RESET _u(0x1) #define PADS_BANK0_GPIO8_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO8_IE_MSB _u(6) #define PADS_BANK0_GPIO8_IE_LSB _u(6) #define PADS_BANK0_GPIO8_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO8_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO8_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO8_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO8_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO8_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO8_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO8_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO8_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO8_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO8_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO8_PUE // Description : Pull up enable #define PADS_BANK0_GPIO8_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO8_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO8_PUE_MSB _u(3) #define PADS_BANK0_GPIO8_PUE_LSB _u(3) #define PADS_BANK0_GPIO8_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO8_PDE // Description : Pull down enable #define PADS_BANK0_GPIO8_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO8_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO8_PDE_MSB _u(2) #define PADS_BANK0_GPIO8_PDE_LSB _u(2) #define PADS_BANK0_GPIO8_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO8_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO8_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO8_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO8_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO8_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO8_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO8_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO8_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO8_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO8_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO8_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO8_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO9 // Description : Pad control register #define PADS_BANK0_GPIO9_OFFSET _u(0x00000028) #define PADS_BANK0_GPIO9_BITS _u(0x000000ff) #define PADS_BANK0_GPIO9_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO9_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO9_OD_RESET _u(0x0) #define PADS_BANK0_GPIO9_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO9_OD_MSB _u(7) #define PADS_BANK0_GPIO9_OD_LSB _u(7) #define PADS_BANK0_GPIO9_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO9_IE // Description : Input enable #define PADS_BANK0_GPIO9_IE_RESET _u(0x1) #define PADS_BANK0_GPIO9_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO9_IE_MSB _u(6) #define PADS_BANK0_GPIO9_IE_LSB _u(6) #define PADS_BANK0_GPIO9_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO9_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO9_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO9_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO9_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO9_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO9_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO9_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO9_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO9_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO9_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO9_PUE // Description : Pull up enable #define PADS_BANK0_GPIO9_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO9_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO9_PUE_MSB _u(3) #define PADS_BANK0_GPIO9_PUE_LSB _u(3) #define PADS_BANK0_GPIO9_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO9_PDE // Description : Pull down enable #define PADS_BANK0_GPIO9_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO9_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO9_PDE_MSB _u(2) #define PADS_BANK0_GPIO9_PDE_LSB _u(2) #define PADS_BANK0_GPIO9_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO9_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO9_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO9_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO9_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO9_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO9_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO9_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO9_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO9_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO9_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO9_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO9_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO10 // Description : Pad control register #define PADS_BANK0_GPIO10_OFFSET _u(0x0000002c) #define PADS_BANK0_GPIO10_BITS _u(0x000000ff) #define PADS_BANK0_GPIO10_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO10_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO10_OD_RESET _u(0x0) #define PADS_BANK0_GPIO10_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO10_OD_MSB _u(7) #define PADS_BANK0_GPIO10_OD_LSB _u(7) #define PADS_BANK0_GPIO10_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO10_IE // Description : Input enable #define PADS_BANK0_GPIO10_IE_RESET _u(0x1) #define PADS_BANK0_GPIO10_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO10_IE_MSB _u(6) #define PADS_BANK0_GPIO10_IE_LSB _u(6) #define PADS_BANK0_GPIO10_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO10_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO10_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO10_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO10_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO10_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO10_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO10_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO10_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO10_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO10_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO10_PUE // Description : Pull up enable #define PADS_BANK0_GPIO10_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO10_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO10_PUE_MSB _u(3) #define PADS_BANK0_GPIO10_PUE_LSB _u(3) #define PADS_BANK0_GPIO10_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO10_PDE // Description : Pull down enable #define PADS_BANK0_GPIO10_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO10_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO10_PDE_MSB _u(2) #define PADS_BANK0_GPIO10_PDE_LSB _u(2) #define PADS_BANK0_GPIO10_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO10_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO10_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO10_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO10_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO10_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO10_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO10_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO10_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO10_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO10_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO10_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO10_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO11 // Description : Pad control register #define PADS_BANK0_GPIO11_OFFSET _u(0x00000030) #define PADS_BANK0_GPIO11_BITS _u(0x000000ff) #define PADS_BANK0_GPIO11_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO11_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO11_OD_RESET _u(0x0) #define PADS_BANK0_GPIO11_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO11_OD_MSB _u(7) #define PADS_BANK0_GPIO11_OD_LSB _u(7) #define PADS_BANK0_GPIO11_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO11_IE // Description : Input enable #define PADS_BANK0_GPIO11_IE_RESET _u(0x1) #define PADS_BANK0_GPIO11_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO11_IE_MSB _u(6) #define PADS_BANK0_GPIO11_IE_LSB _u(6) #define PADS_BANK0_GPIO11_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO11_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO11_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO11_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO11_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO11_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO11_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO11_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO11_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO11_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO11_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO11_PUE // Description : Pull up enable #define PADS_BANK0_GPIO11_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO11_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO11_PUE_MSB _u(3) #define PADS_BANK0_GPIO11_PUE_LSB _u(3) #define PADS_BANK0_GPIO11_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO11_PDE // Description : Pull down enable #define PADS_BANK0_GPIO11_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO11_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO11_PDE_MSB _u(2) #define PADS_BANK0_GPIO11_PDE_LSB _u(2) #define PADS_BANK0_GPIO11_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO11_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO11_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO11_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO11_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO11_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO11_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO11_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO11_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO11_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO11_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO11_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO11_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO12 // Description : Pad control register #define PADS_BANK0_GPIO12_OFFSET _u(0x00000034) #define PADS_BANK0_GPIO12_BITS _u(0x000000ff) #define PADS_BANK0_GPIO12_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO12_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO12_OD_RESET _u(0x0) #define PADS_BANK0_GPIO12_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO12_OD_MSB _u(7) #define PADS_BANK0_GPIO12_OD_LSB _u(7) #define PADS_BANK0_GPIO12_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO12_IE // Description : Input enable #define PADS_BANK0_GPIO12_IE_RESET _u(0x1) #define PADS_BANK0_GPIO12_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO12_IE_MSB _u(6) #define PADS_BANK0_GPIO12_IE_LSB _u(6) #define PADS_BANK0_GPIO12_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO12_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO12_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO12_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO12_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO12_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO12_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO12_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO12_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO12_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO12_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO12_PUE // Description : Pull up enable #define PADS_BANK0_GPIO12_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO12_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO12_PUE_MSB _u(3) #define PADS_BANK0_GPIO12_PUE_LSB _u(3) #define PADS_BANK0_GPIO12_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO12_PDE // Description : Pull down enable #define PADS_BANK0_GPIO12_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO12_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO12_PDE_MSB _u(2) #define PADS_BANK0_GPIO12_PDE_LSB _u(2) #define PADS_BANK0_GPIO12_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO12_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO12_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO12_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO12_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO12_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO12_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO12_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO12_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO12_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO12_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO12_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO12_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO13 // Description : Pad control register #define PADS_BANK0_GPIO13_OFFSET _u(0x00000038) #define PADS_BANK0_GPIO13_BITS _u(0x000000ff) #define PADS_BANK0_GPIO13_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO13_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO13_OD_RESET _u(0x0) #define PADS_BANK0_GPIO13_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO13_OD_MSB _u(7) #define PADS_BANK0_GPIO13_OD_LSB _u(7) #define PADS_BANK0_GPIO13_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO13_IE // Description : Input enable #define PADS_BANK0_GPIO13_IE_RESET _u(0x1) #define PADS_BANK0_GPIO13_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO13_IE_MSB _u(6) #define PADS_BANK0_GPIO13_IE_LSB _u(6) #define PADS_BANK0_GPIO13_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO13_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO13_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO13_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO13_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO13_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO13_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO13_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO13_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO13_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO13_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO13_PUE // Description : Pull up enable #define PADS_BANK0_GPIO13_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO13_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO13_PUE_MSB _u(3) #define PADS_BANK0_GPIO13_PUE_LSB _u(3) #define PADS_BANK0_GPIO13_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO13_PDE // Description : Pull down enable #define PADS_BANK0_GPIO13_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO13_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO13_PDE_MSB _u(2) #define PADS_BANK0_GPIO13_PDE_LSB _u(2) #define PADS_BANK0_GPIO13_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO13_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO13_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO13_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO13_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO13_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO13_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO13_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO13_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO13_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO13_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO13_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO13_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO14 // Description : Pad control register #define PADS_BANK0_GPIO14_OFFSET _u(0x0000003c) #define PADS_BANK0_GPIO14_BITS _u(0x000000ff) #define PADS_BANK0_GPIO14_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO14_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO14_OD_RESET _u(0x0) #define PADS_BANK0_GPIO14_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO14_OD_MSB _u(7) #define PADS_BANK0_GPIO14_OD_LSB _u(7) #define PADS_BANK0_GPIO14_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO14_IE // Description : Input enable #define PADS_BANK0_GPIO14_IE_RESET _u(0x1) #define PADS_BANK0_GPIO14_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO14_IE_MSB _u(6) #define PADS_BANK0_GPIO14_IE_LSB _u(6) #define PADS_BANK0_GPIO14_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO14_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO14_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO14_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO14_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO14_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO14_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO14_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO14_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO14_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO14_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO14_PUE // Description : Pull up enable #define PADS_BANK0_GPIO14_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO14_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO14_PUE_MSB _u(3) #define PADS_BANK0_GPIO14_PUE_LSB _u(3) #define PADS_BANK0_GPIO14_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO14_PDE // Description : Pull down enable #define PADS_BANK0_GPIO14_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO14_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO14_PDE_MSB _u(2) #define PADS_BANK0_GPIO14_PDE_LSB _u(2) #define PADS_BANK0_GPIO14_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO14_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO14_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO14_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO14_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO14_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO14_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO14_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO14_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO14_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO14_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO14_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO14_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO15 // Description : Pad control register #define PADS_BANK0_GPIO15_OFFSET _u(0x00000040) #define PADS_BANK0_GPIO15_BITS _u(0x000000ff) #define PADS_BANK0_GPIO15_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO15_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO15_OD_RESET _u(0x0) #define PADS_BANK0_GPIO15_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO15_OD_MSB _u(7) #define PADS_BANK0_GPIO15_OD_LSB _u(7) #define PADS_BANK0_GPIO15_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO15_IE // Description : Input enable #define PADS_BANK0_GPIO15_IE_RESET _u(0x1) #define PADS_BANK0_GPIO15_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO15_IE_MSB _u(6) #define PADS_BANK0_GPIO15_IE_LSB _u(6) #define PADS_BANK0_GPIO15_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO15_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO15_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO15_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO15_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO15_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO15_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO15_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO15_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO15_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO15_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO15_PUE // Description : Pull up enable #define PADS_BANK0_GPIO15_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO15_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO15_PUE_MSB _u(3) #define PADS_BANK0_GPIO15_PUE_LSB _u(3) #define PADS_BANK0_GPIO15_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO15_PDE // Description : Pull down enable #define PADS_BANK0_GPIO15_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO15_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO15_PDE_MSB _u(2) #define PADS_BANK0_GPIO15_PDE_LSB _u(2) #define PADS_BANK0_GPIO15_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO15_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO15_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO15_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO15_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO15_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO15_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO15_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO15_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO15_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO15_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO15_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO15_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO16 // Description : Pad control register #define PADS_BANK0_GPIO16_OFFSET _u(0x00000044) #define PADS_BANK0_GPIO16_BITS _u(0x000000ff) #define PADS_BANK0_GPIO16_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO16_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO16_OD_RESET _u(0x0) #define PADS_BANK0_GPIO16_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO16_OD_MSB _u(7) #define PADS_BANK0_GPIO16_OD_LSB _u(7) #define PADS_BANK0_GPIO16_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO16_IE // Description : Input enable #define PADS_BANK0_GPIO16_IE_RESET _u(0x1) #define PADS_BANK0_GPIO16_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO16_IE_MSB _u(6) #define PADS_BANK0_GPIO16_IE_LSB _u(6) #define PADS_BANK0_GPIO16_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO16_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO16_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO16_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO16_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO16_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO16_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO16_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO16_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO16_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO16_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO16_PUE // Description : Pull up enable #define PADS_BANK0_GPIO16_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO16_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO16_PUE_MSB _u(3) #define PADS_BANK0_GPIO16_PUE_LSB _u(3) #define PADS_BANK0_GPIO16_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO16_PDE // Description : Pull down enable #define PADS_BANK0_GPIO16_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO16_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO16_PDE_MSB _u(2) #define PADS_BANK0_GPIO16_PDE_LSB _u(2) #define PADS_BANK0_GPIO16_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO16_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO16_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO16_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO16_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO16_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO16_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO16_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO16_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO16_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO16_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO16_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO16_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO17 // Description : Pad control register #define PADS_BANK0_GPIO17_OFFSET _u(0x00000048) #define PADS_BANK0_GPIO17_BITS _u(0x000000ff) #define PADS_BANK0_GPIO17_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO17_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO17_OD_RESET _u(0x0) #define PADS_BANK0_GPIO17_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO17_OD_MSB _u(7) #define PADS_BANK0_GPIO17_OD_LSB _u(7) #define PADS_BANK0_GPIO17_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO17_IE // Description : Input enable #define PADS_BANK0_GPIO17_IE_RESET _u(0x1) #define PADS_BANK0_GPIO17_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO17_IE_MSB _u(6) #define PADS_BANK0_GPIO17_IE_LSB _u(6) #define PADS_BANK0_GPIO17_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO17_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO17_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO17_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO17_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO17_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO17_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO17_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO17_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO17_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO17_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO17_PUE // Description : Pull up enable #define PADS_BANK0_GPIO17_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO17_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO17_PUE_MSB _u(3) #define PADS_BANK0_GPIO17_PUE_LSB _u(3) #define PADS_BANK0_GPIO17_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO17_PDE // Description : Pull down enable #define PADS_BANK0_GPIO17_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO17_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO17_PDE_MSB _u(2) #define PADS_BANK0_GPIO17_PDE_LSB _u(2) #define PADS_BANK0_GPIO17_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO17_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO17_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO17_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO17_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO17_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO17_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO17_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO17_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO17_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO17_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO17_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO17_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO18 // Description : Pad control register #define PADS_BANK0_GPIO18_OFFSET _u(0x0000004c) #define PADS_BANK0_GPIO18_BITS _u(0x000000ff) #define PADS_BANK0_GPIO18_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO18_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO18_OD_RESET _u(0x0) #define PADS_BANK0_GPIO18_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO18_OD_MSB _u(7) #define PADS_BANK0_GPIO18_OD_LSB _u(7) #define PADS_BANK0_GPIO18_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO18_IE // Description : Input enable #define PADS_BANK0_GPIO18_IE_RESET _u(0x1) #define PADS_BANK0_GPIO18_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO18_IE_MSB _u(6) #define PADS_BANK0_GPIO18_IE_LSB _u(6) #define PADS_BANK0_GPIO18_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO18_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO18_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO18_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO18_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO18_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO18_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO18_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO18_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO18_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO18_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO18_PUE // Description : Pull up enable #define PADS_BANK0_GPIO18_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO18_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO18_PUE_MSB _u(3) #define PADS_BANK0_GPIO18_PUE_LSB _u(3) #define PADS_BANK0_GPIO18_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO18_PDE // Description : Pull down enable #define PADS_BANK0_GPIO18_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO18_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO18_PDE_MSB _u(2) #define PADS_BANK0_GPIO18_PDE_LSB _u(2) #define PADS_BANK0_GPIO18_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO18_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO18_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO18_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO18_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO18_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO18_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO18_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO18_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO18_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO18_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO18_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO18_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO19 // Description : Pad control register #define PADS_BANK0_GPIO19_OFFSET _u(0x00000050) #define PADS_BANK0_GPIO19_BITS _u(0x000000ff) #define PADS_BANK0_GPIO19_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO19_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO19_OD_RESET _u(0x0) #define PADS_BANK0_GPIO19_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO19_OD_MSB _u(7) #define PADS_BANK0_GPIO19_OD_LSB _u(7) #define PADS_BANK0_GPIO19_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO19_IE // Description : Input enable #define PADS_BANK0_GPIO19_IE_RESET _u(0x1) #define PADS_BANK0_GPIO19_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO19_IE_MSB _u(6) #define PADS_BANK0_GPIO19_IE_LSB _u(6) #define PADS_BANK0_GPIO19_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO19_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO19_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO19_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO19_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO19_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO19_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO19_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO19_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO19_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO19_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO19_PUE // Description : Pull up enable #define PADS_BANK0_GPIO19_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO19_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO19_PUE_MSB _u(3) #define PADS_BANK0_GPIO19_PUE_LSB _u(3) #define PADS_BANK0_GPIO19_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO19_PDE // Description : Pull down enable #define PADS_BANK0_GPIO19_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO19_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO19_PDE_MSB _u(2) #define PADS_BANK0_GPIO19_PDE_LSB _u(2) #define PADS_BANK0_GPIO19_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO19_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO19_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO19_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO19_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO19_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO19_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO19_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO19_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO19_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO19_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO19_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO19_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO20 // Description : Pad control register #define PADS_BANK0_GPIO20_OFFSET _u(0x00000054) #define PADS_BANK0_GPIO20_BITS _u(0x000000ff) #define PADS_BANK0_GPIO20_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO20_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO20_OD_RESET _u(0x0) #define PADS_BANK0_GPIO20_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO20_OD_MSB _u(7) #define PADS_BANK0_GPIO20_OD_LSB _u(7) #define PADS_BANK0_GPIO20_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO20_IE // Description : Input enable #define PADS_BANK0_GPIO20_IE_RESET _u(0x1) #define PADS_BANK0_GPIO20_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO20_IE_MSB _u(6) #define PADS_BANK0_GPIO20_IE_LSB _u(6) #define PADS_BANK0_GPIO20_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO20_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO20_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO20_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO20_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO20_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO20_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO20_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO20_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO20_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO20_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO20_PUE // Description : Pull up enable #define PADS_BANK0_GPIO20_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO20_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO20_PUE_MSB _u(3) #define PADS_BANK0_GPIO20_PUE_LSB _u(3) #define PADS_BANK0_GPIO20_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO20_PDE // Description : Pull down enable #define PADS_BANK0_GPIO20_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO20_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO20_PDE_MSB _u(2) #define PADS_BANK0_GPIO20_PDE_LSB _u(2) #define PADS_BANK0_GPIO20_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO20_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO20_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO20_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO20_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO20_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO20_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO20_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO20_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO20_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO20_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO20_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO20_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO21 // Description : Pad control register #define PADS_BANK0_GPIO21_OFFSET _u(0x00000058) #define PADS_BANK0_GPIO21_BITS _u(0x000000ff) #define PADS_BANK0_GPIO21_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO21_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO21_OD_RESET _u(0x0) #define PADS_BANK0_GPIO21_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO21_OD_MSB _u(7) #define PADS_BANK0_GPIO21_OD_LSB _u(7) #define PADS_BANK0_GPIO21_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO21_IE // Description : Input enable #define PADS_BANK0_GPIO21_IE_RESET _u(0x1) #define PADS_BANK0_GPIO21_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO21_IE_MSB _u(6) #define PADS_BANK0_GPIO21_IE_LSB _u(6) #define PADS_BANK0_GPIO21_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO21_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO21_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO21_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO21_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO21_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO21_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO21_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO21_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO21_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO21_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO21_PUE // Description : Pull up enable #define PADS_BANK0_GPIO21_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO21_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO21_PUE_MSB _u(3) #define PADS_BANK0_GPIO21_PUE_LSB _u(3) #define PADS_BANK0_GPIO21_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO21_PDE // Description : Pull down enable #define PADS_BANK0_GPIO21_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO21_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO21_PDE_MSB _u(2) #define PADS_BANK0_GPIO21_PDE_LSB _u(2) #define PADS_BANK0_GPIO21_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO21_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO21_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO21_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO21_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO21_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO21_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO21_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO21_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO21_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO21_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO21_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO21_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO22 // Description : Pad control register #define PADS_BANK0_GPIO22_OFFSET _u(0x0000005c) #define PADS_BANK0_GPIO22_BITS _u(0x000000ff) #define PADS_BANK0_GPIO22_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO22_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO22_OD_RESET _u(0x0) #define PADS_BANK0_GPIO22_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO22_OD_MSB _u(7) #define PADS_BANK0_GPIO22_OD_LSB _u(7) #define PADS_BANK0_GPIO22_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO22_IE // Description : Input enable #define PADS_BANK0_GPIO22_IE_RESET _u(0x1) #define PADS_BANK0_GPIO22_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO22_IE_MSB _u(6) #define PADS_BANK0_GPIO22_IE_LSB _u(6) #define PADS_BANK0_GPIO22_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO22_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO22_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO22_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO22_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO22_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO22_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO22_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO22_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO22_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO22_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO22_PUE // Description : Pull up enable #define PADS_BANK0_GPIO22_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO22_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO22_PUE_MSB _u(3) #define PADS_BANK0_GPIO22_PUE_LSB _u(3) #define PADS_BANK0_GPIO22_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO22_PDE // Description : Pull down enable #define PADS_BANK0_GPIO22_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO22_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO22_PDE_MSB _u(2) #define PADS_BANK0_GPIO22_PDE_LSB _u(2) #define PADS_BANK0_GPIO22_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO22_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO22_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO22_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO22_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO22_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO22_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO22_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO22_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO22_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO22_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO22_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO22_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO23 // Description : Pad control register #define PADS_BANK0_GPIO23_OFFSET _u(0x00000060) #define PADS_BANK0_GPIO23_BITS _u(0x000000ff) #define PADS_BANK0_GPIO23_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO23_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO23_OD_RESET _u(0x0) #define PADS_BANK0_GPIO23_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO23_OD_MSB _u(7) #define PADS_BANK0_GPIO23_OD_LSB _u(7) #define PADS_BANK0_GPIO23_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO23_IE // Description : Input enable #define PADS_BANK0_GPIO23_IE_RESET _u(0x1) #define PADS_BANK0_GPIO23_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO23_IE_MSB _u(6) #define PADS_BANK0_GPIO23_IE_LSB _u(6) #define PADS_BANK0_GPIO23_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO23_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO23_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO23_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO23_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO23_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO23_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO23_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO23_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO23_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO23_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO23_PUE // Description : Pull up enable #define PADS_BANK0_GPIO23_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO23_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO23_PUE_MSB _u(3) #define PADS_BANK0_GPIO23_PUE_LSB _u(3) #define PADS_BANK0_GPIO23_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO23_PDE // Description : Pull down enable #define PADS_BANK0_GPIO23_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO23_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO23_PDE_MSB _u(2) #define PADS_BANK0_GPIO23_PDE_LSB _u(2) #define PADS_BANK0_GPIO23_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO23_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO23_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO23_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO23_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO23_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO23_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO23_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO23_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO23_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO23_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO23_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO23_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO24 // Description : Pad control register #define PADS_BANK0_GPIO24_OFFSET _u(0x00000064) #define PADS_BANK0_GPIO24_BITS _u(0x000000ff) #define PADS_BANK0_GPIO24_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO24_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO24_OD_RESET _u(0x0) #define PADS_BANK0_GPIO24_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO24_OD_MSB _u(7) #define PADS_BANK0_GPIO24_OD_LSB _u(7) #define PADS_BANK0_GPIO24_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO24_IE // Description : Input enable #define PADS_BANK0_GPIO24_IE_RESET _u(0x1) #define PADS_BANK0_GPIO24_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO24_IE_MSB _u(6) #define PADS_BANK0_GPIO24_IE_LSB _u(6) #define PADS_BANK0_GPIO24_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO24_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO24_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO24_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO24_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO24_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO24_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO24_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO24_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO24_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO24_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO24_PUE // Description : Pull up enable #define PADS_BANK0_GPIO24_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO24_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO24_PUE_MSB _u(3) #define PADS_BANK0_GPIO24_PUE_LSB _u(3) #define PADS_BANK0_GPIO24_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO24_PDE // Description : Pull down enable #define PADS_BANK0_GPIO24_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO24_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO24_PDE_MSB _u(2) #define PADS_BANK0_GPIO24_PDE_LSB _u(2) #define PADS_BANK0_GPIO24_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO24_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO24_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO24_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO24_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO24_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO24_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO24_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO24_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO24_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO24_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO24_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO24_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO25 // Description : Pad control register #define PADS_BANK0_GPIO25_OFFSET _u(0x00000068) #define PADS_BANK0_GPIO25_BITS _u(0x000000ff) #define PADS_BANK0_GPIO25_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO25_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO25_OD_RESET _u(0x0) #define PADS_BANK0_GPIO25_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO25_OD_MSB _u(7) #define PADS_BANK0_GPIO25_OD_LSB _u(7) #define PADS_BANK0_GPIO25_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO25_IE // Description : Input enable #define PADS_BANK0_GPIO25_IE_RESET _u(0x1) #define PADS_BANK0_GPIO25_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO25_IE_MSB _u(6) #define PADS_BANK0_GPIO25_IE_LSB _u(6) #define PADS_BANK0_GPIO25_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO25_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO25_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO25_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO25_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO25_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO25_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO25_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO25_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO25_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO25_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO25_PUE // Description : Pull up enable #define PADS_BANK0_GPIO25_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO25_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO25_PUE_MSB _u(3) #define PADS_BANK0_GPIO25_PUE_LSB _u(3) #define PADS_BANK0_GPIO25_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO25_PDE // Description : Pull down enable #define PADS_BANK0_GPIO25_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO25_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO25_PDE_MSB _u(2) #define PADS_BANK0_GPIO25_PDE_LSB _u(2) #define PADS_BANK0_GPIO25_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO25_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO25_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO25_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO25_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO25_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO25_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO25_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO25_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO25_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO25_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO25_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO25_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO26 // Description : Pad control register #define PADS_BANK0_GPIO26_OFFSET _u(0x0000006c) #define PADS_BANK0_GPIO26_BITS _u(0x000000ff) #define PADS_BANK0_GPIO26_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO26_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO26_OD_RESET _u(0x0) #define PADS_BANK0_GPIO26_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO26_OD_MSB _u(7) #define PADS_BANK0_GPIO26_OD_LSB _u(7) #define PADS_BANK0_GPIO26_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO26_IE // Description : Input enable #define PADS_BANK0_GPIO26_IE_RESET _u(0x1) #define PADS_BANK0_GPIO26_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO26_IE_MSB _u(6) #define PADS_BANK0_GPIO26_IE_LSB _u(6) #define PADS_BANK0_GPIO26_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO26_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO26_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO26_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO26_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO26_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO26_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO26_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO26_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO26_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO26_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO26_PUE // Description : Pull up enable #define PADS_BANK0_GPIO26_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO26_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO26_PUE_MSB _u(3) #define PADS_BANK0_GPIO26_PUE_LSB _u(3) #define PADS_BANK0_GPIO26_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO26_PDE // Description : Pull down enable #define PADS_BANK0_GPIO26_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO26_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO26_PDE_MSB _u(2) #define PADS_BANK0_GPIO26_PDE_LSB _u(2) #define PADS_BANK0_GPIO26_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO26_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO26_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO26_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO26_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO26_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO26_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO26_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO26_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO26_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO26_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO26_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO26_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO27 // Description : Pad control register #define PADS_BANK0_GPIO27_OFFSET _u(0x00000070) #define PADS_BANK0_GPIO27_BITS _u(0x000000ff) #define PADS_BANK0_GPIO27_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO27_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO27_OD_RESET _u(0x0) #define PADS_BANK0_GPIO27_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO27_OD_MSB _u(7) #define PADS_BANK0_GPIO27_OD_LSB _u(7) #define PADS_BANK0_GPIO27_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO27_IE // Description : Input enable #define PADS_BANK0_GPIO27_IE_RESET _u(0x1) #define PADS_BANK0_GPIO27_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO27_IE_MSB _u(6) #define PADS_BANK0_GPIO27_IE_LSB _u(6) #define PADS_BANK0_GPIO27_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO27_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO27_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO27_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO27_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO27_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO27_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO27_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO27_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO27_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO27_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO27_PUE // Description : Pull up enable #define PADS_BANK0_GPIO27_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO27_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO27_PUE_MSB _u(3) #define PADS_BANK0_GPIO27_PUE_LSB _u(3) #define PADS_BANK0_GPIO27_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO27_PDE // Description : Pull down enable #define PADS_BANK0_GPIO27_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO27_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO27_PDE_MSB _u(2) #define PADS_BANK0_GPIO27_PDE_LSB _u(2) #define PADS_BANK0_GPIO27_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO27_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO27_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO27_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO27_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO27_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO27_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO27_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO27_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO27_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO27_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO27_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO27_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO28 // Description : Pad control register #define PADS_BANK0_GPIO28_OFFSET _u(0x00000074) #define PADS_BANK0_GPIO28_BITS _u(0x000000ff) #define PADS_BANK0_GPIO28_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO28_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO28_OD_RESET _u(0x0) #define PADS_BANK0_GPIO28_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO28_OD_MSB _u(7) #define PADS_BANK0_GPIO28_OD_LSB _u(7) #define PADS_BANK0_GPIO28_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO28_IE // Description : Input enable #define PADS_BANK0_GPIO28_IE_RESET _u(0x1) #define PADS_BANK0_GPIO28_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO28_IE_MSB _u(6) #define PADS_BANK0_GPIO28_IE_LSB _u(6) #define PADS_BANK0_GPIO28_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO28_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO28_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO28_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO28_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO28_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO28_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO28_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO28_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO28_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO28_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO28_PUE // Description : Pull up enable #define PADS_BANK0_GPIO28_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO28_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO28_PUE_MSB _u(3) #define PADS_BANK0_GPIO28_PUE_LSB _u(3) #define PADS_BANK0_GPIO28_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO28_PDE // Description : Pull down enable #define PADS_BANK0_GPIO28_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO28_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO28_PDE_MSB _u(2) #define PADS_BANK0_GPIO28_PDE_LSB _u(2) #define PADS_BANK0_GPIO28_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO28_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO28_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO28_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO28_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO28_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO28_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO28_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO28_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO28_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO28_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO28_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO28_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_GPIO29 // Description : Pad control register #define PADS_BANK0_GPIO29_OFFSET _u(0x00000078) #define PADS_BANK0_GPIO29_BITS _u(0x000000ff) #define PADS_BANK0_GPIO29_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO29_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_GPIO29_OD_RESET _u(0x0) #define PADS_BANK0_GPIO29_OD_BITS _u(0x00000080) #define PADS_BANK0_GPIO29_OD_MSB _u(7) #define PADS_BANK0_GPIO29_OD_LSB _u(7) #define PADS_BANK0_GPIO29_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO29_IE // Description : Input enable #define PADS_BANK0_GPIO29_IE_RESET _u(0x1) #define PADS_BANK0_GPIO29_IE_BITS _u(0x00000040) #define PADS_BANK0_GPIO29_IE_MSB _u(6) #define PADS_BANK0_GPIO29_IE_LSB _u(6) #define PADS_BANK0_GPIO29_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO29_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_GPIO29_DRIVE_RESET _u(0x1) #define PADS_BANK0_GPIO29_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_GPIO29_DRIVE_MSB _u(5) #define PADS_BANK0_GPIO29_DRIVE_LSB _u(4) #define PADS_BANK0_GPIO29_DRIVE_ACCESS "RW" #define PADS_BANK0_GPIO29_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_GPIO29_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_GPIO29_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_GPIO29_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO29_PUE // Description : Pull up enable #define PADS_BANK0_GPIO29_PUE_RESET _u(0x0) #define PADS_BANK0_GPIO29_PUE_BITS _u(0x00000008) #define PADS_BANK0_GPIO29_PUE_MSB _u(3) #define PADS_BANK0_GPIO29_PUE_LSB _u(3) #define PADS_BANK0_GPIO29_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO29_PDE // Description : Pull down enable #define PADS_BANK0_GPIO29_PDE_RESET _u(0x1) #define PADS_BANK0_GPIO29_PDE_BITS _u(0x00000004) #define PADS_BANK0_GPIO29_PDE_MSB _u(2) #define PADS_BANK0_GPIO29_PDE_LSB _u(2) #define PADS_BANK0_GPIO29_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO29_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_GPIO29_SCHMITT_RESET _u(0x1) #define PADS_BANK0_GPIO29_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_GPIO29_SCHMITT_MSB _u(1) #define PADS_BANK0_GPIO29_SCHMITT_LSB _u(1) #define PADS_BANK0_GPIO29_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_GPIO29_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_GPIO29_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_GPIO29_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_GPIO29_SLEWFAST_MSB _u(0) #define PADS_BANK0_GPIO29_SLEWFAST_LSB _u(0) #define PADS_BANK0_GPIO29_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_SWCLK // Description : Pad control register #define PADS_BANK0_SWCLK_OFFSET _u(0x0000007c) #define PADS_BANK0_SWCLK_BITS _u(0x000000ff) #define PADS_BANK0_SWCLK_RESET _u(0x000000da) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWCLK_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_SWCLK_OD_RESET _u(0x1) #define PADS_BANK0_SWCLK_OD_BITS _u(0x00000080) #define PADS_BANK0_SWCLK_OD_MSB _u(7) #define PADS_BANK0_SWCLK_OD_LSB _u(7) #define PADS_BANK0_SWCLK_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWCLK_IE // Description : Input enable #define PADS_BANK0_SWCLK_IE_RESET _u(0x1) #define PADS_BANK0_SWCLK_IE_BITS _u(0x00000040) #define PADS_BANK0_SWCLK_IE_MSB _u(6) #define PADS_BANK0_SWCLK_IE_LSB _u(6) #define PADS_BANK0_SWCLK_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWCLK_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_SWCLK_DRIVE_RESET _u(0x1) #define PADS_BANK0_SWCLK_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_SWCLK_DRIVE_MSB _u(5) #define PADS_BANK0_SWCLK_DRIVE_LSB _u(4) #define PADS_BANK0_SWCLK_DRIVE_ACCESS "RW" #define PADS_BANK0_SWCLK_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_SWCLK_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_SWCLK_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_SWCLK_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWCLK_PUE // Description : Pull up enable #define PADS_BANK0_SWCLK_PUE_RESET _u(0x1) #define PADS_BANK0_SWCLK_PUE_BITS _u(0x00000008) #define PADS_BANK0_SWCLK_PUE_MSB _u(3) #define PADS_BANK0_SWCLK_PUE_LSB _u(3) #define PADS_BANK0_SWCLK_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWCLK_PDE // Description : Pull down enable #define PADS_BANK0_SWCLK_PDE_RESET _u(0x0) #define PADS_BANK0_SWCLK_PDE_BITS _u(0x00000004) #define PADS_BANK0_SWCLK_PDE_MSB _u(2) #define PADS_BANK0_SWCLK_PDE_LSB _u(2) #define PADS_BANK0_SWCLK_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWCLK_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_SWCLK_SCHMITT_RESET _u(0x1) #define PADS_BANK0_SWCLK_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_SWCLK_SCHMITT_MSB _u(1) #define PADS_BANK0_SWCLK_SCHMITT_LSB _u(1) #define PADS_BANK0_SWCLK_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWCLK_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_SWCLK_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_SWCLK_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_SWCLK_SLEWFAST_MSB _u(0) #define PADS_BANK0_SWCLK_SLEWFAST_LSB _u(0) #define PADS_BANK0_SWCLK_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_BANK0_SWD // Description : Pad control register #define PADS_BANK0_SWD_OFFSET _u(0x00000080) #define PADS_BANK0_SWD_BITS _u(0x000000ff) #define PADS_BANK0_SWD_RESET _u(0x0000005a) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWD_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_BANK0_SWD_OD_RESET _u(0x0) #define PADS_BANK0_SWD_OD_BITS _u(0x00000080) #define PADS_BANK0_SWD_OD_MSB _u(7) #define PADS_BANK0_SWD_OD_LSB _u(7) #define PADS_BANK0_SWD_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWD_IE // Description : Input enable #define PADS_BANK0_SWD_IE_RESET _u(0x1) #define PADS_BANK0_SWD_IE_BITS _u(0x00000040) #define PADS_BANK0_SWD_IE_MSB _u(6) #define PADS_BANK0_SWD_IE_LSB _u(6) #define PADS_BANK0_SWD_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWD_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_BANK0_SWD_DRIVE_RESET _u(0x1) #define PADS_BANK0_SWD_DRIVE_BITS _u(0x00000030) #define PADS_BANK0_SWD_DRIVE_MSB _u(5) #define PADS_BANK0_SWD_DRIVE_LSB _u(4) #define PADS_BANK0_SWD_DRIVE_ACCESS "RW" #define PADS_BANK0_SWD_DRIVE_VALUE_2MA _u(0x0) #define PADS_BANK0_SWD_DRIVE_VALUE_4MA _u(0x1) #define PADS_BANK0_SWD_DRIVE_VALUE_8MA _u(0x2) #define PADS_BANK0_SWD_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWD_PUE // Description : Pull up enable #define PADS_BANK0_SWD_PUE_RESET _u(0x1) #define PADS_BANK0_SWD_PUE_BITS _u(0x00000008) #define PADS_BANK0_SWD_PUE_MSB _u(3) #define PADS_BANK0_SWD_PUE_LSB _u(3) #define PADS_BANK0_SWD_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWD_PDE // Description : Pull down enable #define PADS_BANK0_SWD_PDE_RESET _u(0x0) #define PADS_BANK0_SWD_PDE_BITS _u(0x00000004) #define PADS_BANK0_SWD_PDE_MSB _u(2) #define PADS_BANK0_SWD_PDE_LSB _u(2) #define PADS_BANK0_SWD_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWD_SCHMITT // Description : Enable schmitt trigger #define PADS_BANK0_SWD_SCHMITT_RESET _u(0x1) #define PADS_BANK0_SWD_SCHMITT_BITS _u(0x00000002) #define PADS_BANK0_SWD_SCHMITT_MSB _u(1) #define PADS_BANK0_SWD_SCHMITT_LSB _u(1) #define PADS_BANK0_SWD_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_BANK0_SWD_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_BANK0_SWD_SLEWFAST_RESET _u(0x0) #define PADS_BANK0_SWD_SLEWFAST_BITS _u(0x00000001) #define PADS_BANK0_SWD_SLEWFAST_MSB _u(0) #define PADS_BANK0_SWD_SLEWFAST_LSB _u(0) #define PADS_BANK0_SWD_SLEWFAST_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_PADS_BANK0_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/pads_qspi.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : PADS_QSPI // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_PADS_QSPI_DEFINED #define HARDWARE_REGS_PADS_QSPI_DEFINED // ============================================================================= // Register : PADS_QSPI_VOLTAGE_SELECT // Description : Voltage select. Per bank control // 0x0 -> Set voltage to 3.3V (DVDD >= 2V5) // 0x1 -> Set voltage to 1.8V (DVDD <= 1V8) #define PADS_QSPI_VOLTAGE_SELECT_OFFSET _u(0x00000000) #define PADS_QSPI_VOLTAGE_SELECT_BITS _u(0x00000001) #define PADS_QSPI_VOLTAGE_SELECT_RESET _u(0x00000000) #define PADS_QSPI_VOLTAGE_SELECT_MSB _u(0) #define PADS_QSPI_VOLTAGE_SELECT_LSB _u(0) #define PADS_QSPI_VOLTAGE_SELECT_ACCESS "RW" #define PADS_QSPI_VOLTAGE_SELECT_VALUE_3V3 _u(0x0) #define PADS_QSPI_VOLTAGE_SELECT_VALUE_1V8 _u(0x1) // ============================================================================= // Register : PADS_QSPI_GPIO_QSPI_SCLK // Description : Pad control register #define PADS_QSPI_GPIO_QSPI_SCLK_OFFSET _u(0x00000004) #define PADS_QSPI_GPIO_QSPI_SCLK_BITS _u(0x000000ff) #define PADS_QSPI_GPIO_QSPI_SCLK_RESET _u(0x00000056) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SCLK_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_QSPI_GPIO_QSPI_SCLK_OD_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SCLK_OD_BITS _u(0x00000080) #define PADS_QSPI_GPIO_QSPI_SCLK_OD_MSB _u(7) #define PADS_QSPI_GPIO_QSPI_SCLK_OD_LSB _u(7) #define PADS_QSPI_GPIO_QSPI_SCLK_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SCLK_IE // Description : Input enable #define PADS_QSPI_GPIO_QSPI_SCLK_IE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SCLK_IE_BITS _u(0x00000040) #define PADS_QSPI_GPIO_QSPI_SCLK_IE_MSB _u(6) #define PADS_QSPI_GPIO_QSPI_SCLK_IE_LSB _u(6) #define PADS_QSPI_GPIO_QSPI_SCLK_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SCLK_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_BITS _u(0x00000030) #define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_MSB _u(5) #define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_LSB _u(4) #define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_ACCESS "RW" #define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_VALUE_2MA _u(0x0) #define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_VALUE_4MA _u(0x1) #define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_VALUE_8MA _u(0x2) #define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SCLK_PUE // Description : Pull up enable #define PADS_QSPI_GPIO_QSPI_SCLK_PUE_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SCLK_PUE_BITS _u(0x00000008) #define PADS_QSPI_GPIO_QSPI_SCLK_PUE_MSB _u(3) #define PADS_QSPI_GPIO_QSPI_SCLK_PUE_LSB _u(3) #define PADS_QSPI_GPIO_QSPI_SCLK_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SCLK_PDE // Description : Pull down enable #define PADS_QSPI_GPIO_QSPI_SCLK_PDE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SCLK_PDE_BITS _u(0x00000004) #define PADS_QSPI_GPIO_QSPI_SCLK_PDE_MSB _u(2) #define PADS_QSPI_GPIO_QSPI_SCLK_PDE_LSB _u(2) #define PADS_QSPI_GPIO_QSPI_SCLK_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT // Description : Enable schmitt trigger #define PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT_BITS _u(0x00000002) #define PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT_MSB _u(1) #define PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT_LSB _u(1) #define PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_BITS _u(0x00000001) #define PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_MSB _u(0) #define PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_LSB _u(0) #define PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_QSPI_GPIO_QSPI_SD0 // Description : Pad control register #define PADS_QSPI_GPIO_QSPI_SD0_OFFSET _u(0x00000008) #define PADS_QSPI_GPIO_QSPI_SD0_BITS _u(0x000000ff) #define PADS_QSPI_GPIO_QSPI_SD0_RESET _u(0x00000052) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD0_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_QSPI_GPIO_QSPI_SD0_OD_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD0_OD_BITS _u(0x00000080) #define PADS_QSPI_GPIO_QSPI_SD0_OD_MSB _u(7) #define PADS_QSPI_GPIO_QSPI_SD0_OD_LSB _u(7) #define PADS_QSPI_GPIO_QSPI_SD0_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD0_IE // Description : Input enable #define PADS_QSPI_GPIO_QSPI_SD0_IE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD0_IE_BITS _u(0x00000040) #define PADS_QSPI_GPIO_QSPI_SD0_IE_MSB _u(6) #define PADS_QSPI_GPIO_QSPI_SD0_IE_LSB _u(6) #define PADS_QSPI_GPIO_QSPI_SD0_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD0_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_BITS _u(0x00000030) #define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_MSB _u(5) #define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_LSB _u(4) #define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_ACCESS "RW" #define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_VALUE_2MA _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_VALUE_4MA _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_VALUE_8MA _u(0x2) #define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD0_PUE // Description : Pull up enable #define PADS_QSPI_GPIO_QSPI_SD0_PUE_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD0_PUE_BITS _u(0x00000008) #define PADS_QSPI_GPIO_QSPI_SD0_PUE_MSB _u(3) #define PADS_QSPI_GPIO_QSPI_SD0_PUE_LSB _u(3) #define PADS_QSPI_GPIO_QSPI_SD0_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD0_PDE // Description : Pull down enable #define PADS_QSPI_GPIO_QSPI_SD0_PDE_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD0_PDE_BITS _u(0x00000004) #define PADS_QSPI_GPIO_QSPI_SD0_PDE_MSB _u(2) #define PADS_QSPI_GPIO_QSPI_SD0_PDE_LSB _u(2) #define PADS_QSPI_GPIO_QSPI_SD0_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD0_SCHMITT // Description : Enable schmitt trigger #define PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_BITS _u(0x00000002) #define PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_MSB _u(1) #define PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_LSB _u(1) #define PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST_BITS _u(0x00000001) #define PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST_MSB _u(0) #define PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST_LSB _u(0) #define PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_QSPI_GPIO_QSPI_SD1 // Description : Pad control register #define PADS_QSPI_GPIO_QSPI_SD1_OFFSET _u(0x0000000c) #define PADS_QSPI_GPIO_QSPI_SD1_BITS _u(0x000000ff) #define PADS_QSPI_GPIO_QSPI_SD1_RESET _u(0x00000052) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD1_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_QSPI_GPIO_QSPI_SD1_OD_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD1_OD_BITS _u(0x00000080) #define PADS_QSPI_GPIO_QSPI_SD1_OD_MSB _u(7) #define PADS_QSPI_GPIO_QSPI_SD1_OD_LSB _u(7) #define PADS_QSPI_GPIO_QSPI_SD1_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD1_IE // Description : Input enable #define PADS_QSPI_GPIO_QSPI_SD1_IE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD1_IE_BITS _u(0x00000040) #define PADS_QSPI_GPIO_QSPI_SD1_IE_MSB _u(6) #define PADS_QSPI_GPIO_QSPI_SD1_IE_LSB _u(6) #define PADS_QSPI_GPIO_QSPI_SD1_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD1_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_BITS _u(0x00000030) #define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_MSB _u(5) #define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_LSB _u(4) #define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_ACCESS "RW" #define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_VALUE_2MA _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_VALUE_4MA _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_VALUE_8MA _u(0x2) #define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD1_PUE // Description : Pull up enable #define PADS_QSPI_GPIO_QSPI_SD1_PUE_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD1_PUE_BITS _u(0x00000008) #define PADS_QSPI_GPIO_QSPI_SD1_PUE_MSB _u(3) #define PADS_QSPI_GPIO_QSPI_SD1_PUE_LSB _u(3) #define PADS_QSPI_GPIO_QSPI_SD1_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD1_PDE // Description : Pull down enable #define PADS_QSPI_GPIO_QSPI_SD1_PDE_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD1_PDE_BITS _u(0x00000004) #define PADS_QSPI_GPIO_QSPI_SD1_PDE_MSB _u(2) #define PADS_QSPI_GPIO_QSPI_SD1_PDE_LSB _u(2) #define PADS_QSPI_GPIO_QSPI_SD1_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD1_SCHMITT // Description : Enable schmitt trigger #define PADS_QSPI_GPIO_QSPI_SD1_SCHMITT_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD1_SCHMITT_BITS _u(0x00000002) #define PADS_QSPI_GPIO_QSPI_SD1_SCHMITT_MSB _u(1) #define PADS_QSPI_GPIO_QSPI_SD1_SCHMITT_LSB _u(1) #define PADS_QSPI_GPIO_QSPI_SD1_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST_BITS _u(0x00000001) #define PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST_MSB _u(0) #define PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST_LSB _u(0) #define PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_QSPI_GPIO_QSPI_SD2 // Description : Pad control register #define PADS_QSPI_GPIO_QSPI_SD2_OFFSET _u(0x00000010) #define PADS_QSPI_GPIO_QSPI_SD2_BITS _u(0x000000ff) #define PADS_QSPI_GPIO_QSPI_SD2_RESET _u(0x00000052) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD2_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_QSPI_GPIO_QSPI_SD2_OD_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD2_OD_BITS _u(0x00000080) #define PADS_QSPI_GPIO_QSPI_SD2_OD_MSB _u(7) #define PADS_QSPI_GPIO_QSPI_SD2_OD_LSB _u(7) #define PADS_QSPI_GPIO_QSPI_SD2_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD2_IE // Description : Input enable #define PADS_QSPI_GPIO_QSPI_SD2_IE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD2_IE_BITS _u(0x00000040) #define PADS_QSPI_GPIO_QSPI_SD2_IE_MSB _u(6) #define PADS_QSPI_GPIO_QSPI_SD2_IE_LSB _u(6) #define PADS_QSPI_GPIO_QSPI_SD2_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD2_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_BITS _u(0x00000030) #define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_MSB _u(5) #define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_LSB _u(4) #define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_ACCESS "RW" #define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_VALUE_2MA _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_VALUE_4MA _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_VALUE_8MA _u(0x2) #define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD2_PUE // Description : Pull up enable #define PADS_QSPI_GPIO_QSPI_SD2_PUE_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD2_PUE_BITS _u(0x00000008) #define PADS_QSPI_GPIO_QSPI_SD2_PUE_MSB _u(3) #define PADS_QSPI_GPIO_QSPI_SD2_PUE_LSB _u(3) #define PADS_QSPI_GPIO_QSPI_SD2_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD2_PDE // Description : Pull down enable #define PADS_QSPI_GPIO_QSPI_SD2_PDE_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD2_PDE_BITS _u(0x00000004) #define PADS_QSPI_GPIO_QSPI_SD2_PDE_MSB _u(2) #define PADS_QSPI_GPIO_QSPI_SD2_PDE_LSB _u(2) #define PADS_QSPI_GPIO_QSPI_SD2_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD2_SCHMITT // Description : Enable schmitt trigger #define PADS_QSPI_GPIO_QSPI_SD2_SCHMITT_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD2_SCHMITT_BITS _u(0x00000002) #define PADS_QSPI_GPIO_QSPI_SD2_SCHMITT_MSB _u(1) #define PADS_QSPI_GPIO_QSPI_SD2_SCHMITT_LSB _u(1) #define PADS_QSPI_GPIO_QSPI_SD2_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST_BITS _u(0x00000001) #define PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST_MSB _u(0) #define PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST_LSB _u(0) #define PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_QSPI_GPIO_QSPI_SD3 // Description : Pad control register #define PADS_QSPI_GPIO_QSPI_SD3_OFFSET _u(0x00000014) #define PADS_QSPI_GPIO_QSPI_SD3_BITS _u(0x000000ff) #define PADS_QSPI_GPIO_QSPI_SD3_RESET _u(0x00000052) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD3_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_QSPI_GPIO_QSPI_SD3_OD_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD3_OD_BITS _u(0x00000080) #define PADS_QSPI_GPIO_QSPI_SD3_OD_MSB _u(7) #define PADS_QSPI_GPIO_QSPI_SD3_OD_LSB _u(7) #define PADS_QSPI_GPIO_QSPI_SD3_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD3_IE // Description : Input enable #define PADS_QSPI_GPIO_QSPI_SD3_IE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD3_IE_BITS _u(0x00000040) #define PADS_QSPI_GPIO_QSPI_SD3_IE_MSB _u(6) #define PADS_QSPI_GPIO_QSPI_SD3_IE_LSB _u(6) #define PADS_QSPI_GPIO_QSPI_SD3_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD3_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_BITS _u(0x00000030) #define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_MSB _u(5) #define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_LSB _u(4) #define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_ACCESS "RW" #define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_VALUE_2MA _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_VALUE_4MA _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_VALUE_8MA _u(0x2) #define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD3_PUE // Description : Pull up enable #define PADS_QSPI_GPIO_QSPI_SD3_PUE_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD3_PUE_BITS _u(0x00000008) #define PADS_QSPI_GPIO_QSPI_SD3_PUE_MSB _u(3) #define PADS_QSPI_GPIO_QSPI_SD3_PUE_LSB _u(3) #define PADS_QSPI_GPIO_QSPI_SD3_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD3_PDE // Description : Pull down enable #define PADS_QSPI_GPIO_QSPI_SD3_PDE_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD3_PDE_BITS _u(0x00000004) #define PADS_QSPI_GPIO_QSPI_SD3_PDE_MSB _u(2) #define PADS_QSPI_GPIO_QSPI_SD3_PDE_LSB _u(2) #define PADS_QSPI_GPIO_QSPI_SD3_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD3_SCHMITT // Description : Enable schmitt trigger #define PADS_QSPI_GPIO_QSPI_SD3_SCHMITT_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SD3_SCHMITT_BITS _u(0x00000002) #define PADS_QSPI_GPIO_QSPI_SD3_SCHMITT_MSB _u(1) #define PADS_QSPI_GPIO_QSPI_SD3_SCHMITT_LSB _u(1) #define PADS_QSPI_GPIO_QSPI_SD3_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST_BITS _u(0x00000001) #define PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST_MSB _u(0) #define PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST_LSB _u(0) #define PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST_ACCESS "RW" // ============================================================================= // Register : PADS_QSPI_GPIO_QSPI_SS // Description : Pad control register #define PADS_QSPI_GPIO_QSPI_SS_OFFSET _u(0x00000018) #define PADS_QSPI_GPIO_QSPI_SS_BITS _u(0x000000ff) #define PADS_QSPI_GPIO_QSPI_SS_RESET _u(0x0000005a) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SS_OD // Description : Output disable. Has priority over output enable from // peripherals #define PADS_QSPI_GPIO_QSPI_SS_OD_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SS_OD_BITS _u(0x00000080) #define PADS_QSPI_GPIO_QSPI_SS_OD_MSB _u(7) #define PADS_QSPI_GPIO_QSPI_SS_OD_LSB _u(7) #define PADS_QSPI_GPIO_QSPI_SS_OD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SS_IE // Description : Input enable #define PADS_QSPI_GPIO_QSPI_SS_IE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SS_IE_BITS _u(0x00000040) #define PADS_QSPI_GPIO_QSPI_SS_IE_MSB _u(6) #define PADS_QSPI_GPIO_QSPI_SS_IE_LSB _u(6) #define PADS_QSPI_GPIO_QSPI_SS_IE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SS_DRIVE // Description : Drive strength. // 0x0 -> 2mA // 0x1 -> 4mA // 0x2 -> 8mA // 0x3 -> 12mA #define PADS_QSPI_GPIO_QSPI_SS_DRIVE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SS_DRIVE_BITS _u(0x00000030) #define PADS_QSPI_GPIO_QSPI_SS_DRIVE_MSB _u(5) #define PADS_QSPI_GPIO_QSPI_SS_DRIVE_LSB _u(4) #define PADS_QSPI_GPIO_QSPI_SS_DRIVE_ACCESS "RW" #define PADS_QSPI_GPIO_QSPI_SS_DRIVE_VALUE_2MA _u(0x0) #define PADS_QSPI_GPIO_QSPI_SS_DRIVE_VALUE_4MA _u(0x1) #define PADS_QSPI_GPIO_QSPI_SS_DRIVE_VALUE_8MA _u(0x2) #define PADS_QSPI_GPIO_QSPI_SS_DRIVE_VALUE_12MA _u(0x3) // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SS_PUE // Description : Pull up enable #define PADS_QSPI_GPIO_QSPI_SS_PUE_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SS_PUE_BITS _u(0x00000008) #define PADS_QSPI_GPIO_QSPI_SS_PUE_MSB _u(3) #define PADS_QSPI_GPIO_QSPI_SS_PUE_LSB _u(3) #define PADS_QSPI_GPIO_QSPI_SS_PUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SS_PDE // Description : Pull down enable #define PADS_QSPI_GPIO_QSPI_SS_PDE_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SS_PDE_BITS _u(0x00000004) #define PADS_QSPI_GPIO_QSPI_SS_PDE_MSB _u(2) #define PADS_QSPI_GPIO_QSPI_SS_PDE_LSB _u(2) #define PADS_QSPI_GPIO_QSPI_SS_PDE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SS_SCHMITT // Description : Enable schmitt trigger #define PADS_QSPI_GPIO_QSPI_SS_SCHMITT_RESET _u(0x1) #define PADS_QSPI_GPIO_QSPI_SS_SCHMITT_BITS _u(0x00000002) #define PADS_QSPI_GPIO_QSPI_SS_SCHMITT_MSB _u(1) #define PADS_QSPI_GPIO_QSPI_SS_SCHMITT_LSB _u(1) #define PADS_QSPI_GPIO_QSPI_SS_SCHMITT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PADS_QSPI_GPIO_QSPI_SS_SLEWFAST // Description : Slew rate control. 1 = Fast, 0 = Slow #define PADS_QSPI_GPIO_QSPI_SS_SLEWFAST_RESET _u(0x0) #define PADS_QSPI_GPIO_QSPI_SS_SLEWFAST_BITS _u(0x00000001) #define PADS_QSPI_GPIO_QSPI_SS_SLEWFAST_MSB _u(0) #define PADS_QSPI_GPIO_QSPI_SS_SLEWFAST_LSB _u(0) #define PADS_QSPI_GPIO_QSPI_SS_SLEWFAST_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_PADS_QSPI_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/pio.h ================================================ /** * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : PIO // Version : 1 // Bus type : ahbl // Description : Programmable IO block // ============================================================================= #ifndef HARDWARE_REGS_PIO_DEFINED #define HARDWARE_REGS_PIO_DEFINED // ============================================================================= // Register : PIO_CTRL // Description : PIO control register #define PIO_CTRL_OFFSET _u(0x00000000) #define PIO_CTRL_BITS _u(0x00000fff) #define PIO_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_CTRL_CLKDIV_RESTART // Description : Restart a state machine's clock divider from an initial phase // of 0. Clock dividers are free-running, so once started, their // output (including fractional jitter) is completely determined // by the integer/fractional divisor configured in SMx_CLKDIV. // This means that, if multiple clock dividers with the same // divisor are restarted simultaneously, by writing multiple 1 // bits to this field, the execution clocks of those state // machines will run in precise lockstep. // // Note that setting/clearing SM_ENABLE does not stop the clock // divider from running, so once multiple state machines' clocks // are synchronised, it is safe to disable/reenable a state // machine, whilst keeping the clock dividers in sync. // // Note also that CLKDIV_RESTART can be written to whilst the // state machine is running, and this is useful to resynchronise // clock dividers after the divisors (SMx_CLKDIV) have been // changed on-the-fly. #define PIO_CTRL_CLKDIV_RESTART_RESET _u(0x0) #define PIO_CTRL_CLKDIV_RESTART_BITS _u(0x00000f00) #define PIO_CTRL_CLKDIV_RESTART_MSB _u(11) #define PIO_CTRL_CLKDIV_RESTART_LSB _u(8) #define PIO_CTRL_CLKDIV_RESTART_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PIO_CTRL_SM_RESTART // Description : Write 1 to instantly clear internal SM state which may be // otherwise difficult to access and will affect future execution. // // Specifically, the following are cleared: input and output shift // counters; the contents of the input shift register; the delay // counter; the waiting-on-IRQ state; any stalled instruction // written to SMx_INSTR or run by OUT/MOV EXEC; any pin write left // asserted due to OUT_STICKY. // // The program counter, the contents of the output shift register // and the X/Y scratch registers are not affected. #define PIO_CTRL_SM_RESTART_RESET _u(0x0) #define PIO_CTRL_SM_RESTART_BITS _u(0x000000f0) #define PIO_CTRL_SM_RESTART_MSB _u(7) #define PIO_CTRL_SM_RESTART_LSB _u(4) #define PIO_CTRL_SM_RESTART_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PIO_CTRL_SM_ENABLE // Description : Enable/disable each of the four state machines by writing 1/0 // to each of these four bits. When disabled, a state machine will // cease executing instructions, except those written directly to // SMx_INSTR by the system. Multiple bits can be set/cleared at // once to run/halt multiple state machines simultaneously. #define PIO_CTRL_SM_ENABLE_RESET _u(0x0) #define PIO_CTRL_SM_ENABLE_BITS _u(0x0000000f) #define PIO_CTRL_SM_ENABLE_MSB _u(3) #define PIO_CTRL_SM_ENABLE_LSB _u(0) #define PIO_CTRL_SM_ENABLE_ACCESS "RW" // ============================================================================= // Register : PIO_FSTAT // Description : FIFO status register #define PIO_FSTAT_OFFSET _u(0x00000004) #define PIO_FSTAT_BITS _u(0x0f0f0f0f) #define PIO_FSTAT_RESET _u(0x0f000f00) // ----------------------------------------------------------------------------- // Field : PIO_FSTAT_TXEMPTY // Description : State machine TX FIFO is empty #define PIO_FSTAT_TXEMPTY_RESET _u(0xf) #define PIO_FSTAT_TXEMPTY_BITS _u(0x0f000000) #define PIO_FSTAT_TXEMPTY_MSB _u(27) #define PIO_FSTAT_TXEMPTY_LSB _u(24) #define PIO_FSTAT_TXEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_FSTAT_TXFULL // Description : State machine TX FIFO is full #define PIO_FSTAT_TXFULL_RESET _u(0x0) #define PIO_FSTAT_TXFULL_BITS _u(0x000f0000) #define PIO_FSTAT_TXFULL_MSB _u(19) #define PIO_FSTAT_TXFULL_LSB _u(16) #define PIO_FSTAT_TXFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_FSTAT_RXEMPTY // Description : State machine RX FIFO is empty #define PIO_FSTAT_RXEMPTY_RESET _u(0xf) #define PIO_FSTAT_RXEMPTY_BITS _u(0x00000f00) #define PIO_FSTAT_RXEMPTY_MSB _u(11) #define PIO_FSTAT_RXEMPTY_LSB _u(8) #define PIO_FSTAT_RXEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_FSTAT_RXFULL // Description : State machine RX FIFO is full #define PIO_FSTAT_RXFULL_RESET _u(0x0) #define PIO_FSTAT_RXFULL_BITS _u(0x0000000f) #define PIO_FSTAT_RXFULL_MSB _u(3) #define PIO_FSTAT_RXFULL_LSB _u(0) #define PIO_FSTAT_RXFULL_ACCESS "RO" // ============================================================================= // Register : PIO_FDEBUG // Description : FIFO debug register #define PIO_FDEBUG_OFFSET _u(0x00000008) #define PIO_FDEBUG_BITS _u(0x0f0f0f0f) #define PIO_FDEBUG_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_FDEBUG_TXSTALL // Description : State machine has stalled on empty TX FIFO during a blocking // PULL, or an OUT with autopull enabled. Write 1 to clear. #define PIO_FDEBUG_TXSTALL_RESET _u(0x0) #define PIO_FDEBUG_TXSTALL_BITS _u(0x0f000000) #define PIO_FDEBUG_TXSTALL_MSB _u(27) #define PIO_FDEBUG_TXSTALL_LSB _u(24) #define PIO_FDEBUG_TXSTALL_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : PIO_FDEBUG_TXOVER // Description : TX FIFO overflow (i.e. write-on-full by the system) has // occurred. Write 1 to clear. Note that write-on-full does not // alter the state or contents of the FIFO in any way, but the // data that the system attempted to write is dropped, so if this // flag is set, your software has quite likely dropped some data // on the floor. #define PIO_FDEBUG_TXOVER_RESET _u(0x0) #define PIO_FDEBUG_TXOVER_BITS _u(0x000f0000) #define PIO_FDEBUG_TXOVER_MSB _u(19) #define PIO_FDEBUG_TXOVER_LSB _u(16) #define PIO_FDEBUG_TXOVER_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : PIO_FDEBUG_RXUNDER // Description : RX FIFO underflow (i.e. read-on-empty by the system) has // occurred. Write 1 to clear. Note that read-on-empty does not // perturb the state of the FIFO in any way, but the data returned // by reading from an empty FIFO is undefined, so this flag // generally only becomes set due to some kind of software error. #define PIO_FDEBUG_RXUNDER_RESET _u(0x0) #define PIO_FDEBUG_RXUNDER_BITS _u(0x00000f00) #define PIO_FDEBUG_RXUNDER_MSB _u(11) #define PIO_FDEBUG_RXUNDER_LSB _u(8) #define PIO_FDEBUG_RXUNDER_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : PIO_FDEBUG_RXSTALL // Description : State machine has stalled on full RX FIFO during a blocking // PUSH, or an IN with autopush enabled. This flag is also set // when a nonblocking PUSH to a full FIFO took place, in which // case the state machine has dropped data. Write 1 to clear. #define PIO_FDEBUG_RXSTALL_RESET _u(0x0) #define PIO_FDEBUG_RXSTALL_BITS _u(0x0000000f) #define PIO_FDEBUG_RXSTALL_MSB _u(3) #define PIO_FDEBUG_RXSTALL_LSB _u(0) #define PIO_FDEBUG_RXSTALL_ACCESS "WC" // ============================================================================= // Register : PIO_FLEVEL // Description : FIFO levels #define PIO_FLEVEL_OFFSET _u(0x0000000c) #define PIO_FLEVEL_BITS _u(0xffffffff) #define PIO_FLEVEL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_FLEVEL_RX3 // Description : None #define PIO_FLEVEL_RX3_RESET _u(0x0) #define PIO_FLEVEL_RX3_BITS _u(0xf0000000) #define PIO_FLEVEL_RX3_MSB _u(31) #define PIO_FLEVEL_RX3_LSB _u(28) #define PIO_FLEVEL_RX3_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_FLEVEL_TX3 // Description : None #define PIO_FLEVEL_TX3_RESET _u(0x0) #define PIO_FLEVEL_TX3_BITS _u(0x0f000000) #define PIO_FLEVEL_TX3_MSB _u(27) #define PIO_FLEVEL_TX3_LSB _u(24) #define PIO_FLEVEL_TX3_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_FLEVEL_RX2 // Description : None #define PIO_FLEVEL_RX2_RESET _u(0x0) #define PIO_FLEVEL_RX2_BITS _u(0x00f00000) #define PIO_FLEVEL_RX2_MSB _u(23) #define PIO_FLEVEL_RX2_LSB _u(20) #define PIO_FLEVEL_RX2_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_FLEVEL_TX2 // Description : None #define PIO_FLEVEL_TX2_RESET _u(0x0) #define PIO_FLEVEL_TX2_BITS _u(0x000f0000) #define PIO_FLEVEL_TX2_MSB _u(19) #define PIO_FLEVEL_TX2_LSB _u(16) #define PIO_FLEVEL_TX2_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_FLEVEL_RX1 // Description : None #define PIO_FLEVEL_RX1_RESET _u(0x0) #define PIO_FLEVEL_RX1_BITS _u(0x0000f000) #define PIO_FLEVEL_RX1_MSB _u(15) #define PIO_FLEVEL_RX1_LSB _u(12) #define PIO_FLEVEL_RX1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_FLEVEL_TX1 // Description : None #define PIO_FLEVEL_TX1_RESET _u(0x0) #define PIO_FLEVEL_TX1_BITS _u(0x00000f00) #define PIO_FLEVEL_TX1_MSB _u(11) #define PIO_FLEVEL_TX1_LSB _u(8) #define PIO_FLEVEL_TX1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_FLEVEL_RX0 // Description : None #define PIO_FLEVEL_RX0_RESET _u(0x0) #define PIO_FLEVEL_RX0_BITS _u(0x000000f0) #define PIO_FLEVEL_RX0_MSB _u(7) #define PIO_FLEVEL_RX0_LSB _u(4) #define PIO_FLEVEL_RX0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_FLEVEL_TX0 // Description : None #define PIO_FLEVEL_TX0_RESET _u(0x0) #define PIO_FLEVEL_TX0_BITS _u(0x0000000f) #define PIO_FLEVEL_TX0_MSB _u(3) #define PIO_FLEVEL_TX0_LSB _u(0) #define PIO_FLEVEL_TX0_ACCESS "RO" // ============================================================================= // Register : PIO_TXF0 // Description : Direct write access to the TX FIFO for this state machine. Each // write pushes one word to the FIFO. Attempting to write to a // full FIFO has no effect on the FIFO state or contents, and sets // the sticky FDEBUG_TXOVER error flag for this FIFO. #define PIO_TXF0_OFFSET _u(0x00000010) #define PIO_TXF0_BITS _u(0xffffffff) #define PIO_TXF0_RESET _u(0x00000000) #define PIO_TXF0_MSB _u(31) #define PIO_TXF0_LSB _u(0) #define PIO_TXF0_ACCESS "WF" // ============================================================================= // Register : PIO_TXF1 // Description : Direct write access to the TX FIFO for this state machine. Each // write pushes one word to the FIFO. Attempting to write to a // full FIFO has no effect on the FIFO state or contents, and sets // the sticky FDEBUG_TXOVER error flag for this FIFO. #define PIO_TXF1_OFFSET _u(0x00000014) #define PIO_TXF1_BITS _u(0xffffffff) #define PIO_TXF1_RESET _u(0x00000000) #define PIO_TXF1_MSB _u(31) #define PIO_TXF1_LSB _u(0) #define PIO_TXF1_ACCESS "WF" // ============================================================================= // Register : PIO_TXF2 // Description : Direct write access to the TX FIFO for this state machine. Each // write pushes one word to the FIFO. Attempting to write to a // full FIFO has no effect on the FIFO state or contents, and sets // the sticky FDEBUG_TXOVER error flag for this FIFO. #define PIO_TXF2_OFFSET _u(0x00000018) #define PIO_TXF2_BITS _u(0xffffffff) #define PIO_TXF2_RESET _u(0x00000000) #define PIO_TXF2_MSB _u(31) #define PIO_TXF2_LSB _u(0) #define PIO_TXF2_ACCESS "WF" // ============================================================================= // Register : PIO_TXF3 // Description : Direct write access to the TX FIFO for this state machine. Each // write pushes one word to the FIFO. Attempting to write to a // full FIFO has no effect on the FIFO state or contents, and sets // the sticky FDEBUG_TXOVER error flag for this FIFO. #define PIO_TXF3_OFFSET _u(0x0000001c) #define PIO_TXF3_BITS _u(0xffffffff) #define PIO_TXF3_RESET _u(0x00000000) #define PIO_TXF3_MSB _u(31) #define PIO_TXF3_LSB _u(0) #define PIO_TXF3_ACCESS "WF" // ============================================================================= // Register : PIO_RXF0 // Description : Direct read access to the RX FIFO for this state machine. Each // read pops one word from the FIFO. Attempting to read from an // empty FIFO has no effect on the FIFO state, and sets the sticky // FDEBUG_RXUNDER error flag for this FIFO. The data returned to // the system on a read from an empty FIFO is undefined. #define PIO_RXF0_OFFSET _u(0x00000020) #define PIO_RXF0_BITS _u(0xffffffff) #define PIO_RXF0_RESET "-" #define PIO_RXF0_MSB _u(31) #define PIO_RXF0_LSB _u(0) #define PIO_RXF0_ACCESS "RF" // ============================================================================= // Register : PIO_RXF1 // Description : Direct read access to the RX FIFO for this state machine. Each // read pops one word from the FIFO. Attempting to read from an // empty FIFO has no effect on the FIFO state, and sets the sticky // FDEBUG_RXUNDER error flag for this FIFO. The data returned to // the system on a read from an empty FIFO is undefined. #define PIO_RXF1_OFFSET _u(0x00000024) #define PIO_RXF1_BITS _u(0xffffffff) #define PIO_RXF1_RESET "-" #define PIO_RXF1_MSB _u(31) #define PIO_RXF1_LSB _u(0) #define PIO_RXF1_ACCESS "RF" // ============================================================================= // Register : PIO_RXF2 // Description : Direct read access to the RX FIFO for this state machine. Each // read pops one word from the FIFO. Attempting to read from an // empty FIFO has no effect on the FIFO state, and sets the sticky // FDEBUG_RXUNDER error flag for this FIFO. The data returned to // the system on a read from an empty FIFO is undefined. #define PIO_RXF2_OFFSET _u(0x00000028) #define PIO_RXF2_BITS _u(0xffffffff) #define PIO_RXF2_RESET "-" #define PIO_RXF2_MSB _u(31) #define PIO_RXF2_LSB _u(0) #define PIO_RXF2_ACCESS "RF" // ============================================================================= // Register : PIO_RXF3 // Description : Direct read access to the RX FIFO for this state machine. Each // read pops one word from the FIFO. Attempting to read from an // empty FIFO has no effect on the FIFO state, and sets the sticky // FDEBUG_RXUNDER error flag for this FIFO. The data returned to // the system on a read from an empty FIFO is undefined. #define PIO_RXF3_OFFSET _u(0x0000002c) #define PIO_RXF3_BITS _u(0xffffffff) #define PIO_RXF3_RESET "-" #define PIO_RXF3_MSB _u(31) #define PIO_RXF3_LSB _u(0) #define PIO_RXF3_ACCESS "RF" // ============================================================================= // Register : PIO_IRQ // Description : State machine IRQ flags register. Write 1 to clear. There are 8 // state machine IRQ flags, which can be set, cleared, and waited // on by the state machines. There's no fixed association between // flags and state machines -- any state machine can use any flag. // // Any of the 8 flags can be used for timing synchronisation // between state machines, using IRQ and WAIT instructions. The // lower four of these flags are also routed out to system-level // interrupt requests, alongside FIFO status interrupts -- see // e.g. IRQ0_INTE. #define PIO_IRQ_OFFSET _u(0x00000030) #define PIO_IRQ_BITS _u(0x000000ff) #define PIO_IRQ_RESET _u(0x00000000) #define PIO_IRQ_MSB _u(7) #define PIO_IRQ_LSB _u(0) #define PIO_IRQ_ACCESS "WC" // ============================================================================= // Register : PIO_IRQ_FORCE // Description : Writing a 1 to each of these bits will forcibly assert the // corresponding IRQ. Note this is different to the INTF register: // writing here affects PIO internal state. INTF just asserts the // processor-facing IRQ signal for testing ISRs, and is not // visible to the state machines. #define PIO_IRQ_FORCE_OFFSET _u(0x00000034) #define PIO_IRQ_FORCE_BITS _u(0x000000ff) #define PIO_IRQ_FORCE_RESET _u(0x00000000) #define PIO_IRQ_FORCE_MSB _u(7) #define PIO_IRQ_FORCE_LSB _u(0) #define PIO_IRQ_FORCE_ACCESS "WF" // ============================================================================= // Register : PIO_INPUT_SYNC_BYPASS // Description : There is a 2-flipflop synchronizer on each GPIO input, which // protects PIO logic from metastabilities. This increases input // delay, and for fast synchronous IO (e.g. SPI) these // synchronizers may need to be bypassed. Each bit in this // register corresponds to one GPIO. // 0 -> input is synchronized (default) // 1 -> synchronizer is bypassed // If in doubt, leave this register as all zeroes. #define PIO_INPUT_SYNC_BYPASS_OFFSET _u(0x00000038) #define PIO_INPUT_SYNC_BYPASS_BITS _u(0xffffffff) #define PIO_INPUT_SYNC_BYPASS_RESET _u(0x00000000) #define PIO_INPUT_SYNC_BYPASS_MSB _u(31) #define PIO_INPUT_SYNC_BYPASS_LSB _u(0) #define PIO_INPUT_SYNC_BYPASS_ACCESS "RW" // ============================================================================= // Register : PIO_DBG_PADOUT // Description : Read to sample the pad output values PIO is currently driving // to the GPIOs. On RP2040 there are 30 GPIOs, so the two most // significant bits are hardwired to 0. #define PIO_DBG_PADOUT_OFFSET _u(0x0000003c) #define PIO_DBG_PADOUT_BITS _u(0xffffffff) #define PIO_DBG_PADOUT_RESET _u(0x00000000) #define PIO_DBG_PADOUT_MSB _u(31) #define PIO_DBG_PADOUT_LSB _u(0) #define PIO_DBG_PADOUT_ACCESS "RO" // ============================================================================= // Register : PIO_DBG_PADOE // Description : Read to sample the pad output enables (direction) PIO is // currently driving to the GPIOs. On RP2040 there are 30 GPIOs, // so the two most significant bits are hardwired to 0. #define PIO_DBG_PADOE_OFFSET _u(0x00000040) #define PIO_DBG_PADOE_BITS _u(0xffffffff) #define PIO_DBG_PADOE_RESET _u(0x00000000) #define PIO_DBG_PADOE_MSB _u(31) #define PIO_DBG_PADOE_LSB _u(0) #define PIO_DBG_PADOE_ACCESS "RO" // ============================================================================= // Register : PIO_DBG_CFGINFO // Description : The PIO hardware has some free parameters that may vary between // chip products. // These should be provided in the chip datasheet, but are also // exposed here. #define PIO_DBG_CFGINFO_OFFSET _u(0x00000044) #define PIO_DBG_CFGINFO_BITS _u(0x003f0f3f) #define PIO_DBG_CFGINFO_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_DBG_CFGINFO_IMEM_SIZE // Description : The size of the instruction memory, measured in units of one // instruction #define PIO_DBG_CFGINFO_IMEM_SIZE_RESET "-" #define PIO_DBG_CFGINFO_IMEM_SIZE_BITS _u(0x003f0000) #define PIO_DBG_CFGINFO_IMEM_SIZE_MSB _u(21) #define PIO_DBG_CFGINFO_IMEM_SIZE_LSB _u(16) #define PIO_DBG_CFGINFO_IMEM_SIZE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_DBG_CFGINFO_SM_COUNT // Description : The number of state machines this PIO instance is equipped // with. #define PIO_DBG_CFGINFO_SM_COUNT_RESET "-" #define PIO_DBG_CFGINFO_SM_COUNT_BITS _u(0x00000f00) #define PIO_DBG_CFGINFO_SM_COUNT_MSB _u(11) #define PIO_DBG_CFGINFO_SM_COUNT_LSB _u(8) #define PIO_DBG_CFGINFO_SM_COUNT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_DBG_CFGINFO_FIFO_DEPTH // Description : The depth of the state machine TX/RX FIFOs, measured in words. // Joining fifos via SHIFTCTRL_FJOIN gives one FIFO with double // this depth. #define PIO_DBG_CFGINFO_FIFO_DEPTH_RESET "-" #define PIO_DBG_CFGINFO_FIFO_DEPTH_BITS _u(0x0000003f) #define PIO_DBG_CFGINFO_FIFO_DEPTH_MSB _u(5) #define PIO_DBG_CFGINFO_FIFO_DEPTH_LSB _u(0) #define PIO_DBG_CFGINFO_FIFO_DEPTH_ACCESS "RO" // ============================================================================= // Register : PIO_INSTR_MEM0 // Description : Write-only access to instruction memory location 0 #define PIO_INSTR_MEM0_OFFSET _u(0x00000048) #define PIO_INSTR_MEM0_BITS _u(0x0000ffff) #define PIO_INSTR_MEM0_RESET _u(0x00000000) #define PIO_INSTR_MEM0_MSB _u(15) #define PIO_INSTR_MEM0_LSB _u(0) #define PIO_INSTR_MEM0_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM1 // Description : Write-only access to instruction memory location 1 #define PIO_INSTR_MEM1_OFFSET _u(0x0000004c) #define PIO_INSTR_MEM1_BITS _u(0x0000ffff) #define PIO_INSTR_MEM1_RESET _u(0x00000000) #define PIO_INSTR_MEM1_MSB _u(15) #define PIO_INSTR_MEM1_LSB _u(0) #define PIO_INSTR_MEM1_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM2 // Description : Write-only access to instruction memory location 2 #define PIO_INSTR_MEM2_OFFSET _u(0x00000050) #define PIO_INSTR_MEM2_BITS _u(0x0000ffff) #define PIO_INSTR_MEM2_RESET _u(0x00000000) #define PIO_INSTR_MEM2_MSB _u(15) #define PIO_INSTR_MEM2_LSB _u(0) #define PIO_INSTR_MEM2_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM3 // Description : Write-only access to instruction memory location 3 #define PIO_INSTR_MEM3_OFFSET _u(0x00000054) #define PIO_INSTR_MEM3_BITS _u(0x0000ffff) #define PIO_INSTR_MEM3_RESET _u(0x00000000) #define PIO_INSTR_MEM3_MSB _u(15) #define PIO_INSTR_MEM3_LSB _u(0) #define PIO_INSTR_MEM3_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM4 // Description : Write-only access to instruction memory location 4 #define PIO_INSTR_MEM4_OFFSET _u(0x00000058) #define PIO_INSTR_MEM4_BITS _u(0x0000ffff) #define PIO_INSTR_MEM4_RESET _u(0x00000000) #define PIO_INSTR_MEM4_MSB _u(15) #define PIO_INSTR_MEM4_LSB _u(0) #define PIO_INSTR_MEM4_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM5 // Description : Write-only access to instruction memory location 5 #define PIO_INSTR_MEM5_OFFSET _u(0x0000005c) #define PIO_INSTR_MEM5_BITS _u(0x0000ffff) #define PIO_INSTR_MEM5_RESET _u(0x00000000) #define PIO_INSTR_MEM5_MSB _u(15) #define PIO_INSTR_MEM5_LSB _u(0) #define PIO_INSTR_MEM5_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM6 // Description : Write-only access to instruction memory location 6 #define PIO_INSTR_MEM6_OFFSET _u(0x00000060) #define PIO_INSTR_MEM6_BITS _u(0x0000ffff) #define PIO_INSTR_MEM6_RESET _u(0x00000000) #define PIO_INSTR_MEM6_MSB _u(15) #define PIO_INSTR_MEM6_LSB _u(0) #define PIO_INSTR_MEM6_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM7 // Description : Write-only access to instruction memory location 7 #define PIO_INSTR_MEM7_OFFSET _u(0x00000064) #define PIO_INSTR_MEM7_BITS _u(0x0000ffff) #define PIO_INSTR_MEM7_RESET _u(0x00000000) #define PIO_INSTR_MEM7_MSB _u(15) #define PIO_INSTR_MEM7_LSB _u(0) #define PIO_INSTR_MEM7_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM8 // Description : Write-only access to instruction memory location 8 #define PIO_INSTR_MEM8_OFFSET _u(0x00000068) #define PIO_INSTR_MEM8_BITS _u(0x0000ffff) #define PIO_INSTR_MEM8_RESET _u(0x00000000) #define PIO_INSTR_MEM8_MSB _u(15) #define PIO_INSTR_MEM8_LSB _u(0) #define PIO_INSTR_MEM8_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM9 // Description : Write-only access to instruction memory location 9 #define PIO_INSTR_MEM9_OFFSET _u(0x0000006c) #define PIO_INSTR_MEM9_BITS _u(0x0000ffff) #define PIO_INSTR_MEM9_RESET _u(0x00000000) #define PIO_INSTR_MEM9_MSB _u(15) #define PIO_INSTR_MEM9_LSB _u(0) #define PIO_INSTR_MEM9_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM10 // Description : Write-only access to instruction memory location 10 #define PIO_INSTR_MEM10_OFFSET _u(0x00000070) #define PIO_INSTR_MEM10_BITS _u(0x0000ffff) #define PIO_INSTR_MEM10_RESET _u(0x00000000) #define PIO_INSTR_MEM10_MSB _u(15) #define PIO_INSTR_MEM10_LSB _u(0) #define PIO_INSTR_MEM10_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM11 // Description : Write-only access to instruction memory location 11 #define PIO_INSTR_MEM11_OFFSET _u(0x00000074) #define PIO_INSTR_MEM11_BITS _u(0x0000ffff) #define PIO_INSTR_MEM11_RESET _u(0x00000000) #define PIO_INSTR_MEM11_MSB _u(15) #define PIO_INSTR_MEM11_LSB _u(0) #define PIO_INSTR_MEM11_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM12 // Description : Write-only access to instruction memory location 12 #define PIO_INSTR_MEM12_OFFSET _u(0x00000078) #define PIO_INSTR_MEM12_BITS _u(0x0000ffff) #define PIO_INSTR_MEM12_RESET _u(0x00000000) #define PIO_INSTR_MEM12_MSB _u(15) #define PIO_INSTR_MEM12_LSB _u(0) #define PIO_INSTR_MEM12_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM13 // Description : Write-only access to instruction memory location 13 #define PIO_INSTR_MEM13_OFFSET _u(0x0000007c) #define PIO_INSTR_MEM13_BITS _u(0x0000ffff) #define PIO_INSTR_MEM13_RESET _u(0x00000000) #define PIO_INSTR_MEM13_MSB _u(15) #define PIO_INSTR_MEM13_LSB _u(0) #define PIO_INSTR_MEM13_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM14 // Description : Write-only access to instruction memory location 14 #define PIO_INSTR_MEM14_OFFSET _u(0x00000080) #define PIO_INSTR_MEM14_BITS _u(0x0000ffff) #define PIO_INSTR_MEM14_RESET _u(0x00000000) #define PIO_INSTR_MEM14_MSB _u(15) #define PIO_INSTR_MEM14_LSB _u(0) #define PIO_INSTR_MEM14_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM15 // Description : Write-only access to instruction memory location 15 #define PIO_INSTR_MEM15_OFFSET _u(0x00000084) #define PIO_INSTR_MEM15_BITS _u(0x0000ffff) #define PIO_INSTR_MEM15_RESET _u(0x00000000) #define PIO_INSTR_MEM15_MSB _u(15) #define PIO_INSTR_MEM15_LSB _u(0) #define PIO_INSTR_MEM15_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM16 // Description : Write-only access to instruction memory location 16 #define PIO_INSTR_MEM16_OFFSET _u(0x00000088) #define PIO_INSTR_MEM16_BITS _u(0x0000ffff) #define PIO_INSTR_MEM16_RESET _u(0x00000000) #define PIO_INSTR_MEM16_MSB _u(15) #define PIO_INSTR_MEM16_LSB _u(0) #define PIO_INSTR_MEM16_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM17 // Description : Write-only access to instruction memory location 17 #define PIO_INSTR_MEM17_OFFSET _u(0x0000008c) #define PIO_INSTR_MEM17_BITS _u(0x0000ffff) #define PIO_INSTR_MEM17_RESET _u(0x00000000) #define PIO_INSTR_MEM17_MSB _u(15) #define PIO_INSTR_MEM17_LSB _u(0) #define PIO_INSTR_MEM17_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM18 // Description : Write-only access to instruction memory location 18 #define PIO_INSTR_MEM18_OFFSET _u(0x00000090) #define PIO_INSTR_MEM18_BITS _u(0x0000ffff) #define PIO_INSTR_MEM18_RESET _u(0x00000000) #define PIO_INSTR_MEM18_MSB _u(15) #define PIO_INSTR_MEM18_LSB _u(0) #define PIO_INSTR_MEM18_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM19 // Description : Write-only access to instruction memory location 19 #define PIO_INSTR_MEM19_OFFSET _u(0x00000094) #define PIO_INSTR_MEM19_BITS _u(0x0000ffff) #define PIO_INSTR_MEM19_RESET _u(0x00000000) #define PIO_INSTR_MEM19_MSB _u(15) #define PIO_INSTR_MEM19_LSB _u(0) #define PIO_INSTR_MEM19_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM20 // Description : Write-only access to instruction memory location 20 #define PIO_INSTR_MEM20_OFFSET _u(0x00000098) #define PIO_INSTR_MEM20_BITS _u(0x0000ffff) #define PIO_INSTR_MEM20_RESET _u(0x00000000) #define PIO_INSTR_MEM20_MSB _u(15) #define PIO_INSTR_MEM20_LSB _u(0) #define PIO_INSTR_MEM20_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM21 // Description : Write-only access to instruction memory location 21 #define PIO_INSTR_MEM21_OFFSET _u(0x0000009c) #define PIO_INSTR_MEM21_BITS _u(0x0000ffff) #define PIO_INSTR_MEM21_RESET _u(0x00000000) #define PIO_INSTR_MEM21_MSB _u(15) #define PIO_INSTR_MEM21_LSB _u(0) #define PIO_INSTR_MEM21_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM22 // Description : Write-only access to instruction memory location 22 #define PIO_INSTR_MEM22_OFFSET _u(0x000000a0) #define PIO_INSTR_MEM22_BITS _u(0x0000ffff) #define PIO_INSTR_MEM22_RESET _u(0x00000000) #define PIO_INSTR_MEM22_MSB _u(15) #define PIO_INSTR_MEM22_LSB _u(0) #define PIO_INSTR_MEM22_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM23 // Description : Write-only access to instruction memory location 23 #define PIO_INSTR_MEM23_OFFSET _u(0x000000a4) #define PIO_INSTR_MEM23_BITS _u(0x0000ffff) #define PIO_INSTR_MEM23_RESET _u(0x00000000) #define PIO_INSTR_MEM23_MSB _u(15) #define PIO_INSTR_MEM23_LSB _u(0) #define PIO_INSTR_MEM23_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM24 // Description : Write-only access to instruction memory location 24 #define PIO_INSTR_MEM24_OFFSET _u(0x000000a8) #define PIO_INSTR_MEM24_BITS _u(0x0000ffff) #define PIO_INSTR_MEM24_RESET _u(0x00000000) #define PIO_INSTR_MEM24_MSB _u(15) #define PIO_INSTR_MEM24_LSB _u(0) #define PIO_INSTR_MEM24_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM25 // Description : Write-only access to instruction memory location 25 #define PIO_INSTR_MEM25_OFFSET _u(0x000000ac) #define PIO_INSTR_MEM25_BITS _u(0x0000ffff) #define PIO_INSTR_MEM25_RESET _u(0x00000000) #define PIO_INSTR_MEM25_MSB _u(15) #define PIO_INSTR_MEM25_LSB _u(0) #define PIO_INSTR_MEM25_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM26 // Description : Write-only access to instruction memory location 26 #define PIO_INSTR_MEM26_OFFSET _u(0x000000b0) #define PIO_INSTR_MEM26_BITS _u(0x0000ffff) #define PIO_INSTR_MEM26_RESET _u(0x00000000) #define PIO_INSTR_MEM26_MSB _u(15) #define PIO_INSTR_MEM26_LSB _u(0) #define PIO_INSTR_MEM26_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM27 // Description : Write-only access to instruction memory location 27 #define PIO_INSTR_MEM27_OFFSET _u(0x000000b4) #define PIO_INSTR_MEM27_BITS _u(0x0000ffff) #define PIO_INSTR_MEM27_RESET _u(0x00000000) #define PIO_INSTR_MEM27_MSB _u(15) #define PIO_INSTR_MEM27_LSB _u(0) #define PIO_INSTR_MEM27_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM28 // Description : Write-only access to instruction memory location 28 #define PIO_INSTR_MEM28_OFFSET _u(0x000000b8) #define PIO_INSTR_MEM28_BITS _u(0x0000ffff) #define PIO_INSTR_MEM28_RESET _u(0x00000000) #define PIO_INSTR_MEM28_MSB _u(15) #define PIO_INSTR_MEM28_LSB _u(0) #define PIO_INSTR_MEM28_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM29 // Description : Write-only access to instruction memory location 29 #define PIO_INSTR_MEM29_OFFSET _u(0x000000bc) #define PIO_INSTR_MEM29_BITS _u(0x0000ffff) #define PIO_INSTR_MEM29_RESET _u(0x00000000) #define PIO_INSTR_MEM29_MSB _u(15) #define PIO_INSTR_MEM29_LSB _u(0) #define PIO_INSTR_MEM29_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM30 // Description : Write-only access to instruction memory location 30 #define PIO_INSTR_MEM30_OFFSET _u(0x000000c0) #define PIO_INSTR_MEM30_BITS _u(0x0000ffff) #define PIO_INSTR_MEM30_RESET _u(0x00000000) #define PIO_INSTR_MEM30_MSB _u(15) #define PIO_INSTR_MEM30_LSB _u(0) #define PIO_INSTR_MEM30_ACCESS "WO" // ============================================================================= // Register : PIO_INSTR_MEM31 // Description : Write-only access to instruction memory location 31 #define PIO_INSTR_MEM31_OFFSET _u(0x000000c4) #define PIO_INSTR_MEM31_BITS _u(0x0000ffff) #define PIO_INSTR_MEM31_RESET _u(0x00000000) #define PIO_INSTR_MEM31_MSB _u(15) #define PIO_INSTR_MEM31_LSB _u(0) #define PIO_INSTR_MEM31_ACCESS "WO" // ============================================================================= // Register : PIO_SM0_CLKDIV // Description : Clock divisor register for state machine 0 // Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) #define PIO_SM0_CLKDIV_OFFSET _u(0x000000c8) #define PIO_SM0_CLKDIV_BITS _u(0xffffff00) #define PIO_SM0_CLKDIV_RESET _u(0x00010000) // ----------------------------------------------------------------------------- // Field : PIO_SM0_CLKDIV_INT // Description : Effective frequency is sysclk/(int + frac/256). // Value of 0 is interpreted as 65536. If INT is 0, FRAC must also // be 0. #define PIO_SM0_CLKDIV_INT_RESET _u(0x0001) #define PIO_SM0_CLKDIV_INT_BITS _u(0xffff0000) #define PIO_SM0_CLKDIV_INT_MSB _u(31) #define PIO_SM0_CLKDIV_INT_LSB _u(16) #define PIO_SM0_CLKDIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_CLKDIV_FRAC // Description : Fractional part of clock divisor #define PIO_SM0_CLKDIV_FRAC_RESET _u(0x00) #define PIO_SM0_CLKDIV_FRAC_BITS _u(0x0000ff00) #define PIO_SM0_CLKDIV_FRAC_MSB _u(15) #define PIO_SM0_CLKDIV_FRAC_LSB _u(8) #define PIO_SM0_CLKDIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PIO_SM0_EXECCTRL // Description : Execution/behavioural settings for state machine 0 #define PIO_SM0_EXECCTRL_OFFSET _u(0x000000cc) #define PIO_SM0_EXECCTRL_BITS _u(0xffffff9f) #define PIO_SM0_EXECCTRL_RESET _u(0x0001f000) // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_EXEC_STALLED // Description : If 1, an instruction written to SMx_INSTR is stalled, and // latched by the state machine. Will clear to 0 once this // instruction completes. #define PIO_SM0_EXECCTRL_EXEC_STALLED_RESET _u(0x0) #define PIO_SM0_EXECCTRL_EXEC_STALLED_BITS _u(0x80000000) #define PIO_SM0_EXECCTRL_EXEC_STALLED_MSB _u(31) #define PIO_SM0_EXECCTRL_EXEC_STALLED_LSB _u(31) #define PIO_SM0_EXECCTRL_EXEC_STALLED_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_SIDE_EN // Description : If 1, the MSB of the Delay/Side-set instruction field is used // as side-set enable, rather than a side-set data bit. This // allows instructions to perform side-set optionally, rather than // on every instruction, but the maximum possible side-set width // is reduced from 5 to 4. Note that the value of // PINCTRL_SIDESET_COUNT is inclusive of this enable bit. #define PIO_SM0_EXECCTRL_SIDE_EN_RESET _u(0x0) #define PIO_SM0_EXECCTRL_SIDE_EN_BITS _u(0x40000000) #define PIO_SM0_EXECCTRL_SIDE_EN_MSB _u(30) #define PIO_SM0_EXECCTRL_SIDE_EN_LSB _u(30) #define PIO_SM0_EXECCTRL_SIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_SIDE_PINDIR // Description : If 1, side-set data is asserted to pin directions, instead of // pin values #define PIO_SM0_EXECCTRL_SIDE_PINDIR_RESET _u(0x0) #define PIO_SM0_EXECCTRL_SIDE_PINDIR_BITS _u(0x20000000) #define PIO_SM0_EXECCTRL_SIDE_PINDIR_MSB _u(29) #define PIO_SM0_EXECCTRL_SIDE_PINDIR_LSB _u(29) #define PIO_SM0_EXECCTRL_SIDE_PINDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_JMP_PIN // Description : The GPIO number to use as condition for JMP PIN. Unaffected by // input mapping. #define PIO_SM0_EXECCTRL_JMP_PIN_RESET _u(0x00) #define PIO_SM0_EXECCTRL_JMP_PIN_BITS _u(0x1f000000) #define PIO_SM0_EXECCTRL_JMP_PIN_MSB _u(28) #define PIO_SM0_EXECCTRL_JMP_PIN_LSB _u(24) #define PIO_SM0_EXECCTRL_JMP_PIN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_OUT_EN_SEL // Description : Which data bit to use for inline OUT enable #define PIO_SM0_EXECCTRL_OUT_EN_SEL_RESET _u(0x00) #define PIO_SM0_EXECCTRL_OUT_EN_SEL_BITS _u(0x00f80000) #define PIO_SM0_EXECCTRL_OUT_EN_SEL_MSB _u(23) #define PIO_SM0_EXECCTRL_OUT_EN_SEL_LSB _u(19) #define PIO_SM0_EXECCTRL_OUT_EN_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_INLINE_OUT_EN // Description : If 1, use a bit of OUT data as an auxiliary write enable // When used in conjunction with OUT_STICKY, writes with an enable // of 0 will // deassert the latest pin write. This can create useful // masking/override behaviour // due to the priority ordering of state machine pin writes (SM0 < // SM1 < ...) #define PIO_SM0_EXECCTRL_INLINE_OUT_EN_RESET _u(0x0) #define PIO_SM0_EXECCTRL_INLINE_OUT_EN_BITS _u(0x00040000) #define PIO_SM0_EXECCTRL_INLINE_OUT_EN_MSB _u(18) #define PIO_SM0_EXECCTRL_INLINE_OUT_EN_LSB _u(18) #define PIO_SM0_EXECCTRL_INLINE_OUT_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_OUT_STICKY // Description : Continuously assert the most recent OUT/SET to the pins #define PIO_SM0_EXECCTRL_OUT_STICKY_RESET _u(0x0) #define PIO_SM0_EXECCTRL_OUT_STICKY_BITS _u(0x00020000) #define PIO_SM0_EXECCTRL_OUT_STICKY_MSB _u(17) #define PIO_SM0_EXECCTRL_OUT_STICKY_LSB _u(17) #define PIO_SM0_EXECCTRL_OUT_STICKY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_WRAP_TOP // Description : After reaching this address, execution is wrapped to // wrap_bottom. // If the instruction is a jump, and the jump condition is true, // the jump takes priority. #define PIO_SM0_EXECCTRL_WRAP_TOP_RESET _u(0x1f) #define PIO_SM0_EXECCTRL_WRAP_TOP_BITS _u(0x0001f000) #define PIO_SM0_EXECCTRL_WRAP_TOP_MSB _u(16) #define PIO_SM0_EXECCTRL_WRAP_TOP_LSB _u(12) #define PIO_SM0_EXECCTRL_WRAP_TOP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_WRAP_BOTTOM // Description : After reaching wrap_top, execution is wrapped to this address. #define PIO_SM0_EXECCTRL_WRAP_BOTTOM_RESET _u(0x00) #define PIO_SM0_EXECCTRL_WRAP_BOTTOM_BITS _u(0x00000f80) #define PIO_SM0_EXECCTRL_WRAP_BOTTOM_MSB _u(11) #define PIO_SM0_EXECCTRL_WRAP_BOTTOM_LSB _u(7) #define PIO_SM0_EXECCTRL_WRAP_BOTTOM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_STATUS_SEL // Description : Comparison used for the MOV x, STATUS instruction. // 0x0 -> All-ones if TX FIFO level < N, otherwise all-zeroes // 0x1 -> All-ones if RX FIFO level < N, otherwise all-zeroes #define PIO_SM0_EXECCTRL_STATUS_SEL_RESET _u(0x0) #define PIO_SM0_EXECCTRL_STATUS_SEL_BITS _u(0x00000010) #define PIO_SM0_EXECCTRL_STATUS_SEL_MSB _u(4) #define PIO_SM0_EXECCTRL_STATUS_SEL_LSB _u(4) #define PIO_SM0_EXECCTRL_STATUS_SEL_ACCESS "RW" #define PIO_SM0_EXECCTRL_STATUS_SEL_VALUE_TXLEVEL _u(0x0) #define PIO_SM0_EXECCTRL_STATUS_SEL_VALUE_RXLEVEL _u(0x1) // ----------------------------------------------------------------------------- // Field : PIO_SM0_EXECCTRL_STATUS_N // Description : Comparison level for the MOV x, STATUS instruction #define PIO_SM0_EXECCTRL_STATUS_N_RESET _u(0x0) #define PIO_SM0_EXECCTRL_STATUS_N_BITS _u(0x0000000f) #define PIO_SM0_EXECCTRL_STATUS_N_MSB _u(3) #define PIO_SM0_EXECCTRL_STATUS_N_LSB _u(0) #define PIO_SM0_EXECCTRL_STATUS_N_ACCESS "RW" // ============================================================================= // Register : PIO_SM0_SHIFTCTRL // Description : Control behaviour of the input/output shift registers for state // machine 0 #define PIO_SM0_SHIFTCTRL_OFFSET _u(0x000000d0) #define PIO_SM0_SHIFTCTRL_BITS _u(0xffff0000) #define PIO_SM0_SHIFTCTRL_RESET _u(0x000c0000) // ----------------------------------------------------------------------------- // Field : PIO_SM0_SHIFTCTRL_FJOIN_RX // Description : When 1, RX FIFO steals the TX FIFO's storage, and becomes twice // as deep. // TX FIFO is disabled as a result (always reads as both full and // empty). // FIFOs are flushed when this bit is changed. #define PIO_SM0_SHIFTCTRL_FJOIN_RX_RESET _u(0x0) #define PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS _u(0x80000000) #define PIO_SM0_SHIFTCTRL_FJOIN_RX_MSB _u(31) #define PIO_SM0_SHIFTCTRL_FJOIN_RX_LSB _u(31) #define PIO_SM0_SHIFTCTRL_FJOIN_RX_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_SHIFTCTRL_FJOIN_TX // Description : When 1, TX FIFO steals the RX FIFO's storage, and becomes twice // as deep. // RX FIFO is disabled as a result (always reads as both full and // empty). // FIFOs are flushed when this bit is changed. #define PIO_SM0_SHIFTCTRL_FJOIN_TX_RESET _u(0x0) #define PIO_SM0_SHIFTCTRL_FJOIN_TX_BITS _u(0x40000000) #define PIO_SM0_SHIFTCTRL_FJOIN_TX_MSB _u(30) #define PIO_SM0_SHIFTCTRL_FJOIN_TX_LSB _u(30) #define PIO_SM0_SHIFTCTRL_FJOIN_TX_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_SHIFTCTRL_PULL_THRESH // Description : Number of bits shifted out of OSR before autopull, or // conditional pull (PULL IFEMPTY), will take place. // Write 0 for value of 32. #define PIO_SM0_SHIFTCTRL_PULL_THRESH_RESET _u(0x00) #define PIO_SM0_SHIFTCTRL_PULL_THRESH_BITS _u(0x3e000000) #define PIO_SM0_SHIFTCTRL_PULL_THRESH_MSB _u(29) #define PIO_SM0_SHIFTCTRL_PULL_THRESH_LSB _u(25) #define PIO_SM0_SHIFTCTRL_PULL_THRESH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_SHIFTCTRL_PUSH_THRESH // Description : Number of bits shifted into ISR before autopush, or conditional // push (PUSH IFFULL), will take place. // Write 0 for value of 32. #define PIO_SM0_SHIFTCTRL_PUSH_THRESH_RESET _u(0x00) #define PIO_SM0_SHIFTCTRL_PUSH_THRESH_BITS _u(0x01f00000) #define PIO_SM0_SHIFTCTRL_PUSH_THRESH_MSB _u(24) #define PIO_SM0_SHIFTCTRL_PUSH_THRESH_LSB _u(20) #define PIO_SM0_SHIFTCTRL_PUSH_THRESH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR // Description : 1 = shift out of output shift register to right. 0 = to left. #define PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_RESET _u(0x1) #define PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_BITS _u(0x00080000) #define PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_MSB _u(19) #define PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_LSB _u(19) #define PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_SHIFTCTRL_IN_SHIFTDIR // Description : 1 = shift input shift register to right (data enters from // left). 0 = to left. #define PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_RESET _u(0x1) #define PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_BITS _u(0x00040000) #define PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_MSB _u(18) #define PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_LSB _u(18) #define PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_SHIFTCTRL_AUTOPULL // Description : Pull automatically when the output shift register is emptied, // i.e. on or following an OUT instruction which causes the output // shift counter to reach or exceed PULL_THRESH. #define PIO_SM0_SHIFTCTRL_AUTOPULL_RESET _u(0x0) #define PIO_SM0_SHIFTCTRL_AUTOPULL_BITS _u(0x00020000) #define PIO_SM0_SHIFTCTRL_AUTOPULL_MSB _u(17) #define PIO_SM0_SHIFTCTRL_AUTOPULL_LSB _u(17) #define PIO_SM0_SHIFTCTRL_AUTOPULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_SHIFTCTRL_AUTOPUSH // Description : Push automatically when the input shift register is filled, // i.e. on an IN instruction which causes the input shift counter // to reach or exceed PUSH_THRESH. #define PIO_SM0_SHIFTCTRL_AUTOPUSH_RESET _u(0x0) #define PIO_SM0_SHIFTCTRL_AUTOPUSH_BITS _u(0x00010000) #define PIO_SM0_SHIFTCTRL_AUTOPUSH_MSB _u(16) #define PIO_SM0_SHIFTCTRL_AUTOPUSH_LSB _u(16) #define PIO_SM0_SHIFTCTRL_AUTOPUSH_ACCESS "RW" // ============================================================================= // Register : PIO_SM0_ADDR // Description : Current instruction address of state machine 0 #define PIO_SM0_ADDR_OFFSET _u(0x000000d4) #define PIO_SM0_ADDR_BITS _u(0x0000001f) #define PIO_SM0_ADDR_RESET _u(0x00000000) #define PIO_SM0_ADDR_MSB _u(4) #define PIO_SM0_ADDR_LSB _u(0) #define PIO_SM0_ADDR_ACCESS "RO" // ============================================================================= // Register : PIO_SM0_INSTR // Description : Read to see the instruction currently addressed by state // machine 0's program counter // Write to execute an instruction immediately (including jumps) // and then resume execution. #define PIO_SM0_INSTR_OFFSET _u(0x000000d8) #define PIO_SM0_INSTR_BITS _u(0x0000ffff) #define PIO_SM0_INSTR_RESET "-" #define PIO_SM0_INSTR_MSB _u(15) #define PIO_SM0_INSTR_LSB _u(0) #define PIO_SM0_INSTR_ACCESS "RW" // ============================================================================= // Register : PIO_SM0_PINCTRL // Description : State machine pin control #define PIO_SM0_PINCTRL_OFFSET _u(0x000000dc) #define PIO_SM0_PINCTRL_BITS _u(0xffffffff) #define PIO_SM0_PINCTRL_RESET _u(0x14000000) // ----------------------------------------------------------------------------- // Field : PIO_SM0_PINCTRL_SIDESET_COUNT // Description : The number of MSBs of the Delay/Side-set instruction field // which are used for side-set. Inclusive of the enable bit, if // present. Minimum of 0 (all delay bits, no side-set) and maximum // of 5 (all side-set, no delay). #define PIO_SM0_PINCTRL_SIDESET_COUNT_RESET _u(0x0) #define PIO_SM0_PINCTRL_SIDESET_COUNT_BITS _u(0xe0000000) #define PIO_SM0_PINCTRL_SIDESET_COUNT_MSB _u(31) #define PIO_SM0_PINCTRL_SIDESET_COUNT_LSB _u(29) #define PIO_SM0_PINCTRL_SIDESET_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_PINCTRL_SET_COUNT // Description : The number of pins asserted by a SET. In the range 0 to 5 // inclusive. #define PIO_SM0_PINCTRL_SET_COUNT_RESET _u(0x5) #define PIO_SM0_PINCTRL_SET_COUNT_BITS _u(0x1c000000) #define PIO_SM0_PINCTRL_SET_COUNT_MSB _u(28) #define PIO_SM0_PINCTRL_SET_COUNT_LSB _u(26) #define PIO_SM0_PINCTRL_SET_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_PINCTRL_OUT_COUNT // Description : The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV // PINS instruction. In the range 0 to 32 inclusive. #define PIO_SM0_PINCTRL_OUT_COUNT_RESET _u(0x00) #define PIO_SM0_PINCTRL_OUT_COUNT_BITS _u(0x03f00000) #define PIO_SM0_PINCTRL_OUT_COUNT_MSB _u(25) #define PIO_SM0_PINCTRL_OUT_COUNT_LSB _u(20) #define PIO_SM0_PINCTRL_OUT_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_PINCTRL_IN_BASE // Description : The pin which is mapped to the least-significant bit of a state // machine's IN data bus. Higher-numbered pins are mapped to // consecutively more-significant data bits, with a modulo of 32 // applied to pin number. #define PIO_SM0_PINCTRL_IN_BASE_RESET _u(0x00) #define PIO_SM0_PINCTRL_IN_BASE_BITS _u(0x000f8000) #define PIO_SM0_PINCTRL_IN_BASE_MSB _u(19) #define PIO_SM0_PINCTRL_IN_BASE_LSB _u(15) #define PIO_SM0_PINCTRL_IN_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_PINCTRL_SIDESET_BASE // Description : The lowest-numbered pin that will be affected by a side-set // operation. The MSBs of an instruction's side-set/delay field // (up to 5, determined by SIDESET_COUNT) are used for side-set // data, with the remaining LSBs used for delay. The // least-significant bit of the side-set portion is the bit // written to this pin, with more-significant bits written to // higher-numbered pins. #define PIO_SM0_PINCTRL_SIDESET_BASE_RESET _u(0x00) #define PIO_SM0_PINCTRL_SIDESET_BASE_BITS _u(0x00007c00) #define PIO_SM0_PINCTRL_SIDESET_BASE_MSB _u(14) #define PIO_SM0_PINCTRL_SIDESET_BASE_LSB _u(10) #define PIO_SM0_PINCTRL_SIDESET_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_PINCTRL_SET_BASE // Description : The lowest-numbered pin that will be affected by a SET PINS or // SET PINDIRS instruction. The data written to this pin is the // least-significant bit of the SET data. #define PIO_SM0_PINCTRL_SET_BASE_RESET _u(0x00) #define PIO_SM0_PINCTRL_SET_BASE_BITS _u(0x000003e0) #define PIO_SM0_PINCTRL_SET_BASE_MSB _u(9) #define PIO_SM0_PINCTRL_SET_BASE_LSB _u(5) #define PIO_SM0_PINCTRL_SET_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM0_PINCTRL_OUT_BASE // Description : The lowest-numbered pin that will be affected by an OUT PINS, // OUT PINDIRS or MOV PINS instruction. The data written to this // pin will always be the least-significant bit of the OUT or MOV // data. #define PIO_SM0_PINCTRL_OUT_BASE_RESET _u(0x00) #define PIO_SM0_PINCTRL_OUT_BASE_BITS _u(0x0000001f) #define PIO_SM0_PINCTRL_OUT_BASE_MSB _u(4) #define PIO_SM0_PINCTRL_OUT_BASE_LSB _u(0) #define PIO_SM0_PINCTRL_OUT_BASE_ACCESS "RW" // ============================================================================= // Register : PIO_SM1_CLKDIV // Description : Clock divisor register for state machine 1 // Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) #define PIO_SM1_CLKDIV_OFFSET _u(0x000000e0) #define PIO_SM1_CLKDIV_BITS _u(0xffffff00) #define PIO_SM1_CLKDIV_RESET _u(0x00010000) // ----------------------------------------------------------------------------- // Field : PIO_SM1_CLKDIV_INT // Description : Effective frequency is sysclk/(int + frac/256). // Value of 0 is interpreted as 65536. If INT is 0, FRAC must also // be 0. #define PIO_SM1_CLKDIV_INT_RESET _u(0x0001) #define PIO_SM1_CLKDIV_INT_BITS _u(0xffff0000) #define PIO_SM1_CLKDIV_INT_MSB _u(31) #define PIO_SM1_CLKDIV_INT_LSB _u(16) #define PIO_SM1_CLKDIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_CLKDIV_FRAC // Description : Fractional part of clock divisor #define PIO_SM1_CLKDIV_FRAC_RESET _u(0x00) #define PIO_SM1_CLKDIV_FRAC_BITS _u(0x0000ff00) #define PIO_SM1_CLKDIV_FRAC_MSB _u(15) #define PIO_SM1_CLKDIV_FRAC_LSB _u(8) #define PIO_SM1_CLKDIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PIO_SM1_EXECCTRL // Description : Execution/behavioural settings for state machine 1 #define PIO_SM1_EXECCTRL_OFFSET _u(0x000000e4) #define PIO_SM1_EXECCTRL_BITS _u(0xffffff9f) #define PIO_SM1_EXECCTRL_RESET _u(0x0001f000) // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_EXEC_STALLED // Description : If 1, an instruction written to SMx_INSTR is stalled, and // latched by the state machine. Will clear to 0 once this // instruction completes. #define PIO_SM1_EXECCTRL_EXEC_STALLED_RESET _u(0x0) #define PIO_SM1_EXECCTRL_EXEC_STALLED_BITS _u(0x80000000) #define PIO_SM1_EXECCTRL_EXEC_STALLED_MSB _u(31) #define PIO_SM1_EXECCTRL_EXEC_STALLED_LSB _u(31) #define PIO_SM1_EXECCTRL_EXEC_STALLED_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_SIDE_EN // Description : If 1, the MSB of the Delay/Side-set instruction field is used // as side-set enable, rather than a side-set data bit. This // allows instructions to perform side-set optionally, rather than // on every instruction, but the maximum possible side-set width // is reduced from 5 to 4. Note that the value of // PINCTRL_SIDESET_COUNT is inclusive of this enable bit. #define PIO_SM1_EXECCTRL_SIDE_EN_RESET _u(0x0) #define PIO_SM1_EXECCTRL_SIDE_EN_BITS _u(0x40000000) #define PIO_SM1_EXECCTRL_SIDE_EN_MSB _u(30) #define PIO_SM1_EXECCTRL_SIDE_EN_LSB _u(30) #define PIO_SM1_EXECCTRL_SIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_SIDE_PINDIR // Description : If 1, side-set data is asserted to pin directions, instead of // pin values #define PIO_SM1_EXECCTRL_SIDE_PINDIR_RESET _u(0x0) #define PIO_SM1_EXECCTRL_SIDE_PINDIR_BITS _u(0x20000000) #define PIO_SM1_EXECCTRL_SIDE_PINDIR_MSB _u(29) #define PIO_SM1_EXECCTRL_SIDE_PINDIR_LSB _u(29) #define PIO_SM1_EXECCTRL_SIDE_PINDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_JMP_PIN // Description : The GPIO number to use as condition for JMP PIN. Unaffected by // input mapping. #define PIO_SM1_EXECCTRL_JMP_PIN_RESET _u(0x00) #define PIO_SM1_EXECCTRL_JMP_PIN_BITS _u(0x1f000000) #define PIO_SM1_EXECCTRL_JMP_PIN_MSB _u(28) #define PIO_SM1_EXECCTRL_JMP_PIN_LSB _u(24) #define PIO_SM1_EXECCTRL_JMP_PIN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_OUT_EN_SEL // Description : Which data bit to use for inline OUT enable #define PIO_SM1_EXECCTRL_OUT_EN_SEL_RESET _u(0x00) #define PIO_SM1_EXECCTRL_OUT_EN_SEL_BITS _u(0x00f80000) #define PIO_SM1_EXECCTRL_OUT_EN_SEL_MSB _u(23) #define PIO_SM1_EXECCTRL_OUT_EN_SEL_LSB _u(19) #define PIO_SM1_EXECCTRL_OUT_EN_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_INLINE_OUT_EN // Description : If 1, use a bit of OUT data as an auxiliary write enable // When used in conjunction with OUT_STICKY, writes with an enable // of 0 will // deassert the latest pin write. This can create useful // masking/override behaviour // due to the priority ordering of state machine pin writes (SM0 < // SM1 < ...) #define PIO_SM1_EXECCTRL_INLINE_OUT_EN_RESET _u(0x0) #define PIO_SM1_EXECCTRL_INLINE_OUT_EN_BITS _u(0x00040000) #define PIO_SM1_EXECCTRL_INLINE_OUT_EN_MSB _u(18) #define PIO_SM1_EXECCTRL_INLINE_OUT_EN_LSB _u(18) #define PIO_SM1_EXECCTRL_INLINE_OUT_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_OUT_STICKY // Description : Continuously assert the most recent OUT/SET to the pins #define PIO_SM1_EXECCTRL_OUT_STICKY_RESET _u(0x0) #define PIO_SM1_EXECCTRL_OUT_STICKY_BITS _u(0x00020000) #define PIO_SM1_EXECCTRL_OUT_STICKY_MSB _u(17) #define PIO_SM1_EXECCTRL_OUT_STICKY_LSB _u(17) #define PIO_SM1_EXECCTRL_OUT_STICKY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_WRAP_TOP // Description : After reaching this address, execution is wrapped to // wrap_bottom. // If the instruction is a jump, and the jump condition is true, // the jump takes priority. #define PIO_SM1_EXECCTRL_WRAP_TOP_RESET _u(0x1f) #define PIO_SM1_EXECCTRL_WRAP_TOP_BITS _u(0x0001f000) #define PIO_SM1_EXECCTRL_WRAP_TOP_MSB _u(16) #define PIO_SM1_EXECCTRL_WRAP_TOP_LSB _u(12) #define PIO_SM1_EXECCTRL_WRAP_TOP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_WRAP_BOTTOM // Description : After reaching wrap_top, execution is wrapped to this address. #define PIO_SM1_EXECCTRL_WRAP_BOTTOM_RESET _u(0x00) #define PIO_SM1_EXECCTRL_WRAP_BOTTOM_BITS _u(0x00000f80) #define PIO_SM1_EXECCTRL_WRAP_BOTTOM_MSB _u(11) #define PIO_SM1_EXECCTRL_WRAP_BOTTOM_LSB _u(7) #define PIO_SM1_EXECCTRL_WRAP_BOTTOM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_STATUS_SEL // Description : Comparison used for the MOV x, STATUS instruction. // 0x0 -> All-ones if TX FIFO level < N, otherwise all-zeroes // 0x1 -> All-ones if RX FIFO level < N, otherwise all-zeroes #define PIO_SM1_EXECCTRL_STATUS_SEL_RESET _u(0x0) #define PIO_SM1_EXECCTRL_STATUS_SEL_BITS _u(0x00000010) #define PIO_SM1_EXECCTRL_STATUS_SEL_MSB _u(4) #define PIO_SM1_EXECCTRL_STATUS_SEL_LSB _u(4) #define PIO_SM1_EXECCTRL_STATUS_SEL_ACCESS "RW" #define PIO_SM1_EXECCTRL_STATUS_SEL_VALUE_TXLEVEL _u(0x0) #define PIO_SM1_EXECCTRL_STATUS_SEL_VALUE_RXLEVEL _u(0x1) // ----------------------------------------------------------------------------- // Field : PIO_SM1_EXECCTRL_STATUS_N // Description : Comparison level for the MOV x, STATUS instruction #define PIO_SM1_EXECCTRL_STATUS_N_RESET _u(0x0) #define PIO_SM1_EXECCTRL_STATUS_N_BITS _u(0x0000000f) #define PIO_SM1_EXECCTRL_STATUS_N_MSB _u(3) #define PIO_SM1_EXECCTRL_STATUS_N_LSB _u(0) #define PIO_SM1_EXECCTRL_STATUS_N_ACCESS "RW" // ============================================================================= // Register : PIO_SM1_SHIFTCTRL // Description : Control behaviour of the input/output shift registers for state // machine 1 #define PIO_SM1_SHIFTCTRL_OFFSET _u(0x000000e8) #define PIO_SM1_SHIFTCTRL_BITS _u(0xffff0000) #define PIO_SM1_SHIFTCTRL_RESET _u(0x000c0000) // ----------------------------------------------------------------------------- // Field : PIO_SM1_SHIFTCTRL_FJOIN_RX // Description : When 1, RX FIFO steals the TX FIFO's storage, and becomes twice // as deep. // TX FIFO is disabled as a result (always reads as both full and // empty). // FIFOs are flushed when this bit is changed. #define PIO_SM1_SHIFTCTRL_FJOIN_RX_RESET _u(0x0) #define PIO_SM1_SHIFTCTRL_FJOIN_RX_BITS _u(0x80000000) #define PIO_SM1_SHIFTCTRL_FJOIN_RX_MSB _u(31) #define PIO_SM1_SHIFTCTRL_FJOIN_RX_LSB _u(31) #define PIO_SM1_SHIFTCTRL_FJOIN_RX_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_SHIFTCTRL_FJOIN_TX // Description : When 1, TX FIFO steals the RX FIFO's storage, and becomes twice // as deep. // RX FIFO is disabled as a result (always reads as both full and // empty). // FIFOs are flushed when this bit is changed. #define PIO_SM1_SHIFTCTRL_FJOIN_TX_RESET _u(0x0) #define PIO_SM1_SHIFTCTRL_FJOIN_TX_BITS _u(0x40000000) #define PIO_SM1_SHIFTCTRL_FJOIN_TX_MSB _u(30) #define PIO_SM1_SHIFTCTRL_FJOIN_TX_LSB _u(30) #define PIO_SM1_SHIFTCTRL_FJOIN_TX_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_SHIFTCTRL_PULL_THRESH // Description : Number of bits shifted out of OSR before autopull, or // conditional pull (PULL IFEMPTY), will take place. // Write 0 for value of 32. #define PIO_SM1_SHIFTCTRL_PULL_THRESH_RESET _u(0x00) #define PIO_SM1_SHIFTCTRL_PULL_THRESH_BITS _u(0x3e000000) #define PIO_SM1_SHIFTCTRL_PULL_THRESH_MSB _u(29) #define PIO_SM1_SHIFTCTRL_PULL_THRESH_LSB _u(25) #define PIO_SM1_SHIFTCTRL_PULL_THRESH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_SHIFTCTRL_PUSH_THRESH // Description : Number of bits shifted into ISR before autopush, or conditional // push (PUSH IFFULL), will take place. // Write 0 for value of 32. #define PIO_SM1_SHIFTCTRL_PUSH_THRESH_RESET _u(0x00) #define PIO_SM1_SHIFTCTRL_PUSH_THRESH_BITS _u(0x01f00000) #define PIO_SM1_SHIFTCTRL_PUSH_THRESH_MSB _u(24) #define PIO_SM1_SHIFTCTRL_PUSH_THRESH_LSB _u(20) #define PIO_SM1_SHIFTCTRL_PUSH_THRESH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_SHIFTCTRL_OUT_SHIFTDIR // Description : 1 = shift out of output shift register to right. 0 = to left. #define PIO_SM1_SHIFTCTRL_OUT_SHIFTDIR_RESET _u(0x1) #define PIO_SM1_SHIFTCTRL_OUT_SHIFTDIR_BITS _u(0x00080000) #define PIO_SM1_SHIFTCTRL_OUT_SHIFTDIR_MSB _u(19) #define PIO_SM1_SHIFTCTRL_OUT_SHIFTDIR_LSB _u(19) #define PIO_SM1_SHIFTCTRL_OUT_SHIFTDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_SHIFTCTRL_IN_SHIFTDIR // Description : 1 = shift input shift register to right (data enters from // left). 0 = to left. #define PIO_SM1_SHIFTCTRL_IN_SHIFTDIR_RESET _u(0x1) #define PIO_SM1_SHIFTCTRL_IN_SHIFTDIR_BITS _u(0x00040000) #define PIO_SM1_SHIFTCTRL_IN_SHIFTDIR_MSB _u(18) #define PIO_SM1_SHIFTCTRL_IN_SHIFTDIR_LSB _u(18) #define PIO_SM1_SHIFTCTRL_IN_SHIFTDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_SHIFTCTRL_AUTOPULL // Description : Pull automatically when the output shift register is emptied, // i.e. on or following an OUT instruction which causes the output // shift counter to reach or exceed PULL_THRESH. #define PIO_SM1_SHIFTCTRL_AUTOPULL_RESET _u(0x0) #define PIO_SM1_SHIFTCTRL_AUTOPULL_BITS _u(0x00020000) #define PIO_SM1_SHIFTCTRL_AUTOPULL_MSB _u(17) #define PIO_SM1_SHIFTCTRL_AUTOPULL_LSB _u(17) #define PIO_SM1_SHIFTCTRL_AUTOPULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_SHIFTCTRL_AUTOPUSH // Description : Push automatically when the input shift register is filled, // i.e. on an IN instruction which causes the input shift counter // to reach or exceed PUSH_THRESH. #define PIO_SM1_SHIFTCTRL_AUTOPUSH_RESET _u(0x0) #define PIO_SM1_SHIFTCTRL_AUTOPUSH_BITS _u(0x00010000) #define PIO_SM1_SHIFTCTRL_AUTOPUSH_MSB _u(16) #define PIO_SM1_SHIFTCTRL_AUTOPUSH_LSB _u(16) #define PIO_SM1_SHIFTCTRL_AUTOPUSH_ACCESS "RW" // ============================================================================= // Register : PIO_SM1_ADDR // Description : Current instruction address of state machine 1 #define PIO_SM1_ADDR_OFFSET _u(0x000000ec) #define PIO_SM1_ADDR_BITS _u(0x0000001f) #define PIO_SM1_ADDR_RESET _u(0x00000000) #define PIO_SM1_ADDR_MSB _u(4) #define PIO_SM1_ADDR_LSB _u(0) #define PIO_SM1_ADDR_ACCESS "RO" // ============================================================================= // Register : PIO_SM1_INSTR // Description : Read to see the instruction currently addressed by state // machine 1's program counter // Write to execute an instruction immediately (including jumps) // and then resume execution. #define PIO_SM1_INSTR_OFFSET _u(0x000000f0) #define PIO_SM1_INSTR_BITS _u(0x0000ffff) #define PIO_SM1_INSTR_RESET "-" #define PIO_SM1_INSTR_MSB _u(15) #define PIO_SM1_INSTR_LSB _u(0) #define PIO_SM1_INSTR_ACCESS "RW" // ============================================================================= // Register : PIO_SM1_PINCTRL // Description : State machine pin control #define PIO_SM1_PINCTRL_OFFSET _u(0x000000f4) #define PIO_SM1_PINCTRL_BITS _u(0xffffffff) #define PIO_SM1_PINCTRL_RESET _u(0x14000000) // ----------------------------------------------------------------------------- // Field : PIO_SM1_PINCTRL_SIDESET_COUNT // Description : The number of MSBs of the Delay/Side-set instruction field // which are used for side-set. Inclusive of the enable bit, if // present. Minimum of 0 (all delay bits, no side-set) and maximum // of 5 (all side-set, no delay). #define PIO_SM1_PINCTRL_SIDESET_COUNT_RESET _u(0x0) #define PIO_SM1_PINCTRL_SIDESET_COUNT_BITS _u(0xe0000000) #define PIO_SM1_PINCTRL_SIDESET_COUNT_MSB _u(31) #define PIO_SM1_PINCTRL_SIDESET_COUNT_LSB _u(29) #define PIO_SM1_PINCTRL_SIDESET_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_PINCTRL_SET_COUNT // Description : The number of pins asserted by a SET. In the range 0 to 5 // inclusive. #define PIO_SM1_PINCTRL_SET_COUNT_RESET _u(0x5) #define PIO_SM1_PINCTRL_SET_COUNT_BITS _u(0x1c000000) #define PIO_SM1_PINCTRL_SET_COUNT_MSB _u(28) #define PIO_SM1_PINCTRL_SET_COUNT_LSB _u(26) #define PIO_SM1_PINCTRL_SET_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_PINCTRL_OUT_COUNT // Description : The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV // PINS instruction. In the range 0 to 32 inclusive. #define PIO_SM1_PINCTRL_OUT_COUNT_RESET _u(0x00) #define PIO_SM1_PINCTRL_OUT_COUNT_BITS _u(0x03f00000) #define PIO_SM1_PINCTRL_OUT_COUNT_MSB _u(25) #define PIO_SM1_PINCTRL_OUT_COUNT_LSB _u(20) #define PIO_SM1_PINCTRL_OUT_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_PINCTRL_IN_BASE // Description : The pin which is mapped to the least-significant bit of a state // machine's IN data bus. Higher-numbered pins are mapped to // consecutively more-significant data bits, with a modulo of 32 // applied to pin number. #define PIO_SM1_PINCTRL_IN_BASE_RESET _u(0x00) #define PIO_SM1_PINCTRL_IN_BASE_BITS _u(0x000f8000) #define PIO_SM1_PINCTRL_IN_BASE_MSB _u(19) #define PIO_SM1_PINCTRL_IN_BASE_LSB _u(15) #define PIO_SM1_PINCTRL_IN_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_PINCTRL_SIDESET_BASE // Description : The lowest-numbered pin that will be affected by a side-set // operation. The MSBs of an instruction's side-set/delay field // (up to 5, determined by SIDESET_COUNT) are used for side-set // data, with the remaining LSBs used for delay. The // least-significant bit of the side-set portion is the bit // written to this pin, with more-significant bits written to // higher-numbered pins. #define PIO_SM1_PINCTRL_SIDESET_BASE_RESET _u(0x00) #define PIO_SM1_PINCTRL_SIDESET_BASE_BITS _u(0x00007c00) #define PIO_SM1_PINCTRL_SIDESET_BASE_MSB _u(14) #define PIO_SM1_PINCTRL_SIDESET_BASE_LSB _u(10) #define PIO_SM1_PINCTRL_SIDESET_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_PINCTRL_SET_BASE // Description : The lowest-numbered pin that will be affected by a SET PINS or // SET PINDIRS instruction. The data written to this pin is the // least-significant bit of the SET data. #define PIO_SM1_PINCTRL_SET_BASE_RESET _u(0x00) #define PIO_SM1_PINCTRL_SET_BASE_BITS _u(0x000003e0) #define PIO_SM1_PINCTRL_SET_BASE_MSB _u(9) #define PIO_SM1_PINCTRL_SET_BASE_LSB _u(5) #define PIO_SM1_PINCTRL_SET_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM1_PINCTRL_OUT_BASE // Description : The lowest-numbered pin that will be affected by an OUT PINS, // OUT PINDIRS or MOV PINS instruction. The data written to this // pin will always be the least-significant bit of the OUT or MOV // data. #define PIO_SM1_PINCTRL_OUT_BASE_RESET _u(0x00) #define PIO_SM1_PINCTRL_OUT_BASE_BITS _u(0x0000001f) #define PIO_SM1_PINCTRL_OUT_BASE_MSB _u(4) #define PIO_SM1_PINCTRL_OUT_BASE_LSB _u(0) #define PIO_SM1_PINCTRL_OUT_BASE_ACCESS "RW" // ============================================================================= // Register : PIO_SM2_CLKDIV // Description : Clock divisor register for state machine 2 // Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) #define PIO_SM2_CLKDIV_OFFSET _u(0x000000f8) #define PIO_SM2_CLKDIV_BITS _u(0xffffff00) #define PIO_SM2_CLKDIV_RESET _u(0x00010000) // ----------------------------------------------------------------------------- // Field : PIO_SM2_CLKDIV_INT // Description : Effective frequency is sysclk/(int + frac/256). // Value of 0 is interpreted as 65536. If INT is 0, FRAC must also // be 0. #define PIO_SM2_CLKDIV_INT_RESET _u(0x0001) #define PIO_SM2_CLKDIV_INT_BITS _u(0xffff0000) #define PIO_SM2_CLKDIV_INT_MSB _u(31) #define PIO_SM2_CLKDIV_INT_LSB _u(16) #define PIO_SM2_CLKDIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_CLKDIV_FRAC // Description : Fractional part of clock divisor #define PIO_SM2_CLKDIV_FRAC_RESET _u(0x00) #define PIO_SM2_CLKDIV_FRAC_BITS _u(0x0000ff00) #define PIO_SM2_CLKDIV_FRAC_MSB _u(15) #define PIO_SM2_CLKDIV_FRAC_LSB _u(8) #define PIO_SM2_CLKDIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PIO_SM2_EXECCTRL // Description : Execution/behavioural settings for state machine 2 #define PIO_SM2_EXECCTRL_OFFSET _u(0x000000fc) #define PIO_SM2_EXECCTRL_BITS _u(0xffffff9f) #define PIO_SM2_EXECCTRL_RESET _u(0x0001f000) // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_EXEC_STALLED // Description : If 1, an instruction written to SMx_INSTR is stalled, and // latched by the state machine. Will clear to 0 once this // instruction completes. #define PIO_SM2_EXECCTRL_EXEC_STALLED_RESET _u(0x0) #define PIO_SM2_EXECCTRL_EXEC_STALLED_BITS _u(0x80000000) #define PIO_SM2_EXECCTRL_EXEC_STALLED_MSB _u(31) #define PIO_SM2_EXECCTRL_EXEC_STALLED_LSB _u(31) #define PIO_SM2_EXECCTRL_EXEC_STALLED_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_SIDE_EN // Description : If 1, the MSB of the Delay/Side-set instruction field is used // as side-set enable, rather than a side-set data bit. This // allows instructions to perform side-set optionally, rather than // on every instruction, but the maximum possible side-set width // is reduced from 5 to 4. Note that the value of // PINCTRL_SIDESET_COUNT is inclusive of this enable bit. #define PIO_SM2_EXECCTRL_SIDE_EN_RESET _u(0x0) #define PIO_SM2_EXECCTRL_SIDE_EN_BITS _u(0x40000000) #define PIO_SM2_EXECCTRL_SIDE_EN_MSB _u(30) #define PIO_SM2_EXECCTRL_SIDE_EN_LSB _u(30) #define PIO_SM2_EXECCTRL_SIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_SIDE_PINDIR // Description : If 1, side-set data is asserted to pin directions, instead of // pin values #define PIO_SM2_EXECCTRL_SIDE_PINDIR_RESET _u(0x0) #define PIO_SM2_EXECCTRL_SIDE_PINDIR_BITS _u(0x20000000) #define PIO_SM2_EXECCTRL_SIDE_PINDIR_MSB _u(29) #define PIO_SM2_EXECCTRL_SIDE_PINDIR_LSB _u(29) #define PIO_SM2_EXECCTRL_SIDE_PINDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_JMP_PIN // Description : The GPIO number to use as condition for JMP PIN. Unaffected by // input mapping. #define PIO_SM2_EXECCTRL_JMP_PIN_RESET _u(0x00) #define PIO_SM2_EXECCTRL_JMP_PIN_BITS _u(0x1f000000) #define PIO_SM2_EXECCTRL_JMP_PIN_MSB _u(28) #define PIO_SM2_EXECCTRL_JMP_PIN_LSB _u(24) #define PIO_SM2_EXECCTRL_JMP_PIN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_OUT_EN_SEL // Description : Which data bit to use for inline OUT enable #define PIO_SM2_EXECCTRL_OUT_EN_SEL_RESET _u(0x00) #define PIO_SM2_EXECCTRL_OUT_EN_SEL_BITS _u(0x00f80000) #define PIO_SM2_EXECCTRL_OUT_EN_SEL_MSB _u(23) #define PIO_SM2_EXECCTRL_OUT_EN_SEL_LSB _u(19) #define PIO_SM2_EXECCTRL_OUT_EN_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_INLINE_OUT_EN // Description : If 1, use a bit of OUT data as an auxiliary write enable // When used in conjunction with OUT_STICKY, writes with an enable // of 0 will // deassert the latest pin write. This can create useful // masking/override behaviour // due to the priority ordering of state machine pin writes (SM0 < // SM1 < ...) #define PIO_SM2_EXECCTRL_INLINE_OUT_EN_RESET _u(0x0) #define PIO_SM2_EXECCTRL_INLINE_OUT_EN_BITS _u(0x00040000) #define PIO_SM2_EXECCTRL_INLINE_OUT_EN_MSB _u(18) #define PIO_SM2_EXECCTRL_INLINE_OUT_EN_LSB _u(18) #define PIO_SM2_EXECCTRL_INLINE_OUT_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_OUT_STICKY // Description : Continuously assert the most recent OUT/SET to the pins #define PIO_SM2_EXECCTRL_OUT_STICKY_RESET _u(0x0) #define PIO_SM2_EXECCTRL_OUT_STICKY_BITS _u(0x00020000) #define PIO_SM2_EXECCTRL_OUT_STICKY_MSB _u(17) #define PIO_SM2_EXECCTRL_OUT_STICKY_LSB _u(17) #define PIO_SM2_EXECCTRL_OUT_STICKY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_WRAP_TOP // Description : After reaching this address, execution is wrapped to // wrap_bottom. // If the instruction is a jump, and the jump condition is true, // the jump takes priority. #define PIO_SM2_EXECCTRL_WRAP_TOP_RESET _u(0x1f) #define PIO_SM2_EXECCTRL_WRAP_TOP_BITS _u(0x0001f000) #define PIO_SM2_EXECCTRL_WRAP_TOP_MSB _u(16) #define PIO_SM2_EXECCTRL_WRAP_TOP_LSB _u(12) #define PIO_SM2_EXECCTRL_WRAP_TOP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_WRAP_BOTTOM // Description : After reaching wrap_top, execution is wrapped to this address. #define PIO_SM2_EXECCTRL_WRAP_BOTTOM_RESET _u(0x00) #define PIO_SM2_EXECCTRL_WRAP_BOTTOM_BITS _u(0x00000f80) #define PIO_SM2_EXECCTRL_WRAP_BOTTOM_MSB _u(11) #define PIO_SM2_EXECCTRL_WRAP_BOTTOM_LSB _u(7) #define PIO_SM2_EXECCTRL_WRAP_BOTTOM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_STATUS_SEL // Description : Comparison used for the MOV x, STATUS instruction. // 0x0 -> All-ones if TX FIFO level < N, otherwise all-zeroes // 0x1 -> All-ones if RX FIFO level < N, otherwise all-zeroes #define PIO_SM2_EXECCTRL_STATUS_SEL_RESET _u(0x0) #define PIO_SM2_EXECCTRL_STATUS_SEL_BITS _u(0x00000010) #define PIO_SM2_EXECCTRL_STATUS_SEL_MSB _u(4) #define PIO_SM2_EXECCTRL_STATUS_SEL_LSB _u(4) #define PIO_SM2_EXECCTRL_STATUS_SEL_ACCESS "RW" #define PIO_SM2_EXECCTRL_STATUS_SEL_VALUE_TXLEVEL _u(0x0) #define PIO_SM2_EXECCTRL_STATUS_SEL_VALUE_RXLEVEL _u(0x1) // ----------------------------------------------------------------------------- // Field : PIO_SM2_EXECCTRL_STATUS_N // Description : Comparison level for the MOV x, STATUS instruction #define PIO_SM2_EXECCTRL_STATUS_N_RESET _u(0x0) #define PIO_SM2_EXECCTRL_STATUS_N_BITS _u(0x0000000f) #define PIO_SM2_EXECCTRL_STATUS_N_MSB _u(3) #define PIO_SM2_EXECCTRL_STATUS_N_LSB _u(0) #define PIO_SM2_EXECCTRL_STATUS_N_ACCESS "RW" // ============================================================================= // Register : PIO_SM2_SHIFTCTRL // Description : Control behaviour of the input/output shift registers for state // machine 2 #define PIO_SM2_SHIFTCTRL_OFFSET _u(0x00000100) #define PIO_SM2_SHIFTCTRL_BITS _u(0xffff0000) #define PIO_SM2_SHIFTCTRL_RESET _u(0x000c0000) // ----------------------------------------------------------------------------- // Field : PIO_SM2_SHIFTCTRL_FJOIN_RX // Description : When 1, RX FIFO steals the TX FIFO's storage, and becomes twice // as deep. // TX FIFO is disabled as a result (always reads as both full and // empty). // FIFOs are flushed when this bit is changed. #define PIO_SM2_SHIFTCTRL_FJOIN_RX_RESET _u(0x0) #define PIO_SM2_SHIFTCTRL_FJOIN_RX_BITS _u(0x80000000) #define PIO_SM2_SHIFTCTRL_FJOIN_RX_MSB _u(31) #define PIO_SM2_SHIFTCTRL_FJOIN_RX_LSB _u(31) #define PIO_SM2_SHIFTCTRL_FJOIN_RX_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_SHIFTCTRL_FJOIN_TX // Description : When 1, TX FIFO steals the RX FIFO's storage, and becomes twice // as deep. // RX FIFO is disabled as a result (always reads as both full and // empty). // FIFOs are flushed when this bit is changed. #define PIO_SM2_SHIFTCTRL_FJOIN_TX_RESET _u(0x0) #define PIO_SM2_SHIFTCTRL_FJOIN_TX_BITS _u(0x40000000) #define PIO_SM2_SHIFTCTRL_FJOIN_TX_MSB _u(30) #define PIO_SM2_SHIFTCTRL_FJOIN_TX_LSB _u(30) #define PIO_SM2_SHIFTCTRL_FJOIN_TX_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_SHIFTCTRL_PULL_THRESH // Description : Number of bits shifted out of OSR before autopull, or // conditional pull (PULL IFEMPTY), will take place. // Write 0 for value of 32. #define PIO_SM2_SHIFTCTRL_PULL_THRESH_RESET _u(0x00) #define PIO_SM2_SHIFTCTRL_PULL_THRESH_BITS _u(0x3e000000) #define PIO_SM2_SHIFTCTRL_PULL_THRESH_MSB _u(29) #define PIO_SM2_SHIFTCTRL_PULL_THRESH_LSB _u(25) #define PIO_SM2_SHIFTCTRL_PULL_THRESH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_SHIFTCTRL_PUSH_THRESH // Description : Number of bits shifted into ISR before autopush, or conditional // push (PUSH IFFULL), will take place. // Write 0 for value of 32. #define PIO_SM2_SHIFTCTRL_PUSH_THRESH_RESET _u(0x00) #define PIO_SM2_SHIFTCTRL_PUSH_THRESH_BITS _u(0x01f00000) #define PIO_SM2_SHIFTCTRL_PUSH_THRESH_MSB _u(24) #define PIO_SM2_SHIFTCTRL_PUSH_THRESH_LSB _u(20) #define PIO_SM2_SHIFTCTRL_PUSH_THRESH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_SHIFTCTRL_OUT_SHIFTDIR // Description : 1 = shift out of output shift register to right. 0 = to left. #define PIO_SM2_SHIFTCTRL_OUT_SHIFTDIR_RESET _u(0x1) #define PIO_SM2_SHIFTCTRL_OUT_SHIFTDIR_BITS _u(0x00080000) #define PIO_SM2_SHIFTCTRL_OUT_SHIFTDIR_MSB _u(19) #define PIO_SM2_SHIFTCTRL_OUT_SHIFTDIR_LSB _u(19) #define PIO_SM2_SHIFTCTRL_OUT_SHIFTDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_SHIFTCTRL_IN_SHIFTDIR // Description : 1 = shift input shift register to right (data enters from // left). 0 = to left. #define PIO_SM2_SHIFTCTRL_IN_SHIFTDIR_RESET _u(0x1) #define PIO_SM2_SHIFTCTRL_IN_SHIFTDIR_BITS _u(0x00040000) #define PIO_SM2_SHIFTCTRL_IN_SHIFTDIR_MSB _u(18) #define PIO_SM2_SHIFTCTRL_IN_SHIFTDIR_LSB _u(18) #define PIO_SM2_SHIFTCTRL_IN_SHIFTDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_SHIFTCTRL_AUTOPULL // Description : Pull automatically when the output shift register is emptied, // i.e. on or following an OUT instruction which causes the output // shift counter to reach or exceed PULL_THRESH. #define PIO_SM2_SHIFTCTRL_AUTOPULL_RESET _u(0x0) #define PIO_SM2_SHIFTCTRL_AUTOPULL_BITS _u(0x00020000) #define PIO_SM2_SHIFTCTRL_AUTOPULL_MSB _u(17) #define PIO_SM2_SHIFTCTRL_AUTOPULL_LSB _u(17) #define PIO_SM2_SHIFTCTRL_AUTOPULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_SHIFTCTRL_AUTOPUSH // Description : Push automatically when the input shift register is filled, // i.e. on an IN instruction which causes the input shift counter // to reach or exceed PUSH_THRESH. #define PIO_SM2_SHIFTCTRL_AUTOPUSH_RESET _u(0x0) #define PIO_SM2_SHIFTCTRL_AUTOPUSH_BITS _u(0x00010000) #define PIO_SM2_SHIFTCTRL_AUTOPUSH_MSB _u(16) #define PIO_SM2_SHIFTCTRL_AUTOPUSH_LSB _u(16) #define PIO_SM2_SHIFTCTRL_AUTOPUSH_ACCESS "RW" // ============================================================================= // Register : PIO_SM2_ADDR // Description : Current instruction address of state machine 2 #define PIO_SM2_ADDR_OFFSET _u(0x00000104) #define PIO_SM2_ADDR_BITS _u(0x0000001f) #define PIO_SM2_ADDR_RESET _u(0x00000000) #define PIO_SM2_ADDR_MSB _u(4) #define PIO_SM2_ADDR_LSB _u(0) #define PIO_SM2_ADDR_ACCESS "RO" // ============================================================================= // Register : PIO_SM2_INSTR // Description : Read to see the instruction currently addressed by state // machine 2's program counter // Write to execute an instruction immediately (including jumps) // and then resume execution. #define PIO_SM2_INSTR_OFFSET _u(0x00000108) #define PIO_SM2_INSTR_BITS _u(0x0000ffff) #define PIO_SM2_INSTR_RESET "-" #define PIO_SM2_INSTR_MSB _u(15) #define PIO_SM2_INSTR_LSB _u(0) #define PIO_SM2_INSTR_ACCESS "RW" // ============================================================================= // Register : PIO_SM2_PINCTRL // Description : State machine pin control #define PIO_SM2_PINCTRL_OFFSET _u(0x0000010c) #define PIO_SM2_PINCTRL_BITS _u(0xffffffff) #define PIO_SM2_PINCTRL_RESET _u(0x14000000) // ----------------------------------------------------------------------------- // Field : PIO_SM2_PINCTRL_SIDESET_COUNT // Description : The number of MSBs of the Delay/Side-set instruction field // which are used for side-set. Inclusive of the enable bit, if // present. Minimum of 0 (all delay bits, no side-set) and maximum // of 5 (all side-set, no delay). #define PIO_SM2_PINCTRL_SIDESET_COUNT_RESET _u(0x0) #define PIO_SM2_PINCTRL_SIDESET_COUNT_BITS _u(0xe0000000) #define PIO_SM2_PINCTRL_SIDESET_COUNT_MSB _u(31) #define PIO_SM2_PINCTRL_SIDESET_COUNT_LSB _u(29) #define PIO_SM2_PINCTRL_SIDESET_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_PINCTRL_SET_COUNT // Description : The number of pins asserted by a SET. In the range 0 to 5 // inclusive. #define PIO_SM2_PINCTRL_SET_COUNT_RESET _u(0x5) #define PIO_SM2_PINCTRL_SET_COUNT_BITS _u(0x1c000000) #define PIO_SM2_PINCTRL_SET_COUNT_MSB _u(28) #define PIO_SM2_PINCTRL_SET_COUNT_LSB _u(26) #define PIO_SM2_PINCTRL_SET_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_PINCTRL_OUT_COUNT // Description : The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV // PINS instruction. In the range 0 to 32 inclusive. #define PIO_SM2_PINCTRL_OUT_COUNT_RESET _u(0x00) #define PIO_SM2_PINCTRL_OUT_COUNT_BITS _u(0x03f00000) #define PIO_SM2_PINCTRL_OUT_COUNT_MSB _u(25) #define PIO_SM2_PINCTRL_OUT_COUNT_LSB _u(20) #define PIO_SM2_PINCTRL_OUT_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_PINCTRL_IN_BASE // Description : The pin which is mapped to the least-significant bit of a state // machine's IN data bus. Higher-numbered pins are mapped to // consecutively more-significant data bits, with a modulo of 32 // applied to pin number. #define PIO_SM2_PINCTRL_IN_BASE_RESET _u(0x00) #define PIO_SM2_PINCTRL_IN_BASE_BITS _u(0x000f8000) #define PIO_SM2_PINCTRL_IN_BASE_MSB _u(19) #define PIO_SM2_PINCTRL_IN_BASE_LSB _u(15) #define PIO_SM2_PINCTRL_IN_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_PINCTRL_SIDESET_BASE // Description : The lowest-numbered pin that will be affected by a side-set // operation. The MSBs of an instruction's side-set/delay field // (up to 5, determined by SIDESET_COUNT) are used for side-set // data, with the remaining LSBs used for delay. The // least-significant bit of the side-set portion is the bit // written to this pin, with more-significant bits written to // higher-numbered pins. #define PIO_SM2_PINCTRL_SIDESET_BASE_RESET _u(0x00) #define PIO_SM2_PINCTRL_SIDESET_BASE_BITS _u(0x00007c00) #define PIO_SM2_PINCTRL_SIDESET_BASE_MSB _u(14) #define PIO_SM2_PINCTRL_SIDESET_BASE_LSB _u(10) #define PIO_SM2_PINCTRL_SIDESET_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_PINCTRL_SET_BASE // Description : The lowest-numbered pin that will be affected by a SET PINS or // SET PINDIRS instruction. The data written to this pin is the // least-significant bit of the SET data. #define PIO_SM2_PINCTRL_SET_BASE_RESET _u(0x00) #define PIO_SM2_PINCTRL_SET_BASE_BITS _u(0x000003e0) #define PIO_SM2_PINCTRL_SET_BASE_MSB _u(9) #define PIO_SM2_PINCTRL_SET_BASE_LSB _u(5) #define PIO_SM2_PINCTRL_SET_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM2_PINCTRL_OUT_BASE // Description : The lowest-numbered pin that will be affected by an OUT PINS, // OUT PINDIRS or MOV PINS instruction. The data written to this // pin will always be the least-significant bit of the OUT or MOV // data. #define PIO_SM2_PINCTRL_OUT_BASE_RESET _u(0x00) #define PIO_SM2_PINCTRL_OUT_BASE_BITS _u(0x0000001f) #define PIO_SM2_PINCTRL_OUT_BASE_MSB _u(4) #define PIO_SM2_PINCTRL_OUT_BASE_LSB _u(0) #define PIO_SM2_PINCTRL_OUT_BASE_ACCESS "RW" // ============================================================================= // Register : PIO_SM3_CLKDIV // Description : Clock divisor register for state machine 3 // Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) #define PIO_SM3_CLKDIV_OFFSET _u(0x00000110) #define PIO_SM3_CLKDIV_BITS _u(0xffffff00) #define PIO_SM3_CLKDIV_RESET _u(0x00010000) // ----------------------------------------------------------------------------- // Field : PIO_SM3_CLKDIV_INT // Description : Effective frequency is sysclk/(int + frac/256). // Value of 0 is interpreted as 65536. If INT is 0, FRAC must also // be 0. #define PIO_SM3_CLKDIV_INT_RESET _u(0x0001) #define PIO_SM3_CLKDIV_INT_BITS _u(0xffff0000) #define PIO_SM3_CLKDIV_INT_MSB _u(31) #define PIO_SM3_CLKDIV_INT_LSB _u(16) #define PIO_SM3_CLKDIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_CLKDIV_FRAC // Description : Fractional part of clock divisor #define PIO_SM3_CLKDIV_FRAC_RESET _u(0x00) #define PIO_SM3_CLKDIV_FRAC_BITS _u(0x0000ff00) #define PIO_SM3_CLKDIV_FRAC_MSB _u(15) #define PIO_SM3_CLKDIV_FRAC_LSB _u(8) #define PIO_SM3_CLKDIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PIO_SM3_EXECCTRL // Description : Execution/behavioural settings for state machine 3 #define PIO_SM3_EXECCTRL_OFFSET _u(0x00000114) #define PIO_SM3_EXECCTRL_BITS _u(0xffffff9f) #define PIO_SM3_EXECCTRL_RESET _u(0x0001f000) // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_EXEC_STALLED // Description : If 1, an instruction written to SMx_INSTR is stalled, and // latched by the state machine. Will clear to 0 once this // instruction completes. #define PIO_SM3_EXECCTRL_EXEC_STALLED_RESET _u(0x0) #define PIO_SM3_EXECCTRL_EXEC_STALLED_BITS _u(0x80000000) #define PIO_SM3_EXECCTRL_EXEC_STALLED_MSB _u(31) #define PIO_SM3_EXECCTRL_EXEC_STALLED_LSB _u(31) #define PIO_SM3_EXECCTRL_EXEC_STALLED_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_SIDE_EN // Description : If 1, the MSB of the Delay/Side-set instruction field is used // as side-set enable, rather than a side-set data bit. This // allows instructions to perform side-set optionally, rather than // on every instruction, but the maximum possible side-set width // is reduced from 5 to 4. Note that the value of // PINCTRL_SIDESET_COUNT is inclusive of this enable bit. #define PIO_SM3_EXECCTRL_SIDE_EN_RESET _u(0x0) #define PIO_SM3_EXECCTRL_SIDE_EN_BITS _u(0x40000000) #define PIO_SM3_EXECCTRL_SIDE_EN_MSB _u(30) #define PIO_SM3_EXECCTRL_SIDE_EN_LSB _u(30) #define PIO_SM3_EXECCTRL_SIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_SIDE_PINDIR // Description : If 1, side-set data is asserted to pin directions, instead of // pin values #define PIO_SM3_EXECCTRL_SIDE_PINDIR_RESET _u(0x0) #define PIO_SM3_EXECCTRL_SIDE_PINDIR_BITS _u(0x20000000) #define PIO_SM3_EXECCTRL_SIDE_PINDIR_MSB _u(29) #define PIO_SM3_EXECCTRL_SIDE_PINDIR_LSB _u(29) #define PIO_SM3_EXECCTRL_SIDE_PINDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_JMP_PIN // Description : The GPIO number to use as condition for JMP PIN. Unaffected by // input mapping. #define PIO_SM3_EXECCTRL_JMP_PIN_RESET _u(0x00) #define PIO_SM3_EXECCTRL_JMP_PIN_BITS _u(0x1f000000) #define PIO_SM3_EXECCTRL_JMP_PIN_MSB _u(28) #define PIO_SM3_EXECCTRL_JMP_PIN_LSB _u(24) #define PIO_SM3_EXECCTRL_JMP_PIN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_OUT_EN_SEL // Description : Which data bit to use for inline OUT enable #define PIO_SM3_EXECCTRL_OUT_EN_SEL_RESET _u(0x00) #define PIO_SM3_EXECCTRL_OUT_EN_SEL_BITS _u(0x00f80000) #define PIO_SM3_EXECCTRL_OUT_EN_SEL_MSB _u(23) #define PIO_SM3_EXECCTRL_OUT_EN_SEL_LSB _u(19) #define PIO_SM3_EXECCTRL_OUT_EN_SEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_INLINE_OUT_EN // Description : If 1, use a bit of OUT data as an auxiliary write enable // When used in conjunction with OUT_STICKY, writes with an enable // of 0 will // deassert the latest pin write. This can create useful // masking/override behaviour // due to the priority ordering of state machine pin writes (SM0 < // SM1 < ...) #define PIO_SM3_EXECCTRL_INLINE_OUT_EN_RESET _u(0x0) #define PIO_SM3_EXECCTRL_INLINE_OUT_EN_BITS _u(0x00040000) #define PIO_SM3_EXECCTRL_INLINE_OUT_EN_MSB _u(18) #define PIO_SM3_EXECCTRL_INLINE_OUT_EN_LSB _u(18) #define PIO_SM3_EXECCTRL_INLINE_OUT_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_OUT_STICKY // Description : Continuously assert the most recent OUT/SET to the pins #define PIO_SM3_EXECCTRL_OUT_STICKY_RESET _u(0x0) #define PIO_SM3_EXECCTRL_OUT_STICKY_BITS _u(0x00020000) #define PIO_SM3_EXECCTRL_OUT_STICKY_MSB _u(17) #define PIO_SM3_EXECCTRL_OUT_STICKY_LSB _u(17) #define PIO_SM3_EXECCTRL_OUT_STICKY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_WRAP_TOP // Description : After reaching this address, execution is wrapped to // wrap_bottom. // If the instruction is a jump, and the jump condition is true, // the jump takes priority. #define PIO_SM3_EXECCTRL_WRAP_TOP_RESET _u(0x1f) #define PIO_SM3_EXECCTRL_WRAP_TOP_BITS _u(0x0001f000) #define PIO_SM3_EXECCTRL_WRAP_TOP_MSB _u(16) #define PIO_SM3_EXECCTRL_WRAP_TOP_LSB _u(12) #define PIO_SM3_EXECCTRL_WRAP_TOP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_WRAP_BOTTOM // Description : After reaching wrap_top, execution is wrapped to this address. #define PIO_SM3_EXECCTRL_WRAP_BOTTOM_RESET _u(0x00) #define PIO_SM3_EXECCTRL_WRAP_BOTTOM_BITS _u(0x00000f80) #define PIO_SM3_EXECCTRL_WRAP_BOTTOM_MSB _u(11) #define PIO_SM3_EXECCTRL_WRAP_BOTTOM_LSB _u(7) #define PIO_SM3_EXECCTRL_WRAP_BOTTOM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_STATUS_SEL // Description : Comparison used for the MOV x, STATUS instruction. // 0x0 -> All-ones if TX FIFO level < N, otherwise all-zeroes // 0x1 -> All-ones if RX FIFO level < N, otherwise all-zeroes #define PIO_SM3_EXECCTRL_STATUS_SEL_RESET _u(0x0) #define PIO_SM3_EXECCTRL_STATUS_SEL_BITS _u(0x00000010) #define PIO_SM3_EXECCTRL_STATUS_SEL_MSB _u(4) #define PIO_SM3_EXECCTRL_STATUS_SEL_LSB _u(4) #define PIO_SM3_EXECCTRL_STATUS_SEL_ACCESS "RW" #define PIO_SM3_EXECCTRL_STATUS_SEL_VALUE_TXLEVEL _u(0x0) #define PIO_SM3_EXECCTRL_STATUS_SEL_VALUE_RXLEVEL _u(0x1) // ----------------------------------------------------------------------------- // Field : PIO_SM3_EXECCTRL_STATUS_N // Description : Comparison level for the MOV x, STATUS instruction #define PIO_SM3_EXECCTRL_STATUS_N_RESET _u(0x0) #define PIO_SM3_EXECCTRL_STATUS_N_BITS _u(0x0000000f) #define PIO_SM3_EXECCTRL_STATUS_N_MSB _u(3) #define PIO_SM3_EXECCTRL_STATUS_N_LSB _u(0) #define PIO_SM3_EXECCTRL_STATUS_N_ACCESS "RW" // ============================================================================= // Register : PIO_SM3_SHIFTCTRL // Description : Control behaviour of the input/output shift registers for state // machine 3 #define PIO_SM3_SHIFTCTRL_OFFSET _u(0x00000118) #define PIO_SM3_SHIFTCTRL_BITS _u(0xffff0000) #define PIO_SM3_SHIFTCTRL_RESET _u(0x000c0000) // ----------------------------------------------------------------------------- // Field : PIO_SM3_SHIFTCTRL_FJOIN_RX // Description : When 1, RX FIFO steals the TX FIFO's storage, and becomes twice // as deep. // TX FIFO is disabled as a result (always reads as both full and // empty). // FIFOs are flushed when this bit is changed. #define PIO_SM3_SHIFTCTRL_FJOIN_RX_RESET _u(0x0) #define PIO_SM3_SHIFTCTRL_FJOIN_RX_BITS _u(0x80000000) #define PIO_SM3_SHIFTCTRL_FJOIN_RX_MSB _u(31) #define PIO_SM3_SHIFTCTRL_FJOIN_RX_LSB _u(31) #define PIO_SM3_SHIFTCTRL_FJOIN_RX_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_SHIFTCTRL_FJOIN_TX // Description : When 1, TX FIFO steals the RX FIFO's storage, and becomes twice // as deep. // RX FIFO is disabled as a result (always reads as both full and // empty). // FIFOs are flushed when this bit is changed. #define PIO_SM3_SHIFTCTRL_FJOIN_TX_RESET _u(0x0) #define PIO_SM3_SHIFTCTRL_FJOIN_TX_BITS _u(0x40000000) #define PIO_SM3_SHIFTCTRL_FJOIN_TX_MSB _u(30) #define PIO_SM3_SHIFTCTRL_FJOIN_TX_LSB _u(30) #define PIO_SM3_SHIFTCTRL_FJOIN_TX_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_SHIFTCTRL_PULL_THRESH // Description : Number of bits shifted out of OSR before autopull, or // conditional pull (PULL IFEMPTY), will take place. // Write 0 for value of 32. #define PIO_SM3_SHIFTCTRL_PULL_THRESH_RESET _u(0x00) #define PIO_SM3_SHIFTCTRL_PULL_THRESH_BITS _u(0x3e000000) #define PIO_SM3_SHIFTCTRL_PULL_THRESH_MSB _u(29) #define PIO_SM3_SHIFTCTRL_PULL_THRESH_LSB _u(25) #define PIO_SM3_SHIFTCTRL_PULL_THRESH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_SHIFTCTRL_PUSH_THRESH // Description : Number of bits shifted into ISR before autopush, or conditional // push (PUSH IFFULL), will take place. // Write 0 for value of 32. #define PIO_SM3_SHIFTCTRL_PUSH_THRESH_RESET _u(0x00) #define PIO_SM3_SHIFTCTRL_PUSH_THRESH_BITS _u(0x01f00000) #define PIO_SM3_SHIFTCTRL_PUSH_THRESH_MSB _u(24) #define PIO_SM3_SHIFTCTRL_PUSH_THRESH_LSB _u(20) #define PIO_SM3_SHIFTCTRL_PUSH_THRESH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_SHIFTCTRL_OUT_SHIFTDIR // Description : 1 = shift out of output shift register to right. 0 = to left. #define PIO_SM3_SHIFTCTRL_OUT_SHIFTDIR_RESET _u(0x1) #define PIO_SM3_SHIFTCTRL_OUT_SHIFTDIR_BITS _u(0x00080000) #define PIO_SM3_SHIFTCTRL_OUT_SHIFTDIR_MSB _u(19) #define PIO_SM3_SHIFTCTRL_OUT_SHIFTDIR_LSB _u(19) #define PIO_SM3_SHIFTCTRL_OUT_SHIFTDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_SHIFTCTRL_IN_SHIFTDIR // Description : 1 = shift input shift register to right (data enters from // left). 0 = to left. #define PIO_SM3_SHIFTCTRL_IN_SHIFTDIR_RESET _u(0x1) #define PIO_SM3_SHIFTCTRL_IN_SHIFTDIR_BITS _u(0x00040000) #define PIO_SM3_SHIFTCTRL_IN_SHIFTDIR_MSB _u(18) #define PIO_SM3_SHIFTCTRL_IN_SHIFTDIR_LSB _u(18) #define PIO_SM3_SHIFTCTRL_IN_SHIFTDIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_SHIFTCTRL_AUTOPULL // Description : Pull automatically when the output shift register is emptied, // i.e. on or following an OUT instruction which causes the output // shift counter to reach or exceed PULL_THRESH. #define PIO_SM3_SHIFTCTRL_AUTOPULL_RESET _u(0x0) #define PIO_SM3_SHIFTCTRL_AUTOPULL_BITS _u(0x00020000) #define PIO_SM3_SHIFTCTRL_AUTOPULL_MSB _u(17) #define PIO_SM3_SHIFTCTRL_AUTOPULL_LSB _u(17) #define PIO_SM3_SHIFTCTRL_AUTOPULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_SHIFTCTRL_AUTOPUSH // Description : Push automatically when the input shift register is filled, // i.e. on an IN instruction which causes the input shift counter // to reach or exceed PUSH_THRESH. #define PIO_SM3_SHIFTCTRL_AUTOPUSH_RESET _u(0x0) #define PIO_SM3_SHIFTCTRL_AUTOPUSH_BITS _u(0x00010000) #define PIO_SM3_SHIFTCTRL_AUTOPUSH_MSB _u(16) #define PIO_SM3_SHIFTCTRL_AUTOPUSH_LSB _u(16) #define PIO_SM3_SHIFTCTRL_AUTOPUSH_ACCESS "RW" // ============================================================================= // Register : PIO_SM3_ADDR // Description : Current instruction address of state machine 3 #define PIO_SM3_ADDR_OFFSET _u(0x0000011c) #define PIO_SM3_ADDR_BITS _u(0x0000001f) #define PIO_SM3_ADDR_RESET _u(0x00000000) #define PIO_SM3_ADDR_MSB _u(4) #define PIO_SM3_ADDR_LSB _u(0) #define PIO_SM3_ADDR_ACCESS "RO" // ============================================================================= // Register : PIO_SM3_INSTR // Description : Read to see the instruction currently addressed by state // machine 3's program counter // Write to execute an instruction immediately (including jumps) // and then resume execution. #define PIO_SM3_INSTR_OFFSET _u(0x00000120) #define PIO_SM3_INSTR_BITS _u(0x0000ffff) #define PIO_SM3_INSTR_RESET "-" #define PIO_SM3_INSTR_MSB _u(15) #define PIO_SM3_INSTR_LSB _u(0) #define PIO_SM3_INSTR_ACCESS "RW" // ============================================================================= // Register : PIO_SM3_PINCTRL // Description : State machine pin control #define PIO_SM3_PINCTRL_OFFSET _u(0x00000124) #define PIO_SM3_PINCTRL_BITS _u(0xffffffff) #define PIO_SM3_PINCTRL_RESET _u(0x14000000) // ----------------------------------------------------------------------------- // Field : PIO_SM3_PINCTRL_SIDESET_COUNT // Description : The number of MSBs of the Delay/Side-set instruction field // which are used for side-set. Inclusive of the enable bit, if // present. Minimum of 0 (all delay bits, no side-set) and maximum // of 5 (all side-set, no delay). #define PIO_SM3_PINCTRL_SIDESET_COUNT_RESET _u(0x0) #define PIO_SM3_PINCTRL_SIDESET_COUNT_BITS _u(0xe0000000) #define PIO_SM3_PINCTRL_SIDESET_COUNT_MSB _u(31) #define PIO_SM3_PINCTRL_SIDESET_COUNT_LSB _u(29) #define PIO_SM3_PINCTRL_SIDESET_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_PINCTRL_SET_COUNT // Description : The number of pins asserted by a SET. In the range 0 to 5 // inclusive. #define PIO_SM3_PINCTRL_SET_COUNT_RESET _u(0x5) #define PIO_SM3_PINCTRL_SET_COUNT_BITS _u(0x1c000000) #define PIO_SM3_PINCTRL_SET_COUNT_MSB _u(28) #define PIO_SM3_PINCTRL_SET_COUNT_LSB _u(26) #define PIO_SM3_PINCTRL_SET_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_PINCTRL_OUT_COUNT // Description : The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV // PINS instruction. In the range 0 to 32 inclusive. #define PIO_SM3_PINCTRL_OUT_COUNT_RESET _u(0x00) #define PIO_SM3_PINCTRL_OUT_COUNT_BITS _u(0x03f00000) #define PIO_SM3_PINCTRL_OUT_COUNT_MSB _u(25) #define PIO_SM3_PINCTRL_OUT_COUNT_LSB _u(20) #define PIO_SM3_PINCTRL_OUT_COUNT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_PINCTRL_IN_BASE // Description : The pin which is mapped to the least-significant bit of a state // machine's IN data bus. Higher-numbered pins are mapped to // consecutively more-significant data bits, with a modulo of 32 // applied to pin number. #define PIO_SM3_PINCTRL_IN_BASE_RESET _u(0x00) #define PIO_SM3_PINCTRL_IN_BASE_BITS _u(0x000f8000) #define PIO_SM3_PINCTRL_IN_BASE_MSB _u(19) #define PIO_SM3_PINCTRL_IN_BASE_LSB _u(15) #define PIO_SM3_PINCTRL_IN_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_PINCTRL_SIDESET_BASE // Description : The lowest-numbered pin that will be affected by a side-set // operation. The MSBs of an instruction's side-set/delay field // (up to 5, determined by SIDESET_COUNT) are used for side-set // data, with the remaining LSBs used for delay. The // least-significant bit of the side-set portion is the bit // written to this pin, with more-significant bits written to // higher-numbered pins. #define PIO_SM3_PINCTRL_SIDESET_BASE_RESET _u(0x00) #define PIO_SM3_PINCTRL_SIDESET_BASE_BITS _u(0x00007c00) #define PIO_SM3_PINCTRL_SIDESET_BASE_MSB _u(14) #define PIO_SM3_PINCTRL_SIDESET_BASE_LSB _u(10) #define PIO_SM3_PINCTRL_SIDESET_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_PINCTRL_SET_BASE // Description : The lowest-numbered pin that will be affected by a SET PINS or // SET PINDIRS instruction. The data written to this pin is the // least-significant bit of the SET data. #define PIO_SM3_PINCTRL_SET_BASE_RESET _u(0x00) #define PIO_SM3_PINCTRL_SET_BASE_BITS _u(0x000003e0) #define PIO_SM3_PINCTRL_SET_BASE_MSB _u(9) #define PIO_SM3_PINCTRL_SET_BASE_LSB _u(5) #define PIO_SM3_PINCTRL_SET_BASE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_SM3_PINCTRL_OUT_BASE // Description : The lowest-numbered pin that will be affected by an OUT PINS, // OUT PINDIRS or MOV PINS instruction. The data written to this // pin will always be the least-significant bit of the OUT or MOV // data. #define PIO_SM3_PINCTRL_OUT_BASE_RESET _u(0x00) #define PIO_SM3_PINCTRL_OUT_BASE_BITS _u(0x0000001f) #define PIO_SM3_PINCTRL_OUT_BASE_MSB _u(4) #define PIO_SM3_PINCTRL_OUT_BASE_LSB _u(0) #define PIO_SM3_PINCTRL_OUT_BASE_ACCESS "RW" // ============================================================================= // Register : PIO_INTR // Description : Raw Interrupts #define PIO_INTR_OFFSET _u(0x00000128) #define PIO_INTR_BITS _u(0x00000fff) #define PIO_INTR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM3 // Description : None #define PIO_INTR_SM3_RESET _u(0x0) #define PIO_INTR_SM3_BITS _u(0x00000800) #define PIO_INTR_SM3_MSB _u(11) #define PIO_INTR_SM3_LSB _u(11) #define PIO_INTR_SM3_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM2 // Description : None #define PIO_INTR_SM2_RESET _u(0x0) #define PIO_INTR_SM2_BITS _u(0x00000400) #define PIO_INTR_SM2_MSB _u(10) #define PIO_INTR_SM2_LSB _u(10) #define PIO_INTR_SM2_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM1 // Description : None #define PIO_INTR_SM1_RESET _u(0x0) #define PIO_INTR_SM1_BITS _u(0x00000200) #define PIO_INTR_SM1_MSB _u(9) #define PIO_INTR_SM1_LSB _u(9) #define PIO_INTR_SM1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM0 // Description : None #define PIO_INTR_SM0_RESET _u(0x0) #define PIO_INTR_SM0_BITS _u(0x00000100) #define PIO_INTR_SM0_MSB _u(8) #define PIO_INTR_SM0_LSB _u(8) #define PIO_INTR_SM0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM3_TXNFULL // Description : None #define PIO_INTR_SM3_TXNFULL_RESET _u(0x0) #define PIO_INTR_SM3_TXNFULL_BITS _u(0x00000080) #define PIO_INTR_SM3_TXNFULL_MSB _u(7) #define PIO_INTR_SM3_TXNFULL_LSB _u(7) #define PIO_INTR_SM3_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM2_TXNFULL // Description : None #define PIO_INTR_SM2_TXNFULL_RESET _u(0x0) #define PIO_INTR_SM2_TXNFULL_BITS _u(0x00000040) #define PIO_INTR_SM2_TXNFULL_MSB _u(6) #define PIO_INTR_SM2_TXNFULL_LSB _u(6) #define PIO_INTR_SM2_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM1_TXNFULL // Description : None #define PIO_INTR_SM1_TXNFULL_RESET _u(0x0) #define PIO_INTR_SM1_TXNFULL_BITS _u(0x00000020) #define PIO_INTR_SM1_TXNFULL_MSB _u(5) #define PIO_INTR_SM1_TXNFULL_LSB _u(5) #define PIO_INTR_SM1_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM0_TXNFULL // Description : None #define PIO_INTR_SM0_TXNFULL_RESET _u(0x0) #define PIO_INTR_SM0_TXNFULL_BITS _u(0x00000010) #define PIO_INTR_SM0_TXNFULL_MSB _u(4) #define PIO_INTR_SM0_TXNFULL_LSB _u(4) #define PIO_INTR_SM0_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM3_RXNEMPTY // Description : None #define PIO_INTR_SM3_RXNEMPTY_RESET _u(0x0) #define PIO_INTR_SM3_RXNEMPTY_BITS _u(0x00000008) #define PIO_INTR_SM3_RXNEMPTY_MSB _u(3) #define PIO_INTR_SM3_RXNEMPTY_LSB _u(3) #define PIO_INTR_SM3_RXNEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM2_RXNEMPTY // Description : None #define PIO_INTR_SM2_RXNEMPTY_RESET _u(0x0) #define PIO_INTR_SM2_RXNEMPTY_BITS _u(0x00000004) #define PIO_INTR_SM2_RXNEMPTY_MSB _u(2) #define PIO_INTR_SM2_RXNEMPTY_LSB _u(2) #define PIO_INTR_SM2_RXNEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM1_RXNEMPTY // Description : None #define PIO_INTR_SM1_RXNEMPTY_RESET _u(0x0) #define PIO_INTR_SM1_RXNEMPTY_BITS _u(0x00000002) #define PIO_INTR_SM1_RXNEMPTY_MSB _u(1) #define PIO_INTR_SM1_RXNEMPTY_LSB _u(1) #define PIO_INTR_SM1_RXNEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_INTR_SM0_RXNEMPTY // Description : None #define PIO_INTR_SM0_RXNEMPTY_RESET _u(0x0) #define PIO_INTR_SM0_RXNEMPTY_BITS _u(0x00000001) #define PIO_INTR_SM0_RXNEMPTY_MSB _u(0) #define PIO_INTR_SM0_RXNEMPTY_LSB _u(0) #define PIO_INTR_SM0_RXNEMPTY_ACCESS "RO" // ============================================================================= // Register : PIO_IRQ0_INTE // Description : Interrupt Enable for irq0 #define PIO_IRQ0_INTE_OFFSET _u(0x0000012c) #define PIO_IRQ0_INTE_BITS _u(0x00000fff) #define PIO_IRQ0_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM3 // Description : None #define PIO_IRQ0_INTE_SM3_RESET _u(0x0) #define PIO_IRQ0_INTE_SM3_BITS _u(0x00000800) #define PIO_IRQ0_INTE_SM3_MSB _u(11) #define PIO_IRQ0_INTE_SM3_LSB _u(11) #define PIO_IRQ0_INTE_SM3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM2 // Description : None #define PIO_IRQ0_INTE_SM2_RESET _u(0x0) #define PIO_IRQ0_INTE_SM2_BITS _u(0x00000400) #define PIO_IRQ0_INTE_SM2_MSB _u(10) #define PIO_IRQ0_INTE_SM2_LSB _u(10) #define PIO_IRQ0_INTE_SM2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM1 // Description : None #define PIO_IRQ0_INTE_SM1_RESET _u(0x0) #define PIO_IRQ0_INTE_SM1_BITS _u(0x00000200) #define PIO_IRQ0_INTE_SM1_MSB _u(9) #define PIO_IRQ0_INTE_SM1_LSB _u(9) #define PIO_IRQ0_INTE_SM1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM0 // Description : None #define PIO_IRQ0_INTE_SM0_RESET _u(0x0) #define PIO_IRQ0_INTE_SM0_BITS _u(0x00000100) #define PIO_IRQ0_INTE_SM0_MSB _u(8) #define PIO_IRQ0_INTE_SM0_LSB _u(8) #define PIO_IRQ0_INTE_SM0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM3_TXNFULL // Description : None #define PIO_IRQ0_INTE_SM3_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTE_SM3_TXNFULL_BITS _u(0x00000080) #define PIO_IRQ0_INTE_SM3_TXNFULL_MSB _u(7) #define PIO_IRQ0_INTE_SM3_TXNFULL_LSB _u(7) #define PIO_IRQ0_INTE_SM3_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM2_TXNFULL // Description : None #define PIO_IRQ0_INTE_SM2_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTE_SM2_TXNFULL_BITS _u(0x00000040) #define PIO_IRQ0_INTE_SM2_TXNFULL_MSB _u(6) #define PIO_IRQ0_INTE_SM2_TXNFULL_LSB _u(6) #define PIO_IRQ0_INTE_SM2_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM1_TXNFULL // Description : None #define PIO_IRQ0_INTE_SM1_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTE_SM1_TXNFULL_BITS _u(0x00000020) #define PIO_IRQ0_INTE_SM1_TXNFULL_MSB _u(5) #define PIO_IRQ0_INTE_SM1_TXNFULL_LSB _u(5) #define PIO_IRQ0_INTE_SM1_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM0_TXNFULL // Description : None #define PIO_IRQ0_INTE_SM0_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTE_SM0_TXNFULL_BITS _u(0x00000010) #define PIO_IRQ0_INTE_SM0_TXNFULL_MSB _u(4) #define PIO_IRQ0_INTE_SM0_TXNFULL_LSB _u(4) #define PIO_IRQ0_INTE_SM0_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM3_RXNEMPTY // Description : None #define PIO_IRQ0_INTE_SM3_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTE_SM3_RXNEMPTY_BITS _u(0x00000008) #define PIO_IRQ0_INTE_SM3_RXNEMPTY_MSB _u(3) #define PIO_IRQ0_INTE_SM3_RXNEMPTY_LSB _u(3) #define PIO_IRQ0_INTE_SM3_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM2_RXNEMPTY // Description : None #define PIO_IRQ0_INTE_SM2_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTE_SM2_RXNEMPTY_BITS _u(0x00000004) #define PIO_IRQ0_INTE_SM2_RXNEMPTY_MSB _u(2) #define PIO_IRQ0_INTE_SM2_RXNEMPTY_LSB _u(2) #define PIO_IRQ0_INTE_SM2_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM1_RXNEMPTY // Description : None #define PIO_IRQ0_INTE_SM1_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTE_SM1_RXNEMPTY_BITS _u(0x00000002) #define PIO_IRQ0_INTE_SM1_RXNEMPTY_MSB _u(1) #define PIO_IRQ0_INTE_SM1_RXNEMPTY_LSB _u(1) #define PIO_IRQ0_INTE_SM1_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTE_SM0_RXNEMPTY // Description : None #define PIO_IRQ0_INTE_SM0_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTE_SM0_RXNEMPTY_BITS _u(0x00000001) #define PIO_IRQ0_INTE_SM0_RXNEMPTY_MSB _u(0) #define PIO_IRQ0_INTE_SM0_RXNEMPTY_LSB _u(0) #define PIO_IRQ0_INTE_SM0_RXNEMPTY_ACCESS "RW" // ============================================================================= // Register : PIO_IRQ0_INTF // Description : Interrupt Force for irq0 #define PIO_IRQ0_INTF_OFFSET _u(0x00000130) #define PIO_IRQ0_INTF_BITS _u(0x00000fff) #define PIO_IRQ0_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM3 // Description : None #define PIO_IRQ0_INTF_SM3_RESET _u(0x0) #define PIO_IRQ0_INTF_SM3_BITS _u(0x00000800) #define PIO_IRQ0_INTF_SM3_MSB _u(11) #define PIO_IRQ0_INTF_SM3_LSB _u(11) #define PIO_IRQ0_INTF_SM3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM2 // Description : None #define PIO_IRQ0_INTF_SM2_RESET _u(0x0) #define PIO_IRQ0_INTF_SM2_BITS _u(0x00000400) #define PIO_IRQ0_INTF_SM2_MSB _u(10) #define PIO_IRQ0_INTF_SM2_LSB _u(10) #define PIO_IRQ0_INTF_SM2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM1 // Description : None #define PIO_IRQ0_INTF_SM1_RESET _u(0x0) #define PIO_IRQ0_INTF_SM1_BITS _u(0x00000200) #define PIO_IRQ0_INTF_SM1_MSB _u(9) #define PIO_IRQ0_INTF_SM1_LSB _u(9) #define PIO_IRQ0_INTF_SM1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM0 // Description : None #define PIO_IRQ0_INTF_SM0_RESET _u(0x0) #define PIO_IRQ0_INTF_SM0_BITS _u(0x00000100) #define PIO_IRQ0_INTF_SM0_MSB _u(8) #define PIO_IRQ0_INTF_SM0_LSB _u(8) #define PIO_IRQ0_INTF_SM0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM3_TXNFULL // Description : None #define PIO_IRQ0_INTF_SM3_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTF_SM3_TXNFULL_BITS _u(0x00000080) #define PIO_IRQ0_INTF_SM3_TXNFULL_MSB _u(7) #define PIO_IRQ0_INTF_SM3_TXNFULL_LSB _u(7) #define PIO_IRQ0_INTF_SM3_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM2_TXNFULL // Description : None #define PIO_IRQ0_INTF_SM2_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTF_SM2_TXNFULL_BITS _u(0x00000040) #define PIO_IRQ0_INTF_SM2_TXNFULL_MSB _u(6) #define PIO_IRQ0_INTF_SM2_TXNFULL_LSB _u(6) #define PIO_IRQ0_INTF_SM2_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM1_TXNFULL // Description : None #define PIO_IRQ0_INTF_SM1_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTF_SM1_TXNFULL_BITS _u(0x00000020) #define PIO_IRQ0_INTF_SM1_TXNFULL_MSB _u(5) #define PIO_IRQ0_INTF_SM1_TXNFULL_LSB _u(5) #define PIO_IRQ0_INTF_SM1_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM0_TXNFULL // Description : None #define PIO_IRQ0_INTF_SM0_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTF_SM0_TXNFULL_BITS _u(0x00000010) #define PIO_IRQ0_INTF_SM0_TXNFULL_MSB _u(4) #define PIO_IRQ0_INTF_SM0_TXNFULL_LSB _u(4) #define PIO_IRQ0_INTF_SM0_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM3_RXNEMPTY // Description : None #define PIO_IRQ0_INTF_SM3_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTF_SM3_RXNEMPTY_BITS _u(0x00000008) #define PIO_IRQ0_INTF_SM3_RXNEMPTY_MSB _u(3) #define PIO_IRQ0_INTF_SM3_RXNEMPTY_LSB _u(3) #define PIO_IRQ0_INTF_SM3_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM2_RXNEMPTY // Description : None #define PIO_IRQ0_INTF_SM2_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTF_SM2_RXNEMPTY_BITS _u(0x00000004) #define PIO_IRQ0_INTF_SM2_RXNEMPTY_MSB _u(2) #define PIO_IRQ0_INTF_SM2_RXNEMPTY_LSB _u(2) #define PIO_IRQ0_INTF_SM2_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM1_RXNEMPTY // Description : None #define PIO_IRQ0_INTF_SM1_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTF_SM1_RXNEMPTY_BITS _u(0x00000002) #define PIO_IRQ0_INTF_SM1_RXNEMPTY_MSB _u(1) #define PIO_IRQ0_INTF_SM1_RXNEMPTY_LSB _u(1) #define PIO_IRQ0_INTF_SM1_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTF_SM0_RXNEMPTY // Description : None #define PIO_IRQ0_INTF_SM0_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTF_SM0_RXNEMPTY_BITS _u(0x00000001) #define PIO_IRQ0_INTF_SM0_RXNEMPTY_MSB _u(0) #define PIO_IRQ0_INTF_SM0_RXNEMPTY_LSB _u(0) #define PIO_IRQ0_INTF_SM0_RXNEMPTY_ACCESS "RW" // ============================================================================= // Register : PIO_IRQ0_INTS // Description : Interrupt status after masking & forcing for irq0 #define PIO_IRQ0_INTS_OFFSET _u(0x00000134) #define PIO_IRQ0_INTS_BITS _u(0x00000fff) #define PIO_IRQ0_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM3 // Description : None #define PIO_IRQ0_INTS_SM3_RESET _u(0x0) #define PIO_IRQ0_INTS_SM3_BITS _u(0x00000800) #define PIO_IRQ0_INTS_SM3_MSB _u(11) #define PIO_IRQ0_INTS_SM3_LSB _u(11) #define PIO_IRQ0_INTS_SM3_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM2 // Description : None #define PIO_IRQ0_INTS_SM2_RESET _u(0x0) #define PIO_IRQ0_INTS_SM2_BITS _u(0x00000400) #define PIO_IRQ0_INTS_SM2_MSB _u(10) #define PIO_IRQ0_INTS_SM2_LSB _u(10) #define PIO_IRQ0_INTS_SM2_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM1 // Description : None #define PIO_IRQ0_INTS_SM1_RESET _u(0x0) #define PIO_IRQ0_INTS_SM1_BITS _u(0x00000200) #define PIO_IRQ0_INTS_SM1_MSB _u(9) #define PIO_IRQ0_INTS_SM1_LSB _u(9) #define PIO_IRQ0_INTS_SM1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM0 // Description : None #define PIO_IRQ0_INTS_SM0_RESET _u(0x0) #define PIO_IRQ0_INTS_SM0_BITS _u(0x00000100) #define PIO_IRQ0_INTS_SM0_MSB _u(8) #define PIO_IRQ0_INTS_SM0_LSB _u(8) #define PIO_IRQ0_INTS_SM0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM3_TXNFULL // Description : None #define PIO_IRQ0_INTS_SM3_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTS_SM3_TXNFULL_BITS _u(0x00000080) #define PIO_IRQ0_INTS_SM3_TXNFULL_MSB _u(7) #define PIO_IRQ0_INTS_SM3_TXNFULL_LSB _u(7) #define PIO_IRQ0_INTS_SM3_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM2_TXNFULL // Description : None #define PIO_IRQ0_INTS_SM2_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTS_SM2_TXNFULL_BITS _u(0x00000040) #define PIO_IRQ0_INTS_SM2_TXNFULL_MSB _u(6) #define PIO_IRQ0_INTS_SM2_TXNFULL_LSB _u(6) #define PIO_IRQ0_INTS_SM2_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM1_TXNFULL // Description : None #define PIO_IRQ0_INTS_SM1_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTS_SM1_TXNFULL_BITS _u(0x00000020) #define PIO_IRQ0_INTS_SM1_TXNFULL_MSB _u(5) #define PIO_IRQ0_INTS_SM1_TXNFULL_LSB _u(5) #define PIO_IRQ0_INTS_SM1_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM0_TXNFULL // Description : None #define PIO_IRQ0_INTS_SM0_TXNFULL_RESET _u(0x0) #define PIO_IRQ0_INTS_SM0_TXNFULL_BITS _u(0x00000010) #define PIO_IRQ0_INTS_SM0_TXNFULL_MSB _u(4) #define PIO_IRQ0_INTS_SM0_TXNFULL_LSB _u(4) #define PIO_IRQ0_INTS_SM0_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM3_RXNEMPTY // Description : None #define PIO_IRQ0_INTS_SM3_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTS_SM3_RXNEMPTY_BITS _u(0x00000008) #define PIO_IRQ0_INTS_SM3_RXNEMPTY_MSB _u(3) #define PIO_IRQ0_INTS_SM3_RXNEMPTY_LSB _u(3) #define PIO_IRQ0_INTS_SM3_RXNEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM2_RXNEMPTY // Description : None #define PIO_IRQ0_INTS_SM2_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTS_SM2_RXNEMPTY_BITS _u(0x00000004) #define PIO_IRQ0_INTS_SM2_RXNEMPTY_MSB _u(2) #define PIO_IRQ0_INTS_SM2_RXNEMPTY_LSB _u(2) #define PIO_IRQ0_INTS_SM2_RXNEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM1_RXNEMPTY // Description : None #define PIO_IRQ0_INTS_SM1_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTS_SM1_RXNEMPTY_BITS _u(0x00000002) #define PIO_IRQ0_INTS_SM1_RXNEMPTY_MSB _u(1) #define PIO_IRQ0_INTS_SM1_RXNEMPTY_LSB _u(1) #define PIO_IRQ0_INTS_SM1_RXNEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ0_INTS_SM0_RXNEMPTY // Description : None #define PIO_IRQ0_INTS_SM0_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ0_INTS_SM0_RXNEMPTY_BITS _u(0x00000001) #define PIO_IRQ0_INTS_SM0_RXNEMPTY_MSB _u(0) #define PIO_IRQ0_INTS_SM0_RXNEMPTY_LSB _u(0) #define PIO_IRQ0_INTS_SM0_RXNEMPTY_ACCESS "RO" // ============================================================================= // Register : PIO_IRQ1_INTE // Description : Interrupt Enable for irq1 #define PIO_IRQ1_INTE_OFFSET _u(0x00000138) #define PIO_IRQ1_INTE_BITS _u(0x00000fff) #define PIO_IRQ1_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM3 // Description : None #define PIO_IRQ1_INTE_SM3_RESET _u(0x0) #define PIO_IRQ1_INTE_SM3_BITS _u(0x00000800) #define PIO_IRQ1_INTE_SM3_MSB _u(11) #define PIO_IRQ1_INTE_SM3_LSB _u(11) #define PIO_IRQ1_INTE_SM3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM2 // Description : None #define PIO_IRQ1_INTE_SM2_RESET _u(0x0) #define PIO_IRQ1_INTE_SM2_BITS _u(0x00000400) #define PIO_IRQ1_INTE_SM2_MSB _u(10) #define PIO_IRQ1_INTE_SM2_LSB _u(10) #define PIO_IRQ1_INTE_SM2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM1 // Description : None #define PIO_IRQ1_INTE_SM1_RESET _u(0x0) #define PIO_IRQ1_INTE_SM1_BITS _u(0x00000200) #define PIO_IRQ1_INTE_SM1_MSB _u(9) #define PIO_IRQ1_INTE_SM1_LSB _u(9) #define PIO_IRQ1_INTE_SM1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM0 // Description : None #define PIO_IRQ1_INTE_SM0_RESET _u(0x0) #define PIO_IRQ1_INTE_SM0_BITS _u(0x00000100) #define PIO_IRQ1_INTE_SM0_MSB _u(8) #define PIO_IRQ1_INTE_SM0_LSB _u(8) #define PIO_IRQ1_INTE_SM0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM3_TXNFULL // Description : None #define PIO_IRQ1_INTE_SM3_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTE_SM3_TXNFULL_BITS _u(0x00000080) #define PIO_IRQ1_INTE_SM3_TXNFULL_MSB _u(7) #define PIO_IRQ1_INTE_SM3_TXNFULL_LSB _u(7) #define PIO_IRQ1_INTE_SM3_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM2_TXNFULL // Description : None #define PIO_IRQ1_INTE_SM2_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTE_SM2_TXNFULL_BITS _u(0x00000040) #define PIO_IRQ1_INTE_SM2_TXNFULL_MSB _u(6) #define PIO_IRQ1_INTE_SM2_TXNFULL_LSB _u(6) #define PIO_IRQ1_INTE_SM2_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM1_TXNFULL // Description : None #define PIO_IRQ1_INTE_SM1_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTE_SM1_TXNFULL_BITS _u(0x00000020) #define PIO_IRQ1_INTE_SM1_TXNFULL_MSB _u(5) #define PIO_IRQ1_INTE_SM1_TXNFULL_LSB _u(5) #define PIO_IRQ1_INTE_SM1_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM0_TXNFULL // Description : None #define PIO_IRQ1_INTE_SM0_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTE_SM0_TXNFULL_BITS _u(0x00000010) #define PIO_IRQ1_INTE_SM0_TXNFULL_MSB _u(4) #define PIO_IRQ1_INTE_SM0_TXNFULL_LSB _u(4) #define PIO_IRQ1_INTE_SM0_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM3_RXNEMPTY // Description : None #define PIO_IRQ1_INTE_SM3_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTE_SM3_RXNEMPTY_BITS _u(0x00000008) #define PIO_IRQ1_INTE_SM3_RXNEMPTY_MSB _u(3) #define PIO_IRQ1_INTE_SM3_RXNEMPTY_LSB _u(3) #define PIO_IRQ1_INTE_SM3_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM2_RXNEMPTY // Description : None #define PIO_IRQ1_INTE_SM2_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTE_SM2_RXNEMPTY_BITS _u(0x00000004) #define PIO_IRQ1_INTE_SM2_RXNEMPTY_MSB _u(2) #define PIO_IRQ1_INTE_SM2_RXNEMPTY_LSB _u(2) #define PIO_IRQ1_INTE_SM2_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM1_RXNEMPTY // Description : None #define PIO_IRQ1_INTE_SM1_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTE_SM1_RXNEMPTY_BITS _u(0x00000002) #define PIO_IRQ1_INTE_SM1_RXNEMPTY_MSB _u(1) #define PIO_IRQ1_INTE_SM1_RXNEMPTY_LSB _u(1) #define PIO_IRQ1_INTE_SM1_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTE_SM0_RXNEMPTY // Description : None #define PIO_IRQ1_INTE_SM0_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTE_SM0_RXNEMPTY_BITS _u(0x00000001) #define PIO_IRQ1_INTE_SM0_RXNEMPTY_MSB _u(0) #define PIO_IRQ1_INTE_SM0_RXNEMPTY_LSB _u(0) #define PIO_IRQ1_INTE_SM0_RXNEMPTY_ACCESS "RW" // ============================================================================= // Register : PIO_IRQ1_INTF // Description : Interrupt Force for irq1 #define PIO_IRQ1_INTF_OFFSET _u(0x0000013c) #define PIO_IRQ1_INTF_BITS _u(0x00000fff) #define PIO_IRQ1_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM3 // Description : None #define PIO_IRQ1_INTF_SM3_RESET _u(0x0) #define PIO_IRQ1_INTF_SM3_BITS _u(0x00000800) #define PIO_IRQ1_INTF_SM3_MSB _u(11) #define PIO_IRQ1_INTF_SM3_LSB _u(11) #define PIO_IRQ1_INTF_SM3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM2 // Description : None #define PIO_IRQ1_INTF_SM2_RESET _u(0x0) #define PIO_IRQ1_INTF_SM2_BITS _u(0x00000400) #define PIO_IRQ1_INTF_SM2_MSB _u(10) #define PIO_IRQ1_INTF_SM2_LSB _u(10) #define PIO_IRQ1_INTF_SM2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM1 // Description : None #define PIO_IRQ1_INTF_SM1_RESET _u(0x0) #define PIO_IRQ1_INTF_SM1_BITS _u(0x00000200) #define PIO_IRQ1_INTF_SM1_MSB _u(9) #define PIO_IRQ1_INTF_SM1_LSB _u(9) #define PIO_IRQ1_INTF_SM1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM0 // Description : None #define PIO_IRQ1_INTF_SM0_RESET _u(0x0) #define PIO_IRQ1_INTF_SM0_BITS _u(0x00000100) #define PIO_IRQ1_INTF_SM0_MSB _u(8) #define PIO_IRQ1_INTF_SM0_LSB _u(8) #define PIO_IRQ1_INTF_SM0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM3_TXNFULL // Description : None #define PIO_IRQ1_INTF_SM3_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTF_SM3_TXNFULL_BITS _u(0x00000080) #define PIO_IRQ1_INTF_SM3_TXNFULL_MSB _u(7) #define PIO_IRQ1_INTF_SM3_TXNFULL_LSB _u(7) #define PIO_IRQ1_INTF_SM3_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM2_TXNFULL // Description : None #define PIO_IRQ1_INTF_SM2_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTF_SM2_TXNFULL_BITS _u(0x00000040) #define PIO_IRQ1_INTF_SM2_TXNFULL_MSB _u(6) #define PIO_IRQ1_INTF_SM2_TXNFULL_LSB _u(6) #define PIO_IRQ1_INTF_SM2_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM1_TXNFULL // Description : None #define PIO_IRQ1_INTF_SM1_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTF_SM1_TXNFULL_BITS _u(0x00000020) #define PIO_IRQ1_INTF_SM1_TXNFULL_MSB _u(5) #define PIO_IRQ1_INTF_SM1_TXNFULL_LSB _u(5) #define PIO_IRQ1_INTF_SM1_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM0_TXNFULL // Description : None #define PIO_IRQ1_INTF_SM0_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTF_SM0_TXNFULL_BITS _u(0x00000010) #define PIO_IRQ1_INTF_SM0_TXNFULL_MSB _u(4) #define PIO_IRQ1_INTF_SM0_TXNFULL_LSB _u(4) #define PIO_IRQ1_INTF_SM0_TXNFULL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM3_RXNEMPTY // Description : None #define PIO_IRQ1_INTF_SM3_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTF_SM3_RXNEMPTY_BITS _u(0x00000008) #define PIO_IRQ1_INTF_SM3_RXNEMPTY_MSB _u(3) #define PIO_IRQ1_INTF_SM3_RXNEMPTY_LSB _u(3) #define PIO_IRQ1_INTF_SM3_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM2_RXNEMPTY // Description : None #define PIO_IRQ1_INTF_SM2_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTF_SM2_RXNEMPTY_BITS _u(0x00000004) #define PIO_IRQ1_INTF_SM2_RXNEMPTY_MSB _u(2) #define PIO_IRQ1_INTF_SM2_RXNEMPTY_LSB _u(2) #define PIO_IRQ1_INTF_SM2_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM1_RXNEMPTY // Description : None #define PIO_IRQ1_INTF_SM1_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTF_SM1_RXNEMPTY_BITS _u(0x00000002) #define PIO_IRQ1_INTF_SM1_RXNEMPTY_MSB _u(1) #define PIO_IRQ1_INTF_SM1_RXNEMPTY_LSB _u(1) #define PIO_IRQ1_INTF_SM1_RXNEMPTY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTF_SM0_RXNEMPTY // Description : None #define PIO_IRQ1_INTF_SM0_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTF_SM0_RXNEMPTY_BITS _u(0x00000001) #define PIO_IRQ1_INTF_SM0_RXNEMPTY_MSB _u(0) #define PIO_IRQ1_INTF_SM0_RXNEMPTY_LSB _u(0) #define PIO_IRQ1_INTF_SM0_RXNEMPTY_ACCESS "RW" // ============================================================================= // Register : PIO_IRQ1_INTS // Description : Interrupt status after masking & forcing for irq1 #define PIO_IRQ1_INTS_OFFSET _u(0x00000140) #define PIO_IRQ1_INTS_BITS _u(0x00000fff) #define PIO_IRQ1_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM3 // Description : None #define PIO_IRQ1_INTS_SM3_RESET _u(0x0) #define PIO_IRQ1_INTS_SM3_BITS _u(0x00000800) #define PIO_IRQ1_INTS_SM3_MSB _u(11) #define PIO_IRQ1_INTS_SM3_LSB _u(11) #define PIO_IRQ1_INTS_SM3_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM2 // Description : None #define PIO_IRQ1_INTS_SM2_RESET _u(0x0) #define PIO_IRQ1_INTS_SM2_BITS _u(0x00000400) #define PIO_IRQ1_INTS_SM2_MSB _u(10) #define PIO_IRQ1_INTS_SM2_LSB _u(10) #define PIO_IRQ1_INTS_SM2_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM1 // Description : None #define PIO_IRQ1_INTS_SM1_RESET _u(0x0) #define PIO_IRQ1_INTS_SM1_BITS _u(0x00000200) #define PIO_IRQ1_INTS_SM1_MSB _u(9) #define PIO_IRQ1_INTS_SM1_LSB _u(9) #define PIO_IRQ1_INTS_SM1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM0 // Description : None #define PIO_IRQ1_INTS_SM0_RESET _u(0x0) #define PIO_IRQ1_INTS_SM0_BITS _u(0x00000100) #define PIO_IRQ1_INTS_SM0_MSB _u(8) #define PIO_IRQ1_INTS_SM0_LSB _u(8) #define PIO_IRQ1_INTS_SM0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM3_TXNFULL // Description : None #define PIO_IRQ1_INTS_SM3_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTS_SM3_TXNFULL_BITS _u(0x00000080) #define PIO_IRQ1_INTS_SM3_TXNFULL_MSB _u(7) #define PIO_IRQ1_INTS_SM3_TXNFULL_LSB _u(7) #define PIO_IRQ1_INTS_SM3_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM2_TXNFULL // Description : None #define PIO_IRQ1_INTS_SM2_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTS_SM2_TXNFULL_BITS _u(0x00000040) #define PIO_IRQ1_INTS_SM2_TXNFULL_MSB _u(6) #define PIO_IRQ1_INTS_SM2_TXNFULL_LSB _u(6) #define PIO_IRQ1_INTS_SM2_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM1_TXNFULL // Description : None #define PIO_IRQ1_INTS_SM1_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTS_SM1_TXNFULL_BITS _u(0x00000020) #define PIO_IRQ1_INTS_SM1_TXNFULL_MSB _u(5) #define PIO_IRQ1_INTS_SM1_TXNFULL_LSB _u(5) #define PIO_IRQ1_INTS_SM1_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM0_TXNFULL // Description : None #define PIO_IRQ1_INTS_SM0_TXNFULL_RESET _u(0x0) #define PIO_IRQ1_INTS_SM0_TXNFULL_BITS _u(0x00000010) #define PIO_IRQ1_INTS_SM0_TXNFULL_MSB _u(4) #define PIO_IRQ1_INTS_SM0_TXNFULL_LSB _u(4) #define PIO_IRQ1_INTS_SM0_TXNFULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM3_RXNEMPTY // Description : None #define PIO_IRQ1_INTS_SM3_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTS_SM3_RXNEMPTY_BITS _u(0x00000008) #define PIO_IRQ1_INTS_SM3_RXNEMPTY_MSB _u(3) #define PIO_IRQ1_INTS_SM3_RXNEMPTY_LSB _u(3) #define PIO_IRQ1_INTS_SM3_RXNEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM2_RXNEMPTY // Description : None #define PIO_IRQ1_INTS_SM2_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTS_SM2_RXNEMPTY_BITS _u(0x00000004) #define PIO_IRQ1_INTS_SM2_RXNEMPTY_MSB _u(2) #define PIO_IRQ1_INTS_SM2_RXNEMPTY_LSB _u(2) #define PIO_IRQ1_INTS_SM2_RXNEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM1_RXNEMPTY // Description : None #define PIO_IRQ1_INTS_SM1_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTS_SM1_RXNEMPTY_BITS _u(0x00000002) #define PIO_IRQ1_INTS_SM1_RXNEMPTY_MSB _u(1) #define PIO_IRQ1_INTS_SM1_RXNEMPTY_LSB _u(1) #define PIO_IRQ1_INTS_SM1_RXNEMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PIO_IRQ1_INTS_SM0_RXNEMPTY // Description : None #define PIO_IRQ1_INTS_SM0_RXNEMPTY_RESET _u(0x0) #define PIO_IRQ1_INTS_SM0_RXNEMPTY_BITS _u(0x00000001) #define PIO_IRQ1_INTS_SM0_RXNEMPTY_MSB _u(0) #define PIO_IRQ1_INTS_SM0_RXNEMPTY_LSB _u(0) #define PIO_IRQ1_INTS_SM0_RXNEMPTY_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_PIO_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/pll.h ================================================ /** * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : PLL // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_PLL_DEFINED #define HARDWARE_REGS_PLL_DEFINED // ============================================================================= // Register : PLL_CS // Description : Control and Status // GENERAL CONSTRAINTS: // Reference clock frequency min=5MHz, max=800MHz // Feedback divider min=16, max=320 // VCO frequency min=750MHz, max=1600MHz #define PLL_CS_OFFSET _u(0x00000000) #define PLL_CS_BITS _u(0x8000013f) #define PLL_CS_RESET _u(0x00000001) // ----------------------------------------------------------------------------- // Field : PLL_CS_LOCK // Description : PLL is locked #define PLL_CS_LOCK_RESET _u(0x0) #define PLL_CS_LOCK_BITS _u(0x80000000) #define PLL_CS_LOCK_MSB _u(31) #define PLL_CS_LOCK_LSB _u(31) #define PLL_CS_LOCK_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PLL_CS_BYPASS // Description : Passes the reference clock to the output instead of the divided // VCO. The VCO continues to run so the user can switch between // the reference clock and the divided VCO but the output will // glitch when doing so. #define PLL_CS_BYPASS_RESET _u(0x0) #define PLL_CS_BYPASS_BITS _u(0x00000100) #define PLL_CS_BYPASS_MSB _u(8) #define PLL_CS_BYPASS_LSB _u(8) #define PLL_CS_BYPASS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PLL_CS_REFDIV // Description : Divides the PLL input reference clock. // Behaviour is undefined for div=0. // PLL output will be unpredictable during refdiv changes, wait // for lock=1 before using it. #define PLL_CS_REFDIV_RESET _u(0x01) #define PLL_CS_REFDIV_BITS _u(0x0000003f) #define PLL_CS_REFDIV_MSB _u(5) #define PLL_CS_REFDIV_LSB _u(0) #define PLL_CS_REFDIV_ACCESS "RW" // ============================================================================= // Register : PLL_PWR // Description : Controls the PLL power modes. #define PLL_PWR_OFFSET _u(0x00000004) #define PLL_PWR_BITS _u(0x0000002d) #define PLL_PWR_RESET _u(0x0000002d) // ----------------------------------------------------------------------------- // Field : PLL_PWR_VCOPD // Description : PLL VCO powerdown // To save power set high when PLL output not required or // bypass=1. #define PLL_PWR_VCOPD_RESET _u(0x1) #define PLL_PWR_VCOPD_BITS _u(0x00000020) #define PLL_PWR_VCOPD_MSB _u(5) #define PLL_PWR_VCOPD_LSB _u(5) #define PLL_PWR_VCOPD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PLL_PWR_POSTDIVPD // Description : PLL post divider powerdown // To save power set high when PLL output not required or // bypass=1. #define PLL_PWR_POSTDIVPD_RESET _u(0x1) #define PLL_PWR_POSTDIVPD_BITS _u(0x00000008) #define PLL_PWR_POSTDIVPD_MSB _u(3) #define PLL_PWR_POSTDIVPD_LSB _u(3) #define PLL_PWR_POSTDIVPD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PLL_PWR_DSMPD // Description : PLL DSM powerdown // Nothing is achieved by setting this low. #define PLL_PWR_DSMPD_RESET _u(0x1) #define PLL_PWR_DSMPD_BITS _u(0x00000004) #define PLL_PWR_DSMPD_MSB _u(2) #define PLL_PWR_DSMPD_LSB _u(2) #define PLL_PWR_DSMPD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PLL_PWR_PD // Description : PLL powerdown // To save power set high when PLL output not required. #define PLL_PWR_PD_RESET _u(0x1) #define PLL_PWR_PD_BITS _u(0x00000001) #define PLL_PWR_PD_MSB _u(0) #define PLL_PWR_PD_LSB _u(0) #define PLL_PWR_PD_ACCESS "RW" // ============================================================================= // Register : PLL_FBDIV_INT // Description : Feedback divisor // (note: this PLL does not support fractional division) // see ctrl reg description for constraints #define PLL_FBDIV_INT_OFFSET _u(0x00000008) #define PLL_FBDIV_INT_BITS _u(0x00000fff) #define PLL_FBDIV_INT_RESET _u(0x00000000) #define PLL_FBDIV_INT_MSB _u(11) #define PLL_FBDIV_INT_LSB _u(0) #define PLL_FBDIV_INT_ACCESS "RW" // ============================================================================= // Register : PLL_PRIM // Description : Controls the PLL post dividers for the primary output // (note: this PLL does not have a secondary output) // the primary output is driven from VCO divided by // postdiv1*postdiv2 #define PLL_PRIM_OFFSET _u(0x0000000c) #define PLL_PRIM_BITS _u(0x00077000) #define PLL_PRIM_RESET _u(0x00077000) // ----------------------------------------------------------------------------- // Field : PLL_PRIM_POSTDIV1 // Description : divide by 1-7 #define PLL_PRIM_POSTDIV1_RESET _u(0x7) #define PLL_PRIM_POSTDIV1_BITS _u(0x00070000) #define PLL_PRIM_POSTDIV1_MSB _u(18) #define PLL_PRIM_POSTDIV1_LSB _u(16) #define PLL_PRIM_POSTDIV1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PLL_PRIM_POSTDIV2 // Description : divide by 1-7 #define PLL_PRIM_POSTDIV2_RESET _u(0x7) #define PLL_PRIM_POSTDIV2_BITS _u(0x00007000) #define PLL_PRIM_POSTDIV2_MSB _u(14) #define PLL_PRIM_POSTDIV2_LSB _u(12) #define PLL_PRIM_POSTDIV2_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_PLL_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/psm.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : PSM // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_PSM_DEFINED #define HARDWARE_REGS_PSM_DEFINED // ============================================================================= // Register : PSM_FRCE_ON // Description : Force block out of reset (i.e. power it on) #define PSM_FRCE_ON_OFFSET _u(0x00000000) #define PSM_FRCE_ON_BITS _u(0x0001ffff) #define PSM_FRCE_ON_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_PROC1 // Description : None #define PSM_FRCE_ON_PROC1_RESET _u(0x0) #define PSM_FRCE_ON_PROC1_BITS _u(0x00010000) #define PSM_FRCE_ON_PROC1_MSB _u(16) #define PSM_FRCE_ON_PROC1_LSB _u(16) #define PSM_FRCE_ON_PROC1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_PROC0 // Description : None #define PSM_FRCE_ON_PROC0_RESET _u(0x0) #define PSM_FRCE_ON_PROC0_BITS _u(0x00008000) #define PSM_FRCE_ON_PROC0_MSB _u(15) #define PSM_FRCE_ON_PROC0_LSB _u(15) #define PSM_FRCE_ON_PROC0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_SIO // Description : None #define PSM_FRCE_ON_SIO_RESET _u(0x0) #define PSM_FRCE_ON_SIO_BITS _u(0x00004000) #define PSM_FRCE_ON_SIO_MSB _u(14) #define PSM_FRCE_ON_SIO_LSB _u(14) #define PSM_FRCE_ON_SIO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_VREG_AND_CHIP_RESET // Description : None #define PSM_FRCE_ON_VREG_AND_CHIP_RESET_RESET _u(0x0) #define PSM_FRCE_ON_VREG_AND_CHIP_RESET_BITS _u(0x00002000) #define PSM_FRCE_ON_VREG_AND_CHIP_RESET_MSB _u(13) #define PSM_FRCE_ON_VREG_AND_CHIP_RESET_LSB _u(13) #define PSM_FRCE_ON_VREG_AND_CHIP_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_XIP // Description : None #define PSM_FRCE_ON_XIP_RESET _u(0x0) #define PSM_FRCE_ON_XIP_BITS _u(0x00001000) #define PSM_FRCE_ON_XIP_MSB _u(12) #define PSM_FRCE_ON_XIP_LSB _u(12) #define PSM_FRCE_ON_XIP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_SRAM5 // Description : None #define PSM_FRCE_ON_SRAM5_RESET _u(0x0) #define PSM_FRCE_ON_SRAM5_BITS _u(0x00000800) #define PSM_FRCE_ON_SRAM5_MSB _u(11) #define PSM_FRCE_ON_SRAM5_LSB _u(11) #define PSM_FRCE_ON_SRAM5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_SRAM4 // Description : None #define PSM_FRCE_ON_SRAM4_RESET _u(0x0) #define PSM_FRCE_ON_SRAM4_BITS _u(0x00000400) #define PSM_FRCE_ON_SRAM4_MSB _u(10) #define PSM_FRCE_ON_SRAM4_LSB _u(10) #define PSM_FRCE_ON_SRAM4_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_SRAM3 // Description : None #define PSM_FRCE_ON_SRAM3_RESET _u(0x0) #define PSM_FRCE_ON_SRAM3_BITS _u(0x00000200) #define PSM_FRCE_ON_SRAM3_MSB _u(9) #define PSM_FRCE_ON_SRAM3_LSB _u(9) #define PSM_FRCE_ON_SRAM3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_SRAM2 // Description : None #define PSM_FRCE_ON_SRAM2_RESET _u(0x0) #define PSM_FRCE_ON_SRAM2_BITS _u(0x00000100) #define PSM_FRCE_ON_SRAM2_MSB _u(8) #define PSM_FRCE_ON_SRAM2_LSB _u(8) #define PSM_FRCE_ON_SRAM2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_SRAM1 // Description : None #define PSM_FRCE_ON_SRAM1_RESET _u(0x0) #define PSM_FRCE_ON_SRAM1_BITS _u(0x00000080) #define PSM_FRCE_ON_SRAM1_MSB _u(7) #define PSM_FRCE_ON_SRAM1_LSB _u(7) #define PSM_FRCE_ON_SRAM1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_SRAM0 // Description : None #define PSM_FRCE_ON_SRAM0_RESET _u(0x0) #define PSM_FRCE_ON_SRAM0_BITS _u(0x00000040) #define PSM_FRCE_ON_SRAM0_MSB _u(6) #define PSM_FRCE_ON_SRAM0_LSB _u(6) #define PSM_FRCE_ON_SRAM0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_ROM // Description : None #define PSM_FRCE_ON_ROM_RESET _u(0x0) #define PSM_FRCE_ON_ROM_BITS _u(0x00000020) #define PSM_FRCE_ON_ROM_MSB _u(5) #define PSM_FRCE_ON_ROM_LSB _u(5) #define PSM_FRCE_ON_ROM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_BUSFABRIC // Description : None #define PSM_FRCE_ON_BUSFABRIC_RESET _u(0x0) #define PSM_FRCE_ON_BUSFABRIC_BITS _u(0x00000010) #define PSM_FRCE_ON_BUSFABRIC_MSB _u(4) #define PSM_FRCE_ON_BUSFABRIC_LSB _u(4) #define PSM_FRCE_ON_BUSFABRIC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_RESETS // Description : None #define PSM_FRCE_ON_RESETS_RESET _u(0x0) #define PSM_FRCE_ON_RESETS_BITS _u(0x00000008) #define PSM_FRCE_ON_RESETS_MSB _u(3) #define PSM_FRCE_ON_RESETS_LSB _u(3) #define PSM_FRCE_ON_RESETS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_CLOCKS // Description : None #define PSM_FRCE_ON_CLOCKS_RESET _u(0x0) #define PSM_FRCE_ON_CLOCKS_BITS _u(0x00000004) #define PSM_FRCE_ON_CLOCKS_MSB _u(2) #define PSM_FRCE_ON_CLOCKS_LSB _u(2) #define PSM_FRCE_ON_CLOCKS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_XOSC // Description : None #define PSM_FRCE_ON_XOSC_RESET _u(0x0) #define PSM_FRCE_ON_XOSC_BITS _u(0x00000002) #define PSM_FRCE_ON_XOSC_MSB _u(1) #define PSM_FRCE_ON_XOSC_LSB _u(1) #define PSM_FRCE_ON_XOSC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_ON_ROSC // Description : None #define PSM_FRCE_ON_ROSC_RESET _u(0x0) #define PSM_FRCE_ON_ROSC_BITS _u(0x00000001) #define PSM_FRCE_ON_ROSC_MSB _u(0) #define PSM_FRCE_ON_ROSC_LSB _u(0) #define PSM_FRCE_ON_ROSC_ACCESS "RW" // ============================================================================= // Register : PSM_FRCE_OFF // Description : Force into reset (i.e. power it off) #define PSM_FRCE_OFF_OFFSET _u(0x00000004) #define PSM_FRCE_OFF_BITS _u(0x0001ffff) #define PSM_FRCE_OFF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_PROC1 // Description : None #define PSM_FRCE_OFF_PROC1_RESET _u(0x0) #define PSM_FRCE_OFF_PROC1_BITS _u(0x00010000) #define PSM_FRCE_OFF_PROC1_MSB _u(16) #define PSM_FRCE_OFF_PROC1_LSB _u(16) #define PSM_FRCE_OFF_PROC1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_PROC0 // Description : None #define PSM_FRCE_OFF_PROC0_RESET _u(0x0) #define PSM_FRCE_OFF_PROC0_BITS _u(0x00008000) #define PSM_FRCE_OFF_PROC0_MSB _u(15) #define PSM_FRCE_OFF_PROC0_LSB _u(15) #define PSM_FRCE_OFF_PROC0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_SIO // Description : None #define PSM_FRCE_OFF_SIO_RESET _u(0x0) #define PSM_FRCE_OFF_SIO_BITS _u(0x00004000) #define PSM_FRCE_OFF_SIO_MSB _u(14) #define PSM_FRCE_OFF_SIO_LSB _u(14) #define PSM_FRCE_OFF_SIO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_VREG_AND_CHIP_RESET // Description : None #define PSM_FRCE_OFF_VREG_AND_CHIP_RESET_RESET _u(0x0) #define PSM_FRCE_OFF_VREG_AND_CHIP_RESET_BITS _u(0x00002000) #define PSM_FRCE_OFF_VREG_AND_CHIP_RESET_MSB _u(13) #define PSM_FRCE_OFF_VREG_AND_CHIP_RESET_LSB _u(13) #define PSM_FRCE_OFF_VREG_AND_CHIP_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_XIP // Description : None #define PSM_FRCE_OFF_XIP_RESET _u(0x0) #define PSM_FRCE_OFF_XIP_BITS _u(0x00001000) #define PSM_FRCE_OFF_XIP_MSB _u(12) #define PSM_FRCE_OFF_XIP_LSB _u(12) #define PSM_FRCE_OFF_XIP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_SRAM5 // Description : None #define PSM_FRCE_OFF_SRAM5_RESET _u(0x0) #define PSM_FRCE_OFF_SRAM5_BITS _u(0x00000800) #define PSM_FRCE_OFF_SRAM5_MSB _u(11) #define PSM_FRCE_OFF_SRAM5_LSB _u(11) #define PSM_FRCE_OFF_SRAM5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_SRAM4 // Description : None #define PSM_FRCE_OFF_SRAM4_RESET _u(0x0) #define PSM_FRCE_OFF_SRAM4_BITS _u(0x00000400) #define PSM_FRCE_OFF_SRAM4_MSB _u(10) #define PSM_FRCE_OFF_SRAM4_LSB _u(10) #define PSM_FRCE_OFF_SRAM4_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_SRAM3 // Description : None #define PSM_FRCE_OFF_SRAM3_RESET _u(0x0) #define PSM_FRCE_OFF_SRAM3_BITS _u(0x00000200) #define PSM_FRCE_OFF_SRAM3_MSB _u(9) #define PSM_FRCE_OFF_SRAM3_LSB _u(9) #define PSM_FRCE_OFF_SRAM3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_SRAM2 // Description : None #define PSM_FRCE_OFF_SRAM2_RESET _u(0x0) #define PSM_FRCE_OFF_SRAM2_BITS _u(0x00000100) #define PSM_FRCE_OFF_SRAM2_MSB _u(8) #define PSM_FRCE_OFF_SRAM2_LSB _u(8) #define PSM_FRCE_OFF_SRAM2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_SRAM1 // Description : None #define PSM_FRCE_OFF_SRAM1_RESET _u(0x0) #define PSM_FRCE_OFF_SRAM1_BITS _u(0x00000080) #define PSM_FRCE_OFF_SRAM1_MSB _u(7) #define PSM_FRCE_OFF_SRAM1_LSB _u(7) #define PSM_FRCE_OFF_SRAM1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_SRAM0 // Description : None #define PSM_FRCE_OFF_SRAM0_RESET _u(0x0) #define PSM_FRCE_OFF_SRAM0_BITS _u(0x00000040) #define PSM_FRCE_OFF_SRAM0_MSB _u(6) #define PSM_FRCE_OFF_SRAM0_LSB _u(6) #define PSM_FRCE_OFF_SRAM0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_ROM // Description : None #define PSM_FRCE_OFF_ROM_RESET _u(0x0) #define PSM_FRCE_OFF_ROM_BITS _u(0x00000020) #define PSM_FRCE_OFF_ROM_MSB _u(5) #define PSM_FRCE_OFF_ROM_LSB _u(5) #define PSM_FRCE_OFF_ROM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_BUSFABRIC // Description : None #define PSM_FRCE_OFF_BUSFABRIC_RESET _u(0x0) #define PSM_FRCE_OFF_BUSFABRIC_BITS _u(0x00000010) #define PSM_FRCE_OFF_BUSFABRIC_MSB _u(4) #define PSM_FRCE_OFF_BUSFABRIC_LSB _u(4) #define PSM_FRCE_OFF_BUSFABRIC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_RESETS // Description : None #define PSM_FRCE_OFF_RESETS_RESET _u(0x0) #define PSM_FRCE_OFF_RESETS_BITS _u(0x00000008) #define PSM_FRCE_OFF_RESETS_MSB _u(3) #define PSM_FRCE_OFF_RESETS_LSB _u(3) #define PSM_FRCE_OFF_RESETS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_CLOCKS // Description : None #define PSM_FRCE_OFF_CLOCKS_RESET _u(0x0) #define PSM_FRCE_OFF_CLOCKS_BITS _u(0x00000004) #define PSM_FRCE_OFF_CLOCKS_MSB _u(2) #define PSM_FRCE_OFF_CLOCKS_LSB _u(2) #define PSM_FRCE_OFF_CLOCKS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_XOSC // Description : None #define PSM_FRCE_OFF_XOSC_RESET _u(0x0) #define PSM_FRCE_OFF_XOSC_BITS _u(0x00000002) #define PSM_FRCE_OFF_XOSC_MSB _u(1) #define PSM_FRCE_OFF_XOSC_LSB _u(1) #define PSM_FRCE_OFF_XOSC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_FRCE_OFF_ROSC // Description : None #define PSM_FRCE_OFF_ROSC_RESET _u(0x0) #define PSM_FRCE_OFF_ROSC_BITS _u(0x00000001) #define PSM_FRCE_OFF_ROSC_MSB _u(0) #define PSM_FRCE_OFF_ROSC_LSB _u(0) #define PSM_FRCE_OFF_ROSC_ACCESS "RW" // ============================================================================= // Register : PSM_WDSEL // Description : Set to 1 if this peripheral should be reset when the watchdog // fires. #define PSM_WDSEL_OFFSET _u(0x00000008) #define PSM_WDSEL_BITS _u(0x0001ffff) #define PSM_WDSEL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_PROC1 // Description : None #define PSM_WDSEL_PROC1_RESET _u(0x0) #define PSM_WDSEL_PROC1_BITS _u(0x00010000) #define PSM_WDSEL_PROC1_MSB _u(16) #define PSM_WDSEL_PROC1_LSB _u(16) #define PSM_WDSEL_PROC1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_PROC0 // Description : None #define PSM_WDSEL_PROC0_RESET _u(0x0) #define PSM_WDSEL_PROC0_BITS _u(0x00008000) #define PSM_WDSEL_PROC0_MSB _u(15) #define PSM_WDSEL_PROC0_LSB _u(15) #define PSM_WDSEL_PROC0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_SIO // Description : None #define PSM_WDSEL_SIO_RESET _u(0x0) #define PSM_WDSEL_SIO_BITS _u(0x00004000) #define PSM_WDSEL_SIO_MSB _u(14) #define PSM_WDSEL_SIO_LSB _u(14) #define PSM_WDSEL_SIO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_VREG_AND_CHIP_RESET // Description : None #define PSM_WDSEL_VREG_AND_CHIP_RESET_RESET _u(0x0) #define PSM_WDSEL_VREG_AND_CHIP_RESET_BITS _u(0x00002000) #define PSM_WDSEL_VREG_AND_CHIP_RESET_MSB _u(13) #define PSM_WDSEL_VREG_AND_CHIP_RESET_LSB _u(13) #define PSM_WDSEL_VREG_AND_CHIP_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_XIP // Description : None #define PSM_WDSEL_XIP_RESET _u(0x0) #define PSM_WDSEL_XIP_BITS _u(0x00001000) #define PSM_WDSEL_XIP_MSB _u(12) #define PSM_WDSEL_XIP_LSB _u(12) #define PSM_WDSEL_XIP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_SRAM5 // Description : None #define PSM_WDSEL_SRAM5_RESET _u(0x0) #define PSM_WDSEL_SRAM5_BITS _u(0x00000800) #define PSM_WDSEL_SRAM5_MSB _u(11) #define PSM_WDSEL_SRAM5_LSB _u(11) #define PSM_WDSEL_SRAM5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_SRAM4 // Description : None #define PSM_WDSEL_SRAM4_RESET _u(0x0) #define PSM_WDSEL_SRAM4_BITS _u(0x00000400) #define PSM_WDSEL_SRAM4_MSB _u(10) #define PSM_WDSEL_SRAM4_LSB _u(10) #define PSM_WDSEL_SRAM4_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_SRAM3 // Description : None #define PSM_WDSEL_SRAM3_RESET _u(0x0) #define PSM_WDSEL_SRAM3_BITS _u(0x00000200) #define PSM_WDSEL_SRAM3_MSB _u(9) #define PSM_WDSEL_SRAM3_LSB _u(9) #define PSM_WDSEL_SRAM3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_SRAM2 // Description : None #define PSM_WDSEL_SRAM2_RESET _u(0x0) #define PSM_WDSEL_SRAM2_BITS _u(0x00000100) #define PSM_WDSEL_SRAM2_MSB _u(8) #define PSM_WDSEL_SRAM2_LSB _u(8) #define PSM_WDSEL_SRAM2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_SRAM1 // Description : None #define PSM_WDSEL_SRAM1_RESET _u(0x0) #define PSM_WDSEL_SRAM1_BITS _u(0x00000080) #define PSM_WDSEL_SRAM1_MSB _u(7) #define PSM_WDSEL_SRAM1_LSB _u(7) #define PSM_WDSEL_SRAM1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_SRAM0 // Description : None #define PSM_WDSEL_SRAM0_RESET _u(0x0) #define PSM_WDSEL_SRAM0_BITS _u(0x00000040) #define PSM_WDSEL_SRAM0_MSB _u(6) #define PSM_WDSEL_SRAM0_LSB _u(6) #define PSM_WDSEL_SRAM0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_ROM // Description : None #define PSM_WDSEL_ROM_RESET _u(0x0) #define PSM_WDSEL_ROM_BITS _u(0x00000020) #define PSM_WDSEL_ROM_MSB _u(5) #define PSM_WDSEL_ROM_LSB _u(5) #define PSM_WDSEL_ROM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_BUSFABRIC // Description : None #define PSM_WDSEL_BUSFABRIC_RESET _u(0x0) #define PSM_WDSEL_BUSFABRIC_BITS _u(0x00000010) #define PSM_WDSEL_BUSFABRIC_MSB _u(4) #define PSM_WDSEL_BUSFABRIC_LSB _u(4) #define PSM_WDSEL_BUSFABRIC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_RESETS // Description : None #define PSM_WDSEL_RESETS_RESET _u(0x0) #define PSM_WDSEL_RESETS_BITS _u(0x00000008) #define PSM_WDSEL_RESETS_MSB _u(3) #define PSM_WDSEL_RESETS_LSB _u(3) #define PSM_WDSEL_RESETS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_CLOCKS // Description : None #define PSM_WDSEL_CLOCKS_RESET _u(0x0) #define PSM_WDSEL_CLOCKS_BITS _u(0x00000004) #define PSM_WDSEL_CLOCKS_MSB _u(2) #define PSM_WDSEL_CLOCKS_LSB _u(2) #define PSM_WDSEL_CLOCKS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_XOSC // Description : None #define PSM_WDSEL_XOSC_RESET _u(0x0) #define PSM_WDSEL_XOSC_BITS _u(0x00000002) #define PSM_WDSEL_XOSC_MSB _u(1) #define PSM_WDSEL_XOSC_LSB _u(1) #define PSM_WDSEL_XOSC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PSM_WDSEL_ROSC // Description : None #define PSM_WDSEL_ROSC_RESET _u(0x0) #define PSM_WDSEL_ROSC_BITS _u(0x00000001) #define PSM_WDSEL_ROSC_MSB _u(0) #define PSM_WDSEL_ROSC_LSB _u(0) #define PSM_WDSEL_ROSC_ACCESS "RW" // ============================================================================= // Register : PSM_DONE // Description : Indicates the peripheral's registers are ready to access. #define PSM_DONE_OFFSET _u(0x0000000c) #define PSM_DONE_BITS _u(0x0001ffff) #define PSM_DONE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PSM_DONE_PROC1 // Description : None #define PSM_DONE_PROC1_RESET _u(0x0) #define PSM_DONE_PROC1_BITS _u(0x00010000) #define PSM_DONE_PROC1_MSB _u(16) #define PSM_DONE_PROC1_LSB _u(16) #define PSM_DONE_PROC1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_PROC0 // Description : None #define PSM_DONE_PROC0_RESET _u(0x0) #define PSM_DONE_PROC0_BITS _u(0x00008000) #define PSM_DONE_PROC0_MSB _u(15) #define PSM_DONE_PROC0_LSB _u(15) #define PSM_DONE_PROC0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_SIO // Description : None #define PSM_DONE_SIO_RESET _u(0x0) #define PSM_DONE_SIO_BITS _u(0x00004000) #define PSM_DONE_SIO_MSB _u(14) #define PSM_DONE_SIO_LSB _u(14) #define PSM_DONE_SIO_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_VREG_AND_CHIP_RESET // Description : None #define PSM_DONE_VREG_AND_CHIP_RESET_RESET _u(0x0) #define PSM_DONE_VREG_AND_CHIP_RESET_BITS _u(0x00002000) #define PSM_DONE_VREG_AND_CHIP_RESET_MSB _u(13) #define PSM_DONE_VREG_AND_CHIP_RESET_LSB _u(13) #define PSM_DONE_VREG_AND_CHIP_RESET_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_XIP // Description : None #define PSM_DONE_XIP_RESET _u(0x0) #define PSM_DONE_XIP_BITS _u(0x00001000) #define PSM_DONE_XIP_MSB _u(12) #define PSM_DONE_XIP_LSB _u(12) #define PSM_DONE_XIP_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_SRAM5 // Description : None #define PSM_DONE_SRAM5_RESET _u(0x0) #define PSM_DONE_SRAM5_BITS _u(0x00000800) #define PSM_DONE_SRAM5_MSB _u(11) #define PSM_DONE_SRAM5_LSB _u(11) #define PSM_DONE_SRAM5_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_SRAM4 // Description : None #define PSM_DONE_SRAM4_RESET _u(0x0) #define PSM_DONE_SRAM4_BITS _u(0x00000400) #define PSM_DONE_SRAM4_MSB _u(10) #define PSM_DONE_SRAM4_LSB _u(10) #define PSM_DONE_SRAM4_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_SRAM3 // Description : None #define PSM_DONE_SRAM3_RESET _u(0x0) #define PSM_DONE_SRAM3_BITS _u(0x00000200) #define PSM_DONE_SRAM3_MSB _u(9) #define PSM_DONE_SRAM3_LSB _u(9) #define PSM_DONE_SRAM3_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_SRAM2 // Description : None #define PSM_DONE_SRAM2_RESET _u(0x0) #define PSM_DONE_SRAM2_BITS _u(0x00000100) #define PSM_DONE_SRAM2_MSB _u(8) #define PSM_DONE_SRAM2_LSB _u(8) #define PSM_DONE_SRAM2_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_SRAM1 // Description : None #define PSM_DONE_SRAM1_RESET _u(0x0) #define PSM_DONE_SRAM1_BITS _u(0x00000080) #define PSM_DONE_SRAM1_MSB _u(7) #define PSM_DONE_SRAM1_LSB _u(7) #define PSM_DONE_SRAM1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_SRAM0 // Description : None #define PSM_DONE_SRAM0_RESET _u(0x0) #define PSM_DONE_SRAM0_BITS _u(0x00000040) #define PSM_DONE_SRAM0_MSB _u(6) #define PSM_DONE_SRAM0_LSB _u(6) #define PSM_DONE_SRAM0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_ROM // Description : None #define PSM_DONE_ROM_RESET _u(0x0) #define PSM_DONE_ROM_BITS _u(0x00000020) #define PSM_DONE_ROM_MSB _u(5) #define PSM_DONE_ROM_LSB _u(5) #define PSM_DONE_ROM_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_BUSFABRIC // Description : None #define PSM_DONE_BUSFABRIC_RESET _u(0x0) #define PSM_DONE_BUSFABRIC_BITS _u(0x00000010) #define PSM_DONE_BUSFABRIC_MSB _u(4) #define PSM_DONE_BUSFABRIC_LSB _u(4) #define PSM_DONE_BUSFABRIC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_RESETS // Description : None #define PSM_DONE_RESETS_RESET _u(0x0) #define PSM_DONE_RESETS_BITS _u(0x00000008) #define PSM_DONE_RESETS_MSB _u(3) #define PSM_DONE_RESETS_LSB _u(3) #define PSM_DONE_RESETS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_CLOCKS // Description : None #define PSM_DONE_CLOCKS_RESET _u(0x0) #define PSM_DONE_CLOCKS_BITS _u(0x00000004) #define PSM_DONE_CLOCKS_MSB _u(2) #define PSM_DONE_CLOCKS_LSB _u(2) #define PSM_DONE_CLOCKS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_XOSC // Description : None #define PSM_DONE_XOSC_RESET _u(0x0) #define PSM_DONE_XOSC_BITS _u(0x00000002) #define PSM_DONE_XOSC_MSB _u(1) #define PSM_DONE_XOSC_LSB _u(1) #define PSM_DONE_XOSC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PSM_DONE_ROSC // Description : None #define PSM_DONE_ROSC_RESET _u(0x0) #define PSM_DONE_ROSC_BITS _u(0x00000001) #define PSM_DONE_ROSC_MSB _u(0) #define PSM_DONE_ROSC_LSB _u(0) #define PSM_DONE_ROSC_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_PSM_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/pwm.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : PWM // Version : 1 // Bus type : apb // Description : Simple PWM // ============================================================================= #ifndef HARDWARE_REGS_PWM_DEFINED #define HARDWARE_REGS_PWM_DEFINED // ============================================================================= // Register : PWM_CH0_CSR // Description : Control and status register #define PWM_CH0_CSR_OFFSET _u(0x00000000) #define PWM_CH0_CSR_BITS _u(0x000000ff) #define PWM_CH0_CSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH0_CSR_PH_ADV // Description : Advance the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running // at less than full speed (div_int + div_frac / 16 > 1) #define PWM_CH0_CSR_PH_ADV_RESET _u(0x0) #define PWM_CH0_CSR_PH_ADV_BITS _u(0x00000080) #define PWM_CH0_CSR_PH_ADV_MSB _u(7) #define PWM_CH0_CSR_PH_ADV_LSB _u(7) #define PWM_CH0_CSR_PH_ADV_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH0_CSR_PH_RET // Description : Retard the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running. #define PWM_CH0_CSR_PH_RET_RESET _u(0x0) #define PWM_CH0_CSR_PH_RET_BITS _u(0x00000040) #define PWM_CH0_CSR_PH_RET_MSB _u(6) #define PWM_CH0_CSR_PH_RET_LSB _u(6) #define PWM_CH0_CSR_PH_RET_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH0_CSR_DIVMODE // Description : 0x0 -> Free-running counting at rate dictated by fractional // divider // 0x1 -> Fractional divider operation is gated by the PWM B pin. // 0x2 -> Counter advances with each rising edge of the PWM B pin. // 0x3 -> Counter advances with each falling edge of the PWM B // pin. #define PWM_CH0_CSR_DIVMODE_RESET _u(0x0) #define PWM_CH0_CSR_DIVMODE_BITS _u(0x00000030) #define PWM_CH0_CSR_DIVMODE_MSB _u(5) #define PWM_CH0_CSR_DIVMODE_LSB _u(4) #define PWM_CH0_CSR_DIVMODE_ACCESS "RW" #define PWM_CH0_CSR_DIVMODE_VALUE_DIV _u(0x0) #define PWM_CH0_CSR_DIVMODE_VALUE_LEVEL _u(0x1) #define PWM_CH0_CSR_DIVMODE_VALUE_RISE _u(0x2) #define PWM_CH0_CSR_DIVMODE_VALUE_FALL _u(0x3) // ----------------------------------------------------------------------------- // Field : PWM_CH0_CSR_B_INV // Description : Invert output B #define PWM_CH0_CSR_B_INV_RESET _u(0x0) #define PWM_CH0_CSR_B_INV_BITS _u(0x00000008) #define PWM_CH0_CSR_B_INV_MSB _u(3) #define PWM_CH0_CSR_B_INV_LSB _u(3) #define PWM_CH0_CSR_B_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH0_CSR_A_INV // Description : Invert output A #define PWM_CH0_CSR_A_INV_RESET _u(0x0) #define PWM_CH0_CSR_A_INV_BITS _u(0x00000004) #define PWM_CH0_CSR_A_INV_MSB _u(2) #define PWM_CH0_CSR_A_INV_LSB _u(2) #define PWM_CH0_CSR_A_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH0_CSR_PH_CORRECT // Description : 1: Enable phase-correct modulation. 0: Trailing-edge #define PWM_CH0_CSR_PH_CORRECT_RESET _u(0x0) #define PWM_CH0_CSR_PH_CORRECT_BITS _u(0x00000002) #define PWM_CH0_CSR_PH_CORRECT_MSB _u(1) #define PWM_CH0_CSR_PH_CORRECT_LSB _u(1) #define PWM_CH0_CSR_PH_CORRECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH0_CSR_EN // Description : Enable the PWM channel. #define PWM_CH0_CSR_EN_RESET _u(0x0) #define PWM_CH0_CSR_EN_BITS _u(0x00000001) #define PWM_CH0_CSR_EN_MSB _u(0) #define PWM_CH0_CSR_EN_LSB _u(0) #define PWM_CH0_CSR_EN_ACCESS "RW" // ============================================================================= // Register : PWM_CH0_DIV // Description : INT and FRAC form a fixed-point fractional number. // Counting rate is system clock frequency divided by this number. // Fractional division uses simple 1st-order sigma-delta. #define PWM_CH0_DIV_OFFSET _u(0x00000004) #define PWM_CH0_DIV_BITS _u(0x00000fff) #define PWM_CH0_DIV_RESET _u(0x00000010) // ----------------------------------------------------------------------------- // Field : PWM_CH0_DIV_INT // Description : None #define PWM_CH0_DIV_INT_RESET _u(0x01) #define PWM_CH0_DIV_INT_BITS _u(0x00000ff0) #define PWM_CH0_DIV_INT_MSB _u(11) #define PWM_CH0_DIV_INT_LSB _u(4) #define PWM_CH0_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH0_DIV_FRAC // Description : None #define PWM_CH0_DIV_FRAC_RESET _u(0x0) #define PWM_CH0_DIV_FRAC_BITS _u(0x0000000f) #define PWM_CH0_DIV_FRAC_MSB _u(3) #define PWM_CH0_DIV_FRAC_LSB _u(0) #define PWM_CH0_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PWM_CH0_CTR // Description : Direct access to the PWM counter #define PWM_CH0_CTR_OFFSET _u(0x00000008) #define PWM_CH0_CTR_BITS _u(0x0000ffff) #define PWM_CH0_CTR_RESET _u(0x00000000) #define PWM_CH0_CTR_MSB _u(15) #define PWM_CH0_CTR_LSB _u(0) #define PWM_CH0_CTR_ACCESS "RW" // ============================================================================= // Register : PWM_CH0_CC // Description : Counter compare values #define PWM_CH0_CC_OFFSET _u(0x0000000c) #define PWM_CH0_CC_BITS _u(0xffffffff) #define PWM_CH0_CC_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH0_CC_B // Description : None #define PWM_CH0_CC_B_RESET _u(0x0000) #define PWM_CH0_CC_B_BITS _u(0xffff0000) #define PWM_CH0_CC_B_MSB _u(31) #define PWM_CH0_CC_B_LSB _u(16) #define PWM_CH0_CC_B_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH0_CC_A // Description : None #define PWM_CH0_CC_A_RESET _u(0x0000) #define PWM_CH0_CC_A_BITS _u(0x0000ffff) #define PWM_CH0_CC_A_MSB _u(15) #define PWM_CH0_CC_A_LSB _u(0) #define PWM_CH0_CC_A_ACCESS "RW" // ============================================================================= // Register : PWM_CH0_TOP // Description : Counter wrap value #define PWM_CH0_TOP_OFFSET _u(0x00000010) #define PWM_CH0_TOP_BITS _u(0x0000ffff) #define PWM_CH0_TOP_RESET _u(0x0000ffff) #define PWM_CH0_TOP_MSB _u(15) #define PWM_CH0_TOP_LSB _u(0) #define PWM_CH0_TOP_ACCESS "RW" // ============================================================================= // Register : PWM_CH1_CSR // Description : Control and status register #define PWM_CH1_CSR_OFFSET _u(0x00000014) #define PWM_CH1_CSR_BITS _u(0x000000ff) #define PWM_CH1_CSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH1_CSR_PH_ADV // Description : Advance the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running // at less than full speed (div_int + div_frac / 16 > 1) #define PWM_CH1_CSR_PH_ADV_RESET _u(0x0) #define PWM_CH1_CSR_PH_ADV_BITS _u(0x00000080) #define PWM_CH1_CSR_PH_ADV_MSB _u(7) #define PWM_CH1_CSR_PH_ADV_LSB _u(7) #define PWM_CH1_CSR_PH_ADV_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH1_CSR_PH_RET // Description : Retard the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running. #define PWM_CH1_CSR_PH_RET_RESET _u(0x0) #define PWM_CH1_CSR_PH_RET_BITS _u(0x00000040) #define PWM_CH1_CSR_PH_RET_MSB _u(6) #define PWM_CH1_CSR_PH_RET_LSB _u(6) #define PWM_CH1_CSR_PH_RET_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH1_CSR_DIVMODE // Description : 0x0 -> Free-running counting at rate dictated by fractional // divider // 0x1 -> Fractional divider operation is gated by the PWM B pin. // 0x2 -> Counter advances with each rising edge of the PWM B pin. // 0x3 -> Counter advances with each falling edge of the PWM B // pin. #define PWM_CH1_CSR_DIVMODE_RESET _u(0x0) #define PWM_CH1_CSR_DIVMODE_BITS _u(0x00000030) #define PWM_CH1_CSR_DIVMODE_MSB _u(5) #define PWM_CH1_CSR_DIVMODE_LSB _u(4) #define PWM_CH1_CSR_DIVMODE_ACCESS "RW" #define PWM_CH1_CSR_DIVMODE_VALUE_DIV _u(0x0) #define PWM_CH1_CSR_DIVMODE_VALUE_LEVEL _u(0x1) #define PWM_CH1_CSR_DIVMODE_VALUE_RISE _u(0x2) #define PWM_CH1_CSR_DIVMODE_VALUE_FALL _u(0x3) // ----------------------------------------------------------------------------- // Field : PWM_CH1_CSR_B_INV // Description : Invert output B #define PWM_CH1_CSR_B_INV_RESET _u(0x0) #define PWM_CH1_CSR_B_INV_BITS _u(0x00000008) #define PWM_CH1_CSR_B_INV_MSB _u(3) #define PWM_CH1_CSR_B_INV_LSB _u(3) #define PWM_CH1_CSR_B_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH1_CSR_A_INV // Description : Invert output A #define PWM_CH1_CSR_A_INV_RESET _u(0x0) #define PWM_CH1_CSR_A_INV_BITS _u(0x00000004) #define PWM_CH1_CSR_A_INV_MSB _u(2) #define PWM_CH1_CSR_A_INV_LSB _u(2) #define PWM_CH1_CSR_A_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH1_CSR_PH_CORRECT // Description : 1: Enable phase-correct modulation. 0: Trailing-edge #define PWM_CH1_CSR_PH_CORRECT_RESET _u(0x0) #define PWM_CH1_CSR_PH_CORRECT_BITS _u(0x00000002) #define PWM_CH1_CSR_PH_CORRECT_MSB _u(1) #define PWM_CH1_CSR_PH_CORRECT_LSB _u(1) #define PWM_CH1_CSR_PH_CORRECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH1_CSR_EN // Description : Enable the PWM channel. #define PWM_CH1_CSR_EN_RESET _u(0x0) #define PWM_CH1_CSR_EN_BITS _u(0x00000001) #define PWM_CH1_CSR_EN_MSB _u(0) #define PWM_CH1_CSR_EN_LSB _u(0) #define PWM_CH1_CSR_EN_ACCESS "RW" // ============================================================================= // Register : PWM_CH1_DIV // Description : INT and FRAC form a fixed-point fractional number. // Counting rate is system clock frequency divided by this number. // Fractional division uses simple 1st-order sigma-delta. #define PWM_CH1_DIV_OFFSET _u(0x00000018) #define PWM_CH1_DIV_BITS _u(0x00000fff) #define PWM_CH1_DIV_RESET _u(0x00000010) // ----------------------------------------------------------------------------- // Field : PWM_CH1_DIV_INT // Description : None #define PWM_CH1_DIV_INT_RESET _u(0x01) #define PWM_CH1_DIV_INT_BITS _u(0x00000ff0) #define PWM_CH1_DIV_INT_MSB _u(11) #define PWM_CH1_DIV_INT_LSB _u(4) #define PWM_CH1_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH1_DIV_FRAC // Description : None #define PWM_CH1_DIV_FRAC_RESET _u(0x0) #define PWM_CH1_DIV_FRAC_BITS _u(0x0000000f) #define PWM_CH1_DIV_FRAC_MSB _u(3) #define PWM_CH1_DIV_FRAC_LSB _u(0) #define PWM_CH1_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PWM_CH1_CTR // Description : Direct access to the PWM counter #define PWM_CH1_CTR_OFFSET _u(0x0000001c) #define PWM_CH1_CTR_BITS _u(0x0000ffff) #define PWM_CH1_CTR_RESET _u(0x00000000) #define PWM_CH1_CTR_MSB _u(15) #define PWM_CH1_CTR_LSB _u(0) #define PWM_CH1_CTR_ACCESS "RW" // ============================================================================= // Register : PWM_CH1_CC // Description : Counter compare values #define PWM_CH1_CC_OFFSET _u(0x00000020) #define PWM_CH1_CC_BITS _u(0xffffffff) #define PWM_CH1_CC_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH1_CC_B // Description : None #define PWM_CH1_CC_B_RESET _u(0x0000) #define PWM_CH1_CC_B_BITS _u(0xffff0000) #define PWM_CH1_CC_B_MSB _u(31) #define PWM_CH1_CC_B_LSB _u(16) #define PWM_CH1_CC_B_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH1_CC_A // Description : None #define PWM_CH1_CC_A_RESET _u(0x0000) #define PWM_CH1_CC_A_BITS _u(0x0000ffff) #define PWM_CH1_CC_A_MSB _u(15) #define PWM_CH1_CC_A_LSB _u(0) #define PWM_CH1_CC_A_ACCESS "RW" // ============================================================================= // Register : PWM_CH1_TOP // Description : Counter wrap value #define PWM_CH1_TOP_OFFSET _u(0x00000024) #define PWM_CH1_TOP_BITS _u(0x0000ffff) #define PWM_CH1_TOP_RESET _u(0x0000ffff) #define PWM_CH1_TOP_MSB _u(15) #define PWM_CH1_TOP_LSB _u(0) #define PWM_CH1_TOP_ACCESS "RW" // ============================================================================= // Register : PWM_CH2_CSR // Description : Control and status register #define PWM_CH2_CSR_OFFSET _u(0x00000028) #define PWM_CH2_CSR_BITS _u(0x000000ff) #define PWM_CH2_CSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH2_CSR_PH_ADV // Description : Advance the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running // at less than full speed (div_int + div_frac / 16 > 1) #define PWM_CH2_CSR_PH_ADV_RESET _u(0x0) #define PWM_CH2_CSR_PH_ADV_BITS _u(0x00000080) #define PWM_CH2_CSR_PH_ADV_MSB _u(7) #define PWM_CH2_CSR_PH_ADV_LSB _u(7) #define PWM_CH2_CSR_PH_ADV_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH2_CSR_PH_RET // Description : Retard the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running. #define PWM_CH2_CSR_PH_RET_RESET _u(0x0) #define PWM_CH2_CSR_PH_RET_BITS _u(0x00000040) #define PWM_CH2_CSR_PH_RET_MSB _u(6) #define PWM_CH2_CSR_PH_RET_LSB _u(6) #define PWM_CH2_CSR_PH_RET_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH2_CSR_DIVMODE // Description : 0x0 -> Free-running counting at rate dictated by fractional // divider // 0x1 -> Fractional divider operation is gated by the PWM B pin. // 0x2 -> Counter advances with each rising edge of the PWM B pin. // 0x3 -> Counter advances with each falling edge of the PWM B // pin. #define PWM_CH2_CSR_DIVMODE_RESET _u(0x0) #define PWM_CH2_CSR_DIVMODE_BITS _u(0x00000030) #define PWM_CH2_CSR_DIVMODE_MSB _u(5) #define PWM_CH2_CSR_DIVMODE_LSB _u(4) #define PWM_CH2_CSR_DIVMODE_ACCESS "RW" #define PWM_CH2_CSR_DIVMODE_VALUE_DIV _u(0x0) #define PWM_CH2_CSR_DIVMODE_VALUE_LEVEL _u(0x1) #define PWM_CH2_CSR_DIVMODE_VALUE_RISE _u(0x2) #define PWM_CH2_CSR_DIVMODE_VALUE_FALL _u(0x3) // ----------------------------------------------------------------------------- // Field : PWM_CH2_CSR_B_INV // Description : Invert output B #define PWM_CH2_CSR_B_INV_RESET _u(0x0) #define PWM_CH2_CSR_B_INV_BITS _u(0x00000008) #define PWM_CH2_CSR_B_INV_MSB _u(3) #define PWM_CH2_CSR_B_INV_LSB _u(3) #define PWM_CH2_CSR_B_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH2_CSR_A_INV // Description : Invert output A #define PWM_CH2_CSR_A_INV_RESET _u(0x0) #define PWM_CH2_CSR_A_INV_BITS _u(0x00000004) #define PWM_CH2_CSR_A_INV_MSB _u(2) #define PWM_CH2_CSR_A_INV_LSB _u(2) #define PWM_CH2_CSR_A_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH2_CSR_PH_CORRECT // Description : 1: Enable phase-correct modulation. 0: Trailing-edge #define PWM_CH2_CSR_PH_CORRECT_RESET _u(0x0) #define PWM_CH2_CSR_PH_CORRECT_BITS _u(0x00000002) #define PWM_CH2_CSR_PH_CORRECT_MSB _u(1) #define PWM_CH2_CSR_PH_CORRECT_LSB _u(1) #define PWM_CH2_CSR_PH_CORRECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH2_CSR_EN // Description : Enable the PWM channel. #define PWM_CH2_CSR_EN_RESET _u(0x0) #define PWM_CH2_CSR_EN_BITS _u(0x00000001) #define PWM_CH2_CSR_EN_MSB _u(0) #define PWM_CH2_CSR_EN_LSB _u(0) #define PWM_CH2_CSR_EN_ACCESS "RW" // ============================================================================= // Register : PWM_CH2_DIV // Description : INT and FRAC form a fixed-point fractional number. // Counting rate is system clock frequency divided by this number. // Fractional division uses simple 1st-order sigma-delta. #define PWM_CH2_DIV_OFFSET _u(0x0000002c) #define PWM_CH2_DIV_BITS _u(0x00000fff) #define PWM_CH2_DIV_RESET _u(0x00000010) // ----------------------------------------------------------------------------- // Field : PWM_CH2_DIV_INT // Description : None #define PWM_CH2_DIV_INT_RESET _u(0x01) #define PWM_CH2_DIV_INT_BITS _u(0x00000ff0) #define PWM_CH2_DIV_INT_MSB _u(11) #define PWM_CH2_DIV_INT_LSB _u(4) #define PWM_CH2_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH2_DIV_FRAC // Description : None #define PWM_CH2_DIV_FRAC_RESET _u(0x0) #define PWM_CH2_DIV_FRAC_BITS _u(0x0000000f) #define PWM_CH2_DIV_FRAC_MSB _u(3) #define PWM_CH2_DIV_FRAC_LSB _u(0) #define PWM_CH2_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PWM_CH2_CTR // Description : Direct access to the PWM counter #define PWM_CH2_CTR_OFFSET _u(0x00000030) #define PWM_CH2_CTR_BITS _u(0x0000ffff) #define PWM_CH2_CTR_RESET _u(0x00000000) #define PWM_CH2_CTR_MSB _u(15) #define PWM_CH2_CTR_LSB _u(0) #define PWM_CH2_CTR_ACCESS "RW" // ============================================================================= // Register : PWM_CH2_CC // Description : Counter compare values #define PWM_CH2_CC_OFFSET _u(0x00000034) #define PWM_CH2_CC_BITS _u(0xffffffff) #define PWM_CH2_CC_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH2_CC_B // Description : None #define PWM_CH2_CC_B_RESET _u(0x0000) #define PWM_CH2_CC_B_BITS _u(0xffff0000) #define PWM_CH2_CC_B_MSB _u(31) #define PWM_CH2_CC_B_LSB _u(16) #define PWM_CH2_CC_B_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH2_CC_A // Description : None #define PWM_CH2_CC_A_RESET _u(0x0000) #define PWM_CH2_CC_A_BITS _u(0x0000ffff) #define PWM_CH2_CC_A_MSB _u(15) #define PWM_CH2_CC_A_LSB _u(0) #define PWM_CH2_CC_A_ACCESS "RW" // ============================================================================= // Register : PWM_CH2_TOP // Description : Counter wrap value #define PWM_CH2_TOP_OFFSET _u(0x00000038) #define PWM_CH2_TOP_BITS _u(0x0000ffff) #define PWM_CH2_TOP_RESET _u(0x0000ffff) #define PWM_CH2_TOP_MSB _u(15) #define PWM_CH2_TOP_LSB _u(0) #define PWM_CH2_TOP_ACCESS "RW" // ============================================================================= // Register : PWM_CH3_CSR // Description : Control and status register #define PWM_CH3_CSR_OFFSET _u(0x0000003c) #define PWM_CH3_CSR_BITS _u(0x000000ff) #define PWM_CH3_CSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH3_CSR_PH_ADV // Description : Advance the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running // at less than full speed (div_int + div_frac / 16 > 1) #define PWM_CH3_CSR_PH_ADV_RESET _u(0x0) #define PWM_CH3_CSR_PH_ADV_BITS _u(0x00000080) #define PWM_CH3_CSR_PH_ADV_MSB _u(7) #define PWM_CH3_CSR_PH_ADV_LSB _u(7) #define PWM_CH3_CSR_PH_ADV_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH3_CSR_PH_RET // Description : Retard the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running. #define PWM_CH3_CSR_PH_RET_RESET _u(0x0) #define PWM_CH3_CSR_PH_RET_BITS _u(0x00000040) #define PWM_CH3_CSR_PH_RET_MSB _u(6) #define PWM_CH3_CSR_PH_RET_LSB _u(6) #define PWM_CH3_CSR_PH_RET_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH3_CSR_DIVMODE // Description : 0x0 -> Free-running counting at rate dictated by fractional // divider // 0x1 -> Fractional divider operation is gated by the PWM B pin. // 0x2 -> Counter advances with each rising edge of the PWM B pin. // 0x3 -> Counter advances with each falling edge of the PWM B // pin. #define PWM_CH3_CSR_DIVMODE_RESET _u(0x0) #define PWM_CH3_CSR_DIVMODE_BITS _u(0x00000030) #define PWM_CH3_CSR_DIVMODE_MSB _u(5) #define PWM_CH3_CSR_DIVMODE_LSB _u(4) #define PWM_CH3_CSR_DIVMODE_ACCESS "RW" #define PWM_CH3_CSR_DIVMODE_VALUE_DIV _u(0x0) #define PWM_CH3_CSR_DIVMODE_VALUE_LEVEL _u(0x1) #define PWM_CH3_CSR_DIVMODE_VALUE_RISE _u(0x2) #define PWM_CH3_CSR_DIVMODE_VALUE_FALL _u(0x3) // ----------------------------------------------------------------------------- // Field : PWM_CH3_CSR_B_INV // Description : Invert output B #define PWM_CH3_CSR_B_INV_RESET _u(0x0) #define PWM_CH3_CSR_B_INV_BITS _u(0x00000008) #define PWM_CH3_CSR_B_INV_MSB _u(3) #define PWM_CH3_CSR_B_INV_LSB _u(3) #define PWM_CH3_CSR_B_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH3_CSR_A_INV // Description : Invert output A #define PWM_CH3_CSR_A_INV_RESET _u(0x0) #define PWM_CH3_CSR_A_INV_BITS _u(0x00000004) #define PWM_CH3_CSR_A_INV_MSB _u(2) #define PWM_CH3_CSR_A_INV_LSB _u(2) #define PWM_CH3_CSR_A_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH3_CSR_PH_CORRECT // Description : 1: Enable phase-correct modulation. 0: Trailing-edge #define PWM_CH3_CSR_PH_CORRECT_RESET _u(0x0) #define PWM_CH3_CSR_PH_CORRECT_BITS _u(0x00000002) #define PWM_CH3_CSR_PH_CORRECT_MSB _u(1) #define PWM_CH3_CSR_PH_CORRECT_LSB _u(1) #define PWM_CH3_CSR_PH_CORRECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH3_CSR_EN // Description : Enable the PWM channel. #define PWM_CH3_CSR_EN_RESET _u(0x0) #define PWM_CH3_CSR_EN_BITS _u(0x00000001) #define PWM_CH3_CSR_EN_MSB _u(0) #define PWM_CH3_CSR_EN_LSB _u(0) #define PWM_CH3_CSR_EN_ACCESS "RW" // ============================================================================= // Register : PWM_CH3_DIV // Description : INT and FRAC form a fixed-point fractional number. // Counting rate is system clock frequency divided by this number. // Fractional division uses simple 1st-order sigma-delta. #define PWM_CH3_DIV_OFFSET _u(0x00000040) #define PWM_CH3_DIV_BITS _u(0x00000fff) #define PWM_CH3_DIV_RESET _u(0x00000010) // ----------------------------------------------------------------------------- // Field : PWM_CH3_DIV_INT // Description : None #define PWM_CH3_DIV_INT_RESET _u(0x01) #define PWM_CH3_DIV_INT_BITS _u(0x00000ff0) #define PWM_CH3_DIV_INT_MSB _u(11) #define PWM_CH3_DIV_INT_LSB _u(4) #define PWM_CH3_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH3_DIV_FRAC // Description : None #define PWM_CH3_DIV_FRAC_RESET _u(0x0) #define PWM_CH3_DIV_FRAC_BITS _u(0x0000000f) #define PWM_CH3_DIV_FRAC_MSB _u(3) #define PWM_CH3_DIV_FRAC_LSB _u(0) #define PWM_CH3_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PWM_CH3_CTR // Description : Direct access to the PWM counter #define PWM_CH3_CTR_OFFSET _u(0x00000044) #define PWM_CH3_CTR_BITS _u(0x0000ffff) #define PWM_CH3_CTR_RESET _u(0x00000000) #define PWM_CH3_CTR_MSB _u(15) #define PWM_CH3_CTR_LSB _u(0) #define PWM_CH3_CTR_ACCESS "RW" // ============================================================================= // Register : PWM_CH3_CC // Description : Counter compare values #define PWM_CH3_CC_OFFSET _u(0x00000048) #define PWM_CH3_CC_BITS _u(0xffffffff) #define PWM_CH3_CC_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH3_CC_B // Description : None #define PWM_CH3_CC_B_RESET _u(0x0000) #define PWM_CH3_CC_B_BITS _u(0xffff0000) #define PWM_CH3_CC_B_MSB _u(31) #define PWM_CH3_CC_B_LSB _u(16) #define PWM_CH3_CC_B_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH3_CC_A // Description : None #define PWM_CH3_CC_A_RESET _u(0x0000) #define PWM_CH3_CC_A_BITS _u(0x0000ffff) #define PWM_CH3_CC_A_MSB _u(15) #define PWM_CH3_CC_A_LSB _u(0) #define PWM_CH3_CC_A_ACCESS "RW" // ============================================================================= // Register : PWM_CH3_TOP // Description : Counter wrap value #define PWM_CH3_TOP_OFFSET _u(0x0000004c) #define PWM_CH3_TOP_BITS _u(0x0000ffff) #define PWM_CH3_TOP_RESET _u(0x0000ffff) #define PWM_CH3_TOP_MSB _u(15) #define PWM_CH3_TOP_LSB _u(0) #define PWM_CH3_TOP_ACCESS "RW" // ============================================================================= // Register : PWM_CH4_CSR // Description : Control and status register #define PWM_CH4_CSR_OFFSET _u(0x00000050) #define PWM_CH4_CSR_BITS _u(0x000000ff) #define PWM_CH4_CSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH4_CSR_PH_ADV // Description : Advance the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running // at less than full speed (div_int + div_frac / 16 > 1) #define PWM_CH4_CSR_PH_ADV_RESET _u(0x0) #define PWM_CH4_CSR_PH_ADV_BITS _u(0x00000080) #define PWM_CH4_CSR_PH_ADV_MSB _u(7) #define PWM_CH4_CSR_PH_ADV_LSB _u(7) #define PWM_CH4_CSR_PH_ADV_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH4_CSR_PH_RET // Description : Retard the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running. #define PWM_CH4_CSR_PH_RET_RESET _u(0x0) #define PWM_CH4_CSR_PH_RET_BITS _u(0x00000040) #define PWM_CH4_CSR_PH_RET_MSB _u(6) #define PWM_CH4_CSR_PH_RET_LSB _u(6) #define PWM_CH4_CSR_PH_RET_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH4_CSR_DIVMODE // Description : 0x0 -> Free-running counting at rate dictated by fractional // divider // 0x1 -> Fractional divider operation is gated by the PWM B pin. // 0x2 -> Counter advances with each rising edge of the PWM B pin. // 0x3 -> Counter advances with each falling edge of the PWM B // pin. #define PWM_CH4_CSR_DIVMODE_RESET _u(0x0) #define PWM_CH4_CSR_DIVMODE_BITS _u(0x00000030) #define PWM_CH4_CSR_DIVMODE_MSB _u(5) #define PWM_CH4_CSR_DIVMODE_LSB _u(4) #define PWM_CH4_CSR_DIVMODE_ACCESS "RW" #define PWM_CH4_CSR_DIVMODE_VALUE_DIV _u(0x0) #define PWM_CH4_CSR_DIVMODE_VALUE_LEVEL _u(0x1) #define PWM_CH4_CSR_DIVMODE_VALUE_RISE _u(0x2) #define PWM_CH4_CSR_DIVMODE_VALUE_FALL _u(0x3) // ----------------------------------------------------------------------------- // Field : PWM_CH4_CSR_B_INV // Description : Invert output B #define PWM_CH4_CSR_B_INV_RESET _u(0x0) #define PWM_CH4_CSR_B_INV_BITS _u(0x00000008) #define PWM_CH4_CSR_B_INV_MSB _u(3) #define PWM_CH4_CSR_B_INV_LSB _u(3) #define PWM_CH4_CSR_B_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH4_CSR_A_INV // Description : Invert output A #define PWM_CH4_CSR_A_INV_RESET _u(0x0) #define PWM_CH4_CSR_A_INV_BITS _u(0x00000004) #define PWM_CH4_CSR_A_INV_MSB _u(2) #define PWM_CH4_CSR_A_INV_LSB _u(2) #define PWM_CH4_CSR_A_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH4_CSR_PH_CORRECT // Description : 1: Enable phase-correct modulation. 0: Trailing-edge #define PWM_CH4_CSR_PH_CORRECT_RESET _u(0x0) #define PWM_CH4_CSR_PH_CORRECT_BITS _u(0x00000002) #define PWM_CH4_CSR_PH_CORRECT_MSB _u(1) #define PWM_CH4_CSR_PH_CORRECT_LSB _u(1) #define PWM_CH4_CSR_PH_CORRECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH4_CSR_EN // Description : Enable the PWM channel. #define PWM_CH4_CSR_EN_RESET _u(0x0) #define PWM_CH4_CSR_EN_BITS _u(0x00000001) #define PWM_CH4_CSR_EN_MSB _u(0) #define PWM_CH4_CSR_EN_LSB _u(0) #define PWM_CH4_CSR_EN_ACCESS "RW" // ============================================================================= // Register : PWM_CH4_DIV // Description : INT and FRAC form a fixed-point fractional number. // Counting rate is system clock frequency divided by this number. // Fractional division uses simple 1st-order sigma-delta. #define PWM_CH4_DIV_OFFSET _u(0x00000054) #define PWM_CH4_DIV_BITS _u(0x00000fff) #define PWM_CH4_DIV_RESET _u(0x00000010) // ----------------------------------------------------------------------------- // Field : PWM_CH4_DIV_INT // Description : None #define PWM_CH4_DIV_INT_RESET _u(0x01) #define PWM_CH4_DIV_INT_BITS _u(0x00000ff0) #define PWM_CH4_DIV_INT_MSB _u(11) #define PWM_CH4_DIV_INT_LSB _u(4) #define PWM_CH4_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH4_DIV_FRAC // Description : None #define PWM_CH4_DIV_FRAC_RESET _u(0x0) #define PWM_CH4_DIV_FRAC_BITS _u(0x0000000f) #define PWM_CH4_DIV_FRAC_MSB _u(3) #define PWM_CH4_DIV_FRAC_LSB _u(0) #define PWM_CH4_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PWM_CH4_CTR // Description : Direct access to the PWM counter #define PWM_CH4_CTR_OFFSET _u(0x00000058) #define PWM_CH4_CTR_BITS _u(0x0000ffff) #define PWM_CH4_CTR_RESET _u(0x00000000) #define PWM_CH4_CTR_MSB _u(15) #define PWM_CH4_CTR_LSB _u(0) #define PWM_CH4_CTR_ACCESS "RW" // ============================================================================= // Register : PWM_CH4_CC // Description : Counter compare values #define PWM_CH4_CC_OFFSET _u(0x0000005c) #define PWM_CH4_CC_BITS _u(0xffffffff) #define PWM_CH4_CC_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH4_CC_B // Description : None #define PWM_CH4_CC_B_RESET _u(0x0000) #define PWM_CH4_CC_B_BITS _u(0xffff0000) #define PWM_CH4_CC_B_MSB _u(31) #define PWM_CH4_CC_B_LSB _u(16) #define PWM_CH4_CC_B_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH4_CC_A // Description : None #define PWM_CH4_CC_A_RESET _u(0x0000) #define PWM_CH4_CC_A_BITS _u(0x0000ffff) #define PWM_CH4_CC_A_MSB _u(15) #define PWM_CH4_CC_A_LSB _u(0) #define PWM_CH4_CC_A_ACCESS "RW" // ============================================================================= // Register : PWM_CH4_TOP // Description : Counter wrap value #define PWM_CH4_TOP_OFFSET _u(0x00000060) #define PWM_CH4_TOP_BITS _u(0x0000ffff) #define PWM_CH4_TOP_RESET _u(0x0000ffff) #define PWM_CH4_TOP_MSB _u(15) #define PWM_CH4_TOP_LSB _u(0) #define PWM_CH4_TOP_ACCESS "RW" // ============================================================================= // Register : PWM_CH5_CSR // Description : Control and status register #define PWM_CH5_CSR_OFFSET _u(0x00000064) #define PWM_CH5_CSR_BITS _u(0x000000ff) #define PWM_CH5_CSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH5_CSR_PH_ADV // Description : Advance the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running // at less than full speed (div_int + div_frac / 16 > 1) #define PWM_CH5_CSR_PH_ADV_RESET _u(0x0) #define PWM_CH5_CSR_PH_ADV_BITS _u(0x00000080) #define PWM_CH5_CSR_PH_ADV_MSB _u(7) #define PWM_CH5_CSR_PH_ADV_LSB _u(7) #define PWM_CH5_CSR_PH_ADV_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH5_CSR_PH_RET // Description : Retard the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running. #define PWM_CH5_CSR_PH_RET_RESET _u(0x0) #define PWM_CH5_CSR_PH_RET_BITS _u(0x00000040) #define PWM_CH5_CSR_PH_RET_MSB _u(6) #define PWM_CH5_CSR_PH_RET_LSB _u(6) #define PWM_CH5_CSR_PH_RET_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH5_CSR_DIVMODE // Description : 0x0 -> Free-running counting at rate dictated by fractional // divider // 0x1 -> Fractional divider operation is gated by the PWM B pin. // 0x2 -> Counter advances with each rising edge of the PWM B pin. // 0x3 -> Counter advances with each falling edge of the PWM B // pin. #define PWM_CH5_CSR_DIVMODE_RESET _u(0x0) #define PWM_CH5_CSR_DIVMODE_BITS _u(0x00000030) #define PWM_CH5_CSR_DIVMODE_MSB _u(5) #define PWM_CH5_CSR_DIVMODE_LSB _u(4) #define PWM_CH5_CSR_DIVMODE_ACCESS "RW" #define PWM_CH5_CSR_DIVMODE_VALUE_DIV _u(0x0) #define PWM_CH5_CSR_DIVMODE_VALUE_LEVEL _u(0x1) #define PWM_CH5_CSR_DIVMODE_VALUE_RISE _u(0x2) #define PWM_CH5_CSR_DIVMODE_VALUE_FALL _u(0x3) // ----------------------------------------------------------------------------- // Field : PWM_CH5_CSR_B_INV // Description : Invert output B #define PWM_CH5_CSR_B_INV_RESET _u(0x0) #define PWM_CH5_CSR_B_INV_BITS _u(0x00000008) #define PWM_CH5_CSR_B_INV_MSB _u(3) #define PWM_CH5_CSR_B_INV_LSB _u(3) #define PWM_CH5_CSR_B_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH5_CSR_A_INV // Description : Invert output A #define PWM_CH5_CSR_A_INV_RESET _u(0x0) #define PWM_CH5_CSR_A_INV_BITS _u(0x00000004) #define PWM_CH5_CSR_A_INV_MSB _u(2) #define PWM_CH5_CSR_A_INV_LSB _u(2) #define PWM_CH5_CSR_A_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH5_CSR_PH_CORRECT // Description : 1: Enable phase-correct modulation. 0: Trailing-edge #define PWM_CH5_CSR_PH_CORRECT_RESET _u(0x0) #define PWM_CH5_CSR_PH_CORRECT_BITS _u(0x00000002) #define PWM_CH5_CSR_PH_CORRECT_MSB _u(1) #define PWM_CH5_CSR_PH_CORRECT_LSB _u(1) #define PWM_CH5_CSR_PH_CORRECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH5_CSR_EN // Description : Enable the PWM channel. #define PWM_CH5_CSR_EN_RESET _u(0x0) #define PWM_CH5_CSR_EN_BITS _u(0x00000001) #define PWM_CH5_CSR_EN_MSB _u(0) #define PWM_CH5_CSR_EN_LSB _u(0) #define PWM_CH5_CSR_EN_ACCESS "RW" // ============================================================================= // Register : PWM_CH5_DIV // Description : INT and FRAC form a fixed-point fractional number. // Counting rate is system clock frequency divided by this number. // Fractional division uses simple 1st-order sigma-delta. #define PWM_CH5_DIV_OFFSET _u(0x00000068) #define PWM_CH5_DIV_BITS _u(0x00000fff) #define PWM_CH5_DIV_RESET _u(0x00000010) // ----------------------------------------------------------------------------- // Field : PWM_CH5_DIV_INT // Description : None #define PWM_CH5_DIV_INT_RESET _u(0x01) #define PWM_CH5_DIV_INT_BITS _u(0x00000ff0) #define PWM_CH5_DIV_INT_MSB _u(11) #define PWM_CH5_DIV_INT_LSB _u(4) #define PWM_CH5_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH5_DIV_FRAC // Description : None #define PWM_CH5_DIV_FRAC_RESET _u(0x0) #define PWM_CH5_DIV_FRAC_BITS _u(0x0000000f) #define PWM_CH5_DIV_FRAC_MSB _u(3) #define PWM_CH5_DIV_FRAC_LSB _u(0) #define PWM_CH5_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PWM_CH5_CTR // Description : Direct access to the PWM counter #define PWM_CH5_CTR_OFFSET _u(0x0000006c) #define PWM_CH5_CTR_BITS _u(0x0000ffff) #define PWM_CH5_CTR_RESET _u(0x00000000) #define PWM_CH5_CTR_MSB _u(15) #define PWM_CH5_CTR_LSB _u(0) #define PWM_CH5_CTR_ACCESS "RW" // ============================================================================= // Register : PWM_CH5_CC // Description : Counter compare values #define PWM_CH5_CC_OFFSET _u(0x00000070) #define PWM_CH5_CC_BITS _u(0xffffffff) #define PWM_CH5_CC_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH5_CC_B // Description : None #define PWM_CH5_CC_B_RESET _u(0x0000) #define PWM_CH5_CC_B_BITS _u(0xffff0000) #define PWM_CH5_CC_B_MSB _u(31) #define PWM_CH5_CC_B_LSB _u(16) #define PWM_CH5_CC_B_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH5_CC_A // Description : None #define PWM_CH5_CC_A_RESET _u(0x0000) #define PWM_CH5_CC_A_BITS _u(0x0000ffff) #define PWM_CH5_CC_A_MSB _u(15) #define PWM_CH5_CC_A_LSB _u(0) #define PWM_CH5_CC_A_ACCESS "RW" // ============================================================================= // Register : PWM_CH5_TOP // Description : Counter wrap value #define PWM_CH5_TOP_OFFSET _u(0x00000074) #define PWM_CH5_TOP_BITS _u(0x0000ffff) #define PWM_CH5_TOP_RESET _u(0x0000ffff) #define PWM_CH5_TOP_MSB _u(15) #define PWM_CH5_TOP_LSB _u(0) #define PWM_CH5_TOP_ACCESS "RW" // ============================================================================= // Register : PWM_CH6_CSR // Description : Control and status register #define PWM_CH6_CSR_OFFSET _u(0x00000078) #define PWM_CH6_CSR_BITS _u(0x000000ff) #define PWM_CH6_CSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH6_CSR_PH_ADV // Description : Advance the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running // at less than full speed (div_int + div_frac / 16 > 1) #define PWM_CH6_CSR_PH_ADV_RESET _u(0x0) #define PWM_CH6_CSR_PH_ADV_BITS _u(0x00000080) #define PWM_CH6_CSR_PH_ADV_MSB _u(7) #define PWM_CH6_CSR_PH_ADV_LSB _u(7) #define PWM_CH6_CSR_PH_ADV_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH6_CSR_PH_RET // Description : Retard the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running. #define PWM_CH6_CSR_PH_RET_RESET _u(0x0) #define PWM_CH6_CSR_PH_RET_BITS _u(0x00000040) #define PWM_CH6_CSR_PH_RET_MSB _u(6) #define PWM_CH6_CSR_PH_RET_LSB _u(6) #define PWM_CH6_CSR_PH_RET_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH6_CSR_DIVMODE // Description : 0x0 -> Free-running counting at rate dictated by fractional // divider // 0x1 -> Fractional divider operation is gated by the PWM B pin. // 0x2 -> Counter advances with each rising edge of the PWM B pin. // 0x3 -> Counter advances with each falling edge of the PWM B // pin. #define PWM_CH6_CSR_DIVMODE_RESET _u(0x0) #define PWM_CH6_CSR_DIVMODE_BITS _u(0x00000030) #define PWM_CH6_CSR_DIVMODE_MSB _u(5) #define PWM_CH6_CSR_DIVMODE_LSB _u(4) #define PWM_CH6_CSR_DIVMODE_ACCESS "RW" #define PWM_CH6_CSR_DIVMODE_VALUE_DIV _u(0x0) #define PWM_CH6_CSR_DIVMODE_VALUE_LEVEL _u(0x1) #define PWM_CH6_CSR_DIVMODE_VALUE_RISE _u(0x2) #define PWM_CH6_CSR_DIVMODE_VALUE_FALL _u(0x3) // ----------------------------------------------------------------------------- // Field : PWM_CH6_CSR_B_INV // Description : Invert output B #define PWM_CH6_CSR_B_INV_RESET _u(0x0) #define PWM_CH6_CSR_B_INV_BITS _u(0x00000008) #define PWM_CH6_CSR_B_INV_MSB _u(3) #define PWM_CH6_CSR_B_INV_LSB _u(3) #define PWM_CH6_CSR_B_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH6_CSR_A_INV // Description : Invert output A #define PWM_CH6_CSR_A_INV_RESET _u(0x0) #define PWM_CH6_CSR_A_INV_BITS _u(0x00000004) #define PWM_CH6_CSR_A_INV_MSB _u(2) #define PWM_CH6_CSR_A_INV_LSB _u(2) #define PWM_CH6_CSR_A_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH6_CSR_PH_CORRECT // Description : 1: Enable phase-correct modulation. 0: Trailing-edge #define PWM_CH6_CSR_PH_CORRECT_RESET _u(0x0) #define PWM_CH6_CSR_PH_CORRECT_BITS _u(0x00000002) #define PWM_CH6_CSR_PH_CORRECT_MSB _u(1) #define PWM_CH6_CSR_PH_CORRECT_LSB _u(1) #define PWM_CH6_CSR_PH_CORRECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH6_CSR_EN // Description : Enable the PWM channel. #define PWM_CH6_CSR_EN_RESET _u(0x0) #define PWM_CH6_CSR_EN_BITS _u(0x00000001) #define PWM_CH6_CSR_EN_MSB _u(0) #define PWM_CH6_CSR_EN_LSB _u(0) #define PWM_CH6_CSR_EN_ACCESS "RW" // ============================================================================= // Register : PWM_CH6_DIV // Description : INT and FRAC form a fixed-point fractional number. // Counting rate is system clock frequency divided by this number. // Fractional division uses simple 1st-order sigma-delta. #define PWM_CH6_DIV_OFFSET _u(0x0000007c) #define PWM_CH6_DIV_BITS _u(0x00000fff) #define PWM_CH6_DIV_RESET _u(0x00000010) // ----------------------------------------------------------------------------- // Field : PWM_CH6_DIV_INT // Description : None #define PWM_CH6_DIV_INT_RESET _u(0x01) #define PWM_CH6_DIV_INT_BITS _u(0x00000ff0) #define PWM_CH6_DIV_INT_MSB _u(11) #define PWM_CH6_DIV_INT_LSB _u(4) #define PWM_CH6_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH6_DIV_FRAC // Description : None #define PWM_CH6_DIV_FRAC_RESET _u(0x0) #define PWM_CH6_DIV_FRAC_BITS _u(0x0000000f) #define PWM_CH6_DIV_FRAC_MSB _u(3) #define PWM_CH6_DIV_FRAC_LSB _u(0) #define PWM_CH6_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PWM_CH6_CTR // Description : Direct access to the PWM counter #define PWM_CH6_CTR_OFFSET _u(0x00000080) #define PWM_CH6_CTR_BITS _u(0x0000ffff) #define PWM_CH6_CTR_RESET _u(0x00000000) #define PWM_CH6_CTR_MSB _u(15) #define PWM_CH6_CTR_LSB _u(0) #define PWM_CH6_CTR_ACCESS "RW" // ============================================================================= // Register : PWM_CH6_CC // Description : Counter compare values #define PWM_CH6_CC_OFFSET _u(0x00000084) #define PWM_CH6_CC_BITS _u(0xffffffff) #define PWM_CH6_CC_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH6_CC_B // Description : None #define PWM_CH6_CC_B_RESET _u(0x0000) #define PWM_CH6_CC_B_BITS _u(0xffff0000) #define PWM_CH6_CC_B_MSB _u(31) #define PWM_CH6_CC_B_LSB _u(16) #define PWM_CH6_CC_B_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH6_CC_A // Description : None #define PWM_CH6_CC_A_RESET _u(0x0000) #define PWM_CH6_CC_A_BITS _u(0x0000ffff) #define PWM_CH6_CC_A_MSB _u(15) #define PWM_CH6_CC_A_LSB _u(0) #define PWM_CH6_CC_A_ACCESS "RW" // ============================================================================= // Register : PWM_CH6_TOP // Description : Counter wrap value #define PWM_CH6_TOP_OFFSET _u(0x00000088) #define PWM_CH6_TOP_BITS _u(0x0000ffff) #define PWM_CH6_TOP_RESET _u(0x0000ffff) #define PWM_CH6_TOP_MSB _u(15) #define PWM_CH6_TOP_LSB _u(0) #define PWM_CH6_TOP_ACCESS "RW" // ============================================================================= // Register : PWM_CH7_CSR // Description : Control and status register #define PWM_CH7_CSR_OFFSET _u(0x0000008c) #define PWM_CH7_CSR_BITS _u(0x000000ff) #define PWM_CH7_CSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH7_CSR_PH_ADV // Description : Advance the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running // at less than full speed (div_int + div_frac / 16 > 1) #define PWM_CH7_CSR_PH_ADV_RESET _u(0x0) #define PWM_CH7_CSR_PH_ADV_BITS _u(0x00000080) #define PWM_CH7_CSR_PH_ADV_MSB _u(7) #define PWM_CH7_CSR_PH_ADV_LSB _u(7) #define PWM_CH7_CSR_PH_ADV_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH7_CSR_PH_RET // Description : Retard the phase of the counter by 1 count, while it is // running. // Self-clearing. Write a 1, and poll until low. Counter must be // running. #define PWM_CH7_CSR_PH_RET_RESET _u(0x0) #define PWM_CH7_CSR_PH_RET_BITS _u(0x00000040) #define PWM_CH7_CSR_PH_RET_MSB _u(6) #define PWM_CH7_CSR_PH_RET_LSB _u(6) #define PWM_CH7_CSR_PH_RET_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : PWM_CH7_CSR_DIVMODE // Description : 0x0 -> Free-running counting at rate dictated by fractional // divider // 0x1 -> Fractional divider operation is gated by the PWM B pin. // 0x2 -> Counter advances with each rising edge of the PWM B pin. // 0x3 -> Counter advances with each falling edge of the PWM B // pin. #define PWM_CH7_CSR_DIVMODE_RESET _u(0x0) #define PWM_CH7_CSR_DIVMODE_BITS _u(0x00000030) #define PWM_CH7_CSR_DIVMODE_MSB _u(5) #define PWM_CH7_CSR_DIVMODE_LSB _u(4) #define PWM_CH7_CSR_DIVMODE_ACCESS "RW" #define PWM_CH7_CSR_DIVMODE_VALUE_DIV _u(0x0) #define PWM_CH7_CSR_DIVMODE_VALUE_LEVEL _u(0x1) #define PWM_CH7_CSR_DIVMODE_VALUE_RISE _u(0x2) #define PWM_CH7_CSR_DIVMODE_VALUE_FALL _u(0x3) // ----------------------------------------------------------------------------- // Field : PWM_CH7_CSR_B_INV // Description : Invert output B #define PWM_CH7_CSR_B_INV_RESET _u(0x0) #define PWM_CH7_CSR_B_INV_BITS _u(0x00000008) #define PWM_CH7_CSR_B_INV_MSB _u(3) #define PWM_CH7_CSR_B_INV_LSB _u(3) #define PWM_CH7_CSR_B_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH7_CSR_A_INV // Description : Invert output A #define PWM_CH7_CSR_A_INV_RESET _u(0x0) #define PWM_CH7_CSR_A_INV_BITS _u(0x00000004) #define PWM_CH7_CSR_A_INV_MSB _u(2) #define PWM_CH7_CSR_A_INV_LSB _u(2) #define PWM_CH7_CSR_A_INV_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH7_CSR_PH_CORRECT // Description : 1: Enable phase-correct modulation. 0: Trailing-edge #define PWM_CH7_CSR_PH_CORRECT_RESET _u(0x0) #define PWM_CH7_CSR_PH_CORRECT_BITS _u(0x00000002) #define PWM_CH7_CSR_PH_CORRECT_MSB _u(1) #define PWM_CH7_CSR_PH_CORRECT_LSB _u(1) #define PWM_CH7_CSR_PH_CORRECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH7_CSR_EN // Description : Enable the PWM channel. #define PWM_CH7_CSR_EN_RESET _u(0x0) #define PWM_CH7_CSR_EN_BITS _u(0x00000001) #define PWM_CH7_CSR_EN_MSB _u(0) #define PWM_CH7_CSR_EN_LSB _u(0) #define PWM_CH7_CSR_EN_ACCESS "RW" // ============================================================================= // Register : PWM_CH7_DIV // Description : INT and FRAC form a fixed-point fractional number. // Counting rate is system clock frequency divided by this number. // Fractional division uses simple 1st-order sigma-delta. #define PWM_CH7_DIV_OFFSET _u(0x00000090) #define PWM_CH7_DIV_BITS _u(0x00000fff) #define PWM_CH7_DIV_RESET _u(0x00000010) // ----------------------------------------------------------------------------- // Field : PWM_CH7_DIV_INT // Description : None #define PWM_CH7_DIV_INT_RESET _u(0x01) #define PWM_CH7_DIV_INT_BITS _u(0x00000ff0) #define PWM_CH7_DIV_INT_MSB _u(11) #define PWM_CH7_DIV_INT_LSB _u(4) #define PWM_CH7_DIV_INT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH7_DIV_FRAC // Description : None #define PWM_CH7_DIV_FRAC_RESET _u(0x0) #define PWM_CH7_DIV_FRAC_BITS _u(0x0000000f) #define PWM_CH7_DIV_FRAC_MSB _u(3) #define PWM_CH7_DIV_FRAC_LSB _u(0) #define PWM_CH7_DIV_FRAC_ACCESS "RW" // ============================================================================= // Register : PWM_CH7_CTR // Description : Direct access to the PWM counter #define PWM_CH7_CTR_OFFSET _u(0x00000094) #define PWM_CH7_CTR_BITS _u(0x0000ffff) #define PWM_CH7_CTR_RESET _u(0x00000000) #define PWM_CH7_CTR_MSB _u(15) #define PWM_CH7_CTR_LSB _u(0) #define PWM_CH7_CTR_ACCESS "RW" // ============================================================================= // Register : PWM_CH7_CC // Description : Counter compare values #define PWM_CH7_CC_OFFSET _u(0x00000098) #define PWM_CH7_CC_BITS _u(0xffffffff) #define PWM_CH7_CC_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_CH7_CC_B // Description : None #define PWM_CH7_CC_B_RESET _u(0x0000) #define PWM_CH7_CC_B_BITS _u(0xffff0000) #define PWM_CH7_CC_B_MSB _u(31) #define PWM_CH7_CC_B_LSB _u(16) #define PWM_CH7_CC_B_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_CH7_CC_A // Description : None #define PWM_CH7_CC_A_RESET _u(0x0000) #define PWM_CH7_CC_A_BITS _u(0x0000ffff) #define PWM_CH7_CC_A_MSB _u(15) #define PWM_CH7_CC_A_LSB _u(0) #define PWM_CH7_CC_A_ACCESS "RW" // ============================================================================= // Register : PWM_CH7_TOP // Description : Counter wrap value #define PWM_CH7_TOP_OFFSET _u(0x0000009c) #define PWM_CH7_TOP_BITS _u(0x0000ffff) #define PWM_CH7_TOP_RESET _u(0x0000ffff) #define PWM_CH7_TOP_MSB _u(15) #define PWM_CH7_TOP_LSB _u(0) #define PWM_CH7_TOP_ACCESS "RW" // ============================================================================= // Register : PWM_EN // Description : This register aliases the CSR_EN bits for all channels. // Writing to this register allows multiple channels to be enabled // or disabled simultaneously, so they can run in perfect sync. // For each channel, there is only one physical EN register bit, // which can be accessed through here or CHx_CSR. #define PWM_EN_OFFSET _u(0x000000a0) #define PWM_EN_BITS _u(0x000000ff) #define PWM_EN_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_EN_CH7 // Description : None #define PWM_EN_CH7_RESET _u(0x0) #define PWM_EN_CH7_BITS _u(0x00000080) #define PWM_EN_CH7_MSB _u(7) #define PWM_EN_CH7_LSB _u(7) #define PWM_EN_CH7_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_EN_CH6 // Description : None #define PWM_EN_CH6_RESET _u(0x0) #define PWM_EN_CH6_BITS _u(0x00000040) #define PWM_EN_CH6_MSB _u(6) #define PWM_EN_CH6_LSB _u(6) #define PWM_EN_CH6_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_EN_CH5 // Description : None #define PWM_EN_CH5_RESET _u(0x0) #define PWM_EN_CH5_BITS _u(0x00000020) #define PWM_EN_CH5_MSB _u(5) #define PWM_EN_CH5_LSB _u(5) #define PWM_EN_CH5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_EN_CH4 // Description : None #define PWM_EN_CH4_RESET _u(0x0) #define PWM_EN_CH4_BITS _u(0x00000010) #define PWM_EN_CH4_MSB _u(4) #define PWM_EN_CH4_LSB _u(4) #define PWM_EN_CH4_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_EN_CH3 // Description : None #define PWM_EN_CH3_RESET _u(0x0) #define PWM_EN_CH3_BITS _u(0x00000008) #define PWM_EN_CH3_MSB _u(3) #define PWM_EN_CH3_LSB _u(3) #define PWM_EN_CH3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_EN_CH2 // Description : None #define PWM_EN_CH2_RESET _u(0x0) #define PWM_EN_CH2_BITS _u(0x00000004) #define PWM_EN_CH2_MSB _u(2) #define PWM_EN_CH2_LSB _u(2) #define PWM_EN_CH2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_EN_CH1 // Description : None #define PWM_EN_CH1_RESET _u(0x0) #define PWM_EN_CH1_BITS _u(0x00000002) #define PWM_EN_CH1_MSB _u(1) #define PWM_EN_CH1_LSB _u(1) #define PWM_EN_CH1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_EN_CH0 // Description : None #define PWM_EN_CH0_RESET _u(0x0) #define PWM_EN_CH0_BITS _u(0x00000001) #define PWM_EN_CH0_MSB _u(0) #define PWM_EN_CH0_LSB _u(0) #define PWM_EN_CH0_ACCESS "RW" // ============================================================================= // Register : PWM_INTR // Description : Raw Interrupts #define PWM_INTR_OFFSET _u(0x000000a4) #define PWM_INTR_BITS _u(0x000000ff) #define PWM_INTR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_INTR_CH7 // Description : None #define PWM_INTR_CH7_RESET _u(0x0) #define PWM_INTR_CH7_BITS _u(0x00000080) #define PWM_INTR_CH7_MSB _u(7) #define PWM_INTR_CH7_LSB _u(7) #define PWM_INTR_CH7_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : PWM_INTR_CH6 // Description : None #define PWM_INTR_CH6_RESET _u(0x0) #define PWM_INTR_CH6_BITS _u(0x00000040) #define PWM_INTR_CH6_MSB _u(6) #define PWM_INTR_CH6_LSB _u(6) #define PWM_INTR_CH6_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : PWM_INTR_CH5 // Description : None #define PWM_INTR_CH5_RESET _u(0x0) #define PWM_INTR_CH5_BITS _u(0x00000020) #define PWM_INTR_CH5_MSB _u(5) #define PWM_INTR_CH5_LSB _u(5) #define PWM_INTR_CH5_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : PWM_INTR_CH4 // Description : None #define PWM_INTR_CH4_RESET _u(0x0) #define PWM_INTR_CH4_BITS _u(0x00000010) #define PWM_INTR_CH4_MSB _u(4) #define PWM_INTR_CH4_LSB _u(4) #define PWM_INTR_CH4_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : PWM_INTR_CH3 // Description : None #define PWM_INTR_CH3_RESET _u(0x0) #define PWM_INTR_CH3_BITS _u(0x00000008) #define PWM_INTR_CH3_MSB _u(3) #define PWM_INTR_CH3_LSB _u(3) #define PWM_INTR_CH3_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : PWM_INTR_CH2 // Description : None #define PWM_INTR_CH2_RESET _u(0x0) #define PWM_INTR_CH2_BITS _u(0x00000004) #define PWM_INTR_CH2_MSB _u(2) #define PWM_INTR_CH2_LSB _u(2) #define PWM_INTR_CH2_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : PWM_INTR_CH1 // Description : None #define PWM_INTR_CH1_RESET _u(0x0) #define PWM_INTR_CH1_BITS _u(0x00000002) #define PWM_INTR_CH1_MSB _u(1) #define PWM_INTR_CH1_LSB _u(1) #define PWM_INTR_CH1_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : PWM_INTR_CH0 // Description : None #define PWM_INTR_CH0_RESET _u(0x0) #define PWM_INTR_CH0_BITS _u(0x00000001) #define PWM_INTR_CH0_MSB _u(0) #define PWM_INTR_CH0_LSB _u(0) #define PWM_INTR_CH0_ACCESS "WC" // ============================================================================= // Register : PWM_INTE // Description : Interrupt Enable #define PWM_INTE_OFFSET _u(0x000000a8) #define PWM_INTE_BITS _u(0x000000ff) #define PWM_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_INTE_CH7 // Description : None #define PWM_INTE_CH7_RESET _u(0x0) #define PWM_INTE_CH7_BITS _u(0x00000080) #define PWM_INTE_CH7_MSB _u(7) #define PWM_INTE_CH7_LSB _u(7) #define PWM_INTE_CH7_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTE_CH6 // Description : None #define PWM_INTE_CH6_RESET _u(0x0) #define PWM_INTE_CH6_BITS _u(0x00000040) #define PWM_INTE_CH6_MSB _u(6) #define PWM_INTE_CH6_LSB _u(6) #define PWM_INTE_CH6_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTE_CH5 // Description : None #define PWM_INTE_CH5_RESET _u(0x0) #define PWM_INTE_CH5_BITS _u(0x00000020) #define PWM_INTE_CH5_MSB _u(5) #define PWM_INTE_CH5_LSB _u(5) #define PWM_INTE_CH5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTE_CH4 // Description : None #define PWM_INTE_CH4_RESET _u(0x0) #define PWM_INTE_CH4_BITS _u(0x00000010) #define PWM_INTE_CH4_MSB _u(4) #define PWM_INTE_CH4_LSB _u(4) #define PWM_INTE_CH4_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTE_CH3 // Description : None #define PWM_INTE_CH3_RESET _u(0x0) #define PWM_INTE_CH3_BITS _u(0x00000008) #define PWM_INTE_CH3_MSB _u(3) #define PWM_INTE_CH3_LSB _u(3) #define PWM_INTE_CH3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTE_CH2 // Description : None #define PWM_INTE_CH2_RESET _u(0x0) #define PWM_INTE_CH2_BITS _u(0x00000004) #define PWM_INTE_CH2_MSB _u(2) #define PWM_INTE_CH2_LSB _u(2) #define PWM_INTE_CH2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTE_CH1 // Description : None #define PWM_INTE_CH1_RESET _u(0x0) #define PWM_INTE_CH1_BITS _u(0x00000002) #define PWM_INTE_CH1_MSB _u(1) #define PWM_INTE_CH1_LSB _u(1) #define PWM_INTE_CH1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTE_CH0 // Description : None #define PWM_INTE_CH0_RESET _u(0x0) #define PWM_INTE_CH0_BITS _u(0x00000001) #define PWM_INTE_CH0_MSB _u(0) #define PWM_INTE_CH0_LSB _u(0) #define PWM_INTE_CH0_ACCESS "RW" // ============================================================================= // Register : PWM_INTF // Description : Interrupt Force #define PWM_INTF_OFFSET _u(0x000000ac) #define PWM_INTF_BITS _u(0x000000ff) #define PWM_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_INTF_CH7 // Description : None #define PWM_INTF_CH7_RESET _u(0x0) #define PWM_INTF_CH7_BITS _u(0x00000080) #define PWM_INTF_CH7_MSB _u(7) #define PWM_INTF_CH7_LSB _u(7) #define PWM_INTF_CH7_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTF_CH6 // Description : None #define PWM_INTF_CH6_RESET _u(0x0) #define PWM_INTF_CH6_BITS _u(0x00000040) #define PWM_INTF_CH6_MSB _u(6) #define PWM_INTF_CH6_LSB _u(6) #define PWM_INTF_CH6_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTF_CH5 // Description : None #define PWM_INTF_CH5_RESET _u(0x0) #define PWM_INTF_CH5_BITS _u(0x00000020) #define PWM_INTF_CH5_MSB _u(5) #define PWM_INTF_CH5_LSB _u(5) #define PWM_INTF_CH5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTF_CH4 // Description : None #define PWM_INTF_CH4_RESET _u(0x0) #define PWM_INTF_CH4_BITS _u(0x00000010) #define PWM_INTF_CH4_MSB _u(4) #define PWM_INTF_CH4_LSB _u(4) #define PWM_INTF_CH4_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTF_CH3 // Description : None #define PWM_INTF_CH3_RESET _u(0x0) #define PWM_INTF_CH3_BITS _u(0x00000008) #define PWM_INTF_CH3_MSB _u(3) #define PWM_INTF_CH3_LSB _u(3) #define PWM_INTF_CH3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTF_CH2 // Description : None #define PWM_INTF_CH2_RESET _u(0x0) #define PWM_INTF_CH2_BITS _u(0x00000004) #define PWM_INTF_CH2_MSB _u(2) #define PWM_INTF_CH2_LSB _u(2) #define PWM_INTF_CH2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTF_CH1 // Description : None #define PWM_INTF_CH1_RESET _u(0x0) #define PWM_INTF_CH1_BITS _u(0x00000002) #define PWM_INTF_CH1_MSB _u(1) #define PWM_INTF_CH1_LSB _u(1) #define PWM_INTF_CH1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : PWM_INTF_CH0 // Description : None #define PWM_INTF_CH0_RESET _u(0x0) #define PWM_INTF_CH0_BITS _u(0x00000001) #define PWM_INTF_CH0_MSB _u(0) #define PWM_INTF_CH0_LSB _u(0) #define PWM_INTF_CH0_ACCESS "RW" // ============================================================================= // Register : PWM_INTS // Description : Interrupt status after masking & forcing #define PWM_INTS_OFFSET _u(0x000000b0) #define PWM_INTS_BITS _u(0x000000ff) #define PWM_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : PWM_INTS_CH7 // Description : None #define PWM_INTS_CH7_RESET _u(0x0) #define PWM_INTS_CH7_BITS _u(0x00000080) #define PWM_INTS_CH7_MSB _u(7) #define PWM_INTS_CH7_LSB _u(7) #define PWM_INTS_CH7_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PWM_INTS_CH6 // Description : None #define PWM_INTS_CH6_RESET _u(0x0) #define PWM_INTS_CH6_BITS _u(0x00000040) #define PWM_INTS_CH6_MSB _u(6) #define PWM_INTS_CH6_LSB _u(6) #define PWM_INTS_CH6_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PWM_INTS_CH5 // Description : None #define PWM_INTS_CH5_RESET _u(0x0) #define PWM_INTS_CH5_BITS _u(0x00000020) #define PWM_INTS_CH5_MSB _u(5) #define PWM_INTS_CH5_LSB _u(5) #define PWM_INTS_CH5_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PWM_INTS_CH4 // Description : None #define PWM_INTS_CH4_RESET _u(0x0) #define PWM_INTS_CH4_BITS _u(0x00000010) #define PWM_INTS_CH4_MSB _u(4) #define PWM_INTS_CH4_LSB _u(4) #define PWM_INTS_CH4_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PWM_INTS_CH3 // Description : None #define PWM_INTS_CH3_RESET _u(0x0) #define PWM_INTS_CH3_BITS _u(0x00000008) #define PWM_INTS_CH3_MSB _u(3) #define PWM_INTS_CH3_LSB _u(3) #define PWM_INTS_CH3_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PWM_INTS_CH2 // Description : None #define PWM_INTS_CH2_RESET _u(0x0) #define PWM_INTS_CH2_BITS _u(0x00000004) #define PWM_INTS_CH2_MSB _u(2) #define PWM_INTS_CH2_LSB _u(2) #define PWM_INTS_CH2_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PWM_INTS_CH1 // Description : None #define PWM_INTS_CH1_RESET _u(0x0) #define PWM_INTS_CH1_BITS _u(0x00000002) #define PWM_INTS_CH1_MSB _u(1) #define PWM_INTS_CH1_LSB _u(1) #define PWM_INTS_CH1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : PWM_INTS_CH0 // Description : None #define PWM_INTS_CH0_RESET _u(0x0) #define PWM_INTS_CH0_BITS _u(0x00000001) #define PWM_INTS_CH0_MSB _u(0) #define PWM_INTS_CH0_LSB _u(0) #define PWM_INTS_CH0_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_PWM_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/resets.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : RESETS // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_RESETS_DEFINED #define HARDWARE_REGS_RESETS_DEFINED // ============================================================================= // Register : RESETS_RESET // Description : Reset control. If a bit is set it means the peripheral is in // reset. 0 means the peripheral's reset is deasserted. #define RESETS_RESET_OFFSET _u(0x00000000) #define RESETS_RESET_BITS _u(0x01ffffff) #define RESETS_RESET_RESET _u(0x01ffffff) // ----------------------------------------------------------------------------- // Field : RESETS_RESET_USBCTRL // Description : None #define RESETS_RESET_USBCTRL_RESET _u(0x1) #define RESETS_RESET_USBCTRL_BITS _u(0x01000000) #define RESETS_RESET_USBCTRL_MSB _u(24) #define RESETS_RESET_USBCTRL_LSB _u(24) #define RESETS_RESET_USBCTRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_UART1 // Description : None #define RESETS_RESET_UART1_RESET _u(0x1) #define RESETS_RESET_UART1_BITS _u(0x00800000) #define RESETS_RESET_UART1_MSB _u(23) #define RESETS_RESET_UART1_LSB _u(23) #define RESETS_RESET_UART1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_UART0 // Description : None #define RESETS_RESET_UART0_RESET _u(0x1) #define RESETS_RESET_UART0_BITS _u(0x00400000) #define RESETS_RESET_UART0_MSB _u(22) #define RESETS_RESET_UART0_LSB _u(22) #define RESETS_RESET_UART0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_TIMER // Description : None #define RESETS_RESET_TIMER_RESET _u(0x1) #define RESETS_RESET_TIMER_BITS _u(0x00200000) #define RESETS_RESET_TIMER_MSB _u(21) #define RESETS_RESET_TIMER_LSB _u(21) #define RESETS_RESET_TIMER_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_TBMAN // Description : None #define RESETS_RESET_TBMAN_RESET _u(0x1) #define RESETS_RESET_TBMAN_BITS _u(0x00100000) #define RESETS_RESET_TBMAN_MSB _u(20) #define RESETS_RESET_TBMAN_LSB _u(20) #define RESETS_RESET_TBMAN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_SYSINFO // Description : None #define RESETS_RESET_SYSINFO_RESET _u(0x1) #define RESETS_RESET_SYSINFO_BITS _u(0x00080000) #define RESETS_RESET_SYSINFO_MSB _u(19) #define RESETS_RESET_SYSINFO_LSB _u(19) #define RESETS_RESET_SYSINFO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_SYSCFG // Description : None #define RESETS_RESET_SYSCFG_RESET _u(0x1) #define RESETS_RESET_SYSCFG_BITS _u(0x00040000) #define RESETS_RESET_SYSCFG_MSB _u(18) #define RESETS_RESET_SYSCFG_LSB _u(18) #define RESETS_RESET_SYSCFG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_SPI1 // Description : None #define RESETS_RESET_SPI1_RESET _u(0x1) #define RESETS_RESET_SPI1_BITS _u(0x00020000) #define RESETS_RESET_SPI1_MSB _u(17) #define RESETS_RESET_SPI1_LSB _u(17) #define RESETS_RESET_SPI1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_SPI0 // Description : None #define RESETS_RESET_SPI0_RESET _u(0x1) #define RESETS_RESET_SPI0_BITS _u(0x00010000) #define RESETS_RESET_SPI0_MSB _u(16) #define RESETS_RESET_SPI0_LSB _u(16) #define RESETS_RESET_SPI0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_RTC // Description : None #define RESETS_RESET_RTC_RESET _u(0x1) #define RESETS_RESET_RTC_BITS _u(0x00008000) #define RESETS_RESET_RTC_MSB _u(15) #define RESETS_RESET_RTC_LSB _u(15) #define RESETS_RESET_RTC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_PWM // Description : None #define RESETS_RESET_PWM_RESET _u(0x1) #define RESETS_RESET_PWM_BITS _u(0x00004000) #define RESETS_RESET_PWM_MSB _u(14) #define RESETS_RESET_PWM_LSB _u(14) #define RESETS_RESET_PWM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_PLL_USB // Description : None #define RESETS_RESET_PLL_USB_RESET _u(0x1) #define RESETS_RESET_PLL_USB_BITS _u(0x00002000) #define RESETS_RESET_PLL_USB_MSB _u(13) #define RESETS_RESET_PLL_USB_LSB _u(13) #define RESETS_RESET_PLL_USB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_PLL_SYS // Description : None #define RESETS_RESET_PLL_SYS_RESET _u(0x1) #define RESETS_RESET_PLL_SYS_BITS _u(0x00001000) #define RESETS_RESET_PLL_SYS_MSB _u(12) #define RESETS_RESET_PLL_SYS_LSB _u(12) #define RESETS_RESET_PLL_SYS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_PIO1 // Description : None #define RESETS_RESET_PIO1_RESET _u(0x1) #define RESETS_RESET_PIO1_BITS _u(0x00000800) #define RESETS_RESET_PIO1_MSB _u(11) #define RESETS_RESET_PIO1_LSB _u(11) #define RESETS_RESET_PIO1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_PIO0 // Description : None #define RESETS_RESET_PIO0_RESET _u(0x1) #define RESETS_RESET_PIO0_BITS _u(0x00000400) #define RESETS_RESET_PIO0_MSB _u(10) #define RESETS_RESET_PIO0_LSB _u(10) #define RESETS_RESET_PIO0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_PADS_QSPI // Description : None #define RESETS_RESET_PADS_QSPI_RESET _u(0x1) #define RESETS_RESET_PADS_QSPI_BITS _u(0x00000200) #define RESETS_RESET_PADS_QSPI_MSB _u(9) #define RESETS_RESET_PADS_QSPI_LSB _u(9) #define RESETS_RESET_PADS_QSPI_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_PADS_BANK0 // Description : None #define RESETS_RESET_PADS_BANK0_RESET _u(0x1) #define RESETS_RESET_PADS_BANK0_BITS _u(0x00000100) #define RESETS_RESET_PADS_BANK0_MSB _u(8) #define RESETS_RESET_PADS_BANK0_LSB _u(8) #define RESETS_RESET_PADS_BANK0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_JTAG // Description : None #define RESETS_RESET_JTAG_RESET _u(0x1) #define RESETS_RESET_JTAG_BITS _u(0x00000080) #define RESETS_RESET_JTAG_MSB _u(7) #define RESETS_RESET_JTAG_LSB _u(7) #define RESETS_RESET_JTAG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_IO_QSPI // Description : None #define RESETS_RESET_IO_QSPI_RESET _u(0x1) #define RESETS_RESET_IO_QSPI_BITS _u(0x00000040) #define RESETS_RESET_IO_QSPI_MSB _u(6) #define RESETS_RESET_IO_QSPI_LSB _u(6) #define RESETS_RESET_IO_QSPI_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_IO_BANK0 // Description : None #define RESETS_RESET_IO_BANK0_RESET _u(0x1) #define RESETS_RESET_IO_BANK0_BITS _u(0x00000020) #define RESETS_RESET_IO_BANK0_MSB _u(5) #define RESETS_RESET_IO_BANK0_LSB _u(5) #define RESETS_RESET_IO_BANK0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_I2C1 // Description : None #define RESETS_RESET_I2C1_RESET _u(0x1) #define RESETS_RESET_I2C1_BITS _u(0x00000010) #define RESETS_RESET_I2C1_MSB _u(4) #define RESETS_RESET_I2C1_LSB _u(4) #define RESETS_RESET_I2C1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_I2C0 // Description : None #define RESETS_RESET_I2C0_RESET _u(0x1) #define RESETS_RESET_I2C0_BITS _u(0x00000008) #define RESETS_RESET_I2C0_MSB _u(3) #define RESETS_RESET_I2C0_LSB _u(3) #define RESETS_RESET_I2C0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DMA // Description : None #define RESETS_RESET_DMA_RESET _u(0x1) #define RESETS_RESET_DMA_BITS _u(0x00000004) #define RESETS_RESET_DMA_MSB _u(2) #define RESETS_RESET_DMA_LSB _u(2) #define RESETS_RESET_DMA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_BUSCTRL // Description : None #define RESETS_RESET_BUSCTRL_RESET _u(0x1) #define RESETS_RESET_BUSCTRL_BITS _u(0x00000002) #define RESETS_RESET_BUSCTRL_MSB _u(1) #define RESETS_RESET_BUSCTRL_LSB _u(1) #define RESETS_RESET_BUSCTRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_ADC // Description : None #define RESETS_RESET_ADC_RESET _u(0x1) #define RESETS_RESET_ADC_BITS _u(0x00000001) #define RESETS_RESET_ADC_MSB _u(0) #define RESETS_RESET_ADC_LSB _u(0) #define RESETS_RESET_ADC_ACCESS "RW" // ============================================================================= // Register : RESETS_WDSEL // Description : Watchdog select. If a bit is set then the watchdog will reset // this peripheral when the watchdog fires. #define RESETS_WDSEL_OFFSET _u(0x00000004) #define RESETS_WDSEL_BITS _u(0x01ffffff) #define RESETS_WDSEL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_USBCTRL // Description : None #define RESETS_WDSEL_USBCTRL_RESET _u(0x0) #define RESETS_WDSEL_USBCTRL_BITS _u(0x01000000) #define RESETS_WDSEL_USBCTRL_MSB _u(24) #define RESETS_WDSEL_USBCTRL_LSB _u(24) #define RESETS_WDSEL_USBCTRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_UART1 // Description : None #define RESETS_WDSEL_UART1_RESET _u(0x0) #define RESETS_WDSEL_UART1_BITS _u(0x00800000) #define RESETS_WDSEL_UART1_MSB _u(23) #define RESETS_WDSEL_UART1_LSB _u(23) #define RESETS_WDSEL_UART1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_UART0 // Description : None #define RESETS_WDSEL_UART0_RESET _u(0x0) #define RESETS_WDSEL_UART0_BITS _u(0x00400000) #define RESETS_WDSEL_UART0_MSB _u(22) #define RESETS_WDSEL_UART0_LSB _u(22) #define RESETS_WDSEL_UART0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_TIMER // Description : None #define RESETS_WDSEL_TIMER_RESET _u(0x0) #define RESETS_WDSEL_TIMER_BITS _u(0x00200000) #define RESETS_WDSEL_TIMER_MSB _u(21) #define RESETS_WDSEL_TIMER_LSB _u(21) #define RESETS_WDSEL_TIMER_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_TBMAN // Description : None #define RESETS_WDSEL_TBMAN_RESET _u(0x0) #define RESETS_WDSEL_TBMAN_BITS _u(0x00100000) #define RESETS_WDSEL_TBMAN_MSB _u(20) #define RESETS_WDSEL_TBMAN_LSB _u(20) #define RESETS_WDSEL_TBMAN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_SYSINFO // Description : None #define RESETS_WDSEL_SYSINFO_RESET _u(0x0) #define RESETS_WDSEL_SYSINFO_BITS _u(0x00080000) #define RESETS_WDSEL_SYSINFO_MSB _u(19) #define RESETS_WDSEL_SYSINFO_LSB _u(19) #define RESETS_WDSEL_SYSINFO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_SYSCFG // Description : None #define RESETS_WDSEL_SYSCFG_RESET _u(0x0) #define RESETS_WDSEL_SYSCFG_BITS _u(0x00040000) #define RESETS_WDSEL_SYSCFG_MSB _u(18) #define RESETS_WDSEL_SYSCFG_LSB _u(18) #define RESETS_WDSEL_SYSCFG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_SPI1 // Description : None #define RESETS_WDSEL_SPI1_RESET _u(0x0) #define RESETS_WDSEL_SPI1_BITS _u(0x00020000) #define RESETS_WDSEL_SPI1_MSB _u(17) #define RESETS_WDSEL_SPI1_LSB _u(17) #define RESETS_WDSEL_SPI1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_SPI0 // Description : None #define RESETS_WDSEL_SPI0_RESET _u(0x0) #define RESETS_WDSEL_SPI0_BITS _u(0x00010000) #define RESETS_WDSEL_SPI0_MSB _u(16) #define RESETS_WDSEL_SPI0_LSB _u(16) #define RESETS_WDSEL_SPI0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_RTC // Description : None #define RESETS_WDSEL_RTC_RESET _u(0x0) #define RESETS_WDSEL_RTC_BITS _u(0x00008000) #define RESETS_WDSEL_RTC_MSB _u(15) #define RESETS_WDSEL_RTC_LSB _u(15) #define RESETS_WDSEL_RTC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_PWM // Description : None #define RESETS_WDSEL_PWM_RESET _u(0x0) #define RESETS_WDSEL_PWM_BITS _u(0x00004000) #define RESETS_WDSEL_PWM_MSB _u(14) #define RESETS_WDSEL_PWM_LSB _u(14) #define RESETS_WDSEL_PWM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_PLL_USB // Description : None #define RESETS_WDSEL_PLL_USB_RESET _u(0x0) #define RESETS_WDSEL_PLL_USB_BITS _u(0x00002000) #define RESETS_WDSEL_PLL_USB_MSB _u(13) #define RESETS_WDSEL_PLL_USB_LSB _u(13) #define RESETS_WDSEL_PLL_USB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_PLL_SYS // Description : None #define RESETS_WDSEL_PLL_SYS_RESET _u(0x0) #define RESETS_WDSEL_PLL_SYS_BITS _u(0x00001000) #define RESETS_WDSEL_PLL_SYS_MSB _u(12) #define RESETS_WDSEL_PLL_SYS_LSB _u(12) #define RESETS_WDSEL_PLL_SYS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_PIO1 // Description : None #define RESETS_WDSEL_PIO1_RESET _u(0x0) #define RESETS_WDSEL_PIO1_BITS _u(0x00000800) #define RESETS_WDSEL_PIO1_MSB _u(11) #define RESETS_WDSEL_PIO1_LSB _u(11) #define RESETS_WDSEL_PIO1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_PIO0 // Description : None #define RESETS_WDSEL_PIO0_RESET _u(0x0) #define RESETS_WDSEL_PIO0_BITS _u(0x00000400) #define RESETS_WDSEL_PIO0_MSB _u(10) #define RESETS_WDSEL_PIO0_LSB _u(10) #define RESETS_WDSEL_PIO0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_PADS_QSPI // Description : None #define RESETS_WDSEL_PADS_QSPI_RESET _u(0x0) #define RESETS_WDSEL_PADS_QSPI_BITS _u(0x00000200) #define RESETS_WDSEL_PADS_QSPI_MSB _u(9) #define RESETS_WDSEL_PADS_QSPI_LSB _u(9) #define RESETS_WDSEL_PADS_QSPI_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_PADS_BANK0 // Description : None #define RESETS_WDSEL_PADS_BANK0_RESET _u(0x0) #define RESETS_WDSEL_PADS_BANK0_BITS _u(0x00000100) #define RESETS_WDSEL_PADS_BANK0_MSB _u(8) #define RESETS_WDSEL_PADS_BANK0_LSB _u(8) #define RESETS_WDSEL_PADS_BANK0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_JTAG // Description : None #define RESETS_WDSEL_JTAG_RESET _u(0x0) #define RESETS_WDSEL_JTAG_BITS _u(0x00000080) #define RESETS_WDSEL_JTAG_MSB _u(7) #define RESETS_WDSEL_JTAG_LSB _u(7) #define RESETS_WDSEL_JTAG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_IO_QSPI // Description : None #define RESETS_WDSEL_IO_QSPI_RESET _u(0x0) #define RESETS_WDSEL_IO_QSPI_BITS _u(0x00000040) #define RESETS_WDSEL_IO_QSPI_MSB _u(6) #define RESETS_WDSEL_IO_QSPI_LSB _u(6) #define RESETS_WDSEL_IO_QSPI_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_IO_BANK0 // Description : None #define RESETS_WDSEL_IO_BANK0_RESET _u(0x0) #define RESETS_WDSEL_IO_BANK0_BITS _u(0x00000020) #define RESETS_WDSEL_IO_BANK0_MSB _u(5) #define RESETS_WDSEL_IO_BANK0_LSB _u(5) #define RESETS_WDSEL_IO_BANK0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_I2C1 // Description : None #define RESETS_WDSEL_I2C1_RESET _u(0x0) #define RESETS_WDSEL_I2C1_BITS _u(0x00000010) #define RESETS_WDSEL_I2C1_MSB _u(4) #define RESETS_WDSEL_I2C1_LSB _u(4) #define RESETS_WDSEL_I2C1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_I2C0 // Description : None #define RESETS_WDSEL_I2C0_RESET _u(0x0) #define RESETS_WDSEL_I2C0_BITS _u(0x00000008) #define RESETS_WDSEL_I2C0_MSB _u(3) #define RESETS_WDSEL_I2C0_LSB _u(3) #define RESETS_WDSEL_I2C0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_DMA // Description : None #define RESETS_WDSEL_DMA_RESET _u(0x0) #define RESETS_WDSEL_DMA_BITS _u(0x00000004) #define RESETS_WDSEL_DMA_MSB _u(2) #define RESETS_WDSEL_DMA_LSB _u(2) #define RESETS_WDSEL_DMA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_BUSCTRL // Description : None #define RESETS_WDSEL_BUSCTRL_RESET _u(0x0) #define RESETS_WDSEL_BUSCTRL_BITS _u(0x00000002) #define RESETS_WDSEL_BUSCTRL_MSB _u(1) #define RESETS_WDSEL_BUSCTRL_LSB _u(1) #define RESETS_WDSEL_BUSCTRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RESETS_WDSEL_ADC // Description : None #define RESETS_WDSEL_ADC_RESET _u(0x0) #define RESETS_WDSEL_ADC_BITS _u(0x00000001) #define RESETS_WDSEL_ADC_MSB _u(0) #define RESETS_WDSEL_ADC_LSB _u(0) #define RESETS_WDSEL_ADC_ACCESS "RW" // ============================================================================= // Register : RESETS_RESET_DONE // Description : Reset done. If a bit is set then a reset done signal has been // returned by the peripheral. This indicates that the // peripheral's registers are ready to be accessed. #define RESETS_RESET_DONE_OFFSET _u(0x00000008) #define RESETS_RESET_DONE_BITS _u(0x01ffffff) #define RESETS_RESET_DONE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_USBCTRL // Description : None #define RESETS_RESET_DONE_USBCTRL_RESET _u(0x0) #define RESETS_RESET_DONE_USBCTRL_BITS _u(0x01000000) #define RESETS_RESET_DONE_USBCTRL_MSB _u(24) #define RESETS_RESET_DONE_USBCTRL_LSB _u(24) #define RESETS_RESET_DONE_USBCTRL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_UART1 // Description : None #define RESETS_RESET_DONE_UART1_RESET _u(0x0) #define RESETS_RESET_DONE_UART1_BITS _u(0x00800000) #define RESETS_RESET_DONE_UART1_MSB _u(23) #define RESETS_RESET_DONE_UART1_LSB _u(23) #define RESETS_RESET_DONE_UART1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_UART0 // Description : None #define RESETS_RESET_DONE_UART0_RESET _u(0x0) #define RESETS_RESET_DONE_UART0_BITS _u(0x00400000) #define RESETS_RESET_DONE_UART0_MSB _u(22) #define RESETS_RESET_DONE_UART0_LSB _u(22) #define RESETS_RESET_DONE_UART0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_TIMER // Description : None #define RESETS_RESET_DONE_TIMER_RESET _u(0x0) #define RESETS_RESET_DONE_TIMER_BITS _u(0x00200000) #define RESETS_RESET_DONE_TIMER_MSB _u(21) #define RESETS_RESET_DONE_TIMER_LSB _u(21) #define RESETS_RESET_DONE_TIMER_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_TBMAN // Description : None #define RESETS_RESET_DONE_TBMAN_RESET _u(0x0) #define RESETS_RESET_DONE_TBMAN_BITS _u(0x00100000) #define RESETS_RESET_DONE_TBMAN_MSB _u(20) #define RESETS_RESET_DONE_TBMAN_LSB _u(20) #define RESETS_RESET_DONE_TBMAN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_SYSINFO // Description : None #define RESETS_RESET_DONE_SYSINFO_RESET _u(0x0) #define RESETS_RESET_DONE_SYSINFO_BITS _u(0x00080000) #define RESETS_RESET_DONE_SYSINFO_MSB _u(19) #define RESETS_RESET_DONE_SYSINFO_LSB _u(19) #define RESETS_RESET_DONE_SYSINFO_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_SYSCFG // Description : None #define RESETS_RESET_DONE_SYSCFG_RESET _u(0x0) #define RESETS_RESET_DONE_SYSCFG_BITS _u(0x00040000) #define RESETS_RESET_DONE_SYSCFG_MSB _u(18) #define RESETS_RESET_DONE_SYSCFG_LSB _u(18) #define RESETS_RESET_DONE_SYSCFG_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_SPI1 // Description : None #define RESETS_RESET_DONE_SPI1_RESET _u(0x0) #define RESETS_RESET_DONE_SPI1_BITS _u(0x00020000) #define RESETS_RESET_DONE_SPI1_MSB _u(17) #define RESETS_RESET_DONE_SPI1_LSB _u(17) #define RESETS_RESET_DONE_SPI1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_SPI0 // Description : None #define RESETS_RESET_DONE_SPI0_RESET _u(0x0) #define RESETS_RESET_DONE_SPI0_BITS _u(0x00010000) #define RESETS_RESET_DONE_SPI0_MSB _u(16) #define RESETS_RESET_DONE_SPI0_LSB _u(16) #define RESETS_RESET_DONE_SPI0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_RTC // Description : None #define RESETS_RESET_DONE_RTC_RESET _u(0x0) #define RESETS_RESET_DONE_RTC_BITS _u(0x00008000) #define RESETS_RESET_DONE_RTC_MSB _u(15) #define RESETS_RESET_DONE_RTC_LSB _u(15) #define RESETS_RESET_DONE_RTC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_PWM // Description : None #define RESETS_RESET_DONE_PWM_RESET _u(0x0) #define RESETS_RESET_DONE_PWM_BITS _u(0x00004000) #define RESETS_RESET_DONE_PWM_MSB _u(14) #define RESETS_RESET_DONE_PWM_LSB _u(14) #define RESETS_RESET_DONE_PWM_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_PLL_USB // Description : None #define RESETS_RESET_DONE_PLL_USB_RESET _u(0x0) #define RESETS_RESET_DONE_PLL_USB_BITS _u(0x00002000) #define RESETS_RESET_DONE_PLL_USB_MSB _u(13) #define RESETS_RESET_DONE_PLL_USB_LSB _u(13) #define RESETS_RESET_DONE_PLL_USB_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_PLL_SYS // Description : None #define RESETS_RESET_DONE_PLL_SYS_RESET _u(0x0) #define RESETS_RESET_DONE_PLL_SYS_BITS _u(0x00001000) #define RESETS_RESET_DONE_PLL_SYS_MSB _u(12) #define RESETS_RESET_DONE_PLL_SYS_LSB _u(12) #define RESETS_RESET_DONE_PLL_SYS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_PIO1 // Description : None #define RESETS_RESET_DONE_PIO1_RESET _u(0x0) #define RESETS_RESET_DONE_PIO1_BITS _u(0x00000800) #define RESETS_RESET_DONE_PIO1_MSB _u(11) #define RESETS_RESET_DONE_PIO1_LSB _u(11) #define RESETS_RESET_DONE_PIO1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_PIO0 // Description : None #define RESETS_RESET_DONE_PIO0_RESET _u(0x0) #define RESETS_RESET_DONE_PIO0_BITS _u(0x00000400) #define RESETS_RESET_DONE_PIO0_MSB _u(10) #define RESETS_RESET_DONE_PIO0_LSB _u(10) #define RESETS_RESET_DONE_PIO0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_PADS_QSPI // Description : None #define RESETS_RESET_DONE_PADS_QSPI_RESET _u(0x0) #define RESETS_RESET_DONE_PADS_QSPI_BITS _u(0x00000200) #define RESETS_RESET_DONE_PADS_QSPI_MSB _u(9) #define RESETS_RESET_DONE_PADS_QSPI_LSB _u(9) #define RESETS_RESET_DONE_PADS_QSPI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_PADS_BANK0 // Description : None #define RESETS_RESET_DONE_PADS_BANK0_RESET _u(0x0) #define RESETS_RESET_DONE_PADS_BANK0_BITS _u(0x00000100) #define RESETS_RESET_DONE_PADS_BANK0_MSB _u(8) #define RESETS_RESET_DONE_PADS_BANK0_LSB _u(8) #define RESETS_RESET_DONE_PADS_BANK0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_JTAG // Description : None #define RESETS_RESET_DONE_JTAG_RESET _u(0x0) #define RESETS_RESET_DONE_JTAG_BITS _u(0x00000080) #define RESETS_RESET_DONE_JTAG_MSB _u(7) #define RESETS_RESET_DONE_JTAG_LSB _u(7) #define RESETS_RESET_DONE_JTAG_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_IO_QSPI // Description : None #define RESETS_RESET_DONE_IO_QSPI_RESET _u(0x0) #define RESETS_RESET_DONE_IO_QSPI_BITS _u(0x00000040) #define RESETS_RESET_DONE_IO_QSPI_MSB _u(6) #define RESETS_RESET_DONE_IO_QSPI_LSB _u(6) #define RESETS_RESET_DONE_IO_QSPI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_IO_BANK0 // Description : None #define RESETS_RESET_DONE_IO_BANK0_RESET _u(0x0) #define RESETS_RESET_DONE_IO_BANK0_BITS _u(0x00000020) #define RESETS_RESET_DONE_IO_BANK0_MSB _u(5) #define RESETS_RESET_DONE_IO_BANK0_LSB _u(5) #define RESETS_RESET_DONE_IO_BANK0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_I2C1 // Description : None #define RESETS_RESET_DONE_I2C1_RESET _u(0x0) #define RESETS_RESET_DONE_I2C1_BITS _u(0x00000010) #define RESETS_RESET_DONE_I2C1_MSB _u(4) #define RESETS_RESET_DONE_I2C1_LSB _u(4) #define RESETS_RESET_DONE_I2C1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_I2C0 // Description : None #define RESETS_RESET_DONE_I2C0_RESET _u(0x0) #define RESETS_RESET_DONE_I2C0_BITS _u(0x00000008) #define RESETS_RESET_DONE_I2C0_MSB _u(3) #define RESETS_RESET_DONE_I2C0_LSB _u(3) #define RESETS_RESET_DONE_I2C0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_DMA // Description : None #define RESETS_RESET_DONE_DMA_RESET _u(0x0) #define RESETS_RESET_DONE_DMA_BITS _u(0x00000004) #define RESETS_RESET_DONE_DMA_MSB _u(2) #define RESETS_RESET_DONE_DMA_LSB _u(2) #define RESETS_RESET_DONE_DMA_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_BUSCTRL // Description : None #define RESETS_RESET_DONE_BUSCTRL_RESET _u(0x0) #define RESETS_RESET_DONE_BUSCTRL_BITS _u(0x00000002) #define RESETS_RESET_DONE_BUSCTRL_MSB _u(1) #define RESETS_RESET_DONE_BUSCTRL_LSB _u(1) #define RESETS_RESET_DONE_BUSCTRL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RESETS_RESET_DONE_ADC // Description : None #define RESETS_RESET_DONE_ADC_RESET _u(0x0) #define RESETS_RESET_DONE_ADC_BITS _u(0x00000001) #define RESETS_RESET_DONE_ADC_MSB _u(0) #define RESETS_RESET_DONE_ADC_LSB _u(0) #define RESETS_RESET_DONE_ADC_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_RESETS_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/rosc.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : ROSC // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_ROSC_DEFINED #define HARDWARE_REGS_ROSC_DEFINED // ============================================================================= // Register : ROSC_CTRL // Description : Ring Oscillator control #define ROSC_CTRL_OFFSET _u(0x00000000) #define ROSC_CTRL_BITS _u(0x00ffffff) #define ROSC_CTRL_RESET _u(0x00000aa0) // ----------------------------------------------------------------------------- // Field : ROSC_CTRL_ENABLE // Description : On power-up this field is initialised to ENABLE // The system clock must be switched to another source before // setting this field to DISABLE otherwise the chip will lock up // The 12-bit code is intended to give some protection against // accidental writes. An invalid setting will enable the // oscillator. // 0xd1e -> DISABLE // 0xfab -> ENABLE #define ROSC_CTRL_ENABLE_RESET "-" #define ROSC_CTRL_ENABLE_BITS _u(0x00fff000) #define ROSC_CTRL_ENABLE_MSB _u(23) #define ROSC_CTRL_ENABLE_LSB _u(12) #define ROSC_CTRL_ENABLE_ACCESS "RW" #define ROSC_CTRL_ENABLE_VALUE_DISABLE _u(0xd1e) #define ROSC_CTRL_ENABLE_VALUE_ENABLE _u(0xfab) // ----------------------------------------------------------------------------- // Field : ROSC_CTRL_FREQ_RANGE // Description : Controls the number of delay stages in the ROSC ring // LOW uses stages 0 to 7 // MEDIUM uses stages 0 to 5 // HIGH uses stages 0 to 3 // TOOHIGH uses stages 0 to 1 and should not be used because its // frequency exceeds design specifications // The clock output will not glitch when changing the range up one // step at a time // The clock output will glitch when changing the range down // Note: the values here are gray coded which is why HIGH comes // before TOOHIGH // 0xfa4 -> LOW // 0xfa5 -> MEDIUM // 0xfa7 -> HIGH // 0xfa6 -> TOOHIGH #define ROSC_CTRL_FREQ_RANGE_RESET _u(0xaa0) #define ROSC_CTRL_FREQ_RANGE_BITS _u(0x00000fff) #define ROSC_CTRL_FREQ_RANGE_MSB _u(11) #define ROSC_CTRL_FREQ_RANGE_LSB _u(0) #define ROSC_CTRL_FREQ_RANGE_ACCESS "RW" #define ROSC_CTRL_FREQ_RANGE_VALUE_LOW _u(0xfa4) #define ROSC_CTRL_FREQ_RANGE_VALUE_MEDIUM _u(0xfa5) #define ROSC_CTRL_FREQ_RANGE_VALUE_HIGH _u(0xfa7) #define ROSC_CTRL_FREQ_RANGE_VALUE_TOOHIGH _u(0xfa6) // ============================================================================= // Register : ROSC_FREQA // Description : The FREQA & FREQB registers control the frequency by // controlling the drive strength of each stage // The drive strength has 4 levels determined by the number of // bits set // Increasing the number of bits set increases the drive strength // and increases the oscillation frequency // 0 bits set is the default drive strength // 1 bit set doubles the drive strength // 2 bits set triples drive strength // 3 bits set quadruples drive strength #define ROSC_FREQA_OFFSET _u(0x00000004) #define ROSC_FREQA_BITS _u(0xffff7777) #define ROSC_FREQA_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ROSC_FREQA_PASSWD // Description : Set to 0x9696 to apply the settings // Any other value in this field will set all drive strengths to 0 // 0x9696 -> PASS #define ROSC_FREQA_PASSWD_RESET _u(0x0000) #define ROSC_FREQA_PASSWD_BITS _u(0xffff0000) #define ROSC_FREQA_PASSWD_MSB _u(31) #define ROSC_FREQA_PASSWD_LSB _u(16) #define ROSC_FREQA_PASSWD_ACCESS "RW" #define ROSC_FREQA_PASSWD_VALUE_PASS _u(0x9696) // ----------------------------------------------------------------------------- // Field : ROSC_FREQA_DS3 // Description : Stage 3 drive strength #define ROSC_FREQA_DS3_RESET _u(0x0) #define ROSC_FREQA_DS3_BITS _u(0x00007000) #define ROSC_FREQA_DS3_MSB _u(14) #define ROSC_FREQA_DS3_LSB _u(12) #define ROSC_FREQA_DS3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ROSC_FREQA_DS2 // Description : Stage 2 drive strength #define ROSC_FREQA_DS2_RESET _u(0x0) #define ROSC_FREQA_DS2_BITS _u(0x00000700) #define ROSC_FREQA_DS2_MSB _u(10) #define ROSC_FREQA_DS2_LSB _u(8) #define ROSC_FREQA_DS2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ROSC_FREQA_DS1 // Description : Stage 1 drive strength #define ROSC_FREQA_DS1_RESET _u(0x0) #define ROSC_FREQA_DS1_BITS _u(0x00000070) #define ROSC_FREQA_DS1_MSB _u(6) #define ROSC_FREQA_DS1_LSB _u(4) #define ROSC_FREQA_DS1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ROSC_FREQA_DS0 // Description : Stage 0 drive strength #define ROSC_FREQA_DS0_RESET _u(0x0) #define ROSC_FREQA_DS0_BITS _u(0x00000007) #define ROSC_FREQA_DS0_MSB _u(2) #define ROSC_FREQA_DS0_LSB _u(0) #define ROSC_FREQA_DS0_ACCESS "RW" // ============================================================================= // Register : ROSC_FREQB // Description : For a detailed description see freqa register #define ROSC_FREQB_OFFSET _u(0x00000008) #define ROSC_FREQB_BITS _u(0xffff7777) #define ROSC_FREQB_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ROSC_FREQB_PASSWD // Description : Set to 0x9696 to apply the settings // Any other value in this field will set all drive strengths to 0 // 0x9696 -> PASS #define ROSC_FREQB_PASSWD_RESET _u(0x0000) #define ROSC_FREQB_PASSWD_BITS _u(0xffff0000) #define ROSC_FREQB_PASSWD_MSB _u(31) #define ROSC_FREQB_PASSWD_LSB _u(16) #define ROSC_FREQB_PASSWD_ACCESS "RW" #define ROSC_FREQB_PASSWD_VALUE_PASS _u(0x9696) // ----------------------------------------------------------------------------- // Field : ROSC_FREQB_DS7 // Description : Stage 7 drive strength #define ROSC_FREQB_DS7_RESET _u(0x0) #define ROSC_FREQB_DS7_BITS _u(0x00007000) #define ROSC_FREQB_DS7_MSB _u(14) #define ROSC_FREQB_DS7_LSB _u(12) #define ROSC_FREQB_DS7_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ROSC_FREQB_DS6 // Description : Stage 6 drive strength #define ROSC_FREQB_DS6_RESET _u(0x0) #define ROSC_FREQB_DS6_BITS _u(0x00000700) #define ROSC_FREQB_DS6_MSB _u(10) #define ROSC_FREQB_DS6_LSB _u(8) #define ROSC_FREQB_DS6_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ROSC_FREQB_DS5 // Description : Stage 5 drive strength #define ROSC_FREQB_DS5_RESET _u(0x0) #define ROSC_FREQB_DS5_BITS _u(0x00000070) #define ROSC_FREQB_DS5_MSB _u(6) #define ROSC_FREQB_DS5_LSB _u(4) #define ROSC_FREQB_DS5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ROSC_FREQB_DS4 // Description : Stage 4 drive strength #define ROSC_FREQB_DS4_RESET _u(0x0) #define ROSC_FREQB_DS4_BITS _u(0x00000007) #define ROSC_FREQB_DS4_MSB _u(2) #define ROSC_FREQB_DS4_LSB _u(0) #define ROSC_FREQB_DS4_ACCESS "RW" // ============================================================================= // Register : ROSC_DORMANT // Description : Ring Oscillator pause control // This is used to save power by pausing the ROSC // On power-up this field is initialised to WAKE // An invalid write will also select WAKE // Warning: setup the irq before selecting dormant mode // 0x636f6d61 -> DORMANT // 0x77616b65 -> WAKE #define ROSC_DORMANT_OFFSET _u(0x0000000c) #define ROSC_DORMANT_BITS _u(0xffffffff) #define ROSC_DORMANT_RESET "-" #define ROSC_DORMANT_MSB _u(31) #define ROSC_DORMANT_LSB _u(0) #define ROSC_DORMANT_ACCESS "RW" #define ROSC_DORMANT_VALUE_DORMANT _u(0x636f6d61) #define ROSC_DORMANT_VALUE_WAKE _u(0x77616b65) // ============================================================================= // Register : ROSC_DIV // Description : Controls the output divider // set to 0xaa0 + div where // div = 0 divides by 32 // div = 1-31 divides by div // any other value sets div=31 // this register resets to div=16 // 0xaa0 -> PASS #define ROSC_DIV_OFFSET _u(0x00000010) #define ROSC_DIV_BITS _u(0x00000fff) #define ROSC_DIV_RESET "-" #define ROSC_DIV_MSB _u(11) #define ROSC_DIV_LSB _u(0) #define ROSC_DIV_ACCESS "RW" #define ROSC_DIV_VALUE_PASS _u(0xaa0) // ============================================================================= // Register : ROSC_PHASE // Description : Controls the phase shifted output #define ROSC_PHASE_OFFSET _u(0x00000014) #define ROSC_PHASE_BITS _u(0x00000fff) #define ROSC_PHASE_RESET _u(0x00000008) // ----------------------------------------------------------------------------- // Field : ROSC_PHASE_PASSWD // Description : set to 0xaa // any other value enables the output with shift=0 #define ROSC_PHASE_PASSWD_RESET _u(0x00) #define ROSC_PHASE_PASSWD_BITS _u(0x00000ff0) #define ROSC_PHASE_PASSWD_MSB _u(11) #define ROSC_PHASE_PASSWD_LSB _u(4) #define ROSC_PHASE_PASSWD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ROSC_PHASE_ENABLE // Description : enable the phase-shifted output // this can be changed on-the-fly #define ROSC_PHASE_ENABLE_RESET _u(0x1) #define ROSC_PHASE_ENABLE_BITS _u(0x00000008) #define ROSC_PHASE_ENABLE_MSB _u(3) #define ROSC_PHASE_ENABLE_LSB _u(3) #define ROSC_PHASE_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ROSC_PHASE_FLIP // Description : invert the phase-shifted output // this is ignored when div=1 #define ROSC_PHASE_FLIP_RESET _u(0x0) #define ROSC_PHASE_FLIP_BITS _u(0x00000004) #define ROSC_PHASE_FLIP_MSB _u(2) #define ROSC_PHASE_FLIP_LSB _u(2) #define ROSC_PHASE_FLIP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : ROSC_PHASE_SHIFT // Description : phase shift the phase-shifted output by SHIFT input clocks // this can be changed on-the-fly // must be set to 0 before setting div=1 #define ROSC_PHASE_SHIFT_RESET _u(0x0) #define ROSC_PHASE_SHIFT_BITS _u(0x00000003) #define ROSC_PHASE_SHIFT_MSB _u(1) #define ROSC_PHASE_SHIFT_LSB _u(0) #define ROSC_PHASE_SHIFT_ACCESS "RW" // ============================================================================= // Register : ROSC_STATUS // Description : Ring Oscillator Status #define ROSC_STATUS_OFFSET _u(0x00000018) #define ROSC_STATUS_BITS _u(0x81011000) #define ROSC_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : ROSC_STATUS_STABLE // Description : Oscillator is running and stable #define ROSC_STATUS_STABLE_RESET _u(0x0) #define ROSC_STATUS_STABLE_BITS _u(0x80000000) #define ROSC_STATUS_STABLE_MSB _u(31) #define ROSC_STATUS_STABLE_LSB _u(31) #define ROSC_STATUS_STABLE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : ROSC_STATUS_BADWRITE // Description : An invalid value has been written to CTRL_ENABLE or // CTRL_FREQ_RANGE or FREQA or FREQB or DIV or PHASE or DORMANT #define ROSC_STATUS_BADWRITE_RESET _u(0x0) #define ROSC_STATUS_BADWRITE_BITS _u(0x01000000) #define ROSC_STATUS_BADWRITE_MSB _u(24) #define ROSC_STATUS_BADWRITE_LSB _u(24) #define ROSC_STATUS_BADWRITE_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : ROSC_STATUS_DIV_RUNNING // Description : post-divider is running // this resets to 0 but transitions to 1 during chip startup #define ROSC_STATUS_DIV_RUNNING_RESET "-" #define ROSC_STATUS_DIV_RUNNING_BITS _u(0x00010000) #define ROSC_STATUS_DIV_RUNNING_MSB _u(16) #define ROSC_STATUS_DIV_RUNNING_LSB _u(16) #define ROSC_STATUS_DIV_RUNNING_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : ROSC_STATUS_ENABLED // Description : Oscillator is enabled but not necessarily running and stable // this resets to 0 but transitions to 1 during chip startup #define ROSC_STATUS_ENABLED_RESET "-" #define ROSC_STATUS_ENABLED_BITS _u(0x00001000) #define ROSC_STATUS_ENABLED_MSB _u(12) #define ROSC_STATUS_ENABLED_LSB _u(12) #define ROSC_STATUS_ENABLED_ACCESS "RO" // ============================================================================= // Register : ROSC_RANDOMBIT // Description : This just reads the state of the oscillator output so // randomness is compromised if the ring oscillator is stopped or // run at a harmonic of the bus frequency #define ROSC_RANDOMBIT_OFFSET _u(0x0000001c) #define ROSC_RANDOMBIT_BITS _u(0x00000001) #define ROSC_RANDOMBIT_RESET _u(0x00000001) #define ROSC_RANDOMBIT_MSB _u(0) #define ROSC_RANDOMBIT_LSB _u(0) #define ROSC_RANDOMBIT_ACCESS "RO" // ============================================================================= // Register : ROSC_COUNT // Description : A down counter running at the ROSC frequency which counts to // zero and stops. // To start the counter write a non-zero value. // Can be used for short software pauses when setting up time // sensitive hardware. #define ROSC_COUNT_OFFSET _u(0x00000020) #define ROSC_COUNT_BITS _u(0x000000ff) #define ROSC_COUNT_RESET _u(0x00000000) #define ROSC_COUNT_MSB _u(7) #define ROSC_COUNT_LSB _u(0) #define ROSC_COUNT_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_ROSC_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/rtc.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : RTC // Version : 1 // Bus type : apb // Description : Register block to control RTC // ============================================================================= #ifndef HARDWARE_REGS_RTC_DEFINED #define HARDWARE_REGS_RTC_DEFINED // ============================================================================= // Register : RTC_CLKDIV_M1 // Description : Divider minus 1 for the 1 second counter. Safe to change the // value when RTC is not enabled. #define RTC_CLKDIV_M1_OFFSET _u(0x00000000) #define RTC_CLKDIV_M1_BITS _u(0x0000ffff) #define RTC_CLKDIV_M1_RESET _u(0x00000000) #define RTC_CLKDIV_M1_MSB _u(15) #define RTC_CLKDIV_M1_LSB _u(0) #define RTC_CLKDIV_M1_ACCESS "RW" // ============================================================================= // Register : RTC_SETUP_0 // Description : RTC setup register 0 #define RTC_SETUP_0_OFFSET _u(0x00000004) #define RTC_SETUP_0_BITS _u(0x00ffff1f) #define RTC_SETUP_0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_SETUP_0_YEAR // Description : Year #define RTC_SETUP_0_YEAR_RESET _u(0x000) #define RTC_SETUP_0_YEAR_BITS _u(0x00fff000) #define RTC_SETUP_0_YEAR_MSB _u(23) #define RTC_SETUP_0_YEAR_LSB _u(12) #define RTC_SETUP_0_YEAR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_SETUP_0_MONTH // Description : Month (1..12) #define RTC_SETUP_0_MONTH_RESET _u(0x0) #define RTC_SETUP_0_MONTH_BITS _u(0x00000f00) #define RTC_SETUP_0_MONTH_MSB _u(11) #define RTC_SETUP_0_MONTH_LSB _u(8) #define RTC_SETUP_0_MONTH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_SETUP_0_DAY // Description : Day of the month (1..31) #define RTC_SETUP_0_DAY_RESET _u(0x00) #define RTC_SETUP_0_DAY_BITS _u(0x0000001f) #define RTC_SETUP_0_DAY_MSB _u(4) #define RTC_SETUP_0_DAY_LSB _u(0) #define RTC_SETUP_0_DAY_ACCESS "RW" // ============================================================================= // Register : RTC_SETUP_1 // Description : RTC setup register 1 #define RTC_SETUP_1_OFFSET _u(0x00000008) #define RTC_SETUP_1_BITS _u(0x071f3f3f) #define RTC_SETUP_1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_SETUP_1_DOTW // Description : Day of the week: 1-Monday...0-Sunday ISO 8601 mod 7 #define RTC_SETUP_1_DOTW_RESET _u(0x0) #define RTC_SETUP_1_DOTW_BITS _u(0x07000000) #define RTC_SETUP_1_DOTW_MSB _u(26) #define RTC_SETUP_1_DOTW_LSB _u(24) #define RTC_SETUP_1_DOTW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_SETUP_1_HOUR // Description : Hours #define RTC_SETUP_1_HOUR_RESET _u(0x00) #define RTC_SETUP_1_HOUR_BITS _u(0x001f0000) #define RTC_SETUP_1_HOUR_MSB _u(20) #define RTC_SETUP_1_HOUR_LSB _u(16) #define RTC_SETUP_1_HOUR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_SETUP_1_MIN // Description : Minutes #define RTC_SETUP_1_MIN_RESET _u(0x00) #define RTC_SETUP_1_MIN_BITS _u(0x00003f00) #define RTC_SETUP_1_MIN_MSB _u(13) #define RTC_SETUP_1_MIN_LSB _u(8) #define RTC_SETUP_1_MIN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_SETUP_1_SEC // Description : Seconds #define RTC_SETUP_1_SEC_RESET _u(0x00) #define RTC_SETUP_1_SEC_BITS _u(0x0000003f) #define RTC_SETUP_1_SEC_MSB _u(5) #define RTC_SETUP_1_SEC_LSB _u(0) #define RTC_SETUP_1_SEC_ACCESS "RW" // ============================================================================= // Register : RTC_CTRL // Description : RTC Control and status #define RTC_CTRL_OFFSET _u(0x0000000c) #define RTC_CTRL_BITS _u(0x00000113) #define RTC_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_CTRL_FORCE_NOTLEAPYEAR // Description : If set, leapyear is forced off. // Useful for years divisible by 100 but not by 400 #define RTC_CTRL_FORCE_NOTLEAPYEAR_RESET _u(0x0) #define RTC_CTRL_FORCE_NOTLEAPYEAR_BITS _u(0x00000100) #define RTC_CTRL_FORCE_NOTLEAPYEAR_MSB _u(8) #define RTC_CTRL_FORCE_NOTLEAPYEAR_LSB _u(8) #define RTC_CTRL_FORCE_NOTLEAPYEAR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_CTRL_LOAD // Description : Load RTC #define RTC_CTRL_LOAD_RESET _u(0x0) #define RTC_CTRL_LOAD_BITS _u(0x00000010) #define RTC_CTRL_LOAD_MSB _u(4) #define RTC_CTRL_LOAD_LSB _u(4) #define RTC_CTRL_LOAD_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : RTC_CTRL_RTC_ACTIVE // Description : RTC enabled (running) #define RTC_CTRL_RTC_ACTIVE_RESET "-" #define RTC_CTRL_RTC_ACTIVE_BITS _u(0x00000002) #define RTC_CTRL_RTC_ACTIVE_MSB _u(1) #define RTC_CTRL_RTC_ACTIVE_LSB _u(1) #define RTC_CTRL_RTC_ACTIVE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RTC_CTRL_RTC_ENABLE // Description : Enable RTC #define RTC_CTRL_RTC_ENABLE_RESET _u(0x0) #define RTC_CTRL_RTC_ENABLE_BITS _u(0x00000001) #define RTC_CTRL_RTC_ENABLE_MSB _u(0) #define RTC_CTRL_RTC_ENABLE_LSB _u(0) #define RTC_CTRL_RTC_ENABLE_ACCESS "RW" // ============================================================================= // Register : RTC_IRQ_SETUP_0 // Description : Interrupt setup register 0 #define RTC_IRQ_SETUP_0_OFFSET _u(0x00000010) #define RTC_IRQ_SETUP_0_BITS _u(0x37ffff1f) #define RTC_IRQ_SETUP_0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_0_MATCH_ACTIVE // Description : None #define RTC_IRQ_SETUP_0_MATCH_ACTIVE_RESET "-" #define RTC_IRQ_SETUP_0_MATCH_ACTIVE_BITS _u(0x20000000) #define RTC_IRQ_SETUP_0_MATCH_ACTIVE_MSB _u(29) #define RTC_IRQ_SETUP_0_MATCH_ACTIVE_LSB _u(29) #define RTC_IRQ_SETUP_0_MATCH_ACTIVE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_0_MATCH_ENA // Description : Global match enable. Don't change any other value while this // one is enabled #define RTC_IRQ_SETUP_0_MATCH_ENA_RESET _u(0x0) #define RTC_IRQ_SETUP_0_MATCH_ENA_BITS _u(0x10000000) #define RTC_IRQ_SETUP_0_MATCH_ENA_MSB _u(28) #define RTC_IRQ_SETUP_0_MATCH_ENA_LSB _u(28) #define RTC_IRQ_SETUP_0_MATCH_ENA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_0_YEAR_ENA // Description : Enable year matching #define RTC_IRQ_SETUP_0_YEAR_ENA_RESET _u(0x0) #define RTC_IRQ_SETUP_0_YEAR_ENA_BITS _u(0x04000000) #define RTC_IRQ_SETUP_0_YEAR_ENA_MSB _u(26) #define RTC_IRQ_SETUP_0_YEAR_ENA_LSB _u(26) #define RTC_IRQ_SETUP_0_YEAR_ENA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_0_MONTH_ENA // Description : Enable month matching #define RTC_IRQ_SETUP_0_MONTH_ENA_RESET _u(0x0) #define RTC_IRQ_SETUP_0_MONTH_ENA_BITS _u(0x02000000) #define RTC_IRQ_SETUP_0_MONTH_ENA_MSB _u(25) #define RTC_IRQ_SETUP_0_MONTH_ENA_LSB _u(25) #define RTC_IRQ_SETUP_0_MONTH_ENA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_0_DAY_ENA // Description : Enable day matching #define RTC_IRQ_SETUP_0_DAY_ENA_RESET _u(0x0) #define RTC_IRQ_SETUP_0_DAY_ENA_BITS _u(0x01000000) #define RTC_IRQ_SETUP_0_DAY_ENA_MSB _u(24) #define RTC_IRQ_SETUP_0_DAY_ENA_LSB _u(24) #define RTC_IRQ_SETUP_0_DAY_ENA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_0_YEAR // Description : Year #define RTC_IRQ_SETUP_0_YEAR_RESET _u(0x000) #define RTC_IRQ_SETUP_0_YEAR_BITS _u(0x00fff000) #define RTC_IRQ_SETUP_0_YEAR_MSB _u(23) #define RTC_IRQ_SETUP_0_YEAR_LSB _u(12) #define RTC_IRQ_SETUP_0_YEAR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_0_MONTH // Description : Month (1..12) #define RTC_IRQ_SETUP_0_MONTH_RESET _u(0x0) #define RTC_IRQ_SETUP_0_MONTH_BITS _u(0x00000f00) #define RTC_IRQ_SETUP_0_MONTH_MSB _u(11) #define RTC_IRQ_SETUP_0_MONTH_LSB _u(8) #define RTC_IRQ_SETUP_0_MONTH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_0_DAY // Description : Day of the month (1..31) #define RTC_IRQ_SETUP_0_DAY_RESET _u(0x00) #define RTC_IRQ_SETUP_0_DAY_BITS _u(0x0000001f) #define RTC_IRQ_SETUP_0_DAY_MSB _u(4) #define RTC_IRQ_SETUP_0_DAY_LSB _u(0) #define RTC_IRQ_SETUP_0_DAY_ACCESS "RW" // ============================================================================= // Register : RTC_IRQ_SETUP_1 // Description : Interrupt setup register 1 #define RTC_IRQ_SETUP_1_OFFSET _u(0x00000014) #define RTC_IRQ_SETUP_1_BITS _u(0xf71f3f3f) #define RTC_IRQ_SETUP_1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_1_DOTW_ENA // Description : Enable day of the week matching #define RTC_IRQ_SETUP_1_DOTW_ENA_RESET _u(0x0) #define RTC_IRQ_SETUP_1_DOTW_ENA_BITS _u(0x80000000) #define RTC_IRQ_SETUP_1_DOTW_ENA_MSB _u(31) #define RTC_IRQ_SETUP_1_DOTW_ENA_LSB _u(31) #define RTC_IRQ_SETUP_1_DOTW_ENA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_1_HOUR_ENA // Description : Enable hour matching #define RTC_IRQ_SETUP_1_HOUR_ENA_RESET _u(0x0) #define RTC_IRQ_SETUP_1_HOUR_ENA_BITS _u(0x40000000) #define RTC_IRQ_SETUP_1_HOUR_ENA_MSB _u(30) #define RTC_IRQ_SETUP_1_HOUR_ENA_LSB _u(30) #define RTC_IRQ_SETUP_1_HOUR_ENA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_1_MIN_ENA // Description : Enable minute matching #define RTC_IRQ_SETUP_1_MIN_ENA_RESET _u(0x0) #define RTC_IRQ_SETUP_1_MIN_ENA_BITS _u(0x20000000) #define RTC_IRQ_SETUP_1_MIN_ENA_MSB _u(29) #define RTC_IRQ_SETUP_1_MIN_ENA_LSB _u(29) #define RTC_IRQ_SETUP_1_MIN_ENA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_1_SEC_ENA // Description : Enable second matching #define RTC_IRQ_SETUP_1_SEC_ENA_RESET _u(0x0) #define RTC_IRQ_SETUP_1_SEC_ENA_BITS _u(0x10000000) #define RTC_IRQ_SETUP_1_SEC_ENA_MSB _u(28) #define RTC_IRQ_SETUP_1_SEC_ENA_LSB _u(28) #define RTC_IRQ_SETUP_1_SEC_ENA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_1_DOTW // Description : Day of the week #define RTC_IRQ_SETUP_1_DOTW_RESET _u(0x0) #define RTC_IRQ_SETUP_1_DOTW_BITS _u(0x07000000) #define RTC_IRQ_SETUP_1_DOTW_MSB _u(26) #define RTC_IRQ_SETUP_1_DOTW_LSB _u(24) #define RTC_IRQ_SETUP_1_DOTW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_1_HOUR // Description : Hours #define RTC_IRQ_SETUP_1_HOUR_RESET _u(0x00) #define RTC_IRQ_SETUP_1_HOUR_BITS _u(0x001f0000) #define RTC_IRQ_SETUP_1_HOUR_MSB _u(20) #define RTC_IRQ_SETUP_1_HOUR_LSB _u(16) #define RTC_IRQ_SETUP_1_HOUR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_1_MIN // Description : Minutes #define RTC_IRQ_SETUP_1_MIN_RESET _u(0x00) #define RTC_IRQ_SETUP_1_MIN_BITS _u(0x00003f00) #define RTC_IRQ_SETUP_1_MIN_MSB _u(13) #define RTC_IRQ_SETUP_1_MIN_LSB _u(8) #define RTC_IRQ_SETUP_1_MIN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : RTC_IRQ_SETUP_1_SEC // Description : Seconds #define RTC_IRQ_SETUP_1_SEC_RESET _u(0x00) #define RTC_IRQ_SETUP_1_SEC_BITS _u(0x0000003f) #define RTC_IRQ_SETUP_1_SEC_MSB _u(5) #define RTC_IRQ_SETUP_1_SEC_LSB _u(0) #define RTC_IRQ_SETUP_1_SEC_ACCESS "RW" // ============================================================================= // Register : RTC_RTC_1 // Description : RTC register 1. #define RTC_RTC_1_OFFSET _u(0x00000018) #define RTC_RTC_1_BITS _u(0x00ffff1f) #define RTC_RTC_1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_RTC_1_YEAR // Description : Year #define RTC_RTC_1_YEAR_RESET "-" #define RTC_RTC_1_YEAR_BITS _u(0x00fff000) #define RTC_RTC_1_YEAR_MSB _u(23) #define RTC_RTC_1_YEAR_LSB _u(12) #define RTC_RTC_1_YEAR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RTC_RTC_1_MONTH // Description : Month (1..12) #define RTC_RTC_1_MONTH_RESET "-" #define RTC_RTC_1_MONTH_BITS _u(0x00000f00) #define RTC_RTC_1_MONTH_MSB _u(11) #define RTC_RTC_1_MONTH_LSB _u(8) #define RTC_RTC_1_MONTH_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : RTC_RTC_1_DAY // Description : Day of the month (1..31) #define RTC_RTC_1_DAY_RESET "-" #define RTC_RTC_1_DAY_BITS _u(0x0000001f) #define RTC_RTC_1_DAY_MSB _u(4) #define RTC_RTC_1_DAY_LSB _u(0) #define RTC_RTC_1_DAY_ACCESS "RO" // ============================================================================= // Register : RTC_RTC_0 // Description : RTC register 0 // Read this before RTC 1! #define RTC_RTC_0_OFFSET _u(0x0000001c) #define RTC_RTC_0_BITS _u(0x071f3f3f) #define RTC_RTC_0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_RTC_0_DOTW // Description : Day of the week #define RTC_RTC_0_DOTW_RESET "-" #define RTC_RTC_0_DOTW_BITS _u(0x07000000) #define RTC_RTC_0_DOTW_MSB _u(26) #define RTC_RTC_0_DOTW_LSB _u(24) #define RTC_RTC_0_DOTW_ACCESS "RF" // ----------------------------------------------------------------------------- // Field : RTC_RTC_0_HOUR // Description : Hours #define RTC_RTC_0_HOUR_RESET "-" #define RTC_RTC_0_HOUR_BITS _u(0x001f0000) #define RTC_RTC_0_HOUR_MSB _u(20) #define RTC_RTC_0_HOUR_LSB _u(16) #define RTC_RTC_0_HOUR_ACCESS "RF" // ----------------------------------------------------------------------------- // Field : RTC_RTC_0_MIN // Description : Minutes #define RTC_RTC_0_MIN_RESET "-" #define RTC_RTC_0_MIN_BITS _u(0x00003f00) #define RTC_RTC_0_MIN_MSB _u(13) #define RTC_RTC_0_MIN_LSB _u(8) #define RTC_RTC_0_MIN_ACCESS "RF" // ----------------------------------------------------------------------------- // Field : RTC_RTC_0_SEC // Description : Seconds #define RTC_RTC_0_SEC_RESET "-" #define RTC_RTC_0_SEC_BITS _u(0x0000003f) #define RTC_RTC_0_SEC_MSB _u(5) #define RTC_RTC_0_SEC_LSB _u(0) #define RTC_RTC_0_SEC_ACCESS "RF" // ============================================================================= // Register : RTC_INTR // Description : Raw Interrupts #define RTC_INTR_OFFSET _u(0x00000020) #define RTC_INTR_BITS _u(0x00000001) #define RTC_INTR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_INTR_RTC // Description : None #define RTC_INTR_RTC_RESET _u(0x0) #define RTC_INTR_RTC_BITS _u(0x00000001) #define RTC_INTR_RTC_MSB _u(0) #define RTC_INTR_RTC_LSB _u(0) #define RTC_INTR_RTC_ACCESS "RO" // ============================================================================= // Register : RTC_INTE // Description : Interrupt Enable #define RTC_INTE_OFFSET _u(0x00000024) #define RTC_INTE_BITS _u(0x00000001) #define RTC_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_INTE_RTC // Description : None #define RTC_INTE_RTC_RESET _u(0x0) #define RTC_INTE_RTC_BITS _u(0x00000001) #define RTC_INTE_RTC_MSB _u(0) #define RTC_INTE_RTC_LSB _u(0) #define RTC_INTE_RTC_ACCESS "RW" // ============================================================================= // Register : RTC_INTF // Description : Interrupt Force #define RTC_INTF_OFFSET _u(0x00000028) #define RTC_INTF_BITS _u(0x00000001) #define RTC_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_INTF_RTC // Description : None #define RTC_INTF_RTC_RESET _u(0x0) #define RTC_INTF_RTC_BITS _u(0x00000001) #define RTC_INTF_RTC_MSB _u(0) #define RTC_INTF_RTC_LSB _u(0) #define RTC_INTF_RTC_ACCESS "RW" // ============================================================================= // Register : RTC_INTS // Description : Interrupt status after masking & forcing #define RTC_INTS_OFFSET _u(0x0000002c) #define RTC_INTS_BITS _u(0x00000001) #define RTC_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : RTC_INTS_RTC // Description : None #define RTC_INTS_RTC_RESET _u(0x0) #define RTC_INTS_RTC_BITS _u(0x00000001) #define RTC_INTS_RTC_MSB _u(0) #define RTC_INTS_RTC_LSB _u(0) #define RTC_INTS_RTC_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_RTC_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/sio.h ================================================ /** * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : SIO // Version : 1 // Bus type : apb // Description : Single-cycle IO block // Provides core-local and inter-core hardware for the two // processors, with single-cycle access. // ============================================================================= #ifndef HARDWARE_REGS_SIO_DEFINED #define HARDWARE_REGS_SIO_DEFINED // ============================================================================= // Register : SIO_CPUID // Description : Processor core identifier // Value is 0 when read from processor core 0, and 1 when read // from processor core 1. #define SIO_CPUID_OFFSET _u(0x00000000) #define SIO_CPUID_BITS _u(0xffffffff) #define SIO_CPUID_RESET "-" #define SIO_CPUID_MSB _u(31) #define SIO_CPUID_LSB _u(0) #define SIO_CPUID_ACCESS "RO" // ============================================================================= // Register : SIO_GPIO_IN // Description : Input value for GPIO pins // Input value for GPIO0...29 #define SIO_GPIO_IN_OFFSET _u(0x00000004) #define SIO_GPIO_IN_BITS _u(0x3fffffff) #define SIO_GPIO_IN_RESET _u(0x00000000) #define SIO_GPIO_IN_MSB _u(29) #define SIO_GPIO_IN_LSB _u(0) #define SIO_GPIO_IN_ACCESS "RO" // ============================================================================= // Register : SIO_GPIO_HI_IN // Description : Input value for QSPI pins // Input value on QSPI IO in order 0..5: SCLK, SSn, SD0, SD1, SD2, // SD3 #define SIO_GPIO_HI_IN_OFFSET _u(0x00000008) #define SIO_GPIO_HI_IN_BITS _u(0x0000003f) #define SIO_GPIO_HI_IN_RESET _u(0x00000000) #define SIO_GPIO_HI_IN_MSB _u(5) #define SIO_GPIO_HI_IN_LSB _u(0) #define SIO_GPIO_HI_IN_ACCESS "RO" // ============================================================================= // Register : SIO_GPIO_OUT // Description : GPIO output value // Set output level (1/0 -> high/low) for GPIO0...29. // Reading back gives the last value written, NOT the input value // from the pins. // If core 0 and core 1 both write to GPIO_OUT simultaneously (or // to a SET/CLR/XOR alias), // the result is as though the write from core 0 took place first, // and the write from core 1 was then applied to that intermediate // result. #define SIO_GPIO_OUT_OFFSET _u(0x00000010) #define SIO_GPIO_OUT_BITS _u(0x3fffffff) #define SIO_GPIO_OUT_RESET _u(0x00000000) #define SIO_GPIO_OUT_MSB _u(29) #define SIO_GPIO_OUT_LSB _u(0) #define SIO_GPIO_OUT_ACCESS "RW" // ============================================================================= // Register : SIO_GPIO_OUT_SET // Description : GPIO output value set // Perform an atomic bit-set on GPIO_OUT, i.e. `GPIO_OUT |= wdata` #define SIO_GPIO_OUT_SET_OFFSET _u(0x00000014) #define SIO_GPIO_OUT_SET_BITS _u(0x3fffffff) #define SIO_GPIO_OUT_SET_RESET _u(0x00000000) #define SIO_GPIO_OUT_SET_MSB _u(29) #define SIO_GPIO_OUT_SET_LSB _u(0) #define SIO_GPIO_OUT_SET_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_OUT_CLR // Description : GPIO output value clear // Perform an atomic bit-clear on GPIO_OUT, i.e. `GPIO_OUT &= // ~wdata` #define SIO_GPIO_OUT_CLR_OFFSET _u(0x00000018) #define SIO_GPIO_OUT_CLR_BITS _u(0x3fffffff) #define SIO_GPIO_OUT_CLR_RESET _u(0x00000000) #define SIO_GPIO_OUT_CLR_MSB _u(29) #define SIO_GPIO_OUT_CLR_LSB _u(0) #define SIO_GPIO_OUT_CLR_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_OUT_XOR // Description : GPIO output value XOR // Perform an atomic bitwise XOR on GPIO_OUT, i.e. `GPIO_OUT ^= // wdata` #define SIO_GPIO_OUT_XOR_OFFSET _u(0x0000001c) #define SIO_GPIO_OUT_XOR_BITS _u(0x3fffffff) #define SIO_GPIO_OUT_XOR_RESET _u(0x00000000) #define SIO_GPIO_OUT_XOR_MSB _u(29) #define SIO_GPIO_OUT_XOR_LSB _u(0) #define SIO_GPIO_OUT_XOR_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_OE // Description : GPIO output enable // Set output enable (1/0 -> output/input) for GPIO0...29. // Reading back gives the last value written. // If core 0 and core 1 both write to GPIO_OE simultaneously (or // to a SET/CLR/XOR alias), // the result is as though the write from core 0 took place first, // and the write from core 1 was then applied to that intermediate // result. #define SIO_GPIO_OE_OFFSET _u(0x00000020) #define SIO_GPIO_OE_BITS _u(0x3fffffff) #define SIO_GPIO_OE_RESET _u(0x00000000) #define SIO_GPIO_OE_MSB _u(29) #define SIO_GPIO_OE_LSB _u(0) #define SIO_GPIO_OE_ACCESS "RW" // ============================================================================= // Register : SIO_GPIO_OE_SET // Description : GPIO output enable set // Perform an atomic bit-set on GPIO_OE, i.e. `GPIO_OE |= wdata` #define SIO_GPIO_OE_SET_OFFSET _u(0x00000024) #define SIO_GPIO_OE_SET_BITS _u(0x3fffffff) #define SIO_GPIO_OE_SET_RESET _u(0x00000000) #define SIO_GPIO_OE_SET_MSB _u(29) #define SIO_GPIO_OE_SET_LSB _u(0) #define SIO_GPIO_OE_SET_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_OE_CLR // Description : GPIO output enable clear // Perform an atomic bit-clear on GPIO_OE, i.e. `GPIO_OE &= // ~wdata` #define SIO_GPIO_OE_CLR_OFFSET _u(0x00000028) #define SIO_GPIO_OE_CLR_BITS _u(0x3fffffff) #define SIO_GPIO_OE_CLR_RESET _u(0x00000000) #define SIO_GPIO_OE_CLR_MSB _u(29) #define SIO_GPIO_OE_CLR_LSB _u(0) #define SIO_GPIO_OE_CLR_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_OE_XOR // Description : GPIO output enable XOR // Perform an atomic bitwise XOR on GPIO_OE, i.e. `GPIO_OE ^= // wdata` #define SIO_GPIO_OE_XOR_OFFSET _u(0x0000002c) #define SIO_GPIO_OE_XOR_BITS _u(0x3fffffff) #define SIO_GPIO_OE_XOR_RESET _u(0x00000000) #define SIO_GPIO_OE_XOR_MSB _u(29) #define SIO_GPIO_OE_XOR_LSB _u(0) #define SIO_GPIO_OE_XOR_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_HI_OUT // Description : QSPI output value // Set output level (1/0 -> high/low) for QSPI IO0...5. // Reading back gives the last value written, NOT the input value // from the pins. // If core 0 and core 1 both write to GPIO_HI_OUT simultaneously // (or to a SET/CLR/XOR alias), // the result is as though the write from core 0 took place first, // and the write from core 1 was then applied to that intermediate // result. #define SIO_GPIO_HI_OUT_OFFSET _u(0x00000030) #define SIO_GPIO_HI_OUT_BITS _u(0x0000003f) #define SIO_GPIO_HI_OUT_RESET _u(0x00000000) #define SIO_GPIO_HI_OUT_MSB _u(5) #define SIO_GPIO_HI_OUT_LSB _u(0) #define SIO_GPIO_HI_OUT_ACCESS "RW" // ============================================================================= // Register : SIO_GPIO_HI_OUT_SET // Description : QSPI output value set // Perform an atomic bit-set on GPIO_HI_OUT, i.e. `GPIO_HI_OUT |= // wdata` #define SIO_GPIO_HI_OUT_SET_OFFSET _u(0x00000034) #define SIO_GPIO_HI_OUT_SET_BITS _u(0x0000003f) #define SIO_GPIO_HI_OUT_SET_RESET _u(0x00000000) #define SIO_GPIO_HI_OUT_SET_MSB _u(5) #define SIO_GPIO_HI_OUT_SET_LSB _u(0) #define SIO_GPIO_HI_OUT_SET_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_HI_OUT_CLR // Description : QSPI output value clear // Perform an atomic bit-clear on GPIO_HI_OUT, i.e. `GPIO_HI_OUT // &= ~wdata` #define SIO_GPIO_HI_OUT_CLR_OFFSET _u(0x00000038) #define SIO_GPIO_HI_OUT_CLR_BITS _u(0x0000003f) #define SIO_GPIO_HI_OUT_CLR_RESET _u(0x00000000) #define SIO_GPIO_HI_OUT_CLR_MSB _u(5) #define SIO_GPIO_HI_OUT_CLR_LSB _u(0) #define SIO_GPIO_HI_OUT_CLR_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_HI_OUT_XOR // Description : QSPI output value XOR // Perform an atomic bitwise XOR on GPIO_HI_OUT, i.e. `GPIO_HI_OUT // ^= wdata` #define SIO_GPIO_HI_OUT_XOR_OFFSET _u(0x0000003c) #define SIO_GPIO_HI_OUT_XOR_BITS _u(0x0000003f) #define SIO_GPIO_HI_OUT_XOR_RESET _u(0x00000000) #define SIO_GPIO_HI_OUT_XOR_MSB _u(5) #define SIO_GPIO_HI_OUT_XOR_LSB _u(0) #define SIO_GPIO_HI_OUT_XOR_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_HI_OE // Description : QSPI output enable // Set output enable (1/0 -> output/input) for QSPI IO0...5. // Reading back gives the last value written. // If core 0 and core 1 both write to GPIO_HI_OE simultaneously // (or to a SET/CLR/XOR alias), // the result is as though the write from core 0 took place first, // and the write from core 1 was then applied to that intermediate // result. #define SIO_GPIO_HI_OE_OFFSET _u(0x00000040) #define SIO_GPIO_HI_OE_BITS _u(0x0000003f) #define SIO_GPIO_HI_OE_RESET _u(0x00000000) #define SIO_GPIO_HI_OE_MSB _u(5) #define SIO_GPIO_HI_OE_LSB _u(0) #define SIO_GPIO_HI_OE_ACCESS "RW" // ============================================================================= // Register : SIO_GPIO_HI_OE_SET // Description : QSPI output enable set // Perform an atomic bit-set on GPIO_HI_OE, i.e. `GPIO_HI_OE |= // wdata` #define SIO_GPIO_HI_OE_SET_OFFSET _u(0x00000044) #define SIO_GPIO_HI_OE_SET_BITS _u(0x0000003f) #define SIO_GPIO_HI_OE_SET_RESET _u(0x00000000) #define SIO_GPIO_HI_OE_SET_MSB _u(5) #define SIO_GPIO_HI_OE_SET_LSB _u(0) #define SIO_GPIO_HI_OE_SET_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_HI_OE_CLR // Description : QSPI output enable clear // Perform an atomic bit-clear on GPIO_HI_OE, i.e. `GPIO_HI_OE &= // ~wdata` #define SIO_GPIO_HI_OE_CLR_OFFSET _u(0x00000048) #define SIO_GPIO_HI_OE_CLR_BITS _u(0x0000003f) #define SIO_GPIO_HI_OE_CLR_RESET _u(0x00000000) #define SIO_GPIO_HI_OE_CLR_MSB _u(5) #define SIO_GPIO_HI_OE_CLR_LSB _u(0) #define SIO_GPIO_HI_OE_CLR_ACCESS "WO" // ============================================================================= // Register : SIO_GPIO_HI_OE_XOR // Description : QSPI output enable XOR // Perform an atomic bitwise XOR on GPIO_HI_OE, i.e. `GPIO_HI_OE // ^= wdata` #define SIO_GPIO_HI_OE_XOR_OFFSET _u(0x0000004c) #define SIO_GPIO_HI_OE_XOR_BITS _u(0x0000003f) #define SIO_GPIO_HI_OE_XOR_RESET _u(0x00000000) #define SIO_GPIO_HI_OE_XOR_MSB _u(5) #define SIO_GPIO_HI_OE_XOR_LSB _u(0) #define SIO_GPIO_HI_OE_XOR_ACCESS "WO" // ============================================================================= // Register : SIO_FIFO_ST // Description : Status register for inter-core FIFOs (mailboxes). // There is one FIFO in the core 0 -> core 1 direction, and one // core 1 -> core 0. Both are 32 bits wide and 8 words deep. // Core 0 can see the read side of the 1->0 FIFO (RX), and the // write side of 0->1 FIFO (TX). // Core 1 can see the read side of the 0->1 FIFO (RX), and the // write side of 1->0 FIFO (TX). // The SIO IRQ for each core is the logical OR of the VLD, WOF and // ROE fields of its FIFO_ST register. #define SIO_FIFO_ST_OFFSET _u(0x00000050) #define SIO_FIFO_ST_BITS _u(0x0000000f) #define SIO_FIFO_ST_RESET _u(0x00000002) // ----------------------------------------------------------------------------- // Field : SIO_FIFO_ST_ROE // Description : Sticky flag indicating the RX FIFO was read when empty. This // read was ignored by the FIFO. #define SIO_FIFO_ST_ROE_RESET _u(0x0) #define SIO_FIFO_ST_ROE_BITS _u(0x00000008) #define SIO_FIFO_ST_ROE_MSB _u(3) #define SIO_FIFO_ST_ROE_LSB _u(3) #define SIO_FIFO_ST_ROE_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : SIO_FIFO_ST_WOF // Description : Sticky flag indicating the TX FIFO was written when full. This // write was ignored by the FIFO. #define SIO_FIFO_ST_WOF_RESET _u(0x0) #define SIO_FIFO_ST_WOF_BITS _u(0x00000004) #define SIO_FIFO_ST_WOF_MSB _u(2) #define SIO_FIFO_ST_WOF_LSB _u(2) #define SIO_FIFO_ST_WOF_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : SIO_FIFO_ST_RDY // Description : Value is 1 if this core's TX FIFO is not full (i.e. if FIFO_WR // is ready for more data) #define SIO_FIFO_ST_RDY_RESET _u(0x1) #define SIO_FIFO_ST_RDY_BITS _u(0x00000002) #define SIO_FIFO_ST_RDY_MSB _u(1) #define SIO_FIFO_ST_RDY_LSB _u(1) #define SIO_FIFO_ST_RDY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SIO_FIFO_ST_VLD // Description : Value is 1 if this core's RX FIFO is not empty (i.e. if FIFO_RD // is valid) #define SIO_FIFO_ST_VLD_RESET _u(0x0) #define SIO_FIFO_ST_VLD_BITS _u(0x00000001) #define SIO_FIFO_ST_VLD_MSB _u(0) #define SIO_FIFO_ST_VLD_LSB _u(0) #define SIO_FIFO_ST_VLD_ACCESS "RO" // ============================================================================= // Register : SIO_FIFO_WR // Description : Write access to this core's TX FIFO #define SIO_FIFO_WR_OFFSET _u(0x00000054) #define SIO_FIFO_WR_BITS _u(0xffffffff) #define SIO_FIFO_WR_RESET _u(0x00000000) #define SIO_FIFO_WR_MSB _u(31) #define SIO_FIFO_WR_LSB _u(0) #define SIO_FIFO_WR_ACCESS "WF" // ============================================================================= // Register : SIO_FIFO_RD // Description : Read access to this core's RX FIFO #define SIO_FIFO_RD_OFFSET _u(0x00000058) #define SIO_FIFO_RD_BITS _u(0xffffffff) #define SIO_FIFO_RD_RESET "-" #define SIO_FIFO_RD_MSB _u(31) #define SIO_FIFO_RD_LSB _u(0) #define SIO_FIFO_RD_ACCESS "RF" // ============================================================================= // Register : SIO_SPINLOCK_ST // Description : Spinlock state // A bitmap containing the state of all 32 spinlocks (1=locked). // Mainly intended for debugging. #define SIO_SPINLOCK_ST_OFFSET _u(0x0000005c) #define SIO_SPINLOCK_ST_BITS _u(0xffffffff) #define SIO_SPINLOCK_ST_RESET _u(0x00000000) #define SIO_SPINLOCK_ST_MSB _u(31) #define SIO_SPINLOCK_ST_LSB _u(0) #define SIO_SPINLOCK_ST_ACCESS "RO" // ============================================================================= // Register : SIO_DIV_UDIVIDEND // Description : Divider unsigned dividend // Write to the DIVIDEND operand of the divider, i.e. the p in `p // / q`. // Any operand write starts a new calculation. The results appear // in QUOTIENT, REMAINDER. // UDIVIDEND/SDIVIDEND are aliases of the same internal register. // The U alias starts an // unsigned calculation, and the S alias starts a signed // calculation. #define SIO_DIV_UDIVIDEND_OFFSET _u(0x00000060) #define SIO_DIV_UDIVIDEND_BITS _u(0xffffffff) #define SIO_DIV_UDIVIDEND_RESET _u(0x00000000) #define SIO_DIV_UDIVIDEND_MSB _u(31) #define SIO_DIV_UDIVIDEND_LSB _u(0) #define SIO_DIV_UDIVIDEND_ACCESS "RW" // ============================================================================= // Register : SIO_DIV_UDIVISOR // Description : Divider unsigned divisor // Write to the DIVISOR operand of the divider, i.e. the q in `p / // q`. // Any operand write starts a new calculation. The results appear // in QUOTIENT, REMAINDER. // UDIVISOR/SDIVISOR are aliases of the same internal register. // The U alias starts an // unsigned calculation, and the S alias starts a signed // calculation. #define SIO_DIV_UDIVISOR_OFFSET _u(0x00000064) #define SIO_DIV_UDIVISOR_BITS _u(0xffffffff) #define SIO_DIV_UDIVISOR_RESET _u(0x00000000) #define SIO_DIV_UDIVISOR_MSB _u(31) #define SIO_DIV_UDIVISOR_LSB _u(0) #define SIO_DIV_UDIVISOR_ACCESS "RW" // ============================================================================= // Register : SIO_DIV_SDIVIDEND // Description : Divider signed dividend // The same as UDIVIDEND, but starts a signed calculation, rather // than unsigned. #define SIO_DIV_SDIVIDEND_OFFSET _u(0x00000068) #define SIO_DIV_SDIVIDEND_BITS _u(0xffffffff) #define SIO_DIV_SDIVIDEND_RESET _u(0x00000000) #define SIO_DIV_SDIVIDEND_MSB _u(31) #define SIO_DIV_SDIVIDEND_LSB _u(0) #define SIO_DIV_SDIVIDEND_ACCESS "RW" // ============================================================================= // Register : SIO_DIV_SDIVISOR // Description : Divider signed divisor // The same as UDIVISOR, but starts a signed calculation, rather // than unsigned. #define SIO_DIV_SDIVISOR_OFFSET _u(0x0000006c) #define SIO_DIV_SDIVISOR_BITS _u(0xffffffff) #define SIO_DIV_SDIVISOR_RESET _u(0x00000000) #define SIO_DIV_SDIVISOR_MSB _u(31) #define SIO_DIV_SDIVISOR_LSB _u(0) #define SIO_DIV_SDIVISOR_ACCESS "RW" // ============================================================================= // Register : SIO_DIV_QUOTIENT // Description : Divider result quotient // The result of `DIVIDEND / DIVISOR` (division). Contents // undefined while CSR_READY is low. // For signed calculations, QUOTIENT is negative when the signs of // DIVIDEND and DIVISOR differ. // This register can be written to directly, for context // save/restore purposes. This halts any // in-progress calculation and sets the CSR_READY and CSR_DIRTY // flags. // Reading from QUOTIENT clears the CSR_DIRTY flag, so should read // results in the order // REMAINDER, QUOTIENT if CSR_DIRTY is used. #define SIO_DIV_QUOTIENT_OFFSET _u(0x00000070) #define SIO_DIV_QUOTIENT_BITS _u(0xffffffff) #define SIO_DIV_QUOTIENT_RESET _u(0x00000000) #define SIO_DIV_QUOTIENT_MSB _u(31) #define SIO_DIV_QUOTIENT_LSB _u(0) #define SIO_DIV_QUOTIENT_ACCESS "RW" // ============================================================================= // Register : SIO_DIV_REMAINDER // Description : Divider result remainder // The result of `DIVIDEND % DIVISOR` (modulo). Contents undefined // while CSR_READY is low. // For signed calculations, REMAINDER is negative only when // DIVIDEND is negative. // This register can be written to directly, for context // save/restore purposes. This halts any // in-progress calculation and sets the CSR_READY and CSR_DIRTY // flags. #define SIO_DIV_REMAINDER_OFFSET _u(0x00000074) #define SIO_DIV_REMAINDER_BITS _u(0xffffffff) #define SIO_DIV_REMAINDER_RESET _u(0x00000000) #define SIO_DIV_REMAINDER_MSB _u(31) #define SIO_DIV_REMAINDER_LSB _u(0) #define SIO_DIV_REMAINDER_ACCESS "RW" // ============================================================================= // Register : SIO_DIV_CSR // Description : Control and status register for divider. #define SIO_DIV_CSR_OFFSET _u(0x00000078) #define SIO_DIV_CSR_BITS _u(0x00000003) #define SIO_DIV_CSR_RESET _u(0x00000001) // ----------------------------------------------------------------------------- // Field : SIO_DIV_CSR_DIRTY // Description : Changes to 1 when any register is written, and back to 0 when // QUOTIENT is read. // Software can use this flag to make save/restore more efficient // (skip if not DIRTY). // If the flag is used in this way, it's recommended to either // read QUOTIENT only, // or REMAINDER and then QUOTIENT, to prevent data loss on context // switch. #define SIO_DIV_CSR_DIRTY_RESET _u(0x0) #define SIO_DIV_CSR_DIRTY_BITS _u(0x00000002) #define SIO_DIV_CSR_DIRTY_MSB _u(1) #define SIO_DIV_CSR_DIRTY_LSB _u(1) #define SIO_DIV_CSR_DIRTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SIO_DIV_CSR_READY // Description : Reads as 0 when a calculation is in progress, 1 otherwise. // Writing an operand (xDIVIDEND, xDIVISOR) will immediately start // a new calculation, no // matter if one is already in progress. // Writing to a result register will immediately terminate any // in-progress calculation // and set the READY and DIRTY flags. #define SIO_DIV_CSR_READY_RESET _u(0x1) #define SIO_DIV_CSR_READY_BITS _u(0x00000001) #define SIO_DIV_CSR_READY_MSB _u(0) #define SIO_DIV_CSR_READY_LSB _u(0) #define SIO_DIV_CSR_READY_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP0_ACCUM0 // Description : Read/write access to accumulator 0 #define SIO_INTERP0_ACCUM0_OFFSET _u(0x00000080) #define SIO_INTERP0_ACCUM0_BITS _u(0xffffffff) #define SIO_INTERP0_ACCUM0_RESET _u(0x00000000) #define SIO_INTERP0_ACCUM0_MSB _u(31) #define SIO_INTERP0_ACCUM0_LSB _u(0) #define SIO_INTERP0_ACCUM0_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP0_ACCUM1 // Description : Read/write access to accumulator 1 #define SIO_INTERP0_ACCUM1_OFFSET _u(0x00000084) #define SIO_INTERP0_ACCUM1_BITS _u(0xffffffff) #define SIO_INTERP0_ACCUM1_RESET _u(0x00000000) #define SIO_INTERP0_ACCUM1_MSB _u(31) #define SIO_INTERP0_ACCUM1_LSB _u(0) #define SIO_INTERP0_ACCUM1_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP0_BASE0 // Description : Read/write access to BASE0 register. #define SIO_INTERP0_BASE0_OFFSET _u(0x00000088) #define SIO_INTERP0_BASE0_BITS _u(0xffffffff) #define SIO_INTERP0_BASE0_RESET _u(0x00000000) #define SIO_INTERP0_BASE0_MSB _u(31) #define SIO_INTERP0_BASE0_LSB _u(0) #define SIO_INTERP0_BASE0_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP0_BASE1 // Description : Read/write access to BASE1 register. #define SIO_INTERP0_BASE1_OFFSET _u(0x0000008c) #define SIO_INTERP0_BASE1_BITS _u(0xffffffff) #define SIO_INTERP0_BASE1_RESET _u(0x00000000) #define SIO_INTERP0_BASE1_MSB _u(31) #define SIO_INTERP0_BASE1_LSB _u(0) #define SIO_INTERP0_BASE1_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP0_BASE2 // Description : Read/write access to BASE2 register. #define SIO_INTERP0_BASE2_OFFSET _u(0x00000090) #define SIO_INTERP0_BASE2_BITS _u(0xffffffff) #define SIO_INTERP0_BASE2_RESET _u(0x00000000) #define SIO_INTERP0_BASE2_MSB _u(31) #define SIO_INTERP0_BASE2_LSB _u(0) #define SIO_INTERP0_BASE2_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP0_POP_LANE0 // Description : Read LANE0 result, and simultaneously write lane results to // both accumulators (POP). #define SIO_INTERP0_POP_LANE0_OFFSET _u(0x00000094) #define SIO_INTERP0_POP_LANE0_BITS _u(0xffffffff) #define SIO_INTERP0_POP_LANE0_RESET _u(0x00000000) #define SIO_INTERP0_POP_LANE0_MSB _u(31) #define SIO_INTERP0_POP_LANE0_LSB _u(0) #define SIO_INTERP0_POP_LANE0_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP0_POP_LANE1 // Description : Read LANE1 result, and simultaneously write lane results to // both accumulators (POP). #define SIO_INTERP0_POP_LANE1_OFFSET _u(0x00000098) #define SIO_INTERP0_POP_LANE1_BITS _u(0xffffffff) #define SIO_INTERP0_POP_LANE1_RESET _u(0x00000000) #define SIO_INTERP0_POP_LANE1_MSB _u(31) #define SIO_INTERP0_POP_LANE1_LSB _u(0) #define SIO_INTERP0_POP_LANE1_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP0_POP_FULL // Description : Read FULL result, and simultaneously write lane results to both // accumulators (POP). #define SIO_INTERP0_POP_FULL_OFFSET _u(0x0000009c) #define SIO_INTERP0_POP_FULL_BITS _u(0xffffffff) #define SIO_INTERP0_POP_FULL_RESET _u(0x00000000) #define SIO_INTERP0_POP_FULL_MSB _u(31) #define SIO_INTERP0_POP_FULL_LSB _u(0) #define SIO_INTERP0_POP_FULL_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP0_PEEK_LANE0 // Description : Read LANE0 result, without altering any internal state (PEEK). #define SIO_INTERP0_PEEK_LANE0_OFFSET _u(0x000000a0) #define SIO_INTERP0_PEEK_LANE0_BITS _u(0xffffffff) #define SIO_INTERP0_PEEK_LANE0_RESET _u(0x00000000) #define SIO_INTERP0_PEEK_LANE0_MSB _u(31) #define SIO_INTERP0_PEEK_LANE0_LSB _u(0) #define SIO_INTERP0_PEEK_LANE0_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP0_PEEK_LANE1 // Description : Read LANE1 result, without altering any internal state (PEEK). #define SIO_INTERP0_PEEK_LANE1_OFFSET _u(0x000000a4) #define SIO_INTERP0_PEEK_LANE1_BITS _u(0xffffffff) #define SIO_INTERP0_PEEK_LANE1_RESET _u(0x00000000) #define SIO_INTERP0_PEEK_LANE1_MSB _u(31) #define SIO_INTERP0_PEEK_LANE1_LSB _u(0) #define SIO_INTERP0_PEEK_LANE1_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP0_PEEK_FULL // Description : Read FULL result, without altering any internal state (PEEK). #define SIO_INTERP0_PEEK_FULL_OFFSET _u(0x000000a8) #define SIO_INTERP0_PEEK_FULL_BITS _u(0xffffffff) #define SIO_INTERP0_PEEK_FULL_RESET _u(0x00000000) #define SIO_INTERP0_PEEK_FULL_MSB _u(31) #define SIO_INTERP0_PEEK_FULL_LSB _u(0) #define SIO_INTERP0_PEEK_FULL_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP0_CTRL_LANE0 // Description : Control register for lane 0 #define SIO_INTERP0_CTRL_LANE0_OFFSET _u(0x000000ac) #define SIO_INTERP0_CTRL_LANE0_BITS _u(0x03bfffff) #define SIO_INTERP0_CTRL_LANE0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_OVERF // Description : Set if either OVERF0 or OVERF1 is set. #define SIO_INTERP0_CTRL_LANE0_OVERF_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE0_OVERF_BITS _u(0x02000000) #define SIO_INTERP0_CTRL_LANE0_OVERF_MSB _u(25) #define SIO_INTERP0_CTRL_LANE0_OVERF_LSB _u(25) #define SIO_INTERP0_CTRL_LANE0_OVERF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_OVERF1 // Description : Indicates if any masked-off MSBs in ACCUM1 are set. #define SIO_INTERP0_CTRL_LANE0_OVERF1_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE0_OVERF1_BITS _u(0x01000000) #define SIO_INTERP0_CTRL_LANE0_OVERF1_MSB _u(24) #define SIO_INTERP0_CTRL_LANE0_OVERF1_LSB _u(24) #define SIO_INTERP0_CTRL_LANE0_OVERF1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_OVERF0 // Description : Indicates if any masked-off MSBs in ACCUM0 are set. #define SIO_INTERP0_CTRL_LANE0_OVERF0_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE0_OVERF0_BITS _u(0x00800000) #define SIO_INTERP0_CTRL_LANE0_OVERF0_MSB _u(23) #define SIO_INTERP0_CTRL_LANE0_OVERF0_LSB _u(23) #define SIO_INTERP0_CTRL_LANE0_OVERF0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_BLEND // Description : Only present on INTERP0 on each core. If BLEND mode is enabled: // - LANE1 result is a linear interpolation between BASE0 and // BASE1, controlled // by the 8 LSBs of lane 1 shift and mask value (a fractional // number between // 0 and 255/256ths) // - LANE0 result does not have BASE0 added (yields only the 8 // LSBs of lane 1 shift+mask value) // - FULL result does not have lane 1 shift+mask value added // (BASE2 + lane 0 shift+mask) // LANE1 SIGNED flag controls whether the interpolation is signed // or unsigned. #define SIO_INTERP0_CTRL_LANE0_BLEND_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE0_BLEND_BITS _u(0x00200000) #define SIO_INTERP0_CTRL_LANE0_BLEND_MSB _u(21) #define SIO_INTERP0_CTRL_LANE0_BLEND_LSB _u(21) #define SIO_INTERP0_CTRL_LANE0_BLEND_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_FORCE_MSB // Description : ORed into bits 29:28 of the lane result presented to the // processor on the bus. // No effect on the internal 32-bit datapath. Handy for using a // lane to generate sequence // of pointers into flash or SRAM. #define SIO_INTERP0_CTRL_LANE0_FORCE_MSB_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE0_FORCE_MSB_BITS _u(0x00180000) #define SIO_INTERP0_CTRL_LANE0_FORCE_MSB_MSB _u(20) #define SIO_INTERP0_CTRL_LANE0_FORCE_MSB_LSB _u(19) #define SIO_INTERP0_CTRL_LANE0_FORCE_MSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_ADD_RAW // Description : If 1, mask + shift is bypassed for LANE0 result. This does not // affect FULL result. #define SIO_INTERP0_CTRL_LANE0_ADD_RAW_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE0_ADD_RAW_BITS _u(0x00040000) #define SIO_INTERP0_CTRL_LANE0_ADD_RAW_MSB _u(18) #define SIO_INTERP0_CTRL_LANE0_ADD_RAW_LSB _u(18) #define SIO_INTERP0_CTRL_LANE0_ADD_RAW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_CROSS_RESULT // Description : If 1, feed the opposite lane's result into this lane's // accumulator on POP. #define SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_BITS _u(0x00020000) #define SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_MSB _u(17) #define SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_LSB _u(17) #define SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_CROSS_INPUT // Description : If 1, feed the opposite lane's accumulator into this lane's // shift + mask hardware. // Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is // before the shift+mask bypass) #define SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_BITS _u(0x00010000) #define SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_MSB _u(16) #define SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_LSB _u(16) #define SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_SIGNED // Description : If SIGNED is set, the shifted and masked accumulator value is // sign-extended to 32 bits // before adding to BASE0, and LANE0 PEEK/POP appear extended to // 32 bits when read by processor. #define SIO_INTERP0_CTRL_LANE0_SIGNED_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE0_SIGNED_BITS _u(0x00008000) #define SIO_INTERP0_CTRL_LANE0_SIGNED_MSB _u(15) #define SIO_INTERP0_CTRL_LANE0_SIGNED_LSB _u(15) #define SIO_INTERP0_CTRL_LANE0_SIGNED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_MASK_MSB // Description : The most-significant bit allowed to pass by the mask // (inclusive) // Setting MSB < LSB may cause chip to turn inside-out #define SIO_INTERP0_CTRL_LANE0_MASK_MSB_RESET _u(0x00) #define SIO_INTERP0_CTRL_LANE0_MASK_MSB_BITS _u(0x00007c00) #define SIO_INTERP0_CTRL_LANE0_MASK_MSB_MSB _u(14) #define SIO_INTERP0_CTRL_LANE0_MASK_MSB_LSB _u(10) #define SIO_INTERP0_CTRL_LANE0_MASK_MSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_MASK_LSB // Description : The least-significant bit allowed to pass by the mask // (inclusive) #define SIO_INTERP0_CTRL_LANE0_MASK_LSB_RESET _u(0x00) #define SIO_INTERP0_CTRL_LANE0_MASK_LSB_BITS _u(0x000003e0) #define SIO_INTERP0_CTRL_LANE0_MASK_LSB_MSB _u(9) #define SIO_INTERP0_CTRL_LANE0_MASK_LSB_LSB _u(5) #define SIO_INTERP0_CTRL_LANE0_MASK_LSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE0_SHIFT // Description : Logical right-shift applied to accumulator before masking #define SIO_INTERP0_CTRL_LANE0_SHIFT_RESET _u(0x00) #define SIO_INTERP0_CTRL_LANE0_SHIFT_BITS _u(0x0000001f) #define SIO_INTERP0_CTRL_LANE0_SHIFT_MSB _u(4) #define SIO_INTERP0_CTRL_LANE0_SHIFT_LSB _u(0) #define SIO_INTERP0_CTRL_LANE0_SHIFT_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP0_CTRL_LANE1 // Description : Control register for lane 1 #define SIO_INTERP0_CTRL_LANE1_OFFSET _u(0x000000b0) #define SIO_INTERP0_CTRL_LANE1_BITS _u(0x001fffff) #define SIO_INTERP0_CTRL_LANE1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE1_FORCE_MSB // Description : ORed into bits 29:28 of the lane result presented to the // processor on the bus. // No effect on the internal 32-bit datapath. Handy for using a // lane to generate sequence // of pointers into flash or SRAM. #define SIO_INTERP0_CTRL_LANE1_FORCE_MSB_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE1_FORCE_MSB_BITS _u(0x00180000) #define SIO_INTERP0_CTRL_LANE1_FORCE_MSB_MSB _u(20) #define SIO_INTERP0_CTRL_LANE1_FORCE_MSB_LSB _u(19) #define SIO_INTERP0_CTRL_LANE1_FORCE_MSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE1_ADD_RAW // Description : If 1, mask + shift is bypassed for LANE1 result. This does not // affect FULL result. #define SIO_INTERP0_CTRL_LANE1_ADD_RAW_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE1_ADD_RAW_BITS _u(0x00040000) #define SIO_INTERP0_CTRL_LANE1_ADD_RAW_MSB _u(18) #define SIO_INTERP0_CTRL_LANE1_ADD_RAW_LSB _u(18) #define SIO_INTERP0_CTRL_LANE1_ADD_RAW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE1_CROSS_RESULT // Description : If 1, feed the opposite lane's result into this lane's // accumulator on POP. #define SIO_INTERP0_CTRL_LANE1_CROSS_RESULT_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE1_CROSS_RESULT_BITS _u(0x00020000) #define SIO_INTERP0_CTRL_LANE1_CROSS_RESULT_MSB _u(17) #define SIO_INTERP0_CTRL_LANE1_CROSS_RESULT_LSB _u(17) #define SIO_INTERP0_CTRL_LANE1_CROSS_RESULT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE1_CROSS_INPUT // Description : If 1, feed the opposite lane's accumulator into this lane's // shift + mask hardware. // Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is // before the shift+mask bypass) #define SIO_INTERP0_CTRL_LANE1_CROSS_INPUT_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE1_CROSS_INPUT_BITS _u(0x00010000) #define SIO_INTERP0_CTRL_LANE1_CROSS_INPUT_MSB _u(16) #define SIO_INTERP0_CTRL_LANE1_CROSS_INPUT_LSB _u(16) #define SIO_INTERP0_CTRL_LANE1_CROSS_INPUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE1_SIGNED // Description : If SIGNED is set, the shifted and masked accumulator value is // sign-extended to 32 bits // before adding to BASE1, and LANE1 PEEK/POP appear extended to // 32 bits when read by processor. #define SIO_INTERP0_CTRL_LANE1_SIGNED_RESET _u(0x0) #define SIO_INTERP0_CTRL_LANE1_SIGNED_BITS _u(0x00008000) #define SIO_INTERP0_CTRL_LANE1_SIGNED_MSB _u(15) #define SIO_INTERP0_CTRL_LANE1_SIGNED_LSB _u(15) #define SIO_INTERP0_CTRL_LANE1_SIGNED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE1_MASK_MSB // Description : The most-significant bit allowed to pass by the mask // (inclusive) // Setting MSB < LSB may cause chip to turn inside-out #define SIO_INTERP0_CTRL_LANE1_MASK_MSB_RESET _u(0x00) #define SIO_INTERP0_CTRL_LANE1_MASK_MSB_BITS _u(0x00007c00) #define SIO_INTERP0_CTRL_LANE1_MASK_MSB_MSB _u(14) #define SIO_INTERP0_CTRL_LANE1_MASK_MSB_LSB _u(10) #define SIO_INTERP0_CTRL_LANE1_MASK_MSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE1_MASK_LSB // Description : The least-significant bit allowed to pass by the mask // (inclusive) #define SIO_INTERP0_CTRL_LANE1_MASK_LSB_RESET _u(0x00) #define SIO_INTERP0_CTRL_LANE1_MASK_LSB_BITS _u(0x000003e0) #define SIO_INTERP0_CTRL_LANE1_MASK_LSB_MSB _u(9) #define SIO_INTERP0_CTRL_LANE1_MASK_LSB_LSB _u(5) #define SIO_INTERP0_CTRL_LANE1_MASK_LSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP0_CTRL_LANE1_SHIFT // Description : Logical right-shift applied to accumulator before masking #define SIO_INTERP0_CTRL_LANE1_SHIFT_RESET _u(0x00) #define SIO_INTERP0_CTRL_LANE1_SHIFT_BITS _u(0x0000001f) #define SIO_INTERP0_CTRL_LANE1_SHIFT_MSB _u(4) #define SIO_INTERP0_CTRL_LANE1_SHIFT_LSB _u(0) #define SIO_INTERP0_CTRL_LANE1_SHIFT_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP0_ACCUM0_ADD // Description : Values written here are atomically added to ACCUM0 // Reading yields lane 0's raw shift and mask value (BASE0 not // added). #define SIO_INTERP0_ACCUM0_ADD_OFFSET _u(0x000000b4) #define SIO_INTERP0_ACCUM0_ADD_BITS _u(0x00ffffff) #define SIO_INTERP0_ACCUM0_ADD_RESET _u(0x00000000) #define SIO_INTERP0_ACCUM0_ADD_MSB _u(23) #define SIO_INTERP0_ACCUM0_ADD_LSB _u(0) #define SIO_INTERP0_ACCUM0_ADD_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP0_ACCUM1_ADD // Description : Values written here are atomically added to ACCUM1 // Reading yields lane 1's raw shift and mask value (BASE1 not // added). #define SIO_INTERP0_ACCUM1_ADD_OFFSET _u(0x000000b8) #define SIO_INTERP0_ACCUM1_ADD_BITS _u(0x00ffffff) #define SIO_INTERP0_ACCUM1_ADD_RESET _u(0x00000000) #define SIO_INTERP0_ACCUM1_ADD_MSB _u(23) #define SIO_INTERP0_ACCUM1_ADD_LSB _u(0) #define SIO_INTERP0_ACCUM1_ADD_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP0_BASE_1AND0 // Description : On write, the lower 16 bits go to BASE0, upper bits to BASE1 // simultaneously. // Each half is sign-extended to 32 bits if that lane's SIGNED // flag is set. #define SIO_INTERP0_BASE_1AND0_OFFSET _u(0x000000bc) #define SIO_INTERP0_BASE_1AND0_BITS _u(0xffffffff) #define SIO_INTERP0_BASE_1AND0_RESET _u(0x00000000) #define SIO_INTERP0_BASE_1AND0_MSB _u(31) #define SIO_INTERP0_BASE_1AND0_LSB _u(0) #define SIO_INTERP0_BASE_1AND0_ACCESS "WO" // ============================================================================= // Register : SIO_INTERP1_ACCUM0 // Description : Read/write access to accumulator 0 #define SIO_INTERP1_ACCUM0_OFFSET _u(0x000000c0) #define SIO_INTERP1_ACCUM0_BITS _u(0xffffffff) #define SIO_INTERP1_ACCUM0_RESET _u(0x00000000) #define SIO_INTERP1_ACCUM0_MSB _u(31) #define SIO_INTERP1_ACCUM0_LSB _u(0) #define SIO_INTERP1_ACCUM0_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP1_ACCUM1 // Description : Read/write access to accumulator 1 #define SIO_INTERP1_ACCUM1_OFFSET _u(0x000000c4) #define SIO_INTERP1_ACCUM1_BITS _u(0xffffffff) #define SIO_INTERP1_ACCUM1_RESET _u(0x00000000) #define SIO_INTERP1_ACCUM1_MSB _u(31) #define SIO_INTERP1_ACCUM1_LSB _u(0) #define SIO_INTERP1_ACCUM1_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP1_BASE0 // Description : Read/write access to BASE0 register. #define SIO_INTERP1_BASE0_OFFSET _u(0x000000c8) #define SIO_INTERP1_BASE0_BITS _u(0xffffffff) #define SIO_INTERP1_BASE0_RESET _u(0x00000000) #define SIO_INTERP1_BASE0_MSB _u(31) #define SIO_INTERP1_BASE0_LSB _u(0) #define SIO_INTERP1_BASE0_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP1_BASE1 // Description : Read/write access to BASE1 register. #define SIO_INTERP1_BASE1_OFFSET _u(0x000000cc) #define SIO_INTERP1_BASE1_BITS _u(0xffffffff) #define SIO_INTERP1_BASE1_RESET _u(0x00000000) #define SIO_INTERP1_BASE1_MSB _u(31) #define SIO_INTERP1_BASE1_LSB _u(0) #define SIO_INTERP1_BASE1_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP1_BASE2 // Description : Read/write access to BASE2 register. #define SIO_INTERP1_BASE2_OFFSET _u(0x000000d0) #define SIO_INTERP1_BASE2_BITS _u(0xffffffff) #define SIO_INTERP1_BASE2_RESET _u(0x00000000) #define SIO_INTERP1_BASE2_MSB _u(31) #define SIO_INTERP1_BASE2_LSB _u(0) #define SIO_INTERP1_BASE2_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP1_POP_LANE0 // Description : Read LANE0 result, and simultaneously write lane results to // both accumulators (POP). #define SIO_INTERP1_POP_LANE0_OFFSET _u(0x000000d4) #define SIO_INTERP1_POP_LANE0_BITS _u(0xffffffff) #define SIO_INTERP1_POP_LANE0_RESET _u(0x00000000) #define SIO_INTERP1_POP_LANE0_MSB _u(31) #define SIO_INTERP1_POP_LANE0_LSB _u(0) #define SIO_INTERP1_POP_LANE0_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP1_POP_LANE1 // Description : Read LANE1 result, and simultaneously write lane results to // both accumulators (POP). #define SIO_INTERP1_POP_LANE1_OFFSET _u(0x000000d8) #define SIO_INTERP1_POP_LANE1_BITS _u(0xffffffff) #define SIO_INTERP1_POP_LANE1_RESET _u(0x00000000) #define SIO_INTERP1_POP_LANE1_MSB _u(31) #define SIO_INTERP1_POP_LANE1_LSB _u(0) #define SIO_INTERP1_POP_LANE1_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP1_POP_FULL // Description : Read FULL result, and simultaneously write lane results to both // accumulators (POP). #define SIO_INTERP1_POP_FULL_OFFSET _u(0x000000dc) #define SIO_INTERP1_POP_FULL_BITS _u(0xffffffff) #define SIO_INTERP1_POP_FULL_RESET _u(0x00000000) #define SIO_INTERP1_POP_FULL_MSB _u(31) #define SIO_INTERP1_POP_FULL_LSB _u(0) #define SIO_INTERP1_POP_FULL_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP1_PEEK_LANE0 // Description : Read LANE0 result, without altering any internal state (PEEK). #define SIO_INTERP1_PEEK_LANE0_OFFSET _u(0x000000e0) #define SIO_INTERP1_PEEK_LANE0_BITS _u(0xffffffff) #define SIO_INTERP1_PEEK_LANE0_RESET _u(0x00000000) #define SIO_INTERP1_PEEK_LANE0_MSB _u(31) #define SIO_INTERP1_PEEK_LANE0_LSB _u(0) #define SIO_INTERP1_PEEK_LANE0_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP1_PEEK_LANE1 // Description : Read LANE1 result, without altering any internal state (PEEK). #define SIO_INTERP1_PEEK_LANE1_OFFSET _u(0x000000e4) #define SIO_INTERP1_PEEK_LANE1_BITS _u(0xffffffff) #define SIO_INTERP1_PEEK_LANE1_RESET _u(0x00000000) #define SIO_INTERP1_PEEK_LANE1_MSB _u(31) #define SIO_INTERP1_PEEK_LANE1_LSB _u(0) #define SIO_INTERP1_PEEK_LANE1_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP1_PEEK_FULL // Description : Read FULL result, without altering any internal state (PEEK). #define SIO_INTERP1_PEEK_FULL_OFFSET _u(0x000000e8) #define SIO_INTERP1_PEEK_FULL_BITS _u(0xffffffff) #define SIO_INTERP1_PEEK_FULL_RESET _u(0x00000000) #define SIO_INTERP1_PEEK_FULL_MSB _u(31) #define SIO_INTERP1_PEEK_FULL_LSB _u(0) #define SIO_INTERP1_PEEK_FULL_ACCESS "RO" // ============================================================================= // Register : SIO_INTERP1_CTRL_LANE0 // Description : Control register for lane 0 #define SIO_INTERP1_CTRL_LANE0_OFFSET _u(0x000000ec) #define SIO_INTERP1_CTRL_LANE0_BITS _u(0x03dfffff) #define SIO_INTERP1_CTRL_LANE0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_OVERF // Description : Set if either OVERF0 or OVERF1 is set. #define SIO_INTERP1_CTRL_LANE0_OVERF_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE0_OVERF_BITS _u(0x02000000) #define SIO_INTERP1_CTRL_LANE0_OVERF_MSB _u(25) #define SIO_INTERP1_CTRL_LANE0_OVERF_LSB _u(25) #define SIO_INTERP1_CTRL_LANE0_OVERF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_OVERF1 // Description : Indicates if any masked-off MSBs in ACCUM1 are set. #define SIO_INTERP1_CTRL_LANE0_OVERF1_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE0_OVERF1_BITS _u(0x01000000) #define SIO_INTERP1_CTRL_LANE0_OVERF1_MSB _u(24) #define SIO_INTERP1_CTRL_LANE0_OVERF1_LSB _u(24) #define SIO_INTERP1_CTRL_LANE0_OVERF1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_OVERF0 // Description : Indicates if any masked-off MSBs in ACCUM0 are set. #define SIO_INTERP1_CTRL_LANE0_OVERF0_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE0_OVERF0_BITS _u(0x00800000) #define SIO_INTERP1_CTRL_LANE0_OVERF0_MSB _u(23) #define SIO_INTERP1_CTRL_LANE0_OVERF0_LSB _u(23) #define SIO_INTERP1_CTRL_LANE0_OVERF0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_CLAMP // Description : Only present on INTERP1 on each core. If CLAMP mode is enabled: // - LANE0 result is shifted and masked ACCUM0, clamped by a lower // bound of // BASE0 and an upper bound of BASE1. // - Signedness of these comparisons is determined by // LANE0_CTRL_SIGNED #define SIO_INTERP1_CTRL_LANE0_CLAMP_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE0_CLAMP_BITS _u(0x00400000) #define SIO_INTERP1_CTRL_LANE0_CLAMP_MSB _u(22) #define SIO_INTERP1_CTRL_LANE0_CLAMP_LSB _u(22) #define SIO_INTERP1_CTRL_LANE0_CLAMP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_FORCE_MSB // Description : ORed into bits 29:28 of the lane result presented to the // processor on the bus. // No effect on the internal 32-bit datapath. Handy for using a // lane to generate sequence // of pointers into flash or SRAM. #define SIO_INTERP1_CTRL_LANE0_FORCE_MSB_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE0_FORCE_MSB_BITS _u(0x00180000) #define SIO_INTERP1_CTRL_LANE0_FORCE_MSB_MSB _u(20) #define SIO_INTERP1_CTRL_LANE0_FORCE_MSB_LSB _u(19) #define SIO_INTERP1_CTRL_LANE0_FORCE_MSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_ADD_RAW // Description : If 1, mask + shift is bypassed for LANE0 result. This does not // affect FULL result. #define SIO_INTERP1_CTRL_LANE0_ADD_RAW_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE0_ADD_RAW_BITS _u(0x00040000) #define SIO_INTERP1_CTRL_LANE0_ADD_RAW_MSB _u(18) #define SIO_INTERP1_CTRL_LANE0_ADD_RAW_LSB _u(18) #define SIO_INTERP1_CTRL_LANE0_ADD_RAW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_CROSS_RESULT // Description : If 1, feed the opposite lane's result into this lane's // accumulator on POP. #define SIO_INTERP1_CTRL_LANE0_CROSS_RESULT_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE0_CROSS_RESULT_BITS _u(0x00020000) #define SIO_INTERP1_CTRL_LANE0_CROSS_RESULT_MSB _u(17) #define SIO_INTERP1_CTRL_LANE0_CROSS_RESULT_LSB _u(17) #define SIO_INTERP1_CTRL_LANE0_CROSS_RESULT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_CROSS_INPUT // Description : If 1, feed the opposite lane's accumulator into this lane's // shift + mask hardware. // Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is // before the shift+mask bypass) #define SIO_INTERP1_CTRL_LANE0_CROSS_INPUT_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE0_CROSS_INPUT_BITS _u(0x00010000) #define SIO_INTERP1_CTRL_LANE0_CROSS_INPUT_MSB _u(16) #define SIO_INTERP1_CTRL_LANE0_CROSS_INPUT_LSB _u(16) #define SIO_INTERP1_CTRL_LANE0_CROSS_INPUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_SIGNED // Description : If SIGNED is set, the shifted and masked accumulator value is // sign-extended to 32 bits // before adding to BASE0, and LANE0 PEEK/POP appear extended to // 32 bits when read by processor. #define SIO_INTERP1_CTRL_LANE0_SIGNED_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE0_SIGNED_BITS _u(0x00008000) #define SIO_INTERP1_CTRL_LANE0_SIGNED_MSB _u(15) #define SIO_INTERP1_CTRL_LANE0_SIGNED_LSB _u(15) #define SIO_INTERP1_CTRL_LANE0_SIGNED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_MASK_MSB // Description : The most-significant bit allowed to pass by the mask // (inclusive) // Setting MSB < LSB may cause chip to turn inside-out #define SIO_INTERP1_CTRL_LANE0_MASK_MSB_RESET _u(0x00) #define SIO_INTERP1_CTRL_LANE0_MASK_MSB_BITS _u(0x00007c00) #define SIO_INTERP1_CTRL_LANE0_MASK_MSB_MSB _u(14) #define SIO_INTERP1_CTRL_LANE0_MASK_MSB_LSB _u(10) #define SIO_INTERP1_CTRL_LANE0_MASK_MSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_MASK_LSB // Description : The least-significant bit allowed to pass by the mask // (inclusive) #define SIO_INTERP1_CTRL_LANE0_MASK_LSB_RESET _u(0x00) #define SIO_INTERP1_CTRL_LANE0_MASK_LSB_BITS _u(0x000003e0) #define SIO_INTERP1_CTRL_LANE0_MASK_LSB_MSB _u(9) #define SIO_INTERP1_CTRL_LANE0_MASK_LSB_LSB _u(5) #define SIO_INTERP1_CTRL_LANE0_MASK_LSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE0_SHIFT // Description : Logical right-shift applied to accumulator before masking #define SIO_INTERP1_CTRL_LANE0_SHIFT_RESET _u(0x00) #define SIO_INTERP1_CTRL_LANE0_SHIFT_BITS _u(0x0000001f) #define SIO_INTERP1_CTRL_LANE0_SHIFT_MSB _u(4) #define SIO_INTERP1_CTRL_LANE0_SHIFT_LSB _u(0) #define SIO_INTERP1_CTRL_LANE0_SHIFT_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP1_CTRL_LANE1 // Description : Control register for lane 1 #define SIO_INTERP1_CTRL_LANE1_OFFSET _u(0x000000f0) #define SIO_INTERP1_CTRL_LANE1_BITS _u(0x001fffff) #define SIO_INTERP1_CTRL_LANE1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE1_FORCE_MSB // Description : ORed into bits 29:28 of the lane result presented to the // processor on the bus. // No effect on the internal 32-bit datapath. Handy for using a // lane to generate sequence // of pointers into flash or SRAM. #define SIO_INTERP1_CTRL_LANE1_FORCE_MSB_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE1_FORCE_MSB_BITS _u(0x00180000) #define SIO_INTERP1_CTRL_LANE1_FORCE_MSB_MSB _u(20) #define SIO_INTERP1_CTRL_LANE1_FORCE_MSB_LSB _u(19) #define SIO_INTERP1_CTRL_LANE1_FORCE_MSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE1_ADD_RAW // Description : If 1, mask + shift is bypassed for LANE1 result. This does not // affect FULL result. #define SIO_INTERP1_CTRL_LANE1_ADD_RAW_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE1_ADD_RAW_BITS _u(0x00040000) #define SIO_INTERP1_CTRL_LANE1_ADD_RAW_MSB _u(18) #define SIO_INTERP1_CTRL_LANE1_ADD_RAW_LSB _u(18) #define SIO_INTERP1_CTRL_LANE1_ADD_RAW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE1_CROSS_RESULT // Description : If 1, feed the opposite lane's result into this lane's // accumulator on POP. #define SIO_INTERP1_CTRL_LANE1_CROSS_RESULT_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE1_CROSS_RESULT_BITS _u(0x00020000) #define SIO_INTERP1_CTRL_LANE1_CROSS_RESULT_MSB _u(17) #define SIO_INTERP1_CTRL_LANE1_CROSS_RESULT_LSB _u(17) #define SIO_INTERP1_CTRL_LANE1_CROSS_RESULT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE1_CROSS_INPUT // Description : If 1, feed the opposite lane's accumulator into this lane's // shift + mask hardware. // Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is // before the shift+mask bypass) #define SIO_INTERP1_CTRL_LANE1_CROSS_INPUT_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE1_CROSS_INPUT_BITS _u(0x00010000) #define SIO_INTERP1_CTRL_LANE1_CROSS_INPUT_MSB _u(16) #define SIO_INTERP1_CTRL_LANE1_CROSS_INPUT_LSB _u(16) #define SIO_INTERP1_CTRL_LANE1_CROSS_INPUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE1_SIGNED // Description : If SIGNED is set, the shifted and masked accumulator value is // sign-extended to 32 bits // before adding to BASE1, and LANE1 PEEK/POP appear extended to // 32 bits when read by processor. #define SIO_INTERP1_CTRL_LANE1_SIGNED_RESET _u(0x0) #define SIO_INTERP1_CTRL_LANE1_SIGNED_BITS _u(0x00008000) #define SIO_INTERP1_CTRL_LANE1_SIGNED_MSB _u(15) #define SIO_INTERP1_CTRL_LANE1_SIGNED_LSB _u(15) #define SIO_INTERP1_CTRL_LANE1_SIGNED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE1_MASK_MSB // Description : The most-significant bit allowed to pass by the mask // (inclusive) // Setting MSB < LSB may cause chip to turn inside-out #define SIO_INTERP1_CTRL_LANE1_MASK_MSB_RESET _u(0x00) #define SIO_INTERP1_CTRL_LANE1_MASK_MSB_BITS _u(0x00007c00) #define SIO_INTERP1_CTRL_LANE1_MASK_MSB_MSB _u(14) #define SIO_INTERP1_CTRL_LANE1_MASK_MSB_LSB _u(10) #define SIO_INTERP1_CTRL_LANE1_MASK_MSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE1_MASK_LSB // Description : The least-significant bit allowed to pass by the mask // (inclusive) #define SIO_INTERP1_CTRL_LANE1_MASK_LSB_RESET _u(0x00) #define SIO_INTERP1_CTRL_LANE1_MASK_LSB_BITS _u(0x000003e0) #define SIO_INTERP1_CTRL_LANE1_MASK_LSB_MSB _u(9) #define SIO_INTERP1_CTRL_LANE1_MASK_LSB_LSB _u(5) #define SIO_INTERP1_CTRL_LANE1_MASK_LSB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SIO_INTERP1_CTRL_LANE1_SHIFT // Description : Logical right-shift applied to accumulator before masking #define SIO_INTERP1_CTRL_LANE1_SHIFT_RESET _u(0x00) #define SIO_INTERP1_CTRL_LANE1_SHIFT_BITS _u(0x0000001f) #define SIO_INTERP1_CTRL_LANE1_SHIFT_MSB _u(4) #define SIO_INTERP1_CTRL_LANE1_SHIFT_LSB _u(0) #define SIO_INTERP1_CTRL_LANE1_SHIFT_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP1_ACCUM0_ADD // Description : Values written here are atomically added to ACCUM0 // Reading yields lane 0's raw shift and mask value (BASE0 not // added). #define SIO_INTERP1_ACCUM0_ADD_OFFSET _u(0x000000f4) #define SIO_INTERP1_ACCUM0_ADD_BITS _u(0x00ffffff) #define SIO_INTERP1_ACCUM0_ADD_RESET _u(0x00000000) #define SIO_INTERP1_ACCUM0_ADD_MSB _u(23) #define SIO_INTERP1_ACCUM0_ADD_LSB _u(0) #define SIO_INTERP1_ACCUM0_ADD_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP1_ACCUM1_ADD // Description : Values written here are atomically added to ACCUM1 // Reading yields lane 1's raw shift and mask value (BASE1 not // added). #define SIO_INTERP1_ACCUM1_ADD_OFFSET _u(0x000000f8) #define SIO_INTERP1_ACCUM1_ADD_BITS _u(0x00ffffff) #define SIO_INTERP1_ACCUM1_ADD_RESET _u(0x00000000) #define SIO_INTERP1_ACCUM1_ADD_MSB _u(23) #define SIO_INTERP1_ACCUM1_ADD_LSB _u(0) #define SIO_INTERP1_ACCUM1_ADD_ACCESS "RW" // ============================================================================= // Register : SIO_INTERP1_BASE_1AND0 // Description : On write, the lower 16 bits go to BASE0, upper bits to BASE1 // simultaneously. // Each half is sign-extended to 32 bits if that lane's SIGNED // flag is set. #define SIO_INTERP1_BASE_1AND0_OFFSET _u(0x000000fc) #define SIO_INTERP1_BASE_1AND0_BITS _u(0xffffffff) #define SIO_INTERP1_BASE_1AND0_RESET _u(0x00000000) #define SIO_INTERP1_BASE_1AND0_MSB _u(31) #define SIO_INTERP1_BASE_1AND0_LSB _u(0) #define SIO_INTERP1_BASE_1AND0_ACCESS "WO" // ============================================================================= // Register : SIO_SPINLOCK0 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK0_OFFSET _u(0x00000100) #define SIO_SPINLOCK0_BITS _u(0xffffffff) #define SIO_SPINLOCK0_RESET _u(0x00000000) #define SIO_SPINLOCK0_MSB _u(31) #define SIO_SPINLOCK0_LSB _u(0) #define SIO_SPINLOCK0_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK1 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK1_OFFSET _u(0x00000104) #define SIO_SPINLOCK1_BITS _u(0xffffffff) #define SIO_SPINLOCK1_RESET _u(0x00000000) #define SIO_SPINLOCK1_MSB _u(31) #define SIO_SPINLOCK1_LSB _u(0) #define SIO_SPINLOCK1_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK2 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK2_OFFSET _u(0x00000108) #define SIO_SPINLOCK2_BITS _u(0xffffffff) #define SIO_SPINLOCK2_RESET _u(0x00000000) #define SIO_SPINLOCK2_MSB _u(31) #define SIO_SPINLOCK2_LSB _u(0) #define SIO_SPINLOCK2_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK3 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK3_OFFSET _u(0x0000010c) #define SIO_SPINLOCK3_BITS _u(0xffffffff) #define SIO_SPINLOCK3_RESET _u(0x00000000) #define SIO_SPINLOCK3_MSB _u(31) #define SIO_SPINLOCK3_LSB _u(0) #define SIO_SPINLOCK3_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK4 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK4_OFFSET _u(0x00000110) #define SIO_SPINLOCK4_BITS _u(0xffffffff) #define SIO_SPINLOCK4_RESET _u(0x00000000) #define SIO_SPINLOCK4_MSB _u(31) #define SIO_SPINLOCK4_LSB _u(0) #define SIO_SPINLOCK4_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK5 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK5_OFFSET _u(0x00000114) #define SIO_SPINLOCK5_BITS _u(0xffffffff) #define SIO_SPINLOCK5_RESET _u(0x00000000) #define SIO_SPINLOCK5_MSB _u(31) #define SIO_SPINLOCK5_LSB _u(0) #define SIO_SPINLOCK5_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK6 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK6_OFFSET _u(0x00000118) #define SIO_SPINLOCK6_BITS _u(0xffffffff) #define SIO_SPINLOCK6_RESET _u(0x00000000) #define SIO_SPINLOCK6_MSB _u(31) #define SIO_SPINLOCK6_LSB _u(0) #define SIO_SPINLOCK6_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK7 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK7_OFFSET _u(0x0000011c) #define SIO_SPINLOCK7_BITS _u(0xffffffff) #define SIO_SPINLOCK7_RESET _u(0x00000000) #define SIO_SPINLOCK7_MSB _u(31) #define SIO_SPINLOCK7_LSB _u(0) #define SIO_SPINLOCK7_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK8 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK8_OFFSET _u(0x00000120) #define SIO_SPINLOCK8_BITS _u(0xffffffff) #define SIO_SPINLOCK8_RESET _u(0x00000000) #define SIO_SPINLOCK8_MSB _u(31) #define SIO_SPINLOCK8_LSB _u(0) #define SIO_SPINLOCK8_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK9 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK9_OFFSET _u(0x00000124) #define SIO_SPINLOCK9_BITS _u(0xffffffff) #define SIO_SPINLOCK9_RESET _u(0x00000000) #define SIO_SPINLOCK9_MSB _u(31) #define SIO_SPINLOCK9_LSB _u(0) #define SIO_SPINLOCK9_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK10 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK10_OFFSET _u(0x00000128) #define SIO_SPINLOCK10_BITS _u(0xffffffff) #define SIO_SPINLOCK10_RESET _u(0x00000000) #define SIO_SPINLOCK10_MSB _u(31) #define SIO_SPINLOCK10_LSB _u(0) #define SIO_SPINLOCK10_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK11 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK11_OFFSET _u(0x0000012c) #define SIO_SPINLOCK11_BITS _u(0xffffffff) #define SIO_SPINLOCK11_RESET _u(0x00000000) #define SIO_SPINLOCK11_MSB _u(31) #define SIO_SPINLOCK11_LSB _u(0) #define SIO_SPINLOCK11_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK12 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK12_OFFSET _u(0x00000130) #define SIO_SPINLOCK12_BITS _u(0xffffffff) #define SIO_SPINLOCK12_RESET _u(0x00000000) #define SIO_SPINLOCK12_MSB _u(31) #define SIO_SPINLOCK12_LSB _u(0) #define SIO_SPINLOCK12_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK13 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK13_OFFSET _u(0x00000134) #define SIO_SPINLOCK13_BITS _u(0xffffffff) #define SIO_SPINLOCK13_RESET _u(0x00000000) #define SIO_SPINLOCK13_MSB _u(31) #define SIO_SPINLOCK13_LSB _u(0) #define SIO_SPINLOCK13_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK14 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK14_OFFSET _u(0x00000138) #define SIO_SPINLOCK14_BITS _u(0xffffffff) #define SIO_SPINLOCK14_RESET _u(0x00000000) #define SIO_SPINLOCK14_MSB _u(31) #define SIO_SPINLOCK14_LSB _u(0) #define SIO_SPINLOCK14_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK15 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK15_OFFSET _u(0x0000013c) #define SIO_SPINLOCK15_BITS _u(0xffffffff) #define SIO_SPINLOCK15_RESET _u(0x00000000) #define SIO_SPINLOCK15_MSB _u(31) #define SIO_SPINLOCK15_LSB _u(0) #define SIO_SPINLOCK15_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK16 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK16_OFFSET _u(0x00000140) #define SIO_SPINLOCK16_BITS _u(0xffffffff) #define SIO_SPINLOCK16_RESET _u(0x00000000) #define SIO_SPINLOCK16_MSB _u(31) #define SIO_SPINLOCK16_LSB _u(0) #define SIO_SPINLOCK16_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK17 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK17_OFFSET _u(0x00000144) #define SIO_SPINLOCK17_BITS _u(0xffffffff) #define SIO_SPINLOCK17_RESET _u(0x00000000) #define SIO_SPINLOCK17_MSB _u(31) #define SIO_SPINLOCK17_LSB _u(0) #define SIO_SPINLOCK17_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK18 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK18_OFFSET _u(0x00000148) #define SIO_SPINLOCK18_BITS _u(0xffffffff) #define SIO_SPINLOCK18_RESET _u(0x00000000) #define SIO_SPINLOCK18_MSB _u(31) #define SIO_SPINLOCK18_LSB _u(0) #define SIO_SPINLOCK18_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK19 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK19_OFFSET _u(0x0000014c) #define SIO_SPINLOCK19_BITS _u(0xffffffff) #define SIO_SPINLOCK19_RESET _u(0x00000000) #define SIO_SPINLOCK19_MSB _u(31) #define SIO_SPINLOCK19_LSB _u(0) #define SIO_SPINLOCK19_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK20 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK20_OFFSET _u(0x00000150) #define SIO_SPINLOCK20_BITS _u(0xffffffff) #define SIO_SPINLOCK20_RESET _u(0x00000000) #define SIO_SPINLOCK20_MSB _u(31) #define SIO_SPINLOCK20_LSB _u(0) #define SIO_SPINLOCK20_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK21 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK21_OFFSET _u(0x00000154) #define SIO_SPINLOCK21_BITS _u(0xffffffff) #define SIO_SPINLOCK21_RESET _u(0x00000000) #define SIO_SPINLOCK21_MSB _u(31) #define SIO_SPINLOCK21_LSB _u(0) #define SIO_SPINLOCK21_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK22 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK22_OFFSET _u(0x00000158) #define SIO_SPINLOCK22_BITS _u(0xffffffff) #define SIO_SPINLOCK22_RESET _u(0x00000000) #define SIO_SPINLOCK22_MSB _u(31) #define SIO_SPINLOCK22_LSB _u(0) #define SIO_SPINLOCK22_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK23 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK23_OFFSET _u(0x0000015c) #define SIO_SPINLOCK23_BITS _u(0xffffffff) #define SIO_SPINLOCK23_RESET _u(0x00000000) #define SIO_SPINLOCK23_MSB _u(31) #define SIO_SPINLOCK23_LSB _u(0) #define SIO_SPINLOCK23_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK24 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK24_OFFSET _u(0x00000160) #define SIO_SPINLOCK24_BITS _u(0xffffffff) #define SIO_SPINLOCK24_RESET _u(0x00000000) #define SIO_SPINLOCK24_MSB _u(31) #define SIO_SPINLOCK24_LSB _u(0) #define SIO_SPINLOCK24_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK25 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK25_OFFSET _u(0x00000164) #define SIO_SPINLOCK25_BITS _u(0xffffffff) #define SIO_SPINLOCK25_RESET _u(0x00000000) #define SIO_SPINLOCK25_MSB _u(31) #define SIO_SPINLOCK25_LSB _u(0) #define SIO_SPINLOCK25_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK26 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK26_OFFSET _u(0x00000168) #define SIO_SPINLOCK26_BITS _u(0xffffffff) #define SIO_SPINLOCK26_RESET _u(0x00000000) #define SIO_SPINLOCK26_MSB _u(31) #define SIO_SPINLOCK26_LSB _u(0) #define SIO_SPINLOCK26_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK27 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK27_OFFSET _u(0x0000016c) #define SIO_SPINLOCK27_BITS _u(0xffffffff) #define SIO_SPINLOCK27_RESET _u(0x00000000) #define SIO_SPINLOCK27_MSB _u(31) #define SIO_SPINLOCK27_LSB _u(0) #define SIO_SPINLOCK27_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK28 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK28_OFFSET _u(0x00000170) #define SIO_SPINLOCK28_BITS _u(0xffffffff) #define SIO_SPINLOCK28_RESET _u(0x00000000) #define SIO_SPINLOCK28_MSB _u(31) #define SIO_SPINLOCK28_LSB _u(0) #define SIO_SPINLOCK28_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK29 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK29_OFFSET _u(0x00000174) #define SIO_SPINLOCK29_BITS _u(0xffffffff) #define SIO_SPINLOCK29_RESET _u(0x00000000) #define SIO_SPINLOCK29_MSB _u(31) #define SIO_SPINLOCK29_LSB _u(0) #define SIO_SPINLOCK29_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK30 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK30_OFFSET _u(0x00000178) #define SIO_SPINLOCK30_BITS _u(0xffffffff) #define SIO_SPINLOCK30_RESET _u(0x00000000) #define SIO_SPINLOCK30_MSB _u(31) #define SIO_SPINLOCK30_LSB _u(0) #define SIO_SPINLOCK30_ACCESS "RW" // ============================================================================= // Register : SIO_SPINLOCK31 // Description : Reading from a spinlock address will: // - Return 0 if lock is already locked // - Otherwise return nonzero, and simultaneously claim the lock // // Writing (any value) releases the lock. // If core 0 and core 1 attempt to claim the same lock // simultaneously, core 0 wins. // The value returned on success is 0x1 << lock number. #define SIO_SPINLOCK31_OFFSET _u(0x0000017c) #define SIO_SPINLOCK31_BITS _u(0xffffffff) #define SIO_SPINLOCK31_RESET _u(0x00000000) #define SIO_SPINLOCK31_MSB _u(31) #define SIO_SPINLOCK31_LSB _u(0) #define SIO_SPINLOCK31_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_SIO_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/spi.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : SPI // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_SPI_DEFINED #define HARDWARE_REGS_SPI_DEFINED // ============================================================================= // Register : SPI_SSPCR0 // Description : Control register 0, SSPCR0 on page 3-4 #define SPI_SSPCR0_OFFSET _u(0x00000000) #define SPI_SSPCR0_BITS _u(0x0000ffff) #define SPI_SSPCR0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SPI_SSPCR0_SCR // Description : Serial clock rate. The value SCR is used to generate the // transmit and receive bit rate of the PrimeCell SSP. The bit // rate is: F SSPCLK CPSDVSR x (1+SCR) where CPSDVSR is an even // value from 2-254, programmed through the SSPCPSR register and // SCR is a value from 0-255. #define SPI_SSPCR0_SCR_RESET _u(0x00) #define SPI_SSPCR0_SCR_BITS _u(0x0000ff00) #define SPI_SSPCR0_SCR_MSB _u(15) #define SPI_SSPCR0_SCR_LSB _u(8) #define SPI_SSPCR0_SCR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPCR0_SPH // Description : SSPCLKOUT phase, applicable to Motorola SPI frame format only. // See Motorola SPI frame format on page 2-10. #define SPI_SSPCR0_SPH_RESET _u(0x0) #define SPI_SSPCR0_SPH_BITS _u(0x00000080) #define SPI_SSPCR0_SPH_MSB _u(7) #define SPI_SSPCR0_SPH_LSB _u(7) #define SPI_SSPCR0_SPH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPCR0_SPO // Description : SSPCLKOUT polarity, applicable to Motorola SPI frame format // only. See Motorola SPI frame format on page 2-10. #define SPI_SSPCR0_SPO_RESET _u(0x0) #define SPI_SSPCR0_SPO_BITS _u(0x00000040) #define SPI_SSPCR0_SPO_MSB _u(6) #define SPI_SSPCR0_SPO_LSB _u(6) #define SPI_SSPCR0_SPO_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPCR0_FRF // Description : Frame format: 00 Motorola SPI frame format. 01 TI synchronous // serial frame format. 10 National Microwire frame format. 11 // Reserved, undefined operation. #define SPI_SSPCR0_FRF_RESET _u(0x0) #define SPI_SSPCR0_FRF_BITS _u(0x00000030) #define SPI_SSPCR0_FRF_MSB _u(5) #define SPI_SSPCR0_FRF_LSB _u(4) #define SPI_SSPCR0_FRF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPCR0_DSS // Description : Data Size Select: 0000 Reserved, undefined operation. 0001 // Reserved, undefined operation. 0010 Reserved, undefined // operation. 0011 4-bit data. 0100 5-bit data. 0101 6-bit data. // 0110 7-bit data. 0111 8-bit data. 1000 9-bit data. 1001 10-bit // data. 1010 11-bit data. 1011 12-bit data. 1100 13-bit data. // 1101 14-bit data. 1110 15-bit data. 1111 16-bit data. #define SPI_SSPCR0_DSS_RESET _u(0x0) #define SPI_SSPCR0_DSS_BITS _u(0x0000000f) #define SPI_SSPCR0_DSS_MSB _u(3) #define SPI_SSPCR0_DSS_LSB _u(0) #define SPI_SSPCR0_DSS_ACCESS "RW" // ============================================================================= // Register : SPI_SSPCR1 // Description : Control register 1, SSPCR1 on page 3-5 #define SPI_SSPCR1_OFFSET _u(0x00000004) #define SPI_SSPCR1_BITS _u(0x0000000f) #define SPI_SSPCR1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SPI_SSPCR1_SOD // Description : Slave-mode output disable. This bit is relevant only in the // slave mode, MS=1. In multiple-slave systems, it is possible for // an PrimeCell SSP master to broadcast a message to all slaves in // the system while ensuring that only one slave drives data onto // its serial output line. In such systems the RXD lines from // multiple slaves could be tied together. To operate in such // systems, the SOD bit can be set if the PrimeCell SSP slave is // not supposed to drive the SSPTXD line: 0 SSP can drive the // SSPTXD output in slave mode. 1 SSP must not drive the SSPTXD // output in slave mode. #define SPI_SSPCR1_SOD_RESET _u(0x0) #define SPI_SSPCR1_SOD_BITS _u(0x00000008) #define SPI_SSPCR1_SOD_MSB _u(3) #define SPI_SSPCR1_SOD_LSB _u(3) #define SPI_SSPCR1_SOD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPCR1_MS // Description : Master or slave mode select. This bit can be modified only when // the PrimeCell SSP is disabled, SSE=0: 0 Device configured as // master, default. 1 Device configured as slave. #define SPI_SSPCR1_MS_RESET _u(0x0) #define SPI_SSPCR1_MS_BITS _u(0x00000004) #define SPI_SSPCR1_MS_MSB _u(2) #define SPI_SSPCR1_MS_LSB _u(2) #define SPI_SSPCR1_MS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPCR1_SSE // Description : Synchronous serial port enable: 0 SSP operation disabled. 1 SSP // operation enabled. #define SPI_SSPCR1_SSE_RESET _u(0x0) #define SPI_SSPCR1_SSE_BITS _u(0x00000002) #define SPI_SSPCR1_SSE_MSB _u(1) #define SPI_SSPCR1_SSE_LSB _u(1) #define SPI_SSPCR1_SSE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPCR1_LBM // Description : Loop back mode: 0 Normal serial port operation enabled. 1 // Output of transmit serial shifter is connected to input of // receive serial shifter internally. #define SPI_SSPCR1_LBM_RESET _u(0x0) #define SPI_SSPCR1_LBM_BITS _u(0x00000001) #define SPI_SSPCR1_LBM_MSB _u(0) #define SPI_SSPCR1_LBM_LSB _u(0) #define SPI_SSPCR1_LBM_ACCESS "RW" // ============================================================================= // Register : SPI_SSPDR // Description : Data register, SSPDR on page 3-6 #define SPI_SSPDR_OFFSET _u(0x00000008) #define SPI_SSPDR_BITS _u(0x0000ffff) #define SPI_SSPDR_RESET "-" // ----------------------------------------------------------------------------- // Field : SPI_SSPDR_DATA // Description : Transmit/Receive FIFO: Read Receive FIFO. Write Transmit FIFO. // You must right-justify data when the PrimeCell SSP is // programmed for a data size that is less than 16 bits. Unused // bits at the top are ignored by transmit logic. The receive // logic automatically right-justifies. #define SPI_SSPDR_DATA_RESET "-" #define SPI_SSPDR_DATA_BITS _u(0x0000ffff) #define SPI_SSPDR_DATA_MSB _u(15) #define SPI_SSPDR_DATA_LSB _u(0) #define SPI_SSPDR_DATA_ACCESS "RWF" // ============================================================================= // Register : SPI_SSPSR // Description : Status register, SSPSR on page 3-7 #define SPI_SSPSR_OFFSET _u(0x0000000c) #define SPI_SSPSR_BITS _u(0x0000001f) #define SPI_SSPSR_RESET _u(0x00000003) // ----------------------------------------------------------------------------- // Field : SPI_SSPSR_BSY // Description : PrimeCell SSP busy flag, RO: 0 SSP is idle. 1 SSP is currently // transmitting and/or receiving a frame or the transmit FIFO is // not empty. #define SPI_SSPSR_BSY_RESET _u(0x0) #define SPI_SSPSR_BSY_BITS _u(0x00000010) #define SPI_SSPSR_BSY_MSB _u(4) #define SPI_SSPSR_BSY_LSB _u(4) #define SPI_SSPSR_BSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPSR_RFF // Description : Receive FIFO full, RO: 0 Receive FIFO is not full. 1 Receive // FIFO is full. #define SPI_SSPSR_RFF_RESET _u(0x0) #define SPI_SSPSR_RFF_BITS _u(0x00000008) #define SPI_SSPSR_RFF_MSB _u(3) #define SPI_SSPSR_RFF_LSB _u(3) #define SPI_SSPSR_RFF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPSR_RNE // Description : Receive FIFO not empty, RO: 0 Receive FIFO is empty. 1 Receive // FIFO is not empty. #define SPI_SSPSR_RNE_RESET _u(0x0) #define SPI_SSPSR_RNE_BITS _u(0x00000004) #define SPI_SSPSR_RNE_MSB _u(2) #define SPI_SSPSR_RNE_LSB _u(2) #define SPI_SSPSR_RNE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPSR_TNF // Description : Transmit FIFO not full, RO: 0 Transmit FIFO is full. 1 Transmit // FIFO is not full. #define SPI_SSPSR_TNF_RESET _u(0x1) #define SPI_SSPSR_TNF_BITS _u(0x00000002) #define SPI_SSPSR_TNF_MSB _u(1) #define SPI_SSPSR_TNF_LSB _u(1) #define SPI_SSPSR_TNF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPSR_TFE // Description : Transmit FIFO empty, RO: 0 Transmit FIFO is not empty. 1 // Transmit FIFO is empty. #define SPI_SSPSR_TFE_RESET _u(0x1) #define SPI_SSPSR_TFE_BITS _u(0x00000001) #define SPI_SSPSR_TFE_MSB _u(0) #define SPI_SSPSR_TFE_LSB _u(0) #define SPI_SSPSR_TFE_ACCESS "RO" // ============================================================================= // Register : SPI_SSPCPSR // Description : Clock prescale register, SSPCPSR on page 3-8 #define SPI_SSPCPSR_OFFSET _u(0x00000010) #define SPI_SSPCPSR_BITS _u(0x000000ff) #define SPI_SSPCPSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SPI_SSPCPSR_CPSDVSR // Description : Clock prescale divisor. Must be an even number from 2-254, // depending on the frequency of SSPCLK. The least significant bit // always returns zero on reads. #define SPI_SSPCPSR_CPSDVSR_RESET _u(0x00) #define SPI_SSPCPSR_CPSDVSR_BITS _u(0x000000ff) #define SPI_SSPCPSR_CPSDVSR_MSB _u(7) #define SPI_SSPCPSR_CPSDVSR_LSB _u(0) #define SPI_SSPCPSR_CPSDVSR_ACCESS "RW" // ============================================================================= // Register : SPI_SSPIMSC // Description : Interrupt mask set or clear register, SSPIMSC on page 3-9 #define SPI_SSPIMSC_OFFSET _u(0x00000014) #define SPI_SSPIMSC_BITS _u(0x0000000f) #define SPI_SSPIMSC_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SPI_SSPIMSC_TXIM // Description : Transmit FIFO interrupt mask: 0 Transmit FIFO half empty or // less condition interrupt is masked. 1 Transmit FIFO half empty // or less condition interrupt is not masked. #define SPI_SSPIMSC_TXIM_RESET _u(0x0) #define SPI_SSPIMSC_TXIM_BITS _u(0x00000008) #define SPI_SSPIMSC_TXIM_MSB _u(3) #define SPI_SSPIMSC_TXIM_LSB _u(3) #define SPI_SSPIMSC_TXIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPIMSC_RXIM // Description : Receive FIFO interrupt mask: 0 Receive FIFO half full or less // condition interrupt is masked. 1 Receive FIFO half full or less // condition interrupt is not masked. #define SPI_SSPIMSC_RXIM_RESET _u(0x0) #define SPI_SSPIMSC_RXIM_BITS _u(0x00000004) #define SPI_SSPIMSC_RXIM_MSB _u(2) #define SPI_SSPIMSC_RXIM_LSB _u(2) #define SPI_SSPIMSC_RXIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPIMSC_RTIM // Description : Receive timeout interrupt mask: 0 Receive FIFO not empty and no // read prior to timeout period interrupt is masked. 1 Receive // FIFO not empty and no read prior to timeout period interrupt is // not masked. #define SPI_SSPIMSC_RTIM_RESET _u(0x0) #define SPI_SSPIMSC_RTIM_BITS _u(0x00000002) #define SPI_SSPIMSC_RTIM_MSB _u(1) #define SPI_SSPIMSC_RTIM_LSB _u(1) #define SPI_SSPIMSC_RTIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPIMSC_RORIM // Description : Receive overrun interrupt mask: 0 Receive FIFO written to while // full condition interrupt is masked. 1 Receive FIFO written to // while full condition interrupt is not masked. #define SPI_SSPIMSC_RORIM_RESET _u(0x0) #define SPI_SSPIMSC_RORIM_BITS _u(0x00000001) #define SPI_SSPIMSC_RORIM_MSB _u(0) #define SPI_SSPIMSC_RORIM_LSB _u(0) #define SPI_SSPIMSC_RORIM_ACCESS "RW" // ============================================================================= // Register : SPI_SSPRIS // Description : Raw interrupt status register, SSPRIS on page 3-10 #define SPI_SSPRIS_OFFSET _u(0x00000018) #define SPI_SSPRIS_BITS _u(0x0000000f) #define SPI_SSPRIS_RESET _u(0x00000008) // ----------------------------------------------------------------------------- // Field : SPI_SSPRIS_TXRIS // Description : Gives the raw interrupt state, prior to masking, of the // SSPTXINTR interrupt #define SPI_SSPRIS_TXRIS_RESET _u(0x1) #define SPI_SSPRIS_TXRIS_BITS _u(0x00000008) #define SPI_SSPRIS_TXRIS_MSB _u(3) #define SPI_SSPRIS_TXRIS_LSB _u(3) #define SPI_SSPRIS_TXRIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPRIS_RXRIS // Description : Gives the raw interrupt state, prior to masking, of the // SSPRXINTR interrupt #define SPI_SSPRIS_RXRIS_RESET _u(0x0) #define SPI_SSPRIS_RXRIS_BITS _u(0x00000004) #define SPI_SSPRIS_RXRIS_MSB _u(2) #define SPI_SSPRIS_RXRIS_LSB _u(2) #define SPI_SSPRIS_RXRIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPRIS_RTRIS // Description : Gives the raw interrupt state, prior to masking, of the // SSPRTINTR interrupt #define SPI_SSPRIS_RTRIS_RESET _u(0x0) #define SPI_SSPRIS_RTRIS_BITS _u(0x00000002) #define SPI_SSPRIS_RTRIS_MSB _u(1) #define SPI_SSPRIS_RTRIS_LSB _u(1) #define SPI_SSPRIS_RTRIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPRIS_RORRIS // Description : Gives the raw interrupt state, prior to masking, of the // SSPRORINTR interrupt #define SPI_SSPRIS_RORRIS_RESET _u(0x0) #define SPI_SSPRIS_RORRIS_BITS _u(0x00000001) #define SPI_SSPRIS_RORRIS_MSB _u(0) #define SPI_SSPRIS_RORRIS_LSB _u(0) #define SPI_SSPRIS_RORRIS_ACCESS "RO" // ============================================================================= // Register : SPI_SSPMIS // Description : Masked interrupt status register, SSPMIS on page 3-11 #define SPI_SSPMIS_OFFSET _u(0x0000001c) #define SPI_SSPMIS_BITS _u(0x0000000f) #define SPI_SSPMIS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SPI_SSPMIS_TXMIS // Description : Gives the transmit FIFO masked interrupt state, after masking, // of the SSPTXINTR interrupt #define SPI_SSPMIS_TXMIS_RESET _u(0x0) #define SPI_SSPMIS_TXMIS_BITS _u(0x00000008) #define SPI_SSPMIS_TXMIS_MSB _u(3) #define SPI_SSPMIS_TXMIS_LSB _u(3) #define SPI_SSPMIS_TXMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPMIS_RXMIS // Description : Gives the receive FIFO masked interrupt state, after masking, // of the SSPRXINTR interrupt #define SPI_SSPMIS_RXMIS_RESET _u(0x0) #define SPI_SSPMIS_RXMIS_BITS _u(0x00000004) #define SPI_SSPMIS_RXMIS_MSB _u(2) #define SPI_SSPMIS_RXMIS_LSB _u(2) #define SPI_SSPMIS_RXMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPMIS_RTMIS // Description : Gives the receive timeout masked interrupt state, after // masking, of the SSPRTINTR interrupt #define SPI_SSPMIS_RTMIS_RESET _u(0x0) #define SPI_SSPMIS_RTMIS_BITS _u(0x00000002) #define SPI_SSPMIS_RTMIS_MSB _u(1) #define SPI_SSPMIS_RTMIS_LSB _u(1) #define SPI_SSPMIS_RTMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPMIS_RORMIS // Description : Gives the receive over run masked interrupt status, after // masking, of the SSPRORINTR interrupt #define SPI_SSPMIS_RORMIS_RESET _u(0x0) #define SPI_SSPMIS_RORMIS_BITS _u(0x00000001) #define SPI_SSPMIS_RORMIS_MSB _u(0) #define SPI_SSPMIS_RORMIS_LSB _u(0) #define SPI_SSPMIS_RORMIS_ACCESS "RO" // ============================================================================= // Register : SPI_SSPICR // Description : Interrupt clear register, SSPICR on page 3-11 #define SPI_SSPICR_OFFSET _u(0x00000020) #define SPI_SSPICR_BITS _u(0x00000003) #define SPI_SSPICR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SPI_SSPICR_RTIC // Description : Clears the SSPRTINTR interrupt #define SPI_SSPICR_RTIC_RESET _u(0x0) #define SPI_SSPICR_RTIC_BITS _u(0x00000002) #define SPI_SSPICR_RTIC_MSB _u(1) #define SPI_SSPICR_RTIC_LSB _u(1) #define SPI_SSPICR_RTIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : SPI_SSPICR_RORIC // Description : Clears the SSPRORINTR interrupt #define SPI_SSPICR_RORIC_RESET _u(0x0) #define SPI_SSPICR_RORIC_BITS _u(0x00000001) #define SPI_SSPICR_RORIC_MSB _u(0) #define SPI_SSPICR_RORIC_LSB _u(0) #define SPI_SSPICR_RORIC_ACCESS "WC" // ============================================================================= // Register : SPI_SSPDMACR // Description : DMA control register, SSPDMACR on page 3-12 #define SPI_SSPDMACR_OFFSET _u(0x00000024) #define SPI_SSPDMACR_BITS _u(0x00000003) #define SPI_SSPDMACR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SPI_SSPDMACR_TXDMAE // Description : Transmit DMA Enable. If this bit is set to 1, DMA for the // transmit FIFO is enabled. #define SPI_SSPDMACR_TXDMAE_RESET _u(0x0) #define SPI_SSPDMACR_TXDMAE_BITS _u(0x00000002) #define SPI_SSPDMACR_TXDMAE_MSB _u(1) #define SPI_SSPDMACR_TXDMAE_LSB _u(1) #define SPI_SSPDMACR_TXDMAE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SPI_SSPDMACR_RXDMAE // Description : Receive DMA Enable. If this bit is set to 1, DMA for the // receive FIFO is enabled. #define SPI_SSPDMACR_RXDMAE_RESET _u(0x0) #define SPI_SSPDMACR_RXDMAE_BITS _u(0x00000001) #define SPI_SSPDMACR_RXDMAE_MSB _u(0) #define SPI_SSPDMACR_RXDMAE_LSB _u(0) #define SPI_SSPDMACR_RXDMAE_ACCESS "RW" // ============================================================================= // Register : SPI_SSPPERIPHID0 // Description : Peripheral identification registers, SSPPeriphID0-3 on page // 3-13 #define SPI_SSPPERIPHID0_OFFSET _u(0x00000fe0) #define SPI_SSPPERIPHID0_BITS _u(0x000000ff) #define SPI_SSPPERIPHID0_RESET _u(0x00000022) // ----------------------------------------------------------------------------- // Field : SPI_SSPPERIPHID0_PARTNUMBER0 // Description : These bits read back as 0x22 #define SPI_SSPPERIPHID0_PARTNUMBER0_RESET _u(0x22) #define SPI_SSPPERIPHID0_PARTNUMBER0_BITS _u(0x000000ff) #define SPI_SSPPERIPHID0_PARTNUMBER0_MSB _u(7) #define SPI_SSPPERIPHID0_PARTNUMBER0_LSB _u(0) #define SPI_SSPPERIPHID0_PARTNUMBER0_ACCESS "RO" // ============================================================================= // Register : SPI_SSPPERIPHID1 // Description : Peripheral identification registers, SSPPeriphID0-3 on page // 3-13 #define SPI_SSPPERIPHID1_OFFSET _u(0x00000fe4) #define SPI_SSPPERIPHID1_BITS _u(0x000000ff) #define SPI_SSPPERIPHID1_RESET _u(0x00000010) // ----------------------------------------------------------------------------- // Field : SPI_SSPPERIPHID1_DESIGNER0 // Description : These bits read back as 0x1 #define SPI_SSPPERIPHID1_DESIGNER0_RESET _u(0x1) #define SPI_SSPPERIPHID1_DESIGNER0_BITS _u(0x000000f0) #define SPI_SSPPERIPHID1_DESIGNER0_MSB _u(7) #define SPI_SSPPERIPHID1_DESIGNER0_LSB _u(4) #define SPI_SSPPERIPHID1_DESIGNER0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPPERIPHID1_PARTNUMBER1 // Description : These bits read back as 0x0 #define SPI_SSPPERIPHID1_PARTNUMBER1_RESET _u(0x0) #define SPI_SSPPERIPHID1_PARTNUMBER1_BITS _u(0x0000000f) #define SPI_SSPPERIPHID1_PARTNUMBER1_MSB _u(3) #define SPI_SSPPERIPHID1_PARTNUMBER1_LSB _u(0) #define SPI_SSPPERIPHID1_PARTNUMBER1_ACCESS "RO" // ============================================================================= // Register : SPI_SSPPERIPHID2 // Description : Peripheral identification registers, SSPPeriphID0-3 on page // 3-13 #define SPI_SSPPERIPHID2_OFFSET _u(0x00000fe8) #define SPI_SSPPERIPHID2_BITS _u(0x000000ff) #define SPI_SSPPERIPHID2_RESET _u(0x00000034) // ----------------------------------------------------------------------------- // Field : SPI_SSPPERIPHID2_REVISION // Description : These bits return the peripheral revision #define SPI_SSPPERIPHID2_REVISION_RESET _u(0x3) #define SPI_SSPPERIPHID2_REVISION_BITS _u(0x000000f0) #define SPI_SSPPERIPHID2_REVISION_MSB _u(7) #define SPI_SSPPERIPHID2_REVISION_LSB _u(4) #define SPI_SSPPERIPHID2_REVISION_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SPI_SSPPERIPHID2_DESIGNER1 // Description : These bits read back as 0x4 #define SPI_SSPPERIPHID2_DESIGNER1_RESET _u(0x4) #define SPI_SSPPERIPHID2_DESIGNER1_BITS _u(0x0000000f) #define SPI_SSPPERIPHID2_DESIGNER1_MSB _u(3) #define SPI_SSPPERIPHID2_DESIGNER1_LSB _u(0) #define SPI_SSPPERIPHID2_DESIGNER1_ACCESS "RO" // ============================================================================= // Register : SPI_SSPPERIPHID3 // Description : Peripheral identification registers, SSPPeriphID0-3 on page // 3-13 #define SPI_SSPPERIPHID3_OFFSET _u(0x00000fec) #define SPI_SSPPERIPHID3_BITS _u(0x000000ff) #define SPI_SSPPERIPHID3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SPI_SSPPERIPHID3_CONFIGURATION // Description : These bits read back as 0x00 #define SPI_SSPPERIPHID3_CONFIGURATION_RESET _u(0x00) #define SPI_SSPPERIPHID3_CONFIGURATION_BITS _u(0x000000ff) #define SPI_SSPPERIPHID3_CONFIGURATION_MSB _u(7) #define SPI_SSPPERIPHID3_CONFIGURATION_LSB _u(0) #define SPI_SSPPERIPHID3_CONFIGURATION_ACCESS "RO" // ============================================================================= // Register : SPI_SSPPCELLID0 // Description : PrimeCell identification registers, SSPPCellID0-3 on page 3-16 #define SPI_SSPPCELLID0_OFFSET _u(0x00000ff0) #define SPI_SSPPCELLID0_BITS _u(0x000000ff) #define SPI_SSPPCELLID0_RESET _u(0x0000000d) // ----------------------------------------------------------------------------- // Field : SPI_SSPPCELLID0_SSPPCELLID0 // Description : These bits read back as 0x0D #define SPI_SSPPCELLID0_SSPPCELLID0_RESET _u(0x0d) #define SPI_SSPPCELLID0_SSPPCELLID0_BITS _u(0x000000ff) #define SPI_SSPPCELLID0_SSPPCELLID0_MSB _u(7) #define SPI_SSPPCELLID0_SSPPCELLID0_LSB _u(0) #define SPI_SSPPCELLID0_SSPPCELLID0_ACCESS "RO" // ============================================================================= // Register : SPI_SSPPCELLID1 // Description : PrimeCell identification registers, SSPPCellID0-3 on page 3-16 #define SPI_SSPPCELLID1_OFFSET _u(0x00000ff4) #define SPI_SSPPCELLID1_BITS _u(0x000000ff) #define SPI_SSPPCELLID1_RESET _u(0x000000f0) // ----------------------------------------------------------------------------- // Field : SPI_SSPPCELLID1_SSPPCELLID1 // Description : These bits read back as 0xF0 #define SPI_SSPPCELLID1_SSPPCELLID1_RESET _u(0xf0) #define SPI_SSPPCELLID1_SSPPCELLID1_BITS _u(0x000000ff) #define SPI_SSPPCELLID1_SSPPCELLID1_MSB _u(7) #define SPI_SSPPCELLID1_SSPPCELLID1_LSB _u(0) #define SPI_SSPPCELLID1_SSPPCELLID1_ACCESS "RO" // ============================================================================= // Register : SPI_SSPPCELLID2 // Description : PrimeCell identification registers, SSPPCellID0-3 on page 3-16 #define SPI_SSPPCELLID2_OFFSET _u(0x00000ff8) #define SPI_SSPPCELLID2_BITS _u(0x000000ff) #define SPI_SSPPCELLID2_RESET _u(0x00000005) // ----------------------------------------------------------------------------- // Field : SPI_SSPPCELLID2_SSPPCELLID2 // Description : These bits read back as 0x05 #define SPI_SSPPCELLID2_SSPPCELLID2_RESET _u(0x05) #define SPI_SSPPCELLID2_SSPPCELLID2_BITS _u(0x000000ff) #define SPI_SSPPCELLID2_SSPPCELLID2_MSB _u(7) #define SPI_SSPPCELLID2_SSPPCELLID2_LSB _u(0) #define SPI_SSPPCELLID2_SSPPCELLID2_ACCESS "RO" // ============================================================================= // Register : SPI_SSPPCELLID3 // Description : PrimeCell identification registers, SSPPCellID0-3 on page 3-16 #define SPI_SSPPCELLID3_OFFSET _u(0x00000ffc) #define SPI_SSPPCELLID3_BITS _u(0x000000ff) #define SPI_SSPPCELLID3_RESET _u(0x000000b1) // ----------------------------------------------------------------------------- // Field : SPI_SSPPCELLID3_SSPPCELLID3 // Description : These bits read back as 0xB1 #define SPI_SSPPCELLID3_SSPPCELLID3_RESET _u(0xb1) #define SPI_SSPPCELLID3_SSPPCELLID3_BITS _u(0x000000ff) #define SPI_SSPPCELLID3_SSPPCELLID3_MSB _u(7) #define SPI_SSPPCELLID3_SSPPCELLID3_LSB _u(0) #define SPI_SSPPCELLID3_SSPPCELLID3_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_SPI_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/ssi.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : SSI // Version : 1 // Bus type : apb // Description : DW_apb_ssi has the following features: // * APB interface – Allows for easy integration into a // DesignWare Synthesizable Components for AMBA 2 // implementation. // * APB3 and APB4 protocol support. // * Scalable APB data bus width – Supports APB data bus widths // of 8, 16, and 32 bits. // * Serial-master or serial-slave operation – Enables serial // communication with serial-master or serial-slave peripheral // devices. // * Programmable Dual/Quad/Octal SPI support in Master Mode. // * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support - // Enables the DW_apb_ssi master to perform operations with the // device in DDR and RDS modes when working in Dual/Quad/Octal // mode of operation. // * Data Mask Support - Enables the DW_apb_ssi to selectively // update the bytes in the device. This feature is applicable // only in enhanced SPI modes. // * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi // master to behave as a memory mapped I/O and fetches the data // from the device based on the APB read request. This feature // is applicable only in enhanced SPI modes. // * DMA Controller Interface – Enables the DW_apb_ssi to // interface to a DMA controller over the bus using a // handshaking interface for transfer requests. // * Independent masking of interrupts – Master collision, // transmit FIFO overflow, transmit FIFO empty, receive FIFO // full, receive FIFO underflow, and receive FIFO overflow // interrupts can all be masked independently. // * Multi-master contention detection – Informs the processor // of multiple serial-master accesses on the serial bus. // * Bypass of meta-stability flip-flops for synchronous clocks // – When the APB clock (pclk) and the DW_apb_ssi serial clock // (ssi_clk) are synchronous, meta-stable flip-flops are not // used when transferring control signals across these clock // domains. // * Programmable delay on the sample time of the received // serial data bit (rxd); enables programmable control of // routing delays resulting in higher serial data-bit rates. // * Programmable features: // - Serial interface operation – Choice of Motorola SPI, Texas // Instruments Synchronous Serial Protocol or National // Semiconductor Microwire. // - Clock bit-rate – Dynamic control of the serial bit rate of // the data transfer; used in only serial-master mode of // operation. // - Data Item size (4 to 32 bits) – Item size of each data // transfer under the control of the programmer. // * Configured features: // - FIFO depth – 16 words deep. The FIFO width is fixed at 32 // bits. // - 1 slave select output. // - Hardware slave-select – Dedicated hardware slave-select // line. // - Combined interrupt line - one combined interrupt line from // the DW_apb_ssi to the interrupt controller. // - Interrupt polarity – active high interrupt lines. // - Serial clock polarity – low serial-clock polarity directly // after reset. // - Serial clock phase – capture on first edge of serial-clock // directly after reset. // ============================================================================= #ifndef HARDWARE_REGS_SSI_DEFINED #define HARDWARE_REGS_SSI_DEFINED // ============================================================================= // Register : SSI_CTRLR0 // Description : Control register 0 #define SSI_CTRLR0_OFFSET _u(0x00000000) #define SSI_CTRLR0_BITS _u(0x017fffff) #define SSI_CTRLR0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_SSTE // Description : Slave select toggle enable #define SSI_CTRLR0_SSTE_RESET _u(0x0) #define SSI_CTRLR0_SSTE_BITS _u(0x01000000) #define SSI_CTRLR0_SSTE_MSB _u(24) #define SSI_CTRLR0_SSTE_LSB _u(24) #define SSI_CTRLR0_SSTE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_SPI_FRF // Description : SPI frame format // 0x0 -> Standard 1-bit SPI frame format; 1 bit per SCK, // full-duplex // 0x1 -> Dual-SPI frame format; two bits per SCK, half-duplex // 0x2 -> Quad-SPI frame format; four bits per SCK, half-duplex #define SSI_CTRLR0_SPI_FRF_RESET _u(0x0) #define SSI_CTRLR0_SPI_FRF_BITS _u(0x00600000) #define SSI_CTRLR0_SPI_FRF_MSB _u(22) #define SSI_CTRLR0_SPI_FRF_LSB _u(21) #define SSI_CTRLR0_SPI_FRF_ACCESS "RW" #define SSI_CTRLR0_SPI_FRF_VALUE_STD _u(0x0) #define SSI_CTRLR0_SPI_FRF_VALUE_DUAL _u(0x1) #define SSI_CTRLR0_SPI_FRF_VALUE_QUAD _u(0x2) // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_DFS_32 // Description : Data frame size in 32b transfer mode // Value of n -> n+1 clocks per frame. #define SSI_CTRLR0_DFS_32_RESET _u(0x00) #define SSI_CTRLR0_DFS_32_BITS _u(0x001f0000) #define SSI_CTRLR0_DFS_32_MSB _u(20) #define SSI_CTRLR0_DFS_32_LSB _u(16) #define SSI_CTRLR0_DFS_32_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_CFS // Description : Control frame size // Value of n -> n+1 clocks per frame. #define SSI_CTRLR0_CFS_RESET _u(0x0) #define SSI_CTRLR0_CFS_BITS _u(0x0000f000) #define SSI_CTRLR0_CFS_MSB _u(15) #define SSI_CTRLR0_CFS_LSB _u(12) #define SSI_CTRLR0_CFS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_SRL // Description : Shift register loop (test mode) #define SSI_CTRLR0_SRL_RESET _u(0x0) #define SSI_CTRLR0_SRL_BITS _u(0x00000800) #define SSI_CTRLR0_SRL_MSB _u(11) #define SSI_CTRLR0_SRL_LSB _u(11) #define SSI_CTRLR0_SRL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_SLV_OE // Description : Slave output enable #define SSI_CTRLR0_SLV_OE_RESET _u(0x0) #define SSI_CTRLR0_SLV_OE_BITS _u(0x00000400) #define SSI_CTRLR0_SLV_OE_MSB _u(10) #define SSI_CTRLR0_SLV_OE_LSB _u(10) #define SSI_CTRLR0_SLV_OE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_TMOD // Description : Transfer mode // 0x0 -> Both transmit and receive // 0x1 -> Transmit only (not for FRF == 0, standard SPI mode) // 0x2 -> Receive only (not for FRF == 0, standard SPI mode) // 0x3 -> EEPROM read mode (TX then RX; RX starts after control // data TX'd) #define SSI_CTRLR0_TMOD_RESET _u(0x0) #define SSI_CTRLR0_TMOD_BITS _u(0x00000300) #define SSI_CTRLR0_TMOD_MSB _u(9) #define SSI_CTRLR0_TMOD_LSB _u(8) #define SSI_CTRLR0_TMOD_ACCESS "RW" #define SSI_CTRLR0_TMOD_VALUE_TX_AND_RX _u(0x0) #define SSI_CTRLR0_TMOD_VALUE_TX_ONLY _u(0x1) #define SSI_CTRLR0_TMOD_VALUE_RX_ONLY _u(0x2) #define SSI_CTRLR0_TMOD_VALUE_EEPROM_READ _u(0x3) // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_SCPOL // Description : Serial clock polarity #define SSI_CTRLR0_SCPOL_RESET _u(0x0) #define SSI_CTRLR0_SCPOL_BITS _u(0x00000080) #define SSI_CTRLR0_SCPOL_MSB _u(7) #define SSI_CTRLR0_SCPOL_LSB _u(7) #define SSI_CTRLR0_SCPOL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_SCPH // Description : Serial clock phase #define SSI_CTRLR0_SCPH_RESET _u(0x0) #define SSI_CTRLR0_SCPH_BITS _u(0x00000040) #define SSI_CTRLR0_SCPH_MSB _u(6) #define SSI_CTRLR0_SCPH_LSB _u(6) #define SSI_CTRLR0_SCPH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_FRF // Description : Frame format #define SSI_CTRLR0_FRF_RESET _u(0x0) #define SSI_CTRLR0_FRF_BITS _u(0x00000030) #define SSI_CTRLR0_FRF_MSB _u(5) #define SSI_CTRLR0_FRF_LSB _u(4) #define SSI_CTRLR0_FRF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_CTRLR0_DFS // Description : Data frame size #define SSI_CTRLR0_DFS_RESET _u(0x0) #define SSI_CTRLR0_DFS_BITS _u(0x0000000f) #define SSI_CTRLR0_DFS_MSB _u(3) #define SSI_CTRLR0_DFS_LSB _u(0) #define SSI_CTRLR0_DFS_ACCESS "RW" // ============================================================================= // Register : SSI_CTRLR1 // Description : Master Control register 1 #define SSI_CTRLR1_OFFSET _u(0x00000004) #define SSI_CTRLR1_BITS _u(0x0000ffff) #define SSI_CTRLR1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_CTRLR1_NDF // Description : Number of data frames #define SSI_CTRLR1_NDF_RESET _u(0x0000) #define SSI_CTRLR1_NDF_BITS _u(0x0000ffff) #define SSI_CTRLR1_NDF_MSB _u(15) #define SSI_CTRLR1_NDF_LSB _u(0) #define SSI_CTRLR1_NDF_ACCESS "RW" // ============================================================================= // Register : SSI_SSIENR // Description : SSI Enable #define SSI_SSIENR_OFFSET _u(0x00000008) #define SSI_SSIENR_BITS _u(0x00000001) #define SSI_SSIENR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_SSIENR_SSI_EN // Description : SSI enable #define SSI_SSIENR_SSI_EN_RESET _u(0x0) #define SSI_SSIENR_SSI_EN_BITS _u(0x00000001) #define SSI_SSIENR_SSI_EN_MSB _u(0) #define SSI_SSIENR_SSI_EN_LSB _u(0) #define SSI_SSIENR_SSI_EN_ACCESS "RW" // ============================================================================= // Register : SSI_MWCR // Description : Microwire Control #define SSI_MWCR_OFFSET _u(0x0000000c) #define SSI_MWCR_BITS _u(0x00000007) #define SSI_MWCR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_MWCR_MHS // Description : Microwire handshaking #define SSI_MWCR_MHS_RESET _u(0x0) #define SSI_MWCR_MHS_BITS _u(0x00000004) #define SSI_MWCR_MHS_MSB _u(2) #define SSI_MWCR_MHS_LSB _u(2) #define SSI_MWCR_MHS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_MWCR_MDD // Description : Microwire control #define SSI_MWCR_MDD_RESET _u(0x0) #define SSI_MWCR_MDD_BITS _u(0x00000002) #define SSI_MWCR_MDD_MSB _u(1) #define SSI_MWCR_MDD_LSB _u(1) #define SSI_MWCR_MDD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_MWCR_MWMOD // Description : Microwire transfer mode #define SSI_MWCR_MWMOD_RESET _u(0x0) #define SSI_MWCR_MWMOD_BITS _u(0x00000001) #define SSI_MWCR_MWMOD_MSB _u(0) #define SSI_MWCR_MWMOD_LSB _u(0) #define SSI_MWCR_MWMOD_ACCESS "RW" // ============================================================================= // Register : SSI_SER // Description : Slave enable // For each bit: // 0 -> slave not selected // 1 -> slave selected #define SSI_SER_OFFSET _u(0x00000010) #define SSI_SER_BITS _u(0x00000001) #define SSI_SER_RESET _u(0x00000000) #define SSI_SER_MSB _u(0) #define SSI_SER_LSB _u(0) #define SSI_SER_ACCESS "RW" // ============================================================================= // Register : SSI_BAUDR // Description : Baud rate #define SSI_BAUDR_OFFSET _u(0x00000014) #define SSI_BAUDR_BITS _u(0x0000ffff) #define SSI_BAUDR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_BAUDR_SCKDV // Description : SSI clock divider #define SSI_BAUDR_SCKDV_RESET _u(0x0000) #define SSI_BAUDR_SCKDV_BITS _u(0x0000ffff) #define SSI_BAUDR_SCKDV_MSB _u(15) #define SSI_BAUDR_SCKDV_LSB _u(0) #define SSI_BAUDR_SCKDV_ACCESS "RW" // ============================================================================= // Register : SSI_TXFTLR // Description : TX FIFO threshold level #define SSI_TXFTLR_OFFSET _u(0x00000018) #define SSI_TXFTLR_BITS _u(0x000000ff) #define SSI_TXFTLR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_TXFTLR_TFT // Description : Transmit FIFO threshold #define SSI_TXFTLR_TFT_RESET _u(0x00) #define SSI_TXFTLR_TFT_BITS _u(0x000000ff) #define SSI_TXFTLR_TFT_MSB _u(7) #define SSI_TXFTLR_TFT_LSB _u(0) #define SSI_TXFTLR_TFT_ACCESS "RW" // ============================================================================= // Register : SSI_RXFTLR // Description : RX FIFO threshold level #define SSI_RXFTLR_OFFSET _u(0x0000001c) #define SSI_RXFTLR_BITS _u(0x000000ff) #define SSI_RXFTLR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_RXFTLR_RFT // Description : Receive FIFO threshold #define SSI_RXFTLR_RFT_RESET _u(0x00) #define SSI_RXFTLR_RFT_BITS _u(0x000000ff) #define SSI_RXFTLR_RFT_MSB _u(7) #define SSI_RXFTLR_RFT_LSB _u(0) #define SSI_RXFTLR_RFT_ACCESS "RW" // ============================================================================= // Register : SSI_TXFLR // Description : TX FIFO level #define SSI_TXFLR_OFFSET _u(0x00000020) #define SSI_TXFLR_BITS _u(0x000000ff) #define SSI_TXFLR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_TXFLR_TFTFL // Description : Transmit FIFO level #define SSI_TXFLR_TFTFL_RESET _u(0x00) #define SSI_TXFLR_TFTFL_BITS _u(0x000000ff) #define SSI_TXFLR_TFTFL_MSB _u(7) #define SSI_TXFLR_TFTFL_LSB _u(0) #define SSI_TXFLR_TFTFL_ACCESS "RO" // ============================================================================= // Register : SSI_RXFLR // Description : RX FIFO level #define SSI_RXFLR_OFFSET _u(0x00000024) #define SSI_RXFLR_BITS _u(0x000000ff) #define SSI_RXFLR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_RXFLR_RXTFL // Description : Receive FIFO level #define SSI_RXFLR_RXTFL_RESET _u(0x00) #define SSI_RXFLR_RXTFL_BITS _u(0x000000ff) #define SSI_RXFLR_RXTFL_MSB _u(7) #define SSI_RXFLR_RXTFL_LSB _u(0) #define SSI_RXFLR_RXTFL_ACCESS "RO" // ============================================================================= // Register : SSI_SR // Description : Status register #define SSI_SR_OFFSET _u(0x00000028) #define SSI_SR_BITS _u(0x0000007f) #define SSI_SR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_SR_DCOL // Description : Data collision error #define SSI_SR_DCOL_RESET _u(0x0) #define SSI_SR_DCOL_BITS _u(0x00000040) #define SSI_SR_DCOL_MSB _u(6) #define SSI_SR_DCOL_LSB _u(6) #define SSI_SR_DCOL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_SR_TXE // Description : Transmission error #define SSI_SR_TXE_RESET _u(0x0) #define SSI_SR_TXE_BITS _u(0x00000020) #define SSI_SR_TXE_MSB _u(5) #define SSI_SR_TXE_LSB _u(5) #define SSI_SR_TXE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_SR_RFF // Description : Receive FIFO full #define SSI_SR_RFF_RESET _u(0x0) #define SSI_SR_RFF_BITS _u(0x00000010) #define SSI_SR_RFF_MSB _u(4) #define SSI_SR_RFF_LSB _u(4) #define SSI_SR_RFF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_SR_RFNE // Description : Receive FIFO not empty #define SSI_SR_RFNE_RESET _u(0x0) #define SSI_SR_RFNE_BITS _u(0x00000008) #define SSI_SR_RFNE_MSB _u(3) #define SSI_SR_RFNE_LSB _u(3) #define SSI_SR_RFNE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_SR_TFE // Description : Transmit FIFO empty #define SSI_SR_TFE_RESET _u(0x0) #define SSI_SR_TFE_BITS _u(0x00000004) #define SSI_SR_TFE_MSB _u(2) #define SSI_SR_TFE_LSB _u(2) #define SSI_SR_TFE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_SR_TFNF // Description : Transmit FIFO not full #define SSI_SR_TFNF_RESET _u(0x0) #define SSI_SR_TFNF_BITS _u(0x00000002) #define SSI_SR_TFNF_MSB _u(1) #define SSI_SR_TFNF_LSB _u(1) #define SSI_SR_TFNF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_SR_BUSY // Description : SSI busy flag #define SSI_SR_BUSY_RESET _u(0x0) #define SSI_SR_BUSY_BITS _u(0x00000001) #define SSI_SR_BUSY_MSB _u(0) #define SSI_SR_BUSY_LSB _u(0) #define SSI_SR_BUSY_ACCESS "RO" // ============================================================================= // Register : SSI_IMR // Description : Interrupt mask #define SSI_IMR_OFFSET _u(0x0000002c) #define SSI_IMR_BITS _u(0x0000003f) #define SSI_IMR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_IMR_MSTIM // Description : Multi-master contention interrupt mask #define SSI_IMR_MSTIM_RESET _u(0x0) #define SSI_IMR_MSTIM_BITS _u(0x00000020) #define SSI_IMR_MSTIM_MSB _u(5) #define SSI_IMR_MSTIM_LSB _u(5) #define SSI_IMR_MSTIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_IMR_RXFIM // Description : Receive FIFO full interrupt mask #define SSI_IMR_RXFIM_RESET _u(0x0) #define SSI_IMR_RXFIM_BITS _u(0x00000010) #define SSI_IMR_RXFIM_MSB _u(4) #define SSI_IMR_RXFIM_LSB _u(4) #define SSI_IMR_RXFIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_IMR_RXOIM // Description : Receive FIFO overflow interrupt mask #define SSI_IMR_RXOIM_RESET _u(0x0) #define SSI_IMR_RXOIM_BITS _u(0x00000008) #define SSI_IMR_RXOIM_MSB _u(3) #define SSI_IMR_RXOIM_LSB _u(3) #define SSI_IMR_RXOIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_IMR_RXUIM // Description : Receive FIFO underflow interrupt mask #define SSI_IMR_RXUIM_RESET _u(0x0) #define SSI_IMR_RXUIM_BITS _u(0x00000004) #define SSI_IMR_RXUIM_MSB _u(2) #define SSI_IMR_RXUIM_LSB _u(2) #define SSI_IMR_RXUIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_IMR_TXOIM // Description : Transmit FIFO overflow interrupt mask #define SSI_IMR_TXOIM_RESET _u(0x0) #define SSI_IMR_TXOIM_BITS _u(0x00000002) #define SSI_IMR_TXOIM_MSB _u(1) #define SSI_IMR_TXOIM_LSB _u(1) #define SSI_IMR_TXOIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_IMR_TXEIM // Description : Transmit FIFO empty interrupt mask #define SSI_IMR_TXEIM_RESET _u(0x0) #define SSI_IMR_TXEIM_BITS _u(0x00000001) #define SSI_IMR_TXEIM_MSB _u(0) #define SSI_IMR_TXEIM_LSB _u(0) #define SSI_IMR_TXEIM_ACCESS "RW" // ============================================================================= // Register : SSI_ISR // Description : Interrupt status #define SSI_ISR_OFFSET _u(0x00000030) #define SSI_ISR_BITS _u(0x0000003f) #define SSI_ISR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_ISR_MSTIS // Description : Multi-master contention interrupt status #define SSI_ISR_MSTIS_RESET _u(0x0) #define SSI_ISR_MSTIS_BITS _u(0x00000020) #define SSI_ISR_MSTIS_MSB _u(5) #define SSI_ISR_MSTIS_LSB _u(5) #define SSI_ISR_MSTIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_ISR_RXFIS // Description : Receive FIFO full interrupt status #define SSI_ISR_RXFIS_RESET _u(0x0) #define SSI_ISR_RXFIS_BITS _u(0x00000010) #define SSI_ISR_RXFIS_MSB _u(4) #define SSI_ISR_RXFIS_LSB _u(4) #define SSI_ISR_RXFIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_ISR_RXOIS // Description : Receive FIFO overflow interrupt status #define SSI_ISR_RXOIS_RESET _u(0x0) #define SSI_ISR_RXOIS_BITS _u(0x00000008) #define SSI_ISR_RXOIS_MSB _u(3) #define SSI_ISR_RXOIS_LSB _u(3) #define SSI_ISR_RXOIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_ISR_RXUIS // Description : Receive FIFO underflow interrupt status #define SSI_ISR_RXUIS_RESET _u(0x0) #define SSI_ISR_RXUIS_BITS _u(0x00000004) #define SSI_ISR_RXUIS_MSB _u(2) #define SSI_ISR_RXUIS_LSB _u(2) #define SSI_ISR_RXUIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_ISR_TXOIS // Description : Transmit FIFO overflow interrupt status #define SSI_ISR_TXOIS_RESET _u(0x0) #define SSI_ISR_TXOIS_BITS _u(0x00000002) #define SSI_ISR_TXOIS_MSB _u(1) #define SSI_ISR_TXOIS_LSB _u(1) #define SSI_ISR_TXOIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_ISR_TXEIS // Description : Transmit FIFO empty interrupt status #define SSI_ISR_TXEIS_RESET _u(0x0) #define SSI_ISR_TXEIS_BITS _u(0x00000001) #define SSI_ISR_TXEIS_MSB _u(0) #define SSI_ISR_TXEIS_LSB _u(0) #define SSI_ISR_TXEIS_ACCESS "RO" // ============================================================================= // Register : SSI_RISR // Description : Raw interrupt status #define SSI_RISR_OFFSET _u(0x00000034) #define SSI_RISR_BITS _u(0x0000003f) #define SSI_RISR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_RISR_MSTIR // Description : Multi-master contention raw interrupt status #define SSI_RISR_MSTIR_RESET _u(0x0) #define SSI_RISR_MSTIR_BITS _u(0x00000020) #define SSI_RISR_MSTIR_MSB _u(5) #define SSI_RISR_MSTIR_LSB _u(5) #define SSI_RISR_MSTIR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_RISR_RXFIR // Description : Receive FIFO full raw interrupt status #define SSI_RISR_RXFIR_RESET _u(0x0) #define SSI_RISR_RXFIR_BITS _u(0x00000010) #define SSI_RISR_RXFIR_MSB _u(4) #define SSI_RISR_RXFIR_LSB _u(4) #define SSI_RISR_RXFIR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_RISR_RXOIR // Description : Receive FIFO overflow raw interrupt status #define SSI_RISR_RXOIR_RESET _u(0x0) #define SSI_RISR_RXOIR_BITS _u(0x00000008) #define SSI_RISR_RXOIR_MSB _u(3) #define SSI_RISR_RXOIR_LSB _u(3) #define SSI_RISR_RXOIR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_RISR_RXUIR // Description : Receive FIFO underflow raw interrupt status #define SSI_RISR_RXUIR_RESET _u(0x0) #define SSI_RISR_RXUIR_BITS _u(0x00000004) #define SSI_RISR_RXUIR_MSB _u(2) #define SSI_RISR_RXUIR_LSB _u(2) #define SSI_RISR_RXUIR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_RISR_TXOIR // Description : Transmit FIFO overflow raw interrupt status #define SSI_RISR_TXOIR_RESET _u(0x0) #define SSI_RISR_TXOIR_BITS _u(0x00000002) #define SSI_RISR_TXOIR_MSB _u(1) #define SSI_RISR_TXOIR_LSB _u(1) #define SSI_RISR_TXOIR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SSI_RISR_TXEIR // Description : Transmit FIFO empty raw interrupt status #define SSI_RISR_TXEIR_RESET _u(0x0) #define SSI_RISR_TXEIR_BITS _u(0x00000001) #define SSI_RISR_TXEIR_MSB _u(0) #define SSI_RISR_TXEIR_LSB _u(0) #define SSI_RISR_TXEIR_ACCESS "RO" // ============================================================================= // Register : SSI_TXOICR // Description : TX FIFO overflow interrupt clear // Clear-on-read transmit FIFO overflow interrupt #define SSI_TXOICR_OFFSET _u(0x00000038) #define SSI_TXOICR_BITS _u(0x00000001) #define SSI_TXOICR_RESET _u(0x00000000) #define SSI_TXOICR_MSB _u(0) #define SSI_TXOICR_LSB _u(0) #define SSI_TXOICR_ACCESS "RO" // ============================================================================= // Register : SSI_RXOICR // Description : RX FIFO overflow interrupt clear // Clear-on-read receive FIFO overflow interrupt #define SSI_RXOICR_OFFSET _u(0x0000003c) #define SSI_RXOICR_BITS _u(0x00000001) #define SSI_RXOICR_RESET _u(0x00000000) #define SSI_RXOICR_MSB _u(0) #define SSI_RXOICR_LSB _u(0) #define SSI_RXOICR_ACCESS "RO" // ============================================================================= // Register : SSI_RXUICR // Description : RX FIFO underflow interrupt clear // Clear-on-read receive FIFO underflow interrupt #define SSI_RXUICR_OFFSET _u(0x00000040) #define SSI_RXUICR_BITS _u(0x00000001) #define SSI_RXUICR_RESET _u(0x00000000) #define SSI_RXUICR_MSB _u(0) #define SSI_RXUICR_LSB _u(0) #define SSI_RXUICR_ACCESS "RO" // ============================================================================= // Register : SSI_MSTICR // Description : Multi-master interrupt clear // Clear-on-read multi-master contention interrupt #define SSI_MSTICR_OFFSET _u(0x00000044) #define SSI_MSTICR_BITS _u(0x00000001) #define SSI_MSTICR_RESET _u(0x00000000) #define SSI_MSTICR_MSB _u(0) #define SSI_MSTICR_LSB _u(0) #define SSI_MSTICR_ACCESS "RO" // ============================================================================= // Register : SSI_ICR // Description : Interrupt clear // Clear-on-read all active interrupts #define SSI_ICR_OFFSET _u(0x00000048) #define SSI_ICR_BITS _u(0x00000001) #define SSI_ICR_RESET _u(0x00000000) #define SSI_ICR_MSB _u(0) #define SSI_ICR_LSB _u(0) #define SSI_ICR_ACCESS "RO" // ============================================================================= // Register : SSI_DMACR // Description : DMA control #define SSI_DMACR_OFFSET _u(0x0000004c) #define SSI_DMACR_BITS _u(0x00000003) #define SSI_DMACR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_DMACR_TDMAE // Description : Transmit DMA enable #define SSI_DMACR_TDMAE_RESET _u(0x0) #define SSI_DMACR_TDMAE_BITS _u(0x00000002) #define SSI_DMACR_TDMAE_MSB _u(1) #define SSI_DMACR_TDMAE_LSB _u(1) #define SSI_DMACR_TDMAE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_DMACR_RDMAE // Description : Receive DMA enable #define SSI_DMACR_RDMAE_RESET _u(0x0) #define SSI_DMACR_RDMAE_BITS _u(0x00000001) #define SSI_DMACR_RDMAE_MSB _u(0) #define SSI_DMACR_RDMAE_LSB _u(0) #define SSI_DMACR_RDMAE_ACCESS "RW" // ============================================================================= // Register : SSI_DMATDLR // Description : DMA TX data level #define SSI_DMATDLR_OFFSET _u(0x00000050) #define SSI_DMATDLR_BITS _u(0x000000ff) #define SSI_DMATDLR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_DMATDLR_DMATDL // Description : Transmit data watermark level #define SSI_DMATDLR_DMATDL_RESET _u(0x00) #define SSI_DMATDLR_DMATDL_BITS _u(0x000000ff) #define SSI_DMATDLR_DMATDL_MSB _u(7) #define SSI_DMATDLR_DMATDL_LSB _u(0) #define SSI_DMATDLR_DMATDL_ACCESS "RW" // ============================================================================= // Register : SSI_DMARDLR // Description : DMA RX data level #define SSI_DMARDLR_OFFSET _u(0x00000054) #define SSI_DMARDLR_BITS _u(0x000000ff) #define SSI_DMARDLR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_DMARDLR_DMARDL // Description : Receive data watermark level (DMARDLR+1) #define SSI_DMARDLR_DMARDL_RESET _u(0x00) #define SSI_DMARDLR_DMARDL_BITS _u(0x000000ff) #define SSI_DMARDLR_DMARDL_MSB _u(7) #define SSI_DMARDLR_DMARDL_LSB _u(0) #define SSI_DMARDLR_DMARDL_ACCESS "RW" // ============================================================================= // Register : SSI_IDR // Description : Identification register #define SSI_IDR_OFFSET _u(0x00000058) #define SSI_IDR_BITS _u(0xffffffff) #define SSI_IDR_RESET _u(0x51535049) // ----------------------------------------------------------------------------- // Field : SSI_IDR_IDCODE // Description : Peripheral dentification code #define SSI_IDR_IDCODE_RESET _u(0x51535049) #define SSI_IDR_IDCODE_BITS _u(0xffffffff) #define SSI_IDR_IDCODE_MSB _u(31) #define SSI_IDR_IDCODE_LSB _u(0) #define SSI_IDR_IDCODE_ACCESS "RO" // ============================================================================= // Register : SSI_SSI_VERSION_ID // Description : Version ID #define SSI_SSI_VERSION_ID_OFFSET _u(0x0000005c) #define SSI_SSI_VERSION_ID_BITS _u(0xffffffff) #define SSI_SSI_VERSION_ID_RESET _u(0x3430312a) // ----------------------------------------------------------------------------- // Field : SSI_SSI_VERSION_ID_SSI_COMP_VERSION // Description : SNPS component version (format X.YY) #define SSI_SSI_VERSION_ID_SSI_COMP_VERSION_RESET _u(0x3430312a) #define SSI_SSI_VERSION_ID_SSI_COMP_VERSION_BITS _u(0xffffffff) #define SSI_SSI_VERSION_ID_SSI_COMP_VERSION_MSB _u(31) #define SSI_SSI_VERSION_ID_SSI_COMP_VERSION_LSB _u(0) #define SSI_SSI_VERSION_ID_SSI_COMP_VERSION_ACCESS "RO" // ============================================================================= // Register : SSI_DR0 // Description : Data Register 0 (of 36) #define SSI_DR0_OFFSET _u(0x00000060) #define SSI_DR0_BITS _u(0xffffffff) #define SSI_DR0_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_DR0_DR // Description : First data register of 36 #define SSI_DR0_DR_RESET _u(0x00000000) #define SSI_DR0_DR_BITS _u(0xffffffff) #define SSI_DR0_DR_MSB _u(31) #define SSI_DR0_DR_LSB _u(0) #define SSI_DR0_DR_ACCESS "RW" // ============================================================================= // Register : SSI_RX_SAMPLE_DLY // Description : RX sample delay #define SSI_RX_SAMPLE_DLY_OFFSET _u(0x000000f0) #define SSI_RX_SAMPLE_DLY_BITS _u(0x000000ff) #define SSI_RX_SAMPLE_DLY_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_RX_SAMPLE_DLY_RSD // Description : RXD sample delay (in SCLK cycles) #define SSI_RX_SAMPLE_DLY_RSD_RESET _u(0x00) #define SSI_RX_SAMPLE_DLY_RSD_BITS _u(0x000000ff) #define SSI_RX_SAMPLE_DLY_RSD_MSB _u(7) #define SSI_RX_SAMPLE_DLY_RSD_LSB _u(0) #define SSI_RX_SAMPLE_DLY_RSD_ACCESS "RW" // ============================================================================= // Register : SSI_SPI_CTRLR0 // Description : SPI control #define SSI_SPI_CTRLR0_OFFSET _u(0x000000f4) #define SSI_SPI_CTRLR0_BITS _u(0xff07fb3f) #define SSI_SPI_CTRLR0_RESET _u(0x03000000) // ----------------------------------------------------------------------------- // Field : SSI_SPI_CTRLR0_XIP_CMD // Description : SPI Command to send in XIP mode (INST_L = 8-bit) or to append // to Address (INST_L = 0-bit) #define SSI_SPI_CTRLR0_XIP_CMD_RESET _u(0x03) #define SSI_SPI_CTRLR0_XIP_CMD_BITS _u(0xff000000) #define SSI_SPI_CTRLR0_XIP_CMD_MSB _u(31) #define SSI_SPI_CTRLR0_XIP_CMD_LSB _u(24) #define SSI_SPI_CTRLR0_XIP_CMD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_SPI_CTRLR0_SPI_RXDS_EN // Description : Read data strobe enable #define SSI_SPI_CTRLR0_SPI_RXDS_EN_RESET _u(0x0) #define SSI_SPI_CTRLR0_SPI_RXDS_EN_BITS _u(0x00040000) #define SSI_SPI_CTRLR0_SPI_RXDS_EN_MSB _u(18) #define SSI_SPI_CTRLR0_SPI_RXDS_EN_LSB _u(18) #define SSI_SPI_CTRLR0_SPI_RXDS_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_SPI_CTRLR0_INST_DDR_EN // Description : Instruction DDR transfer enable #define SSI_SPI_CTRLR0_INST_DDR_EN_RESET _u(0x0) #define SSI_SPI_CTRLR0_INST_DDR_EN_BITS _u(0x00020000) #define SSI_SPI_CTRLR0_INST_DDR_EN_MSB _u(17) #define SSI_SPI_CTRLR0_INST_DDR_EN_LSB _u(17) #define SSI_SPI_CTRLR0_INST_DDR_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_SPI_CTRLR0_SPI_DDR_EN // Description : SPI DDR transfer enable #define SSI_SPI_CTRLR0_SPI_DDR_EN_RESET _u(0x0) #define SSI_SPI_CTRLR0_SPI_DDR_EN_BITS _u(0x00010000) #define SSI_SPI_CTRLR0_SPI_DDR_EN_MSB _u(16) #define SSI_SPI_CTRLR0_SPI_DDR_EN_LSB _u(16) #define SSI_SPI_CTRLR0_SPI_DDR_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_SPI_CTRLR0_WAIT_CYCLES // Description : Wait cycles between control frame transmit and data reception // (in SCLK cycles) #define SSI_SPI_CTRLR0_WAIT_CYCLES_RESET _u(0x00) #define SSI_SPI_CTRLR0_WAIT_CYCLES_BITS _u(0x0000f800) #define SSI_SPI_CTRLR0_WAIT_CYCLES_MSB _u(15) #define SSI_SPI_CTRLR0_WAIT_CYCLES_LSB _u(11) #define SSI_SPI_CTRLR0_WAIT_CYCLES_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_SPI_CTRLR0_INST_L // Description : Instruction length (0/4/8/16b) // 0x0 -> No instruction // 0x1 -> 4-bit instruction // 0x2 -> 8-bit instruction // 0x3 -> 16-bit instruction #define SSI_SPI_CTRLR0_INST_L_RESET _u(0x0) #define SSI_SPI_CTRLR0_INST_L_BITS _u(0x00000300) #define SSI_SPI_CTRLR0_INST_L_MSB _u(9) #define SSI_SPI_CTRLR0_INST_L_LSB _u(8) #define SSI_SPI_CTRLR0_INST_L_ACCESS "RW" #define SSI_SPI_CTRLR0_INST_L_VALUE_NONE _u(0x0) #define SSI_SPI_CTRLR0_INST_L_VALUE_4B _u(0x1) #define SSI_SPI_CTRLR0_INST_L_VALUE_8B _u(0x2) #define SSI_SPI_CTRLR0_INST_L_VALUE_16B _u(0x3) // ----------------------------------------------------------------------------- // Field : SSI_SPI_CTRLR0_ADDR_L // Description : Address length (0b-60b in 4b increments) #define SSI_SPI_CTRLR0_ADDR_L_RESET _u(0x0) #define SSI_SPI_CTRLR0_ADDR_L_BITS _u(0x0000003c) #define SSI_SPI_CTRLR0_ADDR_L_MSB _u(5) #define SSI_SPI_CTRLR0_ADDR_L_LSB _u(2) #define SSI_SPI_CTRLR0_ADDR_L_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SSI_SPI_CTRLR0_TRANS_TYPE // Description : Address and instruction transfer format // 0x0 -> Command and address both in standard SPI frame format // 0x1 -> Command in standard SPI format, address in format // specified by FRF // 0x2 -> Command and address both in format specified by FRF // (e.g. Dual-SPI) #define SSI_SPI_CTRLR0_TRANS_TYPE_RESET _u(0x0) #define SSI_SPI_CTRLR0_TRANS_TYPE_BITS _u(0x00000003) #define SSI_SPI_CTRLR0_TRANS_TYPE_MSB _u(1) #define SSI_SPI_CTRLR0_TRANS_TYPE_LSB _u(0) #define SSI_SPI_CTRLR0_TRANS_TYPE_ACCESS "RW" #define SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C1A _u(0x0) #define SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C2A _u(0x1) #define SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_2C2A _u(0x2) // ============================================================================= // Register : SSI_TXD_DRIVE_EDGE // Description : TX drive edge #define SSI_TXD_DRIVE_EDGE_OFFSET _u(0x000000f8) #define SSI_TXD_DRIVE_EDGE_BITS _u(0x000000ff) #define SSI_TXD_DRIVE_EDGE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SSI_TXD_DRIVE_EDGE_TDE // Description : TXD drive edge #define SSI_TXD_DRIVE_EDGE_TDE_RESET _u(0x00) #define SSI_TXD_DRIVE_EDGE_TDE_BITS _u(0x000000ff) #define SSI_TXD_DRIVE_EDGE_TDE_MSB _u(7) #define SSI_TXD_DRIVE_EDGE_TDE_LSB _u(0) #define SSI_TXD_DRIVE_EDGE_TDE_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_SSI_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/syscfg.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : SYSCFG // Version : 1 // Bus type : apb // Description : Register block for various chip control signals // ============================================================================= #ifndef HARDWARE_REGS_SYSCFG_DEFINED #define HARDWARE_REGS_SYSCFG_DEFINED // ============================================================================= // Register : SYSCFG_PROC0_NMI_MASK // Description : Processor core 0 NMI source mask // Set a bit high to enable NMI from that IRQ #define SYSCFG_PROC0_NMI_MASK_OFFSET _u(0x00000000) #define SYSCFG_PROC0_NMI_MASK_BITS _u(0xffffffff) #define SYSCFG_PROC0_NMI_MASK_RESET _u(0x00000000) #define SYSCFG_PROC0_NMI_MASK_MSB _u(31) #define SYSCFG_PROC0_NMI_MASK_LSB _u(0) #define SYSCFG_PROC0_NMI_MASK_ACCESS "RW" // ============================================================================= // Register : SYSCFG_PROC1_NMI_MASK // Description : Processor core 1 NMI source mask // Set a bit high to enable NMI from that IRQ #define SYSCFG_PROC1_NMI_MASK_OFFSET _u(0x00000004) #define SYSCFG_PROC1_NMI_MASK_BITS _u(0xffffffff) #define SYSCFG_PROC1_NMI_MASK_RESET _u(0x00000000) #define SYSCFG_PROC1_NMI_MASK_MSB _u(31) #define SYSCFG_PROC1_NMI_MASK_LSB _u(0) #define SYSCFG_PROC1_NMI_MASK_ACCESS "RW" // ============================================================================= // Register : SYSCFG_PROC_CONFIG // Description : Configuration for processors #define SYSCFG_PROC_CONFIG_OFFSET _u(0x00000008) #define SYSCFG_PROC_CONFIG_BITS _u(0xff000003) #define SYSCFG_PROC_CONFIG_RESET _u(0x10000000) // ----------------------------------------------------------------------------- // Field : SYSCFG_PROC_CONFIG_PROC1_DAP_INSTID // Description : Configure proc1 DAP instance ID. // Recommend that this is NOT changed until you require debug // access in multi-chip environment // WARNING: do not set to 15 as this is reserved for RescueDP #define SYSCFG_PROC_CONFIG_PROC1_DAP_INSTID_RESET _u(0x1) #define SYSCFG_PROC_CONFIG_PROC1_DAP_INSTID_BITS _u(0xf0000000) #define SYSCFG_PROC_CONFIG_PROC1_DAP_INSTID_MSB _u(31) #define SYSCFG_PROC_CONFIG_PROC1_DAP_INSTID_LSB _u(28) #define SYSCFG_PROC_CONFIG_PROC1_DAP_INSTID_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_PROC_CONFIG_PROC0_DAP_INSTID // Description : Configure proc0 DAP instance ID. // Recommend that this is NOT changed until you require debug // access in multi-chip environment // WARNING: do not set to 15 as this is reserved for RescueDP #define SYSCFG_PROC_CONFIG_PROC0_DAP_INSTID_RESET _u(0x0) #define SYSCFG_PROC_CONFIG_PROC0_DAP_INSTID_BITS _u(0x0f000000) #define SYSCFG_PROC_CONFIG_PROC0_DAP_INSTID_MSB _u(27) #define SYSCFG_PROC_CONFIG_PROC0_DAP_INSTID_LSB _u(24) #define SYSCFG_PROC_CONFIG_PROC0_DAP_INSTID_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_PROC_CONFIG_PROC1_HALTED // Description : Indication that proc1 has halted #define SYSCFG_PROC_CONFIG_PROC1_HALTED_RESET _u(0x0) #define SYSCFG_PROC_CONFIG_PROC1_HALTED_BITS _u(0x00000002) #define SYSCFG_PROC_CONFIG_PROC1_HALTED_MSB _u(1) #define SYSCFG_PROC_CONFIG_PROC1_HALTED_LSB _u(1) #define SYSCFG_PROC_CONFIG_PROC1_HALTED_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SYSCFG_PROC_CONFIG_PROC0_HALTED // Description : Indication that proc0 has halted #define SYSCFG_PROC_CONFIG_PROC0_HALTED_RESET _u(0x0) #define SYSCFG_PROC_CONFIG_PROC0_HALTED_BITS _u(0x00000001) #define SYSCFG_PROC_CONFIG_PROC0_HALTED_MSB _u(0) #define SYSCFG_PROC_CONFIG_PROC0_HALTED_LSB _u(0) #define SYSCFG_PROC_CONFIG_PROC0_HALTED_ACCESS "RO" // ============================================================================= // Register : SYSCFG_PROC_IN_SYNC_BYPASS // Description : For each bit, if 1, bypass the input synchronizer between that // GPIO // and the GPIO input register in the SIO. The input synchronizers // should // generally be unbypassed, to avoid injecting metastabilities // into processors. // If you're feeling brave, you can bypass to save two cycles of // input // latency. This register applies to GPIO 0...29. #define SYSCFG_PROC_IN_SYNC_BYPASS_OFFSET _u(0x0000000c) #define SYSCFG_PROC_IN_SYNC_BYPASS_BITS _u(0x3fffffff) #define SYSCFG_PROC_IN_SYNC_BYPASS_RESET _u(0x00000000) #define SYSCFG_PROC_IN_SYNC_BYPASS_MSB _u(29) #define SYSCFG_PROC_IN_SYNC_BYPASS_LSB _u(0) #define SYSCFG_PROC_IN_SYNC_BYPASS_ACCESS "RW" // ============================================================================= // Register : SYSCFG_PROC_IN_SYNC_BYPASS_HI // Description : For each bit, if 1, bypass the input synchronizer between that // GPIO // and the GPIO input register in the SIO. The input synchronizers // should // generally be unbypassed, to avoid injecting metastabilities // into processors. // If you're feeling brave, you can bypass to save two cycles of // input // latency. This register applies to GPIO 30...35 (the QSPI IOs). #define SYSCFG_PROC_IN_SYNC_BYPASS_HI_OFFSET _u(0x00000010) #define SYSCFG_PROC_IN_SYNC_BYPASS_HI_BITS _u(0x0000003f) #define SYSCFG_PROC_IN_SYNC_BYPASS_HI_RESET _u(0x00000000) #define SYSCFG_PROC_IN_SYNC_BYPASS_HI_MSB _u(5) #define SYSCFG_PROC_IN_SYNC_BYPASS_HI_LSB _u(0) #define SYSCFG_PROC_IN_SYNC_BYPASS_HI_ACCESS "RW" // ============================================================================= // Register : SYSCFG_DBGFORCE // Description : Directly control the SWD debug port of either processor #define SYSCFG_DBGFORCE_OFFSET _u(0x00000014) #define SYSCFG_DBGFORCE_BITS _u(0x000000ff) #define SYSCFG_DBGFORCE_RESET _u(0x00000066) // ----------------------------------------------------------------------------- // Field : SYSCFG_DBGFORCE_PROC1_ATTACH // Description : Attach processor 1 debug port to syscfg controls, and // disconnect it from external SWD pads. #define SYSCFG_DBGFORCE_PROC1_ATTACH_RESET _u(0x0) #define SYSCFG_DBGFORCE_PROC1_ATTACH_BITS _u(0x00000080) #define SYSCFG_DBGFORCE_PROC1_ATTACH_MSB _u(7) #define SYSCFG_DBGFORCE_PROC1_ATTACH_LSB _u(7) #define SYSCFG_DBGFORCE_PROC1_ATTACH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_DBGFORCE_PROC1_SWCLK // Description : Directly drive processor 1 SWCLK, if PROC1_ATTACH is set #define SYSCFG_DBGFORCE_PROC1_SWCLK_RESET _u(0x1) #define SYSCFG_DBGFORCE_PROC1_SWCLK_BITS _u(0x00000040) #define SYSCFG_DBGFORCE_PROC1_SWCLK_MSB _u(6) #define SYSCFG_DBGFORCE_PROC1_SWCLK_LSB _u(6) #define SYSCFG_DBGFORCE_PROC1_SWCLK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_DBGFORCE_PROC1_SWDI // Description : Directly drive processor 1 SWDIO input, if PROC1_ATTACH is set #define SYSCFG_DBGFORCE_PROC1_SWDI_RESET _u(0x1) #define SYSCFG_DBGFORCE_PROC1_SWDI_BITS _u(0x00000020) #define SYSCFG_DBGFORCE_PROC1_SWDI_MSB _u(5) #define SYSCFG_DBGFORCE_PROC1_SWDI_LSB _u(5) #define SYSCFG_DBGFORCE_PROC1_SWDI_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_DBGFORCE_PROC1_SWDO // Description : Observe the value of processor 1 SWDIO output. #define SYSCFG_DBGFORCE_PROC1_SWDO_RESET "-" #define SYSCFG_DBGFORCE_PROC1_SWDO_BITS _u(0x00000010) #define SYSCFG_DBGFORCE_PROC1_SWDO_MSB _u(4) #define SYSCFG_DBGFORCE_PROC1_SWDO_LSB _u(4) #define SYSCFG_DBGFORCE_PROC1_SWDO_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SYSCFG_DBGFORCE_PROC0_ATTACH // Description : Attach processor 0 debug port to syscfg controls, and // disconnect it from external SWD pads. #define SYSCFG_DBGFORCE_PROC0_ATTACH_RESET _u(0x0) #define SYSCFG_DBGFORCE_PROC0_ATTACH_BITS _u(0x00000008) #define SYSCFG_DBGFORCE_PROC0_ATTACH_MSB _u(3) #define SYSCFG_DBGFORCE_PROC0_ATTACH_LSB _u(3) #define SYSCFG_DBGFORCE_PROC0_ATTACH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_DBGFORCE_PROC0_SWCLK // Description : Directly drive processor 0 SWCLK, if PROC0_ATTACH is set #define SYSCFG_DBGFORCE_PROC0_SWCLK_RESET _u(0x1) #define SYSCFG_DBGFORCE_PROC0_SWCLK_BITS _u(0x00000004) #define SYSCFG_DBGFORCE_PROC0_SWCLK_MSB _u(2) #define SYSCFG_DBGFORCE_PROC0_SWCLK_LSB _u(2) #define SYSCFG_DBGFORCE_PROC0_SWCLK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_DBGFORCE_PROC0_SWDI // Description : Directly drive processor 0 SWDIO input, if PROC0_ATTACH is set #define SYSCFG_DBGFORCE_PROC0_SWDI_RESET _u(0x1) #define SYSCFG_DBGFORCE_PROC0_SWDI_BITS _u(0x00000002) #define SYSCFG_DBGFORCE_PROC0_SWDI_MSB _u(1) #define SYSCFG_DBGFORCE_PROC0_SWDI_LSB _u(1) #define SYSCFG_DBGFORCE_PROC0_SWDI_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_DBGFORCE_PROC0_SWDO // Description : Observe the value of processor 0 SWDIO output. #define SYSCFG_DBGFORCE_PROC0_SWDO_RESET "-" #define SYSCFG_DBGFORCE_PROC0_SWDO_BITS _u(0x00000001) #define SYSCFG_DBGFORCE_PROC0_SWDO_MSB _u(0) #define SYSCFG_DBGFORCE_PROC0_SWDO_LSB _u(0) #define SYSCFG_DBGFORCE_PROC0_SWDO_ACCESS "RO" // ============================================================================= // Register : SYSCFG_MEMPOWERDOWN // Description : Control power downs to memories. Set high to power down // memories. // Use with extreme caution #define SYSCFG_MEMPOWERDOWN_OFFSET _u(0x00000018) #define SYSCFG_MEMPOWERDOWN_BITS _u(0x000000ff) #define SYSCFG_MEMPOWERDOWN_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SYSCFG_MEMPOWERDOWN_ROM // Description : None #define SYSCFG_MEMPOWERDOWN_ROM_RESET _u(0x0) #define SYSCFG_MEMPOWERDOWN_ROM_BITS _u(0x00000080) #define SYSCFG_MEMPOWERDOWN_ROM_MSB _u(7) #define SYSCFG_MEMPOWERDOWN_ROM_LSB _u(7) #define SYSCFG_MEMPOWERDOWN_ROM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_MEMPOWERDOWN_USB // Description : None #define SYSCFG_MEMPOWERDOWN_USB_RESET _u(0x0) #define SYSCFG_MEMPOWERDOWN_USB_BITS _u(0x00000040) #define SYSCFG_MEMPOWERDOWN_USB_MSB _u(6) #define SYSCFG_MEMPOWERDOWN_USB_LSB _u(6) #define SYSCFG_MEMPOWERDOWN_USB_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_MEMPOWERDOWN_SRAM5 // Description : None #define SYSCFG_MEMPOWERDOWN_SRAM5_RESET _u(0x0) #define SYSCFG_MEMPOWERDOWN_SRAM5_BITS _u(0x00000020) #define SYSCFG_MEMPOWERDOWN_SRAM5_MSB _u(5) #define SYSCFG_MEMPOWERDOWN_SRAM5_LSB _u(5) #define SYSCFG_MEMPOWERDOWN_SRAM5_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_MEMPOWERDOWN_SRAM4 // Description : None #define SYSCFG_MEMPOWERDOWN_SRAM4_RESET _u(0x0) #define SYSCFG_MEMPOWERDOWN_SRAM4_BITS _u(0x00000010) #define SYSCFG_MEMPOWERDOWN_SRAM4_MSB _u(4) #define SYSCFG_MEMPOWERDOWN_SRAM4_LSB _u(4) #define SYSCFG_MEMPOWERDOWN_SRAM4_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_MEMPOWERDOWN_SRAM3 // Description : None #define SYSCFG_MEMPOWERDOWN_SRAM3_RESET _u(0x0) #define SYSCFG_MEMPOWERDOWN_SRAM3_BITS _u(0x00000008) #define SYSCFG_MEMPOWERDOWN_SRAM3_MSB _u(3) #define SYSCFG_MEMPOWERDOWN_SRAM3_LSB _u(3) #define SYSCFG_MEMPOWERDOWN_SRAM3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_MEMPOWERDOWN_SRAM2 // Description : None #define SYSCFG_MEMPOWERDOWN_SRAM2_RESET _u(0x0) #define SYSCFG_MEMPOWERDOWN_SRAM2_BITS _u(0x00000004) #define SYSCFG_MEMPOWERDOWN_SRAM2_MSB _u(2) #define SYSCFG_MEMPOWERDOWN_SRAM2_LSB _u(2) #define SYSCFG_MEMPOWERDOWN_SRAM2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_MEMPOWERDOWN_SRAM1 // Description : None #define SYSCFG_MEMPOWERDOWN_SRAM1_RESET _u(0x0) #define SYSCFG_MEMPOWERDOWN_SRAM1_BITS _u(0x00000002) #define SYSCFG_MEMPOWERDOWN_SRAM1_MSB _u(1) #define SYSCFG_MEMPOWERDOWN_SRAM1_LSB _u(1) #define SYSCFG_MEMPOWERDOWN_SRAM1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : SYSCFG_MEMPOWERDOWN_SRAM0 // Description : None #define SYSCFG_MEMPOWERDOWN_SRAM0_RESET _u(0x0) #define SYSCFG_MEMPOWERDOWN_SRAM0_BITS _u(0x00000001) #define SYSCFG_MEMPOWERDOWN_SRAM0_MSB _u(0) #define SYSCFG_MEMPOWERDOWN_SRAM0_LSB _u(0) #define SYSCFG_MEMPOWERDOWN_SRAM0_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_SYSCFG_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/sysinfo.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : SYSINFO // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_SYSINFO_DEFINED #define HARDWARE_REGS_SYSINFO_DEFINED // ============================================================================= // Register : SYSINFO_CHIP_ID // Description : JEDEC JEP-106 compliant chip identifier. #define SYSINFO_CHIP_ID_OFFSET _u(0x00000000) #define SYSINFO_CHIP_ID_BITS _u(0xffffffff) #define SYSINFO_CHIP_ID_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SYSINFO_CHIP_ID_REVISION // Description : None #define SYSINFO_CHIP_ID_REVISION_RESET "-" #define SYSINFO_CHIP_ID_REVISION_BITS _u(0xf0000000) #define SYSINFO_CHIP_ID_REVISION_MSB _u(31) #define SYSINFO_CHIP_ID_REVISION_LSB _u(28) #define SYSINFO_CHIP_ID_REVISION_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SYSINFO_CHIP_ID_PART // Description : None #define SYSINFO_CHIP_ID_PART_RESET "-" #define SYSINFO_CHIP_ID_PART_BITS _u(0x0ffff000) #define SYSINFO_CHIP_ID_PART_MSB _u(27) #define SYSINFO_CHIP_ID_PART_LSB _u(12) #define SYSINFO_CHIP_ID_PART_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SYSINFO_CHIP_ID_MANUFACTURER // Description : None #define SYSINFO_CHIP_ID_MANUFACTURER_RESET "-" #define SYSINFO_CHIP_ID_MANUFACTURER_BITS _u(0x00000fff) #define SYSINFO_CHIP_ID_MANUFACTURER_MSB _u(11) #define SYSINFO_CHIP_ID_MANUFACTURER_LSB _u(0) #define SYSINFO_CHIP_ID_MANUFACTURER_ACCESS "RO" // ============================================================================= // Register : SYSINFO_PLATFORM // Description : Platform register. Allows software to know what environment it // is running in. #define SYSINFO_PLATFORM_OFFSET _u(0x00000004) #define SYSINFO_PLATFORM_BITS _u(0x00000003) #define SYSINFO_PLATFORM_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : SYSINFO_PLATFORM_ASIC // Description : None #define SYSINFO_PLATFORM_ASIC_RESET _u(0x0) #define SYSINFO_PLATFORM_ASIC_BITS _u(0x00000002) #define SYSINFO_PLATFORM_ASIC_MSB _u(1) #define SYSINFO_PLATFORM_ASIC_LSB _u(1) #define SYSINFO_PLATFORM_ASIC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : SYSINFO_PLATFORM_FPGA // Description : None #define SYSINFO_PLATFORM_FPGA_RESET _u(0x0) #define SYSINFO_PLATFORM_FPGA_BITS _u(0x00000001) #define SYSINFO_PLATFORM_FPGA_MSB _u(0) #define SYSINFO_PLATFORM_FPGA_LSB _u(0) #define SYSINFO_PLATFORM_FPGA_ACCESS "RO" // ============================================================================= // Register : SYSINFO_GITREF_RP2040 // Description : Git hash of the chip source. Used to identify chip version. #define SYSINFO_GITREF_RP2040_OFFSET _u(0x00000040) #define SYSINFO_GITREF_RP2040_BITS _u(0xffffffff) #define SYSINFO_GITREF_RP2040_RESET "-" #define SYSINFO_GITREF_RP2040_MSB _u(31) #define SYSINFO_GITREF_RP2040_LSB _u(0) #define SYSINFO_GITREF_RP2040_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_SYSINFO_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/tbman.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : TBMAN // Version : 1 // Bus type : apb // Description : Testbench manager. Allows the programmer to know what // platform their software is running on. // ============================================================================= #ifndef HARDWARE_REGS_TBMAN_DEFINED #define HARDWARE_REGS_TBMAN_DEFINED // ============================================================================= // Register : TBMAN_PLATFORM // Description : Indicates the type of platform in use #define TBMAN_PLATFORM_OFFSET _u(0x00000000) #define TBMAN_PLATFORM_BITS _u(0x00000003) #define TBMAN_PLATFORM_RESET _u(0x00000005) // ----------------------------------------------------------------------------- // Field : TBMAN_PLATFORM_FPGA // Description : Indicates the platform is an FPGA #define TBMAN_PLATFORM_FPGA_RESET _u(0x0) #define TBMAN_PLATFORM_FPGA_BITS _u(0x00000002) #define TBMAN_PLATFORM_FPGA_MSB _u(1) #define TBMAN_PLATFORM_FPGA_LSB _u(1) #define TBMAN_PLATFORM_FPGA_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : TBMAN_PLATFORM_ASIC // Description : Indicates the platform is an ASIC #define TBMAN_PLATFORM_ASIC_RESET _u(0x1) #define TBMAN_PLATFORM_ASIC_BITS _u(0x00000001) #define TBMAN_PLATFORM_ASIC_MSB _u(0) #define TBMAN_PLATFORM_ASIC_LSB _u(0) #define TBMAN_PLATFORM_ASIC_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_TBMAN_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/timer.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : TIMER // Version : 1 // Bus type : apb // Description : Controls time and alarms // time is a 64 bit value indicating the time in usec since // power-on // timeh is the top 32 bits of time & timel is the bottom 32 // bits // to change time write to timelw before timehw // to read time read from timelr before timehr // An alarm is set by setting alarm_enable and writing to the // corresponding alarm register // When an alarm is pending, the corresponding alarm_running // signal will be high // An alarm can be cancelled before it has finished by clearing // the alarm_enable // When an alarm fires, the corresponding alarm_irq is set and // alarm_running is cleared // To clear the interrupt write a 1 to the corresponding // alarm_irq // ============================================================================= #ifndef HARDWARE_REGS_TIMER_DEFINED #define HARDWARE_REGS_TIMER_DEFINED // ============================================================================= // Register : TIMER_TIMEHW // Description : Write to bits 63:32 of time // always write timelw before timehw #define TIMER_TIMEHW_OFFSET _u(0x00000000) #define TIMER_TIMEHW_BITS _u(0xffffffff) #define TIMER_TIMEHW_RESET _u(0x00000000) #define TIMER_TIMEHW_MSB _u(31) #define TIMER_TIMEHW_LSB _u(0) #define TIMER_TIMEHW_ACCESS "WF" // ============================================================================= // Register : TIMER_TIMELW // Description : Write to bits 31:0 of time // writes do not get copied to time until timehw is written #define TIMER_TIMELW_OFFSET _u(0x00000004) #define TIMER_TIMELW_BITS _u(0xffffffff) #define TIMER_TIMELW_RESET _u(0x00000000) #define TIMER_TIMELW_MSB _u(31) #define TIMER_TIMELW_LSB _u(0) #define TIMER_TIMELW_ACCESS "WF" // ============================================================================= // Register : TIMER_TIMEHR // Description : Read from bits 63:32 of time // always read timelr before timehr #define TIMER_TIMEHR_OFFSET _u(0x00000008) #define TIMER_TIMEHR_BITS _u(0xffffffff) #define TIMER_TIMEHR_RESET _u(0x00000000) #define TIMER_TIMEHR_MSB _u(31) #define TIMER_TIMEHR_LSB _u(0) #define TIMER_TIMEHR_ACCESS "RO" // ============================================================================= // Register : TIMER_TIMELR // Description : Read from bits 31:0 of time #define TIMER_TIMELR_OFFSET _u(0x0000000c) #define TIMER_TIMELR_BITS _u(0xffffffff) #define TIMER_TIMELR_RESET _u(0x00000000) #define TIMER_TIMELR_MSB _u(31) #define TIMER_TIMELR_LSB _u(0) #define TIMER_TIMELR_ACCESS "RO" // ============================================================================= // Register : TIMER_ALARM0 // Description : Arm alarm 0, and configure the time it will fire. // Once armed, the alarm fires when TIMER_ALARM0 == TIMELR. // The alarm will disarm itself once it fires, and can // be disarmed early using the ARMED status register. #define TIMER_ALARM0_OFFSET _u(0x00000010) #define TIMER_ALARM0_BITS _u(0xffffffff) #define TIMER_ALARM0_RESET _u(0x00000000) #define TIMER_ALARM0_MSB _u(31) #define TIMER_ALARM0_LSB _u(0) #define TIMER_ALARM0_ACCESS "RW" // ============================================================================= // Register : TIMER_ALARM1 // Description : Arm alarm 1, and configure the time it will fire. // Once armed, the alarm fires when TIMER_ALARM1 == TIMELR. // The alarm will disarm itself once it fires, and can // be disarmed early using the ARMED status register. #define TIMER_ALARM1_OFFSET _u(0x00000014) #define TIMER_ALARM1_BITS _u(0xffffffff) #define TIMER_ALARM1_RESET _u(0x00000000) #define TIMER_ALARM1_MSB _u(31) #define TIMER_ALARM1_LSB _u(0) #define TIMER_ALARM1_ACCESS "RW" // ============================================================================= // Register : TIMER_ALARM2 // Description : Arm alarm 2, and configure the time it will fire. // Once armed, the alarm fires when TIMER_ALARM2 == TIMELR. // The alarm will disarm itself once it fires, and can // be disarmed early using the ARMED status register. #define TIMER_ALARM2_OFFSET _u(0x00000018) #define TIMER_ALARM2_BITS _u(0xffffffff) #define TIMER_ALARM2_RESET _u(0x00000000) #define TIMER_ALARM2_MSB _u(31) #define TIMER_ALARM2_LSB _u(0) #define TIMER_ALARM2_ACCESS "RW" // ============================================================================= // Register : TIMER_ALARM3 // Description : Arm alarm 3, and configure the time it will fire. // Once armed, the alarm fires when TIMER_ALARM3 == TIMELR. // The alarm will disarm itself once it fires, and can // be disarmed early using the ARMED status register. #define TIMER_ALARM3_OFFSET _u(0x0000001c) #define TIMER_ALARM3_BITS _u(0xffffffff) #define TIMER_ALARM3_RESET _u(0x00000000) #define TIMER_ALARM3_MSB _u(31) #define TIMER_ALARM3_LSB _u(0) #define TIMER_ALARM3_ACCESS "RW" // ============================================================================= // Register : TIMER_ARMED // Description : Indicates the armed/disarmed status of each alarm. // A write to the corresponding ALARMx register arms the alarm. // Alarms automatically disarm upon firing, but writing ones here // will disarm immediately without waiting to fire. #define TIMER_ARMED_OFFSET _u(0x00000020) #define TIMER_ARMED_BITS _u(0x0000000f) #define TIMER_ARMED_RESET _u(0x00000000) #define TIMER_ARMED_MSB _u(3) #define TIMER_ARMED_LSB _u(0) #define TIMER_ARMED_ACCESS "WC" // ============================================================================= // Register : TIMER_TIMERAWH // Description : Raw read from bits 63:32 of time (no side effects) #define TIMER_TIMERAWH_OFFSET _u(0x00000024) #define TIMER_TIMERAWH_BITS _u(0xffffffff) #define TIMER_TIMERAWH_RESET _u(0x00000000) #define TIMER_TIMERAWH_MSB _u(31) #define TIMER_TIMERAWH_LSB _u(0) #define TIMER_TIMERAWH_ACCESS "RO" // ============================================================================= // Register : TIMER_TIMERAWL // Description : Raw read from bits 31:0 of time (no side effects) #define TIMER_TIMERAWL_OFFSET _u(0x00000028) #define TIMER_TIMERAWL_BITS _u(0xffffffff) #define TIMER_TIMERAWL_RESET _u(0x00000000) #define TIMER_TIMERAWL_MSB _u(31) #define TIMER_TIMERAWL_LSB _u(0) #define TIMER_TIMERAWL_ACCESS "RO" // ============================================================================= // Register : TIMER_DBGPAUSE // Description : Set bits high to enable pause when the corresponding debug // ports are active #define TIMER_DBGPAUSE_OFFSET _u(0x0000002c) #define TIMER_DBGPAUSE_BITS _u(0x00000006) #define TIMER_DBGPAUSE_RESET _u(0x00000007) // ----------------------------------------------------------------------------- // Field : TIMER_DBGPAUSE_DBG1 // Description : Pause when processor 1 is in debug mode #define TIMER_DBGPAUSE_DBG1_RESET _u(0x1) #define TIMER_DBGPAUSE_DBG1_BITS _u(0x00000004) #define TIMER_DBGPAUSE_DBG1_MSB _u(2) #define TIMER_DBGPAUSE_DBG1_LSB _u(2) #define TIMER_DBGPAUSE_DBG1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : TIMER_DBGPAUSE_DBG0 // Description : Pause when processor 0 is in debug mode #define TIMER_DBGPAUSE_DBG0_RESET _u(0x1) #define TIMER_DBGPAUSE_DBG0_BITS _u(0x00000002) #define TIMER_DBGPAUSE_DBG0_MSB _u(1) #define TIMER_DBGPAUSE_DBG0_LSB _u(1) #define TIMER_DBGPAUSE_DBG0_ACCESS "RW" // ============================================================================= // Register : TIMER_PAUSE // Description : Set high to pause the timer #define TIMER_PAUSE_OFFSET _u(0x00000030) #define TIMER_PAUSE_BITS _u(0x00000001) #define TIMER_PAUSE_RESET _u(0x00000000) #define TIMER_PAUSE_MSB _u(0) #define TIMER_PAUSE_LSB _u(0) #define TIMER_PAUSE_ACCESS "RW" // ============================================================================= // Register : TIMER_INTR // Description : Raw Interrupts #define TIMER_INTR_OFFSET _u(0x00000034) #define TIMER_INTR_BITS _u(0x0000000f) #define TIMER_INTR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : TIMER_INTR_ALARM_3 // Description : None #define TIMER_INTR_ALARM_3_RESET _u(0x0) #define TIMER_INTR_ALARM_3_BITS _u(0x00000008) #define TIMER_INTR_ALARM_3_MSB _u(3) #define TIMER_INTR_ALARM_3_LSB _u(3) #define TIMER_INTR_ALARM_3_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : TIMER_INTR_ALARM_2 // Description : None #define TIMER_INTR_ALARM_2_RESET _u(0x0) #define TIMER_INTR_ALARM_2_BITS _u(0x00000004) #define TIMER_INTR_ALARM_2_MSB _u(2) #define TIMER_INTR_ALARM_2_LSB _u(2) #define TIMER_INTR_ALARM_2_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : TIMER_INTR_ALARM_1 // Description : None #define TIMER_INTR_ALARM_1_RESET _u(0x0) #define TIMER_INTR_ALARM_1_BITS _u(0x00000002) #define TIMER_INTR_ALARM_1_MSB _u(1) #define TIMER_INTR_ALARM_1_LSB _u(1) #define TIMER_INTR_ALARM_1_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : TIMER_INTR_ALARM_0 // Description : None #define TIMER_INTR_ALARM_0_RESET _u(0x0) #define TIMER_INTR_ALARM_0_BITS _u(0x00000001) #define TIMER_INTR_ALARM_0_MSB _u(0) #define TIMER_INTR_ALARM_0_LSB _u(0) #define TIMER_INTR_ALARM_0_ACCESS "WC" // ============================================================================= // Register : TIMER_INTE // Description : Interrupt Enable #define TIMER_INTE_OFFSET _u(0x00000038) #define TIMER_INTE_BITS _u(0x0000000f) #define TIMER_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : TIMER_INTE_ALARM_3 // Description : None #define TIMER_INTE_ALARM_3_RESET _u(0x0) #define TIMER_INTE_ALARM_3_BITS _u(0x00000008) #define TIMER_INTE_ALARM_3_MSB _u(3) #define TIMER_INTE_ALARM_3_LSB _u(3) #define TIMER_INTE_ALARM_3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : TIMER_INTE_ALARM_2 // Description : None #define TIMER_INTE_ALARM_2_RESET _u(0x0) #define TIMER_INTE_ALARM_2_BITS _u(0x00000004) #define TIMER_INTE_ALARM_2_MSB _u(2) #define TIMER_INTE_ALARM_2_LSB _u(2) #define TIMER_INTE_ALARM_2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : TIMER_INTE_ALARM_1 // Description : None #define TIMER_INTE_ALARM_1_RESET _u(0x0) #define TIMER_INTE_ALARM_1_BITS _u(0x00000002) #define TIMER_INTE_ALARM_1_MSB _u(1) #define TIMER_INTE_ALARM_1_LSB _u(1) #define TIMER_INTE_ALARM_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : TIMER_INTE_ALARM_0 // Description : None #define TIMER_INTE_ALARM_0_RESET _u(0x0) #define TIMER_INTE_ALARM_0_BITS _u(0x00000001) #define TIMER_INTE_ALARM_0_MSB _u(0) #define TIMER_INTE_ALARM_0_LSB _u(0) #define TIMER_INTE_ALARM_0_ACCESS "RW" // ============================================================================= // Register : TIMER_INTF // Description : Interrupt Force #define TIMER_INTF_OFFSET _u(0x0000003c) #define TIMER_INTF_BITS _u(0x0000000f) #define TIMER_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : TIMER_INTF_ALARM_3 // Description : None #define TIMER_INTF_ALARM_3_RESET _u(0x0) #define TIMER_INTF_ALARM_3_BITS _u(0x00000008) #define TIMER_INTF_ALARM_3_MSB _u(3) #define TIMER_INTF_ALARM_3_LSB _u(3) #define TIMER_INTF_ALARM_3_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : TIMER_INTF_ALARM_2 // Description : None #define TIMER_INTF_ALARM_2_RESET _u(0x0) #define TIMER_INTF_ALARM_2_BITS _u(0x00000004) #define TIMER_INTF_ALARM_2_MSB _u(2) #define TIMER_INTF_ALARM_2_LSB _u(2) #define TIMER_INTF_ALARM_2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : TIMER_INTF_ALARM_1 // Description : None #define TIMER_INTF_ALARM_1_RESET _u(0x0) #define TIMER_INTF_ALARM_1_BITS _u(0x00000002) #define TIMER_INTF_ALARM_1_MSB _u(1) #define TIMER_INTF_ALARM_1_LSB _u(1) #define TIMER_INTF_ALARM_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : TIMER_INTF_ALARM_0 // Description : None #define TIMER_INTF_ALARM_0_RESET _u(0x0) #define TIMER_INTF_ALARM_0_BITS _u(0x00000001) #define TIMER_INTF_ALARM_0_MSB _u(0) #define TIMER_INTF_ALARM_0_LSB _u(0) #define TIMER_INTF_ALARM_0_ACCESS "RW" // ============================================================================= // Register : TIMER_INTS // Description : Interrupt status after masking & forcing #define TIMER_INTS_OFFSET _u(0x00000040) #define TIMER_INTS_BITS _u(0x0000000f) #define TIMER_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : TIMER_INTS_ALARM_3 // Description : None #define TIMER_INTS_ALARM_3_RESET _u(0x0) #define TIMER_INTS_ALARM_3_BITS _u(0x00000008) #define TIMER_INTS_ALARM_3_MSB _u(3) #define TIMER_INTS_ALARM_3_LSB _u(3) #define TIMER_INTS_ALARM_3_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : TIMER_INTS_ALARM_2 // Description : None #define TIMER_INTS_ALARM_2_RESET _u(0x0) #define TIMER_INTS_ALARM_2_BITS _u(0x00000004) #define TIMER_INTS_ALARM_2_MSB _u(2) #define TIMER_INTS_ALARM_2_LSB _u(2) #define TIMER_INTS_ALARM_2_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : TIMER_INTS_ALARM_1 // Description : None #define TIMER_INTS_ALARM_1_RESET _u(0x0) #define TIMER_INTS_ALARM_1_BITS _u(0x00000002) #define TIMER_INTS_ALARM_1_MSB _u(1) #define TIMER_INTS_ALARM_1_LSB _u(1) #define TIMER_INTS_ALARM_1_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : TIMER_INTS_ALARM_0 // Description : None #define TIMER_INTS_ALARM_0_RESET _u(0x0) #define TIMER_INTS_ALARM_0_BITS _u(0x00000001) #define TIMER_INTS_ALARM_0_MSB _u(0) #define TIMER_INTS_ALARM_0_LSB _u(0) #define TIMER_INTS_ALARM_0_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_TIMER_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/uart.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : UART // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_UART_DEFINED #define HARDWARE_REGS_UART_DEFINED // ============================================================================= // Register : UART_UARTDR // Description : Data Register, UARTDR #define UART_UARTDR_OFFSET _u(0x00000000) #define UART_UARTDR_BITS _u(0x00000fff) #define UART_UARTDR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTDR_OE // Description : Overrun error. This bit is set to 1 if data is received and the // receive FIFO is already full. This is cleared to 0 once there // is an empty space in the FIFO and a new character can be // written to it. #define UART_UARTDR_OE_RESET "-" #define UART_UARTDR_OE_BITS _u(0x00000800) #define UART_UARTDR_OE_MSB _u(11) #define UART_UARTDR_OE_LSB _u(11) #define UART_UARTDR_OE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTDR_BE // Description : Break error. This bit is set to 1 if a break condition was // detected, indicating that the received data input was held LOW // for longer than a full-word transmission time (defined as // start, data, parity and stop bits). In FIFO mode, this error is // associated with the character at the top of the FIFO. When a // break occurs, only one 0 character is loaded into the FIFO. The // next character is only enabled after the receive data input // goes to a 1 (marking state), and the next valid start bit is // received. #define UART_UARTDR_BE_RESET "-" #define UART_UARTDR_BE_BITS _u(0x00000400) #define UART_UARTDR_BE_MSB _u(10) #define UART_UARTDR_BE_LSB _u(10) #define UART_UARTDR_BE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTDR_PE // Description : Parity error. When set to 1, it indicates that the parity of // the received data character does not match the parity that the // EPS and SPS bits in the Line Control Register, UARTLCR_H. In // FIFO mode, this error is associated with the character at the // top of the FIFO. #define UART_UARTDR_PE_RESET "-" #define UART_UARTDR_PE_BITS _u(0x00000200) #define UART_UARTDR_PE_MSB _u(9) #define UART_UARTDR_PE_LSB _u(9) #define UART_UARTDR_PE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTDR_FE // Description : Framing error. When set to 1, it indicates that the received // character did not have a valid stop bit (a valid stop bit is // 1). In FIFO mode, this error is associated with the character // at the top of the FIFO. #define UART_UARTDR_FE_RESET "-" #define UART_UARTDR_FE_BITS _u(0x00000100) #define UART_UARTDR_FE_MSB _u(8) #define UART_UARTDR_FE_LSB _u(8) #define UART_UARTDR_FE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTDR_DATA // Description : Receive (read) data character. Transmit (write) data character. #define UART_UARTDR_DATA_RESET "-" #define UART_UARTDR_DATA_BITS _u(0x000000ff) #define UART_UARTDR_DATA_MSB _u(7) #define UART_UARTDR_DATA_LSB _u(0) #define UART_UARTDR_DATA_ACCESS "RWF" // ============================================================================= // Register : UART_UARTRSR // Description : Receive Status Register/Error Clear Register, UARTRSR/UARTECR #define UART_UARTRSR_OFFSET _u(0x00000004) #define UART_UARTRSR_BITS _u(0x0000000f) #define UART_UARTRSR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTRSR_OE // Description : Overrun error. This bit is set to 1 if data is received and the // FIFO is already full. This bit is cleared to 0 by a write to // UARTECR. The FIFO contents remain valid because no more data is // written when the FIFO is full, only the contents of the shift // register are overwritten. The CPU must now read the data, to // empty the FIFO. #define UART_UARTRSR_OE_RESET _u(0x0) #define UART_UARTRSR_OE_BITS _u(0x00000008) #define UART_UARTRSR_OE_MSB _u(3) #define UART_UARTRSR_OE_LSB _u(3) #define UART_UARTRSR_OE_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTRSR_BE // Description : Break error. This bit is set to 1 if a break condition was // detected, indicating that the received data input was held LOW // for longer than a full-word transmission time (defined as // start, data, parity, and stop bits). This bit is cleared to 0 // after a write to UARTECR. In FIFO mode, this error is // associated with the character at the top of the FIFO. When a // break occurs, only one 0 character is loaded into the FIFO. The // next character is only enabled after the receive data input // goes to a 1 (marking state) and the next valid start bit is // received. #define UART_UARTRSR_BE_RESET _u(0x0) #define UART_UARTRSR_BE_BITS _u(0x00000004) #define UART_UARTRSR_BE_MSB _u(2) #define UART_UARTRSR_BE_LSB _u(2) #define UART_UARTRSR_BE_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTRSR_PE // Description : Parity error. When set to 1, it indicates that the parity of // the received data character does not match the parity that the // EPS and SPS bits in the Line Control Register, UARTLCR_H. This // bit is cleared to 0 by a write to UARTECR. In FIFO mode, this // error is associated with the character at the top of the FIFO. #define UART_UARTRSR_PE_RESET _u(0x0) #define UART_UARTRSR_PE_BITS _u(0x00000002) #define UART_UARTRSR_PE_MSB _u(1) #define UART_UARTRSR_PE_LSB _u(1) #define UART_UARTRSR_PE_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTRSR_FE // Description : Framing error. When set to 1, it indicates that the received // character did not have a valid stop bit (a valid stop bit is // 1). This bit is cleared to 0 by a write to UARTECR. In FIFO // mode, this error is associated with the character at the top of // the FIFO. #define UART_UARTRSR_FE_RESET _u(0x0) #define UART_UARTRSR_FE_BITS _u(0x00000001) #define UART_UARTRSR_FE_MSB _u(0) #define UART_UARTRSR_FE_LSB _u(0) #define UART_UARTRSR_FE_ACCESS "WC" // ============================================================================= // Register : UART_UARTFR // Description : Flag Register, UARTFR #define UART_UARTFR_OFFSET _u(0x00000018) #define UART_UARTFR_BITS _u(0x000001ff) #define UART_UARTFR_RESET _u(0x00000090) // ----------------------------------------------------------------------------- // Field : UART_UARTFR_RI // Description : Ring indicator. This bit is the complement of the UART ring // indicator, nUARTRI, modem status input. That is, the bit is 1 // when nUARTRI is LOW. #define UART_UARTFR_RI_RESET "-" #define UART_UARTFR_RI_BITS _u(0x00000100) #define UART_UARTFR_RI_MSB _u(8) #define UART_UARTFR_RI_LSB _u(8) #define UART_UARTFR_RI_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTFR_TXFE // Description : Transmit FIFO empty. The meaning of this bit depends on the // state of the FEN bit in the Line Control Register, UARTLCR_H. // If the FIFO is disabled, this bit is set when the transmit // holding register is empty. If the FIFO is enabled, the TXFE bit // is set when the transmit FIFO is empty. This bit does not // indicate if there is data in the transmit shift register. #define UART_UARTFR_TXFE_RESET _u(0x1) #define UART_UARTFR_TXFE_BITS _u(0x00000080) #define UART_UARTFR_TXFE_MSB _u(7) #define UART_UARTFR_TXFE_LSB _u(7) #define UART_UARTFR_TXFE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTFR_RXFF // Description : Receive FIFO full. The meaning of this bit depends on the state // of the FEN bit in the UARTLCR_H Register. If the FIFO is // disabled, this bit is set when the receive holding register is // full. If the FIFO is enabled, the RXFF bit is set when the // receive FIFO is full. #define UART_UARTFR_RXFF_RESET _u(0x0) #define UART_UARTFR_RXFF_BITS _u(0x00000040) #define UART_UARTFR_RXFF_MSB _u(6) #define UART_UARTFR_RXFF_LSB _u(6) #define UART_UARTFR_RXFF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTFR_TXFF // Description : Transmit FIFO full. The meaning of this bit depends on the // state of the FEN bit in the UARTLCR_H Register. If the FIFO is // disabled, this bit is set when the transmit holding register is // full. If the FIFO is enabled, the TXFF bit is set when the // transmit FIFO is full. #define UART_UARTFR_TXFF_RESET _u(0x0) #define UART_UARTFR_TXFF_BITS _u(0x00000020) #define UART_UARTFR_TXFF_MSB _u(5) #define UART_UARTFR_TXFF_LSB _u(5) #define UART_UARTFR_TXFF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTFR_RXFE // Description : Receive FIFO empty. The meaning of this bit depends on the // state of the FEN bit in the UARTLCR_H Register. If the FIFO is // disabled, this bit is set when the receive holding register is // empty. If the FIFO is enabled, the RXFE bit is set when the // receive FIFO is empty. #define UART_UARTFR_RXFE_RESET _u(0x1) #define UART_UARTFR_RXFE_BITS _u(0x00000010) #define UART_UARTFR_RXFE_MSB _u(4) #define UART_UARTFR_RXFE_LSB _u(4) #define UART_UARTFR_RXFE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTFR_BUSY // Description : UART busy. If this bit is set to 1, the UART is busy // transmitting data. This bit remains set until the complete // byte, including all the stop bits, has been sent from the shift // register. This bit is set as soon as the transmit FIFO becomes // non-empty, regardless of whether the UART is enabled or not. #define UART_UARTFR_BUSY_RESET _u(0x0) #define UART_UARTFR_BUSY_BITS _u(0x00000008) #define UART_UARTFR_BUSY_MSB _u(3) #define UART_UARTFR_BUSY_LSB _u(3) #define UART_UARTFR_BUSY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTFR_DCD // Description : Data carrier detect. This bit is the complement of the UART // data carrier detect, nUARTDCD, modem status input. That is, the // bit is 1 when nUARTDCD is LOW. #define UART_UARTFR_DCD_RESET "-" #define UART_UARTFR_DCD_BITS _u(0x00000004) #define UART_UARTFR_DCD_MSB _u(2) #define UART_UARTFR_DCD_LSB _u(2) #define UART_UARTFR_DCD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTFR_DSR // Description : Data set ready. This bit is the complement of the UART data set // ready, nUARTDSR, modem status input. That is, the bit is 1 when // nUARTDSR is LOW. #define UART_UARTFR_DSR_RESET "-" #define UART_UARTFR_DSR_BITS _u(0x00000002) #define UART_UARTFR_DSR_MSB _u(1) #define UART_UARTFR_DSR_LSB _u(1) #define UART_UARTFR_DSR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTFR_CTS // Description : Clear to send. This bit is the complement of the UART clear to // send, nUARTCTS, modem status input. That is, the bit is 1 when // nUARTCTS is LOW. #define UART_UARTFR_CTS_RESET "-" #define UART_UARTFR_CTS_BITS _u(0x00000001) #define UART_UARTFR_CTS_MSB _u(0) #define UART_UARTFR_CTS_LSB _u(0) #define UART_UARTFR_CTS_ACCESS "RO" // ============================================================================= // Register : UART_UARTILPR // Description : IrDA Low-Power Counter Register, UARTILPR #define UART_UARTILPR_OFFSET _u(0x00000020) #define UART_UARTILPR_BITS _u(0x000000ff) #define UART_UARTILPR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTILPR_ILPDVSR // Description : 8-bit low-power divisor value. These bits are cleared to 0 at // reset. #define UART_UARTILPR_ILPDVSR_RESET _u(0x00) #define UART_UARTILPR_ILPDVSR_BITS _u(0x000000ff) #define UART_UARTILPR_ILPDVSR_MSB _u(7) #define UART_UARTILPR_ILPDVSR_LSB _u(0) #define UART_UARTILPR_ILPDVSR_ACCESS "RW" // ============================================================================= // Register : UART_UARTIBRD // Description : Integer Baud Rate Register, UARTIBRD #define UART_UARTIBRD_OFFSET _u(0x00000024) #define UART_UARTIBRD_BITS _u(0x0000ffff) #define UART_UARTIBRD_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTIBRD_BAUD_DIVINT // Description : The integer baud rate divisor. These bits are cleared to 0 on // reset. #define UART_UARTIBRD_BAUD_DIVINT_RESET _u(0x0000) #define UART_UARTIBRD_BAUD_DIVINT_BITS _u(0x0000ffff) #define UART_UARTIBRD_BAUD_DIVINT_MSB _u(15) #define UART_UARTIBRD_BAUD_DIVINT_LSB _u(0) #define UART_UARTIBRD_BAUD_DIVINT_ACCESS "RW" // ============================================================================= // Register : UART_UARTFBRD // Description : Fractional Baud Rate Register, UARTFBRD #define UART_UARTFBRD_OFFSET _u(0x00000028) #define UART_UARTFBRD_BITS _u(0x0000003f) #define UART_UARTFBRD_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTFBRD_BAUD_DIVFRAC // Description : The fractional baud rate divisor. These bits are cleared to 0 // on reset. #define UART_UARTFBRD_BAUD_DIVFRAC_RESET _u(0x00) #define UART_UARTFBRD_BAUD_DIVFRAC_BITS _u(0x0000003f) #define UART_UARTFBRD_BAUD_DIVFRAC_MSB _u(5) #define UART_UARTFBRD_BAUD_DIVFRAC_LSB _u(0) #define UART_UARTFBRD_BAUD_DIVFRAC_ACCESS "RW" // ============================================================================= // Register : UART_UARTLCR_H // Description : Line Control Register, UARTLCR_H #define UART_UARTLCR_H_OFFSET _u(0x0000002c) #define UART_UARTLCR_H_BITS _u(0x000000ff) #define UART_UARTLCR_H_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTLCR_H_SPS // Description : Stick parity select. 0 = stick parity is disabled 1 = either: * // if the EPS bit is 0 then the parity bit is transmitted and // checked as a 1 * if the EPS bit is 1 then the parity bit is // transmitted and checked as a 0. This bit has no effect when the // PEN bit disables parity checking and generation. #define UART_UARTLCR_H_SPS_RESET _u(0x0) #define UART_UARTLCR_H_SPS_BITS _u(0x00000080) #define UART_UARTLCR_H_SPS_MSB _u(7) #define UART_UARTLCR_H_SPS_LSB _u(7) #define UART_UARTLCR_H_SPS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTLCR_H_WLEN // Description : Word length. These bits indicate the number of data bits // transmitted or received in a frame as follows: b11 = 8 bits b10 // = 7 bits b01 = 6 bits b00 = 5 bits. #define UART_UARTLCR_H_WLEN_RESET _u(0x0) #define UART_UARTLCR_H_WLEN_BITS _u(0x00000060) #define UART_UARTLCR_H_WLEN_MSB _u(6) #define UART_UARTLCR_H_WLEN_LSB _u(5) #define UART_UARTLCR_H_WLEN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTLCR_H_FEN // Description : Enable FIFOs: 0 = FIFOs are disabled (character mode) that is, // the FIFOs become 1-byte-deep holding registers 1 = transmit and // receive FIFO buffers are enabled (FIFO mode). #define UART_UARTLCR_H_FEN_RESET _u(0x0) #define UART_UARTLCR_H_FEN_BITS _u(0x00000010) #define UART_UARTLCR_H_FEN_MSB _u(4) #define UART_UARTLCR_H_FEN_LSB _u(4) #define UART_UARTLCR_H_FEN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTLCR_H_STP2 // Description : Two stop bits select. If this bit is set to 1, two stop bits // are transmitted at the end of the frame. The receive logic does // not check for two stop bits being received. #define UART_UARTLCR_H_STP2_RESET _u(0x0) #define UART_UARTLCR_H_STP2_BITS _u(0x00000008) #define UART_UARTLCR_H_STP2_MSB _u(3) #define UART_UARTLCR_H_STP2_LSB _u(3) #define UART_UARTLCR_H_STP2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTLCR_H_EPS // Description : Even parity select. Controls the type of parity the UART uses // during transmission and reception: 0 = odd parity. The UART // generates or checks for an odd number of 1s in the data and // parity bits. 1 = even parity. The UART generates or checks for // an even number of 1s in the data and parity bits. This bit has // no effect when the PEN bit disables parity checking and // generation. #define UART_UARTLCR_H_EPS_RESET _u(0x0) #define UART_UARTLCR_H_EPS_BITS _u(0x00000004) #define UART_UARTLCR_H_EPS_MSB _u(2) #define UART_UARTLCR_H_EPS_LSB _u(2) #define UART_UARTLCR_H_EPS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTLCR_H_PEN // Description : Parity enable: 0 = parity is disabled and no parity bit added // to the data frame 1 = parity checking and generation is // enabled. #define UART_UARTLCR_H_PEN_RESET _u(0x0) #define UART_UARTLCR_H_PEN_BITS _u(0x00000002) #define UART_UARTLCR_H_PEN_MSB _u(1) #define UART_UARTLCR_H_PEN_LSB _u(1) #define UART_UARTLCR_H_PEN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTLCR_H_BRK // Description : Send break. If this bit is set to 1, a low-level is continually // output on the UARTTXD output, after completing transmission of // the current character. For the proper execution of the break // command, the software must set this bit for at least two // complete frames. For normal use, this bit must be cleared to 0. #define UART_UARTLCR_H_BRK_RESET _u(0x0) #define UART_UARTLCR_H_BRK_BITS _u(0x00000001) #define UART_UARTLCR_H_BRK_MSB _u(0) #define UART_UARTLCR_H_BRK_LSB _u(0) #define UART_UARTLCR_H_BRK_ACCESS "RW" // ============================================================================= // Register : UART_UARTCR // Description : Control Register, UARTCR #define UART_UARTCR_OFFSET _u(0x00000030) #define UART_UARTCR_BITS _u(0x0000ff87) #define UART_UARTCR_RESET _u(0x00000300) // ----------------------------------------------------------------------------- // Field : UART_UARTCR_CTSEN // Description : CTS hardware flow control enable. If this bit is set to 1, CTS // hardware flow control is enabled. Data is only transmitted when // the nUARTCTS signal is asserted. #define UART_UARTCR_CTSEN_RESET _u(0x0) #define UART_UARTCR_CTSEN_BITS _u(0x00008000) #define UART_UARTCR_CTSEN_MSB _u(15) #define UART_UARTCR_CTSEN_LSB _u(15) #define UART_UARTCR_CTSEN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_RTSEN // Description : RTS hardware flow control enable. If this bit is set to 1, RTS // hardware flow control is enabled. Data is only requested when // there is space in the receive FIFO for it to be received. #define UART_UARTCR_RTSEN_RESET _u(0x0) #define UART_UARTCR_RTSEN_BITS _u(0x00004000) #define UART_UARTCR_RTSEN_MSB _u(14) #define UART_UARTCR_RTSEN_LSB _u(14) #define UART_UARTCR_RTSEN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_OUT2 // Description : This bit is the complement of the UART Out2 (nUARTOut2) modem // status output. That is, when the bit is programmed to a 1, the // output is 0. For DTE this can be used as Ring Indicator (RI). #define UART_UARTCR_OUT2_RESET _u(0x0) #define UART_UARTCR_OUT2_BITS _u(0x00002000) #define UART_UARTCR_OUT2_MSB _u(13) #define UART_UARTCR_OUT2_LSB _u(13) #define UART_UARTCR_OUT2_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_OUT1 // Description : This bit is the complement of the UART Out1 (nUARTOut1) modem // status output. That is, when the bit is programmed to a 1 the // output is 0. For DTE this can be used as Data Carrier Detect // (DCD). #define UART_UARTCR_OUT1_RESET _u(0x0) #define UART_UARTCR_OUT1_BITS _u(0x00001000) #define UART_UARTCR_OUT1_MSB _u(12) #define UART_UARTCR_OUT1_LSB _u(12) #define UART_UARTCR_OUT1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_RTS // Description : Request to send. This bit is the complement of the UART request // to send, nUARTRTS, modem status output. That is, when the bit // is programmed to a 1 then nUARTRTS is LOW. #define UART_UARTCR_RTS_RESET _u(0x0) #define UART_UARTCR_RTS_BITS _u(0x00000800) #define UART_UARTCR_RTS_MSB _u(11) #define UART_UARTCR_RTS_LSB _u(11) #define UART_UARTCR_RTS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_DTR // Description : Data transmit ready. This bit is the complement of the UART // data transmit ready, nUARTDTR, modem status output. That is, // when the bit is programmed to a 1 then nUARTDTR is LOW. #define UART_UARTCR_DTR_RESET _u(0x0) #define UART_UARTCR_DTR_BITS _u(0x00000400) #define UART_UARTCR_DTR_MSB _u(10) #define UART_UARTCR_DTR_LSB _u(10) #define UART_UARTCR_DTR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_RXE // Description : Receive enable. If this bit is set to 1, the receive section of // the UART is enabled. Data reception occurs for either UART // signals or SIR signals depending on the setting of the SIREN // bit. When the UART is disabled in the middle of reception, it // completes the current character before stopping. #define UART_UARTCR_RXE_RESET _u(0x1) #define UART_UARTCR_RXE_BITS _u(0x00000200) #define UART_UARTCR_RXE_MSB _u(9) #define UART_UARTCR_RXE_LSB _u(9) #define UART_UARTCR_RXE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_TXE // Description : Transmit enable. If this bit is set to 1, the transmit section // of the UART is enabled. Data transmission occurs for either // UART signals, or SIR signals depending on the setting of the // SIREN bit. When the UART is disabled in the middle of // transmission, it completes the current character before // stopping. #define UART_UARTCR_TXE_RESET _u(0x1) #define UART_UARTCR_TXE_BITS _u(0x00000100) #define UART_UARTCR_TXE_MSB _u(8) #define UART_UARTCR_TXE_LSB _u(8) #define UART_UARTCR_TXE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_LBE // Description : Loopback enable. If this bit is set to 1 and the SIREN bit is // set to 1 and the SIRTEST bit in the Test Control Register, // UARTTCR is set to 1, then the nSIROUT path is inverted, and fed // through to the SIRIN path. The SIRTEST bit in the test register // must be set to 1 to override the normal half-duplex SIR // operation. This must be the requirement for accessing the test // registers during normal operation, and SIRTEST must be cleared // to 0 when loopback testing is finished. This feature reduces // the amount of external coupling required during system test. If // this bit is set to 1, and the SIRTEST bit is set to 0, the // UARTTXD path is fed through to the UARTRXD path. In either SIR // mode or UART mode, when this bit is set, the modem outputs are // also fed through to the modem inputs. This bit is cleared to 0 // on reset, to disable loopback. #define UART_UARTCR_LBE_RESET _u(0x0) #define UART_UARTCR_LBE_BITS _u(0x00000080) #define UART_UARTCR_LBE_MSB _u(7) #define UART_UARTCR_LBE_LSB _u(7) #define UART_UARTCR_LBE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_SIRLP // Description : SIR low-power IrDA mode. This bit selects the IrDA encoding // mode. If this bit is cleared to 0, low-level bits are // transmitted as an active high pulse with a width of 3 / 16th of // the bit period. If this bit is set to 1, low-level bits are // transmitted with a pulse width that is 3 times the period of // the IrLPBaud16 input signal, regardless of the selected bit // rate. Setting this bit uses less power, but might reduce // transmission distances. #define UART_UARTCR_SIRLP_RESET _u(0x0) #define UART_UARTCR_SIRLP_BITS _u(0x00000004) #define UART_UARTCR_SIRLP_MSB _u(2) #define UART_UARTCR_SIRLP_LSB _u(2) #define UART_UARTCR_SIRLP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_SIREN // Description : SIR enable: 0 = IrDA SIR ENDEC is disabled. nSIROUT remains LOW // (no light pulse generated), and signal transitions on SIRIN // have no effect. 1 = IrDA SIR ENDEC is enabled. Data is // transmitted and received on nSIROUT and SIRIN. UARTTXD remains // HIGH, in the marking state. Signal transitions on UARTRXD or // modem status inputs have no effect. This bit has no effect if // the UARTEN bit disables the UART. #define UART_UARTCR_SIREN_RESET _u(0x0) #define UART_UARTCR_SIREN_BITS _u(0x00000002) #define UART_UARTCR_SIREN_MSB _u(1) #define UART_UARTCR_SIREN_LSB _u(1) #define UART_UARTCR_SIREN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTCR_UARTEN // Description : UART enable: 0 = UART is disabled. If the UART is disabled in // the middle of transmission or reception, it completes the // current character before stopping. 1 = the UART is enabled. // Data transmission and reception occurs for either UART signals // or SIR signals depending on the setting of the SIREN bit. #define UART_UARTCR_UARTEN_RESET _u(0x0) #define UART_UARTCR_UARTEN_BITS _u(0x00000001) #define UART_UARTCR_UARTEN_MSB _u(0) #define UART_UARTCR_UARTEN_LSB _u(0) #define UART_UARTCR_UARTEN_ACCESS "RW" // ============================================================================= // Register : UART_UARTIFLS // Description : Interrupt FIFO Level Select Register, UARTIFLS #define UART_UARTIFLS_OFFSET _u(0x00000034) #define UART_UARTIFLS_BITS _u(0x0000003f) #define UART_UARTIFLS_RESET _u(0x00000012) // ----------------------------------------------------------------------------- // Field : UART_UARTIFLS_RXIFLSEL // Description : Receive interrupt FIFO level select. The trigger points for the // receive interrupt are as follows: b000 = Receive FIFO becomes // >= 1 / 8 full b001 = Receive FIFO becomes >= 1 / 4 full b010 = // Receive FIFO becomes >= 1 / 2 full b011 = Receive FIFO becomes // >= 3 / 4 full b100 = Receive FIFO becomes >= 7 / 8 full // b101-b111 = reserved. #define UART_UARTIFLS_RXIFLSEL_RESET _u(0x2) #define UART_UARTIFLS_RXIFLSEL_BITS _u(0x00000038) #define UART_UARTIFLS_RXIFLSEL_MSB _u(5) #define UART_UARTIFLS_RXIFLSEL_LSB _u(3) #define UART_UARTIFLS_RXIFLSEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIFLS_TXIFLSEL // Description : Transmit interrupt FIFO level select. The trigger points for // the transmit interrupt are as follows: b000 = Transmit FIFO // becomes <= 1 / 8 full b001 = Transmit FIFO becomes <= 1 / 4 // full b010 = Transmit FIFO becomes <= 1 / 2 full b011 = Transmit // FIFO becomes <= 3 / 4 full b100 = Transmit FIFO becomes <= 7 / // 8 full b101-b111 = reserved. #define UART_UARTIFLS_TXIFLSEL_RESET _u(0x2) #define UART_UARTIFLS_TXIFLSEL_BITS _u(0x00000007) #define UART_UARTIFLS_TXIFLSEL_MSB _u(2) #define UART_UARTIFLS_TXIFLSEL_LSB _u(0) #define UART_UARTIFLS_TXIFLSEL_ACCESS "RW" // ============================================================================= // Register : UART_UARTIMSC // Description : Interrupt Mask Set/Clear Register, UARTIMSC #define UART_UARTIMSC_OFFSET _u(0x00000038) #define UART_UARTIMSC_BITS _u(0x000007ff) #define UART_UARTIMSC_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_OEIM // Description : Overrun error interrupt mask. A read returns the current mask // for the UARTOEINTR interrupt. On a write of 1, the mask of the // UARTOEINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_OEIM_RESET _u(0x0) #define UART_UARTIMSC_OEIM_BITS _u(0x00000400) #define UART_UARTIMSC_OEIM_MSB _u(10) #define UART_UARTIMSC_OEIM_LSB _u(10) #define UART_UARTIMSC_OEIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_BEIM // Description : Break error interrupt mask. A read returns the current mask for // the UARTBEINTR interrupt. On a write of 1, the mask of the // UARTBEINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_BEIM_RESET _u(0x0) #define UART_UARTIMSC_BEIM_BITS _u(0x00000200) #define UART_UARTIMSC_BEIM_MSB _u(9) #define UART_UARTIMSC_BEIM_LSB _u(9) #define UART_UARTIMSC_BEIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_PEIM // Description : Parity error interrupt mask. A read returns the current mask // for the UARTPEINTR interrupt. On a write of 1, the mask of the // UARTPEINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_PEIM_RESET _u(0x0) #define UART_UARTIMSC_PEIM_BITS _u(0x00000100) #define UART_UARTIMSC_PEIM_MSB _u(8) #define UART_UARTIMSC_PEIM_LSB _u(8) #define UART_UARTIMSC_PEIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_FEIM // Description : Framing error interrupt mask. A read returns the current mask // for the UARTFEINTR interrupt. On a write of 1, the mask of the // UARTFEINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_FEIM_RESET _u(0x0) #define UART_UARTIMSC_FEIM_BITS _u(0x00000080) #define UART_UARTIMSC_FEIM_MSB _u(7) #define UART_UARTIMSC_FEIM_LSB _u(7) #define UART_UARTIMSC_FEIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_RTIM // Description : Receive timeout interrupt mask. A read returns the current mask // for the UARTRTINTR interrupt. On a write of 1, the mask of the // UARTRTINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_RTIM_RESET _u(0x0) #define UART_UARTIMSC_RTIM_BITS _u(0x00000040) #define UART_UARTIMSC_RTIM_MSB _u(6) #define UART_UARTIMSC_RTIM_LSB _u(6) #define UART_UARTIMSC_RTIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_TXIM // Description : Transmit interrupt mask. A read returns the current mask for // the UARTTXINTR interrupt. On a write of 1, the mask of the // UARTTXINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_TXIM_RESET _u(0x0) #define UART_UARTIMSC_TXIM_BITS _u(0x00000020) #define UART_UARTIMSC_TXIM_MSB _u(5) #define UART_UARTIMSC_TXIM_LSB _u(5) #define UART_UARTIMSC_TXIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_RXIM // Description : Receive interrupt mask. A read returns the current mask for the // UARTRXINTR interrupt. On a write of 1, the mask of the // UARTRXINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_RXIM_RESET _u(0x0) #define UART_UARTIMSC_RXIM_BITS _u(0x00000010) #define UART_UARTIMSC_RXIM_MSB _u(4) #define UART_UARTIMSC_RXIM_LSB _u(4) #define UART_UARTIMSC_RXIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_DSRMIM // Description : nUARTDSR modem interrupt mask. A read returns the current mask // for the UARTDSRINTR interrupt. On a write of 1, the mask of the // UARTDSRINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_DSRMIM_RESET _u(0x0) #define UART_UARTIMSC_DSRMIM_BITS _u(0x00000008) #define UART_UARTIMSC_DSRMIM_MSB _u(3) #define UART_UARTIMSC_DSRMIM_LSB _u(3) #define UART_UARTIMSC_DSRMIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_DCDMIM // Description : nUARTDCD modem interrupt mask. A read returns the current mask // for the UARTDCDINTR interrupt. On a write of 1, the mask of the // UARTDCDINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_DCDMIM_RESET _u(0x0) #define UART_UARTIMSC_DCDMIM_BITS _u(0x00000004) #define UART_UARTIMSC_DCDMIM_MSB _u(2) #define UART_UARTIMSC_DCDMIM_LSB _u(2) #define UART_UARTIMSC_DCDMIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_CTSMIM // Description : nUARTCTS modem interrupt mask. A read returns the current mask // for the UARTCTSINTR interrupt. On a write of 1, the mask of the // UARTCTSINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_CTSMIM_RESET _u(0x0) #define UART_UARTIMSC_CTSMIM_BITS _u(0x00000002) #define UART_UARTIMSC_CTSMIM_MSB _u(1) #define UART_UARTIMSC_CTSMIM_LSB _u(1) #define UART_UARTIMSC_CTSMIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTIMSC_RIMIM // Description : nUARTRI modem interrupt mask. A read returns the current mask // for the UARTRIINTR interrupt. On a write of 1, the mask of the // UARTRIINTR interrupt is set. A write of 0 clears the mask. #define UART_UARTIMSC_RIMIM_RESET _u(0x0) #define UART_UARTIMSC_RIMIM_BITS _u(0x00000001) #define UART_UARTIMSC_RIMIM_MSB _u(0) #define UART_UARTIMSC_RIMIM_LSB _u(0) #define UART_UARTIMSC_RIMIM_ACCESS "RW" // ============================================================================= // Register : UART_UARTRIS // Description : Raw Interrupt Status Register, UARTRIS #define UART_UARTRIS_OFFSET _u(0x0000003c) #define UART_UARTRIS_BITS _u(0x000007ff) #define UART_UARTRIS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_OERIS // Description : Overrun error interrupt status. Returns the raw interrupt state // of the UARTOEINTR interrupt. #define UART_UARTRIS_OERIS_RESET _u(0x0) #define UART_UARTRIS_OERIS_BITS _u(0x00000400) #define UART_UARTRIS_OERIS_MSB _u(10) #define UART_UARTRIS_OERIS_LSB _u(10) #define UART_UARTRIS_OERIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_BERIS // Description : Break error interrupt status. Returns the raw interrupt state // of the UARTBEINTR interrupt. #define UART_UARTRIS_BERIS_RESET _u(0x0) #define UART_UARTRIS_BERIS_BITS _u(0x00000200) #define UART_UARTRIS_BERIS_MSB _u(9) #define UART_UARTRIS_BERIS_LSB _u(9) #define UART_UARTRIS_BERIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_PERIS // Description : Parity error interrupt status. Returns the raw interrupt state // of the UARTPEINTR interrupt. #define UART_UARTRIS_PERIS_RESET _u(0x0) #define UART_UARTRIS_PERIS_BITS _u(0x00000100) #define UART_UARTRIS_PERIS_MSB _u(8) #define UART_UARTRIS_PERIS_LSB _u(8) #define UART_UARTRIS_PERIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_FERIS // Description : Framing error interrupt status. Returns the raw interrupt state // of the UARTFEINTR interrupt. #define UART_UARTRIS_FERIS_RESET _u(0x0) #define UART_UARTRIS_FERIS_BITS _u(0x00000080) #define UART_UARTRIS_FERIS_MSB _u(7) #define UART_UARTRIS_FERIS_LSB _u(7) #define UART_UARTRIS_FERIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_RTRIS // Description : Receive timeout interrupt status. Returns the raw interrupt // state of the UARTRTINTR interrupt. a #define UART_UARTRIS_RTRIS_RESET _u(0x0) #define UART_UARTRIS_RTRIS_BITS _u(0x00000040) #define UART_UARTRIS_RTRIS_MSB _u(6) #define UART_UARTRIS_RTRIS_LSB _u(6) #define UART_UARTRIS_RTRIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_TXRIS // Description : Transmit interrupt status. Returns the raw interrupt state of // the UARTTXINTR interrupt. #define UART_UARTRIS_TXRIS_RESET _u(0x0) #define UART_UARTRIS_TXRIS_BITS _u(0x00000020) #define UART_UARTRIS_TXRIS_MSB _u(5) #define UART_UARTRIS_TXRIS_LSB _u(5) #define UART_UARTRIS_TXRIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_RXRIS // Description : Receive interrupt status. Returns the raw interrupt state of // the UARTRXINTR interrupt. #define UART_UARTRIS_RXRIS_RESET _u(0x0) #define UART_UARTRIS_RXRIS_BITS _u(0x00000010) #define UART_UARTRIS_RXRIS_MSB _u(4) #define UART_UARTRIS_RXRIS_LSB _u(4) #define UART_UARTRIS_RXRIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_DSRRMIS // Description : nUARTDSR modem interrupt status. Returns the raw interrupt // state of the UARTDSRINTR interrupt. #define UART_UARTRIS_DSRRMIS_RESET "-" #define UART_UARTRIS_DSRRMIS_BITS _u(0x00000008) #define UART_UARTRIS_DSRRMIS_MSB _u(3) #define UART_UARTRIS_DSRRMIS_LSB _u(3) #define UART_UARTRIS_DSRRMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_DCDRMIS // Description : nUARTDCD modem interrupt status. Returns the raw interrupt // state of the UARTDCDINTR interrupt. #define UART_UARTRIS_DCDRMIS_RESET "-" #define UART_UARTRIS_DCDRMIS_BITS _u(0x00000004) #define UART_UARTRIS_DCDRMIS_MSB _u(2) #define UART_UARTRIS_DCDRMIS_LSB _u(2) #define UART_UARTRIS_DCDRMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_CTSRMIS // Description : nUARTCTS modem interrupt status. Returns the raw interrupt // state of the UARTCTSINTR interrupt. #define UART_UARTRIS_CTSRMIS_RESET "-" #define UART_UARTRIS_CTSRMIS_BITS _u(0x00000002) #define UART_UARTRIS_CTSRMIS_MSB _u(1) #define UART_UARTRIS_CTSRMIS_LSB _u(1) #define UART_UARTRIS_CTSRMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTRIS_RIRMIS // Description : nUARTRI modem interrupt status. Returns the raw interrupt state // of the UARTRIINTR interrupt. #define UART_UARTRIS_RIRMIS_RESET "-" #define UART_UARTRIS_RIRMIS_BITS _u(0x00000001) #define UART_UARTRIS_RIRMIS_MSB _u(0) #define UART_UARTRIS_RIRMIS_LSB _u(0) #define UART_UARTRIS_RIRMIS_ACCESS "RO" // ============================================================================= // Register : UART_UARTMIS // Description : Masked Interrupt Status Register, UARTMIS #define UART_UARTMIS_OFFSET _u(0x00000040) #define UART_UARTMIS_BITS _u(0x000007ff) #define UART_UARTMIS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_OEMIS // Description : Overrun error masked interrupt status. Returns the masked // interrupt state of the UARTOEINTR interrupt. #define UART_UARTMIS_OEMIS_RESET _u(0x0) #define UART_UARTMIS_OEMIS_BITS _u(0x00000400) #define UART_UARTMIS_OEMIS_MSB _u(10) #define UART_UARTMIS_OEMIS_LSB _u(10) #define UART_UARTMIS_OEMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_BEMIS // Description : Break error masked interrupt status. Returns the masked // interrupt state of the UARTBEINTR interrupt. #define UART_UARTMIS_BEMIS_RESET _u(0x0) #define UART_UARTMIS_BEMIS_BITS _u(0x00000200) #define UART_UARTMIS_BEMIS_MSB _u(9) #define UART_UARTMIS_BEMIS_LSB _u(9) #define UART_UARTMIS_BEMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_PEMIS // Description : Parity error masked interrupt status. Returns the masked // interrupt state of the UARTPEINTR interrupt. #define UART_UARTMIS_PEMIS_RESET _u(0x0) #define UART_UARTMIS_PEMIS_BITS _u(0x00000100) #define UART_UARTMIS_PEMIS_MSB _u(8) #define UART_UARTMIS_PEMIS_LSB _u(8) #define UART_UARTMIS_PEMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_FEMIS // Description : Framing error masked interrupt status. Returns the masked // interrupt state of the UARTFEINTR interrupt. #define UART_UARTMIS_FEMIS_RESET _u(0x0) #define UART_UARTMIS_FEMIS_BITS _u(0x00000080) #define UART_UARTMIS_FEMIS_MSB _u(7) #define UART_UARTMIS_FEMIS_LSB _u(7) #define UART_UARTMIS_FEMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_RTMIS // Description : Receive timeout masked interrupt status. Returns the masked // interrupt state of the UARTRTINTR interrupt. #define UART_UARTMIS_RTMIS_RESET _u(0x0) #define UART_UARTMIS_RTMIS_BITS _u(0x00000040) #define UART_UARTMIS_RTMIS_MSB _u(6) #define UART_UARTMIS_RTMIS_LSB _u(6) #define UART_UARTMIS_RTMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_TXMIS // Description : Transmit masked interrupt status. Returns the masked interrupt // state of the UARTTXINTR interrupt. #define UART_UARTMIS_TXMIS_RESET _u(0x0) #define UART_UARTMIS_TXMIS_BITS _u(0x00000020) #define UART_UARTMIS_TXMIS_MSB _u(5) #define UART_UARTMIS_TXMIS_LSB _u(5) #define UART_UARTMIS_TXMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_RXMIS // Description : Receive masked interrupt status. Returns the masked interrupt // state of the UARTRXINTR interrupt. #define UART_UARTMIS_RXMIS_RESET _u(0x0) #define UART_UARTMIS_RXMIS_BITS _u(0x00000010) #define UART_UARTMIS_RXMIS_MSB _u(4) #define UART_UARTMIS_RXMIS_LSB _u(4) #define UART_UARTMIS_RXMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_DSRMMIS // Description : nUARTDSR modem masked interrupt status. Returns the masked // interrupt state of the UARTDSRINTR interrupt. #define UART_UARTMIS_DSRMMIS_RESET "-" #define UART_UARTMIS_DSRMMIS_BITS _u(0x00000008) #define UART_UARTMIS_DSRMMIS_MSB _u(3) #define UART_UARTMIS_DSRMMIS_LSB _u(3) #define UART_UARTMIS_DSRMMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_DCDMMIS // Description : nUARTDCD modem masked interrupt status. Returns the masked // interrupt state of the UARTDCDINTR interrupt. #define UART_UARTMIS_DCDMMIS_RESET "-" #define UART_UARTMIS_DCDMMIS_BITS _u(0x00000004) #define UART_UARTMIS_DCDMMIS_MSB _u(2) #define UART_UARTMIS_DCDMMIS_LSB _u(2) #define UART_UARTMIS_DCDMMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_CTSMMIS // Description : nUARTCTS modem masked interrupt status. Returns the masked // interrupt state of the UARTCTSINTR interrupt. #define UART_UARTMIS_CTSMMIS_RESET "-" #define UART_UARTMIS_CTSMMIS_BITS _u(0x00000002) #define UART_UARTMIS_CTSMMIS_MSB _u(1) #define UART_UARTMIS_CTSMMIS_LSB _u(1) #define UART_UARTMIS_CTSMMIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTMIS_RIMMIS // Description : nUARTRI modem masked interrupt status. Returns the masked // interrupt state of the UARTRIINTR interrupt. #define UART_UARTMIS_RIMMIS_RESET "-" #define UART_UARTMIS_RIMMIS_BITS _u(0x00000001) #define UART_UARTMIS_RIMMIS_MSB _u(0) #define UART_UARTMIS_RIMMIS_LSB _u(0) #define UART_UARTMIS_RIMMIS_ACCESS "RO" // ============================================================================= // Register : UART_UARTICR // Description : Interrupt Clear Register, UARTICR #define UART_UARTICR_OFFSET _u(0x00000044) #define UART_UARTICR_BITS _u(0x000007ff) #define UART_UARTICR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTICR_OEIC // Description : Overrun error interrupt clear. Clears the UARTOEINTR interrupt. #define UART_UARTICR_OEIC_RESET "-" #define UART_UARTICR_OEIC_BITS _u(0x00000400) #define UART_UARTICR_OEIC_MSB _u(10) #define UART_UARTICR_OEIC_LSB _u(10) #define UART_UARTICR_OEIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTICR_BEIC // Description : Break error interrupt clear. Clears the UARTBEINTR interrupt. #define UART_UARTICR_BEIC_RESET "-" #define UART_UARTICR_BEIC_BITS _u(0x00000200) #define UART_UARTICR_BEIC_MSB _u(9) #define UART_UARTICR_BEIC_LSB _u(9) #define UART_UARTICR_BEIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTICR_PEIC // Description : Parity error interrupt clear. Clears the UARTPEINTR interrupt. #define UART_UARTICR_PEIC_RESET "-" #define UART_UARTICR_PEIC_BITS _u(0x00000100) #define UART_UARTICR_PEIC_MSB _u(8) #define UART_UARTICR_PEIC_LSB _u(8) #define UART_UARTICR_PEIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTICR_FEIC // Description : Framing error interrupt clear. Clears the UARTFEINTR interrupt. #define UART_UARTICR_FEIC_RESET "-" #define UART_UARTICR_FEIC_BITS _u(0x00000080) #define UART_UARTICR_FEIC_MSB _u(7) #define UART_UARTICR_FEIC_LSB _u(7) #define UART_UARTICR_FEIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTICR_RTIC // Description : Receive timeout interrupt clear. Clears the UARTRTINTR // interrupt. #define UART_UARTICR_RTIC_RESET "-" #define UART_UARTICR_RTIC_BITS _u(0x00000040) #define UART_UARTICR_RTIC_MSB _u(6) #define UART_UARTICR_RTIC_LSB _u(6) #define UART_UARTICR_RTIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTICR_TXIC // Description : Transmit interrupt clear. Clears the UARTTXINTR interrupt. #define UART_UARTICR_TXIC_RESET "-" #define UART_UARTICR_TXIC_BITS _u(0x00000020) #define UART_UARTICR_TXIC_MSB _u(5) #define UART_UARTICR_TXIC_LSB _u(5) #define UART_UARTICR_TXIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTICR_RXIC // Description : Receive interrupt clear. Clears the UARTRXINTR interrupt. #define UART_UARTICR_RXIC_RESET "-" #define UART_UARTICR_RXIC_BITS _u(0x00000010) #define UART_UARTICR_RXIC_MSB _u(4) #define UART_UARTICR_RXIC_LSB _u(4) #define UART_UARTICR_RXIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTICR_DSRMIC // Description : nUARTDSR modem interrupt clear. Clears the UARTDSRINTR // interrupt. #define UART_UARTICR_DSRMIC_RESET "-" #define UART_UARTICR_DSRMIC_BITS _u(0x00000008) #define UART_UARTICR_DSRMIC_MSB _u(3) #define UART_UARTICR_DSRMIC_LSB _u(3) #define UART_UARTICR_DSRMIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTICR_DCDMIC // Description : nUARTDCD modem interrupt clear. Clears the UARTDCDINTR // interrupt. #define UART_UARTICR_DCDMIC_RESET "-" #define UART_UARTICR_DCDMIC_BITS _u(0x00000004) #define UART_UARTICR_DCDMIC_MSB _u(2) #define UART_UARTICR_DCDMIC_LSB _u(2) #define UART_UARTICR_DCDMIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTICR_CTSMIC // Description : nUARTCTS modem interrupt clear. Clears the UARTCTSINTR // interrupt. #define UART_UARTICR_CTSMIC_RESET "-" #define UART_UARTICR_CTSMIC_BITS _u(0x00000002) #define UART_UARTICR_CTSMIC_MSB _u(1) #define UART_UARTICR_CTSMIC_LSB _u(1) #define UART_UARTICR_CTSMIC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : UART_UARTICR_RIMIC // Description : nUARTRI modem interrupt clear. Clears the UARTRIINTR interrupt. #define UART_UARTICR_RIMIC_RESET "-" #define UART_UARTICR_RIMIC_BITS _u(0x00000001) #define UART_UARTICR_RIMIC_MSB _u(0) #define UART_UARTICR_RIMIC_LSB _u(0) #define UART_UARTICR_RIMIC_ACCESS "WC" // ============================================================================= // Register : UART_UARTDMACR // Description : DMA Control Register, UARTDMACR #define UART_UARTDMACR_OFFSET _u(0x00000048) #define UART_UARTDMACR_BITS _u(0x00000007) #define UART_UARTDMACR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTDMACR_DMAONERR // Description : DMA on error. If this bit is set to 1, the DMA receive request // outputs, UARTRXDMASREQ or UARTRXDMABREQ, are disabled when the // UART error interrupt is asserted. #define UART_UARTDMACR_DMAONERR_RESET _u(0x0) #define UART_UARTDMACR_DMAONERR_BITS _u(0x00000004) #define UART_UARTDMACR_DMAONERR_MSB _u(2) #define UART_UARTDMACR_DMAONERR_LSB _u(2) #define UART_UARTDMACR_DMAONERR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTDMACR_TXDMAE // Description : Transmit DMA enable. If this bit is set to 1, DMA for the // transmit FIFO is enabled. #define UART_UARTDMACR_TXDMAE_RESET _u(0x0) #define UART_UARTDMACR_TXDMAE_BITS _u(0x00000002) #define UART_UARTDMACR_TXDMAE_MSB _u(1) #define UART_UARTDMACR_TXDMAE_LSB _u(1) #define UART_UARTDMACR_TXDMAE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : UART_UARTDMACR_RXDMAE // Description : Receive DMA enable. If this bit is set to 1, DMA for the // receive FIFO is enabled. #define UART_UARTDMACR_RXDMAE_RESET _u(0x0) #define UART_UARTDMACR_RXDMAE_BITS _u(0x00000001) #define UART_UARTDMACR_RXDMAE_MSB _u(0) #define UART_UARTDMACR_RXDMAE_LSB _u(0) #define UART_UARTDMACR_RXDMAE_ACCESS "RW" // ============================================================================= // Register : UART_UARTPERIPHID0 // Description : UARTPeriphID0 Register #define UART_UARTPERIPHID0_OFFSET _u(0x00000fe0) #define UART_UARTPERIPHID0_BITS _u(0x000000ff) #define UART_UARTPERIPHID0_RESET _u(0x00000011) // ----------------------------------------------------------------------------- // Field : UART_UARTPERIPHID0_PARTNUMBER0 // Description : These bits read back as 0x11 #define UART_UARTPERIPHID0_PARTNUMBER0_RESET _u(0x11) #define UART_UARTPERIPHID0_PARTNUMBER0_BITS _u(0x000000ff) #define UART_UARTPERIPHID0_PARTNUMBER0_MSB _u(7) #define UART_UARTPERIPHID0_PARTNUMBER0_LSB _u(0) #define UART_UARTPERIPHID0_PARTNUMBER0_ACCESS "RO" // ============================================================================= // Register : UART_UARTPERIPHID1 // Description : UARTPeriphID1 Register #define UART_UARTPERIPHID1_OFFSET _u(0x00000fe4) #define UART_UARTPERIPHID1_BITS _u(0x000000ff) #define UART_UARTPERIPHID1_RESET _u(0x00000010) // ----------------------------------------------------------------------------- // Field : UART_UARTPERIPHID1_DESIGNER0 // Description : These bits read back as 0x1 #define UART_UARTPERIPHID1_DESIGNER0_RESET _u(0x1) #define UART_UARTPERIPHID1_DESIGNER0_BITS _u(0x000000f0) #define UART_UARTPERIPHID1_DESIGNER0_MSB _u(7) #define UART_UARTPERIPHID1_DESIGNER0_LSB _u(4) #define UART_UARTPERIPHID1_DESIGNER0_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTPERIPHID1_PARTNUMBER1 // Description : These bits read back as 0x0 #define UART_UARTPERIPHID1_PARTNUMBER1_RESET _u(0x0) #define UART_UARTPERIPHID1_PARTNUMBER1_BITS _u(0x0000000f) #define UART_UARTPERIPHID1_PARTNUMBER1_MSB _u(3) #define UART_UARTPERIPHID1_PARTNUMBER1_LSB _u(0) #define UART_UARTPERIPHID1_PARTNUMBER1_ACCESS "RO" // ============================================================================= // Register : UART_UARTPERIPHID2 // Description : UARTPeriphID2 Register #define UART_UARTPERIPHID2_OFFSET _u(0x00000fe8) #define UART_UARTPERIPHID2_BITS _u(0x000000ff) #define UART_UARTPERIPHID2_RESET _u(0x00000034) // ----------------------------------------------------------------------------- // Field : UART_UARTPERIPHID2_REVISION // Description : This field depends on the revision of the UART: r1p0 0x0 r1p1 // 0x1 r1p3 0x2 r1p4 0x2 r1p5 0x3 #define UART_UARTPERIPHID2_REVISION_RESET _u(0x3) #define UART_UARTPERIPHID2_REVISION_BITS _u(0x000000f0) #define UART_UARTPERIPHID2_REVISION_MSB _u(7) #define UART_UARTPERIPHID2_REVISION_LSB _u(4) #define UART_UARTPERIPHID2_REVISION_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : UART_UARTPERIPHID2_DESIGNER1 // Description : These bits read back as 0x4 #define UART_UARTPERIPHID2_DESIGNER1_RESET _u(0x4) #define UART_UARTPERIPHID2_DESIGNER1_BITS _u(0x0000000f) #define UART_UARTPERIPHID2_DESIGNER1_MSB _u(3) #define UART_UARTPERIPHID2_DESIGNER1_LSB _u(0) #define UART_UARTPERIPHID2_DESIGNER1_ACCESS "RO" // ============================================================================= // Register : UART_UARTPERIPHID3 // Description : UARTPeriphID3 Register #define UART_UARTPERIPHID3_OFFSET _u(0x00000fec) #define UART_UARTPERIPHID3_BITS _u(0x000000ff) #define UART_UARTPERIPHID3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : UART_UARTPERIPHID3_CONFIGURATION // Description : These bits read back as 0x00 #define UART_UARTPERIPHID3_CONFIGURATION_RESET _u(0x00) #define UART_UARTPERIPHID3_CONFIGURATION_BITS _u(0x000000ff) #define UART_UARTPERIPHID3_CONFIGURATION_MSB _u(7) #define UART_UARTPERIPHID3_CONFIGURATION_LSB _u(0) #define UART_UARTPERIPHID3_CONFIGURATION_ACCESS "RO" // ============================================================================= // Register : UART_UARTPCELLID0 // Description : UARTPCellID0 Register #define UART_UARTPCELLID0_OFFSET _u(0x00000ff0) #define UART_UARTPCELLID0_BITS _u(0x000000ff) #define UART_UARTPCELLID0_RESET _u(0x0000000d) // ----------------------------------------------------------------------------- // Field : UART_UARTPCELLID0_UARTPCELLID0 // Description : These bits read back as 0x0D #define UART_UARTPCELLID0_UARTPCELLID0_RESET _u(0x0d) #define UART_UARTPCELLID0_UARTPCELLID0_BITS _u(0x000000ff) #define UART_UARTPCELLID0_UARTPCELLID0_MSB _u(7) #define UART_UARTPCELLID0_UARTPCELLID0_LSB _u(0) #define UART_UARTPCELLID0_UARTPCELLID0_ACCESS "RO" // ============================================================================= // Register : UART_UARTPCELLID1 // Description : UARTPCellID1 Register #define UART_UARTPCELLID1_OFFSET _u(0x00000ff4) #define UART_UARTPCELLID1_BITS _u(0x000000ff) #define UART_UARTPCELLID1_RESET _u(0x000000f0) // ----------------------------------------------------------------------------- // Field : UART_UARTPCELLID1_UARTPCELLID1 // Description : These bits read back as 0xF0 #define UART_UARTPCELLID1_UARTPCELLID1_RESET _u(0xf0) #define UART_UARTPCELLID1_UARTPCELLID1_BITS _u(0x000000ff) #define UART_UARTPCELLID1_UARTPCELLID1_MSB _u(7) #define UART_UARTPCELLID1_UARTPCELLID1_LSB _u(0) #define UART_UARTPCELLID1_UARTPCELLID1_ACCESS "RO" // ============================================================================= // Register : UART_UARTPCELLID2 // Description : UARTPCellID2 Register #define UART_UARTPCELLID2_OFFSET _u(0x00000ff8) #define UART_UARTPCELLID2_BITS _u(0x000000ff) #define UART_UARTPCELLID2_RESET _u(0x00000005) // ----------------------------------------------------------------------------- // Field : UART_UARTPCELLID2_UARTPCELLID2 // Description : These bits read back as 0x05 #define UART_UARTPCELLID2_UARTPCELLID2_RESET _u(0x05) #define UART_UARTPCELLID2_UARTPCELLID2_BITS _u(0x000000ff) #define UART_UARTPCELLID2_UARTPCELLID2_MSB _u(7) #define UART_UARTPCELLID2_UARTPCELLID2_LSB _u(0) #define UART_UARTPCELLID2_UARTPCELLID2_ACCESS "RO" // ============================================================================= // Register : UART_UARTPCELLID3 // Description : UARTPCellID3 Register #define UART_UARTPCELLID3_OFFSET _u(0x00000ffc) #define UART_UARTPCELLID3_BITS _u(0x000000ff) #define UART_UARTPCELLID3_RESET _u(0x000000b1) // ----------------------------------------------------------------------------- // Field : UART_UARTPCELLID3_UARTPCELLID3 // Description : These bits read back as 0xB1 #define UART_UARTPCELLID3_UARTPCELLID3_RESET _u(0xb1) #define UART_UARTPCELLID3_UARTPCELLID3_BITS _u(0x000000ff) #define UART_UARTPCELLID3_UARTPCELLID3_MSB _u(7) #define UART_UARTPCELLID3_UARTPCELLID3_LSB _u(0) #define UART_UARTPCELLID3_UARTPCELLID3_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_UART_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/usb.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : USB // Version : 1 // Bus type : ahbl // Description : USB FS/LS controller device registers // ============================================================================= #ifndef HARDWARE_REGS_USB_DEFINED #define HARDWARE_REGS_USB_DEFINED // ============================================================================= // Register : USB_ADDR_ENDP // Description : Device address and endpoint control #define USB_ADDR_ENDP_OFFSET _u(0x00000000) #define USB_ADDR_ENDP_BITS _u(0x000f007f) #define USB_ADDR_ENDP_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP_ENDPOINT // Description : Device endpoint to send data to. Only valid for HOST mode. #define USB_ADDR_ENDP_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP_ADDRESS // Description : In device mode, the address that the device should respond to. // Set in response to a SET_ADDR setup packet from the host. In // host mode set to the address of the device to communicate with. #define USB_ADDR_ENDP_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP1 // Description : Interrupt endpoint 1. Only valid for HOST mode. #define USB_ADDR_ENDP1_OFFSET _u(0x00000004) #define USB_ADDR_ENDP1_BITS _u(0x060f007f) #define USB_ADDR_ENDP1_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP1_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP1_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP1_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP1_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP1_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP1_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP1_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP1_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP1_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP1_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP1_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP1_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP1_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP1_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP1_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP1_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP1_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP1_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP1_ADDRESS // Description : Device address #define USB_ADDR_ENDP1_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP1_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP1_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP1_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP1_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP2 // Description : Interrupt endpoint 2. Only valid for HOST mode. #define USB_ADDR_ENDP2_OFFSET _u(0x00000008) #define USB_ADDR_ENDP2_BITS _u(0x060f007f) #define USB_ADDR_ENDP2_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP2_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP2_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP2_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP2_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP2_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP2_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP2_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP2_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP2_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP2_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP2_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP2_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP2_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP2_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP2_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP2_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP2_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP2_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP2_ADDRESS // Description : Device address #define USB_ADDR_ENDP2_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP2_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP2_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP2_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP2_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP3 // Description : Interrupt endpoint 3. Only valid for HOST mode. #define USB_ADDR_ENDP3_OFFSET _u(0x0000000c) #define USB_ADDR_ENDP3_BITS _u(0x060f007f) #define USB_ADDR_ENDP3_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP3_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP3_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP3_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP3_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP3_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP3_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP3_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP3_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP3_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP3_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP3_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP3_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP3_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP3_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP3_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP3_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP3_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP3_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP3_ADDRESS // Description : Device address #define USB_ADDR_ENDP3_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP3_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP3_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP3_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP3_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP4 // Description : Interrupt endpoint 4. Only valid for HOST mode. #define USB_ADDR_ENDP4_OFFSET _u(0x00000010) #define USB_ADDR_ENDP4_BITS _u(0x060f007f) #define USB_ADDR_ENDP4_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP4_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP4_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP4_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP4_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP4_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP4_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP4_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP4_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP4_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP4_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP4_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP4_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP4_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP4_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP4_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP4_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP4_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP4_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP4_ADDRESS // Description : Device address #define USB_ADDR_ENDP4_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP4_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP4_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP4_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP4_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP5 // Description : Interrupt endpoint 5. Only valid for HOST mode. #define USB_ADDR_ENDP5_OFFSET _u(0x00000014) #define USB_ADDR_ENDP5_BITS _u(0x060f007f) #define USB_ADDR_ENDP5_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP5_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP5_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP5_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP5_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP5_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP5_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP5_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP5_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP5_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP5_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP5_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP5_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP5_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP5_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP5_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP5_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP5_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP5_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP5_ADDRESS // Description : Device address #define USB_ADDR_ENDP5_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP5_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP5_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP5_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP5_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP6 // Description : Interrupt endpoint 6. Only valid for HOST mode. #define USB_ADDR_ENDP6_OFFSET _u(0x00000018) #define USB_ADDR_ENDP6_BITS _u(0x060f007f) #define USB_ADDR_ENDP6_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP6_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP6_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP6_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP6_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP6_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP6_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP6_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP6_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP6_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP6_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP6_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP6_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP6_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP6_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP6_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP6_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP6_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP6_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP6_ADDRESS // Description : Device address #define USB_ADDR_ENDP6_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP6_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP6_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP6_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP6_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP7 // Description : Interrupt endpoint 7. Only valid for HOST mode. #define USB_ADDR_ENDP7_OFFSET _u(0x0000001c) #define USB_ADDR_ENDP7_BITS _u(0x060f007f) #define USB_ADDR_ENDP7_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP7_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP7_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP7_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP7_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP7_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP7_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP7_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP7_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP7_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP7_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP7_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP7_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP7_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP7_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP7_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP7_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP7_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP7_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP7_ADDRESS // Description : Device address #define USB_ADDR_ENDP7_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP7_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP7_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP7_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP7_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP8 // Description : Interrupt endpoint 8. Only valid for HOST mode. #define USB_ADDR_ENDP8_OFFSET _u(0x00000020) #define USB_ADDR_ENDP8_BITS _u(0x060f007f) #define USB_ADDR_ENDP8_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP8_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP8_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP8_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP8_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP8_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP8_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP8_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP8_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP8_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP8_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP8_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP8_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP8_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP8_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP8_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP8_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP8_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP8_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP8_ADDRESS // Description : Device address #define USB_ADDR_ENDP8_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP8_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP8_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP8_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP8_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP9 // Description : Interrupt endpoint 9. Only valid for HOST mode. #define USB_ADDR_ENDP9_OFFSET _u(0x00000024) #define USB_ADDR_ENDP9_BITS _u(0x060f007f) #define USB_ADDR_ENDP9_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP9_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP9_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP9_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP9_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP9_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP9_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP9_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP9_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP9_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP9_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP9_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP9_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP9_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP9_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP9_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP9_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP9_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP9_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP9_ADDRESS // Description : Device address #define USB_ADDR_ENDP9_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP9_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP9_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP9_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP9_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP10 // Description : Interrupt endpoint 10. Only valid for HOST mode. #define USB_ADDR_ENDP10_OFFSET _u(0x00000028) #define USB_ADDR_ENDP10_BITS _u(0x060f007f) #define USB_ADDR_ENDP10_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP10_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP10_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP10_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP10_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP10_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP10_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP10_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP10_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP10_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP10_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP10_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP10_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP10_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP10_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP10_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP10_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP10_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP10_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP10_ADDRESS // Description : Device address #define USB_ADDR_ENDP10_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP10_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP10_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP10_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP10_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP11 // Description : Interrupt endpoint 11. Only valid for HOST mode. #define USB_ADDR_ENDP11_OFFSET _u(0x0000002c) #define USB_ADDR_ENDP11_BITS _u(0x060f007f) #define USB_ADDR_ENDP11_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP11_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP11_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP11_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP11_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP11_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP11_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP11_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP11_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP11_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP11_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP11_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP11_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP11_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP11_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP11_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP11_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP11_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP11_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP11_ADDRESS // Description : Device address #define USB_ADDR_ENDP11_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP11_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP11_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP11_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP11_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP12 // Description : Interrupt endpoint 12. Only valid for HOST mode. #define USB_ADDR_ENDP12_OFFSET _u(0x00000030) #define USB_ADDR_ENDP12_BITS _u(0x060f007f) #define USB_ADDR_ENDP12_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP12_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP12_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP12_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP12_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP12_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP12_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP12_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP12_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP12_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP12_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP12_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP12_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP12_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP12_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP12_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP12_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP12_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP12_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP12_ADDRESS // Description : Device address #define USB_ADDR_ENDP12_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP12_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP12_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP12_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP12_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP13 // Description : Interrupt endpoint 13. Only valid for HOST mode. #define USB_ADDR_ENDP13_OFFSET _u(0x00000034) #define USB_ADDR_ENDP13_BITS _u(0x060f007f) #define USB_ADDR_ENDP13_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP13_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP13_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP13_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP13_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP13_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP13_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP13_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP13_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP13_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP13_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP13_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP13_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP13_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP13_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP13_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP13_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP13_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP13_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP13_ADDRESS // Description : Device address #define USB_ADDR_ENDP13_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP13_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP13_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP13_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP13_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP14 // Description : Interrupt endpoint 14. Only valid for HOST mode. #define USB_ADDR_ENDP14_OFFSET _u(0x00000038) #define USB_ADDR_ENDP14_BITS _u(0x060f007f) #define USB_ADDR_ENDP14_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP14_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP14_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP14_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP14_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP14_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP14_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP14_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP14_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP14_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP14_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP14_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP14_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP14_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP14_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP14_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP14_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP14_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP14_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP14_ADDRESS // Description : Device address #define USB_ADDR_ENDP14_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP14_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP14_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP14_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP14_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_ADDR_ENDP15 // Description : Interrupt endpoint 15. Only valid for HOST mode. #define USB_ADDR_ENDP15_OFFSET _u(0x0000003c) #define USB_ADDR_ENDP15_BITS _u(0x060f007f) #define USB_ADDR_ENDP15_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP15_INTEP_PREAMBLE // Description : Interrupt EP requires preamble (is a low speed device on a full // speed hub) #define USB_ADDR_ENDP15_INTEP_PREAMBLE_RESET _u(0x0) #define USB_ADDR_ENDP15_INTEP_PREAMBLE_BITS _u(0x04000000) #define USB_ADDR_ENDP15_INTEP_PREAMBLE_MSB _u(26) #define USB_ADDR_ENDP15_INTEP_PREAMBLE_LSB _u(26) #define USB_ADDR_ENDP15_INTEP_PREAMBLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP15_INTEP_DIR // Description : Direction of the interrupt endpoint. In=0, Out=1 #define USB_ADDR_ENDP15_INTEP_DIR_RESET _u(0x0) #define USB_ADDR_ENDP15_INTEP_DIR_BITS _u(0x02000000) #define USB_ADDR_ENDP15_INTEP_DIR_MSB _u(25) #define USB_ADDR_ENDP15_INTEP_DIR_LSB _u(25) #define USB_ADDR_ENDP15_INTEP_DIR_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP15_ENDPOINT // Description : Endpoint number of the interrupt endpoint #define USB_ADDR_ENDP15_ENDPOINT_RESET _u(0x0) #define USB_ADDR_ENDP15_ENDPOINT_BITS _u(0x000f0000) #define USB_ADDR_ENDP15_ENDPOINT_MSB _u(19) #define USB_ADDR_ENDP15_ENDPOINT_LSB _u(16) #define USB_ADDR_ENDP15_ENDPOINT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_ADDR_ENDP15_ADDRESS // Description : Device address #define USB_ADDR_ENDP15_ADDRESS_RESET _u(0x00) #define USB_ADDR_ENDP15_ADDRESS_BITS _u(0x0000007f) #define USB_ADDR_ENDP15_ADDRESS_MSB _u(6) #define USB_ADDR_ENDP15_ADDRESS_LSB _u(0) #define USB_ADDR_ENDP15_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_MAIN_CTRL // Description : Main control register #define USB_MAIN_CTRL_OFFSET _u(0x00000040) #define USB_MAIN_CTRL_BITS _u(0x80000003) #define USB_MAIN_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_MAIN_CTRL_SIM_TIMING // Description : Reduced timings for simulation #define USB_MAIN_CTRL_SIM_TIMING_RESET _u(0x0) #define USB_MAIN_CTRL_SIM_TIMING_BITS _u(0x80000000) #define USB_MAIN_CTRL_SIM_TIMING_MSB _u(31) #define USB_MAIN_CTRL_SIM_TIMING_LSB _u(31) #define USB_MAIN_CTRL_SIM_TIMING_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_MAIN_CTRL_HOST_NDEVICE // Description : Device mode = 0, Host mode = 1 #define USB_MAIN_CTRL_HOST_NDEVICE_RESET _u(0x0) #define USB_MAIN_CTRL_HOST_NDEVICE_BITS _u(0x00000002) #define USB_MAIN_CTRL_HOST_NDEVICE_MSB _u(1) #define USB_MAIN_CTRL_HOST_NDEVICE_LSB _u(1) #define USB_MAIN_CTRL_HOST_NDEVICE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_MAIN_CTRL_CONTROLLER_EN // Description : Enable controller #define USB_MAIN_CTRL_CONTROLLER_EN_RESET _u(0x0) #define USB_MAIN_CTRL_CONTROLLER_EN_BITS _u(0x00000001) #define USB_MAIN_CTRL_CONTROLLER_EN_MSB _u(0) #define USB_MAIN_CTRL_CONTROLLER_EN_LSB _u(0) #define USB_MAIN_CTRL_CONTROLLER_EN_ACCESS "RW" // ============================================================================= // Register : USB_SOF_WR // Description : Set the SOF (Start of Frame) frame number in the host // controller. The SOF packet is sent every 1ms and the host will // increment the frame number by 1 each time. #define USB_SOF_WR_OFFSET _u(0x00000044) #define USB_SOF_WR_BITS _u(0x000007ff) #define USB_SOF_WR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_SOF_WR_COUNT // Description : None #define USB_SOF_WR_COUNT_RESET _u(0x000) #define USB_SOF_WR_COUNT_BITS _u(0x000007ff) #define USB_SOF_WR_COUNT_MSB _u(10) #define USB_SOF_WR_COUNT_LSB _u(0) #define USB_SOF_WR_COUNT_ACCESS "WF" // ============================================================================= // Register : USB_SOF_RD // Description : Read the last SOF (Start of Frame) frame number seen. In device // mode the last SOF received from the host. In host mode the last // SOF sent by the host. #define USB_SOF_RD_OFFSET _u(0x00000048) #define USB_SOF_RD_BITS _u(0x000007ff) #define USB_SOF_RD_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_SOF_RD_COUNT // Description : None #define USB_SOF_RD_COUNT_RESET _u(0x000) #define USB_SOF_RD_COUNT_BITS _u(0x000007ff) #define USB_SOF_RD_COUNT_MSB _u(10) #define USB_SOF_RD_COUNT_LSB _u(0) #define USB_SOF_RD_COUNT_ACCESS "RO" // ============================================================================= // Register : USB_SIE_CTRL // Description : SIE control register #define USB_SIE_CTRL_OFFSET _u(0x0000004c) #define USB_SIE_CTRL_BITS _u(0xff07bf5f) #define USB_SIE_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_EP0_INT_STALL // Description : Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a STALL #define USB_SIE_CTRL_EP0_INT_STALL_RESET _u(0x0) #define USB_SIE_CTRL_EP0_INT_STALL_BITS _u(0x80000000) #define USB_SIE_CTRL_EP0_INT_STALL_MSB _u(31) #define USB_SIE_CTRL_EP0_INT_STALL_LSB _u(31) #define USB_SIE_CTRL_EP0_INT_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_EP0_DOUBLE_BUF // Description : Device: EP0 single buffered = 0, double buffered = 1 #define USB_SIE_CTRL_EP0_DOUBLE_BUF_RESET _u(0x0) #define USB_SIE_CTRL_EP0_DOUBLE_BUF_BITS _u(0x40000000) #define USB_SIE_CTRL_EP0_DOUBLE_BUF_MSB _u(30) #define USB_SIE_CTRL_EP0_DOUBLE_BUF_LSB _u(30) #define USB_SIE_CTRL_EP0_DOUBLE_BUF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_EP0_INT_1BUF // Description : Device: Set bit in BUFF_STATUS for every buffer completed on // EP0 #define USB_SIE_CTRL_EP0_INT_1BUF_RESET _u(0x0) #define USB_SIE_CTRL_EP0_INT_1BUF_BITS _u(0x20000000) #define USB_SIE_CTRL_EP0_INT_1BUF_MSB _u(29) #define USB_SIE_CTRL_EP0_INT_1BUF_LSB _u(29) #define USB_SIE_CTRL_EP0_INT_1BUF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_EP0_INT_2BUF // Description : Device: Set bit in BUFF_STATUS for every 2 buffers completed on // EP0 #define USB_SIE_CTRL_EP0_INT_2BUF_RESET _u(0x0) #define USB_SIE_CTRL_EP0_INT_2BUF_BITS _u(0x10000000) #define USB_SIE_CTRL_EP0_INT_2BUF_MSB _u(28) #define USB_SIE_CTRL_EP0_INT_2BUF_LSB _u(28) #define USB_SIE_CTRL_EP0_INT_2BUF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_EP0_INT_NAK // Description : Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a NAK #define USB_SIE_CTRL_EP0_INT_NAK_RESET _u(0x0) #define USB_SIE_CTRL_EP0_INT_NAK_BITS _u(0x08000000) #define USB_SIE_CTRL_EP0_INT_NAK_MSB _u(27) #define USB_SIE_CTRL_EP0_INT_NAK_LSB _u(27) #define USB_SIE_CTRL_EP0_INT_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_DIRECT_EN // Description : Direct bus drive enable #define USB_SIE_CTRL_DIRECT_EN_RESET _u(0x0) #define USB_SIE_CTRL_DIRECT_EN_BITS _u(0x04000000) #define USB_SIE_CTRL_DIRECT_EN_MSB _u(26) #define USB_SIE_CTRL_DIRECT_EN_LSB _u(26) #define USB_SIE_CTRL_DIRECT_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_DIRECT_DP // Description : Direct control of DP #define USB_SIE_CTRL_DIRECT_DP_RESET _u(0x0) #define USB_SIE_CTRL_DIRECT_DP_BITS _u(0x02000000) #define USB_SIE_CTRL_DIRECT_DP_MSB _u(25) #define USB_SIE_CTRL_DIRECT_DP_LSB _u(25) #define USB_SIE_CTRL_DIRECT_DP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_DIRECT_DM // Description : Direct control of DM #define USB_SIE_CTRL_DIRECT_DM_RESET _u(0x0) #define USB_SIE_CTRL_DIRECT_DM_BITS _u(0x01000000) #define USB_SIE_CTRL_DIRECT_DM_MSB _u(24) #define USB_SIE_CTRL_DIRECT_DM_LSB _u(24) #define USB_SIE_CTRL_DIRECT_DM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_TRANSCEIVER_PD // Description : Power down bus transceiver #define USB_SIE_CTRL_TRANSCEIVER_PD_RESET _u(0x0) #define USB_SIE_CTRL_TRANSCEIVER_PD_BITS _u(0x00040000) #define USB_SIE_CTRL_TRANSCEIVER_PD_MSB _u(18) #define USB_SIE_CTRL_TRANSCEIVER_PD_LSB _u(18) #define USB_SIE_CTRL_TRANSCEIVER_PD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_RPU_OPT // Description : Device: Pull-up strength (0=1K2, 1=2k3) #define USB_SIE_CTRL_RPU_OPT_RESET _u(0x0) #define USB_SIE_CTRL_RPU_OPT_BITS _u(0x00020000) #define USB_SIE_CTRL_RPU_OPT_MSB _u(17) #define USB_SIE_CTRL_RPU_OPT_LSB _u(17) #define USB_SIE_CTRL_RPU_OPT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_PULLUP_EN // Description : Device: Enable pull up resistor #define USB_SIE_CTRL_PULLUP_EN_RESET _u(0x0) #define USB_SIE_CTRL_PULLUP_EN_BITS _u(0x00010000) #define USB_SIE_CTRL_PULLUP_EN_MSB _u(16) #define USB_SIE_CTRL_PULLUP_EN_LSB _u(16) #define USB_SIE_CTRL_PULLUP_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_PULLDOWN_EN // Description : Host: Enable pull down resistors #define USB_SIE_CTRL_PULLDOWN_EN_RESET _u(0x0) #define USB_SIE_CTRL_PULLDOWN_EN_BITS _u(0x00008000) #define USB_SIE_CTRL_PULLDOWN_EN_MSB _u(15) #define USB_SIE_CTRL_PULLDOWN_EN_LSB _u(15) #define USB_SIE_CTRL_PULLDOWN_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_RESET_BUS // Description : Host: Reset bus #define USB_SIE_CTRL_RESET_BUS_RESET _u(0x0) #define USB_SIE_CTRL_RESET_BUS_BITS _u(0x00002000) #define USB_SIE_CTRL_RESET_BUS_MSB _u(13) #define USB_SIE_CTRL_RESET_BUS_LSB _u(13) #define USB_SIE_CTRL_RESET_BUS_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_RESUME // Description : Device: Remote wakeup. Device can initiate its own resume after // suspend. #define USB_SIE_CTRL_RESUME_RESET _u(0x0) #define USB_SIE_CTRL_RESUME_BITS _u(0x00001000) #define USB_SIE_CTRL_RESUME_MSB _u(12) #define USB_SIE_CTRL_RESUME_LSB _u(12) #define USB_SIE_CTRL_RESUME_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_VBUS_EN // Description : Host: Enable VBUS #define USB_SIE_CTRL_VBUS_EN_RESET _u(0x0) #define USB_SIE_CTRL_VBUS_EN_BITS _u(0x00000800) #define USB_SIE_CTRL_VBUS_EN_MSB _u(11) #define USB_SIE_CTRL_VBUS_EN_LSB _u(11) #define USB_SIE_CTRL_VBUS_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_KEEP_ALIVE_EN // Description : Host: Enable keep alive packet (for low speed bus) #define USB_SIE_CTRL_KEEP_ALIVE_EN_RESET _u(0x0) #define USB_SIE_CTRL_KEEP_ALIVE_EN_BITS _u(0x00000400) #define USB_SIE_CTRL_KEEP_ALIVE_EN_MSB _u(10) #define USB_SIE_CTRL_KEEP_ALIVE_EN_LSB _u(10) #define USB_SIE_CTRL_KEEP_ALIVE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_SOF_EN // Description : Host: Enable SOF generation (for full speed bus) #define USB_SIE_CTRL_SOF_EN_RESET _u(0x0) #define USB_SIE_CTRL_SOF_EN_BITS _u(0x00000200) #define USB_SIE_CTRL_SOF_EN_MSB _u(9) #define USB_SIE_CTRL_SOF_EN_LSB _u(9) #define USB_SIE_CTRL_SOF_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_SOF_SYNC // Description : Host: Delay packet(s) until after SOF #define USB_SIE_CTRL_SOF_SYNC_RESET _u(0x0) #define USB_SIE_CTRL_SOF_SYNC_BITS _u(0x00000100) #define USB_SIE_CTRL_SOF_SYNC_MSB _u(8) #define USB_SIE_CTRL_SOF_SYNC_LSB _u(8) #define USB_SIE_CTRL_SOF_SYNC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_PREAMBLE_EN // Description : Host: Preable enable for LS device on FS hub #define USB_SIE_CTRL_PREAMBLE_EN_RESET _u(0x0) #define USB_SIE_CTRL_PREAMBLE_EN_BITS _u(0x00000040) #define USB_SIE_CTRL_PREAMBLE_EN_MSB _u(6) #define USB_SIE_CTRL_PREAMBLE_EN_LSB _u(6) #define USB_SIE_CTRL_PREAMBLE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_STOP_TRANS // Description : Host: Stop transaction #define USB_SIE_CTRL_STOP_TRANS_RESET _u(0x0) #define USB_SIE_CTRL_STOP_TRANS_BITS _u(0x00000010) #define USB_SIE_CTRL_STOP_TRANS_MSB _u(4) #define USB_SIE_CTRL_STOP_TRANS_LSB _u(4) #define USB_SIE_CTRL_STOP_TRANS_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_RECEIVE_DATA // Description : Host: Receive transaction (IN to host) #define USB_SIE_CTRL_RECEIVE_DATA_RESET _u(0x0) #define USB_SIE_CTRL_RECEIVE_DATA_BITS _u(0x00000008) #define USB_SIE_CTRL_RECEIVE_DATA_MSB _u(3) #define USB_SIE_CTRL_RECEIVE_DATA_LSB _u(3) #define USB_SIE_CTRL_RECEIVE_DATA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_SEND_DATA // Description : Host: Send transaction (OUT from host) #define USB_SIE_CTRL_SEND_DATA_RESET _u(0x0) #define USB_SIE_CTRL_SEND_DATA_BITS _u(0x00000004) #define USB_SIE_CTRL_SEND_DATA_MSB _u(2) #define USB_SIE_CTRL_SEND_DATA_LSB _u(2) #define USB_SIE_CTRL_SEND_DATA_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_SEND_SETUP // Description : Host: Send Setup packet #define USB_SIE_CTRL_SEND_SETUP_RESET _u(0x0) #define USB_SIE_CTRL_SEND_SETUP_BITS _u(0x00000002) #define USB_SIE_CTRL_SEND_SETUP_MSB _u(1) #define USB_SIE_CTRL_SEND_SETUP_LSB _u(1) #define USB_SIE_CTRL_SEND_SETUP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_SIE_CTRL_START_TRANS // Description : Host: Start transaction #define USB_SIE_CTRL_START_TRANS_RESET _u(0x0) #define USB_SIE_CTRL_START_TRANS_BITS _u(0x00000001) #define USB_SIE_CTRL_START_TRANS_MSB _u(0) #define USB_SIE_CTRL_START_TRANS_LSB _u(0) #define USB_SIE_CTRL_START_TRANS_ACCESS "SC" // ============================================================================= // Register : USB_SIE_STATUS // Description : SIE status register #define USB_SIE_STATUS_OFFSET _u(0x00000050) #define USB_SIE_STATUS_BITS _u(0xff0f0f1d) #define USB_SIE_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_DATA_SEQ_ERROR // Description : Data Sequence Error. // // The device can raise a sequence error in the following // conditions: // // * A SETUP packet is received followed by a DATA1 packet (data // phase should always be DATA0) * An OUT packet is received from // the host but doesn't match the data pid in the buffer control // register read from DPSRAM // // The host can raise a data sequence error in the following // conditions: // // * An IN packet from the device has the wrong data PID #define USB_SIE_STATUS_DATA_SEQ_ERROR_RESET _u(0x0) #define USB_SIE_STATUS_DATA_SEQ_ERROR_BITS _u(0x80000000) #define USB_SIE_STATUS_DATA_SEQ_ERROR_MSB _u(31) #define USB_SIE_STATUS_DATA_SEQ_ERROR_LSB _u(31) #define USB_SIE_STATUS_DATA_SEQ_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_ACK_REC // Description : ACK received. Raised by both host and device. #define USB_SIE_STATUS_ACK_REC_RESET _u(0x0) #define USB_SIE_STATUS_ACK_REC_BITS _u(0x40000000) #define USB_SIE_STATUS_ACK_REC_MSB _u(30) #define USB_SIE_STATUS_ACK_REC_LSB _u(30) #define USB_SIE_STATUS_ACK_REC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_STALL_REC // Description : Host: STALL received #define USB_SIE_STATUS_STALL_REC_RESET _u(0x0) #define USB_SIE_STATUS_STALL_REC_BITS _u(0x20000000) #define USB_SIE_STATUS_STALL_REC_MSB _u(29) #define USB_SIE_STATUS_STALL_REC_LSB _u(29) #define USB_SIE_STATUS_STALL_REC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_NAK_REC // Description : Host: NAK received #define USB_SIE_STATUS_NAK_REC_RESET _u(0x0) #define USB_SIE_STATUS_NAK_REC_BITS _u(0x10000000) #define USB_SIE_STATUS_NAK_REC_MSB _u(28) #define USB_SIE_STATUS_NAK_REC_LSB _u(28) #define USB_SIE_STATUS_NAK_REC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_RX_TIMEOUT // Description : RX timeout is raised by both the host and device if an ACK is // not received in the maximum time specified by the USB spec. #define USB_SIE_STATUS_RX_TIMEOUT_RESET _u(0x0) #define USB_SIE_STATUS_RX_TIMEOUT_BITS _u(0x08000000) #define USB_SIE_STATUS_RX_TIMEOUT_MSB _u(27) #define USB_SIE_STATUS_RX_TIMEOUT_LSB _u(27) #define USB_SIE_STATUS_RX_TIMEOUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_RX_OVERFLOW // Description : RX overflow is raised by the Serial RX engine if the incoming // data is too fast. #define USB_SIE_STATUS_RX_OVERFLOW_RESET _u(0x0) #define USB_SIE_STATUS_RX_OVERFLOW_BITS _u(0x04000000) #define USB_SIE_STATUS_RX_OVERFLOW_MSB _u(26) #define USB_SIE_STATUS_RX_OVERFLOW_LSB _u(26) #define USB_SIE_STATUS_RX_OVERFLOW_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_BIT_STUFF_ERROR // Description : Bit Stuff Error. Raised by the Serial RX engine. #define USB_SIE_STATUS_BIT_STUFF_ERROR_RESET _u(0x0) #define USB_SIE_STATUS_BIT_STUFF_ERROR_BITS _u(0x02000000) #define USB_SIE_STATUS_BIT_STUFF_ERROR_MSB _u(25) #define USB_SIE_STATUS_BIT_STUFF_ERROR_LSB _u(25) #define USB_SIE_STATUS_BIT_STUFF_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_CRC_ERROR // Description : CRC Error. Raised by the Serial RX engine. #define USB_SIE_STATUS_CRC_ERROR_RESET _u(0x0) #define USB_SIE_STATUS_CRC_ERROR_BITS _u(0x01000000) #define USB_SIE_STATUS_CRC_ERROR_MSB _u(24) #define USB_SIE_STATUS_CRC_ERROR_LSB _u(24) #define USB_SIE_STATUS_CRC_ERROR_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_BUS_RESET // Description : Device: bus reset received #define USB_SIE_STATUS_BUS_RESET_RESET _u(0x0) #define USB_SIE_STATUS_BUS_RESET_BITS _u(0x00080000) #define USB_SIE_STATUS_BUS_RESET_MSB _u(19) #define USB_SIE_STATUS_BUS_RESET_LSB _u(19) #define USB_SIE_STATUS_BUS_RESET_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_TRANS_COMPLETE // Description : Transaction complete. // // Raised by device if: // // * An IN or OUT packet is sent with the `LAST_BUFF` bit set in // the buffer control register // // Raised by host if: // // * A setup packet is sent when no data in or data out // transaction follows * An IN packet is received and the // `LAST_BUFF` bit is set in the buffer control register * An IN // packet is received with zero length * An OUT packet is sent and // the `LAST_BUFF` bit is set #define USB_SIE_STATUS_TRANS_COMPLETE_RESET _u(0x0) #define USB_SIE_STATUS_TRANS_COMPLETE_BITS _u(0x00040000) #define USB_SIE_STATUS_TRANS_COMPLETE_MSB _u(18) #define USB_SIE_STATUS_TRANS_COMPLETE_LSB _u(18) #define USB_SIE_STATUS_TRANS_COMPLETE_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_SETUP_REC // Description : Device: Setup packet received #define USB_SIE_STATUS_SETUP_REC_RESET _u(0x0) #define USB_SIE_STATUS_SETUP_REC_BITS _u(0x00020000) #define USB_SIE_STATUS_SETUP_REC_MSB _u(17) #define USB_SIE_STATUS_SETUP_REC_LSB _u(17) #define USB_SIE_STATUS_SETUP_REC_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_CONNECTED // Description : Device: connected #define USB_SIE_STATUS_CONNECTED_RESET _u(0x0) #define USB_SIE_STATUS_CONNECTED_BITS _u(0x00010000) #define USB_SIE_STATUS_CONNECTED_MSB _u(16) #define USB_SIE_STATUS_CONNECTED_LSB _u(16) #define USB_SIE_STATUS_CONNECTED_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_RESUME // Description : Host: Device has initiated a remote resume. Device: host has // initiated a resume. #define USB_SIE_STATUS_RESUME_RESET _u(0x0) #define USB_SIE_STATUS_RESUME_BITS _u(0x00000800) #define USB_SIE_STATUS_RESUME_MSB _u(11) #define USB_SIE_STATUS_RESUME_LSB _u(11) #define USB_SIE_STATUS_RESUME_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_VBUS_OVER_CURR // Description : VBUS over current detected #define USB_SIE_STATUS_VBUS_OVER_CURR_RESET _u(0x0) #define USB_SIE_STATUS_VBUS_OVER_CURR_BITS _u(0x00000400) #define USB_SIE_STATUS_VBUS_OVER_CURR_MSB _u(10) #define USB_SIE_STATUS_VBUS_OVER_CURR_LSB _u(10) #define USB_SIE_STATUS_VBUS_OVER_CURR_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_SPEED // Description : Host: device speed. Disconnected = 00, LS = 01, FS = 10 #define USB_SIE_STATUS_SPEED_RESET _u(0x0) #define USB_SIE_STATUS_SPEED_BITS _u(0x00000300) #define USB_SIE_STATUS_SPEED_MSB _u(9) #define USB_SIE_STATUS_SPEED_LSB _u(8) #define USB_SIE_STATUS_SPEED_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_SUSPENDED // Description : Bus in suspended state. Valid for device and host. Host and // device will go into suspend if neither Keep Alive / SOF frames // are enabled. #define USB_SIE_STATUS_SUSPENDED_RESET _u(0x0) #define USB_SIE_STATUS_SUSPENDED_BITS _u(0x00000010) #define USB_SIE_STATUS_SUSPENDED_MSB _u(4) #define USB_SIE_STATUS_SUSPENDED_LSB _u(4) #define USB_SIE_STATUS_SUSPENDED_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_LINE_STATE // Description : USB bus line state #define USB_SIE_STATUS_LINE_STATE_RESET _u(0x0) #define USB_SIE_STATUS_LINE_STATE_BITS _u(0x0000000c) #define USB_SIE_STATUS_LINE_STATE_MSB _u(3) #define USB_SIE_STATUS_LINE_STATE_LSB _u(2) #define USB_SIE_STATUS_LINE_STATE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_SIE_STATUS_VBUS_DETECTED // Description : Device: VBUS Detected #define USB_SIE_STATUS_VBUS_DETECTED_RESET _u(0x0) #define USB_SIE_STATUS_VBUS_DETECTED_BITS _u(0x00000001) #define USB_SIE_STATUS_VBUS_DETECTED_MSB _u(0) #define USB_SIE_STATUS_VBUS_DETECTED_LSB _u(0) #define USB_SIE_STATUS_VBUS_DETECTED_ACCESS "RO" // ============================================================================= // Register : USB_INT_EP_CTRL // Description : interrupt endpoint control register #define USB_INT_EP_CTRL_OFFSET _u(0x00000054) #define USB_INT_EP_CTRL_BITS _u(0x0000fffe) #define USB_INT_EP_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_INT_EP_CTRL_INT_EP_ACTIVE // Description : Host: Enable interrupt endpoint 1 -> 15 #define USB_INT_EP_CTRL_INT_EP_ACTIVE_RESET _u(0x0000) #define USB_INT_EP_CTRL_INT_EP_ACTIVE_BITS _u(0x0000fffe) #define USB_INT_EP_CTRL_INT_EP_ACTIVE_MSB _u(15) #define USB_INT_EP_CTRL_INT_EP_ACTIVE_LSB _u(1) #define USB_INT_EP_CTRL_INT_EP_ACTIVE_ACCESS "RW" // ============================================================================= // Register : USB_BUFF_STATUS // Description : Buffer status register. A bit set here indicates that a buffer // has completed on the endpoint (if the buffer interrupt is // enabled). It is possible for 2 buffers to be completed, so // clearing the buffer status bit may instantly re set it on the // next clock cycle. #define USB_BUFF_STATUS_OFFSET _u(0x00000058) #define USB_BUFF_STATUS_BITS _u(0xffffffff) #define USB_BUFF_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP15_OUT // Description : None #define USB_BUFF_STATUS_EP15_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP15_OUT_BITS _u(0x80000000) #define USB_BUFF_STATUS_EP15_OUT_MSB _u(31) #define USB_BUFF_STATUS_EP15_OUT_LSB _u(31) #define USB_BUFF_STATUS_EP15_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP15_IN // Description : None #define USB_BUFF_STATUS_EP15_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP15_IN_BITS _u(0x40000000) #define USB_BUFF_STATUS_EP15_IN_MSB _u(30) #define USB_BUFF_STATUS_EP15_IN_LSB _u(30) #define USB_BUFF_STATUS_EP15_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP14_OUT // Description : None #define USB_BUFF_STATUS_EP14_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP14_OUT_BITS _u(0x20000000) #define USB_BUFF_STATUS_EP14_OUT_MSB _u(29) #define USB_BUFF_STATUS_EP14_OUT_LSB _u(29) #define USB_BUFF_STATUS_EP14_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP14_IN // Description : None #define USB_BUFF_STATUS_EP14_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP14_IN_BITS _u(0x10000000) #define USB_BUFF_STATUS_EP14_IN_MSB _u(28) #define USB_BUFF_STATUS_EP14_IN_LSB _u(28) #define USB_BUFF_STATUS_EP14_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP13_OUT // Description : None #define USB_BUFF_STATUS_EP13_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP13_OUT_BITS _u(0x08000000) #define USB_BUFF_STATUS_EP13_OUT_MSB _u(27) #define USB_BUFF_STATUS_EP13_OUT_LSB _u(27) #define USB_BUFF_STATUS_EP13_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP13_IN // Description : None #define USB_BUFF_STATUS_EP13_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP13_IN_BITS _u(0x04000000) #define USB_BUFF_STATUS_EP13_IN_MSB _u(26) #define USB_BUFF_STATUS_EP13_IN_LSB _u(26) #define USB_BUFF_STATUS_EP13_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP12_OUT // Description : None #define USB_BUFF_STATUS_EP12_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP12_OUT_BITS _u(0x02000000) #define USB_BUFF_STATUS_EP12_OUT_MSB _u(25) #define USB_BUFF_STATUS_EP12_OUT_LSB _u(25) #define USB_BUFF_STATUS_EP12_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP12_IN // Description : None #define USB_BUFF_STATUS_EP12_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP12_IN_BITS _u(0x01000000) #define USB_BUFF_STATUS_EP12_IN_MSB _u(24) #define USB_BUFF_STATUS_EP12_IN_LSB _u(24) #define USB_BUFF_STATUS_EP12_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP11_OUT // Description : None #define USB_BUFF_STATUS_EP11_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP11_OUT_BITS _u(0x00800000) #define USB_BUFF_STATUS_EP11_OUT_MSB _u(23) #define USB_BUFF_STATUS_EP11_OUT_LSB _u(23) #define USB_BUFF_STATUS_EP11_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP11_IN // Description : None #define USB_BUFF_STATUS_EP11_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP11_IN_BITS _u(0x00400000) #define USB_BUFF_STATUS_EP11_IN_MSB _u(22) #define USB_BUFF_STATUS_EP11_IN_LSB _u(22) #define USB_BUFF_STATUS_EP11_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP10_OUT // Description : None #define USB_BUFF_STATUS_EP10_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP10_OUT_BITS _u(0x00200000) #define USB_BUFF_STATUS_EP10_OUT_MSB _u(21) #define USB_BUFF_STATUS_EP10_OUT_LSB _u(21) #define USB_BUFF_STATUS_EP10_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP10_IN // Description : None #define USB_BUFF_STATUS_EP10_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP10_IN_BITS _u(0x00100000) #define USB_BUFF_STATUS_EP10_IN_MSB _u(20) #define USB_BUFF_STATUS_EP10_IN_LSB _u(20) #define USB_BUFF_STATUS_EP10_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP9_OUT // Description : None #define USB_BUFF_STATUS_EP9_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP9_OUT_BITS _u(0x00080000) #define USB_BUFF_STATUS_EP9_OUT_MSB _u(19) #define USB_BUFF_STATUS_EP9_OUT_LSB _u(19) #define USB_BUFF_STATUS_EP9_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP9_IN // Description : None #define USB_BUFF_STATUS_EP9_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP9_IN_BITS _u(0x00040000) #define USB_BUFF_STATUS_EP9_IN_MSB _u(18) #define USB_BUFF_STATUS_EP9_IN_LSB _u(18) #define USB_BUFF_STATUS_EP9_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP8_OUT // Description : None #define USB_BUFF_STATUS_EP8_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP8_OUT_BITS _u(0x00020000) #define USB_BUFF_STATUS_EP8_OUT_MSB _u(17) #define USB_BUFF_STATUS_EP8_OUT_LSB _u(17) #define USB_BUFF_STATUS_EP8_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP8_IN // Description : None #define USB_BUFF_STATUS_EP8_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP8_IN_BITS _u(0x00010000) #define USB_BUFF_STATUS_EP8_IN_MSB _u(16) #define USB_BUFF_STATUS_EP8_IN_LSB _u(16) #define USB_BUFF_STATUS_EP8_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP7_OUT // Description : None #define USB_BUFF_STATUS_EP7_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP7_OUT_BITS _u(0x00008000) #define USB_BUFF_STATUS_EP7_OUT_MSB _u(15) #define USB_BUFF_STATUS_EP7_OUT_LSB _u(15) #define USB_BUFF_STATUS_EP7_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP7_IN // Description : None #define USB_BUFF_STATUS_EP7_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP7_IN_BITS _u(0x00004000) #define USB_BUFF_STATUS_EP7_IN_MSB _u(14) #define USB_BUFF_STATUS_EP7_IN_LSB _u(14) #define USB_BUFF_STATUS_EP7_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP6_OUT // Description : None #define USB_BUFF_STATUS_EP6_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP6_OUT_BITS _u(0x00002000) #define USB_BUFF_STATUS_EP6_OUT_MSB _u(13) #define USB_BUFF_STATUS_EP6_OUT_LSB _u(13) #define USB_BUFF_STATUS_EP6_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP6_IN // Description : None #define USB_BUFF_STATUS_EP6_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP6_IN_BITS _u(0x00001000) #define USB_BUFF_STATUS_EP6_IN_MSB _u(12) #define USB_BUFF_STATUS_EP6_IN_LSB _u(12) #define USB_BUFF_STATUS_EP6_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP5_OUT // Description : None #define USB_BUFF_STATUS_EP5_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP5_OUT_BITS _u(0x00000800) #define USB_BUFF_STATUS_EP5_OUT_MSB _u(11) #define USB_BUFF_STATUS_EP5_OUT_LSB _u(11) #define USB_BUFF_STATUS_EP5_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP5_IN // Description : None #define USB_BUFF_STATUS_EP5_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP5_IN_BITS _u(0x00000400) #define USB_BUFF_STATUS_EP5_IN_MSB _u(10) #define USB_BUFF_STATUS_EP5_IN_LSB _u(10) #define USB_BUFF_STATUS_EP5_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP4_OUT // Description : None #define USB_BUFF_STATUS_EP4_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP4_OUT_BITS _u(0x00000200) #define USB_BUFF_STATUS_EP4_OUT_MSB _u(9) #define USB_BUFF_STATUS_EP4_OUT_LSB _u(9) #define USB_BUFF_STATUS_EP4_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP4_IN // Description : None #define USB_BUFF_STATUS_EP4_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP4_IN_BITS _u(0x00000100) #define USB_BUFF_STATUS_EP4_IN_MSB _u(8) #define USB_BUFF_STATUS_EP4_IN_LSB _u(8) #define USB_BUFF_STATUS_EP4_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP3_OUT // Description : None #define USB_BUFF_STATUS_EP3_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP3_OUT_BITS _u(0x00000080) #define USB_BUFF_STATUS_EP3_OUT_MSB _u(7) #define USB_BUFF_STATUS_EP3_OUT_LSB _u(7) #define USB_BUFF_STATUS_EP3_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP3_IN // Description : None #define USB_BUFF_STATUS_EP3_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP3_IN_BITS _u(0x00000040) #define USB_BUFF_STATUS_EP3_IN_MSB _u(6) #define USB_BUFF_STATUS_EP3_IN_LSB _u(6) #define USB_BUFF_STATUS_EP3_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP2_OUT // Description : None #define USB_BUFF_STATUS_EP2_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP2_OUT_BITS _u(0x00000020) #define USB_BUFF_STATUS_EP2_OUT_MSB _u(5) #define USB_BUFF_STATUS_EP2_OUT_LSB _u(5) #define USB_BUFF_STATUS_EP2_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP2_IN // Description : None #define USB_BUFF_STATUS_EP2_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP2_IN_BITS _u(0x00000010) #define USB_BUFF_STATUS_EP2_IN_MSB _u(4) #define USB_BUFF_STATUS_EP2_IN_LSB _u(4) #define USB_BUFF_STATUS_EP2_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP1_OUT // Description : None #define USB_BUFF_STATUS_EP1_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP1_OUT_BITS _u(0x00000008) #define USB_BUFF_STATUS_EP1_OUT_MSB _u(3) #define USB_BUFF_STATUS_EP1_OUT_LSB _u(3) #define USB_BUFF_STATUS_EP1_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP1_IN // Description : None #define USB_BUFF_STATUS_EP1_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP1_IN_BITS _u(0x00000004) #define USB_BUFF_STATUS_EP1_IN_MSB _u(2) #define USB_BUFF_STATUS_EP1_IN_LSB _u(2) #define USB_BUFF_STATUS_EP1_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP0_OUT // Description : None #define USB_BUFF_STATUS_EP0_OUT_RESET _u(0x0) #define USB_BUFF_STATUS_EP0_OUT_BITS _u(0x00000002) #define USB_BUFF_STATUS_EP0_OUT_MSB _u(1) #define USB_BUFF_STATUS_EP0_OUT_LSB _u(1) #define USB_BUFF_STATUS_EP0_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_BUFF_STATUS_EP0_IN // Description : None #define USB_BUFF_STATUS_EP0_IN_RESET _u(0x0) #define USB_BUFF_STATUS_EP0_IN_BITS _u(0x00000001) #define USB_BUFF_STATUS_EP0_IN_MSB _u(0) #define USB_BUFF_STATUS_EP0_IN_LSB _u(0) #define USB_BUFF_STATUS_EP0_IN_ACCESS "WC" // ============================================================================= // Register : USB_BUFF_CPU_SHOULD_HANDLE // Description : Which of the double buffers should be handled. Only valid if // using an interrupt per buffer (i.e. not per 2 buffers). Not // valid for host interrupt endpoint polling because they are only // single buffered. #define USB_BUFF_CPU_SHOULD_HANDLE_OFFSET _u(0x0000005c) #define USB_BUFF_CPU_SHOULD_HANDLE_BITS _u(0xffffffff) #define USB_BUFF_CPU_SHOULD_HANDLE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP15_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP15_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP15_OUT_BITS _u(0x80000000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP15_OUT_MSB _u(31) #define USB_BUFF_CPU_SHOULD_HANDLE_EP15_OUT_LSB _u(31) #define USB_BUFF_CPU_SHOULD_HANDLE_EP15_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP15_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP15_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP15_IN_BITS _u(0x40000000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP15_IN_MSB _u(30) #define USB_BUFF_CPU_SHOULD_HANDLE_EP15_IN_LSB _u(30) #define USB_BUFF_CPU_SHOULD_HANDLE_EP15_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP14_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP14_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP14_OUT_BITS _u(0x20000000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP14_OUT_MSB _u(29) #define USB_BUFF_CPU_SHOULD_HANDLE_EP14_OUT_LSB _u(29) #define USB_BUFF_CPU_SHOULD_HANDLE_EP14_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP14_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP14_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP14_IN_BITS _u(0x10000000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP14_IN_MSB _u(28) #define USB_BUFF_CPU_SHOULD_HANDLE_EP14_IN_LSB _u(28) #define USB_BUFF_CPU_SHOULD_HANDLE_EP14_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP13_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP13_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP13_OUT_BITS _u(0x08000000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP13_OUT_MSB _u(27) #define USB_BUFF_CPU_SHOULD_HANDLE_EP13_OUT_LSB _u(27) #define USB_BUFF_CPU_SHOULD_HANDLE_EP13_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP13_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP13_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP13_IN_BITS _u(0x04000000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP13_IN_MSB _u(26) #define USB_BUFF_CPU_SHOULD_HANDLE_EP13_IN_LSB _u(26) #define USB_BUFF_CPU_SHOULD_HANDLE_EP13_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP12_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP12_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP12_OUT_BITS _u(0x02000000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP12_OUT_MSB _u(25) #define USB_BUFF_CPU_SHOULD_HANDLE_EP12_OUT_LSB _u(25) #define USB_BUFF_CPU_SHOULD_HANDLE_EP12_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP12_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP12_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP12_IN_BITS _u(0x01000000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP12_IN_MSB _u(24) #define USB_BUFF_CPU_SHOULD_HANDLE_EP12_IN_LSB _u(24) #define USB_BUFF_CPU_SHOULD_HANDLE_EP12_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP11_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP11_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP11_OUT_BITS _u(0x00800000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP11_OUT_MSB _u(23) #define USB_BUFF_CPU_SHOULD_HANDLE_EP11_OUT_LSB _u(23) #define USB_BUFF_CPU_SHOULD_HANDLE_EP11_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP11_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP11_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP11_IN_BITS _u(0x00400000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP11_IN_MSB _u(22) #define USB_BUFF_CPU_SHOULD_HANDLE_EP11_IN_LSB _u(22) #define USB_BUFF_CPU_SHOULD_HANDLE_EP11_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP10_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP10_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP10_OUT_BITS _u(0x00200000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP10_OUT_MSB _u(21) #define USB_BUFF_CPU_SHOULD_HANDLE_EP10_OUT_LSB _u(21) #define USB_BUFF_CPU_SHOULD_HANDLE_EP10_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP10_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP10_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP10_IN_BITS _u(0x00100000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP10_IN_MSB _u(20) #define USB_BUFF_CPU_SHOULD_HANDLE_EP10_IN_LSB _u(20) #define USB_BUFF_CPU_SHOULD_HANDLE_EP10_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP9_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP9_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP9_OUT_BITS _u(0x00080000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP9_OUT_MSB _u(19) #define USB_BUFF_CPU_SHOULD_HANDLE_EP9_OUT_LSB _u(19) #define USB_BUFF_CPU_SHOULD_HANDLE_EP9_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP9_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP9_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP9_IN_BITS _u(0x00040000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP9_IN_MSB _u(18) #define USB_BUFF_CPU_SHOULD_HANDLE_EP9_IN_LSB _u(18) #define USB_BUFF_CPU_SHOULD_HANDLE_EP9_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP8_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP8_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP8_OUT_BITS _u(0x00020000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP8_OUT_MSB _u(17) #define USB_BUFF_CPU_SHOULD_HANDLE_EP8_OUT_LSB _u(17) #define USB_BUFF_CPU_SHOULD_HANDLE_EP8_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP8_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP8_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP8_IN_BITS _u(0x00010000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP8_IN_MSB _u(16) #define USB_BUFF_CPU_SHOULD_HANDLE_EP8_IN_LSB _u(16) #define USB_BUFF_CPU_SHOULD_HANDLE_EP8_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP7_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP7_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP7_OUT_BITS _u(0x00008000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP7_OUT_MSB _u(15) #define USB_BUFF_CPU_SHOULD_HANDLE_EP7_OUT_LSB _u(15) #define USB_BUFF_CPU_SHOULD_HANDLE_EP7_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP7_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP7_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP7_IN_BITS _u(0x00004000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP7_IN_MSB _u(14) #define USB_BUFF_CPU_SHOULD_HANDLE_EP7_IN_LSB _u(14) #define USB_BUFF_CPU_SHOULD_HANDLE_EP7_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP6_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP6_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP6_OUT_BITS _u(0x00002000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP6_OUT_MSB _u(13) #define USB_BUFF_CPU_SHOULD_HANDLE_EP6_OUT_LSB _u(13) #define USB_BUFF_CPU_SHOULD_HANDLE_EP6_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP6_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP6_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP6_IN_BITS _u(0x00001000) #define USB_BUFF_CPU_SHOULD_HANDLE_EP6_IN_MSB _u(12) #define USB_BUFF_CPU_SHOULD_HANDLE_EP6_IN_LSB _u(12) #define USB_BUFF_CPU_SHOULD_HANDLE_EP6_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP5_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP5_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP5_OUT_BITS _u(0x00000800) #define USB_BUFF_CPU_SHOULD_HANDLE_EP5_OUT_MSB _u(11) #define USB_BUFF_CPU_SHOULD_HANDLE_EP5_OUT_LSB _u(11) #define USB_BUFF_CPU_SHOULD_HANDLE_EP5_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP5_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP5_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP5_IN_BITS _u(0x00000400) #define USB_BUFF_CPU_SHOULD_HANDLE_EP5_IN_MSB _u(10) #define USB_BUFF_CPU_SHOULD_HANDLE_EP5_IN_LSB _u(10) #define USB_BUFF_CPU_SHOULD_HANDLE_EP5_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP4_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP4_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP4_OUT_BITS _u(0x00000200) #define USB_BUFF_CPU_SHOULD_HANDLE_EP4_OUT_MSB _u(9) #define USB_BUFF_CPU_SHOULD_HANDLE_EP4_OUT_LSB _u(9) #define USB_BUFF_CPU_SHOULD_HANDLE_EP4_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP4_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP4_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP4_IN_BITS _u(0x00000100) #define USB_BUFF_CPU_SHOULD_HANDLE_EP4_IN_MSB _u(8) #define USB_BUFF_CPU_SHOULD_HANDLE_EP4_IN_LSB _u(8) #define USB_BUFF_CPU_SHOULD_HANDLE_EP4_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP3_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP3_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP3_OUT_BITS _u(0x00000080) #define USB_BUFF_CPU_SHOULD_HANDLE_EP3_OUT_MSB _u(7) #define USB_BUFF_CPU_SHOULD_HANDLE_EP3_OUT_LSB _u(7) #define USB_BUFF_CPU_SHOULD_HANDLE_EP3_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP3_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP3_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP3_IN_BITS _u(0x00000040) #define USB_BUFF_CPU_SHOULD_HANDLE_EP3_IN_MSB _u(6) #define USB_BUFF_CPU_SHOULD_HANDLE_EP3_IN_LSB _u(6) #define USB_BUFF_CPU_SHOULD_HANDLE_EP3_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP2_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP2_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP2_OUT_BITS _u(0x00000020) #define USB_BUFF_CPU_SHOULD_HANDLE_EP2_OUT_MSB _u(5) #define USB_BUFF_CPU_SHOULD_HANDLE_EP2_OUT_LSB _u(5) #define USB_BUFF_CPU_SHOULD_HANDLE_EP2_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP2_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP2_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP2_IN_BITS _u(0x00000010) #define USB_BUFF_CPU_SHOULD_HANDLE_EP2_IN_MSB _u(4) #define USB_BUFF_CPU_SHOULD_HANDLE_EP2_IN_LSB _u(4) #define USB_BUFF_CPU_SHOULD_HANDLE_EP2_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP1_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP1_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP1_OUT_BITS _u(0x00000008) #define USB_BUFF_CPU_SHOULD_HANDLE_EP1_OUT_MSB _u(3) #define USB_BUFF_CPU_SHOULD_HANDLE_EP1_OUT_LSB _u(3) #define USB_BUFF_CPU_SHOULD_HANDLE_EP1_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP1_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP1_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP1_IN_BITS _u(0x00000004) #define USB_BUFF_CPU_SHOULD_HANDLE_EP1_IN_MSB _u(2) #define USB_BUFF_CPU_SHOULD_HANDLE_EP1_IN_LSB _u(2) #define USB_BUFF_CPU_SHOULD_HANDLE_EP1_IN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP0_OUT // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP0_OUT_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP0_OUT_BITS _u(0x00000002) #define USB_BUFF_CPU_SHOULD_HANDLE_EP0_OUT_MSB _u(1) #define USB_BUFF_CPU_SHOULD_HANDLE_EP0_OUT_LSB _u(1) #define USB_BUFF_CPU_SHOULD_HANDLE_EP0_OUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_BUFF_CPU_SHOULD_HANDLE_EP0_IN // Description : None #define USB_BUFF_CPU_SHOULD_HANDLE_EP0_IN_RESET _u(0x0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP0_IN_BITS _u(0x00000001) #define USB_BUFF_CPU_SHOULD_HANDLE_EP0_IN_MSB _u(0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP0_IN_LSB _u(0) #define USB_BUFF_CPU_SHOULD_HANDLE_EP0_IN_ACCESS "RO" // ============================================================================= // Register : USB_EP_ABORT // Description : Device only: Can be set to ignore the buffer control register // for this endpoint in case you would like to revoke a buffer. A // NAK will be sent for every access to the endpoint until this // bit is cleared. A corresponding bit in `EP_ABORT_DONE` is set // when it is safe to modify the buffer control register. #define USB_EP_ABORT_OFFSET _u(0x00000060) #define USB_EP_ABORT_BITS _u(0xffffffff) #define USB_EP_ABORT_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP15_OUT // Description : None #define USB_EP_ABORT_EP15_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP15_OUT_BITS _u(0x80000000) #define USB_EP_ABORT_EP15_OUT_MSB _u(31) #define USB_EP_ABORT_EP15_OUT_LSB _u(31) #define USB_EP_ABORT_EP15_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP15_IN // Description : None #define USB_EP_ABORT_EP15_IN_RESET _u(0x0) #define USB_EP_ABORT_EP15_IN_BITS _u(0x40000000) #define USB_EP_ABORT_EP15_IN_MSB _u(30) #define USB_EP_ABORT_EP15_IN_LSB _u(30) #define USB_EP_ABORT_EP15_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP14_OUT // Description : None #define USB_EP_ABORT_EP14_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP14_OUT_BITS _u(0x20000000) #define USB_EP_ABORT_EP14_OUT_MSB _u(29) #define USB_EP_ABORT_EP14_OUT_LSB _u(29) #define USB_EP_ABORT_EP14_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP14_IN // Description : None #define USB_EP_ABORT_EP14_IN_RESET _u(0x0) #define USB_EP_ABORT_EP14_IN_BITS _u(0x10000000) #define USB_EP_ABORT_EP14_IN_MSB _u(28) #define USB_EP_ABORT_EP14_IN_LSB _u(28) #define USB_EP_ABORT_EP14_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP13_OUT // Description : None #define USB_EP_ABORT_EP13_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP13_OUT_BITS _u(0x08000000) #define USB_EP_ABORT_EP13_OUT_MSB _u(27) #define USB_EP_ABORT_EP13_OUT_LSB _u(27) #define USB_EP_ABORT_EP13_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP13_IN // Description : None #define USB_EP_ABORT_EP13_IN_RESET _u(0x0) #define USB_EP_ABORT_EP13_IN_BITS _u(0x04000000) #define USB_EP_ABORT_EP13_IN_MSB _u(26) #define USB_EP_ABORT_EP13_IN_LSB _u(26) #define USB_EP_ABORT_EP13_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP12_OUT // Description : None #define USB_EP_ABORT_EP12_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP12_OUT_BITS _u(0x02000000) #define USB_EP_ABORT_EP12_OUT_MSB _u(25) #define USB_EP_ABORT_EP12_OUT_LSB _u(25) #define USB_EP_ABORT_EP12_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP12_IN // Description : None #define USB_EP_ABORT_EP12_IN_RESET _u(0x0) #define USB_EP_ABORT_EP12_IN_BITS _u(0x01000000) #define USB_EP_ABORT_EP12_IN_MSB _u(24) #define USB_EP_ABORT_EP12_IN_LSB _u(24) #define USB_EP_ABORT_EP12_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP11_OUT // Description : None #define USB_EP_ABORT_EP11_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP11_OUT_BITS _u(0x00800000) #define USB_EP_ABORT_EP11_OUT_MSB _u(23) #define USB_EP_ABORT_EP11_OUT_LSB _u(23) #define USB_EP_ABORT_EP11_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP11_IN // Description : None #define USB_EP_ABORT_EP11_IN_RESET _u(0x0) #define USB_EP_ABORT_EP11_IN_BITS _u(0x00400000) #define USB_EP_ABORT_EP11_IN_MSB _u(22) #define USB_EP_ABORT_EP11_IN_LSB _u(22) #define USB_EP_ABORT_EP11_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP10_OUT // Description : None #define USB_EP_ABORT_EP10_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP10_OUT_BITS _u(0x00200000) #define USB_EP_ABORT_EP10_OUT_MSB _u(21) #define USB_EP_ABORT_EP10_OUT_LSB _u(21) #define USB_EP_ABORT_EP10_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP10_IN // Description : None #define USB_EP_ABORT_EP10_IN_RESET _u(0x0) #define USB_EP_ABORT_EP10_IN_BITS _u(0x00100000) #define USB_EP_ABORT_EP10_IN_MSB _u(20) #define USB_EP_ABORT_EP10_IN_LSB _u(20) #define USB_EP_ABORT_EP10_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP9_OUT // Description : None #define USB_EP_ABORT_EP9_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP9_OUT_BITS _u(0x00080000) #define USB_EP_ABORT_EP9_OUT_MSB _u(19) #define USB_EP_ABORT_EP9_OUT_LSB _u(19) #define USB_EP_ABORT_EP9_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP9_IN // Description : None #define USB_EP_ABORT_EP9_IN_RESET _u(0x0) #define USB_EP_ABORT_EP9_IN_BITS _u(0x00040000) #define USB_EP_ABORT_EP9_IN_MSB _u(18) #define USB_EP_ABORT_EP9_IN_LSB _u(18) #define USB_EP_ABORT_EP9_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP8_OUT // Description : None #define USB_EP_ABORT_EP8_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP8_OUT_BITS _u(0x00020000) #define USB_EP_ABORT_EP8_OUT_MSB _u(17) #define USB_EP_ABORT_EP8_OUT_LSB _u(17) #define USB_EP_ABORT_EP8_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP8_IN // Description : None #define USB_EP_ABORT_EP8_IN_RESET _u(0x0) #define USB_EP_ABORT_EP8_IN_BITS _u(0x00010000) #define USB_EP_ABORT_EP8_IN_MSB _u(16) #define USB_EP_ABORT_EP8_IN_LSB _u(16) #define USB_EP_ABORT_EP8_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP7_OUT // Description : None #define USB_EP_ABORT_EP7_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP7_OUT_BITS _u(0x00008000) #define USB_EP_ABORT_EP7_OUT_MSB _u(15) #define USB_EP_ABORT_EP7_OUT_LSB _u(15) #define USB_EP_ABORT_EP7_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP7_IN // Description : None #define USB_EP_ABORT_EP7_IN_RESET _u(0x0) #define USB_EP_ABORT_EP7_IN_BITS _u(0x00004000) #define USB_EP_ABORT_EP7_IN_MSB _u(14) #define USB_EP_ABORT_EP7_IN_LSB _u(14) #define USB_EP_ABORT_EP7_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP6_OUT // Description : None #define USB_EP_ABORT_EP6_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP6_OUT_BITS _u(0x00002000) #define USB_EP_ABORT_EP6_OUT_MSB _u(13) #define USB_EP_ABORT_EP6_OUT_LSB _u(13) #define USB_EP_ABORT_EP6_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP6_IN // Description : None #define USB_EP_ABORT_EP6_IN_RESET _u(0x0) #define USB_EP_ABORT_EP6_IN_BITS _u(0x00001000) #define USB_EP_ABORT_EP6_IN_MSB _u(12) #define USB_EP_ABORT_EP6_IN_LSB _u(12) #define USB_EP_ABORT_EP6_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP5_OUT // Description : None #define USB_EP_ABORT_EP5_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP5_OUT_BITS _u(0x00000800) #define USB_EP_ABORT_EP5_OUT_MSB _u(11) #define USB_EP_ABORT_EP5_OUT_LSB _u(11) #define USB_EP_ABORT_EP5_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP5_IN // Description : None #define USB_EP_ABORT_EP5_IN_RESET _u(0x0) #define USB_EP_ABORT_EP5_IN_BITS _u(0x00000400) #define USB_EP_ABORT_EP5_IN_MSB _u(10) #define USB_EP_ABORT_EP5_IN_LSB _u(10) #define USB_EP_ABORT_EP5_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP4_OUT // Description : None #define USB_EP_ABORT_EP4_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP4_OUT_BITS _u(0x00000200) #define USB_EP_ABORT_EP4_OUT_MSB _u(9) #define USB_EP_ABORT_EP4_OUT_LSB _u(9) #define USB_EP_ABORT_EP4_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP4_IN // Description : None #define USB_EP_ABORT_EP4_IN_RESET _u(0x0) #define USB_EP_ABORT_EP4_IN_BITS _u(0x00000100) #define USB_EP_ABORT_EP4_IN_MSB _u(8) #define USB_EP_ABORT_EP4_IN_LSB _u(8) #define USB_EP_ABORT_EP4_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP3_OUT // Description : None #define USB_EP_ABORT_EP3_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP3_OUT_BITS _u(0x00000080) #define USB_EP_ABORT_EP3_OUT_MSB _u(7) #define USB_EP_ABORT_EP3_OUT_LSB _u(7) #define USB_EP_ABORT_EP3_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP3_IN // Description : None #define USB_EP_ABORT_EP3_IN_RESET _u(0x0) #define USB_EP_ABORT_EP3_IN_BITS _u(0x00000040) #define USB_EP_ABORT_EP3_IN_MSB _u(6) #define USB_EP_ABORT_EP3_IN_LSB _u(6) #define USB_EP_ABORT_EP3_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP2_OUT // Description : None #define USB_EP_ABORT_EP2_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP2_OUT_BITS _u(0x00000020) #define USB_EP_ABORT_EP2_OUT_MSB _u(5) #define USB_EP_ABORT_EP2_OUT_LSB _u(5) #define USB_EP_ABORT_EP2_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP2_IN // Description : None #define USB_EP_ABORT_EP2_IN_RESET _u(0x0) #define USB_EP_ABORT_EP2_IN_BITS _u(0x00000010) #define USB_EP_ABORT_EP2_IN_MSB _u(4) #define USB_EP_ABORT_EP2_IN_LSB _u(4) #define USB_EP_ABORT_EP2_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP1_OUT // Description : None #define USB_EP_ABORT_EP1_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP1_OUT_BITS _u(0x00000008) #define USB_EP_ABORT_EP1_OUT_MSB _u(3) #define USB_EP_ABORT_EP1_OUT_LSB _u(3) #define USB_EP_ABORT_EP1_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP1_IN // Description : None #define USB_EP_ABORT_EP1_IN_RESET _u(0x0) #define USB_EP_ABORT_EP1_IN_BITS _u(0x00000004) #define USB_EP_ABORT_EP1_IN_MSB _u(2) #define USB_EP_ABORT_EP1_IN_LSB _u(2) #define USB_EP_ABORT_EP1_IN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP0_OUT // Description : None #define USB_EP_ABORT_EP0_OUT_RESET _u(0x0) #define USB_EP_ABORT_EP0_OUT_BITS _u(0x00000002) #define USB_EP_ABORT_EP0_OUT_MSB _u(1) #define USB_EP_ABORT_EP0_OUT_LSB _u(1) #define USB_EP_ABORT_EP0_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_EP0_IN // Description : None #define USB_EP_ABORT_EP0_IN_RESET _u(0x0) #define USB_EP_ABORT_EP0_IN_BITS _u(0x00000001) #define USB_EP_ABORT_EP0_IN_MSB _u(0) #define USB_EP_ABORT_EP0_IN_LSB _u(0) #define USB_EP_ABORT_EP0_IN_ACCESS "RW" // ============================================================================= // Register : USB_EP_ABORT_DONE // Description : Device only: Used in conjunction with `EP_ABORT`. Set once an // endpoint is idle so the programmer knows it is safe to modify // the buffer control register. #define USB_EP_ABORT_DONE_OFFSET _u(0x00000064) #define USB_EP_ABORT_DONE_BITS _u(0xffffffff) #define USB_EP_ABORT_DONE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP15_OUT // Description : None #define USB_EP_ABORT_DONE_EP15_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP15_OUT_BITS _u(0x80000000) #define USB_EP_ABORT_DONE_EP15_OUT_MSB _u(31) #define USB_EP_ABORT_DONE_EP15_OUT_LSB _u(31) #define USB_EP_ABORT_DONE_EP15_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP15_IN // Description : None #define USB_EP_ABORT_DONE_EP15_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP15_IN_BITS _u(0x40000000) #define USB_EP_ABORT_DONE_EP15_IN_MSB _u(30) #define USB_EP_ABORT_DONE_EP15_IN_LSB _u(30) #define USB_EP_ABORT_DONE_EP15_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP14_OUT // Description : None #define USB_EP_ABORT_DONE_EP14_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP14_OUT_BITS _u(0x20000000) #define USB_EP_ABORT_DONE_EP14_OUT_MSB _u(29) #define USB_EP_ABORT_DONE_EP14_OUT_LSB _u(29) #define USB_EP_ABORT_DONE_EP14_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP14_IN // Description : None #define USB_EP_ABORT_DONE_EP14_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP14_IN_BITS _u(0x10000000) #define USB_EP_ABORT_DONE_EP14_IN_MSB _u(28) #define USB_EP_ABORT_DONE_EP14_IN_LSB _u(28) #define USB_EP_ABORT_DONE_EP14_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP13_OUT // Description : None #define USB_EP_ABORT_DONE_EP13_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP13_OUT_BITS _u(0x08000000) #define USB_EP_ABORT_DONE_EP13_OUT_MSB _u(27) #define USB_EP_ABORT_DONE_EP13_OUT_LSB _u(27) #define USB_EP_ABORT_DONE_EP13_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP13_IN // Description : None #define USB_EP_ABORT_DONE_EP13_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP13_IN_BITS _u(0x04000000) #define USB_EP_ABORT_DONE_EP13_IN_MSB _u(26) #define USB_EP_ABORT_DONE_EP13_IN_LSB _u(26) #define USB_EP_ABORT_DONE_EP13_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP12_OUT // Description : None #define USB_EP_ABORT_DONE_EP12_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP12_OUT_BITS _u(0x02000000) #define USB_EP_ABORT_DONE_EP12_OUT_MSB _u(25) #define USB_EP_ABORT_DONE_EP12_OUT_LSB _u(25) #define USB_EP_ABORT_DONE_EP12_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP12_IN // Description : None #define USB_EP_ABORT_DONE_EP12_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP12_IN_BITS _u(0x01000000) #define USB_EP_ABORT_DONE_EP12_IN_MSB _u(24) #define USB_EP_ABORT_DONE_EP12_IN_LSB _u(24) #define USB_EP_ABORT_DONE_EP12_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP11_OUT // Description : None #define USB_EP_ABORT_DONE_EP11_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP11_OUT_BITS _u(0x00800000) #define USB_EP_ABORT_DONE_EP11_OUT_MSB _u(23) #define USB_EP_ABORT_DONE_EP11_OUT_LSB _u(23) #define USB_EP_ABORT_DONE_EP11_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP11_IN // Description : None #define USB_EP_ABORT_DONE_EP11_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP11_IN_BITS _u(0x00400000) #define USB_EP_ABORT_DONE_EP11_IN_MSB _u(22) #define USB_EP_ABORT_DONE_EP11_IN_LSB _u(22) #define USB_EP_ABORT_DONE_EP11_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP10_OUT // Description : None #define USB_EP_ABORT_DONE_EP10_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP10_OUT_BITS _u(0x00200000) #define USB_EP_ABORT_DONE_EP10_OUT_MSB _u(21) #define USB_EP_ABORT_DONE_EP10_OUT_LSB _u(21) #define USB_EP_ABORT_DONE_EP10_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP10_IN // Description : None #define USB_EP_ABORT_DONE_EP10_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP10_IN_BITS _u(0x00100000) #define USB_EP_ABORT_DONE_EP10_IN_MSB _u(20) #define USB_EP_ABORT_DONE_EP10_IN_LSB _u(20) #define USB_EP_ABORT_DONE_EP10_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP9_OUT // Description : None #define USB_EP_ABORT_DONE_EP9_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP9_OUT_BITS _u(0x00080000) #define USB_EP_ABORT_DONE_EP9_OUT_MSB _u(19) #define USB_EP_ABORT_DONE_EP9_OUT_LSB _u(19) #define USB_EP_ABORT_DONE_EP9_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP9_IN // Description : None #define USB_EP_ABORT_DONE_EP9_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP9_IN_BITS _u(0x00040000) #define USB_EP_ABORT_DONE_EP9_IN_MSB _u(18) #define USB_EP_ABORT_DONE_EP9_IN_LSB _u(18) #define USB_EP_ABORT_DONE_EP9_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP8_OUT // Description : None #define USB_EP_ABORT_DONE_EP8_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP8_OUT_BITS _u(0x00020000) #define USB_EP_ABORT_DONE_EP8_OUT_MSB _u(17) #define USB_EP_ABORT_DONE_EP8_OUT_LSB _u(17) #define USB_EP_ABORT_DONE_EP8_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP8_IN // Description : None #define USB_EP_ABORT_DONE_EP8_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP8_IN_BITS _u(0x00010000) #define USB_EP_ABORT_DONE_EP8_IN_MSB _u(16) #define USB_EP_ABORT_DONE_EP8_IN_LSB _u(16) #define USB_EP_ABORT_DONE_EP8_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP7_OUT // Description : None #define USB_EP_ABORT_DONE_EP7_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP7_OUT_BITS _u(0x00008000) #define USB_EP_ABORT_DONE_EP7_OUT_MSB _u(15) #define USB_EP_ABORT_DONE_EP7_OUT_LSB _u(15) #define USB_EP_ABORT_DONE_EP7_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP7_IN // Description : None #define USB_EP_ABORT_DONE_EP7_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP7_IN_BITS _u(0x00004000) #define USB_EP_ABORT_DONE_EP7_IN_MSB _u(14) #define USB_EP_ABORT_DONE_EP7_IN_LSB _u(14) #define USB_EP_ABORT_DONE_EP7_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP6_OUT // Description : None #define USB_EP_ABORT_DONE_EP6_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP6_OUT_BITS _u(0x00002000) #define USB_EP_ABORT_DONE_EP6_OUT_MSB _u(13) #define USB_EP_ABORT_DONE_EP6_OUT_LSB _u(13) #define USB_EP_ABORT_DONE_EP6_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP6_IN // Description : None #define USB_EP_ABORT_DONE_EP6_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP6_IN_BITS _u(0x00001000) #define USB_EP_ABORT_DONE_EP6_IN_MSB _u(12) #define USB_EP_ABORT_DONE_EP6_IN_LSB _u(12) #define USB_EP_ABORT_DONE_EP6_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP5_OUT // Description : None #define USB_EP_ABORT_DONE_EP5_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP5_OUT_BITS _u(0x00000800) #define USB_EP_ABORT_DONE_EP5_OUT_MSB _u(11) #define USB_EP_ABORT_DONE_EP5_OUT_LSB _u(11) #define USB_EP_ABORT_DONE_EP5_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP5_IN // Description : None #define USB_EP_ABORT_DONE_EP5_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP5_IN_BITS _u(0x00000400) #define USB_EP_ABORT_DONE_EP5_IN_MSB _u(10) #define USB_EP_ABORT_DONE_EP5_IN_LSB _u(10) #define USB_EP_ABORT_DONE_EP5_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP4_OUT // Description : None #define USB_EP_ABORT_DONE_EP4_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP4_OUT_BITS _u(0x00000200) #define USB_EP_ABORT_DONE_EP4_OUT_MSB _u(9) #define USB_EP_ABORT_DONE_EP4_OUT_LSB _u(9) #define USB_EP_ABORT_DONE_EP4_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP4_IN // Description : None #define USB_EP_ABORT_DONE_EP4_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP4_IN_BITS _u(0x00000100) #define USB_EP_ABORT_DONE_EP4_IN_MSB _u(8) #define USB_EP_ABORT_DONE_EP4_IN_LSB _u(8) #define USB_EP_ABORT_DONE_EP4_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP3_OUT // Description : None #define USB_EP_ABORT_DONE_EP3_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP3_OUT_BITS _u(0x00000080) #define USB_EP_ABORT_DONE_EP3_OUT_MSB _u(7) #define USB_EP_ABORT_DONE_EP3_OUT_LSB _u(7) #define USB_EP_ABORT_DONE_EP3_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP3_IN // Description : None #define USB_EP_ABORT_DONE_EP3_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP3_IN_BITS _u(0x00000040) #define USB_EP_ABORT_DONE_EP3_IN_MSB _u(6) #define USB_EP_ABORT_DONE_EP3_IN_LSB _u(6) #define USB_EP_ABORT_DONE_EP3_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP2_OUT // Description : None #define USB_EP_ABORT_DONE_EP2_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP2_OUT_BITS _u(0x00000020) #define USB_EP_ABORT_DONE_EP2_OUT_MSB _u(5) #define USB_EP_ABORT_DONE_EP2_OUT_LSB _u(5) #define USB_EP_ABORT_DONE_EP2_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP2_IN // Description : None #define USB_EP_ABORT_DONE_EP2_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP2_IN_BITS _u(0x00000010) #define USB_EP_ABORT_DONE_EP2_IN_MSB _u(4) #define USB_EP_ABORT_DONE_EP2_IN_LSB _u(4) #define USB_EP_ABORT_DONE_EP2_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP1_OUT // Description : None #define USB_EP_ABORT_DONE_EP1_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP1_OUT_BITS _u(0x00000008) #define USB_EP_ABORT_DONE_EP1_OUT_MSB _u(3) #define USB_EP_ABORT_DONE_EP1_OUT_LSB _u(3) #define USB_EP_ABORT_DONE_EP1_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP1_IN // Description : None #define USB_EP_ABORT_DONE_EP1_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP1_IN_BITS _u(0x00000004) #define USB_EP_ABORT_DONE_EP1_IN_MSB _u(2) #define USB_EP_ABORT_DONE_EP1_IN_LSB _u(2) #define USB_EP_ABORT_DONE_EP1_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP0_OUT // Description : None #define USB_EP_ABORT_DONE_EP0_OUT_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP0_OUT_BITS _u(0x00000002) #define USB_EP_ABORT_DONE_EP0_OUT_MSB _u(1) #define USB_EP_ABORT_DONE_EP0_OUT_LSB _u(1) #define USB_EP_ABORT_DONE_EP0_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_ABORT_DONE_EP0_IN // Description : None #define USB_EP_ABORT_DONE_EP0_IN_RESET _u(0x0) #define USB_EP_ABORT_DONE_EP0_IN_BITS _u(0x00000001) #define USB_EP_ABORT_DONE_EP0_IN_MSB _u(0) #define USB_EP_ABORT_DONE_EP0_IN_LSB _u(0) #define USB_EP_ABORT_DONE_EP0_IN_ACCESS "WC" // ============================================================================= // Register : USB_EP_STALL_ARM // Description : Device: this bit must be set in conjunction with the `STALL` // bit in the buffer control register to send a STALL on EP0. The // device controller clears these bits when a SETUP packet is // received because the USB spec requires that a STALL condition // is cleared when a SETUP packet is received. #define USB_EP_STALL_ARM_OFFSET _u(0x00000068) #define USB_EP_STALL_ARM_BITS _u(0x00000003) #define USB_EP_STALL_ARM_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_EP_STALL_ARM_EP0_OUT // Description : None #define USB_EP_STALL_ARM_EP0_OUT_RESET _u(0x0) #define USB_EP_STALL_ARM_EP0_OUT_BITS _u(0x00000002) #define USB_EP_STALL_ARM_EP0_OUT_MSB _u(1) #define USB_EP_STALL_ARM_EP0_OUT_LSB _u(1) #define USB_EP_STALL_ARM_EP0_OUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_EP_STALL_ARM_EP0_IN // Description : None #define USB_EP_STALL_ARM_EP0_IN_RESET _u(0x0) #define USB_EP_STALL_ARM_EP0_IN_BITS _u(0x00000001) #define USB_EP_STALL_ARM_EP0_IN_MSB _u(0) #define USB_EP_STALL_ARM_EP0_IN_LSB _u(0) #define USB_EP_STALL_ARM_EP0_IN_ACCESS "RW" // ============================================================================= // Register : USB_NAK_POLL // Description : Used by the host controller. Sets the wait time in microseconds // before trying again if the device replies with a NAK. #define USB_NAK_POLL_OFFSET _u(0x0000006c) #define USB_NAK_POLL_BITS _u(0x03ff03ff) #define USB_NAK_POLL_RESET _u(0x00100010) // ----------------------------------------------------------------------------- // Field : USB_NAK_POLL_DELAY_FS // Description : NAK polling interval for a full speed device #define USB_NAK_POLL_DELAY_FS_RESET _u(0x010) #define USB_NAK_POLL_DELAY_FS_BITS _u(0x03ff0000) #define USB_NAK_POLL_DELAY_FS_MSB _u(25) #define USB_NAK_POLL_DELAY_FS_LSB _u(16) #define USB_NAK_POLL_DELAY_FS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_NAK_POLL_DELAY_LS // Description : NAK polling interval for a low speed device #define USB_NAK_POLL_DELAY_LS_RESET _u(0x010) #define USB_NAK_POLL_DELAY_LS_BITS _u(0x000003ff) #define USB_NAK_POLL_DELAY_LS_MSB _u(9) #define USB_NAK_POLL_DELAY_LS_LSB _u(0) #define USB_NAK_POLL_DELAY_LS_ACCESS "RW" // ============================================================================= // Register : USB_EP_STATUS_STALL_NAK // Description : Device: bits are set when the `IRQ_ON_NAK` or `IRQ_ON_STALL` // bits are set. For EP0 this comes from `SIE_CTRL`. For all other // endpoints it comes from the endpoint control register. #define USB_EP_STATUS_STALL_NAK_OFFSET _u(0x00000070) #define USB_EP_STATUS_STALL_NAK_BITS _u(0xffffffff) #define USB_EP_STATUS_STALL_NAK_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP15_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP15_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP15_OUT_BITS _u(0x80000000) #define USB_EP_STATUS_STALL_NAK_EP15_OUT_MSB _u(31) #define USB_EP_STATUS_STALL_NAK_EP15_OUT_LSB _u(31) #define USB_EP_STATUS_STALL_NAK_EP15_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP15_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP15_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP15_IN_BITS _u(0x40000000) #define USB_EP_STATUS_STALL_NAK_EP15_IN_MSB _u(30) #define USB_EP_STATUS_STALL_NAK_EP15_IN_LSB _u(30) #define USB_EP_STATUS_STALL_NAK_EP15_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP14_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP14_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP14_OUT_BITS _u(0x20000000) #define USB_EP_STATUS_STALL_NAK_EP14_OUT_MSB _u(29) #define USB_EP_STATUS_STALL_NAK_EP14_OUT_LSB _u(29) #define USB_EP_STATUS_STALL_NAK_EP14_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP14_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP14_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP14_IN_BITS _u(0x10000000) #define USB_EP_STATUS_STALL_NAK_EP14_IN_MSB _u(28) #define USB_EP_STATUS_STALL_NAK_EP14_IN_LSB _u(28) #define USB_EP_STATUS_STALL_NAK_EP14_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP13_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP13_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP13_OUT_BITS _u(0x08000000) #define USB_EP_STATUS_STALL_NAK_EP13_OUT_MSB _u(27) #define USB_EP_STATUS_STALL_NAK_EP13_OUT_LSB _u(27) #define USB_EP_STATUS_STALL_NAK_EP13_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP13_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP13_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP13_IN_BITS _u(0x04000000) #define USB_EP_STATUS_STALL_NAK_EP13_IN_MSB _u(26) #define USB_EP_STATUS_STALL_NAK_EP13_IN_LSB _u(26) #define USB_EP_STATUS_STALL_NAK_EP13_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP12_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP12_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP12_OUT_BITS _u(0x02000000) #define USB_EP_STATUS_STALL_NAK_EP12_OUT_MSB _u(25) #define USB_EP_STATUS_STALL_NAK_EP12_OUT_LSB _u(25) #define USB_EP_STATUS_STALL_NAK_EP12_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP12_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP12_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP12_IN_BITS _u(0x01000000) #define USB_EP_STATUS_STALL_NAK_EP12_IN_MSB _u(24) #define USB_EP_STATUS_STALL_NAK_EP12_IN_LSB _u(24) #define USB_EP_STATUS_STALL_NAK_EP12_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP11_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP11_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP11_OUT_BITS _u(0x00800000) #define USB_EP_STATUS_STALL_NAK_EP11_OUT_MSB _u(23) #define USB_EP_STATUS_STALL_NAK_EP11_OUT_LSB _u(23) #define USB_EP_STATUS_STALL_NAK_EP11_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP11_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP11_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP11_IN_BITS _u(0x00400000) #define USB_EP_STATUS_STALL_NAK_EP11_IN_MSB _u(22) #define USB_EP_STATUS_STALL_NAK_EP11_IN_LSB _u(22) #define USB_EP_STATUS_STALL_NAK_EP11_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP10_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP10_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP10_OUT_BITS _u(0x00200000) #define USB_EP_STATUS_STALL_NAK_EP10_OUT_MSB _u(21) #define USB_EP_STATUS_STALL_NAK_EP10_OUT_LSB _u(21) #define USB_EP_STATUS_STALL_NAK_EP10_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP10_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP10_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP10_IN_BITS _u(0x00100000) #define USB_EP_STATUS_STALL_NAK_EP10_IN_MSB _u(20) #define USB_EP_STATUS_STALL_NAK_EP10_IN_LSB _u(20) #define USB_EP_STATUS_STALL_NAK_EP10_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP9_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP9_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP9_OUT_BITS _u(0x00080000) #define USB_EP_STATUS_STALL_NAK_EP9_OUT_MSB _u(19) #define USB_EP_STATUS_STALL_NAK_EP9_OUT_LSB _u(19) #define USB_EP_STATUS_STALL_NAK_EP9_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP9_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP9_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP9_IN_BITS _u(0x00040000) #define USB_EP_STATUS_STALL_NAK_EP9_IN_MSB _u(18) #define USB_EP_STATUS_STALL_NAK_EP9_IN_LSB _u(18) #define USB_EP_STATUS_STALL_NAK_EP9_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP8_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP8_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP8_OUT_BITS _u(0x00020000) #define USB_EP_STATUS_STALL_NAK_EP8_OUT_MSB _u(17) #define USB_EP_STATUS_STALL_NAK_EP8_OUT_LSB _u(17) #define USB_EP_STATUS_STALL_NAK_EP8_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP8_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP8_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP8_IN_BITS _u(0x00010000) #define USB_EP_STATUS_STALL_NAK_EP8_IN_MSB _u(16) #define USB_EP_STATUS_STALL_NAK_EP8_IN_LSB _u(16) #define USB_EP_STATUS_STALL_NAK_EP8_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP7_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP7_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP7_OUT_BITS _u(0x00008000) #define USB_EP_STATUS_STALL_NAK_EP7_OUT_MSB _u(15) #define USB_EP_STATUS_STALL_NAK_EP7_OUT_LSB _u(15) #define USB_EP_STATUS_STALL_NAK_EP7_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP7_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP7_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP7_IN_BITS _u(0x00004000) #define USB_EP_STATUS_STALL_NAK_EP7_IN_MSB _u(14) #define USB_EP_STATUS_STALL_NAK_EP7_IN_LSB _u(14) #define USB_EP_STATUS_STALL_NAK_EP7_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP6_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP6_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP6_OUT_BITS _u(0x00002000) #define USB_EP_STATUS_STALL_NAK_EP6_OUT_MSB _u(13) #define USB_EP_STATUS_STALL_NAK_EP6_OUT_LSB _u(13) #define USB_EP_STATUS_STALL_NAK_EP6_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP6_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP6_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP6_IN_BITS _u(0x00001000) #define USB_EP_STATUS_STALL_NAK_EP6_IN_MSB _u(12) #define USB_EP_STATUS_STALL_NAK_EP6_IN_LSB _u(12) #define USB_EP_STATUS_STALL_NAK_EP6_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP5_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP5_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP5_OUT_BITS _u(0x00000800) #define USB_EP_STATUS_STALL_NAK_EP5_OUT_MSB _u(11) #define USB_EP_STATUS_STALL_NAK_EP5_OUT_LSB _u(11) #define USB_EP_STATUS_STALL_NAK_EP5_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP5_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP5_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP5_IN_BITS _u(0x00000400) #define USB_EP_STATUS_STALL_NAK_EP5_IN_MSB _u(10) #define USB_EP_STATUS_STALL_NAK_EP5_IN_LSB _u(10) #define USB_EP_STATUS_STALL_NAK_EP5_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP4_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP4_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP4_OUT_BITS _u(0x00000200) #define USB_EP_STATUS_STALL_NAK_EP4_OUT_MSB _u(9) #define USB_EP_STATUS_STALL_NAK_EP4_OUT_LSB _u(9) #define USB_EP_STATUS_STALL_NAK_EP4_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP4_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP4_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP4_IN_BITS _u(0x00000100) #define USB_EP_STATUS_STALL_NAK_EP4_IN_MSB _u(8) #define USB_EP_STATUS_STALL_NAK_EP4_IN_LSB _u(8) #define USB_EP_STATUS_STALL_NAK_EP4_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP3_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP3_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP3_OUT_BITS _u(0x00000080) #define USB_EP_STATUS_STALL_NAK_EP3_OUT_MSB _u(7) #define USB_EP_STATUS_STALL_NAK_EP3_OUT_LSB _u(7) #define USB_EP_STATUS_STALL_NAK_EP3_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP3_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP3_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP3_IN_BITS _u(0x00000040) #define USB_EP_STATUS_STALL_NAK_EP3_IN_MSB _u(6) #define USB_EP_STATUS_STALL_NAK_EP3_IN_LSB _u(6) #define USB_EP_STATUS_STALL_NAK_EP3_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP2_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP2_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP2_OUT_BITS _u(0x00000020) #define USB_EP_STATUS_STALL_NAK_EP2_OUT_MSB _u(5) #define USB_EP_STATUS_STALL_NAK_EP2_OUT_LSB _u(5) #define USB_EP_STATUS_STALL_NAK_EP2_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP2_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP2_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP2_IN_BITS _u(0x00000010) #define USB_EP_STATUS_STALL_NAK_EP2_IN_MSB _u(4) #define USB_EP_STATUS_STALL_NAK_EP2_IN_LSB _u(4) #define USB_EP_STATUS_STALL_NAK_EP2_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP1_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP1_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP1_OUT_BITS _u(0x00000008) #define USB_EP_STATUS_STALL_NAK_EP1_OUT_MSB _u(3) #define USB_EP_STATUS_STALL_NAK_EP1_OUT_LSB _u(3) #define USB_EP_STATUS_STALL_NAK_EP1_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP1_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP1_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP1_IN_BITS _u(0x00000004) #define USB_EP_STATUS_STALL_NAK_EP1_IN_MSB _u(2) #define USB_EP_STATUS_STALL_NAK_EP1_IN_LSB _u(2) #define USB_EP_STATUS_STALL_NAK_EP1_IN_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP0_OUT // Description : None #define USB_EP_STATUS_STALL_NAK_EP0_OUT_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP0_OUT_BITS _u(0x00000002) #define USB_EP_STATUS_STALL_NAK_EP0_OUT_MSB _u(1) #define USB_EP_STATUS_STALL_NAK_EP0_OUT_LSB _u(1) #define USB_EP_STATUS_STALL_NAK_EP0_OUT_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : USB_EP_STATUS_STALL_NAK_EP0_IN // Description : None #define USB_EP_STATUS_STALL_NAK_EP0_IN_RESET _u(0x0) #define USB_EP_STATUS_STALL_NAK_EP0_IN_BITS _u(0x00000001) #define USB_EP_STATUS_STALL_NAK_EP0_IN_MSB _u(0) #define USB_EP_STATUS_STALL_NAK_EP0_IN_LSB _u(0) #define USB_EP_STATUS_STALL_NAK_EP0_IN_ACCESS "WC" // ============================================================================= // Register : USB_USB_MUXING // Description : Where to connect the USB controller. Should be to_phy by // default. #define USB_USB_MUXING_OFFSET _u(0x00000074) #define USB_USB_MUXING_BITS _u(0x0000000f) #define USB_USB_MUXING_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_USB_MUXING_SOFTCON // Description : None #define USB_USB_MUXING_SOFTCON_RESET _u(0x0) #define USB_USB_MUXING_SOFTCON_BITS _u(0x00000008) #define USB_USB_MUXING_SOFTCON_MSB _u(3) #define USB_USB_MUXING_SOFTCON_LSB _u(3) #define USB_USB_MUXING_SOFTCON_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USB_MUXING_TO_DIGITAL_PAD // Description : None #define USB_USB_MUXING_TO_DIGITAL_PAD_RESET _u(0x0) #define USB_USB_MUXING_TO_DIGITAL_PAD_BITS _u(0x00000004) #define USB_USB_MUXING_TO_DIGITAL_PAD_MSB _u(2) #define USB_USB_MUXING_TO_DIGITAL_PAD_LSB _u(2) #define USB_USB_MUXING_TO_DIGITAL_PAD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USB_MUXING_TO_EXTPHY // Description : None #define USB_USB_MUXING_TO_EXTPHY_RESET _u(0x0) #define USB_USB_MUXING_TO_EXTPHY_BITS _u(0x00000002) #define USB_USB_MUXING_TO_EXTPHY_MSB _u(1) #define USB_USB_MUXING_TO_EXTPHY_LSB _u(1) #define USB_USB_MUXING_TO_EXTPHY_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USB_MUXING_TO_PHY // Description : None #define USB_USB_MUXING_TO_PHY_RESET _u(0x0) #define USB_USB_MUXING_TO_PHY_BITS _u(0x00000001) #define USB_USB_MUXING_TO_PHY_MSB _u(0) #define USB_USB_MUXING_TO_PHY_LSB _u(0) #define USB_USB_MUXING_TO_PHY_ACCESS "RW" // ============================================================================= // Register : USB_USB_PWR // Description : Overrides for the power signals in the event that the VBUS // signals are not hooked up to GPIO. Set the value of the // override and then the override enable to switch over to the // override value. #define USB_USB_PWR_OFFSET _u(0x00000078) #define USB_USB_PWR_BITS _u(0x0000003f) #define USB_USB_PWR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_USB_PWR_OVERCURR_DETECT_EN // Description : None #define USB_USB_PWR_OVERCURR_DETECT_EN_RESET _u(0x0) #define USB_USB_PWR_OVERCURR_DETECT_EN_BITS _u(0x00000020) #define USB_USB_PWR_OVERCURR_DETECT_EN_MSB _u(5) #define USB_USB_PWR_OVERCURR_DETECT_EN_LSB _u(5) #define USB_USB_PWR_OVERCURR_DETECT_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USB_PWR_OVERCURR_DETECT // Description : None #define USB_USB_PWR_OVERCURR_DETECT_RESET _u(0x0) #define USB_USB_PWR_OVERCURR_DETECT_BITS _u(0x00000010) #define USB_USB_PWR_OVERCURR_DETECT_MSB _u(4) #define USB_USB_PWR_OVERCURR_DETECT_LSB _u(4) #define USB_USB_PWR_OVERCURR_DETECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USB_PWR_VBUS_DETECT_OVERRIDE_EN // Description : None #define USB_USB_PWR_VBUS_DETECT_OVERRIDE_EN_RESET _u(0x0) #define USB_USB_PWR_VBUS_DETECT_OVERRIDE_EN_BITS _u(0x00000008) #define USB_USB_PWR_VBUS_DETECT_OVERRIDE_EN_MSB _u(3) #define USB_USB_PWR_VBUS_DETECT_OVERRIDE_EN_LSB _u(3) #define USB_USB_PWR_VBUS_DETECT_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USB_PWR_VBUS_DETECT // Description : None #define USB_USB_PWR_VBUS_DETECT_RESET _u(0x0) #define USB_USB_PWR_VBUS_DETECT_BITS _u(0x00000004) #define USB_USB_PWR_VBUS_DETECT_MSB _u(2) #define USB_USB_PWR_VBUS_DETECT_LSB _u(2) #define USB_USB_PWR_VBUS_DETECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USB_PWR_VBUS_EN_OVERRIDE_EN // Description : None #define USB_USB_PWR_VBUS_EN_OVERRIDE_EN_RESET _u(0x0) #define USB_USB_PWR_VBUS_EN_OVERRIDE_EN_BITS _u(0x00000002) #define USB_USB_PWR_VBUS_EN_OVERRIDE_EN_MSB _u(1) #define USB_USB_PWR_VBUS_EN_OVERRIDE_EN_LSB _u(1) #define USB_USB_PWR_VBUS_EN_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USB_PWR_VBUS_EN // Description : None #define USB_USB_PWR_VBUS_EN_RESET _u(0x0) #define USB_USB_PWR_VBUS_EN_BITS _u(0x00000001) #define USB_USB_PWR_VBUS_EN_MSB _u(0) #define USB_USB_PWR_VBUS_EN_LSB _u(0) #define USB_USB_PWR_VBUS_EN_ACCESS "RW" // ============================================================================= // Register : USB_USBPHY_DIRECT // Description : This register allows for direct control of the USB phy. Use in // conjunction with usbphy_direct_override register to enable each // override bit. #define USB_USBPHY_DIRECT_OFFSET _u(0x0000007c) #define USB_USBPHY_DIRECT_BITS _u(0x007fff77) #define USB_USBPHY_DIRECT_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_DM_OVV // Description : DM over voltage #define USB_USBPHY_DIRECT_DM_OVV_RESET _u(0x0) #define USB_USBPHY_DIRECT_DM_OVV_BITS _u(0x00400000) #define USB_USBPHY_DIRECT_DM_OVV_MSB _u(22) #define USB_USBPHY_DIRECT_DM_OVV_LSB _u(22) #define USB_USBPHY_DIRECT_DM_OVV_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_DP_OVV // Description : DP over voltage #define USB_USBPHY_DIRECT_DP_OVV_RESET _u(0x0) #define USB_USBPHY_DIRECT_DP_OVV_BITS _u(0x00200000) #define USB_USBPHY_DIRECT_DP_OVV_MSB _u(21) #define USB_USBPHY_DIRECT_DP_OVV_LSB _u(21) #define USB_USBPHY_DIRECT_DP_OVV_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_DM_OVCN // Description : DM overcurrent #define USB_USBPHY_DIRECT_DM_OVCN_RESET _u(0x0) #define USB_USBPHY_DIRECT_DM_OVCN_BITS _u(0x00100000) #define USB_USBPHY_DIRECT_DM_OVCN_MSB _u(20) #define USB_USBPHY_DIRECT_DM_OVCN_LSB _u(20) #define USB_USBPHY_DIRECT_DM_OVCN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_DP_OVCN // Description : DP overcurrent #define USB_USBPHY_DIRECT_DP_OVCN_RESET _u(0x0) #define USB_USBPHY_DIRECT_DP_OVCN_BITS _u(0x00080000) #define USB_USBPHY_DIRECT_DP_OVCN_MSB _u(19) #define USB_USBPHY_DIRECT_DP_OVCN_LSB _u(19) #define USB_USBPHY_DIRECT_DP_OVCN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_RX_DM // Description : DPM pin state #define USB_USBPHY_DIRECT_RX_DM_RESET _u(0x0) #define USB_USBPHY_DIRECT_RX_DM_BITS _u(0x00040000) #define USB_USBPHY_DIRECT_RX_DM_MSB _u(18) #define USB_USBPHY_DIRECT_RX_DM_LSB _u(18) #define USB_USBPHY_DIRECT_RX_DM_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_RX_DP // Description : DPP pin state #define USB_USBPHY_DIRECT_RX_DP_RESET _u(0x0) #define USB_USBPHY_DIRECT_RX_DP_BITS _u(0x00020000) #define USB_USBPHY_DIRECT_RX_DP_MSB _u(17) #define USB_USBPHY_DIRECT_RX_DP_LSB _u(17) #define USB_USBPHY_DIRECT_RX_DP_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_RX_DD // Description : Differential RX #define USB_USBPHY_DIRECT_RX_DD_RESET _u(0x0) #define USB_USBPHY_DIRECT_RX_DD_BITS _u(0x00010000) #define USB_USBPHY_DIRECT_RX_DD_MSB _u(16) #define USB_USBPHY_DIRECT_RX_DD_LSB _u(16) #define USB_USBPHY_DIRECT_RX_DD_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_TX_DIFFMODE // Description : TX_DIFFMODE=0: Single ended mode // TX_DIFFMODE=1: Differential drive mode (TX_DM, TX_DM_OE // ignored) #define USB_USBPHY_DIRECT_TX_DIFFMODE_RESET _u(0x0) #define USB_USBPHY_DIRECT_TX_DIFFMODE_BITS _u(0x00008000) #define USB_USBPHY_DIRECT_TX_DIFFMODE_MSB _u(15) #define USB_USBPHY_DIRECT_TX_DIFFMODE_LSB _u(15) #define USB_USBPHY_DIRECT_TX_DIFFMODE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_TX_FSSLEW // Description : TX_FSSLEW=0: Low speed slew rate // TX_FSSLEW=1: Full speed slew rate #define USB_USBPHY_DIRECT_TX_FSSLEW_RESET _u(0x0) #define USB_USBPHY_DIRECT_TX_FSSLEW_BITS _u(0x00004000) #define USB_USBPHY_DIRECT_TX_FSSLEW_MSB _u(14) #define USB_USBPHY_DIRECT_TX_FSSLEW_LSB _u(14) #define USB_USBPHY_DIRECT_TX_FSSLEW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_TX_PD // Description : TX power down override (if override enable is set). 1 = powered // down. #define USB_USBPHY_DIRECT_TX_PD_RESET _u(0x0) #define USB_USBPHY_DIRECT_TX_PD_BITS _u(0x00002000) #define USB_USBPHY_DIRECT_TX_PD_MSB _u(13) #define USB_USBPHY_DIRECT_TX_PD_LSB _u(13) #define USB_USBPHY_DIRECT_TX_PD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_RX_PD // Description : RX power down override (if override enable is set). 1 = powered // down. #define USB_USBPHY_DIRECT_RX_PD_RESET _u(0x0) #define USB_USBPHY_DIRECT_RX_PD_BITS _u(0x00001000) #define USB_USBPHY_DIRECT_RX_PD_MSB _u(12) #define USB_USBPHY_DIRECT_RX_PD_LSB _u(12) #define USB_USBPHY_DIRECT_RX_PD_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_TX_DM // Description : Output data. TX_DIFFMODE=1, Ignored // TX_DIFFMODE=0, Drives DPM only. TX_DM_OE=1 to enable drive. // DPM=TX_DM #define USB_USBPHY_DIRECT_TX_DM_RESET _u(0x0) #define USB_USBPHY_DIRECT_TX_DM_BITS _u(0x00000800) #define USB_USBPHY_DIRECT_TX_DM_MSB _u(11) #define USB_USBPHY_DIRECT_TX_DM_LSB _u(11) #define USB_USBPHY_DIRECT_TX_DM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_TX_DP // Description : Output data. If TX_DIFFMODE=1, Drives DPP/DPM diff pair. // TX_DP_OE=1 to enable drive. DPP=TX_DP, DPM=~TX_DP // If TX_DIFFMODE=0, Drives DPP only. TX_DP_OE=1 to enable drive. // DPP=TX_DP #define USB_USBPHY_DIRECT_TX_DP_RESET _u(0x0) #define USB_USBPHY_DIRECT_TX_DP_BITS _u(0x00000400) #define USB_USBPHY_DIRECT_TX_DP_MSB _u(10) #define USB_USBPHY_DIRECT_TX_DP_LSB _u(10) #define USB_USBPHY_DIRECT_TX_DP_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_TX_DM_OE // Description : Output enable. If TX_DIFFMODE=1, Ignored. // If TX_DIFFMODE=0, OE for DPM only. 0 - DPM in Hi-Z state; 1 - // DPM driving #define USB_USBPHY_DIRECT_TX_DM_OE_RESET _u(0x0) #define USB_USBPHY_DIRECT_TX_DM_OE_BITS _u(0x00000200) #define USB_USBPHY_DIRECT_TX_DM_OE_MSB _u(9) #define USB_USBPHY_DIRECT_TX_DM_OE_LSB _u(9) #define USB_USBPHY_DIRECT_TX_DM_OE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_TX_DP_OE // Description : Output enable. If TX_DIFFMODE=1, OE for DPP/DPM diff pair. 0 - // DPP/DPM in Hi-Z state; 1 - DPP/DPM driving // If TX_DIFFMODE=0, OE for DPP only. 0 - DPP in Hi-Z state; 1 - // DPP driving #define USB_USBPHY_DIRECT_TX_DP_OE_RESET _u(0x0) #define USB_USBPHY_DIRECT_TX_DP_OE_BITS _u(0x00000100) #define USB_USBPHY_DIRECT_TX_DP_OE_MSB _u(8) #define USB_USBPHY_DIRECT_TX_DP_OE_LSB _u(8) #define USB_USBPHY_DIRECT_TX_DP_OE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_DM_PULLDN_EN // Description : DM pull down enable #define USB_USBPHY_DIRECT_DM_PULLDN_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_DM_PULLDN_EN_BITS _u(0x00000040) #define USB_USBPHY_DIRECT_DM_PULLDN_EN_MSB _u(6) #define USB_USBPHY_DIRECT_DM_PULLDN_EN_LSB _u(6) #define USB_USBPHY_DIRECT_DM_PULLDN_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_DM_PULLUP_EN // Description : DM pull up enable #define USB_USBPHY_DIRECT_DM_PULLUP_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_DM_PULLUP_EN_BITS _u(0x00000020) #define USB_USBPHY_DIRECT_DM_PULLUP_EN_MSB _u(5) #define USB_USBPHY_DIRECT_DM_PULLUP_EN_LSB _u(5) #define USB_USBPHY_DIRECT_DM_PULLUP_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_DM_PULLUP_HISEL // Description : Enable the second DM pull up resistor. 0 - Pull = Rpu2; 1 - // Pull = Rpu1 + Rpu2 #define USB_USBPHY_DIRECT_DM_PULLUP_HISEL_RESET _u(0x0) #define USB_USBPHY_DIRECT_DM_PULLUP_HISEL_BITS _u(0x00000010) #define USB_USBPHY_DIRECT_DM_PULLUP_HISEL_MSB _u(4) #define USB_USBPHY_DIRECT_DM_PULLUP_HISEL_LSB _u(4) #define USB_USBPHY_DIRECT_DM_PULLUP_HISEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_DP_PULLDN_EN // Description : DP pull down enable #define USB_USBPHY_DIRECT_DP_PULLDN_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_DP_PULLDN_EN_BITS _u(0x00000004) #define USB_USBPHY_DIRECT_DP_PULLDN_EN_MSB _u(2) #define USB_USBPHY_DIRECT_DP_PULLDN_EN_LSB _u(2) #define USB_USBPHY_DIRECT_DP_PULLDN_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_DP_PULLUP_EN // Description : DP pull up enable #define USB_USBPHY_DIRECT_DP_PULLUP_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_DP_PULLUP_EN_BITS _u(0x00000002) #define USB_USBPHY_DIRECT_DP_PULLUP_EN_MSB _u(1) #define USB_USBPHY_DIRECT_DP_PULLUP_EN_LSB _u(1) #define USB_USBPHY_DIRECT_DP_PULLUP_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_DP_PULLUP_HISEL // Description : Enable the second DP pull up resistor. 0 - Pull = Rpu2; 1 - // Pull = Rpu1 + Rpu2 #define USB_USBPHY_DIRECT_DP_PULLUP_HISEL_RESET _u(0x0) #define USB_USBPHY_DIRECT_DP_PULLUP_HISEL_BITS _u(0x00000001) #define USB_USBPHY_DIRECT_DP_PULLUP_HISEL_MSB _u(0) #define USB_USBPHY_DIRECT_DP_PULLUP_HISEL_LSB _u(0) #define USB_USBPHY_DIRECT_DP_PULLUP_HISEL_ACCESS "RW" // ============================================================================= // Register : USB_USBPHY_DIRECT_OVERRIDE // Description : Override enable for each control in usbphy_direct #define USB_USBPHY_DIRECT_OVERRIDE_OFFSET _u(0x00000080) #define USB_USBPHY_DIRECT_OVERRIDE_BITS _u(0x00009fff) #define USB_USBPHY_DIRECT_OVERRIDE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_TX_DIFFMODE_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_TX_DIFFMODE_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DIFFMODE_OVERRIDE_EN_BITS _u(0x00008000) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DIFFMODE_OVERRIDE_EN_MSB _u(15) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DIFFMODE_OVERRIDE_EN_LSB _u(15) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DIFFMODE_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_OVERRIDE_EN_BITS _u(0x00001000) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_OVERRIDE_EN_MSB _u(12) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_OVERRIDE_EN_LSB _u(12) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_TX_FSSLEW_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_TX_FSSLEW_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_TX_FSSLEW_OVERRIDE_EN_BITS _u(0x00000800) #define USB_USBPHY_DIRECT_OVERRIDE_TX_FSSLEW_OVERRIDE_EN_MSB _u(11) #define USB_USBPHY_DIRECT_OVERRIDE_TX_FSSLEW_OVERRIDE_EN_LSB _u(11) #define USB_USBPHY_DIRECT_OVERRIDE_TX_FSSLEW_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_TX_PD_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_TX_PD_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_TX_PD_OVERRIDE_EN_BITS _u(0x00000400) #define USB_USBPHY_DIRECT_OVERRIDE_TX_PD_OVERRIDE_EN_MSB _u(10) #define USB_USBPHY_DIRECT_OVERRIDE_TX_PD_OVERRIDE_EN_LSB _u(10) #define USB_USBPHY_DIRECT_OVERRIDE_TX_PD_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_RX_PD_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_RX_PD_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_RX_PD_OVERRIDE_EN_BITS _u(0x00000200) #define USB_USBPHY_DIRECT_OVERRIDE_RX_PD_OVERRIDE_EN_MSB _u(9) #define USB_USBPHY_DIRECT_OVERRIDE_RX_PD_OVERRIDE_EN_LSB _u(9) #define USB_USBPHY_DIRECT_OVERRIDE_RX_PD_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OVERRIDE_EN_BITS _u(0x00000100) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OVERRIDE_EN_MSB _u(8) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OVERRIDE_EN_LSB _u(8) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OVERRIDE_EN_BITS _u(0x00000080) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OVERRIDE_EN_MSB _u(7) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OVERRIDE_EN_LSB _u(7) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OE_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OE_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OE_OVERRIDE_EN_BITS _u(0x00000040) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OE_OVERRIDE_EN_MSB _u(6) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OE_OVERRIDE_EN_LSB _u(6) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OE_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OE_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OE_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OE_OVERRIDE_EN_BITS _u(0x00000020) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OE_OVERRIDE_EN_MSB _u(5) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OE_OVERRIDE_EN_LSB _u(5) #define USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OE_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_DM_PULLDN_EN_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLDN_EN_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLDN_EN_OVERRIDE_EN_BITS _u(0x00000010) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLDN_EN_OVERRIDE_EN_MSB _u(4) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLDN_EN_OVERRIDE_EN_LSB _u(4) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLDN_EN_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_DP_PULLDN_EN_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLDN_EN_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLDN_EN_OVERRIDE_EN_BITS _u(0x00000008) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLDN_EN_OVERRIDE_EN_MSB _u(3) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLDN_EN_OVERRIDE_EN_LSB _u(3) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLDN_EN_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_EN_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_EN_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_EN_OVERRIDE_EN_BITS _u(0x00000004) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_EN_OVERRIDE_EN_MSB _u(2) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_EN_OVERRIDE_EN_LSB _u(2) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_EN_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_HISEL_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_HISEL_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_HISEL_OVERRIDE_EN_BITS _u(0x00000002) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_HISEL_OVERRIDE_EN_MSB _u(1) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_HISEL_OVERRIDE_EN_LSB _u(1) #define USB_USBPHY_DIRECT_OVERRIDE_DM_PULLUP_HISEL_OVERRIDE_EN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_HISEL_OVERRIDE_EN // Description : None #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_HISEL_OVERRIDE_EN_RESET _u(0x0) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_HISEL_OVERRIDE_EN_BITS _u(0x00000001) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_HISEL_OVERRIDE_EN_MSB _u(0) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_HISEL_OVERRIDE_EN_LSB _u(0) #define USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_HISEL_OVERRIDE_EN_ACCESS "RW" // ============================================================================= // Register : USB_USBPHY_TRIM // Description : Used to adjust trim values of USB phy pull down resistors. #define USB_USBPHY_TRIM_OFFSET _u(0x00000084) #define USB_USBPHY_TRIM_BITS _u(0x00001f1f) #define USB_USBPHY_TRIM_RESET _u(0x00001f1f) // ----------------------------------------------------------------------------- // Field : USB_USBPHY_TRIM_DM_PULLDN_TRIM // Description : Value to drive to USB PHY // DM pulldown resistor trim control // Experimental data suggests that the reset value will work, but // this register allows adjustment if required #define USB_USBPHY_TRIM_DM_PULLDN_TRIM_RESET _u(0x1f) #define USB_USBPHY_TRIM_DM_PULLDN_TRIM_BITS _u(0x00001f00) #define USB_USBPHY_TRIM_DM_PULLDN_TRIM_MSB _u(12) #define USB_USBPHY_TRIM_DM_PULLDN_TRIM_LSB _u(8) #define USB_USBPHY_TRIM_DM_PULLDN_TRIM_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_USBPHY_TRIM_DP_PULLDN_TRIM // Description : Value to drive to USB PHY // DP pulldown resistor trim control // Experimental data suggests that the reset value will work, but // this register allows adjustment if required #define USB_USBPHY_TRIM_DP_PULLDN_TRIM_RESET _u(0x1f) #define USB_USBPHY_TRIM_DP_PULLDN_TRIM_BITS _u(0x0000001f) #define USB_USBPHY_TRIM_DP_PULLDN_TRIM_MSB _u(4) #define USB_USBPHY_TRIM_DP_PULLDN_TRIM_LSB _u(0) #define USB_USBPHY_TRIM_DP_PULLDN_TRIM_ACCESS "RW" // ============================================================================= // Register : USB_INTR // Description : Raw Interrupts #define USB_INTR_OFFSET _u(0x0000008c) #define USB_INTR_BITS _u(0x000fffff) #define USB_INTR_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_INTR_EP_STALL_NAK // Description : Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by // clearing all bits in EP_STATUS_STALL_NAK. #define USB_INTR_EP_STALL_NAK_RESET _u(0x0) #define USB_INTR_EP_STALL_NAK_BITS _u(0x00080000) #define USB_INTR_EP_STALL_NAK_MSB _u(19) #define USB_INTR_EP_STALL_NAK_LSB _u(19) #define USB_INTR_EP_STALL_NAK_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_ABORT_DONE // Description : Raised when any bit in ABORT_DONE is set. Clear by clearing all // bits in ABORT_DONE. #define USB_INTR_ABORT_DONE_RESET _u(0x0) #define USB_INTR_ABORT_DONE_BITS _u(0x00040000) #define USB_INTR_ABORT_DONE_MSB _u(18) #define USB_INTR_ABORT_DONE_LSB _u(18) #define USB_INTR_ABORT_DONE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_DEV_SOF // Description : Set every time the device receives a SOF (Start of Frame) // packet. Cleared by reading SOF_RD #define USB_INTR_DEV_SOF_RESET _u(0x0) #define USB_INTR_DEV_SOF_BITS _u(0x00020000) #define USB_INTR_DEV_SOF_MSB _u(17) #define USB_INTR_DEV_SOF_LSB _u(17) #define USB_INTR_DEV_SOF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_SETUP_REQ // Description : Device. Source: SIE_STATUS.SETUP_REC #define USB_INTR_SETUP_REQ_RESET _u(0x0) #define USB_INTR_SETUP_REQ_BITS _u(0x00010000) #define USB_INTR_SETUP_REQ_MSB _u(16) #define USB_INTR_SETUP_REQ_LSB _u(16) #define USB_INTR_SETUP_REQ_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_DEV_RESUME_FROM_HOST // Description : Set when the device receives a resume from the host. Cleared by // writing to SIE_STATUS.RESUME #define USB_INTR_DEV_RESUME_FROM_HOST_RESET _u(0x0) #define USB_INTR_DEV_RESUME_FROM_HOST_BITS _u(0x00008000) #define USB_INTR_DEV_RESUME_FROM_HOST_MSB _u(15) #define USB_INTR_DEV_RESUME_FROM_HOST_LSB _u(15) #define USB_INTR_DEV_RESUME_FROM_HOST_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_DEV_SUSPEND // Description : Set when the device suspend state changes. Cleared by writing // to SIE_STATUS.SUSPENDED #define USB_INTR_DEV_SUSPEND_RESET _u(0x0) #define USB_INTR_DEV_SUSPEND_BITS _u(0x00004000) #define USB_INTR_DEV_SUSPEND_MSB _u(14) #define USB_INTR_DEV_SUSPEND_LSB _u(14) #define USB_INTR_DEV_SUSPEND_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_DEV_CONN_DIS // Description : Set when the device connection state changes. Cleared by // writing to SIE_STATUS.CONNECTED #define USB_INTR_DEV_CONN_DIS_RESET _u(0x0) #define USB_INTR_DEV_CONN_DIS_BITS _u(0x00002000) #define USB_INTR_DEV_CONN_DIS_MSB _u(13) #define USB_INTR_DEV_CONN_DIS_LSB _u(13) #define USB_INTR_DEV_CONN_DIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_BUS_RESET // Description : Source: SIE_STATUS.BUS_RESET #define USB_INTR_BUS_RESET_RESET _u(0x0) #define USB_INTR_BUS_RESET_BITS _u(0x00001000) #define USB_INTR_BUS_RESET_MSB _u(12) #define USB_INTR_BUS_RESET_LSB _u(12) #define USB_INTR_BUS_RESET_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_VBUS_DETECT // Description : Source: SIE_STATUS.VBUS_DETECTED #define USB_INTR_VBUS_DETECT_RESET _u(0x0) #define USB_INTR_VBUS_DETECT_BITS _u(0x00000800) #define USB_INTR_VBUS_DETECT_MSB _u(11) #define USB_INTR_VBUS_DETECT_LSB _u(11) #define USB_INTR_VBUS_DETECT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_STALL // Description : Source: SIE_STATUS.STALL_REC #define USB_INTR_STALL_RESET _u(0x0) #define USB_INTR_STALL_BITS _u(0x00000400) #define USB_INTR_STALL_MSB _u(10) #define USB_INTR_STALL_LSB _u(10) #define USB_INTR_STALL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_ERROR_CRC // Description : Source: SIE_STATUS.CRC_ERROR #define USB_INTR_ERROR_CRC_RESET _u(0x0) #define USB_INTR_ERROR_CRC_BITS _u(0x00000200) #define USB_INTR_ERROR_CRC_MSB _u(9) #define USB_INTR_ERROR_CRC_LSB _u(9) #define USB_INTR_ERROR_CRC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_ERROR_BIT_STUFF // Description : Source: SIE_STATUS.BIT_STUFF_ERROR #define USB_INTR_ERROR_BIT_STUFF_RESET _u(0x0) #define USB_INTR_ERROR_BIT_STUFF_BITS _u(0x00000100) #define USB_INTR_ERROR_BIT_STUFF_MSB _u(8) #define USB_INTR_ERROR_BIT_STUFF_LSB _u(8) #define USB_INTR_ERROR_BIT_STUFF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_ERROR_RX_OVERFLOW // Description : Source: SIE_STATUS.RX_OVERFLOW #define USB_INTR_ERROR_RX_OVERFLOW_RESET _u(0x0) #define USB_INTR_ERROR_RX_OVERFLOW_BITS _u(0x00000080) #define USB_INTR_ERROR_RX_OVERFLOW_MSB _u(7) #define USB_INTR_ERROR_RX_OVERFLOW_LSB _u(7) #define USB_INTR_ERROR_RX_OVERFLOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_ERROR_RX_TIMEOUT // Description : Source: SIE_STATUS.RX_TIMEOUT #define USB_INTR_ERROR_RX_TIMEOUT_RESET _u(0x0) #define USB_INTR_ERROR_RX_TIMEOUT_BITS _u(0x00000040) #define USB_INTR_ERROR_RX_TIMEOUT_MSB _u(6) #define USB_INTR_ERROR_RX_TIMEOUT_LSB _u(6) #define USB_INTR_ERROR_RX_TIMEOUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_ERROR_DATA_SEQ // Description : Source: SIE_STATUS.DATA_SEQ_ERROR #define USB_INTR_ERROR_DATA_SEQ_RESET _u(0x0) #define USB_INTR_ERROR_DATA_SEQ_BITS _u(0x00000020) #define USB_INTR_ERROR_DATA_SEQ_MSB _u(5) #define USB_INTR_ERROR_DATA_SEQ_LSB _u(5) #define USB_INTR_ERROR_DATA_SEQ_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_BUFF_STATUS // Description : Raised when any bit in BUFF_STATUS is set. Clear by clearing // all bits in BUFF_STATUS. #define USB_INTR_BUFF_STATUS_RESET _u(0x0) #define USB_INTR_BUFF_STATUS_BITS _u(0x00000010) #define USB_INTR_BUFF_STATUS_MSB _u(4) #define USB_INTR_BUFF_STATUS_LSB _u(4) #define USB_INTR_BUFF_STATUS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_TRANS_COMPLETE // Description : Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by // writing to this bit. #define USB_INTR_TRANS_COMPLETE_RESET _u(0x0) #define USB_INTR_TRANS_COMPLETE_BITS _u(0x00000008) #define USB_INTR_TRANS_COMPLETE_MSB _u(3) #define USB_INTR_TRANS_COMPLETE_LSB _u(3) #define USB_INTR_TRANS_COMPLETE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_HOST_SOF // Description : Host: raised every time the host sends a SOF (Start of Frame). // Cleared by reading SOF_RD #define USB_INTR_HOST_SOF_RESET _u(0x0) #define USB_INTR_HOST_SOF_BITS _u(0x00000004) #define USB_INTR_HOST_SOF_MSB _u(2) #define USB_INTR_HOST_SOF_LSB _u(2) #define USB_INTR_HOST_SOF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_HOST_RESUME // Description : Host: raised when a device wakes up the host. Cleared by // writing to SIE_STATUS.RESUME #define USB_INTR_HOST_RESUME_RESET _u(0x0) #define USB_INTR_HOST_RESUME_BITS _u(0x00000002) #define USB_INTR_HOST_RESUME_MSB _u(1) #define USB_INTR_HOST_RESUME_LSB _u(1) #define USB_INTR_HOST_RESUME_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTR_HOST_CONN_DIS // Description : Host: raised when a device is connected or disconnected (i.e. // when SIE_STATUS.SPEED changes). Cleared by writing to // SIE_STATUS.SPEED #define USB_INTR_HOST_CONN_DIS_RESET _u(0x0) #define USB_INTR_HOST_CONN_DIS_BITS _u(0x00000001) #define USB_INTR_HOST_CONN_DIS_MSB _u(0) #define USB_INTR_HOST_CONN_DIS_LSB _u(0) #define USB_INTR_HOST_CONN_DIS_ACCESS "RO" // ============================================================================= // Register : USB_INTE // Description : Interrupt Enable #define USB_INTE_OFFSET _u(0x00000090) #define USB_INTE_BITS _u(0x000fffff) #define USB_INTE_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_INTE_EP_STALL_NAK // Description : Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by // clearing all bits in EP_STATUS_STALL_NAK. #define USB_INTE_EP_STALL_NAK_RESET _u(0x0) #define USB_INTE_EP_STALL_NAK_BITS _u(0x00080000) #define USB_INTE_EP_STALL_NAK_MSB _u(19) #define USB_INTE_EP_STALL_NAK_LSB _u(19) #define USB_INTE_EP_STALL_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_ABORT_DONE // Description : Raised when any bit in ABORT_DONE is set. Clear by clearing all // bits in ABORT_DONE. #define USB_INTE_ABORT_DONE_RESET _u(0x0) #define USB_INTE_ABORT_DONE_BITS _u(0x00040000) #define USB_INTE_ABORT_DONE_MSB _u(18) #define USB_INTE_ABORT_DONE_LSB _u(18) #define USB_INTE_ABORT_DONE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_DEV_SOF // Description : Set every time the device receives a SOF (Start of Frame) // packet. Cleared by reading SOF_RD #define USB_INTE_DEV_SOF_RESET _u(0x0) #define USB_INTE_DEV_SOF_BITS _u(0x00020000) #define USB_INTE_DEV_SOF_MSB _u(17) #define USB_INTE_DEV_SOF_LSB _u(17) #define USB_INTE_DEV_SOF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_SETUP_REQ // Description : Device. Source: SIE_STATUS.SETUP_REC #define USB_INTE_SETUP_REQ_RESET _u(0x0) #define USB_INTE_SETUP_REQ_BITS _u(0x00010000) #define USB_INTE_SETUP_REQ_MSB _u(16) #define USB_INTE_SETUP_REQ_LSB _u(16) #define USB_INTE_SETUP_REQ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_DEV_RESUME_FROM_HOST // Description : Set when the device receives a resume from the host. Cleared by // writing to SIE_STATUS.RESUME #define USB_INTE_DEV_RESUME_FROM_HOST_RESET _u(0x0) #define USB_INTE_DEV_RESUME_FROM_HOST_BITS _u(0x00008000) #define USB_INTE_DEV_RESUME_FROM_HOST_MSB _u(15) #define USB_INTE_DEV_RESUME_FROM_HOST_LSB _u(15) #define USB_INTE_DEV_RESUME_FROM_HOST_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_DEV_SUSPEND // Description : Set when the device suspend state changes. Cleared by writing // to SIE_STATUS.SUSPENDED #define USB_INTE_DEV_SUSPEND_RESET _u(0x0) #define USB_INTE_DEV_SUSPEND_BITS _u(0x00004000) #define USB_INTE_DEV_SUSPEND_MSB _u(14) #define USB_INTE_DEV_SUSPEND_LSB _u(14) #define USB_INTE_DEV_SUSPEND_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_DEV_CONN_DIS // Description : Set when the device connection state changes. Cleared by // writing to SIE_STATUS.CONNECTED #define USB_INTE_DEV_CONN_DIS_RESET _u(0x0) #define USB_INTE_DEV_CONN_DIS_BITS _u(0x00002000) #define USB_INTE_DEV_CONN_DIS_MSB _u(13) #define USB_INTE_DEV_CONN_DIS_LSB _u(13) #define USB_INTE_DEV_CONN_DIS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_BUS_RESET // Description : Source: SIE_STATUS.BUS_RESET #define USB_INTE_BUS_RESET_RESET _u(0x0) #define USB_INTE_BUS_RESET_BITS _u(0x00001000) #define USB_INTE_BUS_RESET_MSB _u(12) #define USB_INTE_BUS_RESET_LSB _u(12) #define USB_INTE_BUS_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_VBUS_DETECT // Description : Source: SIE_STATUS.VBUS_DETECTED #define USB_INTE_VBUS_DETECT_RESET _u(0x0) #define USB_INTE_VBUS_DETECT_BITS _u(0x00000800) #define USB_INTE_VBUS_DETECT_MSB _u(11) #define USB_INTE_VBUS_DETECT_LSB _u(11) #define USB_INTE_VBUS_DETECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_STALL // Description : Source: SIE_STATUS.STALL_REC #define USB_INTE_STALL_RESET _u(0x0) #define USB_INTE_STALL_BITS _u(0x00000400) #define USB_INTE_STALL_MSB _u(10) #define USB_INTE_STALL_LSB _u(10) #define USB_INTE_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_ERROR_CRC // Description : Source: SIE_STATUS.CRC_ERROR #define USB_INTE_ERROR_CRC_RESET _u(0x0) #define USB_INTE_ERROR_CRC_BITS _u(0x00000200) #define USB_INTE_ERROR_CRC_MSB _u(9) #define USB_INTE_ERROR_CRC_LSB _u(9) #define USB_INTE_ERROR_CRC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_ERROR_BIT_STUFF // Description : Source: SIE_STATUS.BIT_STUFF_ERROR #define USB_INTE_ERROR_BIT_STUFF_RESET _u(0x0) #define USB_INTE_ERROR_BIT_STUFF_BITS _u(0x00000100) #define USB_INTE_ERROR_BIT_STUFF_MSB _u(8) #define USB_INTE_ERROR_BIT_STUFF_LSB _u(8) #define USB_INTE_ERROR_BIT_STUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_ERROR_RX_OVERFLOW // Description : Source: SIE_STATUS.RX_OVERFLOW #define USB_INTE_ERROR_RX_OVERFLOW_RESET _u(0x0) #define USB_INTE_ERROR_RX_OVERFLOW_BITS _u(0x00000080) #define USB_INTE_ERROR_RX_OVERFLOW_MSB _u(7) #define USB_INTE_ERROR_RX_OVERFLOW_LSB _u(7) #define USB_INTE_ERROR_RX_OVERFLOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_ERROR_RX_TIMEOUT // Description : Source: SIE_STATUS.RX_TIMEOUT #define USB_INTE_ERROR_RX_TIMEOUT_RESET _u(0x0) #define USB_INTE_ERROR_RX_TIMEOUT_BITS _u(0x00000040) #define USB_INTE_ERROR_RX_TIMEOUT_MSB _u(6) #define USB_INTE_ERROR_RX_TIMEOUT_LSB _u(6) #define USB_INTE_ERROR_RX_TIMEOUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_ERROR_DATA_SEQ // Description : Source: SIE_STATUS.DATA_SEQ_ERROR #define USB_INTE_ERROR_DATA_SEQ_RESET _u(0x0) #define USB_INTE_ERROR_DATA_SEQ_BITS _u(0x00000020) #define USB_INTE_ERROR_DATA_SEQ_MSB _u(5) #define USB_INTE_ERROR_DATA_SEQ_LSB _u(5) #define USB_INTE_ERROR_DATA_SEQ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_BUFF_STATUS // Description : Raised when any bit in BUFF_STATUS is set. Clear by clearing // all bits in BUFF_STATUS. #define USB_INTE_BUFF_STATUS_RESET _u(0x0) #define USB_INTE_BUFF_STATUS_BITS _u(0x00000010) #define USB_INTE_BUFF_STATUS_MSB _u(4) #define USB_INTE_BUFF_STATUS_LSB _u(4) #define USB_INTE_BUFF_STATUS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_TRANS_COMPLETE // Description : Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by // writing to this bit. #define USB_INTE_TRANS_COMPLETE_RESET _u(0x0) #define USB_INTE_TRANS_COMPLETE_BITS _u(0x00000008) #define USB_INTE_TRANS_COMPLETE_MSB _u(3) #define USB_INTE_TRANS_COMPLETE_LSB _u(3) #define USB_INTE_TRANS_COMPLETE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_HOST_SOF // Description : Host: raised every time the host sends a SOF (Start of Frame). // Cleared by reading SOF_RD #define USB_INTE_HOST_SOF_RESET _u(0x0) #define USB_INTE_HOST_SOF_BITS _u(0x00000004) #define USB_INTE_HOST_SOF_MSB _u(2) #define USB_INTE_HOST_SOF_LSB _u(2) #define USB_INTE_HOST_SOF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_HOST_RESUME // Description : Host: raised when a device wakes up the host. Cleared by // writing to SIE_STATUS.RESUME #define USB_INTE_HOST_RESUME_RESET _u(0x0) #define USB_INTE_HOST_RESUME_BITS _u(0x00000002) #define USB_INTE_HOST_RESUME_MSB _u(1) #define USB_INTE_HOST_RESUME_LSB _u(1) #define USB_INTE_HOST_RESUME_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTE_HOST_CONN_DIS // Description : Host: raised when a device is connected or disconnected (i.e. // when SIE_STATUS.SPEED changes). Cleared by writing to // SIE_STATUS.SPEED #define USB_INTE_HOST_CONN_DIS_RESET _u(0x0) #define USB_INTE_HOST_CONN_DIS_BITS _u(0x00000001) #define USB_INTE_HOST_CONN_DIS_MSB _u(0) #define USB_INTE_HOST_CONN_DIS_LSB _u(0) #define USB_INTE_HOST_CONN_DIS_ACCESS "RW" // ============================================================================= // Register : USB_INTF // Description : Interrupt Force #define USB_INTF_OFFSET _u(0x00000094) #define USB_INTF_BITS _u(0x000fffff) #define USB_INTF_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_INTF_EP_STALL_NAK // Description : Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by // clearing all bits in EP_STATUS_STALL_NAK. #define USB_INTF_EP_STALL_NAK_RESET _u(0x0) #define USB_INTF_EP_STALL_NAK_BITS _u(0x00080000) #define USB_INTF_EP_STALL_NAK_MSB _u(19) #define USB_INTF_EP_STALL_NAK_LSB _u(19) #define USB_INTF_EP_STALL_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_ABORT_DONE // Description : Raised when any bit in ABORT_DONE is set. Clear by clearing all // bits in ABORT_DONE. #define USB_INTF_ABORT_DONE_RESET _u(0x0) #define USB_INTF_ABORT_DONE_BITS _u(0x00040000) #define USB_INTF_ABORT_DONE_MSB _u(18) #define USB_INTF_ABORT_DONE_LSB _u(18) #define USB_INTF_ABORT_DONE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_DEV_SOF // Description : Set every time the device receives a SOF (Start of Frame) // packet. Cleared by reading SOF_RD #define USB_INTF_DEV_SOF_RESET _u(0x0) #define USB_INTF_DEV_SOF_BITS _u(0x00020000) #define USB_INTF_DEV_SOF_MSB _u(17) #define USB_INTF_DEV_SOF_LSB _u(17) #define USB_INTF_DEV_SOF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_SETUP_REQ // Description : Device. Source: SIE_STATUS.SETUP_REC #define USB_INTF_SETUP_REQ_RESET _u(0x0) #define USB_INTF_SETUP_REQ_BITS _u(0x00010000) #define USB_INTF_SETUP_REQ_MSB _u(16) #define USB_INTF_SETUP_REQ_LSB _u(16) #define USB_INTF_SETUP_REQ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_DEV_RESUME_FROM_HOST // Description : Set when the device receives a resume from the host. Cleared by // writing to SIE_STATUS.RESUME #define USB_INTF_DEV_RESUME_FROM_HOST_RESET _u(0x0) #define USB_INTF_DEV_RESUME_FROM_HOST_BITS _u(0x00008000) #define USB_INTF_DEV_RESUME_FROM_HOST_MSB _u(15) #define USB_INTF_DEV_RESUME_FROM_HOST_LSB _u(15) #define USB_INTF_DEV_RESUME_FROM_HOST_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_DEV_SUSPEND // Description : Set when the device suspend state changes. Cleared by writing // to SIE_STATUS.SUSPENDED #define USB_INTF_DEV_SUSPEND_RESET _u(0x0) #define USB_INTF_DEV_SUSPEND_BITS _u(0x00004000) #define USB_INTF_DEV_SUSPEND_MSB _u(14) #define USB_INTF_DEV_SUSPEND_LSB _u(14) #define USB_INTF_DEV_SUSPEND_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_DEV_CONN_DIS // Description : Set when the device connection state changes. Cleared by // writing to SIE_STATUS.CONNECTED #define USB_INTF_DEV_CONN_DIS_RESET _u(0x0) #define USB_INTF_DEV_CONN_DIS_BITS _u(0x00002000) #define USB_INTF_DEV_CONN_DIS_MSB _u(13) #define USB_INTF_DEV_CONN_DIS_LSB _u(13) #define USB_INTF_DEV_CONN_DIS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_BUS_RESET // Description : Source: SIE_STATUS.BUS_RESET #define USB_INTF_BUS_RESET_RESET _u(0x0) #define USB_INTF_BUS_RESET_BITS _u(0x00001000) #define USB_INTF_BUS_RESET_MSB _u(12) #define USB_INTF_BUS_RESET_LSB _u(12) #define USB_INTF_BUS_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_VBUS_DETECT // Description : Source: SIE_STATUS.VBUS_DETECTED #define USB_INTF_VBUS_DETECT_RESET _u(0x0) #define USB_INTF_VBUS_DETECT_BITS _u(0x00000800) #define USB_INTF_VBUS_DETECT_MSB _u(11) #define USB_INTF_VBUS_DETECT_LSB _u(11) #define USB_INTF_VBUS_DETECT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_STALL // Description : Source: SIE_STATUS.STALL_REC #define USB_INTF_STALL_RESET _u(0x0) #define USB_INTF_STALL_BITS _u(0x00000400) #define USB_INTF_STALL_MSB _u(10) #define USB_INTF_STALL_LSB _u(10) #define USB_INTF_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_ERROR_CRC // Description : Source: SIE_STATUS.CRC_ERROR #define USB_INTF_ERROR_CRC_RESET _u(0x0) #define USB_INTF_ERROR_CRC_BITS _u(0x00000200) #define USB_INTF_ERROR_CRC_MSB _u(9) #define USB_INTF_ERROR_CRC_LSB _u(9) #define USB_INTF_ERROR_CRC_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_ERROR_BIT_STUFF // Description : Source: SIE_STATUS.BIT_STUFF_ERROR #define USB_INTF_ERROR_BIT_STUFF_RESET _u(0x0) #define USB_INTF_ERROR_BIT_STUFF_BITS _u(0x00000100) #define USB_INTF_ERROR_BIT_STUFF_MSB _u(8) #define USB_INTF_ERROR_BIT_STUFF_LSB _u(8) #define USB_INTF_ERROR_BIT_STUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_ERROR_RX_OVERFLOW // Description : Source: SIE_STATUS.RX_OVERFLOW #define USB_INTF_ERROR_RX_OVERFLOW_RESET _u(0x0) #define USB_INTF_ERROR_RX_OVERFLOW_BITS _u(0x00000080) #define USB_INTF_ERROR_RX_OVERFLOW_MSB _u(7) #define USB_INTF_ERROR_RX_OVERFLOW_LSB _u(7) #define USB_INTF_ERROR_RX_OVERFLOW_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_ERROR_RX_TIMEOUT // Description : Source: SIE_STATUS.RX_TIMEOUT #define USB_INTF_ERROR_RX_TIMEOUT_RESET _u(0x0) #define USB_INTF_ERROR_RX_TIMEOUT_BITS _u(0x00000040) #define USB_INTF_ERROR_RX_TIMEOUT_MSB _u(6) #define USB_INTF_ERROR_RX_TIMEOUT_LSB _u(6) #define USB_INTF_ERROR_RX_TIMEOUT_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_ERROR_DATA_SEQ // Description : Source: SIE_STATUS.DATA_SEQ_ERROR #define USB_INTF_ERROR_DATA_SEQ_RESET _u(0x0) #define USB_INTF_ERROR_DATA_SEQ_BITS _u(0x00000020) #define USB_INTF_ERROR_DATA_SEQ_MSB _u(5) #define USB_INTF_ERROR_DATA_SEQ_LSB _u(5) #define USB_INTF_ERROR_DATA_SEQ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_BUFF_STATUS // Description : Raised when any bit in BUFF_STATUS is set. Clear by clearing // all bits in BUFF_STATUS. #define USB_INTF_BUFF_STATUS_RESET _u(0x0) #define USB_INTF_BUFF_STATUS_BITS _u(0x00000010) #define USB_INTF_BUFF_STATUS_MSB _u(4) #define USB_INTF_BUFF_STATUS_LSB _u(4) #define USB_INTF_BUFF_STATUS_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_TRANS_COMPLETE // Description : Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by // writing to this bit. #define USB_INTF_TRANS_COMPLETE_RESET _u(0x0) #define USB_INTF_TRANS_COMPLETE_BITS _u(0x00000008) #define USB_INTF_TRANS_COMPLETE_MSB _u(3) #define USB_INTF_TRANS_COMPLETE_LSB _u(3) #define USB_INTF_TRANS_COMPLETE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_HOST_SOF // Description : Host: raised every time the host sends a SOF (Start of Frame). // Cleared by reading SOF_RD #define USB_INTF_HOST_SOF_RESET _u(0x0) #define USB_INTF_HOST_SOF_BITS _u(0x00000004) #define USB_INTF_HOST_SOF_MSB _u(2) #define USB_INTF_HOST_SOF_LSB _u(2) #define USB_INTF_HOST_SOF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_HOST_RESUME // Description : Host: raised when a device wakes up the host. Cleared by // writing to SIE_STATUS.RESUME #define USB_INTF_HOST_RESUME_RESET _u(0x0) #define USB_INTF_HOST_RESUME_BITS _u(0x00000002) #define USB_INTF_HOST_RESUME_MSB _u(1) #define USB_INTF_HOST_RESUME_LSB _u(1) #define USB_INTF_HOST_RESUME_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_INTF_HOST_CONN_DIS // Description : Host: raised when a device is connected or disconnected (i.e. // when SIE_STATUS.SPEED changes). Cleared by writing to // SIE_STATUS.SPEED #define USB_INTF_HOST_CONN_DIS_RESET _u(0x0) #define USB_INTF_HOST_CONN_DIS_BITS _u(0x00000001) #define USB_INTF_HOST_CONN_DIS_MSB _u(0) #define USB_INTF_HOST_CONN_DIS_LSB _u(0) #define USB_INTF_HOST_CONN_DIS_ACCESS "RW" // ============================================================================= // Register : USB_INTS // Description : Interrupt status after masking & forcing #define USB_INTS_OFFSET _u(0x00000098) #define USB_INTS_BITS _u(0x000fffff) #define USB_INTS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_INTS_EP_STALL_NAK // Description : Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by // clearing all bits in EP_STATUS_STALL_NAK. #define USB_INTS_EP_STALL_NAK_RESET _u(0x0) #define USB_INTS_EP_STALL_NAK_BITS _u(0x00080000) #define USB_INTS_EP_STALL_NAK_MSB _u(19) #define USB_INTS_EP_STALL_NAK_LSB _u(19) #define USB_INTS_EP_STALL_NAK_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_ABORT_DONE // Description : Raised when any bit in ABORT_DONE is set. Clear by clearing all // bits in ABORT_DONE. #define USB_INTS_ABORT_DONE_RESET _u(0x0) #define USB_INTS_ABORT_DONE_BITS _u(0x00040000) #define USB_INTS_ABORT_DONE_MSB _u(18) #define USB_INTS_ABORT_DONE_LSB _u(18) #define USB_INTS_ABORT_DONE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_DEV_SOF // Description : Set every time the device receives a SOF (Start of Frame) // packet. Cleared by reading SOF_RD #define USB_INTS_DEV_SOF_RESET _u(0x0) #define USB_INTS_DEV_SOF_BITS _u(0x00020000) #define USB_INTS_DEV_SOF_MSB _u(17) #define USB_INTS_DEV_SOF_LSB _u(17) #define USB_INTS_DEV_SOF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_SETUP_REQ // Description : Device. Source: SIE_STATUS.SETUP_REC #define USB_INTS_SETUP_REQ_RESET _u(0x0) #define USB_INTS_SETUP_REQ_BITS _u(0x00010000) #define USB_INTS_SETUP_REQ_MSB _u(16) #define USB_INTS_SETUP_REQ_LSB _u(16) #define USB_INTS_SETUP_REQ_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_DEV_RESUME_FROM_HOST // Description : Set when the device receives a resume from the host. Cleared by // writing to SIE_STATUS.RESUME #define USB_INTS_DEV_RESUME_FROM_HOST_RESET _u(0x0) #define USB_INTS_DEV_RESUME_FROM_HOST_BITS _u(0x00008000) #define USB_INTS_DEV_RESUME_FROM_HOST_MSB _u(15) #define USB_INTS_DEV_RESUME_FROM_HOST_LSB _u(15) #define USB_INTS_DEV_RESUME_FROM_HOST_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_DEV_SUSPEND // Description : Set when the device suspend state changes. Cleared by writing // to SIE_STATUS.SUSPENDED #define USB_INTS_DEV_SUSPEND_RESET _u(0x0) #define USB_INTS_DEV_SUSPEND_BITS _u(0x00004000) #define USB_INTS_DEV_SUSPEND_MSB _u(14) #define USB_INTS_DEV_SUSPEND_LSB _u(14) #define USB_INTS_DEV_SUSPEND_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_DEV_CONN_DIS // Description : Set when the device connection state changes. Cleared by // writing to SIE_STATUS.CONNECTED #define USB_INTS_DEV_CONN_DIS_RESET _u(0x0) #define USB_INTS_DEV_CONN_DIS_BITS _u(0x00002000) #define USB_INTS_DEV_CONN_DIS_MSB _u(13) #define USB_INTS_DEV_CONN_DIS_LSB _u(13) #define USB_INTS_DEV_CONN_DIS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_BUS_RESET // Description : Source: SIE_STATUS.BUS_RESET #define USB_INTS_BUS_RESET_RESET _u(0x0) #define USB_INTS_BUS_RESET_BITS _u(0x00001000) #define USB_INTS_BUS_RESET_MSB _u(12) #define USB_INTS_BUS_RESET_LSB _u(12) #define USB_INTS_BUS_RESET_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_VBUS_DETECT // Description : Source: SIE_STATUS.VBUS_DETECTED #define USB_INTS_VBUS_DETECT_RESET _u(0x0) #define USB_INTS_VBUS_DETECT_BITS _u(0x00000800) #define USB_INTS_VBUS_DETECT_MSB _u(11) #define USB_INTS_VBUS_DETECT_LSB _u(11) #define USB_INTS_VBUS_DETECT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_STALL // Description : Source: SIE_STATUS.STALL_REC #define USB_INTS_STALL_RESET _u(0x0) #define USB_INTS_STALL_BITS _u(0x00000400) #define USB_INTS_STALL_MSB _u(10) #define USB_INTS_STALL_LSB _u(10) #define USB_INTS_STALL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_ERROR_CRC // Description : Source: SIE_STATUS.CRC_ERROR #define USB_INTS_ERROR_CRC_RESET _u(0x0) #define USB_INTS_ERROR_CRC_BITS _u(0x00000200) #define USB_INTS_ERROR_CRC_MSB _u(9) #define USB_INTS_ERROR_CRC_LSB _u(9) #define USB_INTS_ERROR_CRC_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_ERROR_BIT_STUFF // Description : Source: SIE_STATUS.BIT_STUFF_ERROR #define USB_INTS_ERROR_BIT_STUFF_RESET _u(0x0) #define USB_INTS_ERROR_BIT_STUFF_BITS _u(0x00000100) #define USB_INTS_ERROR_BIT_STUFF_MSB _u(8) #define USB_INTS_ERROR_BIT_STUFF_LSB _u(8) #define USB_INTS_ERROR_BIT_STUFF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_ERROR_RX_OVERFLOW // Description : Source: SIE_STATUS.RX_OVERFLOW #define USB_INTS_ERROR_RX_OVERFLOW_RESET _u(0x0) #define USB_INTS_ERROR_RX_OVERFLOW_BITS _u(0x00000080) #define USB_INTS_ERROR_RX_OVERFLOW_MSB _u(7) #define USB_INTS_ERROR_RX_OVERFLOW_LSB _u(7) #define USB_INTS_ERROR_RX_OVERFLOW_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_ERROR_RX_TIMEOUT // Description : Source: SIE_STATUS.RX_TIMEOUT #define USB_INTS_ERROR_RX_TIMEOUT_RESET _u(0x0) #define USB_INTS_ERROR_RX_TIMEOUT_BITS _u(0x00000040) #define USB_INTS_ERROR_RX_TIMEOUT_MSB _u(6) #define USB_INTS_ERROR_RX_TIMEOUT_LSB _u(6) #define USB_INTS_ERROR_RX_TIMEOUT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_ERROR_DATA_SEQ // Description : Source: SIE_STATUS.DATA_SEQ_ERROR #define USB_INTS_ERROR_DATA_SEQ_RESET _u(0x0) #define USB_INTS_ERROR_DATA_SEQ_BITS _u(0x00000020) #define USB_INTS_ERROR_DATA_SEQ_MSB _u(5) #define USB_INTS_ERROR_DATA_SEQ_LSB _u(5) #define USB_INTS_ERROR_DATA_SEQ_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_BUFF_STATUS // Description : Raised when any bit in BUFF_STATUS is set. Clear by clearing // all bits in BUFF_STATUS. #define USB_INTS_BUFF_STATUS_RESET _u(0x0) #define USB_INTS_BUFF_STATUS_BITS _u(0x00000010) #define USB_INTS_BUFF_STATUS_MSB _u(4) #define USB_INTS_BUFF_STATUS_LSB _u(4) #define USB_INTS_BUFF_STATUS_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_TRANS_COMPLETE // Description : Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by // writing to this bit. #define USB_INTS_TRANS_COMPLETE_RESET _u(0x0) #define USB_INTS_TRANS_COMPLETE_BITS _u(0x00000008) #define USB_INTS_TRANS_COMPLETE_MSB _u(3) #define USB_INTS_TRANS_COMPLETE_LSB _u(3) #define USB_INTS_TRANS_COMPLETE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_HOST_SOF // Description : Host: raised every time the host sends a SOF (Start of Frame). // Cleared by reading SOF_RD #define USB_INTS_HOST_SOF_RESET _u(0x0) #define USB_INTS_HOST_SOF_BITS _u(0x00000004) #define USB_INTS_HOST_SOF_MSB _u(2) #define USB_INTS_HOST_SOF_LSB _u(2) #define USB_INTS_HOST_SOF_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_HOST_RESUME // Description : Host: raised when a device wakes up the host. Cleared by // writing to SIE_STATUS.RESUME #define USB_INTS_HOST_RESUME_RESET _u(0x0) #define USB_INTS_HOST_RESUME_BITS _u(0x00000002) #define USB_INTS_HOST_RESUME_MSB _u(1) #define USB_INTS_HOST_RESUME_LSB _u(1) #define USB_INTS_HOST_RESUME_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : USB_INTS_HOST_CONN_DIS // Description : Host: raised when a device is connected or disconnected (i.e. // when SIE_STATUS.SPEED changes). Cleared by writing to // SIE_STATUS.SPEED #define USB_INTS_HOST_CONN_DIS_RESET _u(0x0) #define USB_INTS_HOST_CONN_DIS_BITS _u(0x00000001) #define USB_INTS_HOST_CONN_DIS_MSB _u(0) #define USB_INTS_HOST_CONN_DIS_LSB _u(0) #define USB_INTS_HOST_CONN_DIS_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_USB_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/usb_device_dpram.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : USB_DEVICE_DPRAM // Version : 1 // Bus type : ahbl // Description : DPRAM layout for USB device. // ============================================================================= #ifndef HARDWARE_REGS_USB_DEVICE_DPRAM_DEFINED #define HARDWARE_REGS_USB_DEVICE_DPRAM_DEFINED // ============================================================================= // Register : USB_DEVICE_DPRAM_SETUP_PACKET_LOW // Description : Bytes 0-3 of the SETUP packet from the host. #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_OFFSET _u(0x00000000) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_SETUP_PACKET_LOW_WVALUE // Description : None #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_WVALUE_RESET _u(0x0000) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_WVALUE_BITS _u(0xffff0000) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_WVALUE_MSB _u(31) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_WVALUE_LSB _u(16) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_WVALUE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BREQUEST // Description : None #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BREQUEST_RESET _u(0x00) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BREQUEST_BITS _u(0x0000ff00) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BREQUEST_MSB _u(15) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BREQUEST_LSB _u(8) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BREQUEST_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BMREQUESTTYPE // Description : None #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BMREQUESTTYPE_RESET _u(0x00) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BMREQUESTTYPE_BITS _u(0x000000ff) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BMREQUESTTYPE_MSB _u(7) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BMREQUESTTYPE_LSB _u(0) #define USB_DEVICE_DPRAM_SETUP_PACKET_LOW_BMREQUESTTYPE_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_SETUP_PACKET_HIGH // Description : Bytes 4-7 of the setup packet from the host. #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_OFFSET _u(0x00000004) #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WLENGTH // Description : None #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WLENGTH_RESET _u(0x0000) #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WLENGTH_BITS _u(0xffff0000) #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WLENGTH_MSB _u(31) #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WLENGTH_LSB _u(16) #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WLENGTH_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WINDEX // Description : None #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WINDEX_RESET _u(0x0000) #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WINDEX_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WINDEX_MSB _u(15) #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WINDEX_LSB _u(0) #define USB_DEVICE_DPRAM_SETUP_PACKET_HIGH_WINDEX_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP1_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_OFFSET _u(0x00000008) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP1_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP1_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_OFFSET _u(0x0000000c) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP1_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP2_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_OFFSET _u(0x00000010) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP2_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP2_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_OFFSET _u(0x00000014) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP2_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP3_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_OFFSET _u(0x00000018) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP3_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP3_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_OFFSET _u(0x0000001c) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP3_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP4_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_OFFSET _u(0x00000020) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP4_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP4_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_OFFSET _u(0x00000024) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP4_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP5_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_OFFSET _u(0x00000028) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP5_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP5_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_OFFSET _u(0x0000002c) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP5_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP6_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_OFFSET _u(0x00000030) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP6_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP6_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_OFFSET _u(0x00000034) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP6_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP7_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_OFFSET _u(0x00000038) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP7_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP7_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_OFFSET _u(0x0000003c) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP7_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP8_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_OFFSET _u(0x00000040) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP8_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP8_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_OFFSET _u(0x00000044) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP8_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP9_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_OFFSET _u(0x00000048) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP9_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP9_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_OFFSET _u(0x0000004c) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP9_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP10_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_OFFSET _u(0x00000050) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP10_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP10_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_OFFSET _u(0x00000054) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP10_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP11_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_OFFSET _u(0x00000058) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP11_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP11_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_OFFSET _u(0x0000005c) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP11_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP12_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_OFFSET _u(0x00000060) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP12_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP12_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_OFFSET _u(0x00000064) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP12_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP13_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_OFFSET _u(0x00000068) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP13_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP13_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_OFFSET _u(0x0000006c) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP13_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP14_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_OFFSET _u(0x00000070) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP14_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP14_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_OFFSET _u(0x00000074) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP14_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP15_IN_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_OFFSET _u(0x00000078) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP15_IN_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP15_OUT_CONTROL // Description : None #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_OFFSET _u(0x0000007c) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_BITS _u(0xfc03ffff) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENABLE // Description : Enable this endpoint. The device will not reply to any packets // for this endpoint if this bit is not set. #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENABLE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENABLE_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENABLE_MSB _u(31) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENABLE_LSB _u(31) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_CONTROL_DOUBLE_BUFFERED // Description : This endpoint is double buffered. #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_DOUBLE_BUFFERED_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_DOUBLE_BUFFERED_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_DOUBLE_BUFFERED_MSB _u(30) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_DOUBLE_BUFFERED_LSB _u(30) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_DOUBLE_BUFFERED_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_BUFF // Description : Trigger an interrupt each time a buffer is done. #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_BUFF_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_BUFF_MSB _u(29) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_BUFF_LSB _u(29) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF // Description : Trigger an interrupt each time both buffers are done. Only // valid in double buffered mode. #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_BITS _u(0x10000000) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_MSB _u(28) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_LSB _u(28) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_PER_DOUBLE_BUFF_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENDPOINT_TYPE // Description : 0x0 -> Control // 0x1 -> Isochronous // 0x2 -> Bulk // 0x3 -> Interrupt #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENDPOINT_TYPE_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENDPOINT_TYPE_BITS _u(0x0c000000) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENDPOINT_TYPE_MSB _u(27) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENDPOINT_TYPE_LSB _u(26) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENDPOINT_TYPE_ACCESS "RW" #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENDPOINT_TYPE_VALUE_CONTROL _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENDPOINT_TYPE_VALUE_ISOCHRONOUS _u(0x1) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENDPOINT_TYPE_VALUE_BULK _u(0x2) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_ENDPOINT_TYPE_VALUE_INTERRUPT _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_STALL // Description : Trigger an interrupt if a STALL is sent. Intended for debug // only. #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_STALL_BITS _u(0x00020000) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_STALL_MSB _u(17) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_STALL_LSB _u(17) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_NAK // Description : Trigger an interrupt if a NAK is sent. Intended for debug only. #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_NAK_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_NAK_BITS _u(0x00010000) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_NAK_MSB _u(16) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_NAK_LSB _u(16) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_INTERRUPT_ON_NAK_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_CONTROL_BUFFER_ADDRESS // Description : 64 byte aligned buffer address for this EP (bits 0-5 are // ignored). Relative to the start of the DPRAM. #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_BUFFER_ADDRESS_RESET _u(0x0000) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_BUFFER_ADDRESS_BITS _u(0x0000ffff) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_BUFFER_ADDRESS_MSB _u(15) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_BUFFER_ADDRESS_LSB _u(0) #define USB_DEVICE_DPRAM_EP15_OUT_CONTROL_BUFFER_ADDRESS_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_OFFSET _u(0x00000080) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP0_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_OFFSET _u(0x00000084) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP0_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_OFFSET _u(0x00000088) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP1_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_OFFSET _u(0x0000008c) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP1_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_OFFSET _u(0x00000090) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP2_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_OFFSET _u(0x00000094) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP2_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_OFFSET _u(0x00000098) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP3_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_OFFSET _u(0x0000009c) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP3_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_OFFSET _u(0x000000a0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP4_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_OFFSET _u(0x000000a4) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP4_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_OFFSET _u(0x000000a8) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP5_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_OFFSET _u(0x000000ac) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP5_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_OFFSET _u(0x000000b0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP6_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_OFFSET _u(0x000000b4) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP6_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_OFFSET _u(0x000000b8) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP7_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_OFFSET _u(0x000000bc) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP7_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_OFFSET _u(0x000000c0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP8_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_OFFSET _u(0x000000c4) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP8_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_OFFSET _u(0x000000c8) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP9_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_OFFSET _u(0x000000cc) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP9_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_OFFSET _u(0x000000d0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP10_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_OFFSET _u(0x000000d4) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFS // ET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP10_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_OFFSET _u(0x000000d8) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP11_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_OFFSET _u(0x000000dc) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFS // ET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP11_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_OFFSET _u(0x000000e0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP12_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_OFFSET _u(0x000000e4) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFS // ET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP12_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_OFFSET _u(0x000000e8) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP13_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_OFFSET _u(0x000000ec) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFS // ET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP13_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_OFFSET _u(0x000000f0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP14_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_OFFSET _u(0x000000f4) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFS // ET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP14_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_OFFSET _u(0x000000f8) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSE // T // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP15_IN_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= // Register : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL // Description : Buffer control for both buffers of an endpoint. Fields ending // in a _1 are for buffer 1. // Fields ending in a _0 are for buffer 0. Buffer 1 controls are // only valid if the endpoint is in double buffered mode. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_OFFSET _u(0x000000fc) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_BITS _u(0xffffffff) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_1 // Description : Buffer 1 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_1_BITS _u(0x80000000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_1_MSB _u(31) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_1_LSB _u(31) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_1 // Description : Buffer 1 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_1_BITS _u(0x40000000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_1_MSB _u(30) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_1_LSB _u(30) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_1 // Description : The data pid of buffer 1. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_1_BITS _u(0x20000000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_1_MSB _u(29) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_1_LSB _u(29) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFS // ET // Description : The number of bytes buffer 1 is offset from buffer 0 in // Isochronous mode. Only valid in double buffered mode for an // Isochronous endpoint. // For a non Isochronous endpoint the offset is always 64 bytes. // 0x0 -> 128 // 0x1 -> 256 // 0x2 -> 512 // 0x3 -> 1024 #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_BITS _u(0x18000000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_MSB _u(28) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_LSB _u(27) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_ACCESS "RW" #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_128 _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_256 _u(0x1) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_512 _u(0x2) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_DOUBLE_BUFFER_ISO_OFFSET_VALUE_1024 _u(0x3) // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_1 // Description : Buffer 1 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_1_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_1_BITS _u(0x04000000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_1_MSB _u(26) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_1_LSB _u(26) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_1 // Description : The length of the data in buffer 1. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_1_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_1_BITS _u(0x03ff0000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_1_MSB _u(25) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_1_LSB _u(16) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_0 // Description : Buffer 0 is full. For an IN transfer (TX to the host) the bit // is set to indicate the data is valid. For an OUT transfer (RX // from the host) this bit should be left as a 0. The host will // set it when it has filled the buffer with data. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_0_BITS _u(0x00008000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_0_MSB _u(15) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_0_LSB _u(15) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_FULL_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_0 // Description : Buffer 0 is the last buffer of the transfer. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_0_BITS _u(0x00004000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_0_MSB _u(14) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_0_LSB _u(14) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LAST_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_0 // Description : The data pid of buffer 0. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_0_BITS _u(0x00002000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_0_MSB _u(13) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_0_LSB _u(13) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_PID_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_RESET // Description : Reset the buffer selector to buffer 0. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_RESET_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_RESET_BITS _u(0x00001000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_RESET_MSB _u(12) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_RESET_LSB _u(12) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_RESET_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_STALL // Description : Reply with a stall (valid for both buffers). #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_STALL_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_STALL_BITS _u(0x00000800) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_STALL_MSB _u(11) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_STALL_LSB _u(11) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_STALL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_0 // Description : Buffer 0 is available. This bit is set to indicate the buffer // can be used by the controller. The controller clears the // available bit when writing the status back. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_0_RESET _u(0x0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_0_BITS _u(0x00000400) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_0_MSB _u(10) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_0_LSB _u(10) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_AVAILABLE_0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_0 // Description : The length of the data in buffer 0. #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_0_RESET _u(0x000) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_0_BITS _u(0x000003ff) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_0_MSB _u(9) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_0_LSB _u(0) #define USB_DEVICE_DPRAM_EP15_OUT_BUFFER_CONTROL_LENGTH_0_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_USB_DEVICE_DPRAM_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/vreg_and_chip_reset.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : VREG_AND_CHIP_RESET // Version : 1 // Bus type : apb // Description : control and status for on-chip voltage regulator and chip // level reset subsystem // ============================================================================= #ifndef HARDWARE_REGS_VREG_AND_CHIP_RESET_DEFINED #define HARDWARE_REGS_VREG_AND_CHIP_RESET_DEFINED // ============================================================================= // Register : VREG_AND_CHIP_RESET_VREG // Description : Voltage regulator control and status #define VREG_AND_CHIP_RESET_VREG_OFFSET _u(0x00000000) #define VREG_AND_CHIP_RESET_VREG_BITS _u(0x000010f3) #define VREG_AND_CHIP_RESET_VREG_RESET _u(0x000000b1) // ----------------------------------------------------------------------------- // Field : VREG_AND_CHIP_RESET_VREG_ROK // Description : regulation status // 0=not in regulation, 1=in regulation #define VREG_AND_CHIP_RESET_VREG_ROK_RESET _u(0x0) #define VREG_AND_CHIP_RESET_VREG_ROK_BITS _u(0x00001000) #define VREG_AND_CHIP_RESET_VREG_ROK_MSB _u(12) #define VREG_AND_CHIP_RESET_VREG_ROK_LSB _u(12) #define VREG_AND_CHIP_RESET_VREG_ROK_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : VREG_AND_CHIP_RESET_VREG_VSEL // Description : output voltage select // 0000 to 0101 - 0.80V // 0110 - 0.85V // 0111 - 0.90V // 1000 - 0.95V // 1001 - 1.00V // 1010 - 1.05V // 1011 - 1.10V (default) // 1100 - 1.15V // 1101 - 1.20V // 1110 - 1.25V // 1111 - 1.30V #define VREG_AND_CHIP_RESET_VREG_VSEL_RESET _u(0xb) #define VREG_AND_CHIP_RESET_VREG_VSEL_BITS _u(0x000000f0) #define VREG_AND_CHIP_RESET_VREG_VSEL_MSB _u(7) #define VREG_AND_CHIP_RESET_VREG_VSEL_LSB _u(4) #define VREG_AND_CHIP_RESET_VREG_VSEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : VREG_AND_CHIP_RESET_VREG_HIZ // Description : high impedance mode select // 0=not in high impedance mode, 1=in high impedance mode #define VREG_AND_CHIP_RESET_VREG_HIZ_RESET _u(0x0) #define VREG_AND_CHIP_RESET_VREG_HIZ_BITS _u(0x00000002) #define VREG_AND_CHIP_RESET_VREG_HIZ_MSB _u(1) #define VREG_AND_CHIP_RESET_VREG_HIZ_LSB _u(1) #define VREG_AND_CHIP_RESET_VREG_HIZ_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : VREG_AND_CHIP_RESET_VREG_EN // Description : enable // 0=not enabled, 1=enabled #define VREG_AND_CHIP_RESET_VREG_EN_RESET _u(0x1) #define VREG_AND_CHIP_RESET_VREG_EN_BITS _u(0x00000001) #define VREG_AND_CHIP_RESET_VREG_EN_MSB _u(0) #define VREG_AND_CHIP_RESET_VREG_EN_LSB _u(0) #define VREG_AND_CHIP_RESET_VREG_EN_ACCESS "RW" // ============================================================================= // Register : VREG_AND_CHIP_RESET_BOD // Description : brown-out detection control #define VREG_AND_CHIP_RESET_BOD_OFFSET _u(0x00000004) #define VREG_AND_CHIP_RESET_BOD_BITS _u(0x000000f1) #define VREG_AND_CHIP_RESET_BOD_RESET _u(0x00000091) // ----------------------------------------------------------------------------- // Field : VREG_AND_CHIP_RESET_BOD_VSEL // Description : threshold select // 0000 - 0.473V // 0001 - 0.516V // 0010 - 0.559V // 0011 - 0.602V // 0100 - 0.645V // 0101 - 0.688V // 0110 - 0.731V // 0111 - 0.774V // 1000 - 0.817V // 1001 - 0.860V (default) // 1010 - 0.903V // 1011 - 0.946V // 1100 - 0.989V // 1101 - 1.032V // 1110 - 1.075V // 1111 - 1.118V #define VREG_AND_CHIP_RESET_BOD_VSEL_RESET _u(0x9) #define VREG_AND_CHIP_RESET_BOD_VSEL_BITS _u(0x000000f0) #define VREG_AND_CHIP_RESET_BOD_VSEL_MSB _u(7) #define VREG_AND_CHIP_RESET_BOD_VSEL_LSB _u(4) #define VREG_AND_CHIP_RESET_BOD_VSEL_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : VREG_AND_CHIP_RESET_BOD_EN // Description : enable // 0=not enabled, 1=enabled #define VREG_AND_CHIP_RESET_BOD_EN_RESET _u(0x1) #define VREG_AND_CHIP_RESET_BOD_EN_BITS _u(0x00000001) #define VREG_AND_CHIP_RESET_BOD_EN_MSB _u(0) #define VREG_AND_CHIP_RESET_BOD_EN_LSB _u(0) #define VREG_AND_CHIP_RESET_BOD_EN_ACCESS "RW" // ============================================================================= // Register : VREG_AND_CHIP_RESET_CHIP_RESET // Description : Chip reset control and status #define VREG_AND_CHIP_RESET_CHIP_RESET_OFFSET _u(0x00000008) #define VREG_AND_CHIP_RESET_CHIP_RESET_BITS _u(0x01110100) #define VREG_AND_CHIP_RESET_CHIP_RESET_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : VREG_AND_CHIP_RESET_CHIP_RESET_PSM_RESTART_FLAG // Description : This is set by psm_restart from the debugger. // Its purpose is to branch bootcode to a safe mode when the // debugger has issued a psm_restart in order to recover from a // boot lock-up. // In the safe mode the debugger can repair the boot code, clear // this flag then reboot the processor. #define VREG_AND_CHIP_RESET_CHIP_RESET_PSM_RESTART_FLAG_RESET _u(0x0) #define VREG_AND_CHIP_RESET_CHIP_RESET_PSM_RESTART_FLAG_BITS _u(0x01000000) #define VREG_AND_CHIP_RESET_CHIP_RESET_PSM_RESTART_FLAG_MSB _u(24) #define VREG_AND_CHIP_RESET_CHIP_RESET_PSM_RESTART_FLAG_LSB _u(24) #define VREG_AND_CHIP_RESET_CHIP_RESET_PSM_RESTART_FLAG_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : VREG_AND_CHIP_RESET_CHIP_RESET_HAD_PSM_RESTART // Description : Last reset was from the debug port #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_PSM_RESTART_RESET _u(0x0) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_PSM_RESTART_BITS _u(0x00100000) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_PSM_RESTART_MSB _u(20) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_PSM_RESTART_LSB _u(20) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_PSM_RESTART_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : VREG_AND_CHIP_RESET_CHIP_RESET_HAD_RUN // Description : Last reset was from the RUN pin #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_RUN_RESET _u(0x0) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_RUN_BITS _u(0x00010000) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_RUN_MSB _u(16) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_RUN_LSB _u(16) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_RUN_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : VREG_AND_CHIP_RESET_CHIP_RESET_HAD_POR // Description : Last reset was from the power-on reset or brown-out detection // blocks #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_POR_RESET _u(0x0) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_POR_BITS _u(0x00000100) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_POR_MSB _u(8) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_POR_LSB _u(8) #define VREG_AND_CHIP_RESET_CHIP_RESET_HAD_POR_ACCESS "RO" // ============================================================================= #endif // HARDWARE_REGS_VREG_AND_CHIP_RESET_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/watchdog.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : WATCHDOG // Version : 1 // Bus type : apb // Description : None // ============================================================================= #ifndef HARDWARE_REGS_WATCHDOG_DEFINED #define HARDWARE_REGS_WATCHDOG_DEFINED // ============================================================================= // Register : WATCHDOG_CTRL // Description : Watchdog control // The rst_wdsel register determines which subsystems are reset // when the watchdog is triggered. // The watchdog can be triggered in software. #define WATCHDOG_CTRL_OFFSET _u(0x00000000) #define WATCHDOG_CTRL_BITS _u(0xc7ffffff) #define WATCHDOG_CTRL_RESET _u(0x07000000) // ----------------------------------------------------------------------------- // Field : WATCHDOG_CTRL_TRIGGER // Description : Trigger a watchdog reset #define WATCHDOG_CTRL_TRIGGER_RESET _u(0x0) #define WATCHDOG_CTRL_TRIGGER_BITS _u(0x80000000) #define WATCHDOG_CTRL_TRIGGER_MSB _u(31) #define WATCHDOG_CTRL_TRIGGER_LSB _u(31) #define WATCHDOG_CTRL_TRIGGER_ACCESS "SC" // ----------------------------------------------------------------------------- // Field : WATCHDOG_CTRL_ENABLE // Description : When not enabled the watchdog timer is paused #define WATCHDOG_CTRL_ENABLE_RESET _u(0x0) #define WATCHDOG_CTRL_ENABLE_BITS _u(0x40000000) #define WATCHDOG_CTRL_ENABLE_MSB _u(30) #define WATCHDOG_CTRL_ENABLE_LSB _u(30) #define WATCHDOG_CTRL_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : WATCHDOG_CTRL_PAUSE_DBG1 // Description : Pause the watchdog timer when processor 1 is in debug mode #define WATCHDOG_CTRL_PAUSE_DBG1_RESET _u(0x1) #define WATCHDOG_CTRL_PAUSE_DBG1_BITS _u(0x04000000) #define WATCHDOG_CTRL_PAUSE_DBG1_MSB _u(26) #define WATCHDOG_CTRL_PAUSE_DBG1_LSB _u(26) #define WATCHDOG_CTRL_PAUSE_DBG1_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : WATCHDOG_CTRL_PAUSE_DBG0 // Description : Pause the watchdog timer when processor 0 is in debug mode #define WATCHDOG_CTRL_PAUSE_DBG0_RESET _u(0x1) #define WATCHDOG_CTRL_PAUSE_DBG0_BITS _u(0x02000000) #define WATCHDOG_CTRL_PAUSE_DBG0_MSB _u(25) #define WATCHDOG_CTRL_PAUSE_DBG0_LSB _u(25) #define WATCHDOG_CTRL_PAUSE_DBG0_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : WATCHDOG_CTRL_PAUSE_JTAG // Description : Pause the watchdog timer when JTAG is accessing the bus fabric #define WATCHDOG_CTRL_PAUSE_JTAG_RESET _u(0x1) #define WATCHDOG_CTRL_PAUSE_JTAG_BITS _u(0x01000000) #define WATCHDOG_CTRL_PAUSE_JTAG_MSB _u(24) #define WATCHDOG_CTRL_PAUSE_JTAG_LSB _u(24) #define WATCHDOG_CTRL_PAUSE_JTAG_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : WATCHDOG_CTRL_TIME // Description : Indicates the number of ticks / 2 (see errata RP2040-E1) before // a watchdog reset will be triggered #define WATCHDOG_CTRL_TIME_RESET _u(0x000000) #define WATCHDOG_CTRL_TIME_BITS _u(0x00ffffff) #define WATCHDOG_CTRL_TIME_MSB _u(23) #define WATCHDOG_CTRL_TIME_LSB _u(0) #define WATCHDOG_CTRL_TIME_ACCESS "RO" // ============================================================================= // Register : WATCHDOG_LOAD // Description : Load the watchdog timer. The maximum setting is 0xffffff which // corresponds to 0xffffff / 2 ticks before triggering a watchdog // reset (see errata RP2040-E1). #define WATCHDOG_LOAD_OFFSET _u(0x00000004) #define WATCHDOG_LOAD_BITS _u(0x00ffffff) #define WATCHDOG_LOAD_RESET _u(0x00000000) #define WATCHDOG_LOAD_MSB _u(23) #define WATCHDOG_LOAD_LSB _u(0) #define WATCHDOG_LOAD_ACCESS "WF" // ============================================================================= // Register : WATCHDOG_REASON // Description : Logs the reason for the last reset. Both bits are zero for the // case of a hardware reset. #define WATCHDOG_REASON_OFFSET _u(0x00000008) #define WATCHDOG_REASON_BITS _u(0x00000003) #define WATCHDOG_REASON_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : WATCHDOG_REASON_FORCE // Description : None #define WATCHDOG_REASON_FORCE_RESET _u(0x0) #define WATCHDOG_REASON_FORCE_BITS _u(0x00000002) #define WATCHDOG_REASON_FORCE_MSB _u(1) #define WATCHDOG_REASON_FORCE_LSB _u(1) #define WATCHDOG_REASON_FORCE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : WATCHDOG_REASON_TIMER // Description : None #define WATCHDOG_REASON_TIMER_RESET _u(0x0) #define WATCHDOG_REASON_TIMER_BITS _u(0x00000001) #define WATCHDOG_REASON_TIMER_MSB _u(0) #define WATCHDOG_REASON_TIMER_LSB _u(0) #define WATCHDOG_REASON_TIMER_ACCESS "RO" // ============================================================================= // Register : WATCHDOG_SCRATCH0 // Description : Scratch register. Information persists through soft reset of // the chip. #define WATCHDOG_SCRATCH0_OFFSET _u(0x0000000c) #define WATCHDOG_SCRATCH0_BITS _u(0xffffffff) #define WATCHDOG_SCRATCH0_RESET _u(0x00000000) #define WATCHDOG_SCRATCH0_MSB _u(31) #define WATCHDOG_SCRATCH0_LSB _u(0) #define WATCHDOG_SCRATCH0_ACCESS "RW" // ============================================================================= // Register : WATCHDOG_SCRATCH1 // Description : Scratch register. Information persists through soft reset of // the chip. #define WATCHDOG_SCRATCH1_OFFSET _u(0x00000010) #define WATCHDOG_SCRATCH1_BITS _u(0xffffffff) #define WATCHDOG_SCRATCH1_RESET _u(0x00000000) #define WATCHDOG_SCRATCH1_MSB _u(31) #define WATCHDOG_SCRATCH1_LSB _u(0) #define WATCHDOG_SCRATCH1_ACCESS "RW" // ============================================================================= // Register : WATCHDOG_SCRATCH2 // Description : Scratch register. Information persists through soft reset of // the chip. #define WATCHDOG_SCRATCH2_OFFSET _u(0x00000014) #define WATCHDOG_SCRATCH2_BITS _u(0xffffffff) #define WATCHDOG_SCRATCH2_RESET _u(0x00000000) #define WATCHDOG_SCRATCH2_MSB _u(31) #define WATCHDOG_SCRATCH2_LSB _u(0) #define WATCHDOG_SCRATCH2_ACCESS "RW" // ============================================================================= // Register : WATCHDOG_SCRATCH3 // Description : Scratch register. Information persists through soft reset of // the chip. #define WATCHDOG_SCRATCH3_OFFSET _u(0x00000018) #define WATCHDOG_SCRATCH3_BITS _u(0xffffffff) #define WATCHDOG_SCRATCH3_RESET _u(0x00000000) #define WATCHDOG_SCRATCH3_MSB _u(31) #define WATCHDOG_SCRATCH3_LSB _u(0) #define WATCHDOG_SCRATCH3_ACCESS "RW" // ============================================================================= // Register : WATCHDOG_SCRATCH4 // Description : Scratch register. Information persists through soft reset of // the chip. #define WATCHDOG_SCRATCH4_OFFSET _u(0x0000001c) #define WATCHDOG_SCRATCH4_BITS _u(0xffffffff) #define WATCHDOG_SCRATCH4_RESET _u(0x00000000) #define WATCHDOG_SCRATCH4_MSB _u(31) #define WATCHDOG_SCRATCH4_LSB _u(0) #define WATCHDOG_SCRATCH4_ACCESS "RW" // ============================================================================= // Register : WATCHDOG_SCRATCH5 // Description : Scratch register. Information persists through soft reset of // the chip. #define WATCHDOG_SCRATCH5_OFFSET _u(0x00000020) #define WATCHDOG_SCRATCH5_BITS _u(0xffffffff) #define WATCHDOG_SCRATCH5_RESET _u(0x00000000) #define WATCHDOG_SCRATCH5_MSB _u(31) #define WATCHDOG_SCRATCH5_LSB _u(0) #define WATCHDOG_SCRATCH5_ACCESS "RW" // ============================================================================= // Register : WATCHDOG_SCRATCH6 // Description : Scratch register. Information persists through soft reset of // the chip. #define WATCHDOG_SCRATCH6_OFFSET _u(0x00000024) #define WATCHDOG_SCRATCH6_BITS _u(0xffffffff) #define WATCHDOG_SCRATCH6_RESET _u(0x00000000) #define WATCHDOG_SCRATCH6_MSB _u(31) #define WATCHDOG_SCRATCH6_LSB _u(0) #define WATCHDOG_SCRATCH6_ACCESS "RW" // ============================================================================= // Register : WATCHDOG_SCRATCH7 // Description : Scratch register. Information persists through soft reset of // the chip. #define WATCHDOG_SCRATCH7_OFFSET _u(0x00000028) #define WATCHDOG_SCRATCH7_BITS _u(0xffffffff) #define WATCHDOG_SCRATCH7_RESET _u(0x00000000) #define WATCHDOG_SCRATCH7_MSB _u(31) #define WATCHDOG_SCRATCH7_LSB _u(0) #define WATCHDOG_SCRATCH7_ACCESS "RW" // ============================================================================= // Register : WATCHDOG_TICK // Description : Controls the tick generator #define WATCHDOG_TICK_OFFSET _u(0x0000002c) #define WATCHDOG_TICK_BITS _u(0x000fffff) #define WATCHDOG_TICK_RESET _u(0x00000200) // ----------------------------------------------------------------------------- // Field : WATCHDOG_TICK_COUNT // Description : Count down timer: the remaining number clk_tick cycles before // the next tick is generated. #define WATCHDOG_TICK_COUNT_RESET "-" #define WATCHDOG_TICK_COUNT_BITS _u(0x000ff800) #define WATCHDOG_TICK_COUNT_MSB _u(19) #define WATCHDOG_TICK_COUNT_LSB _u(11) #define WATCHDOG_TICK_COUNT_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : WATCHDOG_TICK_RUNNING // Description : Is the tick generator running? #define WATCHDOG_TICK_RUNNING_RESET "-" #define WATCHDOG_TICK_RUNNING_BITS _u(0x00000400) #define WATCHDOG_TICK_RUNNING_MSB _u(10) #define WATCHDOG_TICK_RUNNING_LSB _u(10) #define WATCHDOG_TICK_RUNNING_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : WATCHDOG_TICK_ENABLE // Description : start / stop tick generation #define WATCHDOG_TICK_ENABLE_RESET _u(0x1) #define WATCHDOG_TICK_ENABLE_BITS _u(0x00000200) #define WATCHDOG_TICK_ENABLE_MSB _u(9) #define WATCHDOG_TICK_ENABLE_LSB _u(9) #define WATCHDOG_TICK_ENABLE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : WATCHDOG_TICK_CYCLES // Description : Total number of clk_tick cycles before the next tick. #define WATCHDOG_TICK_CYCLES_RESET _u(0x000) #define WATCHDOG_TICK_CYCLES_BITS _u(0x000001ff) #define WATCHDOG_TICK_CYCLES_MSB _u(8) #define WATCHDOG_TICK_CYCLES_LSB _u(0) #define WATCHDOG_TICK_CYCLES_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_WATCHDOG_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/xip.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : XIP // Version : 1 // Bus type : ahb // Description : QSPI flash execute-in-place block // ============================================================================= #ifndef HARDWARE_REGS_XIP_DEFINED #define HARDWARE_REGS_XIP_DEFINED // ============================================================================= // Register : XIP_CTRL // Description : Cache control #define XIP_CTRL_OFFSET _u(0x00000000) #define XIP_CTRL_BITS _u(0x0000000b) #define XIP_CTRL_RESET _u(0x00000003) // ----------------------------------------------------------------------------- // Field : XIP_CTRL_POWER_DOWN // Description : When 1, the cache memories are powered down. They retain state, // but can not be accessed. This reduces static power dissipation. // Writing 1 to this bit forces CTRL_EN to 0, i.e. the cache // cannot // be enabled when powered down. // Cache-as-SRAM accesses will produce a bus error response when // the cache is powered down. #define XIP_CTRL_POWER_DOWN_RESET _u(0x0) #define XIP_CTRL_POWER_DOWN_BITS _u(0x00000008) #define XIP_CTRL_POWER_DOWN_MSB _u(3) #define XIP_CTRL_POWER_DOWN_LSB _u(3) #define XIP_CTRL_POWER_DOWN_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : XIP_CTRL_ERR_BADWRITE // Description : When 1, writes to any alias other than 0x0 (caching, // allocating) // will produce a bus fault. When 0, these writes are silently // ignored. // In either case, writes to the 0x0 alias will deallocate on tag // match, // as usual. #define XIP_CTRL_ERR_BADWRITE_RESET _u(0x1) #define XIP_CTRL_ERR_BADWRITE_BITS _u(0x00000002) #define XIP_CTRL_ERR_BADWRITE_MSB _u(1) #define XIP_CTRL_ERR_BADWRITE_LSB _u(1) #define XIP_CTRL_ERR_BADWRITE_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : XIP_CTRL_EN // Description : When 1, enable the cache. When the cache is disabled, all XIP // accesses // will go straight to the flash, without querying the cache. When // enabled, // cacheable XIP accesses will query the cache, and the flash will // not be accessed if the tag matches and the valid bit is set. // // If the cache is enabled, cache-as-SRAM accesses have no effect // on the // cache data RAM, and will produce a bus error response. #define XIP_CTRL_EN_RESET _u(0x1) #define XIP_CTRL_EN_BITS _u(0x00000001) #define XIP_CTRL_EN_MSB _u(0) #define XIP_CTRL_EN_LSB _u(0) #define XIP_CTRL_EN_ACCESS "RW" // ============================================================================= // Register : XIP_FLUSH // Description : Cache Flush control // Write 1 to flush the cache. This clears the tag memory, but // the data memory retains its contents. (This means cache-as-SRAM // contents is not affected by flush or reset.) // Reading will hold the bus (stall the processor) until the flush // completes. Alternatively STAT can be polled until completion. #define XIP_FLUSH_OFFSET _u(0x00000004) #define XIP_FLUSH_BITS _u(0x00000001) #define XIP_FLUSH_RESET _u(0x00000000) #define XIP_FLUSH_MSB _u(0) #define XIP_FLUSH_LSB _u(0) #define XIP_FLUSH_ACCESS "SC" // ============================================================================= // Register : XIP_STAT // Description : Cache Status #define XIP_STAT_OFFSET _u(0x00000008) #define XIP_STAT_BITS _u(0x00000007) #define XIP_STAT_RESET _u(0x00000002) // ----------------------------------------------------------------------------- // Field : XIP_STAT_FIFO_FULL // Description : When 1, indicates the XIP streaming FIFO is completely full. // The streaming FIFO is 2 entries deep, so the full and empty // flag allow its level to be ascertained. #define XIP_STAT_FIFO_FULL_RESET _u(0x0) #define XIP_STAT_FIFO_FULL_BITS _u(0x00000004) #define XIP_STAT_FIFO_FULL_MSB _u(2) #define XIP_STAT_FIFO_FULL_LSB _u(2) #define XIP_STAT_FIFO_FULL_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : XIP_STAT_FIFO_EMPTY // Description : When 1, indicates the XIP streaming FIFO is completely empty. #define XIP_STAT_FIFO_EMPTY_RESET _u(0x1) #define XIP_STAT_FIFO_EMPTY_BITS _u(0x00000002) #define XIP_STAT_FIFO_EMPTY_MSB _u(1) #define XIP_STAT_FIFO_EMPTY_LSB _u(1) #define XIP_STAT_FIFO_EMPTY_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : XIP_STAT_FLUSH_READY // Description : Reads as 0 while a cache flush is in progress, and 1 otherwise. // The cache is flushed whenever the XIP block is reset, and also // when requested via the FLUSH register. #define XIP_STAT_FLUSH_READY_RESET _u(0x0) #define XIP_STAT_FLUSH_READY_BITS _u(0x00000001) #define XIP_STAT_FLUSH_READY_MSB _u(0) #define XIP_STAT_FLUSH_READY_LSB _u(0) #define XIP_STAT_FLUSH_READY_ACCESS "RO" // ============================================================================= // Register : XIP_CTR_HIT // Description : Cache Hit counter // A 32 bit saturating counter that increments upon each cache // hit, // i.e. when an XIP access is serviced directly from cached data. // Write any value to clear. #define XIP_CTR_HIT_OFFSET _u(0x0000000c) #define XIP_CTR_HIT_BITS _u(0xffffffff) #define XIP_CTR_HIT_RESET _u(0x00000000) #define XIP_CTR_HIT_MSB _u(31) #define XIP_CTR_HIT_LSB _u(0) #define XIP_CTR_HIT_ACCESS "WC" // ============================================================================= // Register : XIP_CTR_ACC // Description : Cache Access counter // A 32 bit saturating counter that increments upon each XIP // access, // whether the cache is hit or not. This includes noncacheable // accesses. // Write any value to clear. #define XIP_CTR_ACC_OFFSET _u(0x00000010) #define XIP_CTR_ACC_BITS _u(0xffffffff) #define XIP_CTR_ACC_RESET _u(0x00000000) #define XIP_CTR_ACC_MSB _u(31) #define XIP_CTR_ACC_LSB _u(0) #define XIP_CTR_ACC_ACCESS "WC" // ============================================================================= // Register : XIP_STREAM_ADDR // Description : FIFO stream address // The address of the next word to be streamed from flash to the // streaming FIFO. // Increments automatically after each flash access. // Write the initial access address here before starting a // streaming read. #define XIP_STREAM_ADDR_OFFSET _u(0x00000014) #define XIP_STREAM_ADDR_BITS _u(0xfffffffc) #define XIP_STREAM_ADDR_RESET _u(0x00000000) #define XIP_STREAM_ADDR_MSB _u(31) #define XIP_STREAM_ADDR_LSB _u(2) #define XIP_STREAM_ADDR_ACCESS "RW" // ============================================================================= // Register : XIP_STREAM_CTR // Description : FIFO stream control // Write a nonzero value to start a streaming read. This will then // progress in the background, using flash idle cycles to transfer // a linear data block from flash to the streaming FIFO. // Decrements automatically (1 at a time) as the stream // progresses, and halts on reaching 0. // Write 0 to halt an in-progress stream, and discard any // in-flight // read, so that a new stream can immediately be started (after // draining the FIFO and reinitialising STREAM_ADDR) #define XIP_STREAM_CTR_OFFSET _u(0x00000018) #define XIP_STREAM_CTR_BITS _u(0x003fffff) #define XIP_STREAM_CTR_RESET _u(0x00000000) #define XIP_STREAM_CTR_MSB _u(21) #define XIP_STREAM_CTR_LSB _u(0) #define XIP_STREAM_CTR_ACCESS "RW" // ============================================================================= // Register : XIP_STREAM_FIFO // Description : FIFO stream data // Streamed data is buffered here, for retrieval by the system // DMA. // This FIFO can also be accessed via the XIP_AUX slave, to avoid // exposing // the DMA to bus stalls caused by other XIP traffic. #define XIP_STREAM_FIFO_OFFSET _u(0x0000001c) #define XIP_STREAM_FIFO_BITS _u(0xffffffff) #define XIP_STREAM_FIFO_RESET _u(0x00000000) #define XIP_STREAM_FIFO_MSB _u(31) #define XIP_STREAM_FIFO_LSB _u(0) #define XIP_STREAM_FIFO_ACCESS "RF" // ============================================================================= #endif // HARDWARE_REGS_XIP_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_regs/include/hardware/regs/xosc.h ================================================ /** * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // ============================================================================= // Register block : XOSC // Version : 1 // Bus type : apb // Description : Controls the crystal oscillator // ============================================================================= #ifndef HARDWARE_REGS_XOSC_DEFINED #define HARDWARE_REGS_XOSC_DEFINED // ============================================================================= // Register : XOSC_CTRL // Description : Crystal Oscillator Control #define XOSC_CTRL_OFFSET _u(0x00000000) #define XOSC_CTRL_BITS _u(0x00ffffff) #define XOSC_CTRL_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : XOSC_CTRL_ENABLE // Description : On power-up this field is initialised to DISABLE and the chip // runs from the ROSC. // If the chip has subsequently been programmed to run from the // XOSC then setting this field to DISABLE may lock-up the chip. // If this is a concern then run the clk_ref from the ROSC and // enable the clk_sys RESUS feature. // The 12-bit code is intended to give some protection against // accidental writes. An invalid setting will enable the // oscillator. // 0xd1e -> DISABLE // 0xfab -> ENABLE #define XOSC_CTRL_ENABLE_RESET "-" #define XOSC_CTRL_ENABLE_BITS _u(0x00fff000) #define XOSC_CTRL_ENABLE_MSB _u(23) #define XOSC_CTRL_ENABLE_LSB _u(12) #define XOSC_CTRL_ENABLE_ACCESS "RW" #define XOSC_CTRL_ENABLE_VALUE_DISABLE _u(0xd1e) #define XOSC_CTRL_ENABLE_VALUE_ENABLE _u(0xfab) // ----------------------------------------------------------------------------- // Field : XOSC_CTRL_FREQ_RANGE // Description : Frequency range. This resets to 0xAA0 and cannot be changed. // 0xaa0 -> 1_15MHZ // 0xaa1 -> RESERVED_1 // 0xaa2 -> RESERVED_2 // 0xaa3 -> RESERVED_3 #define XOSC_CTRL_FREQ_RANGE_RESET "-" #define XOSC_CTRL_FREQ_RANGE_BITS _u(0x00000fff) #define XOSC_CTRL_FREQ_RANGE_MSB _u(11) #define XOSC_CTRL_FREQ_RANGE_LSB _u(0) #define XOSC_CTRL_FREQ_RANGE_ACCESS "RW" #define XOSC_CTRL_FREQ_RANGE_VALUE_1_15MHZ _u(0xaa0) #define XOSC_CTRL_FREQ_RANGE_VALUE_RESERVED_1 _u(0xaa1) #define XOSC_CTRL_FREQ_RANGE_VALUE_RESERVED_2 _u(0xaa2) #define XOSC_CTRL_FREQ_RANGE_VALUE_RESERVED_3 _u(0xaa3) // ============================================================================= // Register : XOSC_STATUS // Description : Crystal Oscillator Status #define XOSC_STATUS_OFFSET _u(0x00000004) #define XOSC_STATUS_BITS _u(0x81001003) #define XOSC_STATUS_RESET _u(0x00000000) // ----------------------------------------------------------------------------- // Field : XOSC_STATUS_STABLE // Description : Oscillator is running and stable #define XOSC_STATUS_STABLE_RESET _u(0x0) #define XOSC_STATUS_STABLE_BITS _u(0x80000000) #define XOSC_STATUS_STABLE_MSB _u(31) #define XOSC_STATUS_STABLE_LSB _u(31) #define XOSC_STATUS_STABLE_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : XOSC_STATUS_BADWRITE // Description : An invalid value has been written to CTRL_ENABLE or // CTRL_FREQ_RANGE or DORMANT #define XOSC_STATUS_BADWRITE_RESET _u(0x0) #define XOSC_STATUS_BADWRITE_BITS _u(0x01000000) #define XOSC_STATUS_BADWRITE_MSB _u(24) #define XOSC_STATUS_BADWRITE_LSB _u(24) #define XOSC_STATUS_BADWRITE_ACCESS "WC" // ----------------------------------------------------------------------------- // Field : XOSC_STATUS_ENABLED // Description : Oscillator is enabled but not necessarily running and stable, // resets to 0 #define XOSC_STATUS_ENABLED_RESET "-" #define XOSC_STATUS_ENABLED_BITS _u(0x00001000) #define XOSC_STATUS_ENABLED_MSB _u(12) #define XOSC_STATUS_ENABLED_LSB _u(12) #define XOSC_STATUS_ENABLED_ACCESS "RO" // ----------------------------------------------------------------------------- // Field : XOSC_STATUS_FREQ_RANGE // Description : The current frequency range setting, always reads 0 // 0x0 -> 1_15MHZ // 0x1 -> RESERVED_1 // 0x2 -> RESERVED_2 // 0x3 -> RESERVED_3 #define XOSC_STATUS_FREQ_RANGE_RESET "-" #define XOSC_STATUS_FREQ_RANGE_BITS _u(0x00000003) #define XOSC_STATUS_FREQ_RANGE_MSB _u(1) #define XOSC_STATUS_FREQ_RANGE_LSB _u(0) #define XOSC_STATUS_FREQ_RANGE_ACCESS "RO" #define XOSC_STATUS_FREQ_RANGE_VALUE_1_15MHZ _u(0x0) #define XOSC_STATUS_FREQ_RANGE_VALUE_RESERVED_1 _u(0x1) #define XOSC_STATUS_FREQ_RANGE_VALUE_RESERVED_2 _u(0x2) #define XOSC_STATUS_FREQ_RANGE_VALUE_RESERVED_3 _u(0x3) // ============================================================================= // Register : XOSC_DORMANT // Description : Crystal Oscillator pause control // This is used to save power by pausing the XOSC // On power-up this field is initialised to WAKE // An invalid write will also select WAKE // WARNING: stop the PLLs before selecting dormant mode // WARNING: setup the irq before selecting dormant mode // 0x636f6d61 -> DORMANT // 0x77616b65 -> WAKE #define XOSC_DORMANT_OFFSET _u(0x00000008) #define XOSC_DORMANT_BITS _u(0xffffffff) #define XOSC_DORMANT_RESET "-" #define XOSC_DORMANT_MSB _u(31) #define XOSC_DORMANT_LSB _u(0) #define XOSC_DORMANT_ACCESS "RW" #define XOSC_DORMANT_VALUE_DORMANT _u(0x636f6d61) #define XOSC_DORMANT_VALUE_WAKE _u(0x77616b65) // ============================================================================= // Register : XOSC_STARTUP // Description : Controls the startup delay #define XOSC_STARTUP_OFFSET _u(0x0000000c) #define XOSC_STARTUP_BITS _u(0x00103fff) #define XOSC_STARTUP_RESET _u(0x000000c4) // ----------------------------------------------------------------------------- // Field : XOSC_STARTUP_X4 // Description : Multiplies the startup_delay by 4. This is of little value to // the user given that the delay can be programmed directly. #define XOSC_STARTUP_X4_RESET _u(0x0) #define XOSC_STARTUP_X4_BITS _u(0x00100000) #define XOSC_STARTUP_X4_MSB _u(20) #define XOSC_STARTUP_X4_LSB _u(20) #define XOSC_STARTUP_X4_ACCESS "RW" // ----------------------------------------------------------------------------- // Field : XOSC_STARTUP_DELAY // Description : in multiples of 256*xtal_period. The reset value of 0xc4 // corresponds to approx 50 000 cycles. #define XOSC_STARTUP_DELAY_RESET _u(0x00c4) #define XOSC_STARTUP_DELAY_BITS _u(0x00003fff) #define XOSC_STARTUP_DELAY_MSB _u(13) #define XOSC_STARTUP_DELAY_LSB _u(0) #define XOSC_STARTUP_DELAY_ACCESS "RW" // ============================================================================= // Register : XOSC_COUNT // Description : A down counter running at the xosc frequency which counts to // zero and stops. // To start the counter write a non-zero value. // Can be used for short software pauses when setting up time // sensitive hardware. #define XOSC_COUNT_OFFSET _u(0x0000001c) #define XOSC_COUNT_BITS _u(0x000000ff) #define XOSC_COUNT_RESET _u(0x00000000) #define XOSC_COUNT_MSB _u(7) #define XOSC_COUNT_LSB _u(0) #define XOSC_COUNT_ACCESS "RW" // ============================================================================= #endif // HARDWARE_REGS_XOSC_DEFINED ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/CMakeLists.txt ================================================ add_library(hardware_structs INTERFACE) add_library(hardware_structs_headers INTERFACE) target_include_directories(hardware_structs_headers INTERFACE include) pico_mirrored_target_link_libraries(hardware_structs INTERFACE hardware_regs) ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/adc.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_ADC_H #define _HARDWARE_STRUCTS_ADC_H #include "hardware/address_mapped.h" #include "hardware/regs/adc.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_adc // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/adc.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(ADC_CS_OFFSET) // ADC_CS // ADC Control and Status // 0x001f0000 [20:16] : RROBIN (0): Round-robin sampling // 0x00007000 [14:12] : AINSEL (0): Select analog mux input // 0x00000400 [10] : ERR_STICKY (0): Some past ADC conversion encountered an error // 0x00000200 [9] : ERR (0): The most recent ADC conversion encountered an error; result is undefined or noisy // 0x00000100 [8] : READY (0): 1 if the ADC is ready to start a new conversion // 0x00000008 [3] : START_MANY (0): Continuously perform conversions whilst this bit is 1 // 0x00000004 [2] : START_ONCE (0): Start a single conversion // 0x00000002 [1] : TS_EN (0): Power on temperature sensor // 0x00000001 [0] : EN (0): Power on ADC and enable its clock io_rw_32 cs; _REG_(ADC_RESULT_OFFSET) // ADC_RESULT // Result of most recent ADC conversion // 0x00000fff [11:0] : RESULT (0) io_ro_32 result; _REG_(ADC_FCS_OFFSET) // ADC_FCS // FIFO control and status // 0x0f000000 [27:24] : THRESH (0): DREQ/IRQ asserted when level >= threshold // 0x000f0000 [19:16] : LEVEL (0): The number of conversion results currently waiting in the FIFO // 0x00000800 [11] : OVER (0): 1 if the FIFO has been overflowed // 0x00000400 [10] : UNDER (0): 1 if the FIFO has been underflowed // 0x00000200 [9] : FULL (0) // 0x00000100 [8] : EMPTY (0) // 0x00000008 [3] : DREQ_EN (0): If 1: assert DMA requests when FIFO contains data // 0x00000004 [2] : ERR (0): If 1: conversion error bit appears in the FIFO alongside the result // 0x00000002 [1] : SHIFT (0): If 1: FIFO results are right-shifted to be one byte in size // 0x00000001 [0] : EN (0): If 1: write result to the FIFO after each conversion io_rw_32 fcs; _REG_(ADC_FIFO_OFFSET) // ADC_FIFO // Conversion result FIFO // 0x00008000 [15] : ERR (0): 1 if this particular sample experienced a conversion error // 0x00000fff [11:0] : VAL (0) io_ro_32 fifo; _REG_(ADC_DIV_OFFSET) // ADC_DIV // Clock divider // 0x00ffff00 [23:8] : INT (0): Integer part of clock divisor // 0x000000ff [7:0] : FRAC (0): Fractional part of clock divisor io_rw_32 div; _REG_(ADC_INTR_OFFSET) // ADC_INTR // Raw Interrupts // 0x00000001 [0] : FIFO (0): Triggered when the sample FIFO reaches a certain level io_ro_32 intr; _REG_(ADC_INTE_OFFSET) // ADC_INTE // Interrupt Enable // 0x00000001 [0] : FIFO (0): Triggered when the sample FIFO reaches a certain level io_rw_32 inte; _REG_(ADC_INTF_OFFSET) // ADC_INTF // Interrupt Force // 0x00000001 [0] : FIFO (0): Triggered when the sample FIFO reaches a certain level io_rw_32 intf; _REG_(ADC_INTS_OFFSET) // ADC_INTS // Interrupt status after masking & forcing // 0x00000001 [0] : FIFO (0): Triggered when the sample FIFO reaches a certain level io_ro_32 ints; } adc_hw_t; #define adc_hw ((adc_hw_t *)ADC_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/bus_ctrl.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_BUS_CTRL_H #define _HARDWARE_STRUCTS_BUS_CTRL_H #include "hardware/address_mapped.h" #include "hardware/regs/busctrl.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_busctrl // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/busctrl.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION enum bus_ctrl_perf_counter { arbiter_rom_perf_event_access = 19, arbiter_rom_perf_event_access_contested = 18, arbiter_xip_main_perf_event_access = 17, arbiter_xip_main_perf_event_access_contested = 16, arbiter_sram0_perf_event_access = 15, arbiter_sram0_perf_event_access_contested = 14, arbiter_sram1_perf_event_access = 13, arbiter_sram1_perf_event_access_contested = 12, arbiter_sram2_perf_event_access = 11, arbiter_sram2_perf_event_access_contested = 10, arbiter_sram3_perf_event_access = 9, arbiter_sram3_perf_event_access_contested = 8, arbiter_sram4_perf_event_access = 7, arbiter_sram4_perf_event_access_contested = 6, arbiter_sram5_perf_event_access = 5, arbiter_sram5_perf_event_access_contested = 4, arbiter_fastperi_perf_event_access = 3, arbiter_fastperi_perf_event_access_contested = 2, arbiter_apb_perf_event_access = 1, arbiter_apb_perf_event_access_contested = 0 }; typedef struct { _REG_(BUSCTRL_PERFCTR0_OFFSET) // BUSCTRL_PERFCTR0 // Bus fabric performance counter 0 // 0x00ffffff [23:0] : PERFCTR0 (0): Busfabric saturating performance counter 0 io_rw_32 value; _REG_(BUSCTRL_PERFSEL0_OFFSET) // BUSCTRL_PERFSEL0 // Bus fabric performance event select for PERFCTR0 // 0x0000001f [4:0] : PERFSEL0 (0x1f): Select an event for PERFCTR0 io_rw_32 sel; } bus_ctrl_perf_hw_t; typedef struct { _REG_(BUSCTRL_BUS_PRIORITY_OFFSET) // BUSCTRL_BUS_PRIORITY // Set the priority of each master for bus arbitration // 0x00001000 [12] : DMA_W (0): 0 - low priority, 1 - high priority // 0x00000100 [8] : DMA_R (0): 0 - low priority, 1 - high priority // 0x00000010 [4] : PROC1 (0): 0 - low priority, 1 - high priority // 0x00000001 [0] : PROC0 (0): 0 - low priority, 1 - high priority io_rw_32 priority; _REG_(BUSCTRL_BUS_PRIORITY_ACK_OFFSET) // BUSCTRL_BUS_PRIORITY_ACK // Bus priority acknowledge // 0x00000001 [0] : BUS_PRIORITY_ACK (0): Goes to 1 once all arbiters have registered the new global priority levels io_ro_32 priority_ack; bus_ctrl_perf_hw_t counter[4]; } bus_ctrl_hw_t; #define bus_ctrl_hw ((bus_ctrl_hw_t *)BUSCTRL_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/clocks.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_CLOCKS_H #define _HARDWARE_STRUCTS_CLOCKS_H #include "hardware/address_mapped.h" #include "hardware/regs/clocks.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_clocks // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/clocks.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION /*! \brief Enumeration identifying a hardware clock * \ingroup hardware_clocks */ /// \tag::clkenum[] enum clock_index { clk_gpout0 = 0, ///< GPIO Muxing 0 clk_gpout1, ///< GPIO Muxing 1 clk_gpout2, ///< GPIO Muxing 2 clk_gpout3, ///< GPIO Muxing 3 clk_ref, ///< Watchdog and timers reference clock clk_sys, ///< Processors, bus fabric, memory, memory mapped registers clk_peri, ///< Peripheral clock for UART and SPI clk_usb, ///< USB clock clk_adc, ///< ADC clock clk_rtc, ///< Real time clock CLK_COUNT }; /// \end::clkenum[] /// \tag::clock_hw[] typedef struct { _REG_(CLOCKS_CLK_GPOUT0_CTRL_OFFSET) // CLOCKS_CLK_GPOUT0_CTRL // Clock control, can be changed on-the-fly (except for auxsrc) // 0x00100000 [20] : NUDGE (0): An edge on this signal shifts the phase of the output by 1 cycle of the input clock // 0x00030000 [17:16] : PHASE (0): This delays the enable signal by up to 3 cycles of the input clock // 0x00001000 [12] : DC50 (0): Enables duty cycle correction for odd divisors // 0x00000800 [11] : ENABLE (0): Starts and stops the clock generator cleanly // 0x00000400 [10] : KILL (0): Asynchronously kills the clock generator // 0x000001e0 [8:5] : AUXSRC (0): Selects the auxiliary clock source, will glitch when switching io_rw_32 ctrl; _REG_(CLOCKS_CLK_GPOUT0_DIV_OFFSET) // CLOCKS_CLK_GPOUT0_DIV // Clock divisor, can be changed on-the-fly // 0xffffff00 [31:8] : INT (1): Integer component of the divisor, 0 -> divide by 2^16 // 0x000000ff [7:0] : FRAC (0): Fractional component of the divisor io_rw_32 div; _REG_(CLOCKS_CLK_GPOUT0_SELECTED_OFFSET) // CLOCKS_CLK_GPOUT0_SELECTED // Indicates which SRC is currently selected by the glitchless mux (one-hot) io_ro_32 selected; } clock_hw_t; /// \end::clock_hw[] typedef struct { _REG_(CLOCKS_CLK_SYS_RESUS_CTRL_OFFSET) // CLOCKS_CLK_SYS_RESUS_CTRL // 0x00010000 [16] : CLEAR (0): For clearing the resus after the fault that triggered it has been corrected // 0x00001000 [12] : FRCE (0): Force a resus, for test purposes only // 0x00000100 [8] : ENABLE (0): Enable resus // 0x000000ff [7:0] : TIMEOUT (0xff): This is expressed as a number of clk_ref cycles io_rw_32 ctrl; _REG_(CLOCKS_CLK_SYS_RESUS_STATUS_OFFSET) // CLOCKS_CLK_SYS_RESUS_STATUS // 0x00000001 [0] : RESUSSED (0): Clock has been resuscitated, correct the error then send ctrl_clear=1 io_ro_32 status; } clock_resus_hw_t; typedef struct { _REG_(CLOCKS_FC0_REF_KHZ_OFFSET) // CLOCKS_FC0_REF_KHZ // Reference clock frequency in kHz // 0x000fffff [19:0] : FC0_REF_KHZ (0) io_rw_32 ref_khz; _REG_(CLOCKS_FC0_MIN_KHZ_OFFSET) // CLOCKS_FC0_MIN_KHZ // Minimum pass frequency in kHz // 0x01ffffff [24:0] : FC0_MIN_KHZ (0) io_rw_32 min_khz; _REG_(CLOCKS_FC0_MAX_KHZ_OFFSET) // CLOCKS_FC0_MAX_KHZ // Maximum pass frequency in kHz // 0x01ffffff [24:0] : FC0_MAX_KHZ (0x1ffffff) io_rw_32 max_khz; _REG_(CLOCKS_FC0_DELAY_OFFSET) // CLOCKS_FC0_DELAY // Delays the start of frequency counting to allow the mux to settle // 0x00000007 [2:0] : FC0_DELAY (1) io_rw_32 delay; _REG_(CLOCKS_FC0_INTERVAL_OFFSET) // CLOCKS_FC0_INTERVAL // The test interval is 0 // 0x0000000f [3:0] : FC0_INTERVAL (0x8) io_rw_32 interval; _REG_(CLOCKS_FC0_SRC_OFFSET) // CLOCKS_FC0_SRC // Clock sent to frequency counter, set to 0 when not required // 0x000000ff [7:0] : FC0_SRC (0) io_rw_32 src; _REG_(CLOCKS_FC0_STATUS_OFFSET) // CLOCKS_FC0_STATUS // Frequency counter status // 0x10000000 [28] : DIED (0): Test clock stopped during test // 0x01000000 [24] : FAST (0): Test clock faster than expected, only valid when status_done=1 // 0x00100000 [20] : SLOW (0): Test clock slower than expected, only valid when status_done=1 // 0x00010000 [16] : FAIL (0): Test failed // 0x00001000 [12] : WAITING (0): Waiting for test clock to start // 0x00000100 [8] : RUNNING (0): Test running // 0x00000010 [4] : DONE (0): Test complete // 0x00000001 [0] : PASS (0): Test passed io_ro_32 status; _REG_(CLOCKS_FC0_RESULT_OFFSET) // CLOCKS_FC0_RESULT // Result of frequency measurement, only valid when status_done=1 // 0x3fffffe0 [29:5] : KHZ (0) // 0x0000001f [4:0] : FRAC (0) io_ro_32 result; } fc_hw_t; typedef struct { clock_hw_t clk[CLK_COUNT]; // 10 clock_resus_hw_t resus; fc_hw_t fc0; _REG_(CLOCKS_WAKE_EN0_OFFSET) // CLOCKS_WAKE_EN0 // enable clock in wake mode // 0x80000000 [31] : clk_sys_sram3 (1) // 0x40000000 [30] : clk_sys_sram2 (1) // 0x20000000 [29] : clk_sys_sram1 (1) // 0x10000000 [28] : clk_sys_sram0 (1) // 0x08000000 [27] : clk_sys_spi1 (1) // 0x04000000 [26] : clk_peri_spi1 (1) // 0x02000000 [25] : clk_sys_spi0 (1) // 0x01000000 [24] : clk_peri_spi0 (1) // 0x00800000 [23] : clk_sys_sio (1) // 0x00400000 [22] : clk_sys_rtc (1) // 0x00200000 [21] : clk_rtc_rtc (1) // 0x00100000 [20] : clk_sys_rosc (1) // 0x00080000 [19] : clk_sys_rom (1) // 0x00040000 [18] : clk_sys_resets (1) // 0x00020000 [17] : clk_sys_pwm (1) // 0x00010000 [16] : clk_sys_psm (1) // 0x00008000 [15] : clk_sys_pll_usb (1) // 0x00004000 [14] : clk_sys_pll_sys (1) // 0x00002000 [13] : clk_sys_pio1 (1) // 0x00001000 [12] : clk_sys_pio0 (1) // 0x00000800 [11] : clk_sys_pads (1) // 0x00000400 [10] : clk_sys_vreg_and_chip_reset (1) // 0x00000200 [9] : clk_sys_jtag (1) // 0x00000100 [8] : clk_sys_io (1) // 0x00000080 [7] : clk_sys_i2c1 (1) // 0x00000040 [6] : clk_sys_i2c0 (1) // 0x00000020 [5] : clk_sys_dma (1) // 0x00000010 [4] : clk_sys_busfabric (1) // 0x00000008 [3] : clk_sys_busctrl (1) // 0x00000004 [2] : clk_sys_adc (1) // 0x00000002 [1] : clk_adc_adc (1) // 0x00000001 [0] : clk_sys_clocks (1) io_rw_32 wake_en0; _REG_(CLOCKS_WAKE_EN1_OFFSET) // CLOCKS_WAKE_EN1 // enable clock in wake mode // 0x00004000 [14] : clk_sys_xosc (1) // 0x00002000 [13] : clk_sys_xip (1) // 0x00001000 [12] : clk_sys_watchdog (1) // 0x00000800 [11] : clk_usb_usbctrl (1) // 0x00000400 [10] : clk_sys_usbctrl (1) // 0x00000200 [9] : clk_sys_uart1 (1) // 0x00000100 [8] : clk_peri_uart1 (1) // 0x00000080 [7] : clk_sys_uart0 (1) // 0x00000040 [6] : clk_peri_uart0 (1) // 0x00000020 [5] : clk_sys_timer (1) // 0x00000010 [4] : clk_sys_tbman (1) // 0x00000008 [3] : clk_sys_sysinfo (1) // 0x00000004 [2] : clk_sys_syscfg (1) // 0x00000002 [1] : clk_sys_sram5 (1) // 0x00000001 [0] : clk_sys_sram4 (1) io_rw_32 wake_en1; _REG_(CLOCKS_SLEEP_EN0_OFFSET) // CLOCKS_SLEEP_EN0 // enable clock in sleep mode // 0x80000000 [31] : clk_sys_sram3 (1) // 0x40000000 [30] : clk_sys_sram2 (1) // 0x20000000 [29] : clk_sys_sram1 (1) // 0x10000000 [28] : clk_sys_sram0 (1) // 0x08000000 [27] : clk_sys_spi1 (1) // 0x04000000 [26] : clk_peri_spi1 (1) // 0x02000000 [25] : clk_sys_spi0 (1) // 0x01000000 [24] : clk_peri_spi0 (1) // 0x00800000 [23] : clk_sys_sio (1) // 0x00400000 [22] : clk_sys_rtc (1) // 0x00200000 [21] : clk_rtc_rtc (1) // 0x00100000 [20] : clk_sys_rosc (1) // 0x00080000 [19] : clk_sys_rom (1) // 0x00040000 [18] : clk_sys_resets (1) // 0x00020000 [17] : clk_sys_pwm (1) // 0x00010000 [16] : clk_sys_psm (1) // 0x00008000 [15] : clk_sys_pll_usb (1) // 0x00004000 [14] : clk_sys_pll_sys (1) // 0x00002000 [13] : clk_sys_pio1 (1) // 0x00001000 [12] : clk_sys_pio0 (1) // 0x00000800 [11] : clk_sys_pads (1) // 0x00000400 [10] : clk_sys_vreg_and_chip_reset (1) // 0x00000200 [9] : clk_sys_jtag (1) // 0x00000100 [8] : clk_sys_io (1) // 0x00000080 [7] : clk_sys_i2c1 (1) // 0x00000040 [6] : clk_sys_i2c0 (1) // 0x00000020 [5] : clk_sys_dma (1) // 0x00000010 [4] : clk_sys_busfabric (1) // 0x00000008 [3] : clk_sys_busctrl (1) // 0x00000004 [2] : clk_sys_adc (1) // 0x00000002 [1] : clk_adc_adc (1) // 0x00000001 [0] : clk_sys_clocks (1) io_rw_32 sleep_en0; _REG_(CLOCKS_SLEEP_EN1_OFFSET) // CLOCKS_SLEEP_EN1 // enable clock in sleep mode // 0x00004000 [14] : clk_sys_xosc (1) // 0x00002000 [13] : clk_sys_xip (1) // 0x00001000 [12] : clk_sys_watchdog (1) // 0x00000800 [11] : clk_usb_usbctrl (1) // 0x00000400 [10] : clk_sys_usbctrl (1) // 0x00000200 [9] : clk_sys_uart1 (1) // 0x00000100 [8] : clk_peri_uart1 (1) // 0x00000080 [7] : clk_sys_uart0 (1) // 0x00000040 [6] : clk_peri_uart0 (1) // 0x00000020 [5] : clk_sys_timer (1) // 0x00000010 [4] : clk_sys_tbman (1) // 0x00000008 [3] : clk_sys_sysinfo (1) // 0x00000004 [2] : clk_sys_syscfg (1) // 0x00000002 [1] : clk_sys_sram5 (1) // 0x00000001 [0] : clk_sys_sram4 (1) io_rw_32 sleep_en1; _REG_(CLOCKS_ENABLED0_OFFSET) // CLOCKS_ENABLED0 // indicates the state of the clock enable // 0x80000000 [31] : clk_sys_sram3 (0) // 0x40000000 [30] : clk_sys_sram2 (0) // 0x20000000 [29] : clk_sys_sram1 (0) // 0x10000000 [28] : clk_sys_sram0 (0) // 0x08000000 [27] : clk_sys_spi1 (0) // 0x04000000 [26] : clk_peri_spi1 (0) // 0x02000000 [25] : clk_sys_spi0 (0) // 0x01000000 [24] : clk_peri_spi0 (0) // 0x00800000 [23] : clk_sys_sio (0) // 0x00400000 [22] : clk_sys_rtc (0) // 0x00200000 [21] : clk_rtc_rtc (0) // 0x00100000 [20] : clk_sys_rosc (0) // 0x00080000 [19] : clk_sys_rom (0) // 0x00040000 [18] : clk_sys_resets (0) // 0x00020000 [17] : clk_sys_pwm (0) // 0x00010000 [16] : clk_sys_psm (0) // 0x00008000 [15] : clk_sys_pll_usb (0) // 0x00004000 [14] : clk_sys_pll_sys (0) // 0x00002000 [13] : clk_sys_pio1 (0) // 0x00001000 [12] : clk_sys_pio0 (0) // 0x00000800 [11] : clk_sys_pads (0) // 0x00000400 [10] : clk_sys_vreg_and_chip_reset (0) // 0x00000200 [9] : clk_sys_jtag (0) // 0x00000100 [8] : clk_sys_io (0) // 0x00000080 [7] : clk_sys_i2c1 (0) // 0x00000040 [6] : clk_sys_i2c0 (0) // 0x00000020 [5] : clk_sys_dma (0) // 0x00000010 [4] : clk_sys_busfabric (0) // 0x00000008 [3] : clk_sys_busctrl (0) // 0x00000004 [2] : clk_sys_adc (0) // 0x00000002 [1] : clk_adc_adc (0) // 0x00000001 [0] : clk_sys_clocks (0) io_ro_32 enabled0; _REG_(CLOCKS_ENABLED1_OFFSET) // CLOCKS_ENABLED1 // indicates the state of the clock enable // 0x00004000 [14] : clk_sys_xosc (0) // 0x00002000 [13] : clk_sys_xip (0) // 0x00001000 [12] : clk_sys_watchdog (0) // 0x00000800 [11] : clk_usb_usbctrl (0) // 0x00000400 [10] : clk_sys_usbctrl (0) // 0x00000200 [9] : clk_sys_uart1 (0) // 0x00000100 [8] : clk_peri_uart1 (0) // 0x00000080 [7] : clk_sys_uart0 (0) // 0x00000040 [6] : clk_peri_uart0 (0) // 0x00000020 [5] : clk_sys_timer (0) // 0x00000010 [4] : clk_sys_tbman (0) // 0x00000008 [3] : clk_sys_sysinfo (0) // 0x00000004 [2] : clk_sys_syscfg (0) // 0x00000002 [1] : clk_sys_sram5 (0) // 0x00000001 [0] : clk_sys_sram4 (0) io_ro_32 enabled1; _REG_(CLOCKS_INTR_OFFSET) // CLOCKS_INTR // Raw Interrupts // 0x00000001 [0] : CLK_SYS_RESUS (0) io_ro_32 intr; _REG_(CLOCKS_INTE_OFFSET) // CLOCKS_INTE // Interrupt Enable // 0x00000001 [0] : CLK_SYS_RESUS (0) io_rw_32 inte; _REG_(CLOCKS_INTF_OFFSET) // CLOCKS_INTF // Interrupt Force // 0x00000001 [0] : CLK_SYS_RESUS (0) io_rw_32 intf; _REG_(CLOCKS_INTS_OFFSET) // CLOCKS_INTS // Interrupt status after masking & forcing // 0x00000001 [0] : CLK_SYS_RESUS (0) io_ro_32 ints; } clocks_hw_t; #define clocks_hw ((clocks_hw_t *)CLOCKS_BASE) static_assert( CLK_COUNT == 10, ""); #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/dma.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_DMA_H #define _HARDWARE_STRUCTS_DMA_H #include "hardware/address_mapped.h" #include "hardware/regs/dma.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_dma // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/dma.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(DMA_CH0_READ_ADDR_OFFSET) // DMA_CH0_READ_ADDR // DMA Channel 0 Read Address pointer io_rw_32 read_addr; _REG_(DMA_CH0_WRITE_ADDR_OFFSET) // DMA_CH0_WRITE_ADDR // DMA Channel 0 Write Address pointer io_rw_32 write_addr; _REG_(DMA_CH0_TRANS_COUNT_OFFSET) // DMA_CH0_TRANS_COUNT // DMA Channel 0 Transfer Count io_rw_32 transfer_count; _REG_(DMA_CH0_CTRL_TRIG_OFFSET) // DMA_CH0_CTRL_TRIG // DMA Channel 0 Control and Status // 0x80000000 [31] : AHB_ERROR (0): Logical OR of the READ_ERROR and WRITE_ERROR flags // 0x40000000 [30] : READ_ERROR (0): If 1, the channel received a read bus error // 0x20000000 [29] : WRITE_ERROR (0): If 1, the channel received a write bus error // 0x01000000 [24] : BUSY (0): This flag goes high when the channel starts a new transfer sequence, and low when the... // 0x00800000 [23] : SNIFF_EN (0): If 1, this channel's data transfers are visible to the sniff hardware, and each... // 0x00400000 [22] : BSWAP (0): Apply byte-swap transformation to DMA data // 0x00200000 [21] : IRQ_QUIET (0): In QUIET mode, the channel does not generate IRQs at the end of every transfer block // 0x001f8000 [20:15] : TREQ_SEL (0): Select a Transfer Request signal // 0x00007800 [14:11] : CHAIN_TO (0): When this channel completes, it will trigger the channel indicated by CHAIN_TO // 0x00000400 [10] : RING_SEL (0): Select whether RING_SIZE applies to read or write addresses // 0x000003c0 [9:6] : RING_SIZE (0): Size of address wrap region // 0x00000020 [5] : INCR_WRITE (0): If 1, the write address increments with each transfer // 0x00000010 [4] : INCR_READ (0): If 1, the read address increments with each transfer // 0x0000000c [3:2] : DATA_SIZE (0): Set the size of each bus transfer (byte/halfword/word) // 0x00000002 [1] : HIGH_PRIORITY (0): HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in... // 0x00000001 [0] : EN (0): DMA Channel Enable io_rw_32 ctrl_trig; _REG_(DMA_CH0_AL1_CTRL_OFFSET) // DMA_CH0_AL1_CTRL // Alias for channel 0 CTRL register io_rw_32 al1_ctrl; _REG_(DMA_CH0_AL1_READ_ADDR_OFFSET) // DMA_CH0_AL1_READ_ADDR // Alias for channel 0 READ_ADDR register io_rw_32 al1_read_addr; _REG_(DMA_CH0_AL1_WRITE_ADDR_OFFSET) // DMA_CH0_AL1_WRITE_ADDR // Alias for channel 0 WRITE_ADDR register io_rw_32 al1_write_addr; _REG_(DMA_CH0_AL1_TRANS_COUNT_TRIG_OFFSET) // DMA_CH0_AL1_TRANS_COUNT_TRIG // Alias for channel 0 TRANS_COUNT register io_rw_32 al1_transfer_count_trig; _REG_(DMA_CH0_AL2_CTRL_OFFSET) // DMA_CH0_AL2_CTRL // Alias for channel 0 CTRL register io_rw_32 al2_ctrl; _REG_(DMA_CH0_AL2_TRANS_COUNT_OFFSET) // DMA_CH0_AL2_TRANS_COUNT // Alias for channel 0 TRANS_COUNT register io_rw_32 al2_transfer_count; _REG_(DMA_CH0_AL2_READ_ADDR_OFFSET) // DMA_CH0_AL2_READ_ADDR // Alias for channel 0 READ_ADDR register io_rw_32 al2_read_addr; _REG_(DMA_CH0_AL2_WRITE_ADDR_TRIG_OFFSET) // DMA_CH0_AL2_WRITE_ADDR_TRIG // Alias for channel 0 WRITE_ADDR register io_rw_32 al2_write_addr_trig; _REG_(DMA_CH0_AL3_CTRL_OFFSET) // DMA_CH0_AL3_CTRL // Alias for channel 0 CTRL register io_rw_32 al3_ctrl; _REG_(DMA_CH0_AL3_WRITE_ADDR_OFFSET) // DMA_CH0_AL3_WRITE_ADDR // Alias for channel 0 WRITE_ADDR register io_rw_32 al3_write_addr; _REG_(DMA_CH0_AL3_TRANS_COUNT_OFFSET) // DMA_CH0_AL3_TRANS_COUNT // Alias for channel 0 TRANS_COUNT register io_rw_32 al3_transfer_count; _REG_(DMA_CH0_AL3_READ_ADDR_TRIG_OFFSET) // DMA_CH0_AL3_READ_ADDR_TRIG // Alias for channel 0 READ_ADDR register io_rw_32 al3_read_addr_trig; } dma_channel_hw_t; typedef struct { dma_channel_hw_t ch[NUM_DMA_CHANNELS]; // 12 uint32_t _pad0[64]; _REG_(DMA_INTR_OFFSET) // DMA_INTR // Interrupt Status (raw) // 0x0000ffff [15:0] : INTR (0): Raw interrupt status for DMA Channels 0 io_rw_32 intr; _REG_(DMA_INTE0_OFFSET) // DMA_INTE0 // Interrupt Enables for IRQ 0 // 0x0000ffff [15:0] : INTE0 (0): Set bit n to pass interrupts from channel n to DMA IRQ 0 io_rw_32 inte0; _REG_(DMA_INTF0_OFFSET) // DMA_INTF0 // Force Interrupts // 0x0000ffff [15:0] : INTF0 (0): Write 1s to force the corresponding bits in INTE0 io_rw_32 intf0; _REG_(DMA_INTS0_OFFSET) // DMA_INTS0 // Interrupt Status for IRQ 0 // 0x0000ffff [15:0] : INTS0 (0): Indicates active channel interrupt requests which are currently causing IRQ 0 to be asserted io_rw_32 ints0; uint32_t _pad1; _REG_(DMA_INTE1_OFFSET) // DMA_INTE1 // Interrupt Enables for IRQ 1 // 0x0000ffff [15:0] : INTE1 (0): Set bit n to pass interrupts from channel n to DMA IRQ 1 io_rw_32 inte1; _REG_(DMA_INTF1_OFFSET) // DMA_INTF1 // Force Interrupts for IRQ 1 // 0x0000ffff [15:0] : INTF1 (0): Write 1s to force the corresponding bits in INTE0 io_rw_32 intf1; _REG_(DMA_INTS1_OFFSET) // DMA_INTS1 // Interrupt Status (masked) for IRQ 1 // 0x0000ffff [15:0] : INTS1 (0): Indicates active channel interrupt requests which are currently causing IRQ 1 to be asserted io_rw_32 ints1; _REG_(DMA_TIMER0_OFFSET) // DMA_TIMER0 // (Description copied from array index 0 register DMA_TIMER0 applies similarly to other array indexes) // // Pacing (X/Y) Fractional Timer // 0xffff0000 [31:16] : X (0): Pacing Timer Dividend // 0x0000ffff [15:0] : Y (0): Pacing Timer Divisor io_rw_32 timer[NUM_DMA_TIMERS]; // 4 _REG_(DMA_MULTI_CHAN_TRIGGER_OFFSET) // DMA_MULTI_CHAN_TRIGGER // Trigger one or more channels simultaneously // 0x0000ffff [15:0] : MULTI_CHAN_TRIGGER (0): Each bit in this register corresponds to a DMA channel io_rw_32 multi_channel_trigger; _REG_(DMA_SNIFF_CTRL_OFFSET) // DMA_SNIFF_CTRL // Sniffer Control // 0x00000800 [11] : OUT_INV (0): If set, the result appears inverted (bitwise complement) when read // 0x00000400 [10] : OUT_REV (0): If set, the result appears bit-reversed when read // 0x00000200 [9] : BSWAP (0): Locally perform a byte reverse on the sniffed data, before feeding into checksum // 0x000001e0 [8:5] : CALC (0) // 0x0000001e [4:1] : DMACH (0): DMA channel for Sniffer to observe // 0x00000001 [0] : EN (0): Enable sniffer io_rw_32 sniff_ctrl; _REG_(DMA_SNIFF_DATA_OFFSET) // DMA_SNIFF_DATA // Data accumulator for sniff hardware io_rw_32 sniff_data; uint32_t _pad2; _REG_(DMA_FIFO_LEVELS_OFFSET) // DMA_FIFO_LEVELS // Debug RAF, WAF, TDF levels // 0x00ff0000 [23:16] : RAF_LVL (0): Current Read-Address-FIFO fill level // 0x0000ff00 [15:8] : WAF_LVL (0): Current Write-Address-FIFO fill level // 0x000000ff [7:0] : TDF_LVL (0): Current Transfer-Data-FIFO fill level io_ro_32 fifo_levels; _REG_(DMA_CHAN_ABORT_OFFSET) // DMA_CHAN_ABORT // Abort an in-progress transfer sequence on one or more channels // 0x0000ffff [15:0] : CHAN_ABORT (0): Each bit corresponds to a channel io_rw_32 abort; } dma_hw_t; typedef struct { struct dma_debug_hw_channel { io_rw_32 ctrdeq; io_ro_32 tcr; uint32_t pad[14]; } ch[NUM_DMA_CHANNELS]; } dma_debug_hw_t; #define dma_hw ((dma_hw_t *)DMA_BASE) #define dma_debug_hw ((dma_debug_hw_t *)(DMA_BASE + DMA_CH0_DBG_CTDREQ_OFFSET)) static_assert( NUM_DMA_TIMERS == 4, ""); static_assert( NUM_DMA_CHANNELS == 12, ""); #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/i2c.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_I2C_H #define _HARDWARE_STRUCTS_I2C_H #include "hardware/address_mapped.h" #include "hardware/regs/i2c.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_i2c // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/i2c.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(I2C_IC_CON_OFFSET) // I2C_IC_CON // I2C Control Register // 0x00000400 [10] : STOP_DET_IF_MASTER_ACTIVE (0): Master issues the STOP_DET interrupt irrespective of whether... // 0x00000200 [9] : RX_FIFO_FULL_HLD_CTRL (0): This bit controls whether DW_apb_i2c should hold the bus when the Rx... // 0x00000100 [8] : TX_EMPTY_CTRL (0): This bit controls the generation of the TX_EMPTY interrupt, as described in... // 0x00000080 [7] : STOP_DET_IFADDRESSED (0): In slave mode: - 1'b1: issues the STOP_DET interrupt only when it is... // 0x00000040 [6] : IC_SLAVE_DISABLE (1): This bit controls whether I2C has its slave disabled, which means once... // 0x00000020 [5] : IC_RESTART_EN (1): Determines whether RESTART conditions may be sent when acting as a master // 0x00000010 [4] : IC_10BITADDR_MASTER (0): Controls whether the DW_apb_i2c starts its transfers in 7- or 10-bit... // 0x00000008 [3] : IC_10BITADDR_SLAVE (0): When acting as a slave, this bit controls whether the DW_apb_i2c... // 0x00000006 [2:1] : SPEED (0x2): These bits control at which speed the DW_apb_i2c operates; its setting is relevant... // 0x00000001 [0] : MASTER_MODE (1): This bit controls whether the DW_apb_i2c master is enabled io_rw_32 con; _REG_(I2C_IC_TAR_OFFSET) // I2C_IC_TAR // I2C Target Address Register // 0x00000800 [11] : SPECIAL (0): This bit indicates whether software performs a Device-ID or General Call or START... // 0x00000400 [10] : GC_OR_START (0): If bit 11 (SPECIAL) is set to 1 and bit 13(Device-ID) is set to 0, then this... // 0x000003ff [9:0] : IC_TAR (0x55): This is the target address for any master transaction io_rw_32 tar; _REG_(I2C_IC_SAR_OFFSET) // I2C_IC_SAR // I2C Slave Address Register // 0x000003ff [9:0] : IC_SAR (0x55): The IC_SAR holds the slave address when the I2C is operating as a slave io_rw_32 sar; uint32_t _pad0; _REG_(I2C_IC_DATA_CMD_OFFSET) // I2C_IC_DATA_CMD // I2C Rx/Tx Data Buffer and Command Register; this is the register the CPU writes to when filling the TX FIFO and the... // 0x00000800 [11] : FIRST_DATA_BYTE (0): Indicates the first data byte received after the address phase for receive... // 0x00000400 [10] : RESTART (0): This bit controls whether a RESTART is issued before the byte is sent or received // 0x00000200 [9] : STOP (0): This bit controls whether a STOP is issued after the byte is sent or received // 0x00000100 [8] : CMD (0): This bit controls whether a read or a write is performed // 0x000000ff [7:0] : DAT (0): This register contains the data to be transmitted or received on the I2C bus io_rw_32 data_cmd; _REG_(I2C_IC_SS_SCL_HCNT_OFFSET) // I2C_IC_SS_SCL_HCNT // Standard Speed I2C Clock SCL High Count Register // 0x0000ffff [15:0] : IC_SS_SCL_HCNT (0x28): This register must be set before any I2C bus transaction can take place... io_rw_32 ss_scl_hcnt; _REG_(I2C_IC_SS_SCL_LCNT_OFFSET) // I2C_IC_SS_SCL_LCNT // Standard Speed I2C Clock SCL Low Count Register // 0x0000ffff [15:0] : IC_SS_SCL_LCNT (0x2f): This register must be set before any I2C bus transaction can take place... io_rw_32 ss_scl_lcnt; _REG_(I2C_IC_FS_SCL_HCNT_OFFSET) // I2C_IC_FS_SCL_HCNT // Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register // 0x0000ffff [15:0] : IC_FS_SCL_HCNT (0x6): This register must be set before any I2C bus transaction can take place... io_rw_32 fs_scl_hcnt; _REG_(I2C_IC_FS_SCL_LCNT_OFFSET) // I2C_IC_FS_SCL_LCNT // Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register // 0x0000ffff [15:0] : IC_FS_SCL_LCNT (0xd): This register must be set before any I2C bus transaction can take place... io_rw_32 fs_scl_lcnt; uint32_t _pad1[2]; _REG_(I2C_IC_INTR_STAT_OFFSET) // I2C_IC_INTR_STAT // I2C Interrupt Status Register // 0x00001000 [12] : R_RESTART_DET (0): See IC_RAW_INTR_STAT for a detailed description of R_RESTART_DET bit // 0x00000800 [11] : R_GEN_CALL (0): See IC_RAW_INTR_STAT for a detailed description of R_GEN_CALL bit // 0x00000400 [10] : R_START_DET (0): See IC_RAW_INTR_STAT for a detailed description of R_START_DET bit // 0x00000200 [9] : R_STOP_DET (0): See IC_RAW_INTR_STAT for a detailed description of R_STOP_DET bit // 0x00000100 [8] : R_ACTIVITY (0): See IC_RAW_INTR_STAT for a detailed description of R_ACTIVITY bit // 0x00000080 [7] : R_RX_DONE (0): See IC_RAW_INTR_STAT for a detailed description of R_RX_DONE bit // 0x00000040 [6] : R_TX_ABRT (0): See IC_RAW_INTR_STAT for a detailed description of R_TX_ABRT bit // 0x00000020 [5] : R_RD_REQ (0): See IC_RAW_INTR_STAT for a detailed description of R_RD_REQ bit // 0x00000010 [4] : R_TX_EMPTY (0): See IC_RAW_INTR_STAT for a detailed description of R_TX_EMPTY bit // 0x00000008 [3] : R_TX_OVER (0): See IC_RAW_INTR_STAT for a detailed description of R_TX_OVER bit // 0x00000004 [2] : R_RX_FULL (0): See IC_RAW_INTR_STAT for a detailed description of R_RX_FULL bit // 0x00000002 [1] : R_RX_OVER (0): See IC_RAW_INTR_STAT for a detailed description of R_RX_OVER bit // 0x00000001 [0] : R_RX_UNDER (0): See IC_RAW_INTR_STAT for a detailed description of R_RX_UNDER bit io_ro_32 intr_stat; _REG_(I2C_IC_INTR_MASK_OFFSET) // I2C_IC_INTR_MASK // I2C Interrupt Mask Register // 0x00001000 [12] : M_RESTART_DET (0): This bit masks the R_RESTART_DET interrupt in IC_INTR_STAT register // 0x00000800 [11] : M_GEN_CALL (1): This bit masks the R_GEN_CALL interrupt in IC_INTR_STAT register // 0x00000400 [10] : M_START_DET (0): This bit masks the R_START_DET interrupt in IC_INTR_STAT register // 0x00000200 [9] : M_STOP_DET (0): This bit masks the R_STOP_DET interrupt in IC_INTR_STAT register // 0x00000100 [8] : M_ACTIVITY (0): This bit masks the R_ACTIVITY interrupt in IC_INTR_STAT register // 0x00000080 [7] : M_RX_DONE (1): This bit masks the R_RX_DONE interrupt in IC_INTR_STAT register // 0x00000040 [6] : M_TX_ABRT (1): This bit masks the R_TX_ABRT interrupt in IC_INTR_STAT register // 0x00000020 [5] : M_RD_REQ (1): This bit masks the R_RD_REQ interrupt in IC_INTR_STAT register // 0x00000010 [4] : M_TX_EMPTY (1): This bit masks the R_TX_EMPTY interrupt in IC_INTR_STAT register // 0x00000008 [3] : M_TX_OVER (1): This bit masks the R_TX_OVER interrupt in IC_INTR_STAT register // 0x00000004 [2] : M_RX_FULL (1): This bit masks the R_RX_FULL interrupt in IC_INTR_STAT register // 0x00000002 [1] : M_RX_OVER (1): This bit masks the R_RX_OVER interrupt in IC_INTR_STAT register // 0x00000001 [0] : M_RX_UNDER (1): This bit masks the R_RX_UNDER interrupt in IC_INTR_STAT register io_rw_32 intr_mask; _REG_(I2C_IC_RAW_INTR_STAT_OFFSET) // I2C_IC_RAW_INTR_STAT // I2C Raw Interrupt Status Register // 0x00001000 [12] : RESTART_DET (0): Indicates whether a RESTART condition has occurred on the I2C interface when... // 0x00000800 [11] : GEN_CALL (0): Set only when a General Call address is received and it is acknowledged // 0x00000400 [10] : START_DET (0): Indicates whether a START or RESTART condition has occurred on the I2C interface... // 0x00000200 [9] : STOP_DET (0): Indicates whether a STOP condition has occurred on the I2C interface regardless... // 0x00000100 [8] : ACTIVITY (0): This bit captures DW_apb_i2c activity and stays set until it is cleared // 0x00000080 [7] : RX_DONE (0): When the DW_apb_i2c is acting as a slave-transmitter, this bit is set to 1 if the... // 0x00000040 [6] : TX_ABRT (0): This bit indicates if DW_apb_i2c, as an I2C transmitter, is unable to complete the... // 0x00000020 [5] : RD_REQ (0): This bit is set to 1 when DW_apb_i2c is acting as a slave and another I2C master is... // 0x00000010 [4] : TX_EMPTY (0): The behavior of the TX_EMPTY interrupt status differs based on the TX_EMPTY_CTRL... // 0x00000008 [3] : TX_OVER (0): Set during transmit if the transmit buffer is filled to IC_TX_BUFFER_DEPTH and the... // 0x00000004 [2] : RX_FULL (0): Set when the receive buffer reaches or goes above the RX_TL threshold in the... // 0x00000002 [1] : RX_OVER (0): Set if the receive buffer is completely filled to IC_RX_BUFFER_DEPTH and an... // 0x00000001 [0] : RX_UNDER (0): Set if the processor attempts to read the receive buffer when it is empty by... io_ro_32 raw_intr_stat; _REG_(I2C_IC_RX_TL_OFFSET) // I2C_IC_RX_TL // I2C Receive FIFO Threshold Register // 0x000000ff [7:0] : RX_TL (0): Receive FIFO Threshold Level io_rw_32 rx_tl; _REG_(I2C_IC_TX_TL_OFFSET) // I2C_IC_TX_TL // I2C Transmit FIFO Threshold Register // 0x000000ff [7:0] : TX_TL (0): Transmit FIFO Threshold Level io_rw_32 tx_tl; _REG_(I2C_IC_CLR_INTR_OFFSET) // I2C_IC_CLR_INTR // Clear Combined and Individual Interrupt Register // 0x00000001 [0] : CLR_INTR (0): Read this register to clear the combined interrupt, all individual interrupts,... io_ro_32 clr_intr; _REG_(I2C_IC_CLR_RX_UNDER_OFFSET) // I2C_IC_CLR_RX_UNDER // Clear RX_UNDER Interrupt Register // 0x00000001 [0] : CLR_RX_UNDER (0): Read this register to clear the RX_UNDER interrupt (bit 0) of the... io_ro_32 clr_rx_under; _REG_(I2C_IC_CLR_RX_OVER_OFFSET) // I2C_IC_CLR_RX_OVER // Clear RX_OVER Interrupt Register // 0x00000001 [0] : CLR_RX_OVER (0): Read this register to clear the RX_OVER interrupt (bit 1) of the... io_ro_32 clr_rx_over; _REG_(I2C_IC_CLR_TX_OVER_OFFSET) // I2C_IC_CLR_TX_OVER // Clear TX_OVER Interrupt Register // 0x00000001 [0] : CLR_TX_OVER (0): Read this register to clear the TX_OVER interrupt (bit 3) of the... io_ro_32 clr_tx_over; _REG_(I2C_IC_CLR_RD_REQ_OFFSET) // I2C_IC_CLR_RD_REQ // Clear RD_REQ Interrupt Register // 0x00000001 [0] : CLR_RD_REQ (0): Read this register to clear the RD_REQ interrupt (bit 5) of the... io_ro_32 clr_rd_req; _REG_(I2C_IC_CLR_TX_ABRT_OFFSET) // I2C_IC_CLR_TX_ABRT // Clear TX_ABRT Interrupt Register // 0x00000001 [0] : CLR_TX_ABRT (0): Read this register to clear the TX_ABRT interrupt (bit 6) of the... io_ro_32 clr_tx_abrt; _REG_(I2C_IC_CLR_RX_DONE_OFFSET) // I2C_IC_CLR_RX_DONE // Clear RX_DONE Interrupt Register // 0x00000001 [0] : CLR_RX_DONE (0): Read this register to clear the RX_DONE interrupt (bit 7) of the... io_ro_32 clr_rx_done; _REG_(I2C_IC_CLR_ACTIVITY_OFFSET) // I2C_IC_CLR_ACTIVITY // Clear ACTIVITY Interrupt Register // 0x00000001 [0] : CLR_ACTIVITY (0): Reading this register clears the ACTIVITY interrupt if the I2C is not active anymore io_ro_32 clr_activity; _REG_(I2C_IC_CLR_STOP_DET_OFFSET) // I2C_IC_CLR_STOP_DET // Clear STOP_DET Interrupt Register // 0x00000001 [0] : CLR_STOP_DET (0): Read this register to clear the STOP_DET interrupt (bit 9) of the... io_ro_32 clr_stop_det; _REG_(I2C_IC_CLR_START_DET_OFFSET) // I2C_IC_CLR_START_DET // Clear START_DET Interrupt Register // 0x00000001 [0] : CLR_START_DET (0): Read this register to clear the START_DET interrupt (bit 10) of the... io_ro_32 clr_start_det; _REG_(I2C_IC_CLR_GEN_CALL_OFFSET) // I2C_IC_CLR_GEN_CALL // Clear GEN_CALL Interrupt Register // 0x00000001 [0] : CLR_GEN_CALL (0): Read this register to clear the GEN_CALL interrupt (bit 11) of... io_ro_32 clr_gen_call; _REG_(I2C_IC_ENABLE_OFFSET) // I2C_IC_ENABLE // I2C Enable Register // 0x00000004 [2] : TX_CMD_BLOCK (0): In Master mode: - 1'b1: Blocks the transmission of data on I2C bus even if Tx... // 0x00000002 [1] : ABORT (0): When set, the controller initiates the transfer abort // 0x00000001 [0] : ENABLE (0): Controls whether the DW_apb_i2c is enabled io_rw_32 enable; _REG_(I2C_IC_STATUS_OFFSET) // I2C_IC_STATUS // I2C Status Register // 0x00000040 [6] : SLV_ACTIVITY (0): Slave FSM Activity Status // 0x00000020 [5] : MST_ACTIVITY (0): Master FSM Activity Status // 0x00000010 [4] : RFF (0): Receive FIFO Completely Full // 0x00000008 [3] : RFNE (0): Receive FIFO Not Empty // 0x00000004 [2] : TFE (1): Transmit FIFO Completely Empty // 0x00000002 [1] : TFNF (1): Transmit FIFO Not Full // 0x00000001 [0] : ACTIVITY (0): I2C Activity Status io_ro_32 status; _REG_(I2C_IC_TXFLR_OFFSET) // I2C_IC_TXFLR // I2C Transmit FIFO Level Register This register contains the number of valid data entries in the transmit FIFO buffer // 0x0000001f [4:0] : TXFLR (0): Transmit FIFO Level io_ro_32 txflr; _REG_(I2C_IC_RXFLR_OFFSET) // I2C_IC_RXFLR // I2C Receive FIFO Level Register This register contains the number of valid data entries in the receive FIFO buffer // 0x0000001f [4:0] : RXFLR (0): Receive FIFO Level io_ro_32 rxflr; _REG_(I2C_IC_SDA_HOLD_OFFSET) // I2C_IC_SDA_HOLD // I2C SDA Hold Time Length Register // 0x00ff0000 [23:16] : IC_SDA_RX_HOLD (0): Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c... // 0x0000ffff [15:0] : IC_SDA_TX_HOLD (1): Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c... io_rw_32 sda_hold; _REG_(I2C_IC_TX_ABRT_SOURCE_OFFSET) // I2C_IC_TX_ABRT_SOURCE // I2C Transmit Abort Source Register // 0xff800000 [31:23] : TX_FLUSH_CNT (0): This field indicates the number of Tx FIFO Data Commands which are flushed... // 0x00010000 [16] : ABRT_USER_ABRT (0): This is a master-mode-only bit // 0x00008000 [15] : ABRT_SLVRD_INTX (0): 1: When the processor side responds to a slave mode request for data to be... // 0x00004000 [14] : ABRT_SLV_ARBLOST (0): This field indicates that a Slave has lost the bus while transmitting... // 0x00002000 [13] : ABRT_SLVFLUSH_TXFIFO (0): This field specifies that the Slave has received a read command and... // 0x00001000 [12] : ARB_LOST (0): This field specifies that the Master has lost arbitration, or if... // 0x00000800 [11] : ABRT_MASTER_DIS (0): This field indicates that the User tries to initiate a Master operation... // 0x00000400 [10] : ABRT_10B_RD_NORSTRT (0): This field indicates that the restart is disabled (IC_RESTART_EN bit... // 0x00000200 [9] : ABRT_SBYTE_NORSTRT (0): To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed... // 0x00000100 [8] : ABRT_HS_NORSTRT (0): This field indicates that the restart is disabled (IC_RESTART_EN bit... // 0x00000080 [7] : ABRT_SBYTE_ACKDET (0): This field indicates that the Master has sent a START Byte and the START... // 0x00000040 [6] : ABRT_HS_ACKDET (0): This field indicates that the Master is in High Speed mode and the High... // 0x00000020 [5] : ABRT_GCALL_READ (0): This field indicates that DW_apb_i2c in the master mode has sent a General... // 0x00000010 [4] : ABRT_GCALL_NOACK (0): This field indicates that DW_apb_i2c in master mode has sent a General... // 0x00000008 [3] : ABRT_TXDATA_NOACK (0): This field indicates the master-mode only bit // 0x00000004 [2] : ABRT_10ADDR2_NOACK (0): This field indicates that the Master is in 10-bit address mode and that... // 0x00000002 [1] : ABRT_10ADDR1_NOACK (0): This field indicates that the Master is in 10-bit address mode and the... // 0x00000001 [0] : ABRT_7B_ADDR_NOACK (0): This field indicates that the Master is in 7-bit addressing mode and... io_ro_32 tx_abrt_source; _REG_(I2C_IC_SLV_DATA_NACK_ONLY_OFFSET) // I2C_IC_SLV_DATA_NACK_ONLY // Generate Slave Data NACK Register // 0x00000001 [0] : NACK (0): Generate NACK io_rw_32 slv_data_nack_only; _REG_(I2C_IC_DMA_CR_OFFSET) // I2C_IC_DMA_CR // DMA Control Register // 0x00000002 [1] : TDMAE (0): Transmit DMA Enable // 0x00000001 [0] : RDMAE (0): Receive DMA Enable io_rw_32 dma_cr; _REG_(I2C_IC_DMA_TDLR_OFFSET) // I2C_IC_DMA_TDLR // DMA Transmit Data Level Register // 0x0000000f [3:0] : DMATDL (0): Transmit Data Level io_rw_32 dma_tdlr; _REG_(I2C_IC_DMA_RDLR_OFFSET) // I2C_IC_DMA_RDLR // I2C Receive Data Level Register // 0x0000000f [3:0] : DMARDL (0): Receive Data Level io_rw_32 dma_rdlr; _REG_(I2C_IC_SDA_SETUP_OFFSET) // I2C_IC_SDA_SETUP // I2C SDA Setup Register // 0x000000ff [7:0] : SDA_SETUP (0x64): SDA Setup io_rw_32 sda_setup; _REG_(I2C_IC_ACK_GENERAL_CALL_OFFSET) // I2C_IC_ACK_GENERAL_CALL // I2C ACK General Call Register // 0x00000001 [0] : ACK_GEN_CALL (1): ACK General Call io_rw_32 ack_general_call; _REG_(I2C_IC_ENABLE_STATUS_OFFSET) // I2C_IC_ENABLE_STATUS // I2C Enable Status Register // 0x00000004 [2] : SLV_RX_DATA_LOST (0): Slave Received Data Lost // 0x00000002 [1] : SLV_DISABLED_WHILE_BUSY (0): Slave Disabled While Busy (Transmit, Receive) // 0x00000001 [0] : IC_EN (0): ic_en Status io_ro_32 enable_status; _REG_(I2C_IC_FS_SPKLEN_OFFSET) // I2C_IC_FS_SPKLEN // I2C SS, FS or FM+ spike suppression limit // 0x000000ff [7:0] : IC_FS_SPKLEN (0x7): This register must be set before any I2C bus transaction can take place to... io_rw_32 fs_spklen; uint32_t _pad2; _REG_(I2C_IC_CLR_RESTART_DET_OFFSET) // I2C_IC_CLR_RESTART_DET // Clear RESTART_DET Interrupt Register // 0x00000001 [0] : CLR_RESTART_DET (0): Read this register to clear the RESTART_DET interrupt (bit 12) of... io_ro_32 clr_restart_det; uint32_t _pad3[18]; _REG_(I2C_IC_COMP_PARAM_1_OFFSET) // I2C_IC_COMP_PARAM_1 // Component Parameter Register 1 // 0x00ff0000 [23:16] : TX_BUFFER_DEPTH (0): TX Buffer Depth = 16 // 0x0000ff00 [15:8] : RX_BUFFER_DEPTH (0): RX Buffer Depth = 16 // 0x00000080 [7] : ADD_ENCODED_PARAMS (0): Encoded parameters not visible // 0x00000040 [6] : HAS_DMA (0): DMA handshaking signals are enabled // 0x00000020 [5] : INTR_IO (0): COMBINED Interrupt outputs // 0x00000010 [4] : HC_COUNT_VALUES (0): Programmable count values for each mode // 0x0000000c [3:2] : MAX_SPEED_MODE (0): MAX SPEED MODE = FAST MODE // 0x00000003 [1:0] : APB_DATA_WIDTH (0): APB data bus width is 32 bits io_ro_32 comp_param_1; _REG_(I2C_IC_COMP_VERSION_OFFSET) // I2C_IC_COMP_VERSION // I2C Component Version Register // 0xffffffff [31:0] : IC_COMP_VERSION (0x3230312a) io_ro_32 comp_version; _REG_(I2C_IC_COMP_TYPE_OFFSET) // I2C_IC_COMP_TYPE // I2C Component Type Register // 0xffffffff [31:0] : IC_COMP_TYPE (0x44570140): Designware Component Type number = 0x44_57_01_40 io_ro_32 comp_type; } i2c_hw_t; #define i2c0_hw ((i2c_hw_t *)I2C0_BASE) #define i2c1_hw ((i2c_hw_t *)I2C1_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/interp.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_INTERP_H #define _HARDWARE_STRUCTS_INTERP_H #include "hardware/address_mapped.h" #include "hardware/regs/sio.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_sio // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/sio.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(SIO_INTERP0_ACCUM0_OFFSET) // SIO_INTERP0_ACCUM0 // (Description copied from array index 0 register SIO_INTERP0_ACCUM0 applies similarly to other array indexes) // // Read/write access to accumulator 0 io_rw_32 accum[2]; _REG_(SIO_INTERP0_BASE0_OFFSET) // SIO_INTERP0_BASE0 // (Description copied from array index 0 register SIO_INTERP0_BASE0 applies similarly to other array indexes) // // Read/write access to BASE0 register io_rw_32 base[3]; _REG_(SIO_INTERP0_POP_LANE0_OFFSET) // SIO_INTERP0_POP_LANE0 // (Description copied from array index 0 register SIO_INTERP0_POP_LANE0 applies similarly to other array indexes) // // Read LANE0 result, and simultaneously write lane results to both accumulators (POP) io_ro_32 pop[3]; _REG_(SIO_INTERP0_PEEK_LANE0_OFFSET) // SIO_INTERP0_PEEK_LANE0 // (Description copied from array index 0 register SIO_INTERP0_PEEK_LANE0 applies similarly to other array indexes) // // Read LANE0 result, without altering any internal state (PEEK) io_ro_32 peek[3]; _REG_(SIO_INTERP0_CTRL_LANE0_OFFSET) // SIO_INTERP0_CTRL_LANE0 // (Description copied from array index 0 register SIO_INTERP0_CTRL_LANE0 applies similarly to other array indexes) // // Control register for lane 0 // 0x02000000 [25] : OVERF (0): Set if either OVERF0 or OVERF1 is set // 0x01000000 [24] : OVERF1 (0): Indicates if any masked-off MSBs in ACCUM1 are set // 0x00800000 [23] : OVERF0 (0): Indicates if any masked-off MSBs in ACCUM0 are set // 0x00200000 [21] : BLEND (0): Only present on INTERP0 on each core // 0x00180000 [20:19] : FORCE_MSB (0): ORed into bits 29:28 of the lane result presented to the processor on the bus // 0x00040000 [18] : ADD_RAW (0): If 1, mask + shift is bypassed for LANE0 result // 0x00020000 [17] : CROSS_RESULT (0): If 1, feed the opposite lane's result into this lane's accumulator on POP // 0x00010000 [16] : CROSS_INPUT (0): If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware // 0x00008000 [15] : SIGNED (0): If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits // 0x00007c00 [14:10] : MASK_MSB (0): The most-significant bit allowed to pass by the mask (inclusive) // 0x000003e0 [9:5] : MASK_LSB (0): The least-significant bit allowed to pass by the mask (inclusive) // 0x0000001f [4:0] : SHIFT (0): Logical right-shift applied to accumulator before masking io_rw_32 ctrl[2]; _REG_(SIO_INTERP0_ACCUM0_ADD_OFFSET) // SIO_INTERP0_ACCUM0_ADD // (Description copied from array index 0 register SIO_INTERP0_ACCUM0_ADD applies similarly to other array indexes) // // Values written here are atomically added to ACCUM0 // 0x00ffffff [23:0] : INTERP0_ACCUM0_ADD (0) io_rw_32 add_raw[2]; _REG_(SIO_INTERP0_BASE_1AND0_OFFSET) // SIO_INTERP0_BASE_1AND0 // On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously io_wo_32 base01; } interp_hw_t; #define interp_hw_array ((interp_hw_t *)(SIO_BASE + SIO_INTERP0_ACCUM0_OFFSET)) #define interp0_hw (&interp_hw_array[0]) #define interp1_hw (&interp_hw_array[1]) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/iobank0.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_IOBANK0_H #define _HARDWARE_STRUCTS_IOBANK0_H #include "hardware/address_mapped.h" #include "hardware/regs/io_bank0.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_io_bank0 // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/io_bank0.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(IO_BANK0_GPIO0_STATUS_OFFSET) // IO_BANK0_GPIO0_STATUS // GPIO status // 0x04000000 [26] : IRQTOPROC (0): interrupt to processors, after override is applied // 0x01000000 [24] : IRQFROMPAD (0): interrupt from pad before override is applied // 0x00080000 [19] : INTOPERI (0): input signal to peripheral, after override is applied // 0x00020000 [17] : INFROMPAD (0): input signal from pad, before override is applied // 0x00002000 [13] : OETOPAD (0): output enable to pad after register override is applied // 0x00001000 [12] : OEFROMPERI (0): output enable from selected peripheral, before register override is applied // 0x00000200 [9] : OUTTOPAD (0): output signal to pad after register override is applied // 0x00000100 [8] : OUTFROMPERI (0): output signal from selected peripheral, before register override is applied io_ro_32 status; _REG_(IO_BANK0_GPIO0_CTRL_OFFSET) // IO_BANK0_GPIO0_CTRL // GPIO control including function select and overrides // 0x30000000 [29:28] : IRQOVER (0) // 0x00030000 [17:16] : INOVER (0) // 0x00003000 [13:12] : OEOVER (0) // 0x00000300 [9:8] : OUTOVER (0) // 0x0000001f [4:0] : FUNCSEL (0x1f): 0-31 -> selects pin function according to the gpio table io_rw_32 ctrl; } iobank0_status_ctrl_hw_t; typedef struct { _REG_(IO_BANK0_PROC0_INTE0_OFFSET) // IO_BANK0_PROC0_INTE0 // (Description copied from array index 0 register IO_BANK0_PROC0_INTE0 applies similarly to other array indexes) // // Interrupt Enable for proc0 // 0x80000000 [31] : GPIO7_EDGE_HIGH (0) // 0x40000000 [30] : GPIO7_EDGE_LOW (0) // 0x20000000 [29] : GPIO7_LEVEL_HIGH (0) // 0x10000000 [28] : GPIO7_LEVEL_LOW (0) // 0x08000000 [27] : GPIO6_EDGE_HIGH (0) // 0x04000000 [26] : GPIO6_EDGE_LOW (0) // 0x02000000 [25] : GPIO6_LEVEL_HIGH (0) // 0x01000000 [24] : GPIO6_LEVEL_LOW (0) // 0x00800000 [23] : GPIO5_EDGE_HIGH (0) // 0x00400000 [22] : GPIO5_EDGE_LOW (0) // 0x00200000 [21] : GPIO5_LEVEL_HIGH (0) // 0x00100000 [20] : GPIO5_LEVEL_LOW (0) // 0x00080000 [19] : GPIO4_EDGE_HIGH (0) // 0x00040000 [18] : GPIO4_EDGE_LOW (0) // 0x00020000 [17] : GPIO4_LEVEL_HIGH (0) // 0x00010000 [16] : GPIO4_LEVEL_LOW (0) // 0x00008000 [15] : GPIO3_EDGE_HIGH (0) // 0x00004000 [14] : GPIO3_EDGE_LOW (0) // 0x00002000 [13] : GPIO3_LEVEL_HIGH (0) // 0x00001000 [12] : GPIO3_LEVEL_LOW (0) // 0x00000800 [11] : GPIO2_EDGE_HIGH (0) // 0x00000400 [10] : GPIO2_EDGE_LOW (0) // 0x00000200 [9] : GPIO2_LEVEL_HIGH (0) // 0x00000100 [8] : GPIO2_LEVEL_LOW (0) // 0x00000080 [7] : GPIO1_EDGE_HIGH (0) // 0x00000040 [6] : GPIO1_EDGE_LOW (0) // 0x00000020 [5] : GPIO1_LEVEL_HIGH (0) // 0x00000010 [4] : GPIO1_LEVEL_LOW (0) // 0x00000008 [3] : GPIO0_EDGE_HIGH (0) // 0x00000004 [2] : GPIO0_EDGE_LOW (0) // 0x00000002 [1] : GPIO0_LEVEL_HIGH (0) // 0x00000001 [0] : GPIO0_LEVEL_LOW (0) io_rw_32 inte[4]; _REG_(IO_BANK0_PROC0_INTF0_OFFSET) // IO_BANK0_PROC0_INTF0 // (Description copied from array index 0 register IO_BANK0_PROC0_INTF0 applies similarly to other array indexes) // // Interrupt Force for proc0 // 0x80000000 [31] : GPIO7_EDGE_HIGH (0) // 0x40000000 [30] : GPIO7_EDGE_LOW (0) // 0x20000000 [29] : GPIO7_LEVEL_HIGH (0) // 0x10000000 [28] : GPIO7_LEVEL_LOW (0) // 0x08000000 [27] : GPIO6_EDGE_HIGH (0) // 0x04000000 [26] : GPIO6_EDGE_LOW (0) // 0x02000000 [25] : GPIO6_LEVEL_HIGH (0) // 0x01000000 [24] : GPIO6_LEVEL_LOW (0) // 0x00800000 [23] : GPIO5_EDGE_HIGH (0) // 0x00400000 [22] : GPIO5_EDGE_LOW (0) // 0x00200000 [21] : GPIO5_LEVEL_HIGH (0) // 0x00100000 [20] : GPIO5_LEVEL_LOW (0) // 0x00080000 [19] : GPIO4_EDGE_HIGH (0) // 0x00040000 [18] : GPIO4_EDGE_LOW (0) // 0x00020000 [17] : GPIO4_LEVEL_HIGH (0) // 0x00010000 [16] : GPIO4_LEVEL_LOW (0) // 0x00008000 [15] : GPIO3_EDGE_HIGH (0) // 0x00004000 [14] : GPIO3_EDGE_LOW (0) // 0x00002000 [13] : GPIO3_LEVEL_HIGH (0) // 0x00001000 [12] : GPIO3_LEVEL_LOW (0) // 0x00000800 [11] : GPIO2_EDGE_HIGH (0) // 0x00000400 [10] : GPIO2_EDGE_LOW (0) // 0x00000200 [9] : GPIO2_LEVEL_HIGH (0) // 0x00000100 [8] : GPIO2_LEVEL_LOW (0) // 0x00000080 [7] : GPIO1_EDGE_HIGH (0) // 0x00000040 [6] : GPIO1_EDGE_LOW (0) // 0x00000020 [5] : GPIO1_LEVEL_HIGH (0) // 0x00000010 [4] : GPIO1_LEVEL_LOW (0) // 0x00000008 [3] : GPIO0_EDGE_HIGH (0) // 0x00000004 [2] : GPIO0_EDGE_LOW (0) // 0x00000002 [1] : GPIO0_LEVEL_HIGH (0) // 0x00000001 [0] : GPIO0_LEVEL_LOW (0) io_rw_32 intf[4]; _REG_(IO_BANK0_PROC0_INTS0_OFFSET) // IO_BANK0_PROC0_INTS0 // (Description copied from array index 0 register IO_BANK0_PROC0_INTS0 applies similarly to other array indexes) // // Interrupt status after masking & forcing for proc0 // 0x80000000 [31] : GPIO7_EDGE_HIGH (0) // 0x40000000 [30] : GPIO7_EDGE_LOW (0) // 0x20000000 [29] : GPIO7_LEVEL_HIGH (0) // 0x10000000 [28] : GPIO7_LEVEL_LOW (0) // 0x08000000 [27] : GPIO6_EDGE_HIGH (0) // 0x04000000 [26] : GPIO6_EDGE_LOW (0) // 0x02000000 [25] : GPIO6_LEVEL_HIGH (0) // 0x01000000 [24] : GPIO6_LEVEL_LOW (0) // 0x00800000 [23] : GPIO5_EDGE_HIGH (0) // 0x00400000 [22] : GPIO5_EDGE_LOW (0) // 0x00200000 [21] : GPIO5_LEVEL_HIGH (0) // 0x00100000 [20] : GPIO5_LEVEL_LOW (0) // 0x00080000 [19] : GPIO4_EDGE_HIGH (0) // 0x00040000 [18] : GPIO4_EDGE_LOW (0) // 0x00020000 [17] : GPIO4_LEVEL_HIGH (0) // 0x00010000 [16] : GPIO4_LEVEL_LOW (0) // 0x00008000 [15] : GPIO3_EDGE_HIGH (0) // 0x00004000 [14] : GPIO3_EDGE_LOW (0) // 0x00002000 [13] : GPIO3_LEVEL_HIGH (0) // 0x00001000 [12] : GPIO3_LEVEL_LOW (0) // 0x00000800 [11] : GPIO2_EDGE_HIGH (0) // 0x00000400 [10] : GPIO2_EDGE_LOW (0) // 0x00000200 [9] : GPIO2_LEVEL_HIGH (0) // 0x00000100 [8] : GPIO2_LEVEL_LOW (0) // 0x00000080 [7] : GPIO1_EDGE_HIGH (0) // 0x00000040 [6] : GPIO1_EDGE_LOW (0) // 0x00000020 [5] : GPIO1_LEVEL_HIGH (0) // 0x00000010 [4] : GPIO1_LEVEL_LOW (0) // 0x00000008 [3] : GPIO0_EDGE_HIGH (0) // 0x00000004 [2] : GPIO0_EDGE_LOW (0) // 0x00000002 [1] : GPIO0_LEVEL_HIGH (0) // 0x00000001 [0] : GPIO0_LEVEL_LOW (0) io_ro_32 ints[4]; } io_irq_ctrl_hw_t; /// \tag::iobank0_hw[] typedef struct { iobank0_status_ctrl_hw_t io[NUM_BANK0_GPIOS]; // 30 _REG_(IO_BANK0_INTR0_OFFSET) // IO_BANK0_INTR0 // (Description copied from array index 0 register IO_BANK0_INTR0 applies similarly to other array indexes) // // Raw Interrupts // 0x80000000 [31] : GPIO7_EDGE_HIGH (0) // 0x40000000 [30] : GPIO7_EDGE_LOW (0) // 0x20000000 [29] : GPIO7_LEVEL_HIGH (0) // 0x10000000 [28] : GPIO7_LEVEL_LOW (0) // 0x08000000 [27] : GPIO6_EDGE_HIGH (0) // 0x04000000 [26] : GPIO6_EDGE_LOW (0) // 0x02000000 [25] : GPIO6_LEVEL_HIGH (0) // 0x01000000 [24] : GPIO6_LEVEL_LOW (0) // 0x00800000 [23] : GPIO5_EDGE_HIGH (0) // 0x00400000 [22] : GPIO5_EDGE_LOW (0) // 0x00200000 [21] : GPIO5_LEVEL_HIGH (0) // 0x00100000 [20] : GPIO5_LEVEL_LOW (0) // 0x00080000 [19] : GPIO4_EDGE_HIGH (0) // 0x00040000 [18] : GPIO4_EDGE_LOW (0) // 0x00020000 [17] : GPIO4_LEVEL_HIGH (0) // 0x00010000 [16] : GPIO4_LEVEL_LOW (0) // 0x00008000 [15] : GPIO3_EDGE_HIGH (0) // 0x00004000 [14] : GPIO3_EDGE_LOW (0) // 0x00002000 [13] : GPIO3_LEVEL_HIGH (0) // 0x00001000 [12] : GPIO3_LEVEL_LOW (0) // 0x00000800 [11] : GPIO2_EDGE_HIGH (0) // 0x00000400 [10] : GPIO2_EDGE_LOW (0) // 0x00000200 [9] : GPIO2_LEVEL_HIGH (0) // 0x00000100 [8] : GPIO2_LEVEL_LOW (0) // 0x00000080 [7] : GPIO1_EDGE_HIGH (0) // 0x00000040 [6] : GPIO1_EDGE_LOW (0) // 0x00000020 [5] : GPIO1_LEVEL_HIGH (0) // 0x00000010 [4] : GPIO1_LEVEL_LOW (0) // 0x00000008 [3] : GPIO0_EDGE_HIGH (0) // 0x00000004 [2] : GPIO0_EDGE_LOW (0) // 0x00000002 [1] : GPIO0_LEVEL_HIGH (0) // 0x00000001 [0] : GPIO0_LEVEL_LOW (0) io_rw_32 intr[4]; io_irq_ctrl_hw_t proc0_irq_ctrl; io_irq_ctrl_hw_t proc1_irq_ctrl; io_irq_ctrl_hw_t dormant_wake_irq_ctrl; } iobank0_hw_t; #define iobank0_hw ((iobank0_hw_t *)IO_BANK0_BASE) /// \end::iobank0_hw[] static_assert( NUM_BANK0_GPIOS == 30, ""); #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/ioqspi.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_IOQSPI_H #define _HARDWARE_STRUCTS_IOQSPI_H #include "hardware/address_mapped.h" #include "hardware/regs/io_qspi.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_io_qspi // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/io_qspi.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(IO_QSPI_GPIO_QSPI_SCLK_STATUS_OFFSET) // IO_QSPI_GPIO_QSPI_SCLK_STATUS // GPIO status // 0x04000000 [26] : IRQTOPROC (0): interrupt to processors, after override is applied // 0x01000000 [24] : IRQFROMPAD (0): interrupt from pad before override is applied // 0x00080000 [19] : INTOPERI (0): input signal to peripheral, after override is applied // 0x00020000 [17] : INFROMPAD (0): input signal from pad, before override is applied // 0x00002000 [13] : OETOPAD (0): output enable to pad after register override is applied // 0x00001000 [12] : OEFROMPERI (0): output enable from selected peripheral, before register override is applied // 0x00000200 [9] : OUTTOPAD (0): output signal to pad after register override is applied // 0x00000100 [8] : OUTFROMPERI (0): output signal from selected peripheral, before register override is applied io_ro_32 status; _REG_(IO_QSPI_GPIO_QSPI_SCLK_CTRL_OFFSET) // IO_QSPI_GPIO_QSPI_SCLK_CTRL // GPIO control including function select and overrides // 0x30000000 [29:28] : IRQOVER (0) // 0x00030000 [17:16] : INOVER (0) // 0x00003000 [13:12] : OEOVER (0) // 0x00000300 [9:8] : OUTOVER (0) // 0x0000001f [4:0] : FUNCSEL (0x1f): 0-31 -> selects pin function according to the gpio table io_rw_32 ctrl; } ioqspi_status_ctrl_hw_t; typedef struct { _REG_(IO_QSPI_PROC0_INTE_OFFSET) // IO_QSPI_PROC0_INTE // Interrupt Enable for proc0 // 0x00800000 [23] : GPIO_QSPI_SD3_EDGE_HIGH (0) // 0x00400000 [22] : GPIO_QSPI_SD3_EDGE_LOW (0) // 0x00200000 [21] : GPIO_QSPI_SD3_LEVEL_HIGH (0) // 0x00100000 [20] : GPIO_QSPI_SD3_LEVEL_LOW (0) // 0x00080000 [19] : GPIO_QSPI_SD2_EDGE_HIGH (0) // 0x00040000 [18] : GPIO_QSPI_SD2_EDGE_LOW (0) // 0x00020000 [17] : GPIO_QSPI_SD2_LEVEL_HIGH (0) // 0x00010000 [16] : GPIO_QSPI_SD2_LEVEL_LOW (0) // 0x00008000 [15] : GPIO_QSPI_SD1_EDGE_HIGH (0) // 0x00004000 [14] : GPIO_QSPI_SD1_EDGE_LOW (0) // 0x00002000 [13] : GPIO_QSPI_SD1_LEVEL_HIGH (0) // 0x00001000 [12] : GPIO_QSPI_SD1_LEVEL_LOW (0) // 0x00000800 [11] : GPIO_QSPI_SD0_EDGE_HIGH (0) // 0x00000400 [10] : GPIO_QSPI_SD0_EDGE_LOW (0) // 0x00000200 [9] : GPIO_QSPI_SD0_LEVEL_HIGH (0) // 0x00000100 [8] : GPIO_QSPI_SD0_LEVEL_LOW (0) // 0x00000080 [7] : GPIO_QSPI_SS_EDGE_HIGH (0) // 0x00000040 [6] : GPIO_QSPI_SS_EDGE_LOW (0) // 0x00000020 [5] : GPIO_QSPI_SS_LEVEL_HIGH (0) // 0x00000010 [4] : GPIO_QSPI_SS_LEVEL_LOW (0) // 0x00000008 [3] : GPIO_QSPI_SCLK_EDGE_HIGH (0) // 0x00000004 [2] : GPIO_QSPI_SCLK_EDGE_LOW (0) // 0x00000002 [1] : GPIO_QSPI_SCLK_LEVEL_HIGH (0) // 0x00000001 [0] : GPIO_QSPI_SCLK_LEVEL_LOW (0) io_rw_32 inte; _REG_(IO_QSPI_PROC0_INTF_OFFSET) // IO_QSPI_PROC0_INTF // Interrupt Force for proc0 // 0x00800000 [23] : GPIO_QSPI_SD3_EDGE_HIGH (0) // 0x00400000 [22] : GPIO_QSPI_SD3_EDGE_LOW (0) // 0x00200000 [21] : GPIO_QSPI_SD3_LEVEL_HIGH (0) // 0x00100000 [20] : GPIO_QSPI_SD3_LEVEL_LOW (0) // 0x00080000 [19] : GPIO_QSPI_SD2_EDGE_HIGH (0) // 0x00040000 [18] : GPIO_QSPI_SD2_EDGE_LOW (0) // 0x00020000 [17] : GPIO_QSPI_SD2_LEVEL_HIGH (0) // 0x00010000 [16] : GPIO_QSPI_SD2_LEVEL_LOW (0) // 0x00008000 [15] : GPIO_QSPI_SD1_EDGE_HIGH (0) // 0x00004000 [14] : GPIO_QSPI_SD1_EDGE_LOW (0) // 0x00002000 [13] : GPIO_QSPI_SD1_LEVEL_HIGH (0) // 0x00001000 [12] : GPIO_QSPI_SD1_LEVEL_LOW (0) // 0x00000800 [11] : GPIO_QSPI_SD0_EDGE_HIGH (0) // 0x00000400 [10] : GPIO_QSPI_SD0_EDGE_LOW (0) // 0x00000200 [9] : GPIO_QSPI_SD0_LEVEL_HIGH (0) // 0x00000100 [8] : GPIO_QSPI_SD0_LEVEL_LOW (0) // 0x00000080 [7] : GPIO_QSPI_SS_EDGE_HIGH (0) // 0x00000040 [6] : GPIO_QSPI_SS_EDGE_LOW (0) // 0x00000020 [5] : GPIO_QSPI_SS_LEVEL_HIGH (0) // 0x00000010 [4] : GPIO_QSPI_SS_LEVEL_LOW (0) // 0x00000008 [3] : GPIO_QSPI_SCLK_EDGE_HIGH (0) // 0x00000004 [2] : GPIO_QSPI_SCLK_EDGE_LOW (0) // 0x00000002 [1] : GPIO_QSPI_SCLK_LEVEL_HIGH (0) // 0x00000001 [0] : GPIO_QSPI_SCLK_LEVEL_LOW (0) io_rw_32 intf; _REG_(IO_QSPI_PROC0_INTS_OFFSET) // IO_QSPI_PROC0_INTS // Interrupt status after masking & forcing for proc0 // 0x00800000 [23] : GPIO_QSPI_SD3_EDGE_HIGH (0) // 0x00400000 [22] : GPIO_QSPI_SD3_EDGE_LOW (0) // 0x00200000 [21] : GPIO_QSPI_SD3_LEVEL_HIGH (0) // 0x00100000 [20] : GPIO_QSPI_SD3_LEVEL_LOW (0) // 0x00080000 [19] : GPIO_QSPI_SD2_EDGE_HIGH (0) // 0x00040000 [18] : GPIO_QSPI_SD2_EDGE_LOW (0) // 0x00020000 [17] : GPIO_QSPI_SD2_LEVEL_HIGH (0) // 0x00010000 [16] : GPIO_QSPI_SD2_LEVEL_LOW (0) // 0x00008000 [15] : GPIO_QSPI_SD1_EDGE_HIGH (0) // 0x00004000 [14] : GPIO_QSPI_SD1_EDGE_LOW (0) // 0x00002000 [13] : GPIO_QSPI_SD1_LEVEL_HIGH (0) // 0x00001000 [12] : GPIO_QSPI_SD1_LEVEL_LOW (0) // 0x00000800 [11] : GPIO_QSPI_SD0_EDGE_HIGH (0) // 0x00000400 [10] : GPIO_QSPI_SD0_EDGE_LOW (0) // 0x00000200 [9] : GPIO_QSPI_SD0_LEVEL_HIGH (0) // 0x00000100 [8] : GPIO_QSPI_SD0_LEVEL_LOW (0) // 0x00000080 [7] : GPIO_QSPI_SS_EDGE_HIGH (0) // 0x00000040 [6] : GPIO_QSPI_SS_EDGE_LOW (0) // 0x00000020 [5] : GPIO_QSPI_SS_LEVEL_HIGH (0) // 0x00000010 [4] : GPIO_QSPI_SS_LEVEL_LOW (0) // 0x00000008 [3] : GPIO_QSPI_SCLK_EDGE_HIGH (0) // 0x00000004 [2] : GPIO_QSPI_SCLK_EDGE_LOW (0) // 0x00000002 [1] : GPIO_QSPI_SCLK_LEVEL_HIGH (0) // 0x00000001 [0] : GPIO_QSPI_SCLK_LEVEL_LOW (0) io_ro_32 ints; } io_qspi_ctrl_hw_t; typedef struct { ioqspi_status_ctrl_hw_t io[NUM_QSPI_GPIOS]; // 6 _REG_(IO_QSPI_INTR_OFFSET) // IO_QSPI_INTR // Raw Interrupts // 0x00800000 [23] : GPIO_QSPI_SD3_EDGE_HIGH (0) // 0x00400000 [22] : GPIO_QSPI_SD3_EDGE_LOW (0) // 0x00200000 [21] : GPIO_QSPI_SD3_LEVEL_HIGH (0) // 0x00100000 [20] : GPIO_QSPI_SD3_LEVEL_LOW (0) // 0x00080000 [19] : GPIO_QSPI_SD2_EDGE_HIGH (0) // 0x00040000 [18] : GPIO_QSPI_SD2_EDGE_LOW (0) // 0x00020000 [17] : GPIO_QSPI_SD2_LEVEL_HIGH (0) // 0x00010000 [16] : GPIO_QSPI_SD2_LEVEL_LOW (0) // 0x00008000 [15] : GPIO_QSPI_SD1_EDGE_HIGH (0) // 0x00004000 [14] : GPIO_QSPI_SD1_EDGE_LOW (0) // 0x00002000 [13] : GPIO_QSPI_SD1_LEVEL_HIGH (0) // 0x00001000 [12] : GPIO_QSPI_SD1_LEVEL_LOW (0) // 0x00000800 [11] : GPIO_QSPI_SD0_EDGE_HIGH (0) // 0x00000400 [10] : GPIO_QSPI_SD0_EDGE_LOW (0) // 0x00000200 [9] : GPIO_QSPI_SD0_LEVEL_HIGH (0) // 0x00000100 [8] : GPIO_QSPI_SD0_LEVEL_LOW (0) // 0x00000080 [7] : GPIO_QSPI_SS_EDGE_HIGH (0) // 0x00000040 [6] : GPIO_QSPI_SS_EDGE_LOW (0) // 0x00000020 [5] : GPIO_QSPI_SS_LEVEL_HIGH (0) // 0x00000010 [4] : GPIO_QSPI_SS_LEVEL_LOW (0) // 0x00000008 [3] : GPIO_QSPI_SCLK_EDGE_HIGH (0) // 0x00000004 [2] : GPIO_QSPI_SCLK_EDGE_LOW (0) // 0x00000002 [1] : GPIO_QSPI_SCLK_LEVEL_HIGH (0) // 0x00000001 [0] : GPIO_QSPI_SCLK_LEVEL_LOW (0) io_rw_32 intr; io_qspi_ctrl_hw_t proc0_qspi_ctrl; io_qspi_ctrl_hw_t proc1_qspi_ctrl; io_qspi_ctrl_hw_t dormant_wake_qspi_ctrl; } ioqspi_hw_t; #define ioqspi_hw ((ioqspi_hw_t *)IO_QSPI_BASE) static_assert( NUM_QSPI_GPIOS == 6, ""); #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/mpu.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_MPU_H #define _HARDWARE_STRUCTS_MPU_H #include "hardware/address_mapped.h" #include "hardware/regs/m0plus.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_m0plus // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/m0plus.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(M0PLUS_MPU_TYPE_OFFSET) // M0PLUS_MPU_TYPE // Read the MPU Type Register to determine if the processor implements an MPU, and how many regions the MPU supports // 0x00ff0000 [23:16] : IREGION (0): Instruction region // 0x0000ff00 [15:8] : DREGION (0x8): Number of regions supported by the MPU // 0x00000001 [0] : SEPARATE (0): Indicates support for separate instruction and data address maps io_ro_32 type; _REG_(M0PLUS_MPU_CTRL_OFFSET) // M0PLUS_MPU_CTRL // Use the MPU Control Register to enable and disable the MPU, and to control whether the default memory map is enabled... // 0x00000004 [2] : PRIVDEFENA (0): Controls whether the default memory map is enabled as a background region for... // 0x00000002 [1] : HFNMIENA (0): Controls the use of the MPU for HardFaults and NMIs // 0x00000001 [0] : ENABLE (0): Enables the MPU io_rw_32 ctrl; _REG_(M0PLUS_MPU_RNR_OFFSET) // M0PLUS_MPU_RNR // Use the MPU Region Number Register to select the region currently accessed by MPU_RBAR and MPU_RASR // 0x0000000f [3:0] : REGION (0): Indicates the MPU region referenced by the MPU_RBAR and MPU_RASR registers io_rw_32 rnr; _REG_(M0PLUS_MPU_RBAR_OFFSET) // M0PLUS_MPU_RBAR // Read the MPU Region Base Address Register to determine the base address of the region identified by MPU_RNR // 0xffffff00 [31:8] : ADDR (0): Base address of the region // 0x00000010 [4] : VALID (0): On writes, indicates whether the write must update the base address of the region... // 0x0000000f [3:0] : REGION (0): On writes, specifies the number of the region whose base address to update provided... io_rw_32 rbar; _REG_(M0PLUS_MPU_RASR_OFFSET) // M0PLUS_MPU_RASR // Use the MPU Region Attribute and Size Register to define the size, access behaviour and memory type of the region... // 0xffff0000 [31:16] : ATTRS (0): The MPU Region Attribute field // 0x0000ff00 [15:8] : SRD (0): Subregion Disable // 0x0000003e [5:1] : SIZE (0): Indicates the region size // 0x00000001 [0] : ENABLE (0): Enables the region io_rw_32 rasr; } mpu_hw_t; #define mpu_hw ((mpu_hw_t *)(PPB_BASE + M0PLUS_MPU_TYPE_OFFSET)) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/nvic.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_NVIC_H #define _HARDWARE_STRUCTS_NVIC_H #include "hardware/address_mapped.h" #include "hardware/regs/m0plus.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_m0plus // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/m0plus.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(M0PLUS_NVIC_ISER_OFFSET) // M0PLUS_NVIC_ISER // Use the Interrupt Set-Enable Register to enable interrupts and determine which interrupts are currently enabled // 0xffffffff [31:0] : SETENA (0): Interrupt set-enable bits io_rw_32 iser; uint32_t _pad0[31]; _REG_(M0PLUS_NVIC_ICER_OFFSET) // M0PLUS_NVIC_ICER // Use the Interrupt Clear-Enable Registers to disable interrupts and determine which interrupts are currently enabled // 0xffffffff [31:0] : CLRENA (0): Interrupt clear-enable bits io_rw_32 icer; uint32_t _pad1[31]; _REG_(M0PLUS_NVIC_ISPR_OFFSET) // M0PLUS_NVIC_ISPR // The NVIC_ISPR forces interrupts into the pending state, and shows which interrupts are pending // 0xffffffff [31:0] : SETPEND (0): Interrupt set-pending bits io_rw_32 ispr; uint32_t _pad2[31]; _REG_(M0PLUS_NVIC_ICPR_OFFSET) // M0PLUS_NVIC_ICPR // Use the Interrupt Clear-Pending Register to clear pending interrupts and determine which interrupts are currently pending // 0xffffffff [31:0] : CLRPEND (0): Interrupt clear-pending bits io_rw_32 icpr; uint32_t _pad3[95]; _REG_(M0PLUS_NVIC_IPR0_OFFSET) // M0PLUS_NVIC_IPR0 // (Description copied from array index 0 register M0PLUS_NVIC_IPR0 applies similarly to other array indexes) // // Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts // 0xc0000000 [31:30] : IP_3 (0): Priority of interrupt 3 // 0x00c00000 [23:22] : IP_2 (0): Priority of interrupt 2 // 0x0000c000 [15:14] : IP_1 (0): Priority of interrupt 1 // 0x000000c0 [7:6] : IP_0 (0): Priority of interrupt 0 io_rw_32 ipr[8]; } nvic_hw_t; #define nvic_hw ((nvic_hw_t *)(PPB_BASE + M0PLUS_NVIC_ISER_OFFSET)) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/pads_qspi.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_PADS_QSPI_H #define _HARDWARE_STRUCTS_PADS_QSPI_H #include "hardware/address_mapped.h" #include "hardware/regs/pads_qspi.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_pads_qspi // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/pads_qspi.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(PADS_QSPI_VOLTAGE_SELECT_OFFSET) // PADS_QSPI_VOLTAGE_SELECT // Voltage select // 0x00000001 [0] : VOLTAGE_SELECT (0) io_rw_32 voltage_select; _REG_(PADS_QSPI_GPIO_QSPI_SCLK_OFFSET) // PADS_QSPI_GPIO_QSPI_SCLK // (Description copied from array index 0 register PADS_QSPI_GPIO_QSPI_SCLK applies similarly to other array indexes) // // Pad control register // 0x00000080 [7] : OD (0): Output disable // 0x00000040 [6] : IE (1): Input enable // 0x00000030 [5:4] : DRIVE (1): Drive strength // 0x00000008 [3] : PUE (0): Pull up enable // 0x00000004 [2] : PDE (1): Pull down enable // 0x00000002 [1] : SCHMITT (1): Enable schmitt trigger // 0x00000001 [0] : SLEWFAST (0): Slew rate control io_rw_32 io[NUM_QSPI_GPIOS]; // 6 } pads_qspi_hw_t; #define pads_qspi_hw ((pads_qspi_hw_t *)PADS_QSPI_BASE) static_assert( NUM_QSPI_GPIOS == 6, ""); #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/padsbank0.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_PADSBANK0_H #define _HARDWARE_STRUCTS_PADSBANK0_H #include "hardware/address_mapped.h" #include "hardware/regs/pads_bank0.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_pads_bank0 // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/pads_bank0.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(PADS_BANK0_VOLTAGE_SELECT_OFFSET) // PADS_BANK0_VOLTAGE_SELECT // Voltage select // 0x00000001 [0] : VOLTAGE_SELECT (0) io_rw_32 voltage_select; _REG_(PADS_BANK0_GPIO0_OFFSET) // PADS_BANK0_GPIO0 // (Description copied from array index 0 register PADS_BANK0_GPIO0 applies similarly to other array indexes) // // Pad control register // 0x00000080 [7] : OD (0): Output disable // 0x00000040 [6] : IE (1): Input enable // 0x00000030 [5:4] : DRIVE (1): Drive strength // 0x00000008 [3] : PUE (0): Pull up enable // 0x00000004 [2] : PDE (1): Pull down enable // 0x00000002 [1] : SCHMITT (1): Enable schmitt trigger // 0x00000001 [0] : SLEWFAST (0): Slew rate control io_rw_32 io[NUM_BANK0_GPIOS]; // 30 } padsbank0_hw_t; #define padsbank0_hw ((padsbank0_hw_t *)PADS_BANK0_BASE) static_assert( NUM_BANK0_GPIOS == 30, ""); #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/pio.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_PIO_H #define _HARDWARE_STRUCTS_PIO_H #include "hardware/address_mapped.h" #include "hardware/regs/pio.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_pio // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/pio.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct pio_sm_hw { _REG_(PIO_SM0_CLKDIV_OFFSET) // PIO_SM0_CLKDIV // Clock divisor register for state machine 0 // 0xffff0000 [31:16] : INT (1): Effective frequency is sysclk/(int + frac/256) // 0x0000ff00 [15:8] : FRAC (0): Fractional part of clock divisor io_rw_32 clkdiv; _REG_(PIO_SM0_EXECCTRL_OFFSET) // PIO_SM0_EXECCTRL // Execution/behavioural settings for state machine 0 // 0x80000000 [31] : EXEC_STALLED (0): If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine // 0x40000000 [30] : SIDE_EN (0): If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable,... // 0x20000000 [29] : SIDE_PINDIR (0): If 1, side-set data is asserted to pin directions, instead of pin values // 0x1f000000 [28:24] : JMP_PIN (0): The GPIO number to use as condition for JMP PIN // 0x00f80000 [23:19] : OUT_EN_SEL (0): Which data bit to use for inline OUT enable // 0x00040000 [18] : INLINE_OUT_EN (0): If 1, use a bit of OUT data as an auxiliary write enable // 0x00020000 [17] : OUT_STICKY (0): Continuously assert the most recent OUT/SET to the pins // 0x0001f000 [16:12] : WRAP_TOP (0x1f): After reaching this address, execution is wrapped to wrap_bottom // 0x00000f80 [11:7] : WRAP_BOTTOM (0): After reaching wrap_top, execution is wrapped to this address // 0x00000010 [4] : STATUS_SEL (0): Comparison used for the MOV x, STATUS instruction // 0x0000000f [3:0] : STATUS_N (0): Comparison level for the MOV x, STATUS instruction io_rw_32 execctrl; _REG_(PIO_SM0_SHIFTCTRL_OFFSET) // PIO_SM0_SHIFTCTRL // Control behaviour of the input/output shift registers for state machine 0 // 0x80000000 [31] : FJOIN_RX (0): When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep // 0x40000000 [30] : FJOIN_TX (0): When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep // 0x3e000000 [29:25] : PULL_THRESH (0): Number of bits shifted out of OSR before autopull, or conditional pull (PULL... // 0x01f00000 [24:20] : PUSH_THRESH (0): Number of bits shifted into ISR before autopush, or conditional push (PUSH... // 0x00080000 [19] : OUT_SHIFTDIR (1): 1 = shift out of output shift register to right // 0x00040000 [18] : IN_SHIFTDIR (1): 1 = shift input shift register to right (data enters from left) // 0x00020000 [17] : AUTOPULL (0): Pull automatically when the output shift register is emptied, i // 0x00010000 [16] : AUTOPUSH (0): Push automatically when the input shift register is filled, i io_rw_32 shiftctrl; _REG_(PIO_SM0_ADDR_OFFSET) // PIO_SM0_ADDR // Current instruction address of state machine 0 // 0x0000001f [4:0] : SM0_ADDR (0) io_ro_32 addr; _REG_(PIO_SM0_INSTR_OFFSET) // PIO_SM0_INSTR // Read to see the instruction currently addressed by state machine 0's program counter // 0x0000ffff [15:0] : SM0_INSTR (0) io_rw_32 instr; _REG_(PIO_SM0_PINCTRL_OFFSET) // PIO_SM0_PINCTRL // State machine pin control // 0xe0000000 [31:29] : SIDESET_COUNT (0): The number of MSBs of the Delay/Side-set instruction field which are used... // 0x1c000000 [28:26] : SET_COUNT (0x5): The number of pins asserted by a SET // 0x03f00000 [25:20] : OUT_COUNT (0): The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction // 0x000f8000 [19:15] : IN_BASE (0): The pin which is mapped to the least-significant bit of a state machine's IN data bus // 0x00007c00 [14:10] : SIDESET_BASE (0): The lowest-numbered pin that will be affected by a side-set operation // 0x000003e0 [9:5] : SET_BASE (0): The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction // 0x0000001f [4:0] : OUT_BASE (0): The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV... io_rw_32 pinctrl; } pio_sm_hw_t; typedef struct { _REG_(PIO_CTRL_OFFSET) // PIO_CTRL // PIO control register // 0x00000f00 [11:8] : CLKDIV_RESTART (0): Restart a state machine's clock divider from an initial phase of 0 // 0x000000f0 [7:4] : SM_RESTART (0): Write 1 to instantly clear internal SM state which may be otherwise difficult... // 0x0000000f [3:0] : SM_ENABLE (0): Enable/disable each of the four state machines by writing 1/0 to each of these four bits io_rw_32 ctrl; _REG_(PIO_FSTAT_OFFSET) // PIO_FSTAT // FIFO status register // 0x0f000000 [27:24] : TXEMPTY (0xf): State machine TX FIFO is empty // 0x000f0000 [19:16] : TXFULL (0): State machine TX FIFO is full // 0x00000f00 [11:8] : RXEMPTY (0xf): State machine RX FIFO is empty // 0x0000000f [3:0] : RXFULL (0): State machine RX FIFO is full io_ro_32 fstat; _REG_(PIO_FDEBUG_OFFSET) // PIO_FDEBUG // FIFO debug register // 0x0f000000 [27:24] : TXSTALL (0): State machine has stalled on empty TX FIFO during a blocking PULL, or an OUT with... // 0x000f0000 [19:16] : TXOVER (0): TX FIFO overflow (i // 0x00000f00 [11:8] : RXUNDER (0): RX FIFO underflow (i // 0x0000000f [3:0] : RXSTALL (0): State machine has stalled on full RX FIFO during a blocking PUSH, or an IN with... io_rw_32 fdebug; _REG_(PIO_FLEVEL_OFFSET) // PIO_FLEVEL // FIFO levels // 0xf0000000 [31:28] : RX3 (0) // 0x0f000000 [27:24] : TX3 (0) // 0x00f00000 [23:20] : RX2 (0) // 0x000f0000 [19:16] : TX2 (0) // 0x0000f000 [15:12] : RX1 (0) // 0x00000f00 [11:8] : TX1 (0) // 0x000000f0 [7:4] : RX0 (0) // 0x0000000f [3:0] : TX0 (0) io_ro_32 flevel; _REG_(PIO_TXF0_OFFSET) // PIO_TXF0 // (Description copied from array index 0 register PIO_TXF0 applies similarly to other array indexes) // // Direct write access to the TX FIFO for this state machine io_wo_32 txf[NUM_PIO_STATE_MACHINES]; // 4 _REG_(PIO_RXF0_OFFSET) // PIO_RXF0 // (Description copied from array index 0 register PIO_RXF0 applies similarly to other array indexes) // // Direct read access to the RX FIFO for this state machine io_ro_32 rxf[NUM_PIO_STATE_MACHINES]; // 4 _REG_(PIO_IRQ_OFFSET) // PIO_IRQ // State machine IRQ flags register // 0x000000ff [7:0] : IRQ (0) io_rw_32 irq; _REG_(PIO_IRQ_FORCE_OFFSET) // PIO_IRQ_FORCE // Writing a 1 to each of these bits will forcibly assert the corresponding IRQ // 0x000000ff [7:0] : IRQ_FORCE (0) io_wo_32 irq_force; _REG_(PIO_INPUT_SYNC_BYPASS_OFFSET) // PIO_INPUT_SYNC_BYPASS // There is a 2-flipflop synchronizer on each GPIO input, which protects PIO logic from metastabilities io_rw_32 input_sync_bypass; _REG_(PIO_DBG_PADOUT_OFFSET) // PIO_DBG_PADOUT // Read to sample the pad output values PIO is currently driving to the GPIOs io_ro_32 dbg_padout; _REG_(PIO_DBG_PADOE_OFFSET) // PIO_DBG_PADOE // Read to sample the pad output enables (direction) PIO is currently driving to the GPIOs io_ro_32 dbg_padoe; _REG_(PIO_DBG_CFGINFO_OFFSET) // PIO_DBG_CFGINFO // The PIO hardware has some free parameters that may vary between chip products // 0x003f0000 [21:16] : IMEM_SIZE (0): The size of the instruction memory, measured in units of one instruction // 0x00000f00 [11:8] : SM_COUNT (0): The number of state machines this PIO instance is equipped with // 0x0000003f [5:0] : FIFO_DEPTH (0): The depth of the state machine TX/RX FIFOs, measured in words io_ro_32 dbg_cfginfo; _REG_(PIO_INSTR_MEM0_OFFSET) // PIO_INSTR_MEM0 // (Description copied from array index 0 register PIO_INSTR_MEM0 applies similarly to other array indexes) // // Write-only access to instruction memory location 0 // 0x0000ffff [15:0] : INSTR_MEM0 (0) io_wo_32 instr_mem[PIO_INSTRUCTION_COUNT]; // 32 pio_sm_hw_t sm[NUM_PIO_STATE_MACHINES]; // 4 _REG_(PIO_INTR_OFFSET) // PIO_INTR // Raw Interrupts // 0x00000800 [11] : SM3 (0) // 0x00000400 [10] : SM2 (0) // 0x00000200 [9] : SM1 (0) // 0x00000100 [8] : SM0 (0) // 0x00000080 [7] : SM3_TXNFULL (0) // 0x00000040 [6] : SM2_TXNFULL (0) // 0x00000020 [5] : SM1_TXNFULL (0) // 0x00000010 [4] : SM0_TXNFULL (0) // 0x00000008 [3] : SM3_RXNEMPTY (0) // 0x00000004 [2] : SM2_RXNEMPTY (0) // 0x00000002 [1] : SM1_RXNEMPTY (0) // 0x00000001 [0] : SM0_RXNEMPTY (0) io_ro_32 intr; _REG_(PIO_IRQ0_INTE_OFFSET) // PIO_IRQ0_INTE // Interrupt Enable for irq0 // 0x00000800 [11] : SM3 (0) // 0x00000400 [10] : SM2 (0) // 0x00000200 [9] : SM1 (0) // 0x00000100 [8] : SM0 (0) // 0x00000080 [7] : SM3_TXNFULL (0) // 0x00000040 [6] : SM2_TXNFULL (0) // 0x00000020 [5] : SM1_TXNFULL (0) // 0x00000010 [4] : SM0_TXNFULL (0) // 0x00000008 [3] : SM3_RXNEMPTY (0) // 0x00000004 [2] : SM2_RXNEMPTY (0) // 0x00000002 [1] : SM1_RXNEMPTY (0) // 0x00000001 [0] : SM0_RXNEMPTY (0) io_rw_32 inte0; _REG_(PIO_IRQ0_INTF_OFFSET) // PIO_IRQ0_INTF // Interrupt Force for irq0 // 0x00000800 [11] : SM3 (0) // 0x00000400 [10] : SM2 (0) // 0x00000200 [9] : SM1 (0) // 0x00000100 [8] : SM0 (0) // 0x00000080 [7] : SM3_TXNFULL (0) // 0x00000040 [6] : SM2_TXNFULL (0) // 0x00000020 [5] : SM1_TXNFULL (0) // 0x00000010 [4] : SM0_TXNFULL (0) // 0x00000008 [3] : SM3_RXNEMPTY (0) // 0x00000004 [2] : SM2_RXNEMPTY (0) // 0x00000002 [1] : SM1_RXNEMPTY (0) // 0x00000001 [0] : SM0_RXNEMPTY (0) io_rw_32 intf0; _REG_(PIO_IRQ0_INTS_OFFSET) // PIO_IRQ0_INTS // Interrupt status after masking & forcing for irq0 // 0x00000800 [11] : SM3 (0) // 0x00000400 [10] : SM2 (0) // 0x00000200 [9] : SM1 (0) // 0x00000100 [8] : SM0 (0) // 0x00000080 [7] : SM3_TXNFULL (0) // 0x00000040 [6] : SM2_TXNFULL (0) // 0x00000020 [5] : SM1_TXNFULL (0) // 0x00000010 [4] : SM0_TXNFULL (0) // 0x00000008 [3] : SM3_RXNEMPTY (0) // 0x00000004 [2] : SM2_RXNEMPTY (0) // 0x00000002 [1] : SM1_RXNEMPTY (0) // 0x00000001 [0] : SM0_RXNEMPTY (0) io_ro_32 ints0; _REG_(PIO_IRQ1_INTE_OFFSET) // PIO_IRQ1_INTE // Interrupt Enable for irq1 // 0x00000800 [11] : SM3 (0) // 0x00000400 [10] : SM2 (0) // 0x00000200 [9] : SM1 (0) // 0x00000100 [8] : SM0 (0) // 0x00000080 [7] : SM3_TXNFULL (0) // 0x00000040 [6] : SM2_TXNFULL (0) // 0x00000020 [5] : SM1_TXNFULL (0) // 0x00000010 [4] : SM0_TXNFULL (0) // 0x00000008 [3] : SM3_RXNEMPTY (0) // 0x00000004 [2] : SM2_RXNEMPTY (0) // 0x00000002 [1] : SM1_RXNEMPTY (0) // 0x00000001 [0] : SM0_RXNEMPTY (0) io_rw_32 inte1; _REG_(PIO_IRQ1_INTF_OFFSET) // PIO_IRQ1_INTF // Interrupt Force for irq1 // 0x00000800 [11] : SM3 (0) // 0x00000400 [10] : SM2 (0) // 0x00000200 [9] : SM1 (0) // 0x00000100 [8] : SM0 (0) // 0x00000080 [7] : SM3_TXNFULL (0) // 0x00000040 [6] : SM2_TXNFULL (0) // 0x00000020 [5] : SM1_TXNFULL (0) // 0x00000010 [4] : SM0_TXNFULL (0) // 0x00000008 [3] : SM3_RXNEMPTY (0) // 0x00000004 [2] : SM2_RXNEMPTY (0) // 0x00000002 [1] : SM1_RXNEMPTY (0) // 0x00000001 [0] : SM0_RXNEMPTY (0) io_rw_32 intf1; _REG_(PIO_IRQ1_INTS_OFFSET) // PIO_IRQ1_INTS // Interrupt status after masking & forcing for irq1 // 0x00000800 [11] : SM3 (0) // 0x00000400 [10] : SM2 (0) // 0x00000200 [9] : SM1 (0) // 0x00000100 [8] : SM0 (0) // 0x00000080 [7] : SM3_TXNFULL (0) // 0x00000040 [6] : SM2_TXNFULL (0) // 0x00000020 [5] : SM1_TXNFULL (0) // 0x00000010 [4] : SM0_TXNFULL (0) // 0x00000008 [3] : SM3_RXNEMPTY (0) // 0x00000004 [2] : SM2_RXNEMPTY (0) // 0x00000002 [1] : SM1_RXNEMPTY (0) // 0x00000001 [0] : SM0_RXNEMPTY (0) io_ro_32 ints1; } pio_hw_t; #define pio0_hw ((pio_hw_t *)PIO0_BASE) #define pio1_hw ((pio_hw_t *)PIO1_BASE) static_assert( NUM_PIO_STATE_MACHINES == 4, ""); static_assert( PIO_INSTRUCTION_COUNT == 32, ""); #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/pll.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_PLL_H #define _HARDWARE_STRUCTS_PLL_H #include "hardware/address_mapped.h" #include "hardware/regs/pll.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_pll // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/pll.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION /// \tag::pll_hw[] typedef struct { _REG_(PLL_CS_OFFSET) // PLL_CS // Control and Status // 0x80000000 [31] : LOCK (0): PLL is locked // 0x00000100 [8] : BYPASS (0): Passes the reference clock to the output instead of the divided VCO // 0x0000003f [5:0] : REFDIV (1): Divides the PLL input reference clock io_rw_32 cs; _REG_(PLL_PWR_OFFSET) // PLL_PWR // Controls the PLL power modes // 0x00000020 [5] : VCOPD (1): PLL VCO powerdown // 0x00000008 [3] : POSTDIVPD (1): PLL post divider powerdown // 0x00000004 [2] : DSMPD (1): PLL DSM powerdown // 0x00000001 [0] : PD (1): PLL powerdown io_rw_32 pwr; _REG_(PLL_FBDIV_INT_OFFSET) // PLL_FBDIV_INT // Feedback divisor // 0x00000fff [11:0] : FBDIV_INT (0): see ctrl reg description for constraints io_rw_32 fbdiv_int; _REG_(PLL_PRIM_OFFSET) // PLL_PRIM // Controls the PLL post dividers for the primary output // 0x00070000 [18:16] : POSTDIV1 (0x7): divide by 1-7 // 0x00007000 [14:12] : POSTDIV2 (0x7): divide by 1-7 io_rw_32 prim; } pll_hw_t; #define pll_sys_hw ((pll_hw_t *)PLL_SYS_BASE) #define pll_usb_hw ((pll_hw_t *)PLL_USB_BASE) /// \end::pll_hw[] #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/psm.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_PSM_H #define _HARDWARE_STRUCTS_PSM_H #include "hardware/address_mapped.h" #include "hardware/regs/psm.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_psm // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/psm.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(PSM_FRCE_ON_OFFSET) // PSM_FRCE_ON // Force block out of reset (i // 0x00010000 [16] : proc1 (0) // 0x00008000 [15] : proc0 (0) // 0x00004000 [14] : sio (0) // 0x00002000 [13] : vreg_and_chip_reset (0) // 0x00001000 [12] : xip (0) // 0x00000800 [11] : sram5 (0) // 0x00000400 [10] : sram4 (0) // 0x00000200 [9] : sram3 (0) // 0x00000100 [8] : sram2 (0) // 0x00000080 [7] : sram1 (0) // 0x00000040 [6] : sram0 (0) // 0x00000020 [5] : rom (0) // 0x00000010 [4] : busfabric (0) // 0x00000008 [3] : resets (0) // 0x00000004 [2] : clocks (0) // 0x00000002 [1] : xosc (0) // 0x00000001 [0] : rosc (0) io_rw_32 frce_on; _REG_(PSM_FRCE_OFF_OFFSET) // PSM_FRCE_OFF // Force into reset (i // 0x00010000 [16] : proc1 (0) // 0x00008000 [15] : proc0 (0) // 0x00004000 [14] : sio (0) // 0x00002000 [13] : vreg_and_chip_reset (0) // 0x00001000 [12] : xip (0) // 0x00000800 [11] : sram5 (0) // 0x00000400 [10] : sram4 (0) // 0x00000200 [9] : sram3 (0) // 0x00000100 [8] : sram2 (0) // 0x00000080 [7] : sram1 (0) // 0x00000040 [6] : sram0 (0) // 0x00000020 [5] : rom (0) // 0x00000010 [4] : busfabric (0) // 0x00000008 [3] : resets (0) // 0x00000004 [2] : clocks (0) // 0x00000002 [1] : xosc (0) // 0x00000001 [0] : rosc (0) io_rw_32 frce_off; _REG_(PSM_WDSEL_OFFSET) // PSM_WDSEL // Set to 1 if this peripheral should be reset when the watchdog fires // 0x00010000 [16] : proc1 (0) // 0x00008000 [15] : proc0 (0) // 0x00004000 [14] : sio (0) // 0x00002000 [13] : vreg_and_chip_reset (0) // 0x00001000 [12] : xip (0) // 0x00000800 [11] : sram5 (0) // 0x00000400 [10] : sram4 (0) // 0x00000200 [9] : sram3 (0) // 0x00000100 [8] : sram2 (0) // 0x00000080 [7] : sram1 (0) // 0x00000040 [6] : sram0 (0) // 0x00000020 [5] : rom (0) // 0x00000010 [4] : busfabric (0) // 0x00000008 [3] : resets (0) // 0x00000004 [2] : clocks (0) // 0x00000002 [1] : xosc (0) // 0x00000001 [0] : rosc (0) io_rw_32 wdsel; _REG_(PSM_DONE_OFFSET) // PSM_DONE // Indicates the peripheral's registers are ready to access // 0x00010000 [16] : proc1 (0) // 0x00008000 [15] : proc0 (0) // 0x00004000 [14] : sio (0) // 0x00002000 [13] : vreg_and_chip_reset (0) // 0x00001000 [12] : xip (0) // 0x00000800 [11] : sram5 (0) // 0x00000400 [10] : sram4 (0) // 0x00000200 [9] : sram3 (0) // 0x00000100 [8] : sram2 (0) // 0x00000080 [7] : sram1 (0) // 0x00000040 [6] : sram0 (0) // 0x00000020 [5] : rom (0) // 0x00000010 [4] : busfabric (0) // 0x00000008 [3] : resets (0) // 0x00000004 [2] : clocks (0) // 0x00000002 [1] : xosc (0) // 0x00000001 [0] : rosc (0) io_ro_32 done; } psm_hw_t; #define psm_hw ((psm_hw_t *)PSM_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/pwm.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_PWM_H #define _HARDWARE_STRUCTS_PWM_H #include "hardware/address_mapped.h" #include "hardware/regs/pwm.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_pwm // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/pwm.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct pwm_slice_hw { _REG_(PWM_CH0_CSR_OFFSET) // PWM_CH0_CSR // Control and status register // 0x00000080 [7] : PH_ADV (0): Advance the phase of the counter by 1 count, while it is running // 0x00000040 [6] : PH_RET (0): Retard the phase of the counter by 1 count, while it is running // 0x00000030 [5:4] : DIVMODE (0) // 0x00000008 [3] : B_INV (0): Invert output B // 0x00000004 [2] : A_INV (0): Invert output A // 0x00000002 [1] : PH_CORRECT (0): 1: Enable phase-correct modulation // 0x00000001 [0] : EN (0): Enable the PWM channel io_rw_32 csr; _REG_(PWM_CH0_DIV_OFFSET) // PWM_CH0_DIV // INT and FRAC form a fixed-point fractional number // 0x00000ff0 [11:4] : INT (1) // 0x0000000f [3:0] : FRAC (0) io_rw_32 div; _REG_(PWM_CH0_CTR_OFFSET) // PWM_CH0_CTR // Direct access to the PWM counter // 0x0000ffff [15:0] : CH0_CTR (0) io_rw_32 ctr; _REG_(PWM_CH0_CC_OFFSET) // PWM_CH0_CC // Counter compare values // 0xffff0000 [31:16] : B (0) // 0x0000ffff [15:0] : A (0) io_rw_32 cc; _REG_(PWM_CH0_TOP_OFFSET) // PWM_CH0_TOP // Counter wrap value // 0x0000ffff [15:0] : CH0_TOP (0xffff) io_rw_32 top; } pwm_slice_hw_t; typedef struct { pwm_slice_hw_t slice[NUM_PWM_SLICES]; // 8 _REG_(PWM_EN_OFFSET) // PWM_EN // This register aliases the CSR_EN bits for all channels // 0x00000080 [7] : CH7 (0) // 0x00000040 [6] : CH6 (0) // 0x00000020 [5] : CH5 (0) // 0x00000010 [4] : CH4 (0) // 0x00000008 [3] : CH3 (0) // 0x00000004 [2] : CH2 (0) // 0x00000002 [1] : CH1 (0) // 0x00000001 [0] : CH0 (0) io_rw_32 en; _REG_(PWM_INTR_OFFSET) // PWM_INTR // Raw Interrupts // 0x00000080 [7] : CH7 (0) // 0x00000040 [6] : CH6 (0) // 0x00000020 [5] : CH5 (0) // 0x00000010 [4] : CH4 (0) // 0x00000008 [3] : CH3 (0) // 0x00000004 [2] : CH2 (0) // 0x00000002 [1] : CH1 (0) // 0x00000001 [0] : CH0 (0) io_rw_32 intr; _REG_(PWM_INTE_OFFSET) // PWM_INTE // Interrupt Enable // 0x00000080 [7] : CH7 (0) // 0x00000040 [6] : CH6 (0) // 0x00000020 [5] : CH5 (0) // 0x00000010 [4] : CH4 (0) // 0x00000008 [3] : CH3 (0) // 0x00000004 [2] : CH2 (0) // 0x00000002 [1] : CH1 (0) // 0x00000001 [0] : CH0 (0) io_rw_32 inte; _REG_(PWM_INTF_OFFSET) // PWM_INTF // Interrupt Force // 0x00000080 [7] : CH7 (0) // 0x00000040 [6] : CH6 (0) // 0x00000020 [5] : CH5 (0) // 0x00000010 [4] : CH4 (0) // 0x00000008 [3] : CH3 (0) // 0x00000004 [2] : CH2 (0) // 0x00000002 [1] : CH1 (0) // 0x00000001 [0] : CH0 (0) io_rw_32 intf; _REG_(PWM_INTS_OFFSET) // PWM_INTS // Interrupt status after masking & forcing // 0x00000080 [7] : CH7 (0) // 0x00000040 [6] : CH6 (0) // 0x00000020 [5] : CH5 (0) // 0x00000010 [4] : CH4 (0) // 0x00000008 [3] : CH3 (0) // 0x00000004 [2] : CH2 (0) // 0x00000002 [1] : CH1 (0) // 0x00000001 [0] : CH0 (0) io_ro_32 ints; } pwm_hw_t; #define pwm_hw ((pwm_hw_t *)PWM_BASE) static_assert( NUM_PWM_SLICES == 8, ""); #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/resets.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_RESETS_H #define _HARDWARE_STRUCTS_RESETS_H #include "hardware/address_mapped.h" #include "hardware/regs/resets.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_resets // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/resets.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION /// \tag::resets_hw[] typedef struct { _REG_(RESETS_RESET_OFFSET) // RESETS_RESET // Reset control // 0x01000000 [24] : usbctrl (1) // 0x00800000 [23] : uart1 (1) // 0x00400000 [22] : uart0 (1) // 0x00200000 [21] : timer (1) // 0x00100000 [20] : tbman (1) // 0x00080000 [19] : sysinfo (1) // 0x00040000 [18] : syscfg (1) // 0x00020000 [17] : spi1 (1) // 0x00010000 [16] : spi0 (1) // 0x00008000 [15] : rtc (1) // 0x00004000 [14] : pwm (1) // 0x00002000 [13] : pll_usb (1) // 0x00001000 [12] : pll_sys (1) // 0x00000800 [11] : pio1 (1) // 0x00000400 [10] : pio0 (1) // 0x00000200 [9] : pads_qspi (1) // 0x00000100 [8] : pads_bank0 (1) // 0x00000080 [7] : jtag (1) // 0x00000040 [6] : io_qspi (1) // 0x00000020 [5] : io_bank0 (1) // 0x00000010 [4] : i2c1 (1) // 0x00000008 [3] : i2c0 (1) // 0x00000004 [2] : dma (1) // 0x00000002 [1] : busctrl (1) // 0x00000001 [0] : adc (1) io_rw_32 reset; _REG_(RESETS_WDSEL_OFFSET) // RESETS_WDSEL // Watchdog select // 0x01000000 [24] : usbctrl (0) // 0x00800000 [23] : uart1 (0) // 0x00400000 [22] : uart0 (0) // 0x00200000 [21] : timer (0) // 0x00100000 [20] : tbman (0) // 0x00080000 [19] : sysinfo (0) // 0x00040000 [18] : syscfg (0) // 0x00020000 [17] : spi1 (0) // 0x00010000 [16] : spi0 (0) // 0x00008000 [15] : rtc (0) // 0x00004000 [14] : pwm (0) // 0x00002000 [13] : pll_usb (0) // 0x00001000 [12] : pll_sys (0) // 0x00000800 [11] : pio1 (0) // 0x00000400 [10] : pio0 (0) // 0x00000200 [9] : pads_qspi (0) // 0x00000100 [8] : pads_bank0 (0) // 0x00000080 [7] : jtag (0) // 0x00000040 [6] : io_qspi (0) // 0x00000020 [5] : io_bank0 (0) // 0x00000010 [4] : i2c1 (0) // 0x00000008 [3] : i2c0 (0) // 0x00000004 [2] : dma (0) // 0x00000002 [1] : busctrl (0) // 0x00000001 [0] : adc (0) io_rw_32 wdsel; _REG_(RESETS_RESET_DONE_OFFSET) // RESETS_RESET_DONE // Reset done // 0x01000000 [24] : usbctrl (0) // 0x00800000 [23] : uart1 (0) // 0x00400000 [22] : uart0 (0) // 0x00200000 [21] : timer (0) // 0x00100000 [20] : tbman (0) // 0x00080000 [19] : sysinfo (0) // 0x00040000 [18] : syscfg (0) // 0x00020000 [17] : spi1 (0) // 0x00010000 [16] : spi0 (0) // 0x00008000 [15] : rtc (0) // 0x00004000 [14] : pwm (0) // 0x00002000 [13] : pll_usb (0) // 0x00001000 [12] : pll_sys (0) // 0x00000800 [11] : pio1 (0) // 0x00000400 [10] : pio0 (0) // 0x00000200 [9] : pads_qspi (0) // 0x00000100 [8] : pads_bank0 (0) // 0x00000080 [7] : jtag (0) // 0x00000040 [6] : io_qspi (0) // 0x00000020 [5] : io_bank0 (0) // 0x00000010 [4] : i2c1 (0) // 0x00000008 [3] : i2c0 (0) // 0x00000004 [2] : dma (0) // 0x00000002 [1] : busctrl (0) // 0x00000001 [0] : adc (0) io_ro_32 reset_done; } resets_hw_t; #define resets_hw ((resets_hw_t *)RESETS_BASE) /// \end::resets_hw[] #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/rosc.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_ROSC_H #define _HARDWARE_STRUCTS_ROSC_H #include "hardware/address_mapped.h" #include "hardware/regs/rosc.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_rosc // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/rosc.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(ROSC_CTRL_OFFSET) // ROSC_CTRL // Ring Oscillator control // 0x00fff000 [23:12] : ENABLE (0): On power-up this field is initialised to ENABLE // 0x00000fff [11:0] : FREQ_RANGE (0xaa0): Controls the number of delay stages in the ROSC ring io_rw_32 ctrl; _REG_(ROSC_FREQA_OFFSET) // ROSC_FREQA // The FREQA & FREQB registers control the frequency by controlling the drive strength of each stage // 0xffff0000 [31:16] : PASSWD (0): Set to 0x9696 to apply the settings // 0x00007000 [14:12] : DS3 (0): Stage 3 drive strength // 0x00000700 [10:8] : DS2 (0): Stage 2 drive strength // 0x00000070 [6:4] : DS1 (0): Stage 1 drive strength // 0x00000007 [2:0] : DS0 (0): Stage 0 drive strength io_rw_32 freqa; _REG_(ROSC_FREQB_OFFSET) // ROSC_FREQB // For a detailed description see freqa register // 0xffff0000 [31:16] : PASSWD (0): Set to 0x9696 to apply the settings // 0x00007000 [14:12] : DS7 (0): Stage 7 drive strength // 0x00000700 [10:8] : DS6 (0): Stage 6 drive strength // 0x00000070 [6:4] : DS5 (0): Stage 5 drive strength // 0x00000007 [2:0] : DS4 (0): Stage 4 drive strength io_rw_32 freqb; _REG_(ROSC_DORMANT_OFFSET) // ROSC_DORMANT // Ring Oscillator pause control io_rw_32 dormant; _REG_(ROSC_DIV_OFFSET) // ROSC_DIV // Controls the output divider // 0x00000fff [11:0] : DIV (0): set to 0xaa0 + div where io_rw_32 div; _REG_(ROSC_PHASE_OFFSET) // ROSC_PHASE // Controls the phase shifted output // 0x00000ff0 [11:4] : PASSWD (0): set to 0xaa // 0x00000008 [3] : ENABLE (1): enable the phase-shifted output // 0x00000004 [2] : FLIP (0): invert the phase-shifted output // 0x00000003 [1:0] : SHIFT (0): phase shift the phase-shifted output by SHIFT input clocks io_rw_32 phase; _REG_(ROSC_STATUS_OFFSET) // ROSC_STATUS // Ring Oscillator Status // 0x80000000 [31] : STABLE (0): Oscillator is running and stable // 0x01000000 [24] : BADWRITE (0): An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or FREQA or... // 0x00010000 [16] : DIV_RUNNING (0): post-divider is running // 0x00001000 [12] : ENABLED (0): Oscillator is enabled but not necessarily running and stable io_rw_32 status; _REG_(ROSC_RANDOMBIT_OFFSET) // ROSC_RANDOMBIT // This just reads the state of the oscillator output so randomness is compromised if the ring oscillator is stopped or... // 0x00000001 [0] : RANDOMBIT (1) io_ro_32 randombit; _REG_(ROSC_COUNT_OFFSET) // ROSC_COUNT // A down counter running at the ROSC frequency which counts to zero and stops // 0x000000ff [7:0] : COUNT (0) io_rw_32 count; } rosc_hw_t; #define rosc_hw ((rosc_hw_t *)ROSC_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/rtc.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_RTC_H #define _HARDWARE_STRUCTS_RTC_H #include "hardware/address_mapped.h" #include "hardware/regs/rtc.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_rtc // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/rtc.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(RTC_CLKDIV_M1_OFFSET) // RTC_CLKDIV_M1 // Divider minus 1 for the 1 second counter // 0x0000ffff [15:0] : CLKDIV_M1 (0) io_rw_32 clkdiv_m1; _REG_(RTC_SETUP_0_OFFSET) // RTC_SETUP_0 // RTC setup register 0 // 0x00fff000 [23:12] : YEAR (0): Year // 0x00000f00 [11:8] : MONTH (0): Month (1 // 0x0000001f [4:0] : DAY (0): Day of the month (1 io_rw_32 setup_0; _REG_(RTC_SETUP_1_OFFSET) // RTC_SETUP_1 // RTC setup register 1 // 0x07000000 [26:24] : DOTW (0): Day of the week: 1-Monday // 0x001f0000 [20:16] : HOUR (0): Hours // 0x00003f00 [13:8] : MIN (0): Minutes // 0x0000003f [5:0] : SEC (0): Seconds io_rw_32 setup_1; _REG_(RTC_CTRL_OFFSET) // RTC_CTRL // RTC Control and status // 0x00000100 [8] : FORCE_NOTLEAPYEAR (0): If set, leapyear is forced off // 0x00000010 [4] : LOAD (0): Load RTC // 0x00000002 [1] : RTC_ACTIVE (0): RTC enabled (running) // 0x00000001 [0] : RTC_ENABLE (0): Enable RTC io_rw_32 ctrl; _REG_(RTC_IRQ_SETUP_0_OFFSET) // RTC_IRQ_SETUP_0 // Interrupt setup register 0 // 0x20000000 [29] : MATCH_ACTIVE (0) // 0x10000000 [28] : MATCH_ENA (0): Global match enable // 0x04000000 [26] : YEAR_ENA (0): Enable year matching // 0x02000000 [25] : MONTH_ENA (0): Enable month matching // 0x01000000 [24] : DAY_ENA (0): Enable day matching // 0x00fff000 [23:12] : YEAR (0): Year // 0x00000f00 [11:8] : MONTH (0): Month (1 // 0x0000001f [4:0] : DAY (0): Day of the month (1 io_rw_32 irq_setup_0; _REG_(RTC_IRQ_SETUP_1_OFFSET) // RTC_IRQ_SETUP_1 // Interrupt setup register 1 // 0x80000000 [31] : DOTW_ENA (0): Enable day of the week matching // 0x40000000 [30] : HOUR_ENA (0): Enable hour matching // 0x20000000 [29] : MIN_ENA (0): Enable minute matching // 0x10000000 [28] : SEC_ENA (0): Enable second matching // 0x07000000 [26:24] : DOTW (0): Day of the week // 0x001f0000 [20:16] : HOUR (0): Hours // 0x00003f00 [13:8] : MIN (0): Minutes // 0x0000003f [5:0] : SEC (0): Seconds io_rw_32 irq_setup_1; _REG_(RTC_RTC_1_OFFSET) // RTC_RTC_1 // RTC register 1 // 0x00fff000 [23:12] : YEAR (0): Year // 0x00000f00 [11:8] : MONTH (0): Month (1 // 0x0000001f [4:0] : DAY (0): Day of the month (1 io_ro_32 rtc_1; _REG_(RTC_RTC_0_OFFSET) // RTC_RTC_0 // RTC register 0 // 0x07000000 [26:24] : DOTW (0): Day of the week // 0x001f0000 [20:16] : HOUR (0): Hours // 0x00003f00 [13:8] : MIN (0): Minutes // 0x0000003f [5:0] : SEC (0): Seconds io_ro_32 rtc_0; _REG_(RTC_INTR_OFFSET) // RTC_INTR // Raw Interrupts // 0x00000001 [0] : RTC (0) io_ro_32 intr; _REG_(RTC_INTE_OFFSET) // RTC_INTE // Interrupt Enable // 0x00000001 [0] : RTC (0) io_rw_32 inte; _REG_(RTC_INTF_OFFSET) // RTC_INTF // Interrupt Force // 0x00000001 [0] : RTC (0) io_rw_32 intf; _REG_(RTC_INTS_OFFSET) // RTC_INTS // Interrupt status after masking & forcing // 0x00000001 [0] : RTC (0) io_ro_32 ints; } rtc_hw_t; #define rtc_hw ((rtc_hw_t *)RTC_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/scb.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_SCB_H #define _HARDWARE_STRUCTS_SCB_H #include "hardware/address_mapped.h" #include "hardware/regs/m0plus.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_m0plus // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/m0plus.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(M0PLUS_CPUID_OFFSET) // M0PLUS_CPUID // Read the CPU ID Base Register to determine: the ID number of the processor core, the version number of the processor... // 0xff000000 [31:24] : IMPLEMENTER (0x41): Implementor code: 0x41 = ARM // 0x00f00000 [23:20] : VARIANT (0): Major revision number n in the rnpm revision status: // 0x000f0000 [19:16] : ARCHITECTURE (0xc): Constant that defines the architecture of the processor: // 0x0000fff0 [15:4] : PARTNO (0xc60): Number of processor within family: 0xC60 = Cortex-M0+ // 0x0000000f [3:0] : REVISION (1): Minor revision number m in the rnpm revision status: io_ro_32 cpuid; _REG_(M0PLUS_ICSR_OFFSET) // M0PLUS_ICSR // Use the Interrupt Control State Register to set a pending Non-Maskable Interrupt (NMI), set or clear a pending... // 0x80000000 [31] : NMIPENDSET (0): Setting this bit will activate an NMI // 0x10000000 [28] : PENDSVSET (0): PendSV set-pending bit // 0x08000000 [27] : PENDSVCLR (0): PendSV clear-pending bit // 0x04000000 [26] : PENDSTSET (0): SysTick exception set-pending bit // 0x02000000 [25] : PENDSTCLR (0): SysTick exception clear-pending bit // 0x00800000 [23] : ISRPREEMPT (0): The system can only access this bit when the core is halted // 0x00400000 [22] : ISRPENDING (0): External interrupt pending flag // 0x001ff000 [20:12] : VECTPENDING (0): Indicates the exception number for the highest priority pending exception: 0 =... // 0x000001ff [8:0] : VECTACTIVE (0): Active exception number field io_rw_32 icsr; _REG_(M0PLUS_VTOR_OFFSET) // M0PLUS_VTOR // The VTOR holds the vector table offset address // 0xffffff00 [31:8] : TBLOFF (0): Bits [31:8] of the indicate the vector table offset address io_rw_32 vtor; _REG_(M0PLUS_AIRCR_OFFSET) // M0PLUS_AIRCR // Use the Application Interrupt and Reset Control Register to: determine data endianness, clear all active state... // 0xffff0000 [31:16] : VECTKEY (0): Register key: // 0x00008000 [15] : ENDIANESS (0): Data endianness implemented: // 0x00000004 [2] : SYSRESETREQ (0): Writing 1 to this bit causes the SYSRESETREQ signal to the outer system to be... // 0x00000002 [1] : VECTCLRACTIVE (0): Clears all active state information for fixed and configurable exceptions io_rw_32 aircr; _REG_(M0PLUS_SCR_OFFSET) // M0PLUS_SCR // System Control Register // 0x00000010 [4] : SEVONPEND (0): Send Event on Pending bit: // 0x00000004 [2] : SLEEPDEEP (0): Controls whether the processor uses sleep or deep sleep as its low power mode: // 0x00000002 [1] : SLEEPONEXIT (0): Indicates sleep-on-exit when returning from Handler mode to Thread mode: io_rw_32 scr; } armv6m_scb_t; #define scb_hw ((armv6m_scb_t *)(PPB_BASE + M0PLUS_CPUID_OFFSET)) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/sio.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_SIO_H #define _HARDWARE_STRUCTS_SIO_H #include "hardware/address_mapped.h" #include "hardware/regs/sio.h" #include "hardware/structs/interp.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_sio // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/sio.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(SIO_CPUID_OFFSET) // SIO_CPUID // Processor core identifier io_ro_32 cpuid; _REG_(SIO_GPIO_IN_OFFSET) // SIO_GPIO_IN // Input value for GPIO pins // 0x3fffffff [29:0] : GPIO_IN (0): Input value for GPIO0 io_ro_32 gpio_in; _REG_(SIO_GPIO_HI_IN_OFFSET) // SIO_GPIO_HI_IN // Input value for QSPI pins // 0x0000003f [5:0] : GPIO_HI_IN (0): Input value on QSPI IO in order 0 io_ro_32 gpio_hi_in; uint32_t _pad0; _REG_(SIO_GPIO_OUT_OFFSET) // SIO_GPIO_OUT // GPIO output value // 0x3fffffff [29:0] : GPIO_OUT (0): Set output level (1/0 -> high/low) for GPIO0 io_rw_32 gpio_out; _REG_(SIO_GPIO_OUT_SET_OFFSET) // SIO_GPIO_OUT_SET // GPIO output value set // 0x3fffffff [29:0] : GPIO_OUT_SET (0): Perform an atomic bit-set on GPIO_OUT, i io_wo_32 gpio_set; _REG_(SIO_GPIO_OUT_CLR_OFFSET) // SIO_GPIO_OUT_CLR // GPIO output value clear // 0x3fffffff [29:0] : GPIO_OUT_CLR (0): Perform an atomic bit-clear on GPIO_OUT, i io_wo_32 gpio_clr; _REG_(SIO_GPIO_OUT_XOR_OFFSET) // SIO_GPIO_OUT_XOR // GPIO output value XOR // 0x3fffffff [29:0] : GPIO_OUT_XOR (0): Perform an atomic bitwise XOR on GPIO_OUT, i io_wo_32 gpio_togl; _REG_(SIO_GPIO_OE_OFFSET) // SIO_GPIO_OE // GPIO output enable // 0x3fffffff [29:0] : GPIO_OE (0): Set output enable (1/0 -> output/input) for GPIO0 io_rw_32 gpio_oe; _REG_(SIO_GPIO_OE_SET_OFFSET) // SIO_GPIO_OE_SET // GPIO output enable set // 0x3fffffff [29:0] : GPIO_OE_SET (0): Perform an atomic bit-set on GPIO_OE, i io_wo_32 gpio_oe_set; _REG_(SIO_GPIO_OE_CLR_OFFSET) // SIO_GPIO_OE_CLR // GPIO output enable clear // 0x3fffffff [29:0] : GPIO_OE_CLR (0): Perform an atomic bit-clear on GPIO_OE, i io_wo_32 gpio_oe_clr; _REG_(SIO_GPIO_OE_XOR_OFFSET) // SIO_GPIO_OE_XOR // GPIO output enable XOR // 0x3fffffff [29:0] : GPIO_OE_XOR (0): Perform an atomic bitwise XOR on GPIO_OE, i io_wo_32 gpio_oe_togl; _REG_(SIO_GPIO_HI_OUT_OFFSET) // SIO_GPIO_HI_OUT // QSPI output value // 0x0000003f [5:0] : GPIO_HI_OUT (0): Set output level (1/0 -> high/low) for QSPI IO0 io_rw_32 gpio_hi_out; _REG_(SIO_GPIO_HI_OUT_SET_OFFSET) // SIO_GPIO_HI_OUT_SET // QSPI output value set // 0x0000003f [5:0] : GPIO_HI_OUT_SET (0): Perform an atomic bit-set on GPIO_HI_OUT, i io_wo_32 gpio_hi_set; _REG_(SIO_GPIO_HI_OUT_CLR_OFFSET) // SIO_GPIO_HI_OUT_CLR // QSPI output value clear // 0x0000003f [5:0] : GPIO_HI_OUT_CLR (0): Perform an atomic bit-clear on GPIO_HI_OUT, i io_wo_32 gpio_hi_clr; _REG_(SIO_GPIO_HI_OUT_XOR_OFFSET) // SIO_GPIO_HI_OUT_XOR // QSPI output value XOR // 0x0000003f [5:0] : GPIO_HI_OUT_XOR (0): Perform an atomic bitwise XOR on GPIO_HI_OUT, i io_wo_32 gpio_hi_togl; _REG_(SIO_GPIO_HI_OE_OFFSET) // SIO_GPIO_HI_OE // QSPI output enable // 0x0000003f [5:0] : GPIO_HI_OE (0): Set output enable (1/0 -> output/input) for QSPI IO0 io_rw_32 gpio_hi_oe; _REG_(SIO_GPIO_HI_OE_SET_OFFSET) // SIO_GPIO_HI_OE_SET // QSPI output enable set // 0x0000003f [5:0] : GPIO_HI_OE_SET (0): Perform an atomic bit-set on GPIO_HI_OE, i io_wo_32 gpio_hi_oe_set; _REG_(SIO_GPIO_HI_OE_CLR_OFFSET) // SIO_GPIO_HI_OE_CLR // QSPI output enable clear // 0x0000003f [5:0] : GPIO_HI_OE_CLR (0): Perform an atomic bit-clear on GPIO_HI_OE, i io_wo_32 gpio_hi_oe_clr; _REG_(SIO_GPIO_HI_OE_XOR_OFFSET) // SIO_GPIO_HI_OE_XOR // QSPI output enable XOR // 0x0000003f [5:0] : GPIO_HI_OE_XOR (0): Perform an atomic bitwise XOR on GPIO_HI_OE, i io_wo_32 gpio_hi_oe_togl; _REG_(SIO_FIFO_ST_OFFSET) // SIO_FIFO_ST // Status register for inter-core FIFOs (mailboxes) // 0x00000008 [3] : ROE (0): Sticky flag indicating the RX FIFO was read when empty // 0x00000004 [2] : WOF (0): Sticky flag indicating the TX FIFO was written when full // 0x00000002 [1] : RDY (1): Value is 1 if this core's TX FIFO is not full (i // 0x00000001 [0] : VLD (0): Value is 1 if this core's RX FIFO is not empty (i io_rw_32 fifo_st; _REG_(SIO_FIFO_WR_OFFSET) // SIO_FIFO_WR // Write access to this core's TX FIFO io_wo_32 fifo_wr; _REG_(SIO_FIFO_RD_OFFSET) // SIO_FIFO_RD // Read access to this core's RX FIFO io_ro_32 fifo_rd; _REG_(SIO_SPINLOCK_ST_OFFSET) // SIO_SPINLOCK_ST // Spinlock state io_ro_32 spinlock_st; _REG_(SIO_DIV_UDIVIDEND_OFFSET) // SIO_DIV_UDIVIDEND // Divider unsigned dividend io_rw_32 div_udividend; _REG_(SIO_DIV_UDIVISOR_OFFSET) // SIO_DIV_UDIVISOR // Divider unsigned divisor io_rw_32 div_udivisor; _REG_(SIO_DIV_SDIVIDEND_OFFSET) // SIO_DIV_SDIVIDEND // Divider signed dividend io_rw_32 div_sdividend; _REG_(SIO_DIV_SDIVISOR_OFFSET) // SIO_DIV_SDIVISOR // Divider signed divisor io_rw_32 div_sdivisor; _REG_(SIO_DIV_QUOTIENT_OFFSET) // SIO_DIV_QUOTIENT // Divider result quotient io_rw_32 div_quotient; _REG_(SIO_DIV_REMAINDER_OFFSET) // SIO_DIV_REMAINDER // Divider result remainder io_rw_32 div_remainder; _REG_(SIO_DIV_CSR_OFFSET) // SIO_DIV_CSR // Control and status register for divider // 0x00000002 [1] : DIRTY (0): Changes to 1 when any register is written, and back to 0 when QUOTIENT is read // 0x00000001 [0] : READY (1): Reads as 0 when a calculation is in progress, 1 otherwise io_ro_32 div_csr; uint32_t _pad1; interp_hw_t interp[2]; } sio_hw_t; #define sio_hw ((sio_hw_t *)SIO_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/spi.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_SPI_H #define _HARDWARE_STRUCTS_SPI_H #include "hardware/address_mapped.h" #include "hardware/regs/spi.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_spi // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/spi.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(SPI_SSPCR0_OFFSET) // SPI_SSPCR0 // Control register 0, SSPCR0 on page 3-4 // 0x0000ff00 [15:8] : SCR (0): Serial clock rate // 0x00000080 [7] : SPH (0): SSPCLKOUT phase, applicable to Motorola SPI frame format only // 0x00000040 [6] : SPO (0): SSPCLKOUT polarity, applicable to Motorola SPI frame format only // 0x00000030 [5:4] : FRF (0): Frame format: 00 Motorola SPI frame format // 0x0000000f [3:0] : DSS (0): Data Size Select: 0000 Reserved, undefined operation io_rw_32 cr0; _REG_(SPI_SSPCR1_OFFSET) // SPI_SSPCR1 // Control register 1, SSPCR1 on page 3-5 // 0x00000008 [3] : SOD (0): Slave-mode output disable // 0x00000004 [2] : MS (0): Master or slave mode select // 0x00000002 [1] : SSE (0): Synchronous serial port enable: 0 SSP operation disabled // 0x00000001 [0] : LBM (0): Loop back mode: 0 Normal serial port operation enabled io_rw_32 cr1; _REG_(SPI_SSPDR_OFFSET) // SPI_SSPDR // Data register, SSPDR on page 3-6 // 0x0000ffff [15:0] : DATA (0): Transmit/Receive FIFO: Read Receive FIFO io_rw_32 dr; _REG_(SPI_SSPSR_OFFSET) // SPI_SSPSR // Status register, SSPSR on page 3-7 // 0x00000010 [4] : BSY (0): PrimeCell SSP busy flag, RO: 0 SSP is idle // 0x00000008 [3] : RFF (0): Receive FIFO full, RO: 0 Receive FIFO is not full // 0x00000004 [2] : RNE (0): Receive FIFO not empty, RO: 0 Receive FIFO is empty // 0x00000002 [1] : TNF (1): Transmit FIFO not full, RO: 0 Transmit FIFO is full // 0x00000001 [0] : TFE (1): Transmit FIFO empty, RO: 0 Transmit FIFO is not empty io_ro_32 sr; _REG_(SPI_SSPCPSR_OFFSET) // SPI_SSPCPSR // Clock prescale register, SSPCPSR on page 3-8 // 0x000000ff [7:0] : CPSDVSR (0): Clock prescale divisor io_rw_32 cpsr; _REG_(SPI_SSPIMSC_OFFSET) // SPI_SSPIMSC // Interrupt mask set or clear register, SSPIMSC on page 3-9 // 0x00000008 [3] : TXIM (0): Transmit FIFO interrupt mask: 0 Transmit FIFO half empty or less condition interrupt is masked // 0x00000004 [2] : RXIM (0): Receive FIFO interrupt mask: 0 Receive FIFO half full or less condition interrupt is masked // 0x00000002 [1] : RTIM (0): Receive timeout interrupt mask: 0 Receive FIFO not empty and no read prior to timeout... // 0x00000001 [0] : RORIM (0): Receive overrun interrupt mask: 0 Receive FIFO written to while full condition... io_rw_32 imsc; _REG_(SPI_SSPRIS_OFFSET) // SPI_SSPRIS // Raw interrupt status register, SSPRIS on page 3-10 // 0x00000008 [3] : TXRIS (1): Gives the raw interrupt state, prior to masking, of the SSPTXINTR interrupt // 0x00000004 [2] : RXRIS (0): Gives the raw interrupt state, prior to masking, of the SSPRXINTR interrupt // 0x00000002 [1] : RTRIS (0): Gives the raw interrupt state, prior to masking, of the SSPRTINTR interrupt // 0x00000001 [0] : RORRIS (0): Gives the raw interrupt state, prior to masking, of the SSPRORINTR interrupt io_ro_32 ris; _REG_(SPI_SSPMIS_OFFSET) // SPI_SSPMIS // Masked interrupt status register, SSPMIS on page 3-11 // 0x00000008 [3] : TXMIS (0): Gives the transmit FIFO masked interrupt state, after masking, of the SSPTXINTR interrupt // 0x00000004 [2] : RXMIS (0): Gives the receive FIFO masked interrupt state, after masking, of the SSPRXINTR interrupt // 0x00000002 [1] : RTMIS (0): Gives the receive timeout masked interrupt state, after masking, of the SSPRTINTR interrupt // 0x00000001 [0] : RORMIS (0): Gives the receive over run masked interrupt status, after masking, of the... io_ro_32 mis; _REG_(SPI_SSPICR_OFFSET) // SPI_SSPICR // Interrupt clear register, SSPICR on page 3-11 // 0x00000002 [1] : RTIC (0): Clears the SSPRTINTR interrupt // 0x00000001 [0] : RORIC (0): Clears the SSPRORINTR interrupt io_rw_32 icr; _REG_(SPI_SSPDMACR_OFFSET) // SPI_SSPDMACR // DMA control register, SSPDMACR on page 3-12 // 0x00000002 [1] : TXDMAE (0): Transmit DMA Enable // 0x00000001 [0] : RXDMAE (0): Receive DMA Enable io_rw_32 dmacr; } spi_hw_t; #define spi0_hw ((spi_hw_t *)SPI0_BASE) #define spi1_hw ((spi_hw_t *)SPI1_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/ssi.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_SSI_H #define _HARDWARE_STRUCTS_SSI_H #include "hardware/address_mapped.h" #include "hardware/regs/ssi.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_ssi // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/ssi.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(SSI_CTRLR0_OFFSET) // SSI_CTRLR0 // Control register 0 // 0x01000000 [24] : SSTE (0): Slave select toggle enable // 0x00600000 [22:21] : SPI_FRF (0): SPI frame format // 0x001f0000 [20:16] : DFS_32 (0): Data frame size in 32b transfer mode // 0x0000f000 [15:12] : CFS (0): Control frame size // 0x00000800 [11] : SRL (0): Shift register loop (test mode) // 0x00000400 [10] : SLV_OE (0): Slave output enable // 0x00000300 [9:8] : TMOD (0): Transfer mode // 0x00000080 [7] : SCPOL (0): Serial clock polarity // 0x00000040 [6] : SCPH (0): Serial clock phase // 0x00000030 [5:4] : FRF (0): Frame format // 0x0000000f [3:0] : DFS (0): Data frame size io_rw_32 ctrlr0; _REG_(SSI_CTRLR1_OFFSET) // SSI_CTRLR1 // Master Control register 1 // 0x0000ffff [15:0] : NDF (0): Number of data frames io_rw_32 ctrlr1; _REG_(SSI_SSIENR_OFFSET) // SSI_SSIENR // SSI Enable // 0x00000001 [0] : SSI_EN (0): SSI enable io_rw_32 ssienr; _REG_(SSI_MWCR_OFFSET) // SSI_MWCR // Microwire Control // 0x00000004 [2] : MHS (0): Microwire handshaking // 0x00000002 [1] : MDD (0): Microwire control // 0x00000001 [0] : MWMOD (0): Microwire transfer mode io_rw_32 mwcr; _REG_(SSI_SER_OFFSET) // SSI_SER // Slave enable // 0x00000001 [0] : SER (0): For each bit: io_rw_32 ser; _REG_(SSI_BAUDR_OFFSET) // SSI_BAUDR // Baud rate // 0x0000ffff [15:0] : SCKDV (0): SSI clock divider io_rw_32 baudr; _REG_(SSI_TXFTLR_OFFSET) // SSI_TXFTLR // TX FIFO threshold level // 0x000000ff [7:0] : TFT (0): Transmit FIFO threshold io_rw_32 txftlr; _REG_(SSI_RXFTLR_OFFSET) // SSI_RXFTLR // RX FIFO threshold level // 0x000000ff [7:0] : RFT (0): Receive FIFO threshold io_rw_32 rxftlr; _REG_(SSI_TXFLR_OFFSET) // SSI_TXFLR // TX FIFO level // 0x000000ff [7:0] : TFTFL (0): Transmit FIFO level io_ro_32 txflr; _REG_(SSI_RXFLR_OFFSET) // SSI_RXFLR // RX FIFO level // 0x000000ff [7:0] : RXTFL (0): Receive FIFO level io_ro_32 rxflr; _REG_(SSI_SR_OFFSET) // SSI_SR // Status register // 0x00000040 [6] : DCOL (0): Data collision error // 0x00000020 [5] : TXE (0): Transmission error // 0x00000010 [4] : RFF (0): Receive FIFO full // 0x00000008 [3] : RFNE (0): Receive FIFO not empty // 0x00000004 [2] : TFE (0): Transmit FIFO empty // 0x00000002 [1] : TFNF (0): Transmit FIFO not full // 0x00000001 [0] : BUSY (0): SSI busy flag io_ro_32 sr; _REG_(SSI_IMR_OFFSET) // SSI_IMR // Interrupt mask // 0x00000020 [5] : MSTIM (0): Multi-master contention interrupt mask // 0x00000010 [4] : RXFIM (0): Receive FIFO full interrupt mask // 0x00000008 [3] : RXOIM (0): Receive FIFO overflow interrupt mask // 0x00000004 [2] : RXUIM (0): Receive FIFO underflow interrupt mask // 0x00000002 [1] : TXOIM (0): Transmit FIFO overflow interrupt mask // 0x00000001 [0] : TXEIM (0): Transmit FIFO empty interrupt mask io_rw_32 imr; _REG_(SSI_ISR_OFFSET) // SSI_ISR // Interrupt status // 0x00000020 [5] : MSTIS (0): Multi-master contention interrupt status // 0x00000010 [4] : RXFIS (0): Receive FIFO full interrupt status // 0x00000008 [3] : RXOIS (0): Receive FIFO overflow interrupt status // 0x00000004 [2] : RXUIS (0): Receive FIFO underflow interrupt status // 0x00000002 [1] : TXOIS (0): Transmit FIFO overflow interrupt status // 0x00000001 [0] : TXEIS (0): Transmit FIFO empty interrupt status io_ro_32 isr; _REG_(SSI_RISR_OFFSET) // SSI_RISR // Raw interrupt status // 0x00000020 [5] : MSTIR (0): Multi-master contention raw interrupt status // 0x00000010 [4] : RXFIR (0): Receive FIFO full raw interrupt status // 0x00000008 [3] : RXOIR (0): Receive FIFO overflow raw interrupt status // 0x00000004 [2] : RXUIR (0): Receive FIFO underflow raw interrupt status // 0x00000002 [1] : TXOIR (0): Transmit FIFO overflow raw interrupt status // 0x00000001 [0] : TXEIR (0): Transmit FIFO empty raw interrupt status io_ro_32 risr; _REG_(SSI_TXOICR_OFFSET) // SSI_TXOICR // TX FIFO overflow interrupt clear // 0x00000001 [0] : TXOICR (0): Clear-on-read transmit FIFO overflow interrupt io_ro_32 txoicr; _REG_(SSI_RXOICR_OFFSET) // SSI_RXOICR // RX FIFO overflow interrupt clear // 0x00000001 [0] : RXOICR (0): Clear-on-read receive FIFO overflow interrupt io_ro_32 rxoicr; _REG_(SSI_RXUICR_OFFSET) // SSI_RXUICR // RX FIFO underflow interrupt clear // 0x00000001 [0] : RXUICR (0): Clear-on-read receive FIFO underflow interrupt io_ro_32 rxuicr; _REG_(SSI_MSTICR_OFFSET) // SSI_MSTICR // Multi-master interrupt clear // 0x00000001 [0] : MSTICR (0): Clear-on-read multi-master contention interrupt io_ro_32 msticr; _REG_(SSI_ICR_OFFSET) // SSI_ICR // Interrupt clear // 0x00000001 [0] : ICR (0): Clear-on-read all active interrupts io_ro_32 icr; _REG_(SSI_DMACR_OFFSET) // SSI_DMACR // DMA control // 0x00000002 [1] : TDMAE (0): Transmit DMA enable // 0x00000001 [0] : RDMAE (0): Receive DMA enable io_rw_32 dmacr; _REG_(SSI_DMATDLR_OFFSET) // SSI_DMATDLR // DMA TX data level // 0x000000ff [7:0] : DMATDL (0): Transmit data watermark level io_rw_32 dmatdlr; _REG_(SSI_DMARDLR_OFFSET) // SSI_DMARDLR // DMA RX data level // 0x000000ff [7:0] : DMARDL (0): Receive data watermark level (DMARDLR+1) io_rw_32 dmardlr; _REG_(SSI_IDR_OFFSET) // SSI_IDR // Identification register // 0xffffffff [31:0] : IDCODE (0x51535049): Peripheral dentification code io_ro_32 idr; _REG_(SSI_SSI_VERSION_ID_OFFSET) // SSI_SSI_VERSION_ID // Version ID // 0xffffffff [31:0] : SSI_COMP_VERSION (0x3430312a): SNPS component version (format X io_ro_32 ssi_version_id; _REG_(SSI_DR0_OFFSET) // SSI_DR0 // Data Register 0 (of 36) // 0xffffffff [31:0] : DR (0): First data register of 36 io_rw_32 dr0; uint32_t _pad0[35]; _REG_(SSI_RX_SAMPLE_DLY_OFFSET) // SSI_RX_SAMPLE_DLY // RX sample delay // 0x000000ff [7:0] : RSD (0): RXD sample delay (in SCLK cycles) io_rw_32 rx_sample_dly; _REG_(SSI_SPI_CTRLR0_OFFSET) // SSI_SPI_CTRLR0 // SPI control // 0xff000000 [31:24] : XIP_CMD (0x3): SPI Command to send in XIP mode (INST_L = 8-bit) or to append to Address (INST_L = 0-bit) // 0x00040000 [18] : SPI_RXDS_EN (0): Read data strobe enable // 0x00020000 [17] : INST_DDR_EN (0): Instruction DDR transfer enable // 0x00010000 [16] : SPI_DDR_EN (0): SPI DDR transfer enable // 0x0000f800 [15:11] : WAIT_CYCLES (0): Wait cycles between control frame transmit and data reception (in SCLK cycles) // 0x00000300 [9:8] : INST_L (0): Instruction length (0/4/8/16b) // 0x0000003c [5:2] : ADDR_L (0): Address length (0b-60b in 4b increments) // 0x00000003 [1:0] : TRANS_TYPE (0): Address and instruction transfer format io_rw_32 spi_ctrlr0; _REG_(SSI_TXD_DRIVE_EDGE_OFFSET) // SSI_TXD_DRIVE_EDGE // TX drive edge // 0x000000ff [7:0] : TDE (0): TXD drive edge io_rw_32 txd_drive_edge; } ssi_hw_t; #define ssi_hw ((ssi_hw_t *)XIP_SSI_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/syscfg.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_SYSCFG_H #define _HARDWARE_STRUCTS_SYSCFG_H #include "hardware/address_mapped.h" #include "hardware/regs/syscfg.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_syscfg // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/syscfg.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(SYSCFG_PROC0_NMI_MASK_OFFSET) // SYSCFG_PROC0_NMI_MASK // Processor core 0 NMI source mask io_rw_32 proc0_nmi_mask; _REG_(SYSCFG_PROC1_NMI_MASK_OFFSET) // SYSCFG_PROC1_NMI_MASK // Processor core 1 NMI source mask io_rw_32 proc1_nmi_mask; _REG_(SYSCFG_PROC_CONFIG_OFFSET) // SYSCFG_PROC_CONFIG // Configuration for processors // 0xf0000000 [31:28] : PROC1_DAP_INSTID (1): Configure proc1 DAP instance ID // 0x0f000000 [27:24] : PROC0_DAP_INSTID (0): Configure proc0 DAP instance ID // 0x00000002 [1] : PROC1_HALTED (0): Indication that proc1 has halted // 0x00000001 [0] : PROC0_HALTED (0): Indication that proc0 has halted io_rw_32 proc_config; _REG_(SYSCFG_PROC_IN_SYNC_BYPASS_OFFSET) // SYSCFG_PROC_IN_SYNC_BYPASS // For each bit, if 1, bypass the input synchronizer between that GPIO // 0x3fffffff [29:0] : PROC_IN_SYNC_BYPASS (0) io_rw_32 proc_in_sync_bypass; _REG_(SYSCFG_PROC_IN_SYNC_BYPASS_HI_OFFSET) // SYSCFG_PROC_IN_SYNC_BYPASS_HI // For each bit, if 1, bypass the input synchronizer between that GPIO // 0x0000003f [5:0] : PROC_IN_SYNC_BYPASS_HI (0) io_rw_32 proc_in_sync_bypass_hi; _REG_(SYSCFG_DBGFORCE_OFFSET) // SYSCFG_DBGFORCE // Directly control the SWD debug port of either processor // 0x00000080 [7] : PROC1_ATTACH (0): Attach processor 1 debug port to syscfg controls, and disconnect it from... // 0x00000040 [6] : PROC1_SWCLK (1): Directly drive processor 1 SWCLK, if PROC1_ATTACH is set // 0x00000020 [5] : PROC1_SWDI (1): Directly drive processor 1 SWDIO input, if PROC1_ATTACH is set // 0x00000010 [4] : PROC1_SWDO (0): Observe the value of processor 1 SWDIO output // 0x00000008 [3] : PROC0_ATTACH (0): Attach processor 0 debug port to syscfg controls, and disconnect it from... // 0x00000004 [2] : PROC0_SWCLK (1): Directly drive processor 0 SWCLK, if PROC0_ATTACH is set // 0x00000002 [1] : PROC0_SWDI (1): Directly drive processor 0 SWDIO input, if PROC0_ATTACH is set // 0x00000001 [0] : PROC0_SWDO (0): Observe the value of processor 0 SWDIO output io_rw_32 dbgforce; _REG_(SYSCFG_MEMPOWERDOWN_OFFSET) // SYSCFG_MEMPOWERDOWN // Control power downs to memories // 0x00000080 [7] : ROM (0) // 0x00000040 [6] : USB (0) // 0x00000020 [5] : SRAM5 (0) // 0x00000010 [4] : SRAM4 (0) // 0x00000008 [3] : SRAM3 (0) // 0x00000004 [2] : SRAM2 (0) // 0x00000002 [1] : SRAM1 (0) // 0x00000001 [0] : SRAM0 (0) io_rw_32 mempowerdown; } syscfg_hw_t; #define syscfg_hw ((syscfg_hw_t *)SYSCFG_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/systick.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_SYSTICK_H #define _HARDWARE_STRUCTS_SYSTICK_H #include "hardware/address_mapped.h" #include "hardware/regs/m0plus.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_m0plus // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/m0plus.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(M0PLUS_SYST_CSR_OFFSET) // M0PLUS_SYST_CSR // Use the SysTick Control and Status Register to enable the SysTick features // 0x00010000 [16] : COUNTFLAG (0): Returns 1 if timer counted to 0 since last time this was read // 0x00000004 [2] : CLKSOURCE (0): SysTick clock source // 0x00000002 [1] : TICKINT (0): Enables SysTick exception request: // 0x00000001 [0] : ENABLE (0): Enable SysTick counter: io_rw_32 csr; _REG_(M0PLUS_SYST_RVR_OFFSET) // M0PLUS_SYST_RVR // Use the SysTick Reload Value Register to specify the start value to load into the current value register when the... // 0x00ffffff [23:0] : RELOAD (0): Value to load into the SysTick Current Value Register when the counter reaches 0 io_rw_32 rvr; _REG_(M0PLUS_SYST_CVR_OFFSET) // M0PLUS_SYST_CVR // Use the SysTick Current Value Register to find the current value in the register // 0x00ffffff [23:0] : CURRENT (0): Reads return the current value of the SysTick counter io_rw_32 cvr; _REG_(M0PLUS_SYST_CALIB_OFFSET) // M0PLUS_SYST_CALIB // Use the SysTick Calibration Value Register to enable software to scale to any required speed using divide and multiply // 0x80000000 [31] : NOREF (0): If reads as 1, the Reference clock is not provided - the CLKSOURCE bit of the... // 0x40000000 [30] : SKEW (0): If reads as 1, the calibration value for 10ms is inexact (due to clock frequency) // 0x00ffffff [23:0] : TENMS (0): An optional Reload value to be used for 10ms (100Hz) timing, subject to system clock... io_ro_32 calib; } systick_hw_t; #define systick_hw ((systick_hw_t *)(PPB_BASE + M0PLUS_SYST_CSR_OFFSET)) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/timer.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_TIMER_H #define _HARDWARE_STRUCTS_TIMER_H #include "hardware/address_mapped.h" #include "hardware/regs/timer.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_timer // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/timer.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(TIMER_TIMEHW_OFFSET) // TIMER_TIMEHW // Write to bits 63:32 of time io_wo_32 timehw; _REG_(TIMER_TIMELW_OFFSET) // TIMER_TIMELW // Write to bits 31:0 of time io_wo_32 timelw; _REG_(TIMER_TIMEHR_OFFSET) // TIMER_TIMEHR // Read from bits 63:32 of time io_ro_32 timehr; _REG_(TIMER_TIMELR_OFFSET) // TIMER_TIMELR // Read from bits 31:0 of time io_ro_32 timelr; _REG_(TIMER_ALARM0_OFFSET) // TIMER_ALARM0 // (Description copied from array index 0 register TIMER_ALARM0 applies similarly to other array indexes) // // Arm alarm 0, and configure the time it will fire io_rw_32 alarm[NUM_TIMERS]; // 4 _REG_(TIMER_ARMED_OFFSET) // TIMER_ARMED // Indicates the armed/disarmed status of each alarm // 0x0000000f [3:0] : ARMED (0) io_rw_32 armed; _REG_(TIMER_TIMERAWH_OFFSET) // TIMER_TIMERAWH // Raw read from bits 63:32 of time (no side effects) io_ro_32 timerawh; _REG_(TIMER_TIMERAWL_OFFSET) // TIMER_TIMERAWL // Raw read from bits 31:0 of time (no side effects) io_ro_32 timerawl; _REG_(TIMER_DBGPAUSE_OFFSET) // TIMER_DBGPAUSE // Set bits high to enable pause when the corresponding debug ports are active // 0x00000004 [2] : DBG1 (1): Pause when processor 1 is in debug mode // 0x00000002 [1] : DBG0 (1): Pause when processor 0 is in debug mode io_rw_32 dbgpause; _REG_(TIMER_PAUSE_OFFSET) // TIMER_PAUSE // Set high to pause the timer // 0x00000001 [0] : PAUSE (0) io_rw_32 pause; _REG_(TIMER_INTR_OFFSET) // TIMER_INTR // Raw Interrupts // 0x00000008 [3] : ALARM_3 (0) // 0x00000004 [2] : ALARM_2 (0) // 0x00000002 [1] : ALARM_1 (0) // 0x00000001 [0] : ALARM_0 (0) io_rw_32 intr; _REG_(TIMER_INTE_OFFSET) // TIMER_INTE // Interrupt Enable // 0x00000008 [3] : ALARM_3 (0) // 0x00000004 [2] : ALARM_2 (0) // 0x00000002 [1] : ALARM_1 (0) // 0x00000001 [0] : ALARM_0 (0) io_rw_32 inte; _REG_(TIMER_INTF_OFFSET) // TIMER_INTF // Interrupt Force // 0x00000008 [3] : ALARM_3 (0) // 0x00000004 [2] : ALARM_2 (0) // 0x00000002 [1] : ALARM_1 (0) // 0x00000001 [0] : ALARM_0 (0) io_rw_32 intf; _REG_(TIMER_INTS_OFFSET) // TIMER_INTS // Interrupt status after masking & forcing // 0x00000008 [3] : ALARM_3 (0) // 0x00000004 [2] : ALARM_2 (0) // 0x00000002 [1] : ALARM_1 (0) // 0x00000001 [0] : ALARM_0 (0) io_ro_32 ints; } timer_hw_t; #define timer_hw ((timer_hw_t *)TIMER_BASE) static_assert( NUM_TIMERS == 4, ""); #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/uart.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_UART_H #define _HARDWARE_STRUCTS_UART_H #include "hardware/address_mapped.h" #include "hardware/regs/uart.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_uart // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/uart.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(UART_UARTDR_OFFSET) // UART_UARTDR // Data Register, UARTDR // 0x00000800 [11] : OE (0): Overrun error // 0x00000400 [10] : BE (0): Break error // 0x00000200 [9] : PE (0): Parity error // 0x00000100 [8] : FE (0): Framing error // 0x000000ff [7:0] : DATA (0): Receive (read) data character io_rw_32 dr; _REG_(UART_UARTRSR_OFFSET) // UART_UARTRSR // Receive Status Register/Error Clear Register, UARTRSR/UARTECR // 0x00000008 [3] : OE (0): Overrun error // 0x00000004 [2] : BE (0): Break error // 0x00000002 [1] : PE (0): Parity error // 0x00000001 [0] : FE (0): Framing error io_rw_32 rsr; uint32_t _pad0[4]; _REG_(UART_UARTFR_OFFSET) // UART_UARTFR // Flag Register, UARTFR // 0x00000100 [8] : RI (0): Ring indicator // 0x00000080 [7] : TXFE (1): Transmit FIFO empty // 0x00000040 [6] : RXFF (0): Receive FIFO full // 0x00000020 [5] : TXFF (0): Transmit FIFO full // 0x00000010 [4] : RXFE (1): Receive FIFO empty // 0x00000008 [3] : BUSY (0): UART busy // 0x00000004 [2] : DCD (0): Data carrier detect // 0x00000002 [1] : DSR (0): Data set ready // 0x00000001 [0] : CTS (0): Clear to send io_ro_32 fr; uint32_t _pad1; _REG_(UART_UARTILPR_OFFSET) // UART_UARTILPR // IrDA Low-Power Counter Register, UARTILPR // 0x000000ff [7:0] : ILPDVSR (0): 8-bit low-power divisor value io_rw_32 ilpr; _REG_(UART_UARTIBRD_OFFSET) // UART_UARTIBRD // Integer Baud Rate Register, UARTIBRD // 0x0000ffff [15:0] : BAUD_DIVINT (0): The integer baud rate divisor io_rw_32 ibrd; _REG_(UART_UARTFBRD_OFFSET) // UART_UARTFBRD // Fractional Baud Rate Register, UARTFBRD // 0x0000003f [5:0] : BAUD_DIVFRAC (0): The fractional baud rate divisor io_rw_32 fbrd; _REG_(UART_UARTLCR_H_OFFSET) // UART_UARTLCR_H // Line Control Register, UARTLCR_H // 0x00000080 [7] : SPS (0): Stick parity select // 0x00000060 [6:5] : WLEN (0): Word length // 0x00000010 [4] : FEN (0): Enable FIFOs: 0 = FIFOs are disabled (character mode) that is, the FIFOs become... // 0x00000008 [3] : STP2 (0): Two stop bits select // 0x00000004 [2] : EPS (0): Even parity select // 0x00000002 [1] : PEN (0): Parity enable: 0 = parity is disabled and no parity bit added to the data frame 1 =... // 0x00000001 [0] : BRK (0): Send break io_rw_32 lcr_h; _REG_(UART_UARTCR_OFFSET) // UART_UARTCR // Control Register, UARTCR // 0x00008000 [15] : CTSEN (0): CTS hardware flow control enable // 0x00004000 [14] : RTSEN (0): RTS hardware flow control enable // 0x00002000 [13] : OUT2 (0): This bit is the complement of the UART Out2 (nUARTOut2) modem status output // 0x00001000 [12] : OUT1 (0): This bit is the complement of the UART Out1 (nUARTOut1) modem status output // 0x00000800 [11] : RTS (0): Request to send // 0x00000400 [10] : DTR (0): Data transmit ready // 0x00000200 [9] : RXE (1): Receive enable // 0x00000100 [8] : TXE (1): Transmit enable // 0x00000080 [7] : LBE (0): Loopback enable // 0x00000004 [2] : SIRLP (0): SIR low-power IrDA mode // 0x00000002 [1] : SIREN (0): SIR enable: 0 = IrDA SIR ENDEC is disabled // 0x00000001 [0] : UARTEN (0): UART enable: 0 = UART is disabled io_rw_32 cr; _REG_(UART_UARTIFLS_OFFSET) // UART_UARTIFLS // Interrupt FIFO Level Select Register, UARTIFLS // 0x00000038 [5:3] : RXIFLSEL (0x2): Receive interrupt FIFO level select // 0x00000007 [2:0] : TXIFLSEL (0x2): Transmit interrupt FIFO level select io_rw_32 ifls; _REG_(UART_UARTIMSC_OFFSET) // UART_UARTIMSC // Interrupt Mask Set/Clear Register, UARTIMSC // 0x00000400 [10] : OEIM (0): Overrun error interrupt mask // 0x00000200 [9] : BEIM (0): Break error interrupt mask // 0x00000100 [8] : PEIM (0): Parity error interrupt mask // 0x00000080 [7] : FEIM (0): Framing error interrupt mask // 0x00000040 [6] : RTIM (0): Receive timeout interrupt mask // 0x00000020 [5] : TXIM (0): Transmit interrupt mask // 0x00000010 [4] : RXIM (0): Receive interrupt mask // 0x00000008 [3] : DSRMIM (0): nUARTDSR modem interrupt mask // 0x00000004 [2] : DCDMIM (0): nUARTDCD modem interrupt mask // 0x00000002 [1] : CTSMIM (0): nUARTCTS modem interrupt mask // 0x00000001 [0] : RIMIM (0): nUARTRI modem interrupt mask io_rw_32 imsc; _REG_(UART_UARTRIS_OFFSET) // UART_UARTRIS // Raw Interrupt Status Register, UARTRIS // 0x00000400 [10] : OERIS (0): Overrun error interrupt status // 0x00000200 [9] : BERIS (0): Break error interrupt status // 0x00000100 [8] : PERIS (0): Parity error interrupt status // 0x00000080 [7] : FERIS (0): Framing error interrupt status // 0x00000040 [6] : RTRIS (0): Receive timeout interrupt status // 0x00000020 [5] : TXRIS (0): Transmit interrupt status // 0x00000010 [4] : RXRIS (0): Receive interrupt status // 0x00000008 [3] : DSRRMIS (0): nUARTDSR modem interrupt status // 0x00000004 [2] : DCDRMIS (0): nUARTDCD modem interrupt status // 0x00000002 [1] : CTSRMIS (0): nUARTCTS modem interrupt status // 0x00000001 [0] : RIRMIS (0): nUARTRI modem interrupt status io_ro_32 ris; _REG_(UART_UARTMIS_OFFSET) // UART_UARTMIS // Masked Interrupt Status Register, UARTMIS // 0x00000400 [10] : OEMIS (0): Overrun error masked interrupt status // 0x00000200 [9] : BEMIS (0): Break error masked interrupt status // 0x00000100 [8] : PEMIS (0): Parity error masked interrupt status // 0x00000080 [7] : FEMIS (0): Framing error masked interrupt status // 0x00000040 [6] : RTMIS (0): Receive timeout masked interrupt status // 0x00000020 [5] : TXMIS (0): Transmit masked interrupt status // 0x00000010 [4] : RXMIS (0): Receive masked interrupt status // 0x00000008 [3] : DSRMMIS (0): nUARTDSR modem masked interrupt status // 0x00000004 [2] : DCDMMIS (0): nUARTDCD modem masked interrupt status // 0x00000002 [1] : CTSMMIS (0): nUARTCTS modem masked interrupt status // 0x00000001 [0] : RIMMIS (0): nUARTRI modem masked interrupt status io_ro_32 mis; _REG_(UART_UARTICR_OFFSET) // UART_UARTICR // Interrupt Clear Register, UARTICR // 0x00000400 [10] : OEIC (0): Overrun error interrupt clear // 0x00000200 [9] : BEIC (0): Break error interrupt clear // 0x00000100 [8] : PEIC (0): Parity error interrupt clear // 0x00000080 [7] : FEIC (0): Framing error interrupt clear // 0x00000040 [6] : RTIC (0): Receive timeout interrupt clear // 0x00000020 [5] : TXIC (0): Transmit interrupt clear // 0x00000010 [4] : RXIC (0): Receive interrupt clear // 0x00000008 [3] : DSRMIC (0): nUARTDSR modem interrupt clear // 0x00000004 [2] : DCDMIC (0): nUARTDCD modem interrupt clear // 0x00000002 [1] : CTSMIC (0): nUARTCTS modem interrupt clear // 0x00000001 [0] : RIMIC (0): nUARTRI modem interrupt clear io_rw_32 icr; _REG_(UART_UARTDMACR_OFFSET) // UART_UARTDMACR // DMA Control Register, UARTDMACR // 0x00000004 [2] : DMAONERR (0): DMA on error // 0x00000002 [1] : TXDMAE (0): Transmit DMA enable // 0x00000001 [0] : RXDMAE (0): Receive DMA enable io_rw_32 dmacr; } uart_hw_t; #define uart0_hw ((uart_hw_t *)UART0_BASE) #define uart1_hw ((uart_hw_t *)UART1_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/usb.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_USB_H #define _HARDWARE_STRUCTS_USB_H #include "hardware/address_mapped.h" #include "hardware/regs/usb.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_usb // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/usb.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION // 0-15 #define USB_NUM_ENDPOINTS 16 // allow user to restrict number of endpoints available to save RAN #ifndef USB_MAX_ENDPOINTS #define USB_MAX_ENDPOINTS USB_NUM_ENDPOINTS #endif // 1-15 #define USB_HOST_INTERRUPT_ENDPOINTS (USB_NUM_ENDPOINTS - 1) // Endpoint buffer control bits #define USB_BUF_CTRL_FULL 0x00008000u #define USB_BUF_CTRL_LAST 0x00004000u #define USB_BUF_CTRL_DATA0_PID 0x00000000u #define USB_BUF_CTRL_DATA1_PID 0x00002000u #define USB_BUF_CTRL_SEL 0x00001000u #define USB_BUF_CTRL_STALL 0x00000800u #define USB_BUF_CTRL_AVAIL 0x00000400u #define USB_BUF_CTRL_LEN_MASK 0x000003FFu #define USB_BUF_CTRL_LEN_LSB 0 // ep_inout_ctrl bits #define EP_CTRL_ENABLE_BITS (1u << 31u) #define EP_CTRL_DOUBLE_BUFFERED_BITS (1u << 30) #define EP_CTRL_INTERRUPT_PER_BUFFER (1u << 29) #define EP_CTRL_INTERRUPT_PER_DOUBLE_BUFFER (1u << 28) #define EP_CTRL_INTERRUPT_ON_NAK (1u << 16) #define EP_CTRL_INTERRUPT_ON_STALL (1u << 17) #define EP_CTRL_BUFFER_TYPE_LSB 26u #define EP_CTRL_HOST_INTERRUPT_INTERVAL_LSB 16u #define USB_DPRAM_SIZE 4096u // PICO_CONFIG: USB_DPRAM_MAX, Set amount of USB RAM used by USB system, min=0, max=4096, default=4096, group=hardware_usb // Allow user to claim some of the USB RAM for themselves #ifndef USB_DPRAM_MAX #define USB_DPRAM_MAX USB_DPRAM_SIZE #endif // Define maximum packet sizes #define USB_MAX_ISO_PACKET_SIZE 1023 #define USB_MAX_PACKET_SIZE 64 typedef struct { // 4K of DPSRAM at beginning. Note this supports 8, 16, and 32 bit accesses volatile uint8_t setup_packet[8]; // First 8 bytes are always for setup packets // Starts at ep1 struct usb_device_dpram_ep_ctrl { io_rw_32 in; io_rw_32 out; } ep_ctrl[USB_NUM_ENDPOINTS - 1]; // Starts at ep0 struct usb_device_dpram_ep_buf_ctrl { io_rw_32 in; io_rw_32 out; } ep_buf_ctrl[USB_NUM_ENDPOINTS]; // EP0 buffers are fixed. Assumes single buffered mode for EP0 uint8_t ep0_buf_a[0x40]; uint8_t ep0_buf_b[0x40]; // Rest of DPRAM can be carved up as needed uint8_t epx_data[USB_DPRAM_MAX - 0x180]; } usb_device_dpram_t; static_assert(sizeof(usb_device_dpram_t) == USB_DPRAM_MAX, ""); static_assert(offsetof(usb_device_dpram_t, epx_data) == 0x180, ""); typedef struct { // 4K of DPSRAM at beginning. Note this supports 8, 16, and 32 bit accesses volatile uint8_t setup_packet[8]; // First 8 bytes are always for setup packets // Interrupt endpoint control 1 -> 15 struct usb_host_dpram_ep_ctrl { io_rw_32 ctrl; io_rw_32 spare; } int_ep_ctrl[USB_HOST_INTERRUPT_ENDPOINTS]; io_rw_32 epx_buf_ctrl; io_rw_32 _spare0; // Interrupt endpoint buffer control struct usb_host_dpram_ep_buf_ctrl { io_rw_32 ctrl; io_rw_32 spare; } int_ep_buffer_ctrl[USB_HOST_INTERRUPT_ENDPOINTS]; io_rw_32 epx_ctrl; uint8_t _spare1[124]; // Should start at 0x180 uint8_t epx_data[USB_DPRAM_MAX - 0x180]; } usb_host_dpram_t; static_assert(sizeof(usb_host_dpram_t) == USB_DPRAM_MAX, ""); static_assert(offsetof(usb_host_dpram_t, epx_data) == 0x180, ""); typedef struct { _REG_(USB_ADDR_ENDP_OFFSET) // USB_ADDR_ENDP // Device address and endpoint control // 0x000f0000 [19:16] : ENDPOINT (0): Device endpoint to send data to // 0x0000007f [6:0] : ADDRESS (0): In device mode, the address that the device should respond to io_rw_32 dev_addr_ctrl; _REG_(USB_ADDR_ENDP1_OFFSET) // USB_ADDR_ENDP1 // (Description copied from array index 0 register USB_ADDR_ENDP1 applies similarly to other array indexes) // // Interrupt endpoint 1 // 0x04000000 [26] : INTEP_PREAMBLE (0): Interrupt EP requires preamble (is a low speed device on a full speed hub) // 0x02000000 [25] : INTEP_DIR (0): Direction of the interrupt endpoint // 0x000f0000 [19:16] : ENDPOINT (0): Endpoint number of the interrupt endpoint // 0x0000007f [6:0] : ADDRESS (0): Device address io_rw_32 int_ep_addr_ctrl[USB_HOST_INTERRUPT_ENDPOINTS]; // 15 _REG_(USB_MAIN_CTRL_OFFSET) // USB_MAIN_CTRL // Main control register // 0x80000000 [31] : SIM_TIMING (0): Reduced timings for simulation // 0x00000002 [1] : HOST_NDEVICE (0): Device mode = 0, Host mode = 1 // 0x00000001 [0] : CONTROLLER_EN (0): Enable controller io_rw_32 main_ctrl; _REG_(USB_SOF_WR_OFFSET) // USB_SOF_WR // Set the SOF (Start of Frame) frame number in the host controller // 0x000007ff [10:0] : COUNT (0) io_wo_32 sof_rw; _REG_(USB_SOF_RD_OFFSET) // USB_SOF_RD // Read the last SOF (Start of Frame) frame number seen // 0x000007ff [10:0] : COUNT (0) io_ro_32 sof_rd; _REG_(USB_SIE_CTRL_OFFSET) // USB_SIE_CTRL // SIE control register // 0x80000000 [31] : EP0_INT_STALL (0): Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a STALL // 0x40000000 [30] : EP0_DOUBLE_BUF (0): Device: EP0 single buffered = 0, double buffered = 1 // 0x20000000 [29] : EP0_INT_1BUF (0): Device: Set bit in BUFF_STATUS for every buffer completed on EP0 // 0x10000000 [28] : EP0_INT_2BUF (0): Device: Set bit in BUFF_STATUS for every 2 buffers completed on EP0 // 0x08000000 [27] : EP0_INT_NAK (0): Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a NAK // 0x04000000 [26] : DIRECT_EN (0): Direct bus drive enable // 0x02000000 [25] : DIRECT_DP (0): Direct control of DP // 0x01000000 [24] : DIRECT_DM (0): Direct control of DM // 0x00040000 [18] : TRANSCEIVER_PD (0): Power down bus transceiver // 0x00020000 [17] : RPU_OPT (0): Device: Pull-up strength (0=1K2, 1=2k3) // 0x00010000 [16] : PULLUP_EN (0): Device: Enable pull up resistor // 0x00008000 [15] : PULLDOWN_EN (0): Host: Enable pull down resistors // 0x00002000 [13] : RESET_BUS (0): Host: Reset bus // 0x00001000 [12] : RESUME (0): Device: Remote wakeup // 0x00000800 [11] : VBUS_EN (0): Host: Enable VBUS // 0x00000400 [10] : KEEP_ALIVE_EN (0): Host: Enable keep alive packet (for low speed bus) // 0x00000200 [9] : SOF_EN (0): Host: Enable SOF generation (for full speed bus) // 0x00000100 [8] : SOF_SYNC (0): Host: Delay packet(s) until after SOF // 0x00000040 [6] : PREAMBLE_EN (0): Host: Preable enable for LS device on FS hub // 0x00000010 [4] : STOP_TRANS (0): Host: Stop transaction // 0x00000008 [3] : RECEIVE_DATA (0): Host: Receive transaction (IN to host) // 0x00000004 [2] : SEND_DATA (0): Host: Send transaction (OUT from host) // 0x00000002 [1] : SEND_SETUP (0): Host: Send Setup packet // 0x00000001 [0] : START_TRANS (0): Host: Start transaction io_rw_32 sie_ctrl; _REG_(USB_SIE_STATUS_OFFSET) // USB_SIE_STATUS // SIE status register // 0x80000000 [31] : DATA_SEQ_ERROR (0): Data Sequence Error // 0x40000000 [30] : ACK_REC (0): ACK received // 0x20000000 [29] : STALL_REC (0): Host: STALL received // 0x10000000 [28] : NAK_REC (0): Host: NAK received // 0x08000000 [27] : RX_TIMEOUT (0): RX timeout is raised by both the host and device if an ACK is not received in... // 0x04000000 [26] : RX_OVERFLOW (0): RX overflow is raised by the Serial RX engine if the incoming data is too fast // 0x02000000 [25] : BIT_STUFF_ERROR (0): Bit Stuff Error // 0x01000000 [24] : CRC_ERROR (0): CRC Error // 0x00080000 [19] : BUS_RESET (0): Device: bus reset received // 0x00040000 [18] : TRANS_COMPLETE (0): Transaction complete // 0x00020000 [17] : SETUP_REC (0): Device: Setup packet received // 0x00010000 [16] : CONNECTED (0): Device: connected // 0x00000800 [11] : RESUME (0): Host: Device has initiated a remote resume // 0x00000400 [10] : VBUS_OVER_CURR (0): VBUS over current detected // 0x00000300 [9:8] : SPEED (0): Host: device speed // 0x00000010 [4] : SUSPENDED (0): Bus in suspended state // 0x0000000c [3:2] : LINE_STATE (0): USB bus line state // 0x00000001 [0] : VBUS_DETECTED (0): Device: VBUS Detected io_rw_32 sie_status; _REG_(USB_INT_EP_CTRL_OFFSET) // USB_INT_EP_CTRL // interrupt endpoint control register // 0x0000fffe [15:1] : INT_EP_ACTIVE (0): Host: Enable interrupt endpoint 1 -> 15 io_rw_32 int_ep_ctrl; _REG_(USB_BUFF_STATUS_OFFSET) // USB_BUFF_STATUS // Buffer status register // 0x80000000 [31] : EP15_OUT (0) // 0x40000000 [30] : EP15_IN (0) // 0x20000000 [29] : EP14_OUT (0) // 0x10000000 [28] : EP14_IN (0) // 0x08000000 [27] : EP13_OUT (0) // 0x04000000 [26] : EP13_IN (0) // 0x02000000 [25] : EP12_OUT (0) // 0x01000000 [24] : EP12_IN (0) // 0x00800000 [23] : EP11_OUT (0) // 0x00400000 [22] : EP11_IN (0) // 0x00200000 [21] : EP10_OUT (0) // 0x00100000 [20] : EP10_IN (0) // 0x00080000 [19] : EP9_OUT (0) // 0x00040000 [18] : EP9_IN (0) // 0x00020000 [17] : EP8_OUT (0) // 0x00010000 [16] : EP8_IN (0) // 0x00008000 [15] : EP7_OUT (0) // 0x00004000 [14] : EP7_IN (0) // 0x00002000 [13] : EP6_OUT (0) // 0x00001000 [12] : EP6_IN (0) // 0x00000800 [11] : EP5_OUT (0) // 0x00000400 [10] : EP5_IN (0) // 0x00000200 [9] : EP4_OUT (0) // 0x00000100 [8] : EP4_IN (0) // 0x00000080 [7] : EP3_OUT (0) // 0x00000040 [6] : EP3_IN (0) // 0x00000020 [5] : EP2_OUT (0) // 0x00000010 [4] : EP2_IN (0) // 0x00000008 [3] : EP1_OUT (0) // 0x00000004 [2] : EP1_IN (0) // 0x00000002 [1] : EP0_OUT (0) // 0x00000001 [0] : EP0_IN (0) io_rw_32 buf_status; _REG_(USB_BUFF_CPU_SHOULD_HANDLE_OFFSET) // USB_BUFF_CPU_SHOULD_HANDLE // Which of the double buffers should be handled // 0x80000000 [31] : EP15_OUT (0) // 0x40000000 [30] : EP15_IN (0) // 0x20000000 [29] : EP14_OUT (0) // 0x10000000 [28] : EP14_IN (0) // 0x08000000 [27] : EP13_OUT (0) // 0x04000000 [26] : EP13_IN (0) // 0x02000000 [25] : EP12_OUT (0) // 0x01000000 [24] : EP12_IN (0) // 0x00800000 [23] : EP11_OUT (0) // 0x00400000 [22] : EP11_IN (0) // 0x00200000 [21] : EP10_OUT (0) // 0x00100000 [20] : EP10_IN (0) // 0x00080000 [19] : EP9_OUT (0) // 0x00040000 [18] : EP9_IN (0) // 0x00020000 [17] : EP8_OUT (0) // 0x00010000 [16] : EP8_IN (0) // 0x00008000 [15] : EP7_OUT (0) // 0x00004000 [14] : EP7_IN (0) // 0x00002000 [13] : EP6_OUT (0) // 0x00001000 [12] : EP6_IN (0) // 0x00000800 [11] : EP5_OUT (0) // 0x00000400 [10] : EP5_IN (0) // 0x00000200 [9] : EP4_OUT (0) // 0x00000100 [8] : EP4_IN (0) // 0x00000080 [7] : EP3_OUT (0) // 0x00000040 [6] : EP3_IN (0) // 0x00000020 [5] : EP2_OUT (0) // 0x00000010 [4] : EP2_IN (0) // 0x00000008 [3] : EP1_OUT (0) // 0x00000004 [2] : EP1_IN (0) // 0x00000002 [1] : EP0_OUT (0) // 0x00000001 [0] : EP0_IN (0) io_ro_32 buf_cpu_should_handle; _REG_(USB_EP_ABORT_OFFSET) // USB_EP_ABORT // Device only: Can be set to ignore the buffer control register for this endpoint in case you would like to revoke a buffer // 0x80000000 [31] : EP15_OUT (0) // 0x40000000 [30] : EP15_IN (0) // 0x20000000 [29] : EP14_OUT (0) // 0x10000000 [28] : EP14_IN (0) // 0x08000000 [27] : EP13_OUT (0) // 0x04000000 [26] : EP13_IN (0) // 0x02000000 [25] : EP12_OUT (0) // 0x01000000 [24] : EP12_IN (0) // 0x00800000 [23] : EP11_OUT (0) // 0x00400000 [22] : EP11_IN (0) // 0x00200000 [21] : EP10_OUT (0) // 0x00100000 [20] : EP10_IN (0) // 0x00080000 [19] : EP9_OUT (0) // 0x00040000 [18] : EP9_IN (0) // 0x00020000 [17] : EP8_OUT (0) // 0x00010000 [16] : EP8_IN (0) // 0x00008000 [15] : EP7_OUT (0) // 0x00004000 [14] : EP7_IN (0) // 0x00002000 [13] : EP6_OUT (0) // 0x00001000 [12] : EP6_IN (0) // 0x00000800 [11] : EP5_OUT (0) // 0x00000400 [10] : EP5_IN (0) // 0x00000200 [9] : EP4_OUT (0) // 0x00000100 [8] : EP4_IN (0) // 0x00000080 [7] : EP3_OUT (0) // 0x00000040 [6] : EP3_IN (0) // 0x00000020 [5] : EP2_OUT (0) // 0x00000010 [4] : EP2_IN (0) // 0x00000008 [3] : EP1_OUT (0) // 0x00000004 [2] : EP1_IN (0) // 0x00000002 [1] : EP0_OUT (0) // 0x00000001 [0] : EP0_IN (0) io_rw_32 abort; _REG_(USB_EP_ABORT_DONE_OFFSET) // USB_EP_ABORT_DONE // Device only: Used in conjunction with `EP_ABORT` // 0x80000000 [31] : EP15_OUT (0) // 0x40000000 [30] : EP15_IN (0) // 0x20000000 [29] : EP14_OUT (0) // 0x10000000 [28] : EP14_IN (0) // 0x08000000 [27] : EP13_OUT (0) // 0x04000000 [26] : EP13_IN (0) // 0x02000000 [25] : EP12_OUT (0) // 0x01000000 [24] : EP12_IN (0) // 0x00800000 [23] : EP11_OUT (0) // 0x00400000 [22] : EP11_IN (0) // 0x00200000 [21] : EP10_OUT (0) // 0x00100000 [20] : EP10_IN (0) // 0x00080000 [19] : EP9_OUT (0) // 0x00040000 [18] : EP9_IN (0) // 0x00020000 [17] : EP8_OUT (0) // 0x00010000 [16] : EP8_IN (0) // 0x00008000 [15] : EP7_OUT (0) // 0x00004000 [14] : EP7_IN (0) // 0x00002000 [13] : EP6_OUT (0) // 0x00001000 [12] : EP6_IN (0) // 0x00000800 [11] : EP5_OUT (0) // 0x00000400 [10] : EP5_IN (0) // 0x00000200 [9] : EP4_OUT (0) // 0x00000100 [8] : EP4_IN (0) // 0x00000080 [7] : EP3_OUT (0) // 0x00000040 [6] : EP3_IN (0) // 0x00000020 [5] : EP2_OUT (0) // 0x00000010 [4] : EP2_IN (0) // 0x00000008 [3] : EP1_OUT (0) // 0x00000004 [2] : EP1_IN (0) // 0x00000002 [1] : EP0_OUT (0) // 0x00000001 [0] : EP0_IN (0) io_rw_32 abort_done; _REG_(USB_EP_STALL_ARM_OFFSET) // USB_EP_STALL_ARM // Device: this bit must be set in conjunction with the `STALL` bit in the buffer control register to send a STALL on EP0 // 0x00000002 [1] : EP0_OUT (0) // 0x00000001 [0] : EP0_IN (0) io_rw_32 ep_stall_arm; _REG_(USB_NAK_POLL_OFFSET) // USB_NAK_POLL // Used by the host controller // 0x03ff0000 [25:16] : DELAY_FS (0x10): NAK polling interval for a full speed device // 0x000003ff [9:0] : DELAY_LS (0x10): NAK polling interval for a low speed device io_rw_32 nak_poll; _REG_(USB_EP_STATUS_STALL_NAK_OFFSET) // USB_EP_STATUS_STALL_NAK // Device: bits are set when the `IRQ_ON_NAK` or `IRQ_ON_STALL` bits are set // 0x80000000 [31] : EP15_OUT (0) // 0x40000000 [30] : EP15_IN (0) // 0x20000000 [29] : EP14_OUT (0) // 0x10000000 [28] : EP14_IN (0) // 0x08000000 [27] : EP13_OUT (0) // 0x04000000 [26] : EP13_IN (0) // 0x02000000 [25] : EP12_OUT (0) // 0x01000000 [24] : EP12_IN (0) // 0x00800000 [23] : EP11_OUT (0) // 0x00400000 [22] : EP11_IN (0) // 0x00200000 [21] : EP10_OUT (0) // 0x00100000 [20] : EP10_IN (0) // 0x00080000 [19] : EP9_OUT (0) // 0x00040000 [18] : EP9_IN (0) // 0x00020000 [17] : EP8_OUT (0) // 0x00010000 [16] : EP8_IN (0) // 0x00008000 [15] : EP7_OUT (0) // 0x00004000 [14] : EP7_IN (0) // 0x00002000 [13] : EP6_OUT (0) // 0x00001000 [12] : EP6_IN (0) // 0x00000800 [11] : EP5_OUT (0) // 0x00000400 [10] : EP5_IN (0) // 0x00000200 [9] : EP4_OUT (0) // 0x00000100 [8] : EP4_IN (0) // 0x00000080 [7] : EP3_OUT (0) // 0x00000040 [6] : EP3_IN (0) // 0x00000020 [5] : EP2_OUT (0) // 0x00000010 [4] : EP2_IN (0) // 0x00000008 [3] : EP1_OUT (0) // 0x00000004 [2] : EP1_IN (0) // 0x00000002 [1] : EP0_OUT (0) // 0x00000001 [0] : EP0_IN (0) io_rw_32 ep_nak_stall_status; _REG_(USB_USB_MUXING_OFFSET) // USB_USB_MUXING // Where to connect the USB controller // 0x00000008 [3] : SOFTCON (0) // 0x00000004 [2] : TO_DIGITAL_PAD (0) // 0x00000002 [1] : TO_EXTPHY (0) // 0x00000001 [0] : TO_PHY (0) io_rw_32 muxing; _REG_(USB_USB_PWR_OFFSET) // USB_USB_PWR // Overrides for the power signals in the event that the VBUS signals are not hooked up to GPIO // 0x00000020 [5] : OVERCURR_DETECT_EN (0) // 0x00000010 [4] : OVERCURR_DETECT (0) // 0x00000008 [3] : VBUS_DETECT_OVERRIDE_EN (0) // 0x00000004 [2] : VBUS_DETECT (0) // 0x00000002 [1] : VBUS_EN_OVERRIDE_EN (0) // 0x00000001 [0] : VBUS_EN (0) io_rw_32 pwr; _REG_(USB_USBPHY_DIRECT_OFFSET) // USB_USBPHY_DIRECT // This register allows for direct control of the USB phy // 0x00400000 [22] : DM_OVV (0): DM over voltage // 0x00200000 [21] : DP_OVV (0): DP over voltage // 0x00100000 [20] : DM_OVCN (0): DM overcurrent // 0x00080000 [19] : DP_OVCN (0): DP overcurrent // 0x00040000 [18] : RX_DM (0): DPM pin state // 0x00020000 [17] : RX_DP (0): DPP pin state // 0x00010000 [16] : RX_DD (0): Differential RX // 0x00008000 [15] : TX_DIFFMODE (0): TX_DIFFMODE=0: Single ended mode // 0x00004000 [14] : TX_FSSLEW (0): TX_FSSLEW=0: Low speed slew rate // 0x00002000 [13] : TX_PD (0): TX power down override (if override enable is set) // 0x00001000 [12] : RX_PD (0): RX power down override (if override enable is set) // 0x00000800 [11] : TX_DM (0): Output data // 0x00000400 [10] : TX_DP (0): Output data // 0x00000200 [9] : TX_DM_OE (0): Output enable // 0x00000100 [8] : TX_DP_OE (0): Output enable // 0x00000040 [6] : DM_PULLDN_EN (0): DM pull down enable // 0x00000020 [5] : DM_PULLUP_EN (0): DM pull up enable // 0x00000010 [4] : DM_PULLUP_HISEL (0): Enable the second DM pull up resistor // 0x00000004 [2] : DP_PULLDN_EN (0): DP pull down enable // 0x00000002 [1] : DP_PULLUP_EN (0): DP pull up enable // 0x00000001 [0] : DP_PULLUP_HISEL (0): Enable the second DP pull up resistor io_rw_32 phy_direct; _REG_(USB_USBPHY_DIRECT_OVERRIDE_OFFSET) // USB_USBPHY_DIRECT_OVERRIDE // Override enable for each control in usbphy_direct // 0x00008000 [15] : TX_DIFFMODE_OVERRIDE_EN (0) // 0x00001000 [12] : DM_PULLUP_OVERRIDE_EN (0) // 0x00000800 [11] : TX_FSSLEW_OVERRIDE_EN (0) // 0x00000400 [10] : TX_PD_OVERRIDE_EN (0) // 0x00000200 [9] : RX_PD_OVERRIDE_EN (0) // 0x00000100 [8] : TX_DM_OVERRIDE_EN (0) // 0x00000080 [7] : TX_DP_OVERRIDE_EN (0) // 0x00000040 [6] : TX_DM_OE_OVERRIDE_EN (0) // 0x00000020 [5] : TX_DP_OE_OVERRIDE_EN (0) // 0x00000010 [4] : DM_PULLDN_EN_OVERRIDE_EN (0) // 0x00000008 [3] : DP_PULLDN_EN_OVERRIDE_EN (0) // 0x00000004 [2] : DP_PULLUP_EN_OVERRIDE_EN (0) // 0x00000002 [1] : DM_PULLUP_HISEL_OVERRIDE_EN (0) // 0x00000001 [0] : DP_PULLUP_HISEL_OVERRIDE_EN (0) io_rw_32 phy_direct_override; _REG_(USB_USBPHY_TRIM_OFFSET) // USB_USBPHY_TRIM // Used to adjust trim values of USB phy pull down resistors // 0x00001f00 [12:8] : DM_PULLDN_TRIM (0x1f): Value to drive to USB PHY // 0x0000001f [4:0] : DP_PULLDN_TRIM (0x1f): Value to drive to USB PHY io_rw_32 phy_trim; uint32_t _pad0; _REG_(USB_INTR_OFFSET) // USB_INTR // Raw Interrupts // 0x00080000 [19] : EP_STALL_NAK (0): Raised when any bit in EP_STATUS_STALL_NAK is set // 0x00040000 [18] : ABORT_DONE (0): Raised when any bit in ABORT_DONE is set // 0x00020000 [17] : DEV_SOF (0): Set every time the device receives a SOF (Start of Frame) packet // 0x00010000 [16] : SETUP_REQ (0): Device // 0x00008000 [15] : DEV_RESUME_FROM_HOST (0): Set when the device receives a resume from the host // 0x00004000 [14] : DEV_SUSPEND (0): Set when the device suspend state changes // 0x00002000 [13] : DEV_CONN_DIS (0): Set when the device connection state changes // 0x00001000 [12] : BUS_RESET (0): Source: SIE_STATUS // 0x00000800 [11] : VBUS_DETECT (0): Source: SIE_STATUS // 0x00000400 [10] : STALL (0): Source: SIE_STATUS // 0x00000200 [9] : ERROR_CRC (0): Source: SIE_STATUS // 0x00000100 [8] : ERROR_BIT_STUFF (0): Source: SIE_STATUS // 0x00000080 [7] : ERROR_RX_OVERFLOW (0): Source: SIE_STATUS // 0x00000040 [6] : ERROR_RX_TIMEOUT (0): Source: SIE_STATUS // 0x00000020 [5] : ERROR_DATA_SEQ (0): Source: SIE_STATUS // 0x00000010 [4] : BUFF_STATUS (0): Raised when any bit in BUFF_STATUS is set // 0x00000008 [3] : TRANS_COMPLETE (0): Raised every time SIE_STATUS // 0x00000004 [2] : HOST_SOF (0): Host: raised every time the host sends a SOF (Start of Frame) // 0x00000002 [1] : HOST_RESUME (0): Host: raised when a device wakes up the host // 0x00000001 [0] : HOST_CONN_DIS (0): Host: raised when a device is connected or disconnected (i io_ro_32 intr; _REG_(USB_INTE_OFFSET) // USB_INTE // Interrupt Enable // 0x00080000 [19] : EP_STALL_NAK (0): Raised when any bit in EP_STATUS_STALL_NAK is set // 0x00040000 [18] : ABORT_DONE (0): Raised when any bit in ABORT_DONE is set // 0x00020000 [17] : DEV_SOF (0): Set every time the device receives a SOF (Start of Frame) packet // 0x00010000 [16] : SETUP_REQ (0): Device // 0x00008000 [15] : DEV_RESUME_FROM_HOST (0): Set when the device receives a resume from the host // 0x00004000 [14] : DEV_SUSPEND (0): Set when the device suspend state changes // 0x00002000 [13] : DEV_CONN_DIS (0): Set when the device connection state changes // 0x00001000 [12] : BUS_RESET (0): Source: SIE_STATUS // 0x00000800 [11] : VBUS_DETECT (0): Source: SIE_STATUS // 0x00000400 [10] : STALL (0): Source: SIE_STATUS // 0x00000200 [9] : ERROR_CRC (0): Source: SIE_STATUS // 0x00000100 [8] : ERROR_BIT_STUFF (0): Source: SIE_STATUS // 0x00000080 [7] : ERROR_RX_OVERFLOW (0): Source: SIE_STATUS // 0x00000040 [6] : ERROR_RX_TIMEOUT (0): Source: SIE_STATUS // 0x00000020 [5] : ERROR_DATA_SEQ (0): Source: SIE_STATUS // 0x00000010 [4] : BUFF_STATUS (0): Raised when any bit in BUFF_STATUS is set // 0x00000008 [3] : TRANS_COMPLETE (0): Raised every time SIE_STATUS // 0x00000004 [2] : HOST_SOF (0): Host: raised every time the host sends a SOF (Start of Frame) // 0x00000002 [1] : HOST_RESUME (0): Host: raised when a device wakes up the host // 0x00000001 [0] : HOST_CONN_DIS (0): Host: raised when a device is connected or disconnected (i io_rw_32 inte; _REG_(USB_INTF_OFFSET) // USB_INTF // Interrupt Force // 0x00080000 [19] : EP_STALL_NAK (0): Raised when any bit in EP_STATUS_STALL_NAK is set // 0x00040000 [18] : ABORT_DONE (0): Raised when any bit in ABORT_DONE is set // 0x00020000 [17] : DEV_SOF (0): Set every time the device receives a SOF (Start of Frame) packet // 0x00010000 [16] : SETUP_REQ (0): Device // 0x00008000 [15] : DEV_RESUME_FROM_HOST (0): Set when the device receives a resume from the host // 0x00004000 [14] : DEV_SUSPEND (0): Set when the device suspend state changes // 0x00002000 [13] : DEV_CONN_DIS (0): Set when the device connection state changes // 0x00001000 [12] : BUS_RESET (0): Source: SIE_STATUS // 0x00000800 [11] : VBUS_DETECT (0): Source: SIE_STATUS // 0x00000400 [10] : STALL (0): Source: SIE_STATUS // 0x00000200 [9] : ERROR_CRC (0): Source: SIE_STATUS // 0x00000100 [8] : ERROR_BIT_STUFF (0): Source: SIE_STATUS // 0x00000080 [7] : ERROR_RX_OVERFLOW (0): Source: SIE_STATUS // 0x00000040 [6] : ERROR_RX_TIMEOUT (0): Source: SIE_STATUS // 0x00000020 [5] : ERROR_DATA_SEQ (0): Source: SIE_STATUS // 0x00000010 [4] : BUFF_STATUS (0): Raised when any bit in BUFF_STATUS is set // 0x00000008 [3] : TRANS_COMPLETE (0): Raised every time SIE_STATUS // 0x00000004 [2] : HOST_SOF (0): Host: raised every time the host sends a SOF (Start of Frame) // 0x00000002 [1] : HOST_RESUME (0): Host: raised when a device wakes up the host // 0x00000001 [0] : HOST_CONN_DIS (0): Host: raised when a device is connected or disconnected (i io_rw_32 intf; _REG_(USB_INTS_OFFSET) // USB_INTS // Interrupt status after masking & forcing // 0x00080000 [19] : EP_STALL_NAK (0): Raised when any bit in EP_STATUS_STALL_NAK is set // 0x00040000 [18] : ABORT_DONE (0): Raised when any bit in ABORT_DONE is set // 0x00020000 [17] : DEV_SOF (0): Set every time the device receives a SOF (Start of Frame) packet // 0x00010000 [16] : SETUP_REQ (0): Device // 0x00008000 [15] : DEV_RESUME_FROM_HOST (0): Set when the device receives a resume from the host // 0x00004000 [14] : DEV_SUSPEND (0): Set when the device suspend state changes // 0x00002000 [13] : DEV_CONN_DIS (0): Set when the device connection state changes // 0x00001000 [12] : BUS_RESET (0): Source: SIE_STATUS // 0x00000800 [11] : VBUS_DETECT (0): Source: SIE_STATUS // 0x00000400 [10] : STALL (0): Source: SIE_STATUS // 0x00000200 [9] : ERROR_CRC (0): Source: SIE_STATUS // 0x00000100 [8] : ERROR_BIT_STUFF (0): Source: SIE_STATUS // 0x00000080 [7] : ERROR_RX_OVERFLOW (0): Source: SIE_STATUS // 0x00000040 [6] : ERROR_RX_TIMEOUT (0): Source: SIE_STATUS // 0x00000020 [5] : ERROR_DATA_SEQ (0): Source: SIE_STATUS // 0x00000010 [4] : BUFF_STATUS (0): Raised when any bit in BUFF_STATUS is set // 0x00000008 [3] : TRANS_COMPLETE (0): Raised every time SIE_STATUS // 0x00000004 [2] : HOST_SOF (0): Host: raised every time the host sends a SOF (Start of Frame) // 0x00000002 [1] : HOST_RESUME (0): Host: raised when a device wakes up the host // 0x00000001 [0] : HOST_CONN_DIS (0): Host: raised when a device is connected or disconnected (i io_ro_32 ints; } usb_hw_t; #define usb_hw ((usb_hw_t *)USBCTRL_REGS_BASE) #define usb_dpram ((usb_device_dpram_t *)USBCTRL_DPRAM_BASE) #define usbh_dpram ((usb_host_dpram_t *)USBCTRL_DPRAM_BASE) static_assert( USB_HOST_INTERRUPT_ENDPOINTS == 15, ""); #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/vreg_and_chip_reset.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_VREG_AND_CHIP_RESET_H #define _HARDWARE_STRUCTS_VREG_AND_CHIP_RESET_H #include "hardware/address_mapped.h" #include "hardware/regs/vreg_and_chip_reset.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_vreg_and_chip_reset // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/vreg_and_chip_reset.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(VREG_AND_CHIP_RESET_VREG_OFFSET) // VREG_AND_CHIP_RESET_VREG // Voltage regulator control and status // 0x00001000 [12] : ROK (0): regulation status // 0x000000f0 [7:4] : VSEL (0xb): output voltage select // 0x00000002 [1] : HIZ (0): high impedance mode select // 0x00000001 [0] : EN (1): enable io_rw_32 vreg; _REG_(VREG_AND_CHIP_RESET_BOD_OFFSET) // VREG_AND_CHIP_RESET_BOD // brown-out detection control // 0x000000f0 [7:4] : VSEL (0x9): threshold select // 0x00000001 [0] : EN (1): enable io_rw_32 bod; _REG_(VREG_AND_CHIP_RESET_CHIP_RESET_OFFSET) // VREG_AND_CHIP_RESET_CHIP_RESET // Chip reset control and status // 0x01000000 [24] : PSM_RESTART_FLAG (0): This is set by psm_restart from the debugger // 0x00100000 [20] : HAD_PSM_RESTART (0): Last reset was from the debug port // 0x00010000 [16] : HAD_RUN (0): Last reset was from the RUN pin // 0x00000100 [8] : HAD_POR (0): Last reset was from the power-on reset or brown-out detection blocks io_rw_32 chip_reset; } vreg_and_chip_reset_hw_t; #define vreg_and_chip_reset_hw ((vreg_and_chip_reset_hw_t *)VREG_AND_CHIP_RESET_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/watchdog.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_WATCHDOG_H #define _HARDWARE_STRUCTS_WATCHDOG_H #include "hardware/address_mapped.h" #include "hardware/regs/watchdog.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_watchdog // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/watchdog.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(WATCHDOG_CTRL_OFFSET) // WATCHDOG_CTRL // Watchdog control // 0x80000000 [31] : TRIGGER (0): Trigger a watchdog reset // 0x40000000 [30] : ENABLE (0): When not enabled the watchdog timer is paused // 0x04000000 [26] : PAUSE_DBG1 (1): Pause the watchdog timer when processor 1 is in debug mode // 0x02000000 [25] : PAUSE_DBG0 (1): Pause the watchdog timer when processor 0 is in debug mode // 0x01000000 [24] : PAUSE_JTAG (1): Pause the watchdog timer when JTAG is accessing the bus fabric // 0x00ffffff [23:0] : TIME (0): Indicates the number of ticks / 2 (see errata RP2040-E1) before a watchdog reset will... io_rw_32 ctrl; _REG_(WATCHDOG_LOAD_OFFSET) // WATCHDOG_LOAD // Load the watchdog timer // 0x00ffffff [23:0] : LOAD (0) io_wo_32 load; _REG_(WATCHDOG_REASON_OFFSET) // WATCHDOG_REASON // Logs the reason for the last reset // 0x00000002 [1] : FORCE (0) // 0x00000001 [0] : TIMER (0) io_ro_32 reason; _REG_(WATCHDOG_SCRATCH0_OFFSET) // WATCHDOG_SCRATCH0 // (Description copied from array index 0 register WATCHDOG_SCRATCH0 applies similarly to other array indexes) // // Scratch register io_rw_32 scratch[8]; _REG_(WATCHDOG_TICK_OFFSET) // WATCHDOG_TICK // Controls the tick generator // 0x000ff800 [19:11] : COUNT (0): Count down timer: the remaining number clk_tick cycles before the next tick is generated // 0x00000400 [10] : RUNNING (0): Is the tick generator running? // 0x00000200 [9] : ENABLE (1): start / stop tick generation // 0x000001ff [8:0] : CYCLES (0): Total number of clk_tick cycles before the next tick io_rw_32 tick; } watchdog_hw_t; #define watchdog_hw ((watchdog_hw_t *)WATCHDOG_BASE) #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/xip_ctrl.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_XIP_CTRL_H #define _HARDWARE_STRUCTS_XIP_CTRL_H #include "hardware/address_mapped.h" #include "hardware/regs/xip.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_xip // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/xip.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION typedef struct { _REG_(XIP_CTRL_OFFSET) // XIP_CTRL // Cache control // 0x00000008 [3] : POWER_DOWN (0): When 1, the cache memories are powered down // 0x00000002 [1] : ERR_BADWRITE (1): When 1, writes to any alias other than 0x0 (caching, allocating) // 0x00000001 [0] : EN (1): When 1, enable the cache io_rw_32 ctrl; _REG_(XIP_FLUSH_OFFSET) // XIP_FLUSH // Cache Flush control // 0x00000001 [0] : FLUSH (0): Write 1 to flush the cache io_rw_32 flush; _REG_(XIP_STAT_OFFSET) // XIP_STAT // Cache Status // 0x00000004 [2] : FIFO_FULL (0): When 1, indicates the XIP streaming FIFO is completely full // 0x00000002 [1] : FIFO_EMPTY (1): When 1, indicates the XIP streaming FIFO is completely empty // 0x00000001 [0] : FLUSH_READY (0): Reads as 0 while a cache flush is in progress, and 1 otherwise io_ro_32 stat; _REG_(XIP_CTR_HIT_OFFSET) // XIP_CTR_HIT // Cache Hit counter io_rw_32 ctr_hit; _REG_(XIP_CTR_ACC_OFFSET) // XIP_CTR_ACC // Cache Access counter io_rw_32 ctr_acc; _REG_(XIP_STREAM_ADDR_OFFSET) // XIP_STREAM_ADDR // FIFO stream address // 0xfffffffc [31:2] : STREAM_ADDR (0): The address of the next word to be streamed from flash to the streaming FIFO io_rw_32 stream_addr; _REG_(XIP_STREAM_CTR_OFFSET) // XIP_STREAM_CTR // FIFO stream control // 0x003fffff [21:0] : STREAM_CTR (0): Write a nonzero value to start a streaming read io_rw_32 stream_ctr; _REG_(XIP_STREAM_FIFO_OFFSET) // XIP_STREAM_FIFO // FIFO stream data io_ro_32 stream_fifo; } xip_ctrl_hw_t; #define xip_ctrl_hw ((xip_ctrl_hw_t *)XIP_CTRL_BASE) #define XIP_STAT_FIFO_FULL XIP_STAT_FIFO_FULL_BITS #define XIP_STAT_FIFO_EMPTY XIP_STAT_FIFO_EMPTY_BITS #define XIP_STAT_FLUSH_RDY XIP_STAT_FLUSH_READY_BITS #endif ================================================ FILE: pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/xosc.h ================================================ // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_STRUCTS_XOSC_H #define _HARDWARE_STRUCTS_XOSC_H #include "hardware/address_mapped.h" #include "hardware/regs/xosc.h" // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_xosc // // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) // _REG_(x) will link to the corresponding register in hardware/regs/xosc.h. // // Bit-field descriptions are of the form: // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION /// \tag::xosc_hw[] typedef struct { _REG_(XOSC_CTRL_OFFSET) // XOSC_CTRL // Crystal Oscillator Control // 0x00fff000 [23:12] : ENABLE (0): On power-up this field is initialised to DISABLE and the chip runs from the ROSC // 0x00000fff [11:0] : FREQ_RANGE (0): Frequency range io_rw_32 ctrl; _REG_(XOSC_STATUS_OFFSET) // XOSC_STATUS // Crystal Oscillator Status // 0x80000000 [31] : STABLE (0): Oscillator is running and stable // 0x01000000 [24] : BADWRITE (0): An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or DORMANT // 0x00001000 [12] : ENABLED (0): Oscillator is enabled but not necessarily running and stable, resets to 0 // 0x00000003 [1:0] : FREQ_RANGE (0): The current frequency range setting, always reads 0 io_rw_32 status; _REG_(XOSC_DORMANT_OFFSET) // XOSC_DORMANT // Crystal Oscillator pause control io_rw_32 dormant; _REG_(XOSC_STARTUP_OFFSET) // XOSC_STARTUP // Controls the startup delay // 0x00100000 [20] : X4 (0): Multiplies the startup_delay by 4 // 0x00003fff [13:0] : DELAY (0xc4): in multiples of 256*xtal_period io_rw_32 startup; uint32_t _pad0[3]; _REG_(XOSC_COUNT_OFFSET) // XOSC_COUNT // A down counter running at the xosc frequency which counts to zero and stops // 0x000000ff [7:0] : COUNT (0) io_rw_32 count; } xosc_hw_t; #define xosc_hw ((xosc_hw_t *)XOSC_BASE) /// \end::xosc_hw[] #endif ================================================ FILE: pico-sdk/src/rp2040.cmake ================================================ # include everything needed to build against rp2040 include(rp2_common.cmake) add_subdirectory(rp2040) ================================================ FILE: pico-sdk/src/rp2_common/CMakeLists.txt ================================================ option(PICO_NO_FLASH "Default binaries to not not use flash") option(PICO_COPY_TO_RAM "Default binaries to Copy code to RAM when booting from flash") set(CMAKE_EXECUTABLE_SUFFIX .elf) pico_add_subdirectory(hardware_base) pico_add_subdirectory(hardware_claim) # HAL items which expose a public (inline) functions/macro API above the raw hardware pico_add_subdirectory(hardware_adc) pico_add_subdirectory(hardware_clocks) pico_add_subdirectory(hardware_dma) pico_add_subdirectory(hardware_divider) pico_add_subdirectory(hardware_exception) pico_add_subdirectory(hardware_flash) pico_add_subdirectory(hardware_gpio) pico_add_subdirectory(hardware_i2c) pico_add_subdirectory(hardware_interp) pico_add_subdirectory(hardware_irq) pico_add_subdirectory(hardware_pio) pico_add_subdirectory(hardware_pll) pico_add_subdirectory(hardware_pwm) pico_add_subdirectory(hardware_resets) pico_add_subdirectory(hardware_rtc) pico_add_subdirectory(hardware_spi) pico_add_subdirectory(hardware_sync) pico_add_subdirectory(hardware_timer) pico_add_subdirectory(hardware_uart) pico_add_subdirectory(hardware_vreg) pico_add_subdirectory(hardware_watchdog) pico_add_subdirectory(hardware_xosc) # Helper functions to connect to data/functions in the bootrom pico_add_subdirectory(pico_bootrom) pico_add_subdirectory(pico_platform) if (NOT PICO_BARE_METAL) # NOTE THE ORDERING HERE IS IMPORTANT AS SOME TARGETS CHECK ON EXISTENCE OF OTHER TARGETS pico_add_subdirectory(boot_stage2) pico_add_subdirectory(pico_bootsel_via_double_reset) pico_add_subdirectory(pico_multicore) pico_add_subdirectory(pico_unique_id) pico_add_subdirectory(pico_bit_ops) pico_add_subdirectory(pico_divider) pico_add_subdirectory(pico_double) pico_add_subdirectory(pico_int64_ops) pico_add_subdirectory(pico_flash) pico_add_subdirectory(pico_float) pico_add_subdirectory(pico_mem_ops) pico_add_subdirectory(pico_malloc) pico_add_subdirectory(pico_printf) pico_add_subdirectory(pico_rand) pico_add_subdirectory(pico_stdio) pico_add_subdirectory(pico_stdio_semihosting) pico_add_subdirectory(pico_stdio_uart) pico_add_subdirectory(cmsis) pico_add_subdirectory(tinyusb) pico_add_subdirectory(pico_stdio_usb) pico_add_subdirectory(pico_i2c_slave) pico_add_subdirectory(pico_async_context) pico_add_subdirectory(pico_stdlib) pico_add_subdirectory(pico_cxx_options) pico_add_subdirectory(pico_standard_link) pico_add_subdirectory(pico_fix) pico_add_subdirectory(pico_runtime) endif() set(CMAKE_EXECUTABLE_SUFFIX "${CMAKE_EXECUTABLE_SUFFIX}" PARENT_SCOPE) pico_add_doxygen(${CMAKE_CURRENT_LIST_DIR}) pico_add_doxygen_exclude(${CMAKE_CURRENT_LIST_DIR}/cmsis) pico_promote_common_scope_vars() ================================================ FILE: pico-sdk/src/rp2_common/README.md ================================================ This directory contains libraries specifically targeting the RP2040 or possible future related devices. It is selected when `PICO_PLATFORM=rp2040` (the default) is specified for the build `hardware_` libraries exist for individual hardware components to provide a simple API providing a thin abstraction hiding the details of accessing the hardware registers directly. `pico_` provides higher level functionality you might generally find in say an OS kernel, as well as runtime support familiar to most C programmers. ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/CMakeLists.txt ================================================ # PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2_FILE, Default boot stage 2 file to use unless overridden by pico_set_boot_stage2 on the TARGET; this setting is useful when explicitly setting the default build from a per board CMake file, group=build # PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2, Simpler alternative to specifying PICO_DEFAULT_BOOT_STAGE2_FILE where the file is src/rp2_common/boot_stage2/{PICO_DEFAULT_BOOT_STAGE2}.S, default=compile_time_choice, group=build if (DEFINED ENV{PICO_DEFAULT_BOOT_STAGE2_FILE}) set(PICO_DEFAULT_BOOT_STAGE2_FILE $ENV{PICO_DEFAULT_BOOT_STAGE2_FILE}) message("Using PICO_DEFAULT_BOOT_STAGE2_FILE from environment ('${PICO_DEFAULT_BOOT_STAGE2_FILE}')") elseif (PICO_DEFAULT_BOOT_STAGE2_FILE) # explicitly set, so cache it set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_DEFAULT_BOOT_STAGE2_FILE}" CACHE STRING "boot stage 2 source file" FORCE) endif() set(PICO_BOOT_STAGE2_COMPILE_TIME_CHOICE_NAME compile_time_choice) # local var if (NOT PICO_DEFAULT_BOOT_STAGE2_FILE) if (DEFINED ENV{PICO_DEFAULT_BOOT_STAGE2}) set(PICO_DEFAULT_BOOT_STAGE2 $ENV{PICO_DEFAULT_BOOT_STAGE2}) message("Using PICO_DEFAULT_BOOT_STAGE2 from environment ('${PICO_DEFAULT_BOOT_STAGE2}')") endif() if (NOT DEFINED PICO_DEFAULT_BOOT_STAGE2) set(PICO_DEFAULT_BOOT_STAGE2 ${PICO_BOOT_STAGE2_COMPILE_TIME_CHOICE_NAME}) endif() set(PICO_DEFAULT_BOOT_STAGE2 "${PICO_DEFAULT_BOOT_STAGE2}" CACHE STRING "boot stage 2 short name" FORCE) set(PICO_DEFAULT_BOOT_STAGE2_FILE "${CMAKE_CURRENT_LIST_DIR}/${PICO_DEFAULT_BOOT_STAGE2}.S") endif() if (NOT EXISTS ${PICO_DEFAULT_BOOT_STAGE2_FILE}) message(FATAL_ERROR "Specified boot stage 2 source '${PICO_DEFAULT_BOOT_STAGE2_FILE}' does not exist.") endif() pico_register_common_scope_var(PICO_DEFAULT_BOOT_STAGE2_FILE) # needed by function below set(PICO_BOOT_STAGE2_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE INTERNAL "") add_library(boot_stage2_headers INTERFACE) target_include_directories(boot_stage2_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) # by convention the first source file name without extension is used for the binary info name function(pico_define_boot_stage2 NAME SOURCES) add_executable(${NAME} ${SOURCES} ) # todo bit of an abstraction failure - revisit for Clang support anyway if (PICO_C_COMPILER_IS_CLANG) target_link_options(${NAME} PRIVATE "-nostdlib") elseif (PICO_C_COMPILER_IS_GNU) target_link_options(${NAME} PRIVATE "--specs=nosys.specs") target_link_options(${NAME} PRIVATE "-nostartfiles") endif () # boot2_helpers include dir target_include_directories(${NAME} PRIVATE ${PICO_BOOT_STAGE2_DIR}/asminclude) target_link_libraries(${NAME} hardware_regs boot_stage2_headers) target_link_options(${NAME} PRIVATE "LINKER:--script=${PICO_BOOT_STAGE2_DIR}/boot_stage2.ld") set_target_properties(${NAME} PROPERTIES LINK_DEPENDS ${PICO_BOOT_STAGE2_DIR}/boot_stage2.ld) pico_add_dis_output(${NAME}) pico_add_map_output(${NAME}) set(ORIGINAL_BIN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.bin) set(PADDED_CHECKSUMMED_ASM ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_padded_checksummed.S) find_package (Python3 REQUIRED COMPONENTS Interpreter) add_custom_target(${NAME}_bin DEPENDS ${ORIGINAL_BIN}) add_custom_command(OUTPUT ${ORIGINAL_BIN} DEPENDS ${NAME} COMMAND ${CMAKE_OBJCOPY} -Obinary $ ${ORIGINAL_BIN} VERBATIM) add_custom_target(${NAME}_padded_checksummed_asm DEPENDS ${PADDED_CHECKSUMMED_ASM}) add_custom_command(OUTPUT ${PADDED_CHECKSUMMED_ASM} DEPENDS ${ORIGINAL_BIN} COMMAND ${Python3_EXECUTABLE} ${PICO_BOOT_STAGE2_DIR}/pad_checksum -s 0xffffffff ${ORIGINAL_BIN} ${PADDED_CHECKSUMMED_ASM} VERBATIM) add_library(${NAME}_library INTERFACE) add_dependencies(${NAME}_library ${NAME}_padded_checksummed_asm) # not strictly (or indeed actually) a link library, but this avoids dependency cycle target_link_libraries(${NAME}_library INTERFACE ${PADDED_CHECKSUMMED_ASM}) target_link_libraries(${NAME}_library INTERFACE boot_stage2_headers) list(GET SOURCES 0 FIRST_SOURCE) get_filename_component(BOOT_STAGE2_BI_NAME ${FIRST_SOURCE} NAME_WE) # we only set the PICO_BUILD_STAGE2_NAME if it isn't 'compile_time_choice' if (NOT BOOT_STAGE2_BI_NAME STREQUAL PICO_BOOT_STAGE2_COMPILE_TIME_CHOICE_NAME) target_compile_definitions(${NAME} INTERFACE -DPICO_BUILD_BOOT_STAGE2_NAME="${BOOT_STAGE2_BI_NAME}") target_compile_definitions(${NAME}_library INTERFACE -DPICO_BUILD_BOOT_STAGE2_NAME="${BOOT_STAGE2_BI_NAME}") endif() endfunction() macro(pico_set_boot_stage2 TARGET NAME) get_target_property(target_type ${TARGET} TYPE) if ("EXECUTABLE" STREQUAL "${target_type}") set_target_properties(${TARGET} PROPERTIES PICO_TARGET_BOOT_STAGE2 "${NAME}") else() message(FATAL_ERROR "boot stage 2 implementation must be set on executable not library") endif() endmacro() pico_define_boot_stage2(bs2_default ${PICO_DEFAULT_BOOT_STAGE2_FILE}) # Create a new boot stage 2 target using the default implementation for the current build (PICO_BOARD derived) function(pico_clone_default_boot_stage2 NAME) pico_define_boot_stage2(${NAME} ${PICO_DEFAULT_BOOT_STAGE2_FILE}) endfunction() pico_promote_common_scope_vars() ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/asminclude/boot2_helpers/exit_from_boot2.S ================================================ /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _BOOT2_HELPER_EXIT_FROM_BOOT2 #define _BOOT2_HELPER_EXIT_FROM_BOOT2 #include "hardware/regs/m0plus.h" // If entered from the bootrom, lr (which we earlier pushed) will be 0, // and we vector through the table at the start of the main flash image. // Any regular function call will have a nonzero value for lr. check_return: pop {r0} cmp r0, #0 beq vector_into_flash bx r0 vector_into_flash: ldr r0, =(XIP_BASE + 0x100) ldr r1, =(PPB_BASE + M0PLUS_VTOR_OFFSET) str r0, [r1] ldmia r0, {r0, r1} msr msp, r0 bx r1 #endif ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/asminclude/boot2_helpers/read_flash_sreg.S ================================================ /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _BOOT2_HELPER_READ_FLASH_SREG #define _BOOT2_HELPER_READ_FLASH_SREG #include "boot2_helpers/wait_ssi_ready.S" // Pass status read cmd into r0. // Returns status value in r0. .global read_flash_sreg .type read_flash_sreg,%function .thumb_func read_flash_sreg: push {r1, lr} str r0, [r3, #SSI_DR0_OFFSET] // Dummy byte: str r0, [r3, #SSI_DR0_OFFSET] bl wait_ssi_ready // Discard first byte and combine the next two ldr r0, [r3, #SSI_DR0_OFFSET] ldr r0, [r3, #SSI_DR0_OFFSET] pop {r1, pc} #endif ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/asminclude/boot2_helpers/wait_ssi_ready.S ================================================ /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _BOOT2_HELPER_WAIT_SSI_READY #define _BOOT2_HELPER_WAIT_SSI_READY wait_ssi_ready: push {r0, r1, lr} // Command is complete when there is nothing left to send // (TX FIFO empty) and SSI is no longer busy (CSn deasserted) 1: ldr r1, [r3, #SSI_SR_OFFSET] movs r0, #SSI_SR_TFE_BITS tst r1, r0 beq 1b movs r0, #SSI_SR_BUSY_BITS tst r1, r0 bne 1b pop {r0, r1, pc} #endif ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/boot2_at25sf128a.S ================================================ // ---------------------------------------------------------------------------- // Second stage boot code // Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd. // SPDX-License-Identifier: BSD-3-Clause // // Device: Adesto AT25SF128A // Based on W25Q080 code: main difference is the QE bit is being set // via command 0x31 // // Description: Configures AT25SF128A to run in Quad I/O continuous read XIP mode // // Details: * Check status register 2 to determine if QSPI mode is enabled, // and perform an SR2 programming cycle if necessary. // * Use SSI to perform a dummy 0xEB read command, with the mode // continuation bits set, so that the flash will not require // 0xEB instruction prefix on subsequent reads. // * Configure SSI to write address, mode bits, but no instruction. // SSI + flash are now jointly in a state where continuous reads // can take place. // * Jump to exit pointer passed in via lr. Bootrom passes null, // in which case this code uses a default 256 byte flash offset // // Building: * This code must be position-independent, and use stack only // * The code will be padded to a size of 256 bytes, including a // 4-byte checksum. Therefore code size cannot exceed 252 bytes. // ---------------------------------------------------------------------------- #include "pico/asm_helper.S" #include "hardware/regs/addressmap.h" #include "hardware/regs/ssi.h" #include "hardware/regs/pads_qspi.h" // ---------------------------------------------------------------------------- // Config section // ---------------------------------------------------------------------------- // It should be possible to support most flash devices by modifying this section // The serial flash interface will run at clk_sys/PICO_FLASH_SPI_CLKDIV. // This must be a positive, even integer. // The bootrom is very conservative with SPI frequency, but here we should be // as aggressive as possible. #ifndef PICO_FLASH_SPI_CLKDIV #define PICO_FLASH_SPI_CLKDIV 4 #endif #if PICO_FLASH_SPI_CLKDIV & 1 #error PICO_FLASH_SPI_CLKDIV must be even #endif // Define interface width: single/dual/quad IO #define FRAME_FORMAT SSI_CTRLR0_SPI_FRF_VALUE_QUAD // For W25Q080 this is the "Read data fast quad IO" instruction: #define CMD_READ 0xeb // "Mode bits" are 8 special bits sent immediately after // the address bits in a "Read Data Fast Quad I/O" command sequence. // On W25Q080, the four LSBs are don't care, and if MSBs == 0xa, the // next read does not require the 0xeb instruction prefix. #define MODE_CONTINUOUS_READ 0x20 // The number of address + mode bits, divided by 4 (always 4, not function of // interface width). #define ADDR_L 8 // How many clocks of Hi-Z following the mode bits. For W25Q080, 4 dummy cycles // are required. #define WAIT_CYCLES 4 // If defined, we will read status reg, compare to SREG_DATA, and overwrite // with our value if the SR doesn't match. // We do a two-byte write to SR1 (01h cmd) rather than a one-byte write to // SR2 (31h cmd) as the latter command isn't supported by WX25Q080. // This isn't great because it will remove block protections. // A better solution is to use a volatile SR write if your device supports it. #define PROGRAM_STATUS_REG #define CMD_WRITE_ENABLE 0x06 #define CMD_READ_STATUS 0x05 #define CMD_READ_STATUS2 0x35 #define CMD_WRITE_STATUS 0x01 #define CMD_WRITE_STATUS2 0x31 #define SREG_DATA 0x02 // Enable quad-SPI mode // ---------------------------------------------------------------------------- // Start of 2nd Stage Boot Code // ---------------------------------------------------------------------------- pico_default_asm_setup .section .text // The exit point is passed in lr. If entered from bootrom, this will be the // flash address immediately following this second stage (0x10000100). // Otherwise it will be a return address -- second stage being called as a // function by user code, after copying out of XIP region. r3 holds SSI base, // r0...2 used as temporaries. Other GPRs not used. regular_func _stage2_boot push {lr} // Set pad configuration: // - SCLK 8mA drive, no slew limiting // - SDx disable input Schmitt to reduce delay ldr r3, =PADS_QSPI_BASE movs r0, #(2 << PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_LSB | PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_BITS) str r0, [r3, #PADS_QSPI_GPIO_QSPI_SCLK_OFFSET] ldr r0, [r3, #PADS_QSPI_GPIO_QSPI_SD0_OFFSET] movs r1, #PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_BITS bics r0, r1 str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD0_OFFSET] str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD1_OFFSET] str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD2_OFFSET] str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD3_OFFSET] ldr r3, =XIP_SSI_BASE // Disable SSI to allow further config movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] // Set baud rate movs r1, #PICO_FLASH_SPI_CLKDIV str r1, [r3, #SSI_BAUDR_OFFSET] // Set 1-cycle sample delay. If PICO_FLASH_SPI_CLKDIV == 2 then this means, // if the flash launches data on SCLK posedge, we capture it at the time that // the next SCLK posedge is launched. This is shortly before that posedge // arrives at the flash, so data hold time should be ok. For // PICO_FLASH_SPI_CLKDIV > 2 this pretty much has no effect. movs r1, #1 movs r2, #SSI_RX_SAMPLE_DLY_OFFSET // == 0xf0 so need 8 bits of offset significance str r1, [r3, r2] // On QSPI parts we usually need a 01h SR-write command to enable QSPI mode // (i.e. turn WPn and HOLDn into IO2/IO3) #ifdef PROGRAM_STATUS_REG program_sregs: #define CTRL0_SPI_TXRX \ (7 << SSI_CTRLR0_DFS_32_LSB) | /* 8 bits per data frame */ \ (SSI_CTRLR0_TMOD_VALUE_TX_AND_RX << SSI_CTRLR0_TMOD_LSB) ldr r1, =(CTRL0_SPI_TXRX) str r1, [r3, #SSI_CTRLR0_OFFSET] // Enable SSI and select slave 0 movs r1, #1 str r1, [r3, #SSI_SSIENR_OFFSET] // Check whether SR needs updating movs r0, #CMD_READ_STATUS2 bl read_flash_sreg movs r2, #SREG_DATA cmp r0, r2 beq skip_sreg_programming // Send write enable command movs r1, #CMD_WRITE_ENABLE str r1, [r3, #SSI_DR0_OFFSET] // Poll for completion and discard RX bl wait_ssi_ready ldr r1, [r3, #SSI_DR0_OFFSET] // Send status write command followed by data bytes movs r1, #CMD_WRITE_STATUS2 str r1, [r3, #SSI_DR0_OFFSET] str r2, [r3, #SSI_DR0_OFFSET] bl wait_ssi_ready ldr r1, [r3, #SSI_DR0_OFFSET] ldr r1, [r3, #SSI_DR0_OFFSET] ldr r1, [r3, #SSI_DR0_OFFSET] // Poll status register for write completion 1: movs r0, #CMD_READ_STATUS bl read_flash_sreg movs r1, #1 tst r0, r1 bne 1b skip_sreg_programming: // Disable SSI again so that it can be reconfigured movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] #endif // Currently the flash expects an 8 bit serial command prefix on every // transfer, which is a waste of cycles. Perform a dummy Fast Read Quad I/O // command, with mode bits set such that the flash will not expect a serial // command prefix on *subsequent* transfers. We don't care about the results // of the read, the important part is the mode bits. dummy_read: #define CTRLR0_ENTER_XIP \ (FRAME_FORMAT /* Quad I/O mode */ \ << SSI_CTRLR0_SPI_FRF_LSB) | \ (31 << SSI_CTRLR0_DFS_32_LSB) | /* 32 data bits */ \ (SSI_CTRLR0_TMOD_VALUE_EEPROM_READ /* Send INST/ADDR, Receive Data */ \ << SSI_CTRLR0_TMOD_LSB) ldr r1, =(CTRLR0_ENTER_XIP) str r1, [r3, #SSI_CTRLR0_OFFSET] movs r1, #0x0 // NDF=0 (single 32b read) str r1, [r3, #SSI_CTRLR1_OFFSET] #define SPI_CTRLR0_ENTER_XIP \ (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) | /* Address + mode bits */ \ (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z dummy clocks following address + mode */ \ (SSI_SPI_CTRLR0_INST_L_VALUE_8B \ << SSI_SPI_CTRLR0_INST_L_LSB) | /* 8-bit instruction */ \ (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C2A /* Send Command in serial mode then address in Quad I/O mode */ \ << SSI_SPI_CTRLR0_TRANS_TYPE_LSB) ldr r1, =(SPI_CTRLR0_ENTER_XIP) ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET) // SPI_CTRL0 Register str r1, [r0] movs r1, #1 // Re-enable SSI str r1, [r3, #SSI_SSIENR_OFFSET] movs r1, #CMD_READ str r1, [r3, #SSI_DR0_OFFSET] // Push SPI command into TX FIFO movs r1, #MODE_CONTINUOUS_READ // 32-bit: 24 address bits (we don't care, so 0) and M[7:4]=1010 str r1, [r3, #SSI_DR0_OFFSET] // Push Address into TX FIFO - this will trigger the transaction // Poll for completion bl wait_ssi_ready // The flash is in a state where we can blast addresses in parallel, and get // parallel data back. Now configure the SSI to translate XIP bus accesses // into QSPI transfers of this form. movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] // Disable SSI (and clear FIFO) to allow further config // Note that the INST_L field is used to select what XIP data gets pushed into // the TX FIFO: // INST_L_0_BITS {ADDR[23:0],XIP_CMD[7:0]} Load "mode bits" into XIP_CMD // Anything else {XIP_CMD[7:0],ADDR[23:0]} Load SPI command into XIP_CMD configure_ssi: #define SPI_CTRLR0_XIP \ (MODE_CONTINUOUS_READ /* Mode bits to keep flash in continuous read mode */ \ << SSI_SPI_CTRLR0_XIP_CMD_LSB) | \ (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) | /* Total number of address + mode bits */ \ (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z dummy clocks following address + mode */ \ (SSI_SPI_CTRLR0_INST_L_VALUE_NONE /* Do not send a command, instead send XIP_CMD as mode bits after address */ \ << SSI_SPI_CTRLR0_INST_L_LSB) | \ (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_2C2A /* Send Address in Quad I/O mode (and Command but that is zero bits long) */ \ << SSI_SPI_CTRLR0_TRANS_TYPE_LSB) ldr r1, =(SPI_CTRLR0_XIP) ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET) str r1, [r0] movs r1, #1 str r1, [r3, #SSI_SSIENR_OFFSET] // Re-enable SSI // Bus accesses to the XIP window will now be transparently serviced by the // external flash on cache miss. We are ready to run code from flash. // Pull in standard exit routine #include "boot2_helpers/exit_from_boot2.S" // Common functions #include "boot2_helpers/wait_ssi_ready.S" #ifdef PROGRAM_STATUS_REG #include "boot2_helpers/read_flash_sreg.S" #endif .global literals literals: .ltorg .end ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/boot2_generic_03h.S ================================================ // ---------------------------------------------------------------------------- // Second stage boot code // Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd. // SPDX-License-Identifier: BSD-3-Clause // // Device: Anything which responds to 03h serial read command // // Details: * Configure SSI to translate each APB read into a 03h command // * 8 command clocks, 24 address clocks and 32 data clocks // * This enables you to boot from almost anything: you can pretty // much solder a potato to your PCB, or a piece of cheese // * The tradeoff is performance around 3x worse than QSPI XIP // // Building: * This code must be position-independent, and use stack only // * The code will be padded to a size of 256 bytes, including a // 4-byte checksum. Therefore code size cannot exceed 252 bytes. // ---------------------------------------------------------------------------- #include "pico/asm_helper.S" #include "hardware/regs/addressmap.h" #include "hardware/regs/ssi.h" pico_default_asm_setup // ---------------------------------------------------------------------------- // Config section // ---------------------------------------------------------------------------- // It should be possible to support most flash devices by modifying this section // The serial flash interface will run at clk_sys/PICO_FLASH_SPI_CLKDIV. // This must be a positive, even integer. // The bootrom is very conservative with SPI frequency, but here we should be // as aggressive as possible. #ifndef PICO_FLASH_SPI_CLKDIV #define PICO_FLASH_SPI_CLKDIV 4 #endif #define CMD_READ 0x03 // Value is number of address bits divided by 4 #define ADDR_L 6 #define CTRLR0_XIP \ (SSI_CTRLR0_SPI_FRF_VALUE_STD << SSI_CTRLR0_SPI_FRF_LSB) | /* Standard 1-bit SPI serial frames */ \ (31 << SSI_CTRLR0_DFS_32_LSB) | /* 32 clocks per data frame */ \ (SSI_CTRLR0_TMOD_VALUE_EEPROM_READ << SSI_CTRLR0_TMOD_LSB) /* Send instr + addr, receive data */ #define SPI_CTRLR0_XIP \ (CMD_READ << SSI_SPI_CTRLR0_XIP_CMD_LSB) | /* Value of instruction prefix */ \ (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) | /* Total number of address + mode bits */ \ (2 << SSI_SPI_CTRLR0_INST_L_LSB) | /* 8 bit command prefix (field value is bits divided by 4) */ \ (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C1A << SSI_SPI_CTRLR0_TRANS_TYPE_LSB) /* command and address both in serial format */ // ---------------------------------------------------------------------------- // Start of 2nd Stage Boot Code // ---------------------------------------------------------------------------- .section .text regular_func _stage2_boot push {lr} ldr r3, =XIP_SSI_BASE // Use as base address where possible // Disable SSI to allow further config movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] // Set baud rate movs r1, #PICO_FLASH_SPI_CLKDIV str r1, [r3, #SSI_BAUDR_OFFSET] ldr r1, =(CTRLR0_XIP) str r1, [r3, #SSI_CTRLR0_OFFSET] ldr r1, =(SPI_CTRLR0_XIP) ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET) str r1, [r0] // NDF=0 (single 32b read) movs r1, #0x0 str r1, [r3, #SSI_CTRLR1_OFFSET] // Re-enable SSI movs r1, #1 str r1, [r3, #SSI_SSIENR_OFFSET] // We are now in XIP mode. Any bus accesses to the XIP address window will be // translated by the SSI into 03h read commands to the external flash (if cache is missed), // and the data will be returned to the bus. // Pull in standard exit routine #include "boot2_helpers/exit_from_boot2.S" .global literals literals: .ltorg .end ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/boot2_is25lp080.S ================================================ // ---------------------------------------------------------------------------- // Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd. // SPDX-License-Identifier: BSD-3-Clause // // Device: ISSI IS25LP080D // Based on W25Q080 code: main difference is the QE bit being in // SR1 instead of SR2. // // Description: Configures IS25LP080D to run in Quad I/O continuous read XIP mode // // Details: * Check status register to determine if QSPI mode is enabled, // and perform an SR programming cycle if necessary. // * Use SSI to perform a dummy 0xEB read command, with the mode // continuation bits set, so that the flash will not require // 0xEB instruction prefix on subsequent reads. // * Configure SSI to write address, mode bits, but no instruction. // SSI + flash are now jointly in a state where continuous reads // can take place. // * Set VTOR = 0x10000100 (user vector table immediately after // this boot2 image). // * Read stack pointer (MSP) and reset vector from the flash // vector table; set SP and jump, as though the processor had // booted directly from flash. // // Building: * This code must be linked to run at 0x20027f00 // * The code will be padded to a size of 256 bytes, including a // 4-byte checksum. Therefore code size cannot exceed 252 bytes. // ---------------------------------------------------------------------------- #include "pico/asm_helper.S" #include "hardware/regs/addressmap.h" #include "hardware/regs/ssi.h" // ---------------------------------------------------------------------------- // Config section // ---------------------------------------------------------------------------- // It should be possible to support most flash devices by modifying this section // The serial flash interface will run at clk_sys/PICO_FLASH_SPI_CLKDIV. // This must be a positive, even integer. // The bootrom is very conservative with SPI frequency, but here we should be // as aggressive as possible. #ifndef PICO_FLASH_SPI_CLKDIV #define PICO_FLASH_SPI_CLKDIV 4 #endif // Define interface width: single/dual/quad IO #define FRAME_FORMAT SSI_CTRLR0_SPI_FRF_VALUE_QUAD // For W25Q080 this is the "Read data fast quad IO" instruction: #define CMD_READ 0xeb // "Mode bits" are 8 special bits sent immediately after // the address bits in a "Read Data Fast Quad I/O" command sequence. // On W25Q080, the four LSBs are don't care, and if MSBs == 0xa, the // next read does not require the 0xeb instruction prefix. #define MODE_CONTINUOUS_READ 0xa0 // The number of address + mode bits, divided by 4 (always 4, not function of // interface width). #define ADDR_L 8 // How many clocks of Hi-Z following the mode bits. For W25Q080, 4 dummy cycles // are required. #define WAIT_CYCLES 4 // If defined, we will read status reg, compare to SREG_DATA, and overwrite // with our value if the SR doesn't match. // This isn't great because it will remove block protections. // A better solution is to use a volatile SR write if your device supports it. #define PROGRAM_STATUS_REG #define CMD_WRITE_ENABLE 0x06 #define CMD_READ_STATUS 0x05 #define CMD_WRITE_STATUS 0x01 #define SREG_DATA 0x40 // Enable quad-SPI mode // ---------------------------------------------------------------------------- // Start of 2nd Stage Boot Code // ---------------------------------------------------------------------------- pico_default_asm_setup .section text regular_func _stage2_boot push {lr} ldr r3, =XIP_SSI_BASE // Use as base address where possible // Disable SSI to allow further config movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] // Set baud rate movs r1, #PICO_FLASH_SPI_CLKDIV str r1, [r3, #SSI_BAUDR_OFFSET] // On QSPI parts we usually need a 01h SR-write command to enable QSPI mode // (i.e. turn WPn and HOLDn into IO2/IO3) #ifdef PROGRAM_STATUS_REG program_sregs: #define CTRL0_SPI_TXRX \ (7 << SSI_CTRLR0_DFS_32_LSB) | /* 8 bits per data frame */ \ (SSI_CTRLR0_TMOD_VALUE_TX_AND_RX << SSI_CTRLR0_TMOD_LSB) ldr r1, =(CTRL0_SPI_TXRX) str r1, [r3, #SSI_CTRLR0_OFFSET] // Enable SSI and select slave 0 movs r1, #1 str r1, [r3, #SSI_SSIENR_OFFSET] // Check whether SR needs updating ldr r0, =CMD_READ_STATUS bl read_flash_sreg ldr r2, =SREG_DATA cmp r0, r2 beq skip_sreg_programming // Send write enable command movs r1, #CMD_WRITE_ENABLE str r1, [r3, #SSI_DR0_OFFSET] // Poll for completion and discard RX bl wait_ssi_ready ldr r1, [r3, #SSI_DR0_OFFSET] // Send status write command followed by data bytes movs r1, #CMD_WRITE_STATUS str r1, [r3, #SSI_DR0_OFFSET] movs r0, #0 str r2, [r3, #SSI_DR0_OFFSET] bl wait_ssi_ready ldr r1, [r3, #SSI_DR0_OFFSET] ldr r1, [r3, #SSI_DR0_OFFSET] // Poll status register for write completion 1: ldr r0, =CMD_READ_STATUS bl read_flash_sreg movs r1, #1 tst r0, r1 bne 1b skip_sreg_programming: // Send a 0xA3 high-performance-mode instruction // ldr r1, =0xa3 // str r1, [r3, #SSI_DR0_OFFSET] // bl wait_ssi_ready // Disable SSI again so that it can be reconfigured movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] #endif // First we need to send the initial command to get us in to Fast Read Quad I/O // mode. As this transaction requires a command, we can't send it in XIP mode. // To enter Continuous Read mode as well we need to append 4'b0010 to the address // bits and then add a further 4 don't care bits. We will construct this by // specifying a 28-bit address, with the least significant bits being 4'b0010. // This is just a dummy transaction so we'll perform a read from address zero // and then discard what comes back. All we really care about is that at the // end of the transaction, the flash device is in Continuous Read mode // and from then on will only expect to receive addresses. dummy_read: #define CTRLR0_ENTER_XIP \ (FRAME_FORMAT /* Quad I/O mode */ \ << SSI_CTRLR0_SPI_FRF_LSB) | \ (31 << SSI_CTRLR0_DFS_32_LSB) | /* 32 data bits */ \ (SSI_CTRLR0_TMOD_VALUE_EEPROM_READ /* Send INST/ADDR, Receive Data */ \ << SSI_CTRLR0_TMOD_LSB) ldr r1, =(CTRLR0_ENTER_XIP) str r1, [r3, #SSI_CTRLR0_OFFSET] movs r1, #0x0 // NDF=0 (single 32b read) str r1, [r3, #SSI_CTRLR1_OFFSET] #define SPI_CTRLR0_ENTER_XIP \ (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) | /* Address + mode bits */ \ (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z dummy clocks following address + mode */ \ (SSI_SPI_CTRLR0_INST_L_VALUE_8B \ << SSI_SPI_CTRLR0_INST_L_LSB) | /* 8-bit instruction */ \ (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C2A /* Send Command in serial mode then address in Quad I/O mode */ \ << SSI_SPI_CTRLR0_TRANS_TYPE_LSB) ldr r1, =(SPI_CTRLR0_ENTER_XIP) ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET) // SPI_CTRL0 Register str r1, [r0] movs r1, #1 // Re-enable SSI str r1, [r3, #SSI_SSIENR_OFFSET] movs r1, #CMD_READ str r1, [r3, #SSI_DR0_OFFSET] // Push SPI command into TX FIFO movs r1, #MODE_CONTINUOUS_READ // 32-bit: 24 address bits (we don't care, so 0) and M[7:4]=1010 str r1, [r3, #SSI_DR0_OFFSET] // Push Address into TX FIFO - this will trigger the transaction // Poll for completion bl wait_ssi_ready // At this point CN# will be deasserted and the SPI clock will not be running. // The Winbond WX25X10CL device will be in continuous read, dual I/O mode and // only expecting address bits after the next CN# assertion. So long as we // send 4'b0010 (and 4 more dummy HiZ bits) after every subsequent 24b address // then the Winbond device will remain in continuous read mode. This is the // ideal mode for Execute-In-Place. // (If we want to exit continuous read mode then we will need to switch back // to APM mode and generate a 28-bit address phase with the extra nibble set // to 4'b0000). movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] // Disable SSI (and clear FIFO) to allow further config // Note that the INST_L field is used to select what XIP data gets pushed into // the TX FIFO: // INST_L_0_BITS {ADDR[23:0],XIP_CMD[7:0]} Load "mode bits" into XIP_CMD // Anything else {XIP_CMD[7:0],ADDR[23:0]} Load SPI command into XIP_CMD configure_ssi: #define SPI_CTRLR0_XIP \ (MODE_CONTINUOUS_READ /* Mode bits to keep flash in continuous read mode */ \ << SSI_SPI_CTRLR0_XIP_CMD_LSB) | \ (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) | /* Total number of address + mode bits */ \ (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z dummy clocks following address + mode */ \ (SSI_SPI_CTRLR0_INST_L_VALUE_NONE /* Do not send a command, instead send XIP_CMD as mode bits after address */ \ << SSI_SPI_CTRLR0_INST_L_LSB) | \ (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_2C2A /* Send Address in Quad I/O mode (and Command but that is zero bits long) */ \ << SSI_SPI_CTRLR0_TRANS_TYPE_LSB) ldr r1, =(SPI_CTRLR0_XIP) ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET) str r1, [r0] movs r1, #1 str r1, [r3, #SSI_SSIENR_OFFSET] // Re-enable SSI // We are now in XIP mode, with all transactions using Dual I/O and only // needing to send 24-bit addresses (plus mode bits) for each read transaction. // Pull in standard exit routine #include "boot2_helpers/exit_from_boot2.S" // Common functions #include "boot2_helpers/wait_ssi_ready.S" #ifdef PROGRAM_STATUS_REG #include "boot2_helpers/read_flash_sreg.S" #endif .global literals literals: .ltorg .end ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/boot2_usb_blinky.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" // Stub second stage which calls into USB bootcode, with parameters. // USB boot takes two parameters: // - A GPIO mask for activity LED -- if mask is 0, don't touch GPIOs at all // - A mask of interfaces to disable. Bit 0 disables MSC, bit 1 disables PICOBoot // The bootrom passes 0 for both of these parameters, but user code (or this // second stage) can pass anything. #define USB_BOOT_MSD_AND_PICOBOOT 0x0 #define USB_BOOT_MSD_ONLY 0x2 #define USB_BOOT_PICOBOOT_ONLY 0x1 // Config #define ACTIVITY_LED 0 #define BOOT_MODE USB_BOOT_MSD_AND_PICOBOOT pico_default_asm_setup .section .text regular_func _stage2_boot movs r7, #0x14 // Pointer to _well_known pointer table in ROM ldrh r0, [r7, #0] // Offset 0 is 16 bit pointer to function table ldrh r7, [r7, #4] // Offset 4 is 16 bit pointer to table lookup routine ldr r1, =('U' | ('B' << 8)) // Symbol for USB Boot blx r7 cmp r0, #0 beq dead mov r7, r0 ldr r0, =(1u << ACTIVITY_LED) // Mask of which GPIO (or GPIOs) to use movs r1, #BOOT_MODE blx r7 dead: wfi b dead .global literals literals: .ltorg .end ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/boot2_w25q080.S ================================================ // ---------------------------------------------------------------------------- // Second stage boot code // Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd. // SPDX-License-Identifier: BSD-3-Clause // // Device: Winbond W25Q080 // Also supports W25Q16JV (which has some different SR instructions) // Also supports AT25SF081 // Also supports S25FL132K0 // // Description: Configures W25Q080 to run in Quad I/O continuous read XIP mode // // Details: * Check status register 2 to determine if QSPI mode is enabled, // and perform an SR2 programming cycle if necessary. // * Use SSI to perform a dummy 0xEB read command, with the mode // continuation bits set, so that the flash will not require // 0xEB instruction prefix on subsequent reads. // * Configure SSI to write address, mode bits, but no instruction. // SSI + flash are now jointly in a state where continuous reads // can take place. // * Jump to exit pointer passed in via lr. Bootrom passes null, // in which case this code uses a default 256 byte flash offset // // Building: * This code must be position-independent, and use stack only // * The code will be padded to a size of 256 bytes, including a // 4-byte checksum. Therefore code size cannot exceed 252 bytes. // ---------------------------------------------------------------------------- #include "pico/asm_helper.S" #include "hardware/regs/addressmap.h" #include "hardware/regs/ssi.h" #include "hardware/regs/pads_qspi.h" // ---------------------------------------------------------------------------- // Config section // ---------------------------------------------------------------------------- // It should be possible to support most flash devices by modifying this section // The serial flash interface will run at clk_sys/PICO_FLASH_SPI_CLKDIV. // This must be a positive, even integer. // The bootrom is very conservative with SPI frequency, but here we should be // as aggressive as possible. #ifndef PICO_FLASH_SPI_CLKDIV #define PICO_FLASH_SPI_CLKDIV 4 #endif #if PICO_FLASH_SPI_CLKDIV & 1 #error PICO_FLASH_SPI_CLKDIV must be even #endif // Define interface width: single/dual/quad IO #define FRAME_FORMAT SSI_CTRLR0_SPI_FRF_VALUE_QUAD // For W25Q080 this is the "Read data fast quad IO" instruction: #define CMD_READ 0xeb // "Mode bits" are 8 special bits sent immediately after // the address bits in a "Read Data Fast Quad I/O" command sequence. // On W25Q080, the four LSBs are don't care, and if MSBs == 0xa, the // next read does not require the 0xeb instruction prefix. #define MODE_CONTINUOUS_READ 0xa0 // The number of address + mode bits, divided by 4 (always 4, not function of // interface width). #define ADDR_L 8 // How many clocks of Hi-Z following the mode bits. For W25Q080, 4 dummy cycles // are required. #define WAIT_CYCLES 4 // If defined, we will read status reg, compare to SREG_DATA, and overwrite // with our value if the SR doesn't match. // We do a two-byte write to SR1 (01h cmd) rather than a one-byte write to // SR2 (31h cmd) as the latter command isn't supported by WX25Q080. // This isn't great because it will remove block protections. // A better solution is to use a volatile SR write if your device supports it. #define PROGRAM_STATUS_REG #define CMD_WRITE_ENABLE 0x06 #define CMD_READ_STATUS 0x05 #define CMD_READ_STATUS2 0x35 #define CMD_WRITE_STATUS 0x01 #define SREG_DATA 0x02 // Enable quad-SPI mode // ---------------------------------------------------------------------------- // Start of 2nd Stage Boot Code // ---------------------------------------------------------------------------- pico_default_asm_setup .section .text // The exit point is passed in lr. If entered from bootrom, this will be the // flash address immediately following this second stage (0x10000100). // Otherwise it will be a return address -- second stage being called as a // function by user code, after copying out of XIP region. r3 holds SSI base, // r0...2 used as temporaries. Other GPRs not used. regular_func _stage2_boot push {lr} // Set pad configuration: // - SCLK 8mA drive, no slew limiting // - SDx disable input Schmitt to reduce delay ldr r3, =PADS_QSPI_BASE movs r0, #(2 << PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_LSB | PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_BITS) str r0, [r3, #PADS_QSPI_GPIO_QSPI_SCLK_OFFSET] ldr r0, [r3, #PADS_QSPI_GPIO_QSPI_SD0_OFFSET] movs r1, #PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_BITS bics r0, r1 str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD0_OFFSET] str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD1_OFFSET] str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD2_OFFSET] str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD3_OFFSET] ldr r3, =XIP_SSI_BASE // Disable SSI to allow further config movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] // Set baud rate movs r1, #PICO_FLASH_SPI_CLKDIV str r1, [r3, #SSI_BAUDR_OFFSET] // Set 1-cycle sample delay. If PICO_FLASH_SPI_CLKDIV == 2 then this means, // if the flash launches data on SCLK posedge, we capture it at the time that // the next SCLK posedge is launched. This is shortly before that posedge // arrives at the flash, so data hold time should be ok. For // PICO_FLASH_SPI_CLKDIV > 2 this pretty much has no effect. movs r1, #1 movs r2, #SSI_RX_SAMPLE_DLY_OFFSET // == 0xf0 so need 8 bits of offset significance str r1, [r3, r2] // On QSPI parts we usually need a 01h SR-write command to enable QSPI mode // (i.e. turn WPn and HOLDn into IO2/IO3) #ifdef PROGRAM_STATUS_REG program_sregs: #define CTRL0_SPI_TXRX \ (7 << SSI_CTRLR0_DFS_32_LSB) | /* 8 bits per data frame */ \ (SSI_CTRLR0_TMOD_VALUE_TX_AND_RX << SSI_CTRLR0_TMOD_LSB) ldr r1, =(CTRL0_SPI_TXRX) str r1, [r3, #SSI_CTRLR0_OFFSET] // Enable SSI and select slave 0 movs r1, #1 str r1, [r3, #SSI_SSIENR_OFFSET] // Check whether SR needs updating movs r0, #CMD_READ_STATUS2 bl read_flash_sreg movs r2, #SREG_DATA cmp r0, r2 beq skip_sreg_programming // Send write enable command movs r1, #CMD_WRITE_ENABLE str r1, [r3, #SSI_DR0_OFFSET] // Poll for completion and discard RX bl wait_ssi_ready ldr r1, [r3, #SSI_DR0_OFFSET] // Send status write command followed by data bytes movs r1, #CMD_WRITE_STATUS str r1, [r3, #SSI_DR0_OFFSET] movs r0, #0 str r0, [r3, #SSI_DR0_OFFSET] str r2, [r3, #SSI_DR0_OFFSET] bl wait_ssi_ready ldr r1, [r3, #SSI_DR0_OFFSET] ldr r1, [r3, #SSI_DR0_OFFSET] ldr r1, [r3, #SSI_DR0_OFFSET] // Poll status register for write completion 1: movs r0, #CMD_READ_STATUS bl read_flash_sreg movs r1, #1 tst r0, r1 bne 1b skip_sreg_programming: // Disable SSI again so that it can be reconfigured movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] #endif // Currently the flash expects an 8 bit serial command prefix on every // transfer, which is a waste of cycles. Perform a dummy Fast Read Quad I/O // command, with mode bits set such that the flash will not expect a serial // command prefix on *subsequent* transfers. We don't care about the results // of the read, the important part is the mode bits. dummy_read: #define CTRLR0_ENTER_XIP \ (FRAME_FORMAT /* Quad I/O mode */ \ << SSI_CTRLR0_SPI_FRF_LSB) | \ (31 << SSI_CTRLR0_DFS_32_LSB) | /* 32 data bits */ \ (SSI_CTRLR0_TMOD_VALUE_EEPROM_READ /* Send INST/ADDR, Receive Data */ \ << SSI_CTRLR0_TMOD_LSB) ldr r1, =(CTRLR0_ENTER_XIP) str r1, [r3, #SSI_CTRLR0_OFFSET] movs r1, #0x0 // NDF=0 (single 32b read) str r1, [r3, #SSI_CTRLR1_OFFSET] #define SPI_CTRLR0_ENTER_XIP \ (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) | /* Address + mode bits */ \ (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z dummy clocks following address + mode */ \ (SSI_SPI_CTRLR0_INST_L_VALUE_8B \ << SSI_SPI_CTRLR0_INST_L_LSB) | /* 8-bit instruction */ \ (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C2A /* Send Command in serial mode then address in Quad I/O mode */ \ << SSI_SPI_CTRLR0_TRANS_TYPE_LSB) ldr r1, =(SPI_CTRLR0_ENTER_XIP) ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET) // SPI_CTRL0 Register str r1, [r0] movs r1, #1 // Re-enable SSI str r1, [r3, #SSI_SSIENR_OFFSET] movs r1, #CMD_READ str r1, [r3, #SSI_DR0_OFFSET] // Push SPI command into TX FIFO movs r1, #MODE_CONTINUOUS_READ // 32-bit: 24 address bits (we don't care, so 0) and M[7:4]=1010 str r1, [r3, #SSI_DR0_OFFSET] // Push Address into TX FIFO - this will trigger the transaction // Poll for completion bl wait_ssi_ready // The flash is in a state where we can blast addresses in parallel, and get // parallel data back. Now configure the SSI to translate XIP bus accesses // into QSPI transfers of this form. movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] // Disable SSI (and clear FIFO) to allow further config // Note that the INST_L field is used to select what XIP data gets pushed into // the TX FIFO: // INST_L_0_BITS {ADDR[23:0],XIP_CMD[7:0]} Load "mode bits" into XIP_CMD // Anything else {XIP_CMD[7:0],ADDR[23:0]} Load SPI command into XIP_CMD configure_ssi: #define SPI_CTRLR0_XIP \ (MODE_CONTINUOUS_READ /* Mode bits to keep flash in continuous read mode */ \ << SSI_SPI_CTRLR0_XIP_CMD_LSB) | \ (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) | /* Total number of address + mode bits */ \ (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z dummy clocks following address + mode */ \ (SSI_SPI_CTRLR0_INST_L_VALUE_NONE /* Do not send a command, instead send XIP_CMD as mode bits after address */ \ << SSI_SPI_CTRLR0_INST_L_LSB) | \ (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_2C2A /* Send Address in Quad I/O mode (and Command but that is zero bits long) */ \ << SSI_SPI_CTRLR0_TRANS_TYPE_LSB) ldr r1, =(SPI_CTRLR0_XIP) ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET) str r1, [r0] movs r1, #1 str r1, [r3, #SSI_SSIENR_OFFSET] // Re-enable SSI // Bus accesses to the XIP window will now be transparently serviced by the // external flash on cache miss. We are ready to run code from flash. // Pull in standard exit routine #include "boot2_helpers/exit_from_boot2.S" // Common functions #include "boot2_helpers/wait_ssi_ready.S" #ifdef PROGRAM_STATUS_REG #include "boot2_helpers/read_flash_sreg.S" #endif .global literals literals: .ltorg .end ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/boot2_w25x10cl.S ================================================ // ---------------------------------------------------------------------------- // Second stage boot code // Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd. // SPDX-License-Identifier: BSD-3-Clause // // Device: Winbond W25X10CL // // Description: Configures W25X10CL to run in Dual I/O continuous read XIP mode // // Details: * Disable SSI // * Configure SSI to generate 8b command + 28b address + 2 wait, // with address and data using dual SPI mode // * Enable SSI // * Generate dummy read with command = 0xBB, top 24b of address // of 0x000000 followed by M[7:0]=0010zzzz (with the HiZ being // generated by 2 wait cycles). This leaves the W25X10CL in // continuous read mode // * Disable SSI // * Configure SSI to generate 0b command + 28b address + 2 wait, // with the extra 4 bits of address LSB being 0x2 to keep the // W25X10CL in continuous read mode forever // * Enable SSI // * Set VTOR = 0x10000100 // * Read MSP reset vector from 0x10000100 and write to MSP (this // will also enable XIP mode in the SSI wrapper) // * Read PC reset vector from 0x10000104 and jump to it // // Building: * This code must be linked to run at 0x20000000 // * The code will be padded to a size of 256 bytes, including a // 4-byte checksum. Therefore code size cannot exceed 252 bytes. // ---------------------------------------------------------------------------- #include "pico/asm_helper.S" #include "hardware/regs/addressmap.h" #include "hardware/regs/ssi.h" // The serial flash interface will run at clk_sys/PICO_FLASH_SPI_CLKDIV. // This must be an even number. #ifndef PICO_FLASH_SPI_CLKDIV #define PICO_FLASH_SPI_CLKDIV 4 #endif pico_default_asm_setup // ---------------------------------------------------------------------------- // The "System Control Block" is a set of internal Cortex-M0+ control registers // that are memory mapped and accessed like any other H/W register. They have // fixed addresses in the address map of every Cortex-M0+ system. // ---------------------------------------------------------------------------- .equ SCB_VTOR, 0xE000ED08 // RW Vector Table Offset Register // ---------------------------------------------------------------------------- // Winbond W25X10CL Supported Commands // Taken from "w25x10cl_reg_021714.pdf" // ---------------------------------------------------------------------------- .equ W25X10CL_CMD_READ_DATA_FAST_DUAL_IO, 0xbb // ---------------------------------------------------------------------------- // Winbond W25X10CL "Mode bits" are 8 special bits sent immediately after // the address bits in a "Read Data Fast Dual I/O" command sequence. // Of M[7:4], they say M[7:6] are reserved (set to zero), and bits M[3:0] // are don't care (we HiZ). Only M[5:4] are used, and they must be set // to M[5:4] = 2'b10 to enable continuous read mode. // ---------------------------------------------------------------------------- .equ W25X10CL_MODE_CONTINUOUS_READ, 0x20 // ---------------------------------------------------------------------------- // Start of 2nd Stage Boot Code // ---------------------------------------------------------------------------- .org 0 .section .text // This code will get copied to 0x20000000 and then executed regular_func _stage2_boot push {lr} ldr r3, =XIP_SSI_BASE // Use as base address where possible // We are primarily interested in setting up Flash for DSPI XIP w/ continuous read movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] // Disable SSI to allow further config // The Boot ROM sets a very conservative SPI clock frequency to be sure it can // read the initial 256 bytes from any device. Here we can be more aggressive. movs r1, #PICO_FLASH_SPI_CLKDIV str r1, [r3, #SSI_BAUDR_OFFSET] // Set SSI Clock // First we need to send the initial command to get us in to Fast Read Dual I/O // mode. As this transaction requires a command, we can't send it in XIP mode. // To enter Continuous Read mode as well we need to append 4'b0010 to the address // bits and then add a further 4 don't care bits. We will construct this by // specifying a 28-bit address, with the least significant bits being 4'b0010. // This is just a dummy transaction so we'll perform a read from address zero // and then discard what comes back. All we really care about is that at the // end of the transaction, the Winbond W25X10CL device is in Continuous Read mode // and from then on will only expect to receive addresses. #define CTRLR0_ENTER_XIP \ (SSI_CTRLR0_SPI_FRF_VALUE_DUAL /* Dual I/O mode */ \ << SSI_CTRLR0_SPI_FRF_LSB) | \ (31 << SSI_CTRLR0_DFS_32_LSB) | /* 32 data bits */ \ (SSI_CTRLR0_TMOD_VALUE_EEPROM_READ /* Send INST/ADDR, Receive Data */ \ << SSI_CTRLR0_TMOD_LSB) ldr r1, =(CTRLR0_ENTER_XIP) str r1, [r3, #SSI_CTRLR0_OFFSET] movs r1, #0x0 // NDF=0 (single 32b read) str r1, [r3, #SSI_CTRLR1_OFFSET] #define SPI_CTRLR0_ENTER_XIP \ (7 << SSI_SPI_CTRLR0_ADDR_L_LSB) | /* Send 28 bits (24 address + 4 mode) */ \ (2 << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z the other 4 mode bits (2 cycles @ dual I/O = 4 bits) */ \ (SSI_SPI_CTRLR0_INST_L_VALUE_8B \ << SSI_SPI_CTRLR0_INST_L_LSB) | /* 8-bit instruction */ \ (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C2A /* Send Command in serial mode then address in Dual I/O mode */ \ << SSI_SPI_CTRLR0_TRANS_TYPE_LSB) ldr r1, =(SPI_CTRLR0_ENTER_XIP) ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET) // SPI_CTRL0 Register str r1, [r0] movs r1, #1 // Re-enable SSI str r1, [r3, #SSI_SSIENR_OFFSET] movs r1, #W25X10CL_CMD_READ_DATA_FAST_DUAL_IO // 8b command = 0xBB str r1, [r3, #SSI_DR0_OFFSET] // Push SPI command into TX FIFO movs r1, #0x0000002 // 28-bit Address for dummy read = 0x000000 + 0x2 Mode bits to set M[5:4]=10 str r1, [r3, #SSI_DR0_OFFSET] // Push Address into TX FIFO - this will trigger the transaction // Now we wait for the read transaction to complete by monitoring the SSI // status register and checking for the "RX FIFO Not Empty" flag to assert. movs r1, #SSI_SR_RFNE_BITS 00: ldr r0, [r3, #SSI_SR_OFFSET] // Read status register tst r0, r1 // RFNE status flag set? beq 00b // If not then wait // At this point CN# will be deasserted and the SPI clock will not be running. // The Winbond WX25X10CL device will be in continuous read, dual I/O mode and // only expecting address bits after the next CN# assertion. So long as we // send 4'b0010 (and 4 more dummy HiZ bits) after every subsequent 24b address // then the Winbond device will remain in continuous read mode. This is the // ideal mode for Execute-In-Place. // (If we want to exit continuous read mode then we will need to switch back // to APM mode and generate a 28-bit address phase with the extra nibble set // to 4'b0000). movs r1, #0 str r1, [r3, #SSI_SSIENR_OFFSET] // Disable SSI (and clear FIFO) to allow further config // Note that the INST_L field is used to select what XIP data gets pushed into // the TX FIFO: // INST_L_0_BITS {ADDR[23:0],XIP_CMD[7:0]} Load "mode bits" into XIP_CMD // Anything else {XIP_CMD[7:0],ADDR[23:0]} Load SPI command into XIP_CMD #define SPI_CTRLR0_XIP \ (W25X10CL_MODE_CONTINUOUS_READ /* Mode bits to keep Winbond in continuous read mode */ \ << SSI_SPI_CTRLR0_XIP_CMD_LSB) | \ (7 << SSI_SPI_CTRLR0_ADDR_L_LSB) | /* Send 28 bits (24 address + 4 mode) */ \ (2 << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z the other 4 mode bits (2 cycles @ dual I/O = 4 bits) */ \ (SSI_SPI_CTRLR0_INST_L_VALUE_NONE /* Do not send a command, instead send XIP_CMD as mode bits after address */ \ << SSI_SPI_CTRLR0_INST_L_LSB) | \ (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_2C2A /* Send Address in Dual I/O mode (and Command but that is zero bits long) */ \ << SSI_SPI_CTRLR0_TRANS_TYPE_LSB) ldr r1, =(SPI_CTRLR0_XIP) ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET) str r1, [r0] movs r1, #1 str r1, [r3, #SSI_SSIENR_OFFSET] // Re-enable SSI // We are now in XIP mode, with all transactions using Dual I/O and only // needing to send 24-bit addresses (plus mode bits) for each read transaction. // Pull in standard exit routine #include "boot2_helpers/exit_from_boot2.S" .global literals literals: .ltorg .end ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/boot_stage2.ld ================================================ MEMORY { /* We are loaded to the top 256 bytes of SRAM, which is above the bootrom stack. Note 4 bytes occupied by checksum. */ SRAM(rx) : ORIGIN = 0x20041f00, LENGTH = 252 } SECTIONS { . = ORIGIN(SRAM); .text : { *(.entry) *(.text) } >SRAM } ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/compile_time_choice.S ================================================ // ---------------------------------------------------------------------------- // Second stage boot code // Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd. // SPDX-License-Identifier: BSD-3-Clause // ---------------------------------------------------------------------------- // // This implementation uses the PICO_BOOT_STAGE2_CHOOSE_ preprocessor defines to pick // amongst a menu of known boot stage 2 implementations, allowing the board // configuration header to be able to specify the boot stage 2 #include "boot_stage2/config.h" #ifdef PICO_BUILD_BOOT_STAGE2_NAME // boot stage 2 is configured by cmake, so use the name specified there #error PICO_BUILD_BOOT_STAGE2_NAME should not be defined for compile_time_choice builds #else // boot stage 2 is selected by board config header, and PICO_BOOT_STAGE2_ASM is set in boot_stage2/config.h #include PICO_BOOT_STAGE2_ASM #endif ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/doc.h ================================================ /** * \defgroup boot_stage2 boot_stage2 * \brief Second stage boot loaders responsible for setting up external flash */ ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/include/boot_stage2/config.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _BOOT_STAGE2_CONFIG_H #define _BOOT_STAGE2_CONFIG_H // NOTE THIS HEADER IS INCLUDED FROM ASSEMBLY #include "pico.h" // PICO_CONFIG: PICO_BUILD_BOOT_STAGE2_NAME, The name of the boot stage 2 if selected by the build, group=boot_stage2 #ifdef PICO_BUILD_BOOT_STAGE2_NAME #define _BOOT_STAGE2_SELECTED #else // check that multiple boot stage 2 options haven't been set... // PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_IS25LP080, Select boot2_is25lp080 as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2 #ifndef PICO_BOOT_STAGE2_CHOOSE_IS25LP080 #define PICO_BOOT_STAGE2_CHOOSE_IS25LP080 0 #elif PICO_BOOT_STAGE2_CHOOSE_IS25LP080 #ifdef _BOOT_STAGE2_SELECTED #error multiple boot stage 2 options chosen #endif #define _BOOT_STAGE2_SELECTED #endif // PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25Q080, Select boot2_w25q080 as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2 #ifndef PICO_BOOT_STAGE2_CHOOSE_W25Q080 #define PICO_BOOT_STAGE2_CHOOSE_W25Q080 0 #elif PICO_BOOT_STAGE2_CHOOSE_W25Q080 #ifdef _BOOT_STAGE2_SELECTED #error multiple boot stage 2 options chosen #endif #define _BOOT_STAGE2_SELECTED #endif // PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25X10CL, Select boot2_w25x10cl as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2 #ifndef PICO_BOOT_STAGE2_CHOOSE_W25X10CL #define PICO_BOOT_STAGE2_CHOOSE_W25X10CL 0 #elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL #ifdef _BOOT_STAGE2_SELECTED #error multiple boot stage 2 options chosen #endif #define _BOOT_STAGE2_SELECTED #endif // PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_AT25SF128A, Select boot2_at25sf128a as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2 #ifndef PICO_BOOT_STAGE2_CHOOSE_AT25SF128A #define PICO_BOOT_STAGE2_CHOOSE_AT25SF128A 0 #elif PICO_BOOT_STAGE2_CHOOSE_AT25SF128A #ifdef _BOOT_STAGE2_SELECTED #error multiple boot stage 2 options chosen #endif #define _BOOT_STAGE2_SELECTED #endif // PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H, Select boot2_generic_03h as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=1, group=boot_stage2 #if defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H) && PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H #ifdef _BOOT_STAGE2_SELECTED #error multiple boot stage 2 options chosen #endif #define _BOOT_STAGE2_SELECTED #endif #endif // PICO_BUILD_BOOT_STAGE2_NAME #ifdef PICO_BUILD_BOOT_STAGE2_NAME // boot stage 2 is configured by cmake, so use the name specified there #define PICO_BOOT_STAGE2_NAME PICO_BUILD_BOOT_STAGE2_NAME #else // boot stage 2 is selected by board config header, so we have to do some work #if PICO_BOOT_STAGE2_CHOOSE_IS25LP080 #define _BOOT_STAGE2 boot2_is25lp080 #elif PICO_BOOT_STAGE2_CHOOSE_W25Q080 #define _BOOT_STAGE2 boot2_w25q080 #elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL #define _BOOT_STAGE2 boot2_w25x10cl #elif PICO_BOOT_STAGE2_CHOOSE_AT25SF128A #define _BOOT_STAGE2 boot2_at25sf128a #elif !defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H) || PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H #undef PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H #define PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H 1 #define _BOOT_STAGE2 boot2_generic_03h #else #error no boot stage 2 is defined by PICO_BOOT_STAGE2_CHOOSE_ macro #endif // we can't include cdefs in assembly, so define our own, but avoid conflict with real ones for c inclusion #define PICO_BOOT_STAGE2_NAME __PICO_XSTRING(_BOOT_STAGE2) #define PICO_BOOT_STAGE2_ASM __PICO_XSTRING(__PICO_CONCAT1(_BOOT_STAGE2,.S)) #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/boot_stage2/pad_checksum ================================================ #!/usr/bin/env python3 import argparse import binascii import struct import sys def any_int(x): try: return int(x, 0) except: raise argparse.ArgumentTypeError("expected an integer, not '{!r}'".format(x)) def bitrev(x, width): return int("{:0{w}b}".format(x, w=width)[::-1], 2) parser = argparse.ArgumentParser() parser.add_argument("ifile", help="Input file (binary)") parser.add_argument("ofile", help="Output file (assembly)") parser.add_argument("-p", "--pad", help="Padded size (bytes), including 4-byte checksum, default 256", type=any_int, default=256) parser.add_argument("-s", "--seed", help="Checksum seed value, default 0", type=any_int, default=0) args = parser.parse_args() try: idata = open(args.ifile, "rb").read() except: sys.exit("Could not open input file '{}'".format(args.ifile)) if len(idata) > args.pad - 4: sys.exit("Input file size ({} bytes) too large for final size ({} bytes)".format(len(idata), args.pad)) idata_padded = idata + bytes(args.pad - 4 - len(idata)) # Our bootrom CRC32 is slightly bass-ackward but it's best to work around for now (FIXME) # 100% worth it to save two Thumb instructions checksum = bitrev( (binascii.crc32(bytes(bitrev(b, 8) for b in idata_padded), args.seed ^ 0xffffffff) ^ 0xffffffff) & 0xffffffff, 32) odata = idata_padded + struct.pack(">= 1U; value != 0U; value >>= 1U) { result <<= 1U; result |= value & 1U; s--; } result <<= s; /* shift when v's highest bits are zero */ return result; } #endif /** \brief Count leading zeros \details Counts the number of leading zeros of a data value. \param [in] value Value to count the leading zeros \return number of leading zeros in value */ #define __CLZ __clz #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) /** \brief LDR Exclusive (8 bit) \details Executes a exclusive LDR instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) #define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) #else #define __LDREXB(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr)) _Pragma("pop") #endif /** \brief LDR Exclusive (16 bit) \details Executes a exclusive LDR instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) #define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) #else #define __LDREXH(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr)) _Pragma("pop") #endif /** \brief LDR Exclusive (32 bit) \details Executes a exclusive LDR instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) #define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) #else #define __LDREXW(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr)) _Pragma("pop") #endif /** \brief STR Exclusive (8 bit) \details Executes a exclusive STR instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) #define __STREXB(value, ptr) __strex(value, ptr) #else #define __STREXB(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") #endif /** \brief STR Exclusive (16 bit) \details Executes a exclusive STR instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) #define __STREXH(value, ptr) __strex(value, ptr) #else #define __STREXH(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") #endif /** \brief STR Exclusive (32 bit) \details Executes a exclusive STR instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) #define __STREXW(value, ptr) __strex(value, ptr) #else #define __STREXW(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") #endif /** \brief Remove the exclusive lock \details Removes the exclusive lock which is created by LDREX. */ #define __CLREX __clrex /** \brief Signed Saturate \details Saturates a signed value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (1..32) \return Saturated value */ #define __SSAT __ssat /** \brief Unsigned Saturate \details Saturates an unsigned value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (0..31) \return Saturated value */ #define __USAT __usat /** \brief Rotate Right with Extend (32 bit) \details Moves each bit of a bitstring right by one bit. The carry input is shifted in at the left end of the bitstring. \param [in] value Value to rotate \return Rotated value */ #ifndef __NO_EMBEDDED_ASM __attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) { rrx r0, r0 bx lr } #endif /** \brief LDRT Unprivileged (8 bit) \details Executes a Unprivileged LDRT instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ #define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr)) /** \brief LDRT Unprivileged (16 bit) \details Executes a Unprivileged LDRT instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ #define __LDRHT(ptr) ((uint16_t) __ldrt(ptr)) /** \brief LDRT Unprivileged (32 bit) \details Executes a Unprivileged LDRT instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ #define __LDRT(ptr) ((uint32_t ) __ldrt(ptr)) /** \brief STRT Unprivileged (8 bit) \details Executes a Unprivileged STRT instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ #define __STRBT(value, ptr) __strt(value, ptr) /** \brief STRT Unprivileged (16 bit) \details Executes a Unprivileged STRT instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ #define __STRHT(value, ptr) __strt(value, ptr) /** \brief STRT Unprivileged (32 bit) \details Executes a Unprivileged STRT instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ #define __STRT(value, ptr) __strt(value, ptr) #else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ /** \brief Signed Saturate \details Saturates a signed value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (1..32) \return Saturated value */ __attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) { if ((sat >= 1U) && (sat <= 32U)) { const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); const int32_t min = -1 - max ; if (val > max) { return max; } else if (val < min) { return min; } } return val; } /** \brief Unsigned Saturate \details Saturates an unsigned value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (0..31) \return Saturated value */ __attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) { if (sat <= 31U) { const uint32_t max = ((1U << sat) - 1U); if (val > (int32_t)max) { return max; } else if (val < 0) { return 0U; } } return (uint32_t)val; } #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ /*@}*/ /* end of group CMSIS_Core_InstructionInterface */ /* ################### Compiler specific Intrinsics ########################### */ /** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics Access to dedicated SIMD instructions @{ */ #if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) #define __SADD8 __sadd8 #define __QADD8 __qadd8 #define __SHADD8 __shadd8 #define __UADD8 __uadd8 #define __UQADD8 __uqadd8 #define __UHADD8 __uhadd8 #define __SSUB8 __ssub8 #define __QSUB8 __qsub8 #define __SHSUB8 __shsub8 #define __USUB8 __usub8 #define __UQSUB8 __uqsub8 #define __UHSUB8 __uhsub8 #define __SADD16 __sadd16 #define __QADD16 __qadd16 #define __SHADD16 __shadd16 #define __UADD16 __uadd16 #define __UQADD16 __uqadd16 #define __UHADD16 __uhadd16 #define __SSUB16 __ssub16 #define __QSUB16 __qsub16 #define __SHSUB16 __shsub16 #define __USUB16 __usub16 #define __UQSUB16 __uqsub16 #define __UHSUB16 __uhsub16 #define __SASX __sasx #define __QASX __qasx #define __SHASX __shasx #define __UASX __uasx #define __UQASX __uqasx #define __UHASX __uhasx #define __SSAX __ssax #define __QSAX __qsax #define __SHSAX __shsax #define __USAX __usax #define __UQSAX __uqsax #define __UHSAX __uhsax #define __USAD8 __usad8 #define __USADA8 __usada8 #define __SSAT16 __ssat16 #define __USAT16 __usat16 #define __UXTB16 __uxtb16 #define __UXTAB16 __uxtab16 #define __SXTB16 __sxtb16 #define __SXTAB16 __sxtab16 #define __SMUAD __smuad #define __SMUADX __smuadx #define __SMLAD __smlad #define __SMLADX __smladx #define __SMLALD __smlald #define __SMLALDX __smlaldx #define __SMUSD __smusd #define __SMUSDX __smusdx #define __SMLSD __smlsd #define __SMLSDX __smlsdx #define __SMLSLD __smlsld #define __SMLSLDX __smlsldx #define __SEL __sel #define __QADD __qadd #define __QSUB __qsub #define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) #define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) #define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \ ((int64_t)(ARG3) << 32U) ) >> 32U)) #define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) #endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ /*@} end of group CMSIS_SIMD_intrinsics */ #endif /* __CMSIS_ARMCC_H */ ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include/cmsis_armclang.h ================================================ /**************************************************************************//** * @file cmsis_armclang.h * @brief CMSIS compiler armclang (Arm Compiler 6) header file * @version V5.3.1 * @date 26. March 2020 ******************************************************************************/ /* * Copyright (c) 2009-2020 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ #ifndef __CMSIS_ARMCLANG_H #define __CMSIS_ARMCLANG_H #pragma clang system_header /* treat file as system include file */ #ifndef __ARM_COMPAT_H #include /* Compatibility header for Arm Compiler 5 intrinsics */ #endif /* CMSIS compiler specific defines */ #ifndef __ASM #define __ASM __asm #endif #ifndef __INLINE #define __INLINE __inline #endif #ifndef __STATIC_INLINE #define __STATIC_INLINE static __inline #endif #ifndef __STATIC_FORCEINLINE #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline #endif #ifndef __NO_RETURN #define __NO_RETURN __attribute__((__noreturn__)) #endif #ifndef __USED #define __USED __attribute__((used)) #endif #ifndef __WEAK #define __WEAK __attribute__((weak)) #endif #ifndef __PACKED #define __PACKED __attribute__((packed, aligned(1))) #endif #ifndef __PACKED_STRUCT #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) #endif #ifndef __PACKED_UNION #define __PACKED_UNION union __attribute__((packed, aligned(1))) #endif #ifndef __UNALIGNED_UINT32 /* deprecated */ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpacked" /*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ struct __attribute__((packed)) T_UINT32 { uint32_t v; }; #pragma clang diagnostic pop #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) #endif #ifndef __UNALIGNED_UINT16_WRITE #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpacked" /*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; #pragma clang diagnostic pop #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT16_READ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpacked" /*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; #pragma clang diagnostic pop #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) #endif #ifndef __UNALIGNED_UINT32_WRITE #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpacked" /*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; #pragma clang diagnostic pop #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT32_READ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpacked" /*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; #pragma clang diagnostic pop #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) #endif #ifndef __ALIGNED #define __ALIGNED(x) __attribute__((aligned(x))) #endif #ifndef __RESTRICT #define __RESTRICT __restrict #endif #ifndef __COMPILER_BARRIER #define __COMPILER_BARRIER() __ASM volatile("":::"memory") #endif /* ######################### Startup and Lowlevel Init ######################## */ #ifndef __PROGRAM_START #define __PROGRAM_START __main #endif #ifndef __INITIAL_SP #define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit #endif #ifndef __STACK_LIMIT #define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base #endif #ifndef __VECTOR_TABLE #define __VECTOR_TABLE __Vectors #endif #ifndef __VECTOR_TABLE_ATTRIBUTE #define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) #endif /* ########################### Core Function Access ########################### */ /** \ingroup CMSIS_Core_FunctionInterface \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions @{ */ /** \brief Enable IRQ Interrupts \details Enables IRQ interrupts by clearing the I-bit in the CPSR. Can only be executed in Privileged modes. */ /* intrinsic void __enable_irq(); see arm_compat.h */ /** \brief Disable IRQ Interrupts \details Disables IRQ interrupts by setting the I-bit in the CPSR. Can only be executed in Privileged modes. */ /* intrinsic void __disable_irq(); see arm_compat.h */ /** \brief Get Control Register \details Returns the content of the Control Register. \return Control Register value */ __STATIC_FORCEINLINE uint32_t __get_CONTROL(void) { uint32_t result; __ASM volatile ("MRS %0, control" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Control Register (non-secure) \details Returns the content of the non-secure Control Register when in secure mode. \return non-secure Control Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) { uint32_t result; __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Control Register \details Writes the given value to the Control Register. \param [in] control Control Register value to set */ __STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) { __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Control Register (non-secure) \details Writes the given value to the non-secure Control Register when in secure state. \param [in] control Control Register value to set */ __STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) { __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); } #endif /** \brief Get IPSR Register \details Returns the content of the IPSR Register. \return IPSR Register value */ __STATIC_FORCEINLINE uint32_t __get_IPSR(void) { uint32_t result; __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); return(result); } /** \brief Get APSR Register \details Returns the content of the APSR Register. \return APSR Register value */ __STATIC_FORCEINLINE uint32_t __get_APSR(void) { uint32_t result; __ASM volatile ("MRS %0, apsr" : "=r" (result) ); return(result); } /** \brief Get xPSR Register \details Returns the content of the xPSR Register. \return xPSR Register value */ __STATIC_FORCEINLINE uint32_t __get_xPSR(void) { uint32_t result; __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); return(result); } /** \brief Get Process Stack Pointer \details Returns the current value of the Process Stack Pointer (PSP). \return PSP Register value */ __STATIC_FORCEINLINE uint32_t __get_PSP(void) { uint32_t result; __ASM volatile ("MRS %0, psp" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Process Stack Pointer (non-secure) \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. \return PSP Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) { uint32_t result; __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Process Stack Pointer \details Assigns the given value to the Process Stack Pointer (PSP). \param [in] topOfProcStack Process Stack Pointer value to set */ __STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) { __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Process Stack Pointer (non-secure) \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. \param [in] topOfProcStack Process Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) { __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); } #endif /** \brief Get Main Stack Pointer \details Returns the current value of the Main Stack Pointer (MSP). \return MSP Register value */ __STATIC_FORCEINLINE uint32_t __get_MSP(void) { uint32_t result; __ASM volatile ("MRS %0, msp" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Main Stack Pointer (non-secure) \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. \return MSP Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) { uint32_t result; __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Main Stack Pointer \details Assigns the given value to the Main Stack Pointer (MSP). \param [in] topOfMainStack Main Stack Pointer value to set */ __STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) { __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Main Stack Pointer (non-secure) \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. \param [in] topOfMainStack Main Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) { __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); } #endif #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Stack Pointer (non-secure) \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. \return SP Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) { uint32_t result; __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); return(result); } /** \brief Set Stack Pointer (non-secure) \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. \param [in] topOfStack Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) { __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); } #endif /** \brief Get Priority Mask \details Returns the current state of the priority mask bit from the Priority Mask Register. \return Priority Mask value */ __STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) { uint32_t result; __ASM volatile ("MRS %0, primask" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Priority Mask (non-secure) \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. \return Priority Mask value */ __STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) { uint32_t result; __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Priority Mask \details Assigns the given value to the Priority Mask Register. \param [in] priMask Priority Mask */ __STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) { __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Priority Mask (non-secure) \details Assigns the given value to the non-secure Priority Mask Register when in secure state. \param [in] priMask Priority Mask */ __STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) { __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); } #endif #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) /** \brief Enable FIQ \details Enables FIQ interrupts by clearing the F-bit in the CPSR. Can only be executed in Privileged modes. */ #define __enable_fault_irq __enable_fiq /* see arm_compat.h */ /** \brief Disable FIQ \details Disables FIQ interrupts by setting the F-bit in the CPSR. Can only be executed in Privileged modes. */ #define __disable_fault_irq __disable_fiq /* see arm_compat.h */ /** \brief Get Base Priority \details Returns the current value of the Base Priority register. \return Base Priority register value */ __STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) { uint32_t result; __ASM volatile ("MRS %0, basepri" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Base Priority (non-secure) \details Returns the current value of the non-secure Base Priority register when in secure state. \return Base Priority register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) { uint32_t result; __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Base Priority \details Assigns the given value to the Base Priority register. \param [in] basePri Base Priority value to set */ __STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) { __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Base Priority (non-secure) \details Assigns the given value to the non-secure Base Priority register when in secure state. \param [in] basePri Base Priority value to set */ __STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) { __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); } #endif /** \brief Set Base Priority with condition \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, or the new value increases the BASEPRI priority level. \param [in] basePri Base Priority value to set */ __STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) { __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); } /** \brief Get Fault Mask \details Returns the current value of the Fault Mask register. \return Fault Mask register value */ __STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) { uint32_t result; __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Fault Mask (non-secure) \details Returns the current value of the non-secure Fault Mask register when in secure state. \return Fault Mask register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) { uint32_t result; __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Fault Mask \details Assigns the given value to the Fault Mask register. \param [in] faultMask Fault Mask value to set */ __STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) { __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Fault Mask (non-secure) \details Assigns the given value to the non-secure Fault Mask register when in secure state. \param [in] faultMask Fault Mask value to set */ __STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) { __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); } #endif #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) /** \brief Get Process Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always in non-secure mode. \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). \return PSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) { #if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, psplim" : "=r" (result) ); return result; #endif } #if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Process Stack Pointer Limit (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always in non-secure mode. \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. \return PSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) { #if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) // without main extensions, the non-secure PSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); return result; #endif } #endif /** \brief Set Process Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored in non-secure mode. \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ __STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) { #if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI (void)ProcStackPtrLimit; #else __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); #endif } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Process Stack Pointer (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored in non-secure mode. \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ __STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) { #if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) // without main extensions, the non-secure PSPLIM is RAZ/WI (void)ProcStackPtrLimit; #else __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); #endif } #endif /** \brief Get Main Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always. \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). \return MSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) { #if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure MSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, msplim" : "=r" (result) ); return result; #endif } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Main Stack Pointer Limit (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always. \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. \return MSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) { #if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) // without main extensions, the non-secure MSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); return result; #endif } #endif /** \brief Set Main Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored. \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set */ __STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) { #if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure MSPLIM is RAZ/WI (void)MainStackPtrLimit; #else __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); #endif } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Main Stack Pointer Limit (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored. \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. \param [in] MainStackPtrLimit Main Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) { #if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) // without main extensions, the non-secure MSPLIM is RAZ/WI (void)MainStackPtrLimit; #else __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); #endif } #endif #endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ /** \brief Get FPSCR \details Returns the current value of the Floating Point Status/Control register. \return Floating Point Status/Control register value */ #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) #define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr #else #define __get_FPSCR() ((uint32_t)0U) #endif /** \brief Set FPSCR \details Assigns the given value to the Floating Point Status/Control register. \param [in] fpscr Floating Point Status/Control value to set */ #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) #define __set_FPSCR __builtin_arm_set_fpscr #else #define __set_FPSCR(x) ((void)(x)) #endif /*@} end of CMSIS_Core_RegAccFunctions */ /* ########################## Core Instruction Access ######################### */ /** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface Access to dedicated instructions @{ */ /* Define macros for porting to both thumb1 and thumb2. * For thumb1, use low register (r0-r7), specified by constraint "l" * Otherwise, use general registers, specified by constraint "r" */ #if defined (__thumb__) && !defined (__thumb2__) #define __CMSIS_GCC_OUT_REG(r) "=l" (r) #define __CMSIS_GCC_RW_REG(r) "+l" (r) #define __CMSIS_GCC_USE_REG(r) "l" (r) #else #define __CMSIS_GCC_OUT_REG(r) "=r" (r) #define __CMSIS_GCC_RW_REG(r) "+r" (r) #define __CMSIS_GCC_USE_REG(r) "r" (r) #endif /** \brief No Operation \details No Operation does nothing. This instruction can be used for code alignment purposes. */ #define __NOP __builtin_arm_nop /** \brief Wait For Interrupt \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. */ #define __WFI __builtin_arm_wfi /** \brief Wait For Event \details Wait For Event is a hint instruction that permits the processor to enter a low-power state until one of a number of events occurs. */ #define __WFE __builtin_arm_wfe /** \brief Send Event \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. */ #define __SEV __builtin_arm_sev /** \brief Instruction Synchronization Barrier \details Instruction Synchronization Barrier flushes the pipeline in the processor, so that all instructions following the ISB are fetched from cache or memory, after the instruction has been completed. */ #define __ISB() __builtin_arm_isb(0xF) /** \brief Data Synchronization Barrier \details Acts as a special kind of Data Memory Barrier. It completes when all explicit memory accesses before this instruction complete. */ #define __DSB() __builtin_arm_dsb(0xF) /** \brief Data Memory Barrier \details Ensures the apparent order of the explicit memory operations before and after the instruction, without ensuring their completion. */ #define __DMB() __builtin_arm_dmb(0xF) /** \brief Reverse byte order (32 bit) \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. \param [in] value Value to reverse \return Reversed value */ #define __REV(value) __builtin_bswap32(value) /** \brief Reverse byte order (16 bit) \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. \param [in] value Value to reverse \return Reversed value */ #define __REV16(value) __ROR(__REV(value), 16) /** \brief Reverse byte order (16 bit) \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. \param [in] value Value to reverse \return Reversed value */ #define __REVSH(value) (int16_t)__builtin_bswap16(value) /** \brief Rotate Right in unsigned value (32 bit) \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. \param [in] op1 Value to rotate \param [in] op2 Number of Bits to rotate \return Rotated value */ __STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) { op2 %= 32U; if (op2 == 0U) { return op1; } return (op1 >> op2) | (op1 << (32U - op2)); } /** \brief Breakpoint \details Causes the processor to enter Debug state. Debug tools can use this to investigate system state when the instruction at a particular address is reached. \param [in] value is ignored by the processor. If required, a debugger can use it to store additional information about the breakpoint. */ #define __BKPT(value) __ASM volatile ("bkpt "#value) /** \brief Reverse bit order of value \details Reverses the bit order of the given value. \param [in] value Value to reverse \return Reversed value */ #define __RBIT __builtin_arm_rbit /** \brief Count leading zeros \details Counts the number of leading zeros of a data value. \param [in] value Value to count the leading zeros \return number of leading zeros in value */ __STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) { /* Even though __builtin_clz produces a CLZ instruction on ARM, formally __builtin_clz(0) is undefined behaviour, so handle this case specially. This guarantees ARM-compatible results if happening to compile on a non-ARM target, and ensures the compiler doesn't decide to activate any optimisations using the logic "value was passed to __builtin_clz, so it is non-zero". ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a single CLZ instruction. */ if (value == 0U) { return 32U; } return __builtin_clz(value); } #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) /** \brief LDR Exclusive (8 bit) \details Executes a exclusive LDR instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ #define __LDREXB (uint8_t)__builtin_arm_ldrex /** \brief LDR Exclusive (16 bit) \details Executes a exclusive LDR instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ #define __LDREXH (uint16_t)__builtin_arm_ldrex /** \brief LDR Exclusive (32 bit) \details Executes a exclusive LDR instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ #define __LDREXW (uint32_t)__builtin_arm_ldrex /** \brief STR Exclusive (8 bit) \details Executes a exclusive STR instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STREXB (uint32_t)__builtin_arm_strex /** \brief STR Exclusive (16 bit) \details Executes a exclusive STR instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STREXH (uint32_t)__builtin_arm_strex /** \brief STR Exclusive (32 bit) \details Executes a exclusive STR instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STREXW (uint32_t)__builtin_arm_strex /** \brief Remove the exclusive lock \details Removes the exclusive lock which is created by LDREX. */ #define __CLREX __builtin_arm_clrex #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) /** \brief Signed Saturate \details Saturates a signed value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (1..32) \return Saturated value */ #define __SSAT __builtin_arm_ssat /** \brief Unsigned Saturate \details Saturates an unsigned value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (0..31) \return Saturated value */ #define __USAT __builtin_arm_usat /** \brief Rotate Right with Extend (32 bit) \details Moves each bit of a bitstring right by one bit. The carry input is shifted in at the left end of the bitstring. \param [in] value Value to rotate \return Rotated value */ __STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) { uint32_t result; __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); return(result); } /** \brief LDRT Unprivileged (8 bit) \details Executes a Unprivileged LDRT instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ __STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) { uint32_t result; __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); return ((uint8_t) result); /* Add explicit type cast here */ } /** \brief LDRT Unprivileged (16 bit) \details Executes a Unprivileged LDRT instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ __STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) { uint32_t result; __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); return ((uint16_t) result); /* Add explicit type cast here */ } /** \brief LDRT Unprivileged (32 bit) \details Executes a Unprivileged LDRT instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ __STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) { uint32_t result; __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); return(result); } /** \brief STRT Unprivileged (8 bit) \details Executes a Unprivileged STRT instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) { __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } /** \brief STRT Unprivileged (16 bit) \details Executes a Unprivileged STRT instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) { __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } /** \brief STRT Unprivileged (32 bit) \details Executes a Unprivileged STRT instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) { __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); } #else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ /** \brief Signed Saturate \details Saturates a signed value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (1..32) \return Saturated value */ __STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) { if ((sat >= 1U) && (sat <= 32U)) { const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); const int32_t min = -1 - max ; if (val > max) { return max; } else if (val < min) { return min; } } return val; } /** \brief Unsigned Saturate \details Saturates an unsigned value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (0..31) \return Saturated value */ __STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) { if (sat <= 31U) { const uint32_t max = ((1U << sat) - 1U); if (val > (int32_t)max) { return max; } else if (val < 0) { return 0U; } } return (uint32_t)val; } #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) /** \brief Load-Acquire (8 bit) \details Executes a LDAB instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ __STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) { uint32_t result; __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return ((uint8_t) result); } /** \brief Load-Acquire (16 bit) \details Executes a LDAH instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ __STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) { uint32_t result; __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return ((uint16_t) result); } /** \brief Load-Acquire (32 bit) \details Executes a LDA instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ __STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) { uint32_t result; __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return(result); } /** \brief Store-Release (8 bit) \details Executes a STLB instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) { __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } /** \brief Store-Release (16 bit) \details Executes a STLH instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) { __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } /** \brief Store-Release (32 bit) \details Executes a STL instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) { __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } /** \brief Load-Acquire Exclusive (8 bit) \details Executes a LDAB exclusive instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ #define __LDAEXB (uint8_t)__builtin_arm_ldaex /** \brief Load-Acquire Exclusive (16 bit) \details Executes a LDAH exclusive instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ #define __LDAEXH (uint16_t)__builtin_arm_ldaex /** \brief Load-Acquire Exclusive (32 bit) \details Executes a LDA exclusive instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ #define __LDAEX (uint32_t)__builtin_arm_ldaex /** \brief Store-Release Exclusive (8 bit) \details Executes a STLB exclusive instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STLEXB (uint32_t)__builtin_arm_stlex /** \brief Store-Release Exclusive (16 bit) \details Executes a STLH exclusive instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STLEXH (uint32_t)__builtin_arm_stlex /** \brief Store-Release Exclusive (32 bit) \details Executes a STL exclusive instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STLEX (uint32_t)__builtin_arm_stlex #endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ /*@}*/ /* end of group CMSIS_Core_InstructionInterface */ /* ################### Compiler specific Intrinsics ########################### */ /** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics Access to dedicated SIMD instructions @{ */ #if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) #define __SADD8 __builtin_arm_sadd8 #define __QADD8 __builtin_arm_qadd8 #define __SHADD8 __builtin_arm_shadd8 #define __UADD8 __builtin_arm_uadd8 #define __UQADD8 __builtin_arm_uqadd8 #define __UHADD8 __builtin_arm_uhadd8 #define __SSUB8 __builtin_arm_ssub8 #define __QSUB8 __builtin_arm_qsub8 #define __SHSUB8 __builtin_arm_shsub8 #define __USUB8 __builtin_arm_usub8 #define __UQSUB8 __builtin_arm_uqsub8 #define __UHSUB8 __builtin_arm_uhsub8 #define __SADD16 __builtin_arm_sadd16 #define __QADD16 __builtin_arm_qadd16 #define __SHADD16 __builtin_arm_shadd16 #define __UADD16 __builtin_arm_uadd16 #define __UQADD16 __builtin_arm_uqadd16 #define __UHADD16 __builtin_arm_uhadd16 #define __SSUB16 __builtin_arm_ssub16 #define __QSUB16 __builtin_arm_qsub16 #define __SHSUB16 __builtin_arm_shsub16 #define __USUB16 __builtin_arm_usub16 #define __UQSUB16 __builtin_arm_uqsub16 #define __UHSUB16 __builtin_arm_uhsub16 #define __SASX __builtin_arm_sasx #define __QASX __builtin_arm_qasx #define __SHASX __builtin_arm_shasx #define __UASX __builtin_arm_uasx #define __UQASX __builtin_arm_uqasx #define __UHASX __builtin_arm_uhasx #define __SSAX __builtin_arm_ssax #define __QSAX __builtin_arm_qsax #define __SHSAX __builtin_arm_shsax #define __USAX __builtin_arm_usax #define __UQSAX __builtin_arm_uqsax #define __UHSAX __builtin_arm_uhsax #define __USAD8 __builtin_arm_usad8 #define __USADA8 __builtin_arm_usada8 #define __SSAT16 __builtin_arm_ssat16 #define __USAT16 __builtin_arm_usat16 #define __UXTB16 __builtin_arm_uxtb16 #define __UXTAB16 __builtin_arm_uxtab16 #define __SXTB16 __builtin_arm_sxtb16 #define __SXTAB16 __builtin_arm_sxtab16 #define __SMUAD __builtin_arm_smuad #define __SMUADX __builtin_arm_smuadx #define __SMLAD __builtin_arm_smlad #define __SMLADX __builtin_arm_smladx #define __SMLALD __builtin_arm_smlald #define __SMLALDX __builtin_arm_smlaldx #define __SMUSD __builtin_arm_smusd #define __SMUSDX __builtin_arm_smusdx #define __SMLSD __builtin_arm_smlsd #define __SMLSDX __builtin_arm_smlsdx #define __SMLSLD __builtin_arm_smlsld #define __SMLSLDX __builtin_arm_smlsldx #define __SEL __builtin_arm_sel #define __QADD __builtin_arm_qadd #define __QSUB __builtin_arm_qsub #define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) #define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) #define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) __STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) { int32_t result; __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); return(result); } #endif /* (__ARM_FEATURE_DSP == 1) */ /*@} end of group CMSIS_SIMD_intrinsics */ #endif /* __CMSIS_ARMCLANG_H */ ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include/cmsis_armclang_ltm.h ================================================ /**************************************************************************//** * @file cmsis_armclang_ltm.h * @brief CMSIS compiler armclang (Arm Compiler 6) header file * @version V1.3.0 * @date 26. March 2020 ******************************************************************************/ /* * Copyright (c) 2018-2020 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ #ifndef __CMSIS_ARMCLANG_H #define __CMSIS_ARMCLANG_H #pragma clang system_header /* treat file as system include file */ #ifndef __ARM_COMPAT_H #include /* Compatibility header for Arm Compiler 5 intrinsics */ #endif /* CMSIS compiler specific defines */ #ifndef __ASM #define __ASM __asm #endif #ifndef __INLINE #define __INLINE __inline #endif #ifndef __STATIC_INLINE #define __STATIC_INLINE static __inline #endif #ifndef __STATIC_FORCEINLINE #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline #endif #ifndef __NO_RETURN #define __NO_RETURN __attribute__((__noreturn__)) #endif #ifndef __USED #define __USED __attribute__((used)) #endif #ifndef __WEAK #define __WEAK __attribute__((weak)) #endif #ifndef __PACKED #define __PACKED __attribute__((packed, aligned(1))) #endif #ifndef __PACKED_STRUCT #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) #endif #ifndef __PACKED_UNION #define __PACKED_UNION union __attribute__((packed, aligned(1))) #endif #ifndef __UNALIGNED_UINT32 /* deprecated */ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpacked" /*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ struct __attribute__((packed)) T_UINT32 { uint32_t v; }; #pragma clang diagnostic pop #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) #endif #ifndef __UNALIGNED_UINT16_WRITE #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpacked" /*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; #pragma clang diagnostic pop #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT16_READ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpacked" /*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; #pragma clang diagnostic pop #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) #endif #ifndef __UNALIGNED_UINT32_WRITE #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpacked" /*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; #pragma clang diagnostic pop #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT32_READ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpacked" /*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; #pragma clang diagnostic pop #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) #endif #ifndef __ALIGNED #define __ALIGNED(x) __attribute__((aligned(x))) #endif #ifndef __RESTRICT #define __RESTRICT __restrict #endif #ifndef __COMPILER_BARRIER #define __COMPILER_BARRIER() __ASM volatile("":::"memory") #endif /* ######################### Startup and Lowlevel Init ######################## */ #ifndef __PROGRAM_START #define __PROGRAM_START __main #endif #ifndef __INITIAL_SP #define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit #endif #ifndef __STACK_LIMIT #define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base #endif #ifndef __VECTOR_TABLE #define __VECTOR_TABLE __Vectors #endif #ifndef __VECTOR_TABLE_ATTRIBUTE #define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) #endif /* ########################### Core Function Access ########################### */ /** \ingroup CMSIS_Core_FunctionInterface \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions @{ */ /** \brief Enable IRQ Interrupts \details Enables IRQ interrupts by clearing the I-bit in the CPSR. Can only be executed in Privileged modes. */ /* intrinsic void __enable_irq(); see arm_compat.h */ /** \brief Disable IRQ Interrupts \details Disables IRQ interrupts by setting the I-bit in the CPSR. Can only be executed in Privileged modes. */ /* intrinsic void __disable_irq(); see arm_compat.h */ /** \brief Get Control Register \details Returns the content of the Control Register. \return Control Register value */ __STATIC_FORCEINLINE uint32_t __get_CONTROL(void) { uint32_t result; __ASM volatile ("MRS %0, control" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Control Register (non-secure) \details Returns the content of the non-secure Control Register when in secure mode. \return non-secure Control Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) { uint32_t result; __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Control Register \details Writes the given value to the Control Register. \param [in] control Control Register value to set */ __STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) { __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Control Register (non-secure) \details Writes the given value to the non-secure Control Register when in secure state. \param [in] control Control Register value to set */ __STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) { __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); } #endif /** \brief Get IPSR Register \details Returns the content of the IPSR Register. \return IPSR Register value */ __STATIC_FORCEINLINE uint32_t __get_IPSR(void) { uint32_t result; __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); return(result); } /** \brief Get APSR Register \details Returns the content of the APSR Register. \return APSR Register value */ __STATIC_FORCEINLINE uint32_t __get_APSR(void) { uint32_t result; __ASM volatile ("MRS %0, apsr" : "=r" (result) ); return(result); } /** \brief Get xPSR Register \details Returns the content of the xPSR Register. \return xPSR Register value */ __STATIC_FORCEINLINE uint32_t __get_xPSR(void) { uint32_t result; __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); return(result); } /** \brief Get Process Stack Pointer \details Returns the current value of the Process Stack Pointer (PSP). \return PSP Register value */ __STATIC_FORCEINLINE uint32_t __get_PSP(void) { uint32_t result; __ASM volatile ("MRS %0, psp" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Process Stack Pointer (non-secure) \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. \return PSP Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) { uint32_t result; __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Process Stack Pointer \details Assigns the given value to the Process Stack Pointer (PSP). \param [in] topOfProcStack Process Stack Pointer value to set */ __STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) { __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Process Stack Pointer (non-secure) \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. \param [in] topOfProcStack Process Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) { __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); } #endif /** \brief Get Main Stack Pointer \details Returns the current value of the Main Stack Pointer (MSP). \return MSP Register value */ __STATIC_FORCEINLINE uint32_t __get_MSP(void) { uint32_t result; __ASM volatile ("MRS %0, msp" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Main Stack Pointer (non-secure) \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. \return MSP Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) { uint32_t result; __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Main Stack Pointer \details Assigns the given value to the Main Stack Pointer (MSP). \param [in] topOfMainStack Main Stack Pointer value to set */ __STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) { __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Main Stack Pointer (non-secure) \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. \param [in] topOfMainStack Main Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) { __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); } #endif #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Stack Pointer (non-secure) \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. \return SP Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) { uint32_t result; __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); return(result); } /** \brief Set Stack Pointer (non-secure) \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. \param [in] topOfStack Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) { __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); } #endif /** \brief Get Priority Mask \details Returns the current state of the priority mask bit from the Priority Mask Register. \return Priority Mask value */ __STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) { uint32_t result; __ASM volatile ("MRS %0, primask" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Priority Mask (non-secure) \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. \return Priority Mask value */ __STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) { uint32_t result; __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Priority Mask \details Assigns the given value to the Priority Mask Register. \param [in] priMask Priority Mask */ __STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) { __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Priority Mask (non-secure) \details Assigns the given value to the non-secure Priority Mask Register when in secure state. \param [in] priMask Priority Mask */ __STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) { __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); } #endif #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) /** \brief Enable FIQ \details Enables FIQ interrupts by clearing the F-bit in the CPSR. Can only be executed in Privileged modes. */ #define __enable_fault_irq __enable_fiq /* see arm_compat.h */ /** \brief Disable FIQ \details Disables FIQ interrupts by setting the F-bit in the CPSR. Can only be executed in Privileged modes. */ #define __disable_fault_irq __disable_fiq /* see arm_compat.h */ /** \brief Get Base Priority \details Returns the current value of the Base Priority register. \return Base Priority register value */ __STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) { uint32_t result; __ASM volatile ("MRS %0, basepri" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Base Priority (non-secure) \details Returns the current value of the non-secure Base Priority register when in secure state. \return Base Priority register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) { uint32_t result; __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Base Priority \details Assigns the given value to the Base Priority register. \param [in] basePri Base Priority value to set */ __STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) { __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Base Priority (non-secure) \details Assigns the given value to the non-secure Base Priority register when in secure state. \param [in] basePri Base Priority value to set */ __STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) { __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); } #endif /** \brief Set Base Priority with condition \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, or the new value increases the BASEPRI priority level. \param [in] basePri Base Priority value to set */ __STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) { __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); } /** \brief Get Fault Mask \details Returns the current value of the Fault Mask register. \return Fault Mask register value */ __STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) { uint32_t result; __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Fault Mask (non-secure) \details Returns the current value of the non-secure Fault Mask register when in secure state. \return Fault Mask register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) { uint32_t result; __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Fault Mask \details Assigns the given value to the Fault Mask register. \param [in] faultMask Fault Mask value to set */ __STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) { __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Fault Mask (non-secure) \details Assigns the given value to the non-secure Fault Mask register when in secure state. \param [in] faultMask Fault Mask value to set */ __STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) { __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); } #endif #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) /** \brief Get Process Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always in non-secure mode. \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). \return PSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, psplim" : "=r" (result) ); return result; #endif } #if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Process Stack Pointer Limit (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always in non-secure mode. \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. \return PSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) // without main extensions, the non-secure PSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); return result; #endif } #endif /** \brief Set Process Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored in non-secure mode. \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ __STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI (void)ProcStackPtrLimit; #else __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); #endif } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Process Stack Pointer (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored in non-secure mode. \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ __STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) // without main extensions, the non-secure PSPLIM is RAZ/WI (void)ProcStackPtrLimit; #else __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); #endif } #endif /** \brief Get Main Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always. \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). \return MSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure MSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, msplim" : "=r" (result) ); return result; #endif } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Main Stack Pointer Limit (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always. \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. \return MSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) // without main extensions, the non-secure MSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); return result; #endif } #endif /** \brief Set Main Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored. \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set */ __STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure MSPLIM is RAZ/WI (void)MainStackPtrLimit; #else __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); #endif } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Main Stack Pointer Limit (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored. \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. \param [in] MainStackPtrLimit Main Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) // without main extensions, the non-secure MSPLIM is RAZ/WI (void)MainStackPtrLimit; #else __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); #endif } #endif #endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ /** \brief Get FPSCR \details Returns the current value of the Floating Point Status/Control register. \return Floating Point Status/Control register value */ #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) #define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr #else #define __get_FPSCR() ((uint32_t)0U) #endif /** \brief Set FPSCR \details Assigns the given value to the Floating Point Status/Control register. \param [in] fpscr Floating Point Status/Control value to set */ #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) #define __set_FPSCR __builtin_arm_set_fpscr #else #define __set_FPSCR(x) ((void)(x)) #endif /*@} end of CMSIS_Core_RegAccFunctions */ /* ########################## Core Instruction Access ######################### */ /** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface Access to dedicated instructions @{ */ /* Define macros for porting to both thumb1 and thumb2. * For thumb1, use low register (r0-r7), specified by constraint "l" * Otherwise, use general registers, specified by constraint "r" */ #if defined (__thumb__) && !defined (__thumb2__) #define __CMSIS_GCC_OUT_REG(r) "=l" (r) #define __CMSIS_GCC_USE_REG(r) "l" (r) #else #define __CMSIS_GCC_OUT_REG(r) "=r" (r) #define __CMSIS_GCC_USE_REG(r) "r" (r) #endif /** \brief No Operation \details No Operation does nothing. This instruction can be used for code alignment purposes. */ #define __NOP __builtin_arm_nop /** \brief Wait For Interrupt \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. */ #define __WFI __builtin_arm_wfi /** \brief Wait For Event \details Wait For Event is a hint instruction that permits the processor to enter a low-power state until one of a number of events occurs. */ #define __WFE __builtin_arm_wfe /** \brief Send Event \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. */ #define __SEV __builtin_arm_sev /** \brief Instruction Synchronization Barrier \details Instruction Synchronization Barrier flushes the pipeline in the processor, so that all instructions following the ISB are fetched from cache or memory, after the instruction has been completed. */ #define __ISB() __builtin_arm_isb(0xF) /** \brief Data Synchronization Barrier \details Acts as a special kind of Data Memory Barrier. It completes when all explicit memory accesses before this instruction complete. */ #define __DSB() __builtin_arm_dsb(0xF) /** \brief Data Memory Barrier \details Ensures the apparent order of the explicit memory operations before and after the instruction, without ensuring their completion. */ #define __DMB() __builtin_arm_dmb(0xF) /** \brief Reverse byte order (32 bit) \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. \param [in] value Value to reverse \return Reversed value */ #define __REV(value) __builtin_bswap32(value) /** \brief Reverse byte order (16 bit) \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. \param [in] value Value to reverse \return Reversed value */ #define __REV16(value) __ROR(__REV(value), 16) /** \brief Reverse byte order (16 bit) \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. \param [in] value Value to reverse \return Reversed value */ #define __REVSH(value) (int16_t)__builtin_bswap16(value) /** \brief Rotate Right in unsigned value (32 bit) \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. \param [in] op1 Value to rotate \param [in] op2 Number of Bits to rotate \return Rotated value */ __STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) { op2 %= 32U; if (op2 == 0U) { return op1; } return (op1 >> op2) | (op1 << (32U - op2)); } /** \brief Breakpoint \details Causes the processor to enter Debug state. Debug tools can use this to investigate system state when the instruction at a particular address is reached. \param [in] value is ignored by the processor. If required, a debugger can use it to store additional information about the breakpoint. */ #define __BKPT(value) __ASM volatile ("bkpt "#value) /** \brief Reverse bit order of value \details Reverses the bit order of the given value. \param [in] value Value to reverse \return Reversed value */ #define __RBIT __builtin_arm_rbit /** \brief Count leading zeros \details Counts the number of leading zeros of a data value. \param [in] value Value to count the leading zeros \return number of leading zeros in value */ __STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) { /* Even though __builtin_clz produces a CLZ instruction on ARM, formally __builtin_clz(0) is undefined behaviour, so handle this case specially. This guarantees ARM-compatible results if happening to compile on a non-ARM target, and ensures the compiler doesn't decide to activate any optimisations using the logic "value was passed to __builtin_clz, so it is non-zero". ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a single CLZ instruction. */ if (value == 0U) { return 32U; } return __builtin_clz(value); } #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) /** \brief LDR Exclusive (8 bit) \details Executes a exclusive LDR instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ #define __LDREXB (uint8_t)__builtin_arm_ldrex /** \brief LDR Exclusive (16 bit) \details Executes a exclusive LDR instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ #define __LDREXH (uint16_t)__builtin_arm_ldrex /** \brief LDR Exclusive (32 bit) \details Executes a exclusive LDR instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ #define __LDREXW (uint32_t)__builtin_arm_ldrex /** \brief STR Exclusive (8 bit) \details Executes a exclusive STR instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STREXB (uint32_t)__builtin_arm_strex /** \brief STR Exclusive (16 bit) \details Executes a exclusive STR instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STREXH (uint32_t)__builtin_arm_strex /** \brief STR Exclusive (32 bit) \details Executes a exclusive STR instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STREXW (uint32_t)__builtin_arm_strex /** \brief Remove the exclusive lock \details Removes the exclusive lock which is created by LDREX. */ #define __CLREX __builtin_arm_clrex #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) /** \brief Signed Saturate \details Saturates a signed value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (1..32) \return Saturated value */ #define __SSAT __builtin_arm_ssat /** \brief Unsigned Saturate \details Saturates an unsigned value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (0..31) \return Saturated value */ #define __USAT __builtin_arm_usat /** \brief Rotate Right with Extend (32 bit) \details Moves each bit of a bitstring right by one bit. The carry input is shifted in at the left end of the bitstring. \param [in] value Value to rotate \return Rotated value */ __STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) { uint32_t result; __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); return(result); } /** \brief LDRT Unprivileged (8 bit) \details Executes a Unprivileged LDRT instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ __STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) { uint32_t result; __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); return ((uint8_t) result); /* Add explicit type cast here */ } /** \brief LDRT Unprivileged (16 bit) \details Executes a Unprivileged LDRT instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ __STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) { uint32_t result; __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); return ((uint16_t) result); /* Add explicit type cast here */ } /** \brief LDRT Unprivileged (32 bit) \details Executes a Unprivileged LDRT instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ __STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) { uint32_t result; __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); return(result); } /** \brief STRT Unprivileged (8 bit) \details Executes a Unprivileged STRT instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) { __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } /** \brief STRT Unprivileged (16 bit) \details Executes a Unprivileged STRT instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) { __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } /** \brief STRT Unprivileged (32 bit) \details Executes a Unprivileged STRT instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) { __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); } #else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ /** \brief Signed Saturate \details Saturates a signed value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (1..32) \return Saturated value */ __STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) { if ((sat >= 1U) && (sat <= 32U)) { const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); const int32_t min = -1 - max ; if (val > max) { return max; } else if (val < min) { return min; } } return val; } /** \brief Unsigned Saturate \details Saturates an unsigned value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (0..31) \return Saturated value */ __STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) { if (sat <= 31U) { const uint32_t max = ((1U << sat) - 1U); if (val > (int32_t)max) { return max; } else if (val < 0) { return 0U; } } return (uint32_t)val; } #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) /** \brief Load-Acquire (8 bit) \details Executes a LDAB instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ __STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) { uint32_t result; __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return ((uint8_t) result); } /** \brief Load-Acquire (16 bit) \details Executes a LDAH instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ __STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) { uint32_t result; __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return ((uint16_t) result); } /** \brief Load-Acquire (32 bit) \details Executes a LDA instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ __STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) { uint32_t result; __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return(result); } /** \brief Store-Release (8 bit) \details Executes a STLB instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) { __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } /** \brief Store-Release (16 bit) \details Executes a STLH instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) { __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } /** \brief Store-Release (32 bit) \details Executes a STL instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) { __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } /** \brief Load-Acquire Exclusive (8 bit) \details Executes a LDAB exclusive instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ #define __LDAEXB (uint8_t)__builtin_arm_ldaex /** \brief Load-Acquire Exclusive (16 bit) \details Executes a LDAH exclusive instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ #define __LDAEXH (uint16_t)__builtin_arm_ldaex /** \brief Load-Acquire Exclusive (32 bit) \details Executes a LDA exclusive instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ #define __LDAEX (uint32_t)__builtin_arm_ldaex /** \brief Store-Release Exclusive (8 bit) \details Executes a STLB exclusive instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STLEXB (uint32_t)__builtin_arm_stlex /** \brief Store-Release Exclusive (16 bit) \details Executes a STLH exclusive instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STLEXH (uint32_t)__builtin_arm_stlex /** \brief Store-Release Exclusive (32 bit) \details Executes a STL exclusive instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ #define __STLEX (uint32_t)__builtin_arm_stlex #endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ /*@}*/ /* end of group CMSIS_Core_InstructionInterface */ /* ################### Compiler specific Intrinsics ########################### */ /** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics Access to dedicated SIMD instructions @{ */ #if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) __STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) { uint32_t result; __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); return(result); } #define __SSAT16(ARG1,ARG2) \ ({ \ int32_t __RES, __ARG1 = (ARG1); \ __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ __RES; \ }) #define __USAT16(ARG1,ARG2) \ ({ \ uint32_t __RES, __ARG1 = (ARG1); \ __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ __RES; \ }) __STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) { uint32_t result; __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); return(result); } __STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) { uint32_t result; __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); return(result); } __STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) { uint32_t result; __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) { uint32_t result; __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); return(result); } __STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) { union llreg_u{ uint32_t w32[2]; uint64_t w64; } llr; llr.w64 = acc; #ifndef __ARMEB__ /* Little endian */ __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); #else /* Big endian */ __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); #endif return(llr.w64); } __STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) { union llreg_u{ uint32_t w32[2]; uint64_t w64; } llr; llr.w64 = acc; #ifndef __ARMEB__ /* Little endian */ __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); #else /* Big endian */ __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); #endif return(llr.w64); } __STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) { uint32_t result; __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) { uint32_t result; __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); return(result); } __STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) { union llreg_u{ uint32_t w32[2]; uint64_t w64; } llr; llr.w64 = acc; #ifndef __ARMEB__ /* Little endian */ __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); #else /* Big endian */ __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); #endif return(llr.w64); } __STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) { union llreg_u{ uint32_t w32[2]; uint64_t w64; } llr; llr.w64 = acc; #ifndef __ARMEB__ /* Little endian */ __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); #else /* Big endian */ __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); #endif return(llr.w64); } __STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) { int32_t result; __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) { int32_t result; __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } #define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) #define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) #define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) __STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) { int32_t result; __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); return(result); } #endif /* (__ARM_FEATURE_DSP == 1) */ /*@} end of group CMSIS_SIMD_intrinsics */ #endif /* __CMSIS_ARMCLANG_H */ ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include/cmsis_compiler.h ================================================ /**************************************************************************//** * @file cmsis_compiler.h * @brief CMSIS compiler generic header file * @version V5.1.0 * @date 09. October 2018 ******************************************************************************/ /* * Copyright (c) 2009-2018 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __CMSIS_COMPILER_H #define __CMSIS_COMPILER_H #include /* * Arm Compiler 4/5 */ #if defined ( __CC_ARM ) #include "cmsis_armcc.h" /* * Arm Compiler 6.6 LTM (armclang) */ #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100) #include "cmsis_armclang_ltm.h" /* * Arm Compiler above 6.10.1 (armclang) */ #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) #include "cmsis_armclang.h" /* * GNU Compiler */ #elif defined ( __GNUC__ ) #include "cmsis_gcc.h" /* * IAR Compiler */ #elif defined ( __ICCARM__ ) #include /* * TI Arm Compiler */ #elif defined ( __TI_ARM__ ) #include #ifndef __ASM #define __ASM __asm #endif #ifndef __INLINE #define __INLINE inline #endif #ifndef __STATIC_INLINE #define __STATIC_INLINE static inline #endif #ifndef __STATIC_FORCEINLINE #define __STATIC_FORCEINLINE __STATIC_INLINE #endif #ifndef __NO_RETURN #define __NO_RETURN __attribute__((noreturn)) #endif #ifndef __USED #define __USED __attribute__((used)) #endif #ifndef __WEAK #define __WEAK __attribute__((weak)) #endif #ifndef __PACKED #define __PACKED __attribute__((packed)) #endif #ifndef __PACKED_STRUCT #define __PACKED_STRUCT struct __attribute__((packed)) #endif #ifndef __PACKED_UNION #define __PACKED_UNION union __attribute__((packed)) #endif #ifndef __UNALIGNED_UINT32 /* deprecated */ struct __attribute__((packed)) T_UINT32 { uint32_t v; }; #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) #endif #ifndef __UNALIGNED_UINT16_WRITE __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT16_READ __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) #endif #ifndef __UNALIGNED_UINT32_WRITE __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT32_READ __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) #endif #ifndef __ALIGNED #define __ALIGNED(x) __attribute__((aligned(x))) #endif #ifndef __RESTRICT #define __RESTRICT __restrict #endif #ifndef __COMPILER_BARRIER #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. #define __COMPILER_BARRIER() (void)0 #endif /* * TASKING Compiler */ #elif defined ( __TASKING__ ) /* * The CMSIS functions have been implemented as intrinsics in the compiler. * Please use "carm -?i" to get an up to date list of all intrinsics, * Including the CMSIS ones. */ #ifndef __ASM #define __ASM __asm #endif #ifndef __INLINE #define __INLINE inline #endif #ifndef __STATIC_INLINE #define __STATIC_INLINE static inline #endif #ifndef __STATIC_FORCEINLINE #define __STATIC_FORCEINLINE __STATIC_INLINE #endif #ifndef __NO_RETURN #define __NO_RETURN __attribute__((noreturn)) #endif #ifndef __USED #define __USED __attribute__((used)) #endif #ifndef __WEAK #define __WEAK __attribute__((weak)) #endif #ifndef __PACKED #define __PACKED __packed__ #endif #ifndef __PACKED_STRUCT #define __PACKED_STRUCT struct __packed__ #endif #ifndef __PACKED_UNION #define __PACKED_UNION union __packed__ #endif #ifndef __UNALIGNED_UINT32 /* deprecated */ struct __packed__ T_UINT32 { uint32_t v; }; #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) #endif #ifndef __UNALIGNED_UINT16_WRITE __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT16_READ __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) #endif #ifndef __UNALIGNED_UINT32_WRITE __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT32_READ __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) #endif #ifndef __ALIGNED #define __ALIGNED(x) __align(x) #endif #ifndef __RESTRICT #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. #define __RESTRICT #endif #ifndef __COMPILER_BARRIER #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. #define __COMPILER_BARRIER() (void)0 #endif /* * COSMIC Compiler */ #elif defined ( __CSMC__ ) #include #ifndef __ASM #define __ASM _asm #endif #ifndef __INLINE #define __INLINE inline #endif #ifndef __STATIC_INLINE #define __STATIC_INLINE static inline #endif #ifndef __STATIC_FORCEINLINE #define __STATIC_FORCEINLINE __STATIC_INLINE #endif #ifndef __NO_RETURN // NO RETURN is automatically detected hence no warning here #define __NO_RETURN #endif #ifndef __USED #warning No compiler specific solution for __USED. __USED is ignored. #define __USED #endif #ifndef __WEAK #define __WEAK __weak #endif #ifndef __PACKED #define __PACKED @packed #endif #ifndef __PACKED_STRUCT #define __PACKED_STRUCT @packed struct #endif #ifndef __PACKED_UNION #define __PACKED_UNION @packed union #endif #ifndef __UNALIGNED_UINT32 /* deprecated */ @packed struct T_UINT32 { uint32_t v; }; #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) #endif #ifndef __UNALIGNED_UINT16_WRITE __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT16_READ __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) #endif #ifndef __UNALIGNED_UINT32_WRITE __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT32_READ __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) #endif #ifndef __ALIGNED #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. #define __ALIGNED(x) #endif #ifndef __RESTRICT #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. #define __RESTRICT #endif #ifndef __COMPILER_BARRIER #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. #define __COMPILER_BARRIER() (void)0 #endif #else #error Unknown compiler. #endif #endif /* __CMSIS_COMPILER_H */ ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include/cmsis_gcc.h ================================================ /**************************************************************************//** * @file cmsis_gcc.h * @brief CMSIS compiler GCC header file * @version V5.3.0 * @date 26. March 2020 ******************************************************************************/ /* * Copyright (c) 2009-2020 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __CMSIS_GCC_H #define __CMSIS_GCC_H /* ignore some GCC warnings */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wsign-conversion" #pragma GCC diagnostic ignored "-Wconversion" #pragma GCC diagnostic ignored "-Wunused-parameter" /* Fallback for __has_builtin */ #ifndef __has_builtin #define __has_builtin(x) (0) #endif /* CMSIS compiler specific defines */ #ifndef __ASM #define __ASM __asm #endif #ifndef __INLINE #define __INLINE inline #endif #ifndef __STATIC_INLINE #define __STATIC_INLINE static inline #endif #ifndef __STATIC_FORCEINLINE #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline #endif #ifndef __NO_RETURN #define __NO_RETURN __attribute__((__noreturn__)) #endif #ifndef __USED #define __USED __attribute__((used)) #endif #ifndef __WEAK #define __WEAK __attribute__((weak)) #endif #ifndef __PACKED #define __PACKED __attribute__((packed, aligned(1))) #endif #ifndef __PACKED_STRUCT #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) #endif #ifndef __PACKED_UNION #define __PACKED_UNION union __attribute__((packed, aligned(1))) #endif #ifndef __UNALIGNED_UINT32 /* deprecated */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpacked" #pragma GCC diagnostic ignored "-Wattributes" struct __attribute__((packed)) T_UINT32 { uint32_t v; }; #pragma GCC diagnostic pop #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) #endif #ifndef __UNALIGNED_UINT16_WRITE #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpacked" #pragma GCC diagnostic ignored "-Wattributes" __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; #pragma GCC diagnostic pop #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT16_READ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpacked" #pragma GCC diagnostic ignored "-Wattributes" __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; #pragma GCC diagnostic pop #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) #endif #ifndef __UNALIGNED_UINT32_WRITE #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpacked" #pragma GCC diagnostic ignored "-Wattributes" __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; #pragma GCC diagnostic pop #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) #endif #ifndef __UNALIGNED_UINT32_READ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpacked" #pragma GCC diagnostic ignored "-Wattributes" __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; #pragma GCC diagnostic pop #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) #endif #ifndef __ALIGNED #define __ALIGNED(x) __attribute__((aligned(x))) #endif #ifndef __RESTRICT #define __RESTRICT __restrict #endif #ifndef __COMPILER_BARRIER #define __COMPILER_BARRIER() __ASM volatile("":::"memory") #endif /* ######################### Startup and Lowlevel Init ######################## */ #ifndef __PROGRAM_START /** \brief Initializes data and bss sections \details This default implementations initialized all data and additional bss sections relying on .copy.table and .zero.table specified properly in the used linker script. */ __STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) { extern void _start(void) __NO_RETURN; typedef struct { uint32_t const* src; uint32_t* dest; uint32_t wlen; } __copy_table_t; typedef struct { uint32_t* dest; uint32_t wlen; } __zero_table_t; extern const __copy_table_t __copy_table_start__; extern const __copy_table_t __copy_table_end__; extern const __zero_table_t __zero_table_start__; extern const __zero_table_t __zero_table_end__; for (__copy_table_t const* pTable = &__copy_table_start__; pTable < &__copy_table_end__; ++pTable) { for(uint32_t i=0u; iwlen; ++i) { pTable->dest[i] = pTable->src[i]; } } for (__zero_table_t const* pTable = &__zero_table_start__; pTable < &__zero_table_end__; ++pTable) { for(uint32_t i=0u; iwlen; ++i) { pTable->dest[i] = 0u; } } _start(); } #define __PROGRAM_START __cmsis_start #endif #ifndef __INITIAL_SP #define __INITIAL_SP __StackTop #endif #ifndef __STACK_LIMIT #define __STACK_LIMIT __StackLimit #endif #ifndef __VECTOR_TABLE #define __VECTOR_TABLE __Vectors #endif #ifndef __VECTOR_TABLE_ATTRIBUTE #define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".vectors"))) #endif /* ########################### Core Function Access ########################### */ /** \ingroup CMSIS_Core_FunctionInterface \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions @{ */ /** \brief Enable IRQ Interrupts \details Enables IRQ interrupts by clearing the I-bit in the CPSR. Can only be executed in Privileged modes. */ __STATIC_FORCEINLINE void __enable_irq(void) { __ASM volatile ("cpsie i" : : : "memory"); } /** \brief Disable IRQ Interrupts \details Disables IRQ interrupts by setting the I-bit in the CPSR. Can only be executed in Privileged modes. */ __STATIC_FORCEINLINE void __disable_irq(void) { __ASM volatile ("cpsid i" : : : "memory"); } /** \brief Get Control Register \details Returns the content of the Control Register. \return Control Register value */ __STATIC_FORCEINLINE uint32_t __get_CONTROL(void) { uint32_t result; __ASM volatile ("MRS %0, control" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Control Register (non-secure) \details Returns the content of the non-secure Control Register when in secure mode. \return non-secure Control Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) { uint32_t result; __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Control Register \details Writes the given value to the Control Register. \param [in] control Control Register value to set */ __STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) { __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Control Register (non-secure) \details Writes the given value to the non-secure Control Register when in secure state. \param [in] control Control Register value to set */ __STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) { __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); } #endif /** \brief Get IPSR Register \details Returns the content of the IPSR Register. \return IPSR Register value */ __STATIC_FORCEINLINE uint32_t __get_IPSR(void) { uint32_t result; __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); return(result); } /** \brief Get APSR Register \details Returns the content of the APSR Register. \return APSR Register value */ __STATIC_FORCEINLINE uint32_t __get_APSR(void) { uint32_t result; __ASM volatile ("MRS %0, apsr" : "=r" (result) ); return(result); } /** \brief Get xPSR Register \details Returns the content of the xPSR Register. \return xPSR Register value */ __STATIC_FORCEINLINE uint32_t __get_xPSR(void) { uint32_t result; __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); return(result); } /** \brief Get Process Stack Pointer \details Returns the current value of the Process Stack Pointer (PSP). \return PSP Register value */ __STATIC_FORCEINLINE uint32_t __get_PSP(void) { uint32_t result; __ASM volatile ("MRS %0, psp" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Process Stack Pointer (non-secure) \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. \return PSP Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) { uint32_t result; __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Process Stack Pointer \details Assigns the given value to the Process Stack Pointer (PSP). \param [in] topOfProcStack Process Stack Pointer value to set */ __STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) { __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Process Stack Pointer (non-secure) \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. \param [in] topOfProcStack Process Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) { __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); } #endif /** \brief Get Main Stack Pointer \details Returns the current value of the Main Stack Pointer (MSP). \return MSP Register value */ __STATIC_FORCEINLINE uint32_t __get_MSP(void) { uint32_t result; __ASM volatile ("MRS %0, msp" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Main Stack Pointer (non-secure) \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. \return MSP Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) { uint32_t result; __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Main Stack Pointer \details Assigns the given value to the Main Stack Pointer (MSP). \param [in] topOfMainStack Main Stack Pointer value to set */ __STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) { __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Main Stack Pointer (non-secure) \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. \param [in] topOfMainStack Main Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) { __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); } #endif #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Stack Pointer (non-secure) \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. \return SP Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) { uint32_t result; __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); return(result); } /** \brief Set Stack Pointer (non-secure) \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. \param [in] topOfStack Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) { __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); } #endif /** \brief Get Priority Mask \details Returns the current state of the priority mask bit from the Priority Mask Register. \return Priority Mask value */ __STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) { uint32_t result; __ASM volatile ("MRS %0, primask" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Priority Mask (non-secure) \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. \return Priority Mask value */ __STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) { uint32_t result; __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Priority Mask \details Assigns the given value to the Priority Mask Register. \param [in] priMask Priority Mask */ __STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) { __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Priority Mask (non-secure) \details Assigns the given value to the non-secure Priority Mask Register when in secure state. \param [in] priMask Priority Mask */ __STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) { __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); } #endif #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) /** \brief Enable FIQ \details Enables FIQ interrupts by clearing the F-bit in the CPSR. Can only be executed in Privileged modes. */ __STATIC_FORCEINLINE void __enable_fault_irq(void) { __ASM volatile ("cpsie f" : : : "memory"); } /** \brief Disable FIQ \details Disables FIQ interrupts by setting the F-bit in the CPSR. Can only be executed in Privileged modes. */ __STATIC_FORCEINLINE void __disable_fault_irq(void) { __ASM volatile ("cpsid f" : : : "memory"); } /** \brief Get Base Priority \details Returns the current value of the Base Priority register. \return Base Priority register value */ __STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) { uint32_t result; __ASM volatile ("MRS %0, basepri" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Base Priority (non-secure) \details Returns the current value of the non-secure Base Priority register when in secure state. \return Base Priority register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) { uint32_t result; __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Base Priority \details Assigns the given value to the Base Priority register. \param [in] basePri Base Priority value to set */ __STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) { __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Base Priority (non-secure) \details Assigns the given value to the non-secure Base Priority register when in secure state. \param [in] basePri Base Priority value to set */ __STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) { __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); } #endif /** \brief Set Base Priority with condition \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, or the new value increases the BASEPRI priority level. \param [in] basePri Base Priority value to set */ __STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) { __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); } /** \brief Get Fault Mask \details Returns the current value of the Fault Mask register. \return Fault Mask register value */ __STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) { uint32_t result; __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); return(result); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Fault Mask (non-secure) \details Returns the current value of the non-secure Fault Mask register when in secure state. \return Fault Mask register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) { uint32_t result; __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); return(result); } #endif /** \brief Set Fault Mask \details Assigns the given value to the Fault Mask register. \param [in] faultMask Fault Mask value to set */ __STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) { __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Fault Mask (non-secure) \details Assigns the given value to the non-secure Fault Mask register when in secure state. \param [in] faultMask Fault Mask value to set */ __STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) { __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); } #endif #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) /** \brief Get Process Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always in non-secure mode. \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). \return PSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, psplim" : "=r" (result) ); return result; #endif } #if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Process Stack Pointer Limit (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always. \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. \return PSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) // without main extensions, the non-secure PSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); return result; #endif } #endif /** \brief Set Process Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored in non-secure mode. \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ __STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI (void)ProcStackPtrLimit; #else __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); #endif } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Process Stack Pointer (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored. \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ __STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) // without main extensions, the non-secure PSPLIM is RAZ/WI (void)ProcStackPtrLimit; #else __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); #endif } #endif /** \brief Get Main Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always in non-secure mode. \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). \return MSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure MSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, msplim" : "=r" (result) ); return result; #endif } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Get Main Stack Pointer Limit (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence zero is returned always. \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. \return MSPLIM Register value */ __STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) // without main extensions, the non-secure MSPLIM is RAZ/WI return 0U; #else uint32_t result; __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); return result; #endif } #endif /** \brief Set Main Stack Pointer Limit Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored in non-secure mode. \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set */ __STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure MSPLIM is RAZ/WI (void)MainStackPtrLimit; #else __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); #endif } #if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** \brief Set Main Stack Pointer Limit (non-secure) Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure Stack Pointer Limit register hence the write is silently ignored. \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. \param [in] MainStackPtrLimit Main Stack Pointer value to set */ __STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) // without main extensions, the non-secure MSPLIM is RAZ/WI (void)MainStackPtrLimit; #else __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); #endif } #endif #endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ /** \brief Get FPSCR \details Returns the current value of the Floating Point Status/Control register. \return Floating Point Status/Control register value */ __STATIC_FORCEINLINE uint32_t __get_FPSCR(void) { #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) #if __has_builtin(__builtin_arm_get_fpscr) // Re-enable using built-in when GCC has been fixed // || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ return __builtin_arm_get_fpscr(); #else uint32_t result; __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); return(result); #endif #else return(0U); #endif } /** \brief Set FPSCR \details Assigns the given value to the Floating Point Status/Control register. \param [in] fpscr Floating Point Status/Control value to set */ __STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) { #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) #if __has_builtin(__builtin_arm_set_fpscr) // Re-enable using built-in when GCC has been fixed // || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ __builtin_arm_set_fpscr(fpscr); #else __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); #endif #else (void)fpscr; #endif } /*@} end of CMSIS_Core_RegAccFunctions */ /* ########################## Core Instruction Access ######################### */ /** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface Access to dedicated instructions @{ */ /* Define macros for porting to both thumb1 and thumb2. * For thumb1, use low register (r0-r7), specified by constraint "l" * Otherwise, use general registers, specified by constraint "r" */ #if defined (__thumb__) && !defined (__thumb2__) #define __CMSIS_GCC_OUT_REG(r) "=l" (r) #define __CMSIS_GCC_RW_REG(r) "+l" (r) #define __CMSIS_GCC_USE_REG(r) "l" (r) #else #define __CMSIS_GCC_OUT_REG(r) "=r" (r) #define __CMSIS_GCC_RW_REG(r) "+r" (r) #define __CMSIS_GCC_USE_REG(r) "r" (r) #endif /** \brief No Operation \details No Operation does nothing. This instruction can be used for code alignment purposes. */ #define __NOP() __ASM volatile ("nop") /** \brief Wait For Interrupt \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. */ #define __WFI() __ASM volatile ("wfi":::"memory") /** \brief Wait For Event \details Wait For Event is a hint instruction that permits the processor to enter a low-power state until one of a number of events occurs. */ #define __WFE() __ASM volatile ("wfe":::"memory") /** \brief Send Event \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. */ #define __SEV() __ASM volatile ("sev") /** \brief Instruction Synchronization Barrier \details Instruction Synchronization Barrier flushes the pipeline in the processor, so that all instructions following the ISB are fetched from cache or memory, after the instruction has been completed. */ __STATIC_FORCEINLINE void __ISB(void) { __ASM volatile ("isb 0xF":::"memory"); } /** \brief Data Synchronization Barrier \details Acts as a special kind of Data Memory Barrier. It completes when all explicit memory accesses before this instruction complete. */ __STATIC_FORCEINLINE void __DSB(void) { __ASM volatile ("dsb 0xF":::"memory"); } /** \brief Data Memory Barrier \details Ensures the apparent order of the explicit memory operations before and after the instruction, without ensuring their completion. */ __STATIC_FORCEINLINE void __DMB(void) { __ASM volatile ("dmb 0xF":::"memory"); } /** \brief Reverse byte order (32 bit) \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. \param [in] value Value to reverse \return Reversed value */ __STATIC_FORCEINLINE uint32_t __REV(uint32_t value) { #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) return __builtin_bswap32(value); #else uint32_t result; __ASM ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); return result; #endif } /** \brief Reverse byte order (16 bit) \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. \param [in] value Value to reverse \return Reversed value */ __STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) { uint32_t result; __ASM ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); return result; } /** \brief Reverse byte order (16 bit) \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. \param [in] value Value to reverse \return Reversed value */ __STATIC_FORCEINLINE int16_t __REVSH(int16_t value) { #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) return (int16_t)__builtin_bswap16(value); #else int16_t result; __ASM ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); return result; #endif } /** \brief Rotate Right in unsigned value (32 bit) \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. \param [in] op1 Value to rotate \param [in] op2 Number of Bits to rotate \return Rotated value */ __STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) { op2 %= 32U; if (op2 == 0U) { return op1; } return (op1 >> op2) | (op1 << (32U - op2)); } /** \brief Breakpoint \details Causes the processor to enter Debug state. Debug tools can use this to investigate system state when the instruction at a particular address is reached. \param [in] value is ignored by the processor. If required, a debugger can use it to store additional information about the breakpoint. */ #define __BKPT(value) __ASM volatile ("bkpt "#value) /** \brief Reverse bit order of value \details Reverses the bit order of the given value. \param [in] value Value to reverse \return Reversed value */ __STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) { uint32_t result; #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) __ASM ("rbit %0, %1" : "=r" (result) : "r" (value) ); #else uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ result = value; /* r will be reversed bits of v; first get LSB of v */ for (value >>= 1U; value != 0U; value >>= 1U) { result <<= 1U; result |= value & 1U; s--; } result <<= s; /* shift when v's highest bits are zero */ #endif return result; } /** \brief Count leading zeros \details Counts the number of leading zeros of a data value. \param [in] value Value to count the leading zeros \return number of leading zeros in value */ __STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) { /* Even though __builtin_clz produces a CLZ instruction on ARM, formally __builtin_clz(0) is undefined behaviour, so handle this case specially. This guarantees ARM-compatible results if happening to compile on a non-ARM target, and ensures the compiler doesn't decide to activate any optimisations using the logic "value was passed to __builtin_clz, so it is non-zero". ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a single CLZ instruction. */ if (value == 0U) { return 32U; } return __builtin_clz(value); } #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) /** \brief LDR Exclusive (8 bit) \details Executes a exclusive LDR instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ __STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr) { uint32_t result; #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); #else /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not accepted by assembler. So has to use following less efficient pattern. */ __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); #endif return ((uint8_t) result); /* Add explicit type cast here */ } /** \brief LDR Exclusive (16 bit) \details Executes a exclusive LDR instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ __STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr) { uint32_t result; #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); #else /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not accepted by assembler. So has to use following less efficient pattern. */ __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); #endif return ((uint16_t) result); /* Add explicit type cast here */ } /** \brief LDR Exclusive (32 bit) \details Executes a exclusive LDR instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ __STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) { uint32_t result; __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); return(result); } /** \brief STR Exclusive (8 bit) \details Executes a exclusive STR instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ __STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) { uint32_t result; __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); return(result); } /** \brief STR Exclusive (16 bit) \details Executes a exclusive STR instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ __STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) { uint32_t result; __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); return(result); } /** \brief STR Exclusive (32 bit) \details Executes a exclusive STR instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ __STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) { uint32_t result; __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); return(result); } /** \brief Remove the exclusive lock \details Removes the exclusive lock which is created by LDREX. */ __STATIC_FORCEINLINE void __CLREX(void) { __ASM volatile ("clrex" ::: "memory"); } #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) /** \brief Signed Saturate \details Saturates a signed value. \param [in] ARG1 Value to be saturated \param [in] ARG2 Bit position to saturate to (1..32) \return Saturated value */ #define __SSAT(ARG1, ARG2) \ __extension__ \ ({ \ int32_t __RES, __ARG1 = (ARG1); \ __ASM volatile ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ __RES; \ }) /** \brief Unsigned Saturate \details Saturates an unsigned value. \param [in] ARG1 Value to be saturated \param [in] ARG2 Bit position to saturate to (0..31) \return Saturated value */ #define __USAT(ARG1, ARG2) \ __extension__ \ ({ \ uint32_t __RES, __ARG1 = (ARG1); \ __ASM volatile ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ __RES; \ }) /** \brief Rotate Right with Extend (32 bit) \details Moves each bit of a bitstring right by one bit. The carry input is shifted in at the left end of the bitstring. \param [in] value Value to rotate \return Rotated value */ __STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) { uint32_t result; __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); return(result); } /** \brief LDRT Unprivileged (8 bit) \details Executes a Unprivileged LDRT instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ __STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) { uint32_t result; #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); #else /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not accepted by assembler. So has to use following less efficient pattern. */ __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); #endif return ((uint8_t) result); /* Add explicit type cast here */ } /** \brief LDRT Unprivileged (16 bit) \details Executes a Unprivileged LDRT instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ __STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) { uint32_t result; #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); #else /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not accepted by assembler. So has to use following less efficient pattern. */ __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); #endif return ((uint16_t) result); /* Add explicit type cast here */ } /** \brief LDRT Unprivileged (32 bit) \details Executes a Unprivileged LDRT instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ __STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) { uint32_t result; __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); return(result); } /** \brief STRT Unprivileged (8 bit) \details Executes a Unprivileged STRT instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) { __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } /** \brief STRT Unprivileged (16 bit) \details Executes a Unprivileged STRT instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) { __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } /** \brief STRT Unprivileged (32 bit) \details Executes a Unprivileged STRT instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) { __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); } #else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ /** \brief Signed Saturate \details Saturates a signed value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (1..32) \return Saturated value */ __STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) { if ((sat >= 1U) && (sat <= 32U)) { const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); const int32_t min = -1 - max ; if (val > max) { return max; } else if (val < min) { return min; } } return val; } /** \brief Unsigned Saturate \details Saturates an unsigned value. \param [in] value Value to be saturated \param [in] sat Bit position to saturate to (0..31) \return Saturated value */ __STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) { if (sat <= 31U) { const uint32_t max = ((1U << sat) - 1U); if (val > (int32_t)max) { return max; } else if (val < 0) { return 0U; } } return (uint32_t)val; } #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) /** \brief Load-Acquire (8 bit) \details Executes a LDAB instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ __STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) { uint32_t result; __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return ((uint8_t) result); } /** \brief Load-Acquire (16 bit) \details Executes a LDAH instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ __STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) { uint32_t result; __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return ((uint16_t) result); } /** \brief Load-Acquire (32 bit) \details Executes a LDA instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ __STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) { uint32_t result; __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return(result); } /** \brief Store-Release (8 bit) \details Executes a STLB instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) { __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } /** \brief Store-Release (16 bit) \details Executes a STLH instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) { __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } /** \brief Store-Release (32 bit) \details Executes a STL instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location */ __STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) { __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } /** \brief Load-Acquire Exclusive (8 bit) \details Executes a LDAB exclusive instruction for 8 bit value. \param [in] ptr Pointer to data \return value of type uint8_t at (*ptr) */ __STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) { uint32_t result; __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return ((uint8_t) result); } /** \brief Load-Acquire Exclusive (16 bit) \details Executes a LDAH exclusive instruction for 16 bit values. \param [in] ptr Pointer to data \return value of type uint16_t at (*ptr) */ __STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) { uint32_t result; __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return ((uint16_t) result); } /** \brief Load-Acquire Exclusive (32 bit) \details Executes a LDA exclusive instruction for 32 bit values. \param [in] ptr Pointer to data \return value of type uint32_t at (*ptr) */ __STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) { uint32_t result; __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); return(result); } /** \brief Store-Release Exclusive (8 bit) \details Executes a STLB exclusive instruction for 8 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ __STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) { uint32_t result; __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); return(result); } /** \brief Store-Release Exclusive (16 bit) \details Executes a STLH exclusive instruction for 16 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ __STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) { uint32_t result; __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); return(result); } /** \brief Store-Release Exclusive (32 bit) \details Executes a STL exclusive instruction for 32 bit values. \param [in] value Value to store \param [in] ptr Pointer to location \return 0 Function succeeded \return 1 Function failed */ __STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) { uint32_t result; __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); return(result); } #endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ /*@}*/ /* end of group CMSIS_Core_InstructionInterface */ /* ################### Compiler specific Intrinsics ########################### */ /** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics Access to dedicated SIMD instructions @{ */ #if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) __STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) { uint32_t result; __ASM ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); return(result); } #define __SSAT16(ARG1, ARG2) \ ({ \ int32_t __RES, __ARG1 = (ARG1); \ __ASM volatile ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ __RES; \ }) #define __USAT16(ARG1, ARG2) \ ({ \ uint32_t __RES, __ARG1 = (ARG1); \ __ASM volatile ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ __RES; \ }) __STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) { uint32_t result; __ASM ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); return(result); } __STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) { uint32_t result; __ASM ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); return(result); } __STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) { uint32_t result; __ASM ("sxtb16 %0, %1, ROR %2" : "=r" (result) : "r" (op1), "i" (rotate) ); return result; } __STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) { uint32_t result; __ASM ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) { uint32_t result; __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) { uint32_t result; __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); return(result); } __STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) { union llreg_u{ uint32_t w32[2]; uint64_t w64; } llr; llr.w64 = acc; #ifndef __ARMEB__ /* Little endian */ __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); #else /* Big endian */ __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); #endif return(llr.w64); } __STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) { union llreg_u{ uint32_t w32[2]; uint64_t w64; } llr; llr.w64 = acc; #ifndef __ARMEB__ /* Little endian */ __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); #else /* Big endian */ __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); #endif return(llr.w64); } __STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) { uint32_t result; __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); return(result); } __STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) { uint32_t result; __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); return(result); } __STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) { union llreg_u{ uint32_t w32[2]; uint64_t w64; } llr; llr.w64 = acc; #ifndef __ARMEB__ /* Little endian */ __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); #else /* Big endian */ __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); #endif return(llr.w64); } __STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) { union llreg_u{ uint32_t w32[2]; uint64_t w64; } llr; llr.w64 = acc; #ifndef __ARMEB__ /* Little endian */ __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); #else /* Big endian */ __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); #endif return(llr.w64); } __STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) { uint32_t result; __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) { int32_t result; __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } __STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) { int32_t result; __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); return(result); } #if 0 #define __PKHBT(ARG1,ARG2,ARG3) \ ({ \ uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ __RES; \ }) #define __PKHTB(ARG1,ARG2,ARG3) \ ({ \ uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ if (ARG3 == 0) \ __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ else \ __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ __RES; \ }) #endif #define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) #define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) __STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) { int32_t result; __ASM ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); return(result); } #endif /* (__ARM_FEATURE_DSP == 1) */ /*@} end of group CMSIS_SIMD_intrinsics */ #pragma GCC diagnostic pop #endif /* __CMSIS_GCC_H */ ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include/cmsis_iccarm.h ================================================ /**************************************************************************//** * @file cmsis_iccarm.h * @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file * @version V5.2.0 * @date 28. January 2020 ******************************************************************************/ //------------------------------------------------------------------------------ // // Copyright (c) 2017-2019 IAR Systems // Copyright (c) 2017-2019 Arm Limited. All rights reserved. // // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License") // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //------------------------------------------------------------------------------ #ifndef __CMSIS_ICCARM_H__ #define __CMSIS_ICCARM_H__ #ifndef __ICCARM__ #error This file should only be compiled by ICCARM #endif #pragma system_include #define __IAR_FT _Pragma("inline=forced") __intrinsic #if (__VER__ >= 8000000) #define __ICCARM_V8 1 #else #define __ICCARM_V8 0 #endif #ifndef __ALIGNED #if __ICCARM_V8 #define __ALIGNED(x) __attribute__((aligned(x))) #elif (__VER__ >= 7080000) /* Needs IAR language extensions */ #define __ALIGNED(x) __attribute__((aligned(x))) #else #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. #define __ALIGNED(x) #endif #endif /* Define compiler macros for CPU architecture, used in CMSIS 5. */ #if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ /* Macros already defined */ #else #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) #define __ARM_ARCH_8M_MAIN__ 1 #elif defined(__ARM8M_BASELINE__) #define __ARM_ARCH_8M_BASE__ 1 #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' #if __ARM_ARCH == 6 #define __ARM_ARCH_6M__ 1 #elif __ARM_ARCH == 7 #if __ARM_FEATURE_DSP #define __ARM_ARCH_7EM__ 1 #else #define __ARM_ARCH_7M__ 1 #endif #endif /* __ARM_ARCH */ #endif /* __ARM_ARCH_PROFILE == 'M' */ #endif /* Alternativ core deduction for older ICCARM's */ #if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) #define __ARM_ARCH_6M__ 1 #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) #define __ARM_ARCH_7M__ 1 #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) #define __ARM_ARCH_7EM__ 1 #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) #define __ARM_ARCH_8M_BASE__ 1 #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) #define __ARM_ARCH_8M_MAIN__ 1 #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) #define __ARM_ARCH_8M_MAIN__ 1 #else #error "Unknown target." #endif #endif #if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 #define __IAR_M0_FAMILY 1 #elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 #define __IAR_M0_FAMILY 1 #else #define __IAR_M0_FAMILY 0 #endif #ifndef __ASM #define __ASM __asm #endif #ifndef __COMPILER_BARRIER #define __COMPILER_BARRIER() __ASM volatile("":::"memory") #endif #ifndef __INLINE #define __INLINE inline #endif #ifndef __NO_RETURN #if __ICCARM_V8 #define __NO_RETURN __attribute__((__noreturn__)) #else #define __NO_RETURN _Pragma("object_attribute=__noreturn") #endif #endif #ifndef __PACKED #if __ICCARM_V8 #define __PACKED __attribute__((packed, aligned(1))) #else /* Needs IAR language extensions */ #define __PACKED __packed #endif #endif #ifndef __PACKED_STRUCT #if __ICCARM_V8 #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) #else /* Needs IAR language extensions */ #define __PACKED_STRUCT __packed struct #endif #endif #ifndef __PACKED_UNION #if __ICCARM_V8 #define __PACKED_UNION union __attribute__((packed, aligned(1))) #else /* Needs IAR language extensions */ #define __PACKED_UNION __packed union #endif #endif #ifndef __RESTRICT #if __ICCARM_V8 #define __RESTRICT __restrict #else /* Needs IAR language extensions */ #define __RESTRICT restrict #endif #endif #ifndef __STATIC_INLINE #define __STATIC_INLINE static inline #endif #ifndef __FORCEINLINE #define __FORCEINLINE _Pragma("inline=forced") #endif #ifndef __STATIC_FORCEINLINE #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE #endif #ifndef __UNALIGNED_UINT16_READ #pragma language=save #pragma language=extended __IAR_FT uint16_t __iar_uint16_read(void const *ptr) { return *(__packed uint16_t*)(ptr); } #pragma language=restore #define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) #endif #ifndef __UNALIGNED_UINT16_WRITE #pragma language=save #pragma language=extended __IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) { *(__packed uint16_t*)(ptr) = val;; } #pragma language=restore #define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) #endif #ifndef __UNALIGNED_UINT32_READ #pragma language=save #pragma language=extended __IAR_FT uint32_t __iar_uint32_read(void const *ptr) { return *(__packed uint32_t*)(ptr); } #pragma language=restore #define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) #endif #ifndef __UNALIGNED_UINT32_WRITE #pragma language=save #pragma language=extended __IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) { *(__packed uint32_t*)(ptr) = val;; } #pragma language=restore #define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) #endif #ifndef __UNALIGNED_UINT32 /* deprecated */ #pragma language=save #pragma language=extended __packed struct __iar_u32 { uint32_t v; }; #pragma language=restore #define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) #endif #ifndef __USED #if __ICCARM_V8 #define __USED __attribute__((used)) #else #define __USED _Pragma("__root") #endif #endif #ifndef __WEAK #if __ICCARM_V8 #define __WEAK __attribute__((weak)) #else #define __WEAK _Pragma("__weak") #endif #endif #ifndef __PROGRAM_START #define __PROGRAM_START __iar_program_start #endif #ifndef __INITIAL_SP #define __INITIAL_SP CSTACK$$Limit #endif #ifndef __STACK_LIMIT #define __STACK_LIMIT CSTACK$$Base #endif #ifndef __VECTOR_TABLE #define __VECTOR_TABLE __vector_table #endif #ifndef __VECTOR_TABLE_ATTRIBUTE #define __VECTOR_TABLE_ATTRIBUTE @".intvec" #endif #ifndef __ICCARM_INTRINSICS_VERSION__ #define __ICCARM_INTRINSICS_VERSION__ 0 #endif #if __ICCARM_INTRINSICS_VERSION__ == 2 #if defined(__CLZ) #undef __CLZ #endif #if defined(__REVSH) #undef __REVSH #endif #if defined(__RBIT) #undef __RBIT #endif #if defined(__SSAT) #undef __SSAT #endif #if defined(__USAT) #undef __USAT #endif #include "iccarm_builtin.h" #define __disable_fault_irq __iar_builtin_disable_fiq #define __disable_irq __iar_builtin_disable_interrupt #define __enable_fault_irq __iar_builtin_enable_fiq #define __enable_irq __iar_builtin_enable_interrupt #define __arm_rsr __iar_builtin_rsr #define __arm_wsr __iar_builtin_wsr #define __get_APSR() (__arm_rsr("APSR")) #define __get_BASEPRI() (__arm_rsr("BASEPRI")) #define __get_CONTROL() (__arm_rsr("CONTROL")) #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) #define __get_FPSCR() (__arm_rsr("FPSCR")) #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) #else #define __get_FPSCR() ( 0 ) #define __set_FPSCR(VALUE) ((void)VALUE) #endif #define __get_IPSR() (__arm_rsr("IPSR")) #define __get_MSP() (__arm_rsr("MSP")) #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure MSPLIM is RAZ/WI #define __get_MSPLIM() (0U) #else #define __get_MSPLIM() (__arm_rsr("MSPLIM")) #endif #define __get_PRIMASK() (__arm_rsr("PRIMASK")) #define __get_PSP() (__arm_rsr("PSP")) #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI #define __get_PSPLIM() (0U) #else #define __get_PSPLIM() (__arm_rsr("PSPLIM")) #endif #define __get_xPSR() (__arm_rsr("xPSR")) #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) #define __set_CONTROL(VALUE) (__arm_wsr("CONTROL", (VALUE))) #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure MSPLIM is RAZ/WI #define __set_MSPLIM(VALUE) ((void)(VALUE)) #else #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) #endif #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI #define __set_PSPLIM(VALUE) ((void)(VALUE)) #else #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) #endif #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) #define __TZ_set_CONTROL_NS(VALUE) (__arm_wsr("CONTROL_NS", (VALUE))) #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI #define __TZ_get_PSPLIM_NS() (0U) #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) #else #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) #endif #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) #define __NOP __iar_builtin_no_operation #define __CLZ __iar_builtin_CLZ #define __CLREX __iar_builtin_CLREX #define __DMB __iar_builtin_DMB #define __DSB __iar_builtin_DSB #define __ISB __iar_builtin_ISB #define __LDREXB __iar_builtin_LDREXB #define __LDREXH __iar_builtin_LDREXH #define __LDREXW __iar_builtin_LDREX #define __RBIT __iar_builtin_RBIT #define __REV __iar_builtin_REV #define __REV16 __iar_builtin_REV16 __IAR_FT int16_t __REVSH(int16_t val) { return (int16_t) __iar_builtin_REVSH(val); } #define __ROR __iar_builtin_ROR #define __RRX __iar_builtin_RRX #define __SEV __iar_builtin_SEV #if !__IAR_M0_FAMILY #define __SSAT __iar_builtin_SSAT #endif #define __STREXB __iar_builtin_STREXB #define __STREXH __iar_builtin_STREXH #define __STREXW __iar_builtin_STREX #if !__IAR_M0_FAMILY #define __USAT __iar_builtin_USAT #endif #define __WFE __iar_builtin_WFE #define __WFI __iar_builtin_WFI #if __ARM_MEDIA__ #define __SADD8 __iar_builtin_SADD8 #define __QADD8 __iar_builtin_QADD8 #define __SHADD8 __iar_builtin_SHADD8 #define __UADD8 __iar_builtin_UADD8 #define __UQADD8 __iar_builtin_UQADD8 #define __UHADD8 __iar_builtin_UHADD8 #define __SSUB8 __iar_builtin_SSUB8 #define __QSUB8 __iar_builtin_QSUB8 #define __SHSUB8 __iar_builtin_SHSUB8 #define __USUB8 __iar_builtin_USUB8 #define __UQSUB8 __iar_builtin_UQSUB8 #define __UHSUB8 __iar_builtin_UHSUB8 #define __SADD16 __iar_builtin_SADD16 #define __QADD16 __iar_builtin_QADD16 #define __SHADD16 __iar_builtin_SHADD16 #define __UADD16 __iar_builtin_UADD16 #define __UQADD16 __iar_builtin_UQADD16 #define __UHADD16 __iar_builtin_UHADD16 #define __SSUB16 __iar_builtin_SSUB16 #define __QSUB16 __iar_builtin_QSUB16 #define __SHSUB16 __iar_builtin_SHSUB16 #define __USUB16 __iar_builtin_USUB16 #define __UQSUB16 __iar_builtin_UQSUB16 #define __UHSUB16 __iar_builtin_UHSUB16 #define __SASX __iar_builtin_SASX #define __QASX __iar_builtin_QASX #define __SHASX __iar_builtin_SHASX #define __UASX __iar_builtin_UASX #define __UQASX __iar_builtin_UQASX #define __UHASX __iar_builtin_UHASX #define __SSAX __iar_builtin_SSAX #define __QSAX __iar_builtin_QSAX #define __SHSAX __iar_builtin_SHSAX #define __USAX __iar_builtin_USAX #define __UQSAX __iar_builtin_UQSAX #define __UHSAX __iar_builtin_UHSAX #define __USAD8 __iar_builtin_USAD8 #define __USADA8 __iar_builtin_USADA8 #define __SSAT16 __iar_builtin_SSAT16 #define __USAT16 __iar_builtin_USAT16 #define __UXTB16 __iar_builtin_UXTB16 #define __UXTAB16 __iar_builtin_UXTAB16 #define __SXTB16 __iar_builtin_SXTB16 #define __SXTAB16 __iar_builtin_SXTAB16 #define __SMUAD __iar_builtin_SMUAD #define __SMUADX __iar_builtin_SMUADX #define __SMMLA __iar_builtin_SMMLA #define __SMLAD __iar_builtin_SMLAD #define __SMLADX __iar_builtin_SMLADX #define __SMLALD __iar_builtin_SMLALD #define __SMLALDX __iar_builtin_SMLALDX #define __SMUSD __iar_builtin_SMUSD #define __SMUSDX __iar_builtin_SMUSDX #define __SMLSD __iar_builtin_SMLSD #define __SMLSDX __iar_builtin_SMLSDX #define __SMLSLD __iar_builtin_SMLSLD #define __SMLSLDX __iar_builtin_SMLSLDX #define __SEL __iar_builtin_SEL #define __QADD __iar_builtin_QADD #define __QSUB __iar_builtin_QSUB #define __PKHBT __iar_builtin_PKHBT #define __PKHTB __iar_builtin_PKHTB #endif #else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ #if __IAR_M0_FAMILY /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ #define __CLZ __cmsis_iar_clz_not_active #define __SSAT __cmsis_iar_ssat_not_active #define __USAT __cmsis_iar_usat_not_active #define __RBIT __cmsis_iar_rbit_not_active #define __get_APSR __cmsis_iar_get_APSR_not_active #endif #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) #define __get_FPSCR __cmsis_iar_get_FPSR_not_active #define __set_FPSCR __cmsis_iar_set_FPSR_not_active #endif #ifdef __INTRINSICS_INCLUDED #error intrinsics.h is already included previously! #endif #include #if __IAR_M0_FAMILY /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ #undef __CLZ #undef __SSAT #undef __USAT #undef __RBIT #undef __get_APSR __STATIC_INLINE uint8_t __CLZ(uint32_t data) { if (data == 0U) { return 32U; } uint32_t count = 0U; uint32_t mask = 0x80000000U; while ((data & mask) == 0U) { count += 1U; mask = mask >> 1U; } return count; } __STATIC_INLINE uint32_t __RBIT(uint32_t v) { uint8_t sc = 31U; uint32_t r = v; for (v >>= 1U; v; v >>= 1U) { r <<= 1U; r |= v & 1U; sc--; } return (r << sc); } __STATIC_INLINE uint32_t __get_APSR(void) { uint32_t res; __asm("MRS %0,APSR" : "=r" (res)); return res; } #endif #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) #undef __get_FPSCR #undef __set_FPSCR #define __get_FPSCR() (0) #define __set_FPSCR(VALUE) ((void)VALUE) #endif #pragma diag_suppress=Pe940 #pragma diag_suppress=Pe177 #define __enable_irq __enable_interrupt #define __disable_irq __disable_interrupt #define __NOP __no_operation #define __get_xPSR __get_PSR #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) { return __LDREX((unsigned long *)ptr); } __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) { return __STREX(value, (unsigned long *)ptr); } #endif /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ #if (__CORTEX_M >= 0x03) __IAR_FT uint32_t __RRX(uint32_t value) { uint32_t result; __ASM volatile("RRX %0, %1" : "=r"(result) : "r" (value)); return(result); } __IAR_FT void __set_BASEPRI_MAX(uint32_t value) { __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); } #define __enable_fault_irq __enable_fiq #define __disable_fault_irq __disable_fiq #endif /* (__CORTEX_M >= 0x03) */ __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) { return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); } #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) __IAR_FT uint32_t __get_MSPLIM(void) { uint32_t res; #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure MSPLIM is RAZ/WI res = 0U; #else __asm volatile("MRS %0,MSPLIM" : "=r" (res)); #endif return res; } __IAR_FT void __set_MSPLIM(uint32_t value) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure MSPLIM is RAZ/WI (void)value; #else __asm volatile("MSR MSPLIM,%0" :: "r" (value)); #endif } __IAR_FT uint32_t __get_PSPLIM(void) { uint32_t res; #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI res = 0U; #else __asm volatile("MRS %0,PSPLIM" : "=r" (res)); #endif return res; } __IAR_FT void __set_PSPLIM(uint32_t value) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI (void)value; #else __asm volatile("MSR PSPLIM,%0" :: "r" (value)); #endif } __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) { uint32_t res; __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); return res; } __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) { __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); } __IAR_FT uint32_t __TZ_get_PSP_NS(void) { uint32_t res; __asm volatile("MRS %0,PSP_NS" : "=r" (res)); return res; } __IAR_FT void __TZ_set_PSP_NS(uint32_t value) { __asm volatile("MSR PSP_NS,%0" :: "r" (value)); } __IAR_FT uint32_t __TZ_get_MSP_NS(void) { uint32_t res; __asm volatile("MRS %0,MSP_NS" : "=r" (res)); return res; } __IAR_FT void __TZ_set_MSP_NS(uint32_t value) { __asm volatile("MSR MSP_NS,%0" :: "r" (value)); } __IAR_FT uint32_t __TZ_get_SP_NS(void) { uint32_t res; __asm volatile("MRS %0,SP_NS" : "=r" (res)); return res; } __IAR_FT void __TZ_set_SP_NS(uint32_t value) { __asm volatile("MSR SP_NS,%0" :: "r" (value)); } __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) { uint32_t res; __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); return res; } __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) { __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); } __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) { uint32_t res; __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); return res; } __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) { __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); } __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) { uint32_t res; __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); return res; } __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) { __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); } __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) { uint32_t res; #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI res = 0U; #else __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); #endif return res; } __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) { #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) // without main extensions, the non-secure PSPLIM is RAZ/WI (void)value; #else __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); #endif } __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) { uint32_t res; __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); return res; } __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) { __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); } #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ #endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ #define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) #if __IAR_M0_FAMILY __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) { if ((sat >= 1U) && (sat <= 32U)) { const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); const int32_t min = -1 - max ; if (val > max) { return max; } else if (val < min) { return min; } } return val; } __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) { if (sat <= 31U) { const uint32_t max = ((1U << sat) - 1U); if (val > (int32_t)max) { return max; } else if (val < 0) { return 0U; } } return (uint32_t)val; } #endif #if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) { uint32_t res; __ASM volatile ("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); return ((uint8_t)res); } __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) { uint32_t res; __ASM volatile ("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); return ((uint16_t)res); } __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) { uint32_t res; __ASM volatile ("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); return res; } __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) { __ASM volatile ("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); } __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) { __ASM volatile ("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); } __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) { __ASM volatile ("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); } #endif /* (__CORTEX_M >= 0x03) */ #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) { uint32_t res; __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); return ((uint8_t)res); } __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) { uint32_t res; __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); return ((uint16_t)res); } __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) { uint32_t res; __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); return res; } __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) { __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); } __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) { __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); } __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) { __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); } __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) { uint32_t res; __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); return ((uint8_t)res); } __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) { uint32_t res; __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); return ((uint16_t)res); } __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) { uint32_t res; __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); return res; } __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) { uint32_t res; __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); return res; } __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) { uint32_t res; __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); return res; } __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) { uint32_t res; __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); return res; } #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ #undef __IAR_FT #undef __IAR_M0_FAMILY #undef __ICCARM_V8 #pragma diag_default=Pe940 #pragma diag_default=Pe177 #define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) #endif /* __CMSIS_ICCARM_H__ */ ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include/cmsis_version.h ================================================ /**************************************************************************//** * @file cmsis_version.h * @brief CMSIS Core(M) Version definitions * @version V5.0.4 * @date 23. July 2019 ******************************************************************************/ /* * Copyright (c) 2009-2019 ARM Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #if defined ( __ICCARM__ ) #pragma system_include /* treat file as system include file for MISRA check */ #elif defined (__clang__) #pragma clang system_header /* treat file as system include file */ #endif #ifndef __CMSIS_VERSION_H #define __CMSIS_VERSION_H /* CMSIS Version definitions */ #define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ #define __CM_CMSIS_VERSION_SUB ( 4U) /*!< [15:0] CMSIS Core(M) sub version */ #define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ #endif ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include/core_cm0plus.h ================================================ /**************************************************************************//** * @file core_cm0plus.h * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File * @version V5.0.9 * @date 21. August 2019 ******************************************************************************/ /* * Copyright (c) 2009-2019 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #if defined ( __ICCARM__ ) #pragma system_include /* treat file as system include file for MISRA check */ #elif defined (__clang__) #pragma clang system_header /* treat file as system include file */ #endif #ifndef __CORE_CM0PLUS_H_GENERIC #define __CORE_CM0PLUS_H_GENERIC #include #ifdef __cplusplus extern "C" { #endif /** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions CMSIS violates the following MISRA-C:2004 rules: \li Required Rule 8.5, object/function definition in header file.
Function definitions in header files are used to allow 'inlining'. \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
Unions are used for effective representation of core registers. \li Advisory Rule 19.7, Function-like macro defined.
Function-like macros are used to allow more efficient code. */ /******************************************************************************* * CMSIS definitions ******************************************************************************/ /** \ingroup Cortex-M0+ @{ */ #include "cmsis_version.h" /* CMSIS CM0+ definitions */ #define __CM0PLUS_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ #define __CM0PLUS_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ #define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16U) | \ __CM0PLUS_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ #define __CORTEX_M (0U) /*!< Cortex-M Core */ /** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all */ #define __FPU_USED 0U #if defined ( __CC_ARM ) #if defined __TARGET_FPU_VFP #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" #endif #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) #if defined __ARM_FP #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" #endif #elif defined ( __GNUC__ ) #if defined (__VFP_FP__) && !defined(__SOFTFP__) #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" #endif #elif defined ( __ICCARM__ ) #if defined __ARMVFP__ #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" #endif #elif defined ( __TI_ARM__ ) #if defined __TI_VFP_SUPPORT__ #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" #endif #elif defined ( __TASKING__ ) #if defined __FPU_VFP__ #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" #endif #elif defined ( __CSMC__ ) #if ( __CSMC__ & 0x400U) #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" #endif #endif #include "cmsis_compiler.h" /* CMSIS compiler specific defines */ #ifdef __cplusplus } #endif #endif /* __CORE_CM0PLUS_H_GENERIC */ #ifndef __CMSIS_GENERIC #ifndef __CORE_CM0PLUS_H_DEPENDANT #define __CORE_CM0PLUS_H_DEPENDANT #ifdef __cplusplus extern "C" { #endif /* check device defines and use defaults */ #if defined __CHECK_DEVICE_DEFINES #ifndef __CM0PLUS_REV #define __CM0PLUS_REV 0x0000U #warning "__CM0PLUS_REV not defined in device header file; using default!" #endif #ifndef __MPU_PRESENT #define __MPU_PRESENT 0U #warning "__MPU_PRESENT not defined in device header file; using default!" #endif #ifndef __VTOR_PRESENT #define __VTOR_PRESENT 0U #warning "__VTOR_PRESENT not defined in device header file; using default!" #endif #ifndef __NVIC_PRIO_BITS #define __NVIC_PRIO_BITS 2U #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" #endif #ifndef __Vendor_SysTickConfig #define __Vendor_SysTickConfig 0U #warning "__Vendor_SysTickConfig not defined in device header file; using default!" #endif #endif /* IO definitions (access restrictions to peripheral registers) */ /** \defgroup CMSIS_glob_defs CMSIS Global Defines IO Type Qualifiers are used \li to specify the access to peripheral variables. \li for automatic generation of peripheral register debug information. */ #ifdef __cplusplus #define __I volatile /*!< Defines 'read only' permissions */ #else #define __I volatile const /*!< Defines 'read only' permissions */ #endif #define __O volatile /*!< Defines 'write only' permissions */ #define __IO volatile /*!< Defines 'read / write' permissions */ /* following defines should be used for structure members */ #define __IM volatile const /*! Defines 'read only' structure member permissions */ #define __OM volatile /*! Defines 'write only' structure member permissions */ #define __IOM volatile /*! Defines 'read / write' structure member permissions */ /*@} end of group Cortex-M0+ */ /******************************************************************************* * Register Abstraction Core Register contain: - Core Register - Core NVIC Register - Core SCB Register - Core SysTick Register - Core MPU Register ******************************************************************************/ /** \defgroup CMSIS_core_register Defines and Type Definitions \brief Type definitions and defines for Cortex-M processor based devices. */ /** \ingroup CMSIS_core_register \defgroup CMSIS_CORE Status and Control Registers \brief Core Register type definitions. @{ */ /** \brief Union type to access the Application Program Status Register (APSR). */ typedef union { struct { uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ uint32_t C:1; /*!< bit: 29 Carry condition code flag */ uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ uint32_t N:1; /*!< bit: 31 Negative condition code flag */ } b; /*!< Structure used for bit access */ uint32_t w; /*!< Type used for word access */ } APSR_Type; /* APSR Register Definitions */ #define APSR_N_Pos 31U /*!< APSR: N Position */ #define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ #define APSR_Z_Pos 30U /*!< APSR: Z Position */ #define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ #define APSR_C_Pos 29U /*!< APSR: C Position */ #define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ #define APSR_V_Pos 28U /*!< APSR: V Position */ #define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ /** \brief Union type to access the Interrupt Program Status Register (IPSR). */ typedef union { struct { uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ } b; /*!< Structure used for bit access */ uint32_t w; /*!< Type used for word access */ } IPSR_Type; /* IPSR Register Definitions */ #define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ #define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ /** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). */ typedef union { struct { uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ uint32_t C:1; /*!< bit: 29 Carry condition code flag */ uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ uint32_t N:1; /*!< bit: 31 Negative condition code flag */ } b; /*!< Structure used for bit access */ uint32_t w; /*!< Type used for word access */ } xPSR_Type; /* xPSR Register Definitions */ #define xPSR_N_Pos 31U /*!< xPSR: N Position */ #define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ #define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ #define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ #define xPSR_C_Pos 29U /*!< xPSR: C Position */ #define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ #define xPSR_V_Pos 28U /*!< xPSR: V Position */ #define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ #define xPSR_T_Pos 24U /*!< xPSR: T Position */ #define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ #define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ #define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ /** \brief Union type to access the Control Registers (CONTROL). */ typedef union { struct { uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ } b; /*!< Structure used for bit access */ uint32_t w; /*!< Type used for word access */ } CONTROL_Type; /* CONTROL Register Definitions */ #define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ #define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ #define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ #define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ /*@} end of group CMSIS_CORE */ /** \ingroup CMSIS_core_register \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) \brief Type definitions for the NVIC Registers @{ */ /** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). */ typedef struct { __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ uint32_t RESERVED0[31U]; __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ uint32_t RESERVED1[31U]; __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ uint32_t RESERVED2[31U]; __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ uint32_t RESERVED3[31U]; uint32_t RESERVED4[64U]; __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ } NVIC_Type; /*@} end of group CMSIS_NVIC */ /** \ingroup CMSIS_core_register \defgroup CMSIS_SCB System Control Block (SCB) \brief Type definitions for the System Control Block Registers @{ */ /** \brief Structure type to access the System Control Block (SCB). */ typedef struct { __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ #if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ #else uint32_t RESERVED0; #endif __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ uint32_t RESERVED1; __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ } SCB_Type; /* SCB CPUID Register Definitions */ #define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ #define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ #define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ #define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ #define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ #define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ #define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ #define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ #define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ #define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ /* SCB Interrupt Control State Register Definitions */ #define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ #define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ #define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ #define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ #define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ #define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ #define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ #define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ #define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ #define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ #define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ #define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ #define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ #define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ #define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ #define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ #define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ #define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ #if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) /* SCB Interrupt Control State Register Definitions */ #define SCB_VTOR_TBLOFF_Pos 8U /*!< SCB VTOR: TBLOFF Position */ #define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ #endif /* SCB Application Interrupt and Reset Control Register Definitions */ #define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ #define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ #define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ #define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ #define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ #define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ #define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ #define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ #define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ #define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ /* SCB System Control Register Definitions */ #define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ #define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ #define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ #define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ #define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ #define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ /* SCB Configuration Control Register Definitions */ #define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ #define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ #define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ #define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ /* SCB System Handler Control and State Register Definitions */ #define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ #define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ /*@} end of group CMSIS_SCB */ /** \ingroup CMSIS_core_register \defgroup CMSIS_SysTick System Tick Timer (SysTick) \brief Type definitions for the System Timer Registers. @{ */ /** \brief Structure type to access the System Timer (SysTick). */ typedef struct { __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ } SysTick_Type; /* SysTick Control / Status Register Definitions */ #define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ #define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ #define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ #define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ #define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ #define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ #define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ #define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ /* SysTick Reload Register Definitions */ #define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ #define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ /* SysTick Current Register Definitions */ #define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ #define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ /* SysTick Calibration Register Definitions */ #define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ #define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ #define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ #define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ #define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ #define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ /*@} end of group CMSIS_SysTick */ #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) /** \ingroup CMSIS_core_register \defgroup CMSIS_MPU Memory Protection Unit (MPU) \brief Type definitions for the Memory Protection Unit (MPU) @{ */ /** \brief Structure type to access the Memory Protection Unit (MPU). */ typedef struct { __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ } MPU_Type; #define MPU_TYPE_RALIASES 1U /* MPU Type Register Definitions */ #define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ #define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ #define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ #define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ #define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ #define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ /* MPU Control Register Definitions */ #define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ #define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ #define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ #define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ #define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ #define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ /* MPU Region Number Register Definitions */ #define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ #define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ /* MPU Region Base Address Register Definitions */ #define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ #define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ #define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ #define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ #define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ #define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ /* MPU Region Attribute and Size Register Definitions */ #define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ #define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ #define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ #define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ #define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ #define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ #define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ #define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ #define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ #define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ #define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ #define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ #define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ #define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ #define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ #define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ #define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ #define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ #define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ #define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ /*@} end of group CMSIS_MPU */ #endif /** \ingroup CMSIS_core_register \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. Therefore they are not covered by the Cortex-M0+ header file. @{ */ /*@} end of group CMSIS_CoreDebug */ /** \ingroup CMSIS_core_register \defgroup CMSIS_core_bitfield Core register bit field macros \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). @{ */ /** \brief Mask and shift a bit field value for use in a register bit range. \param[in] field Name of the register bit field. \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. \return Masked and shifted value. */ #define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) /** \brief Mask and shift a register value to extract a bit filed value. \param[in] field Name of the register bit field. \param[in] value Value of register. This parameter is interpreted as an uint32_t type. \return Masked and shifted bit field value. */ #define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) /*@} end of group CMSIS_core_bitfield */ /** \ingroup CMSIS_core_register \defgroup CMSIS_core_base Core Definitions \brief Definitions for base addresses, unions, and structures. @{ */ /* Memory mapping of Core Hardware */ #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ #endif /*@} */ /******************************************************************************* * Hardware Abstraction Layer Core Function Interface contains: - Core NVIC Functions - Core SysTick Functions - Core Register Access Functions ******************************************************************************/ /** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference */ /* ########################## NVIC functions #################################### */ /** \ingroup CMSIS_Core_FunctionInterface \defgroup CMSIS_Core_NVICFunctions NVIC Functions \brief Functions that manage interrupts and exceptions via the NVIC. @{ */ #ifdef CMSIS_NVIC_VIRTUAL #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" #endif #include CMSIS_NVIC_VIRTUAL_HEADER_FILE #else #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping #define NVIC_EnableIRQ __NVIC_EnableIRQ #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ #define NVIC_DisableIRQ __NVIC_DisableIRQ #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ /*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0+ */ #define NVIC_SetPriority __NVIC_SetPriority #define NVIC_GetPriority __NVIC_GetPriority #define NVIC_SystemReset __NVIC_SystemReset #endif /* CMSIS_NVIC_VIRTUAL */ #ifdef CMSIS_VECTAB_VIRTUAL #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" #endif #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE #else #define NVIC_SetVector __NVIC_SetVector #define NVIC_GetVector __NVIC_GetVector #endif /* (CMSIS_VECTAB_VIRTUAL) */ #define NVIC_USER_IRQ_OFFSET 16 /* The following EXC_RETURN values are saved the LR on exception entry */ #define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ #define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ #define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ /* Interrupt Priorities are WORD accessible only under Armv6-M */ /* The following MACROS handle generation of the register offset and byte masks */ #define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) #define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) #define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) #define __NVIC_SetPriorityGrouping(X) (void)(X) #define __NVIC_GetPriorityGrouping() (0U) /** \brief Enable Interrupt \details Enables a device specific interrupt in the NVIC interrupt controller. \param [in] IRQn Device specific interrupt number. \note IRQn must not be negative. */ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) { if ((int32_t)(IRQn) >= 0) { __COMPILER_BARRIER(); NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); __COMPILER_BARRIER(); } } /** \brief Get Interrupt Enable status \details Returns a device specific interrupt enable status from the NVIC interrupt controller. \param [in] IRQn Device specific interrupt number. \return 0 Interrupt is not enabled. \return 1 Interrupt is enabled. \note IRQn must not be negative. */ __STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) { if ((int32_t)(IRQn) >= 0) { return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); } else { return(0U); } } /** \brief Disable Interrupt \details Disables a device specific interrupt in the NVIC interrupt controller. \param [in] IRQn Device specific interrupt number. \note IRQn must not be negative. */ __STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) { if ((int32_t)(IRQn) >= 0) { NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); __DSB(); __ISB(); } } /** \brief Get Pending Interrupt \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. \param [in] IRQn Device specific interrupt number. \return 0 Interrupt status is not pending. \return 1 Interrupt status is pending. \note IRQn must not be negative. */ __STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) { if ((int32_t)(IRQn) >= 0) { return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); } else { return(0U); } } /** \brief Set Pending Interrupt \details Sets the pending bit of a device specific interrupt in the NVIC pending register. \param [in] IRQn Device specific interrupt number. \note IRQn must not be negative. */ __STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) { if ((int32_t)(IRQn) >= 0) { NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); } } /** \brief Clear Pending Interrupt \details Clears the pending bit of a device specific interrupt in the NVIC pending register. \param [in] IRQn Device specific interrupt number. \note IRQn must not be negative. */ __STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) { if ((int32_t)(IRQn) >= 0) { NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); } } /** \brief Set Interrupt Priority \details Sets the priority of a device specific interrupt or a processor exception. The interrupt number can be positive to specify a device specific interrupt, or negative to specify a processor exception. \param [in] IRQn Interrupt number. \param [in] priority Priority to set. \note The priority cannot be set for every processor exception. */ __STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) { if ((int32_t)(IRQn) >= 0) { NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); } else { SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); } } /** \brief Get Interrupt Priority \details Reads the priority of a device specific interrupt or a processor exception. The interrupt number can be positive to specify a device specific interrupt, or negative to specify a processor exception. \param [in] IRQn Interrupt number. \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. */ __STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) { if ((int32_t)(IRQn) >= 0) { return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); } else { return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); } } /** \brief Encode Priority \details Encodes the priority for an interrupt with the given priority group, preemptive priority value, and subpriority value. In case of a conflict between priority grouping and available priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. \param [in] PriorityGroup Used priority group. \param [in] PreemptPriority Preemptive priority value (starting from 0). \param [in] SubPriority Subpriority value (starting from 0). \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). */ __STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) { uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ uint32_t PreemptPriorityBits; uint32_t SubPriorityBits; PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); return ( ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) ); } /** \brief Decode Priority \details Decodes an interrupt priority value with a given priority group to preemptive priority value and subpriority value. In case of a conflict between priority grouping and available priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). \param [in] PriorityGroup Used priority group. \param [out] pPreemptPriority Preemptive priority value (starting from 0). \param [out] pSubPriority Subpriority value (starting from 0). */ __STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) { uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ uint32_t PreemptPriorityBits; uint32_t SubPriorityBits; PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); } /** \brief Set Interrupt Vector \details Sets an interrupt vector in SRAM based interrupt vector table. The interrupt number can be positive to specify a device specific interrupt, or negative to specify a processor exception. VTOR must been relocated to SRAM before. If VTOR is not present address 0 must be mapped to SRAM. \param [in] IRQn Interrupt number \param [in] vector Address of interrupt handler function */ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) { #if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) uint32_t *vectors = (uint32_t *)SCB->VTOR; vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; #else uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ *(vectors + (int32_t)IRQn) = vector; /* use pointer arithmetic to access vector */ #endif /* ARM Application Note 321 states that the M0+ does not require the architectural barrier */ } /** \brief Get Interrupt Vector \details Reads an interrupt vector from interrupt vector table. The interrupt number can be positive to specify a device specific interrupt, or negative to specify a processor exception. \param [in] IRQn Interrupt number. \return Address of interrupt handler function */ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) { #if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) uint32_t *vectors = (uint32_t *)SCB->VTOR; return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; #else uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ return *(vectors + (int32_t)IRQn); /* use pointer arithmetic to access vector */ #endif } /** \brief System Reset \details Initiates a system reset request to reset the MCU. */ __NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) { __DSB(); /* Ensure all outstanding memory accesses included buffered write are completed before reset */ SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk); __DSB(); /* Ensure completion of memory access */ for(;;) /* wait until reset */ { __NOP(); } } /*@} end of CMSIS_Core_NVICFunctions */ /* ########################## MPU functions #################################### */ #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) #include "mpu_armv7.h" #endif /* ########################## FPU functions #################################### */ /** \ingroup CMSIS_Core_FunctionInterface \defgroup CMSIS_Core_FpuFunctions FPU Functions \brief Function that provides FPU type. @{ */ /** \brief get FPU type \details returns the FPU type \returns - \b 0: No FPU - \b 1: Single precision FPU - \b 2: Double + Single precision FPU */ __STATIC_INLINE uint32_t SCB_GetFPUType(void) { return 0U; /* No FPU */ } /*@} end of CMSIS_Core_FpuFunctions */ /* ################################## SysTick function ############################################ */ /** \ingroup CMSIS_Core_FunctionInterface \defgroup CMSIS_Core_SysTickFunctions SysTick Functions \brief Functions that configure the System. @{ */ #if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) /** \brief System Tick Configuration \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. Counter is in free running mode to generate periodic interrupts. \param [in] ticks Number of ticks between two interrupts. \return 0 Function succeeded. \return 1 Function failed. \note When the variable __Vendor_SysTickConfig is set to 1, then the function SysTick_Config is not included. In this case, the file device.h must contain a vendor-specific implementation of this function. */ __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) { if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); /* Reload value impossible */ } SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0UL); /* Function successful */ } #endif /*@} end of CMSIS_Core_SysTickFunctions */ #ifdef __cplusplus } #endif #endif /* __CORE_CM0PLUS_H_DEPENDANT */ #endif /* __CMSIS_GENERIC */ ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include/mpu_armv7.h ================================================ /****************************************************************************** * @file mpu_armv7.h * @brief CMSIS MPU API for Armv7-M MPU * @version V5.1.1 * @date 10. February 2020 ******************************************************************************/ /* * Copyright (c) 2017-2020 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #if defined ( __ICCARM__ ) #pragma system_include /* treat file as system include file for MISRA check */ #elif defined (__clang__) #pragma clang system_header /* treat file as system include file */ #endif #ifndef ARM_MPU_ARMV7_H #define ARM_MPU_ARMV7_H #define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes #define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes #define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes #define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes #define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes #define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte #define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes #define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes #define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes #define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes #define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes #define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes #define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes #define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes #define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes #define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte #define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes #define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes #define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes #define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes #define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes #define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes #define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes #define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes #define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes #define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte #define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes #define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes #define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access #define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only #define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only #define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access #define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only #define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access /** MPU Region Base Address Register Value * * \param Region The region to be configured, number 0 to 15. * \param BaseAddress The base address for the region. */ #define ARM_MPU_RBAR(Region, BaseAddress) \ (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \ ((Region) & MPU_RBAR_REGION_Msk) | \ (MPU_RBAR_VALID_Msk)) /** * MPU Memory Access Attributes * * \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. * \param IsShareable Region is shareable between multiple bus masters. * \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. * \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. */ #define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \ ((((TypeExtField) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \ (((IsShareable) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \ (((IsCacheable) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \ (((IsBufferable) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk)) /** * MPU Region Attribute and Size Register Value * * \param DisableExec Instruction access disable bit, 1= disable instruction fetches. * \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. * \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_. * \param SubRegionDisable Sub-region disable field. * \param Size Region size of the region to be configured, for example 4K, 8K. */ #define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \ ((((DisableExec) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \ (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \ (((AccessAttributes) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) | \ (((SubRegionDisable) << MPU_RASR_SRD_Pos) & MPU_RASR_SRD_Msk) | \ (((Size) << MPU_RASR_SIZE_Pos) & MPU_RASR_SIZE_Msk) | \ (((MPU_RASR_ENABLE_Msk)))) /** * MPU Region Attribute and Size Register Value * * \param DisableExec Instruction access disable bit, 1= disable instruction fetches. * \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. * \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. * \param IsShareable Region is shareable between multiple bus masters. * \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. * \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. * \param SubRegionDisable Sub-region disable field. * \param Size Region size of the region to be configured, for example 4K, 8K. */ #define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \ ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size) /** * MPU Memory Access Attribute for strongly ordered memory. * - TEX: 000b * - Shareable * - Non-cacheable * - Non-bufferable */ #define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U) /** * MPU Memory Access Attribute for device memory. * - TEX: 000b (if shareable) or 010b (if non-shareable) * - Shareable or non-shareable * - Non-cacheable * - Bufferable (if shareable) or non-bufferable (if non-shareable) * * \param IsShareable Configures the device memory as shareable or non-shareable. */ #define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U)) /** * MPU Memory Access Attribute for normal memory. * - TEX: 1BBb (reflecting outer cacheability rules) * - Shareable or non-shareable * - Cacheable or non-cacheable (reflecting inner cacheability rules) * - Bufferable or non-bufferable (reflecting inner cacheability rules) * * \param OuterCp Configures the outer cache policy. * \param InnerCp Configures the inner cache policy. * \param IsShareable Configures the memory as shareable or non-shareable. */ #define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) >> 1U), ((InnerCp) & 1U)) /** * MPU Memory Access Attribute non-cacheable policy. */ #define ARM_MPU_CACHEP_NOCACHE 0U /** * MPU Memory Access Attribute write-back, write and read allocate policy. */ #define ARM_MPU_CACHEP_WB_WRA 1U /** * MPU Memory Access Attribute write-through, no write allocate policy. */ #define ARM_MPU_CACHEP_WT_NWA 2U /** * MPU Memory Access Attribute write-back, no write allocate policy. */ #define ARM_MPU_CACHEP_WB_NWA 3U /** * Struct for a single MPU Region */ typedef struct { uint32_t RBAR; //!< The region base address register value (RBAR) uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR } ARM_MPU_Region_t; /** Enable the MPU. * \param MPU_Control Default access permissions for unconfigured regions. */ __STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) { __DMB(); MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; #ifdef SCB_SHCSR_MEMFAULTENA_Msk SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; #endif __DSB(); __ISB(); } /** Disable the MPU. */ __STATIC_INLINE void ARM_MPU_Disable(void) { __DMB(); #ifdef SCB_SHCSR_MEMFAULTENA_Msk SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; #endif MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; __DSB(); __ISB(); } /** Clear and disable the given MPU region. * \param rnr Region number to be cleared. */ __STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) { MPU->RNR = rnr; MPU->RASR = 0U; } /** Configure an MPU region. * \param rbar Value for RBAR register. * \param rsar Value for RSAR register. */ __STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) { MPU->RBAR = rbar; MPU->RASR = rasr; } /** Configure the given MPU region. * \param rnr Region number to be configured. * \param rbar Value for RBAR register. * \param rsar Value for RSAR register. */ __STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) { MPU->RNR = rnr; MPU->RBAR = rbar; MPU->RASR = rasr; } /** Memcopy with strictly ordered memory access, e.g. for register targets. * \param dst Destination data is copied to. * \param src Source data is copied from. * \param len Amount of data words to be copied. */ __STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) { uint32_t i; for (i = 0U; i < len; ++i) { dst[i] = src[i]; } } /** Load the given number of MPU regions from a table. * \param table Pointer to the MPU configuration table. * \param cnt Amount of regions to be configured. */ __STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) { const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; while (cnt > MPU_TYPE_RALIASES) { ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize); table += MPU_TYPE_RALIASES; cnt -= MPU_TYPE_RALIASES; } ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize); } #endif ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Device/RaspberryPi/RP2040/Include/RP2040.h ================================================ /*************************************************************************//** * @file RP2040.h * @brief CMSIS-Core(M) Device Peripheral Access Layer Header File for * Device RP2040 * @version V1.0.0 * @date 5. May 2021 *****************************************************************************/ /* * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _CMSIS_RP2040_H_ #define _CMSIS_RP2040_H_ #ifdef __cplusplus extern "C" { #endif /* =========================================================================================================================== */ /* ================ Interrupt Number Definition ================ */ /* =========================================================================================================================== */ typedef enum { /* ======================================= ARM Cortex-M0+ Specific Interrupt Numbers ======================================= */ Reset_IRQn = -15, /*!< -15 Reset Vector, invoked on Power up and warm reset */ NonMaskableInt_IRQn = -14, /*!< -14 Non maskable Interrupt, cannot be stopped or preempted */ HardFault_IRQn = -13, /*!< -13 Hard Fault, all classes of Fault */ SVCall_IRQn = -5, /*!< -5 System Service Call via SVC instruction */ PendSV_IRQn = -2, /*!< -2 Pendable request for system service */ SysTick_IRQn = -1, /*!< -1 System Tick Timer */ /* =========================================== RP2040 Specific Interrupt Numbers =========================================== */ TIMER_IRQ_0_IRQn = 0, /*!< 0 TIMER_IRQ_0 */ TIMER_IRQ_1_IRQn = 1, /*!< 1 TIMER_IRQ_1 */ TIMER_IRQ_2_IRQn = 2, /*!< 2 TIMER_IRQ_2 */ TIMER_IRQ_3_IRQn = 3, /*!< 3 TIMER_IRQ_3 */ PWM_IRQ_WRAP_IRQn = 4, /*!< 4 PWM_IRQ_WRAP */ USBCTRL_IRQ_IRQn = 5, /*!< 5 USBCTRL_IRQ */ XIP_IRQ_IRQn = 6, /*!< 6 XIP_IRQ */ PIO0_IRQ_0_IRQn = 7, /*!< 7 PIO0_IRQ_0 */ PIO0_IRQ_1_IRQn = 8, /*!< 8 PIO0_IRQ_1 */ PIO1_IRQ_0_IRQn = 9, /*!< 9 PIO1_IRQ_0 */ PIO1_IRQ_1_IRQn = 10, /*!< 10 PIO1_IRQ_1 */ DMA_IRQ_0_IRQn = 11, /*!< 11 DMA_IRQ_0 */ DMA_IRQ_1_IRQn = 12, /*!< 12 DMA_IRQ_1 */ IO_IRQ_BANK0_IRQn = 13, /*!< 13 IO_IRQ_BANK0 */ IO_IRQ_QSPI_IRQn = 14, /*!< 14 IO_IRQ_QSPI */ SIO_IRQ_PROC0_IRQn = 15, /*!< 15 SIO_IRQ_PROC0 */ SIO_IRQ_PROC1_IRQn = 16, /*!< 16 SIO_IRQ_PROC1 */ CLOCKS_IRQ_IRQn = 17, /*!< 17 CLOCKS_IRQ */ SPI0_IRQ_IRQn = 18, /*!< 18 SPI0_IRQ */ SPI1_IRQ_IRQn = 19, /*!< 19 SPI1_IRQ */ UART0_IRQ_IRQn = 20, /*!< 20 UART0_IRQ */ UART1_IRQ_IRQn = 21, /*!< 21 UART1_IRQ */ ADC_IRQ_FIFO_IRQn = 22, /*!< 22 ADC_IRQ_FIFO */ I2C0_IRQ_IRQn = 23, /*!< 23 I2C0_IRQ */ I2C1_IRQ_IRQn = 24, /*!< 24 I2C1_IRQ */ RTC_IRQ_IRQn = 25 /*!< 25 RTC_IRQ */ } IRQn_Type; /* =========================================================================================================================== */ /* ================ Processor and Core Peripheral Section ================ */ /* =========================================================================================================================== */ /* ========================== Configuration of the ARM Cortex-M0+ Processor and Core Peripherals =========================== */ #define __CM0PLUS_REV 0x0001U /*!< CM0PLUS Core Revision */ #define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */ #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ #define __VTOR_PRESENT 1 /*!< Set to 1 if CPU supports Vector Table Offset Register */ #define __MPU_PRESENT 1 /*!< MPU present */ #define __FPU_PRESENT 0 /*!< FPU present */ /** @} */ /* End of group Configuration_of_CMSIS */ #include "core_cm0plus.h" /*!< ARM Cortex-M0+ processor and core peripherals */ #include "system_RP2040.h" /*!< RP2040 System */ #ifndef __IM /*!< Fallback for older CMSIS versions */ #define __IM __I #endif #ifndef __OM /*!< Fallback for older CMSIS versions */ #define __OM __O #endif #ifndef __IOM /*!< Fallback for older CMSIS versions */ #define __IOM __IO #endif #ifdef __cplusplus } #endif #endif /* _CMSIS_RP2040_H */ ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Device/RaspberryPi/RP2040/Include/system_RP2040.h ================================================ /*************************************************************************//** * @file system_RP2040.h * @brief CMSIS-Core(M) Device Peripheral Access Layer Header File for * Device RP2040 * @version V1.0.0 * @date 5. May 2021 *****************************************************************************/ /* * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _CMSIS_SYSTEM_RP2040_H #define _CMSIS_SYSTEM_RP2040_H #ifdef __cplusplus extern "C" { #endif /** \brief Exception / Interrupt Handler Function Prototype */ typedef void(*VECTOR_TABLE_Type)(void); /** \brief System Clock Frequency (Core Clock) */ extern uint32_t SystemCoreClock; /** \brief Setup the microcontroller system. Initialize the System and update the SystemCoreClock variable. */ extern void SystemInit (void); /** \brief Update SystemCoreClock variable. Updates the SystemCoreClock with current core Clock retrieved from cpu registers. */ extern void SystemCoreClockUpdate (void); #ifdef __cplusplus } #endif #endif /* _CMSIS_SYSTEM_RP2040_H */ ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Device/RaspberryPi/RP2040/Source/system_RP2040.c ================================================ /*************************************************************************//** * @file system_RP2040.c * @brief CMSIS-Core(M) Device Peripheral Access Layer Header File for * Device RP2040 * @version V1.0.0 * @date 5. May 2021 *****************************************************************************/ /* * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "RP2040.h" #include "hardware/clocks.h" /*--------------------------------------------------------------------------- System Core Clock Variable *---------------------------------------------------------------------------*/ uint32_t SystemCoreClock; /* System Clock Frequency (Core Clock)*/ /*--------------------------------------------------------------------------- System Core Clock function *---------------------------------------------------------------------------*/ void SystemCoreClockUpdate (void) { SystemCoreClock = clock_get_hz(clk_sys); } /*--------------------------------------------------------------------------- System initialization function *---------------------------------------------------------------------------*/ void __attribute__((constructor)) SystemInit (void) { SystemCoreClockUpdate(); } ================================================ FILE: pico-sdk/src/rp2_common/cmsis/stub/CMSIS/LICENSE.txt ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: pico-sdk/src/rp2_common/hardware_adc/CMakeLists.txt ================================================ pico_simple_hardware_target(adc) # additional library pico_mirrored_target_link_libraries(hardware_adc INTERFACE hardware_gpio hardware_resets) ================================================ FILE: pico-sdk/src/rp2_common/hardware_adc/adc.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" #include "hardware/adc.h" #include "hardware/resets.h" void adc_init(void) { // ADC is in an unknown state. We should start by resetting it reset_block(RESETS_RESET_ADC_BITS); unreset_block_wait(RESETS_RESET_ADC_BITS); // Now turn it back on. Staging of clock etc is handled internally adc_hw->cs = ADC_CS_EN_BITS; // Internal staging completes in a few cycles, but poll to be sure while (!(adc_hw->cs & ADC_CS_READY_BITS)) { tight_loop_contents(); } } ================================================ FILE: pico-sdk/src/rp2_common/hardware_adc/include/hardware/adc.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_ADC_H #define _HARDWARE_ADC_H #include "pico.h" #include "hardware/structs/adc.h" #include "hardware/gpio.h" /** \file hardware/adc.h * \defgroup hardware_adc hardware_adc * * Analog to Digital Converter (ADC) API * * The RP2040 has an internal analogue-digital converter (ADC) with the following features: * - SAR ADC * - 500 kS/s (Using an independent 48MHz clock) * - 12 bit (8.7 ENOB) * - 5 input mux: * - 4 inputs that are available on package pins shared with GPIO[29:26] * - 1 input is dedicated to the internal temperature sensor * - 4 element receive sample FIFO * - Interrupt generation * - DMA interface * * Although there is only one ADC you can specify the input to it using the adc_select_input() function. * In round robin mode (adc_set_round_robin()), the ADC will use that input and move to the next one after a read. * * User ADC inputs are on 0-3 (GPIO 26-29), the temperature sensor is on input 4. * * Temperature sensor values can be approximated in centigrade as: * * T = 27 - (ADC_Voltage - 0.706)/0.001721 * * The FIFO, if used, can contain up to 4 entries. * * \subsection adc_example Example * \addtogroup hardware_adc * * \include hello_adc.c */ // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_ADC, Enable/disable assertions in the ADC module, type=bool, default=0, group=hardware_adc #ifndef PARAM_ASSERTIONS_ENABLED_ADC #define PARAM_ASSERTIONS_ENABLED_ADC 0 #endif #ifdef __cplusplus extern "C" { #endif /*! \brief Initialise the ADC HW * \ingroup hardware_adc * */ void adc_init(void); /*! \brief Initialise the gpio for use as an ADC pin * \ingroup hardware_adc * * Prepare a GPIO for use with ADC by disabling all digital functions. * * \param gpio The GPIO number to use. Allowable GPIO numbers are 26 to 29 inclusive. */ static inline void adc_gpio_init(uint gpio) { invalid_params_if(ADC, gpio < 26 || gpio > 29); // Select NULL function to make output driver hi-Z gpio_set_function(gpio, GPIO_FUNC_NULL); // Also disable digital pulls and digital receiver gpio_disable_pulls(gpio); gpio_set_input_enabled(gpio, false); } /*! \brief ADC input select * \ingroup hardware_adc * * Select an ADC input. 0...3 are GPIOs 26...29 respectively. * Input 4 is the onboard temperature sensor. * * \param input Input to select. */ static inline void adc_select_input(uint input) { valid_params_if(ADC, input < NUM_ADC_CHANNELS); hw_write_masked(&adc_hw->cs, input << ADC_CS_AINSEL_LSB, ADC_CS_AINSEL_BITS); } /*! \brief Get the currently selected ADC input channel * \ingroup hardware_adc * * \return The currently selected input channel. 0...3 are GPIOs 26...29 respectively. Input 4 is the onboard temperature sensor. */ static inline uint adc_get_selected_input(void) { return (adc_hw->cs & ADC_CS_AINSEL_BITS) >> ADC_CS_AINSEL_LSB; } /*! \brief Round Robin sampling selector * \ingroup hardware_adc * * This function sets which inputs are to be run through in round robin mode. * Value between 0 and 0x1f (bit 0 to bit 4 for GPIO 26 to 29 and temperature sensor input respectively) * * \param input_mask A bit pattern indicating which of the 5 inputs are to be sampled. Write a value of 0 to disable round robin sampling. */ static inline void adc_set_round_robin(uint input_mask) { valid_params_if(ADC, input_mask < (1 << NUM_ADC_CHANNELS)); hw_write_masked(&adc_hw->cs, input_mask << ADC_CS_RROBIN_LSB, ADC_CS_RROBIN_BITS); } /*! \brief Enable the onboard temperature sensor * \ingroup hardware_adc * * \param enable Set true to power on the onboard temperature sensor, false to power off. * */ static inline void adc_set_temp_sensor_enabled(bool enable) { if (enable) hw_set_bits(&adc_hw->cs, ADC_CS_TS_EN_BITS); else hw_clear_bits(&adc_hw->cs, ADC_CS_TS_EN_BITS); } /*! \brief Perform a single conversion * \ingroup hardware_adc * * Performs an ADC conversion, waits for the result, and then returns it. * * \return Result of the conversion. */ static inline uint16_t adc_read(void) { hw_set_bits(&adc_hw->cs, ADC_CS_START_ONCE_BITS); while (!(adc_hw->cs & ADC_CS_READY_BITS)) tight_loop_contents(); return (uint16_t) adc_hw->result; } /*! \brief Enable or disable free-running sampling mode * \ingroup hardware_adc * * \param run false to disable, true to enable free running conversion mode. */ static inline void adc_run(bool run) { if (run) hw_set_bits(&adc_hw->cs, ADC_CS_START_MANY_BITS); else hw_clear_bits(&adc_hw->cs, ADC_CS_START_MANY_BITS); } /*! \brief Set the ADC Clock divisor * \ingroup hardware_adc * * Period of samples will be (1 + div) cycles on average. Note it takes 96 cycles to perform a conversion, * so any period less than that will be clamped to 96. * * \param clkdiv If non-zero, conversion will be started at intervals rather than back to back. */ static inline void adc_set_clkdiv(float clkdiv) { invalid_params_if(ADC, clkdiv >= 1 << (ADC_DIV_INT_MSB - ADC_DIV_INT_LSB + 1)); adc_hw->div = (uint32_t)(clkdiv * (float) (1 << ADC_DIV_INT_LSB)); } /*! \brief Setup the ADC FIFO * \ingroup hardware_adc * * FIFO is 4 samples long, if a conversion is completed and the FIFO is full, the result is dropped. * * \param en Enables write each conversion result to the FIFO * \param dreq_en Enable DMA requests when FIFO contains data * \param dreq_thresh Threshold for DMA requests/FIFO IRQ if enabled. * \param err_in_fifo If enabled, bit 15 of the FIFO contains error flag for each sample * \param byte_shift Shift FIFO contents to be one byte in size (for byte DMA) - enables DMA to byte buffers. */ static inline void adc_fifo_setup(bool en, bool dreq_en, uint16_t dreq_thresh, bool err_in_fifo, bool byte_shift) { hw_write_masked(&adc_hw->fcs, (bool_to_bit(en) << ADC_FCS_EN_LSB) | (bool_to_bit(dreq_en) << ADC_FCS_DREQ_EN_LSB) | (((uint)dreq_thresh) << ADC_FCS_THRESH_LSB) | (bool_to_bit(err_in_fifo) << ADC_FCS_ERR_LSB) | (bool_to_bit(byte_shift) << ADC_FCS_SHIFT_LSB), ADC_FCS_EN_BITS | ADC_FCS_DREQ_EN_BITS | ADC_FCS_THRESH_BITS | ADC_FCS_ERR_BITS | ADC_FCS_SHIFT_BITS ); } /*! \brief Check FIFO empty state * \ingroup hardware_adc * * \return Returns true if the FIFO is empty */ static inline bool adc_fifo_is_empty(void) { return !!(adc_hw->fcs & ADC_FCS_EMPTY_BITS); } /*! \brief Get number of entries in the ADC FIFO * \ingroup hardware_adc * * The ADC FIFO is 4 entries long. This function will return how many samples are currently present. */ static inline uint8_t adc_fifo_get_level(void) { return (adc_hw->fcs & ADC_FCS_LEVEL_BITS) >> ADC_FCS_LEVEL_LSB; } /*! \brief Get ADC result from FIFO * \ingroup hardware_adc * * Pops the latest result from the ADC FIFO. */ static inline uint16_t adc_fifo_get(void) { return (uint16_t)adc_hw->fifo; } /*! \brief Wait for the ADC FIFO to have data. * \ingroup hardware_adc * * Blocks until data is present in the FIFO */ static inline uint16_t adc_fifo_get_blocking(void) { while (adc_fifo_is_empty()) tight_loop_contents(); return (uint16_t)adc_hw->fifo; } /*! \brief Drain the ADC FIFO * \ingroup hardware_adc * * Will wait for any conversion to complete then drain the FIFO, discarding any results. */ static inline void adc_fifo_drain(void) { // Potentially there is still a conversion in progress -- wait for this to complete before draining while (!(adc_hw->cs & ADC_CS_READY_BITS)) tight_loop_contents(); while (!adc_fifo_is_empty()) (void) adc_fifo_get(); } /*! \brief Enable/Disable ADC interrupts. * \ingroup hardware_adc * * \param enabled Set to true to enable the ADC interrupts, false to disable */ static inline void adc_irq_set_enabled(bool enabled) { adc_hw->inte = !!enabled; } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_base/CMakeLists.txt ================================================ add_library(hardware_base INTERFACE) add_library(hardware_base_headers INTERFACE) target_include_directories(hardware_base_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_link_libraries(hardware_base_headers INTERFACE pico_base_headers) target_link_libraries(hardware_base INTERFACE hardware_base_headers) ================================================ FILE: pico-sdk/src/rp2_common/hardware_base/include/hardware/address_mapped.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_ADDRESS_MAPPED_H #define _HARDWARE_ADDRESS_MAPPED_H #include "pico.h" #include "hardware/regs/addressmap.h" /** \file address_mapped.h * \defgroup hardware_base hardware_base * * Low-level types and (atomic) accessors for memory-mapped hardware registers * * `hardware_base` defines the low level types and access functions for memory mapped hardware registers. It is included * by default by all other hardware libraries. * * The following register access typedefs codify the access type (read/write) and the bus size (8/16/32) of the hardware register. * The register type names are formed by concatenating one from each of the 3 parts A, B, C * A | B | C | Meaning * ------|---|---|-------- * io_ | | | A Memory mapped IO register *  |ro_| | read-only access *  |rw_| | read-write access *  |wo_| | write-only access (can't actually be enforced via C API) *  | | 8| 8-bit wide access *  | | 16| 16-bit wide access *  | | 32| 32-bit wide access * * When dealing with these types, you will always use a pointer, i.e. `io_rw_32 *some_reg` is a pointer to a read/write * 32 bit register that you can write with `*some_reg = value`, or read with `value = *some_reg`. * * RP2040 hardware is also aliased to provide atomic setting, clear or flipping of a subset of the bits within * a hardware register so that concurrent access by two cores is always consistent with one atomic operation * being performed first, followed by the second. * * See hw_set_bits(), hw_clear_bits() and hw_xor_bits() provide for atomic access via a pointer to a 32 bit register * * Additionally given a pointer to a structure representing a piece of hardware (e.g. `dma_hw_t *dma_hw` for the DMA controller), you can * get an alias to the entire structure such that writing any member (register) within the structure is equivalent * to an atomic operation via hw_set_alias(), hw_clear_alias() or hw_xor_alias()... * * For example `hw_set_alias(dma_hw)->inte1 = 0x80;` will set bit 7 of the INTE1 register of the DMA controller, * leaving the other bits unchanged. */ #ifdef __cplusplus extern "C" { #endif #define check_hw_layout(type, member, offset) static_assert(offsetof(type, member) == (offset), "hw offset mismatch") #define check_hw_size(type, size) static_assert(sizeof(type) == (size), "hw size mismatch") // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_ADDRESS_ALIAS, Enable/disable assertions in memory address aliasing macros, type=bool, default=0, group=hardware_base #ifndef PARAM_ASSERTIONS_ENABLED_ADDRESS_ALIAS #define PARAM_ASSERTIONS_ENABLED_ADDRESS_ALIAS 0 #endif typedef volatile uint32_t io_rw_32; typedef const volatile uint32_t io_ro_32; typedef volatile uint32_t io_wo_32; typedef volatile uint16_t io_rw_16; typedef const volatile uint16_t io_ro_16; typedef volatile uint16_t io_wo_16; typedef volatile uint8_t io_rw_8; typedef const volatile uint8_t io_ro_8; typedef volatile uint8_t io_wo_8; typedef volatile uint8_t *const ioptr; typedef ioptr const const_ioptr; // A non-functional (empty) helper macro to help IDEs follow links from the autogenerated // hardware struct headers in hardware/structs/xxx.h to the raw register definitions // in hardware/regs/xxx.h. A preprocessor define such as TIMER_TIMEHW_OFFSET (a timer register offset) // is not generally clickable (in an IDE) if placed in a C comment, so _REG_(TIMER_TIMEHW_OFFSET) is // included outside of a comment instead #define _REG_(x) // Helper method used by hw_alias macros to optionally check input validity #define hw_alias_check_addr(addr) ((uintptr_t)(addr)) // can't use the following impl as it breaks existing static declarations using hw_alias, so would be a backwards incompatibility //static __force_inline uint32_t hw_alias_check_addr(volatile void *addr) { // uint32_t rc = (uintptr_t)addr; // invalid_params_if(ADDRESS_ALIAS, rc < 0x40000000); // catch likely non HW pointer types // return rc; //} // Helper method used by xip_alias macros to optionally check input validity __force_inline static uint32_t xip_alias_check_addr(const void *addr) { uint32_t rc = (uintptr_t)addr; valid_params_if(ADDRESS_ALIAS, rc >= XIP_MAIN_BASE && rc < XIP_NOALLOC_BASE); return rc; } // Untyped conversion alias pointer generation macros #define hw_set_alias_untyped(addr) ((void *)(REG_ALIAS_SET_BITS | hw_alias_check_addr(addr))) #define hw_clear_alias_untyped(addr) ((void *)(REG_ALIAS_CLR_BITS | hw_alias_check_addr(addr))) #define hw_xor_alias_untyped(addr) ((void *)(REG_ALIAS_XOR_BITS | hw_alias_check_addr(addr))) #define xip_noalloc_alias_untyped(addr) ((void *)(XIP_NOALLOC_BASE | xip_alias_check_addr(addr))) #define xip_nocache_alias_untyped(addr) ((void *)(XIP_NOCACHE_BASE | xip_alias_check_addr(addr))) #define xip_nocache_noalloc_alias_untyped(addr) ((void *)(XIP_NOCACHE_NOALLOC_BASE | xip_alias_check_addr(addr))) // Typed conversion alias pointer generation macros #define hw_set_alias(p) ((typeof(p))hw_set_alias_untyped(p)) #define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p)) #define hw_xor_alias(p) ((typeof(p))hw_xor_alias_untyped(p)) #define xip_noalloc_alias(p) ((typeof(p))xip_noalloc_alias_untyped(p)) #define xip_nocache_alias(p) ((typeof(p))xip_nocache_alias_untyped(p)) #define xip_nocache_noalloc_alias(p) ((typeof(p))xip_nocache_noalloc_alias_untyped(p)) /*! \brief Atomically set the specified bits to 1 in a HW register * \ingroup hardware_base * * \param addr Address of writable register * \param mask Bit-mask specifying bits to set */ __force_inline static void hw_set_bits(io_rw_32 *addr, uint32_t mask) { *(io_rw_32 *) hw_set_alias_untyped((volatile void *) addr) = mask; } /*! \brief Atomically clear the specified bits to 0 in a HW register * \ingroup hardware_base * * \param addr Address of writable register * \param mask Bit-mask specifying bits to clear */ __force_inline static void hw_clear_bits(io_rw_32 *addr, uint32_t mask) { *(io_rw_32 *) hw_clear_alias_untyped((volatile void *) addr) = mask; } /*! \brief Atomically flip the specified bits in a HW register * \ingroup hardware_base * * \param addr Address of writable register * \param mask Bit-mask specifying bits to invert */ __force_inline static void hw_xor_bits(io_rw_32 *addr, uint32_t mask) { *(io_rw_32 *) hw_xor_alias_untyped((volatile void *) addr) = mask; } /*! \brief Set new values for a sub-set of the bits in a HW register * \ingroup hardware_base * * Sets destination bits to values specified in \p values, if and only if corresponding bit in \p write_mask is set * * Note: this method allows safe concurrent modification of *different* bits of * a register, but multiple concurrent access to the same bits is still unsafe. * * \param addr Address of writable register * \param values Bits values * \param write_mask Mask of bits to change */ __force_inline static void hw_write_masked(io_rw_32 *addr, uint32_t values, uint32_t write_mask) { hw_xor_bits(addr, (*addr ^ values) & write_mask); } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_claim/CMakeLists.txt ================================================ pico_simple_hardware_target(claim) pico_mirrored_target_link_libraries(hardware_claim INTERFACE hardware_sync) ================================================ FILE: pico-sdk/src/rp2_common/hardware_claim/claim.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/claim.h" uint32_t hw_claim_lock(void) { return spin_lock_blocking(spin_lock_instance(PICO_SPINLOCK_ID_HARDWARE_CLAIM)); } void hw_claim_unlock(uint32_t save) { spin_unlock(spin_lock_instance(PICO_SPINLOCK_ID_HARDWARE_CLAIM), save); } inline bool hw_is_claimed(const uint8_t *bits, uint bit_index) { return (bits[bit_index >> 3u] & (1u << (bit_index & 7u))); } void hw_claim_or_assert(uint8_t *bits, uint bit_index, const char *message) { uint32_t save = hw_claim_lock(); if (hw_is_claimed(bits, bit_index)) { panic(message, bit_index); } else { bits[bit_index >> 3u] |= (uint8_t)(1u << (bit_index & 7u)); } hw_claim_unlock(save); } int hw_claim_unused_from_range(uint8_t *bits, bool required, uint bit_lsb, uint bit_msb, const char *message) { // don't bother check lsb / msb order as if wrong, then it'll fail anyway uint32_t save = hw_claim_lock(); int found_bit = -1; for(uint bit=bit_lsb; bit <= bit_msb; bit++) { if (!hw_is_claimed(bits, bit)) { bits[bit >> 3u] |= (uint8_t)(1u << (bit & 7u)); found_bit = (int)bit; break; } } hw_claim_unlock(save); if (found_bit < 0 && required) { panic(message); } return found_bit; } void hw_claim_clear(uint8_t *bits, uint bit_index) { uint32_t save = hw_claim_lock(); assert(hw_is_claimed(bits, bit_index)); bits[bit_index >> 3u] &= (uint8_t) ~(1u << (bit_index & 7u)); hw_claim_unlock(save); } ================================================ FILE: pico-sdk/src/rp2_common/hardware_claim/include/hardware/claim.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_CLAIM_H #define _HARDWARE_CLAIM_H #include "pico.h" #include "hardware/sync.h" /** \file claim.h * \defgroup hardware_claim hardware_claim * * Lightweight hardware resource management * * `hardware_claim` provides a simple API for management of hardware resources at runtime. * * This API is usually called by other hardware specific _claiming_ APIs and provides simple * multi-core safe methods to manipulate compact bit-sets representing hardware resources. * * This API allows any other library to cooperatively participate in a scheme by which * both compile time and runtime allocation of resources can co-exist, and conflicts * can be avoided or detected (depending on the use case) without the libraries having * any other knowledge of each other. * * Facilities are providing for: * * 1. Claiming resources (and asserting if they are already claimed) * 2. Freeing (unclaiming) resources * 3. Finding unused resources */ #ifdef __cplusplus extern "C" { #endif /*! \brief Atomically claim a resource, panicking if it is already in use * \ingroup hardware_claim * * The resource ownership is indicated by the bit_index bit in an array of bits. * * \param bits pointer to an array of bits (8 bits per byte) * \param bit_index resource to claim (bit index into array of bits) * \param message string to display if the bit cannot be claimed; note this may have a single printf format "%d" for the bit */ void hw_claim_or_assert(uint8_t *bits, uint bit_index, const char *message); /*! \brief Atomically claim one resource out of a range of resources, optionally asserting if none are free * \ingroup hardware_claim * * \param bits pointer to an array of bits (8 bits per byte) * \param required true if this method should panic if the resource is not free * \param bit_lsb the lower bound (inclusive) of the resource range to claim from * \param bit_msb the upper bound (inclusive) of the resource range to claim from * \param message string to display if the bit cannot be claimed * \return the bit index representing the claimed or -1 if none are available in the range, and required = false */ int hw_claim_unused_from_range(uint8_t *bits, bool required, uint bit_lsb, uint bit_msb, const char *message); /*! \brief Determine if a resource is claimed at the time of the call * \ingroup hardware_claim * * The resource ownership is indicated by the bit_index bit in an array of bits. * * \param bits pointer to an array of bits (8 bits per byte) * \param bit_index resource to check (bit index into array of bits) * \return true if the resource is claimed */ bool hw_is_claimed(const uint8_t *bits, uint bit_index); /*! \brief Atomically unclaim a resource * \ingroup hardware_claim * * The resource ownership is indicated by the bit_index bit in an array of bits. * * \param bits pointer to an array of bits (8 bits per byte) * \param bit_index resource to unclaim (bit index into array of bits) */ void hw_claim_clear(uint8_t *bits, uint bit_index); /*! \brief Acquire the runtime mutual exclusion lock provided by the `hardware_claim` library * \ingroup hardware_claim * * This method is called automatically by the other `hw_claim_` methods, however it is provided as a convenience * to code that might want to protect other hardware initialization code from concurrent use. * * \note hw_claim_lock() uses a spin lock internally, so disables interrupts on the calling core, and will deadlock * if the calling core already owns the lock. * * \return a token to pass to hw_claim_unlock() */ uint32_t hw_claim_lock(void); /*! \brief Release the runtime mutual exclusion lock provided by the `hardware_claim` library * \ingroup hardware_claim * * \note This method MUST be called from the same core that call hw_claim_lock() * * \param token the token returned by the corresponding call to hw_claim_lock() */ void hw_claim_unlock(uint32_t token); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_clocks/CMakeLists.txt ================================================ pico_simple_hardware_target(clocks) pico_mirrored_target_link_libraries(hardware_clocks INTERFACE hardware_gpio hardware_irq hardware_resets hardware_pll # not currently used by clocks.c, but sensibly bundled here # as changing frequencies may require upping voltage hardware_vreg hardware_watchdog hardware_xosc ) ================================================ FILE: pico-sdk/src/rp2_common/hardware_clocks/clocks.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" #include "hardware/regs/clocks.h" #include "hardware/platform_defs.h" #include "hardware/clocks.h" #include "hardware/watchdog.h" #include "hardware/pll.h" #include "hardware/xosc.h" #include "hardware/irq.h" #include "hardware/gpio.h" // The RTC clock frequency is 48MHz divided by power of 2 (to ensure an integer // division ratio will be used in the clocks block). A divisor of 1024 generates // an RTC clock tick of 46875Hz. This frequency is relatively close to the // customary 32 or 32.768kHz 'slow clock' crystals and provides good timing resolution. #define RTC_CLOCK_FREQ_HZ (USB_CLK_KHZ * KHZ / 1024) check_hw_layout(clocks_hw_t, clk[clk_adc].selected, CLOCKS_CLK_ADC_SELECTED_OFFSET); check_hw_layout(clocks_hw_t, fc0.result, CLOCKS_FC0_RESULT_OFFSET); check_hw_layout(clocks_hw_t, ints, CLOCKS_INTS_OFFSET); static uint32_t configured_freq[CLK_COUNT]; static resus_callback_t _resus_callback; // Clock muxing consists of two components: // - A glitchless mux, which can be switched freely, but whose inputs must be // free-running // - An auxiliary (glitchy) mux, whose output glitches when switched, but has // no constraints on its inputs // Not all clocks have both types of mux. static inline bool has_glitchless_mux(enum clock_index clk_index) { return clk_index == clk_sys || clk_index == clk_ref; } void clock_stop(enum clock_index clk_index) { clock_hw_t *clock = &clocks_hw->clk[clk_index]; hw_clear_bits(&clock->ctrl, CLOCKS_CLK_USB_CTRL_ENABLE_BITS); configured_freq[clk_index] = 0; } /// \tag::clock_configure[] bool clock_configure(enum clock_index clk_index, uint32_t src, uint32_t auxsrc, uint32_t src_freq, uint32_t freq) { uint32_t div; assert(src_freq >= freq); if (freq > src_freq) return false; // Div register is 24.8 int.frac divider so multiply by 2^8 (left shift by 8) div = (uint32_t) (((uint64_t) src_freq << CLOCKS_CLK_GPOUT0_DIV_INT_LSB) / freq); clock_hw_t *clock = &clocks_hw->clk[clk_index]; // If increasing divisor, set divisor before source. Otherwise set source // before divisor. This avoids a momentary overspeed when e.g. switching // to a faster source and increasing divisor to compensate. if (div > clock->div) clock->div = div; // If switching a glitchless slice (ref or sys) to an aux source, switch // away from aux *first* to avoid passing glitches when changing aux mux. // Assume (!!!) glitchless source 0 is no faster than the aux source. if (has_glitchless_mux(clk_index) && src == CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX) { hw_clear_bits(&clock->ctrl, CLOCKS_CLK_REF_CTRL_SRC_BITS); while (!(clock->selected & 1u)) tight_loop_contents(); } // If no glitchless mux, cleanly stop the clock to avoid glitches // propagating when changing aux mux. Note it would be a really bad idea // to do this on one of the glitchless clocks (clk_sys, clk_ref). else { // Disable clock. On clk_ref and clk_sys this does nothing, // all other clocks have the ENABLE bit in the same position. hw_clear_bits(&clock->ctrl, CLOCKS_CLK_GPOUT0_CTRL_ENABLE_BITS); if (configured_freq[clk_index] > 0) { // Delay for 3 cycles of the target clock, for ENABLE propagation. // Note XOSC_COUNT is not helpful here because XOSC is not // necessarily running, nor is timer...: uint delay_cyc = configured_freq[clk_sys] / configured_freq[clk_index] + 1; busy_wait_at_least_cycles(delay_cyc * 3); } } // Set aux mux first, and then glitchless mux if this clock has one hw_write_masked(&clock->ctrl, (auxsrc << CLOCKS_CLK_SYS_CTRL_AUXSRC_LSB), CLOCKS_CLK_SYS_CTRL_AUXSRC_BITS ); if (has_glitchless_mux(clk_index)) { hw_write_masked(&clock->ctrl, src << CLOCKS_CLK_REF_CTRL_SRC_LSB, CLOCKS_CLK_REF_CTRL_SRC_BITS ); while (!(clock->selected & (1u << src))) tight_loop_contents(); } // Enable clock. On clk_ref and clk_sys this does nothing, // all other clocks have the ENABLE bit in the same position. hw_set_bits(&clock->ctrl, CLOCKS_CLK_GPOUT0_CTRL_ENABLE_BITS); // Now that the source is configured, we can trust that the user-supplied // divisor is a safe value. clock->div = div; // Store the configured frequency configured_freq[clk_index] = (uint32_t)(((uint64_t) src_freq << 8) / div); return true; } /// \end::clock_configure[] void clocks_init(void) { // Start tick in watchdog, the argument is in 'cycles per microsecond' i.e. MHz watchdog_start_tick(XOSC_KHZ / KHZ); // Everything is 48MHz on FPGA apart from RTC. Otherwise set to 0 and will be set in clock configure if (running_on_fpga()) { for (uint i = 0; i < CLK_COUNT; i++) { configured_freq[i] = 48 * MHZ; } configured_freq[clk_rtc] = RTC_CLOCK_FREQ_HZ; return; } // Disable resus that may be enabled from previous software clocks_hw->resus.ctrl = 0; // Enable the xosc xosc_init(); // Before we touch PLLs, switch sys and ref cleanly away from their aux sources. hw_clear_bits(&clocks_hw->clk[clk_sys].ctrl, CLOCKS_CLK_SYS_CTRL_SRC_BITS); while (clocks_hw->clk[clk_sys].selected != 0x1) tight_loop_contents(); hw_clear_bits(&clocks_hw->clk[clk_ref].ctrl, CLOCKS_CLK_REF_CTRL_SRC_BITS); while (clocks_hw->clk[clk_ref].selected != 0x1) tight_loop_contents(); /// \tag::pll_init[] pll_init(pll_sys, PLL_COMMON_REFDIV, PLL_SYS_VCO_FREQ_KHZ * KHZ, PLL_SYS_POSTDIV1, PLL_SYS_POSTDIV2); pll_init(pll_usb, PLL_COMMON_REFDIV, PLL_USB_VCO_FREQ_KHZ * KHZ, PLL_USB_POSTDIV1, PLL_USB_POSTDIV2); /// \end::pll_init[] // Configure clocks // CLK_REF = XOSC (usually) 12MHz / 1 = 12MHz clock_configure(clk_ref, CLOCKS_CLK_REF_CTRL_SRC_VALUE_XOSC_CLKSRC, 0, // No aux mux XOSC_KHZ * KHZ, XOSC_KHZ * KHZ); /// \tag::configure_clk_sys[] // CLK SYS = PLL SYS (usually) 125MHz / 1 = 125MHz clock_configure(clk_sys, CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX, CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS, SYS_CLK_KHZ * KHZ, SYS_CLK_KHZ * KHZ); /// \end::configure_clk_sys[] // CLK USB = PLL USB 48MHz / 1 = 48MHz clock_configure(clk_usb, 0, // No GLMUX CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB, USB_CLK_KHZ * KHZ, USB_CLK_KHZ * KHZ); // CLK ADC = PLL USB 48MHZ / 1 = 48MHz clock_configure(clk_adc, 0, // No GLMUX CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB, USB_CLK_KHZ * KHZ, USB_CLK_KHZ * KHZ); // CLK RTC = PLL USB 48MHz / 1024 = 46875Hz clock_configure(clk_rtc, 0, // No GLMUX CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB, USB_CLK_KHZ * KHZ, RTC_CLOCK_FREQ_HZ); // CLK PERI = clk_sys. Used as reference clock for Peripherals. No dividers so just select and enable // Normally choose clk_sys or clk_usb clock_configure(clk_peri, 0, CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLK_SYS, SYS_CLK_KHZ * KHZ, SYS_CLK_KHZ * KHZ); } /// \tag::clock_get_hz[] uint32_t clock_get_hz(enum clock_index clk_index) { return configured_freq[clk_index]; } /// \end::clock_get_hz[] void clock_set_reported_hz(enum clock_index clk_index, uint hz) { configured_freq[clk_index] = hz; } /// \tag::frequency_count_khz[] uint32_t frequency_count_khz(uint src) { fc_hw_t *fc = &clocks_hw->fc0; // If frequency counter is running need to wait for it. It runs even if the source is NULL while(fc->status & CLOCKS_FC0_STATUS_RUNNING_BITS) { tight_loop_contents(); } // Set reference freq fc->ref_khz = clock_get_hz(clk_ref) / 1000; // FIXME: Don't pick random interval. Use best interval fc->interval = 10; // No min or max fc->min_khz = 0; fc->max_khz = 0xffffffff; // Set SRC which automatically starts the measurement fc->src = src; while(!(fc->status & CLOCKS_FC0_STATUS_DONE_BITS)) { tight_loop_contents(); } // Return the result return fc->result >> CLOCKS_FC0_RESULT_KHZ_LSB; } /// \end::frequency_count_khz[] static void clocks_handle_resus(void) { // Set clk_sys back to the ref clock rather than it being forced to clk_ref // by resus. Call the user's resus callback if they have set one // CLK SYS = CLK_REF. Must be running for this code to be running uint clk_ref_freq = clock_get_hz(clk_ref); clock_configure(clk_sys, CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLK_REF, 0, clk_ref_freq, clk_ref_freq); // Assert we have been resussed assert(clocks_hw->resus.status & CLOCKS_CLK_SYS_RESUS_STATUS_RESUSSED_BITS); // Now we have fixed clk_sys we can safely remove the resus hw_set_bits(&clocks_hw->resus.ctrl, CLOCKS_CLK_SYS_RESUS_CTRL_CLEAR_BITS); hw_clear_bits(&clocks_hw->resus.ctrl, CLOCKS_CLK_SYS_RESUS_CTRL_CLEAR_BITS); // Now we should no longer be resussed assert(!(clocks_hw->resus.status & CLOCKS_CLK_SYS_RESUS_STATUS_RESUSSED_BITS)); // Call the user's callback to notify them of the resus event if (_resus_callback) { _resus_callback(); } } static void clocks_irq_handler(void) { // Clocks interrupt handler. Only resus but handle irq // defensively just in case. uint32_t ints = clocks_hw->ints; if (ints & CLOCKS_INTE_CLK_SYS_RESUS_BITS) { ints &= ~CLOCKS_INTE_CLK_SYS_RESUS_BITS; clocks_handle_resus(); } #ifndef NDEBUG if (ints) { panic("Unexpected clocks irq\n"); } #endif } void clocks_enable_resus(resus_callback_t resus_callback) { // Restart clk_sys if it is stopped by forcing it // to the default source of clk_ref. If clk_ref stops running this will // not work. // Store user's resus callback _resus_callback = resus_callback; irq_set_exclusive_handler(CLOCKS_IRQ, clocks_irq_handler); // Enable the resus interrupt in clocks clocks_hw->inte = CLOCKS_INTE_CLK_SYS_RESUS_BITS; // Enable the clocks irq irq_set_enabled(CLOCKS_IRQ, true); // 2 * clk_ref freq / clk_sys_min_freq; // assume clk_ref is 3MHz and we want clk_sys to be no lower than 1MHz uint timeout = 2 * 3 * 1; // Enable resus with the maximum timeout clocks_hw->resus.ctrl = CLOCKS_CLK_SYS_RESUS_CTRL_ENABLE_BITS | timeout; } void clock_gpio_init_int_frac(uint gpio, uint src, uint32_t div_int, uint8_t div_frac) { // Bit messy but it's as much code to loop through a lookup // table. The sources for each gpout generators are the same // so just call with the sources from GP0 uint gpclk = 0; if (gpio == 21) gpclk = clk_gpout0; else if (gpio == 23) gpclk = clk_gpout1; else if (gpio == 24) gpclk = clk_gpout2; else if (gpio == 25) gpclk = clk_gpout3; else { invalid_params_if(CLOCKS, true); } // Set up the gpclk generator clocks_hw->clk[gpclk].ctrl = (src << CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_LSB) | CLOCKS_CLK_GPOUT0_CTRL_ENABLE_BITS; clocks_hw->clk[gpclk].div = (div_int << CLOCKS_CLK_GPOUT0_DIV_INT_LSB) | div_frac; // Set gpio pin to gpclock function gpio_set_function(gpio, GPIO_FUNC_GPCK); } static const uint8_t gpin0_src[CLK_COUNT] = { CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0, // CLK_GPOUT0 CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0, // CLK_GPOUT1 CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0, // CLK_GPOUT2 CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0, // CLK_GPOUT3 CLOCKS_CLK_REF_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0, // CLK_REF CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0, // CLK_SYS CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0, // CLK_PERI CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0, // CLK_USB CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0, // CLK_ADC CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0, // CLK_RTC }; // Assert GPIN1 is GPIN0 + 1 static_assert(CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 == (CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 + 1), "hw mismatch"); static_assert(CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 == (CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 + 1), "hw mismatch"); static_assert(CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 == (CLOCKS_CLK_GPOUT2_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 + 1), "hw mismatch"); static_assert(CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 == (CLOCKS_CLK_GPOUT3_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 + 1), "hw mismatch"); static_assert(CLOCKS_CLK_REF_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 == (CLOCKS_CLK_REF_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 + 1), "hw mismatch"); static_assert(CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 == (CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 + 1), "hw mismatch"); static_assert(CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 == (CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 + 1), "hw mismatch"); static_assert(CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 == (CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 + 1), "hw mismatch"); static_assert(CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 == (CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 + 1), "hw mismatch"); static_assert(CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 == (CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 + 1), "hw mismatch"); bool clock_configure_gpin(enum clock_index clk_index, uint gpio, uint32_t src_freq, uint32_t freq) { // Configure a clock to run from a GPIO input uint gpin = 0; if (gpio == 20) gpin = 0; else if (gpio == 22) gpin = 1; else { invalid_params_if(CLOCKS, true); } // Work out sources. GPIN is always an auxsrc uint src = 0; // GPIN1 == GPIN0 + 1 uint auxsrc = gpin0_src[clk_index] + gpin; if (has_glitchless_mux(clk_index)) { // AUX src is always 1 src = 1; } // Set the GPIO function gpio_set_function(gpio, GPIO_FUNC_GPCK); // Now we have the src, auxsrc, and configured the gpio input // call clock configure to run the clock from a gpio return clock_configure(clk_index, src, auxsrc, src_freq, freq); } ================================================ FILE: pico-sdk/src/rp2_common/hardware_clocks/include/hardware/clocks.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_CLOCKS_H #define _HARDWARE_CLOCKS_H #include "pico.h" #include "hardware/structs/clocks.h" #ifdef __cplusplus extern "C" { #endif /** \file hardware/clocks.h * \defgroup hardware_clocks hardware_clocks * * Clock Management API * * This API provides a high level interface to the clock functions. * * The clocks block provides independent clocks to on-chip and external components. It takes inputs from a variety of clock * sources allowing the user to trade off performance against cost, board area and power consumption. From these sources * it uses multiple clock generators to provide the required clocks. This architecture allows the user flexibility to start and * stop clocks independently and to vary some clock frequencies whilst maintaining others at their optimum frequencies * * Please refer to the datasheet for more details on the RP2040 clocks. * * The clock source depends on which clock you are attempting to configure. The first table below shows main clock sources. If * you are not setting the Reference clock or the System clock, or you are specifying that one of those two will be using an auxiliary * clock source, then you will need to use one of the entries from the subsequent tables. * * **Main Clock Sources** * * Source | Reference Clock | System Clock * -------|-----------------|--------- * ROSC | CLOCKS_CLK_REF_CTRL_SRC_VALUE_ROSC_CLKSRC_PH | | * Auxiliary | CLOCKS_CLK_REF_CTRL_SRC_VALUE_CLKSRC_CLK_REF_AUX | CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX * XOSC | CLOCKS_CLK_REF_CTRL_SRC_VALUE_XOSC_CLKSRC | | * Reference | | CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLK_REF * * **Auxiliary Clock Sources** * * The auxiliary clock sources available for use in the configure function depend on which clock is being configured. The following table * describes the available values that can be used. Note that for clk_gpout[x], x can be 0-3. * * * Aux Source | clk_gpout[x] | clk_ref | clk_sys * -----------|------------|---------|-------- * System PLL | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS | | CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS * GPIO in 0 | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 | CLOCKS_CLK_REF_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 | CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 * GPIO in 1 | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 | CLOCKS_CLK_REF_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 | CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 * USB PLL | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB | CLOCKS_CLK_REF_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB| CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB * ROSC | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_ROSC_CLKSRC | | CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_ROSC_CLKSRC * XOSC | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_XOSC_CLKSRC | | CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_ROSC_CLKSRC * System clock | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_CLK_SYS | | | * USB Clock | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_CLK_USB | | | * ADC clock | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_CLK_ADC | | | * RTC Clock | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_CLK_RTC | | | * Ref clock | CLOCKS_CLK_GPOUTx_CTRL_AUXSRC_VALUE_CLK_REF | | | * * Aux Source | clk_peri | clk_usb | clk_adc * -----------|-----------|---------|-------- * System PLL | CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS | CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS | CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS * GPIO in 0 | CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 | CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 | CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 * GPIO in 1 | CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 | CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 | CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 * USB PLL | CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB | CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB | CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB * ROSC | CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_ROSC_CLKSRC_PH | CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_ROSC_CLKSRC_PH | CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_ROSC_CLKSRC_PH * XOSC | CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_XOSC_CLKSRC | CLOCKS_CLK_USB_CTRL_AUXSRC_VALUE_XOSC_CLKSRC | CLOCKS_CLK_ADC_CTRL_AUXSRC_VALUE_XOSC_CLKSRC * System clock | CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLK_SYS | | | * * Aux Source | clk_rtc * -----------|---------- * System PLL | CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS * GPIO in 0 | CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN0 * GPIO in 1 | CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_GPIN1 * USB PLL | CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB * ROSC | CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_ROSC_CLKSRC_PH * XOSC | CLOCKS_CLK_RTC_CTRL_AUXSRC_VALUE_XOSC_CLKSRC * * \section clock_example Example * \addtogroup hardware_clocks * \include hello_48MHz.c */ #define KHZ 1000 #define MHZ 1000000 /// \tag::pll_settings[] // // There are two PLLs in RP2040: // 1. The 'SYS PLL' generates the 125MHz system clock, the frequency is defined by `SYS_CLK_KHZ`. // 2. The 'USB PLL' generates the 48MHz USB clock, the frequency is defined by `USB_CLK_KHZ`. // // The two PLLs use the crystal oscillator output directly as their reference frequency input; the PLLs reference // frequency cannot be reduced by the dividers present in the clocks block. The crystal frequency is defined by `XOSC_KHZ` or // `XOSC_MHZ`. // // The system's default definitions are correct for the above frequencies with a 12MHz // crystal frequency. If different frequencies are required, these must be defined in // the board configuration file together with the revised PLL settings // Use `vcocalc.py` to check and calculate new PLL settings if you change any of these frequencies. // // Default PLL configuration: // REF FBDIV VCO POSTDIV // PLL SYS: 12 / 1 = 12MHz * 125 = 1500MHz / 6 / 2 = 125MHz // PLL USB: 12 / 1 = 12MHz * 100 = 1200MHz / 5 / 5 = 48MHz /// \end::pll_settings[] // PICO_CONFIG: PLL_COMMON_REFDIV, PLL reference divider setting - used for both PLLs, type=int, default=1, advanced=true, group=hardware_clocks #ifndef PLL_COMMON_REFDIV #define PLL_COMMON_REFDIV 1 #endif #if (SYS_CLK_KHZ == 125000) && (XOSC_KHZ == 12000) && (PLL_COMMON_REFDIV == 1) // PLL settings for standard 125 MHz system clock. // PICO_CONFIG: PLL_SYS_VCO_FREQ_KHZ, System clock PLL frequency, type=int, default=1500 * KHZ, advanced=true, group=hardware_clocks #ifndef PLL_SYS_VCO_FREQ_KHZ #define PLL_SYS_VCO_FREQ_KHZ (1500 * KHZ) #endif // PICO_CONFIG: PLL_SYS_POSTDIV1, System clock PLL post divider 1 setting, type=int, default=6, advanced=true, group=hardware_clocks #ifndef PLL_SYS_POSTDIV1 #define PLL_SYS_POSTDIV1 6 #endif // PICO_CONFIG: PLL_SYS_POSTDIV2, System clock PLL post divider 2 setting, type=int, default=2, advanced=true, group=hardware_clocks #ifndef PLL_SYS_POSTDIV2 #define PLL_SYS_POSTDIV2 2 #endif #endif // SYS_CLK_KHZ == 125000 && XOSC_KHZ == 12000 && PLL_COMMON_REFDIV == 1 #if !defined(PLL_SYS_VCO_FREQ_KHZ) || !defined(PLL_SYS_POSTDIV1) || !defined(PLL_SYS_POSTDIV2) #error PLL_SYS_VCO_FREQ_KHZ, PLL_SYS_POSTDIV1 and PLL_SYS_POSTDIV2 must all be specified when using custom clock setup #endif #if (USB_CLK_KHZ == 48000) && (XOSC_KHZ == 12000) && (PLL_COMMON_REFDIV == 1) // PLL settings for a USB clock of 48MHz. // PICO_CONFIG: PLL_USB_VCO_FREQ_KHZ, USB clock PLL frequency, type=int, default=1200 * KHZ, advanced=true, group=hardware_clocks #ifndef PLL_USB_VCO_FREQ_KHZ #define PLL_USB_VCO_FREQ_KHZ (1200 * KHZ) #endif // PICO_CONFIG: PLL_USB_POSTDIV1, USB clock PLL post divider 1 setting, type=int, default=5, advanced=true, group=hardware_clocks #ifndef PLL_USB_POSTDIV1 #define PLL_USB_POSTDIV1 5 #endif // PICO_CONFIG: PLL_USB_POSTDIV2, USB clock PLL post divider 2 setting, type=int, default=5, advanced=true, group=hardware_clocks #ifndef PLL_USB_POSTDIV2 #define PLL_USB_POSTDIV2 5 #endif #endif // USB_CLK_KHZ == 48000 && XOSC_KHZ == 12000 && PLL_COMMON_REFDIV == 1 #if !defined(PLL_USB_VCO_FREQ_KHZ) || !defined(PLL_USB_POSTDIV1) || !defined(PLL_USB_POSTDIV2) #error PLL_USB_VCO_FREQ_KHZ, PLL_USB_POSTDIV1 and PLL_USB_POSTDIV2 must all be specified when using custom clock setup. #endif // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_CLOCKS, Enable/disable assertions in the clocks module, type=bool, default=0, group=hardware_clocks #ifndef PARAM_ASSERTIONS_ENABLED_CLOCKS #define PARAM_ASSERTIONS_ENABLED_CLOCKS 0 #endif /*! \brief Initialise the clock hardware * \ingroup hardware_clocks * * Must be called before any other clock function. */ void clocks_init(void); /*! \brief Configure the specified clock * \ingroup hardware_clocks * * See the tables in the description for details on the possible values for clock sources. * * \param clk_index The clock to configure * \param src The main clock source, can be 0. * \param auxsrc The auxiliary clock source, which depends on which clock is being set. Can be 0 * \param src_freq Frequency of the input clock source * \param freq Requested frequency */ bool clock_configure(enum clock_index clk_index, uint32_t src, uint32_t auxsrc, uint32_t src_freq, uint32_t freq); /*! \brief Stop the specified clock * \ingroup hardware_clocks * * \param clk_index The clock to stop */ void clock_stop(enum clock_index clk_index); /*! \brief Get the current frequency of the specified clock * \ingroup hardware_clocks * * \param clk_index Clock * \return Clock frequency in Hz */ uint32_t clock_get_hz(enum clock_index clk_index); /*! \brief Measure a clocks frequency using the Frequency counter. * \ingroup hardware_clocks * * Uses the inbuilt frequency counter to measure the specified clocks frequency. * Currently, this function is accurate to +-1KHz. See the datasheet for more details. */ uint32_t frequency_count_khz(uint src); /*! \brief Set the "current frequency" of the clock as reported by clock_get_hz without actually changing the clock * \ingroup hardware_clocks * * \see clock_get_hz() */ void clock_set_reported_hz(enum clock_index clk_index, uint hz); /// \tag::frequency_count_mhz[] static inline float frequency_count_mhz(uint src) { return ((float) (frequency_count_khz(src))) / KHZ; } /// \end::frequency_count_mhz[] /*! \brief Resus callback function type. * \ingroup hardware_clocks * * User provided callback for a resus event (when clk_sys is stopped by the programmer and is restarted for them). */ typedef void (*resus_callback_t)(void); /*! \brief Enable the resus function. Restarts clk_sys if it is accidentally stopped. * \ingroup hardware_clocks * * The resuscitate function will restart the system clock if it falls below a certain speed (or stops). This * could happen if the clock source the system clock is running from stops. For example if a PLL is stopped. * * \param resus_callback a function pointer provided by the user to call if a resus event happens. */ void clocks_enable_resus(resus_callback_t resus_callback); /*! \brief Output an optionally divided clock to the specified gpio pin. * \ingroup hardware_clocks * * \param gpio The GPIO pin to output the clock to. Valid GPIOs are: 21, 23, 24, 25. These GPIOs are connected to the GPOUT0-3 clock generators. * \param src The source clock. See the register field CLOCKS_CLK_GPOUT0_CTRL_AUXSRC for a full list. The list is the same for each GPOUT clock generator. * \param div_int The integer part of the value to divide the source clock by. This is useful to not overwhelm the GPIO pin with a fast clock. this is in range of 1..2^24-1. * \param div_frac The fractional part of the value to divide the source clock by. This is in range of 0..255 (/256). */ void clock_gpio_init_int_frac(uint gpio, uint src, uint32_t div_int, uint8_t div_frac); /*! \brief Output an optionally divided clock to the specified gpio pin. * \ingroup hardware_clocks * * \param gpio The GPIO pin to output the clock to. Valid GPIOs are: 21, 23, 24, 25. These GPIOs are connected to the GPOUT0-3 clock generators. * \param src The source clock. See the register field CLOCKS_CLK_GPOUT0_CTRL_AUXSRC for a full list. The list is the same for each GPOUT clock generator. * \param div The float amount to divide the source clock by. This is useful to not overwhelm the GPIO pin with a fast clock. */ static inline void clock_gpio_init(uint gpio, uint src, float div) { uint div_int = (uint)div; uint8_t frac = (uint8_t)((div - (float)div_int) * (1u << CLOCKS_CLK_GPOUT0_DIV_INT_LSB)); clock_gpio_init_int_frac(gpio, src, div_int, frac); } /*! \brief Configure a clock to come from a gpio input * \ingroup hardware_clocks * * \param clk_index The clock to configure * \param gpio The GPIO pin to run the clock from. Valid GPIOs are: 20 and 22. * \param src_freq Frequency of the input clock source * \param freq Requested frequency */ bool clock_configure_gpin(enum clock_index clk_index, uint gpio, uint32_t src_freq, uint32_t freq); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_clocks/scripts/vcocalc.py ================================================ #!/usr/bin/env python3 import argparse parser = argparse.ArgumentParser(description="PLL parameter calculator") parser.add_argument("--input", "-i", default=12, help="Input (reference) frequency. Default 12 MHz", type=float) parser.add_argument("--ref-min", default=5, help="Override minimum reference frequency. Default 5 MHz", type=float) parser.add_argument("--vco-max", default=1600, help="Override maximum VCO frequency. Default 1600 MHz", type=float) parser.add_argument("--vco-min", default=750, help="Override minimum VCO frequency. Default 750 MHz", type=float) parser.add_argument("--low-vco", "-l", action="store_true", help="Use a lower VCO frequency when possible. This reduces power consumption, at the cost of increased jitter") parser.add_argument("output", help="Output frequency in MHz.", type=float) args = parser.parse_args() # Fixed hardware parameters fbdiv_range = range(16, 320 + 1) postdiv_range = range(1, 7 + 1) ref_min = 5 refdiv_min = 1 refdiv_max = 63 refdiv_range = range(refdiv_min, max(refdiv_min, min(refdiv_max, int(args.input / args.ref_min))) + 1) best = (0, 0, 0, 0, 0) best_margin = args.output for refdiv in refdiv_range: for fbdiv in (fbdiv_range if args.low_vco else reversed(fbdiv_range)): vco = args.input / refdiv * fbdiv if vco < args.vco_min or vco > args.vco_max: continue # pd1 is inner loop so that we prefer higher ratios of pd1:pd2 for pd2 in postdiv_range: for pd1 in postdiv_range: out = vco / pd1 / pd2 margin = abs(out - args.output) if margin < best_margin: best = (out, fbdiv, pd1, pd2, refdiv) best_margin = margin print("Requested: {} MHz".format(args.output)) print("Achieved: {} MHz".format(best[0])) print("REFDIV: {}".format(best[4])) print("FBDIV: {} (VCO = {} MHz)".format(best[1], args.input / best[4] * best[1])) print("PD1: {}".format(best[2])) print("PD2: {}".format(best[3])) ================================================ FILE: pico-sdk/src/rp2_common/hardware_divider/CMakeLists.txt ================================================ pico_simple_hardware_headers_only_target(divider) target_sources(hardware_divider INTERFACE ${CMAKE_CURRENT_LIST_DIR}/divider.S) target_link_libraries(hardware_divider_headers INTERFACE hardware_structs) ================================================ FILE: pico-sdk/src/rp2_common/hardware_divider/divider.S ================================================ #include "pico/asm_helper.S" #include "hardware/regs/addressmap.h" #include "hardware/regs/sio.h" pico_default_asm_setup // tag::hw_div_s32[] regular_func_with_section hw_divider_divmod_s32 ldr r3, =(SIO_BASE) str r0, [r3, #SIO_DIV_SDIVIDEND_OFFSET] str r1, [r3, #SIO_DIV_SDIVISOR_OFFSET] b hw_divider_divmod_return // end::hw_div_s32[] // tag::hw_div_u32[] regular_func_with_section hw_divider_divmod_u32 ldr r3, =(SIO_BASE) str r0, [r3, #SIO_DIV_UDIVIDEND_OFFSET] str r1, [r3, #SIO_DIV_UDIVISOR_OFFSET] b hw_divider_divmod_return // end::hw_div_u32[] // Common delay and return section for s32 and u32 .section .text.hw_divider_divmod_return hw_divider_divmod_return: // Branching here is 2 cycles, delay another 6 b 1f 1: b 1f 1: b 1f 1: // return 64 bit value so we can efficiently return both (note quotient must be read last) ldr r1, [r3, #SIO_DIV_REMAINDER_OFFSET] ldr r0, [r3, #SIO_DIV_QUOTIENT_OFFSET] bx lr regular_func_with_section hw_divider_save_state ldr r3, =SIO_BASE ldr r1, [r3, #SIO_DIV_UDIVIDEND_OFFSET] ldr r2, [r3, #SIO_DIV_UDIVISOR_OFFSET] stmia r0!, {r1-r2} // The 8 cycles needed to guarantee that the result is ready is ensured by the preceeding // code of 7 cycles together with any branch to it taking at least 2 cycles. ldr r1, [r3, #SIO_DIV_REMAINDER_OFFSET] ldr r2, [r3, #SIO_DIV_QUOTIENT_OFFSET] stmia r0!, {r1-r2} bx lr regular_func_with_section hw_divider_restore_state ldr r3, =SIO_BASE ldmia r0!, {r1-r2} str r1, [r3, #SIO_DIV_UDIVIDEND_OFFSET] str r2, [r3, #SIO_DIV_UDIVISOR_OFFSET] ldmia r0!, {r1-r2} str r1, [r3, #SIO_DIV_REMAINDER_OFFSET] str r2, [r3, #SIO_DIV_QUOTIENT_OFFSET] bx lr ================================================ FILE: pico-sdk/src/rp2_common/hardware_divider/include/hardware/divider.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_DIVIDER_H #define _HARDWARE_DIVIDER_H #include "pico.h" #include "hardware/structs/sio.h" /** \file hardware/divider.h * \defgroup hardware_divider hardware_divider * * Low-level hardware-divider access * * The SIO contains an 8-cycle signed/unsigned divide/modulo circuit, per core. Calculation is started by writing a dividend * and divisor to the two argument registers, DIVIDEND and DIVISOR. The divider calculates the quotient / and remainder % of * this division over the next 8 cycles, and on the 9th cycle the results can be read from the two result registers * DIV_QUOTIENT and DIV_REMAINDER. A 'ready' bit in register DIV_CSR can be polled to wait for the calculation to * complete, or software can insert a fixed 8-cycle delay * * This header provides low level macros and inline functions for accessing the hardware dividers directly, * and perhaps most usefully performing asynchronous divides. These functions however do not follow the regular * SDK conventions for saving/restoring the divider state, so are not generally safe to call from interrupt handlers * * The pico_divider library provides a more user friendly set of APIs over the divider (and support for * 64 bit divides), and of course by default regular C language integer divisions are redirected through that library, meaning * you can just use C level `/` and `%` operators and gain the benefits of the fast hardware divider. * * @see pico_divider * * \subsection divider_example Example * \addtogroup hardware_divider * \include hello_divider.c */ #ifdef __cplusplus extern "C" { #endif typedef uint64_t divmod_result_t; /*! \brief Start a signed asynchronous divide * \ingroup hardware_divider * * Start a divide of the specified signed parameters. You should wait for 8 cycles (__div_pause()) or wait for the ready bit to be set * (hw_divider_wait_ready()) prior to reading the results. * * \param a The dividend * \param b The divisor */ static inline void hw_divider_divmod_s32_start(int32_t a, int32_t b) { check_hw_layout( sio_hw_t, div_sdividend, SIO_DIV_SDIVIDEND_OFFSET); sio_hw->div_sdividend = (uint32_t)a; sio_hw->div_sdivisor = (uint32_t)b; } /*! \brief Start an unsigned asynchronous divide * \ingroup hardware_divider * * Start a divide of the specified unsigned parameters. You should wait for 8 cycles (__div_pause()) or wait for the ready bit to be set * (hw_divider_wait_ready()) prior to reading the results. * * \param a The dividend * \param b The divisor */ static inline void hw_divider_divmod_u32_start(uint32_t a, uint32_t b) { check_hw_layout( sio_hw_t, div_udividend, SIO_DIV_UDIVIDEND_OFFSET); sio_hw->div_udividend = a; sio_hw->div_udivisor = b; } /*! \brief Wait for a divide to complete * \ingroup hardware_divider * * Wait for a divide to complete */ static inline void hw_divider_wait_ready(void) { // this is #1 in lsr below static_assert(SIO_DIV_CSR_READY_BITS == 1, ""); // we use one less register and instruction than gcc which uses a TST instruction uint32_t tmp; // allow compiler to pick scratch register pico_default_asm_volatile ( "hw_divider_result_loop_%=:" "ldr %0, [%1, %2]\n\t" "lsrs %0, %0, #1\n\t" "bcc hw_divider_result_loop_%=\n\t" : "=&l" (tmp) : "l" (sio_hw), "I" (SIO_DIV_CSR_OFFSET) : ); } /*! \brief Return result of HW divide, nowait * \ingroup hardware_divider * * \note This is UNSAFE in that the calculation may not have been completed. * * \return Current result. Most significant 32 bits are the remainder, lower 32 bits are the quotient. */ static inline divmod_result_t hw_divider_result_nowait(void) { // as ugly as this looks it is actually quite efficient divmod_result_t rc = ((divmod_result_t) sio_hw->div_remainder) << 32u; rc |= sio_hw->div_quotient; return rc; } /*! \brief Return result of last asynchronous HW divide * \ingroup hardware_divider * * This function waits for the result to be ready by calling hw_divider_wait_ready(). * * \return Current result. Most significant 32 bits are the remainder, lower 32 bits are the quotient. */ static inline divmod_result_t hw_divider_result_wait(void) { hw_divider_wait_ready(); return hw_divider_result_nowait(); } /*! \brief Return result of last asynchronous HW divide, unsigned quotient only * \ingroup hardware_divider * * This function waits for the result to be ready by calling hw_divider_wait_ready(). * * \return Current unsigned quotient result. */ static inline uint32_t hw_divider_u32_quotient_wait(void) { hw_divider_wait_ready(); return sio_hw->div_quotient; } /*! \brief Return result of last asynchronous HW divide, signed quotient only * \ingroup hardware_divider * * This function waits for the result to be ready by calling hw_divider_wait_ready(). * * \return Current signed quotient result. */ static inline int32_t hw_divider_s32_quotient_wait(void) { hw_divider_wait_ready(); return (int32_t)sio_hw->div_quotient; } /*! \brief Return result of last asynchronous HW divide, unsigned remainder only * \ingroup hardware_divider * * This function waits for the result to be ready by calling hw_divider_wait_ready(). * * \return Current unsigned remainder result. */ static inline uint32_t hw_divider_u32_remainder_wait(void) { hw_divider_wait_ready(); uint32_t rc = sio_hw->div_remainder; sio_hw->div_quotient; // must read quotient to cooperate with other SDK code return rc; } /*! \brief Return result of last asynchronous HW divide, signed remainder only * \ingroup hardware_divider * * This function waits for the result to be ready by calling hw_divider_wait_ready(). * * \return Current remainder results. */ static inline int32_t hw_divider_s32_remainder_wait(void) { hw_divider_wait_ready(); int32_t rc = (int32_t)sio_hw->div_remainder; sio_hw->div_quotient; // must read quotient to cooperate with other SDK code return rc; } /*! \brief Do a signed HW divide and wait for result * \ingroup hardware_divider * * Divide \p a by \p b, wait for calculation to complete, return result as a pair of 32-bit quotient/remainder values. * * \param a The dividend * \param b The divisor * \return Results of divide as a pair of 32-bit quotient/remainder values. */ divmod_result_t hw_divider_divmod_s32(int32_t a, int32_t b); /*! \brief Do an unsigned HW divide and wait for result * \ingroup hardware_divider * * Divide \p a by \p b, wait for calculation to complete, return result as a pair of 32-bit quotient/remainder values. * * \param a The dividend * \param b The divisor * \return Results of divide as a pair of 32-bit quotient/remainder values. */ divmod_result_t hw_divider_divmod_u32(uint32_t a, uint32_t b); /*! \brief Efficient extraction of unsigned quotient from 32p32 fixed point * \ingroup hardware_divider * * \param r A pair of 32-bit quotient/remainder values. * \return Unsigned quotient */ inline static uint32_t to_quotient_u32(divmod_result_t r) { return (uint32_t) r; } /*! \brief Efficient extraction of signed quotient from 32p32 fixed point * \ingroup hardware_divider * * \param r A pair of 32-bit quotient/remainder values. * \return Unsigned quotient */ inline static int32_t to_quotient_s32(divmod_result_t r) { return (int32_t)(uint32_t)r; } /*! \brief Efficient extraction of unsigned remainder from 32p32 fixed point * \ingroup hardware_divider * * \param r A pair of 32-bit quotient/remainder values. * \return Unsigned remainder * * \note On Arm this is just a 32 bit register move or a nop */ inline static uint32_t to_remainder_u32(divmod_result_t r) { return (uint32_t)(r >> 32u); } /*! \brief Efficient extraction of signed remainder from 32p32 fixed point * \ingroup hardware_divider * * \param r A pair of 32-bit quotient/remainder values. * \return Signed remainder * * \note On arm this is just a 32 bit register move or a nop */ inline static int32_t to_remainder_s32(divmod_result_t r) { return (int32_t)(r >> 32u); } /*! \brief Do an unsigned HW divide, wait for result, return quotient * \ingroup hardware_divider * * Divide \p a by \p b, wait for calculation to complete, return quotient. * * \param a The dividend * \param b The divisor * \return Quotient results of the divide */ static inline uint32_t hw_divider_u32_quotient(uint32_t a, uint32_t b) { return to_quotient_u32(hw_divider_divmod_u32(a, b)); } /*! \brief Do an unsigned HW divide, wait for result, return remainder * \ingroup hardware_divider * * Divide \p a by \p b, wait for calculation to complete, return remainder. * * \param a The dividend * \param b The divisor * \return Remainder results of the divide */ static inline uint32_t hw_divider_u32_remainder(uint32_t a, uint32_t b) { return to_remainder_u32(hw_divider_divmod_u32(a, b)); } /*! \brief Do a signed HW divide, wait for result, return quotient * \ingroup hardware_divider * * Divide \p a by \p b, wait for calculation to complete, return quotient. * * \param a The dividend * \param b The divisor * \return Quotient results of the divide */ static inline int32_t hw_divider_quotient_s32(int32_t a, int32_t b) { return to_quotient_s32(hw_divider_divmod_s32(a, b)); } /*! \brief Do a signed HW divide, wait for result, return remainder * \ingroup hardware_divider * * Divide \p a by \p b, wait for calculation to complete, return remainder. * * \param a The dividend * \param b The divisor * \return Remainder results of the divide */ static inline int32_t hw_divider_remainder_s32(int32_t a, int32_t b) { return to_remainder_s32(hw_divider_divmod_s32(a, b)); } /*! \brief Pause for exact amount of time needed for a asynchronous divide to complete * \ingroup hardware_divider */ static inline void hw_divider_pause(void) { pico_default_asm_volatile( "b _1_%=\n" "_1_%=:\n" "b _2_%=\n" "_2_%=:\n" "b _3_%=\n" "_3_%=:\n" "b _4_%=\n" "_4_%=:\n" :::); } /*! \brief Do a hardware unsigned HW divide, wait for result, return quotient * \ingroup hardware_divider * * Divide \p a by \p b, wait for calculation to complete, return quotient. * * \param a The dividend * \param b The divisor * \return Quotient result of the divide */ static inline uint32_t hw_divider_u32_quotient_inlined(uint32_t a, uint32_t b) { hw_divider_divmod_u32_start(a, b); hw_divider_pause(); return sio_hw->div_quotient; } /*! \brief Do a hardware unsigned HW divide, wait for result, return remainder * \ingroup hardware_divider * * Divide \p a by \p b, wait for calculation to complete, return remainder. * * \param a The dividend * \param b The divisor * \return Remainder result of the divide */ static inline uint32_t hw_divider_u32_remainder_inlined(uint32_t a, uint32_t b) { hw_divider_divmod_u32_start(a, b); hw_divider_pause(); uint32_t rc = sio_hw->div_remainder; sio_hw->div_quotient; // must read quotient to cooperate with other SDK code return rc; } /*! \brief Do a hardware signed HW divide, wait for result, return quotient * \ingroup hardware_divider * * Divide \p a by \p b, wait for calculation to complete, return quotient. * * \param a The dividend * \param b The divisor * \return Quotient result of the divide */ static inline int32_t hw_divider_s32_quotient_inlined(int32_t a, int32_t b) { hw_divider_divmod_s32_start(a, b); hw_divider_pause(); return (int32_t)sio_hw->div_quotient; } /*! \brief Do a hardware signed HW divide, wait for result, return remainder * \ingroup hardware_divider * * Divide \p a by \p b, wait for calculation to complete, return remainder. * * \param a The dividend * \param b The divisor * \return Remainder result of the divide */ static inline int32_t hw_divider_s32_remainder_inlined(int32_t a, int32_t b) { hw_divider_divmod_s32_start(a, b); hw_divider_pause(); int32_t rc = (int32_t)sio_hw->div_remainder; sio_hw->div_quotient; // must read quotient to cooperate with other SDK code return rc; } typedef struct { uint32_t values[4]; } hw_divider_state_t; /*! \brief Save the calling cores hardware divider state * \ingroup hardware_divider * * Copy the current core's hardware divider state into the provided structure. This method * waits for the divider results to be stable, then copies them to memory. * They can be restored via hw_divider_restore_state() * * \param dest the location to store the divider state */ void hw_divider_save_state(hw_divider_state_t *dest); /*! \brief Load a saved hardware divider state into the current core's hardware divider * \ingroup hardware_divider * * Copy the passed hardware divider state into the hardware divider. * * \param src the location to load the divider state from */ void hw_divider_restore_state(hw_divider_state_t *src); #ifdef __cplusplus } #endif #endif // _HARDWARE_DIVIDER_H ================================================ FILE: pico-sdk/src/rp2_common/hardware_divider/include/hardware/divider_helper.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // Note this file is always included by another, so does not do pico_default_asm_setup #include "hardware/regs/addressmap.h" #include "hardware/regs/sio.h" #if SIO_DIV_CSR_READY_LSB == 0 .equ SIO_DIV_CSR_READY_SHIFT_FOR_CARRY, 1 #else need to change SHIFT above #endif #if SIO_DIV_CSR_DIRTY_LSB == 1 .equ SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY, 2 #else need to change SHIFT above #endif // SIO_BASE ptr in r2; pushes r4-r7, lr to stack .macro save_div_state_and_lr // originally we did this, however a) it uses r3, and b) the push and dividend/divisor // readout takes 8 cycles, c) any IRQ which uses the divider will necessarily put the // data back, which will immediately make it ready // // // ldr r3, [r2, #SIO_DIV_CSR_OFFSET] // // // wait for results as we can't save signed-ness of operation // // 1: // // lsrs r3, #SIO_DIV_CSR_READY_SHIFT_FOR_CARRY // // bcc 1b // 6 cycle push + 2 ldr ensures the 8 cycle delay before remainder and quotient are ready push {r4, r5, r6, r7, lr} // note we must read quotient last, and since it isn't the last reg, we'll not use ldmia! ldr r4, [r2, #SIO_DIV_UDIVIDEND_OFFSET] ldr r5, [r2, #SIO_DIV_UDIVISOR_OFFSET] ldr r7, [r2, #SIO_DIV_REMAINDER_OFFSET] ldr r6, [r2, #SIO_DIV_QUOTIENT_OFFSET] .endm // restores divider state from r4-r7, then pops them and pc .macro restore_div_state_and_return // writing sdividend (r4), sdivisor (r5), quotient (r6), remainder (r7) in that order // // it is worth considering what happens if we are interrupted // // after writing r4: we are DIRTY and !READY // ... interruptor using div will complete based on incorrect inputs, but dividend at least will be // saved/restored correctly and we'll restore the rest ourselves // after writing r4, r5: we are DIRTY and !READY // ... interruptor using div will complete based on possibly wrongly signed inputs, but dividend, divisor // at least will be saved/restored correctly and and we'll restore the rest ourselves // after writing r4, r5, r6: we are DIRTY and READY // ... interruptor using div will dividend, divisor, quotient registers as is (what we just restored ourselves), // and we'll restore the remainder after the fact // note we are not use STM not because it can be restarted due to interrupt which is harmless, more because this is 1 cycle IO space // and so 4 reads is cheaper (and we don't have to adjust r2) // note also, that we must restore via UDIVI* rather than SDIVI* to prevent the quotient/remainder being negated on read based // on the signs of the inputs str r4, [r2, #SIO_DIV_UDIVIDEND_OFFSET] str r5, [r2, #SIO_DIV_UDIVISOR_OFFSET] str r7, [r2, #SIO_DIV_REMAINDER_OFFSET] str r6, [r2, #SIO_DIV_QUOTIENT_OFFSET] pop {r4, r5, r6, r7, pc} .endm ================================================ FILE: pico-sdk/src/rp2_common/hardware_dma/CMakeLists.txt ================================================ pico_simple_hardware_target(dma) pico_mirrored_target_link_libraries(hardware_dma INTERFACE hardware_claim) ================================================ FILE: pico-sdk/src/rp2_common/hardware_dma/dma.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "hardware/dma.h" #include "hardware/claim.h" #define DMA_CHAN_STRIDE (DMA_CH1_CTRL_TRIG_OFFSET - DMA_CH0_CTRL_TRIG_OFFSET) check_hw_size(dma_channel_hw_t, DMA_CHAN_STRIDE); check_hw_layout(dma_hw_t, abort, DMA_CHAN_ABORT_OFFSET); // sanity check static_assert(offsetof(dma_hw_t, ch[0].ctrl_trig) == DMA_CH0_CTRL_TRIG_OFFSET, "hw mismatch"); static_assert(offsetof(dma_hw_t, ch[1].ctrl_trig) == DMA_CH1_CTRL_TRIG_OFFSET, "hw mismatch"); static_assert(NUM_DMA_CHANNELS <= 16, ""); static uint16_t _claimed; static uint8_t _timer_claimed; void dma_channel_claim(uint channel) { check_dma_channel_param(channel); hw_claim_or_assert((uint8_t *) &_claimed, channel, "DMA channel %d is already claimed"); } void dma_claim_mask(uint32_t mask) { for(uint i = 0; mask; i++, mask >>= 1u) { if (mask & 1u) dma_channel_claim(i); } } void dma_channel_unclaim(uint channel) { check_dma_channel_param(channel); hw_claim_clear((uint8_t *) &_claimed, channel); } void dma_unclaim_mask(uint32_t mask) { for(uint i = 0; mask; i++, mask >>= 1u) { if (mask & 1u) dma_channel_unclaim(i); } } int dma_claim_unused_channel(bool required) { return hw_claim_unused_from_range((uint8_t*)&_claimed, required, 0, NUM_DMA_CHANNELS-1, "No DMA channels are available"); } bool dma_channel_is_claimed(uint channel) { check_dma_channel_param(channel); return hw_is_claimed((uint8_t *) &_claimed, channel); } void dma_timer_claim(uint timer) { check_dma_timer_param(timer); hw_claim_or_assert(&_timer_claimed, timer, "DMA timer %d is already claimed"); } void dma_timer_unclaim(uint timer) { check_dma_timer_param(timer); hw_claim_clear(&_timer_claimed, timer); } int dma_claim_unused_timer(bool required) { return hw_claim_unused_from_range(&_timer_claimed, required, 0, NUM_DMA_TIMERS-1, "No DMA timers are available"); } bool dma_timer_is_claimed(uint timer) { check_dma_timer_param(timer); return hw_is_claimed(&_timer_claimed, timer); } void dma_channel_cleanup(uint channel) { check_dma_channel_param(channel); // Disable CHAIN_TO, and disable channel, so that it ignores any further triggers hw_write_masked( &dma_hw->ch[channel].al1_ctrl, (channel << DMA_CH0_CTRL_TRIG_CHAIN_TO_LSB) | (0u << DMA_CH0_CTRL_TRIG_EN_LSB), DMA_CH0_CTRL_TRIG_CHAIN_TO_BITS | DMA_CH0_CTRL_TRIG_EN_BITS ); // disable IRQs first as abort can cause spurious IRQs dma_channel_set_irq0_enabled(channel, false); dma_channel_set_irq1_enabled(channel, false); dma_channel_abort(channel); // finally clear the IRQ status, which may have been set during abort dma_hw->intr = 1u << channel; } #ifndef NDEBUG void print_dma_ctrl(dma_channel_hw_t *channel) { uint32_t ctrl = channel->ctrl_trig; int rgsz = (ctrl & DMA_CH0_CTRL_TRIG_RING_SIZE_BITS) >> DMA_CH0_CTRL_TRIG_RING_SIZE_LSB; printf("(%08x) ber %d rer %d wer %d busy %d trq %d cto %d rgsl %d rgsz %d inw %d inr %d sz %d hip %d en %d", (uint) ctrl, ctrl & DMA_CH0_CTRL_TRIG_AHB_ERROR_BITS ? 1 : 0, ctrl & DMA_CH0_CTRL_TRIG_READ_ERROR_BITS ? 1 : 0, ctrl & DMA_CH0_CTRL_TRIG_WRITE_ERROR_BITS ? 1 : 0, ctrl & DMA_CH0_CTRL_TRIG_BUSY_BITS ? 1 : 0, (int) ((ctrl & DMA_CH0_CTRL_TRIG_TREQ_SEL_BITS) >> DMA_CH0_CTRL_TRIG_TREQ_SEL_LSB), (int) ((ctrl & DMA_CH0_CTRL_TRIG_CHAIN_TO_BITS) >> DMA_CH0_CTRL_TRIG_CHAIN_TO_LSB), ctrl & DMA_CH0_CTRL_TRIG_RING_SEL_BITS ? 1 : 0, rgsz ? (1 << rgsz) : 0, ctrl & DMA_CH0_CTRL_TRIG_INCR_WRITE_BITS ? 1 : 0, ctrl & DMA_CH0_CTRL_TRIG_INCR_READ_BITS ? 1 : 0, 1 << ((ctrl & DMA_CH0_CTRL_TRIG_DATA_SIZE_BITS) >> DMA_CH0_CTRL_TRIG_DATA_SIZE_LSB), ctrl & DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_BITS ? 1 : 0, ctrl & DMA_CH0_CTRL_TRIG_EN_BITS ? 1 : 0); } #endif #if PARAM_ASSERTIONS_ENABLED(DMA) void check_dma_channel_param_impl(uint __unused channel) { valid_params_if(DMA, channel < NUM_DMA_CHANNELS); } #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_dma/include/hardware/dma.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_DMA_H #define _HARDWARE_DMA_H #include "pico.h" #include "hardware/structs/dma.h" #include "hardware/regs/dreq.h" #include "pico/assert.h" #ifdef __cplusplus extern "C" { #endif /** \file hardware/dma.h * \defgroup hardware_dma hardware_dma * * DMA Controller API * * The RP2040 Direct Memory Access (DMA) master performs bulk data transfers on a processor’s * behalf. This leaves processors free to attend to other tasks, or enter low-power sleep states. The * data throughput of the DMA is also significantly higher than one of RP2040’s processors. * * The DMA can perform one read access and one write access, up to 32 bits in size, every clock cycle. * There are 12 independent channels, which each supervise a sequence of bus transfers, usually in * one of the following scenarios: * * * Memory to peripheral * * Peripheral to memory * * Memory to memory */ // these are not defined in generated dreq.h #define DREQ_DMA_TIMER0 DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_TIMER0 #define DREQ_DMA_TIMER1 DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_TIMER1 #define DREQ_DMA_TIMER2 DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_TIMER2 #define DREQ_DMA_TIMER3 DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_TIMER3 #define DREQ_FORCE DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_DMA, Enable/disable DMA assertions, type=bool, default=0, group=hardware_dma #ifndef PARAM_ASSERTIONS_ENABLED_DMA #define PARAM_ASSERTIONS_ENABLED_DMA 0 #endif static inline void check_dma_channel_param(__unused uint channel) { #if PARAM_ASSERTIONS_ENABLED(DMA) // this method is used a lot by inline functions so avoid code bloat by deferring to function extern void check_dma_channel_param_impl(uint channel); check_dma_channel_param_impl(channel); #endif } static inline void check_dma_timer_param(__unused uint timer_num) { valid_params_if(DMA, timer_num < NUM_DMA_TIMERS); } inline static dma_channel_hw_t *dma_channel_hw_addr(uint channel) { check_dma_channel_param(channel); return &dma_hw->ch[channel]; } /*! \brief Mark a dma channel as used * \ingroup hardware_dma * * Method for cooperative claiming of hardware. Will cause a panic if the channel * is already claimed. Use of this method by libraries detects accidental * configurations that would fail in unpredictable ways. * * \param channel the dma channel */ void dma_channel_claim(uint channel); /*! \brief Mark multiple dma channels as used * \ingroup hardware_dma * * Method for cooperative claiming of hardware. Will cause a panic if any of the channels * are already claimed. Use of this method by libraries detects accidental * configurations that would fail in unpredictable ways. * * \param channel_mask Bitfield of all required channels to claim (bit 0 == channel 0, bit 1 == channel 1 etc) */ void dma_claim_mask(uint32_t channel_mask); /*! \brief Mark a dma channel as no longer used * \ingroup hardware_dma * * \param channel the dma channel to release */ void dma_channel_unclaim(uint channel); /*! \brief Mark multiple dma channels as no longer used * \ingroup hardware_dma * * \param channel_mask Bitfield of all channels to unclaim (bit 0 == channel 0, bit 1 == channel 1 etc) */ void dma_unclaim_mask(uint32_t channel_mask); /*! \brief Claim a free dma channel * \ingroup hardware_dma * * \param required if true the function will panic if none are available * \return the dma channel number or -1 if required was false, and none were free */ int dma_claim_unused_channel(bool required); /*! \brief Determine if a dma channel is claimed * \ingroup hardware_dma * * \param channel the dma channel * \return true if the channel is claimed, false otherwise * \see dma_channel_claim * \see dma_channel_claim_mask */ bool dma_channel_is_claimed(uint channel); /** \brief DMA channel configuration * \defgroup channel_config channel_config * \ingroup hardware_dma * * A DMA channel needs to be configured, these functions provide handy helpers to set up configuration * structures. See \ref dma_channel_config */ /*! \brief Enumeration of available DMA channel transfer sizes. * \ingroup hardware_dma * * Names indicate the number of bits. */ enum dma_channel_transfer_size { DMA_SIZE_8 = 0, ///< Byte transfer (8 bits) DMA_SIZE_16 = 1, ///< Half word transfer (16 bits) DMA_SIZE_32 = 2 ///< Word transfer (32 bits) }; typedef struct { uint32_t ctrl; } dma_channel_config; /*! \brief Set DMA channel read increment in a channel configuration object * \ingroup channel_config * * \param c Pointer to channel configuration object * \param incr True to enable read address increments, if false, each read will be from the same address * Usually disabled for peripheral to memory transfers */ static inline void channel_config_set_read_increment(dma_channel_config *c, bool incr) { c->ctrl = incr ? (c->ctrl | DMA_CH0_CTRL_TRIG_INCR_READ_BITS) : (c->ctrl & ~DMA_CH0_CTRL_TRIG_INCR_READ_BITS); } /*! \brief Set DMA channel write increment in a channel configuration object * \ingroup channel_config * * \param c Pointer to channel configuration object * \param incr True to enable write address increments, if false, each write will be to the same address * Usually disabled for memory to peripheral transfers */ static inline void channel_config_set_write_increment(dma_channel_config *c, bool incr) { c->ctrl = incr ? (c->ctrl | DMA_CH0_CTRL_TRIG_INCR_WRITE_BITS) : (c->ctrl & ~DMA_CH0_CTRL_TRIG_INCR_WRITE_BITS); } /*! \brief Select a transfer request signal in a channel configuration object * \ingroup channel_config * * The channel uses the transfer request signal to pace its data transfer rate. * Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system). * 0x0 to 0x3a -> select DREQ n as TREQ * 0x3b -> Select Timer 0 as TREQ * 0x3c -> Select Timer 1 as TREQ * 0x3d -> Select Timer 2 as TREQ (Optional) * 0x3e -> Select Timer 3 as TREQ (Optional) * 0x3f -> Permanent request, for unpaced transfers. * * \param c Pointer to channel configuration data * \param dreq Source (see description) */ static inline void channel_config_set_dreq(dma_channel_config *c, uint dreq) { assert(dreq <= DREQ_FORCE); c->ctrl = (c->ctrl & ~DMA_CH0_CTRL_TRIG_TREQ_SEL_BITS) | (dreq << DMA_CH0_CTRL_TRIG_TREQ_SEL_LSB); } /*! \brief Set DMA channel chain_to channel in a channel configuration object * \ingroup channel_config * * When this channel completes, it will trigger the channel indicated by chain_to. Disable by * setting chain_to to itself (the same channel) * * \param c Pointer to channel configuration object * \param chain_to Channel to trigger when this channel completes. */ static inline void channel_config_set_chain_to(dma_channel_config *c, uint chain_to) { assert(chain_to <= NUM_DMA_CHANNELS); c->ctrl = (c->ctrl & ~DMA_CH0_CTRL_TRIG_CHAIN_TO_BITS) | (chain_to << DMA_CH0_CTRL_TRIG_CHAIN_TO_LSB); } /*! \brief Set the size of each DMA bus transfer in a channel configuration object * \ingroup channel_config * * Set the size of each bus transfer (byte/halfword/word). The read and write addresses * advance by the specific amount (1/2/4 bytes) with each transfer. * * \param c Pointer to channel configuration object * \param size See enum for possible values. */ static inline void channel_config_set_transfer_data_size(dma_channel_config *c, enum dma_channel_transfer_size size) { assert(size == DMA_SIZE_8 || size == DMA_SIZE_16 || size == DMA_SIZE_32); c->ctrl = (c->ctrl & ~DMA_CH0_CTRL_TRIG_DATA_SIZE_BITS) | (((uint)size) << DMA_CH0_CTRL_TRIG_DATA_SIZE_LSB); } /*! \brief Set address wrapping parameters in a channel configuration object * \ingroup channel_config * * Size of address wrap region. If 0, don’t wrap. For values n > 0, only the lower n bits of the address * will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned * ring buffers. * Ring sizes between 2 and 32768 bytes are possible (size_bits from 1 - 15) * * 0x0 -> No wrapping. * * \param c Pointer to channel configuration object * \param write True to apply to write addresses, false to apply to read addresses * \param size_bits 0 to disable wrapping. Otherwise the size in bits of the changing part of the address. * Effectively wraps the address on a (1 << size_bits) byte boundary. */ static inline void channel_config_set_ring(dma_channel_config *c, bool write, uint size_bits) { assert(size_bits < 32); c->ctrl = (c->ctrl & ~(DMA_CH0_CTRL_TRIG_RING_SIZE_BITS | DMA_CH0_CTRL_TRIG_RING_SEL_BITS)) | (size_bits << DMA_CH0_CTRL_TRIG_RING_SIZE_LSB) | (write ? DMA_CH0_CTRL_TRIG_RING_SEL_BITS : 0); } /*! \brief Set DMA byte swapping config in a channel configuration object * \ingroup channel_config * * No effect for byte data, for halfword data, the two bytes of each halfword are * swapped. For word data, the four bytes of each word are swapped to reverse their order. * * \param c Pointer to channel configuration object * \param bswap True to enable byte swapping */ static inline void channel_config_set_bswap(dma_channel_config *c, bool bswap) { c->ctrl = bswap ? (c->ctrl | DMA_CH0_CTRL_TRIG_BSWAP_BITS) : (c->ctrl & ~DMA_CH0_CTRL_TRIG_BSWAP_BITS); } /*! \brief Set IRQ quiet mode in a channel configuration object * \ingroup channel_config * * In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, * an IRQ is raised when NULL is written to a trigger register, indicating the end of a control * block chain. * * \param c Pointer to channel configuration object * \param irq_quiet True to enable quiet mode, false to disable. */ static inline void channel_config_set_irq_quiet(dma_channel_config *c, bool irq_quiet) { c->ctrl = irq_quiet ? (c->ctrl | DMA_CH0_CTRL_TRIG_IRQ_QUIET_BITS) : (c->ctrl & ~DMA_CH0_CTRL_TRIG_IRQ_QUIET_BITS); } /*! * \brief Set the channel priority in a channel configuration object * \ingroup channel_config * * When true, gives a channel preferential treatment in issue scheduling: in each scheduling round, * all high priority channels are considered first, and then only a single low * priority channel, before returning to the high priority channels. * * This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. * If the DMA is not saturated then a low priority channel will see no loss of throughput. * * \param c Pointer to channel configuration object * \param high_priority True to enable high priority */ static inline void channel_config_set_high_priority(dma_channel_config *c, bool high_priority) { c->ctrl = high_priority ? (c->ctrl | DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_BITS) : (c->ctrl & ~DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_BITS); } /*! * \brief Enable/Disable the DMA channel in a channel configuration object * \ingroup channel_config * * When false, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will * remain high if already high) * * \param c Pointer to channel configuration object * \param enable True to enable the DMA channel. When enabled, the channel will respond to triggering events, and start transferring data. * */ static inline void channel_config_set_enable(dma_channel_config *c, bool enable) { c->ctrl = enable ? (c->ctrl | DMA_CH0_CTRL_TRIG_EN_BITS) : (c->ctrl & ~DMA_CH0_CTRL_TRIG_EN_BITS); } /*! \brief Enable access to channel by sniff hardware in a channel configuration object * \ingroup channel_config * * Sniff HW must be enabled and have this channel selected. * * \param c Pointer to channel configuration object * \param sniff_enable True to enable the Sniff HW access to this DMA channel. */ static inline void channel_config_set_sniff_enable(dma_channel_config *c, bool sniff_enable) { c->ctrl = sniff_enable ? (c->ctrl | DMA_CH0_CTRL_TRIG_SNIFF_EN_BITS) : (c->ctrl & ~DMA_CH0_CTRL_TRIG_SNIFF_EN_BITS); } /*! \brief Get the default channel configuration for a given channel * \ingroup channel_config * * Setting | Default * --------|-------- * Read Increment | true * Write Increment | false * DReq | DREQ_FORCE * Chain to | self * Data size | DMA_SIZE_32 * Ring | write=false, size=0 (i.e. off) * Byte Swap | false * Quiet IRQs | false * High Priority | false * Channel Enable | true * Sniff Enable | false * * \param channel DMA channel * \return the default configuration which can then be modified. */ static inline dma_channel_config dma_channel_get_default_config(uint channel) { dma_channel_config c = {0}; channel_config_set_read_increment(&c, true); channel_config_set_write_increment(&c, false); channel_config_set_dreq(&c, DREQ_FORCE); channel_config_set_chain_to(&c, channel); channel_config_set_transfer_data_size(&c, DMA_SIZE_32); channel_config_set_ring(&c, false, 0); channel_config_set_bswap(&c, false); channel_config_set_irq_quiet(&c, false); channel_config_set_enable(&c, true); channel_config_set_sniff_enable(&c, false); channel_config_set_high_priority( &c, false); return c; } /*! \brief Get the current configuration for the specified channel. * \ingroup channel_config * * \param channel DMA channel * \return The current configuration as read from the HW register (not cached) */ static inline dma_channel_config dma_get_channel_config(uint channel) { dma_channel_config c; c.ctrl = dma_channel_hw_addr(channel)->ctrl_trig; return c; } /*! \brief Get the raw configuration register from a channel configuration * \ingroup channel_config * * \param config Pointer to a config structure. * \return Register content */ static inline uint32_t channel_config_get_ctrl_value(const dma_channel_config *config) { return config->ctrl; } /*! \brief Set a channel configuration * \ingroup hardware_dma * * \param channel DMA channel * \param config Pointer to a config structure with required configuration * \param trigger True to trigger the transfer immediately */ static inline void dma_channel_set_config(uint channel, const dma_channel_config *config, bool trigger) { // Don't use CTRL_TRIG since we don't want to start a transfer if (!trigger) { dma_channel_hw_addr(channel)->al1_ctrl = channel_config_get_ctrl_value(config); } else { dma_channel_hw_addr(channel)->ctrl_trig = channel_config_get_ctrl_value(config); } } /*! \brief Set the DMA initial read address. * \ingroup hardware_dma * * \param channel DMA channel * \param read_addr Initial read address of transfer. * \param trigger True to start the transfer immediately */ static inline void dma_channel_set_read_addr(uint channel, const volatile void *read_addr, bool trigger) { if (!trigger) { dma_channel_hw_addr(channel)->read_addr = (uintptr_t) read_addr; } else { dma_channel_hw_addr(channel)->al3_read_addr_trig = (uintptr_t) read_addr; } } /*! \brief Set the DMA initial write address * \ingroup hardware_dma * * \param channel DMA channel * \param write_addr Initial write address of transfer. * \param trigger True to start the transfer immediately */ static inline void dma_channel_set_write_addr(uint channel, volatile void *write_addr, bool trigger) { if (!trigger) { dma_channel_hw_addr(channel)->write_addr = (uintptr_t) write_addr; } else { dma_channel_hw_addr(channel)->al2_write_addr_trig = (uintptr_t) write_addr; } } /*! \brief Set the number of bus transfers the channel will do * \ingroup hardware_dma * * \param channel DMA channel * \param trans_count The number of transfers (not NOT bytes, see channel_config_set_transfer_data_size) * \param trigger True to start the transfer immediately */ static inline void dma_channel_set_trans_count(uint channel, uint32_t trans_count, bool trigger) { if (!trigger) { dma_channel_hw_addr(channel)->transfer_count = trans_count; } else { dma_channel_hw_addr(channel)->al1_transfer_count_trig = trans_count; } } /*! \brief Configure all DMA parameters and optionally start transfer * \ingroup hardware_dma * * \param channel DMA channel * \param config Pointer to DMA config structure * \param write_addr Initial write address * \param read_addr Initial read address * \param transfer_count Number of transfers to perform * \param trigger True to start the transfer immediately */ static inline void dma_channel_configure(uint channel, const dma_channel_config *config, volatile void *write_addr, const volatile void *read_addr, uint transfer_count, bool trigger) { dma_channel_set_read_addr(channel, read_addr, false); dma_channel_set_write_addr(channel, write_addr, false); dma_channel_set_trans_count(channel, transfer_count, false); dma_channel_set_config(channel, config, trigger); } /*! \brief Start a DMA transfer from a buffer immediately * \ingroup hardware_dma * * \param channel DMA channel * \param read_addr Sets the initial read address * \param transfer_count Number of transfers to make. Not bytes, but the number of transfers of channel_config_set_transfer_data_size() to be sent. */ inline static void __attribute__((always_inline)) dma_channel_transfer_from_buffer_now(uint channel, const volatile void *read_addr, uint32_t transfer_count) { // check_dma_channel_param(channel); dma_channel_hw_t *hw = dma_channel_hw_addr(channel); hw->read_addr = (uintptr_t) read_addr; hw->al1_transfer_count_trig = transfer_count; } /*! \brief Start a DMA transfer to a buffer immediately * \ingroup hardware_dma * * \param channel DMA channel * \param write_addr Sets the initial write address * \param transfer_count Number of transfers to make. Not bytes, but the number of transfers of channel_config_set_transfer_data_size() to be sent. */ inline static void dma_channel_transfer_to_buffer_now(uint channel, volatile void *write_addr, uint32_t transfer_count) { dma_channel_hw_t *hw = dma_channel_hw_addr(channel); hw->write_addr = (uintptr_t) write_addr; hw->al1_transfer_count_trig = transfer_count; } /*! \brief Start one or more channels simultaneously * \ingroup hardware_dma * * \param chan_mask Bitmask of all the channels requiring starting. Channel 0 = bit 0, channel 1 = bit 1 etc. */ static inline void dma_start_channel_mask(uint32_t chan_mask) { valid_params_if(DMA, chan_mask && chan_mask < (1u << NUM_DMA_CHANNELS)); dma_hw->multi_channel_trigger = chan_mask; } /*! \brief Start a single DMA channel * \ingroup hardware_dma * * \param channel DMA channel */ static inline void dma_channel_start(uint channel) { dma_start_channel_mask(1u << channel); } /*! \brief Stop a DMA transfer * \ingroup hardware_dma * * Function will only return once the DMA has stopped. * * Note that due to errata RP2040-E13, aborting a channel which has transfers * in-flight (i.e. an individual read has taken place but the corresponding write has not), the ABORT * status bit will clear prematurely, and subsequently the in-flight * transfers will trigger a completion interrupt once they complete. * * The effect of this is that you \em may see a spurious completion interrupt * on the channel as a result of calling this method. * * The calling code should be sure to ignore a completion IRQ as a result of this method. This may * not require any additional work, as aborting a channel which may be about to complete, when you have a completion * IRQ handler registered, is inherently race-prone, and so code is likely needed to disambiguate the two occurrences. * * If that is not the case, but you do have a channel completion IRQ handler registered, you can simply * disable/re-enable the IRQ around the call to this method as shown by this code fragment (using DMA IRQ0). * * \code * // disable the channel on IRQ0 * dma_channel_set_irq0_enabled(channel, false); * // abort the channel * dma_channel_abort(channel); * // clear the spurious IRQ (if there was one) * dma_channel_acknowledge_irq0(channel); * // re-enable the channel on IRQ0 * dma_channel_set_irq0_enabled(channel, true); *\endcode * * \param channel DMA channel */ static inline void dma_channel_abort(uint channel) { check_dma_channel_param(channel); dma_hw->abort = 1u << channel; // Bit will go 0 once channel has reached safe state // (i.e. any in-flight transfers have retired) while (dma_hw->ch[channel].ctrl_trig & DMA_CH0_CTRL_TRIG_BUSY_BITS) tight_loop_contents(); } /*! \brief Enable single DMA channel's interrupt via DMA_IRQ_0 * \ingroup hardware_dma * * \param channel DMA channel * \param enabled true to enable interrupt 0 on specified channel, false to disable. */ static inline void dma_channel_set_irq0_enabled(uint channel, bool enabled) { check_dma_channel_param(channel); check_hw_layout(dma_hw_t, inte0, DMA_INTE0_OFFSET); if (enabled) hw_set_bits(&dma_hw->inte0, 1u << channel); else hw_clear_bits(&dma_hw->inte0, 1u << channel); } /*! \brief Enable multiple DMA channels' interrupts via DMA_IRQ_0 * \ingroup hardware_dma * * \param channel_mask Bitmask of all the channels to enable/disable. Channel 0 = bit 0, channel 1 = bit 1 etc. * \param enabled true to enable all the interrupts specified in the mask, false to disable all the interrupts specified in the mask. */ static inline void dma_set_irq0_channel_mask_enabled(uint32_t channel_mask, bool enabled) { if (enabled) { hw_set_bits(&dma_hw->inte0, channel_mask); } else { hw_clear_bits(&dma_hw->inte0, channel_mask); } } /*! \brief Enable single DMA channel's interrupt via DMA_IRQ_1 * \ingroup hardware_dma * * \param channel DMA channel * \param enabled true to enable interrupt 1 on specified channel, false to disable. */ static inline void dma_channel_set_irq1_enabled(uint channel, bool enabled) { check_dma_channel_param(channel); check_hw_layout(dma_hw_t, inte1, DMA_INTE1_OFFSET); if (enabled) hw_set_bits(&dma_hw->inte1, 1u << channel); else hw_clear_bits(&dma_hw->inte1, 1u << channel); } /*! \brief Enable multiple DMA channels' interrupts via DMA_IRQ_1 * \ingroup hardware_dma * * \param channel_mask Bitmask of all the channels to enable/disable. Channel 0 = bit 0, channel 1 = bit 1 etc. * \param enabled true to enable all the interrupts specified in the mask, false to disable all the interrupts specified in the mask. */ static inline void dma_set_irq1_channel_mask_enabled(uint32_t channel_mask, bool enabled) { if (enabled) { hw_set_bits(&dma_hw->inte1, channel_mask); } else { hw_clear_bits(&dma_hw->inte1, channel_mask); } } /*! \brief Enable single DMA channel interrupt on either DMA_IRQ_0 or DMA_IRQ_1 * \ingroup hardware_dma * * \param irq_index the IRQ index; either 0 or 1 for DMA_IRQ_0 or DMA_IRQ_1 * \param channel DMA channel * \param enabled true to enable interrupt via irq_index for specified channel, false to disable. */ static inline void dma_irqn_set_channel_enabled(uint irq_index, uint channel, bool enabled) { invalid_params_if(DMA, irq_index > 1); if (irq_index) { dma_channel_set_irq1_enabled(channel, enabled); } else { dma_channel_set_irq0_enabled(channel, enabled); } } /*! \brief Enable multiple DMA channels' interrupt via either DMA_IRQ_0 or DMA_IRQ_1 * \ingroup hardware_dma * * \param irq_index the IRQ index; either 0 or 1 for DMA_IRQ_0 or DMA_IRQ_1 * \param channel_mask Bitmask of all the channels to enable/disable. Channel 0 = bit 0, channel 1 = bit 1 etc. * \param enabled true to enable all the interrupts specified in the mask, false to disable all the interrupts specified in the mask. */ static inline void dma_irqn_set_channel_mask_enabled(uint irq_index, uint32_t channel_mask, bool enabled) { invalid_params_if(DMA, irq_index > 1); if (irq_index) { dma_set_irq1_channel_mask_enabled(channel_mask, enabled); } else { dma_set_irq0_channel_mask_enabled(channel_mask, enabled); } } /*! \brief Determine if a particular channel is a cause of DMA_IRQ_0 * \ingroup hardware_dma * * \param channel DMA channel * \return true if the channel is a cause of DMA_IRQ_0, false otherwise */ static inline bool dma_channel_get_irq0_status(uint channel) { check_dma_channel_param(channel); return dma_hw->ints0 & (1u << channel); } /*! \brief Determine if a particular channel is a cause of DMA_IRQ_1 * \ingroup hardware_dma * * \param channel DMA channel * \return true if the channel is a cause of DMA_IRQ_1, false otherwise */ static inline bool dma_channel_get_irq1_status(uint channel) { check_dma_channel_param(channel); return dma_hw->ints1 & (1u << channel); } /*! \brief Determine if a particular channel is a cause of DMA_IRQ_N * \ingroup hardware_dma * * \param irq_index the IRQ index; either 0 or 1 for DMA_IRQ_0 or DMA_IRQ_1 * \param channel DMA channel * \return true if the channel is a cause of the DMA_IRQ_N, false otherwise */ static inline bool dma_irqn_get_channel_status(uint irq_index, uint channel) { invalid_params_if(DMA, irq_index > 1); check_dma_channel_param(channel); return (irq_index ? dma_hw->ints1 : dma_hw->ints0) & (1u << channel); } /*! \brief Acknowledge a channel IRQ, resetting it as the cause of DMA_IRQ_0 * \ingroup hardware_dma * * \param channel DMA channel */ static inline void dma_channel_acknowledge_irq0(uint channel) { check_dma_channel_param(channel); dma_hw->ints0 = 1u << channel; } /*! \brief Acknowledge a channel IRQ, resetting it as the cause of DMA_IRQ_1 * \ingroup hardware_dma * * \param channel DMA channel */ static inline void dma_channel_acknowledge_irq1(uint channel) { check_dma_channel_param(channel); dma_hw->ints1 = 1u << channel; } /*! \brief Acknowledge a channel IRQ, resetting it as the cause of DMA_IRQ_N * \ingroup hardware_dma * * \param irq_index the IRQ index; either 0 or 1 for DMA_IRQ_0 or DMA_IRQ_1 * \param channel DMA channel */ static inline void dma_irqn_acknowledge_channel(uint irq_index, uint channel) { invalid_params_if(DMA, irq_index > 1); check_dma_channel_param(channel); if (irq_index) dma_hw->ints1 = 1u << channel; else dma_hw->ints0 = 1u << channel; } /*! \brief Check if DMA channel is busy * \ingroup hardware_dma * * \param channel DMA channel * \return true if the channel is currently busy */ inline static bool dma_channel_is_busy(uint channel) { check_dma_channel_param(channel); return !!(dma_hw->ch[channel].al1_ctrl & DMA_CH0_CTRL_TRIG_BUSY_BITS); } /*! \brief Wait for a DMA channel transfer to complete * \ingroup hardware_dma * * \param channel DMA channel */ inline static void dma_channel_wait_for_finish_blocking(uint channel) { while (dma_channel_is_busy(channel)) tight_loop_contents(); // stop the compiler hoisting a non volatile buffer access above the DMA completion. __compiler_memory_barrier(); } /*! \brief Enable the DMA sniffing targeting the specified channel * \ingroup hardware_dma * * The mode can be one of the following: * * Mode | Function * -----|--------- * 0x0 | Calculate a CRC-32 (IEEE802.3 polynomial) * 0x1 | Calculate a CRC-32 (IEEE802.3 polynomial) with bit reversed data * 0x2 | Calculate a CRC-16-CCITT * 0x3 | Calculate a CRC-16-CCITT with bit reversed data * 0xe | XOR reduction over all data. == 1 if the total 1 population count is odd. * 0xf | Calculate a simple 32-bit checksum (addition with a 32 bit accumulator) * * \param channel DMA channel * \param mode See description * \param force_channel_enable Set true to also turn on sniffing in the channel configuration (this * is usually what you want, but sometimes you might have a chain DMA with only certain segments * of the chain sniffed, in which case you might pass false). */ inline static void dma_sniffer_enable(uint channel, uint mode, bool force_channel_enable) { check_dma_channel_param(channel); check_hw_layout(dma_hw_t, sniff_ctrl, DMA_SNIFF_CTRL_OFFSET); if (force_channel_enable) { hw_set_bits(&dma_hw->ch[channel].al1_ctrl, DMA_CH0_CTRL_TRIG_SNIFF_EN_BITS); } hw_write_masked(&dma_hw->sniff_ctrl, (((channel << DMA_SNIFF_CTRL_DMACH_LSB) & DMA_SNIFF_CTRL_DMACH_BITS) | ((mode << DMA_SNIFF_CTRL_CALC_LSB) & DMA_SNIFF_CTRL_CALC_BITS) | DMA_SNIFF_CTRL_EN_BITS), (DMA_SNIFF_CTRL_DMACH_BITS | DMA_SNIFF_CTRL_CALC_BITS | DMA_SNIFF_CTRL_EN_BITS)); } /*! \brief Enable the Sniffer byte swap function * \ingroup hardware_dma * * Locally perform a byte reverse on the sniffed data, before feeding into checksum. * * Note that the sniff hardware is downstream of the DMA channel byteswap performed in the * read master: if channel_config_set_bswap() and dma_sniffer_set_byte_swap_enabled() are both enabled, * their effects cancel from the sniffer’s point of view. * * \param swap Set true to enable byte swapping */ inline static void dma_sniffer_set_byte_swap_enabled(bool swap) { if (swap) hw_set_bits(&dma_hw->sniff_ctrl, DMA_SNIFF_CTRL_BSWAP_BITS); else hw_clear_bits(&dma_hw->sniff_ctrl, DMA_SNIFF_CTRL_BSWAP_BITS); } /*! \brief Enable the Sniffer output invert function * \ingroup hardware_dma * * If enabled, the sniff data result appears bit-inverted when read. * This does not affect the way the checksum is calculated. * * \param invert Set true to enable output bit inversion */ inline static void dma_sniffer_set_output_invert_enabled(bool invert) { if (invert) hw_set_bits(&dma_hw->sniff_ctrl, DMA_SNIFF_CTRL_OUT_INV_BITS); else hw_clear_bits(&dma_hw->sniff_ctrl, DMA_SNIFF_CTRL_OUT_INV_BITS); } /*! \brief Enable the Sniffer output bit reversal function * \ingroup hardware_dma * * If enabled, the sniff data result appears bit-reversed when read. * This does not affect the way the checksum is calculated. * * \param reverse Set true to enable output bit reversal */ inline static void dma_sniffer_set_output_reverse_enabled(bool reverse) { if (reverse) hw_set_bits(&dma_hw->sniff_ctrl, DMA_SNIFF_CTRL_OUT_REV_BITS); else hw_clear_bits(&dma_hw->sniff_ctrl, DMA_SNIFF_CTRL_OUT_REV_BITS); } /*! \brief Disable the DMA sniffer * \ingroup hardware_dma * */ inline static void dma_sniffer_disable(void) { dma_hw->sniff_ctrl = 0; } /*! \brief Set the sniffer's data accumulator with initial value * \ingroup hardware_dma * * Generally, CRC algorithms are used with the data accumulator initially * seeded with 0xFFFF or 0xFFFFFFFF (for crc16 and crc32 algorithms) * * \param seed_value value to set data accumulator */ inline static void dma_sniffer_set_data_accumulator(uint32_t seed_value) { dma_hw->sniff_data = seed_value; } /*! \brief Get the sniffer's data accumulator value * \ingroup hardware_dma * * Read value calculated by the hardware from sniffing the DMA stream */ inline static uint32_t dma_sniffer_get_data_accumulator(void) { return dma_hw->sniff_data; } /*! \brief Mark a dma timer as used * \ingroup hardware_dma * * Method for cooperative claiming of hardware. Will cause a panic if the timer * is already claimed. Use of this method by libraries detects accidental * configurations that would fail in unpredictable ways. * * \param timer the dma timer */ void dma_timer_claim(uint timer); /*! \brief Mark a dma timer as no longer used * \ingroup hardware_dma * * Method for cooperative claiming of hardware. * * \param timer the dma timer to release */ void dma_timer_unclaim(uint timer); /*! \brief Claim a free dma timer * \ingroup hardware_dma * * \param required if true the function will panic if none are available * \return the dma timer number or -1 if required was false, and none were free */ int dma_claim_unused_timer(bool required); /*! \brief Determine if a dma timer is claimed * \ingroup hardware_dma * * \param timer the dma timer * \return true if the timer is claimed, false otherwise * \see dma_timer_claim */ bool dma_timer_is_claimed(uint timer); /*! \brief Set the divider for the given DMA timer * \ingroup hardware_dma * * The timer will run at the system_clock_freq * numerator / denominator, so this is the speed * that data elements will be transferred at via a DMA channel using this timer as a DREQ * * \param timer the dma timer * \param numerator the fraction's numerator * \param denominator the fraction's denominator */ static inline void dma_timer_set_fraction(uint timer, uint16_t numerator, uint16_t denominator) { check_dma_timer_param(timer); dma_hw->timer[timer] = (((uint32_t)numerator) << DMA_TIMER0_X_LSB) | (((uint32_t)denominator) << DMA_TIMER0_Y_LSB); } /*! \brief Return the DREQ number for a given DMA timer * \ingroup hardware_dma * * \param timer_num DMA timer number 0-3 */ static inline uint dma_get_timer_dreq(uint timer_num) { static_assert(DREQ_DMA_TIMER1 == DREQ_DMA_TIMER0 + 1, ""); static_assert(DREQ_DMA_TIMER2 == DREQ_DMA_TIMER0 + 2, ""); static_assert(DREQ_DMA_TIMER3 == DREQ_DMA_TIMER0 + 3, ""); check_dma_timer_param(timer_num); return DREQ_DMA_TIMER0 + timer_num; } /*! \brief Performs DMA channel cleanup after use * \ingroup hardware_dma * * This can be used to cleanup dma channels when they're no longer needed, such that they are in a clean state for reuse. * IRQ's for the channel are disabled, any in flight-transfer is aborted and any outstanding interrupts are cleared. * The channel is then clear to be reused for other purposes. * * \code * if (dma_channel >= 0) { * dma_channel_cleanup(dma_channel); * dma_channel_unclaim(dma_channel); * dma_channel = -1; * } * \endcode * * \param channel DMA channel */ void dma_channel_cleanup(uint channel); #ifndef NDEBUG void print_dma_ctrl(dma_channel_hw_t *channel); #endif #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_exception/CMakeLists.txt ================================================ pico_simple_hardware_target(exception) pico_mirrored_target_link_libraries(hardware_exception INTERFACE hardware_sync) ================================================ FILE: pico-sdk/src/rp2_common/hardware_exception/exception.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/exception.h" #include "hardware/platform_defs.h" #include "hardware/structs/scb.h" #include "hardware/sync.h" #include "pico/assert.h" #ifndef exception_is_compile_time_default static bool exception_is_compile_time_default(exception_handler_t handler) { extern char __default_isrs_start; extern char __default_isrs_end; return ((uintptr_t)handler) >= (uintptr_t)&__default_isrs_start && ((uintptr_t)handler) < (uintptr_t)&__default_isrs_end; } #endif static inline exception_handler_t *get_vtable(void) { return (exception_handler_t *) scb_hw->vtor; } static void set_raw_exception_handler_and_restore_interrupts(enum exception_number num, exception_handler_t handler, uint32_t save) { // update vtable (vtable_handler may be same or updated depending on cases, but we do it anyway for compactness) get_vtable()[16 + num] = handler; __dmb(); restore_interrupts(save); } static inline void check_exception_param(__unused enum exception_number num) { invalid_params_if(EXCEPTION, num < NMI_EXCEPTION || num >=0); } exception_handler_t exception_get_vtable_handler(enum exception_number num) { check_exception_param(num); return get_vtable()[16 + num]; } exception_handler_t exception_set_exclusive_handler(enum exception_number num, exception_handler_t handler) { check_exception_param(num); #if !PICO_NO_RAM_VECTOR_TABLE uint32_t save = save_and_disable_interrupts(); exception_handler_t current = exception_get_vtable_handler(num); hard_assert(handler == current || exception_is_compile_time_default(current)); set_raw_exception_handler_and_restore_interrupts(num, handler, save); #else panic_unsupported(); #endif return current; } void exception_restore_handler(enum exception_number num, exception_handler_t original_handler) { hard_assert(exception_is_compile_time_default(original_handler)); #if !PICO_NO_RAM_VECTOR_TABLE uint32_t save = save_and_disable_interrupts(); set_raw_exception_handler_and_restore_interrupts(num, original_handler, save); #else panic_unsupported(); #endif } ================================================ FILE: pico-sdk/src/rp2_common/hardware_exception/include/hardware/exception.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_EXCEPTION_H #define _HARDWARE_EXCEPTION_H #include "pico.h" #include "hardware/address_mapped.h" /** \file exception.h * \defgroup hardware_exception hardware_exception * * Methods for setting processor exception handlers * * Exceptions are identified by a \ref exception_number which is a number from -15 to -1; these are the numbers relative to * the index of the first IRQ vector in the vector table. (i.e. vector table index is exception_num plus 16) * * There is one set of exception handlers per core, so the exception handlers for each core as set by these methods are independent. * * \note That all exception APIs affect the executing core only (i.e. the core calling the function). */ // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_EXCEPTION, Enable/disable assertions in the exception module, type=bool, default=0, group=hardware_exception #ifndef PARAM_ASSERTIONS_ENABLED_EXCEPTION #define PARAM_ASSERTIONS_ENABLED_EXCEPTION 0 #endif #ifdef __cplusplus extern "C" { #endif /*! \brief Exception number definitions * * Note for consistency with irq numbers, these numbers are defined to be negative. The VTABLE index is * the number here plus 16. * * Name | Value | Exception * ---------------------|-------|---------- * NMI_EXCEPTION | -14 | Non Maskable Interrupt * HARDFAULT_EXCEPTION | -13 | HardFault * SVCALL_EXCEPTION | -5 | SV Call * PENDSV_EXCEPTION | -2 | Pend SV * SYSTICK_EXCEPTION | -1 | System Tick * * \ingroup hardware_exception */ enum exception_number { NMI_EXCEPTION = -14, /* Non Maskable Interrupt */ HARDFAULT_EXCEPTION = -13, /* HardFault Interrupt */ SVCALL_EXCEPTION = -5, /* SV Call Interrupt */ PENDSV_EXCEPTION = -2, /* Pend SV Interrupt */ SYSTICK_EXCEPTION = -1, /* System Tick Interrupt */ }; /*! \brief Exception handler function type * \ingroup hardware_exception * * All exception handlers should be of this type, and follow normal ARM EABI register saving conventions */ typedef void (*exception_handler_t)(void); /*! \brief Set the exception handler for an exception on the executing core. * \ingroup hardware_exception * * This method will assert if an exception handler has been set for this exception number on this core via * this method, without an intervening restore via exception_restore_handler. * * \note this method may not be used to override an exception handler that was specified at link time by * providing a strong replacement for the weakly defined stub exception handlers. It will assert in this case too. * * \param num Exception number * \param handler The handler to set * \see exception_number */ exception_handler_t exception_set_exclusive_handler(enum exception_number num, exception_handler_t handler); /*! \brief Restore the original exception handler for an exception on this core * \ingroup hardware_exception * * This method may be used to restore the exception handler for an exception on this core to the state * prior to the call to exception_set_exclusive_handler(), so that exception_set_exclusive_handler() * may be called again in the future. * * \param num Exception number \ref exception_number * \param original_handler The original handler returned from \ref exception_set_exclusive_handler * \see exception_set_exclusive_handler() */ void exception_restore_handler(enum exception_number num, exception_handler_t original_handler); /*! \brief Get the current exception handler for the specified exception from the currently installed vector table * of the execution core * \ingroup hardware_exception * * \param num Exception number * \return the address stored in the VTABLE for the given exception number */ exception_handler_t exception_get_vtable_handler(enum exception_number num); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_flash/CMakeLists.txt ================================================ pico_simple_hardware_target(flash) pico_mirrored_target_link_libraries(hardware_flash INTERFACE pico_bootrom) ================================================ FILE: pico-sdk/src/rp2_common/hardware_flash/flash.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/flash.h" #include "pico/bootrom.h" #include "hardware/structs/ssi.h" #include "hardware/structs/ioqspi.h" #define FLASH_BLOCK_ERASE_CMD 0xd8 // Standard RUID instruction: 4Bh command prefix, 32 dummy bits, 64 data bits. #define FLASH_RUID_CMD 0x4b #define FLASH_RUID_DUMMY_BYTES 4 #define FLASH_RUID_DATA_BYTES 8 #define FLASH_RUID_TOTAL_BYTES (1 + FLASH_RUID_DUMMY_BYTES + FLASH_RUID_DATA_BYTES) //----------------------------------------------------------------------------- // Infrastructure for reentering XIP mode after exiting for programming (take // a copy of boot2 before XIP exit). Calling boot2 as a function works because // it accepts a return vector in LR (and doesn't trash r4-r7). Bootrom passes // NULL in LR, instructing boot2 to enter flash vector table's reset handler. #if !PICO_NO_FLASH #define BOOT2_SIZE_WORDS 64 static uint32_t boot2_copyout[BOOT2_SIZE_WORDS]; static bool boot2_copyout_valid = false; static void __no_inline_not_in_flash_func(flash_init_boot2_copyout)(void) { if (boot2_copyout_valid) return; for (int i = 0; i < BOOT2_SIZE_WORDS; ++i) boot2_copyout[i] = ((uint32_t *)XIP_BASE)[i]; __compiler_memory_barrier(); boot2_copyout_valid = true; } static void __no_inline_not_in_flash_func(flash_enable_xip_via_boot2)(void) { ((void (*)(void))((intptr_t)boot2_copyout+1))(); } #else static void __no_inline_not_in_flash_func(flash_init_boot2_copyout)(void) {} static void __no_inline_not_in_flash_func(flash_enable_xip_via_boot2)(void) { // Set up XIP for 03h read on bus access (slow but generic) rom_flash_enter_cmd_xip_fn flash_enter_cmd_xip = (rom_flash_enter_cmd_xip_fn)rom_func_lookup_inline(ROM_FUNC_FLASH_ENTER_CMD_XIP); assert(flash_enter_cmd_xip); flash_enter_cmd_xip(); } #endif //----------------------------------------------------------------------------- // Actual flash programming shims (work whether or not PICO_NO_FLASH==1) void __no_inline_not_in_flash_func(flash_range_erase)(uint32_t flash_offs, size_t count) { #ifdef PICO_FLASH_SIZE_BYTES hard_assert(flash_offs + count <= PICO_FLASH_SIZE_BYTES); #endif invalid_params_if(FLASH, flash_offs & (FLASH_SECTOR_SIZE - 1)); invalid_params_if(FLASH, count & (FLASH_SECTOR_SIZE - 1)); rom_connect_internal_flash_fn connect_internal_flash = (rom_connect_internal_flash_fn)rom_func_lookup_inline(ROM_FUNC_CONNECT_INTERNAL_FLASH); rom_flash_exit_xip_fn flash_exit_xip = (rom_flash_exit_xip_fn)rom_func_lookup_inline(ROM_FUNC_FLASH_EXIT_XIP); rom_flash_range_erase_fn flash_range_erase = (rom_flash_range_erase_fn)rom_func_lookup_inline(ROM_FUNC_FLASH_RANGE_ERASE); rom_flash_flush_cache_fn flash_flush_cache = (rom_flash_flush_cache_fn)rom_func_lookup_inline(ROM_FUNC_FLASH_FLUSH_CACHE); assert(connect_internal_flash && flash_exit_xip && flash_range_erase && flash_flush_cache); flash_init_boot2_copyout(); // No flash accesses after this point __compiler_memory_barrier(); connect_internal_flash(); flash_exit_xip(); flash_range_erase(flash_offs, count, FLASH_BLOCK_SIZE, FLASH_BLOCK_ERASE_CMD); flash_flush_cache(); // Note this is needed to remove CSn IO force as well as cache flushing flash_enable_xip_via_boot2(); } void __no_inline_not_in_flash_func(flash_range_program)(uint32_t flash_offs, const uint8_t *data, size_t count) { #ifdef PICO_FLASH_SIZE_BYTES hard_assert(flash_offs + count <= PICO_FLASH_SIZE_BYTES); #endif invalid_params_if(FLASH, flash_offs & (FLASH_PAGE_SIZE - 1)); invalid_params_if(FLASH, count & (FLASH_PAGE_SIZE - 1)); rom_connect_internal_flash_fn connect_internal_flash = (rom_connect_internal_flash_fn)rom_func_lookup_inline(ROM_FUNC_CONNECT_INTERNAL_FLASH); rom_flash_exit_xip_fn flash_exit_xip = (rom_flash_exit_xip_fn)rom_func_lookup_inline(ROM_FUNC_FLASH_EXIT_XIP); rom_flash_range_program_fn flash_range_program = (rom_flash_range_program_fn)rom_func_lookup_inline(ROM_FUNC_FLASH_RANGE_PROGRAM); rom_flash_flush_cache_fn flash_flush_cache = (rom_flash_flush_cache_fn)rom_func_lookup_inline(ROM_FUNC_FLASH_FLUSH_CACHE); assert(connect_internal_flash && flash_exit_xip && flash_range_program && flash_flush_cache); flash_init_boot2_copyout(); __compiler_memory_barrier(); connect_internal_flash(); flash_exit_xip(); flash_range_program(flash_offs, data, count); flash_flush_cache(); // Note this is needed to remove CSn IO force as well as cache flushing flash_enable_xip_via_boot2(); } //----------------------------------------------------------------------------- // Lower-level flash access functions #if !PICO_NO_FLASH // Bitbanging the chip select using IO overrides, in case RAM-resident IRQs // are still running, and the FIFO bottoms out. (the bootrom does the same) static void __no_inline_not_in_flash_func(flash_cs_force)(bool high) { uint32_t field_val = high ? IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_VALUE_HIGH : IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_VALUE_LOW; hw_write_masked(&ioqspi_hw->io[1].ctrl, field_val << IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_LSB, IO_QSPI_GPIO_QSPI_SS_CTRL_OUTOVER_BITS ); } void __no_inline_not_in_flash_func(flash_do_cmd)(const uint8_t *txbuf, uint8_t *rxbuf, size_t count) { rom_connect_internal_flash_fn connect_internal_flash = (rom_connect_internal_flash_fn)rom_func_lookup_inline(ROM_FUNC_CONNECT_INTERNAL_FLASH); rom_flash_exit_xip_fn flash_exit_xip = (rom_flash_exit_xip_fn)rom_func_lookup_inline(ROM_FUNC_FLASH_EXIT_XIP); rom_flash_flush_cache_fn flash_flush_cache = (rom_flash_flush_cache_fn)rom_func_lookup_inline(ROM_FUNC_FLASH_FLUSH_CACHE); assert(connect_internal_flash && flash_exit_xip && flash_flush_cache); flash_init_boot2_copyout(); __compiler_memory_barrier(); connect_internal_flash(); flash_exit_xip(); flash_cs_force(0); size_t tx_remaining = count; size_t rx_remaining = count; // We may be interrupted -- don't want FIFO to overflow if we're distracted. const size_t max_in_flight = 16 - 2; while (tx_remaining || rx_remaining) { uint32_t flags = ssi_hw->sr; bool can_put = !!(flags & SSI_SR_TFNF_BITS); bool can_get = !!(flags & SSI_SR_RFNE_BITS); if (can_put && tx_remaining && rx_remaining - tx_remaining < max_in_flight) { ssi_hw->dr0 = *txbuf++; --tx_remaining; } if (can_get && rx_remaining) { *rxbuf++ = (uint8_t)ssi_hw->dr0; --rx_remaining; } } flash_cs_force(1); flash_flush_cache(); flash_enable_xip_via_boot2(); } #endif // Use standard RUID command to get a unique identifier for the flash (and // hence the board) static_assert(FLASH_UNIQUE_ID_SIZE_BYTES == FLASH_RUID_DATA_BYTES, ""); void flash_get_unique_id(uint8_t *id_out) { #if PICO_NO_FLASH __unused uint8_t *ignore = id_out; panic_unsupported(); #else uint8_t txbuf[FLASH_RUID_TOTAL_BYTES] = {0}; uint8_t rxbuf[FLASH_RUID_TOTAL_BYTES] = {0}; txbuf[0] = FLASH_RUID_CMD; flash_do_cmd(txbuf, rxbuf, FLASH_RUID_TOTAL_BYTES); for (int i = 0; i < FLASH_RUID_DATA_BYTES; i++) id_out[i] = rxbuf[i + 1 + FLASH_RUID_DUMMY_BYTES]; #endif } ================================================ FILE: pico-sdk/src/rp2_common/hardware_flash/include/hardware/flash.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_FLASH_H #define _HARDWARE_FLASH_H #include "pico.h" /** \file flash.h * \defgroup hardware_flash hardware_flash * * Low level flash programming and erase API * * Note these functions are *unsafe* if you are using both cores, and the other * is executing from flash concurrently with the operation. In this could be the * case, you must perform your own synchronisation to make sure that no XIP * accesses take place during flash programming. One option is to use the * \ref multicore_lockout functions. * * Likewise they are *unsafe* if you have interrupt handlers or an interrupt * vector table in flash, so you must disable interrupts before calling in * this case. * * If PICO_NO_FLASH=1 is not defined (i.e. if the program is built to run from * flash) then these functions will make a static copy of the second stage * bootloader in SRAM, and use this to reenter execute-in-place mode after * programming or erasing flash, so that they can safely be called from * flash-resident code. * * \subsection flash_example Example * \include flash_program.c */ // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_FLASH, Enable/disable assertions in the flash module, type=bool, default=0, group=hardware_flash #ifndef PARAM_ASSERTIONS_ENABLED_FLASH #define PARAM_ASSERTIONS_ENABLED_FLASH 0 #endif #define FLASH_PAGE_SIZE (1u << 8) #define FLASH_SECTOR_SIZE (1u << 12) #define FLASH_BLOCK_SIZE (1u << 16) #define FLASH_UNIQUE_ID_SIZE_BYTES 8 // PICO_CONFIG: PICO_FLASH_SIZE_BYTES, size of primary flash in bytes, type=int, group=hardware_flash #ifdef __cplusplus extern "C" { #endif /*! \brief Erase areas of flash * \ingroup hardware_flash * * \param flash_offs Offset into flash, in bytes, to start the erase. Must be aligned to a 4096-byte flash sector. * \param count Number of bytes to be erased. Must be a multiple of 4096 bytes (one sector). */ void flash_range_erase(uint32_t flash_offs, size_t count); /*! \brief Program flash * \ingroup hardware_flash * * \param flash_offs Flash address of the first byte to be programmed. Must be aligned to a 256-byte flash page. * \param data Pointer to the data to program into flash * \param count Number of bytes to program. Must be a multiple of 256 bytes (one page). */ void flash_range_program(uint32_t flash_offs, const uint8_t *data, size_t count); /*! \brief Get flash unique 64 bit identifier * \ingroup hardware_flash * * Use a standard 4Bh RUID instruction to retrieve the 64 bit unique * identifier from a flash device attached to the QSPI interface. Since there * is a 1:1 association between the MCU and this flash, this also serves as a * unique identifier for the board. * * \param id_out Pointer to an 8-byte buffer to which the ID will be written */ void flash_get_unique_id(uint8_t *id_out); /*! \brief Execute bidirectional flash command * \ingroup hardware_flash * * Low-level function to execute a serial command on a flash device attached * to the QSPI interface. Bytes are simultaneously transmitted and received * from txbuf and to rxbuf. Therefore, both buffers must be the same length, * count, which is the length of the overall transaction. This is useful for * reading metadata from the flash chip, such as device ID or SFDP * parameters. * * The XIP cache is flushed following each command, in case flash state * has been modified. Like other hardware_flash functions, the flash is not * accessible for execute-in-place transfers whilst the command is in * progress, so entering a flash-resident interrupt handler or executing flash * code on the second core concurrently will be fatal. To avoid these pitfalls * it is recommended that this function only be used to extract flash metadata * during startup, before the main application begins to run: see the * implementation of pico_get_unique_id() for an example of this. * * \param txbuf Pointer to a byte buffer which will be transmitted to the flash * \param rxbuf Pointer to a byte buffer where data received from the flash will be written. txbuf and rxbuf may be the same buffer. * \param count Length in bytes of txbuf and of rxbuf */ void flash_do_cmd(const uint8_t *txbuf, uint8_t *rxbuf, size_t count); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_gpio/CMakeLists.txt ================================================ pico_simple_hardware_target(gpio) pico_mirrored_target_link_libraries(hardware_gpio INTERFACE hardware_irq) ================================================ FILE: pico-sdk/src/rp2_common/hardware_gpio/gpio.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/gpio.h" #include "hardware/sync.h" #include "hardware/structs/iobank0.h" #include "hardware/irq.h" #if LIB_PICO_BINARY_INFO #include "pico/binary_info.h" #endif static gpio_irq_callback_t callbacks[NUM_CORES]; // a 1 bit means the IRQ is handled by a raw IRQ handler static uint32_t raw_irq_mask[NUM_CORES]; // Get the raw value from the pin, bypassing any muxing or overrides. int gpio_get_pad(uint gpio) { check_gpio_param(gpio); hw_set_bits(&padsbank0_hw->io[gpio], PADS_BANK0_GPIO0_IE_BITS); return (iobank0_hw->io[gpio].status & IO_BANK0_GPIO0_STATUS_INFROMPAD_BITS) >> IO_BANK0_GPIO0_STATUS_INFROMPAD_LSB; } /// \tag::gpio_set_function[] // Select function for this GPIO, and ensure input/output are enabled at the pad. // This also clears the input/output/irq override bits. void gpio_set_function(uint gpio, enum gpio_function fn) { check_gpio_param(gpio); invalid_params_if(GPIO, ((uint32_t)fn << IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB) & ~IO_BANK0_GPIO0_CTRL_FUNCSEL_BITS); // Set input enable on, output disable off hw_write_masked(&padsbank0_hw->io[gpio], PADS_BANK0_GPIO0_IE_BITS, PADS_BANK0_GPIO0_IE_BITS | PADS_BANK0_GPIO0_OD_BITS ); // Zero all fields apart from fsel; we want this IO to do what the peripheral tells it. // This doesn't affect e.g. pullup/pulldown, as these are in pad controls. iobank0_hw->io[gpio].ctrl = fn << IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB; } /// \end::gpio_set_function[] enum gpio_function gpio_get_function(uint gpio) { check_gpio_param(gpio); return (enum gpio_function) ((iobank0_hw->io[gpio].ctrl & IO_BANK0_GPIO0_CTRL_FUNCSEL_BITS) >> IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB); } // Note that, on RP2040, setting both pulls enables a "bus keep" function, // i.e. weak pull to whatever is current high/low state of GPIO. void gpio_set_pulls(uint gpio, bool up, bool down) { check_gpio_param(gpio); hw_write_masked( &padsbank0_hw->io[gpio], (bool_to_bit(up) << PADS_BANK0_GPIO0_PUE_LSB) | (bool_to_bit(down) << PADS_BANK0_GPIO0_PDE_LSB), PADS_BANK0_GPIO0_PUE_BITS | PADS_BANK0_GPIO0_PDE_BITS ); } // Direct override for per-GPIO IRQ signal void gpio_set_irqover(uint gpio, uint value) { check_gpio_param(gpio); hw_write_masked(&iobank0_hw->io[gpio].ctrl, value << IO_BANK0_GPIO0_CTRL_IRQOVER_LSB, IO_BANK0_GPIO0_CTRL_IRQOVER_BITS ); } // Direct overrides for pad controls void gpio_set_inover(uint gpio, uint value) { check_gpio_param(gpio); hw_write_masked(&iobank0_hw->io[gpio].ctrl, value << IO_BANK0_GPIO0_CTRL_INOVER_LSB, IO_BANK0_GPIO0_CTRL_INOVER_BITS ); } void gpio_set_outover(uint gpio, uint value) { check_gpio_param(gpio); hw_write_masked(&iobank0_hw->io[gpio].ctrl, value << IO_BANK0_GPIO0_CTRL_OUTOVER_LSB, IO_BANK0_GPIO0_CTRL_OUTOVER_BITS ); } void gpio_set_oeover(uint gpio, uint value) { check_gpio_param(gpio); hw_write_masked(&iobank0_hw->io[gpio].ctrl, value << IO_BANK0_GPIO0_CTRL_OEOVER_LSB, IO_BANK0_GPIO0_CTRL_OEOVER_BITS ); } void gpio_set_input_hysteresis_enabled(uint gpio, bool enabled) { check_gpio_param(gpio); if (enabled) hw_set_bits(&padsbank0_hw->io[gpio], PADS_BANK0_GPIO0_SCHMITT_BITS); else hw_clear_bits(&padsbank0_hw->io[gpio], PADS_BANK0_GPIO0_SCHMITT_BITS); } bool gpio_is_input_hysteresis_enabled(uint gpio) { check_gpio_param(gpio); return (padsbank0_hw->io[gpio] & PADS_BANK0_GPIO0_SCHMITT_BITS) != 0; } void gpio_set_slew_rate(uint gpio, enum gpio_slew_rate slew) { check_gpio_param(gpio); hw_write_masked(&padsbank0_hw->io[gpio], (uint)slew << PADS_BANK0_GPIO0_SLEWFAST_LSB, PADS_BANK0_GPIO0_SLEWFAST_BITS ); } enum gpio_slew_rate gpio_get_slew_rate(uint gpio) { check_gpio_param(gpio); return (enum gpio_slew_rate)((padsbank0_hw->io[gpio] & PADS_BANK0_GPIO0_SLEWFAST_BITS) >> PADS_BANK0_GPIO0_SLEWFAST_LSB); } // Enum encoding should match hardware encoding on RP2040 static_assert(PADS_BANK0_GPIO0_DRIVE_VALUE_8MA == GPIO_DRIVE_STRENGTH_8MA, ""); void gpio_set_drive_strength(uint gpio, enum gpio_drive_strength drive) { check_gpio_param(gpio); hw_write_masked(&padsbank0_hw->io[gpio], (uint)drive << PADS_BANK0_GPIO0_DRIVE_LSB, PADS_BANK0_GPIO0_DRIVE_BITS ); } enum gpio_drive_strength gpio_get_drive_strength(uint gpio) { check_gpio_param(gpio); return (enum gpio_drive_strength)((padsbank0_hw->io[gpio] & PADS_BANK0_GPIO0_DRIVE_BITS) >> PADS_BANK0_GPIO0_DRIVE_LSB); } static void gpio_default_irq_handler(void) { uint core = get_core_num(); gpio_irq_callback_t callback = callbacks[core]; io_irq_ctrl_hw_t *irq_ctrl_base = core ? &iobank0_hw->proc1_irq_ctrl : &iobank0_hw->proc0_irq_ctrl; for (uint gpio = 0; gpio < NUM_BANK0_GPIOS; gpio+=8) { uint32_t events8 = irq_ctrl_base->ints[gpio >> 3u]; // note we assume events8 is 0 for non-existent GPIO for(uint i=gpio;events8 && i>= 4; } } } static void _gpio_set_irq_enabled(uint gpio, uint32_t events, bool enabled, io_irq_ctrl_hw_t *irq_ctrl_base) { // Clear stale events which might cause immediate spurious handler entry gpio_acknowledge_irq(gpio, events); io_rw_32 *en_reg = &irq_ctrl_base->inte[gpio / 8]; events <<= 4 * (gpio % 8); if (enabled) hw_set_bits(en_reg, events); else hw_clear_bits(en_reg, events); } void gpio_set_irq_enabled(uint gpio, uint32_t events, bool enabled) { // Separate mask/force/status per-core, so check which core called, and // set the relevant IRQ controls. io_irq_ctrl_hw_t *irq_ctrl_base = get_core_num() ? &iobank0_hw->proc1_irq_ctrl : &iobank0_hw->proc0_irq_ctrl; _gpio_set_irq_enabled(gpio, events, enabled, irq_ctrl_base); } void gpio_set_irq_enabled_with_callback(uint gpio, uint32_t events, bool enabled, gpio_irq_callback_t callback) { gpio_set_irq_enabled(gpio, events, enabled); gpio_set_irq_callback(callback); if (enabled) irq_set_enabled(IO_IRQ_BANK0, true); } void gpio_set_irq_callback(gpio_irq_callback_t callback) { uint core = get_core_num(); if (callbacks[core]) { if (!callback) { irq_remove_handler(IO_IRQ_BANK0, gpio_default_irq_handler); } callbacks[core] = callback; } else if (callback) { callbacks[core] = callback; irq_add_shared_handler(IO_IRQ_BANK0, gpio_default_irq_handler, GPIO_IRQ_CALLBACK_ORDER_PRIORITY); } } void gpio_add_raw_irq_handler_with_order_priority_masked(uint gpio_mask, irq_handler_t handler, uint8_t order_priority) { hard_assert(!(raw_irq_mask[get_core_num()] & gpio_mask)); // should not add multiple handlers for the same event raw_irq_mask[get_core_num()] |= gpio_mask; irq_add_shared_handler(IO_IRQ_BANK0, handler, order_priority); } void gpio_add_raw_irq_handler_masked(uint gpio_mask, irq_handler_t handler) { gpio_add_raw_irq_handler_with_order_priority_masked(gpio_mask, handler, GPIO_RAW_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY); } void gpio_remove_raw_irq_handler_masked(uint gpio_mask, irq_handler_t handler) { assert(raw_irq_mask[get_core_num()] & gpio_mask); // should not remove handlers that are not added irq_remove_handler(IO_IRQ_BANK0, handler); raw_irq_mask[get_core_num()] &= ~gpio_mask; } void gpio_set_dormant_irq_enabled(uint gpio, uint32_t events, bool enabled) { check_gpio_param(gpio); io_irq_ctrl_hw_t *irq_ctrl_base = &iobank0_hw->dormant_wake_irq_ctrl; _gpio_set_irq_enabled(gpio, events, enabled, irq_ctrl_base); } void gpio_acknowledge_irq(uint gpio, uint32_t events) { check_gpio_param(gpio); iobank0_hw->intr[gpio / 8] = events << (4 * (gpio % 8)); } #define DEBUG_PIN_MASK (((1u << PICO_DEBUG_PIN_COUNT)-1) << PICO_DEBUG_PIN_BASE) void gpio_debug_pins_init() { gpio_init_mask(DEBUG_PIN_MASK); gpio_set_dir_masked(DEBUG_PIN_MASK, DEBUG_PIN_MASK); #if LIB_PICO_BINARY_INFO bi_decl_if_func_used(bi_pin_mask_with_names(DEBUG_PIN_MASK, "Debug")); #endif } void gpio_set_input_enabled(uint gpio, bool enabled) { if (enabled) hw_set_bits(&padsbank0_hw->io[gpio], PADS_BANK0_GPIO0_IE_BITS); else hw_clear_bits(&padsbank0_hw->io[gpio], PADS_BANK0_GPIO0_IE_BITS); } void gpio_init(uint gpio) { gpio_set_dir(gpio, GPIO_IN); gpio_put(gpio, 0); gpio_set_function(gpio, GPIO_FUNC_SIO); } void gpio_deinit(uint gpio) { gpio_set_function(gpio, GPIO_FUNC_NULL); } void gpio_init_mask(uint gpio_mask) { for(uint i=0;i>= 1; } } ================================================ FILE: pico-sdk/src/rp2_common/hardware_gpio/include/hardware/gpio.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_GPIO_H #define _HARDWARE_GPIO_H #include "pico.h" #include "hardware/structs/sio.h" #include "hardware/structs/padsbank0.h" #include "hardware/structs/iobank0.h" #include "hardware/irq.h" #ifdef __cplusplus extern "C" { #endif // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_GPIO, Enable/disable assertions in the GPIO module, type=bool, default=0, group=hardware_gpio #ifndef PARAM_ASSERTIONS_ENABLED_GPIO #define PARAM_ASSERTIONS_ENABLED_GPIO 0 #endif /** \file gpio.h * \defgroup hardware_gpio hardware_gpio * * General Purpose Input/Output (GPIO) API * * RP2040 has 36 multi-functional General Purpose Input / Output (GPIO) pins, divided into two banks. In a typical use case, * the pins in the QSPI bank (QSPI_SS, QSPI_SCLK and QSPI_SD0 to QSPI_SD3) are used to execute code from an external * flash device, leaving the User bank (GPIO0 to GPIO29) for the programmer to use. All GPIOs support digital input and * output, but GPIO26 to GPIO29 can also be used as inputs to the chip’s Analogue to Digital Converter (ADC). Each GPIO * can be controlled directly by software running on the processors, or by a number of other functional blocks. * * The function allocated to each GPIO is selected by calling the \ref gpio_set_function function. \note Not all functions * are available on all pins. * * Each GPIO can have one function selected at a time. Likewise, each peripheral input (e.g. UART0 RX) should only be selected on * one _GPIO_ at a time. If the same peripheral input is connected to multiple GPIOs, the peripheral sees the logical OR of these * GPIO inputs. Please refer to the datasheet for more information on GPIO function select. * * ### Function Select Table * * GPIO | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 * -------|----------|-----------|----------|--------|-----|------|------|---------------|---- * 0 | SPI0 RX | UART0 TX | I2C0 SDA | PWM0 A | SIO | PIO0 | PIO1 | | USB OVCUR DET * 1 | SPI0 CSn | UART0 RX | I2C0 SCL | PWM0 B | SIO | PIO0 | PIO1 | | USB VBUS DET * 2 | SPI0 SCK | UART0 CTS | I2C1 SDA | PWM1 A | SIO | PIO0 | PIO1 | | USB VBUS EN * 3 | SPI0 TX | UART0 RTS | I2C1 SCL | PWM1 B | SIO | PIO0 | PIO1 | | USB OVCUR DET * 4 | SPI0 RX | UART1 TX | I2C0 SDA | PWM2 A | SIO | PIO0 | PIO1 | | USB VBUS DET * 5 | SPI0 CSn | UART1 RX | I2C0 SCL | PWM2 B | SIO | PIO0 | PIO1 | | USB VBUS EN * 6 | SPI0 SCK | UART1 CTS | I2C1 SDA | PWM3 A | SIO | PIO0 | PIO1 | | USB OVCUR DET * 7 | SPI0 TX | UART1 RTS | I2C1 SCL | PWM3 B | SIO | PIO0 | PIO1 | | USB VBUS DET * 8 | SPI1 RX | UART1 TX | I2C0 SDA | PWM4 A | SIO | PIO0 | PIO1 | | USB VBUS EN * 9 | SPI1 CSn | UART1 RX | I2C0 SCL | PWM4 B | SIO | PIO0 | PIO1 | | USB OVCUR DET * 10 | SPI1 SCK | UART1 CTS | I2C1 SDA | PWM5 A | SIO | PIO0 | PIO1 | | USB VBUS DET * 11 | SPI1 TX | UART1 RTS | I2C1 SCL | PWM5 B | SIO | PIO0 | PIO1 | | USB VBUS EN * 12 | SPI1 RX | UART0 TX | I2C0 SDA | PWM6 A | SIO | PIO0 | PIO1 | | USB OVCUR DET * 13 | SPI1 CSn | UART0 RX | I2C0 SCL | PWM6 B | SIO | PIO0 | PIO1 | | USB VBUS DET * 14 | SPI1 SCK | UART0 CTS | I2C1 SDA | PWM7 A | SIO | PIO0 | PIO1 | | USB VBUS EN * 15 | SPI1 TX | UART0 RTS | I2C1 SCL | PWM7 B | SIO | PIO0 | PIO1 | | USB OVCUR DET * 16 | SPI0 RX | UART0 TX | I2C0 SDA | PWM0 A | SIO | PIO0 | PIO1 | | USB VBUS DET * 17 | SPI0 CSn | UART0 RX | I2C0 SCL | PWM0 B | SIO | PIO0 | PIO1 | | USB VBUS EN * 18 | SPI0 SCK | UART0 CTS | I2C1 SDA | PWM1 A | SIO | PIO0 | PIO1 | | USB OVCUR DET * 19 | SPI0 TX | UART0 RTS | I2C1 SCL | PWM1 B | SIO | PIO0 | PIO1 | | USB VBUS DET * 20 | SPI0 RX | UART1 TX | I2C0 SDA | PWM2 A | SIO | PIO0 | PIO1 | CLOCK GPIN0 | USB VBUS EN * 21 | SPI0 CSn | UART1 RX | I2C0 SCL | PWM2 B | SIO | PIO0 | PIO1 | CLOCK GPOUT0 | USB OVCUR DET * 22 | SPI0 SCK | UART1 CTS | I2C1 SDA | PWM3 A | SIO | PIO0 | PIO1 | CLOCK GPIN1 | USB VBUS DET * 23 | SPI0 TX | UART1 RTS | I2C1 SCL | PWM3 B | SIO | PIO0 | PIO1 | CLOCK GPOUT1 | USB VBUS EN * 24 | SPI1 RX | UART1 TX | I2C0 SDA | PWM4 A | SIO | PIO0 | PIO1 | CLOCK GPOUT2 | USB OVCUR DET * 25 | SPI1 CSn | UART1 RX | I2C0 SCL | PWM4 B | SIO | PIO0 | PIO1 | CLOCK GPOUT3 | USB VBUS DET * 26 | SPI1 SCK | UART1 CTS | I2C1 SDA | PWM5 A | SIO | PIO0 | PIO1 | | USB VBUS EN * 27 | SPI1 TX | UART1 RTS | I2C1 SCL | PWM5 B | SIO | PIO0 | PIO1 | | USB OVCUR DET * 28 | SPI1 RX | UART0 TX | I2C0 SDA | PWM6 A | SIO | PIO0 | PIO1 | | USB VBUS DET * 29 | SPI1 CSn | UART0 RX | I2C0 SCL | PWM6 B | SIO | PIO0 | PIO1 | | USB VBUS EN */ /*! \brief GPIO function definitions for use with function select * \ingroup hardware_gpio * \brief GPIO function selectors * * Each GPIO can have one function selected at a time. Likewise, each peripheral input (e.g. UART0 RX) should only be * selected on one GPIO at a time. If the same peripheral input is connected to multiple GPIOs, the peripheral sees the logical * OR of these GPIO inputs. * * Please refer to the datasheet for more information on GPIO function selection. */ enum gpio_function { GPIO_FUNC_XIP = 0, GPIO_FUNC_SPI = 1, GPIO_FUNC_UART = 2, GPIO_FUNC_I2C = 3, GPIO_FUNC_PWM = 4, GPIO_FUNC_SIO = 5, GPIO_FUNC_PIO0 = 6, GPIO_FUNC_PIO1 = 7, GPIO_FUNC_GPCK = 8, GPIO_FUNC_USB = 9, GPIO_FUNC_NULL = 0x1f, }; #define GPIO_OUT 1 #define GPIO_IN 0 /*! \brief GPIO Interrupt level definitions (GPIO events) * \ingroup hardware_gpio * \brief GPIO Interrupt levels * * An interrupt can be generated for every GPIO pin in 4 scenarios: * * * Level High: the GPIO pin is a logical 1 * * Level Low: the GPIO pin is a logical 0 * * Edge High: the GPIO has transitioned from a logical 0 to a logical 1 * * Edge Low: the GPIO has transitioned from a logical 1 to a logical 0 * * The level interrupts are not latched. This means that if the pin is a logical 1 and the level high interrupt is active, it will * become inactive as soon as the pin changes to a logical 0. The edge interrupts are stored in the INTR register and can be * cleared by writing to the INTR register. */ enum gpio_irq_level { GPIO_IRQ_LEVEL_LOW = 0x1u, GPIO_IRQ_LEVEL_HIGH = 0x2u, GPIO_IRQ_EDGE_FALL = 0x4u, GPIO_IRQ_EDGE_RISE = 0x8u, }; /*! Callback function type for GPIO events * \ingroup hardware_gpio * * \param gpio Which GPIO caused this interrupt * \param event_mask Which events caused this interrupt. See \ref gpio_irq_level for details. * \sa gpio_set_irq_enabled_with_callback() * \sa gpio_set_irq_callback() */ typedef void (*gpio_irq_callback_t)(uint gpio, uint32_t event_mask); enum gpio_override { GPIO_OVERRIDE_NORMAL = 0, ///< peripheral signal selected via \ref gpio_set_function GPIO_OVERRIDE_INVERT = 1, ///< invert peripheral signal selected via \ref gpio_set_function GPIO_OVERRIDE_LOW = 2, ///< drive low/disable output GPIO_OVERRIDE_HIGH = 3, ///< drive high/enable output }; /*! \brief Slew rate limiting levels for GPIO outputs * \ingroup hardware_gpio * * Slew rate limiting increases the minimum rise/fall time when a GPIO output * is lightly loaded, which can help to reduce electromagnetic emissions. * \sa gpio_set_slew_rate */ enum gpio_slew_rate { GPIO_SLEW_RATE_SLOW = 0, ///< Slew rate limiting enabled GPIO_SLEW_RATE_FAST = 1 ///< Slew rate limiting disabled }; /*! \brief Drive strength levels for GPIO outputs * \ingroup hardware_gpio * * Drive strength levels for GPIO outputs. * \sa gpio_set_drive_strength */ enum gpio_drive_strength { GPIO_DRIVE_STRENGTH_2MA = 0, ///< 2 mA nominal drive strength GPIO_DRIVE_STRENGTH_4MA = 1, ///< 4 mA nominal drive strength GPIO_DRIVE_STRENGTH_8MA = 2, ///< 8 mA nominal drive strength GPIO_DRIVE_STRENGTH_12MA = 3 ///< 12 mA nominal drive strength }; static inline void check_gpio_param(__unused uint gpio) { invalid_params_if(GPIO, gpio >= NUM_BANK0_GPIOS); } // ---------------------------------------------------------------------------- // Pad Controls + IO Muxing // ---------------------------------------------------------------------------- // Declarations for gpio.c /*! \brief Select GPIO function * \ingroup hardware_gpio * * \param gpio GPIO number * \param fn Which GPIO function select to use from list \ref gpio_function */ void gpio_set_function(uint gpio, enum gpio_function fn); /*! \brief Determine current GPIO function * \ingroup hardware_gpio * * \param gpio GPIO number * \return Which GPIO function is currently selected from list \ref gpio_function */ enum gpio_function gpio_get_function(uint gpio); /*! \brief Select up and down pulls on specific GPIO * \ingroup hardware_gpio * * \param gpio GPIO number * \param up If true set a pull up on the GPIO * \param down If true set a pull down on the GPIO * * \note On the RP2040, setting both pulls enables a "bus keep" function, * i.e. a weak pull to whatever is current high/low state of GPIO. */ void gpio_set_pulls(uint gpio, bool up, bool down); /*! \brief Set specified GPIO to be pulled up. * \ingroup hardware_gpio * * \param gpio GPIO number */ static inline void gpio_pull_up(uint gpio) { gpio_set_pulls(gpio, true, false); } /*! \brief Determine if the specified GPIO is pulled up. * \ingroup hardware_gpio * * \param gpio GPIO number * \return true if the GPIO is pulled up */ static inline bool gpio_is_pulled_up(uint gpio) { return (padsbank0_hw->io[gpio] & PADS_BANK0_GPIO0_PUE_BITS) != 0; } /*! \brief Set specified GPIO to be pulled down. * \ingroup hardware_gpio * * \param gpio GPIO number */ static inline void gpio_pull_down(uint gpio) { gpio_set_pulls(gpio, false, true); } /*! \brief Determine if the specified GPIO is pulled down. * \ingroup hardware_gpio * * \param gpio GPIO number * \return true if the GPIO is pulled down */ static inline bool gpio_is_pulled_down(uint gpio) { return (padsbank0_hw->io[gpio] & PADS_BANK0_GPIO0_PDE_BITS) != 0; } /*! \brief Disable pulls on specified GPIO * \ingroup hardware_gpio * * \param gpio GPIO number */ static inline void gpio_disable_pulls(uint gpio) { gpio_set_pulls(gpio, false, false); } /*! \brief Set GPIO IRQ override * \ingroup hardware_gpio * * Optionally invert a GPIO IRQ signal, or drive it high or low * * \param gpio GPIO number * \param value See \ref gpio_override */ void gpio_set_irqover(uint gpio, uint value); /*! \brief Set GPIO output override * \ingroup hardware_gpio * * \param gpio GPIO number * \param value See \ref gpio_override */ void gpio_set_outover(uint gpio, uint value); /*! \brief Select GPIO input override * \ingroup hardware_gpio * * \param gpio GPIO number * \param value See \ref gpio_override */ void gpio_set_inover(uint gpio, uint value); /*! \brief Select GPIO output enable override * \ingroup hardware_gpio * * \param gpio GPIO number * \param value See \ref gpio_override */ void gpio_set_oeover(uint gpio, uint value); /*! \brief Enable GPIO input * \ingroup hardware_gpio * * \param gpio GPIO number * \param enabled true to enable input on specified GPIO */ void gpio_set_input_enabled(uint gpio, bool enabled); /*! \brief Enable/disable GPIO input hysteresis (Schmitt trigger) * \ingroup hardware_gpio * * Enable or disable the Schmitt trigger hysteresis on a given GPIO. This is * enabled on all GPIOs by default. Disabling input hysteresis can lead to * inconsistent readings when the input signal has very long rise or fall * times, but slightly reduces the GPIO's input delay. * * \sa gpio_is_input_hysteresis_enabled * \param gpio GPIO number * \param enabled true to enable input hysteresis on specified GPIO */ void gpio_set_input_hysteresis_enabled(uint gpio, bool enabled); /*! \brief Determine whether input hysteresis is enabled on a specified GPIO * \ingroup hardware_gpio * * \sa gpio_set_input_hysteresis_enabled * \param gpio GPIO number */ bool gpio_is_input_hysteresis_enabled(uint gpio); /*! \brief Set slew rate for a specified GPIO * \ingroup hardware_gpio * * \sa gpio_get_slew_rate * \param gpio GPIO number * \param slew GPIO output slew rate */ void gpio_set_slew_rate(uint gpio, enum gpio_slew_rate slew); /*! \brief Determine current slew rate for a specified GPIO * \ingroup hardware_gpio * * \sa gpio_set_slew_rate * \param gpio GPIO number * \return Current slew rate of that GPIO */ enum gpio_slew_rate gpio_get_slew_rate(uint gpio); /*! \brief Set drive strength for a specified GPIO * \ingroup hardware_gpio * * \sa gpio_get_drive_strength * \param gpio GPIO number * \param drive GPIO output drive strength */ void gpio_set_drive_strength(uint gpio, enum gpio_drive_strength drive); /*! \brief Determine current slew rate for a specified GPIO * \ingroup hardware_gpio * * \sa gpio_set_drive_strength * \param gpio GPIO number * \return Current drive strength of that GPIO */ enum gpio_drive_strength gpio_get_drive_strength(uint gpio); /*! \brief Enable or disable specific interrupt events for specified GPIO * \ingroup hardware_gpio * * This function sets which GPIO events cause a GPIO interrupt on the calling core. See * \ref gpio_set_irq_callback, \ref gpio_set_irq_enabled_with_callback and * \ref gpio_add_raw_irq_handler to set up a GPIO interrupt handler to handle the events. * * \note The IO IRQs are independent per-processor. This configures the interrupt events for * the processor that calls the function. * * \param gpio GPIO number * \param event_mask Which events will cause an interrupt * \param enabled Enable or disable flag * * Events is a bitmask of the following \ref gpio_irq_level values: * * bit | constant | interrupt * ----|---------------------------------------------------------- * 0 | GPIO_IRQ_LEVEL_LOW | Continuously while level is low * 1 | GPIO_IRQ_LEVEL_HIGH | Continuously while level is high * 2 | GPIO_IRQ_EDGE_FALL | On each transition from high to low * 3 | GPIO_IRQ_EDGE_RISE | On each transition from low to high * * which are specified in \ref gpio_irq_level */ void gpio_set_irq_enabled(uint gpio, uint32_t event_mask, bool enabled); // PICO_CONFIG: GPIO_IRQ_CALLBACK_ORDER_PRIORITY, the irq priority order of the default IRQ callback, min=0, max=255, default=PICO_SHARED_IRQ_HANDLER_LOWEST_ORDER_PRIORITY, group=hardware_gpio #ifndef GPIO_IRQ_CALLBACK_ORDER_PRIORITY #define GPIO_IRQ_CALLBACK_ORDER_PRIORITY PICO_SHARED_IRQ_HANDLER_LOWEST_ORDER_PRIORITY #endif // PICO_CONFIG: GPIO_RAW_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY, the irq priority order of raw IRQ handlers if the priortiy is not specified, min=0, max=255, default=PICO_SHARED_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY, group=hardware_gpio #ifndef GPIO_RAW_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY #define GPIO_RAW_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY PICO_SHARED_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY #endif /*! \brief Set the generic callback used for GPIO IRQ events for the current core * \ingroup hardware_gpio * * This function sets the callback used for all GPIO IRQs on the current core that are not explicitly * hooked via \ref gpio_add_raw_irq_handler or other gpio_add_raw_irq_handler_ functions. * * This function is called with the GPIO number and event mask for each of the (not explicitly hooked) * GPIOs that have events enabled and that are pending (see \ref gpio_get_irq_event_mask). * * \note The IO IRQs are independent per-processor. This function affects * the processor that calls the function. * * \param callback default user function to call on GPIO irq. Note only one of these can be set per processor. */ void gpio_set_irq_callback(gpio_irq_callback_t callback); /*! \brief Convenience function which performs multiple GPIO IRQ related initializations * \ingroup hardware_gpio * * This method is a slightly eclectic mix of initialization, that: * * \li Updates whether the specified events for the specified GPIO causes an interrupt on the calling core based * on the enable flag. * * \li Sets the callback handler for the calling core to callback (or clears the handler if the callback is NULL). * * \li Enables GPIO IRQs on the current core if enabled is true. * * This method is commonly used to perform a one time setup, and following that any additional IRQs/events are enabled * via \ref gpio_set_irq_enabled. All GPIOs/events added in this way on the same core share the same callback; for multiple * independent handlers for different GPIOs you should use \ref gpio_add_raw_irq_handler and related functions. * * This method is equivalent to: * * \code{.c} * gpio_set_irq_enabled(gpio, event_mask, enabled); * gpio_set_irq_callback(callback); * if (enabled) irq_set_enabled(IO_IRQ_BANK0, true); * \endcode * * \note The IO IRQs are independent per-processor. This method affects only the processor that calls the function. * * \param gpio GPIO number * \param event_mask Which events will cause an interrupt. See \ref gpio_irq_level for details. * \param enabled Enable or disable flag * \param callback user function to call on GPIO irq. if NULL, the callback is removed */ void gpio_set_irq_enabled_with_callback(uint gpio, uint32_t event_mask, bool enabled, gpio_irq_callback_t callback); /*! \brief Enable dormant wake up interrupt for specified GPIO and events * \ingroup hardware_gpio * * This configures IRQs to restart the XOSC or ROSC when they are * disabled in dormant mode * * \param gpio GPIO number * \param event_mask Which events will cause an interrupt. See \ref gpio_irq_level for details. * \param enabled Enable/disable flag */ void gpio_set_dormant_irq_enabled(uint gpio, uint32_t event_mask, bool enabled); /*! \brief Return the current interrupt status (pending events) for the given GPIO * \ingroup hardware_gpio * * \param gpio GPIO number * \return Bitmask of events that are currently pending for the GPIO. See \ref gpio_irq_level for details. * \sa gpio_acknowledge_irq */ static inline uint32_t gpio_get_irq_event_mask(uint gpio) { check_gpio_param(gpio); io_irq_ctrl_hw_t *irq_ctrl_base = get_core_num() ? &iobank0_hw->proc1_irq_ctrl : &iobank0_hw->proc0_irq_ctrl; io_ro_32 *status_reg = &irq_ctrl_base->ints[gpio >> 3u]; return (*status_reg >> (4 * (gpio & 7u))) & 0xfu; } /*! \brief Acknowledge a GPIO interrupt for the specified events on the calling core * \ingroup hardware_gpio * * \note This may be called with a mask of any of valid bits specified in \ref gpio_irq_level, however * it has no effect on \a level sensitive interrupts which remain pending while the GPIO is at the specified * level. When handling \a level sensitive interrupts, you should generally disable the interrupt (see * \ref gpio_set_irq_enabled) and then set it up again later once the GPIO level has changed (or to catch * the opposite level). * * \param gpio GPIO number * * \note For callbacks set with \ref gpio_set_irq_enabled_with_callback, or \ref gpio_set_irq_callback, this function is called automatically. * \param event_mask Bitmask of events to clear. See \ref gpio_irq_level for details. */ void gpio_acknowledge_irq(uint gpio, uint32_t event_mask); /*! \brief Adds a raw GPIO IRQ handler for the specified GPIOs on the current core * \ingroup hardware_gpio * * In addition to the default mechanism of a single GPIO IRQ event callback per core (see \ref gpio_set_irq_callback), * it is possible to add explicit GPIO IRQ handlers which are called independent of the default callback. The order * relative to the default callback can be controlled via the order_priority parameter (the default callback has the priority * \ref GPIO_IRQ_CALLBACK_ORDER_PRIORITY which defaults to the lowest priority with the intention of it running last). * * This method adds such an explicit GPIO IRQ handler, and disables the "default" callback for the specified GPIOs. * * \note Multiple raw handlers should not be added for the same GPIOs, and this method will assert if you attempt to. * * A raw handler should check for whichever GPIOs and events it handles, and acknowledge them itself; it might look something like: * * \code{.c} * void my_irq_handler(void) { * if (gpio_get_irq_event_mask(my_gpio_num) & my_gpio_event_mask) { * gpio_acknowledge_irq(my_gpio_num, my_gpio_event_mask); * // handle the IRQ * } * if (gpio_get_irq_event_mask(my_gpio_num2) & my_gpio_event_mask2) { * gpio_acknowledge_irq(my_gpio_num2, my_gpio_event_mask2); * // handle the IRQ * } * } * \endcode * * @param gpio_mask a bit mask of the GPIO numbers that will no longer be passed to the default callback for this core * @param handler the handler to add to the list of GPIO IRQ handlers for this core * @param order_priority the priority order to determine the relative position of the handler in the list of GPIO IRQ handlers for this core. */ void gpio_add_raw_irq_handler_with_order_priority_masked(uint gpio_mask, irq_handler_t handler, uint8_t order_priority); /*! \brief Adds a raw GPIO IRQ handler for a specific GPIO on the current core * \ingroup hardware_gpio * * In addition to the default mechanism of a single GPIO IRQ event callback per core (see \ref gpio_set_irq_callback), * it is possible to add explicit GPIO IRQ handlers which are called independent of the default callback. The order * relative to the default callback can be controlled via the order_priority parameter(the default callback has the priority * \ref GPIO_IRQ_CALLBACK_ORDER_PRIORITY which defaults to the lowest priority with the intention of it running last). * * This method adds such a callback, and disables the "default" callback for the specified GPIO. * * \note Multiple raw handlers should not be added for the same GPIO, and this method will assert if you attempt to. * * A raw handler should check for whichever GPIOs and events it handles, and acknowledge them itself; it might look something like: * * \code{.c} * void my_irq_handler(void) { * if (gpio_get_irq_event_mask(my_gpio_num) & my_gpio_event_mask) { * gpio_acknowledge_irq(my_gpio_num, my_gpio_event_mask); * // handle the IRQ * } * } * \endcode * * @param gpio the GPIO number that will no longer be passed to the default callback for this core * @param handler the handler to add to the list of GPIO IRQ handlers for this core * @param order_priority the priority order to determine the relative position of the handler in the list of GPIO IRQ handlers for this core. */ static inline void gpio_add_raw_irq_handler_with_order_priority(uint gpio, irq_handler_t handler, uint8_t order_priority) { check_gpio_param(gpio); gpio_add_raw_irq_handler_with_order_priority_masked(1u << gpio, handler, order_priority); } /*! \brief Adds a raw GPIO IRQ handler for the specified GPIOs on the current core * \ingroup hardware_gpio * * In addition to the default mechanism of a single GPIO IRQ event callback per core (see \ref gpio_set_irq_callback), * it is possible to add explicit GPIO IRQ handlers which are called independent of the default event callback. * * This method adds such a callback, and disables the "default" callback for the specified GPIOs. * * \note Multiple raw handlers should not be added for the same GPIOs, and this method will assert if you attempt to. * * A raw handler should check for whichever GPIOs and events it handles, and acknowledge them itself; it might look something like: * * \code{.c} * void my_irq_handler(void) { * if (gpio_get_irq_event_mask(my_gpio_num) & my_gpio_event_mask) { * gpio_acknowledge_irq(my_gpio_num, my_gpio_event_mask); * // handle the IRQ * } * if (gpio_get_irq_event_mask(my_gpio_num2) & my_gpio_event_mask2) { * gpio_acknowledge_irq(my_gpio_num2, my_gpio_event_mask2); * // handle the IRQ * } * } * \endcode * * @param gpio_mask a bit mask of the GPIO numbers that will no longer be passed to the default callback for this core * @param handler the handler to add to the list of GPIO IRQ handlers for this core */ void gpio_add_raw_irq_handler_masked(uint gpio_mask, irq_handler_t handler); /*! \brief Adds a raw GPIO IRQ handler for a specific GPIO on the current core * \ingroup hardware_gpio * * In addition to the default mechanism of a single GPIO IRQ event callback per core (see \ref gpio_set_irq_callback), * it is possible to add explicit GPIO IRQ handlers which are called independent of the default event callback. * * This method adds such a callback, and disables the "default" callback for the specified GPIO. * * \note Multiple raw handlers should not be added for the same GPIO, and this method will assert if you attempt to. * * A raw handler should check for whichever GPIOs and events it handles, and acknowledge them itself; it might look something like: * * \code{.c} * void my_irq_handler(void) { * if (gpio_get_irq_event_mask(my_gpio_num) & my_gpio_event_mask) { * gpio_acknowledge_irq(my_gpio_num, my_gpio_event_mask); * // handle the IRQ * } * } * \endcode * * @param gpio the GPIO number that will no longer be passed to the default callback for this core * @param handler the handler to add to the list of GPIO IRQ handlers for this core */ static inline void gpio_add_raw_irq_handler(uint gpio, irq_handler_t handler) { check_gpio_param(gpio); gpio_add_raw_irq_handler_masked(1u << gpio, handler); } /*! \brief Removes a raw GPIO IRQ handler for the specified GPIOs on the current core * \ingroup hardware_gpio * * In addition to the default mechanism of a single GPIO IRQ event callback per core (see \ref gpio_set_irq_callback), * it is possible to add explicit GPIO IRQ handlers which are called independent of the default event callback. * * This method removes such a callback, and enables the "default" callback for the specified GPIOs. * * @param gpio_mask a bit mask of the GPIO numbers that will now be passed to the default callback for this core * @param handler the handler to remove from the list of GPIO IRQ handlers for this core */ void gpio_remove_raw_irq_handler_masked(uint gpio_mask, irq_handler_t handler); /*! \brief Removes a raw GPIO IRQ handler for the specified GPIO on the current core * \ingroup hardware_gpio * * In addition to the default mechanism of a single GPIO IRQ event callback per core (see \ref gpio_set_irq_callback), * it is possible to add explicit GPIO IRQ handlers which are called independent of the default event callback. * * This method removes such a callback, and enables the "default" callback for the specified GPIO. * * @param gpio the GPIO number that will now be passed to the default callback for this core * @param handler the handler to remove from the list of GPIO IRQ handlers for this core */ static inline void gpio_remove_raw_irq_handler(uint gpio, irq_handler_t handler) { check_gpio_param(gpio); gpio_remove_raw_irq_handler_masked(1u << gpio, handler); } /*! \brief Initialise a GPIO for (enabled I/O and set func to GPIO_FUNC_SIO) * \ingroup hardware_gpio * * Clear the output enable (i.e. set to input). * Clear any output value. * * \param gpio GPIO number */ void gpio_init(uint gpio); /*! \brief Resets a GPIO back to the NULL function, i.e. disables it. * \ingroup hardware_gpio * * \param gpio GPIO number */ void gpio_deinit(uint gpio); /*! \brief Initialise multiple GPIOs (enabled I/O and set func to GPIO_FUNC_SIO) * \ingroup hardware_gpio * * Clear the output enable (i.e. set to input). * Clear any output value. * * \param gpio_mask Mask with 1 bit per GPIO number to initialize */ void gpio_init_mask(uint gpio_mask); // ---------------------------------------------------------------------------- // Input // ---------------------------------------------------------------------------- /*! \brief Get state of a single specified GPIO * \ingroup hardware_gpio * * \param gpio GPIO number * \return Current state of the GPIO. 0 for low, non-zero for high */ static inline bool gpio_get(uint gpio) { return !!((1ul << gpio) & sio_hw->gpio_in); } /*! \brief Get raw value of all GPIOs * \ingroup hardware_gpio * * \return Bitmask of raw GPIO values, as bits 0-29 */ static inline uint32_t gpio_get_all(void) { return sio_hw->gpio_in; } // ---------------------------------------------------------------------------- // Output // ---------------------------------------------------------------------------- /*! \brief Drive high every GPIO appearing in mask * \ingroup hardware_gpio * * \param mask Bitmask of GPIO values to set, as bits 0-29 */ static inline void gpio_set_mask(uint32_t mask) { sio_hw->gpio_set = mask; } /*! \brief Drive low every GPIO appearing in mask * \ingroup hardware_gpio * * \param mask Bitmask of GPIO values to clear, as bits 0-29 */ static inline void gpio_clr_mask(uint32_t mask) { sio_hw->gpio_clr = mask; } /*! \brief Toggle every GPIO appearing in mask * \ingroup hardware_gpio * * \param mask Bitmask of GPIO values to toggle, as bits 0-29 */ static inline void gpio_xor_mask(uint32_t mask) { sio_hw->gpio_togl = mask; } /*! \brief Drive GPIO high/low depending on parameters * \ingroup hardware_gpio * * \param mask Bitmask of GPIO values to change, as bits 0-29 * \param value Value to set * * For each 1 bit in \p mask, drive that pin to the value given by * corresponding bit in \p value, leaving other pins unchanged. * Since this uses the TOGL alias, it is concurrency-safe with e.g. an IRQ * bashing different pins from the same core. */ static inline void gpio_put_masked(uint32_t mask, uint32_t value) { sio_hw->gpio_togl = (sio_hw->gpio_out ^ value) & mask; } /*! \brief Drive all pins simultaneously * \ingroup hardware_gpio * * \param value Bitmask of GPIO values to change, as bits 0-29 */ static inline void gpio_put_all(uint32_t value) { sio_hw->gpio_out = value; } /*! \brief Drive a single GPIO high/low * \ingroup hardware_gpio * * \param gpio GPIO number * \param value If false clear the GPIO, otherwise set it. */ static inline void gpio_put(uint gpio, bool value) { uint32_t mask = 1ul << gpio; if (value) gpio_set_mask(mask); else gpio_clr_mask(mask); } /*! \brief Determine whether a GPIO is currently driven high or low * \ingroup hardware_gpio * * This function returns the high/low output level most recently assigned to a * GPIO via gpio_put() or similar. This is the value that is presented outward * to the IO muxing, *not* the input level back from the pad (which can be * read using gpio_get()). * * To avoid races, this function must not be used for read-modify-write * sequences when driving GPIOs -- instead functions like gpio_put() should be * used to atomically update GPIOs. This accessor is intended for debug use * only. * * \param gpio GPIO number * \return true if the GPIO output level is high, false if low. */ static inline bool gpio_get_out_level(uint gpio) { return !!(sio_hw->gpio_out & (1u << gpio)); } // ---------------------------------------------------------------------------- // Direction // ---------------------------------------------------------------------------- /*! \brief Set a number of GPIOs to output * \ingroup hardware_gpio * * Switch all GPIOs in "mask" to output * * \param mask Bitmask of GPIO to set to output, as bits 0-29 */ static inline void gpio_set_dir_out_masked(uint32_t mask) { sio_hw->gpio_oe_set = mask; } /*! \brief Set a number of GPIOs to input * \ingroup hardware_gpio * * \param mask Bitmask of GPIO to set to input, as bits 0-29 */ static inline void gpio_set_dir_in_masked(uint32_t mask) { sio_hw->gpio_oe_clr = mask; } /*! \brief Set multiple GPIO directions * \ingroup hardware_gpio * * \param mask Bitmask of GPIO to set to input, as bits 0-29 * \param value Values to set * * For each 1 bit in "mask", switch that pin to the direction given by * corresponding bit in "value", leaving other pins unchanged. * E.g. gpio_set_dir_masked(0x3, 0x2); -> set pin 0 to input, pin 1 to output, * simultaneously. */ static inline void gpio_set_dir_masked(uint32_t mask, uint32_t value) { sio_hw->gpio_oe_togl = (sio_hw->gpio_oe ^ value) & mask; } /*! \brief Set direction of all pins simultaneously. * \ingroup hardware_gpio * * \param values individual settings for each gpio; for GPIO N, bit N is 1 for out, 0 for in */ static inline void gpio_set_dir_all_bits(uint32_t values) { sio_hw->gpio_oe = values; } /*! \brief Set a single GPIO direction * \ingroup hardware_gpio * * \param gpio GPIO number * \param out true for out, false for in */ static inline void gpio_set_dir(uint gpio, bool out) { uint32_t mask = 1ul << gpio; if (out) gpio_set_dir_out_masked(mask); else gpio_set_dir_in_masked(mask); } /*! \brief Check if a specific GPIO direction is OUT * \ingroup hardware_gpio * * \param gpio GPIO number * \return true if the direction for the pin is OUT */ static inline bool gpio_is_dir_out(uint gpio) { return !!(sio_hw->gpio_oe & (1u << (gpio))); } /*! \brief Get a specific GPIO direction * \ingroup hardware_gpio * * \param gpio GPIO number * \return 1 for out, 0 for in */ static inline uint gpio_get_dir(uint gpio) { return gpio_is_dir_out(gpio); // note GPIO_OUT is 1/true and GPIO_IN is 0/false anyway } extern void gpio_debug_pins_init(void); #ifdef __cplusplus } #endif // PICO_CONFIG: PICO_DEBUG_PIN_BASE, First pin to use for debug output (if enabled), min=0, max=28, default=19, group=hardware_gpio #ifndef PICO_DEBUG_PIN_BASE #define PICO_DEBUG_PIN_BASE 19u #endif // PICO_CONFIG: PICO_DEBUG_PIN_COUNT, Number of pins to use for debug output (if enabled), min=1, max=28, default=3, group=hardware_gpio #ifndef PICO_DEBUG_PIN_COUNT #define PICO_DEBUG_PIN_COUNT 3u #endif #ifndef __cplusplus // note these two macros may only be used once per and only apply per compilation unit (hence the CU_) #define CU_REGISTER_DEBUG_PINS(...) enum __unused DEBUG_PIN_TYPE { _none = 0, __VA_ARGS__ }; static enum DEBUG_PIN_TYPE __selected_debug_pins; #define CU_SELECT_DEBUG_PINS(x) static enum DEBUG_PIN_TYPE __selected_debug_pins = (x); #define DEBUG_PINS_ENABLED(p) (__selected_debug_pins == (p)) #else #define CU_REGISTER_DEBUG_PINS(p...) \ enum DEBUG_PIN_TYPE { _none = 0, p }; \ template class __debug_pin_settings { \ public: \ static inline bool enabled() { return false; } \ }; #define CU_SELECT_DEBUG_PINS(x) template<> inline bool __debug_pin_settings::enabled() { return true; }; #define DEBUG_PINS_ENABLED(p) (__debug_pin_settings

::enabled()) #endif #define DEBUG_PINS_SET(p, v) if (DEBUG_PINS_ENABLED(p)) gpio_set_mask((unsigned)(v)<restart_on_next = false; i2c->hw->enable = 0; // Configure as a fast-mode master with RepStart support, 7-bit addresses i2c->hw->con = I2C_IC_CON_SPEED_VALUE_FAST << I2C_IC_CON_SPEED_LSB | I2C_IC_CON_MASTER_MODE_BITS | I2C_IC_CON_IC_SLAVE_DISABLE_BITS | I2C_IC_CON_IC_RESTART_EN_BITS | I2C_IC_CON_TX_EMPTY_CTRL_BITS; // Set FIFO watermarks to 1 to make things simpler. This is encoded by a register value of 0. i2c->hw->tx_tl = 0; i2c->hw->rx_tl = 0; // Always enable the DREQ signalling -- harmless if DMA isn't listening i2c->hw->dma_cr = I2C_IC_DMA_CR_TDMAE_BITS | I2C_IC_DMA_CR_RDMAE_BITS; // Re-sets i2c->hw->enable upon returning: return i2c_set_baudrate(i2c, baudrate); } void i2c_deinit(i2c_inst_t *i2c) { i2c_reset(i2c); } uint i2c_set_baudrate(i2c_inst_t *i2c, uint baudrate) { invalid_params_if(I2C, baudrate == 0); // I2C is synchronous design that runs from clk_sys uint freq_in = clock_get_hz(clk_sys); // TODO there are some subtleties to I2C timing which we are completely ignoring here uint period = (freq_in + baudrate / 2) / baudrate; uint lcnt = period * 3 / 5; // oof this one hurts uint hcnt = period - lcnt; // Check for out-of-range divisors: invalid_params_if(I2C, hcnt > I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_BITS); invalid_params_if(I2C, lcnt > I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_BITS); invalid_params_if(I2C, hcnt < 8); invalid_params_if(I2C, lcnt < 8); // Per I2C-bus specification a device in standard or fast mode must // internally provide a hold time of at least 300ns for the SDA signal to // bridge the undefined region of the falling edge of SCL. A smaller hold // time of 120ns is used for fast mode plus. uint sda_tx_hold_count; if (baudrate < 1000000) { // sda_tx_hold_count = freq_in [cycles/s] * 300ns * (1s / 1e9ns) // Reduce 300/1e9 to 3/1e7 to avoid numbers that don't fit in uint. // Add 1 to avoid division truncation. sda_tx_hold_count = ((freq_in * 3) / 10000000) + 1; } else { // sda_tx_hold_count = freq_in [cycles/s] * 120ns * (1s / 1e9ns) // Reduce 120/1e9 to 3/25e6 to avoid numbers that don't fit in uint. // Add 1 to avoid division truncation. sda_tx_hold_count = ((freq_in * 3) / 25000000) + 1; } assert(sda_tx_hold_count <= lcnt - 2); i2c->hw->enable = 0; // Always use "fast" mode (<= 400 kHz, works fine for standard mode too) hw_write_masked(&i2c->hw->con, I2C_IC_CON_SPEED_VALUE_FAST << I2C_IC_CON_SPEED_LSB, I2C_IC_CON_SPEED_BITS ); i2c->hw->fs_scl_hcnt = hcnt; i2c->hw->fs_scl_lcnt = lcnt; i2c->hw->fs_spklen = lcnt < 16 ? 1 : lcnt / 16; hw_write_masked(&i2c->hw->sda_hold, sda_tx_hold_count << I2C_IC_SDA_HOLD_IC_SDA_TX_HOLD_LSB, I2C_IC_SDA_HOLD_IC_SDA_TX_HOLD_BITS); i2c->hw->enable = 1; return freq_in / period; } void i2c_set_slave_mode(i2c_inst_t *i2c, bool slave, uint8_t addr) { invalid_params_if(I2C, addr >= 0x80); // 7-bit addresses invalid_params_if(I2C, i2c_reserved_addr(addr)); i2c->hw->enable = 0; uint32_t ctrl_set_if_master = I2C_IC_CON_MASTER_MODE_BITS | I2C_IC_CON_IC_SLAVE_DISABLE_BITS; uint32_t ctrl_set_if_slave = I2C_IC_CON_RX_FIFO_FULL_HLD_CTRL_BITS; if (slave) { hw_write_masked(&i2c->hw->con, ctrl_set_if_slave, ctrl_set_if_master | ctrl_set_if_slave ); i2c->hw->sar = addr; } else { hw_write_masked(&i2c->hw->con, ctrl_set_if_master, ctrl_set_if_master | ctrl_set_if_slave ); } i2c->hw->enable = 1; } static int i2c_write_blocking_internal(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, check_timeout_fn timeout_check, struct timeout_state *ts) { invalid_params_if(I2C, addr >= 0x80); // 7-bit addresses invalid_params_if(I2C, i2c_reserved_addr(addr)); // Synopsys hw accepts start/stop flags alongside data items in the same // FIFO word, so no 0 byte transfers. invalid_params_if(I2C, len == 0); invalid_params_if(I2C, ((int)len) < 0); i2c->hw->enable = 0; i2c->hw->tar = addr; i2c->hw->enable = 1; bool abort = false; bool timeout = false; uint32_t abort_reason = 0; int byte_ctr; int ilen = (int)len; for (byte_ctr = 0; byte_ctr < ilen; ++byte_ctr) { bool first = byte_ctr == 0; bool last = byte_ctr == ilen - 1; i2c->hw->data_cmd = bool_to_bit(first && i2c->restart_on_next) << I2C_IC_DATA_CMD_RESTART_LSB | bool_to_bit(last && !nostop) << I2C_IC_DATA_CMD_STOP_LSB | *src++; // Wait until the transmission of the address/data from the internal // shift register has completed. For this to function correctly, the // TX_EMPTY_CTRL flag in IC_CON must be set. The TX_EMPTY_CTRL flag // was set in i2c_init. do { if (timeout_check) { timeout = timeout_check(ts); abort |= timeout; } tight_loop_contents(); } while (!timeout && !(i2c->hw->raw_intr_stat & I2C_IC_RAW_INTR_STAT_TX_EMPTY_BITS)); // If there was a timeout, don't attempt to do anything else. if (!timeout) { abort_reason = i2c->hw->tx_abrt_source; if (abort_reason) { // Note clearing the abort flag also clears the reason, and // this instance of flag is clear-on-read! Note also the // IC_CLR_TX_ABRT register always reads as 0. i2c->hw->clr_tx_abrt; abort = true; } if (abort || (last && !nostop)) { // If the transaction was aborted or if it completed // successfully wait until the STOP condition has occured. // TODO Could there be an abort while waiting for the STOP // condition here? If so, additional code would be needed here // to take care of the abort. do { if (timeout_check) { timeout = timeout_check(ts); abort |= timeout; } tight_loop_contents(); } while (!timeout && !(i2c->hw->raw_intr_stat & I2C_IC_RAW_INTR_STAT_STOP_DET_BITS)); // If there was a timeout, don't attempt to do anything else. if (!timeout) { i2c->hw->clr_stop_det; } } } // Note the hardware issues a STOP automatically on an abort condition. // Note also the hardware clears RX FIFO as well as TX on abort, // because we set hwparam IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT to 0. if (abort) break; } int rval; // A lot of things could have just happened due to the ingenious and // creative design of I2C. Try to figure things out. if (abort) { if (timeout) rval = PICO_ERROR_TIMEOUT; else if (!abort_reason || abort_reason & I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_BITS) { // No reported errors - seems to happen if there is nothing connected to the bus. // Address byte not acknowledged rval = PICO_ERROR_GENERIC; } else if (abort_reason & I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_BITS) { // Address acknowledged, some data not acknowledged rval = byte_ctr; } else { //panic("Unknown abort from I2C instance @%08x: %08x\n", (uint32_t) i2c->hw, abort_reason); rval = PICO_ERROR_GENERIC; } } else { rval = byte_ctr; } // nostop means we are now at the end of a *message* but not the end of a *transfer* i2c->restart_on_next = nostop; return rval; } int i2c_write_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop) { return i2c_write_blocking_internal(i2c, addr, src, len, nostop, NULL, NULL); } int i2c_write_blocking_until(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, absolute_time_t until) { timeout_state_t ts; return i2c_write_blocking_internal(i2c, addr, src, len, nostop, init_single_timeout_until(&ts, until), &ts); } int i2c_write_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, uint timeout_per_char_us) { timeout_state_t ts; return i2c_write_blocking_internal(i2c, addr, src, len, nostop, init_per_iteration_timeout_us(&ts, timeout_per_char_us), &ts); } static int i2c_read_blocking_internal(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, check_timeout_fn timeout_check, timeout_state_t *ts) { invalid_params_if(I2C, addr >= 0x80); // 7-bit addresses invalid_params_if(I2C, i2c_reserved_addr(addr)); invalid_params_if(I2C, len == 0); invalid_params_if(I2C, ((int)len) < 0); i2c->hw->enable = 0; i2c->hw->tar = addr; i2c->hw->enable = 1; bool abort = false; bool timeout = false; uint32_t abort_reason; int byte_ctr; int ilen = (int)len; for (byte_ctr = 0; byte_ctr < ilen; ++byte_ctr) { bool first = byte_ctr == 0; bool last = byte_ctr == ilen - 1; while (!i2c_get_write_available(i2c)) tight_loop_contents(); i2c->hw->data_cmd = bool_to_bit(first && i2c->restart_on_next) << I2C_IC_DATA_CMD_RESTART_LSB | bool_to_bit(last && !nostop) << I2C_IC_DATA_CMD_STOP_LSB | I2C_IC_DATA_CMD_CMD_BITS; // -> 1 for read do { abort_reason = i2c->hw->tx_abrt_source; abort = (bool) i2c->hw->clr_tx_abrt; if (timeout_check) { timeout = timeout_check(ts); abort |= timeout; } } while (!abort && !i2c_get_read_available(i2c)); if (abort) break; *dst++ = (uint8_t) i2c->hw->data_cmd; } int rval; if (abort) { if (timeout) rval = PICO_ERROR_TIMEOUT; else if (!abort_reason || abort_reason & I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_BITS) { // No reported errors - seems to happen if there is nothing connected to the bus. // Address byte not acknowledged rval = PICO_ERROR_GENERIC; } else { // panic("Unknown abort from I2C instance @%08x: %08x\n", (uint32_t) i2c->hw, abort_reason); rval = PICO_ERROR_GENERIC; } } else { rval = byte_ctr; } i2c->restart_on_next = nostop; return rval; } int i2c_read_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop) { return i2c_read_blocking_internal(i2c, addr, dst, len, nostop, NULL, NULL); } int i2c_read_blocking_until(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, absolute_time_t until) { timeout_state_t ts; return i2c_read_blocking_internal(i2c, addr, dst, len, nostop, init_single_timeout_until(&ts, until), &ts); } int i2c_read_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, uint timeout_per_char_us) { timeout_state_t ts; return i2c_read_blocking_internal(i2c, addr, dst, len, nostop, init_per_iteration_timeout_us(&ts, timeout_per_char_us), &ts); } ================================================ FILE: pico-sdk/src/rp2_common/hardware_i2c/include/hardware/i2c.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_I2C_H #define _HARDWARE_I2C_H #include "pico.h" #include "pico/time.h" #include "hardware/structs/i2c.h" #include "hardware/regs/dreq.h" // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_I2C, Enable/disable assertions in the I2C module, type=bool, default=0, group=hardware_i2c #ifndef PARAM_ASSERTIONS_ENABLED_I2C #define PARAM_ASSERTIONS_ENABLED_I2C 0 #endif #ifdef __cplusplus extern "C" { #endif /** \file hardware/i2c.h * \defgroup hardware_i2c hardware_i2c * * I2C Controller API * * The I2C bus is a two-wire serial interface, consisting of a serial data line SDA and a serial clock SCL. These wires carry * information between the devices connected to the bus. Each device is recognized by a unique 7-bit address and can operate as * either a “transmitter” or “receiver”, depending on the function of the device. Devices can also be considered as masters or * slaves when performing data transfers. A master is a device that initiates a data transfer on the bus and generates the * clock signals to permit that transfer. The first byte in the data transfer always contains the 7-bit address and * a read/write bit in the LSB position. This API takes care of toggling the read/write bit. After this, any device addressed * is considered a slave. * * This API allows the controller to be set up as a master or a slave using the \ref i2c_set_slave_mode function. * * The external pins of each controller are connected to GPIO pins as defined in the GPIO muxing table in the datasheet. The muxing options * give some IO flexibility, but each controller external pin should be connected to only one GPIO. * * Note that the controller does NOT support High speed mode or Ultra-fast speed mode, the fastest operation being fast mode plus * at up to 1000Kb/s. * * See the datasheet for more information on the I2C controller and its usage. * * \subsection i2c_example Example * \addtogroup hardware_i2c * \include bus_scan.c */ typedef struct i2c_inst i2c_inst_t; // PICO_CONFIG: PICO_DEFAULT_I2C, Define the default I2C for a board, min=0, max=1, group=hardware_i2c // PICO_CONFIG: PICO_DEFAULT_I2C_SDA_PIN, Define the default I2C SDA pin, min=0, max=29, group=hardware_i2c // PICO_CONFIG: PICO_DEFAULT_I2C_SCL_PIN, Define the default I2C SCL pin, min=0, max=29, group=hardware_i2c /** The I2C identifiers for use in I2C functions. * * e.g. i2c_init(i2c0, 48000) * * \ingroup hardware_i2c * @{ */ extern i2c_inst_t i2c0_inst; extern i2c_inst_t i2c1_inst; #define i2c0 (&i2c0_inst) ///< Identifier for I2C HW Block 0 #define i2c1 (&i2c1_inst) ///< Identifier for I2C HW Block 1 #if !defined(PICO_DEFAULT_I2C_INSTANCE) && defined(PICO_DEFAULT_I2C) #define PICO_DEFAULT_I2C_INSTANCE (__CONCAT(i2c,PICO_DEFAULT_I2C)) #endif #ifdef PICO_DEFAULT_I2C_INSTANCE #define i2c_default PICO_DEFAULT_I2C_INSTANCE #endif /** @} */ // ---------------------------------------------------------------------------- // Setup /*! \brief Initialise the I2C HW block * \ingroup hardware_i2c * * Put the I2C hardware into a known state, and enable it. Must be called * before other functions. By default, the I2C is configured to operate as a * master. * * The I2C bus frequency is set as close as possible to requested, and * the actual rate set is returned * * \param i2c Either \ref i2c0 or \ref i2c1 * \param baudrate Baudrate in Hz (e.g. 100kHz is 100000) * \return Actual set baudrate */ uint i2c_init(i2c_inst_t *i2c, uint baudrate); /*! \brief Disable the I2C HW block * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * * Disable the I2C again if it is no longer used. Must be reinitialised before * being used again. */ void i2c_deinit(i2c_inst_t *i2c); /*! \brief Set I2C baudrate * \ingroup hardware_i2c * * Set I2C bus frequency as close as possible to requested, and return actual * rate set. * Baudrate may not be as exactly requested due to clocking limitations. * * \param i2c Either \ref i2c0 or \ref i2c1 * \param baudrate Baudrate in Hz (e.g. 100kHz is 100000) * \return Actual set baudrate */ uint i2c_set_baudrate(i2c_inst_t *i2c, uint baudrate); /*! \brief Set I2C port to slave mode * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \param slave true to use slave mode, false to use master mode * \param addr If \p slave is true, set the slave address to this value */ void i2c_set_slave_mode(i2c_inst_t *i2c, bool slave, uint8_t addr); // ---------------------------------------------------------------------------- // Generic input/output struct i2c_inst { i2c_hw_t *hw; bool restart_on_next; }; /*! \brief Convert I2C instance to hardware instance number * \ingroup hardware_i2c * * \param i2c I2C instance * \return Number of I2C, 0 or 1. */ static inline uint i2c_hw_index(i2c_inst_t *i2c) { invalid_params_if(I2C, i2c != i2c0 && i2c != i2c1); return i2c == i2c1 ? 1 : 0; } static inline i2c_hw_t *i2c_get_hw(i2c_inst_t *i2c) { i2c_hw_index(i2c); // check it is a hw i2c return i2c->hw; } static inline i2c_inst_t *i2c_get_instance(uint instance) { static_assert(NUM_I2CS == 2, ""); invalid_params_if(I2C, instance >= NUM_I2CS); return instance ? i2c1 : i2c0; } /*! \brief Attempt to write specified number of bytes to address, blocking until the specified absolute time is reached. * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \param addr 7-bit address of device to write to * \param src Pointer to data to send * \param len Length of data in bytes to send * \param nostop If true, master retains control of the bus at the end of the transfer (no Stop is issued), * and the next transfer will begin with a Restart rather than a Start. * \param until The absolute time that the block will wait until the entire transaction is complete. Note, an individual timeout of * this value divided by the length of data is applied for each byte transfer, so if the first or subsequent * bytes fails to transfer within that sub timeout, the function will return with an error. * * \return Number of bytes written, or PICO_ERROR_GENERIC if address not acknowledged, no device present, or PICO_ERROR_TIMEOUT if a timeout occurred. */ int i2c_write_blocking_until(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, absolute_time_t until); /*! \brief Attempt to read specified number of bytes from address, blocking until the specified absolute time is reached. * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \param addr 7-bit address of device to read from * \param dst Pointer to buffer to receive data * \param len Length of data in bytes to receive * \param nostop If true, master retains control of the bus at the end of the transfer (no Stop is issued), * and the next transfer will begin with a Restart rather than a Start. * \param until The absolute time that the block will wait until the entire transaction is complete. * \return Number of bytes read, or PICO_ERROR_GENERIC if address not acknowledged, no device present, or PICO_ERROR_TIMEOUT if a timeout occurred. */ int i2c_read_blocking_until(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, absolute_time_t until); /*! \brief Attempt to write specified number of bytes to address, with timeout * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \param addr 7-bit address of device to write to * \param src Pointer to data to send * \param len Length of data in bytes to send * \param nostop If true, master retains control of the bus at the end of the transfer (no Stop is issued), * and the next transfer will begin with a Restart rather than a Start. * \param timeout_us The time that the function will wait for the entire transaction to complete. Note, an individual timeout of * this value divided by the length of data is applied for each byte transfer, so if the first or subsequent * bytes fails to transfer within that sub timeout, the function will return with an error. * * \return Number of bytes written, or PICO_ERROR_GENERIC if address not acknowledged, no device present, or PICO_ERROR_TIMEOUT if a timeout occurred. */ static inline int i2c_write_timeout_us(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, uint timeout_us) { absolute_time_t t = make_timeout_time_us(timeout_us); return i2c_write_blocking_until(i2c, addr, src, len, nostop, t); } int i2c_write_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, uint timeout_per_char_us); /*! \brief Attempt to read specified number of bytes from address, with timeout * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \param addr 7-bit address of device to read from * \param dst Pointer to buffer to receive data * \param len Length of data in bytes to receive * \param nostop If true, master retains control of the bus at the end of the transfer (no Stop is issued), * and the next transfer will begin with a Restart rather than a Start. * \param timeout_us The time that the function will wait for the entire transaction to complete * \return Number of bytes read, or PICO_ERROR_GENERIC if address not acknowledged, no device present, or PICO_ERROR_TIMEOUT if a timeout occurred. */ static inline int i2c_read_timeout_us(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, uint timeout_us) { absolute_time_t t = make_timeout_time_us(timeout_us); return i2c_read_blocking_until(i2c, addr, dst, len, nostop, t); } int i2c_read_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, uint timeout_per_char_us); /*! \brief Attempt to write specified number of bytes to address, blocking * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \param addr 7-bit address of device to write to * \param src Pointer to data to send * \param len Length of data in bytes to send * \param nostop If true, master retains control of the bus at the end of the transfer (no Stop is issued), * and the next transfer will begin with a Restart rather than a Start. * \return Number of bytes written, or PICO_ERROR_GENERIC if address not acknowledged, no device present. */ int i2c_write_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop); /*! \brief Attempt to read specified number of bytes from address, blocking * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \param addr 7-bit address of device to read from * \param dst Pointer to buffer to receive data * \param len Length of data in bytes to receive * \param nostop If true, master retains control of the bus at the end of the transfer (no Stop is issued), * and the next transfer will begin with a Restart rather than a Start. * \return Number of bytes read, or PICO_ERROR_GENERIC if address not acknowledged or no device present. */ int i2c_read_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop); /*! \brief Determine non-blocking write space available * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \return 0 if no space is available in the I2C to write more data. If return is nonzero, at * least that many bytes can be written without blocking. */ static inline size_t i2c_get_write_available(i2c_inst_t *i2c) { const size_t IC_TX_BUFFER_DEPTH = 16; return IC_TX_BUFFER_DEPTH - i2c_get_hw(i2c)->txflr; } /*! \brief Determine number of bytes received * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \return 0 if no data available, if return is nonzero at * least that many bytes can be read without blocking. */ static inline size_t i2c_get_read_available(i2c_inst_t *i2c) { return i2c_get_hw(i2c)->rxflr; } /*! \brief Write direct to TX FIFO * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \param src Data to send * \param len Number of bytes to send * * Writes directly to the I2C TX FIFO which is mainly useful for * slave-mode operation. */ static inline void i2c_write_raw_blocking(i2c_inst_t *i2c, const uint8_t *src, size_t len) { for (size_t i = 0; i < len; ++i) { // TODO NACK or STOP on end? while (!i2c_get_write_available(i2c)) tight_loop_contents(); i2c_get_hw(i2c)->data_cmd = *src++; } } /*! \brief Read direct from RX FIFO * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \param dst Buffer to accept data * \param len Number of bytes to read * * Reads directly from the I2C RX FIFO which is mainly useful for * slave-mode operation. */ static inline void i2c_read_raw_blocking(i2c_inst_t *i2c, uint8_t *dst, size_t len) { for (size_t i = 0; i < len; ++i) { while (!i2c_get_read_available(i2c)) tight_loop_contents(); *dst++ = (uint8_t)i2c_get_hw(i2c)->data_cmd; } } /** * \brief Pop a byte from I2C Rx FIFO. * \ingroup hardware_i2c * * This function is non-blocking and assumes the Rx FIFO isn't empty. * * \param i2c I2C instance. * \return uint8_t Byte value. */ static inline uint8_t i2c_read_byte_raw(i2c_inst_t *i2c) { i2c_hw_t *hw = i2c_get_hw(i2c); assert(hw->status & I2C_IC_STATUS_RFNE_BITS); // Rx FIFO must not be empty return (uint8_t)hw->data_cmd; } /** * \brief Push a byte into I2C Tx FIFO. * \ingroup hardware_i2c * * This function is non-blocking and assumes the Tx FIFO isn't full. * * \param i2c I2C instance. * \param value Byte value. */ static inline void i2c_write_byte_raw(i2c_inst_t *i2c, uint8_t value) { i2c_hw_t *hw = i2c_get_hw(i2c); assert(hw->status & I2C_IC_STATUS_TFNF_BITS); // Tx FIFO must not be full hw->data_cmd = value; } /*! \brief Return the DREQ to use for pacing transfers to/from a particular I2C instance * \ingroup hardware_i2c * * \param i2c Either \ref i2c0 or \ref i2c1 * \param is_tx true for sending data to the I2C instance, false for receiving data from the I2C instance */ static inline uint i2c_get_dreq(i2c_inst_t *i2c, bool is_tx) { static_assert(DREQ_I2C0_RX == DREQ_I2C0_TX + 1, ""); static_assert(DREQ_I2C1_RX == DREQ_I2C1_TX + 1, ""); static_assert(DREQ_I2C1_TX == DREQ_I2C0_TX + 2, ""); return DREQ_I2C0_TX + i2c_hw_index(i2c) * 2 + !is_tx; } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_interp/CMakeLists.txt ================================================ pico_simple_hardware_target(interp) ================================================ FILE: pico-sdk/src/rp2_common/hardware_interp/include/hardware/interp.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_INTERP_H #define _HARDWARE_INTERP_H #include "pico.h" #include "hardware/structs/interp.h" #include "hardware/regs/sio.h" // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_INTERP, Enable/disable assertions in the interpolation module, type=bool, default=0, group=hardware_interp #ifndef PARAM_ASSERTIONS_ENABLED_INTERP #define PARAM_ASSERTIONS_ENABLED_INTERP 0 #endif #ifdef __cplusplus extern "C" { #endif /** \file hardware/interp.h * \defgroup hardware_interp hardware_interp * * Hardware Interpolator API * * Each core is equipped with two interpolators (INTERP0 and INTERP1) which can be used to accelerate * tasks by combining certain pre-configured simple operations into a single processor cycle. Intended * for cases where the pre-configured operation is repeated a large number of times, this results in * code which uses both fewer CPU cycles and fewer CPU registers in the time critical sections of the * code. * * The interpolators are used heavily to accelerate audio operations within the SDK, but their * flexible configuration make it possible to optimise many other tasks such as quantization and * dithering, table lookup address generation, affine texture mapping, decompression and linear feedback. * * Please refer to the RP2040 datasheet for more information on the HW interpolators and how they work. */ #define interp0 interp0_hw #define interp1 interp1_hw /** \brief Interpolator configuration * \defgroup interp_config interp_config * \ingroup hardware_interp * * Each interpolator needs to be configured, these functions provide handy helpers to set up configuration * structures. * */ typedef struct { uint32_t ctrl; } interp_config; static inline uint interp_index(interp_hw_t *interp) { valid_params_if(INTERP, interp == interp0 || interp == interp1); return interp == interp1 ? 1 : 0; } /*! \brief Claim the interpolator lane specified * \ingroup hardware_interp * * Use this function to claim exclusive access to the specified interpolator lane. * * This function will panic if the lane is already claimed. * * \param interp Interpolator on which to claim a lane. interp0 or interp1 * \param lane The lane number, 0 or 1. */ void interp_claim_lane(interp_hw_t *interp, uint lane); // The above really should be called this for consistency #define interp_lane_claim interp_claim_lane /*! \brief Claim the interpolator lanes specified in the mask * \ingroup hardware_interp * * \param interp Interpolator on which to claim lanes. interp0 or interp1 * \param lane_mask Bit pattern of lanes to claim (only bits 0 and 1 are valid) */ void interp_claim_lane_mask(interp_hw_t *interp, uint lane_mask); /*! \brief Release a previously claimed interpolator lane * \ingroup hardware_interp * * \param interp Interpolator on which to release a lane. interp0 or interp1 * \param lane The lane number, 0 or 1 */ void interp_unclaim_lane(interp_hw_t *interp, uint lane); // The above really should be called this for consistency #define interp_lane_unclaim interp_unclaim_lane /*! \brief Determine if an interpolator lane is claimed * \ingroup hardware_interp * * \param interp Interpolator whose lane to check * \param lane The lane number, 0 or 1 * \return true if claimed, false otherwise * \see interp_claim_lane * \see interp_claim_lane_mask */ bool interp_lane_is_claimed(interp_hw_t *interp, uint lane); /*! \brief Release previously claimed interpolator lanes \see interp_claim_lane_mask * \ingroup hardware_interp * * \param interp Interpolator on which to release lanes. interp0 or interp1 * \param lane_mask Bit pattern of lanes to unclaim (only bits 0 and 1 are valid) */ void interp_unclaim_lane_mask(interp_hw_t *interp, uint lane_mask); /*! \brief Set the interpolator shift value * \ingroup interp_config * * Sets the number of bits the accumulator is shifted before masking, on each iteration. * * \param c Pointer to an interpolator config * \param shift Number of bits */ static inline void interp_config_set_shift(interp_config *c, uint shift) { valid_params_if(INTERP, shift < 32); c->ctrl = (c->ctrl & ~SIO_INTERP0_CTRL_LANE0_SHIFT_BITS) | ((shift << SIO_INTERP0_CTRL_LANE0_SHIFT_LSB) & SIO_INTERP0_CTRL_LANE0_SHIFT_BITS); } /*! \brief Set the interpolator mask range * \ingroup interp_config * * Sets the range of bits (least to most) that are allowed to pass through the interpolator * * \param c Pointer to interpolation config * \param mask_lsb The least significant bit allowed to pass * \param mask_msb The most significant bit allowed to pass */ static inline void interp_config_set_mask(interp_config *c, uint mask_lsb, uint mask_msb) { valid_params_if(INTERP, mask_msb < 32); valid_params_if(INTERP, mask_lsb <= mask_msb); c->ctrl = (c->ctrl & ~(SIO_INTERP0_CTRL_LANE0_MASK_LSB_BITS | SIO_INTERP0_CTRL_LANE0_MASK_MSB_BITS)) | ((mask_lsb << SIO_INTERP0_CTRL_LANE0_MASK_LSB_LSB) & SIO_INTERP0_CTRL_LANE0_MASK_LSB_BITS) | ((mask_msb << SIO_INTERP0_CTRL_LANE0_MASK_MSB_LSB) & SIO_INTERP0_CTRL_LANE0_MASK_MSB_BITS); } /*! \brief Enable cross input * \ingroup interp_config * * Allows feeding of the accumulator content from the other lane back in to this lanes shift+mask hardware. * This will take effect even if the interp_config_set_add_raw option is set as the cross input mux is before the * shift+mask bypass * * \param c Pointer to interpolation config * \param cross_input If true, enable the cross input. */ static inline void interp_config_set_cross_input(interp_config *c, bool cross_input) { c->ctrl = (c->ctrl & ~SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_BITS) | (cross_input ? SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_BITS : 0); } /*! \brief Enable cross results * \ingroup interp_config * * Allows feeding of the other lane’s result into this lane’s accumulator on a POP operation. * * \param c Pointer to interpolation config * \param cross_result If true, enables the cross result */ static inline void interp_config_set_cross_result(interp_config *c, bool cross_result) { c->ctrl = (c->ctrl & ~SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_BITS) | (cross_result ? SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_BITS : 0); } /*! \brief Set sign extension * \ingroup interp_config * * Enables signed mode, where the shifted and masked accumulator value is sign-extended to 32 bits * before adding to BASE1, and LANE1 PEEK/POP results appear extended to 32 bits when read by processor. * * \param c Pointer to interpolation config * \param _signed If true, enables sign extension */ static inline void interp_config_set_signed(interp_config *c, bool _signed) { c->ctrl = (c->ctrl & ~SIO_INTERP0_CTRL_LANE0_SIGNED_BITS) | (_signed ? SIO_INTERP0_CTRL_LANE0_SIGNED_BITS : 0); } /*! \brief Set raw add option * \ingroup interp_config * * When enabled, mask + shift is bypassed for LANE0 result. This does not affect the FULL result. * * \param c Pointer to interpolation config * \param add_raw If true, enable raw add option. */ static inline void interp_config_set_add_raw(interp_config *c, bool add_raw) { c->ctrl = (c->ctrl & ~SIO_INTERP0_CTRL_LANE0_ADD_RAW_BITS) | (add_raw ? SIO_INTERP0_CTRL_LANE0_ADD_RAW_BITS : 0); } /*! \brief Set blend mode * \ingroup interp_config * * If enabled, LANE1 result is a linear interpolation between BASE0 and BASE1, controlled * by the 8 LSBs of lane 1 shift and mask value (a fractional number between 0 and 255/256ths) * * LANE0 result does not have BASE0 added (yields only the 8 LSBs of lane 1 shift+mask value) * * FULL result does not have lane 1 shift+mask value added (BASE2 + lane 0 shift+mask) * * LANE1 SIGNED flag controls whether the interpolation is signed or unsig * * \param c Pointer to interpolation config * \param blend Set true to enable blend mode. */ static inline void interp_config_set_blend(interp_config *c, bool blend) { c->ctrl = (c->ctrl & ~SIO_INTERP0_CTRL_LANE0_BLEND_BITS) | (blend ? SIO_INTERP0_CTRL_LANE0_BLEND_BITS : 0); } /*! \brief Set interpolator clamp mode (Interpolator 1 only) * \ingroup interp_config * * Only present on INTERP1 on each core. If CLAMP mode is enabled: * - LANE0 result is a shifted and masked ACCUM0, clamped by a lower bound of BASE0 and an upper bound of BASE1. * - Signedness of these comparisons is determined by LANE0_CTRL_SIGNED * * \param c Pointer to interpolation config * \param clamp Set true to enable clamp mode */ static inline void interp_config_set_clamp(interp_config *c, bool clamp) { c->ctrl = (c->ctrl & ~SIO_INTERP1_CTRL_LANE0_CLAMP_BITS) | (clamp ? SIO_INTERP1_CTRL_LANE0_CLAMP_BITS : 0); } /*! \brief Set interpolator Force bits * \ingroup interp_config * * ORed into bits 29:28 of the lane result presented to the processor on the bus. * * No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence * of pointers into flash or SRAM * * \param c Pointer to interpolation config * \param bits Sets the force bits to that specified. Range 0-3 (two bits) */ static inline void interp_config_set_force_bits(interp_config *c, uint bits) { invalid_params_if(INTERP, bits > 3); // note cannot use hw_set_bits on SIO c->ctrl = (c->ctrl & ~SIO_INTERP0_CTRL_LANE0_FORCE_MSB_BITS) | (bits << SIO_INTERP0_CTRL_LANE0_FORCE_MSB_LSB); } /*! \brief Get a default configuration * \ingroup interp_config * * \return A default interpolation configuration */ static inline interp_config interp_default_config(void) { interp_config c = {0}; // Just pass through everything interp_config_set_mask(&c, 0, 31); return c; } /*! \brief Send configuration to a lane * \ingroup interp_config * * If an invalid configuration is specified (ie a lane specific item is set on wrong lane), * depending on setup this function can panic. * * \param interp Interpolator instance, interp0 or interp1. * \param lane The lane to set * \param config Pointer to interpolation config */ static inline void interp_set_config(interp_hw_t *interp, uint lane, interp_config *config) { invalid_params_if(INTERP, lane > 1); invalid_params_if(INTERP, config->ctrl & SIO_INTERP1_CTRL_LANE0_CLAMP_BITS && (!interp_index(interp) || lane)); // only interp1 lane 0 has clamp bit invalid_params_if(INTERP, config->ctrl & SIO_INTERP0_CTRL_LANE0_BLEND_BITS && (interp_index(interp) || lane)); // only interp0 lane 0 has blend bit interp->ctrl[lane] = config->ctrl; } /*! \brief Directly set the force bits on a specified lane * \ingroup hardware_interp * * These bits are ORed into bits 29:28 of the lane result presented to the processor on the bus. * There is no effect on the internal 32-bit datapath. * * Useful for using a lane to generate sequence of pointers into flash or SRAM, saving a subsequent * OR or add operation. * * \param interp Interpolator instance, interp0 or interp1. * \param lane The lane to set * \param bits The bits to set (bits 0 and 1, value range 0-3) */ static inline void interp_set_force_bits(interp_hw_t *interp, uint lane, uint bits) { // note cannot use hw_set_bits on SIO interp->ctrl[lane] = interp->ctrl[lane] | (bits << SIO_INTERP0_CTRL_LANE0_FORCE_MSB_LSB); } typedef struct { uint32_t accum[2]; uint32_t base[3]; uint32_t ctrl[2]; } interp_hw_save_t; /*! \brief Save the specified interpolator state * \ingroup hardware_interp * * Can be used to save state if you need an interpolator for another purpose, state * can then be recovered afterwards and continue from that point * * \param interp Interpolator instance, interp0 or interp1. * \param saver Pointer to the save structure to fill in */ void interp_save(interp_hw_t *interp, interp_hw_save_t *saver); /*! \brief Restore an interpolator state * \ingroup hardware_interp * * \param interp Interpolator instance, interp0 or interp1. * \param saver Pointer to save structure to reapply to the specified interpolator */ void interp_restore(interp_hw_t *interp, interp_hw_save_t *saver); /*! \brief Sets the interpolator base register by lane * \ingroup hardware_interp * * \param interp Interpolator instance, interp0 or interp1. * \param lane The lane number, 0 or 1 or 2 * \param val The value to apply to the register */ static inline void interp_set_base(interp_hw_t *interp, uint lane, uint32_t val) { interp->base[lane] = val; } /*! \brief Gets the content of interpolator base register by lane * \ingroup hardware_interp * * \param interp Interpolator instance, interp0 or interp1. * \param lane The lane number, 0 or 1 or 2 * \return The current content of the lane base register */ static inline uint32_t interp_get_base(interp_hw_t *interp, uint lane) { return interp->base[lane]; } /*! \brief Sets the interpolator base registers simultaneously * \ingroup hardware_interp * * The lower 16 bits go to BASE0, upper bits to BASE1 simultaneously. * Each half is sign-extended to 32 bits if that lane’s SIGNED flag is set. * * \param interp Interpolator instance, interp0 or interp1. * \param val The value to apply to the register */ static inline void interp_set_base_both(interp_hw_t *interp, uint32_t val) { interp->base01 = val; } /*! \brief Sets the interpolator accumulator register by lane * \ingroup hardware_interp * * \param interp Interpolator instance, interp0 or interp1. * \param lane The lane number, 0 or 1 * \param val The value to apply to the register */ static inline void interp_set_accumulator(interp_hw_t *interp, uint lane, uint32_t val) { interp->accum[lane] = val; } /*! \brief Gets the content of the interpolator accumulator register by lane * \ingroup hardware_interp * * \param interp Interpolator instance, interp0 or interp1. * \param lane The lane number, 0 or 1 * \return The current content of the register */ static inline uint32_t interp_get_accumulator(interp_hw_t *interp, uint lane) { return interp->accum[lane]; } /*! \brief Read lane result, and write lane results to both accumulators to update the interpolator * \ingroup hardware_interp * * \param interp Interpolator instance, interp0 or interp1. * \param lane The lane number, 0 or 1 * \return The content of the lane result register */ static inline uint32_t interp_pop_lane_result(interp_hw_t *interp, uint lane) { return interp->pop[lane]; } /*! \brief Read lane result * \ingroup hardware_interp * * \param interp Interpolator instance, interp0 or interp1. * \param lane The lane number, 0 or 1 * \return The content of the lane result register */ static inline uint32_t interp_peek_lane_result(interp_hw_t *interp, uint lane) { return interp->peek[lane]; } /*! \brief Read lane result, and write lane results to both accumulators to update the interpolator * \ingroup hardware_interp * * \param interp Interpolator instance, interp0 or interp1. * \return The content of the FULL register */ static inline uint32_t interp_pop_full_result(interp_hw_t *interp) { return interp->pop[2]; } /*! \brief Read lane result * \ingroup hardware_interp * * \param interp Interpolator instance, interp0 or interp1. * \return The content of the FULL register */ static inline uint32_t interp_peek_full_result(interp_hw_t *interp) { return interp->peek[2]; } /*! \brief Add to accumulator * \ingroup hardware_interp * * Atomically add the specified value to the accumulator on the specified lane * * \param interp Interpolator instance, interp0 or interp1. * \param lane The lane number, 0 or 1 * \param val Value to add */ static inline void interp_add_accumulater(interp_hw_t *interp, uint lane, uint32_t val) { interp->add_raw[lane] = val; } /*! \brief Get raw lane value * \ingroup hardware_interp * * Returns the raw shift and mask value from the specified lane, BASE0 is NOT added * * \param interp Interpolator instance, interp0 or interp1. * \param lane The lane number, 0 or 1 * \return The raw shift/mask value */ static inline uint32_t interp_get_raw(interp_hw_t *interp, uint lane) { return interp->add_raw[lane]; } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_interp/interp.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/interp.h" #include "hardware/structs/sio.h" #include "hardware/claim.h" check_hw_size(interp_hw_t, SIO_INTERP1_ACCUM0_OFFSET - SIO_INTERP0_ACCUM0_OFFSET); check_hw_layout(sio_hw_t, interp, SIO_INTERP0_ACCUM0_OFFSET); static_assert(NUM_DMA_CHANNELS <= 16, ""); static uint8_t _claimed; static inline uint interp_lane_bit(interp_hw_t * interp, uint lane) { return (interp_index(interp) << 1u) | lane; } void interp_claim_lane(interp_hw_t *interp, uint lane) { valid_params_if(INTERP, lane < 2); hw_claim_or_assert((uint8_t *) &_claimed, interp_lane_bit(interp, lane), "Lane is already claimed"); } void interp_claim_lane_mask(interp_hw_t *interp, uint lane_mask) { valid_params_if(INTERP, lane_mask && lane_mask <= 0x3); if (lane_mask & 1u) interp_claim_lane(interp, 0); if (lane_mask & 2u) interp_claim_lane(interp, 1); } void interp_unclaim_lane(interp_hw_t *interp, uint lane) { valid_params_if(INTERP, lane < 2); hw_claim_clear((uint8_t *) &_claimed, interp_lane_bit(interp, lane)); } bool interp_lane_is_claimed(interp_hw_t *interp, uint lane) { valid_params_if(INTERP, lane < 2); return hw_is_claimed((uint8_t *) &_claimed, interp_lane_bit(interp, lane)); } void interp_unclaim_lane_mask(interp_hw_t *interp, uint lane_mask) { valid_params_if(INTERP, lane_mask <= 0x3); if (lane_mask & 1u) interp_unclaim_lane(interp, 0); if (lane_mask & 2u) interp_unclaim_lane(interp, 1); } void interp_save(interp_hw_t *interp, interp_hw_save_t *saver) { saver->accum[0] = interp->accum[0]; saver->accum[1] = interp->accum[1]; saver->base[0] = interp->base[0]; saver->base[1] = interp->base[1]; saver->base[2] = interp->base[2]; saver->ctrl[0] = interp->ctrl[0]; saver->ctrl[1] = interp->ctrl[1]; } void interp_restore(interp_hw_t *interp, interp_hw_save_t *saver) { interp->accum[0] = saver->accum[0]; interp->accum[1] = saver->accum[1]; interp->base[0] = saver->base[0]; interp->base[1] = saver->base[1]; interp->base[2] = saver->base[2]; interp->ctrl[0] = saver->ctrl[0]; interp->ctrl[1] = saver->ctrl[1]; } ================================================ FILE: pico-sdk/src/rp2_common/hardware_irq/CMakeLists.txt ================================================ pico_simple_hardware_target(irq) # additional sources/libraries target_sources(hardware_irq INTERFACE ${CMAKE_CURRENT_LIST_DIR}/irq_handler_chain.S) pico_mirrored_target_link_libraries(hardware_irq INTERFACE pico_sync) ================================================ FILE: pico-sdk/src/rp2_common/hardware_irq/include/hardware/irq.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_IRQ_H #define _HARDWARE_IRQ_H // These two config items are also used by assembler, so keeping separate // PICO_CONFIG: PICO_MAX_SHARED_IRQ_HANDLERS, Maximum number of shared IRQ handlers, default=4, advanced=true, group=hardware_irq #ifndef PICO_MAX_SHARED_IRQ_HANDLERS #define PICO_MAX_SHARED_IRQ_HANDLERS 4 #endif // PICO_CONFIG: PICO_DISABLE_SHARED_IRQ_HANDLERS, Disable shared IRQ handlers, type=bool, default=0, group=hardware_irq #ifndef PICO_DISABLE_SHARED_IRQ_HANDLERS #define PICO_DISABLE_SHARED_IRQ_HANDLERS 0 #endif // PICO_CONFIG: PICO_VTABLE_PER_CORE, user is using separate vector tables per core, type=bool, default=0, group=hardware_irq #ifndef PICO_VTABLE_PER_CORE #define PICO_VTABLE_PER_CORE 0 #endif #ifndef __ASSEMBLER__ #include "pico.h" #include "hardware/address_mapped.h" #include "hardware/regs/intctrl.h" #include "hardware/regs/m0plus.h" /** \file irq.h * \defgroup hardware_irq hardware_irq * * Hardware interrupt handling * * The RP2040 uses the standard ARM nested vectored interrupt controller (NVIC). * * Interrupts are identified by a number from 0 to 31. * * On the RP2040, only the lower 26 IRQ signals are connected on the NVIC; IRQs 26 to 31 are tied to zero (never firing). * * There is one NVIC per core, and each core's NVIC has the same hardware interrupt lines routed to it, with the exception of the IO interrupts * where there is one IO interrupt per bank, per core. These are completely independent, so, for example, processor 0 can be * interrupted by GPIO 0 in bank 0, and processor 1 by GPIO 1 in the same bank. * * \note That all IRQ APIs affect the executing core only (i.e. the core calling the function). * * \note You should not enable the same (shared) IRQ number on both cores, as this will lead to race conditions * or starvation of one of the cores. Additionally, don't forget that disabling interrupts on one core does not disable interrupts * on the other core. * * There are three different ways to set handlers for an IRQ: * - Calling irq_add_shared_handler() at runtime to add a handler for a multiplexed interrupt (e.g. GPIO bank) on the current core. Each handler, should check and clear the relevant hardware interrupt source * - Calling irq_set_exclusive_handler() at runtime to install a single handler for the interrupt on the current core * - Defining the interrupt handler explicitly in your application (e.g. by defining void `isr_dma_0` will make that function the handler for the DMA_IRQ_0 on core 0, and * you will not be able to change it using the above APIs at runtime). Using this method can cause link conflicts at runtime, and offers no runtime performance benefit (i.e, it should not generally be used). * * \note If an IRQ is enabled and fires with no handler installed, a breakpoint will be hit and the IRQ number will * be in register r0. * * \section interrupt_nums Interrupt Numbers * * Interrupts are numbered as follows, a set of defines is available (intctrl.h) with these names to avoid using the numbers directly. * * IRQ | Interrupt Source * ----|----------------- * 0 | TIMER_IRQ_0 * 1 | TIMER_IRQ_1 * 2 | TIMER_IRQ_2 * 3 | TIMER_IRQ_3 * 4 | PWM_IRQ_WRAP * 5 | USBCTRL_IRQ * 6 | XIP_IRQ * 7 | PIO0_IRQ_0 * 8 | PIO0_IRQ_1 * 9 | PIO1_IRQ_0 * 10 | PIO1_IRQ_1 * 11 | DMA_IRQ_0 * 12 | DMA_IRQ_1 * 13 | IO_IRQ_BANK0 * 14 | IO_IRQ_QSPI * 15 | SIO_IRQ_PROC0 * 16 | SIO_IRQ_PROC1 * 17 | CLOCKS_IRQ * 18 | SPI0_IRQ * 19 | SPI1_IRQ * 20 | UART0_IRQ * 21 | UART1_IRQ * 22 | ADC0_IRQ_FIFO * 23 | I2C0_IRQ * 24 | I2C1_IRQ * 25 | RTC_IRQ * */ // PICO_CONFIG: PICO_DEFAULT_IRQ_PRIORITY, Define the default IRQ priority, default=0x80, group=hardware_irq #ifndef PICO_DEFAULT_IRQ_PRIORITY #define PICO_DEFAULT_IRQ_PRIORITY 0x80 #endif #define PICO_LOWEST_IRQ_PRIORITY 0xff #define PICO_HIGHEST_IRQ_PRIORITY 0x00 // PICO_CONFIG: PICO_SHARED_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY, Set default shared IRQ order priority, default=0x80, group=hardware_irq #ifndef PICO_SHARED_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY #define PICO_SHARED_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY 0x80 #endif #define PICO_SHARED_IRQ_HANDLER_HIGHEST_ORDER_PRIORITY 0xff #define PICO_SHARED_IRQ_HANDLER_LOWEST_ORDER_PRIORITY 0x00 // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_IRQ, Enable/disable assertions in the IRQ module, type=bool, default=0, group=hardware_irq #ifndef PARAM_ASSERTIONS_ENABLED_IRQ #define PARAM_ASSERTIONS_ENABLED_IRQ 0 #endif #ifdef __cplusplus extern "C" { #endif /*! \brief Interrupt handler function type * \ingroup hardware_irq * * All interrupts handlers should be of this type, and follow normal ARM EABI register saving conventions */ typedef void (*irq_handler_t)(void); static inline void check_irq_param(__unused uint num) { invalid_params_if(IRQ, num >= NUM_IRQS); } /*! \brief Set specified interrupt's priority * \ingroup hardware_irq * * \param num Interrupt number \ref interrupt_nums * \param hardware_priority Priority to set. * Numerically-lower values indicate a higher priority. Hardware priorities * range from 0 (highest priority) to 255 (lowest priority) though only the * top 2 bits are significant on ARM Cortex-M0+. To make it easier to specify * higher or lower priorities than the default, all IRQ priorities are * initialized to PICO_DEFAULT_IRQ_PRIORITY by the SDK runtime at startup. * PICO_DEFAULT_IRQ_PRIORITY defaults to 0x80 */ void irq_set_priority(uint num, uint8_t hardware_priority); /*! \brief Get specified interrupt's priority * \ingroup hardware_irq * * Numerically-lower values indicate a higher priority. Hardware priorities * range from 0 (highest priority) to 255 (lowest priority) though only the * top 2 bits are significant on ARM Cortex-M0+. To make it easier to specify * higher or lower priorities than the default, all IRQ priorities are * initialized to PICO_DEFAULT_IRQ_PRIORITY by the SDK runtime at startup. * PICO_DEFAULT_IRQ_PRIORITY defaults to 0x80 * * \param num Interrupt number \ref interrupt_nums * \return the IRQ priority */ uint irq_get_priority(uint num); /*! \brief Enable or disable a specific interrupt on the executing core * \ingroup hardware_irq * * \param num Interrupt number \ref interrupt_nums * \param enabled true to enable the interrupt, false to disable */ void irq_set_enabled(uint num, bool enabled); /*! \brief Determine if a specific interrupt is enabled on the executing core * \ingroup hardware_irq * * \param num Interrupt number \ref interrupt_nums * \return true if the interrupt is enabled */ bool irq_is_enabled(uint num); /*! \brief Enable/disable multiple interrupts on the executing core * \ingroup hardware_irq * * \param mask 32-bit mask with one bits set for the interrupts to enable/disable \ref interrupt_nums * \param enabled true to enable the interrupts, false to disable them. */ void irq_set_mask_enabled(uint32_t mask, bool enabled); /*! \brief Set an exclusive interrupt handler for an interrupt on the executing core. * \ingroup hardware_irq * * Use this method to set a handler for single IRQ source interrupts, or when * your code, use case or performance requirements dictate that there should * no other handlers for the interrupt. * * This method will assert if there is already any sort of interrupt handler installed * for the specified irq number. * * \param num Interrupt number \ref interrupt_nums * \param handler The handler to set. See \ref irq_handler_t * \see irq_add_shared_handler() */ void irq_set_exclusive_handler(uint num, irq_handler_t handler); /*! \brief Get the exclusive interrupt handler for an interrupt on the executing core. * \ingroup hardware_irq * * This method will return an exclusive IRQ handler set on this core * by irq_set_exclusive_handler if there is one. * * \param num Interrupt number \ref interrupt_nums * \see irq_set_exclusive_handler() * \return handler The handler if an exclusive handler is set for the IRQ, * NULL if no handler is set or shared/shareable handlers are installed */ irq_handler_t irq_get_exclusive_handler(uint num); /*! \brief Add a shared interrupt handler for an interrupt on the executing core * \ingroup hardware_irq * * Use this method to add a handler on an irq number shared between multiple distinct hardware sources (e.g. GPIO, DMA or PIO IRQs). * Handlers added by this method will all be called in sequence from highest order_priority to lowest. The * irq_set_exclusive_handler() method should be used instead if you know there will or should only ever be one handler for the interrupt. * * This method will assert if there is an exclusive interrupt handler set for this irq number on this core, or if * the (total across all IRQs on both cores) maximum (configurable via PICO_MAX_SHARED_IRQ_HANDLERS) number of shared handlers * would be exceeded. * * \param num Interrupt number \ref interrupt_nums * \param handler The handler to set. See \ref irq_handler_t * \param order_priority The order priority controls the order that handlers for the same IRQ number on the core are called. * The shared irq handlers for an interrupt are all called when an IRQ fires, however the order of the calls is based * on the order_priority (higher priorities are called first, identical priorities are called in undefined order). A good * rule of thumb is to use PICO_SHARED_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY if you don't much care, as it is in the middle of * the priority range by default. * * \note The order_priority uses \em higher values for higher priorities which is the \em opposite of the CPU interrupt priorities passed * to irq_set_priority() which use lower values for higher priorities. * * \see irq_set_exclusive_handler() */ void irq_add_shared_handler(uint num, irq_handler_t handler, uint8_t order_priority); /*! \brief Remove a specific interrupt handler for the given irq number on the executing core * \ingroup hardware_irq * * This method may be used to remove an irq set via either irq_set_exclusive_handler() or * irq_add_shared_handler(), and will assert if the handler is not currently installed for the given * IRQ number * * \note This method may *only* be called from user (non IRQ code) or from within the handler * itself (i.e. an IRQ handler may remove itself as part of handling the IRQ). Attempts to call * from another IRQ will cause an assertion. * * \param num Interrupt number \ref interrupt_nums * \param handler The handler to removed. * \see irq_set_exclusive_handler() * \see irq_add_shared_handler() */ void irq_remove_handler(uint num, irq_handler_t handler); /*! \brief Determine if the current handler for the given number is shared * \ingroup hardware_irq * * \param num Interrupt number \ref interrupt_nums * \return true if the specified IRQ has a shared handler */ bool irq_has_shared_handler(uint num); /*! \brief Get the current IRQ handler for the specified IRQ from the currently installed hardware vector table (VTOR) * of the execution core * \ingroup hardware_irq * * \param num Interrupt number \ref interrupt_nums * \return the address stored in the VTABLE for the given irq number */ irq_handler_t irq_get_vtable_handler(uint num); /*! \brief Clear a specific interrupt on the executing core * \ingroup hardware_irq * * This method is only useful for "software" IRQs that are not connected to hardware (i.e. IRQs 26-31) * as the the NVIC always reflects the current state of the IRQ state of the hardware for hardware IRQs, and clearing * of the IRQ state of the hardware is performed via the hardware's registers instead. * * \param int_num Interrupt number \ref interrupt_nums */ static inline void irq_clear(uint int_num) { *((volatile uint32_t *) (PPB_BASE + M0PLUS_NVIC_ICPR_OFFSET)) = (1u << ((uint32_t) (int_num & 0x1F))); } /*! \brief Force an interrupt to be pending on the executing core * \ingroup hardware_irq * * This should generally not be used for IRQs connected to hardware. * * \param num Interrupt number \ref interrupt_nums */ void irq_set_pending(uint num); /*! \brief Perform IRQ priority initialization for the current core * * \note This is an internal method and user should generally not call it. */ void irq_init_priorities(void); /*! \brief Claim ownership of a user IRQ on the calling core * \ingroup hardware_irq * * User IRQs are numbered 26-31 and are not connected to any hardware, but can be triggered by \ref irq_set_pending. * * \note User IRQs are a core local feature; they cannot be used to communicate between cores. Therfore all functions * dealing with Uer IRQs affect only the calling core * * This method explicitly claims ownership of a user IRQ, so other code can know it is being used. * * \param irq_num the user IRQ to claim */ void user_irq_claim(uint irq_num); /*! \brief Mark a user IRQ as no longer used on the calling core * \ingroup hardware_irq * * User IRQs are numbered 26-31 and are not connected to any hardware, but can be triggered by \ref irq_set_pending. * * \note User IRQs are a core local feature; they cannot be used to communicate between cores. Therfore all functions * dealing with Uer IRQs affect only the calling core * * This method explicitly releases ownership of a user IRQ, so other code can know it is free to use. * * \note it is customary to have disabled the irq and removed the handler prior to calling this method. * * \param irq_num the irq irq_num to unclaim */ void user_irq_unclaim(uint irq_num); /*! \brief Claim ownership of a free user IRQ on the calling core * \ingroup hardware_irq * * User IRQs are numbered 26-31 and are not connected to any hardware, but can be triggered by \ref irq_set_pending. * * \note User IRQs are a core local feature; they cannot be used to communicate between cores. Therfore all functions * dealing with Uer IRQs affect only the calling core * * This method explicitly claims ownership of an unused user IRQ if there is one, so other code can know it is being used. * * \param required if true the function will panic if none are available * \return the user IRQ number or -1 if required was false, and none were free */ int user_irq_claim_unused(bool required); /* *! \brief Check if a user IRQ is in use on the calling core * \ingroup hardware_irq * * User IRQs are numbered 26-31 and are not connected to any hardware, but can be triggered by \ref irq_set_pending. * * \note User IRQs are a core local feature; they cannot be used to communicate between cores. Therfore all functions * dealing with Uer IRQs affect only the calling core * * \param irq_num the irq irq_num * \return true if the irq_num is claimed, false otherwise * \sa user_irq_claim * \sa user_irq_unclaim * \sa user_irq_claim_unused */ bool user_irq_is_claimed(uint irq_num); #ifdef __cplusplus } #endif #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_irq/irq.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/irq.h" #include "hardware/regs/m0plus.h" #include "hardware/platform_defs.h" #include "hardware/structs/scb.h" #include "hardware/claim.h" #include "pico/mutex.h" #include "pico/assert.h" extern void __unhandled_user_irq(void); #if PICO_VTABLE_PER_CORE static uint8_t user_irq_claimed[NUM_CORES]; static inline uint8_t *user_irq_claimed_ptr(void) { return &user_irq_claimed[get_core_num()]; } #else static uint8_t user_irq_claimed; static inline uint8_t *user_irq_claimed_ptr(void) { return &user_irq_claimed; } #endif static inline irq_handler_t *get_vtable(void) { return (irq_handler_t *) scb_hw->vtor; } static inline void *add_thumb_bit(void *addr) { return (void *) (((uintptr_t) addr) | 0x1); } static inline void *remove_thumb_bit(void *addr) { return (void *) (((uintptr_t) addr) & (uint)~0x1); } static void set_raw_irq_handler_and_unlock(uint num, irq_handler_t handler, uint32_t save) { // update vtable (vtable_handler may be same or updated depending on cases, but we do it anyway for compactness) get_vtable()[VTABLE_FIRST_IRQ + num] = handler; __dmb(); spin_unlock(spin_lock_instance(PICO_SPINLOCK_ID_IRQ), save); } void irq_set_enabled(uint num, bool enabled) { check_irq_param(num); irq_set_mask_enabled(1u << num, enabled); } bool irq_is_enabled(uint num) { check_irq_param(num); return 0 != ((1u << num) & *((io_rw_32 *) (PPB_BASE + M0PLUS_NVIC_ISER_OFFSET))); } void irq_set_mask_enabled(uint32_t mask, bool enabled) { if (enabled) { // Clear pending before enable // (if IRQ is actually asserted, it will immediately re-pend) *((io_rw_32 *) (PPB_BASE + M0PLUS_NVIC_ICPR_OFFSET)) = mask; *((io_rw_32 *) (PPB_BASE + M0PLUS_NVIC_ISER_OFFSET)) = mask; } else { *((io_rw_32 *) (PPB_BASE + M0PLUS_NVIC_ICER_OFFSET)) = mask; } } void irq_set_pending(uint num) { check_irq_param(num); *((io_rw_32 *) (PPB_BASE + M0PLUS_NVIC_ISPR_OFFSET)) = 1u << num; } #if !PICO_DISABLE_SHARED_IRQ_HANDLERS // limited by 8 bit relative links (and reality) static_assert(PICO_MAX_SHARED_IRQ_HANDLERS >= 1 && PICO_MAX_SHARED_IRQ_HANDLERS < 0x7f, ""); // note these are not real functions, they are code fragments (i.e. don't call them) extern void irq_handler_chain_first_slot(void); extern void irq_handler_chain_remove_tail(void); extern struct irq_handler_chain_slot { // first 3 half words are executable code (raw vtable handler points to one slot, and inst3 will jump to next // in chain (or end of chain handler) uint16_t inst1; uint16_t inst2; uint16_t inst3; union { // when a handler is removed while executing, it needs an extra instruction, which overwrites // the link and the priority; this is ok because no one else is modifying the chain, as // the chain is effectively core local, and the user code which might still need this link // disable the IRQ in question before updating, which means we aren't executing! struct { int8_t link; uint8_t priority; }; uint16_t inst4; }; irq_handler_t handler; } irq_handler_chain_slots[PICO_MAX_SHARED_IRQ_HANDLERS]; static int8_t irq_hander_chain_free_slot_head; static inline bool is_shared_irq_raw_handler(irq_handler_t raw_handler) { return (uintptr_t)raw_handler - (uintptr_t)irq_handler_chain_slots < sizeof(irq_handler_chain_slots); } bool irq_has_shared_handler(uint irq_num) { check_irq_param(irq_num); irq_handler_t handler = irq_get_vtable_handler(irq_num); return handler && is_shared_irq_raw_handler(handler); } #else #define is_shared_irq_raw_handler(h) false bool irq_has_shared_handler(uint irq_num) { return false; } #endif irq_handler_t irq_get_vtable_handler(uint num) { check_irq_param(num); return get_vtable()[16 + num]; } void irq_set_exclusive_handler(uint num, irq_handler_t handler) { check_irq_param(num); #if !PICO_NO_RAM_VECTOR_TABLE spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_IRQ); uint32_t save = spin_lock_blocking(lock); __unused irq_handler_t current = irq_get_vtable_handler(num); hard_assert(current == __unhandled_user_irq || current == handler); set_raw_irq_handler_and_unlock(num, handler, save); #else panic_unsupported(); #endif } irq_handler_t irq_get_exclusive_handler(uint num) { check_irq_param(num); #if !PICO_NO_RAM_VECTOR_TABLE spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_IRQ); uint32_t save = spin_lock_blocking(lock); irq_handler_t current = irq_get_vtable_handler(num); spin_unlock(lock, save); if (current == __unhandled_user_irq || is_shared_irq_raw_handler(current)) { return NULL; } return current; #else panic_unsupported(); #endif } #if !PICO_DISABLE_SHARED_IRQ_HANDLERS static uint16_t make_branch(uint16_t *from, void *to) { uint32_t ui_from = (uint32_t)from; uint32_t ui_to = (uint32_t)to; int32_t delta = (int32_t)(ui_to - ui_from - 4); assert(delta >= -2048 && delta <= 2046 && !(delta & 1)); return (uint16_t)(0xe000 | ((delta >> 1) & 0x7ff)); } static void insert_branch_and_link(uint16_t *from, void *to) { uint32_t ui_from = (uint32_t)from; uint32_t ui_to = (uint32_t)to; uint32_t delta = (ui_to - ui_from - 4) / 2; assert(!(delta >> 11u)); from[0] = (uint16_t)(0xf000 | ((delta >> 11u) & 0x7ffu)); from[1] = (uint16_t)(0xf800 | (delta & 0x7ffu)); } static inline void *resolve_branch(uint16_t *inst) { assert(0x1c == (*inst)>>11u); int32_t i_addr = (*inst) << 21u; i_addr /= (int32_t)(1u<<21u); return inst + 2 + i_addr; } // GCC produces horrible code for subtraction of pointers here, and it was bugging me static inline int8_t slot_diff(struct irq_handler_chain_slot *to, struct irq_handler_chain_slot *from) { static_assert(sizeof(struct irq_handler_chain_slot) == 12, ""); int32_t result = 0xaaaa; // return (to - from); // note this implementation has limited range, but is fine for plenty more than -128->127 result pico_default_asm ( "subs %1, %2\n" "adcs %1, %1\n" // * 2 (and + 1 if negative for rounding) "muls %0, %1\n" "lsrs %0, %0, #20\n" : "+l" (result), "+l" (to) : "l" (from) : ); return (int8_t)result; } static inline int8_t get_slot_index(struct irq_handler_chain_slot *slot) { return slot_diff(slot, irq_handler_chain_slots); } #endif void irq_add_shared_handler(uint num, irq_handler_t handler, uint8_t order_priority) { check_irq_param(num); #if PICO_NO_RAM_VECTOR_TABLE panic_unsupported() #elif PICO_DISABLE_SHARED_IRQ_HANDLERS irq_set_exclusive_handler(num, handler); #else spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_IRQ); uint32_t save = spin_lock_blocking(lock); hard_assert(irq_hander_chain_free_slot_head >= 0); // we must have a slot struct irq_handler_chain_slot *slot = &irq_handler_chain_slots[irq_hander_chain_free_slot_head]; int8_t slot_index = irq_hander_chain_free_slot_head; irq_hander_chain_free_slot_head = slot->link; irq_handler_t vtable_handler = get_vtable()[16 + num]; if (!is_shared_irq_raw_handler(vtable_handler)) { // start new chain hard_assert(vtable_handler == __unhandled_user_irq); struct irq_handler_chain_slot slot_data = { .inst1 = 0xa100, // add r1, pc, #0 .inst2 = make_branch(&slot->inst2, (void *) irq_handler_chain_first_slot), // b irq_handler_chain_first_slot .inst3 = 0xbd01, // pop {r0, pc} .link = -1, .priority = order_priority, .handler = handler }; *slot = slot_data; vtable_handler = (irq_handler_t)add_thumb_bit(slot); } else { assert(!((((uintptr_t)vtable_handler) - ((uintptr_t)irq_handler_chain_slots) - 1)%sizeof(struct irq_handler_chain_slot))); struct irq_handler_chain_slot *prev_slot = NULL; struct irq_handler_chain_slot *existing_vtable_slot = remove_thumb_bit((void *) vtable_handler); struct irq_handler_chain_slot *cur_slot = existing_vtable_slot; while (cur_slot->priority > order_priority) { prev_slot = cur_slot; if (cur_slot->link < 0) break; cur_slot = &irq_handler_chain_slots[cur_slot->link]; } if (prev_slot) { // insert into chain struct irq_handler_chain_slot slot_data = { .inst1 = 0x4801, // ldr r0, [pc, #4] .inst2 = 0x4780, // blx r0 .inst3 = prev_slot->link >= 0 ? make_branch(&slot->inst3, resolve_branch(&prev_slot->inst3)) : // b next_slot 0xbd01, // pop {r0, pc} .link = prev_slot->link, .priority = order_priority, .handler = handler }; // update code and data links prev_slot->inst3 = make_branch(&prev_slot->inst3, slot), prev_slot->link = slot_index; *slot = slot_data; } else { // update with new chain head struct irq_handler_chain_slot slot_data = { .inst1 = 0xa100, // add r1, pc, #0 .inst2 = make_branch(&slot->inst2, (void *) irq_handler_chain_first_slot), // b irq_handler_chain_first_slot .inst3 = make_branch(&slot->inst3, existing_vtable_slot), // b existing_slot .link = get_slot_index(existing_vtable_slot), .priority = order_priority, .handler = handler }; *slot = slot_data; // fixup previous head slot existing_vtable_slot->inst1 = 0x4801; // ldr r0, [pc, #4] existing_vtable_slot->inst2 = 0x4780; // blx r0 vtable_handler = (irq_handler_t)add_thumb_bit(slot); } } set_raw_irq_handler_and_unlock(num, vtable_handler, save); #endif } void irq_remove_handler(uint num, irq_handler_t handler) { #if !PICO_NO_RAM_VECTOR_TABLE spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_IRQ); uint32_t save = spin_lock_blocking(lock); irq_handler_t vtable_handler = get_vtable()[16 + num]; if (vtable_handler != __unhandled_user_irq && vtable_handler != handler) { #if !PICO_DISABLE_SHARED_IRQ_HANDLERS if (is_shared_irq_raw_handler(vtable_handler)) { // This is a bit tricky, as an executing IRQ handler doesn't take a lock. // First thing to do is to disable the IRQ in question; that takes care of calls from user code. // Note that a irq handler chain is local to our own core, so we don't need to worry about the other core bool was_enabled = irq_is_enabled(num); irq_set_enabled(num, false); __dmb(); // It is possible we are being called while an IRQ for this chain is already in progress. // The issue we have here is that we must not free a slot that is currently being executed, because // inst3 is still to be executed, and inst3 might get overwritten if the slot is re-used. // By disallowing other exceptions from removing an IRQ handler (which seems fair) // we now only have to worry about removing a slot from a chain that is currently executing. // Note we expect that the slot we are deleting is the one that is executing. // In particular, bad things happen if the caller were to delete the handler in the chain // before it. This is not an allowed use case though, and I can't imagine anyone wanting to in practice. // Sadly this is not something we can detect. uint exception = __get_current_exception(); hard_assert(!exception || exception == num + VTABLE_FIRST_IRQ); struct irq_handler_chain_slot *prev_slot = NULL; struct irq_handler_chain_slot *existing_vtable_slot = remove_thumb_bit((void *) vtable_handler); struct irq_handler_chain_slot *to_free_slot = existing_vtable_slot; while (to_free_slot->handler != handler) { prev_slot = to_free_slot; if (to_free_slot->link < 0) break; to_free_slot = &irq_handler_chain_slots[to_free_slot->link]; } if (to_free_slot->handler == handler) { int8_t next_slot_index = to_free_slot->link; if (next_slot_index >= 0) { // There is another slot in the chain, so copy that over us, so that our inst3 points at something valid // Note this only matters in the exception case anyway, and it that case, we will skip the next handler, // however in that case its IRQ cause should immediately cause re-entry of the IRQ and the only side // effect will be that there was potentially brief out of priority order execution of the handlers struct irq_handler_chain_slot *next_slot = &irq_handler_chain_slots[next_slot_index]; to_free_slot->handler = next_slot->handler; to_free_slot->priority = next_slot->priority; to_free_slot->link = next_slot->link; to_free_slot->inst3 = next_slot->link >= 0 ? make_branch(&to_free_slot->inst3, resolve_branch(&next_slot->inst3)) : // b mext_>slot->next_slot 0xbd01; // pop {r0, pc} // add old next slot back to free list next_slot->link = irq_hander_chain_free_slot_head; irq_hander_chain_free_slot_head = next_slot_index; } else { // Slot being removed is at the end of the chain if (!exception) { // case when we're not in exception, we physically unlink now if (prev_slot) { // chain is not empty prev_slot->link = -1; prev_slot->inst3 = 0xbd01; // pop {r0, pc} } else { // chain is not empty vtable_handler = __unhandled_user_irq; } // add slot back to free list to_free_slot->link = irq_hander_chain_free_slot_head; irq_hander_chain_free_slot_head = get_slot_index(to_free_slot); } else { // since we are the last slot we know that our inst3 hasn't executed yet, so we change // it to bl to irq_handler_chain_remove_tail which will remove the slot. // NOTE THAT THIS TRASHES PRIORITY AND LINK SINCE THIS IS A 4 BYTE INSTRUCTION // BUT THEY ARE NOT NEEDED NOW insert_branch_and_link(&to_free_slot->inst3, (void *) irq_handler_chain_remove_tail); } } } else { assert(false); // not found } irq_set_enabled(num, was_enabled); } #else assert(false); // not found #endif } else { vtable_handler = __unhandled_user_irq; } set_raw_irq_handler_and_unlock(num, vtable_handler, save); #else panic_unsupported(); #endif } void irq_set_priority(uint num, uint8_t hardware_priority) { check_irq_param(num); // note that only 32 bit writes are supported io_rw_32 *p = (io_rw_32 *)((PPB_BASE + M0PLUS_NVIC_IPR0_OFFSET) + (num & ~3u)); *p = (*p & ~(0xffu << (8 * (num & 3u)))) | (((uint32_t) hardware_priority) << (8 * (num & 3u))); } uint irq_get_priority(uint num) { check_irq_param(num); // note that only 32 bit reads are supported io_rw_32 *p = (io_rw_32 *)((PPB_BASE + M0PLUS_NVIC_IPR0_OFFSET) + (num & ~3u)); return (uint8_t)(*p >> (8 * (num & 3u))); } #if !PICO_DISABLE_SHARED_IRQ_HANDLERS // used by irq_handler_chain.S to remove the last link in a handler chain after it executes // note this must be called only with the last slot in a chain (and during the exception) void irq_add_tail_to_free_list(struct irq_handler_chain_slot *slot) { irq_handler_t slot_handler = (irq_handler_t) add_thumb_bit(slot); assert(is_shared_irq_raw_handler(slot_handler)); uint exception = __get_current_exception(); assert(exception); spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_IRQ); uint32_t save = spin_lock_blocking(lock); int8_t slot_index = get_slot_index(slot); if (slot_handler == get_vtable()[exception]) { get_vtable()[exception] = __unhandled_user_irq; } else { bool __unused found = false; // need to find who points at the slot and update it for(uint i=0;ilink = irq_hander_chain_free_slot_head; irq_hander_chain_free_slot_head = slot_index; spin_unlock(lock, save); } #endif void irq_init_priorities() { #if PICO_DEFAULT_IRQ_PRIORITY != 0 static_assert(!(NUM_IRQS & 3), ""); uint32_t prio4 = (PICO_DEFAULT_IRQ_PRIORITY & 0xff) * 0x1010101u; io_rw_32 * p = (io_rw_32 *)(PPB_BASE + M0PLUS_NVIC_IPR0_OFFSET); for (uint i = 0; i < NUM_IRQS / 4; i++) { *p++ = prio4; } #endif } static uint get_user_irq_claim_index(uint irq_num) { invalid_params_if(IRQ, irq_num < FIRST_USER_IRQ || irq_num >= NUM_IRQS); // we count backwards from the last, to match the existing hard coded uses of user IRQs in the SDK which were previously using 31 static_assert(NUM_IRQS - FIRST_USER_IRQ <= 8, ""); // we only use a single byte's worth of claim bits today. return NUM_IRQS - irq_num - 1u; } void user_irq_claim(uint irq_num) { hw_claim_or_assert(user_irq_claimed_ptr(), get_user_irq_claim_index(irq_num), "User IRQ is already claimed"); } void user_irq_unclaim(uint irq_num) { hw_claim_clear(user_irq_claimed_ptr(), get_user_irq_claim_index(irq_num)); } int user_irq_claim_unused(bool required) { int bit = hw_claim_unused_from_range(user_irq_claimed_ptr(), required, 0, NUM_USER_IRQS - 1, "No user IRQs are available"); if (bit >= 0) bit = (int)NUM_IRQS - bit - 1; return bit; } bool user_irq_is_claimed(uint irq_num) { return hw_is_claimed(user_irq_claimed_ptr(), get_user_irq_claim_index(irq_num)); } ================================================ FILE: pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" #include "hardware/irq.h" #include "pico/asm_helper.S" pico_default_asm_setup #if !PICO_DISABLE_SHARED_IRQ_HANDLERS .data .align 2 .global irq_handler_chain_slots .global irq_handler_chain_first_slot .global irq_handler_chain_remove_tail // // These Slots make up the code and structure of the handler chains; the only external information are the VTABLE entries // (obviously one set per core) and a free list head. Each individual handler chain starts with the VTABLE entry I // pointing at the address of slot S (with thumb bit set). Thus each slot which is part of a chain is executble. // // The execution jumps (via branch instruction) from one slot to the other, then jumps to the end of chain handler. // The entirety of the state needed to traverse the chain is contained within the slots of the chain, which is why // a VTABLE entry is all that is needed per chain (rather than requiring a separarte set of head pointers) // irq_handler_chain_slots: .set next_slot_number, 1 .rept PICO_MAX_SHARED_IRQ_HANDLERS // a slot is executable and is always 3 instructions long. .hword 0 // inst1 (either: ldr r0, [pc, #4] or for the FIRST slot : add r1, pc, #0 ) .hword 0 // inst2 ( blx r0 b irq_handler_chain_first_slot ) .hword 0 // inst3 (either: b next_slot or for the LAST pop {pc} ) // next is a single byte index of next slot in chain (or -1 to end) .if next_slot_number == PICO_MAX_SHARED_IRQ_HANDLERS .byte 0xff .else .byte next_slot_number .endif // next is the 8 bit unsigned priority .byte 0x00 1: // and finally the handler function pointer .word 0x00000000 .set next_slot_number, next_slot_number + 1 .endr irq_handler_chain_first_slot: push {r0, lr} // Save EXC_RETURN token, so `pop {r0, pc}` will return from interrupt // Note that r0 does not NEED to be saved, however we must maintain // an 8 byte stack alignment, and this is the cheapest way to do so ldr r0, [r1, #4] // Get `handler` field of irq_handler_chain_slot adds r1, #1 // r1 points to `inst3` field of slot struct. Set Thumb bit on r1, mov lr, r1 // and copy to lr, so `inst3` is executed on return from handler bx r0 // Enter handler irq_handler_chain_remove_tail: mov r0, lr // Get start of struct. This function was called by a bl at offset +4, subs r0, #9 // so lr points to offset +8. Note also lr has its Thumb bit set! ldr r1, =irq_add_tail_to_free_list blx r1 pop {r0, pc} // Top of stack is EXC_RETURN #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_pio/CMakeLists.txt ================================================ pico_simple_hardware_target(pio) # additional libraries pico_mirrored_target_link_libraries(hardware_pio INTERFACE hardware_gpio hardware_claim ) ================================================ FILE: pico-sdk/src/rp2_common/hardware_pio/include/hardware/pio.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_PIO_H #define _HARDWARE_PIO_H #include "pico.h" #include "hardware/address_mapped.h" #include "hardware/structs/pio.h" #include "hardware/gpio.h" #include "hardware/regs/dreq.h" #include "hardware/pio_instructions.h" // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_PIO, Enable/disable assertions in the PIO module, type=bool, default=0, group=hardware_pio #ifndef PARAM_ASSERTIONS_ENABLED_PIO #define PARAM_ASSERTIONS_ENABLED_PIO 0 #endif /** \file hardware/pio.h * \defgroup hardware_pio hardware_pio * * Programmable I/O (PIO) API * * A programmable input/output block (PIO) is a versatile hardware interface which * can support a number of different IO standards. There are two PIO blocks in the RP2040. * * Each PIO is programmable in the same sense as a processor: the four state machines independently * execute short, sequential programs, to manipulate GPIOs and transfer data. Unlike a general * purpose processor, PIO state machines are highly specialised for IO, with a focus on determinism, * precise timing, and close integration with fixed-function hardware. Each state machine is equipped * with: * * Two 32-bit shift registers – either direction, any shift count * * Two 32-bit scratch registers * * 4×32 bit bus FIFO in each direction (TX/RX), reconfigurable as 8×32 in a single direction * * Fractional clock divider (16 integer, 8 fractional bits) * * Flexible GPIO mapping * * DMA interface, sustained throughput up to 1 word per clock from system DMA * * IRQ flag set/clear/status * * Full details of the PIO can be found in the RP2040 datasheet. */ #ifdef __cplusplus extern "C" { #endif static_assert(PIO_SM0_SHIFTCTRL_FJOIN_RX_LSB == PIO_SM0_SHIFTCTRL_FJOIN_TX_LSB + 1, ""); /** \brief FIFO join states * \ingroup hardware_pio */ enum pio_fifo_join { PIO_FIFO_JOIN_NONE = 0, PIO_FIFO_JOIN_TX = 1, PIO_FIFO_JOIN_RX = 2, }; /** \brief MOV status types * \ingroup hardware_pio */ enum pio_mov_status_type { STATUS_TX_LESSTHAN = 0, STATUS_RX_LESSTHAN = 1 }; typedef pio_hw_t *PIO; /** Identifier for the first (PIO 0) hardware PIO instance (for use in PIO functions). * * e.g. pio_gpio_init(pio0, 5) * * \ingroup hardware_pio */ #define pio0 pio0_hw /** Identifier for the second (PIO 1) hardware PIO instance (for use in PIO functions). * * e.g. pio_gpio_init(pio1, 5) * * \ingroup hardware_pio */ #define pio1 pio1_hw /** \brief PIO state machine configuration * \defgroup sm_config sm_config * \ingroup hardware_pio * * A PIO block needs to be configured, these functions provide helpers to set up configuration * structures. See \ref pio_sm_set_config * */ /** \brief PIO Configuration structure * \ingroup sm_config * * This structure is an in-memory representation of the configuration that can be applied to a PIO * state machine later using pio_sm_set_config() or pio_sm_init(). */ typedef struct { uint32_t clkdiv; uint32_t execctrl; uint32_t shiftctrl; uint32_t pinctrl; } pio_sm_config; static inline void check_sm_param(__unused uint sm) { valid_params_if(PIO, sm < NUM_PIO_STATE_MACHINES); } static inline void check_sm_mask(__unused uint mask) { valid_params_if(PIO, mask < (1u << NUM_PIO_STATE_MACHINES)); } static inline void check_pio_param(__unused PIO pio) { valid_params_if(PIO, pio == pio0 || pio == pio1); } /*! \brief Set the 'out' pins in a state machine configuration * \ingroup sm_config * * Can overlap with the 'in', 'set' and 'sideset' pins * * \param c Pointer to the configuration structure to modify * \param out_base 0-31 First pin to set as output * \param out_count 0-32 Number of pins to set. */ static inline void sm_config_set_out_pins(pio_sm_config *c, uint out_base, uint out_count) { valid_params_if(PIO, out_base < 32); valid_params_if(PIO, out_count <= 32); c->pinctrl = (c->pinctrl & ~(PIO_SM0_PINCTRL_OUT_BASE_BITS | PIO_SM0_PINCTRL_OUT_COUNT_BITS)) | (out_base << PIO_SM0_PINCTRL_OUT_BASE_LSB) | (out_count << PIO_SM0_PINCTRL_OUT_COUNT_LSB); } /*! \brief Set the 'set' pins in a state machine configuration * \ingroup sm_config * * Can overlap with the 'in', 'out' and 'sideset' pins * * \param c Pointer to the configuration structure to modify * \param set_base 0-31 First pin to set as * \param set_count 0-5 Number of pins to set. */ static inline void sm_config_set_set_pins(pio_sm_config *c, uint set_base, uint set_count) { valid_params_if(PIO, set_base < 32); valid_params_if(PIO, set_count <= 5); c->pinctrl = (c->pinctrl & ~(PIO_SM0_PINCTRL_SET_BASE_BITS | PIO_SM0_PINCTRL_SET_COUNT_BITS)) | (set_base << PIO_SM0_PINCTRL_SET_BASE_LSB) | (set_count << PIO_SM0_PINCTRL_SET_COUNT_LSB); } /*! \brief Set the 'in' pins in a state machine configuration * \ingroup sm_config * * Can overlap with the 'out', 'set' and 'sideset' pins * * \param c Pointer to the configuration structure to modify * \param in_base 0-31 First pin to use as input */ static inline void sm_config_set_in_pins(pio_sm_config *c, uint in_base) { valid_params_if(PIO, in_base < 32); c->pinctrl = (c->pinctrl & ~PIO_SM0_PINCTRL_IN_BASE_BITS) | (in_base << PIO_SM0_PINCTRL_IN_BASE_LSB); } /*! \brief Set the 'sideset' pins in a state machine configuration * \ingroup sm_config * * Can overlap with the 'in', 'out' and 'set' pins * * \param c Pointer to the configuration structure to modify * \param sideset_base 0-31 base pin for 'side set' */ static inline void sm_config_set_sideset_pins(pio_sm_config *c, uint sideset_base) { valid_params_if(PIO, sideset_base < 32); c->pinctrl = (c->pinctrl & ~PIO_SM0_PINCTRL_SIDESET_BASE_BITS) | (sideset_base << PIO_SM0_PINCTRL_SIDESET_BASE_LSB); } /*! \brief Set the 'sideset' options in a state machine configuration * \ingroup sm_config * * \param c Pointer to the configuration structure to modify * \param bit_count Number of bits to steal from delay field in the instruction for use of side set (max 5) * \param optional True if the topmost side set bit is used as a flag for whether to apply side set on that instruction * \param pindirs True if the side set affects pin directions rather than values */ static inline void sm_config_set_sideset(pio_sm_config *c, uint bit_count, bool optional, bool pindirs) { valid_params_if(PIO, bit_count <= 5); valid_params_if(PIO, !optional || bit_count >= 1); c->pinctrl = (c->pinctrl & ~PIO_SM0_PINCTRL_SIDESET_COUNT_BITS) | (bit_count << PIO_SM0_PINCTRL_SIDESET_COUNT_LSB); c->execctrl = (c->execctrl & ~(PIO_SM0_EXECCTRL_SIDE_EN_BITS | PIO_SM0_EXECCTRL_SIDE_PINDIR_BITS)) | (bool_to_bit(optional) << PIO_SM0_EXECCTRL_SIDE_EN_LSB) | (bool_to_bit(pindirs) << PIO_SM0_EXECCTRL_SIDE_PINDIR_LSB); } /*! \brief Set the state machine clock divider (from integer and fractional parts - 16:8) in a state machine configuration * \ingroup sm_config * * The clock divider can slow the state machine's execution to some rate below * the system clock frequency, by enabling the state machine on some cycles * but not on others, in a regular pattern. This can be used to generate e.g. * a given UART baud rate. See the datasheet for further detail. * * \param c Pointer to the configuration structure to modify * \param div_int Integer part of the divisor * \param div_frac Fractional part in 1/256ths * \sa sm_config_set_clkdiv() */ static inline void sm_config_set_clkdiv_int_frac(pio_sm_config *c, uint16_t div_int, uint8_t div_frac) { invalid_params_if(PIO, div_int == 0 && div_frac != 0); c->clkdiv = (((uint)div_frac) << PIO_SM0_CLKDIV_FRAC_LSB) | (((uint)div_int) << PIO_SM0_CLKDIV_INT_LSB); } static inline void pio_calculate_clkdiv_from_float(float div, uint16_t *div_int, uint8_t *div_frac) { valid_params_if(PIO, div >= 1 && div <= 65536); *div_int = (uint16_t)div; if (*div_int == 0) { *div_frac = 0; } else { *div_frac = (uint8_t)((div - (float)*div_int) * (1u << 8u)); } } /*! \brief Set the state machine clock divider (from a floating point value) in a state machine configuration * \ingroup sm_config * * The clock divider slows the state machine's execution by masking the * system clock on some cycles, in a repeating pattern, so that the state * machine does not advance. Effectively this produces a slower clock for the * state machine to run from, which can be used to generate e.g. a particular * UART baud rate. See the datasheet for further detail. * * \param c Pointer to the configuration structure to modify * \param div The fractional divisor to be set. 1 for full speed. An integer clock divisor of n * will cause the state machine to run 1 cycle in every n. * Note that for small n, the jitter introduced by a fractional divider (e.g. 2.5) may be unacceptable * although it will depend on the use case. */ static inline void sm_config_set_clkdiv(pio_sm_config *c, float div) { uint16_t div_int; uint8_t div_frac; pio_calculate_clkdiv_from_float(div, &div_int, &div_frac); sm_config_set_clkdiv_int_frac(c, div_int, div_frac); } /*! \brief Set the wrap addresses in a state machine configuration * \ingroup sm_config * * \param c Pointer to the configuration structure to modify * \param wrap_target the instruction memory address to wrap to * \param wrap the instruction memory address after which to set the program counter to wrap_target * if the instruction does not itself update the program_counter */ static inline void sm_config_set_wrap(pio_sm_config *c, uint wrap_target, uint wrap) { valid_params_if(PIO, wrap < PIO_INSTRUCTION_COUNT); valid_params_if(PIO, wrap_target < PIO_INSTRUCTION_COUNT); c->execctrl = (c->execctrl & ~(PIO_SM0_EXECCTRL_WRAP_TOP_BITS | PIO_SM0_EXECCTRL_WRAP_BOTTOM_BITS)) | (wrap_target << PIO_SM0_EXECCTRL_WRAP_BOTTOM_LSB) | (wrap << PIO_SM0_EXECCTRL_WRAP_TOP_LSB); } /*! \brief Set the 'jmp' pin in a state machine configuration * \ingroup sm_config * * \param c Pointer to the configuration structure to modify * \param pin The raw GPIO pin number to use as the source for a `jmp pin` instruction */ static inline void sm_config_set_jmp_pin(pio_sm_config *c, uint pin) { valid_params_if(PIO, pin < 32); c->execctrl = (c->execctrl & ~PIO_SM0_EXECCTRL_JMP_PIN_BITS) | (pin << PIO_SM0_EXECCTRL_JMP_PIN_LSB); } /*! \brief Setup 'in' shifting parameters in a state machine configuration * \ingroup sm_config * * \param c Pointer to the configuration structure to modify * \param shift_right true to shift ISR to right, false to shift ISR to left * \param autopush whether autopush is enabled * \param push_threshold threshold in bits to shift in before auto/conditional re-pushing of the ISR */ static inline void sm_config_set_in_shift(pio_sm_config *c, bool shift_right, bool autopush, uint push_threshold) { valid_params_if(PIO, push_threshold <= 32); c->shiftctrl = (c->shiftctrl & ~(PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_BITS | PIO_SM0_SHIFTCTRL_AUTOPUSH_BITS | PIO_SM0_SHIFTCTRL_PUSH_THRESH_BITS)) | (bool_to_bit(shift_right) << PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_LSB) | (bool_to_bit(autopush) << PIO_SM0_SHIFTCTRL_AUTOPUSH_LSB) | ((push_threshold & 0x1fu) << PIO_SM0_SHIFTCTRL_PUSH_THRESH_LSB); } /*! \brief Setup 'out' shifting parameters in a state machine configuration * \ingroup sm_config * * \param c Pointer to the configuration structure to modify * \param shift_right true to shift OSR to right, false to shift OSR to left * \param autopull whether autopull is enabled * \param pull_threshold threshold in bits to shift out before auto/conditional re-pulling of the OSR */ static inline void sm_config_set_out_shift(pio_sm_config *c, bool shift_right, bool autopull, uint pull_threshold) { valid_params_if(PIO, pull_threshold <= 32); c->shiftctrl = (c->shiftctrl & ~(PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_BITS | PIO_SM0_SHIFTCTRL_AUTOPULL_BITS | PIO_SM0_SHIFTCTRL_PULL_THRESH_BITS)) | (bool_to_bit(shift_right) << PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_LSB) | (bool_to_bit(autopull) << PIO_SM0_SHIFTCTRL_AUTOPULL_LSB) | ((pull_threshold & 0x1fu) << PIO_SM0_SHIFTCTRL_PULL_THRESH_LSB); } /*! \brief Setup the FIFO joining in a state machine configuration * \ingroup sm_config * * \param c Pointer to the configuration structure to modify * \param join Specifies the join type. \see enum pio_fifo_join */ static inline void sm_config_set_fifo_join(pio_sm_config *c, enum pio_fifo_join join) { valid_params_if(PIO, join == PIO_FIFO_JOIN_NONE || join == PIO_FIFO_JOIN_TX || join == PIO_FIFO_JOIN_RX); c->shiftctrl = (c->shiftctrl & (uint)~(PIO_SM0_SHIFTCTRL_FJOIN_TX_BITS | PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS)) | (((uint)join) << PIO_SM0_SHIFTCTRL_FJOIN_TX_LSB); } /*! \brief Set special 'out' operations in a state machine configuration * \ingroup sm_config * * \param c Pointer to the configuration structure to modify * \param sticky to enable 'sticky' output (i.e. re-asserting most recent OUT/SET pin values on subsequent cycles) * \param has_enable_pin true to enable auxiliary OUT enable pin * \param enable_pin_index pin index for auxiliary OUT enable */ static inline void sm_config_set_out_special(pio_sm_config *c, bool sticky, bool has_enable_pin, uint enable_pin_index) { c->execctrl = (c->execctrl & (uint)~(PIO_SM0_EXECCTRL_OUT_STICKY_BITS | PIO_SM0_EXECCTRL_INLINE_OUT_EN_BITS | PIO_SM0_EXECCTRL_OUT_EN_SEL_BITS)) | (bool_to_bit(sticky) << PIO_SM0_EXECCTRL_OUT_STICKY_LSB) | (bool_to_bit(has_enable_pin) << PIO_SM0_EXECCTRL_INLINE_OUT_EN_LSB) | ((enable_pin_index << PIO_SM0_EXECCTRL_OUT_EN_SEL_LSB) & PIO_SM0_EXECCTRL_OUT_EN_SEL_BITS); } /*! \brief Set source for 'mov status' in a state machine configuration * \ingroup sm_config * * \param c Pointer to the configuration structure to modify * \param status_sel the status operation selector. \see enum pio_mov_status_type * \param status_n parameter for the mov status operation (currently a bit count) */ static inline void sm_config_set_mov_status(pio_sm_config *c, enum pio_mov_status_type status_sel, uint status_n) { valid_params_if(PIO, status_sel == STATUS_TX_LESSTHAN || status_sel == STATUS_RX_LESSTHAN); c->execctrl = (c->execctrl & ~(PIO_SM0_EXECCTRL_STATUS_SEL_BITS | PIO_SM0_EXECCTRL_STATUS_N_BITS)) | ((((uint)status_sel) << PIO_SM0_EXECCTRL_STATUS_SEL_LSB) & PIO_SM0_EXECCTRL_STATUS_SEL_BITS) | ((status_n << PIO_SM0_EXECCTRL_STATUS_N_LSB) & PIO_SM0_EXECCTRL_STATUS_N_BITS); } /*! \brief Get the default state machine configuration * \ingroup sm_config * * Setting | Default * --------|-------- * Out Pins | 32 starting at 0 * Set Pins | 0 starting at 0 * In Pins (base) | 0 * Side Set Pins (base) | 0 * Side Set | disabled * Wrap | wrap=31, wrap_to=0 * In Shift | shift_direction=right, autopush=false, push_threshold=32 * Out Shift | shift_direction=right, autopull=false, pull_threshold=32 * Jmp Pin | 0 * Out Special | sticky=false, has_enable_pin=false, enable_pin_index=0 * Mov Status | status_sel=STATUS_TX_LESSTHAN, n=0 * * \return the default state machine configuration which can then be modified. */ static inline pio_sm_config pio_get_default_sm_config(void) { pio_sm_config c = {0, 0, 0, 0}; sm_config_set_clkdiv_int_frac(&c, 1, 0); sm_config_set_wrap(&c, 0, 31); sm_config_set_in_shift(&c, true, false, 32); sm_config_set_out_shift(&c, true, false, 32); return c; } /*! \brief Apply a state machine configuration to a state machine * \ingroup hardware_pio * * \param pio Handle to PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param config the configuration to apply */ static inline void pio_sm_set_config(PIO pio, uint sm, const pio_sm_config *config) { check_pio_param(pio); check_sm_param(sm); pio->sm[sm].clkdiv = config->clkdiv; pio->sm[sm].execctrl = config->execctrl; pio->sm[sm].shiftctrl = config->shiftctrl; pio->sm[sm].pinctrl = config->pinctrl; } /*! \brief Return the instance number of a PIO instance * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \return the PIO instance number (either 0 or 1) */ static inline uint pio_get_index(PIO pio) { check_pio_param(pio); return pio == pio1 ? 1 : 0; } /*! \brief Setup the function select for a GPIO to use output from the given PIO instance * \ingroup hardware_pio * * PIO appears as an alternate function in the GPIO muxing, just like an SPI * or UART. This function configures that multiplexing to connect a given PIO * instance to a GPIO. Note that this is not necessary for a state machine to * be able to read the *input* value from a GPIO, but only for it to set the * output value or output enable. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param pin the GPIO pin whose function select to set */ static inline void pio_gpio_init(PIO pio, uint pin) { check_pio_param(pio); valid_params_if(PIO, pin < 32); gpio_set_function(pin, pio == pio0 ? GPIO_FUNC_PIO0 : GPIO_FUNC_PIO1); } /*! \brief Return the DREQ to use for pacing transfers to/from a particular state machine FIFO * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param is_tx true for sending data to the state machine, false for receiving data from the state machine */ static inline uint pio_get_dreq(PIO pio, uint sm, bool is_tx) { static_assert(DREQ_PIO0_TX1 == DREQ_PIO0_TX0 + 1, ""); static_assert(DREQ_PIO0_TX2 == DREQ_PIO0_TX0 + 2, ""); static_assert(DREQ_PIO0_TX3 == DREQ_PIO0_TX0 + 3, ""); static_assert(DREQ_PIO0_RX0 == DREQ_PIO0_TX0 + NUM_PIO_STATE_MACHINES, ""); static_assert(DREQ_PIO1_RX0 == DREQ_PIO1_TX0 + NUM_PIO_STATE_MACHINES, ""); check_pio_param(pio); check_sm_param(sm); return sm + (is_tx ? 0 : NUM_PIO_STATE_MACHINES) + (pio == pio0 ? DREQ_PIO0_TX0 : DREQ_PIO1_TX0); } typedef struct pio_program { const uint16_t *instructions; uint8_t length; int8_t origin; // required instruction memory origin or -1 } __packed pio_program_t; /*! \brief Determine whether the given program can (at the time of the call) be loaded onto the PIO instance * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param program the program definition * \return true if the program can be loaded; false if there is not suitable space in the instruction memory */ bool pio_can_add_program(PIO pio, const pio_program_t *program); /*! \brief Determine whether the given program can (at the time of the call) be loaded onto the PIO instance starting at a particular location * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param program the program definition * \param offset the instruction memory offset wanted for the start of the program * \return true if the program can be loaded at that location; false if there is not space in the instruction memory */ bool pio_can_add_program_at_offset(PIO pio, const pio_program_t *program, uint offset); /*! \brief Attempt to load the program, panicking if not possible * \ingroup hardware_pio * * \see pio_can_add_program() if you need to check whether the program can be loaded * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param program the program definition * \return the instruction memory offset the program is loaded at */ uint pio_add_program(PIO pio, const pio_program_t *program); /*! \brief Attempt to load the program at the specified instruction memory offset, panicking if not possible * \ingroup hardware_pio * * \see pio_can_add_program_at_offset() if you need to check whether the program can be loaded * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param program the program definition * \param offset the instruction memory offset wanted for the start of the program */ void pio_add_program_at_offset(PIO pio, const pio_program_t *program, uint offset); /*! \brief Remove a program from a PIO instance's instruction memory * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param program the program definition * \param loaded_offset the loaded offset returned when the program was added */ void pio_remove_program(PIO pio, const pio_program_t *program, uint loaded_offset); /*! \brief Clears all of a PIO instance's instruction memory * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 */ void pio_clear_instruction_memory(PIO pio); /*! \brief Resets the state machine to a consistent state, and configures it * \ingroup hardware_pio * * This method: * - Disables the state machine (if running) * - Clears the FIFOs * - Applies the configuration specified by 'config' * - Resets any internal state e.g. shift counters * - Jumps to the initial program location given by 'initial_pc' * * The state machine is left disabled on return from this call. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param initial_pc the initial program memory offset to run from * \param config the configuration to apply (or NULL to apply defaults) */ void pio_sm_init(PIO pio, uint sm, uint initial_pc, const pio_sm_config *config); /*! \brief Enable or disable a PIO state machine * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param enabled true to enable the state machine; false to disable */ static inline void pio_sm_set_enabled(PIO pio, uint sm, bool enabled) { check_pio_param(pio); check_sm_param(sm); pio->ctrl = (pio->ctrl & ~(1u << sm)) | (bool_to_bit(enabled) << sm); } /*! \brief Enable or disable multiple PIO state machines * \ingroup hardware_pio * * Note that this method just sets the enabled state of the state machine; * if now enabled they continue exactly from where they left off. * * \see pio_enable_sm_mask_in_sync() if you wish to enable multiple state machines * and ensure their clock dividers are in sync. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param mask bit mask of state machine indexes to modify the enabled state of * \param enabled true to enable the state machines; false to disable */ static inline void pio_set_sm_mask_enabled(PIO pio, uint32_t mask, bool enabled) { check_pio_param(pio); check_sm_mask(mask); pio->ctrl = (pio->ctrl & ~mask) | (enabled ? mask : 0u); } /*! \brief Restart a state machine with a known state * \ingroup hardware_pio * * This method clears the ISR, shift counters, clock divider counter * pin write flags, delay counter, latched EXEC instruction, and IRQ wait condition. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) */ static inline void pio_sm_restart(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); hw_set_bits(&pio->ctrl, 1u << (PIO_CTRL_SM_RESTART_LSB + sm)); } /*! \brief Restart multiple state machine with a known state * \ingroup hardware_pio * * This method clears the ISR, shift counters, clock divider counter * pin write flags, delay counter, latched EXEC instruction, and IRQ wait condition. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param mask bit mask of state machine indexes to modify the enabled state of */ static inline void pio_restart_sm_mask(PIO pio, uint32_t mask) { check_pio_param(pio); check_sm_mask(mask); hw_set_bits(&pio->ctrl, (mask << PIO_CTRL_SM_RESTART_LSB) & PIO_CTRL_SM_RESTART_BITS); } /*! \brief Restart a state machine's clock divider from a phase of 0 * \ingroup hardware_pio * * Each state machine's clock divider is a free-running piece of hardware, * that generates a pattern of clock enable pulses for the state machine, * based *only* on the configured integer/fractional divisor. The pattern of * running/halted cycles slows the state machine's execution to some * controlled rate. * * This function clears the divider's integer and fractional phase * accumulators so that it restarts this pattern from the beginning. It is * called automatically by pio_sm_init() but can also be called at a later * time, when you enable the state machine, to ensure precisely consistent * timing each time you load and run a given PIO program. * * More commonly this hardware mechanism is used to synchronise the execution * clocks of multiple state machines -- see pio_clkdiv_restart_sm_mask(). * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) */ static inline void pio_sm_clkdiv_restart(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); hw_set_bits(&pio->ctrl, 1u << (PIO_CTRL_CLKDIV_RESTART_LSB + sm)); } /*! \brief Restart multiple state machines' clock dividers from a phase of 0. * \ingroup hardware_pio * * Each state machine's clock divider is a free-running piece of hardware, * that generates a pattern of clock enable pulses for the state machine, * based *only* on the configured integer/fractional divisor. The pattern of * running/halted cycles slows the state machine's execution to some * controlled rate. * * This function simultaneously clears the integer and fractional phase * accumulators of multiple state machines' clock dividers. If these state * machines all have the same integer and fractional divisors configured, * their clock dividers will run in precise deterministic lockstep from this * point. * * With their execution clocks synchronised in this way, it is then safe to * e.g. have multiple state machines performing a 'wait irq' on the same flag, * and all clear it on the same cycle. * * Also note that this function can be called whilst state machines are * running (e.g. if you have just changed the clock divisors of some state * machines and wish to resynchronise them), and that disabling a state * machine does not halt its clock divider: that is, if multiple state * machines have their clocks synchronised, you can safely disable and * reenable one of the state machines without losing synchronisation. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param mask bit mask of state machine indexes to modify the enabled state of */ static inline void pio_clkdiv_restart_sm_mask(PIO pio, uint32_t mask) { check_pio_param(pio); check_sm_mask(mask); hw_set_bits(&pio->ctrl, (mask << PIO_CTRL_CLKDIV_RESTART_LSB) & PIO_CTRL_CLKDIV_RESTART_BITS); } /*! \brief Enable multiple PIO state machines synchronizing their clock dividers * \ingroup hardware_pio * * This is equivalent to calling both pio_set_sm_mask_enabled() and * pio_clkdiv_restart_sm_mask() on the *same* clock cycle. All state machines * specified by 'mask' are started simultaneously and, assuming they have the * same clock divisors, their divided clocks will stay precisely synchronised. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param mask bit mask of state machine indexes to modify the enabled state of */ static inline void pio_enable_sm_mask_in_sync(PIO pio, uint32_t mask) { check_pio_param(pio); check_sm_mask(mask); hw_set_bits(&pio->ctrl, ((mask << PIO_CTRL_CLKDIV_RESTART_LSB) & PIO_CTRL_CLKDIV_RESTART_BITS) | ((mask << PIO_CTRL_SM_ENABLE_LSB) & PIO_CTRL_SM_ENABLE_BITS)); } /*! \brief PIO interrupt source numbers for pio related IRQs * \ingroup hardware_pio */ enum pio_interrupt_source { pis_interrupt0 = PIO_INTR_SM0_LSB, pis_interrupt1 = PIO_INTR_SM1_LSB, pis_interrupt2 = PIO_INTR_SM2_LSB, pis_interrupt3 = PIO_INTR_SM3_LSB, pis_sm0_tx_fifo_not_full = PIO_INTR_SM0_TXNFULL_LSB, pis_sm1_tx_fifo_not_full = PIO_INTR_SM1_TXNFULL_LSB, pis_sm2_tx_fifo_not_full = PIO_INTR_SM2_TXNFULL_LSB, pis_sm3_tx_fifo_not_full = PIO_INTR_SM3_TXNFULL_LSB, pis_sm0_rx_fifo_not_empty = PIO_INTR_SM0_RXNEMPTY_LSB, pis_sm1_rx_fifo_not_empty = PIO_INTR_SM1_RXNEMPTY_LSB, pis_sm2_rx_fifo_not_empty = PIO_INTR_SM2_RXNEMPTY_LSB, pis_sm3_rx_fifo_not_empty = PIO_INTR_SM3_RXNEMPTY_LSB, }; /*! \brief Enable/Disable a single source on a PIO's IRQ 0 * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param source the source number (see \ref pio_interrupt_source) * \param enabled true to enable IRQ 0 for the source, false to disable. */ static inline void pio_set_irq0_source_enabled(PIO pio, enum pio_interrupt_source source, bool enabled) { check_pio_param(pio); invalid_params_if(PIO, source >= 12); if (enabled) hw_set_bits(&pio->inte0, 1u << source); else hw_clear_bits(&pio->inte0, 1u << source); } /*! \brief Enable/Disable a single source on a PIO's IRQ 1 * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param source the source number (see \ref pio_interrupt_source) * \param enabled true to enable IRQ 0 for the source, false to disable. */ static inline void pio_set_irq1_source_enabled(PIO pio, enum pio_interrupt_source source, bool enabled) { check_pio_param(pio); invalid_params_if(PIO, source >= 12); if (enabled) hw_set_bits(&pio->inte1, 1u << source); else hw_clear_bits(&pio->inte1, 1u << source); } /*! \brief Enable/Disable multiple sources on a PIO's IRQ 0 * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param source_mask Mask of bits, one for each source number (see \ref pio_interrupt_source) to affect * \param enabled true to enable all the sources specified in the mask on IRQ 0, false to disable all the sources specified in the mask on IRQ 0 */ static inline void pio_set_irq0_source_mask_enabled(PIO pio, uint32_t source_mask, bool enabled) { check_pio_param(pio); invalid_params_if(PIO, source_mask > PIO_INTR_BITS); if (enabled) { hw_set_bits(&pio->inte0, source_mask); } else { hw_clear_bits(&pio->inte0, source_mask); } } /*! \brief Enable/Disable multiple sources on a PIO's IRQ 1 * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param source_mask Mask of bits, one for each source number (see \ref pio_interrupt_source) to affect * \param enabled true to enable all the sources specified in the mask on IRQ 1, false to disable all the source specified in the mask on IRQ 1 */ static inline void pio_set_irq1_source_mask_enabled(PIO pio, uint32_t source_mask, bool enabled) { check_pio_param(pio); invalid_params_if(PIO, source_mask > PIO_INTR_BITS); if (enabled) { hw_set_bits(&pio->inte1, source_mask); } else { hw_clear_bits(&pio->inte1, source_mask); } } /*! \brief Enable/Disable a single source on a PIO's specified (0/1) IRQ index * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param irq_index the IRQ index; either 0 or 1 * \param source the source number (see \ref pio_interrupt_source) * \param enabled true to enable the source on the specified IRQ, false to disable. */ static inline void pio_set_irqn_source_enabled(PIO pio, uint irq_index, enum pio_interrupt_source source, bool enabled) { invalid_params_if(PIO, irq_index > 1); if (irq_index) { pio_set_irq1_source_enabled(pio, source, enabled); } else { pio_set_irq0_source_enabled(pio, source, enabled); } } /*! \brief Enable/Disable multiple sources on a PIO's specified (0/1) IRQ index * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param irq_index the IRQ index; either 0 or 1 * \param source_mask Mask of bits, one for each source number (see \ref pio_interrupt_source) to affect * \param enabled true to enable all the sources specified in the mask on the specified IRQ, false to disable all the sources specified in the mask on the specified IRQ */ static inline void pio_set_irqn_source_mask_enabled(PIO pio, uint irq_index, uint32_t source_mask, bool enabled) { invalid_params_if(PIO, irq_index > 1); if (irq_index) { pio_set_irq1_source_mask_enabled(pio, source_mask, enabled); } else { pio_set_irq0_source_mask_enabled(pio, source_mask, enabled); } } /*! \brief Determine if a particular PIO interrupt is set * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param pio_interrupt_num the PIO interrupt number 0-7 * \return true if corresponding PIO interrupt is currently set */ static inline bool pio_interrupt_get(PIO pio, uint pio_interrupt_num) { check_pio_param(pio); invalid_params_if(PIO, pio_interrupt_num >= 8); return pio->irq & (1u << pio_interrupt_num); } /*! \brief Clear a particular PIO interrupt * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param pio_interrupt_num the PIO interrupt number 0-7 */ static inline void pio_interrupt_clear(PIO pio, uint pio_interrupt_num) { check_pio_param(pio); invalid_params_if(PIO, pio_interrupt_num >= 8); pio->irq = (1u << pio_interrupt_num); } /*! \brief Return the current program counter for a state machine * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \return the program counter */ static inline uint8_t pio_sm_get_pc(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); return (uint8_t) pio->sm[sm].addr; } /*! \brief Immediately execute an instruction on a state machine * \ingroup hardware_pio * * This instruction is executed instead of the next instruction in the normal control flow on the state machine. * Subsequent calls to this method replace the previous executed * instruction if it is still running. \see pio_sm_is_exec_stalled() to see if an executed instruction * is still running (i.e. it is stalled on some condition) * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param instr the encoded PIO instruction */ inline static void pio_sm_exec(PIO pio, uint sm, uint instr) { check_pio_param(pio); check_sm_param(sm); pio->sm[sm].instr = instr; } /*! \brief Determine if an instruction set by pio_sm_exec() is stalled executing * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \return true if the executed instruction is still running (stalled) */ static inline bool pio_sm_is_exec_stalled(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); return !!(pio->sm[sm].execctrl & PIO_SM0_EXECCTRL_EXEC_STALLED_BITS); } /*! \brief Immediately execute an instruction on a state machine and wait for it to complete * \ingroup hardware_pio * * This instruction is executed instead of the next instruction in the normal control flow on the state machine. * Subsequent calls to this method replace the previous executed * instruction if it is still running. \see pio_sm_is_exec_stalled() to see if an executed instruction * is still running (i.e. it is stalled on some condition) * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param instr the encoded PIO instruction */ static inline void pio_sm_exec_wait_blocking(PIO pio, uint sm, uint instr) { check_pio_param(pio); check_sm_param(sm); pio_sm_exec(pio, sm, instr); while (pio_sm_is_exec_stalled(pio, sm)) tight_loop_contents(); } /*! \brief Set the current wrap configuration for a state machine * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param wrap_target the instruction memory address to wrap to * \param wrap the instruction memory address after which to set the program counter to wrap_target * if the instruction does not itself update the program_counter */ static inline void pio_sm_set_wrap(PIO pio, uint sm, uint wrap_target, uint wrap) { check_pio_param(pio); check_sm_param(sm); valid_params_if(PIO, wrap < PIO_INSTRUCTION_COUNT); valid_params_if(PIO, wrap_target < PIO_INSTRUCTION_COUNT); pio->sm[sm].execctrl = (pio->sm[sm].execctrl & ~(PIO_SM0_EXECCTRL_WRAP_TOP_BITS | PIO_SM0_EXECCTRL_WRAP_BOTTOM_BITS)) | (wrap_target << PIO_SM0_EXECCTRL_WRAP_BOTTOM_LSB) | (wrap << PIO_SM0_EXECCTRL_WRAP_TOP_LSB); } /*! \brief Set the current 'out' pins for a state machine * \ingroup hardware_pio * * Can overlap with the 'in', 'set' and 'sideset' pins * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param out_base 0-31 First pin to set as output * \param out_count 0-32 Number of pins to set. */ static inline void pio_sm_set_out_pins(PIO pio, uint sm, uint out_base, uint out_count) { check_pio_param(pio); check_sm_param(sm); valid_params_if(PIO, out_base < 32); valid_params_if(PIO, out_count <= 32); pio->sm[sm].pinctrl = (pio->sm[sm].pinctrl & ~(PIO_SM0_PINCTRL_OUT_BASE_BITS | PIO_SM0_PINCTRL_OUT_COUNT_BITS)) | (out_base << PIO_SM0_PINCTRL_OUT_BASE_LSB) | (out_count << PIO_SM0_PINCTRL_OUT_COUNT_LSB); } /*! \brief Set the current 'set' pins for a state machine * \ingroup hardware_pio * * Can overlap with the 'in', 'out' and 'sideset' pins * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param set_base 0-31 First pin to set as * \param set_count 0-5 Number of pins to set. */ static inline void pio_sm_set_set_pins(PIO pio, uint sm, uint set_base, uint set_count) { check_pio_param(pio); check_sm_param(sm); valid_params_if(PIO, set_base < 32); valid_params_if(PIO, set_count <= 5); pio->sm[sm].pinctrl = (pio->sm[sm].pinctrl & ~(PIO_SM0_PINCTRL_SET_BASE_BITS | PIO_SM0_PINCTRL_SET_COUNT_BITS)) | (set_base << PIO_SM0_PINCTRL_SET_BASE_LSB) | (set_count << PIO_SM0_PINCTRL_SET_COUNT_LSB); } /*! \brief Set the current 'in' pins for a state machine * \ingroup hardware_pio * * Can overlap with the 'out', 'set' and 'sideset' pins * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param in_base 0-31 First pin to use as input */ static inline void pio_sm_set_in_pins(PIO pio, uint sm, uint in_base) { check_pio_param(pio); check_sm_param(sm); valid_params_if(PIO, in_base < 32); pio->sm[sm].pinctrl = (pio->sm[sm].pinctrl & ~PIO_SM0_PINCTRL_IN_BASE_BITS) | (in_base << PIO_SM0_PINCTRL_IN_BASE_LSB); } /*! \brief Set the current 'sideset' pins for a state machine * \ingroup hardware_pio * * Can overlap with the 'in', 'out' and 'set' pins * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param sideset_base 0-31 base pin for 'side set' */ static inline void pio_sm_set_sideset_pins(PIO pio, uint sm, uint sideset_base) { check_pio_param(pio); check_sm_param(sm); valid_params_if(PIO, sideset_base < 32); pio->sm[sm].pinctrl = (pio->sm[sm].pinctrl & ~PIO_SM0_PINCTRL_SIDESET_BASE_BITS) | (sideset_base << PIO_SM0_PINCTRL_SIDESET_BASE_LSB); } /*! \brief Write a word of data to a state machine's TX FIFO * \ingroup hardware_pio * * This is a raw FIFO access that does not check for fullness. If the FIFO is * full, the FIFO contents and state are not affected by the write attempt. * Hardware sets the TXOVER sticky flag for this FIFO in FDEBUG, to indicate * that the system attempted to write to a full FIFO. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param data the 32 bit data value * * \sa pio_sm_put_blocking() */ static inline void pio_sm_put(PIO pio, uint sm, uint32_t data) { check_pio_param(pio); check_sm_param(sm); pio->txf[sm] = data; } /*! \brief Read a word of data from a state machine's RX FIFO * \ingroup hardware_pio * * This is a raw FIFO access that does not check for emptiness. If the FIFO is * empty, the hardware ignores the attempt to read from the FIFO (the FIFO * remains in an empty state following the read) and the sticky RXUNDER flag * for this FIFO is set in FDEBUG to indicate that the system tried to read * from this FIFO when empty. The data returned by this function is undefined * when the FIFO is empty. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * * \sa pio_sm_get_blocking() */ static inline uint32_t pio_sm_get(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); return pio->rxf[sm]; } /*! \brief Determine if a state machine's RX FIFO is full * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \return true if the RX FIFO is full */ static inline bool pio_sm_is_rx_fifo_full(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); return (pio->fstat & (1u << (PIO_FSTAT_RXFULL_LSB + sm))) != 0; } /*! \brief Determine if a state machine's RX FIFO is empty * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \return true if the RX FIFO is empty */ static inline bool pio_sm_is_rx_fifo_empty(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); return (pio->fstat & (1u << (PIO_FSTAT_RXEMPTY_LSB + sm))) != 0; } /*! \brief Return the number of elements currently in a state machine's RX FIFO * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \return the number of elements in the RX FIFO */ static inline uint pio_sm_get_rx_fifo_level(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); uint bitoffs = PIO_FLEVEL_RX0_LSB + sm * (PIO_FLEVEL_RX1_LSB - PIO_FLEVEL_RX0_LSB); const uint32_t mask = PIO_FLEVEL_RX0_BITS >> PIO_FLEVEL_RX0_LSB; return (pio->flevel >> bitoffs) & mask; } /*! \brief Determine if a state machine's TX FIFO is full * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \return true if the TX FIFO is full */ static inline bool pio_sm_is_tx_fifo_full(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); return (pio->fstat & (1u << (PIO_FSTAT_TXFULL_LSB + sm))) != 0; } /*! \brief Determine if a state machine's TX FIFO is empty * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \return true if the TX FIFO is empty */ static inline bool pio_sm_is_tx_fifo_empty(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); return (pio->fstat & (1u << (PIO_FSTAT_TXEMPTY_LSB + sm))) != 0; } /*! \brief Return the number of elements currently in a state machine's TX FIFO * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \return the number of elements in the TX FIFO */ static inline uint pio_sm_get_tx_fifo_level(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); unsigned int bitoffs = PIO_FLEVEL_TX0_LSB + sm * (PIO_FLEVEL_TX1_LSB - PIO_FLEVEL_TX0_LSB); const uint32_t mask = PIO_FLEVEL_TX0_BITS >> PIO_FLEVEL_TX0_LSB; return (pio->flevel >> bitoffs) & mask; } /*! \brief Write a word of data to a state machine's TX FIFO, blocking if the FIFO is full * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param data the 32 bit data value */ static inline void pio_sm_put_blocking(PIO pio, uint sm, uint32_t data) { check_pio_param(pio); check_sm_param(sm); while (pio_sm_is_tx_fifo_full(pio, sm)) tight_loop_contents(); pio_sm_put(pio, sm, data); } /*! \brief Read a word of data from a state machine's RX FIFO, blocking if the FIFO is empty * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) */ static inline uint32_t pio_sm_get_blocking(PIO pio, uint sm) { check_pio_param(pio); check_sm_param(sm); while (pio_sm_is_rx_fifo_empty(pio, sm)) tight_loop_contents(); return pio_sm_get(pio, sm); } /*! \brief Empty out a state machine's TX FIFO * \ingroup hardware_pio * * This method executes `pull` instructions on the state machine until the TX * FIFO is empty. This disturbs the contents of the OSR, so see also * pio_sm_clear_fifos() which clears both FIFOs but leaves the state machine's * internal state undisturbed. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * * \sa pio_sm_clear_fifos() */ void pio_sm_drain_tx_fifo(PIO pio, uint sm); /*! \brief set the current clock divider for a state machine using a 16:8 fraction * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param div_int the integer part of the clock divider * \param div_frac the fractional part of the clock divider in 1/256s */ static inline void pio_sm_set_clkdiv_int_frac(PIO pio, uint sm, uint16_t div_int, uint8_t div_frac) { check_pio_param(pio); check_sm_param(sm); invalid_params_if(PIO, div_int == 0 && div_frac != 0); pio->sm[sm].clkdiv = (((uint)div_frac) << PIO_SM0_CLKDIV_FRAC_LSB) | (((uint)div_int) << PIO_SM0_CLKDIV_INT_LSB); } /*! \brief set the current clock divider for a state machine * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \param div the floating point clock divider */ static inline void pio_sm_set_clkdiv(PIO pio, uint sm, float div) { check_pio_param(pio); check_sm_param(sm); uint16_t div_int; uint8_t div_frac; pio_calculate_clkdiv_from_float(div, &div_int, &div_frac); pio_sm_set_clkdiv_int_frac(pio, sm, div_int, div_frac); } /*! \brief Clear a state machine's TX and RX FIFOs * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) */ static inline void pio_sm_clear_fifos(PIO pio, uint sm) { // changing the FIFO join state clears the fifo check_pio_param(pio); check_sm_param(sm); hw_xor_bits(&pio->sm[sm].shiftctrl, PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS); hw_xor_bits(&pio->sm[sm].shiftctrl, PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS); } /*! \brief Use a state machine to set a value on all pins for the PIO instance * \ingroup hardware_pio * * This method repeatedly reconfigures the target state machine's pin configuration and executes 'set' instructions to set values on all 32 pins, * before restoring the state machine's pin configuration to what it was. * * This method is provided as a convenience to set initial pin states, and should not be used against a state machine that is enabled. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) to use * \param pin_values the pin values to set */ void pio_sm_set_pins(PIO pio, uint sm, uint32_t pin_values); /*! \brief Use a state machine to set a value on multiple pins for the PIO instance * \ingroup hardware_pio * * This method repeatedly reconfigures the target state machine's pin configuration and executes 'set' instructions to set values on up to 32 pins, * before restoring the state machine's pin configuration to what it was. * * This method is provided as a convenience to set initial pin states, and should not be used against a state machine that is enabled. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) to use * \param pin_values the pin values to set (if the corresponding bit in pin_mask is set) * \param pin_mask a bit for each pin to indicate whether the corresponding pin_value for that pin should be applied. */ void pio_sm_set_pins_with_mask(PIO pio, uint sm, uint32_t pin_values, uint32_t pin_mask); /*! \brief Use a state machine to set the pin directions for multiple pins for the PIO instance * \ingroup hardware_pio * * This method repeatedly reconfigures the target state machine's pin configuration and executes 'set' instructions to set pin directions on up to 32 pins, * before restoring the state machine's pin configuration to what it was. * * This method is provided as a convenience to set initial pin directions, and should not be used against a state machine that is enabled. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) to use * \param pin_dirs the pin directions to set - 1 = out, 0 = in (if the corresponding bit in pin_mask is set) * \param pin_mask a bit for each pin to indicate whether the corresponding pin_value for that pin should be applied. */ void pio_sm_set_pindirs_with_mask(PIO pio, uint sm, uint32_t pin_dirs, uint32_t pin_mask); /*! \brief Use a state machine to set the same pin direction for multiple consecutive pins for the PIO instance * \ingroup hardware_pio * * This method repeatedly reconfigures the target state machine's pin configuration and executes 'set' instructions to set the pin direction on consecutive pins, * before restoring the state machine's pin configuration to what it was. * * This method is provided as a convenience to set initial pin directions, and should not be used against a state machine that is enabled. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) to use * \param pin_base the first pin to set a direction for * \param pin_count the count of consecutive pins to set the direction for * \param is_out the direction to set; true = out, false = in */ void pio_sm_set_consecutive_pindirs(PIO pio, uint sm, uint pin_base, uint pin_count, bool is_out); /*! \brief Mark a state machine as used * \ingroup hardware_pio * * Method for cooperative claiming of hardware. Will cause a panic if the state machine * is already claimed. Use of this method by libraries detects accidental * configurations that would fail in unpredictable ways. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) */ void pio_sm_claim(PIO pio, uint sm); /*! \brief Mark multiple state machines as used * \ingroup hardware_pio * * Method for cooperative claiming of hardware. Will cause a panic if any of the state machines * are already claimed. Use of this method by libraries detects accidental * configurations that would fail in unpredictable ways. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm_mask Mask of state machine indexes */ void pio_claim_sm_mask(PIO pio, uint sm_mask); /*! \brief Mark a state machine as no longer used * \ingroup hardware_pio * * Method for cooperative claiming of hardware. * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) */ void pio_sm_unclaim(PIO pio, uint sm); /*! \brief Claim a free state machine on a PIO instance * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param required if true the function will panic if none are available * \return the state machine index or -1 if required was false, and none were free */ int pio_claim_unused_sm(PIO pio, bool required); /*! \brief Determine if a PIO state machine is claimed * \ingroup hardware_pio * * \param pio The PIO instance; either \ref pio0 or \ref pio1 * \param sm State machine index (0..3) * \return true if claimed, false otherwise * \see pio_sm_claim * \see pio_claim_sm_mask */ bool pio_sm_is_claimed(PIO pio, uint sm); #ifdef __cplusplus } #endif #endif // _PIO_H_ ================================================ FILE: pico-sdk/src/rp2_common/hardware_pio/include/hardware/pio_instructions.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_PIO_INSTRUCTIONS_H #define _HARDWARE_PIO_INSTRUCTIONS_H #include "pico.h" /** \brief PIO instruction encoding * \defgroup pio_instructions pio_instructions * \ingroup hardware_pio * * Functions for generating PIO instruction encodings programmatically. In debug builds *`PARAM_ASSERTIONS_ENABLED_PIO_INSTRUCTIONS` can be set to 1 to enable validation of encoding function * parameters. * * For fuller descriptions of the instructions in question see the "RP2040 Datasheet" */ // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_PIO_INSTRUCTIONS, Enable/disable assertions in the PIO instructions, type=bool, default=0, group=pio_instructions #ifndef PARAM_ASSERTIONS_ENABLED_PIO_INSTRUCTIONS #define PARAM_ASSERTIONS_ENABLED_PIO_INSTRUCTIONS 0 #endif #ifdef __cplusplus extern "C" { #endif enum pio_instr_bits { pio_instr_bits_jmp = 0x0000, pio_instr_bits_wait = 0x2000, pio_instr_bits_in = 0x4000, pio_instr_bits_out = 0x6000, pio_instr_bits_push = 0x8000, pio_instr_bits_pull = 0x8080, pio_instr_bits_mov = 0xa000, pio_instr_bits_irq = 0xc000, pio_instr_bits_set = 0xe000, }; #ifndef NDEBUG #define _PIO_INVALID_IN_SRC 0x08u #define _PIO_INVALID_OUT_DEST 0x10u #define _PIO_INVALID_SET_DEST 0x20u #define _PIO_INVALID_MOV_SRC 0x40u #define _PIO_INVALID_MOV_DEST 0x80u #else #define _PIO_INVALID_IN_SRC 0u #define _PIO_INVALID_OUT_DEST 0u #define _PIO_INVALID_SET_DEST 0u #define _PIO_INVALID_MOV_SRC 0u #define _PIO_INVALID_MOV_DEST 0u #endif /*! \brief Enumeration of values to pass for source/destination args for instruction encoding functions * \ingroup pio_instructions * * \note Not all values are suitable for all functions. Validity is only checked in debug mode when * `PARAM_ASSERTIONS_ENABLED_PIO_INSTRUCTIONS` is 1 */ enum pio_src_dest { pio_pins = 0u, pio_x = 1u, pio_y = 2u, pio_null = 3u | _PIO_INVALID_SET_DEST | _PIO_INVALID_MOV_DEST, pio_pindirs = 4u | _PIO_INVALID_IN_SRC | _PIO_INVALID_MOV_SRC | _PIO_INVALID_MOV_DEST, pio_exec_mov = 4u | _PIO_INVALID_IN_SRC | _PIO_INVALID_OUT_DEST | _PIO_INVALID_SET_DEST | _PIO_INVALID_MOV_SRC, pio_status = 5u | _PIO_INVALID_IN_SRC | _PIO_INVALID_OUT_DEST | _PIO_INVALID_SET_DEST | _PIO_INVALID_MOV_DEST, pio_pc = 5u | _PIO_INVALID_IN_SRC | _PIO_INVALID_SET_DEST | _PIO_INVALID_MOV_SRC, pio_isr = 6u | _PIO_INVALID_SET_DEST, pio_osr = 7u | _PIO_INVALID_OUT_DEST | _PIO_INVALID_SET_DEST, pio_exec_out = 7u | _PIO_INVALID_IN_SRC | _PIO_INVALID_SET_DEST | _PIO_INVALID_MOV_SRC | _PIO_INVALID_MOV_DEST, }; static inline uint _pio_major_instr_bits(uint instr) { return instr & 0xe000u; } static inline uint _pio_encode_instr_and_args(enum pio_instr_bits instr_bits, uint arg1, uint arg2) { valid_params_if(PIO_INSTRUCTIONS, arg1 <= 0x7); #if PARAM_ASSERTIONS_ENABLED(PIO_INSTRUCTIONS) uint32_t major = _pio_major_instr_bits(instr_bits); if (major == pio_instr_bits_in || major == pio_instr_bits_out) { assert(arg2 && arg2 <= 32); } else { assert(arg2 <= 31); } #endif return instr_bits | (arg1 << 5u) | (arg2 & 0x1fu); } static inline uint _pio_encode_instr_and_src_dest(enum pio_instr_bits instr_bits, enum pio_src_dest dest, uint value) { return _pio_encode_instr_and_args(instr_bits, dest & 7u, value); } /*! \brief Encode just the delay slot bits of an instruction * \ingroup pio_instructions * * \note This function does not return a valid instruction encoding; instead it returns an encoding of the delay * slot suitable for `OR`ing with the result of an encoding function for an actual instruction. Care should be taken when * combining the results of this function with the results of \ref pio_encode_sideset and \ref pio_encode_sideset_opt * as they share the same bits within the instruction encoding. * * \param cycles the number of cycles 0-31 (or less if side set is being used) * \return the delay slot bits to be ORed with an instruction encoding */ static inline uint pio_encode_delay(uint cycles) { // note that the maximum cycles will be smaller if sideset_bit_count > 0 valid_params_if(PIO_INSTRUCTIONS, cycles <= 0x1f); return cycles << 8u; } /*! \brief Encode just the side set bits of an instruction (in non optional side set mode) * \ingroup pio_instructions * * \note This function does not return a valid instruction encoding; instead it returns an encoding of the side set bits * suitable for `OR`ing with the result of an encoding function for an actual instruction. Care should be taken when * combining the results of this function with the results of \ref pio_encode_delay as they share the same bits * within the instruction encoding. * * \param sideset_bit_count number of side set bits as would be specified via `.sideset` in pioasm * \param value the value to sideset on the pins * \return the side set bits to be ORed with an instruction encoding */ static inline uint pio_encode_sideset(uint sideset_bit_count, uint value) { valid_params_if(PIO_INSTRUCTIONS, sideset_bit_count >= 1 && sideset_bit_count <= 5); valid_params_if(PIO_INSTRUCTIONS, value <= ((1u << sideset_bit_count) - 1)); return value << (13u - sideset_bit_count); } /*! \brief Encode just the side set bits of an instruction (in optional -`opt` side set mode) * \ingroup pio_instructions * * \note This function does not return a valid instruction encoding; instead it returns an encoding of the side set bits * suitable for `OR`ing with the result of an encoding function for an actual instruction. Care should be taken when * combining the results of this function with the results of \ref pio_encode_delay as they share the same bits * within the instruction encoding. * * \param sideset_bit_count number of side set bits as would be specified via `.sideset opt` in pioasm * \param value the value to sideset on the pins * \return the side set bits to be ORed with an instruction encoding */ static inline uint pio_encode_sideset_opt(uint sideset_bit_count, uint value) { valid_params_if(PIO_INSTRUCTIONS, sideset_bit_count >= 1 && sideset_bit_count <= 4); valid_params_if(PIO_INSTRUCTIONS, value <= ((1u << sideset_bit_count) - 1)); return 0x1000u | value << (12u - sideset_bit_count); } /*! \brief Encode an unconditional JMP instruction * \ingroup pio_instructions * * This is the equivalent of `JMP ` * * \param addr The target address 0-31 (an absolute address within the PIO instruction memory) * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_jmp(uint addr) { return _pio_encode_instr_and_args(pio_instr_bits_jmp, 0, addr); } /*! \brief Encode a conditional JMP if scratch X zero instruction * \ingroup pio_instructions * * This is the equivalent of `JMP !X ` * * \param addr The target address 0-31 (an absolute address within the PIO instruction memory) * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_jmp_not_x(uint addr) { return _pio_encode_instr_and_args(pio_instr_bits_jmp, 1, addr); } /*! \brief Encode a conditional JMP if scratch X non-zero (and post-decrement X) instruction * \ingroup pio_instructions * * This is the equivalent of `JMP X-- ` * * \param addr The target address 0-31 (an absolute address within the PIO instruction memory) * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_jmp_x_dec(uint addr) { return _pio_encode_instr_and_args(pio_instr_bits_jmp, 2, addr); } /*! \brief Encode a conditional JMP if scratch Y zero instruction * \ingroup pio_instructions * * This is the equivalent of `JMP !Y ` * * \param addr The target address 0-31 (an absolute address within the PIO instruction memory) * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_jmp_not_y(uint addr) { return _pio_encode_instr_and_args(pio_instr_bits_jmp, 3, addr); } /*! \brief Encode a conditional JMP if scratch Y non-zero (and post-decrement Y) instruction * \ingroup pio_instructions * * This is the equivalent of `JMP Y-- ` * * \param addr The target address 0-31 (an absolute address within the PIO instruction memory) * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_jmp_y_dec(uint addr) { return _pio_encode_instr_and_args(pio_instr_bits_jmp, 4, addr); } /*! \brief Encode a conditional JMP if scratch X not equal scratch Y instruction * \ingroup pio_instructions * * This is the equivalent of `JMP X!=Y ` * * \param addr The target address 0-31 (an absolute address within the PIO instruction memory) * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_jmp_x_ne_y(uint addr) { return _pio_encode_instr_and_args(pio_instr_bits_jmp, 5, addr); } /*! \brief Encode a conditional JMP if input pin high instruction * \ingroup pio_instructions * * This is the equivalent of `JMP PIN ` * * \param addr The target address 0-31 (an absolute address within the PIO instruction memory) * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_jmp_pin(uint addr) { return _pio_encode_instr_and_args(pio_instr_bits_jmp, 6, addr); } /*! \brief Encode a conditional JMP if output shift register not empty instruction * \ingroup pio_instructions * * This is the equivalent of `JMP !OSRE ` * * \param addr The target address 0-31 (an absolute address within the PIO instruction memory) * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_jmp_not_osre(uint addr) { return _pio_encode_instr_and_args(pio_instr_bits_jmp, 7, addr); } static inline uint _pio_encode_irq(bool relative, uint irq) { valid_params_if(PIO_INSTRUCTIONS, irq <= 7); return (relative ? 0x10u : 0x0u) | irq; } /*! \brief Encode a WAIT for GPIO pin instruction * \ingroup pio_instructions * * This is the equivalent of `WAIT GPIO ` * * \param polarity true for `WAIT 1`, false for `WAIT 0` * \param gpio The real GPIO number 0-31 * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_wait_gpio(bool polarity, uint gpio) { return _pio_encode_instr_and_args(pio_instr_bits_wait, 0u | (polarity ? 4u : 0u), gpio); } /*! \brief Encode a WAIT for pin instruction * \ingroup pio_instructions * * This is the equivalent of `WAIT PIN ` * * \param polarity true for `WAIT 1`, false for `WAIT 0` * \param pin The pin number 0-31 relative to the executing SM's input pin mapping * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_wait_pin(bool polarity, uint pin) { return _pio_encode_instr_and_args(pio_instr_bits_wait, 1u | (polarity ? 4u : 0u), pin); } /*! \brief Encode a WAIT for IRQ instruction * \ingroup pio_instructions * * This is the equivalent of `WAIT IRQ ` * * \param polarity true for `WAIT 1`, false for `WAIT 0` * \param relative true for a `WAIT IRQ REL`, false for regular `WAIT IRQ ` * \param irq the irq number 0-7 * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_wait_irq(bool polarity, bool relative, uint irq) { valid_params_if(PIO_INSTRUCTIONS, irq <= 7); return _pio_encode_instr_and_args(pio_instr_bits_wait, 2u | (polarity ? 4u : 0u), _pio_encode_irq(relative, irq)); } /*! \brief Encode an IN instruction * \ingroup pio_instructions * * This is the equivalent of `IN , ` * * \param src The source to take data from * \param count The number of bits 1-32 * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_in(enum pio_src_dest src, uint count) { valid_params_if(PIO_INSTRUCTIONS, !(src & _PIO_INVALID_IN_SRC)); return _pio_encode_instr_and_src_dest(pio_instr_bits_in, src, count); } /*! \brief Encode an OUT instruction * \ingroup pio_instructions * * This is the equivalent of `OUT , ` * * \param dest The destination to write data to * \param count The number of bits 1-32 * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_out(enum pio_src_dest dest, uint count) { valid_params_if(PIO_INSTRUCTIONS, !(dest & _PIO_INVALID_OUT_DEST)); return _pio_encode_instr_and_src_dest(pio_instr_bits_out, dest, count); } /*! \brief Encode a PUSH instruction * \ingroup pio_instructions * * This is the equivalent of `PUSH , ` * * \param if_full true for `PUSH IF_FULL ...`, false for `PUSH ...` * \param block true for `PUSH ... BLOCK`, false for `PUSH ...` * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_push(bool if_full, bool block) { return _pio_encode_instr_and_args(pio_instr_bits_push, (if_full ? 2u : 0u) | (block ? 1u : 0u), 0); } /*! \brief Encode a PULL instruction * \ingroup pio_instructions * * This is the equivalent of `PULL , ` * * \param if_empty true for `PULL IF_EMPTY ...`, false for `PULL ...` * \param block true for `PULL ... BLOCK`, false for `PULL ...` * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_pull(bool if_empty, bool block) { return _pio_encode_instr_and_args(pio_instr_bits_pull, (if_empty ? 2u : 0u) | (block ? 1u : 0u), 0); } /*! \brief Encode a MOV instruction * \ingroup pio_instructions * * This is the equivalent of `MOV , ` * * \param dest The destination to write data to * \param src The source to take data from * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_mov(enum pio_src_dest dest, enum pio_src_dest src) { valid_params_if(PIO_INSTRUCTIONS, !(dest & _PIO_INVALID_MOV_DEST)); valid_params_if(PIO_INSTRUCTIONS, !(src & _PIO_INVALID_MOV_SRC)); return _pio_encode_instr_and_src_dest(pio_instr_bits_mov, dest, src & 7u); } /*! \brief Encode a MOV instruction with bit invert * \ingroup pio_instructions * * This is the equivalent of `MOV , ~` * * \param dest The destination to write inverted data to * \param src The source to take data from * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_mov_not(enum pio_src_dest dest, enum pio_src_dest src) { valid_params_if(PIO_INSTRUCTIONS, !(dest & _PIO_INVALID_MOV_DEST)); valid_params_if(PIO_INSTRUCTIONS, !(src & _PIO_INVALID_MOV_SRC)); return _pio_encode_instr_and_src_dest(pio_instr_bits_mov, dest, (1u << 3u) | (src & 7u)); } /*! \brief Encode a MOV instruction with bit reverse * \ingroup pio_instructions * * This is the equivalent of `MOV , ::` * * \param dest The destination to write bit reversed data to * \param src The source to take data from * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_mov_reverse(enum pio_src_dest dest, enum pio_src_dest src) { valid_params_if(PIO_INSTRUCTIONS, !(dest & _PIO_INVALID_MOV_DEST)); valid_params_if(PIO_INSTRUCTIONS, !(src & _PIO_INVALID_MOV_SRC)); return _pio_encode_instr_and_src_dest(pio_instr_bits_mov, dest, (2u << 3u) | (src & 7u)); } /*! \brief Encode a IRQ SET instruction * \ingroup pio_instructions * * This is the equivalent of `IRQ SET ` * * \param relative true for a `IRQ SET REL`, false for regular `IRQ SET ` * \param irq the irq number 0-7 * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_irq_set(bool relative, uint irq) { return _pio_encode_instr_and_args(pio_instr_bits_irq, 0, _pio_encode_irq(relative, irq)); } /*! \brief Encode a IRQ WAIT instruction * \ingroup pio_instructions * * This is the equivalent of `IRQ WAIT ` * * \param relative true for a `IRQ WAIT REL`, false for regular `IRQ WAIT ` * \param irq the irq number 0-7 * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_irq_wait(bool relative, uint irq) { return _pio_encode_instr_and_args(pio_instr_bits_irq, 1, _pio_encode_irq(relative, irq)); } /*! \brief Encode a IRQ CLEAR instruction * \ingroup pio_instructions * * This is the equivalent of `IRQ CLEAR ` * * \param relative true for a `IRQ CLEAR REL`, false for regular `IRQ CLEAR ` * \param irq the irq number 0-7 * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_irq_clear(bool relative, uint irq) { return _pio_encode_instr_and_args(pio_instr_bits_irq, 2, _pio_encode_irq(relative, irq)); } /*! \brief Encode a SET instruction * \ingroup pio_instructions * * This is the equivalent of `SET , ` * * \param dest The destination to apply the value to * \param value The value 0-31 * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_set(enum pio_src_dest dest, uint value) { valid_params_if(PIO_INSTRUCTIONS, !(dest & _PIO_INVALID_SET_DEST)); return _pio_encode_instr_and_src_dest(pio_instr_bits_set, dest, value); } /*! \brief Encode a NOP instruction * \ingroup pio_instructions * * This is the equivalent of `NOP` which is itself encoded as `MOV y, y` * * \return The instruction encoding with 0 delay and no side set value * \see pio_encode_delay, pio_encode_sideset, pio_encode_sideset_opt */ static inline uint pio_encode_nop(void) { return pio_encode_mov(pio_y, pio_y); } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_pio/pio.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/claim.h" #include "hardware/pio.h" #include "hardware/pio_instructions.h" // sanity check check_hw_layout(pio_hw_t, sm[0].clkdiv, PIO_SM0_CLKDIV_OFFSET); check_hw_layout(pio_hw_t, sm[1].clkdiv, PIO_SM1_CLKDIV_OFFSET); check_hw_layout(pio_hw_t, instr_mem[0], PIO_INSTR_MEM0_OFFSET); check_hw_layout(pio_hw_t, inte0, PIO_IRQ0_INTE_OFFSET); check_hw_layout(pio_hw_t, txf[1], PIO_TXF1_OFFSET); check_hw_layout(pio_hw_t, rxf[3], PIO_RXF3_OFFSET); check_hw_layout(pio_hw_t, ints1, PIO_IRQ1_INTS_OFFSET); static_assert(NUM_PIO_STATE_MACHINES * NUM_PIOS <= 8, ""); static uint8_t claimed; void pio_sm_claim(PIO pio, uint sm) { check_sm_param(sm); uint which = pio_get_index(pio); if (which) { hw_claim_or_assert(&claimed, NUM_PIO_STATE_MACHINES + sm, "PIO 1 SM (%d - 4) already claimed"); } else { hw_claim_or_assert(&claimed, sm, "PIO 0 SM %d already claimed"); } } void pio_claim_sm_mask(PIO pio, uint sm_mask) { for(uint i = 0; sm_mask; i++, sm_mask >>= 1u) { if (sm_mask & 1u) pio_sm_claim(pio, i); } } void pio_sm_unclaim(PIO pio, uint sm) { check_sm_param(sm); uint which = pio_get_index(pio); hw_claim_clear(&claimed, which * NUM_PIO_STATE_MACHINES + sm); } int pio_claim_unused_sm(PIO pio, bool required) { // PIO index is 0 or 1. uint which = pio_get_index(pio); uint base = which * NUM_PIO_STATE_MACHINES; int index = hw_claim_unused_from_range((uint8_t*)&claimed, required, base, base + NUM_PIO_STATE_MACHINES - 1, "No PIO state machines are available"); return index >= (int)base ? index - (int)base : -1; } bool pio_sm_is_claimed(PIO pio, uint sm) { check_sm_param(sm); uint which = pio_get_index(pio); return hw_is_claimed(&claimed, which * NUM_PIO_STATE_MACHINES + sm); } static_assert(PIO_INSTRUCTION_COUNT <= 32, ""); static uint32_t _used_instruction_space[2]; static int _pio_find_offset_for_program(PIO pio, const pio_program_t *program) { assert(program->length <= PIO_INSTRUCTION_COUNT); uint32_t used_mask = _used_instruction_space[pio_get_index(pio)]; uint32_t program_mask = (1u << program->length) - 1; if (program->origin >= 0) { if (program->origin > 32 - program->length) return -1; return used_mask & (program_mask << program->origin) ? -1 : program->origin; } else { // work down from the top always for (int i = 32 - program->length; i >= 0; i--) { if (!(used_mask & (program_mask << (uint) i))) { return i; } } return -1; } } bool pio_can_add_program(PIO pio, const pio_program_t *program) { uint32_t save = hw_claim_lock(); bool rc = -1 != _pio_find_offset_for_program(pio, program); hw_claim_unlock(save); return rc; } static bool _pio_can_add_program_at_offset(PIO pio, const pio_program_t *program, uint offset) { valid_params_if(PIO, offset < PIO_INSTRUCTION_COUNT); valid_params_if(PIO, offset + program->length <= PIO_INSTRUCTION_COUNT); if (program->origin >= 0 && (uint)program->origin != offset) return false; uint32_t used_mask = _used_instruction_space[pio_get_index(pio)]; uint32_t program_mask = (1u << program->length) - 1; return !(used_mask & (program_mask << offset)); } bool pio_can_add_program_at_offset(PIO pio, const pio_program_t *program, uint offset) { uint32_t save = hw_claim_lock(); bool rc = _pio_can_add_program_at_offset(pio, program, offset); hw_claim_unlock(save); return rc; } static void _pio_add_program_at_offset(PIO pio, const pio_program_t *program, uint offset) { if (!_pio_can_add_program_at_offset(pio, program, offset)) { panic("No program space"); } for (uint i = 0; i < program->length; ++i) { uint16_t instr = program->instructions[i]; pio->instr_mem[offset + i] = pio_instr_bits_jmp != _pio_major_instr_bits(instr) ? instr : instr + offset; } uint32_t program_mask = (1u << program->length) - 1; _used_instruction_space[pio_get_index(pio)] |= program_mask << offset; } // these assert if unable uint pio_add_program(PIO pio, const pio_program_t *program) { uint32_t save = hw_claim_lock(); int offset = _pio_find_offset_for_program(pio, program); if (offset < 0) { panic("No program space"); } _pio_add_program_at_offset(pio, program, (uint)offset); hw_claim_unlock(save); return (uint)offset; } void pio_add_program_at_offset(PIO pio, const pio_program_t *program, uint offset) { uint32_t save = hw_claim_lock(); _pio_add_program_at_offset(pio, program, offset); hw_claim_unlock(save); } void pio_remove_program(PIO pio, const pio_program_t *program, uint loaded_offset) { uint32_t program_mask = (1u << program->length) - 1; program_mask <<= loaded_offset; uint32_t save = hw_claim_lock(); assert(program_mask == (_used_instruction_space[pio_get_index(pio)] & program_mask)); _used_instruction_space[pio_get_index(pio)] &= ~program_mask; hw_claim_unlock(save); } void pio_clear_instruction_memory(PIO pio) { uint32_t save = hw_claim_lock(); _used_instruction_space[pio_get_index(pio)] = 0; for(uint i=0;iinstr_mem[i] = pio_encode_jmp(i); } hw_claim_unlock(save); } // Set the value of all PIO pins. This is done by forcibly executing // instructions on a "victim" state machine, sm. Ideally you should choose one // which is not currently running a program. This is intended for one-time // setup of initial pin states. void pio_sm_set_pins(PIO pio, uint sm, uint32_t pins) { check_pio_param(pio); check_sm_param(sm); uint32_t pinctrl_saved = pio->sm[sm].pinctrl; uint32_t execctrl_saved = pio->sm[sm].execctrl; hw_clear_bits(&pio->sm[sm].execctrl, 1u << PIO_SM0_EXECCTRL_OUT_STICKY_LSB); uint remaining = 32; uint base = 0; while (remaining) { uint decrement = remaining > 5 ? 5 : remaining; pio->sm[sm].pinctrl = (decrement << PIO_SM0_PINCTRL_SET_COUNT_LSB) | (base << PIO_SM0_PINCTRL_SET_BASE_LSB); pio_sm_exec(pio, sm, pio_encode_set(pio_pins, pins & 0x1fu)); remaining -= decrement; base += decrement; pins >>= 5; } pio->sm[sm].pinctrl = pinctrl_saved; pio->sm[sm].execctrl = execctrl_saved; } void pio_sm_set_pins_with_mask(PIO pio, uint sm, uint32_t pinvals, uint32_t pin_mask) { check_pio_param(pio); check_sm_param(sm); uint32_t pinctrl_saved = pio->sm[sm].pinctrl; uint32_t execctrl_saved = pio->sm[sm].execctrl; hw_clear_bits(&pio->sm[sm].execctrl, 1u << PIO_SM0_EXECCTRL_OUT_STICKY_LSB); while (pin_mask) { uint base = (uint)__builtin_ctz(pin_mask); pio->sm[sm].pinctrl = (1u << PIO_SM0_PINCTRL_SET_COUNT_LSB) | (base << PIO_SM0_PINCTRL_SET_BASE_LSB); pio_sm_exec(pio, sm, pio_encode_set(pio_pins, (pinvals >> base) & 0x1u)); pin_mask &= pin_mask - 1; } pio->sm[sm].pinctrl = pinctrl_saved; pio->sm[sm].execctrl = execctrl_saved; } void pio_sm_set_pindirs_with_mask(PIO pio, uint sm, uint32_t pindirs, uint32_t pin_mask) { check_pio_param(pio); check_sm_param(sm); uint32_t pinctrl_saved = pio->sm[sm].pinctrl; uint32_t execctrl_saved = pio->sm[sm].execctrl; hw_clear_bits(&pio->sm[sm].execctrl, 1u << PIO_SM0_EXECCTRL_OUT_STICKY_LSB); while (pin_mask) { uint base = (uint)__builtin_ctz(pin_mask); pio->sm[sm].pinctrl = (1u << PIO_SM0_PINCTRL_SET_COUNT_LSB) | (base << PIO_SM0_PINCTRL_SET_BASE_LSB); pio_sm_exec(pio, sm, pio_encode_set(pio_pindirs, (pindirs >> base) & 0x1u)); pin_mask &= pin_mask - 1; } pio->sm[sm].pinctrl = pinctrl_saved; pio->sm[sm].execctrl = execctrl_saved; } void pio_sm_set_consecutive_pindirs(PIO pio, uint sm, uint pin, uint count, bool is_out) { check_pio_param(pio); check_sm_param(sm); valid_params_if(PIO, pin < 32u); uint32_t pinctrl_saved = pio->sm[sm].pinctrl; uint32_t execctrl_saved = pio->sm[sm].execctrl; hw_clear_bits(&pio->sm[sm].execctrl, 1u << PIO_SM0_EXECCTRL_OUT_STICKY_LSB); uint pindir_val = is_out ? 0x1f : 0; while (count > 5) { pio->sm[sm].pinctrl = (5u << PIO_SM0_PINCTRL_SET_COUNT_LSB) | (pin << PIO_SM0_PINCTRL_SET_BASE_LSB); pio_sm_exec(pio, sm, pio_encode_set(pio_pindirs, pindir_val)); count -= 5; pin = (pin + 5) & 0x1f; } pio->sm[sm].pinctrl = (count << PIO_SM0_PINCTRL_SET_COUNT_LSB) | (pin << PIO_SM0_PINCTRL_SET_BASE_LSB); pio_sm_exec(pio, sm, pio_encode_set(pio_pindirs, pindir_val)); pio->sm[sm].pinctrl = pinctrl_saved; pio->sm[sm].execctrl = execctrl_saved; } void pio_sm_init(PIO pio, uint sm, uint initial_pc, const pio_sm_config *config) { valid_params_if(PIO, initial_pc < PIO_INSTRUCTION_COUNT); // Halt the machine, set some sensible defaults pio_sm_set_enabled(pio, sm, false); if (config) { pio_sm_set_config(pio, sm, config); } else { pio_sm_config c = pio_get_default_sm_config(); pio_sm_set_config(pio, sm, &c); } pio_sm_clear_fifos(pio, sm); // Clear FIFO debug flags const uint32_t fdebug_sm_mask = (1u << PIO_FDEBUG_TXOVER_LSB) | (1u << PIO_FDEBUG_RXUNDER_LSB) | (1u << PIO_FDEBUG_TXSTALL_LSB) | (1u << PIO_FDEBUG_RXSTALL_LSB); pio->fdebug = fdebug_sm_mask << sm; // Finally, clear some internal SM state pio_sm_restart(pio, sm); pio_sm_clkdiv_restart(pio, sm); pio_sm_exec(pio, sm, pio_encode_jmp(initial_pc)); } void pio_sm_drain_tx_fifo(PIO pio, uint sm) { uint instr = (pio->sm[sm].shiftctrl & PIO_SM0_SHIFTCTRL_AUTOPULL_BITS) ? pio_encode_out(pio_null, 32) : pio_encode_pull(false, false); while (!pio_sm_is_tx_fifo_empty(pio, sm)) { pio_sm_exec(pio, sm, instr); } } ================================================ FILE: pico-sdk/src/rp2_common/hardware_pll/CMakeLists.txt ================================================ pico_simple_hardware_target(pll) pico_mirrored_target_link_libraries(hardware_pll INTERFACE hardware_clocks) ================================================ FILE: pico-sdk/src/rp2_common/hardware_pll/include/hardware/pll.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_PLL_H #define _HARDWARE_PLL_H #include "pico.h" #include "hardware/structs/pll.h" #ifdef __cplusplus extern "C" { #endif /** \file hardware/pll.h * \defgroup hardware_pll hardware_pll * * Phase Locked Loop control APIs * * There are two PLLs in RP2040. They are: * - pll_sys - Used to generate up to a 133MHz system clock * - pll_usb - Used to generate a 48MHz USB reference clock * * For details on how the PLLs are calculated, please refer to the RP2040 datasheet. */ typedef pll_hw_t *PLL; #define pll_sys pll_sys_hw #define pll_usb pll_usb_hw #ifndef PICO_PLL_VCO_MIN_FREQ_KHZ #ifndef PICO_PLL_VCO_MIN_FREQ_MHZ #define PICO_PLL_VCO_MIN_FREQ_KHZ (750 * KHZ) #else #define PICO_PLL_VCO_MIN_FREQ_KHZ (PICO_PLL_VCO_MIN_FREQ_MHZ * KHZ) #endif #endif #ifndef PICO_PLL_VCO_MAX_FREQ_KHZ #ifndef PICO_PLL_VCO_MAX_FREQ_MHZ #define PICO_PLL_VCO_MAX_FREQ_KHZ (1600 * KHZ) #else #define PICO_PLL_VCO_MAX_FREQ_KHZ (PICO_PLL_VCO_MAX_FREQ_MHZ * KHZ) #endif #endif /*! \brief Initialise specified PLL. * \ingroup hardware_pll * \param pll pll_sys or pll_usb * \param ref_div Input clock divider. * \param vco_freq Requested output from the VCO (voltage controlled oscillator) * \param post_div1 Post Divider 1 - range 1-7. Must be >= post_div2 * \param post_div2 Post Divider 2 - range 1-7 */ void pll_init(PLL pll, uint ref_div, uint vco_freq, uint post_div1, uint post_div2); /*! \brief Release/uninitialise specified PLL. * \ingroup hardware_pll * * This will turn off the power to the specified PLL. Note this function does not currently check if * the PLL is in use before powering it off so should be used with care. * * \param pll pll_sys or pll_usb */ void pll_deinit(PLL pll); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_pll/pll.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // For frequency and PLL definitions etc. #include "hardware/clocks.h" #include "hardware/pll.h" #include "hardware/resets.h" /// \tag::pll_init_calculations[] void pll_init(PLL pll, uint refdiv, uint vco_freq, uint post_div1, uint post_div2) { uint32_t ref_freq = XOSC_KHZ * KHZ / refdiv; // Check vco freq is in an acceptable range assert(vco_freq >= (PICO_PLL_VCO_MIN_FREQ_KHZ * KHZ) && vco_freq <= (PICO_PLL_VCO_MAX_FREQ_KHZ * KHZ)); // What are we multiplying the reference clock by to get the vco freq // (The regs are called div, because you divide the vco output and compare it to the refclk) uint32_t fbdiv = vco_freq / ref_freq; /// \end::pll_init_calculations[] // fbdiv assert(fbdiv >= 16 && fbdiv <= 320); // Check divider ranges assert((post_div1 >= 1 && post_div1 <= 7) && (post_div2 >= 1 && post_div2 <= 7)); // post_div1 should be >= post_div2 // from appnote page 11 // postdiv1 is designed to operate with a higher input frequency than postdiv2 // Check that reference frequency is no greater than vco / 16 assert(ref_freq <= (vco_freq / 16)); // div1 feeds into div2 so if div1 is 5 and div2 is 2 then you get a divide by 10 uint32_t pdiv = (post_div1 << PLL_PRIM_POSTDIV1_LSB) | (post_div2 << PLL_PRIM_POSTDIV2_LSB); /// \tag::pll_init_finish[] if ((pll->cs & PLL_CS_LOCK_BITS) && (refdiv == (pll->cs & PLL_CS_REFDIV_BITS)) && (fbdiv == (pll->fbdiv_int & PLL_FBDIV_INT_BITS)) && (pdiv == (pll->prim & (PLL_PRIM_POSTDIV1_BITS | PLL_PRIM_POSTDIV2_BITS)))) { // do not disrupt PLL that is already correctly configured and operating return; } uint32_t pll_reset = (pll_usb_hw == pll) ? RESETS_RESET_PLL_USB_BITS : RESETS_RESET_PLL_SYS_BITS; reset_block(pll_reset); unreset_block_wait(pll_reset); // Load VCO-related dividers before starting VCO pll->cs = refdiv; pll->fbdiv_int = fbdiv; // Turn on PLL uint32_t power = PLL_PWR_PD_BITS | // Main power PLL_PWR_VCOPD_BITS; // VCO Power hw_clear_bits(&pll->pwr, power); // Wait for PLL to lock while (!(pll->cs & PLL_CS_LOCK_BITS)) tight_loop_contents(); // Set up post dividers pll->prim = pdiv; // Turn on post divider hw_clear_bits(&pll->pwr, PLL_PWR_POSTDIVPD_BITS); /// \end::pll_init_finish[] } void pll_deinit(PLL pll) { // todo: Make sure there are no sources running from this pll? pll->pwr = PLL_PWR_BITS; } ================================================ FILE: pico-sdk/src/rp2_common/hardware_pwm/CMakeLists.txt ================================================ pico_simple_hardware_headers_only_target(pwm) ================================================ FILE: pico-sdk/src/rp2_common/hardware_pwm/include/hardware/pwm.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_PWM_H #define _HARDWARE_PWM_H #include "pico.h" #include "hardware/structs/pwm.h" #include "hardware/regs/dreq.h" #ifdef __cplusplus extern "C" { #endif // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_PWM, Enable/disable assertions in the PWM module, type=bool, default=0, group=hardware_pwm #ifndef PARAM_ASSERTIONS_ENABLED_PWM #define PARAM_ASSERTIONS_ENABLED_PWM 0 #endif /** \file hardware/pwm.h * \defgroup hardware_pwm hardware_pwm * * Hardware Pulse Width Modulation (PWM) API * * The RP2040 PWM block has 8 identical slices. Each slice can drive two PWM output signals, or * measure the frequency or duty cycle of an input signal. This gives a total of up to 16 controllable * PWM outputs. All 30 GPIOs can be driven by the PWM block. * * The PWM hardware functions by continuously comparing the input value to a free-running counter. This produces a * toggling output where the amount of time spent at the high output level is proportional to the input value. The fraction of * time spent at the high signal level is known as the duty cycle of the signal. * * The default behaviour of a PWM slice is to count upward until the wrap value (\ref pwm_config_set_wrap) is reached, and then * immediately wrap to 0. PWM slices also offer a phase-correct mode, where the counter starts to count downward after * reaching TOP, until it reaches 0 again. * * \subsection pwm_example Example * \addtogroup hardware_pwm * \include hello_pwm.c */ /** \brief PWM Divider mode settings * \ingroup hardware_pwm * */ enum pwm_clkdiv_mode { PWM_DIV_FREE_RUNNING = 0, ///< Free-running counting at rate dictated by fractional divider PWM_DIV_B_HIGH = 1, ///< Fractional divider is gated by the PWM B pin PWM_DIV_B_RISING = 2, ///< Fractional divider advances with each rising edge of the PWM B pin PWM_DIV_B_FALLING = 3 ///< Fractional divider advances with each falling edge of the PWM B pin }; enum pwm_chan { PWM_CHAN_A = 0, PWM_CHAN_B = 1 }; typedef struct { uint32_t csr; uint32_t div; uint32_t top; } pwm_config; static inline void check_slice_num_param(__unused uint slice_num) { valid_params_if(PWM, slice_num < NUM_PWM_SLICES); } /** \brief Determine the PWM slice that is attached to the specified GPIO * \ingroup hardware_pwm * * \return The PWM slice number that controls the specified GPIO. */ static inline uint pwm_gpio_to_slice_num(uint gpio) { valid_params_if(PWM, gpio < NUM_BANK0_GPIOS); return (gpio >> 1u) & 7u; } /** \brief Determine the PWM channel that is attached to the specified GPIO. * \ingroup hardware_pwm * * Each slice 0 to 7 has two channels, A and B. * * \return The PWM channel that controls the specified GPIO. */ static inline uint pwm_gpio_to_channel(uint gpio) { valid_params_if(PWM, gpio < NUM_BANK0_GPIOS); return gpio & 1u; } /** \brief Set phase correction in a PWM configuration * \ingroup hardware_pwm * * \param c PWM configuration struct to modify * \param phase_correct true to set phase correct modulation, false to set trailing edge * * Setting phase control to true means that instead of wrapping back to zero when the wrap point is reached, * the PWM starts counting back down. The output frequency is halved when phase-correct mode is enabled. */ static inline void pwm_config_set_phase_correct(pwm_config *c, bool phase_correct) { c->csr = (c->csr & ~PWM_CH0_CSR_PH_CORRECT_BITS) | (bool_to_bit(phase_correct) << PWM_CH0_CSR_PH_CORRECT_LSB); } /** \brief Set PWM clock divider in a PWM configuration * \ingroup hardware_pwm * * \param c PWM configuration struct to modify * \param div Value to divide counting rate by. Must be greater than or equal to 1. * * If the divide mode is free-running, the PWM counter runs at clk_sys / div. * Otherwise, the divider reduces the rate of events seen on the B pin input (level or edge) * before passing them on to the PWM counter. */ static inline void pwm_config_set_clkdiv(pwm_config *c, float div) { valid_params_if(PWM, div >= 1.f && div < 256.f); c->div = (uint32_t)(div * (float)(1u << PWM_CH0_DIV_INT_LSB)); } /** \brief Set PWM clock divider in a PWM configuration using an 8:4 fractional value * \ingroup hardware_pwm * * \param c PWM configuration struct to modify * \param integer 8 bit integer part of the clock divider. Must be greater than or equal to 1. * \param fract 4 bit fractional part of the clock divider * * If the divide mode is free-running, the PWM counter runs at clk_sys / div. * Otherwise, the divider reduces the rate of events seen on the B pin input (level or edge) * before passing them on to the PWM counter. */ static inline void pwm_config_set_clkdiv_int_frac(pwm_config *c, uint8_t integer, uint8_t fract) { valid_params_if(PWM, integer >= 1); valid_params_if(PWM, fract < 16); c->div = (((uint)integer) << PWM_CH0_DIV_INT_LSB) | (((uint)fract) << PWM_CH0_DIV_FRAC_LSB); } /** \brief Set PWM clock divider in a PWM configuration * \ingroup hardware_pwm * * \param c PWM configuration struct to modify * \param div Integer value to reduce counting rate by. Must be greater than or equal to 1. * * If the divide mode is free-running, the PWM counter runs at clk_sys / div. * Otherwise, the divider reduces the rate of events seen on the B pin input (level or edge) * before passing them on to the PWM counter. */ static inline void pwm_config_set_clkdiv_int(pwm_config *c, uint div) { valid_params_if(PWM, div >= 1 && div < 256); pwm_config_set_clkdiv_int_frac(c, (uint8_t)div, 0); } /** \brief Set PWM counting mode in a PWM configuration * \ingroup hardware_pwm * * \param c PWM configuration struct to modify * \param mode PWM divide/count mode * * Configure which event gates the operation of the fractional divider. * The default is always-on (free-running PWM). Can also be configured to count on * high level, rising edge or falling edge of the B pin input. */ static inline void pwm_config_set_clkdiv_mode(pwm_config *c, enum pwm_clkdiv_mode mode) { valid_params_if(PWM, mode == PWM_DIV_FREE_RUNNING || mode == PWM_DIV_B_RISING || mode == PWM_DIV_B_HIGH || mode == PWM_DIV_B_FALLING); c->csr = (c->csr & ~PWM_CH0_CSR_DIVMODE_BITS) | (((uint)mode) << PWM_CH0_CSR_DIVMODE_LSB); } /** \brief Set output polarity in a PWM configuration * \ingroup hardware_pwm * * \param c PWM configuration struct to modify * \param a true to invert output A * \param b true to invert output B */ static inline void pwm_config_set_output_polarity(pwm_config *c, bool a, bool b) { c->csr = (c->csr & ~(PWM_CH0_CSR_A_INV_BITS | PWM_CH0_CSR_B_INV_BITS)) | ((bool_to_bit(a) << PWM_CH0_CSR_A_INV_LSB) | (bool_to_bit(b) << PWM_CH0_CSR_B_INV_LSB)); } /** \brief Set PWM counter wrap value in a PWM configuration * \ingroup hardware_pwm * * Set the highest value the counter will reach before returning to 0. Also known as TOP. * * \param c PWM configuration struct to modify * \param wrap Value to set wrap to */ static inline void pwm_config_set_wrap(pwm_config *c, uint16_t wrap) { c->top = wrap; } /** \brief Initialise a PWM with settings from a configuration object * \ingroup hardware_pwm * * Use the \ref pwm_get_default_config() function to initialise a config structure, make changes as * needed using the pwm_config_* functions, then call this function to set up the PWM. * * \param slice_num PWM slice number * \param c The configuration to use * \param start If true the PWM will be started running once configured. If false you will need to start * manually using \ref pwm_set_enabled() or \ref pwm_set_mask_enabled() */ static inline void pwm_init(uint slice_num, pwm_config *c, bool start) { check_slice_num_param(slice_num); pwm_hw->slice[slice_num].csr = 0; pwm_hw->slice[slice_num].ctr = PWM_CH0_CTR_RESET; pwm_hw->slice[slice_num].cc = PWM_CH0_CC_RESET; pwm_hw->slice[slice_num].top = c->top; pwm_hw->slice[slice_num].div = c->div; pwm_hw->slice[slice_num].csr = c->csr | (bool_to_bit(start) << PWM_CH0_CSR_EN_LSB); } /** \brief Get a set of default values for PWM configuration * \ingroup hardware_pwm * * PWM config is free-running at system clock speed, no phase correction, wrapping at 0xffff, * with standard polarities for channels A and B. * * \return Set of default values. */ static inline pwm_config pwm_get_default_config(void) { pwm_config c = {0, 0, 0}; pwm_config_set_phase_correct(&c, false); pwm_config_set_clkdiv_int(&c, 1); pwm_config_set_clkdiv_mode(&c, PWM_DIV_FREE_RUNNING); pwm_config_set_output_polarity(&c, false, false); pwm_config_set_wrap(&c, 0xffffu); return c; } /** \brief Set the current PWM counter wrap value * \ingroup hardware_pwm * * Set the highest value the counter will reach before returning to 0. Also * known as TOP. * * The counter wrap value is double-buffered in hardware. This means that, * when the PWM is running, a write to the counter wrap value does not take * effect until after the next time the PWM slice wraps (or, in phase-correct * mode, the next time the slice reaches 0). If the PWM is not running, the * write is latched in immediately. * * \param slice_num PWM slice number * \param wrap Value to set wrap to */ static inline void pwm_set_wrap(uint slice_num, uint16_t wrap) { check_slice_num_param(slice_num); pwm_hw->slice[slice_num].top = wrap; } /** \brief Set the current PWM counter compare value for one channel * \ingroup hardware_pwm * * Set the value of the PWM counter compare value, for either channel A or channel B. * * The counter compare register is double-buffered in hardware. This means * that, when the PWM is running, a write to the counter compare values does * not take effect until the next time the PWM slice wraps (or, in * phase-correct mode, the next time the slice reaches 0). If the PWM is not * running, the write is latched in immediately. * * \param slice_num PWM slice number * \param chan Which channel to update. 0 for A, 1 for B. * \param level new level for the selected output */ static inline void pwm_set_chan_level(uint slice_num, uint chan, uint16_t level) { check_slice_num_param(slice_num); hw_write_masked( &pwm_hw->slice[slice_num].cc, ((uint)level) << (chan ? PWM_CH0_CC_B_LSB : PWM_CH0_CC_A_LSB), chan ? PWM_CH0_CC_B_BITS : PWM_CH0_CC_A_BITS ); } /** \brief Set PWM counter compare values * \ingroup hardware_pwm * * Set the value of the PWM counter compare values, A and B. * * The counter compare register is double-buffered in hardware. This means * that, when the PWM is running, a write to the counter compare values does * not take effect until the next time the PWM slice wraps (or, in * phase-correct mode, the next time the slice reaches 0). If the PWM is not * running, the write is latched in immediately. * * \param slice_num PWM slice number * \param level_a Value to set compare A to. When the counter reaches this value the A output is deasserted * \param level_b Value to set compare B to. When the counter reaches this value the B output is deasserted */ static inline void pwm_set_both_levels(uint slice_num, uint16_t level_a, uint16_t level_b) { check_slice_num_param(slice_num); pwm_hw->slice[slice_num].cc = (((uint)level_b) << PWM_CH0_CC_B_LSB) | (((uint)level_a) << PWM_CH0_CC_A_LSB); } /** \brief Helper function to set the PWM level for the slice and channel associated with a GPIO. * \ingroup hardware_pwm * * Look up the correct slice (0 to 7) and channel (A or B) for a given GPIO, and update the corresponding * counter compare field. * * This PWM slice should already have been configured and set running. Also be careful of multiple GPIOs * mapping to the same slice and channel (if GPIOs have a difference of 16). * * The counter compare register is double-buffered in hardware. This means * that, when the PWM is running, a write to the counter compare values does * not take effect until the next time the PWM slice wraps (or, in * phase-correct mode, the next time the slice reaches 0). If the PWM is not * running, the write is latched in immediately. * * \param gpio GPIO to set level of * \param level PWM level for this GPIO */ static inline void pwm_set_gpio_level(uint gpio, uint16_t level) { valid_params_if(PWM, gpio < NUM_BANK0_GPIOS); pwm_set_chan_level(pwm_gpio_to_slice_num(gpio), pwm_gpio_to_channel(gpio), level); } /** \brief Get PWM counter * \ingroup hardware_pwm * * Get current value of PWM counter * * \param slice_num PWM slice number * \return Current value of the PWM counter */ static inline uint16_t pwm_get_counter(uint slice_num) { check_slice_num_param(slice_num); return (uint16_t)(pwm_hw->slice[slice_num].ctr); } /** \brief Set PWM counter * \ingroup hardware_pwm * * Set the value of the PWM counter * * \param slice_num PWM slice number * \param c Value to set the PWM counter to * */ static inline void pwm_set_counter(uint slice_num, uint16_t c) { check_slice_num_param(slice_num); pwm_hw->slice[slice_num].ctr = c; } /** \brief Advance PWM count * \ingroup hardware_pwm * * Advance the phase of a running the counter by 1 count. * * This function will return once the increment is complete. * * \param slice_num PWM slice number */ static inline void pwm_advance_count(uint slice_num) { check_slice_num_param(slice_num); hw_set_bits(&pwm_hw->slice[slice_num].csr, PWM_CH0_CSR_PH_ADV_BITS); while (pwm_hw->slice[slice_num].csr & PWM_CH0_CSR_PH_ADV_BITS) { tight_loop_contents(); } } /** \brief Retard PWM count * \ingroup hardware_pwm * * Retard the phase of a running counter by 1 count * * This function will return once the retardation is complete. * * \param slice_num PWM slice number */ static inline void pwm_retard_count(uint slice_num) { check_slice_num_param(slice_num); hw_set_bits(&pwm_hw->slice[slice_num].csr, PWM_CH0_CSR_PH_RET_BITS); while (pwm_hw->slice[slice_num].csr & PWM_CH0_CSR_PH_RET_BITS) { tight_loop_contents(); } } /** \brief Set PWM clock divider using an 8:4 fractional value * \ingroup hardware_pwm * * Set the clock divider. Counter increment will be on sysclock divided by this value, taking into account the gating. * * \param slice_num PWM slice number * \param integer 8 bit integer part of the clock divider * \param fract 4 bit fractional part of the clock divider */ static inline void pwm_set_clkdiv_int_frac(uint slice_num, uint8_t integer, uint8_t fract) { check_slice_num_param(slice_num); valid_params_if(PWM, integer >= 1); valid_params_if(PWM, fract < 16); pwm_hw->slice[slice_num].div = (((uint)integer) << PWM_CH0_DIV_INT_LSB) | (((uint)fract) << PWM_CH0_DIV_FRAC_LSB); } /** \brief Set PWM clock divider * \ingroup hardware_pwm * * Set the clock divider. Counter increment will be on sysclock divided by this value, taking into account the gating. * * \param slice_num PWM slice number * \param divider Floating point clock divider, 1.f <= value < 256.f */ static inline void pwm_set_clkdiv(uint slice_num, float divider) { check_slice_num_param(slice_num); valid_params_if(PWM, divider >= 1.f && divider < 256.f); uint8_t i = (uint8_t)divider; uint8_t f = (uint8_t)((divider - i) * (0x01 << 4)); pwm_set_clkdiv_int_frac(slice_num, i, f); } /** \brief Set PWM output polarity * \ingroup hardware_pwm * * \param slice_num PWM slice number * \param a true to invert output A * \param b true to invert output B */ static inline void pwm_set_output_polarity(uint slice_num, bool a, bool b) { check_slice_num_param(slice_num); hw_write_masked(&pwm_hw->slice[slice_num].csr, bool_to_bit(a) << PWM_CH0_CSR_A_INV_LSB | bool_to_bit(b) << PWM_CH0_CSR_B_INV_LSB, PWM_CH0_CSR_A_INV_BITS | PWM_CH0_CSR_B_INV_BITS); } /** \brief Set PWM divider mode * \ingroup hardware_pwm * * \param slice_num PWM slice number * \param mode Required divider mode */ static inline void pwm_set_clkdiv_mode(uint slice_num, enum pwm_clkdiv_mode mode) { check_slice_num_param(slice_num); valid_params_if(PWM, mode == PWM_DIV_FREE_RUNNING || mode == PWM_DIV_B_RISING || mode == PWM_DIV_B_HIGH || mode == PWM_DIV_B_FALLING); hw_write_masked(&pwm_hw->slice[slice_num].csr, ((uint)mode) << PWM_CH0_CSR_DIVMODE_LSB, PWM_CH0_CSR_DIVMODE_BITS); } /** \brief Set PWM phase correct on/off * \ingroup hardware_pwm * * \param slice_num PWM slice number * \param phase_correct true to set phase correct modulation, false to set trailing edge * * Setting phase control to true means that instead of wrapping back to zero when the wrap point is reached, * the PWM starts counting back down. The output frequency is halved when phase-correct mode is enabled. */ static inline void pwm_set_phase_correct(uint slice_num, bool phase_correct) { check_slice_num_param(slice_num); hw_write_masked(&pwm_hw->slice[slice_num].csr, bool_to_bit(phase_correct) << PWM_CH0_CSR_PH_CORRECT_LSB, PWM_CH0_CSR_PH_CORRECT_BITS); } /** \brief Enable/Disable PWM * \ingroup hardware_pwm * * When a PWM is disabled, it halts its counter, and the output pins are left * high or low depending on exactly when the counter is halted. When * re-enabled the PWM resumes immediately from where it left off. * * If the PWM's output pins need to be low when halted: * * - The counter compare can be set to zero whilst the PWM is enabled, and * then the PWM disabled once both pins are seen to be low * * - The GPIO output overrides can be used to force the actual pins low * * - The PWM can be run for one cycle (i.e. enabled then immediately disabled) * with a TOP of 0, count of 0 and counter compare of 0, to force the pins * low when the PWM has already been halted. The same method can be used * with a counter compare value of 1 to force a pin high. * * Note that, when disabled, the PWM can still be advanced one count at a time * by pulsing the PH_ADV bit in its CSR. The output pins transition as though * the PWM were enabled. * * \param slice_num PWM slice number * \param enabled true to enable the specified PWM, false to disable. */ static inline void pwm_set_enabled(uint slice_num, bool enabled) { check_slice_num_param(slice_num); hw_write_masked(&pwm_hw->slice[slice_num].csr, bool_to_bit(enabled) << PWM_CH0_CSR_EN_LSB, PWM_CH0_CSR_EN_BITS); } /** \brief Enable/Disable multiple PWM slices simultaneously * \ingroup hardware_pwm * * \param mask Bitmap of PWMs to enable/disable. Bits 0 to 7 enable slices 0-7 respectively */ static inline void pwm_set_mask_enabled(uint32_t mask) { pwm_hw->en = mask; } /*! \brief Enable PWM instance interrupt * \ingroup hardware_pwm * * Used to enable a single PWM instance interrupt. * * \param slice_num PWM block to enable/disable * \param enabled true to enable, false to disable */ static inline void pwm_set_irq_enabled(uint slice_num, bool enabled) { check_slice_num_param(slice_num); if (enabled) { hw_set_bits(&pwm_hw->inte, 1u << slice_num); } else { hw_clear_bits(&pwm_hw->inte, 1u << slice_num); } } /*! \brief Enable multiple PWM instance interrupts * \ingroup hardware_pwm * * Use this to enable multiple PWM interrupts at once. * * \param slice_mask Bitmask of all the blocks to enable/disable. Channel 0 = bit 0, channel 1 = bit 1 etc. * \param enabled true to enable, false to disable */ static inline void pwm_set_irq_mask_enabled(uint32_t slice_mask, bool enabled) { valid_params_if(PWM, slice_mask < 256); if (enabled) { hw_set_bits(&pwm_hw->inte, slice_mask); } else { hw_clear_bits(&pwm_hw->inte, slice_mask); } } /*! \brief Clear a single PWM channel interrupt * \ingroup hardware_pwm * * \param slice_num PWM slice number */ static inline void pwm_clear_irq(uint slice_num) { pwm_hw->intr = 1u << slice_num; } /*! \brief Get PWM interrupt status, raw * \ingroup hardware_pwm * * \return Bitmask of all PWM interrupts currently set */ static inline uint32_t pwm_get_irq_status_mask(void) { return pwm_hw->ints; } /*! \brief Force PWM interrupt * \ingroup hardware_pwm * * \param slice_num PWM slice number */ static inline void pwm_force_irq(uint slice_num) { pwm_hw->intf = 1u << slice_num; } /*! \brief Return the DREQ to use for pacing transfers to a particular PWM slice * \ingroup hardware_pwm * * \param slice_num PWM slice number */ static inline uint pwm_get_dreq(uint slice_num) { static_assert(DREQ_PWM_WRAP1 == DREQ_PWM_WRAP0 + 1, ""); static_assert(DREQ_PWM_WRAP7 == DREQ_PWM_WRAP0 + 7, ""); check_slice_num_param(slice_num); return DREQ_PWM_WRAP0 + slice_num; } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_resets/CMakeLists.txt ================================================ pico_simple_hardware_headers_only_target(resets) ================================================ FILE: pico-sdk/src/rp2_common/hardware_resets/include/hardware/resets.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_RESETS_H #define _HARDWARE_RESETS_H #include "pico.h" #include "hardware/structs/resets.h" /** \file hardware/resets.h * \defgroup hardware_resets hardware_resets * * Hardware Reset API * * The reset controller allows software control of the resets to all of the peripherals that are not * critical to boot the processor in the RP2040. * * \subsubsection reset_bitmask * \addtogroup hardware_resets * * Multiple blocks are referred to using a bitmask as follows: * * Block to reset | Bit * ---------------|---- * USB | 24 * UART 1 | 23 * UART 0 | 22 * Timer | 21 * TB Manager | 20 * SysInfo | 19 * System Config | 18 * SPI 1 | 17 * SPI 0 | 16 * RTC | 15 * PWM | 14 * PLL USB | 13 * PLL System | 12 * PIO 1 | 11 * PIO 0 | 10 * Pads - QSPI | 9 * Pads - bank 0 | 8 * JTAG | 7 * IO Bank 1 | 6 * IO Bank 0 | 5 * I2C 1 | 4 * I2C 0 | 3 * DMA | 2 * Bus Control | 1 * ADC 0 | 0 * * \subsection reset_example Example * \addtogroup hardware_resets * \include hello_reset.c */ #ifdef __cplusplus extern "C" { #endif /// \tag::reset_funcs[] /*! \brief Reset the specified HW blocks * \ingroup hardware_resets * * \param bits Bit pattern indicating blocks to reset. See \ref reset_bitmask */ static inline void reset_block(uint32_t bits) { hw_set_bits(&resets_hw->reset, bits); } /*! \brief bring specified HW blocks out of reset * \ingroup hardware_resets * * \param bits Bit pattern indicating blocks to unreset. See \ref reset_bitmask */ static inline void unreset_block(uint32_t bits) { hw_clear_bits(&resets_hw->reset, bits); } /*! \brief Bring specified HW blocks out of reset and wait for completion * \ingroup hardware_resets * * \param bits Bit pattern indicating blocks to unreset. See \ref reset_bitmask */ static inline void unreset_block_wait(uint32_t bits) { hw_clear_bits(&resets_hw->reset, bits); while (~resets_hw->reset_done & bits) tight_loop_contents(); } /// \end::reset_funcs[] #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_rtc/CMakeLists.txt ================================================ pico_simple_hardware_target(rtc) pico_mirrored_target_link_libraries(hardware_rtc INTERFACE hardware_irq hardware_resets hardware_clocks) ================================================ FILE: pico-sdk/src/rp2_common/hardware_rtc/include/hardware/rtc.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_RTC_H #define _HARDWARE_RTC_H #include "pico.h" #include "hardware/structs/rtc.h" /** \file hardware/rtc.h * \defgroup hardware_rtc hardware_rtc * * Hardware Real Time Clock API * * The RTC keeps track of time in human readable format and generates events when the time is equal * to a preset value. Think of a digital clock, not epoch time used by most computers. There are seven * fields, one each for year (12 bit), month (4 bit), day (5 bit), day of the week (3 bit), hour (5 bit) * minute (6 bit) and second (6 bit), storing the data in binary format. * * \sa datetime_t * * \subsection rtc_example Example * \addtogroup hardware_rtc * * \include hello_rtc.c */ #ifdef __cplusplus extern "C" { #endif /*! Callback function type for RTC alarms * \ingroup hardware_rtc * * \sa rtc_set_alarm() */ typedef void (*rtc_callback_t)(void); /*! \brief Initialise the RTC system * \ingroup hardware_rtc */ void rtc_init(void); /*! \brief Set the RTC to the specified time * \ingroup hardware_rtc * * \note Note that after setting the RTC date and time, a subsequent read of the values (e.g. via rtc_get_datetime()) may not * reflect the new setting until up to three cycles of the potentially-much-slower RTC clock domain have passed. This represents a period * of 64 microseconds with the default RTC clock configuration. * * \param t Pointer to a \ref datetime_t structure contains time to set * \return true if set, false if the passed in datetime was invalid. */ bool rtc_set_datetime(datetime_t *t); /*! \brief Get the current time from the RTC * \ingroup hardware_rtc * * \param t Pointer to a \ref datetime_t structure to receive the current RTC time * \return true if datetime is valid, false if the RTC is not running. */ bool rtc_get_datetime(datetime_t *t); /*! \brief Is the RTC running? * \ingroup hardware_rtc * */ bool rtc_running(void); /*! \brief Set a time in the future for the RTC to call a user provided callback * \ingroup hardware_rtc * * \param t Pointer to a \ref datetime_t structure containing a time in the future to fire the alarm. Any values set to -1 will not be matched on. * \param user_callback pointer to a \ref rtc_callback_t to call when the alarm fires */ void rtc_set_alarm(datetime_t *t, rtc_callback_t user_callback); /*! \brief Enable the RTC alarm (if inactive) * \ingroup hardware_rtc */ void rtc_enable_alarm(void); /*! \brief Disable the RTC alarm (if active) * \ingroup hardware_rtc */ void rtc_disable_alarm(void); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_rtc/rtc.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" #include "hardware/irq.h" #include "hardware/rtc.h" #include "hardware/resets.h" #include "hardware/clocks.h" // Set this when setting an alarm static rtc_callback_t _callback = NULL; static bool _alarm_repeats = false; bool rtc_running(void) { return (rtc_hw->ctrl & RTC_CTRL_RTC_ACTIVE_BITS); } void rtc_init(void) { // Get clk_rtc freq and make sure it is running uint rtc_freq = clock_get_hz(clk_rtc); assert(rtc_freq != 0); // Take rtc out of reset now that we know clk_rtc is running reset_block(RESETS_RESET_RTC_BITS); unreset_block_wait(RESETS_RESET_RTC_BITS); // Set up the 1 second divider. // If rtc_freq is 400 then clkdiv_m1 should be 399 rtc_freq -= 1; // Check the freq is not too big to divide assert(rtc_freq <= RTC_CLKDIV_M1_BITS); // Write divide value rtc_hw->clkdiv_m1 = rtc_freq; } static bool valid_datetime(datetime_t *t) { // Valid ranges taken from RTC doc. Note when setting an RTC alarm // these values are allowed to be -1 to say "don't match this value" if (!(t->year >= 0 && t->year <= 4095)) return false; if (!(t->month >= 1 && t->month <= 12)) return false; if (!(t->day >= 1 && t->day <= 31)) return false; if (!(t->dotw >= 0 && t->dotw <= 6)) return false; if (!(t->hour >= 0 && t->hour <= 23)) return false; if (!(t->min >= 0 && t->min <= 59)) return false; if (!(t->sec >= 0 && t->sec <= 59)) return false; return true; } bool rtc_set_datetime(datetime_t *t) { if (!valid_datetime(t)) { return false; } // Disable RTC rtc_hw->ctrl = 0; // Wait while it is still active while (rtc_running()) { tight_loop_contents(); } // Write to setup registers rtc_hw->setup_0 = (((uint32_t)t->year) << RTC_SETUP_0_YEAR_LSB ) | (((uint32_t)t->month) << RTC_SETUP_0_MONTH_LSB) | (((uint32_t)t->day) << RTC_SETUP_0_DAY_LSB); rtc_hw->setup_1 = (((uint32_t)t->dotw) << RTC_SETUP_1_DOTW_LSB) | (((uint32_t)t->hour) << RTC_SETUP_1_HOUR_LSB) | (((uint32_t)t->min) << RTC_SETUP_1_MIN_LSB) | (((uint32_t)t->sec) << RTC_SETUP_1_SEC_LSB); // Load setup values into rtc clock domain rtc_hw->ctrl = RTC_CTRL_LOAD_BITS; // Enable RTC and wait for it to be running rtc_hw->ctrl = RTC_CTRL_RTC_ENABLE_BITS; while (!rtc_running()) { tight_loop_contents(); } return true; } bool rtc_get_datetime(datetime_t *t) { // Make sure RTC is running if (!rtc_running()) { return false; } // Note: RTC_0 should be read before RTC_1 uint32_t rtc_0 = rtc_hw->rtc_0; uint32_t rtc_1 = rtc_hw->rtc_1; t->dotw = (int8_t) ((rtc_0 & RTC_RTC_0_DOTW_BITS ) >> RTC_RTC_0_DOTW_LSB); t->hour = (int8_t) ((rtc_0 & RTC_RTC_0_HOUR_BITS ) >> RTC_RTC_0_HOUR_LSB); t->min = (int8_t) ((rtc_0 & RTC_RTC_0_MIN_BITS ) >> RTC_RTC_0_MIN_LSB); t->sec = (int8_t) ((rtc_0 & RTC_RTC_0_SEC_BITS ) >> RTC_RTC_0_SEC_LSB); t->year = (int16_t) ((rtc_1 & RTC_RTC_1_YEAR_BITS ) >> RTC_RTC_1_YEAR_LSB); t->month = (int8_t) ((rtc_1 & RTC_RTC_1_MONTH_BITS) >> RTC_RTC_1_MONTH_LSB); t->day = (int8_t) ((rtc_1 & RTC_RTC_1_DAY_BITS ) >> RTC_RTC_1_DAY_LSB); return true; } void rtc_enable_alarm(void) { // Set matching and wait for it to be enabled hw_set_bits(&rtc_hw->irq_setup_0, RTC_IRQ_SETUP_0_MATCH_ENA_BITS); while(!(rtc_hw->irq_setup_0 & RTC_IRQ_SETUP_0_MATCH_ACTIVE_BITS)) { tight_loop_contents(); } } static void rtc_irq_handler(void) { // Always disable the alarm to clear the current IRQ. // Even if it is a repeatable alarm, we don't want it to keep firing. // If it matches on a second it can keep firing for that second. rtc_disable_alarm(); if (_alarm_repeats) { // If it is a repeatable alarm, re enable the alarm. rtc_enable_alarm(); } // Call user callback function if (_callback) { _callback(); } } static bool rtc_alarm_repeats(datetime_t *t) { // If any value is set to -1 then we don't match on that value // hence the alarm will eventually repeat if (t->year < 0) return true; if (t->month < 0) return true; if (t->day < 0) return true; if (t->dotw < 0) return true; if (t->hour < 0) return true; if (t->min < 0) return true; if (t->sec < 0) return true; return false; } void rtc_set_alarm(datetime_t *t, rtc_callback_t user_callback) { rtc_disable_alarm(); // Only add to setup if it isn't -1 rtc_hw->irq_setup_0 = ((t->year < 0) ? 0 : (((uint32_t)t->year) << RTC_IRQ_SETUP_0_YEAR_LSB )) | ((t->month < 0) ? 0 : (((uint32_t)t->month) << RTC_IRQ_SETUP_0_MONTH_LSB)) | ((t->day < 0) ? 0 : (((uint32_t)t->day) << RTC_IRQ_SETUP_0_DAY_LSB )); rtc_hw->irq_setup_1 = ((t->dotw < 0) ? 0 : (((uint32_t)t->dotw) << RTC_IRQ_SETUP_1_DOTW_LSB)) | ((t->hour < 0) ? 0 : (((uint32_t)t->hour) << RTC_IRQ_SETUP_1_HOUR_LSB)) | ((t->min < 0) ? 0 : (((uint32_t)t->min) << RTC_IRQ_SETUP_1_MIN_LSB )) | ((t->sec < 0) ? 0 : (((uint32_t)t->sec) << RTC_IRQ_SETUP_1_SEC_LSB )); // Set the match enable bits for things we care about if (t->year >= 0) hw_set_bits(&rtc_hw->irq_setup_0, RTC_IRQ_SETUP_0_YEAR_ENA_BITS); if (t->month >= 0) hw_set_bits(&rtc_hw->irq_setup_0, RTC_IRQ_SETUP_0_MONTH_ENA_BITS); if (t->day >= 0) hw_set_bits(&rtc_hw->irq_setup_0, RTC_IRQ_SETUP_0_DAY_ENA_BITS); if (t->dotw >= 0) hw_set_bits(&rtc_hw->irq_setup_1, RTC_IRQ_SETUP_1_DOTW_ENA_BITS); if (t->hour >= 0) hw_set_bits(&rtc_hw->irq_setup_1, RTC_IRQ_SETUP_1_HOUR_ENA_BITS); if (t->min >= 0) hw_set_bits(&rtc_hw->irq_setup_1, RTC_IRQ_SETUP_1_MIN_ENA_BITS); if (t->sec >= 0) hw_set_bits(&rtc_hw->irq_setup_1, RTC_IRQ_SETUP_1_SEC_ENA_BITS); // Does it repeat? I.e. do we not match on any of the bits _alarm_repeats = rtc_alarm_repeats(t); // Store function pointer we can call later _callback = user_callback; irq_set_exclusive_handler(RTC_IRQ, rtc_irq_handler); // Enable the IRQ at the peri rtc_hw->inte = RTC_INTE_RTC_BITS; // Enable the IRQ at the proc irq_set_enabled(RTC_IRQ, true); rtc_enable_alarm(); } void rtc_disable_alarm(void) { // Disable matching and wait for it to stop being active hw_clear_bits(&rtc_hw->irq_setup_0, RTC_IRQ_SETUP_0_MATCH_ENA_BITS); while(rtc_hw->irq_setup_0 & RTC_IRQ_SETUP_0_MATCH_ACTIVE_BITS) { tight_loop_contents(); } } ================================================ FILE: pico-sdk/src/rp2_common/hardware_spi/CMakeLists.txt ================================================ pico_simple_hardware_target(spi) pico_mirrored_target_link_libraries(hardware_spi INTERFACE hardware_resets hardware_clocks) ================================================ FILE: pico-sdk/src/rp2_common/hardware_spi/include/hardware/spi.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_SPI_H #define _HARDWARE_SPI_H #include "pico.h" #include "hardware/structs/spi.h" #include "hardware/regs/dreq.h" // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_SPI, Enable/disable assertions in the SPI module, type=bool, default=0, group=hardware_spi #ifndef PARAM_ASSERTIONS_ENABLED_SPI #define PARAM_ASSERTIONS_ENABLED_SPI 0 #endif #ifdef __cplusplus extern "C" { #endif /** \file hardware/spi.h * \defgroup hardware_spi hardware_spi * * Hardware SPI API * * RP2040 has 2 identical instances of the Serial Peripheral Interface (SPI) controller. * * The PrimeCell SSP is a master or slave interface for synchronous serial communication with peripheral devices that have * Motorola SPI, National Semiconductor Microwire, or Texas Instruments synchronous serial interfaces. * * Controller can be defined as master or slave using the \ref spi_set_slave function. * * Each controller can be connected to a number of GPIO pins, see the datasheet GPIO function selection table for more information. */ // PICO_CONFIG: PICO_DEFAULT_SPI, Define the default SPI for a board, min=0, max=1, group=hardware_spi // PICO_CONFIG: PICO_DEFAULT_SPI_SCK_PIN, Define the default SPI SCK pin, min=0, max=29, group=hardware_spi // PICO_CONFIG: PICO_DEFAULT_SPI_TX_PIN, Define the default SPI TX pin, min=0, max=29, group=hardware_spi // PICO_CONFIG: PICO_DEFAULT_SPI_RX_PIN, Define the default SPI RX pin, min=0, max=29, group=hardware_spi // PICO_CONFIG: PICO_DEFAULT_SPI_CSN_PIN, Define the default SPI CSN pin, min=0, max=29, group=hardware_spi /** * Opaque type representing an SPI instance. */ typedef struct spi_inst spi_inst_t; /** Identifier for the first (SPI 0) hardware SPI instance (for use in SPI functions). * * e.g. spi_init(spi0, 48000) * * \ingroup hardware_spi */ #define spi0 ((spi_inst_t *)spi0_hw) /** Identifier for the second (SPI 1) hardware SPI instance (for use in SPI functions). * * e.g. spi_init(spi1, 48000) * * \ingroup hardware_spi */ #define spi1 ((spi_inst_t *)spi1_hw) #if !defined(PICO_DEFAULT_SPI_INSTANCE) && defined(PICO_DEFAULT_SPI) #define PICO_DEFAULT_SPI_INSTANCE (__CONCAT(spi,PICO_DEFAULT_SPI)) #endif #ifdef PICO_DEFAULT_SPI_INSTANCE #define spi_default PICO_DEFAULT_SPI_INSTANCE #endif /** \brief Enumeration of SPI CPHA (clock phase) values. * \ingroup hardware_spi */ typedef enum { SPI_CPHA_0 = 0, SPI_CPHA_1 = 1 } spi_cpha_t; /** \brief Enumeration of SPI CPOL (clock polarity) values. * \ingroup hardware_spi */ typedef enum { SPI_CPOL_0 = 0, SPI_CPOL_1 = 1 } spi_cpol_t; /** \brief Enumeration of SPI bit-order values. * \ingroup hardware_spi */ typedef enum { SPI_LSB_FIRST = 0, SPI_MSB_FIRST = 1 } spi_order_t; // ---------------------------------------------------------------------------- // Setup /*! \brief Initialise SPI instances * \ingroup hardware_spi * Puts the SPI into a known state, and enable it. Must be called before other * functions. * * \note There is no guarantee that the baudrate requested can be achieved exactly; the nearest will be chosen * and returned * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param baudrate Baudrate requested in Hz * \return the actual baud rate set */ uint spi_init(spi_inst_t *spi, uint baudrate); /*! \brief Deinitialise SPI instances * \ingroup hardware_spi * Puts the SPI into a disabled state. Init will need to be called to reenable the device * functions. * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 */ void spi_deinit(spi_inst_t *spi); /*! \brief Set SPI baudrate * \ingroup hardware_spi * * Set SPI frequency as close as possible to baudrate, and return the actual * achieved rate. * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param baudrate Baudrate required in Hz, should be capable of a bitrate of at least 2Mbps, or higher, depending on system clock settings. * \return The actual baudrate set */ uint spi_set_baudrate(spi_inst_t *spi, uint baudrate); /*! \brief Get SPI baudrate * \ingroup hardware_spi * * Get SPI baudrate which was set by \see spi_set_baudrate * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \return The actual baudrate set */ uint spi_get_baudrate(const spi_inst_t *spi); /*! \brief Convert SPI instance to hardware instance number * \ingroup hardware_spi * * \param spi SPI instance * \return Number of SPI, 0 or 1. */ static inline uint spi_get_index(const spi_inst_t *spi) { invalid_params_if(SPI, spi != spi0 && spi != spi1); return spi == spi1 ? 1 : 0; } static inline spi_hw_t *spi_get_hw(spi_inst_t *spi) { spi_get_index(spi); // check it is a hw spi return (spi_hw_t *)spi; } static inline const spi_hw_t *spi_get_const_hw(const spi_inst_t *spi) { spi_get_index(spi); // check it is a hw spi return (const spi_hw_t *)spi; } /*! \brief Configure SPI * \ingroup hardware_spi * * Configure how the SPI serialises and deserialises data on the wire * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param data_bits Number of data bits per transfer. Valid values 4..16. * \param cpol SSPCLKOUT polarity, applicable to Motorola SPI frame format only. * \param cpha SSPCLKOUT phase, applicable to Motorola SPI frame format only * \param order Must be SPI_MSB_FIRST, no other values supported on the PL022 */ static inline void spi_set_format(spi_inst_t *spi, uint data_bits, spi_cpol_t cpol, spi_cpha_t cpha, __unused spi_order_t order) { invalid_params_if(SPI, data_bits < 4 || data_bits > 16); // LSB-first not supported on PL022: invalid_params_if(SPI, order != SPI_MSB_FIRST); invalid_params_if(SPI, cpol != SPI_CPOL_0 && cpol != SPI_CPOL_1); invalid_params_if(SPI, cpha != SPI_CPHA_0 && cpha != SPI_CPHA_1); // Disable the SPI uint32_t enable_mask = spi_get_hw(spi)->cr1 & SPI_SSPCR1_SSE_BITS; hw_clear_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_SSE_BITS); hw_write_masked(&spi_get_hw(spi)->cr0, ((uint)(data_bits - 1)) << SPI_SSPCR0_DSS_LSB | ((uint)cpol) << SPI_SSPCR0_SPO_LSB | ((uint)cpha) << SPI_SSPCR0_SPH_LSB, SPI_SSPCR0_DSS_BITS | SPI_SSPCR0_SPO_BITS | SPI_SSPCR0_SPH_BITS); // Re-enable the SPI hw_set_bits(&spi_get_hw(spi)->cr1, enable_mask); } /*! \brief Set SPI master/slave * \ingroup hardware_spi * * Configure the SPI for master- or slave-mode operation. By default, * spi_init() sets master-mode. * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param slave true to set SPI device as a slave device, false for master. */ static inline void spi_set_slave(spi_inst_t *spi, bool slave) { // Disable the SPI uint32_t enable_mask = spi_get_hw(spi)->cr1 & SPI_SSPCR1_SSE_BITS; hw_clear_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_SSE_BITS); if (slave) hw_set_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_MS_BITS); else hw_clear_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_MS_BITS); // Re-enable the SPI hw_set_bits(&spi_get_hw(spi)->cr1, enable_mask); } // ---------------------------------------------------------------------------- // Generic input/output /*! \brief Check whether a write can be done on SPI device * \ingroup hardware_spi * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \return false if no space is available to write. True if a write is possible */ static inline bool spi_is_writable(const spi_inst_t *spi) { return (spi_get_const_hw(spi)->sr & SPI_SSPSR_TNF_BITS); } /*! \brief Check whether a read can be done on SPI device * \ingroup hardware_spi * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \return true if a read is possible i.e. data is present */ static inline bool spi_is_readable(const spi_inst_t *spi) { return (spi_get_const_hw(spi)->sr & SPI_SSPSR_RNE_BITS); } /*! \brief Check whether SPI is busy * \ingroup hardware_spi * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \return true if SPI is busy */ static inline bool spi_is_busy(const spi_inst_t *spi) { return (spi_get_const_hw(spi)->sr & SPI_SSPSR_BSY_BITS); } /*! \brief Write/Read to/from an SPI device * \ingroup hardware_spi * * Write \p len bytes from \p src to SPI. Simultaneously read \p len bytes from SPI to \p dst. * Blocks until all data is transferred. No timeout, as SPI hardware always transfers at a known data rate. * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param src Buffer of data to write * \param dst Buffer for read data * \param len Length of BOTH buffers * \return Number of bytes written/read */ int spi_write_read_blocking(spi_inst_t *spi, const uint8_t *src, uint8_t *dst, size_t len); /*! \brief Write to an SPI device, blocking * \ingroup hardware_spi * * Write \p len bytes from \p src to SPI, and discard any data received back * Blocks until all data is transferred. No timeout, as SPI hardware always transfers at a known data rate. * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param src Buffer of data to write * \param len Length of \p src * \return Number of bytes written/read */ int spi_write_blocking(spi_inst_t *spi, const uint8_t *src, size_t len); /*! \brief Read from an SPI device * \ingroup hardware_spi * * Read \p len bytes from SPI to \p dst. * Blocks until all data is transferred. No timeout, as SPI hardware always transfers at a known data rate. * \p repeated_tx_data is output repeatedly on TX as data is read in from RX. * Generally this can be 0, but some devices require a specific value here, * e.g. SD cards expect 0xff * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param repeated_tx_data Buffer of data to write * \param dst Buffer for read data * \param len Length of buffer \p dst * \return Number of bytes written/read */ int spi_read_blocking(spi_inst_t *spi, uint8_t repeated_tx_data, uint8_t *dst, size_t len); // ---------------------------------------------------------------------------- // SPI-specific operations and aliases // FIXME need some instance-private data for select() and deselect() if we are going that route /*! \brief Write/Read half words to/from an SPI device * \ingroup hardware_spi * * Write \p len halfwords from \p src to SPI. Simultaneously read \p len halfwords from SPI to \p dst. * Blocks until all data is transferred. No timeout, as SPI hardware always transfers at a known data rate. * * \note SPI should be initialised with 16 data_bits using \ref spi_set_format first, otherwise this function will only read/write 8 data_bits. * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param src Buffer of data to write * \param dst Buffer for read data * \param len Length of BOTH buffers in halfwords * \return Number of halfwords written/read */ int spi_write16_read16_blocking(spi_inst_t *spi, const uint16_t *src, uint16_t *dst, size_t len); /*! \brief Write to an SPI device * \ingroup hardware_spi * * Write \p len halfwords from \p src to SPI. Discard any data received back. * Blocks until all data is transferred. No timeout, as SPI hardware always transfers at a known data rate. * * \note SPI should be initialised with 16 data_bits using \ref spi_set_format first, otherwise this function will only write 8 data_bits. * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param src Buffer of data to write * \param len Length of buffers * \return Number of halfwords written/read */ int spi_write16_blocking(spi_inst_t *spi, const uint16_t *src, size_t len); /*! \brief Read from an SPI device * \ingroup hardware_spi * * Read \p len halfwords from SPI to \p dst. * Blocks until all data is transferred. No timeout, as SPI hardware always transfers at a known data rate. * \p repeated_tx_data is output repeatedly on TX as data is read in from RX. * Generally this can be 0, but some devices require a specific value here, * e.g. SD cards expect 0xff * * \note SPI should be initialised with 16 data_bits using \ref spi_set_format first, otherwise this function will only read 8 data_bits. * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param repeated_tx_data Buffer of data to write * \param dst Buffer for read data * \param len Length of buffer \p dst in halfwords * \return Number of halfwords written/read */ int spi_read16_blocking(spi_inst_t *spi, uint16_t repeated_tx_data, uint16_t *dst, size_t len); /*! \brief Return the DREQ to use for pacing transfers to/from a particular SPI instance * \ingroup hardware_spi * * \param spi SPI instance specifier, either \ref spi0 or \ref spi1 * \param is_tx true for sending data to the SPI instance, false for receiving data from the SPI instance */ static inline uint spi_get_dreq(spi_inst_t *spi, bool is_tx) { static_assert(DREQ_SPI0_RX == DREQ_SPI0_TX + 1, ""); static_assert(DREQ_SPI1_RX == DREQ_SPI1_TX + 1, ""); static_assert(DREQ_SPI1_TX == DREQ_SPI0_TX + 2, ""); return DREQ_SPI0_TX + spi_get_index(spi) * 2 + !is_tx; } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_spi/spi.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/resets.h" #include "hardware/clocks.h" #include "hardware/spi.h" static inline void spi_reset(spi_inst_t *spi) { invalid_params_if(SPI, spi != spi0 && spi != spi1); reset_block(spi == spi0 ? RESETS_RESET_SPI0_BITS : RESETS_RESET_SPI1_BITS); } static inline void spi_unreset(spi_inst_t *spi) { invalid_params_if(SPI, spi != spi0 && spi != spi1); unreset_block_wait(spi == spi0 ? RESETS_RESET_SPI0_BITS : RESETS_RESET_SPI1_BITS); } uint spi_init(spi_inst_t *spi, uint baudrate) { spi_reset(spi); spi_unreset(spi); uint baud = spi_set_baudrate(spi, baudrate); spi_set_format(spi, 8, SPI_CPOL_0, SPI_CPHA_0, SPI_MSB_FIRST); // Always enable DREQ signals -- harmless if DMA is not listening hw_set_bits(&spi_get_hw(spi)->dmacr, SPI_SSPDMACR_TXDMAE_BITS | SPI_SSPDMACR_RXDMAE_BITS); // Finally enable the SPI hw_set_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_SSE_BITS); return baud; } void spi_deinit(spi_inst_t *spi) { hw_clear_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_SSE_BITS); hw_clear_bits(&spi_get_hw(spi)->dmacr, SPI_SSPDMACR_TXDMAE_BITS | SPI_SSPDMACR_RXDMAE_BITS); spi_reset(spi); } uint spi_set_baudrate(spi_inst_t *spi, uint baudrate) { uint freq_in = clock_get_hz(clk_peri); uint prescale, postdiv; invalid_params_if(SPI, baudrate > freq_in); // Disable the SPI uint32_t enable_mask = spi_get_hw(spi)->cr1 & SPI_SSPCR1_SSE_BITS; hw_clear_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_SSE_BITS); // Find smallest prescale value which puts output frequency in range of // post-divide. Prescale is an even number from 2 to 254 inclusive. for (prescale = 2; prescale <= 254; prescale += 2) { if (freq_in < (prescale + 2) * 256 * (uint64_t) baudrate) break; } invalid_params_if(SPI, prescale > 254); // Frequency too low // Find largest post-divide which makes output <= baudrate. Post-divide is // an integer in the range 1 to 256 inclusive. for (postdiv = 256; postdiv > 1; --postdiv) { if (freq_in / (prescale * (postdiv - 1)) > baudrate) break; } spi_get_hw(spi)->cpsr = prescale; hw_write_masked(&spi_get_hw(spi)->cr0, (postdiv - 1) << SPI_SSPCR0_SCR_LSB, SPI_SSPCR0_SCR_BITS); // Re-enable the SPI hw_set_bits(&spi_get_hw(spi)->cr1, enable_mask); // Return the frequency we were able to achieve return freq_in / (prescale * postdiv); } uint spi_get_baudrate(const spi_inst_t *spi) { uint prescale = spi_get_const_hw(spi)->cpsr; uint postdiv = ((spi_get_const_hw(spi)->cr0 & SPI_SSPCR0_SCR_BITS) >> SPI_SSPCR0_SCR_LSB) + 1; return clock_get_hz(clk_peri) / (prescale * postdiv); } // Write len bytes from src to SPI. Simultaneously read len bytes from SPI to dst. // Note this function is guaranteed to exit in a known amount of time (bits sent * time per bit) int __not_in_flash_func(spi_write_read_blocking)(spi_inst_t *spi, const uint8_t *src, uint8_t *dst, size_t len) { invalid_params_if(SPI, 0 > (int)len); // Never have more transfers in flight than will fit into the RX FIFO, // else FIFO will overflow if this code is heavily interrupted. const size_t fifo_depth = 8; size_t rx_remaining = len, tx_remaining = len; while (rx_remaining || tx_remaining) { if (tx_remaining && spi_is_writable(spi) && rx_remaining < tx_remaining + fifo_depth) { spi_get_hw(spi)->dr = (uint32_t) *src++; --tx_remaining; } if (rx_remaining && spi_is_readable(spi)) { *dst++ = (uint8_t) spi_get_hw(spi)->dr; --rx_remaining; } } return (int)len; } // Write len bytes directly from src to the SPI, and discard any data received back int __not_in_flash_func(spi_write_blocking)(spi_inst_t *spi, const uint8_t *src, size_t len) { invalid_params_if(SPI, 0 > (int)len); // Write to TX FIFO whilst ignoring RX, then clean up afterward. When RX // is full, PL022 inhibits RX pushes, and sets a sticky flag on // push-on-full, but continues shifting. Safe if SSPIMSC_RORIM is not set. for (size_t i = 0; i < len; ++i) { while (!spi_is_writable(spi)) tight_loop_contents(); spi_get_hw(spi)->dr = (uint32_t)src[i]; } // Drain RX FIFO, then wait for shifting to finish (which may be *after* // TX FIFO drains), then drain RX FIFO again while (spi_is_readable(spi)) (void)spi_get_hw(spi)->dr; while (spi_get_hw(spi)->sr & SPI_SSPSR_BSY_BITS) tight_loop_contents(); while (spi_is_readable(spi)) (void)spi_get_hw(spi)->dr; // Don't leave overrun flag set spi_get_hw(spi)->icr = SPI_SSPICR_RORIC_BITS; return (int)len; } // Read len bytes directly from the SPI to dst. // repeated_tx_data is output repeatedly on SO as data is read in from SI. // Generally this can be 0, but some devices require a specific value here, // e.g. SD cards expect 0xff int __not_in_flash_func(spi_read_blocking)(spi_inst_t *spi, uint8_t repeated_tx_data, uint8_t *dst, size_t len) { invalid_params_if(SPI, 0 > (int)len); const size_t fifo_depth = 8; size_t rx_remaining = len, tx_remaining = len; while (rx_remaining || tx_remaining) { if (tx_remaining && spi_is_writable(spi) && rx_remaining < tx_remaining + fifo_depth) { spi_get_hw(spi)->dr = (uint32_t) repeated_tx_data; --tx_remaining; } if (rx_remaining && spi_is_readable(spi)) { *dst++ = (uint8_t) spi_get_hw(spi)->dr; --rx_remaining; } } return (int)len; } // Write len halfwords from src to SPI. Simultaneously read len halfwords from SPI to dst. int __not_in_flash_func(spi_write16_read16_blocking)(spi_inst_t *spi, const uint16_t *src, uint16_t *dst, size_t len) { invalid_params_if(SPI, 0 > (int)len); // Never have more transfers in flight than will fit into the RX FIFO, // else FIFO will overflow if this code is heavily interrupted. const size_t fifo_depth = 8; size_t rx_remaining = len, tx_remaining = len; while (rx_remaining || tx_remaining) { if (tx_remaining && spi_is_writable(spi) && rx_remaining < tx_remaining + fifo_depth) { spi_get_hw(spi)->dr = (uint32_t) *src++; --tx_remaining; } if (rx_remaining && spi_is_readable(spi)) { *dst++ = (uint16_t) spi_get_hw(spi)->dr; --rx_remaining; } } return (int)len; } // Write len bytes directly from src to the SPI, and discard any data received back int __not_in_flash_func(spi_write16_blocking)(spi_inst_t *spi, const uint16_t *src, size_t len) { invalid_params_if(SPI, 0 > (int)len); // Deliberately overflow FIFO, then clean up afterward, to minimise amount // of APB polling required per halfword for (size_t i = 0; i < len; ++i) { while (!spi_is_writable(spi)) tight_loop_contents(); spi_get_hw(spi)->dr = (uint32_t)src[i]; } while (spi_is_readable(spi)) (void)spi_get_hw(spi)->dr; while (spi_get_hw(spi)->sr & SPI_SSPSR_BSY_BITS) tight_loop_contents(); while (spi_is_readable(spi)) (void)spi_get_hw(spi)->dr; // Don't leave overrun flag set spi_get_hw(spi)->icr = SPI_SSPICR_RORIC_BITS; return (int)len; } // Read len halfwords directly from the SPI to dst. // repeated_tx_data is output repeatedly on SO as data is read in from SI. int __not_in_flash_func(spi_read16_blocking)(spi_inst_t *spi, uint16_t repeated_tx_data, uint16_t *dst, size_t len) { invalid_params_if(SPI, 0 > (int)len); const size_t fifo_depth = 8; size_t rx_remaining = len, tx_remaining = len; while (rx_remaining || tx_remaining) { if (tx_remaining && spi_is_writable(spi) && rx_remaining < tx_remaining + fifo_depth) { spi_get_hw(spi)->dr = (uint32_t) repeated_tx_data; --tx_remaining; } if (rx_remaining && spi_is_readable(spi)) { *dst++ = (uint16_t) spi_get_hw(spi)->dr; --rx_remaining; } } return (int)len; } ================================================ FILE: pico-sdk/src/rp2_common/hardware_sync/CMakeLists.txt ================================================ pico_simple_hardware_target(sync) ================================================ FILE: pico-sdk/src/rp2_common/hardware_sync/include/hardware/sync.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_SYNC_H #define _HARDWARE_SYNC_H #include "pico.h" #include "hardware/address_mapped.h" #include "hardware/regs/sio.h" #ifdef __cplusplus extern "C" { #endif /** \file hardware/sync.h * \defgroup hardware_sync hardware_sync * * Low level hardware spin locks, barrier and processor event APIs * * Spin Locks * ---------- * * The RP2040 provides 32 hardware spin locks, which can be used to manage mutually-exclusive access to shared software * and hardware resources. * * Generally each spin lock itself is a shared resource, * i.e. the same hardware spin lock can be used by multiple higher level primitives (as long as the spin locks are neither held for long periods, nor * held concurrently with other spin locks by the same core - which could lead to deadlock). A hardware spin lock that is exclusively owned can be used * individually without more flexibility and without regard to other software. Note that no hardware spin lock may * be acquired re-entrantly (i.e. hardware spin locks are not on their own safe for use by both thread code and IRQs) however the default spinlock related * methods here (e.g. \ref spin_lock_blocking) always disable interrupts while the lock is held as use by IRQ handlers and user code is common/desirable, * and spin locks are only expected to be held for brief periods. * * The SDK uses the following default spin lock assignments, classifying which spin locks are reserved for exclusive/special purposes * vs those suitable for more general shared use: * * Number (ID) | Description * :---------: | ----------- * 0-13 | Currently reserved for exclusive use by the SDK and other libraries. If you use these spin locks, you risk breaking SDK or other library functionality. Each reserved spin lock used individually has its own PICO_SPINLOCK_ID so you can search for those. * 14,15 | (\ref PICO_SPINLOCK_ID_OS1 and \ref PICO_SPINLOCK_ID_OS2). Currently reserved for exclusive use by an operating system (or other system level software) co-existing with the SDK. * 16-23 | (\ref PICO_SPINLOCK_ID_STRIPED_FIRST - \ref PICO_SPINLOCK_ID_STRIPED_LAST). Spin locks from this range are assigned in a round-robin fashion via \ref next_striped_spin_lock_num(). These spin locks are shared, but assigning numbers from a range reduces the probability that two higher level locking primitives using _striped_ spin locks will actually be using the same spin lock. * 24-31 | (\ref PICO_SPINLOCK_ID_CLAIM_FREE_FIRST - \ref PICO_SPINLOCK_ID_CLAIM_FREE_LAST). These are reserved for exclusive use and are allocated on a first come first served basis at runtime via \ref spin_lock_claim_unused() */ // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_SYNC, Enable/disable assertions in the HW sync module, type=bool, default=0, group=hardware_sync #ifndef PARAM_ASSERTIONS_ENABLED_SYNC #define PARAM_ASSERTIONS_ENABLED_SYNC 0 #endif /** \brief A spin lock identifier * \ingroup hardware_sync */ typedef volatile uint32_t spin_lock_t; // PICO_CONFIG: PICO_SPINLOCK_ID_IRQ, Spinlock ID for IRQ protection, min=0, max=31, default=9, group=hardware_sync #ifndef PICO_SPINLOCK_ID_IRQ #define PICO_SPINLOCK_ID_IRQ 9 #endif // PICO_CONFIG: PICO_SPINLOCK_ID_TIMER, Spinlock ID for Timer protection, min=0, max=31, default=10, group=hardware_sync #ifndef PICO_SPINLOCK_ID_TIMER #define PICO_SPINLOCK_ID_TIMER 10 #endif // PICO_CONFIG: PICO_SPINLOCK_ID_HARDWARE_CLAIM, Spinlock ID for Hardware claim protection, min=0, max=31, default=11, group=hardware_sync #ifndef PICO_SPINLOCK_ID_HARDWARE_CLAIM #define PICO_SPINLOCK_ID_HARDWARE_CLAIM 11 #endif // PICO_CONFIG: PICO_SPINLOCK_ID_RAND, Spinlock ID for Random Number Generator, min=0, max=31, default=12, group=hardware_sync #ifndef PICO_SPINLOCK_ID_RAND #define PICO_SPINLOCK_ID_RAND 12 #endif // PICO_CONFIG: PICO_SPINLOCK_ID_OS1, First Spinlock ID reserved for use by low level OS style software, min=0, max=31, default=14, group=hardware_sync #ifndef PICO_SPINLOCK_ID_OS1 #define PICO_SPINLOCK_ID_OS1 14 #endif // PICO_CONFIG: PICO_SPINLOCK_ID_OS2, Second Spinlock ID reserved for use by low level OS style software, min=0, max=31, default=15, group=hardware_sync #ifndef PICO_SPINLOCK_ID_OS2 #define PICO_SPINLOCK_ID_OS2 15 #endif // PICO_CONFIG: PICO_SPINLOCK_ID_STRIPED_FIRST, Lowest Spinlock ID in the 'striped' range, min=0, max=31, default=16, group=hardware_sync #ifndef PICO_SPINLOCK_ID_STRIPED_FIRST #define PICO_SPINLOCK_ID_STRIPED_FIRST 16 #endif // PICO_CONFIG: PICO_SPINLOCK_ID_STRIPED_LAST, Highest Spinlock ID in the 'striped' range, min=0, max=31, default=23, group=hardware_sync #ifndef PICO_SPINLOCK_ID_STRIPED_LAST #define PICO_SPINLOCK_ID_STRIPED_LAST 23 #endif // PICO_CONFIG: PICO_SPINLOCK_ID_CLAIM_FREE_FIRST, Lowest Spinlock ID in the 'claim free' range, min=0, max=31, default=24, group=hardware_sync #ifndef PICO_SPINLOCK_ID_CLAIM_FREE_FIRST #define PICO_SPINLOCK_ID_CLAIM_FREE_FIRST 24 #endif #ifdef PICO_SPINLOCK_ID_CLAIM_FREE_END #warning PICO_SPINLOCK_ID_CLAIM_FREE_END has been renamed to PICO_SPINLOCK_ID_CLAIM_FREE_LAST #endif // PICO_CONFIG: PICO_SPINLOCK_ID_CLAIM_FREE_LAST, Highest Spinlock ID in the 'claim free' range, min=0, max=31, default=31, group=hardware_sync #ifndef PICO_SPINLOCK_ID_CLAIM_FREE_LAST #define PICO_SPINLOCK_ID_CLAIM_FREE_LAST 31 #endif /*! \brief Insert a SEV instruction in to the code path. * \ingroup hardware_sync * The SEV (send event) instruction sends an event to both cores. */ #if !__has_builtin(__sev) __force_inline static void __sev(void) { pico_default_asm_volatile ("sev"); } #endif /*! \brief Insert a WFE instruction in to the code path. * \ingroup hardware_sync * * The WFE (wait for event) instruction waits until one of a number of * events occurs, including events signalled by the SEV instruction on either core. */ #if !__has_builtin(__wfe) __force_inline static void __wfe(void) { pico_default_asm_volatile ("wfe"); } #endif /*! \brief Insert a WFI instruction in to the code path. * \ingroup hardware_sync * * The WFI (wait for interrupt) instruction waits for a interrupt to wake up the core. */ #if !__has_builtin(__wfi) __force_inline static void __wfi(void) { pico_default_asm_volatile("wfi"); } #endif /*! \brief Insert a DMB instruction in to the code path. * \ingroup hardware_sync * * The DMB (data memory barrier) acts as a memory barrier, all memory accesses prior to this * instruction will be observed before any explicit access after the instruction. */ __force_inline static void __dmb(void) { pico_default_asm_volatile("dmb" : : : "memory"); } /*! \brief Insert a DSB instruction in to the code path. * \ingroup hardware_sync * * The DSB (data synchronization barrier) acts as a special kind of data * memory barrier (DMB). The DSB operation completes when all explicit memory * accesses before this instruction complete. */ __force_inline static void __dsb(void) { pico_default_asm_volatile("dsb" : : : "memory"); } /*! \brief Insert a ISB instruction in to the code path. * \ingroup hardware_sync * * ISB acts as an instruction synchronization barrier. It flushes the pipeline of the processor, * so that all instructions following the ISB are fetched from cache or memory again, after * the ISB instruction has been completed. */ __force_inline static void __isb(void) { pico_default_asm_volatile("isb" ::: "memory"); } /*! \brief Acquire a memory fence * \ingroup hardware_sync */ __force_inline static void __mem_fence_acquire(void) { // the original code below makes it hard for us to be included from C++ via a header // which itself is in an extern "C", so just use __dmb instead, which is what // is required on Cortex M0+ __dmb(); //#ifndef __cplusplus // atomic_thread_fence(memory_order_acquire); //#else // std::atomic_thread_fence(std::memory_order_acquire); //#endif } /*! \brief Release a memory fence * \ingroup hardware_sync * */ __force_inline static void __mem_fence_release(void) { // the original code below makes it hard for us to be included from C++ via a header // which itself is in an extern "C", so just use __dmb instead, which is what // is required on Cortex M0+ __dmb(); //#ifndef __cplusplus // atomic_thread_fence(memory_order_release); //#else // std::atomic_thread_fence(std::memory_order_release); //#endif } /*! \brief Save and disable interrupts * \ingroup hardware_sync * * \return The prior interrupt enable status for restoration later via restore_interrupts() */ __force_inline static uint32_t save_and_disable_interrupts(void) { uint32_t status; pico_default_asm_volatile( "mrs %0, PRIMASK\n" "cpsid i" : "=r" (status) ::); return status; } /*! \brief Restore interrupts to a specified state * \ingroup hardware_sync * * \param status Previous interrupt status from save_and_disable_interrupts() */ __force_inline static void restore_interrupts(uint32_t status) { pico_default_asm_volatile("msr PRIMASK,%0"::"r" (status) : ); } /*! \brief Get HW Spinlock instance from number * \ingroup hardware_sync * * \param lock_num Spinlock ID * \return The spinlock instance */ __force_inline static spin_lock_t *spin_lock_instance(uint lock_num) { invalid_params_if(SYNC, lock_num >= NUM_SPIN_LOCKS); return (spin_lock_t *) (SIO_BASE + SIO_SPINLOCK0_OFFSET + lock_num * 4); } /*! \brief Get HW Spinlock number from instance * \ingroup hardware_sync * * \param lock The Spinlock instance * \return The Spinlock ID */ __force_inline static uint spin_lock_get_num(spin_lock_t *lock) { invalid_params_if(SYNC, (uint) lock < SIO_BASE + SIO_SPINLOCK0_OFFSET || (uint) lock >= NUM_SPIN_LOCKS * sizeof(spin_lock_t) + SIO_BASE + SIO_SPINLOCK0_OFFSET || ((uint) lock - SIO_BASE + SIO_SPINLOCK0_OFFSET) % sizeof(spin_lock_t) != 0); return (uint) (lock - (spin_lock_t *) (SIO_BASE + SIO_SPINLOCK0_OFFSET)); } /*! \brief Acquire a spin lock without disabling interrupts (hence unsafe) * \ingroup hardware_sync * * \param lock Spinlock instance */ __force_inline static void spin_lock_unsafe_blocking(spin_lock_t *lock) { // Note we don't do a wfe or anything, because by convention these spin_locks are VERY SHORT LIVED and NEVER BLOCK and run // with INTERRUPTS disabled (to ensure that)... therefore nothing on our core could be blocking us, so we just need to wait on another core // anyway which should be finished soon while (__builtin_expect(!*lock, 0)); __mem_fence_acquire(); } /*! \brief Release a spin lock without re-enabling interrupts * \ingroup hardware_sync * * \param lock Spinlock instance */ __force_inline static void spin_unlock_unsafe(spin_lock_t *lock) { __mem_fence_release(); *lock = 0; } /*! \brief Acquire a spin lock safely * \ingroup hardware_sync * * This function will disable interrupts prior to acquiring the spinlock * * \param lock Spinlock instance * \return interrupt status to be used when unlocking, to restore to original state */ __force_inline static uint32_t spin_lock_blocking(spin_lock_t *lock) { uint32_t save = save_and_disable_interrupts(); spin_lock_unsafe_blocking(lock); return save; } /*! \brief Check to see if a spinlock is currently acquired elsewhere. * \ingroup hardware_sync * * \param lock Spinlock instance */ inline static bool is_spin_locked(spin_lock_t *lock) { check_hw_size(spin_lock_t, 4); uint lock_num = spin_lock_get_num(lock); return 0 != (*(io_ro_32 *) (SIO_BASE + SIO_SPINLOCK_ST_OFFSET) & (1u << lock_num)); } /*! \brief Release a spin lock safely * \ingroup hardware_sync * * This function will re-enable interrupts according to the parameters. * * \param lock Spinlock instance * \param saved_irq Return value from the \ref spin_lock_blocking() function. * * \sa spin_lock_blocking() */ __force_inline static void spin_unlock(spin_lock_t *lock, uint32_t saved_irq) { spin_unlock_unsafe(lock); restore_interrupts(saved_irq); } /*! \brief Initialise a spin lock * \ingroup hardware_sync * * The spin lock is initially unlocked * * \param lock_num The spin lock number * \return The spin lock instance */ spin_lock_t *spin_lock_init(uint lock_num); /*! \brief Release all spin locks * \ingroup hardware_sync */ void spin_locks_reset(void); /*! \brief Return a spin lock number from the _striped_ range * \ingroup hardware_sync * * Returns a spin lock number in the range PICO_SPINLOCK_ID_STRIPED_FIRST to PICO_SPINLOCK_ID_STRIPED_LAST * in a round robin fashion. This does not grant the caller exclusive access to the spin lock, so the caller * must: * * -# Abide (with other callers) by the contract of only holding this spin lock briefly (and with IRQs disabled - the default via \ref spin_lock_blocking()), * and not whilst holding other spin locks. * -# Be OK with any contention caused by the - brief due to the above requirement - contention with other possible users of the spin lock. * * \return lock_num a spin lock number the caller may use (non exclusively) * \see PICO_SPINLOCK_ID_STRIPED_FIRST * \see PICO_SPINLOCK_ID_STRIPED_LAST */ uint next_striped_spin_lock_num(void); /*! \brief Mark a spin lock as used * \ingroup hardware_sync * * Method for cooperative claiming of hardware. Will cause a panic if the spin lock * is already claimed. Use of this method by libraries detects accidental * configurations that would fail in unpredictable ways. * * \param lock_num the spin lock number */ void spin_lock_claim(uint lock_num); /*! \brief Mark multiple spin locks as used * \ingroup hardware_sync * * Method for cooperative claiming of hardware. Will cause a panic if any of the spin locks * are already claimed. Use of this method by libraries detects accidental * configurations that would fail in unpredictable ways. * * \param lock_num_mask Bitfield of all required spin locks to claim (bit 0 == spin lock 0, bit 1 == spin lock 1 etc) */ void spin_lock_claim_mask(uint32_t lock_num_mask); /*! \brief Mark a spin lock as no longer used * \ingroup hardware_sync * * Method for cooperative claiming of hardware. * * \param lock_num the spin lock number to release */ void spin_lock_unclaim(uint lock_num); /*! \brief Claim a free spin lock * \ingroup hardware_sync * * \param required if true the function will panic if none are available * \return the spin lock number or -1 if required was false, and none were free */ int spin_lock_claim_unused(bool required); /*! \brief Determine if a spin lock is claimed * \ingroup hardware_sync * * \param lock_num the spin lock number * \return true if claimed, false otherwise * \see spin_lock_claim * \see spin_lock_claim_mask */ bool spin_lock_is_claimed(uint lock_num); // no longer use __mem_fence_acquire here, as it is overkill on cortex M0+ #define remove_volatile_cast(t, x) ({__compiler_memory_barrier(); Clang_Pragma("clang diagnostic push"); Clang_Pragma("clang diagnostic ignored \"-Wcast-qual\""); (t)(x); Clang_Pragma("clang diagnostic pop"); }) #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_sync/sync.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/sync.h" #include "hardware/claim.h" static_assert(PICO_SPINLOCK_ID_STRIPED_LAST >= PICO_SPINLOCK_ID_STRIPED_FIRST, ""); static uint8_t striped_spin_lock_num = PICO_SPINLOCK_ID_STRIPED_FIRST; static uint32_t claimed; static void check_lock_num(uint __unused lock_num) { invalid_params_if(SYNC, lock_num >= 32); } void spin_locks_reset(void) { for (uint i = 0; i < NUM_SPIN_LOCKS; i++) { spin_unlock_unsafe(spin_lock_instance(i)); } } spin_lock_t *spin_lock_init(uint lock_num) { assert(lock_num < NUM_SPIN_LOCKS); spin_lock_t *lock = spin_lock_instance(lock_num); spin_unlock_unsafe(lock); return lock; } uint next_striped_spin_lock_num() { uint rc = striped_spin_lock_num++; if (striped_spin_lock_num > PICO_SPINLOCK_ID_STRIPED_LAST) { striped_spin_lock_num = PICO_SPINLOCK_ID_STRIPED_FIRST; } return rc; } void spin_lock_claim(uint lock_num) { check_lock_num(lock_num); hw_claim_or_assert((uint8_t *) &claimed, lock_num, "Spinlock %d is already claimed"); } void spin_lock_claim_mask(uint32_t mask) { for(uint i = 0; mask; i++, mask >>= 1u) { if (mask & 1u) spin_lock_claim(i); } } void spin_lock_unclaim(uint lock_num) { check_lock_num(lock_num); spin_unlock_unsafe(spin_lock_instance(lock_num)); hw_claim_clear((uint8_t *) &claimed, lock_num); } int spin_lock_claim_unused(bool required) { return hw_claim_unused_from_range((uint8_t*)&claimed, required, PICO_SPINLOCK_ID_CLAIM_FREE_FIRST, PICO_SPINLOCK_ID_CLAIM_FREE_LAST, "No spinlocks are available"); } bool spin_lock_is_claimed(uint lock_num) { check_lock_num(lock_num); return hw_is_claimed((uint8_t *) &claimed, lock_num); } ================================================ FILE: pico-sdk/src/rp2_common/hardware_timer/CMakeLists.txt ================================================ pico_simple_hardware_target(timer) pico_mirrored_target_link_libraries(hardware_timer INTERFACE hardware_claim hardware_irq) ================================================ FILE: pico-sdk/src/rp2_common/hardware_timer/include/hardware/timer.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_TIMER_H #define _HARDWARE_TIMER_H #include "pico.h" #include "hardware/structs/timer.h" #ifdef __cplusplus extern "C" { #endif /** \file hardware/timer.h * \defgroup hardware_timer hardware_timer * * Low-level hardware timer API * * This API provides medium level access to the timer HW. * See also \ref pico_time which provides higher levels functionality using the hardware timer. * * The timer peripheral on RP2040 supports the following features: * - single 64-bit counter, incrementing once per microsecond * - Latching two-stage read of counter, for race-free read over 32 bit bus * - Four alarms: match on the lower 32 bits of counter, IRQ on match. * * By default the timer uses a one microsecond reference that is generated in the Watchdog (see Section 4.8.2) which is derived * from the clk_ref. * * The timer has 4 alarms, and can output a separate interrupt for each alarm. The alarms match on the lower 32 bits of the 64 * bit counter which means they can be fired a maximum of 2^32 microseconds into the future. This is equivalent to: * - 2^32 ÷ 10^6: ~4295 seconds * - 4295 ÷ 60: ~72 minutes * * The timer is expected to be used for short sleeps, if you want a longer alarm see the \ref hardware_rtc functions. * * \subsection timer_example Example * \addtogroup hardware_timer * * \include hello_timer.c * * \see pico_time */ // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_TIMER, Enable/disable assertions in the timer module, type=bool, default=0, group=hardware_timer #ifndef PARAM_ASSERTIONS_ENABLED_TIMER #define PARAM_ASSERTIONS_ENABLED_TIMER 0 #endif static inline void check_hardware_alarm_num_param(__unused uint alarm_num) { invalid_params_if(TIMER, alarm_num >= NUM_TIMERS); } /*! \brief Return a 32 bit timestamp value in microseconds * \ingroup hardware_timer * * Returns the low 32 bits of the hardware timer. * \note This value wraps roughly every 1 hour 11 minutes and 35 seconds. * * \return the 32 bit timestamp */ static inline uint32_t time_us_32(void) { return timer_hw->timerawl; } /*! \brief Return the current 64 bit timestamp value in microseconds * \ingroup hardware_timer * * Returns the full 64 bits of the hardware timer. The \ref pico_time and other functions rely on the fact that this * value monotonically increases from power up. As such it is expected that this value counts upwards and never wraps * (we apologize for introducing a potential year 5851444 bug). * * \return the 64 bit timestamp */ uint64_t time_us_64(void); /*! \brief Busy wait wasting cycles for the given (32 bit) number of microseconds * \ingroup hardware_timer * * \param delay_us delay amount in microseconds */ void busy_wait_us_32(uint32_t delay_us); /*! \brief Busy wait wasting cycles for the given (64 bit) number of microseconds * \ingroup hardware_timer * * \param delay_us delay amount in microseconds */ void busy_wait_us(uint64_t delay_us); /*! \brief Busy wait wasting cycles for the given number of milliseconds * \ingroup hardware_timer * * \param delay_ms delay amount in milliseconds */ void busy_wait_ms(uint32_t delay_ms); /*! \brief Busy wait wasting cycles until after the specified timestamp * \ingroup hardware_timer * * \param t Absolute time to wait until */ void busy_wait_until(absolute_time_t t); /*! \brief Check if the specified timestamp has been reached * \ingroup hardware_timer * * \param t Absolute time to compare against current time * \return true if it is now after the specified timestamp */ static inline bool time_reached(absolute_time_t t) { uint64_t target = to_us_since_boot(t); uint32_t hi_target = (uint32_t)(target >> 32u); uint32_t hi = timer_hw->timerawh; return (hi >= hi_target && (timer_hw->timerawl >= (uint32_t) target || hi != hi_target)); } /*! Callback function type for hardware alarms * \ingroup hardware_timer * * \param alarm_num the hardware alarm number * \sa hardware_alarm_set_callback() */ typedef void (*hardware_alarm_callback_t)(uint alarm_num); /*! \brief cooperatively claim the use of this hardware alarm_num * \ingroup hardware_timer * * This method hard asserts if the hardware alarm is currently claimed. * * \param alarm_num the hardware alarm to claim * \sa hardware_claiming */ void hardware_alarm_claim(uint alarm_num); /*! \brief cooperatively claim the use of this hardware alarm_num * \ingroup hardware_timer * * This method attempts to claim an unused hardware alarm * * \return alarm_num the hardware alarm claimed or -1 if requires was false, and none are available * \sa hardware_claiming */ int hardware_alarm_claim_unused(bool required); /*! \brief cooperatively release the claim on use of this hardware alarm_num * \ingroup hardware_timer * * \param alarm_num the hardware alarm to unclaim * \sa hardware_claiming */ void hardware_alarm_unclaim(uint alarm_num); /*! \brief Determine if a hardware alarm has been claimed * \ingroup hardware_timer * * \param alarm_num the hardware alarm number * \return true if claimed, false otherwise * \see hardware_alarm_claim */ bool hardware_alarm_is_claimed(uint alarm_num); /*! \brief Enable/Disable a callback for a hardware timer on this core * \ingroup hardware_timer * * This method enables/disables the alarm IRQ for the specified hardware alarm on the * calling core, and set the specified callback to be associated with that alarm. * * This callback will be used for the timeout set via hardware_alarm_set_target * * \note This will install the handler on the current core if the IRQ handler isn't already set. * Therefore the user has the opportunity to call this up from the core of their choice * * \param alarm_num the hardware alarm number * \param callback the callback to install, or NULL to unset * * \sa hardware_alarm_set_target() */ void hardware_alarm_set_callback(uint alarm_num, hardware_alarm_callback_t callback); /** * \brief Set the current target for the specified hardware alarm * \ingroup hardware_timer * * This will replace any existing target * * @param alarm_num the hardware alarm number * @param t the target timestamp * @return true if the target was "missed"; i.e. it was in the past, or occurred before a future hardware timeout could be set */ bool hardware_alarm_set_target(uint alarm_num, absolute_time_t t); /** * \brief Cancel an existing target (if any) for a given hardware_alarm * \ingroup hardware_timer * * @param alarm_num the hardware alarm number */ void hardware_alarm_cancel(uint alarm_num); /** * \brief Force and IRQ for a specific hardware alarm * \ingroup hardware_timer * * This method will forcibly make sure the current alarm callback (if present) for the hardware * alarm is called from an IRQ context after this call. If an actual callback is due at the same * time then the callback may only be called once. * * Calling this method does not otherwise interfere with regular callback operations. * * @param alarm_num the hardware alarm number */ void hardware_alarm_force_irq(uint alarm_num); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_timer/timer.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/timer.h" #include "hardware/irq.h" #include "hardware/sync.h" #include "hardware/claim.h" check_hw_layout(timer_hw_t, ints, TIMER_INTS_OFFSET); static hardware_alarm_callback_t alarm_callbacks[NUM_TIMERS]; static uint32_t target_hi[NUM_TIMERS]; static uint8_t timer_callbacks_pending; static_assert(NUM_TIMERS <= 4, ""); static uint8_t claimed; void hardware_alarm_claim(uint alarm_num) { check_hardware_alarm_num_param(alarm_num); hw_claim_or_assert(&claimed, alarm_num, "Hardware alarm %d already claimed"); } void hardware_alarm_unclaim(uint alarm_num) { check_hardware_alarm_num_param(alarm_num); hw_claim_clear(&claimed, alarm_num); } bool hardware_alarm_is_claimed(uint alarm_num) { check_hardware_alarm_num_param(alarm_num); return hw_is_claimed(&claimed, alarm_num); } int hardware_alarm_claim_unused(bool required) { return hw_claim_unused_from_range(&claimed, required, 0, NUM_TIMERS - 1, "No timers available"); } /// tag::time_us_64[] uint64_t time_us_64() { // Need to make sure that the upper 32 bits of the timer // don't change, so read that first uint32_t hi = timer_hw->timerawh; uint32_t lo; do { // Read the lower 32 bits lo = timer_hw->timerawl; // Now read the upper 32 bits again and // check that it hasn't incremented. If it has loop around // and read the lower 32 bits again to get an accurate value uint32_t next_hi = timer_hw->timerawh; if (hi == next_hi) break; hi = next_hi; } while (true); return ((uint64_t) hi << 32u) | lo; } /// end::time_us_64[] /// \tag::busy_wait[] void busy_wait_us_32(uint32_t delay_us) { if (0 <= (int32_t)delay_us) { // we only allow 31 bits, otherwise we could have a race in the loop below with // values very close to 2^32 uint32_t start = timer_hw->timerawl; while (timer_hw->timerawl - start < delay_us) { tight_loop_contents(); } } else { busy_wait_us(delay_us); } } void busy_wait_us(uint64_t delay_us) { uint64_t base = time_us_64(); uint64_t target = base + delay_us; if (target < base) { target = (uint64_t)-1; } absolute_time_t t; update_us_since_boot(&t, target); busy_wait_until(t); } void busy_wait_ms(uint32_t delay_ms) { if (delay_ms <= 0x7fffffffu / 1000) { busy_wait_us_32(delay_ms * 1000); } else { busy_wait_us(delay_ms * 1000ull); } } void busy_wait_until(absolute_time_t t) { uint64_t target = to_us_since_boot(t); uint32_t hi_target = (uint32_t)(target >> 32u); uint32_t hi = timer_hw->timerawh; while (hi < hi_target) { hi = timer_hw->timerawh; tight_loop_contents(); } while (hi == hi_target && timer_hw->timerawl < (uint32_t) target) { hi = timer_hw->timerawh; tight_loop_contents(); } } /// \end::busy_wait[] static inline uint harware_alarm_irq_number(uint alarm_num) { return TIMER_IRQ_0 + alarm_num; } static void hardware_alarm_irq_handler(void) { // Determine which timer this IRQ is for uint alarm_num = __get_current_exception() - VTABLE_FIRST_IRQ - TIMER_IRQ_0; check_hardware_alarm_num_param(alarm_num); hardware_alarm_callback_t callback = NULL; spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_TIMER); uint32_t save = spin_lock_blocking(lock); // Clear the timer IRQ (inside lock, because we check whether we have handled the IRQ yet in alarm_set by looking at the interrupt status timer_hw->intr = 1u << alarm_num; // Clear any forced IRQ hw_clear_bits(&timer_hw->intf, 1u << alarm_num); // make sure the IRQ is still valid if (timer_callbacks_pending & (1u << alarm_num)) { // Now check whether we have a timer event to handle that isn't already obsolete (this could happen if we // were already in the IRQ handler before someone else changed the timer setup if (timer_hw->timerawh >= target_hi[alarm_num]) { // we have reached the right high word as well as low word value callback = alarm_callbacks[alarm_num]; timer_callbacks_pending &= (uint8_t)~(1u << alarm_num); } else { // try again in 2^32 us timer_hw->alarm[alarm_num] = timer_hw->alarm[alarm_num]; // re-arm the timer } } spin_unlock(lock, save); if (callback) { callback(alarm_num); } } void hardware_alarm_set_callback(uint alarm_num, hardware_alarm_callback_t callback) { // todo check current core owner // note this should probably be subsumed by irq_set_exclusive_handler anyway, since that // should disallow IRQ handlers on both cores check_hardware_alarm_num_param(alarm_num); uint irq_num = harware_alarm_irq_number(alarm_num); spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_TIMER); uint32_t save = spin_lock_blocking(lock); if (callback) { if (hardware_alarm_irq_handler != irq_get_vtable_handler(irq_num)) { // note that set_exclusive will silently allow you to set the handler to the same thing // since it is idempotent, which means we don't need to worry about locking ourselves irq_set_exclusive_handler(irq_num, hardware_alarm_irq_handler); irq_set_enabled(irq_num, true); // Enable interrupt in block and at processor hw_set_bits(&timer_hw->inte, 1u << alarm_num); } alarm_callbacks[alarm_num] = callback; } else { alarm_callbacks[alarm_num] = NULL; timer_callbacks_pending &= (uint8_t)~(1u << alarm_num); irq_remove_handler(irq_num, hardware_alarm_irq_handler); irq_set_enabled(irq_num, false); } spin_unlock(lock, save); } bool hardware_alarm_set_target(uint alarm_num, absolute_time_t target) { bool missed; uint64_t now = time_us_64(); uint64_t t = to_us_since_boot(target); if (now >= t) { missed = true; } else { missed = false; // 1) actually set the hardware timer spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_TIMER); uint32_t save = spin_lock_blocking(lock); uint8_t old_timer_callbacks_pending = timer_callbacks_pending; timer_callbacks_pending |= (uint8_t)(1u << alarm_num); timer_hw->intr = 1u << alarm_num; // clear any IRQ timer_hw->alarm[alarm_num] = (uint32_t) t; // Set the alarm. Writing time should arm it target_hi[alarm_num] = (uint32_t)(t >> 32u); // 2) check for races if (!(timer_hw->armed & 1u << alarm_num)) { // not armed, so has already fired .. IRQ must be pending (we are still under lock) assert(timer_hw->ints & 1u << alarm_num); } else { if (time_us_64() >= t) { // we are already at or past the right time; there is no point in us racing against the IRQ // we are about to generate. note however that, if there was already a timer pending before, // then we still let the IRQ fire, as whatever it was, is not handled by our setting missed=true here missed = true; if (timer_callbacks_pending != old_timer_callbacks_pending) { // disarm the timer timer_hw->armed = 1u << alarm_num; // clear the IRQ... timer_hw->intr = 1u << alarm_num; // ... including anything pending on the processor - perhaps unnecessary, but // our timer flag says we aren't expecting anything. irq_clear(harware_alarm_irq_number(alarm_num)); // and clear our flag so that if the IRQ handler is already active (because it is on // the other core) it will also skip doing anything timer_callbacks_pending = old_timer_callbacks_pending; } } } spin_unlock(lock, save); // note at this point any pending timer IRQ can likely run } return missed; } void hardware_alarm_cancel(uint alarm_num) { check_hardware_alarm_num_param(alarm_num); spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_TIMER); uint32_t save = spin_lock_blocking(lock); timer_hw->armed = 1u << alarm_num; timer_callbacks_pending &= (uint8_t)~(1u << alarm_num); spin_unlock(lock, save); } void hardware_alarm_force_irq(uint alarm_num) { check_hardware_alarm_num_param(alarm_num); spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_TIMER); uint32_t save = spin_lock_blocking(lock); timer_callbacks_pending |= (uint8_t)(1u << alarm_num); spin_unlock(lock, save); hw_set_bits(&timer_hw->intf, 1u << alarm_num); } ================================================ FILE: pico-sdk/src/rp2_common/hardware_uart/CMakeLists.txt ================================================ pico_simple_hardware_target(uart) pico_mirrored_target_link_libraries(hardware_uart INTERFACE hardware_resets hardware_clocks) ================================================ FILE: pico-sdk/src/rp2_common/hardware_uart/include/hardware/uart.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_UART_H #define _HARDWARE_UART_H #include "pico.h" #include "hardware/structs/uart.h" #include "hardware/regs/dreq.h" // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_UART, Enable/disable assertions in the UART module, type=bool, default=0, group=hardware_uart #ifndef PARAM_ASSERTIONS_ENABLED_UART #define PARAM_ASSERTIONS_ENABLED_UART 0 #endif #ifdef __cplusplus extern "C" { #endif // PICO_CONFIG: PICO_UART_ENABLE_CRLF_SUPPORT, Enable/disable CR/LF translation support, type=bool, default=1, group=hardware_uart #ifndef PICO_UART_ENABLE_CRLF_SUPPORT #define PICO_UART_ENABLE_CRLF_SUPPORT 1 #endif // PICO_CONFIG: PICO_UART_DEFAULT_CRLF, Enable/disable CR/LF translation on UART, type=bool, default=0, depends=PICO_UART_ENABLE_CRLF_SUPPORT, group=hardware_uart #ifndef PICO_UART_DEFAULT_CRLF #define PICO_UART_DEFAULT_CRLF 0 #endif // PICO_CONFIG: PICO_DEFAULT_UART, Define the default UART used for printf etc, min=0, max=1, group=hardware_uart // PICO_CONFIG: PICO_DEFAULT_UART_TX_PIN, Define the default UART TX pin, min=0, max=29, group=hardware_uart // PICO_CONFIG: PICO_DEFAULT_UART_RX_PIN, Define the default UART RX pin, min=0, max=29, group=hardware_uart // PICO_CONFIG: PICO_DEFAULT_UART_BAUD_RATE, Define the default UART baudrate, max=921600, default=115200, group=hardware_uart #ifndef PICO_DEFAULT_UART_BAUD_RATE #define PICO_DEFAULT_UART_BAUD_RATE 115200 ///< Default baud rate #endif /** \file hardware/uart.h * \defgroup hardware_uart hardware_uart * * Hardware UART API * * RP2040 has 2 identical instances of a UART peripheral, based on the ARM PL011. Each UART can be connected to a number * of GPIO pins as defined in the GPIO muxing. * * Only the TX, RX, RTS, and CTS signals are * connected, meaning that the modem mode and IrDA mode of the PL011 are not supported. * * \subsection uart_example Example * \addtogroup hardware_uart * * \code * int main() { * * // Initialise UART 0 * uart_init(uart0, 115200); * * // Set the GPIO pin mux to the UART - 0 is TX, 1 is RX * gpio_set_function(0, GPIO_FUNC_UART); * gpio_set_function(1, GPIO_FUNC_UART); * * uart_puts(uart0, "Hello world!"); * } * \endcode */ // Currently always a pointer to hw but it might not be in the future typedef struct uart_inst uart_inst_t; /** The UART identifiers for use in UART functions. * * e.g. uart_init(uart1, 48000) * * \ingroup hardware_uart * @{ */ #define uart0 ((uart_inst_t *)uart0_hw) ///< Identifier for UART instance 0 #define uart1 ((uart_inst_t *)uart1_hw) ///< Identifier for UART instance 1 /** @} */ #if !defined(PICO_DEFAULT_UART_INSTANCE) && defined(PICO_DEFAULT_UART) #define PICO_DEFAULT_UART_INSTANCE (__CONCAT(uart,PICO_DEFAULT_UART)) #endif #ifdef PICO_DEFAULT_UART_INSTANCE #define uart_default PICO_DEFAULT_UART_INSTANCE #endif /*! \brief Convert UART instance to hardware instance number * \ingroup hardware_uart * * \param uart UART instance * \return Number of UART, 0 or 1. */ static inline uint uart_get_index(uart_inst_t *uart) { invalid_params_if(UART, uart != uart0 && uart != uart1); return uart == uart1 ? 1 : 0; } static inline uart_inst_t *uart_get_instance(uint instance) { static_assert(NUM_UARTS == 2, ""); invalid_params_if(UART, instance >= NUM_UARTS); return instance ? uart1 : uart0; } static inline uart_hw_t *uart_get_hw(uart_inst_t *uart) { uart_get_index(uart); // check it is a hw uart return (uart_hw_t *)uart; } /** \brief UART Parity enumeration * \ingroup hardware_uart */ typedef enum { UART_PARITY_NONE, UART_PARITY_EVEN, UART_PARITY_ODD } uart_parity_t; // ---------------------------------------------------------------------------- // Setup /*! \brief Initialise a UART * \ingroup hardware_uart * * Put the UART into a known state, and enable it. Must be called before other * functions. * * This function always enables the FIFOs, and configures the UART for the * following default line format: * * - 8 data bits * - No parity bit * - One stop bit * * \note There is no guarantee that the baudrate requested will be possible, the nearest will be chosen, * and this function will return the configured baud rate. * * \param uart UART instance. \ref uart0 or \ref uart1 * \param baudrate Baudrate of UART in Hz * \return Actual set baudrate */ uint uart_init(uart_inst_t *uart, uint baudrate); /*! \brief DeInitialise a UART * \ingroup hardware_uart * * Disable the UART if it is no longer used. Must be reinitialised before * being used again. * * \param uart UART instance. \ref uart0 or \ref uart1 */ void uart_deinit(uart_inst_t *uart); /*! \brief Set UART baud rate * \ingroup hardware_uart * * Set baud rate as close as possible to requested, and return actual rate selected. * * The UART is paused for around two character periods whilst the settings are * changed. Data received during this time may be dropped by the UART. * * Any characters still in the transmit buffer will be sent using the new * updated baud rate. uart_tx_wait_blocking() can be called before this * function to ensure all characters at the old baud rate have been sent * before the rate is changed. * * This function should not be called from an interrupt context, and the UART * interrupt should be disabled before calling this function. * * \param uart UART instance. \ref uart0 or \ref uart1 * \param baudrate Baudrate in Hz * \return Actual set baudrate */ uint uart_set_baudrate(uart_inst_t *uart, uint baudrate); /*! \brief Set UART flow control CTS/RTS * \ingroup hardware_uart * * \param uart UART instance. \ref uart0 or \ref uart1 * \param cts If true enable flow control of TX by clear-to-send input * \param rts If true enable assertion of request-to-send output by RX flow control */ static inline void uart_set_hw_flow(uart_inst_t *uart, bool cts, bool rts) { hw_write_masked(&uart_get_hw(uart)->cr, (bool_to_bit(cts) << UART_UARTCR_CTSEN_LSB) | (bool_to_bit(rts) << UART_UARTCR_RTSEN_LSB), UART_UARTCR_RTSEN_BITS | UART_UARTCR_CTSEN_BITS); } /*! \brief Set UART data format * \ingroup hardware_uart * * Configure the data format (bits etc) for the UART. * * The UART is paused for around two character periods whilst the settings are * changed. Data received during this time may be dropped by the UART. * * Any characters still in the transmit buffer will be sent using the new * updated data format. uart_tx_wait_blocking() can be called before this * function to ensure all characters needing the old format have been sent * before the format is changed. * * This function should not be called from an interrupt context, and the UART * interrupt should be disabled before calling this function. * * \param uart UART instance. \ref uart0 or \ref uart1 * \param data_bits Number of bits of data. 5..8 * \param stop_bits Number of stop bits 1..2 * \param parity Parity option. */ void uart_set_format(uart_inst_t *uart, uint data_bits, uint stop_bits, uart_parity_t parity); /*! \brief Setup UART interrupts * \ingroup hardware_uart * * Enable the UART's interrupt output. An interrupt handler will need to be installed prior to calling * this function. * * \param uart UART instance. \ref uart0 or \ref uart1 * \param rx_has_data If true an interrupt will be fired when the RX FIFO contains data. * \param tx_needs_data If true an interrupt will be fired when the TX FIFO needs data. */ static inline void uart_set_irq_enables(uart_inst_t *uart, bool rx_has_data, bool tx_needs_data) { // Both UARTRXINTR (RX) and UARTRTINTR (RX timeout) interrupts are // required for rx_has_data. RX asserts when >=4 characters are in the RX // FIFO (for RXIFLSEL=0). RT asserts when there are >=1 characters and no // more have been received for 32 bit periods. uart_get_hw(uart)->imsc = (bool_to_bit(tx_needs_data) << UART_UARTIMSC_TXIM_LSB) | (bool_to_bit(rx_has_data) << UART_UARTIMSC_RXIM_LSB) | (bool_to_bit(rx_has_data) << UART_UARTIMSC_RTIM_LSB); if (rx_has_data) { // Set minimum threshold hw_write_masked(&uart_get_hw(uart)->ifls, 0 << UART_UARTIFLS_RXIFLSEL_LSB, UART_UARTIFLS_RXIFLSEL_BITS); } if (tx_needs_data) { // Set maximum threshold hw_write_masked(&uart_get_hw(uart)->ifls, 0 << UART_UARTIFLS_TXIFLSEL_LSB, UART_UARTIFLS_TXIFLSEL_BITS); } } /*! \brief Test if specific UART is enabled * \ingroup hardware_uart * * \param uart UART instance. \ref uart0 or \ref uart1 * \return true if the UART is enabled */ static inline bool uart_is_enabled(uart_inst_t *uart) { return !!(uart_get_hw(uart)->cr & UART_UARTCR_UARTEN_BITS); } /*! \brief Enable/Disable the FIFOs on specified UART * \ingroup hardware_uart * * The UART is paused for around two character periods whilst the settings are * changed. Data received during this time may be dropped by the UART. * * Any characters still in the transmit FIFO will be lost if the FIFO is * disabled. uart_tx_wait_blocking() can be called before this * function to avoid this. * * This function should not be called from an interrupt context, and the UART * interrupt should be disabled when calling this function. * * \param uart UART instance. \ref uart0 or \ref uart1 * \param enabled true to enable FIFO (default), false to disable */ void uart_set_fifo_enabled(uart_inst_t *uart, bool enabled); // ---------------------------------------------------------------------------- // Generic input/output /*! \brief Determine if space is available in the TX FIFO * \ingroup hardware_uart * * \param uart UART instance. \ref uart0 or \ref uart1 * \return false if no space available, true otherwise */ static inline bool uart_is_writable(uart_inst_t *uart) { return !(uart_get_hw(uart)->fr & UART_UARTFR_TXFF_BITS); } /*! \brief Wait for the UART TX fifo to be drained * \ingroup hardware_uart * * \param uart UART instance. \ref uart0 or \ref uart1 */ static inline void uart_tx_wait_blocking(uart_inst_t *uart) { while (uart_get_hw(uart)->fr & UART_UARTFR_BUSY_BITS) tight_loop_contents(); } /*! \brief Determine whether data is waiting in the RX FIFO * \ingroup hardware_uart * * \param uart UART instance. \ref uart0 or \ref uart1 * \return true if the RX FIFO is not empty, otherwise false. * */ static inline bool uart_is_readable(uart_inst_t *uart) { // PL011 doesn't expose levels directly, so return values are only 0 or 1 return !(uart_get_hw(uart)->fr & UART_UARTFR_RXFE_BITS); } /*! \brief Write to the UART for transmission. * \ingroup hardware_uart * * This function will block until all the data has been sent to the UART * * \param uart UART instance. \ref uart0 or \ref uart1 * \param src The bytes to send * \param len The number of bytes to send */ static inline void uart_write_blocking(uart_inst_t *uart, const uint8_t *src, size_t len) { for (size_t i = 0; i < len; ++i) { while (!uart_is_writable(uart)) tight_loop_contents(); uart_get_hw(uart)->dr = *src++; } } /*! \brief Read from the UART * \ingroup hardware_uart * * This function blocks until len characters have been read from the UART * * \param uart UART instance. \ref uart0 or \ref uart1 * \param dst Buffer to accept received bytes * \param len The number of bytes to receive. */ static inline void uart_read_blocking(uart_inst_t *uart, uint8_t *dst, size_t len) { for (size_t i = 0; i < len; ++i) { while (!uart_is_readable(uart)) tight_loop_contents(); *dst++ = (uint8_t) uart_get_hw(uart)->dr; } } // ---------------------------------------------------------------------------- // UART-specific operations and aliases /*! \brief Write single character to UART for transmission. * \ingroup hardware_uart * * This function will block until the entire character has been sent * * \param uart UART instance. \ref uart0 or \ref uart1 * \param c The character to send */ static inline void uart_putc_raw(uart_inst_t *uart, char c) { uart_write_blocking(uart, (const uint8_t *) &c, 1); } /*! \brief Write single character to UART for transmission, with optional CR/LF conversions * \ingroup hardware_uart * * This function will block until the character has been sent * * \param uart UART instance. \ref uart0 or \ref uart1 * \param c The character to send */ static inline void uart_putc(uart_inst_t *uart, char c) { #if PICO_UART_ENABLE_CRLF_SUPPORT extern short uart_char_to_line_feed[NUM_UARTS]; if (uart_char_to_line_feed[uart_get_index(uart)] == c) uart_putc_raw(uart, '\r'); #endif uart_putc_raw(uart, c); } /*! \brief Write string to UART for transmission, doing any CR/LF conversions * \ingroup hardware_uart * * This function will block until the entire string has been sent * * \param uart UART instance. \ref uart0 or \ref uart1 * \param s The null terminated string to send */ static inline void uart_puts(uart_inst_t *uart, const char *s) { #if PICO_UART_ENABLE_CRLF_SUPPORT bool last_was_cr = false; while (*s) { // Don't add extra carriage returns if one is present if (last_was_cr) uart_putc_raw(uart, *s); else uart_putc(uart, *s); last_was_cr = *s++ == '\r'; } #else while (*s) uart_putc(uart, *s++); #endif } /*! \brief Read a single character from the UART * \ingroup hardware_uart * * This function will block until a character has been read * * \param uart UART instance. \ref uart0 or \ref uart1 * \return The character read. */ static inline char uart_getc(uart_inst_t *uart) { char c; uart_read_blocking(uart, (uint8_t *) &c, 1); return c; } /*! \brief Assert a break condition on the UART transmission. * \ingroup hardware_uart * * \param uart UART instance. \ref uart0 or \ref uart1 * \param en Assert break condition (TX held low) if true. Clear break condition if false. */ void uart_set_break(uart_inst_t *uart, bool en); /*! \brief Set CR/LF conversion on UART * \ingroup hardware_uart * * \param uart UART instance. \ref uart0 or \ref uart1 * \param translate If true, convert line feeds to carriage return on transmissions */ void uart_set_translate_crlf(uart_inst_t *uart, bool translate); /*! \brief Wait for the default UART's TX FIFO to be drained * \ingroup hardware_uart */ static inline void uart_default_tx_wait_blocking(void) { #ifdef uart_default uart_tx_wait_blocking(uart_default); #else assert(false); #endif } /*! \brief Wait for up to a certain number of microseconds for the RX FIFO to be non empty * \ingroup hardware_uart * * \param uart UART instance. \ref uart0 or \ref uart1 * \param us the number of microseconds to wait at most (may be 0 for an instantaneous check) * \return true if the RX FIFO became non empty before the timeout, false otherwise */ bool uart_is_readable_within_us(uart_inst_t *uart, uint32_t us); /*! \brief Return the DREQ to use for pacing transfers to/from a particular UART instance * \ingroup hardware_uart * * \param uart UART instance. \ref uart0 or \ref uart1 * \param is_tx true for sending data to the UART instance, false for receiving data from the UART instance */ static inline uint uart_get_dreq(uart_inst_t *uart, bool is_tx) { static_assert(DREQ_UART0_RX == DREQ_UART0_TX + 1, ""); static_assert(DREQ_UART1_RX == DREQ_UART1_TX + 1, ""); static_assert(DREQ_UART1_TX == DREQ_UART0_TX + 2, ""); return DREQ_UART0_TX + uart_get_index(uart) * 2 + !is_tx; } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_uart/uart.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/address_mapped.h" #include "hardware/platform_defs.h" #include "hardware/uart.h" #include "hardware/structs/uart.h" #include "hardware/resets.h" #include "hardware/clocks.h" #include "hardware/timer.h" #include "pico/assert.h" #include "pico.h" check_hw_layout(uart_hw_t, fr, UART_UARTFR_OFFSET); check_hw_layout(uart_hw_t, dmacr, UART_UARTDMACR_OFFSET); #if PICO_UART_ENABLE_CRLF_SUPPORT short uart_char_to_line_feed[NUM_UARTS]; #endif /// \tag::uart_reset[] static inline void uart_reset(uart_inst_t *uart) { invalid_params_if(UART, uart != uart0 && uart != uart1); reset_block(uart_get_index(uart) ? RESETS_RESET_UART1_BITS : RESETS_RESET_UART0_BITS); } static inline void uart_unreset(uart_inst_t *uart) { invalid_params_if(UART, uart != uart0 && uart != uart1); unreset_block_wait(uart_get_index(uart) ? RESETS_RESET_UART1_BITS : RESETS_RESET_UART0_BITS); } /// \end::uart_reset[] /// \tag::uart_init[] uint uart_init(uart_inst_t *uart, uint baudrate) { invalid_params_if(UART, uart != uart0 && uart != uart1); if (clock_get_hz(clk_peri) == 0) { return 0; } uart_reset(uart); uart_unreset(uart); #if PICO_UART_ENABLE_CRLF_SUPPORT uart_set_translate_crlf(uart, PICO_UART_DEFAULT_CRLF); #endif // Any LCR writes need to take place before enabling the UART uint baud = uart_set_baudrate(uart, baudrate); uart_set_format(uart, 8, 1, UART_PARITY_NONE); // Enable FIFOs (must be before setting UARTEN, as this is an LCR access) hw_set_bits(&uart_get_hw(uart)->lcr_h, UART_UARTLCR_H_FEN_BITS); // Enable the UART, both TX and RX uart_get_hw(uart)->cr = UART_UARTCR_UARTEN_BITS | UART_UARTCR_TXE_BITS | UART_UARTCR_RXE_BITS; // Always enable DREQ signals -- no harm in this if DMA is not listening uart_get_hw(uart)->dmacr = UART_UARTDMACR_TXDMAE_BITS | UART_UARTDMACR_RXDMAE_BITS; return baud; } /// \end::uart_init[] void uart_deinit(uart_inst_t *uart) { invalid_params_if(UART, uart != uart0 && uart != uart1); uart_reset(uart); } static uint32_t uart_disable_before_lcr_write(uart_inst_t *uart) { // Notes from PL011 reference manual: // // - Before writing the LCR, if the UART is enabled it needs to be // disabled and any current TX + RX activity has to be completed // // - There is a BUSY flag which waits for the current TX char, but this is // OR'd with TX FIFO !FULL, so not usable when FIFOs are enabled and // potentially nonempty // // - FIFOs can't be set to disabled whilst a character is in progress // (else "FIFO integrity is not guaranteed") // // Combination of these means there is no general way to halt and poll for // end of TX character, if FIFOs may be enabled. Either way, there is no // way to poll for end of RX character. // // So, insert a 15 Baud period delay before changing the settings. // 15 Baud is comfortably higher than start + max data + parity + stop. // Anything else would require API changes to permit a non-enabled UART // state after init() where settings can be changed safely. uint32_t cr_save = uart_get_hw(uart)->cr; if (cr_save & UART_UARTCR_UARTEN_BITS) { hw_clear_bits(&uart_get_hw(uart)->cr, UART_UARTCR_UARTEN_BITS | UART_UARTCR_TXE_BITS | UART_UARTCR_RXE_BITS); uint32_t current_ibrd = uart_get_hw(uart)->ibrd; uint32_t current_fbrd = uart_get_hw(uart)->fbrd; // Note: Maximise precision here. Show working, the compiler will mop this up. // Create a 16.6 fixed-point fractional division ratio; then scale to 32-bits. uint32_t brdiv_ratio = 64u * current_ibrd + current_fbrd; brdiv_ratio <<= 10; // 3662 is ~(15 * 244.14) where 244.14 is 16e6 / 2^16 uint32_t scaled_freq = clock_get_hz(clk_peri) / 3662ul; uint32_t wait_time_us = brdiv_ratio / scaled_freq; busy_wait_us(wait_time_us); } return cr_save; } static void uart_write_lcr_bits_masked(uart_inst_t *uart, uint32_t values, uint32_t write_mask) { invalid_params_if(UART, uart != uart0 && uart != uart1); // (Potentially) Cleanly handle disabling the UART before touching LCR uint32_t cr_save = uart_disable_before_lcr_write(uart); hw_write_masked(&uart_get_hw(uart)->lcr_h, values, write_mask); uart_get_hw(uart)->cr = cr_save; } /// \tag::uart_set_baudrate[] uint uart_set_baudrate(uart_inst_t *uart, uint baudrate) { invalid_params_if(UART, baudrate == 0); uint32_t baud_rate_div = (8 * clock_get_hz(clk_peri) / baudrate); uint32_t baud_ibrd = baud_rate_div >> 7; uint32_t baud_fbrd; if (baud_ibrd == 0) { baud_ibrd = 1; baud_fbrd = 0; } else if (baud_ibrd >= 65535) { baud_ibrd = 65535; baud_fbrd = 0; } else { baud_fbrd = ((baud_rate_div & 0x7f) + 1) / 2; } uart_get_hw(uart)->ibrd = baud_ibrd; uart_get_hw(uart)->fbrd = baud_fbrd; // PL011 needs a (dummy) LCR_H write to latch in the divisors. // We don't want to actually change LCR_H contents here. uart_write_lcr_bits_masked(uart, 0, 0); // See datasheet return (4 * clock_get_hz(clk_peri)) / (64 * baud_ibrd + baud_fbrd); } /// \end::uart_set_baudrate[] void uart_set_format(uart_inst_t *uart, uint data_bits, uint stop_bits, uart_parity_t parity) { invalid_params_if(UART, data_bits < 5 || data_bits > 8); invalid_params_if(UART, stop_bits != 1 && stop_bits != 2); invalid_params_if(UART, parity != UART_PARITY_NONE && parity != UART_PARITY_EVEN && parity != UART_PARITY_ODD); uart_write_lcr_bits_masked(uart, ((data_bits - 5u) << UART_UARTLCR_H_WLEN_LSB) | ((stop_bits - 1u) << UART_UARTLCR_H_STP2_LSB) | (bool_to_bit(parity != UART_PARITY_NONE) << UART_UARTLCR_H_PEN_LSB) | (bool_to_bit(parity == UART_PARITY_EVEN) << UART_UARTLCR_H_EPS_LSB), UART_UARTLCR_H_WLEN_BITS | UART_UARTLCR_H_STP2_BITS | UART_UARTLCR_H_PEN_BITS | UART_UARTLCR_H_EPS_BITS); } void uart_set_fifo_enabled(uart_inst_t *uart, bool enabled) { uint32_t lcr_h_fen_bits = 0; if (enabled) { lcr_h_fen_bits = UART_UARTLCR_H_FEN_BITS; } uart_write_lcr_bits_masked(uart, lcr_h_fen_bits, UART_UARTLCR_H_FEN_BITS); } void uart_set_break(uart_inst_t *uart, bool en) { uint32_t lcr_h_brk_bits = 0; if (en) { lcr_h_brk_bits = UART_UARTLCR_H_BRK_BITS; } uart_write_lcr_bits_masked(uart, lcr_h_brk_bits, UART_UARTLCR_H_BRK_BITS); } void uart_set_translate_crlf(uart_inst_t *uart, bool crlf) { #if PICO_UART_ENABLE_CRLF_SUPPORT uart_char_to_line_feed[uart_get_index(uart)] = crlf ? '\n' : 0x100; #else panic_unsupported(); #endif } bool uart_is_readable_within_us(uart_inst_t *uart, uint32_t us) { uint32_t t = time_us_32(); do { if (uart_is_readable(uart)) { return true; } } while ((time_us_32() - t) <= us); return false; } ================================================ FILE: pico-sdk/src/rp2_common/hardware_vreg/CMakeLists.txt ================================================ pico_simple_hardware_target(vreg) ================================================ FILE: pico-sdk/src/rp2_common/hardware_vreg/include/hardware/vreg.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_VREG_H #define _HARDWARE_VREG_H #include "pico.h" #include "hardware/structs/vreg_and_chip_reset.h" #ifdef __cplusplus extern "C" { #endif /** \file vreg.h * \defgroup hardware_vreg hardware_vreg * * Voltage Regulation API * */ /** Possible voltage values that can be applied to the regulator */ enum vreg_voltage { VREG_VOLTAGE_0_85 = 0b0110, ///< 0.85v VREG_VOLTAGE_0_90 = 0b0111, ///< 0.90v VREG_VOLTAGE_0_95 = 0b1000, ///< 0.95v VREG_VOLTAGE_1_00 = 0b1001, ///< 1.00v VREG_VOLTAGE_1_05 = 0b1010, ///< 1.05v VREG_VOLTAGE_1_10 = 0b1011, ///< 1.10v VREG_VOLTAGE_1_15 = 0b1100, ///< 1.15v VREG_VOLTAGE_1_20 = 0b1101, ///< 1.20v VREG_VOLTAGE_1_25 = 0b1110, ///< 1.25v VREG_VOLTAGE_1_30 = 0b1111, ///< 1.30v VREG_VOLTAGE_MIN = VREG_VOLTAGE_0_85, ///< Always the minimum possible voltage VREG_VOLTAGE_DEFAULT = VREG_VOLTAGE_1_10, ///< Default voltage on power up. VREG_VOLTAGE_MAX = VREG_VOLTAGE_1_30, ///< Always the maximum possible voltage }; /*! \brief Set voltage * \ingroup hardware_vreg * * \param voltage The voltage (from enumeration \ref vreg_voltage) to apply to the voltage regulator **/ void vreg_set_voltage(enum vreg_voltage voltage); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_vreg/vreg.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" #include "hardware/vreg.h" void vreg_set_voltage(enum vreg_voltage voltage) { hw_write_masked(&vreg_and_chip_reset_hw->vreg, ((uint)voltage) << VREG_AND_CHIP_RESET_VREG_VSEL_LSB, VREG_AND_CHIP_RESET_VREG_VSEL_BITS); } ================================================ FILE: pico-sdk/src/rp2_common/hardware_watchdog/CMakeLists.txt ================================================ pico_simple_hardware_target(watchdog) ================================================ FILE: pico-sdk/src/rp2_common/hardware_watchdog/include/hardware/watchdog.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_WATCHDOG_H #define _HARDWARE_WATCHDOG_H #include "pico.h" #include "hardware/structs/watchdog.h" /** \file hardware/watchdog.h * \defgroup hardware_watchdog hardware_watchdog * * Hardware Watchdog Timer API * * Supporting functions for the Pico hardware watchdog timer. * * The RP2040 has a built in HW watchdog Timer. This is a countdown timer that can restart parts of the chip if it reaches zero. * For example, this can be used to restart the processor if the software running on it gets stuck in an infinite loop * or similar. The programmer has to periodically write a value to the watchdog to stop it reaching zero. * * \subsection watchdog_example Example * \addtogroup hardware_watchdog * \include hello_watchdog.c */ #ifdef __cplusplus extern "C" { #endif /*! \brief Define actions to perform at watchdog timeout * \ingroup hardware_watchdog * * \note If \ref watchdog_start_tick value does not give a 1MHz clock to the watchdog system, then the \p delay_ms * parameter will not be in microseconds. See the datasheet for more details. * * By default the SDK assumes a 12MHz XOSC and sets the \ref watchdog_start_tick appropriately. * * \param pc If Zero, a standard boot will be performed, if non-zero this is the program counter to jump to on reset. * \param sp If \p pc is non-zero, this will be the stack pointer used. * \param delay_ms Initial load value. Maximum value 0x7fffff, approximately 8.3s. */ void watchdog_reboot(uint32_t pc, uint32_t sp, uint32_t delay_ms); /*! \brief Start the watchdog tick * \ingroup hardware_watchdog * * \param cycles This needs to be a divider that when applied to the XOSC input, produces a 1MHz clock. So if the XOSC is * 12MHz, this will need to be 12. */ void watchdog_start_tick(uint cycles); /*! \brief Reload the watchdog counter with the amount of time set in watchdog_enable * \ingroup hardware_watchdog * */ void watchdog_update(void); /** * \brief Enable the watchdog * \ingroup hardware_watchdog * * \note If \ref watchdog_start_tick value does not give a 1MHz clock to the watchdog system, then the \p delay_ms * parameter will not be in microseconds. See the datasheet for more details. * * By default the SDK assumes a 12MHz XOSC and sets the \ref watchdog_start_tick appropriately. * * This method sets a marker in the watchdog scratch register 4 that is checked by \ref watchdog_enable_caused_reboot. * If the device is subsequently reset via a call to watchdog_reboot (including for example by dragging a UF2 * onto the RPI-RP2), then this value will be cleared, and so \ref watchdog_enable_caused_reboot will * return false. * * \param delay_ms Number of milliseconds before watchdog will reboot without watchdog_update being called. Maximum of 0x7fffff, which is approximately 8.3 seconds * \param pause_on_debug If the watchdog should be paused when the debugger is stepping through code */ void watchdog_enable(uint32_t delay_ms, bool pause_on_debug); /** * \brief Did the watchdog cause the last reboot? * \ingroup hardware_watchdog * * @return true If the watchdog timer or a watchdog force caused the last reboot * @return false If there has been no watchdog reboot since the last power on reset. A power on reset is typically caused by a power cycle or the run pin (reset button) being toggled. */ bool watchdog_caused_reboot(void); /** * \brief Did watchdog_enable cause the last reboot? * \ingroup hardware_watchdog * * Perform additional checking along with \ref watchdog_caused_reboot to determine if a watchdog timeout initiated by * \ref watchdog_enable caused the last reboot. * * This method checks for a special value in watchdog scratch register 4 placed there by \ref watchdog_enable. * This would not be present if a watchdog reset is initiated by \ref watchdog_reboot or by the RP2040 bootrom * (e.g. dragging a UF2 onto the RPI-RP2 drive). * * @return true If the watchdog timer or a watchdog force caused (see \ref watchdog_caused_reboot) the last reboot * and the watchdog reboot happened after \ref watchdog_enable was called * @return false If there has been no watchdog reboot since the last power on reset, or the watchdog reboot was not caused * by a watchdog timeout after \ref watchdog_enable was called. * A power on reset is typically caused by a power cycle or the run pin (reset button) being toggled. */ bool watchdog_enable_caused_reboot(void); /** * @brief Returns the number of microseconds before the watchdog will reboot the chip. * \ingroup hardware_watchdog * * @return The number of microseconds before the watchdog will reboot the chip. */ uint32_t watchdog_get_count(void); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "hardware/watchdog.h" #include "hardware/structs/watchdog.h" #include "hardware/structs/psm.h" /// \tag::watchdog_start_tick[] void watchdog_start_tick(uint cycles) { // Important: This function also provides a tick reference to the timer watchdog_hw->tick = cycles | WATCHDOG_TICK_ENABLE_BITS; } /// \end::watchdog_start_tick[] // Value to load when updating the watchdog // tag::watchdog_update[] static uint32_t load_value; void watchdog_update(void) { watchdog_hw->load = load_value; } // end::watchdog_update[] uint32_t watchdog_get_count(void) { return (watchdog_hw->ctrl & WATCHDOG_CTRL_TIME_BITS) / 2 ; } // tag::watchdog_enable[] // Helper function used by both watchdog_enable and watchdog_reboot void _watchdog_enable(uint32_t delay_ms, bool pause_on_debug) { hw_clear_bits(&watchdog_hw->ctrl, WATCHDOG_CTRL_ENABLE_BITS); // Reset everything apart from ROSC and XOSC hw_set_bits(&psm_hw->wdsel, PSM_WDSEL_BITS & ~(PSM_WDSEL_ROSC_BITS | PSM_WDSEL_XOSC_BITS)); uint32_t dbg_bits = WATCHDOG_CTRL_PAUSE_DBG0_BITS | WATCHDOG_CTRL_PAUSE_DBG1_BITS | WATCHDOG_CTRL_PAUSE_JTAG_BITS; if (pause_on_debug) { hw_set_bits(&watchdog_hw->ctrl, dbg_bits); } else { hw_clear_bits(&watchdog_hw->ctrl, dbg_bits); } if (!delay_ms) { hw_set_bits(&watchdog_hw->ctrl, WATCHDOG_CTRL_TRIGGER_BITS); } else { // Note, we have x2 here as the watchdog HW currently decrements twice per tick load_value = delay_ms * 1000 * 2; if (load_value > 0xffffffu) load_value = 0xffffffu; watchdog_update(); hw_set_bits(&watchdog_hw->ctrl, WATCHDOG_CTRL_ENABLE_BITS); } } // end::watchdog_enable[] #define WATCHDOG_NON_REBOOT_MAGIC 0x6ab73121 void watchdog_enable(uint32_t delay_ms, bool pause_on_debug) { // update scratch[4] to distinguish from magic used for reboot to specific address, or 0 used to reboot // into regular flash path watchdog_hw->scratch[4] = WATCHDOG_NON_REBOOT_MAGIC; _watchdog_enable(delay_ms, pause_on_debug); } void watchdog_reboot(uint32_t pc, uint32_t sp, uint32_t delay_ms) { check_hw_layout(watchdog_hw_t, scratch[7], WATCHDOG_SCRATCH7_OFFSET); // Clear enable before setting up scratch registers hw_clear_bits(&watchdog_hw->ctrl, WATCHDOG_CTRL_ENABLE_BITS); if (pc) { pc |= 1u; // thumb mode watchdog_hw->scratch[4] = 0xb007c0d3; watchdog_hw->scratch[5] = pc ^ -0xb007c0d3; watchdog_hw->scratch[6] = sp; watchdog_hw->scratch[7] = pc; // printf("rebooting %08x/%08x in %dms...\n", (uint) pc, (uint) sp, (uint) delay_ms); } else { watchdog_hw->scratch[4] = 0; // printf("rebooting (regular)) in %dms...\n", (uint) delay_ms); } // Don't pause watchdog for debug _watchdog_enable(delay_ms, 0); } bool watchdog_caused_reboot(void) { // If any reason bits are set this is true return watchdog_hw->reason; } bool watchdog_enable_caused_reboot(void) { return watchdog_hw->reason && watchdog_hw->scratch[4] == WATCHDOG_NON_REBOOT_MAGIC; } ================================================ FILE: pico-sdk/src/rp2_common/hardware_xosc/CMakeLists.txt ================================================ pico_simple_hardware_target(xosc) pico_mirrored_target_link_libraries(hardware_xosc INTERFACE hardware_clocks) ================================================ FILE: pico-sdk/src/rp2_common/hardware_xosc/include/hardware/xosc.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_XOSC_H #define _HARDWARE_XOSC_H #include "pico.h" #include "hardware/structs/xosc.h" // Allow lengthening startup delay to accommodate slow-starting oscillators // PICO_CONFIG: PICO_XOSC_STARTUP_DELAY_MULTIPLIER, Multiplier to lengthen xosc startup delay to accommodate slow-starting oscillators, type=int, min=1, default=1, group=hardware_xosc #ifndef PICO_XOSC_STARTUP_DELAY_MULTIPLIER #define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 1 #endif #ifdef __cplusplus extern "C" { #endif /** \file hardware/xosc.h * \defgroup hardware_xosc hardware_xosc * * Crystal Oscillator (XOSC) API */ /*! \brief Initialise the crystal oscillator system * \ingroup hardware_xosc * * This function will block until the crystal oscillator has stabilised. **/ void xosc_init(void); /*! \brief Disable the Crystal oscillator * \ingroup hardware_xosc * * Turns off the crystal oscillator source, and waits for it to become unstable **/ void xosc_disable(void); /*! \brief Set the crystal oscillator system to dormant * \ingroup hardware_xosc * * Turns off the crystal oscillator until it is woken by an interrupt. This will block and hence * the entire system will stop, until an interrupt wakes it up. This function will * continue to block until the oscillator becomes stable after its wakeup. **/ void xosc_dormant(void); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/hardware_xosc/xosc.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" // For frequency related definitions etc #include "hardware/clocks.h" #include "hardware/platform_defs.h" #include "hardware/regs/xosc.h" #include "hardware/xosc.h" #if XOSC_KHZ < (1 * KHZ) || XOSC_KHZ > (50 * KHZ) // Note: Although an external clock can be supplied up to 50 MHz, the maximum frequency the // XOSC cell is specified to work with a crystal is less, please see the RP2040 Datasheet. #error XOSC_KHZ must be in the range 1,000-50,000KHz i.e. 1-50MHz XOSC frequency #endif #define STARTUP_DELAY (((XOSC_KHZ + 128) / 256) * PICO_XOSC_STARTUP_DELAY_MULTIPLIER) // The DELAY field in xosc_hw->startup is 14 bits wide. #if STARTUP_DELAY >= (1 << 13) #error PICO_XOSC_STARTUP_DELAY_MULTIPLIER is too large: XOSC STARTUP.DELAY must be < 8192 #endif void xosc_init(void) { // Assumes 1-15 MHz input, checked above. xosc_hw->ctrl = XOSC_CTRL_FREQ_RANGE_VALUE_1_15MHZ; // Set xosc startup delay xosc_hw->startup = STARTUP_DELAY; // Set the enable bit now that we have set freq range and startup delay hw_set_bits(&xosc_hw->ctrl, XOSC_CTRL_ENABLE_VALUE_ENABLE << XOSC_CTRL_ENABLE_LSB); // Wait for XOSC to be stable while(!(xosc_hw->status & XOSC_STATUS_STABLE_BITS)); } void xosc_disable(void) { uint32_t tmp = xosc_hw->ctrl; tmp &= (~XOSC_CTRL_ENABLE_BITS); tmp |= (XOSC_CTRL_ENABLE_VALUE_DISABLE << XOSC_CTRL_ENABLE_LSB); xosc_hw->ctrl = tmp; // Wait for stable to go away while(xosc_hw->status & XOSC_STATUS_STABLE_BITS); } void xosc_dormant(void) { // WARNING: This stops the xosc until woken up by an irq xosc_hw->dormant = XOSC_DORMANT_VALUE_DORMANT; // Wait for it to become stable once woken up while(!(xosc_hw->status & XOSC_STATUS_STABLE_BITS)); } ================================================ FILE: pico-sdk/src/rp2_common/pico_async_context/CMakeLists.txt ================================================ pico_add_library(pico_async_context_base NOFLAG) target_include_directories(pico_async_context_base_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_sources(pico_async_context_base INTERFACE ${CMAKE_CURRENT_LIST_DIR}/async_context_base.c ) pico_mirrored_target_link_libraries(pico_async_context_base INTERFACE pico_platform) pico_add_library(pico_async_context_poll) target_sources(pico_async_context_poll INTERFACE ${CMAKE_CURRENT_LIST_DIR}/async_context_poll.c ) pico_mirrored_target_link_libraries(pico_async_context_poll INTERFACE pico_async_context_base) pico_add_library(pico_async_context_threadsafe_background) target_sources(pico_async_context_threadsafe_background INTERFACE ${CMAKE_CURRENT_LIST_DIR}/async_context_threadsafe_background.c ) pico_mirrored_target_link_libraries(pico_async_context_threadsafe_background INTERFACE pico_async_context_base) pico_add_library(pico_async_context_freertos) target_sources(pico_async_context_freertos INTERFACE ${CMAKE_CURRENT_LIST_DIR}/async_context_freertos.c ) pico_mirrored_target_link_libraries(pico_async_context_freertos INTERFACE pico_async_context_base) ================================================ FILE: pico-sdk/src/rp2_common/pico_async_context/async_context_base.c ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/async_context_base.h" bool async_context_base_add_at_time_worker(async_context_t *self, async_at_time_worker_t *worker) { async_at_time_worker_t **prev = &self->at_time_list; while (*prev) { if (worker == *prev) { return false; } prev = &(*prev)->next; } *prev = worker; worker->next = NULL; return true; } bool async_context_base_remove_at_time_worker(async_context_t *self, async_at_time_worker_t *worker) { async_at_time_worker_t **prev = &self->at_time_list; while (*prev) { if (worker == *prev) { *prev = worker->next; return true; } prev = &(*prev)->next; } return false; } bool async_context_base_add_when_pending_worker(async_context_t *self, async_when_pending_worker_t *worker) { async_when_pending_worker_t **prev = &self->when_pending_list; while (*prev) { if (worker == *prev) { return false; } prev = &(*prev)->next; } *prev = worker; worker->next = NULL; return true; } bool async_context_base_remove_when_pending_worker(async_context_t *self, async_when_pending_worker_t *worker) { async_when_pending_worker_t **prev = &self->when_pending_list; while (*prev) { if (worker == *prev) { *prev = worker->next; return true; } prev = &(*prev)->next; } return false; } async_at_time_worker_t *async_context_base_remove_ready_at_time_worker(async_context_t *self) { async_at_time_worker_t **best_prev = NULL; if (self->at_time_list) { absolute_time_t earliest = get_absolute_time(); for (async_at_time_worker_t **prev = &self->at_time_list; *prev; prev = &(*prev)->next) { if (absolute_time_diff_us((*prev)->next_time, earliest) >= 0) { earliest = (*prev)->next_time; assert(!is_at_the_end_of_time(earliest)); // should never be less than now best_prev = prev; } } } async_at_time_worker_t *rc; if (best_prev) { rc = *best_prev; *best_prev = rc->next; } else { rc = NULL; } return rc; } void async_context_base_refresh_next_timeout(async_context_t *self) { absolute_time_t earliest = at_the_end_of_time; for (async_at_time_worker_t *worker = self->at_time_list; worker; ) { async_at_time_worker_t *next = worker->next; if (absolute_time_diff_us(worker->next_time, earliest) > 0) { earliest = worker->next_time; } worker = next; } self->next_time = earliest; } absolute_time_t async_context_base_execute_once(async_context_t *self) { async_at_time_worker_t *at_time_worker; while (NULL != (at_time_worker = async_context_base_remove_ready_at_time_worker(self))) { at_time_worker->do_work(self, at_time_worker); } for(async_when_pending_worker_t *when_pending_worker = self->when_pending_list; when_pending_worker; when_pending_worker = when_pending_worker->next) { if (when_pending_worker->work_pending) { when_pending_worker->work_pending = false; when_pending_worker->do_work(self, when_pending_worker); } } async_context_base_refresh_next_timeout(self); return self->next_time; } bool async_context_base_needs_servicing(async_context_t *self) { absolute_time_t now = get_absolute_time(); if (self->at_time_list) { for (async_at_time_worker_t *worker = self->at_time_list; worker; worker = worker->next) { if (absolute_time_diff_us(worker->next_time, now) >= 0) { return true; } } } for(async_when_pending_worker_t *when_pending_worker = self->when_pending_list; when_pending_worker; when_pending_worker = when_pending_worker->next) { if (when_pending_worker->work_pending) { return true; } } return false; } ================================================ FILE: pico-sdk/src/rp2_common/pico_async_context/async_context_freertos.c ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "pico/async_context_freertos.h" #include "pico/async_context_base.h" #include "pico/sync.h" #include "hardware/irq.h" #include "semphr.h" #if configNUM_CORES > 1 && !defined(configUSE_CORE_AFFINITY) #error async_context_freertos requires configUSE_CORE_AFFINITY under SMP #endif static const async_context_type_t template; static void async_context_freertos_acquire_lock_blocking(async_context_t *self_base); static void async_context_freertos_release_lock(async_context_t *self_base); static void async_context_freertos_lock_check(async_context_t *self_base); static TickType_t sensible_ticks_until(absolute_time_t until) { TickType_t ticks; int64_t delay_us = absolute_time_diff_us(get_absolute_time(), until); if (delay_us <= 0) { ticks = 0; } else { static const uint32_t max_delay = 60000000; uint32_t delay_us_32 = delay_us > max_delay ? max_delay : (uint32_t) delay_us; ticks = pdMS_TO_TICKS((delay_us_32+999)/1000); // we want to round up, as both rounding down to zero is wrong (may produce no delays // where delays are needed), but also we don't want to wake up, and then realize there // is no work to do yet! ticks++; } return ticks; } static void process_under_lock(async_context_freertos_t *self) { #ifndef NDEBUG async_context_freertos_lock_check(&self->core); #endif bool repeat; do { repeat = false; absolute_time_t next_time = async_context_base_execute_once(&self->core); TickType_t ticks; if (is_at_the_end_of_time(next_time)) { ticks = portMAX_DELAY; } else { ticks = sensible_ticks_until(next_time); } if (ticks) { // last parameter (timeout) is also 'ticks', since there is no point waiting to change the period // for longer than the period itself! repeat = pdFALSE == xTimerChangePeriod(self->timer_handle, ticks, ticks); } else { repeat = true; } } while (repeat); } static void async_context_task(__unused void *vself) { async_context_freertos_t *self = (async_context_freertos_t *)vself; do { ulTaskNotifyTake(pdFALSE, portMAX_DELAY); if (self->task_should_exit) break; async_context_freertos_acquire_lock_blocking(&self->core); process_under_lock(self); async_context_freertos_release_lock(&self->core); __sev(); // it is possible regular code is waiting on a WFE on the other core } while (!self->task_should_exit); vTaskDelete(NULL); } static void async_context_freertos_wake_up(async_context_t *self_base) { async_context_freertos_t *self = (async_context_freertos_t *)self_base; if (self->task_handle) { if (portCHECK_IF_IN_ISR()) { vTaskNotifyGiveFromISR(self->task_handle, NULL); xSemaphoreGiveFromISR(self->work_needed_sem, NULL); } else { // we don't want to wake ourselves up (we will only ever be called // from the async_context_task if we own the lock, in which case processing // will already happen when the lock is finally unlocked if (xTaskGetCurrentTaskHandle() != self->task_handle) { xTaskNotifyGive(self->task_handle); xSemaphoreGive(self->work_needed_sem); } else { #ifndef NDEBUG async_context_freertos_lock_check(self_base); #endif } } } } static void timer_handler(__unused TimerHandle_t handle) { async_context_freertos_t *self = (async_context_freertos_t *)pvTimerGetTimerID(handle); async_context_freertos_wake_up(&self->core); } bool async_context_freertos_init(async_context_freertos_t *self, async_context_freertos_config_t *config) { memset(self, 0, sizeof(*self)); self->core.type = &template; self->core.flags = ASYNC_CONTEXT_FLAG_CALLBACK_FROM_NON_IRQ; self->core.core_num = get_core_num(); self->lock_mutex = xSemaphoreCreateRecursiveMutex(); self->work_needed_sem = xSemaphoreCreateBinary(); self->timer_handle = xTimerCreate( "async_context_timer", // Just a text name, not used by the kernel. portMAX_DELAY, pdFALSE, // The timers will auto-reload themselves when they expire. self, timer_handler); if (!self->lock_mutex || !self->work_needed_sem || !self->timer_handle || pdPASS != xTaskCreate(async_context_task, "async_context_task", config->task_stack_size, self, config->task_priority, &self->task_handle)) { async_context_deinit(&self->core); return false; } #if configNUM_CORES > 1 UBaseType_t core_id = config->task_core_id; if (core_id == (UBaseType_t)-1) { core_id = portGET_CORE_ID(); } // we must run on a single core vTaskCoreAffinitySet(self->task_handle, 1u << core_id); #endif return true; } static uint32_t end_task_func(void *param) { async_context_freertos_t *self = (async_context_freertos_t *)param; // we will immediately exit self->task_should_exit = true; return 0; } void async_context_freertos_deinit(async_context_t *self_base) { async_context_freertos_t *self = (async_context_freertos_t *)self_base; if (self->task_handle) { async_context_execute_sync(self_base, end_task_func, self_base); } if (self->timer_handle) { xTimerDelete(self->timer_handle, 0); } if (self->lock_mutex) { vSemaphoreDelete(self->lock_mutex); } if (self->work_needed_sem) { vSemaphoreDelete(self->work_needed_sem); } memset(self, 0, sizeof(*self)); } void async_context_freertos_acquire_lock_blocking(async_context_t *self_base) { async_context_freertos_t *self = (async_context_freertos_t *)self_base; // Lock the other core and stop low_prio_irq running assert(!portCHECK_IF_IN_ISR()); xSemaphoreTakeRecursive(self->lock_mutex, portMAX_DELAY); self->nesting++; } void async_context_freertos_lock_check(__unused async_context_t *self_base) { #ifndef NDEBUG async_context_freertos_t *self = (async_context_freertos_t *)self_base; // Lock the other core and stop low_prio_irq running assert(xSemaphoreGetMutexHolder(self->lock_mutex) == xTaskGetCurrentTaskHandle()); #endif } typedef struct sync_func_call{ async_when_pending_worker_t worker; SemaphoreHandle_t sem; uint32_t (*func)(void *param); void *param; uint32_t rc; } sync_func_call_t; static void handle_sync_func_call(async_context_t *context, async_when_pending_worker_t *worker) { sync_func_call_t *call = (sync_func_call_t *)worker; call->rc = call->func(call->param); xSemaphoreGive(call->sem); async_context_remove_when_pending_worker(context, worker); } uint32_t async_context_freertos_execute_sync(async_context_t *self_base, uint32_t (*func)(void *param), void *param) { async_context_freertos_t *self = (async_context_freertos_t*)self_base; hard_assert(xSemaphoreGetMutexHolder(self->lock_mutex) != xTaskGetCurrentTaskHandle()); sync_func_call_t call; call.worker.do_work = handle_sync_func_call; call.func = func; call.param = param; call.sem = xSemaphoreCreateBinary(); async_context_add_when_pending_worker(self_base, &call.worker); async_context_set_work_pending(self_base, &call.worker); xSemaphoreTake(call.sem, portMAX_DELAY); vSemaphoreDelete(call.sem); return call.rc; } void async_context_freertos_release_lock(async_context_t *self_base) { async_context_freertos_t *self = (async_context_freertos_t *)self_base; bool do_wakeup = false; if (self->nesting == 1) { // note that we always do a processing on outermost lock exit, to facilitate cases // like lwIP where we have no notification when lwIP timers are added. // // this operation must be done from the right task if (self->task_handle != xTaskGetCurrentTaskHandle()) { // note we defer the wakeup until after we release the lock, otherwise it can be wasteful // (waking up the task, but then having it block immediately on us) do_wakeup = true; } else { process_under_lock(self); } } --self->nesting; xSemaphoreGiveRecursive(self->lock_mutex); if (do_wakeup) { async_context_freertos_wake_up(self_base); } } static bool async_context_freertos_add_at_time_worker(async_context_t *self_base, async_at_time_worker_t *worker) { async_context_freertos_acquire_lock_blocking(self_base); bool rc = async_context_base_add_at_time_worker(self_base, worker); async_context_freertos_release_lock(self_base); return rc; } static bool async_context_freertos_remove_at_time_worker(async_context_t *self_base, async_at_time_worker_t *worker) { async_context_freertos_acquire_lock_blocking(self_base); bool rc = async_context_base_remove_at_time_worker(self_base, worker); async_context_freertos_release_lock(self_base); return rc; } static bool async_context_freertos_add_when_pending_worker(async_context_t *self_base, async_when_pending_worker_t *worker) { async_context_freertos_acquire_lock_blocking(self_base); bool rc = async_context_base_add_when_pending_worker(self_base, worker); async_context_freertos_release_lock(self_base); return rc; } static bool async_context_freertos_remove_when_pending_worker(async_context_t *self_base, async_when_pending_worker_t *worker) { async_context_freertos_acquire_lock_blocking(self_base); bool rc = async_context_base_remove_when_pending_worker(self_base, worker); async_context_freertos_release_lock(self_base); return rc; } static void async_context_freertos_set_work_pending(async_context_t *self_base, async_when_pending_worker_t *worker) { worker->work_pending = true; async_context_freertos_wake_up(self_base); } static void async_context_freertos_wait_until(async_context_t *self_base, absolute_time_t until) { assert(!portCHECK_IF_IN_ISR()); TickType_t ticks = sensible_ticks_until(until); vTaskDelay(ticks); } static void async_context_freertos_wait_for_work_until(async_context_t *self_base, absolute_time_t until) { async_context_freertos_t *self = (async_context_freertos_t *)self_base; assert(!portCHECK_IF_IN_ISR()); while (!time_reached(until)) { TickType_t ticks = sensible_ticks_until(until); if (!ticks || xSemaphoreTake(self->work_needed_sem, ticks)) return; } } static const async_context_type_t template = { .type = ASYNC_CONTEXT_FREERTOS, .acquire_lock_blocking = async_context_freertos_acquire_lock_blocking, .release_lock = async_context_freertos_release_lock, .lock_check = async_context_freertos_lock_check, .execute_sync = async_context_freertos_execute_sync, .add_at_time_worker = async_context_freertos_add_at_time_worker, .remove_at_time_worker = async_context_freertos_remove_at_time_worker, .add_when_pending_worker = async_context_freertos_add_when_pending_worker, .remove_when_pending_worker = async_context_freertos_remove_when_pending_worker, .set_work_pending = async_context_freertos_set_work_pending, .poll = 0, .wait_until = async_context_freertos_wait_until, .wait_for_work_until = async_context_freertos_wait_for_work_until, .deinit = async_context_freertos_deinit, }; ================================================ FILE: pico-sdk/src/rp2_common/pico_async_context/async_context_poll.c ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "pico/async_context_poll.h" #include "pico/async_context_base.h" #include "pico/sync.h" static void noop(__unused async_context_t *context) { } static const async_context_type_t template; bool async_context_poll_init_with_defaults(async_context_poll_t *self) { memset(self, 0, sizeof(*self)); self->core.core_num = get_core_num(); self->core.type = &template; self->core.flags = ASYNC_CONTEXT_FLAG_POLLED | ASYNC_CONTEXT_FLAG_CALLBACK_FROM_NON_IRQ; sem_init(&self->sem, 1, 1); return true; } static void async_context_poll_wake_up(async_context_t *self_base) { sem_release(&((async_context_poll_t *)self_base)->sem); } static void async_context_poll_requires_update(async_context_t *self_base, async_when_pending_worker_t *worker) { worker->work_pending = true; async_context_poll_wake_up(self_base); } static void async_context_poll_poll(async_context_t *self_base) { async_context_base_execute_once(self_base); } static void async_context_poll_wait_until(__unused async_context_t *self_base, absolute_time_t until) { sleep_until(until); } static void async_context_poll_wait_for_work_until(async_context_t *self_base, absolute_time_t until) { absolute_time_t next_time = self_base->next_time; async_context_poll_t *self = (async_context_poll_t *)self_base; sem_acquire_block_until(&self->sem, absolute_time_min(next_time, until)); } static void async_context_poll_lock_check(async_context_t *self_base) { if (__get_current_exception() || get_core_num() != self_base->core_num) { panic("async_context_poll context check failed (IRQ or wrong core)"); } } uint32_t async_context_poll_execute_sync(__unused async_context_t *context, uint32_t (*func)(void *param), void *param) { return func(param); } static const async_context_type_t template = { .type = ASYNC_CONTEXT_POLL, .acquire_lock_blocking = noop, .release_lock = noop, .lock_check = async_context_poll_lock_check, .execute_sync = async_context_poll_execute_sync, .add_at_time_worker = async_context_base_add_at_time_worker, .remove_at_time_worker = async_context_base_remove_at_time_worker, .add_when_pending_worker = async_context_base_add_when_pending_worker, .remove_when_pending_worker = async_context_base_remove_when_pending_worker, .set_work_pending = async_context_poll_requires_update, .poll = async_context_poll_poll, .wait_until = async_context_poll_wait_until, .wait_for_work_until = async_context_poll_wait_for_work_until, .deinit = noop, }; ================================================ FILE: pico-sdk/src/rp2_common/pico_async_context/async_context_threadsafe_background.c ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "pico/async_context_threadsafe_background.h" #include "pico/async_context_base.h" #include "pico/sync.h" #include "hardware/irq.h" static const async_context_type_t template; static async_context_threadsafe_background_t *async_contexts_by_user_irq[NUM_USER_IRQS]; static void low_priority_irq_handler(void); static void process_under_lock(async_context_threadsafe_background_t *self); static int64_t alarm_handler(alarm_id_t id, void *user_data); #ifndef ASYNC_CONTEXT_THREADSAFE_BACKGROUND_DEFAULT_LOW_PRIORITY_IRQ_HANDLER_PRIORITY #define ASYNC_CONTEXT_THREADSAFE_BACKGROUND_DEFAULT_LOW_PRIORITY_IRQ_HANDLER_PRIORITY PICO_LOWEST_IRQ_PRIORITY #endif #ifndef ASYNC_CONTEXT_THREADSAFE_BACKGROUND_ALARM_POOL_MAX_ALARMS #define ASYNC_CONTEXT_THREADSAFE_BACKGROUND_ALARM_POOL_MAX_ALARMS 4 #endif async_context_threadsafe_background_config_t async_context_threadsafe_background_default_config(void) { async_context_threadsafe_background_config_t config = { .low_priority_irq_handler_priority = ASYNC_CONTEXT_THREADSAFE_BACKGROUND_DEFAULT_LOW_PRIORITY_IRQ_HANDLER_PRIORITY, .custom_alarm_pool = NULL, }; return config; } static inline uint recursive_mutex_enter_count(recursive_mutex_t *mutex) { return mutex->enter_count; } static inline lock_owner_id_t recursive_mutex_owner(recursive_mutex_t *mutex) { return mutex->owner; } static void async_context_threadsafe_background_wake_up(async_context_t *self_base) { async_context_threadsafe_background_t *self = (async_context_threadsafe_background_t *)self_base; #if ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE if (self_base->core_num == get_core_num()) { // on same core, can dispatch directly irq_set_pending(self->low_priority_irq_num); } else { // remove the existing alarm (it may have already fired) so we don't overflow the pool with repeats // // note that force_alarm_id is not protected here, however if we miss removing one, they will fire // almost immediately anyway (since they were set in the past) alarm_id_t force_alarm_id = self->force_alarm_id; if (force_alarm_id > 0) { alarm_pool_cancel_alarm(self->alarm_pool, force_alarm_id); } // we cause an early timeout (0 is always in the past) on the alarm_pool core // note that by the time this returns, the timer may already have fired, so we // may end up setting self->force_alarm_id to a stale timer id, but that is fine as we // will harmlessly cancel it again next time self->force_alarm_id = alarm_pool_add_alarm_at_force_in_context(self->alarm_pool, from_us_since_boot(0), alarm_handler, self); } #else // on same core, can dispatch directly irq_set_pending(self->low_priority_irq_num); #endif sem_release(&self->work_needed_sem); } // Prevent background processing in pensv and access by the other core // These methods are called in pensv context and on either core // They can be called recursively static inline void lock_acquire(async_context_threadsafe_background_t *self) { // Lock the other core and stop low_prio_irq running recursive_mutex_enter_blocking(&self->lock_mutex); } static void async_context_threadsafe_background_lock_check(async_context_t *self_base) { async_context_threadsafe_background_t *self = (async_context_threadsafe_background_t *)self_base; // Lock the other core and stop low_prio_irq running if (recursive_mutex_enter_count(&self->lock_mutex) < 1 || recursive_mutex_owner(&self->lock_mutex) != lock_get_caller_owner_id()) { panic_compact("async_context lock_check failed"); } } #if ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE typedef struct sync_func_call{ async_when_pending_worker_t worker; semaphore_t sem; uint32_t (*func)(void *param); void *param; uint32_t rc; } sync_func_call_t; static void handle_sync_func_call(async_context_t *context, async_when_pending_worker_t *worker) { sync_func_call_t *call = (sync_func_call_t *)worker; call->rc = call->func(call->param); sem_release(&call->sem); async_context_remove_when_pending_worker(context, worker); } #endif static void lock_release(async_context_threadsafe_background_t *self) { bool outermost = 1 == recursive_mutex_enter_count(&self->lock_mutex); // note that it is *not* a requirement to have low_prio_irq_missed handled on the // same core and in low-priority riq, as we are only *logically* a single thread. the user // is already free to call from either core, and this would only happen on a different // core, if the user *themselves* is acquiring the lock from other cores anyway #if ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE bool wake_other_core = false; #endif if (outermost) { // note that we always do a processing on outermost lock exit, to facilitate cases // like lwIP where we have no notification when lwIP timers are added. #if ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE if (self->core.core_num == get_core_num()) { process_under_lock(self); } else if (async_context_base_needs_servicing(&self->core)) { // have to wake up other core wake_other_core = true; } #else process_under_lock(self); #endif } recursive_mutex_exit(&self->lock_mutex); #if ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE if (wake_other_core) { async_context_threadsafe_background_wake_up(&self->core); } #endif } uint32_t async_context_threadsafe_background_execute_sync(async_context_t *self_base, uint32_t (*func)(void *param), void *param) { async_context_threadsafe_background_t *self = (async_context_threadsafe_background_t*)self_base; #if ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE if (self_base->core_num != get_core_num()) { hard_assert(!recursive_mutex_enter_count(&self->lock_mutex)); sync_func_call_t call; call.worker.do_work = handle_sync_func_call; call.func = func; call.param = param; sem_init(&call.sem, 0, 1); async_context_add_when_pending_worker(self_base, &call.worker); async_context_set_work_pending(self_base, &call.worker); sem_acquire_blocking(&call.sem); return call.rc; } #endif // short-circuit if we are on the right core lock_acquire(self); uint32_t rc = func(param); lock_release(self); return rc; } static bool low_prio_irq_init(async_context_threadsafe_background_t *self, uint8_t priority) { assert(get_core_num() == self->core.core_num); int irq = user_irq_claim_unused(false); if (irq < 0) return false; self->low_priority_irq_num = (uint8_t) irq; uint index = irq - FIRST_USER_IRQ; assert(index < count_of(async_contexts_by_user_irq)); async_contexts_by_user_irq[index] = self; irq_set_exclusive_handler(self->low_priority_irq_num, low_priority_irq_handler); irq_set_enabled(self->low_priority_irq_num, true); irq_set_priority(self->low_priority_irq_num, priority); return true; } static void low_prio_irq_deinit(async_context_threadsafe_background_t *self) { if (self->low_priority_irq_num > 0) { assert(get_core_num() == self->core.core_num); irq_set_enabled(self->low_priority_irq_num, false); irq_remove_handler(self->low_priority_irq_num, low_priority_irq_handler); user_irq_unclaim(self->low_priority_irq_num); self->low_priority_irq_num = 0; } } static int64_t alarm_handler(__unused alarm_id_t id, void *user_data) { async_context_threadsafe_background_t *self = (async_context_threadsafe_background_t*)user_data; #if ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE self->force_alarm_id = 0; #endif self->alarm_pending = false; async_context_threadsafe_background_wake_up(&self->core); return 0; } bool async_context_threadsafe_background_init(async_context_threadsafe_background_t *self, async_context_threadsafe_background_config_t *config) { memset(self, 0, sizeof(*self)); self->core.type = &template; self->core.flags = ASYNC_CONTEXT_FLAG_CALLBACK_FROM_IRQ | ASYNC_CONTEXT_FLAG_CALLBACK_FROM_NON_IRQ; self->core.core_num = get_core_num(); if (config->custom_alarm_pool) { self->alarm_pool = config->custom_alarm_pool; } else { #if PICO_TIME_DEFAULT_ALARM_POOL_DISABLED self->alarm_pool = alarm_pool_create_with_unused_hardware_alarm(ASYNC_CONTEXT_THREADSAFE_BACKGROUND_ALARM_POOL_MAX_ALARMS); self->alarm_pool_owned = true; #else self->alarm_pool = alarm_pool_get_default(); #if ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE if (self->core.core_num != alarm_pool_core_num(self->alarm_pool)) { self->alarm_pool = alarm_pool_create_with_unused_hardware_alarm(ASYNC_CONTEXT_THREADSAFE_BACKGROUND_ALARM_POOL_MAX_ALARMS); self->alarm_pool_owned = true; } #endif #endif } assert(self->core.core_num == alarm_pool_core_num(self->alarm_pool)); sem_init(&self->work_needed_sem, 1, 1); recursive_mutex_init(&self->lock_mutex); bool ok = low_prio_irq_init(self, config->low_priority_irq_handler_priority); return ok; } static void async_context_threadsafe_background_set_work_pending(async_context_t *self_base, async_when_pending_worker_t *worker) { worker->work_pending = true; async_context_threadsafe_background_wake_up(self_base); } static void async_context_threadsafe_background_deinit(async_context_t *self_base) { async_context_threadsafe_background_t *self = (async_context_threadsafe_background_t *)self_base; // todo we do not currently handle this correctly; we could, but seems like a rare case assert(get_core_num() == self_base->core_num); low_prio_irq_deinit(self); if (self->alarm_id > 0) alarm_pool_cancel_alarm(self->alarm_pool, self->alarm_id); #if ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE if (self->alarm_pool_owned) { alarm_pool_destroy(self->alarm_pool); } #endif // acquire the lock to make sure the callback is not running (we have already disabled the IRQ recursive_mutex_enter_blocking(&self->lock_mutex); recursive_mutex_exit(&self->lock_mutex); memset(self, 0, sizeof(*self)); } static void process_under_lock(async_context_threadsafe_background_t *self) { #ifndef NDEBUG async_context_threadsafe_background_lock_check(&self->core); assert(self->core.core_num == get_core_num()); #endif do { absolute_time_t next_time = async_context_base_execute_once(&self->core); // if the next wakeup time is in the past then loop if (absolute_time_diff_us(get_absolute_time(), next_time) <= 0) continue; // if there is no next wakeup time, we're done if (is_at_the_end_of_time(next_time)) { // cancel the alarm early (we will have been called soon after an alarm wakeup), so that // we don't risk alarm_id collision. if (self->alarm_id > 0) { alarm_pool_cancel_alarm(self->alarm_pool, self->alarm_id); self->alarm_id = 0; } break; } // the following is an optimization; we are often called much more frequently than timeouts actually change, // and removing and re-adding the timers has some non-trivial overhead (10s of microseconds), we choose // to allow the existing timeout to run to completion, and then re-asses from there, unless the new wakeup // time is before the last one set. // // note that alarm_pending is not protected, however, if it is wrong, it is wrong in the sense that it is // false when it should be true, so if it is wrong due to a race, we will cancel and re-add the alarm which is safe. if (self->alarm_pending && absolute_time_diff_us(self->last_set_alarm_time, next_time) > 0) break; // cancel the existing alarm (it may no longer exist) if (self->alarm_id > 0) alarm_pool_cancel_alarm(self->alarm_pool, self->alarm_id); self->last_set_alarm_time = next_time; self->alarm_pending = true; self->alarm_id = alarm_pool_add_alarm_at(self->alarm_pool, next_time, alarm_handler, self, false); if (self->alarm_id > 0) break; self->alarm_pending = false; } while (true); } // Low priority interrupt handler to perform background processing static void low_priority_irq_handler(void) { uint index = __get_current_exception() - VTABLE_FIRST_IRQ - FIRST_USER_IRQ; assert(index < count_of(async_contexts_by_user_irq)); async_context_threadsafe_background_t *self = async_contexts_by_user_irq[index]; if (!self) return; assert(self->core.core_num == get_core_num()); if (recursive_mutex_try_enter(&self->lock_mutex, NULL)) { // if the recurse count is not 1 then we have pre-empted something which held the lock on the same core, // so we cannot do processing here (however processing will be done when that lock is released) if (recursive_mutex_enter_count(&self->lock_mutex) == 1) { process_under_lock(self); } recursive_mutex_exit(&self->lock_mutex); } } static void async_context_threadsafe_background_wait_until(__unused async_context_t *self_base, absolute_time_t until) { // can be called in IRQs, in which case we just have to wait if (__get_current_exception()) { busy_wait_until(until); } else { sleep_until(until); } } static void async_context_threadsafe_background_wait_for_work_until(async_context_t *self_base, absolute_time_t until) { async_context_threadsafe_background_t *self = (async_context_threadsafe_background_t *)self_base; sem_acquire_block_until(&self->work_needed_sem, until); } static bool async_context_threadsafe_background_add_at_time_worker(async_context_t *self_base, async_at_time_worker_t *worker) { async_context_threadsafe_background_t *self = (async_context_threadsafe_background_t *)self_base; lock_acquire(self); bool rc = async_context_base_add_at_time_worker(self_base, worker); lock_release(self); return rc; } static bool async_context_threadsafe_background_remove_at_time_worker(async_context_t *self_base, async_at_time_worker_t *worker) { async_context_threadsafe_background_t *self = (async_context_threadsafe_background_t *)self_base; lock_acquire(self); bool rc = async_context_base_remove_at_time_worker(self_base, worker); lock_release(self); return rc; } static bool async_context_threadsafe_background_add_when_pending_worker(async_context_t *self_base, async_when_pending_worker_t *worker) { async_context_threadsafe_background_t *self = (async_context_threadsafe_background_t *)self_base; lock_acquire(self); bool rc = async_context_base_add_when_pending_worker(self_base, worker); lock_release(self); return rc; } static bool async_context_threadsafe_background_when_pending_worker(async_context_t *self_base, async_when_pending_worker_t *worker) { async_context_threadsafe_background_t *self = (async_context_threadsafe_background_t *)self_base; lock_acquire(self); bool rc = async_context_base_remove_when_pending_worker(self_base, worker); lock_release(self); return rc; } static void async_context_threadsafe_background_acquire_lock_blocking(async_context_t *self_base) { lock_acquire((async_context_threadsafe_background_t *) self_base); } static void async_context_threadsafe_background_release_lock(async_context_t *self_base) { lock_release((async_context_threadsafe_background_t *)self_base); } static const async_context_type_t template = { .type = ASYNC_CONTEXT_THREADSAFE_BACKGROUND, .acquire_lock_blocking = async_context_threadsafe_background_acquire_lock_blocking, .release_lock = async_context_threadsafe_background_release_lock, .lock_check = async_context_threadsafe_background_lock_check, .execute_sync = async_context_threadsafe_background_execute_sync, .add_at_time_worker = async_context_threadsafe_background_add_at_time_worker, .remove_at_time_worker = async_context_threadsafe_background_remove_at_time_worker, .add_when_pending_worker = async_context_threadsafe_background_add_when_pending_worker, .remove_when_pending_worker = async_context_threadsafe_background_when_pending_worker, .set_work_pending = async_context_threadsafe_background_set_work_pending, .poll = 0, .wait_until = async_context_threadsafe_background_wait_until, .wait_for_work_until = async_context_threadsafe_background_wait_for_work_until, .deinit = async_context_threadsafe_background_deinit, }; ================================================ FILE: pico-sdk/src/rp2_common/pico_async_context/include/pico/async_context.h ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ /** \file pico/async_context.h * \defgroup pico_async_context pico_async_context * * An \ref async_context provides a logically single-threaded context for performing work, and responding * to asynchronous events. Thus an async_context instance is suitable for servicing third-party libraries * that are not re-entrant. * * The "context" in async_context refers to the fact that when calling workers or timeouts within the * async_context various pre-conditions hold: * *

    *
  1. That there is a single logical thread of execution; i.e. that the context does not call any worker * functions concurrently. *
  2. That the context always calls workers from the same processor core, as most uses of async_context rely on interaction * with IRQs which are themselves core-specific. *
* * THe async_context provides two mechanisms for asynchronous work: * * * when_pending workers, which are processed whenever they have work pending. See \ref async_context_add_when_pending_worker, * \ref async_context_remove_when_pending_worker, and \ref async_context_set_work_pending, the latter of which can be used from an interrupt handler * to signal that servicing work is required to be performed by the worker from the regular async_context. * * at_time workers, that are executed after at a specific time. * * Note: "when pending" workers with work pending are executed before "at time" workers. * * The async_context provides locking mechanisms, see \ref async_context_acquire_lock_blocking, * \ref async_context_release_lock and \ref async_context_lock_check which can be used by * external code to ensure execution of external code does not happen concurrently with worker code. * Locked code runs on the calling core, however \ref async_context_execute_sync is provided to * synchronously run a function from the core of the async_context. * * The SDK ships with the following default async_contexts: * * async_context_poll - this context is not thread-safe, and the user is responsible for calling * \ref async_context_poll() periodically, and can use async_context_wait_for_work_until() to sleep * between calls until work is needed if the user has nothing else to do. * * async_context_threadsafe_background - in order to work in the background, a low priority IRQ is used * to handle callbacks. Code is usually invoked from this IRQ context, but may be invoked after any other code * that uses the async context in another (non-IRQ) context on the same core. Calling \ref async_context_poll() is * not required, and is a no-op. This context implements async_context locking and is thus safe to call * from either core, according to the specific notes on each API. * * async_context_freertos - Work is performed from a separate "async_context" task, however once again, code may * also be invoked after a direct use of the async_context on the same core that the async_context belongs to. Calling * \ref async_context_poll() is not required, and is a no-op. This context implements async_context locking and is thus * safe to call from any task, and from either core, according to the specific notes on each API. * * Each async_context provides bespoke methods of instantiation which are provided in the corresponding headers (e.g. * async_context_poll.h, async_context_threadsafe_background.h, asycn_context_freertos.h). * async_contexts are de-initialized by the common async_context_deint() method. * * Multiple async_context instances can be used by a single application, and they will operate independently. */ #ifndef _PICO_ASYNC_CONTEXT_H #define _PICO_ASYNC_CONTEXT_H #include "pico.h" #include "pico/time.h" #ifdef __cplusplus extern "C" { #endif enum { ASYNC_CONTEXT_POLL = 1, ASYNC_CONTEXT_THREADSAFE_BACKGROUND = 2, ASYNC_CONTEXT_FREERTOS = 3, }; typedef struct async_context async_context_t; /*! \brief A "timeout" instance used by an async_context * \ingroup pico_async_context * * A "timeout" represents some future action that must be taken at a specific time. * Its methods are called from the async_context under lock at the given time * * \see async_context_add_worker_at * \see async_context_add_worker_in_ms */ typedef struct async_work_on_timeout { /*! * private link list pointer */ struct async_work_on_timeout *next; /*! * Method called when the timeout is reached; may not be NULL * * Note, that when this method is called, the timeout has been removed from the async_context, so * if you want the timeout to repeat, you should re-add it during this callback * @param context * @param timeout */ void (*do_work)(async_context_t *context, struct async_work_on_timeout *timeout); /*! * The next timeout time; this should only be modified during the above methods * or via async_context methods */ absolute_time_t next_time; /*! * User data associated with the timeout instance */ void *user_data; } async_at_time_worker_t; /*! \brief A "worker" instance used by an async_context * \ingroup pico_async_context * * A "worker" represents some external entity that must do work in response * to some external stimulus (usually an IRQ). * Its methods are called from the async_context under lock at the given time * * \see async_context_add_worker_at * \see async_context_add_worker_in_ms */ typedef struct async_when_pending_worker { /*! * private link list pointer */ struct async_when_pending_worker *next; /*! * Called by the async_context when the worker has been marked as having "work pending" * * @param context the async_context * @param worker the function to be called when work is pending */ void (*do_work)(async_context_t *context, struct async_when_pending_worker *worker); /** * True if the worker need do_work called */ bool work_pending; /*! * User data associated with the worker instance */ void *user_data; } async_when_pending_worker_t; #define ASYNC_CONTEXT_FLAG_CALLBACK_FROM_NON_IRQ 0x1 #define ASYNC_CONTEXT_FLAG_CALLBACK_FROM_IRQ 0x2 #define ASYNC_CONTEXT_FLAG_POLLED 0x4 /*! * \brief Implementation of an async_context type, providing methods common to that type * \ingroup pico_async_context */ typedef struct async_context_type { uint16_t type; // see wrapper functions for documentation void (*acquire_lock_blocking)(async_context_t *self); void (*release_lock)(async_context_t *self); void (*lock_check)(async_context_t *self); uint32_t (*execute_sync)(async_context_t *context, uint32_t (*func)(void *param), void *param); bool (*add_at_time_worker)(async_context_t *self, async_at_time_worker_t *worker); bool (*remove_at_time_worker)(async_context_t *self, async_at_time_worker_t *worker); bool (*add_when_pending_worker)(async_context_t *self, async_when_pending_worker_t *worker); bool (*remove_when_pending_worker)(async_context_t *self, async_when_pending_worker_t *worker); void (*set_work_pending)(async_context_t *self, async_when_pending_worker_t *worker); void (*poll)(async_context_t *self); // may be NULL void (*wait_until)(async_context_t *self, absolute_time_t until); void (*wait_for_work_until)(async_context_t *self, absolute_time_t until); void (*deinit)(async_context_t *self); } async_context_type_t; /*! * \brief Base structure type of all async_contexts. For details about its use, see \ref pico_async_context. * \ingroup pico_async_context * * Individual async_context_types with additional state, should contain this structure at the start. */ struct async_context { const async_context_type_t *type; async_when_pending_worker_t *when_pending_list; async_at_time_worker_t *at_time_list; absolute_time_t next_time; uint16_t flags; uint8_t core_num; }; /*! * \brief Acquire the async_context lock * \ingroup pico_async_context * * The owner of the async_context lock is the logic owner of the async_context * and other work related to this async_context will not happen concurrently. * * This method may be called in a nested fashion by the the lock owner. * * \note the async_context lock is nestable by the same caller, so an internal count is maintained * * \note for async_contexts that provide locking (not async_context_poll), this method is threadsafe. and may be called from within any * worker method called by the async_context or from any other non-IRQ context. * * \param context the async_context * * \see async_context_release_lock */ static inline void async_context_acquire_lock_blocking(async_context_t *context) { context->type->acquire_lock_blocking(context); } /*! * \brief Release the async_context lock * \ingroup pico_async_context * * \note the async_context lock may be called in a nested fashion, so an internal count is maintained. On the outermost * release, When the outermost lock is released, a check is made for work which might have been skipped while the lock was held, * and any such work may be performed during this call IF the call is made from the same core that the async_context belongs to. * * \note for async_contexts that provide locking (not async_context_poll), this method is threadsafe. and may be called from within any * worker method called by the async_context or from any other non-IRQ context. * * \param context the async_context * * \see async_context_acquire_lock_blocking */ static inline void async_context_release_lock(async_context_t *context) { context->type->release_lock(context); } /*! * \brief Assert if the caller does not own the lock for the async_context * \ingroup pico_async_context * \note this method is thread-safe * * \param context the async_context */ static inline void async_context_lock_check(async_context_t *context) { context->type->lock_check(context); } /*! * \brief Execute work synchronously on the core the async_context belongs to. * \ingroup pico_async_context * * This method is intended for code external to the async_context (e.g. another thread/task) to * execute a function with the same guarantees (single core, logical thread of execution) that * async_context workers are called with. * * \note you should NOT call this method while holding the async_context's lock * * \param context the async_context * \param func the function to call * \param param the paramter to pass to the function * \return the return value from func */ static inline uint32_t async_context_execute_sync(async_context_t *context, uint32_t (*func)(void *param), void *param) { return context->type->execute_sync(context, func, param); } /*! * \brief Add an "at time" worker to a context * \ingroup pico_async_context * * An "at time" worker will run at or after a specific point in time, and is automatically when (just before) it runs. * * The time to fire is specified in the next_time field of the worker. * * \note for async_contexts that provide locking (not async_context_poll), this method is threadsafe. and may be called from within any * worker method called by the async_context or from any other non-IRQ context. * * \param context the async_context * \param worker the "at time" worker to add * \return true if the worker was added, false if the worker was already present. */ static inline bool async_context_add_at_time_worker(async_context_t *context, async_at_time_worker_t *worker) { return context->type->add_at_time_worker(context, worker); } /*! * \brief Add an "at time" worker to a context * \ingroup pico_async_context * * An "at time" worker will run at or after a specific point in time, and is automatically when (just before) it runs. * * The time to fire is specified by the at parameter. * * \note for async_contexts that provide locking (not async_context_poll), this method is threadsafe. and may be called from within any * worker method called by the async_context or from any other non-IRQ context. * * \param context the async_context * \param worker the "at time" worker to add * \param at the time to fire at * \return true if the worker was added, false if the worker was already present. */ static inline bool async_context_add_at_time_worker_at(async_context_t *context, async_at_time_worker_t *worker, absolute_time_t at) { worker->next_time = at; return context->type->add_at_time_worker(context, worker); } /*! * \brief Add an "at time" worker to a context * \ingroup pico_async_context * * An "at time" worker will run at or after a specific point in time, and is automatically when (just before) it runs. * * The time to fire is specified by a delay via the ms parameter * * \note for async_contexts that provide locking (not async_context_poll), this method is threadsafe. and may be called from within any * worker method called by the async_context or from any other non-IRQ context. * * \param context the async_context * \param worker the "at time" worker to add * \param ms the number of milliseconds from now to fire after * \return true if the worker was added, false if the worker was already present. */ static inline bool async_context_add_at_time_worker_in_ms(async_context_t *context, async_at_time_worker_t *worker, uint32_t ms) { worker->next_time = make_timeout_time_ms(ms); return context->type->add_at_time_worker(context, worker); } /*! * \brief Remove an "at time" worker from a context * \ingroup pico_async_context * * \note for async_contexts that provide locking (not async_context_poll), this method is threadsafe. and may be called from within any * worker method called by the async_context or from any other non-IRQ context. * * \param context the async_context * \param worker the "at time" worker to remove * \return true if the worker was removed, false if the instance not present. */ static inline bool async_context_remove_at_time_worker(async_context_t *context, async_at_time_worker_t *worker) { return context->type->remove_at_time_worker(context, worker); } /*! * \brief Add a "when pending" worker to a context * \ingroup pico_async_context * * An "when pending" worker will run when it is pending (can be set via \ref async_context_set_work_pending), and * is NOT automatically removed when it runs. * * The time to fire is specified by a delay via the ms parameter * * \note for async_contexts that provide locking (not async_context_poll), this method is threadsafe. and may be called from within any * worker method called by the async_context or from any other non-IRQ context. * * \param context the async_context * \param worker the "when pending" worker to add * \return true if the worker was added, false if the worker was already present. */ static inline bool async_context_add_when_pending_worker(async_context_t *context, async_when_pending_worker_t *worker) { return context->type->add_when_pending_worker(context, worker); } /*! * \brief Remove a "when pending" worker from a context * \ingroup pico_async_context * * \note for async_contexts that provide locking (not async_context_poll), this method is threadsafe. and may be called from within any * worker method called by the async_context or from any other non-IRQ context. * * \param context the async_context * \param worker the "when pending" worker to remove * \return true if the worker was removed, false if the instance not present. */ static inline bool async_context_remove_when_pending_worker(async_context_t *context, async_when_pending_worker_t *worker) { return context->type->remove_when_pending_worker(context, worker); } /*! * \brief Mark a "when pending" worker as having work pending * \ingroup pico_async_context * * The worker will be run from the async_context at a later time. * * \note this method may be called from any context including IRQs * * \param context the async_context * \param worker the "when pending" worker to mark as pending. */ static inline void async_context_set_work_pending(async_context_t *context, async_when_pending_worker_t *worker) { context->type->set_work_pending(context, worker); } /*! * \brief Perform any pending work for polling style async_context * \ingroup pico_async_context * * For a polled async_context (e.g. \ref async_context_poll) the user is responsible for calling this method * periodically to perform any required work. * * This method may immediately perform outstanding work on other context types, but is not required to. * * \param context the async_context */ static inline void async_context_poll(async_context_t *context) { if (context->type->poll) context->type->poll(context); } /*! * \brief sleep until the specified time in an async_context callback safe way * \ingroup pico_async_context * * \note for async_contexts that provide locking (not async_context_poll), this method is threadsafe. and may be called from within any * worker method called by the async_context or from any other non-IRQ context. * * \param context the async_context * \param until the time to sleep until */ static inline void async_context_wait_until(async_context_t *context, absolute_time_t until) { context->type->wait_until(context, until); } /*! * \brief Block until work needs to be done or the specified time has been reached * \ingroup pico_async_context * * \note this method should not be called from a worker callback * * \param context the async_context * \param until the time to return at if no work is required */ static inline void async_context_wait_for_work_until(async_context_t *context, absolute_time_t until) { context->type->wait_for_work_until(context, until); } /*! * \brief Block until work needs to be done or the specified number of milliseconds have passed * \ingroup pico_async_context * * \note this method should not be called from a worker callback * * \param context the async_context * \param ms the number of milliseconds to return after if no work is required */ static inline void async_context_wait_for_work_ms(async_context_t *context, uint32_t ms) { async_context_wait_for_work_until(context, make_timeout_time_ms(ms)); } /*! * \brief Return the processor core this async_context belongs to * \ingroup pico_async_context * * \param context the async_context * \return the physical core number */ static inline uint async_context_core_num(const async_context_t *context) { return context->core_num; } /*! * \brief End async_context processing, and free any resources * \ingroup pico_async_context * * Note the user should clean up any resources associated with workers * in the async_context themselves. * * Asynchronous (non-polled) async_contexts guarantee that no * callback is being called once this method returns. * * \param context the async_context */ static inline void async_context_deinit(async_context_t *context) { context->type->deinit(context); } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_async_context/include/pico/async_context_base.h ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_ASYNC_CONTEXT_BASE_H #define _PICO_ASYNC_CONTEXT_BASE_H #include "pico/async_context.h" #ifdef __cplusplus extern "C" { #endif // common functions for async_context implementations to use bool async_context_base_add_at_time_worker(async_context_t *self, async_at_time_worker_t *worker); bool async_context_base_remove_at_time_worker(async_context_t *self, async_at_time_worker_t *worker); bool async_context_base_add_when_pending_worker(async_context_t *self, async_when_pending_worker_t *worker); bool async_context_base_remove_when_pending_worker(async_context_t *self, async_when_pending_worker_t *worker); async_at_time_worker_t *async_context_base_remove_ready_at_time_worker(async_context_t *self); void async_context_base_refresh_next_timeout(async_context_t *self); absolute_time_t async_context_base_execute_once(async_context_t *self); bool async_context_base_needs_servicing(async_context_t *self); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_async_context/include/pico/async_context_freertos.h ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_ASYNC_CONTEXT_FREERTOS_H #define _PICO_ASYNC_CONTEXT_FREERTOS_H /** \file pico/async_context.h * \defgroup async_context_freertos async_context_freertos * \ingroup pico_async_context * * async_context_freertos provides an implementation of \ref async_context that handles asynchronous * work in a separate FreeRTOS task. */ #include "pico/async_context.h" // FreeRTOS includes #include "FreeRTOS.h" #include "semphr.h" #include "timers.h" #ifdef __cplusplus extern "C" { #endif #ifndef ASYNC_CONTEXT_DEFAULT_FREERTOS_TASK_PRIORITY #define ASYNC_CONTEXT_DEFAULT_FREERTOS_TASK_PRIORITY ( tskIDLE_PRIORITY + 4) #endif #ifndef ASYNC_CONTEXT_DEFAULT_FREERTOS_TASK_STACK_SIZE #define ASYNC_CONTEXT_DEFAULT_FREERTOS_TASK_STACK_SIZE configMINIMAL_STACK_SIZE #endif typedef struct async_context_freertos async_context_freertos_t; /** * \brief Configuration object for async_context_freertos instances. */ typedef struct async_context_freertos_config { /** * Task priority for the async_context task */ UBaseType_t task_priority; /** * Stack size for the async_context task */ configSTACK_DEPTH_TYPE task_stack_size; /** * the core ID (see \ref portGET_CORE_ID()) to pin the task to. * This is only relevant in SMP mode. */ #if configUSE_CORE_AFFINITY && configNUM_CORES > 1 UBaseType_t task_core_id; #endif } async_context_freertos_config_t; struct async_context_freertos { async_context_t core; SemaphoreHandle_t lock_mutex; SemaphoreHandle_t work_needed_sem; TimerHandle_t timer_handle; TaskHandle_t task_handle; uint8_t nesting; volatile bool task_should_exit; }; /*! * \brief Initialize an async_context_freertos instance using the specified configuration * \ingroup async_context_freertos * * If this method succeeds (returns true), then the async_context is available for use * and can be de-initialized by calling async_context_deinit(). * * \param self a pointer to async_context_freertos structure to initialize * \param config the configuration object specifying characteristics for the async_context * \return true if initialization is successful, false otherwise */ bool async_context_freertos_init(async_context_freertos_t *self, async_context_freertos_config_t *config); /*! * \brief Return a copy of the default configuration object used by \ref async_context_freertos_init_with_defaults() * \ingroup async_context_freertos * * The caller can then modify just the settings it cares about, and call \ref async_context_freertos_init() * \return the default configuration object */ static inline async_context_freertos_config_t async_context_freertos_default_config(void) { async_context_freertos_config_t config = { .task_priority = ASYNC_CONTEXT_DEFAULT_FREERTOS_TASK_PRIORITY, .task_stack_size = ASYNC_CONTEXT_DEFAULT_FREERTOS_TASK_STACK_SIZE, #if configUSE_CORE_AFFINITY && configNUM_CORES > 1 .task_core_id = (UBaseType_t)-1, // none #endif }; return config; } /*! * \brief Initialize an async_context_freertos instance with default values * \ingroup async_context_freertos * * If this method succeeds (returns true), then the async_context is available for use * and can be de-initialized by calling async_context_deinit(). * * \param self a pointer to async_context_freertos structure to initialize * \return true if initialization is successful, false otherwise */ static inline bool async_context_freertos_init_with_defaults(async_context_freertos_t *self) { async_context_freertos_config_t config = async_context_freertos_default_config(); return async_context_freertos_init(self, &config); } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_async_context/include/pico/async_context_poll.h ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_ASYNC_CONTEXT_POLL_H #define _PICO_ASYNC_CONTEXT_POLL_H /** \file pico/async_context.h * \defgroup async_context_poll async_context_poll * \ingroup pico_async_context * * async_context_poll provides an implementation of \ref async_context that is intended for use with a simple * polling loop on one core. It is not thread safe. * * The \ref async_context_poll() method must be called periodically to handle asynchronous work that may now be * pending. \ref async_context_wait_for_work_until() may be used to block a polling loop until there is work to do, * and prevent tight spinning. */ #include "pico/async_context.h" #include "pico/sem.h" #ifdef __cplusplus extern "C" { #endif typedef struct async_context_poll { async_context_t core; semaphore_t sem; } async_context_poll_t; /*! * \brief Initialize an async_context_poll instance with default values * \ingroup async_context_poll * * If this method succeeds (returns true), then the async_context is available for use * and can be de-initialized by calling async_context_deinit(). * * \param self a pointer to async_context_poll structure to initialize * \return true if initialization is successful, false otherwise */ bool async_context_poll_init_with_defaults(async_context_poll_t *self); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_async_context/include/pico/async_context_threadsafe_background.h ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_ASYNC_CONTEXT_THREADSAFE_BACKGROUND_H #define _PICO_ASYNC_CONTEXT_THREADSAFE_BACKGROUND_H /** \file pico/async_context.h * \defgroup async_context_threadsafe_background async_context_threadsafe_background * \ingroup pico_async_context * * async_context_threadsafe_background provides an implementation of \ref async_context that handles asynchronous * work in a low priority IRQ, and there is no need for the user to poll for work. * * \note The workers used with this async_context MUST be safe to call from an IRQ. */ #include "pico/async_context.h" #include "pico/sem.h" #include "pico/mutex.h" #include "hardware/irq.h" #ifdef __cplusplus extern "C" { #endif #ifndef ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE #define ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE LIB_PICO_MULTICORE #endif typedef struct async_context_threadsafe_background async_context_threadsafe_background_t; /** * \brief Configuration object for async_context_threadsafe_background instances. */ typedef struct async_context_threadsafe_background_config { /** * the priority of the low priority IRQ */ uint8_t low_priority_irq_handler_priority; /** * a specific alarm pool to use (or NULL to use ta default) * * \note this alarm pool MUST be on the same core as the async_context * * The default alarm pool used is the "default alarm pool" (see * \ref alarm_pool_get_default()) if available, and if that is on the same * core, otherwise a private alarm_pool instance created during * initialization. */ alarm_pool_t *custom_alarm_pool; } async_context_threadsafe_background_config_t; struct async_context_threadsafe_background { async_context_t core; alarm_pool_t *alarm_pool; // this must be on the same core as core_num absolute_time_t last_set_alarm_time; recursive_mutex_t lock_mutex; semaphore_t work_needed_sem; volatile alarm_id_t alarm_id; #if ASYNC_CONTEXT_THREADSAFE_BACKGROUND_MULTI_CORE volatile alarm_id_t force_alarm_id; bool alarm_pool_owned; #endif uint8_t low_priority_irq_num; volatile bool alarm_pending; }; /*! * \brief Initialize an async_context_threadsafe_background instance using the specified configuration * \ingroup async_context_threadsafe_background * * If this method succeeds (returns true), then the async_context is available for use * and can be de-initialized by calling async_context_deinit(). * * \param self a pointer to async_context_threadsafe_background structure to initialize * \param config the configuration object specifying characteristics for the async_context * \return true if initialization is successful, false otherwise */ bool async_context_threadsafe_background_init(async_context_threadsafe_background_t *self, async_context_threadsafe_background_config_t *config); /*! * \brief Return a copy of the default configuration object used by \ref async_context_threadsafe_background_init_with_defaults() * \ingroup async_context_threadsafe_background * * The caller can then modify just the settings it cares about, and call \ref async_context_threadsafe_background_init() * \return the default configuration object */ async_context_threadsafe_background_config_t async_context_threadsafe_background_default_config(void); /*! * \brief Initialize an async_context_threadsafe_background instance with default values * \ingroup async_context_threadsafe_background * * If this method succeeds (returns true), then the async_context is available for use * and can be de-initialized by calling async_context_deinit(). * * \param self a pointer to async_context_threadsafe_background structure to initialize * \return true if initialization is successful, false otherwise */ static inline bool async_context_threadsafe_background_init_with_defaults(async_context_threadsafe_background_t *self) { async_context_threadsafe_background_config_t config = async_context_threadsafe_background_default_config(); return async_context_threadsafe_background_init(self, &config); } #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_bit_ops/CMakeLists.txt ================================================ if (NOT TARGET pico_bit_ops) #shims for ROM functions for -lgcc functions (listed below) pico_add_impl_library(pico_bit_ops) # no custom implementation; falls thru to compiler pico_add_library(pico_bit_ops_compiler) # add alias "default" which is just pico. add_library(pico_bit_ops_default INTERFACE) target_link_libraries(pico_bit_ops_default INTERFACE pico_bit_ops_pico) set(PICO_DEFAULT_BIT_OPS_IMPL pico_bit_ops_default) pico_add_library(pico_bit_ops_pico) target_link_libraries(pico_bit_ops INTERFACE $>,$,${PICO_DEFAULT_BIT_OPS_IMPL}>) target_sources(pico_bit_ops_pico INTERFACE ${CMAKE_CURRENT_LIST_DIR}/bit_ops_aeabi.S ) target_link_libraries(pico_bit_ops_pico INTERFACE pico_bootrom pico_bit_ops_headers) # gcc pico_wrap_function(pico_bit_ops_pico __clzsi2) pico_wrap_function(pico_bit_ops_pico __clzsi2) pico_wrap_function(pico_bit_ops_pico __clzdi2) pico_wrap_function(pico_bit_ops_pico __ctzsi2) pico_wrap_function(pico_bit_ops_pico __ctzdi2) pico_wrap_function(pico_bit_ops_pico __popcountsi2) pico_wrap_function(pico_bit_ops_pico __popcountdi2) # armclang pico_wrap_function(pico_bit_ops_pico __clz) pico_wrap_function(pico_bit_ops_pico __clzl) pico_wrap_function(pico_bit_ops_pico __clzsi2) pico_wrap_function(pico_bit_ops_pico __clzll) macro(pico_set_bit_ops_implementation TARGET IMPL) get_target_property(target_type ${TARGET} TYPE) if ("EXECUTABLE" STREQUAL "${target_type}") set_target_properties(${TARGET} PROPERTIES PICO_TARGET_BIT_OPS_IMPL "pico_bit_ops_${IMPL}") else() message(FATAL_ERROR "bit_ops implementation must be set on executable not library") endif() endmacro() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" #include "pico/bootrom.h" pico_default_asm_setup .macro bits_section name #if PICO_BITS_IN_RAM .section RAM_SECTION_NAME(\name), "ax" #else .section SECTION_NAME(\name), "ax" #endif .endm __pre_init __aeabi_bits_init, 00010 .section .data.aeabi_bits_funcs .global aeabi_bits_funcs, aeabi_bits_funcs_end .equ BITS_FUNC_COUNT, 4 .align 4 aeabi_bits_funcs: .word ROM_FUNC_POPCOUNT32 .word ROM_FUNC_CLZ32 .word ROM_FUNC_CTZ32 .word ROM_FUNC_REVERSE32 aeabi_bits_funcs_end: .section .text .thumb_func __aeabi_bits_init: ldr r0, =aeabi_bits_funcs movs r1, #BITS_FUNC_COUNT ldr r3, =rom_funcs_lookup bx r3 .equ POPCOUNT32, 0 .equ CLZ32, 4 .equ CTZ32, 8 .equ REVERSE32, 12 bits_section clzsi wrapper_func __clz wrapper_func __clzl wrapper_func __clzsi2 ldr r3, =aeabi_bits_funcs ldr r3, [r3, #CLZ32] bx r3 bits_section ctzsi wrapper_func __ctzsi2 ldr r3, =aeabi_bits_funcs ldr r3, [r3, #CTZ32] bx r3 bits_section popcountsi wrapper_func __popcountsi2 ldr r3, =aeabi_bits_funcs ldr r3, [r3, #POPCOUNT32] bx r3 bits_section clzdi wrapper_func __clzll wrapper_func __clzdi2 ldr r3, =aeabi_bits_funcs ldr r3, [r3, #CLZ32] cmp r1, #0 bne 1f push {lr} blx r3 adds r0, #32 pop {pc} 1: mov r0, r1 bx r3 bits_section ctzdi wrapper_func __ctzdi2 ldr r3, =aeabi_bits_funcs ldr r3, [r3, #CTZ32] cmp r0, #0 beq 1f bx r3 1: push {lr} mov r0, r1 blx r3 adds r0, #32 pop {pc} bits_section popcountdi wrapper_func __popcountdi2 ldr r3, =aeabi_bits_funcs ldr r3, [r3, #POPCOUNT32] push {r1, r3, lr} blx r3 mov ip, r0 pop {r0, r3} blx r3 mov r1, ip add r0, r1 pop {pc} bits_section reverse32 regular_func reverse32 ldr r3, =aeabi_bits_funcs ldr r3, [r3, #REVERSE32] bx r3 bits_section __rev regular_func __rev regular_func __revl ldr r3, =aeabi_bits_funcs ldr r3, [r3, #REVERSE32] bx r3 bits_section __revll regular_func __revll push {lr} ldr r3, =aeabi_bits_funcs ldr r3, [r3, #REVERSE32] push {r1, r3} blx r3 mov ip, r0 // reverse32 preserves ip pop {r0, r3} blx r3 mov r1, ip pop {pc} ================================================ FILE: pico-sdk/src/rp2_common/pico_bootrom/CMakeLists.txt ================================================ pico_add_library(pico_bootrom_headers NOFLAG) target_include_directories(pico_bootrom_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) add_library(pico_bootrom INTERFACE) target_sources(pico_bootrom INTERFACE ${CMAKE_CURRENT_LIST_DIR}/bootrom.c ) pico_mirrored_target_link_libraries(pico_bootrom INTERFACE pico_base) ================================================ FILE: pico-sdk/src/rp2_common/pico_bootrom/bootrom.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/bootrom.h" /// \tag::table_lookup[] void *rom_func_lookup(uint32_t code) { return rom_func_lookup_inline(code); } void *rom_data_lookup(uint32_t code) { rom_table_lookup_fn rom_table_lookup = (rom_table_lookup_fn) rom_hword_as_ptr(0x18); uint16_t *data_table = (uint16_t *) rom_hword_as_ptr(0x16); return rom_table_lookup(data_table, code); } /// \end::table_lookup[] bool rom_funcs_lookup(uint32_t *table, unsigned int count) { bool ok = true; for (unsigned int i = 0; i < count; i++) { table[i] = (uintptr_t) rom_func_lookup(table[i]); if (!table[i]) ok = false; } return ok; } ================================================ FILE: pico-sdk/src/rp2_common/pico_bootrom/include/pico/bootrom/sf_table.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_BOOTROM_SF_TABLE_H #define _PICO_BOOTROM_SF_TABLE_H // NOTE THESE FUNCTION IMPLEMENTATIONS MATCH THE BEHAVIOR DESCRIBED IN THE BOOTROM SECTION OF THE RP2040 DATASHEET #define SF_TABLE_FADD 0x00 #define SF_TABLE_FSUB 0x04 #define SF_TABLE_FMUL 0x08 #define SF_TABLE_FDIV 0x0c #define SF_TABLE_FCMP_FAST 0x10 #define SF_TABLE_FCMP_FAST_FLAGS 0x14 #define SF_TABLE_FSQRT 0x18 #define SF_TABLE_FLOAT2INT 0x1c #define SF_TABLE_FLOAT2FIX 0x20 #define SF_TABLE_FLOAT2UINT 0x24 #define SF_TABLE_FLOAT2UFIX 0x28 #define SF_TABLE_INT2FLOAT 0x2c #define SF_TABLE_FIX2FLOAT 0x30 #define SF_TABLE_UINT2FLOAT 0x34 #define SF_TABLE_UFIX2FLOAT 0x38 #define SF_TABLE_FCOS 0x3c #define SF_TABLE_FSIN 0x40 #define SF_TABLE_FTAN 0x44 #define SF_TABLE_V3_FSINCOS 0x48 #define SF_TABLE_FEXP 0x4c #define SF_TABLE_FLN 0x50 #define SF_TABLE_V1_SIZE 0x54 #define SF_TABLE_FCMP_BASIC 0x54 #define SF_TABLE_FATAN2 0x58 #define SF_TABLE_INT642FLOAT 0x5c #define SF_TABLE_FIX642FLOAT 0x60 #define SF_TABLE_UINT642FLOAT 0x64 #define SF_TABLE_UFIX642FLOAT 0x68 #define SF_TABLE_FLOAT2INT64 0x6c #define SF_TABLE_FLOAT2FIX64 0x70 #define SF_TABLE_FLOAT2UINT64 0x74 #define SF_TABLE_FLOAT2UFIX64 0x78 #define SF_TABLE_FLOAT2DOUBLE 0x7c #define SF_TABLE_V2_SIZE 0x80 #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_bootrom/include/pico/bootrom.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_BOOTROM_H #define _PICO_BOOTROM_H #include "pico.h" /** \file bootrom.h * \defgroup pico_bootrom pico_bootrom * Access to functions and data in the RP2040 bootrom * * This header may be included by assembly code */ // ROM FUNCTIONS #define ROM_FUNC_POPCOUNT32 ROM_TABLE_CODE('P', '3') #define ROM_FUNC_REVERSE32 ROM_TABLE_CODE('R', '3') #define ROM_FUNC_CLZ32 ROM_TABLE_CODE('L', '3') #define ROM_FUNC_CTZ32 ROM_TABLE_CODE('T', '3') #define ROM_FUNC_MEMSET ROM_TABLE_CODE('M', 'S') #define ROM_FUNC_MEMSET4 ROM_TABLE_CODE('S', '4') #define ROM_FUNC_MEMCPY ROM_TABLE_CODE('M', 'C') #define ROM_FUNC_MEMCPY44 ROM_TABLE_CODE('C', '4') #define ROM_FUNC_RESET_USB_BOOT ROM_TABLE_CODE('U', 'B') #define ROM_FUNC_CONNECT_INTERNAL_FLASH ROM_TABLE_CODE('I', 'F') #define ROM_FUNC_FLASH_EXIT_XIP ROM_TABLE_CODE('E', 'X') #define ROM_FUNC_FLASH_RANGE_ERASE ROM_TABLE_CODE('R', 'E') #define ROM_FUNC_FLASH_RANGE_PROGRAM ROM_TABLE_CODE('R', 'P') #define ROM_FUNC_FLASH_FLUSH_CACHE ROM_TABLE_CODE('F', 'C') #define ROM_FUNC_FLASH_ENTER_CMD_XIP ROM_TABLE_CODE('C', 'X') /*! \brief Return a bootrom lookup code based on two ASCII characters * \ingroup pico_bootrom * * These codes are uses to lookup data or function addresses in the bootrom * * \param c1 the first character * \param c2 the second character * \return the 'code' to use in rom_func_lookup() or rom_data_lookup() */ #define ROM_TABLE_CODE(c1, c2) ((c1) | ((c2) << 8)) #ifndef __ASSEMBLER__ // ROM FUNCTION SIGNATURES typedef uint32_t (*rom_popcount32_fn)(uint32_t); typedef uint32_t (*rom_reverse32_fn)(uint32_t); typedef uint32_t (*rom_clz32_fn)(uint32_t); typedef uint32_t (*rom_ctz32_fn)(uint32_t); typedef uint8_t *(*rom_memset_fn)(uint8_t *, uint8_t, uint32_t); typedef uint32_t *(*rom_memset4_fn)(uint32_t *, uint8_t, uint32_t); typedef uint32_t *(*rom_memcpy_fn)(uint8_t *, const uint8_t *, uint32_t); typedef uint32_t *(*rom_memcpy44_fn)(uint32_t *, const uint32_t *, uint32_t); typedef void __attribute__((noreturn)) (*rom_reset_usb_boot_fn)(uint32_t, uint32_t); typedef rom_reset_usb_boot_fn reset_usb_boot_fn; // kept for backwards compatibility typedef void (*rom_connect_internal_flash_fn)(void); typedef void (*rom_flash_exit_xip_fn)(void); typedef void (*rom_flash_range_erase_fn)(uint32_t, size_t, uint32_t, uint8_t); typedef void (*rom_flash_range_program_fn)(uint32_t, const uint8_t*, size_t); typedef void (*rom_flash_flush_cache_fn)(void); typedef void (*rom_flash_enter_cmd_xip_fn)(void); #ifdef __cplusplus extern "C" { #endif /*! \brief Return a bootrom lookup code based on two ASCII characters * \ingroup pico_bootrom * * These codes are uses to lookup data or function addresses in the bootrom * * \param c1 the first character * \param c2 the second character * \return the 'code' to use in rom_func_lookup() or rom_data_lookup() */ static inline uint32_t rom_table_code(uint8_t c1, uint8_t c2) { return ROM_TABLE_CODE((uint32_t) c1, (uint32_t) c2); } /*! * \brief Lookup a bootrom function by code * \ingroup pico_bootrom * \param code the code * \return a pointer to the function, or NULL if the code does not match any bootrom function */ void *rom_func_lookup(uint32_t code); /*! * \brief Lookup a bootrom address by code * \ingroup pico_bootrom * \param code the code * \return a pointer to the data, or NULL if the code does not match any bootrom function */ void *rom_data_lookup(uint32_t code); /*! * \brief Helper function to lookup the addresses of multiple bootrom functions * \ingroup pico_bootrom * * This method looks up the 'codes' in the table, and convert each table entry to the looked up * function pointer, if there is a function for that code in the bootrom. * * \param table an IN/OUT array, elements are codes on input, function pointers on success. * \param count the number of elements in the table * \return true if all the codes were found, and converted to function pointers, false otherwise */ bool rom_funcs_lookup(uint32_t *table, unsigned int count); // Bootrom function: rom_table_lookup // Returns the 32 bit pointer into the ROM if found or NULL otherwise. typedef void *(*rom_table_lookup_fn)(uint16_t *table, uint32_t code); #if PICO_C_COMPILER_IS_GNU && (__GNUC__ >= 12) // Convert a 16 bit pointer stored at the given rom address into a 32 bit pointer static inline void *rom_hword_as_ptr(uint16_t rom_address) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Warray-bounds" return (void *)(uintptr_t)*(uint16_t *)(uintptr_t)rom_address; #pragma GCC diagnostic pop } #else // Convert a 16 bit pointer stored at the given rom address into a 32 bit pointer #define rom_hword_as_ptr(rom_address) (void *)(uintptr_t)(*(uint16_t *)(uintptr_t)(rom_address)) #endif /*! * \brief Lookup a bootrom function by code. This method is forcibly inlined into the caller for FLASH/RAM sensitive code usage * \ingroup pico_bootrom * \param code the code * \return a pointer to the function, or NULL if the code does not match any bootrom function */ static __force_inline void *rom_func_lookup_inline(uint32_t code) { rom_table_lookup_fn rom_table_lookup = (rom_table_lookup_fn) rom_hword_as_ptr(0x18); uint16_t *func_table = (uint16_t *) rom_hword_as_ptr(0x14); return rom_table_lookup(func_table, code); } /*! * \brief Reboot the device into BOOTSEL mode * \ingroup pico_bootrom * * This function reboots the device into the BOOTSEL mode ('usb boot"). * * Facilities are provided to enable an "activity light" via GPIO attached LED for the USB Mass Storage Device, * and to limit the USB interfaces exposed. * * \param usb_activity_gpio_pin_mask 0 No pins are used as per a cold boot. Otherwise a single bit set indicating which * GPIO pin should be set to output and raised whenever there is mass storage activity * from the host. * \param disable_interface_mask value to control exposed interfaces * - 0 To enable both interfaces (as per a cold boot) * - 1 To disable the USB Mass Storage Interface * - 2 To disable the USB PICOBOOT Interface */ static inline void __attribute__((noreturn)) reset_usb_boot(uint32_t usb_activity_gpio_pin_mask, uint32_t disable_interface_mask) { rom_reset_usb_boot_fn func = (rom_reset_usb_boot_fn) rom_func_lookup(ROM_FUNC_RESET_USB_BOOT); func(usb_activity_gpio_pin_mask, disable_interface_mask); } #ifdef __cplusplus } #endif #endif // !__ASSEMBLER__ #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/CMakeLists.txt ================================================ pico_add_library(pico_bootsel_via_double_reset) target_sources(pico_bootsel_via_double_reset INTERFACE ${CMAKE_CURRENT_LIST_DIR}/pico_bootsel_via_double_reset.c ) pico_mirrored_target_link_libraries(pico_bootsel_via_double_reset INTERFACE pico_bootrom pico_time pico_binary_info ) ================================================ FILE: pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c ================================================ /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" #include "pico/time.h" #include "pico/bootrom.h" #include "pico/binary_info.h" // PICO_CONFIG: PICO_BOOTSEL_VIA_DOUBLE_RESET_TIMEOUT_MS, Window of opportunity for a second press of a reset button to enter BOOTSEL mode (milliseconds), type=int, default=200, group=pico_bootsel_via_double_reset #ifndef PICO_BOOTSEL_VIA_DOUBLE_RESET_TIMEOUT_MS #define PICO_BOOTSEL_VIA_DOUBLE_RESET_TIMEOUT_MS 200 #endif // PICO_CONFIG: PICO_BOOTSEL_VIA_DOUBLE_RESET_ACTIVITY_LED, Optionally define a pin to use as bootloader activity LED when BOOTSEL mode is entered via reset double tap, type=int, min=0, max=29, group=pico_bootsel_via_double_reset // PICO_CONFIG: PICO_BOOTSEL_VIA_DOUBLE_RESET_INTERFACE_DISABLE_MASK, Optionally disable either the mass storage interface (bit 0) or the PICOBOOT interface (bit 1) when entering BOOTSEL mode via double reset, type=int, min=0, max=3, default=0, group=pico_bootsel_via_double_reset #ifndef PICO_BOOTSEL_VIA_DOUBLE_RESET_INTERFACE_DISABLE_MASK #define PICO_BOOTSEL_VIA_DOUBLE_RESET_INTERFACE_DISABLE_MASK 0u #endif /** \defgroup pico_bootsel_via_double_reset pico_bootsel_via_double_reset * * When the 'pico_bootsel_via_double_reset' library is linked, a function is * injected before main() which will detect when the system has been reset * twice in quick succession, and enter the USB ROM bootloader (BOOTSEL mode) * when this happens. This allows a double tap of a reset button on a * development board to be used to enter the ROM bootloader, provided this * library is always linked. */ #if !PICO_NO_BI_BOOTSEL_VIA_DOUBLE_RESET bi_decl(bi_program_feature("double reset -> BOOTSEL")); #endif // Doesn't make any sense for a RAM only binary #if !PICO_NO_FLASH static const uint32_t magic_token[] = { 0xf01681de, 0xbd729b29, 0xd359be7a, }; static uint32_t __uninitialized_ram(magic_location)[count_of(magic_token)]; /* Check for double reset and enter BOOTSEL mode if detected * * This function is registered to run automatically before main(). The * algorithm is: * * 1. Check for magic token in memory; enter BOOTSEL mode if found. * 2. Initialise that memory with that magic token. * 3. Do nothing for a short while (few hundred ms). * 4. Clear the magic token. * 5. Continue with normal boot. * * Resetting the device twice quickly will interrupt step 3, leaving the token * in place so that the second boot will go to the bootloader. */ static void __attribute__((constructor)) boot_double_tap_check(void) { for (uint i = 0; i < count_of(magic_token); i++) { if (magic_location[i] != magic_token[i]) { // Arm, wait, then disarm and continue booting for (i = 0; i < count_of(magic_token); i++) { magic_location[i] = magic_token[i]; } busy_wait_us(PICO_BOOTSEL_VIA_DOUBLE_RESET_TIMEOUT_MS * 1000); magic_location[0] = 0; return; } } // Detected a double reset, so enter USB bootloader magic_location[0] = 0; #ifdef PICO_BOOTSEL_VIA_DOUBLE_RESET_ACTIVITY_LED const uint32_t led_mask = 1u << PICO_BOOTSEL_VIA_DOUBLE_RESET_ACTIVITY_LED; #else const uint32_t led_mask = 0u; #endif reset_usb_boot( led_mask, PICO_BOOTSEL_VIA_DOUBLE_RESET_INTERFACE_DISABLE_MASK ); } #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_cxx_options/CMakeLists.txt ================================================ if (NOT TARGET pico_cxx_options) add_library(pico_cxx_options INTERFACE) # PICO_CMAKE_CONFIG: PICO_CXX_ENABLE_EXCEPTIONS, Enabled CXX exception handling, type=bool, default=0, group=pico_cxx_options # PICO_BUILD_DEFINE: PICO_CXX_ENABLE_EXCEPTIONS, value of CMake var PICO_CXX_ENABLE_EXCEPTIONS, type=string, default=0, group=pico_cxx_options if (NOT PICO_CXX_ENABLE_EXCEPTIONS) target_compile_definitions( pico_cxx_options INTERFACE PICO_CXX_ENABLE_EXCEPTIONS=0) target_compile_options( pico_cxx_options INTERFACE $<$:-fno-exceptions>) target_compile_options( pico_cxx_options INTERFACE $<$:-fno-unwind-tables>) else() target_compile_definitions( pico_cxx_options INTERFACE PICO_CXX_ENABLE_EXCEPTIONS=1) endif() # PICO_CMAKE_CONFIG: PICO_CXX_ENABLE_RTTI, Enabled CXX rtti, type=bool, default=0, group=pico_cxx_options if (NOT PICO_CXX_ENABLE_RTTI) target_compile_options( pico_cxx_options INTERFACE $<$:-fno-rtti>) endif() # PICO_CMAKE_CONFIG: PICO_CXX_ENABLE_CXA_ATEXIT, Enabled cxa-atexit, type=bool, default=0, group=pico_cxx_options if (NOT PICO_CXX_ENABLE_CXA_ATEXIT) target_compile_options( pico_cxx_options INTERFACE $<$:-fno-use-cxa-atexit>) endif() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_cxx_options/doc.h ================================================ /** * \defgroup pico_cxx_options pico_cxx_options * \brief non-code library controlling C++ related compile options */ ================================================ FILE: pico-sdk/src/rp2_common/pico_divider/CMakeLists.txt ================================================ if (NOT TARGET pico_divider) # library to be depended on - we make this depend on particular implementations using per target generator expressions pico_add_impl_library(pico_divider) # no custom implementation; falls thru to compiler pico_add_library(pico_divider_compiler) # add alias "default" which is just hardware. add_library(pico_divider_default INTERFACE) target_link_libraries(pico_divider_default INTERFACE pico_divider_hardware) set(PICO_DEFAULT_DIVIDER_IMPL pico_divider_default) target_link_libraries(pico_divider INTERFACE $>,$,${PICO_DEFAULT_DIVIDER_IMPL}>) add_library(pico_divider_hardware_explicit INTERFACE) target_sources(pico_divider_hardware_explicit INTERFACE ${CMAKE_CURRENT_LIST_DIR}/divider.S ) target_link_libraries(pico_divider_hardware_explicit INTERFACE pico_divider_headers hardware_divider hardware_regs ) pico_add_library(pico_divider_hardware) target_link_libraries(pico_divider_hardware INTERFACE pico_divider_hardware_explicit) pico_wrap_function(pico_divider_hardware __aeabi_idiv) pico_wrap_function(pico_divider_hardware __aeabi_idivmod) pico_wrap_function(pico_divider_hardware __aeabi_ldivmod) pico_wrap_function(pico_divider_hardware __aeabi_uidiv) pico_wrap_function(pico_divider_hardware __aeabi_uidivmod) pico_wrap_function(pico_divider_hardware __aeabi_uldivmod) macro(pico_set_divider_implementation TARGET IMPL) get_target_property(target_type ${TARGET} TYPE) if ("EXECUTABLE" STREQUAL "${target_type}") set_target_properties(${TARGET} PROPERTIES PICO_TARGET_DIVIDER_IMPL "pico_divider_${IMPL}") else() message(FATAL_ERROR "divider implementation must be set on executable not library") endif() endmacro() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_divider/divider.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" #include "hardware/regs/addressmap.h" #include "hardware/divider_helper.S" // PICO_CONFIG: PICO_DIVIDER_DISABLE_INTERRUPTS, Disable interrupts around division such that divider state need not be saved/restored in exception handlers, default=0, group=pico_divider // PICO_CONFIG: PICO_DIVIDER_CALL_IDIV0, Whether 32 bit division by zero should call __aeabi_idiv0, default=1, group=pico_divider #ifndef PICO_DIVIDER_CALL_IDIV0 #define PICO_DIVIDER_CALL_IDIV0 1 #endif // PICO_CONFIG: PICO_DIVIDER_CALL_IDIV0, Whether 64 bit division by zero should call __aeabi_ldiv0, default=1, group=pico_divider #ifndef PICO_DIVIDER_CALL_LDIV0 #define PICO_DIVIDER_CALL_LDIV0 1 #endif pico_default_asm_setup // PICO_CONFIG: PICO_DIVIDER_IN_RAM, Whether divider functions should be placed in RAM, default=0, group=pico_divider .macro div_section name #if PICO_DIVIDER_IN_RAM .section RAM_SECTION_NAME(\name), "ax" #else .section SECTION_NAME(\name), "ax" #endif .endm @ wait 8-n cycles for the hardware divider .macro wait_div n .rept (8-\n) / 2 b 9f 9: .endr .if (8-\n) % 2 nop .endif .endm #if (SIO_DIV_SDIVISOR_OFFSET != SIO_DIV_SDIVIDEND_OFFSET + 4) || (SIO_DIV_QUOTIENT_OFFSET != SIO_DIV_SDIVISOR_OFFSET + 4) || (SIO_DIV_REMAINDER_OFFSET != SIO_DIV_QUOTIENT_OFFSET + 4) #error register layout has changed - we rely on this order to make sure we save/restore in the right order #endif #if !PICO_DIVIDER_DISABLE_INTERRUPTS .macro save_div_state_and_lr_64 push {r4, r5, r6, r7, lr} ldr r6, =SIO_BASE // note we must read quotient last, and since it isn't the last reg, we'll not use ldmia! ldr r4, [r6, #SIO_DIV_UDIVIDEND_OFFSET] ldr r5, [r6, #SIO_DIV_UDIVISOR_OFFSET] // No need to wait before reading result as long as preceeding code takes more than 8 cycles ldr r7, [r6, #SIO_DIV_REMAINDER_OFFSET] ldr r6, [r6, #SIO_DIV_QUOTIENT_OFFSET] .endm .macro restore_div_state_and_return_64 // writing sdividend (r4), sdivisor (r5), quotient (r6), remainder (r7) in that order // // it is worth considering what happens if we are interrupted // // after writing r4: we are DIRTY and !READY // ... interruptor using div will complete based on incorrect inputs, but dividend at least will be // saved/restored correctly and we'll restore the rest ourselves // after writing r4, r5: we are DIRTY and !READY // ... interruptor using div will complete based on possibly wrongly signed inputs, but dividend, divisor // at least will be saved/restored correctly and and we'll restore the rest ourselves // after writing r4, r5, r6: we are DIRTY and READY // ... interruptor using div will dividend, divisor, quotient registers as is (what we just restored ourselves), // and we'll restore the remainder after the fact mov ip, r2 ldr r2, =SIO_BASE // note we are not use STM not because it can be restarted due to interrupt which is harmless, more because this is 1 cycle IO space // and so 4 reads is cheaper (and we don't have to adjust r2) str r4, [r2, #SIO_DIV_UDIVIDEND_OFFSET] str r5, [r2, #SIO_DIV_UDIVISOR_OFFSET] str r7, [r2, #SIO_DIV_REMAINDER_OFFSET] str r6, [r2, #SIO_DIV_QUOTIENT_OFFSET] mov r2, ip pop {r4, r5, r6, r7, pc} .endm #endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */ // since idiv and idivmod only differ by a cycle, we'll make them the same! div_section WRAPPER_FUNC_NAME(__aeabi_idiv) .align 2 wrapper_func __aeabi_idiv wrapper_func __aeabi_idivmod regular_func div_s32s32 regular_func divmod_s32s32 #if !PICO_DIVIDER_DISABLE_INTERRUPTS // to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty ldr r2, =SIO_BASE ldr r3, [r2, #SIO_DIV_CSR_OFFSET] lsrs r3, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY bcs divmod_s32s32_savestate regular_func divmod_s32s32_unsafe #else // to avoid too much source code spaghetti with restoring interrupts, we make this the same as the other funcs // in the PICO_DIVIDER_DISABLE_INTERRUPTS case; i.e. it is not a faster function; this seems reasonable as there // are the hardware_divider functions that can be used instead anyway regular_func divmod_s32s32_unsafe // to avoid worrying about IRQs (or context switches), simply disable interrupts around call ldr r2, =SIO_BASE mrs r3, PRIMASK cpsid i #endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */ str r0, [r2, #SIO_DIV_SDIVIDEND_OFFSET] str r1, [r2, #SIO_DIV_SDIVISOR_OFFSET] cmp r1, #0 beq 1f wait_div 2 // return 64 bit value so we can efficiently return both (note read order is important since QUOTIENT must be read last) ldr r1, [r2, #SIO_DIV_REMAINDER_OFFSET] ldr r0, [r2, #SIO_DIV_QUOTIENT_OFFSET] #if PICO_DIVIDER_DISABLE_INTERRUPTS msr PRIMASK, r3 #endif /* PICO_DIVIDER_DISABLE_INTERRUPTS */ bx lr 1: #if PICO_DIVIDER_DISABLE_INTERRUPTS msr PRIMASK, r3 #endif /* PICO_DIVIDER_DISABLE_INTERRUPTS */ push {r2, lr} movs r1, #0x80 lsls r1, #24 asrs r2, r0, #31 eors r1, r2 cmp r0, #0 beq 1f mvns r0, r1 1: #if PICO_DIVIDER_CALL_IDIV0 bl __aeabi_idiv0 #endif movs r1, #0 // remainder 0 // need to restore saved r2 as it hold SIO ptr pop {r2, pc} #if !PICO_DIVIDER_DISABLE_INTERRUPTS .align 2 regular_func divmod_s32s32_savestate save_div_state_and_lr bl divmod_s32s32_unsafe restore_div_state_and_return #endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */ // since uidiv and uidivmod only differ by a cycle, we'll make them the same! div_section WRAPPER_FUNC_NAME(__aeabi_uidiv) regular_func div_u32u32 regular_func divmod_u32u32 wrapper_func __aeabi_uidiv wrapper_func __aeabi_uidivmod #if !PICO_DIVIDER_DISABLE_INTERRUPTS // to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty ldr r2, =SIO_BASE ldr r3, [r2, #SIO_DIV_CSR_OFFSET] lsrs r3, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY bcs divmod_u32u32_savestate regular_func divmod_u32u32_unsafe #else // to avoid too much source code spaghetti with restoring interrupts, we make this the same as the other funcs // in the PICO_DIVIDER_DISABLE_INTERRUPTS case; i.e. it is not a faster function; this seems reasonable as there // are the hardware_divider functions that can be used instead anyway regular_func divmod_u32u32_unsafe // to avoid worrying about IRQs (or context switches), simply disable interrupts around call ldr r2, =SIO_BASE mrs r3, PRIMASK cpsid i #endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */ str r0, [r2, #SIO_DIV_UDIVIDEND_OFFSET] str r1, [r2, #SIO_DIV_UDIVISOR_OFFSET] cmp r1, #0 beq 1f wait_div 2 // return 64 bit value so we can efficiently return both (note read order is important since QUOTIENT must be read last) ldr r1, [r2, #SIO_DIV_REMAINDER_OFFSET] ldr r0, [r2, #SIO_DIV_QUOTIENT_OFFSET] #if PICO_DIVIDER_DISABLE_INTERRUPTS msr PRIMASK, r3 #endif /* PICO_DIVIDER_DISABLE_INTERRUPTS */ bx lr 1: #if PICO_DIVIDER_DISABLE_INTERRUPTS msr PRIMASK, r3 #endif /* PICO_DIVIDER_DISABLE_INTERRUPTS */ push {r2, lr} cmp r0, #0 beq 1f movs r0, #0 mvns r0, r0 1: #if PICO_DIVIDER_CALL_IDIV0 bl __aeabi_idiv0 #endif movs r1, #0 // remainder 0 // need to restore saved r2 as it hold SIO ptr pop {r2, pc} #if !PICO_DIVIDER_DISABLE_INTERRUPTS .align 2 regular_func divmod_u32u32_savestate save_div_state_and_lr bl divmod_u32u32_unsafe restore_div_state_and_return #endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */ div_section WRAPPER_FUNC_NAME(__aeabi_ldiv) .align 2 wrapper_func __aeabi_ldivmod regular_func div_s64s64 regular_func divmod_s64s64 #if !PICO_DIVIDER_DISABLE_INTERRUPTS // to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty mov ip, r2 ldr r2, =SIO_BASE ldr r2, [r2, #SIO_DIV_CSR_OFFSET] lsrs r2, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY mov r2, ip bcs divmod_s64s64_savestate b divmod_s64s64_unsafe .align 2 divmod_s64s64_savestate: save_div_state_and_lr_64 bl divmod_s64s64_unsafe restore_div_state_and_return_64 #else // to avoid worrying about IRQs (or context switches), simply disable interrupts around call push {r4, lr} mrs r4, PRIMASK cpsid i bl divmod_s64s64_unsafe msr PRIMASK, r4 pop {r4, pc} #endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */ .align 2 wrapper_func __aeabi_uldivmod regular_func div_u64u64 regular_func divmod_u64u64 #if !PICO_DIVIDER_DISABLE_INTERRUPTS // to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty mov ip, r2 ldr r2, =SIO_BASE ldr r2, [r2, #SIO_DIV_CSR_OFFSET] lsrs r2, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY mov r2, ip bcs divmod_u64u64_savestate b divmod_u64u64_unsafe .align 2 regular_func divmod_u64u64_savestate save_div_state_and_lr_64 bl divmod_u64u64_unsafe restore_div_state_and_return_64 #else // to avoid worrying about IRQs (or context switches), simply disable interrupts around call push {r4, lr} mrs r4, PRIMASK cpsid i bl divmod_u64u64_unsafe msr PRIMASK, r4 pop {r4, pc} #endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */ .macro dneg lo,hi mvns \hi,\hi negs \lo,\lo bne l\@_1 adds \hi,#1 l\@_1: .endm .align 2 regular_func divmod_s64s64_unsafe cmp r3,#0 blt 1f @ here x +ve beq 2f @ could x be zero? 3: cmp r1,#0 bge divmod_u64u64_unsafe @ both positive @ y -ve, x +ve push {r14} dneg r0,r1 bl divmod_u64u64_unsafe dneg r0,r1 dneg r2,r3 pop {r15} 2: cmp r2,#0 bne 3b @ back if x not zero cmp r0,#0 @ y==0? bne 4f cmp r1,#0 beq 5f @ then pass 0 to __aeabi_ldiv0 4: movs r0,#0 lsrs r1,#31 lsls r1,#31 @ get sign bit bne 5f @ y -ve? pass -2^63 to __aeabi_ldiv0 mvns r0,r0 lsrs r1,r0,#1 @ y +ve: pass 2^63-1 to __aeabi_ldiv0 5: push {r14} #if PICO_DIVIDER_CALL_LDIV0 bl __aeabi_ldiv0 #endif movs r2,#0 @ and return 0 for the remainder movs r3,#0 pop {r15} 1: @ here x -ve push {r14} cmp r1,#0 blt 1f @ y +ve, x -ve dneg r2,r3 bl divmod_u64u64_unsafe dneg r0,r1 pop {r15} 1: @ y -ve, x -ve dneg r0,r1 dneg r2,r3 bl divmod_u64u64_unsafe dneg r2,r3 pop {r15} regular_func divmod_u64u64_unsafe cmp r1,#0 bne y64 @ y fits in 32 bits? cmp r3,#0 @ yes; and x? bne 1f cmp r2,#0 beq 2f @ x==0? mov r12,r7 ldr r7,=SIO_BASE str r0,[r7,#SIO_DIV_UDIVIDEND_OFFSET] str r2,[r7,#SIO_DIV_UDIVISOR_OFFSET] movs r1,#0 movs r3,#0 wait_div 2 ldr r2,[r7,#SIO_DIV_REMAINDER_OFFSET] ldr r0,[r7,#SIO_DIV_QUOTIENT_OFFSET] mov r7,r12 bx r14 2: @ divide by 0 with y<2^32 cmp r0,#0 @ y==0? beq 3f @ then pass 0 to __aeabi_ldiv0 udiv0: ldr r0,=0xffffffff movs r1,r0 @ pass 2^64-1 to __aeabi_ldiv0 3: push {r14} #if PICO_DIVIDER_CALL_LDIV0 bl __aeabi_ldiv0 #endif movs r2,#0 @ and return 0 for the remainder movs r3,#0 pop {r15} 1: movs r2,r0 @ x>y, so result is 0 remainder y movs r3,r1 movs r0,#0 movs r1,#0 bx r14 .ltorg @ here y occupies more than 32 bits @ split into cases acccording to the size of x y64: cmp r3,#0 beq 1f b y64_x48 @ if x does not fit in 32 bits, go to 48- and 64-bit cases 1: lsrs r3,r2,#16 bne y64_x32 @ jump if x is 17..32 bits @ here x is at most 16 bits cmp r2,#0 beq udiv0 @ x==0? exit as with y!=0 case above push {r7} ldr r7,=SIO_BASE str r1,[r7,#SIO_DIV_UDIVIDEND_OFFSET] str r2,[r7,#SIO_DIV_UDIVISOR_OFFSET] wait_div 4 push {r4, r5} lsrs r4,r0,#16 ldr r3,[r7,#SIO_DIV_REMAINDER_OFFSET] @ r0=y0-q0*x; 0<=r0>16); str r2,[r7,#SIO_DIV_UDIVISOR_OFFSET] @ must set divisor again, as we do not save/restore regs at all in IRQs if not dirty wait_div 1 uxth r4,r0 ldr r3,[r7,#SIO_DIV_REMAINDER_OFFSET] @ r1=y1-q1*x; 0<=r1>16); str r2,[r7,#SIO_DIV_UDIVISOR_OFFSET] @ must set divisor again, as we do not save/restore regs at all in IRQs if not dirty wait_div 3 movs r3,#0 lsls r4,r5,#16 @ quotient=(q0<<32)+(q1<<16)+q2 lsrs r5,#16 ldr r2,[r7,#SIO_DIV_REMAINDER_OFFSET] @ r2=y2-q2*x; 0<=r2>15)+1; 2^16>48)*r)>>16; lsls r7,r6,#13 mov r14,r7 @ quh=q0<<13 muls r3,r6 @ x0l*q lsrs r7,r3,#15 lsls r3,#17 @ r3:r7 is (x0l*q)<<17 subs r0,r3 sbcs r1,r7 @ y-=(x0l*q)<<17 lsrs r3,r2,#16 @ x0h muls r3,r6 @ q*x0h adds r3,r3 subs r1,r3 @ y-=(x0h*q)<<17 lsrs r6,r1,#3 muls r6,r4 lsrs r6,#16 @ q=((ui32)(y>>35)*r)>>16; add r14,r6 @ quh+=q1 uxth r3,r2 @ x0l muls r3,r6 @ x0l*q lsrs r7,r3,#28 lsls r3,#4 @ r3:r7 is (x0l*q)<<4 subs r0,r3 sbcs r1,r7 @ y-=(x0l*q)<<4 lsrs r3,r2,#16 @ x0h muls r3,r6 @ x0h*q lsrs r7,r3,#12 lsls r3,#20 @ r3:r7 is (x0h*q)<<4 subs r0,r3 sbcs r1,r7 @ y-=(x0h*q)<<4 lsrs r6,r0,#22 lsls r7,r1,#10 orrs r6,r7 @ y>>22 muls r6,r4 lsrs r6,#16 @ q=((ui32)(y>>22)*r)>>16; cmp r5,#9 blt last0 @ if(xsh<9) goto last0; @ on this path xsh>=9, which means x<2^23 lsrs r2,#9 @ x0>>9: this shift loses no bits @ the remainder y-x0*q is guaranteed less than a very small multiple of the remaining quotient @ bits (at most 6 bits) times x, and so fits in one word muls r2,r6 @ x0*q subs r0,r2 @ y-x0*q lsls r7,r6,#13 @ qul=q<<13 1: lsrs r6,r0,#9 muls r6,r4 lsrs r6,#16 @ q=((ui32)(y>>9)*r)>>16; @ here @ r0 y @ r2 x0>>9 @ r5 xsh @ r6 q @ r7 qul @ r12 x @ r14 quh movs r3,#22 subs r3,r5 @ 22-xsh lsrs r6,r3 @ q>>=22-xsh lsrs r7,r3 @ qul>>=22-xsh adds r7,r6 @ qul+=q mov r4,r12 muls r6,r4 @ x*q subs r2,r0,r6 @ y-=x*q mov r0,r14 @ quh adds r5,#4 @ xsh+4 adds r3,#6 @ 28-xsh movs r1,r0 lsrs r1,r3 lsls r0,r5 @ r0:r1 is quh<<(4+xsh) adds r0,r7 bcc 1f 2: adds r1,#1 1: @ qu=((ui64)quh<<(4+xsh))+qul cmp r2,r4 bhs 3f movs r3,#0 pop {r4-r7,r15} .ltorg 3: subs r2,r4 adds r0,#1 bcc 1b b 2b @ while(y>=x) y-=x,qu++; @ here: @ r0:r1 y @ r2 x0 @ r4 r @ r5 xsh; xsh<9 @ r6 q last0: movs r7,#9 subs r7,r5 @ 9-xsh lsrs r6,r7 mov r4,r12 @ x uxth r2,r4 muls r2,r6 @ q*xlo subs r0,r2 bcs 1f subs r1,#1 @ y-=q*xlo 1: lsrs r2,r4,#16 @ xhi muls r2,r6 @ q*xhi lsrs r3,r2,#16 lsls r2,#16 subs r2,r0,r2 sbcs r1,r3 @ y-q*xhi movs r3,r1 @ y now in r2:r3 mov r0,r14 @ quh adds r5,#4 @ xsh+4 adds r7,#19 @ 28-xsh movs r1,r0 lsrs r1,r7 lsls r0,r5 @ r0:r1 is quh<<(4+xsh) adds r0,r6 bcc 1f adds r1,#1 @ quh<<(xsh+4))+q 1: cmp r3,#0 @ y>=2^32? bne 3f cmp r2,r4 @ y>=x? bhs 4f pop {r4-r7,r15} 3: adds r0,#1 @ qu++ bcc 2f adds r1,#1 2: subs r2,r4 @ y-=x bcs 3b subs r3,#1 bne 3b 1: cmp r2,r4 bhs 4f pop {r4-r7,r15} 4: adds r0,#1 @ qu++ bcc 2f adds r1,#1 2: subs r2,r4 @ y-=x b 1b y64_x48: @ here x is 33..64 bits push {r4-r7,r14} @ save a copy of x lsrs r4,r3,#16 beq 1f b y64_x64 @ jump if x is 49..64 bits 1: push {r2-r3} @ save a copy of x @ here x is 33..48 bits movs r5,#0 @ xsh=0 lsrs r4,r3,#8 bne 1f lsls r3,#8 lsrs r6,r2,#24 orrs r3,r6 lsls r2,#8 @ if(x0<1U<<40) x0<<=8,xsh =8; adds r5,#8 1: lsrs r4,r3,#12 bne 1f lsls r3,#4 lsrs r6,r2,#28 orrs r3,r6 lsls r2,#4 @ if(x0<1U<<44) x0<<=4,xsh+=4; adds r5,#4 1: lsrs r4,r3,#14 bne 1f lsls r3,#2 lsrs r6,r2,#30 orrs r3,r6 lsls r2,#2 @ if(x0<1U<<46) x0<<=2,xsh+=2; adds r5,#2 1: lsrs r4,r3,#15 bne 1f adds r2,r2 adcs r3,r3 @ if(x0<1U<<47) x0<<=1,xsh+=1; adds r5,#1 1: @ now 2^47<=x0<2^48, 0<=xsh<16 (amount x is shifted in x0); number of quotient bits to be calculated qb=xsh+17 17<=qb<33 movs r4,r3 adds r7,r2,r2 adcs r4,r4 adds r4,#1 @ x1=(ui32)(x0>>31)+1; // 2^16>48)*r)>>16; lsls r7,r6,#13 mov r14,r7 @ save q<<13 uxth r7,r2 @ x0l muls r7,r6 subs r0,r7 bcs 1f subs r1,#1 1: subs r0,r7 bcs 1f subs r1,#1 1: uxth r7,r3 @ x0h muls r7,r6 subs r1,r7 subs r1,r7 lsrs r7,r2,#16 @ x0m muls r7,r6 lsls r6,r7,#17 lsrs r7,#15 subs r0,r6 sbcs r1,r7 @ y-=((ui64)q*x0)<<1; lsrs r6,r1,#3 @ y>>35 muls r6,r4 lsrs r6,#16 @ q=((ui32)(y>>35)*r)>>16; cmp r5,#12 blt last1 @ if(xsh<12) goto last1; add r14,r6 @ qu<<13+q lsrs r2,#12 lsls r7,r3,#20 orrs r2,r7 lsrs r3,#12 @ x0>>12 uxth r7,r2 @ x0l muls r7,r6 subs r0,r7 bcs 1f subs r1,#1 1: uxth r7,r3 @ x0h muls r7,r6 subs r1,r7 lsrs r7,r2,#16 @ x0m muls r7,r6 lsls r6,r7,#16 lsrs r7,#16 subs r0,r6 sbcs r1,r7 @ y-=((ui64)q*x0)>>12 lsrs r6,r0,#22 lsls r7,r1,#10 orrs r6,r7 @ y>>22 muls r6,r4 movs r7,#41 subs r7,r5 lsrs r6,r7 @ q=((ui32)(y>>22)*r)>>(16+25-xsh) subs r5,#12 mov r7,r14 lsls r7,r5 2: adds r7,r6 @ qu=(qu<<(xsh-12))+q pop {r4,r5} @ recall x @ here @ r0:r1 y @ r4:r5 x @ r6 q @ r7 qu uxth r2,r4 uxth r3,r5 muls r2,r6 @ xlo*q muls r3,r6 @ xhi*q subs r0,r2 sbcs r1,r3 lsrs r2,r4,#16 muls r2,r6 lsrs r3,r2,#16 lsls r2,#16 @ xm*q subs r0,r2 sbcs r1,r3 @ y-=(ui64)q*x 1: movs r2,r0 movs r3,r1 adds r7,#1 subs r0,r4 sbcs r1,r5 @ while(y>=x) y-=x,qu++; bhs 1b subs r0,r7,#1 @ correction to qu movs r1,#0 pop {r4-r7,r15} last1: @ r0:r1 y @ r2:r3 x0 @ r5 xsh @ r6 q movs r7,#12 subs r7,r5 lsrs r6,r7 @ q>>=12-xsh mov r7,r14 lsrs r7,#13 lsls r7,r5 adds r7,r7 @ qu<<(xsh+1) b 2b y64_x64: @ here x is 49..64 bits movs r4,#0 @ q=0 if x>>32==0xffffffff adds r5,r3,#1 beq 1f ldr r7,=SIO_BASE str r5,[r7,#SIO_DIV_UDIVISOR_OFFSET] str r1,[r7,#SIO_DIV_UDIVIDEND_OFFSET] wait_div 0 ldr r4,[r7,#SIO_DIV_QUOTIENT_OFFSET] @ q=(ui32)(y>>32)/((x>>32)+1) 1: uxth r5,r2 uxth r6,r3 muls r5,r4 muls r6,r4 subs r0,r5 sbcs r1,r6 lsrs r5,r2,#16 lsrs r6,r3,#16 muls r5,r4 muls r6,r4 lsls r6,#16 lsrs r7,r5,#16 orrs r6,r7 lsls r5,#16 subs r0,r5 sbcs r1,r6 @ y-=(ui64)q*x cmp r1,r3 @ while(y>=x) y-=x,q++ bhs 1f 3: movs r2,r0 movs r3,r1 movs r0,r4 movs r1,#0 pop {r4-r7,r15} 1: bne 2f cmp r0,r2 blo 3b 2: subs r0,r2 sbcs r1,r3 adds r4,#1 cmp r1,r3 blo 3b b 1b div_section divmod_s64s64_rem regular_func divmod_s64s64_rem push {r4, lr} bl divmod_s64s64 ldr r4, [sp, #8] stmia r4!, {r2,r3} pop {r4, pc} div_section divmod_u64u64_rem regular_func divmod_u64u64_rem push {r4, lr} bl divmod_u64u64 ldr r4, [sp, #8] stmia r4!, {r2,r3} pop {r4, pc} ================================================ FILE: pico-sdk/src/rp2_common/pico_double/CMakeLists.txt ================================================ if (NOT TARGET pico_double) # library to be depended on - we make this depend on particular implementations using per target generator expressions pico_add_library(pico_double) # no custom implementation; falls thru to compiler pico_add_library(pico_double_compiler) target_include_directories(pico_double_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) # add alias "default" which is just pico. add_library(pico_double_default INTERFACE) target_link_libraries(pico_double_default INTERFACE pico_double_pico) set(PICO_DEFAULT_DOUBLE_IMPL pico_double_default) target_link_libraries(pico_double INTERFACE $>,$,${PICO_DEFAULT_DOUBLE_IMPL}>) pico_add_library(pico_double_pico) target_sources(pico_double_pico INTERFACE ${CMAKE_CURRENT_LIST_DIR}/double_aeabi.S ${CMAKE_CURRENT_LIST_DIR}/double_init_rom.c ${CMAKE_CURRENT_LIST_DIR}/double_math.c ${CMAKE_CURRENT_LIST_DIR}/double_v1_rom_shim.S ) target_link_libraries(pico_double_pico INTERFACE pico_bootrom pico_double_headers hardware_divider) pico_add_library(pico_double_none) target_sources(pico_double_none INTERFACE ${CMAKE_CURRENT_LIST_DIR}/double_none.S ) target_link_libraries(pico_double_none INTERFACE pico_double_headers) target_compile_definitions(pico_double_none_headers INTERFACE PICO_PRINTF_SUPPORT_FLOAT=0 # printing floats/doubles won't work, so we can save space by removing it ) function(wrap_double_functions TARGET) pico_wrap_function(${TARGET} __aeabi_dadd) pico_wrap_function(${TARGET} __aeabi_ddiv) pico_wrap_function(${TARGET} __aeabi_dmul) pico_wrap_function(${TARGET} __aeabi_drsub) pico_wrap_function(${TARGET} __aeabi_dsub) pico_wrap_function(${TARGET} __aeabi_cdcmpeq) pico_wrap_function(${TARGET} __aeabi_cdrcmple) pico_wrap_function(${TARGET} __aeabi_cdcmple) pico_wrap_function(${TARGET} __aeabi_dcmpeq) pico_wrap_function(${TARGET} __aeabi_dcmplt) pico_wrap_function(${TARGET} __aeabi_dcmple) pico_wrap_function(${TARGET} __aeabi_dcmpge) pico_wrap_function(${TARGET} __aeabi_dcmpgt) pico_wrap_function(${TARGET} __aeabi_dcmpun) pico_wrap_function(${TARGET} __aeabi_i2d) pico_wrap_function(${TARGET} __aeabi_l2d) pico_wrap_function(${TARGET} __aeabi_ui2d) pico_wrap_function(${TARGET} __aeabi_ul2d) pico_wrap_function(${TARGET} __aeabi_d2iz) pico_wrap_function(${TARGET} __aeabi_d2lz) pico_wrap_function(${TARGET} __aeabi_d2uiz) pico_wrap_function(${TARGET} __aeabi_d2ulz) pico_wrap_function(${TARGET} __aeabi_d2f) pico_wrap_function(${TARGET} sqrt) pico_wrap_function(${TARGET} cos) pico_wrap_function(${TARGET} sin) pico_wrap_function(${TARGET} tan) pico_wrap_function(${TARGET} atan2) pico_wrap_function(${TARGET} exp) pico_wrap_function(${TARGET} log) pico_wrap_function(${TARGET} ldexp) pico_wrap_function(${TARGET} copysign) pico_wrap_function(${TARGET} trunc) pico_wrap_function(${TARGET} floor) pico_wrap_function(${TARGET} ceil) pico_wrap_function(${TARGET} round) pico_wrap_function(${TARGET} sincos) # gnu pico_wrap_function(${TARGET} asin) pico_wrap_function(${TARGET} acos) pico_wrap_function(${TARGET} atan) pico_wrap_function(${TARGET} sinh) pico_wrap_function(${TARGET} cosh) pico_wrap_function(${TARGET} tanh) pico_wrap_function(${TARGET} asinh) pico_wrap_function(${TARGET} acosh) pico_wrap_function(${TARGET} atanh) pico_wrap_function(${TARGET} exp2) pico_wrap_function(${TARGET} log2) pico_wrap_function(${TARGET} exp10) pico_wrap_function(${TARGET} log10) pico_wrap_function(${TARGET} pow) pico_wrap_function(${TARGET} powint) #gnu pico_wrap_function(${TARGET} hypot) pico_wrap_function(${TARGET} cbrt) pico_wrap_function(${TARGET} fmod) pico_wrap_function(${TARGET} drem) pico_wrap_function(${TARGET} remainder) pico_wrap_function(${TARGET} remquo) pico_wrap_function(${TARGET} expm1) pico_wrap_function(${TARGET} log1p) pico_wrap_function(${TARGET} fma) endfunction() wrap_double_functions(pico_double_pico) wrap_double_functions(pico_double_none) macro(pico_set_double_implementation TARGET IMPL) get_target_property(target_type ${TARGET} TYPE) if ("EXECUTABLE" STREQUAL "${target_type}") set_target_properties(${TARGET} PROPERTIES PICO_TARGET_DOUBLE_IMPL "pico_double_${IMPL}") else() message(FATAL_ERROR "double implementation must be set on executable not library") endif() endmacro() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_double/double_aeabi.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" #include "pico/bootrom/sf_table.h" #include "hardware/divider_helper.S" pico_default_asm_setup __pre_init __aeabi_double_init, 00020 .macro double_section name #if PICO_DOUBLE_IN_RAM .section RAM_SECTION_NAME(\name), "ax" #else .section SECTION_NAME(\name), "ax" #endif .endm .macro _double_wrapper_func x wrapper_func \x .endm .macro wrapper_func_d1 x _double_wrapper_func \x #if PICO_DOUBLE_PROPAGATE_NANS mov ip, lr bl __check_nan_d1 mov lr, ip #endif .endm .macro wrapper_func_d2 x _double_wrapper_func \x #if PICO_DOUBLE_PROPAGATE_NANS mov ip, lr bl __check_nan_d2 mov lr, ip #endif .endm .section .text #if PICO_DOUBLE_PROPAGATE_NANS .thumb_func __check_nan_d1: movs r3, #1 lsls r3, #21 lsls r2, r1, #1 adds r2, r3 bhi 1f bx lr 1: bx ip .thumb_func __check_nan_d2: push {r0, r2} movs r2, #1 lsls r2, #21 lsls r0, r1, #1 adds r0, r2 bhi 1f lsls r0, r3, #1 adds r0, r2 bhi 2f pop {r0, r2} bx lr 2: pop {r0, r2} mov r0, r2 mov r1, r3 bx ip 1: pop {r0, r2} bx ip #endif .macro table_tail_call SF_TABLE_OFFSET push {r3, r4} #if PICO_DOUBLE_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED #ifndef NDEBUG movs r3, #0 mov ip, r3 #endif #endif ldr r3, =sd_table ldr r3, [r3, #\SF_TABLE_OFFSET] str r3, [sp, #4] pop {r3, pc} .endm .macro shimmable_table_tail_call SF_TABLE_OFFSET shim push {r3, r4} ldr r3, =sd_table ldr r3, [r3, #\SF_TABLE_OFFSET] #if PICO_DOUBLE_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED mov ip, pc #endif str r3, [sp, #4] pop {r3, pc} #if PICO_DOUBLE_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED .byte \SF_TABLE_OFFSET, 0xdf .word \shim #endif .endm .macro double_wrapper_section func double_section WRAPPER_FUNC_NAME(\func) .endm double_section push_r8_r11 regular_func push_r8_r11 mov r4,r8 mov r5,r9 mov r6,r10 mov r7,r11 push {r4-r7} bx r14 double_section pop_r8_r11 regular_func pop_r8_r11 pop {r4-r7} mov r8,r4 mov r9,r5 mov r10,r6 mov r11,r7 bx r14 // note generally each function is in a separate section unless there is fall thru or branching between them // note fadd, fsub, fmul, fdiv are so tiny and just defer to rom so are lumped together so they can share constant pool // note functions are word aligned except where they are an odd number of linear instructions // double FUNC_NAME(__aeabi_dadd)(double, double) double-precision addition double_wrapper_section __aeabi_darithmetic // double FUNC_NAME(__aeabi_drsub)(double x, double y) double-precision reverse subtraction, y - x // frsub first because it is the only one that needs alignment .align 2 wrapper_func __aeabi_drsub eors r0, r1 eors r1, r0 eors r0, r1 // fall thru // double FUNC_NAME(__aeabi_dsub)(double x, double y) double-precision subtraction, x - y wrapper_func_d2 __aeabi_dsub #if PICO_DOUBLE_PROPAGATE_NANS // we want to return nan for inf-inf or -inf - -inf, but without too much upfront cost mov ip, r0 mov r0, r1 eors r0, r3 bmi 1f // different signs mov r0, ip push {r0-r3, lr} bl 2f b ddiv_dsub_nan_helper 1: mov r0, ip 2: #endif shimmable_table_tail_call SF_TABLE_FSUB dsub_shim wrapper_func_d2 __aeabi_dadd shimmable_table_tail_call SF_TABLE_FADD dadd_shim // double FUNC_NAME(__aeabi_ddiv)(double n, double d) double-precision division, n / d wrapper_func_d2 __aeabi_ddiv #if PICO_DOUBLE_PROPAGATE_NANS push {r0-r3, lr} bl 1f b ddiv_dsub_nan_helper 1: #endif #if !PICO_DIVIDER_DISABLE_INTERRUPTS // to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty mov ip, r2 ldr r2, =(SIO_BASE) ldr r2, [r2, #SIO_DIV_CSR_OFFSET] lsrs r2, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY bcs ddiv_save_state mov r2, ip #else // to avoid worrying about IRQs (or context switches), simply disable interrupts around call push {r4, lr} mrs r4, PRIMASK cpsid i bl ddiv_shim_call msr PRIMASK, r4 pop {r4, pc} #endif ddiv_shim_call: shimmable_table_tail_call SF_TABLE_FDIV ddiv_shim #if !PICO_DIVIDER_DISABLE_INTERRUPTS ddiv_save_state: ldr r2, =(SIO_BASE) save_div_state_and_lr mov r2, ip bl ddiv_shim_call ldr r2, =(SIO_BASE) restore_div_state_and_return #endif ddiv_dsub_nan_helper: #if PICO_DOUBLE_PROPAGATE_NANS // check for infinite op infinite (or rather check for infinite result with both // operands being infinite) lsls r2, r1, #1 asrs r2, r2, #21 adds r2, #1 beq 2f add sp, #16 pop {pc} 2: ldr r2, [sp, #4] ldr r3, [sp, #12] lsls r2, #1 asrs r2, r2, #21 lsls r3, #1 asrs r3, r3, #24 ands r2, r3 adds r2, #1 bne 3f // infinite to nan movs r2, #1 lsls r2, #19 orrs r1, r2 3: add sp, #16 pop {pc} #endif // double FUNC_NAME(__aeabi_dmul)(double, double) double-precision multiplication wrapper_func_d2 __aeabi_dmul #if PICO_DOUBLE_PROPAGATE_NANS push {r0-r3, lr} bl 1f // check for multiplication of infinite by zero (or rather check for infinite result with either // operand 0) lsls r3, r1, #1 asrs r3, r3, #21 adds r3, #1 beq 2f add sp, #16 pop {pc} 2: ldr r2, [sp, #4] ldr r3, [sp, #12] ands r2, r3 bne 3f // infinite to nan movs r2, #1 lsls r2, #19 orrs r1, r2 3: add sp, #16 pop {pc} 1: #endif shimmable_table_tail_call SF_TABLE_FMUL dmul_shim // void FUNC_NAME(__aeabi_cdrcmple)(double, double) reversed 3-way (<, =, ?>) compare [1], result in PSR ZC flags double_wrapper_section __aeabi_cdcmple wrapper_func __aeabi_cdrcmple push {r0-r7,r14} eors r0, r2 eors r2, r0 eors r0, r2 eors r1, r3 eors r3, r1 eors r1, r3 b __aeabi_dfcmple_guts // NOTE these share an implementation as we have no excepting NaNs. // void FUNC_NAME(__aeabi_cdcmple)(double, double) 3-way (<, =, ?>) compare [1], result in PSR ZC flags // void FUNC_NAME(__aeabi_cdcmpeq)(double, double) non-excepting equality comparison [1], result in PSR ZC flags @ compare r0:r1 against r2:r3, returning -1/0/1 for <, =, > @ also set flags accordingly .align 2 wrapper_func __aeabi_cdcmple wrapper_func __aeabi_cdcmpeq push {r0-r7,r14} __aeabi_dfcmple_guts: ldr r7,=0x7ff @ flush NaNs and denormals lsls r4,r1,#1 lsrs r4,#21 beq 1f cmp r4,r7 bne 2f lsls r4, r1, #12 bhi 7f 1: movs r0,#0 lsrs r1,#20 lsls r1,#20 2: lsls r4,r3,#1 lsrs r4,#21 beq 1f cmp r4,r7 bne 2f lsls r4, r3, #12 bhi 7f 1: movs r2,#0 lsrs r3,#20 lsls r3,#20 2: movs r6,#1 eors r3,r1 bmi 4f @ opposite signs? then can proceed on basis of sign of x eors r3,r1 @ restore r3 bpl 2f cmp r3,r1 bne 7f 1: cmp r2,r0 7: pop {r0-r7,r15} 2: cmp r1,r3 bne 7b 1: cmp r0,r2 pop {r0-r7,r15} 4: orrs r3,r1 @ make -0==+0 adds r3,r3 orrs r3,r0 orrs r3,r2 beq 7b mvns r1, r1 @ carry inverse of r1 sign adds r1, r1 pop {r0-r7,r15} // int FUNC_NAME(__aeabi_dcmpeq)(double, double) result (1, 0) denotes (=, ?<>) [2], use for C == and != double_wrapper_section __aeabi_dcmpeq .align 2 wrapper_func __aeabi_dcmpeq push {lr} bl __aeabi_cdcmpeq beq 1f movs r0, #0 pop {pc} 1: movs r0, #1 pop {pc} // int FUNC_NAME(__aeabi_dcmplt)(double, double) result (1, 0) denotes (<, ?>=) [2], use for C < double_wrapper_section __aeabi_dcmplt .align 2 wrapper_func __aeabi_dcmplt push {lr} bl __aeabi_cdcmple sbcs r0, r0 pop {pc} // int FUNC_NAME(__aeabi_dcmple)(double, double) result (1, 0) denotes (<=, ?>) [2], use for C <= double_wrapper_section __aeabi_dcmple .align 2 wrapper_func __aeabi_dcmple push {lr} bl __aeabi_cdcmple bls 1f movs r0, #0 pop {pc} 1: movs r0, #1 pop {pc} // int FUNC_NAME(__aeabi_dcmpge)(double, double) result (1, 0) denotes (>=, ?<) [2], use for C >= double_wrapper_section __aeabi_dcmpge .align 2 wrapper_func __aeabi_dcmpge push {lr} // because of NaNs it is better to reverse the args than the result bl __aeabi_cdrcmple bls 1f movs r0, #0 pop {pc} 1: movs r0, #1 pop {pc} // int FUNC_NAME(__aeabi_dcmpgt)(double, double) result (1, 0) denotes (>, ?<=) [2], use for C > double_wrapper_section __aeabi_dcmpgt wrapper_func __aeabi_dcmpgt push {lr} // because of NaNs it is better to reverse the args than the result bl __aeabi_cdrcmple sbcs r0, r0 pop {pc} // int FUNC_NAME(__aeabi_dcmpun)(double, double) result (1, 0) denotes (?, <=>) [2], use for C99 isunordered() double_wrapper_section __aeabi_dcmpun wrapper_func __aeabi_dcmpun movs r0, #1 lsls r0, #21 lsls r2, r1, #1 adds r2, r0 bhi 1f lsls r2, r3, #1 adds r2, r0 bhi 1f movs r0, #0 bx lr 1: movs r0, #1 bx lr movs r0, #0 bx lr // double FUNC_NAME(__aeabi_ui2d)(unsigned) unsigned to double (double precision) conversion double_wrapper_section __aeabi_ui2d shimmable_table_tail_call SF_TABLE_UINT2FLOAT uint2double_shim double_wrapper_section __aeabi_i2d wrapper_func __aeabi_ui2d movs r1, #0 cmp r0, #0 bne 2f 1: bx lr // double FUNC_NAME(__aeabi_i2d)(int) integer to double (double precision) conversion wrapper_func __aeabi_i2d asrs r1, r0, #31 eors r0, r1 subs r0, r1 beq 1b lsls r1, #31 2: push {r0, r1, r4, lr} ldr r3, =sf_clz_func ldr r3, [r3] blx r3 pop {r2, r3} adds r4, r0, #1 lsls r2, r4 lsls r0, r2, #20 lsrs r2, #12 ldr r1,=1055 subs r1, r4 lsls r1, #20 orrs r1, r3 orrs r1, r2 pop {r4, pc} // int FUNC_NAME(__aeabi_d2iz)(double) double (double precision) to integer C-style conversion [3] double_wrapper_section __aeabi_d2iz wrapper_func __aeabi_d2iz regular_func double2int_z push {r4, lr} lsls r4, r1, #1 lsrs r2, r4, #21 movs r3, #0x80 adds r2, r3 lsls r3, #3 subs r2, r3 lsls r3, #21 cmp r2, #126 ble 1f subs r2, #158 bge 2f asrs r4, r1, #31 lsls r1, #12 lsrs r1, #1 orrs r1, r3 negs r2, r2 lsrs r1, r2 lsls r4, #1 adds r4, #1 adds r2, #21 cmp r2, #32 bge 3f lsrs r0, r2 orrs r0, r1 muls r0, r4 pop {r4, pc} 1: movs r0, #0 pop {r4, pc} 3: mov r0, r1 muls r0, r4 pop {r4, pc} 2: // overflow lsrs r0, r1, #31 adds r0, r3 subs r0, #1 pop {r4, pc} double_section double2int regular_func double2int shimmable_table_tail_call SF_TABLE_FLOAT2INT double2int_shim // unsigned FUNC_NAME(__aeabi_d2uiz)(double) double (double precision) to unsigned C-style conversion [3] double_wrapper_section __aeabi_d2uiz wrapper_func __aeabi_d2uiz regular_func double2uint shimmable_table_tail_call SF_TABLE_FLOAT2UINT double2uint_shim double_section fix2double regular_func fix2double shimmable_table_tail_call SF_TABLE_FIX2FLOAT fix2double_shim double_section ufix2double regular_func ufix2double shimmable_table_tail_call SF_TABLE_UFIX2FLOAT ufix2double_shim double_section fix642double regular_func fix642double shimmable_table_tail_call SF_TABLE_FIX642FLOAT fix642double_shim double_section ufix2double regular_func ufix642double shimmable_table_tail_call SF_TABLE_UFIX642FLOAT ufix642double_shim // double FUNC_NAME(__aeabi_l2d)(long long) long long to double (double precision) conversion double_wrapper_section __aeabi_l2d wrapper_func __aeabi_l2d shimmable_table_tail_call SF_TABLE_INT642FLOAT int642double_shim // double FUNC_NAME(__aeabi_l2f)(long long) long long to double (double precision) conversion double_wrapper_section __aeabi_ul2d wrapper_func __aeabi_ul2d shimmable_table_tail_call SF_TABLE_UINT642FLOAT uint642double_shim // long long FUNC_NAME(__aeabi_d2lz)(double) double (double precision) to long long C-style conversion [3] double_wrapper_section __aeabi_d2lz wrapper_func __aeabi_d2lz regular_func double2int64_z cmn r1, r1 bcc double2int64 push {lr} lsls r1, #1 lsrs r1, #1 movs r2, #0 bl double2ufix64 cmp r1, #0 bmi 1f movs r2, #0 negs r0, r0 sbcs r2, r1 mov r1, r2 pop {pc} 1: movs r1, #128 lsls r1, #24 movs r0, #0 pop {pc} double_section double2int64 regular_func double2int64 shimmable_table_tail_call SF_TABLE_FLOAT2INT64 double2int64_shim // unsigned long long FUNC_NAME(__aeabi_d2ulz)(double) double to unsigned long long C-style conversion [3] double_wrapper_section __aeabi_d2ulz wrapper_func __aeabi_d2ulz shimmable_table_tail_call SF_TABLE_FLOAT2UINT64 double2uint64_shim double_section double2fix64 regular_func double2fix64 shimmable_table_tail_call SF_TABLE_FLOAT2FIX64 double2fix64_shim double_section double2ufix64 regular_func double2ufix64 shimmable_table_tail_call SF_TABLE_FLOAT2UFIX64 double2ufix64_shim double_section double2fix regular_func double2fix shimmable_table_tail_call SF_TABLE_FLOAT2FIX double2fix_shim double_section double2ufix regular_func double2ufix shimmable_table_tail_call SF_TABLE_FLOAT2UFIX double2ufix_shim double_wrapper_section __aeabi_d2f 1: #if PICO_DOUBLE_PROPAGATE_NANS // copy sign bit and 23 NAN id bits into sign bit and significant id bits, also set high id bit lsrs r0, #30 lsls r2, r1, #12 lsrs r2, #9 asrs r1, #22 lsls r1, #22 orrs r0, r1 orrs r0, r2 bx lr #endif wrapper_func __aeabi_d2f #if PICO_DOUBLE_PROPAGATE_NANS movs r3, #1 lsls r3, #21 lsls r2, r1, #1 adds r2, r3 bhi 1b #endif // note double->float in double table at same index as float->double in double table shimmable_table_tail_call SF_TABLE_FLOAT2DOUBLE double2float_shim double_wrapper_section srqt wrapper_func_d1 sqrt shimmable_table_tail_call SF_TABLE_FSQRT dsqrt_shim double_wrapper_section sincostan_remainder regular_func sincostan_remainder ldr r2, =0x54442D18 // 2 * M_PI ldr r3, =0x401921FB push {lr} // note remainder only uses the divider thru integer divider functions // which save and restore themselves bl remainder pop {pc} double_wrapper_section cos #don't use _d1 as we're doing a range check anyway and infinites/nans are bigger than 1024 wrapper_func cos // rom version only works for -1024 < angle < 1024 lsls r2, r1, #2 bcc 1f lsrs r2, #22 cmp r2, #9 bge 2f 1: shimmable_table_tail_call SF_TABLE_FCOS dcos_shim 2: #if PICO_DOUBLE_PROPAGATE_NANS lsls r2, r1, #1 asrs r2, #21 adds r2, #1 bne 3f // infinite to nan movs r2, #1 lsls r2, #19 orrs r1, r2 bx lr 3: #endif push {lr} bl sincostan_remainder pop {r2} mov lr, r2 b 1b double_wrapper_section sin #don't use _d1 as we're doing a range check anyway and infinites/nans are bigger than 1024 wrapper_func sin // rom version only works for -1024 < angle < 1024 lsls r2, r1, #2 bcc 1f lsrs r2, #22 cmp r2, #9 bge 2f 1: shimmable_table_tail_call SF_TABLE_FSIN dsin_shim 2: #if PICO_DOUBLE_PROPAGATE_NANS lsls r2, r1, #1 asrs r2, #21 adds r2, #1 bne 3f // infinite to nan movs r2, #1 lsls r2, #19 orrs r1, r2 bx lr 3: #endif push {lr} bl sincostan_remainder pop {r2} mov lr, r2 b 1b double_wrapper_section sincos // out of line remainder code for abs(angle)>=1024 2: #if PICO_DOUBLE_PROPAGATE_NANS lsls r2, r1, #1 asrs r2, #21 adds r2, #1 bne 3f // infinite to nan movs r2, #1 lsls r2, #19 orrs r1, r2 pop {r4-r5} stmia r4!, {r0, r1} stmia r5!, {r0, r1} pop {r4, r5, pc} 3: #endif push {lr} bl sincostan_remainder pop {r2} mov lr, r2 b 1f // continue with sincos wrapper_func sincos push {r2-r5, lr} // rom version only works for -1024 < angle < 1024 lsls r2, r1, #2 bcc 1f lsrs r2, #22 cmp r2, #9 bge 2b 1: bl 2f // call the shim pop {r4-r5} stmia r4!, {r0, r1} stmia r5!, {r2, r3} pop {r4, r5, pc} 2: shimmable_table_tail_call SF_TABLE_V3_FSINCOS sincos_shim_bootstrap .thumb_func sincos_shim_bootstrap: push {r2, r3, r4} movs r3, #0x13 ldrb r3, [r3] #if PICO_DOUBLE_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED cmp r3, #1 bne 1f ldr r3, =dsincos_shim b 2f #endif 1: ldr r3, =dsincos_shim_v2 2: ldr r2, =sd_table str r3, [r2, #SF_TABLE_V3_FSINCOS] str r3, [sp, #8] pop {r2, r3, pc} .thumb_func dsincos_shim_v2: push {r4-r7,r14} bl push_r8_r11 bl v2_rom_dsincos_internal mov r12,r0 @ save ε bl v2_rom_dcos_finish push {r0,r1} mov r0,r12 bl v2_rom_dsin_finish pop {r2,r3} bl pop_r8_r11 pop {r4-r7,r15} .thumb_func v2_rom_dsincos_internal: push {r0, lr} ldr r0, =0x3855 str r0, [sp, #4] pop {r0, pc} .thumb_func v2_rom_dcos_finish: push {r0, r1} ldr r0, =0x389d str r0, [sp, #4] pop {r0, pc} .thumb_func v2_rom_dsin_finish: push {r0, r1} ldr r0, =0x38d9 str r0, [sp, #4] pop {r0, pc} double_wrapper_section tan #don't use _d1 as we're doing a range check anyway and infinites/nans are bigger than 1024 wrapper_func tan // rom version only works for -1024 < angle < 1024 lsls r2, r1, #2 bcc dtan_in_range lsrs r2, #22 cmp r2, #9 bge dtan_angle_out_of_range dtan_in_range: #if !PICO_DIVIDER_DISABLE_INTERRUPTS // to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty mov ip, r2 ldr r2, =(SIO_BASE) ldr r2, [r2, #SIO_DIV_CSR_OFFSET] lsrs r2, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY bcs dtan_save_state mov r2, ip #else // to avoid worrying about IRQs (or context switches), simply disable interrupts around call push {r4, lr} mrs r4, PRIMASK cpsid i bl dtan_shim_call msr PRIMASK, r4 pop {r4, pc} #endif dtan_shim_call: shimmable_table_tail_call SF_TABLE_FTAN dtan_shim #if !PICO_DIVIDER_DISABLE_INTERRUPTS dtan_save_state: ldr r2, =(SIO_BASE) save_div_state_and_lr mov r2, ip bl dtan_shim_call ldr r2, =(SIO_BASE) restore_div_state_and_return #endif dtan_angle_out_of_range: #if PICO_DOUBLE_PROPAGATE_NANS lsls r2, r1, #1 asrs r2, #21 adds r2, #1 bne 3f // infinite to nan movs r2, #1 lsls r2, #19 orrs r1, r2 bx lr 3: #endif push {lr} bl sincostan_remainder pop {r2} mov lr, r2 b dtan_in_range double_wrapper_section atan2 wrapper_func_d2 atan2 shimmable_table_tail_call SF_TABLE_FATAN2 datan2_shim double_wrapper_section exp wrapper_func_d1 exp shimmable_table_tail_call SF_TABLE_FEXP dexp_shim double_wrapper_section log wrapper_func_d1 log shimmable_table_tail_call SF_TABLE_FLN dln_shim ================================================ FILE: pico-sdk/src/rp2_common/pico_double/double_init_rom.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "pico/bootrom.h" #include "pico/bootrom/sf_table.h" // NOTE THIS FUNCTION TABLE IS NOT PUBLIC OR NECESSARILY COMPLETE... // IT IS ***NOT*** SAFE TO CALL THESE FUNCTION POINTERS FROM ARBITRARY CODE uint32_t sd_table[SF_TABLE_V2_SIZE / 2]; #if !(PICO_DOUBLE_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED) static __attribute__((noreturn)) void missing_double_func_shim(void) { panic("missing double function"); } #endif extern void double_table_shim_on_use_helper(void); void __attribute__((weak)) *sf_clz_func; void __aeabi_double_init(void) { int rom_version = rp2040_rom_version(); #if PICO_DOUBLE_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED if (rom_version == 1) { // this is a little tricky.. we only want to pull in a shim if the corresponding function // is called. to that end we include a SVC instruction with the table offset as the call number // followed by the shim function pointer inside the actual wrapper function. that way if the wrapper // function is garbage collected, so is the shim function. // // double_table_shim_on_use_helper expects this SVC instruction in the calling code soon after the address // pointed to by IP and patches the double_table entry with the real shim the first time the function is called. for(uint i=0; i= 2) { void *rom_table = rom_data_lookup(rom_table_code('S', 'D')); assert(*((uint8_t *)rom_data_lookup(rom_table_code('S', 'F'))-2) * 4 >= SF_TABLE_V2_SIZE); memcpy(&sd_table, rom_table, SF_TABLE_V2_SIZE); if (rom_version == 2) { #ifndef NDEBUG if (*(uint16_t *)0x3854 != 0xb500 || // this is dsincos(_internal) *(uint16_t *)0x38d8 != 0x4649 || // this is dsin_finish *(uint16_t *)0x389c != 0x4659 // this is dcos_finish ) { panic(NULL); } #endif } } if (rom_version < 3) { // we use the unused entry for SINCOS sd_table[SF_TABLE_V3_FSINCOS / 4] = (uintptr_t) double_table_shim_on_use_helper; } sf_clz_func = rom_func_lookup(ROM_FUNC_CLZ32); } ================================================ FILE: pico-sdk/src/rp2_common/pico_double/double_math.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "pico/double.h" // opened a separate issue https://github.com/raspberrypi/pico-sdk/issues/166 to deal with these warnings if at all GCC_Pragma("GCC diagnostic push") GCC_Pragma("GCC diagnostic ignored \"-Wconversion\"") GCC_Pragma("GCC diagnostic ignored \"-Wsign-conversion\"") typedef uint64_t ui64; typedef uint32_t ui32; typedef int64_t i64; #define PINF ( HUGE_VAL) #define MINF (-HUGE_VAL) #define PZERO (+0.0) #define MZERO (-0.0) #define PI 3.14159265358979323846 #define LOG2 0.69314718055994530941 // Unfortunately in double precision ln(10) is very close to half-way between to representable numbers #define LOG10 2.30258509299404568401 #define LOG2E 1.44269504088896340737 #define LOG10E 0.43429448190325182765 #define ONETHIRD 0.33333333333333333333 #define PIf 3.14159265358979323846f #define LOG2f 0.69314718055994530941f #define LOG2Ef 1.44269504088896340737f #define LOG10Ef 0.43429448190325182765f #define ONETHIRDf 0.33333333333333333333f #define DUNPACK(x,e,m) e=((x)>>52)&0x7ff,m=((x)&0x000fffffffffffffULL)|0x0010000000000000ULL #define DUNPACKS(x,s,e,m) s=((x)>>63),DUNPACK((x),(e),(m)) typedef union { double d; ui64 ix; } double_ui64; static inline double ui642double(ui64 ix) { double_ui64 tmp; tmp.ix = ix; return tmp.d; } static inline ui64 double2ui64(double d) { double_ui64 tmp; tmp.d = d; return tmp.ix; } #if PICO_DOUBLE_PROPAGATE_NANS static inline bool disnan(double x) { ui64 ix= double2ui64(x); // checks the top bit of the low 32 bit of the NAN, but it I think that is ok return ((uint32_t)(ix >> 31)) > 0xffe00000u; } #define check_nan_d1(x) if (disnan((x))) return (x) #define check_nan_d2(x,y) if (disnan((x))) return (x); else if (disnan((y))) return (y); #else #define check_nan_d1(x) ((void)0) #define check_nan_d2(x,y) ((void)0) #endif static inline int dgetsignexp(double x) { ui64 ix=double2ui64(x); return (ix>>52)&0xfff; } static inline int dgetexp(double x) { ui64 ix=double2ui64(x); return (ix>>52)&0x7ff; } static inline double dldexp(double x,int de) { ui64 ix=double2ui64(x),iy; int e; e=dgetexp(x); if(e==0||e==0x7ff) return x; e+=de; if(e<=0) iy=ix&0x8000000000000000ULL; // signed zero for underflow else if(e>=0x7ff) iy=(ix&0x8000000000000000ULL)|0x7ff0000000000000ULL; // signed infinity on overflow else iy=ix+((ui64)de<<52); return ui642double(iy); } double WRAPPER_FUNC(ldexp)(double x, int de) { check_nan_d1(x); return dldexp(x, de); } static inline double dcopysign(double x,double y) { ui64 ix=double2ui64(x),iy=double2ui64(y); ix=((ix&0x7fffffffffffffffULL)|(iy&0x8000000000000000ULL)); return ui642double(ix); } double WRAPPER_FUNC(copysign)(double x, double y) { check_nan_d2(x,y); return dcopysign(x, y); } static inline int diszero(double x) { return dgetexp (x)==0; } //static inline int dispzero(double x) { return dgetsignexp(x)==0; } //static inline int dismzero(double x) { return dgetsignexp(x)==0x800; } static inline int disinf(double x) { return dgetexp (x)==0x7ff; } static inline int dispinf(double x) { return dgetsignexp(x)==0x7ff; } static inline int disminf(double x) { return dgetsignexp(x)==0xfff; } static inline int disint(double x) { ui64 ix=double2ui64(x),m; int e=dgetexp(x); if(e==0) return 1; // 0 is an integer e-=0x3ff; // remove exponent bias if(e<0) return 0; // |x|<1 e=52-e; // bit position in mantissa with significance 1 if(e<=0) return 1; // |x| large, so must be an integer m=(1ULL<>e)&1; } static inline int disstrictneg(double x) { ui64 ix=double2ui64(x); if(diszero(x)) return 0; return ix>>63; } static inline int disneg(double x) { ui64 ix=double2ui64(x); return ix>>63; } static inline double dneg(double x) { ui64 ix=double2ui64(x); ix^=0x8000000000000000ULL; return ui642double(ix); } static inline int dispo2(double x) { ui64 ix=double2ui64(x); if(diszero(x)) return 0; if(disinf(x)) return 0; ix&=0x000fffffffffffffULL; return ix==0; } static inline double dnan_or(double x) { #if PICO_DOUBLE_PROPAGATE_NANS return NAN; #else return x; #endif } double WRAPPER_FUNC(trunc)(double x) { check_nan_d1(x); ui64 ix=double2ui64(x),m; int e=dgetexp(x); e-=0x3ff; // remove exponent bias if(e<0) { // |x|<1 ix&=0x8000000000000000ULL; return ui642double(ix); } e=52-e; // bit position in mantissa with significance 1 if(e<=0) return x; // |x| large, so must be an integer m=(1ULL<=5+0x3ff) { // |x|>=32? if(!disneg(x)) return 1; // 1 << exp 2x; avoid generating infinities later else return -1; // 1 >> exp 2x } u=exp(dldexp(x,1)); return (u-1)/(u+1); } double WRAPPER_FUNC(asinh)(double x) { check_nan_d1(x); int e; e=dgetexp(x); if(e>=32+0x3ff) { // |x|>=2^32? if(!disneg(x)) return log( x )+LOG2; // 1/x^2 << 1 else return dneg(log(dneg(x))+LOG2); // 1/x^2 << 1 } if(x>0) return log(sqrt(x*x+1)+x); else return dneg(log(sqrt(x*x+1)-x)); } double WRAPPER_FUNC(acosh)(double x) { check_nan_d1(x); int e; if(disneg(x)) x=dneg(x); e=dgetexp(x); if(e>=32+0x3ff) return log(x)+LOG2; // |x|>=2^32? return log(sqrt((x-1)*(x+1))+x); } double WRAPPER_FUNC(atanh)(double x) { check_nan_d1(x); return dldexp(log((1+x)/(1-x)),-1); } double WRAPPER_FUNC(exp2)(double x) { check_nan_d1(x); int e; // extra check for disminf as this catches -Nan, and x<=-4096 doesn't. if (disminf(x) || x<=-4096) return 0; // easily underflows else if (x>=4096) return PINF; // easily overflows e=(int)round(x); x-=e; return dldexp(exp(x*LOG2),e); } double WRAPPER_FUNC(log2)(double x) { check_nan_d1(x); return log(x)*LOG2E; } double WRAPPER_FUNC(exp10)(double x) { check_nan_d1(x); return pow(10,x); } double WRAPPER_FUNC(log10)(double x) { check_nan_d1(x); return log(x)*LOG10E; } // todo these are marked as lofi double WRAPPER_FUNC(expm1(double x) { check_nan_d1(x); return exp)(x)-1; } double WRAPPER_FUNC(log1p(double x) { check_nan_d1(x); return log)(1+x); } double WRAPPER_FUNC(fma)(double x,double y,double z) { check_nan_d1(x); return x*y+z; } // general power, x>0, finite static double dpow_1(double x,double y) { int a,b,c; double t,rt,u,v,v0,v1,w,ry; a=dgetexp(x)-0x3ff; u=log2(dldexp(x,-a)); // now log_2 x = a+u if(u>0.5) u-=1,a++; // |u|<=~0.5 if(a==0) return exp2(u*y); // here |log_2 x| >~0.5 if(y>= 4096) { // then easily over/underflows if(a<0) return 0; return PINF; } if(y<=-4096) { // then easily over/underflows if(a<0) return PINF; return 0; } ry=round(y); v=y-ry; v0=dldexp(round(ldexp(v,26)),-26); v1=v-v0; b=(int)ry; // guaranteed to fit in an int; y=b+v0+v1 // now the result is exp2( (a+u) * (b+v0+v1) ) c=a*b; // integer t=a*v0; rt=round(t); c+=(int)rt; w=t-rt; t=a*v1; w+=t; t=u*b; rt=round(t); c+=(int)rt; w+=t-rt; w+=u*v; return dldexp(exp2(w),c); } static double dpow_int2(double x,int y) { double u; if(y==1) return x; u=dpow_int2(x,y/2); u*=u; if(y&1) u*=x; return u; } // for the case where x not zero or infinity, y small and not zero static inline double dpowint_1(double x,int y) { if(y<0) x=1/x,y=-y; return dpow_int2(x,y); } // for the case where x not zero or infinity static double dpowint_0(double x,int y) { int e; if(disneg(x)) { if(disoddint(y)) return dneg(dpowint_0(dneg(x),y)); else return dpowint_0(dneg(x),y); } if(dispo2(x)) { e=dgetexp(x)-0x3ff; if(y>=2048) y= 2047; // avoid overflow if(y<-2048) y=-2048; y*=e; return dldexp(1,y); } if(y==0) return 1; if(y>=-32&&y<=32) return dpowint_1(x,y); return dpow_1(x,y); } double WRAPPER_FUNC(powint)(double x,int y) { GCC_Like_Pragma("GCC diagnostic push") GCC_Like_Pragma("GCC diagnostic ignored \"-Wfloat-equal\"") if(x==1.0||y==0) return 1; GCC_Like_Pragma("GCC diagnostic pop") check_nan_d1(x); if(diszero(x)) { if(y>0) { if(y&1) return x; else return 0; } if((y&1)) return dcopysign(PINF,x); return PINF; } if(dispinf(x)) { if(y<0) return 0; else return PINF; } if(disminf(x)) { if(y>0) { if((y&1)) return MINF; else return PINF; } if((y&1)) return MZERO; else return PZERO; } return dpowint_0(x,y); } // for the case where y is guaranteed a finite integer, x not zero or infinity static double dpow_0(double x,double y) { int e,p; if(disneg(x)) { if(disoddint(y)) return dneg(dpow_0(dneg(x),y)); else return dpow_0(dneg(x),y); } p=(int)y; if(dispo2(x)) { e=dgetexp(x)-0x3ff; if(p>=2048) p= 2047; // avoid overflow if(p<-2048) p=-2048; p*=e; return dldexp(1,p); } if(p==0) return 1; if(p>=-32&&p<=32) return dpowint_1(x,p); return dpow_1(x,y); } double WRAPPER_FUNC(pow)(double x,double y) { GCC_Like_Pragma("GCC diagnostic push") GCC_Like_Pragma("GCC diagnostic ignored \"-Wfloat-equal\"") if(x==1.0||diszero(y)) return 1; check_nan_d2(x, y); if(x==-1.0&&disinf(y)) return 1; GCC_Like_Pragma("GCC diagnostic pop") if(diszero(x)) { if(!disneg(y)) { if(disoddint(y)) return x; else return 0; } if(disoddint(y)) return dcopysign(PINF,x); return PINF; } if(dispinf(x)) { if(disneg(y)) return 0; else return PINF; } if(disminf(x)) { if(!disneg(y)) { if(disoddint(y)) return MINF; else return PINF; } if(disoddint(y)) return MZERO; else return PZERO; } if(dispinf(y)) { if(dgetexp(x)<0x3ff) return PZERO; else return PINF; } if(disminf(y)) { if(dgetexp(x)<0x3ff) return PINF; else return PZERO; } if(disint(y)) return dpow_0(x,y); if(disneg(x)) return PINF; return dpow_1(x,y); } double WRAPPER_FUNC(hypot)(double x,double y) { check_nan_d2(x, y); int ex,ey; ex=dgetexp(x); ey=dgetexp(y); if(ex>=0x3ff+400||ey>=0x3ff+400) { // overflow, or nearly so x=dldexp(x,-600),y=dldexp(y,-600); return dldexp(sqrt(x*x+y*y), 600); } else if(ex<=0x3ff-400&&ey<=0x3ff-400) { // underflow, or nearly so x=dldexp(x, 600),y=dldexp(y, 600); return dldexp(sqrt(x*x+y*y),-600); } return sqrt(x*x+y*y); } double WRAPPER_FUNC(cbrt)(double x) { check_nan_d1(x); int e; if(disneg(x)) return dneg(cbrt(dneg(x))); if(diszero(x)) return dcopysign(PZERO,x); e=dgetexp(x)-0x3ff; e=(e*0x5555+0x8000)>>16; // ~e/3, rounded x=dldexp(x,-e*3); x=exp(log(x)*ONETHIRD); return dldexp(x,e); } // reduces mx*2^e modulo my, returning bottom bits of quotient at *pquo // 2^52<=|mx|,my<2^53, e>=0; 0<=result0) { r=0xffffffffU/(ui32)(my>>36); // reciprocal estimate Q16 } while(e>0) { s=e; if(s>12) s=12; // gain up to 12 bits on each iteration q=(mx>>38)*r; // Q30 q=((q>>(29-s))+1)>>1; // Q(s), rounded mx=(mx<=my) mx-=my,quo++; // when e==0 mx can be nearly as big as 2my if(mx>=my) mx-=my,quo++; if(mx<0) mx+=my,quo--; if(mx<0) mx+=my,quo--; if(pquo) *pquo=quo; return mx; } double WRAPPER_FUNC(fmod)(double x,double y) { check_nan_d2(x, y); ui64 ix=double2ui64(x),iy=double2ui64(y); int sx,ex,ey; i64 mx,my; DUNPACKS(ix,sx,ex,mx); DUNPACK(iy,ey,my); if(ex==0x7ff) return dnan_or(PINF); if(ey==0) return PINF; if(ex==0) { if(!disneg(x)) return PZERO; return MZERO; } if(ex|y|/2 mx-=my+my; ey--; q=1; } else { // x<-|y|/2 mx=my+my-mx; ey--; q=-1; } } else { if(sx) mx=-mx; mx=drem_0(mx,my,ex-ey,&q); if(mx+mx>my || (mx+mx==my&&(q&1)) ) { // |x|>|y|/2, or equality and an odd quotient? mx-=my; q++; } } if(sy) q=-q; if(quo) *quo=q; return fix642double(mx,0x3ff-ey+52); } double WRAPPER_FUNC(drem)(double x,double y) { check_nan_d2(x, y); return remquo(x,y,0); } double WRAPPER_FUNC(remainder)(double x,double y) { check_nan_d2(x, y); return remquo(x,y,0); } GCC_Pragma("GCC diagnostic pop") // conversion ================================================ FILE: pico-sdk/src/rp2_common/pico_double/double_none.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" #include "pico/bootrom/sf_table.h" pico_default_asm_setup wrapper_func __aeabi_dadd wrapper_func __aeabi_ddiv wrapper_func __aeabi_dmul wrapper_func __aeabi_drsub wrapper_func __aeabi_dsub wrapper_func __aeabi_cdcmpeq wrapper_func __aeabi_cdrcmple wrapper_func __aeabi_cdcmple wrapper_func __aeabi_dcmpeq wrapper_func __aeabi_dcmplt wrapper_func __aeabi_dcmple wrapper_func __aeabi_dcmpge wrapper_func __aeabi_dcmpgt wrapper_func __aeabi_dcmpun wrapper_func __aeabi_i2d wrapper_func __aeabi_l2d wrapper_func __aeabi_ui2d wrapper_func __aeabi_ul2d wrapper_func __aeabi_d2iz wrapper_func __aeabi_d2lz wrapper_func __aeabi_d2uiz wrapper_func __aeabi_d2ulz wrapper_func __aeabi_d2f wrapper_func sqrt wrapper_func cos wrapper_func sin wrapper_func tan wrapper_func atan2 wrapper_func exp wrapper_func log wrapper_func ldexp wrapper_func copysign wrapper_func trunc wrapper_func floor wrapper_func ceil wrapper_func round wrapper_func sincos wrapper_func asin wrapper_func acos wrapper_func atan wrapper_func sinh wrapper_func cosh wrapper_func tanh wrapper_func asinh wrapper_func acosh wrapper_func atanh wrapper_func exp2 wrapper_func log2 wrapper_func exp10 wrapper_func log10 wrapper_func pow wrapper_func powint wrapper_func hypot wrapper_func cbrt wrapper_func fmod wrapper_func drem wrapper_func remainder wrapper_func remquo wrapper_func expm1 wrapper_func log1p wrapper_func fma push {lr} // keep stack trace sane ldr r0, =str bl panic str: .asciz "double support is disabled" ================================================ FILE: pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.S ================================================ /** * Copyright (c) 2020 Mark Owen https://www.quinapalus.com . * * Raspberry Pi (Trading) Ltd (Licensor) hereby grants to you a non-exclusive license to use the software solely on a * Raspberry Pi Pico device. No other use is permitted under the terms of this license. * * This software is also available from the copyright owner under GPLv2 licence. * * THIS SOFTWARE IS PROVIDED BY THE LICENSOR AND COPYRIGHT OWNER "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE LICENSOR OR COPYRIGHT OWNER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "pico/asm_helper.S" pico_default_asm_setup .macro double_section name // todo separate flag for shims? #if PICO_DOUBLE_IN_RAM .section RAM_SECTION_NAME(\name), "ax" #else .section SECTION_NAME(\name), "ax" #endif .endm double_section double_table_shim_on_use_helper regular_func double_table_shim_on_use_helper push {r0-r2, lr} mov r0, ip #ifndef NDEBUG // sanity check to make sure we weren't called by non (shimmable_) table_tail_call macro cmp r0, #0 bne 1f bkpt #0 #endif 1: ldrh r1, [r0] lsrs r2, r1, #8 adds r0, #2 cmp r2, #0xdf bne 1b uxtb r1, r1 // r1 holds table offset lsrs r2, r0, #2 bcc 1f // unaligned ldrh r2, [r0, #0] ldrh r0, [r0, #2] lsls r0, #16 orrs r0, r2 b 2f 1: ldr r0, [r0] 2: ldr r2, =sd_table str r0, [r2, r1] str r0, [sp, #12] pop {r0-r2, pc} #if PICO_DOUBLE_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED // Note that the V1 ROM has no double support, so this is basically the identical // library, and shim inter-function calls do not bother to redirect back thru the // wrapper functions .equ use_hw_div,1 .equ IOPORT ,0xd0000000 .equ DIV_UDIVIDEND,0x00000060 .equ DIV_UDIVISOR ,0x00000064 .equ DIV_QUOTIENT ,0x00000070 .equ DIV_CSR ,0x00000078 @ Notation: @ rx:ry means the concatenation of rx and ry with rx having the less significant bits .equ debug,0 .macro mdump k .if debug push {r0-r3} push {r14} push {r0-r3} bl osp movs r0,#\k bl o1ch pop {r0-r3} bl dump bl osp bl osp ldr r0,[r13] bl o8hex @ r14 bl onl pop {r0} mov r14,r0 pop {r0-r3} .endif .endm @ IEEE double in ra:rb -> @ mantissa in ra:rb 12Q52 (53 significant bits) with implied 1 set @ exponent in re @ sign in rs @ trashes rt .macro mdunpack ra,rb,re,rs,rt lsrs \re,\rb,#20 @ extract sign and exponent subs \rs,\re,#1 lsls \rs,#20 subs \rb,\rs @ clear sign and exponent in mantissa; insert implied 1 lsrs \rs,\re,#11 @ sign lsls \re,#21 lsrs \re,#21 @ exponent beq l\@_1 @ zero exponent? adds \rt,\re,#1 lsrs \rt,#11 beq l\@_2 @ exponent != 0x7ff? then done l\@_1: movs \ra,#0 movs \rb,#1 lsls \rb,#20 subs \re,#128 lsls \re,#12 l\@_2: .endm @ IEEE double in ra:rb -> @ signed mantissa in ra:rb 12Q52 (53 significant bits) with implied 1 @ exponent in re @ trashes rt0 and rt1 @ +zero, +denormal -> exponent=-0x80000 @ -zero, -denormal -> exponent=-0x80000 @ +Inf, +NaN -> exponent=+0x77f000 @ -Inf, -NaN -> exponent=+0x77e000 .macro mdunpacks ra,rb,re,rt0,rt1 lsrs \re,\rb,#20 @ extract sign and exponent lsrs \rt1,\rb,#31 @ sign only subs \rt0,\re,#1 lsls \rt0,#20 subs \rb,\rt0 @ clear sign and exponent in mantissa; insert implied 1 lsls \re,#21 bcc l\@_1 @ skip on positive mvns \rb,\rb @ negate mantissa negs \ra,\ra bcc l\@_1 adds \rb,#1 l\@_1: lsrs \re,#21 beq l\@_2 @ zero exponent? adds \rt0,\re,#1 lsrs \rt0,#11 beq l\@_3 @ exponent != 0x7ff? then done subs \re,\rt1 l\@_2: movs \ra,#0 lsls \rt1,#1 @ +ve: 0 -ve: 2 adds \rb,\rt1,#1 @ +ve: 1 -ve: 3 lsls \rb,#30 @ create +/-1 mantissa asrs \rb,#10 subs \re,#128 lsls \re,#12 l\@_3: .endm double_section WRAPPER_FUNC_NAME(__aeabi_dsub) # frsub first because it is the only one that needs alignment regular_func drsub_shim push {r0-r3} pop {r0-r1} pop {r2-r3} // fall thru regular_func dsub_shim push {r4-r7,r14} movs r4,#1 lsls r4,#31 eors r3,r4 @ flip sign on second argument b da_entry @ continue in dadd .align 2 double_section dadd_shim regular_func dadd_shim push {r4-r7,r14} da_entry: mdunpacks r0,r1,r4,r6,r7 mdunpacks r2,r3,r5,r6,r7 subs r7,r5,r4 @ ye-xe subs r6,r4,r5 @ xe-ye bmi da_ygtx @ here xe>=ye: need to shift y down r6 places mov r12,r4 @ save exponent cmp r6,#32 bge da_xrgty @ xe rather greater than ye? adds r7,#32 movs r4,r2 lsls r4,r4,r7 @ rounding bit + sticky bits da_xgty0: movs r5,r3 lsls r5,r5,r7 lsrs r2,r6 asrs r3,r6 orrs r2,r5 da_add: adds r0,r2 adcs r1,r3 da_pack: @ here unnormalised signed result (possibly 0) is in r0:r1 with exponent r12, rounding + sticky bits in r4 @ Note that if a large normalisation shift is required then the arguments were close in magnitude and so we @ cannot have not gone via the xrgty/yrgtx paths. There will therefore always be enough high bits in r4 @ to provide a correct continuation of the exact result. @ now pack result back up lsrs r3,r1,#31 @ get sign bit beq 1f @ skip on positive mvns r1,r1 @ negate mantissa mvns r0,r0 movs r2,#0 negs r4,r4 adcs r0,r2 adcs r1,r2 1: mov r2,r12 @ get exponent lsrs r5,r1,#21 bne da_0 @ shift down required? lsrs r5,r1,#20 bne da_1 @ normalised? cmp r0,#0 beq da_5 @ could mantissa be zero? da_2: adds r4,r4 adcs r0,r0 adcs r1,r1 subs r2,#1 @ adjust exponent lsrs r5,r1,#20 beq da_2 da_1: lsls r4,#1 @ check rounding bit bcc da_3 da_4: adds r0,#1 @ round up bcc 2f adds r1,#1 2: cmp r4,#0 @ sticky bits zero? bne da_3 lsrs r0,#1 @ round to even lsls r0,#1 da_3: subs r2,#1 bmi da_6 adds r4,r2,#2 @ check if exponent is overflowing lsrs r4,#11 bne da_7 lsls r2,#20 @ pack exponent and sign add r1,r2 lsls r3,#31 add r1,r3 pop {r4-r7,r15} da_7: @ here exponent overflow: return signed infinity lsls r1,r3,#31 ldr r3,=0x7ff00000 orrs r1,r3 b 1f da_6: @ here exponent underflow: return signed zero lsls r1,r3,#31 1: movs r0,#0 pop {r4-r7,r15} da_5: @ here mantissa could be zero cmp r1,#0 bne da_2 cmp r4,#0 bne da_2 @ inputs must have been of identical magnitude and opposite sign, so return +0 pop {r4-r7,r15} da_0: @ here a shift down by one place is required for normalisation adds r2,#1 @ adjust exponent lsls r6,r0,#31 @ save rounding bit lsrs r0,#1 lsls r5,r1,#31 orrs r0,r5 lsrs r1,#1 cmp r6,#0 beq da_3 b da_4 da_xrgty: @ xe>ye and shift>=32 places cmp r6,#60 bge da_xmgty @ xe much greater than ye? subs r6,#32 adds r7,#64 movs r4,r2 lsls r4,r4,r7 @ these would be shifted off the bottom of the sticky bits beq 1f movs r4,#1 1: lsrs r2,r2,r6 orrs r4,r2 movs r2,r3 lsls r3,r3,r7 orrs r4,r3 asrs r3,r2,#31 @ propagate sign bit b da_xgty0 da_ygtx: @ here ye>xe: need to shift x down r7 places mov r12,r5 @ save exponent cmp r7,#32 bge da_yrgtx @ ye rather greater than xe? adds r6,#32 movs r4,r0 lsls r4,r4,r6 @ rounding bit + sticky bits da_ygtx0: movs r5,r1 lsls r5,r5,r6 lsrs r0,r7 asrs r1,r7 orrs r0,r5 b da_add da_yrgtx: cmp r7,#60 bge da_ymgtx @ ye much greater than xe? subs r7,#32 adds r6,#64 movs r4,r0 lsls r4,r4,r6 @ these would be shifted off the bottom of the sticky bits beq 1f movs r4,#1 1: lsrs r0,r0,r7 orrs r4,r0 movs r0,r1 lsls r1,r1,r6 orrs r4,r1 asrs r1,r0,#31 @ propagate sign bit b da_ygtx0 da_ymgtx: @ result is just y movs r0,r2 movs r1,r3 da_xmgty: @ result is just x movs r4,#0 @ clear sticky bits b da_pack .ltorg @ equivalent of UMULL @ needs five temporary registers @ can have rt3==rx, in which case rx trashed @ can have rt4==ry, in which case ry trashed @ can have rzl==rx @ can have rzh==ry @ can have rzl,rzh==rt3,rt4 .macro mul32_32_64 rx,ry,rzl,rzh,rt0,rt1,rt2,rt3,rt4 @ t0 t1 t2 t3 t4 @ (x) (y) uxth \rt0,\rx @ xl uxth \rt1,\ry @ yl muls \rt0,\rt1 @ xlyl=L lsrs \rt2,\rx,#16 @ xh muls \rt1,\rt2 @ xhyl=M0 lsrs \rt4,\ry,#16 @ yh muls \rt2,\rt4 @ xhyh=H uxth \rt3,\rx @ xl muls \rt3,\rt4 @ xlyh=M1 adds \rt1,\rt3 @ M0+M1=M bcc l\@_1 @ addition of the two cross terms can overflow, so add carry into H movs \rt3,#1 @ 1 lsls \rt3,#16 @ 0x10000 adds \rt2,\rt3 @ H' l\@_1: @ t0 t1 t2 t3 t4 @ (zl) (zh) lsls \rzl,\rt1,#16 @ ML lsrs \rzh,\rt1,#16 @ MH adds \rzl,\rt0 @ ZL adcs \rzh,\rt2 @ ZH .endm @ SUMULL: x signed, y unsigned @ in table below ¯ means signed variable @ needs five temporary registers @ can have rt3==rx, in which case rx trashed @ can have rt4==ry, in which case ry trashed @ can have rzl==rx @ can have rzh==ry @ can have rzl,rzh==rt3,rt4 .macro muls32_32_64 rx,ry,rzl,rzh,rt0,rt1,rt2,rt3,rt4 @ t0 t1 t2 t3 t4 @ ¯(x) (y) uxth \rt0,\rx @ xl uxth \rt1,\ry @ yl muls \rt0,\rt1 @ xlyl=L asrs \rt2,\rx,#16 @ ¯xh muls \rt1,\rt2 @ ¯xhyl=M0 lsrs \rt4,\ry,#16 @ yh muls \rt2,\rt4 @ ¯xhyh=H uxth \rt3,\rx @ xl muls \rt3,\rt4 @ xlyh=M1 asrs \rt4,\rt1,#31 @ M0sx (M1 sign extension is zero) adds \rt1,\rt3 @ M0+M1=M movs \rt3,#0 @ 0 adcs \rt4,\rt3 @ ¯Msx lsls \rt4,#16 @ ¯Msx<<16 adds \rt2,\rt4 @ H' @ t0 t1 t2 t3 t4 @ (zl) (zh) lsls \rzl,\rt1,#16 @ M~ lsrs \rzh,\rt1,#16 @ M~ adds \rzl,\rt0 @ ZL adcs \rzh,\rt2 @ ¯ZH .endm @ SSMULL: x signed, y signed @ in table below ¯ means signed variable @ needs five temporary registers @ can have rt3==rx, in which case rx trashed @ can have rt4==ry, in which case ry trashed @ can have rzl==rx @ can have rzh==ry @ can have rzl,rzh==rt3,rt4 .macro muls32_s32_64 rx,ry,rzl,rzh,rt0,rt1,rt2,rt3,rt4 @ t0 t1 t2 t3 t4 @ ¯(x) (y) uxth \rt0,\rx @ xl uxth \rt1,\ry @ yl muls \rt0,\rt1 @ xlyl=L asrs \rt2,\rx,#16 @ ¯xh muls \rt1,\rt2 @ ¯xhyl=M0 asrs \rt4,\ry,#16 @ ¯yh muls \rt2,\rt4 @ ¯xhyh=H uxth \rt3,\rx @ xl muls \rt3,\rt4 @ ¯xlyh=M1 adds \rt1,\rt3 @ ¯M0+M1=M asrs \rt3,\rt1,#31 @ Msx bvc l\@_1 @ mvns \rt3,\rt3 @ ¯Msx flip sign extension bits if overflow l\@_1: lsls \rt3,#16 @ ¯Msx<<16 adds \rt2,\rt3 @ H' @ t0 t1 t2 t3 t4 @ (zl) (zh) lsls \rzl,\rt1,#16 @ M~ lsrs \rzh,\rt1,#16 @ M~ adds \rzl,\rt0 @ ZL adcs \rzh,\rt2 @ ¯ZH .endm @ can have rt2==rx, in which case rx trashed @ can have rzl==rx @ can have rzh==rt1 .macro square32_64 rx,rzl,rzh,rt0,rt1,rt2 @ t0 t1 t2 zl zh uxth \rt0,\rx @ xl muls \rt0,\rt0 @ xlxl=L uxth \rt1,\rx @ xl lsrs \rt2,\rx,#16 @ xh muls \rt1,\rt2 @ xlxh=M muls \rt2,\rt2 @ xhxh=H lsls \rzl,\rt1,#17 @ ML lsrs \rzh,\rt1,#15 @ MH adds \rzl,\rt0 @ ZL adcs \rzh,\rt2 @ ZH .endm double_section dmul_shim regular_func dmul_shim push {r4-r7,r14} mdunpack r0,r1,r4,r6,r5 mov r12,r4 mdunpack r2,r3,r4,r7,r5 eors r7,r6 @ sign of result add r4,r12 @ exponent of result push {r0-r2,r4,r7} @ accumulate full product in r12:r5:r6:r7 mul32_32_64 r0,r2, r0,r5, r4,r6,r7,r0,r5 @ XL*YL mov r12,r0 @ save LL bits mul32_32_64 r1,r3, r6,r7, r0,r2,r4,r6,r7 @ XH*YH pop {r0} @ XL mul32_32_64 r0,r3, r0,r3, r1,r2,r4,r0,r3 @ XL*YH adds r5,r0 adcs r6,r3 movs r0,#0 adcs r7,r0 pop {r1,r2} @ XH,YL mul32_32_64 r1,r2, r1,r2, r0,r3,r4, r1,r2 @ XH*YL adds r5,r1 adcs r6,r2 movs r0,#0 adcs r7,r0 @ here r5:r6:r7 holds the product [1..4) in Q(104-32)=Q72, with extra LSBs in r12 pop {r3,r4} @ exponent in r3, sign in r4 lsls r1,r7,#11 lsrs r2,r6,#21 orrs r1,r2 lsls r0,r6,#11 lsrs r2,r5,#21 orrs r0,r2 lsls r5,#11 @ now r5:r0:r1 Q83=Q(51+32), extra LSBs in r12 lsrs r2,r1,#20 bne 1f @ skip if in range [2..4) adds r5,r5 @ shift up so always [2..4) Q83, i.e. [1..2) Q84=Q(52+32) adcs r0,r0 adcs r1,r1 subs r3,#1 @ correct exponent 1: ldr r6,=0x3ff subs r3,r6 @ correct for exponent bias lsls r6,#1 @ 0x7fe cmp r3,r6 bhs dm_0 @ exponent over- or underflow lsls r5,#1 @ rounding bit to carry bcc 1f @ result is correctly rounded adds r0,#1 movs r6,#0 adcs r1,r6 @ round up mov r6,r12 @ remaining sticky bits orrs r5,r6 bne 1f @ some sticky bits set? lsrs r0,#1 lsls r0,#1 @ round to even 1: lsls r3,#20 adds r1,r3 dm_2: lsls r4,#31 add r1,r4 pop {r4-r7,r15} @ here for exponent over- or underflow dm_0: bge dm_1 @ overflow? adds r3,#1 @ would-be zero exponent? bne 1f adds r0,#1 bne 1f @ all-ones mantissa? adds r1,#1 lsrs r7,r1,#21 beq 1f lsrs r1,#1 b dm_2 1: lsls r1,r4,#31 movs r0,#0 pop {r4-r7,r15} @ here for exponent overflow dm_1: adds r6,#1 @ 0x7ff lsls r1,r6,#20 movs r0,#0 b dm_2 .ltorg @ Approach to division y/x is as follows. @ @ First generate u1, an approximation to 1/x to about 29 bits. Multiply this by the top @ 32 bits of y to generate a0, a first approximation to the result (good to 28 bits or so). @ Calculate the exact remainder r0=y-a0*x, which will be about 0. Calculate a correction @ d0=r0*u1, and then write a1=a0+d0. If near a rounding boundary, compute the exact @ remainder r1=y-a1*x (which can be done using r0 as a basis) to determine whether to @ round up or down. @ @ The calculation of 1/x is as given in dreciptest.c. That code verifies exhaustively @ that | u1*x-1 | < 10*2^-32. @ @ More precisely: @ @ x0=(q16)x; @ x1=(q30)x; @ y0=(q31)y; @ u0=(q15~)"(0xffffffffU/(unsigned int)roundq(x/x_ulp))/powq(2,16)"(x0); // q15 approximation to 1/x; "~" denotes rounding rather than truncation @ v=(q30)(u0*x1-1); @ u1=(q30)u0-(q30~)(u0*v); @ @ a0=(q30)(u1*y0); @ r0=(q82)y-a0*x; @ r0x=(q57)r0; @ d0=r0x*u1; @ a1=d0+a0; @ @ Error analysis @ @ Use Greek letters to represent the errors introduced by rounding and truncation. @ @ r₀ = y - a₀x @ = y - [ u₁ ( y - α ) - β ] x where 0 ≤ α < 2^-31, 0 ≤ β < 2^-30 @ = y ( 1 - u₁x ) + ( u₁α + β ) x @ @ Hence @ @ | r₀ / x | < 2 * 10*2^-32 + 2^-31 + 2^-30 @ = 26*2^-32 @ @ r₁ = y - a₁x @ = y - a₀x - d₀x @ = r₀ - d₀x @ = r₀ - u₁ ( r₀ - γ ) x where 0 ≤ γ < 2^-57 @ = r₀ ( 1 - u₁x ) + u₁γx @ @ Hence @ @ | r₁ / x | < 26*2^-32 * 10*2^-32 + 2^-57 @ = (260+128)*2^-64 @ < 2^-55 @ @ Empirically it seems to be nearly twice as good as this. @ @ To determine correctly whether the exact remainder calculation can be skipped we need a result @ accurate to < 0.25ulp. In the case where x>y the quotient will be shifted up one place for normalisation @ and so 1ulp is 2^-53 and so the calculation above suffices. double_section ddiv_shim regular_func ddiv_shim push {r4-r7,r14} ddiv0: @ entry point from dtan mdunpack r2,r3,r4,r7,r6 @ unpack divisor .if use_hw_div movs r5,#IOPORT>>24 lsls r5,#24 movs r6,#0 mvns r6,r6 str r6,[r5,#DIV_UDIVIDEND] lsrs r6,r3,#4 @ x0=(q16)x str r6,[r5,#DIV_UDIVISOR] @ if there are not enough cycles from now to the read of the quotient for @ the divider to do its stuff we need a busy-wait here .endif @ unpack dividend by hand to save on register use lsrs r6,r1,#31 adds r6,r7 mov r12,r6 @ result sign in r12b0; r12b1 trashed lsls r1,#1 lsrs r7,r1,#21 @ exponent beq 1f @ zero exponent? adds r6,r7,#1 lsrs r6,#11 beq 2f @ exponent != 0x7ff? then done 1: movs r0,#0 movs r1,#0 subs r7,#64 @ less drastic fiddling of exponents to get 0/0, Inf/Inf correct lsls r7,#12 2: subs r6,r7,r4 lsls r6,#2 add r12,r12,r6 @ (signed) exponent in r12[31..8] subs r7,#1 @ implied 1 lsls r7,#21 subs r1,r7 lsrs r1,#1 .if use_hw_div ldr r6,[r5,#DIV_QUOTIENT] adds r6,#1 lsrs r6,#1 .else @ this is not beautiful; could be replaced by better code that uses knowledge of divisor range push {r0-r3} movs r0,#0 mvns r0,r0 lsrs r1,r3,#4 @ x0=(q16)x bl __aeabi_uidiv @ !!! this could (but apparently does not) trash R12 adds r6,r0,#1 lsrs r6,#1 pop {r0-r3} .endif @ here @ r0:r1 y mantissa @ r2:r3 x mantissa @ r6 u0, first approximation to 1/x Q15 @ r12: result sign, exponent lsls r4,r3,#10 lsrs r5,r2,#22 orrs r5,r4 @ x1=(q30)x muls r5,r6 @ u0*x1 Q45 asrs r5,#15 @ v=u0*x1-1 Q30 muls r5,r6 @ u0*v Q45 asrs r5,#14 adds r5,#1 asrs r5,#1 @ round u0*v to Q30 lsls r6,#15 subs r6,r5 @ u1 Q30 @ here @ r0:r1 y mantissa @ r2:r3 x mantissa @ r6 u1, second approximation to 1/x Q30 @ r12: result sign, exponent push {r2,r3} lsls r4,r1,#11 lsrs r5,r0,#21 orrs r4,r5 @ y0=(q31)y mul32_32_64 r4,r6, r4,r5, r2,r3,r7,r4,r5 @ y0*u1 Q61 adds r4,r4 adcs r5,r5 @ a0=(q30)(y0*u1) @ here @ r0:r1 y mantissa @ r5 a0, first approximation to y/x Q30 @ r6 u1, second approximation to 1/x Q30 @ r12 result sign, exponent ldr r2,[r13,#0] @ xL mul32_32_64 r2,r5, r2,r3, r1,r4,r7,r2,r3 @ xL*a0 ldr r4,[r13,#4] @ xH muls r4,r5 @ xH*a0 adds r3,r4 @ r2:r3 now x*a0 Q82 lsrs r2,#25 lsls r1,r3,#7 orrs r2,r1 @ r2 now x*a0 Q57; r7:r2 is x*a0 Q89 lsls r4,r0,#5 @ y Q57 subs r0,r4,r2 @ r0x=y-x*a0 Q57 (signed) @ here @ r0 r0x Q57 @ r5 a0, first approximation to y/x Q30 @ r4 yL Q57 @ r6 u1 Q30 @ r12 result sign, exponent muls32_32_64 r0,r6, r7,r6, r1,r2,r3, r7,r6 @ r7:r6 r0x*u1 Q87 asrs r3,r6,#25 adds r5,r3 lsls r3,r6,#7 @ r3:r5 a1 Q62 (but bottom 7 bits are zero so 55 bits of precision after binary point) @ here we could recover another 7 bits of precision (but not accuracy) from the top of r7 @ but these bits are thrown away in the rounding and conversion to Q52 below @ here @ r3:r5 a1 Q62 candidate quotient [0.5,2) or so @ r4 yL Q57 @ r12 result sign, exponent movs r6,#0 adds r3,#128 @ for initial rounding to Q53 adcs r5,r5,r6 lsrs r1,r5,#30 bne dd_0 @ here candidate quotient a1 is in range [0.5,1) @ so 30 significant bits in r5 lsls r4,#1 @ y now Q58 lsrs r1,r5,#9 @ to Q52 lsls r0,r5,#23 lsrs r3,#9 @ 0.5ulp-significance bit in carry: if this is 1 we may need to correct result orrs r0,r3 bcs dd_1 b dd_2 dd_0: @ here candidate quotient a1 is in range [1,2) @ so 31 significant bits in r5 movs r2,#4 add r12,r12,r2 @ fix exponent; r3:r5 now effectively Q61 adds r3,#128 @ complete rounding to Q53 adcs r5,r5,r6 lsrs r1,r5,#10 lsls r0,r5,#22 lsrs r3,#10 @ 0.5ulp-significance bit in carry: if this is 1 we may need to correct result orrs r0,r3 bcc dd_2 dd_1: @ here @ r0:r1 rounded result Q53 [0.5,1) or Q52 [1,2), but may not be correctly rounded-to-nearest @ r4 yL Q58 or Q57 @ r12 result sign, exponent @ carry set adcs r0,r0,r0 adcs r1,r1,r1 @ z Q53 with 1 in LSB lsls r4,#16 @ Q105-32=Q73 ldr r2,[r13,#0] @ xL Q52 ldr r3,[r13,#4] @ xH Q20 movs r5,r1 @ zH Q21 muls r5,r2 @ zH*xL Q73 subs r4,r5 muls r3,r0 @ zL*xH Q73 subs r4,r3 mul32_32_64 r2,r0, r2,r3, r5,r6,r7,r2,r3 @ xL*zL negs r2,r2 @ borrow from low half? sbcs r4,r3 @ y-xz Q73 (remainder bits 52..73) cmp r4,#0 bmi 1f movs r2,#0 @ round up adds r0,#1 adcs r1,r2 1: lsrs r0,#1 @ shift back down to Q52 lsls r2,r1,#31 orrs r0,r2 lsrs r1,#1 dd_2: add r13,#8 mov r2,r12 lsls r7,r2,#31 @ result sign asrs r2,#2 @ result exponent ldr r3,=0x3fd adds r2,r3 ldr r3,=0x7fe cmp r2,r3 bhs dd_3 @ over- or underflow? lsls r2,#20 adds r1,r2 @ pack exponent dd_5: adds r1,r7 @ pack sign pop {r4-r7,r15} dd_3: movs r0,#0 cmp r2,#0 bgt dd_4 @ overflow? movs r1,r7 pop {r4-r7,r15} dd_4: adds r3,#1 @ 0x7ff lsls r1,r3,#20 b dd_5 .section SECTION_NAME(dsqrt_shim) /* Approach to square root x=sqrt(y) is as follows. First generate a3, an approximation to 1/sqrt(y) to about 30 bits. Multiply this by y to give a4~sqrt(y) to about 28 bits and a remainder r4=y-a4^2. Then, because d sqrt(y) / dy = 1 / (2 sqrt(y)) let d4=r4*a3/2 and then the value a5=a4+d4 is a better approximation to sqrt(y). If this is near a rounding boundary we compute an exact remainder y-a5*a5 to decide whether to round up or down. The calculation of a3 and a4 is as given in dsqrttest.c. That code verifies exhaustively that | 1 - a3a4 | < 10*2^-32, | r4 | < 40*2^-32 and | r4/y | < 20*2^-32. More precisely, with "y" representing y truncated to 30 binary places: u=(q3)y; // 24-entry table a0=(q8~)"1/sqrtq(x+x_ulp/2)"(u); // first approximation from table p0=(q16)(a0*a0) * (q16)y; r0=(q20)(p0-1); dy0=(q15)(r0*a0); // Newton-Raphson correction term a1=(q16)a0-dy0/2; // good to ~9 bits p1=(q19)(a1*a1)*(q19)y; r1=(q23)(p1-1); dy1=(q15~)(r1*a1); // second Newton-Raphson correction a2x=(q16)a1-dy1/2; // good to ~16 bits a2=a2x-a2x/1t16; // prevent overflow of a2*a2 in 32 bits p2=(a2*a2)*(q30)y; // Q62 r2=(q36)(p2-1+1t-31); dy2=(q30)(r2*a2); // Q52->Q30 a3=(q31)a2-dy2/2; // good to about 30 bits a4=(q30)(a3*(q30)y+1t-31); // good to about 28 bits Error analysis r₄ = y - a₄² d₄ = 1/2 a₃r₄ a₅ = a₄ + d₄ r₅ = y - a₅² = y - ( a₄ + d₄ )² = y - a₄² - a₃a₄r₄ - 1/4 a₃²r₄² = r₄ - a₃a₄r₄ - 1/4 a₃²r₄² | r₅ | < | r₄ | | 1 - a₃a₄ | + 1/4 r₄² a₅ = √y √( 1 - r₅/y ) = √y ( 1 - 1/2 r₅/y + ... ) So to first order (second order being very tiny) √y - a₅ = 1/2 r₅/y and | √y - a₅ | < 1/2 ( | r₄/y | | 1 - a₃a₄ | + 1/4 r₄²/y ) From dsqrttest.c (conservatively): < 1/2 ( 20*2^-32 * 10*2^-32 + 1/4 * 40*2^-32*20*2^-32 ) = 1/2 ( 200 + 200 ) * 2^-64 < 2^-56 Empirically we see about 1ulp worst-case error including rounding at Q57. To determine correctly whether the exact remainder calculation can be skipped we need a result accurate to < 0.25ulp at Q52, or 2^-54. */ dq_2: bge dq_3 @ +Inf? movs r1,#0 b dq_4 dq_0: lsrs r1,#31 lsls r1,#31 @ preserve sign bit lsrs r2,#21 @ extract exponent beq dq_4 @ -0? return it asrs r1,#11 @ make -Inf b dq_4 dq_3: ldr r1,=0x7ff lsls r1,#20 @ return +Inf dq_4: movs r0,#0 dq_1: bx r14 .align 2 regular_func dsqrt_shim lsls r2,r1,#1 bcs dq_0 @ negative? lsrs r2,#21 @ extract exponent subs r2,#1 ldr r3,=0x7fe cmp r2,r3 bhs dq_2 @ catches 0 and +Inf push {r4-r7,r14} lsls r4,r2,#20 subs r1,r4 @ insert implied 1 lsrs r2,#1 bcc 1f @ even exponent? skip adds r0,r0,r0 @ odd exponent: shift up mantissa adcs r1,r1,r1 1: lsrs r3,#2 adds r2,r3 lsls r2,#20 mov r12,r2 @ save result exponent @ here @ r0:r1 y mantissa Q52 [1,4) @ r12 result exponent .equ drsqrtapp_minus_8, (drsqrtapp-8) adr r4,drsqrtapp_minus_8 @ first eight table entries are never accessed because of the mantissa's leading 1 lsrs r2,r1,#17 @ y Q3 ldrb r2,[r4,r2] @ initial approximation to reciprocal square root a0 Q8 lsrs r3,r1,#4 @ first Newton-Raphson iteration muls r3,r2 muls r3,r2 @ i32 p0=a0*a0*(y>>14); // Q32 asrs r3,r3,#12 @ i32 r0=p0>>12; // Q20 muls r3,r2 asrs r3,#13 @ i32 dy0=(r0*a0)>>13; // Q15 lsls r2,#8 subs r2,r3 @ i32 a1=(a0<<8)-dy0; // Q16 movs r3,r2 muls r3,r3 lsrs r3,#13 lsrs r4,r1,#1 muls r3,r4 @ i32 p1=((a1*a1)>>11)*(y>>11); // Q19*Q19=Q38 asrs r3,#15 @ i32 r1=p1>>15; // Q23 muls r3,r2 asrs r3,#23 adds r3,#1 asrs r3,#1 @ i32 dy1=(r1*a1+(1<<23))>>24; // Q23*Q16=Q39; Q15 subs r2,r3 @ i32 a2=a1-dy1; // Q16 lsrs r3,r2,#16 subs r2,r3 @ if(a2>=0x10000) a2=0xffff; to prevent overflow of a2*a2 @ here @ r0:r1 y mantissa @ r2 a2 ~ 1/sqrt(y) Q16 @ r12 result exponent movs r3,r2 muls r3,r3 lsls r1,#10 lsrs r4,r0,#22 orrs r1,r4 @ y Q30 mul32_32_64 r1,r3, r4,r3, r5,r6,r7,r4,r3 @ i64 p2=(ui64)(a2*a2)*(ui64)y; // Q62 r4:r3 lsls r5,r3,#6 lsrs r4,#26 orrs r4,r5 adds r4,#0x20 @ i32 r2=(p2>>26)+0x20; // Q36 r4 uxth r5,r4 muls r5,r2 asrs r4,#16 muls r4,r2 lsrs r5,#16 adds r4,r5 asrs r4,#6 @ i32 dy2=((i64)r2*(i64)a2)>>22; // Q36*Q16=Q52; Q30 lsls r2,#15 subs r2,r4 @ here @ r0 y low bits @ r1 y Q30 @ r2 a3 ~ 1/sqrt(y) Q31 @ r12 result exponent mul32_32_64 r2,r1, r3,r4, r5,r6,r7,r3,r4 adds r3,r3,r3 adcs r4,r4,r4 adds r3,r3,r3 movs r3,#0 adcs r3,r4 @ ui32 a4=((ui64)a3*(ui64)y+(1U<<31))>>31; // Q30 @ here @ r0 y low bits @ r1 y Q30 @ r2 a3 Q31 ~ 1/sqrt(y) @ r3 a4 Q30 ~ sqrt(y) @ r12 result exponent square32_64 r3, r4,r5, r6,r5,r7 lsls r6,r0,#8 lsrs r7,r1,#2 subs r6,r4 sbcs r7,r5 @ r4=(q60)y-a4*a4 @ by exhaustive testing, r4 = fffffffc0e134fdc .. 00000003c2bf539c Q60 lsls r5,r7,#29 lsrs r6,#3 adcs r6,r5 @ r4 Q57 with rounding muls32_32_64 r6,r2, r6,r2, r4,r5,r7,r6,r2 @ d4=a3*r4/2 Q89 @ r4+d4 is correct to 1ULP at Q57, tested on ~9bn cases including all extreme values of r4 for each possible y Q30 adds r2,#8 asrs r2,#5 @ d4 Q52, rounded to Q53 with spare bit in carry @ here @ r0 y low bits @ r1 y Q30 @ r2 d4 Q52, rounded to Q53 @ C flag contains d4_b53 @ r3 a4 Q30 bcs dq_5 lsrs r5,r3,#10 @ a4 Q52 lsls r4,r3,#22 asrs r1,r2,#31 adds r0,r2,r4 adcs r1,r5 @ a4+d4 add r1,r12 @ pack exponent pop {r4-r7,r15} .ltorg @ round(sqrt(2^22./[68:8:252])) drsqrtapp: .byte 0xf8,0xeb,0xdf,0xd6,0xcd,0xc5,0xbe,0xb8 .byte 0xb2,0xad,0xa8,0xa4,0xa0,0x9c,0x99,0x95 .byte 0x92,0x8f,0x8d,0x8a,0x88,0x85,0x83,0x81 dq_5: @ here we are near a rounding boundary, C is set adcs r2,r2,r2 @ d4 Q53+1ulp lsrs r5,r3,#9 lsls r4,r3,#23 @ r4:r5 a4 Q53 asrs r1,r2,#31 adds r4,r2,r4 adcs r5,r1 @ r4:r5 a5=a4+d4 Q53+1ulp movs r3,r5 muls r3,r4 square32_64 r4,r1,r2,r6,r2,r7 adds r2,r3 adds r2,r3 @ r1:r2 a5^2 Q106 lsls r0,#22 @ y Q84 negs r1,r1 sbcs r0,r2 @ remainder y-a5^2 bmi 1f @ y=0 @ ω+=dω @ x+=y>>i, y-=x>>i adds r0,r3 adcs r1,r4 mov r3,r11 asrs r3,r7 mov r4,r11 lsls r4,r6 mov r2,r10 lsrs r2,r7 orrs r2,r4 @ r2:r3 y>>i, rounding in carry mov r4,r8 mov r5,r9 @ r4:r5 x adcs r2,r4 adcs r3,r5 @ r2:r3 x+(y>>i) mov r8,r2 mov r9,r3 mov r3,r5 lsls r3,r6 asrs r5,r7 lsrs r4,r7 orrs r4,r3 @ r4:r5 x>>i, rounding in carry mov r2,r10 mov r3,r11 sbcs r2,r4 sbcs r3,r5 @ r2:r3 y-(x>>i) mov r10,r2 mov r11,r3 bx r14 @ ω>0 / y<0 @ ω-=dω @ x-=y>>i, y+=x>>i 1: subs r0,r3 sbcs r1,r4 mov r3,r9 asrs r3,r7 mov r4,r9 lsls r4,r6 mov r2,r8 lsrs r2,r7 orrs r2,r4 @ r2:r3 x>>i, rounding in carry mov r4,r10 mov r5,r11 @ r4:r5 y adcs r2,r4 adcs r3,r5 @ r2:r3 y+(x>>i) mov r10,r2 mov r11,r3 mov r3,r5 lsls r3,r6 asrs r5,r7 lsrs r4,r7 orrs r4,r3 @ r4:r5 y>>i, rounding in carry mov r2,r8 mov r3,r9 sbcs r2,r4 sbcs r3,r5 @ r2:r3 x-(y>>i) mov r8,r2 mov r9,r3 bx r14 @ convert packed double in r0:r1 to signed/unsigned 32/64-bit integer/fixed-point value in r0:r1 [with r2 places after point], with rounding towards -Inf @ fixed-point versions only work with reasonable values in r2 because of the way dunpacks works double_section double2int_shim regular_func double2int_shim movs r2,#0 @ and fall through regular_func double2fix_shim push {r14} adds r2,#32 bl double2fix64_shim movs r0,r1 pop {r15} double_section double2uint_shim regular_func double2uint_shim movs r2,#0 @ and fall through regular_func double2ufix_shim push {r14} adds r2,#32 bl double2ufix64_shim movs r0,r1 pop {r15} double_section double2int64_shim regular_func double2int64_shim movs r2,#0 @ and fall through regular_func double2fix64_shim push {r14} bl d2fix asrs r2,r1,#31 cmp r2,r3 bne 1f @ sign extension bits fail to match sign of result? pop {r15} 1: mvns r0,r3 movs r1,#1 lsls r1,#31 eors r1,r1,r0 @ generate extreme fixed-point values pop {r15} double_section double2uint64_shim regular_func double2uint64_shim movs r2,#0 @ and fall through regular_func double2ufix64_shim asrs r3,r1,#20 @ negative? return 0 bmi ret_dzero @ and fall through @ convert double in r0:r1 to signed fixed point in r0:r1:r3, r2 places after point, rounding towards -Inf @ result clamped so that r3 can only be 0 or -1 @ trashes r12 .thumb_func d2fix: push {r4,r14} mov r12,r2 bl dunpacks asrs r4,r2,#16 adds r4,#1 bge 1f movs r1,#0 @ -0 -> +0 1: asrs r3,r1,#31 ldr r4, =d2fix_a bx r4 ret_dzero: movs r0,#0 movs r1,#0 bx r14 .weak d2fix_a // weak because it exists in float code too .thumb_func d2fix_a: @ here @ r0:r1 two's complement mantissa @ r2 unbaised exponent @ r3 mantissa sign extension bits add r2,r12 @ exponent plus offset for required binary point position subs r2,#52 @ required shift bmi 1f @ shift down? @ here a shift up by r2 places cmp r2,#12 @ will clamp? bge 2f movs r4,r0 lsls r1,r2 lsls r0,r2 negs r2,r2 adds r2,#32 @ complementary shift lsrs r4,r2 orrs r1,r4 pop {r4,r15} 2: mvns r0,r3 mvns r1,r3 @ overflow: clamp to extreme fixed-point values pop {r4,r15} 1: @ here a shift down by -r2 places adds r2,#32 bmi 1f @ long shift? mov r4,r1 lsls r4,r2 negs r2,r2 adds r2,#32 @ complementary shift asrs r1,r2 lsrs r0,r2 orrs r0,r4 pop {r4,r15} 1: @ here a long shift down movs r0,r1 asrs r1,#31 @ shift down 32 places adds r2,#32 bmi 1f @ very long shift? negs r2,r2 adds r2,#32 asrs r0,r2 pop {r4,r15} 1: movs r0,r3 @ result very near zero: use sign extension bits movs r1,r3 pop {r4,r15} double_section double2float_shim regular_func double2float_shim lsls r2,r1,#1 lsrs r2,#21 @ exponent ldr r3,=0x3ff-0x7f subs r2,r3 @ fix exponent bias ble 1f @ underflow or zero cmp r2,#0xff bge 2f @ overflow or infinity lsls r2,#23 @ position exponent of result lsrs r3,r1,#31 lsls r3,#31 orrs r2,r3 @ insert sign lsls r3,r0,#3 @ rounding bits lsrs r0,#29 lsls r1,#12 lsrs r1,#9 orrs r0,r1 @ assemble mantissa orrs r0,r2 @ insert exponent and sign lsls r3,#1 bcc 3f @ no rounding beq 4f @ all sticky bits 0? 5: adds r0,#1 3: bx r14 4: lsrs r3,r0,#1 @ odd? then round up bcs 5b bx r14 1: beq 6f @ check case where value is just less than smallest normal 7: lsrs r0,r1,#31 lsls r0,#31 bx r14 6: lsls r2,r1,#12 @ 20 1:s at top of mantissa? asrs r2,#12 adds r2,#1 bne 7b lsrs r2,r0,#29 @ and 3 more 1:s? cmp r2,#7 bne 7b movs r2,#1 @ return smallest normal with correct sign b 8f 2: movs r2,#0xff 8: lsrs r0,r1,#31 @ return signed infinity lsls r0,#8 adds r0,r2 lsls r0,#23 bx r14 double_section x2double_shims @ convert signed/unsigned 32/64-bit integer/fixed-point value in r0:r1 [with r2 places after point] to packed double in r0:r1, with rounding .align 2 regular_func uint2double_shim movs r1,#0 @ and fall through regular_func ufix2double_shim movs r2,r1 movs r1,#0 b ufix642double_shim .align 2 regular_func int2double_shim movs r1,#0 @ and fall through regular_func fix2double_shim movs r2,r1 asrs r1,r0,#31 @ sign extend b fix642double_shim .align 2 regular_func uint642double_shim movs r2,#0 @ and fall through regular_func ufix642double_shim movs r3,#0 b uf2d .align 2 regular_func int642double_shim movs r2,#0 @ and fall through regular_func fix642double_shim asrs r3,r1,#31 @ sign bit across all bits eors r0,r3 eors r1,r3 subs r0,r3 sbcs r1,r3 uf2d: push {r4,r5,r14} ldr r4,=0x432 subs r2,r4,r2 @ form biased exponent @ here @ r0:r1 unnormalised mantissa @ r2 -Q (will become exponent) @ r3 sign across all bits cmp r1,#0 bne 1f @ short normalising shift? movs r1,r0 beq 2f @ zero? return it movs r0,#0 subs r2,#32 @ fix exponent 1: asrs r4,r1,#21 bne 3f @ will need shift down (and rounding?) bcs 4f @ normalised already? 5: subs r2,#1 adds r0,r0 @ shift up adcs r1,r1 lsrs r4,r1,#21 bcc 5b 4: ldr r4,=0x7fe cmp r2,r4 bhs 6f @ over/underflow? return signed zero/infinity 7: lsls r2,#20 @ pack and return adds r1,r2 lsls r3,#31 adds r1,r3 2: pop {r4,r5,r15} 6: @ return signed zero/infinity according to unclamped exponent in r2 mvns r2,r2 lsrs r2,#21 movs r0,#0 movs r1,#0 b 7b 3: @ here we need to shift down to normalise and possibly round bmi 1f @ already normalised to Q63? 2: subs r2,#1 adds r0,r0 @ shift up adcs r1,r1 bpl 2b 1: @ here we have a 1 in b63 of r0:r1 adds r2,#11 @ correct exponent for subsequent shift down lsls r4,r0,#21 @ save bits for rounding lsrs r0,#11 lsls r5,r1,#21 orrs r0,r5 lsrs r1,#11 lsls r4,#1 beq 1f @ sticky bits are zero? 8: movs r4,#0 adcs r0,r4 adcs r1,r4 b 4b 1: bcc 4b @ sticky bits are zero but not on rounding boundary lsrs r4,r0,#1 @ increment if odd (force round to even) b 8b .ltorg double_section dunpacks regular_func dunpacks mdunpacks r0,r1,r2,r3,r4 ldr r3,=0x3ff subs r2,r3 @ exponent without offset bx r14 @ r0:r1 signed mantissa Q52 @ r2 unbiased exponent < 10 (i.e., |x|<2^10) @ r4 pointer to: @ - divisor reciprocal approximation r=1/d Q15 @ - divisor d Q62 0..20 @ - divisor d Q62 21..41 @ - divisor d Q62 42..62 @ returns: @ r0:r1 reduced result y Q62, -0.6 d < y < 0.6 d (better in practice) @ r2 quotient q (number of reductions) @ if exponent >=10, returns r0:r1=0, r2=1024*mantissa sign @ designed to work for 0.5=0: in quadrant 0 cmp r1,r3 ble 2f @ y<~x so 0≤θ<~π/4: skip adds r6,#1 eors r1,r5 @ negate x b 3f @ and exchange x and y = rotate by -π/2 1: cmp r3,r7 bge 2f @ -y<~x so -π/4<~θ≤0: skip subs r6,#1 eors r3,r5 @ negate y and ... 3: movs r7,r0 @ exchange x and y movs r0,r2 movs r2,r7 movs r7,r1 movs r1,r3 movs r3,r7 2: @ here -π/4<~θ<~π/4 @ r6 has quadrant offset push {r6} cmp r2,#0 bne 1f cmp r3,#0 beq 10f @ x==0 going into division? lsls r4,r3,#1 asrs r4,#21 adds r4,#1 bne 1f @ x==Inf going into division? lsls r4,r1,#1 asrs r4,#21 adds r4,#1 @ y also ±Inf? bne 10f subs r1,#1 @ make them both just finite subs r3,#1 b 1f 10: movs r0,#0 movs r1,#0 b 12f 1: bl ddiv_shim movs r2,#62 bl double2fix64_shim @ r0:r1 y/x mov r10,r0 mov r11,r1 movs r0,#0 @ ω=0 movs r1,#0 mov r8,r0 movs r2,#1 lsls r2,#30 mov r9,r2 @ x=1 adr r4,dtab_cc mov r12,r4 movs r7,#1 movs r6,#31 1: bl dcordic_vec_step adds r7,#1 subs r6,#1 cmp r7,#33 bne 1b @ r0:r1 atan(y/x) Q62 @ r8:r9 x residual Q62 @ r10:r11 y residual Q62 mov r2,r9 mov r3,r10 subs r2,#12 @ this makes atan(0)==0 @ the following is basically a division residual y/x ~ atan(residual y/x) movs r4,#1 lsls r4,#29 movs r7,#0 2: lsrs r2,#1 movs r3,r3 @ preserve carry bmi 1f sbcs r3,r2 adds r0,r4 adcs r1,r7 lsrs r4,#1 bne 2b b 3f 1: adcs r3,r2 subs r0,r4 sbcs r1,r7 lsrs r4,#1 bne 2b 3: lsls r6,r1,#31 asrs r1,#1 lsrs r0,#1 orrs r0,r6 @ Q61 12: pop {r6} cmp r6,#0 beq 1f ldr r4,=0x885A308D @ π/2 Q61 ldr r5,=0x3243F6A8 bpl 2f mvns r4,r4 @ negative quadrant offset mvns r5,r5 2: lsls r6,#31 bne 2f @ skip if quadrant offset is ±1 adds r0,r4 adcs r1,r5 2: adds r0,r4 adcs r1,r5 1: movs r2,#61 bl fix642double_shim bl pop_r8_r11 pop {r4-r7,r15} .ltorg dtab_cc: .word 0x61bb4f69, 0x1dac6705 @ atan 2^-1 Q62 .word 0x96406eb1, 0x0fadbafc @ atan 2^-2 Q62 .word 0xab0bdb72, 0x07f56ea6 @ atan 2^-3 Q62 .word 0xe59fbd39, 0x03feab76 @ atan 2^-4 Q62 .word 0xba97624b, 0x01ffd55b @ atan 2^-5 Q62 .word 0xdddb94d6, 0x00fffaaa @ atan 2^-6 Q62 .word 0x56eeea5d, 0x007fff55 @ atan 2^-7 Q62 .word 0xaab7776e, 0x003fffea @ atan 2^-8 Q62 .word 0x5555bbbc, 0x001ffffd @ atan 2^-9 Q62 .word 0xaaaaadde, 0x000fffff @ atan 2^-10 Q62 .word 0xf555556f, 0x0007ffff @ atan 2^-11 Q62 .word 0xfeaaaaab, 0x0003ffff @ atan 2^-12 Q62 .word 0xffd55555, 0x0001ffff @ atan 2^-13 Q62 .word 0xfffaaaab, 0x0000ffff @ atan 2^-14 Q62 .word 0xffff5555, 0x00007fff @ atan 2^-15 Q62 .word 0xffffeaab, 0x00003fff @ atan 2^-16 Q62 .word 0xfffffd55, 0x00001fff @ atan 2^-17 Q62 .word 0xffffffab, 0x00000fff @ atan 2^-18 Q62 .word 0xfffffff5, 0x000007ff @ atan 2^-19 Q62 .word 0xffffffff, 0x000003ff @ atan 2^-20 Q62 .word 0x00000000, 0x00000200 @ atan 2^-21 Q62 @ consider optimising these .word 0x00000000, 0x00000100 @ atan 2^-22 Q62 .word 0x00000000, 0x00000080 @ atan 2^-23 Q62 .word 0x00000000, 0x00000040 @ atan 2^-24 Q62 .word 0x00000000, 0x00000020 @ atan 2^-25 Q62 .word 0x00000000, 0x00000010 @ atan 2^-26 Q62 .word 0x00000000, 0x00000008 @ atan 2^-27 Q62 .word 0x00000000, 0x00000004 @ atan 2^-28 Q62 .word 0x00000000, 0x00000002 @ atan 2^-29 Q62 .word 0x00000000, 0x00000001 @ atan 2^-30 Q62 .word 0x80000000, 0x00000000 @ atan 2^-31 Q62 .word 0x40000000, 0x00000000 @ atan 2^-32 Q62 double_section dexp_guts regular_func dexp_shim push {r4-r7,r14} bl dunpacks adr r4,dreddata1 bl dreduce cmp r1,#0 bge 1f ldr r4,=0xF473DE6B ldr r5,=0x2C5C85FD @ ln2 Q62 adds r0,r4 adcs r1,r5 subs r2,#1 1: push {r2} movs r7,#1 @ shift adr r6,dtab_exp movs r2,#0 movs r3,#1 lsls r3,#30 @ x=1 Q62 3: ldmia r6!,{r4,r5} mov r12,r6 subs r0,r4 sbcs r1,r5 bmi 1f negs r6,r7 adds r6,#32 @ complementary shift movs r5,r3 asrs r5,r7 movs r4,r3 lsls r4,r6 movs r6,r2 lsrs r6,r7 @ rounding bit in carry orrs r4,r6 adcs r2,r4 adcs r3,r5 @ x+=x>>i b 2f 1: adds r0,r4 @ restore argument adcs r1,r5 2: mov r6,r12 adds r7,#1 cmp r7,#33 bne 3b @ here @ r0:r1 ε (residual x, where x=a+ε) Q62, |ε|≤2^-32 (so fits in r0) @ r2:r3 exp a Q62 @ and we wish to calculate exp x=exp a exp ε~(exp a)(1+ε) muls32_32_64 r0,r3, r4,r1, r5,r6,r7,r4,r1 @ r4:r1 ε exp a Q(62+62-32)=Q92 lsrs r4,#30 lsls r0,r1,#2 orrs r0,r4 asrs r1,#30 adds r0,r2 adcs r1,r3 pop {r2} negs r2,r2 adds r2,#62 bl fix642double_shim @ in principle we can pack faster than this because we know the exponent pop {r4-r7,r15} .ltorg .align 2 regular_func dln_shim push {r4-r7,r14} lsls r7,r1,#1 bcs 5f @ <0 ... asrs r7,#21 beq 5f @ ... or =0? return -Inf adds r7,#1 beq 6f @ Inf/NaN? return +Inf bl dunpacks push {r2} lsls r1,#9 lsrs r2,r0,#23 orrs r1,r2 lsls r0,#9 @ r0:r1 m Q61 = m/2 Q62 0.5≤m/2<1 movs r7,#1 @ shift adr r6,dtab_exp mov r12,r6 movs r2,#0 movs r3,#0 @ y=0 Q62 3: negs r6,r7 adds r6,#32 @ complementary shift movs r5,r1 asrs r5,r7 movs r4,r1 lsls r4,r6 movs r6,r0 lsrs r6,r7 orrs r4,r6 @ x>>i, rounding bit in carry adcs r4,r0 adcs r5,r1 @ x+(x>>i) lsrs r6,r5,#30 bne 1f @ x+(x>>i)>1? movs r0,r4 movs r1,r5 @ x+=x>>i mov r6,r12 ldmia r6!,{r4,r5} subs r2,r4 sbcs r3,r5 1: movs r4,#8 add r12,r4 adds r7,#1 cmp r7,#33 bne 3b @ here: @ r0:r1 residual x, nearly 1 Q62 @ r2:r3 y ~ ln m/2 = ln m - ln2 Q62 @ result is y + ln2 + ln x ~ y + ln2 + (x-1) lsls r1,#2 asrs r1,#2 @ x-1 adds r2,r0 adcs r3,r1 pop {r7} @ here: @ r2:r3 ln m/2 = ln m - ln2 Q62 @ r7 unbiased exponent .equ dreddata1_plus_4, (dreddata1+4) adr r4,dreddata1_plus_4 ldmia r4,{r0,r1,r4} adds r7,#1 muls r0,r7 @ Q62 muls r1,r7 @ Q41 muls r4,r7 @ Q20 lsls r7,r1,#21 asrs r1,#11 asrs r5,r1,#31 adds r0,r7 adcs r1,r5 lsls r7,r4,#10 asrs r4,#22 asrs r5,r1,#31 adds r1,r7 adcs r4,r5 @ r0:r1:r4 exponent*ln2 Q62 asrs r5,r3,#31 adds r0,r2 adcs r1,r3 adcs r4,r5 @ r0:r1:r4 result Q62 movs r2,#62 1: asrs r5,r1,#31 cmp r4,r5 beq 2f @ r4 a sign extension of r1? lsrs r0,#4 @ no: shift down 4 places and try again lsls r6,r1,#28 orrs r0,r6 lsrs r1,#4 lsls r6,r4,#28 orrs r1,r6 asrs r4,#4 subs r2,#4 b 1b 2: bl fix642double_shim pop {r4-r7,r15} 5: ldr r1,=0xfff00000 movs r0,#0 pop {r4-r7,r15} 6: ldr r1,=0x7ff00000 movs r0,#0 pop {r4-r7,r15} .ltorg .align 2 dreddata1: .word 0x0000B8AA @ 1/ln2 Q15 .word 0x0013DE6B @ ln2 Q62 Q62=2C5C85FDF473DE6B split into 21-bit pieces .word 0x000FEFA3 .word 0x000B1721 dtab_exp: .word 0xbf984bf3, 0x19f323ec @ log 1+2^-1 Q62 .word 0xcd4d10d6, 0x0e47fbe3 @ log 1+2^-2 Q62 .word 0x8abcb97a, 0x0789c1db @ log 1+2^-3 Q62 .word 0x022c54cc, 0x03e14618 @ log 1+2^-4 Q62 .word 0xe7833005, 0x01f829b0 @ log 1+2^-5 Q62 .word 0x87e01f1e, 0x00fe0545 @ log 1+2^-6 Q62 .word 0xac419e24, 0x007f80a9 @ log 1+2^-7 Q62 .word 0x45621781, 0x003fe015 @ log 1+2^-8 Q62 .word 0xa9ab10e6, 0x001ff802 @ log 1+2^-9 Q62 .word 0x55455888, 0x000ffe00 @ log 1+2^-10 Q62 .word 0x0aa9aac4, 0x0007ff80 @ log 1+2^-11 Q62 .word 0x01554556, 0x0003ffe0 @ log 1+2^-12 Q62 .word 0x002aa9ab, 0x0001fff8 @ log 1+2^-13 Q62 .word 0x00055545, 0x0000fffe @ log 1+2^-14 Q62 .word 0x8000aaaa, 0x00007fff @ log 1+2^-15 Q62 .word 0xe0001555, 0x00003fff @ log 1+2^-16 Q62 .word 0xf80002ab, 0x00001fff @ log 1+2^-17 Q62 .word 0xfe000055, 0x00000fff @ log 1+2^-18 Q62 .word 0xff80000b, 0x000007ff @ log 1+2^-19 Q62 .word 0xffe00001, 0x000003ff @ log 1+2^-20 Q62 .word 0xfff80000, 0x000001ff @ log 1+2^-21 Q62 .word 0xfffe0000, 0x000000ff @ log 1+2^-22 Q62 .word 0xffff8000, 0x0000007f @ log 1+2^-23 Q62 .word 0xffffe000, 0x0000003f @ log 1+2^-24 Q62 .word 0xfffff800, 0x0000001f @ log 1+2^-25 Q62 .word 0xfffffe00, 0x0000000f @ log 1+2^-26 Q62 .word 0xffffff80, 0x00000007 @ log 1+2^-27 Q62 .word 0xffffffe0, 0x00000003 @ log 1+2^-28 Q62 .word 0xfffffff8, 0x00000001 @ log 1+2^-29 Q62 .word 0xfffffffe, 0x00000000 @ log 1+2^-30 Q62 .word 0x80000000, 0x00000000 @ log 1+2^-31 Q62 .word 0x40000000, 0x00000000 @ log 1+2^-32 Q62 #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_double/include/pico/double.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_DOUBLE_H #define _PICO_DOUBLE_H #include #include "pico.h" #include "pico/bootrom/sf_table.h" #ifdef __cplusplus extern "C" { #endif /** \file double.h * \defgroup pico_double pico_double * * Optimized double-precision floating point functions * * (Replacement) optimized implementations are provided of the following compiler built-ins * and math library functions: * * - __aeabi_dadd, __aeabi_ddiv, __aeabi_dmul, __aeabi_drsub, __aeabi_dsub, __aeabi_cdcmpeq, __aeabi_cdrcmple, __aeabi_cdcmple, __aeabi_dcmpeq, __aeabi_dcmplt, __aeabi_dcmple, __aeabi_dcmpge, __aeabi_dcmpgt, __aeabi_dcmpun, __aeabi_i2d, __aeabi_l2d, __aeabi_ui2d, __aeabi_ul2d, __aeabi_d2iz, __aeabi_d2lz, __aeabi_d2uiz, __aeabi_d2ulz, __aeabi_d2f * - sqrt, cos, sin, tan, atan2, exp, log, ldexp, copysign, trunc, floor, ceil, round, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh, exp2, log2, exp10, log10, pow,, hypot, cbrt, fmod, drem, remainder, remquo, expm1, log1p, fma * - powint, sincos (GNU extensions) * * The following additional optimized functions are also provided: * * - fix2double, ufix2double, fix642double, ufix642double, double2fix, double2ufix, double2fix64, double2ufix64, double2int, double2int64, double2int_z, double2int64_z */ double fix2double(int32_t m, int e); double ufix2double(uint32_t m, int e); double fix642double(int64_t m, int e); double ufix642double(uint64_t m, int e); // These methods round towards -Infinity. int32_t double2fix(double f, int e); uint32_t double2ufix(double f, int e); int64_t double2fix64(double f, int e); uint64_t double2ufix64(double f, int e); int32_t double2int(double f); int64_t double2int64(double f); // These methods round towards 0. int32_t double2int_z(double f); int64_t double2int64_z(double f); double exp10(double x); void sincos(double x, double *sinx, double *cosx); double powint(double x, int y); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_fix/CMakeLists.txt ================================================ pico_add_subdirectory(rp2040_usb_device_enumeration) ================================================ FILE: pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/CMakeLists.txt ================================================ pico_add_library(pico_fix_rp2040_usb_device_enumeration) target_sources(pico_fix_rp2040_usb_device_enumeration INTERFACE ${CMAKE_CURRENT_LIST_DIR}/rp2040_usb_device_enumeration.c ) target_include_directories(pico_fix_rp2040_usb_device_enumeration_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_mirrored_target_link_libraries(pico_fix_rp2040_usb_device_enumeration INTERFACE hardware_structs hardware_gpio pico_time) ================================================ FILE: pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/include/pico/fix/rp2040_usb_device_enumeration.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_FIX_RP2040_USB_DEVICE_ENUMERATION_H #define _PICO_FIX_RP2040_USB_DEVICE_ENUMERATION_H /*! \brief Perform a brute force workaround for USB device enumeration issue * \ingroup pico_fix * * This method should be called during the IRQ handler for a bus reset */ void rp2040_usb_device_enumeration_fix(void); #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" #include "pico/time.h" #include "hardware/structs/usb.h" #include "hardware/gpio.h" #include "hardware/structs/iobank0.h" #include "hardware/structs/padsbank0.h" #include "pico/fix/rp2040_usb_device_enumeration.h" #define LS_SE0 0b00 #define LS_J 0b01 #define LS_K 0b10 #define LS_SE1 0b11 #if PICO_RP2040_B0_SUPPORTED || PICO_RP2040_B1_SUPPORTED static void hw_enumeration_fix_wait_se0(void); static void hw_enumeration_fix_force_ls_j(void); static void hw_enumeration_fix_finish(void); void rp2040_usb_device_enumeration_fix(void) { // Actually check for B0/B1 h/w if (rp2040_chip_version() == 1) { // After coming out of reset, the hardware expects 800us of LS_J (linestate J) time // before it will move to the connected state. However on a hub that broadcasts packets // for other devices this isn't the case. The plan here is to wait for the end of the bus // reset, force an LS_J for 1ms and then switch control back to the USB phy. Unfortunately // this requires us to use GPIO15 as there is no other way to force the input path. // We only need to force DP as DM can be left at zero. It will be gated off by GPIO // logic if it isn't func selected. // Wait SE0 phase will call force ls_j phase which will call finish phase hw_enumeration_fix_wait_se0(); } } static inline uint8_t hw_line_state(void) { return (usb_hw->sie_status & USB_SIE_STATUS_LINE_STATE_BITS) >> USB_SIE_STATUS_LINE_STATE_LSB; } int64_t hw_enumeration_fix_wait_se0_callback(__unused alarm_id_t id, __unused void *user_data) { if (hw_line_state() == LS_SE0) { // Come back in 1ms and check again return 1000; } else { // Now force LS_J (next stage of fix) hw_enumeration_fix_force_ls_j(); // No more repeats return 0; } } static inline void hw_enumeration_fix_busy_wait_se0(void) { while (hw_line_state() == LS_SE0) tight_loop_contents(); // Now force LS_J (next stage of fix) hw_enumeration_fix_force_ls_j(); } static void hw_enumeration_fix_wait_se0(void) { // Wait for SE0 to end (i.e. the host to stop resetting). This reset can last quite long. // 10-15ms so we are going to set a timer callback. #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED if (add_alarm_in_ms(1, hw_enumeration_fix_wait_se0_callback, NULL, true) >= 0) { // hw_enumeration_fix_wait_se0_callback will be called in 1ms to check if se0 has finished // (and will poll every 1ms from there) return; } #endif // if timer pool disabled, or no timer available, have to busy wait. hw_enumeration_fix_busy_wait_se0(); } int64_t hw_enumeration_fix_force_ls_j_done(__unused alarm_id_t id, __unused void *user_data) { hw_enumeration_fix_finish(); return 0; } static uint32_t gpio_ctrl_prev = 0; static uint32_t pad_ctrl_prev = 0; static const uint dp = 15; static const uint dm = 16; static void hw_enumeration_fix_force_ls_j(void) { // DM must be 0 for this to work. This is true if it is selected // to any other function. fn 8 on this pin is only for debug so shouldn't // be selected hard_assert(gpio_get_function(dm) != 8); // Before changing any pin state, take a copy of the current gpio control register gpio_ctrl_prev = iobank0_hw->io[dp].ctrl; // Also take a copy of the pads register pad_ctrl_prev = padsbank0_hw->io[dp]; // Enable bus keep and force pin to tristate, so USB DP muxing doesn't affect // pin state gpio_set_pulls(dp, true, true); gpio_set_oeover(dp, GPIO_OVERRIDE_LOW); // Select function 8 (USB debug muxing) without disturbing other controls hw_write_masked(&iobank0_hw->io[dp].ctrl, 8 << IO_BANK0_GPIO15_CTRL_FUNCSEL_LSB, IO_BANK0_GPIO15_CTRL_FUNCSEL_BITS); // J state is a differential 1 for a full speed device so // DP = 1 and DM = 0. Don't actually need to set DM low as it // is already gated assuming it isn't funcseld. gpio_set_inover(dp, GPIO_OVERRIDE_HIGH); // Force PHY pull up to stay before switching away from the phy usb_hw_t *usb_hw_set = (usb_hw_t *)hw_set_alias_untyped(usb_hw); usb_hw_set->phy_direct = USB_USBPHY_DIRECT_DP_PULLUP_EN_BITS; usb_hw_set->phy_direct_override = USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_EN_OVERRIDE_EN_BITS; // Switch to GPIO phy with LS_J forced usb_hw->muxing = USB_USB_MUXING_TO_DIGITAL_PAD_BITS | USB_USB_MUXING_SOFTCON_BITS; // LS_J is now forced but while loop here just to check hard_assert(hw_line_state() == LS_J); // "LS_J not forced!" #if !PICO_TIME_DEFAULT_ALARM_POOL_DISABLED if (add_alarm_in_ms(1, hw_enumeration_fix_force_ls_j_done, NULL, true) >= 0) { // hw_enumeration_fix_force_ls_j_done will be called in 1ms return; } #endif // if timer pool disabled, or no timer available, have to busy wait. busy_wait_us(1000); hw_enumeration_fix_finish(); } static void hw_enumeration_fix_finish(void) { // Should think we are connected now while (!(usb_hw->sie_status & USB_SIE_STATUS_CONNECTED_BITS)) tight_loop_contents(); // Switch back to USB phy usb_hw->muxing = USB_USB_MUXING_TO_PHY_BITS | USB_USB_MUXING_SOFTCON_BITS; // Get rid of DP pullup override hw_clear_bits(&usb_hw->phy_direct_override, USB_USBPHY_DIRECT_OVERRIDE_DP_PULLUP_EN_OVERRIDE_EN_BITS); // Finally, restore the gpio ctrl value back to GPIO15 iobank0_hw->io[dp].ctrl = gpio_ctrl_prev; // Restore the pad ctrl value padsbank0_hw->io[dp] = pad_ctrl_prev; } #else void rp2040_usb_device_enumeration_fix(void) { // nothing to do } #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_flash/CMakeLists.txt ================================================ pico_add_library(pico_flash) target_sources(pico_flash INTERFACE ${CMAKE_CURRENT_LIST_DIR}/flash.c ) target_include_directories(pico_flash_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) # just include multicore headers, as we don't want to pull in the lib if it isn't pulled in already target_link_libraries(pico_flash INTERFACE pico_multicore_headers) pico_mirrored_target_link_libraries(pico_flash INTERFACE pico_time hardware_sync) ================================================ FILE: pico-sdk/src/rp2_common/pico_flash/flash.c ================================================ /* * Copyright (c) 2023 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/flash.h" #include "hardware/exception.h" #include "hardware/sync.h" #if PICO_FLASH_SAFE_EXECUTE_PICO_SUPPORT_MULTICORE_LOCKOUT #include "pico/multicore.h" #endif #if PICO_FLASH_SAFE_EXECUTE_SUPPORT_FREERTOS_SMP #include "FreeRTOS.h" #include "task.h" // now we have FreeRTOS header we can check core count... we can only use FreeRTOS SMP mechanism // with two cores #if configNUM_CORES == 2 #if configUSE_CORE_AFFINITY #define PICO_FLASH_SAFE_EXECUTE_USE_FREERTOS_SMP 1 #else #error configUSE_CORE_AFFINITY is required for PICO_FLASH_SAFE_EXECUTE_SUPPORT_FREERTOS_SMP #endif #endif #endif // There are multiple scenarios: // // 1. No use of core 1 - we just want to disable IRQs and not wait on core 1 to acquiesce // 2. Regular pico_multicore - we need to use multicore lockout. // 3. FreeRTOS on core 0, no use of core 1 - we just want to disable IRQs // 4. FreeRTOS SMP on both cores - we need to schedule a high priority task on the other core to disable IRQs. // 5. FreeRTOS on one core, but application is using the other core. ** WE CANNOT SUPPORT THIS TODAY ** without // the equivalent PICO_FLASH_ASSUME_COREx_SAFE (i.e. the user mkaing sure the other core is fine) static bool default_core_init_deinit(bool init); static int default_enter_safe_zone_timeout_ms(uint32_t timeout_ms); static int default_exit_safe_zone_timeout_ms(uint32_t timeout_ms); // note the default methods are combined, rather than having a separate helper for // FreeRTOS, as we may support mixed multicore and non SMP FreeRTOS in the future static flash_safety_helper_t default_flash_safety_helper = { .core_init_deinit = default_core_init_deinit, .enter_safe_zone_timeout_ms = default_enter_safe_zone_timeout_ms, .exit_safe_zone_timeout_ms = default_exit_safe_zone_timeout_ms }; #if PICO_FLASH_SAFE_EXECUTE_USE_FREERTOS_SMP enum { FREERTOS_LOCKOUT_NONE = 0, FREERTOS_LOCKOUT_LOCKER_WAITING, FREERTOS_LOCKOUT_LOCKEE_READY, FREERTOS_LOCKOUT_LOCKER_DONE, FREERTOS_LOCKOUT_LOCKEE_DONE, }; // state for the lockout operation launched from the corresponding core static volatile uint8_t lockout_state[NUM_CORES]; #endif __attribute__((weak)) flash_safety_helper_t *get_flash_safety_helper(void) { return &default_flash_safety_helper; } bool flash_safe_execute_core_init(void) { flash_safety_helper_t *helper = get_flash_safety_helper(); return helper ? helper->core_init_deinit(true) : false; } bool flash_safe_execute_core_deinit(void) { flash_safety_helper_t *helper = get_flash_safety_helper(); return helper ? helper->core_init_deinit(false) : false; } int flash_safe_execute(void (*func)(void *), void *param, uint32_t enter_exit_timeout_ms) { flash_safety_helper_t *helper = get_flash_safety_helper(); if (!helper) return PICO_ERROR_NOT_PERMITTED; int rc = helper->enter_safe_zone_timeout_ms(enter_exit_timeout_ms); if (!rc) { func(param); rc = helper->exit_safe_zone_timeout_ms(enter_exit_timeout_ms); } return rc; } static bool default_core_init_deinit(__unused bool init) { #if PICO_FLASH_ASSUME_CORE0_SAFE if (!get_core_num()) return true; #endif #if PICO_FLASH_ASSUME_CORE1_SAFE if (get_core_num()) return true; #endif #if PICO_FLASH_SAFE_EXECUTE_USE_FREERTOS_SMP return true; #endif #if PICO_FLASH_SAFE_EXECUTE_PICO_SUPPORT_MULTICORE_LOCKOUT if (!init) { return false; } multicore_lockout_victim_init(); #endif return true; } // irq_state for the lockout operation launched from the corresponding core static uint32_t irq_state[NUM_CORES]; static bool use_irq_only(void) { #if PICO_FLASH_ASSUME_CORE0_SAFE if (get_core_num()) return true; #endif #if PICO_FLASH_ASSUME_CORE1_SAFE if (!get_core_num()) return true; #endif return false; } #if PICO_FLASH_SAFE_EXECUTE_USE_FREERTOS_SMP static void __not_in_flash_func(flash_lockout_task)(__unused void *vother_core_num) { uint other_core_num = (uintptr_t)vother_core_num; while (lockout_state[other_core_num] != FREERTOS_LOCKOUT_LOCKER_WAITING) { __wfe(); // we don't bother to try to let lower priority tasks run } uint32_t save = save_and_disable_interrupts(); lockout_state[other_core_num] = FREERTOS_LOCKOUT_LOCKEE_READY; __sev(); while (lockout_state[other_core_num] == FREERTOS_LOCKOUT_LOCKEE_READY) { __wfe(); // we don't bother to try to let lower priority tasks run } restore_interrupts(save); lockout_state[other_core_num] = FREERTOS_LOCKOUT_LOCKEE_DONE; __sev(); // bye bye vTaskDelete(NULL); } #endif static int default_enter_safe_zone_timeout_ms(__unused uint32_t timeout_ms) { int rc = PICO_OK; if (!use_irq_only()) { #if PICO_FLASH_SAFE_EXECUTE_USE_FREERTOS_SMP // Note that whilst taskENTER_CRITICAL sounds promising (and on non SMP it disabled IRQs), on SMP // it only prevents the other core from also entering a critical section. // Therefore, we must do our own handshake which starts a task on the other core and have it disable interrupts uint core_num = get_core_num(); // create at low priority TaskHandle_t task_handle; if (pdPASS != xTaskCreate(flash_lockout_task, "flash lockout", configMINIMAL_STACK_SIZE, (void *)core_num, 0, &task_handle)) { return PICO_ERROR_INSUFFICIENT_RESOURCES; } lockout_state[core_num] = FREERTOS_LOCKOUT_LOCKER_WAITING; __sev(); // bind to other core vTaskCoreAffinitySet(task_handle, 1u << (core_num ^ 1)); // and make it super high priority vTaskPrioritySet(task_handle, configMAX_PRIORITIES -1); absolute_time_t until = make_timeout_time_ms(timeout_ms); while (lockout_state[core_num] != FREERTOS_LOCKOUT_LOCKEE_READY && !time_reached(until)) { __wfe(); // we don't bother to try to let lower priority tasks run } if (lockout_state[core_num] != FREERTOS_LOCKOUT_LOCKEE_READY) { lockout_state[core_num] = FREERTOS_LOCKOUT_LOCKER_DONE; rc = PICO_ERROR_TIMEOUT; } // todo we may get preempted here, but I think that is OK unless what is pre-empts requires // the other core to be running. #elif PICO_FLASH_SAFE_EXECUTE_PICO_SUPPORT_MULTICORE_LOCKOUT // we cannot mix multicore_lockout and FreeRTOS as they both use the multicore FIFO... // the user, will have to roll their own mechanism in this case. #if LIB_FREERTOS_KERNEL #if PICO_FLASH_ASSERT_ON_UNSAFE assert(false); // we expect the other core to have been initialized via flash_safe_execute_core_init() // unless PICO_FLASH_ASSUME_COREX_SAFE is set #endif rc = PICO_ERROR_NOT_PERMITTED; #else // !LIB_FREERTOS_KERNEL if (multicore_lockout_victim_is_initialized(get_core_num()^1)) { if (!multicore_lockout_start_timeout_us(timeout_ms * 1000ull)) { rc = PICO_ERROR_TIMEOUT; } } else { #if PICO_FLASH_ASSERT_ON_UNSAFE assert(false); // we expect the other core to have been initialized via flash_safe_execute_core_init() // unless PICO_FLASH_ASSUME_COREX_SAFE is set #endif rc = PICO_ERROR_NOT_PERMITTED; } #endif // !LIB_FREERTOS_KERNEL #else // no support for making other core safe provided, so fall through to irq // note this is the case for a regular single core program #endif } if (rc == PICO_OK) { // we always want to disable IRQs on our core irq_state[get_core_num()] = save_and_disable_interrupts(); } return rc; } static int default_exit_safe_zone_timeout_ms(__unused uint32_t timeout_ms) { // assume if we're exiting we're called then entry happened successfully restore_interrupts(irq_state[get_core_num()]); if (!use_irq_only()) { #if PICO_FLASH_SAFE_EXECUTE_USE_FREERTOS_SMP uint core_num = get_core_num(); lockout_state[core_num] = FREERTOS_LOCKOUT_LOCKER_DONE; __sev(); absolute_time_t until = make_timeout_time_ms(timeout_ms); while (lockout_state[core_num] != FREERTOS_LOCKOUT_LOCKEE_DONE && !time_reached(until)) { __wfe(); // we don't bother to try to let lower priority tasks run } if (lockout_state[core_num] != FREERTOS_LOCKOUT_LOCKEE_DONE) { return PICO_ERROR_TIMEOUT; } #elif PICO_FLASH_SAFE_EXECUTE_PICO_SUPPORT_MULTICORE_LOCKOUT return multicore_lockout_end_timeout_us(timeout_ms * 1000ull) ? PICO_OK : PICO_ERROR_TIMEOUT; #endif } return PICO_OK; } ================================================ FILE: pico-sdk/src/rp2_common/pico_flash/include/pico/flash.h ================================================ /* * Copyright (c) 2023 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_FLASH_H #define _PICO_FLASH_H #include "pico.h" #include "hardware/flash.h" #include "pico/time.h" /** \file pico/flash.h * \defgroup pico_flash pico_flash * * High level flash API * * Flash cannot be erased or written to when in XIP mode. However the system cannot directly access memory in the flash * address space when not in XIP mode. * * It is therefore critical that no code or data is being read from flash while flash is been written or erased. * * If only one core is being used, then the problem is simple - just disable interrupts; however if code is running on * the other core, then it has to be asked, nicely, to avoid flash for a bit. This is hard to do if you don't have * complete control of the code running on that core at all times. * * This library provides a \ref flash_safe_execute method which calls a function back having sucessfully gotten * into a state where interrupts are disabled, and the other core is not executing or reading from flash. * * How it does this is dependent on the supported environment (Free RTOS SMP or pico_multicore). Additionally * the user can provide their own mechanism by providing a strong definition of \ref get_flash_safety_helper(). * * Using the default settings, flash_safe_execute will only call the callback function if the state is safe * otherwise returning an error (or an assert depending on \ref PICO_FLASH_ASSERT_ON_UNSAFE). * * There are conditions where safety would not be guaranteed: * * 1. FreeRTOS smp with `configNUM_CORES=1` - FreeRTOS still uses pico_multicore in this case, so \ref flash_safe_execute * cannot know what the other core is doing, and there is no way to force code execution between a FreeRTOS core * and a non FreeRTOS core. * 2. FreeRTOS non SMP with pico_multicore - Again, there is no way to force code execution between a FreeRTOS core and * a non FreeRTOS core. * 3. pico_multicore without \ref flash_safe_execute_core_init() having been called on the other core - The * \ref flash_safe_execute method does not know if code is executing on the other core, so it has to assume it is. Either * way, it is not able to intervene if \ref flash_safe_execute_core_init() has not been called on the other core. * * Fortunately, all is not lost in this situation, you may: * * * Set \ref PICO_FLASH_ASSUME_CORE0_SAFE=1 to explicitly say that core 0 is never using flash. * * Set \ref PICO_FLASH_ASSUME_CORE1_SAFE=1 to explicitly say that core 1 is never using flash. */ #ifdef __cplusplus extern "C" { #endif /** * Initialize a core such that the other core can lock it out during \ref flash_safe_execute. * \ingroup pico_flash * * \note This is not necessary for FreeRTOS SMP, but should be used when launching via \ref multicore_launch_core1 * \return true on success; there is no need to call \ref flash_safe_execute_core_deinit() on failure. */ bool flash_safe_execute_core_init(void); /** * De-initialize work done by \ref flash_safe_execute_core_init * \ingroup pico_flash * \return true on success */ bool flash_safe_execute_core_deinit(void); /** * Execute a function with IRQs disabled and with the other core also not executing/reading flash * \ingroup pico_flash * * \param func the function to call * \param param the parameter to pass to the function * \param enter_exit_timeout_ms the timeout for each of the enter/exit phases when coordinating with the other core * * \return PICO_OK on success (the function will have been called). * PICO_TIMEOUT on timeout (the function may have been called). * PICO_ERROR_NOT_PERMITTED if safe execution is not possible (the function will not have been called). * PICO_ERROR_INSUFFICIENT_RESOURCES if the method fails due to dynamic resource exhaustion (the function will not have been called) * \note if \ref PICO_FLASH_ASSERT_ON_UNSAFE is 1, this function will assert in debug mode vs returning * PICO_ERROR_NOT_PERMITTED */ int flash_safe_execute(void (*func)(void *), void *param, uint32_t enter_exit_timeout_ms); // PICO_CONFIG: PICO_FLASH_ASSERT_ON_UNSAFE, Assert in debug mode rather than returning an error if flash_safe_execute cannot guarantee safety to catch bugs early, type=bool, default=1, group=pico_flash #ifndef PICO_FLASH_ASSERT_ON_UNSAFE #define PICO_FLASH_ASSERT_ON_UNSAFE 1 #endif // PICO_CONFIG: PICO_FLASH_ASSUME_CORE0_SAFE, Assume that core 0 will never be accessing flash and so doesn't need to be considered during flash_safe_execute, type=bool, default=0, group=pico_flash #ifndef PICO_FLASH_ASSUME_CORE0_SAFE #define PICO_FLASH_ASSUME_CORE0_SAFE 0 #endif // PICO_CONFIG: PICO_FLASH_ASSUME_CORE1_SAFE, Assume that core 1 will never be accessing flash and so doesn't need to be considered during flash_safe_execute, type=bool, default=0, group=pico_flash #ifndef PICO_FLASH_ASSUME_CORE1_SAFE #define PICO_FLASH_ASSUME_CORE1_SAFE 0 #endif // PICO_CONFIG: PICO_FLASH_SAFE_EXECUTE_SUPPORT_FREERTOS_SMP, Support using FreeRTOS SMP to make the other core safe during flash_safe_execute, type=bool, default=1 when using FreeRTOS SMP, group=pico_flash #ifndef PICO_FLASH_SAFE_EXECUTE_SUPPORT_FREERTOS_SMP #if LIB_FREERTOS_KERNEL && FREE_RTOS_KERNEL_SMP // set by RP2040 SMP port #define PICO_FLASH_SAFE_EXECUTE_SUPPORT_FREERTOS_SMP 1 #endif #endif // PICO_CONFIG: PICO_FLASH_SAFE_EXECUTE_PICO_SUPPORT_MULTICORE_LOCKOUT, Support using multicore_lockout functions to make the other core safe during flash_safe_execute, type=bool, default=1 when using pico_multicore, group=pico_flash #ifndef PICO_FLASH_SAFE_EXECUTE_PICO_SUPPORT_MULTICORE_LOCKOUT #if LIB_PICO_MULTICORE #define PICO_FLASH_SAFE_EXECUTE_PICO_SUPPORT_MULTICORE_LOCKOUT 1 #endif #endif typedef struct { bool (*core_init_deinit)(bool init); int (*enter_safe_zone_timeout_ms)(uint32_t timeout_ms); int (*exit_safe_zone_timeout_ms)(uint32_t timeout_ms); } flash_safety_helper_t; /** * Internal method to return the flash safety helper implementation. * \ingroup pico_flash * * Advanced users can provide their own implementation of this function to perform * different inter-core coordination before disabling XIP mode. * * @return the \ref flash_safety_helper_t */ flash_safety_helper_t *get_flash_safety_helper(void); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_float/CMakeLists.txt ================================================ if (NOT TARGET pico_float) # library to be depended on - we make this depend on particular implementations using per target generator expressions pico_add_library(pico_float) # no custom implementation; falls thru to compiler pico_add_library(pico_float_compiler) target_include_directories(pico_float_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) # add alias "default" which is just rom. add_library(pico_float_default INTERFACE) target_link_libraries(pico_float_default INTERFACE pico_float_pico) set(PICO_DEFAULT_FLOAT_IMPL pico_float_default) target_link_libraries(pico_float INTERFACE $>,$,${PICO_DEFAULT_FLOAT_IMPL}>) pico_add_library(pico_float_pico) target_sources(pico_float_pico INTERFACE ${CMAKE_CURRENT_LIST_DIR}/float_aeabi.S ${CMAKE_CURRENT_LIST_DIR}/float_init_rom.c ${CMAKE_CURRENT_LIST_DIR}/float_math.c ${CMAKE_CURRENT_LIST_DIR}/float_v1_rom_shim.S ) target_link_libraries(pico_float_pico INTERFACE pico_bootrom pico_float_headers hardware_divider) pico_add_library(pico_float_none) target_sources(pico_float_none INTERFACE ${CMAKE_CURRENT_LIST_DIR}/float_none.S ) target_link_libraries(pico_float_none INTERFACE pico_float_headers) function(wrap_float_functions TARGET) pico_wrap_function(${TARGET} __aeabi_fadd) pico_wrap_function(${TARGET} __aeabi_fdiv) pico_wrap_function(${TARGET} __aeabi_fmul) pico_wrap_function(${TARGET} __aeabi_frsub) pico_wrap_function(${TARGET} __aeabi_fsub) pico_wrap_function(${TARGET} __aeabi_cfcmpeq) pico_wrap_function(${TARGET} __aeabi_cfrcmple) pico_wrap_function(${TARGET} __aeabi_cfcmple) pico_wrap_function(${TARGET} __aeabi_fcmpeq) pico_wrap_function(${TARGET} __aeabi_fcmplt) pico_wrap_function(${TARGET} __aeabi_fcmple) pico_wrap_function(${TARGET} __aeabi_fcmpge) pico_wrap_function(${TARGET} __aeabi_fcmpgt) pico_wrap_function(${TARGET} __aeabi_fcmpun) pico_wrap_function(${TARGET} __aeabi_i2f) pico_wrap_function(${TARGET} __aeabi_l2f) pico_wrap_function(${TARGET} __aeabi_ui2f) pico_wrap_function(${TARGET} __aeabi_ul2f) pico_wrap_function(${TARGET} __aeabi_f2iz) pico_wrap_function(${TARGET} __aeabi_f2lz) pico_wrap_function(${TARGET} __aeabi_f2uiz) pico_wrap_function(${TARGET} __aeabi_f2ulz) pico_wrap_function(${TARGET} __aeabi_f2d) pico_wrap_function(${TARGET} sqrtf) pico_wrap_function(${TARGET} cosf) pico_wrap_function(${TARGET} sinf) pico_wrap_function(${TARGET} tanf) pico_wrap_function(${TARGET} atan2f) pico_wrap_function(${TARGET} expf) pico_wrap_function(${TARGET} logf) pico_wrap_function(${TARGET} ldexpf) pico_wrap_function(${TARGET} copysignf) pico_wrap_function(${TARGET} truncf) pico_wrap_function(${TARGET} floorf) pico_wrap_function(${TARGET} ceilf) pico_wrap_function(${TARGET} roundf) pico_wrap_function(${TARGET} sincosf) # gnu pico_wrap_function(${TARGET} asinf) pico_wrap_function(${TARGET} acosf) pico_wrap_function(${TARGET} atanf) pico_wrap_function(${TARGET} sinhf) pico_wrap_function(${TARGET} coshf) pico_wrap_function(${TARGET} tanhf) pico_wrap_function(${TARGET} asinhf) pico_wrap_function(${TARGET} acoshf) pico_wrap_function(${TARGET} atanhf) pico_wrap_function(${TARGET} exp2f) pico_wrap_function(${TARGET} log2f) pico_wrap_function(${TARGET} exp10f) pico_wrap_function(${TARGET} log10f) pico_wrap_function(${TARGET} powf) pico_wrap_function(${TARGET} powintf) #gnu pico_wrap_function(${TARGET} hypotf) pico_wrap_function(${TARGET} cbrtf) pico_wrap_function(${TARGET} fmodf) pico_wrap_function(${TARGET} dremf) pico_wrap_function(${TARGET} remainderf) pico_wrap_function(${TARGET} remquof) pico_wrap_function(${TARGET} expm1f) pico_wrap_function(${TARGET} log1pf) pico_wrap_function(${TARGET} fmaf) endfunction() wrap_float_functions(pico_float_pico) wrap_float_functions(pico_float_none) macro(pico_set_float_implementation TARGET IMPL) get_target_property(target_type ${TARGET} TYPE) if ("EXECUTABLE" STREQUAL "${target_type}") set_target_properties(${TARGET} PROPERTIES PICO_TARGET_FLOAT_IMPL "pico_float_${IMPL}") else() message(FATAL_ERROR "float implementation must be set on executable not library") endif() endmacro() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_float/float_aeabi.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" #include "pico/bootrom/sf_table.h" #include "hardware/divider_helper.S" __pre_init __aeabi_float_init, 00020 pico_default_asm_setup .macro float_section name #if PICO_FLOAT_IN_RAM .section RAM_SECTION_NAME(\name), "ax" #else .section SECTION_NAME(\name), "ax" #endif .endm .macro float_wrapper_section func float_section WRAPPER_FUNC_NAME(\func) .endm .macro _float_wrapper_func x wrapper_func \x .endm .macro wrapper_func_f1 x _float_wrapper_func \x #if PICO_FLOAT_PROPAGATE_NANS mov ip, lr bl __check_nan_f1 mov lr, ip #endif .endm .macro wrapper_func_f2 x _float_wrapper_func \x #if PICO_FLOAT_PROPAGATE_NANS mov ip, lr bl __check_nan_f2 mov lr, ip #endif .endm .section .text #if PICO_FLOAT_PROPAGATE_NANS .thumb_func __check_nan_f1: movs r3, #1 lsls r3, #24 lsls r2, r0, #1 adds r2, r3 bhi 1f bx lr 1: bx ip .thumb_func __check_nan_f2: movs r3, #1 lsls r3, #24 lsls r2, r0, #1 adds r2, r3 bhi 1f lsls r2, r1, #1 adds r2, r3 bhi 2f bx lr 2: mov r0, r1 1: bx ip #endif .macro table_tail_call SF_TABLE_OFFSET #if PICO_FLOAT_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED #ifndef NDEBUG movs r3, #0 mov ip, r3 #endif #endif ldr r3, =sf_table ldr r3, [r3, #\SF_TABLE_OFFSET] bx r3 .endm .macro shimmable_table_tail_call SF_TABLE_OFFSET shim ldr r3, =sf_table ldr r3, [r3, #\SF_TABLE_OFFSET] #if PICO_FLOAT_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED mov ip, pc #endif bx r3 #if PICO_FLOAT_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED .byte \SF_TABLE_OFFSET, 0xdf .word \shim #endif .endm // note generally each function is in a separate section unless there is fall thru or branching between them // note fadd, fsub, fmul, fdiv are so tiny and just defer to rom so are lumped together so they can share constant pool // note functions are word aligned except where they are an odd number of linear instructions // float FUNC_NAME(__aeabi_fadd)(float, float) single-precision addition float_wrapper_section __aeabi_farithmetic // float FUNC_NAME(__aeabi_frsub)(float x, float y) single-precision reverse subtraction, y - x // frsub first because it is the only one that needs alignment .align 2 wrapper_func __aeabi_frsub eors r0, r1 eors r1, r0 eors r0, r1 // fall thru // float FUNC_NAME(__aeabi_fsub)(float x, float y) single-precision subtraction, x - y wrapper_func_f2 __aeabi_fsub #if PICO_FLOAT_PROPAGATE_NANS // we want to return nan for inf-inf or -inf - -inf, but without too much upfront cost mov r2, r0 eors r2, r1 bmi 1f // different signs push {r0, r1, lr} bl 1f b fdiv_fsub_nan_helper 1: #endif table_tail_call SF_TABLE_FSUB wrapper_func_f2 __aeabi_fadd table_tail_call SF_TABLE_FADD // float FUNC_NAME(__aeabi_fdiv)(float n, float d) single-precision division, n / d wrapper_func_f2 __aeabi_fdiv #if PICO_FLOAT_PROPAGATE_NANS push {r0, r1, lr} bl 1f b fdiv_fsub_nan_helper 1: #endif #if !PICO_DIVIDER_DISABLE_INTERRUPTS // to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty ldr r2, =(SIO_BASE) ldr r3, [r2, #SIO_DIV_CSR_OFFSET] lsrs r3, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY bcs fdiv_save_state #else // to avoid worrying about IRQs (or context switches), simply disable interrupts around call push {r4, lr} mrs r4, PRIMASK cpsid i bl fdiv_shim_call msr PRIMASK, r4 pop {r4, pc} #endif fdiv_shim_call: table_tail_call SF_TABLE_FDIV #if !PICO_DIVIDER_DISABLE_INTERRUPTS fdiv_save_state: save_div_state_and_lr bl fdiv_shim_call ldr r2, =(SIO_BASE) restore_div_state_and_return #endif fdiv_fsub_nan_helper: #if PICO_FLOAT_PROPAGATE_NANS pop {r1, r2} // check for infinite op infinite (or rather check for infinite result with both // operands being infinite) lsls r3, r0, #1 asrs r3, r3, #24 adds r3, #1 beq 2f pop {pc} 2: lsls r1, #1 asrs r1, r1, #24 lsls r2, #1 asrs r2, r2, #24 ands r1, r2 adds r1, #1 bne 3f // infinite to nan movs r1, #1 lsls r1, #22 orrs r0, r1 3: pop {pc} #endif // float FUNC_NAME(__aeabi_fmul)(float, float) single-precision multiplication wrapper_func_f2 __aeabi_fmul #if PICO_FLOAT_PROPAGATE_NANS push {r0, r1, lr} bl 1f pop {r1, r2} // check for multiplication of infinite by zero (or rather check for infinite result with either // operand 0) lsls r3, r0, #1 asrs r3, r3, #24 adds r3, #1 beq 2f pop {pc} 2: ands r1, r2 bne 3f // infinite to nan movs r1, #1 lsls r1, #22 orrs r0, r1 3: pop {pc} 1: #endif table_tail_call SF_TABLE_FMUL // void FUNC_NAME(__aeabi_cfrcmple)(float, float) reversed 3-way (<, =, ?>) compare [1], result in PSR ZC flags float_wrapper_section __aeabi_cfcmple .align 2 wrapper_func __aeabi_cfrcmple push {r0-r2, lr} eors r0, r1 eors r1, r0 eors r0, r1 b __aeabi_cfcmple_guts // NOTE these share an implementation as we have no excepting NaNs. // void FUNC_NAME(__aeabi_cfcmple)(float, float) 3-way (<, =, ?>) compare [1], result in PSR ZC flags // void FUNC_NAME(__aeabi_cfcmpeq)(float, float) non-excepting equality comparison [1], result in PSR ZC flags .align 2 wrapper_func __aeabi_cfcmple wrapper_func __aeabi_cfcmpeq push {r0-r2, lr} __aeabi_cfcmple_guts: lsls r2,r0,#1 lsrs r2,#24 beq 1f cmp r2,#0xff bne 2f lsls r2, r0, #9 bhi 3f 1: lsrs r0,#23 @ clear mantissa if denormal or infinite lsls r0,#23 2: lsls r2,r1,#1 lsrs r2,#24 beq 1f cmp r2,#0xff bne 2f lsls r2, r1, #9 bhi 3f 1: lsrs r1,#23 @ clear mantissa if denormal or infinite lsls r1,#23 2: movs r2,#1 @ initialise result eors r1,r0 bmi 2f @ opposite signs? then can proceed on basis of sign of x eors r1,r0 @ restore y bpl 1f cmp r1,r0 pop {r0-r2, pc} 1: cmp r0,r1 pop {r0-r2, pc} 2: orrs r1, r0 @ handle 0/-0 adds r1, r1 @ note this always sets C beq 3f mvns r0, r0 @ carry inverse of r0 sign adds r0, r0 3: pop {r0-r2, pc} // int FUNC_NAME(__aeabi_fcmpeq)(float, float) result (1, 0) denotes (=, ?<>) [2], use for C == and != float_wrapper_section __aeabi_fcmpeq .align 2 wrapper_func __aeabi_fcmpeq push {lr} bl __aeabi_cfcmpeq beq 1f movs r0, #0 pop {pc} 1: movs r0, #1 pop {pc} // int FUNC_NAME(__aeabi_fcmplt)(float, float) result (1, 0) denotes (<, ?>=) [2], use for C < float_wrapper_section __aeabi_fcmplt .align 2 wrapper_func __aeabi_fcmplt push {lr} bl __aeabi_cfcmple sbcs r0, r0 pop {pc} // int FUNC_NAME(__aeabi_fcmple)(float, float) result (1, 0) denotes (<=, ?>) [2], use for C <= float_wrapper_section __aeabi_fcmple .align 2 wrapper_func __aeabi_fcmple push {lr} bl __aeabi_cfcmple bls 1f movs r0, #0 pop {pc} 1: movs r0, #1 pop {pc} // int FUNC_NAME(__aeabi_fcmpge)(float, float) result (1, 0) denotes (>=, ?<) [2], use for C >= float_wrapper_section __aeabi_fcmpge .align 2 wrapper_func __aeabi_fcmpge push {lr} // because of NaNs it is better to reverse the args than the result bl __aeabi_cfrcmple bls 1f movs r0, #0 pop {pc} 1: movs r0, #1 pop {pc} // int FUNC_NAME(__aeabi_fcmpgt)(float, float) result (1, 0) denotes (>, ?<=) [2], use for C > float_wrapper_section __aeabi_fcmpgt wrapper_func __aeabi_fcmpgt push {lr} // because of NaNs it is better to reverse the args than the result bl __aeabi_cfrcmple sbcs r0, r0 pop {pc} // int FUNC_NAME(__aeabi_fcmpun)(float, float) result (1, 0) denotes (?, <=>) [2], use for C99 isunordered() float_wrapper_section __aeabi_fcmpun wrapper_func __aeabi_fcmpun movs r3, #1 lsls r3, #24 lsls r2, r0, #1 adds r2, r3 bhi 1f lsls r2, r1, #1 adds r2, r3 bhi 1f movs r0, #0 bx lr 1: movs r0, #1 bx lr // float FUNC_NAME(__aeabi_ui2f)(unsigned) unsigned to float (single precision) conversion float_wrapper_section __aeabi_ui2f wrapper_func __aeabi_ui2f subs r1, r1 cmp r0, #0 bne __aeabi_i2f_main mov r0, r1 bx lr float_wrapper_section __aeabi_i2f // float FUNC_NAME(__aeabi_i2f)(int) integer to float (single precision) conversion wrapper_func __aeabi_i2f lsrs r1, r0, #31 lsls r1, #31 bpl 1f negs r0, r0 1: cmp r0, #0 beq 7f __aeabi_i2f_main: mov ip, lr push {r0, r1} ldr r3, =sf_clz_func ldr r3, [r3] blx r3 pop {r1, r2} lsls r1, r0 subs r0, #158 negs r0, r0 adds r1,#0x80 @ rounding bcs 5f @ tripped carry? then have leading 1 in C as required (and result is even so can ignore sticky bits) lsls r3,r1,#24 @ check bottom 8 bits of r1 beq 6f @ in rounding-tie case? lsls r1,#1 @ remove leading 1 3: lsrs r1,#9 @ align mantissa lsls r0,#23 @ align exponent orrs r0,r2 @ assemble exponent and mantissa 4: orrs r0,r1 @ apply sign 1: bx ip 5: adds r0,#1 @ correct exponent offset b 3b 6: lsrs r1,#9 @ ensure even result lsls r1,#10 b 3b 7: bx lr // int FUNC_NAME(__aeabi_f2iz)(float) float (single precision) to integer C-style conversion [3] float_wrapper_section __aeabi_f2iz wrapper_func __aeabi_f2iz regular_func float2int_z lsls r1, r0, #1 lsrs r2, r1, #24 movs r3, #0x80 lsls r3, #24 cmp r2, #126 ble 1f subs r2, #158 bge 2f asrs r1, r0, #31 lsls r0, #9 lsrs r0, #1 orrs r0, r3 negs r2, r2 lsrs r0, r2 lsls r1, #1 adds r1, #1 muls r0, r1 bx lr 1: movs r0, #0 bx lr 2: lsrs r0, #31 adds r0, r3 subs r0, #1 bx lr cmn r0, r0 bcc float2int push {lr} lsls r0, #1 lsrs r0, #1 movs r1, #0 bl __aeabi_f2uiz cmp r0, #0 bmi 1f negs r0, r0 pop {pc} 1: movs r0, #128 lsls r0, #24 pop {pc} float_section float2int regular_func float2int shimmable_table_tail_call SF_TABLE_FLOAT2INT float2int_shim float_section float2fix regular_func float2fix shimmable_table_tail_call SF_TABLE_FLOAT2FIX float2fix_shim float_section float2ufix regular_func float2ufix table_tail_call SF_TABLE_FLOAT2UFIX // unsigned FUNC_NAME(__aeabi_f2uiz)(float) float (single precision) to unsigned C-style conversion [3] float_wrapper_section __aeabi_f2uiz wrapper_func __aeabi_f2uiz table_tail_call SF_TABLE_FLOAT2UINT float_section fix2float regular_func fix2float table_tail_call SF_TABLE_FIX2FLOAT float_section ufix2float regular_func ufix2float table_tail_call SF_TABLE_UFIX2FLOAT float_section fix642float regular_func fix642float shimmable_table_tail_call SF_TABLE_FIX642FLOAT fix642float_shim float_section ufix642float regular_func ufix642float shimmable_table_tail_call SF_TABLE_UFIX642FLOAT ufix642float_shim // float FUNC_NAME(__aeabi_l2f)(long long) long long to float (single precision) conversion float_wrapper_section __aeabi_l2f 1: ldr r2, =__aeabi_i2f bx r2 wrapper_func __aeabi_l2f asrs r2, r0, #31 cmp r1, r2 beq 1b shimmable_table_tail_call SF_TABLE_INT642FLOAT int642float_shim // float FUNC_NAME(__aeabi_l2f)(long long) long long to float (single precision) conversion float_wrapper_section __aeabi_ul2f 1: ldr r2, =__aeabi_ui2f bx r2 wrapper_func __aeabi_ul2f cmp r1, #0 beq 1b shimmable_table_tail_call SF_TABLE_UINT642FLOAT uint642float_shim // long long FUNC_NAME(__aeabi_f2lz)(float) float (single precision) to long long C-style conversion [3] float_wrapper_section __aeabi_f2lz wrapper_func __aeabi_f2lz regular_func float2int64_z cmn r0, r0 bcc float2int64 push {lr} lsls r0, #1 lsrs r0, #1 movs r1, #0 bl float2ufix64 cmp r1, #0 bmi 1f movs r2, #0 negs r0, r0 sbcs r2, r1 mov r1, r2 pop {pc} 1: movs r1, #128 lsls r1, #24 movs r0, #0 pop {pc} float_section float2int64 regular_func float2int64 shimmable_table_tail_call SF_TABLE_FLOAT2INT64 float2int64_shim float_section float2fix64 regular_func float2fix64 shimmable_table_tail_call SF_TABLE_FLOAT2FIX64 float2fix64_shim // unsigned long long FUNC_NAME(__aeabi_f2ulz)(float) float to unsigned long long C-style conversion [3] float_wrapper_section __aeabi_f2ulz wrapper_func __aeabi_f2ulz shimmable_table_tail_call SF_TABLE_FLOAT2UINT64 float2uint64_shim float_section float2ufix64 regular_func float2ufix64 shimmable_table_tail_call SF_TABLE_FLOAT2UFIX64 float2ufix64_shim float_wrapper_section __aeabi_f2d 1: #if PICO_FLOAT_PROPAGATE_NANS // copy sign bit and 25 NAN id bits into sign bit and significant ID bits, also setting the high id bit asrs r1, r0, #3 movs r2, #0xf lsls r2, #27 orrs r1, r2 lsls r0, #25 bx lr #endif wrapper_func __aeabi_f2d #if PICO_FLOAT_PROPAGATE_NANS movs r3, #1 lsls r3, #24 lsls r2, r0, #1 adds r2, r3 bhi 1b #endif shimmable_table_tail_call SF_TABLE_FLOAT2DOUBLE float2double_shim float_wrapper_section sqrtf wrapper_func_f1 sqrtf #if PICO_FLOAT_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED // check for negative asrs r1, r0, #23 bmi 1f #endif table_tail_call SF_TABLE_FSQRT #if PICO_FLOAT_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED 1: mvns r0, r1 cmp r0, #255 bne 2f // -0 or -Denormal return -0 (0x80000000) lsls r0, #31 bx lr 2: // return -Inf (0xff800000) asrs r0, r1, #31 lsls r0, #23 bx lr #endif float_wrapper_section cosf // note we don't use _f1 since we do an infinity/nan check for outside of range wrapper_func cosf // rom version only works for -128 < angle < 128 lsls r1, r0, #1 lsrs r1, #24 cmp r1, #127 + 7 bge 1f 2: table_tail_call SF_TABLE_FCOS 1: #if PICO_FLOAT_PROPAGATE_NANS // also check for infinites cmp r1, #255 bne 3f // infinite to nan movs r1, #1 lsls r1, #22 orrs r0, r1 bx lr 3: #endif ldr r1, =0x40c90fdb // 2 * M_PI push {lr} bl remainderf pop {r1} mov lr, r1 b 2b float_wrapper_section sinf // note we don't use _f1 since we do an infinity/nan check for outside of range wrapper_func sinf // rom version only works for -128 < angle < 128 lsls r1, r0, #1 lsrs r1, #24 cmp r1, #127 + 7 bge 1f 2: table_tail_call SF_TABLE_FSIN 1: #if PICO_FLOAT_PROPAGATE_NANS // also check for infinites cmp r1, #255 bne 3f // infinite to nan movs r1, #1 lsls r1, #22 orrs r0, r1 bx lr 3: #endif ldr r1, =0x40c90fdb // 2 * M_PI push {lr} bl remainderf pop {r1} mov lr, r1 b 2b float_wrapper_section sincosf // note we don't use _f1 since we do an infinity/nan check for outside of range wrapper_func sincosf push {r1, r2, lr} // rom version only works for -128 < angle < 128 lsls r3, r0, #1 lsrs r3, #24 cmp r3, #127 + 7 bge 3f 2: ldr r3, =sf_table ldr r3, [r3, #SF_TABLE_FSIN] blx r3 pop {r2, r3} str r0, [r2] str r1, [r3] pop {pc} #if PICO_FLOAT_PROPAGATE_NANS .align 2 pop {pc} #endif 3: #if PICO_FLOAT_PROPAGATE_NANS // also check for infinites cmp r3, #255 bne 4f // infinite to nan movs r3, #1 lsls r3, #22 orrs r0, r3 str r0, [r1] str r0, [r2] add sp, #12 bx lr 4: #endif ldr r1, =0x40c90fdb // 2 * M_PI push {lr} bl remainderf pop {r1} mov lr, r1 b 2b float_wrapper_section tanf // note we don't use _f1 since we do an infinity/nan check for outside of range wrapper_func tanf // rom version only works for -128 < angle < 128 lsls r1, r0, #1 lsrs r1, #24 cmp r1, #127 + 7 bge ftan_out_of_range ftan_in_range: #if !PICO_DIVIDER_DISABLE_INTERRUPTS // to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty ldr r2, =(SIO_BASE) ldr r3, [r2, #SIO_DIV_CSR_OFFSET] lsrs r3, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY bcs ftan_save_state #else // to avoid worrying about IRQs (or context switches), simply disable interrupts around call push {r4, lr} mrs r4, PRIMASK cpsid i bl ftan_shim_call msr PRIMASK, r4 pop {r4, pc} #endif ftan_shim_call: table_tail_call SF_TABLE_FTAN #if !PICO_DIVIDER_DISABLE_INTERRUPTS ftan_save_state: save_div_state_and_lr bl ftan_shim_call ldr r2, =(SIO_BASE) restore_div_state_and_return #endif ftan_out_of_range: #if PICO_FLOAT_PROPAGATE_NANS // also check for infinites cmp r1, #255 bne 3f // infinite to nan movs r1, #1 lsls r1, #22 orrs r0, r1 bx lr 3: #endif ldr r1, =0x40c90fdb // 2 * M_PI push {lr} bl remainderf pop {r1} mov lr, r1 b ftan_in_range float_wrapper_section atan2f wrapper_func_f2 atan2f shimmable_table_tail_call SF_TABLE_FATAN2 fatan2_shim float_wrapper_section expf wrapper_func_f1 expf table_tail_call SF_TABLE_FEXP float_wrapper_section logf wrapper_func_f1 logf table_tail_call SF_TABLE_FLN ================================================ FILE: pico-sdk/src/rp2_common/pico_float/float_init_rom.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "pico/bootrom.h" #include "pico/bootrom/sf_table.h" // NOTE THIS FUNCTION TABLE IS NOT PUBLIC OR NECESSARILY COMPLETE... // IT IS ***NOT*** SAFE TO CALL THESE FUNCTION POINTERS FROM ARBITRARY CODE uint32_t sf_table[SF_TABLE_V2_SIZE / 2]; void __attribute__((weak)) *sf_clz_func; #if !(PICO_FLOAT_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED) static __attribute__((noreturn)) void missing_float_func_shim(void) { panic(""); } #endif void __aeabi_float_init(void) { int rom_version = rp2040_rom_version(); void *rom_table = rom_data_lookup(rom_table_code('S', 'F')); #if PICO_FLOAT_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED if (rom_version == 1) { memcpy(&sf_table, rom_table, SF_TABLE_V1_SIZE); extern void float_table_shim_on_use_helper(void); // todo replace NDEBUG with a more exclusive assertion guard #ifndef NDEBUG if (*(uint16_t *)0x29ee != 0x0fc4 || // this is packx *(uint16_t *)0x29c0 != 0x0dc2 || // this is upackx *(uint16_t *)0x2b96 != 0xb5c0 || // this is cordic_vec *(uint16_t *)0x2b18 != 0x2500 || // this is packretns *(uint16_t *)0x2acc != 0xb510 || // this is float2fix *(uint32_t *)0x2cfc != 0x6487ed51 // pi_q29 ) { panic(""); } #endif // this is a little tricky.. we only want to pull in a shim if the corresponding function // is called. to that end we include a SVC instruction with the table offset as the call number // followed by the shim function pointer inside the actual wrapper function. that way if the wrapper // function is garbage collected, so is the shim function. // // float_table_shim_on_use_helper expects this SVC instruction in the calling code soon after the address // pointed to by IP and patches the float_table entry with the real shim the first time the function is called. for(uint i=SF_TABLE_V1_SIZE/4; i= 2) { assert(*((uint8_t *)rom_table-2) * 4 >= SF_TABLE_V2_SIZE); memcpy(&sf_table, rom_table, SF_TABLE_V2_SIZE); } sf_clz_func = rom_func_lookup(ROM_FUNC_CLZ32); } ================================================ FILE: pico-sdk/src/rp2_common/pico_float/float_math.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/float.h" // opened a separate issue https://github.com/raspberrypi/pico-sdk/issues/166 to deal with these warnings if at all GCC_Pragma("GCC diagnostic push") GCC_Pragma("GCC diagnostic ignored \"-Wconversion\"") GCC_Pragma("GCC diagnostic ignored \"-Wsign-conversion\"") typedef uint32_t ui32; typedef int32_t i32; #define FPINF ( HUGE_VALF) #define FMINF (-HUGE_VALF) #define NANF ((float)NAN) #define PZERO (+0.0) #define MZERO (-0.0) #define PI 3.14159265358979323846 #define LOG2 0.69314718055994530941 // Unfortunately in double precision ln(10) is very close to half-way between to representable numbers #define LOG10 2.30258509299404568401 #define LOG2E 1.44269504088896340737 #define LOG10E 0.43429448190325182765 #define ONETHIRD 0.33333333333333333333 #define PIf 3.14159265358979323846f #define LOG2f 0.69314718055994530941f #define LOG2Ef 1.44269504088896340737f #define LOG10Ef 0.43429448190325182765f #define ONETHIRDf 0.33333333333333333333f #define FUNPACK(x,e,m) e=((x)>>23)&0xff,m=((x)&0x007fffff)|0x00800000 #define FUNPACKS(x,s,e,m) s=((x)>>31),FUNPACK((x),(e),(m)) typedef union { float f; ui32 ix; } float_ui32; static inline float ui322float(ui32 ix) { float_ui32 tmp; tmp.ix = ix; return tmp.f; } static inline ui32 float2ui32(float f) { float_ui32 tmp; tmp.f = f; return tmp.ix; } #if PICO_FLOAT_PROPAGATE_NANS static inline bool fisnan(float x) { ui32 ix=float2ui32(x); return ix * 2 > 0xff000000u; } #define check_nan_f1(x) if (fisnan((x))) return (x) #define check_nan_f2(x,y) if (fisnan((x))) return (x); else if (fisnan((y))) return (y); #else #define check_nan_f1(x) ((void)0) #define check_nan_f2(x,y) ((void)0) #endif static inline int fgetsignexp(float x) { ui32 ix=float2ui32(x); return (ix>>23)&0x1ff; } static inline int fgetexp(float x) { ui32 ix=float2ui32(x); return (ix>>23)&0xff; } static inline float fldexp(float x,int de) { ui32 ix=float2ui32(x),iy; int e; e=fgetexp(x); if(e==0||e==0xff) return x; e+=de; if(e<=0) iy=ix&0x80000000; // signed zero for underflow else if(e>=0xff) iy=(ix&0x80000000)|0x7f800000ULL; // signed infinity on overflow else iy=ix+((ui32)de<<23); return ui322float(iy); } float WRAPPER_FUNC(ldexpf)(float x, int de) { check_nan_f1(x); return fldexp(x, de); } static inline float fcopysign(float x,float y) { ui32 ix=float2ui32(x),iy=float2ui32(y); ix=((ix&0x7fffffff)|(iy&0x80000000)); return ui322float(ix); } float WRAPPER_FUNC(copysignf)(float x, float y) { check_nan_f2(x,y); return fcopysign(x, y); } static inline int fiszero(float x) { return fgetexp (x)==0; } //static inline int fispzero(float x) { return fgetsignexp(x)==0; } //static inline int fismzero(float x) { return fgetsignexp(x)==0x100; } static inline int fisinf(float x) { return fgetexp (x)==0xff; } static inline int fispinf(float x) { return fgetsignexp(x)==0xff; } static inline int fisminf(float x) { return fgetsignexp(x)==0x1ff; } static inline int fisint(float x) { ui32 ix=float2ui32(x),m; int e=fgetexp(x); if(e==0) return 1; // 0 is an integer e-=0x7f; // remove exponent bias if(e<0) return 0; // |x|<1 e=23-e; // bit position in mantissa with significance 1 if(e<=0) return 1; // |x| large, so must be an integer m=(1<>e)&1; } static inline int fisstrictneg(float x) { ui32 ix=float2ui32(x); if(fiszero(x)) return 0; return ix>>31; } static inline int fisneg(float x) { ui32 ix=float2ui32(x); return ix>>31; } static inline float fneg(float x) { ui32 ix=float2ui32(x); ix^=0x80000000; return ui322float(ix); } static inline int fispo2(float x) { ui32 ix=float2ui32(x); if(fiszero(x)) return 0; if(fisinf(x)) return 0; ix&=0x007fffff; return ix==0; } static inline float fnan_or(float x) { #if PICO_FLOAT_PROPAGATE_NANS return NANF; #else return x; #endif } float WRAPPER_FUNC(truncf)(float x) { check_nan_f1(x); ui32 ix=float2ui32(x),m; int e=fgetexp(x); e-=0x7f; // remove exponent bias if(e<0) { // |x|<1 ix&=0x80000000; return ui322float(ix); } e=23-e; // bit position in mantissa with significance 1 if(e<=0) return x; // |x| large, so must be an integer m=(1<=4+0x7f) { // |x|>=16? if(!fisneg(x)) return 1; // 1 << exp 2x; avoid generating infinities later else return -1; // 1 >> exp 2x } u=expf(fldexp(x,1)); return (u-1.0f)/(u+1.0f); } float WRAPPER_FUNC(asinhf)(float x) { check_nan_f1(x); int e; e=fgetexp(x); if(e>=16+0x7f) { // |x|>=2^16? if(!fisneg(x)) return logf( x )+LOG2f; // 1/x^2 << 1 else return fneg(logf(fneg(x))+LOG2f); // 1/x^2 << 1 } if(x>0) return (float)log(sqrt((double)x*(double)x+1.0)+(double)x); else return fneg((float)log(sqrt((double)x*(double)x+1.0)-(double)x)); } float WRAPPER_FUNC(acoshf)(float x) { check_nan_f1(x); int e; if(fisneg(x)) x=fneg(x); e=fgetexp(x); if(e>=16+0x7f) return logf(x)+LOG2f; // |x|>=2^16? return (float)log(sqrt(((double)x+1.0)*((double)x-1.0))+(double)x); } float WRAPPER_FUNC(atanhf)(float x) { check_nan_f1(x); return fldexp(logf((1.0f+x)/(1.0f-x)),-1); } float WRAPPER_FUNC(exp2f)(float x) { check_nan_f1(x); return (float)exp((double)x*LOG2); } float WRAPPER_FUNC(log2f)(float x) { check_nan_f1(x); return logf(x)*LOG2Ef; } float WRAPPER_FUNC(exp10f)(float x) { check_nan_f1(x); return (float)exp((double)x*LOG10); } float WRAPPER_FUNC(log10f)(float x) { check_nan_f1(x); return logf(x)*LOG10Ef; } float WRAPPER_FUNC(expm1f)(float x) { check_nan_f1(x); return (float)(exp((double)x)-1); } float WRAPPER_FUNC(log1pf)(float x) { check_nan_f1(x); return (float)(log(1+(double)x)); } float WRAPPER_FUNC(fmaf)(float x,float y,float z) { check_nan_f2(x,y); check_nan_f1(z); return (float)((double)x*(double)y+(double)z); } // has double rounding so not exact // general power, x>0 static inline float fpow_1(float x,float y) { return (float)exp(log((double)x)*(double)y); // using double-precision intermediates for better accuracy } static float fpow_int2(float x,int y) { float u; if(y==1) return x; u=fpow_int2(x,y/2); u*=u; if(y&1) u*=x; return u; } // for the case where x not zero or infinity, y small and not zero static inline float fpowint_1(float x,int y) { if(y<0) x=1.0f/x,y=-y; return fpow_int2(x,y); } // for the case where x not zero or infinity static float fpowint_0(float x,int y) { int e; if(fisneg(x)) { if(fisoddint(y)) return fneg(fpowint_0(fneg(x),y)); else return fpowint_0(fneg(x),y); } if(fispo2(x)) { e=fgetexp(x)-0x7f; if(y>=256) y= 255; // avoid overflow if(y<-256) y=-256; y*=e; return fldexp(1,y); } if(y==0) return 1; if(y>=-32&&y<=32) return fpowint_1(x,y); return fpow_1(x,y); } float WRAPPER_FUNC(powintf)(float x,int y) { GCC_Pragma("GCC diagnostic push") GCC_Pragma("GCC diagnostic ignored \"-Wfloat-equal\"") if(x==1.0f||y==0) return 1; if(x==0.0f) { if(y>0) { if(y&1) return x; else return 0; } if((y&1)) return fcopysign(FPINF,x); return FPINF; } GCC_Pragma("GCC diagnostic pop") check_nan_f1(x); if(fispinf(x)) { if(y<0) return 0; else return FPINF; } if(fisminf(x)) { if(y>0) { if((y&1)) return FMINF; else return FPINF; } if((y&1)) return MZERO; else return PZERO; } return fpowint_0(x,y); } // for the case where y is guaranteed a finite integer, x not zero or infinity static float fpow_0(float x,float y) { int e,p; if(fisneg(x)) { if(fisoddint(y)) return fneg(fpow_0(fneg(x),y)); else return fpow_0(fneg(x),y); } p=(int)y; if(fispo2(x)) { e=fgetexp(x)-0x7f; if(p>=256) p= 255; // avoid overflow if(p<-256) p=-256; p*=e; return fldexp(1,p); } if(p==0) return 1; if(p>=-32&&p<=32) return fpowint_1(x,p); return fpow_1(x,y); } float WRAPPER_FUNC(powf)(float x,float y) { GCC_Like_Pragma("GCC diagnostic push") GCC_Like_Pragma("GCC diagnostic ignored \"-Wfloat-equal\"") if(x==1.0f||fiszero(y)) return 1; check_nan_f2(x,y); if(x==-1.0f&&fisinf(y)) return 1; GCC_Like_Pragma("GCC diagnostic pop") if(fiszero(x)) { if(!fisneg(y)) { if(fisoddint(y)) return x; else return 0; } if(fisoddint(y)) return fcopysign(FPINF,x); return FPINF; } if(fispinf(x)) { if(fisneg(y)) return 0; else return FPINF; } if(fisminf(x)) { if(!fisneg(y)) { if(fisoddint(y)) return FMINF; else return FPINF; } if(fisoddint(y)) return MZERO; else return PZERO; } if(fispinf(y)) { if(fgetexp(x)<0x7f) return PZERO; else return FPINF; } if(fisminf(y)) { if(fgetexp(x)<0x7f) return FPINF; else return PZERO; } if(fisint(y)) return fpow_0(x,y); if(fisneg(x)) return FPINF; return fpow_1(x,y); } float WRAPPER_FUNC(hypotf)(float x,float y) { check_nan_f2(x,y); int ex,ey; ex=fgetexp(x); ey=fgetexp(y); if(ex>=0x7f+50||ey>=0x7f+50) { // overflow, or nearly so x=fldexp(x,-70),y=fldexp(y,-70); return fldexp(sqrtf(x*x+y*y), 70); } else if(ex<=0x7f-50&&ey<=0x7f-50) { // underflow, or nearly so x=fldexp(x, 70),y=fldexp(y, 70); return fldexp(sqrtf(x*x+y*y),-70); } return sqrtf(x*x+y*y); } float WRAPPER_FUNC(cbrtf)(float x) { check_nan_f1(x); int e; if(fisneg(x)) return fneg(cbrtf(fneg(x))); if(fiszero(x)) return fcopysign(PZERO,x); e=fgetexp(x)-0x7f; e=(e*0x5555+0x8000)>>16; // ~e/3, rounded x=fldexp(x,-e*3); x=expf(logf(x)*ONETHIRDf); return fldexp(x,e); } // reduces mx*2^e modulo my, returning bottom bits of quotient at *pquo // 2^23<=|mx|,my<2^24, e>=0; 0<=result0) { r=0xffffffffU/(ui32)(my>>7); // reciprocal estimate Q16 } while(e>0) { s=e; if(s>12) s=12; // gain up to 12 bits on each iteration q=(mx>>9)*r; // Q30 q=((q>>(29-s))+1)>>1; // Q(s), rounded mx=(mx<=my) mx-=my,quo++; // when e==0 mx can be nearly as big as 2my if(mx>=my) mx-=my,quo++; if(mx<0) mx+=my,quo--; if(mx<0) mx+=my,quo--; if(pquo) *pquo=quo; return mx; } float WRAPPER_FUNC(fmodf)(float x,float y) { check_nan_f2(x,y); ui32 ix=float2ui32(x),iy=float2ui32(y); int sx,ex,ey; i32 mx,my; FUNPACKS(ix,sx,ex,mx); FUNPACK(iy,ey,my); if(ex==0xff) { return fnan_or(FPINF); } if(ey==0) return FPINF; if(ex==0) { if(!fisneg(x)) return PZERO; return MZERO; } if(ex|y|/2 mx-=my+my; ey--; q=1; } else { // x<-|y|/2 mx=my+my-mx; ey--; q=-1; } } else { if(sx) mx=-mx; mx=frem_0(mx,my,ex-ey,&q); if(mx+mx>my || (mx+mx==my&&(q&1)) ) { // |x|>|y|/2, or equality and an odd quotient? mx-=my; q++; } } if(sy) q=-q; if(quo) *quo=q; return fix2float(mx,0x7f-ey+23); } float WRAPPER_FUNC(dremf)(float x,float y) { check_nan_f2(x,y); return remquof(x,y,0); } float WRAPPER_FUNC(remainderf)(float x,float y) { check_nan_f2(x,y); return remquof(x,y,0); } GCC_Pragma("GCC diagnostic pop") // conversion ================================================ FILE: pico-sdk/src/rp2_common/pico_float/float_none.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" #include "pico/bootrom/sf_table.h" pico_default_asm_setup wrapper_func __aeabi_fadd wrapper_func __aeabi_fdiv wrapper_func __aeabi_fmul wrapper_func __aeabi_frsub wrapper_func __aeabi_fsub wrapper_func __aeabi_cfcmpeq wrapper_func __aeabi_cfrcmple wrapper_func __aeabi_cfcmple wrapper_func __aeabi_fcmpeq wrapper_func __aeabi_fcmplt wrapper_func __aeabi_fcmple wrapper_func __aeabi_fcmpge wrapper_func __aeabi_fcmpgt wrapper_func __aeabi_fcmpun wrapper_func __aeabi_i2f wrapper_func __aeabi_l2f wrapper_func __aeabi_ui2f wrapper_func __aeabi_ul2f wrapper_func __aeabi_f2iz wrapper_func __aeabi_f2lz wrapper_func __aeabi_f2uiz wrapper_func __aeabi_f2ulz wrapper_func __aeabi_f2d wrapper_func sqrtf wrapper_func cosf wrapper_func sinf wrapper_func tanf wrapper_func atan2f wrapper_func expf wrapper_func logf wrapper_func ldexpf wrapper_func copysignf wrapper_func truncf wrapper_func floorf wrapper_func ceilf wrapper_func roundf wrapper_func sincosf wrapper_func asinf wrapper_func acosf wrapper_func atanf wrapper_func sinhf wrapper_func coshf wrapper_func tanhf wrapper_func asinhf wrapper_func acoshf wrapper_func atanhf wrapper_func exp2f wrapper_func log2f wrapper_func exp10f wrapper_func log10f wrapper_func powf wrapper_func powintf wrapper_func hypotf wrapper_func cbrtf wrapper_func fmodf wrapper_func dremf wrapper_func remainderf wrapper_func remquof wrapper_func expm1f wrapper_func log1pf wrapper_func fmaf push {lr} // keep stack trace sane ldr r0, =str bl panic str: .asciz "float support is disabled" ================================================ FILE: pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" #if PICO_FLOAT_SUPPORT_ROM_V1 && PICO_RP2040_B0_SUPPORTED #ifndef PICO_FLOAT_IN_RAM #define PICO_FLOAT_IN_RAM 0 #endif pico_default_asm_setup .macro float_section name // todo separate flag for shims? #if PICO_FLOAT_IN_RAM .section RAM_SECTION_NAME(\name), "ax" #else .section SECTION_NAME(\name), "ax" #endif .endm float_section float_table_shim_on_use_helper regular_func float_table_shim_on_use_helper push {r0-r2, lr} mov r0, ip #ifndef NDEBUG // sanity check to make sure we weren't called by non (shimmable_) table_tail_call macro cmp r0, #0 bne 1f bkpt #0 #endif 1: ldrh r1, [r0] lsrs r2, r1, #8 adds r0, #2 cmp r2, #0xdf bne 1b uxtb r1, r1 // r1 holds table offset lsrs r2, r0, #2 bcc 1f // unaligned ldrh r2, [r0, #0] ldrh r0, [r0, #2] lsls r0, #16 orrs r0, r2 b 2f 1: ldr r0, [r0] 2: ldr r2, =sf_table str r0, [r2, r1] str r0, [sp, #12] pop {r0-r2, pc} float_section 642float_shims @ convert uint64 to float, rounding regular_func uint642float_shim movs r2,#0 @ fall through @ convert unsigned 64-bit fix to float, rounding; number of r0:r1 bits after point in r2 regular_func ufix642float_shim push {r4,r5,r14} cmp r1,#0 bpl 3f @ positive? we can use signed code lsls r5,r1,#31 @ contribution to sticky bits orrs r5,r0 lsrs r0,r1,#1 subs r2,#1 b 4f @ convert int64 to float, rounding regular_func int642float_shim movs r2,#0 @ fall through @ convert signed 64-bit fix to float, rounding; number of r0:r1 bits after point in r2 regular_func fix642float_shim push {r4,r5,r14} 3: movs r5,r0 orrs r5,r1 beq ret_pop45 @ zero? return +0 asrs r5,r1,#31 @ sign bits 2: asrs r4,r1,#24 @ try shifting 7 bits at a time cmp r4,r5 bne 1f @ next shift will overflow? lsls r1,#7 lsrs r4,r0,#25 orrs r1,r4 lsls r0,#7 adds r2,#7 b 2b 1: movs r5,r0 movs r0,r1 4: negs r2,r2 adds r2,#32+29 // bl packx ldr r1, =0x29ef // packx blx r1 ret_pop45: pop {r4,r5,r15} float_section fatan2_shim regular_func fatan2_shim push {r4,r5,r14} ldr r4, =0x29c1 // unpackx mov ip, r4 @ unpack arguments and shift one down to have common exponent blx ip mov r4,r0 mov r0,r1 mov r1,r4 mov r4,r2 mov r2,r3 mov r3,r4 blx ip lsls r0,r0,#5 @ Q28 lsls r1,r1,#5 @ Q28 adds r4,r2,r3 @ this is -760 if both arguments are 0 and at least -380-126=-506 otherwise asrs r4,#9 adds r4,#1 bmi 2f @ force y to 0 proper, so result will be zero subs r4,r2,r3 @ calculate shift bge 1f @ ex>=ey? negs r4,r4 @ make shift positive asrs r0,r4 cmp r4,#28 blo 3f asrs r0,#31 b 3f 1: asrs r1,r4 cmp r4,#28 blo 3f 2: @ here |x|>>|y| or both x and y are ±0 cmp r0,#0 bge 4f @ x positive, return signed 0 ldr r3, =0x2cfc @ &pi_q29, circular coefficients ldr r0,[r3] @ x negative, return +/- pi asrs r1,#31 eors r0,r1 b 7f 4: asrs r0,r1,#31 b 7f 3: movs r2,#0 @ initial angle ldr r3, =0x2cfc @ &pi_q29, circular coefficients cmp r0,#0 @ x negative bge 5f negs r0,r0 @ rotate to 1st/4th quadrants negs r1,r1 ldr r2,[r3] @ pi Q29 5: movs r4,#1 @ m=1 ldr r5, =0x2b97 @ cordic_vec blx r5 @ also produces magnitude (with scaling factor 1.646760119), which is discarded mov r0,r2 @ result here is -pi/2..3pi/2 Q29 @ asrs r2,#29 @ subs r0,r2 ldr r3, =0x2cfc @ &pi_q29, circular coefficients ldr r2,[r3] @ pi Q29 adds r4,r0,r2 @ attempt to fix -3pi/2..-pi case bcs 6f @ -pi/2..0? leave result as is subs r4,r0,r2 @ pi: take off 2pi 6: subs r0,#1 @ fiddle factor so atan2(0,1)==0 7: movs r2,#0 @ exponent for pack ldr r3, =0x2b19 bx r3 float_section float232_shims regular_func float2int_shim movs r1,#0 @ fall through regular_func float2fix_shim // check for -0 or -denormal upfront asrs r2, r0, #23 adds r2, #128 adds r2, #128 beq 1f // call original ldr r2, =0x2acd bx r2 1: movs r0, #0 bx lr float_section float264_shims regular_func float2int64_shim movs r1,#0 @ and fall through regular_func float2fix64_shim push {r14} bl f2fix b d2f64_a regular_func float2uint64_shim movs r1,#0 @ and fall through regular_func float2ufix64_shim asrs r3,r0,#23 @ negative? return 0 bmi ret_dzero @ and fall through @ convert float in r0 to signed fixed point in r0:r1:r3, r1 places after point, rounding towards -Inf @ result clamped so that r3 can only be 0 or -1 @ trashes r12 .thumb_func f2fix: push {r4,r14} mov r12,r1 asrs r3,r0,#31 lsls r0,#1 lsrs r2,r0,#24 beq 1f @ zero? cmp r2,#0xff @ Inf? beq 2f subs r1,r2,#1 subs r2,#0x7f @ remove exponent bias lsls r1,#24 subs r0,r1 @ insert implied 1 eors r0,r3 subs r0,r3 @ top two's complement asrs r1,r0,#4 @ convert to double format lsls r0,#28 ldr r4, =d2fix_a bx r4 1: movs r0,#0 movs r1,r0 movs r3,r0 pop {r4,r15} 2: mvns r0,r3 @ return max/min value mvns r1,r3 pop {r4,r15} ret_dzero: movs r0,#0 movs r1,#0 bx r14 float_section d2fix_a_float .weak d2fix_a // weak because it exists in float shims too .thumb_func d2fix_a: @ here @ r0:r1 two's complement mantissa @ r2 unbaised exponent @ r3 mantissa sign extension bits add r2,r12 @ exponent plus offset for required binary point position subs r2,#52 @ required shift bmi 1f @ shift down? @ here a shift up by r2 places cmp r2,#12 @ will clamp? bge 2f movs r4,r0 lsls r1,r2 lsls r0,r2 negs r2,r2 adds r2,#32 @ complementary shift lsrs r4,r2 orrs r1,r4 pop {r4,r15} 2: mvns r0,r3 mvns r1,r3 @ overflow: clamp to extreme fixed-point values pop {r4,r15} 1: @ here a shift down by -r2 places adds r2,#32 bmi 1f @ long shift? mov r4,r1 lsls r4,r2 negs r2,r2 adds r2,#32 @ complementary shift asrs r1,r2 lsrs r0,r2 orrs r0,r4 pop {r4,r15} 1: @ here a long shift down movs r0,r1 asrs r1,#31 @ shift down 32 places adds r2,#32 bmi 1f @ very long shift? negs r2,r2 adds r2,#32 asrs r0,r2 pop {r4,r15} 1: movs r0,r3 @ result very near zero: use sign extension bits movs r1,r3 pop {r4,r15} d2f64_a: asrs r2,r1,#31 cmp r2,r3 bne 1f @ sign extension bits fail to match sign of result? pop {r15} 1: mvns r0,r3 movs r1,#1 lsls r1,#31 eors r1,r1,r0 @ generate extreme fixed-point values pop {r15} float_section float2double_shim regular_func float2double_shim lsrs r3,r0,#31 @ sign bit lsls r3,#31 lsls r1,r0,#1 lsrs r2,r1,#24 @ exponent beq 1f @ zero? cmp r2,#0xff @ Inf? beq 2f lsrs r1,#4 @ exponent and top 20 bits of mantissa ldr r2,=(0x3ff-0x7f)<<20 @ difference in exponent offsets adds r1,r2 orrs r1,r3 lsls r0,#29 @ bottom 3 bits of mantissa bx r14 1: movs r1,r3 @ return signed zero 3: movs r0,#0 bx r14 2: ldr r1,=0x7ff00000 @ return signed infinity adds r1,r3 b 3b #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_float/include/pico/float.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_FLOAT_H #define _PICO_FLOAT_H #include #include #include "pico.h" #include "pico/bootrom/sf_table.h" #ifdef __cplusplus extern "C" { #endif /** \file float.h * \defgroup pico_float pico_float * * Optimized single-precision floating point functions * * (Replacement) optimized implementations are provided of the following compiler built-ins * and math library functions: * * - __aeabi_fadd, __aeabi_fdiv, __aeabi_fmul, __aeabi_frsub, __aeabi_fsub, __aeabi_cfcmpeq, __aeabi_cfrcmple, __aeabi_cfcmple, __aeabi_fcmpeq, __aeabi_fcmplt, __aeabi_fcmple, __aeabi_fcmpge, __aeabi_fcmpgt, __aeabi_fcmpun, __aeabi_i2f, __aeabi_l2f, __aeabi_ui2f, __aeabi_ul2f, __aeabi_f2iz, __aeabi_f2lz, __aeabi_f2uiz, __aeabi_f2ulz, __aeabi_f2d, sqrtf, cosf, sinf, tanf, atan2f, expf, logf * - ldexpf, copysignf, truncf, floorf, ceilf, roundf, asinf, acosf, atanf, sinhf, coshf, tanhf, asinhf, acoshf, atanhf, exp2f, log2f, exp10f, log10f, powf, hypotf, cbrtf, fmodf, dremf, remainderf, remquof, expm1f, log1pf, fmaf * - powintf, sincosf (GNU extensions) * * The following additional optimized functions are also provided: * * - fix2float, ufix2float, fix642float, ufix642float, float2fix, float2ufix, float2fix64, float2ufix64, float2int, float2int64, float2int_z, float2int64_z */ float fix2float(int32_t m, int e); float ufix2float(uint32_t m, int e); float fix642float(int64_t m, int e); float ufix642float(uint64_t m, int e); // These methods round towards -Infinity. int32_t float2fix(float f, int e); uint32_t float2ufix(float f, int e); int64_t float2fix64(float f, int e); uint64_t float2ufix64(float f, int e); int32_t float2int(float f); int64_t float2int64(float f); // These methods round towards 0. int32_t float2int_z(float f); int64_t float2int64_z(float f); float exp10f(float x); void sincosf(float x, float *sinx, float *cosx); float powintf(float x, int y); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_i2c_slave/CMakeLists.txt ================================================ if (NOT TARGET pico_i2c_slave) pico_add_library(pico_i2c_slave) target_sources(pico_i2c_slave INTERFACE ${CMAKE_CURRENT_LIST_DIR}/i2c_slave.c) target_include_directories(pico_i2c_slave_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_mirrored_target_link_libraries(pico_i2c_slave INTERFACE hardware_i2c hardware_irq) endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_i2c_slave/i2c_slave.c ================================================ /* * Copyright (c) 2021 Valentin Milea * Copyright (c) 2023 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/i2c_slave.h" #include "hardware/irq.h" typedef struct i2c_slave { i2c_slave_handler_t handler; bool transfer_in_progress; } i2c_slave_t; static i2c_slave_t i2c_slaves[2]; static void __isr __not_in_flash_func(i2c_slave_irq_handler)(void) { uint i2c_index = __get_current_exception() - VTABLE_FIRST_IRQ - I2C0_IRQ; i2c_slave_t *slave = &i2c_slaves[i2c_index]; i2c_inst_t *i2c = i2c_get_instance(i2c_index); i2c_hw_t *hw = i2c_get_hw(i2c); uint32_t intr_stat = hw->intr_stat; if (intr_stat == 0) { return; } bool do_finish_transfer = false; if (intr_stat & I2C_IC_INTR_STAT_R_TX_ABRT_BITS) { hw->clr_tx_abrt; do_finish_transfer = true; } if (intr_stat & I2C_IC_INTR_STAT_R_START_DET_BITS) { hw->clr_start_det; do_finish_transfer = true; } if (intr_stat & I2C_IC_INTR_STAT_R_STOP_DET_BITS) { hw->clr_stop_det; do_finish_transfer = true; } if (do_finish_transfer && slave->transfer_in_progress) { slave->handler(i2c, I2C_SLAVE_FINISH); slave->transfer_in_progress = false; } if (intr_stat & I2C_IC_INTR_STAT_R_RX_FULL_BITS) { slave->transfer_in_progress = true; slave->handler(i2c, I2C_SLAVE_RECEIVE); } if (intr_stat & I2C_IC_INTR_STAT_R_RD_REQ_BITS) { hw->clr_rd_req; slave->transfer_in_progress = true; slave->handler(i2c, I2C_SLAVE_REQUEST); } } void i2c_slave_init(i2c_inst_t *i2c, uint8_t address, i2c_slave_handler_t handler) { assert(i2c == i2c0 || i2c == i2c1); assert(handler != NULL); uint i2c_index = i2c_hw_index(i2c); i2c_slave_t *slave = &i2c_slaves[i2c_index]; slave->handler = handler; // Note: The I2C slave does clock stretching implicitly after a RD_REQ, while the Tx FIFO is empty. // There is also an option to enable clock stretching while the Rx FIFO is full, but we leave it // disabled since the Rx FIFO should never fill up (unless slave->handler() is way too slow). i2c_set_slave_mode(i2c, true, address); i2c_hw_t *hw = i2c_get_hw(i2c); // unmask necessary interrupts hw->intr_mask = I2C_IC_INTR_MASK_M_RX_FULL_BITS | I2C_IC_INTR_MASK_M_RD_REQ_BITS | I2C_IC_RAW_INTR_STAT_TX_ABRT_BITS | I2C_IC_INTR_MASK_M_STOP_DET_BITS | I2C_IC_INTR_MASK_M_START_DET_BITS; // enable interrupt for current core uint num = I2C0_IRQ + i2c_index; irq_set_exclusive_handler(num, i2c_slave_irq_handler); irq_set_enabled(num, true); } void i2c_slave_deinit(i2c_inst_t *i2c) { assert(i2c == i2c0 || i2c == i2c1); uint i2c_index = i2c_hw_index(i2c); i2c_slave_t *slave = &i2c_slaves[i2c_index]; assert(slave->handler); // should be called after i2c_slave_init() slave->handler = NULL; slave->transfer_in_progress = false; uint num = I2C0_IRQ + i2c_index; irq_set_enabled(num, false); irq_remove_handler(num, i2c_slave_irq_handler); i2c_hw_t *hw = i2c_get_hw(i2c); hw->intr_mask = I2C_IC_INTR_MASK_RESET; i2c_set_slave_mode(i2c, false, 0); } ================================================ FILE: pico-sdk/src/rp2_common/pico_i2c_slave/include/pico/i2c_slave.h ================================================ /* * Copyright (c) 2021 Valentin Milea * Copyright (c) 2023 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_I2C_SLAVE_H #define _PICO_I2C_SLAVE_H #include "hardware/i2c.h" #ifdef __cplusplus extern "C" { #endif /** \file pico/i2c_slave.h * \defgroup pico_i2c_slave pico_i2c_slave * * Functions providing an interrupt driven I2C slave interface. * * This I2C slave helper library configures slave mode and hooks the relevant I2C IRQ * so that a user supplied handler is called with enumerated I2C events. * * An example application \c slave_mem_i2c, which makes use of this library, can be found in * pico_examples. */ /** * \brief I2C slave event types. * \ingroup pico_i2c_slave */ typedef enum i2c_slave_event_t { I2C_SLAVE_RECEIVE, /**< Data from master is available for reading. Slave must read from Rx FIFO. */ I2C_SLAVE_REQUEST, /**< Master is requesting data. Slave must write into Tx FIFO. */ I2C_SLAVE_FINISH, /**< Master has sent a Stop or Restart signal. Slave may prepare for the next transfer. */ } i2c_slave_event_t; /** * \brief I2C slave event handler * \ingroup pico_i2c_slave * * The event handler will run from the I2C ISR, so it should return quickly (under 25 us at 400 kb/s). * Avoid blocking inside the handler and split large data transfers across multiple calls for best results. * When sending data to master, up to \ref i2c_get_write_available() bytes can be written without blocking. * When receiving data from master, up to \ref i2c_get_read_available() bytes can be read without blocking. * * \param i2c Either \ref i2c0 or \ref i2c1 * \param event Event type. */ typedef void (*i2c_slave_handler_t)(i2c_inst_t *i2c, i2c_slave_event_t event); /** * \brief Configure an I2C instance for slave mode. * \ingroup pico_i2c_slave * \param i2c I2C instance. * \param address 7-bit slave address. * \param handler Callback for events from I2C master. It will run from the I2C ISR, on the CPU core * where the slave was initialised. */ void i2c_slave_init(i2c_inst_t *i2c, uint8_t address, i2c_slave_handler_t handler); /** * \brief Restore an I2C instance to master mode. * \ingroup pico_i2c_slave * \param i2c Either \ref i2c0 or \ref i2c1 */ void i2c_slave_deinit(i2c_inst_t *i2c); #ifdef __cplusplus } #endif #endif // _PICO_I2C_SLAVE_H_ ================================================ FILE: pico-sdk/src/rp2_common/pico_int64_ops/CMakeLists.txt ================================================ if (NOT TARGET pico_int64_ops) #shims for ROM functions for -lgcc functions (listed below) pico_add_library(pico_int64_ops) # no custom implementation; falls thru to compiler pico_add_library(pico_int64_ops_compiler) # add alias "default" which is just pico. add_library(pico_int64_ops_default INTERFACE) target_link_libraries(pico_int64_ops_default INTERFACE pico_int64_ops_pico) set(PICO_DEFAULT_INT64_OPS_IMPL pico_int64_ops_default) target_link_libraries(pico_int64_ops INTERFACE $>,$,${PICO_DEFAULT_INT64_OPS_IMPL}>) pico_add_library(pico_int64_ops_pico) target_include_directories(pico_int64_ops_pico INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_mirrored_target_link_libraries(pico_int64_ops_pico INTERFACE pico_base) target_sources(pico_int64_ops_pico INTERFACE ${CMAKE_CURRENT_LIST_DIR}/pico_int64_ops_aeabi.S ) pico_wrap_function(pico_int64_ops_pico __aeabi_lmul) macro(pico_set_int64_ops_implementation TARGET IMPL) get_target_property(target_type ${TARGET} TYPE) if ("EXECUTABLE" STREQUAL "${target_type}") set_target_properties(${TARGET} PROPERTIES PICO_TARGET_INT64_OPS_IMPL "pico_int64_ops_${IMPL}") else() message(FATAL_ERROR "int64_ops implementation must be set on executable not library") endif() endmacro() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_int64_ops/include/pico/int64_ops.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_INT64_OPS_H #define _PICO_INT64_OPS_H #include "pico/types.h" /** \file int64_ops.h * \defgroup pico_int64_ops pico_int64_ops * * Optimized replacement implementations of the compiler built-in 64 bit multiplication * * This library does not provide any additional functions */ #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" pico_default_asm_setup .macro int64_section name #if PICO_INT64_OPS_IN_RAM .section RAM_SECTION_NAME(\name), "ax" #else .section SECTION_NAME(\name), "ax" #endif .endm int64_section __aeabi_lmul wrapper_func __aeabi_lmul muls r1, r2 muls r3, r0 adds r1, r3 mov r12, r1 lsrs r1, r2, #16 uxth r3, r0 muls r3, r1 push {r4} lsrs r4, r0, #16 muls r1, r4 uxth r2, r2 uxth r0, r0 muls r0, r2 muls r2, r4 lsls r4, r3, #16 lsrs r3, #16 adds r0, r4 pop {r4} adcs r1, r3 lsls r3, r2, #16 lsrs r2, #16 adds r0, r3 adcs r1, r2 add r1, r12 bx lr ================================================ FILE: pico-sdk/src/rp2_common/pico_malloc/CMakeLists.txt ================================================ if (NOT TARGET pico_malloc) #shims for ROM functions for -lgcc functions (listed below) pico_add_library(pico_malloc) target_sources(pico_malloc INTERFACE ${CMAKE_CURRENT_LIST_DIR}/pico_malloc.c ) target_include_directories(pico_malloc_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_wrap_function(pico_malloc malloc) pico_wrap_function(pico_malloc calloc) pico_wrap_function(pico_malloc realloc) pico_wrap_function(pico_malloc free) target_link_libraries(pico_malloc INTERFACE pico_sync) endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_malloc/include/pico/malloc.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_MALLOC_H #define _PICO_MALLOC_H /** \file malloc.h * \defgroup pico_malloc pico_malloc * * Multi-core safety for malloc, calloc and free * * This library does not provide any additional functions */ // PICO_CONFIG: PICO_USE_MALLOC_MUTEX, Whether to protect malloc etc with a mutex, type=bool, default=1 with pico_multicore, 0 otherwise, group=pico_malloc #if LIB_PICO_MULTICORE && !defined(PICO_USE_MALLOC_MUTEX) #define PICO_USE_MALLOC_MUTEX 1 #endif // PICO_CONFIG: PICO_MALLOC_PANIC, Enable/disable panic when an allocation failure occurs, type=bool, default=1, group=pico_malloc #ifndef PICO_MALLOC_PANIC #define PICO_MALLOC_PANIC 1 #endif // PICO_CONFIG: PICO_DEBUG_MALLOC, Enable/disable debug printf from malloc, type=bool, default=0, group=pico_malloc #ifndef PICO_DEBUG_MALLOC #define PICO_DEBUG_MALLOC 0 #endif // PICO_CONFIG: PICO_DEBUG_MALLOC_LOW_WATER, Define the lower bound for allocation addresses to be printed by PICO_DEBUG_MALLOC, min=0, default=0, group=pico_malloc #ifndef PICO_DEBUG_MALLOC_LOW_WATER #define PICO_DEBUG_MALLOC_LOW_WATER 0 #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "pico.h" #include "pico/malloc.h" #if PICO_USE_MALLOC_MUTEX #include "pico/mutex.h" auto_init_mutex(malloc_mutex); #endif extern void *REAL_FUNC(malloc)(size_t size); extern void *REAL_FUNC(calloc)(size_t count, size_t size); extern void *REAL_FUNC(realloc)(void *mem, size_t size); extern void REAL_FUNC(free)(void *mem); extern char __StackLimit; /* Set by linker. */ static inline void check_alloc(__unused void *mem, __unused uint size) { #if PICO_MALLOC_PANIC if (!mem || (((char *)mem) + size) > &__StackLimit) { panic("Out of memory"); } #endif } void *WRAPPER_FUNC(malloc)(size_t size) { #if PICO_USE_MALLOC_MUTEX mutex_enter_blocking(&malloc_mutex); #endif void *rc = REAL_FUNC(malloc)(size); #if PICO_USE_MALLOC_MUTEX mutex_exit(&malloc_mutex); #endif #if PICO_DEBUG_MALLOC if (!rc || ((uint8_t *)rc) + size > (uint8_t*)PICO_DEBUG_MALLOC_LOW_WATER) { printf("malloc %d %p->%p\n", (uint) size, rc, ((uint8_t *) rc) + size); } #endif check_alloc(rc, size); return rc; } void *WRAPPER_FUNC(calloc)(size_t count, size_t size) { #if PICO_USE_MALLOC_MUTEX mutex_enter_blocking(&malloc_mutex); #endif void *rc = REAL_FUNC(calloc)(count, size); #if PICO_USE_MALLOC_MUTEX mutex_exit(&malloc_mutex); #endif #if PICO_DEBUG_MALLOC if (!rc || ((uint8_t *)rc) + size > (uint8_t*)PICO_DEBUG_MALLOC_LOW_WATER) { printf("calloc %d %p->%p\n", (uint) (count * size), rc, ((uint8_t *) rc) + size); } #endif check_alloc(rc, size); return rc; } void *WRAPPER_FUNC(realloc)(void *mem, size_t size) { #if PICO_USE_MALLOC_MUTEX mutex_enter_blocking(&malloc_mutex); #endif void *rc = REAL_FUNC(realloc)(mem, size); #if PICO_USE_MALLOC_MUTEX mutex_exit(&malloc_mutex); #endif #if PICO_DEBUG_MALLOC if (!rc || ((uint8_t *)rc) + size > (uint8_t*)PICO_DEBUG_MALLOC_LOW_WATER) { printf("realloc %p %d->%p\n", mem, (uint) size, rc); } #endif check_alloc(rc, size); return rc; } void WRAPPER_FUNC(free)(void *mem) { #if PICO_USE_MALLOC_MUTEX mutex_enter_blocking(&malloc_mutex); #endif REAL_FUNC(free)(mem); #if PICO_USE_MALLOC_MUTEX mutex_exit(&malloc_mutex); #endif } ================================================ FILE: pico-sdk/src/rp2_common/pico_mem_ops/CMakeLists.txt ================================================ if (NOT TARGET pico_mem_ops) #shims for ROM functions for -lgcc functions (listed below) pico_add_library(pico_mem_ops) # no custom implementation; falls thru to compiler pico_add_library(pico_mem_ops_compiler) # add alias "default" which is just pico. add_library(pico_mem_ops_default INTERFACE) target_link_libraries(pico_mem_ops_default INTERFACE pico_mem_ops_pico) set(PICO_DEFAULT_MEM_OPS_IMPL pico_mem_ops_default) pico_add_library(pico_mem_ops_pico) target_link_libraries(pico_mem_ops INTERFACE $>,$,${PICO_DEFAULT_MEM_OPS_IMPL}>) target_sources(pico_mem_ops_pico INTERFACE ${CMAKE_CURRENT_LIST_DIR}/mem_ops_aeabi.S ) target_include_directories(pico_mem_ops_pico_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_mirrored_target_link_libraries(pico_mem_ops_pico INTERFACE pico_base) target_link_libraries(pico_mem_ops INTERFACE pico_bootrom) pico_wrap_function(pico_mem_ops_pico memcpy) pico_wrap_function(pico_mem_ops_pico memset) pico_wrap_function(pico_mem_ops_pico __aeabi_memcpy) pico_wrap_function(pico_mem_ops_pico __aeabi_memset) pico_wrap_function(pico_mem_ops_pico __aeabi_memcpy4) pico_wrap_function(pico_mem_ops_pico __aeabi_memset4) pico_wrap_function(pico_mem_ops_pico __aeabi_memcpy8) pico_wrap_function(pico_mem_ops_pico __aeabi_memset8) macro(pico_set_mem_ops_implementation TARGET IMPL) get_target_property(target_type ${TARGET} TYPE) if ("EXECUTABLE" STREQUAL "${target_type}") set_target_properties(${TARGET} PROPERTIES PICO_TARGET_MEM_OPS_IMPL "pico_mem_ops_${IMPL}") else() message(FATAL_ERROR "mem_ops implementation must be set on executable not library") endif() endmacro() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_mem_ops/include/pico/mem_ops.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_MEM_OPS_H #define _PICO_MEM_OPS_H #include "pico/types.h" /** \file mem_ops.h * \defgroup pico_mem_ops pico_mem_ops * * Provides optimized replacement implementations of the compiler built-in memcpy, memset and related functions: * * - memset, memcpy * - __aeabi_memset, __aeabi_memset4, __aeabi_memset8, __aeabi_memcpy, __aeabi_memcpy4, __aeabi_memcpy8 * * This library does not provide any additional functions */ #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_mem_ops/mem_ops.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/mem_ops.h" ================================================ FILE: pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" #include "pico/bootrom.h" pico_default_asm_setup __pre_init __aeabi_mem_init, 00001 .macro mem_section name #if PICO_MEM_IN_RAM .section RAM_SECTION_NAME(\name), "ax" #else .section SECTION_NAME(\name), "ax" #endif .endm .equ MEMSET, 0 .equ MEMCPY, 4 .equ MEMSET4, 8 .equ MEMCPY4, 12 .equ MEM_FUNC_COUNT, 4 # NOTE: All code sections are placed in RAM (at the expense of some veneer cost for calls from flash) because # otherwise code using basic c division operators will require XIP flash access. .section .data.aeabi_mem_funcs .global aeabi_mem_funcs, aeabi_mem_funcs_end .align 2 aeabi_mem_funcs: .word ROM_FUNC_MEMSET .word ROM_FUNC_MEMCPY .word ROM_FUNC_MEMSET4 .word ROM_FUNC_MEMCPY44 aeabi_mem_funcs_end: .section .text regular_func __aeabi_mem_init ldr r0, =aeabi_mem_funcs movs r1, #MEM_FUNC_COUNT ldr r3, =rom_funcs_lookup bx r3 # lump them both together because likely both to be used, in which case doing so saves 1 word # and it only costs 1 word if not // Note from Run-time ABI for the ARM architecture 4.3.4: // If there is an attached device with efficient memory copying or clearing operations // (such as a DMA engine), its device supplement specifies whether it may be used in // implementations of these functions and what effect such use has on the device’s state. mem_section aeabi_memset_memcpy wrapper_func __aeabi_memset // 2nd/3rd args are reversed eors r2, r1 eors r1, r2 eors r2, r1 ldr r3, =aeabi_mem_funcs ldr r3, [r3, #MEMSET] bx r3 wrapper_func __aeabi_memset4 wrapper_func __aeabi_memset8 // 2nd/3rd args are reversed eors r2, r1 eors r1, r2 eors r2, r1 ldr r3, =aeabi_mem_funcs ldr r3, [r3, #MEMSET4] bx r3 wrapper_func __aeabi_memcpy4 wrapper_func __aeabi_memcpy8 ldr r3, =aeabi_mem_funcs ldr r3, [r3, #MEMCPY4] bx r3 mem_section memset wrapper_func memset ldr r3, =aeabi_mem_funcs ldr r3, [r3, #MEMSET] bx r3 mem_section memcpy wrapper_func __aeabi_memcpy wrapper_func memcpy ldr r3, =aeabi_mem_funcs ldr r3, [r3, #MEMCPY] bx r3 ================================================ FILE: pico-sdk/src/rp2_common/pico_multicore/CMakeLists.txt ================================================ if (NOT TARGET pico_multicore) pico_add_library(pico_multicore) target_include_directories(pico_multicore_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_sources(pico_multicore INTERFACE ${CMAKE_CURRENT_LIST_DIR}/multicore.c) pico_mirrored_target_link_libraries(pico_multicore INTERFACE pico_sync hardware_irq) endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_multicore/include/pico/multicore.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_MULTICORE_H #define _PICO_MULTICORE_H #include "pico/types.h" #include "pico/sync.h" #include "hardware/structs/sio.h" #ifdef __cplusplus extern "C" { #endif /** \file multicore.h * \defgroup pico_multicore pico_multicore * Adds support for running code on the second processor core (core 1) * * \subsection multicore_example Example * \addtogroup pico_multicore * \include multicore.c */ // PICO_CONFIG: PICO_CORE1_STACK_SIZE, Stack size for core 1, min=0x100, max=0x10000, default=PICO_STACK_SIZE (0x800), group=pico_multicore #ifndef PICO_CORE1_STACK_SIZE #ifdef PICO_STACK_SIZE #define PICO_CORE1_STACK_SIZE PICO_STACK_SIZE #else #define PICO_CORE1_STACK_SIZE 0x800 #endif #endif /*! \brief Reset core 1 * \ingroup pico_multicore * * This function can be used to reset core 1 into its initial state (ready for launching code against via \ref multicore_launch_core1 and similar methods) * * \note this function should only be called from core 0 */ void multicore_reset_core1(void); /*! \brief Run code on core 1 * \ingroup pico_multicore * * Wake up (a previously reset) core 1 and enter the given function on core 1 using the default core 1 stack (below core 0 stack). * * core 1 must previously have been reset either as a result of a system reset or by calling \ref multicore_reset_core1 * * core 1 will use the same vector table as core 0 * * \param entry Function entry point * \see multicore_reset_core1 */ void multicore_launch_core1(void (*entry)(void)); /*! \brief Launch code on core 1 with stack * \ingroup pico_multicore * * Wake up (a previously reset) core 1 and enter the given function on core 1 using the passed stack for core 1 * * core 1 must previously have been reset either as a result of a system reset or by calling \ref multicore_reset_core1 * * core 1 will use the same vector table as core 0 * * \param entry Function entry point * \param stack_bottom The bottom (lowest address) of the stack * \param stack_size_bytes The size of the stack in bytes (must be a multiple of 4) * \see multicore_reset_core1 */ void multicore_launch_core1_with_stack(void (*entry)(void), uint32_t *stack_bottom, size_t stack_size_bytes); /*! \brief Launch code on core 1 with no stack protection * \ingroup pico_multicore * * Wake up (a previously reset) core 1 and start it executing with a specific entry point, stack pointer * and vector table. * * This is a low level function that does not provide a stack guard even if USE_STACK_GUARDS is defined * * core 1 must previously have been reset either as a result of a system reset or by calling \ref multicore_reset_core1 * * \param entry Function entry point * \param sp Pointer to the top of the core 1 stack * \param vector_table address of the vector table to use for core 1 * \see multicore_reset_core1 */ void multicore_launch_core1_raw(void (*entry)(void), uint32_t *sp, uint32_t vector_table); /*! * \defgroup multicore_fifo fifo * \ingroup pico_multicore * \brief Functions for the inter-core FIFOs * * The RP2040 contains two FIFOs for passing data, messages or ordered events between the two cores. Each FIFO is 32 bits * wide, and 8 entries deep. One of the FIFOs can only be written by core 0, and read by core 1. The other can only be written * by core 1, and read by core 0. * * \note The inter-core FIFOs are a very precious resource and are frequently used for SDK functionality (e.g. during * core 1 launch or by the \ref multicore_lockout functions). Additionally they are often required for the exclusive use * of an RTOS (e.g. FreeRTOS SMP). For these reasons it is suggested that you do not use the FIFO for your own purposes * unless none of the above concerns apply; the majority of cases for transferring data between cores can be eqaully * well handled by using a \ref queue */ /*! \brief Check the read FIFO to see if there is data available (sent by the other core) * \ingroup multicore_fifo * * See the note in the \ref multicore_fifo section for considerations regarding use of the inter-core FIFOs * * \return true if the FIFO has data in it, false otherwise */ static inline bool multicore_fifo_rvalid(void) { return !!(sio_hw->fifo_st & SIO_FIFO_ST_VLD_BITS); } /*! \brief Check the write FIFO to see if it has space for more data * \ingroup multicore_fifo * * See the note in the \ref multicore_fifo section for considerations regarding use of the inter-core FIFOs * * @return true if the FIFO has room for more data, false otherwise */ static inline bool multicore_fifo_wready(void) { return !!(sio_hw->fifo_st & SIO_FIFO_ST_RDY_BITS); } /*! \brief Push data on to the write FIFO (data to the other core). * \ingroup multicore_fifo * * This function will block until there is space for the data to be sent. * Use multicore_fifo_wready() to check if it is possible to write to the * FIFO if you don't want to block. * * See the note in the \ref multicore_fifo section for considerations regarding use of the inter-core FIFOs * * \param data A 32 bit value to push on to the FIFO */ void multicore_fifo_push_blocking(uint32_t data); /*! \brief Push data on to the write FIFO (data to the other core) with timeout. * \ingroup multicore_fifo * * This function will block until there is space for the data to be sent * or the timeout is reached * * \param data A 32 bit value to push on to the FIFO * \param timeout_us the timeout in microseconds * \return true if the data was pushed, false if the timeout occurred before data could be pushed */ bool multicore_fifo_push_timeout_us(uint32_t data, uint64_t timeout_us); /*! \brief Pop data from the read FIFO (data from the other core). * \ingroup multicore_fifo * * This function will block until there is data ready to be read * Use multicore_fifo_rvalid() to check if data is ready to be read if you don't * want to block. * * See the note in the \ref multicore_fifo section for considerations regarding use of the inter-core FIFOs * * \return 32 bit data from the read FIFO. */ uint32_t multicore_fifo_pop_blocking(void); /*! \brief Pop data from the read FIFO (data from the other core) with timeout. * \ingroup multicore_fifo * * This function will block until there is data ready to be read or the timeout is reached * * See the note in the \ref multicore_fifo section for considerations regarding use of the inter-core FIFOs * * \param timeout_us the timeout in microseconds * \param out the location to store the popped data if available * \return true if the data was popped and a value copied into `out`, false if the timeout occurred before data could be popped */ bool multicore_fifo_pop_timeout_us(uint64_t timeout_us, uint32_t *out); /*! \brief Discard any data in the read FIFO * \ingroup multicore_fifo * * See the note in the \ref multicore_fifo section for considerations regarding use of the inter-core FIFOs */ static inline void multicore_fifo_drain(void) { while (multicore_fifo_rvalid()) (void) sio_hw->fifo_rd; } /*! \brief Clear FIFO interrupt * \ingroup multicore_fifo * * Note that this only clears an interrupt that was caused by the ROE or WOF flags. * To clear the VLD flag you need to use one of the 'pop' or 'drain' functions. * * See the note in the \ref multicore_fifo section for considerations regarding use of the inter-core FIFOs * * \see multicore_fifo_get_status */ static inline void multicore_fifo_clear_irq(void) { // Write any value to clear the error flags sio_hw->fifo_st = 0xff; } /*! \brief Get FIFO statuses * \ingroup multicore_fifo * * \return The statuses as a bitfield * * Bit | Description * ----|------------ * 3 | Sticky flag indicating the RX FIFO was read when empty (ROE). This read was ignored by the FIFO. * 2 | Sticky flag indicating the TX FIFO was written when full (WOF). This write was ignored by the FIFO. * 1 | Value is 1 if this core’s TX FIFO is not full (i.e. if FIFO_WR is ready for more data) * 0 | Value is 1 if this core’s RX FIFO is not empty (i.e. if FIFO_RD is valid) * * See the note in the \ref multicore_fifo section for considerations regarding use of the inter-core FIFOs * */ static inline uint32_t multicore_fifo_get_status(void) { return sio_hw->fifo_st; } /*! * \defgroup multicore_lockout lockout * \ingroup pico_multicore * \brief Functions to enable one core to force the other core to pause execution in a known state. * * Sometimes it is useful to enter a critical section on both cores at once. On a single * core system a critical section can trivially be entered by disabling interrupts, however on a multi-core * system that is not sufficient, and unless the other core is polling in some way, then it will need to be interrupted * in order to cooperatively enter a blocked state. * * These "lockout" functions use the inter core FIFOs to cause an interrupt on one core from the other, and manage * waiting for the other core to enter the "locked out" state. * * The usage is that the "victim" core ... i.e the core that can be "locked out" by the other core calls * \ref multicore_lockout_victim_init to hook the FIFO interrupt. Note that either or both cores may do this. * * \note When "locked out" the victim core is paused (it is actually executing a tight loop with code in RAM) and has interrupts disabled. * This makes the lockout functions suitable for use by code that wants to write to flash (at which point no code may be executing * from flash) * * The core which wishes to lockout the other core calls \ref multicore_lockout_start_blocking or * \ref multicore_lockout_start_timeout_us to interrupt the other "victim" core and wait for it to be in a * "locked out" state. Once the lockout is no longer needed it calls \ref multicore_lockout_end_blocking or * \ref multicore_lockout_end_timeout_us to release the lockout and wait for confirmation. * * \note Because multicore lockout uses the intercore FIFOs, the FIFOs cannot be used for any other purpose */ /*! \brief Initialize the current core such that it can be a "victim" of lockout (i.e. forced to pause in a known state by the other core) * \ingroup multicore_lockout * * This code hooks the intercore FIFO IRQ, and the FIFO may not be used for any other purpose after this. */ void multicore_lockout_victim_init(void); /*! \brief Determine if \ref multicore_victim_init() has been called on the specified core. * \ingroup multicore_lockout * * \note this state persists even if the core is subsequently reset; therefore you are advised to * always call \ref multicore_lockout_victim_init() again after resetting a core, which had previously * been initialized. * * \param core_num the core number (0 or 1) * \return true if \ref multicore_victim_init() has been called on the specified core, false otherwise. */ bool multicore_lockout_victim_is_initialized(uint core_num); /*! \brief Request the other core to pause in a known state and wait for it to do so * \ingroup multicore_lockout * * The other (victim) core must have previously executed \ref multicore_lockout_victim_init() * * \note multicore_lockout_start_ functions are not nestable, and must be paired with a call to a corresponding * \ref multicore_lockout_end_blocking */ void multicore_lockout_start_blocking(void); /*! \brief Request the other core to pause in a known state and wait up to a time limit for it to do so * \ingroup multicore_lockout * * The other core must have previously executed \ref multicore_lockout_victim_init() * * \note multicore_lockout_start_ functions are not nestable, and must be paired with a call to a corresponding * \ref multicore_lockout_end_blocking * * \param timeout_us the timeout in microseconds * \return true if the other core entered the locked out state within the timeout, false otherwise */ bool multicore_lockout_start_timeout_us(uint64_t timeout_us); /*! \brief Release the other core from a locked out state amd wait for it to acknowledge * \ingroup multicore_lockout * * \note The other core must previously have been "locked out" by calling a `multicore_lockout_start_` function * from this core */ void multicore_lockout_end_blocking(void); /*! \brief Release the other core from a locked out state amd wait up to a time limit for it to acknowledge * \ingroup multicore_lockout * * The other core must previously have been "locked out" by calling a `multicore_lockout_start_` function * from this core * * \note be very careful using small timeout values, as a timeout here will leave the "lockout" functionality * in a bad state. It is probably preferable to use \ref multicore_lockout_end_blocking anyway as if you have * already waited for the victim core to enter the lockout state, then the victim core will be ready to exit * the lockout state very quickly. * * \param timeout_us the timeout in microseconds * \return true if the other core successfully exited locked out state within the timeout, false otherwise */ bool multicore_lockout_end_timeout_us(uint64_t timeout_us); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_multicore/multicore.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/multicore.h" #include "hardware/sync.h" #include "hardware/irq.h" #include "hardware/structs/scb.h" #include "hardware/structs/sio.h" #include "hardware/regs/psm.h" #include "hardware/claim.h" #if PICO_USE_STACK_GUARDS #include "pico/runtime.h" #endif // note that these are not reset by core reset, however for now, I think people resetting cores // and then relying on multicore_lockout for that core without re-initializing, is probably // something we can live with breaking. // // whilst we could clear this in core 1 reset path, that doesn't necessarily catch all, // and means pulling in this array even if multicore_lockout is not used. static bool lockout_victim_initialized[NUM_CORES]; static inline void multicore_fifo_push_blocking_inline(uint32_t data) { // We wait for the fifo to have some space while (!multicore_fifo_wready()) tight_loop_contents(); sio_hw->fifo_wr = data; // Fire off an event to the other core __sev(); } void multicore_fifo_push_blocking(uint32_t data) { multicore_fifo_push_blocking_inline(data); } bool multicore_fifo_push_timeout_us(uint32_t data, uint64_t timeout_us) { absolute_time_t end_time = make_timeout_time_us(timeout_us); // We wait for the fifo to have some space while (!multicore_fifo_wready()) { tight_loop_contents(); if (time_reached(end_time)) return false; } sio_hw->fifo_wr = data; // Fire off an event to the other core __sev(); return true; } static inline uint32_t multicore_fifo_pop_blocking_inline(void) { // If nothing there yet, we wait for an event first, // to try and avoid too much busy waiting while (!multicore_fifo_rvalid()) __wfe(); return sio_hw->fifo_rd; } uint32_t multicore_fifo_pop_blocking() { return multicore_fifo_pop_blocking_inline(); } bool multicore_fifo_pop_timeout_us(uint64_t timeout_us, uint32_t *out) { absolute_time_t end_time = make_timeout_time_us(timeout_us); // If nothing there yet, we wait for an event first, // to try and avoid too much busy waiting while (!multicore_fifo_rvalid()) { __wfe(); if (time_reached(end_time)) return false; } *out = sio_hw->fifo_rd; return true; } // Default stack for core1 ... if multicore_launch_core1 is not included then .stack1 section will be garbage collected static uint32_t __attribute__((section(".stack1"))) core1_stack[PICO_CORE1_STACK_SIZE / sizeof(uint32_t)]; static void __attribute__ ((naked)) core1_trampoline(void) { pico_default_asm ("pop {r0, r1, pc}"); } int core1_wrapper(int (*entry)(void), void *stack_base) { #if PICO_USE_STACK_GUARDS // install core1 stack guard runtime_install_stack_guard(stack_base); #else __unused void *ignore = stack_base; #endif irq_init_priorities(); return (*entry)(); } void multicore_reset_core1() { // Use atomic aliases just in case core 1 is also manipulating some PSM state io_rw_32 *power_off = (io_rw_32 *) (PSM_BASE + PSM_FRCE_OFF_OFFSET); io_rw_32 *power_off_set = hw_set_alias(power_off); io_rw_32 *power_off_clr = hw_clear_alias(power_off); // Hard-reset core 1. // Reading back confirms the core 1 reset is in the correct state, but also // forces APB IO bridges to fence on any internal store buffering *power_off_set = PSM_FRCE_OFF_PROC1_BITS; while (!(*power_off & PSM_FRCE_OFF_PROC1_BITS)) tight_loop_contents(); // Bring core 1 back out of reset. It will drain its own mailbox FIFO, then push // a 0 to our mailbox to tell us it has done this. *power_off_clr = PSM_FRCE_OFF_PROC1_BITS; } void multicore_launch_core1_with_stack(void (*entry)(void), uint32_t *stack_bottom, size_t stack_size_bytes) { assert(!(stack_size_bytes & 3u)); uint32_t *stack_ptr = stack_bottom + stack_size_bytes / sizeof(uint32_t); // push 2 values onto top of stack for core1_trampoline stack_ptr -= 3; stack_ptr[0] = (uintptr_t) entry; stack_ptr[1] = (uintptr_t) stack_bottom; stack_ptr[2] = (uintptr_t) core1_wrapper; #if PICO_VTABLE_PER_CORE #warning PICO_VTABLE_PER_CORE==1 is not currently supported in pico_multicore panic_unsupported(); #endif multicore_launch_core1_raw(core1_trampoline, stack_ptr, scb_hw->vtor); } void multicore_launch_core1(void (*entry)(void)) { extern uint32_t __StackOneBottom; uint32_t *stack_limit = (uint32_t *) &__StackOneBottom; // hack to reference core1_stack although that pointer is wrong.... core1_stack should always be <= stack_limit, if not boom! uint32_t *stack = core1_stack <= stack_limit ? stack_limit : (uint32_t *) -1; multicore_launch_core1_with_stack(entry, stack, sizeof(core1_stack)); } void multicore_launch_core1_raw(void (*entry)(void), uint32_t *sp, uint32_t vector_table) { // Allow for the fact that the caller may have already enabled the FIFO IRQ for their // own purposes (expecting FIFO content after core 1 is launched). We must disable // the IRQ during the handshake, then restore afterwards. bool enabled = irq_is_enabled(SIO_IRQ_PROC0); irq_set_enabled(SIO_IRQ_PROC0, false); // Values to be sent in order over the FIFO from core 0 to core 1 // // vector_table is value for VTOR register // sp is initial stack pointer (SP) // entry is the initial program counter (PC) (don't forget to set the thumb bit!) const uint32_t cmd_sequence[] = {0, 0, 1, (uintptr_t) vector_table, (uintptr_t) sp, (uintptr_t) entry}; uint seq = 0; do { uint cmd = cmd_sequence[seq]; // Always drain the READ FIFO (from core 1) before sending a 0 if (!cmd) { multicore_fifo_drain(); // Execute a SEV as core 1 may be waiting for FIFO space via WFE __sev(); } multicore_fifo_push_blocking(cmd); uint32_t response = multicore_fifo_pop_blocking(); // Move to next state on correct response (echo-d value) otherwise start over seq = cmd == response ? seq + 1 : 0; } while (seq < count_of(cmd_sequence)); irq_set_enabled(SIO_IRQ_PROC0, enabled); } #define LOCKOUT_MAGIC_START 0x73a8831eu #define LOCKOUT_MAGIC_END (~LOCKOUT_MAGIC_START) static_assert(SIO_IRQ_PROC1 == SIO_IRQ_PROC0 + 1, ""); static mutex_t lockout_mutex; static bool lockout_in_progress; // note this method is in RAM because lockout is used when writing to flash // it only makes inline calls static void __isr __not_in_flash_func(multicore_lockout_handler)(void) { multicore_fifo_clear_irq(); while (multicore_fifo_rvalid()) { if (sio_hw->fifo_rd == LOCKOUT_MAGIC_START) { uint32_t save = save_and_disable_interrupts(); multicore_fifo_push_blocking_inline(LOCKOUT_MAGIC_START); while (multicore_fifo_pop_blocking_inline() != LOCKOUT_MAGIC_END) { tight_loop_contents(); // not tight but endless potentially } restore_interrupts(save); multicore_fifo_push_blocking_inline(LOCKOUT_MAGIC_END); } } } static void check_lockout_mutex_init(void) { // use known available lock - we only need it briefly uint32_t save = hw_claim_lock(); if (!mutex_is_initialized(&lockout_mutex)) { mutex_init(&lockout_mutex); } hw_claim_unlock(save); } void multicore_lockout_victim_init(void) { check_lockout_mutex_init(); uint core_num = get_core_num(); irq_set_exclusive_handler(SIO_IRQ_PROC0 + core_num, multicore_lockout_handler); irq_set_enabled(SIO_IRQ_PROC0 + core_num, true); lockout_victim_initialized[core_num] = true; } static bool multicore_lockout_handshake(uint32_t magic, absolute_time_t until) { uint irq_num = SIO_IRQ_PROC0 + get_core_num(); bool enabled = irq_is_enabled(irq_num); if (enabled) irq_set_enabled(irq_num, false); bool rc = false; do { int64_t next_timeout_us = absolute_time_diff_us(get_absolute_time(), until); if (next_timeout_us < 0) { break; } multicore_fifo_push_timeout_us(magic, (uint64_t)next_timeout_us); next_timeout_us = absolute_time_diff_us(get_absolute_time(), until); if (next_timeout_us < 0) { break; } uint32_t word = 0; if (!multicore_fifo_pop_timeout_us((uint64_t)next_timeout_us, &word)) { break; } if (word == magic) { rc = true; } } while (!rc); if (enabled) irq_set_enabled(irq_num, true); return rc; } static bool multicore_lockout_start_block_until(absolute_time_t until) { check_lockout_mutex_init(); if (!mutex_enter_block_until(&lockout_mutex, until)) { return false; } hard_assert(!lockout_in_progress); bool rc = multicore_lockout_handshake(LOCKOUT_MAGIC_START, until); lockout_in_progress = rc; mutex_exit(&lockout_mutex); return rc; } bool multicore_lockout_start_timeout_us(uint64_t timeout_us) { return multicore_lockout_start_block_until(make_timeout_time_us(timeout_us)); } void multicore_lockout_start_blocking(void) { multicore_lockout_start_block_until(at_the_end_of_time); } static bool multicore_lockout_end_block_until(absolute_time_t until) { assert(mutex_is_initialized(&lockout_mutex)); if (!mutex_enter_block_until(&lockout_mutex, until)) { return false; } assert(lockout_in_progress); bool rc = multicore_lockout_handshake(LOCKOUT_MAGIC_END, until); if (rc) { lockout_in_progress = false; } mutex_exit(&lockout_mutex); return rc; } bool multicore_lockout_end_timeout_us(uint64_t timeout_us) { return multicore_lockout_end_block_until(make_timeout_time_us(timeout_us)); } void multicore_lockout_end_blocking(void) { multicore_lockout_end_block_until(at_the_end_of_time); } bool multicore_lockout_victim_is_initialized(uint core_num) { return lockout_victim_initialized[core_num]; } ================================================ FILE: pico-sdk/src/rp2_common/pico_platform/CMakeLists.txt ================================================ if (NOT TARGET pico_platform_headers) add_library(pico_platform_headers INTERFACE) target_compile_definitions(pico_platform_headers INTERFACE PICO_NO_HARDWARE=0 PICO_ON_DEVICE=1 PICO_BUILD=1 ) target_include_directories(pico_platform_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_link_libraries(pico_platform_headers INTERFACE hardware_regs) endif() if (NOT TARGET pico_platform) pico_add_impl_library(pico_platform) target_sources(pico_platform INTERFACE ${CMAKE_CURRENT_LIST_DIR}/platform.c) target_link_libraries(pico_platform INTERFACE pico_platform_headers) endif() function(pico_add_platform_library TARGET) target_link_libraries(pico_platform INTERFACE ${TARGET}) endfunction() ================================================ FILE: pico-sdk/src/rp2_common/pico_platform/include/pico/asm_helper.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" # note we don't do this by default in this file for backwards comaptibility with user code # that may include this file, but not use unified syntax. Note that this macro does equivalent # setup to the pico_default_asm macro for inline assembly in C code. .macro pico_default_asm_setup .syntax unified .cpu cortex-m0plus .thumb .endm // do not put align in here as it is used mid function sometimes .macro regular_func x .global \x .type \x,%function .thumb_func \x: .endm .macro regular_func_with_section x .section .text.\x regular_func \x .endm // do not put align in here as it is used mid function sometimes .macro wrapper_func x regular_func WRAPPER_FUNC_NAME(\x) .endm .macro __pre_init func, priority_string .section .preinit_array.\priority_string .align 2 .word \func .endm ================================================ FILE: pico-sdk/src/rp2_common/pico_platform/include/pico/platform.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_PLATFORM_H #define _PICO_PLATFORM_H /** \file platform.h * \defgroup pico_platform pico_platform * * Macros and definitions (and functions when included by non assembly code) for the RP2 family device / architecture * to provide a common abstraction over low level compiler / platform specifics. * * This header may be included by assembly code */ #include "hardware/platform_defs.h" #include "hardware/regs/addressmap.h" #include "hardware/regs/sio.h" // Marker for builds targeting the RP2040 #define PICO_RP2040 1 // PICO_CONFIG: PICO_STACK_SIZE, Stack Size, min=0x100, default=0x800, advanced=true, group=pico_platform #ifndef PICO_STACK_SIZE #define PICO_STACK_SIZE _u(0x800) #endif // PICO_CONFIG: PICO_HEAP_SIZE, Heap size to reserve, min=0x100, default=0x800, advanced=true, group=pico_platform #ifndef PICO_HEAP_SIZE #define PICO_HEAP_SIZE _u(0x800) #endif // PICO_CONFIG: PICO_NO_RAM_VECTOR_TABLE, Enable/disable the RAM vector table, type=bool, default=0, advanced=true, group=pico_platform #ifndef PICO_NO_RAM_VECTOR_TABLE #define PICO_NO_RAM_VECTOR_TABLE 0 #endif // PICO_CONFIG: PICO_RP2040_B0_SUPPORTED, Whether to include any specific software support for RP2040 B0 revision, type=bool, default=1, advanced=true, group=pico_platform #ifndef PICO_RP2040_B0_SUPPORTED #define PICO_RP2040_B0_SUPPORTED 1 #endif // PICO_CONFIG: PICO_FLOAT_SUPPORT_ROM_V1, Include float support code for RP2040 B0 when that chip revision is supported , type=bool, default=1, advanced=true, group=pico_platform #ifndef PICO_FLOAT_SUPPORT_ROM_V1 #define PICO_FLOAT_SUPPORT_ROM_V1 1 #endif // PICO_CONFIG: PICO_DOUBLE_SUPPORT_ROM_V1, Include double support code for RP2040 B0 when that chip revision is supported , type=bool, default=1, advanced=true, group=pico_platform #ifndef PICO_DOUBLE_SUPPORT_ROM_V1 #define PICO_DOUBLE_SUPPORT_ROM_V1 1 #endif // PICO_CONFIG: PICO_RP2040_B1_SUPPORTED, Whether to include any specific software support for RP2040 B1 revision, type=bool, default=1, advanced=true, group=pico_platform #ifndef PICO_RP2040_B1_SUPPORTED #define PICO_RP2040_B1_SUPPORTED 1 #endif // PICO_CONFIG: PICO_RP2040_B2_SUPPORTED, Whether to include any specific software support for RP2040 B2 revision, type=bool, default=1, advanced=true, group=pico_platform #ifndef PICO_RP2040_B2_SUPPORTED #define PICO_RP2040_B2_SUPPORTED 1 #endif // --- remainder of file is not included by assembly code --- #ifndef __ASSEMBLER__ #if defined __GNUC__ #include // note LLVM defines __GNUC__ #ifdef __clang__ #define PICO_C_COMPILER_IS_CLANG 1 #else #define PICO_C_COMPILER_IS_GNU 1 #endif #elif defined __ICCARM__ #ifndef __aligned #define __aligned(x) __attribute__((__aligned__(x))) #endif #ifndef __always_inline #define __always_inline __attribute__((__always_inline__)) #endif #ifndef __noinline #define __noinline __attribute__((__noinline__)) #endif #ifndef __packed #define __packed __attribute__((__packed__)) #endif #ifndef __printflike #define __printflike(a, b) #endif #ifndef __unused #define __unused __attribute__((__unused__)) #endif #ifndef __used #define __used __attribute__((__used__)) #endif #ifndef __CONCAT1 #define __CONCAT1(a, b) a ## b #endif #ifndef __CONCAT #define __CONCAT(a, b) __CONCAT1(a, b) #endif #ifndef __STRING #define __STRING(a) #a #endif /* Compatible definitions of GCC builtins */ static inline uint __builtin_ctz(uint x) { extern uint32_t __ctzsi2(uint32_t); return __ctzsi2(x); } #define __builtin_expect(x, y) (x) #define __builtin_isnan(x) __iar_isnan(x) #else #error Unsupported toolchain #endif #include "pico/types.h" // GCC_Like_Pragma(x) is a pragma on GNUC compatible compilers #ifdef __GNUC__ #define GCC_Like_Pragma _Pragma #else #define GCC_Like_Pragma(x) #endif // Clang_Pragma(x) is a pragma on Clang only #ifdef __clang__ #define Clang_Pragma _Pragma #else #define Clang_Pragma(x) #endif // GCC_Pragma(x) is a pragma on GCC only #if PICO_C_COMPILER_IS_GNU #define GCC_Pragma _Pragma #else #define GCC_Pragma(x) #endif #ifdef __cplusplus extern "C" { #endif /*! \brief Marker for an interrupt handler * \ingroup pico_platform * * For example an IRQ handler function called my_interrupt_handler: * * void __isr my_interrupt_handler(void) { */ #define __isr /*! \brief Section attribute macro for placement in RAM after the `.data` section * \ingroup pico_platform * * For example a 400 element `uint32_t` array placed after the .data section * * uint32_t __after_data("my_group_name") a_big_array[400]; * * The section attribute is `.after_data.` * * \param group a string suffix to use in the section name to distinguish groups that can be linker * garbage-collected independently */ #define __after_data(group) __attribute__((section(".after_data." group))) /*! \brief Section attribute macro for placement not in flash (i.e in RAM) * \ingroup pico_platform * * For example a 3 element `uint32_t` array placed in RAM (even though it is `static const`) * * static const uint32_t __not_in_flash("my_group_name") an_array[3]; * * The section attribute is `.time_critical.` * * \param group a string suffix to use in the section name to distinguish groups that can be linker * garbage-collected independently */ #define __not_in_flash(group) __attribute__((section(".time_critical." group))) /*! \brief Section attribute macro for placement in the SRAM bank 4 (known as "scratch X") * \ingroup pico_platform * * Scratch X is commonly used for critical data and functions accessed only by one core (when only * one core is accessing the RAM bank, there is no opportunity for stalls) * * For example a `uint32_t` variable placed in "scratch X" * * uint32_t __scratch_x("my_group_name") foo = 23; * * The section attribute is `.scratch_x.` * * \param group a string suffix to use in the section name to distinguish groups that can be linker * garbage-collected independently */ #define __scratch_x(group) __attribute__((section(".scratch_x." group))) /*! \brief Section attribute macro for placement in the SRAM bank 5 (known as "scratch Y") * \ingroup pico_platform * * Scratch Y is commonly used for critical data and functions accessed only by one core (when only * one core is accessing the RAM bank, there is no opportunity for stalls) * * For example a `uint32_t` variable placed in "scratch Y" * * uint32_t __scratch_y("my_group_name") foo = 23; * * The section attribute is `.scratch_y.` * * \param group a string suffix to use in the section name to distinguish groups that can be linker * garbage-collected independently */ #define __scratch_y(group) __attribute__((section(".scratch_y." group))) /*! \brief Section attribute macro for data that is to be left uninitialized * \ingroup pico_platform * * Data marked this way will retain its value across a reset (normally uninitialized data - in the .bss * section) is initialized to zero during runtime initialization * * For example a `uint32_t` foo that will retain its value if the program is restarted by reset. * * uint32_t __uninitialized_ram(foo); * * The section attribute is `.uninitialized_data.` * * \param group a string suffix to use in the section name to distinguish groups that can be linker * garbage-collected independently */ #define __uninitialized_ram(group) __attribute__((section(".uninitialized_data." #group))) group /*! \brief Section attribute macro for placement in flash even in a COPY_TO_RAM binary * \ingroup pico_platform * * For example a `uint32_t` variable explicitly placed in flash (it will hard fault if you attempt to write it!) * * uint32_t __in_flash("my_group_name") foo = 23; * * The section attribute is `.flashdata.` * * \param group a string suffix to use in the section name to distinguish groups that can be linker * garbage-collected independently */ #define __in_flash(group) __attribute__((section(".flashdata." group))) /*! \brief Indicates a function should not be stored in flash * \ingroup pico_platform * * Decorates a function name, such that the function will execute from RAM (assuming it is not inlined * into a flash function by the compiler) * * For example a function called my_func taking an int parameter: * * void __not_in_flash_func(my_func)(int some_arg) { * * The function is placed in the `.time_critical.` linker section * * \see __no_inline_not_in_flash_func */ #define __not_in_flash_func(func_name) __not_in_flash(__STRING(func_name)) func_name /*! \brief Indicates a function is time/latency critical and should not run from flash * \ingroup pico_platform * * Decorates a function name, such that the function will execute from RAM (assuming it is not inlined * into a flash function by the compiler) to avoid possible flash latency. Currently this macro is identical * in implementation to `__not_in_flash_func`, however the semantics are distinct and a `__time_critical_func` * may in the future be treated more specially to reduce the overhead when calling such function from a flash * function. * * For example a function called my_func taking an int parameter: * * void __time_critical(my_func)(int some_arg) { * * The function is placed in the `.time_critical.` linker section * * \see __not_in_flash_func */ #define __time_critical_func(func_name) __not_in_flash_func(func_name) /*! \brief Indicate a function should not be stored in flash and should not be inlined * \ingroup pico_platform * * Decorates a function name, such that the function will execute from RAM, explicitly marking it as * noinline to prevent it being inlined into a flash function by the compiler * * For example a function called my_func taking an int parameter: * * void __no_inline_not_in_flash_func(my_func)(int some_arg) { * * The function is placed in the `.time_critical.` linker section */ #define __no_inline_not_in_flash_func(func_name) __noinline __not_in_flash_func(func_name) #define __packed_aligned __packed __aligned(4) /*! \brief Attribute to force inlining of a function regardless of optimization level * \ingroup pico_platform * * For example my_function here will always be inlined: * * int __force_inline my_function(int x) { * */ #if PICO_C_COMPILER_IS_GNU && (__GNUC__ <= 6 || (__GNUC__ == 7 && (__GNUC_MINOR__ < 3 || !defined(__cplusplus)))) #define __force_inline inline __always_inline #else #define __force_inline __always_inline #endif /*! \brief Macro to determine the number of elements in an array * \ingroup pico_platform */ #ifndef count_of #define count_of(a) (sizeof(a)/sizeof((a)[0])) #endif /*! \brief Macro to return the maximum of two comparable values * \ingroup pico_platform */ #ifndef MAX #define MAX(a, b) ((a)>(b)?(a):(b)) #endif /*! \brief Macro to return the minimum of two comparable values * \ingroup pico_platform */ #ifndef MIN #define MIN(a, b) ((b)>(a)?(a):(b)) #endif #define pico_default_asm(...) __asm (".syntax unified\n" __VA_ARGS__) #define pico_default_asm_volatile(...) __asm volatile (".syntax unified\n" __VA_ARGS__) /*! \brief Execute a breakpoint instruction * \ingroup pico_platform */ static inline void __breakpoint(void) { pico_default_asm ("bkpt #0"); } /*! \brief Ensure that the compiler does not move memory access across this method call * \ingroup pico_platform * * For example in the following code: * * *some_memory_location = var_a; * __compiler_memory_barrier(); * uint32_t var_b = *some_other_memory_location * * The compiler will not move the load from `some_other_memory_location` above the memory barrier (which it otherwise * might - even above the memory store!) */ __force_inline static void __compiler_memory_barrier(void) { pico_default_asm_volatile ("" : : : "memory"); } /*! \brief Macro for converting memory addresses to 32 bit addresses suitable for DMA * \ingroup pico_platform * * This is just a cast to `uintptr_t` on the RP2040, however you may want to use this when developing code * that also runs in "host" mode. If the host mode is 64 bit and you are embedding data pointers * in other data (e.g. DMA chaining), then there is a need in "host" mode to convert a 64 bit native * pointer to a 32 bit value for storage, which can be done using this macro. */ #define host_safe_hw_ptr(x) ((uintptr_t)(x)) #define native_safe_hw_ptr(x) host_safe_hw_ptr(x) /*! \brief Panics with the message "Unsupported" * \ingroup pico_platform * \see panic */ void __attribute__((noreturn)) panic_unsupported(void); /*! \brief Displays a panic message and halts execution * \ingroup pico_platform * * An attempt is made to output the message to all registered STDOUT drivers * after which this method executes a BKPT instruction. * * @param fmt format string (printf-like) * @param ... printf-like arguments */ void __attribute__((noreturn)) panic(const char *fmt, ...); #ifdef NDEBUG #define panic_compact(...) panic(__VA_ARGS__) #else #define panic_compact(...) panic("") #endif // PICO_CONFIG: PICO_NO_FPGA_CHECK, Remove the FPGA platform check for small code size reduction, type=bool, default=0, advanced=true, group=pico_runtime #ifndef PICO_NO_FPGA_CHECK #define PICO_NO_FPGA_CHECK 0 #endif #if PICO_NO_FPGA_CHECK static inline bool running_on_fpga(void) {return false;} #else bool running_on_fpga(void); #endif /*! \brief Returns the RP2040 chip revision number * \ingroup pico_platform * @return the RP2040 chip revision number (1 for B0/B1, 2 for B2) */ uint8_t rp2040_chip_version(void); /*! \brief Returns the RP2040 rom version number * \ingroup pico_platform * @return the RP2040 rom version number (1 for RP2040-B0, 2 for RP2040-B1, 3 for RP2040-B2) */ static inline uint8_t rp2040_rom_version(void) { GCC_Pragma("GCC diagnostic push") GCC_Pragma("GCC diagnostic ignored \"-Warray-bounds\"") return *(uint8_t*)0x13; GCC_Pragma("GCC diagnostic pop") } /*! \brief No-op function for the body of tight loops * \ingroup pico_platform * * No-op function intended to be called by any tight hardware polling loop. Using this ubiquitously * makes it much easier to find tight loops, but also in the future \#ifdef-ed support for lockup * debugging might be added */ static __force_inline void tight_loop_contents(void) {} /*! \brief Multiply two integers using an assembly `MUL` instruction * \ingroup pico_platform * * This multiplies a by b using multiply instruction using the ARM mul instruction regardless of values (the compiler * might otherwise choose to perform shifts/adds), i.e. this is a 1 cycle operation. * * \param a the first operand * \param b the second operand * \return a * b */ __force_inline static int32_t __mul_instruction(int32_t a, int32_t b) { pico_default_asm ("muls %0, %1" : "+l" (a) : "l" (b) : ); return a; } /*! \brief multiply two integer values using the fastest method possible * \ingroup pico_platform * * Efficiently multiplies value a by possibly constant value b. * * If b is known to be constant and not zero or a power of 2, then a mul instruction is used rather than gcc's default * which is often a slow combination of shifts and adds. If b is a power of 2 then a single shift is of course preferable * and will be used * * \param a the first operand * \param b the second operand * \return a * b */ #define __fast_mul(a, b) __builtin_choose_expr(__builtin_constant_p(b) && !__builtin_constant_p(a), \ (__builtin_popcount(b) >= 2 ? __mul_instruction(a,b) : (a)*(b)), \ (a)*(b)) /*! \brief Utility macro to assert two types are equivalent. * \ingroup pico_platform * * This macro can be useful in other macros along with `typeof` to assert that two parameters are of equivalent type * (or that a single parameter is of an expected type) */ #define __check_type_compatible(type_a, type_b) static_assert(__builtin_types_compatible_p(type_a, type_b), __STRING(type_a) " is not compatible with " __STRING(type_b)); /*! \brief Get the current exception level on this core * \ingroup pico_platform * * \return the exception number if the CPU is handling an exception, or 0 otherwise */ static __force_inline uint __get_current_exception(void) { uint exception; pico_default_asm( "mrs %0, ipsr" : "=l" (exception)); return exception; } #define WRAPPER_FUNC(x) __wrap_ ## x #define REAL_FUNC(x) __real_ ## x /*! \brief Helper method to busy-wait for at least the given number of cycles * \ingroup pico_platform * * This method is useful for introducing very short delays. * * This method busy-waits in a tight loop for the given number of system clock cycles. The total wait time is only accurate to within 2 cycles, * and this method uses a loop counter rather than a hardware timer, so the method will always take longer than expected if an * interrupt is handled on the calling core during the busy-wait; you can of course disable interrupts to prevent this. * * You can use \ref clock_get_hz(clk_sys) to determine the number of clock cycles per second if you want to convert an actual * time duration to a number of cycles. * * \param minimum_cycles the minimum number of system clock cycles to delay for */ static inline void busy_wait_at_least_cycles(uint32_t minimum_cycles) { pico_default_asm_volatile( "1: subs %0, #3\n" "bcs 1b\n" : "+l" (minimum_cycles) : : "memory" ); } /*! \brief Get the current core number * \ingroup pico_platform * * \return The core number the call was made from */ __force_inline static uint get_core_num(void) { return (*(uint32_t *) (SIO_BASE + SIO_CPUID_OFFSET)); } #ifdef __cplusplus } #endif #else // __ASSEMBLER__ #if defined __GNUC__ // note LLVM defines __GNUC__ #ifdef __clang__ #define PICO_ASSEMBLER_IS_CLANG 1 #else #define PICO_ASSEMBLER_IS_GNU 1 #endif #elif defined __ICCARM__ #else #error Unsupported toolchain #endif #define WRAPPER_FUNC_NAME(x) __wrap_##x #define SECTION_NAME(x) .text.##x #define RAM_SECTION_NAME(x) .time_critical.##x #endif // !__ASSEMBLER__ #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_platform/platform.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" #include "hardware/address_mapped.h" #include "hardware/regs/tbman.h" #include "hardware/regs/sysinfo.h" // Note we leave the FPGA check in by default so that we can run bug repro // binaries coming in from the wild on the FPGA platform. It takes up around // 48 bytes if you include all the calls, so you can pass PICO_NO_FPGA_CHECK=1 // to remove it. The FPGA check is used to skip initialisation of hardware // (mainly clock generators and oscillators) that aren't present on FPGA. #if !PICO_NO_FPGA_CHECK // Inline stub provided in header if this code is unused (so folding can be // done in each TU instead of relying on LTO) bool running_on_fpga(void) { return !!((*(io_ro_32 *)TBMAN_BASE) & TBMAN_PLATFORM_FPGA_BITS); } #endif #define MANUFACTURER_RPI 0x927 #define PART_RP2 0x2 uint8_t rp2040_chip_version(void) { // First register of sysinfo is chip id uint32_t chip_id = *((io_ro_32*)(SYSINFO_BASE + SYSINFO_CHIP_ID_OFFSET)); uint32_t __unused manufacturer = chip_id & SYSINFO_CHIP_ID_MANUFACTURER_BITS; uint32_t __unused part = (chip_id & SYSINFO_CHIP_ID_PART_BITS) >> SYSINFO_CHIP_ID_PART_LSB; assert(manufacturer == MANUFACTURER_RPI); assert(part == PART_RP2); // Version 1 == B0/B1 uint version = (chip_id & SYSINFO_CHIP_ID_REVISION_BITS) >> SYSINFO_CHIP_ID_REVISION_LSB; return (uint8_t)version; } ================================================ FILE: pico-sdk/src/rp2_common/pico_printf/CMakeLists.txt ================================================ if (NOT TARGET pico_printf) # library to be depended on - we make this depend on particular implementations using per target generator expressions pico_add_library(pico_printf) # no custom implementation; falls thru to compiler pico_add_library(pico_printf_compiler) target_include_directories(pico_printf_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) # add alias "default" which is just pico. add_library(pico_printf_default INTERFACE) target_link_libraries(pico_printf_default INTERFACE pico_printf_pico) set(PICO_DEFAULT_PRINTF_IMPL pico_printf_default) target_link_libraries(pico_printf INTERFACE $>,$,${PICO_DEFAULT_PRINTF_IMPL}>) pico_add_library(pico_printf_pico) target_sources(pico_printf_pico INTERFACE ${CMAKE_CURRENT_LIST_DIR}/printf.c ) target_link_libraries(pico_printf_pico INTERFACE pico_printf_headers) pico_add_library(pico_printf_none) target_sources(pico_printf_none INTERFACE ${CMAKE_CURRENT_LIST_DIR}/printf_none.S ) target_link_libraries(pico_printf_none INTERFACE pico_printf_headers) function(wrap_printf_functions TARGET) # note that printf and vprintf are in pico_stdio so we can provide thread safety pico_wrap_function(${TARGET} sprintf) pico_wrap_function(${TARGET} snprintf) pico_wrap_function(${TARGET} vsnprintf) endfunction() wrap_printf_functions(pico_printf_pico) wrap_printf_functions(pico_printf_none) macro(pico_set_printf_implementation TARGET IMPL) get_target_property(target_type ${TARGET} TYPE) if ("EXECUTABLE" STREQUAL "${target_type}") set_target_properties(${TARGET} PROPERTIES PICO_TARGET_PRINTF_IMPL "pico_printf_${IMPL}") else() message(FATAL_ERROR "printf implementation must be set on executable not library") endif() endmacro() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_printf/include/pico/printf.h ================================================ /////////////////////////////////////////////////////////////////////////////// // \author (c) Marco Paland (info@paland.com) // 2014-2019, PALANDesign Hannover, Germany // // \license The MIT License (MIT) // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // // \brief Tiny printf, sprintf and snprintf implementation, optimized for speed on // embedded systems with a very limited resources. // Use this instead of bloated standard/newlib printf. // These routines are thread safe and reentrant. // /////////////////////////////////////////////////////////////////////////////// #ifndef _PICO_PRINTF_H #define _PICO_PRINTF_H /** \file printf.h * \defgroup pico_printf pico_printf * * Compact replacement for printf by Marco Paland (info@paland.com) */ #ifdef __cplusplus extern "C" { #endif #include "pico.h" #include #include // PICO_CONFIG: PICO_PRINTF_ALWAYS_INCLUDED, Whether to always include printf code even if only called weakly (by panic), type=bool, default=1 in debug build 0 otherwise, group=pico_printf #ifndef PICO_PRINTF_ALWAYS_INCLUDED #ifndef NDEBUG #define PICO_PRINTF_ALWAYS_INCLUDED 1 #else #define PICO_PRINTF_ALWAYS_INCLUDED 0 #endif #endif #if LIB_PICO_PRINTF_PICO // weak raw printf may be a puts if printf has not been called, // so that we can support gc of printf when it isn't called // // it is called raw to distinguish it from the regular printf which // is in stdio.c and does mutex protection #if !PICO_PRINTF_ALWAYS_INCLUDED bool __printflike(1, 0) weak_raw_printf(const char *fmt, ...); bool weak_raw_vprintf(const char *fmt, va_list args); #else #define weak_raw_printf(...) ({printf(__VA_ARGS__); true;}) #define weak_raw_vprintf(fmt,va) ({vprintf(fmt,va); true;}) #endif /** * printf with output function * You may use this as dynamic alternative to printf() with its fixed _putchar() output * \param out An output function which takes one character and an argument pointer * \param arg An argument pointer for user data passed to output function * \param format A string that specifies the format of the output * \return The number of characters that are sent to the output function, not counting the terminating null character */ int vfctprintf(void (*out)(char character, void *arg), void *arg, const char *format, va_list va); #else #define weak_raw_printf(...) ({printf(__VA_ARGS__); true;}) #define weak_raw_vprintf(fmt,va) ({vprintf(fmt,va); true;}) #endif #ifdef __cplusplus } #endif #endif // _PRINTF_H_ ================================================ FILE: pico-sdk/src/rp2_common/pico_printf/printf.c ================================================ /////////////////////////////////////////////////////////////////////////////// // \author (c) Marco Paland (info@paland.com) // 2014-2019, PALANDesign Hannover, Germany // // \license The MIT License (MIT) // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // // \brief Tiny printf, sprintf and (v)snprintf implementation, optimized for speed on // embedded systems with a very limited resources. These routines are thread // safe and reentrant! // Use this instead of the bloated standard/newlib printf cause these use // malloc for printf (and may not be thread safe). // /////////////////////////////////////////////////////////////////////////////// #include #include #include #include "pico.h" #include "pico/printf.h" // PICO_CONFIG: PICO_PRINTF_NTOA_BUFFER_SIZE, Define printf ntoa buffer size, min=0, max=128, default=32, group=pico_printf // 'ntoa' conversion buffer size, this must be big enough to hold one converted // numeric number including padded zeros (dynamically created on stack) #ifndef PICO_PRINTF_NTOA_BUFFER_SIZE #define PICO_PRINTF_NTOA_BUFFER_SIZE 32U #endif // PICO_CONFIG: PICO_PRINTF_FTOA_BUFFER_SIZE, Define printf ftoa buffer size, min=0, max=128, default=32, group=pico_printf // 'ftoa' conversion buffer size, this must be big enough to hold one converted // float number including padded zeros (dynamically created on stack) #ifndef PICO_PRINTF_FTOA_BUFFER_SIZE #define PICO_PRINTF_FTOA_BUFFER_SIZE 32U #endif // PICO_CONFIG: PICO_PRINTF_SUPPORT_FLOAT, Enable floating point printing, type=bool, default=1, group=pico_printf // support for the floating point type (%f) #ifndef PICO_PRINTF_SUPPORT_FLOAT #define PICO_PRINTF_SUPPORT_FLOAT 1 #endif // PICO_CONFIG: PICO_PRINTF_SUPPORT_EXPONENTIAL, Enable exponential floating point printing, type=bool, default=1, group=pico_printf // support for exponential floating point notation (%e/%g) #ifndef PICO_PRINTF_SUPPORT_EXPONENTIAL #define PICO_PRINTF_SUPPORT_EXPONENTIAL 1 #endif // PICO_CONFIG: PICO_PRINTF_DEFAULT_FLOAT_PRECISION, Define default floating point precision, min=1, max=16, default=6, group=pico_printf #ifndef PICO_PRINTF_DEFAULT_FLOAT_PRECISION #define PICO_PRINTF_DEFAULT_FLOAT_PRECISION 6U #endif // PICO_CONFIG: PICO_PRINTF_MAX_FLOAT, Define the largest float suitable to print with %f, min=1, max=1e9, default=1e9, group=pico_printf #ifndef PICO_PRINTF_MAX_FLOAT #define PICO_PRINTF_MAX_FLOAT 1e9 #endif // PICO_CONFIG: PICO_PRINTF_SUPPORT_LONG_LONG, Enable support for long long types (%llu or %p), type=bool, default=1, group=pico_printf #ifndef PICO_PRINTF_SUPPORT_LONG_LONG #define PICO_PRINTF_SUPPORT_LONG_LONG 1 #endif // PICO_CONFIG: PICO_PRINTF_SUPPORT_PTRDIFF_T, Enable support for the ptrdiff_t type (%t), type=bool, default=1, group=pico_printf // ptrdiff_t is normally defined in as long or long long type #ifndef PICO_PRINTF_SUPPORT_PTRDIFF_T #define PICO_PRINTF_SUPPORT_PTRDIFF_T 1 #endif /////////////////////////////////////////////////////////////////////////////// // internal flag definitions #define FLAGS_ZEROPAD (1U << 0U) #define FLAGS_LEFT (1U << 1U) #define FLAGS_PLUS (1U << 2U) #define FLAGS_SPACE (1U << 3U) #define FLAGS_HASH (1U << 4U) #define FLAGS_UPPERCASE (1U << 5U) #define FLAGS_CHAR (1U << 6U) #define FLAGS_SHORT (1U << 7U) #define FLAGS_LONG (1U << 8U) #define FLAGS_LONG_LONG (1U << 9U) #define FLAGS_PRECISION (1U << 10U) #define FLAGS_ADAPT_EXP (1U << 11U) // import float.h for DBL_MAX #if PICO_PRINTF_SUPPORT_FLOAT #include #endif // output function type typedef void (*out_fct_type)(char character, void *buffer, size_t idx, size_t maxlen); #if !PICO_PRINTF_ALWAYS_INCLUDED // we don't have a way to specify a truly weak symbol reference (the linker will always include targets in a single link step, // so we make a function pointer that is initialized on the first printf called... if printf is not included in the binary // (or has never been called - we can't tell) then this will be null. the assumption is that if you are using printf // you are likely to have printed something. static int (*lazy_vsnprintf)(out_fct_type out, char *buffer, const size_t maxlen, const char *format, va_list va); #endif // wrapper (used as buffer) for output function type typedef struct { void (*fct)(char character, void *arg); void *arg; } out_fct_wrap_type; // internal buffer output static inline void _out_buffer(char character, void *buffer, size_t idx, size_t maxlen) { if (idx < maxlen) { ((char *) buffer)[idx] = character; } } // internal null output static inline void _out_null(char character, void *buffer, size_t idx, size_t maxlen) { (void) character; (void) buffer; (void) idx; (void) maxlen; } // internal output function wrapper static inline void _out_fct(char character, void *buffer, size_t idx, size_t maxlen) { (void) idx; (void) maxlen; if (character) { // buffer is the output fct pointer ((out_fct_wrap_type *) buffer)->fct(character, ((out_fct_wrap_type *) buffer)->arg); } } // internal secure strlen // \return The length of the string (excluding the terminating 0) limited by 'maxsize' static inline unsigned int _strnlen_s(const char *str, size_t maxsize) { const char *s; for (s = str; *s && maxsize--; ++s); return (unsigned int) (s - str); } // internal test if char is a digit (0-9) // \return true if char is a digit static inline bool _is_digit(char ch) { return (ch >= '0') && (ch <= '9'); } // internal ASCII string to unsigned int conversion static unsigned int _atoi(const char **str) { unsigned int i = 0U; while (_is_digit(**str)) { i = i * 10U + (unsigned int) (*((*str)++) - '0'); } return i; } // output the specified string in reverse, taking care of any zero-padding static size_t _out_rev(out_fct_type out, char *buffer, size_t idx, size_t maxlen, const char *buf, size_t len, unsigned int width, unsigned int flags) { const size_t start_idx = idx; // pad spaces up to given width if (!(flags & FLAGS_LEFT) && !(flags & FLAGS_ZEROPAD)) { for (size_t i = len; i < width; i++) { out(' ', buffer, idx++, maxlen); } } // reverse string while (len) { out(buf[--len], buffer, idx++, maxlen); } // append pad spaces up to given width if (flags & FLAGS_LEFT) { while (idx - start_idx < width) { out(' ', buffer, idx++, maxlen); } } return idx; } // internal itoa format static size_t _ntoa_format(out_fct_type out, char *buffer, size_t idx, size_t maxlen, char *buf, size_t len, bool negative, unsigned int base, unsigned int prec, unsigned int width, unsigned int flags) { // pad leading zeros if (!(flags & FLAGS_LEFT)) { if (width && (flags & FLAGS_ZEROPAD) && (negative || (flags & (FLAGS_PLUS | FLAGS_SPACE)))) { width--; } while ((len < prec) && (len < PICO_PRINTF_NTOA_BUFFER_SIZE)) { buf[len++] = '0'; } while ((flags & FLAGS_ZEROPAD) && (len < width) && (len < PICO_PRINTF_NTOA_BUFFER_SIZE)) { buf[len++] = '0'; } } // handle hash if (flags & FLAGS_HASH) { if (!(flags & FLAGS_PRECISION) && len && ((len == prec) || (len == width))) { len--; if (len && (base == 16U)) { len--; } } if ((base == 16U) && !(flags & FLAGS_UPPERCASE) && (len < PICO_PRINTF_NTOA_BUFFER_SIZE)) { buf[len++] = 'x'; } else if ((base == 16U) && (flags & FLAGS_UPPERCASE) && (len < PICO_PRINTF_NTOA_BUFFER_SIZE)) { buf[len++] = 'X'; } else if ((base == 2U) && (len < PICO_PRINTF_NTOA_BUFFER_SIZE)) { buf[len++] = 'b'; } if (len < PICO_PRINTF_NTOA_BUFFER_SIZE) { buf[len++] = '0'; } } if (len < PICO_PRINTF_NTOA_BUFFER_SIZE) { if (negative) { buf[len++] = '-'; } else if (flags & FLAGS_PLUS) { buf[len++] = '+'; // ignore the space if the '+' exists } else if (flags & FLAGS_SPACE) { buf[len++] = ' '; } } return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags); } // internal itoa for 'long' type static size_t _ntoa_long(out_fct_type out, char *buffer, size_t idx, size_t maxlen, unsigned long value, bool negative, unsigned long base, unsigned int prec, unsigned int width, unsigned int flags) { char buf[PICO_PRINTF_NTOA_BUFFER_SIZE]; size_t len = 0U; // no hash for 0 values if (!value) { flags &= ~FLAGS_HASH; } // write if precision != 0 and value is != 0 if (!(flags & FLAGS_PRECISION) || value) { do { const char digit = (char) (value % base); buf[len++] = (char)(digit < 10 ? '0' + digit : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10); value /= base; } while (value && (len < PICO_PRINTF_NTOA_BUFFER_SIZE)); } return _ntoa_format(out, buffer, idx, maxlen, buf, len, negative, (unsigned int) base, prec, width, flags); } // internal itoa for 'long long' type #if PICO_PRINTF_SUPPORT_LONG_LONG static size_t _ntoa_long_long(out_fct_type out, char *buffer, size_t idx, size_t maxlen, unsigned long long value, bool negative, unsigned long long base, unsigned int prec, unsigned int width, unsigned int flags) { char buf[PICO_PRINTF_NTOA_BUFFER_SIZE]; size_t len = 0U; // no hash for 0 values if (!value) { flags &= ~FLAGS_HASH; } // write if precision != 0 and value is != 0 if (!(flags & FLAGS_PRECISION) || value) { do { const char digit = (char) (value % base); buf[len++] = (char)(digit < 10 ? '0' + digit : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10); value /= base; } while (value && (len < PICO_PRINTF_NTOA_BUFFER_SIZE)); } return _ntoa_format(out, buffer, idx, maxlen, buf, len, negative, (unsigned int) base, prec, width, flags); } #endif // PICO_PRINTF_SUPPORT_LONG_LONG #if PICO_PRINTF_SUPPORT_FLOAT #if PICO_PRINTF_SUPPORT_EXPONENTIAL // forward declaration so that _ftoa can switch to exp notation for values > PICO_PRINTF_MAX_FLOAT static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen, double value, unsigned int prec, unsigned int width, unsigned int flags); #endif #define is_nan __builtin_isnan // internal ftoa for fixed decimal floating point static size_t _ftoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen, double value, unsigned int prec, unsigned int width, unsigned int flags) { char buf[PICO_PRINTF_FTOA_BUFFER_SIZE]; size_t len = 0U; double diff = 0.0; // powers of 10 static const double pow10[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000}; // test for special values if (is_nan(value)) return _out_rev(out, buffer, idx, maxlen, "nan", 3, width, flags); if (value < -DBL_MAX) return _out_rev(out, buffer, idx, maxlen, "fni-", 4, width, flags); if (value > DBL_MAX) return _out_rev(out, buffer, idx, maxlen, (flags & FLAGS_PLUS) ? "fni+" : "fni", (flags & FLAGS_PLUS) ? 4U : 3U, width, flags); // test for very large values // standard printf behavior is to print EVERY whole number digit -- which could be 100s of characters overflowing your buffers == bad if ((value > PICO_PRINTF_MAX_FLOAT) || (value < -PICO_PRINTF_MAX_FLOAT)) { #if PICO_PRINTF_SUPPORT_EXPONENTIAL return _etoa(out, buffer, idx, maxlen, value, prec, width, flags); #else return 0U; #endif } // test for negative bool negative = false; if (value < 0) { negative = true; value = 0 - value; } // set default precision, if not set explicitly if (!(flags & FLAGS_PRECISION)) { prec = PICO_PRINTF_DEFAULT_FLOAT_PRECISION; } // limit precision to 9, cause a prec >= 10 can lead to overflow errors while ((len < PICO_PRINTF_FTOA_BUFFER_SIZE) && (prec > 9U)) { buf[len++] = '0'; prec--; } int whole = (int) value; double tmp = (value - whole) * pow10[prec]; unsigned long frac = (unsigned long) tmp; diff = tmp - frac; if (diff > 0.5) { ++frac; // handle rollover, e.g. case 0.99 with prec 1 is 1.0 if (frac >= pow10[prec]) { frac = 0; ++whole; } } else if (diff < 0.5) { } else if ((frac == 0U) || (frac & 1U)) { // if halfway, round up if odd OR if last digit is 0 ++frac; } if (prec == 0U) { diff = value - (double) whole; if (!((diff < 0.5) || (diff > 0.5)) && (whole & 1)) { // exactly 0.5 and ODD, then round up // 1.5 -> 2, but 2.5 -> 2 ++whole; } } else { unsigned int count = prec; // now do fractional part, as an unsigned number while (len < PICO_PRINTF_FTOA_BUFFER_SIZE) { --count; buf[len++] = (char) (48U + (frac % 10U)); if (!(frac /= 10U)) { break; } } // add extra 0s while ((len < PICO_PRINTF_FTOA_BUFFER_SIZE) && (count-- > 0U)) { buf[len++] = '0'; } if (len < PICO_PRINTF_FTOA_BUFFER_SIZE) { // add decimal buf[len++] = '.'; } } // do whole part, number is reversed while (len < PICO_PRINTF_FTOA_BUFFER_SIZE) { buf[len++] = (char) (48 + (whole % 10)); if (!(whole /= 10)) { break; } } // pad leading zeros if (!(flags & FLAGS_LEFT) && (flags & FLAGS_ZEROPAD)) { if (width && (negative || (flags & (FLAGS_PLUS | FLAGS_SPACE)))) { width--; } while ((len < width) && (len < PICO_PRINTF_FTOA_BUFFER_SIZE)) { buf[len++] = '0'; } } if (len < PICO_PRINTF_FTOA_BUFFER_SIZE) { if (negative) { buf[len++] = '-'; } else if (flags & FLAGS_PLUS) { buf[len++] = '+'; // ignore the space if the '+' exists } else if (flags & FLAGS_SPACE) { buf[len++] = ' '; } } return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags); } #if PICO_PRINTF_SUPPORT_EXPONENTIAL // internal ftoa variant for exponential floating-point type, contributed by Martijn Jasperse static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen, double value, unsigned int prec, unsigned int width, unsigned int flags) { // check for NaN and special values if (is_nan(value) || (value > DBL_MAX) || (value < -DBL_MAX)) { return _ftoa(out, buffer, idx, maxlen, value, prec, width, flags); } // determine the sign const bool negative = value < 0; if (negative) { value = -value; } // default precision if (!(flags & FLAGS_PRECISION)) { prec = PICO_PRINTF_DEFAULT_FLOAT_PRECISION; } // determine the decimal exponent // based on the algorithm by David Gay (https://www.ampl.com/netlib/fp/dtoa.c) union { uint64_t U; double F; } conv; conv.F = value; int expval; if (conv.U) { int exp2 = (int) ((conv.U >> 52U) & 0x07FFU) - 1023; // effectively log2 conv.U = (conv.U & ((1ULL << 52U) - 1U)) | (1023ULL << 52U); // drop the exponent so conv.F is now in [1,2) // now approximate log10 from the log2 integer part and an expansion of ln around 1.5 expval = (int) (0.1760912590558 + exp2 * 0.301029995663981 + (conv.F - 1.5) * 0.289529654602168); // now we want to compute 10^expval but we want to be sure it won't overflow exp2 = (int) (expval * 3.321928094887362 + 0.5); const double z = expval * 2.302585092994046 - exp2 * 0.6931471805599453; const double z2 = z * z; conv.U = (uint64_t) (exp2 + 1023) << 52U; // compute exp(z) using continued fractions, see https://en.wikipedia.org/wiki/Exponential_function#Continued_fractions_for_ex conv.F *= 1 + 2 * z / (2 - z + (z2 / (6 + (z2 / (10 + z2 / 14))))); // correct for rounding errors if (value < conv.F) { expval--; conv.F /= 10; } } else { expval = 0; } // the exponent format is "%+03d" and largest value is "307", so set aside 4-5 characters unsigned int minwidth = ((expval < 100) && (expval > -100)) ? 4U : 5U; // in "%g" mode, "prec" is the number of *significant figures* not decimals if (flags & FLAGS_ADAPT_EXP) { // do we want to fall-back to "%f" mode? if ((conv.U == 0) || ((value >= 1e-4) && (value < 1e6))) { if ((int) prec > expval) { prec = (unsigned) ((int) prec - expval - 1); } else { prec = 0; } flags |= FLAGS_PRECISION; // make sure _ftoa respects precision // no characters in exponent minwidth = 0U; expval = 0; } else { // we use one sigfig for the whole part if ((prec > 0) && (flags & FLAGS_PRECISION)) { --prec; } } } // will everything fit? unsigned int fwidth = width; if (width > minwidth) { // we didn't fall-back so subtract the characters required for the exponent fwidth -= minwidth; } else { // not enough characters, so go back to default sizing fwidth = 0U; } if ((flags & FLAGS_LEFT) && minwidth) { // if we're padding on the right, DON'T pad the floating part fwidth = 0U; } // rescale the float value if (expval) { value /= conv.F; } // output the floating part const size_t start_idx = idx; idx = _ftoa(out, buffer, idx, maxlen, negative ? -value : value, prec, fwidth, flags & ~FLAGS_ADAPT_EXP); // output the exponent part if (minwidth) { // output the exponential symbol out((flags & FLAGS_UPPERCASE) ? 'E' : 'e', buffer, idx++, maxlen); // output the exponent value idx = _ntoa_long(out, buffer, idx, maxlen, (uint)((expval < 0) ? -expval : expval), expval < 0, 10, 0, minwidth - 1, FLAGS_ZEROPAD | FLAGS_PLUS); // might need to right-pad spaces if (flags & FLAGS_LEFT) { while (idx - start_idx < width) out(' ', buffer, idx++, maxlen); } } return idx; } #endif // PICO_PRINTF_SUPPORT_EXPONENTIAL #endif // PICO_PRINTF_SUPPORT_FLOAT // internal vsnprintf static int _vsnprintf(out_fct_type out, char *buffer, const size_t maxlen, const char *format, va_list va) { #if !PICO_PRINTF_ALWAYS_INCLUDED lazy_vsnprintf = _vsnprintf; #endif unsigned int flags, width, precision, n; size_t idx = 0U; if (!buffer) { // use null output function out = _out_null; } while (*format) { // format specifier? %[flags][width][.precision][length] if (*format != '%') { // no out(*format, buffer, idx++, maxlen); format++; continue; } else { // yes, evaluate it format++; } // evaluate flags flags = 0U; do { switch (*format) { case '0': flags |= FLAGS_ZEROPAD; format++; n = 1U; break; case '-': flags |= FLAGS_LEFT; format++; n = 1U; break; case '+': flags |= FLAGS_PLUS; format++; n = 1U; break; case ' ': flags |= FLAGS_SPACE; format++; n = 1U; break; case '#': flags |= FLAGS_HASH; format++; n = 1U; break; default : n = 0U; break; } } while (n); // evaluate width field width = 0U; if (_is_digit(*format)) { width = _atoi(&format); } else if (*format == '*') { const int w = va_arg(va, int); if (w < 0) { flags |= FLAGS_LEFT; // reverse padding width = (unsigned int) -w; } else { width = (unsigned int) w; } format++; } // evaluate precision field precision = 0U; if (*format == '.') { flags |= FLAGS_PRECISION; format++; if (_is_digit(*format)) { precision = _atoi(&format); } else if (*format == '*') { const int prec = (int) va_arg(va, int); precision = prec > 0 ? (unsigned int) prec : 0U; format++; } } // evaluate length field switch (*format) { case 'l' : flags |= FLAGS_LONG; format++; if (*format == 'l') { flags |= FLAGS_LONG_LONG; format++; } break; case 'h' : flags |= FLAGS_SHORT; format++; if (*format == 'h') { flags |= FLAGS_CHAR; format++; } break; #if PICO_PRINTF_SUPPORT_PTRDIFF_T case 't' : flags |= (sizeof(ptrdiff_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG); format++; break; #endif case 'j' : flags |= (sizeof(intmax_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG); format++; break; case 'z' : flags |= (sizeof(size_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG); format++; break; default : break; } // evaluate specifier switch (*format) { case 'd' : case 'i' : case 'u' : case 'x' : case 'X' : case 'o' : case 'b' : { // set the base unsigned int base; if (*format == 'x' || *format == 'X') { base = 16U; } else if (*format == 'o') { base = 8U; } else if (*format == 'b') { base = 2U; } else { base = 10U; flags &= ~FLAGS_HASH; // no hash for dec format } // uppercase if (*format == 'X') { flags |= FLAGS_UPPERCASE; } // no plus or space flag for u, x, X, o, b if ((*format != 'i') && (*format != 'd')) { flags &= ~(FLAGS_PLUS | FLAGS_SPACE); } // ignore '0' flag when precision is given if (flags & FLAGS_PRECISION) { flags &= ~FLAGS_ZEROPAD; } // convert the integer if ((*format == 'i') || (*format == 'd')) { // signed if (flags & FLAGS_LONG_LONG) { #if PICO_PRINTF_SUPPORT_LONG_LONG const long long value = va_arg(va, long long); idx = _ntoa_long_long(out, buffer, idx, maxlen, (unsigned long long) (value > 0 ? value : 0 - value), value < 0, base, precision, width, flags); #endif } else if (flags & FLAGS_LONG) { const long value = va_arg(va, long); idx = _ntoa_long(out, buffer, idx, maxlen, (unsigned long) (value > 0 ? value : 0 - value), value < 0, base, precision, width, flags); } else { const int value = (flags & FLAGS_CHAR) ? (char) va_arg(va, int) : (flags & FLAGS_SHORT) ? (short int) va_arg(va, int) : va_arg(va, int); idx = _ntoa_long(out, buffer, idx, maxlen, (unsigned int) (value > 0 ? value : 0 - value), value < 0, base, precision, width, flags); } } else { // unsigned if (flags & FLAGS_LONG_LONG) { #if PICO_PRINTF_SUPPORT_LONG_LONG idx = _ntoa_long_long(out, buffer, idx, maxlen, va_arg(va, unsigned long long), false, base, precision, width, flags); #endif } else if (flags & FLAGS_LONG) { idx = _ntoa_long(out, buffer, idx, maxlen, va_arg(va, unsigned long), false, base, precision, width, flags); } else { const unsigned int value = (flags & FLAGS_CHAR) ? (unsigned char) va_arg(va, unsigned int) : (flags & FLAGS_SHORT) ? (unsigned short int) va_arg(va, unsigned int) : va_arg(va, unsigned int); idx = _ntoa_long(out, buffer, idx, maxlen, value, false, base, precision, width, flags); } } format++; break; } case 'f' : case 'F' : #if PICO_PRINTF_SUPPORT_FLOAT if (*format == 'F') flags |= FLAGS_UPPERCASE; idx = _ftoa(out, buffer, idx, maxlen, va_arg(va, double), precision, width, flags); #else for(int i=0;i<2;i++) out('?', buffer, idx++, maxlen); va_arg(va, double); #endif format++; break; case 'e': case 'E': case 'g': case 'G': #if PICO_PRINTF_SUPPORT_FLOAT && PICO_PRINTF_SUPPORT_EXPONENTIAL if ((*format == 'g') || (*format == 'G')) flags |= FLAGS_ADAPT_EXP; if ((*format == 'E') || (*format == 'G')) flags |= FLAGS_UPPERCASE; idx = _etoa(out, buffer, idx, maxlen, va_arg(va, double), precision, width, flags); #else for(int i=0;i<2;i++) out('?', buffer, idx++, maxlen); va_arg(va, double); #endif format++; break; case 'c' : { unsigned int l = 1U; // pre padding if (!(flags & FLAGS_LEFT)) { while (l++ < width) { out(' ', buffer, idx++, maxlen); } } // char output out((char) va_arg(va, int), buffer, idx++, maxlen); // post padding if (flags & FLAGS_LEFT) { while (l++ < width) { out(' ', buffer, idx++, maxlen); } } format++; break; } case 's' : { const char *p = va_arg(va, char*); unsigned int l = _strnlen_s(p, precision ? precision : (size_t) -1); // pre padding if (flags & FLAGS_PRECISION) { l = (l < precision ? l : precision); } if (!(flags & FLAGS_LEFT)) { while (l++ < width) { out(' ', buffer, idx++, maxlen); } } // string output while ((*p != 0) && (!(flags & FLAGS_PRECISION) || precision--)) { out(*(p++), buffer, idx++, maxlen); } // post padding if (flags & FLAGS_LEFT) { while (l++ < width) { out(' ', buffer, idx++, maxlen); } } format++; break; } case 'p' : { width = sizeof(void *) * 2U; flags |= FLAGS_ZEROPAD | FLAGS_UPPERCASE; #if PICO_PRINTF_SUPPORT_LONG_LONG const bool is_ll = sizeof(uintptr_t) == sizeof(long long); if (is_ll) { idx = _ntoa_long_long(out, buffer, idx, maxlen, (uintptr_t) va_arg(va, void*), false, 16U, precision, width, flags); } else { #endif idx = _ntoa_long(out, buffer, idx, maxlen, (unsigned long) ((uintptr_t) va_arg(va, void*)), false, 16U, precision, width, flags); #if PICO_PRINTF_SUPPORT_LONG_LONG } #endif format++; break; } case '%' : out('%', buffer, idx++, maxlen); format++; break; default : out(*format, buffer, idx++, maxlen); format++; break; } } // termination out((char) 0, buffer, idx < maxlen ? idx : maxlen - 1U, maxlen); // return written chars without terminating \0 return (int) idx; } /////////////////////////////////////////////////////////////////////////////// int WRAPPER_FUNC(sprintf)(char *buffer, const char *format, ...) { va_list va; va_start(va, format); const int ret = _vsnprintf(_out_buffer, buffer, (size_t) -1, format, va); va_end(va); return ret; } int WRAPPER_FUNC(snprintf)(char *buffer, size_t count, const char *format, ...) { va_list va; va_start(va, format); const int ret = _vsnprintf(_out_buffer, buffer, count, format, va); va_end(va); return ret; } int WRAPPER_FUNC(vsnprintf)(char *buffer, size_t count, const char *format, va_list va) { return _vsnprintf(_out_buffer, buffer, count, format, va); } int vfctprintf(void (*out)(char character, void *arg), void *arg, const char *format, va_list va) { const out_fct_wrap_type out_fct_wrap = {out, arg}; return _vsnprintf(_out_fct, (char *) (uintptr_t) &out_fct_wrap, (size_t) -1, format, va); } #if LIB_PICO_PRINTF_PICO #if !PICO_PRINTF_ALWAYS_INCLUDED /** * Output a character to a custom device like UART, used by the printf() function * This function is declared here only. You have to write your custom implementation somewhere * \param character Character to output */ static void _putchar(char character) { putchar(character); } // internal _putchar wrapper static inline void _out_char(char character, void *buffer, size_t idx, size_t maxlen) { (void) buffer; (void) idx; (void) maxlen; if (character) { _putchar(character); } } bool weak_raw_printf(const char *fmt, ...) { va_list va; va_start(va, fmt); bool rc = weak_raw_vprintf(fmt, va); va_end(va); return rc; } bool weak_raw_vprintf(const char *fmt, va_list args) { if (lazy_vsnprintf) { char buffer[1]; lazy_vsnprintf(_out_char, buffer, (size_t) -1, fmt, args); return true; } else { puts(fmt); return false; } } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_printf/printf_none.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/asm_helper.S" #include "pico/bootrom/sf_table.h" pico_default_asm_setup wrapper_func sprintf wrapper_func snprintf wrapper_func vsnprintf regular_func printf_none_assert push {lr} // keep stack trace sane ldr r0, =str bl panic str: .asciz "printf support is disabled" ================================================ FILE: pico-sdk/src/rp2_common/pico_rand/CMakeLists.txt ================================================ pico_add_library(pico_rand) target_sources(pico_rand INTERFACE ${CMAKE_CURRENT_LIST_DIR}/rand.c ) target_include_directories(pico_rand_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_mirrored_target_link_libraries(pico_rand INTERFACE pico_unique_id hardware_clocks hardware_timer hardware_sync) ================================================ FILE: pico-sdk/src/rp2_common/pico_rand/include/pico/rand.h ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_RAND_H #define _PICO_RAND_H #include "pico.h" #ifdef __cplusplus extern "C" { #endif /** \file pico/rand.h * \defgroup pico_rand pico_rand * * Random Number Generator API * * This module generates random numbers at runtime utilizing a number of possible entropy * sources and uses those sources to modify the state of a 128-bit 'Pseudo * Random Number Generator' implemented in software. * * The random numbers (32 to 128 bit) to be supplied are read from the PRNG which is used * to help provide a large number space. * * The following (multiple) sources of entropy are available (of varying quality), each enabled by a #define: * * - The Ring Oscillator (ROSC) (\ref PICO_RAND_ENTROPY_SRC_ROSC == 1): * \ref PICO_RAND_ROSC_BIT_SAMPLE_COUNT bits are gathered from the ring oscillator "random bit" and mixed in each * time. This should not be used if the ROSC is off, or the processor is running from * the ROSC. * \note the maximum throughput of ROSC bit sampling is controlled by PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US which defaults * to 10us, i.e. 100,000 bits per second. * - Time (\ref PICO_RAND_ENTROPY_SRC_TIME == 1): The 64-bit microsecond timer is mixed in each time. * - Bus Performance Counter (\ref PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER == 1): One of the bus fabric's performance * counters is mixed in each time. * * \note All entropy sources are hashed before application to the PRNG state machine. * * The \em first time a random number is requested, the 128-bit PRNG state * must be seeded. Multiple entropy sources are also available for the seeding operation: * * - The Ring Oscillator (ROSC) (\ref PICO_RAND_SEED_ENTROPY_SRC_ROSC == 1): * 64 bits are gathered from the ring oscillator "random bit" and mixed into the seed. * - Time (\ref PICO_RAND_SEED_ENTROPY_SRC_TIME == 1): The 64-bit microsecond timer is mixed into the seed. * - Board Identifier (PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID == 1): The board id via \ref pico_get_unique_board_id * is mixed into the seed. * - RAM hash (\ref PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH (\ref PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH): The hashed contents of a * subset of RAM are mixed in. Initial RAM contents are undefined on power up, so provide a reasonable source of entropy. * By default the last 1K of RAM (which usually contains the core 0 stack) is hashed, which may also provide for differences * after each warm reset. * * With default settings, the seed generation takes approximately 1 millisecond while * subsequent random numbers generally take between 10 and 20 microseconds to generate. * * pico_rand methods may be safely called from either core or from an IRQ, but be careful in the latter case as * the calls may block for a number of microseconds waiting on more entropy. */ // --------------- // ENTROPY SOURCES // --------------- // PICO_CONFIG: PICO_RAND_ENTROPY_SRC_ROSC, Enable/disable use of ROSC as an entropy source, type=bool, default=1, group=pico_rand #ifndef PICO_RAND_ENTROPY_SRC_ROSC #define PICO_RAND_ENTROPY_SRC_ROSC 1 #endif // PICO_CONFIG: PICO_RAND_ENTROPY_SRC_TIME, Enable/disable use of hardware timestamp as an entropy source, type=bool, default=1, group=pico_rand #ifndef PICO_RAND_ENTROPY_SRC_TIME #define PICO_RAND_ENTROPY_SRC_TIME 1 #endif // PICO_CONFIG: PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER, Enable/disable use of a bus performance counter as an entropy source, type=bool, default=1, group=pico_rand #ifndef PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER #define PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER 1 #endif // -------------------- // SEED ENTROPY SOURCES // -------------------- // PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_ROSC, Enable/disable use of ROSC as an entropy source for the random seed, type=bool, default=1, group=pico_rand #ifndef PICO_RAND_SEED_ENTROPY_SRC_ROSC #define PICO_RAND_SEED_ENTROPY_SRC_ROSC PICO_RAND_ENTROPY_SRC_ROSC #endif // PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_TIME, Enable/disable use of hardware timestamp as an entropy source for the random seed, type=bool, default=1, group=pico_rand #ifndef PICO_RAND_SEED_ENTROPY_SRC_TIME #define PICO_RAND_SEED_ENTROPY_SRC_TIME PICO_RAND_ENTROPY_SRC_TIME #endif // PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID, Enable/disable use of board id as part of the random seed, type=bool, default=1, group=pico_rand #ifndef PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID #define PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID 1 #endif // PICO_CONFIG: PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH, Enable/disable use of a RAM hash as an entropy source for the random seed, type=bool, default=1, group=pico_rand #ifndef PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH #define PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH 1 #endif // --------------------------------- // PICO_RAND_ENTROPY_SRC_ROSC CONFIG // --------------------------------- // PICO_CONFIG: PICO_RAND_ROSC_BIT_SAMPLE_COUNT, Number of samples to take of the ROSC random bit per random number generation , min=1, max=64, default=1, group=pico_rand #ifndef PICO_RAND_ROSC_BIT_SAMPLE_COUNT #define PICO_RAND_ROSC_BIT_SAMPLE_COUNT 1 #endif // PICO_CONFIG: PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US, Define a default minimum time between sampling the ROSC random bit, min=5, max=20, default=10, group=pico_rand #ifndef PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US // (Arbitrary / tested) minimum time between sampling the ROSC random bit #define PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US 10u #endif // --------------------------------------------- // PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER CONFIG // --------------------------------------------- // PICO_CONFIG: PICO_RAND_BUS_PERF_COUNTER_INDEX, Bus performance counter index to use for sourcing entropy, min=0, max=3, group=pico_rand // this is deliberately undefined by default, meaning the code will pick that appears unused //#define PICO_RAND_BUS_PERF_COUNTER_INDEX 0 // PICO_CONFIG: PICO_RAND_BUS_PERF_COUNTER_EVENT, Bus performance counter event to use for sourcing entropy, default=arbiter_sram5_perf_event_access, group=pico_rand #ifndef PICO_RAND_BUS_PERF_COUNTER_EVENT #define PICO_RAND_BUS_PERF_COUNTER_EVENT arbiter_sram5_perf_event_access #endif // ------------------------------------------ // PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH CONFIG // ------------------------------------------ // PICO_CONFIG: PICO_RAND_RAM_HASH_END, end of address in RAM (non-inclusive) to hash during pico_rand seed initialization, default=SRAM_END, group=pico_rand #ifndef PICO_RAND_RAM_HASH_END #define PICO_RAND_RAM_HASH_END SRAM_END #endif // PICO_CONFIG: PICO_RAND_RAM_HASH_START, start of address in RAM (inclusive) to hash during pico_rand seed initialization, default=PICO_RAND_RAM_HASH_END - 1024, group=pico_rand #ifndef PICO_RAND_RAM_HASH_START #define PICO_RAND_RAM_HASH_START (PICO_RAND_RAM_HASH_END - 1024u) #endif // We provide a maximum of 128 bits entropy in one go typedef struct rng_128 { uint64_t r[2]; } rng_128_t; /*! \brief Get 128-bit random number * \ingroup pico_rand * * This method may be safely called from either core or from an IRQ, but be careful in the latter case as * the call may block for a number of microseconds waiting on more entropy. * * \param rand128 Pointer to storage to accept a 128-bit random number */ void get_rand_128(rng_128_t *rand128); /*! \brief Get 64-bit random number * \ingroup pico_rand * * This method may be safely called from either core or from an IRQ, but be careful in the latter case as * the call may block for a number of microseconds waiting on more entropy. * * \return 64-bit random number */ uint64_t get_rand_64(void); /*! \brief Get 32-bit random number * \ingroup pico_rand * * This method may be safely called from either core or from an IRQ, but be careful in the latter case as * the call may block for a number of microseconds waiting on more entropy. * * \return 32-bit random number */ uint32_t get_rand_32(void); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_rand/rand.c ================================================ /* * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ /* xoroshiro128ss(), rotl(): Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) To the extent possible under law, the author has dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty. See splitmix64() implementation: Written in 2015 by Sebastiano Vigna (vigna@acm.org) To the extent possible under law, the author has dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty. See */ #include "pico/rand.h" #include "pico/unique_id.h" #include "pico/time.h" #include "hardware/clocks.h" #include "hardware/structs/rosc.h" #include "hardware/structs/bus_ctrl.h" #include "hardware/sync.h" static bool rng_initialised = false; // Note: By design, do not initialise any of the variables that hold entropy, // they may have useful junk in them, either from power-up or a previous boot. static rng_128_t __uninitialized_ram(rng_state); #if PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH static uint64_t __uninitialized_ram(ram_hash); #endif #if PICO_RAND_ENTROPY_SRC_ROSC | PICO_RAND_SEED_ENTROPY_SRC_ROSC static uint64_t __uninitialized_ram(rosc_samples); #endif #if PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER static uint8_t bus_counter_idx; #endif /* From the original source: This is a fixed-increment version of Java 8's SplittableRandom generator See http://dx.doi.org/10.1145/2714064.2660195 and http://docs.oracle.com/javase/8/docs/api/java/util/SplittableRandom.html It is a very fast generator passing BigCrush, and it can be useful if for some reason you absolutely want 64 bits of state; otherwise, we rather suggest to use a xoroshiro128+ (for moderately parallel computations) or xorshift1024* (for massively parallel computations) generator. Note: This can be called with any value (i.e. including 0) */ static __noinline uint64_t splitmix64(uint64_t x) { uint64_t z = x + 0x9E3779B97F4A7C15ull; z = (z ^ (z >> 30)) * 0xBF58476D1CE4E5B9ull; z = (z ^ (z >> 27)) * 0x94D049BB133111EBull; return z ^ (z >> 31); } /* From the original source: This is xoroshiro128** 1.0, one of our all-purpose, rock-solid, small-state generators. It is extremely (sub-ns) fast and it passes all tests we are aware of, but its state space is large enough only for mild parallelism. For generating just floating-point numbers, xoroshiro128+ is even faster (but it has a very mild bias, see notes in the comments). The state must be seeded so that it is not everywhere zero. If you have a 64-bit seed, we suggest to seed a splitmix64 generator and use its output to fill s. */ static inline uint64_t rotl(const uint64_t x, int k) { return (x << k) | (x >> (64 - k)); } static __noinline uint64_t xoroshiro128ss(rng_128_t *local_rng_state) { const uint64_t s0 = local_rng_state->r[0]; uint64_t s1 = local_rng_state->r[1]; // Because the state is *modified* outside of this function, there is a // 1 in 2^128 chance that it could be all zeroes (which is not allowed). while (s0 == 0 && s1 == 0) { s1 = time_us_64(); // should not be 0, but loop anyway } const uint64_t result = rotl(s0 * 5, 7) * 9; s1 ^= s0; local_rng_state->r[0] = rotl(s0, 24) ^ s1 ^ (s1 << 16); // a, b local_rng_state->r[1] = rotl(s1, 37); // c return result; } #if PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH static uint64_t sdbm_hash64_sram(uint64_t hash) { // save some time by hashing a word at a time for (uint i = (PICO_RAND_RAM_HASH_START + 3) & ~3; i < PICO_RAND_RAM_HASH_END; i+=4) { uint32_t c = *(uint32_t *) i; hash = (uint64_t) c + (hash << 6) + (hash << 16) - hash; } return hash; } #endif #if PICO_RAND_SEED_ENTROPY_SRC_ROSC | PICO_RAND_ENTROPY_SRC_ROSC /* gather an additional n bits of entropy, and shift them into the 64 bit entropy counter */ static uint64_t capture_additional_rosc_samples(uint n) { static absolute_time_t next_sample_time; // provide an override if someone really wants it, but disabling ROSC as an entropy source makes more sense #if !PICO_RAND_DISABLE_ROSC_CHECK // check that the ROSC is running but that the processors are NOT running from it hard_assert((rosc_hw->status & ROSC_STATUS_ENABLED_BITS) && ((clocks_hw->clk[clk_sys].ctrl & CLOCKS_CLK_SYS_CTRL_AUXSRC_BITS) != (CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_ROSC_CLKSRC << CLOCKS_CLK_SYS_CTRL_AUXSRC_LSB))); #endif bool in_exception = __get_current_exception(); assert(n); // save us having to special case samples for this uint64_t samples = 0; for(uint i=0; irandombit & 1u; // use of relative time to now, rather than offset from before makes things // a bit less predictable at the cost of some speed. next_sample_time = make_timeout_time_us(PICO_RAND_MIN_ROSC_BIT_SAMPLE_TIME_US); bit_done = true; if (i == n - 1) { // samples has our random bits, so let's mix them in now samples = rosc_samples = (rosc_samples << n) | samples; } } spin_unlock(lock, save); } while (!bit_done); } return samples; } #endif static void initialise_rand(void) { rng_128_t local_rng_state = local_rng_state; uint which = 0; #if PICO_RAND_SEED_ENTROPY_SRC_RAM_HASH ram_hash = sdbm_hash64_sram(ram_hash); local_rng_state.r[which] ^= splitmix64(ram_hash); which ^= 1; #endif #if PICO_RAND_SEED_ENTROPY_SRC_BOARD_ID static_assert(PICO_UNIQUE_BOARD_ID_SIZE_BYTES == sizeof(uint64_t), "Code below requires that 'board_id' is 64-bits in size"); // Note! The safety of the length assumption here is protected by a 'static_assert' above union unique_id_u { pico_unique_board_id_t board_id_native; uint64_t board_id_u64; } unique_id; // Note! The safety of the length assumption here is protected by a 'static_assert' above pico_get_unique_board_id(&unique_id.board_id_native); local_rng_state.r[which] ^= splitmix64(unique_id.board_id_u64); which ^= 1; #endif #if PICO_RAND_SEED_ENTROPY_SRC_ROSC // this is really quite slow (10ms per iteration), and I'm not sure that it adds value over the 64 random bits // uint ref_khz = clock_get_hz(clk_ref) / 100; // for (int i = 0; i < 5; i++) { // // Apply hash of the rosc frequency, limited but still 'extra' entropy // uint measurement = frequency_count_raw(CLOCKS_FC0_SRC_VALUE_ROSC_CLKSRC, ref_khz); // local_rng_state.r[which] ^= splitmix64(measurement); // (void) xoroshiro128ss(&local_rng_state); //churn to mix seed sources // } // Gather a full ROSC sample array with sample bits local_rng_state.r[which] ^= splitmix64(capture_additional_rosc_samples(8 * sizeof(rosc_samples))); which ^= 1; #endif #if PICO_RAND_SEED_ENTROPY_SRC_TIME // Mix in hashed time. This is [possibly] predictable boot-to-boot // but will vary application-to-application. local_rng_state.r[which] ^= splitmix64(time_us_64()); which ^= 1; #endif spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_RAND); uint32_t save = spin_lock_blocking(lock); if (!rng_initialised) { #if PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER #if !PICO_RAND_BUSCTRL_COUNTER_INDEX int idx = -1; for(uint i = 0; i < count_of(bus_ctrl_hw->counter); i++) { if (bus_ctrl_hw->counter[i].sel == BUSCTRL_PERFSEL0_RESET) { idx = (int)i; break; } } hard_assert(idx != -1); bus_counter_idx = (uint8_t)idx; #else bus_counter_idx = (uint8_t)PICO_RAND_BUSCTRL_COUNTER_INDEX; #endif bus_ctrl_hw->counter[bus_counter_idx].sel = PICO_RAND_BUS_PERF_COUNTER_EVENT; #endif (void) xoroshiro128ss(&local_rng_state); rng_state = local_rng_state; rng_initialised = true; } spin_unlock(lock, save); } uint64_t get_rand_64(void) { if (!rng_initialised) { // Do not provide 'RNs' until the system has been initialised. Note: // The first initialisation can be quite time-consuming depending on // the amount of RAM hashed, see RAM_HASH_START and RAM_HASH_END initialise_rand(); } static volatile uint8_t check_byte; rng_128_t local_rng_state = rng_state; uint8_t local_check_byte = check_byte; // Modify PRNG state with the run-time entropy sources, // hashed to reduce correlation with previous modifications. uint which = 0; #if PICO_RAND_ENTROPY_SRC_TIME local_rng_state.r[which] ^= splitmix64(time_us_64()); which ^= 1; #endif #if PICO_RAND_ENTROPY_SRC_ROSC local_rng_state.r[which] ^= splitmix64(capture_additional_rosc_samples(PICO_RAND_ROSC_BIT_SAMPLE_COUNT)); which ^= 1; #endif #if PICO_RAND_ENTROPY_SRC_BUS_PERF_COUNTER uint32_t bus_counter_value = bus_ctrl_hw->counter[bus_counter_idx].value; // counter is saturating, so clear it if it has reached saturation if (bus_counter_value == BUSCTRL_PERFCTR0_BITS) { bus_ctrl_hw->counter[bus_counter_idx].value = 0; } local_rng_state.r[which] ^= splitmix64(bus_counter_value); which ^= 1; #endif spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_RAND); uint32_t save = spin_lock_blocking(lock); if (local_check_byte != check_byte) { // someone got a random number in the interim, so mix it in local_rng_state.r[0] ^= rng_state.r[0]; local_rng_state.r[1] ^= rng_state.r[1]; } // Generate a 64-bit RN from the modified PRNG state. // Note: This also "churns" the 128-bit state for next time. uint64_t rand64 = xoroshiro128ss(&local_rng_state); rng_state = local_rng_state; check_byte++; spin_unlock(lock, save); return rand64; } void get_rand_128(rng_128_t *ptr128) { ptr128->r[0] = get_rand_64(); ptr128->r[1] = get_rand_64(); } uint32_t get_rand_32(void) { return (uint32_t) get_rand_64(); } ================================================ FILE: pico-sdk/src/rp2_common/pico_runtime/CMakeLists.txt ================================================ pico_add_library(pico_runtime) target_sources(pico_runtime INTERFACE ${CMAKE_CURRENT_LIST_DIR}/runtime.c ) target_include_directories(pico_runtime_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_mirrored_target_link_libraries(pico_runtime INTERFACE hardware_uart hardware_clocks hardware_irq pico_printf pico_sync ) if (TARGET pico_bit_ops) pico_mirrored_target_link_libraries(pico_runtime INTERFACE pico_bit_ops) endif() if (TARGET pico_divider) pico_mirrored_target_link_libraries(pico_runtime INTERFACE pico_divider) endif() if (TARGET pico_double) pico_mirrored_target_link_libraries(pico_runtime INTERFACE pico_double) endif() if (TARGET pico_int64_ops) pico_mirrored_target_link_libraries(pico_runtime INTERFACE pico_int64_ops) endif() if (TARGET pico_float) pico_mirrored_target_link_libraries(pico_runtime INTERFACE pico_float) endif() if (TARGET pico_malloc) pico_mirrored_target_link_libraries(pico_runtime INTERFACE pico_malloc) endif() if (TARGET pico_mem_ops) pico_mirrored_target_link_libraries(pico_runtime INTERFACE pico_mem_ops) endif() if (TARGET pico_standard_link) pico_mirrored_target_link_libraries(pico_runtime INTERFACE pico_standard_link) endif() # todo is this correct/needed? if (PICO_C_COMPILER_IS_GNU) target_link_options(pico_runtime INTERFACE "--specs=nosys.specs") elseif (PICO_C_COMPILER_IS_CLANG) # target_link_options(pico_runtime INTERFACE "-nostdlib") endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_runtime/include/pico/runtime.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_RUNTIME_H #define _PICO_RUNTIME_H #ifdef __cplusplus extern "C" { #endif /** \file runtime.h * \defgroup pico_runtime pico_runtime * Aggregate runtime support including @ref pico_bit_ops, @ref pico_divider, @ref pico_double, @ref pico_int64_ops, @ref pico_float, @ref pico_malloc, @ref pico_mem_ops and @ref pico_standard_link */ void runtime_install_stack_guard(void *stack_bottom); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_runtime/runtime.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include #include "pico.h" #include "hardware/regs/m0plus.h" #include "hardware/regs/resets.h" #include "hardware/structs/mpu.h" #include "hardware/structs/scb.h" #include "hardware/structs/padsbank0.h" #include "hardware/clocks.h" #include "hardware/irq.h" #include "hardware/resets.h" #include "pico/mutex.h" #include "pico/time.h" #if LIB_PICO_PRINTF_PICO #include "pico/printf.h" #else #define weak_raw_printf printf #define weak_raw_vprintf vprintf #endif #if PICO_ENTER_USB_BOOT_ON_EXIT #include "pico/bootrom.h" #endif extern char __StackLimit; /* Set by linker. */ uint32_t __attribute__((section(".ram_vector_table"))) ram_vector_table[48]; // this is called for each thread since they have their own MPU void runtime_install_stack_guard(void *stack_bottom) { // this is called b4 runtime_init is complete, so beware printf or assert // make sure no one is using the MPU yet if (mpu_hw->ctrl) { // Note that it would be tempting to change this to a panic, but it happens so early, printing is not a good idea __breakpoint(); } uintptr_t addr = (uintptr_t) stack_bottom; // the minimum we can protect is 32 bytes on a 32 byte boundary, so round up which will // just shorten the valid stack range a tad addr = (addr + 31u) & ~31u; // mask is 1 bit per 32 bytes of the 256 byte range... clear the bit for the segment we want uint32_t subregion_select = 0xffu ^ (1u << ((addr >> 5u) & 7u)); mpu_hw->ctrl = 5; // enable mpu with background default map mpu_hw->rbar = (addr & (uint)~0xff) | M0PLUS_MPU_RBAR_VALID_BITS | 0; mpu_hw->rasr = 1 // enable region | (0x7 << 1) // size 2^(7 + 1) = 256 | (subregion_select << 8) | 0x10000000; // XN = disable instruction fetch; no other bits means no permissions } void runtime_init(void) { // Reset all peripherals to put system into a known state, // - except for QSPI pads and the XIP IO bank, as this is fatal if running from flash // - and the PLLs, as this is fatal if clock muxing has not been reset on this boot // - and USB, syscfg, as this disturbs USB-to-SWD on core 1 reset_block(~( RESETS_RESET_IO_QSPI_BITS | RESETS_RESET_PADS_QSPI_BITS | RESETS_RESET_PLL_USB_BITS | RESETS_RESET_USBCTRL_BITS | RESETS_RESET_SYSCFG_BITS | RESETS_RESET_PLL_SYS_BITS )); // Remove reset from peripherals which are clocked only by clk_sys and // clk_ref. Other peripherals stay in reset until we've configured clocks. unreset_block_wait(RESETS_RESET_BITS & ~( RESETS_RESET_ADC_BITS | RESETS_RESET_RTC_BITS | RESETS_RESET_SPI0_BITS | RESETS_RESET_SPI1_BITS | RESETS_RESET_UART0_BITS | RESETS_RESET_UART1_BITS | RESETS_RESET_USBCTRL_BITS )); // pre-init runs really early since we need it even for memcpy and divide! // (basically anything in aeabi that uses bootrom) // Start and end points of the constructor list, // defined by the linker script. extern void (*__preinit_array_start)(void); extern void (*__preinit_array_end)(void); // Call each function in the list. // We have to take the address of the symbols, as __preinit_array_start *is* // the first function pointer, not the address of it. for (void (**p)(void) = &__preinit_array_start; p < &__preinit_array_end; ++p) { (*p)(); } // After calling preinit we have enough runtime to do the exciting maths // in clocks_init clocks_init(); // Peripheral clocks should now all be running unreset_block_wait(RESETS_RESET_BITS); #if !PICO_IE_26_29_UNCHANGED_ON_RESET // after resetting BANK0 we should disable IE on 26-29 padsbank0_hw_t *padsbank0_hw_clear = (padsbank0_hw_t *)hw_clear_alias_untyped(padsbank0_hw); padsbank0_hw_clear->io[26] = padsbank0_hw_clear->io[27] = padsbank0_hw_clear->io[28] = padsbank0_hw_clear->io[29] = PADS_BANK0_GPIO0_IE_BITS; #endif // this is an array of either mutex_t or recursive_mutex_t (i.e. not necessarily the same size) // however each starts with a lock_core_t, and the spin_lock is initialized to address 1 for a recursive // spinlock and 0 for a regular one. static_assert(!(sizeof(mutex_t)&3), ""); static_assert(!(sizeof(recursive_mutex_t)&3), ""); static_assert(!offsetof(mutex_t, core), ""); static_assert(!offsetof(recursive_mutex_t, core), ""); extern lock_core_t __mutex_array_start; extern lock_core_t __mutex_array_end; for (lock_core_t *l = &__mutex_array_start; l < &__mutex_array_end; ) { if (l->spin_lock) { assert(1 == (uintptr_t)l->spin_lock); // indicator for a recursive mutex recursive_mutex_t *rm = (recursive_mutex_t *)l; recursive_mutex_init(rm); l = &rm[1].core; // next } else { mutex_t *m = (mutex_t *)l; mutex_init(m); l = &m[1].core; // next } } #if !(PICO_NO_RAM_VECTOR_TABLE || PICO_NO_FLASH) __builtin_memcpy(ram_vector_table, (uint32_t *) scb_hw->vtor, sizeof(ram_vector_table)); scb_hw->vtor = (uintptr_t) ram_vector_table; #endif #ifndef NDEBUG if (__get_current_exception()) { // crap; started in exception handler __breakpoint(); } #endif #if PICO_USE_STACK_GUARDS // install core0 stack guard extern char __StackBottom; runtime_install_stack_guard(&__StackBottom); #endif spin_locks_reset(); irq_init_priorities(); alarm_pool_init_default(); // Start and end points of the constructor list, // defined by the linker script. extern void (*__init_array_start)(void); extern void (*__init_array_end)(void); // Call each function in the list. // We have to take the address of the symbols, as __init_array_start *is* // the first function pointer, not the address of it. for (void (**p)(void) = &__init_array_start; p < &__init_array_end; ++p) { (*p)(); } } void __attribute__((noreturn)) __attribute__((weak)) _exit(__unused int status) { #if PICO_ENTER_USB_BOOT_ON_EXIT reset_usb_boot(0,0); #else while (1) { __breakpoint(); } #endif } __attribute__((weak)) void *_sbrk(int incr) { extern char end; /* Set by linker. */ static char *heap_end; char *prev_heap_end; if (heap_end == 0) heap_end = &end; prev_heap_end = heap_end; char *next_heap_end = heap_end + incr; if (__builtin_expect(next_heap_end > (&__StackLimit), false)) { #if PICO_USE_OPTIMISTIC_SBRK if (heap_end == &__StackLimit) { // errno = ENOMEM; return (char *) -1; } next_heap_end = &__StackLimit; #else return (char *) -1; #endif } heap_end = next_heap_end; return (void *) prev_heap_end; } static int64_t epoch_time_us_since_boot; __attribute__((weak)) int _gettimeofday (struct timeval *__restrict tv, __unused void *__restrict tz) { if (tv) { int64_t us_since_epoch = ((int64_t)to_us_since_boot(get_absolute_time())) - epoch_time_us_since_boot; tv->tv_sec = (time_t)(us_since_epoch / 1000000); tv->tv_usec = (suseconds_t)(us_since_epoch % 1000000); } return 0; } __attribute((weak)) int settimeofday(__unused const struct timeval *tv, __unused const struct timezone *tz) { if (tv) { int64_t us_since_epoch = tv->tv_sec * 1000000 + tv->tv_usec; epoch_time_us_since_boot = (int64_t)to_us_since_boot(get_absolute_time()) - us_since_epoch; } return 0; } __attribute((weak)) int _times(struct tms *tms) { #if CLOCKS_PER_SEC >= 1000000 tms->tms_utime = (clock_t)(to_us_since_boot(get_absolute_time()) * (CLOCKS_PER_SEC / 1000000)); #else tms->tms_utime = (clock_t)(to_us_since_boot(get_absolute_time()) / (1000000 / CLOCKS_PER_SEC)); #endif tms->tms_stime = 0; tms->tms_cutime = 0; tms->tms_cstime = 0; return 0; } __attribute((weak)) pid_t _getpid(void) { return 0; } __attribute((weak)) int _kill(__unused pid_t pid, __unused int sig) { return -1; } // exit is not useful... no desire to pull in __call_exitprocs void exit(int status) { _exit(status); } // incorrect warning from GCC 6 GCC_Pragma("GCC diagnostic push") GCC_Pragma("GCC diagnostic ignored \"-Wsuggest-attribute=format\"") void __assert_func(const char *file, int line, const char *func, const char *failedexpr) { weak_raw_printf("assertion \"%s\" failed: file \"%s\", line %d%s%s\n", failedexpr, file, line, func ? ", function: " : "", func ? func : ""); _exit(1); } GCC_Pragma("GCC diagnostic pop") void __attribute__((noreturn)) panic_unsupported(void) { panic("not supported"); } // PICO_CONFIG: PICO_PANIC_FUNCTION, Name of a function to use in place of the stock panic function or empty string to simply breakpoint on panic, group=pico_runtime // note the default is not "panic" it is undefined #ifdef PICO_PANIC_FUNCTION #define PICO_PANIC_FUNCTION_EMPTY (__CONCAT(PICO_PANIC_FUNCTION, 1) == 1) #if !PICO_PANIC_FUNCTION_EMPTY extern void __attribute__((noreturn)) __printflike(1, 0) PICO_PANIC_FUNCTION(__unused const char *fmt, ...); #endif // Use a forwarding method here as it is a little simpler than renaming the symbol as it is used from assembler void __attribute__((naked, noreturn)) __printflike(1, 0) panic(__unused const char *fmt, ...) { // if you get an undefined reference here, you didn't define your PICO_PANIC_FUNCTION! pico_default_asm ( "push {lr}\n" #if !PICO_PANIC_FUNCTION_EMPTY "bl " __XSTRING(PICO_PANIC_FUNCTION) "\n" #endif "bkpt #0\n" "1: b 1b\n" // loop for ever as we are no return : : : ); } #else // todo consider making this try harder to output if we panic early // right now, print mutex may be uninitialised (in which case it deadlocks - although after printing "PANIC") // more importantly there may be no stdout/UART initialized yet // todo we may want to think about where we print panic messages to; writing to USB appears to work // though it doesn't seem like we can expect it to... fine for now void __attribute__((noreturn)) __printflike(1, 0) panic(const char *fmt, ...) { puts("\n*** PANIC ***\n"); if (fmt) { #if LIB_PICO_PRINTF_NONE puts(fmt); #else va_list args; va_start(args, fmt); #if PICO_PRINTF_ALWAYS_INCLUDED vprintf(fmt, args); #else weak_raw_vprintf(fmt, args); #endif va_end(args); puts("\n"); #endif } _exit(1); } #endif void hard_assertion_failure(void) { panic("Hard assert"); } ================================================ FILE: pico-sdk/src/rp2_common/pico_standard_link/CMakeLists.txt ================================================ if (NOT TARGET pico_standard_link) pico_add_library(pico_standard_link) target_sources(pico_standard_link INTERFACE ${CMAKE_CURRENT_LIST_DIR}/crt0.S ${CMAKE_CURRENT_LIST_DIR}/new_delete.cpp ${CMAKE_CURRENT_LIST_DIR}/binary_info.c ) pico_add_map_output(pico_standard_link) # todo revisit when we do Clang if (PICO_C_COMPILER_IS_CLANG) # target_link_options(pico_standard_link INTERFACE "LINKER:-fuse-ld=lld") endif () pico_mirrored_target_link_libraries(pico_standard_link INTERFACE hardware_regs pico_bootrom pico_binary_info) target_link_libraries(pico_standard_link INTERFACE pico_cxx_options boot_stage2_headers) function(pico_add_link_depend TARGET dependency) get_target_property(target_type ${TARGET} TYPE) if (${target_type} STREQUAL "INTERFACE_LIBRARY") set(PROP "INTERFACE_LINK_DEPENDS") else() set(PROP "LINK_DEPENDS") endif() get_target_property(_LINK_DEPENDS ${TARGET} ${PROP}) if (NOT _LINK_DEPENDS) set(_LINK_DEPENDS ${dependency}) else() list(APPEND _LINK_DEPENDS ${dependency}) endif() set_target_properties(${TARGET} PROPERTIES ${PROP} "${_LINK_DEPENDS}") endfunction() # need this because cmake does not appear to have a way to override an INTERFACE variable function(pico_set_linker_script TARGET LDSCRIPT) set_target_properties(${TARGET} PROPERTIES PICO_TARGET_LINKER_SCRIPT ${LDSCRIPT}) pico_add_link_depend(${TARGET} ${LDSCRIPT}) endfunction() function(pico_set_binary_type TARGET TYPE) set_target_properties(${TARGET} PROPERTIES PICO_TARGET_BINARY_TYPE ${TYPE}) endfunction() if (PICO_NO_FLASH) set(PICO_DEFAULT_BINARY_TYPE no_flash) elseif (PICO_USE_BLOCKED_RAM) set(PICO_DEFAULT_BINARY_TYPE blocked_ram) elseif (PICO_COPY_TO_RAM) set(PICO_DEFAULT_BINARY_TYPE copy_to_ram) else() set(PICO_DEFAULT_BINARY_TYPE default) endif() # LINKER script will be PICO_TARGET_LINKER_SCRIPT if set on target, or ${CMAKE_CURRENT_LIST_DIR}/memmap_foo.ld # if PICO_TARGET_BINARY_TYPE is set to foo on the target, otherwise ${CMAKE_CURRENT_LIST_DIR}/memmap_${PICO_DEFAULT_BINARY_TYPE).ld target_link_options(pico_standard_link INTERFACE "LINKER:--script=$>,$,${CMAKE_CURRENT_LIST_DIR}/memmap_$,>,${PICO_DEFAULT_BINARY_TYPE},$>.ld>" ) # PICO_NO_FLASH will be set based on PICO_TARGET_BUILD_TYPE target property being equal to no_flash if set, otherwise to the value of the PICO_NO_FLASH cmake variable unless PICO_TARGET_TYPE is set to something else # PICO_BUILD_DEFINE: PICO_NO_FLASH, whether this is a 'no_flash' build, type=bool, default=0, but dependent on CMake options, group=pico_standard_link target_compile_definitions(pico_standard_link INTERFACE PICO_NO_FLASH=$,no_flash>,1,$,$>>>) # PICO_USE_BLOCKED_RAM will be set based on PICO_TARGET_BUILD_TYPE target property being equal to use_blocked_ram if set, otherwise to the value of the PICO_USE_BLOCKED_RAM cmake variable unless PICO_TARGET_TYPE is set to something else # PICO_BUILD_DEFINE: PICO_USE_BLOCKED_RAM, whether this is a 'blocked_ram' build, type=bool, default=0, but dependent on CMake options, group=pico_standard_link target_compile_definitions(pico_standard_link INTERFACE PICO_USE_BLOCKED_RAM=$,use_blocked_ram>,1,$,$>>>) # PICO_COPY_TO_RAM will be set based on PICO_TARGET_BUILD_TYPE target property being equal to copy_to_ram if set, otherwise to the value of the PICO_COPY_TO_RAM cmake variable unless PICO_TARGET_TYPE is set to something else # PICO_BUILD_DEFINE: PICO_COPY_TO_RAM, whether this is a 'copy_to_ram' build, type=bool, default=0, but dependent on CMake options, group=pico_standard_link target_compile_definitions(pico_standard_link INTERFACE PICO_COPY_TO_RAM=$,copy_to_ram>,1,$,$>>>) target_compile_definitions(pico_standard_link INTERFACE PICO_CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}") if (PICO_DEOPTIMIZED_DEBUG AND "${CMAKE_BUILD_TYPE}" STREQUAL "Debug") target_compile_definitions(pico_standard_link INTERFACE PICO_DEOPTIMIZED_DEBUG=1) endif() # this (arguably wrong) code is restored for 1.5.1 as setting -nostartfiles on many C++ binaries causes link errors. see issue #1368 # -nostartfiles will be added if PICO_NO_FLASH would be defined to 1 target_link_options(pico_standard_link INTERFACE $<$,no_flash>,1,$,$>>>:-nostartfiles>) # boot_stage2 will be linked if PICO_NO_FLASH would be defined to 0 target_link_libraries(pico_standard_link INTERFACE $<$,no_flash>,1,$,$>>>>:$>,$,bs2_default>_library>) # PICO_CMAKE_CONFIG: PICO_USE_DEFAULT_MAX_PAGE_SIZE, Don't shrink linker max page to 4096, type=bool, default=0, advanced=true, group=pico_standard_link if (NOT PICO_USE_DEFAULT_MAX_PAGE_SIZE) target_link_options(pico_standard_link INTERFACE "LINKER:-z,max-page-size=4096") endif() # done in compiler now #target_link_options(pico_standard_link INTERFACE "LINKER:--build-id=none") # this line occasionally useful for debugging ... todo maybe make a PICO_ var # target_compile_options(pico_standard_link INTERFACE --save-temps) #debugging only # PICO_CMAKE_CONFIG: PICO_NO_GC_SECTIONS, Disable -ffunction-sections -fdata-sections and --gc-sections, type=bool, default=0, advanced=true, group=pico_standard_link if (NOT PICO_NO_GC_SECTIONS) target_compile_options(pico_standard_link INTERFACE -ffunction-sections -fdata-sections) target_link_options(pico_standard_link INTERFACE "LINKER:--gc-sections") endif() if (PICO_C_COMPILER_IS_GNU) # Ignore warnings about rwx segments introduced in binutils 2.39 execute_process(COMMAND ${CMAKE_C_COMPILER} -print-prog-name=ld RESULT_VARIABLE RUN_C_RESULT OUTPUT_VARIABLE FULL_LD_PATH OUTPUT_STRIP_TRAILING_WHITESPACE) if (${RUN_C_RESULT} EQUAL 0) execute_process(COMMAND ${FULL_LD_PATH} --help RESULT_VARIABLE RUN_LD_RESULT OUTPUT_VARIABLE LD_HELP_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE) if (${RUN_LD_RESULT} EQUAL 0) set(RWX_WARNING "no-warn-rwx-segments") string(FIND "${LD_HELP_OUTPUT}" "${RWX_WARNING}" LD_RWX_WARNING_SUPPORTED) if (${LD_RWX_WARNING_SUPPORTED} GREATER -1) target_link_options(pico_standard_link INTERFACE "LINKER:--${RWX_WARNING}") endif() endif() endif() endif() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_standard_link/binary_info.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #if !PICO_NO_BINARY_INFO && !PICO_NO_PROGRAM_INFO #include "pico/binary_info.h" #if !PICO_NO_FLASH #include "boot_stage2/config.h" #endif // Note we put at most 4 pieces of binary info in the reset section because that's how much spare space we had // (picked the most common ones)... if there is a link failure because of .reset section overflow then move // more out. #define reset_section_attr __attribute__((section(".reset"))) #if !PICO_NO_FLASH #ifndef PICO_NO_BI_BINARY_SIZE extern char __flash_binary_end; bi_decl_with_attr(bi_binary_end((intptr_t)&__flash_binary_end), reset_section_attr) #endif #endif #if !PICO_NO_BI_PROGRAM_BUILD_DATE #ifndef PICO_PROGRAM_BUILD_DATE #define PICO_PROGRAM_BUILD_DATE __DATE__ #endif bi_decl_with_attr(bi_program_build_date_string(PICO_PROGRAM_BUILD_DATE), reset_section_attr); #endif #if !PICO_NO_BI_PROGRAM_NAME #if !defined(PICO_PROGRAM_NAME) && defined(PICO_TARGET_NAME) #define PICO_PROGRAM_NAME PICO_TARGET_NAME #endif #ifdef PICO_PROGRAM_NAME bi_decl_with_attr(bi_program_name(PICO_PROGRAM_NAME), reset_section_attr) #endif #endif #if !PICO_NO_BI_PICO_BOARD #ifdef PICO_BOARD bi_decl(bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PICO_BOARD, PICO_BOARD)) #endif #endif #if !PICO_NO_BI_SDK_VERSION #ifdef PICO_SDK_VERSION_STRING bi_decl_with_attr(bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_SDK_VERSION, PICO_SDK_VERSION_STRING),reset_section_attr) #endif #endif #if !PICO_NO_BI_PROGRAM_VERSION_STRING #ifdef PICO_PROGRAM_VERSION_STRING bi_decl(bi_program_version_string(PICO_PROGRAM_VERSION_STRING)) #endif #endif #if !PICO_NO_BI_PROGRAM_DESCRIPTION #ifdef PICO_PROGRAM_DESCRIPTION bi_decl(bi_program_description(PICO_PROGRAM_DESCRIPTION)) #endif #endif #if !PICO_NO_BI_PROGRAM_URL #ifdef PICO_PROGRAM_URL bi_decl(bi_program_url(PICO_PROGRAM_URL)) #endif #endif #if !PICO_NO_BI_BOOT_STAGE2_NAME #ifdef PICO_BOOT_STAGE2_NAME bi_decl(bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_BOOT2_NAME, PICO_BOOT_STAGE2_NAME)) #endif #endif #if !PICO_NO_BI_BUILD_TYPE #ifdef PICO_CMAKE_BUILD_TYPE bi_decl(bi_program_build_attribute(PICO_CMAKE_BUILD_TYPE)) #else #ifndef NDEBUG bi_decl(bi_program_build_attribute("Debug")) #else bi_decl(bi_program_build_attribute("Release")) #endif #endif #if PICO_DEOPTIMIZED_DEBUG bi_decl(bi_program_build_attribute("All optimization disabled")) #endif #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_standard_link/crt0.S ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" #include "pico/asm_helper.S" #include "hardware/regs/m0plus.h" #include "hardware/regs/addressmap.h" #include "hardware/regs/sio.h" #include "pico/binary_info/defs.h" #ifdef NDEBUG #ifndef COLLAPSE_IRQS #define COLLAPSE_IRQS #endif #endif pico_default_asm_setup .section .vectors, "ax" .align 2 .global __vectors, __VECTOR_TABLE __VECTOR_TABLE: __vectors: .word __StackTop .word _reset_handler .word isr_nmi .word isr_hardfault .word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire .word isr_svcall .word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire .word isr_pendsv .word isr_systick .word isr_irq0 .word isr_irq1 .word isr_irq2 .word isr_irq3 .word isr_irq4 .word isr_irq5 .word isr_irq6 .word isr_irq7 .word isr_irq8 .word isr_irq9 .word isr_irq10 .word isr_irq11 .word isr_irq12 .word isr_irq13 .word isr_irq14 .word isr_irq15 .word isr_irq16 .word isr_irq17 .word isr_irq18 .word isr_irq19 .word isr_irq20 .word isr_irq21 .word isr_irq22 .word isr_irq23 .word isr_irq24 .word isr_irq25 .word isr_irq26 .word isr_irq27 .word isr_irq28 .word isr_irq29 .word isr_irq30 .word isr_irq31 // all default exception handlers do nothing, and we can check for them being set to our // default values by seeing if they point to somewhere between __defaults_isrs_start and __default_isrs_end .global __default_isrs_start __default_isrs_start: // Declare a weak symbol for each ISR. // By default, they will fall through to the undefined IRQ handler below (breakpoint), // but can be overridden by C functions with correct name. .macro decl_isr_bkpt name .weak \name .type \name,%function .thumb_func \name: bkpt #0 .endm // these are separated out for clarity decl_isr_bkpt isr_invalid decl_isr_bkpt isr_nmi decl_isr_bkpt isr_hardfault decl_isr_bkpt isr_svcall decl_isr_bkpt isr_pendsv decl_isr_bkpt isr_systick .global __default_isrs_end __default_isrs_end: .macro decl_isr name .weak \name .type \name,%function .thumb_func \name: .endm decl_isr isr_irq0 decl_isr isr_irq1 decl_isr isr_irq2 decl_isr isr_irq3 decl_isr isr_irq4 decl_isr isr_irq5 decl_isr isr_irq6 decl_isr isr_irq7 decl_isr isr_irq8 decl_isr isr_irq9 decl_isr isr_irq10 decl_isr isr_irq11 decl_isr isr_irq12 decl_isr isr_irq13 decl_isr isr_irq14 decl_isr isr_irq15 decl_isr isr_irq16 decl_isr isr_irq17 decl_isr isr_irq18 decl_isr isr_irq19 decl_isr isr_irq20 decl_isr isr_irq21 decl_isr isr_irq22 decl_isr isr_irq23 decl_isr isr_irq24 decl_isr isr_irq25 decl_isr isr_irq26 decl_isr isr_irq27 decl_isr isr_irq28 decl_isr isr_irq29 decl_isr isr_irq30 decl_isr isr_irq31 // All unhandled USER IRQs fall through to here .global __unhandled_user_irq .thumb_func __unhandled_user_irq: mrs r0, ipsr subs r0, #16 .global unhandled_user_irq_num_in_r0 unhandled_user_irq_num_in_r0: bkpt #0 // ---------------------------------------------------------------------------- .section .binary_info_header, "a" // Header must be in first 256 bytes of main image (i.e. excluding flash boot2). // For flash builds we put it immediately after vector table; for NO_FLASH the // vectors are at a +0x100 offset because the bootrom enters RAM images directly // at their lowest address, so we put the header in the VTOR alignment hole. #if !PICO_NO_BINARY_INFO binary_info_header: .word BINARY_INFO_MARKER_START .word __binary_info_start .word __binary_info_end .word data_cpy_table // we may need to decode pointers that are in RAM at runtime. .word BINARY_INFO_MARKER_END #endif // ---------------------------------------------------------------------------- .section .reset, "ax" // On flash builds, the vector table comes first in the image (conventional). // On NO_FLASH builds, the reset handler section comes first, as the entry // point is at offset 0 (fixed due to bootrom), and VTOR is highly-aligned. // Image is entered in various ways: // // - NO_FLASH builds are entered from beginning by UF2 bootloader // // - Flash builds vector through the table into _reset_handler from boot2 // // - Either type can be entered via _entry_point by the debugger, and flash builds // must then be sent back round the boot sequence to properly initialise flash // ELF entry point: .type _entry_point,%function .thumb_func .global _entry_point _entry_point: #if PICO_NO_FLASH // Vector through our own table (SP, VTOR will not have been set up at // this point). Same path for debugger entry and bootloader entry. ldr r0, =__vectors #else // Debugger tried to run code after loading, so SSI is in 03h-only mode. // Go back through bootrom + boot2 to properly initialise flash. movs r0, #0 #endif ldr r1, =(PPB_BASE + M0PLUS_VTOR_OFFSET) str r0, [r1] ldmia r0!, {r1, r2} msr msp, r1 bx r2 // Reset handler: // - initialises .data // - clears .bss // - calls runtime_init // - calls main // - calls exit (which should eventually hang the processor via _exit) .type _reset_handler,%function .thumb_func _reset_handler: // Only core 0 should run the C runtime startup code; core 1 is normally // sleeping in the bootrom at this point but check to be sure ldr r0, =(SIO_BASE + SIO_CPUID_OFFSET) ldr r0, [r0] cmp r0, #0 bne hold_non_core0_in_bootrom // In a NO_FLASH binary, don't perform .data copy, since it's loaded // in-place by the SRAM load. Still need to clear .bss #if !PICO_NO_FLASH adr r4, data_cpy_table // assume there is at least one entry 1: ldmia r4!, {r1-r3} cmp r1, #0 beq 2f bl data_cpy b 1b 2: #endif // Zero out the BSS ldr r1, =__bss_start__ ldr r2, =__bss_end__ movs r0, #0 b bss_fill_test bss_fill_loop: stm r1!, {r0} bss_fill_test: cmp r1, r2 bne bss_fill_loop platform_entry: // symbol for stack traces // Use 32-bit jumps, in case these symbols are moved out of branch range // (e.g. if main is in SRAM and crt0 in flash) ldr r1, =runtime_init blx r1 ldr r1, =main blx r1 ldr r1, =exit blx r1 // exit should not return. If it does, hang the core. // (fall thru into our hang _exit impl 1: // separate label because _exit can be moved out of branch range bkpt #0 b 1b #if !PICO_NO_FLASH data_cpy_loop: ldm r1!, {r0} stm r2!, {r0} data_cpy: cmp r2, r3 blo data_cpy_loop bx lr #endif // Note the data copy table is still included for NO_FLASH builds, even though // we skip the copy, because it is listed in binary info .align 2 data_cpy_table: #if PICO_COPY_TO_RAM .word __ram_text_source__ .word __ram_text_start__ .word __ram_text_end__ #endif .word __etext .word __data_start__ .word __data_end__ .word __scratch_x_source__ .word __scratch_x_start__ .word __scratch_x_end__ .word __scratch_y_source__ .word __scratch_y_start__ .word __scratch_y_end__ .word 0 // null terminator // ---------------------------------------------------------------------------- // Provide safe defaults for _exit and runtime_init // Full implementations usually provided by platform.c .weak runtime_init .type runtime_init,%function .thumb_func runtime_init: bx lr // ---------------------------------------------------------------------------- // If core 1 somehow gets into crt0 due to a spectacular VTOR mishap, we need to // catch it and send back to the sleep-and-launch code in the bootrom. Shouldn't // happen (it should sleep in the ROM until given an entry point via the // cross-core FIFOs) but it's good to be defensive. hold_non_core0_in_bootrom: ldr r0, = 'W' | ('V' << 8) bl rom_func_lookup bx r0 // ---------------------------------------------------------------------------- // Stack/heap dummies to set size // Prior to SDK 1.5.1 these were `.section .stack` without the `, "a"`... Clang linker gives a warning about this, // however setting it explicitly to `, "a"` makes GCC *now* discard the section unless it is also KEEP. This // seems like very surprising behavior! // // Strictly the most correct thing to do (as .stack and .heap are unreferenced) is to mark them as "a", and also KEEP, which // works correctly for both GCC and Clang, however doing so may break anyone who already has custom linker scripts without // the KEEP. Therefore we will only add the "a" on Clang, but will also use KEEP to our own linker scripts. .macro spacer_section name #if PICO_ASSEMBLER_IS_CLANG .section \name, "a" #else .section \name #endif .endm spacer_section .stack // align to allow for memory protection (although this alignment is pretty much ignored by linker script) .p2align 5 .equ StackSize, PICO_STACK_SIZE .space StackSize spacer_section .heap .p2align 2 .equ HeapSize, PICO_HEAP_SIZE .space HeapSize ================================================ FILE: pico-sdk/src/rp2_common/pico_standard_link/doc.h ================================================ /** * \defgroup pico_standard_link pico_standard_link * \brief Standard link step providing the basics for creating a runnable binary * * This includes * - C runtime initialization * - Linker scripts for 'default', 'no_flash', 'blocked_ram' and 'copy_to_ram' binaries * - 'Binary Information' support * - Linker option control */ ================================================ FILE: pico-sdk/src/rp2_common/pico_standard_link/memmap_blocked_ram.ld ================================================ /* Based on GCC ARM embedded samples. Defines the following symbols for use by code: __exidx_start __exidx_end __etext __data_start__ __preinit_array_start __preinit_array_end __init_array_start __init_array_end __fini_array_start __fini_array_end __data_end__ __bss_start__ __bss_end__ __end__ end __HeapLimit __StackLimit __StackTop __stack (== StackTop) */ MEMORY { FLASH(rx) : ORIGIN = 0x10000000, LENGTH = 2048k RAM(rwx) : ORIGIN = 0x21000000, LENGTH = 256k SCRATCH_X(rwx) : ORIGIN = 0x20040000, LENGTH = 4k SCRATCH_Y(rwx) : ORIGIN = 0x20041000, LENGTH = 4k } ENTRY(_entry_point) SECTIONS { /* Second stage bootloader is prepended to the image. It must be 256 bytes big and checksummed. It is usually built by the boot_stage2 target in the Raspberry Pi Pico SDK */ .flash_begin : { __flash_binary_start = .; } > FLASH .boot2 : { __boot2_start__ = .; KEEP (*(.boot2)) __boot2_end__ = .; } > FLASH ASSERT(__boot2_end__ - __boot2_start__ == 256, "ERROR: Pico second stage bootloader must be 256 bytes in size") /* The second stage will always enter the image at the start of .text. The debugger will use the ELF entry point, which is the _entry_point symbol if present, otherwise defaults to start of .text. This can be used to transfer control back to the bootrom on debugger launches only, to perform proper flash setup. */ .text : { __logical_binary_start = .; KEEP (*(.vectors)) KEEP (*(.binary_info_header)) __binary_info_header_end = .; KEEP (*(.reset)) /* TODO revisit this now memset/memcpy/float in ROM */ /* bit of a hack right now to exclude all floating point and time critical (e.g. memset, memcpy) code from * FLASH ... we will include any thing excluded here in .data below by default */ *(.init) *(EXCLUDE_FILE(*libgcc.a: *libc.a:*lib_a-mem*.o *libm.a:) .text*) *(.fini) /* Pull all c'tors into .text */ *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) *(SORT(.ctors.*)) *(.ctors) /* Followed by destructors */ *crtbegin.o(.dtors) *crtbegin?.o(.dtors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) *(SORT(.dtors.*)) *(.dtors) *(.eh_frame*) . = ALIGN(4); } > FLASH .rodata : { *(EXCLUDE_FILE(*libgcc.a: *libc.a:*lib_a-mem*.o *libm.a:) .rodata*) . = ALIGN(4); *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.flashdata*))) . = ALIGN(4); } > FLASH .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > FLASH __exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } > FLASH __exidx_end = .; /* Machine inspectable binary information */ . = ALIGN(4); __binary_info_start = .; .binary_info : { KEEP(*(.binary_info.keep.*)) *(.binary_info.*) } > FLASH __binary_info_end = .; . = ALIGN(4); .ram_vector_table (NOLOAD): { *(.ram_vector_table) } > RAM .data : { __data_start__ = .; *(vtable) *(.time_critical*) /* remaining .text and .rodata; i.e. stuff we exclude above because we want it in RAM */ *(.text*) . = ALIGN(4); *(.rodata*) . = ALIGN(4); *(.data*) . = ALIGN(4); *(.after_data.*) . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__mutex_array_start = .); KEEP(*(SORT(.mutex_array.*))) KEEP(*(.mutex_array)) PROVIDE_HIDDEN (__mutex_array_end = .); . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__preinit_array_start = .); KEEP(*(SORT(.preinit_array.*))) KEEP(*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); . = ALIGN(4); /* init data */ PROVIDE_HIDDEN (__init_array_start = .); KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array)) PROVIDE_HIDDEN (__init_array_end = .); . = ALIGN(4); /* finit data */ PROVIDE_HIDDEN (__fini_array_start = .); *(SORT(.fini_array.*)) *(.fini_array) PROVIDE_HIDDEN (__fini_array_end = .); *(.jcr) . = ALIGN(4); /* All data end */ __data_end__ = .; } > RAM AT> FLASH /* __etext is (for backwards compatibility) the name of the .data init source pointer (...) */ __etext = LOADADDR(.data); .uninitialized_data (NOLOAD): { . = ALIGN(4); *(.uninitialized_data*) } > RAM /* Start and end symbols must be word-aligned */ .scratch_x : { __scratch_x_start__ = .; *(.scratch_x.*) . = ALIGN(4); __scratch_x_end__ = .; } > SCRATCH_X AT > FLASH __scratch_x_source__ = LOADADDR(.scratch_x); .scratch_y : { __scratch_y_start__ = .; *(.scratch_y.*) . = ALIGN(4); __scratch_y_end__ = .; } > SCRATCH_Y AT > FLASH __scratch_y_source__ = LOADADDR(.scratch_y); .bss : { . = ALIGN(4); __bss_start__ = .; *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*))) *(COMMON) . = ALIGN(4); __bss_end__ = .; } > RAM .heap (NOLOAD): { __end__ = .; end = __end__; KEEP(*(.heap*)) __HeapLimit = .; } > RAM /* .stack*_dummy section doesn't contains any symbols. It is only * used for linker to calculate size of stack sections, and assign * values to stack symbols later * * stack1 section may be empty/missing if platform_launch_core1 is not used */ /* by default we put core 0 stack at the end of scratch Y, so that if core 1 * stack is not used then all of SCRATCH_X is free. */ .stack1_dummy (NOLOAD): { *(.stack1*) } > SCRATCH_X .stack_dummy (NOLOAD): { KEEP(*(.stack*)) } > SCRATCH_Y .flash_end : { PROVIDE(__flash_binary_end = .); } > FLASH /* stack limit is poorly named, but historically is maximum heap ptr */ __StackLimit = ORIGIN(RAM) + LENGTH(RAM); __StackOneTop = ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X); __StackTop = ORIGIN(SCRATCH_Y) + LENGTH(SCRATCH_Y); __StackOneBottom = __StackOneTop - SIZEOF(.stack1_dummy); __StackBottom = __StackTop - SIZEOF(.stack_dummy); PROVIDE(__stack = __StackTop); /* Check if data + heap + stack exceeds RAM limit */ ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed") ASSERT( __binary_info_header_end - __logical_binary_start <= 256, "Binary info must be in first 256 bytes of the binary") /* todo assert on extra code */ } ================================================ FILE: pico-sdk/src/rp2_common/pico_standard_link/memmap_copy_to_ram.ld ================================================ /* Based on GCC ARM embedded samples. Defines the following symbols for use by code: __exidx_start __exidx_end __etext __data_start__ __preinit_array_start __preinit_array_end __init_array_start __init_array_end __fini_array_start __fini_array_end __data_end__ __bss_start__ __bss_end__ __end__ end __HeapLimit __StackLimit __StackTop __stack (== StackTop) */ MEMORY { FLASH(rx) : ORIGIN = 0x10000000, LENGTH = 2048k RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 256k SCRATCH_X(rwx) : ORIGIN = 0x20040000, LENGTH = 4k SCRATCH_Y(rwx) : ORIGIN = 0x20041000, LENGTH = 4k } ENTRY(_entry_point) SECTIONS { /* Second stage bootloader is prepended to the image. It must be 256 bytes big and checksummed. It is usually built by the boot_stage2 target in the Raspberry Pi Pico SDK */ .flash_begin : { __flash_binary_start = .; } > FLASH .boot2 : { __boot2_start__ = .; KEEP (*(.boot2)) __boot2_end__ = .; } > FLASH ASSERT(__boot2_end__ - __boot2_start__ == 256, "ERROR: Pico second stage bootloader must be 256 bytes in size") /* The second stage will always enter the image at the start of .text. The debugger will use the ELF entry point, which is the _entry_point symbol if present, otherwise defaults to start of .text. This can be used to transfer control back to the bootrom on debugger launches only, to perform proper flash setup. */ .flashtext : { __logical_binary_start = .; KEEP (*(.vectors)) KEEP (*(.binary_info_header)) __binary_info_header_end = .; KEEP (*(.reset)) } .rodata : { /* segments not marked as .flashdata are instead pulled into .data (in RAM) to avoid accidental flash accesses */ *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.flashdata*))) . = ALIGN(4); } > FLASH .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > FLASH __exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } > FLASH __exidx_end = .; /* Machine inspectable binary information */ . = ALIGN(4); __binary_info_start = .; .binary_info : { KEEP(*(.binary_info.keep.*)) *(.binary_info.*) } > FLASH __binary_info_end = .; . = ALIGN(4); /* Vector table goes first in RAM, to avoid large alignment hole */ .ram_vector_table (NOLOAD): { *(.ram_vector_table) } > RAM .text : { __ram_text_start__ = .; *(.init) *(.text*) *(.fini) /* Pull all c'tors into .text */ *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) *(SORT(.ctors.*)) *(.ctors) /* Followed by destructors */ *crtbegin.o(.dtors) *crtbegin?.o(.dtors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) *(SORT(.dtors.*)) *(.dtors) *(.eh_frame*) . = ALIGN(4); __ram_text_end__ = .; } > RAM AT> FLASH __ram_text_source__ = LOADADDR(.text); . = ALIGN(4); .data : { __data_start__ = .; *(vtable) *(.time_critical*) . = ALIGN(4); *(.rodata*) . = ALIGN(4); *(.data*) . = ALIGN(4); *(.after_data.*) . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__mutex_array_start = .); KEEP(*(SORT(.mutex_array.*))) KEEP(*(.mutex_array)) PROVIDE_HIDDEN (__mutex_array_end = .); . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__preinit_array_start = .); KEEP(*(SORT(.preinit_array.*))) KEEP(*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); . = ALIGN(4); /* init data */ PROVIDE_HIDDEN (__init_array_start = .); KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array)) PROVIDE_HIDDEN (__init_array_end = .); . = ALIGN(4); /* finit data */ PROVIDE_HIDDEN (__fini_array_start = .); *(SORT(.fini_array.*)) *(.fini_array) PROVIDE_HIDDEN (__fini_array_end = .); *(.jcr) . = ALIGN(4); /* All data end */ __data_end__ = .; } > RAM AT> FLASH /* __etext is (for backwards compatibility) the name of the .data init source pointer (...) */ __etext = LOADADDR(.data); .uninitialized_data (NOLOAD): { . = ALIGN(4); *(.uninitialized_data*) } > RAM /* Start and end symbols must be word-aligned */ .scratch_x : { __scratch_x_start__ = .; *(.scratch_x.*) . = ALIGN(4); __scratch_x_end__ = .; } > SCRATCH_X AT > FLASH __scratch_x_source__ = LOADADDR(.scratch_x); .scratch_y : { __scratch_y_start__ = .; *(.scratch_y.*) . = ALIGN(4); __scratch_y_end__ = .; } > SCRATCH_Y AT > FLASH __scratch_y_source__ = LOADADDR(.scratch_y); .bss : { . = ALIGN(4); __bss_start__ = .; *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*))) *(COMMON) . = ALIGN(4); __bss_end__ = .; } > RAM .heap (NOLOAD): { __end__ = .; end = __end__; KEEP(*(.heap*)) __HeapLimit = .; } > RAM /* .stack*_dummy section doesn't contains any symbols. It is only * used for linker to calculate size of stack sections, and assign * values to stack symbols later * * stack1 section may be empty/missing if platform_launch_core1 is not used */ /* by default we put core 0 stack at the end of scratch Y, so that if core 1 * stack is not used then all of SCRATCH_X is free. */ .stack1_dummy (NOLOAD): { *(.stack1*) } > SCRATCH_X .stack_dummy (NOLOAD): { KEEP(*(.stack*)) } > SCRATCH_Y .flash_end : { __flash_binary_end = .; } > FLASH /* stack limit is poorly named, but historically is maximum heap ptr */ __StackLimit = ORIGIN(RAM) + LENGTH(RAM); __StackOneTop = ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X); __StackTop = ORIGIN(SCRATCH_Y) + LENGTH(SCRATCH_Y); __StackOneBottom = __StackOneTop - SIZEOF(.stack1_dummy); __StackBottom = __StackTop - SIZEOF(.stack_dummy); PROVIDE(__stack = __StackTop); /* Check if data + heap + stack exceeds RAM limit */ ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed") ASSERT( __binary_info_header_end - __logical_binary_start <= 256, "Binary info must be in first 256 bytes of the binary") /* todo assert on extra code */ } ================================================ FILE: pico-sdk/src/rp2_common/pico_standard_link/memmap_default.ld ================================================ /* Based on GCC ARM embedded samples. Defines the following symbols for use by code: __exidx_start __exidx_end __etext __data_start__ __preinit_array_start __preinit_array_end __init_array_start __init_array_end __fini_array_start __fini_array_end __data_end__ __bss_start__ __bss_end__ __end__ end __HeapLimit __StackLimit __StackTop __stack (== StackTop) */ MEMORY { FLASH(rx) : ORIGIN = 0x10000000, LENGTH = 2048k RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 256k SCRATCH_X(rwx) : ORIGIN = 0x20040000, LENGTH = 4k SCRATCH_Y(rwx) : ORIGIN = 0x20041000, LENGTH = 4k } ENTRY(_entry_point) SECTIONS { /* Second stage bootloader is prepended to the image. It must be 256 bytes big and checksummed. It is usually built by the boot_stage2 target in the Raspberry Pi Pico SDK */ .flash_begin : { __flash_binary_start = .; } > FLASH .boot2 : { __boot2_start__ = .; KEEP (*(.boot2)) __boot2_end__ = .; } > FLASH ASSERT(__boot2_end__ - __boot2_start__ == 256, "ERROR: Pico second stage bootloader must be 256 bytes in size") /* The second stage will always enter the image at the start of .text. The debugger will use the ELF entry point, which is the _entry_point symbol if present, otherwise defaults to start of .text. This can be used to transfer control back to the bootrom on debugger launches only, to perform proper flash setup. */ .text : { __logical_binary_start = .; KEEP (*(.vectors)) KEEP (*(.binary_info_header)) __binary_info_header_end = .; KEEP (*(.reset)) /* TODO revisit this now memset/memcpy/float in ROM */ /* bit of a hack right now to exclude all floating point and time critical (e.g. memset, memcpy) code from * FLASH ... we will include any thing excluded here in .data below by default */ *(.init) *(EXCLUDE_FILE(*libgcc.a: *libc.a:*lib_a-mem*.o *libm.a:) .text*) *(.fini) /* Pull all c'tors into .text */ *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) *(SORT(.ctors.*)) *(.ctors) /* Followed by destructors */ *crtbegin.o(.dtors) *crtbegin?.o(.dtors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) *(SORT(.dtors.*)) *(.dtors) *(.eh_frame*) . = ALIGN(4); } > FLASH .rodata : { *(EXCLUDE_FILE(*libgcc.a: *libc.a:*lib_a-mem*.o *libm.a:) .rodata*) . = ALIGN(4); *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.flashdata*))) . = ALIGN(4); } > FLASH .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > FLASH __exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } > FLASH __exidx_end = .; /* Machine inspectable binary information */ . = ALIGN(4); __binary_info_start = .; .binary_info : { KEEP(*(.binary_info.keep.*)) *(.binary_info.*) } > FLASH __binary_info_end = .; . = ALIGN(4); .ram_vector_table (NOLOAD): { *(.ram_vector_table) } > RAM .data : { __data_start__ = .; *(vtable) *(.time_critical*) /* remaining .text and .rodata; i.e. stuff we exclude above because we want it in RAM */ *(.text*) . = ALIGN(4); *(.rodata*) . = ALIGN(4); *(.data*) . = ALIGN(4); *(.after_data.*) . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__mutex_array_start = .); KEEP(*(SORT(.mutex_array.*))) KEEP(*(.mutex_array)) PROVIDE_HIDDEN (__mutex_array_end = .); . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__preinit_array_start = .); KEEP(*(SORT(.preinit_array.*))) KEEP(*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); . = ALIGN(4); /* init data */ PROVIDE_HIDDEN (__init_array_start = .); KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array)) PROVIDE_HIDDEN (__init_array_end = .); . = ALIGN(4); /* finit data */ PROVIDE_HIDDEN (__fini_array_start = .); *(SORT(.fini_array.*)) *(.fini_array) PROVIDE_HIDDEN (__fini_array_end = .); *(.jcr) . = ALIGN(4); /* All data end */ __data_end__ = .; } > RAM AT> FLASH /* __etext is (for backwards compatibility) the name of the .data init source pointer (...) */ __etext = LOADADDR(.data); .uninitialized_data (NOLOAD): { . = ALIGN(4); *(.uninitialized_data*) } > RAM /* Start and end symbols must be word-aligned */ .scratch_x : { __scratch_x_start__ = .; *(.scratch_x.*) . = ALIGN(4); __scratch_x_end__ = .; } > SCRATCH_X AT > FLASH __scratch_x_source__ = LOADADDR(.scratch_x); .scratch_y : { __scratch_y_start__ = .; *(.scratch_y.*) . = ALIGN(4); __scratch_y_end__ = .; } > SCRATCH_Y AT > FLASH __scratch_y_source__ = LOADADDR(.scratch_y); .bss : { . = ALIGN(4); __bss_start__ = .; *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*))) *(COMMON) . = ALIGN(4); __bss_end__ = .; } > RAM .heap (NOLOAD): { __end__ = .; end = __end__; KEEP(*(.heap*)) __HeapLimit = .; } > RAM /* .stack*_dummy section doesn't contains any symbols. It is only * used for linker to calculate size of stack sections, and assign * values to stack symbols later * * stack1 section may be empty/missing if platform_launch_core1 is not used */ /* by default we put core 0 stack at the end of scratch Y, so that if core 1 * stack is not used then all of SCRATCH_X is free. */ .stack1_dummy (NOLOAD): { *(.stack1*) } > SCRATCH_X .stack_dummy (NOLOAD): { KEEP(*(.stack*)) } > SCRATCH_Y .flash_end : { PROVIDE(__flash_binary_end = .); } > FLASH /* stack limit is poorly named, but historically is maximum heap ptr */ __StackLimit = ORIGIN(RAM) + LENGTH(RAM); __StackOneTop = ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X); __StackTop = ORIGIN(SCRATCH_Y) + LENGTH(SCRATCH_Y); __StackOneBottom = __StackOneTop - SIZEOF(.stack1_dummy); __StackBottom = __StackTop - SIZEOF(.stack_dummy); PROVIDE(__stack = __StackTop); /* Check if data + heap + stack exceeds RAM limit */ ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed") ASSERT( __binary_info_header_end - __logical_binary_start <= 256, "Binary info must be in first 256 bytes of the binary") /* todo assert on extra code */ } ================================================ FILE: pico-sdk/src/rp2_common/pico_standard_link/memmap_no_flash.ld ================================================ /* Based on GCC ARM embedded samples. Defines the following symbols for use by code: __exidx_start __exidx_end __etext __data_start__ __preinit_array_start __preinit_array_end __init_array_start __init_array_end __fini_array_start __fini_array_end __data_end__ __bss_start__ __bss_end__ __end__ end __HeapLimit __StackLimit __StackTop __stack (== StackTop) */ MEMORY { RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 256k SCRATCH_X(rwx) : ORIGIN = 0x20040000, LENGTH = 4k SCRATCH_Y(rwx) : ORIGIN = 0x20041000, LENGTH = 4k } ENTRY(_entry_point) SECTIONS { /* Note in NO_FLASH builds the entry point for both the bootrom, and debugger entry (ELF entry point), are *first* in the image, and the vector table follows immediately afterward. This is because the bootrom enters RAM binaries directly at their lowest address (preferring main RAM over XIP cache-as-SRAM if both are used). */ .text : { __logical_binary_start = .; __reset_start = .; KEEP (*(.reset)) __reset_end = .; KEEP (*(.binary_info_header)) __binary_info_header_end = .; . = ALIGN(256); KEEP (*(.vectors)) *(.time_critical*) *(.text*) . = ALIGN(4); *(.init) *(.fini) /* Pull all c'tors into .text */ *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) *(SORT(.ctors.*)) *(.ctors) /* Followed by destructors */ *crtbegin.o(.dtors) *crtbegin?.o(.dtors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) *(SORT(.dtors.*)) *(.dtors) *(.eh_frame*) } > RAM .rodata : { *(.rodata*) . = ALIGN(4); *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.flashdata*))) . = ALIGN(4); } > RAM .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > RAM __exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } > RAM __exidx_end = .; /* Machine inspectable binary information */ . = ALIGN(4); __binary_info_start = .; .binary_info : { KEEP(*(.binary_info.keep.*)) *(.binary_info.*) } > RAM __binary_info_end = .; . = ALIGN(4); .data : { __data_start__ = .; *(vtable) *(.data*) . = ALIGN(4); *(.after_data.*) . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__mutex_array_start = .); KEEP(*(SORT(.mutex_array.*))) KEEP(*(.mutex_array)) PROVIDE_HIDDEN (__mutex_array_end = .); . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__preinit_array_start = .); KEEP(*(SORT(.preinit_array.*))) KEEP(*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); . = ALIGN(4); /* init data */ PROVIDE_HIDDEN (__init_array_start = .); KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array)) PROVIDE_HIDDEN (__init_array_end = .); . = ALIGN(4); /* finit data */ PROVIDE_HIDDEN (__fini_array_start = .); *(SORT(.fini_array.*)) *(.fini_array) PROVIDE_HIDDEN (__fini_array_end = .); *(.jcr) . = ALIGN(4); /* All data end */ __data_end__ = .; } > RAM .uninitialized_data (NOLOAD): { . = ALIGN(4); *(.uninitialized_data*) } > RAM /* __etext is (for backwards compatibility) the name of the .data init source pointer (...) */ __etext = LOADADDR(.data); /* Start and end symbols must be word-aligned */ .scratch_x : { __scratch_x_start__ = .; *(.scratch_x.*) . = ALIGN(4); __scratch_x_end__ = .; } > SCRATCH_X __scratch_x_source__ = LOADADDR(.scratch_x); .scratch_y : { __scratch_y_start__ = .; *(.scratch_y.*) . = ALIGN(4); __scratch_y_end__ = .; } > SCRATCH_Y __scratch_y_source__ = LOADADDR(.scratch_y); .bss : { . = ALIGN(4); __bss_start__ = .; *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*))) *(COMMON) . = ALIGN(4); __bss_end__ = .; } > RAM .heap (NOLOAD): { __end__ = .; end = __end__; KEEP(*(.heap*)) __HeapLimit = .; } > RAM /* .stack*_dummy section doesn't contains any symbols. It is only * used for linker to calculate size of stack sections, and assign * values to stack symbols later * * stack1 section may be empty/missing if platform_launch_core1 is not used */ /* by default we put core 0 stack at the end of scratch Y, so that if core 1 * stack is not used then all of SCRATCH_X is free. */ .stack1_dummy (NOLOAD): { *(.stack1*) } > SCRATCH_X .stack_dummy (NOLOAD): { KEEP(*(.stack*)) } > SCRATCH_Y /* stack limit is poorly named, but historically is maximum heap ptr */ __StackLimit = ORIGIN(RAM) + LENGTH(RAM); __StackOneTop = ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X); __StackTop = ORIGIN(SCRATCH_Y) + LENGTH(SCRATCH_Y); __StackOneBottom = __StackOneTop - SIZEOF(.stack1_dummy); __StackBottom = __StackTop - SIZEOF(.stack_dummy); PROVIDE(__stack = __StackTop); /* Check if data + heap + stack exceeds RAM limit */ ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed") ASSERT( __binary_info_header_end - __logical_binary_start <= 256, "Binary info must be in first 256 bytes of the binary") /* todo assert on extra code */ } ================================================ FILE: pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #if !PICO_CXX_ENABLE_EXCEPTIONS // Override the standard allocators to use regular malloc/free #if !PICO_CXX_DISABLE_ALLOCATION_OVERRIDES // Let user override #include #include "pico.h" void *operator new(std::size_t n) { return std::malloc(n); } void *operator new[](std::size_t n) { return std::malloc(n); } void operator delete(void *p) { std::free(p); } void operator delete[](void *p) noexcept { std::free(p); } #if __cpp_sized_deallocation void operator delete(void *p, __unused std::size_t n) noexcept { std::free(p); } void operator delete[](void *p, __unused std::size_t n) noexcept { std::free(p); } #endif #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio/CMakeLists.txt ================================================ if (NOT TARGET pico_stdio) pico_add_library(pico_stdio) target_include_directories(pico_stdio_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) target_sources(pico_stdio INTERFACE ${CMAKE_CURRENT_LIST_DIR}/stdio.c ) pico_wrap_function(pico_stdio printf) pico_wrap_function(pico_stdio vprintf) pico_wrap_function(pico_stdio puts) pico_wrap_function(pico_stdio putchar) pico_wrap_function(pico_stdio getchar) if (TARGET pico_printf) pico_mirrored_target_link_libraries(pico_stdio INTERFACE pico_printf) endif() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 Marco Paland Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio/include/pico/stdio/driver.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_STDIO_DRIVER_H #define _PICO_STDIO_DRIVER_H #include "pico/stdio.h" struct stdio_driver { void (*out_chars)(const char *buf, int len); void (*out_flush)(void); int (*in_chars)(char *buf, int len); void (*set_chars_available_callback)(void (*fn)(void*), void *param); stdio_driver_t *next; #if PICO_STDIO_ENABLE_CRLF_SUPPORT bool last_ended_with_cr; bool crlf_enabled; #endif }; #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio/include/pico/stdio.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_STDIO_H #define _PICO_STDIO_H /** \file stdio.h * \defgroup pico_stdio pico_stdio * Customized stdio support allowing for input and output from UART, USB, semi-hosting etc. * * Note the API for adding additional input output devices is not yet considered stable */ #include "pico.h" // PICO_CONFIG: PICO_STDOUT_MUTEX, Enable/disable mutex around stdout, type=bool, default=1, group=pico_stdio #ifndef PICO_STDOUT_MUTEX #define PICO_STDOUT_MUTEX 1 #endif // PICO_CONFIG: PICO_STDIO_ENABLE_CRLF_SUPPORT, Enable/disable CR/LF output conversion support, type=bool, default=1, group=pico_stdio #ifndef PICO_STDIO_ENABLE_CRLF_SUPPORT #define PICO_STDIO_ENABLE_CRLF_SUPPORT 1 #endif // PICO_CONFIG: PICO_STDIO_DEFAULT_CRLF, Default for CR/LF conversion enabled on all stdio outputs, type=bool, default=1, depends=PICO_STDIO_ENABLE_CRLF_SUPPORT, group=pico_stdio #ifndef PICO_STDIO_DEFAULT_CRLF #define PICO_STDIO_DEFAULT_CRLF 1 #endif // PICO_CONFIG: PICO_STDIO_STACK_BUFFER_SIZE, Define printf buffer size (on stack)... this is just a working buffer not a max output size, min=0, max=512, default=128, group=pico_stdio #ifndef PICO_STDIO_STACK_BUFFER_SIZE #define PICO_STDIO_STACK_BUFFER_SIZE 128 #endif // PICO_CONFIG: PICO_STDIO_DEADLOCK_TIMEOUT_MS, Time after which to assume stdio_usb is deadlocked by use in IRQ and give up, type=int, default=1000, group=pico_stdio #ifndef PICO_STDIO_DEADLOCK_TIMEOUT_MS #define PICO_STDIO_DEADLOCK_TIMEOUT_MS 1000 #endif #ifdef __cplusplus extern "C" { #endif typedef struct stdio_driver stdio_driver_t; /*! \brief Initialize all of the present standard stdio types that are linked into the binary. * \ingroup pico_stdio * * Call this method once you have set up your clocks to enable the stdio support for UART, USB * and semihosting based on the presence of the respective libraries in the binary. * * When stdio_usb is configured, this method can be optionally made to block, waiting for a connection * via the variables specified in \ref stdio_usb_init (i.e. \ref PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS) * * \return true if at least one output was successfully initialized, false otherwise. * \see stdio_uart, stdio_usb, stdio_semihosting */ bool stdio_init_all(void); /*! \brief Flushes any buffered output. * \ingroup pico_stdio */ void stdio_flush(void); /*! \brief Return a character from stdin if there is one available within a timeout * \ingroup pico_stdio * * \param timeout_us the timeout in microseconds, or 0 to not wait for a character if none available. * \return the character from 0-255 or PICO_ERROR_TIMEOUT if timeout occurs */ int getchar_timeout_us(uint32_t timeout_us); /*! \brief Adds or removes a driver from the list of active drivers used for input/output * \ingroup pico_stdio * * \note this method should always be called on an initialized driver and is not re-entrant * \param driver the driver * \param enabled true to add, false to remove */ void stdio_set_driver_enabled(stdio_driver_t *driver, bool enabled); /*! \brief Control limiting of output to a single driver * \ingroup pico_stdio * * \note this method should always be called on an initialized driver * * \param driver if non-null then output only that driver will be used for input/output (assuming it is in the list of enabled drivers). * if NULL then all enabled drivers will be used */ void stdio_filter_driver(stdio_driver_t *driver); /*! \brief control conversion of line feeds to carriage return on transmissions * \ingroup pico_stdio * * \note this method should always be called on an initialized driver * * \param driver the driver * \param translate If true, convert line feeds to carriage return on transmissions */ void stdio_set_translate_crlf(stdio_driver_t *driver, bool translate); /*! \brief putchar variant that skips any CR/LF conversion if enabled * \ingroup pico_stdio */ int putchar_raw(int c); /*! \brief puts variant that skips any CR/LF conversion if enabled * \ingroup pico_stdio */ int puts_raw(const char *s); /*! \brief get notified when there are input characters available * \ingroup pico_stdio * * \param fn Callback function to be called when characters are available. Pass NULL to cancel any existing callback * \param param Pointer to pass to the callback */ void stdio_set_chars_available_callback(void (*fn)(void*), void *param); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio/stdio.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include "pico.h" #if LIB_PICO_PRINTF_PICO #include "pico/printf.h" #endif #include "pico/stdio.h" #include "pico/stdio/driver.h" #include "pico/time.h" #if PICO_STDOUT_MUTEX #include "pico/mutex.h" #endif #if LIB_PICO_STDIO_UART #include "pico/stdio_uart.h" #endif #if LIB_PICO_STDIO_USB #include "pico/stdio_usb.h" #endif #if LIB_PICO_STDIO_SEMIHOSTING #include "pico/stdio_semihosting.h" #endif #define STDIO_HANDLE_STDIN 0 #define STDIO_HANDLE_STDOUT 1 #define STDIO_HANDLE_STDERR 2 static stdio_driver_t *drivers; static stdio_driver_t *filter; #if PICO_STDOUT_MUTEX auto_init_mutex(print_mutex); bool stdout_serialize_begin(void) { return mutex_try_enter_block_until(&print_mutex, make_timeout_time_ms(PICO_STDIO_DEADLOCK_TIMEOUT_MS)); } void stdout_serialize_end(void) { mutex_exit(&print_mutex); } #else static bool stdout_serialize_begin(void) { return true; } static void stdout_serialize_end(void) { } #endif static void stdio_out_chars_no_crlf(stdio_driver_t *driver, const char *s, int len) { driver->out_chars(s, len); } static void stdio_out_chars_crlf(stdio_driver_t *driver, const char *s, int len) { #if PICO_STDIO_ENABLE_CRLF_SUPPORT if (!driver->crlf_enabled) { driver->out_chars(s, len); return; } int first_of_chunk = 0; static const char crlf_str[] = {'\r', '\n'}; for (int i = 0; i < len; i++) { bool prev_char_was_cr = i > 0 ? s[i - 1] == '\r' : driver->last_ended_with_cr; if (s[i] == '\n' && !prev_char_was_cr) { if (i > first_of_chunk) { driver->out_chars(&s[first_of_chunk], i - first_of_chunk); } driver->out_chars(crlf_str, 2); first_of_chunk = i + 1; } } if (first_of_chunk < len) { driver->out_chars(&s[first_of_chunk], len - first_of_chunk); } if (len > 0) { driver->last_ended_with_cr = s[len - 1] == '\r'; } #else driver->out_chars(s, len); #endif } static bool stdio_put_string(const char *s, int len, bool newline, bool no_cr) { bool serialized = stdout_serialize_begin(); if (!serialized) { #if PICO_STDIO_IGNORE_NESTED_STDOUT return false; #endif } if (len == -1) len = (int)strlen(s); void (*out_func)(stdio_driver_t *, const char *, int) = no_cr ? stdio_out_chars_no_crlf : stdio_out_chars_crlf; for (stdio_driver_t *driver = drivers; driver; driver = driver->next) { if (!driver->out_chars) continue; if (filter && filter != driver) continue; out_func(driver, s, len); if (newline) { const char c = '\n'; out_func(driver, &c, 1); } } if (serialized) { stdout_serialize_end(); } return len; } static int stdio_get_until(char *buf, int len, absolute_time_t until) { do { // todo round robin might be nice on each call, but then again hopefully // no source will starve the others for (stdio_driver_t *driver = drivers; driver; driver = driver->next) { if (filter && filter != driver) continue; if (driver->in_chars) { int read = driver->in_chars(buf, len); if (read > 0) { return read; } } } if (time_reached(until)) { return PICO_ERROR_TIMEOUT; } // we sleep here in case the in_chars methods acquire mutexes or disable IRQs and // potentially starve out what they are waiting on (have seen this with USB) busy_wait_us(1); } while (true); } int WRAPPER_FUNC(putchar)(int c) { char cc = (char)c; stdio_put_string(&cc, 1, false, false); return c; } int WRAPPER_FUNC(puts)(const char *s) { int len = (int)strlen(s); stdio_put_string(s, len, true, false); stdio_flush(); return len; } int putchar_raw(int c) { char cc = (char)c; stdio_put_string(&cc, 1, false, true); return c; } int puts_raw(const char *s) { int len = (int)strlen(s); stdio_put_string(s, len, true, true); stdio_flush(); return len; } int __attribute__((weak)) _read(int handle, char *buffer, int length) { if (handle == STDIO_HANDLE_STDIN) { return stdio_get_until(buffer, length, at_the_end_of_time); } return -1; } int __attribute__((weak)) _write(int handle, char *buffer, int length) { if (handle == STDIO_HANDLE_STDOUT || handle == STDIO_HANDLE_STDERR) { stdio_put_string(buffer, length, false, false); return length; } return -1; } int __attribute__((weak)) _open(__unused const char *fn, __unused int oflag, ...) { return -1; } int __attribute__((weak)) _close(__unused int fd) { return -1; } off_t __attribute__((weak)) _lseek(__unused int fd, __unused off_t pos, __unused int whence) { return -1; } int __attribute__((weak)) _fstat(__unused int fd, __unused struct stat *buf) { return -1; } int __attribute__((weak)) _isatty(int fd) { return fd == STDIO_HANDLE_STDIN || fd == STDIO_HANDLE_STDOUT || fd == STDIO_HANDLE_STDERR; } void stdio_set_driver_enabled(stdio_driver_t *driver, bool enable) { stdio_driver_t **prev = &drivers; while (*prev) { if (*prev == driver) { if (!enable) { *prev = driver->next; driver->next = NULL; } return; } prev = &(*prev)->next; } if (enable) { *prev = driver; } } void stdio_flush() { for (stdio_driver_t *d = drivers; d; d = d->next) { if (d->out_flush) d->out_flush(); } } typedef struct stdio_stack_buffer { int used; char buf[PICO_STDIO_STACK_BUFFER_SIZE]; } stdio_stack_buffer_t; static void stdio_stack_buffer_flush(stdio_stack_buffer_t *buffer) { if (buffer->used) { for (stdio_driver_t *d = drivers; d; d = d->next) { if (!d->out_chars) continue; if (filter && filter != d) continue; stdio_out_chars_crlf(d, buffer->buf, buffer->used); } buffer->used = 0; } } static void stdio_buffered_printer(char c, void *arg) { stdio_stack_buffer_t *buffer = (stdio_stack_buffer_t *)arg; if (buffer->used == PICO_STDIO_STACK_BUFFER_SIZE) { stdio_stack_buffer_flush(buffer); } buffer->buf[buffer->used++] = c; } int WRAPPER_FUNC(vprintf)(const char *format, va_list va) { bool serialzed = stdout_serialize_begin(); if (!serialzed) { #if PICO_STDIO_IGNORE_NESTED_STDOUT return 0; #endif } int ret; #if LIB_PICO_PRINTF_PICO struct stdio_stack_buffer buffer; buffer.used = 0; ret = vfctprintf(stdio_buffered_printer, &buffer, format, va); stdio_stack_buffer_flush(&buffer); stdio_flush(); #elif LIB_PICO_PRINTF_NONE extern void printf_none_assert(); printf_none_assert(); #else extern int REAL_FUNC(vprintf)(const char *format, va_list va); ret = REAL_FUNC(vprintf)(format, va); #endif if (serialzed) { stdout_serialize_end(); } return ret; } int __printflike(1, 0) WRAPPER_FUNC(printf)(const char* format, ...) { va_list va; va_start(va, format); int ret = vprintf(format, va); va_end(va); return ret; } bool stdio_init_all(void) { // todo add explicit custom, or registered although you can call stdio_enable_driver explicitly anyway // These are well known ones bool rc = false; #if LIB_PICO_STDIO_UART stdio_uart_init(); rc = true; #endif #if LIB_PICO_STDIO_SEMIHOSTING stdio_semihosting_init(); rc = true; #endif #if LIB_PICO_STDIO_USB rc |= stdio_usb_init(); #endif return rc; } int WRAPPER_FUNC(getchar)(void) { char buf[1]; int len = stdio_get_until(buf, 1, at_the_end_of_time); if (len < 0) return len; assert(len == 1); return (uint8_t)buf[0]; } int getchar_timeout_us(uint32_t timeout_us) { char buf[1]; int rc = stdio_get_until(buf, sizeof(buf), make_timeout_time_us(timeout_us)); if (rc < 0) return rc; assert(rc); return (uint8_t)buf[0]; } void stdio_filter_driver(stdio_driver_t *driver) { filter = driver; } void stdio_set_translate_crlf(stdio_driver_t *driver, bool enabled) { #if PICO_STDIO_ENABLE_CRLF_SUPPORT if (enabled && !driver->crlf_enabled) { driver->last_ended_with_cr = false; } driver->crlf_enabled = enabled; #else // Suppress -Wunused-parameter (void)driver; (void)enabled; panic_unsupported(); #endif } void stdio_set_chars_available_callback(void (*fn)(void*), void *param) { for (stdio_driver_t *s = drivers; s; s = s->next) { if (s->set_chars_available_callback) s->set_chars_available_callback(fn, param); } } ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio_semihosting/CMakeLists.txt ================================================ pico_add_library(pico_stdio_semihosting) target_sources(pico_stdio_semihosting INTERFACE ${CMAKE_CURRENT_LIST_DIR}/stdio_semihosting.c ) target_include_directories(pico_stdio_semihosting_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_mirrored_target_link_libraries(pico_stdio_semihosting INTERFACE pico_stdio) ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio_semihosting/include/pico/stdio_semihosting.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_STDIO_SEMIHOSTING_H #define _PICO_STDIO_SEMIHOSTING_H #include "pico/stdio.h" /** \brief Experimental support for stdout using RAM semihosting * \defgroup pico_stdio_semihosting pico_stdio_semihosting * \ingroup pico_stdio * * Linking this library or calling `pico_enable_stdio_semihosting(TARGET ENABLED)` in the CMake (which * achieves the same thing) will add semihosting to the drivers used for standard output */ // PICO_CONFIG: PICO_STDIO_SEMIHOSTING_DEFAULT_CRLF, Default state of CR/LF translation for semihosting output, type=bool, default=PICO_STDIO_DEFAULT_CRLF, group=pico_stdio_semihosting #ifndef PICO_STDIO_SEMIHOSTING_DEFAULT_CRLF #define PICO_STDIO_SEMIHOSTING_DEFAULT_CRLF PICO_STDIO_DEFAULT_CRLF #endif #ifdef __cplusplus extern "C" { #endif extern stdio_driver_t stdio_semihosting; /*! \brief Explicitly initialize stdout over semihosting and add it to the current set of stdout targets * \ingroup pico_stdio_semihosting * * \note this method is automatically called by \ref stdio_init_all() if `pico_stdio_semihosting` is included in the build */ void stdio_semihosting_init(void); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio_semihosting/stdio_semihosting.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/stdio/driver.h" #include "pico/stdio_semihosting.h" #include "pico/binary_info.h" static void stdio_semihosting_out_chars(const char *buf, int length) { // must be volatile or the buffer gets put in registers & optimized away volatile struct { // https://developer.arm.com/documentation/dui0375/g/What-is-Semihosting-/SYS-WRITE--0x05- // arguments, in order: // word 0 = file handle (1 = stdout) // word 1 = pointer to buffer // word 2 = length of buffer size_t fd; const char *buf; size_t len; } args; args.fd = 1; // 1 = stdout args.buf = buf; args.len = length; pico_default_asm ( // r1 must contain a pointer to the arguments "movs r1, %[args]\n" // semihosting call number 0x05 = SYS_WRITE "movs r0, #5\n" // make the semihosting call: https://developer.arm.com/documentation/dui0375/g/What-is-Semihosting-/The-semihosting-interface "bkpt 0xab\n" : : [args] "r" (&args) : "r0", "r1"); } stdio_driver_t stdio_semihosting = { .out_chars = stdio_semihosting_out_chars, #if PICO_STDIO_ENABLE_CRLF_SUPPORT .crlf_enabled = PICO_STDIO_SEMIHOSTING_DEFAULT_CRLF #endif }; void stdio_semihosting_init() { #if !PICO_NO_BI_STDIO_SEMIHOSTING bi_decl_if_func_used(bi_program_feature("semihosting stdout")); #endif stdio_set_driver_enabled(&stdio_semihosting, true); } ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio_uart/CMakeLists.txt ================================================ pico_add_library(pico_stdio_uart) target_sources(pico_stdio_uart INTERFACE ${CMAKE_CURRENT_LIST_DIR}/stdio_uart.c ) target_include_directories(pico_stdio_uart_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_mirrored_target_link_libraries(pico_stdio_uart INTERFACE pico_stdio) ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio_uart/include/pico/stdio_uart.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_STDIO_UART_H #define _PICO_STDIO_UART_H #include "pico/stdio.h" #include "hardware/uart.h" /** \brief Support for stdin/stdout using UART * \defgroup pico_stdio_uart pico_stdio_uart * \ingroup pico_stdio * * Linking this library or calling `pico_enable_stdio_uart(TARGET ENABLED)` in the CMake (which * achieves the same thing) will add UART to the drivers used for standard input/output */ // PICO_CONFIG: PICO_STDIO_UART_DEFAULT_CRLF, Default state of CR/LF translation for UART output, type=bool, default=PICO_STDIO_DEFAULT_CRLF, group=pico_stdio_uart #ifndef PICO_STDIO_UART_DEFAULT_CRLF #define PICO_STDIO_UART_DEFAULT_CRLF PICO_STDIO_DEFAULT_CRLF #endif // PICO_CONFIG: PICO_STDIO_UART_SUPPORT_CHARS_AVAILABLE_CALLBACK, Enable UART STDIO support for stdio_set_chars_available_callback. Can be disabled to make use of the uart elsewhere, type=bool, default=1, group=pico_stdio_uart #ifndef PICO_STDIO_UART_SUPPORT_CHARS_AVAILABLE_CALLBACK #define PICO_STDIO_UART_SUPPORT_CHARS_AVAILABLE_CALLBACK 1 #endif #ifdef __cplusplus extern "C" { #endif extern stdio_driver_t stdio_uart; /*! \brief Explicitly initialize stdin/stdout over UART and add it to the current set of stdin/stdout drivers * \ingroup pico_stdio_uart * * This method sets up PICO_DEFAULT_UART_TX_PIN for UART output (if defined), PICO_DEFAULT_UART_RX_PIN for input (if defined) * and configures the baud rate as PICO_DEFAULT_UART_BAUD_RATE. * * \note this method is automatically called by \ref stdio_init_all() if `pico_stdio_uart` is included in the build */ void stdio_uart_init(void); /*! \brief Explicitly initialize stdout only (no stdin) over UART and add it to the current set of stdout drivers * \ingroup pico_stdio_uart * * This method sets up PICO_DEFAULT_UART_TX_PIN for UART output (if defined) , and configures the baud rate as PICO_DEFAULT_UART_BAUD_RATE */ void stdout_uart_init(void); /*! \brief Explicitly initialize stdin only (no stdout) over UART and add it to the current set of stdin drivers * \ingroup pico_stdio_uart * * This method sets up PICO_DEFAULT_UART_RX_PIN for UART input (if defined) , and configures the baud rate as PICO_DEFAULT_UART_BAUD_RATE */ void stdin_uart_init(void); /*! \brief Perform custom initialization initialize stdin/stdout over UART and add it to the current set of stdin/stdout drivers * \ingroup pico_stdio_uart * * \param uart the uart instance to use, \ref uart0 or \ref uart1 * \param baud_rate the baud rate in Hz * \param tx_pin the UART pin to use for stdout (or -1 for no stdout) * \param rx_pin the UART pin to use for stdin (or -1 for no stdin) */ void stdio_uart_init_full(uart_inst_t *uart, uint baud_rate, int tx_pin, int rx_pin); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/stdio/driver.h" #include "pico/stdio_uart.h" #include "pico/binary_info.h" #include "hardware/gpio.h" static uart_inst_t *uart_instance; #if PICO_STDIO_UART_SUPPORT_CHARS_AVAILABLE_CALLBACK static void (*chars_available_callback)(void*); static void *chars_available_param; #endif #if PICO_NO_BI_STDIO_UART #define stdio_bi_decl_if_func_used(x) #else #define stdio_bi_decl_if_func_used bi_decl_if_func_used #endif void stdio_uart_init() { #ifdef uart_default int tx_pin = -1; int rx_pin = -1; #ifdef PICO_DEFAULT_UART_TX_PIN tx_pin = PICO_DEFAULT_UART_TX_PIN; #ifdef PICO_DEFAULT_UART_RX_PIN rx_pin = PICO_DEFAULT_UART_RX_PIN; stdio_bi_decl_if_func_used(bi_program_feature("UART stdin / stdout")); bi_decl_if_func_used(bi_2pins_with_func(PICO_DEFAULT_UART_RX_PIN, PICO_DEFAULT_UART_TX_PIN, GPIO_FUNC_UART)); #else stdio_bi_decl_if_func_used(bi_program_feature("UART stdout")); bi_decl_if_func_used(bi_1pin_with_func(PICO_DEFAULT_UART_TX_PIN, GPIO_FUNC_UART)); #endif #elif defined(PICO_DEFAULT_UART_RX_PIN) rx_pin = PICO_DEFAULT_UART_RX_PIN; stdio_bi_decl_if_func_used(bi_program_feature("UART stdin")); bi_decl_if_func_used(bi_1pin_with_func(PICO_DEFAULT_UART_RX_PIN, GPIO_FUNC_UART)); #endif #if !defined(PICO_DEFAULT_UART_BAUD_RATE) panic("UART baud rate undefined"); #else stdio_uart_init_full(uart_default, PICO_DEFAULT_UART_BAUD_RATE, tx_pin, rx_pin); #endif #endif } void stdout_uart_init() { #if defined(uart_default) && defined(PICO_DEFAULT_UART_TX_PIN) bi_decl_if_func_used(bi_1pin_with_func(PICO_DEFAULT_UART_TX_PIN, GPIO_FUNC_UART)); #if !defined(PICO_DEFAULT_UART_BAUD_RATE) panic("UART baud rate undefined"); #else stdio_bi_decl_if_func_used(bi_program_feature("UART stdout")); stdio_uart_init_full(uart_default, PICO_DEFAULT_UART_BAUD_RATE, PICO_DEFAULT_UART_TX_PIN, -1); #endif #endif } void stdin_uart_init() { #if defined(uart_default) && defined(PICO_DEFAULT_UART_RX_PIN) bi_decl_if_func_used(bi_1pin_with_func(PICO_DEFAULT_UART_RX_PIN, GPIO_FUNC_UART)); #if !defined(PICO_DEFAULT_UART_BAUD_RATE) panic("UART baud rate undefined"); #else stdio_bi_decl_if_func_used(bi_program_feature("UART stdin")); stdio_uart_init_full(uart_default, PICO_DEFAULT_UART_BAUD_RATE, -1, PICO_DEFAULT_UART_RX_PIN); #endif #endif } void stdio_uart_init_full(struct uart_inst *uart, uint baud_rate, int tx_pin, int rx_pin) { uart_instance = uart; if (tx_pin >= 0) gpio_set_function((uint)tx_pin, GPIO_FUNC_UART); if (rx_pin >= 0) gpio_set_function((uint)rx_pin, GPIO_FUNC_UART); uart_init(uart_instance, baud_rate); stdio_set_driver_enabled(&stdio_uart, true); } static void stdio_uart_out_chars(const char *buf, int length) { for (int i = 0; i bInterfaceClass && RESET_INTERFACE_SUBCLASS == itf_desc->bInterfaceSubClass && RESET_INTERFACE_PROTOCOL == itf_desc->bInterfaceProtocol, 0); uint16_t const drv_len = sizeof(tusb_desc_interface_t); TU_VERIFY(max_len >= drv_len, 0); itf_num = itf_desc->bInterfaceNumber; return drv_len; } // Support for parameterized reset via vendor interface control request static bool resetd_control_xfer_cb(uint8_t __unused rhport, uint8_t stage, tusb_control_request_t const * request) { // nothing to do with DATA & ACK stage if (stage != CONTROL_STAGE_SETUP) return true; if (request->wIndex == itf_num) { #if PICO_STDIO_USB_RESET_INTERFACE_SUPPORT_RESET_TO_BOOTSEL if (request->bRequest == RESET_REQUEST_BOOTSEL) { #ifdef PICO_STDIO_USB_RESET_BOOTSEL_ACTIVITY_LED uint gpio_mask = 1u << PICO_STDIO_USB_RESET_BOOTSEL_ACTIVITY_LED; #else uint gpio_mask = 0u; #endif #if !PICO_STDIO_USB_RESET_BOOTSEL_FIXED_ACTIVITY_LED if (request->wValue & 0x100) { gpio_mask = 1u << (request->wValue >> 9u); } #endif reset_usb_boot(gpio_mask, (request->wValue & 0x7f) | PICO_STDIO_USB_RESET_BOOTSEL_INTERFACE_DISABLE_MASK); // does not return, otherwise we'd return true } #endif #if PICO_STDIO_USB_RESET_INTERFACE_SUPPORT_RESET_TO_FLASH_BOOT if (request->bRequest == RESET_REQUEST_FLASH) { watchdog_reboot(0, 0, PICO_STDIO_USB_RESET_RESET_TO_FLASH_DELAY_MS); return true; } #endif } return false; } static bool resetd_xfer_cb(uint8_t __unused rhport, uint8_t __unused ep_addr, xfer_result_t __unused result, uint32_t __unused xferred_bytes) { return true; } static usbd_class_driver_t const _resetd_driver = { #if CFG_TUSB_DEBUG >= 2 .name = "RESET", #endif .init = resetd_init, .reset = resetd_reset, .open = resetd_open, .control_xfer_cb = resetd_control_xfer_cb, .xfer_cb = resetd_xfer_cb, .sof = NULL }; // Implement callback to add our custom driver usbd_class_driver_t const *usbd_app_driver_get_cb(uint8_t *driver_count) { *driver_count = 1; return &_resetd_driver; } #endif #if PICO_STDIO_USB_ENABLE_RESET_VIA_BAUD_RATE // Support for default BOOTSEL reset by changing baud rate void tud_cdc_line_coding_cb(__unused uint8_t itf, cdc_line_coding_t const* p_line_coding) { if (p_line_coding->bit_rate == PICO_STDIO_USB_RESET_MAGIC_BAUD_RATE) { #ifdef PICO_STDIO_USB_RESET_BOOTSEL_ACTIVITY_LED const uint gpio_mask = 1u << PICO_STDIO_USB_RESET_BOOTSEL_ACTIVITY_LED; #else const uint gpio_mask = 0u; #endif reset_usb_boot(gpio_mask, PICO_STDIO_USB_RESET_BOOTSEL_INTERFACE_DISABLE_MASK); } } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio_usb/stdio_usb.c ================================================ /** * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef LIB_TINYUSB_HOST #include "tusb.h" #include "pico/stdio_usb.h" // these may not be set if the user is providing tud support (i.e. LIB_TINYUSB_DEVICE is 1 because // the user linked in tinyusb_device) but they haven't selected CDC #if (CFG_TUD_ENABLED | TUSB_OPT_DEVICE_ENABLED) && CFG_TUD_CDC #include "pico/binary_info.h" #include "pico/time.h" #include "pico/stdio/driver.h" #include "pico/mutex.h" #include "hardware/irq.h" #include "device/usbd_pvt.h" // for usbd_defer_func static mutex_t stdio_usb_mutex; #if PICO_STDIO_USB_SUPPORT_CHARS_AVAILABLE_CALLBACK static void (*chars_available_callback)(void*); static void *chars_available_param; #endif // when tinyusb_device is explicitly linked we do no background tud processing #if !LIB_TINYUSB_DEVICE // if this crit_sec is initialized, we are not in periodic timer mode, and must make sure // we don't either create multiple one shot timers, or miss creating one. this crit_sec // is used to protect the one_shot_timer_pending flag static critical_section_t one_shot_timer_crit_sec; static volatile bool one_shot_timer_pending; #ifdef PICO_STDIO_USB_LOW_PRIORITY_IRQ static_assert(PICO_STDIO_USB_LOW_PRIORITY_IRQ >= NUM_IRQS - NUM_USER_IRQS, ""); #define low_priority_irq_num PICO_STDIO_USB_LOW_PRIORITY_IRQ #else static uint8_t low_priority_irq_num; #endif static int64_t timer_task(__unused alarm_id_t id, __unused void *user_data) { int64_t repeat_time; if (critical_section_is_initialized(&one_shot_timer_crit_sec)) { critical_section_enter_blocking(&one_shot_timer_crit_sec); one_shot_timer_pending = false; critical_section_exit(&one_shot_timer_crit_sec); repeat_time = 0; // don't repeat } else { repeat_time = PICO_STDIO_USB_TASK_INTERVAL_US; } irq_set_pending(low_priority_irq_num); return repeat_time; } static void low_priority_worker_irq(void) { if (mutex_try_enter(&stdio_usb_mutex, NULL)) { tud_task(); mutex_exit(&stdio_usb_mutex); } else { // if the mutex is already owned, then we are in non IRQ code in this file. // // it would seem simplest to just let that code call tud_task() at the end, however this // code might run during the call to tud_task() and we might miss a necessary tud_task() call // // if we are using a periodic timer (crit_sec is not initialized in this case), // then we are happy just to wait until the next tick, however when we are not using a periodic timer, // we must kick off a one-shot timer to make sure the tud_task() DOES run (this method // will be called again as a result, and will try the mutex_try_enter again, and if that fails // create another one shot timer again, and so on). if (critical_section_is_initialized(&one_shot_timer_crit_sec)) { bool need_timer; critical_section_enter_blocking(&one_shot_timer_crit_sec); need_timer = !one_shot_timer_pending; one_shot_timer_pending = true; critical_section_exit(&one_shot_timer_crit_sec); if (need_timer) { add_alarm_in_us(PICO_STDIO_USB_TASK_INTERVAL_US, timer_task, NULL, true); } } } } static void usb_irq(void) { irq_set_pending(low_priority_irq_num); } #endif static void stdio_usb_out_chars(const char *buf, int length) { static uint64_t last_avail_time; if (!mutex_try_enter_block_until(&stdio_usb_mutex, make_timeout_time_ms(PICO_STDIO_DEADLOCK_TIMEOUT_MS))) { return; } if (stdio_usb_connected()) { for (int i = 0; i < length;) { int n = length - i; int avail = (int) tud_cdc_write_available(); if (n > avail) n = avail; if (n) { int n2 = (int) tud_cdc_write(buf + i, (uint32_t)n); tud_task(); tud_cdc_write_flush(); i += n2; last_avail_time = time_us_64(); } else { tud_task(); tud_cdc_write_flush(); if (!stdio_usb_connected() || (!tud_cdc_write_available() && time_us_64() > last_avail_time + PICO_STDIO_USB_STDOUT_TIMEOUT_US)) { break; } } } } else { // reset our timeout last_avail_time = 0; } mutex_exit(&stdio_usb_mutex); } int stdio_usb_in_chars(char *buf, int length) { // note we perform this check outside the lock, to try and prevent possible deadlock conditions // with printf in IRQs (which we will escape through timeouts elsewhere, but that would be less graceful). // // these are just checks of state, so we can call them while not holding the lock. // they may be wrong, but only if we are in the middle of a tud_task call, in which case at worst // we will mistakenly think we have data available when we do not (we will check again), or // tud_task will complete running and we will check the right values the next time. // int rc = PICO_ERROR_NO_DATA; if (stdio_usb_connected() && tud_cdc_available()) { if (!mutex_try_enter_block_until(&stdio_usb_mutex, make_timeout_time_ms(PICO_STDIO_DEADLOCK_TIMEOUT_MS))) { return PICO_ERROR_NO_DATA; // would deadlock otherwise } if (stdio_usb_connected() && tud_cdc_available()) { int count = (int) tud_cdc_read(buf, (uint32_t) length); rc = count ? count : PICO_ERROR_NO_DATA; } else { // because our mutex use may starve out the background task, run tud_task here (we own the mutex) tud_task(); } mutex_exit(&stdio_usb_mutex); } return rc; } #if PICO_STDIO_USB_SUPPORT_CHARS_AVAILABLE_CALLBACK void tud_cdc_rx_cb(__unused uint8_t itf) { if (chars_available_callback) { usbd_defer_func(chars_available_callback, chars_available_param, false); } } void stdio_usb_set_chars_available_callback(void (*fn)(void*), void *param) { chars_available_callback = fn; chars_available_param = param; } #endif stdio_driver_t stdio_usb = { .out_chars = stdio_usb_out_chars, .in_chars = stdio_usb_in_chars, #if PICO_STDIO_USB_SUPPORT_CHARS_AVAILABLE_CALLBACK .set_chars_available_callback = stdio_usb_set_chars_available_callback, #endif #if PICO_STDIO_ENABLE_CRLF_SUPPORT .crlf_enabled = PICO_STDIO_USB_DEFAULT_CRLF #endif }; bool stdio_usb_init(void) { if (get_core_num() != alarm_pool_core_num(alarm_pool_get_default())) { // included an assertion here rather than just returning false, as this is likely // a coding bug, rather than anything else. assert(false); return false; } #if !PICO_NO_BI_STDIO_USB bi_decl_if_func_used(bi_program_feature("USB stdin / stdout")); #endif #if !defined(LIB_TINYUSB_DEVICE) // initialize TinyUSB, as user hasn't explicitly linked it tusb_init(); #else assert(tud_inited()); // we expect the caller to have initialized if they are using TinyUSB #endif mutex_init(&stdio_usb_mutex); bool rc = true; #if !LIB_TINYUSB_DEVICE #ifdef PICO_STDIO_USB_LOW_PRIORITY_IRQ user_irq_claim(PICO_STDIO_USB_LOW_PRIORITY_IRQ); #else low_priority_irq_num = (uint8_t) user_irq_claim_unused(true); #endif irq_set_exclusive_handler(low_priority_irq_num, low_priority_worker_irq); irq_set_enabled(low_priority_irq_num, true); if (irq_has_shared_handler(USBCTRL_IRQ)) { // we can use a shared handler to notice when there may be work to do irq_add_shared_handler(USBCTRL_IRQ, usb_irq, PICO_SHARED_IRQ_HANDLER_LOWEST_ORDER_PRIORITY); critical_section_init_with_lock_num(&one_shot_timer_crit_sec, next_striped_spin_lock_num()); } else { rc = add_alarm_in_us(PICO_STDIO_USB_TASK_INTERVAL_US, timer_task, NULL, true) >= 0; // we use initialization state of the one_shot_timer_critsec as a flag memset(&one_shot_timer_crit_sec, 0, sizeof(one_shot_timer_crit_sec)); } #endif if (rc) { stdio_set_driver_enabled(&stdio_usb, true); #if PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS #if PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS > 0 absolute_time_t until = make_timeout_time_ms(PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS); #else absolute_time_t until = at_the_end_of_time; #endif do { if (stdio_usb_connected()) { #if PICO_STDIO_USB_POST_CONNECT_WAIT_DELAY_MS != 0 sleep_ms(PICO_STDIO_USB_POST_CONNECT_WAIT_DELAY_MS); #endif break; } sleep_ms(10); } while (!time_reached(until)); #endif } return rc; } bool stdio_usb_connected(void) { #if PICO_STDIO_USB_CONNECTION_WITHOUT_DTR return tud_ready(); #else // this actually checks DTR return tud_cdc_connected(); #endif } #else #warning stdio USB was configured along with user use of TinyUSB device mode, but CDC is not enabled bool stdio_usb_init(void) { return false; } #endif // CFG_TUD_ENABLED && CFG_TUD_CDC #else #warning stdio USB was configured, but is being disabled as TinyUSB host is explicitly linked bool stdio_usb_init(void) { return false; } #endif // !LIB_TINYUSB_HOST ================================================ FILE: pico-sdk/src/rp2_common/pico_stdio_usb/stdio_usb_descriptors.c ================================================ /* * This file is based on a file originally part of the * MicroPython project, http://micropython.org/ * * The MIT License (MIT) * * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * Copyright (c) 2019 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #if !defined(LIB_TINYUSB_HOST) && !defined(LIB_TINYUSB_DEVICE) #include "tusb.h" #include "pico/stdio_usb/reset_interface.h" #include "pico/unique_id.h" #ifndef USBD_VID #define USBD_VID (0x2E8A) // Raspberry Pi #endif #ifndef USBD_PID #define USBD_PID (0x000a) // Raspberry Pi Pico SDK CDC #endif #ifndef USBD_MANUFACTURER #define USBD_MANUFACTURER "Raspberry Pi" #endif #ifndef USBD_PRODUCT #define USBD_PRODUCT "Pico" #endif #define TUD_RPI_RESET_DESC_LEN 9 #if !PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE #define USBD_DESC_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN) #else #define USBD_DESC_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_RPI_RESET_DESC_LEN) #endif #if !PICO_STDIO_USB_DEVICE_SELF_POWERED #define USBD_CONFIGURATION_DESCRIPTOR_ATTRIBUTE (0) #define USBD_MAX_POWER_MA (250) #else #define USBD_CONFIGURATION_DESCRIPTOR_ATTRIBUTE TUSB_DESC_CONFIG_ATT_SELF_POWERED #define USBD_MAX_POWER_MA (1) #endif #define USBD_ITF_CDC (0) // needs 2 interfaces #if !PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE #define USBD_ITF_MAX (2) #else #define USBD_ITF_RPI_RESET (2) #define USBD_ITF_MAX (3) #endif #define USBD_CDC_EP_CMD (0x81) #define USBD_CDC_EP_OUT (0x02) #define USBD_CDC_EP_IN (0x82) #define USBD_CDC_CMD_MAX_SIZE (8) #define USBD_CDC_IN_OUT_MAX_SIZE (64) #define USBD_STR_0 (0x00) #define USBD_STR_MANUF (0x01) #define USBD_STR_PRODUCT (0x02) #define USBD_STR_SERIAL (0x03) #define USBD_STR_CDC (0x04) #define USBD_STR_RPI_RESET (0x05) // Note: descriptors returned from callbacks must exist long enough for transfer to complete static const tusb_desc_device_t usbd_desc_device = { .bLength = sizeof(tusb_desc_device_t), .bDescriptorType = TUSB_DESC_DEVICE, .bcdUSB = 0x0200, .bDeviceClass = TUSB_CLASS_MISC, .bDeviceSubClass = MISC_SUBCLASS_COMMON, .bDeviceProtocol = MISC_PROTOCOL_IAD, .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .idVendor = USBD_VID, .idProduct = USBD_PID, .bcdDevice = 0x0100, .iManufacturer = USBD_STR_MANUF, .iProduct = USBD_STR_PRODUCT, .iSerialNumber = USBD_STR_SERIAL, .bNumConfigurations = 1, }; #define TUD_RPI_RESET_DESCRIPTOR(_itfnum, _stridx) \ /* Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUSB_CLASS_VENDOR_SPECIFIC, RESET_INTERFACE_SUBCLASS, RESET_INTERFACE_PROTOCOL, _stridx, static const uint8_t usbd_desc_cfg[USBD_DESC_LEN] = { TUD_CONFIG_DESCRIPTOR(1, USBD_ITF_MAX, USBD_STR_0, USBD_DESC_LEN, USBD_CONFIGURATION_DESCRIPTOR_ATTRIBUTE, USBD_MAX_POWER_MA), TUD_CDC_DESCRIPTOR(USBD_ITF_CDC, USBD_STR_CDC, USBD_CDC_EP_CMD, USBD_CDC_CMD_MAX_SIZE, USBD_CDC_EP_OUT, USBD_CDC_EP_IN, USBD_CDC_IN_OUT_MAX_SIZE), #if PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE TUD_RPI_RESET_DESCRIPTOR(USBD_ITF_RPI_RESET, USBD_STR_RPI_RESET) #endif }; static char usbd_serial_str[PICO_UNIQUE_BOARD_ID_SIZE_BYTES * 2 + 1]; static const char *const usbd_desc_str[] = { [USBD_STR_MANUF] = USBD_MANUFACTURER, [USBD_STR_PRODUCT] = USBD_PRODUCT, [USBD_STR_SERIAL] = usbd_serial_str, [USBD_STR_CDC] = "Board CDC", #if PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE [USBD_STR_RPI_RESET] = "Reset", #endif }; const uint8_t *tud_descriptor_device_cb(void) { return (const uint8_t *)&usbd_desc_device; } const uint8_t *tud_descriptor_configuration_cb(__unused uint8_t index) { return usbd_desc_cfg; } const uint16_t *tud_descriptor_string_cb(uint8_t index, __unused uint16_t langid) { #ifndef USBD_DESC_STR_MAX #define USBD_DESC_STR_MAX (20) #elif USBD_DESC_STR_MAX > 127 #error USBD_DESC_STR_MAX too high (max is 127). #elif USBD_DESC_STR_MAX < 17 #error USBD_DESC_STR_MAX too low (min is 17). #endif static uint16_t desc_str[USBD_DESC_STR_MAX]; // Assign the SN using the unique flash id if (!usbd_serial_str[0]) { pico_get_unique_board_id_string(usbd_serial_str, sizeof(usbd_serial_str)); } uint8_t len; if (index == 0) { desc_str[1] = 0x0409; // supported language is English len = 1; } else { if (index >= sizeof(usbd_desc_str) / sizeof(usbd_desc_str[0])) { return NULL; } const char *str = usbd_desc_str[index]; for (len = 0; len < USBD_DESC_STR_MAX - 1 && str[len]; ++len) { desc_str[1 + len] = str[len]; } } // first byte is length (including header), second byte is string type desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * len + 2)); return desc_str; } #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_stdlib/CMakeLists.txt ================================================ # PICO_CMAKE_CONFIG: PICO_STDIO_UART, OPTION: Globally enable stdio UART, default=1, group=pico_stdlib option(PICO_STDIO_UART "Globally enable stdio UART" 1) # PICO_CMAKE_CONFIG: PICO_STDIO_USB, OPTION: Globally enable stdio USB, default=0, group=pico_stdlib option(PICO_STDIO_USB "Globally enable stdio USB" 0) # PICO_CMAKE_CONFIG: PICO_STDIO_SEMIHOSTING, OPTION: Globally enable stdio semihosting, default=0, group=pico_stdlib option(PICO_STDIO_SEMIHOSTING "Globally enable stdio semi-hosting" 0) if (NOT TARGET pico_stdlib) pico_add_impl_library(pico_stdlib) target_sources(pico_stdlib INTERFACE ${CMAKE_CURRENT_LIST_DIR}/stdlib.c ) pico_mirrored_target_link_libraries(pico_stdlib INTERFACE hardware_gpio hardware_uart hardware_divider pico_time pico_util pico_platform pico_runtime pico_stdio ) function(pico_enable_stdio_uart TARGET ENABLED) set_target_properties(${TARGET} PROPERTIES PICO_TARGET_STDIO_UART ${ENABLED}) endfunction() function(pico_enable_stdio_usb TARGET ENABLED) set_target_properties(${TARGET} PROPERTIES PICO_TARGET_STDIO_USB ${ENABLED}) endfunction() function(pico_enable_stdio_semihosting TARGET ENABLED) set_target_properties(${TARGET} PROPERTIES PICO_TARGET_STDIO_SEMIHOSTING ${ENABLED}) endfunction() if (TARGET pico_stdio_uart) target_link_libraries(pico_stdlib INTERFACE $,>,${PICO_STDIO_UART},$>>,pico_stdio_uart,>) target_link_libraries(pico_stdlib_headers INTERFACE $,>,${PICO_STDIO_UART},$>>,pico_stdio_uart_headers,>) endif() if (TARGET pico_stdio_usb) target_link_libraries(pico_stdlib INTERFACE $,>,${PICO_STDIO_USB},$>>,pico_stdio_usb,>) target_link_libraries(pico_stdlib_headers INTERFACE $,>,${PICO_STDIO_USB},$>>,pico_stdio_usb_headers,>) endif() if (TARGET pico_stdio_semihosting) target_link_libraries(pico_stdlib INTERFACE $,>,${PICO_STDIO_SEMIHOSTING},$>>,pico_stdio_semihosting,>) target_link_libraries(pico_stdlib_headers INTERFACE $,>,${PICO_STDIO_SEMIHOSTING},$>>,pico_stdio_semihosting_headers,>) endif() endif() ================================================ FILE: pico-sdk/src/rp2_common/pico_stdlib/stdlib.c ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/stdlib.h" #include "hardware/pll.h" #include "hardware/clocks.h" #if LIB_PICO_STDIO_UART #include "pico/stdio_uart.h" #else #include "pico/binary_info.h" #endif // everything running off the USB oscillator void set_sys_clock_48mhz() { if (!running_on_fpga()) { // Change clk_sys to be 48MHz. The simplest way is to take this from PLL_USB // which has a source frequency of 48MHz clock_configure(clk_sys, CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX, CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB, USB_CLK_KHZ * KHZ, USB_CLK_KHZ * KHZ); // Turn off PLL sys for good measure pll_deinit(pll_sys); // CLK peri is clocked from clk_sys so need to change clk_peri's freq clock_configure(clk_peri, 0, CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLK_SYS, USB_CLK_KHZ * KHZ, USB_CLK_KHZ * KHZ); } } // PICO_CONFIG: PICO_CLOCK_AJDUST_PERI_CLOCK_WITH_SYS_CLOCK, When the SYS clock PLL is changed keep the peripheral clock attached to it, type=bool, default=0, advanced=true, group=hardware_clocks #ifndef PICO_CLOCK_AJDUST_PERI_CLOCK_WITH_SYS_CLOCK // By default, when reconfiguring the system clock PLL settings after runtime initialization, // the peripheral clock is switched to the 48MHz USB clock to ensure continuity of peripheral operation. // Setting this value to 1 changes the behavior to have the peripheral clock re-configured // to the system clock at it's new frequency. #define PICO_CLOCK_AJDUST_PERI_CLOCK_WITH_SYS_CLOCK 0 #endif void set_sys_clock_pll(uint32_t vco_freq, uint post_div1, uint post_div2) { if (!running_on_fpga()) { clock_configure(clk_sys, CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX, CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB, USB_CLK_KHZ * KHZ, USB_CLK_KHZ * KHZ); pll_init(pll_sys, PLL_COMMON_REFDIV, vco_freq, post_div1, post_div2); uint32_t freq = vco_freq / (post_div1 * post_div2); // Configure clocks // CLK_REF is the XOSC source clock_configure(clk_ref, CLOCKS_CLK_REF_CTRL_SRC_VALUE_XOSC_CLKSRC, 0, // No aux mux XOSC_KHZ * KHZ, XOSC_KHZ * KHZ); // CLK SYS = PLL SYS (usually) 125MHz / 1 = 125MHz clock_configure(clk_sys, CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX, CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS, freq, freq); #if PICO_CLOCK_AJDUST_PERI_CLOCK_WITH_SYS_CLOCK clock_configure(clk_peri, 0, CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS, freq, freq); #else clock_configure(clk_peri, 0, // Only AUX mux on ADC CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB, USB_CLK_KHZ * KHZ, USB_CLK_KHZ * KHZ); #endif } } bool check_sys_clock_khz(uint32_t freq_khz, uint *vco_out, uint *postdiv1_out, uint *postdiv2_out) { uint reference_freq_khz = XOSC_KHZ / PLL_COMMON_REFDIV; for (uint fbdiv = 320; fbdiv >= 16; fbdiv--) { uint vco_khz = fbdiv * reference_freq_khz; if (vco_khz < PICO_PLL_VCO_MIN_FREQ_KHZ || vco_khz > PICO_PLL_VCO_MAX_FREQ_KHZ) continue; for (uint postdiv1 = 7; postdiv1 >= 1; postdiv1--) { for (uint postdiv2 = postdiv1; postdiv2 >= 1; postdiv2--) { uint out = vco_khz / (postdiv1 * postdiv2); if (out == freq_khz && !(vco_khz % (postdiv1 * postdiv2))) { *vco_out = vco_khz * KHZ; *postdiv1_out = postdiv1; *postdiv2_out = postdiv2; return true; } } } } return false; } void setup_default_uart() { #if LIB_PICO_STDIO_UART stdio_uart_init(); #elif defined(PICO_DEFAULT_UART_BAUD_RATE) && defined(PICO_DEFAULT_UART_TX_PIN) && defined(PICO_DEFAULT_UART_RX_PIN) // this is mostly for backwards compatibility - stdio_uart_init is a bit more nuanced, and usually likely to be present uart_init(uart_default, PICO_DEFAULT_UART_BAUD_RATE); if (PICO_DEFAULT_UART_TX_PIN >= 0) gpio_set_function(PICO_DEFAULT_UART_TX_PIN, GPIO_FUNC_UART); if (PICO_DEFAULT_UART_RX_PIN >= 0) gpio_set_function(PICO_DEFAULT_UART_RX_PIN, GPIO_FUNC_UART); bi_decl_if_func_used(bi_2pins_with_func(PICO_DEFAULT_UART_RX_PIN, PICO_DEFAULT_UART_TX_PIN, GPIO_FUNC_UART)); #endif } ================================================ FILE: pico-sdk/src/rp2_common/pico_unique_id/CMakeLists.txt ================================================ pico_add_library(pico_unique_id) target_sources(pico_unique_id INTERFACE ${CMAKE_CURRENT_LIST_DIR}/unique_id.c ) target_include_directories(pico_unique_id_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) pico_mirrored_target_link_libraries(pico_unique_id INTERFACE hardware_flash) ================================================ FILE: pico-sdk/src/rp2_common/pico_unique_id/include/pico/unique_id.h ================================================ /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PICO_UNIQUE_ID_H #define _PICO_UNIQUE_ID_H #include "pico.h" #ifdef __cplusplus extern "C" { #endif /** \file pico/unique_id.h * \defgroup pico_unique_id pico_unique_id * * Unique device ID access API * * RP2040 does not have an on-board unique identifier (all instances of RP2040 * silicon are identical and have no persistent state). However, RP2040 boots * from serial NOR flash devices which have a 64-bit unique ID as a standard * feature, and there is a 1:1 association between RP2040 and flash, so this * is suitable for use as a unique identifier for an RP2040-based board. * * This library injects a call to the flash_get_unique_id function from the * hardware_flash library, to run before main, and stores the result in a * static location which can safely be accessed at any time via * pico_get_unique_id(). * * This avoids some pitfalls of the hardware_flash API, which requires any * flash-resident interrupt routines to be disabled when called into. */ #define PICO_UNIQUE_BOARD_ID_SIZE_BYTES 8 /** * \brief Unique board identifier * \ingroup pico_unique_id * * This struct is suitable for holding the unique identifier of a NOR flash * device on an RP2040-based board. It contains an array of * PICO_UNIQUE_BOARD_ID_SIZE_BYTES identifier bytes. */ typedef struct { uint8_t id[PICO_UNIQUE_BOARD_ID_SIZE_BYTES]; } pico_unique_board_id_t; /*! \brief Get unique ID * \ingroup pico_unique_id * * Get the unique 64-bit device identifier which was retrieved from the * external NOR flash device at boot. * * On PICO_NO_FLASH builds the unique identifier is set to all 0xEE. * * \param id_out a pointer to a pico_unique_board_id_t struct, to which the identifier will be written */ void pico_get_unique_board_id(pico_unique_board_id_t *id_out); /*! \brief Get unique ID in string format * \ingroup pico_unique_id * * Get the unique 64-bit device identifier which was retrieved from the * external NOR flash device at boot, formatted as an ASCII hex string. * Will always 0-terminate. * * On PICO_NO_FLASH builds the unique identifier is set to all 0xEE. * * \param id_out a pointer to a char buffer of size len, to which the identifier will be written * \param len the size of id_out. For full serial, len >= 2 * PICO_UNIQUE_BOARD_ID_SIZE_BYTES + 1 */ void pico_get_unique_board_id_string(char *id_out, uint len); #ifdef __cplusplus } #endif #endif ================================================ FILE: pico-sdk/src/rp2_common/pico_unique_id/unique_id.c ================================================ /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "hardware/flash.h" #include "pico/unique_id.h" static_assert(PICO_UNIQUE_BOARD_ID_SIZE_BYTES == FLASH_UNIQUE_ID_SIZE_BYTES, "Board ID size must match flash ID size"); static pico_unique_board_id_t retrieved_id; static void __attribute__((constructor)) _retrieve_unique_id_on_boot(void) { #if PICO_NO_FLASH // The hardware_flash call will panic() if called directly on a NO_FLASH // build. Since this constructor is pre-main it would be annoying to // debug, so just produce something well-defined and obviously wrong. for (int i = 0; i < PICO_UNIQUE_BOARD_ID_SIZE_BYTES; i++) retrieved_id.id[i] = 0xee; #else flash_get_unique_id(retrieved_id.id); #endif } void pico_get_unique_board_id(pico_unique_board_id_t *id_out) { *id_out = retrieved_id; } void pico_get_unique_board_id_string(char *id_out, uint len) { assert(len > 0); size_t i; // Generate hex one nibble at a time for (i = 0; (i < len - 1) && (i < PICO_UNIQUE_BOARD_ID_SIZE_BYTES * 2); i++) { int nibble = (retrieved_id.id[i/2] >> (4 - 4 * (i&1))) & 0xf; id_out[i] = (char)(nibble < 10 ? nibble + '0' : nibble + 'A' - 10); } id_out[i] = 0; } ================================================ FILE: pico-sdk/src/rp2_common/tinyusb/CMakeLists.txt ================================================ if (DEFINED ENV{PICO_TINYUSB_PATH} AND (NOT PICO_TINYUSB_PATH)) set(PICO_TINYUSB_PATH $ENV{PICO_TINYUSB_PATH}) message("Using PICO_TINYUSB_PATH from environment ('${PICO_TINYUSB_PATH}')") endif () set(TINYUSB_TEST_PATH "src/portable/raspberrypi/rp2040") if (NOT PICO_TINYUSB_PATH) set(PICO_TINYUSB_PATH ${PROJECT_SOURCE_DIR}/lib/tinyusb) if (NOT EXISTS ${PICO_TINYUSB_PATH}/${TINYUSB_TEST_PATH}) message(WARNING "TinyUSB submodule has not been initialized; USB support will be unavailable hint: try 'git submodule update --init' from your SDK directory (${PICO_SDK_PATH}).") endif() elseif (NOT EXISTS ${PICO_TINYUSB_PATH}/${TINYUSB_TEST_PATH}) message(WARNING "PICO_TINYUSB_PATH specified but content not present.") endif() if (EXISTS ${PICO_TINYUSB_PATH}/${TINYUSB_TEST_PATH}) message("TinyUSB available at ${PICO_TINYUSB_PATH}/${TINYUSB_TEST_PATH}; enabling build support for USB.") pico_register_common_scope_var(PICO_TINYUSB_PATH) set(BOARD pico_sdk) set(FAMILY rp2040) include(${PICO_TINYUSB_PATH}/hw/bsp/family_support.cmake) add_library(tinyusb_common INTERFACE) target_link_libraries(tinyusb_common INTERFACE tinyusb_common_base) add_library(tinyusb_device_unmarked INTERFACE) target_link_libraries(tinyusb_device_unmarked INTERFACE tinyusb_device_base) target_compile_definitions(tinyusb_device_unmarked INTERFACE # off by default note TUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX defaults from PICO_RP2040_USB_DEVICE_ENUMERATION_FIX # TUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX=1 PICO_RP2040_USB_DEVICE_UFRAME_FIX=1 ) # unmarked version used by stdio USB target_link_libraries(tinyusb_device_unmarked INTERFACE tinyusb_common pico_fix_rp2040_usb_device_enumeration tinyusb_device_base) pico_add_library(tinyusb_device) target_link_libraries(tinyusb_device INTERFACE tinyusb_device_unmarked) pico_add_library(tinyusb_host) target_link_libraries(tinyusb_host INTERFACE tinyusb_host_base tinyusb_common) pico_add_library(tinyusb_board) target_link_libraries(tinyusb_board INTERFACE tinyusb_bsp) # Override suppress_tinyusb_warnings to add suppression of (falsely) reported GCC 11.2 warnings function(suppress_tinyusb_warnings) _suppress_tinyusb_warnings() if (PICO_C_COMPILER_IS_GNU) set_source_files_properties( ${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/rp2040_usb.c PROPERTIES COMPILE_FLAGS "-Wno-stringop-overflow -Wno-array-bounds") endif() endfunction() pico_promote_common_scope_vars() endif() ================================================ FILE: pico-sdk/src/rp2_common/tinyusb/doc.h ================================================ /** * \defgroup tinyusb_device tinyusb_device * TinyUSB Device-mode support for the RP2040. The TinyUSB documentation site can be found here. * * \defgroup tinyusb_host tinyusb_host * TinyUSB Host-mode support for the RP2040. */ ================================================ FILE: pico-sdk/src/rp2_common.cmake ================================================ # include targets for all for PICO on device enable_language(ASM) function(pico_add_hex_output TARGET) add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Oihex $ $>,$,$>.hex VERBATIM) endfunction() function(pico_add_bin_output TARGET) add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Obinary $ $>,$,$>.bin VERBATIM) endfunction() function(pico_add_dis_output TARGET) add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJDUMP} -h $ > $>,$,$>.dis COMMAND ${CMAKE_OBJDUMP} -d $ >> $>,$,$>.dis VERBATIM) endfunction() function(pico_add_extra_outputs TARGET) pico_add_hex_output(${TARGET}) pico_add_bin_output(${TARGET}) pico_add_dis_output(${TARGET}) # PICO_CMAKE_CONFIG: PICO_NO_TARGET_NAME, Don't define PICO_TARGET_NAME, type=bool, default=0, group=build # PICO_BUILD_DEFINE: PICO_TARGET_NAME, The name of the build target being compiled (unless PICO_NO_TARGET_NAME set in build), type=string, default=target name, group=build if (NOT PICO_NO_TARGET_NAME) target_compile_definitions(${TARGET} PRIVATE PICO_TARGET_NAME="${TARGET}" ) endif() if (PICO_SYMLINK_ELF_AS_FILENAME) add_custom_target(${TARGET}_symlinked) add_dependencies(${TARGET}_symlinked ${TARGET}) add_custom_command(TARGET ${TARGET}_symlinked POST_BUILD COMMAND rm -f "${PICO_SYMLINK_ELF_AS_FILENAME}" COMMAND ln -s -r $ "${PICO_SYMLINK_ELF_AS_FILENAME}" COMMENT "Symlinking from ${PICO_SYMLINK_ELF_AS_FILENAME} to ${TARGET}" ) endif () # PICO_CMAKE_CONFIG: PICO_NO_UF2, Disable UF2 output, type=bool, default=0, group=build if (NOT PICO_NO_UF2) pico_add_uf2_output(${TARGET}) endif() endfunction() add_subdirectory(common) add_subdirectory(rp2_common) # PICO_CMAKE_CONFIG: PICO_NO_HARDWARE, OPTION: Whether the build is not targeting an RP2040 device, type=bool, default=1 when PICO_PLATFORM is host, 0 otherwise, group=build # PICO_BUILD_DEFINE: PICO_NO_HARDWARE, Whether the build is not targeting an RP2040 device, type=bool, default=1 when PICO_PLATFORM is host, 0 otherwise, group=build set(PICO_NO_HARDWARE "0" CACHE INTERNAL "") # PICO_CMAKE_CONFIG: PICO_ON_DEVICE, OPTION: Whether the build is targeting an RP2040 device, type=bool, default=0 when PICO_PLATFORM is host, 1 otherwise, group=build # PICO_BUILD_DEFINE: PICO_ON_DEVICE, Whether the build is targeting an RP2040 device, type=bool, default=0 when PICO_PLATFORM is host, 1 otherwise, group=build set(PICO_ON_DEVICE "1" CACHE INTERNAL "") set(CMAKE_EXECUTABLE_SUFFIX .elf PARENT_SCOPE) ================================================ FILE: pico-sdk/tools/CMakeLists.txt ================================================ function(_pico_init_pioasm) if (NOT Pioasm_FOUND) # Assemble the version string from components instead of using PICO_SDK_VERSION_STRING, because the version string # potentially has a PRE_RELEASE_ID suffix, which will trip up the find_package call. find_package(pico-sdk-tools "${PICO_SDK_VERSION_MAJOR}.${PICO_SDK_VERSION_MINOR}.${PICO_SDK_VERSION_REVISION}" QUIET CONFIG CMAKE_FIND_ROOT_PATH_BOTH) if (NOT Pioasm_FOUND) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PICO_SDK_PATH}/tools) # todo CMAKE_CURRENT_FUNCTION_LIST_DIR ... what version? find_package(Pioasm REQUIRED) endif() endif() endfunction() # PICO_CMAKE_CONFIG: PICO_DEFAULT_PIOASM_OUTPUT_FORMAT, default output format used by pioasm when using pico_generate_pio_header, default=c-sdk, group=build function(pico_generate_pio_header TARGET PIO) _pico_init_pioasm() cmake_parse_arguments(pico_generate_pio_header "" "OUTPUT_FORMAT;OUTPUT_DIR" "" ${ARGN} ) if (pico_generate_pio_header_OUTPUT_FORMAT) set(OUTPUT_FORMAT "${pico_generate_pio_header_OUTPUT_FORMAT}") elseif(DEFINED PICO_DEFAULT_PIOASM_OUTPUT_FORMAT) set(OUTPUT_FORMAT "${PICO_DEFAULT_PIOASM_OUTPUT_FORMAT}") else() set(OUTPUT_FORMAT "c-sdk") endif() if (pico_generate_pio_header_OUTPUT_DIR) get_filename_component(HEADER_DIR ${pico_generate_pio_header_OUTPUT_DIR} ABSOLUTE) else() set(HEADER_DIR "${CMAKE_CURRENT_BINARY_DIR}") endif() get_filename_component(PIO_NAME ${PIO} NAME) set(HEADER "${HEADER_DIR}/${PIO_NAME}.h") #message("Will generate ${HEADER}") get_filename_component(HEADER_GEN_TARGET ${PIO} NAME_WE) set(HEADER_GEN_TARGET "${TARGET}_${HEADER_GEN_TARGET}_pio_h") add_custom_target(${HEADER_GEN_TARGET} DEPENDS ${HEADER}) add_custom_command(OUTPUT ${HEADER} DEPENDS ${PIO} COMMAND Pioasm -o ${OUTPUT_FORMAT} ${PIO} ${HEADER} VERBATIM) add_dependencies(${TARGET} ${HEADER_GEN_TARGET}) get_target_property(target_type ${TARGET} TYPE) if ("INTERFACE_LIBRARY" STREQUAL "${target_type}") target_include_directories(${TARGET} INTERFACE ${HEADER_DIR}) else() target_include_directories(${TARGET} PUBLIC ${HEADER_DIR}) endif() endfunction() function(pico_add_uf2_output TARGET) get_target_property(${TARGET}_archive_directory ${TARGET} ARCHIVE_OUTPUT_DIRECTORY) if (${TARGET}_archive_directory) get_filename_component(output_path "${${TARGET}_archive_directory}" REALPATH BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") file(MAKE_DIRECTORY "${output_path}") set(output_path "${output_path}/") else() set(output_path "") endif() if (NOT ELF2UF2_FOUND) find_package(pico-sdk-tools "${PICO_SDK_VERSION_MAJOR}.${PICO_SDK_VERSION_MINOR}.${PICO_SDK_VERSION_REVISION}" QUIET CONFIG CMAKE_FIND_ROOT_PATH_BOTH) if (NOT ELF2UF2_FOUND) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PICO_SDK_PATH}/tools) find_package(ELF2UF2) endif() endif() if (ELF2UF2_FOUND) add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ELF2UF2 $ ${output_path}$>,$,$>.uf2 VERBATIM) endif() endfunction() ================================================ FILE: pico-sdk/tools/FindELF2UF2.cmake ================================================ # Finds (or builds) the ELF2UF2 executable # # This will define the following variables # # ELF2UF2_FOUND # # and the following imported targets # # ELF2UF2 # if (NOT ELF2UF2_FOUND) # todo we would like to use pckgconfig to look for it first # see https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/ include(ExternalProject) set(ELF2UF2_SOURCE_DIR ${PICO_SDK_PATH}/tools/elf2uf2) set(ELF2UF2_BINARY_DIR ${CMAKE_BINARY_DIR}/elf2uf2) set(ELF2UF2_BUILD_TARGET ELF2UF2Build) set(ELF2UF2_TARGET ELF2UF2) if (NOT TARGET ${ELF2UF2_BUILD_TARGET}) pico_message_debug("ELF2UF2 will need to be built") ExternalProject_Add(${ELF2UF2_BUILD_TARGET} PREFIX elf2uf2 SOURCE_DIR ${ELF2UF2_SOURCE_DIR} BINARY_DIR ${ELF2UF2_BINARY_DIR} CMAKE_ARGS "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}" BUILD_ALWAYS 1 # force dependency checking INSTALL_COMMAND "" ) endif() set(ELF2UF2_EXECUTABLE ${ELF2UF2_BINARY_DIR}/elf2uf2) if(NOT TARGET ${ELF2UF2_TARGET}) add_executable(${ELF2UF2_TARGET} IMPORTED) endif() set_property(TARGET ${ELF2UF2_TARGET} PROPERTY IMPORTED_LOCATION ${ELF2UF2_EXECUTABLE}) add_dependencies(${ELF2UF2_TARGET} ${ELF2UF2_BUILD_TARGET}) set(ELF2UF2_FOUND 1) endif() ================================================ FILE: pico-sdk/tools/FindPioasm.cmake ================================================ # Finds (or builds) the Pioasm executable # # This will define the following variables # # Pioasm_FOUND # # and the following imported targets # # Pioasm # if (NOT Pioasm_FOUND) # todo we would like to use pckgconfig to look for it first # see https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/ include(ExternalProject) set(PIOASM_SOURCE_DIR ${PICO_SDK_PATH}/tools/pioasm) set(PIOASM_BINARY_DIR ${CMAKE_BINARY_DIR}/pioasm) set(PioasmBuild_TARGET PioasmBuild) set(Pioasm_TARGET Pioasm) if (NOT TARGET ${PioasmBuild_TARGET}) pico_message_debug("PIOASM will need to be built") # message("Adding external project ${PioasmBuild_Target} in ${CMAKE_CURRENT_LIST_DIR}}") ExternalProject_Add(${PioasmBuild_TARGET} PREFIX pioasm SOURCE_DIR ${PIOASM_SOURCE_DIR} BINARY_DIR ${PIOASM_BINARY_DIR} CMAKE_ARGS "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}" CMAKE_CACHE_ARGS "-DPIOASM_EXTRA_SOURCE_FILES:STRING=${PIOASM_EXTRA_SOURCE_FILES}" BUILD_ALWAYS 1 # force dependency checking INSTALL_COMMAND "" ) endif() if (CMAKE_HOST_WIN32) set(Pioasm_EXECUTABLE ${PIOASM_BINARY_DIR}/pioasm.exe) else() set(Pioasm_EXECUTABLE ${PIOASM_BINARY_DIR}/pioasm) endif() if(NOT TARGET ${Pioasm_TARGET}) # message("Adding executable ${Pioasm_Target} in ${CMAKE_CURRENT_LIST_DIR}") add_executable(${Pioasm_TARGET} IMPORTED) endif() set_property(TARGET ${Pioasm_TARGET} PROPERTY IMPORTED_LOCATION ${Pioasm_EXECUTABLE}) # message("EXE is ${Pioasm_EXECUTABLE}") add_dependencies(${Pioasm_TARGET} ${PioasmBuild_TARGET}) set(Pioasm_FOUND 1) endif() ================================================ FILE: pico-sdk/tools/elf2uf2/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.12) project(elf2uf2) set(CMAKE_CXX_STANDARD 14) add_subdirectory(../../src/common/boot_uf2 boot_uf2_headers) add_executable(elf2uf2 main.cpp) if (WIN32 AND NOT MINGW AND (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) target_compile_definitions(elf2uf2 PRIVATE _CRT_SECURE_NO_WARNINGS) endif() target_link_libraries(elf2uf2 boot_uf2_headers) ================================================ FILE: pico-sdk/tools/elf2uf2/elf.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _ELF_H #define _ELF_H #include #define ELF_MAGIC 0x464c457fu #define EM_ARM 0x28u #define EF_ARM_ABI_FLOAT_HARD 0x00000400u #define PT_LOAD 0x00000001u #pragma pack(push, 1) struct elf_header { uint32_t magic; uint8_t arch_class; uint8_t endianness; uint8_t version; uint8_t abi; uint8_t abi_version; uint8_t _pad[7]; uint16_t type; uint16_t machine; uint32_t version2; }; struct elf32_header { struct elf_header common; uint32_t entry; uint32_t ph_offset; uint32_t sh_offset; uint32_t flags; uint16_t eh_size; uint16_t ph_entry_size; uint16_t ph_num; uint16_t sh_entry_size; uint16_t sh_num; uint16_t sh_str_index; }; struct elf32_ph_entry { uint32_t type; uint32_t offset; uint32_t vaddr; uint32_t paddr; uint32_t filez; uint32_t memsz; uint32_t flags; uint32_t align; }; #pragma pack(pop) #endif ================================================ FILE: pico-sdk/tools/elf2uf2/main.cpp ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include #include #include #include "boot/uf2.h" #include "elf.h" typedef unsigned int uint; #define ERROR_ARGS -1 #define ERROR_FORMAT -2 #define ERROR_INCOMPATIBLE -3 #define ERROR_READ_FAILED -4 #define ERROR_WRITE_FAILED -5 #define FLASH_SECTOR_ERASE_SIZE 4096u static char error_msg[512]; static bool verbose; static int fail(int code, const char *format, ...) { va_list args; va_start(args, format); vsnprintf(error_msg, sizeof(error_msg), format, args); va_end(args); return code; } static int fail_read_error() { return fail(ERROR_READ_FAILED, "Failed to read input file"); } static int fail_write_error() { return fail(ERROR_WRITE_FAILED, "Failed to write output file"); } // we require 256 (as this is the page size supported by the device) #define LOG2_PAGE_SIZE 8u #define PAGE_SIZE (1u << LOG2_PAGE_SIZE) struct address_range { enum type { CONTENTS, // may have contents NO_CONTENTS, // must be uninitialized IGNORE // will be ignored }; address_range(uint32_t from, uint32_t to, type type) : from(from), to(to), type(type) {} address_range() : address_range(0, 0, IGNORE) {} type type; uint32_t to; uint32_t from; }; typedef std::vector address_ranges; #define MAIN_RAM_START 0x20000000u // same as SRAM_BASE in addressmap.h #define MAIN_RAM_END 0x20042000u // same as SRAM_END in addressmap.h #define FLASH_START 0x10000000u // same as XIP_MAIN_BASE in addressmap.h #define FLASH_END 0x15000000u #define XIP_SRAM_START 0x15000000u // same as XIP_SRAM_BASE in addressmap.h #define XIP_SRAM_END 0x15004000u // same as XIP_SRAM_END in addressmap.h #define MAIN_RAM_BANKED_START 0x21000000u // same as SRAM0_BASE in addressmap.h #define MAIN_RAM_BANKED_END 0x21040000u #define ROM_START 0x00000000u // same as ROM_BASE in addressmap.h #define ROM_END 0x00004000u const address_ranges rp2040_address_ranges_flash { address_range(FLASH_START, FLASH_END, address_range::type::CONTENTS), address_range(MAIN_RAM_START, MAIN_RAM_END, address_range::type::NO_CONTENTS), address_range(MAIN_RAM_BANKED_START, MAIN_RAM_BANKED_END, address_range::type::NO_CONTENTS) }; const address_ranges rp2040_address_ranges_ram { address_range(MAIN_RAM_START, MAIN_RAM_END, address_range::type::CONTENTS), address_range(XIP_SRAM_START, XIP_SRAM_END, address_range::type::CONTENTS), address_range(ROM_START, ROM_END, address_range::type::IGNORE) // for now we ignore the bootrom if present }; struct page_fragment { page_fragment(uint32_t file_offset, uint32_t page_offset, uint32_t bytes) : file_offset(file_offset), page_offset(page_offset), bytes(bytes) {} uint32_t file_offset; uint32_t page_offset; uint32_t bytes; }; static int usage() { fprintf(stderr, "Usage: elf2uf2 (-v) \n"); return ERROR_ARGS; } static int read_and_check_elf32_header(FILE *in, elf32_header& eh_out) { if (1 != fread(&eh_out, sizeof(eh_out), 1, in)) { return fail(ERROR_READ_FAILED, "Unable to read ELF header"); } if (eh_out.common.magic != ELF_MAGIC) { return fail(ERROR_FORMAT, "Not an ELF file"); } if (eh_out.common.version != 1 || eh_out.common.version2 != 1) { return fail(ERROR_FORMAT, "Unrecognized ELF version"); } if (eh_out.common.arch_class != 1 || eh_out.common.endianness != 1) { return fail(ERROR_INCOMPATIBLE, "Require 32 bit little-endian ELF"); } if (eh_out.eh_size != sizeof(struct elf32_header)) { return fail(ERROR_FORMAT, "Invalid ELF32 format"); } if (eh_out.common.machine != EM_ARM) { return fail(ERROR_FORMAT, "Not an ARM executable"); } if (eh_out.common.abi != 0) { return fail(ERROR_INCOMPATIBLE, "Unrecognized ABI"); } if (eh_out.flags & EF_ARM_ABI_FLOAT_HARD) { return fail(ERROR_INCOMPATIBLE, "HARD-FLOAT not supported"); } return 0; } int check_address_range(const address_ranges& valid_ranges, uint32_t addr, uint32_t vaddr, uint32_t size, bool uninitialized, address_range &ar) { for(const auto& range : valid_ranges) { if (range.from <= addr && range.to >= addr + size) { if (range.type == address_range::type::NO_CONTENTS && !uninitialized) { return fail(ERROR_INCOMPATIBLE, "ELF contains memory contents for uninitialized memory at %p", addr); } ar = range; if (verbose) { printf("%s segment %08x->%08x (%08x->%08x)\n", uninitialized ? "Uninitialized" : "Mapped", addr, addr + size, vaddr, vaddr+size); } return 0; } } return fail(ERROR_INCOMPATIBLE, "Memory segment %08x->%08x is outside of valid address range for device", addr, addr+size); } int read_elf32_ph_entries(FILE *in, const elf32_header &eh, std::vector& entries) { if (eh.ph_entry_size != sizeof(elf32_ph_entry)) { return fail(ERROR_FORMAT, "Invalid ELF32 program header"); } if (eh.ph_num) { entries.resize(eh.ph_num); if (fseek(in, eh.ph_offset, SEEK_SET)) { return fail_read_error(); } if (eh.ph_num != fread(&entries[0], sizeof(struct elf32_ph_entry), eh.ph_num, in)) { return fail_read_error(); } } return 0; } int check_elf32_ph_entries(const std::vector& entries, const address_ranges& valid_ranges, std::map>& pages) { for(const auto & entry : entries) { if (entry.type == PT_LOAD && entry.memsz) { address_range ar; int rc; uint mapped_size = std::min(entry.filez, entry.memsz); if (mapped_size) { rc = check_address_range(valid_ranges, entry.paddr, entry.vaddr, mapped_size, false, ar); if (rc) return rc; // we don't download uninitialized, generally it is BSS and should be zero-ed by crt0.S, or it may be COPY areas which are undefined if (ar.type != address_range::type::CONTENTS) { if (verbose) printf(" ignored\n"); continue; } uint addr = entry.paddr; uint remaining = mapped_size; uint file_offset = entry.offset; while (remaining) { uint off = addr & (PAGE_SIZE - 1); uint len = std::min(remaining, PAGE_SIZE - off); auto &fragments = pages[addr - off]; // list of fragments // note if filesz is zero, we want zero init which is handled because the // statement above creates an empty page fragment list // check overlap with any existing fragments for (const auto &fragment : fragments) { if ((off < fragment.page_offset + fragment.bytes) != ((off + len) <= fragment.page_offset)) { fail(ERROR_FORMAT, "In memory segments overlap"); } } fragments.push_back( page_fragment{file_offset,off,len}); addr += len; file_offset += len; remaining -= len; } } if (entry.memsz > entry.filez) { // we have some uninitialized data too rc = check_address_range(valid_ranges, entry.paddr + entry.filez, entry.vaddr + entry.filez, entry.memsz - entry.filez, true, ar); if (rc) return rc; } } } return 0; } int realize_page(FILE *in, const std::vector &fragments, uint8_t *buf, uint buf_len) { assert(buf_len >= PAGE_SIZE); for(auto& frag : fragments) { assert(frag.page_offset >= 0 && frag.page_offset < PAGE_SIZE && frag.page_offset + frag.bytes <= PAGE_SIZE); if (fseek(in, frag.file_offset, SEEK_SET)) { return fail_read_error(); } if (1 != fread(buf + frag.page_offset, frag.bytes, 1, in)) { return fail_read_error(); } } return 0; } static bool is_address_valid(const address_ranges& valid_ranges, uint32_t addr) { for(const auto& range : valid_ranges) { if (range.from <= addr && range.to > addr) { return true; } } return false; } static bool is_address_initialized(const address_ranges& valid_ranges, uint32_t addr) { for(const auto& range : valid_ranges) { if (range.from <= addr && range.to > addr) { return address_range::type::CONTENTS == range.type; } } return false; } static bool is_address_mapped(const std::map>& pages, uint32_t addr) { uint32_t page = addr & ~(PAGE_SIZE - 1); if (!pages.count(page)) return false; // todo check actual address within page return true; } static int determine_binary_type(const elf32_header &eh, const std::vector& entries, bool *ram_style) { for(const auto &entry : entries) { if (entry.type == PT_LOAD && entry.memsz) { uint mapped_size = std::min(entry.filez, entry.memsz); if (mapped_size) { // we back convert the entrypoint from a VADDR to a PADDR to see if it originates in flash, and if // so call THAT a flash binary. if (eh.entry >= entry.vaddr && eh.entry < entry.vaddr + mapped_size) { uint32_t effective_entry = eh.entry + entry.paddr - entry.vaddr; if (is_address_initialized(rp2040_address_ranges_ram, effective_entry)) { *ram_style = true; return 0; } else if (is_address_initialized(rp2040_address_ranges_flash, effective_entry)) { *ram_style = false; return 0; } } } } } return fail(ERROR_INCOMPATIBLE, "entry point is not in mapped part of file"); } int elf2uf2(FILE *in, FILE *out) { elf32_header eh; std::map> pages; int rc = read_and_check_elf32_header(in, eh); bool ram_style = false; address_ranges valid_ranges = {}; if (!rc) { std::vector entries; rc = read_elf32_ph_entries(in, eh, entries); if (!rc) { rc = determine_binary_type(eh, entries, &ram_style); } if (!rc) { if (verbose) { if (ram_style) { printf("Detected RAM binary\n"); } else { printf("Detected FLASH binary\n"); } } valid_ranges = ram_style ? rp2040_address_ranges_ram : rp2040_address_ranges_flash; rc = check_elf32_ph_entries(entries, valid_ranges, pages); } } if (rc) return rc; if (pages.empty()) { return fail(ERROR_INCOMPATIBLE, "The input file has no memory pages"); } uint page_num = 0; if (ram_style) { uint32_t expected_ep_main_ram = UINT32_MAX; uint32_t expected_ep_xip_sram = UINT32_MAX; for(auto& page_entry : pages) { if ( ((page_entry.first >= MAIN_RAM_START) && (page_entry.first < MAIN_RAM_END)) && (page_entry.first < expected_ep_main_ram) ) { expected_ep_main_ram = page_entry.first | 0x1; } else if ( ((page_entry.first >= XIP_SRAM_START) && (page_entry.first < XIP_SRAM_END)) && (page_entry.first < expected_ep_xip_sram) ) { expected_ep_xip_sram = page_entry.first | 0x1; } } uint32_t expected_ep = (UINT32_MAX != expected_ep_main_ram) ? expected_ep_main_ram : expected_ep_xip_sram; if (eh.entry == expected_ep_xip_sram) { return fail(ERROR_INCOMPATIBLE, "B0/B1 Boot ROM does not support direct entry into XIP_SRAM\n"); } else if (eh.entry != expected_ep) { return fail(ERROR_INCOMPATIBLE, "A RAM binary should have an entry point at the beginning: %08x (not %08x)\n", expected_ep, eh.entry); } static_assert(0 == (MAIN_RAM_START & (PAGE_SIZE - 1)), ""); // currently don't require this as entry point is now at the start, we don't know where reset vector is #if 0 uint8_t buf[PAGE_SIZE]; rc = realize_page(in, pages[MAIN_RAM_START], buf, sizeof(buf)); if (rc) return rc; uint32_t sp = ((uint32_t *)buf)[0]; uint32_t ip = ((uint32_t *)buf)[1]; if (!is_address_mapped(pages, ip)) { return fail(ERROR_INCOMPATIBLE, "Vector table at %08x is invalid: reset vector %08x is not in mapped memory", MAIN_RAM_START, ip); } if (!is_address_valid(valid_ranges, sp - 4)) { return fail(ERROR_INCOMPATIBLE, "Vector table at %08x is invalid: stack pointer %08x is not in RAM", MAIN_RAM_START, sp); } #endif } else { // Fill in empty dummy uf2 pages to align the binary to flash sectors (except for the last sector which we don't // need to pad, and choose not to to avoid making all SDK UF2s bigger) // That workaround is required because the bootrom uses the block number for erase sector calculations: // https://github.com/raspberrypi/pico-bootrom/blob/c09c7f08550e8a36fc38dc74f8873b9576de99eb/bootrom/virtual_disk.c#L205 std::set touched_sectors; for (auto& page_entry : pages) { uint32_t sector = page_entry.first / FLASH_SECTOR_ERASE_SIZE; touched_sectors.insert(sector); } uint32_t last_page = pages.rbegin()->first; for (uint32_t sector : touched_sectors) { for (uint32_t page = sector * FLASH_SECTOR_ERASE_SIZE; page < (sector + 1) * FLASH_SECTOR_ERASE_SIZE; page += PAGE_SIZE) { if (page < last_page) { // Create a dummy page, if it does not exist yet. note that all present pages are first // zeroed before they are filled with any contents, so a dummy page will be all zeros. auto &dummy = pages[page]; } } } } uf2_block block; block.magic_start0 = UF2_MAGIC_START0; block.magic_start1 = UF2_MAGIC_START1; block.flags = UF2_FLAG_FAMILY_ID_PRESENT; block.payload_size = PAGE_SIZE; block.num_blocks = (uint32_t)pages.size(); block.file_size = RP2040_FAMILY_ID; block.magic_end = UF2_MAGIC_END; for(auto& page_entry : pages) { block.target_addr = page_entry.first; block.block_no = page_num++; if (verbose) { printf("Page %d / %d %08x%s\n", block.block_no, block.num_blocks, block.target_addr, page_entry.second.empty() ? " (padding)": ""); } memset(block.data, 0, sizeof(block.data)); rc = realize_page(in, page_entry.second, block.data, sizeof(block.data)); if (rc) return rc; if (1 != fwrite(&block, sizeof(uf2_block), 1, out)) { return fail_write_error(); } } return 0; } int main(int argc, char **argv) { int arg = 1; if (arg < argc && !strcmp(argv[arg], "-v")) { verbose = true; arg++; } if (argc < arg + 2) { return usage(); } const char *in_filename = argv[arg++]; FILE *in = fopen(in_filename, "rb"); if (!in) { fprintf(stderr, "Can't open input file '%s'\n", in_filename); return ERROR_ARGS; } const char *out_filename = argv[arg++]; FILE *out = fopen(out_filename, "wb"); if (!out) { fprintf(stderr, "Can't open output file '%s'\n", out_filename); return ERROR_ARGS; } int rc = elf2uf2(in, out); fclose(in); fclose(out); if (rc) { remove(out_filename); if (error_msg[0]) { fprintf(stderr, "ERROR: %s\n", error_msg); } } return rc; } ================================================ FILE: pico-sdk/tools/pioasm/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.6...3.27) project(pioasm CXX) set(CMAKE_CXX_STANDARD 11) if (PIOASM_GENERATE_PARSER) find_package(BISON 3.4.2) find_package(FLEX 2.5.13) # no idea about the version FLEX_TARGET(pioasm_lexer lexer.ll ${CMAKE_CURRENT_SOURCE_DIR}/gen/lexer.cpp) BISON_TARGET(pioasm_parser parser.yy ${CMAKE_CURRENT_SOURCE_DIR}/gen/parser.cpp COMPILE_FLAGS "-Wcounterexamples") ADD_FLEX_BISON_DEPENDENCY(pioasm_lexer pioasm_parser) endif() add_executable(pioasm main.cpp pio_assembler.cpp pio_disassembler.cpp gen/lexer.cpp gen/parser.cpp ) target_sources(pioasm PRIVATE c_sdk_output.cpp) target_sources(pioasm PRIVATE python_output.cpp) target_sources(pioasm PRIVATE hex_output.cpp) target_sources(pioasm PRIVATE ada_output.cpp) target_sources(pioasm PRIVATE ${PIOASM_EXTRA_SOURCE_FILES}) if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "7") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9") AND (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm.*$")) # disable GCC ARM info notice about ABI change target_compile_options(pioasm PRIVATE -Wno-psabi) endif() target_include_directories(pioasm PRIVATE ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/gen) if (MSVC OR (WIN32 AND NOT MINGW AND (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))) target_compile_definitions(pioasm PRIVATE YY_NO_UNISTD_H) endif() if (MSVC) target_compile_options(pioasm PRIVATE "/std:c++latest") endif() ================================================ FILE: pico-sdk/tools/pioasm/ada_output.cpp ================================================ /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause * * Ada specifications generated by this assembler depend on the RP.PIO package, * available in rp2040_hal. * * https://github.com/JeremyGrosser/rp2040_hal * https://github.com/JeremyGrosser/pico_bsp * https://github.com/JeremyGrosser/pico_examples */ #include #include #include "output_format.h" #include "pio_disassembler.h" struct ada_output : public output_format { struct factory { factory() { output_format::add(new ada_output()); } }; ada_output() : output_format("ada") {} std::string get_description() override { return "Ada specification"; } void output_symbols(FILE *out, const std::vector &symbols) { int count = 0; for (const auto &s : symbols) { if (!s.is_label) { fprintf(out, "%s : constant := %d;\n", s.name.c_str(), s.value); count++; } } if (count) { fprintf(out, "\n"); count = 0; } for (const auto &s : symbols) { if (s.is_label) { fprintf(out, " Offset_%s : constant := %d;\n", s.name.c_str(), s.value); count++; } } if (count) { fprintf(out, "\n"); } } void ada_case(std::string &identifier) { for(std::string::size_type i = 0; i < identifier.size(); ++i) { if ((i == 0) || (identifier[i - 1] == '_')) { identifier[i] = toupper(identifier[i]); } } } void header(FILE *out, const std::string msg, const int indent) { const std::string dashes = std::string(msg.length() + 6, '-'); const std::string indent_str= std::string(indent, ' '); fprintf(out, "%s%s\n", indent_str.c_str(), dashes.c_str()); fprintf(out, "%s-- %s --\n", indent_str.c_str(), msg.c_str()); fprintf(out, "%s%s\n", indent_str.c_str(), dashes.c_str()); fprintf(out, "\n"); } int output(std::string destination, std::vector output_options, const compiled_source &source) override { for (const auto &program : source.programs) { for(const auto &p : program.lang_opts) { if (p.first.size() >= name.size() && p.first.compare(0, name.size(), name) == 0) { std::cerr << "warning: " << name << " does not support output options; " << p.first << " lang_opt ignored.\n"; } } } std::string package_name; switch (output_options.size()) { case 0: std::cerr << "error: missing package name options for Ada format" << std::endl; return 1; case 1: package_name = output_options[0]; // Package name from command options break; default: std::cerr << "error: too many options for Ada format" << std::endl; return 1; } FILE *out = open_single_output(destination); if (!out) return 1; header(out, "This file is autogenerated by pioasm; do not edit!", 0); fprintf(out, "pragma Style_Checks (Off);\n\n"); fprintf(out, "with RP.PIO;\n\n"); fprintf(out, "package %s is\n", package_name.c_str()); for (const auto &program : source.programs) { std::string trailing_comma = ", "; std::string prog_name= program.name; ada_case(prog_name); fprintf(out, "\n"); header(out, prog_name, 3); output_symbols(out, source.global_symbols); fprintf(out, " %s_Wrap_Target : constant := %d;\n", prog_name.c_str(), program.wrap_target); fprintf(out, " %s_Wrap : constant := %d;\n", prog_name.c_str(), program.wrap); fprintf(out, "\n"); output_symbols(out, program.symbols); fprintf(out, " %s_Program_Instructions : RP.PIO.Program := (\n", prog_name.c_str()); for (int i = 0; i < (int)program.instructions.size(); i++) { const auto &inst = program.instructions[i]; if (i == program.wrap_target) { fprintf(out, " -- .wrap_target\n"); } if (i == (int)program.instructions.size() - 1) { trailing_comma = ");"; } fprintf(out, " 16#%04x#%s -- %2d: %s\n", inst, trailing_comma.c_str(), i, disassemble(inst, program.sideset_bits_including_opt.get(), program.sideset_opt).c_str()); if (i == program.wrap) { fprintf(out, " -- .wrap\n"); } } } fprintf(out, "\n"); fprintf(out, "end %s;\n", package_name.c_str()); fclose(out); return 0; } }; static ada_output::factory creator; ================================================ FILE: pico-sdk/tools/pioasm/c_sdk_output.cpp ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include "output_format.h" #include "pio_disassembler.h" struct c_sdk_output : public output_format { struct factory { factory() { output_format::add(new c_sdk_output()); } }; c_sdk_output() : output_format("c-sdk") {} std::string get_description() override { return "C header suitable for use with the Raspberry Pi Pico SDK"; } void output_symbols(FILE *out, std::string prefix, const std::vector &symbols) { int count = 0; for (const auto &s : symbols) { if (!s.is_label) { fprintf(out, "#define %s%s %d\n", prefix.c_str(), s.name.c_str(), s.value); count++; } } if (count) { fprintf(out, "\n"); count = 0; } for (const auto &s : symbols) { if (s.is_label) { fprintf(out, "#define %soffset_%s %du\n", prefix.c_str(), s.name.c_str(), s.value); count++; } } if (count) { fprintf(out, "\n"); } } void header(FILE *out, std::string msg) { std::string dashes = std::string(msg.length(), '-'); fprintf(out, "// %s //\n", dashes.c_str()); fprintf(out, "// %s //\n", msg.c_str()); fprintf(out, "// %s //\n", dashes.c_str()); fprintf(out, "\n"); } int output(std::string destination, std::vector output_options, const compiled_source &source) override { for (const auto &program : source.programs) { for(const auto &p : program.lang_opts) { if (p.first.size() >= name.size() && p.first.compare(0, name.size(), name) == 0) { std::cerr << "warning: " << name << " does not support output options; " << p.first << " lang_opt ignored.\n"; } } } FILE *out = open_single_output(destination); if (!out) return 1; header(out, "This file is autogenerated by pioasm; do not edit!"); fprintf(out, "#pragma once\n"); fprintf(out, "\n"); fprintf(out, "#if !PICO_NO_HARDWARE\n"); fprintf(out, "#include \"hardware/pio.h\"\n"); fprintf(out, "#endif\n"); fprintf(out, "\n"); output_symbols(out, "", source.global_symbols); for (const auto &program : source.programs) { header(out, program.name); std::string prefix = program.name + "_"; fprintf(out, "#define %swrap_target %d\n", prefix.c_str(), program.wrap_target); fprintf(out, "#define %swrap %d\n", prefix.c_str(), program.wrap); fprintf(out, "\n"); output_symbols(out, prefix, program.symbols); fprintf(out, "static const uint16_t %sprogram_instructions[] = {\n", prefix.c_str()); for (int i = 0; i < (int)program.instructions.size(); i++) { const auto &inst = program.instructions[i]; if (i == program.wrap_target) { fprintf(out, " // .wrap_target\n"); } fprintf(out, " 0x%04x, // %2d: %s\n", inst, i, disassemble(inst, program.sideset_bits_including_opt.get(), program.sideset_opt).c_str()); if (i == program.wrap) { fprintf(out, " // .wrap\n"); } } fprintf(out, "};\n"); fprintf(out, "\n"); fprintf(out, "#if !PICO_NO_HARDWARE\n"); fprintf(out, "static const struct pio_program %sprogram = {\n", prefix.c_str()); fprintf(out, " .instructions = %sprogram_instructions,\n", prefix.c_str()); fprintf(out, " .length = %d,\n", (int) program.instructions.size()); fprintf(out, " .origin = %d,\n", program.origin.get()); fprintf(out, "};\n"); fprintf(out, "\n"); fprintf(out, "static inline pio_sm_config %sprogram_get_default_config(uint offset) {\n", prefix.c_str()); fprintf(out, " pio_sm_config c = pio_get_default_sm_config();\n"); fprintf(out, " sm_config_set_wrap(&c, offset + %swrap_target, offset + %swrap);\n", prefix.c_str(), prefix.c_str()); if (program.sideset_bits_including_opt.is_specified()) { fprintf(out, " sm_config_set_sideset(&c, %d, %s, %s);\n", program.sideset_bits_including_opt.get(), program.sideset_opt ? "true" : "false", program.sideset_pindirs ? "true" : "false"); } fprintf(out, " return c;\n"); fprintf(out, "}\n"); // todo maybe have some code blocks inside or outside here? for(const auto& o : program.code_blocks) { fprintf(out, "\n"); if (o.first == name) { for(const auto &contents : o.second) { fprintf(out, "%s", contents.c_str()); fprintf(out, "\n"); } } } fprintf(out, "#endif\n"); fprintf(out, "\n"); } if (out != stdout) { fclose(out); } return 0; } }; static c_sdk_output::factory creator; ================================================ FILE: pico-sdk/tools/pioasm/gen/lexer.cpp ================================================ #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ /* %not-for-header */ /* %if-c-only */ /* %if-not-reentrant */ /* %endif */ /* %endif */ /* %ok-for-header */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* %if-c++-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* %if-c-only */ /* %endif */ /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* %if-c-only */ #include #include #include #include /* %endif */ /* %if-tables-serialization */ /* %endif */ /* end standard C headers. */ /* begin standard C++ headers. */ /* %if-c++-only */ /* %endif */ /* %if-c-or-c++ */ /* flex integer type definitions */ #ifndef YYFLEX_INTTYPES_DEFINED #define YYFLEX_INTTYPES_DEFINED /* Prefer C99 integer types if available. */ # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* Include and not because Solaris 2.6 has the former * and not the latter. */ #include # define YYFLEX_USE_STDINT # else # if defined(_MSC_VER) && _MSC_VER >= 1600 /* Visual C++ 2010 does not define __STDC_VERSION__ and has but not * . */ #include # define YYFLEX_USE_STDINT # endif # endif # ifdef YYFLEX_USE_STDINT typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; # else typedef unsigned char flex_uint8_t; typedef short int flex_int16_t; typedef unsigned short int flex_uint16_t; # ifdef __STDC__ typedef signed char flex_int8_t; /* ISO C only requires at least 16 bits for int. */ #include # if UINT_MAX >= 4294967295 # define YYFLEX_INT32_DEFINED typedef int flex_int32_t; typedef unsigned int flex_uint32_t; # endif # else typedef char flex_int8_t; # endif # ifndef YYFLEX_INT32_DEFINED typedef long int flex_int32_t; typedef unsigned long int flex_uint32_t; # endif # endif #endif /* YYFLEX_INTTYPES_DEFINED */ /* %endif */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* %not-for-header */ /* Returned upon end-of-file. */ #define YY_NULL 0 /* %ok-for-header */ /* %not-for-header */ /* Promotes a possibly negative, possibly signed char to an * integer in range [0..255] for use as an array index. */ #define YY_SC_TO_UI(c) ((YY_CHAR) (c)) /* %ok-for-header */ /* %if-reentrant */ /* %endif */ /* %if-not-reentrant */ /* %endif */ /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif /* %if-not-reentrant */ extern int yyleng; /* %endif */ /* %if-c-only */ /* %if-not-reentrant */ extern FILE *yyin, *yyout; /* %endif */ /* %endif */ #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { /* %if-c-only */ FILE *yy_input_file; /* %endif */ /* %if-c++-only */ /* %endif */ char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ /* %if-not-reentrant */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ /* %endif */ /* %ok-for-header */ /* %endif */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* %if-c-only Standard (non-C++) definition */ /* %if-not-reentrant */ /* %not-for-header */ /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = NULL; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; /* %ok-for-header */ /* %endif */ void yyrestart ( FILE *input_file ); void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); void yy_delete_buffer ( YY_BUFFER_STATE b ); void yy_flush_buffer ( YY_BUFFER_STATE b ); void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); void yypop_buffer_state ( void ); static void yyensure_buffer_stack ( void ); static void yy_load_buffer_state ( void ); static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); /* %endif */ void *yyalloc ( yy_size_t ); void *yyrealloc ( void *, yy_size_t ); void yyfree ( void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */ /* Begin user sect3 */ #define yywrap() (/*CONSTCOND*/1) #define YY_SKIP_YYWRAP #define FLEX_DEBUG typedef flex_uint8_t YY_CHAR; FILE *yyin = NULL, *yyout = NULL; typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #ifdef yytext_ptr #undef yytext_ptr #endif #define yytext_ptr yytext /* %% [1.5] DFA */ /* %if-c-only Standard (non-C++) definition */ static yy_state_type yy_get_previous_state ( void ); static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); static int yy_get_next_buffer ( void ); static void yynoreturn yy_fatal_error ( const char* msg ); /* %endif */ /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ /* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ yyleng = (int) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ (yy_c_buf_p) = yy_cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ #define YY_NUM_RULES 95 #define YY_END_OF_BUFFER 96 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static const flex_int16_t yy_accept[266] = { 0, 0, 0, 7, 7, 11, 11, 0, 0, 96, 94, 1, 2, 40, 94, 37, 28, 29, 34, 30, 23, 33, 94, 35, 89, 89, 25, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 73, 74, 92, 26, 27, 38, 36, 41, 94, 7, 4, 5, 7, 11, 8, 12, 10, 19, 14, 20, 14, 21, 16, 16, 15, 1, 2, 39, 0, 0, 31, 50, 50, 50, 50, 50, 50, 50, 22, 93, 89, 0, 0, 24, 93, 92, 92, 92, 92, 92, 92, 53, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 75, 92, 92, 92, 92, 92, 92, 92, 92, 0, 7, 4, 5, 6, 11, 8, 12, 9, 19, 14, 20, 14, 0, 13, 16, 19, 19, 0, 3, 0, 50, 50, 50, 50, 50, 50, 50, 50, 91, 90, 92, 92, 92, 92, 92, 92, 58, 77, 51, 57, 92, 60, 92, 92, 87, 63, 78, 54, 67, 92, 92, 92, 84, 59, 92, 92, 92, 92, 0, 6, 18, 17, 50, 50, 50, 50, 50, 50, 50, 92, 92, 76, 68, 92, 92, 92, 92, 71, 92, 69, 92, 70, 92, 56, 55, 64, 92, 52, 88, 0, 50, 50, 50, 50, 50, 45, 44, 80, 85, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 50, 50, 50, 50, 50, 50, 92, 82, 92, 86, 92, 92, 61, 92, 92, 79, 32, 46, 50, 48, 50, 50, 50, 83, 81, 92, 72, 65, 92, 50, 42, 50, 50, 62, 66, 49, 47, 50, 50, 50, 43, 0 } ; static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 5, 6, 1, 1, 7, 8, 1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 21, 1, 22, 1, 1, 1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 1, 50, 51, 52, 1, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 1, 1, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1, 1, 1, 1, 1, 1, 1, 84, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 85, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static const YY_CHAR yy_meta[86] = { 0, 1, 2, 3, 1, 1, 2, 4, 1, 1, 1, 5, 1, 1, 1, 1, 1, 6, 6, 6, 1, 1, 2, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 8, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1 } ; static const flex_int16_t yy_base[279] = { 0, 0, 0, 84, 90, 96, 99, 102, 109, 540, 644, 112, 536, 516, 121, 644, 644, 644, 644, 644, 644, 523, 96, 79, 126, 121, 516, 0, 0, 83, 84, 83, 94, 125, 111, 112, 114, 132, 161, 127, 151, 132, 0, 0, 131, 644, 644, 644, 644, 644, 452, 0, 195, 531, 452, 0, 205, 529, 391, 0, 209, 401, 213, 393, 201, 209, 644, 227, 310, 644, 228, 231, 644, 0, 167, 183, 170, 174, 190, 201, 644, 0, 231, 118, 0, 644, 0, 0, 200, 212, 215, 212, 218, 0, 213, 213, 216, 212, 236, 223, 231, 217, 221, 220, 0, 227, 261, 230, 224, 244, 255, 248, 257, 214, 0, 297, 277, 301, 0, 310, 262, 644, 0, 314, 198, 315, 171, 168, 303, 172, 316, 322, 326, 327, 0, 278, 287, 306, 301, 319, 306, 324, 331, 0, 325, 328, 327, 317, 320, 313, 0, 0, 0, 0, 323, 0, 335, 325, 0, 329, 334, 0, 337, 328, 330, 335, 0, 0, 339, 337, 341, 360, 84, 396, 385, 411, 379, 382, 383, 385, 388, 390, 379, 385, 379, 0, 0, 382, 387, 385, 392, 0, 387, 0, 394, 0, 395, 0, 0, 391, 388, 0, 0, 73, 397, 90, 426, 418, 57, 0, 44, 0, 0, 417, 426, 445, 429, 436, 433, 449, 448, 435, 436, 5, 451, 442, 444, 458, 441, 441, 437, 0, 452, 0, 463, 450, 0, 450, 466, 0, 644, 0, 456, 0, 460, 469, 474, 0, 0, 464, 0, 0, 457, 475, 0, 476, 479, 0, 0, 0, 0, 491, 503, 489, 0, 644, 561, 569, 577, 585, 587, 595, 598, 606, 614, 622, 630, 633, 636 } ; static const flex_int16_t yy_def[279] = { 0, 265, 1, 266, 266, 267, 267, 268, 268, 265, 265, 265, 265, 265, 269, 265, 265, 265, 265, 265, 265, 265, 270, 265, 265, 265, 265, 271, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 265, 265, 265, 265, 265, 265, 273, 273, 265, 273, 274, 274, 265, 265, 275, 265, 265, 275, 276, 275, 275, 265, 265, 265, 265, 269, 269, 265, 277, 277, 277, 277, 277, 277, 277, 265, 271, 265, 265, 278, 265, 271, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 265, 273, 273, 265, 273, 274, 274, 265, 265, 275, 265, 265, 275, 276, 276, 275, 275, 275, 269, 269, 269, 277, 277, 277, 277, 277, 277, 277, 277, 265, 278, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 265, 273, 275, 275, 277, 277, 277, 277, 277, 277, 277, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 265, 277, 277, 277, 277, 277, 277, 277, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 265, 277, 277, 277, 277, 277, 277, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 265, 277, 277, 277, 277, 277, 277, 272, 272, 272, 272, 272, 272, 277, 277, 277, 277, 272, 272, 277, 277, 277, 277, 277, 277, 0, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265 } ; static const flex_int16_t yy_nxt[730] = { 0, 10, 11, 12, 11, 13, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25, 26, 27, 10, 28, 29, 30, 28, 31, 28, 32, 28, 33, 34, 28, 28, 35, 36, 37, 38, 28, 39, 40, 28, 28, 28, 41, 42, 43, 44, 45, 46, 47, 28, 28, 29, 30, 28, 31, 28, 32, 28, 33, 34, 28, 28, 35, 36, 37, 38, 28, 39, 40, 28, 28, 28, 41, 42, 43, 44, 10, 48, 10, 49, 10, 10, 50, 52, 53, 52, 240, 80, 54, 52, 53, 52, 81, 229, 54, 56, 57, 56, 56, 57, 56, 60, 61, 62, 58, 63, 228, 58, 60, 61, 62, 67, 63, 67, 88, 89, 64, 65, 65, 74, 71, 66, 71, 64, 65, 65, 90, 75, 66, 91, 76, 77, 142, 142, 78, 82, 82, 82, 79, 225, 82, 82, 82, 96, 88, 89, 97, 83, 98, 74, 92, 107, 111, 223, 99, 112, 90, 75, 93, 91, 76, 77, 94, 95, 78, 100, 203, 101, 79, 84, 102, 127, 103, 96, 127, 108, 97, 83, 98, 109, 92, 107, 111, 104, 99, 112, 174, 174, 93, 105, 110, 135, 94, 95, 115, 100, 115, 101, 124, 84, 102, 106, 103, 136, 119, 108, 119, 137, 123, 109, 123, 138, 123, 104, 125, 128, 128, 128, 139, 105, 110, 135, 129, 128, 128, 128, 67, 131, 67, 131, 133, 106, 133, 136, 144, 140, 145, 137, 141, 146, 147, 138, 148, 149, 130, 82, 82, 82, 139, 150, 151, 152, 129, 153, 157, 158, 159, 154, 160, 161, 162, 166, 120, 167, 144, 140, 145, 168, 141, 146, 147, 155, 148, 149, 130, 169, 170, 116, 156, 150, 151, 152, 163, 153, 157, 158, 159, 154, 160, 161, 162, 166, 164, 167, 171, 172, 115, 168, 115, 165, 173, 155, 173, 176, 132, 169, 170, 132, 156, 119, 68, 119, 163, 123, 123, 123, 125, 128, 128, 128, 177, 131, 164, 131, 171, 131, 133, 131, 133, 165, 175, 175, 175, 176, 178, 179, 175, 175, 175, 175, 175, 175, 180, 181, 182, 142, 142, 183, 184, 185, 177, 186, 187, 188, 189, 190, 191, 192, 193, 196, 194, 197, 198, 199, 178, 179, 175, 175, 175, 175, 175, 175, 180, 181, 182, 195, 200, 183, 184, 185, 201, 186, 187, 188, 189, 190, 191, 192, 193, 196, 194, 197, 198, 199, 202, 173, 127, 173, 132, 174, 174, 124, 132, 132, 121, 195, 200, 204, 205, 206, 201, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 202, 175, 175, 175, 222, 220, 224, 175, 175, 175, 175, 175, 175, 204, 205, 206, 221, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 226, 227, 230, 231, 222, 220, 224, 175, 175, 175, 175, 175, 175, 232, 233, 234, 235, 236, 237, 238, 239, 241, 242, 243, 244, 245, 246, 247, 248, 249, 226, 227, 230, 231, 250, 251, 252, 253, 254, 255, 256, 257, 258, 232, 233, 234, 235, 236, 237, 238, 239, 241, 242, 243, 244, 245, 246, 247, 248, 249, 259, 260, 261, 262, 250, 251, 252, 253, 254, 255, 256, 257, 258, 263, 264, 120, 117, 116, 113, 85, 72, 69, 68, 265, 265, 265, 265, 265, 265, 265, 259, 260, 261, 262, 265, 265, 265, 265, 265, 265, 265, 265, 265, 263, 264, 51, 51, 51, 51, 51, 51, 51, 51, 55, 55, 55, 55, 55, 55, 55, 55, 59, 59, 59, 59, 59, 59, 59, 59, 70, 70, 265, 265, 70, 70, 70, 70, 73, 73, 86, 86, 265, 86, 86, 86, 86, 86, 87, 87, 87, 114, 114, 265, 114, 114, 114, 114, 114, 118, 118, 265, 118, 265, 118, 118, 118, 122, 265, 265, 122, 122, 122, 122, 122, 126, 126, 265, 126, 126, 126, 126, 126, 134, 134, 134, 143, 143, 9, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265 } ; static const flex_int16_t yy_chk[730] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 223, 23, 3, 4, 4, 4, 23, 210, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 5, 7, 208, 6, 8, 8, 8, 11, 8, 11, 29, 30, 7, 7, 7, 22, 14, 7, 14, 8, 8, 8, 31, 22, 8, 32, 22, 22, 83, 83, 22, 25, 25, 25, 22, 205, 24, 24, 24, 34, 29, 30, 35, 24, 36, 22, 33, 39, 41, 203, 36, 44, 31, 22, 33, 32, 22, 22, 33, 33, 22, 37, 172, 37, 22, 24, 37, 127, 37, 34, 126, 40, 35, 24, 36, 40, 33, 39, 41, 38, 36, 44, 129, 129, 33, 38, 40, 74, 33, 33, 52, 37, 52, 37, 124, 24, 37, 38, 37, 75, 56, 40, 56, 76, 60, 40, 60, 77, 62, 38, 62, 64, 64, 64, 78, 38, 40, 74, 64, 65, 65, 65, 67, 70, 67, 70, 71, 38, 71, 75, 88, 79, 89, 76, 79, 90, 91, 77, 92, 92, 64, 82, 82, 82, 78, 94, 95, 96, 64, 97, 99, 100, 101, 98, 102, 103, 105, 107, 120, 108, 88, 79, 89, 109, 79, 90, 91, 98, 92, 92, 64, 110, 111, 116, 98, 94, 95, 96, 106, 97, 99, 100, 101, 98, 102, 103, 105, 107, 106, 108, 112, 113, 115, 109, 115, 106, 117, 98, 117, 135, 70, 110, 111, 71, 98, 119, 68, 119, 106, 123, 125, 123, 125, 128, 128, 128, 136, 131, 106, 131, 112, 132, 133, 132, 133, 106, 130, 130, 130, 135, 137, 138, 130, 130, 130, 130, 130, 130, 139, 140, 141, 142, 142, 144, 145, 146, 136, 147, 148, 149, 154, 156, 157, 159, 160, 163, 162, 164, 165, 168, 137, 138, 130, 130, 130, 130, 130, 130, 139, 140, 141, 162, 169, 144, 145, 146, 170, 147, 148, 149, 154, 156, 157, 159, 160, 163, 162, 164, 165, 168, 171, 173, 63, 173, 131, 174, 174, 61, 132, 133, 58, 162, 169, 176, 177, 178, 170, 179, 180, 181, 182, 183, 184, 187, 188, 189, 190, 192, 194, 196, 171, 175, 175, 175, 200, 199, 204, 175, 175, 175, 175, 175, 175, 176, 177, 178, 199, 179, 180, 181, 182, 183, 184, 187, 188, 189, 190, 192, 194, 196, 206, 207, 213, 214, 200, 199, 204, 175, 175, 175, 175, 175, 175, 215, 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, 228, 229, 230, 232, 234, 206, 207, 213, 214, 235, 237, 238, 242, 244, 245, 246, 249, 252, 215, 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, 228, 229, 230, 232, 234, 253, 255, 256, 261, 235, 237, 238, 242, 244, 245, 246, 249, 252, 262, 263, 57, 54, 53, 50, 26, 21, 13, 12, 9, 0, 0, 0, 0, 0, 0, 253, 255, 256, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 263, 266, 266, 266, 266, 266, 266, 266, 266, 267, 267, 267, 267, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, 268, 268, 269, 269, 0, 0, 269, 269, 269, 269, 270, 270, 271, 271, 0, 271, 271, 271, 271, 271, 272, 272, 272, 273, 273, 0, 273, 273, 273, 273, 273, 274, 274, 0, 274, 0, 274, 274, 274, 275, 0, 0, 275, 275, 275, 275, 275, 276, 276, 0, 276, 276, 276, 276, 276, 277, 277, 277, 278, 278, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 1; static const flex_int16_t yy_rule_linenum[95] = { 0, 65, 66, 68, 79, 80, 81, 82, 86, 87, 88, 89, 90, 94, 95, 96, 97, 98, 99, 100, 101, 102, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 147, 149, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 172, 173, 175, 176, 178, 179, 183, 184, 185, 187, 189, 191 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "lexer.ll" /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #line 8 "lexer.ll" # include # include # include # include # include # include "pio_assembler.h" # include "parser.hpp" #ifdef _MSC_VER #pragma warning(disable : 4996) // fopen #endif #define YY_NO_INPUT 1 yy::parser::symbol_type make_INT(const std::string &s, const yy::parser::location_type& loc); yy::parser::symbol_type make_HEX(const std::string &s, const yy::parser::location_type& loc); yy::parser::symbol_type make_BINARY(const std::string &s, const yy::parser::location_type& loc); // Code run each time a pattern is matched. # define YY_USER_ACTION loc.columns (yyleng); #define INITIAL 0 #define code_block 1 #define c_comment 2 #define lang_opt 3 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ /* %if-c-only */ #include /* %endif */ /* %if-c++-only */ /* %endif */ #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* %if-c-only Reentrant structure and macros (non-C++). */ /* %if-reentrant */ /* %if-c-only */ static int yy_init_globals ( void ); /* %endif */ /* %if-reentrant */ /* %endif */ /* %endif End reentrant structures and macros. */ /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy ( void ); int yyget_debug ( void ); void yyset_debug ( int debug_flag ); YY_EXTRA_TYPE yyget_extra ( void ); void yyset_extra ( YY_EXTRA_TYPE user_defined ); FILE *yyget_in ( void ); void yyset_in ( FILE * _in_str ); FILE *yyget_out ( void ); void yyset_out ( FILE * _out_str ); int yyget_leng ( void ); char *yyget_text ( void ); int yyget_lineno ( void ); void yyset_lineno ( int _line_number ); /* %if-bison-bridge */ /* %endif */ /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap ( void ); #else extern int yywrap ( void ); #endif #endif /* %not-for-header */ #ifndef YY_NO_UNPUT #endif /* %ok-for-header */ /* %endif */ #ifndef yytext_ptr static void yy_flex_strncpy ( char *, const char *, int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen ( const char * ); #endif #ifndef YY_NO_INPUT /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ #ifdef __cplusplus static int yyinput ( void ); #else static int input ( void ); #endif /* %ok-for-header */ /* %endif */ #endif /* %if-c-only */ /* %endif */ /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* %if-c-only Standard (non-C++) definition */ /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ /* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ int n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ /* %if-c++-only C++ definition \ */\ /* %endif */ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR /* %if-c-only */ #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) /* %endif */ /* %if-c++-only */ /* %endif */ #endif /* %if-tables-serialization structures and prototypes */ /* %not-for-header */ /* %ok-for-header */ /* %not-for-header */ /* %tables-yydmap generated elements */ /* %endif */ /* end tables serialization structures and prototypes */ /* %ok-for-header */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 /* %if-c-only Standard (non-C++) definition */ extern int yylex (void); #define YY_DECL int yylex (void) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK /*LINTED*/break; #endif /* %% [6.0] YY_RULE_SETUP definition goes here */ #define YY_RULE_SETUP \ YY_USER_ACTION /* %not-for-header */ /** The main scanner function which does all the work. */ YY_DECL { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) /* %if-c-only */ yyin = stdin; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! yyout ) /* %if-c-only */ yyout = stdout; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } { /* %% [7.0] user's declarations go here */ std::string code_block_contents; yy::location code_block_start; // A handy shortcut to the location held by the pio_assembler. yy::location& loc = pioasm.location; // Code run each time yylex is called. loc.step(); while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { /* %% [8.0] yymore()-related code goes here */ yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; /* %% [9.0] code to set up and find next match goes here */ yy_current_state = (yy_start); yy_match: do { YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 266 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } while ( yy_current_state != 265 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: /* %% [10.0] code to find the action number goes here */ yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; /* %% [11.0] code for yylineno update goes here */ do_action: /* This label is used only to access EOF actions. */ /* %% [12.0] debug code goes here */ if ( yy_flex_debug ) { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); else if ( yy_act < 95 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); else if ( yy_act == 95 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); else if ( yy_act == 96 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); } switch ( yy_act ) { /* beginning of action switch */ /* %% [13.0] actions go here */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP loc.step(); YY_BREAK case 2: /* rule 2 can match eol */ YY_RULE_SETUP { auto loc_newline = loc; loc_newline.end = loc_newline.begin; loc.lines(yyleng); loc.step(); return yy::parser::make_NEWLINE(loc_newline); } YY_BREAK case 3: YY_RULE_SETUP { BEGIN(code_block); code_block_contents = ""; code_block_start = loc; std::string tmp(yytext); tmp = tmp.substr(1, tmp.length() - 2); tmp = tmp.erase(0, tmp.find_first_not_of(" \t")); tmp = tmp.erase(tmp.find_last_not_of(" \t") + 1); return yy::parser::make_CODE_BLOCK_START( tmp, loc); } YY_BREAK case 4: YY_RULE_SETUP loc.step(); YY_BREAK case 5: /* rule 5 can match eol */ YY_RULE_SETUP { auto loc_newline = loc; loc_newline.end = loc_newline.begin; loc.lines(yyleng); loc.step(); } YY_BREAK case 6: YY_RULE_SETUP { BEGIN(INITIAL); auto loc2 = loc; loc2.begin = code_block_start.begin; return yy::parser::make_CODE_BLOCK_CONTENTS(code_block_contents, loc2); } YY_BREAK case 7: YY_RULE_SETUP { code_block_contents += std::string(yytext) + "\n"; } YY_BREAK case 8: YY_RULE_SETUP loc.step(); YY_BREAK case 9: YY_RULE_SETUP { BEGIN(INITIAL); } YY_BREAK case 10: YY_RULE_SETUP { } YY_BREAK case 11: YY_RULE_SETUP { } YY_BREAK case 12: /* rule 12 can match eol */ YY_RULE_SETUP { auto loc_newline = loc; loc_newline.end = loc_newline.begin; loc.lines(yyleng); loc.step(); } YY_BREAK case 13: YY_RULE_SETUP return yy::parser::make_STRING(yytext, loc); YY_BREAK case 14: YY_RULE_SETUP loc.step(); YY_BREAK case 15: YY_RULE_SETUP return yy::parser::make_EQUAL(loc); YY_BREAK case 16: YY_RULE_SETUP return make_INT(yytext, loc); YY_BREAK case 17: YY_RULE_SETUP return make_HEX(yytext, loc); YY_BREAK case 18: YY_RULE_SETUP return make_BINARY(yytext, loc); YY_BREAK case 19: YY_RULE_SETUP return yy::parser::make_NON_WS(yytext, loc); YY_BREAK case 20: /* rule 20 can match eol */ YY_RULE_SETUP { BEGIN(INITIAL); auto loc_newline = loc; loc_newline.end = loc_newline.begin; loc.lines(yyleng); loc.step(); return yy::parser::make_NEWLINE(loc_newline); } YY_BREAK case 21: YY_RULE_SETUP { throw yy::parser::syntax_error(loc, "invalid character: " + std::string(yytext)); } YY_BREAK case 22: YY_RULE_SETUP { BEGIN(c_comment); } YY_BREAK case 23: YY_RULE_SETUP return yy::parser::make_COMMA(loc); YY_BREAK case 24: YY_RULE_SETUP return yy::parser::make_REVERSE(loc); YY_BREAK case 25: YY_RULE_SETUP return yy::parser::make_COLON(loc); YY_BREAK case 26: YY_RULE_SETUP return yy::parser::make_LBRACKET(loc); YY_BREAK case 27: YY_RULE_SETUP return yy::parser::make_RBRACKET(loc); YY_BREAK case 28: YY_RULE_SETUP return yy::parser::make_LPAREN(loc); YY_BREAK case 29: YY_RULE_SETUP return yy::parser::make_RPAREN(loc); YY_BREAK case 30: YY_RULE_SETUP return yy::parser::make_PLUS(loc); YY_BREAK case 31: YY_RULE_SETUP return yy::parser::make_POST_DECREMENT(loc); YY_BREAK case 32: YY_RULE_SETUP return yy::parser::make_POST_DECREMENT(loc); YY_BREAK case 33: YY_RULE_SETUP return yy::parser::make_MINUS(loc); YY_BREAK case 34: YY_RULE_SETUP return yy::parser::make_MULTIPLY(loc); YY_BREAK case 35: YY_RULE_SETUP return yy::parser::make_DIVIDE(loc); YY_BREAK case 36: YY_RULE_SETUP return yy::parser::make_OR(loc); YY_BREAK case 37: YY_RULE_SETUP return yy::parser::make_AND(loc); YY_BREAK case 38: YY_RULE_SETUP return yy::parser::make_XOR(loc); YY_BREAK case 39: YY_RULE_SETUP return yy::parser::make_NOT_EQUAL(loc); YY_BREAK case 40: YY_RULE_SETUP return yy::parser::make_NOT(loc); YY_BREAK case 41: YY_RULE_SETUP return yy::parser::make_NOT(loc); YY_BREAK case 42: YY_RULE_SETUP return yy::parser::make_PROGRAM(loc); YY_BREAK case 43: YY_RULE_SETUP return yy::parser::make_WRAP_TARGET(loc); YY_BREAK case 44: YY_RULE_SETUP return yy::parser::make_WRAP(loc); YY_BREAK case 45: YY_RULE_SETUP return yy::parser::make_WORD(loc); YY_BREAK case 46: YY_RULE_SETUP return yy::parser::make_DEFINE(loc); YY_BREAK case 47: YY_RULE_SETUP return yy::parser::make_SIDE_SET(loc); YY_BREAK case 48: YY_RULE_SETUP return yy::parser::make_ORIGIN(loc); YY_BREAK case 49: YY_RULE_SETUP { BEGIN(lang_opt); return yy::parser::make_LANG_OPT(loc); } YY_BREAK case 50: YY_RULE_SETUP return yy::parser::make_UNKNOWN_DIRECTIVE(yytext, loc); YY_BREAK case 51: YY_RULE_SETUP return yy::parser::make_JMP(loc); YY_BREAK case 52: YY_RULE_SETUP return yy::parser::make_WAIT(loc); YY_BREAK case 53: YY_RULE_SETUP return yy::parser::make_IN(loc); YY_BREAK case 54: YY_RULE_SETUP return yy::parser::make_OUT(loc); YY_BREAK case 55: YY_RULE_SETUP return yy::parser::make_PUSH(loc); YY_BREAK case 56: YY_RULE_SETUP return yy::parser::make_PULL(loc); YY_BREAK case 57: YY_RULE_SETUP return yy::parser::make_MOV(loc); YY_BREAK case 58: YY_RULE_SETUP return yy::parser::make_IRQ(loc); YY_BREAK case 59: YY_RULE_SETUP return yy::parser::make_SET(loc); YY_BREAK case 60: YY_RULE_SETUP return yy::parser::make_NOP(loc); YY_BREAK case 61: YY_RULE_SETUP return yy::parser::make_PUBLIC(loc); YY_BREAK case 62: YY_RULE_SETUP return yy::parser::make_OPTIONAL(loc); YY_BREAK case 63: YY_RULE_SETUP return yy::parser::make_OPTIONAL(loc); YY_BREAK case 64: YY_RULE_SETUP return yy::parser::make_SIDE(loc); YY_BREAK case 65: YY_RULE_SETUP return yy::parser::make_SIDE(loc); YY_BREAK case 66: YY_RULE_SETUP return yy::parser::make_SIDE(loc); YY_BREAK case 67: YY_RULE_SETUP return yy::parser::make_PIN(loc); YY_BREAK case 68: YY_RULE_SETUP return yy::parser::make_GPIO(loc); YY_BREAK case 69: YY_RULE_SETUP return yy::parser::make_OSRE(loc); YY_BREAK case 70: YY_RULE_SETUP return yy::parser::make_PINS(loc); YY_BREAK case 71: YY_RULE_SETUP return yy::parser::make_NULL(loc); YY_BREAK case 72: YY_RULE_SETUP return yy::parser::make_PINDIRS(loc); YY_BREAK case 73: YY_RULE_SETUP return yy::parser::make_X(loc); YY_BREAK case 74: YY_RULE_SETUP return yy::parser::make_Y(loc); YY_BREAK case 75: YY_RULE_SETUP return yy::parser::make_PC(loc); YY_BREAK case 76: YY_RULE_SETUP return yy::parser::make_EXEC(loc); YY_BREAK case 77: YY_RULE_SETUP return yy::parser::make_ISR(loc); YY_BREAK case 78: YY_RULE_SETUP return yy::parser::make_OSR(loc); YY_BREAK case 79: YY_RULE_SETUP return yy::parser::make_STATUS(loc); YY_BREAK case 80: YY_RULE_SETUP return yy::parser::make_BLOCK(loc); YY_BREAK case 81: YY_RULE_SETUP return yy::parser::make_NOBLOCK(loc); YY_BREAK case 82: YY_RULE_SETUP return yy::parser::make_IFFULL(loc); YY_BREAK case 83: YY_RULE_SETUP return yy::parser::make_IFEMPTY(loc); YY_BREAK case 84: YY_RULE_SETUP return yy::parser::make_REL(loc); YY_BREAK case 85: YY_RULE_SETUP return yy::parser::make_CLEAR(loc); YY_BREAK case 86: YY_RULE_SETUP return yy::parser::make_NOWAIT(loc); YY_BREAK case 87: YY_RULE_SETUP return yy::parser::make_INT(1, loc); YY_BREAK case 88: YY_RULE_SETUP return yy::parser::make_INT(0, loc); YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(code_block): case YY_STATE_EOF(c_comment): case YY_STATE_EOF(lang_opt): return yy::parser::make_END(loc); YY_BREAK case 89: YY_RULE_SETUP return make_INT(yytext, loc); YY_BREAK case 90: YY_RULE_SETUP return make_HEX(yytext, loc); YY_BREAK case 91: YY_RULE_SETUP return make_BINARY(yytext, loc); YY_BREAK case 92: YY_RULE_SETUP return yy::parser::make_ID(yytext, loc); YY_BREAK case 93: YY_RULE_SETUP { } YY_BREAK case 94: YY_RULE_SETUP { throw yy::parser::syntax_error(loc, "invalid character: " + std::string(yytext)); } YY_BREAK case 95: YY_RULE_SETUP ECHO; YY_BREAK case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; /* %if-c-only */ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; /* %endif */ /* %if-c++-only */ /* %endif */ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { /* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of yylex */ /* %ok-for-header */ /* %if-c++-only */ /* %not-for-header */ /* %ok-for-header */ /* %endif */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ /* %if-c-only */ static int yy_get_next_buffer (void) /* %endif */ /* %if-c++-only */ /* %endif */ { char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = (yytext_ptr); int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc( (void *) b->yy_ch_buf, (yy_size_t) (b->yy_buf_size + 2) ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = NULL; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); /* "- 2" to take care of EOB's */ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ /* %if-c-only */ /* %not-for-header */ static yy_state_type yy_get_previous_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { yy_state_type yy_current_state; char *yy_cp; /* %% [15.0] code to get the start state into yy_current_state goes here */ yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { /* %% [16.0] code to find the next state goes here */ YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 266 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ /* %if-c-only */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) /* %endif */ /* %if-c++-only */ /* %endif */ { int yy_is_jam; /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ char *yy_cp = (yy_c_buf_p); YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 266 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_is_jam = (yy_current_state == 265); return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT /* %if-c-only */ /* %endif */ #endif /* %if-c-only */ #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif /* %endif */ /* %if-c++-only */ /* %endif */ { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); /* %% [19.0] update BOL and yylineno */ return c; } /* %if-c-only */ #endif /* ifndef YY_NO_INPUT */ /* %endif */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ /* %if-c-only */ void yyrestart (FILE * input_file ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /* %if-c++-only */ /* %endif */ /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ /* %if-c-only */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } /* %if-c-only */ static void yy_load_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; /* %if-c-only */ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; /* %endif */ /* %if-c++-only */ /* %endif */ (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ /* %if-c-only */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) /* %endif */ /* %if-c++-only */ /* %endif */ { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /* %if-c++-only */ /* %endif */ /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ /* %if-c-only */ void yy_delete_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree( (void *) b->yy_ch_buf ); yyfree( (void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ /* %if-c-only */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) /* %endif */ /* %if-c++-only */ /* %endif */ { int oerrno = errno; yy_flush_buffer( b ); /* %if-c-only */ b->yy_input_file = file; /* %endif */ /* %if-c++-only */ /* %endif */ b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } /* %if-c-only */ b->yy_is_interactive = 0; /* %endif */ /* %if-c++-only */ /* %endif */ errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ /* %if-c-only */ void yy_flush_buffer (YY_BUFFER_STATE b ) /* %endif */ /* %if-c++-only */ /* %endif */ { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /* %if-c-or-c++ */ /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ /* %if-c-only */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) /* %endif */ /* %if-c++-only */ /* %endif */ { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /* %endif */ /* %if-c-or-c++ */ /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ /* %if-c-only */ void yypop_buffer_state (void) /* %endif */ /* %if-c++-only */ /* %endif */ { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* %endif */ /* %if-c-or-c++ */ /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ /* %if-c-only */ static void yyensure_buffer_stack (void) /* %endif */ /* %if-c++-only */ /* %endif */ { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return NULL; b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer( b ); return b; } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (const char * yystr ) { return yy_scan_bytes( yystr, (int) strlen(yystr) ); } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t) (_yybytes_len + 2); buf = (char *) yyalloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } /* %endif */ #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif /* %if-c-only */ static void yynoreturn yy_fatal_error (const char* msg ) { fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* %endif */ /* %if-c++-only */ /* %endif */ /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* %if-c-only */ /* %if-reentrant */ /* %endif */ /** Get the current line number. * */ int yyget_lineno (void) { return yylineno; } /** Get the input stream. * */ FILE *yyget_in (void) { return yyin; } /** Get the output stream. * */ FILE *yyget_out (void) { return yyout; } /** Get the length of the current token. * */ int yyget_leng (void) { return yyleng; } /** Get the current token. * */ char *yyget_text (void) { return yytext; } /* %if-reentrant */ /* %endif */ /** Set the current line number. * @param _line_number line number * */ void yyset_lineno (int _line_number ) { yylineno = _line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * * @see yy_switch_to_buffer */ void yyset_in (FILE * _in_str ) { yyin = _in_str ; } void yyset_out (FILE * _out_str ) { yyout = _out_str ; } int yyget_debug (void) { return yy_flex_debug; } void yyset_debug (int _bdebug ) { yy_flex_debug = _bdebug ; } /* %endif */ /* %if-reentrant */ /* %if-bison-bridge */ /* %endif */ /* %endif if-c-only */ /* %if-c-only */ static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ (yy_buffer_stack) = NULL; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = NULL; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = NULL; yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* %endif */ /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer( YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } /* Destroy the stack itself. */ yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( ); /* %if-reentrant */ /* %endif */ return 0; } /* %endif */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, const char * s2, int n ) { int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (const char * s ) { int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size ) { return malloc(size); } void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return realloc(ptr, size); } void yyfree (void * ptr ) { free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } /* %if-tables-serialization definitions */ /* %define-yytables The name for this specific scanner's tables. */ /* %endif */ /* %ok-for-header */ yy::parser::symbol_type make_INT(const std::string &s, const yy::parser::location_type& loc) { errno = 0; long n = strtol (s.c_str(), NULL, 10); if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE)) throw yy::parser::syntax_error (loc, "integer is out of range: " + s); return yy::parser::make_INT((int) n, loc); } yy::parser::symbol_type make_HEX(const std::string &s, const yy::parser::location_type& loc) { errno = 0; long n = strtol (s.c_str() + 2, NULL, 16); if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE)) throw yy::parser::syntax_error (loc, "hex is out of range: " + s); return yy::parser::make_INT((int) n, loc); } yy::parser::symbol_type make_BINARY(const std::string &s, const yy::parser::location_type& loc) { errno = 0; long n = strtol (s.c_str()+2, NULL, 2); if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE)) throw yy::parser::syntax_error (loc, "binary is out of range: " + s); return yy::parser::make_INT((int) n, loc); } void pio_assembler::scan_begin () { yy_flex_debug = false; if (source.empty () || source == "-") yyin = stdin; else if (!(yyin = fopen (source.c_str (), "r"))) { std::cerr << "cannot open " << source << ": " << strerror(errno) << '\n'; exit (EXIT_FAILURE); } } void pio_assembler::scan_end () { fclose (yyin); } ================================================ FILE: pico-sdk/tools/pioasm/gen/location.h ================================================ // A Bison parser, made by GNU Bison 3.7.2. // Locations for Bison parsers in C++ // Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program 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. // This program 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 . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work // under terms of your choice, so long as that work isn't itself a // parser generator using the skeleton or a modified version thereof // as a parser skeleton. Alternatively, if you modify or redistribute // the parser skeleton itself, you may (at your option) remove this // special exception, which will cause the skeleton and the resulting // Bison output files to be licensed under the GNU General Public // License without this special exception. // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. /** ** \file pico_sdk/tools/pioasm/gen/location.h ** Define the yy::location class. */ #ifndef YY_YY_HOME_GRAHAM_DEV_MU_PICO_SDK_TOOLS_PIOASM_GEN_LOCATION_H_INCLUDED # define YY_YY_HOME_GRAHAM_DEV_MU_PICO_SDK_TOOLS_PIOASM_GEN_LOCATION_H_INCLUDED # include # include # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif namespace yy { /// A point in a source file. class position { public: /// Type for file name. typedef const std::string filename_type; /// Type for line and column numbers. typedef int counter_type; /// Construct a position. explicit position (filename_type* f = YY_NULLPTR, counter_type l = 1, counter_type c = 1) : filename (f) , line (l) , column (c) {} /// Initialization. void initialize (filename_type* fn = YY_NULLPTR, counter_type l = 1, counter_type c = 1) { filename = fn; line = l; column = c; } /** \name Line and Column related manipulators ** \{ */ /// (line related) Advance to the COUNT next lines. void lines (counter_type count = 1) { if (count) { column = 1; line = add_ (line, count, 1); } } /// (column related) Advance to the COUNT next columns. void columns (counter_type count = 1) { column = add_ (column, count, 1); } /** \} */ /// File name to which this position refers. filename_type* filename; /// Current line number. counter_type line; /// Current column number. counter_type column; private: /// Compute max (min, lhs+rhs). static counter_type add_ (counter_type lhs, counter_type rhs, counter_type min) { return lhs + rhs < min ? min : lhs + rhs; } }; /// Add \a width columns, in place. inline position& operator+= (position& res, position::counter_type width) { res.columns (width); return res; } /// Add \a width columns. inline position operator+ (position res, position::counter_type width) { return res += width; } /// Subtract \a width columns, in place. inline position& operator-= (position& res, position::counter_type width) { return res += -width; } /// Subtract \a width columns. inline position operator- (position res, position::counter_type width) { return res -= width; } /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param pos a reference to the position to redirect */ template std::basic_ostream& operator<< (std::basic_ostream& ostr, const position& pos) { if (pos.filename) ostr << *pos.filename << ':'; return ostr << pos.line << '.' << pos.column; } /// Two points in a source file. class location { public: /// Type for file name. typedef position::filename_type filename_type; /// Type for line and column numbers. typedef position::counter_type counter_type; /// Construct a location from \a b to \a e. location (const position& b, const position& e) : begin (b) , end (e) {} /// Construct a 0-width location in \a p. explicit location (const position& p = position ()) : begin (p) , end (p) {} /// Construct a 0-width location in \a f, \a l, \a c. explicit location (filename_type* f, counter_type l = 1, counter_type c = 1) : begin (f, l, c) , end (f, l, c) {} /// Initialization. void initialize (filename_type* f = YY_NULLPTR, counter_type l = 1, counter_type c = 1) { begin.initialize (f, l, c); end = begin; } /** \name Line and Column related manipulators ** \{ */ public: /// Reset initial location to final location. void step () { begin = end; } /// Extend the current location to the COUNT next columns. void columns (counter_type count = 1) { end += count; } /// Extend the current location to the COUNT next lines. void lines (counter_type count = 1) { end.lines (count); } /** \} */ public: /// Beginning of the located region. position begin; /// End of the located region. position end; }; /// Join two locations, in place. inline location& operator+= (location& res, const location& end) { res.end = end.end; return res; } /// Join two locations. inline location operator+ (location res, const location& end) { return res += end; } /// Add \a width columns to the end position, in place. inline location& operator+= (location& res, location::counter_type width) { res.columns (width); return res; } /// Add \a width columns to the end position. inline location operator+ (location res, location::counter_type width) { return res += width; } /// Subtract \a width columns to the end position, in place. inline location& operator-= (location& res, location::counter_type width) { return res += -width; } /// Subtract \a width columns to the end position. inline location operator- (location res, location::counter_type width) { return res -= width; } /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param loc a reference to the location to redirect ** ** Avoid duplicate information. */ template std::basic_ostream& operator<< (std::basic_ostream& ostr, const location& loc) { location::counter_type end_col = 0 < loc.end.column ? loc.end.column - 1 : 0; ostr << loc.begin; if (loc.end.filename && (!loc.begin.filename || *loc.begin.filename != *loc.end.filename)) ostr << '-' << loc.end.filename << ':' << loc.end.line << '.' << end_col; else if (loc.begin.line < loc.end.line) ostr << '-' << loc.end.line << '.' << end_col; else if (loc.begin.column < end_col) ostr << '-' << end_col; return ostr; } } // yy #endif // !YY_YY_HOME_GRAHAM_DEV_MU_PICO_SDK_TOOLS_PIOASM_GEN_LOCATION_H_INCLUDED ================================================ FILE: pico-sdk/tools/pioasm/gen/parser.cpp ================================================ // A Bison parser, made by GNU Bison 3.7.2. // Skeleton implementation for Bison LALR(1) parsers in C++ // Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program 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. // This program 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 . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work // under terms of your choice, so long as that work isn't itself a // parser generator using the skeleton or a modified version thereof // as a parser skeleton. Alternatively, if you modify or redistribute // the parser skeleton itself, you may (at your option) remove this // special exception, which will cause the skeleton and the resulting // Bison output files to be licensed under the GNU General Public // License without this special exception. // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. // DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, // especially those whose name start with YY_ or yy_. They are // private implementation details that can be changed or removed. #include "parser.hpp" // Unqualified %code blocks. #include "pio_assembler.h" #ifdef _MSC_VER #pragma warning(disable : 4244) // possible loss of data (valid warning, but there is a software check / missing cast) #endif #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include // FIXME: INFRINGES ON USER NAME SPACE. # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif // Whether we are compiled with exception support. #ifndef YY_EXCEPTIONS # if defined __GNUC__ && !defined __EXCEPTIONS # define YY_EXCEPTIONS 0 # else # define YY_EXCEPTIONS 1 # endif #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K].location) /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ # ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (N) \ { \ (Current).begin = YYRHSLOC (Rhs, 1).begin; \ (Current).end = YYRHSLOC (Rhs, N).end; \ } \ else \ { \ (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ } \ while (false) # endif // Enable debugging if requested. #if YYDEBUG // A pseudo ostream that takes yydebug_ into account. # define YYCDEBUG if (yydebug_) (*yycdebug_) # define YY_SYMBOL_PRINT(Title, Symbol) \ do { \ if (yydebug_) \ { \ *yycdebug_ << Title << ' '; \ yy_print_ (*yycdebug_, Symbol); \ *yycdebug_ << '\n'; \ } \ } while (false) # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug_) \ yy_reduce_print_ (Rule); \ } while (false) # define YY_STACK_PRINT() \ do { \ if (yydebug_) \ yy_stack_print_ (); \ } while (false) #else // !YYDEBUG # define YYCDEBUG if (false) std::cerr # define YY_SYMBOL_PRINT(Title, Symbol) YYUSE (Symbol) # define YY_REDUCE_PRINT(Rule) static_cast (0) # define YY_STACK_PRINT() static_cast (0) #endif // !YYDEBUG #define yyerrok (yyerrstatus_ = 0) #define yyclearin (yyla.clear ()) #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus_) namespace yy { /// Build a parser object. parser::parser (pio_assembler& pioasm_yyarg) #if YYDEBUG : yydebug_ (false), yycdebug_ (&std::cerr), #else : #endif yy_lac_established_ (false), pioasm (pioasm_yyarg) {} parser::~parser () {} parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW {} /*---------------. | symbol kinds. | `---------------*/ // by_state. parser::by_state::by_state () YY_NOEXCEPT : state (empty_state) {} parser::by_state::by_state (const by_state& that) YY_NOEXCEPT : state (that.state) {} void parser::by_state::clear () YY_NOEXCEPT { state = empty_state; } void parser::by_state::move (by_state& that) { state = that.state; that.clear (); } parser::by_state::by_state (state_type s) YY_NOEXCEPT : state (s) {} parser::symbol_kind_type parser::by_state::kind () const YY_NOEXCEPT { if (state == empty_state) return symbol_kind::S_YYEMPTY; else return YY_CAST (symbol_kind_type, yystos_[+state]); } parser::stack_symbol_type::stack_symbol_type () {} parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that) : super_type (YY_MOVE (that.state), YY_MOVE (that.location)) { switch (that.kind ()) { case symbol_kind::S_if_full: // if_full case symbol_kind::S_if_empty: // if_empty case symbol_kind::S_blocking: // blocking value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value)); break; case symbol_kind::S_condition: // condition value.YY_MOVE_OR_COPY< enum condition > (YY_MOVE (that.value)); break; case symbol_kind::S_in_source: // in_source case symbol_kind::S_out_target: // out_target case symbol_kind::S_set_target: // set_target value.YY_MOVE_OR_COPY< enum in_out_set > (YY_MOVE (that.value)); break; case symbol_kind::S_irq_modifiers: // irq_modifiers value.YY_MOVE_OR_COPY< enum irq > (YY_MOVE (that.value)); break; case symbol_kind::S_mov_target: // mov_target case symbol_kind::S_mov_source: // mov_source value.YY_MOVE_OR_COPY< enum mov > (YY_MOVE (that.value)); break; case symbol_kind::S_mov_op: // mov_op value.YY_MOVE_OR_COPY< enum mov_op > (YY_MOVE (that.value)); break; case symbol_kind::S_INT: // "integer" value.YY_MOVE_OR_COPY< int > (YY_MOVE (that.value)); break; case symbol_kind::S_instruction: // instruction case symbol_kind::S_base_instruction: // base_instruction value.YY_MOVE_OR_COPY< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_value: // value case symbol_kind::S_expression: // expression case symbol_kind::S_delay: // delay case symbol_kind::S_sideset: // sideset value.YY_MOVE_OR_COPY< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_label_decl: // label_decl case symbol_kind::S_symbol_def: // symbol_def value.YY_MOVE_OR_COPY< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_wait_source: // wait_source value.YY_MOVE_OR_COPY< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_ID: // "identifier" case symbol_kind::S_STRING: // "string" case symbol_kind::S_NON_WS: // "text" case symbol_kind::S_CODE_BLOCK_START: // "code block" case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value)); break; default: break; } #if 201103L <= YY_CPLUSPLUS // that is emptied. that.state = empty_state; #endif } parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that) : super_type (s, YY_MOVE (that.location)) { switch (that.kind ()) { case symbol_kind::S_if_full: // if_full case symbol_kind::S_if_empty: // if_empty case symbol_kind::S_blocking: // blocking value.move< bool > (YY_MOVE (that.value)); break; case symbol_kind::S_condition: // condition value.move< enum condition > (YY_MOVE (that.value)); break; case symbol_kind::S_in_source: // in_source case symbol_kind::S_out_target: // out_target case symbol_kind::S_set_target: // set_target value.move< enum in_out_set > (YY_MOVE (that.value)); break; case symbol_kind::S_irq_modifiers: // irq_modifiers value.move< enum irq > (YY_MOVE (that.value)); break; case symbol_kind::S_mov_target: // mov_target case symbol_kind::S_mov_source: // mov_source value.move< enum mov > (YY_MOVE (that.value)); break; case symbol_kind::S_mov_op: // mov_op value.move< enum mov_op > (YY_MOVE (that.value)); break; case symbol_kind::S_INT: // "integer" value.move< int > (YY_MOVE (that.value)); break; case symbol_kind::S_instruction: // instruction case symbol_kind::S_base_instruction: // base_instruction value.move< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_value: // value case symbol_kind::S_expression: // expression case symbol_kind::S_delay: // delay case symbol_kind::S_sideset: // sideset value.move< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_label_decl: // label_decl case symbol_kind::S_symbol_def: // symbol_def value.move< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_wait_source: // wait_source value.move< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_ID: // "identifier" case symbol_kind::S_STRING: // "string" case symbol_kind::S_NON_WS: // "text" case symbol_kind::S_CODE_BLOCK_START: // "code block" case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE value.move< std::string > (YY_MOVE (that.value)); break; default: break; } // that is emptied. that.kind_ = symbol_kind::S_YYEMPTY; } #if YY_CPLUSPLUS < 201103L parser::stack_symbol_type& parser::stack_symbol_type::operator= (const stack_symbol_type& that) { state = that.state; switch (that.kind ()) { case symbol_kind::S_if_full: // if_full case symbol_kind::S_if_empty: // if_empty case symbol_kind::S_blocking: // blocking value.copy< bool > (that.value); break; case symbol_kind::S_condition: // condition value.copy< enum condition > (that.value); break; case symbol_kind::S_in_source: // in_source case symbol_kind::S_out_target: // out_target case symbol_kind::S_set_target: // set_target value.copy< enum in_out_set > (that.value); break; case symbol_kind::S_irq_modifiers: // irq_modifiers value.copy< enum irq > (that.value); break; case symbol_kind::S_mov_target: // mov_target case symbol_kind::S_mov_source: // mov_source value.copy< enum mov > (that.value); break; case symbol_kind::S_mov_op: // mov_op value.copy< enum mov_op > (that.value); break; case symbol_kind::S_INT: // "integer" value.copy< int > (that.value); break; case symbol_kind::S_instruction: // instruction case symbol_kind::S_base_instruction: // base_instruction value.copy< std::shared_ptr > (that.value); break; case symbol_kind::S_value: // value case symbol_kind::S_expression: // expression case symbol_kind::S_delay: // delay case symbol_kind::S_sideset: // sideset value.copy< std::shared_ptr > (that.value); break; case symbol_kind::S_label_decl: // label_decl case symbol_kind::S_symbol_def: // symbol_def value.copy< std::shared_ptr > (that.value); break; case symbol_kind::S_wait_source: // wait_source value.copy< std::shared_ptr > (that.value); break; case symbol_kind::S_ID: // "identifier" case symbol_kind::S_STRING: // "string" case symbol_kind::S_NON_WS: // "text" case symbol_kind::S_CODE_BLOCK_START: // "code block" case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE value.copy< std::string > (that.value); break; default: break; } location = that.location; return *this; } parser::stack_symbol_type& parser::stack_symbol_type::operator= (stack_symbol_type& that) { state = that.state; switch (that.kind ()) { case symbol_kind::S_if_full: // if_full case symbol_kind::S_if_empty: // if_empty case symbol_kind::S_blocking: // blocking value.move< bool > (that.value); break; case symbol_kind::S_condition: // condition value.move< enum condition > (that.value); break; case symbol_kind::S_in_source: // in_source case symbol_kind::S_out_target: // out_target case symbol_kind::S_set_target: // set_target value.move< enum in_out_set > (that.value); break; case symbol_kind::S_irq_modifiers: // irq_modifiers value.move< enum irq > (that.value); break; case symbol_kind::S_mov_target: // mov_target case symbol_kind::S_mov_source: // mov_source value.move< enum mov > (that.value); break; case symbol_kind::S_mov_op: // mov_op value.move< enum mov_op > (that.value); break; case symbol_kind::S_INT: // "integer" value.move< int > (that.value); break; case symbol_kind::S_instruction: // instruction case symbol_kind::S_base_instruction: // base_instruction value.move< std::shared_ptr > (that.value); break; case symbol_kind::S_value: // value case symbol_kind::S_expression: // expression case symbol_kind::S_delay: // delay case symbol_kind::S_sideset: // sideset value.move< std::shared_ptr > (that.value); break; case symbol_kind::S_label_decl: // label_decl case symbol_kind::S_symbol_def: // symbol_def value.move< std::shared_ptr > (that.value); break; case symbol_kind::S_wait_source: // wait_source value.move< std::shared_ptr > (that.value); break; case symbol_kind::S_ID: // "identifier" case symbol_kind::S_STRING: // "string" case symbol_kind::S_NON_WS: // "text" case symbol_kind::S_CODE_BLOCK_START: // "code block" case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE value.move< std::string > (that.value); break; default: break; } location = that.location; // that is emptied. that.state = empty_state; return *this; } #endif template void parser::yy_destroy_ (const char* yymsg, basic_symbol& yysym) const { if (yymsg) YY_SYMBOL_PRINT (yymsg, yysym); } #if YYDEBUG template void parser::yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const { std::ostream& yyoutput = yyo; YYUSE (yyoutput); if (yysym.empty ()) yyo << "empty symbol"; else { symbol_kind_type yykind = yysym.kind (); yyo << (yykind < YYNTOKENS ? "token" : "nterm") << ' ' << yysym.name () << " (" << yysym.location << ": "; switch (yykind) { case symbol_kind::S_ID: // "identifier" { yyo << "..."; } break; case symbol_kind::S_STRING: // "string" { yyo << "..."; } break; case symbol_kind::S_NON_WS: // "text" { yyo << "..."; } break; case symbol_kind::S_CODE_BLOCK_START: // "code block" { yyo << "..."; } break; case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" { yyo << "..."; } break; case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE { yyo << "..."; } break; case symbol_kind::S_INT: // "integer" { yyo << "..."; } break; case symbol_kind::S_label_decl: // label_decl { yyo << "..."; } break; case symbol_kind::S_value: // value { yyo << "..."; } break; case symbol_kind::S_expression: // expression { yyo << "..."; } break; case symbol_kind::S_instruction: // instruction { yyo << "..."; } break; case symbol_kind::S_base_instruction: // base_instruction { yyo << "..."; } break; case symbol_kind::S_delay: // delay { yyo << "..."; } break; case symbol_kind::S_sideset: // sideset { yyo << "..."; } break; case symbol_kind::S_condition: // condition { yyo << "..."; } break; case symbol_kind::S_wait_source: // wait_source { yyo << "..."; } break; case symbol_kind::S_in_source: // in_source { yyo << "..."; } break; case symbol_kind::S_out_target: // out_target { yyo << "..."; } break; case symbol_kind::S_mov_target: // mov_target { yyo << "..."; } break; case symbol_kind::S_mov_source: // mov_source { yyo << "..."; } break; case symbol_kind::S_mov_op: // mov_op { yyo << "..."; } break; case symbol_kind::S_set_target: // set_target { yyo << "..."; } break; case symbol_kind::S_if_full: // if_full { yyo << "..."; } break; case symbol_kind::S_if_empty: // if_empty { yyo << "..."; } break; case symbol_kind::S_blocking: // blocking { yyo << "..."; } break; case symbol_kind::S_irq_modifiers: // irq_modifiers { yyo << "..."; } break; case symbol_kind::S_symbol_def: // symbol_def { yyo << "..."; } break; default: break; } yyo << ')'; } } #endif void parser::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym) { if (m) YY_SYMBOL_PRINT (m, sym); yystack_.push (YY_MOVE (sym)); } void parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym) { #if 201103L <= YY_CPLUSPLUS yypush_ (m, stack_symbol_type (s, std::move (sym))); #else stack_symbol_type ss (s, sym); yypush_ (m, ss); #endif } void parser::yypop_ (int n) { yystack_.pop (n); } #if YYDEBUG std::ostream& parser::debug_stream () const { return *yycdebug_; } void parser::set_debug_stream (std::ostream& o) { yycdebug_ = &o; } parser::debug_level_type parser::debug_level () const { return yydebug_; } void parser::set_debug_level (debug_level_type l) { yydebug_ = l; } #endif // YYDEBUG parser::state_type parser::yy_lr_goto_state_ (state_type yystate, int yysym) { int yyr = yypgoto_[yysym - YYNTOKENS] + yystate; if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate) return yytable_[yyr]; else return yydefgoto_[yysym - YYNTOKENS]; } bool parser::yy_pact_value_is_default_ (int yyvalue) { return yyvalue == yypact_ninf_; } bool parser::yy_table_value_is_error_ (int yyvalue) { return yyvalue == yytable_ninf_; } int parser::operator() () { return parse (); } int parser::parse () { int yyn; /// Length of the RHS of the rule being reduced. int yylen = 0; // Error handling. int yynerrs_ = 0; int yyerrstatus_ = 0; /// The lookahead symbol. symbol_type yyla; /// The locations where the error started and ended. stack_symbol_type yyerror_range[3]; /// The return value of parse (). int yyresult; /// Discard the LAC context in case there still is one left from a /// previous invocation. yy_lac_discard_ ("init"); #if YY_EXCEPTIONS try #endif // YY_EXCEPTIONS { YYCDEBUG << "Starting parse\n"; /* Initialize the stack. The initial state will be set in yynewstate, since the latter expects the semantical and the location values to have been already stored, initialize these stacks with a primary value. */ yystack_.clear (); yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla)); /*-----------------------------------------------. | yynewstate -- push a new symbol on the stack. | `-----------------------------------------------*/ yynewstate: YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n'; YY_STACK_PRINT (); // Accept? if (yystack_[0].state == yyfinal_) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: // Try to take a decision without lookahead. yyn = yypact_[+yystack_[0].state]; if (yy_pact_value_is_default_ (yyn)) goto yydefault; // Read a lookahead token. if (yyla.empty ()) { YYCDEBUG << "Reading a token\n"; #if YY_EXCEPTIONS try #endif // YY_EXCEPTIONS { symbol_type yylookahead (yylex (pioasm)); yyla.move (yylookahead); } #if YY_EXCEPTIONS catch (const syntax_error& yyexc) { YYCDEBUG << "Caught exception: " << yyexc.what() << '\n'; error (yyexc); goto yyerrlab1; } #endif // YY_EXCEPTIONS } YY_SYMBOL_PRINT ("Next token is", yyla); if (yyla.kind () == symbol_kind::S_YYerror) { // The scanner already issued an error message, process directly // to error recovery. But do not keep the error token as // lookahead, it is too special and may lead us to an endless // loop in error recovery. */ yyla.kind_ = symbol_kind::S_YYUNDEF; goto yyerrlab1; } /* If the proper action on seeing token YYLA.TYPE is to reduce or to detect an error, take that action. */ yyn += yyla.kind (); if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ()) { if (!yy_lac_establish_ (yyla.kind ())) goto yyerrlab; goto yydefault; } // Reduce or error. yyn = yytable_[yyn]; if (yyn <= 0) { if (yy_table_value_is_error_ (yyn)) goto yyerrlab; if (!yy_lac_establish_ (yyla.kind ())) goto yyerrlab; yyn = -yyn; goto yyreduce; } // Count tokens shifted since error; after three, turn off error status. if (yyerrstatus_) --yyerrstatus_; // Shift the lookahead token. yypush_ ("Shifting", state_type (yyn), YY_MOVE (yyla)); yy_lac_discard_ ("shift"); goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact_[+yystack_[0].state]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: yylen = yyr2_[yyn]; { stack_symbol_type yylhs; yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]); /* Variants are always initialized to an empty instance of the correct type. The default '$$ = $1' action is NOT applied when using variants. */ switch (yyr1_[yyn]) { case symbol_kind::S_if_full: // if_full case symbol_kind::S_if_empty: // if_empty case symbol_kind::S_blocking: // blocking yylhs.value.emplace< bool > (); break; case symbol_kind::S_condition: // condition yylhs.value.emplace< enum condition > (); break; case symbol_kind::S_in_source: // in_source case symbol_kind::S_out_target: // out_target case symbol_kind::S_set_target: // set_target yylhs.value.emplace< enum in_out_set > (); break; case symbol_kind::S_irq_modifiers: // irq_modifiers yylhs.value.emplace< enum irq > (); break; case symbol_kind::S_mov_target: // mov_target case symbol_kind::S_mov_source: // mov_source yylhs.value.emplace< enum mov > (); break; case symbol_kind::S_mov_op: // mov_op yylhs.value.emplace< enum mov_op > (); break; case symbol_kind::S_INT: // "integer" yylhs.value.emplace< int > (); break; case symbol_kind::S_instruction: // instruction case symbol_kind::S_base_instruction: // base_instruction yylhs.value.emplace< std::shared_ptr > (); break; case symbol_kind::S_value: // value case symbol_kind::S_expression: // expression case symbol_kind::S_delay: // delay case symbol_kind::S_sideset: // sideset yylhs.value.emplace< std::shared_ptr > (); break; case symbol_kind::S_label_decl: // label_decl case symbol_kind::S_symbol_def: // symbol_def yylhs.value.emplace< std::shared_ptr > (); break; case symbol_kind::S_wait_source: // wait_source yylhs.value.emplace< std::shared_ptr > (); break; case symbol_kind::S_ID: // "identifier" case symbol_kind::S_STRING: // "string" case symbol_kind::S_NON_WS: // "text" case symbol_kind::S_CODE_BLOCK_START: // "code block" case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE yylhs.value.emplace< std::string > (); break; default: break; } // Default location. { stack_type::slice range (yystack_, yylen); YYLLOC_DEFAULT (yylhs.location, range, yylen); yyerror_range[1].location = yylhs.location; } // Perform the reduction. YY_REDUCE_PRINT (yyn); #if YY_EXCEPTIONS try #endif // YY_EXCEPTIONS { switch (yyn) { case 2: // file: lines "end of file" { if (pioasm.error_count || pioasm.write_output()) YYABORT; } break; case 5: // line: ".program" "identifier" { if (!pioasm.add_program(yylhs.location, yystack_[0].value.as < std::string > ())) { std::stringstream msg; msg << "program " << yystack_[0].value.as < std::string > () << " already exists"; error(yylhs.location, msg.str()); abort(); } } break; case 7: // line: instruction { pioasm.get_current_program(yystack_[0].location, "instruction").add_instruction(yystack_[0].value.as < std::shared_ptr > ()); } break; case 8: // line: label_decl instruction { auto &p = pioasm.get_current_program(yystack_[0].location, "instruction"); p.add_label(yystack_[1].value.as < std::shared_ptr > ()); p.add_instruction(yystack_[0].value.as < std::shared_ptr > ()); } break; case 9: // line: label_decl { pioasm.get_current_program(yystack_[0].location, "label").add_label(yystack_[0].value.as < std::shared_ptr > ()); } break; case 12: // line: error { if (pioasm.error_count > 6) { std::cerr << "\ntoo many errors; aborting.\n"; YYABORT; } } break; case 13: // code_block: "code block" "%}" { std::string of = yystack_[1].value.as < std::string > (); if (of.empty()) of = output_format::default_name; pioasm.get_current_program(yylhs.location, "code block", false, false).add_code_block( code_block(yylhs.location, of, yystack_[0].value.as < std::string > ())); } break; case 14: // label_decl: symbol_def ":" { yystack_[1].value.as < std::shared_ptr > ()->is_label = true; yylhs.value.as < std::shared_ptr > () = yystack_[1].value.as < std::shared_ptr > (); } break; case 15: // directive: ".define" symbol_def expression { yystack_[1].value.as < std::shared_ptr > ()->is_label = false; yystack_[1].value.as < std::shared_ptr > ()->value = yystack_[0].value.as < std::shared_ptr > (); pioasm.get_current_program(yystack_[2].location, ".define", false, false).add_symbol(yystack_[1].value.as < std::shared_ptr > ()); } break; case 16: // directive: ".origin" value { pioasm.get_current_program(yystack_[1].location, ".origin", true).set_origin(yylhs.location, yystack_[0].value.as < std::shared_ptr > ()); } break; case 17: // directive: ".side_set" value "opt" "pindirs" { pioasm.get_current_program(yystack_[3].location, ".side_set", true).set_sideset(yylhs.location, yystack_[2].value.as < std::shared_ptr > (), true, true); } break; case 18: // directive: ".side_set" value "opt" { pioasm.get_current_program(yystack_[2].location, ".side_set", true).set_sideset(yylhs.location, yystack_[1].value.as < std::shared_ptr > (), true, false); } break; case 19: // directive: ".side_set" value "pindirs" { pioasm.get_current_program(yystack_[2].location, ".side_set", true).set_sideset(yylhs.location, yystack_[1].value.as < std::shared_ptr > (), false, true); } break; case 20: // directive: ".side_set" value { pioasm.get_current_program(yystack_[1].location, ".side_set", true).set_sideset(yylhs.location, yystack_[0].value.as < std::shared_ptr > (), false, false); } break; case 21: // directive: ".wrap_target" { pioasm.get_current_program(yystack_[0].location, ".wrap_target").set_wrap_target(yylhs.location); } break; case 22: // directive: ".wrap" { pioasm.get_current_program(yystack_[0].location, ".wrap").set_wrap(yylhs.location); } break; case 23: // directive: ".word" value { pioasm.get_current_program(yystack_[1].location, "instruction").add_instruction(std::shared_ptr(new instr_word(yylhs.location, yystack_[0].value.as < std::shared_ptr > ()))); } break; case 24: // directive: ".lang_opt" "text" "text" "=" "integer" { pioasm.get_current_program(yystack_[4].location, ".lang_opt").add_lang_opt(yystack_[3].value.as < std::string > (), yystack_[2].value.as < std::string > (), std::to_string(yystack_[0].value.as < int > ())); } break; case 25: // directive: ".lang_opt" "text" "text" "=" "string" { pioasm.get_current_program(yystack_[4].location, ".lang_opt").add_lang_opt(yystack_[3].value.as < std::string > (), yystack_[2].value.as < std::string > (), yystack_[0].value.as < std::string > ()); } break; case 26: // directive: ".lang_opt" "text" "text" "=" "text" { pioasm.get_current_program(yystack_[4].location, ".lang_opt").add_lang_opt(yystack_[3].value.as < std::string > (), yystack_[2].value.as < std::string > (), yystack_[0].value.as < std::string > ()); } break; case 27: // directive: ".lang_opt" error { error(yylhs.location, "expected format is .lang_opt language option_name = option_value"); } break; case 28: // directive: UNKNOWN_DIRECTIVE { std::stringstream msg; msg << "unknown directive " << yystack_[0].value.as < std::string > (); throw syntax_error(yylhs.location, msg.str()); } break; case 29: // value: "integer" { yylhs.value.as < std::shared_ptr > () = resolvable_int(yylhs.location, yystack_[0].value.as < int > ()); } break; case 30: // value: "identifier" { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new name_ref(yylhs.location, yystack_[0].value.as < std::string > ())); } break; case 31: // value: "(" expression ")" { yylhs.value.as < std::shared_ptr > () = yystack_[1].value.as < std::shared_ptr > (); } break; case 32: // expression: value { yylhs.value.as < std::shared_ptr > () = yystack_[0].value.as < std::shared_ptr > (); } break; case 33: // expression: expression "+" expression { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new binary_operation(yylhs.location, binary_operation::add, yystack_[2].value.as < std::shared_ptr > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 34: // expression: expression "-" expression { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new binary_operation(yylhs.location, binary_operation::subtract, yystack_[2].value.as < std::shared_ptr > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 35: // expression: expression "*" expression { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new binary_operation(yylhs.location, binary_operation::multiply, yystack_[2].value.as < std::shared_ptr > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 36: // expression: expression "/" expression { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new binary_operation(yylhs.location, binary_operation::divide, yystack_[2].value.as < std::shared_ptr > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 37: // expression: expression "|" expression { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new binary_operation(yylhs.location, binary_operation::or_, yystack_[2].value.as < std::shared_ptr > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 38: // expression: expression "&" expression { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new binary_operation(yylhs.location, binary_operation::and_, yystack_[2].value.as < std::shared_ptr > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 39: // expression: expression "^" expression { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new binary_operation(yylhs.location, binary_operation::xor_, yystack_[2].value.as < std::shared_ptr > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 40: // expression: "-" expression { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new unary_operation(yylhs.location, unary_operation::negate, yystack_[0].value.as < std::shared_ptr > ())); } break; case 41: // expression: "::" expression { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new unary_operation(yylhs.location, unary_operation::reverse, yystack_[0].value.as < std::shared_ptr > ())); } break; case 42: // instruction: base_instruction sideset delay { yylhs.value.as < std::shared_ptr > () = yystack_[2].value.as < std::shared_ptr > (); yylhs.value.as < std::shared_ptr > ()->sideset = yystack_[1].value.as < std::shared_ptr > (); yylhs.value.as < std::shared_ptr > ()->delay = yystack_[0].value.as < std::shared_ptr > (); } break; case 43: // instruction: base_instruction delay sideset { yylhs.value.as < std::shared_ptr > () = yystack_[2].value.as < std::shared_ptr > (); yylhs.value.as < std::shared_ptr > ()->delay = yystack_[1].value.as < std::shared_ptr > (); yylhs.value.as < std::shared_ptr > ()->sideset = yystack_[0].value.as < std::shared_ptr > (); } break; case 44: // instruction: base_instruction sideset { yylhs.value.as < std::shared_ptr > () = yystack_[1].value.as < std::shared_ptr > (); yylhs.value.as < std::shared_ptr > ()->sideset = yystack_[0].value.as < std::shared_ptr > (); yylhs.value.as < std::shared_ptr > ()->delay = resolvable_int(yylhs.location, 0); } break; case 45: // instruction: base_instruction delay { yylhs.value.as < std::shared_ptr > () = yystack_[1].value.as < std::shared_ptr > (); yylhs.value.as < std::shared_ptr > ()->delay = yystack_[0].value.as < std::shared_ptr > (); } break; case 46: // instruction: base_instruction { yylhs.value.as < std::shared_ptr > () = yystack_[0].value.as < std::shared_ptr > (); yylhs.value.as < std::shared_ptr > ()->delay = resolvable_int(yylhs.location, 0); } break; case 47: // base_instruction: "nop" { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_nop(yylhs.location)); } break; case 48: // base_instruction: "jmp" condition comma expression { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_jmp(yylhs.location, yystack_[2].value.as < enum condition > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 49: // base_instruction: "wait" value wait_source { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_wait(yylhs.location, yystack_[1].value.as < std::shared_ptr > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 50: // base_instruction: "wait" value "," value { std::stringstream msg; location l; l.begin = yystack_[2].location.end; l.end = yystack_[1].location.end; msg << "expected irq, gpio or pin after the polarity value and before the \",\""; throw yy::parser::syntax_error(l, msg.str()); } break; case 51: // base_instruction: "wait" wait_source { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_wait(yylhs.location, resolvable_int(yylhs.location, 1), yystack_[0].value.as < std::shared_ptr > ())); } break; case 52: // base_instruction: "in" in_source comma value { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_in(yylhs.location, yystack_[2].value.as < enum in_out_set > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 53: // base_instruction: "out" out_target comma value { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_out(yylhs.location, yystack_[2].value.as < enum in_out_set > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 54: // base_instruction: "push" if_full blocking { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_push(yylhs.location, yystack_[1].value.as < bool > (), yystack_[0].value.as < bool > ())); } break; case 55: // base_instruction: "pull" if_empty blocking { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_pull(yylhs.location, yystack_[1].value.as < bool > (), yystack_[0].value.as < bool > ())); } break; case 56: // base_instruction: "mov" mov_target comma mov_op mov_source { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_mov(yylhs.location, yystack_[3].value.as < enum mov > (), yystack_[0].value.as < enum mov > (), yystack_[1].value.as < enum mov_op > ())); } break; case 57: // base_instruction: "irq" irq_modifiers value "rel" { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_irq(yylhs.location, yystack_[2].value.as < enum irq > (), yystack_[1].value.as < std::shared_ptr > (), true)); } break; case 58: // base_instruction: "irq" irq_modifiers value { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_irq(yylhs.location, yystack_[1].value.as < enum irq > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 59: // base_instruction: "set" set_target comma value { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new instr_set(yylhs.location, yystack_[2].value.as < enum in_out_set > (), yystack_[0].value.as < std::shared_ptr > ())); } break; case 60: // delay: "[" expression "]" { yylhs.value.as < std::shared_ptr > () = yystack_[1].value.as < std::shared_ptr > (); } break; case 61: // sideset: "side" value { yylhs.value.as < std::shared_ptr > () = yystack_[0].value.as < std::shared_ptr > (); } break; case 62: // condition: "!" "x" { yylhs.value.as < enum condition > () = condition::xz; } break; case 63: // condition: "x" "--" { yylhs.value.as < enum condition > () = condition::xnz__; } break; case 64: // condition: "!" "y" { yylhs.value.as < enum condition > () = condition::yz; } break; case 65: // condition: "y" "--" { yylhs.value.as < enum condition > () = condition::ynz__; } break; case 66: // condition: "x" "!=" "y" { yylhs.value.as < enum condition > () = condition::xney; } break; case 67: // condition: "pin" { yylhs.value.as < enum condition > () = condition::pin; } break; case 68: // condition: "!" "osre" { yylhs.value.as < enum condition > () = condition::osrez; } break; case 69: // condition: %empty { yylhs.value.as < enum condition > () = condition::al; } break; case 70: // wait_source: "irq" comma value "rel" { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new wait_source(wait_source::irq, yystack_[1].value.as < std::shared_ptr > (), true)); } break; case 71: // wait_source: "irq" comma value { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new wait_source(wait_source::irq, yystack_[0].value.as < std::shared_ptr > (), false)); } break; case 72: // wait_source: "gpio" comma value { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new wait_source(wait_source::gpio, yystack_[0].value.as < std::shared_ptr > ())); } break; case 73: // wait_source: "pin" comma value { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new wait_source(wait_source::pin, yystack_[0].value.as < std::shared_ptr > ())); } break; case 76: // in_source: "pins" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_pins; } break; case 77: // in_source: "x" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_x; } break; case 78: // in_source: "y" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_y; } break; case 79: // in_source: "null" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_null; } break; case 80: // in_source: "isr" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_isr; } break; case 81: // in_source: "osr" { yylhs.value.as < enum in_out_set > () = in_out_set::in_osr; } break; case 82: // in_source: "status" { yylhs.value.as < enum in_out_set > () = in_out_set::in_status; } break; case 83: // out_target: "pins" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_pins; } break; case 84: // out_target: "x" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_x; } break; case 85: // out_target: "y" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_y; } break; case 86: // out_target: "null" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_null; } break; case 87: // out_target: "pindirs" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_pindirs; } break; case 88: // out_target: "isr" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_isr; } break; case 89: // out_target: "pc" { yylhs.value.as < enum in_out_set > () = in_out_set::out_set_pc; } break; case 90: // out_target: "exec" { yylhs.value.as < enum in_out_set > () = in_out_set::out_exec; } break; case 91: // mov_target: "pins" { yylhs.value.as < enum mov > () = mov::pins; } break; case 92: // mov_target: "x" { yylhs.value.as < enum mov > () = mov::x; } break; case 93: // mov_target: "y" { yylhs.value.as < enum mov > () = mov::y; } break; case 94: // mov_target: "exec" { yylhs.value.as < enum mov > () = mov::exec; } break; case 95: // mov_target: "pc" { yylhs.value.as < enum mov > () = mov::pc; } break; case 96: // mov_target: "isr" { yylhs.value.as < enum mov > () = mov::isr; } break; case 97: // mov_target: "osr" { yylhs.value.as < enum mov > () = mov::osr; } break; case 98: // mov_source: "pins" { yylhs.value.as < enum mov > () = mov::pins; } break; case 99: // mov_source: "x" { yylhs.value.as < enum mov > () = mov::x; } break; case 100: // mov_source: "y" { yylhs.value.as < enum mov > () = mov::y; } break; case 101: // mov_source: "null" { yylhs.value.as < enum mov > () = mov::null; } break; case 102: // mov_source: "status" { yylhs.value.as < enum mov > () = mov::status; } break; case 103: // mov_source: "isr" { yylhs.value.as < enum mov > () = mov::isr; } break; case 104: // mov_source: "osr" { yylhs.value.as < enum mov > () = mov::osr; } break; case 105: // mov_op: "!" { yylhs.value.as < enum mov_op > () = mov_op::invert; } break; case 106: // mov_op: "::" { yylhs.value.as < enum mov_op > () = mov_op::bit_reverse; } break; case 107: // mov_op: %empty { yylhs.value.as < enum mov_op > () = mov_op::none; } break; case 108: // set_target: "pins" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_pins; } break; case 109: // set_target: "x" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_x; } break; case 110: // set_target: "y" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_y; } break; case 111: // set_target: "pindirs" { yylhs.value.as < enum in_out_set > () = in_out_set::in_out_set_pindirs; } break; case 112: // if_full: "iffull" { yylhs.value.as < bool > () = true; } break; case 113: // if_full: %empty { yylhs.value.as < bool > () = false; } break; case 114: // if_empty: "ifempty" { yylhs.value.as < bool > () = true; } break; case 115: // if_empty: %empty { yylhs.value.as < bool > () = false; } break; case 116: // blocking: "block" { yylhs.value.as < bool > () = true; } break; case 117: // blocking: "noblock" { yylhs.value.as < bool > () = false; } break; case 118: // blocking: %empty { yylhs.value.as < bool > () = true; } break; case 119: // irq_modifiers: "clear" { yylhs.value.as < enum irq > () = irq::clear; } break; case 120: // irq_modifiers: "wait" { yylhs.value.as < enum irq > () = irq::set_wait; } break; case 121: // irq_modifiers: "nowait" { yylhs.value.as < enum irq > () = irq::set; } break; case 122: // irq_modifiers: "set" { yylhs.value.as < enum irq > () = irq::set; } break; case 123: // irq_modifiers: %empty { yylhs.value.as < enum irq > () = irq::set; } break; case 124: // symbol_def: "identifier" { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new symbol(yylhs.location, yystack_[0].value.as < std::string > ())); } break; case 125: // symbol_def: "public" "identifier" { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new symbol(yylhs.location, yystack_[0].value.as < std::string > (), true)); } break; case 126: // symbol_def: "*" "identifier" { yylhs.value.as < std::shared_ptr > () = std::shared_ptr(new symbol(yylhs.location, yystack_[0].value.as < std::string > (), true)); } break; default: break; } } #if YY_EXCEPTIONS catch (const syntax_error& yyexc) { YYCDEBUG << "Caught exception: " << yyexc.what() << '\n'; error (yyexc); YYERROR; } #endif // YY_EXCEPTIONS YY_SYMBOL_PRINT ("-> $$ =", yylhs); yypop_ (yylen); yylen = 0; // Shift the result of the reduction. yypush_ (YY_NULLPTR, YY_MOVE (yylhs)); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: // If not already recovering from an error, report this error. if (!yyerrstatus_) { ++yynerrs_; context yyctx (*this, yyla); std::string msg = yysyntax_error_ (yyctx); error (yyla.location, YY_MOVE (msg)); } yyerror_range[1].location = yyla.location; if (yyerrstatus_ == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ // Return failure if at end of input. if (yyla.kind () == symbol_kind::S_YYEOF) YYABORT; else if (!yyla.empty ()) { yy_destroy_ ("Error: discarding", yyla); yyla.clear (); } } // Else will try to reuse lookahead token after shifting the error token. goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (false) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ yypop_ (yylen); yylen = 0; YY_STACK_PRINT (); goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus_ = 3; // Each real token shifted decrements this. // Pop stack until we find a state that shifts the error token. for (;;) { yyn = yypact_[+yystack_[0].state]; if (!yy_pact_value_is_default_ (yyn)) { yyn += symbol_kind::S_YYerror; if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == symbol_kind::S_YYerror) { yyn = yytable_[yyn]; if (0 < yyn) break; } } // Pop the current state because it cannot handle the error token. if (yystack_.size () == 1) YYABORT; yyerror_range[1].location = yystack_[0].location; yy_destroy_ ("Error: popping", yystack_[0]); yypop_ (); YY_STACK_PRINT (); } { stack_symbol_type error_token; yyerror_range[2].location = yyla.location; YYLLOC_DEFAULT (error_token.location, yyerror_range, 2); // Shift the error token. yy_lac_discard_ ("error recovery"); error_token.state = state_type (yyn); yypush_ ("Shifting", YY_MOVE (error_token)); } goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (!yyla.empty ()) yy_destroy_ ("Cleanup: discarding lookahead", yyla); /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ yypop_ (yylen); YY_STACK_PRINT (); while (1 < yystack_.size ()) { yy_destroy_ ("Cleanup: popping", yystack_[0]); yypop_ (); } return yyresult; } #if YY_EXCEPTIONS catch (...) { YYCDEBUG << "Exception caught: cleaning lookahead and stack\n"; // Do not try to display the values of the reclaimed symbols, // as their printers might throw an exception. if (!yyla.empty ()) yy_destroy_ (YY_NULLPTR, yyla); while (1 < yystack_.size ()) { yy_destroy_ (YY_NULLPTR, yystack_[0]); yypop_ (); } throw; } #endif // YY_EXCEPTIONS } void parser::error (const syntax_error& yyexc) { error (yyexc.location, yyexc.what ()); } /* Return YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. */ std::string parser::yytnamerr_ (const char *yystr) { if (*yystr == '"') { std::string yyr; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; else goto append; append: default: yyr += *yyp; break; case '"': return yyr; } do_not_strip_quotes: ; } return yystr; } std::string parser::symbol_name (symbol_kind_type yysymbol) { return yytnamerr_ (yytname_[yysymbol]); } // parser::context. parser::context::context (const parser& yyparser, const symbol_type& yyla) : yyparser_ (yyparser) , yyla_ (yyla) {} int parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const { // Actual number of expected tokens int yycount = 0; #if YYDEBUG // Execute LAC once. We don't care if it is successful, we // only do it for the sake of debugging output. if (!yyparser_.yy_lac_established_) yyparser_.yy_lac_check_ (yyla_.kind ()); #endif for (int yyx = 0; yyx < YYNTOKENS; ++yyx) { symbol_kind_type yysym = YY_CAST (symbol_kind_type, yyx); if (yysym != symbol_kind::S_YYerror && yysym != symbol_kind::S_YYUNDEF && yyparser_.yy_lac_check_ (yysym)) { if (!yyarg) ++yycount; else if (yycount == yyargn) return 0; else yyarg[yycount++] = yysym; } } if (yyarg && yycount == 0 && 0 < yyargn) yyarg[0] = symbol_kind::S_YYEMPTY; return yycount; } bool parser::yy_lac_check_ (symbol_kind_type yytoken) const { // Logically, the yylac_stack's lifetime is confined to this function. // Clear it, to get rid of potential left-overs from previous call. yylac_stack_.clear (); // Reduce until we encounter a shift and thereby accept the token. #if YYDEBUG YYCDEBUG << "LAC: checking lookahead " << symbol_name (yytoken) << ':'; #endif std::ptrdiff_t lac_top = 0; while (true) { state_type top_state = (yylac_stack_.empty () ? yystack_[lac_top].state : yylac_stack_.back ()); int yyrule = yypact_[+top_state]; if (yy_pact_value_is_default_ (yyrule) || (yyrule += yytoken) < 0 || yylast_ < yyrule || yycheck_[yyrule] != yytoken) { // Use the default action. yyrule = yydefact_[+top_state]; if (yyrule == 0) { YYCDEBUG << " Err\n"; return false; } } else { // Use the action from yytable. yyrule = yytable_[yyrule]; if (yy_table_value_is_error_ (yyrule)) { YYCDEBUG << " Err\n"; return false; } if (0 < yyrule) { YYCDEBUG << " S" << yyrule << '\n'; return true; } yyrule = -yyrule; } // By now we know we have to simulate a reduce. YYCDEBUG << " R" << yyrule - 1; // Pop the corresponding number of values from the stack. { std::ptrdiff_t yylen = yyr2_[yyrule]; // First pop from the LAC stack as many tokens as possible. std::ptrdiff_t lac_size = std::ptrdiff_t (yylac_stack_.size ()); if (yylen < lac_size) { yylac_stack_.resize (std::size_t (lac_size - yylen)); yylen = 0; } else if (lac_size) { yylac_stack_.clear (); yylen -= lac_size; } // Only afterwards look at the main stack. // We simulate popping elements by incrementing lac_top. lac_top += yylen; } // Keep top_state in sync with the updated stack. top_state = (yylac_stack_.empty () ? yystack_[lac_top].state : yylac_stack_.back ()); // Push the resulting state of the reduction. state_type state = yy_lr_goto_state_ (top_state, yyr1_[yyrule]); YYCDEBUG << " G" << int (state); yylac_stack_.push_back (state); } } // Establish the initial context if no initial context currently exists. bool parser::yy_lac_establish_ (symbol_kind_type yytoken) { /* Establish the initial context for the current lookahead if no initial context is currently established. We define a context as a snapshot of the parser stacks. We define the initial context for a lookahead as the context in which the parser initially examines that lookahead in order to select a syntactic action. Thus, if the lookahead eventually proves syntactically unacceptable (possibly in a later context reached via a series of reductions), the initial context can be used to determine the exact set of tokens that would be syntactically acceptable in the lookahead's place. Moreover, it is the context after which any further semantic actions would be erroneous because they would be determined by a syntactically unacceptable token. yy_lac_establish_ should be invoked when a reduction is about to be performed in an inconsistent state (which, for the purposes of LAC, includes consistent states that don't know they're consistent because their default reductions have been disabled). For parse.lac=full, the implementation of yy_lac_establish_ is as follows. If no initial context is currently established for the current lookahead, then check if that lookahead can eventually be shifted if syntactic actions continue from the current context. */ if (!yy_lac_established_) { #if YYDEBUG YYCDEBUG << "LAC: initial context established for " << symbol_name (yytoken) << '\n'; #endif yy_lac_established_ = true; return yy_lac_check_ (yytoken); } return true; } // Discard any previous initial lookahead context. void parser::yy_lac_discard_ (const char* evt) { /* Discard any previous initial lookahead context because of Event, which may be a lookahead change or an invalidation of the currently established initial context for the current lookahead. The most common example of a lookahead change is a shift. An example of both cases is syntax error recovery. That is, a syntax error occurs when the lookahead is syntactically erroneous for the currently established initial context, so error recovery manipulates the parser stacks to try to find a new initial context in which the current lookahead is syntactically acceptable. If it fails to find such a context, it discards the lookahead. */ if (yy_lac_established_) { YYCDEBUG << "LAC: initial context discarded due to " << evt << '\n'; yy_lac_established_ = false; } } int parser::yy_syntax_error_arguments_ (const context& yyctx, symbol_kind_type yyarg[], int yyargn) const { /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yyla) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yyla. (However, yyla is currently not documented for users.) In the first two cases, it might appear that the current syntax error should have been detected in the previous state when yy_lac_check was invoked. However, at that time, there might have been a different syntax error that discarded a different initial context during error recovery, leaving behind the current lookahead. */ if (!yyctx.lookahead ().empty ()) { if (yyarg) yyarg[0] = yyctx.token (); int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1); return yyn + 1; } return 0; } // Generate an error message. std::string parser::yysyntax_error_ (const context& yyctx) const { // Its maximum. enum { YYARGS_MAX = 5 }; // Arguments of yyformat. symbol_kind_type yyarg[YYARGS_MAX]; int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX); char const* yyformat = YY_NULLPTR; switch (yycount) { #define YYCASE_(N, S) \ case N: \ yyformat = S; \ break default: // Avoid compiler warnings. YYCASE_ (0, YY_("syntax error")); YYCASE_ (1, YY_("syntax error, unexpected %s")); YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); #undef YYCASE_ } std::string yyres; // Argument number. std::ptrdiff_t yyi = 0; for (char const* yyp = yyformat; *yyp; ++yyp) if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) { yyres += symbol_name (yyarg[yyi++]); ++yyp; } else yyres += *yyp; return yyres; } const signed char parser::yypact_ninf_ = -52; const signed char parser::yytable_ninf_ = -12; const short parser::yypact_[] = { 3, -52, -41, -39, -52, -52, -3, 5, 5, 5, 7, 44, 10, 0, 101, 18, 30, 94, 51, 50, -52, 20, -52, 13, -52, 88, 17, -52, -52, 129, -52, -52, 2, 85, -52, -52, 1, 1, -52, -52, 40, -52, -52, -52, 42, 58, -52, 28, 96, 120, 120, 120, 120, 15, -52, -52, -52, -52, -52, -52, -52, -52, 120, -52, -52, -52, -52, -52, -52, -52, -52, 120, -52, 63, -52, 63, -52, -52, -52, -52, -52, -52, -52, 120, -52, -52, -52, -52, 5, -52, -52, -52, -52, 120, -52, -52, -52, -52, 3, -52, 1, 5, 45, 130, -52, 1, 1, -52, 177, 162, -52, 97, 132, -52, -52, -52, -52, 87, -52, -52, 1, 5, 5, 5, 5, -52, 5, 5, -52, -52, -52, -52, 29, 118, 5, -52, 170, -52, -52, -52, 182, 177, 1, 1, 1, 1, 1, 1, 1, -52, -52, -51, -52, 177, 119, -52, -52, -52, -52, -52, -52, -52, 82, -52, -52, -52, 182, 182, 107, 107, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52 }; const signed char parser::yydefact_[] = { 0, 12, 0, 0, 21, 22, 0, 0, 0, 0, 0, 69, 0, 0, 0, 113, 115, 0, 123, 0, 47, 0, 124, 0, 28, 0, 0, 3, 10, 9, 6, 7, 46, 0, 126, 5, 0, 0, 30, 29, 20, 23, 16, 27, 0, 0, 67, 0, 0, 75, 75, 75, 75, 0, 51, 76, 79, 77, 78, 80, 81, 82, 75, 83, 86, 87, 84, 85, 90, 89, 88, 75, 112, 118, 114, 118, 91, 92, 93, 94, 95, 96, 97, 75, 120, 122, 121, 119, 0, 108, 111, 109, 110, 75, 125, 13, 1, 2, 0, 8, 0, 0, 45, 44, 14, 0, 0, 32, 15, 0, 19, 18, 0, 68, 62, 64, 63, 0, 65, 74, 0, 0, 0, 0, 0, 49, 0, 0, 116, 117, 54, 55, 107, 58, 0, 4, 0, 61, 43, 42, 40, 41, 0, 0, 0, 0, 0, 0, 0, 31, 17, 0, 66, 48, 71, 73, 72, 50, 52, 53, 105, 106, 0, 57, 59, 60, 33, 34, 35, 36, 37, 38, 39, 25, 26, 24, 70, 98, 101, 99, 100, 103, 104, 102, 56 }; const short parser::yypgoto_[] = { -52, -52, -52, 102, -52, -52, -52, -7, -14, 172, -52, 99, 103, -52, 146, 25, -52, -52, -52, -52, -52, -52, -52, -52, 128, -52, 198 }; const short parser::yydefgoto_[] = { -1, 25, 26, 27, 28, 29, 30, 107, 108, 31, 32, 102, 103, 49, 54, 120, 62, 71, 83, 184, 162, 93, 73, 75, 130, 88, 33 }; const short parser::yytable_[] = { 40, 41, 42, -11, 1, 53, -11, 37, 43, 2, 100, 37, 105, 173, 174, 2, 37, 97, 175, 124, 98, 106, 34, 109, 35, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 55, 56, 116, 117, 50, 160, 161, 51, 52, 50, 57, 58, 51, 52, 59, 60, 21, 22, 61, 101, 45, 38, 21, 22, 72, 38, 23, 39, 24, 44, 38, 39, 121, 122, 123, 74, 39, 95, 133, 84, 94, 46, 110, 136, 126, 96, 85, 104, 140, 141, 89, 137, 90, 127, 47, 48, 111, 113, 86, 87, 91, 92, 101, 153, 112, 132, 128, 129, 114, 115, 118, 154, 155, 156, 157, 134, 158, 159, 146, 147, 148, 119, 177, 178, 164, 166, 167, 168, 169, 170, 171, 172, 179, 180, 76, 100, 181, 182, 152, 150, 183, 63, 64, 65, 77, 78, 79, 80, 81, 82, 151, 66, 67, 68, 69, 70, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 149, 163, 176, 142, 143, 144, 145, 146, 147, 148, 165, 142, 143, 144, 145, 146, 147, 148, 142, 143, 144, 145, 146, 147, 148, 144, 145, 146, 147, 148, 125, 135, 99, 139, 131, 36, 138 }; const unsigned char parser::yycheck_[] = { 7, 8, 9, 0, 1, 12, 3, 6, 1, 12, 8, 6, 11, 64, 65, 12, 6, 0, 69, 4, 3, 20, 63, 37, 63, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 43, 44, 17, 18, 37, 19, 20, 40, 41, 37, 53, 54, 40, 41, 57, 58, 62, 63, 61, 60, 19, 63, 62, 63, 49, 63, 66, 69, 68, 65, 63, 69, 50, 51, 52, 48, 69, 67, 88, 31, 63, 40, 45, 100, 62, 0, 38, 5, 105, 106, 43, 101, 45, 71, 53, 54, 59, 42, 50, 51, 53, 54, 60, 120, 65, 83, 46, 47, 53, 54, 17, 121, 122, 123, 124, 93, 126, 127, 14, 15, 16, 4, 43, 44, 134, 142, 143, 144, 145, 146, 147, 148, 53, 54, 43, 8, 57, 58, 54, 45, 61, 43, 44, 45, 53, 54, 55, 56, 57, 58, 21, 53, 54, 55, 56, 57, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 7, 52, 52, 10, 11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 10, 11, 12, 13, 14, 15, 16, 12, 13, 14, 15, 16, 53, 98, 29, 103, 75, 6, 102 }; const signed char parser::yystos_[] = { 0, 1, 12, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 62, 63, 66, 68, 71, 72, 73, 74, 75, 76, 79, 80, 96, 63, 63, 96, 6, 63, 69, 77, 77, 77, 1, 65, 19, 40, 53, 54, 83, 37, 40, 41, 77, 84, 43, 44, 53, 54, 57, 58, 61, 86, 43, 44, 45, 53, 54, 55, 56, 57, 87, 49, 92, 48, 93, 43, 53, 54, 55, 56, 57, 58, 88, 31, 38, 50, 51, 95, 43, 45, 53, 54, 91, 63, 67, 0, 0, 3, 79, 8, 60, 81, 82, 5, 11, 20, 77, 78, 78, 45, 59, 65, 42, 53, 54, 17, 18, 17, 4, 85, 85, 85, 85, 4, 84, 85, 85, 46, 47, 94, 94, 85, 77, 85, 73, 78, 77, 82, 81, 78, 78, 10, 11, 12, 13, 14, 15, 16, 7, 45, 21, 54, 78, 77, 77, 77, 77, 77, 77, 19, 20, 90, 52, 77, 9, 78, 78, 78, 78, 78, 78, 78, 64, 65, 69, 52, 43, 44, 53, 54, 57, 58, 61, 89 }; const signed char parser::yyr1_[] = { 0, 70, 71, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 74, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 82, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 85, 85, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 91, 91, 91, 91, 92, 92, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 96, 96, 96 }; const signed char parser::yyr2_[] = { 0, 2, 2, 1, 3, 2, 1, 1, 2, 1, 1, 0, 1, 2, 2, 3, 2, 4, 3, 3, 2, 1, 1, 2, 5, 5, 5, 2, 1, 1, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 2, 1, 1, 4, 3, 4, 2, 4, 4, 3, 3, 5, 4, 3, 4, 3, 2, 2, 2, 2, 2, 3, 1, 2, 0, 4, 3, 3, 3, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 2, 2 }; #if YYDEBUG || 1 // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. // First, the terminals, then, starting at \a YYNTOKENS, nonterminals. const char* const parser::yytname_[] = { "\"end of file\"", "error", "\"invalid token\"", "\"end of line\"", "\",\"", "\":\"", "\"(\"", "\")\"", "\"[\"", "\"]\"", "\"+\"", "\"-\"", "\"*\"", "\"/\"", "\"|\"", "\"&\"", "\"^\"", "\"--\"", "\"!=\"", "\"!\"", "\"::\"", "\"=\"", "\".program\"", "\".wrap_target\"", "\".wrap\"", "\".define\"", "\".side_set\"", "\".word\"", "\".origin\"", "\".lang_opt\"", "\"jmp\"", "\"wait\"", "\"in\"", "\"out\"", "\"push\"", "\"pull\"", "\"mov\"", "\"irq\"", "\"set\"", "\"nop\"", "\"pin\"", "\"gpio\"", "\"osre\"", "\"pins\"", "\"null\"", "\"pindirs\"", "\"block\"", "\"noblock\"", "\"ifempty\"", "\"iffull\"", "\"nowait\"", "\"clear\"", "\"rel\"", "\"x\"", "\"y\"", "\"exec\"", "\"pc\"", "\"isr\"", "\"osr\"", "\"opt\"", "\"side\"", "\"status\"", "\"public\"", "\"identifier\"", "\"string\"", "\"text\"", "\"code block\"", "\"%}\"", "UNKNOWN_DIRECTIVE", "\"integer\"", "$accept", "file", "lines", "line", "code_block", "label_decl", "directive", "value", "expression", "instruction", "base_instruction", "delay", "sideset", "condition", "wait_source", "comma", "in_source", "out_target", "mov_target", "mov_source", "mov_op", "set_target", "if_full", "if_empty", "blocking", "irq_modifiers", "symbol_def", YY_NULLPTR }; #endif #if YYDEBUG const short parser::yyrline_[] = { 0, 136, 136, 140, 141, 144, 145, 146, 147, 148, 149, 150, 151, 155, 159, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 180, 181, 182, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 199, 200, 201, 202, 203, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 224, 228, 232, 233, 234, 235, 236, 237, 238, 239, 243, 244, 245, 246, 248, 248, 251, 252, 253, 254, 255, 256, 257, 260, 261, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 274, 275, 276, 279, 280, 281, 282, 283, 284, 285, 289, 290, 291, 295, 296, 297, 298, 302, 303, 307, 308, 312, 313, 314, 318, 319, 320, 321, 322, 326, 327, 328 }; void parser::yy_stack_print_ () const { *yycdebug_ << "Stack now"; for (stack_type::const_iterator i = yystack_.begin (), i_end = yystack_.end (); i != i_end; ++i) *yycdebug_ << ' ' << int (i->state); *yycdebug_ << '\n'; } void parser::yy_reduce_print_ (int yyrule) const { int yylno = yyrline_[yyrule]; int yynrhs = yyr2_[yyrule]; // Print the symbols being reduced, and their result. *yycdebug_ << "Reducing stack by rule " << yyrule - 1 << " (line " << yylno << "):\n"; // The symbols being reduced. for (int yyi = 0; yyi < yynrhs; yyi++) YY_SYMBOL_PRINT (" $" << yyi + 1 << " =", yystack_[(yynrhs) - (yyi + 1)]); } #endif // YYDEBUG } // yy void yy::parser::error(const location_type& l, const std::string& m) { if (l.begin.filename) { std::cerr << l << ": " << m << '\n'; pioasm.error_count++; if (l.begin.line == l.end.line && *l.begin.filename == *l.end.filename) { std::ifstream file(l.begin.filename->c_str()); std::string line; for(int i = 0; i < l.begin.line; ++i) { std::getline(file, line); } fprintf(stderr, "%5d | %s\n", l.begin.line, line.c_str()); fprintf(stderr, "%5s | %*s", "", l.begin.column, "^"); for (int i = l.begin.column; i < l.end.column - 1; i++) { putc ('~', stderr); } putc ('\n', stderr); } } else { std::cerr << m << '\n'; } } ================================================ FILE: pico-sdk/tools/pioasm/gen/parser.hpp ================================================ // A Bison parser, made by GNU Bison 3.7.2. // Skeleton interface for Bison LALR(1) parsers in C++ // Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program 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. // This program 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 . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work // under terms of your choice, so long as that work isn't itself a // parser generator using the skeleton or a modified version thereof // as a parser skeleton. Alternatively, if you modify or redistribute // the parser skeleton itself, you may (at your option) remove this // special exception, which will cause the skeleton and the resulting // Bison output files to be licensed under the GNU General Public // License without this special exception. // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. /** ** \file pico_sdk/tools/pioasm/gen/parser.hpp ** Define the yy::parser class. */ // C++ LALR(1) parser skeleton written by Akim Demaille. // DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, // especially those whose name start with YY_ or yy_. They are // private implementation details that can be changed or removed. #ifndef YY_YY_HOME_GRAHAM_DEV_MU_PICO_SDK_TOOLS_PIOASM_GEN_PARSER_HPP_INCLUDED # define YY_YY_HOME_GRAHAM_DEV_MU_PICO_SDK_TOOLS_PIOASM_GEN_PARSER_HPP_INCLUDED // "%code requires" blocks. #include #include #include #include "pio_types.h" struct pio_assembler; #ifdef _MSC_VER #pragma warning(disable : 4065) // default only switch statement #endif # include // std::abort # include # include # include # include #if defined __cplusplus # define YY_CPLUSPLUS __cplusplus #else # define YY_CPLUSPLUS 199711L #endif // Support move semantics when possible. #if 201103L <= YY_CPLUSPLUS # define YY_MOVE std::move # define YY_MOVE_OR_COPY move # define YY_MOVE_REF(Type) Type&& # define YY_RVREF(Type) Type&& # define YY_COPY(Type) Type #else # define YY_MOVE # define YY_MOVE_OR_COPY copy # define YY_MOVE_REF(Type) Type& # define YY_RVREF(Type) const Type& # define YY_COPY(Type) const Type& #endif // Support noexcept when possible. #if 201103L <= YY_CPLUSPLUS # define YY_NOEXCEPT noexcept # define YY_NOTHROW #else # define YY_NOEXCEPT # define YY_NOTHROW throw () #endif // Support constexpr when possible. #if 201703 <= YY_CPLUSPLUS # define YY_CONSTEXPR constexpr #else # define YY_CONSTEXPR #endif # include "location.h" #ifndef YY_ASSERT # include # define YY_ASSERT assert #endif #ifndef YY_ATTRIBUTE_PURE # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define YY_ATTRIBUTE_PURE # endif #endif #ifndef YY_ATTRIBUTE_UNUSED # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define YY_ATTRIBUTE_UNUSED # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ # define YY_IGNORE_USELESS_CAST_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") # define YY_IGNORE_USELESS_CAST_END \ _Pragma ("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_END #endif # ifndef YY_CAST # ifdef __cplusplus # define YY_CAST(Type, Val) static_cast (Val) # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) # else # define YY_CAST(Type, Val) ((Type) (Val)) # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) # endif # endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif namespace yy { /// A Bison parser. class parser { public: #ifndef YYSTYPE /// A buffer to store and retrieve objects. /// /// Sort of a variant, but does not keep track of the nature /// of the stored data, since that knowledge is available /// via the current parser state. class semantic_type { public: /// Type of *this. typedef semantic_type self_type; /// Empty construction. semantic_type () YY_NOEXCEPT : yybuffer_ () {} /// Construct and fill. template semantic_type (YY_RVREF (T) t) { YY_ASSERT (sizeof (T) <= size); new (yyas_ ()) T (YY_MOVE (t)); } #if 201103L <= YY_CPLUSPLUS /// Non copyable. semantic_type (const self_type&) = delete; /// Non copyable. self_type& operator= (const self_type&) = delete; #endif /// Destruction, allowed only if empty. ~semantic_type () YY_NOEXCEPT {} # if 201103L <= YY_CPLUSPLUS /// Instantiate a \a T in here from \a t. template T& emplace (U&&... u) { return *new (yyas_ ()) T (std::forward (u)...); } # else /// Instantiate an empty \a T in here. template T& emplace () { return *new (yyas_ ()) T (); } /// Instantiate a \a T in here from \a t. template T& emplace (const T& t) { return *new (yyas_ ()) T (t); } # endif /// Instantiate an empty \a T in here. /// Obsolete, use emplace. template T& build () { return emplace (); } /// Instantiate a \a T in here from \a t. /// Obsolete, use emplace. template T& build (const T& t) { return emplace (t); } /// Accessor to a built \a T. template T& as () YY_NOEXCEPT { return *yyas_ (); } /// Const accessor to a built \a T (for %printer). template const T& as () const YY_NOEXCEPT { return *yyas_ (); } /// Swap the content with \a that, of same type. /// /// Both variants must be built beforehand, because swapping the actual /// data requires reading it (with as()), and this is not possible on /// unconstructed variants: it would require some dynamic testing, which /// should not be the variant's responsibility. /// Swapping between built and (possibly) non-built is done with /// self_type::move (). template void swap (self_type& that) YY_NOEXCEPT { std::swap (as (), that.as ()); } /// Move the content of \a that to this. /// /// Destroys \a that. template void move (self_type& that) { # if 201103L <= YY_CPLUSPLUS emplace (std::move (that.as ())); # else emplace (); swap (that); # endif that.destroy (); } # if 201103L <= YY_CPLUSPLUS /// Move the content of \a that to this. template void move (self_type&& that) { emplace (std::move (that.as ())); that.destroy (); } #endif /// Copy the content of \a that to this. template void copy (const self_type& that) { emplace (that.as ()); } /// Destroy the stored \a T. template void destroy () { as ().~T (); } private: #if YY_CPLUSPLUS < 201103L /// Non copyable. semantic_type (const self_type&); /// Non copyable. self_type& operator= (const self_type&); #endif /// Accessor to raw memory as \a T. template T* yyas_ () YY_NOEXCEPT { void *yyp = yybuffer_.yyraw; return static_cast (yyp); } /// Const accessor to raw memory as \a T. template const T* yyas_ () const YY_NOEXCEPT { const void *yyp = yybuffer_.yyraw; return static_cast (yyp); } /// An auxiliary type to compute the largest semantic type. union union_type { // if_full // if_empty // blocking char dummy1[sizeof (bool)]; // condition char dummy2[sizeof (enum condition)]; // in_source // out_target // set_target char dummy3[sizeof (enum in_out_set)]; // irq_modifiers char dummy4[sizeof (enum irq)]; // mov_target // mov_source char dummy5[sizeof (enum mov)]; // mov_op char dummy6[sizeof (enum mov_op)]; // "integer" char dummy7[sizeof (int)]; // instruction // base_instruction char dummy8[sizeof (std::shared_ptr)]; // value // expression // delay // sideset char dummy9[sizeof (std::shared_ptr)]; // label_decl // symbol_def char dummy10[sizeof (std::shared_ptr)]; // wait_source char dummy11[sizeof (std::shared_ptr)]; // "identifier" // "string" // "text" // "code block" // "%}" // UNKNOWN_DIRECTIVE char dummy12[sizeof (std::string)]; }; /// The size of the largest semantic type. enum { size = sizeof (union_type) }; /// A buffer to store semantic values. union { /// Strongest alignment constraints. long double yyalign_me; /// A buffer large enough to store any of the semantic values. char yyraw[size]; } yybuffer_; }; #else typedef YYSTYPE semantic_type; #endif /// Symbol locations. typedef location location_type; /// Syntax errors thrown from user actions. struct syntax_error : std::runtime_error { syntax_error (const location_type& l, const std::string& m) : std::runtime_error (m) , location (l) {} syntax_error (const syntax_error& s) : std::runtime_error (s.what ()) , location (s.location) {} ~syntax_error () YY_NOEXCEPT YY_NOTHROW; location_type location; }; /// Token kinds. struct token { enum token_kind_type { TOK_YYEMPTY = -2, TOK_END = 0, // "end of file" TOK_YYerror = 256, // error TOK_YYUNDEF = 257, // "invalid token" TOK_NEWLINE = 258, // "end of line" TOK_COMMA = 259, // "," TOK_COLON = 260, // ":" TOK_LPAREN = 261, // "(" TOK_RPAREN = 262, // ")" TOK_LBRACKET = 263, // "[" TOK_RBRACKET = 264, // "]" TOK_PLUS = 265, // "+" TOK_MINUS = 266, // "-" TOK_MULTIPLY = 267, // "*" TOK_DIVIDE = 268, // "/" TOK_OR = 269, // "|" TOK_AND = 270, // "&" TOK_XOR = 271, // "^" TOK_POST_DECREMENT = 272, // "--" TOK_NOT_EQUAL = 273, // "!=" TOK_NOT = 274, // "!" TOK_REVERSE = 275, // "::" TOK_EQUAL = 276, // "=" TOK_PROGRAM = 277, // ".program" TOK_WRAP_TARGET = 278, // ".wrap_target" TOK_WRAP = 279, // ".wrap" TOK_DEFINE = 280, // ".define" TOK_SIDE_SET = 281, // ".side_set" TOK_WORD = 282, // ".word" TOK_ORIGIN = 283, // ".origin" TOK_LANG_OPT = 284, // ".lang_opt" TOK_JMP = 285, // "jmp" TOK_WAIT = 286, // "wait" TOK_IN = 287, // "in" TOK_OUT = 288, // "out" TOK_PUSH = 289, // "push" TOK_PULL = 290, // "pull" TOK_MOV = 291, // "mov" TOK_IRQ = 292, // "irq" TOK_SET = 293, // "set" TOK_NOP = 294, // "nop" TOK_PIN = 295, // "pin" TOK_GPIO = 296, // "gpio" TOK_OSRE = 297, // "osre" TOK_PINS = 298, // "pins" TOK_NULL = 299, // "null" TOK_PINDIRS = 300, // "pindirs" TOK_BLOCK = 301, // "block" TOK_NOBLOCK = 302, // "noblock" TOK_IFEMPTY = 303, // "ifempty" TOK_IFFULL = 304, // "iffull" TOK_NOWAIT = 305, // "nowait" TOK_CLEAR = 306, // "clear" TOK_REL = 307, // "rel" TOK_X = 308, // "x" TOK_Y = 309, // "y" TOK_EXEC = 310, // "exec" TOK_PC = 311, // "pc" TOK_ISR = 312, // "isr" TOK_OSR = 313, // "osr" TOK_OPTIONAL = 314, // "opt" TOK_SIDE = 315, // "side" TOK_STATUS = 316, // "status" TOK_PUBLIC = 317, // "public" TOK_ID = 318, // "identifier" TOK_STRING = 319, // "string" TOK_NON_WS = 320, // "text" TOK_CODE_BLOCK_START = 321, // "code block" TOK_CODE_BLOCK_CONTENTS = 322, // "%}" TOK_UNKNOWN_DIRECTIVE = 323, // UNKNOWN_DIRECTIVE TOK_INT = 324 // "integer" }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; }; /// Token kind, as returned by yylex. typedef token::yytokentype token_kind_type; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type token_type; /// Symbol kinds. struct symbol_kind { enum symbol_kind_type { YYNTOKENS = 70, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error S_YYUNDEF = 2, // "invalid token" S_NEWLINE = 3, // "end of line" S_COMMA = 4, // "," S_COLON = 5, // ":" S_LPAREN = 6, // "(" S_RPAREN = 7, // ")" S_LBRACKET = 8, // "[" S_RBRACKET = 9, // "]" S_PLUS = 10, // "+" S_MINUS = 11, // "-" S_MULTIPLY = 12, // "*" S_DIVIDE = 13, // "/" S_OR = 14, // "|" S_AND = 15, // "&" S_XOR = 16, // "^" S_POST_DECREMENT = 17, // "--" S_NOT_EQUAL = 18, // "!=" S_NOT = 19, // "!" S_REVERSE = 20, // "::" S_EQUAL = 21, // "=" S_PROGRAM = 22, // ".program" S_WRAP_TARGET = 23, // ".wrap_target" S_WRAP = 24, // ".wrap" S_DEFINE = 25, // ".define" S_SIDE_SET = 26, // ".side_set" S_WORD = 27, // ".word" S_ORIGIN = 28, // ".origin" S_LANG_OPT = 29, // ".lang_opt" S_JMP = 30, // "jmp" S_WAIT = 31, // "wait" S_IN = 32, // "in" S_OUT = 33, // "out" S_PUSH = 34, // "push" S_PULL = 35, // "pull" S_MOV = 36, // "mov" S_IRQ = 37, // "irq" S_SET = 38, // "set" S_NOP = 39, // "nop" S_PIN = 40, // "pin" S_GPIO = 41, // "gpio" S_OSRE = 42, // "osre" S_PINS = 43, // "pins" S_NULL = 44, // "null" S_PINDIRS = 45, // "pindirs" S_BLOCK = 46, // "block" S_NOBLOCK = 47, // "noblock" S_IFEMPTY = 48, // "ifempty" S_IFFULL = 49, // "iffull" S_NOWAIT = 50, // "nowait" S_CLEAR = 51, // "clear" S_REL = 52, // "rel" S_X = 53, // "x" S_Y = 54, // "y" S_EXEC = 55, // "exec" S_PC = 56, // "pc" S_ISR = 57, // "isr" S_OSR = 58, // "osr" S_OPTIONAL = 59, // "opt" S_SIDE = 60, // "side" S_STATUS = 61, // "status" S_PUBLIC = 62, // "public" S_ID = 63, // "identifier" S_STRING = 64, // "string" S_NON_WS = 65, // "text" S_CODE_BLOCK_START = 66, // "code block" S_CODE_BLOCK_CONTENTS = 67, // "%}" S_UNKNOWN_DIRECTIVE = 68, // UNKNOWN_DIRECTIVE S_INT = 69, // "integer" S_YYACCEPT = 70, // $accept S_file = 71, // file S_lines = 72, // lines S_line = 73, // line S_code_block = 74, // code_block S_label_decl = 75, // label_decl S_directive = 76, // directive S_value = 77, // value S_expression = 78, // expression S_instruction = 79, // instruction S_base_instruction = 80, // base_instruction S_delay = 81, // delay S_sideset = 82, // sideset S_condition = 83, // condition S_wait_source = 84, // wait_source S_comma = 85, // comma S_in_source = 86, // in_source S_out_target = 87, // out_target S_mov_target = 88, // mov_target S_mov_source = 89, // mov_source S_mov_op = 90, // mov_op S_set_target = 91, // set_target S_if_full = 92, // if_full S_if_empty = 93, // if_empty S_blocking = 94, // blocking S_irq_modifiers = 95, // irq_modifiers S_symbol_def = 96 // symbol_def }; }; /// (Internal) symbol kind. typedef symbol_kind::symbol_kind_type symbol_kind_type; /// The number of tokens. static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS; /// A complete symbol. /// /// Expects its Base type to provide access to the symbol kind /// via kind (). /// /// Provide access to semantic value and location. template struct basic_symbol : Base { /// Alias to Base. typedef Base super_type; /// Default constructor. basic_symbol () : value () , location () {} #if 201103L <= YY_CPLUSPLUS /// Move constructor. basic_symbol (basic_symbol&& that) : Base (std::move (that)) , value () , location (std::move (that.location)) { switch (this->kind ()) { case symbol_kind::S_if_full: // if_full case symbol_kind::S_if_empty: // if_empty case symbol_kind::S_blocking: // blocking value.move< bool > (std::move (that.value)); break; case symbol_kind::S_condition: // condition value.move< enum condition > (std::move (that.value)); break; case symbol_kind::S_in_source: // in_source case symbol_kind::S_out_target: // out_target case symbol_kind::S_set_target: // set_target value.move< enum in_out_set > (std::move (that.value)); break; case symbol_kind::S_irq_modifiers: // irq_modifiers value.move< enum irq > (std::move (that.value)); break; case symbol_kind::S_mov_target: // mov_target case symbol_kind::S_mov_source: // mov_source value.move< enum mov > (std::move (that.value)); break; case symbol_kind::S_mov_op: // mov_op value.move< enum mov_op > (std::move (that.value)); break; case symbol_kind::S_INT: // "integer" value.move< int > (std::move (that.value)); break; case symbol_kind::S_instruction: // instruction case symbol_kind::S_base_instruction: // base_instruction value.move< std::shared_ptr > (std::move (that.value)); break; case symbol_kind::S_value: // value case symbol_kind::S_expression: // expression case symbol_kind::S_delay: // delay case symbol_kind::S_sideset: // sideset value.move< std::shared_ptr > (std::move (that.value)); break; case symbol_kind::S_label_decl: // label_decl case symbol_kind::S_symbol_def: // symbol_def value.move< std::shared_ptr > (std::move (that.value)); break; case symbol_kind::S_wait_source: // wait_source value.move< std::shared_ptr > (std::move (that.value)); break; case symbol_kind::S_ID: // "identifier" case symbol_kind::S_STRING: // "string" case symbol_kind::S_NON_WS: // "text" case symbol_kind::S_CODE_BLOCK_START: // "code block" case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE value.move< std::string > (std::move (that.value)); break; default: break; } } #endif /// Copy constructor. basic_symbol (const basic_symbol& that); /// Constructor for valueless symbols, and symbols from each type. #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, location_type&& l) : Base (t) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const location_type& l) : Base (t) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const bool& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, enum condition&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const enum condition& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, enum in_out_set&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const enum in_out_set& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, enum irq&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const enum irq& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, enum mov&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const enum mov& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, enum mov_op&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const enum mov_op& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, int&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const int& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, std::shared_ptr&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const std::shared_ptr& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, std::shared_ptr&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const std::shared_ptr& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, std::shared_ptr&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const std::shared_ptr& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, std::shared_ptr&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const std::shared_ptr& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l) : Base (t) , value (std::move (v)) , location (std::move (l)) {} #else basic_symbol (typename Base::kind_type t, const std::string& v, const location_type& l) : Base (t) , value (v) , location (l) {} #endif /// Destroy the symbol. ~basic_symbol () { clear (); } /// Destroy contents, and record that is empty. void clear () { // User destructor. symbol_kind_type yykind = this->kind (); basic_symbol& yysym = *this; (void) yysym; switch (yykind) { default: break; } // Value type destructor. switch (yykind) { case symbol_kind::S_if_full: // if_full case symbol_kind::S_if_empty: // if_empty case symbol_kind::S_blocking: // blocking value.template destroy< bool > (); break; case symbol_kind::S_condition: // condition value.template destroy< enum condition > (); break; case symbol_kind::S_in_source: // in_source case symbol_kind::S_out_target: // out_target case symbol_kind::S_set_target: // set_target value.template destroy< enum in_out_set > (); break; case symbol_kind::S_irq_modifiers: // irq_modifiers value.template destroy< enum irq > (); break; case symbol_kind::S_mov_target: // mov_target case symbol_kind::S_mov_source: // mov_source value.template destroy< enum mov > (); break; case symbol_kind::S_mov_op: // mov_op value.template destroy< enum mov_op > (); break; case symbol_kind::S_INT: // "integer" value.template destroy< int > (); break; case symbol_kind::S_instruction: // instruction case symbol_kind::S_base_instruction: // base_instruction value.template destroy< std::shared_ptr > (); break; case symbol_kind::S_value: // value case symbol_kind::S_expression: // expression case symbol_kind::S_delay: // delay case symbol_kind::S_sideset: // sideset value.template destroy< std::shared_ptr > (); break; case symbol_kind::S_label_decl: // label_decl case symbol_kind::S_symbol_def: // symbol_def value.template destroy< std::shared_ptr > (); break; case symbol_kind::S_wait_source: // wait_source value.template destroy< std::shared_ptr > (); break; case symbol_kind::S_ID: // "identifier" case symbol_kind::S_STRING: // "string" case symbol_kind::S_NON_WS: // "text" case symbol_kind::S_CODE_BLOCK_START: // "code block" case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE value.template destroy< std::string > (); break; default: break; } Base::clear (); } /// The user-facing name of this symbol. std::string name () const YY_NOEXCEPT { return parser::symbol_name (this->kind ()); } /// Backward compatibility (Bison 3.6). symbol_kind_type type_get () const YY_NOEXCEPT; /// Whether empty. bool empty () const YY_NOEXCEPT; /// Destructive move, \a s is emptied into this. void move (basic_symbol& s); /// The semantic value. semantic_type value; /// The location. location_type location; private: #if YY_CPLUSPLUS < 201103L /// Assignment operator. basic_symbol& operator= (const basic_symbol& that); #endif }; /// Type access provider for token (enum) based symbols. struct by_kind { /// Default constructor. by_kind (); #if 201103L <= YY_CPLUSPLUS /// Move constructor. by_kind (by_kind&& that); #endif /// Copy constructor. by_kind (const by_kind& that); /// The symbol kind as needed by the constructor. typedef token_kind_type kind_type; /// Constructor from (external) token numbers. by_kind (kind_type t); /// Record that this symbol is empty. void clear (); /// Steal the symbol kind from \a that. void move (by_kind& that); /// The (internal) type number (corresponding to \a type). /// \a empty when empty. symbol_kind_type kind () const YY_NOEXCEPT; /// Backward compatibility (Bison 3.6). symbol_kind_type type_get () const YY_NOEXCEPT; /// The symbol kind. /// \a S_YYEMPTY when empty. symbol_kind_type kind_; }; /// Backward compatibility for a private implementation detail (Bison 3.6). typedef by_kind by_type; /// "External" symbols: returned by the scanner. struct symbol_type : basic_symbol { /// Superclass. typedef basic_symbol super_type; /// Empty symbol. symbol_type () {} /// Constructor for valueless symbols, and symbols from each type. #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, location_type l) : super_type(token_type (tok), std::move (l)) { YY_ASSERT (tok == token::TOK_END || tok == token::TOK_YYerror || tok == token::TOK_YYUNDEF || tok == token::TOK_NEWLINE || tok == token::TOK_COMMA || tok == token::TOK_COLON || tok == token::TOK_LPAREN || tok == token::TOK_RPAREN || tok == token::TOK_LBRACKET || tok == token::TOK_RBRACKET || tok == token::TOK_PLUS || tok == token::TOK_MINUS || tok == token::TOK_MULTIPLY || tok == token::TOK_DIVIDE || tok == token::TOK_OR || tok == token::TOK_AND || tok == token::TOK_XOR || tok == token::TOK_POST_DECREMENT || tok == token::TOK_NOT_EQUAL || tok == token::TOK_NOT || tok == token::TOK_REVERSE || tok == token::TOK_EQUAL || tok == token::TOK_PROGRAM || tok == token::TOK_WRAP_TARGET || tok == token::TOK_WRAP || tok == token::TOK_DEFINE || tok == token::TOK_SIDE_SET || tok == token::TOK_WORD || tok == token::TOK_ORIGIN || tok == token::TOK_LANG_OPT || tok == token::TOK_JMP || tok == token::TOK_WAIT || tok == token::TOK_IN || tok == token::TOK_OUT || tok == token::TOK_PUSH || tok == token::TOK_PULL || tok == token::TOK_MOV || tok == token::TOK_IRQ || tok == token::TOK_SET || tok == token::TOK_NOP || tok == token::TOK_PIN || tok == token::TOK_GPIO || tok == token::TOK_OSRE || tok == token::TOK_PINS || tok == token::TOK_NULL || tok == token::TOK_PINDIRS || tok == token::TOK_BLOCK || tok == token::TOK_NOBLOCK || tok == token::TOK_IFEMPTY || tok == token::TOK_IFFULL || tok == token::TOK_NOWAIT || tok == token::TOK_CLEAR || tok == token::TOK_REL || tok == token::TOK_X || tok == token::TOK_Y || tok == token::TOK_EXEC || tok == token::TOK_PC || tok == token::TOK_ISR || tok == token::TOK_OSR || tok == token::TOK_OPTIONAL || tok == token::TOK_SIDE || tok == token::TOK_STATUS || tok == token::TOK_PUBLIC); } #else symbol_type (int tok, const location_type& l) : super_type(token_type (tok), l) { YY_ASSERT (tok == token::TOK_END || tok == token::TOK_YYerror || tok == token::TOK_YYUNDEF || tok == token::TOK_NEWLINE || tok == token::TOK_COMMA || tok == token::TOK_COLON || tok == token::TOK_LPAREN || tok == token::TOK_RPAREN || tok == token::TOK_LBRACKET || tok == token::TOK_RBRACKET || tok == token::TOK_PLUS || tok == token::TOK_MINUS || tok == token::TOK_MULTIPLY || tok == token::TOK_DIVIDE || tok == token::TOK_OR || tok == token::TOK_AND || tok == token::TOK_XOR || tok == token::TOK_POST_DECREMENT || tok == token::TOK_NOT_EQUAL || tok == token::TOK_NOT || tok == token::TOK_REVERSE || tok == token::TOK_EQUAL || tok == token::TOK_PROGRAM || tok == token::TOK_WRAP_TARGET || tok == token::TOK_WRAP || tok == token::TOK_DEFINE || tok == token::TOK_SIDE_SET || tok == token::TOK_WORD || tok == token::TOK_ORIGIN || tok == token::TOK_LANG_OPT || tok == token::TOK_JMP || tok == token::TOK_WAIT || tok == token::TOK_IN || tok == token::TOK_OUT || tok == token::TOK_PUSH || tok == token::TOK_PULL || tok == token::TOK_MOV || tok == token::TOK_IRQ || tok == token::TOK_SET || tok == token::TOK_NOP || tok == token::TOK_PIN || tok == token::TOK_GPIO || tok == token::TOK_OSRE || tok == token::TOK_PINS || tok == token::TOK_NULL || tok == token::TOK_PINDIRS || tok == token::TOK_BLOCK || tok == token::TOK_NOBLOCK || tok == token::TOK_IFEMPTY || tok == token::TOK_IFFULL || tok == token::TOK_NOWAIT || tok == token::TOK_CLEAR || tok == token::TOK_REL || tok == token::TOK_X || tok == token::TOK_Y || tok == token::TOK_EXEC || tok == token::TOK_PC || tok == token::TOK_ISR || tok == token::TOK_OSR || tok == token::TOK_OPTIONAL || tok == token::TOK_SIDE || tok == token::TOK_STATUS || tok == token::TOK_PUBLIC); } #endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, int v, location_type l) : super_type(token_type (tok), std::move (v), std::move (l)) { YY_ASSERT (tok == token::TOK_INT); } #else symbol_type (int tok, const int& v, const location_type& l) : super_type(token_type (tok), v, l) { YY_ASSERT (tok == token::TOK_INT); } #endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, std::string v, location_type l) : super_type(token_type (tok), std::move (v), std::move (l)) { YY_ASSERT (tok == token::TOK_ID || tok == token::TOK_STRING || tok == token::TOK_NON_WS || tok == token::TOK_CODE_BLOCK_START || tok == token::TOK_CODE_BLOCK_CONTENTS || tok == token::TOK_UNKNOWN_DIRECTIVE); } #else symbol_type (int tok, const std::string& v, const location_type& l) : super_type(token_type (tok), v, l) { YY_ASSERT (tok == token::TOK_ID || tok == token::TOK_STRING || tok == token::TOK_NON_WS || tok == token::TOK_CODE_BLOCK_START || tok == token::TOK_CODE_BLOCK_CONTENTS || tok == token::TOK_UNKNOWN_DIRECTIVE); } #endif }; /// Build a parser object. parser (pio_assembler& pioasm_yyarg); virtual ~parser (); #if 201103L <= YY_CPLUSPLUS /// Non copyable. parser (const parser&) = delete; /// Non copyable. parser& operator= (const parser&) = delete; #endif /// Parse. An alias for parse (). /// \returns 0 iff parsing succeeded. int operator() (); /// Parse. /// \returns 0 iff parsing succeeded. virtual int parse (); #if YYDEBUG /// The current debugging stream. std::ostream& debug_stream () const YY_ATTRIBUTE_PURE; /// Set the current debugging stream. void set_debug_stream (std::ostream &); /// Type for debugging levels. typedef int debug_level_type; /// The current debugging level. debug_level_type debug_level () const YY_ATTRIBUTE_PURE; /// Set the current debugging level. void set_debug_level (debug_level_type l); #endif /// Report a syntax error. /// \param loc where the syntax error is found. /// \param msg a description of the syntax error. virtual void error (const location_type& loc, const std::string& msg); /// Report a syntax error. void error (const syntax_error& err); /// The user-facing name of the symbol whose (internal) number is /// YYSYMBOL. No bounds checking. static std::string symbol_name (symbol_kind_type yysymbol); // Implementation of make_symbol for each symbol type. #if 201103L <= YY_CPLUSPLUS static symbol_type make_END (location_type l) { return symbol_type (token::TOK_END, std::move (l)); } #else static symbol_type make_END (const location_type& l) { return symbol_type (token::TOK_END, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_YYerror (location_type l) { return symbol_type (token::TOK_YYerror, std::move (l)); } #else static symbol_type make_YYerror (const location_type& l) { return symbol_type (token::TOK_YYerror, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_YYUNDEF (location_type l) { return symbol_type (token::TOK_YYUNDEF, std::move (l)); } #else static symbol_type make_YYUNDEF (const location_type& l) { return symbol_type (token::TOK_YYUNDEF, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_NEWLINE (location_type l) { return symbol_type (token::TOK_NEWLINE, std::move (l)); } #else static symbol_type make_NEWLINE (const location_type& l) { return symbol_type (token::TOK_NEWLINE, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_COMMA (location_type l) { return symbol_type (token::TOK_COMMA, std::move (l)); } #else static symbol_type make_COMMA (const location_type& l) { return symbol_type (token::TOK_COMMA, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_COLON (location_type l) { return symbol_type (token::TOK_COLON, std::move (l)); } #else static symbol_type make_COLON (const location_type& l) { return symbol_type (token::TOK_COLON, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_LPAREN (location_type l) { return symbol_type (token::TOK_LPAREN, std::move (l)); } #else static symbol_type make_LPAREN (const location_type& l) { return symbol_type (token::TOK_LPAREN, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_RPAREN (location_type l) { return symbol_type (token::TOK_RPAREN, std::move (l)); } #else static symbol_type make_RPAREN (const location_type& l) { return symbol_type (token::TOK_RPAREN, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_LBRACKET (location_type l) { return symbol_type (token::TOK_LBRACKET, std::move (l)); } #else static symbol_type make_LBRACKET (const location_type& l) { return symbol_type (token::TOK_LBRACKET, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_RBRACKET (location_type l) { return symbol_type (token::TOK_RBRACKET, std::move (l)); } #else static symbol_type make_RBRACKET (const location_type& l) { return symbol_type (token::TOK_RBRACKET, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_PLUS (location_type l) { return symbol_type (token::TOK_PLUS, std::move (l)); } #else static symbol_type make_PLUS (const location_type& l) { return symbol_type (token::TOK_PLUS, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_MINUS (location_type l) { return symbol_type (token::TOK_MINUS, std::move (l)); } #else static symbol_type make_MINUS (const location_type& l) { return symbol_type (token::TOK_MINUS, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_MULTIPLY (location_type l) { return symbol_type (token::TOK_MULTIPLY, std::move (l)); } #else static symbol_type make_MULTIPLY (const location_type& l) { return symbol_type (token::TOK_MULTIPLY, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_DIVIDE (location_type l) { return symbol_type (token::TOK_DIVIDE, std::move (l)); } #else static symbol_type make_DIVIDE (const location_type& l) { return symbol_type (token::TOK_DIVIDE, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_OR (location_type l) { return symbol_type (token::TOK_OR, std::move (l)); } #else static symbol_type make_OR (const location_type& l) { return symbol_type (token::TOK_OR, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_AND (location_type l) { return symbol_type (token::TOK_AND, std::move (l)); } #else static symbol_type make_AND (const location_type& l) { return symbol_type (token::TOK_AND, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_XOR (location_type l) { return symbol_type (token::TOK_XOR, std::move (l)); } #else static symbol_type make_XOR (const location_type& l) { return symbol_type (token::TOK_XOR, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_POST_DECREMENT (location_type l) { return symbol_type (token::TOK_POST_DECREMENT, std::move (l)); } #else static symbol_type make_POST_DECREMENT (const location_type& l) { return symbol_type (token::TOK_POST_DECREMENT, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_NOT_EQUAL (location_type l) { return symbol_type (token::TOK_NOT_EQUAL, std::move (l)); } #else static symbol_type make_NOT_EQUAL (const location_type& l) { return symbol_type (token::TOK_NOT_EQUAL, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_NOT (location_type l) { return symbol_type (token::TOK_NOT, std::move (l)); } #else static symbol_type make_NOT (const location_type& l) { return symbol_type (token::TOK_NOT, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_REVERSE (location_type l) { return symbol_type (token::TOK_REVERSE, std::move (l)); } #else static symbol_type make_REVERSE (const location_type& l) { return symbol_type (token::TOK_REVERSE, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_EQUAL (location_type l) { return symbol_type (token::TOK_EQUAL, std::move (l)); } #else static symbol_type make_EQUAL (const location_type& l) { return symbol_type (token::TOK_EQUAL, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_PROGRAM (location_type l) { return symbol_type (token::TOK_PROGRAM, std::move (l)); } #else static symbol_type make_PROGRAM (const location_type& l) { return symbol_type (token::TOK_PROGRAM, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_WRAP_TARGET (location_type l) { return symbol_type (token::TOK_WRAP_TARGET, std::move (l)); } #else static symbol_type make_WRAP_TARGET (const location_type& l) { return symbol_type (token::TOK_WRAP_TARGET, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_WRAP (location_type l) { return symbol_type (token::TOK_WRAP, std::move (l)); } #else static symbol_type make_WRAP (const location_type& l) { return symbol_type (token::TOK_WRAP, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_DEFINE (location_type l) { return symbol_type (token::TOK_DEFINE, std::move (l)); } #else static symbol_type make_DEFINE (const location_type& l) { return symbol_type (token::TOK_DEFINE, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_SIDE_SET (location_type l) { return symbol_type (token::TOK_SIDE_SET, std::move (l)); } #else static symbol_type make_SIDE_SET (const location_type& l) { return symbol_type (token::TOK_SIDE_SET, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_WORD (location_type l) { return symbol_type (token::TOK_WORD, std::move (l)); } #else static symbol_type make_WORD (const location_type& l) { return symbol_type (token::TOK_WORD, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_ORIGIN (location_type l) { return symbol_type (token::TOK_ORIGIN, std::move (l)); } #else static symbol_type make_ORIGIN (const location_type& l) { return symbol_type (token::TOK_ORIGIN, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_LANG_OPT (location_type l) { return symbol_type (token::TOK_LANG_OPT, std::move (l)); } #else static symbol_type make_LANG_OPT (const location_type& l) { return symbol_type (token::TOK_LANG_OPT, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_JMP (location_type l) { return symbol_type (token::TOK_JMP, std::move (l)); } #else static symbol_type make_JMP (const location_type& l) { return symbol_type (token::TOK_JMP, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_WAIT (location_type l) { return symbol_type (token::TOK_WAIT, std::move (l)); } #else static symbol_type make_WAIT (const location_type& l) { return symbol_type (token::TOK_WAIT, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_IN (location_type l) { return symbol_type (token::TOK_IN, std::move (l)); } #else static symbol_type make_IN (const location_type& l) { return symbol_type (token::TOK_IN, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_OUT (location_type l) { return symbol_type (token::TOK_OUT, std::move (l)); } #else static symbol_type make_OUT (const location_type& l) { return symbol_type (token::TOK_OUT, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_PUSH (location_type l) { return symbol_type (token::TOK_PUSH, std::move (l)); } #else static symbol_type make_PUSH (const location_type& l) { return symbol_type (token::TOK_PUSH, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_PULL (location_type l) { return symbol_type (token::TOK_PULL, std::move (l)); } #else static symbol_type make_PULL (const location_type& l) { return symbol_type (token::TOK_PULL, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_MOV (location_type l) { return symbol_type (token::TOK_MOV, std::move (l)); } #else static symbol_type make_MOV (const location_type& l) { return symbol_type (token::TOK_MOV, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_IRQ (location_type l) { return symbol_type (token::TOK_IRQ, std::move (l)); } #else static symbol_type make_IRQ (const location_type& l) { return symbol_type (token::TOK_IRQ, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_SET (location_type l) { return symbol_type (token::TOK_SET, std::move (l)); } #else static symbol_type make_SET (const location_type& l) { return symbol_type (token::TOK_SET, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_NOP (location_type l) { return symbol_type (token::TOK_NOP, std::move (l)); } #else static symbol_type make_NOP (const location_type& l) { return symbol_type (token::TOK_NOP, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_PIN (location_type l) { return symbol_type (token::TOK_PIN, std::move (l)); } #else static symbol_type make_PIN (const location_type& l) { return symbol_type (token::TOK_PIN, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_GPIO (location_type l) { return symbol_type (token::TOK_GPIO, std::move (l)); } #else static symbol_type make_GPIO (const location_type& l) { return symbol_type (token::TOK_GPIO, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_OSRE (location_type l) { return symbol_type (token::TOK_OSRE, std::move (l)); } #else static symbol_type make_OSRE (const location_type& l) { return symbol_type (token::TOK_OSRE, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_PINS (location_type l) { return symbol_type (token::TOK_PINS, std::move (l)); } #else static symbol_type make_PINS (const location_type& l) { return symbol_type (token::TOK_PINS, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_NULL (location_type l) { return symbol_type (token::TOK_NULL, std::move (l)); } #else static symbol_type make_NULL (const location_type& l) { return symbol_type (token::TOK_NULL, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_PINDIRS (location_type l) { return symbol_type (token::TOK_PINDIRS, std::move (l)); } #else static symbol_type make_PINDIRS (const location_type& l) { return symbol_type (token::TOK_PINDIRS, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_BLOCK (location_type l) { return symbol_type (token::TOK_BLOCK, std::move (l)); } #else static symbol_type make_BLOCK (const location_type& l) { return symbol_type (token::TOK_BLOCK, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_NOBLOCK (location_type l) { return symbol_type (token::TOK_NOBLOCK, std::move (l)); } #else static symbol_type make_NOBLOCK (const location_type& l) { return symbol_type (token::TOK_NOBLOCK, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_IFEMPTY (location_type l) { return symbol_type (token::TOK_IFEMPTY, std::move (l)); } #else static symbol_type make_IFEMPTY (const location_type& l) { return symbol_type (token::TOK_IFEMPTY, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_IFFULL (location_type l) { return symbol_type (token::TOK_IFFULL, std::move (l)); } #else static symbol_type make_IFFULL (const location_type& l) { return symbol_type (token::TOK_IFFULL, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_NOWAIT (location_type l) { return symbol_type (token::TOK_NOWAIT, std::move (l)); } #else static symbol_type make_NOWAIT (const location_type& l) { return symbol_type (token::TOK_NOWAIT, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_CLEAR (location_type l) { return symbol_type (token::TOK_CLEAR, std::move (l)); } #else static symbol_type make_CLEAR (const location_type& l) { return symbol_type (token::TOK_CLEAR, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_REL (location_type l) { return symbol_type (token::TOK_REL, std::move (l)); } #else static symbol_type make_REL (const location_type& l) { return symbol_type (token::TOK_REL, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_X (location_type l) { return symbol_type (token::TOK_X, std::move (l)); } #else static symbol_type make_X (const location_type& l) { return symbol_type (token::TOK_X, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_Y (location_type l) { return symbol_type (token::TOK_Y, std::move (l)); } #else static symbol_type make_Y (const location_type& l) { return symbol_type (token::TOK_Y, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_EXEC (location_type l) { return symbol_type (token::TOK_EXEC, std::move (l)); } #else static symbol_type make_EXEC (const location_type& l) { return symbol_type (token::TOK_EXEC, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_PC (location_type l) { return symbol_type (token::TOK_PC, std::move (l)); } #else static symbol_type make_PC (const location_type& l) { return symbol_type (token::TOK_PC, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_ISR (location_type l) { return symbol_type (token::TOK_ISR, std::move (l)); } #else static symbol_type make_ISR (const location_type& l) { return symbol_type (token::TOK_ISR, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_OSR (location_type l) { return symbol_type (token::TOK_OSR, std::move (l)); } #else static symbol_type make_OSR (const location_type& l) { return symbol_type (token::TOK_OSR, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_OPTIONAL (location_type l) { return symbol_type (token::TOK_OPTIONAL, std::move (l)); } #else static symbol_type make_OPTIONAL (const location_type& l) { return symbol_type (token::TOK_OPTIONAL, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_SIDE (location_type l) { return symbol_type (token::TOK_SIDE, std::move (l)); } #else static symbol_type make_SIDE (const location_type& l) { return symbol_type (token::TOK_SIDE, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_STATUS (location_type l) { return symbol_type (token::TOK_STATUS, std::move (l)); } #else static symbol_type make_STATUS (const location_type& l) { return symbol_type (token::TOK_STATUS, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_PUBLIC (location_type l) { return symbol_type (token::TOK_PUBLIC, std::move (l)); } #else static symbol_type make_PUBLIC (const location_type& l) { return symbol_type (token::TOK_PUBLIC, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_ID (std::string v, location_type l) { return symbol_type (token::TOK_ID, std::move (v), std::move (l)); } #else static symbol_type make_ID (const std::string& v, const location_type& l) { return symbol_type (token::TOK_ID, v, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_STRING (std::string v, location_type l) { return symbol_type (token::TOK_STRING, std::move (v), std::move (l)); } #else static symbol_type make_STRING (const std::string& v, const location_type& l) { return symbol_type (token::TOK_STRING, v, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_NON_WS (std::string v, location_type l) { return symbol_type (token::TOK_NON_WS, std::move (v), std::move (l)); } #else static symbol_type make_NON_WS (const std::string& v, const location_type& l) { return symbol_type (token::TOK_NON_WS, v, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_CODE_BLOCK_START (std::string v, location_type l) { return symbol_type (token::TOK_CODE_BLOCK_START, std::move (v), std::move (l)); } #else static symbol_type make_CODE_BLOCK_START (const std::string& v, const location_type& l) { return symbol_type (token::TOK_CODE_BLOCK_START, v, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_CODE_BLOCK_CONTENTS (std::string v, location_type l) { return symbol_type (token::TOK_CODE_BLOCK_CONTENTS, std::move (v), std::move (l)); } #else static symbol_type make_CODE_BLOCK_CONTENTS (const std::string& v, const location_type& l) { return symbol_type (token::TOK_CODE_BLOCK_CONTENTS, v, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_UNKNOWN_DIRECTIVE (std::string v, location_type l) { return symbol_type (token::TOK_UNKNOWN_DIRECTIVE, std::move (v), std::move (l)); } #else static symbol_type make_UNKNOWN_DIRECTIVE (const std::string& v, const location_type& l) { return symbol_type (token::TOK_UNKNOWN_DIRECTIVE, v, l); } #endif #if 201103L <= YY_CPLUSPLUS static symbol_type make_INT (int v, location_type l) { return symbol_type (token::TOK_INT, std::move (v), std::move (l)); } #else static symbol_type make_INT (const int& v, const location_type& l) { return symbol_type (token::TOK_INT, v, l); } #endif class context { public: context (const parser& yyparser, const symbol_type& yyla); const symbol_type& lookahead () const { return yyla_; } symbol_kind_type token () const { return yyla_.kind (); } const location_type& location () const { return yyla_.location; } /// Put in YYARG at most YYARGN of the expected tokens, and return the /// number of tokens stored in YYARG. If YYARG is null, return the /// number of expected tokens (guaranteed to be less than YYNTOKENS). int expected_tokens (symbol_kind_type yyarg[], int yyargn) const; private: const parser& yyparser_; const symbol_type& yyla_; }; private: #if YY_CPLUSPLUS < 201103L /// Non copyable. parser (const parser&); /// Non copyable. parser& operator= (const parser&); #endif /// Check the lookahead yytoken. /// \returns true iff the token will be eventually shifted. bool yy_lac_check_ (symbol_kind_type yytoken) const; /// Establish the initial context if no initial context currently exists. /// \returns true iff the token will be eventually shifted. bool yy_lac_establish_ (symbol_kind_type yytoken); /// Discard any previous initial lookahead context because of event. /// \param event the event which caused the lookahead to be discarded. /// Only used for debbuging output. void yy_lac_discard_ (const char* event); /// Stored state numbers (used for stacks). typedef unsigned char state_type; /// The arguments of the error message. int yy_syntax_error_arguments_ (const context& yyctx, symbol_kind_type yyarg[], int yyargn) const; /// Generate an error message. /// \param yyctx the context in which the error occurred. virtual std::string yysyntax_error_ (const context& yyctx) const; /// Compute post-reduction state. /// \param yystate the current state /// \param yysym the nonterminal to push on the stack static state_type yy_lr_goto_state_ (state_type yystate, int yysym); /// Whether the given \c yypact_ value indicates a defaulted state. /// \param yyvalue the value to check static bool yy_pact_value_is_default_ (int yyvalue); /// Whether the given \c yytable_ value indicates a syntax error. /// \param yyvalue the value to check static bool yy_table_value_is_error_ (int yyvalue); static const signed char yypact_ninf_; static const signed char yytable_ninf_; /// Convert a scanner token kind \a t to a symbol kind. /// In theory \a t should be a token_kind_type, but character literals /// are valid, yet not members of the token_type enum. static symbol_kind_type yytranslate_ (int t); /// Convert the symbol name \a n to a form suitable for a diagnostic. static std::string yytnamerr_ (const char *yystr); /// For a symbol, its name in clear. static const char* const yytname_[]; // Tables. // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing // STATE-NUM. static const short yypact_[]; // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. // Performed when YYTABLE does not specify something else to do. Zero // means the default is an error. static const signed char yydefact_[]; // YYPGOTO[NTERM-NUM]. static const short yypgoto_[]; // YYDEFGOTO[NTERM-NUM]. static const short yydefgoto_[]; // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If // positive, shift that token. If negative, reduce the rule whose // number is the opposite. If YYTABLE_NINF, syntax error. static const short yytable_[]; static const unsigned char yycheck_[]; // YYSTOS[STATE-NUM] -- The (internal number of the) accessing // symbol of state STATE-NUM. static const signed char yystos_[]; // YYR1[YYN] -- Symbol number of symbol that rule YYN derives. static const signed char yyr1_[]; // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. static const signed char yyr2_[]; #if YYDEBUG // YYRLINE[YYN] -- Source line where rule number YYN was defined. static const short yyrline_[]; /// Report on the debug stream that the rule \a r is going to be reduced. virtual void yy_reduce_print_ (int r) const; /// Print the state stack on the debug stream. virtual void yy_stack_print_ () const; /// Debugging level. int yydebug_; /// Debug stream. std::ostream* yycdebug_; /// \brief Display a symbol kind, value and location. /// \param yyo The output stream. /// \param yysym The symbol. template void yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const; #endif /// \brief Reclaim the memory associated to a symbol. /// \param yymsg Why this token is reclaimed. /// If null, print nothing. /// \param yysym The symbol. template void yy_destroy_ (const char* yymsg, basic_symbol& yysym) const; private: /// Type access provider for state based symbols. struct by_state { /// Default constructor. by_state () YY_NOEXCEPT; /// The symbol kind as needed by the constructor. typedef state_type kind_type; /// Constructor. by_state (kind_type s) YY_NOEXCEPT; /// Copy constructor. by_state (const by_state& that) YY_NOEXCEPT; /// Record that this symbol is empty. void clear () YY_NOEXCEPT; /// Steal the symbol kind from \a that. void move (by_state& that); /// The symbol kind (corresponding to \a state). /// \a symbol_kind::S_YYEMPTY when empty. symbol_kind_type kind () const YY_NOEXCEPT; /// The state number used to denote an empty symbol. /// We use the initial state, as it does not have a value. enum { empty_state = 0 }; /// The state. /// \a empty when empty. state_type state; }; /// "Internal" symbol: element of the stack. struct stack_symbol_type : basic_symbol { /// Superclass. typedef basic_symbol super_type; /// Construct an empty symbol. stack_symbol_type (); /// Move or copy construction. stack_symbol_type (YY_RVREF (stack_symbol_type) that); /// Steal the contents from \a sym to build this. stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym); #if YY_CPLUSPLUS < 201103L /// Assignment, needed by push_back by some old implementations. /// Moves the contents of that. stack_symbol_type& operator= (stack_symbol_type& that); /// Assignment, needed by push_back by other implementations. /// Needed by some other old implementations. stack_symbol_type& operator= (const stack_symbol_type& that); #endif }; /// A stack with random access from its top. template > class stack { public: // Hide our reversed order. typedef typename S::iterator iterator; typedef typename S::const_iterator const_iterator; typedef typename S::size_type size_type; typedef typename std::ptrdiff_t index_type; stack (size_type n = 200) : seq_ (n) {} #if 201103L <= YY_CPLUSPLUS /// Non copyable. stack (const stack&) = delete; /// Non copyable. stack& operator= (const stack&) = delete; #endif /// Random access. /// /// Index 0 returns the topmost element. const T& operator[] (index_type i) const { return seq_[size_type (size () - 1 - i)]; } /// Random access. /// /// Index 0 returns the topmost element. T& operator[] (index_type i) { return seq_[size_type (size () - 1 - i)]; } /// Steal the contents of \a t. /// /// Close to move-semantics. void push (YY_MOVE_REF (T) t) { seq_.push_back (T ()); operator[] (0).move (t); } /// Pop elements from the stack. void pop (std::ptrdiff_t n = 1) YY_NOEXCEPT { for (; 0 < n; --n) seq_.pop_back (); } /// Pop all elements from the stack. void clear () YY_NOEXCEPT { seq_.clear (); } /// Number of elements on the stack. index_type size () const YY_NOEXCEPT { return index_type (seq_.size ()); } /// Iterator on top of the stack (going downwards). const_iterator begin () const YY_NOEXCEPT { return seq_.begin (); } /// Bottom of the stack. const_iterator end () const YY_NOEXCEPT { return seq_.end (); } /// Present a slice of the top of a stack. class slice { public: slice (const stack& stack, index_type range) : stack_ (stack) , range_ (range) {} const T& operator[] (index_type i) const { return stack_[range_ - i]; } private: const stack& stack_; index_type range_; }; private: #if YY_CPLUSPLUS < 201103L /// Non copyable. stack (const stack&); /// Non copyable. stack& operator= (const stack&); #endif /// The wrapped container. S seq_; }; /// Stack type. typedef stack stack_type; /// The stack. stack_type yystack_; /// The stack for LAC. /// Logically, the yy_lac_stack's lifetime is confined to the function /// yy_lac_check_. We just store it as a member of this class to hold /// on to the memory and to avoid frequent reallocations. /// Since yy_lac_check_ is const, this member must be mutable. mutable std::vector yylac_stack_; /// Whether an initial LAC context was established. bool yy_lac_established_; /// Push a new state on the stack. /// \param m a debug message to display /// if null, no trace is output. /// \param sym the symbol /// \warning the contents of \a s.value is stolen. void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym); /// Push a new look ahead token on the state on the stack. /// \param m a debug message to display /// if null, no trace is output. /// \param s the state /// \param sym the symbol (for its value and location). /// \warning the contents of \a sym.value is stolen. void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); /// Pop \a n symbols from the stack. void yypop_ (int n = 1); /// Constants. enum { yylast_ = 205, ///< Last index in yytable_. yynnts_ = 27, ///< Number of nonterminal symbols. yyfinal_ = 96 ///< Termination state number. }; // User arguments. pio_assembler& pioasm; }; inline parser::symbol_kind_type parser::yytranslate_ (int t) { // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // TOKEN-NUM as returned by yylex. static const signed char translate_table[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }; // Last valid token kind. const int code_max = 324; if (t <= 0) return symbol_kind::S_YYEOF; else if (t <= code_max) return YY_CAST (symbol_kind_type, translate_table[t]); else return symbol_kind::S_YYUNDEF; } // basic_symbol. template parser::basic_symbol::basic_symbol (const basic_symbol& that) : Base (that) , value () , location (that.location) { switch (this->kind ()) { case symbol_kind::S_if_full: // if_full case symbol_kind::S_if_empty: // if_empty case symbol_kind::S_blocking: // blocking value.copy< bool > (YY_MOVE (that.value)); break; case symbol_kind::S_condition: // condition value.copy< enum condition > (YY_MOVE (that.value)); break; case symbol_kind::S_in_source: // in_source case symbol_kind::S_out_target: // out_target case symbol_kind::S_set_target: // set_target value.copy< enum in_out_set > (YY_MOVE (that.value)); break; case symbol_kind::S_irq_modifiers: // irq_modifiers value.copy< enum irq > (YY_MOVE (that.value)); break; case symbol_kind::S_mov_target: // mov_target case symbol_kind::S_mov_source: // mov_source value.copy< enum mov > (YY_MOVE (that.value)); break; case symbol_kind::S_mov_op: // mov_op value.copy< enum mov_op > (YY_MOVE (that.value)); break; case symbol_kind::S_INT: // "integer" value.copy< int > (YY_MOVE (that.value)); break; case symbol_kind::S_instruction: // instruction case symbol_kind::S_base_instruction: // base_instruction value.copy< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_value: // value case symbol_kind::S_expression: // expression case symbol_kind::S_delay: // delay case symbol_kind::S_sideset: // sideset value.copy< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_label_decl: // label_decl case symbol_kind::S_symbol_def: // symbol_def value.copy< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_wait_source: // wait_source value.copy< std::shared_ptr > (YY_MOVE (that.value)); break; case symbol_kind::S_ID: // "identifier" case symbol_kind::S_STRING: // "string" case symbol_kind::S_NON_WS: // "text" case symbol_kind::S_CODE_BLOCK_START: // "code block" case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE value.copy< std::string > (YY_MOVE (that.value)); break; default: break; } } template parser::symbol_kind_type parser::basic_symbol::type_get () const YY_NOEXCEPT { return this->kind (); } template bool parser::basic_symbol::empty () const YY_NOEXCEPT { return this->kind () == symbol_kind::S_YYEMPTY; } template void parser::basic_symbol::move (basic_symbol& s) { super_type::move (s); switch (this->kind ()) { case symbol_kind::S_if_full: // if_full case symbol_kind::S_if_empty: // if_empty case symbol_kind::S_blocking: // blocking value.move< bool > (YY_MOVE (s.value)); break; case symbol_kind::S_condition: // condition value.move< enum condition > (YY_MOVE (s.value)); break; case symbol_kind::S_in_source: // in_source case symbol_kind::S_out_target: // out_target case symbol_kind::S_set_target: // set_target value.move< enum in_out_set > (YY_MOVE (s.value)); break; case symbol_kind::S_irq_modifiers: // irq_modifiers value.move< enum irq > (YY_MOVE (s.value)); break; case symbol_kind::S_mov_target: // mov_target case symbol_kind::S_mov_source: // mov_source value.move< enum mov > (YY_MOVE (s.value)); break; case symbol_kind::S_mov_op: // mov_op value.move< enum mov_op > (YY_MOVE (s.value)); break; case symbol_kind::S_INT: // "integer" value.move< int > (YY_MOVE (s.value)); break; case symbol_kind::S_instruction: // instruction case symbol_kind::S_base_instruction: // base_instruction value.move< std::shared_ptr > (YY_MOVE (s.value)); break; case symbol_kind::S_value: // value case symbol_kind::S_expression: // expression case symbol_kind::S_delay: // delay case symbol_kind::S_sideset: // sideset value.move< std::shared_ptr > (YY_MOVE (s.value)); break; case symbol_kind::S_label_decl: // label_decl case symbol_kind::S_symbol_def: // symbol_def value.move< std::shared_ptr > (YY_MOVE (s.value)); break; case symbol_kind::S_wait_source: // wait_source value.move< std::shared_ptr > (YY_MOVE (s.value)); break; case symbol_kind::S_ID: // "identifier" case symbol_kind::S_STRING: // "string" case symbol_kind::S_NON_WS: // "text" case symbol_kind::S_CODE_BLOCK_START: // "code block" case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE value.move< std::string > (YY_MOVE (s.value)); break; default: break; } location = YY_MOVE (s.location); } // by_kind. inline parser::by_kind::by_kind () : kind_ (symbol_kind::S_YYEMPTY) {} #if 201103L <= YY_CPLUSPLUS inline parser::by_kind::by_kind (by_kind&& that) : kind_ (that.kind_) { that.clear (); } #endif inline parser::by_kind::by_kind (const by_kind& that) : kind_ (that.kind_) {} inline parser::by_kind::by_kind (token_kind_type t) : kind_ (yytranslate_ (t)) {} inline void parser::by_kind::clear () { kind_ = symbol_kind::S_YYEMPTY; } inline void parser::by_kind::move (by_kind& that) { kind_ = that.kind_; that.clear (); } inline parser::symbol_kind_type parser::by_kind::kind () const YY_NOEXCEPT { return kind_; } inline parser::symbol_kind_type parser::by_kind::type_get () const YY_NOEXCEPT { return this->kind (); } } // yy #endif // !YY_YY_HOME_GRAHAM_DEV_MU_PICO_SDK_TOOLS_PIOASM_GEN_PARSER_HPP_INCLUDED ================================================ FILE: pico-sdk/tools/pioasm/hex_output.cpp ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "output_format.h" #include struct hex_output : public output_format { struct factory { factory() { output_format::add(new hex_output()); } }; hex_output() : output_format("hex") {} std::string get_description() { return "Raw hex output (only valid for single program inputs)"; } virtual int output(std::string destination, std::vector output_options, const compiled_source &source) { FILE *out = open_single_output(destination); if (!out) return 1; if (source.programs.size() > 1) { // todo don't have locations any more! std::cerr << "error: hex output only supports a single program input\n"; return 1; } for (const auto &i : source.programs[0].instructions) { fprintf(out, "%04x\n", i); } if (out != stdout) { fclose(out); } return 0; } }; static hex_output::factory creator; ================================================ FILE: pico-sdk/tools/pioasm/lexer.ll ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ %{ /* -*- C++ -*- */ # include # include # include # include # include # include "pio_assembler.h" # include "parser.hpp" #ifdef _MSC_VER #pragma warning(disable : 4996) // fopen #endif %} %option noyywrap nounput noinput batch debug never-interactive case-insensitive noline %{ yy::parser::symbol_type make_INT(const std::string &s, const yy::parser::location_type& loc); yy::parser::symbol_type make_HEX(const std::string &s, const yy::parser::location_type& loc); yy::parser::symbol_type make_BINARY(const std::string &s, const yy::parser::location_type& loc); %} blank [ \t\r] whitesp {blank}+ comment (";"|"//")[^\n]* digit [0-9] id [a-zA-Z_][a-zA-Z0-9_]* binary "0b"[01]+ int {digit}+ hex "0x"[0-9a-fA-F]+ directive \.{id} output_fmt [^%\n]+ %{ // Code run each time a pattern is matched. # define YY_USER_ACTION loc.columns (yyleng); %} %x code_block %x c_comment %x lang_opt %% std::string code_block_contents; yy::location code_block_start; %{ // A handy shortcut to the location held by the pio_assembler. yy::location& loc = pioasm.location; // Code run each time yylex is called. loc.step(); %} {blank}+ loc.step(); \n+ { auto loc_newline = loc; loc_newline.end = loc_newline.begin; loc.lines(yyleng); loc.step(); return yy::parser::make_NEWLINE(loc_newline); } "%"{blank}*{output_fmt}{blank}*"{" { BEGIN(code_block); code_block_contents = ""; code_block_start = loc; std::string tmp(yytext); tmp = tmp.substr(1, tmp.length() - 2); tmp = tmp.erase(0, tmp.find_first_not_of(" \t")); tmp = tmp.erase(tmp.find_last_not_of(" \t") + 1); return yy::parser::make_CODE_BLOCK_START( tmp, loc); } { {blank}+ loc.step(); \n+ { auto loc_newline = loc; loc_newline.end = loc_newline.begin; loc.lines(yyleng); loc.step(); } "%}"{blank}* { BEGIN(INITIAL); auto loc2 = loc; loc2.begin = code_block_start.begin; return yy::parser::make_CODE_BLOCK_CONTENTS(code_block_contents, loc2); } .* { code_block_contents += std::string(yytext) + "\n"; } } { {blank}+ loc.step(); "*/" { BEGIN(INITIAL); } "*" { } [^\n\*]* { } \n+ { auto loc_newline = loc; loc_newline.end = loc_newline.begin; loc.lines(yyleng); loc.step(); } } { \"[^\n]*\" return yy::parser::make_STRING(yytext, loc); {blank}+ loc.step(); "=" return yy::parser::make_EQUAL(loc); {int} return make_INT(yytext, loc); {hex} return make_HEX(yytext, loc); {binary} return make_BINARY(yytext, loc); [^ \t\n\"=]+ return yy::parser::make_NON_WS(yytext, loc); \n+ { BEGIN(INITIAL); auto loc_newline = loc; loc_newline.end = loc_newline.begin; loc.lines(yyleng); loc.step(); return yy::parser::make_NEWLINE(loc_newline); } . { throw yy::parser::syntax_error(loc, "invalid character: " + std::string(yytext)); } } "/*" { BEGIN(c_comment); } "," return yy::parser::make_COMMA(loc); "::" return yy::parser::make_REVERSE(loc); ":" return yy::parser::make_COLON(loc); "[" return yy::parser::make_LBRACKET(loc); "]" return yy::parser::make_RBRACKET(loc); "(" return yy::parser::make_LPAREN(loc); ")" return yy::parser::make_RPAREN(loc); "+" return yy::parser::make_PLUS(loc); "--" return yy::parser::make_POST_DECREMENT(loc); "−−" return yy::parser::make_POST_DECREMENT(loc); "-" return yy::parser::make_MINUS(loc); "*" return yy::parser::make_MULTIPLY(loc); "/" return yy::parser::make_DIVIDE(loc); "|" return yy::parser::make_OR(loc); "&" return yy::parser::make_AND(loc); "^" return yy::parser::make_XOR(loc); "!=" return yy::parser::make_NOT_EQUAL(loc); "!" return yy::parser::make_NOT(loc); "~" return yy::parser::make_NOT(loc); ".program" return yy::parser::make_PROGRAM(loc); ".wrap_target" return yy::parser::make_WRAP_TARGET(loc); ".wrap" return yy::parser::make_WRAP(loc); ".word" return yy::parser::make_WORD(loc); ".define" return yy::parser::make_DEFINE(loc); ".side_set" return yy::parser::make_SIDE_SET(loc); ".origin" return yy::parser::make_ORIGIN(loc); ".lang_opt" { BEGIN(lang_opt); return yy::parser::make_LANG_OPT(loc); } {directive} return yy::parser::make_UNKNOWN_DIRECTIVE(yytext, loc); "JMP" return yy::parser::make_JMP(loc); "WAIT" return yy::parser::make_WAIT(loc); "IN" return yy::parser::make_IN(loc); "OUT" return yy::parser::make_OUT(loc); "PUSH" return yy::parser::make_PUSH(loc); "PULL" return yy::parser::make_PULL(loc); "MOV" return yy::parser::make_MOV(loc); "IRQ" return yy::parser::make_IRQ(loc); "SET" return yy::parser::make_SET(loc); "NOP" return yy::parser::make_NOP(loc); "PUBLIC" return yy::parser::make_PUBLIC(loc); "OPTIONAL" return yy::parser::make_OPTIONAL(loc); "OPT" return yy::parser::make_OPTIONAL(loc); "SIDE" return yy::parser::make_SIDE(loc); "SIDESET" return yy::parser::make_SIDE(loc); "SIDE_SET" return yy::parser::make_SIDE(loc); "PIN" return yy::parser::make_PIN(loc); "GPIO" return yy::parser::make_GPIO(loc); "OSRE" return yy::parser::make_OSRE(loc); "PINS" return yy::parser::make_PINS(loc); "NULL" return yy::parser::make_NULL(loc); "PINDIRS" return yy::parser::make_PINDIRS(loc); "X" return yy::parser::make_X(loc); "Y" return yy::parser::make_Y(loc); "PC" return yy::parser::make_PC(loc); "EXEC" return yy::parser::make_EXEC(loc); "ISR" return yy::parser::make_ISR(loc); "OSR" return yy::parser::make_OSR(loc); "STATUS" return yy::parser::make_STATUS(loc); "BLOCK" return yy::parser::make_BLOCK(loc); "NOBLOCK" return yy::parser::make_NOBLOCK(loc); "IFFULL" return yy::parser::make_IFFULL(loc); "IFEMPTY" return yy::parser::make_IFEMPTY(loc); "REL" return yy::parser::make_REL(loc); "CLEAR" return yy::parser::make_CLEAR(loc); "NOWAIT" return yy::parser::make_NOWAIT(loc); "ONE" return yy::parser::make_INT(1, loc); "ZERO" return yy::parser::make_INT(0, loc); <> return yy::parser::make_END(loc); {int} return make_INT(yytext, loc); {hex} return make_HEX(yytext, loc); {binary} return make_BINARY(yytext, loc); {id} return yy::parser::make_ID(yytext, loc); {comment} { } . { throw yy::parser::syntax_error(loc, "invalid character: " + std::string(yytext)); } %% yy::parser::symbol_type make_INT(const std::string &s, const yy::parser::location_type& loc) { errno = 0; long n = strtol (s.c_str(), NULL, 10); if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE)) throw yy::parser::syntax_error (loc, "integer is out of range: " + s); return yy::parser::make_INT((int) n, loc); } yy::parser::symbol_type make_HEX(const std::string &s, const yy::parser::location_type& loc) { errno = 0; long n = strtol (s.c_str() + 2, NULL, 16); if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE)) throw yy::parser::syntax_error (loc, "hex is out of range: " + s); return yy::parser::make_INT((int) n, loc); } yy::parser::symbol_type make_BINARY(const std::string &s, const yy::parser::location_type& loc) { errno = 0; long n = strtol (s.c_str()+2, NULL, 2); if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE)) throw yy::parser::syntax_error (loc, "binary is out of range: " + s); return yy::parser::make_INT((int) n, loc); } void pio_assembler::scan_begin () { yy_flex_debug = false; if (source.empty () || source == "-") yyin = stdin; else if (!(yyin = fopen (source.c_str (), "r"))) { std::cerr << "cannot open " << source << ": " << strerror(errno) << '\n'; exit (EXIT_FAILURE); } } void pio_assembler::scan_end () { fclose (yyin); } ================================================ FILE: pico-sdk/tools/pioasm/main.cpp ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "pio_assembler.h" #define DEFAULT_OUTPUT_FORMAT "c-sdk" void usage() { std::cerr << "usage: pioasm ()\n\n"; std::cerr << "Assemble file of PIO program(s) for use in applications.\n"; std::cerr << " the input filename\n"; std::cerr << " the output filename (or filename prefix if the output format produces multiple outputs).\n"; std::cerr << " if not specified, a single output will be written to stdout\n"; std::cerr << "\n"; std::cerr << "options:\n"; std::cerr << " -o select output_format (default '" << DEFAULT_OUTPUT_FORMAT << "'); available options are:\n"; for(const auto& f : output_format::all()) { std::cerr << " " << f->name << std::endl; std::cerr << " " << f->get_description() << std::endl; } std::cerr << " -p add a parameter to be passed to the output format generator" << std::endl; std::cerr << " -?, --help print this help and exit\n"; } int main(int argc, char *argv[]) { int res = 0; pio_assembler pioasm; std::string format(DEFAULT_OUTPUT_FORMAT); const char *input = nullptr; const char *output = nullptr; std::vector options; int i = 1; for (; !res && i < argc; i++) { if (argv[i][0] != '-') break; if (argv[i] == std::string("-o")) { if (++i < argc) { format = argv[i]; } else { std::cerr << "error: -o requires format value" << std::endl; res = 1; } } else if (argv[i] == std::string("-p")) { if (++i < argc) { options.emplace_back(argv[i]); } else { std::cerr << "error: -p requires parameter value" << std::endl; res = 1; } } else if (argv[i] == std::string("-?") || argv[i] == std::string("--help")) { usage(); return 1; } else { std::cerr << "error: unknown option " << argv[i] << std::endl; res = 1; } } if (!res) { if (i != argc) { input = argv[i++]; } else { std::cerr << "error: expected input filename\n"; res = 1; } } if (!res) { if (i != argc) { output = argv[i++]; } else { output = "-"; } } if (!res && i != argc) { std::cerr << "unexpected command line argument " << argv[i] << std::endl; res = 1; } std::shared_ptr oformat; if (!res) { const auto& e = std::find_if(output_format::all().begin(), output_format::all().end(), [&](const std::shared_ptr &f) { return f->name == format; }); if (e == output_format::all().end()) { std::cerr << "error: unknown output format '" << format << "'" << std::endl; res = 1; } else { oformat = *e; } } if (res) { std::cerr << std::endl; usage(); } else { res = pioasm.generate(oformat, input, output, options); } return res; } ================================================ FILE: pico-sdk/tools/pioasm/output_format.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _OUTPUT_FORMAT_H #define _OUTPUT_FORMAT_H #include #include #include #include typedef unsigned int uint; // can't use optional because we want to support older compilers template struct simple_optional { T value; T default_value; bool specified; simple_optional() : default_value(), specified(false) {} simple_optional(const T &value) : value(value), specified(true) {} simple_optional &operator=(const T &v) { value = v; specified = true; return *this; } operator bool() = delete; // confusing const T &get() const { return specified ? value : default_value; } bool is_specified() const { return specified; } static simple_optional with_default(const T &default_value) { simple_optional rc; rc.default_value = default_value; return rc; } }; typedef simple_optional optional_int; typedef simple_optional optional_bool; struct compiled_source { struct symbol { std::string name; int value; bool is_label; symbol(std::string name, int value, bool is_label) : name(std::move(name)), value(value), is_label(is_label) {} }; struct program { std::string name; optional_int origin = optional_int::with_default(-1); optional_int sideset_bits_including_opt; bool sideset_opt = false; bool sideset_pindirs = false; int wrap; int wrap_target; std::vector instructions; std::vector symbols; // public only std::map> code_blocks; std::map>> lang_opts; // todo can't have wrap at -1 program(std::string name) : name(std::move(name)) {} }; std::vector global_symbols; // public only std::vector programs; }; struct output_format { static std::string default_name; std::string name; static void add(output_format *lang) { all().push_back(std::shared_ptr(lang)); } virtual int output(std::string destination, std::vector output_options, const compiled_source &source) = 0; virtual std::string get_description() = 0; FILE *open_single_output(std::string destination); virtual ~output_format() = default; static std::vector>& all() { static std::vector> output_formats; return output_formats; } protected: output_format(std::string name) : name(std::move(name)) {} }; #endif ================================================ FILE: pico-sdk/tools/pioasm/parser.yy ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ %skeleton "lalr1.cc" /* -*- C++ -*- */ %require "3.4.2" %defines %define api.token.constructor %define api.value.type variant /*%define parse.assert*/ %define api.location.file "location.h" %define parse.lac full /* define parse.trace*/ %define parse.error verbose %no-lines %locations %code requires { #include #include #include #include "pio_types.h" struct pio_assembler; #ifdef _MSC_VER #pragma warning(disable : 4065) // default only switch statement #endif } // The parsing context. %param { pio_assembler& pioasm } %code { #include "pio_assembler.h" #ifdef _MSC_VER #pragma warning(disable : 4244) // possible loss of data (valid warning, but there is a software check / missing cast) #endif } %define api.token.prefix {TOK_} %token END 0 "end of file" NEWLINE "end of line" COMMA "," COLON ":" LPAREN "(" RPAREN ")" LBRACKET "[" RBRACKET "]" PLUS "+" MINUS "-" MULTIPLY "*" DIVIDE "/" OR "|" AND "&" XOR "^" POST_DECREMENT "--" NOT_EQUAL "!=" NOT "!" REVERSE "::" EQUAL "=" PROGRAM ".program" WRAP_TARGET ".wrap_target" WRAP ".wrap" DEFINE ".define" SIDE_SET ".side_set" WORD ".word" ORIGIN ".origin" LANG_OPT ".lang_opt" JMP "jmp" WAIT "wait" IN "in" OUT "out" PUSH "push" PULL "pull" MOV "mov" IRQ "irq" SET "set" NOP "nop" PIN "pin" GPIO "gpio" OSRE "osre" PINS "pins" NULL "null" PINDIRS "pindirs" BLOCK "block" NOBLOCK "noblock" IFEMPTY "ifempty" IFFULL "iffull" NOWAIT "nowait" CLEAR "clear" REL "rel" X "x" Y "y" EXEC "exec" PC "pc" ISR "isr" OSR "osr" OPTIONAL "opt" SIDE "side" STATUS "status" PUBLIC "public" ; %token ID "identifier" STRING "string" NON_WS "text" CODE_BLOCK_START "code block" CODE_BLOCK_CONTENTS "%}" // bit ugly but if there is no end this is what we will be missing UNKNOWN_DIRECTIVE INT "integer" ; %left REVERSE %left PLUS MINUS %left MULTIPLY DIVIDE %left AND OR XOR %printer { yyo << "..."; } <*>; %% file: lines END { if (pioasm.error_count || pioasm.write_output()) YYABORT; } ; lines: line | lines NEWLINE line; line: PROGRAM ID { if (!pioasm.add_program(@$, $2)) { std::stringstream msg; msg << "program " << $2 << " already exists"; error(@$, msg.str()); abort(); } } | directive | instruction { pioasm.get_current_program(@1, "instruction").add_instruction($1); } | label_decl instruction { auto &p = pioasm.get_current_program(@2, "instruction"); p.add_label($1); p.add_instruction($2); } | label_decl { pioasm.get_current_program(@1, "label").add_label($1); } | code_block | %empty | error { if (pioasm.error_count > 6) { std::cerr << "\ntoo many errors; aborting.\n"; YYABORT; } } ; code_block: CODE_BLOCK_START CODE_BLOCK_CONTENTS { std::string of = $1; if (of.empty()) of = output_format::default_name; pioasm.get_current_program(@$, "code block", false, false).add_code_block( code_block(@$, of, $2)); } %type > label_decl; label_decl: symbol_def COLON { $1->is_label = true; $$ = $1; } directive: DEFINE symbol_def expression { $2->is_label = false; $2->value = $3; pioasm.get_current_program(@1, ".define", false, false).add_symbol($2); } | ORIGIN value { pioasm.get_current_program(@1, ".origin", true).set_origin(@$, $2); } | SIDE_SET value OPTIONAL PINDIRS { pioasm.get_current_program(@1, ".side_set", true).set_sideset(@$, $2, true, true); } | SIDE_SET value OPTIONAL { pioasm.get_current_program(@1, ".side_set", true).set_sideset(@$, $2, true, false); } | SIDE_SET value PINDIRS { pioasm.get_current_program(@1, ".side_set", true).set_sideset(@$, $2, false, true); } | SIDE_SET value { pioasm.get_current_program(@1, ".side_set", true).set_sideset(@$, $2, false, false); } | WRAP_TARGET { pioasm.get_current_program(@1, ".wrap_target").set_wrap_target(@$); } | WRAP { pioasm.get_current_program(@1, ".wrap").set_wrap(@$); } | WORD value { pioasm.get_current_program(@1, "instruction").add_instruction(std::shared_ptr(new instr_word(@$, $2))); } | LANG_OPT NON_WS NON_WS EQUAL INT { pioasm.get_current_program(@1, ".lang_opt").add_lang_opt($2, $3, std::to_string($5)); } | LANG_OPT NON_WS NON_WS EQUAL STRING { pioasm.get_current_program(@1, ".lang_opt").add_lang_opt($2, $3, $5); } | LANG_OPT NON_WS NON_WS EQUAL NON_WS { pioasm.get_current_program(@1, ".lang_opt").add_lang_opt($2, $3, $5); } | LANG_OPT error { error(@$, "expected format is .lang_opt language option_name = option_value"); } | UNKNOWN_DIRECTIVE { std::stringstream msg; msg << "unknown directive " << $1; throw syntax_error(@$, msg.str()); } ; /* value is a more limited top level expression... requiring parenthesis */ %type > value; value: INT { $$ = resolvable_int(@$, $1); } | ID { $$ = std::shared_ptr(new name_ref(@$, $1)); } | LPAREN expression RPAREN { $$ = $2; } %type > expression; expression: value | expression PLUS expression { $$ = std::shared_ptr(new binary_operation(@$, binary_operation::add, $1, $3)); } | expression MINUS expression { $$ = std::shared_ptr(new binary_operation(@$, binary_operation::subtract, $1, $3)); } | expression MULTIPLY expression { $$ = std::shared_ptr(new binary_operation(@$, binary_operation::multiply, $1, $3)); } | expression DIVIDE expression { $$ = std::shared_ptr(new binary_operation(@$, binary_operation::divide, $1, $3)); } | expression OR expression { $$ = std::shared_ptr(new binary_operation(@$, binary_operation::or_, $1, $3)); } | expression AND expression { $$ = std::shared_ptr(new binary_operation(@$, binary_operation::and_, $1, $3)); } | expression XOR expression { $$ = std::shared_ptr(new binary_operation(@$, binary_operation::xor_, $1, $3)); } | MINUS expression { $$ = std::shared_ptr(new unary_operation(@$, unary_operation::negate, $2)); } | REVERSE expression { $$ = std::shared_ptr(new unary_operation(@$, unary_operation::reverse, $2)); } %type > instruction; instruction: base_instruction sideset delay { $$ = $1; $$->sideset = $2; $$->delay = $3; } | base_instruction delay sideset { $$ = $1; $$->delay = $2; $$->sideset = $3; } | base_instruction sideset { $$ = $1; $$->sideset = $2; $$->delay = resolvable_int(@$, 0); } | base_instruction delay { $$ = $1; $$->delay = $2; } | base_instruction { $$ = $1; $$->delay = resolvable_int(@$, 0); } %type > base_instruction; base_instruction: NOP { $$ = std::shared_ptr(new instr_nop(@$)); } | JMP condition comma expression { $$ = std::shared_ptr(new instr_jmp(@$, $2, $4)); } | WAIT value wait_source { $$ = std::shared_ptr(new instr_wait(@$, $2, $3)); } | WAIT value COMMA value { std::stringstream msg; location l; l.begin = @2.end; l.end = @3.end; msg << "expected irq, gpio or pin after the polarity value and before the \",\""; throw yy::parser::syntax_error(l, msg.str()); } | WAIT wait_source { $$ = std::shared_ptr(new instr_wait(@$, resolvable_int(@$, 1), $2)); } | IN in_source comma value { $$ = std::shared_ptr(new instr_in(@$, $2, $4)); } | OUT out_target comma value { $$ = std::shared_ptr(new instr_out(@$, $2, $4)); } | PUSH if_full blocking { $$ = std::shared_ptr(new instr_push(@$, $2, $3)); } | PULL if_empty blocking { $$ = std::shared_ptr(new instr_pull(@$, $2, $3)); } | MOV mov_target comma mov_op mov_source { $$ = std::shared_ptr(new instr_mov(@$, $2, $5, $4)); } | IRQ irq_modifiers value REL { $$ = std::shared_ptr(new instr_irq(@$, $2, $3, true)); } | IRQ irq_modifiers value { $$ = std::shared_ptr(new instr_irq(@$, $2, $3)); } | SET set_target comma value { $$ = std::shared_ptr(new instr_set(@$, $2, $4)); } ; %type > delay; delay: LBRACKET expression RBRACKET { $$ = $2; } %type > sideset; sideset: SIDE value { $$ = $2; } %type condition; condition: NOT X { $$ = condition::xz; } | X POST_DECREMENT { $$ = condition::xnz__; } | NOT Y { $$ = condition::yz; } | Y POST_DECREMENT { $$ = condition::ynz__; } | X NOT_EQUAL Y { $$ = condition::xney; } | PIN { $$ = condition::pin; } | NOT OSRE { $$ = condition::osrez; } | %empty { $$ = condition::al; } %type > wait_source; wait_source: IRQ comma value REL { $$ = std::shared_ptr(new wait_source(wait_source::irq, $3, true)); } | IRQ comma value { $$ = std::shared_ptr(new wait_source(wait_source::irq, $3, false)); } | GPIO comma value { $$ = std::shared_ptr(new wait_source(wait_source::gpio, $3)); } | PIN comma value { $$ = std::shared_ptr(new wait_source(wait_source::pin, $3)); } comma: COMMA | %empty /* not a huge fan of forcing commas */ %type in_source; in_source: PINS { $$ = in_out_set::in_out_set_pins; } | X { $$ = in_out_set::in_out_set_x; } | Y { $$ = in_out_set::in_out_set_y; } | NULL { $$ = in_out_set::in_out_null; } | ISR { $$ = in_out_set::in_out_isr; } | OSR { $$ = in_out_set::in_osr; } | STATUS { $$ = in_out_set::in_status; } %type out_target; out_target: PINS { $$ = in_out_set::in_out_set_pins; } | X { $$ = in_out_set::in_out_set_x; } | Y { $$ = in_out_set::in_out_set_y; } | NULL { $$ = in_out_set::in_out_null; } | PINDIRS { $$ = in_out_set::in_out_set_pindirs; } | ISR { $$ = in_out_set::in_out_isr; } | PC { $$ = in_out_set::out_set_pc; } | EXEC { $$ = in_out_set::out_exec; } %type mov_target; mov_target: PINS { $$ = mov::pins; } | X { $$ = mov::x; } | Y { $$ = mov::y; } | EXEC { $$ = mov::exec; } | PC { $$ = mov::pc; } | ISR { $$ = mov::isr; } | OSR { $$ = mov::osr; } %type mov_source; mov_source: PINS { $$ = mov::pins; } | X { $$ = mov::x; } | Y { $$ = mov::y; } | NULL { $$ = mov::null; } | STATUS { $$ = mov::status; } | ISR { $$ = mov::isr; } | OSR { $$ = mov::osr; } %type mov_op; mov_op: NOT { $$ = mov_op::invert; } | REVERSE { $$ = mov_op::bit_reverse; } | %empty { $$ = mov_op::none; } %type set_target; set_target: PINS { $$ = in_out_set::in_out_set_pins; } | X { $$ = in_out_set::in_out_set_x; } | Y { $$ = in_out_set::in_out_set_y; } | PINDIRS { $$ = in_out_set::in_out_set_pindirs; } %type if_full; if_full: IFFULL { $$ = true; } | %empty { $$ = false; } %type if_empty; if_empty: IFEMPTY { $$ = true; } | %empty { $$ = false; } %type blocking; blocking: BLOCK { $$ = true; } | NOBLOCK { $$ = false; } | %empty { $$ = true; } %type irq_modifiers; irq_modifiers: CLEAR { $$ = irq::clear; } | WAIT { $$ = irq::set_wait; } | NOWAIT { $$ = irq::set; } | SET { $$ = irq::set; } | %empty { $$ = irq::set; } %type > symbol_def; symbol_def: ID { $$ = std::shared_ptr(new symbol(@$, $1)); } | PUBLIC ID { $$ = std::shared_ptr(new symbol(@$, $2, true)); } | MULTIPLY ID { $$ = std::shared_ptr(new symbol(@$, $2, true)); } %% void yy::parser::error(const location_type& l, const std::string& m) { if (l.begin.filename) { std::cerr << l << ": " << m << '\n'; pioasm.error_count++; if (l.begin.line == l.end.line && *l.begin.filename == *l.end.filename) { std::ifstream file(l.begin.filename->c_str()); std::string line; for(int i = 0; i < l.begin.line; ++i) { std::getline(file, line); } fprintf(stderr, "%5d | %s\n", l.begin.line, line.c_str()); fprintf(stderr, "%5s | %*s", "", l.begin.column, "^"); for (int i = l.begin.column; i < l.end.column - 1; i++) { putc ('~', stderr); } putc ('\n', stderr); } } else { std::cerr << m << '\n'; } } ================================================ FILE: pico-sdk/tools/pioasm/pio_assembler.cpp ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include "pio_assembler.h" #include "parser.hpp" #ifdef _MSC_VER #pragma warning(disable : 4996) // fopen #endif using syntax_error = yy::parser::syntax_error; std::string output_format::default_name = "c-sdk"; pio_assembler::pio_assembler() { } int pio_assembler::generate(std::shared_ptr _format, const std::string &_source, const std::string &_dest, const std::vector &_options) { format = _format; source = _source; dest = _dest; options = _options; location.initialize(&source); scan_begin(); yy::parser parse(*this); // parse.set_debug_level(false); int res = parse(); scan_end(); return res; } void program::add_instruction(std::shared_ptr inst) { uint limit = MAX_INSTRUCTIONS; if (instructions.size() >= limit) { // todo take offset into account std::stringstream msg; msg << "program instruction limit of " << limit << " instruction(s) exceeded"; throw syntax_error(inst->location, msg.str()); } if (!sideset_opt && !inst->sideset) { std::stringstream msg; msg << "instruction requires 'side' to specify side set value for the instruction because non optional sideset was specified for the program at " << sideset.location; throw syntax_error(inst->location, msg.str()); } instructions.push_back(inst); } using syntax_error = yy::parser::syntax_error; void program::add_symbol(std::shared_ptr symbol) { const auto &existing = pioasm->get_symbol(symbol->name, this); if (existing) { std::stringstream msg; if (symbol->is_label != existing->is_label) { msg << "'" << symbol->name << "' was already defined as a " << (existing->is_label ? "label" : "value") << " at " << existing->location; } else if (symbol->is_label) { msg << "label '" << symbol->name << "' was already defined at " << existing->location; } else { msg << "'" << symbol->name << "' was already defined at " << existing->location; } throw syntax_error(symbol->location, msg.str()); } symbols.insert(std::pair>(symbol->name, symbol)); ordered_symbols.push_back(symbol); } int resolvable::resolve(const program &program) { return resolve(program.pioasm, &program); } int unary_operation::resolve(pio_assembler *pioasm, const program *program, const resolvable &scope) { int value = arg->resolve(pioasm, program, scope); switch (op) { case negate: return -value; case reverse: { // slow is fine uint result = 0; for (uint i = 0; i < 32; i++) { result <<= 1u; if (value & 1u) { result |= 1u; } value >>= 1u; } return result; } default: throw syntax_error(location, "internal error"); } } int binary_operation::resolve(pio_assembler *pioasm, const program *program, const resolvable &scope) { int lvalue = left->resolve(pioasm, program, scope); int rvalue = right->resolve(pioasm, program, scope); switch (op) { case add: return lvalue + rvalue; case subtract: return lvalue - rvalue; case multiply: return lvalue * rvalue; case divide: return lvalue / rvalue; case and_: return lvalue & rvalue; case or_: return lvalue | rvalue; case xor_: return lvalue ^ rvalue; default: throw syntax_error(location, "internal error"); } } void program::set_wrap(const yy::location &l) { if (wrap) { std::stringstream msg; msg << ".wrap was already specified at " << wrap->location; throw syntax_error(l, msg.str()); } if (instructions.empty()) { throw syntax_error(l, ".wrap cannot be placed before the first program instruction"); } wrap = resolvable_int(l, instructions.size() - 1); } void program::set_wrap_target(const yy::location &l) { if (wrap_target) { std::stringstream msg; msg << ".wrap_target was already specified at " << wrap_target->location; throw syntax_error(l, msg.str()); } wrap_target = resolvable_int(l, instructions.size()); } void program::add_code_block(const code_block &block) { code_blocks[block.lang].push_back(block); } void program::add_lang_opt(std::string lang, std::string name, std::string value) { lang_opts[lang].emplace_back(name, value); } void program::finalize() { if (sideset.value) { int bits = sideset.value->resolve(*this); if (bits < 0) { throw syntax_error(sideset.value->location, "number of side set bits must be positive"); } sideset_max = (1u << bits) - 1; if (sideset_opt) bits++; sideset_bits_including_opt = bits; if (bits > 5) { if (sideset_opt) throw syntax_error(sideset.value->location, "maximum number of side set bits with optional is 4"); else throw syntax_error(sideset.value->location, "maximum number of side set bits is 5"); } delay_max = (1u << (5 - bits)) - 1; } else { sideset_max = 0; delay_max = 31; } } int name_ref::resolve(pio_assembler *pioasm, const program *program, const resolvable &scope) { auto symbol = pioasm->get_symbol(name, program); if (symbol) { if (symbol->resolve_started) { std::stringstream msg; msg << "circular dependency in definition of '" << name << "'; detected at " << location << ")"; throw syntax_error(scope.location, msg.str()); } try { symbol->resolve_started++; int rc = symbol->value->resolve(pioasm, program, scope); symbol->resolve_started--; return rc; } catch (syntax_error &e) { symbol->resolve_started--; throw e; } } else { std::stringstream msg; msg << "undefined symbol '" << name << "'"; throw syntax_error(location, msg.str()); } } uint instruction::encode(const program &program) { raw_encoding raw = raw_encode(program); int _delay = delay->resolve(program); if (_delay < 0) { throw syntax_error(delay->location, "instruction delay must be positive"); } if (_delay > program.delay_max) { if (program.delay_max == 31) { throw syntax_error(delay->location, "instruction delay must be <= 31"); } else { std::stringstream msg; msg << "the instruction delay limit is " << program.delay_max << " because of the side set specified at " << program.sideset.location; throw syntax_error(delay->location, msg.str()); } } int _sideset = 0; if (sideset) { _sideset = sideset->resolve(program); if (_sideset < 0) { throw syntax_error(sideset->location, "side set value must be >=0"); } if (_sideset > program.sideset_max) { std::stringstream msg; msg << "the maximum side set value is " << program.sideset_max << " based on the configuration specified at " << program.sideset.location; throw syntax_error(sideset->location, msg.str()); } _sideset <<= (5u - program.sideset_bits_including_opt); if (program.sideset_opt) { _sideset |= 0x10u; } } return (((uint) raw.type) << 13u) | (((uint) _delay | (uint) _sideset) << 8u) | (raw.arg1 << 5u) | raw.arg2; } raw_encoding instruction::raw_encode(const program &program) { throw syntax_error(location, "internal error"); } uint instr_word::encode(const program &program) { uint value = encoding->resolve(program); if (value > 0xffffu) { throw syntax_error(location, ".word value must be a positive 16 bit value"); } return value; } raw_encoding instr_jmp::raw_encode(const program &program) { int dest = target->resolve(program); if (dest < 0) { throw syntax_error(target->location, "jmp target address must be positive"); } else if (dest >= (int)program.instructions.size()) { std::stringstream msg; msg << "jmp target address " << dest << " is beyond the end of the program"; throw syntax_error(target->location, msg.str()); } return {inst_type::jmp, (uint) cond, (uint) dest}; } raw_encoding instr_in::raw_encode(const program &program) { int v = value->resolve(program); if (v < 1 || v > 32) { throw syntax_error(value->location, "'in' bit count must be >= 1 and <= 32"); } return {inst_type::in, (uint) src, (uint) v & 0x1fu}; } raw_encoding instr_out::raw_encode(const program &program) { int v = value->resolve(program); if (v < 1 || v > 32) { throw syntax_error(value->location, "'out' bit count must be >= 1 and <= 32"); } return {inst_type::out, (uint) dest, (uint) v & 0x1fu}; } raw_encoding instr_set::raw_encode(const program &program) { int v = value->resolve(program); if (v < 0 || v > 31) { throw syntax_error(value->location, "'set' bit count must be >= 0 and <= 31"); } return {inst_type::set, (uint) dest, (uint) v}; } raw_encoding instr_wait::raw_encode(const program &program) { uint pol = polarity->resolve(program); if (pol > 1) { throw syntax_error(polarity->location, "'wait' polarity must be 0 or 1"); } uint arg2 = source->param->resolve(program); switch (source->target) { case wait_source::irq: if (arg2 > 7) throw syntax_error(source->param->location, "irq number must be must be >= 0 and <= 7"); break; case wait_source::gpio: if (arg2 > 31) throw syntax_error(source->param->location, "absolute GPIO number must be must be >= 0 and <= 31"); break; case wait_source::pin: if (arg2 > 31) throw syntax_error(polarity->location, "pin number must be must be >= 0 and <= 31"); break; } return {inst_type::wait, (pol << 2u) | (uint) source->target, arg2 | (source->flag ? 0x10u : 0u)}; } raw_encoding instr_irq::raw_encode(const program &program) { uint arg2 = num->resolve(program); if (arg2 > 7) throw syntax_error(num->location, "irq number must be must be >= 0 and <= 7"); if (relative) arg2 |= 0x10u; return {inst_type::irq, (uint)modifiers, arg2}; } std::vector pio_assembler::public_symbols(program &program) { std::vector> public_symbols; std::remove_copy_if(program.ordered_symbols.begin(), program.ordered_symbols.end(), std::inserter(public_symbols, public_symbols.end()), [](const std::shared_ptr &s) { return !s->is_public; }); std::vector rc; std::transform(public_symbols.begin(), public_symbols.end(), std::back_inserter(rc), [&](const std::shared_ptr &s) { return compiled_source::symbol(s->name, s->value->resolve(program), s->is_label); }); return rc; } int pio_assembler::write_output() { std::set known_output_formats; std::transform(output_format::all().begin(), output_format::all().end(), std::inserter(known_output_formats, known_output_formats.begin()), [&](std::shared_ptr &f) { return f->name; }); compiled_source source; source.global_symbols = public_symbols(get_dummy_global_program()); for (auto &program : programs) { program.finalize(); source.programs.emplace_back(compiled_source::program(program.name)); auto &cprogram = source.programs[source.programs.size() - 1]; cprogram = compiled_source::program(program.name); // encode the instructions std::transform(program.instructions.begin(), program.instructions.end(), std::back_inserter(cprogram.instructions), [&](std::shared_ptr &inst) { return inst->encode(program); }); for (const auto &e : program.code_blocks) { bool ok = false; for(const auto &o : known_output_formats) { if (o == e.first || 0 == e.first.find(o+"-")) { ok = true; break; } } if (!ok) { std::cerr << e.second[0].location << ": warning, unknown code block output type '" << e.first << "'\n"; known_output_formats.insert(e.first); } } if (program.wrap) cprogram.wrap = program.wrap->resolve(program); else cprogram.wrap = std::max((int)program.instructions.size() - 1, 0); if (program.wrap_target) cprogram.wrap_target = program.wrap_target->resolve(program); else cprogram.wrap_target = 0; if (program.origin.value) cprogram.origin = program.origin.value->resolve(program); if (program.sideset.value) { cprogram.sideset_bits_including_opt = program.sideset_bits_including_opt; cprogram.sideset_opt = program.sideset_opt; cprogram.sideset_pindirs = program.sideset_pindirs; } std::transform(program.code_blocks.begin(), program.code_blocks.end(), std::inserter(cprogram.code_blocks, cprogram.code_blocks.begin()), [](const std::pair>&e) { std::vector blocks; std::transform(e.second.begin(), e.second.end(), std::back_inserter(blocks), [&](const code_block& block) { return block.contents; }); return std::pair>(e.first, blocks); }); cprogram.lang_opts = program.lang_opts; cprogram.symbols = public_symbols(program); } if (programs.empty()) { std::cout << "warning: input contained no programs" << std::endl; } return format->output(dest, options, source); } FILE *output_format::open_single_output(std::string destination) { FILE *out = destination == "-" ? stdout : fopen(destination.c_str(), "w"); if (!out) { std::cerr << "Can't open output file '" << destination << "'" << std::endl; } return out; } ================================================ FILE: pico-sdk/tools/pioasm/pio_assembler.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PIO_ASSEMBLER_H #define _PIO_ASSEMBLER_H #include #include "parser.hpp" #include "output_format.h" // Give Flex the prototype of yylex we want ... # define YY_DECL \ yy::parser::symbol_type yylex (pio_assembler& pioasm) // ... and declare it for the parser's sake. YY_DECL; struct pio_assembler { public: using syntax_error = yy::parser::syntax_error; using location_type = yy::parser::location_type; std::shared_ptr dummy_global_program; std::vector programs; int error_count = 0; pio_assembler(); std::shared_ptr format; // The name of the file being parsed. std::string source; // name of the output file or "-" for stdout std::string dest; std::vector options; int write_output(); bool add_program(const yy::location &l, const std::string &name) { if (std::find_if(programs.begin(), programs.end(), [&](const program &p) { return p.name == name; }) == programs.end()) { programs.emplace_back(this, l, name); return true; } else { return false; } } program &get_dummy_global_program() { if (!dummy_global_program) { dummy_global_program = std::shared_ptr(new program(this, yy::location(&source), "")); } return *dummy_global_program; } program &get_current_program(const location_type &l, const std::string &requiring_program, bool before_any_instructions = false, bool disallow_global = true) { if (programs.empty()) { if (disallow_global) { std::stringstream msg; msg << requiring_program << " is invalid outside of a program"; throw syntax_error(l, msg.str()); } return get_dummy_global_program(); } auto &p = programs[programs.size() - 1]; if (before_any_instructions && !p.instructions.empty()) { std::stringstream msg; msg << requiring_program << " must preceed any program instructions"; throw syntax_error(l, msg.str()); } return p; } // note p may be null for global symbols only std::shared_ptr get_symbol(const std::string &name, const program *p) { const auto &i = get_dummy_global_program().symbols.find(name); if (i != get_dummy_global_program().symbols.end()) return i->second; if (p) { const auto &i2 = p->symbols.find(name); if (i2 != p->symbols.end()) return i2->second; } return nullptr; } std::vector public_symbols(program &program); int generate(std::shared_ptr _format, const std::string &_source, const std::string &_dest, const std::vector &_options = std::vector()); // Handling the scanner. void scan_begin(); void scan_end(); // The token's location used by the scanner. yy::location location; }; #endif ================================================ FILE: pico-sdk/tools/pioasm/pio_disassembler.cpp ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include "pio_disassembler.h" extern "C" void disassemble(char *buf, int buf_len, uint16_t inst, uint sideset_bits, bool sideset_opt) { if (buf_len) buf[disassemble(inst, sideset_bits, sideset_opt).copy(buf, buf_len - 1)] = 0; } std::string disassemble(uint16_t inst, uint sideset_bits_including_opt, bool sideset_opt) { std::stringstream ss; uint major = inst >> 13u; uint arg1 = ((uint) inst >> 5u) & 0x7u; uint arg2 = inst & 0x1fu; auto op = [&](const std::string &s) { ss << std::left << std::setw(7) << s; }; auto op_guts = [&](const std::string &s) { ss << std::left << std::setw(16) << s; }; bool invalid = false; switch (major) { case 0b000: { static std::array conditions{"", "!x, ", "x--, ", "!y, ", "y--, ", "x != y, ", "pin, ", "!osre, "}; op("jmp"); op_guts(conditions[arg1] + std::to_string(arg2)); break; } case 0b001: { uint source = arg1 & 3u; std::string guts; switch (source) { case 0b00: guts = "gpio, " + std::to_string(arg2); break; case 0b01: guts = "pin, " + std::to_string(arg2); break; case 0b10: if (arg2 & 0x8u) { invalid = true; } else { guts = "irq, " + std::to_string(arg2 & 7u); if (arg2 & 0x10u) { guts += " rel"; } } break; } if (!invalid) { guts = ((arg1 & 4u) ? "1 " : "0 ") + guts; op("wait"); op_guts(guts); } break; } case 0b010: { static std::array sources { "pins", "x", "y", "null", "", "status", "isr", "osr"}; std::string source = sources[arg1]; if (source.empty()) { invalid = true; } else { op("in"); op_guts(source + ", " + std::to_string(arg2 ? arg2 : 32)); } break; } case 0b011: { static std::array dests { "pins", "x", "y", "null", "pindirs", "pc", "isr", "exec"}; op("out"); op_guts(dests[arg1] + ", " + std::to_string(arg2 ? arg2 : 32)); break; } case 0b100: { if (arg2) { invalid = true; } else { std::string guts = ""; if (arg1 & 4u) { op("pull"); if (arg1 & 2u) guts = "ifempty "; } else { op("push"); if (arg1 & 2u) guts = "iffull "; } guts += (arg1 & 0x1u) ? "block" : "noblock"; op_guts(guts); } break; } case 0b101: { static std::array dests { "pins", "x", "y", "", "exec", "pc", "isr", "osr"}; static std::array sources { "pins", "x", "y", "null", "", "status", "isr", "osr"}; std::string dest = dests[arg1]; std::string source = sources[arg2 & 7u]; uint operation = arg2 >> 3u; if (source.empty() || dest.empty() || operation == 3) { invalid = true; } if (dest == source && !operation && (arg1 == 1 || arg2 == 2)) { op("nop"); op_guts(""); } else { op("mov"); std::string guts = dest + ", "; if (operation == 1) { guts += "!"; } else if (operation == 2) { guts += "::"; } guts += source; op_guts(guts); } break; } case 0b110: { if ((arg1 & 0x4u) || (arg2 & 0x8u)) { invalid = true; } else { op("irq"); std::string guts; if (arg1 & 0x2u) { guts += "clear "; } else if (arg1 & 0x1u) { guts += "wait "; } else { guts += "nowait "; } guts += std::to_string(arg2 & 7u); if (arg2 & 0x10u) { guts += " rel"; } op_guts(guts); } break; } case 0b111: { static std::array dests{"pins", "x", "y", "", "pindirs", "", "", ""}; std::string dest = dests[arg1]; if (dest.empty()) { invalid = true; } else { op("set"); op_guts(dests[arg1] + ", " + std::to_string(arg2)); } break; } } if (invalid) { return "reserved"; } uint delay = ((uint) inst >> 8u) & 0x1f; ss << std::left << std::setw(7); if (sideset_bits_including_opt && (!sideset_opt || (delay & 0x10u))) { ss << ("side "+ std::to_string((delay & (sideset_opt ? 0xfu : 0x1fu)) >> (5u - sideset_bits_including_opt))); } else { ss << ""; } delay &= ((1u << (5 - sideset_bits_including_opt)) - 1u); ss << std::left << std::setw(4) << (delay ? ("[" + std::to_string(delay) + "]") : ""); return ss.str(); } ================================================ FILE: pico-sdk/tools/pioasm/pio_disassembler.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PIO_DISASSEMBLER_H #define _PIO_DISASSEMBLER_H #ifdef __cplusplus #include #include typedef unsigned int uint; std::string disassemble(uint16_t inst, uint sideset_bits, bool sideset_opt); extern "C" void disassemble(char *buf, int buf_len, uint16_t inst, uint sideset_bits, bool sideset_opt); #else void disassemble(char *buf, int buf_len, uint inst, uint sideset_bits, bool sideset_opt); #endif #endif ================================================ FILE: pico-sdk/tools/pioasm/pio_types.h ================================================ /* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _PIO_TYPES_H #define _PIO_TYPES_H #include #include #include #include #include #include #include "location.h" typedef unsigned int uint; enum struct inst_type { jmp = 0x0, wait = 0x1, in = 0x2, out = 0x3, push_pull = 0x4, mov = 0x5, irq = 0x6, set = 0x7, }; /* condition codes */ enum struct condition { al = 0x0, xz = 0x1, xnz__ = 0x2, yz = 0x3, ynz__ = 0x4, xney = 0x5, pin = 0x6, osrez = 0x7, }; /* in source / out / set target - not all valid */ enum struct in_out_set { in_out_set_pins = 0x0, in_out_set_x = 0x1, in_out_set_y = 0x2, in_out_null = 0x3, in_out_set_pindirs = 0x4, in_status = 0x5, out_set_pc = 0x5, in_out_isr = 0x6, in_osr = 0x7, out_exec = 0x7, }; enum struct irq { set = 0x0, set_wait = 0x1, clear = 0x2, }; // mov src/dest (not all valid) enum struct mov { pins = 0x0, x = 0x1, y = 0x2, null = 0x3, exec = 0x4, pc = 0x5, status = 0x5, isr = 0x6, osr = 0x7, }; enum struct mov_op { none = 0x0, invert = 0x1, bit_reverse = 0x2, }; struct src_item { yy::location location; src_item() = default; explicit src_item(const yy::location &location) : location(location) {} }; struct program; struct pio_assembler; struct resolvable : public src_item { resolvable(const yy::location &l) : src_item(l) {} int resolve(const program &program); int resolve(pio_assembler *pioasm, const program *program) { return resolve(pioasm, program, *this); } virtual int resolve(pio_assembler *pioasm, const program *program, const resolvable &scope) = 0; }; using rvalue = std::shared_ptr; struct wait_source { enum type { gpio = 0x0, pin = 0x1, irq = 0x2 } target; rvalue param; bool flag; wait_source(type target, rvalue param, bool flag = false) : target(target), param(std::move(param)), flag(flag) {} }; struct name_ref : public resolvable { std::string name; name_ref(const yy::location &l, std::string name) : resolvable(l), name(std::move(name)) {} int resolve(pio_assembler *pioasm, const program *program, const resolvable &scope) override; }; struct code_block : public resolvable { std::string lang; std::string contents; code_block(const yy::location &l, std::string lang, std::string contents) : resolvable(l), lang(std::move(lang)), contents(std::move(contents)) {} int resolve(pio_assembler *pioasm, const program *program, const resolvable &scope) override { return 0; } }; struct int_value : public resolvable { int value; int_value(const yy::location &l, int value) : resolvable(l), value(value) {} int resolve(pio_assembler *pioasm, const program *program, const resolvable &scope) override { return value; } }; static inline rvalue resolvable_int(const yy::location &l, int v) { return std::shared_ptr(new int_value(l, v)); } struct binary_operation : public resolvable { enum op_type { add, subtract, multiply, divide, and_, // pesky C++ or_, xor_ }; op_type op; rvalue left, right; binary_operation(const yy::location &l, op_type op, rvalue left, rvalue right) : resolvable(l), op(op), left(std::move(left)), right(std::move(right)) {} int resolve(pio_assembler *pioasm, const program *program, const resolvable &scope) override; }; struct unary_operation : public resolvable { enum op_type { negate, reverse }; op_type op; rvalue arg; unary_operation(const yy::location &l, op_type op, const rvalue &arg) : resolvable(l), op(op), arg(arg) {} int resolve(pio_assembler *pioasm, const program *program, const resolvable &scope) override; }; struct symbol : public src_item { std::string name; rvalue value; bool is_public; bool is_label; int resolve_started; symbol(const yy::location &l, std::string name, bool is_extern = false) : src_item(l), name(std::move(name)), is_public(is_extern), is_label(false), resolve_started(false) {} }; struct raw_encoding { enum inst_type type; uint arg1; uint arg2; }; struct instruction : public src_item { rvalue sideset; // possibly null rvalue delay; instruction(const yy::location &l) : src_item(l) {} virtual uint encode(const program &program); virtual raw_encoding raw_encode(const program &program); }; struct pio_assembler; // rvalue with extra encompassing location struct rvalue_loc { rvalue value; yy::location location; rvalue_loc() = default; rvalue_loc(const rvalue &v, const yy::location &l) : value(v), location(l) {} }; struct program : public src_item { static const int MAX_INSTRUCTIONS = 32; pio_assembler *pioasm; std::string name; rvalue_loc origin; rvalue_loc sideset; bool sideset_opt; bool sideset_pindirs; rvalue wrap_target; rvalue wrap; std::map> symbols; std::vector> ordered_symbols; std::vector> instructions; std::map> code_blocks; std::map>> lang_opts; // post finalization int delay_max; int sideset_bits_including_opt; // specified side set bits + 1 if we need presence flag int sideset_max; program(pio_assembler *pioasm, const yy::location &l, std::string name) : src_item(l), pioasm(pioasm), name(std::move(name)), sideset_opt(true), sideset_pindirs(false) {} void set_origin(const yy::location &l, const rvalue &_origin) { origin = rvalue_loc(_origin, l); } void set_wrap_target(const yy::location &l); void set_wrap(const yy::location &l); void set_sideset(const yy::location &l, rvalue _sideset, bool optional, bool pindirs) { sideset = rvalue_loc(_sideset, l); sideset_opt = optional; sideset_pindirs = pindirs; } void add_label(std::shared_ptr label) { label->value = resolvable_int(label->location, instructions.size()); add_symbol(label); } void add_symbol(std::shared_ptr symbol); void add_instruction(std::shared_ptr inst); void add_code_block(const code_block &block); void add_lang_opt(std::string lang, std::string name, std::string value); void finalize(); }; struct instr_jmp : public instruction { condition cond; rvalue target; instr_jmp(const yy::location &l, condition c, rvalue target) : instruction(l), cond(c), target(std::move(target)) { } raw_encoding raw_encode(const program &program) override; }; struct instr_wait : public instruction { rvalue polarity; std::shared_ptr source; instr_wait(const yy::location &l, rvalue polarity, std::shared_ptr source) : instruction(l), polarity( std::move(polarity)), source(std::move(source)) {} raw_encoding raw_encode(const program &program) override; }; struct instr_in : public instruction { enum in_out_set src; rvalue value; instr_in(const yy::location &l, const enum in_out_set &src, rvalue value) : instruction(l), src(src), value(std::move(value)) {} raw_encoding raw_encode(const program &program) override; }; struct instr_out : public instruction { enum in_out_set dest; rvalue value; instr_out(const yy::location &l, const enum in_out_set &dest, rvalue value) : instruction(l), dest(dest), value(std::move(value)) {} raw_encoding raw_encode(const program &program) override; }; struct instr_set : public instruction { enum in_out_set dest; rvalue value; instr_set(const yy::location &l, const enum in_out_set &dest, rvalue value) : instruction(l), dest(dest), value(std::move(value)) {} raw_encoding raw_encode(const program &program) override; }; struct instr_push : public instruction { bool if_full, blocking; instr_push(const yy::location &l, bool if_full, bool blocking) : instruction(l), if_full(if_full), blocking(blocking) {} raw_encoding raw_encode(const program &program) override { uint arg1 = (blocking ? 1u : 0u) | (if_full ? 0x2u : 0); return {inst_type::push_pull, arg1, 0}; } }; struct instr_pull : public instruction { bool if_empty, blocking; instr_pull(const yy::location &l, bool if_empty, bool blocking) : instruction(l), if_empty(if_empty), blocking(blocking) {} raw_encoding raw_encode(const program &program) override { uint arg1 = (blocking ? 1u : 0u) | (if_empty ? 0x2u : 0) | 0x4u; return {inst_type::push_pull, arg1, 0}; } }; struct instr_mov : public instruction { enum mov dest, src; mov_op op; instr_mov(const yy::location &l, const enum mov &dest, const enum mov &src, const mov_op& op = mov_op::none) : instruction(l), dest(dest), src(src), op(op) {} raw_encoding raw_encode(const program &program) override { return {inst_type::mov, (uint) dest, (uint)src | ((uint)op << 3u)}; } }; struct instr_irq : public instruction { enum irq modifiers; rvalue num; bool relative; instr_irq(const yy::location &l, const enum irq &modifiers, rvalue num, bool relative = false) : instruction(l), modifiers(modifiers), num(std::move(num)), relative(relative) {} raw_encoding raw_encode(const program &program) override; }; struct instr_nop : public instr_mov { instr_nop(const yy::location &l) : instr_mov(l, mov::y, mov::y) {} }; struct instr_word : public instruction { rvalue encoding; instr_word(const yy::location &l, rvalue encoding) : instruction(l), encoding(std::move(encoding)) {} uint encode(const program &program) override; }; #endif ================================================ FILE: pico-sdk/tools/pioasm/python_output.cpp ================================================ /* * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include #include "output_format.h" #include "pio_disassembler.h" struct python_output : public output_format { struct factory { factory() { output_format::add(new python_output()); } }; python_output() : output_format("python") {} std::string get_description() override { return "Python file suitable for use with MicroPython"; } void output_symbols(FILE *out, std::string prefix, const std::vector &symbols) { int count = 0; for (const auto &s : symbols) { if (!s.is_label) { fprintf(out, "%s%s = %d\n", prefix.c_str(), s.name.c_str(), s.value); count++; } } if (count) { fprintf(out, "\n"); count = 0; } for (const auto &s : symbols) { if (s.is_label) { fprintf(out, "%soffset_%s = %d\n", prefix.c_str(), s.name.c_str(), s.value); count++; } } if (count) { fprintf(out, "\n"); } } void header(FILE *out, std::string msg) { std::string dashes = std::string(msg.length(), '-'); fprintf(out, "# %s #\n", dashes.c_str()); fprintf(out, "# %s #\n", msg.c_str()); fprintf(out, "# %s #\n", dashes.c_str()); fprintf(out, "\n"); } int output(std::string destination, std::vector output_options, const compiled_source &source) override { FILE *out = open_single_output(destination); if (!out) return 1; header(out, "This file is autogenerated by pioasm; do not edit!"); fprintf(out, "import rp2\n"); fprintf(out, "from machine import Pin"); fprintf(out, "\n"); output_symbols(out, "", source.global_symbols); for (const auto &program : source.programs) { header(out, program.name); std::string prefix = program.name + "_"; output_symbols(out, prefix, program.symbols); int param_count = 0; auto write_opt = [&] (std::string name, std::string value) { if (param_count++) { fprintf(out, ", "); } fprintf(out, "%s=%s", name.c_str(), value.c_str()); }; fprintf(out, "@rp2.asm_pio("); for(const auto &p : program.lang_opts) { if (p.first.size() >= name.size() && p.first.compare(0, name.size(), name) == 0) { for (const auto &p2 : p.second) { write_opt(p2.first, p2.second); } } } fprintf(out, ")\n"); fprintf(out, "def %s():\n", program.name.c_str()); std::map jmp_labels; // for now just use numeric labels for (int i = 0; i < (int)program.instructions.size(); i++) { const auto &inst = program.instructions[i]; if (!(inst >> 13u)) { // a jump uint target = inst &0x1fu; jmp_labels.insert(std::pair(target, std::to_string(target))); } } for (uint i = 0; i < (int)program.instructions.size(); i++) { const auto &inst = program.instructions[i]; if (i == program.wrap_target) { fprintf(out, " wrap_target()\n"); } auto it = jmp_labels.find(i); if (it != jmp_labels.end()) { fprintf(out, " label(\"%s\")\n", it->second.c_str()); } fprintf(out, " %s # %d\n", disassemble(jmp_labels, inst, program.sideset_bits_including_opt.get(), program.sideset_opt).c_str(), i); if (i == program.wrap) { fprintf(out, " wrap()\n"); } } fprintf(out, "\n"); /* fprintf(out, "static inline pio_sm_config %sprogram_default_config(uint offset) {\n", prefix.c_str()); fprintf(out, " pio_sm_config c = pio_sm_default_config();\n"); fprintf(out, " sm_config_wrap(&c, offset + %swrap_target, offset + %swrap);\n", prefix.c_str(), prefix.c_str()); if (program.sideset_bits_including_opt.is_specified()) { fprintf(out, " sm_config_sideset(&c, %d, %s, %s);\n", program.sideset_bits_including_opt.get(), program.sideset_opt ? "true" : "false", program.sideset_pindirs ? "true" : "false"); } fprintf(out, " return c;\n"); fprintf(out, "}\n"); */ // todo maybe have some code blocks inside or outside here? for(const auto& o : program.code_blocks) { fprintf(out, "\n"); if (o.first == name) { for(const auto &contents : o.second) { fprintf(out, "%s", contents.c_str()); fprintf(out, "\n"); } } } fprintf(out, "\n"); } if (out != stdout) { fclose(out); } return 0; } static std::string disassemble(const std::map& jmp_labels, uint16_t inst, uint sideset_bits_including_opt, bool sideset_opt) { std::stringstream ss; uint major = inst >> 13u; uint arg1 = ((uint) inst >> 5u) & 0x7u; uint arg2 = inst & 0x1fu; std::string op_string; auto op = [&](const std::string &s) { op_string = s; }; auto op_guts = [&](const std::string &s) { ss << std::left << std::setw(24) << (op_string + "(" + s + ")"); }; bool invalid = false; switch (major) { case 0b000: { static std::array conditions{"", "not_x", "x_dec", "not_y", "y_dec", "x_not_y", "pin", "not_osre"}; op("jmp"); auto it = jmp_labels.find(arg2); std::string label = "?"; if (it != jmp_labels.end()) { label = it->second; } if (arg1) op_guts(conditions[arg1] + ", \"" + label +"\""); else op_guts("\"" + label + "\""); break; } case 0b001: { uint source = arg1 & 3u; std::string guts; switch (source) { case 0b00: guts = "gpio, " + std::to_string(arg2); break; case 0b01: guts = "pin, " + std::to_string(arg2); break; case 0b10: if (arg2 & 0x8u) { invalid = true; } else { guts = "irq, "; auto irq = std::to_string(arg2 & 7u); if (arg2 & 0x10u) { guts += "rel(" + irq + ")"; } else { guts += irq; } } break; } if (!invalid) { guts = ((arg1 & 4u) ? "1, " : "0, ") + guts; op("wait"); op_guts(guts); } break; } case 0b010: { static std::array sources { "pins", "x", "y", "null", "", "status", "isr", "osr"}; std::string source = sources[arg1]; if (source.empty()) { invalid = true; } else { op("in_"); op_guts(source + ", " + std::to_string(arg2 ? arg2 : 32)); } break; } case 0b011: { static std::array dests { "pins", "x", "y", "null", "pindirs", "pc", "isr", "exec"}; op("out"); op_guts(dests[arg1] + ", " + std::to_string(arg2 ? arg2 : 32)); break; } case 0b100: { if (arg2) { invalid = true; } else { std::string guts = ""; if (arg1 & 4u) { op("pull"); if (arg1 & 2u) guts = "ifempty, "; } else { op("push"); if (arg1 & 2u) guts = "iffull, "; } guts += ((arg1 & 0x1u) ? "block" : "noblock"); op_guts(guts); } break; } case 0b101: { static std::array dests { "pins", "x", "y", "", "exec", "pc", "isr", "osr"}; static std::array sources { "pins", "x", "y", "null", "", "status", "isr", "osr"}; std::string dest = dests[arg1]; std::string source = sources[arg2 & 7u]; uint operation = arg2 >> 3u; if (source.empty() || dest.empty() || operation == 3) { invalid = true; } if (dest == source && (arg1 == 1 || arg2 == 2) && operation == 0) { op("nop"); op_guts(""); } else { op("mov"); std::string guts = dest + ", "; if (operation == 1) { guts += "invert("; } else if (operation == 2) { guts += "reverse("; } guts += source; if (operation == 1 || operation == 2) { guts += ")"; } op_guts(guts); } break; } case 0b110: { if ((arg1 & 0x4u) || (arg2 & 0x8u)) { invalid = true; } else { op("irq"); std::string guts; if (arg1 & 0x2u) { guts += "clear, "; } else if (arg1 & 0x1u) { guts += "block, "; } auto irq = std::to_string(arg2 & 7u); if (arg2 & 0x10u) { guts += "rel(" + irq + ")"; } else { guts += irq; } op_guts(guts); } break; } case 0b111: { static std::array dests{"pins", "x", "y", "", "pindirs", "", "", ""}; std::string dest = dests[arg1]; if (dest.empty()) { invalid = true; } else { op("set"); op_guts(dests[arg1] + ", " + std::to_string(arg2)); } break; } } if (invalid) { op("word"); ss << std::hex; op_guts(std::to_string(inst)); } uint delay = ((uint) inst >> 8u) & 0x1f; ss << std::left << std::setw(9); if (sideset_bits_including_opt && (!sideset_opt || (delay & 0x10u))) { ss << (".side("+ std::to_string((delay & (sideset_opt ? 0xfu : 0x1fu)) >> (5u - sideset_bits_including_opt))+")"); } else { ss << ""; } delay &= ((1u << (5 - sideset_bits_including_opt)) - 1u); ss << std::left << std::setw(4) << (delay ? ("[" + std::to_string(delay) + "]") : ""); return ss.str(); } }; static python_output::factory creator; ================================================ FILE: src/constants.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" /* CRC32 Lookup Table, Polynomial = 0xEDB88320 */ const uint32_t crc32_lookup_table[] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; ================================================ FILE: src/defaults.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" /* Default configuration */ const config_t default_config = { .magic_header = 0xB00B1E5, .version = CURRENT_CONFIG_VERSION, .output[OUTPUT_A] = { .number = OUTPUT_A, .speed_x = MOUSE_SPEED_A_FACTOR_X, .speed_y = MOUSE_SPEED_A_FACTOR_Y, .border = { .top = 0, .bottom = MAX_SCREEN_COORD, }, .screen_count = 1, .screen_index = 1, .os = OUTPUT_A_OS, .pos = RIGHT, .screensaver = { .mode = SCREENSAVER_A_MODE, .only_if_inactive = SCREENSAVER_A_ONLY_IF_INACTIVE, .idle_time_us = (uint64_t)SCREENSAVER_A_IDLE_TIME_SEC * 1000000, .max_time_us = (uint64_t)SCREENSAVER_A_MAX_TIME_SEC * 1000000, } }, .output[OUTPUT_B] = { .number = OUTPUT_B, .speed_x = MOUSE_SPEED_B_FACTOR_X, .speed_y = MOUSE_SPEED_B_FACTOR_Y, .border = { .top = 0, .bottom = MAX_SCREEN_COORD, }, .screen_count = 1, .screen_index = 1, .os = OUTPUT_B_OS, .pos = LEFT, .screensaver = { .mode = SCREENSAVER_B_MODE, .only_if_inactive = SCREENSAVER_B_ONLY_IF_INACTIVE, .idle_time_us = (uint64_t)SCREENSAVER_B_IDLE_TIME_SEC * 1000000, .max_time_us = (uint64_t)SCREENSAVER_B_MAX_TIME_SEC * 1000000, } }, .enforce_ports = ENFORCE_PORTS, .force_kbd_boot_protocol = ENFORCE_KEYBOARD_BOOT_PROTOCOL, .force_mouse_boot_mode = false, .enable_acceleration = ENABLE_ACCELERATION, .hotkey_toggle = HOTKEY_TOGGLE, .kbd_led_as_indicator = KBD_LED_AS_INDICATOR, .jump_threshold = JUMP_THRESHOLD, }; ================================================ FILE: src/handlers.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" /* =================================================== * * ============ Hotkey Handler Routines ============ * * =================================================== */ /* This is the main hotkey for switching outputs */ void output_toggle_hotkey_handler(device_t *state, hid_keyboard_report_t *report) { /* If switching explicitly disabled, return immediately */ if (state->switch_lock) return; state->active_output ^= 1; set_active_output(state, state->active_output); }; void _get_border_position(device_t *state, border_size_t *border) { /* To avoid having 2 different keys, if we're above half, it's the top coord */ if (state->pointer_y > (MAX_SCREEN_COORD / 2)) border->bottom = state->pointer_y; else border->top = state->pointer_y; } void _screensaver_set(device_t *state, uint8_t value) { if (CURRENT_BOARD_IS_ACTIVE_OUTPUT) state->config.output[BOARD_ROLE].screensaver.mode = value; else send_value(value, SCREENSAVER_MSG); }; /* This key combo records switch y top coordinate for different-size monitors */ void screen_border_hotkey_handler(device_t *state, hid_keyboard_report_t *report) { border_size_t *border = &state->config.output[state->active_output].border; if (CURRENT_BOARD_IS_ACTIVE_OUTPUT) { _get_border_position(state, border); save_config(state); } queue_packet((uint8_t *)border, SYNC_BORDERS_MSG, sizeof(border_size_t)); }; /* This key combo puts board A in firmware upgrade mode */ void fw_upgrade_hotkey_handler_A(device_t *state, hid_keyboard_report_t *report) { reset_usb_boot(1 << PICO_DEFAULT_LED_PIN, 0); }; /* This key combo puts board B in firmware upgrade mode */ void fw_upgrade_hotkey_handler_B(device_t *state, hid_keyboard_report_t *report) { send_value(ENABLE, FIRMWARE_UPGRADE_MSG); }; /* This key combo prevents mouse from switching outputs */ void switchlock_hotkey_handler(device_t *state, hid_keyboard_report_t *report) { state->switch_lock ^= 1; send_value(state->switch_lock, SWITCH_LOCK_MSG); } /* This key combo toggles gaming mode */ void toggle_gaming_mode_handler(device_t *state, hid_keyboard_report_t *report) { state->gaming_mode ^= 1; send_value(state->gaming_mode, GAMING_MODE_MSG); }; /* This key combo locks both outputs simultaneously */ void screenlock_hotkey_handler(device_t *state, hid_keyboard_report_t *report) { hid_keyboard_report_t lock_report = {0}, release_keys = {0}; for (int out = 0; out < NUM_SCREENS; out++) { switch (state->config.output[out].os) { case WINDOWS: case LINUX: lock_report.modifier = KEYBOARD_MODIFIER_LEFTGUI; lock_report.keycode[0] = HID_KEY_L; break; case MACOS: lock_report.modifier = KEYBOARD_MODIFIER_LEFTCTRL | KEYBOARD_MODIFIER_LEFTGUI; lock_report.keycode[0] = HID_KEY_Q; break; default: break; } if (BOARD_ROLE == out) { queue_kbd_report(&lock_report, state); release_all_keys(state); } else { queue_packet((uint8_t *)&lock_report, KEYBOARD_REPORT_MSG, KBD_REPORT_LENGTH); queue_packet((uint8_t *)&release_keys, KEYBOARD_REPORT_MSG, KBD_REPORT_LENGTH); } } } /* When pressed, erases stored config in flash and loads defaults on both boards */ void wipe_config_hotkey_handler(device_t *state, hid_keyboard_report_t *report) { wipe_config(); load_config(state); send_value(ENABLE, WIPE_CONFIG_MSG); } /* When pressed, toggles the current mouse zoom mode state */ void mouse_zoom_hotkey_handler(device_t *state, hid_keyboard_report_t *report) { state->mouse_zoom ^= 1; send_value(state->mouse_zoom, MOUSE_ZOOM_MSG); }; /* When pressed, enables the pong screensaver on active output */ void enable_screensaver_pong_hotkey_handler(device_t *state, hid_keyboard_report_t *report) { uint8_t desired_mode = state->config.output[BOARD_ROLE].screensaver.mode; /* If the user explicitly asks for pong screensaver to be active, ignore config and turn it on */ if (desired_mode == DISABLED || desired_mode == JITTER) desired_mode = PONG; _screensaver_set(state, desired_mode); } /* When pressed, enables the jitter screensaver on active output */ void enable_screensaver_jitter_hotkey_handler(device_t *state, hid_keyboard_report_t *report) { uint8_t desired_mode = state->config.output[BOARD_ROLE].screensaver.mode; /* If the user explicitly asks for jitter screensaver to be active, ignore config and turn it on */ if (desired_mode == DISABLED || desired_mode == PONG) desired_mode = JITTER; _screensaver_set(state, desired_mode); } /* When pressed, disables the screensaver on active output */ void disable_screensaver_hotkey_handler(device_t *state, hid_keyboard_report_t *report) { _screensaver_set(state, DISABLED); } /* Put the device into a special configuration mode */ void config_enable_hotkey_handler(device_t *state, hid_keyboard_report_t *report) { /* If config mode is already active, skip this and reboot to return to normal mode */ if (!state->config_mode_active) { watchdog_hw->scratch[5] = MAGIC_WORD_1; watchdog_hw->scratch[6] = MAGIC_WORD_2; } release_all_keys(state); state->reboot_requested = true; }; /* ==================================================== * * ========== UART Message Handling Routines ======== * * ==================================================== */ /* Function handles received keypresses from the other board */ void handle_keyboard_uart_msg(uart_packet_t *packet, device_t *state) { hid_keyboard_report_t *report = (hid_keyboard_report_t *)packet->data; hid_keyboard_report_t combined_report; /* Update the keyboard state for the remote device */ update_remote_kbd_state(state, report); /* Create a combined report from all device states */ combine_kbd_states(state, &combined_report); /* Queue the combined report */ queue_kbd_report(&combined_report, state); state->last_activity[BOARD_ROLE] = time_us_64(); } /* Function handles received mouse moves from the other board */ void handle_mouse_abs_uart_msg(uart_packet_t *packet, device_t *state) { mouse_report_t *mouse_report = (mouse_report_t *)packet->data; queue_mouse_report(mouse_report, state); state->pointer_x = mouse_report->x; state->pointer_y = mouse_report->y; state->mouse_buttons = mouse_report->buttons; state->last_activity[BOARD_ROLE] = time_us_64(); } /* Function handles request to switch output */ void handle_output_select_msg(uart_packet_t *packet, device_t *state) { state->active_output = packet->data[0]; if (state->tud_connected) release_all_keys(state); restore_leds(state); } /* On firmware upgrade message, reboot into the BOOTSEL fw upgrade mode */ void handle_fw_upgrade_msg(uart_packet_t *packet, device_t *state) { reset_usb_boot(1 << PICO_DEFAULT_LED_PIN, 0); } /* Comply with request to turn mouse zoom mode on/off */ void handle_mouse_zoom_msg(uart_packet_t *packet, device_t *state) { state->mouse_zoom = packet->data[0]; } /* Process request to update keyboard LEDs */ void handle_set_report_msg(uart_packet_t *packet, device_t *state) { /* We got this via serial, so it's stored to the opposite of our board role */ state->keyboard_leds[OTHER_ROLE] = packet->data[0]; /* If we have a keyboard we can control leds on, restore state if active */ if (global_state.keyboard_connected && !CURRENT_BOARD_IS_ACTIVE_OUTPUT) restore_leds(state); } /* Process request to block mouse from switching, update internal state */ void handle_switch_lock_msg(uart_packet_t *packet, device_t *state) { state->switch_lock = packet->data[0]; } /* Handle border syncing message that lets the other device know about monitor height offset */ void handle_sync_borders_msg(uart_packet_t *packet, device_t *state) { border_size_t *border = &state->config.output[state->active_output].border; if (CURRENT_BOARD_IS_ACTIVE_OUTPUT) { _get_border_position(state, border); queue_packet((uint8_t *)border, SYNC_BORDERS_MSG, sizeof(border_size_t)); } else memcpy(border, packet->data, sizeof(border_size_t)); save_config(state); } /* When this message is received, flash the locally attached LED to verify serial comms */ void handle_flash_led_msg(uart_packet_t *packet, device_t *state) { blink_led(state); } /* When this message is received, wipe the local flash config */ void handle_wipe_config_msg(uart_packet_t *packet, device_t *state) { wipe_config(); load_config(state); } /* Update screensaver state after received message */ void handle_screensaver_msg(uart_packet_t *packet, device_t *state) { state->config.output[BOARD_ROLE].screensaver.mode = packet->data[0]; } /* Process consumer control message */ void handle_consumer_control_msg(uart_packet_t *packet, device_t *state) { queue_cc_packet(packet->data, state); } /* Process request to store config to flash */ void handle_save_config_msg(uart_packet_t *packet, device_t *state) { save_config(state); } /* Process request to reboot the board */ void handle_reboot_msg(uart_packet_t *packet, device_t *state) { reboot(); } /* Decapsulate and send to the other box */ void handle_proxy_msg(uart_packet_t *packet, device_t *state) { queue_packet(&packet->data[1], (enum packet_type_e)packet->data[0], PACKET_DATA_LENGTH - 1); } /* Process relative mouse command */ void handle_toggle_gaming_msg(uart_packet_t *packet, device_t *state) { state->gaming_mode = packet->data[0]; } /* Process api communication messages */ void handle_api_msgs(uart_packet_t *packet, device_t *state) { uint8_t value_idx = packet->data[0]; const field_map_t *map = get_field_map_entry(value_idx); /* If we don't have a valid map entry, return immediately */ if (map == NULL) return; /* Create a pointer to the offset into the structure we need to access */ uint8_t *ptr = (((uint8_t *)&global_state) + map->offset); if (packet->type == SET_VAL_MSG) { /* Not allowing writes to objects defined as read-only */ if (map->readonly) return; memcpy(ptr, &packet->data[1], map->len); } else if (packet->type == GET_VAL_MSG) { uart_packet_t response = {.type=GET_VAL_MSG, .data={[0] = value_idx}}; memcpy(&response.data[1], ptr, map->len); queue_cfg_packet(&response, state); } /* With each GET/SET message, we reset the configuration mode timeout */ reset_config_timer(state); } /* Handle the "read all" message by calling our "read one" handler for each type */ void handle_api_read_all_msg(uart_packet_t *packet, device_t *state) { uart_packet_t result = {.type=GET_VAL_MSG}; for (int i = 0; i < get_field_map_length(); i++) { result.data[0] = get_field_map_index(i)->idx; handle_api_msgs(&result, state); } } /* Process request packet and create a response */ void handle_request_byte_msg(uart_packet_t *packet, device_t *state) { uint32_t address = packet->data32[0]; if (address > STAGING_IMAGE_SIZE) return; /* Add requested data to bytes 4-7 in the packet and return it with a different type */ uint32_t data = *(uint32_t *)&ADDR_FW_RUNNING[address]; packet->data32[1] = data; queue_packet(packet->data, RESPONSE_BYTE_MSG, PACKET_DATA_LENGTH); } /* Process response message following a request we sent to read a byte */ /* state->page_offset and state->page_number are kept locally and compared to returned values */ void handle_response_byte_msg(uart_packet_t *packet, device_t *state) { uint16_t offset = packet->data[0]; uint32_t address = packet->data32[0]; if (address != state->fw.address) { state->fw.upgrade_in_progress = false; state->fw.address = 0; return; } else { /* Provide visual feedback of the ongoing copy by toggling LED for every sector */ if((address & 0xfff) == 0x000) toggle_led(); } /* Update checksum as we receive each byte */ if (address < STAGING_IMAGE_SIZE - FLASH_SECTOR_SIZE) for (int i=0; i<4; i++) state->fw.checksum = crc32_iter(state->fw.checksum, packet->data[4 + i]); memcpy(state->page_buffer + offset, &packet->data32[1], sizeof(uint32_t)); /* Neeeeeeext byte, please! */ state->fw.address += sizeof(uint32_t); state->fw.byte_done = true; } /* Process a request to read a firmware package from flash */ void handle_heartbeat_msg(uart_packet_t *packet, device_t *state) { uint16_t other_running_version = packet->data16[0]; if (state->fw.upgrade_in_progress) return; /* If the other board isn't running a newer version, we are done */ if (other_running_version <= state->_running_fw.version) return; /* It is? Ok, kick off the firmware upgrade */ state->fw = (fw_upgrade_state_t) { .upgrade_in_progress = true, .byte_done = true, .address = 0, .checksum = 0xffffffff, }; } /* ==================================================== * * ============== Output Switch Routines ============ * * ==================================================== */ /* Update output variable, set LED on/off and notify the other board so they are in sync. */ void set_active_output(device_t *state, uint8_t new_output) { state->active_output = new_output; restore_leds(state); send_value(new_output, OUTPUT_SELECT_MSG); /* If we were holding a key down and drag the mouse to another screen, the key gets stuck. Changing outputs = no more keypresses on the previous system. */ release_all_keys(state); } ================================================ FILE: src/hid_parser.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * Based on the TinyUSB HID parser routine and the amazing USB2N64 * adapter (https://github.com/pdaxrom/usb2n64-adapter) * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" #define IS_BLOCK_END (parser->collection.start == parser->collection.end) enum { SIZE_0_BIT = 0, SIZE_8_BIT = 1, SIZE_16_BIT = 2, SIZE_32_BIT = 3 }; const uint8_t SIZE_LOOKUP[4] = {0, 1, 2, 4}; /* Size is 0, 1, 2, or 3, describing cases of no data, 8-bit, 16-bit, or 32-bit data. */ uint32_t get_descriptor_value(uint8_t const *report, int size) { switch (size) { case SIZE_8_BIT: return report[0]; case SIZE_16_BIT: return tu_u16(report[1], report[0]); case SIZE_32_BIT: return tu_u32(report[3], report[2], report[1], report[0]); default: return 0; } } uint32_t *get_or_create_report_offset(parser_state_t *parser, uint8_t report_id) { for (int i = 0; i < parser->num_report_offsets; i++) { if (parser->report_offsets[i].report_id == report_id) { return &parser->report_offsets[i].offset_in_bits; } } if (parser->num_report_offsets < MAX_REPORTS) { parser->report_offsets[parser->num_report_offsets].report_id = report_id; parser->report_offsets[parser->num_report_offsets].offset_in_bits = 0; return &parser->report_offsets[parser->num_report_offsets++].offset_in_bits; } return NULL; } uint32_t get_current_offset(parser_state_t *parser) { uint32_t *offset = get_or_create_report_offset(parser, parser->report_id); return offset ? *offset : 0; } void update_usage(parser_state_t *parser, int i) { /* If we don't have as many usages as elements, the usage for the previous element applies */ if (i > 0 && i >= parser->usage_count && i < HID_MAX_USAGES) *(parser->p_usage + i) = *(parser->p_usage + i - 1); } void store_element(parser_state_t *parser, report_val_t *val, int i, uint32_t data, uint16_t size, hid_interface_t *iface) { uint32_t current_offset = get_current_offset(parser); *val = (report_val_t){ .offset = current_offset, .offset_idx = current_offset >> 3, .size = size, .usage_max = parser->locals[RI_LOCAL_USAGE_MAX].val, .usage_min = parser->locals[RI_LOCAL_USAGE_MIN].val, .item_type = (data & 0x01) ? CONSTANT : DATA, .data_type = (data & 0x02) ? VARIABLE : ARRAY, .usage = *(parser->p_usage + i), .usage_page = parser->globals[RI_GLOBAL_USAGE_PAGE].val, .global_usage = parser->global_usage, .report_id = parser->report_id }; iface->uses_report_id |= (parser->report_id != 0); } void handle_global_item(parser_state_t *parser, item_t *item) { if (item->hdr.tag == RI_GLOBAL_REPORT_ID) { parser->report_id = item->val; } parser->globals[item->hdr.tag] = *item; } void handle_local_item(parser_state_t *parser, item_t *item) { /* There are just 16 possible tags, store any one that comes along to an array instead of doing switch and 16 cases */ parser->locals[item->hdr.tag] = *item; if (item->hdr.tag == RI_LOCAL_USAGE) { if(IS_BLOCK_END) parser->global_usage = item->val; else if (parser->usage_count < HID_MAX_USAGES - 1) *(parser->p_usage + parser->usage_count++) = item->val; } } void handle_main_input(parser_state_t *parser, item_t *item, hid_interface_t *iface) { uint32_t size = parser->globals[RI_GLOBAL_REPORT_SIZE].val; uint32_t count = parser->globals[RI_GLOBAL_REPORT_COUNT].val; report_val_t val = {0}; /* Swap count and size for 1-bit variables, it makes sense to process e.g. NKRO with size = 1 and count = 240 in one go instead of doing 240 iterations Don't do this if there are usages in the queue, though. */ if (size == 1 && parser->usage_count <= 1) { size = count; count = 1; } uint32_t *current_offset = get_or_create_report_offset(parser, parser->report_id); if (!current_offset) return; for (int i = 0; i < count; i++) { update_usage(parser, i); store_element(parser, &val, i, item->val, size, iface); /* Use the parsed data to populate internal device structures */ extract_data(iface, &val); /* Iterate times and increase offset by amount, moving by x bits */ *current_offset += size; } /* Advance the usage array pointer by global report count and reset the count variable */ parser->p_usage += parser->usage_count; /* Carry the last usage to the new location */ *parser->p_usage = *(parser->p_usage - parser->usage_count); } void handle_main_item(parser_state_t *parser, item_t *item, hid_interface_t *iface) { switch (item->hdr.tag) { case RI_MAIN_COLLECTION: parser->collection.start++; break; case RI_MAIN_COLLECTION_END: parser->collection.end++; break; case RI_MAIN_INPUT: handle_main_input(parser, item, iface); break; } parser->usage_count = 0; /* Local items do not carry over to the next Main item (HID spec v1.11, section 6.2.2.8) */ memset(parser->locals, 0, sizeof(parser->locals)); } /* This method is sub-optimal and far from a generalized HID descriptor parsing, but should * hopefully work well enough to find the basic values we care about to move the mouse around. * Your descriptor for a mouse with 2 wheels and 264 buttons might not parse correctly. * */ parser_state_t parser_state = {0}; // Avoid placing it on the stack, it's large void parse_report_descriptor(hid_interface_t *iface, uint8_t const *report, int desc_len ) { item_t item = {0}; /* Wipe parser_state clean */ memset(&parser_state, 0, sizeof(parser_state_t)); parser_state.p_usage = parser_state.usages; while (desc_len > 0) { item.hdr = *(header_t *)report++; item.val = get_descriptor_value(report, item.hdr.size); switch (item.hdr.type) { case RI_TYPE_MAIN: handle_main_item(&parser_state, &item, iface); break; case RI_TYPE_GLOBAL: handle_global_item(&parser_state, &item); break; case RI_TYPE_LOCAL: handle_local_item(&parser_state, &item); break; } /* Move to the next position and decrement size by header length + data length */ report += SIZE_LOOKUP[item.hdr.size]; desc_len -= (SIZE_LOOKUP[item.hdr.size] + 1); } } ================================================ FILE: src/hid_report.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "hid_report.h" #include "main.h" /* Given a value struct with size and offset in bits, find and return a value from the HID report */ int32_t get_report_value(uint8_t *report, int len, report_val_t *val) { /* Calculate the bit offset within the byte */ uint16_t offset_in_bits = val->offset % 8; /* Calculate the remaining bits in the first byte */ uint16_t remaining_bits = 8 - offset_in_bits; /* Calculate the byte offset in the array */ uint16_t byte_offset = val->offset >> 3; if (byte_offset >= len) return 0; /* Create a mask for the specified number of bits */ uint32_t mask = (1u << val->size) - 1; /* Initialize the result value with the bits from the first byte */ int32_t result = report[byte_offset] >> offset_in_bits; /* Move to the next byte and continue fetching bits until the desired length is reached */ while (val->size > remaining_bits && byte_offset < len) { result |= report[++byte_offset] << remaining_bits; remaining_bits += 8; } /* Apply the mask to retain only the desired number of bits */ result = result & mask; /* Special case if our result is negative. Check if the most significant bit of 'val' is set */ if (result & ((mask >> 1) + 1)) { /* If it is set, sign-extend 'val' by filling the higher bits with 1s */ result |= (0xFFFFFFFFU << val->size); } return result; } /* After processing the descriptor, assign the values so we can later use them to interpret reports */ void handle_consumer_control_values(report_val_t *src, report_val_t *dst, hid_interface_t *iface) { keyboard_t *keyboard = get_keyboard(iface, src->report_id); if (src->offset > MAX_CC_BUTTONS) { return; } if (src->data_type == VARIABLE) { keyboard->cc_array[src->offset] = src->usage; iface->consumer.is_variable = true; } iface->consumer.is_array |= (src->data_type == ARRAY); } /* After processing the descriptor, assign the values so we can later use them to interpret reports */ void handle_system_control_values(report_val_t *src, report_val_t *dst, hid_interface_t *iface) { keyboard_t *keyboard = get_keyboard(iface, src->report_id); if (src->offset > MAX_SYS_BUTTONS) { return; } if (src->data_type == VARIABLE) { keyboard->sys_array[src->offset] = src->usage; iface->system.is_variable = true; } iface->system.is_array |= (src->data_type == ARRAY); } /* After processing the descriptor, assign the values so we can later use them to interpret reports */ void handle_keyboard_descriptor_values(report_val_t *src, report_val_t *dst, hid_interface_t *iface) { const int LEFT_CTRL = 0xE0; keyboard_t *keyboard = get_keyboard(iface, src->report_id); /* Constants are normally used for padding, so skip'em */ if (src->item_type == CONSTANT) return; /* Prevent overwriting more memory than we have */ if (iface->num_keyboards >= MAX_KEYBOARDS) return; /* Detect and handle modifier keys. <= if modifier is less + constant padding? */ if (src->size <= MODIFIER_BIT_LENGTH && src->data_type == VARIABLE) { /* To make sure this really is the modifier key, we expect e.g. left control to be within the usage interval */ if (LEFT_CTRL >= src->usage_min && LEFT_CTRL <= src->usage_max) keyboard->modifier = *src; } /* If we have an array member, that's most likely a key (0x00 - 0xFF, 1 byte) */ if (src->offset_idx < MAX_KEYS) { keyboard->key_array[src->offset_idx] = (src->data_type == ARRAY); } /* Handle NKRO, normally size = 1, count = 240 or so, but they are swapped. */ if (src->size > 32 && src->data_type == VARIABLE) { keyboard->is_nkro = true; keyboard->nkro = *src; } /* We found a keyboard on this interface for a specific report id. */ if (!keyboard->is_found) { keyboard->is_found = true; iface->num_keyboards++; } } void handle_buttons(report_val_t *src, report_val_t *dst, hid_interface_t *iface) { /* Constant is normally used for padding with mouse buttons, aggregate to simplify things */ if (src->item_type == CONSTANT) { iface->mouse.buttons.size += src->size; return; } iface->mouse.buttons = *src; /* We found a mouse on this interface. */ iface->mouse.is_found = true; } void _store(report_val_t *src, report_val_t *dst, hid_interface_t *iface) { if (src->item_type != CONSTANT) *dst = *src; } static uint8_t *get_mouse_id(hid_interface_t *iface) { return &iface->mouse.report_id; } static uint8_t *get_consumer_id(hid_interface_t *iface) { return &iface->consumer.report_id; } static uint8_t *get_system_id(hid_interface_t *iface) { return &iface->system.report_id; } static uint8_t *get_next_keyboard_id(hid_interface_t *iface) { if (iface->num_keyboards < MAX_KEYBOARDS) return &iface->keyboards[iface->num_keyboards].report_id; /* In case we are out of bounds, return the last keyboard's ID */ return &iface->keyboards[MAX_KEYBOARDS - 1].report_id; } void extract_data(hid_interface_t *iface, report_val_t *val) { const usage_map_t map[] = { {.usage_page = HID_USAGE_PAGE_BUTTON, .global_usage = HID_USAGE_DESKTOP_MOUSE, .handler = handle_buttons, .receiver = process_mouse_report, .dst = &iface->mouse.buttons, .get_id = get_mouse_id}, {.usage_page = HID_USAGE_PAGE_DESKTOP, .global_usage = HID_USAGE_DESKTOP_MOUSE, .usage = HID_USAGE_DESKTOP_X, .handler = _store, .receiver = process_mouse_report, .dst = &iface->mouse.move_x, .get_id = get_mouse_id}, {.usage_page = HID_USAGE_PAGE_DESKTOP, .global_usage = HID_USAGE_DESKTOP_MOUSE, .usage = HID_USAGE_DESKTOP_Y, .handler = _store, .receiver = process_mouse_report, .dst = &iface->mouse.move_y, .get_id = get_mouse_id}, {.usage_page = HID_USAGE_PAGE_DESKTOP, .global_usage = HID_USAGE_DESKTOP_MOUSE, .usage = HID_USAGE_DESKTOP_WHEEL, .handler = _store, .receiver = process_mouse_report, .dst = &iface->mouse.wheel, .get_id = get_mouse_id}, {.usage_page = HID_USAGE_PAGE_CONSUMER, .global_usage = HID_USAGE_DESKTOP_MOUSE, .usage = HID_USAGE_CONSUMER_AC_PAN, .handler = _store, .receiver = process_mouse_report, .dst = &iface->mouse.pan, .get_id = get_mouse_id}, {.usage_page = HID_USAGE_PAGE_KEYBOARD, .global_usage = HID_USAGE_DESKTOP_KEYBOARD, .handler = handle_keyboard_descriptor_values, .receiver = process_keyboard_report, .get_id = get_next_keyboard_id}, {.usage_page = HID_USAGE_PAGE_CONSUMER, .global_usage = HID_USAGE_CONSUMER_CONTROL, .handler = handle_consumer_control_values, .receiver = process_consumer_report, .dst = &iface->consumer.val, .get_id = get_consumer_id}, {.usage_page = HID_USAGE_PAGE_DESKTOP, .global_usage = HID_USAGE_DESKTOP_SYSTEM_CONTROL, .handler = _store, .receiver = process_system_report, .dst = &iface->system.val, .get_id = get_system_id}, }; /* We extracted all we could find in the descriptor to report_values, now go through them and match them up with the values in the table above, then store those values for later reference */ for (const usage_map_t *hay = map; hay != &map[ARRAY_SIZE(map)]; hay++) { /* ---> If any condition is not defined, we consider it as matched <--- */ bool global_usages_match = (val->global_usage == hay->global_usage) || (hay->global_usage == 0); bool usages_match = (val->usage == hay->usage) || (hay->usage == 0); bool usage_pages_match = (val->usage_page == hay->usage_page) || (hay->usage_page == 0); if (global_usages_match && usages_match && usage_pages_match) { *(hay->get_id(iface)) = val->report_id; hay->handler(val, hay->dst, iface); if (val->report_id < MAX_REPORTS) iface->report_handler[val->report_id] = hay->receiver; } } } int32_t extract_bit_variable(report_val_t *kbd, uint8_t *raw_report, int len, uint8_t *dst) { int key_count = 0; int bit_offset = kbd->offset & 0b111; for (int i = kbd->usage_min, j = bit_offset; i <= kbd->usage_max && key_count < len; i++, j++) { int byte_index = j >> 3; int bit_index = j & 0b111; if (raw_report[byte_index] & (1 << bit_index)) { dst[key_count++] = i; } } return key_count; } int32_t _extract_kbd_boot(uint8_t *raw_report, int len, hid_keyboard_report_t *report) { uint8_t *src = raw_report; /* In case keyboard still uses report ID in this, just pick the last 8 bytes */ if (len == KBD_REPORT_LENGTH + 1) src++; memcpy(report, src, KBD_REPORT_LENGTH); return KBD_REPORT_LENGTH; } int32_t _extract_kbd_other(uint8_t *raw_report, int len, hid_interface_t *iface, hid_keyboard_report_t *report) { keyboard_t *kb = get_keyboard(iface, raw_report[0]); uint8_t *src = raw_report; if (iface->uses_report_id) src++; report->modifier = src[kb->modifier.offset_idx]; for (int i=0, j=0; i < MAX_KEYS && j < KEYS_IN_USB_REPORT; i++) { if(kb->key_array[i]) report->keycode[j++] = src[i]; } return KBD_REPORT_LENGTH; } int32_t _extract_kbd_nkro(uint8_t *raw_report, int len, hid_interface_t *iface, hid_keyboard_report_t *report) { keyboard_t *kb = get_keyboard(iface, raw_report[0]); uint8_t *ptr = raw_report; /* Skip report ID */ if (iface->uses_report_id) ptr++; /* We expect array of bits mapping 1:1 from usage_min to usage_max, otherwise panic */ if ((kb->nkro.usage_max - kb->nkro.usage_min + 1) != kb->nkro.size) return -1; /* We expect modifier to be 8 bits long, otherwise we'll fallback to boot mode */ if (kb->modifier.size == MODIFIER_BIT_LENGTH) { report->modifier = ptr[kb->modifier.offset_idx]; } else return -1; /* Move the pointer to the nkro offset's byte index */ ptr = &ptr[kb->nkro.offset_idx]; return extract_bit_variable(&kb->nkro, ptr, KEYS_IN_USB_REPORT, report->keycode); } int32_t extract_kbd_data( uint8_t *raw_report, int len, uint8_t itf, hid_interface_t *iface, hid_keyboard_report_t *report) { keyboard_t *keyboard = get_keyboard(iface, raw_report[0]); /* Clear the report to start fresh */ memset(report, 0, KBD_REPORT_LENGTH); /* If we're in boot protocol mode, then it's easy to decide. */ if (iface->protocol == HID_PROTOCOL_BOOT) return _extract_kbd_boot(raw_report, len, report); /* NKRO is a special case */ if (keyboard->is_nkro) return _extract_kbd_nkro(raw_report, len, iface, report); /* If we're getting 8 bytes of report, it's safe to assume standard modifier + reserved + keys */ if (!iface->uses_report_id && (len == KBD_REPORT_LENGTH || len == KBD_REPORT_LENGTH + 1)) return _extract_kbd_boot(raw_report, len, report); /* This is something completely different, look at the report */ return _extract_kbd_other(raw_report, len, iface, report); } ================================================ FILE: src/include/config.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include #include "structs.h" #include "misc.h" #include "screen.h" #define CURRENT_CONFIG_VERSION 8 /*============================================================================== * Configuration Data * Structures and variables related to device configuration. *==============================================================================*/ extern const config_t default_config; /*============================================================================== * Configuration API * Functions and data structures for accessing and modifying configuration. *==============================================================================*/ extern const field_map_t api_field_map[]; const field_map_t* get_field_map_entry(uint32_t); const field_map_t* get_field_map_index(uint32_t); size_t get_field_map_length(void); /*============================================================================== * Configuration Management and Packet Processing * Functions for loading, saving, wiping, and resetting device configuration. *==============================================================================*/ void load_config(device_t *); void queue_cfg_packet(uart_packet_t *, device_t *); void reset_config_timer(device_t *); void save_config(device_t *); bool validate_packet(uart_packet_t *); void wipe_config(void); ================================================ FILE: src/include/constants.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include /*============================================================================== * Board and Output Roles *==============================================================================*/ #define OUTPUT_A 0 #define OUTPUT_B 1 /*============================================================================== * HID Interface Numbers *==============================================================================*/ #define ITF_NUM_HID 0 #define ITF_NUM_HID_REL_M 1 #define ITF_NUM_HID_VENDOR 2 #define ITF_NUM_MSC 3 /*============================================================================== * Mouse Modes *==============================================================================*/ #define ABSOLUTE 0 #define RELATIVE 1 #define TOUCH 2 /*============================================================================== * Boolean States *==============================================================================*/ #define ENABLE 1 #define DISABLE 0 /*============================================================================== * Numerical Constants *==============================================================================*/ #define CONFIG_MODE_TIMEOUT 300000000 // 5 minutes into the future #define JITTER_DISTANCE 2 #define MOUSE_BOOT_REPORT_LEN 4 #define MOUSE_ZOOM_SCALING_FACTOR 2 #define NUM_SCREENS 2 /*============================================================================== * Utility Macros *==============================================================================*/ #define _HZ(x) ((uint64_t)((1000000) / (x))) #define _MS(x) (x * 1000) #define _SEC(x) (x * 1000000) #define _TOP() 0 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) #define CURRENT_BOARD_IS_ACTIVE_OUTPUT (global_state.active_output == global_state.board_role) ================================================ FILE: src/include/dma.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include /*============================================================================== * DMA Buffer Sizes *==============================================================================*/ #define DMA_RX_BUFFER_SIZE 1024 #define DMA_TX_BUFFER_SIZE 32 /*============================================================================== * DMA Buffers *==============================================================================*/ extern uint8_t uart_rxbuf[DMA_RX_BUFFER_SIZE] __attribute__((aligned(DMA_RX_BUFFER_SIZE))); extern uint8_t uart_txbuf[DMA_TX_BUFFER_SIZE] __attribute__((aligned(DMA_TX_BUFFER_SIZE))); /*============================================================================== * Ring Buffer Macro *==============================================================================*/ #define NEXT_RING_IDX(x) ((x + 1) & 0x3FF) ================================================ FILE: src/include/firmware.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include "structs.h" /*============================================================================== * Firmware Update Functions * Functions for managing firmware updates, CRC calculation, and related tasks. *==============================================================================*/ uint32_t calculate_firmware_crc32(void); void reboot(void); void write_flash_page(uint32_t, uint8_t *); /*============================================================================== * UART Packet Fetching * Functions to handle incoming UART packets, especially for firmware updates. *==============================================================================*/ void fetch_packet(device_t *); uint32_t get_ptr_delta(uint32_t, device_t *); bool is_start_of_packet(device_t *); void request_byte(device_t *, uint32_t); /*============================================================================== * Button Interaction * Functions interacting with the button, e.g. checking if pressed. *==============================================================================*/ bool is_bootsel_pressed(void); ================================================ FILE: src/include/flash.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include #include /*============================================================================== * Firmware Metadata *==============================================================================*/ typedef struct { uint32_t magic; uint16_t version; uint32_t checksum; } firmware_metadata_t; extern firmware_metadata_t _firmware_metadata; #define FIRMWARE_METADATA_MAGIC 0xf00d /*============================================================================== * Firmware Transfer Packet *==============================================================================*/ typedef struct { uint8_t cmd; // Byte 0 = command uint16_t page_number; // Bytes 1-2 = page number union { uint8_t offset; // Byte 3 = offset uint8_t checksum; // In write packets, it's checksum }; uint8_t data[4]; // Bytes 4-7 = data } fw_packet_t; /*============================================================================== * Flash Memory Layout *==============================================================================*/ #define RUNNING_FIRMWARE_SLOT 0 #define STAGING_FIRMWARE_SLOT 1 #define STAGING_PAGES_CNT 1024 #define STAGING_IMAGE_SIZE STAGING_PAGES_CNT * FLASH_PAGE_SIZE /*============================================================================== * Lookup Tables *==============================================================================*/ extern const uint32_t crc32_lookup_table[]; /*============================================================================== * UF2 Firmware Format Structure *==============================================================================*/ typedef struct { uint32_t magicStart0; uint32_t magicStart1; uint32_t flags; uint32_t targetAddr; uint32_t payloadSize; uint32_t blockNo; uint32_t numBlocks; uint32_t fileSize; uint8_t data[476]; uint32_t magicEnd; } uf2_t; #define UF2_MAGIC_START0 0x0A324655 #define UF2_MAGIC_START1 0x9E5D5157 #define UF2_MAGIC_END 0x0AB16F30 ================================================ FILE: src/include/handlers.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include "structs.h" #include "keyboard.h" /*============================================================================== * Hotkey Handlers * These handlers are invoked when specific hotkey combinations are detected. *==============================================================================*/ void config_enable_hotkey_handler(device_t *, hid_keyboard_report_t *); void disable_screensaver_hotkey_handler(device_t *, hid_keyboard_report_t *); void enable_screensaver_pong_hotkey_handler(device_t *, hid_keyboard_report_t *); void enable_screensaver_jitter_hotkey_handler(device_t *, hid_keyboard_report_t *); void fw_upgrade_hotkey_handler_A(device_t *, hid_keyboard_report_t *); void fw_upgrade_hotkey_handler_B(device_t *, hid_keyboard_report_t *); void mouse_zoom_hotkey_handler(device_t *, hid_keyboard_report_t *); void output_config_hotkey_handler(device_t *, hid_keyboard_report_t *); void output_toggle_hotkey_handler(device_t *, hid_keyboard_report_t *); void screen_border_hotkey_handler(device_t *, hid_keyboard_report_t *); void screenlock_hotkey_handler(device_t *, hid_keyboard_report_t *); void switchlock_hotkey_handler(device_t *, hid_keyboard_report_t *); void toggle_gaming_mode_handler(device_t *, hid_keyboard_report_t *); void wipe_config_hotkey_handler(device_t *, hid_keyboard_report_t *); /*============================================================================== * UART Message Handlers * These handlers process incoming messages received over the UART interface. *==============================================================================*/ void handle_api_msgs(uart_packet_t *, device_t *); void handle_api_read_all_msg(uart_packet_t *, device_t *); void handle_consumer_control_msg(uart_packet_t *, device_t *); void handle_flash_led_msg(uart_packet_t *, device_t *); void handle_fw_upgrade_msg(uart_packet_t *, device_t *); void handle_toggle_gaming_msg(uart_packet_t *, device_t *); void handle_heartbeat_msg(uart_packet_t *, device_t *); void handle_keyboard_uart_msg(uart_packet_t *, device_t *); void handle_mouse_abs_uart_msg(uart_packet_t *, device_t *); void handle_mouse_zoom_msg(uart_packet_t *, device_t *); void handle_output_select_msg(uart_packet_t *, device_t *); void handle_proxy_msg(uart_packet_t *, device_t *); void handle_read_config_msg(uart_packet_t *, device_t *); void handle_reboot_msg(uart_packet_t *, device_t *); void handle_request_byte_msg(uart_packet_t *, device_t *); void handle_response_byte_msg(uart_packet_t *, device_t *); void handle_save_config_msg(uart_packet_t *, device_t *); void handle_screensaver_msg(uart_packet_t *, device_t *); void handle_set_report_msg(uart_packet_t *, device_t *); void handle_switch_lock_msg(uart_packet_t *, device_t *); void handle_sync_borders_msg(uart_packet_t *, device_t *); void handle_wipe_config_msg(uart_packet_t *, device_t *); void handle_write_fw_msg(uart_packet_t *, device_t *); /*============================================================================== * Output Control * Functions related to managing the active output. *==============================================================================*/ void set_active_output(device_t *, uint8_t); ================================================ FILE: src/include/hid_parser.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2024 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include "main.h" #include "tusb.h" /*============================================================================== * Constants *==============================================================================*/ #define HID_DEFAULT_NUM_COLLECTIONS 16 #define HID_MAX_USAGES 128 #define MAX_CC_BUTTONS 16 #define MAX_DEVICES 4 #define MAX_INTERFACES 12 // Per device; allows for complex devices like QMK #define MAX_KEYS 32 #define MAX_REPORTS 24 #define MAX_KEYBOARDS 5 #define MAX_SYS_BUTTONS 8 #define PRIMARY_KEYBOARD 0 /*============================================================================== * Data Structures *==============================================================================*/ /* Counts how many collection starts and ends we've seen, when they equalize (and not zero), we are at the end of a block */ typedef struct { uint8_t start; uint8_t end; } collection_t; /* Maps a report ID to its current bit offset */ typedef struct { uint8_t report_id; uint32_t offset_in_bits; } report_offset_map_t; /* Header byte is unpacked to size/type/tag using this struct */ typedef struct TU_ATTR_PACKED { uint8_t size : 2; uint8_t type : 2; uint8_t tag : 4; } header_t; /* We store a header block and corresponding data in an array of these to avoid having to use numerous switch-case checks */ typedef struct { header_t hdr; uint32_t val; } item_t; typedef enum { DATA = 0, CONSTANT, ARRAY, VARIABLE, ABSOLUTE_DATA, RELATIVE_DATA, NO_WRAP, WRAP, LINEAR, NONLINEAR, } data_type_e; // Extended precision mouse movement information typedef struct { int32_t move_x; int32_t move_y; int32_t wheel; int32_t pan; int32_t buttons; } mouse_values_t; /* Describes where can we find a value in a HID report */ typedef struct TU_ATTR_PACKED { uint16_t offset; // In bits uint16_t offset_idx; // In bytes uint16_t size; // In bits int32_t usage_min; int32_t usage_max; uint8_t item_type; uint8_t data_type; uint8_t report_id; uint16_t global_usage; uint16_t usage_page; uint16_t usage; } report_val_t; /* Defines information about HID report format for the mouse. */ typedef struct { report_val_t buttons; report_val_t move_x; report_val_t move_y; report_val_t wheel; report_val_t pan; uint8_t report_id; bool is_found; bool uses_report_id; } mouse_t; typedef struct hid_interface_t hid_interface_t; typedef void (*process_report_f)(uint8_t *, int, uint8_t, hid_interface_t *); /* Defines information about HID report format for the keyboard. */ typedef struct { report_val_t modifier; report_val_t nkro; uint16_t cc_array[MAX_CC_BUTTONS]; uint16_t sys_array[MAX_SYS_BUTTONS]; bool key_array[MAX_KEYS]; uint8_t report_id; uint8_t key_array_idx; bool uses_report_id; bool is_found; bool is_nkro; } keyboard_t; typedef struct { report_val_t val; uint8_t report_id; bool is_variable; bool is_array; } report_t; struct hid_interface_t { keyboard_t keyboards[MAX_KEYBOARDS]; uint8_t num_keyboards; mouse_t mouse; report_t consumer; report_t system; process_report_f report_handler[MAX_REPORTS]; uint8_t protocol; bool uses_report_id; }; typedef struct { report_val_t *map; int map_index; /* Index of the current element we've found */ int report_id; /* Report ID of the current section we're parsing */ uint32_t usage_count; uint16_t usages[HID_MAX_USAGES]; uint16_t *p_usage; uint16_t global_usage; collection_t collection; report_offset_map_t report_offsets[MAX_REPORTS]; uint8_t num_report_offsets; /* as tag is 4 bits, there can be 16 different tags in global header type */ item_t globals[16]; /* as tag is 4 bits, there can be 16 different tags in local header type */ item_t locals[16]; } parser_state_t; /////////////// ================================================ FILE: src/include/hid_report.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include "main.h" /*============================================================================== * Function Pointer Definitions *==============================================================================*/ typedef void (*value_handler_f)(report_val_t *, report_val_t *, hid_interface_t *); typedef uint8_t *(*report_id_getter_f)(hid_interface_t *iface); /*============================================================================== * Data Structures *==============================================================================*/ typedef struct { int global_usage; int usage_page; int usage; report_val_t *dst; value_handler_f handler; process_report_f receiver; report_id_getter_f get_id; } usage_map_t; ================================================ FILE: src/include/keyboard.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include "structs.h" #include "hid_parser.h" /*============================================================================== * Data Extraction *==============================================================================*/ int32_t extract_bit_variable(report_val_t *, uint8_t *, int, uint8_t *); int32_t extract_kbd_data(uint8_t *, int, uint8_t, hid_interface_t *, hid_keyboard_report_t *); keyboard_t *get_keyboard(hid_interface_t *iface, uint8_t report_id); /*============================================================================== * Hotkey Handling *==============================================================================*/ bool check_specific_hotkey(hotkey_combo_t, const hid_keyboard_report_t *); /*============================================================================== * Keyboard State Management *==============================================================================*/ void update_kbd_state(device_t *, hid_keyboard_report_t *, uint8_t); void update_remote_kbd_state(device_t *, hid_keyboard_report_t *); void combine_kbd_states(device_t *, hid_keyboard_report_t *); /*============================================================================== * Keyboard Report Processing *==============================================================================*/ bool key_in_report(uint8_t, const hid_keyboard_report_t *); void process_consumer_report(uint8_t *, int, uint8_t, hid_interface_t *); void process_keyboard_report(uint8_t *, int, uint8_t, hid_interface_t *); void process_system_report(uint8_t *, int, uint8_t, hid_interface_t *); void queue_cc_packet(uint8_t *, device_t *); void queue_kbd_report(hid_keyboard_report_t *, device_t *); void queue_system_packet(uint8_t *, device_t *); void release_all_keys(device_t *); void send_consumer_control(uint8_t *, device_t *); void send_key(hid_keyboard_report_t *, device_t *); /* ==================================================== * * Map hotkeys to alternative layouts * ==================================================== */ /* DVORAK */ #define DVORAK_HID_KEY_A HID_KEY_A #define DVORAK_HID_KEY_B HID_KEY_N #define DVORAK_HID_KEY_C HID_KEY_I #define DVORAK_HID_KEY_D HID_KEY_H #define DVORAK_HID_KEY_E HID_KEY_D #define DVORAK_HID_KEY_F HID_KEY_Y #define DVORAK_HID_KEY_G HID_KEY_U #define DVORAK_HID_KEY_H HID_KEY_J #define DVORAK_HID_KEY_I HID_KEY_G #define DVORAK_HID_KEY_J HID_KEY_C #define DVORAK_HID_KEY_K HID_KEY_V #define DVORAK_HID_KEY_L HID_KEY_P #define DVORAK_HID_KEY_M HID_KEY_M #define DVORAK_HID_KEY_N HID_KEY_L #define DVORAK_HID_KEY_O HID_KEY_S #define DVORAK_HID_KEY_P HID_KEY_R #define DVORAK_HID_KEY_Q HID_KEY_X #define DVORAK_HID_KEY_R HID_KEY_O #define DVORAK_HID_KEY_S HID_KEY_SEMICOLON #define DVORAK_HID_KEY_T HID_KEY_K #define DVORAK_HID_KEY_U HID_KEY_F #define DVORAK_HID_KEY_V HID_KEY_PERIOD #define DVORAK_HID_KEY_W HID_KEY_COMMA #define DVORAK_HID_KEY_X HID_KEY_B #define DVORAK_HID_KEY_Y HID_KEY_T #define DVORAK_HID_KEY_Z HID_KEY_SLASH /* COLEMAK */ #define COLEMAK_HID_KEY_A HID_KEY_A #define COLEMAK_HID_KEY_B HID_KEY_B #define COLEMAK_HID_KEY_C HID_KEY_C #define COLEMAK_HID_KEY_D HID_KEY_G #define COLEMAK_HID_KEY_E HID_KEY_K #define COLEMAK_HID_KEY_F HID_KEY_E #define COLEMAK_HID_KEY_G HID_KEY_T #define COLEMAK_HID_KEY_H HID_KEY_H #define COLEMAK_HID_KEY_I HID_KEY_L #define COLEMAK_HID_KEY_J HID_KEY_Y #define COLEMAK_HID_KEY_K HID_KEY_N #define COLEMAK_HID_KEY_L HID_KEY_U #define COLEMAK_HID_KEY_M HID_KEY_M #define COLEMAK_HID_KEY_N HID_KEY_J #define COLEMAK_HID_KEY_O HID_KEY_SEMICOLON #define COLEMAK_HID_KEY_P HID_KEY_R #define COLEMAK_HID_KEY_Q HID_KEY_Q #define COLEMAK_HID_KEY_R HID_KEY_S #define COLEMAK_HID_KEY_S HID_KEY_D #define COLEMAK_HID_KEY_T HID_KEY_F #define COLEMAK_HID_KEY_U HID_KEY_I #define COLEMAK_HID_KEY_V HID_KEY_V #define COLEMAK_HID_KEY_W HID_KEY_W #define COLEMAK_HID_KEY_X HID_KEY_X #define COLEMAK_HID_KEY_Y HID_KEY_O #define COLEMAK_HID_KEY_Z HID_KEY_Z /* QWERTY needs no change */ #if KEYBOARD_LAYOUT == 0 #define KBD_REMAP(key) key /* For DVORAK we prepend DVORAK_ and reference the definitions above */ #elif KEYBOARD_LAYOUT == 1 #define KBD_REMAP(key) DVORAK_##key /* For COLEMAK we prepend COLEMAK_ and reference the definitions above */ #elif KEYBOARD_LAYOUT == 2 #define KBD_REMAP(key) COLEMAK_##key #endif ================================================ FILE: src/include/main.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include #include #include #include #include #include #include "hid_parser.h" #include "constants.h" #include "misc.h" #include "structs.h" #include "config.h" #include "pio_usb.h" #include "tusb.h" #include "usb_descriptors.h" #include "user_config.h" #include "protocol.h" #include "dma.h" #include "firmware.h" #include "flash.h" #include "handlers.h" #include "keyboard.h" #include "mouse.h" #include "packet.h" #include "pinout.h" #include "screen.h" #include "serial.h" #include "setup.h" #include "tasks.h" #include "watchdog.h" #include #include #include #include #include #include #include #include #include #include ================================================ FILE: src/include/misc.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include #include "structs.h" /*============================================================================== * Checksum Functions *==============================================================================*/ uint8_t calc_checksum(const uint8_t *, int); uint32_t crc32(const uint8_t *, size_t); uint32_t crc32_iter(uint32_t, const uint8_t); bool verify_checksum(const uart_packet_t *); /*============================================================================== * Global State *==============================================================================*/ extern device_t global_state; /*============================================================================== * LED Control *==============================================================================*/ void blink_led(device_t *); void restore_leds(device_t *); uint8_t toggle_led(void); ================================================ FILE: src/include/mouse.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include "structs.h" #include "hid_parser.h" /*============================================================================== * Data Extraction *==============================================================================*/ void extract_data(hid_interface_t *, report_val_t *); int32_t get_report_value(uint8_t *, int, report_val_t *); void parse_report_descriptor(hid_interface_t *, uint8_t const *, int); /*============================================================================== * Mouse Report Handling *==============================================================================*/ void process_mouse_report(uint8_t *, int, uint8_t, hid_interface_t *); void queue_mouse_report(mouse_report_t *, device_t *); bool tud_mouse_report(uint8_t mode, uint8_t buttons, int16_t x, int16_t y, int8_t wheel, int8_t pan); void output_mouse_report(mouse_report_t *, device_t *); ================================================ FILE: src/include/packet.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include #include "protocol.h" /*============================================================================== * Constants *==============================================================================*/ /* Preamble */ #define START1 0xAA #define START2 0x55 #define START_LENGTH 2 /* Packet Queue Definitions */ #define UART_QUEUE_LENGTH 256 #define HID_QUEUE_LENGTH 128 #define KBD_QUEUE_LENGTH 128 #define MOUSE_QUEUE_LENGTH 512 /* Packet Lengths and Offsets */ #define PACKET_LENGTH (TYPE_LENGTH + PACKET_DATA_LENGTH + CHECKSUM_LENGTH) #define RAW_PACKET_LENGTH (START_LENGTH + PACKET_LENGTH) #define TYPE_LENGTH 1 #define PACKET_DATA_LENGTH 8 // For simplicity, all packet types are the same length #define CHECKSUM_LENGTH 1 #define KEYARRAY_BIT_OFFSET 16 #define KEYS_IN_USB_REPORT 6 #define KBD_REPORT_LENGTH 8 #define MOUSE_REPORT_LENGTH 8 #define CONSUMER_CONTROL_LENGTH 4 #define SYSTEM_CONTROL_LENGTH 1 #define MODIFIER_BIT_LENGTH 8 /*============================================================================== * Data Structures *==============================================================================*/ typedef struct { uint8_t type; // Enum field describing the type of packet union { uint8_t data[8]; // Data goes here (type + payload + checksum) uint16_t data16[4]; // We can treat it as 4 16-byte chunks uint32_t data32[2]; // We can treat it as 2 32-byte chunks }; uint8_t checksum; // Checksum, a simple XOR-based one } __attribute__((packed)) uart_packet_t; ================================================ FILE: src/include/pinout.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once /*============================================================================== * Board Roles *==============================================================================*/ #define BOARD_ROLE (global_state.board_role) #define OTHER_ROLE (BOARD_ROLE == OUTPUT_A ? OUTPUT_B : OUTPUT_A) /*============================================================================== * GPIO Pins (LED, USB) *==============================================================================*/ #define GPIO_LED_PIN 25 // LED is connected to pin 25 on a PICO #define PIO_USB_DP_PIN 14 // D+ is pin 14, D- is pin 15 /*============================================================================== * Serial Pins *==============================================================================*/ /* GP12 / GP13, Pins 16 (TX), 17 (RX) on the Pico board */ #define BOARD_A_RX 13 #define BOARD_A_TX 12 /* GP16 / GP17, Pins 21 (TX), 22 (RX) on the Pico board */ #define BOARD_B_RX 17 #define BOARD_B_TX 16 #define SERIAL_RX_PIN (global_state.board_role == OUTPUT_A ? BOARD_A_RX : BOARD_B_RX) #define SERIAL_TX_PIN (global_state.board_role == OUTPUT_A ? BOARD_A_TX : BOARD_B_TX) ================================================ FILE: src/include/protocol.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include enum packet_type_e { KEYBOARD_REPORT_MSG = 1, MOUSE_REPORT_MSG = 2, OUTPUT_SELECT_MSG = 3, FIRMWARE_UPGRADE_MSG = 4, MOUSE_ZOOM_MSG = 5, KBD_SET_REPORT_MSG = 6, SWITCH_LOCK_MSG = 7, SYNC_BORDERS_MSG = 8, FLASH_LED_MSG = 9, WIPE_CONFIG_MSG = 10, SCREENSAVER_MSG = 11, HEARTBEAT_MSG = 12, GAMING_MODE_MSG = 13, CONSUMER_CONTROL_MSG = 14, SYSTEM_CONTROL_MSG = 15, SAVE_CONFIG_MSG = 18, REBOOT_MSG = 19, GET_VAL_MSG = 20, SET_VAL_MSG = 21, GET_ALL_VALS_MSG = 22, PROXY_PACKET_MSG = 23, REQUEST_BYTE_MSG = 24, RESPONSE_BYTE_MSG = 25, }; typedef enum { UINT8 = 0, UINT16 = 1, UINT32 = 2, UINT64 = 3, INT8 = 4, INT16 = 5, INT32 = 6, INT64 = 7, BOOL = 8 } type_e; /*============================================================================== * API Request Data Structure, defines offset within struct, length, type, write permissions and packet ID type (index) *==============================================================================*/ typedef struct { uint32_t idx; bool readonly; type_e type; uint32_t len; size_t offset; } field_map_t; ================================================ FILE: src/include/screen.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include /*============================================================================== * Constants *==============================================================================*/ #define MAX_SCREEN_COORD 32767 #define MIN_SCREEN_COORD 0 /*============================================================================== * Data Structures *==============================================================================*/ typedef struct { int top; // When jumping from a smaller to a bigger screen, go to THIS top height int bottom; // When jumping from a smaller to a bigger screen, go to THIS bottom // height } border_size_t; typedef struct { uint8_t mode; uint8_t only_if_inactive; uint64_t idle_time_us; uint64_t max_time_us; } screensaver_t; typedef struct { uint32_t number; // Number of this output (e.g. OUTPUT_A = 0 etc) uint32_t screen_count; // How many monitors per output (e.g. Output A is Windows with 3 monitors) uint32_t screen_index; // Current active screen int32_t speed_x; // Mouse speed per output, in direction X int32_t speed_y; // Mouse speed per output, in direction Y border_size_t border; // Screen border size/offset to keep cursor at same height when switching uint8_t os; // Operating system on this output uint8_t pos; // Screen position on this output uint8_t mouse_park_pos; // Where the mouse goes after switch screensaver_t screensaver; // Screensaver parameters for this output } output_t; ================================================ FILE: src/include/serial.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include #include "structs.h" /*============================================================================== * Constants *==============================================================================*/ #define SERIAL_BAUDRATE 3686400 #define SERIAL_DATA_BITS 8 #define SERIAL_PARITY UART_PARITY_NONE #define SERIAL_STOP_BITS 1 #define SERIAL_UART uart0 /*============================================================================== * Serial Communication Functions *==============================================================================*/ bool get_packet_from_buffer(device_t *); void process_packet(uart_packet_t *, device_t *); void queue_packet(const uint8_t *, enum packet_type_e, int); void send_value(const uint8_t, enum packet_type_e); void write_raw_packet(uint8_t *, uart_packet_t *); ================================================ FILE: src/include/setup.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include "structs.h" /*============================================================================== * Initialization Functions *==============================================================================*/ void initial_setup(device_t *); void serial_init(void); void core1_main(void); ================================================ FILE: src/include/structs.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include #include "flash.h" #include "packet.h" #include "screen.h" typedef void (*action_handler_t)(); typedef struct { // Maps message type -> message handler function enum packet_type_e type; action_handler_t handler; } uart_handler_t; typedef struct { uint8_t modifier; // Which modifier is pressed uint8_t keys[KEYS_IN_USB_REPORT]; // Which keys need to be pressed uint8_t key_count; // How many keys are pressed action_handler_t action_handler; // What to execute when the key combination is detected bool pass_to_os; // True if we are to pass the key to the OS too bool acknowledge; // True if we are to notify the user about registering keypress } hotkey_combo_t; typedef struct TU_ATTR_PACKED { uint8_t buttons; int16_t x; int16_t y; int8_t wheel; int8_t pan; uint8_t mode; } mouse_report_t; typedef struct { uint8_t tip_pressure; uint8_t buttons; // Digitizer buttons uint16_t x; // X coordinate (0-32767) uint16_t y; // Y coordinate (0-32767) } touch_report_t; typedef struct { uint8_t instance; uint8_t report_id; uint8_t type; uint8_t len; uint8_t data[RAW_PACKET_LENGTH]; } hid_generic_pkt_t; typedef enum { IDLE, READING_PACKET, PROCESSING_PACKET } receiver_state_t; typedef struct { uint32_t address; // Address we're sending to the other box uint32_t checksum; uint16_t version; bool byte_done; // Has the byte been successfully transferred bool upgrade_in_progress; // True if firmware transfer from the other box is in progress } fw_upgrade_state_t; typedef struct { uint32_t magic_header; uint32_t version; uint8_t force_mouse_boot_mode; uint8_t force_kbd_boot_protocol; uint8_t kbd_led_as_indicator; uint8_t hotkey_toggle; uint8_t enable_acceleration; uint8_t enforce_ports; uint16_t jump_threshold; output_t output[NUM_SCREENS]; uint32_t _reserved; // Keep checksum at the end of the struct uint32_t checksum; } config_t; /*============================================================================== * Device State *==============================================================================*/ typedef struct { uint8_t kbd_dev_addr; // Address of the Keyboard device uint8_t kbd_instance; // Keyboard instance (d'uh - isn't this a useless comment) uint8_t keyboard_leds[NUM_SCREENS]; // State of keyboard LEDs (index 0 = A, index 1 = B) uint64_t last_activity[NUM_SCREENS]; // Timestamp of the last input activity (-||-) uint64_t core1_last_loop_pass; // Timestamp of last core1 loop execution uint8_t active_output; // Currently selected output (0 = A, 1 = B) uint8_t board_role; // Which board are we running on? (0 = A, 1 = B, etc.) hid_keyboard_report_t local_kbd_states[MAX_DEVICES]; // Store keyboard states hid_keyboard_report_t remote_kbd_state; // Store combined remote keyboard state uint8_t max_kbd_idx; // Store largest kbd_idx seen int16_t pointer_x; // Store and update the location of our mouse pointer int16_t pointer_y; int16_t mouse_buttons; // Store and update the state of mouse buttons config_t config; // Device configuration, loaded from flash or defaults used queue_t hid_queue_out; // Queue that stores outgoing hid messages queue_t kbd_queue; // Queue that stores keyboard reports queue_t mouse_queue; // Queue that stores mouse reports queue_t uart_tx_queue; // Queue that stores outgoing packets hid_interface_t iface[MAX_DEVICES][MAX_INTERFACES]; // Store info about HID interfaces uart_packet_t in_packet; /* DMA */ uint32_t dma_ptr; // Stores info about DMA ring buffer last checked position uint32_t dma_rx_channel; // DMA RX channel we're using to receive uint32_t dma_control_channel; // DMA channel that controls the RX transfer channel uint32_t dma_tx_channel; // DMA TX channel we're using to send /* Firmware */ fw_upgrade_state_t fw; // State of the firmware upgrader firmware_metadata_t _running_fw; // RAM copy of running fw metadata bool reboot_requested; // If set, stop updating watchdog uint64_t config_mode_timer; // Counts how long are we to remain in config mode uint8_t page_buffer[FLASH_PAGE_SIZE]; // For firmware-over-serial upgrades /* Connection status flags */ bool tud_connected; // True when TinyUSB device successfully connects bool keyboard_connected; // True when our keyboard is connected locally bool mouse_connected; // True when our mouse is connected locally /* Feature flags */ bool mouse_zoom; // True when "mouse zoom" is enabled bool switch_lock; // True when device is prevented from switching bool onboard_led_state; // True when LED is ON bool relative_mouse; // True when relative mouse mode is used bool gaming_mode; // True when gaming mode is on (relative passthru + lock) bool config_mode_active; // True when config mode is active bool digitizer_active; // True when digitizer Win/Mac workaround is active /* Onboard LED blinky (provide feedback when e.g. mouse connected) */ int32_t blinks_left; // How many blink transitions are left int32_t last_led_change; // Timestamp of the last time led state transitioned } device_t; /*==============================================================================*/ typedef struct { void (*exec)(device_t *state); uint64_t frequency; uint64_t next_run; bool *enabled; } task_t; enum os_type_e { LINUX = 1, MACOS = 2, WINDOWS = 3, ANDROID = 4, OTHER = 255, }; enum screen_pos_e { NONE = 0, LEFT = 1, RIGHT = 2, MIDDLE = 3, }; enum screensaver_mode_e { DISABLED = 0, PONG = 1, JITTER = 2, MAX_SS_VAL = JITTER, }; extern const config_t default_config; extern const config_t ADDR_CONFIG[]; extern const uint8_t ADDR_FW_METADATA[]; extern const uint8_t ADDR_FW_RUNNING[]; extern const uint8_t ADDR_FW_STAGING[]; extern const uint8_t ADDR_DISK_IMAGE[]; ================================================ FILE: src/include/tasks.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include "structs.h" /*============================================================================== * Core Task Scheduling *==============================================================================*/ void task_scheduler(device_t *, task_t *); /*============================================================================== * Individual Task Functions *==============================================================================*/ void firmware_upgrade_task(device_t *); void heartbeat_output_task(device_t *); void kick_watchdog_task(device_t *); void led_blinking_task(device_t *); void packet_receiver_task(device_t *); void process_hid_queue_task(device_t *); void process_kbd_queue_task(device_t *); void process_mouse_queue_task(device_t *); void process_uart_tx_task(device_t *); void screensaver_task(device_t *); void usb_device_task(device_t *); void usb_host_task(device_t *); ================================================ FILE: src/include/tusb_config.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * Based on the example by Ha Thach * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #ifndef _TUSB_CONFIG_H_ #define _TUSB_CONFIG_H_ /*============================================================================== * Common Configuration * Settings applicable to both device and host modes. *==============================================================================*/ #define CFG_TUSB_OS OPT_OS_PICO /*============================================================================== * Device Mode Configuration * Settings specific to USB device mode operation. *==============================================================================*/ // Enable the TinyUSB device stack. #define CFG_TUD_ENABLED 1 // Root Hub port number used for the device (typically port 0). #define BOARD_TUD_RHPORT 0 // Device mode configuration: sets the mode (device) and speed. #define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) // Root Hub port maximum operational speed (defaults to Full Speed). #ifndef BOARD_DEVICE_RHPORT_SPEED #define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_FULL_SPEED #endif // Root Hub port number (defaults to 0). #ifndef BOARD_DEVICE_RHPORT_NUM #define BOARD_DEVICE_RHPORT_NUM 0 #endif /*============================================================================== * Host Mode Configuration * Settings specific to USB host mode operation. *==============================================================================*/ // Enable the TinyUSB host stack (requires Pico-PIO-USB). #define CFG_TUH_ENABLED 1 #define CFG_TUH_RPI_PIO_USB 1 // Root Hub port number used for the host (typically port 1). #define BOARD_TUH_RHPORT 1 // Host mode configuration: sets the mode (host) and speed #define CFG_TUSB_RHPORT1_MODE (OPT_MODE_HOST | BOARD_DEVICE_RHPORT_SPEED) /*============================================================================== * Memory Configuration * Settings for USB memory sections and alignment. *==============================================================================*/ // Define a custom memory section for USB buffers (optional). #ifndef CFG_TUSB_MEM_SECTION #define CFG_TUSB_MEM_SECTION #endif // Define the memory alignment for USB buffers (typically 4-byte aligned). #ifndef CFG_TUSB_MEM_ALIGN #define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif /*============================================================================== * Device: Endpoint 0 Size * Configuration for the default control endpoint (Endpoint 0). *==============================================================================*/ // Size of the control endpoint (Endpoint 0) buffer. #ifndef CFG_TUD_ENDPOINT0_SIZE #define CFG_TUD_ENDPOINT0_SIZE 64 #endif /*============================================================================== * Device: CDC Class Configuration (Serial Communication) * Settings for the CDC (Communication Device Class) for serial communication. *==============================================================================*/ #ifdef DH_DEBUG // Enable CDC class for debugging over serial. #define CFG_TUD_CDC 1 // Use a custom debug printf function. #define CFG_TUSB_DEBUG_PRINTF dh_debug_printf extern int dh_debug_printf(const char *__restrict __format, ...); // Buffer sizes for CDC RX and TX. #define CFG_TUD_CDC_RX_BUFSIZE 64 #define CFG_TUD_CDC_TX_BUFSIZE 64 // Line coding settings to use on CDC enumeration. #define CFG_TUH_CDC_LINE_CODING_ON_ENUM \ { 921600, CDC_LINE_CONDING_STOP_BITS_1, CDC_LINE_CONDING_PARITY_NONE, 8 } #else // Disable CDC class when not debugging. #define CFG_TUD_CDC 0 #endif /*============================================================================== * Device: Class Configuration * Enable/disable various USB device classes. *==============================================================================*/ // Enable HID (Human Interface Device) class (keyboard, mouse, etc.). #define CFG_TUD_HID 3 // Enable MSC (Mass Storage Class) class. #define CFG_TUD_MSC 1 /*============================================================================== * Device: Endpoint Buffer Sizes * Configuration for endpoint buffer sizes for different classes. *==============================================================================*/ // HID endpoint buffer size (must be large enough for report ID + data). #define CFG_TUD_HID_EP_BUFSIZE 32 // MSC endpoint buffer size. #define CFG_TUD_MSC_EP_BUFSIZE 512 /*============================================================================== * Host: Enumeration Buffer Size * Configuration for the buffer used during device enumeration. *==============================================================================*/ #define CFG_TUH_ENUMERATION_BUFSIZE 512 /*============================================================================== * Host: Class Configuration * Settings for the USB host class drivers. *==============================================================================*/ // Enable USB Hub support. #define CFG_TUH_HUB 1 // Maximum number of connected devices (excluding the hub itself). #define CFG_TUH_DEVICE_MAX (CFG_TUH_HUB ? 4 : 1) // Hub typically has 4 ports // Maximum number of HID instances. #define CFG_TUH_HID 3 * CFG_TUH_DEVICE_MAX // HID endpoint buffer sizes (IN and OUT). #define CFG_TUH_HID_EPIN_BUFSIZE 64 #define CFG_TUH_HID_EPOUT_BUFSIZE 64 #endif /* _TUSB_CONFIG_H_ */ ================================================ FILE: src/include/usb_descriptors.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #ifndef USB_DESCRIPTORS_H_ #define USB_DESCRIPTORS_H_ // Interface 0 #define REPORT_ID_KEYBOARD 1 #define REPORT_ID_MOUSE 2 #define REPORT_ID_CONSUMER 3 #define REPORT_ID_SYSTEM 4 // Interface 1 #define REPORT_ID_RELMOUSE 5 #define REPORT_ID_DIGITIZER 7 // Interface 2 #define REPORT_ID_VENDOR 6 #define DEVICE_DESCRIPTOR(vid, pid) \ {.bLength = sizeof(tusb_desc_device_t),\ .bDescriptorType = TUSB_DESC_DEVICE,\ .bcdUSB = 0x0200,\ .bDeviceClass = 0x00,\ .bDeviceSubClass = 0x00,\ .bDeviceProtocol = 0x00,\ .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE,\ .idVendor = vid,\ .idProduct = pid,\ .bcdDevice = 0x0100,\ .iManufacturer = 0x01,\ .iProduct = 0x02,\ .iSerialNumber = 0x03,\ .bNumConfigurations = 0x01}\ /* Common mouse descriptor. Use HID_RELATIVE or HID_ABSOLUTE for ABS_OR_REL. */ #define TUD_HID_REPORT_DESC_MOUSE_COMMON(ABS_OR_REL, MOUSE_MIN, ...)\ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\ HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\ HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\ HID_USAGE_MIN ( 1 ) ,\ HID_USAGE_MAX ( 8 ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ HID_LOGICAL_MAX ( 1 ) ,\ \ /* Left, Right, Mid, Back, Forward buttons + 3 extra */ \ HID_REPORT_COUNT( 8 ) ,\ HID_REPORT_SIZE ( 1 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ \ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ \ /* X, Y position [MOUSE_MIN, 32767] */ \ HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ MOUSE_MIN ,\ HID_LOGICAL_MAX_N( 0x7FFF, 2 ) ,\ HID_REPORT_SIZE ( 16 ) ,\ HID_REPORT_COUNT ( 2 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | ABS_OR_REL ) ,\ \ /* Vertical wheel scroll [-127, 127] */ \ HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\ HID_LOGICAL_MIN ( 0x81 ) ,\ HID_LOGICAL_MAX ( 0x7f ) ,\ HID_REPORT_COUNT( 1 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ \ /* Horizontal wheel (AC Pan) */ \ HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\ HID_LOGICAL_MIN ( 0x81 ) ,\ HID_LOGICAL_MAX ( 0x7f ) ,\ HID_REPORT_COUNT( 1 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ \ /* Mouse mode (0 = absolute, 1 = relative) */ \ HID_REPORT_COUNT( 1 ), \ HID_REPORT_SIZE ( 8 ), \ HID_INPUT ( HID_CONSTANT ), \ HID_COLLECTION_END , \ HID_COLLECTION_END \ /* Absolute mouse, range=[0..32767] */ #define TUD_HID_REPORT_DESC_ABS_MOUSE(...) TUD_HID_REPORT_DESC_MOUSE_COMMON(HID_ABSOLUTE, HID_LOGICAL_MIN(0), __VA_ARGS__) /* Relative mouse, range=[-32767..32767] */ #define TUD_HID_REPORT_DESC_MOUSEHELP(...) TUD_HID_REPORT_DESC_MOUSE_COMMON(HID_RELATIVE, HID_LOGICAL_MIN_N(-32767, 2), __VA_ARGS__) // Consumer Control Report Descriptor Template #define TUD_HID_REPORT_DESC_CONSUMER_CTRL(...) \ HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\ HID_USAGE ( HID_USAGE_CONSUMER_CONTROL ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ HID_LOGICAL_MIN ( 0x00 ) ,\ HID_LOGICAL_MAX_N( 0x0FFF, 2 ) ,\ HID_USAGE_MIN ( 0x00 ) ,\ HID_USAGE_MAX_N ( 0x0FFF, 2 ) ,\ HID_REPORT_SIZE ( 16 ) ,\ HID_REPORT_COUNT ( 2 ) ,\ HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \ // System Control Report Descriptor Template #define TUD_HID_REPORT_DESC_SYSTEM_CTRL(...) \ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_CONTROL ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ HID_LOGICAL_MIN ( 0x00 ) ,\ HID_LOGICAL_MAX ( 0xff ) ,\ HID_REPORT_COUNT( 1 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \ // Vendor Config Descriptor Template #define TUD_HID_REPORT_DESC_VENDOR_CTRL(...) \ HID_USAGE_PAGE_N ( HID_USAGE_PAGE_VENDOR, 2 ) ,\ HID_USAGE ( 0x10 ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ HID_LOGICAL_MIN ( 0x80 ) ,\ HID_LOGICAL_MAX ( 0x7f ) ,\ HID_REPORT_COUNT( 12 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_USAGE ( 0x10 ) ,\ HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ HID_USAGE ( 0x10 ) ,\ HID_OUTPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \ #define HID_USAGE_DIGITIZER 0x01 #define TUD_HID_REPORT_DESC_DIGITIZER_PEN(...) \ HID_USAGE_PAGE ( HID_USAGE_PAGE_DIGITIZER ) ,\ HID_USAGE ( HID_USAGE_DIGITIZER ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ /* Report ID if any */\ __VA_ARGS__ \ HID_USAGE ( HID_USAGE_DIGITIZER ) ,\ HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\ HID_USAGE_PAGE ( HID_USAGE_PAGE_DIGITIZER ) ,\ /* Tip Pressure */\ HID_USAGE ( 0x30 ) ,\ HID_LOGICAL_MIN ( 0x00 ) ,\ HID_LOGICAL_MAX ( 0xff ) ,\ HID_REPORT_COUNT( 1 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ \ HID_REPORT_COUNT( 5 ) ,\ HID_REPORT_SIZE ( 1 ) ,\ /* In range */\ HID_USAGE ( 0x32 ) ,\ /* Tip switch */\ HID_USAGE ( 0x42 ) ,\ /* Eraser */\ HID_USAGE ( 0x45 ) ,\ /* Barrel switch */\ HID_USAGE ( 0x44 ) ,\ /* Invert */\ HID_USAGE ( 0x3c ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ \ HID_REPORT_COUNT( 3 ) ,\ HID_REPORT_SIZE ( 1 ) ,\ HID_INPUT ( HID_CONSTANT ) ,\ /* X and Y coordinates */\ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ HID_LOGICAL_MAX_N ( 32767, 2 ) ,\ HID_REPORT_SIZE ( 16 ) ,\ HID_REPORT_COUNT ( 2 ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE) ,\ HID_COLLECTION_END ,\ HID_COLLECTION_END #endif /* USB_DESCRIPTORS_H_ */ ================================================ FILE: src/include/user_config.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. * **===================================================== * * ========== Keyboard LED Output Indicator ========== * * ===================================================== * * * If you are willing to give up on using the keyboard LEDs for their original purpose, * you can use them as a convenient way to indicate which output is selected. * * KBD_LED_AS_INDICATOR set to 0 will use the keyboard LEDs as normal. * KBD_LED_AS_INDICATOR set to 1 will use the Caps Lock LED as indicator. * * */ #define KBD_LED_AS_INDICATOR 0 /**===================================================== * * =========== Hotkey for output switching =========== * * ===================================================== * * * Everyone is different, I prefer to use caps lock because I HATE SHOUTING :) * You might prefer something else. Pick something from the list found at: * * https://github.com/hathach/tinyusb/blob/master/src/class/hid/hid.h * * defined as HID_KEY_ * * In addition, there is an optional modifier you can use for the hotkey * switching. Currently, it's set to LEFT CTRL, you can change it by * redefining HOTKEY_MODIFIER here from KEYBOARD_MODIFIER_LEFTCTRL to something * else (check file referenced below) or HID_KEY_NONE. * * If you do not want to use a key for switching outputs, you may be tempted * to select HID_KEY_NONE here as well; don't do that! That code appears in many * HID messages and the result will be a non-functional keyboard. Instead, choose * a key that is unlikely to ever appear on a keyboard that you will use. * HID_KEY_F24 is probably a good choice as keyboards with 24 function keys * are rare. * * */ #define HOTKEY_MODIFIER KEYBOARD_MODIFIER_LEFTCTRL #define HOTKEY_TOGGLE HID_KEY_CAPS_LOCK /**================================================== * * ============== Mouse Speed Factor ============== * * ================================================== * * * This affects how fast the mouse moves. * * MOUSE_SPEED_A_FACTOR_X: [1-128], mouse moves at this speed in X direction * MOUSE_SPEED_A_FACTOR_Y: [1-128], mouse moves at this speed in Y direction * * JUMP_THRESHOLD: [0-32768], sets the "force" you need to use to drag the * mouse to another screen, 0 meaning no force needed at all, and ~500 some force * needed, ~1000 no accidental jumps, you need to really mean it. * * This is now configurable per-screen. * * ENABLE_ACCELERATION: [0-1], disables or enables mouse acceleration. * * */ /* Output A values, default is for the most common ~ 16:9 ratio screen */ #define MOUSE_SPEED_A_FACTOR_X 16 #define MOUSE_SPEED_A_FACTOR_Y 28 /* Output B values, default is for the most common ~ 16:9 ratio screen */ #define MOUSE_SPEED_B_FACTOR_X 16 #define MOUSE_SPEED_B_FACTOR_Y 28 #define JUMP_THRESHOLD 0 /* Mouse acceleration */ #define ENABLE_ACCELERATION 1 /**================================================== * * ============== Screensaver Config ============== * * ================================================== * * * While this feature is called 'screensaver', it's not actually a * screensaver :) Really it's a way to ensure that some sort of mouse * activity will be sent to one (or both) outputs when the user has * not interacted with that output. This can be used to stop a * screensaver or screenlock from activating on the attached computer, * or to just watch the mouse pointer bouncing around! * * When the mode is active on an output, the pointer will jump around * the screen like a bouncing-ball in a Pong game (however no click * events will be generated, of course). * * This mode is activated by 'idle time' on a per-output basis; if the * mode is enabled for output B, and output B doesn't have any * activity for (at least) the specified idle time, then the mode will * be activated and will continue until the inactivity time reaches * the maximum (if one has been specified). This allows you to stop a * screensaver/screenlock from activating while you are still at your * desk (but just interacting with the other computer attached to * Deskhop), but let it activate if you leave your desk for an * extended period of time. * * Additionally, this mode can be automatically disabled if the output * is the currently-active output. * * If you only set the ENABLED options below, and leave the rest of * the defaults in place, then the screensaver mode will activate * after 4 minutes (240 seconds) of inactivity, will continue forever, * but will only activate on an output that is not currently * active. * * */ /**================================================== * * * SCREENSAVER_{A|B}_MODE: DISABLED * PONG * JITTER * * */ #define SCREENSAVER_A_MODE DISABLED #define SCREENSAVER_B_MODE DISABLED /**================================================== * * * SCREENSAVER_{A|B}_IDLE_TIME_SEC: Number of seconds that an output * must be inactive before the screensaver mode will be activated. * * */ #define SCREENSAVER_A_IDLE_TIME_SEC 240 #define SCREENSAVER_B_IDLE_TIME_SEC 240 /**================================================== * * * SCREENSAVER_{A|B}_MAX_TIME_SEC: Number of seconds that the screensaver * will run on an output before being deactivated. 0 for indefinitely. * * */ #define SCREENSAVER_A_MAX_TIME_SEC 0 #define SCREENSAVER_B_MAX_TIME_SEC 0 /**================================================== * * * SCREENSAVER_{A|B}_ONLY_IF_INACTIVE: [0 or 1] 1 means the * screensaver will activate only if the output is inactive. * * */ #define SCREENSAVER_A_ONLY_IF_INACTIVE 0 #define SCREENSAVER_B_ONLY_IF_INACTIVE 0 /**================================================== * * ================ Output OS Config =============== * * ================================================== * * * Defines OS an output connects to. You will need to worry about this only if you have * multiple desktops and one of your outputs is MacOS or Windows. * * Available options: LINUX, MACOS, WINDOWS, OTHER (check main.h for details) * * OUTPUT_A_OS: OS for output A * OUTPUT_B_OS: OS for output B * * */ #define OUTPUT_A_OS MACOS #define OUTPUT_B_OS LINUX /**================================================== * * ================= Enforce Ports ================= * * ================================================== * * * If enabled, fixes some device incompatibilities by * enforcing keyboard has to be in port A and mouse in port B. * * ENFORCE_PORTS: [0, 1] - 1 means keyboard has to plug in A and mouse in B * 0 means no such layout is enforced * * */ #define ENFORCE_PORTS 0 /**================================================== * * ============= Enforce Boot Protocol ============= * * ================================================== * * * If enabled, fixes some device incompatibilities by * enforcing the boot protocol (which is simpler to parse * and with less variation) * * ENFORCE_KEYBOARD_BOOT_PROTOCOL: [0, 1] - 1 means keyboard will forcefully use * the boot protocol * - 0 means no such thing is enforced * * */ #define ENFORCE_KEYBOARD_BOOT_PROTOCOL 0 ================================================ FILE: src/include/watchdog.h ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #pragma once #include #define WATCHDOG_TIMEOUT 500 // In milliseconds => needs to be reset at least every 200ms #define WATCHDOG_PAUSE_ON_DEBUG 1 // When using a debugger, disable watchdog #define CORE1_HANG_TIMEOUT_US WATCHDOG_TIMEOUT * 1000 // Convert to microseconds #define MAGIC_WORD_1 0xdeadf00f // When these are set, we'll boot to configuration mode #define MAGIC_WORD_2 0x00c0ffee ================================================ FILE: src/keyboard.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" /* ==================================================== * * Hotkeys to trigger actions via the keyboard. * ==================================================== */ hotkey_combo_t hotkeys[] = { /* Main keyboard switching hotkey */ {.modifier = HOTKEY_MODIFIER, .keys = {HOTKEY_TOGGLE}, .key_count = 1, .pass_to_os = false, .action_handler = &output_toggle_hotkey_handler}, /* Pressing right ALT + right CTRL toggles the slow mouse mode */ {.modifier = KEYBOARD_MODIFIER_RIGHTALT | KEYBOARD_MODIFIER_RIGHTCTRL, .keys = {}, .key_count = 0, .pass_to_os = true, .acknowledge = true, .action_handler = &mouse_zoom_hotkey_handler}, /* Switch lock */ {.modifier = KEYBOARD_MODIFIER_RIGHTCTRL, .keys = {HID_KEY_K}, .key_count = 1, .acknowledge = true, .action_handler = &switchlock_hotkey_handler}, /* Screen lock */ {.modifier = KEYBOARD_MODIFIER_RIGHTCTRL, .keys = {HID_KEY_L}, .key_count = 1, .acknowledge = true, .action_handler = &screenlock_hotkey_handler}, /* Toggle gaming mode */ {.modifier = KEYBOARD_MODIFIER_LEFTCTRL | KEYBOARD_MODIFIER_RIGHTSHIFT, .keys = {HID_KEY_G}, .key_count = 1, .acknowledge = true, .action_handler = &toggle_gaming_mode_handler}, /* Enable screensaver pong for active output */ {.modifier = KEYBOARD_MODIFIER_LEFTCTRL | KEYBOARD_MODIFIER_RIGHTSHIFT, .keys = {HID_KEY_S}, .key_count = 1, .acknowledge = true, .action_handler = &enable_screensaver_pong_hotkey_handler}, /* Enable screensaver jitter for active output */ {.modifier = KEYBOARD_MODIFIER_LEFTCTRL | KEYBOARD_MODIFIER_RIGHTSHIFT, .keys = {HID_KEY_J}, .key_count = 1, .acknowledge = true, .action_handler = &enable_screensaver_jitter_hotkey_handler}, /* Disable screensaver for active output */ {.modifier = KEYBOARD_MODIFIER_LEFTCTRL | KEYBOARD_MODIFIER_RIGHTSHIFT, .keys = {HID_KEY_X}, .key_count = 1, .acknowledge = true, .action_handler = &disable_screensaver_hotkey_handler}, /* Erase stored config */ {.modifier = KEYBOARD_MODIFIER_RIGHTSHIFT, .keys = {HID_KEY_F12, HID_KEY_D}, .key_count = 2, .acknowledge = true, .action_handler = &wipe_config_hotkey_handler}, /* Record switch y coordinate */ {.modifier = KEYBOARD_MODIFIER_RIGHTSHIFT, .keys = {HID_KEY_F12, HID_KEY_Y}, .key_count = 2, .acknowledge = true, .action_handler = &screen_border_hotkey_handler}, /* Switch to configuration mode */ {.modifier = KEYBOARD_MODIFIER_LEFTCTRL | KEYBOARD_MODIFIER_RIGHTSHIFT, .keys = {HID_KEY_C, HID_KEY_O}, .key_count = 2, .acknowledge = true, .action_handler = &config_enable_hotkey_handler}, /* Hold down left shift + right shift + F12 + A ==> firmware upgrade mode for board A (kbd) */ {.modifier = KEYBOARD_MODIFIER_RIGHTSHIFT | KEYBOARD_MODIFIER_LEFTSHIFT, .keys = {HID_KEY_A}, .key_count = 1, .acknowledge = true, .action_handler = &fw_upgrade_hotkey_handler_A}, /* Hold down left shift + right shift + F12 + B ==> firmware upgrade mode for board B (mouse) */ {.modifier = KEYBOARD_MODIFIER_RIGHTSHIFT | KEYBOARD_MODIFIER_LEFTSHIFT, .keys = {HID_KEY_B}, .key_count = 1, .acknowledge = true, .action_handler = &fw_upgrade_hotkey_handler_B}}; /* ============================================================ * * Detect if any hotkeys were pressed * ============================================================ */ /* Tries to find if the keyboard report contains key, returns true/false */ bool key_in_report(uint8_t key, const hid_keyboard_report_t *report) { for (int j = 0; j < KEYS_IN_USB_REPORT; j++) { if (key == report->keycode[j]) { return true; } } return false; } /* Check if the current report matches a specific hotkey passed on */ bool check_specific_hotkey(hotkey_combo_t keypress, const hid_keyboard_report_t *report) { /* We expect all modifiers specified to be detected in the report */ if (keypress.modifier != (report->modifier & keypress.modifier)) return false; for (int n = 0; n < keypress.key_count; n++) { if (!key_in_report(keypress.keys[n], report)) { return false; } } /* Getting here means all of the keys were found. */ return true; } /* Go through the list of hotkeys, check if any of them match. */ hotkey_combo_t *check_all_hotkeys(hid_keyboard_report_t *report, device_t *state) { for (int n = 0; n < ARRAY_SIZE(hotkeys); n++) { if (check_specific_hotkey(hotkeys[n], report)) { return &hotkeys[n]; } } return NULL; } /* ==================================================== * * Keyboard State Management * ==================================================== */ /* Update the keyboard state for a specific device */ void update_kbd_state(device_t *state, hid_keyboard_report_t *report, uint8_t device_idx) { /* Ensure device_idx is within bounds */ if (device_idx >= MAX_DEVICES) return; /* Update the keyboard state for this device */ memcpy(&state->local_kbd_states[device_idx], report, sizeof(hid_keyboard_report_t)); /* Track the largest keyboard index we have */ if (state->max_kbd_idx < device_idx) state->max_kbd_idx = device_idx; } /* Update the struct storing the state of the keyboard(s) connected to the other board */ void update_remote_kbd_state(device_t *state, hid_keyboard_report_t *report) { memcpy(&state->remote_kbd_state, report, sizeof(hid_keyboard_report_t)); } /* Add keys from source to destination, avoiding duplicates */ static void add_keys(hid_keyboard_report_t *dest, const hid_keyboard_report_t *src) { for (uint8_t i = 0; i < KEYS_IN_USB_REPORT; i++) { uint8_t key = src->keycode[i]; if (key == 0 || key_in_report(key, dest)) continue; uint8_t *empty_slot = memchr(dest->keycode, 0, KEYS_IN_USB_REPORT); if (empty_slot) *empty_slot = key; } } /* Release all keys */ void release_all_keys(device_t *state) { memset(state->local_kbd_states, 0, sizeof(state->local_kbd_states)); memset(&state->remote_kbd_state, 0, sizeof(hid_keyboard_report_t)); static hid_keyboard_report_t empty_report = {0}; queue_kbd_report(&empty_report, state); } /* Combine all keyboard states into a single report */ void combine_kbd_states(device_t *state, hid_keyboard_report_t *combined_report) { memset(combined_report, 0, sizeof(hid_keyboard_report_t)); /* Combine all local keyboards up to max_kbd_idx */ for (uint8_t i = 0; i <= state->max_kbd_idx; i++) { combined_report->modifier |= state->local_kbd_states[i].modifier; add_keys(combined_report, &state->local_kbd_states[i]); } /* Add remote keyboard */ combined_report->modifier |= state->remote_kbd_state.modifier; add_keys(combined_report, &state->remote_kbd_state); } /* ==================================================== * * Keyboard Queue Section * ==================================================== */ void process_kbd_queue_task(device_t *state) { hid_keyboard_report_t report; /* If we're not connected, we have nowhere to send reports to. */ if (!state->tud_connected) return; /* Peek first, if there is anything there... */ if (!queue_try_peek(&state->kbd_queue, &report)) return; /* If we are suspended, let's wake the host up */ if (tud_suspended()) tud_remote_wakeup(); /* If it's not ok to send yet, we'll try on the next pass */ if (!tud_hid_n_ready(ITF_NUM_HID)) return; /* ... try sending it to the host, if it's successful */ bool succeeded = tud_hid_keyboard_report(REPORT_ID_KEYBOARD, report.modifier, report.keycode); /* ... then we can remove it from the queue. Race conditions shouldn't happen [tm] */ if (succeeded) queue_try_remove(&state->kbd_queue, &report); } void queue_kbd_report(hid_keyboard_report_t *report, device_t *state) { /* It wouldn't be fun to queue up a bunch of messages and then dump them all on host */ if (!state->tud_connected) return; queue_try_add(&state->kbd_queue, report); } /* If keys need to go locally, queue packet to kbd queue, else send them through UART */ void send_key(hid_keyboard_report_t *report, device_t *state) { /* Create a combined report from all device states */ hid_keyboard_report_t combined_report; combine_kbd_states(state, &combined_report); if (CURRENT_BOARD_IS_ACTIVE_OUTPUT) { /* Queue the combined report */ queue_kbd_report(&combined_report, state); state->last_activity[BOARD_ROLE] = time_us_64(); } else { /* Send the combined report to ensure all keys are included */ queue_packet((uint8_t *)&combined_report, KEYBOARD_REPORT_MSG, KBD_REPORT_LENGTH); } } /* Decide if consumer control reports go local or to the other board */ void send_consumer_control(uint8_t *raw_report, device_t *state) { if (CURRENT_BOARD_IS_ACTIVE_OUTPUT) { queue_cc_packet(raw_report, state); state->last_activity[BOARD_ROLE] = time_us_64(); } else { queue_packet((uint8_t *)raw_report, CONSUMER_CONTROL_MSG, CONSUMER_CONTROL_LENGTH); } } /* Decide if consumer control reports go local or to the other board */ void send_system_control(uint8_t *raw_report, device_t *state) { if (CURRENT_BOARD_IS_ACTIVE_OUTPUT) { queue_system_packet(raw_report, state); state->last_activity[BOARD_ROLE] = time_us_64(); } else { queue_packet((uint8_t *)raw_report, SYSTEM_CONTROL_MSG, SYSTEM_CONTROL_LENGTH); } } /* ==================================================== * * Parse and interpret the keys pressed on the keyboard * ==================================================== */ void process_keyboard_report(uint8_t *raw_report, int length, uint8_t itf, hid_interface_t *iface) { hid_keyboard_report_t new_report = {0}; device_t *state = &global_state; hotkey_combo_t *hotkey = NULL; if (length < KBD_REPORT_LENGTH) return; /* No more keys accepted if we're about to reboot */ if (global_state.reboot_requested) return; extract_kbd_data(raw_report, length, itf, iface, &new_report); /* Update the keyboard state for this device */ update_kbd_state(state, &new_report, itf); /* Check if any hotkey was pressed */ hotkey = check_all_hotkeys(&new_report, state); /* ... and take appropriate action */ if (hotkey != NULL) { /* Provide visual feedback we received the action */ if (hotkey->acknowledge) blink_led(state); /* Execute the corresponding handler */ hotkey->action_handler(state, &new_report); /* And pass the key to the output PC if configured to do so. */ if (!hotkey->pass_to_os) return; } /* This method will decide if the key gets queued locally or sent through UART */ send_key(&new_report, state); } void process_consumer_report(uint8_t *raw_report, int length, uint8_t itf, hid_interface_t *iface) { uint8_t new_report[CONSUMER_CONTROL_LENGTH] = {0}; uint16_t *report_ptr = (uint16_t *)new_report; device_t *state = &global_state; keyboard_t *keyboard = get_keyboard(iface, raw_report[0]); /* If consumer control is variable, read the values from cc_array and send as array. */ if (iface->consumer.is_variable) { for (int i = 0; i < MAX_CC_BUTTONS && i < 8 * (length - 1); i++) { int bit_idx = i % 8; int byte_idx = i >> 3; if ((raw_report[byte_idx + 1] >> bit_idx) & 1) { report_ptr[0] = keyboard->cc_array[i]; } } } else { for (int i = 0; i < length - 1 && i < CONSUMER_CONTROL_LENGTH; i++) new_report[i] = raw_report[i + 1]; } if (CURRENT_BOARD_IS_ACTIVE_OUTPUT) { send_consumer_control(new_report, state); } else { queue_packet((uint8_t *)new_report, CONSUMER_CONTROL_MSG, CONSUMER_CONTROL_LENGTH); } } void process_system_report(uint8_t *raw_report, int length, uint8_t itf, hid_interface_t *iface) { uint16_t new_report = raw_report[1]; uint8_t *report_ptr = (uint8_t *)&new_report; device_t *state = &global_state; if (CURRENT_BOARD_IS_ACTIVE_OUTPUT) { send_system_control(report_ptr, state); } else { queue_packet(report_ptr, SYSTEM_CONTROL_MSG, SYSTEM_CONTROL_LENGTH); } } keyboard_t *get_keyboard(hid_interface_t *iface, uint8_t report_id) { /* When we have just one keyboard (most cases), or don't use report ID */ if (iface->num_keyboards == 1 || !iface->uses_report_id) return &iface->keyboards[PRIMARY_KEYBOARD]; /* Go through known keyboards and match on report ID, return pointer to keyboard_t */ for (int i = 0; i < iface->num_keyboards && i < MAX_KEYBOARDS; i++) { if (iface->keyboards[i].report_id == report_id) { return &iface->keyboards[i]; } } /* If nothing else is matched, return the primary keyboard. */ return &iface->keyboards[PRIMARY_KEYBOARD]; } ================================================ FILE: src/led.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" /* ==================================================== * * ========== Update pico and keyboard LEDs ========== * * ==================================================== */ void set_keyboard_leds(uint8_t requested_led_state, device_t *state) { static uint8_t new_led_value; new_led_value = requested_led_state; if (state->keyboard_connected) { tuh_hid_set_report(state->kbd_dev_addr, state->kbd_instance, 0, HID_REPORT_TYPE_OUTPUT, &new_led_value, sizeof(uint8_t)); } } void restore_leds(device_t *state) { /* Light up on-board LED if current board is active output */ state->onboard_led_state = (state->active_output == BOARD_ROLE); gpio_put(GPIO_LED_PIN, state->onboard_led_state); /* Light up appropriate keyboard leds (if it's connected locally) */ if (state->keyboard_connected) { uint8_t leds = state->keyboard_leds[state->active_output]; set_keyboard_leds(leds, state); } } uint8_t toggle_led(void) { uint8_t new_led_state = gpio_get(GPIO_LED_PIN) ^ 1; gpio_put(GPIO_LED_PIN, new_led_state); return new_led_state; } void blink_led(device_t *state) { /* Since LEDs might be ON previously, we go OFF, ON, OFF, ON, OFF */ state->blinks_left = 5; state->last_led_change = time_us_32(); } void led_blinking_task(device_t *state) { const int blink_interval_us = 80000; /* 80 ms off, 80 ms on */ static uint8_t leds; /* If there is no more blinking to be done, exit immediately */ if (state->blinks_left == 0) return; /* We have some blinks left to do, check if they are due, exit if not */ if ((time_us_32()) - state->last_led_change < blink_interval_us) return; /* Toggle the LED state */ uint8_t new_led_state = toggle_led(); /* Also keyboard leds (if it's connected locally) since on-board leds are not visible */ leds = new_led_state * 0x07; /* Numlock, capslock, scrollock */ if (state->keyboard_connected) set_keyboard_leds(leds, state); /* Decrement the counter and update the last-changed timestamp */ state->blinks_left--; state->last_led_change = time_us_32(); /* Restore LEDs in the last pass */ if (state->blinks_left == 0) restore_leds(state); } ================================================ FILE: src/main.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" /********* Global Variables **********/ device_t global_state = {0}; device_t *device = &global_state; firmware_metadata_t _firmware_metadata __attribute__((section(".section_metadata"))) = { .version = 0x0001, }; /* ================================================== * * ============== Main Program Loops ============== * * ================================================== */ int main(void) { static task_t tasks_core0[] = { [0] = {.exec = &usb_device_task, .frequency = _TOP()}, // .-> USB device task, needs to run as often as possible [1] = {.exec = &kick_watchdog_task, .frequency = _HZ(30)}, // | Verify core1 is still running and if so, reset watchdog timer [2] = {.exec = &process_kbd_queue_task, .frequency = _HZ(2000)}, // | Check if there were any keypresses and send them [3] = {.exec = &process_mouse_queue_task, .frequency = _HZ(2000)}, // | Check if there were any mouse movements and send them [4] = {.exec = &process_hid_queue_task, .frequency = _HZ(1000)}, // | Check if there are any packets to send over vendor link [5] = {.exec = &process_uart_tx_task, .frequency = _TOP()}, // | Check if there are any packets to send over UART }; // `----- then go back and repeat forever const int NUM_TASKS = ARRAY_SIZE(tasks_core0); // Wait for the board to settle sleep_ms(10); // Initial board setup initial_setup(device); // Initial state, A is the default output set_active_output(device, OUTPUT_A); while (true) { for (int i = 0; i < NUM_TASKS; i++) task_scheduler(device, &tasks_core0[i]); } } void core1_main() { static task_t tasks_core1[] = { [0] = {.exec = &usb_host_task, .frequency = _TOP()}, // .-> USB host task, needs to run as often as possible [1] = {.exec = &packet_receiver_task, .frequency = _TOP()}, // | Receive data over serial from the other board [2] = {.exec = &led_blinking_task, .frequency = _HZ(30)}, // | Check if LED needs blinking [3] = {.exec = &screensaver_task, .frequency = _HZ(120)}, // | Handle "screensaver" movements [4] = {.exec = &firmware_upgrade_task, .frequency = _HZ(4000)}, // | Send firmware to the other board if needed [5] = {.exec = &heartbeat_output_task, .frequency = _HZ(1)}, // | Output periodic heartbeats }; // `----- then go back and repeat forever const int NUM_TASKS = ARRAY_SIZE(tasks_core1); while (true) { // Update the timestamp, so core0 can figure out if we're dead device->core1_last_loop_pass = time_us_64(); for (int i = 0; i < NUM_TASKS; i++) task_scheduler(device, &tasks_core1[i]); } } /* ======= End of Main Program Loops ======= */ ================================================ FILE: src/mouse.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" #include #define MACOS_SWITCH_MOVE_X 10 #define MACOS_SWITCH_MOVE_COUNT 5 #define ACCEL_POINTS 7 /* Check if our upcoming mouse movement would result in having to switch outputs */ enum screen_pos_e is_screen_switch_needed(int position, int offset) { if (position + offset < MIN_SCREEN_COORD - global_state.config.jump_threshold) return LEFT; if (position + offset > MAX_SCREEN_COORD + global_state.config.jump_threshold) return RIGHT; return NONE; } /* Move mouse coordinate 'position' by 'offset', but don't fall off the screen */ int32_t move_and_keep_on_screen(int position, int offset) { /* Lowest we can go is 0 */ if (position + offset < MIN_SCREEN_COORD) return MIN_SCREEN_COORD; /* Highest we can go is MAX_SCREEN_COORD */ else if (position + offset > MAX_SCREEN_COORD) return MAX_SCREEN_COORD; /* We're still on screen, all good */ return position + offset; } /* Implement basic mouse acceleration based on actual 2D movement magnitude. Returns the acceleration factor to apply to both x and y components. */ float calculate_mouse_acceleration_factor(int32_t offset_x, int32_t offset_y) { const struct curve { int value; float factor; } acceleration[ACCEL_POINTS] = { // 4 | * {2, 1}, // | * {5, 1.1}, // 3 | {15, 1.4}, // | * {30, 1.9}, // 2 | * {45, 2.6}, // | * {60, 3.4}, // 1 | * {70, 4.0}, // ------------------------------------------- }; // 10 20 30 40 50 60 70 if (offset_x == 0 && offset_y == 0) return 1.0; if (!global_state.config.enable_acceleration) return 1.0; // Calculate the 2D movement magnitude const float movement_magnitude = sqrtf((float)(offset_x * offset_x) + (float)(offset_y * offset_y)); if (movement_magnitude <= acceleration[0].value) return acceleration[0].factor; if (movement_magnitude >= acceleration[ACCEL_POINTS-1].value) return acceleration[ACCEL_POINTS-1].factor; const struct curve *lower = NULL; const struct curve *upper = NULL; for (int i = 0; i < ACCEL_POINTS-1; i++) { if (movement_magnitude < acceleration[i + 1].value) { lower = &acceleration[i]; upper = &acceleration[i + 1]; break; } } // Should never happen, but just in case if (lower == NULL || upper == NULL) return 1.0; const float interpolation_pos = (movement_magnitude - lower->value) / (upper->value - lower->value); return lower->factor + interpolation_pos * (upper->factor - lower->factor); } /* Returns LEFT if need to jump left, RIGHT if right, NONE otherwise */ enum screen_pos_e update_mouse_position(device_t *state, mouse_values_t *values) { output_t *current = &state->config.output[state->active_output]; uint8_t reduce_speed = 0; /* Check if we are configured to move slowly */ if (state->mouse_zoom) reduce_speed = MOUSE_ZOOM_SCALING_FACTOR; /* Calculate movement */ float acceleration_factor = calculate_mouse_acceleration_factor(values->move_x, values->move_y); int offset_x = round(values->move_x * acceleration_factor * (current->speed_x >> reduce_speed)); int offset_y = round(values->move_y * acceleration_factor * (current->speed_y >> reduce_speed)); /* Determine if our upcoming movement would stay within the screen */ enum screen_pos_e switch_direction = is_screen_switch_needed(state->pointer_x, offset_x); /* Update movement */ state->pointer_x = move_and_keep_on_screen(state->pointer_x, offset_x); state->pointer_y = move_and_keep_on_screen(state->pointer_y, offset_y); /* Update buttons state */ state->mouse_buttons = values->buttons; return switch_direction; } /* If we are active output, queue packet to mouse queue, else send them through UART */ void output_mouse_report(mouse_report_t *report, device_t *state) { if (CURRENT_BOARD_IS_ACTIVE_OUTPUT) { queue_mouse_report(report, state); state->last_activity[BOARD_ROLE] = time_us_64(); } else { queue_packet((uint8_t *)report, MOUSE_REPORT_MSG, MOUSE_REPORT_LENGTH); } } /* Calculate and return Y coordinate when moving from screen out_from to screen out_to */ int16_t scale_y_coordinate(int screen_from, int screen_to, device_t *state) { output_t *from = &state->config.output[screen_from]; output_t *to = &state->config.output[screen_to]; int size_to = to->border.bottom - to->border.top; int size_from = from->border.bottom - from->border.top; /* If sizes match, there is nothing to do */ if (size_from == size_to) return state->pointer_y; /* Moving from smaller ==> bigger screen y_a = top + (((bottom - top) * y_b) / HEIGHT) */ if (size_from > size_to) { return to->border.top + ((size_to * state->pointer_y) / MAX_SCREEN_COORD); } /* Moving from bigger ==> smaller screen y_b = ((y_a - top) * HEIGHT) / (bottom - top) */ if (state->pointer_y < from->border.top) return MIN_SCREEN_COORD; if (state->pointer_y > from->border.bottom) return MAX_SCREEN_COORD; return ((state->pointer_y - from->border.top) * MAX_SCREEN_COORD) / size_from; } void switch_to_another_pc( device_t *state, output_t *output, int output_to, int direction) { uint8_t *mouse_park_pos = &state->config.output[state->active_output].mouse_park_pos; int16_t mouse_y = (*mouse_park_pos == 0) ? MIN_SCREEN_COORD : /* Top */ (*mouse_park_pos == 1) ? MAX_SCREEN_COORD : /* Bottom */ state->pointer_y; /* Previous */ mouse_report_t hidden_pointer = {.y = mouse_y, .x = MAX_SCREEN_COORD}; output_mouse_report(&hidden_pointer, state); set_active_output(state, output_to); state->pointer_x = (direction == LEFT) ? MAX_SCREEN_COORD : MIN_SCREEN_COORD; state->pointer_y = scale_y_coordinate(output->number, 1 - output->number, state); } void switch_virtual_desktop_macos(device_t *state, int direction) { /* * Fix for MACOS: Before sending new absolute report setting X to 0: * 1. Move the cursor to the edge of the screen directly in the middle to handle screens * of different heights * 2. Send relative mouse movement one or two pixels in the direction of movement to get * the cursor onto the next screen */ mouse_report_t edge_position = { .x = (direction == LEFT) ? MIN_SCREEN_COORD : MAX_SCREEN_COORD, .y = MAX_SCREEN_COORD / 2, .mode = ABSOLUTE, .buttons = state->mouse_buttons, }; uint16_t move = (direction == LEFT) ? -MACOS_SWITCH_MOVE_X : MACOS_SWITCH_MOVE_X; mouse_report_t move_relative_one = { .x = move, .mode = RELATIVE, .buttons = state->mouse_buttons, }; output_mouse_report(&edge_position, state); /* Once doesn't seem reliable enough, do it a few times */ for (int i = 0; i < MACOS_SWITCH_MOVE_COUNT; i++) output_mouse_report(&move_relative_one, state); } void switch_virtual_desktop(device_t *state, output_t *output, int new_index, int direction) { switch (output->os) { case MACOS: switch_virtual_desktop_macos(state, direction); break; case WINDOWS: /* TODO: Switch to relative-only if index > 1, but keep tabs to switch back */ state->relative_mouse = (new_index > 1); break; case LINUX: case ANDROID: case OTHER: /* Linux should treat all desktops as a single virtual screen, so you should leave screen_count at 1 and it should just work */ break; } state->pointer_x = (direction == RIGHT) ? MIN_SCREEN_COORD : MAX_SCREEN_COORD; output->screen_index = new_index; } /* BORDER | .---------. .---------. | .---------. .---------. .---------. || B2 || || B1 || | || A1 || || A2 || || A3 || (output, index) || extra || || main || | || main || || extra || || extra || (main or extra) '---------' '---------' | '---------' '---------' '---------' )___( )___( | )___( )___( )___( */ void do_screen_switch(device_t *state, int direction) { output_t *output = &state->config.output[state->active_output]; /* No switching allowed if explicitly disabled or in gaming mode */ if (state->switch_lock || state->gaming_mode) return; /* We want to jump in the direction of the other computer */ if (output->pos != direction) { if (output->screen_index == 1) { /* We are at the border -> switch outputs */ /* No switching allowed if mouse button is held. Should only apply to the border! */ if (state->mouse_buttons) return; switch_to_another_pc(state, output, 1 - state->active_output, direction); } /* If here, this output has multiple desktops and we are not on the main one */ else switch_virtual_desktop(state, output, output->screen_index - 1, direction); } /* We want to jump away from the other computer, only possible if there is another screen to jump to */ else if (output->screen_index < output->screen_count) switch_virtual_desktop(state, output, output->screen_index + 1, direction); } static inline bool extract_value(bool uses_id, int32_t *dst, report_val_t *src, uint8_t *raw_report, int len) { /* If HID Report ID is used, the report is prefixed by the report ID so we have to move by 1 byte */ if (uses_id && (*raw_report++ != src->report_id)) return false; *dst = get_report_value(raw_report, len, src); return true; } void extract_report_values(uint8_t *raw_report, int len, device_t *state, mouse_values_t *values, hid_interface_t *iface) { /* Interpret values depending on the current protocol used. */ if (iface->protocol == HID_PROTOCOL_BOOT) { hid_mouse_report_t *mouse_report = (hid_mouse_report_t *)raw_report; values->move_x = mouse_report->x; values->move_y = mouse_report->y; values->wheel = mouse_report->wheel; values->pan = mouse_report->pan; values->buttons = mouse_report->buttons; return; } mouse_t *mouse = &iface->mouse; bool uses_id = iface->uses_report_id; extract_value(uses_id, &values->move_x, &mouse->move_x, raw_report, len); extract_value(uses_id, &values->move_y, &mouse->move_y, raw_report, len); extract_value(uses_id, &values->wheel, &mouse->wheel, raw_report, len); extract_value(uses_id, &values->pan, &mouse->pan, raw_report, len); if (!extract_value(uses_id, &values->buttons, &mouse->buttons, raw_report, len)) { values->buttons = state->mouse_buttons; } } mouse_report_t create_mouse_report(device_t *state, mouse_values_t *values) { mouse_report_t mouse_report = { .buttons = values->buttons, .x = state->pointer_x, .y = state->pointer_y, .wheel = values->wheel, .pan = values->pan, .mode = ABSOLUTE, }; /* Workaround for Windows multiple desktops */ if (state->relative_mouse || state->gaming_mode) { mouse_report.x = values->move_x; mouse_report.y = values->move_y; mouse_report.mode = RELATIVE; } return mouse_report; } void process_mouse_report(uint8_t *raw_report, int len, uint8_t itf, hid_interface_t *iface) { mouse_values_t values = {0}; device_t *state = &global_state; /* Interpret the mouse HID report, extract and save values we need. */ extract_report_values(raw_report, len, state, &values, iface); /* Calculate and update mouse pointer movement. */ enum screen_pos_e switch_direction = update_mouse_position(state, &values); /* Create the report for the output PC based on the updated values */ mouse_report_t report = create_mouse_report(state, &values); /* Move the mouse, depending where the output is supposed to go */ output_mouse_report(&report, state); /* We use the mouse to switch outputs, if switch_direction is LEFT or RIGHT */ if (switch_direction != NONE) do_screen_switch(state, switch_direction); } /* ==================================================== * * Mouse Queue Section * ==================================================== */ void process_mouse_queue_task(device_t *state) { mouse_report_t report = {0}; /* We need to be connected to the host to send messages */ if (!state->tud_connected) return; /* Peek first, if there is anything there... */ if (!queue_try_peek(&state->mouse_queue, &report)) return; /* If we are suspended, let's wake the host up */ if (tud_suspended()) tud_remote_wakeup(); /* If it's not ready, we'll try on the next pass */ if (!tud_hid_n_ready(ITF_NUM_HID)) return; /* Try sending it to the host, if it's successful */ bool succeeded = tud_mouse_report(report.mode, report.buttons, report.x, report.y, report.wheel, report.pan); /* ... then we can remove it from the queue */ if (succeeded) queue_try_remove(&state->mouse_queue, &report); } void queue_mouse_report(mouse_report_t *report, device_t *state) { /* It wouldn't be fun to queue up a bunch of messages and then dump them all on host */ if (!state->tud_connected) return; queue_try_add(&state->mouse_queue, report); } ================================================ FILE: src/protocol.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" const field_map_t api_field_map[] = { /* Index, Rdonly, Type, Len, Offset in struct */ { 0, true, UINT8, 1, offsetof(device_t, active_output) }, { 1, true, INT16, 2, offsetof(device_t, pointer_x) }, { 2, true, INT16, 2, offsetof(device_t, pointer_y) }, { 3, true, INT16, 2, offsetof(device_t, mouse_buttons) }, /* Output A */ { 10, false, UINT32, 4, offsetof(device_t, config.output[0].number) }, { 11, false, UINT32, 4, offsetof(device_t, config.output[0].screen_count) }, { 12, false, INT32, 4, offsetof(device_t, config.output[0].speed_x) }, { 13, false, INT32, 4, offsetof(device_t, config.output[0].speed_y) }, { 14, false, INT32, 4, offsetof(device_t, config.output[0].border.top) }, { 15, false, INT32, 4, offsetof(device_t, config.output[0].border.bottom) }, { 16, false, UINT8, 1, offsetof(device_t, config.output[0].os) }, { 17, false, UINT8, 1, offsetof(device_t, config.output[0].pos) }, { 18, false, UINT8, 1, offsetof(device_t, config.output[0].mouse_park_pos) }, { 19, false, UINT8, 1, offsetof(device_t, config.output[0].screensaver.mode) }, { 20, false, UINT8, 1, offsetof(device_t, config.output[0].screensaver.only_if_inactive) }, /* Until we increase the payload size from 8 bytes, clamp to avoid exceeding the field size */ { 21, false, UINT64, 7, offsetof(device_t, config.output[0].screensaver.idle_time_us) }, { 22, false, UINT64, 7, offsetof(device_t, config.output[0].screensaver.max_time_us) }, /* Output B */ { 40, false, UINT32, 4, offsetof(device_t, config.output[1].number) }, { 41, false, UINT32, 4, offsetof(device_t, config.output[1].screen_count) }, { 42, false, INT32, 4, offsetof(device_t, config.output[1].speed_x) }, { 43, false, INT32, 4, offsetof(device_t, config.output[1].speed_y) }, { 44, false, INT32, 4, offsetof(device_t, config.output[1].border.top) }, { 45, false, INT32, 4, offsetof(device_t, config.output[1].border.bottom) }, { 46, false, UINT8, 1, offsetof(device_t, config.output[1].os) }, { 47, false, UINT8, 1, offsetof(device_t, config.output[1].pos) }, { 48, false, UINT8, 1, offsetof(device_t, config.output[1].mouse_park_pos) }, { 49, false, UINT8, 1, offsetof(device_t, config.output[1].screensaver.mode) }, { 50, false, UINT8, 1, offsetof(device_t, config.output[1].screensaver.only_if_inactive) }, { 51, false, UINT64, 7, offsetof(device_t, config.output[1].screensaver.idle_time_us) }, { 52, false, UINT64, 7, offsetof(device_t, config.output[1].screensaver.max_time_us) }, /* Common config */ { 70, false, UINT32, 4, offsetof(device_t, config.version) }, { 71, false, UINT8, 1, offsetof(device_t, config.force_mouse_boot_mode) }, { 72, false, UINT8, 1, offsetof(device_t, config.force_kbd_boot_protocol) }, { 73, false, UINT8, 1, offsetof(device_t, config.kbd_led_as_indicator) }, { 74, false, UINT8, 1, offsetof(device_t, config.hotkey_toggle) }, { 75, false, UINT8, 1, offsetof(device_t, config.enable_acceleration) }, { 76, false, UINT8, 1, offsetof(device_t, config.enforce_ports) }, { 77, false, UINT16, 2, offsetof(device_t, config.jump_threshold) }, /* Firmware */ { 78, true, UINT16, 2, offsetof(device_t, _running_fw.version) }, { 79, true, UINT32, 4, offsetof(device_t, _running_fw.checksum) }, { 80, true, UINT8, 1, offsetof(device_t, keyboard_connected) }, { 81, true, UINT8, 1, offsetof(device_t, switch_lock) }, { 82, true, UINT8, 1, offsetof(device_t, relative_mouse) }, }; const field_map_t* get_field_map_entry(uint32_t index) { for (unsigned int i = 0; i < ARRAY_SIZE(api_field_map); i++) { if (api_field_map[i].idx == index) { return &api_field_map[i]; } } return NULL; } const field_map_t* get_field_map_index(uint32_t index) { /* Clamp potential overflows to last element. */ if (index >= ARRAY_SIZE(api_field_map)) index = ARRAY_SIZE(api_field_map) - 1; return &api_field_map[index]; } size_t get_field_map_length(void) { return ARRAY_SIZE(api_field_map); } void _queue_packet(uint8_t *payload, device_t *state, uint8_t type, uint8_t len, uint8_t id, uint8_t inst) { hid_generic_pkt_t generic_packet = { .instance = inst, .report_id = id, .type = type, .len = len, }; memcpy(generic_packet.data, payload, len); queue_try_add(&state->hid_queue_out, &generic_packet); } void queue_cfg_packet(uart_packet_t *packet, device_t *state) { uint8_t raw_packet[RAW_PACKET_LENGTH]; write_raw_packet(raw_packet, packet); _queue_packet(raw_packet, state, 0, RAW_PACKET_LENGTH, REPORT_ID_VENDOR, ITF_NUM_HID_VENDOR); } void queue_cc_packet(uint8_t *payload, device_t *state) { _queue_packet(payload, state, 1, CONSUMER_CONTROL_LENGTH, REPORT_ID_CONSUMER, ITF_NUM_HID); } void queue_system_packet(uint8_t *payload, device_t *state) { _queue_packet(payload, state, 2, SYSTEM_CONTROL_LENGTH, REPORT_ID_SYSTEM, ITF_NUM_HID); } ================================================ FILE: src/ramdisk.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * Based on the TinyUSB example by Ha Thach. * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" #define NUMBER_OF_BLOCKS 4096 #define ACTUAL_NUMBER_OF_BLOCKS 128 #define BLOCK_SIZE 512 void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) { strcpy((char *)vendor_id, "DeskHop"); strcpy((char *)product_id, "Config Mode"); strcpy((char *)product_rev, "1.0"); } bool tud_msc_test_unit_ready_cb(uint8_t lun) { return true; } void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_size) { *block_count = NUMBER_OF_BLOCKS; *block_size = BLOCK_SIZE; } bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) { return true; } /* Return the requested data, or -1 if out-of-bounds */ int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buffer, uint32_t bufsize) { const uint8_t *addr = &ADDR_DISK_IMAGE[lba * BLOCK_SIZE + offset]; if (lba >= NUMBER_OF_BLOCKS) return -1; /* We lie about the image size - actually it's 64 kB, not 512 kB, so if we're out of bounds, return zeros */ else if (lba >= ACTUAL_NUMBER_OF_BLOCKS) memset(buffer, 0x00, bufsize); else memcpy(buffer, addr, bufsize); return (int32_t)bufsize; } /* We're writable, so return true */ bool tud_msc_is_writable_cb(uint8_t lun) { return true; } /* Simple firmware write routine, we get 512-byte uf2 blocks with 256 byte payload */ int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, uint32_t bufsize) { uf2_t *uf2 = (uf2_t *)&buffer[0]; bool is_final_block = uf2->blockNo == (STAGING_IMAGE_SIZE / FLASH_PAGE_SIZE) - 1; uint32_t flash_addr = (uint32_t)ADDR_FW_RUNNING + uf2->blockNo * FLASH_PAGE_SIZE - XIP_BASE; if (lba >= NUMBER_OF_BLOCKS) return -1; /* If we're not detecting UF2 magic constants, we have nothing to do... */ if (uf2->magicStart0 != UF2_MAGIC_START0 || uf2->magicStart1 != UF2_MAGIC_START1 || uf2->magicEnd != UF2_MAGIC_END) return (int32_t)bufsize; if (uf2->blockNo == 0) { global_state.fw.checksum = 0xffffffff; /* Make sure nobody else touches the flash during this operation, otherwise we get empty pages */ global_state.fw.upgrade_in_progress = true; } /* Update checksum continuously as blocks are being received */ const uint32_t last_block_with_checksum = (STAGING_IMAGE_SIZE - FLASH_SECTOR_SIZE) / FLASH_PAGE_SIZE; for (int i=0; iblockNo < last_block_with_checksum; i++) global_state.fw.checksum = crc32_iter(global_state.fw.checksum, buffer[32 + i]); write_flash_page(flash_addr, &buffer[32]); if (is_final_block) { global_state.fw.checksum = ~global_state.fw.checksum; /* If checksums don't match, overwrite first sector and rely on ROM bootloader for recovery */ if (global_state.fw.checksum != calculate_firmware_crc32()) { flash_range_erase((uint32_t)ADDR_FW_RUNNING - XIP_BASE, FLASH_SECTOR_SIZE); reset_usb_boot(1 << PICO_DEFAULT_LED_PIN, 0); } else { global_state.reboot_requested = true; } } /* Provide some visual indication that fw is being uploaded */ toggle_led(); watchdog_update(); return (int32_t)bufsize; } /* This is a super-dumb, rudimentary disk, any other scsi command is simply rejected */ int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize) { tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); return -1; } ================================================ FILE: src/setup.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ /* ================================================== * * ============= Initial Board Setup ============== * * ================================================== */ #include "main.h" /* ================================================== * * Perform initial UART setup * ================================================== */ void serial_init() { /* Set up our UART with a default baudrate. */ uart_init(SERIAL_UART, SERIAL_BAUDRATE); /* Set UART flow control CTS/RTS. We don't have these - turn them off.*/ uart_set_hw_flow(SERIAL_UART, false, false); /* Set our data format */ uart_set_format(SERIAL_UART, SERIAL_DATA_BITS, SERIAL_STOP_BITS, SERIAL_PARITY); /* Turn of CRLF translation */ uart_set_translate_crlf(SERIAL_UART, false); /* We do want FIFO, will help us have fewer interruptions */ uart_set_fifo_enabled(SERIAL_UART, true); /* Set the RX/TX pins, they differ based on the device role (A or B, check schematics) */ gpio_set_function(SERIAL_TX_PIN, GPIO_FUNC_UART); gpio_set_function(SERIAL_RX_PIN, GPIO_FUNC_UART); } /* ================================================== * * PIO USB configuration, D+ pin 14, D- pin 15 * ================================================== */ void pio_usb_host_config(device_t *state) { /* tuh_configure() must be called before tuh_init() */ static pio_usb_configuration_t config = PIO_USB_DEFAULT_CONFIG; config.pin_dp = PIO_USB_DP_PIN_DEFAULT; /* Board B is always report mode, board A is default-boot if configured */ if (state->board_role == OUTPUT_B || ENFORCE_KEYBOARD_BOOT_PROTOCOL == 0) tuh_hid_set_default_protocol(HID_PROTOCOL_REPORT); tuh_configure(BOARD_TUH_RHPORT, TUH_CFGID_RPI_PIO_USB_CONFIGURATION, &config); /* Initialize and configure TinyUSB Host */ tuh_init(1); } /* ================================================== * * Board Autoprobe Routine * ================================================== */ /* Probing algorithm logic: - RX pin is driven by the digital isolator IC - IF we are board A, it will be connected to pin 13 and it will drive it either high or low at any given time - Before uart setup, enable it as an input - Go through a probing sequence of 8 values and pull either up or down to that value - Read out the value on the RX pin - If the entire sequence of values match, we are definitely floating so IC is not connected on BOARD_A_RX, and we're BOARD B */ int board_autoprobe(void) { const bool probing_sequence[] = {true, false, false, true, true, false, true, false}; const int seq_len = ARRAY_SIZE(probing_sequence); /* Set the pin as INPUT and initialize it */ gpio_init(BOARD_A_RX); gpio_set_dir(BOARD_A_RX, GPIO_IN); for (int i=0; iscratch[5] == MAGIC_WORD_1 && watchdog_hw->scratch[6] == MAGIC_WORD_2); /* Remove, so next reboot it's no longer active */ if (is_active) watchdog_hw->scratch[5] = 0; reset_config_timer(state); return is_active; } /* ================================================== * * Configure DMA for reliable UART transfers * ================================================== */ const uint8_t* uart_buffer_pointers[1] = {uart_rxbuf}; uint8_t uart_rxbuf[DMA_RX_BUFFER_SIZE] __attribute__((aligned(DMA_RX_BUFFER_SIZE))) ; uint8_t uart_txbuf[DMA_TX_BUFFER_SIZE] __attribute__((aligned(DMA_TX_BUFFER_SIZE))) ; static void configure_tx_dma(device_t *state) { state->dma_tx_channel = dma_claim_unused_channel(true); dma_channel_config tx_config = dma_channel_get_default_config(state->dma_tx_channel); channel_config_set_transfer_data_size(&tx_config, DMA_SIZE_8); /* Writing uart (always write the same address, but source addr changes as we read) */ channel_config_set_read_increment(&tx_config, true); channel_config_set_write_increment(&tx_config, false); // channel_config_set_ring(&tx_config, false, 4); channel_config_set_dreq(&tx_config, DREQ_UART0_TX); /* Configure, but don't start immediately. We'll do this each time the outgoing packet is ready and we copy it to the buffer */ dma_channel_configure( state->dma_tx_channel, &tx_config, &uart0_hw->dr, uart_txbuf, 0, false ); } static void configure_rx_dma(device_t *state) { /* Find an empty channel, store it for later reference */ state->dma_rx_channel = dma_claim_unused_channel(true); state->dma_control_channel = dma_claim_unused_channel(true); dma_channel_config config = dma_channel_get_default_config(state->dma_rx_channel); dma_channel_config control_config = dma_channel_get_default_config(state->dma_control_channel); channel_config_set_transfer_data_size(&config, DMA_SIZE_8); channel_config_set_transfer_data_size(&control_config, DMA_SIZE_32); // The read address is the address of the UART data register which is constant channel_config_set_read_increment(&config, false); channel_config_set_read_increment(&control_config, false); // Read into a ringbuffer with 1024 (2^10) elements channel_config_set_write_increment(&config, true); channel_config_set_write_increment(&control_config, false); channel_config_set_ring(&config, true, 10); // The UART signals when data is avaliable channel_config_set_dreq(&config, DREQ_UART0_RX); channel_config_set_chain_to(&config, state->dma_control_channel); dma_channel_configure( state->dma_rx_channel, &config, uart_rxbuf, &uart0_hw->dr, DMA_RX_BUFFER_SIZE, false); dma_channel_configure( state->dma_control_channel, &control_config, &dma_hw->ch[state->dma_rx_channel].al2_write_addr_trig, uart_buffer_pointers, 1, false); dma_channel_start(state->dma_control_channel); } /* ================================================== * * Perform initial board/usb setup * ================================================== */ int board; void initial_setup(device_t *state) { /* PIO USB requires a clock multiple of 12 MHz, setting to 120 MHz */ set_sys_clock_khz(120000, true); /* Search the persistent storage sector in flash for valid config or use defaults */ load_config(state); /* Init and enable the on-board LED GPIO as output */ gpio_init(GPIO_LED_PIN); gpio_set_dir(GPIO_LED_PIN, GPIO_OUT); /* Check if we should boot in configuration mode or not */ state->config_mode_active = is_config_mode_active(state); /* Detect which board we're running on */ state->board_role = board_autoprobe(); /* Initialize and configure UART */ serial_init(); /* Initialize keyboard and mouse queues */ queue_init(&state->kbd_queue, sizeof(hid_keyboard_report_t), KBD_QUEUE_LENGTH); queue_init(&state->mouse_queue, sizeof(mouse_report_t), MOUSE_QUEUE_LENGTH); /* Initialize generic HID packet queue */ queue_init(&state->hid_queue_out, sizeof(hid_generic_pkt_t), HID_QUEUE_LENGTH); /* Initialize UART queue */ queue_init(&state->uart_tx_queue, sizeof(uart_packet_t), UART_QUEUE_LENGTH); /* Setup RP2040 Core 1 */ multicore_reset_core1(); multicore_launch_core1(core1_main); /* Initialize and configure TinyUSB Device */ tud_init(BOARD_TUD_RHPORT); /* Initialize and configure TinyUSB Host */ pio_usb_host_config(state); /* Initialize and configure DMA */ configure_tx_dma(state); configure_rx_dma(state); /* Load the current firmware info */ state->_running_fw = _firmware_metadata; /* Update the core1 initial pass timestamp before enabling the watchdog */ state->core1_last_loop_pass = time_us_64(); /* Setup the watchdog so we reboot and recover from a crash */ watchdog_enable(WATCHDOG_TIMEOUT, WATCHDOG_PAUSE_ON_DEBUG); } /* ========== End of Initial Board Setup ========== */ ================================================ FILE: src/tasks.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" void task_scheduler(device_t *state, task_t *task) { uint64_t current_time = time_us_64(); if (current_time < task->next_run) return; task->next_run = current_time + task->frequency; task->exec(state); } /* ================================================== * * ============== Watchdog Functions ============== * * ================================================== */ void kick_watchdog_task(device_t *state) { /* Read the timer AFTER duplicating the core1 timestamp, so it doesn't get updated in the meantime. */ uint64_t core1_last_loop_pass = state->core1_last_loop_pass; uint64_t current_time = time_us_64(); /* If a reboot is requested, we'll stop updating watchdog */ if (state->reboot_requested) return; /* If core1 stops updating the timestamp, we'll stop kicking the watchog and reboot */ if (current_time - core1_last_loop_pass < CORE1_HANG_TIMEOUT_US) watchdog_update(); } /* ================================================== * * =============== USB Device / Host ============== * * ================================================== */ void usb_device_task(device_t *state) { tud_task(); } void usb_host_task(device_t *state) { if (tuh_inited()) tuh_task(); } mouse_report_t *screensaver_pong(device_t *state) { static mouse_report_t report = {0}; static int dx = 20, dy = 25; /* Check if we are bouncing off the walls and reverse direction in that case. */ if (report.x + dx < MIN_SCREEN_COORD || report.x + dx > MAX_SCREEN_COORD) dx = -dx; if (report.y + dy < MIN_SCREEN_COORD || report.y + dy > MAX_SCREEN_COORD) dy = -dy; report.x += dx; report.y += dy; return &report; } mouse_report_t *screensaver_jitter(device_t *state) { static mouse_report_t report = { .y = JITTER_DISTANCE, .mode = RELATIVE, }; report.y = -report.y; return &report; } /* Have something fun and entertaining when idle. */ void screensaver_task(device_t *state) { const uint32_t delays[] = { 0, /* DISABLED, unused index 0 */ 5000, /* PONG, move mouse every 5 ms for a high framerate */ 10000000, /* JITTER, once every 10 sec is more than enough */ }; static int last_pointer_move = 0; screensaver_t *screensaver = &state->config.output[BOARD_ROLE].screensaver; uint64_t inactivity_period = time_us_64() - state->last_activity[BOARD_ROLE]; /* If we're not enabled, nothing to do here. */ if (screensaver->mode == DISABLED) return; /* System is still not idle for long enough to activate or screensaver mode is not supported */ if (inactivity_period < screensaver->idle_time_us || screensaver->mode > MAX_SS_VAL) return; /* We exceeded the maximum permitted screensaver runtime */ if (screensaver->max_time_us && inactivity_period > (screensaver->max_time_us + screensaver->idle_time_us)) return; /* If we're the selected output and we can only run on inactive output, nothing to do here. */ if (screensaver->only_if_inactive && CURRENT_BOARD_IS_ACTIVE_OUTPUT) return; /* We're active! Now check if it's time to move the cursor yet. */ if (time_us_32() - last_pointer_move < delays[screensaver->mode]) return; /* Return, if we're not connected or the host is suspended */ if(!tud_ready()) { return; } mouse_report_t *report; switch (screensaver->mode) { case PONG: report = screensaver_pong(state); break; case JITTER: report = screensaver_jitter(state); break; default: return; } /* Move mouse pointer */ queue_mouse_report(report, state); /* Update timer of the last pointer move */ last_pointer_move = time_us_32(); } /* Periodically emit heartbeat packets */ void heartbeat_output_task(device_t *state) { /* If firmware upgrade is in progress, don't touch flash_cs */ if (state->fw.upgrade_in_progress) return; if (state->config_mode_active) { /* Leave config mode if timeout expired and user didn't click exit */ if (time_us_64() > state->config_mode_timer) reboot(); /* Keep notifying the user we're still in config mode */ blink_led(state); } #ifdef DH_DEBUG /* Holding the button invokes bootsel firmware upgrade */ if (is_bootsel_pressed()) reset_usb_boot(1 << PICO_DEFAULT_LED_PIN, 0); #endif uart_packet_t packet = { .type = HEARTBEAT_MSG, .data16 = { [0] = state->_running_fw.version, [2] = state->active_output, }, }; queue_try_add(&global_state.uart_tx_queue, &packet); } /* Process other outgoing hid report messages. */ void process_hid_queue_task(device_t *state) { hid_generic_pkt_t packet; if (!queue_try_peek(&state->hid_queue_out, &packet)) return; if (!tud_hid_n_ready(packet.instance)) return; /* ... try sending it to the host, if it's successful */ bool succeeded = tud_hid_n_report(packet.instance, packet.report_id, packet.data, packet.len); /* ... then we can remove it from the queue. Race conditions shouldn't happen [tm] */ if (succeeded) queue_try_remove(&state->hid_queue_out, &packet); } /* Task that handles copying firmware from the other device to ours */ void firmware_upgrade_task(device_t *state) { if (!state->fw.upgrade_in_progress || !state->fw.byte_done) return; if (queue_is_full(&state->uart_tx_queue)) return; /* End condition, when reached the process is completed. */ if (state->fw.address > STAGING_IMAGE_SIZE) { state->fw.upgrade_in_progress = 0; state->fw.checksum = ~state->fw.checksum; /* Checksum mismatch, we wipe the stage 2 bootloader and rely on ROM recovery */ if(calculate_firmware_crc32() != state->fw.checksum) { flash_range_erase((uint32_t)ADDR_FW_RUNNING - XIP_BASE, FLASH_SECTOR_SIZE); reset_usb_boot(1 << PICO_DEFAULT_LED_PIN, 0); } else { state->_running_fw = _firmware_metadata; global_state.reboot_requested = true; } } /* If we're on the last element of the current page, page is done - write it. */ if (TU_U32_BYTE0(state->fw.address) == 0x00) { uint32_t page_start_addr = (state->fw.address - 1) & 0xFFFFFF00; write_flash_page((uint32_t)ADDR_FW_RUNNING + page_start_addr - XIP_BASE, state->page_buffer); } request_byte(state, state->fw.address); } void packet_receiver_task(device_t *state) { uint32_t current_pointer = (uint32_t)DMA_RX_BUFFER_SIZE - dma_channel_hw_addr(state->dma_rx_channel)->transfer_count; uint32_t delta = get_ptr_delta(current_pointer, state); /* If we don't have enough characters for a packet, skip loop and return immediately */ while (delta >= RAW_PACKET_LENGTH) { if (is_start_of_packet(state)) { fetch_packet(state); process_packet(&state->in_packet, state); return; } /* No packet found, advance to next position and decrement delta */ state->dma_ptr = NEXT_RING_IDX(state->dma_ptr); delta--; } } ================================================ FILE: src/uart.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" /* ================================================== * * =============== Sending Packets ================ * * ================================================== */ /* Takes a packet as uart_packet_t struct, adds preamble, checksum and encodes it to a raw array. */ void write_raw_packet(uint8_t *dst, uart_packet_t *packet) { uint8_t pkt[RAW_PACKET_LENGTH] = {[0] = START1, [1] = START2, [2] = packet->type, /* [3-10] is data, defaults to 0 */ [11] = calc_checksum(packet->data, PACKET_DATA_LENGTH)}; memcpy(&pkt[START_LENGTH + TYPE_LENGTH], packet->data, PACKET_DATA_LENGTH); memcpy(dst, &pkt, RAW_PACKET_LENGTH); } /* Schedule packet for sending to the other box */ void queue_packet(const uint8_t *data, enum packet_type_e packet_type, int length) { uart_packet_t packet = {.type = packet_type}; memcpy(packet.data, data, length); queue_try_add(&global_state.uart_tx_queue, &packet); } /* Sends just one byte of a certain packet type to the other box. */ void send_value(const uint8_t value, enum packet_type_e packet_type) { queue_packet(&value, packet_type, sizeof(uint8_t)); } /* Process outgoing config report messages. */ void process_uart_tx_task(device_t *state) { uart_packet_t packet = {0}; if (dma_channel_is_busy(state->dma_tx_channel)) return; if (!queue_try_remove(&state->uart_tx_queue, &packet)) return; write_raw_packet(uart_txbuf, &packet); dma_channel_transfer_from_buffer_now(state->dma_tx_channel, uart_txbuf, RAW_PACKET_LENGTH); } /* ================================================== * * =============== Parsing Packets ================ * * ================================================== */ const uart_handler_t uart_handler[] = { /* Core functions */ {.type = KEYBOARD_REPORT_MSG, .handler = handle_keyboard_uart_msg}, {.type = MOUSE_REPORT_MSG, .handler = handle_mouse_abs_uart_msg}, {.type = OUTPUT_SELECT_MSG, .handler = handle_output_select_msg}, /* Box control */ {.type = MOUSE_ZOOM_MSG, .handler = handle_mouse_zoom_msg}, {.type = KBD_SET_REPORT_MSG, .handler = handle_set_report_msg}, {.type = SWITCH_LOCK_MSG, .handler = handle_switch_lock_msg}, {.type = SYNC_BORDERS_MSG, .handler = handle_sync_borders_msg}, {.type = FLASH_LED_MSG, .handler = handle_flash_led_msg}, {.type = GAMING_MODE_MSG, .handler = handle_toggle_gaming_msg}, {.type = CONSUMER_CONTROL_MSG, .handler = handle_consumer_control_msg}, {.type = SCREENSAVER_MSG, .handler = handle_screensaver_msg}, /* Config */ {.type = WIPE_CONFIG_MSG, .handler = handle_wipe_config_msg}, {.type = SAVE_CONFIG_MSG, .handler = handle_save_config_msg}, {.type = REBOOT_MSG, .handler = handle_reboot_msg}, {.type = GET_VAL_MSG, .handler = handle_api_msgs}, {.type = GET_ALL_VALS_MSG, .handler = handle_api_read_all_msg}, {.type = SET_VAL_MSG, .handler = handle_api_msgs}, /* Firmware */ {.type = REQUEST_BYTE_MSG, .handler = handle_request_byte_msg}, {.type = RESPONSE_BYTE_MSG, .handler = handle_response_byte_msg}, {.type = FIRMWARE_UPGRADE_MSG, .handler = handle_fw_upgrade_msg}, {.type = HEARTBEAT_MSG, .handler = handle_heartbeat_msg}, {.type = PROXY_PACKET_MSG, .handler = handle_proxy_msg}, }; void process_packet(uart_packet_t *packet, device_t *state) { if (!verify_checksum(packet)) return; for (int i = 0; i < ARRAY_SIZE(uart_handler); i++) { if (uart_handler[i].type == packet->type) { uart_handler[i].handler(packet, state); return; } } } ================================================ FILE: src/usb.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" _Static_assert(MAX_DEVICES <= CFG_TUH_DEVICE_MAX, "MAX_DEVICES must not exceed CFG_TUH_DEVICE_MAX"); /* ================================================== * * =========== TinyUSB Device Callbacks =========== * * ================================================== */ /* Invoked when we get GET_REPORT control request. * We are expected to fill buffer with the report content, update reqlen * and return its length. We return 0 to STALL the request. */ uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t *buffer, uint16_t request_len) { return 0; } /** * Computer controls our LEDs by sending USB SetReport messages with a payload * of just 1 byte and report type output. It's type 0x21 (USB_REQ_DIR_OUT | * USB_REQ_TYP_CLASS | USB_REQ_REC_IFACE) Request code for SetReport is 0x09, * report type is 0x02 (HID_REPORT_TYPE_OUTPUT). We get a set_report callback * from TinyUSB device HID and then figure out what to do with the LEDs. */ void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const *buffer, uint16_t bufsize) { /* We received a report on the config report ID */ if (instance == ITF_NUM_HID_VENDOR && report_id == REPORT_ID_VENDOR) { /* Security - only if config mode is enabled are we allowed to do anything. While the report_id isn't even advertised when not in config mode, security must always be explicit and never assume */ if (!global_state.config_mode_active) return; /* We insist on a fixed size packet. No overflows. */ if (bufsize != RAW_PACKET_LENGTH) return; uart_packet_t *packet = (uart_packet_t *) (buffer + START_LENGTH); /* Only a certain packet types are accepted */ if (!validate_packet(packet)) return; process_packet(packet, &global_state); } /* Only other set report we care about is LED state change, and that's exactly 1 byte long */ if (report_id != REPORT_ID_KEYBOARD || bufsize != 1 || report_type != HID_REPORT_TYPE_OUTPUT) return; uint8_t leds = buffer[0]; /* If we are using caps lock LED to indicate the chosen output, that has priority */ if (global_state.config.kbd_led_as_indicator) { leds = leds & 0xFD; /* 1111 1101 (Clear Caps Lock bit) */ if (global_state.active_output) leds |= KEYBOARD_LED_CAPSLOCK; } global_state.keyboard_leds[BOARD_ROLE] = leds; /* If the board has a keyboard connected directly, restore those leds. */ if (global_state.keyboard_connected && CURRENT_BOARD_IS_ACTIVE_OUTPUT) restore_leds(&global_state); /* Always send to the other one, so it is aware of the change */ send_value(leds, KBD_SET_REPORT_MSG); } /* Invoked when device is mounted */ void tud_mount_cb(void) { global_state.tud_connected = true; } /* Invoked when device is unmounted */ void tud_umount_cb(void) { global_state.tud_connected = false; } #ifdef DH_DEBUG_CDC_FLASH void tud_cdc_rx_cb(uint8_t itf) { char buf[64]; uint32_t count = tud_cdc_n_available(itf); if (count == 0) return; if (count > sizeof(buf)) count = sizeof(buf); tud_cdc_n_read(itf, buf, count); if (count >= 5 && memcmp(buf, "flash", 5) == 0) { reset_usb_boot(0, 0); } } #endif /* ================================================== * * =============== USB HOST Section =============== * * ================================================== */ void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t instance) { uint8_t itf_protocol = tuh_hid_interface_protocol(dev_addr, instance); if (dev_addr > MAX_DEVICES || instance >= MAX_INTERFACES) return; hid_interface_t *iface = &global_state.iface[dev_addr-1][instance]; switch (itf_protocol) { case HID_ITF_PROTOCOL_KEYBOARD: global_state.keyboard_connected = false; break; case HID_ITF_PROTOCOL_MOUSE: global_state.mouse_connected = false; break; } /* Also clear the interface structure, otherwise plugging something else later might be a fun (and confusing) experience */ memset(iface, 0, sizeof(hid_interface_t)); } void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const *desc_report, uint16_t desc_len) { uint8_t itf_protocol = tuh_hid_interface_protocol(dev_addr, instance); if (dev_addr > MAX_DEVICES || instance >= MAX_INTERFACES) return; /* Get interface information */ hid_interface_t *iface = &global_state.iface[dev_addr-1][instance]; iface->protocol = tuh_hid_get_protocol(dev_addr, instance); /* Parse the report descriptor into our internal structure. */ parse_report_descriptor(iface, desc_report, desc_len); switch (itf_protocol) { case HID_ITF_PROTOCOL_KEYBOARD: if (global_state.config.enforce_ports && BOARD_ROLE == OUTPUT_B) return; if (global_state.config.force_kbd_boot_protocol) tuh_hid_set_protocol(dev_addr, instance, HID_PROTOCOL_BOOT); /* Keeping this is required for setting leds from device set_report callback */ global_state.kbd_dev_addr = dev_addr; global_state.kbd_instance = instance; global_state.keyboard_connected = true; break; case HID_ITF_PROTOCOL_MOUSE: if (global_state.config.enforce_ports && BOARD_ROLE == OUTPUT_A) return; if (global_state.config.force_mouse_boot_mode) { /* User requested boot mode - simpler protocol for compatibility. Note: many mice still send wheel data even in boot mode. */ tuh_hid_set_protocol(dev_addr, instance, HID_PROTOCOL_BOOT); } else { /* Switch to using report protocol instead of boot, it's more complicated but at least we get all the information we need (looking at you, mouse wheel) */ if (tuh_hid_get_protocol(dev_addr, instance) == HID_PROTOCOL_BOOT) { tuh_hid_set_protocol(dev_addr, instance, HID_PROTOCOL_REPORT); } } global_state.mouse_connected = true; break; case HID_ITF_PROTOCOL_NONE: break; } /* Also set mouse_connected if report descriptor contains mouse, even if interface protocol says keyboard. This handles composite devices like QMK. */ if (iface->mouse.is_found) { global_state.mouse_connected = true; } /* Flash local led to indicate a device was connected */ blink_led(&global_state); /* Also signal the other board to flash LED, to enable easy verification if serial works */ send_value(ENABLE, FLASH_LED_MSG); /* Kick off the report querying */ tuh_hid_receive_report(dev_addr, instance); } /* Invoked when received report from device via interrupt endpoint */ void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t const *report, uint16_t len) { uint8_t const itf_protocol = tuh_hid_interface_protocol(dev_addr, instance); if (dev_addr > MAX_DEVICES || instance >= MAX_INTERFACES) return; hid_interface_t *iface = &global_state.iface[dev_addr-1][instance]; /* Calculate a device index that distinguishes between different devices while staying within the bounds of MAX_DEVICES. Device index assignment: - 0: Primary keyboard (the one set in tuh_hid_mount_cb) - 1: Mouse devices - MAX_DEVICES-2: Secondary keyboards (e.g., wireless keyboard through unified dongle) - (dev_addr-1) % (MAX_DEVICES-1): Other devices Note: Slot MAX_DEVICES-1 is reserved for the remote device (used in handle_keyboard_uart_msg) */ uint8_t device_idx; if (itf_protocol == HID_ITF_PROTOCOL_KEYBOARD) { if (dev_addr == global_state.kbd_dev_addr && instance == global_state.kbd_instance) { /* Primary keyboard */ device_idx = 0; } else { /* Secondary keyboard (e.g., wireless keyboard through unified dongle) */ device_idx = (MAX_DEVICES - 2); } } else if (itf_protocol == HID_ITF_PROTOCOL_MOUSE) { /* Mouse devices */ device_idx = 1; } else { /* Other devices */ device_idx = (dev_addr - 1) % (MAX_DEVICES - 1); } if (iface->uses_report_id || itf_protocol == HID_ITF_PROTOCOL_NONE) { uint8_t report_id = 0; if (iface->uses_report_id) report_id = report[0]; if (report_id < MAX_REPORTS) { process_report_f receiver = iface->report_handler[report_id]; if (receiver != NULL) receiver((uint8_t *)report, len, device_idx, iface); } } else if (itf_protocol == HID_ITF_PROTOCOL_KEYBOARD) { process_keyboard_report((uint8_t *)report, len, device_idx, iface); } else if (itf_protocol == HID_ITF_PROTOCOL_MOUSE) { process_mouse_report((uint8_t *)report, len, device_idx, iface); } /* Continue requesting reports */ tuh_hid_receive_report(dev_addr, instance); } /* Set protocol in a callback. This is tied to an interface, not a specific report ID */ void tuh_hid_set_protocol_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t protocol) { if (dev_addr > MAX_DEVICES || idx > MAX_INTERFACES) return; hid_interface_t *iface = &global_state.iface[dev_addr-1][idx]; iface->protocol = protocol; } ================================================ FILE: src/usb_descriptors.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "usb_descriptors.h" #include "main.h" #include "tusb.h" //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ // https://github.com/raspberrypi/usb-pid tusb_desc_device_t const desc_device_config = DEVICE_DESCRIPTOR(0x2e8a, 0x107c); // https://pid.codes/1209/C000/ tusb_desc_device_t const desc_device = DEVICE_DESCRIPTOR(0x1209, 0xc000); // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor uint8_t const *tud_descriptor_device_cb(void) { if (global_state.config_mode_active) return (uint8_t const *)&desc_device_config; else return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // HID Report Descriptor //--------------------------------------------------------------------+ // Relative mouse is used to overcome limitations of multiple desktops on MacOS and Windows uint8_t const desc_hid_report[] = {TUD_HID_REPORT_DESC_KEYBOARD(HID_REPORT_ID(REPORT_ID_KEYBOARD)), TUD_HID_REPORT_DESC_ABS_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE)), TUD_HID_REPORT_DESC_CONSUMER_CTRL(HID_REPORT_ID(REPORT_ID_CONSUMER)), TUD_HID_REPORT_DESC_SYSTEM_CONTROL(HID_REPORT_ID(REPORT_ID_SYSTEM)) }; uint8_t const desc_hid_report_relmouse[] = {TUD_HID_REPORT_DESC_MOUSEHELP(HID_REPORT_ID(REPORT_ID_RELMOUSE))}; uint8_t const desc_hid_report_vendor[] = {TUD_HID_REPORT_DESC_VENDOR_CTRL(HID_REPORT_ID(REPORT_ID_VENDOR))}; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance) { if (global_state.config_mode_active) if (instance == ITF_NUM_HID_VENDOR) return desc_hid_report_vendor; switch(instance) { case ITF_NUM_HID: return desc_hid_report; case ITF_NUM_HID_REL_M: return desc_hid_report_relmouse; default: return desc_hid_report; } } bool tud_mouse_report(uint8_t mode, uint8_t buttons, int16_t x, int16_t y, int8_t wheel, int8_t pan) { mouse_report_t report = {.buttons = buttons, .wheel = wheel, .x = x, .y = y, .mode = mode, .pan = pan}; uint8_t instance = ITF_NUM_HID; uint8_t report_id = REPORT_ID_MOUSE; if (mode == RELATIVE) { instance = ITF_NUM_HID_REL_M; report_id = REPORT_ID_RELMOUSE; } return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } //--------------------------------------------------------------------+ // String Descriptors //--------------------------------------------------------------------+ // array of pointer to string descriptors char const *string_desc_arr[] = { (const char[]){0x09, 0x04}, // 0: is supported language is English (0x0409) "Hrvoje Cavrak", // 1: Manufacturer "DeskHop Switch", // 2: Product "0", // 3: Serials, should use chip ID "DeskHop Helper", // 4: Mouse Helper Interface "DeskHop Config", // 5: Vendor Interface "DeskHop Disk", // 6: Disk Interface #ifdef DH_DEBUG "DeskHop Debug", // 7: Debug Interface #endif }; // String Descriptor Index enum { STRID_LANGID = 0, STRID_MANUFACTURER, STRID_PRODUCT, STRID_SERIAL, STRID_MOUSE, STRID_VENDOR, STRID_DISK, STRID_DEBUG, }; static uint16_t _desc_str[32]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to // complete uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { (void)langid; uint8_t chr_count; // 2 (hex) characters for every byte + 1 '\0' for string end static char serial_number[PICO_UNIQUE_BOARD_ID_SIZE_BYTES * 2 + 1] = {0}; if (!serial_number[0]) { pico_get_unique_board_id_string(serial_number, sizeof(serial_number)); } if (index == 0) { memcpy(&_desc_str[1], string_desc_arr[0], 2); chr_count = 1; } else { // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) return NULL; const char *str = (index == STRID_SERIAL) ? serial_number : string_desc_arr[index]; // Cap at max char chr_count = strlen(str); if (chr_count > 31) chr_count = 31; // Convert ASCII string into UTF-16 for (uint8_t i = 0; i < chr_count; i++) { _desc_str[1 + i] = str[i]; } } // first byte is length (including header), second byte is string type _desc_str[0] = (TUSB_DESC_STRING << 8) | (2 * chr_count + 2); return _desc_str; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ #define EPNUM_HID 0x81 #define EPNUM_HID_REL_M 0x82 #define EPNUM_HID_VENDOR 0x83 #define EPNUM_MSC_OUT 0x04 #define EPNUM_MSC_IN 0x84 #ifndef DH_DEBUG #define ITF_NUM_TOTAL 2 #define ITF_NUM_TOTAL_CONFIG 4 #define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + 2 * TUD_HID_DESC_LEN) #define CONFIG_TOTAL_LEN_CFG (TUD_CONFIG_DESC_LEN + 3 * TUD_HID_DESC_LEN + TUD_MSC_DESC_LEN) #else #define ITF_NUM_CDC 4 #define ITF_NUM_TOTAL 3 #define ITF_NUM_TOTAL_CONFIG 5 #define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + 2 * TUD_HID_DESC_LEN + TUD_CDC_DESC_LEN) #define CONFIG_TOTAL_LEN_CFG (TUD_CONFIG_DESC_LEN + 3 * TUD_HID_DESC_LEN + TUD_MSC_DESC_LEN + TUD_CDC_DESC_LEN) #define EPNUM_CDC_NOTIF 0x85 #define EPNUM_CDC_OUT 0x06 #define EPNUM_CDC_IN 0x86 #endif uint8_t const desc_configuration[] = { // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 500), // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval TUD_HID_DESCRIPTOR(ITF_NUM_HID, STRID_PRODUCT, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 1), TUD_HID_DESCRIPTOR(ITF_NUM_HID_REL_M, STRID_MOUSE, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report_relmouse), EPNUM_HID_REL_M, CFG_TUD_HID_EP_BUFSIZE, 1), #ifdef DH_DEBUG // Interface number, string index, EP notification address and size, EP data address (out, in) and size. TUD_CDC_DESCRIPTOR( ITF_NUM_CDC, STRID_DEBUG, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, CFG_TUD_CDC_EP_BUFSIZE), #endif }; uint8_t const desc_configuration_config[] = { // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL_CONFIG, 0, CONFIG_TOTAL_LEN_CFG, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 500), // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval TUD_HID_DESCRIPTOR(ITF_NUM_HID, STRID_PRODUCT, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 1), TUD_HID_DESCRIPTOR(ITF_NUM_HID_REL_M, STRID_MOUSE, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report_relmouse), EPNUM_HID_REL_M, CFG_TUD_HID_EP_BUFSIZE, 1), TUD_HID_DESCRIPTOR(ITF_NUM_HID_VENDOR, STRID_VENDOR, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report_vendor), EPNUM_HID_VENDOR, CFG_TUD_HID_EP_BUFSIZE, 1), TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, STRID_DISK, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), #ifdef DH_DEBUG // Interface number, string index, EP notification address and size, EP data address (out, in) and size. TUD_CDC_DESCRIPTOR( ITF_NUM_CDC, STRID_DEBUG, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, CFG_TUD_CDC_EP_BUFSIZE), #endif }; uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { (void)index; // for multiple configurations if (global_state.config_mode_active) return desc_configuration_config; else return desc_configuration; } ================================================ FILE: src/utils.c ================================================ /* * This file is part of DeskHop (https://github.com/hrvach/deskhop). * Copyright (c) 2025 Hrvoje Cavrak * * This program 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, version 3. * * See the file LICENSE for the full license text. */ #include "main.h" /* ================================================== * * ============== Checksum Functions ============== * * ================================================== */ uint8_t calc_checksum(const uint8_t *data, int length) { uint8_t checksum = 0; for (int i = 0; i < length; i++) { checksum ^= data[i]; } return checksum; } bool verify_checksum(const uart_packet_t *packet) { uint8_t checksum = calc_checksum(packet->data, PACKET_DATA_LENGTH); return checksum == packet->checksum; } uint32_t crc32_iter(uint32_t crc, const uint8_t byte) { return crc32_lookup_table[(byte ^ crc) & 0xff] ^ (crc >> 8); } /* TODO - use DMA sniffer's built-in CRC32 */ uint32_t calc_crc32(const uint8_t *s, size_t n) { uint32_t crc = 0xffffffff; for(size_t i=0; i < n; i++) { crc = crc32_iter(crc, s[i]); } return ~crc; } uint32_t calculate_firmware_crc32(void) { return calc_crc32(ADDR_FW_RUNNING, STAGING_IMAGE_SIZE - FLASH_SECTOR_SIZE); } /* ================================================== * * Flash and config functions * ================================================== */ void wipe_config(void) { uint32_t ints = save_and_disable_interrupts(); flash_range_erase((uint32_t)ADDR_CONFIG - XIP_BASE, FLASH_SECTOR_SIZE); restore_interrupts(ints); } void write_flash_page(uint32_t target_addr, uint8_t *buffer) { /* Start of sector == first 256-byte page in a 4096 byte block */ bool is_sector_start = (target_addr & 0xf00) == 0; uint32_t ints = save_and_disable_interrupts(); if (is_sector_start) flash_range_erase(target_addr, FLASH_SECTOR_SIZE); flash_range_program(target_addr, buffer, FLASH_PAGE_SIZE); restore_interrupts(ints); } void load_config(device_t *state) { const config_t *config = ADDR_CONFIG; config_t *running_config = &state->config; /* Load the flash config first, including the checksum */ memcpy(running_config, config, sizeof(config_t)); /* Calculate and update checksum, size without checksum */ uint8_t checksum = calc_crc32((uint8_t *)running_config, sizeof(config_t) - sizeof(uint32_t)); /* We expect a certain byte to start the config header */ bool magic_header_fail = (running_config->magic_header != 0xB00B1E5); /* We expect the checksum to match */ bool checksum_fail = (running_config->checksum != checksum); /* We expect the config version to match exactly, to avoid erroneous values */ bool version_fail = (running_config->version != CURRENT_CONFIG_VERSION); /* On any condition failing, we fall back to default config */ if (magic_header_fail || checksum_fail || version_fail) memcpy(running_config, &default_config, sizeof(config_t)); } void save_config(device_t *state) { uint8_t *raw_config = (uint8_t *)&state->config; /* Calculate and update checksum, size without checksum */ uint8_t checksum = calc_crc32(raw_config, sizeof(config_t) - sizeof(uint32_t)); state->config.checksum = checksum; /* Copy the config to buffer and pad the rest with zeros */ memcpy(state->page_buffer, raw_config, sizeof(config_t)); memset(state->page_buffer + sizeof(config_t), 0, FLASH_PAGE_SIZE - sizeof(config_t)); /* Write the new config to flash */ write_flash_page((uint32_t)ADDR_CONFIG - XIP_BASE, state->page_buffer); } void reset_config_timer(device_t *state) { /* Once this is reached, we leave the config mode */ state->config_mode_timer = time_us_64() + CONFIG_MODE_TIMEOUT; } void _configure_flash_cs(enum gpio_override gpo, uint pin_index) { hw_write_masked(&ioqspi_hw->io[pin_index].ctrl, gpo << IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_LSB, IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_BITS); } bool is_bootsel_pressed(void) { const uint CS_PIN_INDEX = 1; uint32_t flags = save_and_disable_interrupts(); /* Set chip select to high impedance */ _configure_flash_cs(GPIO_OVERRIDE_LOW, CS_PIN_INDEX); sleep_us(20); /* Button pressed pulls pin DOWN, so invert */ bool button_pressed = !(sio_hw->gpio_hi_in & (1u << CS_PIN_INDEX)); /* Restore chip select state */ _configure_flash_cs(GPIO_OVERRIDE_NORMAL, CS_PIN_INDEX); restore_interrupts(flags); return button_pressed; } void request_byte(device_t *state, uint32_t address) { uart_packet_t packet = { .data32[0] = address, .type = REQUEST_BYTE_MSG, }; state->fw.byte_done = false; queue_try_add(&global_state.uart_tx_queue, &packet); } void reboot(void) { *((volatile uint32_t*)(PPB_BASE + 0x0ED0C)) = 0x5FA0004; } bool is_start_of_packet(device_t *state) { return (uart_rxbuf[state->dma_ptr] == START1 && uart_rxbuf[NEXT_RING_IDX(state->dma_ptr)] == START2); } uint32_t get_ptr_delta(uint32_t current_pointer, device_t *state) { uint32_t delta; if (current_pointer >= state->dma_ptr) delta = current_pointer - state->dma_ptr; else delta = DMA_RX_BUFFER_SIZE - state->dma_ptr + current_pointer; /* Clamp to 12 bits since it can never be bigger */ delta = delta & 0x3FF; return delta; } void fetch_packet(device_t *state) { uint8_t *dst = (uint8_t *)&state->in_packet; for (int i = 0; i < RAW_PACKET_LENGTH; i++) { /* Skip the header preamble */ if (i >= START_LENGTH) dst[i - START_LENGTH] = uart_rxbuf[state->dma_ptr]; state->dma_ptr = NEXT_RING_IDX(state->dma_ptr); } } /* Validating any input is mandatory. Only packets of these type are allowed to be sent to the device over configuration endpoint. */ bool validate_packet(uart_packet_t *packet) { const enum packet_type_e ALLOWED_PACKETS[] = { FLASH_LED_MSG, GET_VAL_MSG, GET_ALL_VALS_MSG, SET_VAL_MSG, WIPE_CONFIG_MSG, SAVE_CONFIG_MSG, REBOOT_MSG, PROXY_PACKET_MSG, }; uint8_t packet_type = packet->type; /* Proxied packets are encapsulated in the data field, but same rules apply */ if (packet->type == PROXY_PACKET_MSG) packet_type = packet->data[0]; for (int i = 0; i < ARRAY_SIZE(ALLOWED_PACKETS); i++) { if (ALLOWED_PACKETS[i] == packet_type) return true; } return false; } /* ================================================== * * Debug functions * ================================================== */ #ifdef DH_DEBUG // Based on: https://github.com/raspberrypi/pico-sdk/blob/a1438dff1d38bd9c65dbd693f0e5db4b9ae91779/src/rp2_common/pico_stdio_usb/stdio_usb.c#L100-L130 static void cdc_write_str(const char *str) { int str_len = strlen(str); if (!tud_cdc_connected()) return; uint64_t last_write_time = time_us_64(); for (int bytes_written = 0; bytes_written < str_len;) { int bytes_remaining = str_len - bytes_written; int available_space = (int)tud_cdc_write_available(); int chunk_size = (bytes_remaining < available_space) ? bytes_remaining : available_space; if (chunk_size > 0) { int written = (int)tud_cdc_write(str + bytes_written, (uint32_t)chunk_size); tud_task(); tud_cdc_write_flush(); bytes_written += written; last_write_time = time_us_64(); } else { tud_task(); tud_cdc_write_flush(); /* Timeout after 1ms if buffer stays full or connection lost */ if (!tud_cdc_connected() || (time_us_64() > last_write_time + 1000)) break; } } } int dh_debug_printf(const char *format, ...) { va_list args; va_start(args, format); char buffer[512]; int string_len = vsnprintf(buffer, 512, format, args); cdc_write_str(buffer); tud_cdc_write_flush(); va_end(args); return string_len; } #else int dh_debug_printf(const char *format, ...) { return 0; } #endif ================================================ FILE: webconfig/.gitignore ================================================ __pycache__ /venv/ ================================================ FILE: webconfig/Makefile ================================================ render: python3 -B render.py ================================================ FILE: webconfig/config-unpacked.htm ================================================ DeskHop Config

DeskHop Config

Output A






Output B






Common Config

Device Status

================================================ FILE: webconfig/config.htm ================================================ ================================================ FILE: webconfig/form.py ================================================ #!/usr/bin/python3 from dataclasses import dataclass, field @dataclass class FormField: offset: int name: str default: int | None = None values: dict[int, str] = field(default_factory=dict) data_type: str = "int32" elem: str | None = None SHORTCUTS = { 0x73: "None", 0x2A: "Backspace", 0x39: "Caps Lock", 0x2B: "Tab", 0x46: "Print Screen", 0x47: "Scroll Lock", 0x53: "Num Lock", } STATUS_ = [ FormField(78, "Running FW version", None, {}, "uint16", elem="fw_version"), FormField(79, "Running FW checksum", None, {}, "uint32", elem="hex_info"), ] CONFIG_ = [ FormField(1001, "Mouse", elem="label"), FormField(71, "Force Mouse Boot Mode", None, {}, "uint8", "checkbox"), FormField(75, "Enable Acceleration", None, {}, "uint8", "checkbox"), FormField(77, "Jump Threshold", 0, {"min": 0, "max": 3000}, "uint16", "range"), FormField(1002, "Keyboard", elem="label"), FormField(72, "Force KBD Boot Protocol", None, {}, "uint8", "checkbox"), FormField(73, "KBD LED as Indicator", None, {}, "uint8", "checkbox"), FormField(76, "Enforce Ports", None, {}, "uint8", "checkbox"), ] OUTPUT_ = [ FormField(1, "Screen Count", 1, {1: "1", 2: "2", 3: "3"}, "uint32"), FormField(2, "Speed X", 16, {"min": 1, "max": 100}, "int32", "range"), FormField(3, "Speed Y", 16, {"min": 1, "max": 100}, "int32", "range"), FormField(4, "Border Top", None, {}, "int32"), FormField(5, "Border Bottom", None, {}, "int32"), FormField(6, "Operating System", 1, {1: "Linux", 2: "MacOS", 3: "Windows", 4: "Android", 255: "Other"}, "uint8"), FormField(7, "Screen Position", 1, {1: "Left", 2: "Right"}, "uint8"), FormField(8, "Cursor Park Position", 0, {0: "Top", 1: "Bottom", 3: "Previous"}, "uint8"), FormField(1003, "Screensaver", elem="label"), FormField(9, "Mode", 0, {0: "Disabled", 1: "Pong", 2: "Jitter"}, "uint8"), FormField(10, "Only If Inactive", None, {}, "uint8", "checkbox"), FormField(11, "Idle Time (μs)", None, {}, "uint64"), FormField(12, "Max Time (μs)", None, {}, "uint64"), ] def generate_output(base, data): output = [ { "name": field.name, "key": base + field.offset, "default": field.default, "values": field.values, "type": field.data_type, "elem": field.elem, } for field in data ] return output def output_A(base=10): return generate_output(base, data=OUTPUT_) def output_B(base=40): return generate_output(base, data=OUTPUT_) def output_status(): return generate_output(0, data=STATUS_) def output_config(): return generate_output(0, data=CONFIG_) ================================================ FILE: webconfig/render.py ================================================ #!/usr/bin/python3 # Takes a HTML file, outputs a minified and compressed version that self-decompresses when loaded. # This way, the device config page can be fitted in a small 64 kB "flash" partition and distributed # with the main binary. from jinja2 import Environment, FileSystemLoader from form import * import base64 import zlib # Input and output TEMPLATE_PATH = "templates/" INPUT_FILENAME = "main.html" PACKER_FILENAME = "packer.j2" OUTPUT_FILENAME = "config.htm" OUTPUT_UNPACKED = "config-unpacked.htm" def render(filename, *args, **kwargs): env = Environment(loader=FileSystemLoader(TEMPLATE_PATH)) template = env.get_template(filename) return template.render(*args, **kwargs) def write_file(payload, filename=OUTPUT_FILENAME): with open(filename, 'w', encoding='utf-8') as file: file.write(payload) def encode_file(payload): # Compress using raw DEFLATE compressed_data = zlib.compress(payload.encode('utf-8'))[2:-4] # Encode to base64 base64_compressed_data = base64.b64encode(compressed_data).decode('utf-8') return base64_compressed_data if __name__ == "__main__": # Read main template contents webpage = render( INPUT_FILENAME, screen_A=output_A(), screen_B=output_B(), status=output_status(), config=output_config(), ) # Compress file and encode to base64 encoded_data = {'payload': encode_file(webpage)} # Tiny Inflate JS decoder (https://github.com/foliojs/tiny-inflate) # Decompress the data and replace existing HTML with the decoded version self_extracting_webpage = render(PACKER_FILENAME, encoded_data) # Write data to output filename write_file(self_extracting_webpage) # Write unpacked webpage write_file(webpage, OUTPUT_UNPACKED) ================================================ FILE: webconfig/requirements.txt ================================================ Jinja2==3.1.4 MarkupSafe==2.1.5 ================================================ FILE: webconfig/templates/form.html ================================================ {# templates/form.html #} {% set key = item.key %} {% macro input(item, type='text', class='api', name='name') %} {{ item.name }}{{ add }} {% endmacro %} {% block form_render %} {% if item.get("elem") == "hex_info" %} {{ label(item, add=':') }} {{ input(item, class='content api') }} data-hex readonly /> {% elif item.get("elem") == "fw_version" %} {{ label(item, class='') }} {{ input(item) }} data-fw-ver readonly /> {% elif item.get("elem") == "label" %} {{ label(item, class='') }} {% elif item.get("elem") == "range" %}
{{ label(item, add='=') }} {{ input(item, class='input-inline', type='number', name='aInput') }} readonly oninput="this.form.aRange{{ key }}.value=this.value" /> {{ input(item, class='range api', type='range', name='aRange') }} min="{{ item['values'].min }}" max="{{ item['values'].max }}" oninput="this.form.aInput{{key}}.value=this.value" />
{% elif item.get("elem") == "checkbox" %}
{{ label(item) }} {{ input(item, type="checkbox") }} />
{% elif item["values"] %} {{ label(item, class='') }}
{% else %} {{ label(item, class='') }} {{ input(item) }} /> {% endif %} {% endblock %} ================================================ FILE: webconfig/templates/main.html ================================================ {# templates/main.j2 #} DeskHop Config

DeskHop Config

Output A

{% for item in screen_A %} {% include "form.html" with context %} {% endfor %}

Output B

{% for item in screen_B %} {% include "form.html" with context %} {% endfor %}

Common Config

{% for item in config %} {% include "form.html" with context %} {% endfor %}

Device Status

{% for item in status %} {% include "form.html" with context %} {% endfor %}
================================================ FILE: webconfig/templates/packer.j2 ================================================ {% raw %}{% endraw %} ================================================ FILE: webconfig/templates/script.js ================================================ const mgmtReportId = 6; var device; const packetType = { keyboardReportMsg: 1, mouseReportMsg: 2, outputSelectMsg: 3, firmwareUpgradeMsg: 4, switchLockMsg: 7, syncBordersMsg: 8, flashLedMsg: 9, wipeConfigMsg: 10, readConfigMsg: 16, writeConfigMsg: 17, saveConfigMsg: 18, rebootMsg: 19, getValMsg: 20, setValMsg: 21, getValAllMsg: 22, proxyPacketMsg: 23 }; function calcChecksum(report) { let checksum = 0; for (let i = 3; i < 11; i++) checksum ^= report[i]; return checksum; } async function sendReport(type, payload = [], sendBoth = false) { if (!device || !device.opened) return; /* First send this one, if the first one gets e.g. rebooted */ if (sendBoth) { var reportProxy = makeReport(type, payload, true); await device.sendReport(mgmtReportId, reportProxy); } var report = makeReport(type, payload, false); await device.sendReport(mgmtReportId, report); } function makeReport(type, payload, proxy=false) { var dataOffset = proxy ? 4 : 3; report = new Uint8Array([0xaa, 0x55, type, ...new Array(9).fill(0)]); if (proxy) report = new Uint8Array([0xaa, 0x55, packetType.proxyPacketMsg, type, ...new Array(7).fill(0), type]); if (payload) { report.set([...payload], dataOffset); report[report.length - 1] = calcChecksum(report); } return report; } function packValue(element, key, dataType, buffer) { const dataOffset = 1; var buffer = new ArrayBuffer(8); var view = new DataView(buffer); const methods = { "uint32": view.setUint32, "uint64": view.setUint32, /* Yes, I know. :-| */ "int32": view.setInt32, "uint16": view.setUint16, "uint8": view.setUint8, "int16": view.setInt16, "int8": view.setInt8 }; if (dataType in methods) { const method = methods[dataType]; if (element.type === 'checkbox') view.setUint8(dataOffset, element.checked ? 1 : 0, true); else method.call(view, dataOffset, element.value, true); } view.setUint8(0, key); return new Uint8Array(buffer); } window.addEventListener('load', function () { if (!("hid" in navigator)) { document.getElementById('warning').style.display = 'block'; } this.document.getElementById('menu-buttons').addEventListener('click', function (event) { window[event.target.dataset.handler](); }) }); document.getElementById('submitButton').addEventListener('click', async () => { await saveHandler(); }); async function connectHandler() { if (device && device.opened) return; var devices = await navigator.hid.requestDevice({ filters: [{ vendorId: 0x2e8a, productId: 0x107c, usagePage: 0xff00, usage: 0x10 }] }); device = devices[0]; device.open().then(async () => { device.addEventListener('inputreport', handleInputReport); document.querySelectorAll('.online').forEach(element => { element.style.opacity = 1.0; }); await readHandler(); }); } async function blinkHandler() { await sendReport(packetType.flashLedMsg, []); } async function blinkBothHandler() { await sendReport(packetType.flashLedMsg, [], true); } function getValue(element) { if (element.type === 'checkbox') return element.checked ? 1 : 0; else return element.value; } function setValue(element, value) { element.setAttribute('fetched-value', value); if (element.type === 'checkbox') element.checked = value; else element.value = value; element.dispatchEvent(new Event('input', { bubbles: true })); } function updateElement(key, event) { var dataOffset = 4; var element = document.querySelector(`[data-key="${key}"]`); if (!element) return; const methods = { "uint32": event.data.getUint32, "uint64": event.data.getUint32, /* Yes, I know. :-| */ "int32": event.data.getInt32, "uint16": event.data.getUint16, "uint8": event.data.getUint8, "int16": event.data.getInt16, "int8": event.data.getInt8 }; dataType = element.getAttribute('data-type'); if (dataType in methods) { var value = methods[dataType].call(event.data, dataOffset, true); setValue(element, value); if (element.hasAttribute('data-hex')) setValue(element, parseInt(value).toString(16)); if (element.hasAttribute('data-fw-ver')) { /* u16 version = major * 1000 + minor + 100; */ const major = Math.floor((value - 100) / 1000); const minor = (value - 100) % 1000; setValue(element, `v${major}.${minor}`); } } } async function readHandler() { if (!device || !device.opened) await connectHandler(); await sendReport(packetType.getValAllMsg); } async function handleInputReport(event) { var data = new Uint8Array(event.data.buffer); var key = data[3]; updateElement(key, event); } async function rebootHandler() { await sendReport(packetType.rebootMsg); } async function enterBootloaderHandler() { await sendReport(packetType.firmwareUpgradeMsg, true, true); } async function valueChangedHandler(element) { var key = element.getAttribute('data-key'); var dataType = element.getAttribute('data-type'); var origValue = element.getAttribute('fetched-value'); var newValue = getValue(element); if (origValue != newValue) { uintBuffer = packValue(element, key, dataType); /* Send to both devices */ await sendReport(packetType.setValMsg, uintBuffer, true); /* Set this as the current value */ element.setAttribute('fetched-value', newValue); } } async function saveHandler() { const elements = document.querySelectorAll('.api'); if (!device || !device.opened) return; for (const element of elements) { var origValue = element.getAttribute('fetched-value') if (element.hasAttribute('readonly')) continue; if (origValue != getValue(element)) await valueChangedHandler(element); } await sendReport(packetType.saveConfigMsg, [], true); } async function wipeConfigHandler() { await sendReport(packetType.wipeConfigMsg, [], true); } ================================================ FILE: webconfig/templates/style.css ================================================ /*! * Milligram v1.4.1 * https://milligram.io * * Copyright (c) 2020 CJ Patoilo * Licensed under the MIT license */ *, *:after, *:before { box-sizing: inherit; } :root { --highlight-color: #384955; --font-color: #384955; --highlight-color2: #5e9f41; } html { box-sizing: border-box; font-size: 62.5%; } body { color: var(--font-color); font-family: 'Roboto', 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; font-size: 1.6em; font-weight: 300; letter-spacing: .01em; line-height: 1.6; } blockquote { border-left: 0.3rem solid #384955; margin-left: 0; margin-right: 0; padding: 1rem 1.5rem; } blockquote *:last-child { margin-bottom: 0; } .button, button, input[type='button'], input[type='reset'], input[type='submit'] { background-color: var(--highlight-color); border: 0.1rem solid var(--highlight-color); border-radius: .4rem; color: #fff; cursor: pointer; display: inline-block; font-size: 1.1rem; font-weight: 700; height: 3.8rem; letter-spacing: .1rem; line-height: 3.8rem; padding: 0.0rem 2.0rem; text-align: center; text-decoration: none; text-transform: uppercase; white-space: nowrap; } .button:focus, .button:hover, button:focus, button:hover, input[type='button']:focus, input[type='button']:hover, input[type='reset']:focus, input[type='reset']:hover, input[type='submit']:focus, input[type='submit']:hover { background-color: var(--highlight-color2); border-color: var(--highlight-color2); color: #fff; outline: 0; } .button[disabled], button[disabled], input[type='button'][disabled], input[type='reset'][disabled], input[type='submit'][disabled] { cursor: default; opacity: .5; } .button[disabled]:focus, .button[disabled]:hover, button[disabled]:focus, button[disabled]:hover, input[type='button'][disabled]:focus, input[type='button'][disabled]:hover, input[type='reset'][disabled]:focus, input[type='reset'][disabled]:hover, input[type='submit'][disabled]:focus, input[type='submit'][disabled]:hover { background-color: var(--highlight-color); border-color: var(--highlight-color); } .button.button-outline, button.button-outline, input[type='button'].button-outline, input[type='reset'].button-outline, input[type='submit'].button-outline { background-color: transparent; color: var(--highlight-color); } .button.button-outline:focus, .button.button-outline:hover, button.button-outline:focus, button.button-outline:hover, input[type='button'].button-outline:focus, input[type='button'].button-outline:hover, input[type='reset'].button-outline:focus, input[type='reset'].button-outline:hover, input[type='submit'].button-outline:focus, input[type='submit'].button-outline:hover { background-color: transparent; border-color: var(--highlight-color2); color: var(--highlight-color2); } .button.button-outline[disabled]:focus, .button.button-outline[disabled]:hover, button.button-outline[disabled]:focus, button.button-outline[disabled]:hover, input[type='button'].button-outline[disabled]:focus, input[type='button'].button-outline[disabled]:hover, input[type='reset'].button-outline[disabled]:focus, input[type='reset'].button-outline[disabled]:hover, input[type='submit'].button-outline[disabled]:focus, input[type='submit'].button-outline[disabled]:hover { border-color: inherit; color: var(--highlight-color); } .button.button-clear, button.button-clear, input[type='button'].button-clear, input[type='reset'].button-clear, input[type='submit'].button-clear { background-color: transparent; border-color: transparent; color: var(--highlight-color); } .button.button-clear:focus, .button.button-clear:hover, button.button-clear:focus, button.button-clear:hover, input[type='button'].button-clear:focus, input[type='button'].button-clear:hover, input[type='reset'].button-clear:focus, input[type='reset'].button-clear:hover, input[type='submit'].button-clear:focus, input[type='submit'].button-clear:hover { background-color: transparent; border-color: transparent; color: var(--highlight-color2); } .button.button-clear[disabled]:focus, .button.button-clear[disabled]:hover, button.button-clear[disabled]:focus, button.button-clear[disabled]:hover, input[type='button'].button-clear[disabled]:focus, input[type='button'].button-clear[disabled]:hover, input[type='reset'].button-clear[disabled]:focus, input[type='reset'].button-clear[disabled]:hover, input[type='submit'].button-clear[disabled]:focus, input[type='submit'].button-clear[disabled]:hover { color: var(--highlight-color); } .button.button-shifted { margin-left: 10%; } code { background: #f4f5f6; border-radius: .4rem; font-size: 86%; margin: 0 .2rem; padding: .2rem .5rem; white-space: nowrap; } pre { background: #f4f5f6; border-left: 0.3rem solid var(--highlight-color); overflow-y: hidden; } pre > code { border-radius: 0; display: block; padding: 1rem 1.5rem; white-space: pre; } hr { border: 0; border-top: 0.1rem dotted lightblue; margin: 1.0rem 3.0rem; } input[type='color'], input[type='date'], input[type='datetime'], input[type='datetime-local'], input[type='email'], input[type='month'], input[type='password'], input[type='search'], input[type='number'], input[type='tel'], input[type='text'], input[type='url'], input[type='week'], input:not([type]), textarea, select { -webkit-appearance: none; background-color: transparent; border: 0.1rem solid #d1d1d1; border-radius: .4rem; box-shadow: none; box-sizing: inherit; height: 3.8rem; padding: .6rem 1.0rem .7rem; width: 100%; } input[type='color']:focus, input[type='date']:focus, input[type='datetime']:focus, input[type='datetime-local']:focus, input[type='email']:focus, input[type='month']:focus, input[type='number']:focus, input[type='password']:focus, input[type='search']:focus, input[type='tel']:focus, input[type='text']:focus, input[type='url']:focus, input[type='week']:focus, input:not([type]):focus, textarea:focus, select:focus { border-color: var(--highlight-color); outline: 0; } select { background: url('data:image/svg+xml;utf8,') center right no-repeat; padding-right: 3.0rem; } select:focus { background-image: url('data:image/svg+xml;utf8,'); } select[multiple] { background: none; height: auto; } textarea { min-height: 6.5rem; } label, legend { display: block; font-size: 1.6rem; font-weight: 700; margin-bottom: .5rem; } fieldset { border-width: 0; padding: 0; } input[type='checkbox'], input[type='radio'] { display: inline; } .label-inline { display: inline-block; font-weight: normal; margin-left: .5rem; } .label-inline-bold { display: inline-block; font-size: 1.6rem; font-weight: 700; } input[type='range'].input-inline, input[type='number'].input-inline { display: inline-block; font-weight: normal; border: none; width: 20%; } .range { width: 100%; } .container { margin: 0 auto; max-width: 112.0rem; padding: 0 2.0rem; position: relative; width: 100%; } .row { display: flex; flex-direction: column; padding: 0; width: 100%; } .row.row-no-padding { padding: 0; } .row.row-no-padding > .column { padding: 0; } .row.row-wrap { flex-wrap: wrap; } .row.row-top { align-items: flex-start; } .row.row-bottom { align-items: flex-end; } .row.row-center { align-items: center; } .row.row-stretch { align-items: stretch; } .row.row-baseline { align-items: baseline; } .row .column { display: block; flex: 1 1 auto; margin-left: 0; max-width: 100%; width: 100%; } .row .column.column-offset-10 { margin-left: 10%; } .row .column.column-offset-20 { margin-left: 20%; } .row .column.column-offset-25 { margin-left: 25%; } .row .column.column-offset-33, .row .column.column-offset-34 { margin-left: 33.3333%; } .row .column.column-offset-40 { margin-left: 40%; } .row .column.column-offset-50 { margin-left: 50%; } .row .column.column-offset-60 { margin-left: 60%; } .row .column.column-offset-66, .row .column.column-offset-67 { margin-left: 66.6666%; } .row .column.column-offset-75 { margin-left: 75%; } .row .column.column-offset-80 { margin-left: 80%; } .row .column.column-offset-90 { margin-left: 90%; } .row .column.column-10 { flex: 0 0 10%; max-width: 10%; } .row .column.column-20 { flex: 0 0 20%; max-width: 20%; } .row .column.column-25 { flex: 0 0 25%; max-width: 25%; } .row .column.column-33, .row .column.column-34 { flex: 0 0 33.3333%; max-width: 33.3333%; } .row .column.column-40 { flex: 0 0 40%; max-width: 40%; } .row .column.column-50 { flex: 0 0 50%; max-width: 50%; } .row .column.column-60 { flex: 0 0 60%; max-width: 60%; } .row .column.column-66, .row .column.column-67 { flex: 0 0 66.6666%; max-width: 66.6666%; } .row .column.column-75 { flex: 0 0 75%; max-width: 75%; } .row .column.column-80 { flex: 0 0 80%; max-width: 80%; } .row .column.column-90 { flex: 0 0 90%; max-width: 90%; } .row .column .column-top { align-self: flex-start; } .row .column .column-bottom { align-self: flex-end; } .row .column .column-center { align-self: center; } @media (min-width: 40rem) { .row { flex-direction: row; width: calc(100% + 2.0rem); } .row .column { margin-bottom: inherit; padding: 0 1.0rem; } } a { color: var(--highlight-color); text-decoration: none; } a:focus, a:hover { color: var(--highlight-color2); } dl, ol, ul { list-style: none; margin-top: 0; padding-left: 0; } dl dl, dl ol, dl ul, ol dl, ol ol, ol ul, ul dl, ul ol, ul ul { font-size: 90%; margin: 1.5rem 0 1.5rem 3.0rem; } ol { list-style: decimal inside; } ul { list-style: circle inside; } .button, button, dd, dt, li { margin-bottom: 1.0rem; } fieldset, input, select, textarea { margin-bottom: 1.5rem; } blockquote, dl, figure, form, ol, p, pre, table, ul { margin-bottom: 2.5rem; } table { border-spacing: 0; display: block; overflow-x: auto; text-align: left; width: 100%; } td, th { border-bottom: 0.1rem solid #e1e1e1; padding: 1.2rem 1.5rem; } td:first-child, th:first-child { padding-left: 0; } td:last-child, th:last-child { padding-right: 0; } @media (min-width: 40rem) { table { display: table; overflow-x: initial; } } b, strong { font-weight: bold; } p { margin-top: 0; } h1, h2, h3, h4, h5, h6 { font-weight: 300; letter-spacing: -.1rem; margin-bottom: 2.0rem; margin-top: 0; } h1 { font-size: 4.6rem; line-height: 1.2; } h2 { font-size: 3.6rem; line-height: 1.25; } h3 { font-size: 2.8rem; line-height: 1.3; } h4 { font-size: 2.2rem; letter-spacing: -.08rem; line-height: 1.35; } h5 { font-size: 1.8rem; letter-spacing: -.05rem; line-height: 1.5; } h6 { font-size: 1.6rem; letter-spacing: 0; line-height: 1.4; } img { max-width: 100%; } .clearfix:after { clear: both; content: ' '; display: table; } .float-left { float: left; } .float-right { float: right; } .online { opacity: 0.5; }